/*
 * 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	_ConcurrentWarningMessageIndicator_H_
#define	_ConcurrentWarningMessageIndicator_H_


#include <asn_application.h>

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

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum ConcurrentWarningMessageIndicator {
	ConcurrentWarningMessageIndicator_true	= 0
} e_ConcurrentWarningMessageIndicator;

/* ConcurrentWarningMessageIndicator */
typedef long	 ConcurrentWarningMessageIndicator_t;

/* Implementation */
extern asn_per_constraints_t asn_PER_type_ConcurrentWarningMessageIndicator_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_ConcurrentWarningMessageIndicator;
extern const asn_INTEGER_specifics_t asn_SPC_ConcurrentWarningMessageIndicator_specs_1;
asn_struct_free_f ConcurrentWarningMessageIndicator_free;
asn_struct_print_f ConcurrentWarningMessageIndicator_print;
asn_constr_check_f ConcurrentWarningMessageIndicator_constraint;
ber_type_decoder_f ConcurrentWarningMessageIndicator_decode_ber;
der_type_encoder_f ConcurrentWarningMessageIndicator_encode_der;
xer_type_decoder_f ConcurrentWarningMessageIndicator_decode_xer;
xer_type_encoder_f ConcurrentWarningMessageIndicator_encode_xer;
oer_type_decoder_f ConcurrentWarningMessageIndicator_decode_oer;
oer_type_encoder_f ConcurrentWarningMessageIndicator_encode_oer;
per_type_decoder_f ConcurrentWarningMessageIndicator_decode_uper;
per_type_encoder_f ConcurrentWarningMessageIndicator_encode_uper;
per_type_decoder_f ConcurrentWarningMessageIndicator_decode_aper;
per_type_encoder_f ConcurrentWarningMessageIndicator_encode_aper;

#ifdef __cplusplus
}
#endif

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