Hello community,

here is the log from the commit of package gnu_parallel for openSUSE:Factory 
checked in at 2020-10-10 19:05:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnu_parallel (Old)
 and      /work/SRC/openSUSE:Factory/.gnu_parallel.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnu_parallel"

Sat Oct 10 19:05:13 2020 rev:59 rq:840485 version:20200922

Changes:
--------
--- /work/SRC/openSUSE:Factory/gnu_parallel/gnu_parallel.changes        
2020-09-06 00:04:53.899328832 +0200
+++ /work/SRC/openSUSE:Factory/.gnu_parallel.new.4249/gnu_parallel.changes      
2020-10-10 19:05:18.156513162 +0200
@@ -1,0 +2,6 @@
+Fri Oct  9 18:12:26 UTC 2020 - Jan Engelhardt <jeng...@inai.de>
+
+- Update to release 20200922
+  * New CPU detection for GNU/Linux
+
+-------------------------------------------------------------------
@@ -6 +11,0 @@
-

Old:
----
  parallel-20200822.tar.bz2
  parallel-20200822.tar.bz2.sig

New:
----
  parallel-20200922.tar.bz2
  parallel-20200922.tar.bz2.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnu_parallel.spec ++++++
--- /var/tmp/diff_new_pack.p7Meii/_old  2020-10-10 19:05:18.844513521 +0200
+++ /var/tmp/diff_new_pack.p7Meii/_new  2020-10-10 19:05:18.848513523 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           gnu_parallel
-Version:        20200822
+Version:        20200922
 Release:        0
 Summary:        Shell tool for executing jobs in parallel
 License:        GPL-3.0-or-later

++++++ parallel-20200822.tar.bz2 -> parallel-20200922.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/NEWS new/parallel-20200922/NEWS
--- old/parallel-20200822/NEWS  2020-08-23 01:13:55.000000000 +0200
+++ new/parallel-20200922/NEWS  2020-09-23 10:05:20.000000000 +0200
@@ -1,3 +1,15 @@
+20200922
+
+* New CPU detection for GNU/Linux.
+
+* Bug fixes and man page updates.
+
+News about GNU Parallel:
+
+* Aug 21, 2020 - More Unix tools
+  https://floki.blog/2020/08/more_unix_tools
+
+
 20200822
 
 New in this release:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/README new/parallel-20200922/README
--- old/parallel-20200822/README        2020-08-23 01:20:56.000000000 +0200
+++ new/parallel-20200922/README        2020-09-23 10:09:33.000000000 +0200
@@ -57,11 +57,11 @@
 
 Full installation of GNU Parallel is as simple as:
 
-    wget https://ftpmirror.gnu.org/parallel/parallel-20200822.tar.bz2
-    wget https://ftpmirror.gnu.org/parallel/parallel-20200822.tar.bz2.sig
-    gpg parallel-20200822.tar.bz2.sig
-    bzip2 -dc parallel-20200822.tar.bz2 | tar xvf -
-    cd parallel-20200822
+    wget https://ftpmirror.gnu.org/parallel/parallel-20200922.tar.bz2
+    wget https://ftpmirror.gnu.org/parallel/parallel-20200922.tar.bz2.sig
+    gpg parallel-20200922.tar.bz2.sig
+    bzip2 -dc parallel-20200922.tar.bz2 | tar xvf -
+    cd parallel-20200922
     ./configure && make && sudo make install
 
 
@@ -70,11 +70,11 @@
 If you are not root you can add ~/bin to your path and install in
 ~/bin and ~/share:
 
-    wget https://ftpmirror.gnu.org/parallel/parallel-20200822.tar.bz2
-    wget https://ftpmirror.gnu.org/parallel/parallel-20200822.tar.bz2.sig
-    gpg parallel-20200822.tar.bz2.sig
-    bzip2 -dc parallel-20200822.tar.bz2 | tar xvf -
-    cd parallel-20200822
+    wget https://ftpmirror.gnu.org/parallel/parallel-20200922.tar.bz2
+    wget https://ftpmirror.gnu.org/parallel/parallel-20200922.tar.bz2.sig
+    gpg parallel-20200922.tar.bz2.sig
+    bzip2 -dc parallel-20200922.tar.bz2 | tar xvf -
+    cd parallel-20200922
     ./configure --prefix=$HOME && make && make install
 
 Or if your system lacks 'make' you can simply copy src/parallel
@@ -122,8 +122,8 @@
 When using programs that use GNU Parallel to process data for
 publication please cite:
 
-    Tange, O. (2020, August 22). GNU Parallel 20200822 ('Beirut').
-    Zenodo. https://doi.org/10.5281/zenodo.3996295
+    Tange, O. (2020, September 22). GNU Parallel 20200922 ('Ginsburg').
+    Zenodo. https://doi.org/10.5281/zenodo.4045386
 
 Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
 2016, 2017, 2018, 2019, 2020 Ole Tange, http://ole.tange.dk and Free
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/configure 
new/parallel-20200922/configure
--- old/parallel-20200822/configure     2020-08-23 01:22:13.000000000 +0200
+++ new/parallel-20200922/configure     2020-09-23 10:09:59.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for parallel 20200822.
+# Generated by GNU Autoconf 2.69 for parallel 20200922.
 #
 # Report bugs to <bug-paral...@gnu.org>.
 #
@@ -579,8 +579,8 @@
 # Identity of this package.
 PACKAGE_NAME='parallel'
 PACKAGE_TARNAME='parallel'
-PACKAGE_VERSION='20200822'
-PACKAGE_STRING='parallel 20200822'
+PACKAGE_VERSION='20200922'
+PACKAGE_STRING='parallel 20200922'
 PACKAGE_BUGREPORT='bug-paral...@gnu.org'
 PACKAGE_URL=''
 
@@ -1214,7 +1214,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures parallel 20200822 to adapt to many kinds of systems.
+\`configure' configures parallel 20200922 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1281,7 +1281,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of parallel 20200822:";;
+     short | recursive ) echo "Configuration of parallel 20200922:";;
    esac
   cat <<\_ACEOF
 
@@ -1357,7 +1357,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-parallel configure 20200822
+parallel configure 20200922
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1374,7 +1374,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by parallel $as_me 20200822, which was
+It was created by parallel $as_me 20200922, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2237,7 +2237,7 @@
 
 # Define the identity of the package.
  PACKAGE='parallel'
- VERSION='20200822'
+ VERSION='20200922'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2880,7 +2880,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by parallel $as_me 20200822, which was
+This file was extended by parallel $as_me 20200922, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -2942,7 +2942,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-parallel config.status 20200822
+parallel config.status 20200922
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/configure.ac 
new/parallel-20200922/configure.ac
--- old/parallel-20200822/configure.ac  2020-08-23 01:20:56.000000000 +0200
+++ new/parallel-20200922/configure.ac  2020-09-23 10:09:33.000000000 +0200
@@ -1,4 +1,4 @@
-AC_INIT([parallel], [20200822], [bug-paral...@gnu.org])
+AC_INIT([parallel], [20200922], [bug-paral...@gnu.org])
 AM_INIT_AUTOMAKE([-Wall -Werror foreign])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_FILES([
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/env_parallel.1 
new/parallel-20200922/src/env_parallel.1
--- old/parallel-20200822/src/env_parallel.1    2020-07-04 11:32:19.000000000 
+0200
+++ new/parallel-20200922/src/env_parallel.1    2020-09-19 17:06:59.000000000 
+0200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "ENV_PARALLEL 1"
-.TH ENV_PARALLEL 1 "2020-07-04" "20200622" "parallel"
+.TH ENV_PARALLEL 1 "2020-09-18" "20200822" "parallel"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -163,12 +163,12 @@
 \&  env_parallel \-\-session
 \&
 \&  # Define whatever you want to use
-\&  alias myalias=echo
-\&  myvar=it
-\&  myfunc() { myalias $1 $myvar works.; }
+\&  myfunc() { myalias and functions $myvar work. $1.; }
+\&  alias myalias=\*(Aqecho Aliases\*(Aq
+\&  myvar=\*(Aqand variables\*(Aq
 \&
 \&  # env_parallel will not export names in $PARALLEL_IGNORED_NAMES
-\&  env_parallel \-S localhost myfunc ::: Yay,
+\&  env_parallel \-S localhost myfunc ::: Hooray
 .Ve
 .PP
 Or:
@@ -180,28 +180,28 @@
 \&  # Optionally edit ~/.parallel/ignored_vars (only needed once)
 \&
 \&  # Define whatever you want to use
-\&  alias myalias=echo
-\&  myvar=it
-\&  myfunc() { myalias $1 $myvar works.; }
+\&  myfunc() { myalias and functions $myvar work. $1.; }
+\&  alias myalias=\*(Aqecho Aliases\*(Aq
+\&  myvar=\*(Aqand variables\*(Aq
 \&
 \&  # Use \-\-env _ to only transfer the names not in the "empty" environment
-\&  env_parallel \-\-env _ \-S localhost myfunc ::: Yay,
+\&  env_parallel \-\-env _ \-S localhost myfunc ::: Hooray
 .Ve
 .PP
 In \fBcsh\fR \fB\-\-session\fR is not supported:
 .PP
 .Vb 2
-\&  # Record the "clean" environment (this only needs to be run once)
+\&  # Record the "clean" environment \- this only needs to be run once
 \&  env_parallel \-\-record\-env
 \&
-\&  # Optionally edit ~/.parallel/ignored_vars (only needed once)
+\&  # Optionally edit ~/.parallel/ignored_vars \- only needed once
 \&
 \&  # Define whatever you want to use
-\&  alias myalias \*(Aqecho \e!* $myvar works.\*(Aq
-\&  set myvar=it
+\&  alias myalias \*(Aqecho Aliases $myvar \e!*.\*(Aq
+\&  set myvar=\*(Aqand variables\*(Aq
 \&
 \&  # Use \-\-env _ to only transfer the names not in the "empty" environment
-\&  env_parallel \-\-env _ \-S localhost myalias ::: Yay,
+\&  env_parallel \-\-env _ \-S localhost myalias ::: work
 .Ve
 .SS "Environment space"
 .IX Subsection "Environment space"
@@ -955,8 +955,8 @@
 .IX Header "AUTHOR"
 When using \s-1GNU\s0 \fBenv_parallel\fR for a publication please cite:
 .PP
-O. Tange (2011): \s-1GNU\s0 Parallel \- The Command-Line Power Tool, ;login:
-The \s-1USENIX\s0 Magazine, February 2011:42\-47.
+O. Tange (2018): \s-1GNU\s0 Parallel 2018, March 2018, \s-1ISBN 9781387509881,
+DOI: 10\s0.5281/zenodo.1146014.
 .PP
 This helps funding further development; and it won't cost you a cent.
 If you pay 10000 \s-1EUR\s0 you should feel free to use \s-1GNU\s0 Parallel 
without citing.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/env_parallel.html 
new/parallel-20200922/src/env_parallel.html
--- old/parallel-20200822/src/env_parallel.html 2020-08-23 01:22:16.000000000 
+0200
+++ new/parallel-20200922/src/env_parallel.html 2020-09-19 17:06:59.000000000 
+0200
@@ -125,12 +125,12 @@
   env_parallel --session
 
   # Define whatever you want to use
-  alias myalias=echo
-  myvar=it
-  myfunc() { myalias $1 $myvar works.; }
+  myfunc() { myalias and functions $myvar work. $1.; }
+  alias myalias=&#39;echo Aliases&#39;
+  myvar=&#39;and variables&#39;
 
   # env_parallel will not export names in $PARALLEL_IGNORED_NAMES
-  env_parallel -S localhost myfunc ::: Yay,</code></pre>
+  env_parallel -S localhost myfunc ::: Hooray</code></pre>
 
 <p>Or:</p>
 
@@ -140,26 +140,26 @@
   # Optionally edit ~/.parallel/ignored_vars (only needed once)
 
   # Define whatever you want to use
-  alias myalias=echo
-  myvar=it
-  myfunc() { myalias $1 $myvar works.; }
+  myfunc() { myalias and functions $myvar work. $1.; }
+  alias myalias=&#39;echo Aliases&#39;
+  myvar=&#39;and variables&#39;
 
   # Use --env _ to only transfer the names not in the &quot;empty&quot; 
environment
-  env_parallel --env _ -S localhost myfunc ::: Yay,</code></pre>
+  env_parallel --env _ -S localhost myfunc ::: Hooray</code></pre>
 
 <p>In <b>csh</b> <b>--session</b> is not supported:</p>
 
-<pre><code>  # Record the &quot;clean&quot; environment (this only needs to be 
run once)
+<pre><code>  # Record the &quot;clean&quot; environment - this only needs to 
be run once
   env_parallel --record-env
 
-  # Optionally edit ~/.parallel/ignored_vars (only needed once)
+  # Optionally edit ~/.parallel/ignored_vars - only needed once
 
   # Define whatever you want to use
-  alias myalias &#39;echo \!* $myvar works.&#39;
-  set myvar=it
+  alias myalias &#39;echo Aliases $myvar \!*.&#39;
+  set myvar=&#39;and variables&#39;
 
   # Use --env _ to only transfer the names not in the &quot;empty&quot; 
environment
-  env_parallel --env _ -S localhost myalias ::: Yay,</code></pre>
+  env_parallel --env _ -S localhost myalias ::: work</code></pre>
 
 <h2 id="Environment-space">Environment space</h2>
 
@@ -935,7 +935,7 @@
 
 <p>When using GNU <b>env_parallel</b> for a publication please cite:</p>
 
-<p>O. Tange (2011): GNU Parallel - The Command-Line Power Tool, ;login: The 
USENIX Magazine, February 2011:42-47.</p>
+<p>O. Tange (2018): GNU Parallel 2018, March 2018, ISBN 9781387509881, DOI: 
10.5281/zenodo.1146014.</p>
 
 <p>This helps funding further development; and it won&#39;t cost you a cent. 
If you pay 10000 EUR you should feel free to use GNU Parallel without 
citing.</p>
 
Binary files old/parallel-20200822/src/env_parallel.pdf and 
new/parallel-20200922/src/env_parallel.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/env_parallel.pod 
new/parallel-20200922/src/env_parallel.pod
--- old/parallel-20200822/src/env_parallel.pod  2020-07-04 11:21:35.000000000 
+0200
+++ new/parallel-20200922/src/env_parallel.pod  2020-09-18 23:08:20.000000000 
+0200
@@ -31,12 +31,12 @@
   env_parallel --session
 
   # Define whatever you want to use
-  alias myalias=echo
-  myvar=it
-  myfunc() { myalias $1 $myvar works.; }
+  myfunc() { myalias and functions $myvar work. $1.; }
+  alias myalias='echo Aliases'
+  myvar='and variables'
 
   # env_parallel will not export names in $PARALLEL_IGNORED_NAMES
-  env_parallel -S localhost myfunc ::: Yay,
+  env_parallel -S localhost myfunc ::: Hooray
 
 Or:
 
@@ -46,26 +46,26 @@
   # Optionally edit ~/.parallel/ignored_vars (only needed once)
 
   # Define whatever you want to use
-  alias myalias=echo
-  myvar=it
-  myfunc() { myalias $1 $myvar works.; }
+  myfunc() { myalias and functions $myvar work. $1.; }
+  alias myalias='echo Aliases'
+  myvar='and variables'
 
   # Use --env _ to only transfer the names not in the "empty" environment
-  env_parallel --env _ -S localhost myfunc ::: Yay,
+  env_parallel --env _ -S localhost myfunc ::: Hooray
 
 In B<csh> B<--session> is not supported:
 
-  # Record the "clean" environment (this only needs to be run once)
+  # Record the "clean" environment - this only needs to be run once
   env_parallel --record-env
 
-  # Optionally edit ~/.parallel/ignored_vars (only needed once)
+  # Optionally edit ~/.parallel/ignored_vars - only needed once
 
   # Define whatever you want to use
-  alias myalias 'echo \!* $myvar works.'
-  set myvar=it
+  alias myalias 'echo Aliases $myvar \!*.'
+  set myvar='and variables'
 
   # Use --env _ to only transfer the names not in the "empty" environment
-  env_parallel --env _ -S localhost myalias ::: Yay,
+  env_parallel --env _ -S localhost myalias ::: work
 
 =head2 Environment space
 
@@ -793,8 +793,8 @@
 
 When using GNU B<env_parallel> for a publication please cite:
 
-O. Tange (2011): GNU Parallel - The Command-Line Power Tool, ;login:
-The USENIX Magazine, February 2011:42-47.
+O. Tange (2018): GNU Parallel 2018, March 2018, ISBN 9781387509881,
+DOI: 10.5281/zenodo.1146014.
 
 This helps funding further development; and it won't cost you a cent.
 If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/env_parallel.texi 
new/parallel-20200922/src/env_parallel.texi
--- old/parallel-20200822/src/env_parallel.texi 2020-07-04 11:21:47.000000000 
+0200
+++ new/parallel-20200922/src/env_parallel.texi 2020-09-19 17:07:02.000000000 
+0200
@@ -52,12 +52,12 @@
   env_parallel --session
 
   # Define whatever you want to use
-  alias myalias=echo
-  myvar=it
-  myfunc() { myalias $1 $myvar works.; }
+  myfunc() { myalias and functions $myvar work. $1.; }
+  alias myalias='echo Aliases'
+  myvar='and variables'
 
   # env_parallel will not export names in $PARALLEL_IGNORED_NAMES
-  env_parallel -S localhost myfunc ::: Yay,
+  env_parallel -S localhost myfunc ::: Hooray
 @end verbatim
 
 Or:
@@ -69,28 +69,28 @@
   # Optionally edit ~/.parallel/ignored_vars (only needed once)
 
   # Define whatever you want to use
-  alias myalias=echo
-  myvar=it
-  myfunc() { myalias $1 $myvar works.; }
+  myfunc() { myalias and functions $myvar work. $1.; }
+  alias myalias='echo Aliases'
+  myvar='and variables'
 
   # Use --env _ to only transfer the names not in the "empty" environment
-  env_parallel --env _ -S localhost myfunc ::: Yay,
+  env_parallel --env _ -S localhost myfunc ::: Hooray
 @end verbatim
 
 In @strong{csh} @strong{--session} is not supported:
 
 @verbatim
-  # Record the "clean" environment (this only needs to be run once)
+  # Record the "clean" environment - this only needs to be run once
   env_parallel --record-env
 
-  # Optionally edit ~/.parallel/ignored_vars (only needed once)
+  # Optionally edit ~/.parallel/ignored_vars - only needed once
 
   # Define whatever you want to use
-  alias myalias 'echo \!* $myvar works.'
-  set myvar=it
+  alias myalias 'echo Aliases $myvar \!*.'
+  set myvar='and variables'
 
   # Use --env _ to only transfer the names not in the "empty" environment
-  env_parallel --env _ -S localhost myalias ::: Yay,
+  env_parallel --env _ -S localhost myalias ::: work
 @end verbatim
 
 @menu
@@ -1079,8 +1079,8 @@
 
 When using GNU @strong{env_parallel} for a publication please cite:
 
-O. Tange (2011): GNU Parallel - The Command-Line Power Tool, ;login:
-The USENIX Magazine, February 2011:42-47.
+O. Tange (2018): GNU Parallel 2018, March 2018, ISBN 9781387509881,
+DOI: 10.5281/zenodo.1146014.
 
 This helps funding further development; and it won't cost you a cent.
 If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/niceload 
new/parallel-20200922/src/niceload
--- old/parallel-20200822/src/niceload  2020-08-23 01:20:56.000000000 +0200
+++ new/parallel-20200922/src/niceload  2020-09-23 10:09:33.000000000 +0200
@@ -23,7 +23,7 @@
 use strict;
 use Getopt::Long;
 $Global::progname="niceload";
-$Global::version = 20200822;
+$Global::version = 20200922;
 Getopt::Long::Configure("bundling","require_order");
 get_options_from_array(\@ARGV) || die_usage();
 if($opt::version) {
@@ -1147,7 +1147,9 @@
     my @iostat;
     for(reverse @iostat_out) {
        /Device/ and last;
-       push @iostat, (split(/\s+/,$_))[13];
+       my @col = (split(/\s+/,$_));
+       # Util% is last column
+       push @iostat, pop @col;
     }
     my $io = ::max(@iostat);
     return undef_as_zero($io)/10;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parallel 
new/parallel-20200922/src/parallel
--- old/parallel-20200822/src/parallel  2020-08-23 01:20:56.000000000 +0200
+++ new/parallel-20200922/src/parallel  2020-09-23 10:09:33.000000000 +0200
@@ -2160,7 +2160,7 @@
 
 sub init_globals() {
     # Defaults:
-    $Global::version = 20200822;
+    $Global::version = 20200922;
     $Global::progname = 'parallel';
     $::name = "GNU Parallel";
     $Global::infinity = 2**31;
@@ -4919,8 +4919,8 @@
         "If you use programs that use GNU Parallel to process data for an 
article in a",
         "scientific publication, please cite:",
         "",
-         "  Tange, O. (2020, August 22). GNU Parallel 20200822 ('Beirut').",
-        "  Zenodo. https://doi.org/10.5281/zenodo.3996295";,
+         "  Tange, O. (2020, September 22). GNU Parallel 20200922 
('Ginsburg').",
+        "  Zenodo. https://doi.org/10.5281/zenodo.4045386";,
         "",
         # Before changing this line,  please read
          # 
https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
@@ -4950,8 +4950,8 @@
             "If you use programs that use GNU Parallel to process data for an 
article in a",
             "scientific publication, please cite:",
             "",
-            "  Tange, O. (2020, August 22). GNU Parallel 20200822 ('Beirut').",
-            "  Zenodo. https://doi.org/10.5281/zenodo.3996295";,
+            "  Tange, O. (2020, September 22). GNU Parallel 20200922 
('Ginsburg').",
+            "  Zenodo. https://doi.org/10.5281/zenodo.4045386";,
             "",
             # Before changing this line,  please read
             # 
https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@@ -5064,20 +5064,20 @@
        "If you use programs that use GNU Parallel to process data for an 
article in a",
        "scientific publication, please cite:",
        "",
-       "\@software{tange_2020_3996295,",
+       "\@software{tange_2020_4045386,",
        "      author       = {Tange, Ole},",
-       "      title        = {GNU Parallel 20200822 ('Beirut')},",
-       "      month        = Aug,",
+       "      title        = {GNU Parallel 20200922 ('Ginsburg')},",
+       "      month        = Sep,",
        "      year         = 2020,",
        "      note         = {{GNU Parallel is a general parallelizer to run",
         "                       multiple serial command line programs in 
parallel",
        "                       without changing them.}},",
        "      publisher    = {Zenodo},",
-       "      doi          = {10.5281/zenodo.3996295},",
-       "      url          = {https://doi.org/10.5281/zenodo.3996295}";,
+       "      doi          = {10.5281/zenodo.4045386},",
+       "      url          = {https://doi.org/10.5281/zenodo.4045386}";,
        "}",
        "",
-       "(Feel free to use \\nocite{tange_2020_3996295})",
+       "(Feel free to use \\nocite{tange_2020_4045386})",
        "",
        # Before changing this line, please read
        # 
https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@@ -7387,19 +7387,37 @@
     #     'threads' => #threads
     #     'active' => #taskset_threads }
     my $cpu = shift;
-    local $/ = "\n"; # If delimiter is set, then $/ will be wrong
-    my @cpuinfo;
-    if($ENV{'PARALLEL_CPUINFO'}) {
-       # Use CPUINFO from environment - used for testing only
-       @cpuinfo = split/(?<=\n)/,$ENV{'PARALLEL_CPUINFO'};
-    } elsif($cpu->{'sockets'} and $cpu->{'cores'} and
-           $cpu->{'threads'}) {
-       # Skip /proc/cpuinfo - already set
-    } elsif(open(my $in_fh, "<", "/proc/cpuinfo")) {
-       # Read /proc/cpuinfo
-       @cpuinfo = <$in_fh>;
+
+    sub read_topology($) {
+       my $prefix = shift;
+       my %sibiling;
+       my %socket;
+       my $thread;
+       for($thread = 0;
+           -r "$prefix/cpu$thread/topology/physical_package_id";
+           $thread++) {
+           open(my $fh,"<",
+                "$prefix/cpu$thread/topology/physical_package_id")
+               || die;
+           $socket{<$fh>}++;
+           close $fh;
+       }
+       for($thread = 0;
+           -r "$prefix/cpu$thread/topology/thread_siblings";
+           $thread++) {
+           open(my $fh,"<",
+                "$prefix/cpu$thread/topology/thread_siblings")
+               || die;
+           $sibiling{<$fh>}++;
+           close $fh;
+       }
+       $cpu->{'sockets'} = keys %socket;
+       $cpu->{'cores'} = keys %sibiling;
+       $cpu->{'threads'} = $thread;
     }
-    if(@cpuinfo) {
+
+    sub read_cpuinfo(@) {
+       my @cpuinfo = @_;
        $cpu->{'sockets'} = 0;
        $cpu->{'cores'} = 0;
        $cpu->{'threads'} = 0;
@@ -7407,18 +7425,76 @@
        my %phy_seen;
        my $physicalid;
        for(@cpuinfo) {
+           # physical id : 0
            if(/^physical id.*[:](.*)/) {
                $physicalid = $1;
                if(not $phy_seen{$1}++) {
                    $cpu->{'sockets'}++;
                }
            }
+           # core id : 3
            if(/^core id.*[:](.*)/ and not $seen{$physicalid,$1}++) {
                $cpu->{'cores'}++;
            }
-           /^processor.*[:]/i and $cpu->{'threads'}++;
+           # processor : 2
+           /^processor.*[:]\s*\d/i and $cpu->{'threads'}++;
+       }
+       $cpu->{'cores'} ||= $cpu->{'threads'};
+       $cpu->{'cpus'} ||= $cpu->{'threads'};
+       $cpu->{'sockets'} ||= 1;
+    }
+
+    sub read_lscpu(@) {
+       my @lscpu = @_;
+       my $threads_per_core;
+       my $cores_per_socket;
+       for(@lscpu) {
+           /^CPU.s.:\s*(\d+)/ and $cpu->{'threads'} = $1;
+           /^Thread.s. per core:\s*(\d+)/ and $threads_per_core = $1;
+           /^Core.s. per socket:\s*(\d+)/ and $cores_per_socket = $1;
+           /^(CPU )?Socket.s.:\s*(\d+)/i and $cpu->{'sockets'} = $2;
+       }
+       if($threads_per_core and $cpu->{'threads'}) {
+           $cpu->{'cores'} =  $cpu->{'threads'} / $threads_per_core;
+       }
+       $cpu->{'cpus'} ||= $cpu->{'threads'};
+    }
+
+    local $/ = "\n"; # If delimiter is set, then $/ will be wrong
+    my @cpuinfo;
+    my @lscpu;
+    if($ENV{'PARALLEL_CPUINFO'}) {
+       # Use CPUINFO from environment - used for testing only
+       read_cpuinfo(split/(?<=\n)/,$ENV{'PARALLEL_CPUINFO'});
+    } elsif($ENV{'PARALLEL_LSCPU'}) {
+       # Use LSCPU from environment - used for testing only
+       read_lscpu(split/(?<=\n)/,$ENV{'PARALLEL_LSCPU'});
+    } elsif(-r "$ENV{'PARALLEL_CPUPREFIX'}/cpu0/topology/thread_siblings") {
+       # Use CPUPREFIX from environment - used for testing only
+       read_topology($ENV{'PARALLEL_CPUPREFIX'});
+    } elsif($cpu->{'sockets'} and $cpu->{'cores'} and $cpu->{'threads'}) {
+       # Skip /proc/cpuinfo - already set
+    } else {
+       # Not debugging: Look at this computer
+       if(!($cpu->{'sockets'} and $cpu->{'cores'} and $cpu->{'threads'})
+          and
+          open(my $in_fh, "-|", "lscpu")) {
+           # Parse output from lscpu
+           read_lscpu(<$in_fh>);
+           close $in_fh;
+       }
+       if(!($cpu->{'sockets'} and $cpu->{'cores'} and $cpu->{'threads'})
+          and
+          -r "/sys/devices/system/cpu/cpu0/topology/thread_siblings") {
+           read_topology("/sys/devices/system/cpu");
+       }
+       if(!($cpu->{'sockets'} and $cpu->{'cores'} and $cpu->{'threads'})
+          and
+          open(my $in_fh, "<", "/proc/cpuinfo")) {
+           # Read /proc/cpuinfo
+           read_cpuinfo(<$in_fh>);
+           close $in_fh;
        }
-       $cpu->{'cores'} ||= $cpu->{'threads'} || $cpu->{'sockets'};
     }
     if(-e "/proc/self/status" and not $ENV{'PARALLEL_CPUINFO'}) {
        # if 'taskset' is used to limit number of threads
@@ -7836,7 +7912,9 @@
        if(not $rsync) {
            my @out = `rsync --version`;
            for (@out) {
-               if(/version (\d+.\d+)(.\d+)?/) {
+               # rsync  version 3.1.3  protocol version 31
+               # rsync  version v3.2.3  protocol version 31
+               if(/version v?(\d+.\d+)(.\d+)?/) {
                    if($1 >= 3.1) {
                        # Version 3.1.0 or later: Downgrade to protocol 30
                        $rsync = "rsync --protocol 30";
@@ -10517,7 +10595,7 @@
                my $envc = (keys %ENV);
                my $envn = length join"",(keys %ENV);
                my $envv = length join"",(values %ENV);
-               $darwin_max_len = 3+($max_len - $envn - $envv)/5 - $envc*2;
+               $darwin_max_len = -146+($max_len - $envn - $envv) - $envc*10;
                ::debug("init",
                        "length: $darwin_max_len ".
                        "3+($max_len - $envn - $envv)/5 - $envc*2");
@@ -10838,6 +10916,8 @@
     # Length of command w/ all replacement args removed
     $len += $self->{'len'}{'noncontext'} + @{$self->{'command'}} -1;
     ::debug("length", "noncontext + command: $len\n");
+    # MacOS has an overhead of 8 bytes per argument
+    my $darwin = ($^O eq "darwin") ? 8 : 0;
     my $recargs = $self->number_of_recargs();
     if($self->{'context_replace'}) {
        # Context is duplicated for each arg
@@ -10856,16 +10936,23 @@
                " Groups: ", $self->{'len'}{'noncontextgroups'}, "\n");
        # Add space between context groups
        $len += ($recargs-1) * ($self->{'len'}{'contextgroups'});
+       if($darwin) {
+           $len += $recargs * $self->{'len'}{'contextgroups'} * $darwin;
+       }
     } else {
        # Each replacement string may occur several times
        # Add the length for each time
        $len += 1*$self->{'len'}{'context'};
        ::debug("length", "context+noncontext + command: $len\n");
        for my $replstring (keys %{$self->{'replacecount'}}) {
-           # (space between regargs + length of replacement)
+           # (space between recargs + length of replacement)
            # * number this replacement is used
            $len += ($recargs -1 + $self->{'len'}{$replstring}) *
                $self->{'replacecount'}{$replstring};
+           if($darwin) {
+               $len += ($recargs * $self->{'replacecount'}{$replstring}
+                        * $darwin);
+           }
        }
     }
     if(defined $Global::parallel_env) {
@@ -12864,8 +12951,15 @@
     my $parallel_locks = $Global::cache_dir . "/semaphores";
     -d $parallel_locks or ::mkdir_or_die($parallel_locks);
     my $lockdir = "$parallel_locks/$id";
-
     my $lockfile = $lockdir.".lock";
+    if(-d $parallel_locks and -w $parallel_locks
+       and -r $parallel_locks and -x $parallel_locks) {
+       # skip
+    } else {
+       ::error("Semaphoredir must be writable: '$parallel_locks'");
+       ::wait_and_exit(255);
+    }
+
     if($count < 1) { ::die_bug("semaphore-count: $count"); }
     return bless {
        'lockfile' => $lockfile,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parallel_design.7 
new/parallel-20200922/src/parallel_design.7
--- old/parallel-20200822/src/parallel_design.7 2019-11-21 23:56:08.000000000 
+0100
+++ new/parallel-20200922/src/parallel_design.7 2020-09-21 20:07:31.000000000 
+0200
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.40)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -54,16 +54,20 @@
 .\" Avoid warning from groff about undefined register 'F'.
 .de IX
 ..
-.if !\nF .nr F 0
-.if \nF>0 \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+.    if \nF \{\
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
-.    if !\nF==2 \{\
-.        nr % 0
-.        nr F 2
+.        if !\nF==2 \{\
+.            nr % 0
+.            nr F 2
+.        \}
 .    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -129,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "PARALLEL_DESIGN 7"
-.TH PARALLEL_DESIGN 7 "2019-11-21" "20191022" "parallel"
+.TH PARALLEL_DESIGN 7 "2020-09-19" "20200822" "parallel"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -676,7 +680,7 @@
 .IX Subsection "Shell shock"
 The shell shock bug in \fBbash\fR did not affect \s-1GNU\s0 \fBparallel\fR, 
but the
 solutions did. \fBbash\fR first introduced functions in variables named:
-\&\fI\fIBASH_FUNC_myfunc()\fI\fR and later changed that to 
\fIBASH_FUNC_myfunc%%\fR. When
+\&\fI\f(BIBASH_FUNC_myfunc()\fI\fR and later changed that to 
\fIBASH_FUNC_myfunc%%\fR. When
 transferring functions \s-1GNU\s0 \fBparallel\fR reads off the function and 
changes
 that into a function definition, which is copied to the remote system and
 executed before the actual command is executed. Therefore \s-1GNU\s0 
\fBparallel\fR
@@ -713,6 +717,9 @@
 if the parent pid becomes 1, then Ctrl-C works and stderr is kept on
 stderr.
 .PP
+Ctrl-C does, however, kill the ssh connection, so any output from
+a remote dying process is lost.
+.PP
 To be able to kill all (grand)*children a new process group is
 started.
 .PP
@@ -1153,7 +1160,7 @@
 sources.
 .IP "\(bu" 3
 Computing the number of jobs. \fB\-\-bar\fR, \fB\-\-eta\fR, and \fB\-\-halt 
xx%\fR
-use \fB\f(BItotal_jobs()\fB\fR to compute the total number of jobs. It does 
this
+use \fB\fBtotal_jobs()\fB\fR to compute the total number of jobs. It does this
 by generating the data structures for all jobs. All these job data
 structures will be stored in memory and take up around 400 bytes/job.
 .IP "\(bu" 3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parallel_design.html 
new/parallel-20200922/src/parallel_design.html
--- old/parallel-20200822/src/parallel_design.html      2020-08-23 
01:22:17.000000000 +0200
+++ new/parallel-20200922/src/parallel_design.html      2020-09-21 
20:07:31.000000000 +0200
@@ -557,6 +557,8 @@
 
 <p>So what is needed is a way to have both. It seems the reason why Ctrl-C 
does not kill the remote jobs is because the shell does not propagate the 
hang-up signal from <b>sshd</b>. But when <b>sshd</b> dies, the parent of the 
login shell becomes <b>init</b> (process id 1). So by exec&#39;ing a Perl 
wrapper to monitor the parent pid and kill the child if the parent pid becomes 
1, then Ctrl-C works and stderr is kept on stderr.</p>
 
+<p>Ctrl-C does, however, kill the ssh connection, so any output from a remote 
dying process is lost.</p>
+
 <p>To be able to kill all (grand)*children a new process group is started.</p>
 
 <h3 id="nice">--nice</h3>
Binary files old/parallel-20200822/src/parallel_design.pdf and 
new/parallel-20200922/src/parallel_design.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parallel_design.pod 
new/parallel-20200922/src/parallel_design.pod
--- old/parallel-20200822/src/parallel_design.pod       2019-11-21 
23:50:36.000000000 +0100
+++ new/parallel-20200922/src/parallel_design.pod       2020-09-20 
00:33:07.000000000 +0200
@@ -652,9 +652,13 @@
 if the parent pid becomes 1, then Ctrl-C works and stderr is kept on
 stderr.
 
+Ctrl-C does, however, kill the ssh connection, so any output from
+a remote dying process is lost.
+
 To be able to kill all (grand)*children a new process group is
 started.
 
+
 =head3 --nice
 
 B<nice>ing the remote process is done by B<setpriority(0,0,$nice)>. A
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parallel_design.texi 
new/parallel-20200922/src/parallel_design.texi
--- old/parallel-20200822/src/parallel_design.texi      2020-04-21 
19:43:25.000000000 +0200
+++ new/parallel-20200922/src/parallel_design.texi      2020-09-21 
20:07:32.000000000 +0200
@@ -735,6 +735,9 @@
 if the parent pid becomes 1, then Ctrl-C works and stderr is kept on
 stderr.
 
+Ctrl-C does, however, kill the ssh connection, so any output from
+a remote dying process is lost.
+
 To be able to kill all (grand)*children a new process group is
 started.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parcat.1 
new/parallel-20200922/src/parcat.1
--- old/parallel-20200822/src/parcat.1  2020-02-22 20:04:55.000000000 +0100
+++ new/parallel-20200922/src/parcat.1  2020-08-23 12:35:39.000000000 +0200
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.40)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -54,16 +54,20 @@
 .\" Avoid warning from groff about undefined register 'F'.
 .de IX
 ..
-.if !\nF .nr F 0
-.if \nF>0 \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+.    if \nF \{\
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
-.    if !\nF==2 \{\
-.        nr % 0
-.        nr F 2
+.        if !\nF==2 \{\
+.            nr % 0
+.            nr F 2
+.        \}
 .    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -129,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "PARCAT 1"
-.TH PARCAT 1 "2020-01-27" "20200122" "parallel"
+.TH PARCAT 1 "2020-08-23" "20200822" "parallel"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -149,6 +153,12 @@
 \&   (cat file1 & cat file2 &) | ...
 .Ve
 .PP
+It is faster than doing:
+.PP
+.Vb 1
+\&   parallel \-j0 \-\-lb cat ::: file*
+.Ve
+.PP
 Arguments can be given on the command line or passed in on stdin
 (standard input).
 .SH "OPTIONS"
@@ -172,14 +182,16 @@
 .IX Header "EXAMPLES"
 .SS "Simple line buffered output"
 .IX Subsection "Simple line buffered output"
-\&\s-1GNU\s0 \fBparallel\fR saves output to tempfiles. If the amount of data is
-bigger than the free disk space, then you can use this technique to do
-line buffering without saving to disk:
+\&\fBtraceroute\fR will often print half a line. If run in parallel, two
+instances may half-lines of their output. This can be avoided by
+saving the output to a fifo and then using \fBparcat\fR to read the two
+fifos in parallel:
 .PP
-.Vb 3
-\&  mkfifo slot\-{1..5}
-\&  seq 10000000 | parallel \-j5 \-\-round \-\-pipe \*(Aqcat > slot\-{%}\*(Aq &
-\&  parcat slot\-{1..5} | wc
+.Vb 4
+\&  mkfifo freenetproject.org.fifo tange.dk.fifo
+\&  traceroute freenetproject.org > freenetproject.org.fifo &
+\&  traceroute tange.dk > tange.dk.fifo &
+\&  parcat \-\-rm *fifo
 .Ve
 .SH "REPORTING BUGS"
 .IX Header "REPORTING BUGS"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parcat.html 
new/parallel-20200922/src/parcat.html
--- old/parallel-20200822/src/parcat.html       2020-08-23 01:22:17.000000000 
+0200
+++ new/parallel-20200922/src/parcat.html       2020-09-23 10:10:06.000000000 
+0200
@@ -47,6 +47,10 @@
 
 <pre><code>   (cat file1 &amp; cat file2 &amp;) | ...</code></pre>
 
+<p>It is faster than doing:</p>
+
+<pre><code>   parallel -j0 --lb cat ::: file*</code></pre>
+
 <p>Arguments can be given on the command line or passed in on stdin (standard 
input).</p>
 
 <h1 id="OPTIONS">OPTIONS</h1>
@@ -75,11 +79,12 @@
 
 <h2 id="Simple-line-buffered-output">Simple line buffered output</h2>
 
-<p>GNU <b>parallel</b> saves output to tempfiles. If the amount of data is 
bigger than the free disk space, then you can use this technique to do line 
buffering without saving to disk:</p>
+<p><b>traceroute</b> will often print half a line. If run in parallel, two 
instances may half-lines of their output. This can be avoided by saving the 
output to a fifo and then using <b>parcat</b> to read the two fifos in 
parallel:</p>
 
-<pre><code>  mkfifo slot-{1..5}
-  seq 10000000 | parallel -j5 --round --pipe &#39;cat &gt; slot-{%}&#39; &amp;
-  parcat slot-{1..5} | wc</code></pre>
+<pre><code>  mkfifo freenetproject.org.fifo tange.dk.fifo
+  traceroute freenetproject.org &gt; freenetproject.org.fifo &amp;
+  traceroute tange.dk &gt; tange.dk.fifo &amp;
+  parcat --rm *fifo</code></pre>
 
 <h1 id="REPORTING-BUGS">REPORTING BUGS</h1>
 
Binary files old/parallel-20200822/src/parcat.pdf and 
new/parallel-20200922/src/parcat.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parcat.pod 
new/parallel-20200922/src/parcat.pod
--- old/parallel-20200822/src/parcat.pod        2020-01-27 18:17:31.000000000 
+0100
+++ new/parallel-20200922/src/parcat.pod        2020-08-23 12:35:33.000000000 
+0200
@@ -16,6 +16,10 @@
 
    (cat file1 & cat file2 &) | ...
 
+It is faster than doing:
+
+   parallel -j0 --lb cat ::: file*
+
 Arguments can be given on the command line or passed in on stdin
 (standard input).
 
@@ -44,13 +48,16 @@
 
 =head2 Simple line buffered output
 
-GNU B<parallel> saves output to tempfiles. If the amount of data is
-bigger than the free disk space, then you can use this technique to do
-line buffering without saving to disk:
-
-  mkfifo slot-{1..5}
-  seq 10000000 | parallel -j5 --round --pipe 'cat > slot-{%}' &
-  parcat slot-{1..5} | wc
+B<traceroute> will often print half a line. If run in parallel, two
+instances may half-lines of their output. This can be avoided by
+saving the output to a fifo and then using B<parcat> to read the two
+fifos in parallel:
+
+  mkfifo freenetproject.org.fifo tange.dk.fifo
+  traceroute freenetproject.org > freenetproject.org.fifo &
+  traceroute tange.dk > tange.dk.fifo &
+  parcat --rm *fifo
+
 
 =head1 REPORTING BUGS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parcat.texi 
new/parallel-20200922/src/parcat.texi
--- old/parallel-20200822/src/parcat.texi       2020-04-21 19:43:24.000000000 
+0200
+++ new/parallel-20200922/src/parcat.texi       2020-08-23 12:35:41.000000000 
+0200
@@ -42,6 +42,12 @@
    (cat file1 & cat file2 &) | ...
 @end verbatim
 
+It is faster than doing:
+
+@verbatim
+   parallel -j0 --lb cat ::: file*
+@end verbatim
+
 Arguments can be given on the command line or passed in on stdin
 (standard input).
 
@@ -80,14 +86,16 @@
 @node Simple line buffered output
 @section Simple line buffered output
 
-GNU @strong{parallel} saves output to tempfiles. If the amount of data is
-bigger than the free disk space, then you can use this technique to do
-line buffering without saving to disk:
+@strong{traceroute} will often print half a line. If run in parallel, two
+instances may half-lines of their output. This can be avoided by
+saving the output to a fifo and then using @strong{parcat} to read the two
+fifos in parallel:
 
 @verbatim
-  mkfifo slot-{1..5}
-  seq 10000000 | parallel -j5 --round --pipe 'cat > slot-{%}' &
-  parcat slot-{1..5} | wc
+  mkfifo freenetproject.org.fifo tange.dk.fifo
+  traceroute freenetproject.org > freenetproject.org.fifo &
+  traceroute tange.dk > tange.dk.fifo &
+  parcat --rm *fifo
 @end verbatim
 
 @node REPORTING BUGS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parsort 
new/parallel-20200922/src/parsort
--- old/parallel-20200822/src/parsort   2020-04-22 18:17:02.000000000 +0200
+++ new/parallel-20200922/src/parsort   2020-08-23 12:12:11.000000000 +0200
@@ -117,7 +117,7 @@
     "help" => \$opt::dummy,
     ) || exit(255);
 $Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
-$Global::version = 20200412;
+$Global::version = 20200823;
 if($opt::version) { version(); exit 0; }
 @Global::sortoptions = @ARGV_before[0..($#ARGV_before-$#ARGV-1)];
 #if($opt::zero_terminated) { $/ = "\0"; }
@@ -256,6 +256,20 @@
     return wantarray ? @which : $which[0];
 }
 
+sub version() {
+    # Returns: N/A
+    print join
+       ("\n",
+        "GNU $Global::progname $Global::version",
+        "Copyright (C) 2020 Ole Tange, http://ole.tange.dk and Free Software",
+        "Foundation, Inc.",
+        "License GPLv3+: GNU GPL version 3 or later 
<https://gnu.org/licenses/gpl.html>",
+        "This is free software: you are free to change and redistribute it.",
+        "GNU $Global::progname comes with no warranty.",
+        "",
+        "Web site: https://www.gnu.org/software/parallel\n";,
+        );
+}
 
 if(@ARGV) {
     sort_files(@ARGV);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/parsort.1 
new/parallel-20200922/src/parsort.1
--- old/parallel-20200822/src/parsort.1 2020-04-22 18:17:09.000000000 +0200
+++ new/parallel-20200922/src/parsort.1 2020-08-23 12:35:39.000000000 +0200
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.40)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -54,16 +54,20 @@
 .\" Avoid warning from groff about undefined register 'F'.
 .de IX
 ..
-.if !\nF .nr F 0
-.if \nF>0 \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+.    if \nF \{\
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
-.    if !\nF==2 \{\
-.        nr % 0
-.        nr F 2
+.        if !\nF==2 \{\
+.            nr % 0
+.            nr F 2
+.        \}
 .    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -129,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "PARSORT 1"
-.TH PARSORT 1 "2020-04-22" "20200322" "parallel"
+.TH PARSORT 1 "2020-08-23" "20200822" "parallel"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
Binary files old/parallel-20200822/src/parsort.pdf and 
new/parallel-20200922/src/parsort.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/sem 
new/parallel-20200922/src/sem
--- old/parallel-20200822/src/sem       2020-08-23 01:20:56.000000000 +0200
+++ new/parallel-20200922/src/sem       2020-09-23 10:09:33.000000000 +0200
@@ -2160,7 +2160,7 @@
 
 sub init_globals() {
     # Defaults:
-    $Global::version = 20200822;
+    $Global::version = 20200922;
     $Global::progname = 'parallel';
     $::name = "GNU Parallel";
     $Global::infinity = 2**31;
@@ -4919,8 +4919,8 @@
         "If you use programs that use GNU Parallel to process data for an 
article in a",
         "scientific publication, please cite:",
         "",
-         "  Tange, O. (2020, August 22). GNU Parallel 20200822 ('Beirut').",
-        "  Zenodo. https://doi.org/10.5281/zenodo.3996295";,
+         "  Tange, O. (2020, September 22). GNU Parallel 20200922 
('Ginsburg').",
+        "  Zenodo. https://doi.org/10.5281/zenodo.4045386";,
         "",
         # Before changing this line,  please read
          # 
https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
@@ -4950,8 +4950,8 @@
             "If you use programs that use GNU Parallel to process data for an 
article in a",
             "scientific publication, please cite:",
             "",
-            "  Tange, O. (2020, August 22). GNU Parallel 20200822 ('Beirut').",
-            "  Zenodo. https://doi.org/10.5281/zenodo.3996295";,
+            "  Tange, O. (2020, September 22). GNU Parallel 20200922 
('Ginsburg').",
+            "  Zenodo. https://doi.org/10.5281/zenodo.4045386";,
             "",
             # Before changing this line,  please read
             # 
https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@@ -5064,20 +5064,20 @@
        "If you use programs that use GNU Parallel to process data for an 
article in a",
        "scientific publication, please cite:",
        "",
-       "\@software{tange_2020_3996295,",
+       "\@software{tange_2020_4045386,",
        "      author       = {Tange, Ole},",
-       "      title        = {GNU Parallel 20200822 ('Beirut')},",
-       "      month        = Aug,",
+       "      title        = {GNU Parallel 20200922 ('Ginsburg')},",
+       "      month        = Sep,",
        "      year         = 2020,",
        "      note         = {{GNU Parallel is a general parallelizer to run",
         "                       multiple serial command line programs in 
parallel",
        "                       without changing them.}},",
        "      publisher    = {Zenodo},",
-       "      doi          = {10.5281/zenodo.3996295},",
-       "      url          = {https://doi.org/10.5281/zenodo.3996295}";,
+       "      doi          = {10.5281/zenodo.4045386},",
+       "      url          = {https://doi.org/10.5281/zenodo.4045386}";,
        "}",
        "",
-       "(Feel free to use \\nocite{tange_2020_3996295})",
+       "(Feel free to use \\nocite{tange_2020_4045386})",
        "",
        # Before changing this line, please read
        # 
https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@@ -7387,19 +7387,37 @@
     #     'threads' => #threads
     #     'active' => #taskset_threads }
     my $cpu = shift;
-    local $/ = "\n"; # If delimiter is set, then $/ will be wrong
-    my @cpuinfo;
-    if($ENV{'PARALLEL_CPUINFO'}) {
-       # Use CPUINFO from environment - used for testing only
-       @cpuinfo = split/(?<=\n)/,$ENV{'PARALLEL_CPUINFO'};
-    } elsif($cpu->{'sockets'} and $cpu->{'cores'} and
-           $cpu->{'threads'}) {
-       # Skip /proc/cpuinfo - already set
-    } elsif(open(my $in_fh, "<", "/proc/cpuinfo")) {
-       # Read /proc/cpuinfo
-       @cpuinfo = <$in_fh>;
+
+    sub read_topology($) {
+       my $prefix = shift;
+       my %sibiling;
+       my %socket;
+       my $thread;
+       for($thread = 0;
+           -r "$prefix/cpu$thread/topology/physical_package_id";
+           $thread++) {
+           open(my $fh,"<",
+                "$prefix/cpu$thread/topology/physical_package_id")
+               || die;
+           $socket{<$fh>}++;
+           close $fh;
+       }
+       for($thread = 0;
+           -r "$prefix/cpu$thread/topology/thread_siblings";
+           $thread++) {
+           open(my $fh,"<",
+                "$prefix/cpu$thread/topology/thread_siblings")
+               || die;
+           $sibiling{<$fh>}++;
+           close $fh;
+       }
+       $cpu->{'sockets'} = keys %socket;
+       $cpu->{'cores'} = keys %sibiling;
+       $cpu->{'threads'} = $thread;
     }
-    if(@cpuinfo) {
+
+    sub read_cpuinfo(@) {
+       my @cpuinfo = @_;
        $cpu->{'sockets'} = 0;
        $cpu->{'cores'} = 0;
        $cpu->{'threads'} = 0;
@@ -7407,18 +7425,76 @@
        my %phy_seen;
        my $physicalid;
        for(@cpuinfo) {
+           # physical id : 0
            if(/^physical id.*[:](.*)/) {
                $physicalid = $1;
                if(not $phy_seen{$1}++) {
                    $cpu->{'sockets'}++;
                }
            }
+           # core id : 3
            if(/^core id.*[:](.*)/ and not $seen{$physicalid,$1}++) {
                $cpu->{'cores'}++;
            }
-           /^processor.*[:]/i and $cpu->{'threads'}++;
+           # processor : 2
+           /^processor.*[:]\s*\d/i and $cpu->{'threads'}++;
+       }
+       $cpu->{'cores'} ||= $cpu->{'threads'};
+       $cpu->{'cpus'} ||= $cpu->{'threads'};
+       $cpu->{'sockets'} ||= 1;
+    }
+
+    sub read_lscpu(@) {
+       my @lscpu = @_;
+       my $threads_per_core;
+       my $cores_per_socket;
+       for(@lscpu) {
+           /^CPU.s.:\s*(\d+)/ and $cpu->{'threads'} = $1;
+           /^Thread.s. per core:\s*(\d+)/ and $threads_per_core = $1;
+           /^Core.s. per socket:\s*(\d+)/ and $cores_per_socket = $1;
+           /^(CPU )?Socket.s.:\s*(\d+)/i and $cpu->{'sockets'} = $2;
+       }
+       if($threads_per_core and $cpu->{'threads'}) {
+           $cpu->{'cores'} =  $cpu->{'threads'} / $threads_per_core;
+       }
+       $cpu->{'cpus'} ||= $cpu->{'threads'};
+    }
+
+    local $/ = "\n"; # If delimiter is set, then $/ will be wrong
+    my @cpuinfo;
+    my @lscpu;
+    if($ENV{'PARALLEL_CPUINFO'}) {
+       # Use CPUINFO from environment - used for testing only
+       read_cpuinfo(split/(?<=\n)/,$ENV{'PARALLEL_CPUINFO'});
+    } elsif($ENV{'PARALLEL_LSCPU'}) {
+       # Use LSCPU from environment - used for testing only
+       read_lscpu(split/(?<=\n)/,$ENV{'PARALLEL_LSCPU'});
+    } elsif(-r "$ENV{'PARALLEL_CPUPREFIX'}/cpu0/topology/thread_siblings") {
+       # Use CPUPREFIX from environment - used for testing only
+       read_topology($ENV{'PARALLEL_CPUPREFIX'});
+    } elsif($cpu->{'sockets'} and $cpu->{'cores'} and $cpu->{'threads'}) {
+       # Skip /proc/cpuinfo - already set
+    } else {
+       # Not debugging: Look at this computer
+       if(!($cpu->{'sockets'} and $cpu->{'cores'} and $cpu->{'threads'})
+          and
+          open(my $in_fh, "-|", "lscpu")) {
+           # Parse output from lscpu
+           read_lscpu(<$in_fh>);
+           close $in_fh;
+       }
+       if(!($cpu->{'sockets'} and $cpu->{'cores'} and $cpu->{'threads'})
+          and
+          -r "/sys/devices/system/cpu/cpu0/topology/thread_siblings") {
+           read_topology("/sys/devices/system/cpu");
+       }
+       if(!($cpu->{'sockets'} and $cpu->{'cores'} and $cpu->{'threads'})
+          and
+          open(my $in_fh, "<", "/proc/cpuinfo")) {
+           # Read /proc/cpuinfo
+           read_cpuinfo(<$in_fh>);
+           close $in_fh;
        }
-       $cpu->{'cores'} ||= $cpu->{'threads'} || $cpu->{'sockets'};
     }
     if(-e "/proc/self/status" and not $ENV{'PARALLEL_CPUINFO'}) {
        # if 'taskset' is used to limit number of threads
@@ -7836,7 +7912,9 @@
        if(not $rsync) {
            my @out = `rsync --version`;
            for (@out) {
-               if(/version (\d+.\d+)(.\d+)?/) {
+               # rsync  version 3.1.3  protocol version 31
+               # rsync  version v3.2.3  protocol version 31
+               if(/version v?(\d+.\d+)(.\d+)?/) {
                    if($1 >= 3.1) {
                        # Version 3.1.0 or later: Downgrade to protocol 30
                        $rsync = "rsync --protocol 30";
@@ -10517,7 +10595,7 @@
                my $envc = (keys %ENV);
                my $envn = length join"",(keys %ENV);
                my $envv = length join"",(values %ENV);
-               $darwin_max_len = 3+($max_len - $envn - $envv)/5 - $envc*2;
+               $darwin_max_len = -146+($max_len - $envn - $envv) - $envc*10;
                ::debug("init",
                        "length: $darwin_max_len ".
                        "3+($max_len - $envn - $envv)/5 - $envc*2");
@@ -10838,6 +10916,8 @@
     # Length of command w/ all replacement args removed
     $len += $self->{'len'}{'noncontext'} + @{$self->{'command'}} -1;
     ::debug("length", "noncontext + command: $len\n");
+    # MacOS has an overhead of 8 bytes per argument
+    my $darwin = ($^O eq "darwin") ? 8 : 0;
     my $recargs = $self->number_of_recargs();
     if($self->{'context_replace'}) {
        # Context is duplicated for each arg
@@ -10856,16 +10936,23 @@
                " Groups: ", $self->{'len'}{'noncontextgroups'}, "\n");
        # Add space between context groups
        $len += ($recargs-1) * ($self->{'len'}{'contextgroups'});
+       if($darwin) {
+           $len += $recargs * $self->{'len'}{'contextgroups'} * $darwin;
+       }
     } else {
        # Each replacement string may occur several times
        # Add the length for each time
        $len += 1*$self->{'len'}{'context'};
        ::debug("length", "context+noncontext + command: $len\n");
        for my $replstring (keys %{$self->{'replacecount'}}) {
-           # (space between regargs + length of replacement)
+           # (space between recargs + length of replacement)
            # * number this replacement is used
            $len += ($recargs -1 + $self->{'len'}{$replstring}) *
                $self->{'replacecount'}{$replstring};
+           if($darwin) {
+               $len += ($recargs * $self->{'replacecount'}{$replstring}
+                        * $darwin);
+           }
        }
     }
     if(defined $Global::parallel_env) {
@@ -12864,8 +12951,15 @@
     my $parallel_locks = $Global::cache_dir . "/semaphores";
     -d $parallel_locks or ::mkdir_or_die($parallel_locks);
     my $lockdir = "$parallel_locks/$id";
-
     my $lockfile = $lockdir.".lock";
+    if(-d $parallel_locks and -w $parallel_locks
+       and -r $parallel_locks and -x $parallel_locks) {
+       # skip
+    } else {
+       ::error("Semaphoredir must be writable: '$parallel_locks'");
+       ::wait_and_exit(255);
+    }
+
     if($count < 1) { ::die_bug("semaphore-count: $count"); }
     return bless {
        'lockfile' => $lockfile,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/sql 
new/parallel-20200922/src/sql
--- old/parallel-20200822/src/sql       2020-08-23 01:20:56.000000000 +0200
+++ new/parallel-20200922/src/sql       2020-09-23 10:09:33.000000000 +0200
@@ -574,7 +574,7 @@
 exit ($err);
 
 sub parse_options {
-    $Global::version = 20200822;
+    $Global::version = 20200922;
     $Global::progname = 'sql';
 
     # This must be done first as this may exec myself
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/parallel-20200822/src/sql.1 
new/parallel-20200922/src/sql.1
--- old/parallel-20200822/src/sql.1     2020-08-23 01:22:15.000000000 +0200
+++ new/parallel-20200922/src/sql.1     2020-09-23 10:10:04.000000000 +0200
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "SQL 1"
-.TH SQL 1 "2020-08-22" "20200822" "parallel"
+.TH SQL 1 "2020-09-23" "20200922" "parallel"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l

++++++ parallel-20200822.tar.bz2.sig -> parallel-20200922.tar.bz2.sig ++++++
--- /work/SRC/openSUSE:Factory/gnu_parallel/parallel-20200822.tar.bz2.sig       
2020-09-06 00:04:54.759329263 +0200
+++ 
/work/SRC/openSUSE:Factory/.gnu_parallel.new.4249/parallel-20200922.tar.bz2.sig 
    2020-10-10 19:05:18.324513250 +0200
@@ -2,7 +2,7 @@
 
 # To check the signature run:
 #   echo | gpg
-#   gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve 
parallel-20200822.tar.bz2.sig
+#   gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve 
parallel-20200922.tar.bz2.sig
 
 echo | gpg 2>/dev/null
 gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve $0
@@ -10,32 +10,32 @@
 
 -----BEGIN PGP SIGNATURE-----
 
-iQUHBAABCgAdFiEEzaAaQgjE90UGEH570atFFoiIiIgFAl9BqNwACgkQ0atFFoiI
-iIjW5SafQ8ffeX3UuWUAqCqhdkdsqnmNNVcS4xXYPdOpOlr8ttVODuVdzk4kPpVP
-IOMnmN0VEPm2rbzXxF6CuX5IFySKZ913hWPdzxpzWF6gchtZUJyO+dp9kERFqbrm
-UW8a+RgBc4gdNPRjyii3724jf+IZ4BLurtyJdcqzVv8BoWpUlY0mKdHr5fLm1FEk
-l9D1VOqjqjPpufU6ZdTpEv5WDuOlMnEZXTM4NTHe7Iv95oMW9GwvPXnBvuoOr5Tj
-EECdYtM1d4TLSKis8Vmq7igppbd+HKThBDPt64yUPfaXAIWwEuE2pOIZygzFtLgz
-bOFANjwndUDjRx+8tW3jkzUeDUFXvq9eOtmUMc6x+9IG0KJ6MVc8EsAVHVwCZeP/
-iJpGjzPYzr0j6wPMyTPrEDMw5vWbNjAUo19Xmsaci97k+Fh7OpUC00OtBR4M1ebm
-MYI89hGu8FxIler4uhhEZibj4XGls7Ak3dm9hyyiEfhh5BiQ+YuII/snU6Y3PcXQ
-+NX+qqeBoIU7XnRiHRDltPsDXfdCDp6W1HA9S9aDKlvK0YOzIQXsLachWDCLLmiQ
-N6G3VnYjnwUsT2THJqGymKU11gg8KT4z3WxW4+ZwnpRGyt54+MI2H+PWuC43Z7U/
-YhgZQ/oJm+Sh8TmXv4MWat9rgeA18Opbk37XH8IqkWSnusMp+uS3VEcXO14VmxeX
-4W7eAa0atuzddsZTkcktfPz7rSVVbBnIFJ6BVT5Dit1hM2u9UPccAilOq7GCEe8M
-wlu6u/TC6ouK8SIqgfAqUNSxk/OGpHY/IM5ZgXuDvXwK+YUkPyveXV1JfbKSM3fk
-cMFHSpNDCBdUzq3XELun4Rik2YjjDo1y7DouRMBf3LrN4R7BXzJBNeK87HQXO7E/
-Jtwjk9vkXjS67TMM3AVaBArSJDesTUabr2xWRqS7t19Ca0H/q7bdi/PitfA++uHH
-8NJNSbZQqXOFc1/V7bXqb55Zwjc8K9Y94m2iFE/wsHfEPWB5a3bToVsdEg992SS7
-uKan/QjbBeVLKxYkykVdZwtpGaQv22sAckmYM2IsNp/7ehqdk1pMKpB6q8N2lMaL
-RQx/xb13CxQ9UsQcyUx2wKSn+O07JWySjFsvEkRkLJsJ3MxysttBxCTUZQ1wSBrt
-QWPjZ5UyfaYZg4ZE3KuhdSdxDBB9xWRAWz0HC5t2FBZRqm9qpk4C9N2g8O0ATUPd
-kuYBjEjwy39+wfKtwaR9Rn4KUykMiYXeWTI9vRLpodFcc+ERaR4rD+KWIjnSuPep
-Ncz0h25854zaY3qHwiXyRvqHXVjFynayDkuIeBTKdk5boAtomt8xKrRFENMxZO9i
-TEA+5p9/lnjJGO0PvvlrwjNp4yC4Gc3X1x8tLeuIcOIwyznLOL7rV9Ei4AijqEpB
-zUqx8Xcd/8E/A/yPm/4D8/aZDg6R+Wgc6JzE0pSHdnqXMIc9niTNBm4rVZhUG/+n
-BSHTzqrzbyAsWu448DjFOkGPMu2k9JsPUFoxHfUfXdjeqciZcSUflGCnAZSojDbc
-gpNdJ5dcsb5hY2SjnGmPVhpJZSed+GyF1/O3b6q1p9QWIrDM6poDXnbLXhLBTMJu
-DwXVkwBjA6QKU8XZPWTKwoy31/wnO1JS9c8pGE7A4m+3ykMZRB95WWAd
-=49Te
+iQUHBAABCgAdFiEEzaAaQgjE90UGEH570atFFoiIiIgFAl9rAv0ACgkQ0atFFoiI
+iIj3XiaeKlkb420gZysWj7m13duYwl8aNzrGjC4bMJXy4rHguusW2gqAmO5PD6H8
+6dDRxzB1HM5J8A4Y3f9pkbMPGep8gTpeAXa/cdRCRXeRB6+LLWv+cbWd7Fi8E348
+/NR2WQvd7RjUMiKZX4ZzbWDE37FHcgmCPBEelQCswg9l8bhmKRgfNUH2/vkT17PZ
+6IOjh0X3zzQqhbnxTeBQ0iQCI+t0AkqUNIPSOMBNMLfieQVppVI1a00dM5inNMQ8
+Gn2WFT2R/9W3lDjwfncicW4n8Tv8IiHSKkIrte4hTrIhjSqkXKXYnYDsVH7Ot1lU
+lyNs9YAUC9soeZ9Bfd+Fd8mRhowJcx4wn50E54LE4UckFSt/cUae3FCLL+qRAHFG
+XUt0rn5XIjsYNQkHN+LDfYx6jOz8Ou1vMsw4CLMg5RS7vwQidrPiXgh2jLnhILR2
+kDxzUBgR1DIhKU3ThzmjJGRtH7A1YRhpvFbawq+GJeLhvYjDT3r8XhwnxvjrsE2x
+ypV0WA3y3CXQSbgxeI3O4C+pOsNQgkpH+Dgd7f2U9fhO7EyvWPXcoERLki/YiVyV
+AEcxN3FKIiRoXkN+H60A7ztsYLe3ae0tBNFKTf9TRoYV+zZ0BO970sMJ84jAnO7+
+A1bCgZFK7pr50Ji8Y2jaRiWm+vo+OK6qEv1aeM572ksSZITDbLR1gcW7xSWWm6tJ
+ZLKnIK3uXb7Kmv5NJHrGwXfqk+4Rkv+LZ7vAGJbRNQI3uNQSS0DDDh7iBtFCoVS9
+O8DOrk9H1Hgdk4slvBfHigcfkBCKKV4Dbtl59Q5Y4jYRsCY78oZkftlz+NEpn6+o
+vSL8eEpuXRBCCjOCfLcBmVbS5yTHhakmNjUWLBBIxrfNntPijrbs+OCwtQ5xmzBl
+nGGB3/wAnFeiC+uhcxj023mrt05FaEYQS28ouyvIaqbsFXiWzFvwJIm34EcPrSqu
+xFoMHP+HjBwSO8a3fAcy9u+cg/5kRMVV9Pnsi9+YjqJMaNpbx/0qLK0xo8t/fHkr
+i6FUG13l0Ma0TNyBsrLVFrhjgbl0wDCKv3kEg1p95vFCgnvON5bBor9pnzcX43UV
+BpQrI9/8/4+4Ugk1f/ejiY8Zup0izraSB3JWCpBP0mG5VNSnaylmfkcnKZlkKrBT
+yu5xUHJ/vmxyl/+1g2xqaomo4OE/Sf/oIdiUcZZEjYregiVYF+VENH8jHZ6ougKF
+OJk2FWWGrz3cCSZxs18cF7kMxaQIeVwoXqV0aD0xjfsqVr2HExhGn4QSvzqAEFCL
+vrqhOUpSdYIvGok/2+xh0dzx1YVSUCXsHfsLUQAnHtPQIsATgz/veQrLoq84oRMU
+pcFa4e9ksqSmSF1dIJBVjVxMFd11vF+PPZ9FYT7kGgv8tA7p1lHuQYgCg/ZJD0/6
+KufNjYpvStq4r+QiSYbosyTOFg1pwwtdwN48o6oIh3thCsu9aoh5Y3JWQtFiFC2l
+9Wcams/SqTCRXZz6FpANv29wciWFXaz+HUnq4dLGs9jtWNeodsKmckN+pZNu5Lef
+E3hH6M3ajMizYlZdF3FYfch0eeF+xluaaKMNplLfVH98GsJCAVZ3NEqxh+5/CYz4
+dnZQ3Sj1gEsypE2l5qn+lpJJwbABpSRI35moAb+j7XALJYxvra/W4kfr
+=sy79
 -----END PGP SIGNATURE-----


Reply via email to