// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/privacy/dlp/v2beta2/dlp.proto

/*
Package dlp is a generated protocol buffer package.

It is generated from these files:
	google/privacy/dlp/v2beta2/dlp.proto
	google/privacy/dlp/v2beta2/storage.proto

It has these top-level messages:
	InspectConfig
	ContentItem
	Table
	InspectResult
	Finding
	Location
	TableLocation
	Range
	ImageLocation
	RedactImageRequest
	Color
	RedactImageResponse
	DeidentifyContentRequest
	DeidentifyContentResponse
	ReidentifyContentRequest
	ReidentifyContentResponse
	InspectContentRequest
	InspectContentResponse
	InspectDataSourceRequest
	OutputStorageConfig
	InfoTypeStatistics
	InspectDataSourceDetails
	InfoTypeDescription
	ListInfoTypesRequest
	ListInfoTypesResponse
	AnalyzeDataSourceRiskRequest
	RiskAnalysisJobConfig
	PrivacyMetric
	AnalyzeDataSourceRiskDetails
	ValueFrequency
	Value
	DeidentifyConfig
	PrimitiveTransformation
	TimePartConfig
	CryptoHashConfig
	ReplaceValueConfig
	ReplaceWithInfoTypeConfig
	RedactConfig
	CharsToIgnore
	CharacterMaskConfig
	FixedSizeBucketingConfig
	BucketingConfig
	CryptoReplaceFfxFpeConfig
	CryptoKey
	TransientCryptoKey
	UnwrappedCryptoKey
	KmsWrappedCryptoKey
	InfoTypeTransformations
	FieldTransformation
	RecordTransformations
	RecordSuppression
	RecordCondition
	TransformationOverview
	TransformationSummary
	InspectTemplate
	DeidentifyTemplate
	CreateInspectTemplateRequest
	UpdateInspectTemplateRequest
	GetInspectTemplateRequest
	ListInspectTemplatesRequest
	ListInspectTemplatesResponse
	DeleteInspectTemplateRequest
	InspectJobConfig
	DlpJob
	GetDlpJobRequest
	ListDlpJobsRequest
	ListDlpJobsResponse
	CancelDlpJobRequest
	DeleteDlpJobRequest
	CreateDeidentifyTemplateRequest
	UpdateDeidentifyTemplateRequest
	GetDeidentifyTemplateRequest
	ListDeidentifyTemplatesRequest
	ListDeidentifyTemplatesResponse
	DeleteDeidentifyTemplateRequest
	InfoType
	CustomInfoType
	FieldId
	PartitionId
	KindExpression
	DatastoreOptions
	CloudStorageOptions
	BigQueryOptions
	StorageConfig
	CloudStorageKey
	DatastoreKey
	Key
	RecordKey
	BigQueryTable
	EntityId
*/
package dlp

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import _ "google.golang.org/genproto/googleapis/api/annotations"
import _ "github.com/golang/protobuf/ptypes/duration"
import google_protobuf3 "github.com/golang/protobuf/ptypes/empty"
import google_protobuf4 "google.golang.org/genproto/protobuf/field_mask"
import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp"
import google_rpc "google.golang.org/genproto/googleapis/rpc/status"
import google_type "google.golang.org/genproto/googleapis/type/date"
import _ "google.golang.org/genproto/googleapis/type/dayofweek"
import google_type2 "google.golang.org/genproto/googleapis/type/timeofday"

import (
	context "golang.org/x/net/context"
	grpc "google.golang.org/grpc"
)

// 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.ProtoPackageIsVersion2 // please upgrade the proto package

// Parts of the APIs which use certain infoTypes.
type InfoTypeSupportedBy int32

const (
	InfoTypeSupportedBy_ENUM_TYPE_UNSPECIFIED InfoTypeSupportedBy = 0
	// Supported by the inspect operations.
	InfoTypeSupportedBy_INSPECT InfoTypeSupportedBy = 1
	// Supported by the risk analysis operations.
	InfoTypeSupportedBy_RISK_ANALYSIS InfoTypeSupportedBy = 2
)

var InfoTypeSupportedBy_name = map[int32]string{
	0: "ENUM_TYPE_UNSPECIFIED",
	1: "INSPECT",
	2: "RISK_ANALYSIS",
}
var InfoTypeSupportedBy_value = map[string]int32{
	"ENUM_TYPE_UNSPECIFIED": 0,
	"INSPECT":               1,
	"RISK_ANALYSIS":         2,
}

func (x InfoTypeSupportedBy) String() string {
	return proto.EnumName(InfoTypeSupportedBy_name, int32(x))
}
func (InfoTypeSupportedBy) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }

// Operators available for comparing the value of fields.
type RelationalOperator int32

const (
	RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED RelationalOperator = 0
	// Equal.
	RelationalOperator_EQUAL_TO RelationalOperator = 1
	// Not equal to.
	RelationalOperator_NOT_EQUAL_TO RelationalOperator = 2
	// Greater than.
	RelationalOperator_GREATER_THAN RelationalOperator = 3
	// Less than.
	RelationalOperator_LESS_THAN RelationalOperator = 4
	// Greater than or equals.
	RelationalOperator_GREATER_THAN_OR_EQUALS RelationalOperator = 5
	// Less than or equals.
	RelationalOperator_LESS_THAN_OR_EQUALS RelationalOperator = 6
	// Exists
	RelationalOperator_EXISTS RelationalOperator = 7
)

var RelationalOperator_name = map[int32]string{
	0: "RELATIONAL_OPERATOR_UNSPECIFIED",
	1: "EQUAL_TO",
	2: "NOT_EQUAL_TO",
	3: "GREATER_THAN",
	4: "LESS_THAN",
	5: "GREATER_THAN_OR_EQUALS",
	6: "LESS_THAN_OR_EQUALS",
	7: "EXISTS",
}
var RelationalOperator_value = map[string]int32{
	"RELATIONAL_OPERATOR_UNSPECIFIED": 0,
	"EQUAL_TO":                        1,
	"NOT_EQUAL_TO":                    2,
	"GREATER_THAN":                    3,
	"LESS_THAN":                       4,
	"GREATER_THAN_OR_EQUALS":          5,
	"LESS_THAN_OR_EQUALS":             6,
	"EXISTS":                          7,
}

func (x RelationalOperator) String() string {
	return proto.EnumName(RelationalOperator_name, int32(x))
}
func (RelationalOperator) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }

// An enum to represent the various type of DLP jobs.
type DlpJobType int32

const (
	DlpJobType_DLP_JOB_TYPE_UNSPECIFIED DlpJobType = 0
	// The job inspected Google Cloud for sensitive data.
	DlpJobType_INSPECT_JOB DlpJobType = 1
	// The job executed a Risk Analysis computation.
	DlpJobType_RISK_ANALYSIS_JOB DlpJobType = 2
)

var DlpJobType_name = map[int32]string{
	0: "DLP_JOB_TYPE_UNSPECIFIED",
	1: "INSPECT_JOB",
	2: "RISK_ANALYSIS_JOB",
}
var DlpJobType_value = map[string]int32{
	"DLP_JOB_TYPE_UNSPECIFIED": 0,
	"INSPECT_JOB":              1,
	"RISK_ANALYSIS_JOB":        2,
}

func (x DlpJobType) String() string {
	return proto.EnumName(DlpJobType_name, int32(x))
}
func (DlpJobType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }

type TimePartConfig_TimePart int32

const (
	TimePartConfig_TIME_PART_UNSPECIFIED TimePartConfig_TimePart = 0
	// [0-9999]
	TimePartConfig_YEAR TimePartConfig_TimePart = 1
	// [1-12]
	TimePartConfig_MONTH TimePartConfig_TimePart = 2
	// [1-31]
	TimePartConfig_DAY_OF_MONTH TimePartConfig_TimePart = 3
	// [1-7]
	TimePartConfig_DAY_OF_WEEK TimePartConfig_TimePart = 4
	// [1-52]
	TimePartConfig_WEEK_OF_YEAR TimePartConfig_TimePart = 5
	// [0-23]
	TimePartConfig_HOUR_OF_DAY TimePartConfig_TimePart = 6
)

var TimePartConfig_TimePart_name = map[int32]string{
	0: "TIME_PART_UNSPECIFIED",
	1: "YEAR",
	2: "MONTH",
	3: "DAY_OF_MONTH",
	4: "DAY_OF_WEEK",
	5: "WEEK_OF_YEAR",
	6: "HOUR_OF_DAY",
}
var TimePartConfig_TimePart_value = map[string]int32{
	"TIME_PART_UNSPECIFIED": 0,
	"YEAR":                  1,
	"MONTH":                 2,
	"DAY_OF_MONTH":          3,
	"DAY_OF_WEEK":           4,
	"WEEK_OF_YEAR":          5,
	"HOUR_OF_DAY":           6,
}

func (x TimePartConfig_TimePart) String() string {
	return proto.EnumName(TimePartConfig_TimePart_name, int32(x))
}
func (TimePartConfig_TimePart) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{33, 0} }

type CharsToIgnore_CommonCharsToIgnore int32

const (
	CharsToIgnore_COMMON_CHARS_TO_IGNORE_UNSPECIFIED CharsToIgnore_CommonCharsToIgnore = 0
	// 0-9
	CharsToIgnore_NUMERIC CharsToIgnore_CommonCharsToIgnore = 1
	// A-Z
	CharsToIgnore_ALPHA_UPPER_CASE CharsToIgnore_CommonCharsToIgnore = 2
	// a-z
	CharsToIgnore_ALPHA_LOWER_CASE CharsToIgnore_CommonCharsToIgnore = 3
	// US Punctuation, one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
	CharsToIgnore_PUNCTUATION CharsToIgnore_CommonCharsToIgnore = 4
	// Whitespace character, one of [ \t\n\x0B\f\r]
	CharsToIgnore_WHITESPACE CharsToIgnore_CommonCharsToIgnore = 5
)

var CharsToIgnore_CommonCharsToIgnore_name = map[int32]string{
	0: "COMMON_CHARS_TO_IGNORE_UNSPECIFIED",
	1: "NUMERIC",
	2: "ALPHA_UPPER_CASE",
	3: "ALPHA_LOWER_CASE",
	4: "PUNCTUATION",
	5: "WHITESPACE",
}
var CharsToIgnore_CommonCharsToIgnore_value = map[string]int32{
	"COMMON_CHARS_TO_IGNORE_UNSPECIFIED": 0,
	"NUMERIC":          1,
	"ALPHA_UPPER_CASE": 2,
	"ALPHA_LOWER_CASE": 3,
	"PUNCTUATION":      4,
	"WHITESPACE":       5,
}

func (x CharsToIgnore_CommonCharsToIgnore) String() string {
	return proto.EnumName(CharsToIgnore_CommonCharsToIgnore_name, int32(x))
}
func (CharsToIgnore_CommonCharsToIgnore) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor0, []int{38, 0}
}

// These are commonly used subsets of the alphabet that the FFX mode
// natively supports. In the algorithm, the alphabet is selected using
// the "radix". Therefore each corresponds to particular radix.
type CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet int32

const (
	CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 0
	// [0-9] (radix of 10)
	CryptoReplaceFfxFpeConfig_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 1
	// [0-9A-F] (radix of 16)
	CryptoReplaceFfxFpeConfig_HEXADECIMAL CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 2
	// [0-9A-Z] (radix of 36)
	CryptoReplaceFfxFpeConfig_UPPER_CASE_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 3
	// [0-9A-Za-z] (radix of 62)
	CryptoReplaceFfxFpeConfig_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 4
)

var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name = map[int32]string{
	0: "FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED",
	1: "NUMERIC",
	2: "HEXADECIMAL",
	3: "UPPER_CASE_ALPHA_NUMERIC",
	4: "ALPHA_NUMERIC",
}
var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value = map[string]int32{
	"FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED": 0,
	"NUMERIC":                  1,
	"HEXADECIMAL":              2,
	"UPPER_CASE_ALPHA_NUMERIC": 3,
	"ALPHA_NUMERIC":            4,
}

func (x CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) String() string {
	return proto.EnumName(CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, int32(x))
}
func (CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor0, []int{42, 0}
}

type RecordCondition_Expressions_LogicalOperator int32

const (
	RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED RecordCondition_Expressions_LogicalOperator = 0
	RecordCondition_Expressions_AND                          RecordCondition_Expressions_LogicalOperator = 1
)

var RecordCondition_Expressions_LogicalOperator_name = map[int32]string{
	0: "LOGICAL_OPERATOR_UNSPECIFIED",
	1: "AND",
}
var RecordCondition_Expressions_LogicalOperator_value = map[string]int32{
	"LOGICAL_OPERATOR_UNSPECIFIED": 0,
	"AND": 1,
}

func (x RecordCondition_Expressions_LogicalOperator) String() string {
	return proto.EnumName(RecordCondition_Expressions_LogicalOperator_name, int32(x))
}
func (RecordCondition_Expressions_LogicalOperator) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor0, []int{51, 2, 0}
}

// Possible outcomes of transformations.
type TransformationSummary_TransformationResultCode int32

const (
	TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED TransformationSummary_TransformationResultCode = 0
	TransformationSummary_SUCCESS                                TransformationSummary_TransformationResultCode = 1
	TransformationSummary_ERROR                                  TransformationSummary_TransformationResultCode = 2
)

var TransformationSummary_TransformationResultCode_name = map[int32]string{
	0: "TRANSFORMATION_RESULT_CODE_UNSPECIFIED",
	1: "SUCCESS",
	2: "ERROR",
}
var TransformationSummary_TransformationResultCode_value = map[string]int32{
	"TRANSFORMATION_RESULT_CODE_UNSPECIFIED": 0,
	"SUCCESS": 1,
	"ERROR":   2,
}

func (x TransformationSummary_TransformationResultCode) String() string {
	return proto.EnumName(TransformationSummary_TransformationResultCode_name, int32(x))
}
func (TransformationSummary_TransformationResultCode) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor0, []int{53, 0}
}

type DlpJob_JobState int32

const (
	DlpJob_JOB_STATE_UNSPECIFIED DlpJob_JobState = 0
	// The job has not yet started.
	DlpJob_PENDING DlpJob_JobState = 1
	// The job is currently running.
	DlpJob_RUNNING DlpJob_JobState = 2
	// The job is no longer running.
	DlpJob_DONE DlpJob_JobState = 3
	// The job was canceled before it could complete.
	DlpJob_CANCELED DlpJob_JobState = 4
	// The job had an error and did not complete.
	DlpJob_FAILED DlpJob_JobState = 5
)

var DlpJob_JobState_name = map[int32]string{
	0: "JOB_STATE_UNSPECIFIED",
	1: "PENDING",
	2: "RUNNING",
	3: "DONE",
	4: "CANCELED",
	5: "FAILED",
}
var DlpJob_JobState_value = map[string]int32{
	"JOB_STATE_UNSPECIFIED": 0,
	"PENDING":               1,
	"RUNNING":               2,
	"DONE":                  3,
	"CANCELED":              4,
	"FAILED":                5,
}

func (x DlpJob_JobState) String() string {
	return proto.EnumName(DlpJob_JobState_name, int32(x))
}
func (DlpJob_JobState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{63, 0} }

// Configuration description of the scanning process.
// When used with redactContent only info_types and min_likelihood are currently
// used.
type InspectConfig struct {
	// Restricts what info_types to look for. The values must correspond to
	// InfoType values returned by ListInfoTypes or found in documentation.
	// Empty info_types runs all enabled detectors.
	InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"`
	// Only returns findings equal or above this threshold. The default is
	// POSSIBLE.
	MinLikelihood Likelihood                   `protobuf:"varint,2,opt,name=min_likelihood,json=minLikelihood,enum=google.privacy.dlp.v2beta2.Likelihood" json:"min_likelihood,omitempty"`
	Limits        *InspectConfig_FindingLimits `protobuf:"bytes,3,opt,name=limits" json:"limits,omitempty"`
	// When true, a contextual quote from the data that triggered a finding is
	// included in the response; see Finding.quote.
	IncludeQuote bool `protobuf:"varint,4,opt,name=include_quote,json=includeQuote" json:"include_quote,omitempty"`
	// When true, excludes type information of the findings.
	ExcludeInfoTypes bool `protobuf:"varint,5,opt,name=exclude_info_types,json=excludeInfoTypes" json:"exclude_info_types,omitempty"`
	// Custom infoTypes provided by the user.
	CustomInfoTypes []*CustomInfoType `protobuf:"bytes,6,rep,name=custom_info_types,json=customInfoTypes" json:"custom_info_types,omitempty"`
}

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

func (m *InspectConfig) GetInfoTypes() []*InfoType {
	if m != nil {
		return m.InfoTypes
	}
	return nil
}

func (m *InspectConfig) GetMinLikelihood() Likelihood {
	if m != nil {
		return m.MinLikelihood
	}
	return Likelihood_LIKELIHOOD_UNSPECIFIED
}

func (m *InspectConfig) GetLimits() *InspectConfig_FindingLimits {
	if m != nil {
		return m.Limits
	}
	return nil
}

func (m *InspectConfig) GetIncludeQuote() bool {
	if m != nil {
		return m.IncludeQuote
	}
	return false
}

func (m *InspectConfig) GetExcludeInfoTypes() bool {
	if m != nil {
		return m.ExcludeInfoTypes
	}
	return false
}

func (m *InspectConfig) GetCustomInfoTypes() []*CustomInfoType {
	if m != nil {
		return m.CustomInfoTypes
	}
	return nil
}

type InspectConfig_FindingLimits struct {
	// Max number of findings that will be returned for each item scanned.
	MaxFindingsPerItem int32 `protobuf:"varint,1,opt,name=max_findings_per_item,json=maxFindingsPerItem" json:"max_findings_per_item,omitempty"`
	// Max total number of findings that will be returned per request/job.
	MaxFindingsPerRequest int32 `protobuf:"varint,2,opt,name=max_findings_per_request,json=maxFindingsPerRequest" json:"max_findings_per_request,omitempty"`
	// Configuration of findings limit given for specified infoTypes.
	MaxFindingsPerInfoType []*InspectConfig_FindingLimits_InfoTypeLimit `protobuf:"bytes,3,rep,name=max_findings_per_info_type,json=maxFindingsPerInfoType" json:"max_findings_per_info_type,omitempty"`
}

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

func (m *InspectConfig_FindingLimits) GetMaxFindingsPerItem() int32 {
	if m != nil {
		return m.MaxFindingsPerItem
	}
	return 0
}

func (m *InspectConfig_FindingLimits) GetMaxFindingsPerRequest() int32 {
	if m != nil {
		return m.MaxFindingsPerRequest
	}
	return 0
}

func (m *InspectConfig_FindingLimits) GetMaxFindingsPerInfoType() []*InspectConfig_FindingLimits_InfoTypeLimit {
	if m != nil {
		return m.MaxFindingsPerInfoType
	}
	return nil
}

// Max findings configuration per infoType, per content item or long
// running DlpJob.
type InspectConfig_FindingLimits_InfoTypeLimit struct {
	// Type of information the findings limit applies to. Only one limit per
	// info_type should be provided. If InfoTypeLimit does not have an
	// info_type, the DLP API applies the limit against all info_types that
	// are found but not specified in another InfoTypeLimit.
	InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"`
	// Max findings limit for the given infoType.
	MaxFindings int32 `protobuf:"varint,2,opt,name=max_findings,json=maxFindings" json:"max_findings,omitempty"`
}

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

func (m *InspectConfig_FindingLimits_InfoTypeLimit) GetInfoType() *InfoType {
	if m != nil {
		return m.InfoType
	}
	return nil
}

func (m *InspectConfig_FindingLimits_InfoTypeLimit) GetMaxFindings() int32 {
	if m != nil {
		return m.MaxFindings
	}
	return 0
}

// Container structure for the content to inspect.
type ContentItem struct {
	// Type of the content, as defined in Content-Type HTTP header.
	// Supported types are: all "text" types, octet streams, PNG images,
	// JPEG images.
	Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"`
	// Data of the item either in the byte array or UTF-8 string form.
	//
	// Types that are valid to be assigned to DataItem:
	//	*ContentItem_Data
	//	*ContentItem_Value
	//	*ContentItem_Table
	DataItem isContentItem_DataItem `protobuf_oneof:"data_item"`
}

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

type isContentItem_DataItem interface {
	isContentItem_DataItem()
}

type ContentItem_Data struct {
	Data []byte `protobuf:"bytes,2,opt,name=data,proto3,oneof"`
}
type ContentItem_Value struct {
	Value string `protobuf:"bytes,3,opt,name=value,oneof"`
}
type ContentItem_Table struct {
	Table *Table `protobuf:"bytes,4,opt,name=table,oneof"`
}

func (*ContentItem_Data) isContentItem_DataItem()  {}
func (*ContentItem_Value) isContentItem_DataItem() {}
func (*ContentItem_Table) isContentItem_DataItem() {}

func (m *ContentItem) GetDataItem() isContentItem_DataItem {
	if m != nil {
		return m.DataItem
	}
	return nil
}

func (m *ContentItem) GetType() string {
	if m != nil {
		return m.Type
	}
	return ""
}

func (m *ContentItem) GetData() []byte {
	if x, ok := m.GetDataItem().(*ContentItem_Data); ok {
		return x.Data
	}
	return nil
}

func (m *ContentItem) GetValue() string {
	if x, ok := m.GetDataItem().(*ContentItem_Value); ok {
		return x.Value
	}
	return ""
}

func (m *ContentItem) GetTable() *Table {
	if x, ok := m.GetDataItem().(*ContentItem_Table); ok {
		return x.Table
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*ContentItem) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _ContentItem_OneofMarshaler, _ContentItem_OneofUnmarshaler, _ContentItem_OneofSizer, []interface{}{
		(*ContentItem_Data)(nil),
		(*ContentItem_Value)(nil),
		(*ContentItem_Table)(nil),
	}
}

func _ContentItem_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*ContentItem)
	// data_item
	switch x := m.DataItem.(type) {
	case *ContentItem_Data:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		b.EncodeRawBytes(x.Data)
	case *ContentItem_Value:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.Value)
	case *ContentItem_Table:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.Table); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("ContentItem.DataItem has unexpected type %T", x)
	}
	return nil
}

func _ContentItem_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*ContentItem)
	switch tag {
	case 2: // data_item.data
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeRawBytes(true)
		m.DataItem = &ContentItem_Data{x}
		return true, err
	case 3: // data_item.value
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.DataItem = &ContentItem_Value{x}
		return true, err
	case 4: // data_item.table
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Table)
		err := b.DecodeMessage(msg)
		m.DataItem = &ContentItem_Table{msg}
		return true, err
	default:
		return false, nil
	}
}

func _ContentItem_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*ContentItem)
	// data_item
	switch x := m.DataItem.(type) {
	case *ContentItem_Data:
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.Data)))
		n += len(x.Data)
	case *ContentItem_Value:
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.Value)))
		n += len(x.Value)
	case *ContentItem_Table:
		s := proto.Size(x.Table)
		n += proto.SizeVarint(4<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Structured content to inspect. Up to 50,000 `Value`s per request allowed.
type Table struct {
	Headers []*FieldId   `protobuf:"bytes,1,rep,name=headers" json:"headers,omitempty"`
	Rows    []*Table_Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"`
}

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

func (m *Table) GetHeaders() []*FieldId {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *Table) GetRows() []*Table_Row {
	if m != nil {
		return m.Rows
	}
	return nil
}

type Table_Row struct {
	Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"`
}

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

func (m *Table_Row) GetValues() []*Value {
	if m != nil {
		return m.Values
	}
	return nil
}

// All the findings for a single scanned item.
type InspectResult struct {
	// List of findings for an item.
	Findings []*Finding `protobuf:"bytes,1,rep,name=findings" json:"findings,omitempty"`
	// If true, then this item might have more findings than were returned,
	// and the findings returned are an arbitrary subset of all findings.
	// The findings list might be truncated because the input items were too
	// large, or because the server reached the maximum amount of resources
	// allowed for a single API call. For best results, divide the input into
	// smaller batches.
	FindingsTruncated bool `protobuf:"varint,2,opt,name=findings_truncated,json=findingsTruncated" json:"findings_truncated,omitempty"`
}

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

func (m *InspectResult) GetFindings() []*Finding {
	if m != nil {
		return m.Findings
	}
	return nil
}

func (m *InspectResult) GetFindingsTruncated() bool {
	if m != nil {
		return m.FindingsTruncated
	}
	return false
}

// Represents a piece of potentially sensitive content.
type Finding struct {
	// The content that was found. Even if the content is not textual, it
	// may be converted to a textual representation here.
	// Provided if requested by the `InspectConfig`.
	Quote string `protobuf:"bytes,1,opt,name=quote" json:"quote,omitempty"`
	// The type of content that might have been found.
	// Provided if requested by the `InspectConfig`.
	InfoType *InfoType `protobuf:"bytes,2,opt,name=info_type,json=infoType" json:"info_type,omitempty"`
	// Estimate of how likely it is that the `info_type` is correct.
	Likelihood Likelihood `protobuf:"varint,3,opt,name=likelihood,enum=google.privacy.dlp.v2beta2.Likelihood" json:"likelihood,omitempty"`
	// Where the content was found.
	Location *Location `protobuf:"bytes,4,opt,name=location" json:"location,omitempty"`
	// Timestamp when finding was detected.
	CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
}

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

func (m *Finding) GetQuote() string {
	if m != nil {
		return m.Quote
	}
	return ""
}

func (m *Finding) GetInfoType() *InfoType {
	if m != nil {
		return m.InfoType
	}
	return nil
}

func (m *Finding) GetLikelihood() Likelihood {
	if m != nil {
		return m.Likelihood
	}
	return Likelihood_LIKELIHOOD_UNSPECIFIED
}

func (m *Finding) GetLocation() *Location {
	if m != nil {
		return m.Location
	}
	return nil
}

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

// Specifies the location of the finding.
type Location struct {
	// Zero-based byte offsets delimiting the finding.
	// These are relative to the finding's containing element.
	// Note that when the content is not textual, this references
	// the UTF-8 encoded textual representation of the content.
	// Omitted if content is an image.
	ByteRange *Range `protobuf:"bytes,1,opt,name=byte_range,json=byteRange" json:"byte_range,omitempty"`
	// Unicode character offsets delimiting the finding.
	// These are relative to the finding's containing element.
	// Provided when the content is text.
	CodepointRange *Range `protobuf:"bytes,2,opt,name=codepoint_range,json=codepointRange" json:"codepoint_range,omitempty"`
	// The area within the image that contained the finding.
	// Provided when the content is an image.
	ImageBoxes []*ImageLocation `protobuf:"bytes,3,rep,name=image_boxes,json=imageBoxes" json:"image_boxes,omitempty"`
	// The pointer to the record in storage that contained the field the
	// finding was found in.
	// Provided when the finding's containing element is a property
	// of a storage object.
	RecordKey *RecordKey `protobuf:"bytes,4,opt,name=record_key,json=recordKey" json:"record_key,omitempty"`
	// The pointer to the property or cell that contained the finding.
	// Provided when the finding's containing element is a cell in a table
	// or a property of storage object.
	FieldId *FieldId `protobuf:"bytes,5,opt,name=field_id,json=fieldId" json:"field_id,omitempty"`
	// The pointer to the row of the table that contained the finding.
	// Provided when the finding's containing element is a cell of a table.
	TableLocation *TableLocation `protobuf:"bytes,6,opt,name=table_location,json=tableLocation" json:"table_location,omitempty"`
}

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

func (m *Location) GetByteRange() *Range {
	if m != nil {
		return m.ByteRange
	}
	return nil
}

func (m *Location) GetCodepointRange() *Range {
	if m != nil {
		return m.CodepointRange
	}
	return nil
}

func (m *Location) GetImageBoxes() []*ImageLocation {
	if m != nil {
		return m.ImageBoxes
	}
	return nil
}

func (m *Location) GetRecordKey() *RecordKey {
	if m != nil {
		return m.RecordKey
	}
	return nil
}

func (m *Location) GetFieldId() *FieldId {
	if m != nil {
		return m.FieldId
	}
	return nil
}

func (m *Location) GetTableLocation() *TableLocation {
	if m != nil {
		return m.TableLocation
	}
	return nil
}

// Location of a finding within a table.
type TableLocation struct {
	// The zero-based index of the row where the finding is located.
	RowIndex int64 `protobuf:"varint,1,opt,name=row_index,json=rowIndex" json:"row_index,omitempty"`
}

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

func (m *TableLocation) GetRowIndex() int64 {
	if m != nil {
		return m.RowIndex
	}
	return 0
}

// Generic half-open interval [start, end)
type Range struct {
	// Index of the first character of the range (inclusive).
	Start int64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
	// Index of the last character of the range (exclusive).
	End int64 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
}

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

func (m *Range) GetStart() int64 {
	if m != nil {
		return m.Start
	}
	return 0
}

func (m *Range) GetEnd() int64 {
	if m != nil {
		return m.End
	}
	return 0
}

// Bounding box encompassing detected text within an image.
type ImageLocation struct {
	// Top coordinate of the bounding box. (0,0) is upper left.
	Top int32 `protobuf:"varint,1,opt,name=top" json:"top,omitempty"`
	// Left coordinate of the bounding box. (0,0) is upper left.
	Left int32 `protobuf:"varint,2,opt,name=left" json:"left,omitempty"`
	// Width of the bounding box in pixels.
	Width int32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"`
	// Height of the bounding box in pixels.
	Height int32 `protobuf:"varint,4,opt,name=height" json:"height,omitempty"`
}

func (m *ImageLocation) Reset()                    { *m = ImageLocation{} }
func (m *ImageLocation) String() string            { return proto.CompactTextString(m) }
func (*ImageLocation) ProtoMessage()               {}
func (*ImageLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }

func (m *ImageLocation) GetTop() int32 {
	if m != nil {
		return m.Top
	}
	return 0
}

func (m *ImageLocation) GetLeft() int32 {
	if m != nil {
		return m.Left
	}
	return 0
}

func (m *ImageLocation) GetWidth() int32 {
	if m != nil {
		return m.Width
	}
	return 0
}

func (m *ImageLocation) GetHeight() int32 {
	if m != nil {
		return m.Height
	}
	return 0
}

// Request to search for potentially sensitive info in a list of items
// and replace it with a default or provided content.
type RedactImageRequest struct {
	// The parent resource name, for example projects/my-project-id.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// Configuration for the inspector.
	InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
	// Type of the content, as defined in Content-Type HTTP header.
	// Supported types are: PNG, JPEG, SVG, & BMP.
	ImageType string `protobuf:"bytes,3,opt,name=image_type,json=imageType" json:"image_type,omitempty"`
	// The bytes of the image to redact.
	ImageData []byte `protobuf:"bytes,4,opt,name=image_data,json=imageData,proto3" json:"image_data,omitempty"`
	// The configuration for specifying what content to redact from images.
	ImageRedactionConfigs []*RedactImageRequest_ImageRedactionConfig `protobuf:"bytes,5,rep,name=image_redaction_configs,json=imageRedactionConfigs" json:"image_redaction_configs,omitempty"`
}

func (m *RedactImageRequest) Reset()                    { *m = RedactImageRequest{} }
func (m *RedactImageRequest) String() string            { return proto.CompactTextString(m) }
func (*RedactImageRequest) ProtoMessage()               {}
func (*RedactImageRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }

func (m *RedactImageRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *RedactImageRequest) GetInspectConfig() *InspectConfig {
	if m != nil {
		return m.InspectConfig
	}
	return nil
}

func (m *RedactImageRequest) GetImageType() string {
	if m != nil {
		return m.ImageType
	}
	return ""
}

func (m *RedactImageRequest) GetImageData() []byte {
	if m != nil {
		return m.ImageData
	}
	return nil
}

func (m *RedactImageRequest) GetImageRedactionConfigs() []*RedactImageRequest_ImageRedactionConfig {
	if m != nil {
		return m.ImageRedactionConfigs
	}
	return nil
}

// Configuration for determining how redaction of images should occur.
type RedactImageRequest_ImageRedactionConfig struct {
	// Type of information to redact from images.
	//
	// Types that are valid to be assigned to Target:
	//	*RedactImageRequest_ImageRedactionConfig_InfoType
	//	*RedactImageRequest_ImageRedactionConfig_RedactAllText
	Target isRedactImageRequest_ImageRedactionConfig_Target `protobuf_oneof:"target"`
	// The color to use when redacting content from an image. If not specified,
	// the default is black.
	RedactionColor *Color `protobuf:"bytes,3,opt,name=redaction_color,json=redactionColor" json:"redaction_color,omitempty"`
}

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

type isRedactImageRequest_ImageRedactionConfig_Target interface {
	isRedactImageRequest_ImageRedactionConfig_Target()
}

type RedactImageRequest_ImageRedactionConfig_InfoType struct {
	InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType,oneof"`
}
type RedactImageRequest_ImageRedactionConfig_RedactAllText struct {
	RedactAllText bool `protobuf:"varint,2,opt,name=redact_all_text,json=redactAllText,oneof"`
}

func (*RedactImageRequest_ImageRedactionConfig_InfoType) isRedactImageRequest_ImageRedactionConfig_Target() {
}
func (*RedactImageRequest_ImageRedactionConfig_RedactAllText) isRedactImageRequest_ImageRedactionConfig_Target() {
}

func (m *RedactImageRequest_ImageRedactionConfig) GetTarget() isRedactImageRequest_ImageRedactionConfig_Target {
	if m != nil {
		return m.Target
	}
	return nil
}

func (m *RedactImageRequest_ImageRedactionConfig) GetInfoType() *InfoType {
	if x, ok := m.GetTarget().(*RedactImageRequest_ImageRedactionConfig_InfoType); ok {
		return x.InfoType
	}
	return nil
}

func (m *RedactImageRequest_ImageRedactionConfig) GetRedactAllText() bool {
	if x, ok := m.GetTarget().(*RedactImageRequest_ImageRedactionConfig_RedactAllText); ok {
		return x.RedactAllText
	}
	return false
}

func (m *RedactImageRequest_ImageRedactionConfig) GetRedactionColor() *Color {
	if m != nil {
		return m.RedactionColor
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*RedactImageRequest_ImageRedactionConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _RedactImageRequest_ImageRedactionConfig_OneofMarshaler, _RedactImageRequest_ImageRedactionConfig_OneofUnmarshaler, _RedactImageRequest_ImageRedactionConfig_OneofSizer, []interface{}{
		(*RedactImageRequest_ImageRedactionConfig_InfoType)(nil),
		(*RedactImageRequest_ImageRedactionConfig_RedactAllText)(nil),
	}
}

func _RedactImageRequest_ImageRedactionConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*RedactImageRequest_ImageRedactionConfig)
	// target
	switch x := m.Target.(type) {
	case *RedactImageRequest_ImageRedactionConfig_InfoType:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.InfoType); err != nil {
			return err
		}
	case *RedactImageRequest_ImageRedactionConfig_RedactAllText:
		t := uint64(0)
		if x.RedactAllText {
			t = 1
		}
		b.EncodeVarint(2<<3 | proto.WireVarint)
		b.EncodeVarint(t)
	case nil:
	default:
		return fmt.Errorf("RedactImageRequest_ImageRedactionConfig.Target has unexpected type %T", x)
	}
	return nil
}

func _RedactImageRequest_ImageRedactionConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*RedactImageRequest_ImageRedactionConfig)
	switch tag {
	case 1: // target.info_type
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(InfoType)
		err := b.DecodeMessage(msg)
		m.Target = &RedactImageRequest_ImageRedactionConfig_InfoType{msg}
		return true, err
	case 2: // target.redact_all_text
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Target = &RedactImageRequest_ImageRedactionConfig_RedactAllText{x != 0}
		return true, err
	default:
		return false, nil
	}
}

func _RedactImageRequest_ImageRedactionConfig_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*RedactImageRequest_ImageRedactionConfig)
	// target
	switch x := m.Target.(type) {
	case *RedactImageRequest_ImageRedactionConfig_InfoType:
		s := proto.Size(x.InfoType)
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *RedactImageRequest_ImageRedactionConfig_RedactAllText:
		n += proto.SizeVarint(2<<3 | proto.WireVarint)
		n += 1
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Represents a color in the RGB color space.
type Color struct {
	// The amount of red in the color as a value in the interval [0, 1].
	Red float32 `protobuf:"fixed32,1,opt,name=red" json:"red,omitempty"`
	// The amount of green in the color as a value in the interval [0, 1].
	Green float32 `protobuf:"fixed32,2,opt,name=green" json:"green,omitempty"`
	// The amount of blue in the color as a value in the interval [0, 1].
	Blue float32 `protobuf:"fixed32,3,opt,name=blue" json:"blue,omitempty"`
}

func (m *Color) Reset()                    { *m = Color{} }
func (m *Color) String() string            { return proto.CompactTextString(m) }
func (*Color) ProtoMessage()               {}
func (*Color) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }

func (m *Color) GetRed() float32 {
	if m != nil {
		return m.Red
	}
	return 0
}

func (m *Color) GetGreen() float32 {
	if m != nil {
		return m.Green
	}
	return 0
}

func (m *Color) GetBlue() float32 {
	if m != nil {
		return m.Blue
	}
	return 0
}

// Results of redacting an image.
type RedactImageResponse struct {
	// The redacted image. The type will be the same as the original image.
	RedactedImage []byte `protobuf:"bytes,1,opt,name=redacted_image,json=redactedImage,proto3" json:"redacted_image,omitempty"`
	// If an image was being inspected and the InspectConfig's include_quote was
	// set to true, then this field will include all text, if any, that was found
	// in the image.
	ExtractedText string `protobuf:"bytes,2,opt,name=extracted_text,json=extractedText" json:"extracted_text,omitempty"`
}

func (m *RedactImageResponse) Reset()                    { *m = RedactImageResponse{} }
func (m *RedactImageResponse) String() string            { return proto.CompactTextString(m) }
func (*RedactImageResponse) ProtoMessage()               {}
func (*RedactImageResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }

func (m *RedactImageResponse) GetRedactedImage() []byte {
	if m != nil {
		return m.RedactedImage
	}
	return nil
}

func (m *RedactImageResponse) GetExtractedText() string {
	if m != nil {
		return m.ExtractedText
	}
	return ""
}

// Request to de-identify a list of items.
type DeidentifyContentRequest struct {
	// The parent resource name, for example projects/my-project-id.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// Configuration for the de-identification of the content item.
	// Items specified here will override the template referenced by the
	// deidentify_template_name argument.
	DeidentifyConfig *DeidentifyConfig `protobuf:"bytes,2,opt,name=deidentify_config,json=deidentifyConfig" json:"deidentify_config,omitempty"`
	// Configuration for the inspector.
	// Items specified here will override the template referenced by the
	// inspect_template_name argument.
	InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
	// The item to de-identify. Will be treated as text.
	Item *ContentItem `protobuf:"bytes,4,opt,name=item" json:"item,omitempty"`
	// Optional template to use. Any configuration directly specified in
	// inspect_config will override those set in the template. Singular fields
	// that are set in this request will replace their corresponding fields in the
	// template. Repeated fields are appended. Singular sub-messages and groups
	// are recursively merged.
	InspectTemplateName string `protobuf:"bytes,5,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"`
	// Optional template to use. Any configuration directly specified in
	// deidentify_config will override those set in the template. Singular fields
	// that are set in this request will replace their corresponding fields in the
	// template. Repeated fields are appended. Singular sub-messages and groups
	// are recursively merged.
	DeidentifyTemplateName string `protobuf:"bytes,6,opt,name=deidentify_template_name,json=deidentifyTemplateName" json:"deidentify_template_name,omitempty"`
}

func (m *DeidentifyContentRequest) Reset()                    { *m = DeidentifyContentRequest{} }
func (m *DeidentifyContentRequest) String() string            { return proto.CompactTextString(m) }
func (*DeidentifyContentRequest) ProtoMessage()               {}
func (*DeidentifyContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }

func (m *DeidentifyContentRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *DeidentifyContentRequest) GetDeidentifyConfig() *DeidentifyConfig {
	if m != nil {
		return m.DeidentifyConfig
	}
	return nil
}

func (m *DeidentifyContentRequest) GetInspectConfig() *InspectConfig {
	if m != nil {
		return m.InspectConfig
	}
	return nil
}

func (m *DeidentifyContentRequest) GetItem() *ContentItem {
	if m != nil {
		return m.Item
	}
	return nil
}

func (m *DeidentifyContentRequest) GetInspectTemplateName() string {
	if m != nil {
		return m.InspectTemplateName
	}
	return ""
}

func (m *DeidentifyContentRequest) GetDeidentifyTemplateName() string {
	if m != nil {
		return m.DeidentifyTemplateName
	}
	return ""
}

// Results of de-identifying a ContentItem.
type DeidentifyContentResponse struct {
	// The de-identified item.
	Item *ContentItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"`
	// An overview of the changes that were made on the `item`.
	Overview *TransformationOverview `protobuf:"bytes,2,opt,name=overview" json:"overview,omitempty"`
}

func (m *DeidentifyContentResponse) Reset()                    { *m = DeidentifyContentResponse{} }
func (m *DeidentifyContentResponse) String() string            { return proto.CompactTextString(m) }
func (*DeidentifyContentResponse) ProtoMessage()               {}
func (*DeidentifyContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }

func (m *DeidentifyContentResponse) GetItem() *ContentItem {
	if m != nil {
		return m.Item
	}
	return nil
}

func (m *DeidentifyContentResponse) GetOverview() *TransformationOverview {
	if m != nil {
		return m.Overview
	}
	return nil
}

// Request to re-identify an item.
type ReidentifyContentRequest struct {
	// The parent resource name.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// Configuration for the re-identification of the content item.
	// This field shares the same proto message type that is used for
	// de-identification, however its usage here is for the reversal of the
	// previous de-identification. Re-identification is performed by examining
	// the transformations used to de-identify the items and executing the
	// reverse. This requires that only reversible transformations
	// be provided here. The reversible transformations are:
	//
	//  - `CryptoReplaceFfxFpeConfig`
	ReidentifyConfig *DeidentifyConfig `protobuf:"bytes,2,opt,name=reidentify_config,json=reidentifyConfig" json:"reidentify_config,omitempty"`
	// Configuration for the inspector.
	InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
	// The item to re-identify. Will be treated as text.
	Item *ContentItem `protobuf:"bytes,4,opt,name=item" json:"item,omitempty"`
	// Optional template to use. Any configuration directly specified in
	// `inspect_config` will override those set in the template. Singular fields
	// that are set in this request will replace their corresponding fields in the
	// template. Repeated fields are appended. Singular sub-messages and groups
	// are recursively merged.
	InspectTemplateName string `protobuf:"bytes,5,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"`
	// Optional template to use. References an instance of `DeidentifyTemplate`.
	// Any configuration directly specified in `reidentify_config` or
	// `inspect_config` will override those set in the template. Singular fields
	// that are set in this request will replace their corresponding fields in the
	// template. Repeated fields are appended. Singular sub-messages and groups
	// are recursively merged.
	ReidentifyTemplateName string `protobuf:"bytes,6,opt,name=reidentify_template_name,json=reidentifyTemplateName" json:"reidentify_template_name,omitempty"`
}

func (m *ReidentifyContentRequest) Reset()                    { *m = ReidentifyContentRequest{} }
func (m *ReidentifyContentRequest) String() string            { return proto.CompactTextString(m) }
func (*ReidentifyContentRequest) ProtoMessage()               {}
func (*ReidentifyContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }

func (m *ReidentifyContentRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *ReidentifyContentRequest) GetReidentifyConfig() *DeidentifyConfig {
	if m != nil {
		return m.ReidentifyConfig
	}
	return nil
}

func (m *ReidentifyContentRequest) GetInspectConfig() *InspectConfig {
	if m != nil {
		return m.InspectConfig
	}
	return nil
}

func (m *ReidentifyContentRequest) GetItem() *ContentItem {
	if m != nil {
		return m.Item
	}
	return nil
}

func (m *ReidentifyContentRequest) GetInspectTemplateName() string {
	if m != nil {
		return m.InspectTemplateName
	}
	return ""
}

func (m *ReidentifyContentRequest) GetReidentifyTemplateName() string {
	if m != nil {
		return m.ReidentifyTemplateName
	}
	return ""
}

// Results of re-identifying a item.
type ReidentifyContentResponse struct {
	// The re-identified item.
	Item *ContentItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"`
	// An overview of the changes that were made to the `item`.
	Overview *TransformationOverview `protobuf:"bytes,2,opt,name=overview" json:"overview,omitempty"`
}

func (m *ReidentifyContentResponse) Reset()                    { *m = ReidentifyContentResponse{} }
func (m *ReidentifyContentResponse) String() string            { return proto.CompactTextString(m) }
func (*ReidentifyContentResponse) ProtoMessage()               {}
func (*ReidentifyContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }

func (m *ReidentifyContentResponse) GetItem() *ContentItem {
	if m != nil {
		return m.Item
	}
	return nil
}

func (m *ReidentifyContentResponse) GetOverview() *TransformationOverview {
	if m != nil {
		return m.Overview
	}
	return nil
}

// Request to search for potentially sensitive info in a ContentItem.
type InspectContentRequest struct {
	// The parent resource name, for example projects/my-project-id.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// Configuration for the inspector. What specified here will override
	// the template referenced by the inspect_template_name argument.
	InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
	// The item to inspect.
	Item *ContentItem `protobuf:"bytes,3,opt,name=item" json:"item,omitempty"`
	// Optional template to use. Any configuration directly specified in
	// inspect_config will override those set in the template. Singular fields
	// that are set in this request will replace their corresponding fields in the
	// template. Repeated fields are appended. Singular sub-messages and groups
	// are recursively merged.
	InspectTemplateName string `protobuf:"bytes,4,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"`
}

func (m *InspectContentRequest) Reset()                    { *m = InspectContentRequest{} }
func (m *InspectContentRequest) String() string            { return proto.CompactTextString(m) }
func (*InspectContentRequest) ProtoMessage()               {}
func (*InspectContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }

func (m *InspectContentRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *InspectContentRequest) GetInspectConfig() *InspectConfig {
	if m != nil {
		return m.InspectConfig
	}
	return nil
}

func (m *InspectContentRequest) GetItem() *ContentItem {
	if m != nil {
		return m.Item
	}
	return nil
}

func (m *InspectContentRequest) GetInspectTemplateName() string {
	if m != nil {
		return m.InspectTemplateName
	}
	return ""
}

// Results of inspecting an item.
type InspectContentResponse struct {
	// The findings.
	Result *InspectResult `protobuf:"bytes,1,opt,name=result" json:"result,omitempty"`
}

func (m *InspectContentResponse) Reset()                    { *m = InspectContentResponse{} }
func (m *InspectContentResponse) String() string            { return proto.CompactTextString(m) }
func (*InspectContentResponse) ProtoMessage()               {}
func (*InspectContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }

func (m *InspectContentResponse) GetResult() *InspectResult {
	if m != nil {
		return m.Result
	}
	return nil
}

// Request for scheduling a scan of a data subset from a Google Platform data
// repository.
type InspectDataSourceRequest struct {
	// The parent resource name, for example projects/my-project-id.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// A configuration for the job.
	JobConfig *InspectJobConfig `protobuf:"bytes,2,opt,name=job_config,json=jobConfig" json:"job_config,omitempty"`
}

func (m *InspectDataSourceRequest) Reset()                    { *m = InspectDataSourceRequest{} }
func (m *InspectDataSourceRequest) String() string            { return proto.CompactTextString(m) }
func (*InspectDataSourceRequest) ProtoMessage()               {}
func (*InspectDataSourceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }

func (m *InspectDataSourceRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *InspectDataSourceRequest) GetJobConfig() *InspectJobConfig {
	if m != nil {
		return m.JobConfig
	}
	return nil
}

// Cloud repository for storing output.
type OutputStorageConfig struct {
	// Types that are valid to be assigned to Type:
	//	*OutputStorageConfig_Table
	Type isOutputStorageConfig_Type `protobuf_oneof:"type"`
}

func (m *OutputStorageConfig) Reset()                    { *m = OutputStorageConfig{} }
func (m *OutputStorageConfig) String() string            { return proto.CompactTextString(m) }
func (*OutputStorageConfig) ProtoMessage()               {}
func (*OutputStorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }

type isOutputStorageConfig_Type interface {
	isOutputStorageConfig_Type()
}

type OutputStorageConfig_Table struct {
	Table *BigQueryTable `protobuf:"bytes,1,opt,name=table,oneof"`
}

func (*OutputStorageConfig_Table) isOutputStorageConfig_Type() {}

func (m *OutputStorageConfig) GetType() isOutputStorageConfig_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *OutputStorageConfig) GetTable() *BigQueryTable {
	if x, ok := m.GetType().(*OutputStorageConfig_Table); ok {
		return x.Table
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*OutputStorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _OutputStorageConfig_OneofMarshaler, _OutputStorageConfig_OneofUnmarshaler, _OutputStorageConfig_OneofSizer, []interface{}{
		(*OutputStorageConfig_Table)(nil),
	}
}

func _OutputStorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*OutputStorageConfig)
	// type
	switch x := m.Type.(type) {
	case *OutputStorageConfig_Table:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.Table); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("OutputStorageConfig.Type has unexpected type %T", x)
	}
	return nil
}

func _OutputStorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*OutputStorageConfig)
	switch tag {
	case 1: // type.table
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(BigQueryTable)
		err := b.DecodeMessage(msg)
		m.Type = &OutputStorageConfig_Table{msg}
		return true, err
	default:
		return false, nil
	}
}

func _OutputStorageConfig_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*OutputStorageConfig)
	// type
	switch x := m.Type.(type) {
	case *OutputStorageConfig_Table:
		s := proto.Size(x.Table)
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Statistics regarding a specific InfoType.
type InfoTypeStatistics struct {
	// The type of finding this stat is for.
	InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"`
	// Number of findings for this infoType.
	Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
}

func (m *InfoTypeStatistics) Reset()                    { *m = InfoTypeStatistics{} }
func (m *InfoTypeStatistics) String() string            { return proto.CompactTextString(m) }
func (*InfoTypeStatistics) ProtoMessage()               {}
func (*InfoTypeStatistics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }

func (m *InfoTypeStatistics) GetInfoType() *InfoType {
	if m != nil {
		return m.InfoType
	}
	return nil
}

func (m *InfoTypeStatistics) GetCount() int64 {
	if m != nil {
		return m.Count
	}
	return 0
}

// The results of an inspect DataSource job.
type InspectDataSourceDetails struct {
	// The configuration used for this job.
	RequestedOptions *InspectDataSourceDetails_RequestedOptions `protobuf:"bytes,2,opt,name=requested_options,json=requestedOptions" json:"requested_options,omitempty"`
	// A summary of the outcome of this inspect job.
	Result *InspectDataSourceDetails_Result `protobuf:"bytes,3,opt,name=result" json:"result,omitempty"`
}

func (m *InspectDataSourceDetails) Reset()                    { *m = InspectDataSourceDetails{} }
func (m *InspectDataSourceDetails) String() string            { return proto.CompactTextString(m) }
func (*InspectDataSourceDetails) ProtoMessage()               {}
func (*InspectDataSourceDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }

func (m *InspectDataSourceDetails) GetRequestedOptions() *InspectDataSourceDetails_RequestedOptions {
	if m != nil {
		return m.RequestedOptions
	}
	return nil
}

func (m *InspectDataSourceDetails) GetResult() *InspectDataSourceDetails_Result {
	if m != nil {
		return m.Result
	}
	return nil
}

type InspectDataSourceDetails_RequestedOptions struct {
	// If run with an inspect template, a snapshot of it's state at the time of
	// this run.
	SnapshotInspectTemplate *InspectTemplate  `protobuf:"bytes,1,opt,name=snapshot_inspect_template,json=snapshotInspectTemplate" json:"snapshot_inspect_template,omitempty"`
	JobConfig               *InspectJobConfig `protobuf:"bytes,3,opt,name=job_config,json=jobConfig" json:"job_config,omitempty"`
}

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

func (m *InspectDataSourceDetails_RequestedOptions) GetSnapshotInspectTemplate() *InspectTemplate {
	if m != nil {
		return m.SnapshotInspectTemplate
	}
	return nil
}

func (m *InspectDataSourceDetails_RequestedOptions) GetJobConfig() *InspectJobConfig {
	if m != nil {
		return m.JobConfig
	}
	return nil
}

type InspectDataSourceDetails_Result struct {
	// Total size in bytes that were processed.
	ProcessedBytes int64 `protobuf:"varint,1,opt,name=processed_bytes,json=processedBytes" json:"processed_bytes,omitempty"`
	// Estimate of the number of bytes to process.
	TotalEstimatedBytes int64 `protobuf:"varint,2,opt,name=total_estimated_bytes,json=totalEstimatedBytes" json:"total_estimated_bytes,omitempty"`
	// Statistics of how many instances of each info type were found during
	// inspect job.
	InfoTypeStats []*InfoTypeStatistics `protobuf:"bytes,3,rep,name=info_type_stats,json=infoTypeStats" json:"info_type_stats,omitempty"`
}

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

func (m *InspectDataSourceDetails_Result) GetProcessedBytes() int64 {
	if m != nil {
		return m.ProcessedBytes
	}
	return 0
}

func (m *InspectDataSourceDetails_Result) GetTotalEstimatedBytes() int64 {
	if m != nil {
		return m.TotalEstimatedBytes
	}
	return 0
}

func (m *InspectDataSourceDetails_Result) GetInfoTypeStats() []*InfoTypeStatistics {
	if m != nil {
		return m.InfoTypeStats
	}
	return nil
}

// InfoType description.
type InfoTypeDescription struct {
	// Internal name of the infoType.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// Human readable form of the infoType name.
	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"`
	// Which parts of the API supports this InfoType.
	SupportedBy []InfoTypeSupportedBy `protobuf:"varint,3,rep,packed,name=supported_by,json=supportedBy,enum=google.privacy.dlp.v2beta2.InfoTypeSupportedBy" json:"supported_by,omitempty"`
}

func (m *InfoTypeDescription) Reset()                    { *m = InfoTypeDescription{} }
func (m *InfoTypeDescription) String() string            { return proto.CompactTextString(m) }
func (*InfoTypeDescription) ProtoMessage()               {}
func (*InfoTypeDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }

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

func (m *InfoTypeDescription) GetDisplayName() string {
	if m != nil {
		return m.DisplayName
	}
	return ""
}

func (m *InfoTypeDescription) GetSupportedBy() []InfoTypeSupportedBy {
	if m != nil {
		return m.SupportedBy
	}
	return nil
}

// Request for the list of infoTypes.
type ListInfoTypesRequest struct {
	// Optional BCP-47 language code for localized infoType friendly
	// names. If omitted, or if localized strings are not available,
	// en-US strings will be returned.
	LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"`
	// Optional filter to only return infoTypes supported by certain parts of the
	// API. Defaults to supported_by=INSPECT.
	Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"`
}

func (m *ListInfoTypesRequest) Reset()                    { *m = ListInfoTypesRequest{} }
func (m *ListInfoTypesRequest) String() string            { return proto.CompactTextString(m) }
func (*ListInfoTypesRequest) ProtoMessage()               {}
func (*ListInfoTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }

func (m *ListInfoTypesRequest) GetLanguageCode() string {
	if m != nil {
		return m.LanguageCode
	}
	return ""
}

func (m *ListInfoTypesRequest) GetFilter() string {
	if m != nil {
		return m.Filter
	}
	return ""
}

// Response to the ListInfoTypes request.
type ListInfoTypesResponse struct {
	// Set of sensitive infoTypes.
	InfoTypes []*InfoTypeDescription `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"`
}

func (m *ListInfoTypesResponse) Reset()                    { *m = ListInfoTypesResponse{} }
func (m *ListInfoTypesResponse) String() string            { return proto.CompactTextString(m) }
func (*ListInfoTypesResponse) ProtoMessage()               {}
func (*ListInfoTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }

func (m *ListInfoTypesResponse) GetInfoTypes() []*InfoTypeDescription {
	if m != nil {
		return m.InfoTypes
	}
	return nil
}

// Request for creating a risk analysis DlpJob.
type AnalyzeDataSourceRiskRequest struct {
	// The parent resource name, for example projects/my-project-id.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// Configuration for this risk analysis job.
	JobConfig *RiskAnalysisJobConfig `protobuf:"bytes,2,opt,name=job_config,json=jobConfig" json:"job_config,omitempty"`
}

func (m *AnalyzeDataSourceRiskRequest) Reset()                    { *m = AnalyzeDataSourceRiskRequest{} }
func (m *AnalyzeDataSourceRiskRequest) String() string            { return proto.CompactTextString(m) }
func (*AnalyzeDataSourceRiskRequest) ProtoMessage()               {}
func (*AnalyzeDataSourceRiskRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }

func (m *AnalyzeDataSourceRiskRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *AnalyzeDataSourceRiskRequest) GetJobConfig() *RiskAnalysisJobConfig {
	if m != nil {
		return m.JobConfig
	}
	return nil
}

// Configuration for a risk analysis job.
type RiskAnalysisJobConfig struct {
	// Privacy metric to compute.
	PrivacyMetric *PrivacyMetric `protobuf:"bytes,1,opt,name=privacy_metric,json=privacyMetric" json:"privacy_metric,omitempty"`
	// Input dataset to compute metrics over.
	SourceTable *BigQueryTable `protobuf:"bytes,2,opt,name=source_table,json=sourceTable" json:"source_table,omitempty"`
}

func (m *RiskAnalysisJobConfig) Reset()                    { *m = RiskAnalysisJobConfig{} }
func (m *RiskAnalysisJobConfig) String() string            { return proto.CompactTextString(m) }
func (*RiskAnalysisJobConfig) ProtoMessage()               {}
func (*RiskAnalysisJobConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }

func (m *RiskAnalysisJobConfig) GetPrivacyMetric() *PrivacyMetric {
	if m != nil {
		return m.PrivacyMetric
	}
	return nil
}

func (m *RiskAnalysisJobConfig) GetSourceTable() *BigQueryTable {
	if m != nil {
		return m.SourceTable
	}
	return nil
}

// Privacy metric to compute for reidentification risk analysis.
type PrivacyMetric struct {
	// Types that are valid to be assigned to Type:
	//	*PrivacyMetric_NumericalStatsConfig_
	//	*PrivacyMetric_CategoricalStatsConfig_
	//	*PrivacyMetric_KAnonymityConfig_
	//	*PrivacyMetric_LDiversityConfig_
	//	*PrivacyMetric_KMapEstimationConfig_
	Type isPrivacyMetric_Type `protobuf_oneof:"type"`
}

func (m *PrivacyMetric) Reset()                    { *m = PrivacyMetric{} }
func (m *PrivacyMetric) String() string            { return proto.CompactTextString(m) }
func (*PrivacyMetric) ProtoMessage()               {}
func (*PrivacyMetric) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }

type isPrivacyMetric_Type interface {
	isPrivacyMetric_Type()
}

type PrivacyMetric_NumericalStatsConfig_ struct {
	NumericalStatsConfig *PrivacyMetric_NumericalStatsConfig `protobuf:"bytes,1,opt,name=numerical_stats_config,json=numericalStatsConfig,oneof"`
}
type PrivacyMetric_CategoricalStatsConfig_ struct {
	CategoricalStatsConfig *PrivacyMetric_CategoricalStatsConfig `protobuf:"bytes,2,opt,name=categorical_stats_config,json=categoricalStatsConfig,oneof"`
}
type PrivacyMetric_KAnonymityConfig_ struct {
	KAnonymityConfig *PrivacyMetric_KAnonymityConfig `protobuf:"bytes,3,opt,name=k_anonymity_config,json=kAnonymityConfig,oneof"`
}
type PrivacyMetric_LDiversityConfig_ struct {
	LDiversityConfig *PrivacyMetric_LDiversityConfig `protobuf:"bytes,4,opt,name=l_diversity_config,json=lDiversityConfig,oneof"`
}
type PrivacyMetric_KMapEstimationConfig_ struct {
	KMapEstimationConfig *PrivacyMetric_KMapEstimationConfig `protobuf:"bytes,5,opt,name=k_map_estimation_config,json=kMapEstimationConfig,oneof"`
}

func (*PrivacyMetric_NumericalStatsConfig_) isPrivacyMetric_Type()   {}
func (*PrivacyMetric_CategoricalStatsConfig_) isPrivacyMetric_Type() {}
func (*PrivacyMetric_KAnonymityConfig_) isPrivacyMetric_Type()       {}
func (*PrivacyMetric_LDiversityConfig_) isPrivacyMetric_Type()       {}
func (*PrivacyMetric_KMapEstimationConfig_) isPrivacyMetric_Type()   {}

func (m *PrivacyMetric) GetType() isPrivacyMetric_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *PrivacyMetric) GetNumericalStatsConfig() *PrivacyMetric_NumericalStatsConfig {
	if x, ok := m.GetType().(*PrivacyMetric_NumericalStatsConfig_); ok {
		return x.NumericalStatsConfig
	}
	return nil
}

func (m *PrivacyMetric) GetCategoricalStatsConfig() *PrivacyMetric_CategoricalStatsConfig {
	if x, ok := m.GetType().(*PrivacyMetric_CategoricalStatsConfig_); ok {
		return x.CategoricalStatsConfig
	}
	return nil
}

func (m *PrivacyMetric) GetKAnonymityConfig() *PrivacyMetric_KAnonymityConfig {
	if x, ok := m.GetType().(*PrivacyMetric_KAnonymityConfig_); ok {
		return x.KAnonymityConfig
	}
	return nil
}

func (m *PrivacyMetric) GetLDiversityConfig() *PrivacyMetric_LDiversityConfig {
	if x, ok := m.GetType().(*PrivacyMetric_LDiversityConfig_); ok {
		return x.LDiversityConfig
	}
	return nil
}

func (m *PrivacyMetric) GetKMapEstimationConfig() *PrivacyMetric_KMapEstimationConfig {
	if x, ok := m.GetType().(*PrivacyMetric_KMapEstimationConfig_); ok {
		return x.KMapEstimationConfig
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*PrivacyMetric) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _PrivacyMetric_OneofMarshaler, _PrivacyMetric_OneofUnmarshaler, _PrivacyMetric_OneofSizer, []interface{}{
		(*PrivacyMetric_NumericalStatsConfig_)(nil),
		(*PrivacyMetric_CategoricalStatsConfig_)(nil),
		(*PrivacyMetric_KAnonymityConfig_)(nil),
		(*PrivacyMetric_LDiversityConfig_)(nil),
		(*PrivacyMetric_KMapEstimationConfig_)(nil),
	}
}

func _PrivacyMetric_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*PrivacyMetric)
	// type
	switch x := m.Type.(type) {
	case *PrivacyMetric_NumericalStatsConfig_:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.NumericalStatsConfig); err != nil {
			return err
		}
	case *PrivacyMetric_CategoricalStatsConfig_:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.CategoricalStatsConfig); err != nil {
			return err
		}
	case *PrivacyMetric_KAnonymityConfig_:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.KAnonymityConfig); err != nil {
			return err
		}
	case *PrivacyMetric_LDiversityConfig_:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.LDiversityConfig); err != nil {
			return err
		}
	case *PrivacyMetric_KMapEstimationConfig_:
		b.EncodeVarint(5<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.KMapEstimationConfig); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("PrivacyMetric.Type has unexpected type %T", x)
	}
	return nil
}

func _PrivacyMetric_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*PrivacyMetric)
	switch tag {
	case 1: // type.numerical_stats_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(PrivacyMetric_NumericalStatsConfig)
		err := b.DecodeMessage(msg)
		m.Type = &PrivacyMetric_NumericalStatsConfig_{msg}
		return true, err
	case 2: // type.categorical_stats_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(PrivacyMetric_CategoricalStatsConfig)
		err := b.DecodeMessage(msg)
		m.Type = &PrivacyMetric_CategoricalStatsConfig_{msg}
		return true, err
	case 3: // type.k_anonymity_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(PrivacyMetric_KAnonymityConfig)
		err := b.DecodeMessage(msg)
		m.Type = &PrivacyMetric_KAnonymityConfig_{msg}
		return true, err
	case 4: // type.l_diversity_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(PrivacyMetric_LDiversityConfig)
		err := b.DecodeMessage(msg)
		m.Type = &PrivacyMetric_LDiversityConfig_{msg}
		return true, err
	case 5: // type.k_map_estimation_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(PrivacyMetric_KMapEstimationConfig)
		err := b.DecodeMessage(msg)
		m.Type = &PrivacyMetric_KMapEstimationConfig_{msg}
		return true, err
	default:
		return false, nil
	}
}

func _PrivacyMetric_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*PrivacyMetric)
	// type
	switch x := m.Type.(type) {
	case *PrivacyMetric_NumericalStatsConfig_:
		s := proto.Size(x.NumericalStatsConfig)
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrivacyMetric_CategoricalStatsConfig_:
		s := proto.Size(x.CategoricalStatsConfig)
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrivacyMetric_KAnonymityConfig_:
		s := proto.Size(x.KAnonymityConfig)
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrivacyMetric_LDiversityConfig_:
		s := proto.Size(x.LDiversityConfig)
		n += proto.SizeVarint(4<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrivacyMetric_KMapEstimationConfig_:
		s := proto.Size(x.KMapEstimationConfig)
		n += proto.SizeVarint(5<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Compute numerical stats over an individual column, including
// min, max, and quantiles.
type PrivacyMetric_NumericalStatsConfig struct {
	// Field to compute numerical stats on. Supported types are
	// integer, float, date, datetime, timestamp, time.
	Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
}

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

func (m *PrivacyMetric_NumericalStatsConfig) GetField() *FieldId {
	if m != nil {
		return m.Field
	}
	return nil
}

// Compute numerical stats over an individual column, including
// number of distinct values and value count distribution.
type PrivacyMetric_CategoricalStatsConfig struct {
	// Field to compute categorical stats on. All column types are
	// supported except for arrays and structs. However, it may be more
	// informative to use NumericalStats when the field type is supported,
	// depending on the data.
	Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
}

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

func (m *PrivacyMetric_CategoricalStatsConfig) GetField() *FieldId {
	if m != nil {
		return m.Field
	}
	return nil
}

// k-anonymity metric, used for analysis of reidentification risk.
type PrivacyMetric_KAnonymityConfig struct {
	// Set of fields to compute k-anonymity over. When multiple fields are
	// specified, they are considered a single composite key. Structs and
	// repeated data types are not supported; however, nested fields are
	// supported so long as they are not structs themselves or nested within
	// a repeated field.
	QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"`
	// Optional message indicating that each distinct entity_id should not
	// contribute to the k-anonymity count more than once per equivalence class.
	// If an entity_id appears on several rows with different quasi-identifier
	// tuples, it will contribute to each count exactly once.
	//
	// This can lead to unexpected results. Consider a table where ID 1 is
	// associated to quasi-identifier "foo", ID 2 to "bar", and ID 3 to *both*
	// quasi-identifiers "foo" and "bar" (on separate rows), and where this ID
	// is used as entity_id. Then, the anonymity value associated to ID 3 will
	// be 2, even if it is the only ID to be associated to both values "foo" and
	// "bar".
	EntityId *EntityId `protobuf:"bytes,2,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"`
}

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

func (m *PrivacyMetric_KAnonymityConfig) GetQuasiIds() []*FieldId {
	if m != nil {
		return m.QuasiIds
	}
	return nil
}

func (m *PrivacyMetric_KAnonymityConfig) GetEntityId() *EntityId {
	if m != nil {
		return m.EntityId
	}
	return nil
}

// l-diversity metric, used for analysis of reidentification risk.
type PrivacyMetric_LDiversityConfig struct {
	// Set of quasi-identifiers indicating how equivalence classes are
	// defined for the l-diversity computation. When multiple fields are
	// specified, they are considered a single composite key.
	QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"`
	// Sensitive field for computing the l-value.
	SensitiveAttribute *FieldId `protobuf:"bytes,2,opt,name=sensitive_attribute,json=sensitiveAttribute" json:"sensitive_attribute,omitempty"`
}

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

func (m *PrivacyMetric_LDiversityConfig) GetQuasiIds() []*FieldId {
	if m != nil {
		return m.QuasiIds
	}
	return nil
}

func (m *PrivacyMetric_LDiversityConfig) GetSensitiveAttribute() *FieldId {
	if m != nil {
		return m.SensitiveAttribute
	}
	return nil
}

// Reidentifiability metric. This corresponds to a risk model similar to what
// is called "journalist risk" in the literature, except the attack dataset is
// statistically modeled instead of being perfectly known. This can be done
// using publicly available data (like the US Census), or using a custom
// statistical model (indicated as one or several BigQuery tables), or by
// extrapolating from the distribution of values in the input dataset.
type PrivacyMetric_KMapEstimationConfig struct {
	// Fields considered to be quasi-identifiers. No two columns can have the
	// same tag. [required]
	QuasiIds []*PrivacyMetric_KMapEstimationConfig_TaggedField `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"`
	// ISO 3166-1 alpha-2 region code to use in the statistical modeling.
	// Required if no column is tagged with a region-specific InfoType (like
	// US_ZIP_5) or a region code.
	RegionCode string `protobuf:"bytes,2,opt,name=region_code,json=regionCode" json:"region_code,omitempty"`
	// Several auxiliary tables can be used in the analysis. Each custom_tag
	// used to tag a quasi-identifiers column must appear in exactly one column
	// of one auxiliary table.
	AuxiliaryTables []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable `protobuf:"bytes,3,rep,name=auxiliary_tables,json=auxiliaryTables" json:"auxiliary_tables,omitempty"`
}

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

func (m *PrivacyMetric_KMapEstimationConfig) GetQuasiIds() []*PrivacyMetric_KMapEstimationConfig_TaggedField {
	if m != nil {
		return m.QuasiIds
	}
	return nil
}

func (m *PrivacyMetric_KMapEstimationConfig) GetRegionCode() string {
	if m != nil {
		return m.RegionCode
	}
	return ""
}

func (m *PrivacyMetric_KMapEstimationConfig) GetAuxiliaryTables() []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable {
	if m != nil {
		return m.AuxiliaryTables
	}
	return nil
}

// A column with a semantic tag attached.
type PrivacyMetric_KMapEstimationConfig_TaggedField struct {
	// Identifies the column. [required]
	Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
	// Semantic tag that identifies what a column contains, to determine which
	// statistical model to use to estimate the reidentifiability of each
	// value. [required]
	//
	// Types that are valid to be assigned to Tag:
	//	*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType
	//	*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag
	//	*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred
	Tag isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag `protobuf_oneof:"tag"`
}

func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) Reset() {
	*m = PrivacyMetric_KMapEstimationConfig_TaggedField{}
}
func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) String() string {
	return proto.CompactTextString(m)
}
func (*PrivacyMetric_KMapEstimationConfig_TaggedField) ProtoMessage() {}
func (*PrivacyMetric_KMapEstimationConfig_TaggedField) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{27, 4, 0}
}

type isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag interface {
	isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag()
}

type PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType struct {
	InfoType *InfoType `protobuf:"bytes,2,opt,name=info_type,json=infoType,oneof"`
}
type PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag struct {
	CustomTag string `protobuf:"bytes,3,opt,name=custom_tag,json=customTag,oneof"`
}
type PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred struct {
	Inferred *google_protobuf3.Empty `protobuf:"bytes,4,opt,name=inferred,oneof"`
}

func (*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() {
}
func (*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() {
}
func (*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() {
}

func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetTag() isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag {
	if m != nil {
		return m.Tag
	}
	return nil
}

func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetField() *FieldId {
	if m != nil {
		return m.Field
	}
	return nil
}

func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetInfoType() *InfoType {
	if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType); ok {
		return x.InfoType
	}
	return nil
}

func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetCustomTag() string {
	if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag); ok {
		return x.CustomTag
	}
	return ""
}

func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetInferred() *google_protobuf3.Empty {
	if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred); ok {
		return x.Inferred
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*PrivacyMetric_KMapEstimationConfig_TaggedField) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofMarshaler, _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofUnmarshaler, _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofSizer, []interface{}{
		(*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType)(nil),
		(*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag)(nil),
		(*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred)(nil),
	}
}

func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField)
	// tag
	switch x := m.Tag.(type) {
	case *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.InfoType); err != nil {
			return err
		}
	case *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.CustomTag)
	case *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.Inferred); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("PrivacyMetric_KMapEstimationConfig_TaggedField.Tag has unexpected type %T", x)
	}
	return nil
}

func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField)
	switch tag {
	case 2: // tag.info_type
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(InfoType)
		err := b.DecodeMessage(msg)
		m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType{msg}
		return true, err
	case 3: // tag.custom_tag
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag{x}
		return true, err
	case 4: // tag.inferred
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(google_protobuf3.Empty)
		err := b.DecodeMessage(msg)
		m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred{msg}
		return true, err
	default:
		return false, nil
	}
}

func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField)
	// tag
	switch x := m.Tag.(type) {
	case *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType:
		s := proto.Size(x.InfoType)
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag:
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.CustomTag)))
		n += len(x.CustomTag)
	case *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred:
		s := proto.Size(x.Inferred)
		n += proto.SizeVarint(4<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// An auxiliary table contains statistical information on the relative
// frequency of different quasi-identifiers values. It has one or several
// quasi-identifiers columns, and one column that indicates the relative
// frequency of each quasi-identifier tuple.
// If a tuple is present in the data but not in the auxiliary table, the
// corresponding relative frequency is assumed to be zero (and thus, the
// tuple is highly reidentifiable).
type PrivacyMetric_KMapEstimationConfig_AuxiliaryTable struct {
	// Auxiliary table location. [required]
	Table *BigQueryTable `protobuf:"bytes,3,opt,name=table" json:"table,omitempty"`
	// Quasi-identifier columns. [required]
	QuasiIds []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"`
	// The relative frequency column must contain a floating-point number
	// between 0 and 1 (inclusive). Null values are assumed to be zero.
	// [required]
	RelativeFrequency *FieldId `protobuf:"bytes,2,opt,name=relative_frequency,json=relativeFrequency" json:"relative_frequency,omitempty"`
}

func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) Reset() {
	*m = PrivacyMetric_KMapEstimationConfig_AuxiliaryTable{}
}
func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) String() string {
	return proto.CompactTextString(m)
}
func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) ProtoMessage() {}
func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{27, 4, 1}
}

func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetTable() *BigQueryTable {
	if m != nil {
		return m.Table
	}
	return nil
}

func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetQuasiIds() []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField {
	if m != nil {
		return m.QuasiIds
	}
	return nil
}

func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetRelativeFrequency() *FieldId {
	if m != nil {
		return m.RelativeFrequency
	}
	return nil
}

// A quasi-identifier column has a custom_tag, used to know which column
// in the data corresponds to which column in the statistical model.
type PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField struct {
	Field     *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
	CustomTag string   `protobuf:"bytes,2,opt,name=custom_tag,json=customTag" json:"custom_tag,omitempty"`
}

func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) Reset() {
	*m = PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField{}
}
func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) String() string {
	return proto.CompactTextString(m)
}
func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) ProtoMessage() {}
func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{27, 4, 1, 0}
}

func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) GetField() *FieldId {
	if m != nil {
		return m.Field
	}
	return nil
}

func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) GetCustomTag() string {
	if m != nil {
		return m.CustomTag
	}
	return ""
}

// Result of a risk analysis operation request.
type AnalyzeDataSourceRiskDetails struct {
	// Privacy metric to compute.
	RequestedPrivacyMetric *PrivacyMetric `protobuf:"bytes,1,opt,name=requested_privacy_metric,json=requestedPrivacyMetric" json:"requested_privacy_metric,omitempty"`
	// Input dataset to compute metrics over.
	RequestedSourceTable *BigQueryTable `protobuf:"bytes,2,opt,name=requested_source_table,json=requestedSourceTable" json:"requested_source_table,omitempty"`
	// Values associated with this metric.
	//
	// Types that are valid to be assigned to Result:
	//	*AnalyzeDataSourceRiskDetails_NumericalStatsResult_
	//	*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_
	//	*AnalyzeDataSourceRiskDetails_KAnonymityResult_
	//	*AnalyzeDataSourceRiskDetails_LDiversityResult_
	//	*AnalyzeDataSourceRiskDetails_KMapEstimationResult_
	Result isAnalyzeDataSourceRiskDetails_Result `protobuf_oneof:"result"`
}

func (m *AnalyzeDataSourceRiskDetails) Reset()                    { *m = AnalyzeDataSourceRiskDetails{} }
func (m *AnalyzeDataSourceRiskDetails) String() string            { return proto.CompactTextString(m) }
func (*AnalyzeDataSourceRiskDetails) ProtoMessage()               {}
func (*AnalyzeDataSourceRiskDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }

type isAnalyzeDataSourceRiskDetails_Result interface {
	isAnalyzeDataSourceRiskDetails_Result()
}

type AnalyzeDataSourceRiskDetails_NumericalStatsResult_ struct {
	NumericalStatsResult *AnalyzeDataSourceRiskDetails_NumericalStatsResult `protobuf:"bytes,3,opt,name=numerical_stats_result,json=numericalStatsResult,oneof"`
}
type AnalyzeDataSourceRiskDetails_CategoricalStatsResult_ struct {
	CategoricalStatsResult *AnalyzeDataSourceRiskDetails_CategoricalStatsResult `protobuf:"bytes,4,opt,name=categorical_stats_result,json=categoricalStatsResult,oneof"`
}
type AnalyzeDataSourceRiskDetails_KAnonymityResult_ struct {
	KAnonymityResult *AnalyzeDataSourceRiskDetails_KAnonymityResult `protobuf:"bytes,5,opt,name=k_anonymity_result,json=kAnonymityResult,oneof"`
}
type AnalyzeDataSourceRiskDetails_LDiversityResult_ struct {
	LDiversityResult *AnalyzeDataSourceRiskDetails_LDiversityResult `protobuf:"bytes,6,opt,name=l_diversity_result,json=lDiversityResult,oneof"`
}
type AnalyzeDataSourceRiskDetails_KMapEstimationResult_ struct {
	KMapEstimationResult *AnalyzeDataSourceRiskDetails_KMapEstimationResult `protobuf:"bytes,7,opt,name=k_map_estimation_result,json=kMapEstimationResult,oneof"`
}

func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult_) isAnalyzeDataSourceRiskDetails_Result()   {}
func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_) isAnalyzeDataSourceRiskDetails_Result() {}
func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_) isAnalyzeDataSourceRiskDetails_Result()       {}
func (*AnalyzeDataSourceRiskDetails_LDiversityResult_) isAnalyzeDataSourceRiskDetails_Result()       {}
func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_) isAnalyzeDataSourceRiskDetails_Result()   {}

func (m *AnalyzeDataSourceRiskDetails) GetResult() isAnalyzeDataSourceRiskDetails_Result {
	if m != nil {
		return m.Result
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails) GetRequestedPrivacyMetric() *PrivacyMetric {
	if m != nil {
		return m.RequestedPrivacyMetric
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails) GetRequestedSourceTable() *BigQueryTable {
	if m != nil {
		return m.RequestedSourceTable
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails) GetNumericalStatsResult() *AnalyzeDataSourceRiskDetails_NumericalStatsResult {
	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_NumericalStatsResult_); ok {
		return x.NumericalStatsResult
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails) GetCategoricalStatsResult() *AnalyzeDataSourceRiskDetails_CategoricalStatsResult {
	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_); ok {
		return x.CategoricalStatsResult
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails) GetKAnonymityResult() *AnalyzeDataSourceRiskDetails_KAnonymityResult {
	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_KAnonymityResult_); ok {
		return x.KAnonymityResult
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails) GetLDiversityResult() *AnalyzeDataSourceRiskDetails_LDiversityResult {
	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_LDiversityResult_); ok {
		return x.LDiversityResult
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails) GetKMapEstimationResult() *AnalyzeDataSourceRiskDetails_KMapEstimationResult {
	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_KMapEstimationResult_); ok {
		return x.KMapEstimationResult
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*AnalyzeDataSourceRiskDetails) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _AnalyzeDataSourceRiskDetails_OneofMarshaler, _AnalyzeDataSourceRiskDetails_OneofUnmarshaler, _AnalyzeDataSourceRiskDetails_OneofSizer, []interface{}{
		(*AnalyzeDataSourceRiskDetails_NumericalStatsResult_)(nil),
		(*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_)(nil),
		(*AnalyzeDataSourceRiskDetails_KAnonymityResult_)(nil),
		(*AnalyzeDataSourceRiskDetails_LDiversityResult_)(nil),
		(*AnalyzeDataSourceRiskDetails_KMapEstimationResult_)(nil),
	}
}

func _AnalyzeDataSourceRiskDetails_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*AnalyzeDataSourceRiskDetails)
	// result
	switch x := m.Result.(type) {
	case *AnalyzeDataSourceRiskDetails_NumericalStatsResult_:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.NumericalStatsResult); err != nil {
			return err
		}
	case *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.CategoricalStatsResult); err != nil {
			return err
		}
	case *AnalyzeDataSourceRiskDetails_KAnonymityResult_:
		b.EncodeVarint(5<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.KAnonymityResult); err != nil {
			return err
		}
	case *AnalyzeDataSourceRiskDetails_LDiversityResult_:
		b.EncodeVarint(6<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.LDiversityResult); err != nil {
			return err
		}
	case *AnalyzeDataSourceRiskDetails_KMapEstimationResult_:
		b.EncodeVarint(7<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.KMapEstimationResult); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("AnalyzeDataSourceRiskDetails.Result has unexpected type %T", x)
	}
	return nil
}

func _AnalyzeDataSourceRiskDetails_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*AnalyzeDataSourceRiskDetails)
	switch tag {
	case 3: // result.numerical_stats_result
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(AnalyzeDataSourceRiskDetails_NumericalStatsResult)
		err := b.DecodeMessage(msg)
		m.Result = &AnalyzeDataSourceRiskDetails_NumericalStatsResult_{msg}
		return true, err
	case 4: // result.categorical_stats_result
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(AnalyzeDataSourceRiskDetails_CategoricalStatsResult)
		err := b.DecodeMessage(msg)
		m.Result = &AnalyzeDataSourceRiskDetails_CategoricalStatsResult_{msg}
		return true, err
	case 5: // result.k_anonymity_result
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(AnalyzeDataSourceRiskDetails_KAnonymityResult)
		err := b.DecodeMessage(msg)
		m.Result = &AnalyzeDataSourceRiskDetails_KAnonymityResult_{msg}
		return true, err
	case 6: // result.l_diversity_result
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(AnalyzeDataSourceRiskDetails_LDiversityResult)
		err := b.DecodeMessage(msg)
		m.Result = &AnalyzeDataSourceRiskDetails_LDiversityResult_{msg}
		return true, err
	case 7: // result.k_map_estimation_result
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(AnalyzeDataSourceRiskDetails_KMapEstimationResult)
		err := b.DecodeMessage(msg)
		m.Result = &AnalyzeDataSourceRiskDetails_KMapEstimationResult_{msg}
		return true, err
	default:
		return false, nil
	}
}

func _AnalyzeDataSourceRiskDetails_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*AnalyzeDataSourceRiskDetails)
	// result
	switch x := m.Result.(type) {
	case *AnalyzeDataSourceRiskDetails_NumericalStatsResult_:
		s := proto.Size(x.NumericalStatsResult)
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_:
		s := proto.Size(x.CategoricalStatsResult)
		n += proto.SizeVarint(4<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *AnalyzeDataSourceRiskDetails_KAnonymityResult_:
		s := proto.Size(x.KAnonymityResult)
		n += proto.SizeVarint(5<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *AnalyzeDataSourceRiskDetails_LDiversityResult_:
		s := proto.Size(x.LDiversityResult)
		n += proto.SizeVarint(6<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *AnalyzeDataSourceRiskDetails_KMapEstimationResult_:
		s := proto.Size(x.KMapEstimationResult)
		n += proto.SizeVarint(7<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Result of the numerical stats computation.
type AnalyzeDataSourceRiskDetails_NumericalStatsResult struct {
	// Minimum value appearing in the column.
	MinValue *Value `protobuf:"bytes,1,opt,name=min_value,json=minValue" json:"min_value,omitempty"`
	// Maximum value appearing in the column.
	MaxValue *Value `protobuf:"bytes,2,opt,name=max_value,json=maxValue" json:"max_value,omitempty"`
	// List of 99 values that partition the set of field values into 100 equal
	// sized buckets.
	QuantileValues []*Value `protobuf:"bytes,4,rep,name=quantile_values,json=quantileValues" json:"quantile_values,omitempty"`
}

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

func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetMinValue() *Value {
	if m != nil {
		return m.MinValue
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetMaxValue() *Value {
	if m != nil {
		return m.MaxValue
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetQuantileValues() []*Value {
	if m != nil {
		return m.QuantileValues
	}
	return nil
}

// Result of the categorical stats computation.
type AnalyzeDataSourceRiskDetails_CategoricalStatsResult struct {
	// Histogram of value frequencies in the column.
	ValueFrequencyHistogramBuckets []*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket `protobuf:"bytes,5,rep,name=value_frequency_histogram_buckets,json=valueFrequencyHistogramBuckets" json:"value_frequency_histogram_buckets,omitempty"`
}

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

func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) GetValueFrequencyHistogramBuckets() []*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket {
	if m != nil {
		return m.ValueFrequencyHistogramBuckets
	}
	return nil
}

type AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket struct {
	// Lower bound on the value frequency of the values in this bucket.
	ValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=value_frequency_lower_bound,json=valueFrequencyLowerBound" json:"value_frequency_lower_bound,omitempty"`
	// Upper bound on the value frequency of the values in this bucket.
	ValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=value_frequency_upper_bound,json=valueFrequencyUpperBound" json:"value_frequency_upper_bound,omitempty"`
	// Total number of values in this bucket.
	BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
	// Sample of value frequencies in this bucket. The total number of
	// values returned per bucket is capped at 20.
	BucketValues []*ValueFrequency `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"`
}

func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) Reset() {
	*m = AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket{}
}
func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) String() string {
	return proto.CompactTextString(m)
}
func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) ProtoMessage() {
}
func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{28, 1, 0}
}

func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyLowerBound() int64 {
	if m != nil {
		return m.ValueFrequencyLowerBound
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyUpperBound() int64 {
	if m != nil {
		return m.ValueFrequencyUpperBound
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketSize() int64 {
	if m != nil {
		return m.BucketSize
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketValues() []*ValueFrequency {
	if m != nil {
		return m.BucketValues
	}
	return nil
}

// Result of the k-anonymity computation.
type AnalyzeDataSourceRiskDetails_KAnonymityResult struct {
	// Histogram of k-anonymity equivalence classes.
	EquivalenceClassHistogramBuckets []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket `protobuf:"bytes,5,rep,name=equivalence_class_histogram_buckets,json=equivalenceClassHistogramBuckets" json:"equivalence_class_histogram_buckets,omitempty"`
}

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

func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) GetEquivalenceClassHistogramBuckets() []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket {
	if m != nil {
		return m.EquivalenceClassHistogramBuckets
	}
	return nil
}

// The set of columns' values that share the same ldiversity value
type AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass struct {
	// Set of values defining the equivalence class. One value per
	// quasi-identifier column in the original KAnonymity metric message.
	// The order is always the same as the original request.
	QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"`
	// Size of the equivalence class, for example number of rows with the
	// above set of values.
	EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"`
}

func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) Reset() {
	*m = AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass{}
}
func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) String() string {
	return proto.CompactTextString(m)
}
func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) ProtoMessage() {}
func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{28, 2, 0}
}

func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) GetQuasiIdsValues() []*Value {
	if m != nil {
		return m.QuasiIdsValues
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) GetEquivalenceClassSize() int64 {
	if m != nil {
		return m.EquivalenceClassSize
	}
	return 0
}

type AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket struct {
	// Lower bound on the size of the equivalence classes in this bucket.
	EquivalenceClassSizeLowerBound int64 `protobuf:"varint,1,opt,name=equivalence_class_size_lower_bound,json=equivalenceClassSizeLowerBound" json:"equivalence_class_size_lower_bound,omitempty"`
	// Upper bound on the size of the equivalence classes in this bucket.
	EquivalenceClassSizeUpperBound int64 `protobuf:"varint,2,opt,name=equivalence_class_size_upper_bound,json=equivalenceClassSizeUpperBound" json:"equivalence_class_size_upper_bound,omitempty"`
	// Total number of equivalence classes in this bucket.
	BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
	// Sample of equivalence classes in this bucket. The total number of
	// classes returned per bucket is capped at 20.
	BucketValues []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"`
}

func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) Reset() {
	*m = AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket{}
}
func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) String() string {
	return proto.CompactTextString(m)
}
func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) ProtoMessage() {}
func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{28, 2, 1}
}

func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeLowerBound() int64 {
	if m != nil {
		return m.EquivalenceClassSizeLowerBound
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeUpperBound() int64 {
	if m != nil {
		return m.EquivalenceClassSizeUpperBound
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketSize() int64 {
	if m != nil {
		return m.BucketSize
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass {
	if m != nil {
		return m.BucketValues
	}
	return nil
}

// Result of the l-diversity computation.
type AnalyzeDataSourceRiskDetails_LDiversityResult struct {
	// Histogram of l-diversity equivalence class sensitive value frequencies.
	SensitiveValueFrequencyHistogramBuckets []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket `protobuf:"bytes,5,rep,name=sensitive_value_frequency_histogram_buckets,json=sensitiveValueFrequencyHistogramBuckets" json:"sensitive_value_frequency_histogram_buckets,omitempty"`
}

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

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) GetSensitiveValueFrequencyHistogramBuckets() []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket {
	if m != nil {
		return m.SensitiveValueFrequencyHistogramBuckets
	}
	return nil
}

// The set of columns' values that share the same ldiversity value.
type AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass struct {
	// Quasi-identifier values defining the k-anonymity equivalence
	// class. The order is always the same as the original request.
	QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"`
	// Size of the k-anonymity equivalence class.
	EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"`
	// Number of distinct sensitive values in this equivalence class.
	NumDistinctSensitiveValues int64 `protobuf:"varint,3,opt,name=num_distinct_sensitive_values,json=numDistinctSensitiveValues" json:"num_distinct_sensitive_values,omitempty"`
	// Estimated frequencies of top sensitive values.
	TopSensitiveValues []*ValueFrequency `protobuf:"bytes,4,rep,name=top_sensitive_values,json=topSensitiveValues" json:"top_sensitive_values,omitempty"`
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) Reset() {
	*m = AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass{}
}
func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) String() string {
	return proto.CompactTextString(m)
}
func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) ProtoMessage() {}
func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{28, 3, 0}
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetQuasiIdsValues() []*Value {
	if m != nil {
		return m.QuasiIdsValues
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetEquivalenceClassSize() int64 {
	if m != nil {
		return m.EquivalenceClassSize
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetNumDistinctSensitiveValues() int64 {
	if m != nil {
		return m.NumDistinctSensitiveValues
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetTopSensitiveValues() []*ValueFrequency {
	if m != nil {
		return m.TopSensitiveValues
	}
	return nil
}

type AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket struct {
	// Lower bound on the sensitive value frequencies of the equivalence
	// classes in this bucket.
	SensitiveValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=sensitive_value_frequency_lower_bound,json=sensitiveValueFrequencyLowerBound" json:"sensitive_value_frequency_lower_bound,omitempty"`
	// Upper bound on the sensitive value frequencies of the equivalence
	// classes in this bucket.
	SensitiveValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=sensitive_value_frequency_upper_bound,json=sensitiveValueFrequencyUpperBound" json:"sensitive_value_frequency_upper_bound,omitempty"`
	// Total number of equivalence classes in this bucket.
	BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
	// Sample of equivalence classes in this bucket. The total number of
	// classes returned per bucket is capped at 20.
	BucketValues []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"`
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) Reset() {
	*m = AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket{}
}
func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) String() string {
	return proto.CompactTextString(m)
}
func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) ProtoMessage() {}
func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{28, 3, 1}
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyLowerBound() int64 {
	if m != nil {
		return m.SensitiveValueFrequencyLowerBound
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyUpperBound() int64 {
	if m != nil {
		return m.SensitiveValueFrequencyUpperBound
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketSize() int64 {
	if m != nil {
		return m.BucketSize
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass {
	if m != nil {
		return m.BucketValues
	}
	return nil
}

// Result of the reidentifiability analysis. Note that these results are an
// estimation, not exact values.
type AnalyzeDataSourceRiskDetails_KMapEstimationResult struct {
	// The intervals [min_anonymity, max_anonymity] do not overlap. If a value
	// doesn't correspond to any such interval, the associated frequency is
	// zero. For example, the following records:
	//   {min_anonymity: 1, max_anonymity: 1, frequency: 17}
	//   {min_anonymity: 2, max_anonymity: 3, frequency: 42}
	//   {min_anonymity: 5, max_anonymity: 10, frequency: 99}
	// mean that there are no record with an estimated anonymity of 4, 5, or
	// larger than 10.
	KMapEstimationHistogram []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket `protobuf:"bytes,1,rep,name=k_map_estimation_histogram,json=kMapEstimationHistogram" json:"k_map_estimation_histogram,omitempty"`
}

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

func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) GetKMapEstimationHistogram() []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket {
	if m != nil {
		return m.KMapEstimationHistogram
	}
	return nil
}

// A tuple of values for the quasi-identifier columns.
type AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues struct {
	// The quasi-identifier values.
	QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"`
	// The estimated anonymity for these quasi-identifier values.
	EstimatedAnonymity int64 `protobuf:"varint,2,opt,name=estimated_anonymity,json=estimatedAnonymity" json:"estimated_anonymity,omitempty"`
}

func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) Reset() {
	*m = AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues{}
}
func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) String() string {
	return proto.CompactTextString(m)
}
func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) ProtoMessage() {}
func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{28, 4, 0}
}

func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) GetQuasiIdsValues() []*Value {
	if m != nil {
		return m.QuasiIdsValues
	}
	return nil
}

func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) GetEstimatedAnonymity() int64 {
	if m != nil {
		return m.EstimatedAnonymity
	}
	return 0
}

// A KMapEstimationHistogramBucket message with the following values:
//   min_anonymity: 3
//   max_anonymity: 5
//   frequency: 42
// means that there are 42 records whose quasi-identifier values correspond
// to 3, 4 or 5 people in the overlying population. An important particular
// case is when min_anonymity = max_anonymity = 1: the frequency field then
// corresponds to the number of uniquely identifiable records.
type AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket struct {
	// Always positive.
	MinAnonymity int64 `protobuf:"varint,1,opt,name=min_anonymity,json=minAnonymity" json:"min_anonymity,omitempty"`
	// Always greater than or equal to min_anonymity.
	MaxAnonymity int64 `protobuf:"varint,2,opt,name=max_anonymity,json=maxAnonymity" json:"max_anonymity,omitempty"`
	// Number of records within these anonymity bounds.
	BucketSize int64 `protobuf:"varint,5,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
	// Sample of quasi-identifier tuple values in this bucket. The total
	// number of classes returned per bucket is capped at 20.
	BucketValues []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues `protobuf:"bytes,6,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"`
}

func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) Reset() {
	*m = AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket{}
}
func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) String() string {
	return proto.CompactTextString(m)
}
func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) ProtoMessage() {
}
func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{28, 4, 1}
}

func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetMinAnonymity() int64 {
	if m != nil {
		return m.MinAnonymity
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetMaxAnonymity() int64 {
	if m != nil {
		return m.MaxAnonymity
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketSize() int64 {
	if m != nil {
		return m.BucketSize
	}
	return 0
}

func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues {
	if m != nil {
		return m.BucketValues
	}
	return nil
}

// A value of a field, including its frequency.
type ValueFrequency struct {
	// A value contained in the field in question.
	Value *Value `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"`
	// How many times the value is contained in the field.
	Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
}

func (m *ValueFrequency) Reset()                    { *m = ValueFrequency{} }
func (m *ValueFrequency) String() string            { return proto.CompactTextString(m) }
func (*ValueFrequency) ProtoMessage()               {}
func (*ValueFrequency) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }

func (m *ValueFrequency) GetValue() *Value {
	if m != nil {
		return m.Value
	}
	return nil
}

func (m *ValueFrequency) GetCount() int64 {
	if m != nil {
		return m.Count
	}
	return 0
}

// Set of primitive values supported by the system.
// Note that for the purposes of inspection or transformation, the number
// of bytes considered to comprise a 'Value' is based on its representation
// as a UTF-8 encoded string. For example, if 'integer_value' is set to
// 123456789, the number of bytes would be counted as 9, even though an
// int64 only holds up to 8 bytes of data.
type Value struct {
	// Types that are valid to be assigned to Type:
	//	*Value_IntegerValue
	//	*Value_FloatValue
	//	*Value_StringValue
	//	*Value_BooleanValue
	//	*Value_TimestampValue
	//	*Value_TimeValue
	//	*Value_DateValue
	Type isValue_Type `protobuf_oneof:"type"`
}

func (m *Value) Reset()                    { *m = Value{} }
func (m *Value) String() string            { return proto.CompactTextString(m) }
func (*Value) ProtoMessage()               {}
func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }

type isValue_Type interface {
	isValue_Type()
}

type Value_IntegerValue struct {
	IntegerValue int64 `protobuf:"varint,1,opt,name=integer_value,json=integerValue,oneof"`
}
type Value_FloatValue struct {
	FloatValue float64 `protobuf:"fixed64,2,opt,name=float_value,json=floatValue,oneof"`
}
type Value_StringValue struct {
	StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,oneof"`
}
type Value_BooleanValue struct {
	BooleanValue bool `protobuf:"varint,4,opt,name=boolean_value,json=booleanValue,oneof"`
}
type Value_TimestampValue struct {
	TimestampValue *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=timestamp_value,json=timestampValue,oneof"`
}
type Value_TimeValue struct {
	TimeValue *google_type2.TimeOfDay `protobuf:"bytes,6,opt,name=time_value,json=timeValue,oneof"`
}
type Value_DateValue struct {
	DateValue *google_type.Date `protobuf:"bytes,7,opt,name=date_value,json=dateValue,oneof"`
}

func (*Value_IntegerValue) isValue_Type()   {}
func (*Value_FloatValue) isValue_Type()     {}
func (*Value_StringValue) isValue_Type()    {}
func (*Value_BooleanValue) isValue_Type()   {}
func (*Value_TimestampValue) isValue_Type() {}
func (*Value_TimeValue) isValue_Type()      {}
func (*Value_DateValue) isValue_Type()      {}

func (m *Value) GetType() isValue_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *Value) GetIntegerValue() int64 {
	if x, ok := m.GetType().(*Value_IntegerValue); ok {
		return x.IntegerValue
	}
	return 0
}

func (m *Value) GetFloatValue() float64 {
	if x, ok := m.GetType().(*Value_FloatValue); ok {
		return x.FloatValue
	}
	return 0
}

func (m *Value) GetStringValue() string {
	if x, ok := m.GetType().(*Value_StringValue); ok {
		return x.StringValue
	}
	return ""
}

func (m *Value) GetBooleanValue() bool {
	if x, ok := m.GetType().(*Value_BooleanValue); ok {
		return x.BooleanValue
	}
	return false
}

func (m *Value) GetTimestampValue() *google_protobuf1.Timestamp {
	if x, ok := m.GetType().(*Value_TimestampValue); ok {
		return x.TimestampValue
	}
	return nil
}

func (m *Value) GetTimeValue() *google_type2.TimeOfDay {
	if x, ok := m.GetType().(*Value_TimeValue); ok {
		return x.TimeValue
	}
	return nil
}

func (m *Value) GetDateValue() *google_type.Date {
	if x, ok := m.GetType().(*Value_DateValue); ok {
		return x.DateValue
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{
		(*Value_IntegerValue)(nil),
		(*Value_FloatValue)(nil),
		(*Value_StringValue)(nil),
		(*Value_BooleanValue)(nil),
		(*Value_TimestampValue)(nil),
		(*Value_TimeValue)(nil),
		(*Value_DateValue)(nil),
	}
}

func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*Value)
	// type
	switch x := m.Type.(type) {
	case *Value_IntegerValue:
		b.EncodeVarint(1<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.IntegerValue))
	case *Value_FloatValue:
		b.EncodeVarint(2<<3 | proto.WireFixed64)
		b.EncodeFixed64(math.Float64bits(x.FloatValue))
	case *Value_StringValue:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.StringValue)
	case *Value_BooleanValue:
		t := uint64(0)
		if x.BooleanValue {
			t = 1
		}
		b.EncodeVarint(4<<3 | proto.WireVarint)
		b.EncodeVarint(t)
	case *Value_TimestampValue:
		b.EncodeVarint(5<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.TimestampValue); err != nil {
			return err
		}
	case *Value_TimeValue:
		b.EncodeVarint(6<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.TimeValue); err != nil {
			return err
		}
	case *Value_DateValue:
		b.EncodeVarint(7<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.DateValue); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("Value.Type has unexpected type %T", x)
	}
	return nil
}

func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*Value)
	switch tag {
	case 1: // type.integer_value
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Type = &Value_IntegerValue{int64(x)}
		return true, err
	case 2: // type.float_value
		if wire != proto.WireFixed64 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed64()
		m.Type = &Value_FloatValue{math.Float64frombits(x)}
		return true, err
	case 3: // type.string_value
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Type = &Value_StringValue{x}
		return true, err
	case 4: // type.boolean_value
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Type = &Value_BooleanValue{x != 0}
		return true, err
	case 5: // type.timestamp_value
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(google_protobuf1.Timestamp)
		err := b.DecodeMessage(msg)
		m.Type = &Value_TimestampValue{msg}
		return true, err
	case 6: // type.time_value
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(google_type2.TimeOfDay)
		err := b.DecodeMessage(msg)
		m.Type = &Value_TimeValue{msg}
		return true, err
	case 7: // type.date_value
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(google_type.Date)
		err := b.DecodeMessage(msg)
		m.Type = &Value_DateValue{msg}
		return true, err
	default:
		return false, nil
	}
}

func _Value_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*Value)
	// type
	switch x := m.Type.(type) {
	case *Value_IntegerValue:
		n += proto.SizeVarint(1<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.IntegerValue))
	case *Value_FloatValue:
		n += proto.SizeVarint(2<<3 | proto.WireFixed64)
		n += 8
	case *Value_StringValue:
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.StringValue)))
		n += len(x.StringValue)
	case *Value_BooleanValue:
		n += proto.SizeVarint(4<<3 | proto.WireVarint)
		n += 1
	case *Value_TimestampValue:
		s := proto.Size(x.TimestampValue)
		n += proto.SizeVarint(5<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Value_TimeValue:
		s := proto.Size(x.TimeValue)
		n += proto.SizeVarint(6<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Value_DateValue:
		s := proto.Size(x.DateValue)
		n += proto.SizeVarint(7<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// The configuration that controls how the data will change.
type DeidentifyConfig struct {
	// Types that are valid to be assigned to Transformation:
	//	*DeidentifyConfig_InfoTypeTransformations
	//	*DeidentifyConfig_RecordTransformations
	Transformation isDeidentifyConfig_Transformation `protobuf_oneof:"transformation"`
}

func (m *DeidentifyConfig) Reset()                    { *m = DeidentifyConfig{} }
func (m *DeidentifyConfig) String() string            { return proto.CompactTextString(m) }
func (*DeidentifyConfig) ProtoMessage()               {}
func (*DeidentifyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }

type isDeidentifyConfig_Transformation interface {
	isDeidentifyConfig_Transformation()
}

type DeidentifyConfig_InfoTypeTransformations struct {
	InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,1,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"`
}
type DeidentifyConfig_RecordTransformations struct {
	RecordTransformations *RecordTransformations `protobuf:"bytes,2,opt,name=record_transformations,json=recordTransformations,oneof"`
}

func (*DeidentifyConfig_InfoTypeTransformations) isDeidentifyConfig_Transformation() {}
func (*DeidentifyConfig_RecordTransformations) isDeidentifyConfig_Transformation()   {}

func (m *DeidentifyConfig) GetTransformation() isDeidentifyConfig_Transformation {
	if m != nil {
		return m.Transformation
	}
	return nil
}

func (m *DeidentifyConfig) GetInfoTypeTransformations() *InfoTypeTransformations {
	if x, ok := m.GetTransformation().(*DeidentifyConfig_InfoTypeTransformations); ok {
		return x.InfoTypeTransformations
	}
	return nil
}

func (m *DeidentifyConfig) GetRecordTransformations() *RecordTransformations {
	if x, ok := m.GetTransformation().(*DeidentifyConfig_RecordTransformations); ok {
		return x.RecordTransformations
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*DeidentifyConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _DeidentifyConfig_OneofMarshaler, _DeidentifyConfig_OneofUnmarshaler, _DeidentifyConfig_OneofSizer, []interface{}{
		(*DeidentifyConfig_InfoTypeTransformations)(nil),
		(*DeidentifyConfig_RecordTransformations)(nil),
	}
}

func _DeidentifyConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*DeidentifyConfig)
	// transformation
	switch x := m.Transformation.(type) {
	case *DeidentifyConfig_InfoTypeTransformations:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil {
			return err
		}
	case *DeidentifyConfig_RecordTransformations:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.RecordTransformations); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("DeidentifyConfig.Transformation has unexpected type %T", x)
	}
	return nil
}

func _DeidentifyConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*DeidentifyConfig)
	switch tag {
	case 1: // transformation.info_type_transformations
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(InfoTypeTransformations)
		err := b.DecodeMessage(msg)
		m.Transformation = &DeidentifyConfig_InfoTypeTransformations{msg}
		return true, err
	case 2: // transformation.record_transformations
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(RecordTransformations)
		err := b.DecodeMessage(msg)
		m.Transformation = &DeidentifyConfig_RecordTransformations{msg}
		return true, err
	default:
		return false, nil
	}
}

func _DeidentifyConfig_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*DeidentifyConfig)
	// transformation
	switch x := m.Transformation.(type) {
	case *DeidentifyConfig_InfoTypeTransformations:
		s := proto.Size(x.InfoTypeTransformations)
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *DeidentifyConfig_RecordTransformations:
		s := proto.Size(x.RecordTransformations)
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// A rule for transforming a value.
type PrimitiveTransformation struct {
	// Types that are valid to be assigned to Transformation:
	//	*PrimitiveTransformation_ReplaceConfig
	//	*PrimitiveTransformation_RedactConfig
	//	*PrimitiveTransformation_CharacterMaskConfig
	//	*PrimitiveTransformation_CryptoReplaceFfxFpeConfig
	//	*PrimitiveTransformation_FixedSizeBucketingConfig
	//	*PrimitiveTransformation_BucketingConfig
	//	*PrimitiveTransformation_ReplaceWithInfoTypeConfig
	//	*PrimitiveTransformation_TimePartConfig
	//	*PrimitiveTransformation_CryptoHashConfig
	Transformation isPrimitiveTransformation_Transformation `protobuf_oneof:"transformation"`
}

func (m *PrimitiveTransformation) Reset()                    { *m = PrimitiveTransformation{} }
func (m *PrimitiveTransformation) String() string            { return proto.CompactTextString(m) }
func (*PrimitiveTransformation) ProtoMessage()               {}
func (*PrimitiveTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }

type isPrimitiveTransformation_Transformation interface {
	isPrimitiveTransformation_Transformation()
}

type PrimitiveTransformation_ReplaceConfig struct {
	ReplaceConfig *ReplaceValueConfig `protobuf:"bytes,1,opt,name=replace_config,json=replaceConfig,oneof"`
}
type PrimitiveTransformation_RedactConfig struct {
	RedactConfig *RedactConfig `protobuf:"bytes,2,opt,name=redact_config,json=redactConfig,oneof"`
}
type PrimitiveTransformation_CharacterMaskConfig struct {
	CharacterMaskConfig *CharacterMaskConfig `protobuf:"bytes,3,opt,name=character_mask_config,json=characterMaskConfig,oneof"`
}
type PrimitiveTransformation_CryptoReplaceFfxFpeConfig struct {
	CryptoReplaceFfxFpeConfig *CryptoReplaceFfxFpeConfig `protobuf:"bytes,4,opt,name=crypto_replace_ffx_fpe_config,json=cryptoReplaceFfxFpeConfig,oneof"`
}
type PrimitiveTransformation_FixedSizeBucketingConfig struct {
	FixedSizeBucketingConfig *FixedSizeBucketingConfig `protobuf:"bytes,5,opt,name=fixed_size_bucketing_config,json=fixedSizeBucketingConfig,oneof"`
}
type PrimitiveTransformation_BucketingConfig struct {
	BucketingConfig *BucketingConfig `protobuf:"bytes,6,opt,name=bucketing_config,json=bucketingConfig,oneof"`
}
type PrimitiveTransformation_ReplaceWithInfoTypeConfig struct {
	ReplaceWithInfoTypeConfig *ReplaceWithInfoTypeConfig `protobuf:"bytes,7,opt,name=replace_with_info_type_config,json=replaceWithInfoTypeConfig,oneof"`
}
type PrimitiveTransformation_TimePartConfig struct {
	TimePartConfig *TimePartConfig `protobuf:"bytes,8,opt,name=time_part_config,json=timePartConfig,oneof"`
}
type PrimitiveTransformation_CryptoHashConfig struct {
	CryptoHashConfig *CryptoHashConfig `protobuf:"bytes,9,opt,name=crypto_hash_config,json=cryptoHashConfig,oneof"`
}

func (*PrimitiveTransformation_ReplaceConfig) isPrimitiveTransformation_Transformation()             {}
func (*PrimitiveTransformation_RedactConfig) isPrimitiveTransformation_Transformation()              {}
func (*PrimitiveTransformation_CharacterMaskConfig) isPrimitiveTransformation_Transformation()       {}
func (*PrimitiveTransformation_CryptoReplaceFfxFpeConfig) isPrimitiveTransformation_Transformation() {}
func (*PrimitiveTransformation_FixedSizeBucketingConfig) isPrimitiveTransformation_Transformation()  {}
func (*PrimitiveTransformation_BucketingConfig) isPrimitiveTransformation_Transformation()           {}
func (*PrimitiveTransformation_ReplaceWithInfoTypeConfig) isPrimitiveTransformation_Transformation() {}
func (*PrimitiveTransformation_TimePartConfig) isPrimitiveTransformation_Transformation()            {}
func (*PrimitiveTransformation_CryptoHashConfig) isPrimitiveTransformation_Transformation()          {}

func (m *PrimitiveTransformation) GetTransformation() isPrimitiveTransformation_Transformation {
	if m != nil {
		return m.Transformation
	}
	return nil
}

func (m *PrimitiveTransformation) GetReplaceConfig() *ReplaceValueConfig {
	if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceConfig); ok {
		return x.ReplaceConfig
	}
	return nil
}

func (m *PrimitiveTransformation) GetRedactConfig() *RedactConfig {
	if x, ok := m.GetTransformation().(*PrimitiveTransformation_RedactConfig); ok {
		return x.RedactConfig
	}
	return nil
}

func (m *PrimitiveTransformation) GetCharacterMaskConfig() *CharacterMaskConfig {
	if x, ok := m.GetTransformation().(*PrimitiveTransformation_CharacterMaskConfig); ok {
		return x.CharacterMaskConfig
	}
	return nil
}

func (m *PrimitiveTransformation) GetCryptoReplaceFfxFpeConfig() *CryptoReplaceFfxFpeConfig {
	if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoReplaceFfxFpeConfig); ok {
		return x.CryptoReplaceFfxFpeConfig
	}
	return nil
}

func (m *PrimitiveTransformation) GetFixedSizeBucketingConfig() *FixedSizeBucketingConfig {
	if x, ok := m.GetTransformation().(*PrimitiveTransformation_FixedSizeBucketingConfig); ok {
		return x.FixedSizeBucketingConfig
	}
	return nil
}

func (m *PrimitiveTransformation) GetBucketingConfig() *BucketingConfig {
	if x, ok := m.GetTransformation().(*PrimitiveTransformation_BucketingConfig); ok {
		return x.BucketingConfig
	}
	return nil
}

func (m *PrimitiveTransformation) GetReplaceWithInfoTypeConfig() *ReplaceWithInfoTypeConfig {
	if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceWithInfoTypeConfig); ok {
		return x.ReplaceWithInfoTypeConfig
	}
	return nil
}

func (m *PrimitiveTransformation) GetTimePartConfig() *TimePartConfig {
	if x, ok := m.GetTransformation().(*PrimitiveTransformation_TimePartConfig); ok {
		return x.TimePartConfig
	}
	return nil
}

func (m *PrimitiveTransformation) GetCryptoHashConfig() *CryptoHashConfig {
	if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoHashConfig); ok {
		return x.CryptoHashConfig
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*PrimitiveTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _PrimitiveTransformation_OneofMarshaler, _PrimitiveTransformation_OneofUnmarshaler, _PrimitiveTransformation_OneofSizer, []interface{}{
		(*PrimitiveTransformation_ReplaceConfig)(nil),
		(*PrimitiveTransformation_RedactConfig)(nil),
		(*PrimitiveTransformation_CharacterMaskConfig)(nil),
		(*PrimitiveTransformation_CryptoReplaceFfxFpeConfig)(nil),
		(*PrimitiveTransformation_FixedSizeBucketingConfig)(nil),
		(*PrimitiveTransformation_BucketingConfig)(nil),
		(*PrimitiveTransformation_ReplaceWithInfoTypeConfig)(nil),
		(*PrimitiveTransformation_TimePartConfig)(nil),
		(*PrimitiveTransformation_CryptoHashConfig)(nil),
	}
}

func _PrimitiveTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*PrimitiveTransformation)
	// transformation
	switch x := m.Transformation.(type) {
	case *PrimitiveTransformation_ReplaceConfig:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.ReplaceConfig); err != nil {
			return err
		}
	case *PrimitiveTransformation_RedactConfig:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.RedactConfig); err != nil {
			return err
		}
	case *PrimitiveTransformation_CharacterMaskConfig:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.CharacterMaskConfig); err != nil {
			return err
		}
	case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.CryptoReplaceFfxFpeConfig); err != nil {
			return err
		}
	case *PrimitiveTransformation_FixedSizeBucketingConfig:
		b.EncodeVarint(5<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.FixedSizeBucketingConfig); err != nil {
			return err
		}
	case *PrimitiveTransformation_BucketingConfig:
		b.EncodeVarint(6<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.BucketingConfig); err != nil {
			return err
		}
	case *PrimitiveTransformation_ReplaceWithInfoTypeConfig:
		b.EncodeVarint(7<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.ReplaceWithInfoTypeConfig); err != nil {
			return err
		}
	case *PrimitiveTransformation_TimePartConfig:
		b.EncodeVarint(8<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.TimePartConfig); err != nil {
			return err
		}
	case *PrimitiveTransformation_CryptoHashConfig:
		b.EncodeVarint(9<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.CryptoHashConfig); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("PrimitiveTransformation.Transformation has unexpected type %T", x)
	}
	return nil
}

func _PrimitiveTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*PrimitiveTransformation)
	switch tag {
	case 1: // transformation.replace_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(ReplaceValueConfig)
		err := b.DecodeMessage(msg)
		m.Transformation = &PrimitiveTransformation_ReplaceConfig{msg}
		return true, err
	case 2: // transformation.redact_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(RedactConfig)
		err := b.DecodeMessage(msg)
		m.Transformation = &PrimitiveTransformation_RedactConfig{msg}
		return true, err
	case 3: // transformation.character_mask_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(CharacterMaskConfig)
		err := b.DecodeMessage(msg)
		m.Transformation = &PrimitiveTransformation_CharacterMaskConfig{msg}
		return true, err
	case 4: // transformation.crypto_replace_ffx_fpe_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(CryptoReplaceFfxFpeConfig)
		err := b.DecodeMessage(msg)
		m.Transformation = &PrimitiveTransformation_CryptoReplaceFfxFpeConfig{msg}
		return true, err
	case 5: // transformation.fixed_size_bucketing_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(FixedSizeBucketingConfig)
		err := b.DecodeMessage(msg)
		m.Transformation = &PrimitiveTransformation_FixedSizeBucketingConfig{msg}
		return true, err
	case 6: // transformation.bucketing_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(BucketingConfig)
		err := b.DecodeMessage(msg)
		m.Transformation = &PrimitiveTransformation_BucketingConfig{msg}
		return true, err
	case 7: // transformation.replace_with_info_type_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(ReplaceWithInfoTypeConfig)
		err := b.DecodeMessage(msg)
		m.Transformation = &PrimitiveTransformation_ReplaceWithInfoTypeConfig{msg}
		return true, err
	case 8: // transformation.time_part_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(TimePartConfig)
		err := b.DecodeMessage(msg)
		m.Transformation = &PrimitiveTransformation_TimePartConfig{msg}
		return true, err
	case 9: // transformation.crypto_hash_config
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(CryptoHashConfig)
		err := b.DecodeMessage(msg)
		m.Transformation = &PrimitiveTransformation_CryptoHashConfig{msg}
		return true, err
	default:
		return false, nil
	}
}

func _PrimitiveTransformation_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*PrimitiveTransformation)
	// transformation
	switch x := m.Transformation.(type) {
	case *PrimitiveTransformation_ReplaceConfig:
		s := proto.Size(x.ReplaceConfig)
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrimitiveTransformation_RedactConfig:
		s := proto.Size(x.RedactConfig)
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrimitiveTransformation_CharacterMaskConfig:
		s := proto.Size(x.CharacterMaskConfig)
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig:
		s := proto.Size(x.CryptoReplaceFfxFpeConfig)
		n += proto.SizeVarint(4<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrimitiveTransformation_FixedSizeBucketingConfig:
		s := proto.Size(x.FixedSizeBucketingConfig)
		n += proto.SizeVarint(5<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrimitiveTransformation_BucketingConfig:
		s := proto.Size(x.BucketingConfig)
		n += proto.SizeVarint(6<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrimitiveTransformation_ReplaceWithInfoTypeConfig:
		s := proto.Size(x.ReplaceWithInfoTypeConfig)
		n += proto.SizeVarint(7<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrimitiveTransformation_TimePartConfig:
		s := proto.Size(x.TimePartConfig)
		n += proto.SizeVarint(8<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *PrimitiveTransformation_CryptoHashConfig:
		s := proto.Size(x.CryptoHashConfig)
		n += proto.SizeVarint(9<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// For use with `Date`, `Timestamp`, and `TimeOfDay`, extract or preserve a
// portion of the value.
type TimePartConfig struct {
	PartToExtract TimePartConfig_TimePart `protobuf:"varint,1,opt,name=part_to_extract,json=partToExtract,enum=google.privacy.dlp.v2beta2.TimePartConfig_TimePart" json:"part_to_extract,omitempty"`
}

func (m *TimePartConfig) Reset()                    { *m = TimePartConfig{} }
func (m *TimePartConfig) String() string            { return proto.CompactTextString(m) }
func (*TimePartConfig) ProtoMessage()               {}
func (*TimePartConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }

func (m *TimePartConfig) GetPartToExtract() TimePartConfig_TimePart {
	if m != nil {
		return m.PartToExtract
	}
	return TimePartConfig_TIME_PART_UNSPECIFIED
}

// Pseudonymization method that generates surrogates via cryptographic hashing.
// Uses SHA-256.
// The key size must be either 32 or 64 bytes.
// Outputs a 32 byte digest as an uppercase hex string
// (for example, 41D1567F7F99F1DC2A5FAB886DEE5BEE).
// Currently, only string and integer values can be hashed.
type CryptoHashConfig struct {
	// The key used by the hash function.
	CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"`
}

func (m *CryptoHashConfig) Reset()                    { *m = CryptoHashConfig{} }
func (m *CryptoHashConfig) String() string            { return proto.CompactTextString(m) }
func (*CryptoHashConfig) ProtoMessage()               {}
func (*CryptoHashConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }

func (m *CryptoHashConfig) GetCryptoKey() *CryptoKey {
	if m != nil {
		return m.CryptoKey
	}
	return nil
}

// Replace each input value with a given `Value`.
type ReplaceValueConfig struct {
	// Value to replace it with.
	NewValue *Value `protobuf:"bytes,1,opt,name=new_value,json=newValue" json:"new_value,omitempty"`
}

func (m *ReplaceValueConfig) Reset()                    { *m = ReplaceValueConfig{} }
func (m *ReplaceValueConfig) String() string            { return proto.CompactTextString(m) }
func (*ReplaceValueConfig) ProtoMessage()               {}
func (*ReplaceValueConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }

func (m *ReplaceValueConfig) GetNewValue() *Value {
	if m != nil {
		return m.NewValue
	}
	return nil
}

// Replace each matching finding with the name of the info_type.
type ReplaceWithInfoTypeConfig struct {
}

func (m *ReplaceWithInfoTypeConfig) Reset()                    { *m = ReplaceWithInfoTypeConfig{} }
func (m *ReplaceWithInfoTypeConfig) String() string            { return proto.CompactTextString(m) }
func (*ReplaceWithInfoTypeConfig) ProtoMessage()               {}
func (*ReplaceWithInfoTypeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }

// Redact a given value. For example, if used with an `InfoTypeTransformation`
// transforming PHONE_NUMBER, and input 'My phone number is 206-555-0123', the
// output would be 'My phone number is '.
type RedactConfig struct {
}

func (m *RedactConfig) Reset()                    { *m = RedactConfig{} }
func (m *RedactConfig) String() string            { return proto.CompactTextString(m) }
func (*RedactConfig) ProtoMessage()               {}
func (*RedactConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }

// Characters to skip when doing deidentification of a value. These will be left
// alone and skipped.
type CharsToIgnore struct {
	// Types that are valid to be assigned to Characters:
	//	*CharsToIgnore_CharactersToSkip
	//	*CharsToIgnore_CommonCharactersToIgnore
	Characters isCharsToIgnore_Characters `protobuf_oneof:"characters"`
}

func (m *CharsToIgnore) Reset()                    { *m = CharsToIgnore{} }
func (m *CharsToIgnore) String() string            { return proto.CompactTextString(m) }
func (*CharsToIgnore) ProtoMessage()               {}
func (*CharsToIgnore) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }

type isCharsToIgnore_Characters interface {
	isCharsToIgnore_Characters()
}

type CharsToIgnore_CharactersToSkip struct {
	CharactersToSkip string `protobuf:"bytes,1,opt,name=characters_to_skip,json=charactersToSkip,oneof"`
}
type CharsToIgnore_CommonCharactersToIgnore struct {
	CommonCharactersToIgnore CharsToIgnore_CommonCharsToIgnore `protobuf:"varint,2,opt,name=common_characters_to_ignore,json=commonCharactersToIgnore,enum=google.privacy.dlp.v2beta2.CharsToIgnore_CommonCharsToIgnore,oneof"`
}

func (*CharsToIgnore_CharactersToSkip) isCharsToIgnore_Characters()         {}
func (*CharsToIgnore_CommonCharactersToIgnore) isCharsToIgnore_Characters() {}

func (m *CharsToIgnore) GetCharacters() isCharsToIgnore_Characters {
	if m != nil {
		return m.Characters
	}
	return nil
}

func (m *CharsToIgnore) GetCharactersToSkip() string {
	if x, ok := m.GetCharacters().(*CharsToIgnore_CharactersToSkip); ok {
		return x.CharactersToSkip
	}
	return ""
}

func (m *CharsToIgnore) GetCommonCharactersToIgnore() CharsToIgnore_CommonCharsToIgnore {
	if x, ok := m.GetCharacters().(*CharsToIgnore_CommonCharactersToIgnore); ok {
		return x.CommonCharactersToIgnore
	}
	return CharsToIgnore_COMMON_CHARS_TO_IGNORE_UNSPECIFIED
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*CharsToIgnore) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _CharsToIgnore_OneofMarshaler, _CharsToIgnore_OneofUnmarshaler, _CharsToIgnore_OneofSizer, []interface{}{
		(*CharsToIgnore_CharactersToSkip)(nil),
		(*CharsToIgnore_CommonCharactersToIgnore)(nil),
	}
}

func _CharsToIgnore_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*CharsToIgnore)
	// characters
	switch x := m.Characters.(type) {
	case *CharsToIgnore_CharactersToSkip:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.CharactersToSkip)
	case *CharsToIgnore_CommonCharactersToIgnore:
		b.EncodeVarint(2<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.CommonCharactersToIgnore))
	case nil:
	default:
		return fmt.Errorf("CharsToIgnore.Characters has unexpected type %T", x)
	}
	return nil
}

func _CharsToIgnore_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*CharsToIgnore)
	switch tag {
	case 1: // characters.characters_to_skip
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Characters = &CharsToIgnore_CharactersToSkip{x}
		return true, err
	case 2: // characters.common_characters_to_ignore
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Characters = &CharsToIgnore_CommonCharactersToIgnore{CharsToIgnore_CommonCharsToIgnore(x)}
		return true, err
	default:
		return false, nil
	}
}

func _CharsToIgnore_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*CharsToIgnore)
	// characters
	switch x := m.Characters.(type) {
	case *CharsToIgnore_CharactersToSkip:
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.CharactersToSkip)))
		n += len(x.CharactersToSkip)
	case *CharsToIgnore_CommonCharactersToIgnore:
		n += proto.SizeVarint(2<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.CommonCharactersToIgnore))
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Partially mask a string by replacing a given number of characters with a
// fixed character. Masking can start from the beginning or end of the string.
// This can be used on data of any type (numbers, longs, and so on) and when
// de-identifying structured data we'll attempt to preserve the original data's
// type. (This allows you to take a long like 123 and modify it to a string like
// **3.
type CharacterMaskConfig struct {
	// Character to mask the sensitive values&mdash;for example, "*" for an
	// alphabetic string such as name, or "0" for a numeric string such as ZIP
	// code or credit card number. String must have length 1. If not supplied, we
	// will default to "*" for strings, 0 for digits.
	MaskingCharacter string `protobuf:"bytes,1,opt,name=masking_character,json=maskingCharacter" json:"masking_character,omitempty"`
	// Number of characters to mask. If not set, all matching chars will be
	// masked. Skipped characters do not count towards this tally.
	NumberToMask int32 `protobuf:"varint,2,opt,name=number_to_mask,json=numberToMask" json:"number_to_mask,omitempty"`
	// Mask characters in reverse order. For example, if `masking_character` is
	// '0', number_to_mask is 14, and `reverse_order` is false, then
	// 1234-5678-9012-3456 -> 00000000000000-3456
	// If `masking_character` is '*', `number_to_mask` is 3, and `reverse_order`
	// is true, then 12345 -> 12***
	ReverseOrder bool `protobuf:"varint,3,opt,name=reverse_order,json=reverseOrder" json:"reverse_order,omitempty"`
	// When masking a string, items in this list will be skipped when replacing.
	// For example, if your string is 555-555-5555 and you ask us to skip `-` and
	// mask 5 chars with * we would produce ***-*55-5555.
	CharactersToIgnore []*CharsToIgnore `protobuf:"bytes,4,rep,name=characters_to_ignore,json=charactersToIgnore" json:"characters_to_ignore,omitempty"`
}

func (m *CharacterMaskConfig) Reset()                    { *m = CharacterMaskConfig{} }
func (m *CharacterMaskConfig) String() string            { return proto.CompactTextString(m) }
func (*CharacterMaskConfig) ProtoMessage()               {}
func (*CharacterMaskConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }

func (m *CharacterMaskConfig) GetMaskingCharacter() string {
	if m != nil {
		return m.MaskingCharacter
	}
	return ""
}

func (m *CharacterMaskConfig) GetNumberToMask() int32 {
	if m != nil {
		return m.NumberToMask
	}
	return 0
}

func (m *CharacterMaskConfig) GetReverseOrder() bool {
	if m != nil {
		return m.ReverseOrder
	}
	return false
}

func (m *CharacterMaskConfig) GetCharactersToIgnore() []*CharsToIgnore {
	if m != nil {
		return m.CharactersToIgnore
	}
	return nil
}

// Buckets values based on fixed size ranges. The
// Bucketing transformation can provide all of this functionality,
// but requires more configuration. This message is provided as a convenience to
// the user for simple bucketing strategies.
//
// The transformed value will be a hyphenated string of
// <lower_bound>-<upper_bound>, i.e if lower_bound = 10 and upper_bound = 20
// all values that are within this bucket will be replaced with "10-20".
//
// This can be used on data of type: double, long.
//
// If the bound Value type differs from the type of data
// being transformed, we will first attempt converting the type of the data to
// be transformed to match the type of the bound before comparing.
type FixedSizeBucketingConfig struct {
	// Lower bound value of buckets. All values less than `lower_bound` are
	// grouped together into a single bucket; for example if `lower_bound` = 10,
	// then all values less than 10 are replaced with the value “-10”. [Required].
	LowerBound *Value `protobuf:"bytes,1,opt,name=lower_bound,json=lowerBound" json:"lower_bound,omitempty"`
	// Upper bound value of buckets. All values greater than upper_bound are
	// grouped together into a single bucket; for example if `upper_bound` = 89,
	// then all values greater than 89 are replaced with the value “89+”.
	// [Required].
	UpperBound *Value `protobuf:"bytes,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"`
	// Size of each bucket (except for minimum and maximum buckets). So if
	// `lower_bound` = 10, `upper_bound` = 89, and `bucket_size` = 10, then the
	// following buckets would be used: -10, 10-20, 20-30, 30-40, 40-50, 50-60,
	// 60-70, 70-80, 80-89, 89+. Precision up to 2 decimals works. [Required].
	BucketSize float64 `protobuf:"fixed64,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
}

func (m *FixedSizeBucketingConfig) Reset()                    { *m = FixedSizeBucketingConfig{} }
func (m *FixedSizeBucketingConfig) String() string            { return proto.CompactTextString(m) }
func (*FixedSizeBucketingConfig) ProtoMessage()               {}
func (*FixedSizeBucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }

func (m *FixedSizeBucketingConfig) GetLowerBound() *Value {
	if m != nil {
		return m.LowerBound
	}
	return nil
}

func (m *FixedSizeBucketingConfig) GetUpperBound() *Value {
	if m != nil {
		return m.UpperBound
	}
	return nil
}

func (m *FixedSizeBucketingConfig) GetBucketSize() float64 {
	if m != nil {
		return m.BucketSize
	}
	return 0
}

// Generalization function that buckets values based on ranges. The ranges and
// replacement values are dynamically provided by the user for custom behavior,
// such as 1-30 -> LOW 31-65 -> MEDIUM 66-100 -> HIGH
// This can be used on
// data of type: number, long, string, timestamp.
// If the bound `Value` type differs from the type of data being transformed, we
// will first attempt converting the type of the data to be transformed to match
// the type of the bound before comparing.
type BucketingConfig struct {
	// Set of buckets. Ranges must be non-overlapping.
	Buckets []*BucketingConfig_Bucket `protobuf:"bytes,1,rep,name=buckets" json:"buckets,omitempty"`
}

func (m *BucketingConfig) Reset()                    { *m = BucketingConfig{} }
func (m *BucketingConfig) String() string            { return proto.CompactTextString(m) }
func (*BucketingConfig) ProtoMessage()               {}
func (*BucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }

func (m *BucketingConfig) GetBuckets() []*BucketingConfig_Bucket {
	if m != nil {
		return m.Buckets
	}
	return nil
}

// Bucket is represented as a range, along with replacement values.
type BucketingConfig_Bucket struct {
	// Lower bound of the range, inclusive. Type should be the same as max if
	// used.
	Min *Value `protobuf:"bytes,1,opt,name=min" json:"min,omitempty"`
	// Upper bound of the range, exclusive; type must match min.
	Max *Value `protobuf:"bytes,2,opt,name=max" json:"max,omitempty"`
	// Replacement value for this bucket. If not provided
	// the default behavior will be to hyphenate the min-max range.
	ReplacementValue *Value `protobuf:"bytes,3,opt,name=replacement_value,json=replacementValue" json:"replacement_value,omitempty"`
}

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

func (m *BucketingConfig_Bucket) GetMin() *Value {
	if m != nil {
		return m.Min
	}
	return nil
}

func (m *BucketingConfig_Bucket) GetMax() *Value {
	if m != nil {
		return m.Max
	}
	return nil
}

func (m *BucketingConfig_Bucket) GetReplacementValue() *Value {
	if m != nil {
		return m.ReplacementValue
	}
	return nil
}

// Replaces an identifier with a surrogate using FPE with the FFX
// mode of operation; however when used in the `ReidentifyContent` API method,
// it serves the opposite function by reversing the surrogate back into
// the original identifier.
// The identifier must be encoded as ASCII.
// For a given crypto key and context, the same identifier will be
// replaced with the same surrogate.
// Identifiers must be at least two characters long.
// In the case that the identifier is the empty string, it will be skipped.
type CryptoReplaceFfxFpeConfig struct {
	// The key used by the encryption algorithm. [required]
	CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"`
	// The 'tweak', a context may be used for higher security since the same
	// identifier in two different contexts won't be given the same surrogate. If
	// the context is not set, a default tweak will be used.
	//
	// If the context is set but:
	//
	// 1. there is no record present when transforming a given value or
	// 1. the field is not present when transforming a given value,
	//
	// a default tweak will be used.
	//
	// Note that case (1) is expected when an `InfoTypeTransformation` is
	// applied to both structured and non-structured `ContentItem`s.
	// Currently, the referenced field may be of value type integer or string.
	//
	// The tweak is constructed as a sequence of bytes in big endian byte order
	// such that:
	//
	// - a 64 bit integer is encoded followed by a single byte of value 1
	// - a string is encoded in UTF-8 format followed by a single byte of value
	//  å 2
	Context *FieldId `protobuf:"bytes,2,opt,name=context" json:"context,omitempty"`
	// Types that are valid to be assigned to Alphabet:
	//	*CryptoReplaceFfxFpeConfig_CommonAlphabet
	//	*CryptoReplaceFfxFpeConfig_CustomAlphabet
	//	*CryptoReplaceFfxFpeConfig_Radix
	Alphabet isCryptoReplaceFfxFpeConfig_Alphabet `protobuf_oneof:"alphabet"`
	// The custom infoType to annotate the surrogate with.
	// This annotation will be applied to the surrogate by prefixing it with
	// the name of the custom infoType followed by the number of
	// characters comprising the surrogate. The following scheme defines the
	// format: info_type_name(surrogate_character_count):surrogate
	//
	// For example, if the name of custom infoType is 'MY_TOKEN_INFO_TYPE' and
	// the surrogate is 'abc', the full replacement value
	// will be: 'MY_TOKEN_INFO_TYPE(3):abc'
	//
	// This annotation identifies the surrogate when inspecting content using the
	// custom infoType
	// [`SurrogateType`](/dlp/docs/reference/rest/v2beta2/InspectConfig#surrogatetype).
	// This facilitates reversal of the surrogate when it occurs in free text.
	//
	// In order for inspection to work properly, the name of this infoType must
	// not occur naturally anywhere in your data; otherwise, inspection may
	// find a surrogate that does not correspond to an actual identifier.
	// Therefore, choose your custom infoType name carefully after considering
	// what your data looks like. One way to select a name that has a high chance
	// of yielding reliable detection is to include one or more unicode characters
	// that are highly improbable to exist in your data.
	// For example, assuming your data is entered from a regular ASCII keyboard,
	// the symbol with the hex code point 29DD might be used like so:
	// ⧝MY_TOKEN_TYPE
	SurrogateInfoType *InfoType `protobuf:"bytes,8,opt,name=surrogate_info_type,json=surrogateInfoType" json:"surrogate_info_type,omitempty"`
}

func (m *CryptoReplaceFfxFpeConfig) Reset()                    { *m = CryptoReplaceFfxFpeConfig{} }
func (m *CryptoReplaceFfxFpeConfig) String() string            { return proto.CompactTextString(m) }
func (*CryptoReplaceFfxFpeConfig) ProtoMessage()               {}
func (*CryptoReplaceFfxFpeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }

type isCryptoReplaceFfxFpeConfig_Alphabet interface {
	isCryptoReplaceFfxFpeConfig_Alphabet()
}

type CryptoReplaceFfxFpeConfig_CommonAlphabet struct {
	CommonAlphabet CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet `protobuf:"varint,4,opt,name=common_alphabet,json=commonAlphabet,enum=google.privacy.dlp.v2beta2.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet,oneof"`
}
type CryptoReplaceFfxFpeConfig_CustomAlphabet struct {
	CustomAlphabet string `protobuf:"bytes,5,opt,name=custom_alphabet,json=customAlphabet,oneof"`
}
type CryptoReplaceFfxFpeConfig_Radix struct {
	Radix int32 `protobuf:"varint,6,opt,name=radix,oneof"`
}

func (*CryptoReplaceFfxFpeConfig_CommonAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {}
func (*CryptoReplaceFfxFpeConfig_CustomAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {}
func (*CryptoReplaceFfxFpeConfig_Radix) isCryptoReplaceFfxFpeConfig_Alphabet()          {}

func (m *CryptoReplaceFfxFpeConfig) GetAlphabet() isCryptoReplaceFfxFpeConfig_Alphabet {
	if m != nil {
		return m.Alphabet
	}
	return nil
}

func (m *CryptoReplaceFfxFpeConfig) GetCryptoKey() *CryptoKey {
	if m != nil {
		return m.CryptoKey
	}
	return nil
}

func (m *CryptoReplaceFfxFpeConfig) GetContext() *FieldId {
	if m != nil {
		return m.Context
	}
	return nil
}

func (m *CryptoReplaceFfxFpeConfig) GetCommonAlphabet() CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet {
	if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CommonAlphabet); ok {
		return x.CommonAlphabet
	}
	return CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED
}

func (m *CryptoReplaceFfxFpeConfig) GetCustomAlphabet() string {
	if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CustomAlphabet); ok {
		return x.CustomAlphabet
	}
	return ""
}

func (m *CryptoReplaceFfxFpeConfig) GetRadix() int32 {
	if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_Radix); ok {
		return x.Radix
	}
	return 0
}

func (m *CryptoReplaceFfxFpeConfig) GetSurrogateInfoType() *InfoType {
	if m != nil {
		return m.SurrogateInfoType
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*CryptoReplaceFfxFpeConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _CryptoReplaceFfxFpeConfig_OneofMarshaler, _CryptoReplaceFfxFpeConfig_OneofUnmarshaler, _CryptoReplaceFfxFpeConfig_OneofSizer, []interface{}{
		(*CryptoReplaceFfxFpeConfig_CommonAlphabet)(nil),
		(*CryptoReplaceFfxFpeConfig_CustomAlphabet)(nil),
		(*CryptoReplaceFfxFpeConfig_Radix)(nil),
	}
}

func _CryptoReplaceFfxFpeConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*CryptoReplaceFfxFpeConfig)
	// alphabet
	switch x := m.Alphabet.(type) {
	case *CryptoReplaceFfxFpeConfig_CommonAlphabet:
		b.EncodeVarint(4<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.CommonAlphabet))
	case *CryptoReplaceFfxFpeConfig_CustomAlphabet:
		b.EncodeVarint(5<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.CustomAlphabet)
	case *CryptoReplaceFfxFpeConfig_Radix:
		b.EncodeVarint(6<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.Radix))
	case nil:
	default:
		return fmt.Errorf("CryptoReplaceFfxFpeConfig.Alphabet has unexpected type %T", x)
	}
	return nil
}

func _CryptoReplaceFfxFpeConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*CryptoReplaceFfxFpeConfig)
	switch tag {
	case 4: // alphabet.common_alphabet
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Alphabet = &CryptoReplaceFfxFpeConfig_CommonAlphabet{CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet(x)}
		return true, err
	case 5: // alphabet.custom_alphabet
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Alphabet = &CryptoReplaceFfxFpeConfig_CustomAlphabet{x}
		return true, err
	case 6: // alphabet.radix
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Alphabet = &CryptoReplaceFfxFpeConfig_Radix{int32(x)}
		return true, err
	default:
		return false, nil
	}
}

func _CryptoReplaceFfxFpeConfig_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*CryptoReplaceFfxFpeConfig)
	// alphabet
	switch x := m.Alphabet.(type) {
	case *CryptoReplaceFfxFpeConfig_CommonAlphabet:
		n += proto.SizeVarint(4<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.CommonAlphabet))
	case *CryptoReplaceFfxFpeConfig_CustomAlphabet:
		n += proto.SizeVarint(5<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.CustomAlphabet)))
		n += len(x.CustomAlphabet)
	case *CryptoReplaceFfxFpeConfig_Radix:
		n += proto.SizeVarint(6<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.Radix))
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// This is a data encryption key (DEK) (as opposed to
// a key encryption key (KEK) stored by KMS).
// When using KMS to wrap/unwrap DEKs, be sure to set an appropriate
// IAM policy on the KMS CryptoKey (KEK) to ensure an attacker cannot
// unwrap the data crypto key.
type CryptoKey struct {
	// Types that are valid to be assigned to Source:
	//	*CryptoKey_Transient
	//	*CryptoKey_Unwrapped
	//	*CryptoKey_KmsWrapped
	Source isCryptoKey_Source `protobuf_oneof:"source"`
}

func (m *CryptoKey) Reset()                    { *m = CryptoKey{} }
func (m *CryptoKey) String() string            { return proto.CompactTextString(m) }
func (*CryptoKey) ProtoMessage()               {}
func (*CryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }

type isCryptoKey_Source interface {
	isCryptoKey_Source()
}

type CryptoKey_Transient struct {
	Transient *TransientCryptoKey `protobuf:"bytes,1,opt,name=transient,oneof"`
}
type CryptoKey_Unwrapped struct {
	Unwrapped *UnwrappedCryptoKey `protobuf:"bytes,2,opt,name=unwrapped,oneof"`
}
type CryptoKey_KmsWrapped struct {
	KmsWrapped *KmsWrappedCryptoKey `protobuf:"bytes,3,opt,name=kms_wrapped,json=kmsWrapped,oneof"`
}

func (*CryptoKey_Transient) isCryptoKey_Source()  {}
func (*CryptoKey_Unwrapped) isCryptoKey_Source()  {}
func (*CryptoKey_KmsWrapped) isCryptoKey_Source() {}

func (m *CryptoKey) GetSource() isCryptoKey_Source {
	if m != nil {
		return m.Source
	}
	return nil
}

func (m *CryptoKey) GetTransient() *TransientCryptoKey {
	if x, ok := m.GetSource().(*CryptoKey_Transient); ok {
		return x.Transient
	}
	return nil
}

func (m *CryptoKey) GetUnwrapped() *UnwrappedCryptoKey {
	if x, ok := m.GetSource().(*CryptoKey_Unwrapped); ok {
		return x.Unwrapped
	}
	return nil
}

func (m *CryptoKey) GetKmsWrapped() *KmsWrappedCryptoKey {
	if x, ok := m.GetSource().(*CryptoKey_KmsWrapped); ok {
		return x.KmsWrapped
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*CryptoKey) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _CryptoKey_OneofMarshaler, _CryptoKey_OneofUnmarshaler, _CryptoKey_OneofSizer, []interface{}{
		(*CryptoKey_Transient)(nil),
		(*CryptoKey_Unwrapped)(nil),
		(*CryptoKey_KmsWrapped)(nil),
	}
}

func _CryptoKey_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*CryptoKey)
	// source
	switch x := m.Source.(type) {
	case *CryptoKey_Transient:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.Transient); err != nil {
			return err
		}
	case *CryptoKey_Unwrapped:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.Unwrapped); err != nil {
			return err
		}
	case *CryptoKey_KmsWrapped:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.KmsWrapped); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("CryptoKey.Source has unexpected type %T", x)
	}
	return nil
}

func _CryptoKey_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*CryptoKey)
	switch tag {
	case 1: // source.transient
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(TransientCryptoKey)
		err := b.DecodeMessage(msg)
		m.Source = &CryptoKey_Transient{msg}
		return true, err
	case 2: // source.unwrapped
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(UnwrappedCryptoKey)
		err := b.DecodeMessage(msg)
		m.Source = &CryptoKey_Unwrapped{msg}
		return true, err
	case 3: // source.kms_wrapped
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(KmsWrappedCryptoKey)
		err := b.DecodeMessage(msg)
		m.Source = &CryptoKey_KmsWrapped{msg}
		return true, err
	default:
		return false, nil
	}
}

func _CryptoKey_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*CryptoKey)
	// source
	switch x := m.Source.(type) {
	case *CryptoKey_Transient:
		s := proto.Size(x.Transient)
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *CryptoKey_Unwrapped:
		s := proto.Size(x.Unwrapped)
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *CryptoKey_KmsWrapped:
		s := proto.Size(x.KmsWrapped)
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Use this to have a random data crypto key generated.
// It will be discarded after the request finishes.
type TransientCryptoKey struct {
	// Name of the key. [required]
	// This is an arbitrary string used to differentiate different keys.
	// A unique key is generated per name: two separate `TransientCryptoKey`
	// protos share the same generated key if their names are the same.
	// When the data crypto key is generated, this name is not used in any way
	// (repeating the api call will result in a different key being generated).
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *TransientCryptoKey) Reset()                    { *m = TransientCryptoKey{} }
func (m *TransientCryptoKey) String() string            { return proto.CompactTextString(m) }
func (*TransientCryptoKey) ProtoMessage()               {}
func (*TransientCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }

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

// Using raw keys is prone to security risks due to accidentally
// leaking the key. Choose another type of key if possible.
type UnwrappedCryptoKey struct {
	// The AES 128/192/256 bit key. [required]
	Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
}

func (m *UnwrappedCryptoKey) Reset()                    { *m = UnwrappedCryptoKey{} }
func (m *UnwrappedCryptoKey) String() string            { return proto.CompactTextString(m) }
func (*UnwrappedCryptoKey) ProtoMessage()               {}
func (*UnwrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }

func (m *UnwrappedCryptoKey) GetKey() []byte {
	if m != nil {
		return m.Key
	}
	return nil
}

// Include to use an existing data crypto key wrapped by KMS.
// Authorization requires the following IAM permissions when sending a request
// to perform a crypto transformation using a kms-wrapped crypto key:
// dlp.kms.encrypt
type KmsWrappedCryptoKey struct {
	// The wrapped data crypto key. [required]
	WrappedKey []byte `protobuf:"bytes,1,opt,name=wrapped_key,json=wrappedKey,proto3" json:"wrapped_key,omitempty"`
	// The resource name of the KMS CryptoKey to use for unwrapping. [required]
	CryptoKeyName string `protobuf:"bytes,2,opt,name=crypto_key_name,json=cryptoKeyName" json:"crypto_key_name,omitempty"`
}

func (m *KmsWrappedCryptoKey) Reset()                    { *m = KmsWrappedCryptoKey{} }
func (m *KmsWrappedCryptoKey) String() string            { return proto.CompactTextString(m) }
func (*KmsWrappedCryptoKey) ProtoMessage()               {}
func (*KmsWrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }

func (m *KmsWrappedCryptoKey) GetWrappedKey() []byte {
	if m != nil {
		return m.WrappedKey
	}
	return nil
}

func (m *KmsWrappedCryptoKey) GetCryptoKeyName() string {
	if m != nil {
		return m.CryptoKeyName
	}
	return ""
}

// A type of transformation that will scan unstructured text and
// apply various `PrimitiveTransformation`s to each finding, where the
// transformation is applied to only values that were identified as a specific
// info_type.
type InfoTypeTransformations struct {
	// Transformation for each infoType. Cannot specify more than one
	// for a given infoType. [required]
	Transformations []*InfoTypeTransformations_InfoTypeTransformation `protobuf:"bytes,1,rep,name=transformations" json:"transformations,omitempty"`
}

func (m *InfoTypeTransformations) Reset()                    { *m = InfoTypeTransformations{} }
func (m *InfoTypeTransformations) String() string            { return proto.CompactTextString(m) }
func (*InfoTypeTransformations) ProtoMessage()               {}
func (*InfoTypeTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }

func (m *InfoTypeTransformations) GetTransformations() []*InfoTypeTransformations_InfoTypeTransformation {
	if m != nil {
		return m.Transformations
	}
	return nil
}

// A transformation to apply to text that is identified as a specific
// info_type.
type InfoTypeTransformations_InfoTypeTransformation struct {
	// InfoTypes to apply the transformation to. Empty list will match all
	// available infoTypes for this transformation.
	InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"`
	// Primitive transformation to apply to the infoType. [required]
	PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,2,opt,name=primitive_transformation,json=primitiveTransformation" json:"primitive_transformation,omitempty"`
}

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

func (m *InfoTypeTransformations_InfoTypeTransformation) GetInfoTypes() []*InfoType {
	if m != nil {
		return m.InfoTypes
	}
	return nil
}

func (m *InfoTypeTransformations_InfoTypeTransformation) GetPrimitiveTransformation() *PrimitiveTransformation {
	if m != nil {
		return m.PrimitiveTransformation
	}
	return nil
}

// The transformation to apply to the field.
type FieldTransformation struct {
	// Input field(s) to apply the transformation to. [required]
	Fields []*FieldId `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty"`
	// Only apply the transformation if the condition evaluates to true for the
	// given `RecordCondition`. The conditions are allowed to reference fields
	// that are not used in the actual transformation. [optional]
	//
	// Example Use Cases:
	//
	// - Apply a different bucket transformation to an age column if the zip code
	// column for the same record is within a specific range.
	// - Redact a field if the date of birth field is greater than 85.
	Condition *RecordCondition `protobuf:"bytes,3,opt,name=condition" json:"condition,omitempty"`
	// Transformation to apply. [required]
	//
	// Types that are valid to be assigned to Transformation:
	//	*FieldTransformation_PrimitiveTransformation
	//	*FieldTransformation_InfoTypeTransformations
	Transformation isFieldTransformation_Transformation `protobuf_oneof:"transformation"`
}

func (m *FieldTransformation) Reset()                    { *m = FieldTransformation{} }
func (m *FieldTransformation) String() string            { return proto.CompactTextString(m) }
func (*FieldTransformation) ProtoMessage()               {}
func (*FieldTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} }

type isFieldTransformation_Transformation interface {
	isFieldTransformation_Transformation()
}

type FieldTransformation_PrimitiveTransformation struct {
	PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,4,opt,name=primitive_transformation,json=primitiveTransformation,oneof"`
}
type FieldTransformation_InfoTypeTransformations struct {
	InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,5,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"`
}

func (*FieldTransformation_PrimitiveTransformation) isFieldTransformation_Transformation() {}
func (*FieldTransformation_InfoTypeTransformations) isFieldTransformation_Transformation() {}

func (m *FieldTransformation) GetTransformation() isFieldTransformation_Transformation {
	if m != nil {
		return m.Transformation
	}
	return nil
}

func (m *FieldTransformation) GetFields() []*FieldId {
	if m != nil {
		return m.Fields
	}
	return nil
}

func (m *FieldTransformation) GetCondition() *RecordCondition {
	if m != nil {
		return m.Condition
	}
	return nil
}

func (m *FieldTransformation) GetPrimitiveTransformation() *PrimitiveTransformation {
	if x, ok := m.GetTransformation().(*FieldTransformation_PrimitiveTransformation); ok {
		return x.PrimitiveTransformation
	}
	return nil
}

func (m *FieldTransformation) GetInfoTypeTransformations() *InfoTypeTransformations {
	if x, ok := m.GetTransformation().(*FieldTransformation_InfoTypeTransformations); ok {
		return x.InfoTypeTransformations
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*FieldTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _FieldTransformation_OneofMarshaler, _FieldTransformation_OneofUnmarshaler, _FieldTransformation_OneofSizer, []interface{}{
		(*FieldTransformation_PrimitiveTransformation)(nil),
		(*FieldTransformation_InfoTypeTransformations)(nil),
	}
}

func _FieldTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*FieldTransformation)
	// transformation
	switch x := m.Transformation.(type) {
	case *FieldTransformation_PrimitiveTransformation:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.PrimitiveTransformation); err != nil {
			return err
		}
	case *FieldTransformation_InfoTypeTransformations:
		b.EncodeVarint(5<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("FieldTransformation.Transformation has unexpected type %T", x)
	}
	return nil
}

func _FieldTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*FieldTransformation)
	switch tag {
	case 4: // transformation.primitive_transformation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(PrimitiveTransformation)
		err := b.DecodeMessage(msg)
		m.Transformation = &FieldTransformation_PrimitiveTransformation{msg}
		return true, err
	case 5: // transformation.info_type_transformations
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(InfoTypeTransformations)
		err := b.DecodeMessage(msg)
		m.Transformation = &FieldTransformation_InfoTypeTransformations{msg}
		return true, err
	default:
		return false, nil
	}
}

func _FieldTransformation_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*FieldTransformation)
	// transformation
	switch x := m.Transformation.(type) {
	case *FieldTransformation_PrimitiveTransformation:
		s := proto.Size(x.PrimitiveTransformation)
		n += proto.SizeVarint(4<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *FieldTransformation_InfoTypeTransformations:
		s := proto.Size(x.InfoTypeTransformations)
		n += proto.SizeVarint(5<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// A type of transformation that is applied over structured data such as a
// table.
type RecordTransformations struct {
	// Transform the record by applying various field transformations.
	FieldTransformations []*FieldTransformation `protobuf:"bytes,1,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"`
	// Configuration defining which records get suppressed entirely. Records that
	// match any suppression rule are omitted from the output [optional].
	RecordSuppressions []*RecordSuppression `protobuf:"bytes,2,rep,name=record_suppressions,json=recordSuppressions" json:"record_suppressions,omitempty"`
}

func (m *RecordTransformations) Reset()                    { *m = RecordTransformations{} }
func (m *RecordTransformations) String() string            { return proto.CompactTextString(m) }
func (*RecordTransformations) ProtoMessage()               {}
func (*RecordTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} }

func (m *RecordTransformations) GetFieldTransformations() []*FieldTransformation {
	if m != nil {
		return m.FieldTransformations
	}
	return nil
}

func (m *RecordTransformations) GetRecordSuppressions() []*RecordSuppression {
	if m != nil {
		return m.RecordSuppressions
	}
	return nil
}

// Configuration to suppress records whose suppression conditions evaluate to
// true.
type RecordSuppression struct {
	// A condition that when it evaluates to true will result in the record being
	// evaluated to be suppressed from the transformed content.
	Condition *RecordCondition `protobuf:"bytes,1,opt,name=condition" json:"condition,omitempty"`
}

func (m *RecordSuppression) Reset()                    { *m = RecordSuppression{} }
func (m *RecordSuppression) String() string            { return proto.CompactTextString(m) }
func (*RecordSuppression) ProtoMessage()               {}
func (*RecordSuppression) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} }

func (m *RecordSuppression) GetCondition() *RecordCondition {
	if m != nil {
		return m.Condition
	}
	return nil
}

// A condition for determining whether a transformation should be applied to
// a field.
type RecordCondition struct {
	// An expression.
	Expressions *RecordCondition_Expressions `protobuf:"bytes,3,opt,name=expressions" json:"expressions,omitempty"`
}

func (m *RecordCondition) Reset()                    { *m = RecordCondition{} }
func (m *RecordCondition) String() string            { return proto.CompactTextString(m) }
func (*RecordCondition) ProtoMessage()               {}
func (*RecordCondition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} }

func (m *RecordCondition) GetExpressions() *RecordCondition_Expressions {
	if m != nil {
		return m.Expressions
	}
	return nil
}

// The field type of `value` and `field` do not need to match to be
// considered equal, but not all comparisons are possible.
//
// A `value` of type:
//
// - `string` can be compared against all other types
// - `boolean` can only be compared against other booleans
// - `integer` can be compared against doubles or a string if the string value
// can be parsed as an integer.
// - `double` can be compared against integers or a string if the string can
// be parsed as a double.
// - `Timestamp` can be compared against strings in RFC 3339 date string
// format.
// - `TimeOfDay` can be compared against timestamps and strings in the format
// of 'HH:mm:ss'.
//
// If we fail to compare do to type mismatch, a warning will be given and
// the condition will evaluate to false.
type RecordCondition_Condition struct {
	// Field within the record this condition is evaluated against. [required]
	Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
	// Operator used to compare the field or infoType to the value. [required]
	Operator RelationalOperator `protobuf:"varint,3,opt,name=operator,enum=google.privacy.dlp.v2beta2.RelationalOperator" json:"operator,omitempty"`
	// Value to compare against. [Required, except for `EXISTS` tests.]
	Value *Value `protobuf:"bytes,4,opt,name=value" json:"value,omitempty"`
}

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

func (m *RecordCondition_Condition) GetField() *FieldId {
	if m != nil {
		return m.Field
	}
	return nil
}

func (m *RecordCondition_Condition) GetOperator() RelationalOperator {
	if m != nil {
		return m.Operator
	}
	return RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED
}

func (m *RecordCondition_Condition) GetValue() *Value {
	if m != nil {
		return m.Value
	}
	return nil
}

// A collection of conditions.
type RecordCondition_Conditions struct {
	Conditions []*RecordCondition_Condition `protobuf:"bytes,1,rep,name=conditions" json:"conditions,omitempty"`
}

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

func (m *RecordCondition_Conditions) GetConditions() []*RecordCondition_Condition {
	if m != nil {
		return m.Conditions
	}
	return nil
}

// An expression, consisting or an operator and conditions.
type RecordCondition_Expressions struct {
	// The operator to apply to the result of conditions. Default and currently
	// only supported value is `AND`.
	LogicalOperator RecordCondition_Expressions_LogicalOperator `protobuf:"varint,1,opt,name=logical_operator,json=logicalOperator,enum=google.privacy.dlp.v2beta2.RecordCondition_Expressions_LogicalOperator" json:"logical_operator,omitempty"`
	// Types that are valid to be assigned to Type:
	//	*RecordCondition_Expressions_Conditions
	Type isRecordCondition_Expressions_Type `protobuf_oneof:"type"`
}

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

type isRecordCondition_Expressions_Type interface {
	isRecordCondition_Expressions_Type()
}

type RecordCondition_Expressions_Conditions struct {
	Conditions *RecordCondition_Conditions `protobuf:"bytes,3,opt,name=conditions,oneof"`
}

func (*RecordCondition_Expressions_Conditions) isRecordCondition_Expressions_Type() {}

func (m *RecordCondition_Expressions) GetType() isRecordCondition_Expressions_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *RecordCondition_Expressions) GetLogicalOperator() RecordCondition_Expressions_LogicalOperator {
	if m != nil {
		return m.LogicalOperator
	}
	return RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED
}

func (m *RecordCondition_Expressions) GetConditions() *RecordCondition_Conditions {
	if x, ok := m.GetType().(*RecordCondition_Expressions_Conditions); ok {
		return x.Conditions
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*RecordCondition_Expressions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _RecordCondition_Expressions_OneofMarshaler, _RecordCondition_Expressions_OneofUnmarshaler, _RecordCondition_Expressions_OneofSizer, []interface{}{
		(*RecordCondition_Expressions_Conditions)(nil),
	}
}

func _RecordCondition_Expressions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*RecordCondition_Expressions)
	// type
	switch x := m.Type.(type) {
	case *RecordCondition_Expressions_Conditions:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.Conditions); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("RecordCondition_Expressions.Type has unexpected type %T", x)
	}
	return nil
}

func _RecordCondition_Expressions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*RecordCondition_Expressions)
	switch tag {
	case 3: // type.conditions
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(RecordCondition_Conditions)
		err := b.DecodeMessage(msg)
		m.Type = &RecordCondition_Expressions_Conditions{msg}
		return true, err
	default:
		return false, nil
	}
}

func _RecordCondition_Expressions_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*RecordCondition_Expressions)
	// type
	switch x := m.Type.(type) {
	case *RecordCondition_Expressions_Conditions:
		s := proto.Size(x.Conditions)
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Overview of the modifications that occurred.
type TransformationOverview struct {
	// Total size in bytes that were transformed in some way.
	TransformedBytes int64 `protobuf:"varint,2,opt,name=transformed_bytes,json=transformedBytes" json:"transformed_bytes,omitempty"`
	// Transformations applied to the dataset.
	TransformationSummaries []*TransformationSummary `protobuf:"bytes,3,rep,name=transformation_summaries,json=transformationSummaries" json:"transformation_summaries,omitempty"`
}

func (m *TransformationOverview) Reset()                    { *m = TransformationOverview{} }
func (m *TransformationOverview) String() string            { return proto.CompactTextString(m) }
func (*TransformationOverview) ProtoMessage()               {}
func (*TransformationOverview) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} }

func (m *TransformationOverview) GetTransformedBytes() int64 {
	if m != nil {
		return m.TransformedBytes
	}
	return 0
}

func (m *TransformationOverview) GetTransformationSummaries() []*TransformationSummary {
	if m != nil {
		return m.TransformationSummaries
	}
	return nil
}

// Summary of a single tranformation.
// Only one of 'transformation', 'field_transformation', or 'record_suppress'
// will be set.
type TransformationSummary struct {
	// Set if the transformation was limited to a specific info_type.
	InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"`
	// Set if the transformation was limited to a specific FieldId.
	Field *FieldId `protobuf:"bytes,2,opt,name=field" json:"field,omitempty"`
	// The specific transformation these stats apply to.
	Transformation *PrimitiveTransformation `protobuf:"bytes,3,opt,name=transformation" json:"transformation,omitempty"`
	// The field transformation that was applied.
	// If multiple field transformations are requested for a single field,
	// this list will contain all of them; otherwise, only one is supplied.
	FieldTransformations []*FieldTransformation `protobuf:"bytes,5,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"`
	// The specific suppression option these stats apply to.
	RecordSuppress *RecordSuppression                     `protobuf:"bytes,6,opt,name=record_suppress,json=recordSuppress" json:"record_suppress,omitempty"`
	Results        []*TransformationSummary_SummaryResult `protobuf:"bytes,4,rep,name=results" json:"results,omitempty"`
	// Total size in bytes that were transformed in some way.
	TransformedBytes int64 `protobuf:"varint,7,opt,name=transformed_bytes,json=transformedBytes" json:"transformed_bytes,omitempty"`
}

func (m *TransformationSummary) Reset()                    { *m = TransformationSummary{} }
func (m *TransformationSummary) String() string            { return proto.CompactTextString(m) }
func (*TransformationSummary) ProtoMessage()               {}
func (*TransformationSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} }

func (m *TransformationSummary) GetInfoType() *InfoType {
	if m != nil {
		return m.InfoType
	}
	return nil
}

func (m *TransformationSummary) GetField() *FieldId {
	if m != nil {
		return m.Field
	}
	return nil
}

func (m *TransformationSummary) GetTransformation() *PrimitiveTransformation {
	if m != nil {
		return m.Transformation
	}
	return nil
}

func (m *TransformationSummary) GetFieldTransformations() []*FieldTransformation {
	if m != nil {
		return m.FieldTransformations
	}
	return nil
}

func (m *TransformationSummary) GetRecordSuppress() *RecordSuppression {
	if m != nil {
		return m.RecordSuppress
	}
	return nil
}

func (m *TransformationSummary) GetResults() []*TransformationSummary_SummaryResult {
	if m != nil {
		return m.Results
	}
	return nil
}

func (m *TransformationSummary) GetTransformedBytes() int64 {
	if m != nil {
		return m.TransformedBytes
	}
	return 0
}

// A collection that informs the user the number of times a particular
// `TransformationResultCode` and error details occurred.
type TransformationSummary_SummaryResult struct {
	Count int64                                          `protobuf:"varint,1,opt,name=count" json:"count,omitempty"`
	Code  TransformationSummary_TransformationResultCode `protobuf:"varint,2,opt,name=code,enum=google.privacy.dlp.v2beta2.TransformationSummary_TransformationResultCode" json:"code,omitempty"`
	// A place for warnings or errors to show up if a transformation didn't
	// work as expected.
	Details string `protobuf:"bytes,3,opt,name=details" json:"details,omitempty"`
}

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

func (m *TransformationSummary_SummaryResult) GetCount() int64 {
	if m != nil {
		return m.Count
	}
	return 0
}

func (m *TransformationSummary_SummaryResult) GetCode() TransformationSummary_TransformationResultCode {
	if m != nil {
		return m.Code
	}
	return TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED
}

func (m *TransformationSummary_SummaryResult) GetDetails() string {
	if m != nil {
		return m.Details
	}
	return ""
}

// The inspectTemplate contains a configuration (set of types of sensitive data
// to be detected) to be used anywhere you otherwise would normally specify
// InspectConfig.
type InspectTemplate struct {
	// The template name. Output only.
	//
	// The template will have one of the following formats:
	// `projects/PROJECT_ID/inspectTemplates/TEMPLATE_ID` OR
	// `organizations/ORGANIZATION_ID/inspectTemplates/TEMPLATE_ID`
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// Display name (max 256 chars).
	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"`
	// Short description (max 256 chars).
	Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
	// The creation timestamp of a inspectTemplate, output only field.
	CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
	// The last update timestamp of a inspectTemplate, output only field.
	UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"`
	// The core content of the template. Configuration of the scanning process.
	InspectConfig *InspectConfig `protobuf:"bytes,6,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
}

func (m *InspectTemplate) Reset()                    { *m = InspectTemplate{} }
func (m *InspectTemplate) String() string            { return proto.CompactTextString(m) }
func (*InspectTemplate) ProtoMessage()               {}
func (*InspectTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} }

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

func (m *InspectTemplate) GetDisplayName() string {
	if m != nil {
		return m.DisplayName
	}
	return ""
}

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

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

func (m *InspectTemplate) GetUpdateTime() *google_protobuf1.Timestamp {
	if m != nil {
		return m.UpdateTime
	}
	return nil
}

func (m *InspectTemplate) GetInspectConfig() *InspectConfig {
	if m != nil {
		return m.InspectConfig
	}
	return nil
}

// The DeidentifyTemplates contains instructions on how to deidentify content.
type DeidentifyTemplate struct {
	// The template name. Output only.
	//
	// The template will have one of the following formats:
	// `projects/PROJECT_ID/deidentifyTemplates/TEMPLATE_ID` OR
	// `organizations/ORGANIZATION_ID/deidentifyTemplates/TEMPLATE_ID`
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// Display name (max 256 chars).
	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"`
	// Short description (max 256 chars).
	Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
	// The creation timestamp of a inspectTemplate, output only field.
	CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
	// The last update timestamp of a inspectTemplate, output only field.
	UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"`
	// ///////////// // The core content of the template  // ///////////////
	DeidentifyConfig *DeidentifyConfig `protobuf:"bytes,6,opt,name=deidentify_config,json=deidentifyConfig" json:"deidentify_config,omitempty"`
}

func (m *DeidentifyTemplate) Reset()                    { *m = DeidentifyTemplate{} }
func (m *DeidentifyTemplate) String() string            { return proto.CompactTextString(m) }
func (*DeidentifyTemplate) ProtoMessage()               {}
func (*DeidentifyTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} }

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

func (m *DeidentifyTemplate) GetDisplayName() string {
	if m != nil {
		return m.DisplayName
	}
	return ""
}

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

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

func (m *DeidentifyTemplate) GetUpdateTime() *google_protobuf1.Timestamp {
	if m != nil {
		return m.UpdateTime
	}
	return nil
}

func (m *DeidentifyTemplate) GetDeidentifyConfig() *DeidentifyConfig {
	if m != nil {
		return m.DeidentifyConfig
	}
	return nil
}

// Request message for CreateInspectTemplate.
type CreateInspectTemplateRequest struct {
	// The parent resource name, for example projects/my-project-id or
	// organizations/my-org-id.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// The InspectTemplate to create.
	InspectTemplate *InspectTemplate `protobuf:"bytes,2,opt,name=inspect_template,json=inspectTemplate" json:"inspect_template,omitempty"`
	// The template id can contain uppercase and lowercase letters,
	// numbers, and hyphens; that is, it must match the regular
	// expression: `[a-zA-Z\\d-]+`. The maximum length is 100
	// characters. Can be empty to allow the system to generate one.
	TemplateId string `protobuf:"bytes,3,opt,name=template_id,json=templateId" json:"template_id,omitempty"`
}

func (m *CreateInspectTemplateRequest) Reset()                    { *m = CreateInspectTemplateRequest{} }
func (m *CreateInspectTemplateRequest) String() string            { return proto.CompactTextString(m) }
func (*CreateInspectTemplateRequest) ProtoMessage()               {}
func (*CreateInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} }

func (m *CreateInspectTemplateRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *CreateInspectTemplateRequest) GetInspectTemplate() *InspectTemplate {
	if m != nil {
		return m.InspectTemplate
	}
	return nil
}

func (m *CreateInspectTemplateRequest) GetTemplateId() string {
	if m != nil {
		return m.TemplateId
	}
	return ""
}

// Request message for UpdateInspectTemplate.
type UpdateInspectTemplateRequest struct {
	// Resource name of organization and inspectTemplate to be updated, for
	// example `organizations/433245324/inspectTemplates/432452342`.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// New InspectTemplate value.
	InspectTemplate *InspectTemplate `protobuf:"bytes,2,opt,name=inspect_template,json=inspectTemplate" json:"inspect_template,omitempty"`
	// Mask to control which fields get updated.
	UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"`
}

func (m *UpdateInspectTemplateRequest) Reset()                    { *m = UpdateInspectTemplateRequest{} }
func (m *UpdateInspectTemplateRequest) String() string            { return proto.CompactTextString(m) }
func (*UpdateInspectTemplateRequest) ProtoMessage()               {}
func (*UpdateInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} }

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

func (m *UpdateInspectTemplateRequest) GetInspectTemplate() *InspectTemplate {
	if m != nil {
		return m.InspectTemplate
	}
	return nil
}

func (m *UpdateInspectTemplateRequest) GetUpdateMask() *google_protobuf4.FieldMask {
	if m != nil {
		return m.UpdateMask
	}
	return nil
}

// Request message for GetInspectTemplate.
type GetInspectTemplateRequest struct {
	// Resource name of the organization and inspectTemplate to be read, for
	// example `organizations/433245324/inspectTemplates/432452342`.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *GetInspectTemplateRequest) Reset()                    { *m = GetInspectTemplateRequest{} }
func (m *GetInspectTemplateRequest) String() string            { return proto.CompactTextString(m) }
func (*GetInspectTemplateRequest) ProtoMessage()               {}
func (*GetInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} }

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

// Request message for ListInspectTemplates.
type ListInspectTemplatesRequest struct {
	// The parent resource name, for example projects/my-project-id or
	// organizations/my-org-id.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// Optional page token to continue retrieval. Comes from previous call
	// to `ListInspectTemplates`.
	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"`
	// Optional size of the page, can be limited by server. If zero server returns
	// a page of max size 100.
	PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"`
}

func (m *ListInspectTemplatesRequest) Reset()                    { *m = ListInspectTemplatesRequest{} }
func (m *ListInspectTemplatesRequest) String() string            { return proto.CompactTextString(m) }
func (*ListInspectTemplatesRequest) ProtoMessage()               {}
func (*ListInspectTemplatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} }

func (m *ListInspectTemplatesRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *ListInspectTemplatesRequest) GetPageToken() string {
	if m != nil {
		return m.PageToken
	}
	return ""
}

func (m *ListInspectTemplatesRequest) GetPageSize() int32 {
	if m != nil {
		return m.PageSize
	}
	return 0
}

// Response message for ListInspectTemplates.
type ListInspectTemplatesResponse struct {
	// List of inspectTemplates, up to page_size in ListInspectTemplatesRequest.
	InspectTemplates []*InspectTemplate `protobuf:"bytes,1,rep,name=inspect_templates,json=inspectTemplates" json:"inspect_templates,omitempty"`
	// If the next page is available then the next page token to be used
	// in following ListInspectTemplates request.
	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"`
}

func (m *ListInspectTemplatesResponse) Reset()                    { *m = ListInspectTemplatesResponse{} }
func (m *ListInspectTemplatesResponse) String() string            { return proto.CompactTextString(m) }
func (*ListInspectTemplatesResponse) ProtoMessage()               {}
func (*ListInspectTemplatesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} }

func (m *ListInspectTemplatesResponse) GetInspectTemplates() []*InspectTemplate {
	if m != nil {
		return m.InspectTemplates
	}
	return nil
}

func (m *ListInspectTemplatesResponse) GetNextPageToken() string {
	if m != nil {
		return m.NextPageToken
	}
	return ""
}

// Request message for DeleteInspectTemplate.
type DeleteInspectTemplateRequest struct {
	// Resource name of the organization and inspectTemplate to be deleted, for
	// example `organizations/433245324/inspectTemplates/432452342`.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *DeleteInspectTemplateRequest) Reset()                    { *m = DeleteInspectTemplateRequest{} }
func (m *DeleteInspectTemplateRequest) String() string            { return proto.CompactTextString(m) }
func (*DeleteInspectTemplateRequest) ProtoMessage()               {}
func (*DeleteInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} }

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

type InspectJobConfig struct {
	// The data to scan.
	StorageConfig *StorageConfig `protobuf:"bytes,1,opt,name=storage_config,json=storageConfig" json:"storage_config,omitempty"`
	// Where to put the findings.
	OutputConfig *OutputStorageConfig `protobuf:"bytes,2,opt,name=output_config,json=outputConfig" json:"output_config,omitempty"`
	// How and what to scan for.
	InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
	// If provided, will be used as the default for all values in InspectConfig.
	// `inspect_config` will be merged into the values persisted as part of the
	// template.
	InspectTemplateName string `protobuf:"bytes,4,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"`
}

func (m *InspectJobConfig) Reset()                    { *m = InspectJobConfig{} }
func (m *InspectJobConfig) String() string            { return proto.CompactTextString(m) }
func (*InspectJobConfig) ProtoMessage()               {}
func (*InspectJobConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} }

func (m *InspectJobConfig) GetStorageConfig() *StorageConfig {
	if m != nil {
		return m.StorageConfig
	}
	return nil
}

func (m *InspectJobConfig) GetOutputConfig() *OutputStorageConfig {
	if m != nil {
		return m.OutputConfig
	}
	return nil
}

func (m *InspectJobConfig) GetInspectConfig() *InspectConfig {
	if m != nil {
		return m.InspectConfig
	}
	return nil
}

func (m *InspectJobConfig) GetInspectTemplateName() string {
	if m != nil {
		return m.InspectTemplateName
	}
	return ""
}

// Combines all of the information about a DLP job.
type DlpJob struct {
	// The server-assigned name.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// The type of job.
	Type DlpJobType `protobuf:"varint,2,opt,name=type,enum=google.privacy.dlp.v2beta2.DlpJobType" json:"type,omitempty"`
	// State of a job.
	State DlpJob_JobState `protobuf:"varint,3,opt,name=state,enum=google.privacy.dlp.v2beta2.DlpJob_JobState" json:"state,omitempty"`
	// Types that are valid to be assigned to Details:
	//	*DlpJob_RiskDetails
	//	*DlpJob_InspectDetails
	Details isDlpJob_Details `protobuf_oneof:"details"`
	// Time when the job was created.
	CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
	// Time when the job started.
	StartTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
	// Time when the job finished.
	EndTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=end_time,json=endTime" json:"end_time,omitempty"`
	// A stream of errors encountered running the job.
	ErrorResults []*google_rpc.Status `protobuf:"bytes,9,rep,name=error_results,json=errorResults" json:"error_results,omitempty"`
}

func (m *DlpJob) Reset()                    { *m = DlpJob{} }
func (m *DlpJob) String() string            { return proto.CompactTextString(m) }
func (*DlpJob) ProtoMessage()               {}
func (*DlpJob) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} }

type isDlpJob_Details interface {
	isDlpJob_Details()
}

type DlpJob_RiskDetails struct {
	RiskDetails *AnalyzeDataSourceRiskDetails `protobuf:"bytes,4,opt,name=risk_details,json=riskDetails,oneof"`
}
type DlpJob_InspectDetails struct {
	InspectDetails *InspectDataSourceDetails `protobuf:"bytes,5,opt,name=inspect_details,json=inspectDetails,oneof"`
}

func (*DlpJob_RiskDetails) isDlpJob_Details()    {}
func (*DlpJob_InspectDetails) isDlpJob_Details() {}

func (m *DlpJob) GetDetails() isDlpJob_Details {
	if m != nil {
		return m.Details
	}
	return nil
}

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

func (m *DlpJob) GetType() DlpJobType {
	if m != nil {
		return m.Type
	}
	return DlpJobType_DLP_JOB_TYPE_UNSPECIFIED
}

func (m *DlpJob) GetState() DlpJob_JobState {
	if m != nil {
		return m.State
	}
	return DlpJob_JOB_STATE_UNSPECIFIED
}

func (m *DlpJob) GetRiskDetails() *AnalyzeDataSourceRiskDetails {
	if x, ok := m.GetDetails().(*DlpJob_RiskDetails); ok {
		return x.RiskDetails
	}
	return nil
}

func (m *DlpJob) GetInspectDetails() *InspectDataSourceDetails {
	if x, ok := m.GetDetails().(*DlpJob_InspectDetails); ok {
		return x.InspectDetails
	}
	return nil
}

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

func (m *DlpJob) GetStartTime() *google_protobuf1.Timestamp {
	if m != nil {
		return m.StartTime
	}
	return nil
}

func (m *DlpJob) GetEndTime() *google_protobuf1.Timestamp {
	if m != nil {
		return m.EndTime
	}
	return nil
}

func (m *DlpJob) GetErrorResults() []*google_rpc.Status {
	if m != nil {
		return m.ErrorResults
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*DlpJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _DlpJob_OneofMarshaler, _DlpJob_OneofUnmarshaler, _DlpJob_OneofSizer, []interface{}{
		(*DlpJob_RiskDetails)(nil),
		(*DlpJob_InspectDetails)(nil),
	}
}

func _DlpJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*DlpJob)
	// details
	switch x := m.Details.(type) {
	case *DlpJob_RiskDetails:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.RiskDetails); err != nil {
			return err
		}
	case *DlpJob_InspectDetails:
		b.EncodeVarint(5<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.InspectDetails); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("DlpJob.Details has unexpected type %T", x)
	}
	return nil
}

func _DlpJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*DlpJob)
	switch tag {
	case 4: // details.risk_details
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(AnalyzeDataSourceRiskDetails)
		err := b.DecodeMessage(msg)
		m.Details = &DlpJob_RiskDetails{msg}
		return true, err
	case 5: // details.inspect_details
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(InspectDataSourceDetails)
		err := b.DecodeMessage(msg)
		m.Details = &DlpJob_InspectDetails{msg}
		return true, err
	default:
		return false, nil
	}
}

func _DlpJob_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*DlpJob)
	// details
	switch x := m.Details.(type) {
	case *DlpJob_RiskDetails:
		s := proto.Size(x.RiskDetails)
		n += proto.SizeVarint(4<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *DlpJob_InspectDetails:
		s := proto.Size(x.InspectDetails)
		n += proto.SizeVarint(5<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// The request message for [DlpJobs.GetDlpJob][].
type GetDlpJobRequest struct {
	// The name of the DlpJob resource.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *GetDlpJobRequest) Reset()                    { *m = GetDlpJobRequest{} }
func (m *GetDlpJobRequest) String() string            { return proto.CompactTextString(m) }
func (*GetDlpJobRequest) ProtoMessage()               {}
func (*GetDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} }

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

// The request message for listing DLP jobs.
type ListDlpJobsRequest struct {
	// The parent resource name, for example projects/my-project-id.
	Parent string `protobuf:"bytes,4,opt,name=parent" json:"parent,omitempty"`
	// Optional. Allows filtering.
	//
	// Supported syntax:
	//
	// * Filter expressions are made up of one or more restrictions.
	// * Restrictions can be combined by `AND` or `OR` logical operators. A
	// sequence of restrictions implicitly uses `AND`.
	// * A restriction has the form of `<field> <operator> <value>`.
	// * Supported fields/values for inspect jobs:
	//     - `state` - PENDING|RUNNING|CANCELED|FINISHED|FAILED
	//     - `inspected_storage` - DATASTORE|CLOUD_STORAGE|BIGQUERY
	// * Supported fields for risk analysis jobs:
	//     - `state` - RUNNING|CANCELED|FINISHED|FAILED
	// * The operator must be `=` or `!=`.
	//
	// Examples:
	//
	// * inspected_storage = cloud_storage AND state = done
	// * inspected_storage = cloud_storage OR inspected_storage = bigquery
	// * inspected_storage = cloud_storage AND (state = done OR state = canceled)
	//
	// The length of this field should be no more than 500 characters.
	Filter string `protobuf:"bytes,1,opt,name=filter" json:"filter,omitempty"`
	// The standard list page size.
	PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"`
	// The standard list page token.
	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"`
	// The type of job. Defaults to `DlpJobType.INSPECT`
	Type DlpJobType `protobuf:"varint,5,opt,name=type,enum=google.privacy.dlp.v2beta2.DlpJobType" json:"type,omitempty"`
}

func (m *ListDlpJobsRequest) Reset()                    { *m = ListDlpJobsRequest{} }
func (m *ListDlpJobsRequest) String() string            { return proto.CompactTextString(m) }
func (*ListDlpJobsRequest) ProtoMessage()               {}
func (*ListDlpJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} }

func (m *ListDlpJobsRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *ListDlpJobsRequest) GetFilter() string {
	if m != nil {
		return m.Filter
	}
	return ""
}

func (m *ListDlpJobsRequest) GetPageSize() int32 {
	if m != nil {
		return m.PageSize
	}
	return 0
}

func (m *ListDlpJobsRequest) GetPageToken() string {
	if m != nil {
		return m.PageToken
	}
	return ""
}

func (m *ListDlpJobsRequest) GetType() DlpJobType {
	if m != nil {
		return m.Type
	}
	return DlpJobType_DLP_JOB_TYPE_UNSPECIFIED
}

// The response message for listing DLP jobs.
type ListDlpJobsResponse struct {
	// A list of DlpJobs that matches the specified filter in the request.
	Jobs []*DlpJob `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"`
	// The standard List next-page token.
	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"`
}

func (m *ListDlpJobsResponse) Reset()                    { *m = ListDlpJobsResponse{} }
func (m *ListDlpJobsResponse) String() string            { return proto.CompactTextString(m) }
func (*ListDlpJobsResponse) ProtoMessage()               {}
func (*ListDlpJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} }

func (m *ListDlpJobsResponse) GetJobs() []*DlpJob {
	if m != nil {
		return m.Jobs
	}
	return nil
}

func (m *ListDlpJobsResponse) GetNextPageToken() string {
	if m != nil {
		return m.NextPageToken
	}
	return ""
}

// The request message for canceling a DLP job.
type CancelDlpJobRequest struct {
	// The name of the DlpJob resource to be cancelled.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *CancelDlpJobRequest) Reset()                    { *m = CancelDlpJobRequest{} }
func (m *CancelDlpJobRequest) String() string            { return proto.CompactTextString(m) }
func (*CancelDlpJobRequest) ProtoMessage()               {}
func (*CancelDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} }

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

// The request message for deleting a DLP job.
type DeleteDlpJobRequest struct {
	// The name of the DlpJob resource to be deleted.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *DeleteDlpJobRequest) Reset()                    { *m = DeleteDlpJobRequest{} }
func (m *DeleteDlpJobRequest) String() string            { return proto.CompactTextString(m) }
func (*DeleteDlpJobRequest) ProtoMessage()               {}
func (*DeleteDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} }

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

// Request message for CreateDeidentifyTemplate.
type CreateDeidentifyTemplateRequest struct {
	// The parent resource name, for example projects/my-project-id or
	// organizations/my-org-id.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// The DeidentifyTemplate to create.
	DeidentifyTemplate *DeidentifyTemplate `protobuf:"bytes,2,opt,name=deidentify_template,json=deidentifyTemplate" json:"deidentify_template,omitempty"`
	// The template id can contain uppercase and lowercase letters,
	// numbers, and hyphens; that is, it must match the regular
	// expression: `[a-zA-Z\\d-]+`. The maximum length is 100
	// characters. Can be empty to allow the system to generate one.
	TemplateId string `protobuf:"bytes,3,opt,name=template_id,json=templateId" json:"template_id,omitempty"`
}

func (m *CreateDeidentifyTemplateRequest) Reset()         { *m = CreateDeidentifyTemplateRequest{} }
func (m *CreateDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) }
func (*CreateDeidentifyTemplateRequest) ProtoMessage()    {}
func (*CreateDeidentifyTemplateRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{69}
}

func (m *CreateDeidentifyTemplateRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *CreateDeidentifyTemplateRequest) GetDeidentifyTemplate() *DeidentifyTemplate {
	if m != nil {
		return m.DeidentifyTemplate
	}
	return nil
}

func (m *CreateDeidentifyTemplateRequest) GetTemplateId() string {
	if m != nil {
		return m.TemplateId
	}
	return ""
}

// Request message for UpdateDeidentifyTemplate.
type UpdateDeidentifyTemplateRequest struct {
	// Resource name of organization and deidentify template to be updated, for
	// example `organizations/433245324/deidentifyTemplates/432452342`.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// New DeidentifyTemplate value.
	DeidentifyTemplate *DeidentifyTemplate `protobuf:"bytes,2,opt,name=deidentify_template,json=deidentifyTemplate" json:"deidentify_template,omitempty"`
	// Mask to control which fields get updated.
	UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"`
}

func (m *UpdateDeidentifyTemplateRequest) Reset()         { *m = UpdateDeidentifyTemplateRequest{} }
func (m *UpdateDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) }
func (*UpdateDeidentifyTemplateRequest) ProtoMessage()    {}
func (*UpdateDeidentifyTemplateRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{70}
}

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

func (m *UpdateDeidentifyTemplateRequest) GetDeidentifyTemplate() *DeidentifyTemplate {
	if m != nil {
		return m.DeidentifyTemplate
	}
	return nil
}

func (m *UpdateDeidentifyTemplateRequest) GetUpdateMask() *google_protobuf4.FieldMask {
	if m != nil {
		return m.UpdateMask
	}
	return nil
}

// Request message for GetDeidentifyTemplate.
type GetDeidentifyTemplateRequest struct {
	// Resource name of the organization and deidentify template to be read, for
	// example `organizations/433245324/deidentifyTemplates/432452342`.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *GetDeidentifyTemplateRequest) Reset()                    { *m = GetDeidentifyTemplateRequest{} }
func (m *GetDeidentifyTemplateRequest) String() string            { return proto.CompactTextString(m) }
func (*GetDeidentifyTemplateRequest) ProtoMessage()               {}
func (*GetDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} }

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

// Request message for ListDeidentifyTemplates.
type ListDeidentifyTemplatesRequest struct {
	// The parent resource name, for example projects/my-project-id or
	// organizations/my-org-id.
	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
	// Optional page token to continue retrieval. Comes from previous call
	// to `ListDeidentifyTemplates`.
	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"`
	// Optional size of the page, can be limited by server. If zero server returns
	// a page of max size 100.
	PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"`
}

func (m *ListDeidentifyTemplatesRequest) Reset()                    { *m = ListDeidentifyTemplatesRequest{} }
func (m *ListDeidentifyTemplatesRequest) String() string            { return proto.CompactTextString(m) }
func (*ListDeidentifyTemplatesRequest) ProtoMessage()               {}
func (*ListDeidentifyTemplatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} }

func (m *ListDeidentifyTemplatesRequest) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *ListDeidentifyTemplatesRequest) GetPageToken() string {
	if m != nil {
		return m.PageToken
	}
	return ""
}

func (m *ListDeidentifyTemplatesRequest) GetPageSize() int32 {
	if m != nil {
		return m.PageSize
	}
	return 0
}

// Response message for ListDeidentifyTemplates.
type ListDeidentifyTemplatesResponse struct {
	// List of deidentify templates, up to page_size in
	// ListDeidentifyTemplatesRequest.
	DeidentifyTemplates []*DeidentifyTemplate `protobuf:"bytes,1,rep,name=deidentify_templates,json=deidentifyTemplates" json:"deidentify_templates,omitempty"`
	// If the next page is available then the next page token to be used
	// in following ListDeidentifyTemplates request.
	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"`
}

func (m *ListDeidentifyTemplatesResponse) Reset()         { *m = ListDeidentifyTemplatesResponse{} }
func (m *ListDeidentifyTemplatesResponse) String() string { return proto.CompactTextString(m) }
func (*ListDeidentifyTemplatesResponse) ProtoMessage()    {}
func (*ListDeidentifyTemplatesResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{73}
}

func (m *ListDeidentifyTemplatesResponse) GetDeidentifyTemplates() []*DeidentifyTemplate {
	if m != nil {
		return m.DeidentifyTemplates
	}
	return nil
}

func (m *ListDeidentifyTemplatesResponse) GetNextPageToken() string {
	if m != nil {
		return m.NextPageToken
	}
	return ""
}

// Request message for DeleteDeidentifyTemplate.
type DeleteDeidentifyTemplateRequest struct {
	// Resource name of the organization and deidentify template to be deleted,
	// for example `organizations/433245324/deidentifyTemplates/432452342`.
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *DeleteDeidentifyTemplateRequest) Reset()         { *m = DeleteDeidentifyTemplateRequest{} }
func (m *DeleteDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteDeidentifyTemplateRequest) ProtoMessage()    {}
func (*DeleteDeidentifyTemplateRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor0, []int{74}
}

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

func init() {
	proto.RegisterType((*InspectConfig)(nil), "google.privacy.dlp.v2beta2.InspectConfig")
	proto.RegisterType((*InspectConfig_FindingLimits)(nil), "google.privacy.dlp.v2beta2.InspectConfig.FindingLimits")
	proto.RegisterType((*InspectConfig_FindingLimits_InfoTypeLimit)(nil), "google.privacy.dlp.v2beta2.InspectConfig.FindingLimits.InfoTypeLimit")
	proto.RegisterType((*ContentItem)(nil), "google.privacy.dlp.v2beta2.ContentItem")
	proto.RegisterType((*Table)(nil), "google.privacy.dlp.v2beta2.Table")
	proto.RegisterType((*Table_Row)(nil), "google.privacy.dlp.v2beta2.Table.Row")
	proto.RegisterType((*InspectResult)(nil), "google.privacy.dlp.v2beta2.InspectResult")
	proto.RegisterType((*Finding)(nil), "google.privacy.dlp.v2beta2.Finding")
	proto.RegisterType((*Location)(nil), "google.privacy.dlp.v2beta2.Location")
	proto.RegisterType((*TableLocation)(nil), "google.privacy.dlp.v2beta2.TableLocation")
	proto.RegisterType((*Range)(nil), "google.privacy.dlp.v2beta2.Range")
	proto.RegisterType((*ImageLocation)(nil), "google.privacy.dlp.v2beta2.ImageLocation")
	proto.RegisterType((*RedactImageRequest)(nil), "google.privacy.dlp.v2beta2.RedactImageRequest")
	proto.RegisterType((*RedactImageRequest_ImageRedactionConfig)(nil), "google.privacy.dlp.v2beta2.RedactImageRequest.ImageRedactionConfig")
	proto.RegisterType((*Color)(nil), "google.privacy.dlp.v2beta2.Color")
	proto.RegisterType((*RedactImageResponse)(nil), "google.privacy.dlp.v2beta2.RedactImageResponse")
	proto.RegisterType((*DeidentifyContentRequest)(nil), "google.privacy.dlp.v2beta2.DeidentifyContentRequest")
	proto.RegisterType((*DeidentifyContentResponse)(nil), "google.privacy.dlp.v2beta2.DeidentifyContentResponse")
	proto.RegisterType((*ReidentifyContentRequest)(nil), "google.privacy.dlp.v2beta2.ReidentifyContentRequest")
	proto.RegisterType((*ReidentifyContentResponse)(nil), "google.privacy.dlp.v2beta2.ReidentifyContentResponse")
	proto.RegisterType((*InspectContentRequest)(nil), "google.privacy.dlp.v2beta2.InspectContentRequest")
	proto.RegisterType((*InspectContentResponse)(nil), "google.privacy.dlp.v2beta2.InspectContentResponse")
	proto.RegisterType((*InspectDataSourceRequest)(nil), "google.privacy.dlp.v2beta2.InspectDataSourceRequest")
	proto.RegisterType((*OutputStorageConfig)(nil), "google.privacy.dlp.v2beta2.OutputStorageConfig")
	proto.RegisterType((*InfoTypeStatistics)(nil), "google.privacy.dlp.v2beta2.InfoTypeStatistics")
	proto.RegisterType((*InspectDataSourceDetails)(nil), "google.privacy.dlp.v2beta2.InspectDataSourceDetails")
	proto.RegisterType((*InspectDataSourceDetails_RequestedOptions)(nil), "google.privacy.dlp.v2beta2.InspectDataSourceDetails.RequestedOptions")
	proto.RegisterType((*InspectDataSourceDetails_Result)(nil), "google.privacy.dlp.v2beta2.InspectDataSourceDetails.Result")
	proto.RegisterType((*InfoTypeDescription)(nil), "google.privacy.dlp.v2beta2.InfoTypeDescription")
	proto.RegisterType((*ListInfoTypesRequest)(nil), "google.privacy.dlp.v2beta2.ListInfoTypesRequest")
	proto.RegisterType((*ListInfoTypesResponse)(nil), "google.privacy.dlp.v2beta2.ListInfoTypesResponse")
	proto.RegisterType((*AnalyzeDataSourceRiskRequest)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskRequest")
	proto.RegisterType((*RiskAnalysisJobConfig)(nil), "google.privacy.dlp.v2beta2.RiskAnalysisJobConfig")
	proto.RegisterType((*PrivacyMetric)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric")
	proto.RegisterType((*PrivacyMetric_NumericalStatsConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.NumericalStatsConfig")
	proto.RegisterType((*PrivacyMetric_CategoricalStatsConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.CategoricalStatsConfig")
	proto.RegisterType((*PrivacyMetric_KAnonymityConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KAnonymityConfig")
	proto.RegisterType((*PrivacyMetric_LDiversityConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.LDiversityConfig")
	proto.RegisterType((*PrivacyMetric_KMapEstimationConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KMapEstimationConfig")
	proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_TaggedField)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KMapEstimationConfig.TaggedField")
	proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KMapEstimationConfig.AuxiliaryTable")
	proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KMapEstimationConfig.AuxiliaryTable.QuasiIdField")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_NumericalStatsResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.NumericalStatsResult")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_CategoricalStatsResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult.CategoricalStatsHistogramBucket")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KAnonymityResult")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityEquivalenceClass")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityHistogramBucket")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.LDiversityResult")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityEquivalenceClass")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityHistogramBucket")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KMapEstimationResult")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationQuasiIdValues")
	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationHistogramBucket")
	proto.RegisterType((*ValueFrequency)(nil), "google.privacy.dlp.v2beta2.ValueFrequency")
	proto.RegisterType((*Value)(nil), "google.privacy.dlp.v2beta2.Value")
	proto.RegisterType((*DeidentifyConfig)(nil), "google.privacy.dlp.v2beta2.DeidentifyConfig")
	proto.RegisterType((*PrimitiveTransformation)(nil), "google.privacy.dlp.v2beta2.PrimitiveTransformation")
	proto.RegisterType((*TimePartConfig)(nil), "google.privacy.dlp.v2beta2.TimePartConfig")
	proto.RegisterType((*CryptoHashConfig)(nil), "google.privacy.dlp.v2beta2.CryptoHashConfig")
	proto.RegisterType((*ReplaceValueConfig)(nil), "google.privacy.dlp.v2beta2.ReplaceValueConfig")
	proto.RegisterType((*ReplaceWithInfoTypeConfig)(nil), "google.privacy.dlp.v2beta2.ReplaceWithInfoTypeConfig")
	proto.RegisterType((*RedactConfig)(nil), "google.privacy.dlp.v2beta2.RedactConfig")
	proto.RegisterType((*CharsToIgnore)(nil), "google.privacy.dlp.v2beta2.CharsToIgnore")
	proto.RegisterType((*CharacterMaskConfig)(nil), "google.privacy.dlp.v2beta2.CharacterMaskConfig")
	proto.RegisterType((*FixedSizeBucketingConfig)(nil), "google.privacy.dlp.v2beta2.FixedSizeBucketingConfig")
	proto.RegisterType((*BucketingConfig)(nil), "google.privacy.dlp.v2beta2.BucketingConfig")
	proto.RegisterType((*BucketingConfig_Bucket)(nil), "google.privacy.dlp.v2beta2.BucketingConfig.Bucket")
	proto.RegisterType((*CryptoReplaceFfxFpeConfig)(nil), "google.privacy.dlp.v2beta2.CryptoReplaceFfxFpeConfig")
	proto.RegisterType((*CryptoKey)(nil), "google.privacy.dlp.v2beta2.CryptoKey")
	proto.RegisterType((*TransientCryptoKey)(nil), "google.privacy.dlp.v2beta2.TransientCryptoKey")
	proto.RegisterType((*UnwrappedCryptoKey)(nil), "google.privacy.dlp.v2beta2.UnwrappedCryptoKey")
	proto.RegisterType((*KmsWrappedCryptoKey)(nil), "google.privacy.dlp.v2beta2.KmsWrappedCryptoKey")
	proto.RegisterType((*InfoTypeTransformations)(nil), "google.privacy.dlp.v2beta2.InfoTypeTransformations")
	proto.RegisterType((*InfoTypeTransformations_InfoTypeTransformation)(nil), "google.privacy.dlp.v2beta2.InfoTypeTransformations.InfoTypeTransformation")
	proto.RegisterType((*FieldTransformation)(nil), "google.privacy.dlp.v2beta2.FieldTransformation")
	proto.RegisterType((*RecordTransformations)(nil), "google.privacy.dlp.v2beta2.RecordTransformations")
	proto.RegisterType((*RecordSuppression)(nil), "google.privacy.dlp.v2beta2.RecordSuppression")
	proto.RegisterType((*RecordCondition)(nil), "google.privacy.dlp.v2beta2.RecordCondition")
	proto.RegisterType((*RecordCondition_Condition)(nil), "google.privacy.dlp.v2beta2.RecordCondition.Condition")
	proto.RegisterType((*RecordCondition_Conditions)(nil), "google.privacy.dlp.v2beta2.RecordCondition.Conditions")
	proto.RegisterType((*RecordCondition_Expressions)(nil), "google.privacy.dlp.v2beta2.RecordCondition.Expressions")
	proto.RegisterType((*TransformationOverview)(nil), "google.privacy.dlp.v2beta2.TransformationOverview")
	proto.RegisterType((*TransformationSummary)(nil), "google.privacy.dlp.v2beta2.TransformationSummary")
	proto.RegisterType((*TransformationSummary_SummaryResult)(nil), "google.privacy.dlp.v2beta2.TransformationSummary.SummaryResult")
	proto.RegisterType((*InspectTemplate)(nil), "google.privacy.dlp.v2beta2.InspectTemplate")
	proto.RegisterType((*DeidentifyTemplate)(nil), "google.privacy.dlp.v2beta2.DeidentifyTemplate")
	proto.RegisterType((*CreateInspectTemplateRequest)(nil), "google.privacy.dlp.v2beta2.CreateInspectTemplateRequest")
	proto.RegisterType((*UpdateInspectTemplateRequest)(nil), "google.privacy.dlp.v2beta2.UpdateInspectTemplateRequest")
	proto.RegisterType((*GetInspectTemplateRequest)(nil), "google.privacy.dlp.v2beta2.GetInspectTemplateRequest")
	proto.RegisterType((*ListInspectTemplatesRequest)(nil), "google.privacy.dlp.v2beta2.ListInspectTemplatesRequest")
	proto.RegisterType((*ListInspectTemplatesResponse)(nil), "google.privacy.dlp.v2beta2.ListInspectTemplatesResponse")
	proto.RegisterType((*DeleteInspectTemplateRequest)(nil), "google.privacy.dlp.v2beta2.DeleteInspectTemplateRequest")
	proto.RegisterType((*InspectJobConfig)(nil), "google.privacy.dlp.v2beta2.InspectJobConfig")
	proto.RegisterType((*DlpJob)(nil), "google.privacy.dlp.v2beta2.DlpJob")
	proto.RegisterType((*GetDlpJobRequest)(nil), "google.privacy.dlp.v2beta2.GetDlpJobRequest")
	proto.RegisterType((*ListDlpJobsRequest)(nil), "google.privacy.dlp.v2beta2.ListDlpJobsRequest")
	proto.RegisterType((*ListDlpJobsResponse)(nil), "google.privacy.dlp.v2beta2.ListDlpJobsResponse")
	proto.RegisterType((*CancelDlpJobRequest)(nil), "google.privacy.dlp.v2beta2.CancelDlpJobRequest")
	proto.RegisterType((*DeleteDlpJobRequest)(nil), "google.privacy.dlp.v2beta2.DeleteDlpJobRequest")
	proto.RegisterType((*CreateDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2beta2.CreateDeidentifyTemplateRequest")
	proto.RegisterType((*UpdateDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2beta2.UpdateDeidentifyTemplateRequest")
	proto.RegisterType((*GetDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2beta2.GetDeidentifyTemplateRequest")
	proto.RegisterType((*ListDeidentifyTemplatesRequest)(nil), "google.privacy.dlp.v2beta2.ListDeidentifyTemplatesRequest")
	proto.RegisterType((*ListDeidentifyTemplatesResponse)(nil), "google.privacy.dlp.v2beta2.ListDeidentifyTemplatesResponse")
	proto.RegisterType((*DeleteDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2beta2.DeleteDeidentifyTemplateRequest")
	proto.RegisterEnum("google.privacy.dlp.v2beta2.InfoTypeSupportedBy", InfoTypeSupportedBy_name, InfoTypeSupportedBy_value)
	proto.RegisterEnum("google.privacy.dlp.v2beta2.RelationalOperator", RelationalOperator_name, RelationalOperator_value)
	proto.RegisterEnum("google.privacy.dlp.v2beta2.DlpJobType", DlpJobType_name, DlpJobType_value)
	proto.RegisterEnum("google.privacy.dlp.v2beta2.TimePartConfig_TimePart", TimePartConfig_TimePart_name, TimePartConfig_TimePart_value)
	proto.RegisterEnum("google.privacy.dlp.v2beta2.CharsToIgnore_CommonCharsToIgnore", CharsToIgnore_CommonCharsToIgnore_name, CharsToIgnore_CommonCharsToIgnore_value)
	proto.RegisterEnum("google.privacy.dlp.v2beta2.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet", CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value)
	proto.RegisterEnum("google.privacy.dlp.v2beta2.RecordCondition_Expressions_LogicalOperator", RecordCondition_Expressions_LogicalOperator_name, RecordCondition_Expressions_LogicalOperator_value)
	proto.RegisterEnum("google.privacy.dlp.v2beta2.TransformationSummary_TransformationResultCode", TransformationSummary_TransformationResultCode_name, TransformationSummary_TransformationResultCode_value)
	proto.RegisterEnum("google.privacy.dlp.v2beta2.DlpJob_JobState", DlpJob_JobState_name, DlpJob_JobState_value)
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// Client API for DlpService service

type DlpServiceClient interface {
	// Finds potentially sensitive info in content.
	// This method has limits on input size, processing time, and output size.
	// [How-to guide for text](/dlp/docs/inspecting-text), [How-to guide for
	// images](/dlp/docs/inspecting-images)
	InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error)
	// Redacts potentially sensitive info from an image.
	// This method has limits on input size, processing time, and output size.
	// [How-to guide](/dlp/docs/redacting-sensitive-data-images)
	RedactImage(ctx context.Context, in *RedactImageRequest, opts ...grpc.CallOption) (*RedactImageResponse, error)
	// De-identifies potentially sensitive info from a ContentItem.
	// This method has limits on input size and output size.
	// [How-to guide](/dlp/docs/deidentify-sensitive-data)
	DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error)
	// Re-identify content that has been de-identified.
	ReidentifyContent(ctx context.Context, in *ReidentifyContentRequest, opts ...grpc.CallOption) (*ReidentifyContentResponse, error)
	// Schedules a job scanning content in a Google Cloud Platform data
	// repository. [How-to guide](/dlp/docs/inspecting-storage)
	InspectDataSource(ctx context.Context, in *InspectDataSourceRequest, opts ...grpc.CallOption) (*DlpJob, error)
	// Schedules a job to compute risk analysis metrics over content in a Google
	// Cloud Platform repository. [How-to guide}(/dlp/docs/compute-risk-analysis)
	AnalyzeDataSourceRisk(ctx context.Context, in *AnalyzeDataSourceRiskRequest, opts ...grpc.CallOption) (*DlpJob, error)
	// Returns sensitive information types DLP supports.
	ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error)
	// Creates an inspect template for re-using frequently used configuration
	// for inspecting content, images, and storage.
	CreateInspectTemplate(ctx context.Context, in *CreateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error)
	// Updates the inspect template.
	UpdateInspectTemplate(ctx context.Context, in *UpdateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error)
	// Gets an inspect template.
	GetInspectTemplate(ctx context.Context, in *GetInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error)
	// Lists inspect templates.
	ListInspectTemplates(ctx context.Context, in *ListInspectTemplatesRequest, opts ...grpc.CallOption) (*ListInspectTemplatesResponse, error)
	// Deletes inspect templates.
	DeleteInspectTemplate(ctx context.Context, in *DeleteInspectTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error)
	// Creates an Deidentify template for re-using frequently used configuration
	// for Deidentifying content, images, and storage.
	CreateDeidentifyTemplate(ctx context.Context, in *CreateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error)
	// Updates the inspect template.
	UpdateDeidentifyTemplate(ctx context.Context, in *UpdateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error)
	// Gets an inspect template.
	GetDeidentifyTemplate(ctx context.Context, in *GetDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error)
	// Lists inspect templates.
	ListDeidentifyTemplates(ctx context.Context, in *ListDeidentifyTemplatesRequest, opts ...grpc.CallOption) (*ListDeidentifyTemplatesResponse, error)
	// Deletes inspect templates.
	DeleteDeidentifyTemplate(ctx context.Context, in *DeleteDeidentifyTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error)
	// Lists DlpJobs that match the specified filter in the request.
	ListDlpJobs(ctx context.Context, in *ListDlpJobsRequest, opts ...grpc.CallOption) (*ListDlpJobsResponse, error)
	// Gets the latest state of a long-running DlpJob.
	GetDlpJob(ctx context.Context, in *GetDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error)
	// Deletes a long-running DlpJob. This method indicates that the client is
	// no longer interested in the DlpJob result. The job will be cancelled if
	// possible.
	DeleteDlpJob(ctx context.Context, in *DeleteDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error)
	// Starts asynchronous cancellation on a long-running DlpJob.  The server
	// makes a best effort to cancel the DlpJob, but success is not
	// guaranteed.
	CancelDlpJob(ctx context.Context, in *CancelDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error)
}

type dlpServiceClient struct {
	cc *grpc.ClientConn
}

func NewDlpServiceClient(cc *grpc.ClientConn) DlpServiceClient {
	return &dlpServiceClient{cc}
}

func (c *dlpServiceClient) InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) {
	out := new(InspectContentResponse)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/InspectContent", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) RedactImage(ctx context.Context, in *RedactImageRequest, opts ...grpc.CallOption) (*RedactImageResponse, error) {
	out := new(RedactImageResponse)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/RedactImage", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error) {
	out := new(DeidentifyContentResponse)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/DeidentifyContent", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) ReidentifyContent(ctx context.Context, in *ReidentifyContentRequest, opts ...grpc.CallOption) (*ReidentifyContentResponse, error) {
	out := new(ReidentifyContentResponse)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ReidentifyContent", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) InspectDataSource(ctx context.Context, in *InspectDataSourceRequest, opts ...grpc.CallOption) (*DlpJob, error) {
	out := new(DlpJob)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/InspectDataSource", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) AnalyzeDataSourceRisk(ctx context.Context, in *AnalyzeDataSourceRiskRequest, opts ...grpc.CallOption) (*DlpJob, error) {
	out := new(DlpJob)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/AnalyzeDataSourceRisk", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) {
	out := new(ListInfoTypesResponse)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ListInfoTypes", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) CreateInspectTemplate(ctx context.Context, in *CreateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) {
	out := new(InspectTemplate)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/CreateInspectTemplate", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) UpdateInspectTemplate(ctx context.Context, in *UpdateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) {
	out := new(InspectTemplate)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/UpdateInspectTemplate", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) GetInspectTemplate(ctx context.Context, in *GetInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) {
	out := new(InspectTemplate)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/GetInspectTemplate", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) ListInspectTemplates(ctx context.Context, in *ListInspectTemplatesRequest, opts ...grpc.CallOption) (*ListInspectTemplatesResponse, error) {
	out := new(ListInspectTemplatesResponse)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ListInspectTemplates", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) DeleteInspectTemplate(ctx context.Context, in *DeleteInspectTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) {
	out := new(google_protobuf3.Empty)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/DeleteInspectTemplate", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) CreateDeidentifyTemplate(ctx context.Context, in *CreateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) {
	out := new(DeidentifyTemplate)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/CreateDeidentifyTemplate", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) UpdateDeidentifyTemplate(ctx context.Context, in *UpdateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) {
	out := new(DeidentifyTemplate)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/UpdateDeidentifyTemplate", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) GetDeidentifyTemplate(ctx context.Context, in *GetDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) {
	out := new(DeidentifyTemplate)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/GetDeidentifyTemplate", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) ListDeidentifyTemplates(ctx context.Context, in *ListDeidentifyTemplatesRequest, opts ...grpc.CallOption) (*ListDeidentifyTemplatesResponse, error) {
	out := new(ListDeidentifyTemplatesResponse)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ListDeidentifyTemplates", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) DeleteDeidentifyTemplate(ctx context.Context, in *DeleteDeidentifyTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) {
	out := new(google_protobuf3.Empty)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/DeleteDeidentifyTemplate", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) ListDlpJobs(ctx context.Context, in *ListDlpJobsRequest, opts ...grpc.CallOption) (*ListDlpJobsResponse, error) {
	out := new(ListDlpJobsResponse)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ListDlpJobs", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) GetDlpJob(ctx context.Context, in *GetDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error) {
	out := new(DlpJob)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/GetDlpJob", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) DeleteDlpJob(ctx context.Context, in *DeleteDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) {
	out := new(google_protobuf3.Empty)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/DeleteDlpJob", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *dlpServiceClient) CancelDlpJob(ctx context.Context, in *CancelDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) {
	out := new(google_protobuf3.Empty)
	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/CancelDlpJob", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// Server API for DlpService service

type DlpServiceServer interface {
	// Finds potentially sensitive info in content.
	// This method has limits on input size, processing time, and output size.
	// [How-to guide for text](/dlp/docs/inspecting-text), [How-to guide for
	// images](/dlp/docs/inspecting-images)
	InspectContent(context.Context, *InspectContentRequest) (*InspectContentResponse, error)
	// Redacts potentially sensitive info from an image.
	// This method has limits on input size, processing time, and output size.
	// [How-to guide](/dlp/docs/redacting-sensitive-data-images)
	RedactImage(context.Context, *RedactImageRequest) (*RedactImageResponse, error)
	// De-identifies potentially sensitive info from a ContentItem.
	// This method has limits on input size and output size.
	// [How-to guide](/dlp/docs/deidentify-sensitive-data)
	DeidentifyContent(context.Context, *DeidentifyContentRequest) (*DeidentifyContentResponse, error)
	// Re-identify content that has been de-identified.
	ReidentifyContent(context.Context, *ReidentifyContentRequest) (*ReidentifyContentResponse, error)
	// Schedules a job scanning content in a Google Cloud Platform data
	// repository. [How-to guide](/dlp/docs/inspecting-storage)
	InspectDataSource(context.Context, *InspectDataSourceRequest) (*DlpJob, error)
	// Schedules a job to compute risk analysis metrics over content in a Google
	// Cloud Platform repository. [How-to guide}(/dlp/docs/compute-risk-analysis)
	AnalyzeDataSourceRisk(context.Context, *AnalyzeDataSourceRiskRequest) (*DlpJob, error)
	// Returns sensitive information types DLP supports.
	ListInfoTypes(context.Context, *ListInfoTypesRequest) (*ListInfoTypesResponse, error)
	// Creates an inspect template for re-using frequently used configuration
	// for inspecting content, images, and storage.
	CreateInspectTemplate(context.Context, *CreateInspectTemplateRequest) (*InspectTemplate, error)
	// Updates the inspect template.
	UpdateInspectTemplate(context.Context, *UpdateInspectTemplateRequest) (*InspectTemplate, error)
	// Gets an inspect template.
	GetInspectTemplate(context.Context, *GetInspectTemplateRequest) (*InspectTemplate, error)
	// Lists inspect templates.
	ListInspectTemplates(context.Context, *ListInspectTemplatesRequest) (*ListInspectTemplatesResponse, error)
	// Deletes inspect templates.
	DeleteInspectTemplate(context.Context, *DeleteInspectTemplateRequest) (*google_protobuf3.Empty, error)
	// Creates an Deidentify template for re-using frequently used configuration
	// for Deidentifying content, images, and storage.
	CreateDeidentifyTemplate(context.Context, *CreateDeidentifyTemplateRequest) (*DeidentifyTemplate, error)
	// Updates the inspect template.
	UpdateDeidentifyTemplate(context.Context, *UpdateDeidentifyTemplateRequest) (*DeidentifyTemplate, error)
	// Gets an inspect template.
	GetDeidentifyTemplate(context.Context, *GetDeidentifyTemplateRequest) (*DeidentifyTemplate, error)
	// Lists inspect templates.
	ListDeidentifyTemplates(context.Context, *ListDeidentifyTemplatesRequest) (*ListDeidentifyTemplatesResponse, error)
	// Deletes inspect templates.
	DeleteDeidentifyTemplate(context.Context, *DeleteDeidentifyTemplateRequest) (*google_protobuf3.Empty, error)
	// Lists DlpJobs that match the specified filter in the request.
	ListDlpJobs(context.Context, *ListDlpJobsRequest) (*ListDlpJobsResponse, error)
	// Gets the latest state of a long-running DlpJob.
	GetDlpJob(context.Context, *GetDlpJobRequest) (*DlpJob, error)
	// Deletes a long-running DlpJob. This method indicates that the client is
	// no longer interested in the DlpJob result. The job will be cancelled if
	// possible.
	DeleteDlpJob(context.Context, *DeleteDlpJobRequest) (*google_protobuf3.Empty, error)
	// Starts asynchronous cancellation on a long-running DlpJob.  The server
	// makes a best effort to cancel the DlpJob, but success is not
	// guaranteed.
	CancelDlpJob(context.Context, *CancelDlpJobRequest) (*google_protobuf3.Empty, error)
}

func RegisterDlpServiceServer(s *grpc.Server, srv DlpServiceServer) {
	s.RegisterService(&_DlpService_serviceDesc, srv)
}

func _DlpService_InspectContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(InspectContentRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).InspectContent(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/InspectContent",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).InspectContent(ctx, req.(*InspectContentRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_RedactImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(RedactImageRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).RedactImage(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/RedactImage",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).RedactImage(ctx, req.(*RedactImageRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_DeidentifyContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeidentifyContentRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).DeidentifyContent(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/DeidentifyContent",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).DeidentifyContent(ctx, req.(*DeidentifyContentRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_ReidentifyContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(ReidentifyContentRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).ReidentifyContent(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ReidentifyContent",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).ReidentifyContent(ctx, req.(*ReidentifyContentRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_InspectDataSource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(InspectDataSourceRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).InspectDataSource(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/InspectDataSource",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).InspectDataSource(ctx, req.(*InspectDataSourceRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_AnalyzeDataSourceRisk_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(AnalyzeDataSourceRiskRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).AnalyzeDataSourceRisk(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/AnalyzeDataSourceRisk",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).AnalyzeDataSourceRisk(ctx, req.(*AnalyzeDataSourceRiskRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_ListInfoTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(ListInfoTypesRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).ListInfoTypes(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ListInfoTypes",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).ListInfoTypes(ctx, req.(*ListInfoTypesRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_CreateInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(CreateInspectTemplateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).CreateInspectTemplate(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/CreateInspectTemplate",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).CreateInspectTemplate(ctx, req.(*CreateInspectTemplateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_UpdateInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(UpdateInspectTemplateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).UpdateInspectTemplate(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/UpdateInspectTemplate",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).UpdateInspectTemplate(ctx, req.(*UpdateInspectTemplateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_GetInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetInspectTemplateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).GetInspectTemplate(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/GetInspectTemplate",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).GetInspectTemplate(ctx, req.(*GetInspectTemplateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_ListInspectTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(ListInspectTemplatesRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).ListInspectTemplates(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ListInspectTemplates",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).ListInspectTemplates(ctx, req.(*ListInspectTemplatesRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_DeleteInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteInspectTemplateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).DeleteInspectTemplate(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/DeleteInspectTemplate",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).DeleteInspectTemplate(ctx, req.(*DeleteInspectTemplateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_CreateDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(CreateDeidentifyTemplateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).CreateDeidentifyTemplate(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/CreateDeidentifyTemplate",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).CreateDeidentifyTemplate(ctx, req.(*CreateDeidentifyTemplateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_UpdateDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(UpdateDeidentifyTemplateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).UpdateDeidentifyTemplate(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/UpdateDeidentifyTemplate",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).UpdateDeidentifyTemplate(ctx, req.(*UpdateDeidentifyTemplateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_GetDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetDeidentifyTemplateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).GetDeidentifyTemplate(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/GetDeidentifyTemplate",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).GetDeidentifyTemplate(ctx, req.(*GetDeidentifyTemplateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_ListDeidentifyTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(ListDeidentifyTemplatesRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).ListDeidentifyTemplates(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ListDeidentifyTemplates",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).ListDeidentifyTemplates(ctx, req.(*ListDeidentifyTemplatesRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_DeleteDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteDeidentifyTemplateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).DeleteDeidentifyTemplate(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/DeleteDeidentifyTemplate",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).DeleteDeidentifyTemplate(ctx, req.(*DeleteDeidentifyTemplateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_ListDlpJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(ListDlpJobsRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).ListDlpJobs(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ListDlpJobs",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).ListDlpJobs(ctx, req.(*ListDlpJobsRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_GetDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetDlpJobRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).GetDlpJob(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/GetDlpJob",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).GetDlpJob(ctx, req.(*GetDlpJobRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_DeleteDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteDlpJobRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).DeleteDlpJob(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/DeleteDlpJob",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).DeleteDlpJob(ctx, req.(*DeleteDlpJobRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DlpService_CancelDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(CancelDlpJobRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DlpServiceServer).CancelDlpJob(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.privacy.dlp.v2beta2.DlpService/CancelDlpJob",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DlpServiceServer).CancelDlpJob(ctx, req.(*CancelDlpJobRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _DlpService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "google.privacy.dlp.v2beta2.DlpService",
	HandlerType: (*DlpServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "InspectContent",
			Handler:    _DlpService_InspectContent_Handler,
		},
		{
			MethodName: "RedactImage",
			Handler:    _DlpService_RedactImage_Handler,
		},
		{
			MethodName: "DeidentifyContent",
			Handler:    _DlpService_DeidentifyContent_Handler,
		},
		{
			MethodName: "ReidentifyContent",
			Handler:    _DlpService_ReidentifyContent_Handler,
		},
		{
			MethodName: "InspectDataSource",
			Handler:    _DlpService_InspectDataSource_Handler,
		},
		{
			MethodName: "AnalyzeDataSourceRisk",
			Handler:    _DlpService_AnalyzeDataSourceRisk_Handler,
		},
		{
			MethodName: "ListInfoTypes",
			Handler:    _DlpService_ListInfoTypes_Handler,
		},
		{
			MethodName: "CreateInspectTemplate",
			Handler:    _DlpService_CreateInspectTemplate_Handler,
		},
		{
			MethodName: "UpdateInspectTemplate",
			Handler:    _DlpService_UpdateInspectTemplate_Handler,
		},
		{
			MethodName: "GetInspectTemplate",
			Handler:    _DlpService_GetInspectTemplate_Handler,
		},
		{
			MethodName: "ListInspectTemplates",
			Handler:    _DlpService_ListInspectTemplates_Handler,
		},
		{
			MethodName: "DeleteInspectTemplate",
			Handler:    _DlpService_DeleteInspectTemplate_Handler,
		},
		{
			MethodName: "CreateDeidentifyTemplate",
			Handler:    _DlpService_CreateDeidentifyTemplate_Handler,
		},
		{
			MethodName: "UpdateDeidentifyTemplate",
			Handler:    _DlpService_UpdateDeidentifyTemplate_Handler,
		},
		{
			MethodName: "GetDeidentifyTemplate",
			Handler:    _DlpService_GetDeidentifyTemplate_Handler,
		},
		{
			MethodName: "ListDeidentifyTemplates",
			Handler:    _DlpService_ListDeidentifyTemplates_Handler,
		},
		{
			MethodName: "DeleteDeidentifyTemplate",
			Handler:    _DlpService_DeleteDeidentifyTemplate_Handler,
		},
		{
			MethodName: "ListDlpJobs",
			Handler:    _DlpService_ListDlpJobs_Handler,
		},
		{
			MethodName: "GetDlpJob",
			Handler:    _DlpService_GetDlpJob_Handler,
		},
		{
			MethodName: "DeleteDlpJob",
			Handler:    _DlpService_DeleteDlpJob_Handler,
		},
		{
			MethodName: "CancelDlpJob",
			Handler:    _DlpService_CancelDlpJob_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "google/privacy/dlp/v2beta2/dlp.proto",
}

func init() { proto.RegisterFile("google/privacy/dlp/v2beta2/dlp.proto", fileDescriptor0) }

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