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


#include <asn_application.h>

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

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum ReportAmountMDT {
	ReportAmountMDT_r1	= 0,
	ReportAmountMDT_r2	= 1,
	ReportAmountMDT_r4	= 2,
	ReportAmountMDT_r8	= 3,
	ReportAmountMDT_r16	= 4,
	ReportAmountMDT_r32	= 5,
	ReportAmountMDT_r64	= 6,
	ReportAmountMDT_rinfinity	= 7
} e_ReportAmountMDT;

/* ReportAmountMDT */
typedef long	 ReportAmountMDT_t;

/* Implementation */
extern asn_per_constraints_t asn_PER_type_ReportAmountMDT_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_ReportAmountMDT;
extern const asn_INTEGER_specifics_t asn_SPC_ReportAmountMDT_specs_1;
asn_struct_free_f ReportAmountMDT_free;
asn_struct_print_f ReportAmountMDT_print;
asn_constr_check_f ReportAmountMDT_constraint;
ber_type_decoder_f ReportAmountMDT_decode_ber;
der_type_encoder_f ReportAmountMDT_encode_der;
xer_type_decoder_f ReportAmountMDT_decode_xer;
xer_type_encoder_f ReportAmountMDT_encode_xer;
oer_type_decoder_f ReportAmountMDT_decode_oer;
oer_type_encoder_f ReportAmountMDT_encode_oer;
per_type_decoder_f ReportAmountMDT_decode_uper;
per_type_encoder_f ReportAmountMDT_encode_uper;
per_type_decoder_f ReportAmountMDT_decode_aper;
per_type_encoder_f ReportAmountMDT_encode_aper;

#ifdef __cplusplus
}
#endif

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