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/svn/trunk/ svn.c
11/20/2009 7:20:54 AM

svn: /pecl/rar/trunk/ rar.cpp
11/19/2009 5:42:39 AM

svn: /pecl/rar/trunk/ php_rar.h
11/18/2009 9:22:00 PM

svn: /pecl/rar/trunk/ config.m4 config.w32 php_rar.h rar.cpp tests/001.phpt tests/002.phpt tests/003.phpt
11/18/2009 9:12:27 PM

svn: /pecl/rar/trunk/unrar/ dll.cpp dll.hpp extract.cpp extract.hpp extractchunk.cpp os.hpp rdwrfn.cpp rdwrfn.hpp unpack.cpp unpack.hpp unpack15.cpp unpack20.cpp version.hpp
11/18/2009 5:46:10 PM

svn: /pecl/rar/trunk/ config.m4
11/18/2009 2:56:13 PM

svn: /pecl/rar/trunk/ config.m4 rar.cpp
11/18/2009 2:23:48 PM

svn: /pecl/rar/trunk/ config.m4 config.w32 php_rar.h unrar/arccmt.cpp unrar/archive.cpp unrar/archive.hpp unrar/arcread.cpp unrar/array.hpp unrar/beosea.cpp unrar/cmddata.cpp unrar/cmddata.hpp unrar/c
11/17/2009 7:26:03 PM

svn: /pecl/rar/trunk/ config.w32 rar.cpp
11/17/2009 4:12:40 PM

svn: /pecl/dio/trunk/ config.m4 config.w32 dio.c dio_common.c dio_stream_wrappers.c package.xml php_dio.h php_dio_common.h php_dio_stream_wrappers.h tests/001.phpt tests/dio_raw_stream_001.phpt tests/ Reply

Group: php.pecl.cvs Subscribe Posted:11/29/2009 9:58:12 PM Replies:0 Views:24 Items(0)
--345a6ba7f55918e8e9a66e48b8d17a270406d57e
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit

cyberspice Sun, 29 Nov 2009 21:58:12 +0000

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

Log:
Initial check in of the stream wrapper code. The new code adds new
stream protocols 'dio.raw' and 'dio.serial' together with functions
to open streams (rather than using fopen) called 'dio_raw' and
'dio_serial'. The Win32 code is currently untested.

Files modified by this commit:

config.w32, config.m4, dio.c, php_dio.h, package.xml, tests/001.phpt

Files added by this commit:

dio_common.c, dio_stream_wrappers.c, php_dio_common.h,
php_dio_stream_wrappers.h, tests/dio_raw_stream_001.phpt,
tests/dio_raw_stream_002.phpt, tests/dio_raw_stream_003.phpt,
tests/dio_raw_stream_004.phpt, tests/dio_raw_stream_005.phpt,
tests/dio_raw_stream_006.phpt, tests/dio_raw_stream_007.phpt

Changed paths:
U pecl/dio/trunk/config.m4
U pecl/dio/trunk/config.w32
U pecl/dio/trunk/dio.c
A pecl/dio/trunk/dio_common.c
A pecl/dio/trunk/dio_stream_wrappers.c
U pecl/dio/trunk/package.xml
U pecl/dio/trunk/php_dio.h
A pecl/dio/trunk/php_dio_common.h
A pecl/dio/trunk/php_dio_stream_wrappers.h
U pecl/dio/trunk/tests/001.phpt
A pecl/dio/trunk/tests/dio_raw_stream_001.phpt
A pecl/dio/trunk/tests/dio_raw_stream_002.phpt
A pecl/dio/trunk/tests/dio_raw_stream_003.phpt
A pecl/dio/trunk/tests/dio_raw_stream_004.phpt
A pecl/dio/trunk/tests/dio_raw_stream_005.phpt
A pecl/dio/trunk/tests/dio_raw_stream_006.phpt
A pecl/dio/trunk/tests/dio_raw_stream_007.phpt


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

TW9kaWZpZWQ6IHBlY2wvZGlvL3RydW5rL2NvbmZpZy5tNAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL2Rpby90cnVu
ay9jb25maWcubTQJMjAwOS0xMS0yOSAyMTowNDoxMiBVVEMgKHJldiAyOTE0NTYpCisrKyBwZWNsL2Rp
by90cnVuay9jb25maWcubTQJMjAwOS0xMS0yOSAyMTo1ODoxMiBVVEMgKHJldiAyOTE0NTcpCkBAIC02
LDUgKzYsNSBAQAogWyAgLS1lbmFibGUtZGlvICAgICAgICAgICAgRW5hYmxlIGRpcmVjdCBJL08gc3Vw
cG9ydF0pCgogaWYgdGVzdCAiJFBIUF9ESU8iICE9ICJubyI7IHRoZW4KLSAgUEhQX05FV19FWFRFTlNJ
T04oZGlvLCBkaW8uYywgJGV4dF9zaGFyZWQpCisgIFBIUF9ORVdfRVhURU5TSU9OKGRpbywgZGlvLmMg
ZGlvX3N0cmVhbV93cmFwcGVycy5jIGRpb19jb21tb24uYywgJGV4dF9zaGFyZWQpCiBmaQoKTW9kaWZp
ZWQ6IHBlY2wvZGlvL3RydW5rL2NvbmZpZy53MzIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvY29u
ZmlnLnczMgkyMDA5LTExLTI5IDIxOjA0OjEyIFVUQyAocmV2IDI5MTQ1NikKKysrIHBlY2wvZGlvL3Ry
dW5rL2NvbmZpZy53MzIJMjAwOS0xMS0yOSAyMTo1ODoxMiBVVEMgKHJldiAyOTE0NTcpCkBAIC00LDYg
KzQsNiBAQAogQVJHX0VOQUJMRSgiZGlvIiwgIkVuYWJsZSB0aGUgZGlyZWN0IEkvTyBzdXBwb3J0Iiwg
Im5vIik7CgogaWYgKFBIUF9ESU8gIT0gIm5vIikgewotCUVYVEVOU0lPTigiZGlvIiwgImRpby5jIik7
CisJRVhURU5TSU9OKCJkaW8iLCAiZGlvLmMgZGlvX2xlZ2FjeS5jIGRpb19zdHJlYW1fd3JhcHBlcnMu
YyIpOwogCUFDX0RFRklORSgnSEFWRV9ESU8nLCAxLCAnZGlvIHN1cHBvcnQnKTsKIH0KCk1vZGlmaWVk
OiBwZWNsL2Rpby90cnVuay9kaW8uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL2Rpby90cnVuay9kaW8uYwkyMDA5
LTExLTI5IDIxOjA0OjEyIFVUQyAocmV2IDI5MTQ1NikKKysrIHBlY2wvZGlvL3RydW5rL2Rpby5jCTIw
MDktMTEtMjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMiw3ICsyLDcgQEAKICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKwogICAgfCBQSFAgVmVyc2lvbiA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgQ29weXJpZ2h0IChj
KSAxOTk3LTIwMDQgVGhlIFBIUCBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
ICAgfCBDb3B5cmlnaHQgKGMpIDE5OTctMjAwOSBUaGUgUEhQIEdyb3VwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgVGhpcyBzb3VyY2UgZmlsZSBpcyBz
dWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICAgfAogICAgfCB0aGF0
IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAg
ICAgICB8CkBAIC0xMyw2ICsxMyw3IEBACiAgICB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFp
bCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwog
ICAgfCBBdXRob3I6IFN0ZXJsaW5nIEh1Z2hlcyA8c3RlcmxpbmdAcGhwLm5ldD4gICAgICAgICAgICAg
ICAgICAgICAgICAgICB8CisgICB8IEF1dGhvcjogTWVsYW5pZSBSaGlhbm5hIExld2lzIDxjeWJlcnNw
aWNlQHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICovCgpAQCAt
MjQsNiArMjUsNyBAQAogI2luY2x1ZGUgInBocF9pbmkuaCIKICNpbmNsdWRlICJleHQvc3RhbmRhcmQv
aW5mby5oIgogI2luY2x1ZGUgInBocF9kaW8uaCIKKyNpbmNsdWRlICJwaHBfZGlvX3N0cmVhbV93cmFw
cGVycy5oIgoKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAt
NDYsNDUgKzQ4LDI5IEBACiAjIGVuZGlmIC8qIENORVdfUlRTQ1RTICovCiAjZW5kaWYgLyogIUNSVFND
VFMgKi8KCisvKgorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8ICAgICAgICAgICAgICAgICAgICAgICBERVBS
RUNBVEVEIEZVTkNUSU9OQUxJVFkgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgfCBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBmcm9tIHRoZSBlYXJsaWVyIERJTyB2ZXJzaW9u
cy4gIFRoZXkgd2lsbCAgICB8CisgICB8IGNvbnRpbnVlIHRvIGJlIG1haW50YWluZWQgYnV0IG5vdCBl
eHRlbmRlZC4gIEl0IGlzIHRob3JvdWdobHkgICAgICAgIHwKKyAgIHwgcmVjb21tZW5kZWQgdGhhdCB5
b3Ugc2hvdWxkIHVzZSBlaXRoZXIgdGhlIHN0cmVhbSB3cmFwcGVycyBvciB0aGUgICAgfAorICAgfCBE
SU8gY2xhc3NlcyBpbiBuZXcgY29kZS4gLSBNZWxhbmllICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworCiAjZGVmaW5lIGxlX2ZkX25hbWUgIkRpcmVj
dCBJL08gRmlsZSBEZXNjcmlwdG9yIgogc3RhdGljIGludCBsZV9mZDsKCi1mdW5jdGlvbl9lbnRyeSBk
aW9fZnVuY3Rpb25zW10gPSB7Ci0JUEhQX0ZFKGRpb19vcGVuLCAgICAgIE5VTEwpCi0jaWZuZGVmIFBI
UF9XSU4zMgotCVBIUF9GRShkaW9fdHJ1bmNhdGUsICBOVUxMKQotI2VuZGlmCi0JUEhQX0ZFKGRpb19z
dGF0LCAgICAgIE5VTEwpCi0JUEhQX0ZFKGRpb19zZWVrLCAgICAgIE5VTEwpCi0jaWZuZGVmIFBIUF9X
SU4zMgotCVBIUF9GRShkaW9fZmNudGwsICAgICBOVUxMKQotI2VuZGlmCi0JUEhQX0ZFKGRpb19yZWFk
LCAgICAgIE5VTEwpCi0JUEhQX0ZFKGRpb193cml0ZSwgICAgIE5VTEwpCi0JUEhQX0ZFKGRpb19jbG9z
ZSwgICAgIE5VTEwpCi0jaWZuZGVmIFBIUF9XSU4zMgotCVBIUF9GRShkaW9fdGNzZXRhdHRyLCAgICAg
TlVMTCkKLSNlbmRpZgotCXtOVUxMLCBOVUxMLCBOVUxMfQotfTsKK3N0YXRpYyBpbnQgbmV3X3BocF9m
ZChwaHBfZmRfdCAqKmYsIGludCBmZCkKK3sKKwlpZiAoISgqZiA9IG1hbGxvYyhzaXplb2YocGhwX2Zk
X3QpKSkpIHsKKwkJcmV0dXJuIDA7CisJfQorCSgqZiktPmZkID0gZmQ7CisJcmV0dXJuIDE7Cit9Cgot
emVuZF9tb2R1bGVfZW50cnkgZGlvX21vZHVsZV9lbnRyeSA9IHsKLQlTVEFOREFSRF9NT0RVTEVfSEVB
REVSLAotCSJkaW8iLAotCWRpb19mdW5jdGlvbnMsCi0JUEhQX01JTklUKGRpbyksCi0JTlVMTCwKLQlO
VUxMLAotCU5VTEwsCi0JUEhQX01JTkZPKGRpbyksCi0JUEhQX0RJT19WRVJTSU9OLAotCVNUQU5EQVJE
X01PRFVMRV9QUk9QRVJUSUVTCi19OwotCi0jaWZkZWYgQ09NUElMRV9ETF9ESU8KLVpFTkRfR0VUX01P
RFVMRShkaW8pCi0jZW5kaWYKLQogc3RhdGljIHZvaWQgX2Rpb19jbG9zZV9mZCh6ZW5kX3JzcmNfbGlz
dF9lbnRyeSAqcnNyYyBUU1JNTFNfREMpCiB7CiAJcGhwX2ZkX3QgKmYgPSAocGhwX2ZkX3QgKikgcnNy
Yy0+cHRyOwpAQCAtOTQsODIgKzgwLDYgQEAKIAl9CiB9CgotI2RlZmluZSBSRElPQyhjKSBSRUdJU1RF
Ul9MT05HX0NPTlNUQU5UKCNjLCBjLCBDT05TVF9DUyB8IENPTlNUX1BFUlNJU1RFTlQpCi0jZGVmaW5l
IERJT19VTkRFRl9DT05TVCAtMQotCi1QSFBfTUlOSVRfRlVOQ1RJT04oZGlvKQotewotCWxlX2ZkID0g
emVuZF9yZWdpc3Rlcl9saXN0X2Rlc3RydWN0b3JzX2V4KF9kaW9fY2xvc2VfZmQsIE5VTEwsIGxlX2Zk
X25hbWUsIG1vZHVsZV9udW1iZXIpOwotCi0JUkRJT0MoT19SRE9OTFkpOwotCVJESU9DKE9fV1JPTkxZ
KTsKLQlSRElPQyhPX1JEV1IpOwotCVJESU9DKE9fQ1JFQVQpOwotCVJESU9DKE9fRVhDTCk7Ci0JUkRJ
T0MoT19UUlVOQyk7Ci0JUkRJT0MoT19BUFBFTkQpOwotI2lmZGVmIE9fTk9OQkxPQ0sKLQlSRElPQyhP
X05PTkJMT0NLKTsKLSNlbmRpZgotI2lmZGVmIE9fTkRFTEFZCi0JUkRJT0MoT19OREVMQVkpOwotI2Vu
ZGlmCi0jaWZkZWYgT19TWU5DCi0JUkRJT0MoT19TWU5DKTsKLSNlbmRpZgotI2lmZGVmIE9fQVNZTkMK
LQlSRElPQyhPX0FTWU5DKTsKLSNlbmRpZgotI2lmZGVmIE9fTk9DVFRZCi0JUkRJT0MoT19OT0NUVFkp
OwotI2VuZGlmCi0jaWZuZGVmIFBIUF9XSU4zMgotCVJESU9DKFNfSVJXWFUpOwotCVJESU9DKFNfSVJV
U1IpOwotCVJESU9DKFNfSVdVU1IpOwotCVJESU9DKFNfSVhVU1IpOwotCVJESU9DKFNfSVJXWEcpOwot
CVJESU9DKFNfSVJHUlApOwotCVJESU9DKFNfSVdHUlApOwotCVJESU9DKFNfSVhHUlApOwotCVJESU9D
KFNfSVJXWE8pOwotCVJESU9DKFNfSVJPVEgpOwotCVJESU9DKFNfSVdPVEgpOwotCVJESU9DKFNfSVhP
VEgpOwotCVJESU9DKEZfRFVQRkQpOwotCVJESU9DKEZfR0VURkQpOwotCVJESU9DKEZfR0VURkwpOwot
CVJESU9DKEZfU0VURkwpOwotCVJESU9DKEZfR0VUTEspOwotCVJESU9DKEZfU0VUTEspOwotCVJESU9D
KEZfU0VUTEtXKTsKLQlSRElPQyhGX1NFVE9XTik7Ci0JUkRJT0MoRl9HRVRPV04pOwotCVJESU9DKEZf
VU5MQ0spOwotCVJESU9DKEZfUkRMQ0spOwotCVJESU9DKEZfV1JMQ0spOwotI2VuZGlmCi0KLQlyZXR1
cm4gU1VDQ0VTUzsKLX0KLQotUEhQX01JTkZPX0ZVTkNUSU9OKGRpbykKLXsKLQlwaHBfaW5mb19wcmlu
dF90YWJsZV9zdGFydCgpOwotCXBocF9pbmZvX3ByaW50X3RhYmxlX2hlYWRlcigyLCAiZGlvIHN1cHBv
cnQiLCAiZW5hYmxlZCIpOwotCXBocF9pbmZvX3ByaW50X3RhYmxlX3JvdygyLCAidmVyc2lvbiIsIFBI
UF9ESU9fVkVSU0lPTik7Ci0JcGhwX2luZm9fcHJpbnRfdGFibGVfZW5kKCk7Ci19Ci0KLXN0YXRpYyBp
bnQgbmV3X3BocF9mZChwaHBfZmRfdCAqKmYsIGludCBmZCkKLXsKLQlpZiAoISgqZiA9IG1hbGxvYyhz
aXplb2YocGhwX2ZkX3QpKSkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCSgqZiktPmZkID0gZmQ7Ci0JcmV0
dXJuIDE7Ci19Ci0KIC8qIHt7eyBwcm90byByZXNvdXJjZSBkaW9fb3BlbihzdHJpbmcgZmlsZW5hbWUs
IGludCBmbGFnc1ssIGludCBtb2RlXSkKICAgIE9wZW4gYSBuZXcgZmlsZW5hbWUgd2l0aCBzcGVjaWZp
ZWQgcGVybWlzc2lvbnMgb2YgZmxhZ3MgYW5kIGNyZWF0aW9uIHBlcm1pc3Npb25zIG9mIG1vZGUgKi8K
IFBIUF9GVU5DVElPTihkaW9fb3BlbikKQEAgLTIwMCw3ICsxMTAsNyBAQAogCQlSRVRVUk5fRkFMU0U7
CiAJfQoKLQorCiAJaWYgKCFuZXdfcGhwX2ZkKCZmLCBmZCkpIHsKIAkJUkVUVVJOX0ZBTFNFOwogCX0K
QEAgLTQyNSw3ICszMzUsNyBAQAogCQl9CiAJCWNhc2UgRl9HRVRMSzogewogCQkJc3RydWN0IGZsb2Nr
IGxrID0gezB9OwotCisKIAkJCWZjbnRsKGYtPmZkLCBjbWQsICZsayk7CgogCQkJYXJyYXlfaW5pdChy
ZXR1cm5fdmFsdWUpOwpAQCAtNDgwLDcgKzM5MCw3IEBACiAJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVy
cyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAicnoiLCAmcl9mZCwgJmFyZykgPT0gRkFJTFVSRSkg
ewogCQlyZXR1cm47CiAJfQotCisKIAlaRU5EX0ZFVENIX1JFU09VUkNFKGYsIHBocF9mZF90ICosICZy
X2ZkLCAtMSwgbGVfZmRfbmFtZSwgbGVfZmQpOwoKIAlpZiAoWl9UWVBFX1AoYXJnKSAhPSBJU19BUlJB
WSkgewpAQCAtNTA2LDE3ICs0MTYsMTcgQEAKIAkJU3RvcF9CaXRzID0gMTsKIAl9IGVsc2UgewogCQlT
dG9wX0JpdHMgPSBaX0xWQUxfUFAoZWxlbWVudCk7Ci0JfQorCX0KCiAJaWYgKHplbmRfaGFzaF9maW5k
KGZoLCAicGFyaXR5Iiwgc2l6ZW9mKCJwYXJpdHkiKSwgKHZvaWQgKiopICZlbGVtZW50KSA9PSBGQUlM
VVJFKSB7CiAJCVBhcml0eSA9IDA7CiAJfSBlbHNlIHsKIAkJUGFyaXR5ID0gWl9MVkFMX1BQKGVsZW1l
bnQpOwotCX0KKwl9CgogCS8qIGFzc2lnbiB0byBjb3JyZWN0IHZhbHVlcy4uLiAqLwogCXN3aXRjaCAo
QmF1ZF9SYXRlKSAgewotCQljYXNlIDM4NDAwOgorCQljYXNlIDM4NDAwOgogCQkJQkFVRCA9IEIzODQw
MDsKIAkJCWJyZWFrOwogCQljYXNlIDE5MjAwOgpAQCAtNTgxLDcgKzQ5MSw3IEBACiAJCWRlZmF1bHQ6
CiAJCQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJpbnZhbGlkIGRh
dGEgYml0cyAlZCIsIERhdGFfQml0cyk7CiAJCQlSRVRVUk5fRkFMU0U7Ci0JfQorCX0KIAlzd2l0Y2gg
KFN0b3BfQml0cykgewogCQljYXNlIDE6CiAJCQlTVE9QQklUUyA9IDA7CkBAIC01OTIsMjUgKzUwMiwy
NSBAQAogCQlkZWZhdWx0OgogCQkJcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9XQVJO
SU5HLCAiaW52YWxpZCBzdG9wIGJpdHMgJWQiLCBTdG9wX0JpdHMpOwogCQkJUkVUVVJOX0ZBTFNFOwot
CX0KKwl9CgogCXN3aXRjaCAoUGFyaXR5KSB7Ci0JCWNhc2UgMDoKKwkJY2FzZSAwOgogCQkJUEFSSVRZ
T04gPSAwOwogCQkJUEFSSVRZID0gMDsKIAkJCWJyZWFrOwotCQljYXNlIDE6CisJCWNhc2UgMToKIAkJ
CVBBUklUWU9OID0gUEFSRU5COwogCQkJUEFSSVRZID0gUEFST0REOwogCQkJYnJlYWs7Ci0JCWNhc2Ug
MjoKKwkJY2FzZSAyOgogCQkJUEFSSVRZT04gPSBQQVJFTkI7CiAJCQlQQVJJVFkgPSAwOwogCQkJYnJl
YWs7CiAJCWRlZmF1bHQ6CiAJCQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5J
TkcsICJpbnZhbGlkIHBhcml0eSAlZCIsIFBhcml0eSk7CiAJCQlSRVRVUk5fRkFMU0U7Ci0JfQorCX0K
CiAJbWVtc2V0KCZuZXd0aW8sIDAsIHNpemVvZihuZXd0aW8pKTsKIAl0Y2dldGF0dHIoZi0+ZmQsICZu
ZXd0aW8pOwpAQCAtNjM0LDcgKzU0NCw3IEBACiB7CiAJenZhbCAgICAgKnJfZmQ7CiAJcGhwX2ZkX3Qg
KmY7Ci0KKwogCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19D
QywgInIiLCAmcl9mZCkgPT0gRkFJTFVSRSkgewogCQlyZXR1cm47CiAJfQpAQCAtNjQ2LDYgKzU1Niwx
NDAgQEAKIC8qIH19fSAqLwoKIC8qCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgICAgICAgICAgICAgICAg
ICAgRU5EIE9GIERFUFJFQ0FURUQgRlVOQ1RJT05BTElUWSAgICAgICAgICAgICAgICAgICAgfAorICAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0rCisgKi8KKworZnVuY3Rpb25fZW50cnkgZGlvX2Z1bmN0aW9uc1tdID0geworCS8q
IENsYXNzIGZ1bmN0aW9ucy4gKi8KKworCS8qIExlZ2FjeSBmdW5jdGlvbnMgKERlcHJlY2F0ZWQgLSBT
ZWUgZGlvX2xlZ2FjeS5jKSAqLworCVBIUF9GRShkaW9fb3BlbiwgICAgICBOVUxMKQorI2lmbmRlZiBQ
SFBfV0lOMzIKKwlQSFBfRkUoZGlvX3RydW5jYXRlLCAgTlVMTCkKKyNlbmRpZgorCVBIUF9GRShkaW9f
c3RhdCwgICAgICBOVUxMKQorCVBIUF9GRShkaW9fc2VlaywgICAgICBOVUxMKQorI2lmbmRlZiBQSFBf
V0lOMzIKKwlQSFBfRkUoZGlvX2ZjbnRsLCAgICAgTlVMTCkKKyNlbmRpZgorCVBIUF9GRShkaW9fcmVh
ZCwgICAgICBOVUxMKQorCVBIUF9GRShkaW9fd3JpdGUsICAgICBOVUxMKQorCVBIUF9GRShkaW9fY2xv
c2UsICAgICBOVUxMKQorI2lmbmRlZiBQSFBfV0lOMzIKKwlQSFBfRkUoZGlvX3Rjc2V0YXR0ciwgTlVM
TCkKKyNlbmRpZgorCisJLyogU3RyZWFtIGZ1bmN0aW9ucyAqLworCVBIUF9GRShkaW9fcmF3LCBOVUxM
KQorCVBIUF9GRShkaW9fc2VyaWFsLCBOVUxMKQorCisJLyogRW5kIG9mIGZ1bmN0aW9ucyAqLworCXtO
VUxMLCBOVUxMLCBOVUxMfQorfTsKKworemVuZF9tb2R1bGVfZW50cnkgZGlvX21vZHVsZV9lbnRyeSA9
IHsKKwlTVEFOREFSRF9NT0RVTEVfSEVBREVSLAorCSJkaW8iLAorCWRpb19mdW5jdGlvbnMsCisJUEhQ
X01JTklUKGRpbyksCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJUEhQX01JTkZPKGRpbyksCisJUEhQ
X0RJT19WRVJTSU9OLAorCVNUQU5EQVJEX01PRFVMRV9QUk9QRVJUSUVTCit9OworCisjaWZkZWYgQ09N
UElMRV9ETF9ESU8KK1pFTkRfR0VUX01PRFVMRShkaW8pCisjZW5kaWYKKworI2RlZmluZSBSRElPQyhj
KSBSRUdJU1RFUl9MT05HX0NPTlNUQU5UKCNjLCBjLCBDT05TVF9DUyB8IENPTlNUX1BFUlNJU1RFTlQp
CisjZGVmaW5lIERJT19VTkRFRl9DT05TVCAtMQorCisvKiB7e3sgUEhQX01JTklUX0ZVTkNUSU9OCisg
Ki8KK1BIUF9NSU5JVF9GVU5DVElPTihkaW8pCit7CisJbGVfZmQgPSB6ZW5kX3JlZ2lzdGVyX2xpc3Rf
ZGVzdHJ1Y3RvcnNfZXgoX2Rpb19jbG9zZV9mZCwgTlVMTCwgbGVfZmRfbmFtZSwgbW9kdWxlX251bWJl
cik7CisKKwlSRElPQyhPX1JET05MWSk7CisJUkRJT0MoT19XUk9OTFkpOworCVJESU9DKE9fUkRXUik7
CisJUkRJT0MoT19DUkVBVCk7CisJUkRJT0MoT19FWENMKTsKKwlSRElPQyhPX1RSVU5DKTsKKwlSRElP
QyhPX0FQUEVORCk7CisjaWZkZWYgT19OT05CTE9DSworCVJESU9DKE9fTk9OQkxPQ0spOworI2VuZGlm
CisjaWZkZWYgT19OREVMQVkKKwlSRElPQyhPX05ERUxBWSk7CisjZW5kaWYKKyNpZmRlZiBPX1NZTkMK
KwlSRElPQyhPX1NZTkMpOworI2VuZGlmCisjaWZkZWYgT19BU1lOQworCVJESU9DKE9fQVNZTkMpOwor
I2VuZGlmCisjaWZkZWYgT19OT0NUVFkKKwlSRElPQyhPX05PQ1RUWSk7CisjZW5kaWYKKyNpZm5kZWYg
UEhQX1dJTjMyCisJUkRJT0MoU19JUldYVSk7CisJUkRJT0MoU19JUlVTUik7CisJUkRJT0MoU19JV1VT
Uik7CisJUkRJT0MoU19JWFVTUik7CisJUkRJT0MoU19JUldYRyk7CisJUkRJT0MoU19JUkdSUCk7CisJ
UkRJT0MoU19JV0dSUCk7CisJUkRJT0MoU19JWEdSUCk7CisJUkRJT0MoU19JUldYTyk7CisJUkRJT0Mo
U19JUk9USCk7CisJUkRJT0MoU19JV09USCk7CisJUkRJT0MoU19JWE9USCk7CisJUkRJT0MoRl9EVVBG
RCk7CisJUkRJT0MoRl9HRVRGRCk7CisJUkRJT0MoRl9HRVRGTCk7CisJUkRJT0MoRl9TRVRGTCk7CisJ
UkRJT0MoRl9HRVRMSyk7CisJUkRJT0MoRl9TRVRMSyk7CisJUkRJT0MoRl9TRVRMS1cpOworCVJESU9D
KEZfU0VUT1dOKTsKKwlSRElPQyhGX0dFVE9XTik7CisJUkRJT0MoRl9VTkxDSyk7CisJUkRJT0MoRl9S
RExDSyk7CisJUkRJT0MoRl9XUkxDSyk7CisjZW5kaWYKKworCXJldHVybiAocGhwX3JlZ2lzdGVyX3Vy
bF9zdHJlYW1fd3JhcHBlcihESU9fUkFXX1NUUkVBTV9OQU1FLCAmcGhwX2Rpb19yYXdfc3RyZWFtX3dy
YXBwZXIgVFNSTUxTX0NDKSA9PSBTVUNDRVNTICYmCisJCQlwaHBfcmVnaXN0ZXJfdXJsX3N0cmVhbV93
cmFwcGVyKERJT19TRVJJQUxfU1RSRUFNX05BTUUsICZwaHBfZGlvX3NlcmlhbF9zdHJlYW1fd3JhcHBl
ciBUU1JNTFNfQ0MpID09IFNVQ0NFU1MpID8gU1VDQ0VTUyA6IEZBSUxVUkU7Cit9CisvKiB9fX0gKi8K
KworLyoge3t7IFBIUF9NU0hVVERPV05fRlVOQ1RJT04KKyAqLworUEhQX01TSFVURE9XTl9GVU5DVElP
TihkaW8pCit7CisJcmV0dXJuIChwaHBfdW5yZWdpc3Rlcl91cmxfc3RyZWFtX3dyYXBwZXIoRElPX1JB
V19TVFJFQU1fTkFNRSBUU1JNTFNfQ0MpID09IFNVQ0NFU1MgJiYKKwkJCXBocF91bnJlZ2lzdGVyX3Vy
bF9zdHJlYW1fd3JhcHBlcihESU9fU0VSSUFMX1NUUkVBTV9OQU1FIFRTUk1MU19DQykgPT0gU1VDQ0VT
UykgPyBTVUNDRVNTIDogRkFJTFVSRTsKK30KKy8qIH19fSAqLworCisvKiB7e3sgUEhQX01JTkZPX0ZV
TkNUSU9OCisgKi8KK1BIUF9NSU5GT19GVU5DVElPTihkaW8pCit7CisJcGhwX2luZm9fcHJpbnRfdGFi
bGVfc3RhcnQoKTsKKwlwaHBfaW5mb19wcmludF90YWJsZV9oZWFkZXIoMiwgImRpbyBzdXBwb3J0Iiwg
ImVuYWJsZWQiKTsKKwlwaHBfaW5mb19wcmludF90YWJsZV9yb3coMiwgInZlcnNpb24iLCBQSFBfRElP
X1ZFUlNJT04pOworCXBocF9pbmZvX3ByaW50X3RhYmxlX2VuZCgpOworfQorLyogfX19ICovCisKKy8q
CiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBjLWJhc2ljLW9mZnNldDogNAogICogdGFiLXdpZHRoOiA0
CgpBZGRlZDogcGVjbC9kaW8vdHJ1bmsvZGlvX2NvbW1vbi5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3Ry
dW5rL2Rpb19jb21tb24uYwkgICAgICAgICAgICAgICAgICAgICAgICAocmV2IDApCisrKyBwZWNsL2Rp
by90cnVuay9kaW9fY29tbW9uLmMJMjAwOS0xMS0yOSAyMTo1ODoxMiBVVEMgKHJldiAyOTE0NTcpCkBA
IC0wLDAgKzEsNDg5IEBACisvKgorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IFBIUCBWZXJzaW9uIDUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKworICAgfCBDb3B5cmlnaHQgKGMpIDIwMDkgTWVsYW5pZSBSaGlhbm5hIExld2lzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgVGhpcyBzb3Vy
Y2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICAg
fAorICAgfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5T
RSwgYW5kIGlzICAgICAgICB8CisgICB8IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdl
YiBhdCB0aGUgZm9sbG93aW5nIHVybDogICAgICAgICAgIHwKKyAgIHwgaHR0cDovL3d3dy5waHAubmV0
L2xpY2Vuc2UvM18wLnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCBJ
ZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFi
bGUgdG8gICB8CisgICB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNl
IHNlbmQgYSBub3RlIHRvICAgICAgICAgIHwKKyAgIHwgbGljZW5zZUBwaHAubmV0IHNvIHdlIGNhbiBt
YWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
CisgICB8IEF1dGhvcjogTWVsYW5pZSBSaGlhbm5hIExld2lzIDxjeWJlcnNwaWNlQHBocC5uZXQ+ICAg
ICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICovCisKKyNpbmNsdWRlIDxzeXMvc3Rh
dC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNs
dWRlIDxzeXMvdGltZS5oPgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2VuZGlmCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNs
dWRlICJwaHBfZGlvX2NvbW1vbi5oIgorCisvKiB7e3sgZGlvX2NvbnZlcnRfdG9fbG9uZworICogUmV0
dXJucyBhcyBhIGxvbmcsIHRoZSB2YWx1ZSBvZiB0aGUgenZhbCByZWdhcmRsZXNzIG9mIGl0cyB0eXBl
LgorICovCitsb25nIGRpb19jb252ZXJ0X3RvX2xvbmcoenZhbCAqdmFsKSB7CisJenZhbCAqY29weXZh
bDsKKwlsb25nICBsb25ndmFsOworCisJQUxMT0NfSU5JVF9aVkFMKGNvcHl2YWwpOworCSpjb3B5dmFs
ID0gKnZhbDsKKwljb252ZXJ0X3RvX2xvbmcoY29weXZhbCk7CisJbG9uZ3ZhbCA9IFpfTFZBTF9QKGNv
cHl2YWwpOworCXp2YWxfcHRyX2R0b3IoJmNvcHl2YWwpOworCisJcmV0dXJuIGxvbmd2YWw7Cit9Cisv
KiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fbW9kZV90b19mbGFncworICogQ29udmVydCBhbiBm
b3BlbigpIG1vZGUgc3RyaW5nIHRvIG9wZW4oKSBmbGFncworICovCitpbnQgZGlvX3N0cmVhbV9tb2Rl
X3RvX2ZsYWdzKGNvbnN0IGNoYXIgKm1vZGUpIHsKKwlpbnQgIGZsYWdzID0gMCwgY2ggPSAwLCBiaW4g
PSAxOworCisjaWZuZGVmIFBIUF9XSU4zMgorCXN3aXRjaChtb2RlW2NoKytdKSB7CisJCWNhc2UgJ3In
OgorCQkJZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorCQkJZmxhZ3MgPSBPX1RSVU5D
IHwgT19DUkVBVDsKKwkJCWJyZWFrOworCQljYXNlICdhJzoKKwkJCWZsYWdzID0gT19BUFBFTkQgfCBP
X0NSRUFUOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJZmxhZ3MgPSBPX0VYQ0wgfCBPX0NSRUFU
OworCQkJYnJlYWs7CisJfQorCisJaWYgKG1vZGVbY2hdICE9ICcrJykgeworCQliaW4gPSAobW9kZVtj
aCsrXSA9PSAnYicpOworCX0KKworCWlmIChtb2RlW2NoXSA9PSAnKycpIHsKKwkJZmxhZ3MgfD0gT19S
RFdSOworCX0gZWxzZSBpZiAoZmxhZ3MpIHsKKwkJZmxhZ3MgfD0gT19XUk9OTFk7CisJfSBlbHNlIHsK
KwkJZmxhZ3MgfD0gT19SRE9OTFk7CisJfQorCisjaWYgZGVmaW5lZChfT19URVhUKSAmJiBkZWZpbmVk
KE9fQklOQVJZKQorCWlmIChiaW4pIHsKKwkJZmxhZ3MgfD0gT19CSU5BUlk7CisJfSBlbHNlIHsKKwkJ
ZmxhZ3MgfD0gX09fVEVYVDsKKwl9CisjZW5kaWYKKworI2Vsc2UKKwkvKiBUT0RPOiBXaW5kb3dzIHZl
cnNpb24gKi8KKyNlbmRpZgorCisJcmV0dXJuIGZsYWdzOworfQorLyogfX19ICovCisKKyNpZm5kZWYg
UEhQX1dJTjMyCisKKy8qIHt7eyBkaW9fZGF0YV9yYXRlX3RvX2RlZmluZQorICogQ29udmVydHMgYSBu
dW1lcmljIGRhdGEgcmF0ZSB0byBhIHRlcm1pb3MgZGVmaW5lCisgKi8KK2ludCBkaW9fZGF0YV9yYXRl
X3RvX2RlZmluZShsb25nIHJhdGUsIHNwZWVkX3QgKmRlZikgeworCXNwZWVkX3QgdmFsOworCisJc3dp
dGNoIChyYXRlKSB7CisJCWNhc2UgMDoKKwkJCXZhbCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSA1MDoK
KwkJCXZhbCA9IEI1MDsKKwkJCWJyZWFrOworCQljYXNlIDc1OgorCQkJdmFsID0gQjc1OworCQkJYnJl
YWs7CisJCWNhc2UgMTEwOgorCQkJdmFsID0gQjExMDsKKwkJCWJyZWFrOworCQljYXNlIDEzNDoKKwkJ
CXZhbCA9IEIxMzQ7CisJCQlicmVhazsKKwkJY2FzZSAxNTA6CisJCQl2YWwgPSBCMTUwOworCQkJYnJl
YWs7CisJCWNhc2UgMjAwOgorCQkJdmFsID0gQjIwMDsKKwkJCWJyZWFrOworCQljYXNlIDMwMDoKKwkJ
CXZhbCA9IEIzMDA7CisJCQlicmVhazsKKwkJY2FzZSA2MDA6CisJCQl2YWwgPSBCNjAwOworCQkJYnJl
YWs7CisJCWNhc2UgMTIwMDoKKwkJCXZhbCA9IEIxMjAwOworCQkJYnJlYWs7CisJCWNhc2UgMTgwMDoK
KwkJCXZhbCA9IEIxODAwOworCQkJYnJlYWs7CisJCWNhc2UgMjQwMDoKKwkJCXZhbCA9IEIyNDAwOwor
CQkJYnJlYWs7CisJCWNhc2UgNDgwMDoKKwkJCXZhbCA9IEI0ODAwOworCQkJYnJlYWs7CisJCWNhc2Ug
OTYwMDoKKwkJCXZhbCA9IEI5NjAwOworCQkJYnJlYWs7CisJCWNhc2UgMTkyMDA6CisJCQl2YWwgPSBC
MTkyMDA7CisJCQlicmVhazsKKwkJY2FzZSAzODQwMDoKKwkJCXZhbCA9IEIzODQwMDsKKwkJCWJyZWFr
OworI2lmZGVmIEI1NzYwMAorCQljYXNlIDU3NjAwOgorCQkJdmFsID0gQjU3NjAwOworCQkJYnJlYWs7
CisjZW5kaWYKKyNpZmRlZiBCMTE1MjAwCisJCWNhc2UgMTE1MjAwOgorCQkJdmFsID0gQjExNTIwMDsK
KwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQjIzMDQwMAorCQljYXNlIDIzMDQwMDoKKwkJCXZhbCA9
IEIyMzA0MDA7CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIEI0NjA4MDAKKwkJY2FzZSA0NjA4MDA6
CisJCQl2YWwgPSBCNDYwODAwOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXJldHVy
biAwOworCX0KKworCSpkZWYgPSB2YWw7CisJcmV0dXJuIDE7Cit9CisKKy8qIHt7eyBkaW9fZGF0YV9i
aXRzX3RvX2RlZmluZQorICogQ29udmVydHMgYSBudW1iZXIgb2YgZGF0YSBiaXRzIHRvIGEgdGVybWlv
cyBkZWZpbmUKKyAqLworaW50IGRpb19kYXRhX2JpdHNfdG9fZGVmaW5lKGludCBkYXRhX2JpdHMsIGlu
dCAqZGVmKSB7CisJaW50IHZhbDsKKworCXN3aXRjaCAoZGF0YV9iaXRzKSB7CisJCWNhc2UgODoKKwkJ
CXZhbCA9IENTODsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQl2YWwgPSBDUzc7CisJCQlicmVhazsK
KwkJY2FzZSA2OgorCQkJdmFsID0gQ1M2OworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCXZhbCA9IENT
NTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorCisJKmRlZiA9IHZhbDsK
KwlyZXR1cm4gMTsKK30KKy8qIH19fSAqLworCisvKiB7e3sgZGlvX3N0b3BfYml0c190b19kZWZpbmUK
KyAqIENvbnZlcnRzIGEgbnVtYmVyIG9mIHN0b3AgYml0cyB0byBhIHRlcm1pb3MgZGVmaW5lCisgKi8K
K2ludCBkaW9fc3RvcF9iaXRzX3RvX2RlZmluZShpbnQgc3RvcF9iaXRzLCBpbnQgKmRlZikgeworCWlu
dCB2YWw7CisKKwlzd2l0Y2ggKHN0b3BfYml0cykgeworCQljYXNlIDE6CisJCQl2YWwgPSAwOworCQkJ
YnJlYWs7CisJCWNhc2UgMjoKKwkJCXZhbCA9IENTVE9QQjsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor
CQkJcmV0dXJuIDA7CisJfQorCisJKmRlZiA9IHZhbDsKKwlyZXR1cm4gMTsKK30KKy8qIH19fSAqLwor
CisvKiB7e3sgZGlvX3Bhcml0eV90b19kZWZpbmUKKyAqIENvbnZlcnRzIGEgcGFyaXR5IHR5cGUgdG8g
YSB0ZXJtaW9zIGRlZmluZQorICovCitpbnQgZGlvX3Bhcml0eV90b19kZWZpbmUoaW50IHBhcml0eSwg
aW50ICpkZWYpIHsKKwlpbnQgdmFsOworCisJc3dpdGNoIChwYXJpdHkpIHsKKwkJY2FzZSAwOgorCQkJ
dmFsID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl2YWwgPSBQQVJFTkIgfCBQQVJPREQ7CisJ
CQlicmVhazsKKwkJY2FzZSAyOgorCQkJdmFsID0gUEFSRU5COworCQkJYnJlYWs7CisJCWRlZmF1bHQ6
CisJCQlyZXR1cm4gMDsKKwl9CisKKwkqZGVmID0gdmFsOworCXJldHVybiAxOworfQorLyogfX19ICov
CisKKyNlbmRpZgorCisvKiB7e3sgZGlvX2Fzc29jX2FycmF5X2dldF9iYXNpY19vcHRpb25zCisgKiBS
ZXRyaXZlcyB0aGUgYmFzaWMgb3BlbiBvcHRpb24gdmFsdWVzIGZyb20gYW4gYXNzb2NpYXRpdmUgYXJy
YXkKKyAqLworaW50IGRpb19hc3NvY19hcnJheV9nZXRfYmFzaWNfb3B0aW9ucyh6dmFsICpvcHRpb25z
LCBwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhKSB7CisJenZhbCAqKnRtcHp2YWw7CisJSGFzaFRhYmxl
ICpvcHRoYXNoOworCisJb3B0aGFzaCA9IEhBU0hfT0Yob3B0aW9ucyk7CisKKwkvKiBUaGlzIGlzIHRo
ZSBmaWxlIG1vZGUgZmxhZ3MgdXNlZCBieSBvcGVuKCkuICovCisJaWYgKHplbmRfaGFzaF9maW5kKG9w
dGhhc2gsICJwZXJtcyIsIHNpemVvZigicGVybXMiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NF
U1MgJiYgdG1wenZhbCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5wZXJtcyA9IChtb2RlX3QpZGlvX2Nv
bnZlcnRfdG9fbG9uZygqdG1wenZhbCk7CisJCWRhdGEtPmhhc19wZXJtcyA9IDE7CisJfQorCisjaWZk
ZWYgT19OT05CTE9DSworCS8qIFRoaXMgc2V0cyB0aGUgdW5kZXJseWluZyBzdHJlYW0gdG8gYmUgYmxv
Y2tpbmcvbm9uCisJICAgYmxvY2sgKGkuZS4gT19OT05CTE9DSykgKi8KKwlpZiAoemVuZF9oYXNoX2Zp
bmQob3B0aGFzaCwgImlzX2Jsb2NraW5nIiwgc2l6ZW9mKCJpc19ibG9ja2luZyIpLCAodm9pZCAqKikm
dG1wenZhbCkgPT0gU1VDQ0VTUyAmJiB0bXB6dmFsICYmICp0bXB6dmFsKSB7CisJCWRhdGEtPmlzX2Js
b2NraW5nID0gZGlvX2NvbnZlcnRfdG9fbG9uZygqdG1wenZhbCkgPyAxIDogMDsKKwl9CisKKwkvKiBU
aGlzIGlzIHRoZSB0aW1lb3V0IHZhbHVlIGZvciByZWFkcyBpbiBzZWNvbmRzLiAgT25seSBvbmUgb2YK
KwkgICB0aW1lb3V0X3NlY3Mgb3IgdGltZW91dF91c2VjcyBuZWVkIGJlIGRlZmluZWQgdG8gZGVmaW5l
IGEgdGltZW91dC4gKi8KKwlpZiAoemVuZF9oYXNoX2ZpbmQob3B0aGFzaCwgInRpbWVvdXRfc2VjcyIs
IHNpemVvZigidGltZW91dF9zZWNzIiksICh2b2lkICoqKSZ0bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRt
cHp2YWwgJiYgKnRtcHp2YWwpIHsKKwkJZGF0YS0+dGltZW91dC50dl9zZWMgPSBkaW9fY29udmVydF90
b19sb25nKCp0bXB6dmFsKTsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSB0aW1lb3V0IHZhbHVlIGZvciBy
ZWFkcyBpbiBtaWNyb3NlY29uZHMuICBPbmx5IG9uZSBvZgorCSAgIHRpbWVvdXRfc2VjcyBvciB0aW1l
b3V0X3VzZWNzIG5lZWQgYmUgZGVmaW5lZCB0byBkZWZpbmUgYSB0aW1lb3V0LiAqLworCWlmICh6ZW5k
X2hhc2hfZmluZChvcHRoYXNoLCAidGltZW91dF91c2VjcyIsIHNpemVvZigidGltZW91dF91c2VjcyIp
LCAodm9pZCAqKikmdG1wenZhbCkgPT0gU1VDQ0VTUyAmJiB0bXB6dmFsICYmICp0bXB6dmFsKSB7CisJ
CWRhdGEtPnRpbWVvdXQudHZfdXNlYyA9IGRpb19jb252ZXJ0X3RvX2xvbmcoKnRtcHp2YWwpOworCX0K
KworCWRhdGEtPmhhc190aW1lb3V0ID0gKGRhdGEtPnRpbWVvdXQudHZfc2VjIHwgZGF0YS0+dGltZW91
dC50dl91c2VjKSA/IDEgOiAwOworI2VuZGlmCit9CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19hc3Nv
Y19hcnJheV9nZXRfc2VyaWFsX29wdGlvbnMKKyAqIFJldHJpdmVzIHRoZSBzZXJpYWwgb3BlbiBvcHRp
b24gdmFsdWVzIGZyb20gYW4gYXNzb2NpYXRpdmUgYXJyYXkKKyAqLworaW50IGRpb19hc3NvY19hcnJh
eV9nZXRfc2VyaWFsX29wdGlvbnMoenZhbCAqb3B0aW9ucywgcGhwX2Rpb19zdHJlYW1fZGF0YSAqZGF0
YSkgeworCXp2YWwgKip0bXB6dmFsOworCUhhc2hUYWJsZSAqb3B0aGFzaDsKKworCW9wdGhhc2ggPSBI
QVNIX09GKG9wdGlvbnMpOworCisJaWYgKHplbmRfaGFzaF9maW5kKG9wdGhhc2gsICJkYXRhX3JhdGUi
LCBzaXplb2YoImRhdGFfcmF0ZSIpLCAodm9pZCAqKikmdG1wenZhbCkgPT0gU1VDQ0VTUyAmJiB0bXB6
dmFsICYmICp0bXB6dmFsKSB7CisJCWRhdGEtPmRhdGFfcmF0ZSA9IGRpb19jb252ZXJ0X3RvX2xvbmco
KnRtcHp2YWwpOworCX0KKworCWlmICh6ZW5kX2hhc2hfZmluZChvcHRoYXNoLCAiZGF0YV9iaXRzIiwg
c2l6ZW9mKCJkYXRhX2JpdHMiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZh
bCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5kYXRhX2JpdHMgPSAoaW50KWRpb19jb252ZXJ0X3RvX2xv
bmcoKnRtcHp2YWwpOworCX0KKworCWlmICh6ZW5kX2hhc2hfZmluZChvcHRoYXNoLCAic3RvcF9iaXRz
Iiwgc2l6ZW9mKCJzdG9wX2JpdHMiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1w
enZhbCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5zdG9wX2JpdHMgPSAoaW50KWRpb19jb252ZXJ0X3Rv
X2xvbmcoKnRtcHp2YWwpOworCX0KKworCWlmICh6ZW5kX2hhc2hfZmluZChvcHRoYXNoLCAicGFyaXR5
Iiwgc2l6ZW9mKCJwYXJpdHkiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZh
bCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5wYXJpdHkgPSAoaW50KWRpb19jb252ZXJ0X3RvX2xvbmco
KnRtcHp2YWwpOworCX0KKworCWlmICh6ZW5kX2hhc2hfZmluZChvcHRoYXNoLCAicnRzY3RzIiwgc2l6
ZW9mKCJydHNjdHMiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZhbCAmJiAq
dG1wenZhbCkgeworCQlkYXRhLT5ydHNjdHMgPSAoaW50KShkaW9fY29udmVydF90b19sb25nKCp0bXB6
dmFsKSA/IDEgOiAwKTsKKwl9Cit9CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19jb21tb25fd3JpdGUK
KyAqIFdyaXRlcyBjb3VudCBjaGFycyBmcm9tIHRoZSBidWZmZXIgdG8gdGhlIHN0cmVhbSBkZXNjcmli
ZWQgYnkgdGhlIHN0cmVhbSBkYXRhLgorICovCitzaXplX3QgZGlvX2NvbW1vbl93cml0ZShwaHBfZGlv
X3N0cmVhbV9kYXRhICpkYXRhLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgeworCXNpemVf
dCByZXQ7CisKKyNpZm5kZWYgUEhQX1dJTjMyCisJLyogQmxvY2tpbmcgd3JpdGVzIGNhbiBiZSBpbnRl
cnJ1cHRlZCBieSBzaWduYWxzIGV0Yy4gSWYKKwkgKiBpbnRlcnJ1cHRlZCB0cnkgYWdhaW4uIE5vdCBz
dXJlIGFib3V0IG5vbi1ibG9ja2luZworCSAqIHdyaXRlcyBidXQgaXQgZG9lc24ndCBodXJ0IHRvIGNo
ZWNrLiAqLworCWRvIHsKKwkJcmV0ID0gd3JpdGUoZGF0YS0+ZmQsIGJ1ZiwgY291bnQpOworCQlpZiAo
cmV0ID4gMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gd2hpbGUgKGVycm5vID09IEVJTlRSKTsK
KwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKy8qIH19fSAqLworCisjaWZk
ZWYgT19OT05CTE9DSworLyoge3t7IGRpb190aW1ldmFsX3N1YnRyYWN0CisgKiBDYWxjdWxhdGVzIHRo
ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHRpbWV2YWxzIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRo
ZQorICogc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgZGlmZnB0ci4gIFJldHVybnMgLTEgYXMgZXJyb3Ig
aWYgbGF0ZSB0aW1lIGlzCisgKiBlYXJsaWVyIHRoYW4gZWFybHkgdGltZS4KKyAqLworc3RhdGljIGlu
dCBkaW9fdGltZXZhbF9zdWJ0cmFjdChzdHJ1Y3QgdGltZXZhbCAqbGF0ZSwgc3RydWN0IHRpbWV2YWwg
KmVhcmx5LCBzdHJ1Y3QgdGltZXZhbCAqZGlmZikgeworCXN0cnVjdCB0aW1ldmFsICp0bXA7CisKKwlp
ZiAoKGxhdGUtPnR2X3NlYyA8IGVhcmx5LT50dl9zZWMpIHx8CisJCSgobGF0ZS0+dHZfdXNlYyA9PSBl
YXJseS0+dHZfc2VjKSAmJiAobGF0ZS0+dHZfdXNlYyA8IGVhcmx5LT50dl91c2VjKSkpIHsKKwkJcmV0
dXJuIDE7CisJfQorCisJLyogSGFuZGxlIGFueSBjYXJyeS4gIElmIGxhdGVyIHVzZWMgaXMgc21hbGxl
ciB0aGFuIGVhcmxpZXIgdXNlYyBzaW1wbGUKKwkgKiBzdWJ0cmFjdGlvbiB3aWxsIHJlc3VsdCBpbiBu
ZWdhdGl2ZSB2YWx1ZS4gIFNpbmNlIHVzZWMgaGFzIGEgbWF4aW11bQorCSAqIG9mIG9uZSBzZWNvbmQg
YnkgYWRkaW5nIGFub3RoZXIgc2Vjb25kIGJlZm9yZSB0aGUgc3VidHJhY3Rpb24gdGhlCisJICogcmVz
dWx0IHdpbGwgYWx3YXlzIGJlIHBvc2l0aXZlLiAqLworCWlmIChsYXRlLT50dl91c2VjIDwgZWFybHkt
PnR2X3VzZWMpIHsKKwkJbGF0ZS0+dHZfdXNlYyAgKz0gMTAwMDAwMDsKKwkJbGF0ZS0+dHZfc2VjLS07
CisJfQorCisJLyogT25jZSBhZGp1c3RlZCBjYW4ganVzdCBzdWJ0cmFjdCB2YWx1ZXMuICovCisJZGlm
Zi0+dHZfc2VjICA9IGxhdGUtPnR2X3NlYyAgLSBlYXJseS0+dHZfc2VjOworCWRpZmYtPnR2X3VzZWMg
PSBsYXRlLT50dl91c2VjIC0gZWFybHktPnR2X3VzZWM7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgor
CisvKiB7e3sgZGlvX2NvbW1vbl9yZWFkCisgKiBSZWFkcyBjb3VudCBjaGFycyB0byB0aGUgYnVmZmVy
IHRvIHRoZSBzdHJlYW0gZGVzY3JpYmVkIGJ5IHRoZSBzdHJlYW0gZGF0YS4KKyAqLworc2l6ZV90IGRp
b19jb21tb25fcmVhZChwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhLCBjb25zdCBjaGFyICpidWYsIHNp
emVfdCBjb3VudCkgeworCXNpemVfdCByZXQsIHRvdGFsID0gMDsKKwljaGFyICpwdHIgPSAoY2hhciop
YnVmOworCisjaWZuZGVmIFBIUF9XSU4zMgorCXN0cnVjdCB0aW1ldmFsIHRpbWVvdXQsIHRpbWVvdXR0
bXAsIGJlZm9yZSwgYWZ0ZXIsIGRpZmY7CisJZmRfc2V0IHJmZHM7CisKKwlpZiAoIWRhdGEtPmhhc190
aW1lb3V0KSB7CisJCS8qIEJsb2NraW5nIHJlYWRzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSBzaWduYWxz
IGV0Yy4gSWYKKwkJICogaW50ZXJydXB0ZWQgdHJ5IGFnYWluLiBOb3Qgc3VyZSBhYm91dCBub24tYmxv
Y2tpbmcKKwkJICogcmVhZHMgYnV0IGl0IGRvZXNuJ3QgaHVydCB0byBjaGVjay4gKi8KKwkJZG8gewor
CQkJcmV0ID0gcmVhZChkYXRhLT5mZCwgKGNoYXIqKWJ1ZiwgY291bnQpOworCQkJaWYgKHJldCA+IDAp
IHsKKwkJCQlyZXR1cm4gcmV0OworCQkJfSBlbHNlIGlmICghcmV0KSB7CisJCQkJZGF0YS0+ZW5kX29m
X2ZpbGUgPSAxOworCQkJfQorCQl9IHdoaWxlICgoZXJybm8gPT0gRUlOVFIpICYmICFkYXRhLT5lbmRf
b2ZfZmlsZSk7CisJCXJldHVybiAwOworCX0KKyNpZmRlZiBPX05PTkJMT0NLCisJZWxzZSB7CisJCS8q
IFRoZSBpbml0aWFsIHRpbWVvdXQgdmFsdWUgKi8KKwkJdGltZW91dCA9IGRhdGEtPnRpbWVvdXQ7CisK
KwkJZG8geworCQkJLyogVGhlIHN5bWFudGljcyBvZiBzZWxlY3QoKSBhcmUgdGhhdCB5b3UgY2Fubm90
IGd1YXJhbnRlZQorCQkJICogdGhhdCB0aGUgdGltZXZhbCBzdHJ1Y3R1cmUgcGFzc2VkIGluIGhhcyBu
b3QgYmVlbiBjaGFuZ2VkIGJ5CisJCQkgKiB0aGUgc2VsZWN0IGNhbGwuICBTbyB5b3Uga2VlcCBhIGNv
cHkuICovCisJCQl0aW1lb3V0dG1wID0gdGltZW91dDsKKworCQkJLyogVGhlIHRpbWUgYmVmb3JlIHdl
IHdhaXQgZm9yIGRhdGEuICovCisJCQkodm9pZCkgZ2V0dGltZW9mZGF5KCZiZWZvcmUsIE5VTEwpOwor
CisJCQkvKiBXYWl0IGZvciBhbiBldmVudCBvbiBvdXIgZmlsZSBkZXNjcmlwdG9yLiAqLworCQkJRkRf
WkVSTygmcmZkcyk7CisJCQlGRF9TRVQoZGF0YS0+ZmQsICZyZmRzKTsKKworCQkJcmV0ID0gc2VsZWN0
KGRhdGEtPmZkICsgMSwgJnJmZHMsIE5VTEwsIE5VTEwsICZ0aW1lb3V0dG1wKTsKKwkJCS8qIEFuIGVy
cm9yLiAqLworCQkJaWYgKChyZXQgPCAwKSAmJiAoZXJybm8gIT0gRUlOVFIpICYmIChlcnJubyAhPSBF
QUdBSU4pKSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCS8qIFdlIGhhdmUgZGF0YSB0byByZWFk
LiAqLworCQkJaWYgKChyZXQgPiAwKSAmJiBGRF9JU1NFVChkYXRhLT5mZCwgJnJmZHMpKSB7CisJCQkJ
cmV0ID0gcmVhZChkYXRhLT5mZCwgcHRyLCBjb3VudCk7CisJCQkJLyogQW5vdGhlciBlcnJvciAqLwor
CQkJCWlmICgocmV0IDwgMCkgJiYgKGVycm5vICE9IEVJTlRSKSAmJiAoZXJybm8gIT0gRUFHQUlOKSkg
eworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKKwkJCQlpZiAocmV0ID4gMCkgeworCQkJCQkvKiBHb3Qg
ZGF0YSwgYWRkIGl0IHRvIHRoZSBidWZmZXIuICovCisJCQkJCXB0ciAgICs9IHJldDsKKwkJCQkJdG90
YWwgKz0gcmV0OworCQkJCQljb3VudCAtPSByZXQ7CisJCQkJfSBlbHNlIGlmICghcmV0KSB7CisJCQkJ
CS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZSBob3cgY2FuIHdlIGhhdmUKKwkJCQkJICog
ZGF0YSB0byByZWFkIGF0IGFuIGVuZCBvZiBmaWxlLCBidXQgc3RpbGwKKwkJCQkJICoganVzdCBpbiBj
YXNlISAqLworCQkJCQlkYXRhLT5lbmRfb2ZfZmlsZSA9IDE7CisJCQkJfQorCQkJfQorCisJCQkvKiBJ
ZiBub3QgdGltZWQgb3V0IGFuZCBub3QgZW5kIG9mIGZpbGUgY2FsY3VsYXRlIGhvdyBsb25nCisJCQkg
KiBpdCB0b29rIHVzIGFuZCBsb29wIGlmIHdlIHN0aWxsIGhhdmUgdGltZSBvdXQgdGltZSBsZWZ0LiAq
LworCQkJaWYgKHJldCkgeworCQkJCSh2b2lkKSBnZXR0aW1lb2ZkYXkoJmFmdGVyLCBOVUxMKTsKKwor
CQkJCS8qIERpZmYgdGhlIHRpbWV2YWxzICovCisJCQkJKHZvaWQpIGRpb190aW1ldmFsX3N1YnRyYWN0
KCZhZnRlciwgJmJlZm9yZSwgJmRpZmYpOworCisJCQkJLyogTm93IGFkanVzdCB0aGUgdGltZW91dC4g
IElmIGl0IGVycm9ycyB3ZSd2ZSBydW4gb3V0CisJCQkJICogb2YgdGltZS4gKi8KKwkJCQlpZiAoZGlv
X3RpbWV2YWxfc3VidHJhY3QoJnRpbWVvdXQsICZkaWZmLCAmdGltZW91dCkpIHsKKwkJCQkJcmV0ID0g
MDsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKHJldCk7IC8qIFVudGlsIHRpbWUgb3V0IG9yIGVuZCBv
ZiBmaWxlLiAqLworCisJCXJldHVybiB0b3RhbDsKKwl9CisjZW5kaWYKKyNlbHNlCisJcmV0dXJuIDA7
CisjZW5kaWYKK30KKy8qIH19fSAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNp
Yy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogRW5kOgorICogdmltNjAwOiBmZG09bWFya2Vy
CisgKiB2aW06IHN3PTQgdHM9NCBub2V0CisgKi8KKwoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL2Rpb19z
dHJlYW1fd3JhcHBlcnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL2Rpby90cnVuay9kaW9fc3RyZWFtX3dyYXBw
ZXJzLmMJICAgICAgICAgICAgICAgICAgICAgICAgKHJldiAwKQorKysgcGVjbC9kaW8vdHJ1bmsvZGlv
X3N0cmVhbV93cmFwcGVycy5jCTIwMDktMTEtMjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAt
MCwwICsxLDcxMiBAQAorLyoKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBQSFAgVmVyc2lvbiA1ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSsKKyAgIHwgQ29weXJpZ2h0IChjKSAyMDA5IE1lbGFuaWUgUmhpYW5uYSBMZXdpcyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IFRoaXMgc291cmNl
IGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDMuMCBvZiB0aGUgUEhQIGxpY2Vuc2UsICAgICAgIHwK
KyAgIHwgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0Us
IGFuZCBpcyAgICAgICAgfAorICAgfCBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIg
YXQgdGhlIGZvbGxvd2luZyB1cmw6ICAgICAgICAgICB8CisgICB8IGh0dHA6Ly93d3cucGhwLm5ldC9s
aWNlbnNlLzNfMC50eHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgSWYg
eW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIFBIUCBsaWNlbnNlIGFuZCBhcmUgdW5hYmxl
IHRvICAgfAorICAgfCBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBz
ZW5kIGEgbm90ZSB0byAgICAgICAgICB8CisgICB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFp
bCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor
ICAgfCBBdXRob3I6IE1lbGFuaWUgUmhpYW5uYSBMZXdpcyA8Y3liZXJzcGljZUBwaHAubmV0PiAgICAg
ICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdf
SAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJwaHAuaCIKKyNpbmNsdWRl
ICJleHQvc3RhbmRhcmQvdXJsLmgiCisKKyNpbmNsdWRlICJwaHBfZGlvLmgiCisjaW5jbHVkZSAicGhw
X2Rpb19jb21tb24uaCIKKyNpbmNsdWRlICJwaHBfZGlvX3N0cmVhbV93cmFwcGVycy5oIgorCisjaWZk
ZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxm
Y250bC5oPgorI2lmbmRlZiBQSFBfV0lOMzIKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjZW5kaWYKKwor
Lyoge3t7IGRpb19zdHJlYW1fY29udGV4dF9nZXRfcmF3X29wdGlvbnMKKyAqIEV4dHJhY3RzIHRoZSBv
cHRpb24gdmFsdWVzIGZvciBkaW8ucmF3IG1vZGUgZnJvbSBhIGNvbnRleHQKKyAqLworc3RhdGljIHZv
aWQgZGlvX3N0cmVhbV9jb250ZXh0X2dldF9iYXNpY19vcHRpb25zKHBocF9zdHJlYW1fY29udGV4dCAq
Y29udGV4dCwgcGhwX2Rpb19zdHJlYW1fZGF0YSAqZGF0YSkgeworCXp2YWwgKip0bXB6dmFsOworCisJ
LyogVGhpcyBpcyB0aGUgZmlsZSBtb2RlIGZsYWdzIHVzZWQgYnkgb3BlbigpLiAqLworCWlmIChwaHBf
c3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbihjb250ZXh0LCAiZGlvIiwgInBlcm1zIiwgJnRtcHp2YWwp
ID09IFNVQ0NFU1MgJiYgdG1wenZhbCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5wZXJtcyA9IChtb2Rl
X3QpZGlvX2NvbnZlcnRfdG9fbG9uZygqdG1wenZhbCk7CisJCWRhdGEtPmhhc19wZXJtcyA9IDE7CisJ
fQorCisjaWZkZWYgT19OT05CTE9DSworCS8qIFRoaXMgc2V0cyB0aGUgdW5kZXJseWluZyBzdHJlYW0g
dG8gYmUgYmxvY2tpbmcvbm9uCisJICAgYmxvY2sgKGkuZS4gT19OT05CTE9DSykgKi8KKwlpZiAocGhw
X3N0cmVhbV9jb250ZXh0X2dldF9vcHRpb24oY29udGV4dCwgImRpbyIsICJpc19ibG9ja2luZyIsICZ0
bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRtcHp2YWwgJiYgKnRtcHp2YWwpIHsKKwkJZGF0YS0+aXNfYmxv
Y2tpbmcgPSBkaW9fY29udmVydF90b19sb25nKCp0bXB6dmFsKSA/IDEgOiAwOworCX0KKworCS8qIFRo
aXMgaXMgdGhlIHRpbWVvdXQgdmFsdWUgZm9yIHJlYWRzIGluIHNlY29uZHMuICBPbmx5IG9uZSBvZgor
CSAgIHRpbWVvdXRfc2VjcyBvciB0aW1lb3V0X3VzZWNzIG5lZWQgYmUgZGVmaW5lZCB0byBkZWZpbmUg
YSB0aW1lb3V0LiAqLworCWlmIChwaHBfc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbihjb250ZXh0LCAi
ZGlvIiwgInRpbWVvdXRfc2VjcyIsICZ0bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRtcHp2YWwgJiYgKnRt
cHp2YWwpIHsKKwkJZGF0YS0+dGltZW91dC50dl9zZWMgPSBkaW9fY29udmVydF90b19sb25nKCp0bXB6
dmFsKTsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSB0aW1lb3V0IHZhbHVlIGZvciByZWFkcyBpbiBtaWNy
b3NlY29uZHMuICBPbmx5IG9uZSBvZgorCSAgIHRpbWVvdXRfc2VjcyBvciB0aW1lb3V0X3VzZWNzIG5l
ZWQgYmUgZGVmaW5lZCB0byBkZWZpbmUgYSB0aW1lb3V0LiAqLworCWlmIChwaHBfc3RyZWFtX2NvbnRl
eHRfZ2V0X29wdGlvbihjb250ZXh0LCAiZGlvIiwgInRpbWVvdXRfdXNlY3MiLCAmdG1wenZhbCkgPT0g
U1VDQ0VTUyAmJiB0bXB6dmFsICYmICp0bXB6dmFsKSB7CisJCWRhdGEtPnRpbWVvdXQudHZfdXNlYyA9
IGRpb19jb252ZXJ0X3RvX2xvbmcoKnRtcHp2YWwpOworCX0KKworCWRhdGEtPmhhc190aW1lb3V0ID0g
KGRhdGEtPnRpbWVvdXQudHZfc2VjIHwgZGF0YS0+dGltZW91dC50dl91c2VjKSA/IDEgOiAwOworI2Vu
ZGlmCit9CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fY29udGV4dF9nZXRfc2VyaWFsX29w
dGlvbnMKKyAqIEV4dHJhY3RzIHRoZSBvcHRpb24gdmFsdWVzIGZvciBkaW8uc2VyaWFsIG1vZGUgZnJv
bSBhIGNvbnRleHQKKyAqLworc3RhdGljIHZvaWQgZGlvX3N0cmVhbV9jb250ZXh0X2dldF9zZXJpYWxf
b3B0aW9ucyhwaHBfc3RyZWFtX2NvbnRleHQgKmNvbnRleHQsIHBocF9kaW9fc3RyZWFtX2RhdGEgKmRh
dGEpIHsKKwl6dmFsICoqdG1wenZhbDsKKworCWlmIChwaHBfc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlv
bihjb250ZXh0LCAiZGlvIiwgImRhdGFfcmF0ZSIsICZ0bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRtcHp2
YWwgJiYgKnRtcHp2YWwpIHsKKwkJZGF0YS0+ZGF0YV9yYXRlID0gZGlvX2NvbnZlcnRfdG9fbG9uZygq
dG1wenZhbCk7CisJfQorCisJaWYgKHBocF9zdHJlYW1fY29udGV4dF9nZXRfb3B0aW9uKGNvbnRleHQs
ICJkaW8iLCAiZGF0YV9iaXRzIiwgJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZhbCAmJiAqdG1w
enZhbCkgeworCQlkYXRhLT5kYXRhX2JpdHMgPSAoaW50KWRpb19jb252ZXJ0X3RvX2xvbmcoKnRtcHp2
YWwpOworCX0KKworCWlmIChwaHBfc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbihjb250ZXh0LCAiZGlv
IiwgInN0b3BfYml0cyIsICZ0bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRtcHp2YWwgJiYgKnRtcHp2YWwp
IHsKKwkJZGF0YS0+c3RvcF9iaXRzID0gKGludClkaW9fY29udmVydF90b19sb25nKCp0bXB6dmFsKTsK
Kwl9CisKKwlpZiAocGhwX3N0cmVhbV9jb250ZXh0X2dldF9vcHRpb24oY29udGV4dCwgImRpbyIsICJw
YXJpdHkiLCAmdG1wenZhbCkgPT0gU1VDQ0VTUyAmJiB0bXB6dmFsICYmICp0bXB6dmFsKSB7CisJCWRh
dGEtPnBhcml0eSA9IChpbnQpZGlvX2NvbnZlcnRfdG9fbG9uZygqdG1wenZhbCk7CisJfQorCisJaWYg
KHBocF9zdHJlYW1fY29udGV4dF9nZXRfb3B0aW9uKGNvbnRleHQsICJkaW8iLCAicnRzY3RzIiwgJnRt
cHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZhbCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5ydHNjdHMg
PSAoaW50KShkaW9fY29udmVydF90b19sb25nKCp0bXB6dmFsKSA/IDEgOiAwKTsKKwl9Cit9CisvKiB9
fX0gKi8KKworLyoKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBSYXcgc3RyZWFtIGhhbmRsaW5nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsKKyovCisKKy8qIHt7eyBkaW9fc3RyZWFtX3dyaXRlCisgKiBXcml0ZSB0byB0aGUgc3RyZWFtCisg
Ki8KK3N0YXRpYyBzaXplX3QgZGlvX3N0cmVhbV93cml0ZShwaHBfc3RyZWFtICpzdHJlYW0sIGNvbnN0
IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50IFRTUk1MU19EQykKK3sKKwlyZXR1cm4gZGlvX2NvbW1vbl93
cml0ZSgocGhwX2Rpb19zdHJlYW1fZGF0YSopc3RyZWFtLT5hYnN0cmFjdCwgYnVmLCBjb3VudCk7Cit9
CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fcmVhZAorICogUmVhZCBmcm9tIHRoZSBzdHJl
YW0KKyAqLworc3RhdGljIHNpemVfdCBkaW9fc3RyZWFtX3JlYWQocGhwX3N0cmVhbSAqc3RyZWFtLCBj
aGFyICpidWYsIHNpemVfdCBjb3VudCBUU1JNTFNfREMpCit7CisJcmV0dXJuIGRpb19jb21tb25fcmVh
ZCgocGhwX2Rpb19zdHJlYW1fZGF0YSopc3RyZWFtLT5hYnN0cmFjdCwgYnVmLCBjb3VudCk7Cit9Cisv
KiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fY2xvc2UKKyAqIENsb3NlIHRoZSBzdHJlYW0KKyAq
Lworc3RhdGljIGludCBkaW9fc3RyZWFtX2Nsb3NlKHBocF9zdHJlYW0gKnN0cmVhbSwgaW50IGNsb3Nl
X2hhbmRsZSBUU1JNTFNfREMpCit7CisJcGhwX2Rpb19zdHJlYW1fZGF0YSAqYWJzdHJhY3QgPSAocGhw
X2Rpb19zdHJlYW1fZGF0YSopc3RyZWFtLT5hYnN0cmFjdDsKKworCWlmIChjbG9zZShhYnN0cmFjdC0+
ZmQpIDwgMCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwllZnJlZShhYnN0cmFjdCk7CisJcmV0dXJuIDE7
Cit9CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fZmx1c2gKKyAqIEZsdXNoIHRoZSBzdHJl
YW0uICBGb3IgcmF3IHN0cmVhbXMgdGhpcyBkb2VzIG5vdGhpbmcuCisgKi8KK3N0YXRpYyBpbnQgZGlv
X3N0cmVhbV9mbHVzaChwaHBfc3RyZWFtICpzdHJlYW0gVFNSTUxTX0RDKQoreworCXJldHVybiAxOwor
fQorLyogfX19ICovCisKKy8qIHt7eyBkaW9fc3RyZWFtX3NldF9vcHRpb24KKyAqIFNldCB0aGUgc3Ry
ZWFtIG9wdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgZGlvX3N0cmVhbV9zZXRfb3B0aW9uKHBocF9zdHJl
YW0gKnN0cmVhbSwgaW50IG9wdGlvbiwgaW50IHZhbHVlLCB2b2lkICpwdHJwYXJhbSBUU1JNTFNfREMp
Cit7CisJcGhwX2Rpb19zdHJlYW1fZGF0YSAqYWJzdHJhY3QgPSAocGhwX2Rpb19zdHJlYW1fZGF0YSop
c3RyZWFtLT5hYnN0cmFjdDsKKwlpbnQgb2xkX2lzX2Jsb2NraW5nOworCWludCBmbGFnczsKKworCXN3
aXRjaCAob3B0aW9uKSB7CisKKyNpZmRlZiBPX05PTkJMT0NLCisJCWNhc2UgUEhQX1NUUkVBTV9PUFRJ
T05fUkVBRF9USU1FT1VUOgorCQkJaWYgKHB0cnBhcmFtKSB7CisJCQkJc3RydWN0IHRpbWV2YWwgKnR2
ID0gKHN0cnVjdCB0aW1ldmFsKilwdHJwYXJhbTsKKworCQkJCWZsYWdzID0gZmNudGwoYWJzdHJhY3Qt
PmZkLCBGX0dFVEZMLCAwKTsKKworCQkJCS8qIEEgdGltZW91dCBvZiB6ZXJvIHNlY29uZHMgYW5kIHpl
cm8gbWljcm8gc2Vjb25kcyBkaXNhYmxlcworCQkJCSAgIGFueSBleGlzdGluZyB0aW1lb3V0LiAqLwor
CQkJCWlmICh0di0+dHZfc2VjIHx8IHR2LT50dl91c2VjKSB7CisJCQkJCWFic3RyYWN0LT50aW1lb3V0
LnR2X3NlYyA9IHR2LT50dl9zZWM7CisJCQkJCWFic3RyYWN0LT50aW1lb3V0LnR2X3VzZWMgPSB0di0+
dHZfdXNlYzsKKwkJCQkJYWJzdHJhY3QtPmhhc190aW1lb3V0ID0gLTE7CisJCQkJCSh2b2lkKSBmbmN0
bChhYnN0cmFjdC0+ZmQsIEZfU0VURkwsIGZsYWdzICYgfk9fTk9OQkxPQ0spOworCQkJCX0gZWxzZSB7
CisJCQkJCWFic3RyYWN0LT50aW1lb3V0LnR2X3NlYyA9IDA7CisJCQkJCWFic3RyYWN0LT50aW1lb3V0
LnR2X3VzZWMgPSAwOworCQkJCQlhYnN0cmFjdC0+aGFzX3RpbWVvdXQgPSAwOworCQkJCQkodm9pZCkg
Zm5jdGwoYWJzdHJhY3QtPmZkLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spOworCQkJCX0KKwkJ
CX0gZWxzZSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFBIUF9TVFJF
QU1fT1BUSU9OX0JMT0NLSU5HOgorCQkJZmxhZ3MgPSBmY250bChhYnN0cmFjdC0+ZmQsIEZfR0VURkws
IDApOworCQkJaWYgKHZhbHVlKSB7CisJCQkJZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7CisJCQl9IGVsc2Ug
eworCQkJCWZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCQl9CisJCQkodm9pZCkgZmNudGwoYWJzdHJhY3Qt
PmZkLCBGX1NFVEZMLCBmbGFncyk7CisKKwkJCW9sZF9pc19ibG9ja2luZyA9IGFic3RyYWN0LT5pc19i
bG9ja2luZzsKKwkJCWFic3RyYWN0LT5pc19ibG9ja2luZyA9IHZhbHVlOworCQkJcmV0dXJuIG9sZF9p
c19ibG9ja2luZzsKKyNlbmRpZgorCisjaWYgUEhQX01BSk9SX1ZFUlNJT04gPj0gNQorCQljYXNlIFBI
UF9TVFJFQU1fT1BUSU9OX0NIRUNLX0xJVkVORVNTOgorCQkJc3RyZWFtLT5lb2YgPSBhYnN0cmFjdC0+
ZW5kX29mX2ZpbGU7CisJCQlyZXR1cm4gc3RyZWFtLT5lb2Y7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4g
MTsKK30KKy8qIH19fSAqLworCitwaHBfc3RyZWFtX29wcyBkaW9fcmF3X3N0cmVhbV9vcHMgPSB7CisJ
ZGlvX3N0cmVhbV93cml0ZSwKKwlkaW9fc3RyZWFtX3JlYWQsCisJZGlvX3N0cmVhbV9jbG9zZSwKKwlk
aW9fc3RyZWFtX2ZsdXNoLAorCSJkaW8iLAorCU5VTEwsIC8qIHNlZWsgKi8KKwlOVUxMLCAvKiBjYXN0
ICovCisJTlVMTCwgLyogc3RhdCAqLworCWRpb19zdHJlYW1fc2V0X29wdGlvbiwKK307CisKKy8qIHt7
eyBkaW9fcmF3X29wZW5fc3RyZWFtCisgKiBPcGVucyB0aGUgcGhwX3N0cmVhbS4KKyAqLworc3RhdGlj
IHBocF9zdHJlYW0gKmRpb19yYXdfb3Blbl9zdHJlYW0oY2hhciAqZmlsZW5hbWUsIGNoYXIgKm1vZGUs
IHBocF9kaW9fc3RyZWFtX2RhdGEgKmRhdGEpIHsKKwlkYXRhLT5mbGFncyA9IGRpb19zdHJlYW1fbW9k
ZV90b19mbGFncyhtb2RlKTsKKworI2lmZGVmIE9fTk9OQkxPQ0sKKwlpZiAoIWRhdGEtPmlzX2Jsb2Nr
aW5nIHx8IGRhdGEtPmhhc190aW1lb3V0KSB7CisJCWRhdGEtPmZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJ
fQorI2VuZGlmCisKKwkvKiBPcGVuIHRoZSBmaWxlIGFuZCBoYW5kbGUgYW55IGVycm9ycy4gKi8KKwlp
ZiAoZGF0YS0+aGFzX3Blcm1zKSB7CisJCWRhdGEtPmZkID0gb3BlbihmaWxlbmFtZSwgZGF0YS0+Zmxh
Z3MsIGRhdGEtPnBlcm1zKTsKKwl9IGVsc2UgeworCQlkYXRhLT5mZCA9IG9wZW4oZmlsZW5hbWUsIGRh
dGEtPmZsYWdzKTsKKwl9CisKKwlpZiAoZGF0YS0+ZmQgPCAwKSB7CisJCXN3aXRjaCAoZXJybm8pIHsK
KwkJCWNhc2UgRUVYSVNUOgorCQkJCXBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FS
TklORywgIkZpbGUgZXhpc3RzISIpOworCQkJCXJldHVybiBOVUxMOworCQkJZGVmYXVsdDoKKwkJCQly
ZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBwaHBfc3RyZWFtX2FsbG9jKCZkaW9fcmF3X3N0
cmVhbV9vcHMsIGRhdGEsIDAsIG1vZGUpOworfQorLyogfX19ICovCisKKy8qIHt7eyBkaW9fcmF3X2Zv
cGVuX3dyYXBwZXIKKyAqIGZvcGVuIGZvciB0aGUgZGlvLnJhdyBzdHJlYW0uCisgKi8KK3N0YXRpYyBw
aHBfc3RyZWFtICpkaW9fcmF3X2ZvcGVuX3dyYXBwZXIocGhwX3N0cmVhbV93cmFwcGVyICp3cmFwcGVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwYXRoLCBjaGFy
ICptb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9u
cywgY2hhciAqKm9wZW5lZF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwaHBfc3RyZWFtX2NvbnRleHQgKmNvbnRleHQgU1RSRUFNU19EQyBUU1JNTFNfREMpIHsKKwlw
aHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhOworCXBocF9zdHJlYW0gKnN0cmVhbTsKKwljaGFyICpmaWxl
bmFtZTsKKworCS8qIENoZWNrIGl0IHdhcyBhY3R1YWxseSBmb3IgdXMgKG5vdCBhIGNvcnJ1cHRlZCBm
dW5jdGlvbiBwb2ludGVyCisJICAgc29tZXdoZXJlISkuICovCisJaWYgKHN0cm5jbXAocGF0aCwgRElP
X1JBV19TVFJFQU1fUFJPVE9DT0wsIHNpemVvZihESU9fUkFXX1NUUkVBTV9QUk9UT0NPTCkgLSAxKSkg
eworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBHZXQgdGhlIGFjdHVhbGx5IGZpbGUgc3lzdGVtIG5h
bWUvcGF0aC4gKi8KKwlmaWxlbmFtZSA9IHBhdGggKyBzaXplb2YoRElPX1JBV19TVFJFQU1fUFJPVE9D
T0wpIC0gMTsKKworCS8qIENoZWNrIHdlIGNhbiBhY3R1YWxseSBhY2Nlc3MgaXQuICovCisJaWYgKHBo
cF9jaGVja19vcGVuX2Jhc2VkaXIoZmlsZW5hbWUgVFNSTUxTX0NDKSB8fAorCQkoUEcoc2FmZV9tb2Rl
KSAmJiAhcGhwX2NoZWNrdWlkKGZpbGVuYW1lLCBtb2RlLCBDSEVDS1VJRF9DSEVDS19NT0RFX1BBUkFN
KSkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogSW5pdGlhbGlzZSB0aGUgc3RyZWFtIGRhdGEg
c3RydWN0dXJlLiAqLworCWRhdGEgPSBlbWFsbG9jKHNpemVvZihwaHBfZGlvX3N0cmVhbV9kYXRhKSk7
CisJZGF0YS0+aGFzX3Blcm1zID0gMDsKKwlkYXRhLT5wZXJtcyA9IDA7CisJZGF0YS0+ZW5kX29mX2Zp
bGUgPSAwOworI2lmZGVmIE9fTk9OQkxPQ0s7CisJZGF0YS0+aXNfYmxvY2tpbmcgPSAxOworCWRhdGEt
Pmhhc190aW1lb3V0ID0gMDsKKwlkYXRhLT50aW1lb3V0LnR2X3NlYyA9IDA7CisJZGF0YS0+dGltZW91
dC50dl91c2VjID0gMDsKKyNlbmRpZgorCisJLyogUGFyc2UgdGhlIGNvbnRleHQuICovCisJaWYgKGNv
bnRleHQpIHsKKwkJZGlvX3N0cmVhbV9jb250ZXh0X2dldF9iYXNpY19vcHRpb25zKGNvbnRleHQsIGRh
dGEpOworCX0KKworCS8qIFRyeSBhbmQgb3BlbiBhIHJhdyBzdHJlYW0uICovCisJc3RyZWFtID0gZGlv
X3Jhd19vcGVuX3N0cmVhbShmaWxlbmFtZSwgbW9kZSwgZGF0YSk7CisJaWYgKCFzdHJlYW0pIHsKKwkJ
ZWZyZWUoZGF0YSk7CisJfQorCisJcmV0dXJuIHN0cmVhbTsKK30KKy8qIH19fSAqLworCitzdGF0aWMg
cGhwX3N0cmVhbV93cmFwcGVyX29wcyBkaW9fcmF3X3N0cmVhbV93b3BzID0geworCWRpb19yYXdfZm9w
ZW5fd3JhcHBlciwKKwlOVUxMLCAvKiBzdHJlYW1fY2xvc2UgKi8KKwlOVUxMLCAvKiBzdGF0ICovCisJ
TlVMTCwgLyogc3RhdF91cmwgKi8KKwlOVUxMLCAvKiBvcGVuZGlyICovCisJRElPX1JBV19TVFJFQU1f
TkFNRQorfTsKKworcGhwX3N0cmVhbV93cmFwcGVyIHBocF9kaW9fcmF3X3N0cmVhbV93cmFwcGVyID0g
eworCSZkaW9fcmF3X3N0cmVhbV93b3BzLAorCU5VTEwsCisJMAorfTsKKworLyoge3t7IHByb3RvIGRp
b19yYXcoc3RyaW5nIGZpbGVuYW1lLCBzdHJpbmcgbW9kZVssIGFycmF5IG9wdGlvbnNdKQorICogT3Bl
bnMgYSByYXcgZGlyZWN0IElPIHN0cmVhbS4KKyAqLworUEhQX0ZVTkNUSU9OKGRpb19yYXcpIHsKKwl6
dmFsICpvcHRpb25zID0gTlVMTDsKKwlwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhOworCXBocF9zdHJl
YW0gKnN0cmVhbTsKKwlIYXNoVGFibGUgKm9wdGhhc2g7CisKKwljaGFyICpmaWxlbmFtZTsKKwlpbnQg
ICBmaWxlbmFtZV9sZW47CisJY2hhciAqbW9kZTsKKwlpbnQgICBtb2RlX2xlbjsKKworCWlmICh6ZW5k
X3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgInNzfHoiLCAmZmlsZW5h
bWUsICZmaWxlbmFtZV9sZW4sICZtb2RlLCAmbW9kZV9sZW4sICZvcHRpb25zKSA9PSBGQUlMVVJFKSB7
CisJCVJFVFVSTl9GQUxTRTsKKwl9CisKKwkvKiBDaGVjayB0aGUgdGhpcmQgYXJndW1lbnQgaXMgYW4g
YXJyYXkuICovCisJaWYgKG9wdGlvbnMgJiYgKFpfVFlQRV9QKG9wdGlvbnMpICE9IElTX0FSUkFZKSkg
eworCQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsImRpb19yYXcsIHRo
ZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkgb2Ygb3B0aW9ucyIpOworCQlSRVRVUk5f
RkFMU0U7CisJfQorCisJLyogQ2hlY2sgd2UgY2FuIGFjdHVhbGx5IGFjY2VzcyB0aGUgZmlsZS4gKi8K
KwlpZiAocGhwX2NoZWNrX29wZW5fYmFzZWRpcihmaWxlbmFtZSBUU1JNTFNfQ0MpIHx8CisJCShQRyhz
YWZlX21vZGUpICYmICFwaHBfY2hlY2t1aWQoZmlsZW5hbWUsIG1vZGUsIENIRUNLVUlEX0NIRUNLX01P
REVfUEFSQU0pKSkgeworCQlSRVRVUk5fRkFMU0U7CisJfQorCisJLyogSW5pdGlhbGlzZSB0aGUgc3Ry
ZWFtIGRhdGEgc3RydWN0dXJlLiAqLworCWRhdGEgPSBlbWFsbG9jKHNpemVvZihwaHBfZGlvX3N0cmVh
bV9kYXRhKSk7CisJZGF0YS0+aGFzX3Blcm1zID0gMDsKKwlkYXRhLT5wZXJtcyA9IDA7CisJZGF0YS0+
ZW5kX29mX2ZpbGUgPSAwOworI2lmZGVmIE9fTk9OQkxPQ0sKKwlkYXRhLT5pc19ibG9ja2luZyA9IDE7
CisJZGF0YS0+aGFzX3RpbWVvdXQgPSAwOworCWRhdGEtPnRpbWVvdXQudHZfc2VjID0gMDsKKwlkYXRh
LT50aW1lb3V0LnR2X3VzZWMgPSAwOworI2VuZGlmCisKKwlpZiAob3B0aW9ucykgeworCQlkaW9fYXNz
b2NfYXJyYXlfZ2V0X2Jhc2ljX29wdGlvbnMob3B0aW9ucywgZGF0YSk7CisJfQorCisJLyogVHJ5IGFu
ZCBvcGVuIGEgcmF3IHN0cmVhbS4gKi8KKwlzdHJlYW0gPSBkaW9fcmF3X29wZW5fc3RyZWFtKGZpbGVu
YW1lLCBtb2RlLCBkYXRhKTsKKwlpZiAoIXN0cmVhbSkgeworCQllZnJlZShkYXRhKTsKKwkJUkVUVVJO
X0ZBTFNFOworCX0KKworCXBocF9zdHJlYW1fdG9fenZhbChzdHJlYW0sIHJldHVybl92YWx1ZSk7Cit9
CisvKiB9fX0gKi8KKworLyoKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBTZXJpYWwgc3RyZWFtIGhhbmRs
aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSsKKyovCisKKy8qIHt7eyBkaW9fc3RyZWFtX2ZsdXNoCisgKiBGbHVzaCB0aGUgc3RyZWFt
LiAgSWYgdGhlIHN0cmVhbSBpcyByZWFkIG9ubHksIGl0IGZsdXNoZXMgdGhlIHJlYWQKKyAqIHN0cmVh
bSwgaWYgaXQgaXMgd3JpdGUgb25seSBpdCBmbHVzaGVzIHRoZSB3cml0ZSwgb3RoZXJ3aXNlIGl0IGZs
dXNoZXMKKyAqIGJvdGguCisgKi8KK3N0YXRpYyBpbnQgZGlvX3NlcmlhbF9zdHJlYW1fZmx1c2gocGhw
X3N0cmVhbSAqc3RyZWFtIFRTUk1MU19EQykKK3sKKwlwaHBfZGlvX3N0cmVhbV9kYXRhICphYnN0cmFj
dCA9IChwaHBfZGlvX3N0cmVhbV9kYXRhKilzdHJlYW0tPmFic3RyYWN0OworCWludCByZXQ7CisKKyNp
Zm5kZWYgUEhQX1dJTjMyCisJaWYgKChhYnN0cmFjdC0+ZmxhZ3MgJiBPX1JEV1IpID09IE9fUkRXUikg
eworCQlyZXQgPSB0Y2ZsdXNoKGFic3RyYWN0LT5mZCwgVENJT0ZMVVNIKTsKKwl9IGVsc2UgaWYgKChh
YnN0cmFjdC0+ZmxhZ3MgJiBPX1dST05MWSkgPT0gT19XUk9OTFkpIHsKKwkJcmV0ID0gdGNmbHVzaChh
YnN0cmFjdC0+ZmQsIFRDT0ZMVVNIKTsKKwl9IGVsc2UgaWYgKChhYnN0cmFjdC0+ZmxhZ3MgJiBPX1JE
T05MWSkgPT0gT19SRE9OTFkpIHsKKwkJcmV0ID0gdGNmbHVzaChhYnN0cmFjdC0+ZmQsIFRDSUZMVVNI
KTsKKwl9CisKKwlpZiAocmV0IDwgMCkgeworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKworCXJldHVy
biAxOworfQorLyogfX19ICovCisKKy8qIHt7eyBkaW9fc3RyZWFtX2Nsb3NlCisgKiBDbG9zZSB0aGUg
c3RyZWFtLiAgUmVzdG9yZXMgdGhlIHNlcmlhbCBzZXR0aW5ncyB0byB0aGVpciB2YWx1ZSBiZWZvcmUK
KyAqIHRoZSBzdHJlYW0gd2FzIG9wZW4uCisgKi8KK3N0YXRpYyBpbnQgZGlvX3NlcmlhbF9zdHJlYW1f
Y2xvc2UocGhwX3N0cmVhbSAqc3RyZWFtLCBpbnQgY2xvc2VfaGFuZGxlIFRTUk1MU19EQykKK3sKKwlw
aHBfZGlvX3N0cmVhbV9kYXRhICphYnN0cmFjdCA9IChwaHBfZGlvX3N0cmVhbV9kYXRhKilzdHJlYW0t
PmFic3RyYWN0OworCWludCByZXQ7CisKKyNpZm5kZWYgUEhQX1dJTjMyCisJZG8geworCQlyZXQgPSB0
Y3NldGF0dHIoYWJzdHJhY3QtPmZkLCBUQ1NBRkxVU0gsICYoYWJzdHJhY3QtPm9sZHRpbykpOworCX0g
d2hpbGUgKChyZXQgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKTsKKyNlbmRpZgorCisJaWYgKGNsb3Nl
KGFic3RyYWN0LT5mZCkgPCAwKSB7CisJCXJldHVybiAwOworCX0KKworCWVmcmVlKGFic3RyYWN0KTsK
KwlyZXR1cm4gMTsKK30KKy8qIH19fSAqLworCitwaHBfc3RyZWFtX29wcyBkaW9fc2VyaWFsX3N0cmVh
bV9vcHMgPSB7CisJZGlvX3N0cmVhbV93cml0ZSwKKwlkaW9fc3RyZWFtX3JlYWQsCisJZGlvX3Nlcmlh
bF9zdHJlYW1fY2xvc2UsCisJZGlvX3NlcmlhbF9zdHJlYW1fZmx1c2gsCisJImRpbyIsCisJTlVMTCwg
Lyogc2VlayAqLworCU5VTEwsIC8qIGNhc3QgKi8KKwlOVUxMLCAvKiBzdGF0ICovCisJZGlvX3N0cmVh
bV9zZXRfb3B0aW9uLAorfTsKKworI2lmbmRlZiBQSFBfV0lOMzIKKworLyoge3t7IGRpb19zZXJpYWxf
aW5pdAorICogSW5pdGlhbGlzZXMgdGhlIHNlcmlhbCBzZXR0aW5ncyBzdG9yaW5nIHRoZSBvcmlnaW5h
bCBzZXR0aW5ncyBiZWZvcmUgaGFuZC4KKyAqLworc3RhdGljIGludCBkaW9fc2VyaWFsX2luaXQocGhw
X2Rpb19zdHJlYW1fZGF0YSAqZGF0YSwgc3BlZWRfdCBkYXRhX3JhdGVfaW4sIHNwZWVkX3QgZGF0YV9y
YXRlX291dCwKKwkJICAgICAgICAgICAgICAgICAgIGludCBkYXRhX2JpdHMsIGludCBzdG9wX2JpdHMs
IGludCBwYXJpdHkpIHsKKwlzdHJ1Y3QgdGVybWlvcyB0aW87CisJaW50IHJldCA9IDA7CisKKwlyZXQg
PSB0Y2dldGF0dHIoZGF0YS0+ZmQsICYoZGF0YS0+b2xkdGlvKSk7CisJaWYgKHJldCA8IDApIHsKKwkJ
aWYgKChlcnJubyA9PSBFTk9UVFkpIHx8IChlcnJubyA9PSBFTk9ERVYpKSB7CisJCQlwaHBfZXJyb3Jf
ZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJOb3QgYSBzZXJpYWwgcG9ydCBvciB0ZXJt
aW5hbCEiKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSB0Y2dldGF0dHIoZGF0YS0+ZmQs
ICZ0aW8pOworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiAwOworCX0KKworCXRpby5jX2lzcGVlZCA9
IGRhdGFfcmF0ZV9pbjsKKwl0aW8uY19vc3BlZWQgPSBkYXRhX3JhdGVfb3V0OworCXRpby5jX2NmbGFn
ICY9IH5DU0laRTsKKwl0aW8uY19jZmxhZyB8PSBkYXRhX2JpdHM7CisJdGlvLmNfY2ZsYWcgJj0gfkNT
VE9QQjsKKwl0aW8uY19jZmxhZyB8PSBzdG9wX2JpdHM7CisJdGlvLmNfY2ZsYWcgJj0gfihQQVJFTkJ8
UEFST0REKTsKKwl0aW8uY19jZmxhZyB8PSBwYXJpdHk7CisKKwl0aW8uY19jZmxhZyAmPSB+Q1JUU0NU
UzsKKwlpZiAoZGF0YS0+cnRzY3RzKSB7CisJCXRpby5jX2NmbGFnIHw9IENSVFNDVFM7CisJfQorCisJ
cmV0ID0gdGNzZXRhdHRyKGRhdGEtPmZkLCBUQ1NBRkxVU0gsICZ0aW8pOworCWlmIChyZXQgPCAwKSB7
CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorLyogfX19ICovCisKKyNlbmRpZgorCisv
KiB7e3sgZGlvX3Jhd19vcGVuX3N0cmVhbQorICogT3BlbnMgdGhlIHBocF9zdHJlYW0uCisgKi8KK3N0
YXRpYyBwaHBfc3RyZWFtICpkaW9fc2VyaWFsX29wZW5fc3RyZWFtKGNoYXIgKmZpbGVuYW1lLCBjaGFy
ICptb2RlLCBwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhKSB7CisJc3BlZWRfdCByYXRlX2RlZjsKKwlp
bnQgZGF0YV9iaXRzX2RlZjsKKwlpbnQgc3RvcF9iaXRzX2RlZjsKKwlpbnQgcGFyaXR5X2RlZjsKKwor
CWRhdGEtPmZsYWdzID0gZGlvX3N0cmVhbV9tb2RlX3RvX2ZsYWdzKG1vZGUpOworCisjaWZkZWYgT19O
T05CTE9DSworCWlmICghZGF0YS0+aXNfYmxvY2tpbmcgfHwgZGF0YS0+aGFzX3RpbWVvdXQpIHsKKwkJ
ZGF0YS0+ZmxhZ3MgfD0gT19OT05CTE9DSzsKKwl9CisjZW5kaWYKKworCWlmICghZGlvX2RhdGFfcmF0
ZV90b19kZWZpbmUoZGF0YS0+ZGF0YV9yYXRlLCAmcmF0ZV9kZWYpKSB7CisJCXBocF9lcnJvcl9kb2Ny
ZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FSTklORywgImludmFsaWQgZGF0YV9yYXRlIHZhbHVlICglbGQp
IiwgZGF0YS0+ZGF0YV9yYXRlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCFkaW9fZGF0YV9i
aXRzX3RvX2RlZmluZShkYXRhLT5kYXRhX2JpdHMsICZkYXRhX2JpdHNfZGVmKSkgeworCQlwaHBfZXJy
b3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJpbnZhbGlkIGRhdGFfYml0cyB2YWx1
ZSAoJWQpIiwgZGF0YS0+ZGF0YV9iaXRzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCFkaW9f
c3RvcF9iaXRzX3RvX2RlZmluZShkYXRhLT5zdG9wX2JpdHMsICZzdG9wX2JpdHNfZGVmKSkgeworCQlw
aHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJpbnZhbGlkIHN0b3BfYml0
cyB2YWx1ZSAoJWQpIiwgZGF0YS0+c3RvcF9iaXRzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYg
KCFkaW9fcGFyaXR5X3RvX2RlZmluZShkYXRhLT5wYXJpdHksICZwYXJpdHlfZGVmKSkgeworCQlwaHBf
ZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJpbnZhbGlkIHBhcml0eSB2YWx1
ZSAoJWQpIiwgZGF0YS0+cGFyaXR5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogT3BlbiB0aGUg
ZmlsZSBhbmQgaGFuZGxlIGFueSBlcnJvcnMuICovCisJaWYgKGRhdGEtPmhhc19wZXJtcykgeworCQlk
YXRhLT5mZCA9IG9wZW4oZmlsZW5hbWUsIGRhdGEtPmZsYWdzLCBkYXRhLT5wZXJtcyk7CisJfSBlbHNl
IHsKKwkJZGF0YS0+ZmQgPSBvcGVuKGZpbGVuYW1lLCBkYXRhLT5mbGFncyk7CisJfQorCisJaWYgKGRh
dGEtPmZkIDwgMCkgeworCQlzd2l0Y2ggKGVycm5vKSB7CisJCQljYXNlIEVFWElTVDoKKwkJCQlwaHBf
ZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJGaWxlIGV4aXN0cyEiKTsKKwkJ
CQlyZXR1cm4gTlVMTDsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKyNp
Zm5kZWYgUEhQX1dJTjMyCisJaWYgKCFkaW9fc2VyaWFsX2luaXQoZGF0YSwgcmF0ZV9kZWYsIHJhdGVf
ZGVmLCBkYXRhX2JpdHNfZGVmLCBzdG9wX2JpdHNfZGVmLCBwYXJpdHlfZGVmKSkgeworCQljbG9zZShk
YXRhLT5mZCk7CisJCXJldHVybiBOVUxMOworCX0KKyNlbHNlCisJLyogVE9ETzogV2luZG93cyB2ZXJz
aW9uICovCisJcmV0dXJuIE5VTEw7CisjZW5kaWYKKworCXJldHVybiBwaHBfc3RyZWFtX2FsbG9jKCZk
aW9fc2VyaWFsX3N0cmVhbV9vcHMsIGRhdGEsIDAsIG1vZGUpOworfQorLyogfX19ICovCisKKy8qIHt7
eyBkaW9fcmF3X2ZvcGVuX3dyYXBwZXIKKyAqIGZvcGVuIGZvciB0aGUgZGlvLnJhdyBzdHJlYW0uCisg
Ki8KK3N0YXRpYyBwaHBfc3RyZWFtICpkaW9fc2VyaWFsX2ZvcGVuX3dyYXBwZXIocGhwX3N0cmVhbV93
cmFwcGVyICp3cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICpwYXRoLCBjaGFyICptb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgb3B0aW9ucywgY2hhciAqKm9wZW5lZF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwaHBfc3RyZWFtX2NvbnRleHQgKmNvbnRleHQgU1RSRUFNU19EQyBU
U1JNTFNfREMpIHsKKwlwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhOworCXBocF9zdHJlYW0gKnN0cmVh
bTsKKwljaGFyICpmaWxlbmFtZTsKKworCS8qIENoZWNrIGl0IHdhcyBhY3R1YWxseSBmb3IgdXMgKG5v
dCBhIGNvcnJ1cHRlZCBmdW5jdGlvbiBwb2ludGVyCisJICAgc29tZXdoZXJlISkuICovCisJaWYgKHN0
cm5jbXAocGF0aCwgRElPX1NFUklBTF9TVFJFQU1fUFJPVE9DT0wsIHNpemVvZihESU9fU0VSSUFMX1NU
UkVBTV9QUk9UT0NPTCkgLSAxKSkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBHZXQgdGhlIGFj
dHVhbGx5IGZpbGUgc3lzdGVtIG5hbWUvcGF0aC4gKi8KKwlmaWxlbmFtZSA9IHBhdGggKyBzaXplb2Yo
RElPX1NFUklBTF9TVFJFQU1fUFJPVE9DT0wpIC0gMTsKKworCS8qIENoZWNrIHdlIGNhbiBhY3R1YWxs
eSBhY2Nlc3MgaXQuICovCisJaWYgKHBocF9jaGVja19vcGVuX2Jhc2VkaXIoZmlsZW5hbWUgVFNSTUxT
X0NDKSB8fAorCQkoUEcoc2FmZV9tb2RlKSAmJiAhcGhwX2NoZWNrdWlkKGZpbGVuYW1lLCBtb2RlLCBD
SEVDS1VJRF9DSEVDS19NT0RFX1BBUkFNKSkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogSW5p
dGlhbGlzZSB0aGUgc3RyZWFtIGRhdGEgc3RydWN0dXJlLiAqLworCWRhdGEgPSBlbWFsbG9jKHNpemVv
ZihwaHBfZGlvX3N0cmVhbV9kYXRhKSk7CisJZGF0YS0+aGFzX3Blcm1zID0gMDsKKwlkYXRhLT5wZXJt
cyA9IDA7CisJZGF0YS0+ZW5kX29mX2ZpbGUgPSAwOworI2lmZGVmIE9fTk9OQkxPQ0sKKwlkYXRhLT5p
c19ibG9ja2luZyA9IDE7CisJZGF0YS0+aGFzX3RpbWVvdXQgPSAwOworCWRhdGEtPnRpbWVvdXQudHZf
c2VjID0gMDsKKwlkYXRhLT50aW1lb3V0LnR2X3VzZWMgPSAwOworI2VuZGlmCisJZGF0YS0+ZGF0YV9y
YXRlID0gOTYwMDsKKwlkYXRhLT5kYXRhX2JpdHMgPSA4OworCWRhdGEtPnN0b3BfYml0cyA9IDE7CisJ
ZGF0YS0+cGFyaXR5ID0gMDsKKwlkYXRhLT5ydHNjdHMgPSAxOworCisJLyogUGFyc2UgdGhlIGNvbnRl
eHQuICovCisJaWYgKGNvbnRleHQpIHsKKwkJZGlvX3N0cmVhbV9jb250ZXh0X2dldF9iYXNpY19vcHRp
b25zKGNvbnRleHQsIGRhdGEpOworCQlkaW9fc3RyZWFtX2NvbnRleHRfZ2V0X3NlcmlhbF9vcHRpb25z
KGNvbnRleHQsIGRhdGEpOworCX0KKworCS8qIFRyeSBhbmQgb3BlbiBhIHJhdyBzdHJlYW0uICovCisJ
c3RyZWFtID0gZGlvX3NlcmlhbF9vcGVuX3N0cmVhbShmaWxlbmFtZSwgbW9kZSwgZGF0YSk7CisJaWYg
KCFzdHJlYW0pIHsKKwkJZWZyZWUoZGF0YSk7CisJfQorCisJcmV0dXJuIHN0cmVhbTsKK30KKy8qIH19
fSAqLworCitzdGF0aWMgcGhwX3N0cmVhbV93cmFwcGVyX29wcyBkaW9fc2VyaWFsX3N0cmVhbV93b3Bz
ID0geworCWRpb19zZXJpYWxfZm9wZW5fd3JhcHBlciwKKwlOVUxMLCAvKiBzdHJlYW1fY2xvc2UgKi8K
KwlOVUxMLCAvKiBzdGF0ICovCisJTlVMTCwgLyogc3RhdF91cmwgKi8KKwlOVUxMLCAvKiBvcGVuZGly
ICovCisJRElPX1NFUklBTF9TVFJFQU1fTkFNRQorfTsKKworcGhwX3N0cmVhbV93cmFwcGVyIHBocF9k
aW9fc2VyaWFsX3N0cmVhbV93cmFwcGVyID0geworCSZkaW9fc2VyaWFsX3N0cmVhbV93b3BzLAorCU5V
TEwsCisJMAorfTsKKworLyoge3t7IHByb3RvIGRpb19zZXJpYWwoc3RyaW5nIGZpbGVuYW1lLCBzdHJp
bmcgbW9kZVssIGFycmF5IG9wdGlvbnNdKQorICogT3BlbnMgYSBzZXJpYWwgZGlyZWN0IElPIHN0cmVh
bS4KKyAqLworUEhQX0ZVTkNUSU9OKGRpb19zZXJpYWwpIHsKKwl6dmFsICpvcHRpb25zID0gTlVMTDsK
KwlwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhOworCXBocF9zdHJlYW0gKnN0cmVhbTsKKworCWNoYXIg
KmZpbGVuYW1lOworCWludCAgIGZpbGVuYW1lX2xlbjsKKwljaGFyICptb2RlOworCWludCAgIG1vZGVf
bGVuOworCisJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0ND
LCAic3N8eiIsICZmaWxlbmFtZSwgJmZpbGVuYW1lX2xlbiwgJm1vZGUsICZtb2RlX2xlbiwgJm9wdGlv
bnMpID09IEZBSUxVUkUpIHsKKwkJUkVUVVJOX0ZBTFNFOworCX0KKworCS8qIENoZWNrIHRoZSB0aGly
ZCBhcmd1bWVudCBpcyBhbiBhcnJheS4gKi8KKwlpZiAob3B0aW9ucyAmJiAoWl9UWVBFX1Aob3B0aW9u
cykgIT0gSVNfQVJSQVkpKSB7CisJCXBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FS
TklORywiZGlvX3NlcmlhbCwgdGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSBvZiBv
cHRpb25zIik7CisJCVJFVFVSTl9GQUxTRTsKKwl9CisKKwkvKiBDaGVjayB3ZSBjYW4gYWN0dWFsbHkg
YWNjZXNzIHRoZSBmaWxlLiAqLworCWlmIChwaHBfY2hlY2tfb3Blbl9iYXNlZGlyKGZpbGVuYW1lIFRT
Uk1MU19DQykgfHwKKwkJKFBHKHNhZmVfbW9kZSkgJiYgIXBocF9jaGVja3VpZChmaWxlbmFtZSwgbW9k
ZSwgQ0hFQ0tVSURfQ0hFQ0tfTU9ERV9QQVJBTSkpKSB7CisJCVJFVFVSTl9GQUxTRTsKKwl9CisKKwkv
KiBJbml0aWFsaXNlIHRoZSBzdHJlYW0gZGF0YSBzdHJ1Y3R1cmUuICovCisJZGF0YSA9IGVtYWxsb2Mo
c2l6ZW9mKHBocF9kaW9fc3RyZWFtX2RhdGEpKTsKKwlkYXRhLT5oYXNfcGVybXMgPSAwOworCWRhdGEt
PnBlcm1zID0gMDsKKwlkYXRhLT5lbmRfb2ZfZmlsZSA9IDA7CisjaWZkZWYgT19OT05CTE9DSworCWRh
dGEtPmlzX2Jsb2NraW5nID0gMTsKKwlkYXRhLT5oYXNfdGltZW91dCA9IDA7CisJZGF0YS0+dGltZW91
dC50dl9zZWMgPSAwOworCWRhdGEtPnRpbWVvdXQudHZfdXNlYyA9IDA7CisjZW5kaWYKKwlkYXRhLT5k
YXRhX3JhdGUgPSA5NjAwOworCWRhdGEtPmRhdGFfYml0cyA9IDg7CisJZGF0YS0+c3RvcF9iaXRzID0g
MTsKKwlkYXRhLT5wYXJpdHkgPSAwOworCWRhdGEtPnJ0c2N0cyA9IDE7CisKKwlpZiAob3B0aW9ucykg
eworCQlkaW9fYXNzb2NfYXJyYXlfZ2V0X2Jhc2ljX29wdGlvbnMob3B0aW9ucywgZGF0YSk7CisJCWRp
b19hc3NvY19hcnJheV9nZXRfc2VyaWFsX29wdGlvbnMob3B0aW9ucywgZGF0YSk7CisJfQorCisJLyog
VHJ5IGFuZCBvcGVuIGEgcmF3IHN0cmVhbS4gKi8KKwlzdHJlYW0gPSBkaW9fc2VyaWFsX29wZW5fc3Ry
ZWFtKGZpbGVuYW1lLCBtb2RlLCBkYXRhKTsKKwlpZiAoIXN0cmVhbSkgeworCQllZnJlZShkYXRhKTsK
KwkJUkVUVVJOX0ZBTFNFOworCX0KKworCXBocF9zdHJlYW1fdG9fenZhbChzdHJlYW0sIHJldHVybl92
YWx1ZSk7Cit9CisvKiB9fX0gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMt
b2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIEVuZDoKKyAqIHZpbTYwMDogZmRtPW1hcmtlcgor
ICogdmltOiBzdz00IHRzPTQgbm9ldAorICovCgpNb2RpZmllZDogcGVjbC9kaW8vdHJ1bmsvcGFja2Fn
ZS54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvcGFja2FnZS54bWwJMjAwOS0xMS0yOSAyMTow
NDoxMiBVVEMgKHJldiAyOTE0NTYpCisrKyBwZWNsL2Rpby90cnVuay9wYWNrYWdlLnhtbAkyMDA5LTEx
LTI5IDIxOjU4OjEyIFVUQyAocmV2IDI5MTQ1NykKQEAgLTE2LDIyICsxNiwxNiBAQAoKICA8L2Rlc2Ny
aXB0aW9uPgogIDxsZWFkPgotICA8bmFtZT5TdGVybGluZyBIdWdoZXM8L25hbWU+Ci0gIDx1c2VyPnN0
ZXJsaW5nPC91c2VyPgotICA8ZW1haWw+c3RlcmxpbmdAcGhwLm5ldDwvZW1haWw+CisgIDxuYW1lPk1l
bGFuaWUgUmhpYW5uYSBMZXdpczwvbmFtZT4KKyAgPHVzZXI+Y3liZXJzcGljZTwvdXNlcj4KKyAgPGVt
YWlsPmN5YmVyc3BpY2VAcGhwLm5ldDwvZW1haWw+CiAgIDxhY3RpdmU+eWVzPC9hY3RpdmU+CiAgPC9s
ZWFkPgotIDxsZWFkPgotICA8bmFtZT5BbGFuIEtub3dsZXM8L25hbWU+Ci0gIDx1c2VyPmFsYW5fazwv
dXNlcj4KLSAgPGVtYWlsPmFsYW5fa0BwaHAubmV0PC9lbWFpbD4KLSAgPGFjdGl2ZT55ZXM8L2FjdGl2
ZT4KLSA8L2xlYWQ+CiAgPGRhdGU+MjAwOS0xMS0wNTwvZGF0ZT4KICA8dGltZT4xMjo1NjoxNjwvdGlt
ZT4KICA8dmVyc2lvbj4KLSAgPHJlbGVhc2U+MC4wLjI8L3JlbGVhc2U+Ci0gIDxhcGk+MC4wLjI8L2Fw
aT4KKyAgPHJlbGVhc2U+MC4wLjM8L3JlbGVhc2U+CisgIDxhcGk+MC4wLjM8L2FwaT4KICA8L3ZlcnNp
b24+CiAgPHN0YWJpbGl0eT4KICAgPHJlbGVhc2U+YmV0YTwvcmVsZWFzZT4KCk1vZGlmaWVkOiBwZWNs
L2Rpby90cnVuay9waHBfZGlvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvcGhwX2Rpby5oCTIw
MDktMTEtMjkgMjE6MDQ6MTIgVVRDIChyZXYgMjkxNDU2KQorKysgcGVjbC9kaW8vdHJ1bmsvcGhwX2Rp
by5oCTIwMDktMTEtMjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMjAsNyArMjAsNyBAQAog
ZXh0ZXJuIHplbmRfbW9kdWxlX2VudHJ5IGRpb19tb2R1bGVfZW50cnk7CiAjZGVmaW5lIHBocGV4dF9k
aW9fcHRyICZkaW9fbW9kdWxlX2VudHJ5CgotI2RlZmluZSBQSFBfRElPX1ZFUlNJT04gIjAuMS4wLWRl
diIKKyNkZWZpbmUgUEhQX0RJT19WRVJTSU9OICIwLjAuMy1kZXYiCgogI2lmZGVmIFBIUF9XSU4zMgog
I2RlZmluZSBQSFBfRElPX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKQEAgLTMyLDEyICszMiwxNCBA
QAogI2luY2x1ZGUgIlRTUk0uaCIKICNlbmRpZgoKKy8qIFN0YW5kYXJkIG1vZHVsZSBmdW5jdGlvbnMu
ICovCiBQSFBfTUlOSVRfRlVOQ1RJT04oZGlvKTsKIFBIUF9NU0hVVERPV05fRlVOQ1RJT04oZGlvKTsK
IFBIUF9SSU5JVF9GVU5DVElPTihkaW8pOwogUEhQX1JTSFVURE9XTl9GVU5DVElPTihkaW8pOwogUEhQ
X01JTkZPX0ZVTkNUSU9OKGRpbyk7CgorLyogTGVnYWN5IGZ1bmN0aW9ucy4gKi8KIFBIUF9GVU5DVElP
TihkaW9fb3Blbik7CiBQSFBfRlVOQ1RJT04oZGlvX3RydW5jYXRlKTsKIFBIUF9GVU5DVElPTihkaW9f
c3RhdCk7CkBAIC01Miw2ICs1NCw5IEBACiAJaW50IGZkOwogfSBwaHBfZmRfdDsKCisjaW5jbHVkZSAi
cGhwX2Rpb19jb21tb24uaCIKKyNpbmNsdWRlICJwaHBfZGlvX3N0cmVhbV93cmFwcGVycy5oIgorCiAj
ZW5kaWYKCgoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3BocF9kaW9fY29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGVjbC9kaW8vdHJ1bmsvcGhwX2Rpb19jb21tb24uaAkgICAgICAgICAgICAgICAgICAgICAgICAocmV2
IDApCisrKyBwZWNsL2Rpby90cnVuay9waHBfZGlvX2NvbW1vbi5oCTIwMDktMTEtMjkgMjE6NTg6MTIg
VVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDk0IEBACisvKgorICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8
IFBIUCBWZXJzaW9uIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBDb3B5cmlnaHQgKGMpIDIwMDkgTWVsYW5p
ZSBSaGlhbm5hIExld2lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsKKyAgIHwgVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQ
SFAgbGljZW5zZSwgICAgICAgfAorICAgfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2Ug
aW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAgICAgICB8CisgICB8IGF2YWlsYWJsZSB0aHJvdWdo
IHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGUgZm9sbG93aW5nIHVybDogICAgICAgICAgIHwKKyAgIHwg
aHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvM18wLnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgfCBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxp
Y2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gICB8CisgICB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3Js
ZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYSBub3RlIHRvICAgICAgICAgIHwKKyAgIHwgbGljZW5zZUBw
aHAubmV0IHNvIHdlIGNhbiBtYWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAg
fAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEF1dGhvcjogTWVsYW5pZSBSaGlhbm5hIExld2lzIDxjeWJl
cnNwaWNlQHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICovCisK
KyNpZm5kZWYgUEhQX0RJT19DT01NT05fSF8KKyNkZWZpbmUgUEhQX0RJT19DT01NT05fSF8KKworI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3Rp
bWUuaD4KKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgor
CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZm5kZWYgUEhQX1dJTjMyCisjaW5jbHVkZSA8dGVybWlvcy5o
PgorI2VuZGlmCisKKyNpbmNsdWRlICJwaHAuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX3BocF9kaW9fc3Ry
ZWFtX2RhdGEgeworI2lmbmRlZiBQSFBfV0lOMzIKKwlpbnQgZmQ7CisjZWxzZQorCWludCBmaDsKKyNl
bmRpZgorCWludCBmbGFnczsKKwlpbnQgZW5kX29mX2ZpbGU7CisJaW50IGhhc19wZXJtczsKKwltb2Rl
X3QgcGVybXM7CisjaWZkZWYgT19OT05CTE9DSworCWludCBpc19ibG9ja2luZzsKKwlpbnQgaGFzX3Rp
bWVvdXQ7CisJc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyNlbmRpZgorCisJLyogU2VyaWFsIG9wdGlv
bnMgKi8KKwlsb25nIGRhdGFfcmF0ZTsKKwlpbnQgZGF0YV9iaXRzOworCWludCBzdG9wX2JpdHM7CisJ
aW50IHBhcml0eTsKKwlpbnQgcnRzY3RzOworI2lmbmRlZiBQSFBfV0lOMzIKKwlzdHJ1Y3QgdGVybWlv
cyBvbGR0aW87CisjZW5kaWYKKworfSBwaHBfZGlvX3N0cmVhbV9kYXRhIDsKKworbG9uZyBkaW9fY29u
dmVydF90b19sb25nKHp2YWwgKnZhbCk7CisKK2ludCBkaW9fZGF0YV9yYXRlX3RvX2RlZmluZShsb25n
IHJhdGUsIHNwZWVkX3QgKmRlZik7CisKK2ludCBkaW9fZGF0YV9iaXRzX3RvX2RlZmluZShpbnQgYml0
cywgaW50ICpkZWYpOworCitpbnQgZGlvX3N0b3BfYml0c190b19kZWZpbmUoaW50IHN0b3BfYml0cywg
aW50ICpkZWYpOworCitpbnQgZGlvX3Bhcml0eV90b19kZWZpbmUoaW50IHBhcml0eSwgaW50ICpkZWYp
OworCitpbnQgZGlvX2Fzc29jX2FycmF5X2dldF9iYXNpY19vcHRpb25zKHp2YWwgKm9wdGlvbnMsIHBo
cF9kaW9fc3RyZWFtX2RhdGEgKmRhdGEpOworCitpbnQgZGlvX2Fzc29jX2FycmF5X2dldF9zZXJpYWxf
b3B0aW9ucyh6dmFsICpvcHRpb25zLCBwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhKTsKKworaW50IGRp
b19zdHJlYW1fbW9kZV90b19mbGFncyhjb25zdCBjaGFyICptb2RlKTsKKworc2l6ZV90IGRpb19jb21t
b25fd3JpdGUocGhwX2Rpb19zdHJlYW1fZGF0YSAqZGF0YSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qg
Y291bnQpOworCitzaXplX3QgZGlvX2NvbW1vbl9yZWFkKHBocF9kaW9fc3RyZWFtX2RhdGEgKmRhdGEs
IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKKworI2VuZGlmIC8qIFBIUF9ESU9fQ09NTU9O
X0hfICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogNAorICog
dGFiLXdpZHRoOiA0CisgKiBFbmQ6CisgKiB2aW02MDA6IGZkbT1tYXJrZXIKKyAqIHZpbTogc3c9NCB0
cz00IG5vZXQKKyAqLwoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3BocF9kaW9fc3RyZWFtX3dyYXBwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvcGhwX2Rpb19zdHJlYW1fd3JhcHBlcnMuaAkgICAg
ICAgICAgICAgICAgICAgICAgICAocmV2IDApCisrKyBwZWNsL2Rpby90cnVuay9waHBfZGlvX3N0cmVh
bV93cmFwcGVycy5oCTIwMDktMTEtMjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsx
LDQ0IEBACisvKgorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IFBIUCBWZXJzaW9uIDUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgfCBDb3B5cmlnaHQgKGMpIDIwMDkgTWVsYW5pZSBSaGlhbm5hIExld2lzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgVGhpcyBzb3VyY2UgZmlsZSBp
cyBzdWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICAgfAorICAgfCB0
aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlz
ICAgICAgICB8CisgICB8IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGUg
Zm9sbG93aW5nIHVybDogICAgICAgICAgIHwKKyAgIHwgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2Uv
M18wLnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCBJZiB5b3UgZGlk
IG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gICB8
CisgICB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYSBu
b3RlIHRvICAgICAgICAgIHwKKyAgIHwgbGljZW5zZUBwaHAubmV0IHNvIHdlIGNhbiBtYWlsIHlvdSBh
IGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEF1
dGhvcjogTWVsYW5pZSBSaGlhbm5hIExld2lzIDxjeWJlcnNwaWNlQHBocC5uZXQ+ICAgICAgICAgICAg
ICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICovCisKKyNpZm5kZWYgUEhQX0RJT19TVFJFQU1fV1JB
UFBFUlNfSF8KKyNkZWZpbmUgUEhQX0RJT19TVFJFQU1fV1JBUFBFUlNfSF8KKworI2RlZmluZSBESU9f
UkFXX1NUUkVBTV9OQU1FICAgICAgICAgImRpby5yYXciCisjZGVmaW5lIERJT19SQVdfU1RSRUFNX1BS
T1RPQ09MICAgICAiZGlvLnJhdzovLyIKKyNkZWZpbmUgRElPX1NFUklBTF9TVFJFQU1fTkFNRSAgICAg
ICJkaW8uc2VyaWFsIgorI2RlZmluZSBESU9fU0VSSUFMX1NUUkVBTV9QUk9UT0NPTCAgImRpby5zZXJp
YWw6Ly8iCisKK2V4dGVybiBwaHBfc3RyZWFtX3dyYXBwZXIgcGhwX2Rpb19yYXdfc3RyZWFtX3dyYXBw
ZXI7CisKK1BIUF9GVU5DVElPTihkaW9fcmF3KTsKKworZXh0ZXJuIHBocF9zdHJlYW1fd3JhcHBlciBw
aHBfZGlvX3NlcmlhbF9zdHJlYW1fd3JhcHBlcjsKKworUEhQX0ZVTkNUSU9OKGRpb19zZXJpYWwpOwor
CisjZW5kaWYgLyogUEhQX0RJT19TVFJFQU1fV1JBUFBFUlNfSF8gKi8KKworLyoKKyAqIExvY2FsIHZh
cmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIEVuZDoKKyAq
IHZpbTYwMDogZmRtPW1hcmtlcgorICogdmltOiBzdz00IHRzPTQgbm9ldAorICovCgpNb2RpZmllZDog
cGVjbC9kaW8vdHJ1bmsvdGVzdHMvMDAxLnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvdGVz
dHMvMDAxLnBocHQJMjAwOS0xMS0yOSAyMTowNDoxMiBVVEMgKHJldiAyOTE0NTYpCisrKyBwZWNsL2Rp
by90cnVuay90ZXN0cy8wMDEucGhwdAkyMDA5LTExLTI5IDIxOjU4OjEyIFVUQyAocmV2IDI5MTQ1NykK
QEAgLTEsMjEgKzEsMTUgQEAKIC0tVEVTVC0tCi1DaGVjayBmb3IgZGlvIHByZXNlbmNlCitUZXN0IGRp
byBsZWdhY3kgb3BlbgogLS1TS0lQSUYtLQogPD9waHAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCJkaW8i
KSkgcHJpbnQgInNraXAiOyA/PgogLS1GSUxFLS0KIDw/cGhwCi1lY2hvICJkaW8gZXh0ZW5zaW9uIGlz
IGF2YWlsYWJsZSI7Ci0vKgotCXlvdSBjYW4gYWRkIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHlvdXIgZXh0
ZW5zaW9uIGhlcmUKLQotICB0aGUgb3V0cHV0IG9mIHlvdXIgdGVzdCBjb2RlIGhhcyB0byBiZSBlcXVh
bCB0byB0aGUKLSAgdGV4dCBpbiB0aGUgLS1FWFBFQ1QtLSBzZWN0aW9uIGJlbG93IGZvciB0aGUgdGVz
dHMKLSAgdG8gcGFzcywgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgb3V0cHV0IGFuZCB0aGUKLSAgZXhw
ZWN0ZWQgdGV4dCBhcmUgaW50ZXJwcmV0ZWQgYXMgZmFpbHVyZQotCi0Jc2VlIHBocDUvdGVzdHMvUkVB
RE1FIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uCi0gIHdyaXRpbmcgcmVncmVzc2lvbiB0ZXN0cwot
Ki8KKwkkZiA9IGRpb19vcGVuKCIvZGV2L251bGwiLE9fUkRPTkxZKTsKKwlpZiAoJGYpIHsKKwkJZWNo
byAiTGVnYWN5IG9wZW4gcGFzc2VkIjsKKwl9IGVsc2UgeworCQllY2hvICJMZWdhY3kgb3BlbiBmYWls
ZWQiOworCX0KID8+CiAtLUVYUEVDVC0tCi1kaW8gZXh0ZW5zaW9uIGlzIGF2YWlsYWJsZQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKK0xlZ2FjeSBvcGVuIHBhc3NlZAoKQWRkZWQ6IHBlY2wvZGlvL3Ry
dW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMS5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3RydW5r
L3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMS5waHB0CSAgICAgICAgICAgICAgICAgICAgICAgIChyZXYg
MCkKKysrIHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMS5waHB0CTIwMDktMTEt
MjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDIzIEBACistLVRFU1QtLQorVGVz
dCBkaW8gcmF3IHN0cmVhbSBvcGVuCistLVNLSVBJRi0tCis8P3BocCBpZiAoIWV4dGVuc2lvbl9sb2Fk
ZWQoImRpbyIpKSBwcmludCAic2tpcCI7ID8+CistLUZJTEUtLQorPD9waHAKKwkkb3N0eXBlID0gIndp
bmRvd3MiOworCWlmIChzaGVsbF9leGVjKCJ3aGljaCB1bmFtZSIpKSB7CisJCSRvc3R5cGUgPSBzaGVs
bF9leGVjKCJ1bmFtZSIpOworCX0KKwlpZiAoJG9zdHlwZSAhPSAid2luZG93cyIpIHsKKwkJJGZpbGVu
YW1lID0gImRpby5yYXc6Ly8vZGV2L251bGwiOworCX0gZWxzZSB7CisJCSRmaWxlbmFtZSA9ICJkaW8u
cmF3Oi8vXFxEZXZpY2VcXE51bGwiOworCX0KKwkkZiA9IGZvcGVuKCRmaWxlbmFtZSwgInIrIik7CisJ
aWYgKCRmKSB7CisJCWVjaG8gIlJhdyBvcGVuIHBhc3NlZCI7CisJCWZjbG9zZSgkZik7CisJfQorPz4K
Ky0tRVhQRUNULS0KK1JhdyBvcGVuIHBhc3NlZAoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rp
b19yYXdfc3RyZWFtXzAwMi5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rpb19y
YXdfc3RyZWFtXzAwMi5waHB0CSAgICAgICAgICAgICAgICAgICAgICAgIChyZXYgMCkKKysrIHBlY2wv
ZGlvL3RydW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMi5waHB0CTIwMDktMTEtMjkgMjE6NTg6MTIg
VVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDI0IEBACistLVRFU1QtLQorVGVzdCBkaW8gcmF3IHN0
cmVhbSBjbG9zZQorLS1TS0lQSUYtLQorPD9waHAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCJkaW8iKSkg
cHJpbnQgInNraXAiOyA/PgorLS1GSUxFLS0KKzw/cGhwCisJJG9zdHlwZSA9ICJ3aW5kb3dzIjsKKwlp
ZiAoc2hlbGxfZXhlYygid2hpY2ggdW5hbWUiKSkgeworCQkkb3N0eXBlID0gc2hlbGxfZXhlYygidW5h
bWUiKTsKKwl9CisJaWYgKCRvc3R5cGUgIT0gIndpbmRvd3MiKSB7CisJCSRmaWxlbmFtZSA9ICJkaW8u
cmF3Oi8vL2Rldi9udWxsIjsKKwl9IGVsc2UgeworCQkkZmlsZW5hbWUgPSAiZGlvLnJhdzovL1xcRGV2
aWNlXFxOdWxsIjsKKwl9CisJJGYgPSBmb3BlbigkZmlsZW5hbWUsICJyKyIpOworCWlmICgkZikgewor
CQlpZiAoZmNsb3NlKCRmKSkgeworCQkJZWNobyAiUmF3IGNsb3NlIHBhc3NlZCI7CisJCX0KKwl9Cis/
PgorLS1FWFBFQ1QtLQorUmF3IGNsb3NlIHBhc3NlZAoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3Rlc3Rz
L2Rpb19yYXdfc3RyZWFtXzAwMy5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rp
b19yYXdfc3RyZWFtXzAwMy5waHB0CSAgICAgICAgICAgICAgICAgICAgICAgIChyZXYgMCkKKysrIHBl
Y2wvZGlvL3RydW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMy5waHB0CTIwMDktMTEtMjkgMjE6NTg6
MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDI2IEBACistLVRFU1QtLQorVGVzdCBkaW8gcmF3
IHJlYWQKKy0tU0tJUElGLS0KKzw/cGhwIGlmICghZXh0ZW5zaW9uX2xvYWRlZCgiZGlvIikpIHByaW50
ICJza2lwIjsgPz4KKy0tRklMRS0tCis8P3BocAorCSRvc3R5cGUgPSAid2luZG93cyI7CisJaWYgKHNo
ZWxsX2V4ZWMoIndoaWNoIHVuYW1lIikpIHsKKwkJJG9zdHlwZSA9IHNoZWxsX2V4ZWMoInVuYW1lIik7
CisJfQorCWlmICgkb3N0eXBlICE9ICJ3aW5kb3dzIikgeworCQkkZmlsZW5hbWUgPSAiZGlvLnJhdzov
Ly9kZXYvemVybyI7CisJfSBlbHNlIHsKKwkJJGZpbGVuYW1lID0gImRpby5yYXc6Ly9cXERldmljZVxc
TnVsbCI7CisJfQorCSRmID0gZm9wZW4oJGZpbGVuYW1lLCAicisiKTsKKwlpZiAoJGYpIHsKKwkJJGRh
dGEgPSBmcmVhZCgkZiwgMjA0OCk7CisJCWlmICgkZGF0YSAmJiAoc3RybGVuKCRkYXRhKSA9PSAyMDQ4
KSkgeworCQkJZWNobyAiUmF3IHJlYWQgcGFzc2VkIjsKKwkJfQorCQlmY2xvc2UoJGYpOworCX0KKz8+
CistLUVYUEVDVC0tCitSYXcgcmVhZCBwYXNzZWQKCkFkZGVkOiBwZWNsL2Rpby90cnVuay90ZXN0cy9k
aW9fcmF3X3N0cmVhbV8wMDQucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL2Rpby90cnVuay90ZXN0cy9kaW9f
cmF3X3N0cmVhbV8wMDQucGhwdAkgICAgICAgICAgICAgICAgICAgICAgICAocmV2IDApCisrKyBwZWNs
L2Rpby90cnVuay90ZXN0cy9kaW9fcmF3X3N0cmVhbV8wMDQucGhwdAkyMDA5LTExLTI5IDIxOjU4OjEy
IFVUQyAocmV2IDI5MTQ1NykKQEAgLTAsMCArMSwyNiBAQAorLS1URVNULS0KK1Rlc3QgZGlvIHJhdyBz
dHJlYW0gd3JpdGUKKy0tU0tJUElGLS0KKzw/cGhwIGlmICghZXh0ZW5zaW9uX2xvYWRlZCgiZGlvIikp
IHByaW50ICJza2lwIjsgPz4KKy0tRklMRS0tCis8P3BocAorCSRvc3R5cGUgPSAid2luZG93cyI7CisJ
aWYgKHNoZWxsX2V4ZWMoIndoaWNoIHVuYW1lIikpIHsKKwkJJG9zdHlwZSA9IHNoZWxsX2V4ZWMoInVu
YW1lIik7CisJfQorCWlmICgkb3N0eXBlICE9ICJ3aW5kb3dzIikgeworCQkkZmlsZW5hbWUgPSAiZGlv
LnJhdzovLy9kZXYvbnVsbCI7CisJfSBlbHNlIHsKKwkJJGZpbGVuYW1lID0gImRpby5yYXc6Ly9cXERl
dmljZVxcTnVsbCI7CisJfQorCSRmID0gZm9wZW4oJGZpbGVuYW1lLCAicisiKTsKKwlpZiAoJGYpIHsK
KwkJJGRhdGEgPSBzdHJfcmVwZWF0KCIrIiwgMjA0OCk7CisJCWlmIChmd3JpdGUoJGYsICRkYXRhKSkg
eworCQkJZWNobyAiUmF3IHdyaXRlIHBhc3NlZCI7CisJCX0KKwkJZmNsb3NlKCRmKTsKKwl9Cis/Pgor
LS1FWFBFQ1QtLQorUmF3IHdyaXRlIHBhc3NlZAoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rp
b19yYXdfc3RyZWFtXzAwNS5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rpb19y
YXdfc3RyZWFtXzAwNS5waHB0CSAgICAgICAgICAgICAgICAgICAgICAgIChyZXYgMCkKKysrIHBlY2wv
ZGlvL3RydW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwNS5waHB0CTIwMDktMTEtMjkgMjE6NTg6MTIg
VVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDI1IEBACistLVRFU1QtLQorVGVzdCBkaW8gcmF3IHN0
cmVhbSBlbmQgb2YgZmlsZQorLS1TS0lQSUYtLQorPD9waHAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCJk
aW8iKSkgcHJpbnQgInNraXAiOyA/PgorLS1GSUxFLS0KKzw/cGhwCisJJG9zdHlwZSA9ICJ3aW5kb3dz
IjsKKwlpZiAoc2hlbGxfZXhlYygid2hpY2ggdW5hbWUiKSkgeworCQkkb3N0eXBlID0gc2hlbGxfZXhl
YygidW5hbWUiKTsKKwl9CisJaWYgKCRvc3R5cGUgIT0gIndpbmRvd3MiKSB7CisJCSRmaWxlbmFtZSA9
ICJkaW8ucmF3Oi8vL2Rldi9udWxsIjsKKwl9IGVsc2UgeworCQkkZmlsZW5hbWUgPSAiZGlvLnJhdzov
L1xcRGV2aWNlXFxOdWxsIjsKKwl9CisJJGYgPSBmb3BlbigkZmlsZW5hbWUsICJyKyIpOworCWlmICgk
ZikgeworCQlpZiAoIWZlb2YoJGYpKSB7CisJCQllY2hvICJSYXcgZW5kIG9mIGZpbGUgcGFzc2VkIjsK
KwkJfQorCQlmY2xvc2UoJGYpOworCX0KKz8+CistLUVYUEVDVC0tCitSYXcgZW5kIG9mIGZpbGUgcGFz
c2VkCgpBZGRlZDogcGVjbC9kaW8vdHJ1bmsvdGVzdHMvZGlvX3Jhd19zdHJlYW1fMDA2LnBocHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvdGVzdHMvZGlvX3Jhd19zdHJlYW1fMDA2LnBocHQJICAgICAg
ICAgICAgICAgICAgICAgICAgKHJldiAwKQorKysgcGVjbC9kaW8vdHJ1bmsvdGVzdHMvZGlvX3Jhd19z
dHJlYW1fMDA2LnBocHQJMjAwOS0xMS0yOSAyMTo1ODoxMiBVVEMgKHJldiAyOTE0NTcpCkBAIC0wLDAg
KzEsMjUgQEAKKy0tVEVTVC0tCitUZXN0IGRpbyByYXcgc3RyZWFtIHNldCBibG9ja2luZworLS1TS0lQ
SUYtLQorPD9waHAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCJkaW8iKSkgcHJpbnQgInNraXAiOyA/Pgor
LS1GSUxFLS0KKzw/cGhwCisJJG9zdHlwZSA9ICJ3aW5kb3dzIjsKKwlpZiAoc2hlbGxfZXhlYygid2hp
Y2ggdW5hbWUiKSkgeworCQkkb3N0eXBlID0gc2hlbGxfZXhlYygidW5hbWUiKTsKKwl9CisJaWYgKCRv
c3R5cGUgIT0gIndpbmRvd3MiKSB7CisJCSRmaWxlbmFtZSA9ICJkaW8ucmF3Oi8vL2Rldi9udWxsIjsK
Kwl9IGVsc2UgeworCQkkZmlsZW5hbWUgPSAiZGlvLnJhdzovL1xcRGV2aWNlXFxOdWxsIjsKKwl9CisJ
JGYgPSBmb3BlbigkZmlsZW5hbWUsICJyKyIpOworCWlmICgkZikgeworCQlpZiAoc3RyZWFtX3NldF9i
bG9ja2luZygkZiwgMSkpIHsKKwkJCWVjaG8gIlNldCBibG9ja2luZyBwYXNzZWQiOworCQl9CisJCWZj
bG9zZSgkZik7CisJfQorPz4KKy0tRVhQRUNULS0KK1NldCBibG9ja2luZyBwYXNzZWQKCkFkZGVkOiBw
ZWNsL2Rpby90cnVuay90ZXN0cy9kaW9fcmF3X3N0cmVhbV8wMDcucGhwdAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNs
L2Rpby90cnVuay90ZXN0cy9kaW9fcmF3X3N0cmVhbV8wMDcucGhwdAkgICAgICAgICAgICAgICAgICAg
ICAgICAocmV2IDApCisrKyBwZWNsL2Rpby90cnVuay90ZXN0cy9kaW9fcmF3X3N0cmVhbV8wMDcucGhw
dAkyMDA5LTExLTI5IDIxOjU4OjEyIFVUQyAocmV2IDI5MTQ1NykKQEAgLTAsMCArMSwyMyBAQAorLS1U
RVNULS0KK1Rlc3QgZGlvX3JhdygpIGNhbGwKKy0tU0tJUElGLS0KKzw/cGhwIGlmICghZXh0ZW5zaW9u
X2xvYWRlZCgiZGlvIikpIHByaW50ICJza2lwIjsgPz4KKy0tRklMRS0tCis8P3BocAorCSRvc3R5cGUg
PSAid2luZG93cyI7CisJaWYgKHNoZWxsX2V4ZWMoIndoaWNoIHVuYW1lIikpIHsKKwkJJG9zdHlwZSA9
IHNoZWxsX2V4ZWMoInVuYW1lIik7CisJfQorCWlmICgkb3N0eXBlICE9ICJ3aW5kb3dzIikgeworCQkk
ZmlsZW5hbWUgPSAiL2Rldi9udWxsIjsKKwl9IGVsc2UgeworCQkkZmlsZW5hbWUgPSAiXFxEZXZpY2Vc
XE51bGwiOworCX0KKwkkZiA9IGRpb19yYXcoJGZpbGVuYW1lLCAicisiKTsKKwlpZiAoJGYpIHsKKwkJ
ZWNobyAiZGlvX3JhdyBwYXNzZWQiOworCQlmY2xvc2UoJGYpOworCX0KKz8+CistLUVYUEVDVC0tCitk
aW9fcmF3IHBhc3NlZAo=
--345a6ba7f55918e8e9a66e48b8d17a270406d57e--
cybersp...@php.net (=?utf-8?q?Melanie_Rhianna_Lewis?=)
11/29/2009 9:58:12 PM





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