public final class com.mongodb.internal.capi.MongoCryptHelper
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.mongodb.internal.capi.MongoCryptHelper
  super_class: java.lang.Object
{
  public static com.mongodb.crypt.capi.MongoCryptOptions createMongoCryptOptions(java.util.Map<java.lang.String, java.util.Map<java.lang.String, java.lang.Object>>, java.util.Map<java.lang.String, org.bson.BsonDocument>);
    descriptor: (Ljava/util/Map;Ljava/util/Map;)Lcom/mongodb/crypt/capi/MongoCryptOptions;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // java.util.Map kmsProviders
        start local 1 // java.util.Map namespaceToLocalSchemaDocumentMap
         0: .line 41
            invokestatic com.mongodb.crypt.capi.MongoCryptOptions.builder:()Lcom/mongodb/crypt/capi/MongoCryptOptions$Builder;
            astore 2 /* mongoCryptOptionsBuilder */
        start local 2 // com.mongodb.crypt.capi.MongoCryptOptions$Builder mongoCryptOptionsBuilder
         1: .line 43
            aload 0 /* kmsProviders */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 4
            goto 19
      StackMap locals: java.util.Map java.util.Map com.mongodb.crypt.capi.MongoCryptOptions$Builder top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 3 /* entry */
        start local 3 // java.util.Map$Entry entry
         3: .line 44
            aload 3 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            ldc "aws"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 11
         4: .line 45
            aload 2 /* mongoCryptOptionsBuilder */
         5: .line 46
            invokestatic com.mongodb.crypt.capi.MongoAwsKmsProviderOptions.builder:()Lcom/mongodb/crypt/capi/MongoAwsKmsProviderOptions$Builder;
         6: .line 47
            aload 3 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.Map
            ldc "accessKeyId"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual com.mongodb.crypt.capi.MongoAwsKmsProviderOptions$Builder.accessKeyId:(Ljava/lang/String;)Lcom/mongodb/crypt/capi/MongoAwsKmsProviderOptions$Builder;
         7: .line 48
            aload 3 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.Map
            ldc "secretAccessKey"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual com.mongodb.crypt.capi.MongoAwsKmsProviderOptions$Builder.secretAccessKey:(Ljava/lang/String;)Lcom/mongodb/crypt/capi/MongoAwsKmsProviderOptions$Builder;
         8: .line 49
            invokevirtual com.mongodb.crypt.capi.MongoAwsKmsProviderOptions$Builder.build:()Lcom/mongodb/crypt/capi/MongoAwsKmsProviderOptions;
         9: .line 45
            invokevirtual com.mongodb.crypt.capi.MongoCryptOptions$Builder.awsKmsProviderOptions:(Lcom/mongodb/crypt/capi/MongoAwsKmsProviderOptions;)Lcom/mongodb/crypt/capi/MongoCryptOptions$Builder;
            pop
        10: .line 51
            goto 19
      StackMap locals: java.util.Map java.util.Map com.mongodb.crypt.capi.MongoCryptOptions$Builder java.util.Map$Entry java.util.Iterator
      StackMap stack:
        11: aload 3 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            ldc "local"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 18
        12: .line 52
            aload 2 /* mongoCryptOptionsBuilder */
        13: .line 53
            invokestatic com.mongodb.crypt.capi.MongoLocalKmsProviderOptions.builder:()Lcom/mongodb/crypt/capi/MongoLocalKmsProviderOptions$Builder;
        14: .line 54
            aload 3 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.Map
            ldc "key"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast byte[]
            invokestatic java.nio.ByteBuffer.wrap:([B)Ljava/nio/ByteBuffer;
            invokevirtual com.mongodb.crypt.capi.MongoLocalKmsProviderOptions$Builder.localMasterKey:(Ljava/nio/ByteBuffer;)Lcom/mongodb/crypt/capi/MongoLocalKmsProviderOptions$Builder;
        15: .line 55
            invokevirtual com.mongodb.crypt.capi.MongoLocalKmsProviderOptions$Builder.build:()Lcom/mongodb/crypt/capi/MongoLocalKmsProviderOptions;
        16: .line 52
            invokevirtual com.mongodb.crypt.capi.MongoCryptOptions$Builder.localKmsProviderOptions:(Lcom/mongodb/crypt/capi/MongoLocalKmsProviderOptions;)Lcom/mongodb/crypt/capi/MongoCryptOptions$Builder;
            pop
        17: .line 57
            goto 19
        18: .line 58
      StackMap locals:
      StackMap stack:
            new com.mongodb.MongoClientException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unrecognized KMS provider key: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial com.mongodb.MongoClientException.<init>:(Ljava/lang/String;)V
            athrow
        end local 3 // java.util.Map$Entry entry
        19: .line 43
      StackMap locals: java.util.Map java.util.Map com.mongodb.crypt.capi.MongoCryptOptions$Builder top java.util.Iterator
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
        20: .line 61
            aload 2 /* mongoCryptOptionsBuilder */
            aload 1 /* namespaceToLocalSchemaDocumentMap */
            invokevirtual com.mongodb.crypt.capi.MongoCryptOptions$Builder.localSchemaMap:(Ljava/util/Map;)Lcom/mongodb/crypt/capi/MongoCryptOptions$Builder;
            pop
        21: .line 62
            aload 2 /* mongoCryptOptionsBuilder */
            invokevirtual com.mongodb.crypt.capi.MongoCryptOptions$Builder.build:()Lcom/mongodb/crypt/capi/MongoCryptOptions;
            areturn
        end local 2 // com.mongodb.crypt.capi.MongoCryptOptions$Builder mongoCryptOptionsBuilder
        end local 1 // java.util.Map namespaceToLocalSchemaDocumentMap
        end local 0 // java.util.Map kmsProviders
      LocalVariableTable:
        Start  End  Slot                               Name  Signature
            0   22     0                       kmsProviders  Ljava/util/Map<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;
            0   22     1  namespaceToLocalSchemaDocumentMap  Ljava/util/Map<Ljava/lang/String;Lorg/bson/BsonDocument;>;
            1   22     2           mongoCryptOptionsBuilder  Lcom/mongodb/crypt/capi/MongoCryptOptions$Builder;
            3   19     3                              entry  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;
    Signature: (Ljava/util/Map<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;Ljava/util/Map<Ljava/lang/String;Lorg/bson/BsonDocument;>;)Lcom/mongodb/crypt/capi/MongoCryptOptions;
    MethodParameters:
                                   Name  Flags
      kmsProviders                       final
      namespaceToLocalSchemaDocumentMap  final

  public static java.util.List<java.lang.String> createMongocryptdSpawnArgs(java.util.Map<java.lang.String, java.lang.Object>);
    descriptor: (Ljava/util/Map;)Ljava/util/List;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // java.util.Map options
         0: .line 67
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* spawnArgs */
        start local 1 // java.util.List spawnArgs
         1: .line 69
            aload 0 /* options */
            ldc "mongocryptdSpawnPath"
            invokeinterface java.util.Map.containsKey:(Ljava/lang/Object;)Z
            ifeq 3
         2: .line 70
            aload 0 /* options */
            ldc "mongocryptdSpawnPath"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            goto 4
         3: .line 71
      StackMap locals: java.util.List
      StackMap stack:
            ldc "mongocryptd"
         4: .line 69
      StackMap locals:
      StackMap stack: java.lang.String
            astore 2 /* path */
        start local 2 // java.lang.String path
         5: .line 73
            aload 1 /* spawnArgs */
            aload 2 /* path */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         6: .line 74
            aload 0 /* options */
            ldc "mongocryptdSpawnArgs"
            invokeinterface java.util.Map.containsKey:(Ljava/lang/Object;)Z
            ifeq 8
         7: .line 75
            aload 1 /* spawnArgs */
            aload 0 /* options */
            ldc "mongocryptdSpawnArgs"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.List
            invokeinterface java.util.List.addAll:(Ljava/util/Collection;)Z
            pop
         8: .line 78
      StackMap locals: java.lang.String
      StackMap stack:
            aload 1 /* spawnArgs */
            ldc "--idleShutdownTimeoutSecs"
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifne 11
         9: .line 79
            aload 1 /* spawnArgs */
            ldc "--idleShutdownTimeoutSecs"
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        10: .line 80
            aload 1 /* spawnArgs */
            ldc "60"
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        11: .line 82
      StackMap locals:
      StackMap stack:
            aload 1 /* spawnArgs */
            areturn
        end local 2 // java.lang.String path
        end local 1 // java.util.List spawnArgs
        end local 0 // java.util.Map options
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   12     0    options  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;
            1   12     1  spawnArgs  Ljava/util/List<Ljava/lang/String;>;
            5   12     2       path  Ljava/lang/String;
    Signature: (Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;)Ljava/util/List<Ljava/lang/String;>;
    MethodParameters:
         Name  Flags
      options  final

  public static com.mongodb.MongoClientSettings createMongocryptdClientSettings(java.lang.String);
    descriptor: (Ljava/lang/String;)Lcom/mongodb/MongoClientSettings;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // java.lang.String connectionString
         0: .line 87
            invokestatic com.mongodb.MongoClientSettings.builder:()Lcom/mongodb/MongoClientSettings$Builder;
         1: .line 88
            new com.mongodb.internal.capi.MongoCryptHelper$1
            dup
            invokespecial com.mongodb.internal.capi.MongoCryptHelper$1.<init>:()V
            invokevirtual com.mongodb.MongoClientSettings$Builder.applyToClusterSettings:(Lcom/mongodb/Block;)Lcom/mongodb/MongoClientSettings$Builder;
         2: .line 94
            new com.mongodb.internal.capi.MongoCryptHelper$2
            dup
            invokespecial com.mongodb.internal.capi.MongoCryptHelper$2.<init>:()V
            invokevirtual com.mongodb.MongoClientSettings$Builder.applyToSocketSettings:(Lcom/mongodb/Block;)Lcom/mongodb/MongoClientSettings$Builder;
         3: .line 101
            new com.mongodb.ConnectionString
            dup
            aload 0 /* connectionString */
            ifnull 5
         4: .line 102
            aload 0 /* connectionString */
            goto 6
      StackMap locals: java.lang.String
      StackMap stack: com.mongodb.MongoClientSettings$Builder new 3 new 3
         5: ldc "mongodb://localhost:27020"
         6: .line 101
      StackMap locals: java.lang.String
      StackMap stack: com.mongodb.MongoClientSettings$Builder new 3 new 3 java.lang.String
            invokespecial com.mongodb.ConnectionString.<init>:(Ljava/lang/String;)V
            invokevirtual com.mongodb.MongoClientSettings$Builder.applyConnectionString:(Lcom/mongodb/ConnectionString;)Lcom/mongodb/MongoClientSettings$Builder;
         7: .line 103
            invokevirtual com.mongodb.MongoClientSettings$Builder.build:()Lcom/mongodb/MongoClientSettings;
         8: .line 87
            areturn
        end local 0 // java.lang.String connectionString
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    9     0  connectionString  Ljava/lang/String;
    MethodParameters:
                  Name  Flags
      connectionString  final

  public static java.lang.ProcessBuilder createProcessBuilder(java.util.Map<java.lang.String, java.lang.Object>);
    descriptor: (Ljava/util/Map;)Ljava/lang/ProcessBuilder;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.util.Map options
         0: .line 107
            new java.lang.ProcessBuilder
            dup
            aload 0 /* options */
            invokestatic com.mongodb.internal.capi.MongoCryptHelper.createMongocryptdSpawnArgs:(Ljava/util/Map;)Ljava/util/List;
            invokespecial java.lang.ProcessBuilder.<init>:(Ljava/util/List;)V
            areturn
        end local 0 // java.util.Map options
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  options  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;
    Signature: (Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;)Ljava/lang/ProcessBuilder;
    MethodParameters:
         Name  Flags
      options  final

  public static void startProcess(java.lang.ProcessBuilder);
    descriptor: (Ljava/lang/ProcessBuilder;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // java.lang.ProcessBuilder processBuilder
         0: .line 112
            aload 0 /* processBuilder */
            iconst_1
            invokevirtual java.lang.ProcessBuilder.redirectErrorStream:(Z)Ljava/lang/ProcessBuilder;
            pop
         1: .line 113
            aload 0 /* processBuilder */
         2: new java.io.File
            dup
            ldc "os.name"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            ldc "Windows"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 3
            ldc "NUL"
            goto 4
      StackMap locals: java.lang.ProcessBuilder
      StackMap stack: java.lang.ProcessBuilder new 2 new 2
         3: ldc "/dev/null"
      StackMap locals: java.lang.ProcessBuilder
      StackMap stack: java.lang.ProcessBuilder new 2 new 2 java.lang.String
         4: invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            invokevirtual java.lang.ProcessBuilder.redirectOutput:(Ljava/io/File;)Ljava/lang/ProcessBuilder;
            pop
         5: .line 114
            aload 0 /* processBuilder */
            invokevirtual java.lang.ProcessBuilder.start:()Ljava/lang/Process;
            pop
         6: .line 115
            goto 9
      StackMap locals:
      StackMap stack: java.lang.Throwable
         7: astore 1 /* t */
        start local 1 // java.lang.Throwable t
         8: .line 116
            new com.mongodb.MongoClientException
            dup
            ldc "Exception starting mongocryptd process. Is `mongocryptd` on the system path?"
            aload 1 /* t */
            invokespecial com.mongodb.MongoClientException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.lang.Throwable t
         9: .line 118
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.ProcessBuilder processBuilder
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   10     0  processBuilder  Ljava/lang/ProcessBuilder;
            8    9     1               t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     6       7  Class java.lang.Throwable
    MethodParameters:
                Name  Flags
      processBuilder  final

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.capi.MongoCryptHelper this
         0: .line 120
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 121
            return
        end local 0 // com.mongodb.internal.capi.MongoCryptHelper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/mongodb/internal/capi/MongoCryptHelper;
}
SourceFile: "MongoCryptHelper.java"
NestMembers:
  com.mongodb.internal.capi.MongoCryptHelper$1  com.mongodb.internal.capi.MongoCryptHelper$2
InnerClasses:
  public final Builder = com.mongodb.MongoClientSettings$Builder of com.mongodb.MongoClientSettings
  public final Builder = com.mongodb.connection.ClusterSettings$Builder of com.mongodb.connection.ClusterSettings
  public final Builder = com.mongodb.connection.SocketSettings$Builder of com.mongodb.connection.SocketSettings
  public Builder = com.mongodb.crypt.capi.MongoAwsKmsProviderOptions$Builder of com.mongodb.crypt.capi.MongoAwsKmsProviderOptions
  public Builder = com.mongodb.crypt.capi.MongoCryptOptions$Builder of com.mongodb.crypt.capi.MongoCryptOptions
  public Builder = com.mongodb.crypt.capi.MongoLocalKmsProviderOptions$Builder of com.mongodb.crypt.capi.MongoLocalKmsProviderOptions
  com.mongodb.internal.capi.MongoCryptHelper$1
  com.mongodb.internal.capi.MongoCryptHelper$2
  public abstract Entry = java.util.Map$Entry of java.util.Map