Debian Bug report logs - #901758
diffoscope: leaves progress bar on terminal after completion

version graph

Package: diffoscope; Maintainer for diffoscope is Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>; Source for diffoscope is src:diffoscope (PTS, buildd, popcon).

Reported by: Paul Wise <pabs@debian.org>

Date: Mon, 18 Jun 2018 02:09:02 UTC

Severity: minor

Found in version diffoscope/95

Fixed in version diffoscope/99

Done: Mattia Rizzolo <mattia@debian.org>

Bug is archived. No further changes may be made.

Toggle useless messages

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#901758; Package diffoscope. (Mon, 18 Jun 2018 02:09:05 GMT) (full text, mbox, link).


Acknowledgement sent to Paul Wise <pabs@debian.org>:
New Bug report received and forwarded. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>. (Mon, 18 Jun 2018 02:09:05 GMT) (full text, mbox, link).


Message #5 received at submit@bugs.debian.org (full text, mbox, reply):

From: Paul Wise <pabs@debian.org>
To: Debian Bug Tracking System <submit@bugs.debian.org>
Subject: diffoscope: leaves progress bar on terminal after completion
Date: Mon, 18 Jun 2018 10:05:55 +0800
[Message part 1 (text/plain, inline)]
Package: diffoscope
Version: 95
Severity: minor

diffoscope leaves a giant progress bar on the terminal after it
completes. It would be nice if the progress bar could disappear after
it has served its purpose. In case the progress bar code you use
doesn't support this, I've included code below from another project
that clears to the end of the line if the terminal supports that and
falls back to overwriting the line with spaces if it does not.

$ touch foo bar

$ diffoscope foo bar
 |#####################################################################################################################################|  100%                             Time: 0:00:00 

try:
    from shutil import get_terminal_size

    def get_columns():
        return get_terminal_size().columns
except ImportError:
    # Python 3.2 compatibility:
    from fcntl import ioctl
    from termios import TIOCGWINSZ
    from struct import unpack

    def get_columns():
        try:
            buf = ioctl(sys.stdout.fileno(), TIOCGWINSZ, ' ' * 4)
            return unpack('hh', buf)[1]
        except IOError:
            return 80

if sys.stdout.isatty():
    from curses import tigetstr, setupterm
    setupterm()
    erase_line = tigetstr('el')

def erase_to_eol_cr(size=0):
    if erase_line:
        sys.stdout.buffer.write(erase_line)
    else:
        width = get_columns()
        print(' ' * (width - size), end='')
    print(end='\r')
    sys.stdout.flush()

-- System Information:
Debian Release: buster/sid
  APT prefers testing-debug
  APT policy: (900, 'testing-debug'), (900, 'testing'), (800, 'unstable-debug'), (800, 'unstable'), (790, 'buildd-unstable'), (700, 'experimental-debug'), (700, 'experimental'), (690, 'buildd-experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.16.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8), LANGUAGE=en_AU:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages diffoscope depends on:
ii  libpython3.6-stdlib    3.6.6~rc1-1
ii  python3                3.6.5-3
ii  python3-distro         1.0.1-2
ii  python3-distutils      3.6.5-4
ii  python3-libarchive-c   2.1-3.1
ii  python3-magic          2:0.4.15-1
ii  python3-pkg-resources  39.1.0-1

Versions of packages diffoscope recommends:
ii  abootimg                         0.6-1+b2
ii  acl                              2.2.52-3+b1
ii  apktool                          2.3.3-1
ii  binutils-multiarch               2.30-21
ii  bzip2                            1.0.6-8.1
ii  caca-utils                       0.99.beta19-2+b3
ii  colord                           1.3.3-2
ii  db-util                          5.3.1
ii  default-jdk [java-sdk]           2:1.10-67
ii  default-jdk-headless             2:1.10-67
pn  device-tree-compiler             <none>
pn  docx2txt                         <none>
ii  e2fsprogs                        1.44.2-1
ii  enjarify                         1:1.0.3-4
ii  fontforge-extras                 0.3-4
pn  fp-utils                         <none>
ii  genisoimage                      9:1.1.11-3+b2
ii  gettext                          0.19.8.1-6+b1
ii  ghc                              8.0.2-11
ii  ghostscript                      9.22~dfsg-2.1
ii  giflib-tools                     5.1.4-3
ii  gnumeric                         1.12.39-1
ii  gnupg                            2.2.8-1
ii  imagemagick                      8:6.9.9.39+dfsg-1
ii  imagemagick-6.q16 [imagemagick]  8:6.9.9.39+dfsg-1
ii  jsbeautifier                     1.6.4-7
pn  libarchive-tools                 <none>
ii  llvm                             1:4.0-40
pn  mono-utils                       <none>
pn  odt2txt                          <none>
pn  oggvideotools                    <none>
ii  openjdk-10-jdk [java-sdk]        10.0.1+10-4
ii  openssh-client                   1:7.7p1-2
ii  pdftk                            2.02-4+b2
ii  pgpdump                          0.31-0.2
ii  poppler-utils                    0.63.0-2
pn  procyon-decompiler               <none>
ii  python3-argcomplete              1.8.1-1
ii  python3-binwalk                  2.1.1-16
ii  python3-debian                   0.1.32
pn  python3-defusedxml               <none>
pn  python3-guestfs                  <none>
ii  python3-jsondiff                 1.1.1-2
ii  python3-progressbar              2.3-4
ii  python3-pyxattr                  0.6.0-2+b1
ii  python3-tlsh                     3.4.4+20151206-1+b3
pn  r-base-core                      <none>
ii  rpm2cpio                         4.14.1+dfsg1-3
ii  sng                              1.1.0-1+b1
ii  sqlite3                          3.24.0-1
ii  squashfs-tools                   1:4.3-6
ii  tcpdump                          4.9.2-3
ii  unzip                            6.0-21
ii  vim-common                       2:8.0.1766-1
pn  xmlutils                         <none>
ii  xxd                              2:8.0.1766-1
ii  xz-utils                         5.2.2-1.3

Versions of packages diffoscope suggests:
ii  libjs-jquery  3.2.1-1

-- no debconf information

-- 
bye,
pabs

https://wiki.debian.org/PaulWise
[signature.asc (application/pgp-signature, inline)]

Information forwarded to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#901758; Package diffoscope. (Fri, 06 Jul 2018 17:54:02 GMT) (full text, mbox, link).


Acknowledgement sent to Chris Lamb <lamby@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>. (Fri, 06 Jul 2018 17:54:02 GMT) (full text, mbox, link).


Message #10 received at 901758@bugs.debian.org (full text, mbox, reply):

From: Chris Lamb <lamby@debian.org>
To: 901758@bugs.debian.org
Cc: Paul Wise <pabs@debian.org>
Subject: Re: diffoscope: leaves progress bar on terminal after completion
Date: Fri, 06 Jul 2018 18:50:44 +0100
tags 901758 + pending
thanks

Fixed in Git, pending upload:

  https://salsa.debian.org/reproducible-builds/diffoscope/commit/68c8263a430aca779b0c44fd31e729ae9bd59e0b

  diffoscope/progress.py | 10 ++++++++++
  1 file changed, 10 insertions(+)


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby@debian.org / chris-lamb.co.uk
       `-



Added tag(s) pending. Request was from Chris Lamb <lamby@debian.org> to control@bugs.debian.org. (Fri, 06 Jul 2018 17:54:05 GMT) (full text, mbox, link).


Information forwarded to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#901758; Package diffoscope. (Sat, 07 Jul 2018 05:00:03 GMT) (full text, mbox, link).


Acknowledgement sent to Paul Wise <pabs@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>. (Sat, 07 Jul 2018 05:00:03 GMT) (full text, mbox, link).


Message #17 received at 901758@bugs.debian.org (full text, mbox, reply):

From: Paul Wise <pabs@debian.org>
To: 901758@bugs.debian.org, Chris Lamb <lamby@debian.org>
Subject: Re: diffoscope: leaves progress bar on terminal after completion
Date: Sat, 07 Jul 2018 12:56:18 +0800
[Message part 1 (text/plain, inline)]
On Fri, 06 Jul 2018 18:50:44 +0100 Chris Lamb wrote:

> https://salsa.debian.org/reproducible-builds/diffoscope/commit/68c8263a430aca779b0c44fd31e729ae9bd59e0b.patch

> +                # Clear the progress bar after completion (#901758)

I don't think mentioning the bug in the comment is useful here,
since the comment is self explanatory without the bug link.

> +                self.fd.write("\033[K")

This isn't going to work if the terminal being used doesn't support
that escape sequence or if the user requested a progress bar but
directed output to a file. I'd suggest the approach I mentioned in the
initial bug report instead. Detect the erase-to-eol escape sequence
for the current terminal, use spaces if the current terminal doesn't
support it and don't print anything if the output is not a terminal.

-- 
bye,
pabs

https://wiki.debian.org/PaulWise
[signature.asc (application/pgp-signature, inline)]

Information forwarded to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#901758; Package diffoscope. (Sat, 07 Jul 2018 05:00:05 GMT) (full text, mbox, link).


Acknowledgement sent to Paul Wise <pabs@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>. (Sat, 07 Jul 2018 05:00:06 GMT) (full text, mbox, link).


Information forwarded to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#901758; Package diffoscope. (Sat, 07 Jul 2018 06:48:03 GMT) (full text, mbox, link).


Acknowledgement sent to Chris Lamb <lamby@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>. (Sat, 07 Jul 2018 06:48:03 GMT) (full text, mbox, link).


Message #27 received at 901758@bugs.debian.org (full text, mbox, reply):

From: Chris Lamb <lamby@debian.org>
To: Paul Wise <pabs@debian.org>, 901758@bugs.debian.org
Subject: Re: diffoscope: leaves progress bar on terminal after completion
Date: Sat, 07 Jul 2018 07:45:06 +0100
tags 901758 - pending
thanks

> > +                self.fd.write("\033[K")
> 
> This isn't going to work if the terminal being used doesn't support
> that escape sequence

I wasn't aware that was a possibility.

> or if the user requested a progress bar but directed output to
> a file

If you mean via --text=filename then the progress bar does not
appear there.

> I'd suggest the approach I mentioned in the initial bug report
> instead

In that case, please could you provide a merge request? Reverted my
change in:

  https://salsa.debian.org/reproducible-builds/diffoscope/commit/9c0cfdf5a59808b6698eee99600b46cada3c762d


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby@debian.org / chris-lamb.co.uk
       `-



Information forwarded to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#901758; Package diffoscope. (Sat, 07 Jul 2018 09:39:02 GMT) (full text, mbox, link).


Acknowledgement sent to Paul Wise <pabs@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>. (Sat, 07 Jul 2018 09:39:02 GMT) (full text, mbox, link).


Message #32 received at 901758@bugs.debian.org (full text, mbox, reply):

From: Paul Wise <pabs@debian.org>
To: Chris Lamb <lamby@debian.org>, 901758@bugs.debian.org
Subject: Re: diffoscope: leaves progress bar on terminal after completion
Date: Sat, 07 Jul 2018 17:37:35 +0800
[Message part 1 (text/plain, inline)]
On Sat, 2018-07-07 at 07:45 +0100, Chris Lamb wrote:

> I wasn't aware that was a possibility.

Yeah, different terminals have different capabilities.
Most modern ones of course can erase to EOL though.

> If you mean via --text=filename then the progress bar does not
> appear there.

I was thinking diffoscope &> output shell redirection.

> In that case, please could you provide a merge request?

I'm not interested in touching gitlab, patches attached.

-- 
bye,
pabs

https://wiki.debian.org/PaulWise
[0001-Do-not-delete-the-current-terminal-line-for-every-pr.patch (text/x-patch, attachment)]
[0002-Clear-the-progress-bar-after-completion.-Closes-9017.patch (text/x-patch, attachment)]
[0003-Erase-the-progress-bar-line-when-diffoscope-is-inter.patch (text/x-patch, attachment)]
[signature.asc (application/pgp-signature, inline)]

Information forwarded to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#901758; Package diffoscope. (Sat, 07 Jul 2018 10:30:03 GMT) (full text, mbox, link).


Acknowledgement sent to Chris Lamb <lamby@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>. (Sat, 07 Jul 2018 10:30:03 GMT) (full text, mbox, link).


Message #37 received at 901758@bugs.debian.org (full text, mbox, reply):

From: Chris Lamb <lamby@debian.org>
To: 901758@bugs.debian.org
Cc: Paul Wise <pabs@debian.org>
Subject: Re: diffoscope: leaves progress bar on terminal after completion
Date: Sat, 07 Jul 2018 11:26:32 +0100
tags 901758 + pending
thanks

> I'm not interested in touching gitlab, patches attached.

Thanks, applied.


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby@debian.org / chris-lamb.co.uk
       `-



Information forwarded to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#901758; Package diffoscope. (Sat, 07 Jul 2018 11:43:21 GMT) (full text, mbox, link).


Acknowledgement sent to Paul Wise <pabs@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>. (Sat, 07 Jul 2018 11:43:21 GMT) (full text, mbox, link).


Message #42 received at 901758@bugs.debian.org (full text, mbox, reply):

From: Paul Wise <pabs@debian.org>
To: Chris Lamb <lamby@debian.org>, 901758@bugs.debian.org
Subject: Re: diffoscope: leaves progress bar on terminal after completion
Date: Sat, 07 Jul 2018 19:39:00 +0800
[Message part 1 (text/plain, inline)]
On Sat, 2018-07-07 at 11:26 +0100, Chris Lamb wrote:

> Thanks, applied.

Attached a couple more patches.

-- 
bye,
pabs

https://wiki.debian.org/PaulWise
[0001-Use-the-ProgressBar-s-idea-of-the-terminal-width-ins.patch (text/x-patch, attachment)]
[0002-Do-not-delete-the-current-terminal-line-for-every-pr.patch (text/x-patch, attachment)]
[signature.asc (application/pgp-signature, inline)]

Information forwarded to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#901758; Package diffoscope. (Sat, 07 Jul 2018 11:45:09 GMT) (full text, mbox, link).


Acknowledgement sent to Chris Lamb <lamby@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>. (Sat, 07 Jul 2018 11:45:09 GMT) (full text, mbox, link).


Message #47 received at 901758@bugs.debian.org (full text, mbox, reply):

From: Chris Lamb <lamby@debian.org>
To: Paul Wise <pabs@debian.org>, 901758@bugs.debian.org
Subject: Re: diffoscope: leaves progress bar on terminal after completion
Date: Sat, 07 Jul 2018 12:44:07 +0100
Hi Paul,

> Attached a couple more patches.

Also applied. :)


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby@debian.org / chris-lamb.co.uk
       `-



Reply sent to Mattia Rizzolo <mattia@debian.org>:
You have taken responsibility. (Sun, 08 Jul 2018 18:39:06 GMT) (full text, mbox, link).


Notification sent to Paul Wise <pabs@debian.org>:
Bug acknowledged by developer. (Sun, 08 Jul 2018 18:39:06 GMT) (full text, mbox, link).


Message #52 received at 901758-close@bugs.debian.org (full text, mbox, reply):

From: Mattia Rizzolo <mattia@debian.org>
To: 901758-close@bugs.debian.org
Subject: Bug#901758: fixed in diffoscope 99
Date: Sun, 08 Jul 2018 18:35:46 +0000
Source: diffoscope
Source-Version: 99

We believe that the bug you reported is fixed in the latest version of
diffoscope, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 901758@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Mattia Rizzolo <mattia@debian.org> (supplier of updated diffoscope package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 1.8
Date: Sun, 08 Jul 2018 20:07:06 +0200
Source: diffoscope
Binary: diffoscope
Architecture: source
Version: 99
Distribution: unstable
Urgency: medium
Maintainer: Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>
Changed-By: Mattia Rizzolo <mattia@debian.org>
Description:
 diffoscope - in-depth comparison of files, archives, and directories
Closes: 901548 901758 902709 902920
Changes:
 diffoscope (99) unstable; urgency=medium
 .
   [ Xavier Briand ]
   * Add lz4 comparator.  Closes: #901548; !4
 .
   [ Paul Wise ]
   * Clear the progress bar after completion.  Closes: #901758
     Handle terminals that do not support erasing the line by filling the
     terminal with spaces.  Ignore output devices that are not terminals.
   * Do not delete the current terminal line for every progress bar update.
     The erasure was also causing the progress bar to flicker.
 .
   [ Mattia Rizzolo ]
   * Add a gitlab CI script.  !8
   * tempfiles:
     + Set the base directory only if the caller didn't specify one already.
     + Do not append '_diffoscope' to the temporary file names, as they are now
       all in their namespaced directory already.
     + Empty the list of known tempfiles after removing them.  Closes: #902709
   * external_tools:
     + Fix package name, s/xmlutils/xmlbeans/.
   * tests/test_tools: fix test if /sbin contains a directory.  MR: !2
     Thanks to Chris Lamb <lamby@debian.org> for the patch.
   * logging:
     + Move the computation of the terminal line eraser into logging.py
     + Always clean the line before printing a log message
   * main:
     + Clean the terminal line before printing a traceback.
     + Be sure to print 'Keyboard Interrupt' if that happens.
   * comparators:
     + Do not shadow the original import errors.  MR: !7
   * d/control:
     + Bump Standards-Version to 4.1.5, no changes needed.
     + Add Build-Dependency on procyon-decompiler, to run the tests.
   * d/tests:
     + Autogenerate d/tests/control with all the recommends listed as
       dependencies, so autopkgtest is appropriately triggered whenever one of
       those packages changes.  Closes: #902920
 .
   [ anthraxx ]
   * comparators.utils:libarchive:
     + Add compatibility code for python-libarchive >= 2.8.  MR: !6
Checksums-Sha1:
 c244e0100039d45c8f6274e93d7361c0a0924273 4012 diffoscope_99.dsc
 1fbaba7b70eb7977d273a3569effd33577edfe91 9247368 diffoscope_99.tar.xz
 5fa8de5ee4f5f2520a442ded627d5c6c814648b1 21564 diffoscope_99_amd64.buildinfo
Checksums-Sha256:
 0f20be42c9209f14e939b0328e604b1c5d26f0d120af825eed79463e28b1b391 4012 diffoscope_99.dsc
 5fca325126562104e448f02bb2e887794a8c971cbcf00be00b2de88e1b6794f1 9247368 diffoscope_99.tar.xz
 3d51d9b22aed6c1d3e91b095a7f9095cbe635617fd35f575b8ed50b1923221eb 21564 diffoscope_99_amd64.buildinfo
Files:
 ef38521bf0cdd2d6d996609fb0e322a7 4012 devel optional diffoscope_99.dsc
 df33af4ec90d431a1cf69fb91353edcb 9247368 devel optional diffoscope_99.tar.xz
 362294af956819253adac28405b395cd 21564 devel optional diffoscope_99_amd64.buildinfo

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEi3hoeGwz5cZMTQpICBa54Yx2K60FAltCVhIACgkQCBa54Yx2
K62ZvRAAsoWe/Js1wtZ86XMG5QzCM5/NbK/5RSx9IcSjfiVl6xYkqq+nJToc5ykA
wviX4JZ8mUcyprhAj6jCdqDQ6ZqDo9muL6d4N8151uQy3/KDxt/OsFOxXQW4bXzL
wGQurBX8z15e6u2nZoeP4uvSkyUADZxOclxG3vHwsutMeG78bOWGlESC9lUVt1x8
hTwIgdV3Q5sh2HOj30hm84O86mRssZ3AcXfNV5I0gO3YtCiM9+nkG5NlWCiN2g6R
tpqMfY/7P4h8hzzKg2sf4KfHW4dDF1Rvh2r4/hw6+rHTS7+qpe/8gHd+NV80SF2b
dItLDHLNLBkZKsL9tRLUZ9+NpK6aUt/Gfy1OVpb13rlaruDD630/IbzYLhrgL/+w
KuhbEkTo5gFqe1eY4/Pim3S2uyOlsK/WDnkXwlEaXCdVrjgjSzy/rLReyJ5D6LMx
dLNwNE1o6583LqG6dGrv4KSFmdlQLlBYpwP13drN2pZsYjdrhn0wPQlFnKBPmvnK
9j46/ZubUrbuT++nXctVC2EmGZ9DX15uLHPdoH4oAIpHsTnES/9OIp7Rydl/PQdH
KcsRG9DcsKmmt5yEEGtZ/HWrOwM2J15m7z2WXjBS0KfmEtNeIV/GJFvbY6EqTMpB
kXww8cWQGSxQqMgXfbg8NC0iydHqQA71X1qCJDgrwtnxTeOevE4=
=ZzWh
-----END PGP SIGNATURE-----




Bug archived. Request was from Debbugs Internal Request <owner@bugs.debian.org> to internal_control@bugs.debian.org. (Wed, 08 Aug 2018 07:44:02 GMT) (full text, mbox, link).


Send a report that this bug log contains spam.


Debian bug tracking system administrator <owner@bugs.debian.org>. Last modified: Wed May 17 11:34:24 2023; Machine Name: bembo

Debian Bug tracking system

Debbugs is free software and licensed under the terms of the GNU Public License version 2. The current version can be obtained from https://bugs.debian.org/debbugs-source/.

Copyright © 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson, 2005-2017 Don Armstrong, and many other contributors.