/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "S1AP-IEs"
 * 	found in "./asn1c/S1AP-IEs.asn"
 * 	`asn1c -fcompound-names -fno-include-deps -gen-PER -findirect-choice -pdu=S1AP-PDU`
 */

#ifndef	_PendingDataIndication_H_
#define	_PendingDataIndication_H_


#include <asn_application.h>

/* Including external dependencies */
#include <NativeEnumerated.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum PendingDataIndication {
	PendingDataIndication_true	= 0
	/*
	 * Enumeration is extensible
	 */
} e_PendingDataIndication;

/* PendingDataIndication */
typedef long	 PendingDataIndication_t;

/* Implementation */
extern asn_per_constraints_t asn_PER_type_PendingDataIndication_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_PendingDataIndication;
extern const asn_INTEGER_specifics_t asn_SPC_PendingDataIndication_specs_1;
asn_struct_free_f PendingDataIndication_free;
asn_struct_print_f PendingDataIndication_print;
asn_constr_check_f PendingDataIndication_constraint;
ber_type_decoder_f PendingDataIndication_decode_ber;
der_type_encoder_f PendingDataIndication_encode_der;
xer_type_decoder_f PendingDataIndication_decode_xer;
xer_type_encoder_f PendingDataIndication_encode_xer;
oer_type_decoder_f PendingDataIndication_decode_oer;
oer_type_encoder_f PendingDataIndication_encode_oer;
per_type_decoder_f PendingDataIndication_decode_uper;
per_type_encoder_f PendingDataIndication_encode_uper;
per_type_decoder_f PendingDataIndication_decode_aper;
per_type_encoder_f PendingDataIndication_encode_aper;

#ifdef __cplusplus
}
#endif

#endif	/* _PendingDataIndication_H_ */
#include <asn_internal.h>
