php-groups.com | Post Question | Search | About | Groups | Contact | Register | Login


New in This Group

PHP uploadprogress
12/5/2009 7:24:55 PM

svn: /pecl/rar/trunk/ rarentry.c
11/29/2009 1:19:02 PM

svn: /pecl/rar/trunk/ config.m4 config.w32 php_rar.h rar.c rar_stream.c rarentry.c tests/002.phpt tests/003.phpt tests/004.phpt tests/006.phpt tests/008.phpt tests/013.phpt tests/014.phpt tests/015.ph
11/29/2009 3:41:11 AM

svn: /pecl/rar/trunk/ rar.c rar_stream.c tests/022.phpt
11/26/2009 1:40:14 AM

svn: /pecl/rar/trunk/ rar.c tests/021.phpt tests/directories.rar
11/25/2009 11:22:03 AM

svn: /pecl/rar/trunk/ php_rar.h tests/015.phpt tests/016.phpt tests/017.phpt
11/23/2009 12:49:10 AM

svn: /pecl/rar/trunk/tests/ 019.phpt 020.phpt solid.rar store_method.rar
11/22/2009 7:48:03 PM

svn: /pecl/rar/trunk/ rar.c rar_stream.c tests/018.phpt
11/22/2009 6:57:37 PM

svn: /pecl/rar/trunk/ rar.c rar_stream.c tests/011.phpt tests/012.phpt unrar/coder.cpp unrar/dll.cpp unrar/dll.hpp unrar/extract.hpp unrar/extractchunk.cpp unrar/unpack15.cpp unrar/unpack20.cpp unrar/
11/22/2009 4:07:39 PM

svn: /pecl/rar/trunk/ config.m4 config.w32 php_rar.h rar.c rar.cpp rar_stream.c rar_stream.cpp tests/016.phpt tests/017.phpt unrar/coder.cpp unrar/extractchunk.cpp unrar/os.hpp
11/22/2009 3:14:09 AM

svn: /pecl/rar/trunk/ config.m4 config.w32 php_rar.h rar.c rar_stream.c rarentry.c tests/002.phpt tests/003.phpt tests/004.phpt tests/006.phpt tests/008.phpt tests/013.phpt tests/014.phpt tests/015.ph Reply

Group: php.pecl.cvs Subscribe Posted:11/29/2009 3:41:11 AM Replies:0 Views:20 Items(0)
--b7f2d50c9fca83761e55bd90629464c18e1a3a7b
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit

cataphract Sun, 29 Nov 2009 03:41:11 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=291411

Log:
Refactoring.
Added a bunch of constants to RarEntry.
Fixed possible crash with empty RAR files (though WinRAR doesn't let you create empty RAR files)
Added __toString method
All RarEntry properties are now private.
Made most methods not implementation dependent.

Changed paths:
U pecl/rar/trunk/config.m4
U pecl/rar/trunk/config.w32
U pecl/rar/trunk/php_rar.h
U pecl/rar/trunk/rar.c
U pecl/rar/trunk/rar_stream.c
A pecl/rar/trunk/rarentry.c
U pecl/rar/trunk/tests/002.phpt
U pecl/rar/trunk/tests/003.phpt
U pecl/rar/trunk/tests/004.phpt
U pecl/rar/trunk/tests/006.phpt
U pecl/rar/trunk/tests/008.phpt
U pecl/rar/trunk/tests/013.phpt
U pecl/rar/trunk/tests/014.phpt
U pecl/rar/trunk/tests/015.phpt
U pecl/rar/trunk/tests/018.phpt


--b7f2d50c9fca83761e55bd90629464c18e1a3a7b
Content-Type: text/x-diff; charset="utf-8"
Content-Disposition: attachment; filename="svn-diffs-291411.txt"
Content-Transfer-Encoding: base64

TW9kaWZpZWQ6IHBlY2wvcmFyL3RydW5rL2NvbmZpZy5tNAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL3Jhci90cnVu
ay9jb25maWcubTQJMjAwOS0xMS0yOSAwMzozMjo1NCBVVEMgKHJldiAyOTE0MTApCisrKyBwZWNsL3Jh
ci90cnVuay9jb25maWcubTQJMjAwOS0xMS0yOSAwMzo0MToxMSBVVEMgKHJldiAyOTE0MTEpCkBAIC0y
Niw2ICsyNiw2IEBACiAgIFBIUF9TVUJTVChSQVJfU0hBUkVEX0xJQkFERCkKICAgUEhQX0FERF9MSUJS
QVJZX1dJVEhfUEFUSChzdGRjKyssICIiLCBSQVJfU0hBUkVEX0xJQkFERCkKCi0gIFBIUF9ORVdfRVhU
RU5TSU9OKHJhciwgcmFyLmMgcmFyX3N0cmVhbS5jICR1bnJhcl9zb3VyY2VzLCAkZXh0X3NoYXJlZCws
LURSQVJETEwgLURHVUkgLURTSUxFTlQgLVduby13cml0ZS1zdHJpbmdzIC1JQGV4dF9zcmNkaXJAL3Vu
cmFyKQorICBQSFBfTkVXX0VYVEVOU0lPTihyYXIsIHJhci5jIHJhcmVudHJ5LmMgcmFyX3N0cmVhbS5j
ICR1bnJhcl9zb3VyY2VzLCAkZXh0X3NoYXJlZCwsLURSQVJETEwgLURHVUkgLURTSUxFTlQgLVduby13
cml0ZS1zdHJpbmdzIC1JQGV4dF9zcmNkaXJAL3VucmFyKQogICBQSFBfQUREX0JVSUxEX0RJUigkZXh0
X2J1aWxkZGlyL3VucmFyKQogZmkKCk1vZGlmaWVkOiBwZWNsL3Jhci90cnVuay9jb25maWcudzMyCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBlY2wvcmFyL3RydW5rL2NvbmZpZy53MzIJMjAwOS0xMS0yOSAwMzozMjo1NCBVVEMg
KHJldiAyOTE0MTApCisrKyBwZWNsL3Jhci90cnVuay9jb25maWcudzMyCTIwMDktMTEtMjkgMDM6NDE6
MTEgVVRDIChyZXYgMjkxNDExKQpAQCAtNCw3ICs0LDcgQEAKIEFSR19FTkFCTEUoInJhciIsICJSYXIg
c3VwcG9ydCIsICJubyIpOwoKIGlmIChQSFBfUkFSICE9ICJubyIpIHsKLQlFWFRFTlNJT04oInJhciIs
ICJyYXIuYyByYXJfc3RyZWFtLmMiLCBQSFBfUkFSX1NIQVJFRCwgIi9EUkFSRExMIC9ER1VJIC9EU0lM
RU5UIC9FSHNjIC9EX1dTVERJT19ERUZJTkVEIik7CisJRVhURU5TSU9OKCJyYXIiLCAicmFyLmMgcmFy
ZW50cnkuYyByYXJfc3RyZWFtLmMiLCBQSFBfUkFSX1NIQVJFRCwgIi9EUkFSRExMIC9ER1VJIC9EU0lM
RU5UIC9FSHNjIC9EX1dTVERJT19ERUZJTkVEIik7CiAJQUREX1NPVVJDRVMoY29uZmlndXJlX21vZHVs
ZV9kaXJuYW1lICsgIi91bnJhciIsCiAJCSJyYXIuY3BwIHN0cmxpc3QuY3BwIHN0cmZuLmNwcCBcCiAJ
CXBhdGhmbi5jcHAgc21hbGxmbi5jcHAgc2F2ZXBvcy5jcHAgXAoKTW9kaWZpZWQ6IHBlY2wvcmFyL3Ry
dW5rL3BocF9yYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL3Jhci90cnVuay9waHBfcmFyLmgJMjAwOS0xMS0y
OSAwMzozMjo1NCBVVEMgKHJldiAyOTE0MTApCisrKyBwZWNsL3Jhci90cnVuay9waHBfcmFyLmgJMjAw
OS0xMS0yOSAwMzo0MToxMSBVVEMgKHJldiAyOTE0MTEpCkBAIC0xNSwxMiArMTUsMTMgQEAKICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICoqKiogV0FSTklORyAqKioqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8CiAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAogICB8IFRoaXMgbW9kdWxlIG1ha2VzIHVzZSBvZiB1blJB
UiAtIGZyZWUgdXRpbGl0eSBmb3IgUkFSIGFyY2hpdmVzLiAgICAgIHwKLSAgfCBJdCdzIGxpY2Vuc2Ug
c3RhdGVzLCB0aGF0IHlvdSBNVVNUIE5PVCB1c2UgaXQncyBjb2RlIHRvIGRldmVsb3AgICAgICB8Cisg
IHwgSXRzIGxpY2Vuc2Ugc3RhdGVzLCB0aGF0IHlvdSBNVVNUIE5PVCB1c2UgaXRzIGNvZGUgdG8gZGV2
ZWxvcCAgICAgICAgfAogICB8IGEgUkFSIChXaW5SQVIpIGNvbXBhdGlibGUgYXJjaGl2ZXIuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgfCBQbGVhc2UsIHJlYWQgdW5SQVIgbGljZW5z
ZSBmb3IgZnVsbCBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICB8CiAgIHwgdW5SQVIgJiBS
QVIgY29weXJpZ2h0cyBhcmUgb3duZWQgYnkgRXVnZW5lIFJvc2hhbCAgICAgICAgICAgICAgICAgICAg
fAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSsKICAgfCBBdXRob3I6IEFudG9ueSBEb3ZnYWwgPHRvbnlAZGF5bGVzc2Rh
eS5vcmc+ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgQXV0aG9yOiBHdXN0YXZvIExvcGVz
IDxjYXRhcGhyYWN0QHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsKICovCgpAQCAtNjAsNiArNjEsMTAgQEAKICAgSE9TVF9CRU9TPTUsSE9TVF9NQVgKIH07Cgor
LyogcmFyLmMgKi8KK2ludCBsZV9yYXJfZmlsZTsKK2V4dGVybiBjaGFyICpsZV9yYXJfZmlsZV9uYW1l
OworCiBQSFBfTUlOSVRfRlVOQ1RJT04ocmFyKTsKIFBIUF9NU0hVVERPV05fRlVOQ1RJT04ocmFyKTsK
IFBIUF9SSU5JVF9GVU5DVElPTihyYXIpOwpAQCAtOTUsNiArMTAwLDggQEAKIAkJCQkgICBpbnQgKmZv
dW5kLCAvKiBPVVQgKi8KIAkJCQkgICBzdHJ1Y3QgUkFSSGVhZGVyRGF0YUV4ICpoZWFkZXJfZGF0YSAv
KiBPVVQsIGNhbiBiZSBudWxsICovCiAJCQkJICAgKTsKK3ZvaWQgX3Jhcl93aWRlX3RvX3V0Zihjb25z
dCB3Y2hhcl90ICpzcmMsIGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0X3NpemUpOwordm9pZCBfcmFyX3V0
Zl90b193aWRlKGNvbnN0IGNoYXIgKnNyYywgd2NoYXJfdCAqZGVzdCwgc2l6ZV90IGRlc3Rfc2l6ZSk7
CgogLy9QSFAgNS4yIGNvbXBhdGliaWxpdHkKICNpZiBQSFBfTUFKT1JfVkVSU0lPTiA9PSA1ICYmIFBI
UF9NSU5PUl9WRVJTSU9OIDwgMwpAQCAtMTA0LDYgKzExMSwxMiBAQAogCXx8IHBocF9jaGVja19vcGVu
X2Jhc2VkaXIoZmlsZW5hbWUgVFNSTUxTX0NDKQogI2VuZGlmCgorLyogcmFyZW50cnkuYyAqLworZXh0
ZXJuIHplbmRfY2xhc3NfZW50cnkgKnJhcl9jbGFzc19lbnRyeV9wdHI7Cit2b2lkIG1pbml0X3JhcmVu
dHJ5KFRTUk1MU19EKTsKK3ZvaWQgX3Jhcl9lbnRyeV90b196dmFsKHN0cnVjdCBSQVJIZWFkZXJEYXRh
RXggKmVudHJ5LCB6dmFsICpvYmplY3QsCisJCQkJCQkJICAgdW5zaWduZWQgbG9uZyBwYWNrZWRfc2l6
ZSBUU1JNTFNfREMpOworCiAjZW5kaWYJLyogUEhQX1JBUl9IICovCgoKCk1vZGlmaWVkOiBwZWNsL3Jh
ci90cnVuay9yYXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL3Jhci90cnVuay9yYXIuYwkyMDA5LTExLTI5IDAz
OjMyOjU0IFVUQyAocmV2IDI5MTQxMCkKKysrIHBlY2wvcmFyL3RydW5rL3Jhci5jCTIwMDktMTEtMjkg
MDM6NDE6MTEgVVRDIChyZXYgMjkxNDExKQpAQCAtNDksMjQgKzQ5LDE2IEBACgogI2luY2x1ZGUgInBo
cF9yYXIuaCIKCi1zdGF0aWMgaW50IGxlX3Jhcl9maWxlOwotI2RlZmluZSBsZV9yYXJfZmlsZV9uYW1l
ICJSYXIgZmlsZSIKLXN0YXRpYyB6ZW5kX2NsYXNzX2VudHJ5ICpyYXJfY2xhc3NfZW50cnlfcHRyOwor
aW50IGxlX3Jhcl9maWxlOworY2hhciAqbGVfcmFyX2ZpbGVfbmFtZSA9ICJSYXIgZmlsZSI7CgogLyog
e3t7IGludGVybmFsIGZ1bmN0aW9ucyBwcm90b3MgKi8KIHN0YXRpYyB2b2lkIF9yYXJfZmlsZV9saXN0
X2R0b3IoemVuZF9yc3JjX2xpc3RfZW50cnkgKiBUU1JNTFNfREMpOwogc3RhdGljIGludCBfcmFyX2xp
c3RfZmlsZXMocmFyX2ZpbGVfdCAqIFRTUk1MU19EQyk7CiBzdGF0aWMgY29uc3QgY2hhciAqIF9yYXJf
ZXJyb3JfdG9fc3RyaW5nKGludCBlcnJjb2RlKTsKLXN0YXRpYyB2b2lkIF9yYXJfZG9zX2RhdGVfdG9f
dGV4dChpbnQgZG9zX3RpbWUsIGNoYXIgKmRhdGVfc3RyaW5nKTsKLXN0YXRpYyB2b2lkIF9yYXJfZW50
cnlfdG9fenZhbChzdHJ1Y3QgUkFSSGVhZGVyRGF0YUV4ICplbnRyeSwKLQkJCQkJCQkgICB6dmFsICpv
YmplY3QsCi0JCQkJCQkJICAgdW5zaWduZWQgbG9uZyBwYWNrZWRfc2l6ZSBUU1JNTFNfREMpOwogc3Rh
dGljIGludCBfcmFyX3Jhd19lbnRyaWVzX3RvX2ZpbGVzKHJhcl9maWxlX3QgKnJhciwKIAkJCQkJCQkJ
ICAgICBjb25zdCB3Y2hhcl90ICogY29uc3QgZmlsZSwgLy9jYW4gYmUgTlVMTAogCQkJCQkJCQkgICAg
IHp2YWwgKnRhcmdldCBUU1JNTFNfREMpOwotc3RhdGljIHp2YWwgKipfcmFyX2VudHJ5X2dldF9wcm9w
ZXJ0eSh6dmFsICosIGNoYXIgKiwgaW50IFRTUk1MU19EQyk7Ci1zdGF0aWMgdm9pZCBfcmFyX3dpZGVf
dG9fdXRmKGNvbnN0IHdjaGFyX3QgKnNyYywgY2hhciAqZGVzdCwgc2l6ZV90IGRlc3Rfc2l6ZSk7Ci1z
dGF0aWMgdm9pZCBfcmFyX3V0Zl90b193aWRlKGNvbnN0IGNoYXIgKnNyYywgd2NoYXJfdCAqZGVzdCwg
c2l6ZV90IGRlc3Rfc2l6ZSk7CiBzdGF0aWMgdm9pZCBfcmFyX2ZpeF93aWRlKHdjaGFyX3QgKnN0cik7
CiAvKiB9fX0gKi8KCkBAIC04Myw4ICs3NSw5NiBAQAogCXBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JN
TFNfQ0MsIEVfV0FSTklORywgZXJyKTsKIAlyZXR1cm4gRkFJTFVSRTsKIH0KKworLyogRnJvbSB1bmlj
b2RlLmNwcAorICogSSBjYW4ndCB1c2UgdGhhdCBvbmUgZGlyZWN0eSBiZWNhdXNlIGl0IHRha2VzIGEg
Y29uc3Qgd2NoYXIsIG5vdCB3Y2hhcl90LgorICogQW5kIEkgc2hvdWxkbid0IGJlY2F1c2UgaXQncyBu
b3QgYSBwdWJsaWMgQVBJLgorICovCit2b2lkIF9yYXJfd2lkZV90b191dGYoY29uc3Qgd2NoYXJfdCAq
c3JjLCBjaGFyICpkZXN0LCBzaXplX3QgZGVzdF9zaXplKSAvKiB7e3sgKi8KK3sKKwlsb25nIGRzaXpl
PSAobG9uZykgZGVzdF9zaXplOworCWRzaXplLS07CisJd2hpbGUgKCpzcmMgIT0gMCAmJiAtLWRzaXpl
ID49IDApIHsKKwkJdWludCBjID0qKHNyYysrKTsKKwkJaWYgKGMgPCAweDgwKQorCQkJKihkZXN0Kysp
ID0gYzsKKwkJZWxzZSBpZiAoYyA8IDB4ODAwICYmIC0tZHNpemUgPj0gMCkJeworCQkJKihkZXN0Kysp
ID0gKDB4YzAgfCAoYyA+PiA2KSk7CisJCQkqKGRlc3QrKykgPSAoMHg4MCB8IChjICYgMHgzZikpOwor
CQl9CisJCWVsc2UgaWYgKGMgPCAweDEwMDAwICYmIChkc2l6ZSAtPSAyKSA+PSAwKSB7CisJCQkqKGRl
c3QrKykgPSAoMHhlMCB8IChjID4+IDEyKSk7CisJCQkqKGRlc3QrKykgPSAoMHg4MCB8ICgoYyA+PiA2
KSAmIDB4M2YpKTsKKwkJCSooZGVzdCsrKSA9ICgweDgwIHwgKGMgJiAweDNmKSk7CisJCX0KKwkJZWxz
ZSBpZiAoYyA8IDB4MjAwMDAwICYmIChkc2l6ZSAtPSAzKSA+PSAwKSB7CisJCQkqKGRlc3QrKykgPSAo
MHhmMCB8IChjID4+IDE4KSk7CisJCQkqKGRlc3QrKykgPSAoMHg4MCB8ICgoYyA+PiAxMikgJiAweDNm
KSk7CisJCQkqKGRlc3QrKykgPSAoMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpKTsKKwkJCSooZGVzdCsr
KSA9ICgweDgwIHwgKGMgJiAweDNmKSk7CisJCX0KKwl9CisJKmRlc3QgPSAwOworfQogLyogfX19ICov
CgorLyogaWRlbSAqLwordm9pZCBfcmFyX3V0Zl90b193aWRlKGNvbnN0IGNoYXIgKnNyYywgd2NoYXJf
dCAqZGVzdCwgc2l6ZV90IGRlc3Rfc2l6ZSkgLyoge3t7ICovCit7CisJbG9uZyBkc2l6ZSA9IChsb25n
KSBkZXN0X3NpemU7CisJZHNpemUtLTsKKwl3aGlsZSAoKnNyYyAhPSAwKSB7CisJCXVpbnQgYyA9ICh1
bnNpZ25lZCBjaGFyKSAqKHNyYysrKSwKKwkJCSBkOworCQlpZiAoYyA8IDB4ODApCisJCQlkID0gYzsK
KwkJZWxzZSBpZiAoKGMgPj4gNSkgPT0gNikgeworCQkJaWYgKCgqc3JjICYgMHhjMCkgIT0gMHg4MCkK
KwkJCQlicmVhazsKKwkJCWQ9KChjICYgMHgxZikgPDwgNil8KCpzcmMgJiAweDNmKTsKKwkJCXNyYysr
OworCQl9CisJCWVsc2UgaWYgKChjPj40KT09MTQpIHsKKwkJCWlmICgoc3JjWzBdICYgMHhjMCkgIT0g
MHg4MCB8fCAoc3JjWzFdICYgMHhjMCkgIT0gMHg4MCkKKwkJCQlicmVhazsKKwkJCWQgPSAoKGMgJiAw
eGYpIDw8IDEyKSB8ICgoc3JjWzBdICYgMHgzZikgPDwgNikgfCAoc3JjWzFdICYgMHgzZik7CisJCQlz
cmMgKz0gMjsKKwkJfQorCQllbHNlIGlmICgoYz4+Myk9PTMwKSB7CisJCQlpZiAoKHNyY1swXSAmIDB4
YzApICE9IDB4ODAgfHwgKHNyY1sxXSAmIDB4YzApICE9IDB4ODAgfHwgKHNyY1syXSAmIDB4YzApICE9
IDB4ODApCisJCQkJYnJlYWs7CisJCQlkID0gKChjICYgNykgPDwgMTgpIHwgKChzcmNbMF0gJiAweDNm
KSA8PCAxMikgfCAoKHNyY1sxXSAmIDB4M2YpIDw8IDYpIHwgKHNyY1syXSAmIDB4M2YpOworCQkJc3Jj
ICs9IDM7CisJCX0KKwkJZWxzZQorCQkJYnJlYWs7CisJCWlmICgtLWRzaXplIDwgMCkKKwkJCWJyZWFr
OworCQlpZiAoZCA+IDB4ZmZmZikgeworCQkJaWYgKC0tZHNpemUgPCAwIHx8IGQgPiAweDEwZmZmZikK
KwkJCQlicmVhazsKKwkJCSooZGVzdCsrKSA9ICgoZCAtIDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMDsK
KwkJCSooZGVzdCsrKSA9IChkICYgMHgzZmYpICsgMHhkYzAwOworCQl9CisJCWVsc2UKKwkJCSooZGVz
dCsrKSA9IGQ7CisJfQorCSpkZXN0ID0gMDsKK30KKy8qIH19fSAqLworCisvKiBNaXNzaW5nIGZ1bmN0
aW9ucyBmcm9tIFZDNiB7e3sgKi8KKyNpZiAhSEFWRV9TVFJOTEVOCitzdGF0aWMgc2l6ZV90IHN0cm5s
ZW4oY29uc3QgY2hhciAqcywgc2l6ZV90IG1heGxlbikgLyoge3t7ICovCit7CisJY2hhciAqciA9IG1l
bWNocihzLCAnXDAnLCBtYXhsZW4pOworCXJldHVybiByID8gci1zIDogbWF4bGVuOworfQorLyogfX19
ICovCisjZW5kaWYKKy8qIH19fSAqLworLyogfX19ICovCisKIC8qIFdBUk5JTkc6IEl0J3MgdGhlIGNh
bGxlciB3aG8gbXVzdCBjbG9zZSB0aGUgYXJjaGl2ZS4KICAqIEtpbmQgb2YgYWdhaW5zdCB0aGUgY29u
dmVudGlvbnMgKi8KIGludCBfcmFyX2ZpbmRfZmlsZShzdHJ1Y3QgUkFST3BlbkFyY2hpdmVEYXRhRXgg
Km9wZW5fZGF0YSwgLyogSU4gKi8KQEAgLTE1NCwxNSArMjM0LDYgQEAKIC8qIH19fSAqLwogLyogPGlu
dGVybmFsPiAqLwoKLSNkZWZpbmUgUkFSX0dFVF9QUk9QRVJUWSh2YXIsIHByb3BfbmFtZSkgXAotCWlm
ICghZW50cnlfb2JqKSB7IFwKLQkJcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9XQVJO
SU5HLCAidGhpcyBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBzdGF0aWNhbGx5Iik7IFwKLQkJUkVUVVJO
X0ZBTFNFOyBcCi0JfSBcCi0JaWYgKCh2YXIgPSBfcmFyX2VudHJ5X2dldF9wcm9wZXJ0eShlbnRyeV9v
YmosIHByb3BfbmFtZSwgc2l6ZW9mKHByb3BfbmFtZSkgVFNSTUxTX0NDKSkgPT0gTlVMTCkgeyBcCi0J
CVJFVFVSTl9GQUxTRTsgXAotCX0KLQogc3RhdGljIHZvaWQgX3Jhcl9maWxlX2xpc3RfZHRvcih6ZW5k
X3JzcmNfbGlzdF9lbnRyeSAqcnNyYyBUU1JNTFNfREMpIC8qIHt7eyAqLwogewogCXJhcl9maWxlX3Qg
KnJhciA9IChyYXJfZmlsZV90ICopcnNyYy0+cHRyOwpAQCAtMjgyLDcxICszNTMsNiBAQAogfQogLyog
fX19ICovCgotc3RhdGljIHZvaWQgX3Jhcl9kb3NfZGF0ZV90b190ZXh0KGludCBkb3NfdGltZSwgY2hh
ciAqZGF0ZV9zdHJpbmcpIC8qIHt7eyAqLwotewotCWludCBzZWNvbmQsIG1pbnV0ZSwgaG91ciwgZGF5
LCBtb250aCwgeWVhcjsKLQkvKiBmb2xsb3dpbmcgbGluZXMgd2VyZSB0YWtlbiBmcm9tIHRpbWVmbi5j
cHAgKi8KLQlzZWNvbmQgPSAoZG9zX3RpbWUgJiAweDFmKSoyOwotCW1pbnV0ZSA9IChkb3NfdGltZT4+
NSkgJiAweDNmOwotCWhvdXIgICA9IChkb3NfdGltZT4+MTEpICYgMHgxZjsKLQlkYXkgICAgPSAoZG9z
X3RpbWU+PjE2KSAmIDB4MWY7Ci0JbW9udGggID0gKGRvc190aW1lPj4yMSkgJiAweDBmOwotCXllYXIg
ICA9IChkb3NfdGltZT4+MjUpKzE5ODA7Ci0Jc3ByaW50ZihkYXRlX3N0cmluZywgIiV1LSUwMnUtJTAy
dSAlMDJ1OiUwMnU6JTAydSIsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTsK
LX0KLS8qIH19fSAqLwotCi0vKiBzaG91bGQgYmUgcGFzc2VkIHRoZSBsYXN0IGVudHJ5IHRoYXQgY29y
cmVzcG9uZHMgdG8gYSBnaXZlbiBmaWxlCi0gKiBvbmx5IHRoYXQgb25lIGhhcyB0aGUgY29ycmVjdCBD
UkMuIFN0aWxsLCBpdCBtYXkgaGF2ZSBhIHdyb25nIHBhY2tlZFNpemUgKi8KLXN0YXRpYyB2b2lkIF9y
YXJfZW50cnlfdG9fenZhbChzdHJ1Y3QgUkFSSGVhZGVyRGF0YUV4ICplbnRyeSwgenZhbCAqb2JqZWN0
LAotCQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGFja2VkX3NpemUgVFNSTUxTX0RDKSAvKiB7e3sgKi8K
LXsKLQljaGFyIHRtcF9zIFtNQVhfTEVOR1RIX09GX0xPTkcgKyAxXTsKLQljaGFyIHRpbWVbNTBdOwot
CWNoYXIgKmZpbGVuYW1lOwotCWxvbmcgdW5wU2l6ZTsKLQotCWlmIChzaXplb2YobG9uZykgPj0gOCkK
LQkJdW5wU2l6ZSA9ICgobG9uZykgZW50cnktPlVucFNpemUpICsgKCgobG9uZykgZW50cnktPlVucFNp
emVIaWdoKSA8PCAzMik7Ci0JZWxzZSB7Ci0JCS8vZm9yIDMyLWJpdCBsb25nLCBhdCBsZWFzdCBkb24n
dCBnaXZlIG5lZ2F0aXZlIHZhbHVlcwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5VbnBTaXpl
ID4gKHVuc2lnbmVkIGxvbmcpIExPTkdfTUFYCi0JCQkJfHwgZW50cnktPlVucFNpemVIaWdoICE9IDAp
Ci0JCQl1bnBTaXplID0gTE9OR19NQVg7Ci0JCWVsc2UKLQkJCXVucFNpemUgPSAobG9uZykgZW50cnkt
PlVucFNpemU7Ci0JfQotCi0JLyogMiBpbnN0ZWFkIG9mIHNpemVvZih3Y2hhcl90KSB3b3VsZCBzdWZm
aWNlLCBJIHRoaW5rLiBJIGRvdWJ0Ci0JICogX3Jhcl93aWRlX3RvX3V0ZiBoYW5kbGVzIGNoYXJhY3Rl
cnMgbm90IGluIFVDUy0yLiBCdXQgYmV0dGVyIGJlIHNhZmUgKi8KLQlmaWxlbmFtZSA9IChjaGFyKikg
ZW1hbGxvYyhzaXplb2YoZW50cnktPkZpbGVOYW1lVykgKiBzaXplb2Yod2NoYXJfdCkpOwotCi0JaWYg
KHBhY2tlZF9zaXplID4gKHVuc2lnbmVkIGxvbmcpIExPTkdfTUFYKQotCQlwYWNrZWRfc2l6ZSA9IExP
TkdfTUFYOwotCV9yYXJfd2lkZV90b191dGYoZW50cnktPkZpbGVOYW1lVywgZmlsZW5hbWUsCi0JCXNp
emVvZihlbnRyeS0+RmlsZU5hbWVXKSAqIHNpemVvZih3Y2hhcl90KSk7Ci0JYWRkX3Byb3BlcnR5X3N0
cmluZyhvYmplY3QsICJuYW1lIiwgZmlsZW5hbWUsIDEpOwotCWFkZF9wcm9wZXJ0eV9sb25nKG9iamVj
dCwgInVucGFja2VkX3NpemUiLCBlbnRyeS0+VW5wU2l6ZSk7Ci0JLy9wYWNrZWQgc2l6ZSBjYW4gYmUg
d3JvbmcgaW4gbXVsdGktdm9sdW1lIGFyY2hpdmVzCi0JYWRkX3Byb3BlcnR5X2xvbmcob2JqZWN0LCAi
cGFja2VkX3NpemUiLCBwYWNrZWRfc2l6ZSk7Ci0JYWRkX3Byb3BlcnR5X2xvbmcob2JqZWN0LCAiaG9z
dF9vcyIsIGVudHJ5LT5Ib3N0T1MpOwotCi0JX3Jhcl9kb3NfZGF0ZV90b190ZXh0KGVudHJ5LT5GaWxl
VGltZSwgdGltZSk7Ci0JYWRkX3Byb3BlcnR5X3N0cmluZyhvYmplY3QsICJmaWxlX3RpbWUiLCB0aW1l
LCAxKTsKLQotCXNwcmludGYodG1wX3MsICIlbHgiLCBlbnRyeS0+RmlsZUNSQyk7Ci0JYWRkX3Byb3Bl
cnR5X3N0cmluZyhvYmplY3QsICJjcmMiLCB0bXBfcywgMSk7Ci0KLQlhZGRfcHJvcGVydHlfbG9uZyhv
YmplY3QsICJhdHRyIiwgIGVudHJ5LT5GaWxlQXR0cik7Ci0JYWRkX3Byb3BlcnR5X2xvbmcob2JqZWN0
LCAidmVyc2lvbiIsICBlbnRyeS0+VW5wVmVyKTsKLQlhZGRfcHJvcGVydHlfbG9uZyhvYmplY3QsICJt
ZXRob2QiLCAgZW50cnktPk1ldGhvZCk7Ci0JLy9pZiBiaXRzIDUsIDYgYW5kIDcgYW5kIHNldCAoc3Rh
cnRpbmcgZnJvbSAwKQotCWFkZF9wcm9wZXJ0eV9ib29sKG9iamVjdCwgImRpcmVjdG9yeSIsICAoKGVu
dHJ5LT5GbGFncyAmIDB4RTApID09IDB4RTApKTsKLQotCWVmcmVlKGZpbGVuYW1lKTsKLX0KLS8qIH19
fSAqLwotCiBzdGF0aWMgaW50IF9yYXJfcmF3X2VudHJpZXNfdG9fZmlsZXMocmFyX2ZpbGVfdCAqcmFy
LAogCQkJCQkJCQkJIGNvbnN0IHdjaGFyX3QgKiBjb25zdCBmaWxlLCAvL2NhbiBiZSBOVUxMCiAJCQkJ
CQkJCQkgenZhbCAqdGFyZ2V0IFRTUk1MU19EQykgLyoge3t7ICovCkBAIC0zNTQsNyArMzYwLDcgQEAK
IAl3Y2hhcl90IGxhc3RfbmFtZVsxMDI0XSA9IHtMJ1wwJ307CiAJY2hhciBzdHJpY3RfbGFzdF9uYW1l
WzEwMjRdID0geydcMCd9OwogCXVuc2lnbmVkIGxvbmcgcGFja2VkX3NpemUgPSAwVUw7Ci0Jc3RydWN0
IFJBUkhlYWRlckRhdGFFeCAqbGFzdF9lbnRyeTsKKwlzdHJ1Y3QgUkFSSGVhZGVyRGF0YUV4ICpsYXN0
X2VudHJ5ID0gTlVMTDsKIAlpbnQgYW55X2NvbW1pdCA9IEZBTFNFOwogCWludCBmaXJzdF9maWxlX2No
ZWNrID0gVFJVRTsKIAlpbnQgaTsKQEAgLTM3MiwxNSArMzc4LDE1IEBACiAJCQllbnRyeSA9IHJhci0+
ZW50cmllc1tpXTsKIAkJCWN1cnJlbnRfbmFtZSA9IGVudHJ5LT5GaWxlTmFtZVc7CiAJCQlzdHJpY3Rf
Y3VycmVudF9uYW1lID0gZW50cnktPkZpbGVOYW1lOwotCQl9CgotCQkvKiBJZiBmaWxlIGlzIGNvbnRp
bnVlZCBmcm9tIHByZXZpb3VzIHZvbHVtZSwgc2tpcCBpdCwgYXMgb3RoZXJ3aXNlCi0JCSAqIGluY29y
cmVjdCBwYWNrZWQgYW5kIHVucGFja2VkIHNpemVzIHdvdWxkIGJlIHJldHVybmVkICovCi0JCWlmIChm
aXJzdF9maWxlX2NoZWNrKSB7Ci0JCQlpZiAoZW50cnktPkZsYWdzICYgMHgwMSkKLQkJCQljb250aW51
ZTsKLQkJCWVsc2UKLQkJCQlmaXJzdF9maWxlX2NoZWNrID0gRkFMU0U7CisJCQkvKiBJZiBmaWxlIGlz
IGNvbnRpbnVlZCBmcm9tIHByZXZpb3VzIHZvbHVtZSwgc2tpcCBpdCwgYXMgb3RoZXJ3aXNlCisJCQkg
KiBpbmNvcnJlY3QgcGFja2VkIGFuZCB1bnBhY2tlZCBzaXplcyB3b3VsZCBiZSByZXR1cm5lZCAqLwor
CQkJaWYgKGZpcnN0X2ZpbGVfY2hlY2spIHsKKwkJCQlpZiAoZW50cnktPkZsYWdzICYgMHgwMSkKKwkJ
CQkJY29udGludWU7CisJCQkJZWxzZQorCQkJCQlmaXJzdF9maWxlX2NoZWNrID0gRkFMU0U7CisJCQl9
CiAJCX0KCiAJCS8qIFRoZSB3aWRlIGZpbGUgbmFtZSBtYXkgcmVzdWx0IGZyb20gY29udmVyc2lvbiBm
cm9tIHRoZQpAQCAtMzk0LDI5ICs0MDAsMzkgQEAKIAkJY29tbWl0X2ZpbGUgPSBlbmRlZF9maWxlICYm
IChmaWxlID09IE5VTEwgfHwKIAkJCShmaWxlICE9IE5VTEwgJiYgd2NzbmNtcChsYXN0X25hbWUsIGZp
bGUsIDEwMjQpID09IDApKTsKCi0JCWlmIChjb21taXRfZmlsZSkgewotCQkJLy90aGlzIGVudHJ5IGNv
cnJlc3BvbmRzIHRvIGEgbmV3IGZpbGUKLQkJCXp2YWwgKnRtcDsKKwkJaWYgKGNvbW1pdF9maWxlKSB7
IC8vdGhpcyBlbnRyeSBjb3JyZXNwb25kcyB0byBhIG5ldyBmaWxlCisJCQl6dmFsICplbnRyeV9vYmos
CisJCQkJICpyYXJfcmVzOwoKLQkJCWFueV9jb21taXQgPSBUUlVFOworCQkJLyogZ3VhcmFudGVlZCBi
eSBjb21taXRfZmlsZSA9IGVuZGVkX2ZpbGUgJiYuLi4KKwkJCSAqIHdpdGggZW5kZWRfZmlsZSA9IGhh
c19sYXN0X2VudHJ5ICYmIC4uLgorCQkJICogd2l0aCBoYXNfbGFzdF9lbnRyeSA9IChsYXN0X25hbWUg
IT0gTlVMTCkKKwkJCSAqIGFuZCBsYXN0X2VudHJ5IGlzIHNldCB3aGVuIGxhc3RfbmFtZSBpcyBzZXQg
Ki8KKwkJCWFzc2VydChsYXN0X2VudHJ5ICE9IE5VTEwpOwoKKwkJCWFueV9jb21taXQgPSBUUlVFOyAv
L2F0IGxlYXN0IG9uZSBjb21taXQgZG9uZQorCiAJCQkvL3Rha2UgY2FyZSBvZiBsYXN0IGVudHJ5CiAJ
CQkvKiBpZiBmaWxlIGlzIE5VTEwsIGFzc3VtZSB0YXJnZXQgaXMgYSB6dmFsIHRoYXQgd2lsbCBob2xk
IHRoZQogCQkJICogZW50cnksIG90aGVyd2lzZSBhc3N1bWUgaXQgaXMgYSBudW1lcmljYWwgYXJyYXkg
Ki8KIAkJCWlmIChmaWxlID09IE5VTEwpIHsKLQkJCQlNQUtFX1NURF9aVkFMKHRtcCk7CisJCQkJTUFL
RV9TVERfWlZBTChlbnRyeV9vYmopOwogCQkJfQogCQkJZWxzZQotCQkJCXRtcCA9IHRhcmdldDsKKwkJ
CQllbnRyeV9vYmogPSB0YXJnZXQ7CgotCQkJb2JqZWN0X2luaXRfZXgodG1wLCByYXJfY2xhc3NfZW50
cnlfcHRyKTsKLQkJCWFkZF9wcm9wZXJ0eV9yZXNvdXJjZSh0bXAsICJyYXJmaWxlIiwgcmFyLT5pZCk7
CisJCQlvYmplY3RfaW5pdF9leChlbnRyeV9vYmosIHJhcl9jbGFzc19lbnRyeV9wdHIpOworCQkJLy9h
ZGRfcHJvcGVydHlfcmVzb3VyY2UoZW50cnlfb2JqLCAicmFyZmlsZSIsIHJhci0+aWQpOworCQkJTUFL
RV9TVERfWlZBTChyYXJfcmVzKTsKKwkJCVpWQUxfUkVTT1VSQ0UocmFyX3JlcywgcmFyLT5pZCk7CisJ
CQl6ZW5kX3VwZGF0ZV9wcm9wZXJ0eShyYXJfY2xhc3NfZW50cnlfcHRyLCBlbnRyeV9vYmosICJyYXJm
aWxlIiwKKwkJCQlzaXplb2YoInJhcmZpbGUiKSAtIDEsIHJhcl9yZXMgVFNSTUxTX0NDKTsKIAkJCS8q
IHRvIGF2b2lkIGRlc3RydWN0aW9uIG9mIHRoZSByZXNvdXJjZSBkdWUgdG8gbGUtPnJlZmNvdW50IGhp
dHRpbmcKIAkJCSAqIDAgd2hlbiB0aGlzIG5ldyB6dmFsIHdlJ3JlIGNyZWF0aW5nIGlzIGRlc3Ryb3ll
ZD8gKi8KIAkJCXplbmRfbGlzdF9hZGRyZWYocmFyLT5pZCk7Ci0JCQlfcmFyX2VudHJ5X3RvX3p2YWwo
bGFzdF9lbnRyeSwgdG1wLCBwYWNrZWRfc2l6ZSBUU1JNTFNfQ0MpOworCQkJX3Jhcl9lbnRyeV90b196
dmFsKGxhc3RfZW50cnksIGVudHJ5X29iaiwgcGFja2VkX3NpemUgVFNSTUxTX0NDKTsKIAkJCWlmIChm
aWxlID09IE5VTEwpCi0JCQkJYWRkX25leHRfaW5kZXhfenZhbCh0YXJnZXQsIHRtcCk7CisJCQkJYWRk
X25leHRfaW5kZXhfenZhbCh0YXJnZXQsIGVudHJ5X29iaik7CiAJCX0KCiAJCWlmIChlbmRlZF9maWxl
KSB7CkBAIC00NTAsOTUgKzQ2Niw2IEBACiB9CiAvKiB9fX0gKi8KCi1zdGF0aWMgenZhbCAqKl9yYXJf
ZW50cnlfZ2V0X3Byb3BlcnR5KHp2YWwgKmlkLCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiBUU1JNTFNf
REMpIC8qIHt7eyAqLwotewotCXp2YWwgKip0bXA7Ci0KLQlpZiAoemVuZF9oYXNoX2ZpbmQoWl9PQkpQ
Uk9QX1AoaWQpLCBuYW1lLCBuYW1lbGVuLCAodm9pZCAqKikmdG1wKSA9PSBGQUlMVVJFKSB7Ci0JCXBo
cF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FSTklORywgIlVuYWJsZSB0byBmaW5kIHBy
b3BlcnR5ICclcyciLCBuYW1lKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiB0bXA7Ci19Ci0v
KiB9fX0gKi8KLQotLyogRnJvbSB1bmljb2RlLmNwcAotICogSSBjYW4ndCB1c2UgdGhhdCBvbmUgZGly
ZWN0eSBiZWNhdXNlIGl0IHRha2VzIGEgY29uc3Qgd2NoYXIsIG5vdCB3Y2hhcl90LgotICogQW5kIEkg
c2hvdWxkbid0IGJlY2F1c2UgaXQncyBub3QgYSBwdWJsaWMgQVBJLgotICovCi1zdGF0aWMgdm9pZCBf
cmFyX3dpZGVfdG9fdXRmKGNvbnN0IHdjaGFyX3QgKnNyYywgY2hhciAqZGVzdCwgc2l6ZV90IGRlc3Rf
c2l6ZSkgLyoge3t7ICovCi17Ci0JbG9uZyBkc2l6ZT0gKGxvbmcpIGRlc3Rfc2l6ZTsKLQlkc2l6ZS0t
OwotCXdoaWxlICgqc3JjICE9IDAgJiYgLS1kc2l6ZSA+PSAwKSB7Ci0JCXVpbnQgYyA9KihzcmMrKyk7
Ci0JCWlmIChjIDwgMHg4MCkKLQkJCSooZGVzdCsrKSA9IGM7Ci0JCWVsc2UgaWYgKGMgPCAweDgwMCAm
JiAtLWRzaXplID49IDApCXsKLQkJCSooZGVzdCsrKSA9ICgweGMwIHwgKGMgPj4gNikpOwotCQkJKihk
ZXN0KyspID0gKDB4ODAgfCAoYyAmIDB4M2YpKTsKLQkJfQotCQllbHNlIGlmIChjIDwgMHgxMDAwMCAm
JiAoZHNpemUgLT0gMikgPj0gMCkgewotCQkJKihkZXN0KyspID0gKDB4ZTAgfCAoYyA+PiAxMikpOwot
CQkJKihkZXN0KyspID0gKDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSk7Ci0JCQkqKGRlc3QrKykgPSAo
MHg4MCB8IChjICYgMHgzZikpOwotCQl9Ci0JCWVsc2UgaWYgKGMgPCAweDIwMDAwMCAmJiAoZHNpemUg
LT0gMykgPj0gMCkgewotCQkJKihkZXN0KyspID0gKDB4ZjAgfCAoYyA+PiAxOCkpOwotCQkJKihkZXN0
KyspID0gKDB4ODAgfCAoKGMgPj4gMTIpICYgMHgzZikpOwotCQkJKihkZXN0KyspID0gKDB4ODAgfCAo
KGMgPj4gNikgJiAweDNmKSk7Ci0JCQkqKGRlc3QrKykgPSAoMHg4MCB8IChjICYgMHgzZikpOwotCQl9
Ci0JfQotCSpkZXN0ID0gMDsKLX0KLS8qIH19fSAqLwotCi0vKiBpZGVtICovCi1zdGF0aWMgdm9pZCBf
cmFyX3V0Zl90b193aWRlKGNvbnN0IGNoYXIgKnNyYywgd2NoYXJfdCAqZGVzdCwgc2l6ZV90IGRlc3Rf
c2l6ZSkgLyoge3t7ICovCi17Ci0JbG9uZyBkc2l6ZSA9IChsb25nKSBkZXN0X3NpemU7Ci0JZHNpemUt
LTsKLQl3aGlsZSAoKnNyYyAhPSAwKSB7Ci0JCXVpbnQgYyA9ICh1bnNpZ25lZCBjaGFyKSAqKHNyYysr
KSwKLQkJCSBkOwotCQlpZiAoYyA8IDB4ODApCi0JCQlkID0gYzsKLQkJZWxzZSBpZiAoKGMgPj4gNSkg
PT0gNikgewotCQkJaWYgKCgqc3JjICYgMHhjMCkgIT0gMHg4MCkKLQkJCQlicmVhazsKLQkJCWQ9KChj
ICYgMHgxZikgPDwgNil8KCpzcmMgJiAweDNmKTsKLQkJCXNyYysrOwotCQl9Ci0JCWVsc2UgaWYgKChj
Pj40KT09MTQpIHsKLQkJCWlmICgoc3JjWzBdICYgMHhjMCkgIT0gMHg4MCB8fCAoc3JjWzFdICYgMHhj
MCkgIT0gMHg4MCkKLQkJCQlicmVhazsKLQkJCWQgPSAoKGMgJiAweGYpIDw8IDEyKSB8ICgoc3JjWzBd
ICYgMHgzZikgPDwgNikgfCAoc3JjWzFdICYgMHgzZik7Ci0JCQlzcmMgKz0gMjsKLQkJfQotCQllbHNl
IGlmICgoYz4+Myk9PTMwKSB7Ci0JCQlpZiAoKHNyY1swXSAmIDB4YzApICE9IDB4ODAgfHwgKHNyY1sx
XSAmIDB4YzApICE9IDB4ODAgfHwgKHNyY1syXSAmIDB4YzApICE9IDB4ODApCi0JCQkJYnJlYWs7Ci0J
CQlkID0gKChjICYgNykgPDwgMTgpIHwgKChzcmNbMF0gJiAweDNmKSA8PCAxMikgfCAoKHNyY1sxXSAm
IDB4M2YpIDw8IDYpIHwgKHNyY1syXSAmIDB4M2YpOwotCQkJc3JjICs9IDM7Ci0JCX0KLQkJZWxzZQot
CQkJYnJlYWs7Ci0JCWlmICgtLWRzaXplIDwgMCkKLQkJCWJyZWFrOwotCQlpZiAoZCA+IDB4ZmZmZikg
ewotCQkJaWYgKC0tZHNpemUgPCAwIHx8IGQgPiAweDEwZmZmZikKLQkJCQlicmVhazsKLQkJCSooZGVz
dCsrKSA9ICgoZCAtIDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMDsKLQkJCSooZGVzdCsrKSA9IChkICYg
MHgzZmYpICsgMHhkYzAwOwotCQl9Ci0JCWVsc2UKLQkJCSooZGVzdCsrKSA9IGQ7Ci0JfQotCSpkZXN0
ID0gMDsKLX0KLS8qIH19fSAqLwotCiBzdGF0aWMgdm9pZCBfcmFyX2ZpeF93aWRlKHdjaGFyX3QgKnN0
cikgLyoge3t7ICovCiB7CiAJd2NoYXJfdCAqd3JpdGUsCkBAIC03MzQsNyArNjYxLDYgQEAKIHsKIAl6
dmFsICpmaWxlOwogCXJhcl9maWxlX3QgKnJhciA9IE5VTEw7Ci0JaW50IGZpbGVfY291bnRlciA9IDA7
CgogCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgInIi
LCAmZmlsZSkgPT0gRkFJTFVSRSkgewogCQlyZXR1cm47CkBAIC03NDksMjY5ICs2NzUsNiBAQAogfQog
LyogfX19ICovCgotLyoge3t7IHByb3RvIGJvb2wgUmFyRW50cnk6OmV4dHJhY3Qoc3RyaW5nIGRpciBb
LCBzdHJpbmcgZmlsZXBhdGggXSkKLSAgIEV4dHJhY3QgZmlsZSBmcm9tIHRoZSBhcmNoaXZlICovCi1Q
SFBfTUVUSE9EKHJhcmVudHJ5LCBleHRyYWN0KQoteyAvL2xvdHMgb2YgdmFyaWFibGVzLCBidXQgbm8g
bmVlZCB0byBiZSBpbnRpbWlkYXRlZAotCWNoYXIJCQkJCSpkaXIsCi0JCQkJCQkJKmZpbGVwYXRoID0g
TlVMTDsKLQlpbnQJCQkJCQlkaXJfbGVuLAotCQkJCQkJCWZpbGVwYXRoX2xlbiA9IDA7Ci0JY2hhcgkJ
CQkJKmNvbnNpZGVyZWRfcGF0aDsKLQljaGFyCQkJCQljb25zaWRlcmVkX3BhdGhfcmVzW01BWFBBVEhM
RU5dOwotCWludAkJCQkJCXdpdGhfc2Vjb25kX2FyZzsKLQotCXp2YWwJCQkJCSoqdG1wLAotCQkJCQkJ
CSoqdG1wX25hbWU7Ci0JcmFyX2ZpbGVfdAkJCQkqcmFyID0gTlVMTDsKLQl6dmFsCQkJCQkqZW50cnlf
b2JqID0gZ2V0VGhpcygpOwotCXN0cnVjdCBSQVJIZWFkZXJEYXRhRXgJZW50cnk7Ci0JSEFORExFCQkJ
CQlleHRyYWN0X2hhbmRsZSA9IE5VTEw7Ci0JaW50CQkJCQkJcmVzdWx0OwotCWludAkJCQkJCWZvdW5k
OwotCi0JaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAi
c3xzIiwgJmRpciwgJmRpcl9sZW4sICZmaWxlcGF0aCwgJmZpbGVwYXRoX2xlbikgPT0gRkFJTFVSRSAp
IHsKLQkJcmV0dXJuOwotCX0KLQotCVJBUl9HRVRfUFJPUEVSVFkodG1wLCAicmFyZmlsZSIpOwotCVpF
TkRfRkVUQ0hfUkVTT1VSQ0UocmFyLCByYXJfZmlsZV90ICosIHRtcCwgLTEsIGxlX3Jhcl9maWxlX25h
bWUsIGxlX3Jhcl9maWxlKTsKLQotCS8qIERlY2lkZSB3aGVyZSB0byBleHRyYWN0ICovCi0Jd2l0aF9z
ZWNvbmRfYXJnID0gKGZpbGVwYXRoX2xlbiAhPSAwKTsKLQotCS8vdGhlIGFyZ3VtZW50cyBhcmUgbXV0
dWFsbHkgZXhjbHVzaXZlLiBJZiB0aGUgc2Vjb25kIGlzIHNwZWNpZmllZCwgbXVzdCBpZ25vcmUgdGhl
IGZpcnN0Ci0JaWYgKCF3aXRoX3NlY29uZF9hcmcpIHsKLQkJaWYgKGRpcl9sZW4gPT0gMCkgLy9ib3Ro
IHBhcmFtcyBlbXB0eQotCQkJZGlyID0gIi4iOwotCQljb25zaWRlcmVkX3BhdGggPSBkaXI7Ci0JfQot
CWVsc2UgewotCQljb25zaWRlcmVkX3BhdGggPSBmaWxlcGF0aDsKLQl9Ci0KLQlpZiAoT1BFTkJBU0VE
SVJfQ0hFQ0tQQVRIKGNvbnNpZGVyZWRfcGF0aCkpIHsKLQkJUkVUVVJOX0ZBTFNFOwotCX0KLQlpZiAo
IWV4cGFuZF9maWxlcGF0aChjb25zaWRlcmVkX3BhdGgsIGNvbnNpZGVyZWRfcGF0aF9yZXMgVFNSTUxT
X0NDKSkgewotCQlSRVRVUk5fRkFMU0U7Ci0JfQotCi0JLyogRmluZCBmaWxlIGluc2lkZSBhcmNoaXZl
ICovCi0JUkFSX0dFVF9QUk9QRVJUWSh0bXBfbmFtZSwgIm5hbWUiKTsKLQotCXJlc3VsdCA9IF9yYXJf
ZmluZF9maWxlKHJhci0+ZXh0cmFjdF9vcGVuX2RhdGEsIFpfU1RSVkFMX1BQKHRtcF9uYW1lKSwKLQkJ
JmV4dHJhY3RfaGFuZGxlLCAmZm91bmQsICZlbnRyeSk7Ci0KLQlpZiAoX3Jhcl9oYW5kbGVfZXJyb3Io
cmVzdWx0IFRTUk1MU19DQykgPT0gRkFJTFVSRSkgewotCQlSRVRWQUxfRkFMU0U7Ci0JCWdvdG8gY2xl
YW51cDsKLQl9Ci0KLQlpZiAoIWZvdW5kKSB7Ci0JCXBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JNTFNf
Q0MsIEVfV0FSTklORywKLQkJCSJDYW4ndCBmaW5kIGZpbGUgJXMgaW4gYXJjaGl2ZSAlcyIsIFpfU1RS
VkFMX1BQKHRtcF9uYW1lKSwKLQkJCXJhci0+bGlzdF9vcGVuX2RhdGEtPkFyY05hbWUpOwotCQlSRVRW
QUxfRkFMU0U7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0KLQkvKiBEbyBleHRyYWN0aW9uICovCi0JaWYg
KCF3aXRoX3NlY29uZF9hcmcpCi0JCXJlc3VsdCA9IFJBUlByb2Nlc3NGaWxlKGV4dHJhY3RfaGFuZGxl
LCBSQVJfRVhUUkFDVCwKLQkJCWNvbnNpZGVyZWRfcGF0aF9yZXMsIE5VTEwpOwotCWVsc2UKLQkJcmVz
dWx0ID0gUkFSUHJvY2Vzc0ZpbGUoZXh0cmFjdF9oYW5kbGUsIFJBUl9FWFRSQUNULAotCQkJTlVMTCwg
Y29uc2lkZXJlZF9wYXRoX3Jlcyk7Ci0KLQlpZiAoX3Jhcl9oYW5kbGVfZXJyb3IocmVzdWx0IFRTUk1M
U19DQykgPT0gRkFJTFVSRSkgewotCQlSRVRWQUxfRkFMU0U7Ci0JfQotCWVsc2UgewotCQlSRVRWQUxf
VFJVRTsKLQl9Ci0KLWNsZWFudXA6Ci0JaWYgKGV4dHJhY3RfaGFuZGxlICE9IE5VTEwpCi0JCVJBUkNs
b3NlQXJjaGl2ZShleHRyYWN0X2hhbmRsZSk7Ci19Ci0vKiB9fX0gKi8KLQotLyoge3t7IHByb3RvIHN0
cmluZyBSYXJFbnRyeTo6Z2V0TmFtZSgpCi0gICBSZXR1cm4gZW50cnkgbmFtZSAqLwotUEhQX01FVEhP
RChyYXJlbnRyeSwgZ2V0TmFtZSkKLXsKLQl6dmFsICoqdG1wOwotCXJhcl9maWxlX3QgKnJhciA9IE5V
TEw7Ci0JenZhbCAqZW50cnlfb2JqID0gZ2V0VGhpcygpOwotCi0JUkFSX0dFVF9QUk9QRVJUWSh0bXAs
ICJuYW1lIik7Ci0KLQljb252ZXJ0X3RvX3N0cmluZ19leCh0bXApOwotCVJFVFVSTl9TVFJJTkdMKFpf
U1RSVkFMX1BQKHRtcCksIFpfU1RSTEVOX1BQKHRtcCksIDEpOwotfQotLyogfX19ICovCi0KLS8qIHt7
eyBwcm90byBpbnQgUmFyRW50cnk6OmdldFVucGFja2VkU2l6ZSgpCi0gICBSZXR1cm4gdW5wYWNrZWQg
c2l6ZSBvZiB0aGUgZW50cnkgKi8KLVBIUF9NRVRIT0QocmFyZW50cnksIGdldFVucGFja2VkU2l6ZSkK
LXsKLQl6dmFsICoqdG1wOwotCXJhcl9maWxlX3QgKnJhciA9IE5VTEw7Ci0JenZhbCAqZW50cnlfb2Jq
ID0gZ2V0VGhpcygpOwotCi0JUkFSX0dFVF9QUk9QRVJUWSh0bXAsICJ1bnBhY2tlZF9zaXplIik7Ci0K
LQljb252ZXJ0X3RvX2xvbmdfZXgodG1wKTsKLQlSRVRVUk5fTE9ORyhaX0xWQUxfUFAodG1wKSk7Ci19
Ci0vKiB9fX0gKi8KLQotLyoge3t7IHByb3RvIGludCBSYXJFbnRyeTo6Z2V0UGFja2VkU2l6ZSgpCi0g
ICBSZXR1cm4gcGFja2VkIHNpemUgb2YgdGhlIGVudHJ5ICovCi1QSFBfTUVUSE9EKHJhcmVudHJ5LCBn
ZXRQYWNrZWRTaXplKQotewotCXp2YWwgKip0bXA7Ci0JcmFyX2ZpbGVfdCAqcmFyID0gTlVMTDsKLQl6
dmFsICplbnRyeV9vYmogPSBnZXRUaGlzKCk7Ci0KLQlSQVJfR0VUX1BST1BFUlRZKHRtcCwgInBhY2tl
ZF9zaXplIik7Ci0KLQljb252ZXJ0X3RvX2xvbmdfZXgodG1wKTsKLQlSRVRVUk5fTE9ORyhaX0xWQUxf
UFAodG1wKSk7Ci19Ci0vKiB9fX0gKi8KLQotLyoge3t7IHByb3RvIGludCBSYXJFbnRyeTo6Z2V0SG9z
dE9zKCkKLSAgIFJldHVybiBob3N0IE9TIG9mIHRoZSBlbnRyeSAqLwotUEhQX01FVEhPRChyYXJlbnRy
eSwgZ2V0SG9zdE9zKQotewotCXp2YWwgKip0bXA7Ci0JcmFyX2ZpbGVfdCAqcmFyID0gTlVMTDsKLQl6
dmFsICplbnRyeV9vYmogPSBnZXRUaGlzKCk7Ci0KLQlSQVJfR0VUX1BST1BFUlRZKHRtcCwgImhvc3Rf
b3MiKTsKLQotCWNvbnZlcnRfdG9fbG9uZ19leCh0bXApOwotCVJFVFVSTl9MT05HKFpfTFZBTF9QUCh0
bXApKTsKLX0KLS8qIH19fSAqLwotCi0vKiB7e3sgcHJvdG8gc3RyaW5nIFJhckVudHJ5OjpnZXRGaWxl
VGltZSgpCi0gICBSZXR1cm4gbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGVudHJ5ICovCi1QSFBfTUVU
SE9EKHJhcmVudHJ5LCBnZXRGaWxlVGltZSkKLXsKLQl6dmFsICoqdG1wOwotCXJhcl9maWxlX3QgKnJh
ciA9IE5VTEw7Ci0JenZhbCAqZW50cnlfb2JqID0gZ2V0VGhpcygpOwotCi0JUkFSX0dFVF9QUk9QRVJU
WSh0bXAsICJmaWxlX3RpbWUiKTsKLQotCWNvbnZlcnRfdG9fc3RyaW5nX2V4KHRtcCk7Ci0JUkVUVVJO
X1NUUklOR0woWl9TVFJWQUxfUFAodG1wKSwgWl9TVFJMRU5fUFAodG1wKSwgMSk7Ci19Ci0vKiB9fX0g
Ki8KLQotLyoge3t7IHByb3RvIHN0cmluZyBSYXJFbnRyeTo6Z2V0Q3JjKCkKLSAgIFJldHVybiBDUkMg
b2YgdGhlIGVudHJ5ICovCi1QSFBfTUVUSE9EKHJhcmVudHJ5LCBnZXRDcmMpCi17Ci0JenZhbCAqKnRt
cDsKLQlyYXJfZmlsZV90ICpyYXIgPSBOVUxMOwotCXp2YWwgKmVudHJ5X29iaiA9IGdldFRoaXMoKTsK
LQotCVJBUl9HRVRfUFJPUEVSVFkodG1wLCAiY3JjIik7Ci0KLQljb252ZXJ0X3RvX3N0cmluZ19leCh0
bXApOwotCVJFVFVSTl9TVFJJTkdMKFpfU1RSVkFMX1BQKHRtcCksIFpfU1RSTEVOX1BQKHRtcCksIDEp
OwotfQotLyogfX19ICovCi0KLS8qIHt7eyBwcm90byBpbnQgUmFyRW50cnk6OmdldEF0dHIoKQotICAg
UmV0dXJuIGF0dHJpYnV0ZXMgb2YgdGhlIGVudHJ5ICovCi1QSFBfTUVUSE9EKHJhcmVudHJ5LCBnZXRB
dHRyKQotewotCXp2YWwgKip0bXA7Ci0JcmFyX2ZpbGVfdCAqcmFyID0gTlVMTDsKLQl6dmFsICplbnRy
eV9vYmogPSBnZXRUaGlzKCk7Ci0KLQlSQVJfR0VUX1BST1BFUlRZKHRtcCwgImF0dHIiKTsKLQotCWNv
bnZlcnRfdG9fbG9uZ19leCh0bXApOwotCVJFVFVSTl9MT05HKFpfTFZBTF9QUCh0bXApKTsKLX0KLS8q
IH19fSAqLwotCi0vKiB7e3sgcHJvdG8gaW50IFJhckVudHJ5OjpnZXRWZXJzaW9uKCkKLSAgIFJldHVy
biB2ZXJzaW9uIG9mIHRoZSBhcmNoaXZlciwgdXNlZCB0byBjcmVhdGUgdGhpcyBlbnRyeSAqLwotUEhQ
X01FVEhPRChyYXJlbnRyeSwgZ2V0VmVyc2lvbikKLXsKLQl6dmFsICoqdG1wOwotCXJhcl9maWxlX3Qg
KnJhciA9IE5VTEw7Ci0JenZhbCAqZW50cnlfb2JqID0gZ2V0VGhpcygpOwotCi0JUkFSX0dFVF9QUk9Q
RVJUWSh0bXAsICJ2ZXJzaW9uIik7Ci0KLQljb252ZXJ0X3RvX2xvbmdfZXgodG1wKTsKLQlSRVRVUk5f
TE9ORyhaX0xWQUxfUFAodG1wKSk7Ci19Ci0vKiB9fX0gKi8KLQotLyoge3t7IHByb3RvIGludCBSYXJF
bnRyeTo6Z2V0TWV0aG9kKCkKLSAgIFJldHVybiBwYWNraW5nIG1ldGhvZCAqLwotUEhQX01FVEhPRChy
YXJlbnRyeSwgZ2V0TWV0aG9kKQotewotCXp2YWwgKip0bXA7Ci0JcmFyX2ZpbGVfdCAqcmFyID0gTlVM
TDsKLQl6dmFsICplbnRyeV9vYmogPSBnZXRUaGlzKCk7Ci0KLQlSQVJfR0VUX1BST1BFUlRZKHRtcCwg
Im1ldGhvZCIpOwotCi0JY29udmVydF90b19sb25nX2V4KHRtcCk7Ci0JUkVUVVJOX0xPTkcoWl9MVkFM
X1BQKHRtcCkpOwotfQotLyogfX19ICovCi0KLS8qIHt7eyBwcm90byByZXNvdXJjZSBSYXJFbnRyeTo6
Z2V0U3RyZWFtKCkKLSAgIFJldHVybiBwYWNraW5nIG1ldGhvZCAqLwotUEhQX01FVEhPRChyYXJlbnRy
eSwgZ2V0U3RyZWFtKQotewotCXp2YWwgKip0bXAsICoqbmFtZTsKLQlyYXJfZmlsZV90ICpyYXIgPSBO
VUxMOwotCXp2YWwgKmVudHJ5X29iaiA9IGdldFRoaXMoKTsKLQlwaHBfc3RyZWFtICpzdHJlYW0gPSBO
VUxMOwotCi0JUkFSX0dFVF9QUk9QRVJUWShuYW1lLCAibmFtZSIpOwotCVJBUl9HRVRfUFJPUEVSVFko
dG1wLCAicmFyZmlsZSIpOwotCVpFTkRfRkVUQ0hfUkVTT1VSQ0UocmFyLCByYXJfZmlsZV90ICosIHRt
cCwgLTEsIGxlX3Jhcl9maWxlX25hbWUsIGxlX3Jhcl9maWxlKTsKLQotCXN0cmVhbSA9IHBocF9zdHJl
YW1fcmFyX29wZW4ocmFyLT5leHRyYWN0X29wZW5fZGF0YS0+QXJjTmFtZSwKLQkJWl9TVFJWQUxfUFAo
bmFtZSksICJyIiBTVFJFQU1TX0NDIFRTUk1MU19DQyk7Ci0KLQlpZiAoc3RyZWFtICE9IE5VTEwpIHsK
LQkJcGhwX3N0cmVhbV90b196dmFsKHN0cmVhbSwgcmV0dXJuX3ZhbHVlKTsKLQl9Ci0gIGVsc2UKLSAg
ICBSRVRWQUxfRkFMU0U7Ci19Ci0vKiB9fX0gKi8KLQotLyoge3t7IHByb3RvIGludCBSYXJFbnRyeTo6
aXNEaXJlY3RvcnkoKQotICAgUmV0dXJuIGlmIHRoZSBlbnRyeSBpcyBhIGRpcmVjdG9yeSAqLwotUEhQ
X01FVEhPRChyYXJlbnRyeSwgaXNEaXJlY3RvcnkpCi17Ci0JenZhbCAqKnRtcDsKLQlyYXJfZmlsZV90
ICpyYXIgPSBOVUxMOwotCXp2YWwgKmVudHJ5X29iaiA9IGdldFRoaXMoKTsKLQotCVJBUl9HRVRfUFJP
UEVSVFkodG1wLCAiZGlyZWN0b3J5Iik7Ci0KLQljb252ZXJ0X3RvX2Jvb2xlYW5fZXgodG1wKTsKLQlS
RVRVUk5fQk9PTChaX0JWQUxfUFAodG1wKSk7Ci19Ci0vKiB9fX0gKi8KLQotCiAvKiB7e3sgYXJnaW5m
byAqLwogWkVORF9CRUdJTl9BUkdfSU5GT19FWChhcmdpbmZvX3Jhcl9vcGVuLCAwLCAwLCAxKQogCVpF
TkRfQVJHX0lORk8oMCwgZmlsZW5hbWUpCkBAIC0xMDQ3LDcgKzcxMCw3IEBACiAvKiB7e3sgcmFyX2Z1
bmN0aW9uc1tdCiAgKgogICovCi1mdW5jdGlvbl9lbnRyeSByYXJfZnVuY3Rpb25zW10gPSB7CitzdGF0
aWMgZnVuY3Rpb25fZW50cnkgcmFyX2Z1bmN0aW9uc1tdID0gewogCVBIUF9GRShyYXJfb3BlbiwJCWFy
Z2luZm9fcmFyX29wZW4pCiAJUEhQX0ZFKHJhcl9saXN0LAkJYXJnaW5mb19yYXJfbGlzdCkKIAlQSFBf
RkUocmFyX2VudHJ5X2dldCwJYXJnaW5mb19yYXJfZW50cnlfZ2V0KQpAQCAtMTA1NSwzMSArNzE4LDEz
IEBACiAJUEhQX0ZFKHJhcl9jbG9zZSwJCWFyZ2luZm9fcmFyX2Nsb3NlKQogCXtOVUxMLCBOVUxMLCBO
VUxMfQogfTsKLQotc3RhdGljIHplbmRfZnVuY3Rpb25fZW50cnkgcGhwX3Jhcl9jbGFzc19mdW5jdGlv
bnNbXSA9IHsKLQlQSFBfTUUocmFyZW50cnksCQlleHRyYWN0LAkJCWFyZ2luZm9fcmFyZW50cnlfZXh0
cmFjdCwJWkVORF9BQ0NfUFVCTElDKQotCVBIUF9NRShyYXJlbnRyeSwJCWdldE5hbWUsCQkJYXJnaW5m
b19yYXJfdm9pZCwJWkVORF9BQ0NfUFVCTElDKQotCVBIUF9NRShyYXJlbnRyeSwJCWdldFVucGFja2Vk
U2l6ZSwJYXJnaW5mb19yYXJfdm9pZCwJWkVORF9BQ0NfUFVCTElDKQotCVBIUF9NRShyYXJlbnRyeSwJ
CWdldFBhY2tlZFNpemUsCQlhcmdpbmZvX3Jhcl92b2lkLAlaRU5EX0FDQ19QVUJMSUMpCi0JUEhQX01F
KHJhcmVudHJ5LAkJZ2V0SG9zdE9zLAkJCWFyZ2luZm9fcmFyX3ZvaWQsCVpFTkRfQUNDX1BVQkxJQykK
LQlQSFBfTUUocmFyZW50cnksCQlnZXRGaWxlVGltZSwJCWFyZ2luZm9fcmFyX3ZvaWQsCVpFTkRfQUND
X1BVQkxJQykKLQlQSFBfTUUocmFyZW50cnksCQlnZXRDcmMsCQkJCWFyZ2luZm9fcmFyX3ZvaWQsCVpF
TkRfQUNDX1BVQkxJQykKLQlQSFBfTUUocmFyZW50cnksCQlnZXRBdHRyLAkJCWFyZ2luZm9fcmFyX3Zv
aWQsCVpFTkRfQUNDX1BVQkxJQykKLQlQSFBfTUUocmFyZW50cnksCQlnZXRWZXJzaW9uLAkJCWFyZ2lu
Zm9fcmFyX3ZvaWQsCVpFTkRfQUNDX1BVQkxJQykKLQlQSFBfTUUocmFyZW50cnksCQlnZXRNZXRob2Qs
CQkJYXJnaW5mb19yYXJfdm9pZCwJWkVORF9BQ0NfUFVCTElDKQotCVBIUF9NRShyYXJlbnRyeSwJCWdl
dFN0cmVhbSwJCQlhcmdpbmZvX3Jhcl92b2lkLAlaRU5EX0FDQ19QVUJMSUMpCi0JUEhQX01FKHJhcmVu
dHJ5LAkJaXNEaXJlY3RvcnksCQlhcmdpbmZvX3Jhcl92b2lkLAlaRU5EX0FDQ19QVUJMSUMpCi0Je05V
TEwsIE5VTEwsIE5VTEx9Ci19OwogLyogfX19ICovCgogLyoge3t7IFBIUF9NSU5JVF9GVU5DVElPTgog
ICovCiBQSFBfTUlOSVRfRlVOQ1RJT04ocmFyKQogewotCXplbmRfY2xhc3NfZW50cnkgcmFyX2NsYXNz
X2VudHJ5OwotCUlOSVRfQ0xBU1NfRU5UUlkocmFyX2NsYXNzX2VudHJ5LCAiUmFyRW50cnkiLCBwaHBf
cmFyX2NsYXNzX2Z1bmN0aW9ucyk7Ci0JcmFyX2NsYXNzX2VudHJ5X3B0ciA9IHplbmRfcmVnaXN0ZXJf
aW50ZXJuYWxfY2xhc3MoJnJhcl9jbGFzc19lbnRyeSBUU1JNTFNfQ0MpOworCW1pbml0X3JhcmVudHJ5
KFRTUk1MU19DKTsKCiAJbGVfcmFyX2ZpbGUgPSB6ZW5kX3JlZ2lzdGVyX2xpc3RfZGVzdHJ1Y3RvcnNf
ZXgoX3Jhcl9maWxlX2xpc3RfZHRvciwgTlVMTCwgbGVfcmFyX2ZpbGVfbmFtZSwgbW9kdWxlX251bWJl
cik7CgpAQCAtMTEwNCwxNCArNzQ5LDE0IEBACiAJcGhwX2luZm9fcHJpbnRfdGFibGVfcm93KDIsICJS
YXIgRVhUIHZlcnNpb24iLCBQSFBfUkFSX1ZFUlNJT04pOwogCXBocF9pbmZvX3ByaW50X3RhYmxlX3Jv
dygyLCAiUmV2aXNpb24iLCAiJFJldmlzaW9uJCIpOwoKLQlpZiAoUkFSVkVSX0JFVEEgIT0gMCkgewot
CQlzcHJpbnRmKHZlcnNpb24sIiVkLiUwMmQgYmV0YSVkIHBhdGNoJWQgJWQtJWQtJWQiLCBSQVJWRVJf
TUFKT1IsCi0JCQlSQVJWRVJfTUlOT1IsIFJBUlZFUl9CRVRBLCBSQVJWRVJfUEFUQ0gsIFJBUlZFUl9Z
RUFSLCBSQVJWRVJfTU9OVEgsCi0JCQlSQVJWRVJfREFZKTsKLQl9IGVsc2UgewotCQlzcHJpbnRmKHZl
cnNpb24sIiVkLiUwMmQgcGF0Y2glZCAlZC0lZC0lZCIsIFJBUlZFUl9NQUpPUiwgUkFSVkVSX01JTk9S
LAotCQkJUkFSVkVSX1BBVENILCBSQVJWRVJfWUVBUiwgUkFSVkVSX01PTlRILCBSQVJWRVJfREFZKTsK
LQl9CisjaWYJUkFSVkVSX0JFVEEgIT0gMAorCXNwcmludGYodmVyc2lvbiwiJWQuJTAyZCBiZXRhJWQg
cGF0Y2glZCAlZC0lZC0lZCIsIFJBUlZFUl9NQUpPUiwKKwkJUkFSVkVSX01JTk9SLCBSQVJWRVJfQkVU
QSwgUkFSVkVSX1BBVENILCBSQVJWRVJfWUVBUiwgUkFSVkVSX01PTlRILAorCQlSQVJWRVJfREFZKTsK
KyNlbHNlCisJc3ByaW50Zih2ZXJzaW9uLCIlZC4lMDJkIHBhdGNoJWQgJWQtJWQtJWQiLCBSQVJWRVJf
TUFKT1IsIFJBUlZFUl9NSU5PUiwKKwkJUkFSVkVSX1BBVENILCBSQVJWRVJfWUVBUiwgUkFSVkVSX01P
TlRILCBSQVJWRVJfREFZKTsKKyNlbmRpZgoKIAlwaHBfaW5mb19wcmludF90YWJsZV9yb3coMiwgIlVu
UkFSIHZlcnNpb24iLCB2ZXJzaW9uKTsKIAlwaHBfaW5mb19wcmludF90YWJsZV9lbmQoKTsKCk1vZGlm
aWVkOiBwZWNsL3Jhci90cnVuay9yYXJfc3RyZWFtLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9yYXIvdHJ1bmsv
cmFyX3N0cmVhbS5jCTIwMDktMTEtMjkgMDM6MzI6NTQgVVRDIChyZXYgMjkxNDEwKQorKysgcGVjbC9y
YXIvdHJ1bmsvcmFyX3N0cmVhbS5jCTIwMDktMTEtMjkgMDM6NDE6MTEgVVRDIChyZXYgMjkxNDExKQpA
QCAtMjMyLDcgKzIzMiw3IEBACiAJCQlzZWxmLT5oZWFkZXJfZGF0YS5VbnBTaXplKSk7CiAJCWludCBw
cm9jZXNzX3Jlc3VsdCA9IFJBUlByb2Nlc3NGaWxlQ2h1bmtJbml0KHNlbGYtPnJhcl9oYW5kbGUpOwoK
LQkJaWYgKF9yYXJfaGFuZGxlX2Vycm9yKHJlc3VsdCBUU1JNTFNfQ0MpID09IEZBSUxVUkUpIHsKKwkJ
aWYgKF9yYXJfaGFuZGxlX2Vycm9yKHByb2Nlc3NfcmVzdWx0IFRTUk1MU19DQykgPT0gRkFJTFVSRSkg
ewogCQkJZ290byBjbGVhbnVwOwogCQl9CgoKQWRkZWQ6IHBlY2wvcmFyL3RydW5rL3JhcmVudHJ5LmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcGVjbC9yYXIvdHJ1bmsvcmFyZW50cnkuYwkgICAgICAgICAgICAgICAgICAgICAg
ICAocmV2IDApCisrKyBwZWNsL3Jhci90cnVuay9yYXJlbnRyeS5jCTIwMDktMTEtMjkgMDM6NDE6MTEg
VVRDIChyZXYgMjkxNDExKQpAQCAtMCwwICsxLDU2MyBAQAorLyogJElkJCAqLworCisjaW5jbHVkZSAi
cGhwLmgiCisjaW5jbHVkZSAicGhwX3Jhci5oIgorCisvKiB7e3sgR2xvYmFscyB3aXRoIGV4dGVybmFs
IGxpbmFrYWdlICovCit6ZW5kX2NsYXNzX2VudHJ5ICpyYXJfY2xhc3NfZW50cnlfcHRyOworLyogfX19
ICovCisKKy8qIHt7eyBHbG9iYWxzIHdpdGggaW50ZXJuYWwgbGluYWthZ2UgKi8KK3N0YXRpYyB6ZW5k
X29iamVjdF9oYW5kbGVycyByYXJfb2JqZWN0X2hhbmRsZXJzOworLyogfX19ICovCisKKy8qIHt7eyBG
dW5jdGlvbiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgd2l0aCBpbnRlcm5hbCBsaW5rYWdlICovCitz
dGF0aWMgenZhbCAqKl9yYXJfZW50cnlfZ2V0X3Byb3BlcnR5KHp2YWwgKiwgY2hhciAqLCBpbnQgVFNS
TUxTX0RDKTsKK3N0YXRpYyB2b2lkIF9yYXJfZG9zX2RhdGVfdG9fdGV4dChpbnQgZG9zX3RpbWUsIGNo
YXIgKmRhdGVfc3RyaW5nKTsKK3N0YXRpYyB6ZW5kX29iamVjdF92YWx1ZSByYXJlbnRyeV9jZV9jcmVh
dGVfb2JqZWN0KHplbmRfY2xhc3NfZW50cnkgKmNsYXNzX3R5cGUgVFNSTUxTX0RDKTsKKy8qIH19fSAq
LworCisvKiB7e3sgRnVuY3Rpb25zIHdpdGggZXh0ZXJuYWwgbGlua2FnZSAqLworLyogc2hvdWxkIGJl
IHBhc3NlZCB0aGUgbGFzdCBlbnRyeSB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4gZmlsZQorICog
b25seSB0aGF0IG9uZSBoYXMgdGhlIGNvcnJlY3QgQ1JDLiBTdGlsbCwgaXQgbWF5IGhhdmUgYSB3cm9u
ZyBwYWNrZWRTaXplICovCit2b2lkIF9yYXJfZW50cnlfdG9fenZhbChzdHJ1Y3QgUkFSSGVhZGVyRGF0
YUV4ICplbnRyeSwgenZhbCAqb2JqZWN0LAorCQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGFja2VkX3Np
emUgVFNSTUxTX0RDKSAvKiB7e3sgKi8KK3sKKwljaGFyIHRtcF9zIFtNQVhfTEVOR1RIX09GX0xPTkcg
KyAxXTsKKwljaGFyIHRpbWVbNTBdOworCWNoYXIgKmZpbGVuYW1lOworCWxvbmcgdW5wX3NpemU7CisK
KwlpZiAoc2l6ZW9mKGxvbmcpID49IDgpCisJCXVucF9zaXplID0gKChsb25nKSBlbnRyeS0+VW5wU2l6
ZSkgKyAoKChsb25nKSBlbnRyeS0+VW5wU2l6ZUhpZ2gpIDw8IDMyKTsKKwllbHNlIHsKKwkJLy9mb3Ig
MzItYml0IGxvbmcsIGF0IGxlYXN0IGRvbid0IGdpdmUgbmVnYXRpdmUgdmFsdWVzCisJCWlmICgodW5z
aWduZWQgbG9uZykgZW50cnktPlVucFNpemUgPiAodW5zaWduZWQgbG9uZykgTE9OR19NQVgKKwkJCQl8
fCBlbnRyeS0+VW5wU2l6ZUhpZ2ggIT0gMCkKKwkJCXVucF9zaXplID0gTE9OR19NQVg7CisJCWVsc2UK
KwkJCXVucF9zaXplID0gKGxvbmcpIGVudHJ5LT5VbnBTaXplOworCX0KKworCS8qIDIgaW5zdGVhZCBv
ZiBzaXplb2Yod2NoYXJfdCkgd291bGQgc3VmZmljZSwgSSB0aGluay4gSSBkb3VidAorCSAqIF9yYXJf
d2lkZV90b191dGYgaGFuZGxlcyBjaGFyYWN0ZXJzIG5vdCBpbiBVQ1MtMi4gQnV0IGJldHRlciBiZSBz
YWZlICovCisJZmlsZW5hbWUgPSAoY2hhciopIGVtYWxsb2Moc2l6ZW9mKGVudHJ5LT5GaWxlTmFtZVcp
ICogc2l6ZW9mKHdjaGFyX3QpKTsKKworCWlmIChwYWNrZWRfc2l6ZSA+ICh1bnNpZ25lZCBsb25nKSBM
T05HX01BWCkKKwkJcGFja2VkX3NpemUgPSBMT05HX01BWDsKKwlfcmFyX3dpZGVfdG9fdXRmKGVudHJ5
LT5GaWxlTmFtZVcsIGZpbGVuYW1lLAorCQlzaXplb2YoZW50cnktPkZpbGVOYW1lVykgKiBzaXplb2Yo
d2NoYXJfdCkpOworCS8qIHdlJ3JlIG5vdCBpbiBjbGFzcyBzY29wZSwgc28gd2UgY2Fubm90IGNoYW5n
ZSB0aGUgY2xhc3MgcHJpdmF0ZQorCSAqIHByb3BlcnRpZXMgZnJvbSBoZXJlIHdpdGggYWRkX3Byb3Bl
cnR5X3gKKwkgKiB6ZW5kX3VwZGF0ZV9wcm9wZXJ0eV94IHVwZGF0ZXMgdGhlIHNjb3BlIGFjY29yZGlu
Z2x5ICovCisJemVuZF91cGRhdGVfcHJvcGVydHlfc3RyaW5nKHJhcl9jbGFzc19lbnRyeV9wdHIsIG9i
amVjdCwgIm5hbWUiLAorCQlzaXplb2YoIm5hbWUiKSAtIDEsIGZpbGVuYW1lIFRTUk1MU19DQyk7CisJ
emVuZF91cGRhdGVfcHJvcGVydHlfbG9uZyhyYXJfY2xhc3NfZW50cnlfcHRyLCBvYmplY3QsICJ1bnBh
Y2tlZF9zaXplIiwKKwkJc2l6ZW9mKCJ1bnBhY2tlZF9zaXplIikgLSAxLCB1bnBfc2l6ZSBUU1JNTFNf
Q0MpOworCXplbmRfdXBkYXRlX3Byb3BlcnR5X2xvbmcocmFyX2NsYXNzX2VudHJ5X3B0ciwgb2JqZWN0
LCAicGFja2VkX3NpemUiLAorCQlzaXplb2YoInBhY2tlZF9zaXplIikgLSAxLCBwYWNrZWRfc2l6ZSBU
U1JNTFNfQ0MpOworCXplbmRfdXBkYXRlX3Byb3BlcnR5X2xvbmcocmFyX2NsYXNzX2VudHJ5X3B0ciwg
b2JqZWN0LCAiaG9zdF9vcyIsCisJCXNpemVvZigiaG9zdF9vcyIpIC0gMSwgZW50cnktPkhvc3RPUyBU
U1JNTFNfQ0MpOworCisJX3Jhcl9kb3NfZGF0ZV90b190ZXh0KGVudHJ5LT5GaWxlVGltZSwgdGltZSk7
CisJemVuZF91cGRhdGVfcHJvcGVydHlfc3RyaW5nKHJhcl9jbGFzc19lbnRyeV9wdHIsIG9iamVjdCwg
ImZpbGVfdGltZSIsCisJCXNpemVvZigiZmlsZV90aW1lIikgLSAxLCB0aW1lIFRTUk1MU19DQyk7CisK
KwlzcHJpbnRmKHRtcF9zLCAiJWx4IiwgZW50cnktPkZpbGVDUkMpOworCXplbmRfdXBkYXRlX3Byb3Bl
cnR5X3N0cmluZyhyYXJfY2xhc3NfZW50cnlfcHRyLCBvYmplY3QsICJjcmMiLAorCQlzaXplb2YoImNy
YyIpIC0gMSwgdG1wX3MgVFNSTUxTX0NDKTsKKworCXplbmRfdXBkYXRlX3Byb3BlcnR5X2xvbmcocmFy
X2NsYXNzX2VudHJ5X3B0ciwgb2JqZWN0LCAiYXR0ciIsCisJCXNpemVvZigiYXR0ciIpIC0gMSwgZW50
cnktPkZpbGVBdHRyIFRTUk1MU19DQyk7CisJemVuZF91cGRhdGVfcHJvcGVydHlfbG9uZyhyYXJfY2xh
c3NfZW50cnlfcHRyLCBvYmplY3QsICJ2ZXJzaW9uIiwKKwkJc2l6ZW9mKCJ2ZXJzaW9uIikgLSAxLCBl
bnRyeS0+VW5wVmVyIFRTUk1MU19DQyk7CisJemVuZF91cGRhdGVfcHJvcGVydHlfbG9uZyhyYXJfY2xh
c3NfZW50cnlfcHRyLCBvYmplY3QsICJtZXRob2QiLAorCQlzaXplb2YoIm1ldGhvZCIpIC0gMSwgZW50
cnktPk1ldGhvZCBUU1JNTFNfQ0MpOworCXplbmRfdXBkYXRlX3Byb3BlcnR5X2xvbmcocmFyX2NsYXNz
X2VudHJ5X3B0ciwgb2JqZWN0LCAiZmxhZ3MiLAorCQlzaXplb2YoImZsYWdzIikgLSAxLCBlbnRyeS0+
RmxhZ3MgVFNSTUxTX0NDKTsKKworCWVmcmVlKGZpbGVuYW1lKTsKK30KKy8qIH19fSAqLworLyogfX19
ICovCisKKy8qIHt7eyBIZWxwZXIgZnVuY3Rpb25zIGFuZCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMg
Ki8KKyNkZWZpbmUgUkFSX0dFVF9QUk9QRVJUWSh2YXIsIHByb3BfbmFtZSkgXAorCWlmICghZW50cnlf
b2JqKSB7IFwKKwkJcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9XQVJOSU5HLCAidGhp
cyBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBzdGF0aWNhbGx5Iik7IFwKKwkJUkVUVVJOX0ZBTFNFOyBc
CisJfSBcCisJaWYgKCh2YXIgPSBfcmFyX2VudHJ5X2dldF9wcm9wZXJ0eShlbnRyeV9vYmosIHByb3Bf
bmFtZSwgc2l6ZW9mKHByb3BfbmFtZSkgVFNSTUxTX0NDKSkgPT0gTlVMTCkgeyBcCisJCVJFVFVSTl9G
QUxTRTsgXAorCX0KKworI2RlZmluZSBSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoY29uc3RfbmFtZSwg
dmFsdWUpIFwKKwl6ZW5kX2RlY2xhcmVfY2xhc3NfY29uc3RhbnRfbG9uZyhyYXJfY2xhc3NfZW50cnlf
cHRyLCBjb25zdF9uYW1lLCBcCisJCXNpemVvZihjb25zdF9uYW1lKSAtIDEsIChsb25nKSB2YWx1ZSBU
U1JNTFNfQ0MpCisKKyNkZWZpbmUgUkVHX1JBUl9QUk9QRVJUWShuYW1lLCBjb21tZW50KSBcCisJX3Jh
cl9kZWNsX3ByaXZfcHJvcF9udWxsKHJhcl9jbGFzc19lbnRyeV9wdHIsIG5hbWUsIHNpemVvZihuYW1l
KSAtMSwgXAorCQljb21tZW50LCBzaXplb2YoY29tbWVudCkgLSAxIFRTUk1MU19DQykKKworc3RhdGlj
IGludCBfcmFyX2RlY2xfcHJpdl9wcm9wX251bGwoemVuZF9jbGFzc19lbnRyeSAqY2UsIGNvbnN0IGNo
YXIgKm5hbWUsCisJCQkJCQkJCQkgaW50IG5hbWVfbGVuZ3RoLCBjaGFyICpkb2NfY29tbWVudCwKKwkJ
CQkJCQkJCSBpbnQgZG9jX2NvbW1lbnRfbGVuIFRTUk1MU19EQykgLyoge3t7ICovCit7CisJenZhbCAq
cHJvcGVydHk7CisJQUxMT0NfUEVSTUFORU5UX1pWQUwocHJvcGVydHkpOworCUlOSVRfWlZBTCgqcHJv
cGVydHkpOworCXJldHVybiB6ZW5kX2RlY2xhcmVfcHJvcGVydHlfZXgoY2UsIG5hbWUsIG5hbWVfbGVu
Z3RoLCBwcm9wZXJ0eSwKKwkJWkVORF9BQ0NfUFJJVkFURSwgZG9jX2NvbW1lbnQsIGRvY19jb21tZW50
X2xlbiBUU1JNTFNfQ0MpOworfQorLyogfX19ICovCisKK3N0YXRpYyB6dmFsICoqX3Jhcl9lbnRyeV9n
ZXRfcHJvcGVydHkoenZhbCAqZW50cnlfb2JqLCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiBUU1JNTFNf
REMpIC8qIHt7eyAqLworeworCXp2YWwgKip0bXA7CisJY2hhciAqbWFuZ2xlZF9uYW1lOworCWludCBt
YW5nbGVkX25hbWVfbGVuOworCisJLy9wZXJoYXBzIGNsZWFuZXIgYWx0ZXJuYXRpdmU6IHVzZSBaX09C
Sl9IQU5ETEVSX1AoZW50cnlfb2JqLCByZWFkX3Byb3BlcnR5KQorCS8vYW5vdGhlciB3YXkgdG8gYXZv
aWQgbWVtIGFsbG9jYXRpb24gd291bGQgYmUgdG8gZ2V0IHRoZSBtYW5nbGVkIG5hbWUgZnJvbQorCS8v
Y2UtPnByb3BlcnRpZXNfaW5mby5uYW1lIChwcm9wZXJ0aWVzX2luZm8gaGFzaCB0YWJsZSBpbmRleGVz
IGJ5IHVubWFuZ2xlZCBuYW1lKQorCisJemVuZF9tYW5nbGVfcHJvcGVydHlfbmFtZSgmbWFuZ2xlZF9u
YW1lLCAmbWFuZ2xlZF9uYW1lX2xlbiwgIlJhckVudHJ5IiwKKwkJc2l6ZW9mKCJSYXJFbnRyeSIpIC0g
MSwgbmFtZSwgbmFtZWxlbiwgMCk7CisJaWYgKHplbmRfaGFzaF9maW5kKFpfT0JKUFJPUF9QKGVudHJ5
X29iaiksIG1hbmdsZWRfbmFtZSwgbWFuZ2xlZF9uYW1lX2xlbiwKKwkJCSh2b2lkKiopICZ0bXApID09
IEZBSUxVUkUpIHsKKwkJcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9XQVJOSU5HLAor
CQkJIkJ1ZzogdW5hYmxlIHRvIGZpbmQgcHJvcGVydHkgJyVzJyIsIG5hbWUpOworCQllZnJlZShtYW5n
bGVkX25hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZWZyZWUobWFuZ2xlZF9uYW1lKTsKKwlyZXR1
cm4gdG1wOworfQorLyogfX19ICovCisKK3N0YXRpYyB2b2lkIF9yYXJfZG9zX2RhdGVfdG9fdGV4dChp
bnQgZG9zX3RpbWUsIGNoYXIgKmRhdGVfc3RyaW5nKSAvKiB7e3sgKi8KK3sKKwlpbnQgc2Vjb25kLCBt
aW51dGUsIGhvdXIsIGRheSwgbW9udGgsIHllYXI7CisJLyogZm9sbG93aW5nIGxpbmVzIHdlcmUgdGFr
ZW4gZnJvbSB0aW1lZm4uY3BwICovCisJc2Vjb25kID0gKGRvc190aW1lICYgMHgxZikqMjsKKwltaW51
dGUgPSAoZG9zX3RpbWU+PjUpICYgMHgzZjsKKwlob3VyICAgPSAoZG9zX3RpbWU+PjExKSAmIDB4MWY7
CisJZGF5ICAgID0gKGRvc190aW1lPj4xNikgJiAweDFmOworCW1vbnRoICA9IChkb3NfdGltZT4+MjEp
ICYgMHgwZjsKKwl5ZWFyICAgPSAoZG9zX3RpbWU+PjI1KSsxOTgwOworCXNwcmludGYoZGF0ZV9zdHJp
bmcsICIldS0lMDJ1LSUwMnUgJTAydTolMDJ1OiUwMnUiLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBt
aW51dGUsIHNlY29uZCk7Cit9CisvKiB9fX0gKi8KKworc3RhdGljIHplbmRfb2JqZWN0X3ZhbHVlIHJh
cmVudHJ5X2NlX2NyZWF0ZV9vYmplY3QoemVuZF9jbGFzc19lbnRyeSAqY2xhc3NfdHlwZSBUU1JNTFNf
REMpIC8qIHt7eyAqLworeworCXplbmRfb2JqZWN0X3ZhbHVlCXpvdjsKKwl6ZW5kX29iamVjdAkJCSp6
b2JqOworCXp2YWwJCQkJKnRtcDsKKworCXpvYmogPSBlbWFsbG9jKHNpemVvZiAqem9iaik7CisJemVu
ZF9vYmplY3Rfc3RkX2luaXQoem9iaiwgY2xhc3NfdHlwZSBUU1JNTFNfQ0MpOworCisJemVuZF9oYXNo
X2NvcHkoem9iai0+cHJvcGVydGllcywgJihjbGFzc190eXBlLT5kZWZhdWx0X3Byb3BlcnRpZXMpLAor
CQkoY29weV9jdG9yX2Z1bmNfdCkgenZhbF9hZGRfcmVmLCAmdG1wLCBzaXplb2YoenZhbCopKTsKKwl6
b3YuaGFuZGxlID0gemVuZF9vYmplY3RzX3N0b3JlX3B1dCh6b2JqLCBOVUxMLAorCQkoemVuZF9vYmpl
Y3RzX2ZyZWVfb2JqZWN0X3N0b3JhZ2VfdCkgemVuZF9vYmplY3Rfc3RkX2R0b3IsCisJCU5VTEwgVFNS
TUxTX0NDKTsKKwl6b3YuaGFuZGxlcnMgPSAmcmFyX29iamVjdF9oYW5kbGVyczsKKwlyZXR1cm4gem92
OworfQorLyogfX19ICovCisvKiB9fX0gKi8KKworLyoge3t7IE1ldGhvZHMgKi8KKy8qIHt7eyBwcm90
byBib29sIFJhckVudHJ5OjpleHRyYWN0KHN0cmluZyBkaXIgWywgc3RyaW5nIGZpbGVwYXRoIF0pCisg
ICBFeHRyYWN0IGZpbGUgZnJvbSB0aGUgYXJjaGl2ZSAqLworUEhQX01FVEhPRChyYXJlbnRyeSwgZXh0
cmFjdCkKK3sgLy9sb3RzIG9mIHZhcmlhYmxlcywgYnV0IG5vIG5lZWQgdG8gYmUgaW50aW1pZGF0ZWQK
KwljaGFyCQkJCQkqZGlyLAorCQkJCQkJCSpmaWxlcGF0aCA9IE5VTEw7CisJaW50CQkJCQkJZGlyX2xl
biwKKwkJCQkJCQlmaWxlcGF0aF9sZW4gPSAwOworCWNoYXIJCQkJCSpjb25zaWRlcmVkX3BhdGg7CisJ
Y2hhcgkJCQkJY29uc2lkZXJlZF9wYXRoX3Jlc1tNQVhQQVRITEVOXTsKKwlpbnQJCQkJCQl3aXRoX3Nl
Y29uZF9hcmc7CisKKwl6dmFsCQkJCQkqKnRtcCwKKwkJCQkJCQkqKnRtcF9uYW1lOworCXJhcl9maWxl
X3QJCQkJKnJhciA9IE5VTEw7CisJenZhbAkJCQkJKmVudHJ5X29iaiA9IGdldFRoaXMoKTsKKwlzdHJ1
Y3QgUkFSSGVhZGVyRGF0YUV4CWVudHJ5OworCUhBTkRMRQkJCQkJZXh0cmFjdF9oYW5kbGUgPSBOVUxM
OworCWludAkJCQkJCXJlc3VsdDsKKwlpbnQJCQkJCQlmb3VuZDsKKworCWlmICh6ZW5kX3BhcnNlX3Bh
cmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgInN8cyIsICZkaXIsICZkaXJfbGVuLCAm
ZmlsZXBhdGgsICZmaWxlcGF0aF9sZW4pID09IEZBSUxVUkUgKSB7CisJCXJldHVybjsKKwl9CisKKwlS
QVJfR0VUX1BST1BFUlRZKHRtcCwgInJhcmZpbGUiKTsKKwlaRU5EX0ZFVENIX1JFU09VUkNFKHJhciwg
cmFyX2ZpbGVfdCAqLCB0bXAsIC0xLCBsZV9yYXJfZmlsZV9uYW1lLCBsZV9yYXJfZmlsZSk7CisKKwkv
KiBEZWNpZGUgd2hlcmUgdG8gZXh0cmFjdCAqLworCXdpdGhfc2Vjb25kX2FyZyA9IChmaWxlcGF0aF9s
ZW4gIT0gMCk7CisKKwkvL3RoZSBhcmd1bWVudHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gSWYgdGhl
IHNlY29uZCBpcyBzcGVjaWZpZWQsIG11c3QgaWdub3JlIHRoZSBmaXJzdAorCWlmICghd2l0aF9zZWNv
bmRfYXJnKSB7CisJCWlmIChkaXJfbGVuID09IDApIC8vYm90aCBwYXJhbXMgZW1wdHkKKwkJCWRpciA9
ICIuIjsKKwkJY29uc2lkZXJlZF9wYXRoID0gZGlyOworCX0KKwllbHNlIHsKKwkJY29uc2lkZXJlZF9w
YXRoID0gZmlsZXBhdGg7CisJfQorCisJaWYgKE9QRU5CQVNFRElSX0NIRUNLUEFUSChjb25zaWRlcmVk
X3BhdGgpKSB7CisJCVJFVFVSTl9GQUxTRTsKKwl9CisJaWYgKCFleHBhbmRfZmlsZXBhdGgoY29uc2lk
ZXJlZF9wYXRoLCBjb25zaWRlcmVkX3BhdGhfcmVzIFRTUk1MU19DQykpIHsKKwkJUkVUVVJOX0ZBTFNF
OworCX0KKworCS8qIEZpbmQgZmlsZSBpbnNpZGUgYXJjaGl2ZSAqLworCVJBUl9HRVRfUFJPUEVSVFko
dG1wX25hbWUsICJuYW1lIik7CisKKwlyZXN1bHQgPSBfcmFyX2ZpbmRfZmlsZShyYXItPmV4dHJhY3Rf
b3Blbl9kYXRhLCBaX1NUUlZBTF9QUCh0bXBfbmFtZSksCisJCSZleHRyYWN0X2hhbmRsZSwgJmZvdW5k
LCAmZW50cnkpOworCisJaWYgKF9yYXJfaGFuZGxlX2Vycm9yKHJlc3VsdCBUU1JNTFNfQ0MpID09IEZB
SUxVUkUpIHsKKwkJUkVUVkFMX0ZBTFNFOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKCFmb3Vu
ZCkgeworCQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsCisJCQkiQ2Fu
J3QgZmluZCBmaWxlICVzIGluIGFyY2hpdmUgJXMiLCBaX1NUUlZBTF9QUCh0bXBfbmFtZSksCisJCQly
YXItPmxpc3Rfb3Blbl9kYXRhLT5BcmNOYW1lKTsKKwkJUkVUVkFMX0ZBTFNFOworCQlnb3RvIGNsZWFu
dXA7CisJfQorCisJLyogRG8gZXh0cmFjdGlvbiAqLworCWlmICghd2l0aF9zZWNvbmRfYXJnKQorCQly
ZXN1bHQgPSBSQVJQcm9jZXNzRmlsZShleHRyYWN0X2hhbmRsZSwgUkFSX0VYVFJBQ1QsCisJCQljb25z
aWRlcmVkX3BhdGhfcmVzLCBOVUxMKTsKKwllbHNlCisJCXJlc3VsdCA9IFJBUlByb2Nlc3NGaWxlKGV4
dHJhY3RfaGFuZGxlLCBSQVJfRVhUUkFDVCwKKwkJCU5VTEwsIGNvbnNpZGVyZWRfcGF0aF9yZXMpOwor
CisJaWYgKF9yYXJfaGFuZGxlX2Vycm9yKHJlc3VsdCBUU1JNTFNfQ0MpID09IEZBSUxVUkUpIHsKKwkJ
UkVUVkFMX0ZBTFNFOworCX0KKwllbHNlIHsKKwkJUkVUVkFMX1RSVUU7CisJfQorCitjbGVhbnVwOgor
CWlmIChleHRyYWN0X2hhbmRsZSAhPSBOVUxMKQorCQlSQVJDbG9zZUFyY2hpdmUoZXh0cmFjdF9oYW5k
bGUpOworfQorLyogfX19ICovCisKKy8qIHt7eyBwcm90byBzdHJpbmcgUmFyRW50cnk6OmdldE5hbWUo
KQorICAgUmV0dXJuIGVudHJ5IG5hbWUgKi8KK1BIUF9NRVRIT0QocmFyZW50cnksIGdldE5hbWUpCit7
CisJenZhbCAqKnRtcDsKKwl6dmFsICplbnRyeV9vYmogPSBnZXRUaGlzKCk7CisKKwlSQVJfR0VUX1BS
T1BFUlRZKHRtcCwgIm5hbWUiKTsKKworCWNvbnZlcnRfdG9fc3RyaW5nX2V4KHRtcCk7CisJUkVUVVJO
X1NUUklOR0woWl9TVFJWQUxfUFAodG1wKSwgWl9TVFJMRU5fUFAodG1wKSwgMSk7Cit9CisvKiB9fX0g
Ki8KKworLyoge3t7IHByb3RvIGludCBSYXJFbnRyeTo6Z2V0VW5wYWNrZWRTaXplKCkKKyAgIFJldHVy
biB1bnBhY2tlZCBzaXplIG9mIHRoZSBlbnRyeSAqLworUEhQX01FVEhPRChyYXJlbnRyeSwgZ2V0VW5w
YWNrZWRTaXplKQoreworCXp2YWwgKip0bXA7CisJenZhbCAqZW50cnlfb2JqID0gZ2V0VGhpcygpOwor
CisJUkFSX0dFVF9QUk9QRVJUWSh0bXAsICJ1bnBhY2tlZF9zaXplIik7CisKKwljb252ZXJ0X3RvX2xv
bmdfZXgodG1wKTsKKwlSRVRVUk5fTE9ORyhaX0xWQUxfUFAodG1wKSk7Cit9CisvKiB9fX0gKi8KKwor
Lyoge3t7IHByb3RvIGludCBSYXJFbnRyeTo6Z2V0UGFja2VkU2l6ZSgpCisgICBSZXR1cm4gcGFja2Vk
IHNpemUgb2YgdGhlIGVudHJ5ICovCitQSFBfTUVUSE9EKHJhcmVudHJ5LCBnZXRQYWNrZWRTaXplKQor
eworCXp2YWwgKip0bXA7CisJenZhbCAqZW50cnlfb2JqID0gZ2V0VGhpcygpOworCisJUkFSX0dFVF9Q
Uk9QRVJUWSh0bXAsICJwYWNrZWRfc2l6ZSIpOworCisJY29udmVydF90b19sb25nX2V4KHRtcCk7CisJ
UkVUVVJOX0xPTkcoWl9MVkFMX1BQKHRtcCkpOworfQorLyogfX19ICovCisKKy8qIHt7eyBwcm90byBp
bnQgUmFyRW50cnk6OmdldEhvc3RPcygpCisgICBSZXR1cm4gaG9zdCBPUyBvZiB0aGUgZW50cnkgKi8K
K1BIUF9NRVRIT0QocmFyZW50cnksIGdldEhvc3RPcykKK3sKKwl6dmFsICoqdG1wOworCXp2YWwgKmVu
dHJ5X29iaiA9IGdldFRoaXMoKTsKKworCVJBUl9HRVRfUFJPUEVSVFkodG1wLCAiaG9zdF9vcyIpOwor
CisJY29udmVydF90b19sb25nX2V4KHRtcCk7CisJUkVUVVJOX0xPTkcoWl9MVkFMX1BQKHRtcCkpOwor
fQorLyogfX19ICovCisKKy8qIHt7eyBwcm90byBzdHJpbmcgUmFyRW50cnk6OmdldEZpbGVUaW1lKCkK
KyAgIFJldHVybiBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZW50cnkgKi8KK1BIUF9NRVRIT0QocmFy
ZW50cnksIGdldEZpbGVUaW1lKQoreworCXp2YWwgKip0bXA7CisJenZhbCAqZW50cnlfb2JqID0gZ2V0
VGhpcygpOworCisJUkFSX0dFVF9QUk9QRVJUWSh0bXAsICJmaWxlX3RpbWUiKTsKKworCWNvbnZlcnRf
dG9fc3RyaW5nX2V4KHRtcCk7CisJUkVUVVJOX1NUUklOR0woWl9TVFJWQUxfUFAodG1wKSwgWl9TVFJM
RU5fUFAodG1wKSwgMSk7Cit9CisvKiB9fX0gKi8KKworLyoge3t7IHByb3RvIHN0cmluZyBSYXJFbnRy
eTo6Z2V0Q3JjKCkKKyAgIFJldHVybiBDUkMgb2YgdGhlIGVudHJ5ICovCitQSFBfTUVUSE9EKHJhcmVu
dHJ5LCBnZXRDcmMpCit7CisJenZhbCAqKnRtcDsKKwl6dmFsICplbnRyeV9vYmogPSBnZXRUaGlzKCk7
CisKKwlSQVJfR0VUX1BST1BFUlRZKHRtcCwgImNyYyIpOworCisJY29udmVydF90b19zdHJpbmdfZXgo
dG1wKTsKKwlSRVRVUk5fU1RSSU5HTChaX1NUUlZBTF9QUCh0bXApLCBaX1NUUkxFTl9QUCh0bXApLCAx
KTsKK30KKy8qIH19fSAqLworCisvKiB7e3sgcHJvdG8gaW50IFJhckVudHJ5OjpnZXRBdHRyKCkKKyAg
IFJldHVybiBhdHRyaWJ1dGVzIG9mIHRoZSBlbnRyeSAqLworUEhQX01FVEhPRChyYXJlbnRyeSwgZ2V0
QXR0cikKK3sKKwl6dmFsICoqdG1wOworCXp2YWwgKmVudHJ5X29iaiA9IGdldFRoaXMoKTsKKworCVJB
Ul9HRVRfUFJPUEVSVFkodG1wLCAiYXR0ciIpOworCisJY29udmVydF90b19sb25nX2V4KHRtcCk7CisJ
UkVUVVJOX0xPTkcoWl9MVkFMX1BQKHRtcCkpOworfQorLyogfX19ICovCisKKy8qIHt7eyBwcm90byBp
bnQgUmFyRW50cnk6OmdldFZlcnNpb24oKQorICAgUmV0dXJuIHZlcnNpb24gb2YgdGhlIGFyY2hpdmVy
LCB1c2VkIHRvIGNyZWF0ZSB0aGlzIGVudHJ5ICovCitQSFBfTUVUSE9EKHJhcmVudHJ5LCBnZXRWZXJz
aW9uKQoreworCXp2YWwgKip0bXA7CisJenZhbCAqZW50cnlfb2JqID0gZ2V0VGhpcygpOworCisJUkFS
X0dFVF9QUk9QRVJUWSh0bXAsICJ2ZXJzaW9uIik7CisKKwljb252ZXJ0X3RvX2xvbmdfZXgodG1wKTsK
KwlSRVRVUk5fTE9ORyhaX0xWQUxfUFAodG1wKSk7Cit9CisvKiB9fX0gKi8KKworLyoge3t7IHByb3Rv
IGludCBSYXJFbnRyeTo6Z2V0TWV0aG9kKCkKKyAgIFJldHVybiBwYWNraW5nIG1ldGhvZCAqLworUEhQ
X01FVEhPRChyYXJlbnRyeSwgZ2V0TWV0aG9kKQoreworCXp2YWwgKip0bXA7CisJenZhbCAqZW50cnlf
b2JqID0gZ2V0VGhpcygpOworCisJUkFSX0dFVF9QUk9QRVJUWSh0bXAsICJtZXRob2QiKTsKKworCWNv
bnZlcnRfdG9fbG9uZ19leCh0bXApOworCVJFVFVSTl9MT05HKFpfTFZBTF9QUCh0bXApKTsKK30KKy8q
IH19fSAqLworCisvKiB7e3sgcHJvdG8gcmVzb3VyY2UgUmFyRW50cnk6OmdldFN0cmVhbSgpCisgICBS
ZXR1cm4gcGFja2luZyBtZXRob2QgKi8KK1BIUF9NRVRIT0QocmFyZW50cnksIGdldFN0cmVhbSkKK3sK
Kwl6dmFsICoqdG1wLCAqKm5hbWU7CisJcmFyX2ZpbGVfdCAqcmFyID0gTlVMTDsKKwl6dmFsICplbnRy
eV9vYmogPSBnZXRUaGlzKCk7CisJcGhwX3N0cmVhbSAqc3RyZWFtID0gTlVMTDsKKworCVJBUl9HRVRf
UFJPUEVSVFkobmFtZSwgIm5hbWUiKTsKKwlSQVJfR0VUX1BST1BFUlRZKHRtcCwgInJhcmZpbGUiKTsK
KwlaRU5EX0ZFVENIX1JFU09VUkNFKHJhciwgcmFyX2ZpbGVfdCAqLCB0bXAsIC0xLCBsZV9yYXJfZmls
ZV9uYW1lLCBsZV9yYXJfZmlsZSk7CisKKwlzdHJlYW0gPSBwaHBfc3RyZWFtX3Jhcl9vcGVuKHJhci0+
ZXh0cmFjdF9vcGVuX2RhdGEtPkFyY05hbWUsCisJCVpfU1RSVkFMX1BQKG5hbWUpLCAiciIgU1RSRUFN
U19DQyBUU1JNTFNfQ0MpOworCisJaWYgKHN0cmVhbSAhPSBOVUxMKSB7CisJCXBocF9zdHJlYW1fdG9f
enZhbChzdHJlYW0sIHJldHVybl92YWx1ZSk7CisJfQorICBlbHNlCisgICAgUkVUVkFMX0ZBTFNFOwor
fQorLyogfX19ICovCisKKy8qIHt7eyBwcm90byBpbnQgUmFyRW50cnk6OmlzRGlyZWN0b3J5KCkKKyAg
IFJldHVybiB3aGV0aGVyIHRoZSBlbnRyeSByZXByZXNlbnRzIGEgZGlyZWN0b3J5ICovCitQSFBfTUVU
SE9EKHJhcmVudHJ5LCBpc0RpcmVjdG9yeSkKK3sKKwl6dmFsICoqdG1wOworCXp2YWwgKmVudHJ5X29i
aiA9IGdldFRoaXMoKTsKKwlsb25nIGZsYWdzOworCWludCBpc19kaXI7CisKKwlSQVJfR0VUX1BST1BF
UlRZKHRtcCwgImZsYWdzIik7CisJZmxhZ3MgPSBaX0xWQUxfUFAodG1wKTsKKwlpc19kaXIgPSAoKGZs
YWdzICYgMHhFMCkgPT0gMHhFMCk7CisKKwlSRVRVUk5fQk9PTChpc19kaXIpOworfQorLyogfX19ICov
CisKKy8qIHt7eyBwcm90byBpbnQgUmFyRW50cnk6Ol9fdG9TdHJpbmcoKQorICAgUmV0dXJuIHN0cmlu
ZyByZXByZXNlbnRhdGlvbiBmb3IgZW50cnkgKi8KK1BIUF9NRVRIT0QocmFyZW50cnksIF9fdG9TdHJp
bmcpCit7CisJenZhbAkJKipmbGFnc196dmFsLAorCQkJCSoqbmFtZV96dmFsLAorCQkJCSoqY3JjX3p2
YWw7CisJenZhbAkJKmVudHJ5X29iaiA9IGdldFRoaXMoKTsKKwlsb25nCQlmbGFnczsKKwlpbnQJCQlp
c19kaXI7CisJY2hhcgkJKm5hbWUsCisJCQkJKmNyYzsKKwljaGFyCQkqcmVzdHJpbmc7CisJaW50CQkJ
cmVzdHJpbmdfbGVuOworCWNvbnN0IGNoYXIJZm9ybWF0W10gPSAiUmFyRW50cnkgZm9yICVzIFwiJXNc
IiAoJXMpIjsKKworCVJBUl9HRVRfUFJPUEVSVFkoZmxhZ3NfenZhbCwgImZsYWdzIik7CisJZmxhZ3Mg
PSBaX0xWQUxfUFAoZmxhZ3NfenZhbCk7CisJaXNfZGlyID0gKChmbGFncyAmIDB4RTApID09IDB4RTAp
OworCisJUkFSX0dFVF9QUk9QRVJUWShuYW1lX3p2YWwsICJuYW1lIik7CisJbmFtZSA9IFpfU1RSVkFM
X1BQKG5hbWVfenZhbCk7CisKKwlSQVJfR0VUX1BST1BFUlRZKGNyY196dmFsLCAiY3JjIik7CisJY3Jj
ID0gWl9TVFJWQUxfUFAoY3JjX3p2YWwpOworCisJLy8yIGlzIHNpemUgb2YgJXMsIDggaXMgc2l6ZSBv
ZiBjcmMKKwlyZXN0cmluZ19sZW4gPSAoc2l6ZW9mKGZvcm1hdCktMSkgLSAyICogMyArIChzaXplb2Yo
ImRpcmVjdG9yeSIpLTEpICsKKwkJc3RybGVuKG5hbWUpICsgOCArIDE7CisJcmVzdHJpbmcgPSBlbWFs
bG9jKHJlc3RyaW5nX2xlbik7CisJc25wcmludGYocmVzdHJpbmcsIHJlc3RyaW5nX2xlbiwgZm9ybWF0
LCBpc19kaXI/ImRpcmVjdG9yeSI6ImZpbGUiLAorCQluYW1lLCBjcmMpOworCXJlc3RyaW5nW3Jlc3Ry
aW5nX2xlbiAtIDFdID0gJ1wwJzsgLy9qdXN0IHRvIGJlIHNhZmUKKworCVJFVFVSTl9TVFJJTkcocmVz
dHJpbmcsIDApOworfQorLyogfX19ICovCisvKiB9fX0gKi8KKworLyoge3t7IGFyZ2luZm8gKi8KK1pF
TkRfQkVHSU5fQVJHX0lORk9fRVgoYXJnaW5mb19yYXJlbnRyeV9leHRyYWN0LCAwLCAwLCAxKQorCVpF
TkRfQVJHX0lORk8oMCwgcGF0aCkKKwlaRU5EX0FSR19JTkZPKDAsIGZpbGVuYW1lKQorWkVORF9FTkRf
QVJHX0lORk8oKQorCitaRU5EX0JFR0lOX0FSR19JTkZPKGFyZ2luZm9fcmFyX3ZvaWQsIDApCitaRU5E
X0VORF9BUkdfSU5GTygpCisvKiB9fX0gKi8KKworc3RhdGljIHplbmRfZnVuY3Rpb25fZW50cnkgcGhw
X3Jhcl9jbGFzc19mdW5jdGlvbnNbXSA9IHsKKwlQSFBfTUUocmFyZW50cnksCQlleHRyYWN0LAkJCWFy
Z2luZm9fcmFyZW50cnlfZXh0cmFjdCwJWkVORF9BQ0NfUFVCTElDKQorCVBIUF9NRShyYXJlbnRyeSwJ
CWdldE5hbWUsCQkJYXJnaW5mb19yYXJfdm9pZCwJWkVORF9BQ0NfUFVCTElDKQorCVBIUF9NRShyYXJl
bnRyeSwJCWdldFVucGFja2VkU2l6ZSwJYXJnaW5mb19yYXJfdm9pZCwJWkVORF9BQ0NfUFVCTElDKQor
CVBIUF9NRShyYXJlbnRyeSwJCWdldFBhY2tlZFNpemUsCQlhcmdpbmZvX3Jhcl92b2lkLAlaRU5EX0FD
Q19QVUJMSUMpCisJUEhQX01FKHJhcmVudHJ5LAkJZ2V0SG9zdE9zLAkJCWFyZ2luZm9fcmFyX3ZvaWQs
CVpFTkRfQUNDX1BVQkxJQykKKwlQSFBfTUUocmFyZW50cnksCQlnZXRGaWxlVGltZSwJCWFyZ2luZm9f
cmFyX3ZvaWQsCVpFTkRfQUNDX1BVQkxJQykKKwlQSFBfTUUocmFyZW50cnksCQlnZXRDcmMsCQkJCWFy
Z2luZm9fcmFyX3ZvaWQsCVpFTkRfQUNDX1BVQkxJQykKKwlQSFBfTUUocmFyZW50cnksCQlnZXRBdHRy
LAkJCWFyZ2luZm9fcmFyX3ZvaWQsCVpFTkRfQUNDX1BVQkxJQykKKwlQSFBfTUUocmFyZW50cnksCQln
ZXRWZXJzaW9uLAkJCWFyZ2luZm9fcmFyX3ZvaWQsCVpFTkRfQUNDX1BVQkxJQykKKwlQSFBfTUUocmFy
ZW50cnksCQlnZXRNZXRob2QsCQkJYXJnaW5mb19yYXJfdm9pZCwJWkVORF9BQ0NfUFVCTElDKQorCVBI
UF9NRShyYXJlbnRyeSwJCWdldFN0cmVhbSwJCQlhcmdpbmZvX3Jhcl92b2lkLAlaRU5EX0FDQ19QVUJM
SUMpCisJUEhQX01FKHJhcmVudHJ5LAkJaXNEaXJlY3RvcnksCQlhcmdpbmZvX3Jhcl92b2lkLAlaRU5E
X0FDQ19QVUJMSUMpCisJUEhQX01FKHJhcmVudHJ5LAkJX190b1N0cmluZywJCQlhcmdpbmZvX3Jhcl92
b2lkLAlaRU5EX0FDQ19QVUJMSUMpCisJe05VTEwsIE5VTEwsIE5VTEx9Cit9OworCit2b2lkIG1pbml0
X3JhcmVudHJ5KFRTUk1MU19EKSB7CisJemVuZF9jbGFzc19lbnRyeSBjZTsKKworCW1lbWNweSgmcmFy
X29iamVjdF9oYW5kbGVycywgemVuZF9nZXRfc3RkX29iamVjdF9oYW5kbGVycygpLCBzaXplb2YgcmFy
X29iamVjdF9oYW5kbGVycyk7CisKKwlJTklUX0NMQVNTX0VOVFJZKGNlLCAiUmFyRW50cnkiLCBwaHBf
cmFyX2NsYXNzX2Z1bmN0aW9ucyk7CisJY2UuY2VfZmxhZ3MgfD0gWkVORF9BQ0NfRklOQUxfQ0xBU1M7
CisJY2UuY2xvbmUgPSBOVUxMOworCS8vQ3VzdG9tIGNyZWF0aW9uIGN1cnJlbnRseSBub3QgcmVhbGx5
IG5lZWRlZCwgYnV0IHlvdSBuZXZlciBrbm93Li4uCisJY2UuY3JlYXRlX29iamVjdCA9ICZyYXJlbnRy
eV9jZV9jcmVhdGVfb2JqZWN0OworCXJhcl9jbGFzc19lbnRyeV9wdHIgPSB6ZW5kX3JlZ2lzdGVyX2lu
dGVybmFsX2NsYXNzKCZjZSBUU1JNTFNfQ0MpOworCisJUkVHX1JBUl9QUk9QRVJUWSgicmFyZmlsZSIs
ICJBc3NvY2lhdGVkIFJBUiBhcmNoaXZlIik7CisJUkVHX1JBUl9QUk9QRVJUWSgibmFtZSIsICJGaWxl
IG9yIGRpcmVjdG9yeSBuYW1lIHdpdGggcGF0aCIpOworCVJFR19SQVJfUFJPUEVSVFkoInVucGFja2Vk
X3NpemUiLCAiU2l6ZSBvZiBmaWxlIHdoZW4gdW5wYWNrZWQiKTsKKwlSRUdfUkFSX1BST1BFUlRZKCJw
YWNrZWRfc2l6ZSIsICJTaXplIG9mIHRoZSBwYWNrZWQgZmlsZSBpbnNpZGUgdGhlIGFyY2hpdmUiKTsK
KwlSRUdfUkFSX1BST1BFUlRZKCJob3N0X29zIiwgIk9TIHVzZWQgdG8gcGFjayB0aGUgZmlsZSIpOwor
CVJFR19SQVJfUFJPUEVSVFkoImZpbGVfdGltZSIsICJFbnRyeSdzIHRpbWUgb2YgbGFzdCBtb2RpZmlj
YXRpb24iKTsKKwlSRUdfUkFSX1BST1BFUlRZKCJjcmMiLCAiQ1JDIGNoZWNrc3VtIGZvciB0aGUgdW5w
YWNrZWQgZmlsZSIpOworCVJFR19SQVJfUFJPUEVSVFkoImF0dHIiLCAiT1MtZGVwZW5kZW50IGZpbGUg
YXR0cmlidXRlcyIpOworCVJFR19SQVJfUFJPUEVSVFkoInZlcnNpb24iLCAiUkFSIHZlcnNpb24gbmVl
ZGVkIHRvIGV4dHJhY3QgZW50cnkiKTsKKwlSRUdfUkFSX1BST1BFUlRZKCJtZXRob2QiLCAiSWRlbnRp
ZmllciBmb3IgcGFja2luZyBtZXRob2QiKTsKKwlSRUdfUkFSX1BST1BFUlRZKCJmbGFncyIsICJFbnRy
eSBoZWFkZXIgZmxhZ3MiKTsKKworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiSE9TVF9NU0RPUyIs
CUhPU1RfTVNET1MpOworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiSE9TVF9PUzIiLAlIT1NUX09T
Mik7CisJUkVHX1JBUl9DTEFTU19DT05TVF9MT05HKCJIT1NUX1dJTjMyIiwJSE9TVF9XSU4zMik7CisJ
UkVHX1JBUl9DTEFTU19DT05TVF9MT05HKCJIT1NUX1VOSVgiLAlIT1NUX1VOSVgpOworCVJFR19SQVJf
Q0xBU1NfQ09OU1RfTE9ORygiSE9TVF9NQUNPUyIsCUhPU1RfTUFDT1MpOworCVJFR19SQVJfQ0xBU1Nf
Q09OU1RfTE9ORygiSE9TVF9CRU9TIiwJSE9TVF9CRU9TKTsKKworCS8vc2VlIFdpbk5ULmgKKwlSRUdf
UkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9XSU5fUkVBRE9OTFkiLAkJCQkweDAwMDAxTCk7
CisJUkVHX1JBUl9DTEFTU19DT05TVF9MT05HKCJBVFRSSUJVVEVfV0lOX0hJRERFTiIsCQkJCTB4MDAw
MDJMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9XSU5fU1lTVEVNIiwJCQkJ
MHgwMDAwNEwpOworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiQVRUUklCVVRFX1dJTl9ESVJFQ1RP
UlkiLAkJCQkweDAwMDEwTCk7CisJUkVHX1JBUl9DTEFTU19DT05TVF9MT05HKCJBVFRSSUJVVEVfV0lO
X0FSQ0hJVkUiLAkJCQkweDAwMDIwTCk7CisJUkVHX1JBUl9DTEFTU19DT05TVF9MT05HKCJBVFRSSUJV
VEVfV0lOX0RFVklDRSIsCQkJCTB4MDAwNDBMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFU
VFJJQlVURV9XSU5fTk9STUFMIiwJCQkJMHgwMDA4MEwpOworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9O
RygiQVRUUklCVVRFX1dJTl9URU1QT1JBUlkiLAkJCQkweDAwMTAwTCk7CisJUkVHX1JBUl9DTEFTU19D
T05TVF9MT05HKCJBVFRSSUJVVEVfV0lOX1NQQVJTRV9GSUxFIiwJCQkweDAwMjAwTCk7CisJUkVHX1JB
Ul9DTEFTU19DT05TVF9MT05HKCJBVFRSSUJVVEVfV0lOX1JFUEFSU0VfUE9JTlQiLAkJCTB4MDA0MDBM
KTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9XSU5fQ09NUFJFU1NFRCIsCQkJ
MHgwMDgwMEwpOworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiQVRUUklCVVRFX1dJTl9PRkZMSU5F
IiwJCQkJMHgwMTAwMEwpOworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiQVRUUklCVVRFX1dJTl9O
T1RfQ09OVEVOVF9JTkRFWEVEIiwJMHgwMjAwMEwpOworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygi
QVRUUklCVVRFX1dJTl9FTkNSWVBURUQiLAkJCQkweDA0MDAwTCk7CisJUkVHX1JBUl9DTEFTU19DT05T
VF9MT05HKCJBVFRSSUJVVEVfV0lOX1ZJUlRVQUwiLAkJCQkweDEwMDAwTCk7CisKKwlSRUdfUkFSX0NM
QVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9VTklYX1dPUkxEX0VYRUNVVEUiLAkJMHgwMDAwMUwpOwor
CVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiQVRUUklCVVRFX1VOSVhfV09STERfV1JJVEUiLAkJCTB4
MDAwMDJMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9VTklYX1dPUkxEX1JF
QUQiLAkJCTB4MDAwMDRMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9VTklY
X0dST1VQX0VYRUNVVEUiLAkJMHgwMDAwOEwpOworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiQVRU
UklCVVRFX1VOSVhfR1JPVVBfV1JJVEUiLAkJCTB4MDAwMTBMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNU
X0xPTkcoIkFUVFJJQlVURV9VTklYX0dST1VQX1JFQUQiLAkJCTB4MDAwMjBMKTsKKwlSRUdfUkFSX0NM
QVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9VTklYX09XTkVSX0VYRUNVVEUiLAkJMHgwMDA0MEwpOwor
CVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiQVRUUklCVVRFX1VOSVhfT1dORVJfV1JJVEUiLAkJCTB4
MDAwODBMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9VTklYX09XTkVSX1JF
QUQiLAkJCTB4MDAxMDBMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9VTklY
X1NUSUNLWSIsCQkJCTB4MDAyMDBMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVU
RV9VTklYX1NFVEdJRCIsCQkJCTB4MDA0MDBMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFU
VFJJQlVURV9VTklYX1NFVFVJRCIsCQkJCTB4MDA4MDBMKTsKKworCVJFR19SQVJfQ0xBU1NfQ09OU1Rf
TE9ORygiQVRUUklCVVRFX1VOSVhfRklOQUxfUVVBUlRFVCIsCQkweDBGMDAwTCk7CisJUkVHX1JBUl9D
TEFTU19DT05TVF9MT05HKCJBVFRSSUJVVEVfVU5JWF9GSUZPIiwJCQkJCTB4MDEwMDBMKTsKKwlSRUdf
UkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9VTklYX0NIQVJfREVWIiwJCQkJMHgwMjAwMEwp
OworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiQVRUUklCVVRFX1VOSVhfRElSRUNUT1JZIiwJCQkw
eDA0MDAwTCk7CisJUkVHX1JBUl9DTEFTU19DT05TVF9MT05HKCJBVFRSSUJVVEVfVU5JWF9CTE9DS19E
RVYiLAkJCTB4MDYwMDBMKTsKKwlSRUdfUkFSX0NMQVNTX0NPTlNUX0xPTkcoIkFUVFJJQlVURV9VTklY
X1JFR1VMQVJfRklMRSIsCQkJMHgwODAwMEwpOworCVJFR19SQVJfQ0xBU1NfQ09OU1RfTE9ORygiQVRU
UklCVVRFX1VOSVhfU1lNX0xJTksiLAkJCQkweDBBMDAwTCk7CisJUkVHX1JBUl9DTEFTU19DT05TVF9M
T05HKCJBVFRSSUJVVEVfVU5JWF9TT0NLRVQiLAkJCQkweDBDMDAwTCk7Cit9CgpNb2RpZmllZDogcGVj
bC9yYXIvdHJ1bmsvdGVzdHMvMDAyLnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9yYXIvdHJ1bmsvdGVzdHMv
MDAyLnBocHQJMjAwOS0xMS0yOSAwMzozMjo1NCBVVEMgKHJldiAyOTE0MTApCisrKyBwZWNsL3Jhci90
cnVuay90ZXN0cy8wMDIucGhwdAkyMDA5LTExLTI5IDAzOjQxOjExIFVUQyAocmV2IDI5MTQxMSkKQEAg
LTI1LDk4ICsyNSwxMDYgQEAKIC0tRVhQRUNURi0tCiBhcnJheSgyKSB7CiAgIFswXT0+Ci0gIG9iamVj
dChSYXJFbnRyeSkjJWQgKDEwKSB7Ci0gICAgWyJyYXJmaWxlIl09PgorICBvYmplY3QoUmFyRW50cnkp
IyVkICglZCkgeworICAgIFsicmFyZmlsZSI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgICAgcmVzb3Vy
Y2UoJWQpIG9mIHR5cGUgKFJhciBmaWxlKQotICAgIFsibmFtZSJdPT4KKyAgICBbIm5hbWUiOiJSYXJF
bnRyeSI6cHJpdmF0ZV09PgogICAgIHN0cmluZyg5KSAicGxhaW4udHh0IgotICAgIFsidW5wYWNrZWRf
c2l6ZSJdPT4KKyAgICBbInVucGFja2VkX3NpemUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICAgIGlu
dCgxNSkKLSAgICBbInBhY2tlZF9zaXplIl09PgorICAgIFsicGFja2VkX3NpemUiOiJSYXJFbnRyeSI6
cHJpdmF0ZV09PgogICAgIGludCgyNSkKLSAgICBbImhvc3Rfb3MiXT0+CisgICAgWyJob3N0X29zIjoi
UmFyRW50cnkiOnByaXZhdGVdPT4KICAgICBpbnQoMykKLSAgICBbImZpbGVfdGltZSJdPT4KKyAgICBb
ImZpbGVfdGltZSI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgICAgc3RyaW5nKDE5KSAiMjAwNC0wNi0x
MSAxMTowMToyNCIKLSAgICBbImNyYyJdPT4KKyAgICBbImNyYyI6IlJhckVudHJ5Ijpwcml2YXRlXT0+
CiAgICAgc3RyaW5nKDgpICI3NzI4YjZmZSIKLSAgICBbImF0dHIiXT0+CisgICAgWyJhdHRyIjoiUmFy
RW50cnkiOnByaXZhdGVdPT4KICAgICBpbnQoMzMxODgpCi0gICAgWyJ2ZXJzaW9uIl09PgorICAgIFsi
dmVyc2lvbiI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgICAgaW50KDI5KQotICAgIFsibWV0aG9kIl09
PgorICAgIFsibWV0aG9kIjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgICBpbnQoNTEpCisgICAgWyJm
bGFncyI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CisgICAgaW50KDMyODAwKQogICB9CiAgIFsxXT0+Ci0g
IG9iamVjdChSYXJFbnRyeSkjJWQgKDEwKSB7Ci0gICAgWyJyYXJmaWxlIl09PgorICBvYmplY3QoUmFy
RW50cnkpIyVkICglZCkgeworICAgIFsicmFyZmlsZSI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgICAg
cmVzb3VyY2UoJWQpIG9mIHR5cGUgKFJhciBmaWxlKQotICAgIFsibmFtZSJdPT4KKyAgICBbIm5hbWUi
OiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICAgIHN0cmluZygzMCkgInRlc3QgZmlsZSB3aXRoIHdoaXRl
c3BhY2VzLnR4dCIKLSAgICBbInVucGFja2VkX3NpemUiXT0+CisgICAgWyJ1bnBhY2tlZF9zaXplIjoi
UmFyRW50cnkiOnByaXZhdGVdPT4KICAgICBpbnQoMTQpCi0gICAgWyJwYWNrZWRfc2l6ZSJdPT4KKyAg
ICBbInBhY2tlZF9zaXplIjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgICBpbnQoMjApCi0gICAgWyJo
b3N0X29zIl09PgorICAgIFsiaG9zdF9vcyI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgICAgaW50KDMp
Ci0gICAgWyJmaWxlX3RpbWUiXT0+CisgICAgWyJmaWxlX3RpbWUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09
PgogICAgIHN0cmluZygxOSkgIjIwMDQtMDYtMTEgMTE6MDE6MzIiCi0gICAgWyJjcmMiXT0+CisgICAg
WyJjcmMiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICAgIHN0cmluZyg4KSAiMjE4OTBkZDkiCi0gICAg
WyJhdHRyIl09PgorICAgIFsiYXR0ciI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgICAgaW50KDMzMTg4
KQotICAgIFsidmVyc2lvbiJdPT4KKyAgICBbInZlcnNpb24iOiJSYXJFbnRyeSI6cHJpdmF0ZV09Pgog
ICAgIGludCgyOSkKLSAgICBbIm1ldGhvZCJdPT4KKyAgICBbIm1ldGhvZCI6IlJhckVudHJ5Ijpwcml2
YXRlXT0+CiAgICAgaW50KDUxKQorICAgIFsiZmxhZ3MiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgorICAg
IGludCgzMjgwMCkKICAgfQogfQogYXJyYXkoMikgewogICBbMF09PgotICBvYmplY3QoUmFyRW50cnkp
IyVkICgxMCkgewotICAgIFsicmFyZmlsZSJdPT4KKyAgb2JqZWN0KFJhckVudHJ5KSMlZCAoJWQpIHsK
KyAgICBbInJhcmZpbGUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICAgIHJlc291cmNlKCVkKSBvZiB0
eXBlIChSYXIgZmlsZSkKLSAgICBbIm5hbWUiXT0+CisgICAgWyJuYW1lIjoiUmFyRW50cnkiOnByaXZh
dGVdPT4KICAgICBzdHJpbmcoNSkgIjEudHh0IgotICAgIFsidW5wYWNrZWRfc2l6ZSJdPT4KKyAgICBb
InVucGFja2VkX3NpemUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICAgIGludCg1KQotICAgIFsicGFj
a2VkX3NpemUiXT0+CisgICAgWyJwYWNrZWRfc2l6ZSI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgICAg
aW50KDE3KQotICAgIFsiaG9zdF9vcyJdPT4KKyAgICBbImhvc3Rfb3MiOiJSYXJFbnRyeSI6cHJpdmF0
ZV09PgogICAgIGludCgyKQotICAgIFsiZmlsZV90aW1lIl09PgorICAgIFsiZmlsZV90aW1lIjoiUmFy
RW50cnkiOnByaXZhdGVdPT4KICAgICBzdHJpbmcoMTkpICIyMDA0LTA2LTExIDEwOjA3OjE4IgotICAg
IFsiY3JjIl09PgorICAgIFsiY3JjIjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgICBzdHJpbmcoOCkg
ImEwZGU3MWMwIgotICAgIFsiYXR0ciJdPT4KKyAgICBbImF0dHIiOiJSYXJFbnRyeSI6cHJpdmF0ZV09
PgogICAgIGludCgzMikKLSAgICBbInZlcnNpb24iXT0+CisgICAgWyJ2ZXJzaW9uIjoiUmFyRW50cnki
OnByaXZhdGVdPT4KICAgICBpbnQoMjkpCi0gICAgWyJtZXRob2QiXT0+CisgICAgWyJtZXRob2QiOiJS
YXJFbnRyeSI6cHJpdmF0ZV09PgogICAgIGludCg1MykKKyAgICBbImZsYWdzIjoiUmFyRW50cnkiOnBy
aXZhdGVdPT4KKyAgICBpbnQoMzY5OTIpCiAgIH0KICAgWzFdPT4KLSAgb2JqZWN0KFJhckVudHJ5KSMl
ZCAoMTApIHsKLSAgICBbInJhcmZpbGUiXT0+CisgIG9iamVjdChSYXJFbnRyeSkjJWQgKCVkKSB7Cisg
ICAgWyJyYXJmaWxlIjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgICByZXNvdXJjZSglZCkgb2YgdHlw
ZSAoUmFyIGZpbGUpCi0gICAgWyJuYW1lIl09PgorICAgIFsibmFtZSI6IlJhckVudHJ5Ijpwcml2YXRl
XT0+CiAgICAgc3RyaW5nKDUpICIyLnR4dCIKLSAgICBbInVucGFja2VkX3NpemUiXT0+CisgICAgWyJ1
bnBhY2tlZF9zaXplIjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgICBpbnQoNSkKLSAgICBbInBhY2tl
ZF9zaXplIl09PgorICAgIFsicGFja2VkX3NpemUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICAgIGlu
dCgxNikKLSAgICBbImhvc3Rfb3MiXT0+CisgICAgWyJob3N0X29zIjoiUmFyRW50cnkiOnByaXZhdGVd
PT4KICAgICBpbnQoMikKLSAgICBbImZpbGVfdGltZSJdPT4KKyAgICBbImZpbGVfdGltZSI6IlJhckVu
dHJ5Ijpwcml2YXRlXT0+CiAgICAgc3RyaW5nKDE5KSAiMjAwNC0wNi0xMSAxMDowNzoyNiIKLSAgICBb
ImNyYyJdPT4KKyAgICBbImNyYyI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgICAgc3RyaW5nKDgpICI0
NWE5MThkZSIKLSAgICBbImF0dHIiXT0+CisgICAgWyJhdHRyIjoiUmFyRW50cnkiOnByaXZhdGVdPT4K
ICAgICBpbnQoMzIpCi0gICAgWyJ2ZXJzaW9uIl09PgorICAgIFsidmVyc2lvbiI6IlJhckVudHJ5Ijpw
cml2YXRlXT0+CiAgICAgaW50KDI5KQotICAgIFsibWV0aG9kIl09PgorICAgIFsibWV0aG9kIjoiUmFy
RW50cnkiOnByaXZhdGVdPT4KICAgICBpbnQoNTMpCisgICAgWyJmbGFncyI6IlJhckVudHJ5Ijpwcml2
YXRlXT0+CisgICAgaW50KDM3MDA4KQogICB9CiB9CgoKTW9kaWZpZWQ6IHBlY2wvcmFyL3RydW5rL3Rl
c3RzLzAwMy5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvcmFyL3RydW5rL3Rlc3RzLzAwMy5waHB0CTIwMDkt
MTEtMjkgMDM6MzI6NTQgVVRDIChyZXYgMjkxNDEwKQorKysgcGVjbC9yYXIvdHJ1bmsvdGVzdHMvMDAz
LnBocHQJMjAwOS0xMS0yOSAwMzo0MToxMSBVVEMgKHJldiAyOTE0MTEpCkBAIC0yMyw0OSArMjMsNTMg
QEAKIGVjaG8gIkRvbmVcbiI7CiA/PgogLS1FWFBFQ1RGLS0KLW9iamVjdChSYXJFbnRyeSkjJWQgKDEw
KSB7Ci0gIFsicmFyZmlsZSJdPT4KK29iamVjdChSYXJFbnRyeSkjJWQgKCVkKSB7CisgIFsicmFyZmls
ZSI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgIHJlc291cmNlKCVkKSBvZiB0eXBlIChSYXIgZmlsZSkK
LSAgWyJuYW1lIl09PgorICBbIm5hbWUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICBzdHJpbmcoMzAp
ICJ0ZXN0IGZpbGUgd2l0aCB3aGl0ZXNwYWNlcy50eHQiCi0gIFsidW5wYWNrZWRfc2l6ZSJdPT4KKyAg
WyJ1bnBhY2tlZF9zaXplIjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgaW50KDE0KQotICBbInBhY2tl
ZF9zaXplIl09PgorICBbInBhY2tlZF9zaXplIjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgaW50KDIw
KQotICBbImhvc3Rfb3MiXT0+CisgIFsiaG9zdF9vcyI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgIGlu
dCgzKQotICBbImZpbGVfdGltZSJdPT4KKyAgWyJmaWxlX3RpbWUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09
PgogICBzdHJpbmcoMTkpICIyMDA0LTA2LTExIDExOjAxOjMyIgotICBbImNyYyJdPT4KKyAgWyJjcmMi
OiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICBzdHJpbmcoOCkgIjIxODkwZGQ5IgotICBbImF0dHIiXT0+
CisgIFsiYXR0ciI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgIGludCgzMzE4OCkKLSAgWyJ2ZXJzaW9u
Il09PgorICBbInZlcnNpb24iOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICBpbnQoMjkpCi0gIFsibWV0
aG9kIl09PgorICBbIm1ldGhvZCI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgIGludCg1MSkKKyAgWyJm
bGFncyI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CisgIGludCgzMjgwMCkKIH0KLW9iamVjdChSYXJFbnRy
eSkjJWQgKDEwKSB7Ci0gIFsicmFyZmlsZSJdPT4KK29iamVjdChSYXJFbnRyeSkjJWQgKCVkKSB7Cisg
IFsicmFyZmlsZSI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgIHJlc291cmNlKCVkKSBvZiB0eXBlIChS
YXIgZmlsZSkKLSAgWyJuYW1lIl09PgorICBbIm5hbWUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICBz
dHJpbmcoNSkgIjIudHh0IgotICBbInVucGFja2VkX3NpemUiXT0+CisgIFsidW5wYWNrZWRfc2l6ZSI6
IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgIGludCg1KQotICBbInBhY2tlZF9zaXplIl09PgorICBbInBh
Y2tlZF9zaXplIjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgaW50KDE2KQotICBbImhvc3Rfb3MiXT0+
CisgIFsiaG9zdF9vcyI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgIGludCgyKQotICBbImZpbGVfdGlt
ZSJdPT4KKyAgWyJmaWxlX3RpbWUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICBzdHJpbmcoMTkpICIy
MDA0LTA2LTExIDEwOjA3OjI2IgotICBbImNyYyJdPT4KKyAgWyJjcmMiOiJSYXJFbnRyeSI6cHJpdmF0
ZV09PgogICBzdHJpbmcoOCkgIjQ1YTkxOGRlIgotICBbImF0dHIiXT0+CisgIFsiYXR0ciI6IlJhckVu
dHJ5Ijpwcml2YXRlXT0+CiAgIGludCgzMikKLSAgWyJ2ZXJzaW9uIl09PgorICBbInZlcnNpb24iOiJS
YXJFbnRyeSI6cHJpdmF0ZV09PgogICBpbnQoMjkpCi0gIFsibWV0aG9kIl09PgorICBbIm1ldGhvZCI6
IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgIGludCg1MykKKyAgWyJmbGFncyI6IlJhckVudHJ5Ijpwcml2
YXRlXT0+CisgIGludCgzNzAwOCkKIH0KCiBXYXJuaW5nOiByYXJfb3BlbigpOiBGYWlsZWQgdG8gb3Bl
biAlczogRVJBUl9FT1BFTiAoZmlsZSBvcGVuIGVycm9yKSBpbiAlcyBvbiBsaW5lICVkCgpNb2RpZmll
ZDogcGVjbC9yYXIvdHJ1bmsvdGVzdHMvMDA0LnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9yYXIvdHJ1bmsv
dGVzdHMvMDA0LnBocHQJMjAwOS0xMS0yOSAwMzozMjo1NCBVVEMgKHJldiAyOTE0MTApCisrKyBwZWNs
L3Jhci90cnVuay90ZXN0cy8wMDQucGhwdAkyMDA5LTExLTI5IDAzOjQxOjExIFVUQyAocmV2IDI5MTQx
MSkKQEAgLTQxLDkgKzQxLDYgQEAKIHZhcl9kdW1wKCRlbnRyeTIpOwogdmFyX2R1bXAoJGVudHJ5Mi0+
ZXh0cmFjdCgiIiwiIikpOwoKLXVuc2V0KCRlbnRyeTItPm5hbWUpOwotdmFyX2R1bXAoJGVudHJ5Mi0+
ZXh0cmFjdCgiIiwiIikpOwotCiBAdW5saW5rKCcyLnR4dCcpOwoKIGNoZGlyKCRvbGRjd2QpOwpAQCAt
NTYsMzAgKzUzLDI5IEBACiAyMjIyMgogMjIyMjIKIHN0cmluZyg1KSAiMjIyMjIiCi1vYmplY3QoUmFy
RW50cnkpIyVkICgxMCkgewotICBbInJhcmZpbGUiXT0+CitvYmplY3QoUmFyRW50cnkpIyVkICglZCkg
eworICBbInJhcmZpbGUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICByZXNvdXJjZSglZCkgb2YgdHlw
ZSAoUmFyIGZpbGUpCi0gIFsibmFtZSJdPT4KKyAgWyJuYW1lIjoiUmFyRW50cnkiOnByaXZhdGVdPT4K
ICAgc3RyaW5nKDUpICIyLnR4dCIKLSAgWyJ1bnBhY2tlZF9zaXplIl09PgorICBbInVucGFja2VkX3Np
emUiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICBpbnQoNSkKLSAgWyJwYWNrZWRfc2l6ZSJdPT4KKyAg
WyJwYWNrZWRfc2l6ZSI6IlJhckVudHJ5Ijpwcml2YXRlXT0+CiAgIGludCgxNikKLSAgWyJob3N0X29z
Il09PgorICBbImhvc3Rfb3MiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICBpbnQoMikKLSAgWyJmaWxl
X3RpbWUiXT0+CisgIFsiZmlsZV90aW1lIjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgc3RyaW5nKDE5
KSAiMjAwNC0wNi0xMSAxMDowNzoyNiIKLSAgWyJjcmMiXT0+CisgIFsiY3JjIjoiUmFyRW50cnkiOnBy
aXZhdGVdPT4KICAgc3RyaW5nKDgpICI0NWE5MThkZSIKLSAgWyJhdHRyIl09PgorICBbImF0dHIiOiJS
YXJFbnRyeSI6cHJpdmF0ZV09PgogICBpbnQoMzIpCi0gIFsidmVyc2lvbiJdPT4KKyAgWyJ2ZXJzaW9u
IjoiUmFyRW50cnkiOnByaXZhdGVdPT4KICAgaW50KDI5KQotICBbIm1ldGhvZCJdPT4KKyAgWyJtZXRo
b2QiOiJSYXJFbnRyeSI6cHJpdmF0ZV09PgogICBpbnQoNTMpCisgIFsiZmxhZ3MiOiJSYXJFbnRyeSI6
cHJpdmF0ZV09PgorICBpbnQoMzcwMDgpCiB9CiBib29sKHRydWUpCi0KLVdhcm5pbmc6IFJhckVudHJ5
OjpleHRyYWN0KCk6IFVuYWJsZSB0byBmaW5kIHByb3BlcnR5ICduYW1lJyBpbiAlcyBvbiBsaW5lICVk
Ci1ib29sKGZhbHNlKQogRG9uZQoKTW9kaWZpZWQ6IHBlY2wvcmFyL3RydW5rL3Rlc3RzLzAwNi5waHB0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBlY2wvcmFyL3RydW5rL3Rlc3RzLzAwNi5waHB0CTIwMDktMTEtMjkgMDM6MzI6
NTQgVVRDIChyZXYgMjkxNDEwKQorKysgcGVjbC9yYXIvdHJ1bmsvdGVzdHMvMDA2LnBocHQJMjAwOS0x
MS0yOSAwMzo0MToxMSBVVEMgKHJldiAyOTE0MTEpCkBAIC03LDgyICs3LDE2IEBACgogJHJhcl9maWxl
MSA9IHJhcl9vcGVuKGRpcm5hbWUoX19GSUxFX18pLicvbXVsdGkucGFydDEucmFyJyk7CiAkbGlzdCA9
IHJhcl9saXN0KCRyYXJfZmlsZTEpOwotdmFyX2R1bXAoJGxpc3QpOworZWNobyAkbGlzdFswXS0+Z2V0
Q3JjKCkuIlxuIjsKK2VjaG8gJGxpc3RbMV0tPmdldENyYygpLiJcbiI7CitlY2hvICRsaXN0WzJdLT5n
ZXRDcmMoKS4iXG4iOwogZWNobyAiXG4iOwoKIGVjaG8gIkRvbmVcbiI7CiA/PgogLS1FWFBFQ1RGLS0K
LWFycmF5KDMpIHsKLSAgWzBdPT4KLSAgb2JqZWN0KFJhckVudHJ5KSMlZCAoJWQpIHsKLSAgICBbInJh
cmZpbGUiXT0+Ci0gICAgcmVzb3VyY2UoJWQpIG9mIHR5cGUgKFJhciBmaWxlKQotICAgIFsibmFtZSJd
PT4KLSAgICBzdHJpbmcoOSkgImZpbGUxLnR4dCIKLSAgICBbInVucGFja2VkX3NpemUiXT0+Ci0gICAg
aW50KDE4KQotICAgIFsicGFja2VkX3NpemUiXT0+Ci0gICAgaW50KDE4KQotICAgIFsiaG9zdF9vcyJd
PT4KLSAgICBpbnQoMikKLSAgICBbImZpbGVfdGltZSJdPT4KLSAgICBzdHJpbmcoMTkpICIyMDA5LTEx
LTE4IDIzOjUyOjI0IgotICAgIFsiY3JjIl09PgotICAgIHN0cmluZyg4KSAiNTJiMjgyMDIiCi0gICAg
WyJhdHRyIl09PgotICAgIGludCgzMikKLSAgICBbInZlcnNpb24iXT0+Ci0gICAgaW50KDI5KQotICAg
IFsibWV0aG9kIl09PgotICAgIGludCg0OCkKLSAgfQotICBbMV09PgotICBvYmplY3QoUmFyRW50cnkp
IyVkICglZCkgewotICAgIFsicmFyZmlsZSJdPT4KLSAgICByZXNvdXJjZSglZCkgb2YgdHlwZSAoUmFy
IGZpbGUpCi0gICAgWyJuYW1lIl09PgotICAgIHN0cmluZyg5KSAiZmlsZTIudHh0IgotICAgIFsidW5w
YWNrZWRfc2l6ZSJdPT4KLSAgICBpbnQoMTc3MDQpCi0gICAgWyJwYWNrZWRfc2l6ZSJdPT4KLSAgICBp
bnQoMTM2NTQpCi0gICAgWyJob3N0X29zIl09PgotICAgIGludCgyKQotICAgIFsiZmlsZV90aW1lIl09
PgotICAgIHN0cmluZygxOSkgIjIwMDktMTEtMTkgMDA6MDA6NTIiCi0gICAgWyJjcmMiXT0+Ci0gICAg
c3RyaW5nKDgpICJmMmM3OTg4MSIKLSAgICBbImF0dHIiXT0+Ci0gICAgaW50KDMyKQotICAgIFsidmVy
c2lvbiJdPT4KLSAgICBpbnQoMjkpCi0gICAgWyJtZXRob2QiXT0+Ci0gICAgaW50KDUxKQotICB9Ci0g
IFsyXT0+Ci0gIG9iamVjdChSYXJFbnRyeSkjJWQgKCVkKSB7Ci0gICAgWyJyYXJmaWxlIl09PgotICAg
IHJlc291cmNlKCVkKSBvZiB0eXBlIChSYXIgZmlsZSkKLSAgICBbIm5hbWUiXT0+Ci0gICAgc3RyaW5n
KDkpICJmaWxlMy50eHQiCi0gICAgWyJ1bnBhY2tlZF9zaXplIl09PgotICAgIGludCgxOCkKLSAgICBb
InBhY2tlZF9zaXplIl09PgotICAgIGludCgyNykKLSAgICBbImhvc3Rfb3MiXT0+Ci0gICAgaW50KDIp
Ci0gICAgWyJmaWxlX3RpbWUiXT0+Ci0gICAgc3RyaW5nKDE5KSAiMjAwOS0xMS0xOCAyMzo1MjozNiIK
LSAgICBbImNyYyJdPT4KLSAgICBzdHJpbmcoOCkgImJjYmNlMzJlIgotICAgIFsiYXR0ciJdPT4KLSAg
ICBpbnQoMzIpCi0gICAgWyJ2ZXJzaW9uIl09PgotICAgIGludCgyOSkKLSAgICBbIm1ldGhvZCJdPT4K
LSAgICBpbnQoNTEpCi0gIH0KLX0KKzUyYjI4MjAyCitmMmM3OTg4MQorYmNiY2UzMmUKCiBEb25lCgpN
b2RpZmllZDogcGVjbC9yYXIvdHJ1bmsvdGVzdHMvMDA4LnBocHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9yYXIv
dHJ1bmsvdGVzdHMvMDA4LnBocHQJMjAwOS0xMS0yOSAwMzozMjo1NCBVVEMgKHJldiAyOTE0MTApCisr
KyBwZWNsL3Jhci90cnVuay90ZXN0cy8wMDgucGhwdAkyMDA5LTExLTI5IDAzOjQxOjExIFVUQyAocmV2
IDI5MTQxMSkKQEAgLTcsOCArNyw3IEBACgogJHJhcl9maWxlMSA9IHJhcl9vcGVuKGRpcm5hbWUoX19G
SUxFX18pLicvbXVsdGkucGFydDEucmFyJyk7CiAkZW50cnkgPSByYXJfZW50cnlfZ2V0KCRyYXJfZmls
ZTEsICJmaWxlMS50eHQiKTsKLXZhcl9kdW1wKCRlbnRyeSk7Ci1lY2hvICJcbiI7CitlY2hvICIkZW50
cnlcbiI7CiAkZW50cnkgPSByYXJfZW50cnlfZ2V0KCRyYXJfZmlsZTEsICJub25leGlzdGVudF9maWxl
LnR4dCIpOwogdmFyX2R1bXAoJGVudHJ5KTsKIGVjaG8gIlxuIjsKQEAgLTIxLDMwICsyMCw4IEBACiBl
Y2hvICJEb25lXG4iOwogPz4KIC0tRVhQRUNURi0tCi1vYmplY3QoUmFyRW50cnkpIyVkICglZCkgewot
ICBbInJhcmZpbGUiXT0+Ci0gIHJlc291cmNlKCVkKSBvZiB0eXBlIChSYXIgZmlsZSkKLSAgWyJuYW1l
Il09PgotICBzdHJpbmcoOSkgImZpbGUxLnR4dCIKLSAgWyJ1bnBhY2tlZF9zaXplIl09PgotICBpbnQo
MTgpCi0gIFsicGFja2VkX3NpemUiXT0+Ci0gIGludCgxOCkKLSAgWyJob3N0X29zIl09PgotICBpbnQo
MikKLSAgWyJmaWxlX3RpbWUiXT0+Ci0gIHN0cmluZygxOSkgIjIwMDktMTEtMTggMjM6NTI6MjQiCi0g
IFsiY3JjIl09PgotICBzdHJpbmcoOCkgIjUyYjI4MjAyIgotICBbImF0dHIiXT0+Ci0gIGludCgzMikK
LSAgWyJ2ZXJzaW9uIl09PgotICBpbnQoMjkpCi0gIFsibWV0aG9kIl09PgotICBpbnQoNDgpCi19CitS
YXJFbnRyeSBmb3IgZmlsZSAiZmlsZTEudHh0IiAoNTJiMjgyMDIpCgotCiBXYXJuaW5nOiByYXJfZW50
cnlfZ2V0KCk6IGNhbm5vdCBmaW5kIGZpbGUgIm5vbmV4aXN0ZW50X2ZpbGUudHh0IiBpbiBSYXIgYXJj
aGl2ZSAiJXMiLiBpbiAlcyBvbiBsaW5lICVkCiBib29sKGZhbHNlKQoKCk1vZGlmaWVkOiBwZWNsL3Jh
ci90cnVuay90ZXN0cy8wMTMucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL3Jhci90cnVuay90ZXN0cy8wMTMu
cGhwdAkyMDA5LTExLTI5IDAzOjMyOjU0IFVUQyAocmV2IDI5MTQxMCkKKysrIHBlY2wvcmFyL3RydW5r
L3Rlc3RzLzAxMy5waHB0CTIwMDktMTEtMjkgMDM6NDE6MTEgVVRDIChyZXYgMjkxNDExKQpAQCAtOSwz
MyArOSwxMiBAQAogJGVudHJpZXMgPSByYXJfbGlzdCgkcmFyX2ZpbGUxKTsKICRuYW1lID0gcmVzZXQo
JGVudHJpZXMpLT5nZXROYW1lKCk7CiAkZW50cnliYWNrID0gcmFyX2VudHJ5X2dldCgkcmFyX2ZpbGUx
LCAkbmFtZSk7Ci12YXJfZHVtcCgkZW50cnliYWNrKTsKK2VjaG8gIiRlbnRyeWJhY2tcbiI7CiBlY2hv
ICJcbiI7CgogZWNobyAiRG9uZVxuIjsKID8+CiAtLUVYUEVDVEYtLQotb2JqZWN0KFJhckVudHJ5KSMl
ZCAoJWQpIHsKLSAgWyJyYXJmaWxlIl09PgotICByZXNvdXJjZSglZCkgb2YgdHlwZSAoUmFyIGZpbGUp
Ci0gIFsibmFtZSJdPT4KLSAgc3RyaW5nKDEzKSAiZmlsZTHDgNueLnR4dCIKLSAgWyJ1bnBhY2tlZF9z
aXplIl09PgotICBpbnQoMTgpCi0gIFsicGFja2VkX3NpemUiXT0+Ci0gIGludCgxOCkKLSAgWyJob3N0
X29zIl09PgotICBpbnQoMikKLSAgWyJmaWxlX3RpbWUiXT0+Ci0gIHN0cmluZygxOSkgIjIwMDktMTEt
MTggMjM6NTI6MjQiCi0gIFsiY3JjIl09PgotICBzdHJpbmcoOCkgIjUyYjI4MjAyIgotICBbImF0dHIi
XT0+Ci0gIGludCgzMikKLSAgWyJ2ZXJzaW9uIl09PgotICBpbnQoMjkpCi0gIFsibWV0aG9kIl09Pgot
ICBpbnQoNDgpCi19CitSYXJFbnRyeSBmb3IgZmlsZSAiZmlsZTHDgNueLnR4dCIgKDUyYjI4MjAyKQoK
IERvbmUKCk1vZGlmaWVkOiBwZWNsL3Jhci90cnVuay90ZXN0cy8wMTQucGhwdAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBw
ZWNsL3Jhci90cnVuay90ZXN0cy8wMTQucGhwdAkyMDA5LTExLTI5IDAzOjMyOjU0IFVUQyAocmV2IDI5
MTQxMCkKKysrIHBlY2wvcmFyL3RydW5rL3Rlc3RzLzAxNC5waHB0CTIwMDktMTEtMjkgMDM6NDE6MTEg
VVRDIChyZXYgMjkxNDExKQpAQCAtNyw3ICs3LDcgQEAKCiAkcmFyX2ZpbGUxID0gcmFyX29wZW4oZGly
bmFtZShfX0ZJTEVfXykuJy9yYXJfdW5pY29kZS5yYXInKTsKICRlbnRyeSA9IHJhcl9lbnRyeV9nZXQo
JHJhcl9maWxlMSwgImZpbGUxw4Dbni50eHQiKTsKLXZhcl9kdW1wKCRlbnRyeSk7CitlY2hvICRlbnRy
eS4iXG4iOwogZWNobyAiXG4iOwogJHN0cmVhbSA9ICRlbnRyeS0+Z2V0U3RyZWFtKCk7CiBpZiAoJHN0
cmVhbSAhPT0gZmFsc2UpCkBAIC0yMCwyOCArMjAsNyBAQAogZWNobyAiRG9uZVxuIjsKID8+CiAtLUVY
UEVDVEYtLQotb2JqZWN0KFJhckVudHJ5KSMlZCAoJWQpIHsKLSAgWyJyYXJmaWxlIl09PgotICByZXNv
dXJjZSglZCkgb2YgdHlwZSAoUmFyIGZpbGUpCi0gIFsibmFtZSJdPT4KLSAgc3RyaW5nKDEzKSAiZmls
ZTHDgNueLnR4dCIKLSAgWyJ1bnBhY2tlZF9zaXplIl09PgotICBpbnQoMTgpCi0gIFsicGFja2VkX3Np
emUiXT0+Ci0gIGludCgxOCkKLSAgWyJob3N0X29zIl09PgotICBpbnQoMikKLSAgWyJmaWxlX3RpbWUi
XT0+Ci0gIHN0cmluZygxOSkgIjIwMDktMTEtMTggMjM6NTI6MjQiCi0gIFsiY3JjIl09PgotICBzdHJp
bmcoOCkgIjUyYjI4MjAyIgotICBbImF0dHIiXT0+Ci0gIGludCgzMikKLSAgWyJ2ZXJzaW9uIl09Pgot
ICBpbnQoMjkpCi0gIFsibWV0aG9kIl09PgotICBpbnQoNDgpCi19CitSYXJFbnRyeSBmb3IgZmlsZSAi
ZmlsZTHDgNueLnR4dCIgKDUyYjI4MjAyKQoKIGNvbnRlbnRzIG9mIGZpbGUgMQogRG9uZQoKTW9kaWZp
ZWQ6IHBlY2wvcmFyL3RydW5rL3Rlc3RzLzAxNS5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvcmFyL3RydW5r
L3Rlc3RzLzAxNS5waHB0CTIwMDktMTEtMjkgMDM6MzI6NTQgVVRDIChyZXYgMjkxNDEwKQorKysgcGVj
bC9yYXIvdHJ1bmsvdGVzdHMvMDE1LnBocHQJMjAwOS0xMS0yOSAwMzo0MToxMSBVVEMgKHJldiAyOTE0
MTEpCkBAIC0xMCw3ICsxMCw3IEBACiAkZW50cmllcyA9IHJhcl9saXN0KCRyYXJfZmlsZTEpOwogJGVu
dHJ5MSA9IHJlc2V0KCRlbnRyaWVzKTsKIHVuc2V0KCRlbnRyaWVzKTsKLXZhcl9kdW1wKCRlbnRyeTEp
OworZWNobyAkZW50cnkxLiJcbiI7CiBlY2hvICJcbiI7CgogcmFyX2Nsb3NlKCRyYXJfZmlsZTEpOwpA
QCAtMjEsMjggKzIxLDcgQEAKID8+CiAtLUVYUEVDVEYtLQogcmVzb3VyY2UoJWQpIG9mIHR5cGUgKFJh
ciBmaWxlKQotb2JqZWN0KFJhckVudHJ5KSMlZCAoJWQpIHsKLSAgWyJyYXJmaWxlIl09PgotICByZXNv
dXJjZSglZCkgb2YgdHlwZSAoUmFyIGZpbGUpCi0gIFsibmFtZSJdPT4KLSAgc3RyaW5nKDUpICIxLnR4
dCIKLSAgWyJ1bnBhY2tlZF9zaXplIl09PgotICBpbnQoNSkKLSAgWyJwYWNrZWRfc2l6ZSJdPT4KLSAg
aW50KDE3KQotICBbImhvc3Rfb3MiXT0+Ci0gIGludCgyKQotICBbImZpbGVfdGltZSJdPT4KLSAgc3Ry
aW5nKDE5KSAiMjAwNC0wNi0xMSAxMDowNzoxOCIKLSAgWyJjcmMiXT0+Ci0gIHN0cmluZyg4KSAiYTBk
ZTcxYzAiCi0gIFsiYXR0ciJdPT4KLSAgaW50KDMyKQotICBbInZlcnNpb24iXT0+Ci0gIGludCgyOSkK
LSAgWyJtZXRob2QiXT0+Ci0gIGludCg1MykKLX0KK1JhckVudHJ5IGZvciBmaWxlICIxLnR4dCIgKGEw
ZGU3MWMwKQoKIHJlc291cmNlKCVkKSBvZiB0eXBlIChVbmtub3duKQogRG9uZQoKTW9kaWZpZWQ6IHBl
Y2wvcmFyL3RydW5rL3Rlc3RzLzAxOC5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvcmFyL3RydW5rL3Rlc3Rz
LzAxOC5waHB0CTIwMDktMTEtMjkgMDM6MzI6NTQgVVRDIChyZXYgMjkxNDEwKQorKysgcGVjbC9yYXIv
dHJ1bmsvdGVzdHMvMDE4LnBocHQJMjAwOS0xMS0yOSAwMzo0MToxMSBVVEMgKHJldiAyOTE0MTEpCkBA
IC02LDYyICs2LDE5IEBACiA8P3BocAogJHJhcl9maWxlMSA9IHJhcl9vcGVuKGRpcm5hbWUoX19GSUxF
X18pLicvbXVsdGkucGFydDIucmFyJyk7CiAkZW50cmllcyA9IHJhcl9saXN0KCRyYXJfZmlsZTEpOwot
dmFyX2R1bXAoJGVudHJpZXMpOworZWNobyAiTnVtYmVyIG9mIGVudHJpZXM6ICIgLiBjb3VudCgkZW50
cmllcykgLiAiXG4iOworZWNobyByZXNldCgkZW50cmllcykuIlxuIjsKICRlID0gcmFyX2VudHJ5X2dl
dCgkcmFyX2ZpbGUxLCAiZmlsZTIudHh0Iik7CiB2YXJfZHVtcCgkZSk7CiAkZSA9IHJhcl9lbnRyeV9n
ZXQoJHJhcl9maWxlMSwgImZpbGUzLnR4dCIpOwotdmFyX2R1bXAoJGUpOworZWNobyAkZS4iXG4iOwoK
IGVjaG8gIkRvbmVcbiI7CiAtLUVYUEVDVEYtLQotYXJyYXkoMSkgewotICBbMF09PgotICBvYmplY3Qo
UmFyRW50cnkpIyVkICglZCkgewotICAgIFsicmFyZmlsZSJdPT4KLSAgICByZXNvdXJjZSglZCkgb2Yg
dHlwZSAoUmFyIGZpbGUpCi0gICAgWyJuYW1lIl09PgotICAgIHN0cmluZyg5KSAiZmlsZTMudHh0Igot
ICAgIFsidW5wYWNrZWRfc2l6ZSJdPT4KLSAgICBpbnQoMTgpCi0gICAgWyJwYWNrZWRfc2l6ZSJdPT4K
LSAgICBpbnQoMjcpCi0gICAgWyJob3N0X29zIl09PgotICAgIGludCgyKQotICAgIFsiZmlsZV90aW1l
Il09PgotICAgIHN0cmluZygxOSkgIjIwMDktMTEtMTggMjM6NTI6MzYiCi0gICAgWyJjcmMiXT0+Ci0g
ICAgc3RyaW5nKDgpICJiY2JjZTMyZSIKLSAgICBbImF0dHIiXT0+Ci0gICAgaW50KDMyKQotICAgIFsi
dmVyc2lvbiJdPT4KLSAgICBpbnQoMjkpCi0gICAgWyJtZXRob2QiXT0+Ci0gICAgaW50KDUxKQotICB9
Ci19CitOdW1iZXIgb2YgZW50cmllczogMQorUmFyRW50cnkgZm9yIGZpbGUgImZpbGUzLnR4dCIgKGJj
YmNlMzJlKQoKIFdhcm5pbmc6IHJhcl9lbnRyeV9nZXQoKTogY2Fubm90IGZpbmQgZmlsZSAiZmlsZTIu
dHh0IiBpbiBSYXIgYXJjaGl2ZSAiJXMuIGluICVzIG9uIGxpbmUgJWQKIGJvb2woZmFsc2UpCi1vYmpl
Y3QoUmFyRW50cnkpIyVkICglZCkgewotICBbInJhcmZpbGUiXT0+Ci0gIHJlc291cmNlKCVkKSBvZiB0
eXBlIChSYXIgZmlsZSkKLSAgWyJuYW1lIl09PgotICBzdHJpbmcoOSkgImZpbGUzLnR4dCIKLSAgWyJ1
bnBhY2tlZF9zaXplIl09PgotICBpbnQoMTgpCi0gIFsicGFja2VkX3NpemUiXT0+Ci0gIGludCgyNykK
LSAgWyJob3N0X29zIl09PgotICBpbnQoMikKLSAgWyJmaWxlX3RpbWUiXT0+Ci0gIHN0cmluZygxOSkg
IjIwMDktMTEtMTggMjM6NTI6MzYiCi0gIFsiY3JjIl09PgotICBzdHJpbmcoOCkgImJjYmNlMzJlIgot
ICBbImF0dHIiXT0+Ci0gIGludCgzMikKLSAgWyJ2ZXJzaW9uIl09PgotICBpbnQoMjkpCi0gIFsibWV0
aG9kIl09PgotICBpbnQoNTEpCi19CitSYXJFbnRyeSBmb3IgZmlsZSAiZmlsZTMudHh0IiAoYmNiY2Uz
MmUpCiBEb25lCg==
--b7f2d50c9fca83761e55bd90629464c18e1a3a7b--
cataphr...@php.net (=?utf-8?q?Gustavo_Andr=C3=A9_dos_Santos_Lopes?=)
11/29/2009 3:41:11 AM





Reply:
| or Email(not shown): Name: | Register | Login

Alert me when someone responds to this posting.











Newest Articles

note 97095 added to soapclient.soapclient
4/1/2010 5:58:19 AM

note 97094 added to function.sqlite-changes
4/1/2010 5:06:46 AM

note 97093 added to function.sqlite-changes
4/1/2010 5:06:21 AM

note 97092 added to ref.xmlrpc
4/1/2010 4:52:18 AM

note 97091 added to function.var-export
4/1/2010 3:32:03 AM