public class org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo
  super_class: java.lang.Object
{
  private final java.lang.String opaque;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final long nonceValidity;
    descriptor: J
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

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

  private final java.util.Map<java.lang.String, org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo> nonces;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Lorg/apache/catalina/authenticator/DigestAuthenticator$NonceInfo;>;

  private boolean validateUri;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

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

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

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

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

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

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

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

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

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

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

  private boolean nonceStale;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  public void <init>(java.lang.String, long, java.lang.String, java.util.Map<java.lang.String, org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo>, );
    descriptor: (Ljava/lang/String;JLjava/lang/String;Ljava/util/Map;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=7, args_size=6
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
        start local 1 // java.lang.String opaque
        start local 2 // long nonceValidity
        start local 4 // java.lang.String key
        start local 5 // java.util.Map nonces
        start local 6 // boolean validateUri
         0: .line 436
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 420
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.validateUri:Z
         2: .line 422
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.userName:Ljava/lang/String;
         3: .line 423
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.method:Ljava/lang/String;
         4: .line 424
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.uri:Ljava/lang/String;
         5: .line 425
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.response:Ljava/lang/String;
         6: .line 426
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
         7: .line 427
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nc:Ljava/lang/String;
         8: .line 428
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.cnonce:Ljava/lang/String;
         9: .line 429
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.realmName:Ljava/lang/String;
        10: .line 430
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.qop:Ljava/lang/String;
        11: .line 431
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.opaqueReceived:Ljava/lang/String;
        12: .line 433
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonceStale:Z
        13: .line 438
            aload 0 /* this */
            aload 1 /* opaque */
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.opaque:Ljava/lang/String;
        14: .line 439
            aload 0 /* this */
            lload 2 /* nonceValidity */
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonceValidity:J
        15: .line 440
            aload 0 /* this */
            aload 4 /* key */
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.key:Ljava/lang/String;
        16: .line 441
            aload 0 /* this */
            aload 5 /* nonces */
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonces:Ljava/util/Map;
        17: .line 442
            aload 0 /* this */
            iload 6 /* validateUri */
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.validateUri:Z
        18: .line 443
            return
        end local 6 // boolean validateUri
        end local 5 // java.util.Map nonces
        end local 4 // java.lang.String key
        end local 2 // long nonceValidity
        end local 1 // java.lang.String opaque
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   19     0           this  Lorg/apache/catalina/authenticator/DigestAuthenticator$DigestInfo;
            0   19     1         opaque  Ljava/lang/String;
            0   19     2  nonceValidity  J
            0   19     4            key  Ljava/lang/String;
            0   19     5         nonces  Ljava/util/Map<Ljava/lang/String;Lorg/apache/catalina/authenticator/DigestAuthenticator$NonceInfo;>;
            0   19     6    validateUri  Z
    Signature: (Ljava/lang/String;JLjava/lang/String;Ljava/util/Map<Ljava/lang/String;Lorg/apache/catalina/authenticator/DigestAuthenticator$NonceInfo;>;Z)V
    MethodParameters:
               Name  Flags
      opaque         
      nonceValidity  
      key            
      nonces         
      validateUri    

  public java.lang.String getUsername();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
         0: .line 447
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.userName:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator$DigestInfo;

  public boolean parse(org.apache.catalina.connector.Request, java.lang.String);
    descriptor: (Lorg/apache/catalina/connector/Request;Ljava/lang/String;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
        start local 1 // org.apache.catalina.connector.Request request
        start local 2 // java.lang.String authorization
         0: .line 453
            aload 2 /* authorization */
            ifnonnull 2
         1: .line 454
            iconst_0
            ireturn
         2: .line 460
      StackMap locals:
      StackMap stack:
            new java.io.StringReader
            dup
            aload 2 /* authorization */
            invokespecial java.io.StringReader.<init>:(Ljava/lang/String;)V
         3: .line 459
            invokestatic org.apache.tomcat.util.http.parser.Authorization.parseAuthorizationDigest:(Ljava/io/StringReader;)Ljava/util/Map;
            astore 3 /* directives */
        start local 3 // java.util.Map directives
         4: .line 461
            goto 7
        end local 3 // java.util.Map directives
      StackMap locals:
      StackMap stack: java.io.IOException
         5: pop
         6: .line 462
            iconst_0
            ireturn
        start local 3 // java.util.Map directives
         7: .line 465
      StackMap locals: java.util.Map
      StackMap stack:
            aload 3 /* directives */
            ifnonnull 9
         8: .line 466
            iconst_0
            ireturn
         9: .line 469
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getMethod:()Ljava/lang/String;
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.method:Ljava/lang/String;
        10: .line 470
            aload 0 /* this */
            aload 3 /* directives */
            ldc "username"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.userName:Ljava/lang/String;
        11: .line 471
            aload 0 /* this */
            aload 3 /* directives */
            ldc "realm"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.realmName:Ljava/lang/String;
        12: .line 472
            aload 0 /* this */
            aload 3 /* directives */
            ldc "nonce"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
        13: .line 473
            aload 0 /* this */
            aload 3 /* directives */
            ldc "nc"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nc:Ljava/lang/String;
        14: .line 474
            aload 0 /* this */
            aload 3 /* directives */
            ldc "cnonce"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.cnonce:Ljava/lang/String;
        15: .line 475
            aload 0 /* this */
            aload 3 /* directives */
            ldc "qop"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.qop:Ljava/lang/String;
        16: .line 476
            aload 0 /* this */
            aload 3 /* directives */
            ldc "uri"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.uri:Ljava/lang/String;
        17: .line 477
            aload 0 /* this */
            aload 3 /* directives */
            ldc "response"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.response:Ljava/lang/String;
        18: .line 478
            aload 0 /* this */
            aload 3 /* directives */
            ldc "opaque"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.opaqueReceived:Ljava/lang/String;
        19: .line 480
            iconst_1
            ireturn
        end local 3 // java.util.Map directives
        end local 2 // java.lang.String authorization
        end local 1 // org.apache.catalina.connector.Request request
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   20     0           this  Lorg/apache/catalina/authenticator/DigestAuthenticator$DigestInfo;
            0   20     1        request  Lorg/apache/catalina/connector/Request;
            0   20     2  authorization  Ljava/lang/String;
            4    5     3     directives  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
            7   20     3     directives  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
      Exception table:
        from    to  target  type
           2     4       5  Class java.io.IOException
    MethodParameters:
               Name  Flags
      request        
      authorization  

  public boolean validate(org.apache.catalina.connector.Request);
    descriptor: (Lorg/apache/catalina/connector/Request;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=16, args_size=2
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
        start local 1 // org.apache.catalina.connector.Request request
         0: .line 484
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.userName:Ljava/lang/String;
            ifnull 2
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.realmName:Ljava/lang/String;
            ifnull 2
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
            ifnull 2
         1: .line 485
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.uri:Ljava/lang/String;
            ifnull 2
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.response:Ljava/lang/String;
            ifnonnull 3
         2: .line 486
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         3: .line 490
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.validateUri:Z
            ifeq 21
         4: .line 492
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getQueryString:()Ljava/lang/String;
            astore 3 /* query */
        start local 3 // java.lang.String query
         5: .line 493
            aload 3 /* query */
            ifnonnull 8
         6: .line 494
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getRequestURI:()Ljava/lang/String;
            astore 2 /* uriQuery */
        start local 2 // java.lang.String uriQuery
         7: .line 495
            goto 9
        end local 2 // java.lang.String uriQuery
         8: .line 496
      StackMap locals: org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo org.apache.catalina.connector.Request top java.lang.String
      StackMap stack:
            new java.lang.StringBuilder
            dup
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getRequestURI:()Ljava/lang/String;
            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 3 /* query */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 2 /* uriQuery */
        start local 2 // java.lang.String uriQuery
         9: .line 498
      StackMap locals: org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo org.apache.catalina.connector.Request java.lang.String java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.uri:Ljava/lang/String;
            aload 2 /* uriQuery */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 21
        10: .line 502
            aload 1 /* request */
            ldc "host"
            invokevirtual org.apache.catalina.connector.Request.getHeader:(Ljava/lang/String;)Ljava/lang/String;
            astore 4 /* host */
        start local 4 // java.lang.String host
        11: .line 503
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getScheme:()Ljava/lang/String;
            astore 5 /* scheme */
        start local 5 // java.lang.String scheme
        12: .line 504
            aload 4 /* host */
            ifnull 20
            aload 2 /* uriQuery */
            aload 5 /* scheme */
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 20
        13: .line 505
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            astore 6 /* absolute */
        start local 6 // java.lang.StringBuilder absolute
        14: .line 506
            aload 6 /* absolute */
            aload 5 /* scheme */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        15: .line 507
            aload 6 /* absolute */
            ldc "://"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        16: .line 508
            aload 6 /* absolute */
            aload 4 /* host */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        17: .line 509
            aload 6 /* absolute */
            aload 2 /* uriQuery */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        18: .line 510
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.uri:Ljava/lang/String;
            aload 6 /* absolute */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 21
        19: .line 511
            iconst_0
            ireturn
        end local 6 // java.lang.StringBuilder absolute
        20: .line 514
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
            iconst_0
            ireturn
        end local 5 // java.lang.String scheme
        end local 4 // java.lang.String host
        end local 3 // java.lang.String query
        end local 2 // java.lang.String uriQuery
        21: .line 520
      StackMap locals: org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo org.apache.catalina.connector.Request
      StackMap stack:
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getContext:()Lorg/apache/catalina/Context;
            invokestatic org.apache.catalina.authenticator.DigestAuthenticator.getRealmName:(Lorg/apache/catalina/Context;)Ljava/lang/String;
            astore 2 /* lcRealm */
        start local 2 // java.lang.String lcRealm
        22: .line 521
            aload 2 /* lcRealm */
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.realmName:Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 24
        23: .line 522
            iconst_0
            ireturn
        24: .line 526
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.opaque:Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.opaqueReceived:Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 26
        25: .line 527
            iconst_0
            ireturn
        26: .line 531
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
            bipush 58
            invokevirtual java.lang.String.indexOf:(I)I
            istore 3 /* i */
        start local 3 // int i
        27: .line 532
            iload 3 /* i */
            iflt 28
            iload 3 /* i */
            iconst_1
            iadd
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
            invokevirtual java.lang.String.length:()I
            if_icmpne 29
        28: .line 533
      StackMap locals: int
      StackMap stack:
            iconst_0
            ireturn
        29: .line 537
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
            iconst_0
            iload 3 /* i */
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            invokestatic java.lang.Long.parseLong:(Ljava/lang/String;)J
            lstore 4 /* nonceTime */
        start local 4 // long nonceTime
        30: .line 538
            goto 33
        end local 4 // long nonceTime
      StackMap locals:
      StackMap stack: java.lang.NumberFormatException
        31: pop
        32: .line 539
            iconst_0
            ireturn
        start local 4 // long nonceTime
        33: .line 541
      StackMap locals: long
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
            iload 3 /* i */
            iconst_1
            iadd
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            astore 6 /* md5clientIpTimeKey */
        start local 6 // java.lang.String md5clientIpTimeKey
        34: .line 542
            invokestatic java.lang.System.currentTimeMillis:()J
            lstore 7 /* currentTime */
        start local 7 // long currentTime
        35: .line 543
            lload 7 /* currentTime */
            lload 4 /* nonceTime */
            lsub
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonceValidity:J
            lcmp
            ifle 43
        36: .line 544
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonceStale:Z
        37: .line 545
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonces:Ljava/util/Map;
            dup
            astore 9
            monitorenter
        38: .line 546
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonces:Ljava/util/Map;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
            invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
        39: .line 545
            aload 9
            monitorexit
        40: goto 43
      StackMap locals: org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo org.apache.catalina.connector.Request java.lang.String int long java.lang.String long java.util.Map
      StackMap stack: java.lang.Throwable
        41: aload 9
            monitorexit
        42: athrow
        43: .line 550
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getRemoteAddr:()Ljava/lang/String;
            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;
            lload 4 /* nonceTime */
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
            ldc ":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.key:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        44: .line 549
            astore 9 /* serverIpTimeKey */
        start local 9 // java.lang.String serverIpTimeKey
        45: .line 551
            iconst_1
            anewarray byte[]
            dup
            iconst_0
        46: .line 552
            aload 9 /* serverIpTimeKey */
            getstatic java.nio.charset.StandardCharsets.ISO_8859_1:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            aastore
        47: .line 551
            invokestatic org.apache.tomcat.util.security.ConcurrentMessageDigest.digestMD5:([[B)[B
            astore 10 /* buffer */
        start local 10 // byte[] buffer
        48: .line 553
            aload 10 /* buffer */
            invokestatic org.apache.tomcat.util.security.MD5Encoder.encode:([B)Ljava/lang/String;
            astore 11 /* md5ServerIpTimeKey */
        start local 11 // java.lang.String md5ServerIpTimeKey
        49: .line 554
            aload 11 /* md5ServerIpTimeKey */
            aload 6 /* md5clientIpTimeKey */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 51
        50: .line 555
            iconst_0
            ireturn
        51: .line 559
      StackMap locals: java.lang.String byte[] java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.qop:Ljava/lang/String;
            ifnull 53
            ldc "auth"
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.qop:Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 53
        52: .line 560
            iconst_0
            ireturn
        53: .line 565
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.qop:Ljava/lang/String;
            ifnonnull 56
        54: .line 566
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.cnonce:Ljava/lang/String;
            ifnonnull 55
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nc:Ljava/lang/String;
            ifnull 75
        55: .line 567
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        56: .line 570
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.cnonce:Ljava/lang/String;
            ifnull 57
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nc:Ljava/lang/String;
            ifnonnull 58
        57: .line 571
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        58: .line 575
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nc:Ljava/lang/String;
            invokevirtual java.lang.String.length:()I
            bipush 6
            if_icmplt 59
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nc:Ljava/lang/String;
            invokevirtual java.lang.String.length:()I
            bipush 8
            if_icmple 60
        59: .line 576
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        60: .line 580
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nc:Ljava/lang/String;
            bipush 16
            invokestatic java.lang.Long.parseLong:(Ljava/lang/String;I)J
            lstore 12 /* count */
        start local 12 // long count
        61: .line 581
            goto 64
        end local 12 // long count
      StackMap locals:
      StackMap stack: java.lang.NumberFormatException
        62: pop
        63: .line 582
            iconst_0
            ireturn
        start local 12 // long count
        64: .line 585
      StackMap locals: long
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonces:Ljava/util/Map;
            dup
            astore 15
            monitorenter
        65: .line 586
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonces:Ljava/util/Map;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo
            astore 14 /* info */
        start local 14 // org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo info
        66: .line 585
            aload 15
            monitorexit
        67: goto 70
        end local 14 // org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo info
      StackMap locals: org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo org.apache.catalina.connector.Request java.lang.String int long java.lang.String long java.lang.String byte[] java.lang.String long top java.util.Map
      StackMap stack: java.lang.Throwable
        68: aload 15
            monitorexit
        69: athrow
        start local 14 // org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo info
        70: .line 588
      StackMap locals: org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo org.apache.catalina.connector.Request java.lang.String int long java.lang.String long java.lang.String byte[] java.lang.String long org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo
      StackMap stack:
            aload 14 /* info */
            ifnonnull 73
        71: .line 591
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonceStale:Z
        72: .line 592
            goto 75
        73: .line 593
      StackMap locals:
      StackMap stack:
            aload 14 /* info */
            lload 12 /* count */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo.nonceCountValid:(J)Z
            ifne 75
        74: .line 594
            iconst_0
            ireturn
        end local 14 // org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo info
        end local 12 // long count
        75: .line 598
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 11 // java.lang.String md5ServerIpTimeKey
        end local 10 // byte[] buffer
        end local 9 // java.lang.String serverIpTimeKey
        end local 7 // long currentTime
        end local 6 // java.lang.String md5clientIpTimeKey
        end local 4 // long nonceTime
        end local 3 // int i
        end local 2 // java.lang.String lcRealm
        end local 1 // org.apache.catalina.connector.Request request
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   76     0                this  Lorg/apache/catalina/authenticator/DigestAuthenticator$DigestInfo;
            0   76     1             request  Lorg/apache/catalina/connector/Request;
            7    8     2            uriQuery  Ljava/lang/String;
            9   21     2            uriQuery  Ljava/lang/String;
            5   21     3               query  Ljava/lang/String;
           11   21     4                host  Ljava/lang/String;
           12   21     5              scheme  Ljava/lang/String;
           14   20     6            absolute  Ljava/lang/StringBuilder;
           22   76     2             lcRealm  Ljava/lang/String;
           27   76     3                   i  I
           30   31     4           nonceTime  J
           33   76     4           nonceTime  J
           34   76     6  md5clientIpTimeKey  Ljava/lang/String;
           35   76     7         currentTime  J
           45   76     9     serverIpTimeKey  Ljava/lang/String;
           48   76    10              buffer  [B
           49   76    11  md5ServerIpTimeKey  Ljava/lang/String;
           61   62    12               count  J
           64   75    12               count  J
           66   68    14                info  Lorg/apache/catalina/authenticator/DigestAuthenticator$NonceInfo;
           70   75    14                info  Lorg/apache/catalina/authenticator/DigestAuthenticator$NonceInfo;
      Exception table:
        from    to  target  type
          29    30      31  Class java.lang.NumberFormatException
          38    40      41  any
          41    42      41  any
          60    61      62  Class java.lang.NumberFormatException
          65    67      68  any
          68    69      68  any
    MethodParameters:
         Name  Flags
      request  

  public boolean isNonceStale();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
         0: .line 602
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonceStale:Z
            ireturn
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator$DigestInfo;

  public java.security.Principal authenticate(org.apache.catalina.Realm);
    descriptor: (Lorg/apache/catalina/Realm;)Ljava/security/Principal;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=9, locals=5, args_size=2
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
        start local 1 // org.apache.catalina.Realm realm
         0: .line 608
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.method:Ljava/lang/String;
            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 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.uri:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 2 /* a2 */
        start local 2 // java.lang.String a2
         1: .line 610
            iconst_1
            anewarray byte[]
            dup
            iconst_0
         2: .line 611
            aload 2 /* a2 */
            getstatic java.nio.charset.StandardCharsets.ISO_8859_1:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            aastore
         3: .line 610
            invokestatic org.apache.tomcat.util.security.ConcurrentMessageDigest.digestMD5:([[B)[B
            astore 3 /* buffer */
        start local 3 // byte[] buffer
         4: .line 612
            aload 3 /* buffer */
            invokestatic org.apache.tomcat.util.security.MD5Encoder.encode:([B)Ljava/lang/String;
            astore 4 /* md5a2 */
        start local 4 // java.lang.String md5a2
         5: .line 614
            aload 1 /* realm */
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.userName:Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.response:Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nonce:Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.nc:Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.cnonce:Ljava/lang/String;
         6: .line 615
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.qop:Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.realmName:Ljava/lang/String;
            aload 4 /* md5a2 */
         7: .line 614
            invokeinterface org.apache.catalina.Realm.authenticate:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
            areturn
        end local 4 // java.lang.String md5a2
        end local 3 // byte[] buffer
        end local 2 // java.lang.String a2
        end local 1 // org.apache.catalina.Realm realm
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    8     0    this  Lorg/apache/catalina/authenticator/DigestAuthenticator$DigestInfo;
            0    8     1   realm  Lorg/apache/catalina/Realm;
            1    8     2      a2  Ljava/lang/String;
            4    8     3  buffer  [B
            5    8     4   md5a2  Ljava/lang/String;
    MethodParameters:
       Name  Flags
      realm  
}
SourceFile: "DigestAuthenticator.java"
NestHost: org.apache.catalina.authenticator.DigestAuthenticator
InnerClasses:
  public DigestInfo = org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo of org.apache.catalina.authenticator.DigestAuthenticator
  public NonceInfo = org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo of org.apache.catalina.authenticator.DigestAuthenticator