public class io.netty.handler.codec.LineBasedFrameDecoder extends io.netty.handler.codec.ByteToMessageDecoder
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: io.netty.handler.codec.LineBasedFrameDecoder
  super_class: io.netty.handler.codec.ByteToMessageDecoder
{
  private final int maxLength;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean failFast;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean stripDelimiter;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private boolean discarding;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private int discardedBytes;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private int offset;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  public void <init>(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
        start local 1 // int maxLength
         0: .line 52
            aload 0 /* this */
            iload 1 /* maxLength */
            iconst_1
            iconst_0
            invokespecial io.netty.handler.codec.LineBasedFrameDecoder.<init>:(IZZ)V
         1: .line 53
            return
        end local 1 // int maxLength
        end local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lio/netty/handler/codec/LineBasedFrameDecoder;
            0    2     1  maxLength  I
    MethodParameters:
           Name  Flags
      maxLength  final

  public void <init>(int, boolean, boolean);
    descriptor: (IZZ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
        start local 1 // int maxLength
        start local 2 // boolean stripDelimiter
        start local 3 // boolean failFast
         0: .line 70
            aload 0 /* this */
            invokespecial io.netty.handler.codec.ByteToMessageDecoder.<init>:()V
         1: .line 71
            aload 0 /* this */
            iload 1 /* maxLength */
            putfield io.netty.handler.codec.LineBasedFrameDecoder.maxLength:I
         2: .line 72
            aload 0 /* this */
            iload 3 /* failFast */
            putfield io.netty.handler.codec.LineBasedFrameDecoder.failFast:Z
         3: .line 73
            aload 0 /* this */
            iload 2 /* stripDelimiter */
            putfield io.netty.handler.codec.LineBasedFrameDecoder.stripDelimiter:Z
         4: .line 74
            return
        end local 3 // boolean failFast
        end local 2 // boolean stripDelimiter
        end local 1 // int maxLength
        end local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lio/netty/handler/codec/LineBasedFrameDecoder;
            0    5     1       maxLength  I
            0    5     2  stripDelimiter  Z
            0    5     3        failFast  Z
    MethodParameters:
                Name  Flags
      maxLength       final
      stripDelimiter  final
      failFast        final

  protected final void decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List<java.lang.Object>);
    descriptor: (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
        start local 1 // io.netty.channel.ChannelHandlerContext ctx
        start local 2 // io.netty.buffer.ByteBuf in
        start local 3 // java.util.List out
         0: .line 78
            aload 0 /* this */
            aload 1 /* ctx */
            aload 2 /* in */
            invokevirtual io.netty.handler.codec.LineBasedFrameDecoder.decode:(Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;)Ljava/lang/Object;
            astore 4 /* decoded */
        start local 4 // java.lang.Object decoded
         1: .line 79
            aload 4 /* decoded */
            ifnull 3
         2: .line 80
            aload 3 /* out */
            aload 4 /* decoded */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         3: .line 82
      StackMap locals: java.lang.Object
      StackMap stack:
            return
        end local 4 // java.lang.Object decoded
        end local 3 // java.util.List out
        end local 2 // io.netty.buffer.ByteBuf in
        end local 1 // io.netty.channel.ChannelHandlerContext ctx
        end local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lio/netty/handler/codec/LineBasedFrameDecoder;
            0    4     1      ctx  Lio/netty/channel/ChannelHandlerContext;
            0    4     2       in  Lio/netty/buffer/ByteBuf;
            0    4     3      out  Ljava/util/List<Ljava/lang/Object;>;
            1    4     4  decoded  Ljava/lang/Object;
    Exceptions:
      throws java.lang.Exception
    Signature: (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List<Ljava/lang/Object;>;)V
    MethodParameters:
      Name  Flags
      ctx   
      in    
      out   

  protected java.lang.Object decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf);
    descriptor: (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;)Ljava/lang/Object;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=7, args_size=3
        start local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
        start local 1 // io.netty.channel.ChannelHandlerContext ctx
        start local 2 // io.netty.buffer.ByteBuf buffer
         0: .line 93
            aload 0 /* this */
            aload 2 /* buffer */
            invokevirtual io.netty.handler.codec.LineBasedFrameDecoder.findEndOfLine:(Lio/netty/buffer/ByteBuf;)I
            istore 3 /* eol */
        start local 3 // int eol
         1: .line 94
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.discarding:Z
            ifne 26
         2: .line 95
            iload 3 /* eol */
            iflt 17
         3: .line 97
            iload 3 /* eol */
            aload 2 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.readerIndex:()I
            isub
            istore 5 /* length */
        start local 5 // int length
         4: .line 98
            aload 2 /* buffer */
            iload 3 /* eol */
            invokevirtual io.netty.buffer.ByteBuf.getByte:(I)B
            bipush 13
            if_icmpne 5
            iconst_2
            goto 6
      StackMap locals: io.netty.handler.codec.LineBasedFrameDecoder io.netty.channel.ChannelHandlerContext io.netty.buffer.ByteBuf int top int
      StackMap stack:
         5: iconst_1
      StackMap locals:
      StackMap stack: int
         6: istore 6 /* delimLength */
        start local 6 // int delimLength
         7: .line 100
            iload 5 /* length */
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.maxLength:I
            if_icmple 11
         8: .line 101
            aload 2 /* buffer */
            iload 3 /* eol */
            iload 6 /* delimLength */
            iadd
            invokevirtual io.netty.buffer.ByteBuf.readerIndex:(I)Lio/netty/buffer/ByteBuf;
            pop
         9: .line 102
            aload 0 /* this */
            aload 1 /* ctx */
            iload 5 /* length */
            invokevirtual io.netty.handler.codec.LineBasedFrameDecoder.fail:(Lio/netty/channel/ChannelHandlerContext;I)V
        10: .line 103
            aconst_null
            areturn
        11: .line 106
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.stripDelimiter:Z
            ifeq 15
        12: .line 107
            aload 2 /* buffer */
            iload 5 /* length */
            invokevirtual io.netty.buffer.ByteBuf.readRetainedSlice:(I)Lio/netty/buffer/ByteBuf;
            astore 4 /* frame */
        start local 4 // io.netty.buffer.ByteBuf frame
        13: .line 108
            aload 2 /* buffer */
            iload 6 /* delimLength */
            invokevirtual io.netty.buffer.ByteBuf.skipBytes:(I)Lio/netty/buffer/ByteBuf;
            pop
        14: .line 109
            goto 16
        end local 4 // io.netty.buffer.ByteBuf frame
        15: .line 110
      StackMap locals:
      StackMap stack:
            aload 2 /* buffer */
            iload 5 /* length */
            iload 6 /* delimLength */
            iadd
            invokevirtual io.netty.buffer.ByteBuf.readRetainedSlice:(I)Lio/netty/buffer/ByteBuf;
            astore 4 /* frame */
        start local 4 // io.netty.buffer.ByteBuf frame
        16: .line 113
      StackMap locals: io.netty.handler.codec.LineBasedFrameDecoder io.netty.channel.ChannelHandlerContext io.netty.buffer.ByteBuf int io.netty.buffer.ByteBuf int int
      StackMap stack:
            aload 4 /* frame */
            areturn
        end local 6 // int delimLength
        end local 5 // int length
        end local 4 // io.netty.buffer.ByteBuf frame
        17: .line 115
      StackMap locals:
      StackMap stack:
            aload 2 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.readableBytes:()I
            istore 4 /* length */
        start local 4 // int length
        18: .line 116
            iload 4 /* length */
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.maxLength:I
            if_icmple 25
        19: .line 117
            aload 0 /* this */
            iload 4 /* length */
            putfield io.netty.handler.codec.LineBasedFrameDecoder.discardedBytes:I
        20: .line 118
            aload 2 /* buffer */
            aload 2 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.writerIndex:()I
            invokevirtual io.netty.buffer.ByteBuf.readerIndex:(I)Lio/netty/buffer/ByteBuf;
            pop
        21: .line 119
            aload 0 /* this */
            iconst_1
            putfield io.netty.handler.codec.LineBasedFrameDecoder.discarding:Z
        22: .line 120
            aload 0 /* this */
            iconst_0
            putfield io.netty.handler.codec.LineBasedFrameDecoder.offset:I
        23: .line 121
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.failFast:Z
            ifeq 25
        24: .line 122
            aload 0 /* this */
            aload 1 /* ctx */
            new java.lang.StringBuilder
            dup
            ldc "over "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.discardedBytes:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual io.netty.handler.codec.LineBasedFrameDecoder.fail:(Lio/netty/channel/ChannelHandlerContext;Ljava/lang/String;)V
        25: .line 125
      StackMap locals: int
      StackMap stack:
            aconst_null
            areturn
        end local 4 // int length
        26: .line 128
      StackMap locals:
      StackMap stack:
            iload 3 /* eol */
            iflt 37
        27: .line 129
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.discardedBytes:I
            iload 3 /* eol */
            iadd
            aload 2 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.readerIndex:()I
            isub
            istore 4 /* length */
        start local 4 // int length
        28: .line 130
            aload 2 /* buffer */
            iload 3 /* eol */
            invokevirtual io.netty.buffer.ByteBuf.getByte:(I)B
            bipush 13
            if_icmpne 29
            iconst_2
            goto 30
      StackMap locals: int
      StackMap stack:
        29: iconst_1
      StackMap locals:
      StackMap stack: int
        30: istore 5 /* delimLength */
        start local 5 // int delimLength
        31: .line 131
            aload 2 /* buffer */
            iload 3 /* eol */
            iload 5 /* delimLength */
            iadd
            invokevirtual io.netty.buffer.ByteBuf.readerIndex:(I)Lio/netty/buffer/ByteBuf;
            pop
        32: .line 132
            aload 0 /* this */
            iconst_0
            putfield io.netty.handler.codec.LineBasedFrameDecoder.discardedBytes:I
        33: .line 133
            aload 0 /* this */
            iconst_0
            putfield io.netty.handler.codec.LineBasedFrameDecoder.discarding:Z
        34: .line 134
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.failFast:Z
            ifne 39
        35: .line 135
            aload 0 /* this */
            aload 1 /* ctx */
            iload 4 /* length */
            invokevirtual io.netty.handler.codec.LineBasedFrameDecoder.fail:(Lio/netty/channel/ChannelHandlerContext;I)V
        end local 5 // int delimLength
        end local 4 // int length
        36: .line 137
            goto 39
        37: .line 138
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            dup
            getfield io.netty.handler.codec.LineBasedFrameDecoder.discardedBytes:I
            aload 2 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.readableBytes:()I
            iadd
            putfield io.netty.handler.codec.LineBasedFrameDecoder.discardedBytes:I
        38: .line 139
            aload 2 /* buffer */
            aload 2 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.writerIndex:()I
            invokevirtual io.netty.buffer.ByteBuf.readerIndex:(I)Lio/netty/buffer/ByteBuf;
            pop
        39: .line 141
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // int eol
        end local 2 // io.netty.buffer.ByteBuf buffer
        end local 1 // io.netty.channel.ChannelHandlerContext ctx
        end local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   40     0         this  Lio/netty/handler/codec/LineBasedFrameDecoder;
            0   40     1          ctx  Lio/netty/channel/ChannelHandlerContext;
            0   40     2       buffer  Lio/netty/buffer/ByteBuf;
            1   40     3          eol  I
           13   15     4        frame  Lio/netty/buffer/ByteBuf;
           16   17     4        frame  Lio/netty/buffer/ByteBuf;
            4   17     5       length  I
            7   17     6  delimLength  I
           18   26     4       length  I
           28   36     4       length  I
           31   36     5  delimLength  I
    Exceptions:
      throws java.lang.Exception
    MethodParameters:
        Name  Flags
      ctx     
      buffer  

  private void fail(io.netty.channel.ChannelHandlerContext, int);
    descriptor: (Lio/netty/channel/ChannelHandlerContext;I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
        start local 1 // io.netty.channel.ChannelHandlerContext ctx
        start local 2 // int length
         0: .line 146
            aload 0 /* this */
            aload 1 /* ctx */
            iload 2 /* length */
            invokestatic java.lang.String.valueOf:(I)Ljava/lang/String;
            invokevirtual io.netty.handler.codec.LineBasedFrameDecoder.fail:(Lio/netty/channel/ChannelHandlerContext;Ljava/lang/String;)V
         1: .line 147
            return
        end local 2 // int length
        end local 1 // io.netty.channel.ChannelHandlerContext ctx
        end local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lio/netty/handler/codec/LineBasedFrameDecoder;
            0    2     1     ctx  Lio/netty/channel/ChannelHandlerContext;
            0    2     2  length  I
    MethodParameters:
        Name  Flags
      ctx     final
      length  

  private void fail(io.netty.channel.ChannelHandlerContext, java.lang.String);
    descriptor: (Lio/netty/channel/ChannelHandlerContext;Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
        start local 1 // io.netty.channel.ChannelHandlerContext ctx
        start local 2 // java.lang.String length
         0: .line 150
            aload 1 /* ctx */
         1: .line 151
            new io.netty.handler.codec.TooLongFrameException
            dup
         2: .line 152
            new java.lang.StringBuilder
            dup
            ldc "frame length ("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* length */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ") exceeds the allowed maximum ("
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.maxLength:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            bipush 41
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         3: .line 151
            invokespecial io.netty.handler.codec.TooLongFrameException.<init>:(Ljava/lang/String;)V
         4: .line 150
            invokeinterface io.netty.channel.ChannelHandlerContext.fireExceptionCaught:(Ljava/lang/Throwable;)Lio/netty/channel/ChannelHandlerContext;
            pop
         5: .line 153
            return
        end local 2 // java.lang.String length
        end local 1 // io.netty.channel.ChannelHandlerContext ctx
        end local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lio/netty/handler/codec/LineBasedFrameDecoder;
            0    6     1     ctx  Lio/netty/channel/ChannelHandlerContext;
            0    6     2  length  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      ctx     final
      length  

  private int findEndOfLine(io.netty.buffer.ByteBuf);
    descriptor: (Lio/netty/buffer/ByteBuf;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
        start local 1 // io.netty.buffer.ByteBuf buffer
         0: .line 160
            aload 1 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.readableBytes:()I
            istore 2 /* totalLength */
        start local 2 // int totalLength
         1: .line 161
            aload 1 /* buffer */
            aload 1 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.readerIndex:()I
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.offset:I
            iadd
            iload 2 /* totalLength */
            aload 0 /* this */
            getfield io.netty.handler.codec.LineBasedFrameDecoder.offset:I
            isub
            getstatic io.netty.util.ByteProcessor.FIND_LF:Lio/netty/util/ByteProcessor;
            invokevirtual io.netty.buffer.ByteBuf.forEachByte:(IILio/netty/util/ByteProcessor;)I
            istore 3 /* i */
        start local 3 // int i
         2: .line 162
            iload 3 /* i */
            iflt 7
         3: .line 163
            aload 0 /* this */
            iconst_0
            putfield io.netty.handler.codec.LineBasedFrameDecoder.offset:I
         4: .line 164
            iload 3 /* i */
            ifle 8
            aload 1 /* buffer */
            iload 3 /* i */
            iconst_1
            isub
            invokevirtual io.netty.buffer.ByteBuf.getByte:(I)B
            bipush 13
            if_icmpne 8
         5: .line 165
            iinc 3 /* i */ -1
         6: .line 167
            goto 8
         7: .line 168
      StackMap locals: int int
      StackMap stack:
            aload 0 /* this */
            iload 2 /* totalLength */
            putfield io.netty.handler.codec.LineBasedFrameDecoder.offset:I
         8: .line 170
      StackMap locals:
      StackMap stack:
            iload 3 /* i */
            ireturn
        end local 3 // int i
        end local 2 // int totalLength
        end local 1 // io.netty.buffer.ByteBuf buffer
        end local 0 // io.netty.handler.codec.LineBasedFrameDecoder this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    9     0         this  Lio/netty/handler/codec/LineBasedFrameDecoder;
            0    9     1       buffer  Lio/netty/buffer/ByteBuf;
            1    9     2  totalLength  I
            2    9     3            i  I
    MethodParameters:
        Name  Flags
      buffer  final
}
SourceFile: "LineBasedFrameDecoder.java"