//
// Copyright 2019 AT&T Intellectual Property
// Copyright 2019 Nokia
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//
// This source code is part of the near-RT RIC (RAN Intelligent Controller)
// platform project (RICP).

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0-devel
// 	protoc        v3.6.1
// source: enb.proto

package entities

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

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

// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4

type FreqBandIndicatorPriority int32

const (
	FreqBandIndicatorPriority_UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY FreqBandIndicatorPriority = 0
	FreqBandIndicatorPriority_NOT_BROADCASTED                      FreqBandIndicatorPriority = 1
	FreqBandIndicatorPriority_BROADCASTED                          FreqBandIndicatorPriority = 2
)

// Enum value maps for FreqBandIndicatorPriority.
var (
	FreqBandIndicatorPriority_name = map[int32]string{
		0: "UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY",
		1: "NOT_BROADCASTED",
		2: "BROADCASTED",
	}
	FreqBandIndicatorPriority_value = map[string]int32{
		"UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY": 0,
		"NOT_BROADCASTED":                      1,
		"BROADCASTED":                          2,
	}
)

func (x FreqBandIndicatorPriority) Enum() *FreqBandIndicatorPriority {
	p := new(FreqBandIndicatorPriority)
	*p = x
	return p
}

func (x FreqBandIndicatorPriority) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (FreqBandIndicatorPriority) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[0].Descriptor()
}

func (FreqBandIndicatorPriority) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[0]
}

func (x FreqBandIndicatorPriority) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use FreqBandIndicatorPriority.Descriptor instead.
func (FreqBandIndicatorPriority) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{0}
}

type BandwidthReducedSI int32

const (
	BandwidthReducedSI_UNKNOWN_BANDWIDTH_REDUCED_SI BandwidthReducedSI = 0
	BandwidthReducedSI_SCHEDULED                    BandwidthReducedSI = 1
)

// Enum value maps for BandwidthReducedSI.
var (
	BandwidthReducedSI_name = map[int32]string{
		0: "UNKNOWN_BANDWIDTH_REDUCED_SI",
		1: "SCHEDULED",
	}
	BandwidthReducedSI_value = map[string]int32{
		"UNKNOWN_BANDWIDTH_REDUCED_SI": 0,
		"SCHEDULED":                    1,
	}
)

func (x BandwidthReducedSI) Enum() *BandwidthReducedSI {
	p := new(BandwidthReducedSI)
	*p = x
	return p
}

func (x BandwidthReducedSI) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BandwidthReducedSI) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[1].Descriptor()
}

func (BandwidthReducedSI) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[1]
}

func (x BandwidthReducedSI) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BandwidthReducedSI.Descriptor instead.
func (BandwidthReducedSI) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{1}
}

type SubframeAllocationType int32

const (
	SubframeAllocationType_UNKNOWN_SUBFRAME_ALLOCATION_TYPE SubframeAllocationType = 0
	SubframeAllocationType_ONE_FRAME                        SubframeAllocationType = 1
	SubframeAllocationType_FOUR_FRAME                       SubframeAllocationType = 2
)

// Enum value maps for SubframeAllocationType.
var (
	SubframeAllocationType_name = map[int32]string{
		0: "UNKNOWN_SUBFRAME_ALLOCATION_TYPE",
		1: "ONE_FRAME",
		2: "FOUR_FRAME",
	}
	SubframeAllocationType_value = map[string]int32{
		"UNKNOWN_SUBFRAME_ALLOCATION_TYPE": 0,
		"ONE_FRAME":                        1,
		"FOUR_FRAME":                       2,
	}
)

func (x SubframeAllocationType) Enum() *SubframeAllocationType {
	p := new(SubframeAllocationType)
	*p = x
	return p
}

func (x SubframeAllocationType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SubframeAllocationType) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[2].Descriptor()
}

func (SubframeAllocationType) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[2]
}

func (x SubframeAllocationType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SubframeAllocationType.Descriptor instead.
func (SubframeAllocationType) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{2}
}

type RadioframeAllocationPeriod int32

const (
	RadioframeAllocationPeriod_UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD RadioframeAllocationPeriod = 0
	RadioframeAllocationPeriod_N1                                   RadioframeAllocationPeriod = 1
	RadioframeAllocationPeriod_N2                                   RadioframeAllocationPeriod = 2
	RadioframeAllocationPeriod_N4                                   RadioframeAllocationPeriod = 3
	RadioframeAllocationPeriod_N8                                   RadioframeAllocationPeriod = 4
	RadioframeAllocationPeriod_N16                                  RadioframeAllocationPeriod = 5
	RadioframeAllocationPeriod_N32                                  RadioframeAllocationPeriod = 6
)

// Enum value maps for RadioframeAllocationPeriod.
var (
	RadioframeAllocationPeriod_name = map[int32]string{
		0: "UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD",
		1: "N1",
		2: "N2",
		3: "N4",
		4: "N8",
		5: "N16",
		6: "N32",
	}
	RadioframeAllocationPeriod_value = map[string]int32{
		"UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD": 0,
		"N1":                                   1,
		"N2":                                   2,
		"N4":                                   3,
		"N8":                                   4,
		"N16":                                  5,
		"N32":                                  6,
	}
)

func (x RadioframeAllocationPeriod) Enum() *RadioframeAllocationPeriod {
	p := new(RadioframeAllocationPeriod)
	*p = x
	return p
}

func (x RadioframeAllocationPeriod) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RadioframeAllocationPeriod) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[3].Descriptor()
}

func (RadioframeAllocationPeriod) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[3]
}

func (x RadioframeAllocationPeriod) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RadioframeAllocationPeriod.Descriptor instead.
func (RadioframeAllocationPeriod) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{3}
}

type NumberOfAntennaPorts int32

const (
	NumberOfAntennaPorts_UNKNOWN_NUMBER_OF_ANTENNA_PORTS NumberOfAntennaPorts = 0
	NumberOfAntennaPorts_AN1                             NumberOfAntennaPorts = 1
	NumberOfAntennaPorts_AN2                             NumberOfAntennaPorts = 2
	NumberOfAntennaPorts_AN4                             NumberOfAntennaPorts = 3
)

// Enum value maps for NumberOfAntennaPorts.
var (
	NumberOfAntennaPorts_name = map[int32]string{
		0: "UNKNOWN_NUMBER_OF_ANTENNA_PORTS",
		1: "AN1",
		2: "AN2",
		3: "AN4",
	}
	NumberOfAntennaPorts_value = map[string]int32{
		"UNKNOWN_NUMBER_OF_ANTENNA_PORTS": 0,
		"AN1":                             1,
		"AN2":                             2,
		"AN4":                             3,
	}
)

func (x NumberOfAntennaPorts) Enum() *NumberOfAntennaPorts {
	p := new(NumberOfAntennaPorts)
	*p = x
	return p
}

func (x NumberOfAntennaPorts) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (NumberOfAntennaPorts) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[4].Descriptor()
}

func (NumberOfAntennaPorts) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[4]
}

func (x NumberOfAntennaPorts) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use NumberOfAntennaPorts.Descriptor instead.
func (NumberOfAntennaPorts) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{4}
}

type EnbType int32

const (
	EnbType_UNKNOWN_ENB_TYPE EnbType = 0
	EnbType_MACRO_ENB        EnbType = 1
	EnbType_HOME_ENB         EnbType = 2
	EnbType_SHORT_MACRO_ENB  EnbType = 3
	EnbType_LONG_MACRO_ENB   EnbType = 4
)

// Enum value maps for EnbType.
var (
	EnbType_name = map[int32]string{
		0: "UNKNOWN_ENB_TYPE",
		1: "MACRO_ENB",
		2: "HOME_ENB",
		3: "SHORT_MACRO_ENB",
		4: "LONG_MACRO_ENB",
	}
	EnbType_value = map[string]int32{
		"UNKNOWN_ENB_TYPE": 0,
		"MACRO_ENB":        1,
		"HOME_ENB":         2,
		"SHORT_MACRO_ENB":  3,
		"LONG_MACRO_ENB":   4,
	}
)

func (x EnbType) Enum() *EnbType {
	p := new(EnbType)
	*p = x
	return p
}

func (x EnbType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (EnbType) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[5].Descriptor()
}

func (EnbType) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[5]
}

func (x EnbType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use EnbType.Descriptor instead.
func (EnbType) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{5}
}

type SubframeAssignment int32

const (
	SubframeAssignment_UNKNOWN_SUBFRAME_ASSIGNMENT SubframeAssignment = 0
	SubframeAssignment_SA0                         SubframeAssignment = 1
	SubframeAssignment_SA1                         SubframeAssignment = 2
	SubframeAssignment_SA2                         SubframeAssignment = 3
	SubframeAssignment_SA3                         SubframeAssignment = 4
	SubframeAssignment_SA4                         SubframeAssignment = 5
	SubframeAssignment_SA5                         SubframeAssignment = 6
	SubframeAssignment_SA6                         SubframeAssignment = 7
)

// Enum value maps for SubframeAssignment.
var (
	SubframeAssignment_name = map[int32]string{
		0: "UNKNOWN_SUBFRAME_ASSIGNMENT",
		1: "SA0",
		2: "SA1",
		3: "SA2",
		4: "SA3",
		5: "SA4",
		6: "SA5",
		7: "SA6",
	}
	SubframeAssignment_value = map[string]int32{
		"UNKNOWN_SUBFRAME_ASSIGNMENT": 0,
		"SA0":                         1,
		"SA1":                         2,
		"SA2":                         3,
		"SA3":                         4,
		"SA4":                         5,
		"SA5":                         6,
		"SA6":                         7,
	}
)

func (x SubframeAssignment) Enum() *SubframeAssignment {
	p := new(SubframeAssignment)
	*p = x
	return p
}

func (x SubframeAssignment) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SubframeAssignment) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[6].Descriptor()
}

func (SubframeAssignment) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[6]
}

func (x SubframeAssignment) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SubframeAssignment.Descriptor instead.
func (SubframeAssignment) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{6}
}

type CyclicPrefix int32

const (
	CyclicPrefix_UNKNOWN_CYCLIC_PREFIX CyclicPrefix = 0
	CyclicPrefix_NORMAL                CyclicPrefix = 1
	CyclicPrefix_EXTENDED              CyclicPrefix = 2
)

// Enum value maps for CyclicPrefix.
var (
	CyclicPrefix_name = map[int32]string{
		0: "UNKNOWN_CYCLIC_PREFIX",
		1: "NORMAL",
		2: "EXTENDED",
	}
	CyclicPrefix_value = map[string]int32{
		"UNKNOWN_CYCLIC_PREFIX": 0,
		"NORMAL":                1,
		"EXTENDED":              2,
	}
)

func (x CyclicPrefix) Enum() *CyclicPrefix {
	p := new(CyclicPrefix)
	*p = x
	return p
}

func (x CyclicPrefix) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (CyclicPrefix) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[7].Descriptor()
}

func (CyclicPrefix) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[7]
}

func (x CyclicPrefix) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use CyclicPrefix.Descriptor instead.
func (CyclicPrefix) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{7}
}

type TransmissionBandwidth int32

const (
	TransmissionBandwidth_UNKNOWN_TRANSMISSION_BANDWIDTH TransmissionBandwidth = 0
	TransmissionBandwidth_BW6                            TransmissionBandwidth = 1
	TransmissionBandwidth_BW15                           TransmissionBandwidth = 2
	TransmissionBandwidth_BW25                           TransmissionBandwidth = 3
	TransmissionBandwidth_BW50                           TransmissionBandwidth = 4
	TransmissionBandwidth_BW75                           TransmissionBandwidth = 5
	TransmissionBandwidth_BW100                          TransmissionBandwidth = 6
	TransmissionBandwidth_BW1                            TransmissionBandwidth = 7
)

// Enum value maps for TransmissionBandwidth.
var (
	TransmissionBandwidth_name = map[int32]string{
		0: "UNKNOWN_TRANSMISSION_BANDWIDTH",
		1: "BW6",
		2: "BW15",
		3: "BW25",
		4: "BW50",
		5: "BW75",
		6: "BW100",
		7: "BW1",
	}
	TransmissionBandwidth_value = map[string]int32{
		"UNKNOWN_TRANSMISSION_BANDWIDTH": 0,
		"BW6":                            1,
		"BW15":                           2,
		"BW25":                           3,
		"BW50":                           4,
		"BW75":                           5,
		"BW100":                          6,
		"BW1":                            7,
	}
)

func (x TransmissionBandwidth) Enum() *TransmissionBandwidth {
	p := new(TransmissionBandwidth)
	*p = x
	return p
}

func (x TransmissionBandwidth) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (TransmissionBandwidth) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[8].Descriptor()
}

func (TransmissionBandwidth) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[8]
}

func (x TransmissionBandwidth) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use TransmissionBandwidth.Descriptor instead.
func (TransmissionBandwidth) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{8}
}

type Eutra_Mode int32

const (
	Eutra_UNKNOWN Eutra_Mode = 0
	Eutra_FDD     Eutra_Mode = 1
	Eutra_TDD     Eutra_Mode = 2
)

// Enum value maps for Eutra_Mode.
var (
	Eutra_Mode_name = map[int32]string{
		0: "UNKNOWN",
		1: "FDD",
		2: "TDD",
	}
	Eutra_Mode_value = map[string]int32{
		"UNKNOWN": 0,
		"FDD":     1,
		"TDD":     2,
	}
)

func (x Eutra_Mode) Enum() *Eutra_Mode {
	p := new(Eutra_Mode)
	*p = x
	return p
}

func (x Eutra_Mode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Eutra_Mode) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[9].Descriptor()
}

func (Eutra_Mode) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[9]
}

func (x Eutra_Mode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Eutra_Mode.Descriptor instead.
func (Eutra_Mode) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{3, 0}
}

type SpecialSubframe_Patterns int32

const (
	SpecialSubframe_UNKNOWN SpecialSubframe_Patterns = 0
	SpecialSubframe_SSP0    SpecialSubframe_Patterns = 1
	SpecialSubframe_SSP1    SpecialSubframe_Patterns = 2
	SpecialSubframe_SSP2    SpecialSubframe_Patterns = 3
	SpecialSubframe_SSP3    SpecialSubframe_Patterns = 4
	SpecialSubframe_SSP4    SpecialSubframe_Patterns = 5
	SpecialSubframe_SSP5    SpecialSubframe_Patterns = 6
	SpecialSubframe_SSP6    SpecialSubframe_Patterns = 7
	SpecialSubframe_SSP7    SpecialSubframe_Patterns = 8
	SpecialSubframe_SSP8    SpecialSubframe_Patterns = 9
)

// Enum value maps for SpecialSubframe_Patterns.
var (
	SpecialSubframe_Patterns_name = map[int32]string{
		0: "UNKNOWN",
		1: "SSP0",
		2: "SSP1",
		3: "SSP2",
		4: "SSP3",
		5: "SSP4",
		6: "SSP5",
		7: "SSP6",
		8: "SSP7",
		9: "SSP8",
	}
	SpecialSubframe_Patterns_value = map[string]int32{
		"UNKNOWN": 0,
		"SSP0":    1,
		"SSP1":    2,
		"SSP2":    3,
		"SSP3":    4,
		"SSP4":    5,
		"SSP5":    6,
		"SSP6":    7,
		"SSP7":    8,
		"SSP8":    9,
	}
)

func (x SpecialSubframe_Patterns) Enum() *SpecialSubframe_Patterns {
	p := new(SpecialSubframe_Patterns)
	*p = x
	return p
}

func (x SpecialSubframe_Patterns) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SpecialSubframe_Patterns) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[10].Descriptor()
}

func (SpecialSubframe_Patterns) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[10]
}

func (x SpecialSubframe_Patterns) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SpecialSubframe_Patterns.Descriptor instead.
func (SpecialSubframe_Patterns) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{12, 0}
}

type AdditionalSpecialSubframe_Patterns int32

const (
	AdditionalSpecialSubframe_UNKNOWN AdditionalSpecialSubframe_Patterns = 0
	AdditionalSpecialSubframe_SSP0    AdditionalSpecialSubframe_Patterns = 1
	AdditionalSpecialSubframe_SSP1    AdditionalSpecialSubframe_Patterns = 2
	AdditionalSpecialSubframe_SSP2    AdditionalSpecialSubframe_Patterns = 3
	AdditionalSpecialSubframe_SSP3    AdditionalSpecialSubframe_Patterns = 4
	AdditionalSpecialSubframe_SSP4    AdditionalSpecialSubframe_Patterns = 5
	AdditionalSpecialSubframe_SSP5    AdditionalSpecialSubframe_Patterns = 6
	AdditionalSpecialSubframe_SSP6    AdditionalSpecialSubframe_Patterns = 7
	AdditionalSpecialSubframe_SSP7    AdditionalSpecialSubframe_Patterns = 8
	AdditionalSpecialSubframe_SSP8    AdditionalSpecialSubframe_Patterns = 9
	AdditionalSpecialSubframe_SSP9    AdditionalSpecialSubframe_Patterns = 10
)

// Enum value maps for AdditionalSpecialSubframe_Patterns.
var (
	AdditionalSpecialSubframe_Patterns_name = map[int32]string{
		0:  "UNKNOWN",
		1:  "SSP0",
		2:  "SSP1",
		3:  "SSP2",
		4:  "SSP3",
		5:  "SSP4",
		6:  "SSP5",
		7:  "SSP6",
		8:  "SSP7",
		9:  "SSP8",
		10: "SSP9",
	}
	AdditionalSpecialSubframe_Patterns_value = map[string]int32{
		"UNKNOWN": 0,
		"SSP0":    1,
		"SSP1":    2,
		"SSP2":    3,
		"SSP3":    4,
		"SSP4":    5,
		"SSP5":    6,
		"SSP6":    7,
		"SSP7":    8,
		"SSP8":    9,
		"SSP9":    10,
	}
)

func (x AdditionalSpecialSubframe_Patterns) Enum() *AdditionalSpecialSubframe_Patterns {
	p := new(AdditionalSpecialSubframe_Patterns)
	*p = x
	return p
}

func (x AdditionalSpecialSubframe_Patterns) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (AdditionalSpecialSubframe_Patterns) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[11].Descriptor()
}

func (AdditionalSpecialSubframe_Patterns) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[11]
}

func (x AdditionalSpecialSubframe_Patterns) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use AdditionalSpecialSubframe_Patterns.Descriptor instead.
func (AdditionalSpecialSubframe_Patterns) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{13, 0}
}

type AdditionalSpecialSubframePatterns_Extension int32

const (
	AdditionalSpecialSubframePatterns_UNKNOWN AdditionalSpecialSubframePatterns_Extension = 0
	AdditionalSpecialSubframePatterns_SSP10   AdditionalSpecialSubframePatterns_Extension = 1
)

// Enum value maps for AdditionalSpecialSubframePatterns_Extension.
var (
	AdditionalSpecialSubframePatterns_Extension_name = map[int32]string{
		0: "UNKNOWN",
		1: "SSP10",
	}
	AdditionalSpecialSubframePatterns_Extension_value = map[string]int32{
		"UNKNOWN": 0,
		"SSP10":   1,
	}
)

func (x AdditionalSpecialSubframePatterns_Extension) Enum() *AdditionalSpecialSubframePatterns_Extension {
	p := new(AdditionalSpecialSubframePatterns_Extension)
	*p = x
	return p
}

func (x AdditionalSpecialSubframePatterns_Extension) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (AdditionalSpecialSubframePatterns_Extension) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[12].Descriptor()
}

func (AdditionalSpecialSubframePatterns_Extension) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[12]
}

func (x AdditionalSpecialSubframePatterns_Extension) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use AdditionalSpecialSubframePatterns_Extension.Descriptor instead.
func (AdditionalSpecialSubframePatterns_Extension) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{14, 0}
}

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

	EnbType     EnbType           `protobuf:"varint,1,opt,name=enb_type,json=enbType,proto3,enum=entities.EnbType" json:"enb_type,omitempty"`
	ServedCells []*ServedCellInfo `protobuf:"bytes,2,rep,name=served_cells,json=servedCells,proto3" json:"served_cells,omitempty"`
	GuGroupIds  []string          `protobuf:"bytes,3,rep,name=gu_group_ids,json=guGroupIds,proto3" json:"gu_group_ids,omitempty"`
}

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

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

func (*Enb) ProtoMessage() {}

func (x *Enb) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Enb.ProtoReflect.Descriptor instead.
func (*Enb) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{0}
}

func (x *Enb) GetEnbType() EnbType {
	if x != nil {
		return x.EnbType
	}
	return EnbType_UNKNOWN_ENB_TYPE
}

func (x *Enb) GetServedCells() []*ServedCellInfo {
	if x != nil {
		return x.ServedCells
	}
	return nil
}

func (x *Enb) GetGuGroupIds() []string {
	if x != nil {
		return x.GuGroupIds
	}
	return nil
}

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

	Pci                       uint32                     `protobuf:"varint,1,opt,name=pci,proto3" json:"pci,omitempty"`
	CellId                    string                     `protobuf:"bytes,2,opt,name=cell_id,json=cellId,proto3" json:"cell_id,omitempty"`
	Tac                       string                     `protobuf:"bytes,3,opt,name=tac,proto3" json:"tac,omitempty"`
	BroadcastPlmns            []string                   `protobuf:"bytes,4,rep,name=broadcast_plmns,json=broadcastPlmns,proto3" json:"broadcast_plmns,omitempty"`
	ChoiceEutraMode           *ChoiceEUTRAMode           `protobuf:"bytes,5,opt,name=choice_eutra_mode,json=choiceEutraMode,proto3" json:"choice_eutra_mode,omitempty"`
	EutraMode                 Eutra_Mode                 `protobuf:"varint,6,opt,name=eutra_mode,json=eutraMode,proto3,enum=entities.Eutra_Mode" json:"eutra_mode,omitempty"`
	NumberOfAntennaPorts      NumberOfAntennaPorts       `protobuf:"varint,7,opt,name=number_of_antenna_ports,json=numberOfAntennaPorts,proto3,enum=entities.NumberOfAntennaPorts" json:"number_of_antenna_ports,omitempty"`
	PrachConfiguration        *PrachConfiguration        `protobuf:"bytes,8,opt,name=prach_configuration,json=prachConfiguration,proto3" json:"prach_configuration,omitempty"`
	MbsfnSubframeInfos        []*MbsfnSubframe           `protobuf:"bytes,9,rep,name=mbsfn_subframe_infos,json=mbsfnSubframeInfos,proto3" json:"mbsfn_subframe_infos,omitempty"`
	CsgId                     string                     `protobuf:"bytes,10,opt,name=csg_id,json=csgId,proto3" json:"csg_id,omitempty"`
	MbmsServiceAreaIdentities []string                   `protobuf:"bytes,11,rep,name=mbms_service_area_identities,json=mbmsServiceAreaIdentities,proto3" json:"mbms_service_area_identities,omitempty"`
	MultibandInfos            []uint32                   `protobuf:"varint,12,rep,packed,name=multiband_infos,json=multibandInfos,proto3" json:"multiband_infos,omitempty"`
	FreqBandIndicatorPriority FreqBandIndicatorPriority  `protobuf:"varint,13,opt,name=freq_band_indicator_priority,json=freqBandIndicatorPriority,proto3,enum=entities.FreqBandIndicatorPriority" json:"freq_band_indicator_priority,omitempty"`
	BandwidthReducedSi        BandwidthReducedSI         `protobuf:"varint,14,opt,name=bandwidth_reduced_si,json=bandwidthReducedSi,proto3,enum=entities.BandwidthReducedSI" json:"bandwidth_reduced_si,omitempty"`
	NeighbourInfos            []*NeighbourInformation    `protobuf:"bytes,15,rep,name=neighbour_infos,json=neighbourInfos,proto3" json:"neighbour_infos,omitempty"`
	AdditionalCellInformation *AdditionalCellInformation `protobuf:"bytes,16,opt,name=additional_cell_information,json=additionalCellInformation,proto3" json:"additional_cell_information,omitempty"`
}

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

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

func (*ServedCellInfo) ProtoMessage() {}

func (x *ServedCellInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ServedCellInfo.ProtoReflect.Descriptor instead.
func (*ServedCellInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{1}
}

func (x *ServedCellInfo) GetPci() uint32 {
	if x != nil {
		return x.Pci
	}
	return 0
}

func (x *ServedCellInfo) GetCellId() string {
	if x != nil {
		return x.CellId
	}
	return ""
}

func (x *ServedCellInfo) GetTac() string {
	if x != nil {
		return x.Tac
	}
	return ""
}

func (x *ServedCellInfo) GetBroadcastPlmns() []string {
	if x != nil {
		return x.BroadcastPlmns
	}
	return nil
}

func (x *ServedCellInfo) GetChoiceEutraMode() *ChoiceEUTRAMode {
	if x != nil {
		return x.ChoiceEutraMode
	}
	return nil
}

func (x *ServedCellInfo) GetEutraMode() Eutra_Mode {
	if x != nil {
		return x.EutraMode
	}
	return Eutra_UNKNOWN
}

func (x *ServedCellInfo) GetNumberOfAntennaPorts() NumberOfAntennaPorts {
	if x != nil {
		return x.NumberOfAntennaPorts
	}
	return NumberOfAntennaPorts_UNKNOWN_NUMBER_OF_ANTENNA_PORTS
}

func (x *ServedCellInfo) GetPrachConfiguration() *PrachConfiguration {
	if x != nil {
		return x.PrachConfiguration
	}
	return nil
}

func (x *ServedCellInfo) GetMbsfnSubframeInfos() []*MbsfnSubframe {
	if x != nil {
		return x.MbsfnSubframeInfos
	}
	return nil
}

func (x *ServedCellInfo) GetCsgId() string {
	if x != nil {
		return x.CsgId
	}
	return ""
}

func (x *ServedCellInfo) GetMbmsServiceAreaIdentities() []string {
	if x != nil {
		return x.MbmsServiceAreaIdentities
	}
	return nil
}

func (x *ServedCellInfo) GetMultibandInfos() []uint32 {
	if x != nil {
		return x.MultibandInfos
	}
	return nil
}

func (x *ServedCellInfo) GetFreqBandIndicatorPriority() FreqBandIndicatorPriority {
	if x != nil {
		return x.FreqBandIndicatorPriority
	}
	return FreqBandIndicatorPriority_UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY
}

func (x *ServedCellInfo) GetBandwidthReducedSi() BandwidthReducedSI {
	if x != nil {
		return x.BandwidthReducedSi
	}
	return BandwidthReducedSI_UNKNOWN_BANDWIDTH_REDUCED_SI
}

func (x *ServedCellInfo) GetNeighbourInfos() []*NeighbourInformation {
	if x != nil {
		return x.NeighbourInfos
	}
	return nil
}

func (x *ServedCellInfo) GetAdditionalCellInformation() *AdditionalCellInformation {
	if x != nil {
		return x.AdditionalCellInformation
	}
	return nil
}

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

	Fdd *FddInfo `protobuf:"bytes,1,opt,name=fdd,proto3" json:"fdd,omitempty"`
	Tdd *TddInfo `protobuf:"bytes,2,opt,name=tdd,proto3" json:"tdd,omitempty"`
}

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

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

func (*ChoiceEUTRAMode) ProtoMessage() {}

func (x *ChoiceEUTRAMode) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ChoiceEUTRAMode.ProtoReflect.Descriptor instead.
func (*ChoiceEUTRAMode) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{2}
}

func (x *ChoiceEUTRAMode) GetFdd() *FddInfo {
	if x != nil {
		return x.Fdd
	}
	return nil
}

func (x *ChoiceEUTRAMode) GetTdd() *TddInfo {
	if x != nil {
		return x.Tdd
	}
	return nil
}

type Eutra struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *Eutra) Reset() {
	*x = Eutra{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*Eutra) ProtoMessage() {}

func (x *Eutra) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Eutra.ProtoReflect.Descriptor instead.
func (*Eutra) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{3}
}

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

	Ecgi   string `protobuf:"bytes,1,opt,name=ecgi,proto3" json:"ecgi,omitempty"`
	Pci    uint32 `protobuf:"varint,2,opt,name=pci,proto3" json:"pci,omitempty"`
	EarFcn uint32 `protobuf:"varint,3,opt,name=ear_fcn,json=earFcn,proto3" json:"ear_fcn,omitempty"`
	Tac    string `protobuf:"bytes,4,opt,name=tac,proto3" json:"tac,omitempty"`
}

func (x *NeighbourInformation) Reset() {
	*x = NeighbourInformation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*NeighbourInformation) ProtoMessage() {}

func (x *NeighbourInformation) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[4]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use NeighbourInformation.ProtoReflect.Descriptor instead.
func (*NeighbourInformation) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{4}
}

func (x *NeighbourInformation) GetEcgi() string {
	if x != nil {
		return x.Ecgi
	}
	return ""
}

func (x *NeighbourInformation) GetPci() uint32 {
	if x != nil {
		return x.Pci
	}
	return 0
}

func (x *NeighbourInformation) GetEarFcn() uint32 {
	if x != nil {
		return x.EarFcn
	}
	return 0
}

func (x *NeighbourInformation) GetTac() string {
	if x != nil {
		return x.Tac
	}
	return ""
}

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

	RadioframeAllocationPeriod RadioframeAllocationPeriod `protobuf:"varint,1,opt,name=radioframe_allocation_period,json=radioframeAllocationPeriod,proto3,enum=entities.RadioframeAllocationPeriod" json:"radioframe_allocation_period,omitempty"`
	RadioframeAllocationOffset uint32                     `protobuf:"varint,2,opt,name=radioframe_allocation_offset,json=radioframeAllocationOffset,proto3" json:"radioframe_allocation_offset,omitempty"`
	SubframeAllocation         string                     `protobuf:"bytes,3,opt,name=subframe_allocation,json=subframeAllocation,proto3" json:"subframe_allocation,omitempty"`
	SubframeAllocationType     SubframeAllocationType     `protobuf:"varint,4,opt,name=subframe_allocation_type,json=subframeAllocationType,proto3,enum=entities.SubframeAllocationType" json:"subframe_allocation_type,omitempty"`
}

func (x *MbsfnSubframe) Reset() {
	*x = MbsfnSubframe{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*MbsfnSubframe) ProtoMessage() {}

func (x *MbsfnSubframe) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[5]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MbsfnSubframe.ProtoReflect.Descriptor instead.
func (*MbsfnSubframe) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{5}
}

func (x *MbsfnSubframe) GetRadioframeAllocationPeriod() RadioframeAllocationPeriod {
	if x != nil {
		return x.RadioframeAllocationPeriod
	}
	return RadioframeAllocationPeriod_UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD
}

func (x *MbsfnSubframe) GetRadioframeAllocationOffset() uint32 {
	if x != nil {
		return x.RadioframeAllocationOffset
	}
	return 0
}

func (x *MbsfnSubframe) GetSubframeAllocation() string {
	if x != nil {
		return x.SubframeAllocation
	}
	return ""
}

func (x *MbsfnSubframe) GetSubframeAllocationType() SubframeAllocationType {
	if x != nil {
		return x.SubframeAllocationType
	}
	return SubframeAllocationType_UNKNOWN_SUBFRAME_ALLOCATION_TYPE
}

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

	RootSequenceIndex                uint32 `protobuf:"varint,1,opt,name=root_sequence_index,json=rootSequenceIndex,proto3" json:"root_sequence_index,omitempty"`
	ZeroCorrelationZoneConfiguration uint32 `protobuf:"varint,2,opt,name=zero_correlation_zone_configuration,json=zeroCorrelationZoneConfiguration,proto3" json:"zero_correlation_zone_configuration,omitempty"`
	HighSpeedFlag                    bool   `protobuf:"varint,3,opt,name=high_speed_flag,json=highSpeedFlag,proto3" json:"high_speed_flag,omitempty"`
	PrachFrequencyOffset             uint32 `protobuf:"varint,4,opt,name=prach_frequency_offset,json=prachFrequencyOffset,proto3" json:"prach_frequency_offset,omitempty"`
	PrachConfigurationIndex          uint32 `protobuf:"varint,5,opt,name=prach_configuration_index,json=prachConfigurationIndex,proto3" json:"prach_configuration_index,omitempty"`
}

func (x *PrachConfiguration) Reset() {
	*x = PrachConfiguration{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*PrachConfiguration) ProtoMessage() {}

func (x *PrachConfiguration) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[6]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use PrachConfiguration.ProtoReflect.Descriptor instead.
func (*PrachConfiguration) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{6}
}

func (x *PrachConfiguration) GetRootSequenceIndex() uint32 {
	if x != nil {
		return x.RootSequenceIndex
	}
	return 0
}

func (x *PrachConfiguration) GetZeroCorrelationZoneConfiguration() uint32 {
	if x != nil {
		return x.ZeroCorrelationZoneConfiguration
	}
	return 0
}

func (x *PrachConfiguration) GetHighSpeedFlag() bool {
	if x != nil {
		return x.HighSpeedFlag
	}
	return false
}

func (x *PrachConfiguration) GetPrachFrequencyOffset() uint32 {
	if x != nil {
		return x.PrachFrequencyOffset
	}
	return 0
}

func (x *PrachConfiguration) GetPrachConfigurationIndex() uint32 {
	if x != nil {
		return x.PrachConfigurationIndex
	}
	return 0
}

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

	EarFcn                                 uint32                                  `protobuf:"varint,1,opt,name=ear_fcn,json=earFcn,proto3" json:"ear_fcn,omitempty"`
	TransmissionBandwidth                  TransmissionBandwidth                   `protobuf:"varint,2,opt,name=transmission_bandwidth,json=transmissionBandwidth,proto3,enum=entities.TransmissionBandwidth" json:"transmission_bandwidth,omitempty"`
	SubframeAssignment                     SubframeAssignment                      `protobuf:"varint,3,opt,name=subframe_assignment,json=subframeAssignment,proto3,enum=entities.SubframeAssignment" json:"subframe_assignment,omitempty"`
	SpecialSubframeInfo                    *SpecialSubframeInfo                    `protobuf:"bytes,4,opt,name=special_subframe_info,json=specialSubframeInfo,proto3" json:"special_subframe_info,omitempty"`
	AdditionalSpecialSubframeInfo          *AdditionalSpecialSubframeInfo          `protobuf:"bytes,5,opt,name=additional_special_subframe_info,json=additionalSpecialSubframeInfo,proto3" json:"additional_special_subframe_info,omitempty"`
	AdditionalSpecialSubframeExtensionInfo *AdditionalSpecialSubframeExtensionInfo `protobuf:"bytes,6,opt,name=additional_special_subframe_extension_info,json=additionalSpecialSubframeExtensionInfo,proto3" json:"additional_special_subframe_extension_info,omitempty"`
}

func (x *TddInfo) Reset() {
	*x = TddInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*TddInfo) ProtoMessage() {}

func (x *TddInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[7]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TddInfo.ProtoReflect.Descriptor instead.
func (*TddInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{7}
}

func (x *TddInfo) GetEarFcn() uint32 {
	if x != nil {
		return x.EarFcn
	}
	return 0
}

func (x *TddInfo) GetTransmissionBandwidth() TransmissionBandwidth {
	if x != nil {
		return x.TransmissionBandwidth
	}
	return TransmissionBandwidth_UNKNOWN_TRANSMISSION_BANDWIDTH
}

func (x *TddInfo) GetSubframeAssignment() SubframeAssignment {
	if x != nil {
		return x.SubframeAssignment
	}
	return SubframeAssignment_UNKNOWN_SUBFRAME_ASSIGNMENT
}

func (x *TddInfo) GetSpecialSubframeInfo() *SpecialSubframeInfo {
	if x != nil {
		return x.SpecialSubframeInfo
	}
	return nil
}

func (x *TddInfo) GetAdditionalSpecialSubframeInfo() *AdditionalSpecialSubframeInfo {
	if x != nil {
		return x.AdditionalSpecialSubframeInfo
	}
	return nil
}

func (x *TddInfo) GetAdditionalSpecialSubframeExtensionInfo() *AdditionalSpecialSubframeExtensionInfo {
	if x != nil {
		return x.AdditionalSpecialSubframeExtensionInfo
	}
	return nil
}

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

	AdditionalSpecialSubframePatternsExtension AdditionalSpecialSubframePatterns_Extension `protobuf:"varint,1,opt,name=additional_special_subframe_patterns_extension,json=additionalSpecialSubframePatternsExtension,proto3,enum=entities.AdditionalSpecialSubframePatterns_Extension" json:"additional_special_subframe_patterns_extension,omitempty"`
	CyclicPrefixDl                             CyclicPrefix                                `protobuf:"varint,2,opt,name=cyclic_prefix_dl,json=cyclicPrefixDl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_dl,omitempty"`
	CyclicPrefixUl                             CyclicPrefix                                `protobuf:"varint,3,opt,name=cyclic_prefix_ul,json=cyclicPrefixUl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_ul,omitempty"`
}

func (x *AdditionalSpecialSubframeExtensionInfo) Reset() {
	*x = AdditionalSpecialSubframeExtensionInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AdditionalSpecialSubframeExtensionInfo) ProtoMessage() {}

func (x *AdditionalSpecialSubframeExtensionInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[8]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AdditionalSpecialSubframeExtensionInfo.ProtoReflect.Descriptor instead.
func (*AdditionalSpecialSubframeExtensionInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{8}
}

func (x *AdditionalSpecialSubframeExtensionInfo) GetAdditionalSpecialSubframePatternsExtension() AdditionalSpecialSubframePatterns_Extension {
	if x != nil {
		return x.AdditionalSpecialSubframePatternsExtension
	}
	return AdditionalSpecialSubframePatterns_UNKNOWN
}

func (x *AdditionalSpecialSubframeExtensionInfo) GetCyclicPrefixDl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixDl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

func (x *AdditionalSpecialSubframeExtensionInfo) GetCyclicPrefixUl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixUl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

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

	AdditionalSpecialSubframePatterns AdditionalSpecialSubframe_Patterns `protobuf:"varint,1,opt,name=additional_special_subframe_patterns,json=additionalSpecialSubframePatterns,proto3,enum=entities.AdditionalSpecialSubframe_Patterns" json:"additional_special_subframe_patterns,omitempty"`
	CyclicPrefixDl                    CyclicPrefix                       `protobuf:"varint,2,opt,name=cyclic_prefix_dl,json=cyclicPrefixDl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_dl,omitempty"`
	CyclicPrefixUl                    CyclicPrefix                       `protobuf:"varint,3,opt,name=cyclic_prefix_ul,json=cyclicPrefixUl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_ul,omitempty"`
}

func (x *AdditionalSpecialSubframeInfo) Reset() {
	*x = AdditionalSpecialSubframeInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AdditionalSpecialSubframeInfo) ProtoMessage() {}

func (x *AdditionalSpecialSubframeInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[9]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AdditionalSpecialSubframeInfo.ProtoReflect.Descriptor instead.
func (*AdditionalSpecialSubframeInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{9}
}

func (x *AdditionalSpecialSubframeInfo) GetAdditionalSpecialSubframePatterns() AdditionalSpecialSubframe_Patterns {
	if x != nil {
		return x.AdditionalSpecialSubframePatterns
	}
	return AdditionalSpecialSubframe_UNKNOWN
}

func (x *AdditionalSpecialSubframeInfo) GetCyclicPrefixDl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixDl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

func (x *AdditionalSpecialSubframeInfo) GetCyclicPrefixUl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixUl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

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

	UlearFcn                uint32                `protobuf:"varint,1,opt,name=ulear_fcn,json=ulearFcn,proto3" json:"ulear_fcn,omitempty"`
	DlearFcn                uint32                `protobuf:"varint,2,opt,name=dlear_fcn,json=dlearFcn,proto3" json:"dlear_fcn,omitempty"`
	UlTransmissionBandwidth TransmissionBandwidth `protobuf:"varint,3,opt,name=ul_transmission_bandwidth,json=ulTransmissionBandwidth,proto3,enum=entities.TransmissionBandwidth" json:"ul_transmission_bandwidth,omitempty"`
	DlTransmissionBandwidth TransmissionBandwidth `protobuf:"varint,4,opt,name=dl_transmission_bandwidth,json=dlTransmissionBandwidth,proto3,enum=entities.TransmissionBandwidth" json:"dl_transmission_bandwidth,omitempty"`
}

func (x *FddInfo) Reset() {
	*x = FddInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*FddInfo) ProtoMessage() {}

func (x *FddInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[10]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use FddInfo.ProtoReflect.Descriptor instead.
func (*FddInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{10}
}

func (x *FddInfo) GetUlearFcn() uint32 {
	if x != nil {
		return x.UlearFcn
	}
	return 0
}

func (x *FddInfo) GetDlearFcn() uint32 {
	if x != nil {
		return x.DlearFcn
	}
	return 0
}

func (x *FddInfo) GetUlTransmissionBandwidth() TransmissionBandwidth {
	if x != nil {
		return x.UlTransmissionBandwidth
	}
	return TransmissionBandwidth_UNKNOWN_TRANSMISSION_BANDWIDTH
}

func (x *FddInfo) GetDlTransmissionBandwidth() TransmissionBandwidth {
	if x != nil {
		return x.DlTransmissionBandwidth
	}
	return TransmissionBandwidth_UNKNOWN_TRANSMISSION_BANDWIDTH
}

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

	SpecialSubframePatterns SpecialSubframe_Patterns `protobuf:"varint,1,opt,name=special_subframe_patterns,json=specialSubframePatterns,proto3,enum=entities.SpecialSubframe_Patterns" json:"special_subframe_patterns,omitempty"`
	CyclicPrefixDl          CyclicPrefix             `protobuf:"varint,2,opt,name=cyclic_prefix_dl,json=cyclicPrefixDl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_dl,omitempty"`
	CyclicPrefixUl          CyclicPrefix             `protobuf:"varint,3,opt,name=cyclic_prefix_ul,json=cyclicPrefixUl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_ul,omitempty"`
}

func (x *SpecialSubframeInfo) Reset() {
	*x = SpecialSubframeInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SpecialSubframeInfo) ProtoMessage() {}

func (x *SpecialSubframeInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[11]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SpecialSubframeInfo.ProtoReflect.Descriptor instead.
func (*SpecialSubframeInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{11}
}

func (x *SpecialSubframeInfo) GetSpecialSubframePatterns() SpecialSubframe_Patterns {
	if x != nil {
		return x.SpecialSubframePatterns
	}
	return SpecialSubframe_UNKNOWN
}

func (x *SpecialSubframeInfo) GetCyclicPrefixDl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixDl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

func (x *SpecialSubframeInfo) GetCyclicPrefixUl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixUl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

type SpecialSubframe struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *SpecialSubframe) Reset() {
	*x = SpecialSubframe{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SpecialSubframe) ProtoMessage() {}

func (x *SpecialSubframe) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[12]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SpecialSubframe.ProtoReflect.Descriptor instead.
func (*SpecialSubframe) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{12}
}

type AdditionalSpecialSubframe struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *AdditionalSpecialSubframe) Reset() {
	*x = AdditionalSpecialSubframe{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AdditionalSpecialSubframe) ProtoMessage() {}

func (x *AdditionalSpecialSubframe) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[13]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AdditionalSpecialSubframe.ProtoReflect.Descriptor instead.
func (*AdditionalSpecialSubframe) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{13}
}

type AdditionalSpecialSubframePatterns struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *AdditionalSpecialSubframePatterns) Reset() {
	*x = AdditionalSpecialSubframePatterns{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AdditionalSpecialSubframePatterns) ProtoMessage() {}

func (x *AdditionalSpecialSubframePatterns) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[14]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AdditionalSpecialSubframePatterns.ProtoReflect.Descriptor instead.
func (*AdditionalSpecialSubframePatterns) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{14}
}

var File_enb_proto protoreflect.FileDescriptor

var file_enb_proto_rawDesc = []byte{
	0x0a, 0x09, 0x65, 0x6e, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x65, 0x6e, 0x74,
	0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x21, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x92, 0x01, 0x0a, 0x03, 0x45, 0x6e, 0x62,
	0x12, 0x2c, 0x0a, 0x08, 0x65, 0x6e, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x11, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x45, 0x6e,
	0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3b,
	0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e,
	0x53, 0x65, 0x72, 0x76, 0x65, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b,
	0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x67,
	0x75, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
	0x09, 0x52, 0x0a, 0x67, 0x75, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x73, 0x22, 0xc8, 0x07,
	0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f,
	0x12, 0x10, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70,
	0x63, 0x69, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74,
	0x61, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x63, 0x12, 0x27, 0x0a,
	0x0f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x6d, 0x6e, 0x73,
	0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73,
	0x74, 0x50, 0x6c, 0x6d, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65,
	0x5f, 0x65, 0x75, 0x74, 0x72, 0x61, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x68, 0x6f,
	0x69, 0x63, 0x65, 0x45, 0x55, 0x54, 0x52, 0x41, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0f, 0x63, 0x68,
	0x6f, 0x69, 0x63, 0x65, 0x45, 0x75, 0x74, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x33, 0x0a,
	0x0a, 0x65, 0x75, 0x74, 0x72, 0x61, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
	0x0e, 0x32, 0x14, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x45, 0x75, 0x74,
	0x72, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x65, 0x75, 0x74, 0x72, 0x61, 0x4d, 0x6f,
	0x64, 0x65, 0x12, 0x55, 0x0a, 0x17, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f,
	0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x07, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x4e,
	0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x50, 0x6f,
	0x72, 0x74, 0x73, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x6e, 0x74,
	0x65, 0x6e, 0x6e, 0x61, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x13, 0x70, 0x72, 0x61,
	0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
	0x73, 0x2e, 0x50, 0x72, 0x61, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x70, 0x72, 0x61, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x14, 0x6d, 0x62, 0x73, 0x66,
	0x6e, 0x5f, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73,
	0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
	0x73, 0x2e, 0x4d, 0x62, 0x73, 0x66, 0x6e, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x52,
	0x12, 0x6d, 0x62, 0x73, 0x66, 0x6e, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e,
	0x66, 0x6f, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x63, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x73, 0x67, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x1c, 0x6d, 0x62,
	0x6d, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x61, 0x5f,
	0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09,
	0x52, 0x19, 0x6d, 0x62, 0x6d, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x72, 0x65,
	0x61, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6d,
	0x75, 0x6c, 0x74, 0x69, 0x62, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x0c,
	0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x62, 0x61, 0x6e, 0x64, 0x49,
	0x6e, 0x66, 0x6f, 0x73, 0x12, 0x64, 0x0a, 0x1c, 0x66, 0x72, 0x65, 0x71, 0x5f, 0x62, 0x61, 0x6e,
	0x64, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6f,
	0x72, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x65, 0x6e, 0x74,
	0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x46, 0x72, 0x65, 0x71, 0x42, 0x61, 0x6e, 0x64, 0x49, 0x6e,
	0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52,
	0x19, 0x66, 0x72, 0x65, 0x71, 0x42, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74,
	0x6f, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x4e, 0x0a, 0x14, 0x62, 0x61,
	0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x5f,
	0x73, 0x69, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74,
	0x69, 0x65, 0x73, 0x2e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x65, 0x64,
	0x75, 0x63, 0x65, 0x64, 0x53, 0x49, 0x52, 0x12, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74,
	0x68, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x69, 0x12, 0x47, 0x0a, 0x0f, 0x6e, 0x65,
	0x69, 0x67, 0x68, 0x62, 0x6f, 0x75, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x0f, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x4e,
	0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x75, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x75, 0x72, 0x49, 0x6e,
	0x66, 0x6f, 0x73, 0x12, 0x63, 0x0a, 0x1b, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74,
	0x69, 0x65, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x65,
	0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x19, 0x61,
	0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66,
	0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5b, 0x0a, 0x0f, 0x43, 0x68, 0x6f, 0x69,
	0x63, 0x65, 0x45, 0x55, 0x54, 0x52, 0x41, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x03, 0x66,
	0x64, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74,
	0x69, 0x65, 0x73, 0x2e, 0x46, 0x64, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x66, 0x64, 0x64,
	0x12, 0x23, 0x0a, 0x03, 0x74, 0x64, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
	0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x54, 0x64, 0x64, 0x49, 0x6e, 0x66, 0x6f,
	0x52, 0x03, 0x74, 0x64, 0x64, 0x22, 0x2e, 0x0a, 0x05, 0x45, 0x75, 0x74, 0x72, 0x61, 0x22, 0x25,
	0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57,
	0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x44, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03,
	0x54, 0x44, 0x44, 0x10, 0x02, 0x22, 0x67, 0x0a, 0x14, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f,
	0x75, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a,
	0x04, 0x65, 0x63, 0x67, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x63, 0x67,
	0x69, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03,
	0x70, 0x63, 0x69, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x61, 0x72, 0x5f, 0x66, 0x63, 0x6e, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x65, 0x61, 0x72, 0x46, 0x63, 0x6e, 0x12, 0x10, 0x0a, 0x03,
	0x74, 0x61, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x63, 0x22, 0xc6,
	0x02, 0x0a, 0x0d, 0x4d, 0x62, 0x73, 0x66, 0x6e, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65,
	0x12, 0x66, 0x0a, 0x1c, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x61,
	0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
	0x73, 0x2e, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f,
	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, 0x1a, 0x72, 0x61,
	0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x40, 0x0a, 0x1c, 0x72, 0x61, 0x64, 0x69,
	0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1a,
	0x72, 0x61, 0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x73, 0x75,
	0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d,
	0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x18, 0x73,
	0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e,
	0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d,
	0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52,
	0x16, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xad, 0x02, 0x0a, 0x12, 0x50, 0x72, 0x61, 0x63,
	0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e,
	0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f,
	0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x6f, 0x6f,
	0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4d,
	0x0a, 0x23, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x20, 0x7a, 0x65, 0x72,
	0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5a, 0x6f, 0x6e, 0x65,
	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a,
	0x0f, 0x68, 0x69, 0x67, 0x68, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x61, 0x67,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x69, 0x67, 0x68, 0x53, 0x70, 0x65, 0x65,
	0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x61, 0x63, 0x68, 0x5f, 0x66,
	0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x70, 0x72, 0x61, 0x63, 0x68, 0x46, 0x72, 0x65, 0x71,
	0x75, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x3a, 0x0a, 0x19, 0x70,
	0x72, 0x61, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17,
	0x70, 0x72, 0x61, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x9d, 0x04, 0x0a, 0x07, 0x54, 0x64, 0x64, 0x49,
	0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x61, 0x72, 0x5f, 0x66, 0x63, 0x6e, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x65, 0x61, 0x72, 0x46, 0x63, 0x6e, 0x12, 0x56, 0x0a, 0x16,
	0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x61, 0x6e,
	0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x65,
	0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73,
	0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x15, 0x74,
	0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77,
	0x69, 0x64, 0x74, 0x68, 0x12, 0x4d, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65,
	0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62,
	0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
	0x12, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d,
	0x65, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x15, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x73,
	0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x53, 0x70,
	0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66,
	0x6f, 0x52, 0x13, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61,
	0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x70, 0x0a, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62,
	0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x27, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62,
	0x66, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x1d, 0x61, 0x64, 0x64, 0x69, 0x74,
	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66,
	0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x8c, 0x01, 0x0a, 0x2a, 0x61, 0x64, 0x64,
	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f,
	0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
	0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e,
	0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
	0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61,
	0x6d, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52,
	0x26, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69,
	0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
	0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xc8, 0x02, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62,
	0x66, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e,
	0x66, 0x6f, 0x12, 0x99, 0x01, 0x0a, 0x2e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61,
	0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65,
	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x65, 0x6e,
	0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65,
	0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
	0x6f, 0x6e, 0x52, 0x2a, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70,
	0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x74,
	0x74, 0x65, 0x72, 0x6e, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x40,
	0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f,
	0x64, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74,
	0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78,
	0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x44, 0x6c,
	0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69,
	0x78, 0x5f, 0x75, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x65, 0x6e, 0x74,
	0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66,
	0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78,
	0x55, 0x6c, 0x22, 0xa2, 0x02, 0x0a, 0x1d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65,
	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x7d, 0x0a, 0x24, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
	0x61, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x66, 0x72,
	0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x41, 0x64,
	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53,
	0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73,
	0x52, 0x21, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63,
	0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65,
	0x72, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x72,
	0x65, 0x66, 0x69, 0x78, 0x5f, 0x64, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e,
	0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50,
	0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65,
	0x66, 0x69, 0x78, 0x44, 0x6c, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f,
	0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x75, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x16, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69,
	0x63, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50,
	0x72, 0x65, 0x66, 0x69, 0x78, 0x55, 0x6c, 0x22, 0xfd, 0x01, 0x0a, 0x07, 0x46, 0x64, 0x64, 0x49,
	0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x66, 0x63, 0x6e,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x75, 0x6c, 0x65, 0x61, 0x72, 0x46, 0x63, 0x6e,
	0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x66, 0x63, 0x6e, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x6c, 0x65, 0x61, 0x72, 0x46, 0x63, 0x6e, 0x12, 0x5b, 0x0a,
	0x19, 0x75, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e,
	0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x1f, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e,
	0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74,
	0x68, 0x52, 0x17, 0x75, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
	0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x5b, 0x0a, 0x19, 0x64, 0x6c,
	0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x61,
	0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e,
	0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69,
	0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x17,
	0x64, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61,
	0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0xf9, 0x01, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x63,
	0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12,
	0x5e, 0x0a, 0x19, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x66, 0x72,
	0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x22, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x53, 0x70,
	0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x50, 0x61,
	0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x52, 0x17, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53,
	0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12,
	0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
	0x5f, 0x64, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x65, 0x6e, 0x74, 0x69,
	0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69,
	0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x44,
	0x6c, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x65, 0x66,
	0x69, 0x78, 0x5f, 0x75, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x65, 0x6e,
	0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65,
	0x66, 0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69,
	0x78, 0x55, 0x6c, 0x22, 0x84, 0x01, 0x0a, 0x0f, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53,
	0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x22, 0x71, 0x0a, 0x08, 0x50, 0x61, 0x74, 0x74, 0x65,
	0x72, 0x6e, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00,
	0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x30, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53,
	0x50, 0x31, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x32, 0x10, 0x03, 0x12, 0x08,
	0x0a, 0x04, 0x53, 0x53, 0x50, 0x33, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x34,
	0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x35, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04,
	0x53, 0x53, 0x50, 0x36, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x37, 0x10, 0x08,
	0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x38, 0x10, 0x09, 0x22, 0x98, 0x01, 0x0a, 0x19, 0x41,
	0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c,
	0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x22, 0x7b, 0x0a, 0x08, 0x50, 0x61, 0x74, 0x74,
	0x65, 0x72, 0x6e, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
	0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x30, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x53,
	0x53, 0x50, 0x31, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x32, 0x10, 0x03, 0x12,
	0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x33, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50,
	0x34, 0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x35, 0x10, 0x06, 0x12, 0x08, 0x0a,
	0x04, 0x53, 0x53, 0x50, 0x36, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x37, 0x10,
	0x08, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x38, 0x10, 0x09, 0x12, 0x08, 0x0a, 0x04, 0x53,
	0x53, 0x50, 0x39, 0x10, 0x0a, 0x22, 0x48, 0x0a, 0x21, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
	0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61,
	0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x22, 0x23, 0x0a, 0x09, 0x45, 0x78,
	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
	0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x53, 0x50, 0x31, 0x30, 0x10, 0x01, 0x2a,
	0x6b, 0x0a, 0x19, 0x46, 0x72, 0x65, 0x71, 0x42, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63,
	0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x28, 0x0a, 0x24,
	0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x5f, 0x42, 0x41, 0x4e,
	0x44, 0x5f, 0x49, 0x4e, 0x44, 0x49, 0x43, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x50, 0x52, 0x49, 0x4f,
	0x52, 0x49, 0x54, 0x59, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x52,
	0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x42,
	0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x45, 0x0a, 0x12,
	0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64,
	0x53, 0x49, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x41,
	0x4e, 0x44, 0x57, 0x49, 0x44, 0x54, 0x48, 0x5f, 0x52, 0x45, 0x44, 0x55, 0x43, 0x45, 0x44, 0x5f,
	0x53, 0x49, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45,
	0x44, 0x10, 0x01, 0x2a, 0x5d, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41,
	0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a,
	0x20, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x46, 0x52, 0x41, 0x4d,
	0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50,
	0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x4e, 0x45, 0x5f, 0x46, 0x52, 0x41, 0x4d, 0x45,
	0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x4f, 0x55, 0x52, 0x5f, 0x46, 0x52, 0x41, 0x4d, 0x45,
	0x10, 0x02, 0x2a, 0x78, 0x0a, 0x1a, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65,
	0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64,
	0x12, 0x28, 0x0a, 0x24, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x52, 0x41, 0x44, 0x49,
	0x4f, 0x46, 0x52, 0x41, 0x4d, 0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f,
	0x4e, 0x5f, 0x50, 0x45, 0x52, 0x49, 0x4f, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x31,
	0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x32, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x34,
	0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x38, 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x31,
	0x36, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x33, 0x32, 0x10, 0x06, 0x2a, 0x56, 0x0a, 0x14,
	0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x50,
	0x6f, 0x72, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x1f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f,
	0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x4f, 0x46, 0x5f, 0x41, 0x4e, 0x54, 0x45, 0x4e, 0x4e,
	0x41, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x53, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x31,
	0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x32, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x41,
	0x4e, 0x34, 0x10, 0x03, 0x2a, 0x65, 0x0a, 0x07, 0x45, 0x6e, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12,
	0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x4e, 0x42, 0x5f, 0x54,
	0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x41, 0x43, 0x52, 0x4f, 0x5f, 0x45,
	0x4e, 0x42, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x48, 0x4f, 0x4d, 0x45, 0x5f, 0x45, 0x4e, 0x42,
	0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x48, 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x41, 0x43, 0x52,
	0x4f, 0x5f, 0x45, 0x4e, 0x42, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x4e, 0x47, 0x5f,
	0x4d, 0x41, 0x43, 0x52, 0x4f, 0x5f, 0x45, 0x4e, 0x42, 0x10, 0x04, 0x2a, 0x74, 0x0a, 0x12, 0x53,
	0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e,
	0x74, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x55, 0x42,
	0x46, 0x52, 0x41, 0x4d, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x4d, 0x45, 0x4e, 0x54,
	0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x41, 0x30, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x53,
	0x41, 0x31, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x41, 0x32, 0x10, 0x03, 0x12, 0x07, 0x0a,
	0x03, 0x53, 0x41, 0x33, 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x41, 0x34, 0x10, 0x05, 0x12,
	0x07, 0x0a, 0x03, 0x53, 0x41, 0x35, 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x41, 0x36, 0x10,
	0x07, 0x2a, 0x43, 0x0a, 0x0c, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69,
	0x78, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x59, 0x43,
	0x4c, 0x49, 0x43, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06,
	0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x54, 0x45,
	0x4e, 0x44, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x80, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73,
	0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68,
	0x12, 0x22, 0x0a, 0x1e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e,
	0x53, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x57, 0x49, 0x44,
	0x54, 0x48, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x57, 0x36, 0x10, 0x01, 0x12, 0x08, 0x0a,
	0x04, 0x42, 0x57, 0x31, 0x35, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x57, 0x32, 0x35, 0x10,
	0x03, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x57, 0x35, 0x30, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x42,
	0x57, 0x37, 0x35, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x57, 0x31, 0x30, 0x30, 0x10, 0x06,
	0x12, 0x07, 0x0a, 0x03, 0x42, 0x57, 0x31, 0x10, 0x07, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x33,
}

var (
	file_enb_proto_rawDescOnce sync.Once
	file_enb_proto_rawDescData = file_enb_proto_rawDesc
)

func file_enb_proto_rawDescGZIP() []byte {
	file_enb_proto_rawDescOnce.Do(func() {
		file_enb_proto_rawDescData = protoimpl.X.CompressGZIP(file_enb_proto_rawDescData)
	})
	return file_enb_proto_rawDescData
}

var file_enb_proto_enumTypes = make([]protoimpl.EnumInfo, 13)
var file_enb_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
var file_enb_proto_goTypes = []interface{}{
	(FreqBandIndicatorPriority)(0),                   // 0: entities.FreqBandIndicatorPriority
	(BandwidthReducedSI)(0),                          // 1: entities.BandwidthReducedSI
	(SubframeAllocationType)(0),                      // 2: entities.SubframeAllocationType
	(RadioframeAllocationPeriod)(0),                  // 3: entities.RadioframeAllocationPeriod
	(NumberOfAntennaPorts)(0),                        // 4: entities.NumberOfAntennaPorts
	(EnbType)(0),                                     // 5: entities.EnbType
	(SubframeAssignment)(0),                          // 6: entities.SubframeAssignment
	(CyclicPrefix)(0),                                // 7: entities.CyclicPrefix
	(TransmissionBandwidth)(0),                       // 8: entities.TransmissionBandwidth
	(Eutra_Mode)(0),                                  // 9: entities.Eutra.Mode
	(SpecialSubframe_Patterns)(0),                    // 10: entities.SpecialSubframe.Patterns
	(AdditionalSpecialSubframe_Patterns)(0),          // 11: entities.AdditionalSpecialSubframe.Patterns
	(AdditionalSpecialSubframePatterns_Extension)(0), // 12: entities.AdditionalSpecialSubframePatterns.Extension
	(*Enb)(nil),                                      // 13: entities.Enb
	(*ServedCellInfo)(nil),                           // 14: entities.ServedCellInfo
	(*ChoiceEUTRAMode)(nil),                          // 15: entities.ChoiceEUTRAMode
	(*Eutra)(nil),                                    // 16: entities.Eutra
	(*NeighbourInformation)(nil),                     // 17: entities.NeighbourInformation
	(*MbsfnSubframe)(nil),                            // 18: entities.MbsfnSubframe
	(*PrachConfiguration)(nil),                       // 19: entities.PrachConfiguration
	(*TddInfo)(nil),                                  // 20: entities.TddInfo
	(*AdditionalSpecialSubframeExtensionInfo)(nil),   // 21: entities.AdditionalSpecialSubframeExtensionInfo
	(*AdditionalSpecialSubframeInfo)(nil),            // 22: entities.AdditionalSpecialSubframeInfo
	(*FddInfo)(nil),                                  // 23: entities.FddInfo
	(*SpecialSubframeInfo)(nil),                      // 24: entities.SpecialSubframeInfo
	(*SpecialSubframe)(nil),                          // 25: entities.SpecialSubframe
	(*AdditionalSpecialSubframe)(nil),                // 26: entities.AdditionalSpecialSubframe
	(*AdditionalSpecialSubframePatterns)(nil),        // 27: entities.AdditionalSpecialSubframePatterns
	(*AdditionalCellInformation)(nil),                // 28: entities.AdditionalCellInformation
}
var file_enb_proto_depIdxs = []int32{
	5,  // 0: entities.Enb.enb_type:type_name -> entities.EnbType
	14, // 1: entities.Enb.served_cells:type_name -> entities.ServedCellInfo
	15, // 2: entities.ServedCellInfo.choice_eutra_mode:type_name -> entities.ChoiceEUTRAMode
	9,  // 3: entities.ServedCellInfo.eutra_mode:type_name -> entities.Eutra.Mode
	4,  // 4: entities.ServedCellInfo.number_of_antenna_ports:type_name -> entities.NumberOfAntennaPorts
	19, // 5: entities.ServedCellInfo.prach_configuration:type_name -> entities.PrachConfiguration
	18, // 6: entities.ServedCellInfo.mbsfn_subframe_infos:type_name -> entities.MbsfnSubframe
	0,  // 7: entities.ServedCellInfo.freq_band_indicator_priority:type_name -> entities.FreqBandIndicatorPriority
	1,  // 8: entities.ServedCellInfo.bandwidth_reduced_si:type_name -> entities.BandwidthReducedSI
	17, // 9: entities.ServedCellInfo.neighbour_infos:type_name -> entities.NeighbourInformation
	28, // 10: entities.ServedCellInfo.additional_cell_information:type_name -> entities.AdditionalCellInformation
	23, // 11: entities.ChoiceEUTRAMode.fdd:type_name -> entities.FddInfo
	20, // 12: entities.ChoiceEUTRAMode.tdd:type_name -> entities.TddInfo
	3,  // 13: entities.MbsfnSubframe.radioframe_allocation_period:type_name -> entities.RadioframeAllocationPeriod
	2,  // 14: entities.MbsfnSubframe.subframe_allocation_type:type_name -> entities.SubframeAllocationType
	8,  // 15: entities.TddInfo.transmission_bandwidth:type_name -> entities.TransmissionBandwidth
	6,  // 16: entities.TddInfo.subframe_assignment:type_name -> entities.SubframeAssignment
	24, // 17: entities.TddInfo.special_subframe_info:type_name -> entities.SpecialSubframeInfo
	22, // 18: entities.TddInfo.additional_special_subframe_info:type_name -> entities.AdditionalSpecialSubframeInfo
	21, // 19: entities.TddInfo.additional_special_subframe_extension_info:type_name -> entities.AdditionalSpecialSubframeExtensionInfo
	12, // 20: entities.AdditionalSpecialSubframeExtensionInfo.additional_special_subframe_patterns_extension:type_name -> entities.AdditionalSpecialSubframePatterns.Extension
	7,  // 21: entities.AdditionalSpecialSubframeExtensionInfo.cyclic_prefix_dl:type_name -> entities.CyclicPrefix
	7,  // 22: entities.AdditionalSpecialSubframeExtensionInfo.cyclic_prefix_ul:type_name -> entities.CyclicPrefix
	11, // 23: entities.AdditionalSpecialSubframeInfo.additional_special_subframe_patterns:type_name -> entities.AdditionalSpecialSubframe.Patterns
	7,  // 24: entities.AdditionalSpecialSubframeInfo.cyclic_prefix_dl:type_name -> entities.CyclicPrefix
	7,  // 25: entities.AdditionalSpecialSubframeInfo.cyclic_prefix_ul:type_name -> entities.CyclicPrefix
	8,  // 26: entities.FddInfo.ul_transmission_bandwidth:type_name -> entities.TransmissionBandwidth
	8,  // 27: entities.FddInfo.dl_transmission_bandwidth:type_name -> entities.TransmissionBandwidth
	10, // 28: entities.SpecialSubframeInfo.special_subframe_patterns:type_name -> entities.SpecialSubframe.Patterns
	7,  // 29: entities.SpecialSubframeInfo.cyclic_prefix_dl:type_name -> entities.CyclicPrefix
	7,  // 30: entities.SpecialSubframeInfo.cyclic_prefix_ul:type_name -> entities.CyclicPrefix
	31, // [31:31] is the sub-list for method output_type
	31, // [31:31] is the sub-list for method input_type
	31, // [31:31] is the sub-list for extension type_name
	31, // [31:31] is the sub-list for extension extendee
	0,  // [0:31] is the sub-list for field type_name
}

func init() { file_enb_proto_init() }
func file_enb_proto_init() {
	if File_enb_proto != nil {
		return
	}
	file_additional_cell_information_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_enb_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Enb); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ServedCellInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ChoiceEUTRAMode); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Eutra); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*NeighbourInformation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MbsfnSubframe); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PrachConfiguration); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TddInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AdditionalSpecialSubframeExtensionInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AdditionalSpecialSubframeInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FddInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SpecialSubframeInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SpecialSubframe); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AdditionalSpecialSubframe); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AdditionalSpecialSubframePatterns); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_enb_proto_rawDesc,
			NumEnums:      13,
			NumMessages:   15,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_enb_proto_goTypes,
		DependencyIndexes: file_enb_proto_depIdxs,
		EnumInfos:         file_enb_proto_enumTypes,
		MessageInfos:      file_enb_proto_msgTypes,
	}.Build()
	File_enb_proto = out.File
	file_enb_proto_rawDesc = nil
	file_enb_proto_goTypes = nil
	file_enb_proto_depIdxs = nil
}
