Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 08 Apr 1999 13:37:56 -0500
From:      "Andrew J. Korty" <ajk@purdue.edu>
To:        freebsd-hackers@freebsd.org
Subject:   [PATCH] mount and umount support for mortal users
Message-ID:  <199904081837.NAA26342@poynting.physics.purdue.edu>

next in thread | raw e-mail | index | archive | help
------- =_aaaaaaaaaa0
Content-Type: text/plain; charset="us-ascii"
Content-ID: <26335.923596675.1@physics.purdue.edu>

These new versions of mount(8) and umount(8) are designed to be
installed set-uid root.  They behave as normal if invoked by root,
but act according to a configuration file otherwise.  Mortal users
(console users only if desired) are given permission to mount
certain devices on a fixed mount point.  This mount point must be
at least two levels deep, so that the owner and modes on the parent
directory can be changed so as to only allow access by the calling
user.  One or more filesystems may be specified for a given device.

I hope someone finds this useful enough to warrant a commit.  I've
submitted this patch via send-pr; see bin/11031.

Andrew J. Korty, Director     http://www.physics.purdue.edu/~ajk/
Physics Computer Network            85 73 1F 04 63 D9 9D 65       
Purdue University                   65 2E 7A A8 81 8C 45 75

------- =_aaaaaaaaaa0
Content-Type: application/x-patch
Content-ID: <26335.923596675.2@physics.purdue.edu>
Content-Description: mount and umount support for mortal users
Content-Transfer-Encoding: base64

SW5kZXg6IHNyYy9zYmluL21vdW50L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9q
ZWN0L2N2cy9QQ04vZnJlZWJzZC9zcmMvc2Jpbi9tb3VudC9NYWtlZmlsZSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xLjEuMgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1yMS4xLjEu
MiAtcjEuMwotLS0gTWFrZWZpbGUJMTk5OS8wMi8wMyAwMzowNDoyNgkxLjEuMS4yCisrKyBNYWtl
ZmlsZQkxOTk5LzA0LzA4IDE3OjU1OjMxCTEuMwpAQCAtNiw0ICs2LDEyIEBACiBNQU44PQltb3Vu
dC44CiAjIFdlIGRvIE5PVCBpbnN0YWxsIHRoZSBnZXRtbnRvcHRzLjMgbWFuIHBhZ2UuCisKKy5p
ZmRlZiBNT1JUQUxfTU9VTlQKK0JJTk9XTj0JCXJvb3QKK0JJTk1PREU9CTQ1NTUKK0NGTEFHUys9
CS1ETU9SVEFMCitTUkNTKz0JCWNmLmMgbW9ydGFsLmMKK01BTjU9CQltb3VudGNhcC41CisuZW5k
aWYKIAogLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgpJbmRleDogc3JjL3NiaW4vbW91bnQvY2YuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiBjZi5jCmRpZmYgLU4gY2YuYwotLS0gL2Rldi9udWxsCVRodSBB
cHIgIDggMDM6MDU6MDIgMTk5OQorKysgL3RtcC9jdnNrNTc0MTYJVGh1IEFwciAgOCAxMzoxNzoz
NiAxOTk5CkBAIC0wLDAgKzEsMTIxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MCwgMTk4
OSwgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv
cm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNp
bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUK
KyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRo
aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkg
b2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGxpbnQKK3N0YXRpYyBjb25zdCBjaGFyIHJj
c2lkW10gPQorCSIkSWQ6IGNmLmMsdiAxLjIgMTk5OS8wNC8wOCAxODowMjoxMyBhamsgRXhwICQi
OworI2VuZGlmIC8qIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxz
dGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXNleGl0cy5oPgorCisj
aW5jbHVkZSAiY2YuaCIKKyNpbmNsdWRlICJtb3J0YWwuaCIKKworc3RhdGljIGludAorQ2FwX0Vy
cm9ycyhpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmNhcCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlz
d2l0Y2ggKGVycm9yKSB7CisJY2FzZSAxOgorCQl3YXJueCgiJXM6ICVzOiAlczogdW5yZXNvbHZl
ZCBcInRjXCIgcmVmZXJlbmNlLCIKKwkJICAgICJjb250aW51aW5nIC4uLiIsIFBBVEhfQ0YsIG5h
bWUsIGNhcCk7CisJCWJyZWFrOworCWNhc2UgLTE6CisJCXJldHVybiAwOworCWNhc2UgLTI6CisJ
CWVycihFWF9PU0VSUiwgIiVzOiAlczogJXMiLCBQQVRIX0NGLCBuYW1lLCBjYXApOworCWNhc2Ug
LTM6CisJCWVycngoRVhfREFUQUVSUiwgIiVzOiAlczogcG9zc2libGUgXCJ0Y1wiIGxvb3AiLAor
CQkgICAgUEFUSF9DRiwgbmFtZSwgY2FwKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2NoYXIgKgor
R2V0X0Rldl9DYXAoY29uc3QgY2hhciAqZGV2KQoreworCWNoYXIgKmJhc2U7CisJY2hhciAqYnVm
OworCWNoYXIgKm5ldzsKKwlpbnQgcjsKKwljaGFyICpkYl9hcnJheVtdID0geyBQQVRIX0NGLCAo
Y2hhciAqKTAgfTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKwluZXcgPSBzdHJkdXAo
ZGV2KTsKKwlpZiAoIW5ldykKKwkJZXJyKEVYX09TRVJSLCBOVUxMKTsKKwliYXNlID0gc3RycmNo
cihuZXcsICcvJyk7CisJaWYgKGJhc2UpCisJCSsrYmFzZTsKKwllbHNlCisJCWJhc2UgPSBuZXc7
CisJaWYgKCdyJyA9PSAqYmFzZSkKKwkJKytiYXNlOworCXIgPSBjZ2V0ZW50KCZidWYsIGRiX2Fy
cmF5LCBiYXNlKTsKKwlmcmVlKG5ldyk7CisJcmV0dXJuIChyID09IDApID8gYnVmIDogTlVMTDsK
K30KKworaW50CitHZXRfU3RyKGNoYXIgKmJ1ZiwgY2hhciAqY2FwLCBjaGFyICoqc3RyKQorewor
ICAgICAgICByZXR1cm4gQ2FwX0Vycm9ycyhjZ2V0c3RyKGJ1ZiwgY2FwLCBzdHIpLCBjYXAsICpz
dHIpOworfQorCitjaGFyICoKK1BhcmVudChjaGFyICpzdHIpCit7CisJc3RhdGljIGNoYXIgKnI7
CisJY2hhciAqcDsKKworCWlmICghc3RyKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAociAhPSBzdHIp
IHsKKwkJaWYgKHIpCisJCQlmcmVlKHIpOworCQlyID0gc3RyZHVwKHN0cik7CisJCWlmICghcikK
KwkJCWVycihFWF9PU0VSUiwgTlVMTCk7CisJfQorCXAgPSBzdHJyY2hyKHIsICcvJyk7CisJaWYg
KCFwIHx8IHAgPT0gc3RyKQorCQllcnJ4KEVYX0RBVEFFUlIsICIlczogbW91bnQgcG9pbnQgbXVz
dCBoYXZlIGF0IgorCQkgICAgIiBsZWFzdCB0d28gbGV2ZWxzIiwgc3RyKTsKKwkqcCsrID0gJ1ww
JzsKKwlpZiAoISpwKQorCQkodm9pZCkgUGFyZW50KHIpOworCXJldHVybiByOworfQpJbmRleDog
c3JjL3NiaW4vbW91bnQvY2YuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBjZi5oCmRpZmYgLU4gY2Yu
aAotLS0gL2Rldi9udWxsCVRodSBBcHIgIDggMDM6MDU6MDIgMTk5OQorKysgL3RtcC9jdnNDNTc0
MTYJVGh1IEFwciAgOCAxMzoxNzozNiAxOTk5CkBAIC0wLDAgKzEsNDIgQEAKKy8qLQorICogQ29w
eXJpZ2h0IChjKSAxOTgwLCAxOTg5LCAxOTkzLCAxOTk0CisgKglUaGUgUmVnZW50cyBvZiB0aGUg
VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1
c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr
bm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl
ZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBj
b250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAg
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgUEFUSF9D
RgkJIi9ldGMvbW91bnRjYXAiCisjZGVmaW5lIENGX0NPTU1PTgkib3B0cyIKKyNkZWZpbmUgQ0Zf
Q09OU09MRQkiY28iCisjZGVmaW5lIENGX0ZTVFlQRQkiZnMiCisjZGVmaW5lIENGX05PREUJIm9u
IgorCitjaGFyICpHZXRfRGV2X0NhcChjb25zdCBjaGFyICopOworY2hhciAqUGFyZW50KGNoYXIg
Kik7CitpbnQgR2V0X1N0cihjaGFyICosIGNoYXIgKiwgY2hhciAqKik7CkluZGV4OiBzcmMvc2Jp
bi9tb3VudC9tb3J0YWwuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBtb3J0YWwuYwpkaWZmIC1OIG1v
cnRhbC5jCi0tLSAvZGV2L251bGwJVGh1IEFwciAgOCAwMzowNTowMiAxOTk5CisrKyAvdG1wL2N2
c3g1NzQxNglUaHUgQXByICA4IDEzOjE3OjM2IDE5OTkKQEAgLTAsMCArMSwxNTYgQEAKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAxOTgwLCAxOTg5LCAxOTkzLCAxOTk0CisgKglUaGUgUmVnZW50cyBv
ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl
cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp
bmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl
dmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5k
IGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJz
aXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
CisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
bGludAorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9CisJIiRJZDogbW9ydGFsLmMsdiAxLjMg
MTk5OS8wNC8wOCAxODowMjoxMyBhamsgRXhwICQiOworI2VuZGlmIC8qIG5vdCBsaW50ICovCisK
KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVk
ZSA8ZXJyLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSA8c3lzZXhpdHMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNm
LmgiCisjaW5jbHVkZSAibW9ydGFsLmgiCisKK2V4dGVybiBjaGFyICpjYXRvcHQoY2hhciAqLCBj
b25zdCBjaGFyICopOworZXh0ZXJuIGludCBkZWJ1ZzsKKworbW9ydGFsX21vdW50ZnMoc3BlYywg
bmFtZSwgZmxhZ3MsIG9wdGlvbnMsIHVpZCkKKwljb25zdCBjaGFyICpzcGVjLCAqbmFtZSwgKm9w
dGlvbnM7CisJaW50IGZsYWdzLCB1aWQ7Cit7CisJY2hhciAqY2FwOwkJLyogY2FwIGtleSBmb3Ig
YSBmaWxlc3lzdGVtJ3Mgb3B0aW9ucyAqLworCWNoYXIgKmNmOwkJLyogbW91bnQuY2YgZW50cnkg
Ki8KKwljaGFyICpjb21tb25fb3B0czsJLyogY29tbW9uIGZpbGVzeXN0ZW0gb3B0aW9ucyAqLwor
CWNoYXIgKmNvbnNvbGU7CQkvKiBmaWxlIHdob3NlIG93bmVyIGlzIG9uIGNvbnNvbGUgKi8KKwlj
aGFyICpkaXI7CQkvKiBwYXJlbnQgZGlyZWN0b3J5IG9mIG1vdW50IHBvaW50ICovCisJY2hhciAq
ZnNfb3B0czsJCS8qIHRoaXMgZmlsZXN5c3RlbSdzIG9wdGlvbnMgKi8KKwljaGFyICpmc19vcHRz
X3g7CS8qIGV4cGFuZGVkIGZpbGVzeXN0ZW0gb3B0aW9ucyAqLworCWNoYXIgKm5vZGU7CQkvKiBt
b3VudCBwb2ludCAqLworCWNoYXIgKnRtcF9wOwkJLyogdGVtcCBmaWxlIGZvciBlcnJvciBsb2cg
Ki8KKwljaGFyICp0eXBlOwkJLyogY3VycmVudCBmc3R5cGUgd2UncmUgdHJ5aW5nICovCisJY2hh
ciAqdHlwZV9saXN0OwkvKiBsaXN0IG9mIGZzdHlwZXMgdG8gdHJ5ICovCisJaW50IGVycl9mZDsJ
CS8qIHJlZGlyZWN0ZWQgU1RERVJSX0ZJTEVOTyAqLworCWludCBuYnl0ZXM7CQkvKiBudW1iZXIg
b2YgYnl0ZXMgcmVhZCBmcm9tIGxvZ2ZpbGUgKi8KKwlpbnQgcjsJCQkvKiByZXR1cm4gdmFsdWUg
ZnJvbSBtb3VudGZzICovCisJY2hhciBlcnJfYnVmW0JVRlNJWl07CS8qIGZvciBkdW1waW5nIGVy
cm9yIGZpbGUgKi8KKwljaGFyIHRtcFtdID0gRVJSX1RFTVBMOwkvKiBlcnJvciBsb2dmaWxlIHRl
bXBsYXRlICovCisKKwljZiA9IEdldF9EZXZfQ2FwKHNwZWMpOworCWlmICghY2YpCS8qIG5vdCBp
biBtb3VudGNhcCwgdGhlcmVmb3JlIG5vdCBwZXJtaXR0ZWQgKi8KKwkJZXJyYyhFWF9OT1BFUk0s
IEVQRVJNLCAiJXMiLCBzcGVjKTsKKwkvKgorCSAqIElzIHVzZXIgb24gY29uc29sZT8gIElmIG5v
dCwgYWxsb3cgYW55Ym9keSEKKwkgKi8KKwlpZiAoR2V0X1N0cihjZiwgQ0ZfQ09OU09MRSwgJmNv
bnNvbGUpKSB7CisJCXN0cnVjdCBzdGF0IHNidWY7CisKKwkJaWYgKC0xID09IHN0YXQoY29uc29s
ZSwgJnNidWYpKQorCQkJZXJyKEVYX09TRklMRSwgIiVzIiwgY29uc29sZSk7CisJCWlmIChkZWJ1
ZykKKwkJCXdhcm54KCJydWlkICVkLCAlcyBvd25lZCBieSAlZCIsIHVpZCwgY29uc29sZSwKKwkJ
CSAgICBzYnVmLnN0X3VpZCk7CisJCWlmICh1aWQgIT0gc2J1Zi5zdF91aWQpCisJCQllcnJ4KEVY
X05PUEVSTSwKKwkJCSAgICAieW91IG11c3QgYmUgb24gY29uc29sZSB0byBtb3VudCB0aGlzIGRl
dmljZSIpOworCX0KKwlpZiAoIUdldF9TdHIoY2YsIENGX05PREUsICZub2RlKSkKKwkJbm9kZSA9
IE5VTEw7CisJaWYgKCFHZXRfU3RyKGNmLCBDRl9DT01NT04sICZjb21tb25fb3B0cykpCisJCWNv
bW1vbl9vcHRzID0gREVGQVVMVF9PUFRTOworCWlmICghR2V0X1N0cihjZiwgQ0ZfRlNUWVBFLCAm
dHlwZV9saXN0KSkKKwkJdHlwZV9saXN0ID0gREVGQVVMVF9GU1RZUEU7CisJZXJyX2ZkID0gZHVw
KFNUREVSUl9GSUxFTk8pOworCSh2b2lkKSBjbG9zZShTVERFUlJfRklMRU5PKTsKKwl0bXBfcCA9
IG1rdGVtcCh0bXApOworCWlmICh0bXBfcCkKKwkJKHZvaWQpIG9wZW4odG1wX3AsIE9fUkRXUnxP
X0NSRUFULCAwNjAwKTsKKwlpZiAoZGVidWcpCisJCXdhcm54KCJlcnJvciBsb2c6ICVzIiwgdG1w
X3ApOworCXdoaWxlICh0eXBlID0gc3Ryc2VwKCZ0eXBlX2xpc3QsICIsIikpIHsKKwkJaWYgKC0x
ID09IGFzcHJpbnRmKCZjYXAsICIlc19vcHRzIiwgdHlwZSkpCisJCQllcnIoRVhfT1NFUlIsIE5V
TEwpOworCQlpZiAoZGVidWcpCisJCQl3YXJueCgibG9va2luZyB1cCAlcyIsIGNhcCk7CisJCWZz
X29wdHNfeCA9IE5VTEw7CisJCWlmIChHZXRfU3RyKGNmLCBjYXAsICZmc19vcHRzKSkgeworCQkJ
LyoKKwkJCSAqIFRoaXMgaGFjayBsZXRzIHRoZSB1aWQgYmUgc3Vic3RpdHVlZAorCQkJICogZm9y
ICVkIGluIHRoZSBjb25maWcgZmlsZS4gIFdlJ2xsCisJCQkgKiBnZW5lcmFsaXplIHRoaXMgY29k
ZSB3aGVuIHdlIGhhdmUgYQorCQkJICogbmVlZC4KKwkJCSAqLworCQkJaWYgKGRlYnVnKQorCQkJ
CXdhcm54KCJwYXJzaW5nICVzIiwgZnNfb3B0cyk7CisJCQlpZiAoLTEgPT0gYXNwcmludGYoJmZz
X29wdHNfeCwgZnNfb3B0cywgdWlkKSkKKwkJCQllcnIoRVhfT1NFUlIsIE5VTEwpOworCQkJZnJl
ZShmc19vcHRzKTsKKwkJfQorCQlmcmVlKGNhcCk7CisJCW9wdGlvbnMgPSBjYXRvcHQoZnNfb3B0
c194LCBjb21tb25fb3B0cyk7CisJCWlmIChkZWJ1ZykKKwkJCXdhcm54KCIlcyAtdCAlcyAtbyAl
cyAlcyAlcyIsCisJCQkgICAgUEFUSF9NT1VOVCwgdHlwZSwgb3B0aW9ucywKKwkJCSAgICBzcGVj
LCBub2RlID8gbm9kZSA6IG5hbWUpOworCQlpZiAoMCA9PSBzdHJjbXAodHlwZSwgREVGQVVMVF9G
U1RZUEUpKQorCQkJdHlwZSA9ICJ1ZnMiOworCQlyID0gbW91bnRmcyh0eXBlLCBzcGVjLCBuYW1l
LCBmbGFncywgb3B0aW9ucywgTlVMTCk7CisJCWlmIChyKQorCQkJY29udGludWU7CisJCWRpciA9
IHN0cmR1cChub2RlKTsKKwkJaWYgKCFkaXIpCisJCQllcnIoRVhfT1NFUlIsIE5VTEwpOworCQlk
aXIgPSBQYXJlbnQobm9kZSk7CisJCWlmICgtMSA9PSBjaG93bihkaXIsIHVpZCwgLTEpIHx8IC0x
ID09IGNobW9kKGRpciwgMDcwMCkpCisJCQllcnIoRVhfT1NFUlIsICIlcyIsIGRpcik7CisJCWZy
ZWUoZGlyKTsKKwkJcmV0dXJuIHI7CisJfQorCWlmICh0bXBfcCkgeworCQkodm9pZCkgbHNlZWso
U1RERVJSX0ZJTEVOTywgMEwsIFNFRUtfU0VUKTsKKwkJd2hpbGUgKG5ieXRlcyA9IHJlYWQoU1RE
RVJSX0ZJTEVOTywgZXJyX2J1Ziwgc2l6ZW9mIGVycl9idWYpKQorCQkJKHZvaWQpIHdyaXRlKGVy
cl9mZCwgZXJyX2J1ZiwgbmJ5dGVzKTsKKwkJKHZvaWQpIGNsb3NlKFNUREVSUl9GSUxFTk8pOwor
CQkodm9pZCkgdW5saW5rKHRtcF9wKTsKKwl9CisJcmV0dXJuIHI7Cit9CkluZGV4OiBzcmMvc2Jp
bi9tb3VudC9tb3J0YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBtb3J0YWwuaApkaWZmIC1OIG1v
cnRhbC5oCi0tLSAvZGV2L251bGwJVGh1IEFwciAgOCAwMzowNTowMiAxOTk5CisrKyAvdG1wL2N2
c2g1NzQxNglUaHUgQXByICA4IDEzOjE3OjM2IDE5OTkKQEAgLTAsMCArMSw0MiBAQAorLyotCisg
KiBDb3B5cmlnaHQgKGMpIDE5ODAsIDE5ODksIDE5OTMsIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9m
IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz
IG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu
ZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2
ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQg
aXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNp
dHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUK
KyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmluZSBQ
QVRIX01PVU5UCSIvc2Jpbi9tb3VudCIKKyNkZWZpbmUgUEFUSF9VTU9VTlQJIi9zYmluL3Vtb3Vu
dCIKKworI2RlZmluZSBFUlJfVEVNUEwJIi90bXAvbW9ydGFsWFhYWFhYIgorCisjZGVmaW5lIERF
RkFVTFRfT1BUUwkibm9kZXYsbm9leGVjLG5vc3VpZCxub3N5bWZvbGxvdyIKKyNkZWZpbmUgREVG
QVVMVF9GU1RZUEUJImRlZmF1bHQiCisKK3ZvaWQgVXNhZ2Uodm9pZCk7CkluZGV4OiBzcmMvc2Jp
bi9tb3VudC9tb3VudC44Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0L2N2cy9QQ04vZnJl
ZWJzZC9zcmMvc2Jpbi9tb3VudC9tb3VudC44LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4x
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXIxLjEuMS4xIC1yMS4yCi0tLSBtb3Vu
dC44CTE5OTgvMTIvMDMgMTU6Mzg6NTIJMS4xLjEuMQorKysgbW91bnQuOAkxOTk5LzA0LzA4IDE3
OjU1OjMxCTEuMgpAQCAtMzA3LDYgKzMwNywzNiBAQAogVGhlIG9wdGlvbnMgc3BlY2lmaWMgdG8g
TkZTIGZpbGVzeXN0ZW1zIGFyZSBkZXNjcmliZWQgaW4gdGhlCiAuWHIgbW91bnRfbmZzIDgKIG1h
bnVhbCBwYWdlLgorLlNoIFVTSU5HIE1PVU5UIEFTIEEgTk9OLVJPT1QgVVNFUgorSWYgdGhlIHNv
dXJjZXMgaGF2ZSBiZWVuIGNvbXBpbGVkIHdpdGggdGhlIFxzLTFNT1JUQUxcczAgb3B0aW9uLAor
dGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGNhbiBhcnJhbmdlIGZvciBub24tcm9vdCB1c2VycyB0
byBtb3VudAorZmlsZXN5c3RlbXMgYmFzZWQgb24gYSBzZXQgb2YgZ3VpZGVsaW5lcyBpbiB0aGUg
L2V0Yy9tb3VudGNhcCBmaWxlLgorVGhlc2UgZ3VpZGVsaW5lcyBpbmNsdWRlIGEgbW91bnQgcG9p
bnQgdGhhdCB3aWxsIGJlIHVzZWQgcmVnYXJkbGVzcworb2YgdGhlIHVzZXIncyBzcGVjaWZpY2F0
aW9uIChvciB0aGUKKy5YciBmc3RhYiA1CitzcGVjaWZpY2F0aW9uKSwgYSBmaWxlIHdob3NlIG93
bmVyc2hpcCB3aWxsIGRldGVybWluZSB3aGV0aGVyIHRoZQordXNlciBpcyBvbiBjb25zb2xlLCBh
bmQgYSBsaXN0IG9mIGZpbGVzeXN0ZW1zIHRvIGF0dGVtcHQgdG8gbW91bnQKK2Zyb20gdGhlIGRl
dmljZS4KKy5QcAorVGhlIG1vdW50IHBvaW50IG11c3QgYmUgYXQgbGVhc3QgYSB0d28gbGV2ZWwg
ZGlyZXRvcnkgdG8gd29yaywKK3NpbmNlIHRoZSBvd25lciBvZiB0aGUgcGFyZW50IGRpcmVjdG9y
eSBvZiB0aGUgbW91bnQgcG9pbnQgaXMKK2NoYW5nZWQgdG8gdGhlIGNhbGxpbmcgdXNlciwgYW5k
IGl0cyBwZXJtaXNzaW9ucyBhcmUgY2hhbmdlZCB0bworMDcwMC4gIFdoZW4gdGhlIGRldmljZSBp
cyB1bm1vdW50ZWQsIHRoZSBvd25lcnNoaXAgaXMgY2hhbmdlZCBiYWNrCit0byByb290IGFuZCB0
aGUgcGVybWlzc2lvbnMgYXJlIGtlcHQgYXQgMDcwMC4KKy5QcAorVGhpcyBmZWF0dXJlIGlzIG1h
aW5seSBkZXNpZ25lZCB0byBnaXZlIGNvbnNvbGUgdXNlcnMgZXhjbHVzaXZlCithY2Nlc3MgdG8g
cmVtb3ZhYmxlIG1lZGlhIGRldmljZXMgc3VjaCBhcyBmbG9wcHkgZGlza3MgYW5kIENELVJPTXMs
CitidXQgaXQgY2FuIGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzIGFzIHdlbGwuICBHcmFudGlu
ZyBhY2Nlc3MKK3RoaXMgd2F5IGlzIG1vcmUgZmxleGlibGUgdGhhbiBjaGFuZ2luZyBwZXJtaXNz
aW9ucyBhbmQgb3duZXJzaGlwcworb24gdGhlIHNwZWNpYWwgZGV2aWNlIGFuZCBtb3JlIHNlY3Vy
ZSB0aGFuIG1ha2luZyB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYworbW91bnQgY29tbWFuZCAoXGZJ
ZS5nLixcZlAKKy5YciBtb3VudF9tc2RvcyA4ICkKK3NldC11aWQgcm9vdC4gIFN1cHBvcnQgZm9y
IHRoaXMgZmVhdHVyZSBjYW4gYmUgYWRkZWQgYnkgc2V0dGluZwordGhlIFxzLTFNT1JUQUxfTU9V
TlRcczAgdmFyaWFibGUgaW4gXGZJL2V0Yy9tYWtlLmNvbmZcZlAgYmVmb3JlCitidWlsZGluZwor
LlhyIG1vdW50IDgKK2FuZAorLlhyIHVtb3VudCA4IC4KIC5TaCBESUFHTk9TVElDUwogVmFyaW91
cywgbW9zdCBvZiB0aGVtIGFyZSBzZWxmLWV4cGxhbmF0b3J5LgogLlBwCkBAIC0zMzIsNiArMzYy
LDcgQEAKIC5YciBtb3VudCAyICwKIC5YciB2ZnNsb2FkIDMgLAogLlhyIGZzdGFiIDUgLAorLlhy
IG1vdW50Y2FwIDUgLAogLlhyIG1vdW50X2NkOTY2MCA4ICwKIC5YciBtb3VudF9kZXZmcyA4ICwK
IC5YciBtb3VudF9mZGVzYyA4ICwKSW5kZXg6IHNyYy9zYmluL21vdW50L21vdW50LmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL3Byb2plY3QvY3ZzL1BDTi9mcmVlYnNkL3NyYy9zYmluL21vdW50L21v
dW50LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIKZGlmZiAtdSAtcjEuMS4xLjEgLXIxLjIKLS0tIG1vdW50LmMJMTk5OC8xMi8wMyAxNTozODo1
MgkxLjEuMS4xCisrKyBtb3VudC5jCTE5OTkvMDMvMzAgMTU6MTI6MDkJMS4yCkBAIC0xMjUsNiAr
MTI1LDkgQEAKIAlwaWRfdCBwaWQ7CiAJaW50IGFsbCwgY2gsIGksIGluaXRfZmxhZ3MsIG1udHNp
emUsIHJ2YWw7CiAJY2hhciAqb3B0aW9uczsKKyNpZmRlZiBNT1JUQUwKKwlpbnQgdWlkOworI2Vu
ZGlmIC8qIGRlZmluZWQoTU9SVEFMKSAqLwogCiAJYWxsID0gaW5pdF9mbGFncyA9IDA7CiAJb3B0
aW9ucyA9IE5VTEw7CkBAIC0xNzUsNiArMTc4LDEwIEBACiAJYXJnYyAtPSBvcHRpbmQ7CiAJYXJn
diArPSBvcHRpbmQ7CiAKKyNpZmRlZiBNT1JUQUwKKwl1aWQgPSBnZXR1aWQoKTsKKyNlbmRpZiAv
KiBkZWZpbmVkKE1PUlRBTCkgKi8KKwogI2RlZmluZQlCQURUWVBFKHR5cGUpCQkJCQkJCVwKIAko
c3RyY21wKHR5cGUsIEZTVEFCX1JPKSAmJgkJCQkJXAogCSAgICBzdHJjbXAodHlwZSwgRlNUQUJf
UlcpICYmIHN0cmNtcCh0eXBlLCBGU1RBQl9SUSkpCkBAIC0xODIsNiArMTg5LDkgQEAKIAlydmFs
ID0gMDsKIAlzd2l0Y2ggKGFyZ2MpIHsKIAljYXNlIDA6CisjaWZkZWYgTU9SVEFMCisJCXNldGV1
aWQodWlkKTsKKyNlbmRpZiAvKiBkZWZpbmVkKE1PUlRBTCkgKi8KIAkJaWYgKChtbnRzaXplID0g
Z2V0bW50aW5mbygmbW50YnVmLCBNTlRfTk9XQUlUKSkgPT0gMCkKIAkJCWVycigxLCAiZ2V0bW50
aW5mbyIpOwogCQlpZiAoYWxsKSB7CkBAIC0yMjcsNiArMjM3LDEzIEBACiAJCQkJbW50ZnJvbW5h
bWUgPSBmcy0+ZnNfc3BlYzsKIAkJCWVsc2UKIAkJCQltbnRmcm9tbmFtZSA9IG1udGJ1Zi0+Zl9t
bnRmcm9tbmFtZTsKKyNpZmRlZiBNT1JUQUwKKwkJCWlmICh1aWQpCisJCQkJcnZhbCA9IG1vcnRh
bF9tb3VudGZzKG1udGZyb21uYW1lLAorCQkJCSAgICBtbnRidWYtPmZfbW50b25uYW1lLCBpbml0
X2ZsYWdzLAorCQkJCSAgICBvcHRpb25zLCB1aWQpOworCQkJZWxzZQorI2VuZGlmIC8qIGRlZmlu
ZWQoTU9SVEFMKSAqLwogCQkJcnZhbCA9IG1vdW50ZnMobW50YnVmLT5mX2ZzdHlwZW5hbWUsIG1u
dGZyb21uYW1lLAogCQkJICAgIG1udGJ1Zi0+Zl9tbnRvbm5hbWUsIGluaXRfZmxhZ3MsIG9wdGlv
bnMsIDApOwogCQkJYnJlYWs7CkBAIC0yMzgsNiArMjU1LDEyIEBACiAJCWlmIChCQURUWVBFKGZz
LT5mc190eXBlKSkKIAkJCWVycngoMSwgIiVzIGhhcyB1bmtub3duIGZpbGUgc3lzdGVtIHR5cGUi
LAogCQkJICAgICphcmd2KTsKKyNpZmRlZiBNT1JUQUwKKwkJaWYgKHVpZCkKKwkJCXJ2YWwgPSBt
b3J0YWxfbW91bnRmcyhmcy0+ZnNfc3BlYywgZnMtPmZzX2ZpbGUsCisJCQkgICAgaW5pdF9mbGFn
cywgb3B0aW9ucywgdWlkKTsKKwkJZWxzZQorI2VuZGlmIC8qIGRlZmluZWQoTU9SVEFMKSAqLwog
CQlydmFsID0gbW91bnRmcyhmcy0+ZnNfdmZzdHlwZSwgZnMtPmZzX3NwZWMsIGZzLT5mc19maWxl
LAogCQkgICAgaW5pdF9mbGFncywgb3B0aW9ucywgZnMtPmZzX21udG9wcyk7CiAJCWJyZWFrOwpA
QCAtMjQ5LDYgKzI3MiwxMiBAQAogCQkgKi8KIAkJaWYgKHZmc2xpc3QgPT0gTlVMTCAmJiBzdHJw
YnJrKGFyZ3ZbMF0sICI6QCIpICE9IE5VTEwpCiAJCQl2ZnN0eXBlID0gIm5mcyI7CisjaWZkZWYg
TU9SVEFMCisJCWlmICh1aWQpCisJCQlydmFsID0gbW9ydGFsX21vdW50ZnMoYXJndlswXSwgYXJn
dlsxXSwgaW5pdF9mbGFncywKKwkJCSAgICBvcHRpb25zLCB1aWQpOworCQllbHNlCisjZW5kaWYg
LyogZGVmaW5lZChNT1JUQUwpICovCiAJCXJ2YWwgPSBtb3VudGZzKHZmc3R5cGUsCiAJCSAgICBh
cmd2WzBdLCBhcmd2WzFdLCBpbml0X2ZsYWdzLCBvcHRpb25zLCBOVUxMKTsKIAkJYnJlYWs7Cklu
ZGV4OiBzcmMvc2Jpbi9tb3VudC9tb3VudGNhcC41Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IG1vdW50
Y2FwLjUKZGlmZiAtTiBtb3VudGNhcC41Ci0tLSAvZGV2L251bGwJVGh1IEFwciAgOCAwMzowNTow
MiAxOTk5CisrKyAvdG1wL2N2c2w1NzQxNglUaHUgQXByICA4IDEzOjE3OjM2IDE5OTkKQEAgLTAs
MCArMSwxMTYgQEAKKy5cIiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTEsIDE5OTMKKy5cIglUaGUg
UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy5cIgorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBtZXQ6Cisu
XCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisuXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz
IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKy5cIiAgICBtdXN0
IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisuXCIJVGhpcyBwcm9kdWN0
IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorLlwiCUNh
bGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorLlwiIDQuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisuXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisuXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorLlwiIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisuXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisuXCIgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKy5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworLlwiIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorLlwi
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCisuXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorLlwiIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKKy5cIiBTVUNIIERBTUFHRS4KKy5cIgorLlwiCSRJZDogbW91bnRjYXAuNSx2IDEuMSAxOTk5
LzA0LzA4IDE3OjU1OjMyIGFqayBFeHAgJAorLlwiICIKKy5EZCBBcHJpbCA4LCAxOTk5CisuRHQg
TU9VTlRDQVAgNQorLk9zIEZyZWVCU0QgMy4yCisuXCIgdHVybiBvZmYgaHlwaGVuYXRpb24KKy5o
eW0gOTk5CisuU2ggTkFNRQorLk5tIG1vdW50Y2FwCisuTmQgbW91bnQvdW1vdW50IGNvbmZpZ3Vy
YXRpb24gZGF0YWJhc2UgZm9yIG5vbi1yb290IHVzZXJzCisuU2ggU1lOT1BTSVMKKy5ObSBtb3Vu
dGNhcAorLlNoIERFU0NSSVBUSU9OCitUaGUKKy5ObQorZmlsZSBpcyBhIHNpbXBsaWZpZWQgdmVy
c2lvbiBvZiB0aGUKKy5YciB0ZXJtY2FwIDUKK2RhdGEgYmFzZSB1c2VkIHRvIGRlc2NyaWJlIGhv
dworLlhyIG1vdW50IDgKK2FuZAorLlhyIHVtb3VudCA4CitiZWhhdmUgd2hlbiBjYWxsZWQgYnkg
bm9uLXJvb3QgdXNlcnMsIHByb3ZpZGluZyB0aGVzZSBwcm9ncmFtcyBoYXZlIGJlZW4KK2NvbXBp
bGVkIHdpdGggdGhlIFxzLTFNT1JUQUxcczAgZmxhZyBzZXQuICBUaGlzIGZlYXR1cmUgaXMgcHJp
bWFyaWx5CitkZXNpZ25lZCB0byBhbGxvdyBjb25zb2xlIHVzZXJzIHRvIG1vdW50IHJlbW92YWJs
ZSBkZXZpY2VzLiAgVGhlCisuTm0KK2ZpbGUgYWxsb3dzIHRoZSBzdXBlci11c2VyIHRvIHNldCBm
b3IgYSBnaXZlbiBkZXZpY2UgYSBmaXhlZAorbW91bnQgcG9pbnQsIGEgbGlzdCBvZiBmaWxlc3lz
dGVtcyB0byB0cnkgYW5kIHRoZWlyIG9wdGlvbnMsIGFuZAorYSBmaWxlIHdob3NlIG93bmVyc2hp
cCB3aWxsIGRldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIGlzIG9uIGNvbnNvbGUuCitUaGUgXGZC
dGM9XGZQIG9wdGlvbiBpcyBhbHNvIHByb3ZpZGVkIGZvciBzdWJzdGl0dXRpb24uCisuU2ggQ0FQ
QUJJTElUSUVTCitSZWZlciB0bworLlhyIHRlcm1jYXAgNQorZm9yIGEgZGVzY3JpcHRpb24gb2Yg
dGhlIGZpbGUgbGF5b3V0LgorLkJsIC1jb2x1bW4gTmFtZXh4IERlZmF1bHQKKy5JdCBTeSBOYW1l
CVR5cGUJRGVzY3JpcHRpb24KKy5JdCAiZnMJc3RyCWNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZp
bGVzeXN0ZW1zIHRvIHRyeSIKKy5JdCAib24Jc3RyCW1vdW50IHBvaW50IChvdmVycmlkZXMgYW55
IG90aGVyIHNwZWNpZmljYXRpb24pIgorLkl0ICJ0YwlzdHIJdGFibGUgY29udGludWF0aW9uIgor
LkVsCisuUHAKK0FueSB2YWxpZCBmaWxlc3lzdGVtIG5hbWUgKFxmSWUuZy4sXGZQIG1zZG9zLCBj
ZDk2NjAsIFxmSWV0Yy5cZlApCittYXkgYmUgbGlzdGVkIGluIGFuIFxmQmZzPVxmUCBlbnRyeS4g
IElmIHRoZSB3b3JkIFxmSWRlZmF1bHRcZlAgaXMKK3VzZWQsCisuWHIgbW91bnQgOCAncworZGVm
YXVsdCBmaWxlc3lzdGVtIChjdXJyZW50bHkgXGZJdWZzXGZQKSBpcyB1c2VkLgorLlBwCitGb3Ig
ZWFjaCBmaWxlc3lzdGVtCitzcGVjaWZpZWQsIHRoZXJlIG1heSBiZSBhbiBlbnRyeSBvZiBcZihC
SWZzXGZQXGZCX29wdHNcZlAsIHdoZXJlCitcZklmc1xmUCBpcyB0aGUgbmFtZSBvZiB0aGUgZmls
ZXN5c3RlbSBhcyBpdCBhcHBlYXJzIGluIHRoZSBsaXN0LgorV2hlcmV2ZXIgdGhlIHN0cmluZyBc
ZkklZFxmUCBhcHBlYXJzIGluIHRoaXMgc3RyaW5nLCBpdCB3aWxsIGJlCityZXBsYWNlZCBieSB0
aGUgY2FsbGluZyB1c2VyJ3MgdWlkLgorLlBwCitBIHNwZWNpZmllZCBtb3VudCBwb2ludCBtdXN0
IGJlIGF0IGxlYXN0IHR3byBsZXZlbHMgZGVlcCBzbyB0aGF0CisuWHIgbW91bnQgOAorY2FuIHNl
dCB0aGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucyBvZiB0aGUgbW91bnQgcG9pbnQncyBwYXJl
bnQKK2RpcmVjdG9yeSBzdWNoIHRoYXQgb25seSB0aGUgY2FsbGluZyB1c2VyIGNhbiBhY2Nlc3Mg
dGhlIG1vdW50ZWQKK2ZpbGVzeXN0ZW0uCisuU2ggRVhBTVBMRQorVGhlIGZvbGxvd2luZyBleGFt
cGxlIHdpbGwgYWxsb3cgYSB1c2VyIHRvIGFjY2VzcyBcZkkvZGV2L2Zsb3BweVxmUCwKK2Fsd2F5
cyBtb3VudGluZyBpdCBvbiBcZkkvY29uc29sZS9mbG9wcHlcZlAuICBUaGUgXGZJLXVcZlAgYW5k
CitcZkktbVxmUCBvcHRpb25zIHdpbGwgYmUgcGFzc2VkIHRvCisuWHIgbW91bnRfbXNkb3MgLAor
c2V0dGluZyB0aGUgb3duZXJzaGlwIG9uIGVhY2ggZmlsZSB0byB0aGUgY2FsbGluZyB1c2VyIGFu
ZCB0aGUKK3Blcm1pc3Npb25zIHRvIDA3MDAuICBUaGUgZmlsZXN5c3RlbSBvbiB0aGUgZmxvcHB5
IGNvdWxkIGJlIGFueSBvZgorXGZJbXNkb3MsIGV4dDJmcyxcZlAgb3IgXGZJdWZzXGZQLCBhbmQg
dGhlIG1vdW50IHdvdWxkIHN1Y2NlZWQuCitUaGUgbW91bnQgd2lsbCBvbmx5IGJlIHBlcm1pdHRl
ZCBpZiBcZkkvZGV2L2NvbnNvbGVcZlAgaXMgb3duZWQgYnkKK3RoZSBjYWxsaW5nIHVzZXIuICBB
ZnRlciB0aGUgbW91bnQgdGFrZXMgcGxhY2UsIFxmSS9jb25zb2xlXGZQIHdpbGwKK2JlIG93bmVk
IGJ5IHRoZSBjYWxsaW5nIHVzZXIgYW5kIG1vZGUgMDcwMC4KKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0
IGluZGVudAorY29tbW9uOlxcCisgICAgICAgIDpjbz0vZGV2L2NvbnNvbGU6XFwKKyAgICAgICAg
OmNkOTY2MF9vcHRzPXJkb25seTpcXAorICAgICAgICA6bXNkb3Nfb3B0cz0tdT0lZCwtbT03MDA6
CitmbG9wcHk6XFwKKyAgICAgICAgOmZzPW1zZG9zLGV4dDJmcyxkZWZhdWx0OlxcCisgICAgICAg
IDpvbj0vY29uc29sZS9mbG9wcHk6XFwKKyAgICAgICAgOnRjPWNvbW1vbjoKKy5FZAorLlNoIFNF
RSBBTFNPCisuWHIgbW91bnQgOCAsCisuWHIgdW1vdW50IDggLgorLlNoIEhJU1RPUlkKK1RoZQor
Lk5tCitmaWxlIGZvcm1hdCBhcHBlYXJlZCBpbiBGcmVlQlNEIDMuMi4KSW5kZXg6IHNyYy9zYmlu
L3Vtb3VudC9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdC9jdnMvUENOL2Zy
ZWVic2Qvc3JjL3NiaW4vdW1vdW50L01ha2VmaWxlLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEu
MS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXIxLjEuMS4xIC1yMS4yCi0tLSBN
YWtlZmlsZQkxOTk4LzEyLzAzIDE1OjM4OjU4CTEuMS4xLjEKKysrIE1ha2VmaWxlCTE5OTkvMDMv
MzAgMTU6MTI6MzUJMS4yCkBAIC04LDQgKzgsMTEgQEAKIENGTEFHUys9IC1JJHtNT1VOVH0KIC5Q
QVRIOgkke01PVU5UfQogCisuaWZkZWYgTU9SVEFMX01PVU5UCitCSU5PV049CQlyb290CitCSU5N
T0RFPQk0NTU1CitDRkxBR1MrPQktRE1PUlRBTAorU1JDUys9CQljZi5jCisuZW5kaWYKKwogLmlu
Y2x1ZGUgPGJzZC5wcm9nLm1rPgpJbmRleDogc3JjL3NiaW4vdW1vdW50L3Vtb3VudC44Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0L2N2cy9QQ04vZnJlZWJzZC9zcmMvc2Jpbi91bW91bnQv
dW1vdW50LjgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lv
biAxLjIKZGlmZiAtdSAtcjEuMS4xLjEgLXIxLjIKLS0tIHVtb3VudC44CTE5OTgvMTIvMDMgMTU6
Mzg6NTkJMS4xLjEuMQorKysgdW1vdW50LjgJMTk5OS8wNC8wOCAxNzo1NTo0MQkxLjIKQEAgLTEx
OCw5ICsxMTgsMTkgQEAKIC5JdCBQYSAvZXRjL2ZzdGFiCiBmaWxlc3lzdGVtIHRhYmxlCiAuRWwK
Ky5QcAorSWYgdGhlIGNhbGxpbmcgdXNlciBpcyBub3QgdGhlIHN1cGVyLXVzZXIgYW5kCisuWHIg
dW1vdW50IDgKK3dhcyBjb21waWxlZCB3aXRoIFxzLTFNT1JUQUxcczAgc2V0LCB0aGUgZGV2aWNl
IHdpbGwgYmUgdW5tb3VudGVkCitpZiBmb3VuZCBpbiBcZkkvZXRjL21vdW50Y2FwXGZQLiAgU2Vl
CisuWHIgbW91bnQgOAorYW5kCisuWHIgbW91bnRjYXAgNQorZm9yIG1vcmUgaW5mb3JtYXRpb24u
CiAuU2ggU0VFIEFMU08KIC5YciB1bm1vdW50IDIgLAogLlhyIGZzdGFiIDUgLAorLlhyIG1vdW50
Y2FwIDUgLAogLlhyIG1vdW50IDgKIC5TaCBCVUdTCiBXaGVuIHVzaW5nIHVuaW9uIGZpbGVzeXN0
ZW1zLApJbmRleDogc3JjL3NiaW4vdW1vdW50L3Vtb3VudC5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9wcm9qZWN0L2N2cy9QQ04vZnJlZWJzZC9zcmMvc2Jpbi91bW91bnQvdW1vdW50LmMsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAt
cjEuMS4xLjEgLXIxLjMKLS0tIHVtb3VudC5jCTE5OTgvMTIvMDMgMTU6Mzg6NTkJMS4xLjEuMQor
KysgdW1vdW50LmMJMTk5OS8wMy8zMCAyMDoxMTo0MwkxLjMKQEAgLTYwLDYgKzYwLDEyIEBACiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKKyNpZmRlZiBNT1JUQUwK
KyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5c2V4aXRzLmg+CisjaW5jbHVkZSAiY2Yu
aCIKKyNlbmRpZiAvKiBkZWZpbmVkKE1PUlRBTCkgKi8KKwogdHlwZWRlZiBlbnVtIHsgTU5UT04s
IE1OVEZST00gfSBtbnR3aGF0OwogCiBpbnQJZmFrZSwgZmZsYWcsIHZmbGFnOwpAQCAtODMsNiAr
ODksOSBAQAogCWludCBhbGwsIGNoLCBlcnJzLCBtbnRzOwogCWNoYXIgKip0eXBlbGlzdCA9IE5V
TEw7CiAJc3RydWN0IHN0YXRmcyAqbW50YnVmOworI2lmZGVmIE1PUlRBTAorCWludCB1aWQ7Cisj
ZW5kaWYgLyogZGVmaW5lZChNT1JUQUwpICovCiAKIAkvKiBTdGFydCBkaXNrcyB0cmFuc2ZlcnJp
bmcgaW1tZWRpYXRlbHkuICovCiAJc3luYygpOwpAQCAtMTI4LDggKzEzNywxNSBAQAogCWlmICgo
bmZzaG9zdCAhPSBOVUxMKSAmJiAodHlwZWxpc3QgPT0gTlVMTCkpCiAJCXR5cGVsaXN0ID0gbWFr
ZXZmc2xpc3QoIm5mcyIpOwogCisjaWZkZWYgTU9SVEFMCisJdWlkID0gZ2V0dWlkKCk7CisjZW5k
aWYgLyogZGVmaW5lZChNT1JUQUwpICovCisKIAlzd2l0Y2ggKGFsbCkgewogCWNhc2UgMjoKKyNp
ZmRlZiBNT1JUQUwKKwkJc2V0ZXVpZCh1aWQpOworI2VuZGlmIC8qIGRlZmluZWQoTU9SVEFMKSAq
LwogCQlpZiAoKG1udHMgPSBnZXRtbnRpbmZvKCZtbnRidWYsIE1OVF9OT1dBSVQpKSA9PSAwKSB7
CiAJCQl3YXJuKCJnZXRtbnRpbmZvIik7CiAJCQllcnJzID0gMTsKQEAgLTE0Myw2ICsxNTksOSBA
QAogCQl9CiAJCWJyZWFrOwogCWNhc2UgMToKKyNpZmRlZiBNT1JUQUwKKwkJc2V0ZXVpZCh1aWQp
OworI2VuZGlmIC8qIGRlZmluZWQoTU9SVEFMKSAqLwogCQlpZiAoc2V0ZnNlbnQoKSA9PSAwKQog
CQkJZXJyKDEsICIlcyIsIF9QQVRIX0ZTVEFCKTsKIAkJZXJycyA9IHVtb3VudGFsbCh0eXBlbGlz
dCk7CkBAIC0yMTIsNiArMjMxLDExIEBACiAJQ0xJRU5UICpjbHA7CiAJaW50IHNvOwogCWNoYXIg
KnR5cGUsICpkZWxpbXAsICpob3N0cCwgKm1udHB0LCAqb3JpZ25hbWUsIHJuYW1lW01BWFBBVEhM
RU5dOworI2lmZGVmIE1PUlRBTAorCWNoYXIgKmRldjsKKwljaGFyICpkaXI7CisJaW50IHVpZDsK
KyNlbmRpZiAvKiBkZWZpbmVkKE1PUlRBTCkgKi8KIAogCWlmIChyZWFscGF0aChuYW1lLCBybmFt
ZSkgPT0gTlVMTCkgewogCQkvKiBDb250aW51ZSBhbmQgbGV0IHRoZSBzeXN0ZW0gY2FsbCBjaGVj
ayBpdC4uLiAqLwpAQCAtMjIxLDYgKzI0NSw5IEBACiAJb3JpZ25hbWUgPSBuYW1lOwogCWlmIChz
dGF0KG5hbWUsICZzYikgPCAwKSB7CiAJCW1udHB0ID0gcm5hbWU7CisjaWZkZWYgTU9SVEFMCisJ
CWRldiA9IG5hbWU7CisjZW5kaWYgLyogZGVmaW5lZChNT1JUQUwpICovCiAJCWlmICgoZ2V0bW50
bmFtZShybmFtZSwgTU5URlJPTSwgJnR5cGUpID09IE5VTEwpICYmCiAJCSAgICAoKG1udHB0ID0g
Z2V0bW50bmFtZShuYW1lLCBNTlRPTiwgJnR5cGUpKSA9PSBOVUxMKSkgewogCQkJd2FybngoIiVz
OiBub3QgY3VycmVudGx5IG1vdW50ZWQiLCBuYW1lKTsKQEAgLTIzMSw4ICsyNTgsMTQgQEAKIAkJ
CXdhcm54KCIlczogbm90IGN1cnJlbnRseSBtb3VudGVkIiwgbmFtZSk7CiAJCQlyZXR1cm4gKDEp
OwogCQl9CisjaWZkZWYgTU9SVEFMCisJCWRldiA9IG5hbWU7CisjZW5kaWYgLyogZGVmaW5lZChN
T1JUQUwpICovCiAJfSBlbHNlIGlmIChTX0lTRElSKHNiLnN0X21vZGUpKSB7CiAJCW1udHB0ID0g
cm5hbWU7CisjaWZkZWYgTU9SVEFMCisJCWRldiA9IG5hbWU7CisjZW5kaWYgLyogZGVmaW5lZChN
T1JUQUwpICovCiAJCWlmIChnZXRtbnRuYW1lKG1udHB0LCBNTlRGUk9NLCAmdHlwZSkgPT0gTlVM
TCkgewogCQkJd2FybngoIiVzOiBub3QgY3VycmVudGx5IG1vdW50ZWQiLCBuYW1lKTsKIAkJCXJl
dHVybiAoMSk7CkBAIC0yNDYsNiArMjc5LDI5IEBACiAJaWYgKGNoZWNrdmZzbmFtZSh0eXBlLCB0
eXBlbGlzdCkpCiAJCXJldHVybiAoMSk7CiAKKyNpZmRlZiBNT1JUQUwKKwl1aWQgPSBnZXR1aWQo
KTsKKwlpZiAodWlkKSB7CisJCWNoYXIgKmNhcDsKKwkJc3RydWN0IHN0YXQgc3RhdF9idWY7CisK
KwkJY2FwID0gR2V0X0Rldl9DYXAoZGV2KTsKKwkJaWYgKCFjYXApCS8qIG5vdCBpbiBtb3VudC5j
ZiwgdGhlcmVmb3JlIG5vdCBwZXJtaXR0ZWQgKi8KKwkJCWVycmMoRVhfTk9QRVJNLCBFUEVSTSwg
IiVzIiwgZGV2KTsKKwkJaWYgKCFHZXRfU3RyKGNhcCwgQ0ZfTk9ERSwgJmRpcikpCisJCQllcnJj
KEVYX05PUEVSTSwgRVBFUk0sICIlcyIsIGRldik7CisJCWRpciA9IHN0cmR1cChkaXIpOworCQlp
ZiAoIWRpcikKKwkJCWVycihFWF9PU0VSUiwgTlVMTCk7CisJCWRpciA9IFBhcmVudChkaXIpOwor
CQlpZiAoLTEgPT0gc3RhdChkaXIsICZzdGF0X2J1ZikpCisJCQllcnIoRVhfT1NGSUxFLCAiJXMi
LCBkaXIpOworCQlpZiAodWlkICE9IHN0YXRfYnVmLnN0X3VpZCkKKwkJCWVycmMoRVhfTk9QRVJN
LCBFUEVSTSwgIiVzIiwgZGlyKTsKKworCX0KKyNlbmRpZiAvKiBkZWZpbmVkKE1PUlRBTCkgKi8K
KwogCWhwID0gTlVMTDsKIAlpZiAoIXN0cmNtcCh0eXBlLCAibmZzIikpIHsKIAkJaWYgKChkZWxp
bXAgPSBzdHJjaHIobmFtZSwgJ0AnKSkgIT0gTlVMTCkgewpAQCAtMjc0LDYgKzMzMCwxMSBAQAog
CQl3YXJuKCIlcyIsIG1udHB0KTsKIAkJcmV0dXJuICgxKTsKIAl9CisKKyNpZmRlZiBNT1JUQUwK
KwlpZiAodWlkICYmICgtMSA9PSBjaG93bihkaXIsIDAsIC0xKSB8fCAtMSA9PSBjaG1vZChkaXIs
IDA3MDApKSkKKwkJZXJyKEVYX09TRVJSLCAiJXMiLCBkaXIpOworI2VuZGlmIC8qIGRlZmluZWQo
TU9SVEFMKSAqLwogCiAJaWYgKChocCAhPSBOVUxMKSAmJiAhKGZmbGFnICYgTU5UX0ZPUkNFKSkg
ewogCQkqZGVsaW1wID0gJ1wwJzsK

------- =_aaaaaaaaaa0--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199904081837.NAA26342>