<!--
  ASM XML Adapter
  Copyright (c) 2004-2011, Eugene Kuleshov
  All rights reserved.
  
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:
  1. Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in the
     documentation and/or other materials provided with the distribution.
  3. Neither the name of the copyright holders nor the names of its
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.
  
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  THE POSSIBILITY OF SUCH DAMAGE.
-->

<!--
  This DTD must be used to create XML documents to be processed by
  ASMContentHandler
-->

<!--
  Root element used to aggregate multiple classes into single document.
-->
<!ELEMENT classes ( class+ )>

<!--
  Root element for a single class.
-->
<!ELEMENT class ( interfaces, ( field | innerclass | method )*)>
<!ATTLIST class access CDATA #REQUIRED>
<!ATTLIST class name CDATA #REQUIRED>
<!ATTLIST class parent CDATA #REQUIRED>
<!ATTLIST class major CDATA #REQUIRED>
<!ATTLIST class minor CDATA #REQUIRED>
<!ATTLIST class source CDATA #IMPLIED>

<!ELEMENT interfaces ( interface* )>
<!ELEMENT interface EMPTY>
<!ATTLIST interface name CDATA #REQUIRED>

<!ELEMENT field EMPTY>
<!ATTLIST field access CDATA #REQUIRED>
<!ATTLIST field desc CDATA #REQUIRED>
<!ATTLIST field name CDATA #REQUIRED>
<!--
  All characters out of interval 0x20 to 0x7f (inclusive) must
  be encoded (\uXXXX) and character '\' must be replaced by "\\"
-->
<!ATTLIST field value CDATA #IMPLIED>

<!ELEMENT innerclass EMPTY>
<!ATTLIST innerclass access CDATA #REQUIRED>
<!ATTLIST innerclass innerName CDATA #IMPLIED>
<!ATTLIST innerclass name CDATA #REQUIRED>
<!ATTLIST innerclass outerName CDATA #IMPLIED>

<!--
  Root element for method definition.
-->
<!ELEMENT method ( exceptions, code? )>
<!ATTLIST method access CDATA #REQUIRED>
<!ATTLIST method desc CDATA #REQUIRED>
<!ATTLIST method name CDATA #REQUIRED>

<!ELEMENT exceptions ( exception* )>
<!ELEMENT exception EMPTY>
<!ATTLIST exception name CDATA #REQUIRED>

<!--
  code element contains bytecode instructions and definitions for labels, line numbers, try/catch and max
-->
<!ELEMENT code (( AALOAD | AASTORE | ACONST_NULL | ALOAD | ANEWARRAY | ARETURN | ARRAYLENGTH | ASTORE | ATHROW | BALOAD | BASTORE | BIPUSH | CALOAD | CASTORE | CHECKCAST | D2F | D2I | D2L | DADD | DALOAD | DASTORE | DCMPG | DCMPL | DCONST_0 | DCONST_1 | DDIV | DLOAD | DMUL | DNEG | DREM | DRETURN | DSTORE | DSUB | DUP | DUP2 | DUP2_X1 | DUP2_X2 | DUP_X1 | DUP_X2 | SWAP | F2D | F2I | F2L | FADD | FALOAD | FASTORE | FCMPG | FCMPL | FCONST_0 | FCONST_1 | FCONST_2 | FDIV | FLOAD | FMUL | FNEG | FREM | FRETURN | FSTORE | FSUB | GETFIELD | GETSTATIC | GOTO | I2B | I2C | I2D | I2F | I2L | I2S | IADD | IALOAD | IAND | IASTORE | ICONST_0 | ICONST_1 | ICONST_2 | ICONST_3 | ICONST_4 | ICONST_5 | ICONST_M1 | IDIV | IFEQ | IFGE | IFGT | IFLE | IFLT | IFNE | IFNONNULL | IFNULL | IF_ACMPEQ | IF_ACMPNE | IF_ICMPEQ | IF_ICMPGE | IF_ICMPGT | IF_ICMPLE | IF_ICMPLT | IF_ICMPNE | IINC | ILOAD | IMUL | INEG | INSTANCEOF | INVOKEINTERFACE | INVOKESPECIAL | INVOKESTATIC | INVOKEVIRTUAL | IOR | IREM | IRETURN | ISHL | ISHR | ISTORE | ISUB | IUSHR | IXOR | JSR | L2D | L2F | L2I | LADD | LALOAD | LAND | LASTORE | LCMP | LCONST_0 | LCONST_1 | LDC | LDIV | LLOAD | LMUL | LNEG | LOOKUPSWITCH | LOR | LREM | LRETURN | LSHL | LSHR | LSTORE | LSUB | LUSHR | LXOR | MONITORENTER | MONITOREXIT | MULTIANEWARRAY | NEW | NEWARRAY | NOP | POP | POP2 | PUTFIELD | PUTSTATIC | RET | RETURN | SALOAD | SASTORE | SIPUSH | TABLESWITCH | Label | LineNumber | TryCatch )*, Max)>

<!ELEMENT Label EMPTY>
<!ATTLIST Label name CDATA #REQUIRED>

<!ELEMENT TryCatch EMPTY>
<!ATTLIST TryCatch end CDATA #REQUIRED>
<!ATTLIST TryCatch handler CDATA #REQUIRED>
<!ATTLIST TryCatch start CDATA #REQUIRED>
<!ATTLIST TryCatch type CDATA #IMPLIED>

<!ELEMENT LineNumber EMPTY>
<!ATTLIST LineNumber line CDATA #REQUIRED>
<!ATTLIST LineNumber start CDATA #REQUIRED>

<!ELEMENT Max EMPTY>
<!ATTLIST Max maxLocals CDATA #REQUIRED>
<!ATTLIST Max maxStack CDATA #REQUIRED>

<!ELEMENT AALOAD EMPTY>
<!ELEMENT AASTORE EMPTY>
<!ELEMENT ACONST_NULL EMPTY>
<!ELEMENT ALOAD EMPTY>
<!ATTLIST ALOAD var CDATA #REQUIRED>
<!ELEMENT ANEWARRAY EMPTY>
<!ATTLIST ANEWARRAY desc CDATA #REQUIRED>
<!ELEMENT ARETURN EMPTY>
<!ELEMENT ARRAYLENGTH EMPTY>
<!ELEMENT ASTORE EMPTY>
<!ATTLIST ASTORE var CDATA #REQUIRED>
<!ELEMENT ATHROW EMPTY>
<!ELEMENT BALOAD EMPTY>
<!ELEMENT BASTORE EMPTY>
<!ELEMENT BIPUSH EMPTY>
<!ATTLIST BIPUSH value CDATA #REQUIRED>
<!ELEMENT CALOAD EMPTY>
<!ELEMENT CASTORE EMPTY>
<!ELEMENT CHECKCAST EMPTY>
<!ATTLIST CHECKCAST desc CDATA #REQUIRED>
<!ELEMENT D2F EMPTY>
<!ELEMENT D2I EMPTY>
<!ELEMENT D2L EMPTY>
<!ELEMENT DADD EMPTY>
<!ELEMENT DALOAD EMPTY>
<!ELEMENT DASTORE EMPTY>
<!ELEMENT DCMPG EMPTY>
<!ELEMENT DCMPL EMPTY>
<!ELEMENT DCONST_0 EMPTY>
<!ELEMENT DCONST_1 EMPTY>
<!ELEMENT DDIV EMPTY>
<!ELEMENT DLOAD EMPTY>
<!ATTLIST DLOAD var CDATA #REQUIRED>
<!ELEMENT DMUL EMPTY>
<!ELEMENT DNEG EMPTY>
<!ELEMENT DREM EMPTY>
<!ELEMENT DRETURN EMPTY>
<!ELEMENT DSTORE EMPTY>
<!ATTLIST DSTORE var CDATA #REQUIRED>
<!ELEMENT DSUB EMPTY>
<!ELEMENT DUP EMPTY>
<!ELEMENT DUP2 EMPTY>
<!ELEMENT DUP2_X1 EMPTY>
<!ELEMENT DUP2_X2 EMPTY>
<!ELEMENT DUP_X1 EMPTY>
<!ELEMENT DUP_X2 EMPTY>
<!ELEMENT SWAP EMPTY>
<!ELEMENT F2D EMPTY>
<!ELEMENT F2I EMPTY>
<!ELEMENT F2L EMPTY>
<!ELEMENT FADD EMPTY>
<!ELEMENT FALOAD EMPTY>
<!ELEMENT FASTORE EMPTY>
<!ELEMENT FCMPG EMPTY>
<!ELEMENT FCMPL EMPTY>
<!ELEMENT FCONST_0 EMPTY>
<!ELEMENT FCONST_1 EMPTY>
<!ELEMENT FCONST_2 EMPTY>
<!ELEMENT FDIV EMPTY>
<!ELEMENT FLOAD EMPTY>
<!ATTLIST FLOAD var CDATA #REQUIRED>
<!ELEMENT FMUL EMPTY>
<!ELEMENT FNEG EMPTY>
<!ELEMENT FREM EMPTY>
<!ELEMENT FRETURN EMPTY>
<!ELEMENT FSTORE EMPTY>
<!ATTLIST FSTORE var CDATA #REQUIRED>
<!ELEMENT FSUB EMPTY>
<!ELEMENT GETFIELD EMPTY>
<!ATTLIST GETFIELD desc CDATA #REQUIRED>
<!ATTLIST GETFIELD name CDATA #REQUIRED>
<!ATTLIST GETFIELD owner CDATA #REQUIRED>
<!ELEMENT GETSTATIC EMPTY>
<!ATTLIST GETSTATIC desc CDATA #REQUIRED>
<!ATTLIST GETSTATIC name CDATA #REQUIRED>
<!ATTLIST GETSTATIC owner CDATA #REQUIRED>
<!ELEMENT GOTO EMPTY>
<!ATTLIST GOTO label CDATA #REQUIRED>
<!ELEMENT I2B EMPTY>
<!ELEMENT I2C EMPTY>
<!ELEMENT I2D EMPTY>
<!ELEMENT I2F EMPTY>
<!ELEMENT I2L EMPTY>
<!ELEMENT I2S EMPTY>
<!ELEMENT IADD EMPTY>
<!ELEMENT IALOAD EMPTY>
<!ELEMENT IAND EMPTY>
<!ELEMENT IASTORE EMPTY>
<!ELEMENT ICONST_0 EMPTY>
<!ELEMENT ICONST_1 EMPTY>
<!ELEMENT ICONST_2 EMPTY>
<!ELEMENT ICONST_3 EMPTY>
<!ELEMENT ICONST_4 EMPTY>
<!ELEMENT ICONST_5 EMPTY>
<!ELEMENT ICONST_M1 EMPTY>
<!ELEMENT IDIV EMPTY>
<!ELEMENT IFEQ EMPTY>
<!ATTLIST IFEQ label CDATA #REQUIRED>
<!ELEMENT IFGE EMPTY>
<!ATTLIST IFGE label CDATA #REQUIRED>
<!ELEMENT IFGT EMPTY>
<!ATTLIST IFGT label CDATA #REQUIRED>
<!ELEMENT IFLE EMPTY>
<!ATTLIST IFLE label CDATA #REQUIRED>
<!ELEMENT IFLT EMPTY>
<!ATTLIST IFLT label CDATA #REQUIRED>
<!ELEMENT IFNE EMPTY>
<!ATTLIST IFNE label CDATA #REQUIRED>
<!ELEMENT IFNONNULL EMPTY>
<!ATTLIST IFNONNULL label CDATA #REQUIRED>
<!ELEMENT IFNULL EMPTY>
<!ATTLIST IFNULL label CDATA #REQUIRED>
<!ELEMENT IF_ACMPEQ EMPTY>
<!ATTLIST IF_ACMPEQ label CDATA #REQUIRED>
<!ELEMENT IF_ACMPNE EMPTY>
<!ATTLIST IF_ACMPNE label CDATA #REQUIRED>
<!ELEMENT IF_ICMPEQ EMPTY>
<!ATTLIST IF_ICMPEQ label CDATA #REQUIRED>
<!ELEMENT IF_ICMPGE EMPTY>
<!ATTLIST IF_ICMPGE label CDATA #REQUIRED>
<!ELEMENT IF_ICMPGT EMPTY>
<!ATTLIST IF_ICMPGT label CDATA #REQUIRED>
<!ELEMENT IF_ICMPLE EMPTY>
<!ATTLIST IF_ICMPLE label CDATA #REQUIRED>
<!ELEMENT IF_ICMPLT EMPTY>
<!ATTLIST IF_ICMPLT label CDATA #REQUIRED>
<!ELEMENT IF_ICMPNE EMPTY>
<!ATTLIST IF_ICMPNE label CDATA #REQUIRED>
<!ELEMENT IINC EMPTY>
<!ATTLIST IINC inc CDATA #REQUIRED>
<!ATTLIST IINC var CDATA #REQUIRED>
<!ELEMENT ILOAD EMPTY>
<!ATTLIST ILOAD var CDATA #REQUIRED>
<!ELEMENT IMUL EMPTY>
<!ELEMENT INEG EMPTY>
<!ELEMENT INSTANCEOF EMPTY>
<!ATTLIST INSTANCEOF desc CDATA #REQUIRED>
<!ELEMENT INVOKEINTERFACE EMPTY>
<!ATTLIST INVOKEINTERFACE desc CDATA #REQUIRED>
<!ATTLIST INVOKEINTERFACE name CDATA #REQUIRED>
<!ATTLIST INVOKEINTERFACE owner CDATA #REQUIRED>
<!ELEMENT INVOKESPECIAL EMPTY>
<!ATTLIST INVOKESPECIAL desc CDATA #REQUIRED>
<!ATTLIST INVOKESPECIAL name CDATA #REQUIRED>
<!ATTLIST INVOKESPECIAL owner CDATA #REQUIRED>
<!ELEMENT INVOKESTATIC EMPTY>
<!ATTLIST INVOKESTATIC desc CDATA #REQUIRED>
<!ATTLIST INVOKESTATIC name CDATA #REQUIRED>
<!ATTLIST INVOKESTATIC owner CDATA #REQUIRED>
<!ELEMENT INVOKEVIRTUAL EMPTY>
<!ATTLIST INVOKEVIRTUAL desc CDATA #REQUIRED>
<!ATTLIST INVOKEVIRTUAL name CDATA #REQUIRED>
<!ATTLIST INVOKEVIRTUAL owner CDATA #REQUIRED>
<!ELEMENT INVOKEDYNAMIC ( bsmArgs+ )>
<!ATTLIST INVOKEDYNAMIC desc CDATA #REQUIRED>
<!ATTLIST INVOKEDYNAMIC name CDATA #REQUIRED>
<!ATTLIST INVOKEDYNAMIC bsm CDATA #REQUIRED>
<!ELEMENT bsmArgs EMPTY>
<!ATTLIST bsmArgs cst CDATA #REQUIRED>
<!ATTLIST bsmArgs desc CDATA #REQUIRED>
<!ELEMENT IOR EMPTY>
<!ELEMENT IREM EMPTY>
<!ELEMENT IRETURN EMPTY>
<!ELEMENT ISHL EMPTY>
<!ELEMENT ISHR EMPTY>
<!ELEMENT ISTORE EMPTY>
<!ATTLIST ISTORE var CDATA #REQUIRED>
<!ELEMENT ISUB EMPTY>
<!ELEMENT IUSHR EMPTY>
<!ELEMENT IXOR EMPTY>
<!ELEMENT JSR EMPTY>
<!ATTLIST JSR label CDATA #REQUIRED>
<!ELEMENT L2D EMPTY>
<!ELEMENT L2F EMPTY>
<!ELEMENT L2I EMPTY>
<!ELEMENT LADD EMPTY>
<!ELEMENT LALOAD EMPTY>
<!ELEMENT LAND EMPTY>
<!ELEMENT LASTORE EMPTY>
<!ELEMENT LCMP EMPTY>
<!ELEMENT LCONST_0 EMPTY>
<!ELEMENT LCONST_1 EMPTY>
<!ELEMENT LDC EMPTY>
<!--
  All characters out of interval 0x20 to 0x7f (inclusive) must
  be encoded (\uXXXX) and character '\' must be replaced by "\\"
-->
<!ATTLIST LDC cst CDATA #REQUIRED>
<!ATTLIST LDC desc CDATA #REQUIRED>
<!ELEMENT LDIV EMPTY>
<!ELEMENT LLOAD EMPTY>
<!ATTLIST LLOAD var CDATA #REQUIRED>
<!ELEMENT LMUL EMPTY>
<!ELEMENT LNEG EMPTY>
<!ELEMENT LOR EMPTY>
<!ELEMENT LREM EMPTY>
<!ELEMENT LRETURN EMPTY>
<!ELEMENT LSHL EMPTY>
<!ELEMENT LSHR EMPTY>
<!ELEMENT LSTORE EMPTY>
<!ATTLIST LSTORE var CDATA #REQUIRED>
<!ELEMENT LSUB EMPTY>
<!ELEMENT LUSHR EMPTY>
<!ELEMENT LXOR EMPTY>
<!ELEMENT MONITORENTER EMPTY>
<!ELEMENT MONITOREXIT EMPTY>
<!ELEMENT MULTIANEWARRAY EMPTY>
<!ATTLIST MULTIANEWARRAY desc CDATA #REQUIRED>
<!ATTLIST MULTIANEWARRAY dims CDATA #REQUIRED>
<!ELEMENT NEW EMPTY>
<!ATTLIST NEW desc CDATA #REQUIRED>
<!ELEMENT NEWARRAY EMPTY>
<!ATTLIST NEWARRAY value CDATA #REQUIRED>
<!ELEMENT NOP EMPTY>
<!ELEMENT POP EMPTY>
<!ELEMENT POP2 EMPTY>
<!ELEMENT PUTFIELD EMPTY>
<!ATTLIST PUTFIELD desc CDATA #REQUIRED>
<!ATTLIST PUTFIELD name CDATA #REQUIRED>
<!ATTLIST PUTFIELD owner CDATA #REQUIRED>
<!ELEMENT PUTSTATIC EMPTY>
<!ATTLIST PUTSTATIC desc CDATA #REQUIRED>
<!ATTLIST PUTSTATIC name CDATA #REQUIRED>
<!ATTLIST PUTSTATIC owner CDATA #REQUIRED>
<!ELEMENT RET EMPTY>
<!ATTLIST RET var CDATA #REQUIRED>
<!ELEMENT RETURN EMPTY>
<!ELEMENT SALOAD EMPTY>
<!ELEMENT SASTORE EMPTY>
<!ELEMENT SIPUSH EMPTY>
<!ATTLIST SIPUSH value CDATA #REQUIRED>

<!ELEMENT LOOKUPSWITCH ( label+ )>
<!ATTLIST LOOKUPSWITCH dflt CDATA #REQUIRED>

<!ELEMENT TABLESWITCH ( label+ )>
<!ATTLIST TABLESWITCH dflt CDATA #REQUIRED>
<!ATTLIST TABLESWITCH max CDATA #REQUIRED>
<!ATTLIST TABLESWITCH min CDATA #REQUIRED>

<!ELEMENT label EMPTY>
<!ATTLIST label key CDATA #IMPLIED>
<!ATTLIST label name CDATA #REQUIRED>

