public abstract class io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker
  super_class: java.lang.Object
{
  private static final java.nio.channels.ClosedChannelException CLOSED_CHANNEL_EXCEPTION;
    descriptor: Ljava/nio/channels/ClosedChannelException;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String HTTP_SCHEME_PREFIX;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String HTTPS_SCHEME_PREFIX;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.net.URI uri;
    descriptor: Ljava/net/URI;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final io.netty.handler.codec.http.websocketx.WebSocketVersion version;
    descriptor: Lio/netty/handler/codec/http/websocketx/WebSocketVersion;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private volatile boolean handshakeComplete;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private final java.lang.String expectedSubprotocol;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private volatile java.lang.String actualSubprotocol;
    descriptor: Ljava/lang/String;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  protected final io.netty.handler.codec.http.HttpHeaders customHeaders;
    descriptor: Lio/netty/handler/codec/http/HttpHeaders;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  private final int maxFramePayloadLength;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 49
            new java.nio.channels.ClosedChannelException
            dup
            invokespecial java.nio.channels.ClosedChannelException.<init>:()V
            ldc Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            ldc "processHandshake(...)"
         1: .line 48
            invokestatic io.netty.util.internal.ThrowableUtil.unknownStackTrace:(Ljava/lang/Throwable;Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Throwable;
            checkcast java.nio.channels.ClosedChannelException
            putstatic io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.CLOSED_CHANNEL_EXCEPTION:Ljava/nio/channels/ClosedChannelException;
         2: .line 51
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            getstatic io.netty.handler.codec.http.HttpScheme.HTTP:Lio/netty/handler/codec/http/HttpScheme;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "://"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            putstatic io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.HTTP_SCHEME_PREFIX:Ljava/lang/String;
         3: .line 52
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            getstatic io.netty.handler.codec.http.HttpScheme.HTTPS:Lio/netty/handler/codec/http/HttpScheme;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "://"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            putstatic io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.HTTPS_SCHEME_PREFIX:Ljava/lang/String;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  protected void <init>(java.net.URI, io.netty.handler.codec.http.websocketx.WebSocketVersion, java.lang.String, io.netty.handler.codec.http.HttpHeaders, int);
    descriptor: (Ljava/net/URI;Lio/netty/handler/codec/http/websocketx/WebSocketVersion;Ljava/lang/String;Lio/netty/handler/codec/http/HttpHeaders;I)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=6, args_size=6
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
        start local 1 // java.net.URI uri
        start local 2 // io.netty.handler.codec.http.websocketx.WebSocketVersion version
        start local 3 // java.lang.String subprotocol
        start local 4 // io.netty.handler.codec.http.HttpHeaders customHeaders
        start local 5 // int maxFramePayloadLength
         0: .line 83
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 85
            aload 0 /* this */
            aload 1 /* uri */
            putfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.uri:Ljava/net/URI;
         2: .line 86
            aload 0 /* this */
            aload 2 /* version */
            putfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.version:Lio/netty/handler/codec/http/websocketx/WebSocketVersion;
         3: .line 87
            aload 0 /* this */
            aload 3 /* subprotocol */
            putfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.expectedSubprotocol:Ljava/lang/String;
         4: .line 88
            aload 0 /* this */
            aload 4 /* customHeaders */
            putfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.customHeaders:Lio/netty/handler/codec/http/HttpHeaders;
         5: .line 89
            aload 0 /* this */
            iload 5 /* maxFramePayloadLength */
            putfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.maxFramePayloadLength:I
         6: .line 90
            return
        end local 5 // int maxFramePayloadLength
        end local 4 // io.netty.handler.codec.http.HttpHeaders customHeaders
        end local 3 // java.lang.String subprotocol
        end local 2 // io.netty.handler.codec.http.websocketx.WebSocketVersion version
        end local 1 // java.net.URI uri
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    7     0                   this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            0    7     1                    uri  Ljava/net/URI;
            0    7     2                version  Lio/netty/handler/codec/http/websocketx/WebSocketVersion;
            0    7     3            subprotocol  Ljava/lang/String;
            0    7     4          customHeaders  Lio/netty/handler/codec/http/HttpHeaders;
            0    7     5  maxFramePayloadLength  I
    MethodParameters:
                       Name  Flags
      uri                    
      version                
      subprotocol            
      customHeaders          
      maxFramePayloadLength  

  public java.net.URI uri();
    descriptor: ()Ljava/net/URI;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
         0: .line 96
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.uri:Ljava/net/URI;
            areturn
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;

  public io.netty.handler.codec.http.websocketx.WebSocketVersion version();
    descriptor: ()Lio/netty/handler/codec/http/websocketx/WebSocketVersion;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
         0: .line 103
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.version:Lio/netty/handler/codec/http/websocketx/WebSocketVersion;
            areturn
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;

  public int maxFramePayloadLength();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
         0: .line 110
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.maxFramePayloadLength:I
            ireturn
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;

  public boolean isHandshakeComplete();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
         0: .line 117
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.handshakeComplete:Z
            ireturn
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;

  private void setHandshakeComplete();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
         0: .line 121
            aload 0 /* this */
            iconst_1
            putfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.handshakeComplete:Z
         1: .line 122
            return
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;

  public java.lang.String expectedSubprotocol();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
         0: .line 128
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.expectedSubprotocol:Ljava/lang/String;
            areturn
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;

  public java.lang.String actualSubprotocol();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
         0: .line 136
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.actualSubprotocol:Ljava/lang/String;
            areturn
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;

  private void setActualSubprotocol(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
        start local 1 // java.lang.String actualSubprotocol
         0: .line 140
            aload 0 /* this */
            aload 1 /* actualSubprotocol */
            putfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.actualSubprotocol:Ljava/lang/String;
         1: .line 141
            return
        end local 1 // java.lang.String actualSubprotocol
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    2     0               this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            0    2     1  actualSubprotocol  Ljava/lang/String;
    MethodParameters:
                   Name  Flags
      actualSubprotocol  

  public io.netty.channel.ChannelFuture handshake(io.netty.channel.Channel);
    descriptor: (Lio/netty/channel/Channel;)Lio/netty/channel/ChannelFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
        start local 1 // io.netty.channel.Channel channel
         0: .line 150
            aload 1 /* channel */
            ifnonnull 2
         1: .line 151
            new java.lang.NullPointerException
            dup
            ldc "channel"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 153
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* channel */
            aload 1 /* channel */
            invokeinterface io.netty.channel.Channel.newPromise:()Lio/netty/channel/ChannelPromise;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.handshake:(Lio/netty/channel/Channel;Lio/netty/channel/ChannelPromise;)Lio/netty/channel/ChannelFuture;
            areturn
        end local 1 // io.netty.channel.Channel channel
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            0    3     1  channel  Lio/netty/channel/Channel;
    MethodParameters:
         Name  Flags
      channel  

  public final io.netty.channel.ChannelFuture handshake(io.netty.channel.Channel, io.netty.channel.ChannelPromise);
    descriptor: (Lio/netty/channel/Channel;Lio/netty/channel/ChannelPromise;)Lio/netty/channel/ChannelFuture;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=5, locals=6, args_size=3
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
        start local 1 // io.netty.channel.Channel channel
        start local 2 // io.netty.channel.ChannelPromise promise
         0: .line 165
            aload 0 /* this */
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.newHandshakeRequest:()Lio/netty/handler/codec/http/FullHttpRequest;
            astore 3 /* request */
        start local 3 // io.netty.handler.codec.http.FullHttpRequest request
         1: .line 167
            aload 1 /* channel */
            invokeinterface io.netty.channel.Channel.pipeline:()Lio/netty/channel/ChannelPipeline;
            ldc Lio/netty/handler/codec/http/HttpResponseDecoder;
            invokeinterface io.netty.channel.ChannelPipeline.get:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandler;
            checkcast io.netty.handler.codec.http.HttpResponseDecoder
            astore 4 /* decoder */
        start local 4 // io.netty.handler.codec.http.HttpResponseDecoder decoder
         2: .line 168
            aload 4 /* decoder */
            ifnonnull 7
         3: .line 169
            aload 1 /* channel */
            invokeinterface io.netty.channel.Channel.pipeline:()Lio/netty/channel/ChannelPipeline;
            ldc Lio/netty/handler/codec/http/HttpClientCodec;
            invokeinterface io.netty.channel.ChannelPipeline.get:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandler;
            checkcast io.netty.handler.codec.http.HttpClientCodec
            astore 5 /* codec */
        start local 5 // io.netty.handler.codec.http.HttpClientCodec codec
         4: .line 170
            aload 5 /* codec */
            ifnonnull 7
         5: .line 171
            aload 2 /* promise */
            new java.lang.IllegalStateException
            dup
            ldc "ChannelPipeline does not contain a HttpResponseDecoder or HttpClientCodec"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            invokeinterface io.netty.channel.ChannelPromise.setFailure:(Ljava/lang/Throwable;)Lio/netty/channel/ChannelPromise;
            pop
         6: .line 173
            aload 2 /* promise */
            areturn
        end local 5 // io.netty.handler.codec.http.HttpClientCodec codec
         7: .line 177
      StackMap locals: io.netty.handler.codec.http.FullHttpRequest io.netty.handler.codec.http.HttpResponseDecoder
      StackMap stack:
            aload 1 /* channel */
            aload 3 /* request */
            invokeinterface io.netty.channel.Channel.writeAndFlush:(Ljava/lang/Object;)Lio/netty/channel/ChannelFuture;
            new io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$1
            dup
            aload 0 /* this */
            aload 2 /* promise */
            invokespecial io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$1.<init>:(Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;Lio/netty/channel/ChannelPromise;)V
            invokeinterface io.netty.channel.ChannelFuture.addListener:(Lio/netty/util/concurrent/GenericFutureListener;)Lio/netty/channel/ChannelFuture;
            pop
         8: .line 199
            aload 2 /* promise */
            areturn
        end local 4 // io.netty.handler.codec.http.HttpResponseDecoder decoder
        end local 3 // io.netty.handler.codec.http.FullHttpRequest request
        end local 2 // io.netty.channel.ChannelPromise promise
        end local 1 // io.netty.channel.Channel channel
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            0    9     1  channel  Lio/netty/channel/Channel;
            0    9     2  promise  Lio/netty/channel/ChannelPromise;
            1    9     3  request  Lio/netty/handler/codec/http/FullHttpRequest;
            2    9     4  decoder  Lio/netty/handler/codec/http/HttpResponseDecoder;
            4    7     5    codec  Lio/netty/handler/codec/http/HttpClientCodec;
    MethodParameters:
         Name  Flags
      channel  
      promise  final

  protected abstract io.netty.handler.codec.http.FullHttpRequest newHandshakeRequest();
    descriptor: ()Lio/netty/handler/codec/http/FullHttpRequest;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  public final void finishHandshake(io.netty.channel.Channel, io.netty.handler.codec.http.FullHttpResponse);
    descriptor: (Lio/netty/channel/Channel;Lio/netty/handler/codec/http/FullHttpResponse;)V
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=7, locals=11, args_size=3
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
        start local 1 // io.netty.channel.Channel channel
        start local 2 // io.netty.handler.codec.http.FullHttpResponse response
         0: .line 216
            aload 0 /* this */
            aload 2 /* response */
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.verify:(Lio/netty/handler/codec/http/FullHttpResponse;)V
         1: .line 220
            aload 2 /* response */
            invokeinterface io.netty.handler.codec.http.FullHttpResponse.headers:()Lio/netty/handler/codec/http/HttpHeaders;
            getstatic io.netty.handler.codec.http.HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL:Lio/netty/util/AsciiString;
            invokevirtual io.netty.handler.codec.http.HttpHeaders.get:(Ljava/lang/CharSequence;)Ljava/lang/String;
            astore 3 /* receivedProtocol */
        start local 3 // java.lang.String receivedProtocol
         2: .line 221
            aload 3 /* receivedProtocol */
            ifnull 3
            aload 3 /* receivedProtocol */
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            goto 4
      StackMap locals: java.lang.String
      StackMap stack:
         3: aconst_null
      StackMap locals:
      StackMap stack: java.lang.String
         4: astore 3 /* receivedProtocol */
         5: .line 222
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.expectedSubprotocol:Ljava/lang/String;
            ifnull 6
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.expectedSubprotocol:Ljava/lang/String;
            goto 7
      StackMap locals:
      StackMap stack:
         6: ldc ""
      StackMap locals:
      StackMap stack: java.lang.String
         7: astore 4 /* expectedProtocol */
        start local 4 // java.lang.String expectedProtocol
         8: .line 223
            iconst_0
            istore 5 /* protocolValid */
        start local 5 // boolean protocolValid
         9: .line 225
            aload 4 /* expectedProtocol */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 13
            aload 3 /* receivedProtocol */
            ifnonnull 13
        10: .line 227
            iconst_1
            istore 5 /* protocolValid */
        11: .line 228
            aload 0 /* this */
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.expectedSubprotocol:Ljava/lang/String;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.setActualSubprotocol:(Ljava/lang/String;)V
        12: .line 229
            goto 22
      StackMap locals: java.lang.String int
      StackMap stack:
        13: aload 4 /* expectedProtocol */
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 22
            aload 3 /* receivedProtocol */
            ifnull 22
            aload 3 /* receivedProtocol */
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 22
        14: .line 231
            aload 4 /* expectedProtocol */
            ldc ","
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            dup
            astore 9
            arraylength
            istore 8
            iconst_0
            istore 7
            goto 21
      StackMap locals: io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker io.netty.channel.Channel io.netty.handler.codec.http.FullHttpResponse java.lang.String java.lang.String int top int int java.lang.String[]
      StackMap stack:
        15: aload 9
            iload 7
            aaload
            astore 6 /* protocol */
        start local 6 // java.lang.String protocol
        16: .line 232
            aload 6 /* protocol */
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            aload 3 /* receivedProtocol */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 20
        17: .line 233
            iconst_1
            istore 5 /* protocolValid */
        18: .line 234
            aload 0 /* this */
            aload 3 /* receivedProtocol */
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.setActualSubprotocol:(Ljava/lang/String;)V
        19: .line 235
            goto 22
        end local 6 // java.lang.String protocol
        20: .line 231
      StackMap locals:
      StackMap stack:
            iinc 7 1
      StackMap locals:
      StackMap stack:
        21: iload 7
            iload 8
            if_icmplt 15
        22: .line 240
      StackMap locals: io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker io.netty.channel.Channel io.netty.handler.codec.http.FullHttpResponse java.lang.String java.lang.String int
      StackMap stack:
            iload 5 /* protocolValid */
            ifne 27
        23: .line 241
            new io.netty.handler.codec.http.websocketx.WebSocketHandshakeException
            dup
        24: .line 242
            ldc "Invalid subprotocol. Actual: %s. Expected one of: %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
        25: .line 243
            aload 3 /* receivedProtocol */
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.expectedSubprotocol:Ljava/lang/String;
            aastore
        26: .line 241
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial io.netty.handler.codec.http.websocketx.WebSocketHandshakeException.<init>:(Ljava/lang/String;)V
            athrow
        27: .line 246
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.setHandshakeComplete:()V
        28: .line 248
            aload 1 /* channel */
            invokeinterface io.netty.channel.Channel.pipeline:()Lio/netty/channel/ChannelPipeline;
            astore 6 /* p */
        start local 6 // io.netty.channel.ChannelPipeline p
        29: .line 250
            aload 6 /* p */
            ldc Lio/netty/handler/codec/http/HttpContentDecompressor;
            invokeinterface io.netty.channel.ChannelPipeline.get:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandler;
            checkcast io.netty.handler.codec.http.HttpContentDecompressor
            astore 7 /* decompressor */
        start local 7 // io.netty.handler.codec.http.HttpContentDecompressor decompressor
        30: .line 251
            aload 7 /* decompressor */
            ifnull 32
        31: .line 252
            aload 6 /* p */
            aload 7 /* decompressor */
            invokeinterface io.netty.channel.ChannelPipeline.remove:(Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;
            pop
        32: .line 256
      StackMap locals: io.netty.channel.ChannelPipeline io.netty.handler.codec.http.HttpContentDecompressor
      StackMap stack:
            aload 6 /* p */
            ldc Lio/netty/handler/codec/http/HttpObjectAggregator;
            invokeinterface io.netty.channel.ChannelPipeline.get:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandler;
            checkcast io.netty.handler.codec.http.HttpObjectAggregator
            astore 8 /* aggregator */
        start local 8 // io.netty.handler.codec.http.HttpObjectAggregator aggregator
        33: .line 257
            aload 8 /* aggregator */
            ifnull 35
        34: .line 258
            aload 6 /* p */
            aload 8 /* aggregator */
            invokeinterface io.netty.channel.ChannelPipeline.remove:(Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;
            pop
        35: .line 261
      StackMap locals: io.netty.handler.codec.http.HttpObjectAggregator
      StackMap stack:
            aload 6 /* p */
            ldc Lio/netty/handler/codec/http/HttpResponseDecoder;
            invokeinterface io.netty.channel.ChannelPipeline.context:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandlerContext;
            astore 9 /* ctx */
        start local 9 // io.netty.channel.ChannelHandlerContext ctx
        36: .line 262
            aload 9 /* ctx */
            ifnonnull 45
        37: .line 263
            aload 6 /* p */
            ldc Lio/netty/handler/codec/http/HttpClientCodec;
            invokeinterface io.netty.channel.ChannelPipeline.context:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandlerContext;
            astore 9 /* ctx */
        38: .line 264
            aload 9 /* ctx */
            ifnonnull 40
        39: .line 265
            new java.lang.IllegalStateException
            dup
            ldc "ChannelPipeline does not contain a HttpRequestEncoder or HttpClientCodec"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        40: .line 268
      StackMap locals: io.netty.channel.ChannelHandlerContext
      StackMap stack:
            aload 9 /* ctx */
            invokeinterface io.netty.channel.ChannelHandlerContext.handler:()Lio/netty/channel/ChannelHandler;
            checkcast io.netty.handler.codec.http.HttpClientCodec
            astore 10 /* codec */
        start local 10 // io.netty.handler.codec.http.HttpClientCodec codec
        41: .line 270
            aload 10 /* codec */
            invokevirtual io.netty.handler.codec.http.HttpClientCodec.removeOutboundHandler:()V
        42: .line 272
            aload 6 /* p */
            aload 9 /* ctx */
            invokeinterface io.netty.channel.ChannelHandlerContext.name:()Ljava/lang/String;
            ldc "ws-decoder"
            aload 0 /* this */
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.newWebsocketDecoder:()Lio/netty/handler/codec/http/websocketx/WebSocketFrameDecoder;
            invokeinterface io.netty.channel.ChannelPipeline.addAfter:(Ljava/lang/String;Ljava/lang/String;Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;
            pop
        43: .line 277
            aload 1 /* channel */
            invokeinterface io.netty.channel.Channel.eventLoop:()Lio/netty/channel/EventLoop;
            new io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$2
            dup
            aload 0 /* this */
            aload 6 /* p */
            aload 10 /* codec */
            invokespecial io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$2.<init>:(Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;Lio/netty/channel/ChannelPipeline;Lio/netty/handler/codec/http/HttpClientCodec;)V
            invokeinterface io.netty.channel.EventLoop.execute:(Ljava/lang/Runnable;)V
        end local 10 // io.netty.handler.codec.http.HttpClientCodec codec
        44: .line 283
            goto 50
        45: .line 284
      StackMap locals:
      StackMap stack:
            aload 6 /* p */
            ldc Lio/netty/handler/codec/http/HttpRequestEncoder;
            invokeinterface io.netty.channel.ChannelPipeline.get:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandler;
            ifnull 47
        46: .line 286
            aload 6 /* p */
            ldc Lio/netty/handler/codec/http/HttpRequestEncoder;
            invokeinterface io.netty.channel.ChannelPipeline.remove:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandler;
            pop
        47: .line 288
      StackMap locals:
      StackMap stack:
            aload 9 /* ctx */
            astore 10 /* context */
        start local 10 // io.netty.channel.ChannelHandlerContext context
        48: .line 289
            aload 6 /* p */
            aload 10 /* context */
            invokeinterface io.netty.channel.ChannelHandlerContext.name:()Ljava/lang/String;
            ldc "ws-decoder"
            aload 0 /* this */
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.newWebsocketDecoder:()Lio/netty/handler/codec/http/websocketx/WebSocketFrameDecoder;
            invokeinterface io.netty.channel.ChannelPipeline.addAfter:(Ljava/lang/String;Ljava/lang/String;Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;
            pop
        49: .line 294
            aload 1 /* channel */
            invokeinterface io.netty.channel.Channel.eventLoop:()Lio/netty/channel/EventLoop;
            new io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$3
            dup
            aload 0 /* this */
            aload 6 /* p */
            aload 10 /* context */
            invokespecial io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$3.<init>:(Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;Lio/netty/channel/ChannelPipeline;Lio/netty/channel/ChannelHandlerContext;)V
            invokeinterface io.netty.channel.EventLoop.execute:(Ljava/lang/Runnable;)V
        end local 10 // io.netty.channel.ChannelHandlerContext context
        50: .line 301
      StackMap locals:
      StackMap stack:
            return
        end local 9 // io.netty.channel.ChannelHandlerContext ctx
        end local 8 // io.netty.handler.codec.http.HttpObjectAggregator aggregator
        end local 7 // io.netty.handler.codec.http.HttpContentDecompressor decompressor
        end local 6 // io.netty.channel.ChannelPipeline p
        end local 5 // boolean protocolValid
        end local 4 // java.lang.String expectedProtocol
        end local 3 // java.lang.String receivedProtocol
        end local 2 // io.netty.handler.codec.http.FullHttpResponse response
        end local 1 // io.netty.channel.Channel channel
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   51     0              this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            0   51     1           channel  Lio/netty/channel/Channel;
            0   51     2          response  Lio/netty/handler/codec/http/FullHttpResponse;
            2   51     3  receivedProtocol  Ljava/lang/String;
            8   51     4  expectedProtocol  Ljava/lang/String;
            9   51     5     protocolValid  Z
           16   20     6          protocol  Ljava/lang/String;
           29   51     6                 p  Lio/netty/channel/ChannelPipeline;
           30   51     7      decompressor  Lio/netty/handler/codec/http/HttpContentDecompressor;
           33   51     8        aggregator  Lio/netty/handler/codec/http/HttpObjectAggregator;
           36   51     9               ctx  Lio/netty/channel/ChannelHandlerContext;
           41   44    10             codec  Lio/netty/handler/codec/http/HttpClientCodec;
           48   50    10           context  Lio/netty/channel/ChannelHandlerContext;
    MethodParameters:
          Name  Flags
      channel   
      response  

  public final io.netty.channel.ChannelFuture processHandshake(io.netty.channel.Channel, io.netty.handler.codec.http.HttpResponse);
    descriptor: (Lio/netty/channel/Channel;Lio/netty/handler/codec/http/HttpResponse;)Lio/netty/channel/ChannelFuture;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
        start local 1 // io.netty.channel.Channel channel
        start local 2 // io.netty.handler.codec.http.HttpResponse response
         0: .line 314
            aload 0 /* this */
            aload 1 /* channel */
            aload 2 /* response */
            aload 1 /* channel */
            invokeinterface io.netty.channel.Channel.newPromise:()Lio/netty/channel/ChannelPromise;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.processHandshake:(Lio/netty/channel/Channel;Lio/netty/handler/codec/http/HttpResponse;Lio/netty/channel/ChannelPromise;)Lio/netty/channel/ChannelFuture;
            areturn
        end local 2 // io.netty.handler.codec.http.HttpResponse response
        end local 1 // io.netty.channel.Channel channel
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            0    1     1   channel  Lio/netty/channel/Channel;
            0    1     2  response  Lio/netty/handler/codec/http/HttpResponse;
    MethodParameters:
          Name  Flags
      channel   final
      response  

  public final io.netty.channel.ChannelFuture processHandshake(io.netty.channel.Channel, io.netty.handler.codec.http.HttpResponse, io.netty.channel.ChannelPromise);
    descriptor: (Lio/netty/channel/Channel;Lio/netty/handler/codec/http/HttpResponse;Lio/netty/channel/ChannelPromise;)Lio/netty/channel/ChannelFuture;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=8, locals=8, args_size=4
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
        start local 1 // io.netty.channel.Channel channel
        start local 2 // io.netty.handler.codec.http.HttpResponse response
        start local 3 // io.netty.channel.ChannelPromise promise
         0: .line 331
            aload 2 /* response */
            instanceof io.netty.handler.codec.http.FullHttpResponse
            ifeq 7
         1: .line 333
            aload 0 /* this */
            aload 1 /* channel */
            aload 2 /* response */
            checkcast io.netty.handler.codec.http.FullHttpResponse
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake:(Lio/netty/channel/Channel;Lio/netty/handler/codec/http/FullHttpResponse;)V
         2: .line 334
            aload 3 /* promise */
            invokeinterface io.netty.channel.ChannelPromise.setSuccess:()Lio/netty/channel/ChannelPromise;
            pop
         3: .line 335
            goto 20
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 4 /* cause */
        start local 4 // java.lang.Throwable cause
         5: .line 336
            aload 3 /* promise */
            aload 4 /* cause */
            invokeinterface io.netty.channel.ChannelPromise.setFailure:(Ljava/lang/Throwable;)Lio/netty/channel/ChannelPromise;
            pop
        end local 4 // java.lang.Throwable cause
         6: .line 338
            goto 20
         7: .line 339
      StackMap locals:
      StackMap stack:
            aload 1 /* channel */
            invokeinterface io.netty.channel.Channel.pipeline:()Lio/netty/channel/ChannelPipeline;
            astore 4 /* p */
        start local 4 // io.netty.channel.ChannelPipeline p
         8: .line 340
            aload 4 /* p */
            ldc Lio/netty/handler/codec/http/HttpResponseDecoder;
            invokeinterface io.netty.channel.ChannelPipeline.context:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandlerContext;
            astore 5 /* ctx */
        start local 5 // io.netty.channel.ChannelHandlerContext ctx
         9: .line 341
            aload 5 /* ctx */
            ifnonnull 13
        10: .line 342
            aload 4 /* p */
            ldc Lio/netty/handler/codec/http/HttpClientCodec;
            invokeinterface io.netty.channel.ChannelPipeline.context:(Ljava/lang/Class;)Lio/netty/channel/ChannelHandlerContext;
            astore 5 /* ctx */
        11: .line 343
            aload 5 /* ctx */
            ifnonnull 13
        12: .line 344
            aload 3 /* promise */
            new java.lang.IllegalStateException
            dup
            ldc "ChannelPipeline does not contain a HttpResponseDecoder or HttpClientCodec"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            invokeinterface io.netty.channel.ChannelPromise.setFailure:(Ljava/lang/Throwable;)Lio/netty/channel/ChannelPromise;
            areturn
        13: .line 352
      StackMap locals: io.netty.channel.ChannelPipeline io.netty.channel.ChannelHandlerContext
      StackMap stack:
            ldc "httpAggregator"
            astore 6 /* aggregatorName */
        start local 6 // java.lang.String aggregatorName
        14: .line 353
            aload 4 /* p */
            aload 5 /* ctx */
            invokeinterface io.netty.channel.ChannelHandlerContext.name:()Ljava/lang/String;
            aload 6 /* aggregatorName */
            new io.netty.handler.codec.http.HttpObjectAggregator
            dup
            sipush 8192
            invokespecial io.netty.handler.codec.http.HttpObjectAggregator.<init>:(I)V
            invokeinterface io.netty.channel.ChannelPipeline.addAfter:(Ljava/lang/String;Ljava/lang/String;Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;
            pop
        15: .line 354
            aload 4 /* p */
            aload 6 /* aggregatorName */
            ldc "handshaker"
            new io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$4
            dup
            aload 0 /* this */
            aload 1 /* channel */
            aload 3 /* promise */
            invokespecial io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$4.<init>:(Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;Lio/netty/channel/Channel;Lio/netty/channel/ChannelPromise;)V
            invokeinterface io.netty.channel.ChannelPipeline.addAfter:(Ljava/lang/String;Ljava/lang/String;Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;
            pop
        16: .line 382
            aload 5 /* ctx */
            aload 2 /* response */
            invokestatic io.netty.util.ReferenceCountUtil.retain:(Ljava/lang/Object;)Ljava/lang/Object;
            invokeinterface io.netty.channel.ChannelHandlerContext.fireChannelRead:(Ljava/lang/Object;)Lio/netty/channel/ChannelHandlerContext;
            pop
        17: .line 383
            goto 20
      StackMap locals: io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker io.netty.channel.Channel io.netty.handler.codec.http.HttpResponse io.netty.channel.ChannelPromise io.netty.channel.ChannelPipeline io.netty.channel.ChannelHandlerContext java.lang.String
      StackMap stack: java.lang.Throwable
        18: astore 7 /* cause */
        start local 7 // java.lang.Throwable cause
        19: .line 384
            aload 3 /* promise */
            aload 7 /* cause */
            invokeinterface io.netty.channel.ChannelPromise.setFailure:(Ljava/lang/Throwable;)Lio/netty/channel/ChannelPromise;
            pop
        end local 7 // java.lang.Throwable cause
        end local 6 // java.lang.String aggregatorName
        end local 5 // io.netty.channel.ChannelHandlerContext ctx
        end local 4 // io.netty.channel.ChannelPipeline p
        20: .line 387
      StackMap locals:
      StackMap stack:
            aload 3 /* promise */
            areturn
        end local 3 // io.netty.channel.ChannelPromise promise
        end local 2 // io.netty.handler.codec.http.HttpResponse response
        end local 1 // io.netty.channel.Channel channel
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   21     0            this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            0   21     1         channel  Lio/netty/channel/Channel;
            0   21     2        response  Lio/netty/handler/codec/http/HttpResponse;
            0   21     3         promise  Lio/netty/channel/ChannelPromise;
            5    6     4           cause  Ljava/lang/Throwable;
            8   20     4               p  Lio/netty/channel/ChannelPipeline;
            9   20     5             ctx  Lio/netty/channel/ChannelHandlerContext;
           14   20     6  aggregatorName  Ljava/lang/String;
           19   20     7           cause  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1     3       4  Class java.lang.Throwable
          16    17      18  Class java.lang.Throwable
    MethodParameters:
          Name  Flags
      channel   final
      response  
      promise   final

  protected abstract void verify(io.netty.handler.codec.http.FullHttpResponse);
    descriptor: (Lio/netty/handler/codec/http/FullHttpResponse;)V
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    MethodParameters:
          Name  Flags
      response  

  protected abstract io.netty.handler.codec.http.websocketx.WebSocketFrameDecoder newWebsocketDecoder();
    descriptor: ()Lio/netty/handler/codec/http/websocketx/WebSocketFrameDecoder;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  protected abstract io.netty.handler.codec.http.websocketx.WebSocketFrameEncoder newWebSocketEncoder();
    descriptor: ()Lio/netty/handler/codec/http/websocketx/WebSocketFrameEncoder;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  public io.netty.channel.ChannelFuture close(io.netty.channel.Channel, io.netty.handler.codec.http.websocketx.CloseWebSocketFrame);
    descriptor: (Lio/netty/channel/Channel;Lio/netty/handler/codec/http/websocketx/CloseWebSocketFrame;)Lio/netty/channel/ChannelFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
        start local 1 // io.netty.channel.Channel channel
        start local 2 // io.netty.handler.codec.http.websocketx.CloseWebSocketFrame frame
         0: .line 414
            aload 1 /* channel */
            ifnonnull 2
         1: .line 415
            new java.lang.NullPointerException
            dup
            ldc "channel"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 417
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* channel */
            aload 2 /* frame */
            aload 1 /* channel */
            invokeinterface io.netty.channel.Channel.newPromise:()Lio/netty/channel/ChannelPromise;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.close:(Lio/netty/channel/Channel;Lio/netty/handler/codec/http/websocketx/CloseWebSocketFrame;Lio/netty/channel/ChannelPromise;)Lio/netty/channel/ChannelFuture;
            areturn
        end local 2 // io.netty.handler.codec.http.websocketx.CloseWebSocketFrame frame
        end local 1 // io.netty.channel.Channel channel
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            0    3     1  channel  Lio/netty/channel/Channel;
            0    3     2    frame  Lio/netty/handler/codec/http/websocketx/CloseWebSocketFrame;
    MethodParameters:
         Name  Flags
      channel  
      frame    

  public io.netty.channel.ChannelFuture close(io.netty.channel.Channel, io.netty.handler.codec.http.websocketx.CloseWebSocketFrame, io.netty.channel.ChannelPromise);
    descriptor: (Lio/netty/channel/Channel;Lio/netty/handler/codec/http/websocketx/CloseWebSocketFrame;Lio/netty/channel/ChannelPromise;)Lio/netty/channel/ChannelFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
        start local 1 // io.netty.channel.Channel channel
        start local 2 // io.netty.handler.codec.http.websocketx.CloseWebSocketFrame frame
        start local 3 // io.netty.channel.ChannelPromise promise
         0: .line 431
            aload 1 /* channel */
            ifnonnull 2
         1: .line 432
            new java.lang.NullPointerException
            dup
            ldc "channel"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 434
      StackMap locals:
      StackMap stack:
            aload 1 /* channel */
            aload 2 /* frame */
            aload 3 /* promise */
            invokeinterface io.netty.channel.Channel.writeAndFlush:(Ljava/lang/Object;Lio/netty/channel/ChannelPromise;)Lio/netty/channel/ChannelFuture;
            areturn
        end local 3 // io.netty.channel.ChannelPromise promise
        end local 2 // io.netty.handler.codec.http.websocketx.CloseWebSocketFrame frame
        end local 1 // io.netty.channel.Channel channel
        end local 0 // io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lio/netty/handler/codec/http/websocketx/WebSocketClientHandshaker;
            0    3     1  channel  Lio/netty/channel/Channel;
            0    3     2    frame  Lio/netty/handler/codec/http/websocketx/CloseWebSocketFrame;
            0    3     3  promise  Lio/netty/channel/ChannelPromise;
    MethodParameters:
         Name  Flags
      channel  
      frame    
      promise  

  static java.lang.String rawPath(java.net.URI);
    descriptor: (Ljava/net/URI;)Ljava/lang/String;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // java.net.URI wsURL
         0: .line 441
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getRawPath:()Ljava/lang/String;
            astore 1 /* path */
        start local 1 // java.lang.String path
         1: .line 442
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getRawQuery:()Ljava/lang/String;
            astore 2 /* query */
        start local 2 // java.lang.String query
         2: .line 443
            aload 2 /* query */
            ifnull 4
            aload 2 /* query */
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 4
         3: .line 444
            new java.lang.StringBuilder
            dup
            aload 1 /* path */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 63
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 2 /* query */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 1 /* path */
         4: .line 447
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
            aload 1 /* path */
            ifnull 5
            aload 1 /* path */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 6
      StackMap locals:
      StackMap stack:
         5: ldc "/"
            goto 7
      StackMap locals:
      StackMap stack:
         6: aload 1 /* path */
      StackMap locals:
      StackMap stack: java.lang.String
         7: areturn
        end local 2 // java.lang.String query
        end local 1 // java.lang.String path
        end local 0 // java.net.URI wsURL
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    8     0  wsURL  Ljava/net/URI;
            1    8     1   path  Ljava/lang/String;
            2    8     2  query  Ljava/lang/String;
    MethodParameters:
       Name  Flags
      wsURL  

  static java.lang.CharSequence websocketHostValue(java.net.URI);
    descriptor: (Ljava/net/URI;)Ljava/lang/CharSequence;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // java.net.URI wsURL
         0: .line 451
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getPort:()I
            istore 1 /* port */
        start local 1 // int port
         1: .line 452
            iload 1 /* port */
            iconst_m1
            if_icmpne 3
         2: .line 453
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getHost:()Ljava/lang/String;
            areturn
         3: .line 455
      StackMap locals: int
      StackMap stack:
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getHost:()Ljava/lang/String;
            astore 2 /* host */
        start local 2 // java.lang.String host
         4: .line 456
            iload 1 /* port */
            getstatic io.netty.handler.codec.http.HttpScheme.HTTP:Lio/netty/handler/codec/http/HttpScheme;
            invokevirtual io.netty.handler.codec.http.HttpScheme.port:()I
            if_icmpne 10
         5: .line 457
            getstatic io.netty.handler.codec.http.HttpScheme.HTTP:Lio/netty/handler/codec/http/HttpScheme;
            invokevirtual io.netty.handler.codec.http.HttpScheme.name:()Lio/netty/util/AsciiString;
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getScheme:()Ljava/lang/String;
            invokevirtual io.netty.util.AsciiString.contentEquals:(Ljava/lang/CharSequence;)Z
            ifne 7
         6: .line 458
            getstatic io.netty.handler.codec.http.websocketx.WebSocketScheme.WS:Lio/netty/handler/codec/http/websocketx/WebSocketScheme;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketScheme.name:()Lio/netty/util/AsciiString;
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getScheme:()Ljava/lang/String;
            invokevirtual io.netty.util.AsciiString.contentEquals:(Ljava/lang/CharSequence;)Z
            ifeq 8
         7: .line 459
      StackMap locals: java.lang.String
      StackMap stack:
            aload 2 /* host */
            goto 9
      StackMap locals:
      StackMap stack:
         8: aload 2 /* host */
            iload 1 /* port */
            invokestatic io.netty.util.NetUtil.toSocketAddressString:(Ljava/lang/String;I)Ljava/lang/String;
         9: .line 457
      StackMap locals:
      StackMap stack: java.lang.String
            areturn
        10: .line 461
      StackMap locals:
      StackMap stack:
            iload 1 /* port */
            getstatic io.netty.handler.codec.http.HttpScheme.HTTPS:Lio/netty/handler/codec/http/HttpScheme;
            invokevirtual io.netty.handler.codec.http.HttpScheme.port:()I
            if_icmpne 16
        11: .line 462
            getstatic io.netty.handler.codec.http.HttpScheme.HTTPS:Lio/netty/handler/codec/http/HttpScheme;
            invokevirtual io.netty.handler.codec.http.HttpScheme.name:()Lio/netty/util/AsciiString;
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getScheme:()Ljava/lang/String;
            invokevirtual io.netty.util.AsciiString.contentEquals:(Ljava/lang/CharSequence;)Z
            ifne 13
        12: .line 463
            getstatic io.netty.handler.codec.http.websocketx.WebSocketScheme.WSS:Lio/netty/handler/codec/http/websocketx/WebSocketScheme;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketScheme.name:()Lio/netty/util/AsciiString;
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getScheme:()Ljava/lang/String;
            invokevirtual io.netty.util.AsciiString.contentEquals:(Ljava/lang/CharSequence;)Z
            ifeq 14
        13: .line 464
      StackMap locals:
      StackMap stack:
            aload 2 /* host */
            goto 15
      StackMap locals:
      StackMap stack:
        14: aload 2 /* host */
            iload 1 /* port */
            invokestatic io.netty.util.NetUtil.toSocketAddressString:(Ljava/lang/String;I)Ljava/lang/String;
        15: .line 462
      StackMap locals:
      StackMap stack: java.lang.String
            areturn
        16: .line 469
      StackMap locals:
      StackMap stack:
            aload 2 /* host */
            iload 1 /* port */
            invokestatic io.netty.util.NetUtil.toSocketAddressString:(Ljava/lang/String;I)Ljava/lang/String;
            areturn
        end local 2 // java.lang.String host
        end local 1 // int port
        end local 0 // java.net.URI wsURL
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   17     0  wsURL  Ljava/net/URI;
            1   17     1   port  I
            4   17     2   host  Ljava/lang/String;
    MethodParameters:
       Name  Flags
      wsURL  

  static java.lang.CharSequence websocketOriginValue(java.net.URI);
    descriptor: (Ljava/net/URI;)Ljava/lang/CharSequence;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=6, args_size=1
        start local 0 // java.net.URI wsURL
         0: .line 473
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getScheme:()Ljava/lang/String;
            astore 1 /* scheme */
        start local 1 // java.lang.String scheme
         1: .line 475
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getPort:()I
            istore 3 /* port */
        start local 3 // int port
         2: .line 477
            getstatic io.netty.handler.codec.http.websocketx.WebSocketScheme.WSS:Lio/netty/handler/codec/http/websocketx/WebSocketScheme;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketScheme.name:()Lio/netty/util/AsciiString;
            aload 1 /* scheme */
            invokevirtual io.netty.util.AsciiString.contentEquals:(Ljava/lang/CharSequence;)Z
            ifne 5
         3: .line 478
            getstatic io.netty.handler.codec.http.HttpScheme.HTTPS:Lio/netty/handler/codec/http/HttpScheme;
            invokevirtual io.netty.handler.codec.http.HttpScheme.name:()Lio/netty/util/AsciiString;
            aload 1 /* scheme */
            invokevirtual io.netty.util.AsciiString.contentEquals:(Ljava/lang/CharSequence;)Z
            ifne 5
         4: .line 479
            aload 1 /* scheme */
            ifnonnull 8
            iload 3 /* port */
            getstatic io.netty.handler.codec.http.websocketx.WebSocketScheme.WSS:Lio/netty/handler/codec/http/websocketx/WebSocketScheme;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketScheme.port:()I
            if_icmpne 8
         5: .line 481
      StackMap locals: java.net.URI java.lang.String top int
      StackMap stack:
            getstatic io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.HTTPS_SCHEME_PREFIX:Ljava/lang/String;
            astore 2 /* schemePrefix */
        start local 2 // java.lang.String schemePrefix
         6: .line 482
            getstatic io.netty.handler.codec.http.websocketx.WebSocketScheme.WSS:Lio/netty/handler/codec/http/websocketx/WebSocketScheme;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketScheme.port:()I
            istore 4 /* defaultPort */
        start local 4 // int defaultPort
         7: .line 483
            goto 10
        end local 4 // int defaultPort
        end local 2 // java.lang.String schemePrefix
         8: .line 484
      StackMap locals:
      StackMap stack:
            getstatic io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.HTTP_SCHEME_PREFIX:Ljava/lang/String;
            astore 2 /* schemePrefix */
        start local 2 // java.lang.String schemePrefix
         9: .line 485
            getstatic io.netty.handler.codec.http.websocketx.WebSocketScheme.WS:Lio/netty/handler/codec/http/websocketx/WebSocketScheme;
            invokevirtual io.netty.handler.codec.http.websocketx.WebSocketScheme.port:()I
            istore 4 /* defaultPort */
        start local 4 // int defaultPort
        10: .line 489
      StackMap locals: java.net.URI java.lang.String java.lang.String int int
      StackMap stack:
            aload 0 /* wsURL */
            invokevirtual java.net.URI.getHost:()Ljava/lang/String;
            getstatic java.util.Locale.US:Ljava/util/Locale;
            invokevirtual java.lang.String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
            astore 5 /* host */
        start local 5 // java.lang.String host
        11: .line 491
            iload 3 /* port */
            iload 4 /* defaultPort */
            if_icmpeq 13
            iload 3 /* port */
            iconst_m1
            if_icmpeq 13
        12: .line 494
            new java.lang.StringBuilder
            dup
            aload 2 /* schemePrefix */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* host */
            iload 3 /* port */
            invokestatic io.netty.util.NetUtil.toSocketAddressString:(Ljava/lang/String;I)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        13: .line 496
      StackMap locals: java.lang.String
      StackMap stack:
            new java.lang.StringBuilder
            dup
            aload 2 /* schemePrefix */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* host */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 5 // java.lang.String host
        end local 4 // int defaultPort
        end local 3 // int port
        end local 2 // java.lang.String schemePrefix
        end local 1 // java.lang.String scheme
        end local 0 // java.net.URI wsURL
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   14     0         wsURL  Ljava/net/URI;
            1   14     1        scheme  Ljava/lang/String;
            6    8     2  schemePrefix  Ljava/lang/String;
            9   14     2  schemePrefix  Ljava/lang/String;
            2   14     3          port  I
            7    8     4   defaultPort  I
           10   14     4   defaultPort  I
           11   14     5          host  Ljava/lang/String;
    MethodParameters:
       Name  Flags
      wsURL  
}
SourceFile: "WebSocketClientHandshaker.java"
NestMembers:
  io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$1  io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$2  io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$3  io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$4
InnerClasses:
  io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$1
  io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$2
  io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$3
  io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker$4