// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v3/errors/extension_feed_item_error.proto

package errors

import (
	fmt "fmt"
	math "math"

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

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

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

// Enum describing possible extension feed item errors.
type ExtensionFeedItemErrorEnum_ExtensionFeedItemError int32

const (
	// Enum unspecified.
	ExtensionFeedItemErrorEnum_UNSPECIFIED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 0
	// The received error code is not known in this version.
	ExtensionFeedItemErrorEnum_UNKNOWN ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 1
	// Value is not within the accepted range.
	ExtensionFeedItemErrorEnum_VALUE_OUT_OF_RANGE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 2
	// Url list is too long.
	ExtensionFeedItemErrorEnum_URL_LIST_TOO_LONG ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 3
	// Cannot have a geo targeting restriction without having geo targeting.
	ExtensionFeedItemErrorEnum_CANNOT_HAVE_RESTRICTION_ON_EMPTY_GEO_TARGETING ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 4
	// Cannot simultaneously set sitelink field with final urls.
	ExtensionFeedItemErrorEnum_CANNOT_SET_WITH_FINAL_URLS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 5
	// Must set field with final urls.
	ExtensionFeedItemErrorEnum_CANNOT_SET_WITHOUT_FINAL_URLS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 6
	// Phone number for a call extension is invalid.
	ExtensionFeedItemErrorEnum_INVALID_PHONE_NUMBER ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 7
	// Phone number for a call extension is not supported for the given country
	// code.
	ExtensionFeedItemErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 8
	// A carrier specific number in short format is not allowed for call
	// extensions.
	ExtensionFeedItemErrorEnum_CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 9
	// Premium rate numbers are not allowed for call extensions.
	ExtensionFeedItemErrorEnum_PREMIUM_RATE_NUMBER_NOT_ALLOWED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 10
	// Phone number type for a call extension is not allowed.
	// For example, personal number is not allowed for a call extension in
	// most regions.
	ExtensionFeedItemErrorEnum_DISALLOWED_NUMBER_TYPE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 11
	// Phone number for a call extension does not meet domestic format
	// requirements.
	ExtensionFeedItemErrorEnum_INVALID_DOMESTIC_PHONE_NUMBER_FORMAT ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 12
	// Vanity phone numbers (i.e. those including letters) are not allowed for
	// call extensions.
	ExtensionFeedItemErrorEnum_VANITY_PHONE_NUMBER_NOT_ALLOWED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 13
	// Call conversion action provided for a call extension is invalid.
	ExtensionFeedItemErrorEnum_INVALID_CALL_CONVERSION_ACTION ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 14
	// For a call extension, the customer is not whitelisted for call tracking.
	ExtensionFeedItemErrorEnum_CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 15
	// Call tracking is not supported for the given country for a call
	// extension.
	ExtensionFeedItemErrorEnum_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 16
	// Customer hasn't consented for call recording, which is required for
	// creating/updating call feed items. Please see
	// https://support.google.com/google-ads/answer/7412639.
	ExtensionFeedItemErrorEnum_CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 17
	// App id provided for an app extension is invalid.
	ExtensionFeedItemErrorEnum_INVALID_APP_ID ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 18
	// Quotation marks present in the review text for a review extension.
	ExtensionFeedItemErrorEnum_QUOTES_IN_REVIEW_EXTENSION_SNIPPET ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 19
	// Hyphen character present in the review text for a review extension.
	ExtensionFeedItemErrorEnum_HYPHENS_IN_REVIEW_EXTENSION_SNIPPET ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 20
	// A blacklisted review source name or url was provided for a review
	// extension.
	ExtensionFeedItemErrorEnum_REVIEW_EXTENSION_SOURCE_INELIGIBLE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 21
	// Review source name should not be found in the review text.
	ExtensionFeedItemErrorEnum_SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 22
	// Inconsistent currency codes.
	ExtensionFeedItemErrorEnum_INCONSISTENT_CURRENCY_CODES ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 23
	// Price extension cannot have duplicated headers.
	ExtensionFeedItemErrorEnum_PRICE_EXTENSION_HAS_DUPLICATED_HEADERS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 24
	// Price item cannot have duplicated header and description.
	ExtensionFeedItemErrorEnum_PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 25
	// Price extension has too few items.
	ExtensionFeedItemErrorEnum_PRICE_EXTENSION_HAS_TOO_FEW_ITEMS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 26
	// Price extension has too many items.
	ExtensionFeedItemErrorEnum_PRICE_EXTENSION_HAS_TOO_MANY_ITEMS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 27
	// The input value is not currently supported.
	ExtensionFeedItemErrorEnum_UNSUPPORTED_VALUE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 28
	// The input value is not currently supported in the selected language of an
	// extension.
	ExtensionFeedItemErrorEnum_UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 29
	// Unknown or unsupported device preference.
	ExtensionFeedItemErrorEnum_INVALID_DEVICE_PREFERENCE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 30
	// Invalid feed item schedule end time (i.e., endHour = 24 and endMinute !=
	// 0).
	ExtensionFeedItemErrorEnum_INVALID_SCHEDULE_END ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 31
	// Date time zone does not match the account's time zone.
	ExtensionFeedItemErrorEnum_DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 32
	// Invalid structured snippet header.
	ExtensionFeedItemErrorEnum_INVALID_SNIPPETS_HEADER ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 33
	// Cannot operate on removed feed item.
	ExtensionFeedItemErrorEnum_CANNOT_OPERATE_ON_REMOVED_FEED_ITEM ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 34
	// Phone number not supported when call tracking enabled for country.
	ExtensionFeedItemErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 35
	// Cannot set call_conversion_action while call_conversion_tracking_enabled
	// is set to true.
	ExtensionFeedItemErrorEnum_CONFLICTING_CALL_CONVERSION_SETTINGS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 36
	// The type of the input extension feed item doesn't match the existing
	// extension feed item.
	ExtensionFeedItemErrorEnum_EXTENSION_TYPE_MISMATCH ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 37
	// The oneof field extension i.e. subtype of extension feed item is
	// required.
	ExtensionFeedItemErrorEnum_EXTENSION_SUBTYPE_REQUIRED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 38
	// The referenced feed item is not mapped to a supported extension type.
	ExtensionFeedItemErrorEnum_EXTENSION_TYPE_UNSUPPORTED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 39
	// Cannot operate on a Feed with more than one active FeedMapping.
	ExtensionFeedItemErrorEnum_CANNOT_OPERATE_ON_FEED_WITH_MULTIPLE_MAPPINGS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 40
	// Cannot operate on a Feed that has key attributes.
	ExtensionFeedItemErrorEnum_CANNOT_OPERATE_ON_FEED_WITH_KEY_ATTRIBUTES ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 41
	// Input price is not in a valid format.
	ExtensionFeedItemErrorEnum_INVALID_PRICE_FORMAT ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 42
	// The promotion time is invalid.
	ExtensionFeedItemErrorEnum_PROMOTION_INVALID_TIME ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 43
	// This field has too many decimal places specified.
	ExtensionFeedItemErrorEnum_TOO_MANY_DECIMAL_PLACES_SPECIFIED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 44
	// Concrete sub type of ExtensionFeedItem is required for this operation.
	ExtensionFeedItemErrorEnum_CONCRETE_EXTENSION_TYPE_REQUIRED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 45
	// Feed item schedule end time must be after start time.
	ExtensionFeedItemErrorEnum_SCHEDULE_END_NOT_AFTER_START ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 46
)

var ExtensionFeedItemErrorEnum_ExtensionFeedItemError_name = map[int32]string{
	0:  "UNSPECIFIED",
	1:  "UNKNOWN",
	2:  "VALUE_OUT_OF_RANGE",
	3:  "URL_LIST_TOO_LONG",
	4:  "CANNOT_HAVE_RESTRICTION_ON_EMPTY_GEO_TARGETING",
	5:  "CANNOT_SET_WITH_FINAL_URLS",
	6:  "CANNOT_SET_WITHOUT_FINAL_URLS",
	7:  "INVALID_PHONE_NUMBER",
	8:  "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
	9:  "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
	10: "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
	11: "DISALLOWED_NUMBER_TYPE",
	12: "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT",
	13: "VANITY_PHONE_NUMBER_NOT_ALLOWED",
	14: "INVALID_CALL_CONVERSION_ACTION",
	15: "CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING",
	16: "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
	17: "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
	18: "INVALID_APP_ID",
	19: "QUOTES_IN_REVIEW_EXTENSION_SNIPPET",
	20: "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET",
	21: "REVIEW_EXTENSION_SOURCE_INELIGIBLE",
	22: "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT",
	23: "INCONSISTENT_CURRENCY_CODES",
	24: "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS",
	25: "PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION",
	26: "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS",
	27: "PRICE_EXTENSION_HAS_TOO_MANY_ITEMS",
	28: "UNSUPPORTED_VALUE",
	29: "UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE",
	30: "INVALID_DEVICE_PREFERENCE",
	31: "INVALID_SCHEDULE_END",
	32: "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE",
	33: "INVALID_SNIPPETS_HEADER",
	34: "CANNOT_OPERATE_ON_REMOVED_FEED_ITEM",
	35: "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY",
	36: "CONFLICTING_CALL_CONVERSION_SETTINGS",
	37: "EXTENSION_TYPE_MISMATCH",
	38: "EXTENSION_SUBTYPE_REQUIRED",
	39: "EXTENSION_TYPE_UNSUPPORTED",
	40: "CANNOT_OPERATE_ON_FEED_WITH_MULTIPLE_MAPPINGS",
	41: "CANNOT_OPERATE_ON_FEED_WITH_KEY_ATTRIBUTES",
	42: "INVALID_PRICE_FORMAT",
	43: "PROMOTION_INVALID_TIME",
	44: "TOO_MANY_DECIMAL_PLACES_SPECIFIED",
	45: "CONCRETE_EXTENSION_TYPE_REQUIRED",
	46: "SCHEDULE_END_NOT_AFTER_START",
}

var ExtensionFeedItemErrorEnum_ExtensionFeedItemError_value = map[string]int32{
	"UNSPECIFIED":        0,
	"UNKNOWN":            1,
	"VALUE_OUT_OF_RANGE": 2,
	"URL_LIST_TOO_LONG":  3,
	"CANNOT_HAVE_RESTRICTION_ON_EMPTY_GEO_TARGETING":           4,
	"CANNOT_SET_WITH_FINAL_URLS":                               5,
	"CANNOT_SET_WITHOUT_FINAL_URLS":                            6,
	"INVALID_PHONE_NUMBER":                                     7,
	"PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY":                   8,
	"CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED":                9,
	"PREMIUM_RATE_NUMBER_NOT_ALLOWED":                          10,
	"DISALLOWED_NUMBER_TYPE":                                   11,
	"INVALID_DOMESTIC_PHONE_NUMBER_FORMAT":                     12,
	"VANITY_PHONE_NUMBER_NOT_ALLOWED":                          13,
	"INVALID_CALL_CONVERSION_ACTION":                           14,
	"CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING":                15,
	"CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY":                   16,
	"CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED":             17,
	"INVALID_APP_ID":                                           18,
	"QUOTES_IN_REVIEW_EXTENSION_SNIPPET":                       19,
	"HYPHENS_IN_REVIEW_EXTENSION_SNIPPET":                      20,
	"REVIEW_EXTENSION_SOURCE_INELIGIBLE":                       21,
	"SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT":                     22,
	"INCONSISTENT_CURRENCY_CODES":                              23,
	"PRICE_EXTENSION_HAS_DUPLICATED_HEADERS":                   24,
	"PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION":         25,
	"PRICE_EXTENSION_HAS_TOO_FEW_ITEMS":                        26,
	"PRICE_EXTENSION_HAS_TOO_MANY_ITEMS":                       27,
	"UNSUPPORTED_VALUE":                                        28,
	"UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE":                   29,
	"INVALID_DEVICE_PREFERENCE":                                30,
	"INVALID_SCHEDULE_END":                                     31,
	"DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE":                   32,
	"INVALID_SNIPPETS_HEADER":                                  33,
	"CANNOT_OPERATE_ON_REMOVED_FEED_ITEM":                      34,
	"PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY": 35,
	"CONFLICTING_CALL_CONVERSION_SETTINGS":                     36,
	"EXTENSION_TYPE_MISMATCH":                                  37,
	"EXTENSION_SUBTYPE_REQUIRED":                               38,
	"EXTENSION_TYPE_UNSUPPORTED":                               39,
	"CANNOT_OPERATE_ON_FEED_WITH_MULTIPLE_MAPPINGS":            40,
	"CANNOT_OPERATE_ON_FEED_WITH_KEY_ATTRIBUTES":               41,
	"INVALID_PRICE_FORMAT":                                     42,
	"PROMOTION_INVALID_TIME":                                   43,
	"TOO_MANY_DECIMAL_PLACES_SPECIFIED":                        44,
	"CONCRETE_EXTENSION_TYPE_REQUIRED":                         45,
	"SCHEDULE_END_NOT_AFTER_START":                             46,
}

func (x ExtensionFeedItemErrorEnum_ExtensionFeedItemError) String() string {
	return proto.EnumName(ExtensionFeedItemErrorEnum_ExtensionFeedItemError_name, int32(x))
}

func (ExtensionFeedItemErrorEnum_ExtensionFeedItemError) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_9d791ac5581cafbd, []int{0, 0}
}

// Container for enum describing possible extension feed item error.
type ExtensionFeedItemErrorEnum struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_ExtensionFeedItemErrorEnum proto.InternalMessageInfo

func init() {
	proto.RegisterEnum("google.ads.googleads.v3.errors.ExtensionFeedItemErrorEnum_ExtensionFeedItemError", ExtensionFeedItemErrorEnum_ExtensionFeedItemError_name, ExtensionFeedItemErrorEnum_ExtensionFeedItemError_value)
	proto.RegisterType((*ExtensionFeedItemErrorEnum)(nil), "google.ads.googleads.v3.errors.ExtensionFeedItemErrorEnum")
}

func init() {
	proto.RegisterFile("google/ads/googleads/v3/errors/extension_feed_item_error.proto", fileDescriptor_9d791ac5581cafbd)
}

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