public class com.datastax.oss.driver.internal.core.channel.ChannelFactory
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.datastax.oss.driver.internal.core.channel.ChannelFactory
  super_class: java.lang.Object
{
  private static final org.slf4j.Logger LOG;
    descriptor: Lorg/slf4j/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

  private static final java.util.concurrent.atomic.AtomicBoolean LOGGED_ORPHAN_WARNING;
    descriptor: Ljava/util/concurrent/atomic/AtomicBoolean;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

  public static final java.lang.String SSL_HANDLER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "ssl"

  public static final java.lang.String INBOUND_TRAFFIC_METER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "inboundTrafficMeter"

  public static final java.lang.String OUTBOUND_TRAFFIC_METER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "outboundTrafficMeter"

  public static final java.lang.String FRAME_TO_BYTES_ENCODER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "frameToBytesEncoder"

  public static final java.lang.String FRAME_TO_SEGMENT_ENCODER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "frameToSegmentEncoder"

  public static final java.lang.String SEGMENT_TO_BYTES_ENCODER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "segmentToBytesEncoder"

  public static final java.lang.String BYTES_TO_FRAME_DECODER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "bytesToFrameDecoder"

  public static final java.lang.String BYTES_TO_SEGMENT_DECODER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "bytesToSegmentDecoder"

  public static final java.lang.String SEGMENT_TO_FRAME_DECODER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "segmentToFrameDecoder"

  public static final java.lang.String HEARTBEAT_HANDLER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "heartbeat"

  public static final java.lang.String INFLIGHT_HANDLER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "inflight"

  public static final java.lang.String INIT_HANDLER_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "init"

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

  protected final com.datastax.oss.driver.internal.core.context.InternalDriverContext context;
    descriptor: Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  volatile com.datastax.oss.driver.api.core.ProtocolVersion protocolVersion;
    descriptor: Lcom/datastax/oss/driver/api/core/ProtocolVersion;
    flags: (0x0040) ACC_VOLATILE
    RuntimeInvisibleAnnotations: 
      com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting()

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

  volatile java.lang.String productType;
    descriptor: Ljava/lang/String;
    flags: (0x0040) ACC_VOLATILE
    RuntimeInvisibleAnnotations: 
      com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting()

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 61
            ldc Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;
            invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
            putstatic com.datastax.oss.driver.internal.core.channel.ChannelFactory.LOG:Lorg/slf4j/Logger;
         1: .line 69
            new java.util.concurrent.atomic.AtomicBoolean
            dup
            invokespecial java.util.concurrent.atomic.AtomicBoolean.<init>:()V
            putstatic com.datastax.oss.driver.internal.core.channel.ChannelFactory.LOGGED_ORPHAN_WARNING:Ljava/util/concurrent/atomic/AtomicBoolean;
         2: .line 89
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(com.datastax.oss.driver.internal.core.context.InternalDriverContext);
    descriptor: (Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
        start local 1 // com.datastax.oss.driver.internal.core.context.InternalDriverContext context
         0: .line 107
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 108
            aload 0 /* this */
            aload 1 /* context */
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getSessionName:()Ljava/lang/String;
            putfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.logPrefix:Ljava/lang/String;
         2: .line 109
            aload 0 /* this */
            aload 1 /* context */
            putfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
         3: .line 111
            aload 1 /* context */
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getConfig:()Lcom/datastax/oss/driver/api/core/config/DriverConfig;
            invokeinterface com.datastax.oss.driver.api.core.config.DriverConfig.getDefaultProfile:()Lcom/datastax/oss/driver/api/core/config/DriverExecutionProfile;
            astore 2 /* defaultConfig */
        start local 2 // com.datastax.oss.driver.api.core.config.DriverExecutionProfile defaultConfig
         4: .line 112
            aload 2 /* defaultConfig */
            getstatic com.datastax.oss.driver.api.core.config.DefaultDriverOption.PROTOCOL_VERSION:Lcom/datastax/oss/driver/api/core/config/DefaultDriverOption;
            invokeinterface com.datastax.oss.driver.api.core.config.DriverExecutionProfile.isDefined:(Lcom/datastax/oss/driver/api/core/config/DriverOption;)Z
            ifeq 7
         5: .line 113
            aload 2 /* defaultConfig */
            getstatic com.datastax.oss.driver.api.core.config.DefaultDriverOption.PROTOCOL_VERSION:Lcom/datastax/oss/driver/api/core/config/DefaultDriverOption;
            invokeinterface com.datastax.oss.driver.api.core.config.DriverExecutionProfile.getString:(Lcom/datastax/oss/driver/api/core/config/DriverOption;)Ljava/lang/String;
            astore 3 /* versionName */
        start local 3 // java.lang.String versionName
         6: .line 114
            aload 0 /* this */
            aload 1 /* context */
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getProtocolVersionRegistry:()Lcom/datastax/oss/driver/internal/core/ProtocolVersionRegistry;
            aload 3 /* versionName */
            invokeinterface com.datastax.oss.driver.internal.core.ProtocolVersionRegistry.fromName:(Ljava/lang/String;)Lcom/datastax/oss/driver/api/core/ProtocolVersion;
            putfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.protocolVersion:Lcom/datastax/oss/driver/api/core/ProtocolVersion;
        end local 3 // java.lang.String versionName
         7: .line 116
      StackMap locals: com.datastax.oss.driver.internal.core.channel.ChannelFactory com.datastax.oss.driver.internal.core.context.InternalDriverContext com.datastax.oss.driver.api.core.config.DriverExecutionProfile
      StackMap stack:
            return
        end local 2 // com.datastax.oss.driver.api.core.config.DriverExecutionProfile defaultConfig
        end local 1 // com.datastax.oss.driver.internal.core.context.InternalDriverContext context
        end local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    8     0           this  Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;
            0    8     1        context  Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            4    8     2  defaultConfig  Lcom/datastax/oss/driver/api/core/config/DriverExecutionProfile;
            6    7     3    versionName  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      context  

  public com.datastax.oss.driver.api.core.ProtocolVersion getProtocolVersion();
    descriptor: ()Lcom/datastax/oss/driver/api/core/ProtocolVersion;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
         0: .line 119
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.protocolVersion:Lcom/datastax/oss/driver/api/core/ProtocolVersion;
            astore 1 /* result */
        start local 1 // com.datastax.oss.driver.api.core.ProtocolVersion result
         1: .line 121
            aload 1 /* result */
            ifnull 2
            iconst_1
            goto 3
      StackMap locals: com.datastax.oss.driver.api.core.ProtocolVersion
      StackMap stack:
         2: iconst_0
      StackMap locals:
      StackMap stack: int
         3: ldc "Protocol version not known yet, this should only be called after init"
         4: .line 120
            invokestatic com.datastax.oss.driver.shaded.guava.common.base.Preconditions.checkState:(ZLjava/lang/Object;)V
         5: .line 122
            aload 1 /* result */
            areturn
        end local 1 // com.datastax.oss.driver.api.core.ProtocolVersion result
        end local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;
            1    6     1  result  Lcom/datastax/oss/driver/api/core/ProtocolVersion;

  public void setProtocolVersion(com.datastax.oss.driver.api.core.ProtocolVersion);
    descriptor: (Lcom/datastax/oss/driver/api/core/ProtocolVersion;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
        start local 1 // com.datastax.oss.driver.api.core.ProtocolVersion newVersion
         0: .line 134
            aload 0 /* this */
            aload 1 /* newVersion */
            putfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.protocolVersion:Lcom/datastax/oss/driver/api/core/ProtocolVersion;
         1: .line 135
            return
        end local 1 // com.datastax.oss.driver.api.core.ProtocolVersion newVersion
        end local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;
            0    2     1  newVersion  Lcom/datastax/oss/driver/api/core/ProtocolVersion;
    MethodParameters:
            Name  Flags
      newVersion  

  public java.lang.String getClusterName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
         0: .line 138
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.clusterName:Ljava/lang/String;
            areturn
        end local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;

  public java.util.concurrent.CompletionStage<com.datastax.oss.driver.internal.core.channel.DriverChannel> connect(com.datastax.oss.driver.api.core.metadata.Node, com.datastax.oss.driver.internal.core.channel.DriverChannelOptions);
    descriptor: (Lcom/datastax/oss/driver/api/core/metadata/Node;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;)Ljava/util/concurrent/CompletionStage;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
        start local 1 // com.datastax.oss.driver.api.core.metadata.Node node
        start local 2 // com.datastax.oss.driver.internal.core.channel.DriverChannelOptions options
         0: .line 143
            aload 1 /* node */
            instanceof com.datastax.oss.driver.internal.core.metadata.DefaultNode
            ifeq 3
         1: .line 144
            aload 1 /* node */
            checkcast com.datastax.oss.driver.internal.core.metadata.DefaultNode
            invokevirtual com.datastax.oss.driver.internal.core.metadata.DefaultNode.getMetricUpdater:()Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;
            astore 3 /* nodeMetricUpdater */
        start local 3 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
         2: .line 145
            goto 4
        end local 3 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
         3: .line 146
      StackMap locals:
      StackMap stack:
            getstatic com.datastax.oss.driver.internal.core.metrics.NoopNodeMetricUpdater.INSTANCE:Lcom/datastax/oss/driver/internal/core/metrics/NoopNodeMetricUpdater;
            astore 3 /* nodeMetricUpdater */
        start local 3 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
         4: .line 148
      StackMap locals: com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater
      StackMap stack:
            aload 0 /* this */
            aload 1 /* node */
            invokeinterface com.datastax.oss.driver.api.core.metadata.Node.getEndPoint:()Lcom/datastax/oss/driver/api/core/metadata/EndPoint;
            aload 2 /* options */
            aload 3 /* nodeMetricUpdater */
            invokevirtual com.datastax.oss.driver.internal.core.channel.ChannelFactory.connect:(Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;)Ljava/util/concurrent/CompletionStage;
            areturn
        end local 3 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
        end local 2 // com.datastax.oss.driver.internal.core.channel.DriverChannelOptions options
        end local 1 // com.datastax.oss.driver.api.core.metadata.Node node
        end local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    5     0               this  Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;
            0    5     1               node  Lcom/datastax/oss/driver/api/core/metadata/Node;
            0    5     2            options  Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;
            2    3     3  nodeMetricUpdater  Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;
            4    5     3  nodeMetricUpdater  Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;
    Signature: (Lcom/datastax/oss/driver/api/core/metadata/Node;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;)Ljava/util/concurrent/CompletionStage<Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;>;
    MethodParameters:
         Name  Flags
      node     
      options  

  java.util.concurrent.CompletionStage<com.datastax.oss.driver.internal.core.channel.DriverChannel> connect(com.datastax.oss.driver.api.core.metadata.EndPoint, com.datastax.oss.driver.internal.core.channel.DriverChannelOptions, com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater);
    descriptor: (Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;)Ljava/util/concurrent/CompletionStage;
    flags: (0x0000) 
    Code:
      stack=8, locals=8, args_size=4
        start local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
        start local 1 // com.datastax.oss.driver.api.core.metadata.EndPoint endPoint
        start local 2 // com.datastax.oss.driver.internal.core.channel.DriverChannelOptions options
        start local 3 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
         0: .line 154
            new java.util.concurrent.CompletableFuture
            dup
            invokespecial java.util.concurrent.CompletableFuture.<init>:()V
            astore 4 /* resultFuture */
        start local 4 // java.util.concurrent.CompletableFuture resultFuture
         1: .line 158
            new java.util.concurrent.CopyOnWriteArrayList
            dup
            invokespecial java.util.concurrent.CopyOnWriteArrayList.<init>:()V
            astore 7 /* attemptedVersions */
        start local 7 // java.util.List attemptedVersions
         2: .line 159
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.protocolVersion:Lcom/datastax/oss/driver/api/core/ProtocolVersion;
            ifnull 6
         3: .line 160
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.protocolVersion:Lcom/datastax/oss/driver/api/core/ProtocolVersion;
            astore 5 /* currentVersion */
        start local 5 // com.datastax.oss.driver.api.core.ProtocolVersion currentVersion
         4: .line 161
            iconst_0
            istore 6 /* isNegotiating */
        start local 6 // boolean isNegotiating
         5: .line 162
            goto 8
        end local 6 // boolean isNegotiating
        end local 5 // com.datastax.oss.driver.api.core.ProtocolVersion currentVersion
         6: .line 163
      StackMap locals: com.datastax.oss.driver.internal.core.channel.ChannelFactory com.datastax.oss.driver.api.core.metadata.EndPoint com.datastax.oss.driver.internal.core.channel.DriverChannelOptions com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater java.util.concurrent.CompletableFuture top top java.util.List
      StackMap stack:
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getProtocolVersionRegistry:()Lcom/datastax/oss/driver/internal/core/ProtocolVersionRegistry;
            invokeinterface com.datastax.oss.driver.internal.core.ProtocolVersionRegistry.highestNonBeta:()Lcom/datastax/oss/driver/api/core/ProtocolVersion;
            astore 5 /* currentVersion */
        start local 5 // com.datastax.oss.driver.api.core.ProtocolVersion currentVersion
         7: .line 164
            iconst_1
            istore 6 /* isNegotiating */
        start local 6 // boolean isNegotiating
         8: .line 167
      StackMap locals: com.datastax.oss.driver.internal.core.channel.ChannelFactory com.datastax.oss.driver.api.core.metadata.EndPoint com.datastax.oss.driver.internal.core.channel.DriverChannelOptions com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater java.util.concurrent.CompletableFuture com.datastax.oss.driver.api.core.ProtocolVersion int java.util.List
      StackMap stack:
            aload 0 /* this */
         9: .line 168
            aload 1 /* endPoint */
        10: .line 169
            aload 2 /* options */
        11: .line 170
            aload 3 /* nodeMetricUpdater */
        12: .line 171
            aload 5 /* currentVersion */
        13: .line 172
            iload 6 /* isNegotiating */
        14: .line 173
            aload 7 /* attemptedVersions */
        15: .line 174
            aload 4 /* resultFuture */
        16: .line 167
            invokevirtual com.datastax.oss.driver.internal.core.channel.ChannelFactory.connect:(Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Lcom/datastax/oss/driver/api/core/ProtocolVersion;ZLjava/util/List;Ljava/util/concurrent/CompletableFuture;)V
        17: .line 175
            aload 4 /* resultFuture */
            areturn
        end local 7 // java.util.List attemptedVersions
        end local 6 // boolean isNegotiating
        end local 5 // com.datastax.oss.driver.api.core.ProtocolVersion currentVersion
        end local 4 // java.util.concurrent.CompletableFuture resultFuture
        end local 3 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
        end local 2 // com.datastax.oss.driver.internal.core.channel.DriverChannelOptions options
        end local 1 // com.datastax.oss.driver.api.core.metadata.EndPoint endPoint
        end local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   18     0               this  Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;
            0   18     1           endPoint  Lcom/datastax/oss/driver/api/core/metadata/EndPoint;
            0   18     2            options  Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;
            0   18     3  nodeMetricUpdater  Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;
            1   18     4       resultFuture  Ljava/util/concurrent/CompletableFuture<Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;>;
            4    6     5     currentVersion  Lcom/datastax/oss/driver/api/core/ProtocolVersion;
            7   18     5     currentVersion  Lcom/datastax/oss/driver/api/core/ProtocolVersion;
            5    6     6      isNegotiating  Z
            8   18     6      isNegotiating  Z
            2   18     7  attemptedVersions  Ljava/util/List<Lcom/datastax/oss/driver/api/core/ProtocolVersion;>;
    Signature: (Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;)Ljava/util/concurrent/CompletionStage<Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;>;
    RuntimeInvisibleAnnotations: 
      com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting()
    RuntimeInvisibleTypeAnnotations: 
      METHOD_RETURN
        com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting()
    MethodParameters:
                   Name  Flags
      endPoint           
      options            
      nodeMetricUpdater  

  private void connect(com.datastax.oss.driver.api.core.metadata.EndPoint, com.datastax.oss.driver.internal.core.channel.DriverChannelOptions, com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater, com.datastax.oss.driver.api.core.ProtocolVersion, boolean, java.util.List<com.datastax.oss.driver.api.core.ProtocolVersion>, java.util.concurrent.CompletableFuture<com.datastax.oss.driver.internal.core.channel.DriverChannel>);
    descriptor: (Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Lcom/datastax/oss/driver/api/core/ProtocolVersion;ZLjava/util/List;Ljava/util/concurrent/CompletableFuture;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=10, locals=11, args_size=8
        start local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
        start local 1 // com.datastax.oss.driver.api.core.metadata.EndPoint endPoint
        start local 2 // com.datastax.oss.driver.internal.core.channel.DriverChannelOptions options
        start local 3 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
        start local 4 // com.datastax.oss.driver.api.core.ProtocolVersion currentVersion
        start local 5 // boolean isNegotiating
        start local 6 // java.util.List attemptedVersions
        start local 7 // java.util.concurrent.CompletableFuture resultFuture
         0: .line 187
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getNettyOptions:()Lcom/datastax/oss/driver/internal/core/context/NettyOptions;
            astore 8 /* nettyOptions */
        start local 8 // com.datastax.oss.driver.internal.core.context.NettyOptions nettyOptions
         1: .line 190
            new io.netty.bootstrap.Bootstrap
            dup
            invokespecial io.netty.bootstrap.Bootstrap.<init>:()V
         2: .line 191
            aload 8 /* nettyOptions */
            invokeinterface com.datastax.oss.driver.internal.core.context.NettyOptions.ioEventLoopGroup:()Lio/netty/channel/EventLoopGroup;
            invokevirtual io.netty.bootstrap.Bootstrap.group:(Lio/netty/channel/EventLoopGroup;)Lio/netty/bootstrap/AbstractBootstrap;
            checkcast io.netty.bootstrap.Bootstrap
         3: .line 192
            aload 8 /* nettyOptions */
            invokeinterface com.datastax.oss.driver.internal.core.context.NettyOptions.channelClass:()Ljava/lang/Class;
            invokevirtual io.netty.bootstrap.Bootstrap.channel:(Ljava/lang/Class;)Lio/netty/bootstrap/AbstractBootstrap;
            checkcast io.netty.bootstrap.Bootstrap
         4: .line 193
            getstatic io.netty.channel.ChannelOption.ALLOCATOR:Lio/netty/channel/ChannelOption;
            aload 8 /* nettyOptions */
            invokeinterface com.datastax.oss.driver.internal.core.context.NettyOptions.allocator:()Lio/netty/buffer/ByteBufAllocator;
            invokevirtual io.netty.bootstrap.Bootstrap.option:(Lio/netty/channel/ChannelOption;Ljava/lang/Object;)Lio/netty/bootstrap/AbstractBootstrap;
            checkcast io.netty.bootstrap.Bootstrap
         5: .line 195
            aload 0 /* this */
            aload 1 /* endPoint */
            aload 4 /* currentVersion */
            aload 2 /* options */
            aload 3 /* nodeMetricUpdater */
            aload 7 /* resultFuture */
            invokevirtual com.datastax.oss.driver.internal.core.channel.ChannelFactory.initializer:(Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/api/core/ProtocolVersion;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Ljava/util/concurrent/CompletableFuture;)Lio/netty/channel/ChannelInitializer;
         6: .line 194
            invokevirtual io.netty.bootstrap.Bootstrap.handler:(Lio/netty/channel/ChannelHandler;)Lio/netty/bootstrap/AbstractBootstrap;
            checkcast io.netty.bootstrap.Bootstrap
         7: .line 189
            astore 9 /* bootstrap */
        start local 9 // io.netty.bootstrap.Bootstrap bootstrap
         8: .line 197
            aload 8 /* nettyOptions */
            aload 9 /* bootstrap */
            invokeinterface com.datastax.oss.driver.internal.core.context.NettyOptions.afterBootstrapInitialized:(Lio/netty/bootstrap/Bootstrap;)V
         9: .line 199
            aload 9 /* bootstrap */
            aload 1 /* endPoint */
            invokeinterface com.datastax.oss.driver.api.core.metadata.EndPoint.resolve:()Ljava/net/SocketAddress;
            invokevirtual io.netty.bootstrap.Bootstrap.connect:(Ljava/net/SocketAddress;)Lio/netty/channel/ChannelFuture;
            astore 10 /* connectFuture */
        start local 10 // io.netty.channel.ChannelFuture connectFuture
        10: .line 201
            aload 10 /* connectFuture */
        11: .line 202
            aload 0 /* this */
            aload 10 /* connectFuture */
            aload 1 /* endPoint */
            aload 4 /* currentVersion */
            iload 5 /* isNegotiating */
            aload 7 /* resultFuture */
            aload 6 /* attemptedVersions */
            aload 2 /* options */
            aload 3 /* nodeMetricUpdater */
            invokedynamic operationComplete(Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;Lio/netty/channel/ChannelFuture;Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/api/core/ProtocolVersion;ZLjava/util/concurrent/CompletableFuture;Ljava/util/List;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;)Lio/netty/util/concurrent/GenericFutureListener;
              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:
                  (Lio/netty/util/concurrent/Future;)V
                  com/datastax/oss/driver/internal/core/channel/ChannelFactory.lambda$0(Lio/netty/channel/ChannelFuture;Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/api/core/ProtocolVersion;ZLjava/util/concurrent/CompletableFuture;Ljava/util/List;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Lio/netty/util/concurrent/Future;)V (7)
                  (Lio/netty/util/concurrent/Future;)V
        12: .line 201
            invokeinterface io.netty.channel.ChannelFuture.addListener:(Lio/netty/util/concurrent/GenericFutureListener;)Lio/netty/channel/ChannelFuture;
            pop
        13: .line 266
            return
        end local 10 // io.netty.channel.ChannelFuture connectFuture
        end local 9 // io.netty.bootstrap.Bootstrap bootstrap
        end local 8 // com.datastax.oss.driver.internal.core.context.NettyOptions nettyOptions
        end local 7 // java.util.concurrent.CompletableFuture resultFuture
        end local 6 // java.util.List attemptedVersions
        end local 5 // boolean isNegotiating
        end local 4 // com.datastax.oss.driver.api.core.ProtocolVersion currentVersion
        end local 3 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
        end local 2 // com.datastax.oss.driver.internal.core.channel.DriverChannelOptions options
        end local 1 // com.datastax.oss.driver.api.core.metadata.EndPoint endPoint
        end local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   14     0               this  Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;
            0   14     1           endPoint  Lcom/datastax/oss/driver/api/core/metadata/EndPoint;
            0   14     2            options  Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;
            0   14     3  nodeMetricUpdater  Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;
            0   14     4     currentVersion  Lcom/datastax/oss/driver/api/core/ProtocolVersion;
            0   14     5      isNegotiating  Z
            0   14     6  attemptedVersions  Ljava/util/List<Lcom/datastax/oss/driver/api/core/ProtocolVersion;>;
            0   14     7       resultFuture  Ljava/util/concurrent/CompletableFuture<Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;>;
            1   14     8       nettyOptions  Lcom/datastax/oss/driver/internal/core/context/NettyOptions;
            8   14     9          bootstrap  Lio/netty/bootstrap/Bootstrap;
           10   14    10      connectFuture  Lio/netty/channel/ChannelFuture;
    Signature: (Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Lcom/datastax/oss/driver/api/core/ProtocolVersion;ZLjava/util/List<Lcom/datastax/oss/driver/api/core/ProtocolVersion;>;Ljava/util/concurrent/CompletableFuture<Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;>;)V
    MethodParameters:
                   Name  Flags
      endPoint           
      options            
      nodeMetricUpdater  
      currentVersion     
      isNegotiating      
      attemptedVersions  
      resultFuture       

  io.netty.channel.ChannelInitializer<io.netty.channel.Channel> initializer(com.datastax.oss.driver.api.core.metadata.EndPoint, com.datastax.oss.driver.api.core.ProtocolVersion, com.datastax.oss.driver.internal.core.channel.DriverChannelOptions, com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater, java.util.concurrent.CompletableFuture<com.datastax.oss.driver.internal.core.channel.DriverChannel>);
    descriptor: (Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/api/core/ProtocolVersion;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Ljava/util/concurrent/CompletableFuture;)Lio/netty/channel/ChannelInitializer;
    flags: (0x0000) 
    Code:
      stack=8, locals=6, args_size=6
        start local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
        start local 1 // com.datastax.oss.driver.api.core.metadata.EndPoint endPoint
        start local 2 // com.datastax.oss.driver.api.core.ProtocolVersion protocolVersion
        start local 3 // com.datastax.oss.driver.internal.core.channel.DriverChannelOptions options
        start local 4 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
        start local 5 // java.util.concurrent.CompletableFuture resultFuture
         0: .line 275
            new com.datastax.oss.driver.internal.core.channel.ChannelFactory$1
            dup
            aload 0 /* this */
            aload 1 /* endPoint */
            aload 2 /* protocolVersion */
            aload 3 /* options */
            aload 4 /* nodeMetricUpdater */
            aload 5 /* resultFuture */
            invokespecial com.datastax.oss.driver.internal.core.channel.ChannelFactory$1.<init>:(Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/api/core/ProtocolVersion;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Ljava/util/concurrent/CompletableFuture;)V
            areturn
        end local 5 // java.util.concurrent.CompletableFuture resultFuture
        end local 4 // com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater nodeMetricUpdater
        end local 3 // com.datastax.oss.driver.internal.core.channel.DriverChannelOptions options
        end local 2 // com.datastax.oss.driver.api.core.ProtocolVersion protocolVersion
        end local 1 // com.datastax.oss.driver.api.core.metadata.EndPoint endPoint
        end local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    1     0               this  Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;
            0    1     1           endPoint  Lcom/datastax/oss/driver/api/core/metadata/EndPoint;
            0    1     2    protocolVersion  Lcom/datastax/oss/driver/api/core/ProtocolVersion;
            0    1     3            options  Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;
            0    1     4  nodeMetricUpdater  Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;
            0    1     5       resultFuture  Ljava/util/concurrent/CompletableFuture<Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;>;
    Signature: (Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/api/core/ProtocolVersion;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Ljava/util/concurrent/CompletableFuture<Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;>;)Lio/netty/channel/ChannelInitializer<Lio/netty/channel/Channel;>;
    RuntimeInvisibleAnnotations: 
      com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting()
    RuntimeInvisibleTypeAnnotations: 
      METHOD_RETURN
        com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting()
    MethodParameters:
                   Name  Flags
      endPoint           
      protocolVersion    
      options            
      nodeMetricUpdater  
      resultFuture       

  private void lambda$0(io.netty.channel.ChannelFuture, com.datastax.oss.driver.api.core.metadata.EndPoint, com.datastax.oss.driver.api.core.ProtocolVersion, boolean, java.util.concurrent.CompletableFuture, java.util.List, com.datastax.oss.driver.internal.core.channel.DriverChannelOptions, com.datastax.oss.driver.internal.core.metrics.NodeMetricUpdater, io.netty.util.concurrent.Future);
    descriptor: (Lio/netty/channel/ChannelFuture;Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/api/core/ProtocolVersion;ZLjava/util/concurrent/CompletableFuture;Ljava/util/List;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Lio/netty/util/concurrent/Future;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=8, locals=16, args_size=10
        start local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
        start local 9 // io.netty.util.concurrent.Future cf
         0: .line 203
            aload 1
            invokeinterface io.netty.channel.ChannelFuture.isSuccess:()Z
            ifeq 26
         1: .line 204
            aload 1
            invokeinterface io.netty.channel.ChannelFuture.channel:()Lio/netty/channel/Channel;
            astore 10 /* channel */
        start local 10 // io.netty.channel.Channel channel
         2: .line 206
            new com.datastax.oss.driver.internal.core.channel.DriverChannel
            dup
            aload 2
            aload 10 /* channel */
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getWriteCoalescer:()Lcom/datastax/oss/driver/internal/core/channel/WriteCoalescer;
            aload 3
            invokespecial com.datastax.oss.driver.internal.core.channel.DriverChannel.<init>:(Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lio/netty/channel/Channel;Lcom/datastax/oss/driver/internal/core/channel/WriteCoalescer;Lcom/datastax/oss/driver/api/core/ProtocolVersion;)V
         3: .line 205
            astore 11 /* driverChannel */
        start local 11 // com.datastax.oss.driver.internal.core.channel.DriverChannel driverChannel
         4: .line 209
            iload 4
            ifeq 6
         5: .line 210
            aload 0 /* this */
            aload 3
            putfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.protocolVersion:Lcom/datastax/oss/driver/api/core/ProtocolVersion;
         6: .line 212
      StackMap locals: io.netty.channel.Channel com.datastax.oss.driver.internal.core.channel.DriverChannel
      StackMap stack:
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.clusterName:Ljava/lang/String;
            ifnonnull 8
         7: .line 213
            aload 0 /* this */
            aload 11 /* driverChannel */
            invokevirtual com.datastax.oss.driver.internal.core.channel.DriverChannel.getClusterName:()Ljava/lang/String;
            putfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.clusterName:Ljava/lang/String;
         8: .line 215
      StackMap locals:
      StackMap stack:
            aload 11 /* driverChannel */
            invokevirtual com.datastax.oss.driver.internal.core.channel.DriverChannel.getOptions:()Ljava/util/Map;
            astore 12 /* supportedOptions */
        start local 12 // java.util.Map supportedOptions
         9: .line 216
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.productType:Ljava/lang/String;
            ifnonnull 24
            aload 12 /* supportedOptions */
            ifnull 24
        10: .line 217
            aload 12 /* supportedOptions */
            ldc "PRODUCT_TYPE"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.List
            astore 13 /* productTypes */
        start local 13 // java.util.List productTypes
        11: .line 219
            aload 13 /* productTypes */
            ifnull 13
            aload 13 /* productTypes */
            invokeinterface java.util.List.isEmpty:()Z
            ifne 13
        12: .line 220
            aload 13 /* productTypes */
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            goto 14
        13: .line 221
      StackMap locals: java.util.Map java.util.List
      StackMap stack:
            ldc "UNKNOWN"
        14: .line 218
      StackMap locals:
      StackMap stack: java.lang.String
            astore 14 /* productType */
        start local 14 // java.lang.String productType
        15: .line 222
            aload 0 /* this */
            aload 14 /* productType */
            putfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.productType:Ljava/lang/String;
        16: .line 223
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getConfig:()Lcom/datastax/oss/driver/api/core/config/DriverConfig;
            astore 15 /* driverConfig */
        start local 15 // com.datastax.oss.driver.api.core.config.DriverConfig driverConfig
        17: .line 224
            aload 15 /* driverConfig */
            instanceof com.datastax.oss.driver.internal.core.config.typesafe.TypesafeDriverConfig
            ifeq 24
        18: .line 225
            aload 14 /* productType */
            ldc "DATASTAX_APOLLO"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 24
        19: .line 226
            aload 15 /* driverConfig */
            checkcast com.datastax.oss.driver.internal.core.config.typesafe.TypesafeDriverConfig
        20: .line 229
            getstatic com.datastax.oss.driver.api.core.config.DefaultDriverOption.REQUEST_CONSISTENCY:Lcom/datastax/oss/driver/api/core/config/DefaultDriverOption;
        21: .line 230
            getstatic com.datastax.oss.driver.api.core.ConsistencyLevel.LOCAL_QUORUM:Lcom/datastax/oss/driver/api/core/ConsistencyLevel;
            invokeinterface com.datastax.oss.driver.api.core.ConsistencyLevel.name:()Ljava/lang/String;
        22: .line 228
            invokestatic com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap.of:(Ljava/lang/Object;Ljava/lang/Object;)Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap;
        23: .line 227
            invokevirtual com.datastax.oss.driver.internal.core.config.typesafe.TypesafeDriverConfig.overrideDefaults:(Ljava/util/Map;)V
        end local 15 // com.datastax.oss.driver.api.core.config.DriverConfig driverConfig
        end local 14 // java.lang.String productType
        end local 13 // java.util.List productTypes
        24: .line 233
      StackMap locals:
      StackMap stack:
            aload 5
            aload 11 /* driverChannel */
            invokevirtual java.util.concurrent.CompletableFuture.complete:(Ljava/lang/Object;)Z
            pop
        end local 12 // java.util.Map supportedOptions
        end local 11 // com.datastax.oss.driver.internal.core.channel.DriverChannel driverChannel
        end local 10 // io.netty.channel.Channel channel
        25: .line 234
            goto 54
        26: .line 235
      StackMap locals:
      StackMap stack:
            aload 1
            invokeinterface io.netty.channel.ChannelFuture.cause:()Ljava/lang/Throwable;
            astore 10 /* error */
        start local 10 // java.lang.Throwable error
        27: .line 236
            aload 10 /* error */
            instanceof com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException
            ifeq 53
            iload 4
            ifeq 53
        28: .line 237
            aload 6
            aload 3
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        29: .line 239
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getProtocolVersionRegistry:()Lcom/datastax/oss/driver/internal/core/ProtocolVersionRegistry;
            aload 3
            invokeinterface com.datastax.oss.driver.internal.core.ProtocolVersionRegistry.downgrade:(Lcom/datastax/oss/driver/api/core/ProtocolVersion;)Ljava/util/Optional;
        30: .line 238
            astore 11 /* downgraded */
        start local 11 // java.util.Optional downgraded
        31: .line 240
            aload 11 /* downgraded */
            invokevirtual java.util.Optional.isPresent:()Z
            ifeq 48
        32: .line 241
            getstatic com.datastax.oss.driver.internal.core.channel.ChannelFactory.LOG:Lorg/slf4j/Logger;
        33: .line 242
            ldc "[{}] Failed to connect with protocol {}, retrying with {}"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
        34: .line 243
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.channel.ChannelFactory.logPrefix:Ljava/lang/String;
            aastore
            dup
            iconst_1
        35: .line 244
            aload 3
            aastore
            dup
            iconst_2
        36: .line 245
            aload 11 /* downgraded */
            invokevirtual java.util.Optional.get:()Ljava/lang/Object;
            aastore
        37: .line 241
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;[Ljava/lang/Object;)V
        38: .line 246
            aload 0 /* this */
        39: .line 247
            aload 2
        40: .line 248
            aload 7
        41: .line 249
            aload 8
        42: .line 250
            aload 11 /* downgraded */
            invokevirtual java.util.Optional.get:()Ljava/lang/Object;
            checkcast com.datastax.oss.driver.api.core.ProtocolVersion
        43: .line 251
            iconst_1
        44: .line 252
            aload 6
        45: .line 253
            aload 5
        46: .line 246
            invokevirtual com.datastax.oss.driver.internal.core.channel.ChannelFactory.connect:(Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Lcom/datastax/oss/driver/internal/core/channel/DriverChannelOptions;Lcom/datastax/oss/driver/internal/core/metrics/NodeMetricUpdater;Lcom/datastax/oss/driver/api/core/ProtocolVersion;ZLjava/util/List;Ljava/util/concurrent/CompletableFuture;)V
        47: .line 254
            goto 54
        48: .line 255
      StackMap locals: java.lang.Throwable java.util.Optional
      StackMap stack:
            aload 5
        49: .line 257
            aload 2
            aload 6
        50: .line 256
            invokestatic com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException.forNegotiation:(Lcom/datastax/oss/driver/api/core/metadata/EndPoint;Ljava/util/List;)Lcom/datastax/oss/driver/api/core/UnsupportedProtocolVersionException;
        51: .line 255
            invokevirtual java.util.concurrent.CompletableFuture.completeExceptionally:(Ljava/lang/Throwable;)Z
            pop
        end local 11 // java.util.Optional downgraded
        52: .line 259
            goto 54
        53: .line 262
      StackMap locals:
      StackMap stack:
            aload 5
            aload 10 /* error */
            invokevirtual java.util.concurrent.CompletableFuture.completeExceptionally:(Ljava/lang/Throwable;)Z
            pop
        end local 10 // java.lang.Throwable error
        54: .line 265
      StackMap locals:
      StackMap stack:
            return
        end local 9 // io.netty.util.concurrent.Future cf
        end local 0 // com.datastax.oss.driver.internal.core.channel.ChannelFactory this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   55     0              this  Lcom/datastax/oss/driver/internal/core/channel/ChannelFactory;
            0   55     9                cf  Lio/netty/util/concurrent/Future<-Ljava/lang/Void;>;
            2   25    10           channel  Lio/netty/channel/Channel;
            4   25    11     driverChannel  Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;
            9   25    12  supportedOptions  Ljava/util/Map<Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;>;
           11   24    13      productTypes  Ljava/util/List<Ljava/lang/String;>;
           15   24    14       productType  Ljava/lang/String;
           17   24    15      driverConfig  Lcom/datastax/oss/driver/api/core/config/DriverConfig;
           27   54    10             error  Ljava/lang/Throwable;
           31   52    11        downgraded  Ljava/util/Optional<Lcom/datastax/oss/driver/api/core/ProtocolVersion;>;
    Exceptions:
      throws java.lang.Exception
}
SourceFile: "ChannelFactory.java"
NestMembers:
  com.datastax.oss.driver.internal.core.channel.ChannelFactory$1
InnerClasses:
  com.datastax.oss.driver.internal.core.channel.ChannelFactory$1
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
    RuntimeVisibleAnnotations: 
      net.jcip.annotations.ThreadSafe()