delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2015/05/09/07:39:13

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
X-Recipient: djgpp AT delorie DOT com
X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20120113;
h=mime-version:in-reply-to:references:date:message-id:subject:from:to
:content-type;
bh=GMTb60YRmCl8Rs+lShKoq8xzuoo2ehzEfwllt2pgjFQ=;
b=iNiReZL47F4fovMQUrmeZTPLKLJa72ab2UIts7WQtYYlJNSrp1cHedUGmcac12EFxQ
4/z6hT1753aNi5z1CsDv1qknXDbEwYoaEeDWuHvJ8s+i9iJdjfMzp14QVwR14WmSsYLH
Q7EkyeWf+fZHEzpXqFN90M09hFZSzwZpPyk1TNtr7ZoG6SSUf2cgvmWrTvC1c6Q+UngV
wen+hFm5E0x4wOocmfrQiaLIVdOtjC8AmdtVnbyPsFfcvMMZ4l5vZw4a/JcS70R0SWC9
6DgPiMC9ZpPiLnaCgIUXILzD+b6kDWimtqCr9ADICIbL7jXJOI11QujYlt02KviZEoZF
x/ug==
MIME-Version: 1.0
X-Received: by 10.42.81.201 with SMTP id a9mr2586404icl.9.1431171529621; Sat,
09 May 2015 04:38:49 -0700 (PDT)
In-Reply-To: <201505042003.t44K3odg011007@delorie.com>
References: <201505042003 DOT t44K3odg011007 AT delorie DOT com>
Date: Sat, 9 May 2015 14:38:49 +0300
Message-ID: <CAA2C=vAjN-HamFRWCQak=QF_NPjR5-TBYZw1U5707MO0b=qXkw@mail.gmail.com>
Subject: Re: ANNOUNCE: DJGPP 2.05 beta 1
From: "Ozkan Sezer (sezeroz AT gmail DOT com)" <djgpp AT delorie DOT com>
To: djgpp AT delorie DOT com
Reply-To: djgpp AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: djgpp AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

--90e6ba614ed2a3d1640515a49626
Content-Type: text/plain; charset=UTF-8

On 5/4/15, Andris Pavenis (andris DOT pavenis AT iki DOT fi)
<djgpp-announce AT delorie DOT com> wrote:
> This is announcement of DJGPP 2.05 beta 1
>
> It has numerous changes since previous DJGPP 2.04 beta 1 release in 2003.
> (http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-announce/2003/12/06/22:18:05)
> Unfortunately DJGPP v2.04 was never released and old beta version slowly
> became almost unusable together with other newer DJGPP packages.
>
> More information about changes in DJGPP 2.05 beta 1 is available at
>
>      http://www.delorie.com/djgpp/doc/kb/
>
> both in sections about changes in 2.04 and 2.05. The same information is
> also
> available in file info/kb.inf in djdev205.zip
>
> It needs a lot of testing. Please test it if you have time and/or are
> interested in any of the above features. Any level of testing would be
> appreciated.

Here are some more janitorial work: see the attached six patches:

001-makefile.patch :
* src/makefile:
- add -Wall to compiler flags where 'gcc' is used directly to build
  the build utils.
- add -xc to rmake.exe build rule, because older compilers fail in
  linking it, and the source is pure-C anyway.

002-makemake-parens.patch :
* src/makemake.c (find): fix -Wparentheses warning

003-rmake.cc-unused.patch :
* src/rmake.cc: remove unused local variable 'pathp'

004-djasm-mess.patch :
* djasm.y: remove the dependency on local cdefs.h, and fix the
  unused variables mess properly.

005-chew.c-mess.patch :
* src/libm/math/chew.c: remove dependency on ansidecl.h and fix the
  huge mess of conflicting declarations, unused vars and functions,
  and shadowed variables, so that it builds without any warnings at
  all.
* src/libm/math/makefile: remove the ansidecl.h dependency and also
  the -D_HAVE_STDC flag from chew.exe build rule.

006-bin2h.c-no-basename.patch
* src/utils/bin2h.c: remove basename() dependency and report the exe
name simply as 'bin2h', so that it cross-builds without warnings.

Regards.

--
O.S.

--90e6ba614ed2a3d1640515a49626
Content-Type: application/octet-stream; name="001-makefile.patch"
Content-Disposition: attachment; filename="001-makefile.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file1

KiBzcmMvbWFrZWZpbGU6Ci0gYWRkIC1XYWxsIHRvIGNvbXBpbGVyIGZsYWdzIHdoZXJlICdnY2Mn
IGlzIHVzZWQgZGlyZWN0bHkgdG8gYnVpbGQKICB0aGUgYnVpbGQgdXRpbHMuCi0gYWRkIC14YyB0
byBybWFrZS5leGUgYnVpbGQgcnVsZSwgYmVjYXVzZSBvbGRlciBjb21waWxlcnMgZmFpbCBpbgog
IGxpbmtpbmcgaXQsIGFuZCB0aGUgc291cmNlIGlzIHB1cmUtQyBhbnl3YXkuCgpJbmRleDogc3Jj
L21ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvZGpncHAvZGpncHAvc3JjL21ha2Vm
aWxlLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXUgLXAgLXIxLjE0IG1ha2VmaWxl
Ci0tLSBzcmMvbWFrZWZpbGUJMiBNYXkgMjAxNSAwNzozMTo1OSAtMDAwMAkxLjE0CisrKyBzcmMv
bWFrZWZpbGUJOSBNYXkgMjAxNSAxMDozMDoxNCAtMDAwMApAQCAtMjQsMTYgKzI0LDE2IEBAIERJ
UlMgPSBcCiBhbGwgOiBtaXNjLmV4ZSBjb25maWcgJChESVJTKSBtYWtlbWFrZS5leGUgc3VicyAu
Li9saWIvbGliZy5hIC4uL2xpYi9saWJwYy5hCiAKIG1pc2MuZXhlIDogbWlzYy5jCi0JZ2NjIC1P
MiBtaXNjLmMgLW8gbWlzYy5leGUKKwlnY2MgLU8yIC1XYWxsIG1pc2MuYyAtbyBtaXNjLmV4ZQog
CiAkKERJUlMpIDoKIAkuL21pc2MuZXhlIG1rZGlyICRACiAKIG1ha2VtYWtlLmV4ZSA6IG1ha2Vt
YWtlLmMKLQlnY2MgLU8yIG1ha2VtYWtlLmMgLW8gbWFrZW1ha2UuZXhlCisJZ2NjIC1PMiAtV2Fs
bCBtYWtlbWFrZS5jIC1vIG1ha2VtYWtlLmV4ZQogCiBjb3B5cml0ZS5leGUgOiBjb3B5cml0ZS5j
YwotCWdjYyAtTzIgY29weXJpdGUuY2MgLW8gY29weXJpdGUuZXhlCisJZ2NjIC1PMiAtV2FsbCBj
b3B5cml0ZS5jYyAtbyBjb3B5cml0ZS5leGUKIAogc3ViczoKIAkkKE1BS0UpIC1DIGRqYXNtIG5h
dGl2ZQpAQCAtNzUsNCArNzUsNCBAQCBjb25maWc6CiAJJChNQUtFKSAtZiBtYWtlZmlsZS5jZmcK
IAogcm1ha2UuZXhlOiBybWFrZS5jYwotCWdjYyAtTzIgcm1ha2UuY2MgLW8gcm1ha2UuZXhlCisJ
Z2NjIC1PMiAtV2FsbCAteGMgcm1ha2UuY2MgLW8gcm1ha2UuZXhlCg==
--90e6ba614ed2a3d1640515a49626
Content-Type: application/octet-stream; name="002-makemake-parens.patch"
Content-Disposition: attachment; filename="002-makemake-parens.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file2

KiBzcmMvbWFrZW1ha2UuYyAoZmluZCk6IGZpeCAtV3BhcmVudGhlc2VzIHdhcm5pbmcKCkluZGV4
OiBzcmMvbWFrZW1ha2UuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2RqZ3BwL2RqZ3BwL3Ny
Yy9tYWtlbWFrZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBt
YWtlbWFrZS5jCi0tLSBzcmMvbWFrZW1ha2UuYwkxIEphbiAxOTk4IDE4OjE1OjM0IC0wMDAwCTEu
MQorKysgc3JjL21ha2VtYWtlLmMJOSBNYXkgMjAxNSAxMDozMDoxNSAtMDAwMApAQCAtODcsNyAr
ODcsNyBAQCBmaW5kKHZvaWQpCiAgIH0KICAgKnBhdGhfZW5kID0gJy8nOwogICBzdWJzID0gKGNo
YXIgKiopbWFsbG9jKG1zdWJzKnNpemVvZihjaGFyICopKTsKLSAgd2hpbGUgKGRlID0gcmVhZGRp
cihkKSkgeworICB3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgewogCiAgICAgLyog
U2tpcCAuIGFuZCAuLiAqLwogICAgIGlmIChkZS0+ZF9uYW1lWzBdID09ICcuJykK
--90e6ba614ed2a3d1640515a49626
Content-Type: application/octet-stream; name="003-rmake.cc-unused.patch"
Content-Disposition: attachment; filename="003-rmake.cc-unused.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file3

c3JjL3JtYWtlLmNjOiByZW1vdmUgdW51c2VkIGxvY2FsIHZhcmlhYmxlICdwYXRocCcKCkluZGV4
OiBzcmMvcm1ha2UuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9kamdwcC9kamdwcC9zcmMv
cm1ha2UuY2MsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IHJtYWtl
LmNjCi0tLSBzcmMvcm1ha2UuY2MJMiBNYXkgMjAxNSAwNzozMjowMCAtMDAwMAkxLjQKKysrIHNy
Yy9ybWFrZS5jYwk5IE1heSAyMDE1IDEwOjMwOjE1IC0wMDAwCkBAIC0xMiw3ICsxMiw3IEBAIG1h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogICBpbnQgaTsKICAgY2hhciBjd2RbMjAwXTsK
LSAgY2hhciBwYXRoWzIwMF0sICpwYXRocDsKKyAgY2hhciBwYXRoWzIwMF07CiAgIGNoYXIgZmls
ZVsyMDBdOwogICBGSUxFICpvaSA9IGZvcGVuKCJtYWtlZmlsZS5vaSIsICJ3Iik7CiAgIEZJTEUg
KnJmID0gZm9wZW4oIm1ha2VmaWxlLnJmMiIsICJ3Iik7Cg==
--90e6ba614ed2a3d1640515a49626
Content-Type: application/octet-stream; name="004-djasm-mess.patch"
Content-Disposition: attachment; filename="004-djasm-mess.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file4

KiBkamFzbS55OiByZW1vdmUgdGhlIGRlcGVuZGVuY3kgb24gbG9jYWwgY2RlZnMuaCwgYW5kIGZp
eCB0aGUKICB1bnVzZWQgdmFyaWFibGVzIG1lc3MgcHJvcGVybHkuCgpJbmRleDogc3JjL2RqYXNt
L2RqYXNtLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9kamdwcC9kamdwcC9zcmMvZGphc20v
ZGphc20ueSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBkamFz
bS55Ci0tLSBzcmMvZGphc20vZGphc20ueQkyIE1heSAyMDE1IDA3OjMyOjAzIC0wMDAwCTEuMTQK
KysrIHNyYy9kamFzbS9kamFzbS55CTkgTWF5IDIwMTUgMTA6MzA6MTYgLTAwMDAKQEAgLTE4LDcg
KzE4LDYgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRl
IDx1bmlzdGQuaD4KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3N5cy9jZGVmcy5oIgogI2lmbmRl
ZiBPX0JJTkFSWQogI2RlZmluZSBPX0JJTkFSWSAwCiAjZW5kaWYKQEAgLTE0NjYsMTggKzE0NjUs
MTUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIHN0cm5jYXQocGV4ZSAr
IElORk9fVEVYVF9TVEFSVCwgY29weXJpZ2h0LCAoNTEyLTMtSU5GT19URVhUX1NUQVJUKSAtIHN0
cmxlbihwZXhlICsgSU5GT19URVhUX1NUQVJUKSk7IC8qIC0zIGZvciB0aGUgZm9sbG93aW5nIGxp
bmU6ICovCiAgIHN0cmNhdChwZXhlICsgSU5GT19URVhUX1NUQVJULCAiXHJcblwwMzIiKTsKIAot
ICBpZiAoYXJndlsyXSA9PSAwKQorICBpZiAoISBhcmd2WzJdKQogICB7Ci0gICAgY2hhciAqY3As
ICAqZG90ID0gTlVMTCwgKnNsIF9BVFRSSUJVVEUoX191bnVzZWRfXykgPSBOVUxMOworICAgIGNo
YXIgKmNwLCAqZG90ID0gTlVMTDsKICAgICBvdXRmaWxlbmFtZSA9IChjaGFyICopYWxsb2NhKHN0
cmxlbihhcmd2WzFdKSs1KTsKICAgICBzdHJjcHkob3V0ZmlsZW5hbWUsIGFyZ3ZbMV0pOwogICAg
IGZvciAoY3A9b3V0ZmlsZW5hbWU7ICpjcDsgY3ArKykKICAgICB7CiAgICAgICBpZiAoKmNwID09
ICc6JyB8fCAqY3AgPT0gJ1xcJyB8fCAqY3AgPT0gJy8nKQotICAgICAgewotICAgICAgICBzbCA9
IGNwKzE7Ci0gICAgICAgIGRvdCA9IDA7Ci0gICAgICB9CisgICAgICAgIGRvdCA9IE5VTEw7CiAg
ICAgICBpZiAoKmNwID09ICcuJykKICAgICAgICAgZG90ID0gY3A7CiAgICAgfQpAQCAtMTQ5MCwy
NCArMTQ4NiwyMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgIH0KICAgZWxz
ZQogICB7Ci0gICAgY2hhciAqZG90PTAsICpzbD0wLCAqY3A7CisgICAgY2hhciAqY3AsICpkb3Qg
PSBOVUxMOworICAgIHNpemVfdCBzeiA9IHN0cmxlbihhcmd2WzJdKTsKICAgICBvdXRmaWxlbmFt
ZSA9IGFyZ3ZbMl07CiAgICAgZm9yIChjcD1vdXRmaWxlbmFtZTsgKmNwOyBjcCsrKQogICAgIHsK
ICAgICAgIGlmICgqY3AgPT0gJzonIHx8ICpjcCA9PSAnXFwnIHx8ICpjcCA9PSAnLycpCi0gICAg
ICB7Ci0gICAgICAgIHNsID0gY3ArMTsKLSAgICAgICAgZG90ID0gMDsKLSAgICAgIH0KKyAgICAg
ICAgZG90ID0gTlVMTDsKICAgICAgIGlmICgqY3AgPT0gJy4nKQogICAgICAgICBkb3QgPSBjcDsK
ICAgICB9CiAgICAgaWYgKCFkb3QpCiAgICAgewotICAgICAgc2wgPSAoY2hhciAqKWFsbG9jYShz
dHJsZW4ob3V0ZmlsZW5hbWUpKzUpOwotICAgICAgc3RyY3B5KHNsLCBvdXRmaWxlbmFtZSk7Ci0g
ICAgICBvdXRmaWxlbmFtZSA9IHNsOwotICAgICAgZG90ID0gb3V0ZmlsZW5hbWUgKyBzdHJsZW4o
b3V0ZmlsZW5hbWUpOworICAgICAgb3V0ZmlsZW5hbWUgPSAoY2hhciAqKWFsbG9jYShzeis1KTsK
KyAgICAgIHN0cmNweShvdXRmaWxlbmFtZSwgYXJndlsyXSk7CisgICAgICBkb3QgPSBvdXRmaWxl
bmFtZSArIHN6OwogICAgICAgKmRvdCA9ICcuJzsKICAgICAgIHN0cmNweShkb3QrMSwgZXh0X3R5
cGVzW291dF90eXBlXSk7CiAgICAgfQpAQCAtMjY2Myw3ICsyNjU2LDcgQEAgdm9pZCBhZGRfY29w
eXJpZ2h0KGNoYXIgKmJ1ZikKICAgY29weXJpZ2h0ID0gdG1wOwogfQogCi12b2lkIGFkZF9yY3Nf
aWRlbnQoKQordm9pZCBhZGRfcmNzX2lkZW50KHZvaWQpCiB7CiAgIGNoYXIgdG1wWzUwMF07CiAg
IHRpbWVfdCBub3c7CkBAIC0yNzY1LDE1ICsyNzU4LDE4IEBAIHZvaWQgZG9fbGlua2NvZmYgKGNo
YXIgKmZpbGVuYW1lKQogICBTQ05IRFIgKmZfdGhkcjsJCS8qIFRleHQgc2VjdGlvbiBoZWFkZXIg
Ki8KICAgU0NOSERSICpmX2RoZHI7CQkvKiBEYXRhIHNlY3Rpb24gaGVhZGVyICovCiAgIFNDTkhE
UiAqZl9iaGRyOwkJLyogQnNzIHNlY3Rpb24gaGVhZGVyICovCi0vKiAgQU9VVEhEUiBmX29oZHI7
Ki8JCS8qIE9wdGlvbmFsIGZpbGUgaGVhZGVyIChhLm91dCkgKi8KKy8qQU9VVEhEUiBmX29oZHI7
Ki8JCS8qIE9wdGlvbmFsIGZpbGUgaGVhZGVyIChhLm91dCkgKi8KICAgU1lNRU5UICpzeW1ib2w7
CiAgIFJFTE9DICpycDsKICAgaW50IGNudDsKICAgc2l6ZV90IGk7CiAgIHZvaWQgKmJhc2U7Ci0g
IGludCB0ZXh0YmFzZSwgZGF0YWJhc2UgX0FUVFJJQlVURShfX3VudXNlZF9fKSwgYnNzYmFzZSBf
QVRUUklCVVRFKF9fdW51c2VkX18pIC8qLCBkZWx0YSovOworICBpbnQgdGV4dGJhc2UgLyosIGRl
bHRhKi87CisjaWZkZWYgREVCVUdfUkVMT0MKKyAgaW50IGRhdGFiYXNlLCBic3NiYXNlOworI2Vu
ZGlmCiAgIGNoYXIgc21hbGxuYW1lWzldOwotICB1bnNpZ25lZCBjaGFyICpjcCBfQVRUUklCVVRF
KF9fdW51c2VkX18pOworLyp1bnNpZ25lZCBjaGFyICpjcDsqLwogCiAgIGYgPSBvcGVuIChmaWxl
bmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSk7CiAgIGlmIChmIDwgMCkKQEAgLTI4MDQsOSArMjgw
MCwxMyBAQCB2b2lkIGRvX2xpbmtjb2ZmIChjaGFyICpmaWxlbmFtZSkKIAogICB0ZXh0YmFzZSA9
IHBjOwogICBlbWl0KGRhdGEgKyBmX3RoZHItPnNfc2NucHRyLCBmX3RoZHItPnNfc2l6ZSk7Cisj
aWZkZWYgREVCVUdfUkVMT0MKICAgZGF0YWJhc2UgPSBwYzsKKyNlbmRpZgogICBlbWl0KGRhdGEg
KyBmX2RoZHItPnNfc2NucHRyLCBmX2RoZHItPnNfc2l6ZSk7CisjaWZkZWYgREVCVUdfUkVMT0MK
ICAgYnNzYmFzZSA9IHBjOworI2VuZGlmCiAgIGZvciAoaSA9IDA7IGkgPCBmX2JoZHItPnNfc2l6
ZTsgaSsrKQogICAgIGVtaXRiICgwKTsKIApAQCAtMjk0OCw3ICsyOTQ4LDcgQEAgdm9pZCBkb19s
aW5rY29mZiAoY2hhciAqZmlsZW5hbWUpCiAJCSAgICAgICBpbm5hbWUsIGxpbmVubywgZmlsZW5h
bWUsIHJwLT5yX3R5cGUpOwogCSAgICAgIGRlbHRhID0gMDsKIAkgICAgfQotCSAgY3AgPSAodW5z
aWduZWQgY2hhciAqKShvdXRiaW4gKyB0ZXh0YmFzZSArIHJwLT5yX3ZhZGRyKTsKKwkgIC8qY3Ag
PSAodW5zaWduZWQgY2hhciAqKShvdXRiaW4gKyB0ZXh0YmFzZSArIHJwLT5yX3ZhZGRyKTsqLwog
CSAgdmFkZHIgKz0gZGVsdGE7CiAJICB2YWRkcl9wdHJbMF09dmFkZHI7CiAJICB2YWRkcl9wdHJb
MV09dmFkZHI+Pjg7Cg==
--90e6ba614ed2a3d1640515a49626
Content-Type: application/octet-stream; name="005-chew.c-mess.patch"
Content-Disposition: attachment; filename="005-chew.c-mess.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file5

KiBzcmMvbGlibS9tYXRoL2NoZXcuYzogcmVtb3ZlIGRlcGVuZGVuY3kgb24gYW5zaWRlY2wuaCBh
bmQgZml4IHRoZQogIGh1Z2UgbWVzcyBvZiBjb25mbGljdGluZyBkZWNsYXJhdGlvbnMsIHVudXNl
ZCB2YXJzIGFuZCBmdW5jdGlvbnMsCiAgYW5kIHNoYWRvd2VkIHZhcmlhYmxlcywgc28gdGhhdCBp
dCBidWlsZHMgd2l0aG91dCBhbnkgd2FybmluZ3MgYXQKICBhbGwuCiogc3JjL2xpYm0vbWF0aC9t
YWtlZmlsZTogcmVtb3ZlIHRoZSBhbnNpZGVjbC5oIGRlcGVuZGVuY3kgYW5kIGFsc28KICB0aGUg
LURfSEFWRV9TVERDIGZsYWcgZnJvbSBjaGV3LmV4ZSBidWlsZCBydWxlLgoKSW5kZXg6IHNyYy9s
aWJtL21hdGgvbWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9kamdwcC9kamdwcC9z
cmMvbGlibS9tYXRoL21ha2VmaWxlLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUg
LXAgLXIxLjExIG1ha2VmaWxlCi0tLSBzcmMvbGlibS9tYXRoL21ha2VmaWxlCTE3IE5vdiAyMDEz
IDE0OjI3OjU3IC0wMDAwCTEuMTEKKysrIHNyYy9saWJtL21hdGgvbWFrZWZpbGUJOSBNYXkgMjAx
NSAxMDozMDoxNyAtMDAwMApAQCAtMjE3LDggKzIxNyw4IEBAIHRhcmdldGRlcC50ZXhpOiAkKGNo
b2JqKSBtYXRoLnRleGkKICUuZGVmOiAlLmMgY2hldy5leGUKIAkkKENIRVcpIDwgJDwgPiAkQAog
Ci1jaGV3LmV4ZTogY2hldy5jIGFuc2lkZWNsLmgKLQkkKEdDQykgLURfSEFWRV9TVERDIC1PMiAt
byAkQCAkPAorY2hldy5leGU6IGNoZXcuYworCSQoR0NDKSAtTzIgLW8gJEAgJDwKIAogY2xlYW4g
OjoKIAktJChNSVNDKSBybSAqLmRlZiAqLmQgY2hldy5leGUgdGFyZ2V0ZGVwLnRleGkKSW5kZXg6
IHNyYy9saWJtL21hdGgvY2hldy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvZGpncHAvZGpn
cHAvc3JjL2xpYm0vbWF0aC9jaGV3LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11
IC1wIC1yMS4zIGNoZXcuYwotLS0gc3JjL2xpYm0vbWF0aC9jaGV3LmMJMzAgSnVsIDIwMTEgMTM6
MDU6NDkgLTAwMDAJMS4zCisrKyBzcmMvbGlibS9tYXRoL2NoZXcuYwk5IE1heSAyMDE1IDEwOjMw
OjE3IC0wMDAwCkBAIC0yLDcgKzIsNiBAQAogICAgQ29weXJpZ2h0IChDKSAxOTkwLTE5OTIgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICBDb250cmlidXRlZCBieSBzdGV2ZSBjaGFt
YmVybGFpbiBAY3lnbnVzCiAKLQogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpA
QCAtMjEsNyArMjAsNyBAQCBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRn
CiAgWWV0IGFub3RoZXIgd2F5IG9mIGV4dHJhY3RpbmcgZG9jdW1lbnRhdGlvbiBmcm9tIHNvdXJj
ZS4KICBObywgSSBoYXZlbid0IGZpbmlzaGVkIGl0IHlldCwgYnV0IEkgaG9wZSB5b3UgcGVvcGxl
IGxpa2UgaXQgYmV0dGVyCiAgdGhhdCB0aGUgb2xkIHdheQotICAKKwogIHNhYwogCiBCYXNpY2Fs
bHksIHRoaXMgaXMgYSBzb3J0IG9mIHN0cmluZyBmb3J0aCwgbWF5YmUgd2Ugc2hvdWxkIGNhbGwg
aXQKQEAgLTI5LDIyICsyOCwxNyBAQCBzdHJ1dGg/CiAKIFlvdSBkZWZpbmUgbmV3IHdvcmRzIHRo
dXM6CiA6IDxuZXd3b3JkPiA8b2xkd29yZHM+IDsKLVRoZXJlIGlzICBubwogCiAqLwogCiAKLQot
I2luY2x1ZGUgImFuc2lkZWNsLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUg
PGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLWV4dGVybiBQVFIgbWFsbG9jKCk7Ci1l
eHRlcm4gUFRSIHJlYWxsb2MoKTsKLQogI2RlZmluZSBERUZfU0laRSA1MDAwCiAjZGVmaW5lIFNU
QUNLIDUwCiAKQEAgLTUyLDEwICs0Niw4IEBAIGludCBpbnRlcm5hbF93YW50ZWQ7CiBpbnQgaW50
ZXJuYWxfbW9kZTsKIAogCi0KIC8qIEhlcmUgaXMgYSBzdHJpbmcgdHlwZSAuLi4gKi8KLQotdHlw
ZWRlZiBzdHJ1Y3QgYnVmZmVyIAordHlwZWRlZiBzdHJ1Y3QgYnVmZmVyCiB7CiAgICAgY2hhciAq
cHRyOwogICAgIHVuc2lnbmVkIGludCB3cml0ZV9pZHg7CkBAIC02MywzNSArNTUsMjQgQEAgdHlw
ZWRlZiBzdHJ1Y3QgYnVmZmVyIAogfSBzdHJpbmdfdHlwZTsKIAogCi0KLQotCi0KLQotc3RhdGlj
IHZvaWQgREVGVU4oaW5pdF9zdHJpbmdfd2l0aF9zaXplLChidWZmZXIsIHNpemUpLAotCSAgIHN0
cmluZ190eXBlICpidWZmZXIgQU5ECi0JICAgdW5zaWduZWQgaW50IHNpemUgKQorc3RhdGljIHZv
aWQgaW5pdF9zdHJpbmdfd2l0aF9zaXplKHN0cmluZ190eXBlICpidWZmZXIsIHVuc2lnbmVkIGlu
dCBzaXplKQogewogICBidWZmZXItPndyaXRlX2lkeCA9IDA7CiAgIGJ1ZmZlci0+c2l6ZSA9IHNp
emU7CiAgIGJ1ZmZlci0+cHRyID0gbWFsbG9jKHNpemUpOwogfQogCi1zdGF0aWMgdm9pZCBERUZV
Tihpbml0X3N0cmluZywoYnVmZmVyKSwKLQkgICBzdHJpbmdfdHlwZSAqYnVmZmVyKQorc3RhdGlj
IHZvaWQgaW5pdF9zdHJpbmcoc3RyaW5nX3R5cGUgKmJ1ZmZlcikKIHsKICAgICBpbml0X3N0cmlu
Z193aXRoX3NpemUoYnVmZmVyLCBERUZfU0laRSk7Ci0KIH0KIAotc3RhdGljIGludCBERUZVTihm
aW5kLCAoc3RyLCB3aGF0KSwKLQkgIHN0cmluZ190eXBlICpzdHIgQU5ECi0JICBjaGFyICp3aGF0
KQorc3RhdGljIGludCBmaW5kKHN0cmluZ190eXBlICpzdHIsIGNvbnN0IGNoYXIgKndoYXQpCiB7
CiAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgY2hhciAqcDsKKyAgICBjb25zdCBjaGFyICpwOwog
ICAgIHAgPSB3aGF0OwotICAgIGZvciAoaSA9IDA7IGkgPCBzdHItPndyaXRlX2lkeCAmJiAqcDsg
aSsrKSAKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3RyLT53cml0ZV9pZHggJiYgKnA7IGkrKykKICAg
ICB7CiAJaWYgKCpwID09IHN0ci0+cHRyW2ldKQogCSBwKys7CkBAIC05OSw1OCArODAsNDIgQEAg
c3RhdGljIGludCBERUZVTihmaW5kLCAoc3RyLCB3aGF0KSwKIAkgcCA9IHdoYXQ7CiAgICAgfQog
ICAgIHJldHVybiAoKnAgPT0gMCk7Ci0gICAgCiB9CiAKLXN0YXRpYyB2b2lkIERFRlVOKHdyaXRl
X2J1ZmZlciwoYnVmZmVyKSwKLQkgICBzdHJpbmdfdHlwZSAqYnVmZmVyKQorc3RhdGljIHZvaWQg
d3JpdGVfYnVmZmVyKHN0cmluZ190eXBlICpidWZmZXIpCiB7CiAgICAgZndyaXRlKGJ1ZmZlci0+
cHRyLCBidWZmZXItPndyaXRlX2lkeCwgMSwgc3Rkb3V0KTsKIH0KIAotCi1zdGF0aWMgdm9pZCBE
RUZVTihkZWxldGVfc3RyaW5nLChidWZmZXIpLAotCSAgIHN0cmluZ190eXBlICpidWZmZXIpCitz
dGF0aWMgdm9pZCBkZWxldGVfc3RyaW5nKHN0cmluZ190eXBlICpidWZmZXIpCiB7CiAgICAgZnJl
ZShidWZmZXItPnB0cik7CiB9CiAKLQotc3RhdGljIGNoYXIgKkRFRlVOKGFkZHIsIChidWZmZXIs
IGlkeCksCi0JICAgIHN0cmluZ190eXBlICpidWZmZXIgQU5ECi0JICAgIHVuc2lnbmVkIGludCBp
ZHgpCitzdGF0aWMgY2hhciAqYWRkcihzdHJpbmdfdHlwZSAqYnVmZmVyLCB1bnNpZ25lZCBpbnQg
aWR4KQogewogICAgIHJldHVybiBidWZmZXItPnB0ciArIGlkeDsKIH0KIAotc3RhdGljIGNoYXIg
REVGVU4oYXQsKGJ1ZmZlciwgcG9zKSwKLQkgICBzdHJpbmdfdHlwZSAqYnVmZmVyIEFORAotCSAg
IHVuc2lnbmVkIGludCBwb3MpIAorc3RhdGljIGNoYXIgYXQoc3RyaW5nX3R5cGUgKmJ1ZmZlciwg
dW5zaWduZWQgaW50IHBvcykKIHsKLSAgICBpZiAoIHBvcyA+PSBidWZmZXItPndyaXRlX2lkeCkg
Ci0gICAgeworICAgIGlmIChwb3MgPj0gYnVmZmVyLT53cml0ZV9pZHgpCiAJcmV0dXJuIDA7Ci0g
ICAgfQogICAgIHJldHVybiBidWZmZXItPnB0cltwb3NdOwogfQogCi1zdGF0aWMgdm9pZCBERUZV
TihjYXRjaGFyLChidWZmZXIsIGNoKSwgCi0JICAgc3RyaW5nX3R5cGUgKmJ1ZmZlciBBTkQKLQkg
ICBjaGFyIGNoKQorc3RhdGljIHZvaWQgY2F0Y2hhcihzdHJpbmdfdHlwZSAqYnVmZmVyLCBjaGFy
IGNoKQogewotICBpZiAoYnVmZmVyLT53cml0ZV9pZHggPT0gYnVmZmVyLT5zaXplKSAKKyAgaWYg
KGJ1ZmZlci0+d3JpdGVfaWR4ID09IGJ1ZmZlci0+c2l6ZSkKICAgewotICAgIGJ1ZmZlci0+c2l6
ZSAqPTI7CisgICAgYnVmZmVyLT5zaXplICo9IDI7CiAgICAgYnVmZmVyLT5wdHIgPSByZWFsbG9j
KGJ1ZmZlci0+cHRyLCBidWZmZXItPnNpemUpOwogICB9CiAKLSAgYnVmZmVyLT5wdHJbYnVmZmVy
LT53cml0ZV9pZHggKysgXSA9IGNoOworICBidWZmZXItPnB0cltidWZmZXItPndyaXRlX2lkeCsr
XSA9IGNoOwogfQogCi0KLXN0YXRpYyB2b2lkIERFRlVOKG92ZXJ3cml0ZV9zdHJpbmcsKGRzdCwg
ICBzcmMpLAotCSAgIHN0cmluZ190eXBlICpkc3QgQU5ECi0JICAgc3RyaW5nX3R5cGUgKnNyYykK
K3N0YXRpYyB2b2lkIG92ZXJ3cml0ZV9zdHJpbmcoc3RyaW5nX3R5cGUgKmRzdCwgc3RyaW5nX3R5
cGUgKnNyYykKIHsKICAgICBmcmVlKGRzdC0+cHRyKTsKICAgICBkc3QtPnNpemUgPSBzcmMtPnNp
emU7CkBAIC0xNTgsMTk2ICsxMjMsMTU5IEBAIHN0YXRpYyB2b2lkIERFRlVOKG92ZXJ3cml0ZV9z
dHJpbmcsKGRzdCwKICAgICBkc3QtPnB0ciA9IHNyYy0+cHRyOwogfQogCi1zdGF0aWMgdm9pZCBE
RUZVTihjYXRzdHIsKGRzdCwgc3JjKSwKLQkgICBzdHJpbmdfdHlwZSAqZHN0IEFORAotCSAgIHN0
cmluZ190eXBlICpzcmMpCitzdGF0aWMgdm9pZCBjYXRzdHIoc3RyaW5nX3R5cGUgKmRzdCwgc3Ry
aW5nX3R5cGUgKnNyYykKIHsKICAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBp
IDwgc3JjLT53cml0ZV9pZHg7IGkrKykgCi0gICAgeworICAgIGZvciAoaSA9IDA7IGkgPCBzcmMt
PndyaXRlX2lkeDsgaSsrKSB7CiAJY2F0Y2hhcihkc3QsIHNyYy0+cHRyW2ldKTsKICAgICB9CiB9
CiAKIAotc3RhdGljIHZvaWQgREVGVU4oY2F0dGV4dCwoYnVmZmVyLCBzdHJpbmcpLAotCSAgIHN0
cmluZ190eXBlICpidWZmZXIgQU5ECi0JICAgY2hhciAqc3RyaW5nKQorc3RhdGljIHZvaWQgY2F0
dGV4dChzdHJpbmdfdHlwZSAqYnVmZmVyLCBjb25zdCBjaGFyICpzdHJpbmcpCiB7Ci0gICAgCi0g
ICAgd2hpbGUgKCpzdHJpbmcpIAorICAgIHdoaWxlICgqc3RyaW5nKQogICAgIHsKIAljYXRjaGFy
KGJ1ZmZlciwgKnN0cmluZyk7CiAJc3RyaW5nKys7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBE
RUZVTihjYXRidWYsKGJ1ZmZlciwgYnVmLCBsZW4pLAotCSAgIHN0cmluZ190eXBlICpidWZmZXIg
QU5ECi0JICAgY2hhciAqYnVmIEFORAotCSAgIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgdm9p
ZCBjYXRidWYoc3RyaW5nX3R5cGUgKmJ1ZmZlciwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBp
bnQgbGVuKQogewotICAgIAotICAgIHdoaWxlIChsZW4tLSkgCisgICAgd2hpbGUgKGxlbi0tKQog
ICAgIHsKIAljYXRjaGFyKGJ1ZmZlciwgKmJ1Zik7CiAJYnVmKys7CiAgICAgfQogfQogCi0KLQot
c3RhdGljIHVuc2lnbmVkIGludCAKLURFRlVOKHNraXBfd2hpdGVfYW5kX3N0YXJzLChzcmMsIGlk
eCksCi0gICAgICBzdHJpbmdfdHlwZSAqc3JjIEFORAotICAgICAgdW5zaWduZWQgaW50IGlkeCkK
K3N0YXRpYyB1bnNpZ25lZCBpbnQgc2tpcF93aGl0ZV9hbmRfc3RhcnMoc3RyaW5nX3R5cGUgKnNy
YywgdW5zaWduZWQgaW50IGlkeCkKIHsKLSAgICB3aGlsZSAoaXNzcGFjZShhdChzcmMsaWR4KSkg
Ci0JICAgfHwgKGF0KHNyYyxpZHgpID09ICcqJyAmJiBhdChzcmMsaWR4ICsxKSAhPScvJykpIAor
ICAgIHdoaWxlIChpc3NwYWNlKGF0KHNyYyxpZHgpKQorCSAgIHx8IChhdChzcmMsaWR4KSA9PSAn
KicgJiYgYXQoc3JjLGlkeCArMSkgIT0nLycpKQogICAgICBpZHgrKzsKICAgICByZXR1cm4gaWR4
OwotICAgIAotCiB9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi1zdHJpbmdfdHlwZSBzdGFja1tT
VEFDS107Ci1zdHJpbmdfdHlwZSAqdG9zOworc3RhdGljIHN0cmluZ190eXBlIHN0YWNrW1NUQUNL
XTsKK3N0YXRpYyBzdHJpbmdfdHlwZSAqdG9zOwogCi11bnNpZ25lZCBpbnQgaWR4ID0gMDsgLyog
UG9zIGluIGlucHV0IGJ1ZmZlciAqLwotc3RyaW5nX3R5cGUgKnB0cjsgLyogYW5kIHRoZSBidWZm
ZXIgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9zID0gMDsgLyogUG9zIGluIGlucHV0IGJ1ZmZl
ciAqLworc3RhdGljIHN0cmluZ190eXBlICpwdHI7IC8qIGFuZCB0aGUgYnVmZmVyICovCiB0eXBl
ZGVmIHZvaWQgKCpzdGluc3RfdHlwZSkoKTsKLXN0aW5zdF90eXBlICpwYzsKLXN0aW5zdF90eXBl
IHNzdGFja1tTVEFDS107Ci1zdGluc3RfdHlwZSAqc3NwID0gJnNzdGFja1swXTsKLSNpZmRlZiBf
V0lONjQKLXR5cGVkZWYgbG9uZyBsb25nCWludHA7CitzdGF0aWMgc3RpbnN0X3R5cGUgKnBjOwor
I2lmZGVmIF9XSU42NAkJCS8qIF9XSU42NCBpcyBfTExQNjQgKi8KK3R5cGVkZWYgbG9uZyBsb25n
IGludAlpbnRwOwogI2Vsc2UKLXR5cGVkZWYgbG9uZwkJaW50cDsKK3R5cGVkZWYgbG9uZyBpbnQJ
aW50cDsKICNlbmRpZgotaW50cCBpc3RhY2tbU1RBQ0tdOwotaW50cCAqaXNwID0gJmlzdGFja1sw
XTsKK3N0YXRpYyBpbnRwIGlzdGFja1tTVEFDS107CitzdGF0aWMgaW50cCAqaXNwID0gJmlzdGFj
a1swXTsKIAogdHlwZWRlZiBpbnQgKndvcmRfdHlwZTsKIAotCi0KIHN0cnVjdCBkaWN0X3N0cnVj
dAogewogICAgIGNoYXIgKndvcmQ7CiAgICAgc3RydWN0IGRpY3Rfc3RydWN0ICpuZXh0OwotICAg
c3RpbnN0X3R5cGUgKmNvZGU7CisgICAgc3RpbnN0X3R5cGUgKmNvZGU7CiAgICAgaW50IGNvZGVf
bGVuZ3RoOwogICAgIGludCBjb2RlX2VuZDsKICAgICBpbnQgdmFyOwotICAgIAogfTsKIHR5cGVk
ZWYgc3RydWN0IGRpY3Rfc3RydWN0IGRpY3RfdHlwZTsKLSNkZWZpbmUgV09SRCh4KSBzdGF0aWMg
dm9pZCB4KCkKIAotc3RhdGljIHZvaWQgREVGVU4oZXhlYywod29yZCksCi0JCSAgZGljdF90eXBl
ICp3b3JkKQorCitzdGF0aWMgdm9pZCBleGVjKGRpY3RfdHlwZSAqd29yZCkKIHsKICAgICBwYyA9
IHdvcmQtPmNvZGU7Ci0gICAgd2hpbGUgKCpwYykgCi0gICAgeworICAgIHdoaWxlICgqcGMpIHsK
IAkoKnBjKSgpOwogICAgIH0KLSAgICAKIH0KLVdPUkQoY2FsbCkKKworc3RhdGljIHZvaWQgY2Fs
bCh2b2lkKQogewotc3RpbnN0X3R5cGUgKm9sZHBjID0gcGM7CisgICAgc3RpbnN0X3R5cGUgKm9s
ZHBjID0gcGM7CiAgICAgZGljdF90eXBlICplOwogICAgIGUgPSAgKGRpY3RfdHlwZSAqKShwYyBb
MV0pOwogICAgIGV4ZWMoZSk7CiAgICAgcGMgPSBvbGRwYyArIDI7Ci0gICAgCiB9CiAKLVdPUkQo
cmVtY2hhcikKK3N0YXRpYyB2b2lkIHJlbWNoYXIodm9pZCkKIHsKLSAgICB0b3MtPndyaXRlX2lk
eC0tOyAgICAKKyAgICB0b3MtPndyaXRlX2lkeC0tOwogICAgIHBjKys7Ci0gICAgCiB9CiAKLVdP
UkQocHVzaF9udW1iZXIpCitzdGF0aWMgdm9pZCBwdXNoX251bWJlcih2b2lkKQogewogICAgIGlz
cCsrOwogICAgIHBjKys7CiAgICAgKmlzcCA9IChpbnRwKSgqcGMpOwogICAgIHBjKys7Ci0gICAg
CiB9CiAKLQotCi0KLVdPUkQocHVzaF90ZXh0KQorc3RhdGljIHZvaWQgcHVzaF90ZXh0KHZvaWQp
CiB7Ci0gICAgCiAgICAgdG9zKys7CiAgICAgaW5pdF9zdHJpbmcodG9zKTsKICAgICBwYysrOwog
ICAgIGNhdHRleHQodG9zLCooKGNoYXIgKiopcGMpKTsKICAgICBwYysrOwotICAgIAogfQogCiAK
LSAgIAogLyogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGV2ZXJ5dGhpbmcgbm90IGluc2lkZSBjb21t
ZW50cyBzdGFydGluZyBvbgogICAgdGhlIGZpcnN0IGNoYXIgb2YgdGhlIGxpbmUgZnJvbSB0aGUg
IHN0cmluZywgYWxzbyB3aGVuIGNvcHlpbmcKLSAgIGNvbW1lbnRzLCByZW1vdmVzIGJsYW5rIHNw
YWNlIGFuZCBsZWFkaW5nIConcyAKKyAgIGNvbW1lbnRzLCByZW1vdmVzIGJsYW5rIHNwYWNlIGFu
ZCBsZWFkaW5nIConcwogICAgQmxhbmsgbGluZXMgYXJlIHR1cm5lZCBpbnRvIG9uZSBibGFuayBs
aW5lCiAgKi8KLQotc3RhdGljIHZvaWQgCi1ERUZVTihyZW1vdmVfbm9uY29tbWVudHMsKHNyYyxk
c3QpLAotCSAgIHN0cmluZ190eXBlICpzcmMgQU5ECi0JICAgc3RyaW5nX3R5cGUgKmRzdCkKK3N0
YXRpYyB2b2lkIHJlbW92ZV9ub25jb21tZW50cyhzdHJpbmdfdHlwZSAqc3JjLCBzdHJpbmdfdHlw
ZSAqZHN0KQogewogICAgIHVuc2lnbmVkIGludCBpZHggPSAwOwotICAgIAotICAgIHdoaWxlIChh
dChzcmMsaWR4KSkgCisKKyAgICB3aGlsZSAoYXQoc3JjLGlkeCkpCiAgICAgewogCS8qIE5vdyBz
ZWUgaWYgd2UgaGF2ZSBhIGNvbW1lbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lICovCi0JaWYg
KGF0KHNyYyxpZHgpID09ICdcbicgCi0JICAgICYmIGF0KHNyYyxpZHgrMSkgPT0gICcvJyAKLQkg
ICAgJiYgYXQoc3JjLGlkeCsyKSA9PSAnKicpIAorCWlmIChhdChzcmMsaWR4KSAgID09ICdcbicg
JiYKKwkgICAgYXQoc3JjLGlkeCsxKSA9PSAgJy8nICYmCisJICAgIGF0KHNyYyxpZHgrMikgPT0g
JyonKQogCXsKLQkgICAgaWR4Kz0zOwotCSAgICAKKwkgICAgaWR4ICs9IDM7CiAJICAgIGlkeCA9
IHNraXBfd2hpdGVfYW5kX3N0YXJzKHNyYyxpZHgpOwogCiAJICAgIC8qIFJlbW92ZSBsZWFkaW5n
IGRvdCAqLwotCSAgICBpZiAoYXQoc3JjLCBpZHgpID09ICcuJykKLQkgICAgIGlkeCsrOwotCSAg
ICAKKwkgICAgaWYgKGF0KHNyYyxpZHgpID09ICcuJykKKwkJaWR4Kys7CisKIAkgICAgLyogQ29w
eSB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLCBvciB0aWxsIHRoZSBlbmQgb2YgdGhlCiAJICAgICAg
IGNvbW1lbnQgKi8KLQkgICAgd2hpbGUgKGF0KHNyYywgaWR4KSkKKwkgICAgd2hpbGUgKGF0KHNy
YyxpZHgpKQogCSAgICB7Ci0JCWlmIChhdChzcmMsIGlkeCkgPT0gJ1xuJykgCisJCWlmIChhdChz
cmMsaWR4KSA9PSAnXG4nKQogCQl7CiAJCSAgICAvKiBlbmQgb2YgbGluZSwgZWNobyBhbmQgc2Ny
YXBlIG9mIGxlYWRpbmcgYmxhbmtzICAqLwogCQkgICAgaWYgKGF0KHNyYyxpZHggKzEpID09ICdc
bicpCi0JCSAgICAgY2F0Y2hhcihkc3QsJ1xuJyk7CisJCQljYXRjaGFyKGRzdCwnXG4nKTsKIAkJ
ICAgIGNhdGNoYXIoZHN0LCdcbicpOwogCQkgICAgaWR4Kys7Ci0JCSAgICBpZHggPSAgIHNraXBf
d2hpdGVfYW5kX3N0YXJzKHNyYywgaWR4KTsKKwkJICAgIGlkeCA9IHNraXBfd2hpdGVfYW5kX3N0
YXJzKHNyYywgaWR4KTsKIAkJfQotCQllbHNlIGlmIChhdChzcmMsIGlkeCkgPT0gJyonICYmIGF0
KHNyYyxpZHgrMSkgPT0gJy8nKSAKKwkJZWxzZSBpZiAoYXQoc3JjLGlkeCkgPT0gJyonICYmIGF0
KHNyYyxpZHgrMSkgPT0gJy8nKQogCQl7Ci0JCSAgICBpZHggKz0yIDsKKwkJICAgIGlkeCArPSAy
OwogCQkgICAgY2F0dGV4dChkc3QsIlxuRU5ERERcbiIpOwogCQkgICAgYnJlYWs7CiAJCX0KLQkJ
ZWxzZSAKKwkJZWxzZQogCQl7Ci0JCSAgICBjYXRjaGFyKGRzdCwgYXQoc3JjLCBpZHgpKTsKKwkJ
ICAgIGNhdGNoYXIoZHN0LCBhdChzcmMsaWR4KSk7CiAJCSAgICBpZHgrKzsKIAkJfQogCSAgICB9
CkBAIC0zNTUsOTkgKzI4Myw5MCBAQCBERUZVTihyZW1vdmVfbm9uY29tbWVudHMsKHNyYyxkc3Qp
LAogCWVsc2UgaWR4Kys7CiAgICAgfQogfQotLyogdHVybiBmb29iYXIgbmFtZShzdHVmZik7IGlu
dG8gZm9vYmFyIEVYRlVOKG5hbWUsKHN0dWZmKSk7CiAKKy8qIHR1cm4gZm9vYmFyIG5hbWUoc3R1
ZmYpOyBpbnRvIGZvb2JhciBFWEZVTihuYW1lLChzdHVmZikpOwogICovCi0KLXN0YXRpYyB2b2lk
Ci1ERUZVTl9WT0lEKGV4ZnVuc3R1ZmYpCitzdGF0aWMgdm9pZCBleGZ1bnN0dWZmKHZvaWQpCiB7
CiAgICAgdW5zaWduZWQgaW50IG9wZW5wOwogICAgIHVuc2lnbmVkIGludCBmbmFtZTsKICAgICB1
bnNpZ25lZCBpbnQgaWR4OwogICAgIHN0cmluZ190eXBlIG91dDsKICAgICBpbml0X3N0cmluZygm
b3V0KTsKLSAgICAKIAogICAgIC8qIG1ha2Ugc3VyZSB0aGF0IGl0J3Mgbm90IGFscmVhZHkgZXhm
dW5lZCAqLwotICAgIGlmKGZpbmQodG9zLCJFWEZVTiIpIHx8IGZpbmQodG9zLCJQUk9UTyIpIHx8
ICFmaW5kKHRvcywiKCIpKSB7Ci0JICAgIGNhdHN0cigmb3V0LHRvcyk7Ci0JfQotICAgIGVsc2Ug
CisgICAgaWYgKGZpbmQodG9zLCJFWEZVTiIpIHx8IGZpbmQodG9zLCJQUk9UTyIpIHx8ICFmaW5k
KHRvcywiKCIpKSB7CisJY2F0c3RyKCZvdXQsdG9zKTsKKyAgICB9CisgICAgZWxzZQogICAgIHsK
LQkKIAkvKkZpbmQgdGhlIG9wZW4gcGFyZW4qLwotCWZvciAob3BlbnAgPSAwOyBhdCh0b3MsIG9w
ZW5wKSAhPSAnKCcgICYmIGF0KHRvcyxvcGVucCk7IG9wZW5wKyspCi0JIDsKKwlmb3IgKG9wZW5w
ID0gMDsgYXQodG9zLG9wZW5wKSAhPSAnKCcgJiYgYXQodG9zLG9wZW5wKTsgb3BlbnArKykKKwkg
ICA7CiAKIAlmbmFtZSA9IG9wZW5wOwogCS8qIFN0ZXAgYmFjayB0byB0aGUgZm5hbWUgKi8KIAlm
bmFtZS0tOwotCXdoaWxlIChmbmFtZSAmJiBpc3NwYWNlKGF0KHRvcywgZm5hbWUpKSkKLQkgZm5h
bWUgLS07CisJd2hpbGUgKGZuYW1lICYmIGlzc3BhY2UoYXQodG9zLGZuYW1lKSkpCisJICAgIGZu
YW1lIC0tOwogCXdoaWxlIChmbmFtZSAmJiAhaXNzcGFjZShhdCh0b3MsZm5hbWUpKSAmJiBhdCh0
b3MsZm5hbWUpICE9ICcqJykKLQkgZm5hbWUtLTsKKwkgICAgZm5hbWUtLTsKIAogCWZuYW1lKys7
Ci0JCi0JZm9yIChpZHggPSAwOyBpZHggPCBmbmFtZTsgaWR4KyspIAorCisJZm9yIChpZHggPSAw
OyBpZHggPCBmbmFtZTsgaWR4KyspCiAJewogCSAgICBjYXRjaGFyKCZvdXQsIGF0KHRvcyxpZHgp
KTsKIAl9Ci0gICAgCisKIAljYXR0ZXh0KCZvdXQsIkVYRlVOKCIpOwotCWZvciAoaWR4ID0gZm5h
bWU7IGlkeCA8IG9wZW5wOyBpZHgrKykgCisJZm9yIChpZHggPSBmbmFtZTsgaWR4IDwgb3BlbnA7
IGlkeCsrKQogCXsKIAkgICAgY2F0Y2hhcigmb3V0LCBhdCh0b3MsaWR4KSk7CiAJfQogCWNhdHRl
eHQoJm91dCwiLCAiKTsKLQl3aGlsZSAoYXQodG9zLGlkeCkgJiYgYXQodG9zLGlkeCkgIT0nOycp
IAorCXdoaWxlIChhdCh0b3MsaWR4KSAmJiBhdCh0b3MsaWR4KSAhPSc7JykKIAl7Ci0JICAgIGNh
dGNoYXIoJm91dCwgYXQodG9zLCBpZHgpKTsKKwkgICAgY2F0Y2hhcigmb3V0LCBhdCh0b3MsaWR4
KSk7CiAJICAgIGlkeCsrOwogCX0KIAljYXR0ZXh0KCZvdXQsIik7XG4iKTsKICAgICB9Ci0gICAg
b3ZlcndyaXRlX3N0cmluZyh0b3MsICZvdXQpOyAgICAKKyAgICBvdmVyd3JpdGVfc3RyaW5nKHRv
cywgJm91dCk7CiAgICAgcGMrKzsKLSAgICAKIH0KIAogCi0KIC8qIHR1cm4geyoKICAgIGFuZCAq
fSBpbnRvIGNvbW1lbnRzICovCiAKLVdPUkQodHJhbnNsYXRlY29tbWVudHMpCitzdGF0aWMgdm9p
ZCB0cmFuc2xhdGVjb21tZW50cyh2b2lkKQogewogICAgIHVuc2lnbmVkIGludCBpZHggPSAwOwog
ICAgIHN0cmluZ190eXBlIG91dDsKICAgICBpbml0X3N0cmluZygmb3V0KTsKLSAgICAKLSAgICB3
aGlsZSAoYXQodG9zLCBpZHgpKSAKKworICAgIHdoaWxlIChhdCh0b3MsaWR4KSkKICAgICB7Ci0J
aWYgKGF0KHRvcyxpZHgpID09ICd7JyAmJiBhdCh0b3MsaWR4KzEpID09JyonKSAKKwlpZiAoYXQo
dG9zLGlkeCkgPT0gJ3snICYmIGF0KHRvcyxpZHgrMSkgPT0nKicpCiAJewogCSAgICBjYXR0ZXh0
KCZvdXQsIgkvKiIpOwotCSAgICBpZHgrPTI7CisJICAgIGlkeCArPSAyOwogCX0KLQllbHNlIGlm
IChhdCh0b3MsaWR4KSA9PSAnKicgJiYgYXQodG9zLGlkeCsxKSA9PSd9JykgCisJZWxzZSBpZiAo
YXQodG9zLGlkeCkgPT0gJyonICYmIGF0KHRvcyxpZHgrMSkgPT0nfScpCiAJewogCSAgICBjYXR0
ZXh0KCZvdXQsIiovIik7Ci0JICAgIGlkeCs9MjsKKwkgICAgaWR4ICs9IDI7CiAJfQotCWVsc2Ug
IAorCWVsc2UKIAl7Ci0JICAgIGNhdGNoYXIoJm91dCwgYXQodG9zLCBpZHgpKTsKKwkgICAgY2F0
Y2hhcigmb3V0LCBhdCh0b3MsaWR4KSk7CiAJICAgIGlkeCsrOwogCX0KICAgICB9CiAKLQogICAg
IG92ZXJ3cml0ZV9zdHJpbmcodG9zLCAmb3V0KTsKLSAgICAKICAgICBwYysrOwotICAgIAogfQog
CiAvKiBmaW5kIHNvbWV0aGluZyBsaWtlCkBAIC00NTYsMzYgKzM3NSwzMiBAQCBXT1JEKHRyYW5z
bGF0ZWNvbW1lbnRzKQogCiAgICAgIGludG8KICAgICAgbWVyZ2Ugd2l0aCB3b3JkcyBvbiB0b3Mg
YW5kIG91dHB1dCB0aGVtIHRvIHN0ZGVycm9yCi0KICovCi1XT1JEKHF1aWNrcmVmKQorc3RhdGlj
IHZvaWQgcXVpY2tyZWYodm9pZCkKIHsKICAgc3RyaW5nX3R5cGUgKm5vcyA9IHRvcy0xOwotICB1
bnNpZ25lZCBpbnQgc2Nhbj0wOwogICB1bnNpZ25lZCBpbnQgbm9zc2NhbiA9IDA7CiAgIHVuc2ln
bmVkIGludCBpZHggPSAwOwotICAKLSAgd2hpbGUgKGF0KHRvcywgaWR4KSkgCisKKyAgd2hpbGUg
KGF0KHRvcyxpZHgpKQogICB7CiAgICAgaWYgKGF0KHRvcyxpZHgpID09ICd+JykKICAgICB7CiAg
ICAgICAvKiBTa2lwIHRoZSB3aGl0ZXNwYWNlICovCi0gICAgICB3aGlsZSAoYXQobm9zLCBub3Nz
Y2FuKSA9PSAnICcpCi0gICAgICAgbm9zc2NhbisrOwotICAgIAorICAgICAgd2hpbGUgKGF0KG5v
cyxub3NzY2FuKSA9PSAnICcpCisJbm9zc2NhbisrOworCiAgICAgICAvKiBTdWIgdGhlIG5leHQg
d29yZCBmcm9tIHRoZSBub3MqLwotICAgICAgd2hpbGUgKGF0KG5vcywgbm9zc2NhbikgIT0gJyAn
ICYmCi0JICAgICBhdChub3MsIG5vc3NjYW4pICE9IDApCisgICAgICB3aGlsZSAoYXQobm9zLG5v
c3NjYW4pICE9ICcgJyAmJgorCSAgICAgYXQobm9zLG5vc3NjYW4pICE9IDApCiAgICAgICB7Ci0J
ZnByaW50ZihzdGRlcnIsICIlYyIsIGF0KG5vcywgbm9zc2NhbikpOworCWZwcmludGYoc3RkZXJy
LCAiJWMiLCBhdChub3Msbm9zc2NhbikpOwogCW5vc3NjYW4rKzsKICAgICAgIH0KICAgICB9Ci0g
IAotICAgIGVsc2UgCisgICAgZWxzZQogICAgIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCIlYyIs
IGF0KHRvcywgaWR4KSk7Ci0gICAgCisgICAgICBmcHJpbnRmKHN0ZGVyciwiJWMiLCBhdCh0b3Ms
aWR4KSk7CiAgICAgfQogICAgIGlkeCsrOwogICB9CkBAIC00OTQsMTIzICs0MDksODIgQEAgV09S
RChxdWlja3JlZikKICAgZGVsZXRlX3N0cmluZyhub3MpOwogICB0b3MtPTI7CiAgIHBjKys7Ci0g
IAotfQotCi0vKiB0dXJuIGV2ZXJ5dGhpbmcgbm90IHN0YXJ0aW5nIHdpdGggYSAuIGludG8gYSBj
b21tZW50ICovCi0KLVdPUkQobWFuZ2xlY29tbWVudHMpCi17Ci0gICAgdW5zaWduZWQgaW50IGlk
eCA9IDA7Ci0gICAgc3RyaW5nX3R5cGUgb3V0OwotICAgIGluaXRfc3RyaW5nKCZvdXQpOwotICAg
IAotICAgIHdoaWxlIChhdCh0b3MsIGlkeCkpIAotICAgIHsKLQlpZiAoYXQodG9zLGlkeCkgPT0g
J1xuJyAmJiBhdCh0b3MsaWR4KzEpID09JyonKSAKLQl7Ci0JICAgIGNhdHRleHQoJm91dCwiCS8q
Iik7Ci0JICAgIGlkeCs9MjsKLQl9Ci0JZWxzZSBpZiAoYXQodG9zLGlkeCkgPT0gJyonICYmIGF0
KHRvcyxpZHgrMSkgPT0nfScpIAotCXsKLQkgICAgY2F0dGV4dCgmb3V0LCIqLyIpOwotCSAgICBp
ZHgrPTI7Ci0JfQotCWVsc2UgIAotCXsKLQkgICAgY2F0Y2hhcigmb3V0LCBhdCh0b3MsIGlkeCkp
OwotCSAgICBpZHgrKzsKLQl9Ci0gICAgfQotCi0KLSAgICBvdmVyd3JpdGVfc3RyaW5nKHRvcywg
Jm91dCk7Ci0gICAgCi0gICAgcGMrKzsKLSAgICAKIH0KIAogLyogTW9kIHRvcyBzbyB0aGF0IG9u
bHkgbGluZXMgd2l0aCBsZWFkaW5nIGRvdHMgcmVtYWluICovCi1zdGF0aWMgdm9pZAotREVGVU5f
Vk9JRChvdXRwdXRkb3RzKQorc3RhdGljIHZvaWQgb3V0cHV0ZG90cyh2b2lkKQogewogICAgIHVu
c2lnbmVkIGludCBpZHggPSAwOwogICAgIHN0cmluZ190eXBlIG91dDsKICAgICBpbml0X3N0cmlu
Zygmb3V0KTsKLSAgICAKLSAgICB3aGlsZSAoYXQodG9zLCBpZHgpKSAKKworICAgIHdoaWxlIChh
dCh0b3MsaWR4KSkKICAgICB7Ci0JaWYgKGF0KHRvcywgaWR4KSA9PSAnXG4nICYmIGF0KHRvcywg
aWR4KzEpID09ICcuJykgCisJaWYgKGF0KHRvcyxpZHgpID09ICdcbicgJiYgYXQodG9zLGlkeCsx
KSA9PSAnLicpCiAJewogCSAgICBpZHggKz0gMjsKLQkgICAgCi0JICAgIHdoaWxlIChhdCh0b3Ms
IGlkeCkgJiYgYXQodG9zLCBpZHgpIT0nXG4nKQorCSAgICB3aGlsZSAoYXQodG9zLGlkeCkgJiYg
YXQodG9zLGlkeCkgIT0nXG4nKQogCSAgICB7Ci0JCWlmIChhdCh0b3MsaWR4KSA9PSAneycgJiYg
YXQodG9zLGlkeCsxKSA9PScqJykgCisJCWlmIChhdCh0b3MsaWR4KSA9PSAneycgJiYgYXQodG9z
LGlkeCsxKSA9PScqJykKIAkJewogCQkgICAgY2F0dGV4dCgmb3V0LCIgLyoiKTsKLQkJICAgIGlk
eCs9MjsKKwkJICAgIGlkeCArPSAyOwogCQl9Ci0JCWVsc2UgaWYgKGF0KHRvcyxpZHgpID09ICcq
JyAmJiBhdCh0b3MsaWR4KzEpID09J30nKSAKKwkJZWxzZSBpZiAoYXQodG9zLGlkeCkgPT0gJyon
ICYmIGF0KHRvcyxpZHgrMSkgPT0nfScpCiAJCXsKIAkJICAgIGNhdHRleHQoJm91dCwiKi8iKTsK
LQkJICAgIGlkeCs9MjsKKwkJICAgIGlkeCArPSAyOwogCQl9Ci0JCWVsc2UgIAorCQllbHNlCiAJ
CXsKLQkJICAgIGNhdGNoYXIoJm91dCwgYXQodG9zLCBpZHgpKTsKKwkJICAgIGNhdGNoYXIoJm91
dCwgYXQodG9zLGlkeCkpOwogCQkgICAgaWR4Kys7CiAJCX0KIAkgICAgfQogCSAgICBjYXRjaGFy
KCZvdXQsJ1xuJyk7CiAJfQotCWVsc2UgCisJZWxzZQogCXsKIAkgICAgaWR4Kys7CiAJfQotICAg
IH0JCisgICAgfQogCiAgICAgb3ZlcndyaXRlX3N0cmluZyh0b3MsICZvdXQpOwogICAgIHBjKys7
Ci0gICAgCiB9CiAKIC8qIEZpbmQgbGluZXMgc3RhcnRpbmcgd2l0aCAuIGFuZCB8IGFuZCBwdXQg
ZXhhbXBsZSBhcm91bmQgdGhlbSBvbiB0b3MKLSAgIHR1cm4gCisgICB0dXJuCiAgICB7KiAgaW50
byBvcGVuIGNvbW1lbnQgYW5kICp9IGludG8gY2xvc2UgY29tbWVudAogICAgZXNjYXBlIGN1cmxp
ZXMKLSAgIAogKi8KLVdPUkQoY291cmllcml6ZSkKK3N0YXRpYyB2b2lkIGNvdXJpZXJpemUodm9p
ZCkKIHsKICAgICBzdHJpbmdfdHlwZSBvdXQ7CiAgICAgdW5zaWduZWQgaW50IGlkeCA9IDA7Ci0g
ICAgCisKICAgICBpbml0X3N0cmluZygmb3V0KTsKLSAgICAKLSAgICB3aGlsZSAoYXQodG9zLCBp
ZHgpKSAKKworICAgIHdoaWxlIChhdCh0b3MsaWR4KSkKICAgICB7Ci0JaWYgKGF0KHRvcywgaWR4
KSA9PSAnXG4nIAotCSAgICAmJiAoYXQodG9zLCBpZHggKzEgKSA9PSAnLicKLQkJfHwgYXQodG9z
LGlkeCsxKSA9PSAnfCcpKSAKKwlpZiAoYXQodG9zLGlkeCkgPT0gJ1xuJyAmJgorCSAgICAoYXQo
dG9zLGlkeCsxKSA9PSAnLicgfHwgYXQodG9zLGlkeCsxKSA9PSAnfCcpKQogCXsKIAkgICAgY2F0
dGV4dCgmb3V0LCJcbkBzbWFsbGV4YW1wbGVcbiIpOwotCSAgICBkbyAKKwkgICAgZG8KIAkgICAg
ewogCQlpZHggKz0gMjsKLQkJCi0JCXdoaWxlIChhdCh0b3MsIGlkeCkgJiYgYXQodG9zLCBpZHgp
IT0nXG4nKQorCQl3aGlsZSAoYXQodG9zLGlkeCkgJiYgYXQodG9zLGlkeCkhPSdcbicpCiAJCXsK
LQkJICAgIGlmIChhdCh0b3MsaWR4KT09J3snICYmIGF0KHRvcyxpZHgrMSkgPT0nKicpIAorCQkg
ICAgaWYgKGF0KHRvcyxpZHgpPT0neycgJiYgYXQodG9zLGlkeCsxKSA9PScqJykKIAkJICAgIHsK
IAkJCWNhdHRleHQoJm91dCwiIC8qIik7Ci0JCQlpZHgrPTI7CisJCQlpZHggKz0gMjsKIAkJICAg
IH0KLQkJICAgIGVsc2UgaWYgKGF0KHRvcyxpZHgpPT0nKicgJiYgYXQodG9zLGlkeCsxKSA9PSd9
JykgCisJCSAgICBlbHNlIGlmIChhdCh0b3MsaWR4KT09JyonICYmIGF0KHRvcyxpZHgrMSkgPT0n
fScpCiAJCSAgICB7CiAJCQljYXR0ZXh0KCZvdXQsIiovIik7Ci0JCQlpZHgrPTI7CisJCQlpZHgg
Kz0gMjsKIAkJICAgIH0KIAkgICAgICAgICAgICBlbHNlIGlmIChhdCh0b3MsaWR4KSA9PSAneycp
CiAJCSAgICB7CkBAIC02MjIsMzQgKzQ5NiwzMSBAQCBXT1JEKGNvdXJpZXJpemUpCiAJCQljYXR0
ZXh0KCZvdXQsIkB9Iik7CiAJCQlpZHgrKzsKIAkJICAgIH0KLQkJICAgIGVsc2UgCisJCSAgICBl
bHNlCiAJCSAgICB7Ci0JCQljYXRjaGFyKCZvdXQsIGF0KHRvcywgaWR4KSk7CisJCQljYXRjaGFy
KCZvdXQsIGF0KHRvcyxpZHgpKTsKIAkJCWlkeCsrOwogCQkgICAgfQotCQkgICAgCiAJCX0KIAkJ
Y2F0Y2hhcigmb3V0LCdcbicpOwotCSAgICB9ICAKLQkgICAgd2hpbGUgKGF0KHRvcywgaWR4KSA9
PSAnXG4nIAotCQkgICAmJiAoYXQodG9zLCBpZHgrMSkgPT0gJy4nKQotCQkgICB8fCAoYXQodG9z
LGlkeCsxKSA9PSAnfCcpKTsKKwkgICAgfQorCSAgICB3aGlsZSAoYXQodG9zLGlkeCkgPT0gJ1xu
JworCQkgICAmJiAoKGF0KHRvcyxpZHgrMSkgPT0gJy4nKSB8fCAoYXQodG9zLGlkeCsxKSA9PSAn
fCcpKSk7CisKIAkgICAgY2F0dGV4dCgmb3V0LCJAZW5kIHNtYWxsZXhhbXBsZSIpOwogCX0KLQll
bHNlIAotCXsgICAgCi0JICAgIGNhdGNoYXIoJm91dCwgYXQodG9zLCBpZHgpKTsKKwllbHNlCisJ
eworCSAgICBjYXRjaGFyKCZvdXQsIGF0KHRvcyxpZHgpKTsKIAkgICAgaWR4Kys7CiAJfQotICAg
IH0gICAgCisgICAgfQogCiAgICAgb3ZlcndyaXRlX3N0cmluZyh0b3MsICZvdXQpOwogICAgIHBj
Kys7Ci0KLSAgICAKIH0KIAotLyogCisvKgogICAgTysgIGVtaXQgQGl0ZW1pemUgQGJ1bGxldAog
ICAgT08gIGVtaXQgQGl0ZW0KICAgIE8tICBlbWl0IEBlbmQgaXRlbWl6ZQpAQCAtNjU4LDY0ICs1
MjksNTggQEAgV09SRChjb3VyaWVyaXplKQogICAgb28gIEBpdGVtCiAgICBvLSAgZW1pdCBAZW5k
IHRhYmxlCiAqLwotCi0KLVdPUkQoYnVsbGV0aXplKQorc3RhdGljIHZvaWQgYnVsbGV0aXplKHZv
aWQpCiB7CiAgIHVuc2lnbmVkIGludCBpZHggPSAwOwotICBpbnQgb24gPSAwOwogICBzdHJpbmdf
dHlwZSBvdXQ7CiAgIGluaXRfc3RyaW5nKCZvdXQpOwotICAgIAotICB3aGlsZSAoYXQodG9zLCBp
ZHgpKSB7Ci0gICAgICBpZiAoYXQodG9zLCBpZHgpID09ICdAJyAmJgotCSAgYXQodG9zLCBpZHgr
MSkgPT0gJyonKSAKKworICB3aGlsZSAoYXQodG9zLGlkeCkpIHsKKyAgICAgIGlmIChhdCh0b3Ms
aWR4KSAgID09ICdAJyAmJgorCSAgYXQodG9zLGlkeCsxKSA9PSAnKicpCiAgICAgICB7CiAJY2F0
dGV4dCgmb3V0LCIqIik7Ci0JaWR4Kz0yOworCWlkeCArPSAyOwogICAgICAgfQotCQogICAgICAg
ZWxzZQotICAgICAgIGlmIChhdCh0b3MsIGlkeCkgPT0gJ1xuJyAmJiAgYXQodG9zLCBpZHgrMSkg
PT0gJ28nKQorICAgICAgIGlmIChhdCh0b3MsaWR4KSA9PSAnXG4nICYmICBhdCh0b3MsaWR4KzEp
ID09ICdvJykKICAgICAgICB7CiAJIGlmIChhdCh0b3MsaWR4KzIpID09ICcrJykgewogCSAgICAg
Y2F0dGV4dCgmb3V0LCJcbkB0YWJsZSBAY29kZVxuIik7Ci0JICAgICBpZHgrPTM7CisJICAgICBp
ZHggKz0gMzsKIAkgICB9CiAJIGVsc2UgaWYgKGF0KHRvcyxpZHgrMikgPT0gJy0nKSB7CiAJICAg
ICBjYXR0ZXh0KCZvdXQsIlxuQGVuZCB0YWJsZVxuIik7Ci0JICAgICBpZHgrPTM7CisJICAgICBp
ZHggKz0gMzsKIAkgICB9CiAJIGVsc2UgaWYgKGlzc3BhY2UoYXQodG9zLGlkeCsyKSkpIHsKIAkg
ICAgIGNhdHRleHQoJm91dCwiXG5AaXRlbSAiKTsKLQkgICAgIGlkeCs9MzsKKwkgICAgIGlkeCAr
PSAzOwogCSAgIH0KIAkgZWxzZSB7Ci0JICAgICBjYXRjaGFyKCZvdXQsIGF0KHRvcywgaWR4KSk7
CisJICAgICBjYXRjaGFyKCZvdXQsIGF0KHRvcyxpZHgpKTsKIAkgICAgIGlkeCsrOwogCSAgIH0K
ICAgICAgICB9Ci0gICAgICAKICAgICAgICBlbHNlCi0JaWYgKGF0KHRvcywgaWR4KSA9PSAnXG4n
ICYmICBhdCh0b3MsIGlkeCsxKSA9PSAnTycpCisJaWYgKGF0KHRvcyxpZHgpID09ICdcbicgJiYg
IGF0KHRvcyxpZHgrMSkgPT0gJ08nKQogCXsKIAkgIGlmIChhdCh0b3MsaWR4KzIpID09ICcrJykg
ewogCSAgICAgIGNhdHRleHQoJm91dCwiXG5AaXRlbWl6ZSBAYnVsbGV0XG4iKTsKLQkgICAgICBp
ZHgrPTM7Ci0JICAgIH0KLQorCSAgICAgIGlkeCArPSAzOworCSAgfQogCSAgZWxzZSBpZiAoYXQo
dG9zLGlkeCsyKSA9PSAnLScpIHsKIAkgICAgICBjYXR0ZXh0KCZvdXQsIlxuQGVuZCBpdGVtaXpl
XG4iKTsKLQkgICAgICBpZHgrPTM7Ci0JICAgIH0KKwkgICAgICBpZHggKz0gMzsKKwkgIH0KIAkg
IGVsc2UgewotCSAgICAgIGNhdGNoYXIoJm91dCwgYXQodG9zLCBpZHgpKTsKKwkgICAgICBjYXRj
aGFyKCZvdXQsIGF0KHRvcyxpZHgpKTsKIAkgICAgICBpZHgrKzsKLQkgICAgfQotCX0JICAgICAg
CisJICB9CisJfQogCWVsc2UKIAl7Ci0JICBjYXRjaGFyKCZvdXQsIGF0KHRvcywgaWR4KSk7CisJ
ICBjYXRjaGFyKCZvdXQsIGF0KHRvcyxpZHgpKTsKIAkgIGlkeCsrOwogCX0KICAgICB9CkBAIC03
MjMsMTYyICs1ODgsMTM2IEBAIFdPUkQoYnVsbGV0aXplKQogICBkZWxldGVfc3RyaW5nKHRvcyk7
CiAgICp0b3MgPSBvdXQ7CiAgIHBjKys7Ci0gICAgCiB9CiAKLS8qIFR1cm4gPDxmb28+PiBpbnRv
IEBjb2Rle2Zvb30gaW4gcGxhY2UgYXQgVE9TIAorLyogVHVybiA8PGZvbz4+IGludG8gQGNvZGV7
Zm9vfSBpbiBwbGFjZSBhdCBUT1MKICAgIFR1cm4gPFtmb29dPiBpbnRvIEB2YXJ7Zm9vfSBpbiBw
bGFjZSBhdCBUT1MKICAgIG5lc3QgdGhlbSB0b28gIQotCiAqLwotICAgCi0KLVdPUkQoZG9fZmFu
Y3lfc3R1ZmYpCi0geworc3RhdGljIHZvaWQgZG9fZmFuY3lfc3R1ZmYodm9pZCkKK3sKICAgICB1
bnNpZ25lZCBpbnQgaWR4ID0gMDsKICAgICBzdHJpbmdfdHlwZSBvdXQ7CisKICAgICBpbml0X3N0
cmluZygmb3V0KTsKLSAgICB3aGlsZSAoYXQodG9zLCBpZHgpKSAKKyAgICB3aGlsZSAoYXQodG9z
LGlkeCkpCiAgICAgewotCWlmIChhdCh0b3MsIGlkeCkgPT0gJzwnIAotCSAgICAmJiBhdCh0b3Ms
IGlkeCsxKSA9PSAnPCcKLQkgICAgJiYgKCFpc3NwYWNlKGF0KHRvcyxpZHggKyAyKSkgfHwgYXQo
dG9zLGlkeCszKSA9PSAnPicpKSAKKwlpZiAoYXQodG9zLGlkeCkgPT0gJzwnICYmIGF0KHRvcyxp
ZHgrMSkgPT0gJzwnICYmCisJICAgICghaXNzcGFjZShhdCh0b3MsaWR4KzIpKSB8fCBhdCh0b3Ms
aWR4KzMpID09ICc+JykpCiAJewogCSAgICAvKiBUaGlzIHF1YWxpZmllcyBhcyBhIDw8IHN0YXJ0
dXAgKi8KLQkgICAgaWR4ICs9MjsKKwkgICAgaWR4ICs9IDI7CiAJICAgIGNhdHRleHQoJm91dCwi
QGNvZGV7Iik7Ci0JICB9Ci0JCi0JZWxzZSAJaWYgKGF0KHRvcywgaWR4KSA9PSAnPCcgCi0JICAg
ICYmIGF0KHRvcywgaWR4KzEpID09ICdbJwotCSAgICAmJiAhaXNzcGFjZShhdCh0b3MsaWR4ICsg
MikpKSAKKwl9CisJZWxzZSBpZiAoYXQodG9zLGlkeCkgICA9PSAnPCcgJiYKKwkJIGF0KHRvcyxp
ZHgrMSkgPT0gJ1snICYmCisJCSAhaXNzcGFjZShhdCh0b3MsaWR4KzIpKSkKIAl7CiAJICAgIC8q
IFRoaXMgcXVhbGlmaWVzIGFzIGEgPFsgc3RhcnR1cCAqLwotCSAgICBpZHggKz0yOworCSAgICBp
ZHggKz0gMjsKIAkgICAgY2F0dGV4dCgmb3V0LCJAdmFyeyIpOwotCSAgfQotCWVsc2UgaWYgKGF0
KHRvcywgaWR4KSA9PSAnPicgCi0JCSAmJiBhdCh0b3MsaWR4KzEpID09Jz4nKSAKKwl9CisJZWxz
ZSBpZiAoYXQodG9zLGlkeCkgPT0gJz4nICYmIGF0KHRvcyxpZHgrMSkgPT0nPicpCiAJewotCSAg
CiAJICAgIGNhdHRleHQoJm91dCwifSIpOwotCSAgICBpZHgrPTI7CisJICAgIGlkeCArPSAyOwog
CX0KLQllbHNlIGlmIChhdCh0b3MsIGlkeCkgPT0gJ10nIAotCQkgJiYgYXQodG9zLGlkeCsxKSA9
PSc+JykgCisJZWxzZSBpZiAoYXQodG9zLGlkeCkgPT0gJ10nICYmIGF0KHRvcyxpZHgrMSkgPT0n
PicpCiAJewogCSAgICBjYXR0ZXh0KCZvdXQsIn0iKTsKLQkgICAgaWR4Kz0yOworCSAgICBpZHgg
Kz0gMjsKIAl9Ci0JZWxzZSAKKwllbHNlCiAJewotCSAgICBjYXRjaGFyKCZvdXQsIGF0KHRvcywg
aWR4KSk7CisJICAgIGNhdGNoYXIoJm91dCwgYXQodG9zLGlkeCkpOwogCSAgICBpZHgrKzsKIAl9
CiAgICAgfQogICAgIGRlbGV0ZV9zdHJpbmcodG9zKTsKICAgICAqdG9zID0gb3V0OwogICAgIHBj
Kys7Ci0gICAgCiB9CisKIC8qIEEgY29tbWFuZCBpcyBhbGwgdXBwZXIgY2FzZSxhbmQgYWxvbmUg
b24gYSBsaW5lICovCi1zdGF0aWMgaW50IAotREVGVU4oIGlzY29tbWFuZCwocHRyLCBpZHgpLAot
ICAgICAgc3RyaW5nX3R5cGUgKnB0ciBBTkQKLSAgICAgIHVuc2lnbmVkIGludCBpZHgpCitzdGF0
aWMgaW50IGlzY29tbWFuZChzdHJpbmdfdHlwZSAqcywgdW5zaWduZWQgaW50IGlkeCkKIHsKICAg
ICB1bnNpZ25lZCBpbnQgbGVuID0gMDsKLSAgICB3aGlsZSAoYXQocHRyLGlkeCkpIHsKLQkgICAg
aWYgKGlzdXBwZXIoYXQocHRyLGlkeCkpIHx8IGF0KHB0cixpZHgpID09ICcgJyB8fAotCQlhdChw
dHIsaWR4KSA9PSAnXycpIAorICAgIHdoaWxlIChhdChzLGlkeCkpIHsKKwkgICAgaWYgKGlzdXBw
ZXIoYXQocyxpZHgpKSB8fCBhdChzLGlkeCkgPT0gJyAnIHx8CisJCWF0KHMsaWR4KSA9PSAnXycp
CiAJICAgIHsKLQkgICAgIGxlbisrOwotCSAgICAgaWR4Kys7Ci0JIH0KLQkgICAgZWxzZSBpZihh
dChwdHIsaWR4KSA9PSAnXG4nKQorCQlsZW4rKzsKKwkJaWR4Kys7CisJICAgIH0KKwkgICAgZWxz
ZSBpZihhdChzLGlkeCkgPT0gJ1xuJykKIAkgICAgewotCQlpZiAobGVuID40KSByZXR1cm4gMTsK
KwkJaWYgKGxlbiA+IDQpCisJCSAgICByZXR1cm4gMTsKIAkJcmV0dXJuIDA7CiAJICAgIH0KIAkg
ICAgZWxzZSByZXR1cm4gMDsKIAl9CiAgICAgcmV0dXJuIDA7Ci0KIH0KIAotCi1ERUZVTihjb3B5
X3Bhc3RfbmV3bGluZSwocHRyLCBpZHgsIGRzdCksCi0gICAgICBzdHJpbmdfdHlwZSAqcHRyIEFO
RAotICAgICAgdW5zaWduZWQgaW50IGlkeCBBTkQKLSAgICAgIHN0cmluZ190eXBlICpkc3QpCitz
dGF0aWMgaW50IGNvcHlfcGFzdF9uZXdsaW5lKHN0cmluZ190eXBlICpzLCB1bnNpZ25lZCBpbnQg
aWR4LCBzdHJpbmdfdHlwZSAqZHN0KQogewotICAgIHdoaWxlIChhdChwdHIsIGlkeCkgJiYgYXQo
cHRyLCBpZHgpICE9ICdcbicpIAorICAgIHdoaWxlIChhdChzLGlkeCkgJiYgYXQocyxpZHgpICE9
ICdcbicpIAogICAgIHsKLQljYXRjaGFyKGRzdCwgYXQocHRyLCBpZHgpKTsKKwljYXRjaGFyKGRz
dCwgYXQocyxpZHgpKTsKIAlpZHgrKzsKLQkKLSAgICB9ICAgIAotICAgIGNhdGNoYXIoZHN0LCBh
dChwdHIsIGlkeCkpOworICAgIH0KKyAgICBjYXRjaGFyKGRzdCwgYXQocyxpZHgpKTsKICAgICBp
ZHgrKzsKICAgICByZXR1cm4gaWR4OwotCiB9CiAKLVdPUkQoaWNvcHlfcGFzdF9uZXdsaW5lKQor
c3RhdGljIHZvaWQgaWNvcHlfcGFzdF9uZXdsaW5lKHZvaWQpCiB7CiAgICAgdG9zKys7CiAgICAg
aW5pdF9zdHJpbmcodG9zKTsKLSAgICBpZHggPSBjb3B5X3Bhc3RfbmV3bGluZShwdHIsIGlkeCwg
dG9zKTsKLSAgICBwYysrOwkKKyAgICBwb3MgPSBjb3B5X3Bhc3RfbmV3bGluZShwdHIsIHBvcywg
dG9zKTsKKyAgICBwYysrOwogfQogCiAKIC8qIGluZGVudAogICAgVGFrZSB0aGUgc3RyaW5nIGF0
IHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBkbyBzb21lIHByZXR0eWluZyAqLwogCi0KLQotCi1XT1JE
KGtpbGxfYm9ndXNfbGluZXMpCitzdGF0aWMgdm9pZCBraWxsX2JvZ3VzX2xpbmVzKHZvaWQpCiB7
CiAgICAgaW50IHNsIDsKLSAgICAKLSAgICBpbnQgbmwgPSAwOwogICAgIGludCBpZHggPSAwOwog
ICAgIGludCBjOwotICAgIGludCBkb3QgPSAwICAgIDsKLSAgICAKLSAgICBzdHJpbmdfdHlwZSBv
dXQ7ICAgIAorICAgIGludCBkb3QgPSAwOworCisgICAgc3RyaW5nX3R5cGUgb3V0OwogICAgIGlu
aXRfc3RyaW5nKCZvdXQpOwogICAgIC8qIERyb3AgbGVhZGluZyBubCAqLwogICAgIHdoaWxlIChh
dCh0b3MsaWR4KSA9PSAnXG4nKQotICAgIHsKIAlpZHgrKzsKLSAgICB9CiAgICAgYyA9IGlkeDsK
LSAgICAKKwogICAgIC8qIEZpbmQgdGhlIGxhc3QgY2hhciAqLwogICAgIHdoaWxlIChhdCh0b3Ms
aWR4KSkKLSAgICB7CiAJaWR4Kys7Ci0gICAgfQotICAgIAorCiAgICAgLyogZmluZCB0aGUgbGFz
dCBub24gd2hpdGUgYmVmb3JlIHRoZSBubCAqLwogICAgIGlkeC0tOwotICAgIAorCiAgICAgd2hp
bGUgKGlkeCAmJiBpc3NwYWNlKGF0KHRvcyxpZHgpKSkKLSAgICAgaWR4LS07CisJaWR4LS07CiAg
ICAgaWR4Kys7Ci0gICAgCisKICAgICAvKiBDb3B5IGJ1ZmZlciB1cHRvIGxhc3QgY2hhciwgYnV0
IGJsYW5rIGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIKICAgICAgICBkb3RzIGRvbid0IGNvdW50ICov
CiAgICAgc2wgPSAxOwogCiAgICAgd2hpbGUgKGMgPCBpZHgpCiAgICAgewotCWlmIChhdCh0b3Ms
YykgPT0gJ1xuJyAKLQkgICAgJiYgYXQodG9zLGMrMSkgPT0gJ1xuJwotCSAgICAmJiBhdCh0b3Ms
YysyKSA9PSAnLicpIAorCWlmIChhdCh0b3MsYykgICA9PSAnXG4nICYmCisJICAgIGF0KHRvcyxj
KzEpID09ICdcbicgJiYKKwkgICAgYXQodG9zLGMrMikgPT0gJy4nKQogCXsKIAkgICAgLyogSWdu
b3JlIHR3byBsaW5lbGluZXMgYmVmb3JlICBhIGRvdCovCiAJICAgIGMrKzsKQEAgLTg4OCw5ICs3
MjcsOCBAQCBXT1JEKGtpbGxfYm9ndXNfbGluZXMpCiAJICAgIC8qIHJlbWVtYmVyIHRoYXQgdGhp
cyBsaW5lIHN0YXJ0ZWQgd2l0aCBhIGRvdCAqLwogCSAgICBkb3Q9MjsKIAl9Ci0JZWxzZSBpZiAo
YXQodG9zLGMpID09ICdcbicgCi0JCSAmJiBhdCh0b3MsYysxKSA9PSAnXG4nCi0JCSAmJiBkb3Qp
CisJZWxzZSBpZiAoYXQodG9zLGMpICAgPT0gJ1xuJyAmJgorCQkgYXQodG9zLGMrMSkgPT0gJ1xu
JyAmJiBkb3QpCiAJewogCSAgICBjKys7CiAJICAgIC8qIElnbm9yZSB0d28gbmV3bGluZXMgd2hl
biBsYXN0IGxpbmUgd2FzIGRvdCAqLwpAQCAtOTAwLDI0ICs3MzgsMjIgQEAgV09SRChraWxsX2Jv
Z3VzX2xpbmVzKQogCWlmIChhdCh0b3MsYykgPT0gJ1xuJykKIAl7CiAJICAgIHNsID0gMTsKLQkg
ICAgCi0JICAgIGlmIChkb3QgPT0gMilkb3Q9MTtlbHNlIGRvdCA9IDA7CisJICAgIGlmIChkb3Qg
PT0gMikKKwkJZG90ID0gMTsKKwkgICAgZWxzZSBkb3QgPSAwOwogCX0KLQkKLQljKys7CQogCisJ
YysrOwogICAgIH0KLSAgICAKKwogICAgIC8qIEFwcGVuZCBubCovCiAgICAgY2F0Y2hhcigmb3V0
LCAnXG4nKTsKICAgICBwYysrOwogICAgIGRlbGV0ZV9zdHJpbmcodG9zKTsKICAgICAqdG9zID0g
b3V0OwotICAgIAotICAgIAogfQogCi1XT1JEKGluZGVudCkKK3N0YXRpYyB2b2lkIGluZGVudCh2
b2lkKQogewogICAgIHN0cmluZ190eXBlIG91dDsKICAgICBpbnQgdGFiID0gMDsKQEAgLTkyNSw2
MyArNzYxLDU2IEBAIFdPUkQoaW5kZW50KQogICAgIGludCBvbCA9MDsKICAgICBpbml0X3N0cmlu
Zygmb3V0KTsKICAgICB3aGlsZSAoYXQodG9zLGlkeCkpIHsKLQkgICAgc3dpdGNoIChhdCh0b3Ms
aWR4KSkgCi0JICAgIHsKLQkgICAgICBjYXNlICdcbic6Ci0JCWNhdHRleHQoJm91dCwiXG4iKTsK
LQkJaWR4Kys7Ci0JCWlmICh0YWIpIAotCQl7Ci0JCSAgICBjYXR0ZXh0KCZvdXQsIiAgICAiKTsK
LQkJfQotCQlvbCA9IDA7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgJygnOgotCQl0YWIrKzsKLQkJ
aWYgKG9sID09IDApCi0JCSAgICBjYXR0ZXh0KCZvdXQsIiAgICIpOwotCQlpZHgrKzsKLQkJY2F0
dGV4dCgmb3V0LCIoIik7Ci0JCW9sID0gMTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAnKSc6Ci0J
CXRhYi0tOwotCQljYXR0ZXh0KCZvdXQsIikiKTsKLQkJaWR4Kys7Ci0JCW9sPTE7Ci0JCQotCQli
cmVhazsKLQkgICAgICBkZWZhdWx0OgotCQljYXRjaGFyKCZvdXQsYXQodG9zLGlkeCkpOwotCQlv
bD0xOwotCQkKLQkJaWR4Kys7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQkKKwlzd2l0Y2ggKGF0KHRv
cyxpZHgpKSAKKwl7CisJY2FzZSAnXG4nOgorCSAgICBjYXR0ZXh0KCZvdXQsIlxuIik7CisJICAg
IGlkeCsrOworCSAgICBpZiAodGFiKQorCQljYXR0ZXh0KCZvdXQsIiAgICAiKTsKKwkgICAgb2wg
PSAwOworCSAgICBicmVhazsKKwljYXNlICcoJzoKKwkgICAgdGFiKys7CisJICAgIGlmIChvbCA9
PSAwKQorCQljYXR0ZXh0KCZvdXQsIiAgICIpOworCSAgICBpZHgrKzsKKwkgICAgY2F0dGV4dCgm
b3V0LCIoIik7CisJICAgIG9sID0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnKSc6CisJICAgIHRh
Yi0tOworCSAgICBjYXR0ZXh0KCZvdXQsIikiKTsKKwkgICAgaWR4Kys7CisJICAgIG9sPTE7CisJ
ICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGNhdGNoYXIoJm91dCxhdCh0b3MsaWR4KSk7CisJ
ICAgIG9sPTE7CisJICAgIGlkeCsrOworCSAgICBicmVhazsKKwl9CisgICAgfQogCiAgICAgcGMr
KzsKICAgICBkZWxldGVfc3RyaW5nKHRvcyk7CiAgICAgKnRvcyA9IG91dDsKLQogfQogCiAvKiBD
aGFuZ2UgdGhlIFRPUyBzbyB0aGF0IGFsbCB0aGF0IGlzIGxlZnQgaXMgdGhlIHN0dWZmIGluc2lk
ZSB0aGUKLSBmaXJzdCA8PGZvbz4+IC4KKyAgIGZpcnN0IDw8Zm9vPj4KICovCi0KLVdPUkQoZ2V0
X3N0dWZmX2luX2FuZ2xlKQorc3RhdGljIHZvaWQgZ2V0X3N0dWZmX2luX2FuZ2xlKHZvaWQpCiB7
CiAgIHVuc2lnbmVkIGludCBpZHggPSAwOwogICBzdHJpbmdfdHlwZSBvdXQ7CiAgIGluaXRfc3Ry
aW5nKCZvdXQpOwotICAgIAotICB3aGlsZSAoYXQodG9zLCBpZHgpKSAKKworICB3aGlsZSAoYXQo
dG9zLGlkeCkpCiAgICAgewotICAgICAgaWYgKGF0KHRvcyxpZHgpID09ICc8JyAmJiBhdCh0b3Ms
aWR4KzEpID09JzwnKSAKKyAgICAgIGlmIChhdCh0b3MsaWR4KSA9PSAnPCcgJiYgYXQodG9zLGlk
eCsxKSA9PSc8JykKIAl7Ci0JICBpZHgrPTI7Ci0JICAKKwkgIGlkeCArPSAyOwogCSAgd2hpbGUg
KCEoYXQodG9zLGlkeCkgPT0gJz4nICYmIGF0KHRvcyxpZHgrMSkgPT0gJz4nKSkKIAkgICAgewog
CSAgICAgIGNhdGNoYXIoJm91dCwgYXQodG9zLCBpZHgpKTsKQEAgLTk5NCwyMTkgKzgyMywxODYg
QEAgV09SRChnZXRfc3R1ZmZfaW5fYW5nbGUpCiAjaWYgMAogICBjYXRjaGFyKCZvdXQsJ1xuJyk7
CiAjZW5kaWYKLSAgCisKICAgb3ZlcndyaXRlX3N0cmluZyh0b3MsICZvdXQpOwogICBwYysrOwog
fQogCi0KLVdPUkQoZ2V0X3N0dWZmX2luX2NvbW1hbmQpCitzdGF0aWMgdm9pZCBnZXRfc3R1ZmZf
aW5fY29tbWFuZCh2b2lkKQogewogICB0b3MrKzsKICAgaW5pdF9zdHJpbmcodG9zKTsKIAotICB3
aGlsZSAoYXQocHRyLCBpZHgpKSB7Ci0gICAgaWYgKGlzY29tbWFuZChwdHIsIGlkeCkpICBicmVh
azsKLSAgICBpZHggPSAgIGNvcHlfcGFzdF9uZXdsaW5lKHB0ciwgaWR4LCB0b3MpOworICB3aGls
ZSAoYXQocHRyLHBvcykpIHsKKyAgICBpZiAoaXNjb21tYW5kKHB0cixwb3MpKQorCWJyZWFrOwor
ICAgIHBvcyA9IGNvcHlfcGFzdF9uZXdsaW5lKHB0ciwgcG9zLCB0b3MpOwogICB9Ci0gIHBjKys7
ICAgIAorICBwYysrOwogfQogCi1XT1JEKHN3YXApCitzdGF0aWMgdm9pZCBzd2FwKHZvaWQpCiB7
CiAgICAgc3RyaW5nX3R5cGUgdDsKLSAgICAKKwogICAgIHQgPSB0b3NbMF07CiAgICAgdG9zWzBd
ID0gdG9zWy0xXTsKLSAgICB0b3NbLTFdID10OyAKKyAgICB0b3NbLTFdID0gdDsKICAgICBwYysr
OwotICAgIAogfQogCi1XT1JEKGR1cGxpY2F0ZSkKK3N0YXRpYyB2b2lkIGR1cGxpY2F0ZSh2b2lk
KQogewogICAgIHRvcysrOwogICAgIGluaXRfc3RyaW5nKHRvcyk7CiAgICAgY2F0c3RyKHRvcywg
dG9zLTEpOwogICAgIHBjKys7Ci0gICAgCiB9CiAKLQotCi1XT1JEKGljYXRzdHIpCitzdGF0aWMg
dm9pZCBpY2F0c3RyKHZvaWQpCiB7CiAgICAgY2F0c3RyKHRvcy0xLCB0b3MpOwogICAgIGRlbGV0
ZV9zdHJpbmcodG9zKTsKICAgICB0b3MtLTsKICAgICBwYysrOwotICAgIAogfQogCi1XT1JEKHNr
aXBfcGFzdF9uZXdsaW5lKQorc3RhdGljIHZvaWQgc2tpcF9wYXN0X25ld2xpbmUodm9pZCkKIHsK
LSAgICB3aGlsZSAoYXQocHRyLGlkeCkgCi0JICAgJiYgYXQocHRyLGlkeCkgIT0gJ1xuJykKLSAg
ICAgaWR4Kys7Ci0gICAgaWR4Kys7CisgICAgd2hpbGUgKGF0KHB0cixwb3MpICYmCisJICAgYXQo
cHRyLHBvcykgIT0gJ1xuJykKKwlwb3MrKzsKKworICAgIHBvcysrOwogICAgIHBjKys7CiB9CiAK
LQotV09SRChpbnRlcm5hbG1vZGUpCitzdGF0aWMgdm9pZCBpbnRlcm5hbG1vZGUodm9pZCkKIHsK
ICAgICBpbnRlcm5hbF9tb2RlID0gKihpc3ApOwogICAgIGlzcC0tOwogICAgIHBjKys7CiB9CiAK
LVdPUkQobWF5YmVjYXRzdHIpCitzdGF0aWMgdm9pZCBtYXliZWNhdHN0cih2b2lkKQogewotICAg
IGlmIChpbnRlcm5hbF93YW50ZWQgPT0gaW50ZXJuYWxfbW9kZSkgCisgICAgaWYgKGludGVybmFs
X3dhbnRlZCA9PSBpbnRlcm5hbF9tb2RlKQogICAgIHsKIAljYXRzdHIodG9zLTEsIHRvcyk7CiAg
ICAgfQogICAgIGRlbGV0ZV9zdHJpbmcodG9zKTsKICAgICB0b3MtLTsKICAgICBwYysrOwotICAg
IAogfQogCi1jaGFyICoKLURFRlVOKG5leHR3b3JkLChzdHJpbmcsIHdvcmQpLAotICAgICAgY2hh
ciAqc3RyaW5nIEFORAotICAgICAgY2hhciAqKndvcmQpCitzdGF0aWMgY2hhciAqbmV4dHdvcmQo
Y2hhciAqc3RyaW5nLCBjaGFyICoqd29yZCkKIHsKICAgY2hhciAqd29yZF9zdGFydDsKICAgaW50
IGlkeDsKICAgY2hhciAqZHN0OwogICBjaGFyICpzcmM7Ci0gICAgCiAgIGludCBsZW5ndGggPSAw
OwotICAgIAorCiAgIHdoaWxlIChpc3NwYWNlKCpzdHJpbmcpIHx8ICpzdHJpbmcgPT0gJy0nKSB7
Ci0gICAgICBpZiAoKnN0cmluZyA9PSAnLScpIAorICAgICAgaWYgKCpzdHJpbmcgPT0gJy0nKQog
ICAgICAgewotCXdoaWxlICgqc3RyaW5nICYmICpzdHJpbmcgIT0gJ1xuJykgCi0JIHN0cmluZysr
OwotCQkKKwl3aGlsZSAoKnN0cmluZyAmJiAqc3RyaW5nICE9ICdcbicpCisJICBzdHJpbmcrKzsK
ICAgICAgIH0KICAgICAgIGVsc2UgewogCSAgc3RyaW5nKys7Ci0JfQotICAgIH0KLSAgaWYgKCEq
c3RyaW5nKSByZXR1cm4gMDsKLSAgICAKLSAgd29yZF9zdGFydCA9IHN0cmluZzsgICAgCQotICBp
ZiAoKnN0cmluZyA9PSAnIicpIAorICAgICAgfQorICB9CisgIGlmICghKnN0cmluZykgcmV0dXJu
IE5VTEw7CisKKyAgd29yZF9zdGFydCA9IHN0cmluZzsKKyAgaWYgKCpzdHJpbmcgPT0gJyInKQog
ICB7CiAgICAgc3RyaW5nKys7CiAgICAgbGVuZ3RoKys7Ci0JCi0gICAgd2hpbGUgKCpzdHJpbmcg
IT0gJyInKSAKKworICAgIHdoaWxlICgqc3RyaW5nICE9ICciJykKICAgICB7CiAgICAgICBzdHJp
bmcrKzsKICAgICAgIGxlbmd0aCsrOwogICAgIH0KICAgfQotICBlbHNlICAgICAKKyAgZWxzZQog
ICB7Ci0JCi0KLSAgICB3aGlsZSAoIWlzc3BhY2UoKnN0cmluZykpIAorICAgIHdoaWxlICghaXNz
cGFjZSgqc3RyaW5nKSkKICAgICB7CiAgICAgICBzdHJpbmcrKzsKICAgICAgIGxlbmd0aCsrOwog
ICAgIH0KICAgfQotICAgIAorCiAgICp3b3JkID0gbWFsbG9jKGxlbmd0aCArIDEpOwogCiAgIGRz
dCA9ICp3b3JkOwogICBzcmMgPSB3b3JkX3N0YXJ0OwogCi0KLSAgZm9yIChpZHg9IDA7IGlkeCA8
IGxlbmd0aDsgaWR4KyspIAorICBmb3IgKGlkeD0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykKICAg
ewotICAgIAotICAgIGlmIChzcmNbaWR4XSA9PSAnXFwnICYmIHNyY1tpZHgrMV0gPT0gJ24nKSAK
KyAgICBpZiAoc3JjW2lkeF0gPT0gJ1xcJyAmJiBzcmNbaWR4KzFdID09ICduJykKICAgICB7CiAg
ICAgICAqZHN0KysgPSAnXG4nOwogICAgICAgaWR4Kys7Ci0gICAgCiAgICAgfQogICAgIGVsc2Ug
KmRzdCsrID0gc3JjW2lkeF07CiAgIH0KICAgKmRzdCsrID0gMDsKIAorICBpZigqc3RyaW5nKQor
ICAgICByZXR1cm4gc3RyaW5nICsgMTsKKyAgZWxzZQorICAgICByZXR1cm4gTlVMTDsKK30KIAog
CitzdGF0aWMgZGljdF90eXBlICpyb290OwogCi0KLSAgaWYoKnN0cmluZykgICAgCi0gICByZXR1
cm4gc3RyaW5nICsgMTsKLSAgZWxzZSAKLSAgIHJldHVybiAwOwotICAgIAotfQotZGljdF90eXBl
ICpyb290OwotZGljdF90eXBlICoKLURFRlVOKGxvb2t1cF93b3JkLCh3b3JkKSwKLSAgICAgIGNo
YXIgKndvcmQpCi17Ci0gICAgZGljdF90eXBlICpwdHIgPSByb290OwotICAgIHdoaWxlIChwdHIp
IHsKLQkgICAgaWYgKHN0cmNtcChwdHItPndvcmQsIHdvcmQpID09IDApIHJldHVybiBwdHI7Ci0J
ICAgIHB0ciA9IHB0ci0+bmV4dDsKLQkgICAgCi0JIH0KK3N0YXRpYyBkaWN0X3R5cGUgKmxvb2t1
cF93b3JkKGNvbnN0IGNoYXIgKndvcmQpCit7CisgICAgZGljdF90eXBlICpkID0gcm9vdDsKKyAg
ICB3aGlsZSAoZCkgeworCWlmIChzdHJjbXAoZC0+d29yZCwgd29yZCkgPT0gMCkKKwkgICAgcmV0
dXJuIGQ7CisJZCA9IGQtPm5leHQ7CisgICAgfQogICAgIGZwcmludGYoc3RkZXJyLCJDYW4ndCBm
aW5kICVzXG4iLHdvcmQpOwogICAgIHJldHVybiAwOwotICAgIAotICAgIAogfQogCi1zdGF0aWMg
dm9pZCBERUZVTl9WT0lEKHBlcmZvcm0pCitzdGF0aWMgdm9pZCBwZXJmb3JtKHZvaWQpCiB7CiAg
ICAgdG9zID0gc3RhY2s7Ci0gICAgCi0gICAgd2hpbGUgKGF0KHB0ciwgaWR4KSkgewotCSAgICAv
KiBJdCdzIHdvcnRoIGxvb2tpbmcgdGhyb3VnaCB0aGUgY29tbWFuZCBsaXN0ICovCi0JICAgIGlm
IChpc2NvbW1hbmQocHRyLCBpZHgpKQotCSAgICB7Ci0JCXVuc2lnbmVkIGludCBpOwotCQlpbnQg
Zm91bmQgPSAwOwotCi0JCWNoYXIgKm5leHQ7Ci0JCWRpY3RfdHlwZSAqd29yZCA7Ci0JCQotCQko
dm9pZCkJCW5leHR3b3JkKGFkZHIocHRyLCBpZHgpLCAmbmV4dCk7Ci0KLQotCQl3b3JkID0gbG9v
a3VwX3dvcmQobmV4dCk7CiAKKyAgICB3aGlsZSAoYXQocHRyLHBvcykpIHsKKwkvKiBJdCdzIHdv
cnRoIGxvb2tpbmcgdGhyb3VnaCB0aGUgY29tbWFuZCBsaXN0ICovCisJaWYgKGlzY29tbWFuZChw
dHIscG9zKSkKKwl7CisJICAgIGNoYXIgKm5leHQ7CisJICAgIGRpY3RfdHlwZSAqd29yZCA7CiAK
LQkJCisJICAgICh2b2lkKSBuZXh0d29yZChhZGRyKHB0ciwgcG9zKSwgJm5leHQpOworCSAgICB3
b3JkID0gbG9va3VwX3dvcmQobmV4dCk7CiAKLQkJaWYgKHdvcmQpIAotCQl7Ci0JCSAgICBleGVj
KHdvcmQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkgICAgZnByaW50ZihzdGRlcnIsIndhcm5pbmcs
ICVzIGlzIG5vdCByZWNvZ25pc2VkXG4iLCAgbmV4dCk7Ci0JCSAgICBza2lwX3Bhc3RfbmV3bGlu
ZSgpOwotCQl9Ci0JCQorCSAgICBpZiAod29yZCkKKwkgICAgeworCQlleGVjKHdvcmQpOworCSAg
ICB9CisJICAgIGVsc2UKKwkgICAgeworCQlmcHJpbnRmKHN0ZGVyciwid2FybmluZywgJXMgaXMg
bm90IHJlY29nbmlzZWRcbiIsIG5leHQpOworCQlza2lwX3Bhc3RfbmV3bGluZSgpOwogCSAgICB9
Ci0JICAgIGVsc2Ugc2tpcF9wYXN0X25ld2xpbmUoKTsKLQogCX0KKwllbHNlCisJICAgIHNraXBf
cGFzdF9uZXdsaW5lKCk7CisgICAgfQogfQogCi1kaWN0X3R5cGUgKgotREVGVU4obmV3ZW50cnks
KHdvcmQpLAotICAgICAgY2hhciAqd29yZCkKK3N0YXRpYyBkaWN0X3R5cGUgKm5ld2VudHJ5KGNo
YXIgKndvcmQpCiB7CiAgICAgZGljdF90eXBlICpuZXcgPSAoZGljdF90eXBlICopbWFsbG9jKHNp
emVvZihkaWN0X3R5cGUpKTsKICAgICBuZXctPndvcmQgPSB3b3JkOwpAQCAtMTIxNiwxNCArMTAx
Miw5IEBAIERFRlVOKG5ld2VudHJ5LCh3b3JkKSwKICAgICBuZXctPmNvZGVfbGVuZ3RoID0gMTsK
ICAgICBuZXctPmNvZGVfZW5kID0gMDsKICAgICByZXR1cm4gbmV3OwotICAgIAogfQogCi0KLXVu
c2lnbmVkIGludAotREVGVU4oYWRkX3RvX2RlZmluaXRpb24sKGVudHJ5LCB3b3JkKSwgCi0gICAg
ICBkaWN0X3R5cGUgKmVudHJ5IEFORAotICAgICAgc3RpbnN0X3R5cGUgd29yZCkKK3N0YXRpYyB1
bnNpZ25lZCBpbnQgYWRkX3RvX2RlZmluaXRpb24oZGljdF90eXBlICplbnRyeSwgc3RpbnN0X3R5
cGUgd29yZCkKIHsKICAgICBpZiAoZW50cnktPmNvZGVfZW5kID09IGVudHJ5LT5jb2RlX2xlbmd0
aCkgCiAgICAgewpAQCAtMTIzMywxODYgKzEwMjQsMTQ1IEBAIERFRlVOKGFkZF90b19kZWZpbml0
aW9uLChlbnRyeSwgd29yZCksIAogCQkJICAgICAgIGVudHJ5LT5jb2RlX2xlbmd0aCAqc2l6ZW9m
KHdvcmRfdHlwZSkpOwogICAgIH0KICAgICBlbnRyeS0+Y29kZVtlbnRyeS0+Y29kZV9lbmRdID0g
d29yZDsKLSAgICAKLXJldHVybiAgICAgZW50cnktPmNvZGVfZW5kKys7ICAKLX0KLQotCi0KLQot
CiAKKyAgICByZXR1cm4gZW50cnktPmNvZGVfZW5kKys7Cit9CiAKLXZvaWQKLURFRlVOKGFkZF9p
bnRyaW5zaWMsKG5hbWUsIGZ1bmMpLAotICAgICAgY2hhciAqbmFtZSBBTkQKLSAgICAgIHZvaWQg
KCpmdW5jKSgpKQorc3RhdGljIHZvaWQgYWRkX2ludHJpbnNpYyhjaGFyICpuYW1lLCB2b2lkICgq
ZnVuYykoKSkKIHsKICAgICBkaWN0X3R5cGUgKm5ldyA9IG5ld2VudHJ5KG5hbWUpOwogICAgIGFk
ZF90b19kZWZpbml0aW9uKG5ldywgZnVuYyk7CiAgICAgYWRkX3RvX2RlZmluaXRpb24obmV3LCAw
KTsKIH0KIAotV09SRChwdXNoX2FkZHIpCi17Ci0gICAgCi0KLX0KLQotdm9pZAotREVGVU4oYWRk
X3ZhciwobmFtZSksCi0gICAgICBjaGFyICpuYW1lKQorc3RhdGljIHZvaWQgYWRkX3ZhcihjaGFy
ICpuYW1lKQogewogICAgIGRpY3RfdHlwZSAqbmV3ID0gbmV3ZW50cnkobmFtZSk7CiAgICAgYWRk
X3RvX2RlZmluaXRpb24obmV3LCBwdXNoX251bWJlcik7CiAgICAgYWRkX3RvX2RlZmluaXRpb24o
bmV3LCAoc3RpbnN0X3R5cGUpKCYobmV3LT52YXIpKSk7CiAgICAgYWRkX3RvX2RlZmluaXRpb24o
bmV3LDApOwotICAgIAogfQotICAgICAgCi0KLQotCi12b2lkIAotREVGVU4oY29tcGlsZSwgKHN0
cmluZyksIAotICAgICAgY2hhciAqc3RyaW5nKQogCitzdGF0aWMgdm9pZCBjb21waWxlKGNoYXIg
KnN0cmluZykKIHsKLSAgICBpbnQganN0YWNrW1NUQUNLXTsKLSAgICBpbnQgKmpwdHIgPSBqc3Rh
Y2s7CiAgICAgLyogYWRkIHdvcmRzIHRvIHRoZSBkaWN0aW9uYXJ5ICovCiAgICAgY2hhciAqd29y
ZDsKICAgICBzdHJpbmcgPSBuZXh0d29yZChzdHJpbmcsICZ3b3JkKTsKLSAgICB3aGlsZSAoc3Ry
aW5nICYmICpzdHJpbmcgJiYgd29yZFswXSkgCisgICAgd2hpbGUgKHN0cmluZyAmJiAqc3RyaW5n
ICYmIHdvcmRbMF0pCiAgICAgewogCWlmIChzdHJjbXAod29yZCwidmFyIik9PTApIAogCXsKLSBz
dHJpbmc9bmV4dHdvcmQoc3RyaW5nLCAmd29yZCk7Ci0JICAKKwkgIHN0cmluZz1uZXh0d29yZChz
dHJpbmcsICZ3b3JkKTsKIAkgIGFkZF92YXIod29yZCk7Ci0gc3RyaW5nPW5leHR3b3JkKHN0cmlu
ZywgJndvcmQpOworCSAgc3RyaW5nPW5leHR3b3JkKHN0cmluZywgJndvcmQpOwogCX0KLWVsc2UJ
Ci0JICAgIAorCWVsc2UKIAlpZiAod29yZFswXSA9PSAnOicpCiAJewotCSAgICBkaWN0X3R5cGUg
KnB0cjsKKwkgICAgZGljdF90eXBlICpkOwogCSAgICAvKiBDb21waWxlIGEgd29yZCBhbmQgYWRk
IHRvIGRpY3Rpb25hcnkgKi8KIAkgICAgc3RyaW5nID0gbmV4dHdvcmQoc3RyaW5nLCAmd29yZCk7
Ci0JICAgIAotCSAgICBwdHIgPSBuZXdlbnRyeSh3b3JkKTsKKworCSAgICBkID0gbmV3ZW50cnko
d29yZCk7CiAJICAgIHN0cmluZyA9IG5leHR3b3JkKHN0cmluZywgJndvcmQpOwogCSAgICB3aGls
ZSAod29yZFswXSAhPSAnOycgKSAKIAkgICAgewotCQkgc3dpdGNoICh3b3JkWzBdKSAKLQkJIHsK
LQkJICAgIAotCQkgICAgCi0JCSAgIGNhc2UgJyInOgotCQkgICAgIC8qIGdvdCBhIHN0cmluZywg
ZW1iZWQgbWFnaWMgcHVzaCBzdHJpbmcKKwkJc3dpdGNoICh3b3JkWzBdKQorCQl7CisJCWNhc2Ug
JyInOgorCQkgICAgLyogZ290IGEgc3RyaW5nLCBlbWJlZCBtYWdpYyBwdXNoIHN0cmluZwogCQkJ
ZnVuY3Rpb24gKi8KLQkJICAgICBhZGRfdG9fZGVmaW5pdGlvbihwdHIsIHB1c2hfdGV4dCk7Ci0J
CSAgICAgYWRkX3RvX2RlZmluaXRpb24ocHRyLCAoc3RpbnN0X3R5cGUpKHdvcmQrMSkpOwotCQkg
ICAgIGJyZWFrOwotCQkgICBjYXNlICcwJzoKLQkJICAgY2FzZSAnMSc6Ci0JCSAgIGNhc2UgJzIn
OgotCQkgICBjYXNlICczJzoKLQkJICAgY2FzZSAnNCc6Ci0JCSAgIGNhc2UgJzUnOgotCQkgICBj
YXNlICc2JzoKLQkJICAgY2FzZSAnNyc6Ci0JCSAgIGNhc2UgJzgnOgotCQkgICBjYXNlICc5JzoK
LQkJICAgICAvKiBHb3QgYSBudW1iZXIsIGVtYmVkZCB0aGUgbWFnaWMgcHVzaCBudW1iZXIKKwkJ
ICAgIGFkZF90b19kZWZpbml0aW9uKGQsIHB1c2hfdGV4dCk7CisJCSAgICBhZGRfdG9fZGVmaW5p
dGlvbihkLCAoc3RpbnN0X3R5cGUpKHdvcmQrMSkpOworCQkgICAgYnJlYWs7CisJCWNhc2UgJzAn
OgorCQljYXNlICcxJzoKKwkJY2FzZSAnMic6CisJCWNhc2UgJzMnOgorCQljYXNlICc0JzoKKwkJ
Y2FzZSAnNSc6CisJCWNhc2UgJzYnOgorCQljYXNlICc3JzoKKwkJY2FzZSAnOCc6CisJCWNhc2Ug
JzknOgorCQkgICAgLyogR290IGEgbnVtYmVyLCBlbWJlZGQgdGhlIG1hZ2ljIHB1c2ggbnVtYmVy
CiAJCQlmdW5jdGlvbiAqLwotCQkgICAgIGFkZF90b19kZWZpbml0aW9uKHB0ciwgcHVzaF9udW1i
ZXIpOwotCQkgICAgIGFkZF90b19kZWZpbml0aW9uKHB0ciwgKHN0aW5zdF90eXBlKWF0b2wod29y
ZCkpOwotCQkgICAgIGJyZWFrOwotCQkgICBkZWZhdWx0OgotCQkgICAgIGFkZF90b19kZWZpbml0
aW9uKHB0ciwgY2FsbCk7Ci0JCSAgICAgYWRkX3RvX2RlZmluaXRpb24ocHRyLCAoc3RpbnN0X3R5
cGUpbG9va3VwX3dvcmQod29yZCkpOwotCQkgfQorCQkgICAgYWRkX3RvX2RlZmluaXRpb24oZCwg
cHVzaF9udW1iZXIpOworCQkgICAgYWRkX3RvX2RlZmluaXRpb24oZCwgKHN0aW5zdF90eXBlKShp
bnRwKWF0b2wod29yZCkpOworCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICBhZGRfdG9f
ZGVmaW5pdGlvbihkLCBjYWxsKTsKKwkJICAgIGFkZF90b19kZWZpbml0aW9uKGQsIChzdGluc3Rf
dHlwZSlsb29rdXBfd29yZCh3b3JkKSk7CisJCX0KIAotCQlzdHJpbmcgPSBuZXh0d29yZChzdHJp
bmcsICZ3b3JkKTsJCSAgICAgCisJCXN0cmluZyA9IG5leHR3b3JkKHN0cmluZywgJndvcmQpOwog
CSAgICB9Ci0JICAgIGFkZF90b19kZWZpbml0aW9uKHB0ciwwKTsKKwkgICAgYWRkX3RvX2RlZmlu
aXRpb24oZCwwKTsKIAkgICAgc3RyaW5nID0gbmV4dHdvcmQoc3RyaW5nLCAmd29yZCk7CiAJfQot
CWVsc2UgCisJZWxzZQogCXsKIAkgICAgZnByaW50ZihzdGRlcnIsInN5bnRheCBlcnJvciBhdCAl
c1xuIixzdHJpbmctMSk7Ci0JfQkgICAgCisJfQogICAgIH0KLQogfQogCi0gCi1zdGF0aWMgdm9p
ZCBERUZVTl9WT0lEKGJhbmcpCi17Ci0qKGludHAgKikoKGlzcFswXSkpID0gaXNwWy0xXTsKLWlz
cC09MjsKLXBjKys7CiAKK3N0YXRpYyB2b2lkIGJhbmcodm9pZCkKK3sKKyAgICAqKGludHAgKiko
KGlzcFswXSkpID0gaXNwWy0xXTsKKyAgICBpc3AtPTI7CisgICAgcGMrKzsKIH0KIAotV09SRChh
dHNpZ24pCitzdGF0aWMgdm9pZCBhdHNpZ24odm9pZCkKIHsKICAgICBpc3BbMF0gPSAqKGludHAg
KikoaXNwWzBdKTsKICAgICBwYysrOwogfQogCi1XT1JEKGhlbGxvKQorc3RhdGljIHZvaWQgaGVs
bG8odm9pZCkKIHsKLSAgICAKICAgICBwcmludGYoImhlbGxvXG4iKTsKLSAgICBwYysrOyAgICAK
KyAgICBwYysrOwogfQogCi0KLQotc3RhdGljIHZvaWQgREVGVU4ocmVhZF9pbiwgKHN0ciwgZmls
ZSksIAotCSAgIHN0cmluZ190eXBlICpzdHIgQU5ECi0JCSAgRklMRSAqZmlsZSkKK3N0YXRpYyB2
b2lkIHJlYWRfaW4oc3RyaW5nX3R5cGUgKnN0ciwgRklMRSAqZmlsZSkKIHsKLSAgICBjaGFyIGJ1
ZmZbMTAwMDBdOyAgICAKKyAgICBjaGFyIGJ1ZmZbMTAwMDBdOwogICAgIHVuc2lnbmVkIGludCBy
OwotICAgIGRvIAorCisgICAgZG8KICAgICB7CiAJciA9IGZyZWFkKGJ1ZmYsIDEsIHNpemVvZihi
dWZmKSwgZmlsZSk7CiAJY2F0YnVmKHN0ciwgYnVmZiwgcik7CiAgICAgfQogICAgIHdoaWxlIChy
KTsKICAgICBidWZmWzBdID0gMDsKLSAgICAKKwogICAgIGNhdGJ1ZihzdHIsIGJ1ZmYsMSk7Ci0g
ICAgCiB9CiAKIAotc3RhdGljIHZvaWQgREVGVU5fVk9JRCh1c2FnZSkKK3N0YXRpYyB2b2lkIHVz
YWdlKHZvaWQpCiB7CiAgICAgZnByaW50ZihzdGRlcnIsInVzYWdlOiAtW2R8aXxnXSA8ZmlsZSA+
ZmlsZVxuIik7Ci0gICAgZXhpdCgzMyk7ICAgIAorICAgIGV4aXQoMzMpOwogfQogCi1pbnQgREVG
VU4obWFpbiwoYWMsYXYpLAotaW50IGFjIEFORAotY2hhciAqYXZbXSkKK2ludCBtYWluKGludCBh
YywgY2hhciAqYXZbXSkKIHsKICAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICAKLQorICAgIGludCBl
cnJfZmQ7CiAgICAgc3RyaW5nX3R5cGUgYnVmZmVyOwogICAgIHN0cmluZ190eXBlIHBwdHI7Ci0g
ICAgCiAKICAgICBpbml0X3N0cmluZygmYnVmZmVyKTsKICAgICBpbml0X3N0cmluZygmcHB0cik7
CiAgICAgaW5pdF9zdHJpbmcoc3RhY2srMCk7CiAgICAgdG9zPXN0YWNrKzE7CiAgICAgcHRyID0g
JnBwdHI7Ci0gICAgCisKICAgICBhZGRfaW50cmluc2ljKCJwdXNoX3RleHQiLCBwdXNoX3RleHQp
OwogICAgIGFkZF9pbnRyaW5zaWMoIiEiLCBiYW5nKTsKICAgICBhZGRfaW50cmluc2ljKCJAIiwg
YXRzaWduKTsKQEAgLTE0MzYsNTYgKzExODYsNjMgQEAgY2hhciAqYXZbXSkKICAgICBhZGRfaW50
cmluc2ljKCJpbmRlbnQiLCBpbmRlbnQpOwogICAgIGFkZF9pbnRyaW5zaWMoInF1aWNrcmVmIiwg
cXVpY2tyZWYpOwogICAgIGFkZF9pbnRyaW5zaWMoImludGVybmFsbW9kZSIsIGludGVybmFsbW9k
ZSk7Ci0gICAgCisKICAgICAvKiBQdXQgYSBubCBhdCB0aGUgc3RhcnQgKi8KICAgICBjYXRjaGFy
KCZidWZmZXIsJ1xuJyk7CiAKLSAgICBmb3IgKGk9IDE7IGkgPCBhYzsgaSsrKSAKKyAgICBmb3Ig
KGkgPSAxOyBpIDwgYWM7IGkrKykKICAgICB7CiAgICAgICBpZiAoYXZbaV1bMF0gPT0gJy0nICYm
IGF2W2ldWzFdID09ICdlJykKICAgICAgIHsKLQlpbnQgZXJyX2ZkID0gb3BlbiAoYXZbaSsxXSwg
T19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCAwNjY2KTsKLQotCWlmIChlcnJfZmQgPCAwIHx8IGR1
cDIgKGVycl9mZCwgMikgPT0gLTEpCi0JICBmcHJpbnRmIChzdGRlcnIsICJDYW4ndCByZWRpcmVj
dCBzdGRlcnIgdG8gJXNcbiIsIGF2W2krMV0pOworCWlmICgrK2kgPT0gYWMpIHVzYWdlKCk7CisJ
ZXJyX2ZkID0gb3BlbiAoYXZbaV0sIE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQywgMDY2Nik7CisJ
aWYgKGVycl9mZCA8IDAgfHwgZHVwMihlcnJfZmQsMikgPT0gLTEpCisJICAgIGZwcmludGYgKHN0
ZGVyciwgIkNhbid0IHJlZGlyZWN0IHN0ZGVyciB0byAlc1xuIiwgYXZbaV0pOwogCWlmIChlcnJf
ZmQgPiAwKQotCSAgY2xvc2UgKGVycl9mZCk7CisJICAgIGNsb3NlIChlcnJfZmQpOwogICAgICAg
fQogICAgIH0KLSAgICByZWFkX2luKCZidWZmZXIsIHN0ZGluKTsgCisKKyAgICByZWFkX2luKCZi
dWZmZXIsIHN0ZGluKTsKICAgICByZW1vdmVfbm9uY29tbWVudHMoJmJ1ZmZlciwgcHRyKTsKLSAg
ICBmb3IgKGk9IDE7IGkgPCBhYzsgaSsrKSAKKworICAgIGZvciAoaSA9IDE7IGkgPCBhYzsgaSsr
KQogICAgIHsKIAlpZiAoYXZbaV1bMF0gPT0gJy0nKQogCXsKLQkgICAgaWYgKGF2W2ldWzFdID09
ICdmJykKKwkgICAgaWYgKGF2W2ldWzFdID09ICdlJykKKwkgICAgeworCQkrK2k7IC8qIGhhbmRs
ZWQgYWJvdmUgKi8KKwkgICAgfQorCSAgICBlbHNlIGlmIChhdltpXVsxXSA9PSAnZicpCiAJICAg
IHsKIAkJc3RyaW5nX3R5cGUgYjsKIAkJRklMRSAqZjsKLQkJaW5pdF9zdHJpbmcoJmIpOwogCi0J
CWYgID0gZm9wZW4oYXZbaSsxXSwiciIpOworCQlpZiAoKytpID09IGFjKSB1c2FnZSgpOworCisJ
CWluaXRfc3RyaW5nKCZiKTsKKwkJZiAgPSBmb3BlbihhdltpXSwiciIpOwogCQlpZiAoIWYpIAog
CQl7Ci0JCSAgZnByaW50ZihzdGRlcnIsIkNhbid0IG9wZW4gdGhlIGlucHV0IGZpbGUgJXNcbiIs
YXZbaSsxXSk7CisJCSAgZnByaW50ZihzdGRlcnIsIkNhbid0IG9wZW4gdGhlIGlucHV0IGZpbGUg
JXNcbiIsYXZbaV0pOwogCQkgIHJldHVybiAzMzsKIAkJfQotCQkKLQkJICAKIAkJcmVhZF9pbigm
YiwgZik7CiAJCWNvbXBpbGUoYi5wdHIpOwotCQlwZXJmb3JtKCk7CQorCQlwZXJmb3JtKCk7CiAJ
ICAgIH0KLQkgICAgZWxzZSBpZiAoYXZbaV1bMV0gPT0gJ2knKSAKKwkgICAgZWxzZSBpZiAoYXZb
aV1bMV0gPT0gJ2knKQogCSAgICB7CiAJCWludGVybmFsX3dhbnRlZCA9IDE7CiAJICAgIH0KKwkg
ICAgZWxzZQorCSAgICB7CisJCXVzYWdlKCk7CisJICAgIH0KIAl9CisgICAgfQogCi0gICAgfSAg
ICAgIAogICAgIHdyaXRlX2J1ZmZlcihzdGFjayswKTsKICAgICByZXR1cm4gMDsKIH0KLQotCi0K
--90e6ba614ed2a3d1640515a49626
Content-Type: application/octet-stream; name="006-bin2h.c-no-basename.patch"
Content-Disposition: attachment; filename="006-bin2h.c-no-basename.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file6

c3JjL3V0aWxzL2JpbjJoLmM6IHJlbW92ZSBiYXNlbmFtZSgpIGRlcGVuZGVuY3kgYW5kIHJlcG9y
dCB0aGUgZXhlCm5hbWUgc2ltcGx5IGFzICdiaW4yaCcsIHNvIHRoYXQgaXQgY3Jvc3MtYnVpbGRz
IHdpdGhvdXQgd2FybmluZ3MuCgpJbmRleDogc3JjL3V0aWxzL2JpbjJoLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9kamdwcC9kamdwcC9zcmMvdXRpbHMvYmluMmguYyx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS43CmRpZmYgLXUgLXAgLXIxLjcgYmluMmguYwotLS0gc3JjL3V0aWxzL2JpbjJo
LmMJMiBNYXkgMjAxNSAwNzozMjozNCAtMDAwMAkxLjcKKysrIHNyYy91dGlscy9iaW4yaC5jCTkg
TWF5IDIwMTUgMTA6MzA6MTcgLTAwMDAKQEAgLTI1LDEzICsyNSwxMyBAQCBtYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKICAgaW50IGNvbD0wLCBpOwogICBpZiAoYXJnYyA8IDQpCiAgIHsKLSAg
ICBwcmludGYoInVzYWdlOiAlcyBpbmZpbGUgc3ltbmFtZSBvdXRmaWxlXG4iLCBiYXNlbmFtZShh
cmd2WzBdKSk7CisgICAgcHJpbnRmKCJ1c2FnZTogYmluMmggaW5maWxlIHN5bW5hbWUgb3V0Zmls
ZVxuIik7CiAgICAgZXhpdCgxKTsKICAgfQogICBmID0gb3Blbihhcmd2WzFdLCBPX1JET05MWXxP
X0JJTkFSWSk7CiAgIGlmIChmIDwgMSkKICAgewotICAgIHByaW50ZigiJXM6ICIsYmFzZW5hbWUo
YXJndlswXSkpOworICAgIHByaW50ZigiYmluMmg6ICIpOwogICAgIHBlcnJvcihhcmd2WzFdKTsK
ICAgICBleGl0KDEpOwogICB9CkBAIC00MCw3ICs0MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCiAgIGlmIChvZiA9PSBOVUxMKQogICB7Ci0gICAgcHJpbnRmKCIlczogIixiYXNl
bmFtZShhcmd2WzBdKSk7CisgICAgcHJpbnRmKCJiaW4yaDogIik7CiAgICAgcGVycm9yKGFyZ3Zb
M10pOwogICAgIGV4aXQoMSk7CiAgIH0K
--90e6ba614ed2a3d1640515a49626--

- Raw text -


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