final class sun.security.smartcardio.CardImpl extends javax.smartcardio.Card
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: sun.security.smartcardio.CardImpl
  super_class: javax.smartcardio.Card
{
  private final sun.security.smartcardio.TerminalImpl terminal;
    descriptor: Lsun/security/smartcardio/TerminalImpl;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  final long cardId;
    descriptor: J
    flags: (0x0010) ACC_FINAL

  private final javax.smartcardio.ATR atr;
    descriptor: Ljavax/smartcardio/ATR;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  final int protocol;
    descriptor: I
    flags: (0x0010) ACC_FINAL

  private final sun.security.smartcardio.ChannelImpl basicChannel;
    descriptor: Lsun/security/smartcardio/ChannelImpl;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private volatile sun.security.smartcardio.CardImpl$State state;
    descriptor: Lsun/security/smartcardio/CardImpl$State;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

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

  private static final boolean isWindows;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static byte[] commandOpenChannel;
    descriptor: [B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private static final boolean invertReset;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=1, args_size=0
         0: .line 70
            new sun.security.smartcardio.CardImpl$1
            dup
            invokespecial sun.security.smartcardio.CardImpl$1.<init>:()V
         1: .line 69
            invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
            checkcast java.lang.String
            astore 0 /* osName */
        start local 0 // java.lang.String osName
         2: .line 75
            aload 0 /* osName */
            ldc "Windows"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            putstatic sun.security.smartcardio.CardImpl.isWindows:Z
        end local 0 // java.lang.String osName
         3: .line 177
            iconst_5
            newarray 8
            dup
            iconst_1
            bipush 112
            bastore
            dup
            iconst_4
            iconst_1
            bastore
            putstatic sun.security.smartcardio.CardImpl.commandOpenChannel:[B
         4: .line 261
            new sun.security.action.GetPropertyAction
            dup
         5: .line 262
            ldc "sun.security.smartcardio.invertCardReset"
            ldc "true"
         6: .line 261
            invokespecial sun.security.action.GetPropertyAction.<init>:(Ljava/lang/String;Ljava/lang/String;)V
         7: .line 260
            invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
            checkcast java.lang.String
         8: .line 259
            invokestatic java.lang.Boolean.parseBoolean:(Ljava/lang/String;)Z
         9: .line 258
            putstatic sun.security.smartcardio.CardImpl.invertReset:Z
        10: .line 262
            return
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            2    3     0  osName  Ljava/lang/String;

  void <init>(sun.security.smartcardio.TerminalImpl, java.lang.String);
    descriptor: (Lsun/security/smartcardio/TerminalImpl;Ljava/lang/String;)V
    flags: (0x0000) 
    Code:
      stack=6, locals=7, args_size=3
        start local 0 // sun.security.smartcardio.CardImpl this
        start local 1 // sun.security.smartcardio.TerminalImpl terminal
        start local 2 // java.lang.String protocol
         0: .line 78
            aload 0 /* this */
            invokespecial javax.smartcardio.Card.<init>:()V
         1: .line 79
            aload 0 /* this */
            aload 1 /* terminal */
            putfield sun.security.smartcardio.CardImpl.terminal:Lsun/security/smartcardio/TerminalImpl;
         2: .line 80
            iconst_2
            istore 3 /* sharingMode */
        start local 3 // int sharingMode
         3: .line 82
            aload 2 /* protocol */
            ldc "*"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 6
         4: .line 83
            iconst_3
            istore 4 /* connectProtocol */
        start local 4 // int connectProtocol
         5: .line 84
            goto 19
        end local 4 // int connectProtocol
      StackMap locals: sun.security.smartcardio.CardImpl sun.security.smartcardio.TerminalImpl java.lang.String int
      StackMap stack:
         6: aload 2 /* protocol */
            ldc "T=0"
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 9
         7: .line 85
            iconst_1
            istore 4 /* connectProtocol */
        start local 4 // int connectProtocol
         8: .line 86
            goto 19
        end local 4 // int connectProtocol
      StackMap locals:
      StackMap stack:
         9: aload 2 /* protocol */
            ldc "T=1"
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 12
        10: .line 87
            iconst_2
            istore 4 /* connectProtocol */
        start local 4 // int connectProtocol
        11: .line 88
            goto 19
        end local 4 // int connectProtocol
      StackMap locals:
      StackMap stack:
        12: aload 2 /* protocol */
            ldc "direct"
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 18
        13: .line 94
            getstatic sun.security.smartcardio.CardImpl.isWindows:Z
            ifeq 14
            iconst_0
            goto 15
      StackMap locals:
      StackMap stack:
        14: iconst_4
      StackMap locals:
      StackMap stack: int
        15: istore 4 /* connectProtocol */
        start local 4 // int connectProtocol
        16: .line 96
            iconst_3
            istore 3 /* sharingMode */
        17: .line 97
            goto 19
        end local 4 // int connectProtocol
        18: .line 98
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unsupported protocol "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* protocol */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        start local 4 // int connectProtocol
        19: .line 100
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            aload 1 /* terminal */
            getfield sun.security.smartcardio.TerminalImpl.contextId:J
            aload 1 /* terminal */
            getfield sun.security.smartcardio.TerminalImpl.name:Ljava/lang/String;
        20: .line 101
            iload 3 /* sharingMode */
            iload 4 /* connectProtocol */
        21: .line 100
            invokestatic sun.security.smartcardio.PCSC.SCardConnect:(JLjava/lang/String;II)J
            putfield sun.security.smartcardio.CardImpl.cardId:J
        22: .line 102
            iconst_2
            newarray 8
            astore 5 /* status */
        start local 5 // byte[] status
        23: .line 103
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.cardId:J
            aload 5 /* status */
            invokestatic sun.security.smartcardio.PCSC.SCardStatus:(J[B)[B
            astore 6 /* atrBytes */
        start local 6 // byte[] atrBytes
        24: .line 104
            aload 0 /* this */
            new javax.smartcardio.ATR
            dup
            aload 6 /* atrBytes */
            invokespecial javax.smartcardio.ATR.<init>:([B)V
            putfield sun.security.smartcardio.CardImpl.atr:Ljavax/smartcardio/ATR;
        25: .line 105
            aload 0 /* this */
            aload 5 /* status */
            iconst_1
            baload
            sipush 255
            iand
            putfield sun.security.smartcardio.CardImpl.protocol:I
        26: .line 106
            aload 0 /* this */
            new sun.security.smartcardio.ChannelImpl
            dup
            aload 0 /* this */
            iconst_0
            invokespecial sun.security.smartcardio.ChannelImpl.<init>:(Lsun/security/smartcardio/CardImpl;I)V
            putfield sun.security.smartcardio.CardImpl.basicChannel:Lsun/security/smartcardio/ChannelImpl;
        27: .line 107
            aload 0 /* this */
            getstatic sun.security.smartcardio.CardImpl$State.OK:Lsun/security/smartcardio/CardImpl$State;
            putfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
        28: .line 108
            return
        end local 6 // byte[] atrBytes
        end local 5 // byte[] status
        end local 4 // int connectProtocol
        end local 3 // int sharingMode
        end local 2 // java.lang.String protocol
        end local 1 // sun.security.smartcardio.TerminalImpl terminal
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   29     0             this  Lsun/security/smartcardio/CardImpl;
            0   29     1         terminal  Lsun/security/smartcardio/TerminalImpl;
            0   29     2         protocol  Ljava/lang/String;
            3   29     3      sharingMode  I
            5    6     4  connectProtocol  I
            8    9     4  connectProtocol  I
           11   12     4  connectProtocol  I
           16   18     4  connectProtocol  I
           19   29     4  connectProtocol  I
           23   29     5           status  [B
           24   29     6         atrBytes  [B
    Exceptions:
      throws sun.security.smartcardio.PCSCException
    MethodParameters:
          Name  Flags
      terminal  
      protocol  

  void checkState();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 111
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
            astore 1 /* s */
        start local 1 // sun.security.smartcardio.CardImpl$State s
         1: .line 112
            aload 1 /* s */
            getstatic sun.security.smartcardio.CardImpl$State.DISCONNECTED:Lsun/security/smartcardio/CardImpl$State;
            if_acmpne 3
         2: .line 113
            new java.lang.IllegalStateException
            dup
            ldc "Card has been disconnected"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 114
      StackMap locals: sun.security.smartcardio.CardImpl$State
      StackMap stack:
            aload 1 /* s */
            getstatic sun.security.smartcardio.CardImpl$State.REMOVED:Lsun/security/smartcardio/CardImpl$State;
            if_acmpne 5
         4: .line 115
            new java.lang.IllegalStateException
            dup
            ldc "Card has been removed"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 117
      StackMap locals:
      StackMap stack:
            return
        end local 1 // sun.security.smartcardio.CardImpl$State s
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lsun/security/smartcardio/CardImpl;
            1    6     1     s  Lsun/security/smartcardio/CardImpl$State;

  boolean isValid();
    descriptor: ()Z
    flags: (0x0000) 
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 120
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
            getstatic sun.security.smartcardio.CardImpl$State.OK:Lsun/security/smartcardio/CardImpl$State;
            if_acmpeq 2
         1: .line 121
            iconst_0
            ireturn
         2: .line 125
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.cardId:J
            iconst_2
            newarray 8
            invokestatic sun.security.smartcardio.PCSC.SCardStatus:(J[B)[B
            pop
         3: .line 126
            iconst_1
            ireturn
         4: .line 127
      StackMap locals:
      StackMap stack: sun.security.smartcardio.PCSCException
            pop
         5: .line 128
            aload 0 /* this */
            getstatic sun.security.smartcardio.CardImpl$State.REMOVED:Lsun/security/smartcardio/CardImpl$State;
            putfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
         6: .line 129
            iconst_0
            ireturn
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lsun/security/smartcardio/CardImpl;
      Exception table:
        from    to  target  type
           2     3       4  Class sun.security.smartcardio.PCSCException

  private void checkSecurity(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // sun.security.smartcardio.CardImpl this
        start local 1 // java.lang.String action
         0: .line 134
            invokestatic java.lang.System.getSecurityManager:()Ljava/lang/SecurityManager;
            astore 2 /* sm */
        start local 2 // java.lang.SecurityManager sm
         1: .line 135
            aload 2 /* sm */
            ifnull 3
         2: .line 136
            aload 2 /* sm */
            new javax.smartcardio.CardPermission
            dup
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.terminal:Lsun/security/smartcardio/TerminalImpl;
            getfield sun.security.smartcardio.TerminalImpl.name:Ljava/lang/String;
            aload 1 /* action */
            invokespecial javax.smartcardio.CardPermission.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            invokevirtual java.lang.SecurityManager.checkPermission:(Ljava/security/Permission;)V
         3: .line 138
      StackMap locals: java.lang.SecurityManager
      StackMap stack:
            return
        end local 2 // java.lang.SecurityManager sm
        end local 1 // java.lang.String action
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    4     0    this  Lsun/security/smartcardio/CardImpl;
            0    4     1  action  Ljava/lang/String;
            1    4     2      sm  Ljava/lang/SecurityManager;
    MethodParameters:
        Name  Flags
      action  

  void handleError(sun.security.smartcardio.PCSCException);
    descriptor: (Lsun/security/smartcardio/PCSCException;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // sun.security.smartcardio.CardImpl this
        start local 1 // sun.security.smartcardio.PCSCException e
         0: .line 141
            aload 1 /* e */
            getfield sun.security.smartcardio.PCSCException.code:I
            ldc -2146434967
            if_icmpne 2
         1: .line 142
            aload 0 /* this */
            getstatic sun.security.smartcardio.CardImpl$State.REMOVED:Lsun/security/smartcardio/CardImpl$State;
            putfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
         2: .line 144
      StackMap locals:
      StackMap stack:
            return
        end local 1 // sun.security.smartcardio.PCSCException e
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lsun/security/smartcardio/CardImpl;
            0    3     1     e  Lsun/security/smartcardio/PCSCException;
    MethodParameters:
      Name  Flags
      e     

  public javax.smartcardio.ATR getATR();
    descriptor: ()Ljavax/smartcardio/ATR;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 147
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.atr:Ljavax/smartcardio/ATR;
            areturn
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/security/smartcardio/CardImpl;

  public java.lang.String getProtocol();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 151
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.protocol:I
            tableswitch { // 1 - 2
                    1: 1
                    2: 2
              default: 3
          }
         1: .line 153
      StackMap locals:
      StackMap stack:
            ldc "T=0"
            areturn
         2: .line 155
      StackMap locals:
      StackMap stack:
            ldc "T=1"
            areturn
         3: .line 158
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "Unknown protocol "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.protocol:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lsun/security/smartcardio/CardImpl;

  public javax.smartcardio.CardChannel getBasicChannel();
    descriptor: ()Ljavax/smartcardio/CardChannel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 163
            aload 0 /* this */
            ldc "getBasicChannel"
            invokevirtual sun.security.smartcardio.CardImpl.checkSecurity:(Ljava/lang/String;)V
         1: .line 164
            aload 0 /* this */
            invokevirtual sun.security.smartcardio.CardImpl.checkState:()V
         2: .line 165
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.basicChannel:Lsun/security/smartcardio/ChannelImpl;
            areturn
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lsun/security/smartcardio/CardImpl;

  private static int getSW(byte[]);
    descriptor: ([B)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // byte[] b
         0: .line 169
            aload 0 /* b */
            arraylength
            iconst_2
            if_icmpge 2
         1: .line 170
            iconst_m1
            ireturn
         2: .line 172
      StackMap locals:
      StackMap stack:
            aload 0 /* b */
            aload 0 /* b */
            arraylength
            iconst_2
            isub
            baload
            sipush 255
            iand
            istore 1 /* sw1 */
        start local 1 // int sw1
         3: .line 173
            aload 0 /* b */
            aload 0 /* b */
            arraylength
            iconst_1
            isub
            baload
            sipush 255
            iand
            istore 2 /* sw2 */
        start local 2 // int sw2
         4: .line 174
            iload 1 /* sw1 */
            bipush 8
            ishl
            iload 2 /* sw2 */
            ior
            ireturn
        end local 2 // int sw2
        end local 1 // int sw1
        end local 0 // byte[] b
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0     b  [B
            3    5     1   sw1  I
            4    5     2   sw2  I
    MethodParameters:
      Name  Flags
      b     

  public javax.smartcardio.CardChannel openLogicalChannel();
    descriptor: ()Ljavax/smartcardio/CardChannel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=2, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 180
            aload 0 /* this */
            ldc "openLogicalChannel"
            invokevirtual sun.security.smartcardio.CardImpl.checkSecurity:(Ljava/lang/String;)V
         1: .line 181
            aload 0 /* this */
            invokevirtual sun.security.smartcardio.CardImpl.checkState:()V
         2: .line 182
            aload 0 /* this */
            invokevirtual sun.security.smartcardio.CardImpl.checkExclusive:()V
         3: .line 185
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.cardId:J
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.protocol:I
            getstatic sun.security.smartcardio.CardImpl.commandOpenChannel:[B
            iconst_0
            getstatic sun.security.smartcardio.CardImpl.commandOpenChannel:[B
            arraylength
         4: .line 184
            invokestatic sun.security.smartcardio.PCSC.SCardTransmit:(JI[BII)[B
            astore 1 /* response */
        start local 1 // byte[] response
         5: .line 186
            aload 1 /* response */
            arraylength
            iconst_3
            if_icmpne 6
            aload 1 /* response */
            invokestatic sun.security.smartcardio.CardImpl.getSW:([B)I
            ldc 36864
            if_icmpeq 11
         6: .line 187
      StackMap locals: byte[]
      StackMap stack:
            new javax.smartcardio.CardException
            dup
         7: .line 188
            new java.lang.StringBuilder
            dup
            ldc "openLogicalChannel() failed, card response: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         8: .line 189
            aload 1 /* response */
            invokestatic sun.security.smartcardio.PCSC.toString:([B)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         9: .line 188
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        10: .line 187
            invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 191
      StackMap locals:
      StackMap stack:
            new sun.security.smartcardio.ChannelImpl
            dup
            aload 0 /* this */
            aload 1 /* response */
            iconst_0
            baload
            invokespecial sun.security.smartcardio.ChannelImpl.<init>:(Lsun/security/smartcardio/CardImpl;I)V
        12: areturn
        end local 1 // byte[] response
        13: .line 192
      StackMap locals: sun.security.smartcardio.CardImpl
      StackMap stack: sun.security.smartcardio.PCSCException
            astore 1 /* e */
        start local 1 // sun.security.smartcardio.PCSCException e
        14: .line 193
            aload 0 /* this */
            aload 1 /* e */
            invokevirtual sun.security.smartcardio.CardImpl.handleError:(Lsun/security/smartcardio/PCSCException;)V
        15: .line 194
            new javax.smartcardio.CardException
            dup
            ldc "openLogicalChannel() failed"
            aload 1 /* e */
            invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 1 // sun.security.smartcardio.PCSCException e
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   16     0      this  Lsun/security/smartcardio/CardImpl;
            5   13     1  response  [B
           14   16     1         e  Lsun/security/smartcardio/PCSCException;
      Exception table:
        from    to  target  type
           3    12      13  Class sun.security.smartcardio.PCSCException
    Exceptions:
      throws javax.smartcardio.CardException

  void checkExclusive();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 199
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.exclusiveThread:Ljava/lang/Thread;
            astore 1 /* t */
        start local 1 // java.lang.Thread t
         1: .line 200
            aload 1 /* t */
            ifnonnull 3
         2: .line 201
            return
         3: .line 203
      StackMap locals: java.lang.Thread
      StackMap stack:
            aload 1 /* t */
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            if_acmpeq 5
         4: .line 204
            new javax.smartcardio.CardException
            dup
            ldc "Exclusive access established by another Thread"
            invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 206
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Thread t
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lsun/security/smartcardio/CardImpl;
            1    6     1     t  Ljava/lang/Thread;
    Exceptions:
      throws javax.smartcardio.CardException

  public synchronized void beginExclusive();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 209
            aload 0 /* this */
            ldc "exclusive"
            invokevirtual sun.security.smartcardio.CardImpl.checkSecurity:(Ljava/lang/String;)V
         1: .line 210
            aload 0 /* this */
            invokevirtual sun.security.smartcardio.CardImpl.checkState:()V
         2: .line 211
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.exclusiveThread:Ljava/lang/Thread;
            ifnull 8
         3: .line 212
            new javax.smartcardio.CardException
            dup
         4: .line 213
            new java.lang.StringBuilder
            dup
            ldc "Exclusive access has already been assigned to Thread "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         5: .line 214
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.exclusiveThread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         6: .line 213
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         7: .line 212
            invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 217
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.cardId:J
            invokestatic sun.security.smartcardio.PCSC.SCardBeginTransaction:(J)V
         9: .line 218
            goto 13
      StackMap locals:
      StackMap stack: sun.security.smartcardio.PCSCException
        10: astore 1 /* e */
        start local 1 // sun.security.smartcardio.PCSCException e
        11: .line 219
            aload 0 /* this */
            aload 1 /* e */
            invokevirtual sun.security.smartcardio.CardImpl.handleError:(Lsun/security/smartcardio/PCSCException;)V
        12: .line 220
            new javax.smartcardio.CardException
            dup
            ldc "beginExclusive() failed"
            aload 1 /* e */
            invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 1 // sun.security.smartcardio.PCSCException e
        13: .line 222
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            putfield sun.security.smartcardio.CardImpl.exclusiveThread:Ljava/lang/Thread;
        14: .line 223
            return
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   15     0  this  Lsun/security/smartcardio/CardImpl;
           11   13     1     e  Lsun/security/smartcardio/PCSCException;
      Exception table:
        from    to  target  type
           8     9      10  Class sun.security.smartcardio.PCSCException
    Exceptions:
      throws javax.smartcardio.CardException

  public synchronized void endExclusive();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 226
            aload 0 /* this */
            invokevirtual sun.security.smartcardio.CardImpl.checkState:()V
         1: .line 227
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.exclusiveThread:Ljava/lang/Thread;
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            if_acmpeq 5
         2: .line 228
            new java.lang.IllegalStateException
            dup
         3: .line 229
            ldc "Exclusive access not assigned to current Thread"
         4: .line 228
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 232
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.cardId:J
            iconst_0
            invokestatic sun.security.smartcardio.PCSC.SCardEndTransaction:(JI)V
         6: .line 233
            goto 13
      StackMap locals:
      StackMap stack: sun.security.smartcardio.PCSCException
         7: astore 1 /* e */
        start local 1 // sun.security.smartcardio.PCSCException e
         8: .line 234
            aload 0 /* this */
            aload 1 /* e */
            invokevirtual sun.security.smartcardio.CardImpl.handleError:(Lsun/security/smartcardio/PCSCException;)V
         9: .line 235
            new javax.smartcardio.CardException
            dup
            ldc "endExclusive() failed"
            aload 1 /* e */
            invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 1 // sun.security.smartcardio.PCSCException e
        10: .line 236
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 2
        11: .line 237
            aload 0 /* this */
            aconst_null
            putfield sun.security.smartcardio.CardImpl.exclusiveThread:Ljava/lang/Thread;
        12: .line 238
            aload 2
            athrow
        13: .line 237
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield sun.security.smartcardio.CardImpl.exclusiveThread:Ljava/lang/Thread;
        14: .line 239
            return
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   15     0  this  Lsun/security/smartcardio/CardImpl;
            8   10     1     e  Lsun/security/smartcardio/PCSCException;
      Exception table:
        from    to  target  type
           5     6       7  Class sun.security.smartcardio.PCSCException
           5    10      10  any
    Exceptions:
      throws javax.smartcardio.CardException

  public byte[] transmitControlCommand(int, byte[]);
    descriptor: (I[B)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // sun.security.smartcardio.CardImpl this
        start local 1 // int controlCode
        start local 2 // byte[] command
         0: .line 243
            aload 0 /* this */
            ldc "transmitControl"
            invokevirtual sun.security.smartcardio.CardImpl.checkSecurity:(Ljava/lang/String;)V
         1: .line 244
            aload 0 /* this */
            invokevirtual sun.security.smartcardio.CardImpl.checkState:()V
         2: .line 245
            aload 0 /* this */
            invokevirtual sun.security.smartcardio.CardImpl.checkExclusive:()V
         3: .line 246
            aload 2 /* command */
            ifnonnull 5
         4: .line 247
            new java.lang.NullPointerException
            dup
            invokespecial java.lang.NullPointerException.<init>:()V
            athrow
         5: .line 250
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.cardId:J
            iload 1 /* controlCode */
            aload 2 /* command */
            invokestatic sun.security.smartcardio.PCSC.SCardControl:(JI[B)[B
            astore 3 /* r */
        start local 3 // byte[] r
         6: .line 251
            aload 3 /* r */
         7: areturn
        end local 3 // byte[] r
         8: .line 252
      StackMap locals:
      StackMap stack: sun.security.smartcardio.PCSCException
            astore 3 /* e */
        start local 3 // sun.security.smartcardio.PCSCException e
         9: .line 253
            aload 0 /* this */
            aload 3 /* e */
            invokevirtual sun.security.smartcardio.CardImpl.handleError:(Lsun/security/smartcardio/PCSCException;)V
        10: .line 254
            new javax.smartcardio.CardException
            dup
            ldc "transmitControlCommand() failed"
            aload 3 /* e */
            invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // sun.security.smartcardio.PCSCException e
        end local 2 // byte[] command
        end local 1 // int controlCode
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   11     0         this  Lsun/security/smartcardio/CardImpl;
            0   11     1  controlCode  I
            0   11     2      command  [B
            6    8     3            r  [B
            9   11     3            e  Lsun/security/smartcardio/PCSCException;
      Exception table:
        from    to  target  type
           5     7       8  Class sun.security.smartcardio.PCSCException
    Exceptions:
      throws javax.smartcardio.CardException
    MethodParameters:
             Name  Flags
      controlCode  
      command      

  public void disconnect(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // sun.security.smartcardio.CardImpl this
        start local 1 // boolean reset
         0: .line 265
            iload 1 /* reset */
            ifeq 2
         1: .line 266
            aload 0 /* this */
            ldc "reset"
            invokevirtual sun.security.smartcardio.CardImpl.checkSecurity:(Ljava/lang/String;)V
         2: .line 268
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
            getstatic sun.security.smartcardio.CardImpl$State.OK:Lsun/security/smartcardio/CardImpl$State;
            if_acmpeq 4
         3: .line 269
            return
         4: .line 271
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual sun.security.smartcardio.CardImpl.checkExclusive:()V
         5: .line 273
            getstatic sun.security.smartcardio.CardImpl.invertReset:Z
            ifeq 9
         6: .line 274
            iload 1 /* reset */
            ifeq 7
            iconst_0
            goto 8
      StackMap locals:
      StackMap stack:
         7: iconst_1
      StackMap locals:
      StackMap stack: int
         8: istore 1 /* reset */
         9: .line 277
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.cardId:J
            iload 1 /* reset */
            ifeq 10
            iconst_1
            goto 11
      StackMap locals:
      StackMap stack: long
        10: iconst_0
      StackMap locals: sun.security.smartcardio.CardImpl int
      StackMap stack: long int
        11: invokestatic sun.security.smartcardio.PCSC.SCardDisconnect:(JI)V
        12: .line 278
            goto 19
      StackMap locals:
      StackMap stack: sun.security.smartcardio.PCSCException
        13: astore 2 /* e */
        start local 2 // sun.security.smartcardio.PCSCException e
        14: .line 279
            new javax.smartcardio.CardException
            dup
            ldc "disconnect() failed"
            aload 2 /* e */
            invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // sun.security.smartcardio.PCSCException e
        15: .line 280
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 3
        16: .line 281
            aload 0 /* this */
            getstatic sun.security.smartcardio.CardImpl$State.DISCONNECTED:Lsun/security/smartcardio/CardImpl$State;
            putfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
        17: .line 282
            aload 0 /* this */
            aconst_null
            putfield sun.security.smartcardio.CardImpl.exclusiveThread:Ljava/lang/Thread;
        18: .line 283
            aload 3
            athrow
        19: .line 281
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic sun.security.smartcardio.CardImpl$State.DISCONNECTED:Lsun/security/smartcardio/CardImpl$State;
            putfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
        20: .line 282
            aload 0 /* this */
            aconst_null
            putfield sun.security.smartcardio.CardImpl.exclusiveThread:Ljava/lang/Thread;
        21: .line 284
            return
        end local 1 // boolean reset
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   22     0   this  Lsun/security/smartcardio/CardImpl;
            0   22     1  reset  Z
           14   15     2      e  Lsun/security/smartcardio/PCSCException;
      Exception table:
        from    to  target  type
           9    12      13  Class sun.security.smartcardio.PCSCException
           9    15      15  any
    Exceptions:
      throws javax.smartcardio.CardException
    MethodParameters:
       Name  Flags
      reset  

  public java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 287
            new java.lang.StringBuilder
            dup
            ldc "PC/SC card in "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.terminal:Lsun/security/smartcardio/TerminalImpl;
            getfield sun.security.smartcardio.TerminalImpl.name:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         1: .line 288
            ldc ", protocol "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            invokevirtual sun.security.smartcardio.CardImpl.getProtocol:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ", state "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
         2: .line 287
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lsun/security/smartcardio/CardImpl;

  protected void finalize();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // sun.security.smartcardio.CardImpl this
         0: .line 293
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
            getstatic sun.security.smartcardio.CardImpl$State.OK:Lsun/security/smartcardio/CardImpl$State;
            if_acmpne 7
         1: .line 294
            aload 0 /* this */
            getstatic sun.security.smartcardio.CardImpl$State.DISCONNECTED:Lsun/security/smartcardio/CardImpl$State;
            putfield sun.security.smartcardio.CardImpl.state:Lsun/security/smartcardio/CardImpl$State;
         2: .line 295
            aload 0 /* this */
            getfield sun.security.smartcardio.CardImpl.cardId:J
            iconst_0
            invokestatic sun.security.smartcardio.PCSC.SCardDisconnect:(JI)V
         3: .line 297
            goto 7
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 1
         5: .line 298
            aload 0 /* this */
            invokespecial java.lang.Object.finalize:()V
         6: .line 299
            aload 1
            athrow
         7: .line 298
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokespecial java.lang.Object.finalize:()V
         8: .line 300
            return
        end local 0 // sun.security.smartcardio.CardImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lsun/security/smartcardio/CardImpl;
      Exception table:
        from    to  target  type
           0     4       4  any
    Exceptions:
      throws java.lang.Throwable
}
SourceFile: "CardImpl.java"
NestMembers:
  sun.security.smartcardio.CardImpl$1  sun.security.smartcardio.CardImpl$State
InnerClasses:
  sun.security.smartcardio.CardImpl$1
  private final State = sun.security.smartcardio.CardImpl$State of sun.security.smartcardio.CardImpl