delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2020/09/21/14:35:06

X-Recipient: archive-cygwin AT delorie DOT com
DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BB0F83857C5F
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com;
s=default; t=1600713265;
bh=cE+L80hUHmmtPKj4kwutas5Ii7oX9QXS0YfOAArl1oo=;
h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post:
List-Help:List-Subscribe:From:Reply-To:From;
b=C2PA3mepp3+42RPnE5PiyXNsQ5tj4+O0yX4QltvpZH21eBX2UCCO8/O8Ghx4iajxY
Cl6WrOVU205SR8jtRABs+HIX+mN/+sn4HmRU75347jG+gFDCImUADfEPjKA1odOUkH
nH18bNJCX5ucs8JeyRcGj61bG7QYEPVMVmcnNOb0=
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 411DC3857C5F
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20161025;
h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc;
bh=hiQpnIRuh+K/9SXrkBuAKdwSdqTXyumizTqgsgVMW2g=;
b=daBN2VyNRge++AqLmYCKzXB9U8M+ZSkU9diF5gHIHxbN5EuGmhPNThE7KA7uccyCgB
1weQOMXIfaJUkUDWPMw8scXvQv/LdQKX9a/VAe4TjBe05idO0WQtQ5VieguKV51iDuGM
3sfDCvm0CFBE/j5ndaV8NHQXHvS9yPvayNHQM5u6UfRel5SleNpDDghXKG2mlS4zEgEa
quBjUkRHITua4IS+E18i5and+88QCwIjtf4jnD+CriXkXUCviOeocmz8F8oTP4ZxVG/7
vyYvIwlsepMdrkfirgL1Qr1kvWQvtGlKXWHDhnQKcSCY3CO1aEK8h/Qud+liTA5grI59
afNQ==
X-Gm-Message-State: AOAM530k3xDcnyUcWGwGMY9bewxfhIbHYOVsQ1ijvcYa3hFKiWtrJYZO
VlSDhsRfYNCVkuRtuXTOJmXwTblQN4SagzDCdPBuNHFCfJY=
X-Google-Smtp-Source: ABdhPJyV0V/R309a7AY0v4seDwB0Q7IUdDayeoAswKWx/MvsrUBE3U9x/UwqwgVFiUhy1EA3sz5ckkqWhy/IlH8YQag=
X-Received: by 2002:a1c:7911:: with SMTP id l17mr627127wme.179.1600713259568;
Mon, 21 Sep 2020 11:34:19 -0700 (PDT)
MIME-Version: 1.0
Date: Mon, 21 Sep 2020 11:34:08 -0700
Message-ID: <CADW0L83VDt5my7N1yhEPzZe2=DuxJ6KufmtjqOxOB+3Adwy7Xg@mail.gmail.com>
Subject: cygwin qsort erratic isolated
To: cygwin AT cygwin DOT com
X-Spam-Status: No, score=1.3 required=5.0 tests=BAYES_50, DKIM_SIGNED,
DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, HTML_MESSAGE,
RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS,
TXREP autolearn=ham autolearn_force=no version=3.4.2
X-Spam-Level: *
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
server2.sourceware.org
X-Content-Filtered-By: Mailman/MimeDel 2.1.29
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.29
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
From: Kurt Carlson via Cygwin <cygwin AT cygwin DOT com>
Reply-To: Kurt Carlson <carlsonkurta AT gmail DOT com>
Sender: "Cygwin" <cygwin-bounces AT cygwin DOT com>

--00000000000039abdc05afd719d9
Content-Type: text/plain; charset="UTF-8"

The attached source replicates the erratic qsort problem. This compiles
both cygwin and RHEL. In the following, the first descending dpcsort has
erroneous results:

kc: uname -a
CYGWIN_NT-10.0 kacds 3.1.7(0.340/5/3) 2020-08-22 17:48 x86_64 Cygwin
kc: cc c19.c -o c19
kc: ./c19
# consort qsort struct descending -c 300000
# consort:0:
# dpcsort qsort divide descending -c 300000
# dpcsort:0
#  confirmed deaths dpc      location:
239   663437  29259   4.4102 Peru
240   633339  20348   3.2128 Colombia
195   610957  65816  10.7726 Mexico
145   488513  29234   5.9843 Spain
137   338676  41514  12.2577 United Kingdom
190   378752  21797   5.7550 Iran
000 26068854 863584   3.3127 World
237  3997865 123780   3.0962 Brazil
196  6114406 185744   3.0378 United States
246   414739  11344   2.7352 Chile
039   630595  14389   2.2818 South Africa
245   428226   8971   2.0949 Argentina
085  3853406  67376   1.7485 India
169  1005000  17414   1.7327 Russia
084   317528   4351   1.3703 Bangladesh
186   317486   3956   1.2460 Saudi Arabia
# dpcsort qsort divide ascending -c 300000
# dpcsort:1
# dpcsort qsort divide descending -c 300000
# dpcsort:0
#  confirmed deaths dpc      location:
137   338676  41514  12.2577 United Kingdom
195   610957  65816  10.7726 Mexico
145   488513  29234   5.9843 Spain
190   378752  21797   5.7550 Iran
239   663437  29259   4.4102 Peru
000 26068854 863584   3.3127 World
240   633339  20348   3.2128 Colombia
237  3997865 123780   3.0962 Brazil
196  6114406 185744   3.0378 United States
246   414739  11344   2.7352 Chile
039   630595  14389   2.2818 South Africa
245   428226   8971   2.0949 Argentina
085  3853406  67376   1.7485 India
169  1005000  17414   1.7327 Russia
084   317528   4351   1.3703 Bangladesh
186   317486   3956   1.2460 Saudi Arabia

In researching this I looked at source for eight qsort implementations:

1a. gnu (RHEL 7): Always works.
        ./c19

1b. RHEL/gnu compiled under cygwin: Always works.
        Not proviced in c19.c
    Had to incorporate both qsort.c and msort.c glibc stdlib.

2a. cygwin unmodified: fails (above example)
        ./c19
    Both insertion sorts 'goto pop' vs. return.

2b. cygwin modified: mostly works
        ./c19 -q qcygw -r
    Commented out secondary insertion sort (per Dennis de Champeaux).

2c. cygwin compiled under RHEL 7: fails (as under cygwin)
        ./c19 -q qcygw

2d. cygwin modified under RHEL 7 (like 2b): mostly works
        ./c19 -q qcygw -r

3.  netbsd: mostly works
        Not provided in c19.c
    The only insertion sort returns.

4.  openbsd: mosly works
        Not provided in c19.c
    Both insertion sorts return.

5.  freebsd: did not attempt
    Both insertion sorts return.

6.  MacOS: did not attempt
    Both insertion sorts return.

7.  Android: did not attempt (older version of openbsd)
    Both insertion sorts return.

8.  Dennis de Chameaux 'bentley': mostly works
        Not provided with c19
    Besides commenting out secondary insertion sort, this code
    has return vs. goto and he made corrections to reduce recursion.

Types 2-8 diverged (greatly) from the same base. The cygwin version is a
bit puzzling using goto vs. return when there is a general concern for
stack usage with the recursive calls. All versions of qsort are cryptic
(stated kindly). I believe gnu did the right thing in re-writing, but it
still is not a pleasant read.

The failures are triggered with values from a float divide by zero, either
in the compare routine or imbedded in the structure being sorted. While
divide by zero behaviour is "undefined" that really should not extend to
qsort erraticism. The "mostly works" gets the numeric values in the correct
order, but the divide by zero values are mis-placed.

For a better representation use either cygwin or RHEL:
        ./c19 -c 0 -z -q qcygw -r

If you add the --verbose option, values are displayed in the compare
routine. The divide by zero float is always 0xffc00000. Any subtract
operation with that value always results (int) as 0x80000000,
pathologically negative.

All four bsd variants I attempted, both under cygwin and rhel, do not fully
cope with the 0xffc00000, cygwin most poorly. I contacted Dennis de
Champeaux, this problem is unique from what he previously addressed
although his fix improves cygwin's qsort up to the other bsd variants. The
obvious circumvention is to avoid divide by zero. That all bsd variants
have similar issues, and the crypticness of all the variants, it is less
than optimal to attempt any kind of fix. E.g., call it not "broken" but a
"feature" of undefined divide by zero even though it is well removed from
the operation and a non-issue for RHEL. Be prepared to advise anybody who
experiences erratic qsort behaviour of this "feature".

Please advise what, if any, assistance I can provide at this point.
Regards, Kurt

-- 
Kurt Carlson -- 509-730-4814 -- carlsonkurta AT gmail DOT com

--00000000000039abdc05afd719d9
Content-Type: application/octet-stream; name="c19.c"
Content-Disposition: attachment; filename="c19.c"
Content-Transfer-Encoding: base64
Content-ID: <f_kfcv70n40>
X-Attachment-Id: f_kfcv70n40

I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5o
PgojaW5jbHVkZSA8Z2V0b3B0Lmg+CiNpZmRlZiBfX0NZR1dJTl9fCiNkZWZpbmUJT1NfV0lOIDEK
I2VuZGlmCgp2b2lkCU9wdGlvbnMoKTsKdm9pZAl4c29ydCgpOwppbnQJY29uc29ydCgpOwppbnQJ
ZHBjc29ydCgpOwppbnQJYWJlbmQoKTsKdm9pZAlTaG93KCk7CnZvaWQJcWN5Z3coKTsKCiNkZWZp
bmUJTF9OQQkzMAojZGVmaW5lCUNORgkzMDAwMDAJCQkvKiBkZWZhdWx0IG1pbmltdW0gY29uZmly
bWVkCSovCnR5cGVkZWYgaW50CSgqYzE5U28pICgpOwojZGVmaW5lCVNfcXNvcnQJMAkJCS8qIGFy
Y2hpdGVjdHVyZSBxc29ydAkJKi8KI2RlZmluZQlTX3FjeWd3IDEJCQkvKiBjeWd3aW4gcXNvcnQs
IC1yIG1vZGlmaWVzCSovCgpjaGFyCSp4cXMgPQkwOwppbnQJc19kID0JMTsKaW50CW5fTmEgPQkw
OwppbnQJU19xID0JMDsKaW50CW8gPQkxOwppbnQJY25mID0JQ05GOwkJCS8qIG1pbmltdW0gY29u
ZmlybWVkIGNhc2VzCSovCmludAl6cm8gPQkwOwkJCS8qIGlmIHNldCBkZXZpZGUgYnkgemVybwkq
LwppbnQJcmlzID0JMDsJCQkvKiBpZiBzZXQgcmVtb3ZlIDJuZCBpbnMuIHNvcnQJKi8KaW50CXZy
YiA9CTA7CQkJLyogc2hvdyB2YWx1ZXMgaW4gcXNvcnQgY29tcGFyZQkqLwoKc3RydWN0CVNPUlQK
ewlpbnQJdiwgbywgZDsKCWNoYXIJKnR5cGU7Cn07CnN0cnVjdAlTT1JUCXFhLCAqcXEgPSAmcWE7
CnN0cnVjdAlTVFlQCnsKCWludAlxOwoJY2hhcgkqd2hhdDsKfTsKc3RydWN0CVNUWVAJU3RbXSA9
CnsKICB7CVNfcXNvcnQsCSJxc29ydCIJfSwJLyogY3lnd2luIHFzb3J0CQkqLwogIHsJU19xY3ln
dywJInFjeWd3Igl9LAkvKiBjb21waWxlZCBjeWd3aW4JKi8KICB7CTAsCQkwCX0KfTsKCnN0cnVj
dAlOQU1FCnsKaW50CQlpeDsKZmxvYXQJCWRwYzsKaW50CQljbzsKaW50CQlkZTsKY2hhcgkJbmFb
TF9OQSsxXTsKfTsKc3RydWN0CU5BTUUJTmFtZVtdID0KewogIHsgMCwgMCwgMjYwNjg4NTQsICAg
ODYzNTg0LCAiV29ybGQiIH0sCiAgeyAwLCAwLCAgICAgMjcyOSwgICAgICAxMDksICJBbmdvbGEi
IH0sCiAgeyAwLCAwLCAgICAxOTQ2MCwgICAgICA0MTQsICJDYW1lcm9vbiIgfSwKICB7IDAsIDAs
ICAgICA0NzEyLCAgICAgICA2MiwgIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIgfSwKICB7IDAs
IDAsICAgICAxMDE3LCAgICAgICA3NywgIkNoYWQiIH0sCiAgeyAwLCAwLCAgICAxMDExMywgICAg
ICAyNTgsICJEZW1vY3JhdGljIFJlcHVibGljIG9mIENvbmdvIiB9LAogIHsgMCwgMCwgICAgIDQ5
NjUsICAgICAgIDgzLCAiRXF1YXRvcmlhbCBHdWluZWEiIH0sCiAgeyAwLCAwLCAgICAgODUzOCwg
ICAgICAgNTMsICJHYWJvbiIgfSwKICB7IDAsIDAsICAgICA0NjI4LCAgICAgIDEwMiwgIlJlcHVi
bGljIG9mIENvbmdvIiB9LAogIHsgMCwgMCwgICAgICA4OTYsICAgICAgIDE1LCAiU2FvIFRvbWUg
YW5kIFByaW5jaXBlIiB9LAogIHsgMCwgMCwgICAgICA0NDgsICAgICAgICAxLCAiQnVydW5kaSIg
fSwKICB7IDAsIDAsICAgICAgNDI3LCAgICAgICAgNywgIkNvbW9yb3MiIH0sCiAgeyAwLCAwLCAg
ICAgNTM4NywgICAgICAgNjAsICJEamlib3V0aSIgfSwKICB7IDAsIDAsICAgICAgMzE5LCAgICAg
ICAgMCwgIkVyaXRyZWEiIH0sCiAgeyAwLCAwLCAgICA1NDQwOSwgICAgICA4NDYsICJFdGhpb3Bp
YSIgfSwKICB7IDAsIDAsICAgIDM0NDkzLCAgICAgIDU3NywgIktlbnlhIiB9LAogIHsgMCwgMCwg
ICAgMTUwMjMsICAgICAgMTk2LCAiTWFkYWdhc2NhciIgfSwKICB7IDAsIDAsICAgICA1NTc5LCAg
ICAgIDE3NSwgIk1hbGF3aSIgfSwKICB7IDAsIDAsICAgICAgMzU2LCAgICAgICAxMCwgIk1hdXJp
dGl1cyIgfSwKICB7IDAsIDAsICAgICA0MTE3LCAgICAgICAyNSwgIk1vemFtYmlxdWUiIH0sCiAg
eyAwLCAwLCAgICAgNDIxOCwgICAgICAgMTcsICJSd2FuZGEiIH0sCiAgeyAwLCAwLCAgICAgIDEz
NiwgICAgICAgIDAsICJTZXljaGVsbGVzIiB9LAogIHsgMCwgMCwgICAgIDMzMTAsICAgICAgIDk4
LCAiU29tYWxpYSIgfSwKICB7IDAsIDAsICAgICAyNTMyLCAgICAgICA0NywgIlNvdXRoIFN1ZGFu
IiB9LAogIHsgMCwgMCwgICAgICA1MDksICAgICAgIDIxLCAiVGFuemFuaWEiIH0sCiAgeyAwLCAw
LCAgICAgMzExMiwgICAgICAgMzIsICJVZ2FuZGEiIH0sCiAgeyAwLCAwLCAgICAxMjQxNSwgICAg
ICAyOTIsICJaYW1iaWEiIH0sCiAgeyAwLCAwLCAgICAgNjYzOCwgICAgICAyMDYsICJaaW1iYWJ3
ZSIgfSwKICB7IDAsIDAsICAgIDQ1MTU4LCAgICAgMTUyNSwgIkFsZ2VyaWEiIH0sCiAgeyAwLCAw
LCAgICA5OTI4MCwgICAgIDU0NjEsICJFZ3lwdCIgfSwKICB7IDAsIDAsICAgIDE1MTU2LCAgICAg
IDI1MCwgIkxpYnlhIiB9LAogIHsgMCwgMCwgICAgNjU0NTMsICAgICAxMjE2LCAiTW9yb2NjbyIg
fSwKICB7IDAsIDAsICAgICAgNzY2LCAgICAgICAgMSwgIlNhaGFyYSIgfSwKICB7IDAsIDAsICAg
IDEzMTg5LCAgICAgIDgyMywgIlN1ZGFuIiB9LAogIHsgMCwgMCwgICAgIDQxOTYsICAgICAgIDgx
LCAiVHVuaXNpYSIgfSwKICB7IDAsIDAsICAgICAxNzI0LCAgICAgICAgNiwgIkJvdHN3YW5hIiB9
LAogIHsgMCwgMCwgICAgIDQ2NjgsICAgICAgIDk0LCAiRXN3YXRpbmkiIH0sCiAgeyAwLCAwLCAg
ICAgMTA4NSwgICAgICAgMzEsICJMZXNvdGhvIiB9LAogIHsgMCwgMCwgICAgIDc4NDQsICAgICAg
IDgyLCAiTmFtaWJpYSIgfSwKICB7IDAsIDAsICAgNjMwNTk1LCAgICAxNDM4OSwgIlNvdXRoIEFm
cmljYSIgfSwKICB7IDAsIDAsICAgICAyMTk0LCAgICAgICA0MCwgIkJlbmluIiB9LAogIHsgMCwg
MCwgICAgIDEzNzgsICAgICAgIDU1LCAiQnVya2luYSBGYXNvIiB9LAogIHsgMCwgMCwgICAgIDQw
NDgsICAgICAgIDQxLCAiQ2FibyBWZXJkZSIgfSwKICB7IDAsIDAsICAgIDE4MTYxLCAgICAgIDEx
NywgIkNvdGUgZCdJdm9pcmUiIH0sCiAgeyAwLCAwLCAgICAgMzA2NywgICAgICAgOTcsICJHYW1i
aWEiIH0sCiAgeyAwLCAwLCAgICA0NDY1OCwgICAgICAyNzYsICJHaGFuYSIgfSwKICB7IDAsIDAs
ICAgICA5NDc5LCAgICAgICA1OSwgIkd1aW5lYSIgfSwKICB7IDAsIDAsICAgICAyMjA1LCAgICAg
ICAzNCwgIkd1aW5lYS1CaXNzYXUiIH0sCiAgeyAwLCAwLCAgICAgMTMwNSwgICAgICAgODIsICJM
aWJlcmlhIiB9LAogIHsgMCwgMCwgICAgIDI4MDIsICAgICAgMTI2LCAiTWFsaSIgfSwKICB7IDAs
IDAsICAgICA3MDg5LCAgICAgIDE2MCwgIk1hdXJpdGFuaWEiIH0sCiAgeyAwLCAwLCAgICAgMTE3
NywgICAgICAgNjksICJOaWdlciIgfSwKICB7IDAsIDAsICAgIDU0NDYzLCAgICAgMTAyNywgIk5p
Z2VyaWEiIH0sCiAgeyAwLCAwLCAgICAxMzc0MywgICAgICAyODcsICJTZW5lZ2FsIiB9LAogIHsg
MCwgMCwgICAgIDIwMjksICAgICAgIDcxLCAiU2llcnJhIExlb25lIiB9LAogIHsgMCwgMCwgICAg
ICAgIDAsICAgICAgICAwLCAiU3QuSGVsZW5hIiB9LAogIHsgMCwgMCwgICAgIDE0MzQsICAgICAg
IDMwLCAiVG9nbyIgfSwKICB7IDAsIDAsICAgICAgMjc0LCAgICAgICAgMCwgIkNhbWJvZGlhIiB9
LAogIHsgMCwgMCwgICAgNjk1OTksICAgICAxMzE5LCAiSmFwYW4iIH0sCiAgeyAwLCAwLCAgICAg
ICAyMiwgICAgICAgIDAsICJMYW9zIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAi
Tm9ydGggS29yZWEiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJPdGhlcnMiIH0s
CiAgeyAwLCAwLCAgICAyMDY0NCwgICAgICAzMjksICJTb3V0aCBLb3JlYSIgfSwKICB7IDAsIDAs
ICAgICAzNDI3LCAgICAgICA1OCwgIlRoYWlsYW5kIiB9LAogIHsgMCwgMCwgICAgIDEwNDYsICAg
ICAgIDM1LCAiVmlldG5hbSIgfSwKICB7IDAsIDAsICAgICAgMjI3LCAgICAgICAgMCwgIkJodXRh
biIgfSwKICB7IDAsIDAsICAgIDg5OTUzLCAgICAgNDcyNywgIkNoaW5hIiB9LAogIHsgMCwgMCwg
ICAgICAgIDAsICAgICAgICAwLCAiSG9uZyBLb25nIiB9LAogIHsgMCwgMCwgICAgICA0ODksICAg
ICAgICA3LCAiVGFpd2FuIiB9LAogIHsgMCwgMCwgICAgICAzMDYsICAgICAgICAwLCAiTW9uZ29s
aWEiIH0sCiAgeyAwLCAwLCAgICA0MTY0OSwgICAgICAyNTEsICJOZXBhbCIgfSwKICB7IDAsIDAs
ICAgICAgICAwLCAgICAgICAgMCwgIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnIiIH0sCiAgeyAw
LCAwLCAgICAgICAgMCwgICAgICAgIDAsICJDaHJpc3RtYXMgSXMiIH0sCiAgeyAwLCAwLCAgICAg
ICAgMCwgICAgICAgIDAsICJDb2NvcyBJcyIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAg
MCwgIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyIgfSwKICB7IDAsIDAsICAgICAgICAwLCAg
ICAgICAgMCwgIkhlYXJkIElzIiB9LAogIHsgMCwgMCwgICAgIDgxNDAsICAgICAgIDI5LCAiTWFs
ZGl2ZXMiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJNYXlvdHRlIiB9LAogIHsg
MCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiUmV1bmlvbiIgfSwKICB7IDAsIDAsICAgICAzMTAx
LCAgICAgICAxMiwgIlNyaSBMYW5rYSIgfSwKICB7IDAsIDAsICAgICAgIDI3LCAgICAgICAgMCwg
IlRpbW9yLUxlc3RlIiB9LAogIHsgMCwgMCwgICAgICAxNDQsICAgICAgICAzLCAiQnJ1bmVpIiB9
LAogIHsgMCwgMCwgICAxODA2NDYsICAgICA3NjE2LCAiSW5kb25lc2lhIiB9LAogIHsgMCwgMCwg
ICAyMjY0NDAsICAgICAzNjIzLCAiUGhpbGlwcGluZXMiIH0sCiAgeyAwLCAwLCAgIDMxNzUyOCwg
ICAgIDQzNTEsICJCYW5nbGFkZXNoIiB9LAogIHsgMCwgMCwgIDM4NTM0MDYsICAgIDY3Mzc2LCAi
SW5kaWEiIH0sCiAgeyAwLCAwLCAgICAgOTM2MCwgICAgICAxMjgsICJNYWxheXNpYSIgfSwKICB7
IDAsIDAsICAgICAxMDU4LCAgICAgICAgNiwgIk15YW5tYXIiIH0sCiAgeyAwLCAwLCAgIDI5NzAx
NCwgICAgIDYzMjgsICJQYWtpc3RhbiIgfSwKICB7IDAsIDAsICAgIDU2ODYwLCAgICAgICAyNywg
IlNpbmdhcG9yZSIgfSwKICB7IDAsIDAsICAgIDQ0MDc1LCAgICAgIDg4NCwgIkFybWVuaWEiIH0s
CiAgeyAwLCAwLCAgIDEzMjM1NCwgICAgIDE4ODksICJLYXpha2hzdGFuIiB9LAogIHsgMCwgMCwg
ICAgNDQxMzUsICAgICAxMDU5LCAiS3lyZ3l6c3RhbiIgfSwKICB7IDAsIDAsICAgICA4NjU0LCAg
ICAgICA2OSwgIlRhamlraXN0YW4iIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJU
dXJrbWVuaXN0YW4iIH0sCiAgeyAwLCAwLCAgICA0MjU0MCwgICAgICAzMjksICJVemJla2lzdGFu
IiB9LAogIHsgMCwgMCwgICAgICAgOTQsICAgICAgICAzLCAiQW50aWd1YSBhbmQgQmFyYnVkYSIg
fSwKICB7IDAsIDAsICAgICAyMzM3LCAgICAgICA0NywgIkJhaGFtYXMiIH0sCiAgeyAwLCAwLCAg
ICAgIDE3NiwgICAgICAgIDcsICJCYXJiYWRvcyIgfSwKICB7IDAsIDAsICAgICA0MTI2LCAgICAg
ICA5OCwgIkN1YmEiIH0sCiAgeyAwLCAwLCAgICAgICAyMCwgICAgICAgIDAsICJEb21pbmljYSIg
fSwKICB7IDAsIDAsICAgIDk1NjI3LCAgICAgMTc2NSwgIkRvbWluaWNhbiBSZXB1YmxpYyIgfSwK
ICB7IDAsIDAsICAgICAgIDI0LCAgICAgICAgMCwgIkdyZW5hZGEiIH0sCiAgeyAwLCAwLCAgICAg
ODI1OCwgICAgICAyMDYsICJIYWl0aSIgfSwKICB7IDAsIDAsICAgICAyODIyLCAgICAgICAyNywg
IkphbWFpY2EiIH0sCiAgeyAwLCAwLCAgICAgICAxNywgICAgICAgIDAsICJTYWludCBLaXR0cyBh
bmQgTmV2aXMiIH0sCiAgeyAwLCAwLCAgICAgICAyNiwgICAgICAgIDAsICJTYWludCBMdWNpYSIg
fSwKICB7IDAsIDAsICAgICAgIDYxLCAgICAgICAgMCwgIlNhaW50IFZpbmNlbnQgYW5kIEdyZW5h
ZGluZXMiIH0sCiAgeyAwLCAwLCAgICAgMTkyMCwgICAgICAgMjgsICJUcmluaWRhZCBhbmQgVG9i
YWdvIiB9LAogIHsgMCwgMCwgICAgICAgIDMsICAgICAgICAwLCAiQW5ndWlsbGEiIH0sCiAgeyAw
LCAwLCAgICAgIDIwNSwgICAgICAgIDEsICJDYXltYW4gSXNsYW5kcyIgfSwKICB7IDAsIDAsICAg
ICAgIDEzLCAgICAgICAgMSwgIk1vbnRzZXJyYXQiIH0sCiAgeyAwLCAwLCAgICAgIDU1NSwgICAg
ICAgIDQsICJUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHMiIH0sCiAgeyAwLCAwLCAgICAgICA0Nywg
ICAgICAgIDEsICJCUiBWaXJnaW4gSXMiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAs
ICJHdWFkZWxvdXBlIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiTWFydGluaXF1
ZSIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIlNhaW50IEJhcnRoZWxlbXkiIH0s
CiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJTYWludCBNYXJ0aW4iIH0sCiAgeyAwLCAw
LCAgICAgMjIxMSwgICAgICAgMTIsICJBcnViYSIgfSwKICB7IDAsIDAsICAgICAgIDE4LCAgICAg
ICAgMCwgIkJvbmFpcmUiIH0sCiAgeyAwLCAwLCAgICAgICA2OCwgICAgICAgIDEsICJDdXJhY2Fv
IiB9LAogIHsgMCwgMCwgICAgICA0ODIsICAgICAgIDE5LCAiU2ludCBNYWFydGVuIiB9LAogIHsg
MCwgMCwgICAgMTcxOTUsICAgICAgNjI2LCAiRGVubWFyayIgfSwKICB7IDAsIDAsICAgICA4MTYx
LCAgICAgIDMzNSwgIkZpbmxhbmQiIH0sCiAgeyAwLCAwLCAgICAgICAxNCwgICAgICAgIDAsICJH
cmVlbmxhbmQiIH0sCiAgeyAwLCAwLCAgICAgMjEyMSwgICAgICAgMTAsICJJY2VsYW5kIiB9LAog
IHsgMCwgMCwgICAgMTA4NzEsICAgICAgMjY0LCAiTm9yd2F5IiB9LAogIHsgMCwgMCwgICAgODQ3
MjksICAgICA1ODMyLCAiU3dlZGVuIiB9LAogIHsgMCwgMCwgICAgMjgxODMsICAgICAgNzM0LCAi
QXVzdHJpYSIgfSwKICB7IDAsIDAsICAgIDg2NDUwLCAgICAgOTg5OSwgIkJlbGdpdW0iIH0sCiAg
eyAwLCAwLCAgIDI5MzAyNCwgICAgMzA2ODYsICJGcmFuY2UiIH0sCiAgeyAwLCAwLCAgIDI0NjEx
NiwgICAgIDkzMTksICJHZXJtYW55IiB9LAogIHsgMCwgMCwgICAgMjkxMTQsICAgICAxNzc3LCAi
SXJlbGFuZCIgfSwKICB7IDAsIDAsICAgICAgMTA4LCAgICAgICAgMSwgIkxpZWNodGVuc3RlaW4i
IH0sCiAgeyAwLCAwLCAgICAgNjc0NSwgICAgICAxMjQsICJMdXhlbWJvdXJnIiB9LAogIHsgMCwg
MCwgICAgNzE5NzEsICAgICA2MjI2LCAiTmV0aGVybGFuZHMiIH0sCiAgeyAwLCAwLCAgICA0MjY1
NSwgICAgIDE3MjYsICJTd2l0emVybGFuZCIgfSwKICB7IDAsIDAsICAgMzM4Njc2LCAgICA0MTUx
NCwgIlVuaXRlZCBLaW5nZG9tIiB9LAogIHsgMCwgMCwgICAgIDExOTksICAgICAgIDUzLCAiQW5k
b3JyYSIgfSwKICB7IDAsIDAsICAgICAgMjk1LCAgICAgICAgMCwgIkdpYnJhbHRhciIgfSwKICB7
IDAsIDAsICAgMjcxNTE1LCAgICAzNTQ5NywgIkl0YWx5IiB9LAogIHsgMCwgMCwgICAgIDE5MzEs
ICAgICAgIDEzLCAiTWFsdGEiIH0sCiAgeyAwLCAwLCAgICAgIDE0MiwgICAgICAgIDEsICJNb25h
Y28iIH0sCiAgeyAwLCAwLCAgICA1ODYzMywgICAgIDE4MjcsICJQb3J0dWdhbCIgfSwKICB7IDAs
IDAsICAgICAgNzM1LCAgICAgICA0MiwgIlNhbiBNYXJpbm8iIH0sCiAgeyAwLCAwLCAgIDQ4ODUx
MywgICAgMjkyMzQsICJTcGFpbiIgfSwKICB7IDAsIDAsICAgICAgIDEyLCAgICAgICAgMCwgIlZh
dGljYW4gQ2l0eSIgfSwKICB7IDAsIDAsICAgICA5NzI4LCAgICAgIDI5NiwgIkFsYmFuaWEiIH0s
CiAgeyAwLCAwLCAgICAyMDUxNywgICAgICA2MjcsICJCb3NuaWEgYW5kIEhlcnplZ292aW5hIiB9
LAogIHsgMCwgMCwgICAgMTY0NTQsICAgICAgNjQyLCAiQnVsZ2FyaWEiIH0sCiAgeyAwLCAwLCAg
ICAxMDcyNSwgICAgICAxOTEsICJDcm9hdGlhIiB9LAogIHsgMCwgMCwgICAgMTA3NTcsICAgICAg
MjczLCAiR3JlZWNlIiB9LAogIHsgMCwgMCwgICAgMTM1NTgsICAgICAgNTIzLCAiS29zb3ZvIiB9
LAogIHsgMCwgMCwgICAgIDUwMTksICAgICAgMTA0LCAiTW9udGVuZWdybyIgfSwKICB7IDAsIDAs
ICAgIDE0NDU1LCAgICAgIDYwNCwgIk5vcnRoIE1hY2Vkb25pYSIgfSwKICB7IDAsIDAsICAgIDg5
ODkxLCAgICAgMzcyMSwgIlJvbWFuaWEiIH0sCiAgeyAwLCAwLCAgICAzMTU4MSwgICAgICA3MTYs
ICJTZXJiaWEiIH0sCiAgeyAwLCAwLCAgICAgMjk4OCwgICAgICAxMjgsICJTbG92ZW5pYSIgfSwK
ICB7IDAsIDAsICAgIDI1NzczLCAgICAgIDQyNSwgIkN6ZWNoIFJlcHVibGljIiB9LAogIHsgMCwg
MCwgICAgIDY2MjIsICAgICAgNjE5LCAiSHVuZ2FyeSIgfSwKICB7IDAsIDAsICAgIDY4NTE3LCAg
ICAgMjA3OCwgIlBvbGFuZCIgfSwKICB7IDAsIDAsICAgICA0MDQyLCAgICAgICAzMywgIlNsb3Zh
a2lhIiB9LAogIHsgMCwgMCwgICAgMzY3MzIsICAgICAgNTM4LCAiQXplcmJhaWphbiIgfSwKICB7
IDAsIDAsICAgIDcyMTQxLCAgICAgIDY5MSwgIkJlbGFydXMiIH0sCiAgeyAwLCAwLCAgICAgMjQx
NSwgICAgICAgNjQsICJFc3RvbmlhIiB9LAogIHsgMCwgMCwgICAgIDE1NDgsICAgICAgIDE5LCAi
R2VvcmdpYSBjb3VudHJ5IiB9LAogIHsgMCwgMCwgICAgIDE0MDYsICAgICAgIDM0LCAiTGF0dmlh
IiB9LAogIHsgMCwgMCwgICAgIDI5NTgsICAgICAgIDg2LCAiTGl0aHVhbmlhIiB9LAogIHsgMCwg
MCwgICAgMzc3NDAsICAgICAxMDI0LCAiTW9sZG92YSIgfSwKICB7IDAsIDAsICAxMDA1MDAwLCAg
ICAxNzQxNCwgIlJ1c3NpYSIgfSwKICB7IDAsIDAsICAgMTI1Nzg5LCAgICAgMjY1NiwgIlVrcmFp
bmUiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJBbGFuZCBJcyIgfSwKICB7IDAs
IDAsICAgICAgNDExLCAgICAgICAgMCwgIkZhcm9lIElzbGFuZHMiIH0sCiAgeyAwLCAwLCAgICAg
IDI1MiwgICAgICAgMTMsICJHdWVybnNleSIgfSwKICB7IDAsIDAsICAgICAgMzM2LCAgICAgICAy
NCwgIklzbGUgb2YgTWFuIiB9LAogIHsgMCwgMCwgICAgICAzODEsICAgICAgIDMyLCAiSmVyc2V5
IiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiU3ZhbGJhcmQgYW5kIEphbiBNYXll
biIgfSwKICB7IDAsIDAsICAgICAxNDk1LCAgICAgICAyMSwgIkN5cHJ1cyIgfSwKICB7IDAsIDAs
ICAgMTIyNTM5LCAgICAgIDk2OSwgIklzcmFlbCIgfSwKICB7IDAsIDAsICAgIDE4Mzc1LCAgICAg
IDE3NywgIkxlYmFub24iIH0sCiAgeyAwLCAwLCAgICAzMTMzMywgICAgICAxODQsICJQYWxlc3Rp
bmUiIH0sCiAgeyAwLCAwLCAgICAgMjg5OCwgICAgICAxMjAsICJTeXJpYSIgfSwKICB7IDAsIDAs
ICAgMjczMzAxLCAgICAgNjQ2MiwgIlR1cmtleSIgfSwKICB7IDAsIDAsICAgIDUyNDQwLCAgICAg
IDE5MCwgIkJhaHJhaW4iIH0sCiAgeyAwLCAwLCAgICA4NTkyOCwgICAgICA2ODksICJPbWFuIiB9
LAogIHsgMCwgMCwgICAxMTkyMDYsICAgICAgMTk5LCAiUWF0YXIiIH0sCiAgeyAwLCAwLCAgIDMx
NzQ4NiwgICAgIDM5NTYsICJTYXVkaSBBcmFiaWEiIH0sCiAgeyAwLCAwLCAgICA3MTU0MCwgICAg
ICAzODcsICJVbml0ZWQgQXJhYiBFbWlyYXRlcyIgfSwKICB7IDAsIDAsICAgICAxOTc2LCAgICAg
IDU3MSwgIlllbWVuIiB9LAogIHsgMCwgMCwgICAgMzgyNDMsICAgICAxNDA5LCAiQWZnaGFuaXN0
YW4iIH0sCiAgeyAwLCAwLCAgIDM3ODc1MiwgICAgMjE3OTcsICJJcmFuIiB9LAogIHsgMCwgMCwg
ICAyNDIyODQsICAgICA3MjAxLCAiSXJhcSIgfSwKICB7IDAsIDAsICAgICAyMTYxLCAgICAgICAx
NSwgIkpvcmRhbiIgfSwKICB7IDAsIDAsICAgIDg2NDc4LCAgICAgIDUzNSwgIkt1d2FpdCIgfSwK
ICB7IDAsIDAsICAgMTI5OTIzLCAgICAgOTEzNSwgIkNhbmFkYSIgfSwKICB7IDAsIDAsICAgNjEw
OTU3LCAgICA2NTgxNiwgIk1leGljbyIgfSwKICB7IDAsIDAsICA2MTE0NDA2LCAgIDE4NTc0NCwg
IlVuaXRlZCBTdGF0ZXMiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJTYWludCBQ
aWVycmUgYW5kIE1pcXVlbG9uIiB9LAogIHsgMCwgMCwgICAgMzQwMDMsICAgICAgNDQzLCAiUHVl
cnRvIFJpY28iIH0sCiAgeyAwLCAwLCAgICAgMTE0NCwgICAgICAgMTUsICJVUyBWaXJnaW4gSXNs
YW5kcyIgfSwKICB7IDAsIDAsICAgICAxNDQ3LCAgICAgICAxMywgIkd1YW0iIH0sCiAgeyAwLCAw
LCAgICAyNTkyMywgICAgICA2NjMsICJBdXN0cmFsaWEiIH0sCiAgeyAwLCAwLCAgICAgICAyOSwg
ICAgICAgIDIsICJGaWppIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiS2lyaWJh
dGkiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJNYXJzaGFsbCBJcyIgfSwKICB7
IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIk1pY3JvbmVzaWEiIH0sCiAgeyAwLCAwLCAgICAg
ICAgMCwgICAgICAgIDAsICJOYXVydSIgfSwKICB7IDAsIDAsICAgICAxNDA4LCAgICAgICAyMiwg
Ik5ldyBaZWFsYW5kIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiUGFsYXUiIH0s
CiAgeyAwLCAwLCAgICAgIDQ3MSwgICAgICAgIDUsICJQYXB1YSBOZXcgR3VpbmVhIiB9LAogIHsg
MCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiU2Ftb2EiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwg
ICAgICAgIDAsICJTb2xvbW9uIElzIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAi
VG9uZ2EiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJUdXZhbHUiIH0sCiAgeyAw
LCAwLCAgICAgICAgMCwgICAgICAgIDAsICJWYW51YXR1IiB9LAogIHsgMCwgMCwgICAgICAxNzIs
ICAgICAgICA5LCAiQmVybXVkYSIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIkJv
dXZldCBJcyIgfSwKICB7IDAsIDAsICAgICAgIDEzLCAgICAgICAgMCwgIkZhbGtsYW5kIElzbGFu
ZHMiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJTb3V0aCBHZW9yZ2lhIGFuZCBT
YW5kd2ljaCBJcyIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIkNvb2sgSXMiIH0s
CiAgeyAwLCAwLCAgICAgIDU5NiwgICAgICAgIDAsICJGcmVuY2ggUG9seW5lc2lhIiB9LAogIHsg
MCwgMCwgICAgICAgMjMsICAgICAgICAwLCAiTmV3IENhbGVkb25pYSIgfSwKICB7IDAsIDAsICAg
ICAgICAwLCAgICAgICAgMCwgIk5pdWUiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAs
ICJOb3Jmb2xrIElzIiB9LAogIHsgMCwgMCwgICAgICAgNTcsICAgICAgICAyLCAiTm9ydGhlcm4g
TWFyaWFuYSBJcyIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIlBpdGNhaXJuIiB9
LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiVG9rZWxhdSIgfSwKICB7IDAsIDAsICAg
ICAgICAwLCAgICAgICAgMCwgIldhbGxpcyBhbmQgRnV0dW5hIiB9LAogIHsgMCwgMCwgICAgICAg
IDAsICAgICAgICAwLCAiQW50YXJjdGljYSIgfSwKICB7IDAsIDAsICAgICAxMTAxLCAgICAgICAx
MywgIkJlbGl6ZSIgfSwKICB7IDAsIDAsICAgIDQzMzA1LCAgICAgIDQ1MywgIkNvc3RhIFJpY2Ei
IH0sCiAgeyAwLCAwLCAgICAyNTkwNCwgICAgICA3MzksICJFbCBTYWx2YWRvciIgfSwKICB7IDAs
IDAsICAgIDc1NjY0LCAgICAgMjc5MCwgIkd1YXRlbWFsYSIgfSwKICB7IDAsIDAsICAgIDYyNTI2
LCAgICAgMTkyNCwgIkhvbmR1cmFzIiB9LAogIHsgMCwgMCwgICAgIDQ0OTQsICAgICAgMTM3LCAi
TmljYXJhZ3VhIiB9LAogIHsgMCwgMCwgICAgOTQwODQsICAgICAyMDMwLCAiUGFuYW1hIiB9LAog
IHsgMCwgMCwgICAxMTc5MjgsICAgICA1MjAzLCAiQm9saXZpYSIgfSwKICB7IDAsIDAsICAzOTk3
ODY1LCAgIDEyMzc4MCwgIkJyYXppbCIgfSwKICB7IDAsIDAsICAgMTE1NDU3LCAgICAgNjYxOSwg
IkVjdWFkb3IiIH0sCiAgeyAwLCAwLCAgIDY2MzQzNywgICAgMjkyNTksICJQZXJ1IiB9LAogIHsg
MCwgMCwgICA2MzMzMzksICAgIDIwMzQ4LCAiQ29sb21iaWEiIH0sCiAgeyAwLCAwLCAgICAgICAg
MCwgICAgICAgIDAsICJGcmVuY2ggR3VpYW5hIiB9LAogIHsgMCwgMCwgICAgIDEzODIsICAgICAg
IDQxLCAiR3V5YW5hIiB9LAogIHsgMCwgMCwgICAgIDQxNDksICAgICAgIDcyLCAiU3VyaW5hbWUi
IH0sCiAgeyAwLCAwLCAgICA0ODg4MywgICAgICAzOTgsICJWZW5lenVlbGEiIH0sCiAgeyAwLCAw
LCAgIDQyODIyNiwgICAgIDg5NzEsICJBcmdlbnRpbmEiIH0sCiAgeyAwLCAwLCAgIDQxNDczOSwg
ICAgMTEzNDQsICJDaGlsZSIgfSwKICB7IDAsIDAsICAgIDE5MTM4LCAgICAgIDM1OCwgIlBhcmFn
dWF5IiB9LAogIHsgMCwgMCwgICAgIDE2MjYsICAgICAgIDQ0LCAiVXJ1Z3VheSIgfSwKICB7IDAs
IDAsICAgICAgNjk2LCAgICAgICAgNywgIkludGVybmF0aW9uYWwiIH0sCiAgeyAwLCAwLCAgICAg
ICAgMCwgICAgICAgIDAsICJPdGhlciBXb3JsZCIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAg
ICAgMCwJMAl9Cn07Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmludAltYWluIChpbnQgYXJnYywgY2hhciAq
YXJndltdKQp7CmludAlpOwpjMTlTbwlDYWxsOwpjaGFyCSpUeXBlOwoKZm9yIChpID0gMDsgTmFt
ZVtpXS5uYSAmJiAqTmFtZVtpXS5uYTsgaSsrKSBOYW1lW2ldLml4ID0gaTsKLyogcHJpbnRmICgi
JTAzZCAlOGQgJThkICVzXG4iLCBpLCBOYW1lW2ldLmNvLCBOYW1lW2ldLmRlLCBOYW1lW2ldLm5h
KTsKKi8KCW5fTmEgPSBpOwoKT3B0aW9ucyAoYXJnYywgYXJndik7CQkJLyogcGFyc2UgY29tbWFu
ZCBsaW5lIG9wdGlvbnMJKi8KCQlDYWxsID0gZHBjc29ydCwJVHlwZSA9ICJkcGNzb3J0IjsKaWYg
KCF4cXMpCXhxcyA9ICJxc29ydCI7Cgp4c29ydCAoJk5hbWVbMF0sIG5fTmEsIHNpemVvZihzdHJ1
Y3QgTkFNRSksIGNvbnNvcnQsICJjb25zb3J0IiwgInFzb3J0IiwgMCwgMCk7CS8qCVNob3cgKG5f
TmEpOwkqLwp4c29ydCAoJk5hbWVbMF0sIG5fTmEsIHNpemVvZihzdHJ1Y3QgTkFNRSksIENhbGws
IFR5cGUsIHhxcywgMCwgc19kKTsJCQlTaG93IChuX05hKTsKaWYgKCF2cmIpCnsKeHNvcnQgKCZO
YW1lWzBdLCBuX05hLCBzaXplb2Yoc3RydWN0IE5BTUUpLCBDYWxsLCBUeXBlLCB4cXMsIDEsIHNf
ZCk7CQkvKglTaG93IChuX05hKTsJKi8KeHNvcnQgKCZOYW1lWzBdLCBuX05hLCBzaXplb2Yoc3Ry
dWN0IE5BTUUpLCBDYWxsLCBUeXBlLCB4cXMsIDAsIHNfZCk7CQkJU2hvdyAobl9OYSk7Cn0KZXhp
dCAoMCk7Cn0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZAlPcHRpb25zIChpbnQgYXJnYywgY2hhciAq
YXJndltdKQp7CmludAlpLAljLAljbzsKY2hhcgkqcHRyOwoKI2RlZmluZQlVQV9PUFRTCSJ6cmRz
YzpxOnZoIgoKc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3Qgb3B0c1tdID0KewogIHsJInplcm8i
LAkJbm9fYXJndW1lbnQsCTAsCSd6Jwl9LAogIHsJInJlbW92ZSIsCW5vX2FyZ3VtZW50LAkwLAkn
cicJfSwKICB7CSJkaXZpZGUiLAlub19hcmd1bWVudCwJMCwJJ2QnCX0sCiAgewkic3RydWN0IiwJ
bm9fYXJndW1lbnQsCTAsCSdzJwl9LAogIHsJImNvbmZpcm0iLHJlcXVpcmVkX2FyZ3VtZW50LAkw
LAknYycJfSwKICB7CSJxc29ydCIsICByZXF1aXJlZF9hcmd1bWVudCwJMCwJJ3EnCX0sCiAgewki
dmVyYm9zZSIsCW5vX2FyZ3VtZW50LAkwLAkndicJfSwKICB7CSJoZWxwIiwJCW5vX2FyZ3VtZW50
LAkwLAknaCcJfSwKICB7CTAsCQkJMCwJMCwJMAl9Cn07Cgp3aGlsZSAoKGMgPSBnZXRvcHRfbG9u
ZyAoYXJnYywgYXJndiwgVUFfT1BUUywgb3B0cywgKGludCAqKSAwKSkgIT0gRU9GKQp7CXN3aXRj
aCAoYykKCXsKCWNhc2UgJ3onOgl6cm8gPSAxOwkJCQlicmVhazsKCWNhc2UgJ3InOglyaXMgPSAx
OwkJCQlicmVhazsKCWNhc2UgJ2QnOglzX2QgPSAxOyAJCQkJYnJlYWs7CgljYXNlICdzJzoJc19k
ID0gMDsgCQkJCWJyZWFrOwoJY2FzZSAnYyc6IGlmICgxID09IHNzY2FuZiAob3B0YXJnLCAiJWQi
LCAmY28pKQoJCQljbmYgPSBjbzsgCQkJCWJyZWFrOwoJY2FzZSAncSc6CXhxcyA9IG9wdGFyZzsJ
CQkJYnJlYWs7CgljYXNlICd2JzoJdnJiID0gMTsJCQkJYnJlYWs7CglkZWZhdWx0OgoJY2FzZSAn
aCc6CgkgIGZvciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgaSsrKQoJCWZwcmludGYgKHN0ZGVyciwg
IiAtJWMgfCAtLSUtNi42cyAlc1xuIiwgb3B0c1tpXS52YWwsIG9wdHNbaV0ubmFtZSwgKG9wdHNb
aV0uaGFzX2FyZyA/ICJ2YWx1ZSIgOiAiIikpOwoJCQkJCQkJCWV4aXQoMik7Cgl9Cn0KfQovKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwp2b2lkCVNob3cgKGludCBuKQp7CmludAlpOwpwcmludGYgKCIjICBjb25m
aXJtZWQgZGVhdGhzIGRwYyAgICAgIGxvY2F0aW9uOlxuIik7CmZvciAoaT0wOyBpPG47IGkrKykK
ewogIGlmIChjbmYgPD0gTmFtZVtpXS5jbykJCQkKCXByaW50ZiAoIiUwM2QgJThkICU2ZCAlOC40
ZiAlc1xuIiwKCQlOYW1lW2ldLml4LCBOYW1lW2ldLmNvLCBOYW1lW2ldLmRlLCBOYW1lW2ldLmRw
YywgTmFtZVtpXS5uYSk7Cn0KfQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkCXhzb3J0ICh2b2lkICpi
YXNlLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLCBpbnQgKCpjb21wYXIpKGNvbnN0IHZvaWQg
KiwgY29uc3Qgdm9pZCAqKSwKCQljaGFyICp0eXBlLCBjaGFyICp3aGF0LCBpbnQgb3JkLCBpbnQg
ZGl2KQp7CmludAlpLCBsOwoKZm9yIChpID0gMDsgaSA8IG5fTmE7IGkgKyspCnsKICBpZiAoTmFt
ZVtpXS5jbyB8fCB6cm8pCglOYW1lW2ldLmRwYyA9IChmbG9hdCkJTmFtZVtpXS5kZSAvIChmbG9h
dCkgTmFtZVtpXS5jbyAgKiAxMDAuOwogIGVsc2UJTmFtZVtpXS5kcGMgPSAwOwp9CglxcS0+diA9
IDE7CglxcS0+byA9IG9yZDsKCXFxLT5kID0gZGl2OwoJbCA9IHN0cmxlbih3aGF0KTsKZm9yIChp
ID0gMDsgU3RbaV0ud2hhdCAmJiBzdHJuY21wKHdoYXQsIFN0W2ldLndoYXQsIGwpOyBpKyspIDsK
CmlmIChTdFtpXS53aGF0KQoJU19xID0gaTsKZWxzZQp7CVNfcSA9IDA7CWZwcmludGYgKHN0ZGVy
ciwgIiMgQmFkOiAlc1xuIiwgd2hhdCk7CWV4aXQgKDIpOwp9CglxcS0+dHlwZSA9IFN0W1NfcV0u
d2hhdDsKcHJpbnRmICgiIyAlcyAlcyAlcyAlcyVzJXMlcyAtYyAlZFxuIiwKCXR5cGUsIHFxLT50
eXBlLCAocXEtPmQgPyAiZGl2aWRlIiA6ICJzdHJ1Y3QiKSwgKHFxLT5vID8gImFzY2VuZGluZyIg
OiAiZGVzY2VuZGluZyIpLAoJKHpybyA/ICIgLXoiIDogIiIpLCAocmlzID8gIiAtciIgOiAiIiks
ICh2cmIgPyAiIC12IiA6ICIiKSwgY25mKTsKc3dpdGNoIChTdFtTX3FdLnEpCnsKY2FzZSBTX3Fz
b3J0Oglxc29ydCAoYmFzZSwgbm1lbWIsIHNpemUsIGNvbXBhcik7CWJyZWFrOwpjYXNlIFNfcWN5
Z3c6CXFjeWd3IChiYXNlLCBubWVtYiwgc2l6ZSwgY29tcGFyKTsJYnJlYWs7CmRlZmF1bHQ6CWFi
ZW5kICgiSHVoPyAlZCIsIFN0W1NfcV0ucSk7Cn0KcmV0dXJuOwp9Ci8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CmludAljb25zb3J0IChzdHJ1Y3QgTkFNRSAqbjEsIHN0cnVjdCBOQU1FICpuMikJLyogY29uZmlt
ZWQJKi8KewppbnQJYzEsIGMyOwppZiAocXEtPnYpCXFxLT52ID0gMCwJcHJpbnRmICgiIyBjb25z
b3J0OiVkOlxuIiwgcXEtPm8pOwoJYzEgPSBuMS0+Y287CgljMiA9IG4yLT5jbzsKaWYgKHFxLT5v
KQlyZXR1cm4gKGMxLWMyKTsJCWVsc2UJcmV0dXJuIChjMi1jMSk7Cn0KLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KaW50CWRwY3NvcnQgKHN0cnVjdCBOQU1FICpuMSwgc3RydWN0IE5BTUUgKm4yKQkvKiBkZWFk
L2NvbmZpcm0JKi8KewppbnQJYzEgPSBuMS0+Y28sCWQxID0gbjEtPmRlOwppbnQJYzIgPSBuMi0+
Y28sCWQyID0gbjItPmRlOwpmbG9hdAlmMSwgZjIsIGZmOwppbnQJaWk7CmlmIChxcS0+dikJcXEt
PnYgPSAwLAlwcmludGYgKCIjIGRwY3NvcnQ6JWRcbiIsIHFxLT5vKTsKaWYgKHFxLT5kKQkJCQkv
KiB0aGlzIGZhaWxzIHcvY3lnd2luJ3MgcXNvcnQJKi8KewlmMSA9IDEwMDAwLiogKGZsb2F0KSBk
MSAvIChmbG9hdCkgYzE7CglmMiA9IDEwMDAwLiogKGZsb2F0KSBkMiAvIChmbG9hdCkgYzI7Cn0g
ZWxzZQkJCQkJLyogcHJlLWNhbGN1bGF0ZWQgaW50byBzdHJ1Y3QJKi8KewlmMSA9IG4xLT5kcGMg
KiAxMDAwMC47CQkvKiBpZiAteiBzdGlsbCBmYWlscyBpbiBzdHJ1Y3QJKi8KCWYyID0gbjItPmRw
YyAqIDEwMDAwLjsKfQppZiAocXEtPm8pCWZmID0gZjEgLSBmMjsJZWxzZQlmZiA9IGYyIC0gZjE7
CWlpID0gKGludCkgZmY7CmlmICh2cmIgJiYgKCFjMSB8fCAhYzIpKQkJCQkvKiB2ZXJib3NpdHkJ
Ki8KewoJaW50CWl4OwoJbWVtY3B5ICgmZDEsICZmMSwgNCk7CgltZW1jcHkgKCZkMiwgJmYyLCA0
KTsKCW1lbWNweSAoJml4LCAmZmYsIDQpOwoJcHJpbnRmICgiJXM6YzE9JThkIGMyPSU4ZCBmMT0w
eCUwOHggZjI9MHglMDh4IGZmPSU0LjFmIDB4JTA4eCBpbnQ9JThkIDB4JTA4eDolczolc1xuIiwK
CQkoaWkgPyAoMCA+IGlpID8gIi0gIiA6ICIrICIpIDogIjAgIiksIGMxLCBjMiwgZDEsIGQyLCBm
ZiwgaXgsIGlpLCBpaSwgbjEtPm5hLCBuMi0+bmEpOwp9CnJldHVybiAoaWkpOwp9Ci8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCmludAlhYmVuZCAoY2hhciAqZm9ybWF0LCB2b2lkICphcmcxKQp7CmZwcmludGYg
KHN0ZGVyciwgZm9ybWF0LCBhcmcxKTsJZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsJZXhpdCAoMSk7
Cn0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLyoKRlVOQ1RJT04KPDxxc29ydD4+LS0tc29ydCBhbiBhcnJh
eQoKSU5ERVgKCXFzb3J0CgpTWU5PUFNJUwoJI2luY2x1ZGUgPHN0ZGxpYi5oPgoJdm9pZCBxc29y
dCh2b2lkICo8W2Jhc2VdPiwgc2l6ZV90IDxbbm1lbWJdPiwgc2l6ZV90IDxbc2l6ZV0+LAoJCSAg
IGludCAoKjxbY29tcGFyXT4pKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSApOwoKREVTQ1JJ
UFRJT04KPDxxc29ydD4+IHNvcnRzIGFuIGFycmF5IChiZWdpbm5pbmcgYXQgPFtiYXNlXT4pIG9m
IDxbbm1lbWJdPiBvYmplY3RzLgo8W3NpemVdPiBkZXNjcmliZXMgdGhlIHNpemUgb2YgZWFjaCBl
bGVtZW50IG9mIHRoZSBhcnJheS4KCllvdSBtdXN0IHN1cHBseSBhIHBvaW50ZXIgdG8gYSBjb21w
YXJpc29uIGZ1bmN0aW9uLCB1c2luZyB0aGUgYXJndW1lbnQKc2hvd24gYXMgPFtjb21wYXJdPi4g
IChUaGlzIHBlcm1pdHMgc29ydGluZyBvYmplY3RzIG9mIHVua25vd24KcHJvcGVydGllcy4pICBE
ZWZpbmUgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gdG8gYWNjZXB0IHR3byBhcmd1bWVudHMsCmVh
Y2ggYSBwb2ludGVyIHRvIGFuIGVsZW1lbnQgb2YgdGhlIGFycmF5IHN0YXJ0aW5nIGF0IDxbYmFz
ZV0+LiAgVGhlCnJlc3VsdCBvZiA8PCgqPFtjb21wYXJdPik+PiBtdXN0IGJlIG5lZ2F0aXZlIGlm
IHRoZSBmaXJzdCBhcmd1bWVudCBpcwpsZXNzIHRoYW4gdGhlIHNlY29uZCwgemVybyBpZiB0aGUg
dHdvIGFyZ3VtZW50cyBtYXRjaCwgYW5kIHBvc2l0aXZlIGlmCnRoZSBmaXJzdCBhcmd1bWVudCBp
cyBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCAod2hlcmUgYGBsZXNzIHRoYW4nJyBhbmQKYGBncmVh
dGVyIHRoYW4nJyByZWZlciB0byB3aGF0ZXZlciBhcmJpdHJhcnkgb3JkZXJpbmcgaXMgYXBwcm9w
cmlhdGUpLgoKVGhlIGFycmF5IGlzIHNvcnRlZCBpbiBwbGFjZTsgdGhhdCBpcywgd2hlbiA8PHFz
b3J0Pj4gcmV0dXJucywgdGhlCmFycmF5IGVsZW1lbnRzIGJlZ2lubmluZyBhdCA8W2Jhc2VdPiBo
YXZlIGJlZW4gcmVvcmRlcmVkLgoKUkVUVVJOUwo8PHFzb3J0Pj4gZG9lcyBub3QgcmV0dXJuIGEg
cmVzdWx0LgoKUE9SVEFCSUxJVFkKPDxxc29ydD4+IGlzIHJlcXVpcmVkIGJ5IEFOU0kgKHdpdGhv
dXQgc3BlY2lmeWluZyB0aGUgc29ydGluZyBhbGdvcml0aG0pLgoqLwoKLyotCiAqIENvcHlyaWdo
dCAoYykgMTk5MiwgMTk5MwogKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp
Zm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCiAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAogKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCiAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCiAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQogKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAogKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCiAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKICogU1VDSCBEQU1BR0UuCiAqLwojaWZkZWYJT1NfV0lOCiNp
bmNsdWRlIDxfYW5zaS5oPgojZWxzZQojZGVmaW5lCV9fdW51c2VkCiNlbmRpZgojaW5jbHVkZSA8
c3lzL2NkZWZzLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNpZm5kZWYgX19HTlVDX18KI2RlZmlu
ZSBpbmxpbmUKI2VuZGlmCgojaWYgZGVmaW5lZChJX0FNX1FTT1JUX1IpCnR5cGVkZWYgaW50CQkg
Y21wX3Qodm9pZCAqLCBjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiNlbGlmIGRlZmluZWQo
SV9BTV9HTlVfUVNPUlRfUikKdHlwZWRlZiBpbnQJCSBjbXBfdChjb25zdCB2b2lkICosIGNvbnN0
IHZvaWQgKiwgdm9pZCAqKTsKI2Vsc2UKdHlwZWRlZiBpbnQJCSBjbXBfdChjb25zdCB2b2lkICos
IGNvbnN0IHZvaWQgKik7CiNlbmRpZgpzdGF0aWMgaW5saW5lIGNoYXIJKm1lZDMgKGNoYXIgKiwg
Y2hhciAqLCBjaGFyICosIGNtcF90ICosIHZvaWQgKik7CnN0YXRpYyBpbmxpbmUgdm9pZAkgc3dh
cGZ1bmMgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCk7CgojZGVmaW5lIG1pbihhLCBiKQkoYSkg
PCAoYikgPyBhIDogYgoKLyoKICogUXNvcnQgcm91dGluZSBmcm9tIEJlbnRsZXkgJiBNY0lscm95
J3MgIkVuZ2luZWVyaW5nIGEgU29ydCBGdW5jdGlvbiIuCiAqLwojZGVmaW5lIHN3YXBjb2RlKFRZ
UEUsIHBhcm1pLCBwYXJtaiwgbikgeyAJCVwKCWxvbmcgaSA9IChuKSAvIHNpemVvZiAoVFlQRSk7
IAkJCVwKCVRZUEUgKnBpID0gKFRZUEUgKikgKHBhcm1pKTsgCQlcCglUWVBFICpwaiA9IChUWVBF
ICopIChwYXJtaik7IAkJXAoJZG8geyAJCQkJCQlcCgkJVFlQRQl0ID0gKnBpOwkJXAoJCSpwaSsr
ID0gKnBqOwkJCQlcCgkJKnBqKysgPSB0OwkJCQlcCiAgICAgICAgfSB3aGlsZSAoLS1pID4gMCk7
CQkJCVwKfQoKI2RlZmluZSBTV0FQSU5JVChhLCBlcykgc3dhcHR5cGUgPSAoKGNoYXIgKilhIC0g
KGNoYXIgKikwKSAlIHNpemVvZihsb25nKSB8fCBcCgllcyAlIHNpemVvZihsb25nKSA/IDIgOiBl
cyA9PSBzaXplb2YobG9uZyk/IDAgOiAxOwoKc3RhdGljIGlubGluZSB2b2lkCnN3YXBmdW5jIChj
aGFyICphLAoJY2hhciAqYiwKCWludCBuLAoJaW50IHN3YXB0eXBlKQp7CglpZihzd2FwdHlwZSA8
PSAxKQoJCXN3YXBjb2RlKGxvbmcsIGEsIGIsIG4pCgllbHNlCgkJc3dhcGNvZGUoY2hhciwgYSwg
YiwgbikKfQoKI2RlZmluZSBzd2FwKGEsIGIpCQkJCQlcCglpZiAoc3dhcHR5cGUgPT0gMCkgewkJ
CQlcCgkJbG9uZyB0ID0gKihsb25nICopKGEpOwkJCVwKCQkqKGxvbmcgKikoYSkgPSAqKGxvbmcg
KikoYik7CQlcCgkJKihsb25nICopKGIpID0gdDsJCQlcCgl9IGVsc2UJCQkJCQlcCgkJc3dhcGZ1
bmMoYSwgYiwgZXMsIHN3YXB0eXBlKQoKI2RlZmluZSB2ZWNzd2FwKGEsIGIsIG4pIAlpZiAoKG4p
ID4gMCkgc3dhcGZ1bmMoYSwgYiwgbiwgc3dhcHR5cGUpCgojaWYgZGVmaW5lZChJX0FNX1FTT1JU
X1IpCiNkZWZpbmUJQ01QKHQsIHgsIHkpIChjbXAoKHQpLCAoeCksICh5KSkpCiNlbGlmIGRlZmlu
ZWQoSV9BTV9HTlVfUVNPUlRfUikKI2RlZmluZQlDTVAodCwgeCwgeSkgKGNtcCgoeCksICh5KSwg
KHQpKSkKI2Vsc2UKI2RlZmluZQlDTVAodCwgeCwgeSkgKGNtcCgoeCksICh5KSkpCiNlbmRpZgoK
c3RhdGljIGlubGluZSBjaGFyICoKbWVkMyAoY2hhciAqYSwKCWNoYXIgKmIsCgljaGFyICpjLAoJ
Y21wX3QgKmNtcCwKCXZvaWQgKnRodW5rCiNpZiAhZGVmaW5lZChJX0FNX1FTT1JUX1IpICYmICFk
ZWZpbmVkKElfQU1fR05VX1FTT1JUX1IpCl9fdW51c2VkCiNlbmRpZgopCnsKCXJldHVybiBDTVAo
dGh1bmssIGEsIGIpIDwgMCA/CgkgICAgICAgKENNUCh0aHVuaywgYiwgYykgPCAwID8gYiA6IChD
TVAodGh1bmssIGEsIGMpIDwgMCA/IGMgOiBhICkpCiAgICAgICAgICAgICAgOihDTVAodGh1bmss
IGIsIGMpID4gMCA/IGIgOiAoQ01QKHRodW5rLCBhLCBjKSA8IDAgPyBhIDogYyApKTsKfQoKLyoK
ICogQ2xhc3NpY2FsIGZ1bmN0aW9uIGNhbGwgcmVjdXJzaW9uIHdhc3RlcyBhIGxvdCBvZiBzdGFj
ayBzcGFjZS4gRWFjaAogKiByZWN1cnNpb24gbGV2ZWwgcmVxdWlyZXMgYSBmdWxsIHN0YWNrIGZy
YW1lIGNvbXByaXNpbmcgYWxsIGxvY2FsIHZhcmlhYmxlcwogKiBhbmQgYWRkaXRpb25hbCBzcGFj
ZSBhcyBkaWN0YXRlZCBieSB0aGUgcHJvY2Vzc29yIGNhbGxpbmcgY29udmVudGlvbi4KICoKICog
VGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0b3JlcyB0aGUgdmFyaWFibGVzIHRoYXQgYXJl
IHVuaXF1ZSBmb3IgZWFjaAogKiByZWN1cnNpb24gbGV2ZWwgaW4gYSBwYXJhbWV0ZXIgc3RhY2sg
YXJyYXksIGFuZCB1c2VzIGl0ZXJhdGlvbiB0byBlbXVsYXRlCiAqIHJlY3Vyc2lvbi4gRnVuY3Rp
b24gY2FsbCByZWN1cnNpb24gaXMgbm90IHVzZWQgdW50aWwgdGhlIGFycmF5IGlzIGZ1bGwuCiAq
CiAqIFRvIGVuc3VyZSB0aGUgc3RhY2sgY29uc3VtcHRpb24gaXNuJ3Qgd29yc2VuZWQgYnkgdGhp
cyBkZXNpZ24sIHRoZSBzaXplIG9mCiAqIHRoZSBwYXJhbWV0ZXIgc3RhY2sgYXJyYXkgaXMgY2hv
c2VuIHRvIGJlIHNpbWlsYXIgdG8gdGhlIHN0YWNrIGZyYW1lCiAqIGV4Y2x1ZGluZyB0aGUgYXJy
YXkuIEVhY2ggZnVuY3Rpb24gY2FsbCByZWN1cnNpb24gbGV2ZWwgY2FuIGhhbmRsZSB0aGlzCiAq
IG51bWJlciBvZiBpdGVyYXRpdmUgcmVjdXJzaW9uIGxldmVscy4KICovCiNkZWZpbmUgUEFSQU1F
VEVSX1NUQUNLX0xFVkVMUyA4dQoKI2lmIGRlZmluZWQoSV9BTV9RU09SVF9SKQp2b2lkCl9fYnNk
X3Fzb3J0X3IgKHZvaWQgKmEsCglzaXplX3QgbiwKCXNpemVfdCBlcywKCXZvaWQgKnRodW5rLAoJ
Y21wX3QgKmNtcCkKI2VsaWYgZGVmaW5lZChJX0FNX0dOVV9RU09SVF9SKQp2b2lkCnFzb3J0X3Ig
KHZvaWQgKmEsCglzaXplX3QgbiwKCXNpemVfdCBlcywKCWNtcF90ICpjbXAsCgl2b2lkICp0aHVu
aykKI2Vsc2UKI2RlZmluZSB0aHVuayBOVUxMCnZvaWQKcWN5Z3cgKHZvaWQgKmEsCglzaXplX3Qg
biwKCXNpemVfdCBlcywKCWNtcF90ICpjbXApCiNlbmRpZgp7CgljaGFyICpwYSwgKnBiLCAqcGMs
ICpwZCwgKnBsLCAqcG0sICpwbjsKCXNpemVfdCBkLCByOwoJaW50IGNtcF9yZXN1bHQ7CglpbnQg
c3dhcHR5cGUsIHN3YXBfY250OwoJc2l6ZV90IHJlY3Vyc2lvbl9sZXZlbCA9IDA7CglzdHJ1Y3Qg
eyB2b2lkICphOyBzaXplX3QgbjsgfSBwYXJhbWV0ZXJfc3RhY2tbUEFSQU1FVEVSX1NUQUNLX0xF
VkVMU107CgoJU1dBUElOSVQoYSwgZXMpOwpsb29wOglzd2FwX2NudCA9IDA7CglpZiAobiA8IDcp
IHsKCQkvKiBTaG9ydCBhcnJheXMgYXJlIGluc2VydGlvbiBzb3J0ZWQuICovCgkJZm9yIChwbSA9
IChjaGFyICopIGEgKyBlczsgcG0gPCAoY2hhciAqKSBhICsgbiAqIGVzOyBwbSArPSBlcykKCQkJ
Zm9yIChwbCA9IHBtOyBwbCA+IChjaGFyICopIGEgJiYgQ01QKHRodW5rLCBwbCAtIGVzLCBwbCkg
PiAwOwoJCQkgICAgIHBsIC09IGVzKQoJCQkJc3dhcChwbCwgcGwgLSBlcyk7CgkJZ290byBwb3A7
Cgl9CgoJLyogU2VsZWN0IGEgcGl2b3QgZWxlbWVudCwgbW92ZSBpdCB0byB0aGUgbGVmdC4gKi8K
CXBtID0gKGNoYXIgKikgYSArIChuIC8gMikgKiBlczsKCWlmIChuID4gNykgewoJCXBsID0gYTsK
CQlwbiA9IChjaGFyICopIGEgKyAobiAtIDEpICogZXM7CgkJaWYgKG4gPiA0MCkgewoJCQlkID0g
KG4gLyA4KSAqIGVzOwoJCQlwbCA9IG1lZDMocGwsIHBsICsgZCwgcGwgKyAyICogZCwgY21wLCB0
aHVuayk7CgkJCXBtID0gbWVkMyhwbSAtIGQsIHBtLCBwbSArIGQsIGNtcCwgdGh1bmspOwoJCQlw
biA9IG1lZDMocG4gLSAyICogZCwgcG4gLSBkLCBwbiwgY21wLCB0aHVuayk7CgkJfQoJCXBtID0g
bWVkMyhwbCwgcG0sIHBuLCBjbXAsIHRodW5rKTsKCX0KCXN3YXAoYSwgcG0pOwoKCS8qCgkgKiBT
b3J0IHRoZSBhcnJheSByZWxhdGl2ZSB0aGUgcGl2b3QgaW4gZm91ciByYW5nZXMgYXMgZm9sbG93
czoKCSAqIHsgZWxlbXMgPT0gcGl2b3QsIGVsZW1zIDwgcGl2b3QsIGVsZW1zID4gcGl2b3QsIGVs
ZW1zID09IHBpdm90IH0KCSAqLwoJcGEgPSBwYiA9IChjaGFyICopIGEgKyBlczsKCXBjID0gcGQg
PSAoY2hhciAqKSBhICsgKG4gLSAxKSAqIGVzOwoJZm9yICg7OykgewoJCS8qIFNjYW4gbGVmdCB0
byByaWdodCBzdG9wcGluZyBhdCBmaXJzdCBlbGVtZW50ID4gcGl2b3QuICovCgkJd2hpbGUgKHBi
IDw9IHBjICYmIChjbXBfcmVzdWx0ID0gQ01QKHRodW5rLCBwYiwgYSkpIDw9IDApIHsKCQkJLyog
TW92ZSBlbGVtZW50cyA9PSBwaXZvdCB0byB0aGUgbGVmdCAodG8gcGEpICovCgkJCWlmIChjbXBf
cmVzdWx0ID09IDApIHsKCQkJCXN3YXBfY250ID0gMTsKCQkJCXN3YXAocGEsIHBiKTsKCQkJCXBh
ICs9IGVzOwoJCQl9CgkJCXBiICs9IGVzOwoJCX0KCQkvKiBTY2FuIHJpZ2h0IHRvIGxlZnQgc3Rv
cHBpbmcgYXQgZmlyc3QgZWxlbWVudCA8IHBpdm90LiAqLwoJCXdoaWxlIChwYiA8PSBwYyAmJiAo
Y21wX3Jlc3VsdCA9IENNUCh0aHVuaywgcGMsIGEpKSA+PSAwKSB7CgkJCS8qIE1vdmUgZWxlbWVu
dHMgPT0gcGl2b3QgdG8gdGhlIHJpZ2h0ICh0byBwZCkgKi8KCQkJaWYgKGNtcF9yZXN1bHQgPT0g
MCkgewoJCQkJc3dhcF9jbnQgPSAxOwoJCQkJc3dhcChwYywgcGQpOwoJCQkJcGQgLT0gZXM7CgkJ
CX0KCQkJcGMgLT0gZXM7CgkJfQoJCWlmIChwYiA+IHBjKQoJCQlicmVhazsKCQkvKiBUaGUgc2Nh
biBoYXMgZm91bmQgdHdvIGVsZW1lbnRzIHRvIHN3YXAgd2l0aCBlYWNoIG90aGVyLiAqLwoJCXN3
YXAocGIsIHBjKTsKCQlzd2FwX2NudCA9IDE7CgkJcGIgKz0gZXM7CgkJcGMgLT0gZXM7Cgl9Ci8q
IGtjICovCmlmICghcmlzKQoJaWYgKHN3YXBfY250ID09IDApIHsgIC8qIFN3aXRjaCB0byBpbnNl
cnRpb24gc29ydCAqLwoJCWZvciAocG0gPSAoY2hhciAqKSBhICsgZXM7IHBtIDwgKGNoYXIgKikg
YSArIG4gKiBlczsgcG0gKz0gZXMpCgkJCWZvciAocGwgPSBwbTsgcGwgPiAoY2hhciAqKSBhICYm
IENNUCh0aHVuaywgcGwgLSBlcywgcGwpID4gMDsKCQkJICAgICBwbCAtPSBlcykKCQkJCXN3YXAo
cGwsIHBsIC0gZXMpOwoJCWdvdG8gcG9wOwoJfQovKiBrYyAqLwoJLyoKCSAqIFJlYXJyYW5nZSB0
aGUgYXJyYXkgaW4gdGhyZWUgcGFydHMgc29ydGVkIGxpa2UgdGhpczoKCSAqIHsgZWxlbWVudHMg
PCBwaXZvdCwgZWxlbWVudHMgPT0gcGl2b3QsIGVsZW1lbnRzID4gcGl2b3QgfQoJICovCglwbiA9
IChjaGFyICopIGEgKyBuICogZXM7CglyID0gbWluKHBhIC0gKGNoYXIgKilhLCBwYiAtIHBhKTsK
CXZlY3N3YXAoYSwgcGIgLSByLCByKTsKCXIgPSBtaW4ocGQgLSBwYywgcG4gLSBwZCAtIGVzKTsK
CXZlY3N3YXAocGIsIHBuIC0gciwgcik7CglkID0gcGIgLSBwYTsgLyogZCA9IFNpemUgb2YgbGVm
dCBwYXJ0LiAqLwoJciA9IHBkIC0gcGM7IC8qIHIgPSBTaXplIG9mIHJpZ2h0IHBhcnQuICovCglw
biAtPSByOyAgICAgLyogcG4gPSBCYXNlIG9mIHJpZ2h0IHBhcnQuICovCgoJLyoKCSAqIENoZWNr
IHdoaWNoIG9mIHRoZSBsZWZ0IGFuZCByaWdodCBwYXJ0cyBhcmUgbGFyZ2VyLgoJICogU2V0IChh
LCBuKSAgdG8gKGJhc2UsIHNpemUpIG9mIHRoZSBsYXJnZXIgcGFydC4KCSAqIFNldCAocGEsIHIp
IHRvIChiYXNlLCBzaXplKSBvZiB0aGUgc21hbGxlciBwYXJ0LgoJICovCglpZiAociA+IGQpIHsg
LyogUmlnaHQgcGFydCBpcyB0aGUgbGFyZ2VyIHBhcnQgKi8KCQlwYSA9IGE7CgkJYSA9IHBuOwoJ
CW4gPSByOwoJCXIgPSBkOwoJfQoJZWxzZSB7IC8qIExlZnQgcGFydCBpcyB0aGUgbGFyZ2VyIHBh
cnQsIG9yIGJvdGggYXJlIGVxdWFsLiAqLwoJCXBhID0gcG47CgkJbiA9IGQ7Cgl9CgoJLyoKCSAq
IFRoZSBsZWZ0IGFuZCByaWdodCBwYXJ0cyBlYWNoIG5lZWQgZnVydGhlciBzb3J0aW5nIGlmIHRo
ZXkKCSAqIGNvbnRhaW4gdHdvIGVsZW1lbnRzIG9yIG1vcmUuIElmIGJvdGggbmVlZCBzb3J0aW5n
IHdlIHVzZQoJICogcmVjdXJzaW9uIHRvIHNvcnQgdGhlIHNtYWxsZXIgcGFydCBhbmQgc2F2ZSB0
aGUgbGFyZ2VyIHBhcnQKCSAqIHRvIGJlIHNvcnRlZCBieSBpdGVyYXRpb24gYWZ0ZXIgdGhlIHJl
Y3Vyc2lvbi4KCSAqIFVzaW5nIHJlY3Vyc2lvbiBvbmx5IGZvciB0aGUgc21hbGxlciBwYXJ0IGd1
YXJhbnRlZXMgYQoJICogcmVjdXJzaW9uIGRlcHRoIHRoYXQgaXMgYm91bmRlZCB0byBiZSBsZXNz
IHRoYW4gKGxvZzIobikpLgoJICovCglpZiAociA+IGVzKSB7ICAvKiBTbWFsbGVyIHBhcnQgPiAx
IGVsZW1lbnQuIEJvdGggcGFydHMgbmVlZCBzb3J0aW5nLiAqLwoJCWlmIChyZWN1cnNpb25fbGV2
ZWwgPCBQQVJBTUVURVJfU1RBQ0tfTEVWRUxTKSB7CgkJCS8qCgkJCSAqIFRoZSBzbWFsbGVyIHBh
cnQgbmVlZHMgdG8gYmUgcmVjdXJzaXZlbHkgc29ydGVkCgkJCSAqIGJlZm9yZSB0aGUgbGFyZ2Vy
IHBhcnQgaXMgc29ydGVkLiBUbyBhdm9pZCBmdW5jdGlvbgoJCQkgKiBjYWxsIHJlY3Vyc2lvbiB0
aGUgcGFyYW1ldGVycyBmb3IgdGhlIGxhcmdlciBwYXJ0CgkJCSAqIGFyZSBwdXNoZWQgb24gdGhl
IHBhcmFtZXRlcl9zdGFjayBhcnJheS4gVGhlIHNtYWxsZXIKCQkJICogcGFydCBpcyBzb3J0ZWQg
dXNpbmcgaXRlcmF0aW9uIGFuZCB0aGUgbGFyZ2VyIHBhcnQKCQkJICogd2lsbCBiZSBzb3J0ZWQg
d2hlbiB0aGUgcGFyYW1ldGVyX3N0YWNrIGlzIHBvcHBlZAoJCQkgKiBhZnRlciB0aGUgc21hbGxl
ciBwYXJ0IGhhcyBiZWVuIHNvcnRlZC4KCQkJICovCgkJCXBhcmFtZXRlcl9zdGFja1tyZWN1cnNp
b25fbGV2ZWxdLmEgPSBhOwoJCQlwYXJhbWV0ZXJfc3RhY2tbcmVjdXJzaW9uX2xldmVsXS5uID0g
biAvIGVzOwoJCQlyZWN1cnNpb25fbGV2ZWwrKzsKCQkJYSA9IHBhOwoJCQluID0gciAvIGVzOwoJ
CQlnb3RvIGxvb3A7CgkJfQoJCWVsc2UgewoJCQkvKgoJCQkgKiBUaGUgcGFyYW1ldGVyX3N0YWNr
IGFycmF5IGlzIGZ1bGwuIFRoZSBzbWFsbGVyIHBhcnQKCQkJICogaXMgc29ydGVkIHVzaW5nIGZ1
bmN0aW9uIGNhbGwgcmVjdXJzaW9uLiBUaGUgbGFyZ2VyCgkJCSAqIHBhcnQgd2lsbCBiZSBzb3J0
ZWQgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJucy4KCQkJICovCiNpZiBkZWZpbmVkKElf
QU1fUVNPUlRfUikKCQkJX19ic2RfcXNvcnRfcihwYSwgciAvIGVzLCBlcywgdGh1bmssIGNtcCk7
CiNlbGlmIGRlZmluZWQoSV9BTV9HTlVfUVNPUlRfUikKCQkJcXNvcnRfcihwYSwgciAvIGVzLCBl
cywgY21wLCB0aHVuayk7CiNlbHNlCgkJCXFjeWd3KHBhLCByIC8gZXMsIGVzLCBjbXApOwojZW5k
aWYKCQl9Cgl9CglpZiAobiA+IGVzKSB7ICAvKiBUaGUgbGFyZ2VyIHBhcnQgbmVlZHMgc29ydGlu
Zy4gSXRlcmF0ZSB0byBzb3J0LiAgKi8KCQluID0gbiAvIGVzOwoJCWdvdG8gbG9vcDsKCX0KCS8q
IEJvdGggbGVmdCBhbmQgcmlnaHQgcGFydHMgYXJlIG9uZSBlbGVtZW50IG9yIGxlc3MgLSBsZXZl
bCBkb25lLiAqLwpwb3A6CglpZiAocmVjdXJzaW9uX2xldmVsICE9IDApIHsKCQlyZWN1cnNpb25f
bGV2ZWwtLTsKCQlhID0gcGFyYW1ldGVyX3N0YWNrW3JlY3Vyc2lvbl9sZXZlbF0uYTsKCQluID0g
cGFyYW1ldGVyX3N0YWNrW3JlY3Vyc2lvbl9sZXZlbF0ubjsKCQlnb3RvIGxvb3A7Cgl9Cn0KLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8K
--00000000000039abdc05afd719d9
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

--00000000000039abdc05afd719d9--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019