public void Run(string readerName)
            {
                var reader        = new SmartCardReader(readerName);
                var secureChannel = new Readers.SecureSession.SecureChannel(reader);

                try
                {
                    ConsoleWriter.Instance.PrintSplitter();
                    ConsoleWriter.Instance.PrintTask("Establishing Secure Session");

                    if (!IsValidSessionKeyFormat(EncKey) || !IsValidSessionKeyFormat(MacKey))
                    {
                        throw new ArgumentException("Secure session key format is incorrect, correct format of session key string is 32 character long hexadecimal string without hex specifier. Example: \"00000000000000000000000000000000\"");
                    }

                    secureChannel.Establish(EncKey + MacKey, KeyRelatedAccesRight);

                    if (secureChannel.IsSessionActive)
                    {
                        ConsoleWriter.Instance.PrintMessage("Session established");
                        ConsoleWriter.Instance.PrintSplitter();

                        ReaderHelper.GeneralAuthenticateiClass(secureChannel,
                                                               "Authenticate without implicit selection. Key from slot: ", BookNumber.Book0,
                                                               PageNumber.Page0, GeneralAuthenticateCommand.ImplicitSelection.Off,
                                                               GeneralAuthenticateCommand.iClassKeyType.PicoPassCreditKeyKC, 0x21);

                        ReaderHelper.UpdateBinaryCommand(secureChannel, "Update binary, target block nr: ",
                                                         UpdateBinaryCommand.Type.Plain, 0x14, "BACDEF0122345678");

                        ConsoleWriter.Instance.PrintSplitter();
                    }
                    else
                    {
                        ConsoleWriter.Instance.PrintError("Failed to establish session");
                    }
                }
                catch (Exception e)
                {
                    ConsoleWriter.Instance.PrintError(e.Message);
                }
                finally
                {
                    if (secureChannel.IsSessionActive)
                    {
                        secureChannel.Terminate();
                        ConsoleWriter.Instance.PrintMessage("Secure Session terminated.");
                    }
                    if (reader.IsConnected)
                    {
                        reader.Disconnect(CardDisposition.Unpower);
                        ConsoleWriter.Instance.PrintMessage("Reader connection closed");
                    }
                    ConsoleWriter.Instance.PrintSplitter();
                }
            }
            public void Run(string readerName)
            {
                var reader = new SmartCardReader(readerName);

                try
                {
                    ConsoleWriter.Instance.PrintSplitter();
                    ConsoleWriter.Instance.PrintTask($"Connecting to {reader.PcscReaderName}");

                    ReaderHelper.ConnectToReaderWithCard(reader);

                    ConsoleWriter.Instance.PrintMessage($"Connected\nConnection Mode: {reader.ConnectionMode}");
                    ConsoleWriter.Instance.PrintSplitter();

                    ReaderHelper.GeneralAuthenticateiClass(reader,
                                                           "Authenticate with implicit selection. Key from slot: ", BookNumber.Book0,
                                                           PageNumber.Page0, GeneralAuthenticateCommand.ImplicitSelection.On,
                                                           GeneralAuthenticateCommand.iClassKeyType.PicoPassCreditKeyKC, 0x23);

                    ReaderHelper.ReadBinaryiClassCommand(reader, "Read block without select, block: ",
                                                         ReadBinaryCommand.ReadOption.WithoutSelect, 0x14, 0x00);

                    ConsoleWriter.Instance.PrintSplitter();
                }
                catch (Exception e)
                {
                    ConsoleWriter.Instance.PrintError(e.Message);
                }
                finally
                {
                    if (reader.IsConnected)
                    {
                        reader.Disconnect(CardDisposition.Unpower);
                        ConsoleWriter.Instance.PrintMessage("Reader connection closed");
                    }
                    ConsoleWriter.Instance.PrintSplitter();
                }
            }