Re: Re: [PATCH] BadRAM for 2.5.73-mm2

steven.newbury1@ntlworld.com
Wed, 2 Jul 2003 12:58:46 +0000


This is a MIME-formatted message. If you see this text it means that your
E-mail software does not support MIME-formatted messages.

--=_courier-3984-1057150804-0001-2
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

============================================================
From: Oleg Drokin <green@namesys.com>
Date: 2003/07/02 Wed AM 06:23:24 GMT
To: steven.newbury1@ntlworld.com
CC: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] BadRAM for 2.5.73-mm2

Hello!

On Wed, Jul 02, 2003 at 03:33:26AM +0000, steven.newbury1@ntlworld.com wrote:

> It will probably apply cleanly to 2.5.73 as well but I haven't checked it
> yet...

This

> It is based it on
> http://rick.vanrein.org/linux/badram/software/BadRAM-2.4.20.1.patch

and this patches both have a bug that effectively disables all highmem (if present)
when badram patch is activated. I contacted Rick, but never got any answer back.
(in fact I got an auto reply from some Debian bugtracking system, but that's about it).
Corrected 2.4.21 version of the patch is available at
http://linuxhacker.ru/patches/2.4.21-badram.diff

The arch/i386/mm/init.c part:
> +void __init one_highpage_init(struct page *page, int pfn, int bad_ppro,
> + _Bool *bad)
> {
> + *bad = 0;
> if (page_is_ram(pfn) && !(bad_ppro && page_kills_ppro(pfn))) {
> ClearPageReserved(page);
> set_bit(PG_highmem, &page->flags);
> set_page_count(page, 1);
> - __free_page(page);
> +#ifdef CONFIG_BADRAM
> + if (PageBad(page))
> + *bad = 1;
> + else
> +#else
> + __free_page(page);
> +#endif
> totalhigh_pages++;

should obviously get "#else" replaced with "#endif" and original "#endif" should be removed
because otherwise all of the highmem pages are either bad or used right from the initialisation.
(Yes, I have highmem (2G RAM) system with 2 bits bad and I am too lazy to to go to the store to
replace the RAM modules, so I given a patch a try and discovered this problem (which is there
for a long time it seems). I suspect that I am the only one who runs this patch on highmem system,
though ;) )

Bye,
Oleg
============================================================
Thanks Oleg!

Strangely enough I had this right but then "fixed" it. I obviously had to manually apply the patch to arch/i386/mm/init.c since there are a few logic changes etc. I only re-inserted the bug when checking the changes I had made compared to the original patch and assumed that I had been wrong (I assumed the original patch worked ;-)).

Attached is the new patch.

--=_courier-3984-1057150804-0001-2
Content-Type: application/octet-stream; name="BadRAM-2.5.73-mm2.1.diff"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="BadRAM-2.5.73-mm2.1.diff"

ZGlmZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvQ1JFRElUUyBsaW51eC0yLjUvQ1JFRElUUwot
LS0gbGludXgtMi41LjczLW1tMi9DUkVESVRTCTIwMDMtMDYtMTcgMDU6MjA6MDcuMDAwMDAw
MDAwICswMTAwCisrKyBsaW51eC0yLjUvQ1JFRElUUwkyMDAzLTA3LTAyIDAxOjU4OjUyLjAw
MDAwMDAwMCArMDEwMApAQCAtMjM2NSw2ICsyMzY1LDEyIEBACiBTOiA1NTEyNyBNYWluegog
UzogR2VybWFueQogCitOOiBTdGV2ZW4gTmV3YnVyeQorRTogc19qX25ld2J1cnlAeWFob28u
Y28udWsKK0Q6IEZvcndhcmQgcG9ydGVkIEJhZFJBTSBwYXRjaCB0byAyLjUuNzMgZnJvbSAy
LjQuMjAKK1M6IERlcmJ5CitTOiBVbml0ZWQgS2luZ2RvbQorCiBOOiBEYXZpZCBDLiBOaWVt
aQogRTogbmllbWlAdHV4Lm9yZwogVzogaHR0cDovL3d3dy50dXgub3JnL35uaWVtaS8KQEAg
LTI2MDEsNiArMjYwNywxNCBAQAogUzogTWFsdmVybiwgUGVubnN5bHZhbmlhIDE5MzU1CiBT
OiBVU0EKIAorTjogUmljayB2YW4gUmVpbgorRTogdmFucmVpbkBjcy51dHdlbnRlLm5sCitX
OiBodHRwOi8vd3d3LmNzLnV0d2VudGUubmwvfnZhbnJlaW4KK0Q6IE1lbW9yeSwgdGhlIEJh
ZFJBTSBzdWJzeXN0ZW0gZGVhbGluZyB3aXRoIHN0YXRpY2FsbHkgY2hhbGxhbmdlZCBSQU0g
bW9kdWxlcy4KK1M6IEJpbm5lbmVzIDY3CitTOiA5NDA3IENYIEFzc2VuCitTOiBUaGUgTmV0
aGVybGFuZHMKKwogTjogU3RlZmFuIFJlaW5hdWVyCiBFOiBzdGVwYW5AbGludXguZGUKIFc6
IGh0dHA6Ly93d3cuZnJlaWJ1cmcubGludXguZGUvfnN0ZXBhbi8KQEAgLTI4MTksNiArMjgz
MywxMyBAQAogRToKIEQ6IE1hY2ludG9zaCBJREUgRHJpdmVyCiAKK046IE5pY28gU2NobW9p
Z2wKK0U6IG5pY29Ad3JpdGVtYWlsLmNvbQorVzogaHR0cDovL3dlYnJ1bS51bmktbWFubmhl
aW0uZGUvbWF0aC9zY2htb2lnbC9saW51eC8KK0Q6IE1pZ3JhdGlvbiBvZiBCYWRSQU0gcGF0
Y2ggdG8gMi40LjQgc2VyaWVzICh3aXRoIFJpY2sgdmFuIFJlaW4pCitTOiBNYW5uaGVpbSwg
QlcsIEdlcm1hbnkKK1A6IDIwNDcvMzhGQzlFMDMgIDVEIERCIDA5IEU0IDNGIEYzIENEIDA5
IDc1IDU5IC0gMTEgMTcgOUMgMDMgNDYgRTMgMzggRkMgOUUgMDMKKwogTjogUGV0ZXIgRGUg
U2NocmlqdmVyCiBFOiBzdHVkMTFAY2M0Lmt1bGV1dmVuLmFjLmJlCiBEOiBNaXRzdW1pIENE
LVJPTSBkcml2ZXIgcGF0Y2hlcyBNYXJjaCB2ZXJzaW9uCmRpZmYgLXVyTiBsaW51eC0yLjUu
NzMtbW0yL0RvY3VtZW50YXRpb24vYmFkcmFtLnR4dCBsaW51eC0yLjUvRG9jdW1lbnRhdGlv
bi9iYWRyYW0udHh0Ci0tLSBsaW51eC0yLjUuNzMtbW0yL0RvY3VtZW50YXRpb24vYmFkcmFt
LnR4dAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi41
L0RvY3VtZW50YXRpb24vYmFkcmFtLnR4dAkyMDAzLTA3LTAxIDIwOjAyOjI3LjAwMDAwMDAw
MCArMDEwMApAQCAtMCwwICsxLDI2NiBAQAorSU5GT1JNQVRJT04gT04gVVNJTkcgQkFEIFJB
TSBNT0RVTEVTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50
cm9kdWN0aW9uCisJUkFNIGlzIGdldHRpbmcgc21hbGxlciBhbmQgc21hbGxlciwgYW5kIGFz
IGEgcmVzdWx0LCBhbHNvIG1vcmUgYW5kIG1vcmUKKwl2dWxuZXJhYmxlLiBUaGlzIG1ha2Vz
IHRoZSBtYW51ZmFjdHVyaW5nIG9mIGhhcmR3YXJlIG1vcmUgZXhwZW5zaXZlLAorCXNpbmNl
IGFuIGV4Y2Vzc2l2ZSBhbW91bnQgb2YgUkFNIGNoaXBzIG11c3QgYmUgZGlzY2FyZGVkIG9u
IGFjY291bnQgb2YKKwlhIHNpbmdsZSBjZWxsIHRoYXQgaXMgd3JvbmcuIFNpbWlsYXJseSwg
c3RhdGljIGRpc2NoYXJnZSBtYXkgZGFtYWdlIGEKKwlSQU0gbW9kdWxlIGZvcmV2ZXIsIHdo
aWNoIGlzIHVzdWFsbHkgcmVtZWRpZWQgYnkgcmVwbGFjaW5nIGl0CisJZW50aXJlbHkuCisK
KwlUaGlzIGlzIG5vdCBuZWNlc3NhcnksIGFzIHRoZSBCYWRSQU0gY29kZSBzaG93czogQnkg
aW5mb3JtaW5nIHRoZSBMaW51eAorCWtlcm5lbCB3aGljaCBhZGRyZXNzZXMgaW4gYSBSQU0g
YXJlIGRhbWFnZWQsIHRoZSBrZXJuZWwgc2ltcGx5IGF2b2lkcworCWV2ZXIgYWxsb2NhdGlu
ZyBzdWNoIGFkZHJlc3NlcyBidXQgbWFrZXMgYWxsIHRoZSByZXN0IGF2YWlsYWJsZS4KKwor
UmVhc29ucyBmb3IgdGhpcyBmZWF0dXJlCisJVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkg
dGhpcyBrZXJuZWwgZmVhdHVyZSBpcyB1c2VmdWw6CisJLSBDaGlwIG1hbnVmYWN0dXJlIGlz
IHJlc291cmNlIGludGVuc2l2ZTsgd2FzdGUgbGVzcyBhbmQgc2xlZXAgYmV0dGVyCisJLSBJ
dCdzIGFub3RoZXIgY2hhbmNlIHRvIHByb21vdGUgTGludXggYXMgInRoZSBmbGV4aWJsZSBP
UyIKKwktIFNvbWUgbGFwdG9wcyBoYXZlIHRoZWlyIFJBTSBzb2xkZXJlZCBpbi4uLiBhbmQg
dGhlbiBpdCBmYWlscyEKKwktIEl0J3MgcGxhaW4gY29vbCA7LSkKKworUnVubmluZyBleGFt
cGxlCisJVG8gcnVuIHRoaXMgcHJvamVjdCwgSSB3YXMgZ2l2ZW4gdHdvIERJTU1zLCAzMiBN
QiBlYWNoLiBPbmUsIHRoYXQgd2UKKwlzaGFsbCB1c2UgYXMgYSBydW5uaW5nIGV4YW1wbGUg
aW4gdGhpcyB0ZXh0LCBjb250YWluZWQgNTEyIGZhdWx0eSBiaXRzLAorCXNwcmVhZCBvdmVy
IDEvNCBvZiB0aGUgYWRkcmVzcyByYW5nZSBpbiBhIHJlZ3VsYXIgcGF0dGVybi4gU29tZSB0
cmlja3MKKwl3aXRoIGEgUkFNIHRlc3RlciBhbmQgYSBmZXcgYmluYXJ5IGNhbGN1bGF0aW9u
cyB3ZXJlIHN1ZmZpY2llbnQgdG8KKwl3cml0ZSB0aGVzZSBmYXVsdHMgZG93biBpbiAyIGxv
bmd3b3JkIG51bWJlcnMuCisKKwlUaGUga2VybmVsIHJlY29nbmlzZWQgdGhlIGNvcnJlY3Qg
bnVtYmVyIG9mIHBhZ2VzIHdpdGggZmF1bHRzIGFuZCBkaWQKKwlub3QgZ2l2ZSB0aGVtIG91
dCBmb3IgYWxsb2NhdGlvbi4gVGhlIGFsbG9jYXRpb24gcm91dGluZXMgY291bGQKKwl0aGVy
ZWZvcmUgcHJvZ3Jlc3MgYXMgbm9ybWFsbHksIHdpdGhvdXQgYW55IGFkYXB0aW9uLgorCVNv
LCBJIGdhaW5lZCAzMCBNQiBvZiBESU1NIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBoYXZlIGJl
ZW4gdGhyb3duCisJYXdheS4gQWZ0ZXIgYm9vdGluZyB0aGUga2VybmVsLCB0aGUga2VybmVs
IGJlaGF2ZWQgZXhhY3RseSBhcyBpdAorCWFsd2F5cyBoYWQuCisKK0luaXRpYWwgY2hlY2tz
CisJSWYgeW91IGV4cGVyaWVuY2UgUkFNIHRyb3VibGUsIGZpcnN0IHJlYWQgL3Vzci9zcmMv
bGludXgvbWVtb3J5LnR4dAorCWFuZCB0cnkgb3V0IHRoZSBtZW09NE0gdHJpY2sgdG8gc2Vl
IGlmIGF0IGxlYXN0IHNvbWUgaW5pdGlhbCBwYXJ0cworCW9mIHlvdXIgUkFNIHdvcmsgd2Vs
bC4gVGhlIEJhZFJBTSByb3V0aW5lcyBoYWx0IHRoZSBrZXJuZWwgaW4gcGFuaWMKKwlpZiB0
aGUgcmVzZXJ2ZWQgYXJlYSBvZiBtZW1vcnkgKGNvbnRhaW5pbmcga2VybmVsIHN0dWZmKSBj
b250YWlucworCWEgZmF1bHR5IGFkZHJlc3MuCisKK1J1bm5pbmcgYSBSQU0gY2hlY2tlcgor
CVRoZSBtZW1vcnkgY2hlY2tlciBpcyBub3QgYnVpbHQgaW50byB0aGUga2VybmVsLCB0byBh
dm9pZCBkZWxheXMgYXQKKwlydW50aW1lLiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyB0
aGF0IG1heSBiZSBjYXVzZWQgYnkgUkFNLCBydW4KKwlhIGdvb2QgUkFNIGNoZWNrZXIsIHN1
Y2ggYXMKKwkJaHR0cDovL3JlYWxpdHkuc2dpLmNvbS9jYnJhZHlfZGVudmVyL21lbXRlc3Q4
NgorCVRoZSBvdXRwdXQgb2YgYSBSQU0gY2hlY2tlciBwcm92aWRlcyBhZGRyZXNzZXMgdGhh
dCB3ZW50IHdyb25nLiBJbgorCXRoZSAzMiBNQiBjaGlwIHdpdGggNTEyIGZhdWx0eSBiaXRz
IG1lbnRpb25lZCBhYm92ZSwgdGhlIGVycm9ycyB3ZXJlCisJZm91bmQgaW4gdGhlIDhNQi0x
Nk1CIHJhbmdlICh0aGUgRElNTSB3YXMgaW4gc2xvdCAjMCkgYXQgYWRkcmVzc2VzCisJCXh4
eDQyZjQKKwkJeHh4NjJmNAorCQl4eHhjMmY0CisJCXh4eGUyZjQKKwlhbmQgdGhlIGVycm9y
IHdhcyBhICJzdGlja3kgMSBiaXQiLCBhIG1lbW9yeSBiaXQgdGhhdCBzdGF5ZWQgIjEiIG5v
CisJbWF0dGVyIHdoYXQgd2FzIHdyaXR0ZW4gdG8gaXQuIFRoZSByZWd1bGFyaXR5IG9mIHRo
aXMgcGF0dGVybgorCXN1Z2dlc3RzIHRoZSBkZWF0aCBvZiBhIGJ1ZmZlciBhdCB0aGUgb3V0
cHV0IHN0YWdlcyBvZiBhIHJvdyBvbiBvbmUgb2YKKwl0aGUgY2hpcHMuIEkgZXhwZWN0IHN1
Y2ggcmVndWxhcml0eSB0byBiZSBjb21tb25wbGFjZS4gRmluZGluZyB0aGlzCisJcmVndWxh
cml0eSBjdXJyZW50bHkgaXMgaHVtYW4gZWZmb3J0LCBidXQgaXQgc2hvdWxkIG5vdCBiZSBo
YXJkIHRvCisJYWx0ZXIgYSBSQU0gY2hlY2tlciB0byBjYXB0dXJlIGl0IGluIHNvbWUgc29y
dCBvZiBwYXR0ZXJuLCBwb3NzaWJseQorCXRoZSBCYWRSQU0gcGF0dGVybnMgZGVzY3JpYmVk
IGJlbG93LgorCisJQnkgdGhlIHdheSwgaWYgeW91IG1hbmFnZSB0byBnZXQgaG9sZCBvZiBt
ZW10ZXN0ODYgdmVyc2lvbiAyLjMgb3IKKwliZXlvbmQsIHlvdSBjYW4gY29uZmlndXJlIHRo
ZSBwcmludGluZyBtb2RlIHRvIHByb2R1Y2UgQmFkUkFNIHBhdHRlcm5zLAorCXdoaWNoIGZp
bmQgb3V0IGV4YWN0bHkgd2hhdCB5b3UgbXVzdCBlbnRlciBvbiB0aGUgTElMTzogY29tbWFu
ZGxpbmUsCisJZXhjZXB0IHRoYXQgeW91IHNob3VsZG4ndCBtZW50aW9uIHRoZSBhZGRlZCBz
cGFjaW5nLiBUaGF0IG1lYW5zIHRoYXQKKwl5b3UgY2FuIHNraXAgdGhlIGZvbGxvd2luZyBz
dGVwLCB3aGljaCBzYXZlcyB5b3UgYSAqbG90KiBvZiB3b3JrLgorCisJQWxzbyBieSB0aGUg
d2F5LCBpZiB5b3VyIG1hY2hpbmUgaGFzIHRoZSBJU0EgbWVtb3J5IGdhcCBpbiB0aGUgMTVN
LTE2TQorCXJhbmdlIHVuc3RvcHBhYmxlLCBMaW51eCBjYW4gZ2V0IGluIHRyb3VibGUuIE9u
ZSB3YXkgb2YgaGFuZGxpbmcgdGhhdAorCXNpdHVhdGlvbiBpcyBieSBzcGVjaWZ5aW5nIHRo
ZSB0b3RhbCBtZW1vcnkgc2l6ZSB0byBMaW51eCB3aXRoIGEgYm9vdAorCXBhcmFtZXRlciBt
ZW09Li4uIGFuZCB0aGVuIHRvIHRlbGwgaXQgdG8gdHJlYXQgdGhlIDE1TS0xNk0gcmFuZ2Ug
YXMKKwlmYXVsdHkgd2l0aCBhbiBhZGRpdGlvbmFsIGJvb3QgcGFyYW1ldGVyLCBmb3IgaW5z
dGFuY2U6CisJCW1lbT0yNE0gYmFkcmFtPTB4MDBmMDAwMDAsMHhmZmYwMDAwMAorCWlmIHlv
dSBpbnN0YWxsZWQgMjRNQiBvZiBSQU0gaW4gdG90YWwuCisKK0NhcHR1cmluZyBlcnJvcnMg
aW4gYSBwYXR0ZXJuCisJSW5zdGVhZCBvZiBtYW51YWxseSBwcm92aWRpbmcgYWxsIDUxMiBl
cnJvcnMgdG8gdGhlIGtlcm5lbCwgaXQncyBuaWNlcgorCXRvIGdlbmVyYXRlIGEgcGF0dGVy
bi4gU2luY2UgdGhlIHJlZ3VsYXJpdHkgaXMgYmFzZWQgb24gYWRkcmVzcyBkZWNvZGluZwor
CXNvZnR3YXJlLCB3aGljaCBnZW5lcmFsbHkgdGFrZXMgY2VydGFpbiBiaXRzIGludG8gYWNj
b3VudCBhbmQgaWdub3JlcworCW90aGVycywgd2Ugc2hhbGwgcHJvdmlkZSBhIGZhdWx0eSBh
ZGRyZXNzIEYsIHRvZ2V0aGVyIHdpdGggYSBiaXQgbWFzayBNCisJdGhhdCBzcGVjaWZpZXMg
d2hpY2ggYml0cyBtdXN0IGJlIGVxdWFsIHRvIEYuIEluIEMgY29kZSwgYW4gYWRkcmVzcyBB
CisJaXMgZmF1bHR5IGlmIGFuZCBvbmx5IGlmCisJCShGICYgTSkgPT0gKEEgJiBNKQorCW9y
IGFsdGVybmF0ZWx5IChjbG9zZXIgdG8gYSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbik6CisJ
CX4oKEYgXiBBKSAmIE0pCisJSW4gdGhlIGV4YW1wbGUgMzIgTUIgY2hpcCwgd2UgaGFkIHRo
ZSBmYXVsdHkgYWRkcmVzc2VzIGluIDhNQi0xNk1COgorCQl4eHg0MmY0ICAgICAgICAgLi4u
LjAxMDAuLi4uCisJCXh4eDYyZjQgICAgICAgICAuLi4uMDExMC4uLi4KKwkJeHh4YzJmNCAg
ICAgICAgIC4uLi4xMTAwLi4uLgorCQl4eHhlMmY0ICAgICAgICAgLi4uLjExMTAuLi4uCisJ
VGhlIHNlY29uZCBjb2x1bW4gcmVwcmVzZW50cyB0aGUgYWx0ZXJuYXRpbmcgaGV4IGRpZ2l0
IGluIGJpbmFyeSBmb3JtLgorCUFwcGVyYW50bHksIHRoZSBmaXJzdCBhbmQgb25lLWJ1dCBs
YXN0IGJpbmFyeSBkaWdpdCBjYW4gYmUgYW55dGhpbmcsCisJc28gdGhlIGJpbmFyeSBtYXNr
IGZvciB0aGF0IHBhcnQgaXMgMDEwMS4gVGhlIG1hc2sgZm9yIHRoZSBwYXJ0IGFmdGVyCisJ
dGhpcyBpcyAweGZmZiwgYW5kIHRoZSBwYXJ0IGJlZm9yZSBzaG91bGQgc2VsZWN0IGFueXRo
aW5nIGluIHRoZSByYW5nZQorCThNQi0xNk1CLCBvciAweDAwODAwMDAwLTB4MDEwMDAwMDA7
IHRoaXMgaXMgZG9uZSB3aXRoIGEgYml0bWFzaworCTB4ZmY4MHh4eHguIENvbWJpbmluZyB0
aGVzZSBwYXJ0aWFsIG1hc2tzLCB3ZSBnZXQ6CisJCUY9MHgwMDgwNDJmNCAgICBNPTB4ZmY4
MDVmZmYKKwlUaGF0IGNvdmVycyBldmVyeXRoaW5nIGZvciB0aGlzIERJTU07IGZvciBtb3Jl
IGNvbXBsaWNhdGVkIGZhaWxpbmcKKwlESU1Ncywgb3IgZm9yIGEgY29tYmluYXRpb24gb2Yg
bXVsdGlwbGUgZmFpbGluZyBESU1NcywgaXQgY2FuIGJlCisJbmVjZXNzYXJ5IHRvIHNldCB1
cCBhIG51bWJlciBvZiBzdWNoIEYvTSBwYWlycy4KKworUmVib290aW5nIExpbnV4CisJTm93
IHRoYXQgdGhlc2UgcGF0dGVybnMgYXJlIGtub3duIChhbmQgZG91YmxlLWNoZWNrZWQsIHRo
ZSBjYWxjdWxhdGlvbnMKKwlhcmUgaGlnaGx5IGVycm9yLXByb25lLi4uIGl0IHdvdWxkIGJl
IG5lYXQgdG8gdGVzdCB0aGVtIGluIHRoZSBSQU0KKwljaGVja2VyLi4uKSB3ZSBzaW1wbHkg
cmVzdGFydCBMaW51eCB3aXRoIHRoZXNlIEYvTSBwYWlycyBhcyBhIHBhcmFtZXRlci4KKwlJ
ZiB5b3Ugbm9ybWFsbHkgYm9vdCBhcyBmb2xsb3dzOgorCSAgICAgICBMSUxPOiBsaW51eAor
CXlvdSBzaG91bGQgbm93IGJvb3Qgd2l0aAorCSAgICAgICBMSUxPOiBsaW51eCBiYWRyYW09
MHgwMDgwNDJmNCwweGZmODA1ZmZmCisJb3IgcGVyaGFwcyBieSBtZW50aW9uaW5nIG1vcmUg
Ri9NIHBhaXJzIGluIGFuIG9yZGVyIEYwLE0wLEYxLE0xLC4uLgorCVdoZW4geW91IHByb3Zp
ZGUgYW4gb2RkIG51bWJlciBvZiBhcmd1bWVudHMgdG8gYmFkcmFtLCB0aGUgZGVmYXVsdCBt
YXNrCisJMHhmZmZmZmZmZiAob25seSBvbmUgYWRkcmVzcyBtYXRjaGVkKSBpcyBhcHBsaWVk
IHRvIHRoZSBwYXR0ZXJuLgorCisJQmV3YXJlIG9mIHRoZSBjb21tYW5kbGluZSBsZW5ndGgu
IEF0IGxlYXN0IHVwIHRvIExJTE8gdmVyc2lvbiAwLjIxLAorCXRoZSBjb21tYW5kbGluZSBp
cyBjdXQgb2ZmIGFmdGVyIHRoZSA3OHRoIGNoYXJhY3RlcjsgbGF0ZXIgdmVyc2lvbnMKKwlt
YXkgZ28gYXMgZmFyIGFzIHRoZSBrZXJuZWwgZ29lcywgbmFtZWx5IDI1NSBjaGFyYWN0ZXJz
LiBJbiBubyB3YXkgaXMKKwlpdCBwb3NzaWJsZSB0byBlbnRlciBtb3JlIHRoYW4gMTAgbnVt
YmVycyB0byB0aGUgYmFkcmFtIGJvb3Qgb3B0aW9uLgorCisJV2hlbiB0aGUga2VybmVsIG5v
dyBib290cywgaXQgc2hvdWxkIG5vdCBnaXZlIGFueSB0cm91YmxlIHdpdGggUkFNLgorCU1p
bmQgeW91LCB0aGlzIGlzIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGtlcm5lbCBh
bmQgaXRzIGRhdGEKKwlzdG9yYWdlIGRvIG5vdCBvdmVybGFwIGFuIGVycm9uZW91cyBwYXJ0
LiBJZiB0aGlzIGhhcHBlbnMsIGFuZCB0aGUKKwlrZXJuZWwgZG9lcyBub3QgY2hva2Ugb24g
aXQgcmlnaHQgYXdheSwgaXQgd2lsbCBzdG9wIHdpdGggYSBwYW5pYy4KKwlZb3Ugd2lsbCBu
ZWVkIHRvIHByb3ZpZGUgYSBSQU0gd2hlcmUgdGhlIGluaXRpYWwsIHNheSAyTUIsIGlzIGZh
dWx0bGVzcy4KKworCU5vdyBsb29rIHVwIHlvdXIgbWVtb3J5IHN0YXR1cyB3aXRoCisJICAg
ICAgIGRtZXNnIHwgZ3JlcCBeTWVtb3J5OgorCXdoaWNoIHByaW50cyBhIHNpbmdsZSBsaW5l
IHdpdGggaW5mb3JtYXRpb24gbGlrZQorCQlNZW1vcnk6IDE1ODUyNGsvMTYzODQwayBhdmFp
bGFibGUKKwkJCSg5NDBrIGtlcm5lbCBjb2RlLAorCQkJNDEyayByZXNlcnZlZCwKKwkJCTE4
NTZrIGRhdGEsCisJCQk2MGsgaW5pdCwKKwkJCTBrIGhpZ2htZW0sCisJCQkyMDQ4ayBCYWRS
QU0pCisJVGhlIGxhdHRlciBlbnRyeSwgdGhlIGJhZHJhbSwgaXMgMjA0OGsgdG8gcmVwcmVz
ZW50IHRoZSBsb3NzIG9mIDJNQgorCW9mIGdlbmVyYWwgcHVycG9zZSBSQU0gZHVlIHRvIHRo
ZSBlcnJvcnMuIE9yLCBwb3NpdGl2ZWx5IHJlcGhyYXNlZCwKKwlpbnN0ZWFkIG9mIHRocm93
aW5nIG91dCAzMk1CIGFzIHVzZWxlc3MsIHlvdSBvbmx5IHRocm93IG91dCAyTUIuCisKKwlJ
ZiB0aGUgc3lzdGVtIGlzIHN0YWJsZSAodHJ5IGNvbXBpbGluZyBhIGZldyBrZXJuZWxzLCBh
bmQgZG8gYSBmZXcKKwlmaW5kcyBpbiAvIG9yIHNvKSB5b3UgbWF5IGFkZCB0aGUgYm9vdCBw
YXJhbWV0ZXIgdG8gL2V0Yy9saWxvLmNvbmYKKwlhcyBhIGxpbmUgdG8gX2FsbF8gdGhlIGtl
cm5lbHMgdGhhdCBoYW5kbGUgdGhpcyB0cm91YmxlIHdpdGggYSBsaW5lCisJCWFwcGVuZD0i
YmFkcmFtPTB4MDA4MDQyZjQsMHhmZjgwNWZmZiIKKwlhZnRlciB3aGljaCB5b3UgcnVuICJs
aWxvIi4KKwlXYXJuaW5nOiBEb24ndCBleHBlcmltZW50IHdpdGggdGhlc2Ugc2V0dGluZ3Mg
b24geW91ciBvbmx5IGJvb3QgaW1hZ2UuCisJSWYgdGhlIEJhZFJBTSBvdmVybGF5cyBrZXJu
ZWwgY29kZSwgZGF0YSwgaW5pdCwgb3Igb3RoZXIgcmVzZXJ2ZWQKKwltZW1vcnksIHRoZSBr
ZXJuZWwgd2lsbCBoYWx0IGluIHBhbmljLiBUcnkgc2V0dGluZ3Mgb24gYSB0ZXN0IGJvb3QK
KwlpbWFnZSBmaXJzdCwgYW5kIGlmIHlvdSBnZXQgYSBwYW5pYyB5b3Ugc2hvdWxkIGNoYW5n
ZSB0aGUgb3JkZXIgb2YKKwl5b3VyIERJTU1zIFt3aGljaCBtYXkgaW52b2x2ZSBidXlpbmcg
YSBuZXcgb25lIGp1c3QgdG8gYmUgYWJsZSB0bworCWNoYW5nZSB0aGUgb3JkZXJdLgorCisJ
WW91IGFyZSBhbGxvd2VkIHRvIGVudGVyIGFueSBudW1iZXIgb2YgQmFkUkFNIHBhdHRlcm5z
IGluIGFsbCB0aGUKKwlwbGFjZXMgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUuIFRoZXkgd2ls
bCBhbGwgYXBwbHkuIEl0IGlzIGV2ZW4KKwlwb3NzaWJsZSB0byBtZW50aW9uIHNldmVyYWwg
QmFkUkFNIHBhdHRlcm5zIGluIGEgc2luZ2xlIHBsYWNlLiBUaGUKKwljb21wbGV0aW9uIG9m
IGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzIHdpdGggdGhlIGRlZmF1bHQgbWFzayBpcwor
CWRvbmUgc2VwYXJhdGVseSBmb3IgZWFjaCBiYWRyYW09Li4uIG9wdGlvbi4KKworS2VybmVs
IEN1c3RvbWlzYXRpb24KKwlTb21lIHBlb3BsZSBwcmVmZXIgdG8gZW50ZXIgdGhlaXIgYmFk
cmFtIHBhdHRlcm5zIGluIHRoZSBrZXJuZWwsIGFuZAorCXRoaXMgaXMgYWxzbyBwb3NzaWJs
ZS4gSW4gbW0vcGFnZV9hbGxvYy5jIHRoZXJlIGlzIGFuIGFycmF5IG9mIHVuc2lnbmVkCisJ
bG9uZyBpbnRlZ2VycyBpbnRvIHdoaWNoIHRoZSBwYXJhbWV0ZXJzIGNhbiBiZSBlbnRlcmVk
LCBwcmVmaXhlZCB3aXRoCisJdGhlIG51bWJlciBvZiBpbnRlZ2VycyAodHdpY2UgdGhlIG51
bWJlciBvZiBwYXR0ZXJucykuIFRoZSBhcnJheSBpcworCW5hbWVkIGJhZHJhbV9jdXN0b20g
YW5kIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIEJhZFJBTSBsaXN0IHdoZW5ldmVyIGFuCisJ
b3B0aW9uICdiYWRyYW0nIGlzIHByb3ZpZGVkIG9uIHRoZSBjb21tYW5kbGluZSB3aGVuIGJv
b3RpbmcsIGVhbGFuY2luZywgS2Fub2ogU2FyY2FyLCBTR0ksIEphbiAyMDAwCiAgKiAgUGVy
IGNwdSBob3QvY29sZCBwYWdlIGxpc3RzLCBidWxrIGFsbG9jYXRpb24sIE1hcnRpbiBKLiBC
bGlnaCwgU2VwdCAyMDAyCiAgKiAgICAgICAgICAobG90cyBvZiBiaXRzIGJvcnJvd2VkIGZy
b20gSW5nbyBNb2xuYXIgJiBBbmRyZXcgTW9ydG9uKQorICogIEJhZFJBTSBoYW5kbGluZywg
UmljayB2YW4gUmVpbiwgRmViIDIwMDEKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmln
Lmg+CkBAIC0xNjE1LDMgKzE2MTYsOTYgQEAKIAlzZXR1cF9wZXJfem9uZV9wYWdlc19taW4o
KTsKIAlyZXR1cm4gMDsKIH0KKworCisjaWZkZWYgQ09ORklHX0JBRFJBTQorCisvKiBHaXZl
biBhIHBvaW50ZWQtYXQgYWRkcmVzcyBhbmQgYSBtYXNrLCBpbmNyZW1lbnQgdGhlIHBhZ2Ug
c28gdGhhdCB0aGUKKyAqIG1hc2sgaGlkZXMgdGhlIGluY3JlbWVudC4gUmV0dXJuIDAgaWYg
bm8gaW5jcmVtZW50IGlzIHBvc3NpYmxlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBuZXh0
X21hc2tlZF9hZGRyZXNzICh1bnNpZ25lZCBsb25nICphZGRycCwgdW5zaWduZWQgbG9uZyBt
YXNrKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGluYz0xOworICAgICAgICB1bnNpZ25l
ZCBsb25nIG5ld3ZhbCA9ICphZGRycDsKKwl3aGlsZSAoaW5jICYgbWFzaykKKwkJaW5jICs9
IGluYzsKKyAgICAgICAgd2hpbGUgKGluYyAhPSAwKSB7CisJCW5ld3ZhbCArPSBpbmM7CisJ
CW5ld3ZhbCAmPSB+bWFzazsKKwkJbmV3dmFsIHw9ICgoKmFkZHJwKSAmIG1hc2spOworCQlp
ZiAobmV3dmFsID4gKmFkZHJwKSB7CisJCQkqYWRkcnAgPSBuZXd2YWw7CisJCQlyZXR1cm4g
MTsKKwkJfQorCQlkbyB7CisJCQlpbmMgKz0gaW5jOworCQl9IHdoaWxlIChpbmMgJiB+bWFz
ayk7CisJCXdoaWxlIChpbmMgJiBtYXNrKQorCQkJaW5jICs9IGluYzsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gMDsKK30KKworCit2b2lkIF9faW5pdCBiYWRyYW1fbWFya3BhZ2Vz
IChpbnQgYXJnYywgdW5zaWduZWQgbG9uZyAqYXJndikgeworCXVuc2lnbmVkIGxvbmcgYWRk
ciwgbWFzazsKKyAgICAgICAgd2hpbGUgKGFyZ2MtLSA+IDApIHsKKyAgICAgICAgICAgICAg
ICBhZGRyID0gKmFyZ3YrKzsKKyAgICAgICAgICAgICAgICBtYXNrIHBybzsKIApAQCAtNDY3
LDEzICs0NzksMTcgQEAKIAl0b3RhbHJhbV9wYWdlcyArPSBfX2ZyZWVfYWxsX2Jvb3RtZW0o
KTsKIAogCXJlc2VydmVkcGFnZXMgPSAwOworCWJhZHBhZ2VzID0gMDsKIAlmb3IgKHRtcCA9
IDA7IHRtcCA8IG1heF9sb3dfcGZuOyB0bXArKykKIAkJLyoKLQkJICogT25seSBjb3VudCBy
ZXNlcnZlZCBSQU0gcGFnZXMKKwkJICogT25seSBjb3VudCByZXNlcnZlZCBhbmQgYmFkIFJB
TSBwYWdlcwogCQkgKi8KIAkJCisJTm90ZSB0aGF0IHRoaXMgc2NoZW1lIGhhcyBkZWxpYnBm
bikJCSgocGZuKSA8IG1heF9tYXBucikKICNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01F
TSAqLwogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2Fk
ZHIpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBoeXNfdG9fcGFnZSh4KQkJKG1lbV9tYXAg
KyAoKHVuc2lnbmVkIGxvbmcpKHgpID4+IFBBR0VfU0hJRlQpKQogCiAjZGVmaW5lIHZpcnRf
YWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQp
CiAKZGlmZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvbW0vYm9vdG1lbS5jIGxpbnV4LTIuNS9t
bS9ib290bWVtLmMKLS0tIGxpbnV4LTIuNS43My1tbTIvbW0vYm9vdG1lbS5jCTIwMDMtMDYt
MTcgMDU6MTk6NDcuMDAwMDAwMDAwICswMTAwCisrKyBsaW51eC0yLjUvbW0vYm9vdG1lbS5j
CTIwMDMtMDctMDEgMjA6NDI6MjUuMDAwMDAwMDAwICswMTAwCkBAIC0yNzQsOCArMjc0LDE3
IEBACiAJCQkJaWYgKHYgJiBtKSB7CiAJCQkJCWNvdW50Kys7CiAJCQkJCUNsZWFyUGFnZVJl
c2VydmVkKHBhZ2UpOworCisjaWZkZWYgQ09ORklHX0JBRFJBTQorCQkJCQlpZiAoIVBhZ2VC
YWQocGFnZSkpIHsKKwkJCQkJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCQkJCQkJX19m
cmVlX3BhZ2UocGFnZSk7CisJCQkJCX0KKyNlbHNlCisKIAkJCQkJc2V0X3BhZ2VfY291bnQo
cGFnZSwgMSk7CiAJCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOworI2VuZGlmCiAJCQkJfQogCQkJ
fQogCQl9IGVsc2UgewpAQCAtMjk0LDggKzMwMywxNiBAQAogCWZvciAoaSA9IDA7IGkgPCAo
KGJkYXRhLT5ub2RlX2xvd19wZm4tKGJkYXRhLT5ub2RlX2Jvb3Rfc3RhcnQgPj4gUEFHRV9T
SElGVCkpLzggKyBQQUdFX1NJWkUtMSkvUEFHRV9TSVpFOyBpKysscGFnZSsrKSB7CiAJCWNv
dW50Kys7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfcGFnZV9jb3VudChw
YWdlLCAxKTsKKworI2lmZGVmIENPTkZJR19CQURSQU0KKwkJaWYgKCFQYWdlQmFkKHBhZ2Up
KSB7CisJCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCV9fZnJlZV9wYWdlKHBhZ2Up
OworCQl9CisjZWxzZQorIAkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiAJCV9fZnJlZV9w
YWdlKHBhZ2UpOworI2VuZGlmCiAJfQogCXRvdGFsICs9IGNvdW50OwogCWJkYXRhLT5ub2Rl
X2Jvb3RtZW1fbWFwID0gTlVMTDsKZGlmZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvbW0vcGFn
ZV9hbGxvYy5jIGxpbnV4LTIuNS9tbS9wYWdlX2FsbG9jLmMKLS0tIGxpbnV4LTIuNS43My1t
bTIvbW0vcGFnZV9hbGxvYy5jCTIwMDMtMDctMDEgMTk6NTk6NTcuMDAwMDAwMDAwICswMTAw
CisrKyBsaW51eC0yLjUvbW0vcGFnZV9hbGxvYy5jCTIwMDMtMDctMDIgMDE6MTI6MDkuMDAw
MDAwMDAwICsgYSBwcmVmZXJlbmNlIGZvciBCYWRSQU0gcGFnZXMsIGFucGZuKQkJKChwZm4p
IDwgbWF4X21hcG5yKQogI2VuZGlmIC8qICFDT05GSUdfRElTQ09OVElHTUVNICovCiAjZGVm
aW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFH
RV9TSElGVCkKKyNkZWZpbmUgcGh5c190b19wYWdlKHgpCQkobWVtX21hcCArICgodW5zaWdu
ZWQgbG9uZykoeCkgPj4gUEFHRV9TSElGVCkpCiAKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlk
KGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKIApkaWZmIC11
ck4gbGludXgtMi41LjczLW1tMi9tbS9ib290bWVtLmMgbGludXgtMi41L21tL2Jvb3RtZW0u
YwotLS0gbGludXgtMi41LjczLW1tMi9tbS9ib290bWVtLmMJMjAwMy0wNi0xNyAwNToxOTo0
Ny4wMDAwMDAwMDAgKzAxMDAKKysrIGxpbnV4LTIuNS9tbS9ib290bWVtLmMJMjAwMy0wNy0w
MSAyMDo0MjoyNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTI3NCw4ICsyNzQsMTcgQEAKIAkJCQlp
ZiAodiAmIG0pIHsKIAkJCQkJY291bnQrKzsKIAkJCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFn
ZSk7CisKKyNpZmRlZiBDT05GSUdfQkFEUkFNCisJCQkJCWlmICghUGFnZUJhZChwYWdlKSkg
eworCQkJCQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCQkJCQlfX2ZyZWVfcGFnZShw
YWdlKTsKKwkJCQkJfQorI2Vsc2UKKwogCQkJCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsK
IAkJCQkJX19mcmVlX3BhZ2UocGFnZSk7CisjZW5kaWYKIAkJCQl9CiAJCQl9CiAJCX0gZWxz
ZSB7CkBAIC0yOTQsOCArMzAzLDE2IEBACiAJZm9yIChpID0gMDsgaSA8ICgoYmRhdGEtPm5v
ZGVfbG93X3Bmbi0oYmRhdGEtPm5vZGVfYm9vdF9zdGFydCA+PiBQQUdFX1NISUZUKSkvOCAr
IFBBR0VfU0laRS0xKS9QQUdFX1NJWkU7IGkrKyxwYWdlKyspIHsKIAkJY291bnQrKzsKIAkJ
Q2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwor
CisjaWZkZWYgQ09ORklHX0JBRFJBTQorCQlpZiAoIVBhZ2VCYWQocGFnZSkpIHsKKwkJCXNl
dF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCQkJX19mcmVlX3BhZ2UocGFnZSk7CisJCX0KKyNl
bHNlCisgCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7
CisjZW5kaWYKIAl9CiAJdG90YWwgKz0gY291bnQ7CiAJYmRhdGEtPm5vZGVfYm9vdG1lbV9t
YXAgPSBOVUxMOwpkaWZmIC11ck4gbGludXgtMi41LjczLW1tMi9tbS9wYWdlX2FsbG9jLmMg
bGludXgtMi41L21tL3BhZ2VfYWxsb2MuYwotLS0gbGludXgtMi41LjczLW1tMi9tbS9wYWdl
X2FsbG9jLmMJMjAwMy0wNy0wMSAxOTo1OTo1Ny4wMDAwMDAwMDAgKzAxMDAKKysrIGxpbnV4
LTIuNS9tbS9wYWdlX2FsbG9jLmMJMjAwMy0wNy0wMiAwMToxMjowOS4wMDAwMDAwMDAgK2pl
Y3QgaXMgYW4gaWRlYSBhbmQgaW1wbGVtZW50YXRpb25wZm4pCQkoKHBmbikgPCBtYXhfbWFw
bnIpCiAjZW5kaWYgLyogIUNPTkZJR19ESVNDT05USUdNRU0gKi8KICNkZWZpbmUgdmlydF90
b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQor
I2RlZmluZSBwaHlzX3RvX3BhZ2UoeCkJCShtZW1fbWFwICsgKCh1bnNpZ25lZCBsb25nKSh4
KSA+PiBQQUdFX1NISUZUKSkKIAogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBm
bl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogCmRpZmYgLXVyTiBsaW51eC0y
LjUuNzMtbW0yL21tL2Jvb3RtZW0uYyBsaW51eC0yLjUvbW0vYm9vdG1lbS5jCi0tLSBsaW51
eC0yLjUuNzMtbW0yL21tL2Jvb3RtZW0uYwkyMDAzLTA2LTE3IDA1OjE5OjQ3LjAwMDAwMDAw
MCArMDEwMAorKysgbGludXgtMi41L21tL2Jvb3RtZW0uYwkyMDAzLTA3LTAxIDIwOjQyOjI1
LjAwMDAwMDAwMCArMDEwMApAQCAtMjc0LDggKzI3NCwxNyBAQAogCQkJCWlmICh2ICYgbSkg
ewogCQkJCQljb3VudCsrOwogCQkJCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKKworI2lm
ZGVmIENPTkZJR19CQURSQU0KKwkJCQkJaWYgKCFQYWdlQmFkKHBhZ2UpKSB7CisJCQkJCQlz
ZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQkJ
CQl9CisjZWxzZQorCiAJCQkJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQkJCQlfX2Zy
ZWVfcGFnZShwYWdlKTsKKyNlbmRpZgogCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTI5
NCw4ICszMDMsMTYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKChiZGF0YS0+bm9kZV9sb3dfcGZu
LShiZGF0YS0+bm9kZV9ib290X3N0YXJ0ID4+IFBBR0VfU0hJRlQpKS84ICsgUEFHRV9TSVpF
LTEpL1BBR0VfU0laRTsgaSsrLHBhZ2UrKykgewogCQljb3VudCsrOwogCQlDbGVhclBhZ2VS
ZXNlcnZlZChwYWdlKTsKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisKKyNpZmRlZiBD
T05GSUdfQkFEUkFNCisJCWlmICghUGFnZUJhZChwYWdlKSkgeworCQkJc2V0X3BhZ2VfY291
bnQocGFnZSwgMSk7CisJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJfQorI2Vsc2UKKyAJCXNl
dF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQlfX2ZyZWVfcGFnZShwYWdlKTsKKyNlbmRpZgog
CX0KIAl0b3RhbCArPSBjb3VudDsKIAliZGF0YS0+bm9kZV9ib290bWVtX21hcCA9IE5VTEw7
CmRpZmYgLXVyTiBsaW51eC0yLjUuNzMtbW0yL21tL3BhZ2VfYWxsb2MuYyBsaW51eC0yLjUv
bW0vcGFnZV9hbGxvYy5jCi0tLSBsaW51eC0yLjUuNzMtbW0yL21tL3BhZ2VfYWxsb2MuYwky
MDAzLTA3LTAxIDE5OjU5OjU3LjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi41L21tL3Bh
Z2VfYWxsb2MuYwkyMDAzLTA3LTAyIDAxOjEyOjA5LjAwMDAwMDAwMCArZXhjaGFuZ2luZyB5
b3VyIAogICAgICAgICAgICBtb3RoZWFsYW5jaW5nLCBLYW5vaiBTYXJjYXIsIFNHSSwgSmFu
IDIwMDAKICAqICBQZXIgY3B1IGhvdC9jb2xkIHBhZ2UgbGlzdHMsIGJ1bGsgYWxsb2NhdGlv
biwgTWFydGluIEouIEJsaWdoLCBTZXB0IDIwMDIKICAqICAgICAgICAgIChsb3RzIG9mIGJp
dHMgYm9ycm93ZWQgZnJvbSBJbmdvIE1vbG5hciAmIEFuZHJldyBNb3J0b24pCisgKiAgQmFk
UkFNIGhhbmRsaW5nLCBSaWNrIHZhbiBSZWluLCBGZWIgMjAwMQogICovCiAKICNpbmNsdWRl
IDxsaW51eC9jb25maWcuaD4KQEAgLTE2MTUsMyArMTYxNiw5NiBAQAogCXNldHVwX3Blcl96
b25lX3BhZ2VzX21pbigpOwogCXJldHVybiAwOwogfQorCisKKyNpZmRlZiBDT05GSUdfQkFE
UkFNCisKKy8qIEdpdmVuIGEgcG9pbnRlZC1hdCBhZGRyZXNzIGFuZCBhIG1hc2ssIGluY3Jl
bWVudCB0aGUgcGFnZSBzbyB0aGF0IHRoZQorICogbWFzayBoaWRlcyB0aGUgaW5jcmVtZW50
LiBSZXR1cm4gMCBpZiBubyBpbmNyZW1lbnQgaXMgcG9zc2libGUuCisgKi8KK3N0YXRpYyBp
bnQgX19pbml0IG5leHRfbWFza2VkX2FkZHJlc3MgKHVuc2lnbmVkIGxvbmcgKmFkZHJwLCB1
bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5jPTE7Cisg
ICAgICAgIHVuc2lnbmVkIGxvbmcgbmV3dmFsID0gKmFkZHJwOworCXdoaWxlIChpbmMgJiBt
YXNrKQorCQlpbmMgKz0gaW5jOworICAgICAgICB3aGlsZSAoaW5jICE9IDApIHsKKwkJbmV3
dmFsICs9IGluYzsKKwkJbmV3dmFsICY9IH5tYXNrOworCQluZXd2YWwgfD0gKCgqYWRkcnAp
ICYgbWFzayk7CisJCWlmIChuZXd2YWwgPiAqYWRkcnApIHsKKwkJCSphZGRycCA9IG5ld3Zh
bDsKKwkJCXJldHVybiAxOworCQl9CisJCWRvIHsKKwkJCWluYyArPSBpbmM7CisJCX0gd2hp
bGUgKGluYyAmIH5tYXNrKTsKKwkJd2hpbGUgKGluYyAmIG1hc2spCisJCQlpbmMgKz0gaW5j
OworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorCisKK3ZvaWQgX19pbml0IGJh
ZHJhbV9tYXJrcGFnZXMgKGludCBhcmdjLCB1bnNpZ25lZCBsb25nICphcmd2KSB7CisJdW5z
aWduZWQgbG9uZyBhZGRyLCBtYXNrOworICAgICAgICB3aGlsZSAoYXJnYy0tID4gMCkgewor
ICAgICAgICAgICAgICAgIGFkZHIgPSAqYXJndisrOworICAgICAgICAgICAgICAgIG1hc2sg
cHJvOwogCkBAIC00NjcsMTMgKzQ3OSwxNyBAQAogCXRvdGFscmFtX3BhZ2VzICs9IF9fZnJl
ZV9hbGxfYm9vdG1lbSgpOwogCiAJcmVzZXJ2ZWRwYWdlcyA9IDA7CisJYmFkcGFnZXMgPSAw
OwogCWZvciAodG1wID0gMDsgdG1wIDwgbWF4X2xvd19wZm47IHRtcCsrKQogCQkvKgotCQkg
KiBPbmx5IGNvdW50IHJlc2VydmVkIFJBTSBwYWdlcworCQkgKiBPbmx5IGNvdW50IHJlc2Vy
dmVkIGFuZCBiYWQgUkFNIHBhZ2VzCiAJCSAqLwogCQkwCkBAIC0yMjMsMTIgKzIyMywyMiBA
QAogCXBrbWFwX3BhYWxhbmNpbmcsIEthbm9qIFNhcmNhciwgU0dJLCBKYW4gMjAwMAogICog
IFBlciBjcHUgaG90L2NvbGQgcGFnZSBsaXN0cywgYnVsayBhbGxvY2F0aW9uLCBNYXJ0aW4g
Si4gQmxpZ2gsIFNlcHQgMjAwMgogICogICAgICAgICAgKGxvdHMgb2YgYml0cyBib3Jyb3dl
ZCBmcm9tIEluZ28gTW9sbmFyICYgQW5kcmV3IE1vcnRvbikKKyAqICBCYWRSQU0gaGFuZGxp
bmcsIFJpY2sgdmFuIFJlaW4sIEZlYiAyMDAxCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nv
bmZpZy5oPgpAQCAtMTYxNSwzICsxNjE2LDk2IEBACiAJc2V0dXBfcGVyX3pvbmVfcGFnZXNf
bWluKCk7CiAJcmV0dXJuIDA7CiB9CisKKworI2lmZGVmIENPTkZJR19CQURSQU0KKworLyog
R2l2ZW4gYSBwb2ludGVkLWF0IGFkZHJlc3MgYW5kIGEgbWFzaywgaW5jcmVtZW50IHRoZSBw
YWdlIHNvIHRoYXQgdGhlCisgKiBtYXNrIGhpZGVzIHRoZSBpbmNyZW1lbnQuIFJldHVybiAw
IGlmIG5vIGluY3JlbWVudCBpcyBwb3NzaWJsZS4KKyAqLworc3RhdGljIGludCBfX2luaXQg
bmV4dF9tYXNrZWRfYWRkcmVzcyAodW5zaWduZWQgbG9uZyAqYWRkcnAsIHVuc2lnbmVkIGxv
bmcgbWFzaykKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpbmM9MTsKKyAgICAgICAgdW5z
aWduZWQgbG9uZyBuZXd2YWwgPSAqYWRkcnA7CisJd2hpbGUgKGluYyAmIG1hc2spCisJCWlu
YyArPSBpbmM7CisgICAgICAgIHdoaWxlIChpbmMgIT0gMCkgeworCQluZXd2YWwgKz0gaW5j
OworCQluZXd2YWwgJj0gfm1hc2s7CisJCW5ld3ZhbCB8PSAoKCphZGRycCkgJiBtYXNrKTsK
KwkJaWYgKG5ld3ZhbCA+ICphZGRycCkgeworCQkJKmFkZHJwID0gbmV3dmFsOworCQkJcmV0
dXJuIDE7CisJCX0KKwkJZG8geworCQkJaW5jICs9IGluYzsKKwkJfSB3aGlsZSAoaW5jICYg
fm1hc2spOworCQl3aGlsZSAoaW5jICYgbWFzaykKKwkJCWluYyArPSBpbmM7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKwordm9pZCBfX2luaXQgYmFkcmFtX21hcmtw
YWdlcyAoaW50IGFyZ2MsIHVuc2lnbmVkIGxvbmcgKmFyZ3YpIHsKKwl1bnNpZ25lZCBsb25n
IGFkZHIsIG1hc2s7CisgICAgICAgIHdoaWxlIChhcmdjLS0gPiAwKSB7CisgICAgICAgICAg
ICAgICAgYWRkciA9ICphcmd2Kys7CisgICAgICAgICAgICAgICAgbWFzayBwcm87CiAKQEAg
LTQ2NywxMyArNDc5LDE3IEBACiAJdG90YWxyYW1fcGFnZXMgKz0gX19mcmVlX2FsbF9ib290
bWVtKCk7CiAKIAlyZXNlcnZlZHBhZ2VzID0gMDsKKwliYWRwYWdlcyA9IDA7CiAJZm9yICh0
bXAgPSAwOyB0bXAgPCBtYXhfbG93X3BmbjsgdG1wKyspCiAJCS8qCi0JCSAqIE9ubHkgY291
bnQgcmVzZXJ2ZWQgUkFNIHBhZ2VzCisJCSAqIE9ubHkgY291bnQgcmVzZXJ2ZWQgYW5kIGJh
ZCBSQU0gcGFnZXMKIAkJICovCiAJCWlmIChwYWdlX2lzX3JhbSh0bXApICYmIFBhZ2VSZXNl
cnZwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYgLyogIUNPTkZJR19ESVNDT05U
SUdNRU0gKi8KICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3Bh
KGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwaHlzX3RvX3BhZ2UoeCkJCShtZW1f
bWFwICsgKCh1bnNpZ25lZCBsb25nKSh4KSA+PiBQQUdFX1NISUZUKSkKIAogI2RlZmluZSB2
aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NI
SUZUKQogCmRpZmYgLXVyTiBsaW51eC0yLjUuNzMtbW0yL21tL2Jvb3RtZW0uYyBsaW51eC0y
LjUvbW0vYm9vdG1lbS5jCi0tLSBsaW51eC0yLjUuNzMtbW0yL21tL2Jvb3RtZW0uYwkyMDAz
LTA2LTE3IDA1OjE5OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi41L21tL2Jvb3Rt
ZW0uYwkyMDAzLTA3LTAxIDIwOjQyOjI1LjAwMDAwMDAwMCArMDEwMApAQCAtMjc0LDggKzI3
NCwxNyBAQAogCQkJCWlmICh2ICYgbSkgewogCQkJCQljb3VudCsrOwogCQkJCQlDbGVhclBh
Z2VSZXNlcnZlZChwYWdlKTsKKworI2lmZGVmIENPTkZJR19CQURSQU0KKwkJCQkJaWYgKCFQ
YWdlQmFkKHBhZ2UpKSB7CisJCQkJCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCQkJ
CV9fZnJlZV9wYWdlKHBhZ2UpOworCQkJCQl9CisjZWxzZQorCiAJCQkJCXNldF9wYWdlX2Nv
dW50KHBhZ2UsIDEpOwogCQkJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKyNlbmRpZgogCQkJCX0K
IAkJCX0KIAkJfSBlbHNlIHsKQEAgLTI5NCw4ICszMDMsMTYgQEAKIAlmb3IgKGkgPSAwOyBp
IDwgKChiZGF0YS0+bm9kZV9sb3dfcGZuLShiZGF0YS0+bm9kZV9ib290X3N0YXJ0ID4+IFBB
R0VfU0hJRlQpKS84ICsgUEFHRV9TSVpFLTEpL1BBR0VfU0laRTsgaSsrLHBhZ2UrKykgewog
CQljb3VudCsrOwogCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJc2V0X3BhZ2VfY291
bnQocGFnZSwgMSk7CisKKyNpZmRlZiBDT05GSUdfQkFEUkFNCisJCWlmICghUGFnZUJhZChw
YWdlKSkgeworCQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCQlfX2ZyZWVfcGFnZShw
YWdlKTsKKwkJfQorI2Vsc2UKKyAJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQlfX2Zy
ZWVfcGFnZShwYWdlKTsKKyNlbmRpZgogCX0KIAl0b3RhbCArPSBjb3VudDsKIAliZGF0YS0+
bm9kZV9ib290bWVtX21hcCA9IE5VTEw7CmRpZmYgLXVyTiBsaW51eC0yLjUuNzMtbW0yL21t
L3BhZ2VfYWxsb2MuYyBsaW51eC0yLjUvbW0vcGFnZV9hbGxvYy5jCi0tLSBsaW51eC0yLjUu
NzMtbW0yL21tL3BhZ2VfYWxsb2MuYwkyMDAzLTA3LTAxIDE5OjU5OjU3LjAwMDAwMDAwMCAr
MDEwMAorKysgbGludXgtMi41L21tL3BhZ2VfYWxsb2MuYwkyMDAzLTA3LTAyIDAxOjEyOjA5
LjAwMDAwMDAwMCArNTQsNiArMTU0LDcgQEAKICNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgo
cGZuKSA8IG1heF9tYXBucikKICNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAqLwog
I2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+
IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBoeXNfdG9fcGFnZSh4KQkJKG1lbV9tYXAgKyAoKHVu
c2lnbmVkIGxvbmcpKHgpID4+IFBBR0VfU0hJRlQpKQogCiAjZGVmaW5lIHZpcnRfYWRkcl92
YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAKZGlm
ZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvbW0vYm9vdG1lbS5jIGxpbnV4LTIuNS9tbS9ib290
bWVtLmMKLS0tIGxpbnV4LTIuNS43My1tbTIvbW0vYm9vdG1lbS5jCTIwMDMtMDYtMTcgMDU6
MTk6NDcuMDAwMDAwMDAwICswMTAwCisrKyBsaW51eC0yLjUvbW0vYm9vdG1lbS5jCTIwMDMt
MDctMDEgMjA6NDI6MjUuMDAwMDAwMDAwICswMTAwCkBAIC0yNzQsOCArMjc0LDE3IEBACiAJ
CQkJaWYgKHYgJiBtKSB7CiAJCQkJCWNvdW50Kys7CiAJCQkJCUNsZWFyUGFnZVJlc2VydmVk
KHBhZ2UpOworCisjaWZkZWYgQ09ORklHX0JBRFJBTQorCQkJCQlpZiAoIVBhZ2VCYWQocGFn
ZSkpIHsKKwkJCQkJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCQkJCQkJX19mcmVlX3Bh
Z2UocGFnZSk7CisJCQkJCX0KKyNlbHNlCisKIAkJCQkJc2V0X3BhZ2VfY291bnQocGFnZSwg
MSk7CiAJCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOworI2VuZGlmCiAJCQkJfQogCQkJfQogCQl9
IGVsc2UgewpAQCAtMjk0LDggKzMwMywxNiBAQAogCWZvciAoaSA9IDA7IGkgPCAoKGJkYXRh
LT5ub2RlX2xvd19wZm4tKGJkYXRhLT5ub2RlX2Jvb3Rfc3RhcnQgPj4gUEFHRV9TSElGVCkp
LzggKyBQQUdFX1NJWkUtMSkvUEFHRV9TSVpFOyBpKysscGFnZSsrKSB7CiAJCWNvdW50Kys7
CiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAx
KTsKKworI2lmZGVmIENPTkZJR19CQURSQU0KKwkJaWYgKCFQYWdlQmFkKHBhZ2UpKSB7CisJ
CQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQl9
CisjZWxzZQorIAkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiAJCV9fZnJlZV9wYWdlKHBh
Z2UpOworI2VuZGlmCiAJfQogCXRvdGFsICs9IGNvdW50OwogCWJkYXRhLT5ub2RlX2Jvb3Rt
ZW1fbWFwID0gTlVMTDsKZGlmZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvbW0vcGFnZV9hbGxv
Yy5jIGxpbnV4LTIuNS9tbS9wYWdlX2FsbG9jLmMKLS0tIGxpbnV4LTIuNS43My1tbTIvbW0v
cGFnZV9hbGxvYy5jCTIwMDMtMDctMDEgMTk6NTk6NTcuMDAwMDAwMDAwICswMTAwCisrKyBs
aW51eC0yLjUvbW0vcGFnZV9hbGxvYy5jCTIwMDMtMDctMDIgMDE6MTI6MDkuMDAwMDAwMDAw
ICswMTAwCkBAIC0xMiw2ICsxMiw3IEBACiAgKiAgWm9uZSBiYWxhbmNpbmcsIEthbm9qIFNh
cmNhciwgU0dJLCBKYW4gMjAwMAogICogIFBlciBjcHUgaG90L2NvbGQgcGFnZSBsaXN0cywg
YnVsayBhbGxvY2F0aW9uLCBNYXJ0aW4gSi4gQmxpZ2gsIFNlcHQgMjAwMgogICogICAgICAg
ICAgKGxvdHMgb2YgYml0cyBib3Jyb3dlZCBmcm9tIEluZ28gTW9sbmFyICYgQW5kcmV3IE1v
cnRvbikKKyAqICBCYWRSQU0gaGFuZGxpbmcsIFJpY2sgdmFuIFJlaW4sIEZlYiAyMDAxCiAg
Ki8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTYxNSwzICsxNjE2LDk2IEBA
CiAJc2V0dXBfcGVyX3pvbmVfcGFnZXNfbWluKCk7CiAJcmV0dXJuIDA7CiB9CisKKworI2lm
ZGVmIENPTkZJR19CQURSQU0KKworLyogR2l2ZW4gYSBwb2ludGVkLWF0IGFkZHJlc3MgYW5k
IGEgbWFzaywgaW5jcmVtZW50IHRoZSBwYWdlIHNvIHRoYXQgdGhlCisgKiBtYXNrIGhpZGVz
IHRoZSBpbmNyZW1lbnQuIFJldHVybiAwIGlmIG5vIGluY3JlbWVudCBpcyBwb3NzaWJsZS4K
KyAqLworc3RhdGljIGludCBfX2luaXQgbmV4dF9tYXNrZWRfYWRkcmVzcyAodW5zaWduZWQg
bG9uZyAqYWRkcnAsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBpbmM9MTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBuZXd2YWwgPSAqYWRkcnA7CisJ
d2hpbGUgKGluYyAmIG1hc2spCisJCWluYyArPSBpbmM7CisgICAgICAgIHdoaWxlIChpbmMg
IT0gMCkgeworCQluZXd2YWwgKz0gaW5jOworCQluZXd2YWwgJj0gfm1hc2s7CisJCW5ld3Zh
bCB8PSAoKCphZGRycCkgJiBtYXNrKTsKKwkJaWYgKG5ld3ZhbCA+ICphZGRycCkgeworCQkJ
KmFkZHJwID0gbmV3dmFsOworCQkJcmV0dXJuIDE7CisJCX0KKwkJZG8geworCQkJaW5jICs9
IGluYzsKKwkJfSB3aGlsZSAoaW5jICYgfm1hc2spOworCQl3aGlsZSAoaW5jICYgbWFzaykK
KwkJCWluYyArPSBpbmM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKwor
dm9pZCBfX2luaXQgYmFkcmFtX21hcmtwYWdlcyAoaW50IGFyZ2MsIHVuc2lnbmVkIGxvbmcg
KmFyZ3YpIHsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIG1hc2s7CisgICAgICAgIHdoaWxlIChh
cmdjLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYWRkciA9ICphcmd2Kys7CisgICAgICAg
ICAgICAgICAgbWFzayA9IChhcmdjLS0gPiAwKSA/ICphcmd2KysgOiB+MEw7CisgICAgICAg
ICAgICAgICAgbWFzayB8PSB+UEFHRV9NQVNLOwkvLyBPcHRpbWFsaXNhdGlvbgorCQlhZGRy
ICY9IG1hc2s7CQkvLyAgTm9ybWFsaXNhdGlvbgorICAgICAgICAgICAgICAgIGRvIHsKKwkJ
CXN0cnVjdCBwYWdlICpwZyA9IHBoeXNfdG9fcGFnZShhZGRyKTsKK3ByaW50ayAoIiUwNWx4
ICIsIF9fcGEoX192YShhZGRyKSkgPj4gUEFHRV9TSElGVCk7CitwcmludGsgKCI9JTA1bHgv
JTA1bHggIiwgcGctbWVtX21hcCwgbWF4X21hcG5yKTsKKwkJCS8vIGlmIChWQUxJRF9QQUdF
KHBnKSkgeworCQkJCWlmIChQYWdlVGVzdGFuZFNldEJhZCAocGcpKSB7CisJCQkJCXJlc2Vy
dmVfYm9vdG1lbSAoYWRkciwgUEFHRV9TSVpFKTsKK3ByaW50ayAoIkJBRCAiKTsKKwkJCQl9
CitlbHNlIHByaW50ayAoIkJGUiAiKTsKKwkJCS8vIH0KKy8vIGVsc2UgcHJpbnRrICgiSU5W
ICIpOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKG5leHRfbWFza2VkX2FkZHJlc3MgKCZh
ZGRyLG1hc2spKTsKKyAgICAgICAgfQorfQorCisKKworLyoqKioqKioqKioqIENPTkZJR19C
QURSQU06IENVU1RPTUlTQUJMRSBTRUNUSU9OIFNUQVJUUyBIRVJFICoqKioqKioqKioqKioq
KioqKi8KKworCisvLyBFbnRlciB5b3VyIGN1c3RvbSBCYWRSQU0gcGF0dGVybnMgaGVyZSBh
cyBwYWlycyBvZiB1bnNpZ25lZCBsb25nIGludGVnZXJzLgorLy8gRm9yIG1vcmUgaW5mb3Jt
YXRpb24gb24gdGhlc2UgRi9NIHBhaXJzLCByZWZlciB0byBEb2N1bWVudGF0aW9uL2JhZHJh
bS50eHQKKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2RldmluaXRkYXRhIGJhZHJhbV9j
dXN0b21bXSA9IHsKKwkwLAkvLyBOdW1iZXIgb2YgbG9uZ3dvcmRzIHRoYXQgZm9sbG93LCBh
cyBGL00gcGFpcnMKK307CisKKworLyoqKioqKioqKioqIENPTkZJR19CQURSQU06IENVU1RP
TUlTQUJMRSBTRUNUSU9OIEVORFMgSEVSRSAqKioqKioqKioqKioqKioqKioqKi8KKworCisK
K3N0YXRpYyBpbnQgX19pbml0IGJhZHJhbV9zZXR1cCAoY2hhciAqc3RyKQoreworCXVuc2ln
bmVkIGxvbmcgb3B0c1szXTsKKwlpZiAoIW1lbV9tYXApIEJVRygpOworcHJpbnRrICgiUEFH
RV9PRkZTRVQ9MHglMDhseFxuIiwgUEFHRV9PRkZTRVQpOworcHJpbnRrICgiQmFkUkFNIG9w
dGlvbiBpcyAlc1xuIiwgc3RyKTsKKwlpZiAoKnN0cisrID09ICc9JykKKwkJd2hpbGUgKHN0
cj1nZXRfb3B0aW9ucyAoc3RyLCAzLCAoaW50ICopIG9wdHMpLCAqb3B0cykgeworcHJpbnRr
ICgiICAgLS0+IG1hcmtpbmcgMHglMDhseCwgMHglMDhseCAgWyVsZF1cbiIsIG9wdHNbMV0s
IG9wdHNbMl0sIG9wdHNbMF0pOworCQkJYmFkcmFtX21hcmtwYWdlcyAoKm9wdHMsIG9wdHMr
MSk7CisJCQlpZiAoKm9wdHM9PTEpCisJCQkJYnJlYWs7CisJCX07CisJYmFkcmFtX21hcmtw
YWdlcyAoKmJhZHJhbV9jdXN0b20sIGJhZHJhbV9jdXN0b20rMSk7CisJcmV0dXJuIDA7Cit9
CisKK19fc2V0dXAoImJhZHJhbSIsIGJhZHJhbV9zZXR1cCk7CisKKyNlbmRpZiAvKiBDT05G
SUdfQkFEUkFNICovCisK
--=_courier-3984-1057150804-0001-2--