sig
  type short_offset = Utils.s2
  type long_offset = Utils.s4
  type instruction =
      AALOAD
    | AASTORE
    | ACONST_NULL
    | ALOAD of Utils.u1
    | ALOAD_0
    | ALOAD_1
    | ALOAD_2
    | ALOAD_3
    | ANEWARRAY of Utils.u2
    | ARETURN
    | ARRAYLENGTH
    | ASTORE of Utils.u1
    | ASTORE_0
    | ASTORE_1
    | ASTORE_2
    | ASTORE_3
    | ATHROW
    | BALOAD
    | BASTORE
    | BIPUSH of Utils.s1
    | CALOAD
    | CASTORE
    | CHECKCAST of Utils.u2
    | D2F
    | D2I
    | D2L
    | DADD
    | DALOAD
    | DASTORE
    | DCMPG
    | DCMPL
    | DCONST_0
    | DCONST_1
    | DDIV
    | DLOAD of Utils.u1
    | DLOAD_0
    | DLOAD_1
    | DLOAD_2
    | DLOAD_3
    | DMUL
    | DNEG
    | DREM
    | DRETURN
    | DSTORE of Utils.u1
    | DSTORE_0
    | DSTORE_1
    | DSTORE_2
    | DSTORE_3
    | DSUB
    | DUP
    | DUP2
    | DUP2_X1
    | DUP2_X2
    | DUP_X1
    | DUP_X2
    | F2D
    | F2I
    | F2L
    | FADD
    | FALOAD
    | FASTORE
    | FCMPG
    | FCMPL
    | FCONST_0
    | FCONST_1
    | FCONST_2
    | FDIV
    | FLOAD of Utils.u1
    | FLOAD_0
    | FLOAD_1
    | FLOAD_2
    | FLOAD_3
    | FMUL
    | FNEG
    | FREM
    | FRETURN
    | FSTORE of Utils.u1
    | FSTORE_0
    | FSTORE_1
    | FSTORE_2
    | FSTORE_3
    | FSUB
    | GETFIELD of Utils.u2
    | GETSTATIC of Utils.u2
    | GOTO of ByteCode.short_offset
    | GOTO_W of ByteCode.long_offset
    | 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
    | IF_ACMPEQ of ByteCode.short_offset
    | IF_ACMPNE of ByteCode.short_offset
    | IF_ICMPEQ of ByteCode.short_offset
    | IF_ICMPGE of ByteCode.short_offset
    | IF_ICMPGT of ByteCode.short_offset
    | IF_ICMPLE of ByteCode.short_offset
    | IF_ICMPLT of ByteCode.short_offset
    | IF_ICMPNE of ByteCode.short_offset
    | IFEQ of ByteCode.short_offset
    | IFGE of ByteCode.short_offset
    | IFGT of ByteCode.short_offset
    | IFLE of ByteCode.short_offset
    | IFLT of ByteCode.short_offset
    | IFNE of ByteCode.short_offset
    | IFNONNULL of ByteCode.short_offset
    | IFNULL of ByteCode.short_offset
    | IINC of Utils.u1 * Utils.s1
    | ILOAD of Utils.u1
    | ILOAD_0
    | ILOAD_1
    | ILOAD_2
    | ILOAD_3
    | IMUL
    | INEG
    | INSTANCEOF of Utils.u2
    | INVOKEDYNAMIC of Utils.u2
    | INVOKEINTERFACE of Utils.u2 * Utils.u1
    | INVOKESPECIAL of Utils.u2
    | INVOKESTATIC of Utils.u2
    | INVOKEVIRTUAL of Utils.u2
    | IOR
    | IREM
    | IRETURN
    | ISHL
    | ISHR
    | ISTORE of Utils.u1
    | ISTORE_0
    | ISTORE_1
    | ISTORE_2
    | ISTORE_3
    | ISUB
    | IUSHR
    | IXOR
    | JSR of ByteCode.short_offset
    | JSR_W of ByteCode.long_offset
    | L2D
    | L2F
    | L2I
    | LADD
    | LALOAD
    | LAND
    | LASTORE
    | LCMP
    | LCONST_0
    | LCONST_1
    | LDC of Utils.u1
    | LDC2_W of Utils.u2
    | LDC_W of Utils.u2
    | LDIV
    | LLOAD of Utils.u1
    | LLOAD_0
    | LLOAD_1
    | LLOAD_2
    | LLOAD_3
    | LMUL
    | LNEG
    | LOOKUPSWITCH of ByteCode.long_offset * Utils.s4 *
        (Utils.s4 * ByteCode.long_offset) list
    | LOR
    | LREM
    | LRETURN
    | LSHL
    | LSHR
    | LSTORE of Utils.u1
    | LSTORE_0
    | LSTORE_1
    | LSTORE_2
    | LSTORE_3
    | LSUB
    | LUSHR
    | LXOR
    | MONITORENTER
    | MONITOREXIT
    | MULTIANEWARRAY of Utils.u2 * Utils.u1
    | NEW of Utils.u2
    | NEWARRAY of Utils.u1
    | NOP
    | POP
    | POP2
    | PUTFIELD of Utils.u2
    | PUTSTATIC of Utils.u2
    | RET of Utils.u1
    | RETURN
    | SALOAD
    | SASTORE
    | SIPUSH of Utils.s2
    | SWAP
    | TABLESWITCH of ByteCode.long_offset * Utils.s4 * Utils.s4 *
        ByteCode.long_offset list
    | WIDE_ALOAD of Utils.u2
    | WIDE_ASTORE of Utils.u2
    | WIDE_DLOAD of Utils.u2
    | WIDE_DSTORE of Utils.u2
    | WIDE_FLOAD of Utils.u2
    | WIDE_FSTORE of Utils.u2
    | WIDE_IINC of Utils.u2 * Utils.s2
    | WIDE_ILOAD of Utils.u2
    | WIDE_ISTORE of Utils.u2
    | WIDE_LLOAD of Utils.u2
    | WIDE_LSTORE of Utils.u2
    | WIDE_RET of Utils.u2
  type error =
      Invalid_padding_byte
    | Unknown_opcode
    | Invalid_trailing_byte
    | Invalid_trailing_short
    | Internal
    | Invalid_switch_cases
  exception Exception of ByteCode.error
  val string_of_error : ByteCode.error -> string
  val read : InputStream.t -> int -> ByteCode.instruction list
  val write : OutputStream.t -> int -> ByteCode.instruction list -> unit
end