/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "HNBAP-IEs"
 * 	found in "../../asn1/hnbap/HNBAP-IEs.asn"
 * 	`asn1c -gen-PER`
 */

#include "NeighbourCellIdentityList.h"

static asn_per_constraints_t asn_PER_type_NeighbourCellIdentityList_constr_1 GCC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 8,  8,  0l,  128l }	/* (SIZE(0..128)) */,
	0, 0	/* No PER value map */
};
static asn_TYPE_member_t asn_MBR_NeighbourCellIdentityList_1[] = {
	{ ATF_POINTER, 0, 0,
		-1 /* Ambiguous tag (CHOICE?) */,
		0,
		&asn_DEF_NeighbourIdentity,
		0,	/* Defer constraints checking to the member type */
		0,	/* No PER visible constraints */
		0,
		""
		},
};
static const ber_tlv_tag_t asn_DEF_NeighbourCellIdentityList_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn_SET_OF_specifics_t asn_SPC_NeighbourCellIdentityList_specs_1 = {
	sizeof(struct NeighbourCellIdentityList),
	offsetof(struct NeighbourCellIdentityList, _asn_ctx),
	2,	/* XER encoding is XMLValueList */
};
asn_TYPE_descriptor_t asn_DEF_NeighbourCellIdentityList = {
	"NeighbourCellIdentityList",
	"NeighbourCellIdentityList",
	SEQUENCE_OF_free,
	SEQUENCE_OF_print,
	SEQUENCE_OF_constraint,
	SEQUENCE_OF_decode_ber,
	SEQUENCE_OF_encode_der,
	SEQUENCE_OF_decode_xer,
	SEQUENCE_OF_encode_xer,
	SEQUENCE_OF_decode_uper,
	SEQUENCE_OF_encode_uper,
	SEQUENCE_OF_decode_aper,
	SEQUENCE_OF_encode_aper,
	0,	/* Use generic outmost tag fetcher */
	asn_DEF_NeighbourCellIdentityList_tags_1,
	sizeof(asn_DEF_NeighbourCellIdentityList_tags_1)
		/sizeof(asn_DEF_NeighbourCellIdentityList_tags_1[0]), /* 1 */
	asn_DEF_NeighbourCellIdentityList_tags_1,	/* Same as above */
	sizeof(asn_DEF_NeighbourCellIdentityList_tags_1)
		/sizeof(asn_DEF_NeighbourCellIdentityList_tags_1[0]), /* 1 */
	&asn_PER_type_NeighbourCellIdentityList_constr_1,
	asn_MBR_NeighbourCellIdentityList_1,
	1,	/* Single element */
	&asn_SPC_NeighbourCellIdentityList_specs_1	/* Additional specs */
};

