Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 May 2015 12:07:40 +0000
From:      "zbb (Zbigniew Bodek)" <phabric-noreply@FreeBSD.org>
To:        freebsd-arm@freebsd.org
Subject:   [Differential] [Updated, 1, 482 lines] D2357: Port x86 busdma to ARM64
Message-ID:  <0898dab31300b56c7a2404adbbcb53b3@localhost.localdomain>
In-Reply-To: <differential-rev-PHID-DREV-h7f3zkqdq4qxyli7oe3v-req@FreeBSD.org>
References:  <differential-rev-PHID-DREV-h7f3zkqdq4qxyli7oe3v-req@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--b1_0898dab31300b56c7a2404adbbcb53b3
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

zbb updated this revision to Diff 5257.

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D2357?vs=5182&id=5257

REVISION DETAIL
  https://reviews.freebsd.org/D2357

AFFECTED FILES
  sys/arm64/arm64/busdma_bounce.c
  sys/arm64/arm64/busdma_machdep.c
  sys/arm64/include/bus_dma_impl.h
  sys/conf/files.arm64

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: zbb, emaste, ian, imp, andrew
Cc: onwahe-gmail-com, emaste, freebsd-arm

--b1_0898dab31300b56c7a2404adbbcb53b3
Content-Type: text/x-patch; charset=utf-8; name="D2357.5257.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D2357.5257.patch"

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK
LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg
LTUsNiArNSw3IEBACiBhcm02NC9hcm02NC9iY29weS5jCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQv
YnVzX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQvYXJtNjQvYnVzX3NwYWNlX2FzbS5TCXN0YW5k
YXJkCithcm02NC9hcm02NC9idXNkbWFfYm91bmNlLmMJc3RhbmRhcmQKIGFybTY0L2FybTY0L2J1
c2RtYV9tYWNoZGVwLmMJc3RhbmRhcmQKIGFybTY0L2FybTY0L2Nsb2NrLmMJCXN0YW5kYXJkCiBh
cm02NC9hcm02NC9jb3B5aW5vdXQuUwkJc3RhbmRhcmQKZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9p
bmNsdWRlL2J1c19kbWFfaW1wbC5oIGIvc3lzL2FybTY0L2luY2x1ZGUvYnVzX2RtYV9pbXBsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJtNjQvaW5jbHVk
ZS9idXNfZG1hX2ltcGwuaApAQCAtMCwwICsxLDk2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAxMyBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBLb25zdGFudGluIEJlbG91c292IDxr
aWJARnJlZUJTRC5vcmc+CisgKiB1bmRlciBzcG9uc29yc2hpcCBmcm9tIHRoZSBGcmVlQlNEIEZv
dW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmCV9NQUNISU5FX0JVU19ETUFf
SU1QTF9IXworI2RlZmluZQlfTUFDSElORV9CVVNfRE1BX0lNUExfSF8KKworc3RydWN0IGJ1c19k
bWFfdGFnX2NvbW1vbiB7CisJc3RydWN0IGJ1c19kbWFfaW1wbCAqaW1wbDsKKwlzdHJ1Y3QgYnVz
X2RtYV90YWdfY29tbW9uICpwYXJlbnQ7CisJYnVzX3NpemVfdAkgIGFsaWdubWVudDsKKwlidXNf
YWRkcl90CSAgYm91bmRhcnk7CisJYnVzX2FkZHJfdAkgIGxvd2FkZHI7CisJYnVzX2FkZHJfdAkg
IGhpZ2hhZGRyOworCWJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlcjsKKwl2b2lkCQkgKmZpbHRlcmFy
ZzsKKwlidXNfc2l6ZV90CSAgbWF4c2l6ZTsKKwl1X2ludAkJICBuc2VnbWVudHM7CisJYnVzX3Np
emVfdAkgIG1heHNlZ3N6OworCWludAkJICBmbGFnczsKKwlidXNfZG1hX2xvY2tfdAkgKmxvY2tm
dW5jOworCXZvaWQJCSAqbG9ja2Z1bmNhcmc7CisJaW50CQkgIHJlZl9jb3VudDsKK307CisKK3N0
cnVjdCBidXNfZG1hX2ltcGwgeworCWludCAoKnRhZ19jcmVhdGUpKGJ1c19kbWFfdGFnX3QgcGFy
ZW50LAorCSAgICBidXNfc2l6ZV90IGFsaWdubWVudCwgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVz
X2FkZHJfdCBsb3dhZGRyLAorCSAgICBidXNfYWRkcl90IGhpZ2hhZGRyLCBidXNfZG1hX2ZpbHRl
cl90ICpmaWx0ZXIsCisJICAgIHZvaWQgKmZpbHRlcmFyZywgYnVzX3NpemVfdCBtYXhzaXplLCBp
bnQgbnNlZ21lbnRzLAorCSAgICBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsIGJ1c19k
bWFfbG9ja190ICpsb2NrZnVuYywKKwkgICAgdm9pZCAqbG9ja2Z1bmNhcmcsIGJ1c19kbWFfdGFn
X3QgKmRtYXQpOworCWludCAoKnRhZ19kZXN0cm95KShidXNfZG1hX3RhZ190IGRtYXQpOworCWlu
dCAoKm1hcF9jcmVhdGUpKGJ1c19kbWFfdGFnX3QgZG1hdCwgaW50IGZsYWdzLCBidXNfZG1hbWFw
X3QgKm1hcHApOworCWludCAoKm1hcF9kZXN0cm95KShidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19k
bWFtYXBfdCBtYXApOworCWludCAoKm1lbV9hbGxvYykoYnVzX2RtYV90YWdfdCBkbWF0LCB2b2lk
KiogdmFkZHIsIGludCBmbGFncywKKwkgICAgYnVzX2RtYW1hcF90ICptYXBwKTsKKwl2b2lkICgq
bWVtX2ZyZWUpKGJ1c19kbWFfdGFnX3QgZG1hdCwgdm9pZCAqdmFkZHIsIGJ1c19kbWFtYXBfdCBt
YXApOworCWludCAoKmxvYWRfbWEpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1h
cCwKKwkgICAgc3RydWN0IHZtX3BhZ2UgKiptYSwgYnVzX3NpemVfdCB0bGVuLCBpbnQgbWFfb2Zm
cywgaW50IGZsYWdzLAorCSAgICBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50ICpzZWdwKTsK
KwlpbnQgKCpsb2FkX3BoeXMpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwK
KwkgICAgdm1fcGFkZHJfdCBidWYsIGJ1c19zaXplX3QgYnVmbGVuLCBpbnQgZmxhZ3MsCisJICAg
IGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgKnNlZ3ApOworCWludCAoKmxvYWRfYnVmZmVy
KShidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJICAgIHZvaWQgKmJ1Ziwg
YnVzX3NpemVfdCBidWZsZW4sIHBtYXBfdCBwbWFwLCBpbnQgZmxhZ3MsCisJICAgIGJ1c19kbWFf
c2VnbWVudF90ICpzZWdzLCBpbnQgKnNlZ3ApOworCXZvaWQgKCptYXBfd2FpdG9rKShidXNfZG1h
X3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJICAgIHN0cnVjdCBtZW1kZXNjICptZW0s
IGJ1c19kbWFtYXBfY2FsbGJhY2tfdCAqY2FsbGJhY2ssCisJICAgIHZvaWQgKmNhbGxiYWNrX2Fy
Zyk7CisJYnVzX2RtYV9zZWdtZW50X3QgKigqbWFwX2NvbXBsZXRlKShidXNfZG1hX3RhZ190IGRt
YXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJICAgIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQg
bnNlZ3MsIGludCBlcnJvcik7CisJdm9pZCAoKm1hcF91bmxvYWQpKGJ1c19kbWFfdGFnX3QgZG1h
dCwgYnVzX2RtYW1hcF90IG1hcCk7CisJdm9pZCAoKm1hcF9zeW5jKShidXNfZG1hX3RhZ190IGRt
YXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJICAgIGJ1c19kbWFzeW5jX29wX3Qgb3ApOworfTsKKwor
dm9pZCBidXNfZG1hX2RmbHRfbG9jayh2b2lkICphcmcsIGJ1c19kbWFfbG9ja19vcF90IG9wKTsK
K2ludCBidXNfZG1hX3J1bl9maWx0ZXIoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqZG1hdCwg
YnVzX2FkZHJfdCBwYWRkcik7CitpbnQgY29tbW9uX2J1c19kbWFfdGFnX2NyZWF0ZShzdHJ1Y3Qg
YnVzX2RtYV90YWdfY29tbW9uICpwYXJlbnQsCisgICAgYnVzX3NpemVfdCBhbGlnbm1lbnQsCisg
ICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dhZGRyLCBidXNfYWRkcl90IGhp
Z2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwgdm9pZCAqZmlsdGVyYXJnLCBi
dXNfc2l6ZV90IG1heHNpemUsCisgICAgaW50IG5zZWdtZW50cywgYnVzX3NpemVfdCBtYXhzZWdz
eiwgaW50IGZsYWdzLCBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMsCisgICAgdm9pZCAqbG9ja2Z1
bmNhcmcsIHNpemVfdCBzeiwgdm9pZCAqKmRtYXQpOworCitleHRlcm4gc3RydWN0IGJ1c19kbWFf
aW1wbCBidXNfZG1hX2JvdW5jZV9pbXBsOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3N5cy9hcm02
NC9hcm02NC9idXNkbWFfbWFjaGRlcC5jIGIvc3lzL2FybTY0L2FybTY0L2J1c2RtYV9tYWNoZGVw
LmMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2J1c2RtYV9tYWNoZGVwLmMKKysrIGIvc3lzL2FybTY0
L2FybTY0L2J1c2RtYV9tYWNoZGVwLmMKQEAgLTEsMjIgKzEsMjkyIEBACi0vKiAkRnJlZUJTRCQg
Ki8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4IEp1c3RpbiBULiBHaWJicy4KKyAq
IENvcHlyaWdodCAoYykgMjAxMywgMjAxNSBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBL
b25zdGFudGluIEJlbG91c292IDxraWJARnJlZUJTRC5vcmc+CisgKiB1bmRlciBzcG9uc29yc2hp
cCBmcm9tIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUG9ydGlvbnMgb2YgdGhpcyBz
b2Z0d2FyZSB3ZXJlIGRldmVsb3BlZCBieSBTZW1paGFsZgorICogdW5kZXIgc3BvbnNvcnNoaXAg
b2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBt
b2RpZmljYXRpb24sIGltbWVkaWF0ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCisg
KiAyLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgog
X19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVk
ZSA8c3lzL3N5c3RtLmg+Ci0KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz
L2J1cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+Cisj
aW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWVtZGVzYy5oPgorI2luY2x1ZGUg
PHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KICNpbmNsdWRlIDx2bS92bS5oPgor
I2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgogI2luY2x1ZGUgPHZtL3BtYXAuaD4KIAogI2luY2x1
ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8YXJtNjQvaW5jbHVkZS9idXNfZG1hX2ltcGwu
aD4KKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBtYW5pcHVsYXRpbmcgZHJpdmVy
IGxvY2tzIGZyb20gYnVzZG1hIChkdXJpbmcKKyAqIGJ1c2RtYV9zd2ksIGZvciBleGFtcGxlKS4g
IERyaXZlcnMgdGhhdCBkb24ndCBwcm92aWRlIHRoZWlyIG93biBsb2NrcworICogc2hvdWxkIHNw
ZWNpZnkgJkdpYW50IHRvIGRtYXQtPmxvY2tmdW5jYXJnLiAgRHJpdmVycyB0aGF0IHVzZSB0aGVp
ciBvd24KKyAqIG5vbi1tdXRleCBsb2NraW5nIHNjaGVtZSBkb24ndCBoYXZlIHRvIHVzZSB0aGlz
IGF0IGFsbC4KKyAqLwordm9pZAorYnVzZG1hX2xvY2tfbXV0ZXgodm9pZCAqYXJnLCBidXNfZG1h
X2xvY2tfb3BfdCBvcCkKK3sKKwlzdHJ1Y3QgbXR4ICpkbXR4OworCisJZG10eCA9IChzdHJ1Y3Qg
bXR4ICopYXJnOworCXN3aXRjaCAob3ApIHsKKwljYXNlIEJVU19ETUFfTE9DSzoKKwkJbXR4X2xv
Y2soZG10eCk7CisJCWJyZWFrOworCWNhc2UgQlVTX0RNQV9VTkxPQ0s6CisJCW10eF91bmxvY2so
ZG10eCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBhbmljKCJVbmtub3duIG9wZXJhdGlvbiAw
eCV4IGZvciBidXNkbWFfbG9ja19tdXRleCEiLCBvcCk7CisJfQorfQorCisvKgorICogZGZsdF9s
b2NrIHNob3VsZCBuZXZlciBnZXQgY2FsbGVkLiAgSXQgZ2V0cyBwdXQgaW50byB0aGUgZG1hIHRh
ZyB3aGVuCisgKiBsb2NrZnVuYyA9PSBOVUxMLCB3aGljaCBpcyBvbmx5IHZhbGlkIGlmIHRoZSBt
YXBzIHRoYXQgYXJlIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIHRhZyBhcmUgbWVhbnQgdG8gbmV2
ZXIgYmUgZGVmZXJlZC4KKyAqIFhYWCBTaG91bGQgaGF2ZSBhIHdheSB0byBpZGVudGlmeSB3aGlj
aCBkcml2ZXIgaXMgcmVzcG9uc2libGUgaGVyZS4KKyAqLwordm9pZAorYnVzX2RtYV9kZmx0X2xv
Y2sodm9pZCAqYXJnLCBidXNfZG1hX2xvY2tfb3BfdCBvcCkKK3sKKworCXBhbmljKCJkcml2ZXIg
ZXJyb3I6IGJ1c2RtYSBkZmx0X2xvY2sgY2FsbGVkIik7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1
ZSBpZiBhIG1hdGNoIGlzIG1hZGUuCisgKgorICogVG8gZmluZCBhIG1hdGNoIHdhbGsgdGhlIGNo
YWluIG9mIGJ1c19kbWFfdGFnX3QncyBsb29raW5nIGZvciAncGFkZHInLgorICoKKyAqIElmIHBh
ZGRyIGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBkbWEgdGFnIHRoZW4gY2FsbCB0aGUgZmls
dGVyIGNhbGxiYWNrCisgKiB0byBjaGVjayBmb3IgYSBtYXRjaCwgaWYgdGhlcmUgaXMgbm8gZmls
dGVyIGNhbGxiYWNrIHRoZW4gYXNzdW1lIGEgbWF0Y2guCisgKi8KK2ludAorYnVzX2RtYV9ydW5f
ZmlsdGVyKHN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjLCBidXNfYWRkcl90IHBhZGRyKQor
eworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSAwOworCWRvIHsKKwkJaWYgKCgocGFkZHIgPiB0
Yy0+bG93YWRkciAmJiBwYWRkciA8PSB0Yy0+aGlnaGFkZHIpIHx8CisJCSAgICAoKHBhZGRyICYg
KHRjLT5hbGlnbm1lbnQgLSAxKSkgIT0gMCkpICYmCisJCSAgICAodGMtPmZpbHRlciA9PSBOVUxM
IHx8CisJCSAgICAoKnRjLT5maWx0ZXIpKHRjLT5maWx0ZXJhcmcsIHBhZGRyKSAhPSAwKSkKKwkJ
CXJldHZhbCA9IDE7CisKKwkJdGMgPSB0Yy0+cGFyZW50OwkJCisJfSB3aGlsZSAocmV0dmFsID09
IDAgJiYgdGMgIT0gTlVMTCk7CisJcmV0dXJuIChyZXR2YWwpOworfQorCitpbnQKK2NvbW1vbl9i
dXNfZG1hX3RhZ19jcmVhdGUoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqcGFyZW50LAorICAg
IGJ1c19zaXplX3QgYWxpZ25tZW50LCBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxv
d2FkZHIsCisgICAgYnVzX2FkZHJfdCBoaWdoYWRkciwgYnVzX2RtYV9maWx0ZXJfdCAqZmlsdGVy
LCB2b2lkICpmaWx0ZXJhcmcsCisgICAgYnVzX3NpemVfdCBtYXhzaXplLCBpbnQgbnNlZ21lbnRz
LCBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsCisgICAgYnVzX2RtYV9sb2NrX3QgKmxv
Y2tmdW5jLCB2b2lkICpsb2NrZnVuY2FyZywgc2l6ZV90IHN6LCB2b2lkICoqZG1hdCkKK3sKKwl2
b2lkICpuZXd0YWc7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqY29tbW9uOworCisJS0FT
U0VSVChzeiA+PSBzaXplb2Yoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiksICgic3oiKSk7CisJ
LyogQmFzaWMgc2FuaXR5IGNoZWNraW5nICovCisJaWYgKGJvdW5kYXJ5ICE9IDAgJiYgYm91bmRh
cnkgPCBtYXhzZWdzeikKKwkJbWF4c2Vnc3ogPSBib3VuZGFyeTsKKwlpZiAobWF4c2Vnc3ogPT0g
MCkKKwkJcmV0dXJuIChFSU5WQUwpOworCS8qIFJldHVybiBhIE5VTEwgdGFnIG9uIGZhaWx1cmUg
Ki8KKwkqZG1hdCA9IE5VTEw7CisKKwluZXd0YWcgPSBtYWxsb2Moc3osIE1fREVWQlVGLCBNX1pF
Uk8gfCBNX05PV0FJVCk7CisJaWYgKG5ld3RhZyA9PSBOVUxMKSB7CisJCUNUUjQoS1RSX0JVU0RN
QSwgIiVzIHJldHVybmVkIHRhZyAlcCB0YWcgZmxhZ3MgMHgleCBlcnJvciAlZCIsCisJCSAgICBf
X2Z1bmNfXywgbmV3dGFnLCAwLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJ
Y29tbW9uID0gbmV3dGFnOworCWNvbW1vbi0+aW1wbCA9ICZidXNfZG1hX2JvdW5jZV9pbXBsOwor
CWNvbW1vbi0+cGFyZW50ID0gcGFyZW50OworCWNvbW1vbi0+YWxpZ25tZW50ID0gYWxpZ25tZW50
OworCWNvbW1vbi0+Ym91bmRhcnkgPSBib3VuZGFyeTsKKwljb21tb24tPmxvd2FkZHIgPSB0cnVu
Y19wYWdlKCh2bV9wYWRkcl90KWxvd2FkZHIpICsgKFBBR0VfU0laRSAtIDEpOworCWNvbW1vbi0+
aGlnaGFkZHIgPSB0cnVuY19wYWdlKCh2bV9wYWRkcl90KWhpZ2hhZGRyKSArIChQQUdFX1NJWkUg
LSAxKTsKKwljb21tb24tPmZpbHRlciA9IGZpbHRlcjsKKwljb21tb24tPmZpbHRlcmFyZyA9IGZp
bHRlcmFyZzsKKwljb21tb24tPm1heHNpemUgPSBtYXhzaXplOworCWNvbW1vbi0+bnNlZ21lbnRz
ID0gbnNlZ21lbnRzOworCWNvbW1vbi0+bWF4c2Vnc3ogPSBtYXhzZWdzejsKKwljb21tb24tPmZs
YWdzID0gZmxhZ3M7CisJY29tbW9uLT5yZWZfY291bnQgPSAxOyAvKiBDb3VudCBvdXJzZWxmICov
CisJaWYgKGxvY2tmdW5jICE9IE5VTEwpIHsKKwkJY29tbW9uLT5sb2NrZnVuYyA9IGxvY2tmdW5j
OworCQljb21tb24tPmxvY2tmdW5jYXJnID0gbG9ja2Z1bmNhcmc7CisJfSBlbHNlIHsKKwkJY29t
bW9uLT5sb2NrZnVuYyA9IGJ1c19kbWFfZGZsdF9sb2NrOworCQljb21tb24tPmxvY2tmdW5jYXJn
ID0gTlVMTDsKKwl9CisKKwkvKiBUYWtlIGludG8gYWNjb3VudCBhbnkgcmVzdHJpY3Rpb25zIGlt
cG9zZWQgYnkgb3VyIHBhcmVudCB0YWcgKi8KKwlpZiAocGFyZW50ICE9IE5VTEwpIHsKKwkJY29t
bW9uLT5pbXBsID0gcGFyZW50LT5pbXBsOworCQljb21tb24tPmxvd2FkZHIgPSBNSU4ocGFyZW50
LT5sb3dhZGRyLCBjb21tb24tPmxvd2FkZHIpOworCQljb21tb24tPmhpZ2hhZGRyID0gTUFYKHBh
cmVudC0+aGlnaGFkZHIsIGNvbW1vbi0+aGlnaGFkZHIpOworCQlpZiAoY29tbW9uLT5ib3VuZGFy
eSA9PSAwKQorCQkJY29tbW9uLT5ib3VuZGFyeSA9IHBhcmVudC0+Ym91bmRhcnk7CisJCWVsc2Ug
aWYgKHBhcmVudC0+Ym91bmRhcnkgIT0gMCkgeworCQkJY29tbW9uLT5ib3VuZGFyeSA9IE1JTihw
YXJlbnQtPmJvdW5kYXJ5LAorCQkJICAgIGNvbW1vbi0+Ym91bmRhcnkpOworCQl9CisJCWlmIChj
b21tb24tPmZpbHRlciA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogU2hvcnQgY2lyY3VpdCBsb29r
aW5nIGF0IG91ciBwYXJlbnQgZGlyZWN0bHkKKwkJCSAqIHNpbmNlIHdlIGhhdmUgZW5jYXBzdWxh
dGVkIGFsbCBvZiBpdHMgaW5mb3JtYXRpb24KKwkJCSAqLworCQkJY29tbW9uLT5maWx0ZXIgPSBw
YXJlbnQtPmZpbHRlcjsKKwkJCWNvbW1vbi0+ZmlsdGVyYXJnID0gcGFyZW50LT5maWx0ZXJhcmc7
CisJCQljb21tb24tPnBhcmVudCA9IHBhcmVudC0+cGFyZW50OworCQl9CisJCWF0b21pY19hZGRf
aW50KCZwYXJlbnQtPnJlZl9jb3VudCwgMSk7CisJfQorCSpkbWF0ID0gY29tbW9uOworCXJldHVy
biAoMCk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIGRldmljZSBzcGVjaWZpYyBkbWFfdGFnLgor
ICovCitpbnQKK2J1c19kbWFfdGFnX2NyZWF0ZShidXNfZG1hX3RhZ190IHBhcmVudCwgYnVzX3Np
emVfdCBhbGlnbm1lbnQsCisgICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dh
ZGRyLCBidXNfYWRkcl90IGhpZ2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwg
dm9pZCAqZmlsdGVyYXJnLCBidXNfc2l6ZV90IG1heHNpemUsCisgICAgaW50IG5zZWdtZW50cywg
YnVzX3NpemVfdCBtYXhzZWdzeiwgaW50IGZsYWdzLCBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMs
CisgICAgdm9pZCAqbG9ja2Z1bmNhcmcsIGJ1c19kbWFfdGFnX3QgKmRtYXQpCit7CisJc3RydWN0
IGJ1c19kbWFfdGFnX2NvbW1vbiAqdGM7CisJaW50IGVycm9yOworCisJaWYgKHBhcmVudCA9PSBO
VUxMKSB7CisJCWVycm9yID0gYnVzX2RtYV9ib3VuY2VfaW1wbC50YWdfY3JlYXRlKHBhcmVudCwg
YWxpZ25tZW50LAorCQkgICAgYm91bmRhcnksIGxvd2FkZHIsIGhpZ2hhZGRyLCBmaWx0ZXIsIGZp
bHRlcmFyZywgbWF4c2l6ZSwKKwkJICAgIG5zZWdtZW50cywgbWF4c2Vnc3osIGZsYWdzLCBsb2Nr
ZnVuYywgbG9ja2Z1bmNhcmcsIGRtYXQpOworCX0gZWxzZSB7CisJCXRjID0gKHN0cnVjdCBidXNf
ZG1hX3RhZ19jb21tb24gKilwYXJlbnQ7CisJCWVycm9yID0gdGMtPmltcGwtPnRhZ19jcmVhdGUo
cGFyZW50LCBhbGlnbm1lbnQsCisJCSAgICBib3VuZGFyeSwgbG93YWRkciwgaGlnaGFkZHIsIGZp
bHRlciwgZmlsdGVyYXJnLCBtYXhzaXplLAorCQkgICAgbnNlZ21lbnRzLCBtYXhzZWdzeiwgZmxh
Z3MsIGxvY2tmdW5jLCBsb2NrZnVuY2FyZywgZG1hdCk7CisJfQorCXJldHVybiAoZXJyb3IpOwor
fQorCitpbnQKK2J1c19kbWFfdGFnX2Rlc3Ryb3koYnVzX2RtYV90YWdfdCBkbWF0KQoreworCXN0
cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFn
X2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+dGFnX2Rlc3Ryb3koZG1hdCkpOwor
fQorCisvKgorICogQWxsb2NhdGUgYSBoYW5kbGUgZm9yIG1hcHBpbmcgZnJvbSBrdmEvdXZhL3Bo
eXNpY2FsCisgKiBhZGRyZXNzIHNwYWNlIGludG8gYnVzIGRldmljZSBzcGFjZS4KKyAqLworaW50
CitidXNfZG1hbWFwX2NyZWF0ZShidXNfZG1hX3RhZ190IGRtYXQsIGludCBmbGFncywgYnVzX2Rt
YW1hcF90ICptYXBwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMg
PSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+
bWFwX2NyZWF0ZShkbWF0LCBmbGFncywgbWFwcCkpOworfQorCisvKgorICogRGVzdHJveSBhIGhh
bmRsZSBmb3IgbWFwcGluZyBmcm9tIGt2YS91dmEvcGh5c2ljYWwKKyAqIGFkZHJlc3Mgc3BhY2Ug
aW50byBidXMgZGV2aWNlIHNwYWNlLgorICovCitpbnQKK2J1c19kbWFtYXBfZGVzdHJveShidXNf
ZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJc3RydWN0IGJ1c19kbWFfdGFn
X2NvbW1vbiAqdGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICopZG1hdDsK
KwlyZXR1cm4gKHRjLT5pbXBsLT5tYXBfZGVzdHJveShkbWF0LCBtYXApKTsKK30KKworCisvKgor
ICogQWxsb2NhdGUgYSBwaWVjZSBvZiBtZW1vcnkgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgbWFw
cGVkIGludG8KKyAqIGJ1cyBkZXZpY2Ugc3BhY2UgYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzIGxp
c3RlZCBpbiB0aGUgZG1hIHRhZy4KKyAqIEEgZG1hbWFwIHRvIGZvciB1c2Ugd2l0aCBkbWFtYXBf
bG9hZCBpcyBhbHNvIGFsbG9jYXRlZC4KKyAqLworaW50CitidXNfZG1hbWVtX2FsbG9jKGJ1c19k
bWFfdGFnX3QgZG1hdCwgdm9pZCoqIHZhZGRyLCBpbnQgZmxhZ3MsCisgICAgYnVzX2RtYW1hcF90
ICptYXBwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3Ry
dWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bWVtX2Fs
bG9jKGRtYXQsIHZhZGRyLCBmbGFncywgbWFwcCkpOworfQorCisvKgorICogRnJlZSBhIHBpZWNl
IG9mIG1lbW9yeSBhbmQgaXQncyBhbGxvY2lhdGVkIGRtYW1hcCwgdGhhdCB3YXMgYWxsb2NhdGVk
CisgKiB2aWEgYnVzX2RtYW1lbV9hbGxvYy4gIE1ha2UgdGhlIHNhbWUgY2hvaWNlIGZvciBmcmVl
L2NvbnRpZ2ZyZWUuCisgKi8KK3ZvaWQKK2J1c19kbWFtZW1fZnJlZShidXNfZG1hX3RhZ190IGRt
YXQsIHZvaWQgKnZhZGRyLCBidXNfZG1hbWFwX3QgbWFwKQoreworCXN0cnVjdCBidXNfZG1hX3Rh
Z19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7
CisJdGMtPmltcGwtPm1lbV9mcmVlKGRtYXQsIHZhZGRyLCBtYXApOworfQogCiBpbnQKIF9idXNf
ZG1hbWFwX2xvYWRfcGh5cyhidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIHZt
X3BhZGRyX3QgYnVmLAogICAgIGJ1c19zaXplX3QgYnVmbGVuLCBpbnQgZmxhZ3MsIGJ1c19kbWFf
c2VnbWVudF90ICpzZWdzLCBpbnQgKnNlZ3ApCiB7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1v
biAqdGM7CiAKLQlwYW5pYygiX2J1c19kbWFtYXBfbG9hZF9waHlzIik7CisJdGMgPSAoc3RydWN0
IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bG9hZF9waHlz
KGRtYXQsIG1hcCwgYnVmLCBidWZsZW4sIGZsYWdzLCBzZWdzLAorCSAgICBzZWdwKSk7CiB9CiAK
IGludApAQCAtMjQsOCArMjk0LDExIEBACiAgICAgYnVzX3NpemVfdCB0bGVuLCBpbnQgbWFfb2Zm
cywgaW50IGZsYWdzLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywKICAgICBpbnQgKnNlZ3ApCiB7
CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqdGM7CiAKLQlwYW5pYygiX2J1c19kbWFtYXBf
bG9hZF9tYSIpOworCXRjID0gKHN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKilkbWF0OworCXJl
dHVybiAodGMtPmltcGwtPmxvYWRfbWEoZG1hdCwgbWFwLCBtYSwgdGxlbiwgbWFfb2ZmcywgZmxh
Z3MsCisJICAgIHNlZ3MsIHNlZ3ApKTsKIH0KIAogaW50CkBAIC0zMywzNiArMzA2LDUwIEBACiAg
ICAgYnVzX3NpemVfdCBidWZsZW4sIHBtYXBfdCBwbWFwLCBpbnQgZmxhZ3MsIGJ1c19kbWFfc2Vn
bWVudF90ICpzZWdzLAogICAgIGludCAqc2VncCkKIHsKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfY29t
bW9uICp0YzsKIAotCXBhbmljKCJfYnVzX2RtYW1hcF9sb2FkX2J1ZmZlciIpOworCXRjID0gKHN0
cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKilkbWF0OworCXJldHVybiAodGMtPmltcGwtPmxvYWRf
YnVmZmVyKGRtYXQsIG1hcCwgYnVmLCBidWZsZW4sIHBtYXAsIGZsYWdzLCBzZWdzLAorCSAgICBz
ZWdwKSk7CiB9CiAKIHZvaWQKIF9fYnVzX2RtYW1hcF93YWl0b2soYnVzX2RtYV90YWdfdCBkbWF0
LCBidXNfZG1hbWFwX3QgbWFwLAogICAgIHN0cnVjdCBtZW1kZXNjICptZW0sIGJ1c19kbWFtYXBf
Y2FsbGJhY2tfdCAqY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2FyZykKIHsKKwlzdHJ1Y3QgYnVz
X2RtYV90YWdfY29tbW9uICp0YzsKIAotCXBhbmljKCJfX2J1c19kbWFtYXBfd2FpdG9rIik7CisJ
dGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJdGMtPmltcGwtPm1hcF93
YWl0b2soZG1hdCwgbWFwLCBtZW0sIGNhbGxiYWNrLCBjYWxsYmFja19hcmcpOwogfQogCiBidXNf
ZG1hX3NlZ21lbnRfdCAqCiBfYnVzX2RtYW1hcF9jb21wbGV0ZShidXNfZG1hX3RhZ190IGRtYXQs
IGJ1c19kbWFtYXBfdCBtYXAsCiAgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2Vn
cywgaW50IGVycm9yKQogeworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOwogCi0JcGFu
aWMoIl9idXNfZG1hbWFwX2NvbXBsZXRlIik7CisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2Nv
bW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bWFwX2NvbXBsZXRlKGRtYXQsIG1hcCwg
c2VncywgbnNlZ3MsIGVycm9yKSk7CiB9CiAKKy8qCisgKiBSZWxlYXNlIHRoZSBtYXBwaW5nIGhl
bGQgYnkgbWFwLgorICovCiB2b2lkCiBfYnVzX2RtYW1hcF91bmxvYWQoYnVzX2RtYV90YWdfdCBk
bWF0LCBidXNfZG1hbWFwX3QgbWFwKQogeworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRj
OwogCi0JcGFuaWMoIl9idXNfZG1hbWFwX3VubG9hZCIpOworCXRjID0gKHN0cnVjdCBidXNfZG1h
X3RhZ19jb21tb24gKilkbWF0OworCXRjLT5pbXBsLT5tYXBfdW5sb2FkKGRtYXQsIG1hcCk7CiB9
CiAKIHZvaWQKIF9idXNfZG1hbWFwX3N5bmMoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFw
X3QgbWFwLCBidXNfZG1hc3luY19vcF90IG9wKQogeworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21t
b24gKnRjOwogCi0JcGFuaWMoIl9idXNfZG1hbWFwX3N5bmMiKTsKKwl0YyA9IChzdHJ1Y3QgYnVz
X2RtYV90YWdfY29tbW9uICopZG1hdDsKKwl0Yy0+aW1wbC0+bWFwX3N5bmMoZG1hdCwgbWFwLCBv
cCk7CiB9CmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvYnVzZG1hX2JvdW5jZS5jIGIvc3lz
L2FybTY0L2FybTY0L2J1c2RtYV9ib3VuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9idXNkbWFfYm91bmNlLmMKQEAgLTAsMCArMSwx
MDgwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCBKdXN0aW4gVC4gR2liYnMu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZGV2
ZWxvcGVkIGJ5IFNlbWloYWxmCisgKiB1bmRlciBzcG9uc29yc2hpcCBvZiB0aGUgRnJlZUJTRCBG
b3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaW1t
ZWRpYXRlbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KKyAqIDIuIFRoZSBuYW1lIG9m
IHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVC
U0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4K
KyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUg
PHN5cy9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lz
L2t0ci5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNp
bmNsdWRlIDxzeXMvbWVtZGVzYy5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUg
PHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisKKyNpbmNsdWRlIDx2bS92bS5o
PgorI2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorI2luY2x1ZGUgPHZtL3ZtX2tlcm4uaD4KKyNp
bmNsdWRlIDx2bS92bV9wYWdlLmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisKKyNpbmNsdWRl
IDxtYWNoaW5lL2F0b21pYy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8
bWFjaGluZS9tZF92YXIuaD4KKyNpbmNsdWRlIDxhcm02NC9pbmNsdWRlL2J1c19kbWFfaW1wbC5o
PgorCisjZGVmaW5lIE1BWF9CUEFHRVMgNDA5NgorCitlbnVtIHsKKwlCVVNfRE1BX0NPVUxEX0JP
VU5DRQk9IDB4MDEsCisJQlVTX0RNQV9NSU5fQUxMT0NfQ09NUAk9IDB4MDIsCisJQlVTX0RNQV9L
TUVNX0FMTE9DCT0gMHgwNCwKK307CisKK3N0cnVjdCBib3VuY2Vfem9uZTsKKworc3RydWN0IGJ1
c19kbWFfdGFnIHsKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uIGNvbW1vbjsKKwlpbnQJCQlt
YXBfY291bnQ7CisJaW50CQkJYm91bmNlX2ZsYWdzOworCWJ1c19kbWFfc2VnbWVudF90CSpzZWdt
ZW50czsKKwlzdHJ1Y3QgYm91bmNlX3pvbmUJKmJvdW5jZV96b25lOworfTsKKworc3RydWN0IGJv
dW5jZV9wYWdlIHsKKwl2bV9vZmZzZXRfdAl2YWRkcjsJCS8qIGt2YSBvZiBib3VuY2UgYnVmZmVy
ICovCisJYnVzX2FkZHJfdAlidXNhZGRyOwkvKiBQaHlzaWNhbCBhZGRyZXNzICovCisJdm1fb2Zm
c2V0X3QJZGF0YXZhZGRyOwkvKiBrdmEgb2YgY2xpZW50IGRhdGEgKi8KKwlidXNfYWRkcl90CWRh
dGFhZGRyOwkvKiBjbGllbnQgcGh5c2ljYWwgYWRkcmVzcyAqLworCWJ1c19zaXplX3QJZGF0YWNv
dW50OwkvKiBjbGllbnQgZGF0YSBjb3VudCAqLworCVNUQUlMUV9FTlRSWShib3VuY2VfcGFnZSkg
bGlua3M7Cit9OworCitpbnQgYnVzZG1hX3N3aV9wZW5kaW5nOworCitzdHJ1Y3QgYm91bmNlX3pv
bmUgeworCVNUQUlMUV9FTlRSWShib3VuY2Vfem9uZSkgbGlua3M7CisJU1RBSUxRX0hFQUQoYnBf
bGlzdCwgYm91bmNlX3BhZ2UpIGJvdW5jZV9wYWdlX2xpc3Q7CisJaW50CQl0b3RhbF9icGFnZXM7
CisJaW50CQlmcmVlX2JwYWdlczsKKwlpbnQJCXJlc2VydmVkX2JwYWdlczsKKwlpbnQJCWFjdGl2
ZV9icGFnZXM7CisJaW50CQl0b3RhbF9ib3VuY2VkOworCWludAkJdG90YWxfZGVmZXJyZWQ7CisJ
aW50CQltYXBfY291bnQ7CisJYnVzX3NpemVfdAlhbGlnbm1lbnQ7CisJYnVzX2FkZHJfdAlsb3dh
ZGRyOworCWNoYXIJCXpvbmVpZFs4XTsKKwljaGFyCQlsb3dhZGRyaWRbMjBdOworCXN0cnVjdCBz
eXNjdGxfY3R4X2xpc3Qgc3lzY3RsX3RyZWU7CisJc3RydWN0IHN5c2N0bF9vaWQgKnN5c2N0bF90
cmVlX3RvcDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXR4IGJvdW5jZV9sb2NrOworc3RhdGljIGlu
dCB0b3RhbF9icGFnZXM7CitzdGF0aWMgaW50IGJ1c2RtYV96b25lY291bnQ7CitzdGF0aWMgU1RB
SUxRX0hFQUQoLCBib3VuY2Vfem9uZSkgYm91bmNlX3pvbmVfbGlzdDsKKworc3RhdGljIFNZU0NU
TF9OT0RFKF9odywgT0lEX0FVVE8sIGJ1c2RtYSwgQ1RMRkxBR19SRCwgMCwgIkJ1c2RtYSBwYXJh
bWV0ZXJzIik7CitTWVNDVExfSU5UKF9od19idXNkbWEsIE9JRF9BVVRPLCB0b3RhbF9icGFnZXMs
IENUTEZMQUdfUkQsICZ0b3RhbF9icGFnZXMsIDAsCisJICAgIlRvdGFsIGJvdW5jZSBwYWdlcyIp
OworCitzdHJ1Y3QgYnVzX2RtYW1hcCB7CisJc3RydWN0IGJwX2xpc3QJICAgICAgIGJwYWdlczsK
KwlpbnQJCSAgICAgICBwYWdlc25lZWRlZDsKKwlpbnQJCSAgICAgICBwYWdlc3Jlc2VydmVkOwor
CWJ1c19kbWFfdGFnX3QJICAgICAgIGRtYXQ7CisJc3RydWN0IG1lbWRlc2MJICAgICAgIG1lbTsK
KwlidXNfZG1hbWFwX2NhbGxiYWNrX3QgKmNhbGxiYWNrOworCXZvaWQJCSAgICAgICpjYWxsYmFj
a19hcmc7CisJU1RBSUxRX0VOVFJZKGJ1c19kbWFtYXApIGxpbmtzOworfTsKKworc3RhdGljIFNU
QUlMUV9IRUFEKCwgYnVzX2RtYW1hcCkgYm91bmNlX21hcF93YWl0aW5nbGlzdDsKK3N0YXRpYyBT
VEFJTFFfSEVBRCgsIGJ1c19kbWFtYXApIGJvdW5jZV9tYXBfY2FsbGJhY2tsaXN0Oworc3RhdGlj
IHN0cnVjdCBidXNfZG1hbWFwIG5vYm91bmNlX2RtYW1hcDsKKworc3RhdGljIHZvaWQgaW5pdF9i
b3VuY2VfcGFnZXModm9pZCAqZHVtbXkpOworc3RhdGljIGludCBhbGxvY19ib3VuY2Vfem9uZShi
dXNfZG1hX3RhZ190IGRtYXQpOworc3RhdGljIGludCBhbGxvY19ib3VuY2VfcGFnZXMoYnVzX2Rt
YV90YWdfdCBkbWF0LCB1X2ludCBudW1wYWdlcyk7CitzdGF0aWMgaW50IHJlc2VydmVfYm91bmNl
X3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBpbnQgY29t
bWl0KTsKK3N0YXRpYyBidXNfYWRkcl90IGFkZF9ib3VuY2VfcGFnZShidXNfZG1hX3RhZ190IGRt
YXQsIGJ1c19kbWFtYXBfdCBtYXAsCisgICAgdm1fb2Zmc2V0X3QgdmFkZHIsIGJ1c19hZGRyX3Qg
YWRkciwgYnVzX3NpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIGZyZWVfYm91bmNlX3BhZ2UoYnVz
X2RtYV90YWdfdCBkbWF0LCBzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJwYWdlKTsKK2ludCBydW5fZmls
dGVyKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2FkZHJfdCBwYWRkcik7CitzdGF0aWMgdm9pZCBf
YnVzX2RtYW1hcF9jb3VudF9wYWdlcyhidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBt
YXAsCisgICAgcG1hcF90IHBtYXAsIHZvaWQgKmJ1ZiwgYnVzX3NpemVfdCBidWZsZW4sIGludCBm
bGFncyk7CitzdGF0aWMgdm9pZCBfYnVzX2RtYW1hcF9jb3VudF9waHlzKGJ1c19kbWFfdGFnX3Qg
ZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICB2bV9wYWRkcl90IGJ1ZiwgYnVzX3NpemVfdCBi
dWZsZW4sIGludCBmbGFncyk7CitzdGF0aWMgaW50IF9idXNfZG1hbWFwX3Jlc2VydmVfcGFnZXMo
YnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorICAgIGludCBmbGFncyk7CisK
Ky8qCisgKiBBbGxvY2F0ZSBhIGRldmljZSBzcGVjaWZpYyBkbWFfdGFnLgorICovCitzdGF0aWMg
aW50Citib3VuY2VfYnVzX2RtYV90YWdfY3JlYXRlKGJ1c19kbWFfdGFnX3QgcGFyZW50LCBidXNf
c2l6ZV90IGFsaWdubWVudCwKKyAgICBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxv
d2FkZHIsIGJ1c19hZGRyX3QgaGlnaGFkZHIsCisgICAgYnVzX2RtYV9maWx0ZXJfdCAqZmlsdGVy
LCB2b2lkICpmaWx0ZXJhcmcsIGJ1c19zaXplX3QgbWF4c2l6ZSwKKyAgICBpbnQgbnNlZ21lbnRz
LCBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsIGJ1c19kbWFfbG9ja190ICpsb2NrZnVu
YywKKyAgICB2b2lkICpsb2NrZnVuY2FyZywgYnVzX2RtYV90YWdfdCAqZG1hdCkKK3sKKwlidXNf
ZG1hX3RhZ190IG5ld3RhZzsKKwlpbnQgZXJyb3I7CisKKwkqZG1hdCA9IE5VTEw7CisJZXJyb3Ig
PSBjb21tb25fYnVzX2RtYV90YWdfY3JlYXRlKHBhcmVudCAhPSBOVUxMID8gJnBhcmVudC0+Y29t
bW9uIDoKKwkgICAgTlVMTCwgYWxpZ25tZW50LCBib3VuZGFyeSwgbG93YWRkciwgaGlnaGFkZHIs
IGZpbHRlciwgZmlsdGVyYXJnLAorCSAgICBtYXhzaXplLCBuc2VnbWVudHMsIG1heHNlZ3N6LCBm
bGFncywgbG9ja2Z1bmMsIGxvY2tmdW5jYXJnLAorCSAgICBzaXplb2YgKHN0cnVjdCBidXNfZG1h
X3RhZyksICh2b2lkICoqKSZuZXd0YWcpOworCWlmIChlcnJvciAhPSAwKQorCQlyZXR1cm4gKGVy
cm9yKTsKKworCW5ld3RhZy0+Y29tbW9uLmltcGwgPSAmYnVzX2RtYV9ib3VuY2VfaW1wbDsKKwlu
ZXd0YWctPm1hcF9jb3VudCA9IDA7CisJbmV3dGFnLT5zZWdtZW50cyA9IE5VTEw7CisKKwlpZiAo
cGFyZW50ICE9IE5VTEwgJiYgKChuZXd0YWctPmNvbW1vbi5maWx0ZXIgIT0gTlVMTCkgfHwKKwkg
ICAgKChwYXJlbnQtPmJvdW5jZV9mbGFncyAmIEJVU19ETUFfQ09VTERfQk9VTkNFKSAhPSAwKSkp
CisJCW5ld3RhZy0+Ym91bmNlX2ZsYWdzIHw9IEJVU19ETUFfQ09VTERfQk9VTkNFOworCisJaWYg
KG5ld3RhZy0+Y29tbW9uLmxvd2FkZHIgPCBwdG9hKCh2bV9wYWRkcl90KU1heG1lbSkgfHwKKwkg
ICAgbmV3dGFnLT5jb21tb24uYWxpZ25tZW50ID4gMSkKKwkJbmV3dGFnLT5ib3VuY2VfZmxhZ3Mg
fD0gQlVTX0RNQV9DT1VMRF9CT1VOQ0U7CisKKwlpZiAoKChuZXd0YWctPmJvdW5jZV9mbGFncyAm
IEJVU19ETUFfQ09VTERfQk9VTkNFKSAhPSAwKSAmJgorCSAgICAoZmxhZ3MgJiBCVVNfRE1BX0FM
TE9DTk9XKSAhPSAwKSB7CisJCXN0cnVjdCBib3VuY2Vfem9uZSAqYno7CisKKwkJLyogTXVzdCBi
b3VuY2UgKi8KKwkJaWYgKChlcnJvciA9IGFsbG9jX2JvdW5jZV96b25lKG5ld3RhZykpICE9IDAp
IHsKKwkJCWZyZWUobmV3dGFnLCBNX0RFVkJVRik7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQor
CQlieiA9IG5ld3RhZy0+Ym91bmNlX3pvbmU7CisKKwkJaWYgKHB0b2EoYnotPnRvdGFsX2JwYWdl
cykgPCBtYXhzaXplKSB7CisJCQlpbnQgcGFnZXM7CisKKwkJCXBhZ2VzID0gYXRvcChtYXhzaXpl
KSAtIGJ6LT50b3RhbF9icGFnZXM7CisKKwkJCS8qIEFkZCBwYWdlcyB0byBvdXIgYm91bmNlIHBv
b2wgKi8KKwkJCWlmIChhbGxvY19ib3VuY2VfcGFnZXMobmV3dGFnLCBwYWdlcykgPCBwYWdlcykK
KwkJCQllcnJvciA9IEVOT01FTTsKKwkJfQorCQkvKiBQZXJmb3JtZWQgaW5pdGlhbCBhbGxvY2F0
aW9uICovCisJCW5ld3RhZy0+Ym91bmNlX2ZsYWdzIHw9IEJVU19ETUFfTUlOX0FMTE9DX0NPTVA7
CisJfSBlbHNlCisJCWVycm9yID0gMDsKKworCWlmIChlcnJvciAhPSAwKQorCQlmcmVlKG5ld3Rh
ZywgTV9ERVZCVUYpOworCWVsc2UKKwkJKmRtYXQgPSBuZXd0YWc7CisJQ1RSNChLVFJfQlVTRE1B
LCAiJXMgcmV0dXJuZWQgdGFnICVwIHRhZyBmbGFncyAweCV4IGVycm9yICVkIiwKKwkgICAgX19m
dW5jX18sIG5ld3RhZywgKG5ld3RhZyAhPSBOVUxMID8gbmV3dGFnLT5jb21tb24uZmxhZ3MgOiAw
KSwKKwkgICAgZXJyb3IpOworCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0aWMgaW50Citib3Vu
Y2VfYnVzX2RtYV90YWdfZGVzdHJveShidXNfZG1hX3RhZ190IGRtYXQpCit7CisJYnVzX2RtYV90
YWdfdCBkbWF0X2NvcHksIHBhcmVudDsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IDA7CisJZG1h
dF9jb3B5ID0gZG1hdDsKKworCWlmIChkbWF0ICE9IE5VTEwpIHsKKwkJaWYgKGRtYXQtPm1hcF9j
b3VudCAhPSAwKSB7CisJCQllcnJvciA9IEVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwkJd2hp
bGUgKGRtYXQgIT0gTlVMTCkgeworCQkJcGFyZW50ID0gKGJ1c19kbWFfdGFnX3QpZG1hdC0+Y29t
bW9uLnBhcmVudDsKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmRtYXQtPmNvbW1vbi5yZWZfY291
bnQsIDEpOworCQkJaWYgKGRtYXQtPmNvbW1vbi5yZWZfY291bnQgPT0gMCkgeworCQkJCWlmIChk
bWF0LT5zZWdtZW50cyAhPSBOVUxMKQorCQkJCQlmcmVlKGRtYXQtPnNlZ21lbnRzLCBNX0RFVkJV
Rik7CisJCQkJZnJlZShkbWF0LCBNX0RFVkJVRik7CisJCQkJLyoKKwkJCQkgKiBMYXN0IHJlZmVy
ZW5jZSBjb3VudCwgc28KKwkJCQkgKiByZWxlYXNlIG91ciByZWZlcmVuY2UKKwkJCQkgKiBjb3Vu
dCBvbiBvdXIgcGFyZW50LgorCQkJCSAqLworCQkJCWRtYXQgPSBwYXJlbnQ7CisJCQl9IGVsc2UK
KwkJCQlkbWF0ID0gTlVMTDsKKwkJfQorCX0KK291dDoKKwlDVFIzKEtUUl9CVVNETUEsICIlcyB0
YWcgJXAgZXJyb3IgJWQiLCBfX2Z1bmNfXywgZG1hdF9jb3B5LCBlcnJvcik7CisJcmV0dXJuIChl
cnJvcik7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIGhhbmRsZSBmb3IgbWFwcGluZyBmcm9tIGt2
YS91dmEvcGh5c2ljYWwKKyAqIGFkZHJlc3Mgc3BhY2UgaW50byBidXMgZGV2aWNlIHNwYWNlLgor
ICovCitzdGF0aWMgaW50Citib3VuY2VfYnVzX2RtYW1hcF9jcmVhdGUoYnVzX2RtYV90YWdfdCBk
bWF0LCBpbnQgZmxhZ3MsIGJ1c19kbWFtYXBfdCAqbWFwcCkKK3sKKwlzdHJ1Y3QgYm91bmNlX3pv
bmUgKmJ6OworCWludCBlcnJvciwgbWF4cGFnZXMsIHBhZ2VzOworCisJZXJyb3IgPSAwOworCisJ
aWYgKGRtYXQtPnNlZ21lbnRzID09IE5VTEwpIHsKKwkJZG1hdC0+c2VnbWVudHMgPSAoYnVzX2Rt
YV9zZWdtZW50X3QgKiltYWxsb2MoCisJCSAgICBzaXplb2YoYnVzX2RtYV9zZWdtZW50X3QpICog
ZG1hdC0+Y29tbW9uLm5zZWdtZW50cywKKwkJICAgIE1fREVWQlVGLCBNX05PV0FJVCk7CisJCWlm
IChkbWF0LT5zZWdtZW50cyA9PSBOVUxMKSB7CisJCQlDVFIzKEtUUl9CVVNETUEsICIlczogdGFn
ICVwIGVycm9yICVkIiwKKwkJCSAgICBfX2Z1bmNfXywgZG1hdCwgRU5PTUVNKTsKKwkJCXJldHVy
biAoRU5PTUVNKTsKKwkJfQorCX0KKworCS8qCisJICogQm91bmNpbmcgbWlnaHQgYmUgcmVxdWly
ZWQgaWYgdGhlIGRyaXZlciBhc2tzIGZvciBhbiBhY3RpdmUKKwkgKiBleGNsdXNpb24gcmVnaW9u
LCBhIGRhdGEgYWxpZ25tZW50IHRoYXQgaXMgc3RyaWN0ZXIgdGhhbiAxLCBhbmQvb3IKKwkgKiBh
biBhY3RpdmUgYWRkcmVzcyBib3VuZGFyeS4KKwkgKi8KKwlpZiAoZG1hdC0+Ym91bmNlX2ZsYWdz
ICYgQlVTX0RNQV9DT1VMRF9CT1VOQ0UpIHsKKwkJLyogTXVzdCBib3VuY2UgKi8KKwkJaWYgKGRt
YXQtPmJvdW5jZV96b25lID09IE5VTEwpIHsKKwkJCWlmICgoZXJyb3IgPSBhbGxvY19ib3VuY2Vf
em9uZShkbWF0KSkgIT0gMCkKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCQlieiA9IGRtYXQt
PmJvdW5jZV96b25lOworCisJCSptYXBwID0gKGJ1c19kbWFtYXBfdCltYWxsb2Moc2l6ZW9mKCoq
bWFwcCksIE1fREVWQlVGLAorCQkgICAgTV9OT1dBSVQgfCBNX1pFUk8pOworCQlpZiAoKm1hcHAg
PT0gTlVMTCkgeworCQkJQ1RSMyhLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCBlcnJvciAlZCIsCisJ
CQkgICAgX19mdW5jX18sIGRtYXQsIEVOT01FTSk7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJCX0K
KworCQkvKiBJbml0aWFsaXplIHRoZSBuZXcgbWFwICovCisJCVNUQUlMUV9JTklUKCYoKCptYXBw
KS0+YnBhZ2VzKSk7CisKKwkJLyoKKwkJICogQXR0ZW1wdCB0byBhZGQgcGFnZXMgdG8gb3VyIHBv
b2wgb24gYSBwZXItaW5zdGFuY2UKKwkJICogYmFzaXMgdXAgdG8gYSBzYW5lIGxpbWl0LgorCQkg
Ki8KKwkJaWYgKGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQgPiAxKQorCQkJbWF4cGFnZXMgPSBNQVhf
QlBBR0VTOworCQllbHNlCisJCQltYXhwYWdlcyA9IE1JTihNQVhfQlBBR0VTLCBNYXhtZW0gLQor
CQkJICAgIGF0b3AoZG1hdC0+Y29tbW9uLmxvd2FkZHIpKTsKKwkJaWYgKChkbWF0LT5ib3VuY2Vf
ZmxhZ3MgJiBCVVNfRE1BX01JTl9BTExPQ19DT01QKSA9PSAwIHx8CisJCSAgICAoYnotPm1hcF9j
b3VudCA+IDAgJiYgYnotPnRvdGFsX2JwYWdlcyA8IG1heHBhZ2VzKSkgeworCQkJcGFnZXMgPSBN
QVgoYXRvcChkbWF0LT5jb21tb24ubWF4c2l6ZSksIDEpOworCQkJcGFnZXMgPSBNSU4obWF4cGFn
ZXMgLSBiei0+dG90YWxfYnBhZ2VzLCBwYWdlcyk7CisJCQlwYWdlcyA9IE1BWChwYWdlcywgMSk7
CisJCQlpZiAoYWxsb2NfYm91bmNlX3BhZ2VzKGRtYXQsIHBhZ2VzKSA8IHBhZ2VzKQorCQkJCWVy
cm9yID0gRU5PTUVNOworCQkJaWYgKChkbWF0LT5ib3VuY2VfZmxhZ3MgJiBCVVNfRE1BX01JTl9B
TExPQ19DT01QKQorCQkJICAgID09IDApIHsKKwkJCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJCQlk
bWF0LT5ib3VuY2VfZmxhZ3MgfD0KKwkJCQkJICAgIEJVU19ETUFfTUlOX0FMTE9DX0NPTVA7CisJ
CQkJfQorCQkJfSBlbHNlCisJCQkJZXJyb3IgPSAwOworCQl9CisJCWJ6LT5tYXBfY291bnQrKzsK
Kwl9IGVsc2UgeworCQkqbWFwcCA9IE5VTEw7CisJfQorCWlmIChlcnJvciA9PSAwKQorCQlkbWF0
LT5tYXBfY291bnQrKzsKKwlDVFI0KEtUUl9CVVNETUEsICIlczogdGFnICVwIHRhZyBmbGFncyAw
eCV4IGVycm9yICVkIiwKKwkgICAgX19mdW5jX18sIGRtYXQsIGRtYXQtPmNvbW1vbi5mbGFncywg
ZXJyb3IpOworCXJldHVybiAoZXJyb3IpOworfQorCisvKgorICogRGVzdHJveSBhIGhhbmRsZSBm
b3IgbWFwcGluZyBmcm9tIGt2YS91dmEvcGh5c2ljYWwKKyAqIGFkZHJlc3Mgc3BhY2UgaW50byBi
dXMgZGV2aWNlIHNwYWNlLgorICovCitzdGF0aWMgaW50Citib3VuY2VfYnVzX2RtYW1hcF9kZXN0
cm95KGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCkKK3sKKworCWlmIChtYXAg
IT0gTlVMTCAmJiBtYXAgIT0gJm5vYm91bmNlX2RtYW1hcCkgeworCQlpZiAoU1RBSUxRX0ZJUlNU
KCZtYXAtPmJwYWdlcykgIT0gTlVMTCkgeworCQkJQ1RSMyhLVFJfQlVTRE1BLCAiJXM6IHRhZyAl
cCBlcnJvciAlZCIsCisJCQkgICAgX19mdW5jX18sIGRtYXQsIEVCVVNZKTsKKwkJCXJldHVybiAo
RUJVU1kpOworCQl9CisJCWlmIChkbWF0LT5ib3VuY2Vfem9uZSkKKwkJCWRtYXQtPmJvdW5jZV96
b25lLT5tYXBfY291bnQtLTsKKwkJZnJlZShtYXAsIE1fREVWQlVGKTsKKwl9CisJZG1hdC0+bWFw
X2NvdW50LS07CisJQ1RSMihLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCBlcnJvciAwIiwgX19mdW5j
X18sIGRtYXQpOworCXJldHVybiAoMCk7Cit9CisKKworLyoKKyAqIEFsbG9jYXRlIGEgcGllY2Ug
b2YgbWVtb3J5IHRoYXQgY2FuIGJlIGVmZmljaWVudGx5IG1hcHBlZCBpbnRvCisgKiBidXMgZGV2
aWNlIHNwYWNlIGJhc2VkIG9uIHRoZSBjb25zdHJhaW50cyBsaXRlZCBpbiB0aGUgZG1hIHRhZy4K
KyAqIEEgZG1hbWFwIHRvIGZvciB1c2Ugd2l0aCBkbWFtYXBfbG9hZCBpcyBhbHNvIGFsbG9jYXRl
ZC4KKyAqLworc3RhdGljIGludAorYm91bmNlX2J1c19kbWFtZW1fYWxsb2MoYnVzX2RtYV90YWdf
dCBkbWF0LCB2b2lkKiogdmFkZHIsIGludCBmbGFncywKKyAgICBidXNfZG1hbWFwX3QgKm1hcHAp
Cit7CisJLyoKKwkgKiBYWFggQVJNNjRUT0RPOgorCSAqIFRoaXMgYnVzX2RtYSBpbXBsZW1lbnRh
dGlvbiByZXF1aXJlcyBJTy1Db2hlcmVudCBhcmNoaXRlY3V0cmUuCisJICogSWYgSU8tQ29oZXJl
bmN5IGlzIG5vdCBndWFyYW50ZWVkLCB0aGUgQlVTX0RNQV9DT0hFUkVOVCBmbGFnIGhhcworCSAq
IHRvIGJlIGltcGxlbnRlZCB1c2luZyBub24tY2FjaGVhYmxlIG1lbW9yeS4KKwkgKi8KKworCXZt
X21lbWF0dHJfdCBhdHRyOworCWludCBtZmxhZ3M7CisKKwlpZiAoZmxhZ3MgJiBCVVNfRE1BX05P
V0FJVCkKKwkJbWZsYWdzID0gTV9OT1dBSVQ7CisJZWxzZQorCQltZmxhZ3MgPSBNX1dBSVRPSzsK
KworCS8qIElmIHdlIHN1Y2NlZWQsIG5vIG1hcHBpbmcvYm91bmNpbmcgd2lsbCBiZSByZXF1aXJl
ZCAqLworCSptYXBwID0gTlVMTDsKKworCWlmIChkbWF0LT5zZWdtZW50cyA9PSBOVUxMKSB7CisJ
CWRtYXQtPnNlZ21lbnRzID0gKGJ1c19kbWFfc2VnbWVudF90ICopbWFsbG9jKAorCQkgICAgc2l6
ZW9mKGJ1c19kbWFfc2VnbWVudF90KSAqIGRtYXQtPmNvbW1vbi5uc2VnbWVudHMsCisJCSAgICBN
X0RFVkJVRiwgbWZsYWdzKTsKKwkJaWYgKGRtYXQtPnNlZ21lbnRzID09IE5VTEwpIHsKKwkJCUNU
UjQoS1RSX0JVU0RNQSwgIiVzOiB0YWcgJXAgdGFnIGZsYWdzIDB4JXggZXJyb3IgJWQiLAorCQkJ
ICAgIF9fZnVuY19fLCBkbWF0LCBkbWF0LT5jb21tb24uZmxhZ3MsIEVOT01FTSk7CisJCQlyZXR1
cm4gKEVOT01FTSk7CisJCX0KKwl9CisJaWYgKGZsYWdzICYgQlVTX0RNQV9aRVJPKQorCQltZmxh
Z3MgfD0gTV9aRVJPOworCWlmIChmbGFncyAmIEJVU19ETUFfTk9DQUNIRSkKKwkJYXR0ciA9IFZN
X01FTUFUVFJfVU5DQUNIRUFCTEU7CisJZWxzZQorCQlhdHRyID0gVk1fTUVNQVRUUl9ERUZBVUxU
OworCisJLyoKKwkgKiBYWFg6CisJICogKGRtYXQtPmFsaWdubWVudCA8IGRtYXQtPm1heHNpemUp
IGlzIGp1c3QgYSBxdWljayBoYWNrOyB0aGUgZXhhY3QKKwkgKiBhbGlnbm1lbnQgZ3VhcmFudGVl
cyBvZiBtYWxsb2MgbmVlZCB0byBiZSBuYWlsZWQgZG93biwgYW5kIHRoZQorCSAqIGNvZGUgYmVs
b3cgc2hvdWxkIGJlIHJld3JpdHRlbiB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50LgorCSAqCisJ
ICogSW4gdGhlIG1lYW50aW1lLCB3ZSdsbCB3YXJuIHRoZSB1c2VyIGlmIG1hbGxvYyBnZXRzIGl0
IHdyb25nLgorCSAqLworCWlmICgoZG1hdC0+Y29tbW9uLm1heHNpemUgPD0gUEFHRV9TSVpFKSAm
JgorCSAgIChkbWF0LT5jb21tb24uYWxpZ25tZW50IDwgZG1hdC0+Y29tbW9uLm1heHNpemUpICYm
CisJICAgIGRtYXQtPmNvbW1vbi5sb3dhZGRyID49IHB0b2EoKHZtX3BhZGRyX3QpTWF4bWVtKSAm
JgorCSAgICBhdHRyID09IFZNX01FTUFUVFJfREVGQVVMVCkgeworCQkqdmFkZHIgPSBtYWxsb2Mo
ZG1hdC0+Y29tbW9uLm1heHNpemUsIE1fREVWQlVGLCBtZmxhZ3MpOworCX0gZWxzZSBpZiAoZG1h
dC0+Y29tbW9uLm5zZWdtZW50cyA+PSBidG9jKGRtYXQtPmNvbW1vbi5tYXhzaXplKSAmJgorCSAg
ICBkbWF0LT5jb21tb24uYWxpZ25tZW50IDw9IFBBR0VfU0laRSAmJgorCSAgICAoZG1hdC0+Y29t
bW9uLmJvdW5kYXJ5ID09IDAgfHwKKwkgICAgZG1hdC0+Y29tbW9uLmJvdW5kYXJ5ID49IGRtYXQt
PmNvbW1vbi5sb3dhZGRyKSkgeworCQkvKiBQYWdlLWJhc2VkIG11bHRpLXNlZ21lbnQgYWxsb2Nh
dGlvbnMgYWxsb3dlZCAqLworCQkqdmFkZHIgPSAodm9pZCAqKWttZW1fYWxsb2NfYXR0cihrZXJu
ZWxfYXJlbmEsCisJCSAgICBkbWF0LT5jb21tb24ubWF4c2l6ZSwgbWZsYWdzLCAwdWwsIGRtYXQt
PmNvbW1vbi5sb3dhZGRyLAorCQkgICAgYXR0cik7CisJCWRtYXQtPmJvdW5jZV9mbGFncyB8PSBC
VVNfRE1BX0tNRU1fQUxMT0M7CisJfSBlbHNlIHsKKwkJKnZhZGRyID0gKHZvaWQgKilrbWVtX2Fs
bG9jX2NvbnRpZyhrZXJuZWxfYXJlbmEsCisJCSAgICBkbWF0LT5jb21tb24ubWF4c2l6ZSwgbWZs
YWdzLCAwdWwsIGRtYXQtPmNvbW1vbi5sb3dhZGRyLAorCQkgICAgZG1hdC0+Y29tbW9uLmFsaWdu
bWVudCAhPSAwID8gZG1hdC0+Y29tbW9uLmFsaWdubWVudCA6IDF1bCwKKwkJICAgIGRtYXQtPmNv
bW1vbi5ib3VuZGFyeSwgYXR0cik7CisJCWRtYXQtPmJvdW5jZV9mbGFncyB8PSBCVVNfRE1BX0tN
RU1fQUxMT0M7CisJfQorCWlmICgqdmFkZHIgPT0gTlVMTCkgeworCQlDVFI0KEtUUl9CVVNETUEs
ICIlczogdGFnICVwIHRhZyBmbGFncyAweCV4IGVycm9yICVkIiwKKwkJICAgIF9fZnVuY19fLCBk
bWF0LCBkbWF0LT5jb21tb24uZmxhZ3MsIEVOT01FTSk7CisJCXJldHVybiAoRU5PTUVNKTsKKwl9
IGVsc2UgaWYgKHZ0b3BoeXMoKnZhZGRyKSAmIChkbWF0LT5jb21tb24uYWxpZ25tZW50IC0gMSkp
IHsKKwkJcHJpbnRmKCJidXNfZG1hbWVtX2FsbG9jIGZhaWxlZCB0byBhbGlnbiBtZW1vcnkgcHJv
cGVybHkuXG4iKTsKKwl9CisJQ1RSNChLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCB0YWcgZmxhZ3Mg
MHgleCBlcnJvciAlZCIsCisJICAgIF9fZnVuY19fLCBkbWF0LCBkbWF0LT5jb21tb24uZmxhZ3Ms
IDApOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBGcmVlIGEgcGllY2Ugb2YgbWVtb3J5IGFu
ZCBpdCdzIGFsbG9jaWF0ZWQgZG1hbWFwLCB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAqIHZpYSBidXNf
ZG1hbWVtX2FsbG9jLiAgTWFrZSB0aGUgc2FtZSBjaG9pY2UgZm9yIGZyZWUvY29udGlnZnJlZS4K
KyAqLworc3RhdGljIHZvaWQKK2JvdW5jZV9idXNfZG1hbWVtX2ZyZWUoYnVzX2RtYV90YWdfdCBk
bWF0LCB2b2lkICp2YWRkciwgYnVzX2RtYW1hcF90IG1hcCkKK3sKKwkvKgorCSAqIGRtYW1lbSBk
b2VzIG5vdCBuZWVkIHRvIGJlIGJvdW5jZWQsIHNvIHRoZSBtYXAgc2hvdWxkIGJlCisJICogTlVM
TCBhbmQgdGhlIEJVU19ETUFfS01FTV9BTExPQyBmbGFnIGNsZWFyZWQgaWYgbWFsbG9jKCkKKwkg
KiB3YXMgdXNlZCBhbmQgc2V0IGlmIGttZW1fYWxsb2NfY29udGlnKCkgd2FzIHVzZWQuCisJICov
CisJaWYgKG1hcCAhPSBOVUxMKQorCQlwYW5pYygiYnVzX2RtYW1lbV9mcmVlOiBJbnZhbGlkIG1h
cCBmcmVlZFxuIik7CisJaWYgKChkbWF0LT5ib3VuY2VfZmxhZ3MgJiBCVVNfRE1BX0tNRU1fQUxM
T0MpID09IDApCisJCWZyZWUodmFkZHIsIE1fREVWQlVGKTsKKwllbHNlCisJCWttZW1fZnJlZShr
ZXJuZWxfYXJlbmEsICh2bV9vZmZzZXRfdCl2YWRkciwKKwkJICAgIGRtYXQtPmNvbW1vbi5tYXhz
aXplKTsKKwlDVFIzKEtUUl9CVVNETUEsICIlczogdGFnICVwIGZsYWdzIDB4JXgiLCBfX2Z1bmNf
XywgZG1hdCwKKwkgICAgZG1hdC0+Ym91bmNlX2ZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK19i
dXNfZG1hbWFwX2NvdW50X3BoeXMoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFw
LCB2bV9wYWRkcl90IGJ1ZiwKKyAgICBidXNfc2l6ZV90IGJ1ZmxlbiwgaW50IGZsYWdzKQorewor
CWJ1c19hZGRyX3QgY3VyYWRkcjsKKwlidXNfc2l6ZV90IHNnc2l6ZTsKKworCWlmICgobWFwICE9
ICZub2JvdW5jZV9kbWFtYXAgJiYgbWFwLT5wYWdlc25lZWRlZCA9PSAwKSkgeworCQkvKgorCQkg
KiBDb3VudCB0aGUgbnVtYmVyIG9mIGJvdW5jZSBwYWdlcworCQkgKiBuZWVkZWQgaW4gb3JkZXIg
dG8gY29tcGxldGUgdGhpcyB0cmFuc2ZlcgorCQkgKi8KKwkJY3VyYWRkciA9IGJ1ZjsKKwkJd2hp
bGUgKGJ1ZmxlbiAhPSAwKSB7CisJCQlzZ3NpemUgPSBNSU4oYnVmbGVuLCBkbWF0LT5jb21tb24u
bWF4c2Vnc3opOworCQkJaWYgKGJ1c19kbWFfcnVuX2ZpbHRlcigmZG1hdC0+Y29tbW9uLCBjdXJh
ZGRyKSkgeworCQkJCXNnc2l6ZSA9IE1JTihzZ3NpemUsIFBBR0VfU0laRSk7CisJCQkJbWFwLT5w
YWdlc25lZWRlZCsrOworCQkJfQorCQkJY3VyYWRkciArPSBzZ3NpemU7CisJCQlidWZsZW4gLT0g
c2dzaXplOworCQl9CisJCUNUUjEoS1RSX0JVU0RNQSwgInBhZ2VzbmVlZGVkPSAlZFxuIiwgbWFw
LT5wYWdlc25lZWRlZCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorX2J1c19kbWFtYXBfY291bnRf
cGFnZXMoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLCBwbWFwX3QgcG1hcCwK
KyAgICB2b2lkICpidWYsIGJ1c19zaXplX3QgYnVmbGVuLCBpbnQgZmxhZ3MpCit7CisJdm1fb2Zm
c2V0X3QgdmFkZHI7CisJdm1fb2Zmc2V0X3QgdmVuZGFkZHI7CisJYnVzX2FkZHJfdCBwYWRkcjsK
KwlidXNfc2l6ZV90IHNnX2xlbjsKKworCWlmICgobWFwICE9ICZub2JvdW5jZV9kbWFtYXAgJiYg
bWFwLT5wYWdlc25lZWRlZCA9PSAwKSkgeworCQlDVFI0KEtUUl9CVVNETUEsICJsb3dhZGRyPSAl
ZCBNYXhtZW09ICVkLCBib3VuZGFyeT0gJWQsICIKKwkJICAgICJhbGlnbm1lbnQ9ICVkIiwgZG1h
dC0+Y29tbW9uLmxvd2FkZHIsCisJCSAgICBwdG9hKCh2bV9wYWRkcl90KU1heG1lbSksCisJCSAg
ICBkbWF0LT5jb21tb24uYm91bmRhcnksIGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQpOworCQlDVFIz
KEtUUl9CVVNETUEsICJtYXA9ICVwLCBub2JvdW5jZW1hcD0gJXAsIHBhZ2VzbmVlZGVkPSAlZCIs
CisJCSAgICBtYXAsICZub2JvdW5jZV9kbWFtYXAsIG1hcC0+cGFnZXNuZWVkZWQpOworCQkvKgor
CQkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGJvdW5jZSBwYWdlcworCQkgKiBuZWVkZWQgaW4gb3Jk
ZXIgdG8gY29tcGxldGUgdGhpcyB0cmFuc2ZlcgorCQkgKi8KKwkJdmFkZHIgPSAodm1fb2Zmc2V0
X3QpYnVmOworCQl2ZW5kYWRkciA9ICh2bV9vZmZzZXRfdClidWYgKyBidWZsZW47CisKKwkJd2hp
bGUgKHZhZGRyIDwgdmVuZGFkZHIpIHsKKwkJCXNnX2xlbiA9IFBBR0VfU0laRSAtICgodm1fb2Zm
c2V0X3QpdmFkZHIgJiBQQUdFX01BU0spOworCQkJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXApCisJ
CQkJcGFkZHIgPSBwbWFwX2tleHRyYWN0KHZhZGRyKTsKKwkJCWVsc2UKKwkJCQlwYWRkciA9IHBt
YXBfZXh0cmFjdChwbWFwLCB2YWRkcik7CisJCQlpZiAoYnVzX2RtYV9ydW5fZmlsdGVyKCZkbWF0
LT5jb21tb24sIHBhZGRyKSAhPSAwKSB7CisJCQkJc2dfbGVuID0gcm91bmR1cDIoc2dfbGVuLAor
CQkJCSAgICBkbWF0LT5jb21tb24uYWxpZ25tZW50KTsKKwkJCQltYXAtPnBhZ2VzbmVlZGVkKys7
CisJCQl9CisJCQl2YWRkciArPSBzZ19sZW47CisJCX0KKwkJQ1RSMShLVFJfQlVTRE1BLCAicGFn
ZXNuZWVkZWQ9ICVkXG4iLCBtYXAtPnBhZ2VzbmVlZGVkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQK
K19idXNfZG1hbWFwX3Jlc2VydmVfcGFnZXMoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFw
X3QgbWFwLCBpbnQgZmxhZ3MpCit7CisKKwkvKiBSZXNlcnZlIE5lY2Vzc2FyeSBCb3VuY2UgUGFn
ZXMgKi8KKwltdHhfbG9jaygmYm91bmNlX2xvY2spOworCWlmIChmbGFncyAmIEJVU19ETUFfTk9X
QUlUKSB7CisJCWlmIChyZXNlcnZlX2JvdW5jZV9wYWdlcyhkbWF0LCBtYXAsIDApICE9IDApIHsK
KwkJCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQor
CX0gZWxzZSB7CisJCWlmIChyZXNlcnZlX2JvdW5jZV9wYWdlcyhkbWF0LCBtYXAsIDEpICE9IDAp
IHsKKwkJCS8qIFF1ZXVlIHVzIGZvciByZXNvdXJjZXMgKi8KKwkJCVNUQUlMUV9JTlNFUlRfVEFJ
TCgmYm91bmNlX21hcF93YWl0aW5nbGlzdCwgbWFwLCBsaW5rcyk7CisJCQltdHhfdW5sb2NrKCZi
b3VuY2VfbG9jayk7CisJCQlyZXR1cm4gKEVJTlBST0dSRVNTKTsKKwkJfQorCX0KKwltdHhfdW5s
b2NrKCZib3VuY2VfbG9jayk7CisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogQWRkIGEgc2lu
Z2xlIGNvbnRpZ3VvdXMgcGh5c2ljYWwgcmFuZ2UgdG8gdGhlIHNlZ21lbnQgbGlzdC4KKyAqLwor
c3RhdGljIGludAorX2J1c19kbWFtYXBfYWRkc2VnKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2Rt
YW1hcF90IG1hcCwgYnVzX2FkZHJfdCBjdXJhZGRyLAorICAgIGJ1c19zaXplX3Qgc2dzaXplLCBi
dXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50ICpzZWdwKQoreworCWJ1c19hZGRyX3QgYmFkZHIs
IGJtYXNrOworCWludCBzZWc7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCBjcm9zcyBh
bnkgYm91bmRhcmllcy4KKwkgKi8KKwlibWFzayA9IH4oZG1hdC0+Y29tbW9uLmJvdW5kYXJ5IC0g
MSk7CisJaWYgKGRtYXQtPmNvbW1vbi5ib3VuZGFyeSA+IDApIHsKKwkJYmFkZHIgPSAoY3VyYWRk
ciArIGRtYXQtPmNvbW1vbi5ib3VuZGFyeSkgJiBibWFzazsKKwkJaWYgKHNnc2l6ZSA+IChiYWRk
ciAtIGN1cmFkZHIpKQorCQkJc2dzaXplID0gKGJhZGRyIC0gY3VyYWRkcik7CisJfQorCisJLyoK
KwkgKiBJbnNlcnQgY2h1bmsgaW50byBhIHNlZ21lbnQsIGNvYWxlc2Npbmcgd2l0aAorCSAqIHBy
ZXZpb3VzIHNlZ21lbnQgaWYgcG9zc2libGUuCisJICovCisJc2VnID0gKnNlZ3A7CisJaWYgKHNl
ZyA9PSAtMSkgeworCQlzZWcgPSAwOworCQlzZWdzW3NlZ10uZHNfYWRkciA9IGN1cmFkZHI7CisJ
CXNlZ3Nbc2VnXS5kc19sZW4gPSBzZ3NpemU7CisJfSBlbHNlIHsKKwkJaWYgKGN1cmFkZHIgPT0g
c2Vnc1tzZWddLmRzX2FkZHIgKyBzZWdzW3NlZ10uZHNfbGVuICYmCisJCSAgICAoc2Vnc1tzZWdd
LmRzX2xlbiArIHNnc2l6ZSkgPD0gZG1hdC0+Y29tbW9uLm1heHNlZ3N6ICYmCisJCSAgICAoZG1h
dC0+Y29tbW9uLmJvdW5kYXJ5ID09IDAgfHwKKwkJICAgICAoc2Vnc1tzZWddLmRzX2FkZHIgJiBi
bWFzaykgPT0gKGN1cmFkZHIgJiBibWFzaykpKQorCQkJc2Vnc1tzZWddLmRzX2xlbiArPSBzZ3Np
emU7CisJCWVsc2UgeworCQkJaWYgKCsrc2VnID49IGRtYXQtPmNvbW1vbi5uc2VnbWVudHMpCisJ
CQkJcmV0dXJuICgwKTsKKwkJCXNlZ3Nbc2VnXS5kc19hZGRyID0gY3VyYWRkcjsKKwkJCXNlZ3Nb
c2VnXS5kc19sZW4gPSBzZ3NpemU7CisJCX0KKwl9CisJKnNlZ3AgPSBzZWc7CisJcmV0dXJuIChz
Z3NpemUpOworfQorCisvKgorICogVXRpbGl0eSBmdW5jdGlvbiB0byBsb2FkIGEgcGh5c2ljYWwg
YnVmZmVyLiAgc2VncCBjb250YWlucworICogdGhlIHN0YXJ0aW5nIHNlZ21lbnQgb24gZW50cmFj
ZSwgYW5kIHRoZSBlbmRpbmcgc2VnbWVudCBvbiBleGl0LgorICovCitzdGF0aWMgaW50Citib3Vu
Y2VfYnVzX2RtYW1hcF9sb2FkX3BoeXMoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3Qg
bWFwLAorICAgIHZtX3BhZGRyX3QgYnVmLCBidXNfc2l6ZV90IGJ1ZmxlbiwgaW50IGZsYWdzLCBi
dXNfZG1hX3NlZ21lbnRfdCAqc2VncywKKyAgICBpbnQgKnNlZ3ApCit7CisJYnVzX3NpemVfdCBz
Z3NpemU7CisJYnVzX2FkZHJfdCBjdXJhZGRyOworCWludCBlcnJvcjsKKworCWlmIChtYXAgPT0g
TlVMTCkKKwkJbWFwID0gJm5vYm91bmNlX2RtYW1hcDsKKworCWlmIChzZWdzID09IE5VTEwpCisJ
CXNlZ3MgPSBkbWF0LT5zZWdtZW50czsKKworCWlmICgoZG1hdC0+Ym91bmNlX2ZsYWdzICYgQlVT
X0RNQV9DT1VMRF9CT1VOQ0UpICE9IDApIHsKKwkJX2J1c19kbWFtYXBfY291bnRfcGh5cyhkbWF0
LCBtYXAsIGJ1ZiwgYnVmbGVuLCBmbGFncyk7CisJCWlmIChtYXAtPnBhZ2VzbmVlZGVkICE9IDAp
IHsKKwkJCWVycm9yID0gX2J1c19kbWFtYXBfcmVzZXJ2ZV9wYWdlcyhkbWF0LCBtYXAsIGZsYWdz
KTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCX0KKworCXdoaWxl
IChidWZsZW4gPiAwKSB7CisJCWN1cmFkZHIgPSBidWY7CisJCXNnc2l6ZSA9IE1JTihidWZsZW4s
IGRtYXQtPmNvbW1vbi5tYXhzZWdzeik7CisJCWlmICgoKGRtYXQtPmJvdW5jZV9mbGFncyAmIEJV
U19ETUFfQ09VTERfQk9VTkNFKSAhPSAwKSAmJgorCQkgICAgbWFwLT5wYWdlc25lZWRlZCAhPSAw
ICYmCisJCSAgICBidXNfZG1hX3J1bl9maWx0ZXIoJmRtYXQtPmNvbW1vbiwgY3VyYWRkcikpIHsK
KwkJCXNnc2l6ZSA9IE1JTihzZ3NpemUsIFBBR0VfU0laRSk7CisJCQljdXJhZGRyID0gYWRkX2Jv
dW5jZV9wYWdlKGRtYXQsIG1hcCwgMCwgY3VyYWRkciwKKwkJCSAgICBzZ3NpemUpOworCQl9CisJ
CXNnc2l6ZSA9IF9idXNfZG1hbWFwX2FkZHNlZyhkbWF0LCBtYXAsIGN1cmFkZHIsIHNnc2l6ZSwg
c2VncywKKwkJICAgIHNlZ3ApOworCQlpZiAoc2dzaXplID09IDApCisJCQlicmVhazsKKwkJYnVm
ICs9IHNnc2l6ZTsKKwkJYnVmbGVuIC09IHNnc2l6ZTsKKwl9CisKKwkvKgorCSAqIERpZCB3ZSBm
aXQ/CisJICovCisJcmV0dXJuIChidWZsZW4gIT0gMCA/IEVGQklHIDogMCk7IC8qIFhYWCBiZXR0
ZXIgcmV0dXJuIHZhbHVlIGhlcmU/ICovCit9CisKKy8qCisgKiBVdGlsaXR5IGZ1bmN0aW9uIHRv
IGxvYWQgYSBsaW5lYXIgYnVmZmVyLiAgc2VncCBjb250YWlucworICogdGhlIHN0YXJ0aW5nIHNl
Z21lbnQgb24gZW50cmFjZSwgYW5kIHRoZSBlbmRpbmcgc2VnbWVudCBvbiBleGl0LgorICovCitz
dGF0aWMgaW50Citib3VuY2VfYnVzX2RtYW1hcF9sb2FkX2J1ZmZlcihidXNfZG1hX3RhZ190IGRt
YXQsIGJ1c19kbWFtYXBfdCBtYXAsIHZvaWQgKmJ1ZiwKKyAgICBidXNfc2l6ZV90IGJ1Zmxlbiwg
cG1hcF90IHBtYXAsIGludCBmbGFncywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsCisgICAgaW50
ICpzZWdwKQoreworCWJ1c19zaXplX3Qgc2dzaXplLCBtYXhfc2dzaXplOworCWJ1c19hZGRyX3Qg
Y3VyYWRkcjsKKwl2bV9vZmZzZXRfdCB2YWRkcjsKKwlpbnQgZXJyb3I7CisKKwlpZiAobWFwID09
IE5VTEwpCisJCW1hcCA9ICZub2JvdW5jZV9kbWFtYXA7CisKKwlpZiAoc2VncyA9PSBOVUxMKQor
CQlzZWdzID0gZG1hdC0+c2VnbWVudHM7CisKKwlpZiAoKGRtYXQtPmJvdW5jZV9mbGFncyAmIEJV
U19ETUFfQ09VTERfQk9VTkNFKSAhPSAwKSB7CisJCV9idXNfZG1hbWFwX2NvdW50X3BhZ2VzKGRt
YXQsIG1hcCwgcG1hcCwgYnVmLCBidWZsZW4sIGZsYWdzKTsKKwkJaWYgKG1hcC0+cGFnZXNuZWVk
ZWQgIT0gMCkgeworCQkJZXJyb3IgPSBfYnVzX2RtYW1hcF9yZXNlcnZlX3BhZ2VzKGRtYXQsIG1h
cCwgZmxhZ3MpOworCQkJaWYgKGVycm9yKQorCQkJCXJldHVybiAoZXJyb3IpOworCQl9CisJfQor
CisJdmFkZHIgPSAodm1fb2Zmc2V0X3QpYnVmOworCXdoaWxlIChidWZsZW4gPiAwKSB7CisJCS8q
CisJCSAqIEdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmb3IgdGhpcyBzZWdtZW50LgorCQkgKi8K
KwkJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXApCisJCQljdXJhZGRyID0gcG1hcF9rZXh0cmFjdCh2
YWRkcik7CisJCWVsc2UKKwkJCWN1cmFkZHIgPSBwbWFwX2V4dHJhY3QocG1hcCwgdmFkZHIpOwor
CisJCS8qCisJCSAqIENvbXB1dGUgdGhlIHNlZ21lbnQgc2l6ZSwgYW5kIGFkanVzdCBjb3VudHMu
CisJCSAqLworCQltYXhfc2dzaXplID0gTUlOKGJ1ZmxlbiwgZG1hdC0+Y29tbW9uLm1heHNlZ3N6
KTsKKwkJc2dzaXplID0gUEFHRV9TSVpFIC0gKCh2bV9vZmZzZXRfdCljdXJhZGRyICYgUEFHRV9N
QVNLKTsKKwkJaWYgKCgoZG1hdC0+Ym91bmNlX2ZsYWdzICYgQlVTX0RNQV9DT1VMRF9CT1VOQ0Up
ICE9IDApICYmCisJCSAgICBtYXAtPnBhZ2VzbmVlZGVkICE9IDAgJiYKKwkJICAgIGJ1c19kbWFf
cnVuX2ZpbHRlcigmZG1hdC0+Y29tbW9uLCBjdXJhZGRyKSkgeworCQkJc2dzaXplID0gcm91bmR1
cDIoc2dzaXplLCBkbWF0LT5jb21tb24uYWxpZ25tZW50KTsKKwkJCXNnc2l6ZSA9IE1JTihzZ3Np
emUsIG1heF9zZ3NpemUpOworCQkJY3VyYWRkciA9IGFkZF9ib3VuY2VfcGFnZShkbWF0LCBtYXAs
IHZhZGRyLCBjdXJhZGRyLAorCQkJICAgIHNnc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlzZ3NpemUg
PSBNSU4oc2dzaXplLCBtYXhfc2dzaXplKTsKKwkJfQorCQlzZ3NpemUgPSBfYnVzX2RtYW1hcF9h
ZGRzZWcoZG1hdCwgbWFwLCBjdXJhZGRyLCBzZ3NpemUsIHNlZ3MsCisJCSAgICBzZWdwKTsKKwkJ
aWYgKHNnc2l6ZSA9PSAwKQorCQkJYnJlYWs7CisJCXZhZGRyICs9IHNnc2l6ZTsKKwkJYnVmbGVu
IC09IHNnc2l6ZTsKKwl9CisKKwkvKgorCSAqIERpZCB3ZSBmaXQ/CisJICovCisJcmV0dXJuIChi
dWZsZW4gIT0gMCA/IEVGQklHIDogMCk7IC8qIFhYWCBiZXR0ZXIgcmV0dXJuIHZhbHVlIGhlcmU/
ICovCit9CisKK3N0YXRpYyB2b2lkCitib3VuY2VfYnVzX2RtYW1hcF93YWl0b2soYnVzX2RtYV90
YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorICAgIHN0cnVjdCBtZW1kZXNjICptZW0sIGJ1
c19kbWFtYXBfY2FsbGJhY2tfdCAqY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2FyZykKK3sKKwor
CWlmIChtYXAgPT0gTlVMTCkKKwkJcmV0dXJuOworCW1hcC0+bWVtID0gKm1lbTsKKwltYXAtPmRt
YXQgPSBkbWF0OworCW1hcC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwltYXAtPmNhbGxiYWNrX2Fy
ZyA9IGNhbGxiYWNrX2FyZzsKK30KKworc3RhdGljIGJ1c19kbWFfc2VnbWVudF90ICoKK2JvdW5j
ZV9idXNfZG1hbWFwX2NvbXBsZXRlKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1h
cCwKKyAgICBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpCit7
CisKKwlpZiAoc2VncyA9PSBOVUxMKQorCQlzZWdzID0gZG1hdC0+c2VnbWVudHM7CisJcmV0dXJu
IChzZWdzKTsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIG1hcHBpbmcgaGVsZCBieSBtYXAuCisg
Ki8KK3N0YXRpYyB2b2lkCitib3VuY2VfYnVzX2RtYW1hcF91bmxvYWQoYnVzX2RtYV90YWdfdCBk
bWF0LCBidXNfZG1hbWFwX3QgbWFwKQoreworCXN0cnVjdCBib3VuY2VfcGFnZSAqYnBhZ2U7CisK
Kwl3aGlsZSAoKGJwYWdlID0gU1RBSUxRX0ZJUlNUKCZtYXAtPmJwYWdlcykpICE9IE5VTEwpIHsK
KwkJU1RBSUxRX1JFTU9WRV9IRUFEKCZtYXAtPmJwYWdlcywgbGlua3MpOworCQlmcmVlX2JvdW5j
ZV9wYWdlKGRtYXQsIGJwYWdlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitib3VuY2VfYnVzX2Rt
YW1hcF9zeW5jKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBidXNf
ZG1hc3luY19vcF90IG9wKQoreworCXN0cnVjdCBib3VuY2VfcGFnZSAqYnBhZ2U7CisKKwkvKgor
CSAqIFhYWCBBUk02NFRPRE86CisJICogVGhpcyBidXNfZG1hIGltcGxlbWVudGF0aW9uIHJlcXVp
cmVzIElPLUNvaGVyZW50IGFyY2hpdGVjdXRyZS4KKwkgKiBJZiBJTy1Db2hlcmVuY3kgaXMgbm90
IGd1YXJhbnRlZWQsIGNhY2hlIG9wZXJhdGlvbnMgaGF2ZSB0byBiZQorCSAqIGFkZGVkIHRvIHRo
aXMgZnVuY3Rpb24uCisJICovCisKKwlpZiAoKGJwYWdlID0gU1RBSUxRX0ZJUlNUKCZtYXAtPmJw
YWdlcykpICE9IE5VTEwpIHsKKwkJLyoKKwkJICogSGFuZGxlIGRhdGEgYm91bmNpbmcuICBXZSBt
aWdodCBhbHNvCisJCSAqIHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGludmFsaWRhdGluZworCQkg
KiB0aGUgY2FjaGVzIG9uIGJyb2tlbiBoYXJkd2FyZQorCQkgKi8KKwkJQ1RSNChLVFJfQlVTRE1B
LCAiJXM6IHRhZyAlcCB0YWcgZmxhZ3MgMHgleCBvcCAweCV4ICIKKwkJICAgICJwZXJmb3JtaW5n
IGJvdW5jZSIsIF9fZnVuY19fLCBkbWF0LAorCQkgICAgZG1hdC0+Y29tbW9uLmZsYWdzLCBvcCk7
CisKKwkJaWYgKChvcCAmIEJVU19ETUFTWU5DX1BSRVdSSVRFKSAhPSAwKSB7CisJCQl3aGlsZSAo
YnBhZ2UgIT0gTlVMTCkgeworCQkJCWlmIChicGFnZS0+ZGF0YXZhZGRyICE9IDApIHsKKwkJCQkJ
YmNvcHkoKHZvaWQgKilicGFnZS0+ZGF0YXZhZGRyLAorCQkJCQkgICAgKHZvaWQgKilicGFnZS0+
dmFkZHIsCisJCQkJCSAgICBicGFnZS0+ZGF0YWNvdW50KTsKKwkJCQl9IGVsc2UgeworCQkJCQlw
aHlzY29weW91dChicGFnZS0+ZGF0YWFkZHIsCisJCQkJCSAgICAodm9pZCAqKWJwYWdlLT52YWRk
ciwKKwkJCQkJICAgIGJwYWdlLT5kYXRhY291bnQpOworCQkJCX0KKwkJCQlicGFnZSA9IFNUQUlM
UV9ORVhUKGJwYWdlLCBsaW5rcyk7CisJCQl9CisJCQlkbWF0LT5ib3VuY2Vfem9uZS0+dG90YWxf
Ym91bmNlZCsrOworCQl9CisKKwkJaWYgKChvcCAmIEJVU19ETUFTWU5DX1BPU1RSRUFEKSAhPSAw
KSB7CisJCQl3aGlsZSAoYnBhZ2UgIT0gTlVMTCkgeworCQkJCWlmIChicGFnZS0+ZGF0YXZhZGRy
ICE9IDApIHsKKwkJCQkJYmNvcHkoKHZvaWQgKilicGFnZS0+dmFkZHIsCisJCQkJCSAgICAodm9p
ZCAqKWJwYWdlLT5kYXRhdmFkZHIsCisJCQkJCSAgICBicGFnZS0+ZGF0YWNvdW50KTsKKwkJCQl9
IGVsc2UgeworCQkJCQlwaHlzY29weWluKCh2b2lkICopYnBhZ2UtPnZhZGRyLAorCQkJCQkgICAg
YnBhZ2UtPmRhdGFhZGRyLAorCQkJCQkgICAgYnBhZ2UtPmRhdGFjb3VudCk7CisJCQkJfQorCQkJ
CWJwYWdlID0gU1RBSUxRX05FWFQoYnBhZ2UsIGxpbmtzKTsKKwkJCX0KKwkJCWRtYXQtPmJvdW5j
ZV96b25lLT50b3RhbF9ib3VuY2VkKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0
X2JvdW5jZV9wYWdlcyh2b2lkICpkdW1teSBfX3VudXNlZCkKK3sKKworCXRvdGFsX2JwYWdlcyA9
IDA7CisJU1RBSUxRX0lOSVQoJmJvdW5jZV96b25lX2xpc3QpOworCVNUQUlMUV9JTklUKCZib3Vu
Y2VfbWFwX3dhaXRpbmdsaXN0KTsKKwlTVEFJTFFfSU5JVCgmYm91bmNlX21hcF9jYWxsYmFja2xp
c3QpOworCW10eF9pbml0KCZib3VuY2VfbG9jaywgImJvdW5jZSBwYWdlcyBsb2NrIiwgTlVMTCwg
TVRYX0RFRik7Cit9CitTWVNJTklUKGJwYWdlcywgU0lfU1VCX0xPQ0ssIFNJX09SREVSX0FOWSwg
aW5pdF9ib3VuY2VfcGFnZXMsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IHN5c2N0bF9jdHhfbGlz
dCAqCitidXNkbWFfc3lzY3RsX3RyZWUoc3RydWN0IGJvdW5jZV96b25lICpieikKK3sKKwlyZXR1
cm4gKCZiei0+c3lzY3RsX3RyZWUpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2N0bF9vaWQgKgor
YnVzZG1hX3N5c2N0bF90cmVlX3RvcChzdHJ1Y3QgYm91bmNlX3pvbmUgKmJ6KQoreworCXJldHVy
biAoYnotPnN5c2N0bF90cmVlX3RvcCk7Cit9CisKK3N0YXRpYyBpbnQKK2FsbG9jX2JvdW5jZV96
b25lKGJ1c19kbWFfdGFnX3QgZG1hdCkKK3sKKwlzdHJ1Y3QgYm91bmNlX3pvbmUgKmJ6OworCisJ
LyogQ2hlY2sgdG8gc2VlIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHN1aXRhYmxlIHpvbmUgKi8KKwlT
VEFJTFFfRk9SRUFDSChieiwgJmJvdW5jZV96b25lX2xpc3QsIGxpbmtzKSB7CisJCWlmICgoZG1h
dC0+Y29tbW9uLmFsaWdubWVudCA8PSBiei0+YWxpZ25tZW50KSAmJgorCQkgICAgKGRtYXQtPmNv
bW1vbi5sb3dhZGRyID49IGJ6LT5sb3dhZGRyKSkgeworCQkJZG1hdC0+Ym91bmNlX3pvbmUgPSBi
ejsKKwkJCXJldHVybiAoMCk7CisJCX0KKwl9CisKKwlpZiAoKGJ6ID0gKHN0cnVjdCBib3VuY2Vf
em9uZSAqKW1hbGxvYyhzaXplb2YoKmJ6KSwgTV9ERVZCVUYsCisJICAgIE1fTk9XQUlUIHwgTV9a
RVJPKSkgPT0gTlVMTCkKKwkJcmV0dXJuIChFTk9NRU0pOworCisJU1RBSUxRX0lOSVQoJmJ6LT5i
b3VuY2VfcGFnZV9saXN0KTsKKwliei0+ZnJlZV9icGFnZXMgPSAwOworCWJ6LT5yZXNlcnZlZF9i
cGFnZXMgPSAwOworCWJ6LT5hY3RpdmVfYnBhZ2VzID0gMDsKKwliei0+bG93YWRkciA9IGRtYXQt
PmNvbW1vbi5sb3dhZGRyOworCWJ6LT5hbGlnbm1lbnQgPSBNQVgoZG1hdC0+Y29tbW9uLmFsaWdu
bWVudCwgUEFHRV9TSVpFKTsKKwliei0+bWFwX2NvdW50ID0gMDsKKwlzbnByaW50Zihiei0+em9u
ZWlkLCA4LCAiem9uZSVkIiwgYnVzZG1hX3pvbmVjb3VudCk7CisJYnVzZG1hX3pvbmVjb3VudCsr
OworCXNucHJpbnRmKGJ6LT5sb3dhZGRyaWQsIDE4LCAiJSNqeCIsICh1aW50bWF4X3QpYnotPmxv
d2FkZHIpOworCVNUQUlMUV9JTlNFUlRfVEFJTCgmYm91bmNlX3pvbmVfbGlzdCwgYnosIGxpbmtz
KTsKKwlkbWF0LT5ib3VuY2Vfem9uZSA9IGJ6OworCisJc3lzY3RsX2N0eF9pbml0KCZiei0+c3lz
Y3RsX3RyZWUpOworCWJ6LT5zeXNjdGxfdHJlZV90b3AgPSBTWVNDVExfQUREX05PREUoJmJ6LT5z
eXNjdGxfdHJlZSwKKwkgICAgU1lTQ1RMX1NUQVRJQ19DSElMRFJFTihfaHdfYnVzZG1hKSwgT0lE
X0FVVE8sIGJ6LT56b25laWQsCisJICAgIENUTEZMQUdfUkQsIDAsICIiKTsKKwlpZiAoYnotPnN5
c2N0bF90cmVlX3RvcCA9PSBOVUxMKSB7CisJCXN5c2N0bF9jdHhfZnJlZSgmYnotPnN5c2N0bF90
cmVlKTsKKwkJcmV0dXJuICgwKTsJLyogWFhYIGVycm9yIGNvZGU/ICovCisJfQorCisJU1lTQ1RM
X0FERF9JTlQoYnVzZG1hX3N5c2N0bF90cmVlKGJ6KSwKKwkgICAgU1lTQ1RMX0NISUxEUkVOKGJ1
c2RtYV9zeXNjdGxfdHJlZV90b3AoYnopKSwgT0lEX0FVVE8sCisJICAgICJ0b3RhbF9icGFnZXMi
LCBDVExGTEFHX1JELCAmYnotPnRvdGFsX2JwYWdlcywgMCwKKwkgICAgIlRvdGFsIGJvdW5jZSBw
YWdlcyIpOworCVNZU0NUTF9BRERfSU5UKGJ1c2RtYV9zeXNjdGxfdHJlZShieiksCisJICAgIFNZ
U0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9wKGJ6KSksIE9JRF9BVVRPLAorCSAg
ICAiZnJlZV9icGFnZXMiLCBDVExGTEFHX1JELCAmYnotPmZyZWVfYnBhZ2VzLCAwLAorCSAgICAi
RnJlZSBib3VuY2UgcGFnZXMiKTsKKwlTWVNDVExfQUREX0lOVChidXNkbWFfc3lzY3RsX3RyZWUo
YnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVzZG1hX3N5c2N0bF90cmVlX3RvcChieikpLCBP
SURfQVVUTywKKwkgICAgInJlc2VydmVkX2JwYWdlcyIsIENUTEZMQUdfUkQsICZiei0+cmVzZXJ2
ZWRfYnBhZ2VzLCAwLAorCSAgICAiUmVzZXJ2ZWQgYm91bmNlIHBhZ2VzIik7CisJU1lTQ1RMX0FE
RF9JTlQoYnVzZG1hX3N5c2N0bF90cmVlKGJ6KSwKKwkgICAgU1lTQ1RMX0NISUxEUkVOKGJ1c2Rt
YV9zeXNjdGxfdHJlZV90b3AoYnopKSwgT0lEX0FVVE8sCisJICAgICJhY3RpdmVfYnBhZ2VzIiwg
Q1RMRkxBR19SRCwgJmJ6LT5hY3RpdmVfYnBhZ2VzLCAwLAorCSAgICAiQWN0aXZlIGJvdW5jZSBw
YWdlcyIpOworCVNZU0NUTF9BRERfSU5UKGJ1c2RtYV9zeXNjdGxfdHJlZShieiksCisJICAgIFNZ
U0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9wKGJ6KSksIE9JRF9BVVRPLAorCSAg
ICAidG90YWxfYm91bmNlZCIsIENUTEZMQUdfUkQsICZiei0+dG90YWxfYm91bmNlZCwgMCwKKwkg
ICAgIlRvdGFsIGJvdW5jZSByZXF1ZXN0cyIpOworCVNZU0NUTF9BRERfSU5UKGJ1c2RtYV9zeXNj
dGxfdHJlZShieiksCisJICAgIFNZU0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9w
KGJ6KSksIE9JRF9BVVRPLAorCSAgICAidG90YWxfZGVmZXJyZWQiLCBDVExGTEFHX1JELCAmYnot
PnRvdGFsX2RlZmVycmVkLCAwLAorCSAgICAiVG90YWwgYm91bmNlIHJlcXVlc3RzIHRoYXQgd2Vy
ZSBkZWZlcnJlZCIpOworCVNZU0NUTF9BRERfU1RSSU5HKGJ1c2RtYV9zeXNjdGxfdHJlZShieiks
CisJICAgIFNZU0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9wKGJ6KSksIE9JRF9B
VVRPLAorCSAgICAibG93YWRkciIsIENUTEZMQUdfUkQsIGJ6LT5sb3dhZGRyaWQsIDAsICIiKTsK
KwlTWVNDVExfQUREX1VBVVRPKGJ1c2RtYV9zeXNjdGxfdHJlZShieiksCisJICAgIFNZU0NUTF9D
SElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9wKGJ6KSksIE9JRF9BVVRPLAorCSAgICAiYWxp
Z25tZW50IiwgQ1RMRkxBR19SRCwgJmJ6LT5hbGlnbm1lbnQsICIiKTsKKworCXJldHVybiAoMCk7
Cit9CisKK3N0YXRpYyBpbnQKK2FsbG9jX2JvdW5jZV9wYWdlcyhidXNfZG1hX3RhZ190IGRtYXQs
IHVfaW50IG51bXBhZ2VzKQoreworCXN0cnVjdCBib3VuY2Vfem9uZSAqYno7CisJaW50IGNvdW50
OworCisJYnogPSBkbWF0LT5ib3VuY2Vfem9uZTsKKwljb3VudCA9IDA7CisJd2hpbGUgKG51bXBh
Z2VzID4gMCkgeworCQlzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJwYWdlOworCisJCWJwYWdlID0gKHN0
cnVjdCBib3VuY2VfcGFnZSAqKW1hbGxvYyhzaXplb2YoKmJwYWdlKSwgTV9ERVZCVUYsCisJCQkJ
CQkgICAgIE1fTk9XQUlUIHwgTV9aRVJPKTsKKworCQlpZiAoYnBhZ2UgPT0gTlVMTCkKKwkJCWJy
ZWFrOworCQlicGFnZS0+dmFkZHIgPSAodm1fb2Zmc2V0X3QpY29udGlnbWFsbG9jKFBBR0VfU0la
RSwgTV9ERVZCVUYsCisJCSAgICBNX05PV0FJVCwgMHVsLCBiei0+bG93YWRkciwgUEFHRV9TSVpF
LCAwKTsKKwkJaWYgKGJwYWdlLT52YWRkciA9PSAwKSB7CisJCQlmcmVlKGJwYWdlLCBNX0RFVkJV
Rik7CisJCQlicmVhazsKKwkJfQorCQlicGFnZS0+YnVzYWRkciA9IHBtYXBfa2V4dHJhY3QoYnBh
Z2UtPnZhZGRyKTsKKwkJbXR4X2xvY2soJmJvdW5jZV9sb2NrKTsKKwkJU1RBSUxRX0lOU0VSVF9U
QUlMKCZiei0+Ym91bmNlX3BhZ2VfbGlzdCwgYnBhZ2UsIGxpbmtzKTsKKwkJdG90YWxfYnBhZ2Vz
Kys7CisJCWJ6LT50b3RhbF9icGFnZXMrKzsKKwkJYnotPmZyZWVfYnBhZ2VzKys7CisJCW10eF91
bmxvY2soJmJvdW5jZV9sb2NrKTsKKwkJY291bnQrKzsKKwkJbnVtcGFnZXMtLTsKKwl9CisJcmV0
dXJuIChjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc2VydmVfYm91bmNlX3BhZ2VzKGJ1c19k
bWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgaW50IGNvbW1pdCkKK3sKKwlzdHJ1Y3Qg
Ym91bmNlX3pvbmUgKmJ6OworCWludCBwYWdlczsKKworCW10eF9hc3NlcnQoJmJvdW5jZV9sb2Nr
LCBNQV9PV05FRCk7CisJYnogPSBkbWF0LT5ib3VuY2Vfem9uZTsKKwlwYWdlcyA9IE1JTihiei0+
ZnJlZV9icGFnZXMsIG1hcC0+cGFnZXNuZWVkZWQgLSBtYXAtPnBhZ2VzcmVzZXJ2ZWQpOworCWlm
IChjb21taXQgPT0gMCAmJiBtYXAtPnBhZ2VzbmVlZGVkID4gKG1hcC0+cGFnZXNyZXNlcnZlZCAr
IHBhZ2VzKSkKKwkJcmV0dXJuIChtYXAtPnBhZ2VzbmVlZGVkIC0gKG1hcC0+cGFnZXNyZXNlcnZl
ZCArIHBhZ2VzKSk7CisJYnotPmZyZWVfYnBhZ2VzIC09IHBhZ2VzOworCWJ6LT5yZXNlcnZlZF9i
cGFnZXMgKz0gcGFnZXM7CisJbWFwLT5wYWdlc3Jlc2VydmVkICs9IHBhZ2VzOworCXBhZ2VzID0g
bWFwLT5wYWdlc25lZWRlZCAtIG1hcC0+cGFnZXNyZXNlcnZlZDsKKworCXJldHVybiAocGFnZXMp
OworfQorCitzdGF0aWMgYnVzX2FkZHJfdAorYWRkX2JvdW5jZV9wYWdlKGJ1c19kbWFfdGFnX3Qg
ZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsCisJCWJ1c19hZGRyX3Qg
YWRkciwgYnVzX3NpemVfdCBzaXplKQoreworCXN0cnVjdCBib3VuY2Vfem9uZSAqYno7CisJc3Ry
dWN0IGJvdW5jZV9wYWdlICpicGFnZTsKKworCUtBU1NFUlQoZG1hdC0+Ym91bmNlX3pvbmUgIT0g
TlVMTCwgKCJubyBib3VuY2Ugem9uZSBpbiBkbWEgdGFnIikpOworCUtBU1NFUlQobWFwICE9IE5V
TEwgJiYgbWFwICE9ICZub2JvdW5jZV9kbWFtYXAsCisJICAgICgiYWRkX2JvdW5jZV9wYWdlOiBi
YWQgbWFwICVwIiwgbWFwKSk7CisKKwlieiA9IGRtYXQtPmJvdW5jZV96b25lOworCWlmIChtYXAt
PnBhZ2VzbmVlZGVkID09IDApCisJCXBhbmljKCJhZGRfYm91bmNlX3BhZ2U6IG1hcCBkb2Vzbid0
IG5lZWQgYW55IHBhZ2VzIik7CisJbWFwLT5wYWdlc25lZWRlZC0tOworCisJaWYgKG1hcC0+cGFn
ZXNyZXNlcnZlZCA9PSAwKQorCQlwYW5pYygiYWRkX2JvdW5jZV9wYWdlOiBtYXAgZG9lc24ndCBu
ZWVkIGFueSBwYWdlcyIpOworCW1hcC0+cGFnZXNyZXNlcnZlZC0tOworCisJbXR4X2xvY2soJmJv
dW5jZV9sb2NrKTsKKwlicGFnZSA9IFNUQUlMUV9GSVJTVCgmYnotPmJvdW5jZV9wYWdlX2xpc3Qp
OworCWlmIChicGFnZSA9PSBOVUxMKQorCQlwYW5pYygiYWRkX2JvdW5jZV9wYWdlOiBmcmVlIHBh
Z2UgbGlzdCBpcyBlbXB0eSIpOworCisJU1RBSUxRX1JFTU9WRV9IRUFEKCZiei0+Ym91bmNlX3Bh
Z2VfbGlzdCwgbGlua3MpOworCWJ6LT5yZXNlcnZlZF9icGFnZXMtLTsKKwliei0+YWN0aXZlX2Jw
YWdlcysrOworCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKKworCWlmIChkbWF0LT5jb21tb24u
ZmxhZ3MgJiBCVVNfRE1BX0tFRVBfUEdfT0ZGU0VUKSB7CisJCS8qIFBhZ2Ugb2Zmc2V0IG5lZWRz
IHRvIGJlIHByZXNlcnZlZC4gKi8KKwkJYnBhZ2UtPnZhZGRyIHw9IGFkZHIgJiBQQUdFX01BU0s7
CisJCWJwYWdlLT5idXNhZGRyIHw9IGFkZHIgJiBQQUdFX01BU0s7CisJfQorCWJwYWdlLT5kYXRh
dmFkZHIgPSB2YWRkcjsKKwlicGFnZS0+ZGF0YWFkZHIgPSBhZGRyOworCWJwYWdlLT5kYXRhY291
bnQgPSBzaXplOworCVNUQUlMUV9JTlNFUlRfVEFJTCgmKG1hcC0+YnBhZ2VzKSwgYnBhZ2UsIGxp
bmtzKTsKKwlyZXR1cm4gKGJwYWdlLT5idXNhZGRyKTsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVf
Ym91bmNlX3BhZ2UoYnVzX2RtYV90YWdfdCBkbWF0LCBzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJwYWdl
KQoreworCXN0cnVjdCBidXNfZG1hbWFwICptYXA7CisJc3RydWN0IGJvdW5jZV96b25lICpiejsK
KworCWJ6ID0gZG1hdC0+Ym91bmNlX3pvbmU7CisJYnBhZ2UtPmRhdGF2YWRkciA9IDA7CisJYnBh
Z2UtPmRhdGFjb3VudCA9IDA7CisJaWYgKGRtYXQtPmNvbW1vbi5mbGFncyAmIEJVU19ETUFfS0VF
UF9QR19PRkZTRVQpIHsKKwkJLyoKKwkJICogUmVzZXQgdGhlIGJvdW5jZSBwYWdlIHRvIHN0YXJ0
IGF0IG9mZnNldCAwLiAgT3RoZXIgdXNlcworCQkgKiBvZiB0aGlzIGJvdW5jZSBwYWdlIG1heSBu
ZWVkIHRvIHN0b3JlIGEgZnVsbCBwYWdlIG9mCisJCSAqIGRhdGEgYW5kL29yIGFzc3VtZSBpdCBz
dGFydHMgb24gYSBwYWdlIGJvdW5kYXJ5LgorCQkgKi8KKwkJYnBhZ2UtPnZhZGRyICY9IH5QQUdF
X01BU0s7CisJCWJwYWdlLT5idXNhZGRyICY9IH5QQUdFX01BU0s7CisJfQorCisJbXR4X2xvY2so
JmJvdW5jZV9sb2NrKTsKKwlTVEFJTFFfSU5TRVJUX0hFQUQoJmJ6LT5ib3VuY2VfcGFnZV9saXN0
LCBicGFnZSwgbGlua3MpOworCWJ6LT5mcmVlX2JwYWdlcysrOworCWJ6LT5hY3RpdmVfYnBhZ2Vz
LS07CisJaWYgKChtYXAgPSBTVEFJTFFfRklSU1QoJmJvdW5jZV9tYXBfd2FpdGluZ2xpc3QpKSAh
PSBOVUxMKSB7CisJCWlmIChyZXNlcnZlX2JvdW5jZV9wYWdlcyhtYXAtPmRtYXQsIG1hcCwgMSkg
PT0gMCkgeworCQkJU1RBSUxRX1JFTU9WRV9IRUFEKCZib3VuY2VfbWFwX3dhaXRpbmdsaXN0LCBs
aW5rcyk7CisJCQlTVEFJTFFfSU5TRVJUX1RBSUwoJmJvdW5jZV9tYXBfY2FsbGJhY2tsaXN0LAor
CQkJICAgIG1hcCwgbGlua3MpOworCQkJYnVzZG1hX3N3aV9wZW5kaW5nID0gMTsKKwkJCWJ6LT50
b3RhbF9kZWZlcnJlZCsrOworCQkJc3dpX3NjaGVkKHZtX2loLCAwKTsKKwkJfQorCX0KKwltdHhf
dW5sb2NrKCZib3VuY2VfbG9jayk7Cit9CisKK3ZvaWQKK2J1c2RtYV9zd2kodm9pZCkKK3sKKwli
dXNfZG1hX3RhZ190IGRtYXQ7CisJc3RydWN0IGJ1c19kbWFtYXAgKm1hcDsKKworCW10eF9sb2Nr
KCZib3VuY2VfbG9jayk7CisJd2hpbGUgKChtYXAgPSBTVEFJTFFfRklSU1QoJmJvdW5jZV9tYXBf
Y2FsbGJhY2tsaXN0KSkgIT0gTlVMTCkgeworCQlTVEFJTFFfUkVNT1ZFX0hFQUQoJmJvdW5jZV9t
YXBfY2FsbGJhY2tsaXN0LCBsaW5rcyk7CisJCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKKwkJ
ZG1hdCA9IG1hcC0+ZG1hdDsKKwkJKGRtYXQtPmNvbW1vbi5sb2NrZnVuYykoZG1hdC0+Y29tbW9u
LmxvY2tmdW5jYXJnLCBCVVNfRE1BX0xPQ0spOworCQlidXNfZG1hbWFwX2xvYWRfbWVtKG1hcC0+
ZG1hdCwgbWFwLCAmbWFwLT5tZW0sCisJCSAgICBtYXAtPmNhbGxiYWNrLCBtYXAtPmNhbGxiYWNr
X2FyZywgQlVTX0RNQV9XQUlUT0spOworCQkoZG1hdC0+Y29tbW9uLmxvY2tmdW5jKShkbWF0LT5j
b21tb24ubG9ja2Z1bmNhcmcsCisJCSAgICBCVVNfRE1BX1VOTE9DSyk7CisJCW10eF9sb2NrKCZi
b3VuY2VfbG9jayk7CisJfQorCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKK30KKworc3RydWN0
IGJ1c19kbWFfaW1wbCBidXNfZG1hX2JvdW5jZV9pbXBsID0geworCS50YWdfY3JlYXRlID0gYm91
bmNlX2J1c19kbWFfdGFnX2NyZWF0ZSwKKwkudGFnX2Rlc3Ryb3kgPSBib3VuY2VfYnVzX2RtYV90
YWdfZGVzdHJveSwKKwkubWFwX2NyZWF0ZSA9IGJvdW5jZV9idXNfZG1hbWFwX2NyZWF0ZSwKKwku
bWFwX2Rlc3Ryb3kgPSBib3VuY2VfYnVzX2RtYW1hcF9kZXN0cm95LAorCS5tZW1fYWxsb2MgPSBi
b3VuY2VfYnVzX2RtYW1lbV9hbGxvYywKKwkubWVtX2ZyZWUgPSBib3VuY2VfYnVzX2RtYW1lbV9m
cmVlLAorCS5sb2FkX3BoeXMgPSBib3VuY2VfYnVzX2RtYW1hcF9sb2FkX3BoeXMsCisJLmxvYWRf
YnVmZmVyID0gYm91bmNlX2J1c19kbWFtYXBfbG9hZF9idWZmZXIsCisJLmxvYWRfbWEgPSBidXNf
ZG1hbWFwX2xvYWRfbWFfdHJpdiwKKwkubWFwX3dhaXRvayA9IGJvdW5jZV9idXNfZG1hbWFwX3dh
aXRvaywKKwkubWFwX2NvbXBsZXRlID0gYm91bmNlX2J1c19kbWFtYXBfY29tcGxldGUsCisJLm1h
cF91bmxvYWQgPSBib3VuY2VfYnVzX2RtYW1hcF91bmxvYWQsCisJLm1hcF9zeW5jID0gYm91bmNl
X2J1c19kbWFtYXBfc3luYworfTsKCg==


--b1_0898dab31300b56c7a2404adbbcb53b3--



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