public final class jdk.incubator.http.internal.websocket.WebSocketImpl implements jdk.incubator.http.WebSocket
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: jdk.incubator.http.internal.websocket.WebSocketImpl
  super_class: java.lang.Object
{
  private volatile boolean inputClosed;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

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

  private final java.util.concurrent.atomic.AtomicReference<jdk.incubator.http.internal.websocket.WebSocketImpl$State> state;
    descriptor: Ljava/util/concurrent/atomic/AtomicReference;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/atomic/AtomicReference<Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;>;

  private jdk.incubator.http.WebSocket$MessagePart part;
    descriptor: Ljdk/incubator/http/WebSocket$MessagePart;
    flags: (0x0002) ACC_PRIVATE

  private java.nio.ByteBuffer binaryData;
    descriptor: Ljava/nio/ByteBuffer;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.CharSequence text;
    descriptor: Ljava/lang/CharSequence;
    flags: (0x0002) ACC_PRIVATE

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

  private java.lang.String reason;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private final java.util.concurrent.atomic.AtomicReference<java.lang.Throwable> error;
    descriptor: Ljava/util/concurrent/atomic/AtomicReference;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/atomic/AtomicReference<Ljava/lang/Throwable;>;

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

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

  private final jdk.incubator.http.WebSocket$Listener listener;
    descriptor: Ljdk/incubator/http/WebSocket$Listener;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.concurrent.atomic.AtomicBoolean outstandingSend;
    descriptor: Ljava/util/concurrent/atomic/AtomicBoolean;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final jdk.incubator.http.internal.common.SequentialScheduler sendScheduler;
    descriptor: Ljdk/incubator/http/internal/common/SequentialScheduler;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.Queue<jdk.incubator.http.internal.common.Pair<jdk.incubator.http.internal.websocket.OutgoingMessage, java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket>>> queue;
    descriptor: Ljava/util/Queue;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Queue<Ljdk/incubator/http/internal/common/Pair<Ljdk/incubator/http/internal/websocket/OutgoingMessage;Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;>;>;

  private final jdk.incubator.http.internal.websocket.OutgoingMessage$Context context;
    descriptor: Ljdk/incubator/http/internal/websocket/OutgoingMessage$Context;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final jdk.incubator.http.internal.websocket.Transmitter transmitter;
    descriptor: Ljdk/incubator/http/internal/websocket/Transmitter;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final jdk.incubator.http.internal.websocket.Receiver receiver;
    descriptor: Ljdk/incubator/http/internal/websocket/Receiver;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final jdk.incubator.http.internal.common.SequentialScheduler receiveScheduler;
    descriptor: Ljdk/incubator/http/internal/common/SequentialScheduler;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final jdk.incubator.http.internal.common.Demand demand;
    descriptor: Ljdk/incubator/http/internal/common/Demand;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public static java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket> newInstanceAsync(jdk.incubator.http.internal.websocket.BuilderImpl);
    descriptor: (Ljdk/incubator/http/internal/websocket/BuilderImpl;)Ljava/util/concurrent/CompletableFuture;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=1
        start local 0 // jdk.incubator.http.internal.websocket.BuilderImpl b
         0: .line 121
            aload 0 /* b */
            invokedynamic apply(Ljdk/incubator/http/internal/websocket/BuilderImpl;)Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  jdk/incubator/http/internal/websocket/WebSocketImpl.lambda$0(Ljdk/incubator/http/internal/websocket/BuilderImpl;Ljdk/incubator/http/internal/websocket/OpeningHandshake$Result;)Ljdk/incubator/http/WebSocket; (6)
                  (Ljdk/incubator/http/internal/websocket/OpeningHandshake$Result;)Ljdk/incubator/http/WebSocket;
            astore 1 /* newWebSocket */
        start local 1 // java.util.function.Function newWebSocket
         1: .line 135
            new jdk.incubator.http.internal.websocket.OpeningHandshake
            dup
            aload 0 /* b */
            invokespecial jdk.incubator.http.internal.websocket.OpeningHandshake.<init>:(Ljdk/incubator/http/internal/websocket/BuilderImpl;)V
            astore 2 /* h */
        start local 2 // jdk.incubator.http.internal.websocket.OpeningHandshake h
         2: .line 136
            goto 5
        end local 2 // jdk.incubator.http.internal.websocket.OpeningHandshake h
      StackMap locals: jdk.incubator.http.internal.websocket.BuilderImpl java.util.function.Function
      StackMap stack: java.lang.Throwable
         3: astore 3 /* e */
        start local 3 // java.lang.Throwable e
         4: .line 137
            aload 3 /* e */
            invokestatic jdk.incubator.http.internal.common.MinimalFuture.failedFuture:(Ljava/lang/Throwable;)Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 3 // java.lang.Throwable e
        start local 2 // jdk.incubator.http.internal.websocket.OpeningHandshake h
         5: .line 139
      StackMap locals: jdk.incubator.http.internal.websocket.OpeningHandshake
      StackMap stack:
            aload 2 /* h */
            invokevirtual jdk.incubator.http.internal.websocket.OpeningHandshake.send:()Ljava/util/concurrent/CompletableFuture;
            aload 1 /* newWebSocket */
            invokevirtual java.util.concurrent.CompletableFuture.thenApply:(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 2 // jdk.incubator.http.internal.websocket.OpeningHandshake h
        end local 1 // java.util.function.Function newWebSocket
        end local 0 // jdk.incubator.http.internal.websocket.BuilderImpl b
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0             b  Ljdk/incubator/http/internal/websocket/BuilderImpl;
            1    6     1  newWebSocket  Ljava/util/function/Function<Ljdk/incubator/http/internal/websocket/OpeningHandshake$Result;Ljdk/incubator/http/WebSocket;>;
            2    3     2             h  Ljdk/incubator/http/internal/websocket/OpeningHandshake;
            5    6     2             h  Ljdk/incubator/http/internal/websocket/OpeningHandshake;
            4    5     3             e  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.Throwable
    Signature: (Ljdk/incubator/http/internal/websocket/BuilderImpl;)Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
    MethodParameters:
      Name  Flags
      b     

  static jdk.incubator.http.WebSocket newInstance(java.net.URI, java.lang.String, jdk.incubator.http.WebSocket$Listener, jdk.incubator.http.internal.websocket.TransportSupplier);
    descriptor: (Ljava/net/URI;Ljava/lang/String;Ljdk/incubator/http/WebSocket$Listener;Ljdk/incubator/http/internal/websocket/TransportSupplier;)Ljdk/incubator/http/WebSocket;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=6, locals=5, args_size=4
        start local 0 // java.net.URI uri
        start local 1 // java.lang.String subprotocol
        start local 2 // jdk.incubator.http.WebSocket$Listener listener
        start local 3 // jdk.incubator.http.internal.websocket.TransportSupplier transport
         0: .line 147
            new jdk.incubator.http.internal.websocket.WebSocketImpl
            dup
            aload 0 /* uri */
            aload 1 /* subprotocol */
            aload 2 /* listener */
            aload 3 /* transport */
            invokespecial jdk.incubator.http.internal.websocket.WebSocketImpl.<init>:(Ljava/net/URI;Ljava/lang/String;Ljdk/incubator/http/WebSocket$Listener;Ljdk/incubator/http/internal/websocket/TransportSupplier;)V
            astore 4 /* ws */
        start local 4 // jdk.incubator.http.internal.websocket.WebSocketImpl ws
         1: .line 150
            aload 4 /* ws */
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.signalOpen:()V
         2: .line 151
            aload 4 /* ws */
            areturn
        end local 4 // jdk.incubator.http.internal.websocket.WebSocketImpl ws
        end local 3 // jdk.incubator.http.internal.websocket.TransportSupplier transport
        end local 2 // jdk.incubator.http.WebSocket$Listener listener
        end local 1 // java.lang.String subprotocol
        end local 0 // java.net.URI uri
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0          uri  Ljava/net/URI;
            0    3     1  subprotocol  Ljava/lang/String;
            0    3     2     listener  Ljdk/incubator/http/WebSocket$Listener;
            0    3     3    transport  Ljdk/incubator/http/internal/websocket/TransportSupplier;
            1    3     4           ws  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
    MethodParameters:
             Name  Flags
      uri          
      subprotocol  
      listener     
      transport    

  private void <init>(java.net.URI, java.lang.String, jdk.incubator.http.WebSocket$Listener, jdk.incubator.http.internal.websocket.TransportSupplier);
    descriptor: (Ljava/net/URI;Ljava/lang/String;Ljdk/incubator/http/WebSocket$Listener;Ljdk/incubator/http/internal/websocket/TransportSupplier;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=5, args_size=5
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // java.net.URI uri
        start local 2 // java.lang.String subprotocol
        start local 3 // jdk.incubator.http.WebSocket$Listener listener
        start local 4 // jdk.incubator.http.internal.websocket.TransportSupplier transport
         0: .line 154
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 96
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicReference
            dup
            getstatic jdk.incubator.http.internal.websocket.WebSocketImpl$State.OPEN:Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            invokespecial java.util.concurrent.atomic.AtomicReference.<init>:(Ljava/lang/Object;)V
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.state:Ljava/util/concurrent/atomic/AtomicReference;
         2: .line 104
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicReference
            dup
            invokespecial java.util.concurrent.atomic.AtomicReference.<init>:()V
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.error:Ljava/util/concurrent/atomic/AtomicReference;
         3: .line 110
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicBoolean
            dup
            invokespecial java.util.concurrent.atomic.AtomicBoolean.<init>:()V
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.outstandingSend:Ljava/util/concurrent/atomic/AtomicBoolean;
         4: .line 111
            aload 0 /* this */
            new jdk.incubator.http.internal.common.SequentialScheduler
            dup
            new jdk.incubator.http.internal.websocket.WebSocketImpl$SendTask
            dup
            aload 0 /* this */
            invokespecial jdk.incubator.http.internal.websocket.WebSocketImpl$SendTask.<init>:(Ljdk/incubator/http/internal/websocket/WebSocketImpl;)V
            invokespecial jdk.incubator.http.internal.common.SequentialScheduler.<init>:(Ljdk/incubator/http/internal/common/SequentialScheduler$RestartableTask;)V
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.sendScheduler:Ljdk/incubator/http/internal/common/SequentialScheduler;
         5: .line 113
            aload 0 /* this */
            new java.util.concurrent.ConcurrentLinkedQueue
            dup
            invokespecial java.util.concurrent.ConcurrentLinkedQueue.<init>:()V
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.queue:Ljava/util/Queue;
         6: .line 114
            aload 0 /* this */
            new jdk.incubator.http.internal.websocket.OutgoingMessage$Context
            dup
            invokespecial jdk.incubator.http.internal.websocket.OutgoingMessage$Context.<init>:()V
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.context:Ljdk/incubator/http/internal/websocket/OutgoingMessage$Context;
         7: .line 117
            aload 0 /* this */
            new jdk.incubator.http.internal.common.SequentialScheduler
            dup
            new jdk.incubator.http.internal.websocket.WebSocketImpl$ReceiveTask
            dup
            aload 0 /* this */
            invokespecial jdk.incubator.http.internal.websocket.WebSocketImpl$ReceiveTask.<init>:(Ljdk/incubator/http/internal/websocket/WebSocketImpl;)V
            invokespecial jdk.incubator.http.internal.common.SequentialScheduler.<init>:(Ljdk/incubator/http/internal/common/SequentialScheduler$RestartableTask;)V
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiveScheduler:Ljdk/incubator/http/internal/common/SequentialScheduler;
         8: .line 118
            aload 0 /* this */
            new jdk.incubator.http.internal.common.Demand
            dup
            invokespecial jdk.incubator.http.internal.common.Demand.<init>:()V
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.demand:Ljdk/incubator/http/internal/common/Demand;
         9: .line 158
            aload 0 /* this */
            aload 1 /* uri */
            invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.net.URI
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.uri:Ljava/net/URI;
        10: .line 159
            aload 0 /* this */
            aload 2 /* subprotocol */
            invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.subprotocol:Ljava/lang/String;
        11: .line 160
            aload 0 /* this */
            aload 3 /* listener */
            invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast jdk.incubator.http.WebSocket$Listener
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.listener:Ljdk/incubator/http/WebSocket$Listener;
        12: .line 161
            aload 0 /* this */
            aload 4 /* transport */
            invokevirtual jdk.incubator.http.internal.websocket.TransportSupplier.transmitter:()Ljdk/incubator/http/internal/websocket/Transmitter;
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.transmitter:Ljdk/incubator/http/internal/websocket/Transmitter;
        13: .line 162
            aload 0 /* this */
            aload 4 /* transport */
            new jdk.incubator.http.internal.websocket.WebSocketImpl$SignallingMessageConsumer
            dup
            aload 0 /* this */
            invokespecial jdk.incubator.http.internal.websocket.WebSocketImpl$SignallingMessageConsumer.<init>:(Ljdk/incubator/http/internal/websocket/WebSocketImpl;)V
            invokevirtual jdk.incubator.http.internal.websocket.TransportSupplier.receiver:(Ljdk/incubator/http/internal/websocket/MessageStreamConsumer;)Ljdk/incubator/http/internal/websocket/Receiver;
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiver:Ljdk/incubator/http/internal/websocket/Receiver;
        14: .line 163
            return
        end local 4 // jdk.incubator.http.internal.websocket.TransportSupplier transport
        end local 3 // jdk.incubator.http.WebSocket$Listener listener
        end local 2 // java.lang.String subprotocol
        end local 1 // java.net.URI uri
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   15     0         this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0   15     1          uri  Ljava/net/URI;
            0   15     2  subprotocol  Ljava/lang/String;
            0   15     3     listener  Ljdk/incubator/http/WebSocket$Listener;
            0   15     4    transport  Ljdk/incubator/http/internal/websocket/TransportSupplier;
    MethodParameters:
             Name  Flags
      uri          
      subprotocol  
      listener     
      transport    

  public java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket> sendText(java.lang.CharSequence, boolean);
    descriptor: (Ljava/lang/CharSequence;Z)Ljava/util/concurrent/CompletableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // java.lang.CharSequence message
        start local 2 // boolean isLast
         0: .line 167
            aload 0 /* this */
            new jdk.incubator.http.internal.websocket.OutgoingMessage$Text
            dup
            aload 1 /* message */
            iload 2 /* isLast */
            invokespecial jdk.incubator.http.internal.websocket.OutgoingMessage$Text.<init>:(Ljava/lang/CharSequence;Z)V
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.enqueueExclusively:(Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 2 // boolean isLast
        end local 1 // java.lang.CharSequence message
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    1     1  message  Ljava/lang/CharSequence;
            0    1     2   isLast  Z
    Signature: (Ljava/lang/CharSequence;Z)Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
    MethodParameters:
         Name  Flags
      message  
      isLast   

  public java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket> sendBinary(java.nio.ByteBuffer, boolean);
    descriptor: (Ljava/nio/ByteBuffer;Z)Ljava/util/concurrent/CompletableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // java.nio.ByteBuffer message
        start local 2 // boolean isLast
         0: .line 172
            aload 0 /* this */
            new jdk.incubator.http.internal.websocket.OutgoingMessage$Binary
            dup
            aload 1 /* message */
            iload 2 /* isLast */
            invokespecial jdk.incubator.http.internal.websocket.OutgoingMessage$Binary.<init>:(Ljava/nio/ByteBuffer;Z)V
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.enqueueExclusively:(Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 2 // boolean isLast
        end local 1 // java.nio.ByteBuffer message
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    1     1  message  Ljava/nio/ByteBuffer;
            0    1     2   isLast  Z
    Signature: (Ljava/nio/ByteBuffer;Z)Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
    MethodParameters:
         Name  Flags
      message  
      isLast   

  public java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket> sendPing(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)Ljava/util/concurrent/CompletableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // java.nio.ByteBuffer message
         0: .line 177
            aload 0 /* this */
            new jdk.incubator.http.internal.websocket.OutgoingMessage$Ping
            dup
            aload 1 /* message */
            invokespecial jdk.incubator.http.internal.websocket.OutgoingMessage$Ping.<init>:(Ljava/nio/ByteBuffer;)V
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.enqueue:(Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 1 // java.nio.ByteBuffer message
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    1     1  message  Ljava/nio/ByteBuffer;
    Signature: (Ljava/nio/ByteBuffer;)Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
    MethodParameters:
         Name  Flags
      message  

  public java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket> sendPong(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)Ljava/util/concurrent/CompletableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // java.nio.ByteBuffer message
         0: .line 182
            aload 0 /* this */
            new jdk.incubator.http.internal.websocket.OutgoingMessage$Pong
            dup
            aload 1 /* message */
            invokespecial jdk.incubator.http.internal.websocket.OutgoingMessage$Pong.<init>:(Ljava/nio/ByteBuffer;)V
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.enqueue:(Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 1 // java.nio.ByteBuffer message
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    1     1  message  Ljava/nio/ByteBuffer;
    Signature: (Ljava/nio/ByteBuffer;)Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
    MethodParameters:
         Name  Flags
      message  

  public java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket> sendClose(int, java.lang.String);
    descriptor: (ILjava/lang/String;)Ljava/util/concurrent/CompletableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // int statusCode
        start local 2 // java.lang.String reason
         0: .line 187
            iload 1 /* statusCode */
            invokestatic jdk.incubator.http.internal.websocket.StatusCodes.isLegalToSendFromClient:(I)Z
            ifne 3
         1: .line 189
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "statusCode: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 1 /* statusCode */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
         2: .line 188
            invokestatic jdk.incubator.http.internal.common.MinimalFuture.failedFuture:(Ljava/lang/Throwable;)Ljava/util/concurrent/CompletableFuture;
            areturn
         3: .line 193
      StackMap locals:
      StackMap stack:
            new jdk.incubator.http.internal.websocket.OutgoingMessage$Close
            dup
            iload 1 /* statusCode */
            aload 2 /* reason */
            invokespecial jdk.incubator.http.internal.websocket.OutgoingMessage$Close.<init>:(ILjava/lang/CharSequence;)V
            astore 3 /* msg */
        start local 3 // jdk.incubator.http.internal.websocket.OutgoingMessage$Close msg
         4: .line 194
            goto 7
        end local 3 // jdk.incubator.http.internal.websocket.OutgoingMessage$Close msg
      StackMap locals:
      StackMap stack: java.lang.IllegalArgumentException
         5: astore 4 /* e */
        start local 4 // java.lang.IllegalArgumentException e
         6: .line 195
            aload 4 /* e */
            invokestatic jdk.incubator.http.internal.common.MinimalFuture.failedFuture:(Ljava/lang/Throwable;)Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 4 // java.lang.IllegalArgumentException e
        start local 3 // jdk.incubator.http.internal.websocket.OutgoingMessage$Close msg
         7: .line 197
      StackMap locals: jdk.incubator.http.internal.websocket.OutgoingMessage$Close
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.outputClosed:Z
         8: .line 198
            aload 0 /* this */
            aload 3 /* msg */
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.enqueueClose:(Ljdk/incubator/http/internal/websocket/OutgoingMessage$Close;)Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 3 // jdk.incubator.http.internal.websocket.OutgoingMessage$Close msg
        end local 2 // java.lang.String reason
        end local 1 // int statusCode
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    9     0        this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    9     1  statusCode  I
            0    9     2      reason  Ljava/lang/String;
            4    5     3         msg  Ljdk/incubator/http/internal/websocket/OutgoingMessage$Close;
            7    9     3         msg  Ljdk/incubator/http/internal/websocket/OutgoingMessage$Close;
            6    7     4           e  Ljava/lang/IllegalArgumentException;
      Exception table:
        from    to  target  type
           3     4       5  Class java.lang.IllegalArgumentException
    Signature: (ILjava/lang/String;)Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
    MethodParameters:
            Name  Flags
      statusCode  
      reason      

  private java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket> enqueueClose(jdk.incubator.http.internal.websocket.OutgoingMessage$Close);
    descriptor: (Ljdk/incubator/http/internal/websocket/OutgoingMessage$Close;)Ljava/util/concurrent/CompletableFuture;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // jdk.incubator.http.internal.websocket.OutgoingMessage$Close m
         0: .line 208
            aload 0 /* this */
            aload 1 /* m */
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.enqueue:(Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture;
         1: .line 209
            ldc 60
            getstatic java.util.concurrent.TimeUnit.SECONDS:Ljava/util/concurrent/TimeUnit;
            invokevirtual java.util.concurrent.CompletableFuture.orTimeout:(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/CompletableFuture;
         2: .line 210
            aload 0 /* this */
            invokedynamic accept(Ljdk/incubator/http/internal/websocket/WebSocketImpl;)Ljava/util/function/BiConsumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;Ljava/lang/Object;)V
                  jdk/incubator/http/internal/websocket/WebSocketImpl.lambda$1(Ljdk/incubator/http/WebSocket;Ljava/lang/Throwable;)V (7)
                  (Ljdk/incubator/http/WebSocket;Ljava/lang/Throwable;)V
            invokevirtual java.util.concurrent.CompletableFuture.whenComplete:(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;
         3: .line 208
            areturn
        end local 1 // jdk.incubator.http.internal.websocket.OutgoingMessage$Close m
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    4     1     m  Ljdk/incubator/http/internal/websocket/OutgoingMessage$Close;
    Signature: (Ljdk/incubator/http/internal/websocket/OutgoingMessage$Close;)Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
    MethodParameters:
      Name  Flags
      m     

  private java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket> enqueueExclusively(jdk.incubator.http.internal.websocket.OutgoingMessage);
    descriptor: (Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // jdk.incubator.http.internal.websocket.OutgoingMessage m
         0: .line 234
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.outstandingSend:Ljava/util/concurrent/atomic/AtomicBoolean;
            iconst_0
            iconst_1
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.compareAndSet:(ZZ)Z
            ifne 2
         1: .line 235
            new java.lang.IllegalStateException
            dup
            ldc "Send pending"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            invokestatic jdk.incubator.http.internal.common.MinimalFuture.failedFuture:(Ljava/lang/Throwable;)Ljava/util/concurrent/CompletableFuture;
            areturn
         2: .line 237
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* m */
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.enqueue:(Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture;
            aload 0 /* this */
            invokedynamic accept(Ljdk/incubator/http/internal/websocket/WebSocketImpl;)Ljava/util/function/BiConsumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;Ljava/lang/Object;)V
                  jdk/incubator/http/internal/websocket/WebSocketImpl.lambda$2(Ljdk/incubator/http/WebSocket;Ljava/lang/Throwable;)V (7)
                  (Ljdk/incubator/http/WebSocket;Ljava/lang/Throwable;)V
            invokevirtual java.util.concurrent.CompletableFuture.whenComplete:(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 1 // jdk.incubator.http.internal.websocket.OutgoingMessage m
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    3     1     m  Ljdk/incubator/http/internal/websocket/OutgoingMessage;
    Signature: (Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
    MethodParameters:
      Name  Flags
      m     

  private java.util.concurrent.CompletableFuture<jdk.incubator.http.WebSocket> enqueue(jdk.incubator.http.internal.websocket.OutgoingMessage);
    descriptor: (Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // jdk.incubator.http.internal.websocket.OutgoingMessage m
         0: .line 241
            new jdk.incubator.http.internal.common.MinimalFuture
            dup
            invokespecial jdk.incubator.http.internal.common.MinimalFuture.<init>:()V
            astore 2 /* cf */
        start local 2 // java.util.concurrent.CompletableFuture cf
         1: .line 242
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.queue:Ljava/util/Queue;
            aload 1 /* m */
            aload 2 /* cf */
            invokestatic jdk.incubator.http.internal.common.Pair.pair:(Ljava/lang/Object;Ljava/lang/Object;)Ljdk/incubator/http/internal/common/Pair;
            invokeinterface java.util.Queue.add:(Ljava/lang/Object;)Z
            istore 3 /* added */
        start local 3 // boolean added
         2: .line 243
            iload 3 /* added */
            ifne 4
         3: .line 245
            new java.lang.InternalError
            dup
            invokespecial java.lang.InternalError.<init>:()V
            athrow
         4: .line 247
      StackMap locals: java.util.concurrent.CompletableFuture int
      StackMap stack:
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.sendScheduler:Ljdk/incubator/http/internal/common/SequentialScheduler;
            invokevirtual jdk.incubator.http.internal.common.SequentialScheduler.runOrSchedule:()V
         5: .line 248
            aload 2 /* cf */
            areturn
        end local 3 // boolean added
        end local 2 // java.util.concurrent.CompletableFuture cf
        end local 1 // jdk.incubator.http.internal.websocket.OutgoingMessage m
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    6     0   this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    6     1      m  Ljdk/incubator/http/internal/websocket/OutgoingMessage;
            1    6     2     cf  Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
            2    6     3  added  Z
    Signature: (Ljdk/incubator/http/internal/websocket/OutgoingMessage;)Ljava/util/concurrent/CompletableFuture<Ljdk/incubator/http/WebSocket;>;
    MethodParameters:
      Name  Flags
      m     

  public void request(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // long n
         0: .line 299
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.demand:Ljdk/incubator/http/internal/common/Demand;
            lload 1 /* n */
            invokevirtual jdk.incubator.http.internal.common.Demand.increase:(J)Z
            ifeq 2
         1: .line 300
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiveScheduler:Ljdk/incubator/http/internal/common/SequentialScheduler;
            invokevirtual jdk.incubator.http.internal.common.SequentialScheduler.runOrSchedule:()V
         2: .line 302
      StackMap locals:
      StackMap stack:
            return
        end local 1 // long n
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    3     1     n  J
    MethodParameters:
      Name  Flags
      n     

  public java.lang.String getSubprotocol();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
         0: .line 306
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.subprotocol:Ljava/lang/String;
            areturn
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;

  public boolean isOutputClosed();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
         0: .line 311
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.outputClosed:Z
            ireturn
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;

  public boolean isInputClosed();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
         0: .line 316
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.inputClosed:Z
            ireturn
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;

  public void abort();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
         0: .line 321
            aload 0 /* this */
            iconst_1
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.inputClosed:Z
         1: .line 322
            aload 0 /* this */
            iconst_1
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.outputClosed:Z
         2: .line 323
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiveScheduler:Ljdk/incubator/http/internal/common/SequentialScheduler;
            invokevirtual jdk.incubator.http.internal.common.SequentialScheduler.stop:()V
         3: .line 324
            aload 0 /* this */
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.close:()V
         4: .line 325
            return
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;

  public java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
         0: .line 329
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokespecial java.lang.Object.toString:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         1: .line 330
            ldc "[uri="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.uri:Ljava/net/URI;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
         2: .line 331
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.subprotocol:Ljava/lang/String;
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 3
            new java.lang.StringBuilder
            dup
            ldc ", subprotocol="
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.subprotocol:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            goto 4
      StackMap locals:
      StackMap stack: java.lang.StringBuilder
         3: ldc ""
      StackMap locals: jdk.incubator.http.internal.websocket.WebSocketImpl
      StackMap stack: java.lang.StringBuilder java.lang.String
         4: invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         5: .line 332
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         6: .line 329
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;

  private void signalOpen();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
         0: .line 486
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiveScheduler:Ljdk/incubator/http/internal/common/SequentialScheduler;
            invokevirtual jdk.incubator.http.internal.common.SequentialScheduler.runOrSchedule:()V
         1: .line 487
            return
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;

  private void signalError(java.lang.Throwable);
    descriptor: (Ljava/lang/Throwable;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // java.lang.Throwable error
         0: .line 490
            aload 0 /* this */
            iconst_1
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.inputClosed:Z
         1: .line 491
            aload 0 /* this */
            iconst_1
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.outputClosed:Z
         2: .line 492
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.error:Ljava/util/concurrent/atomic/AtomicReference;
            aconst_null
            aload 1 /* error */
            invokevirtual java.util.concurrent.atomic.AtomicReference.compareAndSet:(Ljava/lang/Object;Ljava/lang/Object;)Z
            ifeq 3
            aload 0 /* this */
            getstatic jdk.incubator.http.internal.websocket.WebSocketImpl$State.ERROR:Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.trySetState:(Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;)Z
            ifne 5
         3: .line 493
      StackMap locals:
      StackMap stack:
            aload 1 /* error */
            invokestatic jdk.incubator.http.internal.common.Log.logError:(Ljava/lang/Throwable;)V
         4: .line 494
            goto 6
         5: .line 495
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.close:()V
         6: .line 497
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Throwable error
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    7     0   this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    7     1  error  Ljava/lang/Throwable;
    MethodParameters:
       Name  Flags
      error  

  private void close();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=2, args_size=1
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
         0: .line 502
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiver:Ljdk/incubator/http/internal/websocket/Receiver;
            invokevirtual jdk.incubator.http.internal.websocket.Receiver.close:()V
         1: .line 503
            goto 5
      StackMap locals:
      StackMap stack: java.lang.Throwable
         2: astore 1
         3: .line 504
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.transmitter:Ljdk/incubator/http/internal/websocket/Transmitter;
            invokevirtual jdk.incubator.http.internal.websocket.Transmitter.close:()V
         4: .line 505
            aload 1
            athrow
         5: .line 504
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.transmitter:Ljdk/incubator/http/internal/websocket/Transmitter;
            invokevirtual jdk.incubator.http.internal.websocket.Transmitter.close:()V
         6: .line 506
            goto 9
      StackMap locals:
      StackMap stack: java.lang.Throwable
         7: astore 1 /* t */
        start local 1 // java.lang.Throwable t
         8: .line 507
            aload 1 /* t */
            invokestatic jdk.incubator.http.internal.common.Log.logError:(Ljava/lang/Throwable;)V
        end local 1 // java.lang.Throwable t
         9: .line 509
      StackMap locals:
      StackMap stack:
            return
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            8    9     1     t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     2       2  any
           0     6       7  Class java.lang.Throwable

  private void signalClose(int, java.lang.String);
    descriptor: (ILjava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // int statusCode
        start local 2 // java.lang.String reason
         0: .line 516
            aload 0 /* this */
            iconst_1
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.inputClosed:Z
         1: .line 517
            aload 0 /* this */
            iload 1 /* statusCode */
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.statusCode:I
         2: .line 518
            aload 0 /* this */
            aload 2 /* reason */
            putfield jdk.incubator.http.internal.websocket.WebSocketImpl.reason:Ljava/lang/String;
         3: .line 519
            aload 0 /* this */
            getstatic jdk.incubator.http.internal.websocket.WebSocketImpl$State.CLOSE:Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            invokevirtual jdk.incubator.http.internal.websocket.WebSocketImpl.trySetState:(Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;)Z
            ifne 6
         4: .line 520
            ldc "Close: {0}, ''{1}''"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            iload 1 /* statusCode */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            aload 2 /* reason */
            aastore
            invokestatic jdk.incubator.http.internal.common.Log.logTrace:(Ljava/lang/String;[Ljava/lang/Object;)V
         5: .line 521
            goto 10
         6: .line 523
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiver:Ljdk/incubator/http/internal/websocket/Receiver;
            invokevirtual jdk.incubator.http.internal.websocket.Receiver.close:()V
         7: .line 524
            goto 10
      StackMap locals:
      StackMap stack: java.lang.Throwable
         8: astore 3 /* t */
        start local 3 // java.lang.Throwable t
         9: .line 525
            aload 3 /* t */
            invokestatic jdk.incubator.http.internal.common.Log.logError:(Ljava/lang/Throwable;)V
        end local 3 // java.lang.Throwable t
        10: .line 528
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.String reason
        end local 1 // int statusCode
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   11     0        this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0   11     1  statusCode  I
            0   11     2      reason  Ljava/lang/String;
            9   10     3           t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           6     7       8  Class java.lang.Throwable
    MethodParameters:
            Name  Flags
      statusCode  
      reason      

  private boolean trySetState(jdk.incubator.http.internal.websocket.WebSocketImpl$State);
    descriptor: (Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // jdk.incubator.http.internal.websocket.WebSocketImpl$State newState
         0: .line 582
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.state:Ljava/util/concurrent/atomic/AtomicReference;
            invokevirtual java.util.concurrent.atomic.AtomicReference.get:()Ljava/lang/Object;
            checkcast jdk.incubator.http.internal.websocket.WebSocketImpl$State
            astore 2 /* currentState */
        start local 2 // jdk.incubator.http.internal.websocket.WebSocketImpl$State currentState
         1: .line 583
            aload 2 /* currentState */
            getstatic jdk.incubator.http.internal.websocket.WebSocketImpl$State.ERROR:Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            if_acmpeq 2
            aload 2 /* currentState */
            getstatic jdk.incubator.http.internal.websocket.WebSocketImpl$State.CLOSE:Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            if_acmpne 3
         2: .line 584
      StackMap locals: jdk.incubator.http.internal.websocket.WebSocketImpl$State
      StackMap stack:
            iconst_0
            ireturn
         3: .line 585
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.state:Ljava/util/concurrent/atomic/AtomicReference;
            aload 2 /* currentState */
            aload 1 /* newState */
            invokevirtual java.util.concurrent.atomic.AtomicReference.compareAndSet:(Ljava/lang/Object;Ljava/lang/Object;)Z
            ifeq 0
         4: .line 586
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiveScheduler:Ljdk/incubator/http/internal/common/SequentialScheduler;
            invokevirtual jdk.incubator.http.internal.common.SequentialScheduler.runOrSchedule:()V
         5: .line 587
            iconst_1
            ireturn
        end local 2 // jdk.incubator.http.internal.websocket.WebSocketImpl$State currentState
        end local 1 // jdk.incubator.http.internal.websocket.WebSocketImpl$State newState
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0          this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    6     1      newState  Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            1    6     2  currentState  Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
    MethodParameters:
          Name  Flags
      newState  

  private boolean tryChangeState(jdk.incubator.http.internal.websocket.WebSocketImpl$State, jdk.incubator.http.internal.websocket.WebSocketImpl$State);
    descriptor: (Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // jdk.incubator.http.internal.websocket.WebSocketImpl$State expectedState
        start local 2 // jdk.incubator.http.internal.websocket.WebSocketImpl$State newState
         0: .line 593
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.state:Ljava/util/concurrent/atomic/AtomicReference;
            aload 1 /* expectedState */
            aload 2 /* newState */
            invokevirtual java.util.concurrent.atomic.AtomicReference.compareAndExchange:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast jdk.incubator.http.internal.websocket.WebSocketImpl$State
            astore 3 /* witness */
        start local 3 // jdk.incubator.http.internal.websocket.WebSocketImpl$State witness
         1: .line 594
            aload 3 /* witness */
            aload 1 /* expectedState */
            if_acmpne 4
         2: .line 595
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiveScheduler:Ljdk/incubator/http/internal/common/SequentialScheduler;
            invokevirtual jdk.incubator.http.internal.common.SequentialScheduler.runOrSchedule:()V
         3: .line 596
            iconst_1
            ireturn
         4: .line 600
      StackMap locals: jdk.incubator.http.internal.websocket.WebSocketImpl$State
      StackMap stack:
            aload 3 /* witness */
            getstatic jdk.incubator.http.internal.websocket.WebSocketImpl$State.ERROR:Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            if_acmpeq 6
            aload 3 /* witness */
            getstatic jdk.incubator.http.internal.websocket.WebSocketImpl$State.CLOSE:Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            if_acmpeq 6
         5: .line 601
            new java.lang.InternalError
            dup
            invokespecial java.lang.InternalError.<init>:()V
            athrow
         6: .line 603
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 3 // jdk.incubator.http.internal.websocket.WebSocketImpl$State witness
        end local 2 // jdk.incubator.http.internal.websocket.WebSocketImpl$State newState
        end local 1 // jdk.incubator.http.internal.websocket.WebSocketImpl$State expectedState
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0           this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    7     1  expectedState  Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            0    7     2       newState  Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
            1    7     3        witness  Ljdk/incubator/http/internal/websocket/WebSocketImpl$State;
    MethodParameters:
               Name  Flags
      expectedState  
      newState       

  private static jdk.incubator.http.WebSocket lambda$0(jdk.incubator.http.internal.websocket.BuilderImpl, jdk.incubator.http.internal.websocket.OpeningHandshake$Result);
    descriptor: (Ljdk/incubator/http/internal/websocket/BuilderImpl;Ljdk/incubator/http/internal/websocket/OpeningHandshake$Result;)Ljdk/incubator/http/WebSocket;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=3, args_size=2
        start local 1 // jdk.incubator.http.internal.websocket.OpeningHandshake$Result r
         0: .line 122
            aload 0
            invokevirtual jdk.incubator.http.internal.websocket.BuilderImpl.getUri:()Ljava/net/URI;
         1: .line 123
            aload 1 /* r */
            getfield jdk.incubator.http.internal.websocket.OpeningHandshake$Result.subprotocol:Ljava/lang/String;
         2: .line 124
            aload 0
            invokevirtual jdk.incubator.http.internal.websocket.BuilderImpl.getListener:()Ljdk/incubator/http/WebSocket$Listener;
         3: .line 125
            aload 1 /* r */
            getfield jdk.incubator.http.internal.websocket.OpeningHandshake$Result.transport:Ljdk/incubator/http/internal/websocket/TransportSupplier;
         4: .line 122
            invokestatic jdk.incubator.http.internal.websocket.WebSocketImpl.newInstance:(Ljava/net/URI;Ljava/lang/String;Ljdk/incubator/http/WebSocket$Listener;Ljdk/incubator/http/internal/websocket/TransportSupplier;)Ljdk/incubator/http/WebSocket;
            astore 2 /* ws */
        start local 2 // jdk.incubator.http.WebSocket ws
         5: .line 130
            aload 0
            invokestatic java.lang.ref.Reference.reachabilityFence:(Ljava/lang/Object;)V
         6: .line 131
            aload 2 /* ws */
            areturn
        end local 2 // jdk.incubator.http.WebSocket ws
        end local 1 // jdk.incubator.http.internal.websocket.OpeningHandshake$Result r
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     1     r  Ljdk/incubator/http/internal/websocket/OpeningHandshake$Result;
            5    7     2    ws  Ljdk/incubator/http/WebSocket;

  private void lambda$1(jdk.incubator.http.WebSocket, java.lang.Throwable);
    descriptor: (Ljdk/incubator/http/WebSocket;Ljava/lang/Throwable;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=1, locals=4, args_size=3
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // jdk.incubator.http.WebSocket r
        start local 2 // java.lang.Throwable error
         0: .line 212
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.transmitter:Ljdk/incubator/http/internal/websocket/Transmitter;
            invokevirtual jdk.incubator.http.internal.websocket.Transmitter.close:()V
         1: .line 213
            goto 4
      StackMap locals:
      StackMap stack: java.io.IOException
         2: astore 3 /* e */
        start local 3 // java.io.IOException e
         3: .line 214
            aload 3 /* e */
            invokestatic jdk.incubator.http.internal.common.Log.logError:(Ljava/lang/Throwable;)V
        end local 3 // java.io.IOException e
         4: .line 216
      StackMap locals:
      StackMap stack:
            aload 2 /* error */
            instanceof java.util.concurrent.TimeoutException
            ifeq 9
         5: .line 218
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.receiver:Ljdk/incubator/http/internal/websocket/Receiver;
            invokevirtual jdk.incubator.http.internal.websocket.Receiver.close:()V
         6: .line 219
            goto 9
      StackMap locals:
      StackMap stack: java.io.IOException
         7: astore 3 /* e */
        start local 3 // java.io.IOException e
         8: .line 220
            aload 3 /* e */
            invokestatic jdk.incubator.http.internal.common.Log.logError:(Ljava/lang/Throwable;)V
        end local 3 // java.io.IOException e
         9: .line 223
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.Throwable error
        end local 1 // jdk.incubator.http.WebSocket r
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   10     0   this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0   10     1      r  Ljdk/incubator/http/WebSocket;
            0   10     2  error  Ljava/lang/Throwable;
            3    4     3      e  Ljava/io/IOException;
            8    9     3      e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.io.IOException
           5     6       7  Class java.io.IOException

  private void lambda$2(jdk.incubator.http.WebSocket, java.lang.Throwable);
    descriptor: (Ljdk/incubator/http/WebSocket;Ljava/lang/Throwable;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
        start local 1 // jdk.incubator.http.WebSocket r
        start local 2 // java.lang.Throwable e
         0: .line 237
            aload 0 /* this */
            getfield jdk.incubator.http.internal.websocket.WebSocketImpl.outstandingSend:Ljava/util/concurrent/atomic/AtomicBoolean;
            iconst_0
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.set:(Z)V
            return
        end local 2 // java.lang.Throwable e
        end local 1 // jdk.incubator.http.WebSocket r
        end local 0 // jdk.incubator.http.internal.websocket.WebSocketImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/incubator/http/internal/websocket/WebSocketImpl;
            0    1     1     r  Ljdk/incubator/http/WebSocket;
            0    1     2     e  Ljava/lang/Throwable;
}
SourceFile: "WebSocketImpl.java"
NestMembers:
  jdk.incubator.http.internal.websocket.WebSocketImpl$ReceiveTask  jdk.incubator.http.internal.websocket.WebSocketImpl$SendTask  jdk.incubator.http.internal.websocket.WebSocketImpl$SignallingMessageConsumer  jdk.incubator.http.internal.websocket.WebSocketImpl$State
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public abstract Listener = jdk.incubator.http.WebSocket$Listener of jdk.incubator.http.WebSocket
  public final MessagePart = jdk.incubator.http.WebSocket$MessagePart of jdk.incubator.http.WebSocket
  public abstract RestartableTask = jdk.incubator.http.internal.common.SequentialScheduler$RestartableTask of jdk.incubator.http.internal.common.SequentialScheduler
  final Result = jdk.incubator.http.internal.websocket.OpeningHandshake$Result of jdk.incubator.http.internal.websocket.OpeningHandshake
  final Binary = jdk.incubator.http.internal.websocket.OutgoingMessage$Binary of jdk.incubator.http.internal.websocket.OutgoingMessage
  final Close = jdk.incubator.http.internal.websocket.OutgoingMessage$Close of jdk.incubator.http.internal.websocket.OutgoingMessage
  public Context = jdk.incubator.http.internal.websocket.OutgoingMessage$Context of jdk.incubator.http.internal.websocket.OutgoingMessage
  final Ping = jdk.incubator.http.internal.websocket.OutgoingMessage$Ping of jdk.incubator.http.internal.websocket.OutgoingMessage
  final Pong = jdk.incubator.http.internal.websocket.OutgoingMessage$Pong of jdk.incubator.http.internal.websocket.OutgoingMessage
  final Text = jdk.incubator.http.internal.websocket.OutgoingMessage$Text of jdk.incubator.http.internal.websocket.OutgoingMessage
  private ReceiveTask = jdk.incubator.http.internal.websocket.WebSocketImpl$ReceiveTask of jdk.incubator.http.internal.websocket.WebSocketImpl
  private SendTask = jdk.incubator.http.internal.websocket.WebSocketImpl$SendTask of jdk.incubator.http.internal.websocket.WebSocketImpl
  private SignallingMessageConsumer = jdk.incubator.http.internal.websocket.WebSocketImpl$SignallingMessageConsumer of jdk.incubator.http.internal.websocket.WebSocketImpl
  final State = jdk.incubator.http.internal.websocket.WebSocketImpl$State of jdk.incubator.http.internal.websocket.WebSocketImpl