public final class io.vertx.ext.jwt.JWT
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: io.vertx.ext.jwt.JWT
  super_class: java.lang.Object
{
  private static final java.util.Random RND;
    descriptor: Ljava/util/Random;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.Map<java.lang.String, java.lang.String> ALGORITHM_ALIAS;
    descriptor: Ljava/util/Map;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;

  private static final java.nio.charset.Charset UTF8;
    descriptor: Ljava/nio/charset/Charset;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final io.vertx.core.logging.Logger log;
    descriptor: Lio/vertx/core/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.Base64$Encoder encoder;
    descriptor: Ljava/util/Base64$Encoder;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.Base64$Decoder decoder;
    descriptor: Ljava/util/Base64$Decoder;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.util.Map<java.lang.String, java.util.List<io.vertx.ext.jwt.Crypto>> cryptoMap;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Ljava/util/List<Lio/vertx/ext/jwt/Crypto;>;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 39
            new java.util.Random
            dup
            invokespecial java.util.Random.<init>:()V
            putstatic io.vertx.ext.jwt.JWT.RND:Ljava/util/Random;
         1: .line 41
            new io.vertx.ext.jwt.JWT$1
            dup
            invokespecial io.vertx.ext.jwt.JWT$1.<init>:()V
            putstatic io.vertx.ext.jwt.JWT.ALGORITHM_ALIAS:Ljava/util/Map;
         2: .line 53
            getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
            putstatic io.vertx.ext.jwt.JWT.UTF8:Ljava/nio/charset/Charset;
         3: .line 54
            ldc Lio/vertx/ext/jwt/JWT;
            invokestatic io.vertx.core.logging.LoggerFactory.getLogger:(Ljava/lang/Class;)Lio/vertx/core/logging/Logger;
            putstatic io.vertx.ext.jwt.JWT.log:Lio/vertx/core/logging/Logger;
         4: .line 57
            invokestatic java.util.Base64.getUrlEncoder:()Ljava/util/Base64$Encoder;
            invokevirtual java.util.Base64$Encoder.withoutPadding:()Ljava/util/Base64$Encoder;
            putstatic io.vertx.ext.jwt.JWT.encoder:Ljava/util/Base64$Encoder;
         5: .line 58
            invokestatic java.util.Base64.getUrlDecoder:()Ljava/util/Base64$Decoder;
            putstatic io.vertx.ext.jwt.JWT.decoder:Ljava/util/Base64$Decoder;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // io.vertx.ext.jwt.JWT this
         0: .line 62
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 60
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield io.vertx.ext.jwt.JWT.cryptoMap:Ljava/util/Map;
         2: .line 64
            aload 0 /* this */
            getfield io.vertx.ext.jwt.JWT.cryptoMap:Ljava/util/Map;
            ldc "none"
            new io.vertx.ext.jwt.CryptoNone
            dup
            invokespecial io.vertx.ext.jwt.CryptoNone.<init>:()V
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         3: .line 65
            return
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lio/vertx/ext/jwt/JWT;

  public void <init>(java.security.KeyStore, char[]);
    descriptor: (Ljava/security/KeyStore;[C)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=8, args_size=3
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.security.KeyStore keyStore
        start local 2 // char[] keyStorePassword
         0: .line 69
            aload 0 /* this */
            invokespecial io.vertx.ext.jwt.JWT.<init>:()V
         1: .line 72
            iconst_3
            anewarray java.lang.String
            dup
            iconst_0
            ldc "HS256"
            aastore
            dup
            iconst_1
            ldc "HS384"
            aastore
            dup
            iconst_2
            ldc "HS512"
            aastore
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 12
      StackMap locals: io.vertx.ext.jwt.JWT java.security.KeyStore char[] top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 3 /* alg */
        start local 3 // java.lang.String alg
         3: .line 74
            aload 0 /* this */
            aload 1 /* keyStore */
            aload 2 /* keyStorePassword */
            aload 3 /* alg */
            invokevirtual io.vertx.ext.jwt.JWT.getMac:(Ljava/security/KeyStore;[CLjava/lang/String;)Ljavax/crypto/Mac;
            astore 5 /* mac */
        start local 5 // javax.crypto.Mac mac
         4: .line 75
            aload 5 /* mac */
            ifnull 8
         5: .line 76
            aload 0 /* this */
            getfield io.vertx.ext.jwt.JWT.cryptoMap:Ljava/util/Map;
            aload 3 /* alg */
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  io/vertx/ext/jwt/JWT.lambda$0(Ljava/lang/String;)Ljava/util/List; (6)
                  (Ljava/lang/String;)Ljava/util/List;
            invokeinterface java.util.Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
            checkcast java.util.List
            astore 6 /* l */
        start local 6 // java.util.List l
         6: .line 77
            aload 6 /* l */
            new io.vertx.ext.jwt.CryptoMac
            dup
            aload 5 /* mac */
            invokespecial io.vertx.ext.jwt.CryptoMac.<init>:(Ljavax/crypto/Mac;)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 6 // java.util.List l
         7: .line 78
            goto 12
         8: .line 79
      StackMap locals: io.vertx.ext.jwt.JWT java.security.KeyStore char[] java.lang.String java.util.Iterator javax.crypto.Mac
      StackMap stack:
            getstatic io.vertx.ext.jwt.JWT.log:Lio/vertx/core/logging/Logger;
            new java.lang.StringBuilder
            dup
            aload 3 /* alg */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " not available"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual io.vertx.core.logging.Logger.info:(Ljava/lang/Object;)V
        end local 5 // javax.crypto.Mac mac
         9: .line 81
            goto 12
      StackMap locals: io.vertx.ext.jwt.JWT java.security.KeyStore char[] java.lang.String java.util.Iterator
      StackMap stack: java.lang.RuntimeException
        10: astore 5 /* e */
        start local 5 // java.lang.RuntimeException e
        11: .line 82
            getstatic io.vertx.ext.jwt.JWT.log:Lio/vertx/core/logging/Logger;
            new java.lang.StringBuilder
            dup
            aload 3 /* alg */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " not supported"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 5 /* e */
            invokevirtual io.vertx.core.logging.Logger.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 5 // java.lang.RuntimeException e
        end local 3 // java.lang.String alg
        12: .line 72
      StackMap locals: io.vertx.ext.jwt.JWT java.security.KeyStore char[] top java.util.Iterator
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
        13: .line 86
            bipush 6
            anewarray java.lang.String
            dup
            iconst_0
            ldc "RS256"
            aastore
            dup
            iconst_1
            ldc "RS384"
            aastore
            dup
            iconst_2
            ldc "RS512"
            aastore
            dup
            iconst_3
            ldc "ES256"
            aastore
            dup
            iconst_4
            ldc "ES384"
            aastore
            dup
            iconst_5
            ldc "ES512"
            aastore
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 26
      StackMap locals:
      StackMap stack:
        14: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 3 /* alg */
        start local 3 // java.lang.String alg
        15: .line 88
            aload 0 /* this */
            aload 1 /* keyStore */
            aload 3 /* alg */
            invokevirtual io.vertx.ext.jwt.JWT.getCertificate:(Ljava/security/KeyStore;Ljava/lang/String;)Ljava/security/cert/X509Certificate;
            astore 5 /* certificate */
        start local 5 // java.security.cert.X509Certificate certificate
        16: .line 89
            aload 0 /* this */
            aload 1 /* keyStore */
            aload 2 /* keyStorePassword */
            aload 3 /* alg */
            invokevirtual io.vertx.ext.jwt.JWT.getPrivateKey:(Ljava/security/KeyStore;[CLjava/lang/String;)Ljava/security/PrivateKey;
            astore 6 /* privateKey */
        start local 6 // java.security.PrivateKey privateKey
        17: .line 90
            aload 5 /* certificate */
            ifnull 21
            aload 6 /* privateKey */
            ifnull 21
        18: .line 91
            aload 0 /* this */
            getfield io.vertx.ext.jwt.JWT.cryptoMap:Ljava/util/Map;
            aload 3 /* alg */
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  io/vertx/ext/jwt/JWT.lambda$1(Ljava/lang/String;)Ljava/util/List; (6)
                  (Ljava/lang/String;)Ljava/util/List;
            invokeinterface java.util.Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
            checkcast java.util.List
            astore 7 /* l */
        start local 7 // java.util.List l
        19: .line 92
            aload 7 /* l */
            new io.vertx.ext.jwt.CryptoSignature
            dup
            getstatic io.vertx.ext.jwt.JWT.ALGORITHM_ALIAS:Ljava/util/Map;
            aload 3 /* alg */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            aload 5 /* certificate */
            aload 6 /* privateKey */
            invokespecial io.vertx.ext.jwt.CryptoSignature.<init>:(Ljava/lang/String;Ljava/security/cert/X509Certificate;Ljava/security/PrivateKey;)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 7 // java.util.List l
        20: .line 93
            goto 26
        21: .line 94
      StackMap locals: io.vertx.ext.jwt.JWT java.security.KeyStore char[] java.lang.String java.util.Iterator java.security.cert.X509Certificate java.security.PrivateKey
      StackMap stack:
            getstatic io.vertx.ext.jwt.JWT.log:Lio/vertx/core/logging/Logger;
            new java.lang.StringBuilder
            dup
            aload 3 /* alg */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " not available"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual io.vertx.core.logging.Logger.info:(Ljava/lang/Object;)V
        end local 6 // java.security.PrivateKey privateKey
        end local 5 // java.security.cert.X509Certificate certificate
        22: .line 96
            goto 26
      StackMap locals: io.vertx.ext.jwt.JWT java.security.KeyStore char[] java.lang.String java.util.Iterator
      StackMap stack: java.lang.RuntimeException
        23: astore 5 /* e */
        start local 5 // java.lang.RuntimeException e
        24: .line 97
            aload 5 /* e */
            invokevirtual java.lang.RuntimeException.printStackTrace:()V
        25: .line 98
            getstatic io.vertx.ext.jwt.JWT.log:Lio/vertx/core/logging/Logger;
            new java.lang.StringBuilder
            dup
            aload 3 /* alg */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " not supported"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual io.vertx.core.logging.Logger.warn:(Ljava/lang/Object;)V
        end local 5 // java.lang.RuntimeException e
        end local 3 // java.lang.String alg
        26: .line 86
      StackMap locals: io.vertx.ext.jwt.JWT java.security.KeyStore char[] top java.util.Iterator
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 14
        27: .line 101
            return
        end local 2 // char[] keyStorePassword
        end local 1 // java.security.KeyStore keyStore
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   28     0              this  Lio/vertx/ext/jwt/JWT;
            0   28     1          keyStore  Ljava/security/KeyStore;
            0   28     2  keyStorePassword  [C
            3   12     3               alg  Ljava/lang/String;
            4    9     5               mac  Ljavax/crypto/Mac;
            6    7     6                 l  Ljava/util/List<Lio/vertx/ext/jwt/Crypto;>;
           11   12     5                 e  Ljava/lang/RuntimeException;
           15   26     3               alg  Ljava/lang/String;
           16   22     5       certificate  Ljava/security/cert/X509Certificate;
           17   22     6        privateKey  Ljava/security/PrivateKey;
           19   20     7                 l  Ljava/util/List<Lio/vertx/ext/jwt/Crypto;>;
           24   26     5                 e  Ljava/lang/RuntimeException;
      Exception table:
        from    to  target  type
           3     9      10  Class java.lang.RuntimeException
          15    22      23  Class java.lang.RuntimeException
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
                  Name  Flags
      keyStore          final
      keyStorePassword  final

  public void <init>(java.lang.String, boolean);
    descriptor: (Ljava/lang/String;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.lang.String key
        start local 2 // boolean keyPrivate
         0: .line 106
            aload 0 /* this */
            invokespecial io.vertx.ext.jwt.JWT.<init>:()V
         1: .line 108
            iload 2 /* keyPrivate */
            ifeq 4
         2: .line 109
            aload 0 /* this */
            ldc "RS256"
            aload 1 /* key */
            invokevirtual io.vertx.ext.jwt.JWT.addSecretKey:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/ext/jwt/JWT;
            pop
         3: .line 110
            goto 5
         4: .line 111
      StackMap locals: io.vertx.ext.jwt.JWT java.lang.String int
      StackMap stack:
            aload 0 /* this */
            ldc "RS256"
            aload 1 /* key */
            invokevirtual io.vertx.ext.jwt.JWT.addPublicKey:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/ext/jwt/JWT;
            pop
         5: .line 113
      StackMap locals:
      StackMap stack:
            return
        end local 2 // boolean keyPrivate
        end local 1 // java.lang.String key
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0        this  Lio/vertx/ext/jwt/JWT;
            0    6     1         key  Ljava/lang/String;
            0    6     2  keyPrivate  Z
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
            Name  Flags
      key         
      keyPrivate  

  public io.vertx.ext.jwt.JWT addJWK(io.vertx.ext.jwt.JWK);
    descriptor: (Lio/vertx/ext/jwt/JWK;)Lio/vertx/ext/jwt/JWT;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // io.vertx.ext.jwt.JWK jwk
         0: .line 122
            aload 0 /* this */
            getfield io.vertx.ext.jwt.JWT.cryptoMap:Ljava/util/Map;
            aload 1 /* jwk */
            invokevirtual io.vertx.ext.jwt.JWK.getAlgorithm:()Ljava/lang/String;
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  io/vertx/ext/jwt/JWT.lambda$2(Ljava/lang/String;)Ljava/util/List; (6)
                  (Ljava/lang/String;)Ljava/util/List;
            invokeinterface java.util.Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
            checkcast java.util.List
            astore 2 /* current */
        start local 2 // java.util.List current
         1: .line 124
            iconst_0
            istore 3 /* replaced */
        start local 3 // boolean replaced
         2: .line 126
            iconst_0
            istore 4 /* i */
        start local 4 // int i
         3: goto 8
         4: .line 127
      StackMap locals: java.util.List int int
      StackMap stack:
            aload 2 /* current */
            iload 4 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast io.vertx.ext.jwt.Crypto
            invokeinterface io.vertx.ext.jwt.Crypto.getId:()Ljava/lang/String;
            aload 1 /* jwk */
            invokevirtual io.vertx.ext.jwt.JWK.getId:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 7
         5: .line 129
            aload 2 /* current */
            iload 4 /* i */
            aload 1 /* jwk */
            invokeinterface java.util.List.set:(ILjava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 130
            iconst_1
            istore 3 /* replaced */
         7: .line 126
      StackMap locals:
      StackMap stack:
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: iload 4 /* i */
            aload 2 /* current */
            invokeinterface java.util.List.size:()I
            if_icmplt 4
        end local 4 // int i
         9: .line 134
            iload 3 /* replaced */
            ifne 11
        10: .line 136
            aload 2 /* current */
            aload 1 /* jwk */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        11: .line 139
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            areturn
        end local 3 // boolean replaced
        end local 2 // java.util.List current
        end local 1 // io.vertx.ext.jwt.JWK jwk
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   12     0      this  Lio/vertx/ext/jwt/JWT;
            0   12     1       jwk  Lio/vertx/ext/jwt/JWK;
            1   12     2   current  Ljava/util/List<Lio/vertx/ext/jwt/Crypto;>;
            2   12     3  replaced  Z
            3    9     4         i  I
    MethodParameters:
      Name  Flags
      jwk   

  public io.vertx.ext.jwt.JWT addPublicKey(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Lio/vertx/ext/jwt/JWT;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.lang.String algorithm
        start local 2 // java.lang.String key
         0: .line 153
            aload 0 /* this */
            new io.vertx.ext.jwt.JWK
            dup
            aload 1 /* algorithm */
            aload 2 /* key */
            aconst_null
            invokespecial io.vertx.ext.jwt.JWK.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
            invokevirtual io.vertx.ext.jwt.JWT.addJWK:(Lio/vertx/ext/jwt/JWK;)Lio/vertx/ext/jwt/JWT;
            areturn
        end local 2 // java.lang.String key
        end local 1 // java.lang.String algorithm
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0       this  Lio/vertx/ext/jwt/JWT;
            0    1     1  algorithm  Ljava/lang/String;
            0    1     2        key  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
           Name  Flags
      algorithm  
      key        

  public io.vertx.ext.jwt.JWT addKeyPair(java.lang.String, java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/vertx/ext/jwt/JWT;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.lang.String algorithm
        start local 2 // java.lang.String publicKey
        start local 3 // java.lang.String privateKey
         0: .line 168
            aload 0 /* this */
            new io.vertx.ext.jwt.JWK
            dup
            aload 1 /* algorithm */
            aload 2 /* publicKey */
            aload 3 /* privateKey */
            invokespecial io.vertx.ext.jwt.JWK.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
            invokevirtual io.vertx.ext.jwt.JWT.addJWK:(Lio/vertx/ext/jwt/JWK;)Lio/vertx/ext/jwt/JWT;
            areturn
        end local 3 // java.lang.String privateKey
        end local 2 // java.lang.String publicKey
        end local 1 // java.lang.String algorithm
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lio/vertx/ext/jwt/JWT;
            0    1     1   algorithm  Ljava/lang/String;
            0    1     2   publicKey  Ljava/lang/String;
            0    1     3  privateKey  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
            Name  Flags
      algorithm   
      publicKey   
      privateKey  

  public io.vertx.ext.jwt.JWT addSecretKey(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Lio/vertx/ext/jwt/JWT;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.lang.String algorithm
        start local 2 // java.lang.String key
         0: .line 182
            aload 0 /* this */
            new io.vertx.ext.jwt.JWK
            dup
            aload 1 /* algorithm */
            aconst_null
            aload 2 /* key */
            invokespecial io.vertx.ext.jwt.JWK.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
            invokevirtual io.vertx.ext.jwt.JWT.addJWK:(Lio/vertx/ext/jwt/JWK;)Lio/vertx/ext/jwt/JWT;
            areturn
        end local 2 // java.lang.String key
        end local 1 // java.lang.String algorithm
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0       this  Lio/vertx/ext/jwt/JWT;
            0    1     1  algorithm  Ljava/lang/String;
            0    1     2        key  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
           Name  Flags
      algorithm  
      key        

  public io.vertx.ext.jwt.JWT addCertificate(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Lio/vertx/ext/jwt/JWT;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=3, args_size=3
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.lang.String algorithm
        start local 2 // java.lang.String cert
         0: .line 196
            aload 0 /* this */
            new io.vertx.ext.jwt.JWK
            dup
            aload 1 /* algorithm */
            iconst_1
            aload 2 /* cert */
            aconst_null
            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;
            areturn
        end local 2 // java.lang.String cert
        end local 1 // java.lang.String algorithm
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0       this  Lio/vertx/ext/jwt/JWT;
            0    1     1  algorithm  Ljava/lang/String;
            0    1     2       cert  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
           Name  Flags
      algorithm  
      cert       

  public io.vertx.ext.jwt.JWT addSecret(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Lio/vertx/ext/jwt/JWT;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.lang.String algorithm
        start local 2 // java.lang.String key
         0: .line 210
            aload 0 /* this */
            new io.vertx.ext.jwt.JWK
            dup
            aload 1 /* algorithm */
            aload 2 /* key */
            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;
            areturn
        end local 2 // java.lang.String key
        end local 1 // java.lang.String algorithm
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0       this  Lio/vertx/ext/jwt/JWT;
            0    1     1  algorithm  Ljava/lang/String;
            0    1     2        key  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
           Name  Flags
      algorithm  
      key        

  private javax.crypto.Mac getMac(java.security.KeyStore, char[], java.lang.String);
    descriptor: (Ljava/security/KeyStore;[CLjava/lang/String;)Ljavax/crypto/Mac;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=6, args_size=4
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.security.KeyStore keyStore
        start local 2 // char[] keyStorePassword
        start local 3 // java.lang.String alias
         0: .line 222
            aload 1 /* keyStore */
            aload 3 /* alias */
            aload 2 /* keyStorePassword */
            invokevirtual java.security.KeyStore.getKey:(Ljava/lang/String;[C)Ljava/security/Key;
            astore 4 /* secretKey */
        start local 4 // java.security.Key secretKey
         1: .line 225
            aload 4 /* secretKey */
            ifnonnull 3
         2: .line 226
            aconst_null
            areturn
         3: .line 229
      StackMap locals: java.security.Key
      StackMap stack:
            aload 4 /* secretKey */
            invokeinterface java.security.Key.getAlgorithm:()Ljava/lang/String;
            invokestatic javax.crypto.Mac.getInstance:(Ljava/lang/String;)Ljavax/crypto/Mac;
            astore 5 /* mac */
        start local 5 // javax.crypto.Mac mac
         4: .line 230
            aload 5 /* mac */
            aload 4 /* secretKey */
            invokevirtual javax.crypto.Mac.init:(Ljava/security/Key;)V
         5: .line 232
            aload 5 /* mac */
         6: areturn
        end local 5 // javax.crypto.Mac mac
        end local 4 // java.security.Key secretKey
         7: .line 233
      StackMap locals: io.vertx.ext.jwt.JWT java.security.KeyStore char[] java.lang.String
      StackMap stack: java.security.GeneralSecurityException
            astore 4 /* e */
        start local 4 // java.security.GeneralSecurityException e
         8: .line 234
            new java.lang.RuntimeException
            dup
            aload 4 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.security.GeneralSecurityException e
        end local 3 // java.lang.String alias
        end local 2 // char[] keyStorePassword
        end local 1 // java.security.KeyStore keyStore
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    9     0              this  Lio/vertx/ext/jwt/JWT;
            0    9     1          keyStore  Ljava/security/KeyStore;
            0    9     2  keyStorePassword  [C
            0    9     3             alias  Ljava/lang/String;
            1    7     4         secretKey  Ljava/security/Key;
            4    7     5               mac  Ljavax/crypto/Mac;
            8    9     4                 e  Ljava/security/GeneralSecurityException;
      Exception table:
        from    to  target  type
           0     2       7  Class java.security.NoSuchAlgorithmException
           3     6       7  Class java.security.NoSuchAlgorithmException
           0     2       7  Class java.security.InvalidKeyException
           3     6       7  Class java.security.InvalidKeyException
           0     2       7  Class java.security.UnrecoverableKeyException
           3     6       7  Class java.security.UnrecoverableKeyException
           0     2       7  Class java.security.KeyStoreException
           3     6       7  Class java.security.KeyStoreException
    MethodParameters:
                  Name  Flags
      keyStore          final
      keyStorePassword  final
      alias             final

  private java.security.cert.X509Certificate getCertificate(java.security.KeyStore, java.lang.String);
    descriptor: (Ljava/security/KeyStore;Ljava/lang/String;)Ljava/security/cert/X509Certificate;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.security.KeyStore keyStore
        start local 2 // java.lang.String alias
         0: .line 240
            aload 1 /* keyStore */
            aload 2 /* alias */
            invokevirtual java.security.KeyStore.getCertificate:(Ljava/lang/String;)Ljava/security/cert/Certificate;
            checkcast java.security.cert.X509Certificate
         1: areturn
         2: .line 242
      StackMap locals:
      StackMap stack: java.security.KeyStoreException
            astore 3 /* e */
        start local 3 // java.security.KeyStoreException e
         3: .line 243
            new java.lang.RuntimeException
            dup
            aload 3 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.KeyStoreException e
        end local 2 // java.lang.String alias
        end local 1 // java.security.KeyStore keyStore
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    4     0      this  Lio/vertx/ext/jwt/JWT;
            0    4     1  keyStore  Ljava/security/KeyStore;
            0    4     2     alias  Ljava/lang/String;
            3    4     3         e  Ljava/security/KeyStoreException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.security.KeyStoreException
    MethodParameters:
          Name  Flags
      keyStore  final
      alias     final

  private java.security.PrivateKey getPrivateKey(java.security.KeyStore, char[], java.lang.String);
    descriptor: (Ljava/security/KeyStore;[CLjava/lang/String;)Ljava/security/PrivateKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.security.KeyStore keyStore
        start local 2 // char[] keyStorePassword
        start local 3 // java.lang.String alias
         0: .line 249
            aload 1 /* keyStore */
            aload 3 /* alias */
            aload 2 /* keyStorePassword */
            invokevirtual java.security.KeyStore.getKey:(Ljava/lang/String;[C)Ljava/security/Key;
            checkcast java.security.PrivateKey
         1: areturn
         2: .line 251
      StackMap locals:
      StackMap stack: java.security.GeneralSecurityException
            astore 4 /* e */
        start local 4 // java.security.GeneralSecurityException e
         3: .line 252
            new java.lang.RuntimeException
            dup
            aload 4 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.security.GeneralSecurityException e
        end local 3 // java.lang.String alias
        end local 2 // char[] keyStorePassword
        end local 1 // java.security.KeyStore keyStore
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    4     0              this  Lio/vertx/ext/jwt/JWT;
            0    4     1          keyStore  Ljava/security/KeyStore;
            0    4     2  keyStorePassword  [C
            0    4     3             alias  Ljava/lang/String;
            3    4     4                 e  Ljava/security/GeneralSecurityException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.security.NoSuchAlgorithmException
           0     1       2  Class java.security.UnrecoverableKeyException
           0     1       2  Class java.security.KeyStoreException
    MethodParameters:
                  Name  Flags
      keyStore          final
      keyStorePassword  final
      alias             final

  public io.vertx.core.json.JsonObject decode(java.lang.String);
    descriptor: (Ljava/lang/String;)Lio/vertx/core/json/JsonObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=14, args_size=2
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // java.lang.String token
         0: .line 257
            aload 1 /* token */
            ldc "\\."
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            astore 2 /* segments */
        start local 2 // java.lang.String[] segments
         1: .line 258
            aload 2 /* segments */
            arraylength
            aload 0 /* this */
            invokevirtual io.vertx.ext.jwt.JWT.isUnsecure:()Z
            ifeq 2
            iconst_2
            goto 3
      StackMap locals: io.vertx.ext.jwt.JWT java.lang.String java.lang.String[]
      StackMap stack: int
         2: iconst_3
      StackMap locals: io.vertx.ext.jwt.JWT java.lang.String java.lang.String[]
      StackMap stack: int int
         3: if_icmpeq 5
         4: .line 259
            new java.lang.RuntimeException
            dup
            ldc "Not enough or too many segments"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 263
      StackMap locals:
      StackMap stack:
            aload 2 /* segments */
            iconst_0
            aaload
            astore 3 /* headerSeg */
        start local 3 // java.lang.String headerSeg
         6: .line 264
            aload 2 /* segments */
            iconst_1
            aaload
            astore 4 /* payloadSeg */
        start local 4 // java.lang.String payloadSeg
         7: .line 265
            aload 0 /* this */
            invokevirtual io.vertx.ext.jwt.JWT.isUnsecure:()Z
            ifeq 8
            aconst_null
            goto 9
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
         8: aload 2 /* segments */
            iconst_2
            aaload
      StackMap locals:
      StackMap stack: java.lang.String
         9: astore 5 /* signatureSeg */
        start local 5 // java.lang.String signatureSeg
        10: .line 267
            ldc ""
            aload 5 /* signatureSeg */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 12
        11: .line 268
            new java.lang.RuntimeException
            dup
            ldc "Signature is required"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        12: .line 272
      StackMap locals: java.lang.String
      StackMap stack:
            new io.vertx.core.json.JsonObject
            dup
            new java.lang.String
            dup
            aload 3 /* headerSeg */
            invokestatic io.vertx.ext.jwt.JWT.base64urlDecode:(Ljava/lang/String;)[B
            getstatic io.vertx.ext.jwt.JWT.UTF8:Ljava/nio/charset/Charset;
            invokespecial java.lang.String.<init>:([BLjava/nio/charset/Charset;)V
            invokespecial io.vertx.core.json.JsonObject.<init>:(Ljava/lang/String;)V
            astore 6 /* header */
        start local 6 // io.vertx.core.json.JsonObject header
        13: .line 273
            new io.vertx.core.json.JsonObject
            dup
            new java.lang.String
            dup
            aload 4 /* payloadSeg */
            invokestatic io.vertx.ext.jwt.JWT.base64urlDecode:(Ljava/lang/String;)[B
            getstatic io.vertx.ext.jwt.JWT.UTF8:Ljava/nio/charset/Charset;
            invokespecial java.lang.String.<init>:([BLjava/nio/charset/Charset;)V
            invokespecial io.vertx.core.json.JsonObject.<init>:(Ljava/lang/String;)V
            astore 7 /* payload */
        start local 7 // io.vertx.core.json.JsonObject payload
        14: .line 275
            aload 6 /* header */
            ldc "alg"
            invokevirtual io.vertx.core.json.JsonObject.getString:(Ljava/lang/String;)Ljava/lang/String;
            astore 8 /* alg */
        start local 8 // java.lang.String alg
        15: .line 277
            aload 0 /* this */
            getfield io.vertx.ext.jwt.JWT.cryptoMap:Ljava/util/Map;
            aload 8 /* alg */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.List
            astore 9 /* cryptos */
        start local 9 // java.util.List cryptos
        16: .line 279
            aload 9 /* cryptos */
            ifnull 17
            aload 9 /* cryptos */
            invokeinterface java.util.List.size:()I
            ifne 18
        17: .line 280
      StackMap locals: io.vertx.ext.jwt.JWT java.lang.String java.lang.String[] java.lang.String java.lang.String java.lang.String io.vertx.core.json.JsonObject io.vertx.core.json.JsonObject java.lang.String java.util.List
      StackMap stack:
            new java.lang.RuntimeException
            dup
            ldc "Algorithm not supported"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        18: .line 284
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual io.vertx.ext.jwt.JWT.isUnsecure:()Z
            ifne 20
            ldc "none"
            aload 8 /* alg */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 20
        19: .line 285
            new java.lang.RuntimeException
            dup
            ldc "Algorithm \"none\" not allowed"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        20: .line 289
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual io.vertx.ext.jwt.JWT.isUnsecure:()Z
            ifne 29
        21: .line 290
            aload 5 /* signatureSeg */
            invokestatic io.vertx.ext.jwt.JWT.base64urlDecode:(Ljava/lang/String;)[B
            astore 10 /* payloadInput */
        start local 10 // byte[] payloadInput
        22: .line 291
            new java.lang.StringBuilder
            dup
            aload 3 /* headerSeg */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 4 /* payloadSeg */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            getstatic io.vertx.ext.jwt.JWT.UTF8:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            astore 11 /* signingInput */
        start local 11 // byte[] signingInput
        23: .line 293
            aload 9 /* cryptos */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 13
            goto 27
      StackMap locals: io.vertx.ext.jwt.JWT java.lang.String java.lang.String[] java.lang.String java.lang.String java.lang.String io.vertx.core.json.JsonObject io.vertx.core.json.JsonObject java.lang.String java.util.List byte[] byte[] top java.util.Iterator
      StackMap stack:
        24: aload 13
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast io.vertx.ext.jwt.Crypto
            astore 12 /* c */
        start local 12 // io.vertx.ext.jwt.Crypto c
        25: .line 294
            aload 12 /* c */
            aload 10 /* payloadInput */
            aload 11 /* signingInput */
            invokeinterface io.vertx.ext.jwt.Crypto.verify:([B[B)Z
            ifeq 27
        26: .line 295
            aload 7 /* payload */
            areturn
        end local 12 // io.vertx.ext.jwt.Crypto c
        27: .line 293
      StackMap locals:
      StackMap stack:
            aload 13
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 24
        28: .line 299
            new java.lang.RuntimeException
            dup
            ldc "Signature verification failed"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 11 // byte[] signingInput
        end local 10 // byte[] payloadInput
        29: .line 302
      StackMap locals: io.vertx.ext.jwt.JWT java.lang.String java.lang.String[] java.lang.String java.lang.String java.lang.String io.vertx.core.json.JsonObject io.vertx.core.json.JsonObject java.lang.String java.util.List
      StackMap stack:
            aload 7 /* payload */
            areturn
        end local 9 // java.util.List cryptos
        end local 8 // java.lang.String alg
        end local 7 // io.vertx.core.json.JsonObject payload
        end local 6 // io.vertx.core.json.JsonObject header
        end local 5 // java.lang.String signatureSeg
        end local 4 // java.lang.String payloadSeg
        end local 3 // java.lang.String headerSeg
        end local 2 // java.lang.String[] segments
        end local 1 // java.lang.String token
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   30     0          this  Lio/vertx/ext/jwt/JWT;
            0   30     1         token  Ljava/lang/String;
            1   30     2      segments  [Ljava/lang/String;
            6   30     3     headerSeg  Ljava/lang/String;
            7   30     4    payloadSeg  Ljava/lang/String;
           10   30     5  signatureSeg  Ljava/lang/String;
           13   30     6        header  Lio/vertx/core/json/JsonObject;
           14   30     7       payload  Lio/vertx/core/json/JsonObject;
           15   30     8           alg  Ljava/lang/String;
           16   30     9       cryptos  Ljava/util/List<Lio/vertx/ext/jwt/Crypto;>;
           22   29    10  payloadInput  [B
           23   29    11  signingInput  [B
           25   27    12             c  Lio/vertx/ext/jwt/Crypto;
    MethodParameters:
       Name  Flags
      token  final

  public boolean isExpired(io.vertx.core.json.JsonObject, io.vertx.ext.jwt.JWTOptions);
    descriptor: (Lio/vertx/core/json/JsonObject;Lio/vertx/ext/jwt/JWTOptions;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=6, args_size=3
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // io.vertx.core.json.JsonObject jwt
        start local 2 // io.vertx.ext.jwt.JWTOptions options
         0: .line 307
            aload 1 /* jwt */
            ifnonnull 2
         1: .line 308
            iconst_0
            ireturn
         2: .line 314
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.System.currentTimeMillis:()J
            ldc 1000
            ldiv
            lstore 3 /* now */
        start local 3 // long now
         3: .line 316
            aload 1 /* jwt */
            ldc "exp"
            invokevirtual io.vertx.core.json.JsonObject.containsKey:(Ljava/lang/String;)Z
            ifeq 6
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.isIgnoreExpiration:()Z
            ifne 6
         4: .line 317
            lload 3 /* now */
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getLeeway:()I
            i2l
            lsub
            aload 1 /* jwt */
            ldc "exp"
            invokevirtual io.vertx.core.json.JsonObject.getLong:(Ljava/lang/String;)Ljava/lang/Long;
            invokevirtual java.lang.Long.longValue:()J
            lcmp
            iflt 6
         5: .line 318
            new java.lang.RuntimeException
            dup
            ldc "Expired JWT token: exp <= now"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 322
      StackMap locals: long
      StackMap stack:
            aload 1 /* jwt */
            ldc "iat"
            invokevirtual io.vertx.core.json.JsonObject.containsKey:(Ljava/lang/String;)Z
            ifeq 10
         7: .line 323
            aload 1 /* jwt */
            ldc "iat"
            invokevirtual io.vertx.core.json.JsonObject.getLong:(Ljava/lang/String;)Ljava/lang/Long;
            astore 5 /* iat */
        start local 5 // java.lang.Long iat
         8: .line 325
            aload 5 /* iat */
            invokevirtual java.lang.Long.longValue:()J
            lload 3 /* now */
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getLeeway:()I
            i2l
            ladd
            lcmp
            ifle 10
         9: .line 326
            new java.lang.RuntimeException
            dup
            ldc "Invalid JWT token: iat > now"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 5 // java.lang.Long iat
        10: .line 330
      StackMap locals:
      StackMap stack:
            aload 1 /* jwt */
            ldc "nbf"
            invokevirtual io.vertx.core.json.JsonObject.containsKey:(Ljava/lang/String;)Z
            ifeq 14
        11: .line 331
            aload 1 /* jwt */
            ldc "nbf"
            invokevirtual io.vertx.core.json.JsonObject.getLong:(Ljava/lang/String;)Ljava/lang/Long;
            astore 5 /* nbf */
        start local 5 // java.lang.Long nbf
        12: .line 333
            aload 5 /* nbf */
            invokevirtual java.lang.Long.longValue:()J
            lload 3 /* now */
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getLeeway:()I
            i2l
            ladd
            lcmp
            ifle 14
        13: .line 334
            new java.lang.RuntimeException
            dup
            ldc "Invalid JWT token: nbf > now"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 5 // java.lang.Long nbf
        14: .line 338
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 3 // long now
        end local 2 // io.vertx.ext.jwt.JWTOptions options
        end local 1 // io.vertx.core.json.JsonObject jwt
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   15     0     this  Lio/vertx/ext/jwt/JWT;
            0   15     1      jwt  Lio/vertx/core/json/JsonObject;
            0   15     2  options  Lio/vertx/ext/jwt/JWTOptions;
            3   15     3      now  J
            8   10     5      iat  Ljava/lang/Long;
           12   14     5      nbf  Ljava/lang/Long;
    MethodParameters:
         Name  Flags
      jwt      
      options  

  public java.lang.String sign(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=6, locals=12, args_size=3
        start local 0 // io.vertx.ext.jwt.JWT this
        start local 1 // io.vertx.core.json.JsonObject payload
        start local 2 // io.vertx.ext.jwt.JWTOptions options
         0: .line 342
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getAlgorithm:()Ljava/lang/String;
            astore 3 /* algorithm */
        start local 3 // java.lang.String algorithm
         1: .line 344
            aload 0 /* this */
            getfield io.vertx.ext.jwt.JWT.cryptoMap:Ljava/util/Map;
            aload 3 /* algorithm */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.List
            astore 4 /* cryptos */
        start local 4 // java.util.List cryptos
         2: .line 346
            aload 4 /* cryptos */
            ifnull 3
            aload 4 /* cryptos */
            invokeinterface java.util.List.size:()I
            ifne 4
         3: .line 347
      StackMap locals: java.lang.String java.util.List
      StackMap stack:
            new java.lang.RuntimeException
            dup
            ldc "Algorithm not supported"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 351
      StackMap locals:
      StackMap stack:
            new io.vertx.core.json.JsonObject
            dup
            invokespecial io.vertx.core.json.JsonObject.<init>:()V
         5: .line 352
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getHeader:()Lio/vertx/core/json/JsonObject;
            invokevirtual io.vertx.core.json.JsonObject.mergeIn:(Lio/vertx/core/json/JsonObject;)Lio/vertx/core/json/JsonObject;
         6: .line 353
            ldc "typ"
            ldc "JWT"
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/json/JsonObject;
         7: .line 354
            ldc "alg"
            aload 3 /* algorithm */
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/json/JsonObject;
         8: .line 351
            astore 5 /* header */
        start local 5 // io.vertx.core.json.JsonObject header
         9: .line 357
            invokestatic java.lang.System.currentTimeMillis:()J
            ldc 1000
            ldiv
            lstore 6 /* timestamp */
        start local 6 // long timestamp
        10: .line 359
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.isNoTimestamp:()Z
            ifne 12
        11: .line 360
            aload 1 /* payload */
            ldc "iat"
            aload 1 /* payload */
            ldc "iat"
            lload 6 /* timestamp */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual io.vertx.core.json.JsonObject.getValue:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/Object;)Lio/vertx/core/json/JsonObject;
            pop
        12: .line 363
      StackMap locals: io.vertx.core.json.JsonObject long
      StackMap stack:
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getExpiresInSeconds:()I
            ifle 14
        13: .line 364
            aload 1 /* payload */
            ldc "exp"
            lload 6 /* timestamp */
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getExpiresInSeconds:()I
            i2l
            ladd
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/Long;)Lio/vertx/core/json/JsonObject;
            pop
        14: .line 367
      StackMap locals:
      StackMap stack:
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getAudience:()Ljava/util/List;
            ifnull 19
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getAudience:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_1
            if_icmplt 19
        15: .line 368
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getAudience:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_1
            if_icmple 18
        16: .line 369
            aload 1 /* payload */
            ldc "aud"
            new io.vertx.core.json.JsonArray
            dup
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getAudience:()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
        17: .line 370
            goto 19
        18: .line 371
      StackMap locals:
      StackMap stack:
            aload 1 /* payload */
            ldc "aud"
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getAudience:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/json/JsonObject;
            pop
        19: .line 375
      StackMap locals:
      StackMap stack:
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getIssuer:()Ljava/lang/String;
            ifnull 21
        20: .line 376
            aload 1 /* payload */
            ldc "iss"
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getIssuer:()Ljava/lang/String;
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/json/JsonObject;
            pop
        21: .line 379
      StackMap locals:
      StackMap stack:
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getSubject:()Ljava/lang/String;
            ifnull 23
        22: .line 380
            aload 1 /* payload */
            ldc "sub"
            aload 2 /* options */
            invokevirtual io.vertx.ext.jwt.JWTOptions.getSubject:()Ljava/lang/String;
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/json/JsonObject;
            pop
        23: .line 384
      StackMap locals:
      StackMap stack:
            aload 5 /* header */
            invokevirtual io.vertx.core.json.JsonObject.encode:()Ljava/lang/String;
            invokestatic io.vertx.ext.jwt.JWT.base64urlEncode:(Ljava/lang/String;)Ljava/lang/String;
            astore 8 /* headerSegment */
        start local 8 // java.lang.String headerSegment
        24: .line 385
            aload 1 /* payload */
            invokevirtual io.vertx.core.json.JsonObject.encode:()Ljava/lang/String;
            invokestatic io.vertx.ext.jwt.JWT.base64urlEncode:(Ljava/lang/String;)Ljava/lang/String;
            astore 9 /* payloadSegment */
        start local 9 // java.lang.String payloadSegment
        25: .line 386
            new java.lang.StringBuilder
            dup
            aload 8 /* headerSegment */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 9 /* payloadSegment */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 10 /* signingInput */
        start local 10 // java.lang.String signingInput
        26: .line 387
            aload 4 /* cryptos */
            getstatic io.vertx.ext.jwt.JWT.RND:Ljava/util/Random;
            aload 4 /* cryptos */
            invokeinterface java.util.List.size:()I
            invokevirtual java.util.Random.nextInt:(I)I
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast io.vertx.ext.jwt.Crypto
            aload 10 /* signingInput */
            getstatic io.vertx.ext.jwt.JWT.UTF8:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            invokeinterface io.vertx.ext.jwt.Crypto.sign:([B)[B
            invokestatic io.vertx.ext.jwt.JWT.base64urlEncode:([B)Ljava/lang/String;
            astore 11 /* signSegment */
        start local 11 // java.lang.String signSegment
        27: .line 389
            new java.lang.StringBuilder
            dup
            aload 8 /* headerSegment */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 9 /* payloadSegment */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 11 /* signSegment */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 11 // java.lang.String signSegment
        end local 10 // java.lang.String signingInput
        end local 9 // java.lang.String payloadSegment
        end local 8 // java.lang.String headerSegment
        end local 6 // long timestamp
        end local 5 // io.vertx.core.json.JsonObject header
        end local 4 // java.util.List cryptos
        end local 3 // java.lang.String algorithm
        end local 2 // io.vertx.ext.jwt.JWTOptions options
        end local 1 // io.vertx.core.json.JsonObject payload
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   28     0            this  Lio/vertx/ext/jwt/JWT;
            0   28     1         payload  Lio/vertx/core/json/JsonObject;
            0   28     2         options  Lio/vertx/ext/jwt/JWTOptions;
            1   28     3       algorithm  Ljava/lang/String;
            2   28     4         cryptos  Ljava/util/List<Lio/vertx/ext/jwt/Crypto;>;
            9   28     5          header  Lio/vertx/core/json/JsonObject;
           10   28     6       timestamp  J
           24   28     8   headerSegment  Ljava/lang/String;
           25   28     9  payloadSegment  Ljava/lang/String;
           26   28    10    signingInput  Ljava/lang/String;
           27   28    11     signSegment  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      payload  
      options  

  private static byte[] base64urlDecode(java.lang.String);
    descriptor: (Ljava/lang/String;)[B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.lang.String str
         0: .line 393
            getstatic io.vertx.ext.jwt.JWT.decoder:Ljava/util/Base64$Decoder;
            aload 0 /* str */
            getstatic io.vertx.ext.jwt.JWT.UTF8:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            invokevirtual java.util.Base64$Decoder.decode:([B)[B
            areturn
        end local 0 // java.lang.String str
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0   str  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      str   

  private static java.lang.String base64urlEncode(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String str
         0: .line 397
            aload 0 /* str */
            getstatic io.vertx.ext.jwt.JWT.UTF8:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            invokestatic io.vertx.ext.jwt.JWT.base64urlEncode:([B)Ljava/lang/String;
            areturn
        end local 0 // java.lang.String str
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0   str  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      str   

  private static java.lang.String base64urlEncode(byte[]);
    descriptor: ([B)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // byte[] bytes
         0: .line 401
            getstatic io.vertx.ext.jwt.JWT.encoder:Ljava/util/Base64$Encoder;
            aload 0 /* bytes */
            invokevirtual java.util.Base64$Encoder.encodeToString:([B)Ljava/lang/String;
            areturn
        end local 0 // byte[] bytes
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0  bytes  [B
    MethodParameters:
       Name  Flags
      bytes  

  public boolean isUnsecure();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // io.vertx.ext.jwt.JWT this
         0: .line 405
            aload 0 /* this */
            getfield io.vertx.ext.jwt.JWT.cryptoMap:Ljava/util/Map;
            invokeinterface java.util.Map.size:()I
            iconst_1
            if_icmpne 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lio/vertx/ext/jwt/JWT;

  public java.util.Collection<java.lang.String> availableAlgorithms();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.vertx.ext.jwt.JWT this
         0: .line 409
            aload 0 /* this */
            getfield io.vertx.ext.jwt.JWT.cryptoMap:Ljava/util/Map;
            invokeinterface java.util.Map.keySet:()Ljava/util/Set;
            areturn
        end local 0 // io.vertx.ext.jwt.JWT this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/vertx/ext/jwt/JWT;
    Signature: ()Ljava/util/Collection<Ljava/lang/String;>;

  private static java.util.List lambda$0(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/util/List;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String k
         0: .line 76
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            areturn
        end local 0 // java.lang.String k
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     k  Ljava/lang/String;

  private static java.util.List lambda$1(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/util/List;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String k
         0: .line 91
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            areturn
        end local 0 // java.lang.String k
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     k  Ljava/lang/String;

  private static java.util.List lambda$2(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/util/List;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String k
         0: .line 122
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            areturn
        end local 0 // java.lang.String k
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     k  Ljava/lang/String;
}
SourceFile: "JWT.java"
NestMembers:
  io.vertx.ext.jwt.JWT$1
InnerClasses:
  io.vertx.ext.jwt.JWT$1
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public Decoder = java.util.Base64$Decoder of java.util.Base64
  public Encoder = java.util.Base64$Encoder of java.util.Base64