public class io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl implements io.vertx.ext.auth.jwt.JWTAuth
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl
  super_class: java.lang.Object
{
  private static final io.vertx.core.json.JsonArray EMPTY_ARRAY;
    descriptor: Lio/vertx/core/json/JsonArray;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final io.vertx.ext.jwt.JWT jwt;
    descriptor: Lio/vertx/ext/jwt/JWT;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

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

  private final io.vertx.ext.jwt.JWTOptions jwtOptions;
    descriptor: Lio/vertx/ext/jwt/JWTOptions;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 52
            new io.vertx.core.json.JsonArray
            dup
            invokespecial io.vertx.core.json.JsonArray.<init>:()V
            putstatic io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.EMPTY_ARRAY:Lio/vertx/core/json/JsonArray;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(io.vertx.core.Vertx, io.vertx.ext.auth.jwt.JWTAuthOptions);
    descriptor: (Lio/vertx/core/Vertx;Lio/vertx/ext/auth/jwt/JWTAuthOptions;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=10, args_size=3
        start local 0 // io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl this
        start local 1 // io.vertx.core.Vertx vertx
        start local 2 // io.vertx.ext.auth.jwt.JWTAuthOptions config
         0: .line 59
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 60
            aload 0 /* this */
            aload 2 /* config */
            invokevirtual io.vertx.ext.auth.jwt.JWTAuthOptions.getPermissionsClaimKey:()Ljava/lang/String;
            putfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.permissionsClaimKey:Ljava/lang/String;
         2: .line 61
            aload 0 /* this */
            aload 2 /* config */
            invokevirtual io.vertx.ext.auth.jwt.JWTAuthOptions.getJWTOptions:()Lio/vertx/ext/jwt/JWTOptions;
            putfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwtOptions:Lio/vertx/ext/jwt/JWTOptions;
         3: .line 63
            aload 2 /* config */
            invokevirtual io.vertx.ext.auth.jwt.JWTAuthOptions.getKeyStore:()Lio/vertx/ext/auth/KeyStoreOptions;
            astore 3 /* keyStore */
        start local 3 // io.vertx.ext.auth.KeyStoreOptions keyStore
         4: .line 67
            aload 3 /* keyStore */
            ifnull 23
         5: .line 68
            aload 3 /* keyStore */
            invokevirtual io.vertx.ext.auth.KeyStoreOptions.getType:()Ljava/lang/String;
            invokestatic java.security.KeyStore.getInstance:(Ljava/lang/String;)Ljava/security/KeyStore;
            astore 4 /* ks */
        start local 4 // java.security.KeyStore ks
         6: .line 71
            ldc Lio/vertx/ext/auth/jwt/impl/JWTAuthProviderImpl;
            dup
            astore 5
            monitorenter
         7: .line 72
            aload 1 /* vertx */
            invokeinterface io.vertx.core.Vertx.fileSystem:()Lio/vertx/core/file/FileSystem;
            aload 3 /* keyStore */
            invokevirtual io.vertx.ext.auth.KeyStoreOptions.getPath:()Ljava/lang/String;
            invokeinterface io.vertx.core.file.FileSystem.readFileBlocking:(Ljava/lang/String;)Lio/vertx/core/buffer/Buffer;
            astore 6 /* keystore */
        start local 6 // io.vertx.core.buffer.Buffer keystore
         8: .line 74
            aconst_null
            astore 7
            aconst_null
            astore 8
         9: new java.io.ByteArrayInputStream
            dup
            aload 6 /* keystore */
            invokeinterface io.vertx.core.buffer.Buffer.getBytes:()[B
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
            astore 9 /* in */
        start local 9 // java.io.InputStream in
        10: .line 75
            aload 4 /* ks */
            aload 9 /* in */
            aload 3 /* keyStore */
            invokevirtual io.vertx.ext.auth.KeyStoreOptions.getPassword:()Ljava/lang/String;
            invokevirtual java.lang.String.toCharArray:()[C
            invokevirtual java.security.KeyStore.load:(Ljava/io/InputStream;[C)V
        11: .line 76
            aload 9 /* in */
            ifnull 17
            aload 9 /* in */
            invokevirtual java.io.InputStream.close:()V
            goto 17
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.Vertx io.vertx.ext.auth.jwt.JWTAuthOptions io.vertx.ext.auth.KeyStoreOptions java.security.KeyStore java.lang.Class io.vertx.core.buffer.Buffer java.lang.Throwable java.lang.Throwable java.io.InputStream
      StackMap stack: java.lang.Throwable
        12: astore 7
            aload 9 /* in */
            ifnull 13
            aload 9 /* in */
            invokevirtual java.io.InputStream.close:()V
        end local 9 // java.io.InputStream in
      StackMap locals:
      StackMap stack:
        13: aload 7
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        14: astore 8
            aload 7
            ifnonnull 15
            aload 8
            astore 7
            goto 16
      StackMap locals:
      StackMap stack:
        15: aload 7
            aload 8
            if_acmpeq 16
            aload 7
            aload 8
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        16: aload 7
            athrow
        end local 6 // io.vertx.core.buffer.Buffer keystore
        17: .line 71
      StackMap locals:
      StackMap stack:
            aload 5
            monitorexit
        18: goto 21
      StackMap locals:
      StackMap stack: java.lang.Throwable
        19: aload 5
            monitorexit
        20: athrow
        21: .line 79
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new io.vertx.ext.jwt.JWT
            dup
            aload 4 /* ks */
            aload 3 /* keyStore */
            invokevirtual io.vertx.ext.auth.KeyStoreOptions.getPassword:()Ljava/lang/String;
            invokevirtual java.lang.String.toCharArray:()[C
            invokespecial io.vertx.ext.jwt.JWT.<init>:(Ljava/security/KeyStore;[C)V
            putfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwt:Lio/vertx/ext/jwt/JWT;
        end local 4 // java.security.KeyStore ks
        22: .line 80
            goto 48
        23: .line 82
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new io.vertx.ext.jwt.JWT
            dup
            invokespecial io.vertx.ext.jwt.JWT.<init>:()V
            putfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwt:Lio/vertx/ext/jwt/JWT;
        24: .line 84
            aload 2 /* config */
            invokevirtual io.vertx.ext.auth.jwt.JWTAuthOptions.getPubSecKeys:()Ljava/util/List;
            astore 4 /* keys */
        start local 4 // java.util.List keys
        25: .line 86
            aload 4 /* keys */
            ifnull 33
        26: .line 87
            aload 2 /* config */
            invokevirtual io.vertx.ext.auth.jwt.JWTAuthOptions.getPubSecKeys:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 6
            goto 32
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.Vertx io.vertx.ext.auth.jwt.JWTAuthOptions io.vertx.ext.auth.KeyStoreOptions java.util.List top java.util.Iterator
      StackMap stack:
        27: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast io.vertx.ext.auth.PubSecKeyOptions
            astore 5 /* pubSecKey */
        start local 5 // io.vertx.ext.auth.PubSecKeyOptions pubSecKey
        28: .line 88
            aload 5 /* pubSecKey */
            invokevirtual io.vertx.ext.auth.PubSecKeyOptions.isSymmetric:()Z
            ifeq 31
        29: .line 89
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwt:Lio/vertx/ext/jwt/JWT;
            new io.vertx.ext.jwt.JWK
            dup
            aload 5 /* pubSecKey */
            invokevirtual io.vertx.ext.auth.PubSecKeyOptions.getAlgorithm:()Ljava/lang/String;
            aload 5 /* pubSecKey */
            invokevirtual io.vertx.ext.auth.PubSecKeyOptions.getPublicKey:()Ljava/lang/String;
            invokespecial io.vertx.ext.jwt.JWK.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            invokevirtual io.vertx.ext.jwt.JWT.addJWK:(Lio/vertx/ext/jwt/JWK;)Lio/vertx/ext/jwt/JWT;
            pop
        30: .line 90
            goto 32
        31: .line 91
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.Vertx io.vertx.ext.auth.jwt.JWTAuthOptions io.vertx.ext.auth.KeyStoreOptions java.util.List io.vertx.ext.auth.PubSecKeyOptions java.util.Iterator
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwt:Lio/vertx/ext/jwt/JWT;
            new io.vertx.ext.jwt.JWK
            dup
            aload 5 /* pubSecKey */
            invokevirtual io.vertx.ext.auth.PubSecKeyOptions.getAlgorithm:()Ljava/lang/String;
            aload 5 /* pubSecKey */
            invokevirtual io.vertx.ext.auth.PubSecKeyOptions.isCertificate:()Z
            aload 5 /* pubSecKey */
            invokevirtual io.vertx.ext.auth.PubSecKeyOptions.getPublicKey:()Ljava/lang/String;
            aload 5 /* pubSecKey */
            invokevirtual io.vertx.ext.auth.PubSecKeyOptions.getSecretKey:()Ljava/lang/String;
            invokespecial io.vertx.ext.jwt.JWK.<init>:(Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)V
            invokevirtual io.vertx.ext.jwt.JWT.addJWK:(Lio/vertx/ext/jwt/JWK;)Lio/vertx/ext/jwt/JWT;
            pop
        end local 5 // io.vertx.ext.auth.PubSecKeyOptions pubSecKey
        32: .line 87
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.Vertx io.vertx.ext.auth.jwt.JWTAuthOptions io.vertx.ext.auth.KeyStoreOptions java.util.List top java.util.Iterator
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 27
        33: .line 97
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.Vertx io.vertx.ext.auth.jwt.JWTAuthOptions io.vertx.ext.auth.KeyStoreOptions java.util.List
      StackMap stack:
            aload 2 /* config */
            invokevirtual io.vertx.ext.auth.jwt.JWTAuthOptions.getSecrets:()Ljava/util/List;
            astore 5 /* secrets */
        start local 5 // java.util.List secrets
        34: .line 99
            aload 5 /* secrets */
            ifnull 39
        35: .line 100
            aload 5 /* secrets */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 7
            goto 38
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.Vertx io.vertx.ext.auth.jwt.JWTAuthOptions io.vertx.ext.auth.KeyStoreOptions java.util.List java.util.List top java.util.Iterator
      StackMap stack:
        36: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast io.vertx.ext.auth.SecretOptions
            astore 6 /* secret */
        start local 6 // io.vertx.ext.auth.SecretOptions secret
        37: .line 101
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwt:Lio/vertx/ext/jwt/JWT;
            aload 6 /* secret */
            invokevirtual io.vertx.ext.auth.SecretOptions.getType:()Ljava/lang/String;
            aload 6 /* secret */
            invokevirtual io.vertx.ext.auth.SecretOptions.getSecret:()Ljava/lang/String;
            invokevirtual io.vertx.ext.jwt.JWT.addSecret:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/ext/jwt/JWT;
            pop
        end local 6 // io.vertx.ext.auth.SecretOptions secret
        38: .line 100
      StackMap locals:
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 36
        39: .line 105
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.Vertx io.vertx.ext.auth.jwt.JWTAuthOptions io.vertx.ext.auth.KeyStoreOptions java.util.List java.util.List
      StackMap stack:
            aload 2 /* config */
            invokevirtual io.vertx.ext.auth.jwt.JWTAuthOptions.getJwks:()Ljava/util/List;
            astore 6 /* jwks */
        start local 6 // java.util.List jwks
        40: .line 107
            aload 6 /* jwks */
            ifnull 48
        41: .line 108
            aload 6 /* jwks */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 8
            goto 44
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.Vertx io.vertx.ext.auth.jwt.JWTAuthOptions io.vertx.ext.auth.KeyStoreOptions java.util.List java.util.List java.util.List top java.util.Iterator
      StackMap stack:
        42: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast io.vertx.core.json.JsonObject
            astore 7 /* jwk */
        start local 7 // io.vertx.core.json.JsonObject jwk
        43: .line 109
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwt:Lio/vertx/ext/jwt/JWT;
            new io.vertx.ext.jwt.JWK
            dup
            aload 7 /* jwk */
            invokespecial io.vertx.ext.jwt.JWK.<init>:(Lio/vertx/core/json/JsonObject;)V
            invokevirtual io.vertx.ext.jwt.JWT.addJWK:(Lio/vertx/ext/jwt/JWK;)Lio/vertx/ext/jwt/JWT;
            pop
        end local 7 // io.vertx.core.json.JsonObject jwk
        44: .line 108
      StackMap locals:
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 42
        end local 6 // java.util.List jwks
        end local 5 // java.util.List secrets
        end local 4 // java.util.List keys
        45: .line 114
            goto 48
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.Vertx io.vertx.ext.auth.jwt.JWTAuthOptions io.vertx.ext.auth.KeyStoreOptions
      StackMap stack: java.lang.Exception
        46: astore 4 /* e */
        start local 4 // java.lang.Exception e
        47: .line 115
            new java.lang.RuntimeException
            dup
            aload 4 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.lang.Exception e
        48: .line 117
      StackMap locals:
      StackMap stack:
            return
        end local 3 // io.vertx.ext.auth.KeyStoreOptions keyStore
        end local 2 // io.vertx.ext.auth.jwt.JWTAuthOptions config
        end local 1 // io.vertx.core.Vertx vertx
        end local 0 // io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   49     0       this  Lio/vertx/ext/auth/jwt/impl/JWTAuthProviderImpl;
            0   49     1      vertx  Lio/vertx/core/Vertx;
            0   49     2     config  Lio/vertx/ext/auth/jwt/JWTAuthOptions;
            4   49     3   keyStore  Lio/vertx/ext/auth/KeyStoreOptions;
            6   22     4         ks  Ljava/security/KeyStore;
            8   17     6   keystore  Lio/vertx/core/buffer/Buffer;
           10   13     9         in  Ljava/io/InputStream;
           25   45     4       keys  Ljava/util/List<Lio/vertx/ext/auth/PubSecKeyOptions;>;
           28   32     5  pubSecKey  Lio/vertx/ext/auth/PubSecKeyOptions;
           34   45     5    secrets  Ljava/util/List<Lio/vertx/ext/auth/SecretOptions;>;
           37   38     6     secret  Lio/vertx/ext/auth/SecretOptions;
           40   45     6       jwks  Ljava/util/List<Lio/vertx/core/json/JsonObject;>;
           43   44     7        jwk  Lio/vertx/core/json/JsonObject;
           47   48     4          e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
          10    11      12  any
           9    14      14  any
           7    18      19  any
          19    20      19  any
           4    45      46  Class java.security.KeyStoreException
           4    45      46  Class java.io.IOException
           4    45      46  Class io.vertx.core.file.FileSystemException
           4    45      46  Class java.security.cert.CertificateException
           4    45      46  Class java.security.NoSuchAlgorithmException
    MethodParameters:
        Name  Flags
      vertx   
      config  

  public void authenticate(io.vertx.core.json.JsonObject, io.vertx.core.Handler<io.vertx.core.AsyncResult<io.vertx.ext.auth.User>>);
    descriptor: (Lio/vertx/core/json/JsonObject;Lio/vertx/core/Handler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl this
        start local 1 // io.vertx.core.json.JsonObject authInfo
        start local 2 // io.vertx.core.Handler resultHandler
         0: .line 122
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwt:Lio/vertx/ext/jwt/JWT;
            aload 1 /* authInfo */
            ldc "jwt"
            invokevirtual io.vertx.core.json.JsonObject.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokevirtual io.vertx.ext.jwt.JWT.decode:(Ljava/lang/String;)Lio/vertx/core/json/JsonObject;
            astore 3 /* payload */
        start local 3 // io.vertx.core.json.JsonObject payload
         1: .line 124
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwt:Lio/vertx/ext/jwt/JWT;
            aload 3 /* payload */
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwtOptions:Lio/vertx/ext/jwt/JWTOptions;
            invokevirtual io.vertx.ext.jwt.JWT.isExpired:(Lio/vertx/core/json/JsonObject;Lio/vertx/ext/jwt/JWTOptions;)Z
            ifeq 4
         2: .line 125
            aload 2 /* resultHandler */
            ldc "Expired JWT token."
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/String;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
         3: .line 126
            return
         4: .line 129
      StackMap locals: io.vertx.core.json.JsonObject
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwtOptions:Lio/vertx/ext/jwt/JWTOptions;
            invokevirtual io.vertx.ext.jwt.JWTOptions.getAudience:()Ljava/util/List;
            ifnull 12
         5: .line 131
            aload 3 /* payload */
            ldc "aud"
            invokevirtual io.vertx.core.json.JsonObject.getValue:(Ljava/lang/String;)Ljava/lang/Object;
            instanceof java.lang.String
            ifeq 8
         6: .line 132
            new io.vertx.core.json.JsonArray
            dup
            invokespecial io.vertx.core.json.JsonArray.<init>:()V
            aload 3 /* payload */
            ldc "aud"
            ldc ""
            invokevirtual io.vertx.core.json.JsonObject.getValue:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            invokevirtual io.vertx.core.json.JsonArray.add:(Ljava/lang/Object;)Lio/vertx/core/json/JsonArray;
            astore 4 /* target */
        start local 4 // io.vertx.core.json.JsonArray target
         7: .line 133
            goto 9
        end local 4 // io.vertx.core.json.JsonArray target
         8: .line 134
      StackMap locals:
      StackMap stack:
            aload 3 /* payload */
            ldc "aud"
            getstatic io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.EMPTY_ARRAY:Lio/vertx/core/json/JsonArray;
            invokevirtual io.vertx.core.json.JsonObject.getJsonArray:(Ljava/lang/String;Lio/vertx/core/json/JsonArray;)Lio/vertx/core/json/JsonArray;
            astore 4 /* target */
        start local 4 // io.vertx.core.json.JsonArray target
         9: .line 137
      StackMap locals: io.vertx.core.json.JsonArray
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwtOptions:Lio/vertx/ext/jwt/JWTOptions;
            invokevirtual io.vertx.ext.jwt.JWTOptions.getAudience:()Ljava/util/List;
            aload 4 /* target */
            invokevirtual io.vertx.core.json.JsonArray.getList:()Ljava/util/List;
            invokestatic java.util.Collections.disjoint:(Ljava/util/Collection;Ljava/util/Collection;)Z
            ifeq 12
        10: .line 138
            aload 2 /* resultHandler */
            new java.lang.StringBuilder
            dup
            ldc "Invalid JWT audient. expected: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwtOptions:Lio/vertx/ext/jwt/JWTOptions;
            invokevirtual io.vertx.ext.jwt.JWTOptions.getAudience:()Ljava/util/List;
            invokestatic io.vertx.core.json.Json.encode:(Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/String;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
        11: .line 139
            return
        end local 4 // io.vertx.core.json.JsonArray target
        12: .line 143
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwtOptions:Lio/vertx/ext/jwt/JWTOptions;
            invokevirtual io.vertx.ext.jwt.JWTOptions.getIssuer:()Ljava/lang/String;
            ifnull 16
        13: .line 144
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwtOptions:Lio/vertx/ext/jwt/JWTOptions;
            invokevirtual io.vertx.ext.jwt.JWTOptions.getIssuer:()Ljava/lang/String;
            aload 3 /* payload */
            ldc "iss"
            invokevirtual io.vertx.core.json.JsonObject.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 16
        14: .line 145
            aload 2 /* resultHandler */
            ldc "Invalid JWT issuer"
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/String;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
        15: .line 146
            return
        16: .line 150
      StackMap locals:
      StackMap stack:
            aload 2 /* resultHandler */
            new io.vertx.ext.auth.jwt.impl.JWTUser
            dup
            aload 3 /* payload */
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.permissionsClaimKey:Ljava/lang/String;
            invokespecial io.vertx.ext.auth.jwt.impl.JWTUser.<init>:(Lio/vertx/core/json/JsonObject;Ljava/lang/String;)V
            invokestatic io.vertx.core.Future.succeededFuture:(Ljava/lang/Object;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
        end local 3 // io.vertx.core.json.JsonObject payload
        17: .line 152
            goto 20
      StackMap locals: io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl io.vertx.core.json.JsonObject io.vertx.core.Handler
      StackMap stack: java.lang.RuntimeException
        18: astore 3 /* e */
        start local 3 // java.lang.RuntimeException e
        19: .line 153
            aload 2 /* resultHandler */
            aload 3 /* e */
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/Throwable;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
        end local 3 // java.lang.RuntimeException e
        20: .line 155
      StackMap locals:
      StackMap stack:
            return
        end local 2 // io.vertx.core.Handler resultHandler
        end local 1 // io.vertx.core.json.JsonObject authInfo
        end local 0 // io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   21     0           this  Lio/vertx/ext/auth/jwt/impl/JWTAuthProviderImpl;
            0   21     1       authInfo  Lio/vertx/core/json/JsonObject;
            0   21     2  resultHandler  Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Lio/vertx/ext/auth/User;>;>;
            1   17     3        payload  Lio/vertx/core/json/JsonObject;
            7    8     4         target  Lio/vertx/core/json/JsonArray;
            9   12     4         target  Lio/vertx/core/json/JsonArray;
           19   20     3              e  Ljava/lang/RuntimeException;
      Exception table:
        from    to  target  type
           0     3      18  Class java.lang.RuntimeException
           4    11      18  Class java.lang.RuntimeException
          12    15      18  Class java.lang.RuntimeException
          16    17      18  Class java.lang.RuntimeException
    Signature: (Lio/vertx/core/json/JsonObject;Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Lio/vertx/ext/auth/User;>;>;)V
    MethodParameters:
               Name  Flags
      authInfo       
      resultHandler  

  public java.lang.String generateToken(io.vertx.core.json.JsonObject, io.vertx.ext.jwt.JWTOptions);
    descriptor: (Lio/vertx/core/json/JsonObject;Lio/vertx/ext/jwt/JWTOptions;)Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl this
        start local 1 // io.vertx.core.json.JsonObject claims
        start local 2 // io.vertx.ext.jwt.JWTOptions options
         0: .line 159
            aload 1 /* claims */
            invokevirtual io.vertx.core.json.JsonObject.copy:()Lio/vertx/core/json/JsonObject;
            astore 3 /* _claims */
        start local 3 // io.vertx.core.json.JsonObject _claims
         1: .line 162
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getPermissions:()Ljava/util/List;
            ifnull 3
            aload 3 /* _claims */
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.permissionsClaimKey:Ljava/lang/String;
            invokevirtual io.vertx.core.json.JsonObject.containsKey:(Ljava/lang/String;)Z
            ifne 3
         2: .line 163
            aload 3 /* _claims */
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.permissionsClaimKey:Ljava/lang/String;
            new io.vertx.core.json.JsonArray
            dup
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getPermissions:()Ljava/util/List;
            invokespecial io.vertx.core.json.JsonArray.<init>:(Ljava/util/List;)V
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Lio/vertx/core/json/JsonArray;)Lio/vertx/core/json/JsonObject;
            pop
         3: .line 166
      StackMap locals: io.vertx.core.json.JsonObject
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.jwt:Lio/vertx/ext/jwt/JWT;
            aload 3 /* _claims */
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWT.sign:(Lio/vertx/core/json/JsonObject;Lio/vertx/ext/jwt/JWTOptions;)Ljava/lang/String;
            areturn
        end local 3 // io.vertx.core.json.JsonObject _claims
        end local 2 // io.vertx.ext.jwt.JWTOptions options
        end local 1 // io.vertx.core.json.JsonObject claims
        end local 0 // io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lio/vertx/ext/auth/jwt/impl/JWTAuthProviderImpl;
            0    4     1   claims  Lio/vertx/core/json/JsonObject;
            0    4     2  options  Lio/vertx/ext/jwt/JWTOptions;
            1    4     3  _claims  Lio/vertx/core/json/JsonObject;
    MethodParameters:
         Name  Flags
      claims   
      options  final
}
SourceFile: "JWTAuthProviderImpl.java"