1 //! \file
2 /*
3 **  Copyright (C) - Triton
4 **
5 **  This program is under the terms of the Apache License 2.0.
6 */
7 
8 #ifndef TRITON_ARM32SPECIFICATIONS_H
9 #define TRITON_ARM32SPECIFICATIONS_H
10 
11 #include <unordered_map>
12 
13 #include <triton/archEnums.hpp>
14 #include <triton/architecture.hpp>
15 #include <triton/dllexport.hpp>
16 #include <triton/register.hpp>
17 
18 
19 
20 //! The Triton namespace
21 namespace triton {
22 /*!
23  *  \addtogroup triton
24  *  @{
25  */
26 
27   //! The Architecture namespace
28   namespace arch {
29   /*!
30    *  \ingroup triton
31    *  \addtogroup arch
32    *  @{
33    */
34 
35     //! The ARM namespace
36     namespace arm {
37     /*!
38      *  \ingroup arch
39      *  \addtogroup arm
40      *  @{
41      */
42 
43       //! The arm32 namespace
44       namespace arm32 {
45       /*!
46        *  \ingroup arm
47        *  \addtogroup arm32
48        *  @{
49        */
50 
51         //! \class Arm32Specifications
52         /*! \brief The Arm32Specifications class defines specifications about the Arm32 CPU */
53         class Arm32Specifications {
54           protected:
55             //! List of registers specification available for this architecture.
56             std::unordered_map<triton::arch::register_e, const triton::arch::Register> registers_;
57 
58           public:
59             //! Constructor.
60             TRITON_EXPORT Arm32Specifications(triton::arch::architecture_e);
61 
62             //! Converts a capstone's register id to a triton's register id.
63             TRITON_EXPORT triton::arch::register_e capstoneRegisterToTritonRegister(triton::uint32 id) const;
64 
65             //! Converts a capstone's shift id to a triton's shift id.
66             TRITON_EXPORT triton::arch::arm::shift_e capstoneShiftToTritonShift(triton::uint32 id) const;
67 
68             //! Converts a capstone's condition id to a triton's condition id.
69             TRITON_EXPORT triton::arch::arm::condition_e capstoneConditionToTritonCondition(triton::uint32 id) const;
70 
71             //! Converts a capstone's instruction id to a triton's instruction id.
72             TRITON_EXPORT triton::uint32 capstoneInstructionToTritonInstruction(triton::uint32 id) const;
73         };
74 
75         //! The list of opcodes.
76         enum instruction_e {
77           ID_INS_INVALID = 0, //!< invalid
78 
79           ID_INS_ADC, //!< adc
80           ID_INS_ADD, //!< add
81           ID_INS_ADR, //!< adr
82           ID_INS_AESD, //!< aesd
83           ID_INS_AESE, //!< aese
84           ID_INS_AESIMC, //!< aesimc
85           ID_INS_AESMC, //!< aesmc
86           ID_INS_AND, //!< and
87           ID_INS_BFC, //!< bfc
88           ID_INS_BFI, //!< bfi
89           ID_INS_BIC, //!< bic
90           ID_INS_BKPT, //!< bkpt
91           ID_INS_BL, //!< bl
92           ID_INS_BLX, //!< blx
93           ID_INS_BX, //!< bx
94           ID_INS_BXJ, //!< bxj
95           ID_INS_B, //!< b
96           ID_INS_CDP, //!< cdp
97           ID_INS_CDP2, //!< cdp2
98           ID_INS_CLREX, //!< clrex
99           ID_INS_CLZ, //!< clz
100           ID_INS_CMN, //!< cmn
101           ID_INS_CMP, //!< cmp
102           ID_INS_CPS, //!< cps
103           ID_INS_CRC32B, //!< crc32b
104           ID_INS_CRC32CB, //!< crc32cb
105           ID_INS_CRC32CH, //!< crc32ch
106           ID_INS_CRC32CW, //!< crc32cw
107           ID_INS_CRC32H, //!< crc32h
108           ID_INS_CRC32W, //!< crc32w
109           ID_INS_DBG, //!< dbg
110           ID_INS_DMB, //!< dmb
111           ID_INS_DSB, //!< dsb
112           ID_INS_EOR, //!< eor
113           ID_INS_ERET, //!< eret
114           ID_INS_VMOV, //!< vmov
115           ID_INS_FLDMDBX, //!< fldmdbx
116           ID_INS_FLDMIAX, //!< fldmiax
117           ID_INS_VMRS, //!< vmrs
118           ID_INS_FSTMDBX, //!< fstmdbx
119           ID_INS_FSTMIAX, //!< fstmiax
120           ID_INS_HINT, //!< hint
121           ID_INS_HLT, //!< hlt
122           ID_INS_HVC, //!< hvc
123           ID_INS_ISB, //!< isb
124           ID_INS_LDA, //!< lda
125           ID_INS_LDAB, //!< ldab
126           ID_INS_LDAEX, //!< ldaex
127           ID_INS_LDAEXB, //!< ldaexb
128           ID_INS_LDAEXD, //!< ldaexd
129           ID_INS_LDAEXH, //!< ldaexh
130           ID_INS_LDAH, //!< ldah
131           ID_INS_LDC2L, //!< ldc2l
132           ID_INS_LDC2, //!< ldc2
133           ID_INS_LDCL, //!< ldcl
134           ID_INS_LDC, //!< ldc
135           ID_INS_LDMDA, //!< ldmda
136           ID_INS_LDMDB, //!< ldmdb
137           ID_INS_LDM, //!< ldm
138           ID_INS_LDMIB, //!< ldmib
139           ID_INS_LDRBT, //!< ldrbt
140           ID_INS_LDRB, //!< ldrb
141           ID_INS_LDRD, //!< ldrd
142           ID_INS_LDREX, //!< ldrex
143           ID_INS_LDREXB, //!< ldrexb
144           ID_INS_LDREXD, //!< ldrexd
145           ID_INS_LDREXH, //!< ldrexh
146           ID_INS_LDRH, //!< ldrh
147           ID_INS_LDRHT, //!< ldrht
148           ID_INS_LDRSB, //!< ldrsb
149           ID_INS_LDRSBT, //!< ldrsbt
150           ID_INS_LDRSH, //!< ldrsh
151           ID_INS_LDRSHT, //!< ldrsht
152           ID_INS_LDRT, //!< ldrt
153           ID_INS_LDR, //!< ldr
154           ID_INS_MCR, //!< mcr
155           ID_INS_MCR2, //!< mcr2
156           ID_INS_MCRR, //!< mcrr
157           ID_INS_MCRR2, //!< mcrr2
158           ID_INS_MLA, //!< mla
159           ID_INS_MLS, //!< mls
160           ID_INS_MOV, //!< mov
161           ID_INS_MOVT, //!< movt
162           ID_INS_MOVW, //!< movw
163           ID_INS_MRC, //!< mrc
164           ID_INS_MRC2, //!< mrc2
165           ID_INS_MRRC, //!< mrrc
166           ID_INS_MRRC2, //!< mrrc2
167           ID_INS_MRS, //!< mrs
168           ID_INS_MSR, //!< msr
169           ID_INS_MUL, //!< mul
170           ID_INS_MVN, //!< mvn
171           ID_INS_ORR, //!< orr
172           ID_INS_PKHBT, //!< pkhbt
173           ID_INS_PKHTB, //!< pkhtb
174           ID_INS_PLDW, //!< pldw
175           ID_INS_PLD, //!< pld
176           ID_INS_PLI, //!< pli
177           ID_INS_QADD, //!< qadd
178           ID_INS_QADD16, //!< qadd16
179           ID_INS_QADD8, //!< qadd8
180           ID_INS_QASX, //!< qasx
181           ID_INS_QDADD, //!< qdadd
182           ID_INS_QDSUB, //!< qdsub
183           ID_INS_QSAX, //!< qsax
184           ID_INS_QSUB, //!< qsub
185           ID_INS_QSUB16, //!< qsub16
186           ID_INS_QSUB8, //!< qsub8
187           ID_INS_RBIT, //!< rbit
188           ID_INS_REV, //!< rev
189           ID_INS_REV16, //!< rev16
190           ID_INS_REVSH, //!< revsh
191           ID_INS_RFEDA, //!< rfeda
192           ID_INS_RFEDB, //!< rfedb
193           ID_INS_RFEIA, //!< rfeia
194           ID_INS_RFEIB, //!< rfeib
195           ID_INS_RSB, //!< rsb
196           ID_INS_RSC, //!< rsc
197           ID_INS_SADD16, //!< sadd16
198           ID_INS_SADD8, //!< sadd8
199           ID_INS_SASX, //!< sasx
200           ID_INS_SBC, //!< sbc
201           ID_INS_SBFX, //!< sbfx
202           ID_INS_SDIV, //!< sdiv
203           ID_INS_SEL, //!< sel
204           ID_INS_SETEND, //!< setend
205           ID_INS_SHA1C, //!< sha1c
206           ID_INS_SHA1H, //!< sha1h
207           ID_INS_SHA1M, //!< sha1m
208           ID_INS_SHA1P, //!< sha1p
209           ID_INS_SHA1SU0, //!< sha1su0
210           ID_INS_SHA1SU1, //!< sha1su1
211           ID_INS_SHA256H, //!< sha256h
212           ID_INS_SHA256H2, //!< sha256h2
213           ID_INS_SHA256SU0, //!< sha256su0
214           ID_INS_SHA256SU1, //!< sha256su1
215           ID_INS_SHADD16, //!< shadd16
216           ID_INS_SHADD8, //!< shadd8
217           ID_INS_SHASX, //!< shasx
218           ID_INS_SHSAX, //!< shsax
219           ID_INS_SHSUB16, //!< shsub16
220           ID_INS_SHSUB8, //!< shsub8
221           ID_INS_SMC, //!< smc
222           ID_INS_SMLABB, //!< smlabb
223           ID_INS_SMLABT, //!< smlabt
224           ID_INS_SMLAD, //!< smlad
225           ID_INS_SMLADX, //!< smladx
226           ID_INS_SMLAL, //!< smlal
227           ID_INS_SMLALBB, //!< smlalbb
228           ID_INS_SMLALBT, //!< smlalbt
229           ID_INS_SMLALD, //!< smlald
230           ID_INS_SMLALDX, //!< smlaldx
231           ID_INS_SMLALTB, //!< smlaltb
232           ID_INS_SMLALTT, //!< smlaltt
233           ID_INS_SMLATB, //!< smlatb
234           ID_INS_SMLATT, //!< smlatt
235           ID_INS_SMLAWB, //!< smlawb
236           ID_INS_SMLAWT, //!< smlawt
237           ID_INS_SMLSD, //!< smlsd
238           ID_INS_SMLSDX, //!< smlsdx
239           ID_INS_SMLSLD, //!< smlsld
240           ID_INS_SMLSLDX, //!< smlsldx
241           ID_INS_SMMLA, //!< smmla
242           ID_INS_SMMLAR, //!< smmlar
243           ID_INS_SMMLS, //!< smmls
244           ID_INS_SMMLSR, //!< smmlsr
245           ID_INS_SMMUL, //!< smmul
246           ID_INS_SMMULR, //!< smmulr
247           ID_INS_SMUAD, //!< smuad
248           ID_INS_SMUADX, //!< smuadx
249           ID_INS_SMULBB, //!< smulbb
250           ID_INS_SMULBT, //!< smulbt
251           ID_INS_SMULL, //!< smull
252           ID_INS_SMULTB, //!< smultb
253           ID_INS_SMULTT, //!< smultt
254           ID_INS_SMULWB, //!< smulwb
255           ID_INS_SMULWT, //!< smulwt
256           ID_INS_SMUSD, //!< smusd
257           ID_INS_SMUSDX, //!< smusdx
258           ID_INS_SRSDA, //!< srsda
259           ID_INS_SRSDB, //!< srsdb
260           ID_INS_SRSIA, //!< srsia
261           ID_INS_SRSIB, //!< srsib
262           ID_INS_SSAT, //!< ssat
263           ID_INS_SSAT16, //!< ssat16
264           ID_INS_SSAX, //!< ssax
265           ID_INS_SSUB16, //!< ssub16
266           ID_INS_SSUB8, //!< ssub8
267           ID_INS_STC2L, //!< stc2l
268           ID_INS_STC2, //!< stc2
269           ID_INS_STCL, //!< stcl
270           ID_INS_STC, //!< stc
271           ID_INS_STL, //!< stl
272           ID_INS_STLB, //!< stlb
273           ID_INS_STLEX, //!< stlex
274           ID_INS_STLEXB, //!< stlexb
275           ID_INS_STLEXD, //!< stlexd
276           ID_INS_STLEXH, //!< stlexh
277           ID_INS_STLH, //!< stlh
278           ID_INS_STMDA, //!< stmda
279           ID_INS_STMDB, //!< stmdb
280           ID_INS_STM, //!< stm
281           ID_INS_STMIB, //!< stmib
282           ID_INS_STRBT, //!< strbt
283           ID_INS_STRB, //!< strb
284           ID_INS_STRD, //!< strd
285           ID_INS_STREX, //!< strex
286           ID_INS_STREXB, //!< strexb
287           ID_INS_STREXD, //!< strexd
288           ID_INS_STREXH, //!< strexh
289           ID_INS_STRH, //!< strh
290           ID_INS_STRHT, //!< strht
291           ID_INS_STRT, //!< strt
292           ID_INS_STR, //!< str
293           ID_INS_SUB, //!< sub
294           ID_INS_SVC, //!< svc
295           ID_INS_SWP, //!< swp
296           ID_INS_SWPB, //!< swpb
297           ID_INS_SXTAB, //!< sxtab
298           ID_INS_SXTAB16, //!< sxtab16
299           ID_INS_SXTAH, //!< sxtah
300           ID_INS_SXTB, //!< sxtb
301           ID_INS_SXTB16, //!< sxtb16
302           ID_INS_SXTH, //!< sxth
303           ID_INS_TEQ, //!< teq
304           ID_INS_TRAP, //!< trap
305           ID_INS_TST, //!< tst
306           ID_INS_UADD16, //!< uadd16
307           ID_INS_UADD8, //!< uadd8
308           ID_INS_UASX, //!< uasx
309           ID_INS_UBFX, //!< ubfx
310           ID_INS_UDF, //!< udf
311           ID_INS_UDIV, //!< udiv
312           ID_INS_UHADD16, //!< uhadd16
313           ID_INS_UHADD8, //!< uhadd8
314           ID_INS_UHASX, //!< uhasx
315           ID_INS_UHSAX, //!< uhsax
316           ID_INS_UHSUB16, //!< uhsub16
317           ID_INS_UHSUB8, //!< uhsub8
318           ID_INS_UMAAL, //!< umaal
319           ID_INS_UMLAL, //!< umlal
320           ID_INS_UMULL, //!< umull
321           ID_INS_UQADD16, //!< uqadd16
322           ID_INS_UQADD8, //!< uqadd8
323           ID_INS_UQASX, //!< uqasx
324           ID_INS_UQSAX, //!< uqsax
325           ID_INS_UQSUB16, //!< uqsub16
326           ID_INS_UQSUB8, //!< uqsub8
327           ID_INS_USAD8, //!< usad8
328           ID_INS_USADA8, //!< usada8
329           ID_INS_USAT, //!< usat
330           ID_INS_USAT16, //!< usat16
331           ID_INS_USAX, //!< usax
332           ID_INS_USUB16, //!< usub16
333           ID_INS_USUB8, //!< usub8
334           ID_INS_UXTAB, //!< uxtab
335           ID_INS_UXTAB16, //!< uxtab16
336           ID_INS_UXTAH, //!< uxtah
337           ID_INS_UXTB, //!< uxtb
338           ID_INS_UXTB16, //!< uxtb16
339           ID_INS_UXTH, //!< uxth
340           ID_INS_VABAL, //!< vabal
341           ID_INS_VABA, //!< vaba
342           ID_INS_VABDL, //!< vabdl
343           ID_INS_VABD, //!< vabd
344           ID_INS_VABS, //!< vabs
345           ID_INS_VACGE, //!< vacge
346           ID_INS_VACGT, //!< vacgt
347           ID_INS_VADD, //!< vadd
348           ID_INS_VADDHN, //!< vaddhn
349           ID_INS_VADDL, //!< vaddl
350           ID_INS_VADDW, //!< vaddw
351           ID_INS_VAND, //!< vand
352           ID_INS_VBIC, //!< vbic
353           ID_INS_VBIF, //!< vbif
354           ID_INS_VBIT, //!< vbit
355           ID_INS_VBSL, //!< vbsl
356           ID_INS_VCEQ, //!< vceq
357           ID_INS_VCGE, //!< vcge
358           ID_INS_VCGT, //!< vcgt
359           ID_INS_VCLE, //!< vcle
360           ID_INS_VCLS, //!< vcls
361           ID_INS_VCLT, //!< vclt
362           ID_INS_VCLZ, //!< vclz
363           ID_INS_VCMP, //!< vcmp
364           ID_INS_VCMPE, //!< vcmpe
365           ID_INS_VCNT, //!< vcnt
366           ID_INS_VCVTA, //!< vcvta
367           ID_INS_VCVTB, //!< vcvtb
368           ID_INS_VCVT, //!< vcvt
369           ID_INS_VCVTM, //!< vcvtm
370           ID_INS_VCVTN, //!< vcvtn
371           ID_INS_VCVTP, //!< vcvtp
372           ID_INS_VCVTT, //!< vcvtt
373           ID_INS_VDIV, //!< vdiv
374           ID_INS_VDUP, //!< vdup
375           ID_INS_VEOR, //!< veor
376           ID_INS_VEXT, //!< vext
377           ID_INS_VFMA, //!< vfma
378           ID_INS_VFMS, //!< vfms
379           ID_INS_VFNMA, //!< vfnma
380           ID_INS_VFNMS, //!< vfnms
381           ID_INS_VHADD, //!< vhadd
382           ID_INS_VHSUB, //!< vhsub
383           ID_INS_VLD1, //!< vld1
384           ID_INS_VLD2, //!< vld2
385           ID_INS_VLD3, //!< vld3
386           ID_INS_VLD4, //!< vld4
387           ID_INS_VLDMDB, //!< vldmdb
388           ID_INS_VLDMIA, //!< vldmia
389           ID_INS_VLDR, //!< vldr
390           ID_INS_VMAXNM, //!< vmaxnm
391           ID_INS_VMAX, //!< vmax
392           ID_INS_VMINNM, //!< vminnm
393           ID_INS_VMIN, //!< vmin
394           ID_INS_VMLA, //!< vmla
395           ID_INS_VMLAL, //!< vmlal
396           ID_INS_VMLS, //!< vmls
397           ID_INS_VMLSL, //!< vmlsl
398           ID_INS_VMOVL, //!< vmovl
399           ID_INS_VMOVN, //!< vmovn
400           ID_INS_VMSR, //!< vmsr
401           ID_INS_VMUL, //!< vmul
402           ID_INS_VMULL, //!< vmull
403           ID_INS_VMVN, //!< vmvn
404           ID_INS_VNEG, //!< vneg
405           ID_INS_VNMLA, //!< vnmla
406           ID_INS_VNMLS, //!< vnmls
407           ID_INS_VNMUL, //!< vnmul
408           ID_INS_VORN, //!< vorn
409           ID_INS_VORR, //!< vorr
410           ID_INS_VPADAL, //!< vpadal
411           ID_INS_VPADDL, //!< vpaddl
412           ID_INS_VPADD, //!< vpadd
413           ID_INS_VPMAX, //!< vpmax
414           ID_INS_VPMIN, //!< vpmin
415           ID_INS_VQABS, //!< vqabs
416           ID_INS_VQADD, //!< vqadd
417           ID_INS_VQDMLAL, //!< vqdmlal
418           ID_INS_VQDMLSL, //!< vqdmlsl
419           ID_INS_VQDMULH, //!< vqdmulh
420           ID_INS_VQDMULL, //!< vqdmull
421           ID_INS_VQMOVUN, //!< vqmovun
422           ID_INS_VQMOVN, //!< vqmovn
423           ID_INS_VQNEG, //!< vqneg
424           ID_INS_VQRDMULH, //!< vqrdmulh
425           ID_INS_VQRSHL, //!< vqrshl
426           ID_INS_VQRSHRN, //!< vqrshrn
427           ID_INS_VQRSHRUN, //!< vqrshrun
428           ID_INS_VQSHL, //!< vqshl
429           ID_INS_VQSHLU, //!< vqshlu
430           ID_INS_VQSHRN, //!< vqshrn
431           ID_INS_VQSHRUN, //!< vqshrun
432           ID_INS_VQSUB, //!< vqsub
433           ID_INS_VRADDHN, //!< vraddhn
434           ID_INS_VRECPE, //!< vrecpe
435           ID_INS_VRECPS, //!< vrecps
436           ID_INS_VREV16, //!< vrev16
437           ID_INS_VREV32, //!< vrev32
438           ID_INS_VREV64, //!< vrev64
439           ID_INS_VRHADD, //!< vrhadd
440           ID_INS_VRINTA, //!< vrinta
441           ID_INS_VRINTM, //!< vrintm
442           ID_INS_VRINTN, //!< vrintn
443           ID_INS_VRINTP, //!< vrintp
444           ID_INS_VRINTR, //!< vrintr
445           ID_INS_VRINTX, //!< vrintx
446           ID_INS_VRINTZ, //!< vrintz
447           ID_INS_VRSHL, //!< vrshl
448           ID_INS_VRSHRN, //!< vrshrn
449           ID_INS_VRSHR, //!< vrshr
450           ID_INS_VRSQRTE, //!< vrsqrte
451           ID_INS_VRSQRTS, //!< vrsqrts
452           ID_INS_VRSRA, //!< vrsra
453           ID_INS_VRSUBHN, //!< vrsubhn
454           ID_INS_VSELEQ, //!< vseleq
455           ID_INS_VSELGE, //!< vselge
456           ID_INS_VSELGT, //!< vselgt
457           ID_INS_VSELVS, //!< vselvs
458           ID_INS_VSHLL, //!< vshll
459           ID_INS_VSHL, //!< vshl
460           ID_INS_VSHRN, //!< vshrn
461           ID_INS_VSHR, //!< vshr
462           ID_INS_VSLI, //!< vsli
463           ID_INS_VSQRT, //!< vsqrt
464           ID_INS_VSRA, //!< vsra
465           ID_INS_VSRI, //!< vsri
466           ID_INS_VST1, //!< vst1
467           ID_INS_VST2, //!< vst2
468           ID_INS_VST3, //!< vst3
469           ID_INS_VST4, //!< vst4
470           ID_INS_VSTMDB, //!< vstmdb
471           ID_INS_VSTMIA, //!< vstmia
472           ID_INS_VSTR, //!< vstr
473           ID_INS_VSUB, //!< vsub
474           ID_INS_VSUBHN, //!< vsubhn
475           ID_INS_VSUBL, //!< vsubl
476           ID_INS_VSUBW, //!< vsubw
477           ID_INS_VSWP, //!< vswp
478           ID_INS_VTBL, //!< vtbl
479           ID_INS_VTBX, //!< vtbx
480           ID_INS_VCVTR, //!< vcvtr
481           ID_INS_VTRN, //!< vtrn
482           ID_INS_VTST, //!< vtst
483           ID_INS_VUZP, //!< vuzp
484           ID_INS_VZIP, //!< vzip
485           ID_INS_ADDW, //!< addw
486           ID_INS_ASR, //!< asr
487           ID_INS_DCPS1, //!< dcps1
488           ID_INS_DCPS2, //!< dcps2
489           ID_INS_DCPS3, //!< dcps3
490           ID_INS_IT, //!< it
491           ID_INS_LSL, //!< lsl
492           ID_INS_LSR, //!< lsr
493           ID_INS_ORN, //!< orn
494           ID_INS_ROR, //!< ror
495           ID_INS_RRX, //!< rrx
496           ID_INS_SUBW, //!< subw
497           ID_INS_TBB, //!< tbb
498           ID_INS_TBH, //!< tbh
499           ID_INS_CBNZ, //!< cbnz
500           ID_INS_CBZ, //!< cbz
501           ID_INS_POP, //!< pop
502           ID_INS_PUSH, //!< push
503 
504           // special instructions
505           ID_INS_NOP, //!< nop
506           ID_INS_YIELD, //!< yield
507           ID_INS_WFE, //!< wfe
508           ID_INS_WFI, //!< wfi
509           ID_INS_SEV, //!< sev
510           ID_INS_SEVL, //!< sevl
511           ID_INS_VPUSH, //!< vpush
512           ID_INS_VPOP, //!< vpop
513 
514           /* Must be the last item */
515           ID_INS_LAST_ITEM //!< must be the last item
516         };
517 
518       /*! @} End of arm32 namespace */
519       };
520     /*! @} End of arm namespace */
521     };
522   /*! @} End of arch namespace */
523   };
524 /*! @} End of triton namespace */
525 };
526 
527 #endif /* TRITON_ARM32SPECIFICATIONS_H */
528