[RESUBMIT] [PATCH] [MTD] NAND nand_ecc.c: rewrite for improved performance
Frans Meulenbroeks
fransmeulenbroeks at yahoo.com
Tue Jul 29 13:58:58 EDT 2008
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="0-415199513-1217354338=:23881"
--0-415199513-1217354338=:23881
Content-Type: text/plain; charset=us-ascii
Dear all,
A resubmit of my patch, with all comments from Thomas addressed.
This patch improves the performance of the ecc generation code by a factor of 18 on an INTEL D920 CPU,
by a factor of 7 on MIPS and by a factor of 5 on ARM (NSLU2).
As my email client wraps lines at 79 chars I've added the patch as an attachement instead of inlining it (the line with the filenames created by diff exceeds 79 chars).
Please let me know if additional changes are needed.
Best regards, Frans.
--0-415199513-1217354338=:23881
Content-Type: text/x-patch; name="ecc.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="ecc.patch"
ZGlmZiAtdXJOIGxpbnV4LTIuNi4yNS4xMC9Eb2N1bWVudGF0aW9uL25hbmQv
ZWNjLnR4dCBsaW51eC0yLjYuMjUuMTAud29yay9Eb2N1bWVudGF0aW9uL25h
bmQvZWNjLnR4dAotLS0gbGludXgtMi42LjI1LjEwL0RvY3VtZW50YXRpb24v
bmFuZC9lY2MudHh0CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyBsaW51eC0yLjYuMjUuMTAud29yay9Eb2N1bWVudGF0aW9uL25h
bmQvZWNjLnR4dAkyMDA4LTA3LTI5IDE5OjI1OjE5LjAwMDAwMDAwMCArMDIw
MApAQCAtMCwwICsxLDcxNCBAQAorSW50cm9kdWN0aW9uCis9PT09PT09PT09
PT0KKworSGF2aW5nIGxvb2tlZCBhdCB0aGUgbGludXggbXRkL25hbmQgZHJp
dmVyIGFuZCBtb3JlIHNwZWNpZmljIGF0IG5hbmRfZWNjLmMgCitJIGZlbHQg
dGhlcmUgd2FzIHJvb20gZm9yIG9wdGltaXNhdGlvbi4gSSBiYXNoZWQgdGhl
IGNvZGUgZm9yIGEgZmV3IGhvdXJzCitwZXJmb3JtaW5nIHRyaWNrcyBsaWtl
IHRhYmxlIGxvb2t1cCByZW1vdmluZyBzdXBlcmZsdW91cyBjb2RlIGV0Yy4g
CitBZnRlciB0aGF0IHRoZSBzcGVlZCB3YXMgaW5jcmVhc2VkIGJ5IDM1LTQw
JS4gCitTdGlsbCBJIHdhcyBub3QgdG9vIGhhcHB5IGFzIEkgZmVsdCB0aGVy
ZSB3YXMgYWRkaXRpb25hbCByb29tIGZvciBpbXByb3ZlbWVudC4KKworQmFk
ISBJIHdhcyBob29rZWQuCitJIGRlY2lkZWQgdG8gYW5ub3RhdGUgbXkgc3Rl
cHMgaW4gdGhpcyBmaWxlLiBQZXJoYXBzIGl0IGlzIHVzZWZ1bCB0byBzb21l
b25lCitvciBzb21lb25lIGxlYXJucyBzb21ldGhpbmcgZnJvbSBpdC4KKwor
CitUaGUgcHJvYmxlbQorPT09PT09PT09PT0KKworTkFORCBmbGFzaCAoYXQg
bGVhc3QgU0xDIG9uZSkgdHlwaWNhbGx5IGhhcyBzZWN0b3JzIG9mIDI1NiBi
eXRlcy4KK0hvd2V2ZXIgTkFORCBmbGFzaCBpcyBub3QgZXh0cmVtZWx5IHJl
bGlhYmxlIHNvIHNvbWUgZXJyb3IgZGV0ZWN0aW9uCisoYW5kIHNvbWV0aW1l
cyBjb3JyZWN0aW9uKSBpcyBuZWVkZWQuCisKK1RoaXMgaXMgZG9uZSBieSBt
ZWFucyBvZiBhIEhhbW1pbmcgY29kZS4gSSdsbCB0cnkgdG8gZXhwbGFpbiBp
dCBpbgorbGF5bWFucyB0ZXJtcyAoYW5kIGFwb2xvZ2llcyB0byBhbGwgdGhl
IHBybydzIGluIHRoZSBmaWVsZCBpbiBjYXNlIEkgZG8KK25vdCB1c2UgdGhl
IHJpZ2h0IHRlcm1pbm9sb2d5LCBteSBjb2RpbmcgdGhlb3J5IGNsYXNzIHdh
cyBhbG1vc3QgMzAKK3llYXJzIGFnbywgYW5kIEkgbXVzdCBhZG1pdCBpdCB3
YXMgbm90IG9uZSBvZiBteSBmYXZvdXJpdGVzKS4KKworQXMgSSBzYWlkIGJl
Zm9yZSB0aGUgZWNjIGNhbGN1bGF0aW9uIGlzIHBlcmZvcm1lZCBvbiBzZWN0
b3JzIG9mIDI1NgorYnl0ZXMuIFRoaXMgaXMgZG9uZSBieSBjYWxjdWxhdGlu
ZyBzZXZlcmFsIHBhcml0eSBiaXRzIG92ZXIgdGhlIHJvd3MgYW5kCitjb2x1
bW5zLiBUaGUgcGFyaXR5IHVzZWQgaXMgZXZlbiBwYXJpdHkgd2hpY2ggbWVh
bnMgdGhhdCB0aGUgcGFyaXR5IGJpdCA9IDEKK2lmIHRoZSBkYXRhIG92ZXIg
d2hpY2ggdGhlIHBhcml0eSBpcyBjYWxjdWxhdGVkIGlzIDEgYW5kIHRoZSBw
YXJpdHkgYml0ID0gMAoraWYgdGhlIGRhdGEgb3ZlciB3aGljaCB0aGUgcGFy
aXR5IGlzIGNhbGN1bGF0ZWQgaXMgMC4gU28gdGhlIHRvdGFsCitudW1iZXIg
b2YgYml0cyBvdmVyIHRoZSBkYXRhIG92ZXIgd2hpY2ggdGhlIHBhcml0eSBp
cyBjYWxjdWxhdGVkICsgdGhlCitwYXJpdHkgYml0IGlzIGV2ZW4uIChzZWUg
d2lraXBlZGlhIGlmIHlvdSBjYW4ndCBmb2xsb3cgdGhpcykuCitQYXJpdHkg
aXMgb2Z0ZW4gY2FsY3VsYXRlZCBieSBtZWFucyBvZiBhbiBleGNsdXNpdmUg
b3Igb3BlcmF0aW9uLAorc29tZXRpbWVzIGFsc28gcmVmZXJyZWQgdG8gYXMg
eG9yLiBJbiBDIHRoZSBvcGVyYXRvciBmb3IgeG9yIGlzIF4KKworQmFjayB0
byBlY2MuCitMZXQncyBnaXZlIGEgc21hbGwgZmlndXJlOgorCitieXRlICAg
MDogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAg
IHJwMCBycDIgcnA0IC4uLiBycDE0CitieXRlICAgMTogIGJpdDcgYml0NiBi
aXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMSBycDIgcnA0IC4u
LiBycDE0CitieXRlICAgMjogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBi
aXQyIGJpdDEgYml0MCAgIHJwMCBycDMgcnA0IC4uLiBycDE0CitieXRlICAg
MzogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAg
IHJwMSBycDMgcnA0IC4uLiBycDE0CitieXRlICAgNDogIGJpdDcgYml0NiBi
aXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDIgcnA1IC4u
LiBycDE0CisuLi4uCitieXRlIDI1NDogIGJpdDcgYml0NiBiaXQ1IGJpdDQg
Yml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDMgcnA1IC4uLiBycDE1Citi
eXRlIDI1NTogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEg
Yml0MCAgIHJwMSBycDMgcnA1IC4uLiBycDE1CisgICAgICAgICAgIGNwMSAg
Y3AwICBjcDEgIGNwMCAgY3AxICBjcDAgIGNwMSAgY3AwCisgICAgICAgICAg
IGNwMyAgY3AzICBjcDIgIGNwMiAgY3AzICBjcDMgIGNwMiAgY3AyCisgICAg
ICAgICAgIGNwNSAgY3A1ICBjcDUgIGNwNSAgY3A0ICBjcDQgIGNwNCAgY3A0
CisKK1RoaXMgZmlndXJlIHJlcHJlc2VudHMgYSBzZWN0b3Igb2YgMjU2IGJ5
dGVzLgorY3AgaXMgbXkgYWJicmV2aWF0b24gZm9yIGNvbHVtbiBwYXJpdHks
IHJwIGZvciByb3cgcGFyaXR5LgorCitMZXQncyBzdGFydCB0byBleHBsYWlu
IGNvbHVtbiBwYXJpdHkuCitjcDAgaXMgdGhlIHBhcml0eSB0aGF0IGJlbG9u
Z3MgdG8gYWxsIGJpdDAsIGJpdDIsIGJpdDQsIGJpdDYuCitzbyB0aGUgc3Vt
IG9mIGFsbCBiaXQwLCBiaXQyLCBiaXQ0IGFuZCBiaXQ2IHZhbHVlcyArIGNw
MCBpdHNlbGYgaXMgZXZlbi4KK1NpbWlsYXJseSBjcDEgaXMgdGhlIHN1bSBv
ZiBhbGwgYml0MSwgYml0MywgYml0NSBhbmQgYml0Ny4KK2NwMiBpcyB0aGUg
cGFyaXR5IG92ZXIgYml0MCwgYml0MSwgYml0NCBhbmQgYml0NQorY3AzIGlz
IHRoZSBwYXJpdHkgb3ZlciBiaXQyLCBiaXQzLCBiaXQ2IGFuZCBiaXQ3Lgor
Y3A0IGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQwLCBiaXQxLCBiaXQyIGFuZCBi
aXQzLgorY3A1IGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQ0LCBiaXQ1LCBiaXQ2
IGFuZCBiaXQ3LgorTm90ZSB0aGF0IGVhY2ggb2YgY3AwIC4uIGNwNSBpcyBl
eGFjdGx5IG9uZSBiaXQuCisKK1JvdyBwYXJpdHkgYWN0dWFsbHkgd29ya3Mg
YWxtb3N0IHRoZSBzYW1lLgorcnAwIGlzIHRoZSBwYXJpdHkgb2YgYWxsIGV2
ZW4gYnl0ZXMgKDAsIDIsIDQsIDYsIC4uLiAyNTIsIDI1NCkKK3JwMSBpcyB0
aGUgcGFyaXR5IG9mIGFsbCBvZGQgYnl0ZXMgKDEsIDMsIDUsIDcsIC4uLiwg
MjUzLCAyNTUpCitycDIgaXMgdGhlIHBhcml0eSBvZiBhbGwgYnl0ZXMgMCwg
MSwgNCwgNSwgOCwgOSwgLi4uIAorKHNvIGhhbmRsZSB0d28gYnl0ZXMsIHRo
ZW4gc2tpcCAyIGJ5dGVzKS4KK3JwMyBpcyBjb3ZlcnMgdGhlIGhhbGYgcnAy
IGRvZXMgbm90IGNvdmVyIChieXRlcyAyLCAzLCA2LCA3LCAxMCwgMTEsIC4u
LikKK2ZvciBycDQgdGhlIHJ1bGUgaXMgY292ZXIgNCBieXRlcywgc2tpcCA0
IGJ5dGVzLCBjb3ZlciA0IGJ5dGVzLCBza2lwIDQgZXRjLgorc28gcnA0IGNh
bGN1bGF0ZXMgcGFyaXR5IG92ZXIgYnl0ZXMgMCwgMSwgMiwgMywgOCwgOSwg
MTAsIDExLCAxNiwgLi4uKQorYW5kIHJwNSBjb3ZlcnMgdGhlIG90aGVyIGhh
bGYsIHNvIGJ5dGVzIDQsIDUsIDYsIDcsIDEyLCAxMywgMTQsIDE1LCAyMCwg
Li4KK1RoZSBzdG9yeSBub3cgYmVjb21lcyBxdWl0ZSBib3JpbmcuIEkgZ3Vl
c3MgeW91IGdldCB0aGUgaWRlYS4KK3JwNiBjb3ZlcnMgOCBieXRlcyB0aGVu
IHNraXBzIDggZXRjCitycDcgc2tpcHMgOCBieXRlcyB0aGVuIGNvdmVycyA4
IGV0YworcnA4IGNvdmVycyAxNiBieXRlcyB0aGVuIHNraXBzIDE2IGV0Ywor
cnA5IHNraXBzIDE2IGJ5dGVzIHRoZW4gY292ZXJzIDE2IGV0YworcnAxMCBj
b3ZlcnMgMzIgYnl0ZXMgdGhlbiBza2lwcyAzMiBldGMKK3JwMTEgc2tpcHMg
MzIgYnl0ZXMgdGhlbiBjb3ZlcnMgMzIgZXRjCitycDEyIGNvdmVycyA2NCBi
eXRlcyB0aGVuIHNraXBzIDY0IGV0YworcnAxMyBza2lwcyA2NCBieXRlcyB0
aGVuIGNvdmVycyA2NCBldGMKK3JwMTQgY292ZXJzIDEyOCBieXRlcyB0aGVu
IHNraXBzIDEyOAorcnAxNSBza2lwcyAxMjggYnl0ZXMgdGhlbiBjb3ZlcnMg
MTI4IAorCitJbiB0aGUgZW5kIHRoZSBwYXJpdHkgYml0cyBhcmUgZ3JvdXBl
ZCB0b2dldGhlciBpbiB0aHJlZSBieXRlcyBhcworZm9sbG93czoKK0VDQyAg
ICBCaXQgNyBCaXQgNiBCaXQgNSBCaXQgNCBCaXQgMyBCaXQgMiBCaXQgMSBC
aXQgMAorRUNDIDAgICBycDA3ICBycDA2ICBycDA1ICBycDA0ICBycDAzICBy
cDAyICBycDAxICBycDAwCitFQ0MgMSAgIHJwMTUgIHJwMTQgIHJwMTMgIHJw
MTIgIHJwMTEgIHJwMTAgIHJwMDkgIHJwMDgKK0VDQyAyICAgY3A1ICAgY3A0
ICAgY3AzICAgY3AyICAgY3AxICAgY3AwICAgICAgMSAgICAgMQorCitJIGRl
dGVjdGVkIGFmdGVyIHdyaXRpbmcgdGhpcyB0aGF0IFNUIGFwcGxpY2F0aW9u
IG5vdGUgQU4xODIzCisoaHR0cDovL3d3dy5zdC5jb20vc3RvbmxpbmUvYm9v
a3MvcGRmL2RvY3MvMTAxMjMucGRmKSBnaXZlcyBhIG11Y2gKK25pY2VyIHBp
Y3R1cmUuKGJ1dCB0aGV5IHVzZSBsaW5lIHBhcml0eSBhcyB0ZXJtIHdoZXJl
IEkgdXNlIHJvdyBwYXJpdHkpCitPaCB3ZWxsLCBJJ20gZ3JhcGhpY2FsbHkg
Y2hhbGxlbmdlZCwgc28gc3VmZmVyIHdpdGggbWUgZm9yIGEgbW9tZW50IDot
KQorQW5kIEkgY291bGQgbm90IHJldXNlIHRoZSBTVCBwaWN0dXJlIGFueXdh
eSBmb3IgY29weXJpZ2h0IHJlYXNvbnMuCisKKworQXR0ZW1wdCAwCis9PT09
PT09PT0KKworSW1wbGVtZW50aW5nIHRoZSBwYXJpdHkgY2FsY3VsYXRpb24g
aXMgcHJldHR5IHNpbXBsZS4KK0luIEMgcHNldWRvY29kZToKK2ZvciAoaSA9
IDA7IGkgPCAyNTY7IGkrKykKK3sKKyAgICBpZiAoaSAmIDB4MDEpCisgICAg
ICAgcnAxID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBi
aXQyIF4gYml0MSBeIGJpdDAgXiBycDE7CisgICAgZWxzZQorICAgICAgIHJw
MCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBe
IGJpdDEgXiBiaXQwIF4gcnAxOworICAgIGlmIChpICYgMHgwMikKKyAgICAg
ICBycDMgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJp
dDIgXiBiaXQxIF4gYml0MCBeIHJwMzsKKyAgICBlbHNlCisgICAgICAgcnAy
ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4g
Yml0MSBeIGJpdDAgXiBycDI7CisgICAgaWYgKGkgJiAweDA0KQorICAgICAg
cnA1ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQy
IF4gYml0MSBeIGJpdDAgXiBycDU7CisgICAgZWxzZQorICAgICAgcnA0ID0g
Yml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0
MSBeIGJpdDAgXiBycDQ7CisgICAgaWYgKGkgJiAweDA4KQorICAgICAgcnA3
ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4g
Yml0MSBeIGJpdDAgXiBycDc7CisgICAgZWxzZQorICAgICAgcnA2ID0gYml0
NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBe
IGJpdDAgXiBycDY7CisgICAgaWYgKGkgJiAweDEwKQorICAgICAgcnA5ID0g
Yml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0
MSBeIGJpdDAgXiBycDk7CisgICAgZWxzZQorICAgICAgcnA4ID0gYml0NyBe
IGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJp
dDAgXiBycDg7CisgICAgaWYgKGkgJiAweDIwKQorICAgICAgcnAxMSA9IGJp
dDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEg
XiBiaXQwIF4gcnAxMTsKKyAgICBlbHNlCisgICAgcnAxMCA9IGJpdDcgXiBi
aXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQw
IF4gcnAxMDsKKyAgICBpZiAoaSAmIDB4NDApCisgICAgICBycDEzID0gYml0
NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBe
IGJpdDAgXiBycDEzOworICAgIGVsc2UKKyAgICAgIHJwMTIgPSBiaXQ3IF4g
Yml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0
MCBeIHJwMTI7CisgICAgaWYgKGkgJiAweDgwKQorICAgICAgcnAxNSA9IGJp
dDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEg
XiBiaXQwIF4gcnAxNTsKKyAgICBlbHNlCisgICAgICBycDE0ID0gYml0NyBe
IGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJp
dDAgXiBycDE0OworICAgIGNwMCA9IGJpdDYgXiBiaXQ0IF4gYml0MiBeIGJp
dDAgXiBjcDA7CisgICAgY3AxID0gYml0NyBeIGJpdDUgXiBiaXQzIF4gYml0
MSBeIGNwMTsKKyAgICBjcDIgPSBiaXQ1IF4gYml0NCBeIGJpdDEgXiBiaXQw
IF4gY3AyOworICAgIGNwMyA9IGJpdDcgXiBiaXQ2IF4gYml0MyBeIGJpdDIg
XiBjcDMKKyAgICBjcDQgPSBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4g
Y3A0CisgICAgY3A1ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGNw
NQorfQorCisKK0FuYWx5c2lzIDAKKz09PT09PT09PT0KKworQyBkb2VzIGhh
dmUgYml0d2lzZSBvcGVyYXRvcnMgYnV0IG5vdCByZWFsbHkgb3BlcmF0b3Jz
IHRvIGRvIHRoZSBhYm92ZQorZWZmaWNpZW50bHkgKGFuZCBtb3N0IGhhcmR3
YXJlIGhhcyBubyBzdWNoIGluc3RydWN0aW9ucyBlaXRoZXIpLgorVGhlcmVm
b3JlIHdpdGhvdXQgaW1wbGVtZW50aW5nIHRoaXMgaXQgd2FzIGNsZWFyIHRo
YXQgdGhlIGNvZGUgYWJvdmUgd2FzCitub3QgZ29pbmcgdG8gYnJpbmcgbWUg
YSBOb2JlbCBwcml6ZSA6LSkKKworRm9ydHVuYXRlbHkgdGhlIGV4Y2x1c2l2
ZSBvciBvcGVyYXRpb24gaXMgY29tbXV0YXRpdmUsIHNvIHdlIGNhbiBjb21i
aW5lCit0aGUgdmFsdWVzIGluIGFueSBvcmRlci4gU28gaW5zdGVhZCBvZiBj
YWxjdWxhdGluZyBhbGwgdGhlIGJpdHMKK2luZGl2aWR1YWxseSwgbGV0IHVz
IHRyeSB0byByZWFycmFuZ2UgdGhpbmdzLgorRm9yIHRoZSBjb2x1bW4gcGFy
aXR5IHRoaXMgaXMgZWFzeS4gV2UgY2FuIGp1c3QgeG9yIHRoZSBieXRlcyBh
bmQgaW4gdGhlCitlbmQgZmlsdGVyIG91dCB0aGUgcmVsZXZhbnQgYml0cy4g
VGhpcyBpcyBwcmV0dHkgbmljZSBhcyBpdCB3aWxsIGJyaW5nCithbGwgY3Ag
Y2FsY3VsYXRpb24gb3V0IG9mIHRoZSBpZiBsb29wLgorCitTaW1pbGFybHkg
d2UgY2FuIGZpcnN0IHhvciB0aGUgYnl0ZXMgZm9yIHRoZSB2YXJpb3VzIHJv
d3MuCitUaGlzIGxlYWRzIHRvOgorCisKK0F0dGVtcHQgMQorPT09PT09PT09
CisKK2NvbnN0IGNoYXIgcGFyaXR5WzI1Nl0gPSB7CisgICAgMCwgMSwgMSwg
MCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAg
MSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwg
MSwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwg
MSwgMCwgMCwgMSwgCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwg
MCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwg
MSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgCisgICAgMCwgMSwgMSwg
MCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAg
MCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwg
MCwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwg
MSwgMCwgMCwgMSwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwg
MSwgMSwgMCwgMSwgMCwgMCwgMSwgCisgICAgMCwgMSwgMSwgMCwgMSwgMCwg
MCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAgMCwgMSwgMSwg
MCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAg
MSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwg
MSwgCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwg
MCwgMSwgMSwgMCwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwg
MSwgMSwgMCwgMSwgMCwgMCwgMSwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwg
MSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgCisgICAgMCwgMSwgMSwg
MCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMAorfTsKKwor
dm9pZCBlY2MxKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQg
Y2hhciAqY29kZSkKK3sKKyAgICBpbnQgaTsKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpicCA9IGJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyIGN1cjsKKyAg
ICB1bnNpZ25lZCBjaGFyIHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUs
IHJwNiwgcnA3OworICAgIHVuc2lnbmVkIGNoYXIgcnA4LCBycDksIHJwMTAs
IHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTU7CisgICAgdW5zaWduZWQg
Y2hhciBwYXI7CisKKyAgICBwYXIgPSAwOworICAgIHJwMCA9IDA7IHJwMSA9
IDA7IHJwMiA9IDA7IHJwMyA9IDA7CisgICAgcnA0ID0gMDsgcnA1ID0gMDsg
cnA2ID0gMDsgcnA3ID0gMDsKKyAgICBycDggPSAwOyBycDkgPSAwOyBycDEw
ID0gMDsgcnAxMSA9IDA7CisgICAgcnAxMiA9IDA7IHJwMTMgPSAwOyBycDE0
ID0gMDsgcnAxNSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBp
KyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFy
IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDEgXj0gY3VyOyBl
bHNlIHJwMCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnAzIF49
IGN1cjsgZWxzZSBycDIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDQp
IHJwNSBePSBjdXI7IGVsc2UgcnA0IF49IGN1cjsKKyAgICAgICAgaWYgKGkg
JiAweDA4KSBycDcgXj0gY3VyOyBlbHNlIHJwNiBePSBjdXI7CisgICAgICAg
IGlmIChpICYgMHgxMCkgcnA5IF49IGN1cjsgZWxzZSBycDggXj0gY3VyOwor
ICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTEgXj0gY3VyOyBlbHNlIHJwMTAg
Xj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4NDApIHJwMTMgXj0gY3VyOyBl
bHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4ODApIHJwMTUg
Xj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOworICAgIH0KKyAgICBjb2RlWzBd
ID0KKyAgICAgICAgKHBhcml0eVtycDddIDw8IDcpIHwKKyAgICAgICAgKHBh
cml0eVtycDZdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtycDVdIDw8IDUp
IHwKKyAgICAgICAgKHBhcml0eVtycDRdIDw8IDQpIHwKKyAgICAgICAgKHBh
cml0eVtycDNdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtycDJdIDw8IDIp
IHwKKyAgICAgICAgKHBhcml0eVtycDFdIDw8IDEpIHwKKyAgICAgICAgKHBh
cml0eVtycDBdKTsKKyAgICBjb2RlWzFdID0KKyAgICAgICAgKHBhcml0eVty
cDE1XSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcnAxNF0gPDwgNikgfAor
ICAgICAgICAocGFyaXR5W3JwMTNdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0
eVtycDEyXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcnAxMV0gPDwgMykg
fAorICAgICAgICAocGFyaXR5W3JwMTBdIDw8IDIpIHwKKyAgICAgICAgKHBh
cml0eVtycDldICA8PCAxKSB8CisgICAgICAgIChwYXJpdHlbcnA4XSk7Cisg
ICAgY29kZVsyXSA9CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhmMF0gPDwg
NykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4MGZdIDw8IDYpIHwKKyAg
ICAgICAgKHBhcml0eVtwYXIgJiAweGNjXSA8PCA1KSB8CisgICAgICAgIChw
YXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3Bh
ciAmIDB4YWFdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDU1
XSA8PCAyKTsKKyAgICBjb2RlWzBdID0gfmNvZGVbMF07CisgICAgY29kZVsx
XSA9IH5jb2RlWzFdOworICAgIGNvZGVbMl0gPSB+Y29kZVsyXTsKK30KKwor
U3RpbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGxhc3QgdGhyZWUg
aW52ZXJ0IHN0YXRlbWVudHMgYXJlIHRoZXJlIHRvIAorZ2l2ZSBhIGNoZWNr
c3VtIG9mIDB4ZmYgMHhmZiAweGZmIGZvciBhbiBlbXB0eSBmbGFzaC4gSW4g
YW4gZW1wdHkgZmxhc2gKK2FsbCBkYXRhIGlzIDB4ZmYsIHNvIHRoZSBjaGVj
a3N1bSB0aGVuIG1hdGNoZXMuCisKK0kgYWxzbyBpbnRyb2R1Y2VkIHRoZSBw
YXJpdHkgbG9va3VwLiBJIGV4cGVjdGVkIHRoaXMgdG8gYmUgdGhlIGZhc3Rl
c3QKK3dheSB0byBjYWxjdWxhdGUgdGhlIHBhcml0eSwgYnV0IEkgd2lsbCBp
bnZlc3RpZ2F0ZSBhbHRlcm5hdGl2ZXMgbGF0ZXIKK29uLgorCisKK0FuYWx5
c2lzIDEKKz09PT09PT09PT0KKworVGhlIGNvZGUgd29ya3MsIGJ1dCBpcyBu
b3QgdGVycmlibHkgZWZmaWNpZW50LiBPbiBteSBzeXN0ZW0gaXQgdG9vawor
YWxtb3N0IDQgdGltZXMgYXMgbXVjaCB0aW1lIGFzIHRoZSBsaW51eCBkcml2
ZXIgY29kZS4gQnV0IGhleSwgaWYgaXQgd2FzCisqdGhhdCogZWFzeSB0aGlz
IHdvdWxkIGhhdmUgYmVlbiBkb25lIGxvbmcgYmVmb3JlLgorTm8gcGFpbi4g
bm8gZ2Fpbi4KKworRm9ydHVuYXRlbHkgdGhlcmUgaXMgcGxlbnR5IG9mIHJv
b20gZm9yIGltcHJvdmVtZW50LgorCitJbiBzdGVwIDEgd2UgbW92ZWQgZnJv
bSBiaXQtd2lzZSBjYWxjdWxhdGlvbiB0byBieXRlLXdpc2UgY2FsY3VsYXRp
b24uCitIb3dldmVyIGluIEMgd2UgY2FuIGFsc28gdXNlIHRoZSB1bnNpZ25l
ZCBsb25nIGRhdGEgdHlwZSBhbmQgdmlydHVhbGx5CitldmVyeSBtb2Rlcm4g
bWljcm9wcm9jZXNzb3Igc3VwcG9ydHMgMzIgYml0IG9wZXJhdGlvbnMsIHNv
IHdoeSBub3QgdHJ5Cit0byB3cml0ZSBvdXIgY29kZSBpbiBzdWNoIGEgd2F5
IHRoYXQgd2UgcHJvY2VzcyBkYXRhIGluIDMyIGJpdCBjaHVua3MuCisKK09m
IGNvdXJzZSB0aGlzIG1lYW5zIHNvbWUgbW9kaWZpY2F0aW9uIGFzIHRoZSBy
b3cgcGFyaXR5IGlzIGJ5dGUgYnkKK2J5dGUuIEEgcXVpY2sgYW5hbHlzaXM6
Citmb3IgdGhlIGNvbHVtbiBwYXJpdHkgd2UgdXNlIHRoZSBwYXIgdmFyaWFi
bGUuIFdoZW4gZXh0ZW5kaW5nIHRvIDMyIGJpdHMgCit3ZSBjYW4gaW4gdGhl
IGVuZCBlYXNpbHkgY2FsY3VsYXRlIHAwIGFuZCBwMSBmcm9tIGl0LgorKGJl
Y2F1c2UgcGFyIG5vdyBjb25zaXN0cyBvZiA0IGJ5dGVzLCBjb250cmlidXRp
bmcgdG8gcnAxLCBycDAsIHJwMSwgcnAwCityZXNwZWN0aXZlbHkpCithbHNv
IHJwMiBhbmQgcnAzIGNhbiBiZSBlYXNpbHkgcmV0cmlldmVkIGZyb20gcGFy
IGFzIHJwMyBjb3ZlcnMgdGhlCitmaXJzdCB0d28gYnl0ZXMgYW5kIHJwMiB0
aGUgbGFzdCB0d28gYnl0ZXMuCisKK05vdGUgdGhhdCBvZiBjb3Vyc2Ugbm93
IHRoZSBsb29wIGlzIGV4ZWN1dGVkIG9ubHkgNjQgdGltZXMgKDI1Ni80KS4g
CitBbmQgbm90ZSB0aGF0IGNhcmUgbXVzdCB0YWtlbiB3cnQgYnl0ZSBvcmRl
cmluZy4gVGhlIHdheSBieXRlcyBhcmUKK29yZGVyZWQgaW4gYSBsb25nIGlz
IG1hY2hpbmUgZGVwZW5kZW50LCBhbmQgbWlnaHQgYWZmZWN0IHVzLiAKK0Fu
eXdheSwgaWYgdGhlcmUgaXMgYW4gaXNzdWU6IHRoaXMgY29kZSBpcyBkZXZl
bG9wZWQgb24geDg2ICh0byBiZQorcHJlY2lzZTogYSBERUxMIFBDIHdpdGgg
YSBEOTIwIEludGVsIENQVSkKKworQW5kIG9mIGNvdXJzZSB0aGUgcGVyZm9y
bWFuY2UgbWlnaHQgZGVwZW5kIG9uIGFsaWdubWVudCwgYnV0IEkgZXhwZWN0
Cit0aGF0IHRoZSBJL08gYnVmZmVycyBpbiB0aGUgbmFuZCBkcml2ZXIgYXJl
IGFsaWduZWQgcHJvcGVybHkgKGFuZAorb3RoZXJ3aXNlIHRoYXQgc2hvdWxk
IGJlIGZpeGVkIHRvIGdldCBtYXhpbXVtIHBlcmZvcm1hbmNlKS4KKworTGV0
J3MgZ2l2ZSBpdCBhIHRyeS4uLgorCisKK0F0dGVtcHQgMgorPT09PT09PT09
CisKK2V4dGVybiBjb25zdCBjaGFyIHBhcml0eVsyNTZdOworCit2b2lkIGVj
YzIoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpj
b2RlKQoreworICAgIGludCBpOworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcg
KmJwID0gKHVuc2lnbmVkIGxvbmcgKilidWY7CisgICAgdW5zaWduZWQgbG9u
ZyBjdXI7CisgICAgdW5zaWduZWQgbG9uZyBycDAsIHJwMSwgcnAyLCBycDMs
IHJwNCwgcnA1LCBycDYsIHJwNzsKKyAgICB1bnNpZ25lZCBsb25nIHJwOCwg
cnA5LCBycDEwLCBycDExLCBycDEyLCBycDEzLCBycDE0LCBycDE1OworICAg
IHVuc2lnbmVkIGxvbmcgcGFyOworCisgICAgcGFyID0gMDsKKyAgICBycDAg
PSAwOyBycDEgPSAwOyBycDIgPSAwOyBycDMgPSAwOworICAgIHJwNCA9IDA7
IHJwNSA9IDA7IHJwNiA9IDA7IHJwNyA9IDA7CisgICAgcnA4ID0gMDsgcnA5
ID0gMDsgcnAxMCA9IDA7IHJwMTEgPSAwOworICAgIHJwMTIgPSAwOyBycDEz
ID0gMDsgcnAxNCA9IDA7IHJwMTUgPSAwOworCisgICAgZm9yIChpID0gMDsg
aSA8IDY0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAg
ICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUg
Xj0gY3VyOyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgw
MikgcnA3IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAo
aSAmIDB4MDQpIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAg
ICAgaWYgKGkgJiAweDA4KSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1
cjsKKyAgICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsgZWxzZSBy
cDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1
cjsgZWxzZSBycDE0IF49IGN1cjsKKyAgICB9CisgICAgLyoKKyAgICAgICB3
ZSBuZWVkIHRvIGFkYXB0IHRoZSBjb2RlIGdlbmVyYXRpb24gZm9yIHRoZSBm
YWN0IHRoYXQgcnAgdmFycyBhcmUgbm93CisgICAgICAgbG9uZzsgYWxzbyB0
aGUgY29sdW1uIHBhcml0eSBjYWxjdWxhdGlvbiBuZWVkcyB0byBiZSBjaGFu
Z2VkLgorICAgICAgIHdlJ2xsIGJyaW5nIHJwNCB0byAxNSBiYWNrIHRvIHNp
bmdsZSBieXRlIGVudGl0aWVzIGJ5IHNoaWZ0aW5nIGFuZAorICAgICAgIHhv
cmluZworICAgICovCisgICAgcnA0IF49IChycDQgPj4gMTYpOyBycDQgXj0g
KHJwNCA+PiA4KTsgcnA0ICY9IDB4ZmY7CisgICAgcnA1IF49IChycDUgPj4g
MTYpOyBycDUgXj0gKHJwNSA+PiA4KTsgcnA1ICY9IDB4ZmY7CisgICAgcnA2
IF49IChycDYgPj4gMTYpOyBycDYgXj0gKHJwNiA+PiA4KTsgcnA2ICY9IDB4
ZmY7CisgICAgcnA3IF49IChycDcgPj4gMTYpOyBycDcgXj0gKHJwNyA+PiA4
KTsgcnA3ICY9IDB4ZmY7CisgICAgcnA4IF49IChycDggPj4gMTYpOyBycDgg
Xj0gKHJwOCA+PiA4KTsgcnA4ICY9IDB4ZmY7CisgICAgcnA5IF49IChycDkg
Pj4gMTYpOyBycDkgXj0gKHJwOSA+PiA4KTsgcnA5ICY9IDB4ZmY7CisgICAg
cnAxMCBePSAocnAxMCA+PiAxNik7IHJwMTAgXj0gKHJwMTAgPj4gOCk7IHJw
MTAgJj0gMHhmZjsKKyAgICBycDExIF49IChycDExID4+IDE2KTsgcnAxMSBe
PSAocnAxMSA+PiA4KTsgcnAxMSAmPSAweGZmOworICAgIHJwMTIgXj0gKHJw
MTIgPj4gMTYpOyBycDEyIF49IChycDEyID4+IDgpOyBycDEyICY9IDB4ZmY7
CisgICAgcnAxMyBePSAocnAxMyA+PiAxNik7IHJwMTMgXj0gKHJwMTMgPj4g
OCk7IHJwMTMgJj0gMHhmZjsKKyAgICBycDE0IF49IChycDE0ID4+IDE2KTsg
cnAxNCBePSAocnAxNCA+PiA4KTsgcnAxNCAmPSAweGZmOworICAgIHJwMTUg
Xj0gKHJwMTUgPj4gMTYpOyBycDE1IF49IChycDE1ID4+IDgpOyBycDE1ICY9
IDB4ZmY7CisgICAgcnAzID0gKHBhciA+PiAxNik7IHJwMyBePSAocnAzID4+
IDgpOyBycDMgJj0gMHhmZjsKKyAgICBycDIgPSBwYXIgJiAweGZmZmY7IHJw
MiBePSAocnAyID4+IDgpOyBycDIgJj0gMHhmZjsKKyAgICBwYXIgXj0gKHBh
ciA+PiAxNik7CisgICAgcnAxID0gKHBhciA+PiA4KTsgcnAxICY9IDB4ZmY7
CisgICAgcnAwID0gKHBhciAmIDB4ZmYpOworICAgIHBhciBePSAocGFyID4+
IDgpOyBwYXIgJj0gMHhmZjsKKworICAgIGNvZGVbMF0gPQorICAgICAgICAo
cGFyaXR5W3JwN10gPDwgNykgfAorICAgICAgICAocGFyaXR5W3JwNl0gPDwg
NikgfAorICAgICAgICAocGFyaXR5W3JwNV0gPDwgNSkgfAorICAgICAgICAo
cGFyaXR5W3JwNF0gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3JwM10gPDwg
MykgfAorICAgICAgICAocGFyaXR5W3JwMl0gPDwgMikgfAorICAgICAgICAo
cGFyaXR5W3JwMV0gPDwgMSkgfAorICAgICAgICAocGFyaXR5W3JwMF0pOwor
ICAgIGNvZGVbMV0gPQorICAgICAgICAocGFyaXR5W3JwMTVdIDw8IDcpIHwK
KyAgICAgICAgKHBhcml0eVtycDE0XSA8PCA2KSB8CisgICAgICAgIChwYXJp
dHlbcnAxM10gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3JwMTJdIDw8IDQp
IHwKKyAgICAgICAgKHBhcml0eVtycDExXSA8PCAzKSB8CisgICAgICAgIChw
YXJpdHlbcnAxMF0gPDwgMikgfAorICAgICAgICAocGFyaXR5W3JwOV0gIDw8
IDEpIHwKKyAgICAgICAgKHBhcml0eVtycDhdKTsKKyAgICBjb2RlWzJdID0K
KyAgICAgICAgKHBhcml0eVtwYXIgJiAweGYwXSA8PCA3KSB8CisgICAgICAg
IChwYXJpdHlbcGFyICYgMHgwZl0gPDwgNikgfAorICAgICAgICAocGFyaXR5
W3BhciAmIDB4Y2NdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAw
eDMzXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhhYV0gPDwg
MykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpOworICAg
IGNvZGVbMF0gPSB+Y29kZVswXTsKKyAgICBjb2RlWzFdID0gfmNvZGVbMV07
CisgICAgY29kZVsyXSA9IH5jb2RlWzJdOworfQorCitUaGUgcGFyaXR5IGFy
cmF5IGlzIG5vdCBzaG93biBhbnkgbW9yZS4gTm90ZSBhbHNvIHRoYXQgZm9y
IHRoZXNlCitleGFtcGxlcyBJIGtpbmRhIGRldmlhdGVkIGZyb20gbXkgcmVn
dWxhciBwcm9ncmFtbWluZyBzdHlsZSBieSBhbGxvd2luZworbXVsdGlwbGUg
c3RhdGVtZW50cyBvbiBhIGxpbmUsIG5vdCB1c2luZyB7IH0gaW4gdGhlbiBh
bmQgZWxzZSBibG9ja3MKK3dpdGggb25seSBhIHNpbmdsZSBzdGF0ZW1lbnQg
YW5kIGJ5IHVzaW5nIG9wZXJhdG9ycyBsaWtlIF49CisKKworQW5hbHlzaXMg
MgorPT09PT09PT09PQorCitUaGUgY29kZSAob2YgY291cnNlKSB3b3Jrcywg
YW5kIGh1cnJheTogd2UgYXJlIGEgbGl0dGxlIGJpdCBmYXN0ZXIgdGhhbgor
dGhlIGxpbnV4IGRyaXZlciBjb2RlIChhYm91dCAxNSUpLiBCdXQgd2FpdCwg
ZG9uJ3QgY2hlZXIgdG9vIHF1aWNrbHkuCitUSGVyZSBpcyBtb3JlIHRvIGJl
IGdhaW5lZC4KK0lmIHdlIGxvb2sgYXQgZS5nLiBycDE0IGFuZCBycDE1IHdl
IHNlZSB0aGF0IHdlIGVpdGhlciB4b3Igb3VyIGRhdGEgd2l0aAorcnAxNCBv
ciB3aXRoIHJwMTUuIEhvd2V2ZXIgd2UgYWxzbyBoYXZlIHBhciB3aGljaCBn
b2VzIG92ZXIgYWxsIGRhdGEuCitUaGlzIG1lYW5zIHRoZXJlIGlzIG5vIG5l
ZWQgdG8gY2FsY3VsYXRlIHJwMTQgYXMgaXQgY2FuIGJlIGNhbGN1bGF0ZWQg
ZnJvbQorcnAxNSB0aHJvdWdoIHJwMTQgPSBwYXIgXiBycDE1OworKG9yIGlm
IGRlc2lyZWQgd2UgY2FuIGF2b2lkIGNhbGN1bGF0aW5nIHJwMTUgYW5kIGNh
bGN1bGF0ZSBpdCBmcm9tCitycDE0KS4gIFRoYXQgaXMgd2h5IHNvbWUgcGxh
Y2VzIHJlZmVyIHRvIGludmVyc2UgcGFyaXR5LgorT2YgY291cnNlIHRoZSBz
YW1lIHRoaW5nIGhvbGRzIGZvciBycDQvNSwgcnA2LzcsIHJwOC85LCBycDEw
LzExIGFuZCBycDEyLzEzLgorRWZmZWN0aXZlbHkgdGhpcyBtZWFucyB3ZSBj
YW4gZWxpbWluYXRlIHRoZSBlbHNlIGNsYXVzZSBmcm9tIHRoZSBpZgorc3Rh
dGVtZW50cy4gQWxzbyB3ZSBjYW4gb3B0aW1pc2UgdGhlIGNhbGN1bGF0aW9u
IGluIHRoZSBlbmQgYSBsaXR0bGUgYml0CitieSBnb2luZyBmcm9tIGxvbmcg
dG8gYnl0ZSBmaXJzdC4gQWN0dWFsbHkgd2UgY2FuIGV2ZW4gYXZvaWQgdGhl
IHRhYmxlCitsb29rdXBzCisKK0F0dGVtcHQgMworPT09PT09PT09CisKK09k
ZCByZXBsYWNlZDoKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUgXj0gY3Vy
OyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnA3
IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4
MDQpIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAgICAgaWYg
KGkgJiAweDA4KSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1cjsKKyAg
ICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49
IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1cjsgZWxz
ZSBycDE0IF49IGN1cjsKK3dpdGgKKyAgICAgICAgaWYgKGkgJiAweDAxKSBy
cDUgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDIpIHJwNyBePSBjdXI7
CisgICAgICAgIGlmIChpICYgMHgwNCkgcnA5IF49IGN1cjsgCisgICAgICAg
IGlmIChpICYgMHgwOCkgcnAxMSBePSBjdXI7CisgICAgICAgIGlmIChpICYg
MHgxMCkgcnAxMyBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgyMCkgcnAx
NSBePSBjdXI7CisKKyAgICAgICAgYW5kIG91dHNpZGUgdGhlIGxvb3AgYWRk
ZWQ6CisgICAgcnA0ICA9IHBhciBeIHJwNTsKKyAgICBycDYgID0gcGFyIF4g
cnA3OworICAgIHJwOCAgPSBwYXIgXiBycDk7CisgICAgcnAxMCAgPSBwYXIg
XiBycDExOworICAgIHJwMTIgID0gcGFyIF4gcnAxMzsKKyAgICBycDE0ICA9
IHBhciBeIHJwMTU7CisKK0FuZCBhZnRlciB0aGF0IHRoZSBjb2RlIHRha2Vz
IGFib3V0IDMwJSBtb3JlIHRpbWUsIGFsdGhvdWdoIHRoZSBudW1iZXIgb2YK
K3N0YXRlbWVudHMgaXMgcmVkdWNlZC4gVGhpcyBpcyBhbHNvIHJlZmxlY3Rl
ZCBpbiB0aGUgYXNzZW1ibHkgY29kZS4KKworCitBbmFseXNpcyAzCis9PT09
PT09PT09CisKK1Zlcnkgd2VpcmQuIEd1ZXNzIGl0IGhhcyB0byBkbyB3aXRo
IGNhY2hpbmcgb3IgaW5zdHJ1Y3Rpb24gcGFyYWxsZWxsaXNtCitvciBzby4g
SSBhbHNvIHRyaWVkIG9uIGFuIGVlZVBDIChDZWxlcm9uLCBjbG9ja2VkIGF0
IDkwMCBNaHopLiBJbnRlcmVzdGluZworb2JzZXJ2YXRpb24gd2FzIHRoYXQg
dGhpcyBvbmUgaXMgb25seSAzMCUgc2xvd2VyIChhY2NvcmRpbmcgdG8gdGlt
ZSkKK2V4ZWN1dGluZyB0aGUgY29kZSBhcyBteSAzR2h6IEQ5MjAgcHJvY2Vz
c29yLgorCitXZWxsLCBpdCB3YXMgZXhwZWN0ZWQgbm90IHRvIGJlIGVhc3kg
c28gbWF5YmUgaW5zdGVhZCBtb3ZlIHRvIGEKK2RpZmZlcmVudCB0cmFjazog
bGV0J3MgbW92ZSBiYWNrIHRvIHRoZSBjb2RlIGZyb20gYXR0ZW1wdDIgYW5k
IGRvIHNvbWUKK2xvb3AgdW5yb2xsaW5nLiBUaGlzIHdpbGwgZWxpbWluYXRl
IGEgZmV3IGlmIHN0YXRlbWVudHMuIEknbGwgdHJ5CitkaWZmZXJlbnQgYW1v
dW50cyBvZiB1bnJvbGxpbmcgdG8gc2VlIHdoYXQgd29ya3MgYmVzdC4KKwor
CitBdHRlbXB0IDQKKz09PT09PT09PQorCitVbnJvbGxlZCB0aGUgbG9vcCAx
LCAyLCAzIGFuZCA0IHRpbWVzLgorRm9yIDQgdGhlIGNvZGUgc3RhcnRzIHdp
dGg6CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgIHsKKyAg
ICAgICAgY3VyID0gKmJwKys7CisgICAgICAgIHBhciBePSBjdXI7CisgICAg
ICAgIHJwNCBePSBjdXI7CisgICAgICAgIHJwNiBePSBjdXI7CisgICAgICAg
IHJwOCBePSBjdXI7CisgICAgICAgIHJwMTAgXj0gY3VyOworICAgICAgICBp
ZiAoaSAmIDB4MSkgcnAxMyBePSBjdXI7IGVsc2UgcnAxMiBePSBjdXI7Cisg
ICAgICAgIGlmIChpICYgMHgyKSBycDE1IF49IGN1cjsgZWxzZSBycDE0IF49
IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7CisgICAgICAgIHBhciBePSBj
dXI7CisgICAgICAgIHJwNSBePSBjdXI7CisgICAgICAgIHJwNiBePSBjdXI7
CisgICAgICAgIC4uLgorCisKK0FuYWx5c2lzIDQKKz09PT09PT09PT0KKwor
VW5yb2xsaW5nIG9uY2UgZ2FpbnMgYWJvdXQgMTUlCitVbnJvbGxpbmcgdHdp
Y2Uga2VlcHMgdGhlIGdhaW4gYXQgYWJvdXQgMTUlCitVbnJvbGxpbmcgdGhy
ZWUgdGltZXMgZ2l2ZXMgYSBnYWluIG9mIDMwJSBjb21wYXJlZCB0byBhdHRl
bXB0IDIuCitVbnJvbGxpbmcgZm91ciB0aW1lcyBnaXZlcyBhIG1hcmdpbmFs
IGltcHJvdmVtZW50IGNvbXBhcmVkIHRvIHVucm9sbGluZwordGhyZWUgdGlt
ZXMuCisKK0kgZGVjaWRlZCB0byBwcm9jZWVkIHdpdGggYSBmb3VyIHRpbWUg
dW5yb2xsZWQgbG9vcCBhbnl3YXkuIEl0IHdhcyBteSBndXQKK2ZlZWxpbmcg
dGhhdCBpbiB0aGUgbmV4dCBzdGVwcyBJIHdvdWxkIG9idGFpbiBhZGRpdGlv
bmFsIGdhaW4gZnJvbSBpdC4KKworVGhlIG5leHQgc3RlcCB3YXMgdHJpZ2dl
cmVkIGJ5IHRoZSBmYWN0IHRoYXQgcGFyIGNvbnRhaW5zIHRoZSB4b3Igb2Yg
YWxsCitieXRlcyBhbmQgcnA0IGFuZCBycDUgZWFjaCBjb250YWluIHRoZSB4
b3Igb2YgaGFsZiBvZiB0aGUgYnl0ZXMuCitTbyBpbiBlZmZlY3QgcGFyID0g
cnA0IF4gcnA1LiBCdXQgYXMgeG9yIGlzIGNvbW11dGF0aXZlIHdlIGNhbiBh
bHNvIHNheQordGhhdCBycDUgPSBwYXIgXiBycDQuIFNvIG5vIG5lZWQgdG8g
a2VlcCBib3RoIHJwNCBhbmQgcnA1IGFyb3VuZC4gV2UgY2FuCitlbGltaW5h
dGUgcnA1IChvciBycDQsIGJ1dCBJIGFscmVhZHkgZm9yZXNhdyBhbm90aGVy
IG9wdGltaXNhdGlvbikuCitUaGUgc2FtZSBob2xkcyBmb3IgcnA2LzcsIHJw
OC85LCBycDEwLzExIHJwMTIvMTMgYW5kIHJwMTQvMTUuCisKKworQXR0ZW1w
dCA1Cis9PT09PT09PT0KKworRWZmZWN0aXZlbHkgc28gYWxsIG9kZCBkaWdp
dCBycCBhc3NpZ25tZW50cyBpbiB0aGUgbG9vcCB3ZXJlIHJlbW92ZWQuCitU
aGlzIGluY2x1ZGVkIHRoZSBlbHNlIGNsYXVzZSBvZiB0aGUgaWYgc3RhdGVt
ZW50cy4KK09mIGNvdXJzZSBhZnRlciB0aGUgbG9vcCB3ZSBuZWVkIHRvIGNv
cnJlY3QgdGhpbmdzIGJ5IGFkZGluZyBjb2RlIGxpa2U6CisgICAgcnA1ID0g
cGFyIF4gcnA0OworQWxzbyB0aGUgaW5pdGlhbCBhc3NpZ25tZW50cyAocnA1
ID0gMDsgZXRjKSBjb3VsZCBiZSByZW1vdmVkLgorQWxvbmcgdGhlIGxpbmUg
SSBhbHNvIHJlbW92ZWQgdGhlIGluaXRpYWxpc2F0aW9uIG9mIHJwMC8xLzIv
My4KKworCitBbmFseXNpcyA1Cis9PT09PT09PT09CisKK01lYXN1cmVtZW50
cyBzaG93ZWQgdGhpcyB3YXMgYSBnb29kIG1vdmUuIFRoZSBydW4tdGltZSBy
b3VnaGx5IGhhbHZlZAorY29tcGFyZWQgd2l0aCBhdHRlbXB0IDQgd2l0aCA0
IHRpbWVzIHVucm9sbGVkLCBhbmQgd2Ugb25seSByZXF1aXJlIDEvM3JkCitv
ZiB0aGUgcHJvY2Vzc29yIHRpbWUgY29tcGFyZWQgdG8gdGhlIGN1cnJlbnQg
Y29kZSBpbiB0aGUgbGludXgga2VybmVsLgorCitIb3dldmVyLCBzdGlsbCBJ
IHRob3VnaHQgdGhlcmUgd2FzIG1vcmUuIEkgZGlkbid0IGxpa2UgYWxsIHRo
ZSBpZgorc3RhdGVtZW50cy4gV2h5IG5vdCBrZWVwIGEgcnVubmluZyBwYXJp
dHkgYW5kIG9ubHkga2VlcCB0aGUgbGFzdCBpZgorc3RhdGVtZW50LiBUaW1l
IGZvciB5ZXQgYW5vdGhlciB2ZXJzaW9uIQorCisKK0F0dGVtcHQgNgorPT09
PT09PT09CisKK1RIZSBjb2RlIHdpdGhpbiB0aGUgZm9yIGxvb3Agd2FzIGNo
YW5nZWQgdG86CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAg
IHsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciAgPSBjdXI7IHJwNCBe
PSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBy
cDYgXj0gdG1wcGFyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49
IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBh
ciBePSBjdXI7IHJwOCBePSB0bXBwYXI7CisKKyAgICAgICAgY3VyID0gKmJw
Kys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7IHJwNiBePSBjdXI7Cisg
ICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3Vy
OworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1
cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwMTAgXj0g
dG1wcGFyOworCisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBy
cDQgXj0gY3VyOyBycDYgXj0gY3VyOyBycDggXj0gY3VyOworICAgICAgICBj
dXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsgcnA4IF49
IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBe
PSBjdXI7IHJwOCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBw
YXIgXj0gY3VyOyBycDggXj0gY3VyOworCisgICAgICAgIGN1ciA9ICpicCsr
OyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOyBycDYgXj0gY3VyOworICAg
ICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsK
KyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBj
dXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOworCisJ
ICAgIHBhciBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MSkgPT0g
MCkgcnAxMiBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MikgPT0g
MCkgcnAxNCBePSB0bXBwYXI7CisgICAgfQorCitBcyB5b3UgY2FuIHNlZSB0
bXBwYXIgaXMgdXNlZCB0byBhY2N1bXVsYXRlIHRoZSBwYXJpdHkgd2l0aGlu
IGEgZm9yCitpdGVyYXRpb24uIEluIHRoZSBsYXN0IDMgc3RhdGVtZW50cyBp
cyBpcyBhZGRlZCB0byBwYXIgYW5kLCBpZiBuZWVkZWQsCit0byBycDEyIGFu
ZCBycDE0LgorCitXaGlsZSBtYWtpbmcgdGhlIGNoYW5nZXMgSSBhbHNvIGZv
dW5kIHRoYXQgSSBjb3VsZCBleHBsb2l0IHRoYXQgdG1wcGFyCitjb250YWlu
cyB0aGUgcnVubmluZyBwYXJpdHkgZm9yIHRoaXMgaXRlcmF0aW9uLiBTbyBp
bnN0ZWFkIG9mIGhhdmluZzoKK3JwNCBePSBjdXI7IHJwNiA9IGN1cjsKK0kg
cmVtb3ZlZCB0aGUgcnA2ID0gY3VyOyBzdGF0ZW1lbnQgYW5kIGRpZCBycDYg
Xj0gdG1wcGFyOyBvbiBuZXh0CitzdGF0ZW1lbnQuIEEgc2ltaWxhciBjaGFu
Z2Ugd2FzIGRvbmUgZm9yIHJwOCBhbmQgcnAxMAorCisKK0FuYWx5c2lzIDYK
Kz09PT09PT09PT0KKworTWVhc3VyaW5nIHRoaXMgY29kZSBhZ2FpbiBzaG93
ZWQgYmlnIGdhaW4uIFdoZW4gZXhlY3V0aW5nIHRoZSBvcmlnaW5hbAorbGlu
dXggY29kZSAxIG1pbGxpb24gdGltZXMsIHRoaXMgdG9vayBhYm91dCAxIHNl
Y29uZCBvbiBteSBzeXN0ZW0uCisodXNpbmcgdGltZSB0byBtZWFzdXJlIHRo
ZSBwZXJmb3JtYW5jZSkuIEFmdGVyIHRoaXMgaXRlcmF0aW9uIEkgd2FzIGJh
Y2sKK3RvIDAuMDc1IHNlYy4gQWN0dWFsbHkgSSBoYWQgdG8gZGVjaWRlIHRv
IHN0YXJ0IG1lYXN1cmluZyBvdmVyIDEwCittaWxsaW9uIGludGVyYXRpb25z
IGluIG9yZGVyIG5vdCB0byBsb29zZSB0b28gbXVjaCBhY2N1cmFjeS4gVGhp
cyBvbmUKK2RlZmluaXRlbHkgc2VlbWVkIHRvIGJlIHRoZSBqYWNrcG90IQor
CitUaGVyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSByb29tIGZvciBpbXByb3Zl
bWVudCB0aG91Z2guIFRoZXJlIGFyZSB0aHJlZQorcGxhY2VzIHdpdGggc3Rh
dGVtZW50czoKK3JwNCBePSBjdXI7IHJwNiBePSBjdXI7CitJdCBzZWVtcyBt
b3JlIGVmZmljaWVudCB0byBhbHNvIG1haW50YWluIGEgdmFyaWFibGUgcnA0
XzYgaW4gdGhlIHdoaWxlCitsb29wOyBUaGlzIGVsaW1pbmF0ZXMgMyBzdGF0
ZW1lbnRzIHBlciBsb29wLiBPZiBjb3Vyc2UgYWZ0ZXIgdGhlIGxvb3Agd2UK
K25lZWQgdG8gY29ycmVjdCBieSBhZGRpbmc6CisgICAgcnA0IF49IHJwNF82
OworICAgIHJwNiBePSBycDRfNgorRnVydGhlcm1vcmUgdGhlcmUgYXJlIDQg
c2VxdWVudGlhbCBhc3NpbmdtZW50cyB0byBycDguIFRoaXMgY2FuIGJlCitl
bmNvZGVkIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50IGJ5IHNhdmluZyB0bXBw
YXIgYmVmb3JlIHRob3NlIDQgbGluZXMKK2FuZCBsYXRlciBkbyBycDggPSBy
cDggXiB0bXBwYXIgXiBub3RycDg7Cisod2hlcmUgbm90cnA4IGlzIHRoZSB2
YWx1ZSBvZiBycDggYmVmb3JlIHRob3NlIDQgbGluZXMpLgorQWdhaW4gYSB1
c2Ugb2YgdGhlIGNvbW11dGF0aXZlIHByb3BlcnR5IG9mIHhvci4KK1RpbWUg
Zm9yIGEgbmV3IHRlc3QhCisKKworQXR0ZW1wdCA3Cis9PT09PT09PT0KKwor
VGhlIG5ldyBjb2RlIG5vdyBsb29rcyBsaWtlOgorCisgICAgZm9yIChpID0g
MDsgaSA8IDQ7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOyB0
bXBwYXIgID0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnAr
KzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IHRtcHBhcjsKKyAgICAgICAgY3Vy
ID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAg
IGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDggXj0gdG1wcGFyOwor
CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDRfNiBe
PSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBy
cDYgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsg
cnA0IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7
IHJwMTAgXj0gdG1wcGFyOworCisJICAgIG5vdHJwOCA9IHRtcHBhcjsKKwkg
ICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNF82IF49IGN1cjsK
KyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBj
dXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0g
Y3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsKKwkg
ICAgcnA4ID0gcnA4IF4gdG1wcGFyIF4gbm90cnA4OworCisgICAgICAgIGN1
ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDRfNiBePSBjdXI7CisgICAg
ICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOwor
ICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1
cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7CisKKwkg
ICAgcGFyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgxKSA9PSAw
KSBycDEyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgyKSA9PSAw
KSBycDE0IF49IHRtcHBhcjsKKyAgICB9CisgICAgcnA0IF49IHJwNF82Owor
ICAgIHJwNiBePSBycDRfNjsKKworCitOb3QgYSBiaWcgY2hhbmdlLCBidXQg
ZXZlcnkgcGVubnkgY291bnRzIDotKQorCisKK0FuYWx5c2lzIDcKKz09PT09
PT09PT0KKworQWN1dGFsbHkgdGhpcyBtYWRlIHRoaW5ncyB3b3JzZS4gTm90
IHZlcnkgbXVjaCwgYnV0IEkgZG9uJ3Qgd2FudCB0byBtb3ZlCitpbnRvIHRo
ZSB3cm9uZyBkaXJlY3Rpb24uIE1heWJlIHNvbWV0aGluZyB0byBpbnZlc3Rp
Z2F0ZSBsYXRlci4gQ291bGQKK2hhdmUgdG8gZG8gd2l0aCBjYWNoaW5nIGFn
YWluLgorCitHdWVzcyB0aGF0IGlzIHdoYXQgdGhlcmUgaXMgdG8gd2luIHdp
dGhpbiB0aGUgbG9vcC4gTWF5YmUgdW5yb2xsaW5nIG9uZQorbW9yZSB0aW1l
IHdpbGwgaGVscC4gSSdsbCBrZWVwIHRoZSBvcHRpbWlzYXRpb25zIGZyb20g
NyBmb3Igbm93LgorCisKK0F0dGVtcHQgOAorPT09PT09PT09CisKK1Vucm9s
bGVkIHRoZSBsb29wIG9uZSBtb3JlIHRpbWUuCisKKworQW5hbHlzaXMgOAor
PT09PT09PT09PQorCitUaGlzIG1ha2VzIHRoaW5ncyB3b3JzZS4gTGV0J3Mg
c3RpY2sgd2l0aCBhdHRlbXB0IDYgYW5kIGNvbnRpbnVlIGZyb20gdGhlcmUu
CitBbHRob3VnaCBpdCBzZWVtcyB0aGF0IHRoZSBjb2RlIHdpdGhpbiB0aGUg
bG9vcCBjYW5ub3QgYmUgb3B0aW1pc2VkCitmdXJ0aGVyIHRoZXJlIGlzIHN0
aWxsIHJvb20gdG8gb3B0aW1pemUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGVj
YyBjb2Rlcy4KK1dlIGNhbiBzaW1wbHkgY2FsY3VhbGF0ZSB0aGUgdG90YWwg
cGFyaXR5LiBJZiB0aGlzIGlzIDAgdGhlbiBycDQgPSBycDUKK2V0Yy4gSWYg
dGhlIHBhcml0eSBpcyAxLCB0aGVuIHJwNCA9ICFycDU7CitCdXQgaWYgcnA0
ID0gcnA1IHdlIGRvIG5vdCBuZWVkIHJwNSBldGMuIFdlIGNhbiBqdXN0IHdy
aXRlIHRoZSBldmVuIGJpdHMKK2luIHRoZSByZXN1bHQgYnl0ZSBhbmQgdGhl
biBkbyBzb21ldGhpbmcgbGlrZQorICAgIGNvZGVbMF0gfD0gKGNvZGVbMF0g
PDwgMSk7CitMZXRzIHRlc3QgdGhpcy4KKworCitBdHRlbXB0IDkKKz09PT09
PT09PQorCitDaGFuZ2VkIHRoZSBjb2RlIGJ1dCBhZ2FpbiB0aGlzIHNsaWdo
dGx5IGRlZ3JhZGVzIHBlcmZvcm1hbmNlLiBUcmllZCBhbGwKK2tpbmQgb2Yg
b3RoZXIgdGhpbmdzLCBsaWtlIGhhdmluZyBkZWRpY2F0ZWQgcGFyaXR5IGFy
cmF5cyB0byBhdm9pZCB0aGUKK3NoaWZ0IGFmdGVyIHBhcml0eVtycDddIDw8
IDc7IE5vIGdhaW4uCitDaGFuZ2UgdGhlIGxvb2t1cCB1c2luZyB0aGUgcGFy
aXR5IGFycmF5IGJ5IHVzaW5nIHNoaWZ0IG9wZXJhdG9ycyAoZS5nLgorcmVw
bGFjZSBwYXJpdHlbcnA3XSA8PCA3IHdpdGg6CitycDcgXj0gKHJwNyA8PCA0
KTsKK3JwNyBePSAocnA3IDw8IDIpOworcnA3IF49IChycDcgPDwgMSk7City
cDcgJj0gMHg4MDsKK05vIGdhaW4uCisKK1RoZSBvbmx5IG1hcmdpbmFsIGNo
YW5nZSB3YXMgaW52ZXJ0aW5nIHRoZSBwYXJpdHkgYml0cywgc28gd2UgY2Fu
IHJlbW92ZQordGhlIGxhc3QgdGhyZWUgaW52ZXJ0IHN0YXRlbWVudHMuCisK
K0FoIHdlbGwsIHBpdHkgdGhpcyBkb2VzIG5vdCBkZWxpdmVyIG1vcmUuIFRo
ZW4gYWdhaW4gMTAgbWlsbGlvbgoraXRlcmF0aW9ucyB1c2luZyB0aGUgbGlu
dXggZHJpdmVyIGNvZGUgdGFrZXMgYmV0d2VlbiAxMyBhbmQgMTMuNQorc2Vj
b25kcywgd2hlcmVhcyBteSBjb2RlIG5vdyB0YWtlcyBhYm91dCAwLjczIHNl
Y29uZHMgZm9yIHRob3NlIDEwCittaWxsaW9uIGl0ZXJhdGlvbnMuIFNvIGJh
c2ljYWxseSBJJ3ZlIGltcHJvdmVkIHRoZSBwZXJmb3JtYW5jZSBieSBhCitm
YWN0b3IgMTggb24gbXkgc3lzdGVtLiBOb3QgdGhhdCBiYWQuIE9mIGNvdXJz
ZSBvbiBkaWZmZXJlbnQgaGFyZHdhcmUKK3lvdSB3aWxsIGdldCBkaWZmZXJl
bnQgcmVzdWx0cy4gTm8gd2FycmFudGllcyEKKworQnV0IG9mIGNvdXJzZSB0
aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGEgZnJlZSBsdW5jaC4gVGhlIGNv
ZGVzaXplIGFsbW9zdAordHJpcGxlZCAoZnJvbSA1NjIgYnl0ZXMgdG8gMTQz
NCBieXRlcykuIFRoZW4gYWdhaW4sIGl0IGlzIG5vdCB0aGF0IG11Y2guCisK
KworQ29ycmVjdGluZyBlcnJvcnMKKz09PT09PT09PT09PT09PT09CisKK0Zv
ciBjb3JyZWN0aW5nIGVycm9ycyBJIGFnYWluIHVzZWQgdGhlIFNUIGFwcGxp
Y2F0aW9uIG5vdGUgYXMgYSBzdGFydGVyLAorYnV0IEkgYWxzbyBwZWVrZWQg
YXQgdGhlIGV4aXN0aW5nIGNvZGUuCitUaGUgYWxnb3JpdGhtIGl0c2VsZiBp
cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBKdXN0IHhvciB0aGUgZ2l2ZW4g
YW5kCit0aGUgY2FsY3VsYXRlZCBlY2MuIElmIGFsbCBieXRlcyBhcmUgMCB0
aGVyZSBpcyBubyBwcm9ibGVtLiBJZiAxMSBiaXRzCithcmUgMSB3ZSBoYXZl
IG9uZSBjb3JyZWN0YWJsZSBiaXQgZXJyb3IuIElmIHRoZXJlIGlzIDEgYml0
IDEsIHdlIGhhdmUgYW4KK2Vycm9yIGluIHRoZSBnaXZlbiBlY2MgY29kZS4g
CitJdCBwcm92ZWQgdG8gYmUgZmFzdGVzdCB0byBkbyBzb21lIHRhYmxlIGxv
b2t1cHMuIFBlcmZvcm1hbmNlIGdhaW4KK2ludHJvZHVjZWQgYnkgdGhpcyBp
cyBhYm91dCBhIGZhY3RvciAyIG9uIG15IHN5c3RlbSB3aGVuIGEgcmVwYWly
IGhhZCB0bworYmUgZG9uZSwgYW5kIDElIG9yIHNvIGlmIG5vIHJlcGFpciBo
YWQgdG8gYmUgZG9uZS4KK0NvZGUgc2l6ZSBpbmNyZWFzZWQgZnJvbSAzMzAg
Ynl0ZXMgdG8gNjg2IGJ5dGVzIGZvciB0aGlzIGZ1bmN0aW9uLgorKGdjYyA0
LjIsIC1PMykKKworCitDb25jbHVzaW9uCis9PT09PT09PT09CisKK1RoZSBn
YWluIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGVjYyBpcyB0cmVtZW5kb3VzLiBP
bSBteSBkZXZlbG9wbWVudCBoYXJkd2FyZSAKK2Egc3BlZWR1cCBvZiBhIGZh
Y3RvciBvZiAxOCBmb3IgZWNjIGNhbGN1bGF0aW9uIHdhcyBhY2hpZXZlZC4g
T24gYSB0ZXN0IG9uIGFuCitlbWJlZGRlZCBzeXN0ZW0gd2l0aCBhIE1JUFMg
Y29yZSBhIGZhY3RvciA3IHdhcyBvYnRhaW5lZC4KK09uICBhIHRlc3Qgd2l0
aCBhIExpbmtzeXMgTlNMVTIgKEFSTXY1VEUgcHJvY2Vzc29yKSB0aGUgc3Bl
ZWR1cCB3YXMgYSBmYWN0b3IKKzUgKGJpZyBlbmRpYW4gbW9kZSwgZ2NjIDQu
MS4yLCAtTzMpCitGb3IgY29ycmVjdGlvbiBub3QgbXVjaCBnYWluIGNvdWxk
IGJlIG9idGFpbmVkIChhcyBiaXRmbGlwcyBhcmUgcmFyZSkuIFRoZW4KK2Fn
YWluIHRoZXJlIGFyZSBhbHNvIG11Y2ggbGVzcyBjeWNsZXMgc3BlbnQgdGhl
cmUuCisKK0l0IHNlZW1zIHRoZXJlIGlzIG5vdCBtdWNoIG1vcmUgZ2FpbiBw
b3NzaWJsZSBpbiB0aGlzLCBhdCBsZWFzdCB3aGVuCitwcm9ncmFtbWVkIGlu
IEMuIE9mIGNvdXJzZSBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBzcXVlZXpl
IHNvbWV0aGluZyBtb3JlCitvdXQgb2YgaXQgd2l0aCBhbiBhc3NlbWJsZXIg
cHJvZ3JhbSwgYnV0IGR1ZSB0byBwaXBlbGluZSBiZWhhdmlvdXIgZXRjCit0
aGlzIGlzIHZlcnkgdHJpY2t5IChhdCBsZWFzdCBmb3IgaW50ZWwgaHcpLgor
CitBdXRob3I6IEZyYW5zIE1ldWxlbmJyb2VrcworQ29weXJpZ2h0IChDKSAy
MDA4IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuCmRpZmYg
LXVyTiBsaW51eC0yLjYuMjUuMTAvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Vj
Yy5jIGxpbnV4LTIuNi4yNS4xMC53b3JrL2RyaXZlcnMvbXRkL25hbmQvbmFu
ZF9lY2MuYwotLS0gbGludXgtMi42LjI1LjEwL2RyaXZlcnMvbXRkL25hbmQv
bmFuZF9lY2MuYwkyMDA4LTA3LTAzIDA1OjQ2OjQ3LjAwMDAwMDAwMCArMDIw
MAorKysgbGludXgtMi42LjI1LjEwLndvcmsvZHJpdmVycy9tdGQvbmFuZC9u
YW5kX2VjYy5jCTIwMDgtMDctMjkgMTk6MzM6MTkuMDAwMDAwMDAwICswMjAw
CkBAIC0xLDE1ICsxLDE4IEBACiAvKgotICogVGhpcyBmaWxlIGNvbnRhaW5z
IGFuIEVDQyBhbGdvcml0aG0gZnJvbSBUb3NoaWJhIHRoYXQgZGV0ZWN0cyBh
bmQKLSAqIGNvcnJlY3RzIDEgYml0IGVycm9ycyBpbiBhIDI1NiBieXRlIGJs
b2NrIG9mIGRhdGEuCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYW4gRUNDIGFs
Z29yaXRobSB0aGF0IGRldGVjdHMgYW5kIGNvcnJlY3RzIDEgYml0CisgKiBl
cnJvcnMgaW4gYSAyNTYgYnl0ZSBibG9jayBvZiBkYXRhLgogICoKICAqIGRy
aXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwogICoKLSAqIENvcHlyaWdodCAo
QykgMjAwMC0yMDA0IFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRp
bHV0ZWQuY29tKQotICogICAgICAgICAgICAgICAgICAgICAgICAgVG9zaGli
YSBBbWVyaWNhIEVsZWN0cm9uaWNzIENvbXBvbmVudHMsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBLb25pbmtsaWprZSBQaGlsaXBzIEVsZWN0cm9u
aWNzIE5WLgorICogICAgICAgICAgICAgICAgICAgIEF1dGhvcjogRnJhbnMg
TWV1bGVuYnJvZWtzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21h
cyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogQ29tcGxldGVs
eSByZXBsYWNlcyB0aGUgcHJldmlvdXMgRUNDIGltcGxlbWVudGF0aW9uIHdo
aWNoIHdhcyB3cml0dGVuIGJ5OgorICogICBTdGV2ZW4gSi4gSGlsbCAoc2po
aWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKKyAqICAgVGhvbWFzIEdsZWl4bmVy
ICh0Z2x4QGxpbnV0cm9uaXguZGUpCiAgKgotICogJElkOiBuYW5kX2VjYy5j
LHYgMS4xNSAyMDA1LzExLzA3IDExOjE0OjMwIGdsZWl4bmVyIEV4cCAkCisg
KiBJbmZvcm1hdGlvbiBvbiBob3cgdGhpcyBhbGdvcml0aG0gd29ya3MgYW5k
IGhvdyBpdCB3YXMgZGV2ZWxvcGVkCisgKiBjYW4gYmUgZm91bmQgaW4gRG9j
dW1lbnRhdGlvbi9uYW5kL2VjYy50eHQKICAqCiAgKiBUaGlzIGZpbGUgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0y
NSwxNzQgKzI4LDQxNiBAQAogICogd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwK
ICAqIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAy
MTExLTEzMDcgVVNBLgogICoKLSAqIEFzIGEgc3BlY2lhbCBleGNlcHRpb24s
IGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UK
LSAqIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhlc2UgZmls
ZXMsIG9yIHlvdSBjb21waWxlIHRoZXNlCi0gKiBmaWxlcyBhbmQgbGluayB0
aGVtIHdpdGggb3RoZXIgd29ya3MgdG8gcHJvZHVjZSBhIHdvcmsgYmFzZWQg
b24gdGhlc2UKLSAqIGZpbGVzLCB0aGVzZSBmaWxlcyBkbyBub3QgYnkgdGhl
bXNlbHZlcyBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUKLSAqIGNv
dmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBIb3dl
dmVyIHRoZSBzb3VyY2UgY29kZSBmb3IKLSAqIHRoZXNlIGZpbGVzIG11c3Qg
c3RpbGwgYmUgbWFkZSBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHNl
Y3Rpb24gKDMpCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UuCi0gKgotICogVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaW52YWxpZGF0
ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgYSB3b3JrIGJhc2VkIG9uCi0gKiB0
aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UuCiAgKi8KIAorLyoKKyAqIFRoZSBTVEFOREFMT05F
IG1hY3JvIGlzIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhlIGNvZGUgb3V0c2lk
ZSB0aGUga2VybmVsCisgKiBlLmcuIHdoZW4gcnVubmluZyB0aGUgY29kZSBp
biBhIHRlc3RiZWQgb3IgYSBiZW5jaG1hcmsgcHJvZ3JhbS4KKyAqIFdoZW4g
U1RBTkRBTE9ORSBpcyB1c2VkLCB0aGUgbW9kdWxlIHJlbGF0ZWQgbWFjcm9z
IGFyZSBjb21tZW50ZWQgb3V0CisgKiBhcyB3ZWxsIGFzIHRoZSBsaW51eCBp
bmNsdWRlIGZpbGVzLgorICogSW5zdGVhZCBhIHByaXZhdGUgZGVmaW5pdGlv
biBvZiBtdGRfaW50byBpcyBnaXZlbiB0byBzYXRpc2Z5IHRoZSBjb21waWxl
cgorICogKHRoZSBjb2RlIGRvZXMgbm90IHVzZSBtdGRfaW5mbywgc28gdGhl
IGNvZGUgZG9lcyBub3QgY2FyZSkKKyAqLworI2lmbmRlZiBTVEFOREFMT05F
CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9r
ZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRl
IDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNlbHNlCitzdHJ1Y3QgbXRkX2lu
Zm8geworCWludCBkdW1teTsKK307CisjZW5kaWYKIAogLyoKLSAqIFByZS1j
YWxjdWxhdGVkIDI1Ni13YXkgMSBieXRlIGNvbHVtbiBwYXJpdHkKKyAqIGlu
dnBhcml0eSBpcyBhIDI1NiBieXRlIHRhYmxlIHRoYXQgY29udGFpbnMgdGhl
IG9kZCBwYXJpdHkKKyAqIGZvciBlYWNoIGJ5dGUuIFNvIGlmIHRoZSBudW1i
ZXIgb2YgYml0cyBpbiBhIGJ5dGUgaXMgZXZlbiwKKyAqIHRoZSBhcnJheSBl
bGVtZW50IGlzIDEsIGFuZCB3aGVuIHRoZSBudW1iZXIgb2YgYml0cyBpcyBv
ZGQKKyAqIHRoZSBhcnJheSBlbGVlbW50IGlzIDAuCiAgKi8KLXN0YXRpYyBj
b25zdCB1X2NoYXIgbmFuZF9lY2NfcHJlY2FsY190YWJsZVtdID0gewotCTB4
MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEs
IDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4
MDAsCi0JMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzYywgMHg2OSwgMHg2
YSwgMHgzZiwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywg
MHgzMCwgMHg2NSwKLQkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAw
eDZhLCAweDY5LCAweDNjLCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1
LCAweDMwLCAweDMzLCAweDY2LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAs
IDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4
NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCi0JMHg2OSwgMHgzYywgMHgz
ZiwgMHg2YSwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHgzMywgMHg2Niwg
MHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKLQkweDBjLCAw
eDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDU2
LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAot
CTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4
NTUsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEs
IDB4MGYsCi0JMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwgMHgzMywgMHg2Niwg
MHg2NSwgMHgzMCwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgz
YywgMHgzZiwgMHg2YSwKLQkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMz
LCAweDY2LCAweDY1LCAweDMwLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAw
eDY5LCAweDNjLCAweDNmLCAweDZhLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4
MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDMs
IDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCi0JMHgwYywgMHg1OSwg
MHg1YSwgMHgwZiwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHg1NiwgMHgw
MywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKLQkweDY5
LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAw
eDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5
LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMs
IDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4
NTYsIDB4MDMsCi0JMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzZiwgMHg2
YSwgMHg2OSwgMHgzYywgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwg
MHgzMCwgMHgzMywgMHg2NiwKLQkweDY1LCAweDMwLCAweDMzLCAweDY2LCAw
eDNjLCAweDY5LCAweDZhLCAweDNmLCAweDNmLCAweDZhLCAweDY5LCAweDNj
LCAweDY2LCAweDMzLCAweDMwLCAweDY1LAotCTB4MDAsIDB4NTUsIDB4NTYs
IDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4NWEsIDB4MGYsIDB4
MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAKK3N0YXRpYyBjb25z
dCBjaGFyIGludnBhcml0eVsyNTZdID0geworCTEsIDAsIDAsIDEsIDAsIDEs
IDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwg
MSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAx
LCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEs
IDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEs
CisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwg
MSwgMCwKKwkxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAx
LCAwLCAwLCAxLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEs
IDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwg
MCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAx
LCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEs
IDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMSwgMCwgMCwgMSwg
MCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAx
LCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEs
IDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEs
CisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwg
MSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAw
LCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEs
IDAsIDEsIDAsIDAsIDEKK307CisKKy8qCisgKiBiaXRzcGVyYnl0ZSBjb250
YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUKKyAqIHRoaXMgaXMg
b25seSB1c2VkIGZvciB0ZXN0aW5nIGFuZCByZXBhaXJpbmcgcGFyaXR5Cisg
KiAoYSBwcmVjYWxjdWxhdGVkIHZhbHVlIHNsaWdodGx5IGltcHJvdmVzIHBl
cmZvcm1hbmNlKQorICovCitzdGF0aWMgY29uc3QgY2hhciBiaXRzcGVyYnl0
ZVsyNTZdID0geworCTAsIDEsIDEsIDIsIDEsIDIsIDIsIDMsIDEsIDIsIDIs
IDMsIDIsIDMsIDMsIDQsCisJMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwg
MywgMywgNCwgMywgNCwgNCwgNSwKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0
LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQs
IDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMSwgMiwgMiwgMywg
MiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkyLCAzLCAz
LCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorCTIs
IDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYs
CisJMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwg
NiwgNywKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAz
LCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQs
IDUsIDQsIDUsIDUsIDYsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywg
NCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2
LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTIsIDMsIDMsIDQsIDMsIDQs
IDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMywgNCwgNCwgNSwg
NCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKwkzLCA0LCA0
LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTQs
IDUsIDUsIDYsIDUsIDYsIDYsIDcsIDUsIDYsIDYsIDcsIDYsIDcsIDcsIDgs
Cit9OworCisvKgorICogYWRkcmVzc2JpdHMgaXMgYSBsb29rdXAgdGFibGUg
dG8gZmlsdGVyIG91dCB0aGUgYml0cyBmcm9tIHRoZSB4b3ItZWQKKyAqIGVj
YyBkYXRhIHRoYXQgaWRlbnRpZnkgdGhlIGZhdWx0eSBsb2NhdGlvbi4KKyAq
IHRoaXMgaXMgb25seSB1c2VkIGZvciByZXBhaXJpbmcgcGFyaXR5CisgKiBz
ZWUgdGhlIGNvbW1lbnRzIGluIG5hbmRfY29ycmVjdF9kYXRhIGZvciBtb3Jl
IGRldGFpbHMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgYWRkcmVzc2JpdHNb
MjU2XSA9IHsKKwkweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAw
LCAweDAxLCAweDAxLAorCTB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDIs
IDB4MDIsIDB4MDMsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwg
MHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAw
eDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDQsIDB4MDQsIDB4
MDUsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsCisJMHgwNiwgMHgw
NiwgMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywKKwkweDA0
LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAor
CTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4
MDcsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgw
MSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAy
LCAweDAzLCAweDAzLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAs
IDB4MDAsIDB4MDEsIDB4MDEsCisJMHgwMiwgMHgwMiwgMHgwMywgMHgwMywg
MHgwMiwgMHgwMiwgMHgwMywgMHgwMywKKwkweDA0LCAweDA0LCAweDA1LCAw
eDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4
MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwNCwgMHgw
NCwgMHgwNSwgMHgwNSwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwKKwkweDA2
LCAweDA2LCAweDA3LCAweDA3LCAweDA2LCAweDA2LCAweDA3LCAweDA3LAor
CTB4MDgsIDB4MDgsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDksIDB4
MDksCisJMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwgMHgwYSwgMHgwYSwgMHgw
YiwgMHgwYiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4
LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEs
IDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwYywgMHgwYywgMHgwZCwgMHgwZCwg
MHgwYywgMHgwYywgMHgwZCwgMHgwZCwKKwkweDBlLCAweDBlLCAweDBmLCAw
eDBmLCAweDBlLCAweDBlLCAweDBmLCAweDBmLAorCTB4MGMsIDB4MGMsIDB4
MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgw
ZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDA4
LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAor
CTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4
MGIsCisJMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgw
OSwgMHgwOSwKKwkweDBhLCAweDBhLCAweDBiLCAweDBiLCAweDBhLCAweDBh
LCAweDBiLCAweDBiLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMs
IDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwg
MHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDBjLCAweDBjLCAweDBkLCAw
eDBkLCAweDBjLCAweDBjLCAweDBkLCAweDBkLAorCTB4MGUsIDB4MGUsIDB4
MGYsIDB4MGYsIDB4MGUsIDB4MGUsIDB4MGYsIDB4MGYKIH07CiAKIC8qKgog
ICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxj
dWxhdGUgMy1ieXRlIEVDQyBmb3IgMjU2LWJ5dGUgYmxvY2sKLSAqIEBtdGQ6
CU1URCBibG9jayBzdHJ1Y3R1cmUKKyAqIEBtdGQ6CU1URCBibG9jayBzdHJ1
Y3R1cmUgKHVudXNlZCkKICAqIEBkYXQ6CXJhdyBkYXRhCiAgKiBAZWNjX2Nv
ZGU6CWJ1ZmZlciBmb3IgRUNDCiAgKi8KLWludCBuYW5kX2NhbGN1bGF0ZV9l
Y2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LAot
CQkgICAgICAgdV9jaGFyICplY2NfY29kZSkKK2ludCBuYW5kX2NhbGN1bGF0
ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKmJ1ZiwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmNvZGUpCiB7Ci0J
dWludDhfdCBpZHgsIHJlZzEsIHJlZzIsIHJlZzMsIHRtcDEsIHRtcDI7CiAJ
aW50IGk7Ci0KLQkvKiBJbml0aWFsaXplIHZhcmlhYmxlcyAqLwotCXJlZzEg
PSByZWcyID0gcmVnMyA9IDA7Ci0KLQkvKiBCdWlsZCB1cCBjb2x1bW4gcGFy
aXR5ICovCi0JZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJLyogR2V0
IENQMCAtIENQNSBmcm9tIHRhYmxlICovCi0JCWlkeCA9IG5hbmRfZWNjX3By
ZWNhbGNfdGFibGVbKmRhdCsrXTsKLQkJcmVnMSBePSAoaWR4ICYgMHgzZik7
Ci0KLQkJLyogQWxsIGJpdCBYT1IgPSAxID8gKi8KLQkJaWYgKGlkeCAmIDB4
NDApIHsKLQkJCXJlZzMgXj0gKHVpbnQ4X3QpIGk7Ci0JCQlyZWcyIF49IH4o
KHVpbnQ4X3QpIGkpOwotCQl9CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYnAg
PSAodW5zaWduZWQgbG9uZyAqKWJ1ZjsKKwl1bnNpZ25lZCBsb25nIGN1cjsJ
LyogY3VycmVudCB2YWx1ZSBpbiBidWZmZXIgKi8KKwkvKiBycDAuLnJwMTUg
YXJlIHRoZSB2YXJpb3VzIGFjY3VtdWxhdGVkIHBhcml0aWVzIChwZXIgYnl0
ZSkgKi8KKwl1bnNpZ25lZCBsb25nIHJwMCwgcnAxLCBycDIsIHJwMywgcnA0
LCBycDUsIHJwNiwgcnA3OworCXVuc2lnbmVkIGxvbmcgcnA4LCBycDksIHJw
MTAsIHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTU7CisJdW5zaWduZWQg
bG9uZyBwYXI7CS8qIHRoZSBjdW11bGF0aXZlIHBhcml0eSBmb3IgYWxsIGRh
dGEgKi8KKwl1bnNpZ25lZCBsb25nIHRtcHBhcjsJLyogdGhlIGN1bXVsYXRp
dmUgcGFyaXR5IGZvciB0aGlzIGl0ZXJhdGlvbjsKKwkJCQkgICBmb3IgcnAx
MiBhbmQgcnAxNCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wICovCisKKwlwYXIg
PSAwOworCXJwNCA9IDA7CisJcnA2ID0gMDsKKwlycDggPSAwOworCXJwMTAg
PSAwOworCXJwMTIgPSAwOworCXJwMTQgPSAwOworCisJLyoKKwkgKiBUaGUg
bG9vcCBpcyB1bnJvbGxlZCBhIG51bWJlciBvZiB0aW1lczsKKwkgKiBUaGlz
IGF2b2lkcyBpZiBzdGF0ZW1lbnRzIHRvIGRlY2lkZSBvbiB3aGljaCBycCB2
YWx1ZSB0byB1cGRhdGUKKwkgKiBBbHNvIHdlIHByb2Nlc3MgdGhlIGRhdGEg
YnkgbG9uZ3dvcmRzLgorCSAqIE5vdGU6IHBhc3NpbmcgdW5hbGlnbmVkIGRh
dGEgbWlnaHQgZ2l2ZSBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisJICogSXQg
aXMgYXNzdW1lZCB0aGF0IHRoZSBidWZmZXJzIGFyZSBhbGlnbmVkLgorCSAq
IHRtcHBhciBpcyB0aGUgY3VtdWxhdGl2ZSBzdW0gb2YgdGhpcyBpdGVyYXRp
b24uCisJICogbmVlZGVkIGZvciBjYWxjdWxhdGluZyBycDEyLCBycDE0IGFu
ZCBwYXIKKwkgKiBhbHNvIHVzZWQgYXMgYSBwZXJmb3JtYW5jZSBpbXByb3Zl
bWVudCBmb3IgcnA2LCBycDggYW5kIHJwMTAKKwkgKi8KKwlmb3IgKGkgPSAw
OyBpIDwgNDsgaSsrKSB7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgPSBj
dXI7CisJCXJwNCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIg
Xj0gY3VyOworCQlycDYgXj0gdG1wcGFyOworCQljdXIgPSAqYnArKzsKKwkJ
dG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7
CisJCXRtcHBhciBePSBjdXI7CisJCXJwOCBePSB0bXBwYXI7CisKKwkJY3Vy
ID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJ
CXJwNiBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3Vy
OworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49
IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBh
ciBePSBjdXI7CisJCXJwMTAgXj0gdG1wcGFyOworCisJCWN1ciA9ICpicCsr
OworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0g
Y3VyOworCQlycDggXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFy
IF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJcnA4IF49IGN1cjsKKwkJY3Vy
ID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJ
CXJwOCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3Vy
OworCQlycDggXj0gY3VyOworCisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIg
Xj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIg
PSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJ
Y3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7
CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCisJCXBhciBe
PSB0bXBwYXI7CisJCWlmICgoaSAmIDB4MSkgPT0gMCkKKwkJCXJwMTIgXj0g
dG1wcGFyOworCQlpZiAoKGkgJiAweDIpID09IDApCisJCQlycDE0IF49IHRt
cHBhcjsKIAl9CiAKLQkvKiBDcmVhdGUgbm9uLWludmVydGVkIEVDQyBjb2Rl
IGZyb20gbGluZSBwYXJpdHkgKi8KLQl0bXAxICA9IChyZWczICYgMHg4MCkg
Pj4gMDsgLyogQjcgLT4gQjcgKi8KLQl0bXAxIHw9IChyZWcyICYgMHg4MCkg
Pj4gMTsgLyogQjcgLT4gQjYgKi8KLQl0bXAxIHw9IChyZWczICYgMHg0MCkg
Pj4gMTsgLyogQjYgLT4gQjUgKi8KLQl0bXAxIHw9IChyZWcyICYgMHg0MCkg
Pj4gMjsgLyogQjYgLT4gQjQgKi8KLQl0bXAxIHw9IChyZWczICYgMHgyMCkg
Pj4gMjsgLyogQjUgLT4gQjMgKi8KLQl0bXAxIHw9IChyZWcyICYgMHgyMCkg
Pj4gMzsgLyogQjUgLT4gQjIgKi8KLQl0bXAxIHw9IChyZWczICYgMHgxMCkg
Pj4gMzsgLyogQjQgLT4gQjEgKi8KLQl0bXAxIHw9IChyZWcyICYgMHgxMCkg
Pj4gNDsgLyogQjQgLT4gQjAgKi8KLQotCXRtcDIgID0gKHJlZzMgJiAweDA4
KSA8PCA0OyAvKiBCMyAtPiBCNyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA4
KSA8PCAzOyAvKiBCMyAtPiBCNiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDA0
KSA8PCAzOyAvKiBCMiAtPiBCNSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA0
KSA8PCAyOyAvKiBCMiAtPiBCNCAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAy
KSA8PCAyOyAvKiBCMSAtPiBCMyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAy
KSA8PCAxOyAvKiBCMSAtPiBCMiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAx
KSA8PCAxOyAvKiBCMCAtPiBCMSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAx
KSA8PCAwOyAvKiBCNyAtPiBCMCAqLwotCi0JLyogQ2FsY3VsYXRlIGZpbmFs
IEVDQyBjb2RlICovCisJLyoKKwkgKiBoYW5kbGUgdGhlIGZhY3QgdGhhdCB3
ZSB1c2UgbG9uZ3dvcmQgb3BlcmF0aW9ucworCSAqIHdlJ2xsIGJyaW5nIHJw
NC4ucnAxNCBiYWNrIHRvIHNpbmdsZSBieXRlIGVudGl0aWVzIGJ5IHNoaWZ0
aW5nIGFuZAorCSAqIHhvcmluZyBmaXJzdCBmb2xkIHRoZSB1cHBlciBhbmQg
bG93ZXIgMTYgYml0cywKKwkgKiB0aGVuIHRoZSB1cHBlciBhbmQgbG93ZXIg
OCBiaXRzLgorCSAqLworCXJwNCBePSAocnA0ID4+IDE2KTsKKwlycDQgXj0g
KHJwNCA+PiA4KTsKKwlycDQgJj0gMHhmZjsKKwlycDYgXj0gKHJwNiA+PiAx
Nik7CisJcnA2IF49IChycDYgPj4gOCk7CisJcnA2ICY9IDB4ZmY7CisJcnA4
IF49IChycDggPj4gMTYpOworCXJwOCBePSAocnA4ID4+IDgpOworCXJwOCAm
PSAweGZmOworCXJwMTAgXj0gKHJwMTAgPj4gMTYpOworCXJwMTAgXj0gKHJw
MTAgPj4gOCk7CisJcnAxMCAmPSAweGZmOworCXJwMTIgXj0gKHJwMTIgPj4g
MTYpOworCXJwMTIgXj0gKHJwMTIgPj4gOCk7CisJcnAxMiAmPSAweGZmOwor
CXJwMTQgXj0gKHJwMTQgPj4gMTYpOworCXJwMTQgXj0gKHJwMTQgPj4gOCk7
CisJcnAxNCAmPSAweGZmOworCisJLyoKKwkgKiB3ZSBhbHNvIG5lZWQgdG8g
Y2FsY3VsYXRlIHRoZSByb3cgcGFyaXR5IGZvciBycDAuLnJwMworCSAqIFRo
aXMgaXMgcHJlc2VudCBpbiBwYXIsIGJlY2F1c2UgcGFyIGlzIG5vdworCSAq
IHJwMyBycDMgcnAyIHJwMgorCSAqIGFzIHdlbGwgYXMKKwkgKiBycDEgcnAw
IHJwMSBycDAKKwkgKiBGaXJzdCBjYWxjdWxhdGUgcnAyIGFuZCBycDMKKwkg
KiAoYW5kIHllczogcnAyID0gKHBhciBeIHJwMykgJiAweGZmOyBidXQgZG9p
bmcgdGhhdCBkaWQgbm90CisJICogZ2l2ZSBhIHBlcmZvcm1hbmNlIGltcHJv
dmVtZW50KQorCSAqLworCXJwMyA9IChwYXIgPj4gMTYpOworCXJwMyBePSAo
cnAzID4+IDgpOworCXJwMyAmPSAweGZmOworCXJwMiA9IHBhciAmIDB4ZmZm
ZjsKKwlycDIgXj0gKHJwMiA+PiA4KTsKKwlycDIgJj0gMHhmZjsKKworCS8q
IHJlZHVjZSBwYXIgdG8gMTYgYml0cyB0aGVuIGNhbGN1bGF0ZSBycDEgYW5k
IHJwMCAqLworCXBhciBePSAocGFyID4+IDE2KTsKKwlycDEgPSAocGFyID4+
IDgpICYgMHhmZjsKKwlycDAgPSAocGFyICYgMHhmZik7CisKKwkvKiBmaW5h
bGx5IHJlZHVjZSBwYXIgdG8gOCBiaXRzICovCisJcGFyIF49IChwYXIgPj4g
OCk7CisJcGFyICY9IDB4ZmY7CisKKwkvKgorCSAqIGFuZCBjYWxjdWxhdGUg
cnA1Li5ycDE1CisJICogbm90ZSB0aGF0IHBhciA9IHJwNCBeIHJwNSBhbmQg
ZHVlIHRvIHRoZSBjb21tdXRhdGl2ZSBwcm9wZXJ0eQorCSAqIG9mIHRoZSBe
IG9wZXJhdG9yIHdlIGNhbiBzYXk6CisJICogcnA1ID0gKHBhciBeIHJwNCk7
CisJICogVGhlICYgMHhmZiBzZWVtcyBzdXBlcmZsdW91cywgYnV0IGJlbmNo
bWFya2luZyBsZWFybmVkIHRoYXQKKwkgKiBsZWF2aW5nIGl0IG91dCBnaXZl
cyBzbGlnaHRseSB3b3JzZSByZXN1bHRzLiBObyBpZGVhIHdoeSwgcHJvYmFi
bHkKKwkgKiBpdCBoYXMgdG8gZG8gd2l0aCB0aGUgd2F5IHRoZSBwaXBlbGlu
ZSBpbiBwZW50aXVtIGlzIG9yZ2FuaXplZC4KKwkgKi8KKwlycDUgPSAocGFy
IF4gcnA0KSAmIDB4ZmY7CisJcnA3ID0gKHBhciBeIHJwNikgJiAweGZmOwor
CXJwOSA9IChwYXIgXiBycDgpICYgMHhmZjsKKwlycDExID0gKHBhciBeIHJw
MTApICYgMHhmZjsKKwlycDEzID0gKHBhciBeIHJwMTIpICYgMHhmZjsKKwly
cDE1ID0gKHBhciBeIHJwMTQpICYgMHhmZjsKKworCS8qCisJICogRmluYWxs
eSBjYWxjdWxhdGUgdGhlIGVjYyBiaXRzLgorCSAqIEFnYWluIGhlcmUgaXQg
bWlnaHQgc2VlbSB0aGF0IHRoZXJlIGFyZSBwZXJmb3JtYW5jZSBvcHRpbWlz
YXRpb25zCisJICogcG9zc2libGUsIGJ1dCBiZW5jaG1hcmtzIHNob3dlZCB0
aGF0IG9uIHRoZSBzeXN0ZW0gdGhpcyBpcyBkZXZlbG9wZWQKKwkgKiB0aGUg
Y29kZSBiZWxvdyBpcyB0aGUgZmFzdGVzdAorCSAqLwogI2lmZGVmIENPTkZJ
R19NVERfTkFORF9FQ0NfU01DCi0JZWNjX2NvZGVbMF0gPSB+dG1wMjsKLQll
Y2NfY29kZVsxXSA9IH50bXAxOworCWNvZGVbMF0gPQorCSAgICAoaW52cGFy
aXR5W3JwN10gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwNl0gPDwgNikg
fAorCSAgICAoaW52cGFyaXR5W3JwNV0gPDwgNSkgfAorCSAgICAoaW52cGFy
aXR5W3JwNF0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwM10gPDwgMykg
fAorCSAgICAoaW52cGFyaXR5W3JwMl0gPDwgMikgfAorCSAgICAoaW52cGFy
aXR5W3JwMV0gPDwgMSkgfAorCSAgICAoaW52cGFyaXR5W3JwMF0pOworCWNv
ZGVbMV0gPQorCSAgICAoaW52cGFyaXR5W3JwMTVdIDw8IDcpIHwKKwkgICAg
KGludnBhcml0eVtycDE0XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnAx
M10gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwMTJdIDw8IDQpIHwKKwkg
ICAgKGludnBhcml0eVtycDExXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlb
cnAxMF0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3JwOV0gPDwgMSkgIHwK
KwkgICAgKGludnBhcml0eVtycDhdKTsKICNlbHNlCi0JZWNjX2NvZGVbMF0g
PSB+dG1wMTsKLQllY2NfY29kZVsxXSA9IH50bXAyOworCWNvZGVbMV0gPQor
CSAgICAoaW52cGFyaXR5W3JwN10gPDwgNykgfAorCSAgICAoaW52cGFyaXR5
W3JwNl0gPDwgNikgfAorCSAgICAoaW52cGFyaXR5W3JwNV0gPDwgNSkgfAor
CSAgICAoaW52cGFyaXR5W3JwNF0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5
W3JwM10gPDwgMykgfAorCSAgICAoaW52cGFyaXR5W3JwMl0gPDwgMikgfAor
CSAgICAoaW52cGFyaXR5W3JwMV0gPDwgMSkgfAorCSAgICAoaW52cGFyaXR5
W3JwMF0pOworCWNvZGVbMF0gPQorCSAgICAoaW52cGFyaXR5W3JwMTVdIDw8
IDcpIHwKKwkgICAgKGludnBhcml0eVtycDE0XSA8PCA2KSB8CisJICAgIChp
bnZwYXJpdHlbcnAxM10gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwMTJd
IDw8IDQpIHwKKwkgICAgKGludnBhcml0eVtycDExXSA8PCAzKSB8CisJICAg
IChpbnZwYXJpdHlbcnAxMF0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3Jw
OV0gPDwgMSkgIHwKKwkgICAgKGludnBhcml0eVtycDhdKTsKICNlbmRpZgot
CWVjY19jb2RlWzJdID0gKCh+cmVnMSkgPDwgMikgfCAweDAzOwotCi0JcmV0
dXJuIDA7CisJY29kZVsyXSA9CisJICAgIChpbnZwYXJpdHlbcGFyICYgMHhm
MF0gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3BhciAmIDB4MGZdIDw8IDYp
IHwKKwkgICAgKGludnBhcml0eVtwYXIgJiAweGNjXSA8PCA1KSB8CisJICAg
IChpbnZwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorCSAgICAoaW52cGFy
aXR5W3BhciAmIDB4YWFdIDw8IDMpIHwKKwkgICAgKGludnBhcml0eVtwYXIg
JiAweDU1XSA8PCAyKSB8CisJICAgIDM7CiB9Ci1FWFBPUlRfU1lNQk9MKG5h
bmRfY2FsY3VsYXRlX2VjYyk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNvdW50
Yml0cyh1aW50MzJfdCBieXRlKQotewotCWludCByZXMgPSAwOwogCi0JZm9y
ICg7Ynl0ZTsgYnl0ZSA+Pj0gMSkKLQkJcmVzICs9IGJ5dGUgJiAweDAxOwot
CXJldHVybiByZXM7Ci19CisjaWZuZGVmIFNUQU5EQUxPTkUKK0VYUE9SVF9T
WU1CT0wobmFuZF9jYWxjdWxhdGVfZWNjKTsKKyNlbmRpZgogCiAvKioKICAq
IG5hbmRfY29ycmVjdF9kYXRhIC0gW05BTkQgSW50ZXJmYWNlXSBEZXRlY3Qg
YW5kIGNvcnJlY3QgYml0IGVycm9yKHMpCi0gKiBAbXRkOglNVEQgYmxvY2sg
c3RydWN0dXJlCisgKiBAbXRkOglNVEQgYmxvY2sgc3RydWN0dXJlICh1bnVz
ZWQpCiAgKiBAZGF0OglyYXcgZGF0YSByZWFkIGZyb20gdGhlIGNoaXAKICAq
IEByZWFkX2VjYzoJRUNDIGZyb20gdGhlIGNoaXAKICAqIEBjYWxjX2VjYzoJ
dGhlIEVDQyBjYWxjdWxhdGVkIGZyb20gcmF3IGRhdGEKICAqCiAgKiBEZXRl
Y3QgYW5kIGNvcnJlY3QgYSAxIGJpdCBlcnJvciBmb3IgMjU2IGJ5dGUgYmxv
Y2sKICAqLwotaW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5m
byAqbXRkLCB1X2NoYXIgKmRhdCwKLQkJICAgICAgdV9jaGFyICpyZWFkX2Vj
YywgdV9jaGFyICpjYWxjX2VjYykKK2ludCBuYW5kX2NvcnJlY3RfZGF0YShz
dHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkg
ICAgICB1bnNpZ25lZCBjaGFyICpyZWFkX2VjYywgdW5zaWduZWQgY2hhciAq
Y2FsY19lY2MpCiB7Ci0JdWludDhfdCBzMCwgczEsIHMyOwotCisJaW50IG5y
X2JpdHM7CisJdW5zaWduZWQgY2hhciBiMCwgYjEsIGIyOworCXVuc2lnbmVk
IGNoYXIgYnl0ZV9hZGRyLCBiaXRfYWRkcjsKKworCS8qCisJICogYjAgdG8g
YjIgaW5kaWNhdGUgd2hpY2ggYml0IGlzIGZhdWx0eSAoaWYgYW55KQorCSAq
IHdlIG1pZ2h0IG5lZWQgdGhlIHhvciByZXN1bHQgIG1vcmUgdGhhbiBvbmNl
LAorCSAqIHNvIGtlZXAgdGhlbSBpbiBhIGxvY2FsIHZhcgorCSovCiAjaWZk
ZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKLQlzMCA9IGNhbGNfZWNjWzBd
IF4gcmVhZF9lY2NbMF07Ci0JczEgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNj
WzFdOwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9
IHJlYWRfZWNjWzBdIF4gY2FsY19lY2NbMF07CisJYjEgPSByZWFkX2VjY1sx
XSBeIGNhbGNfZWNjWzFdOwogI2Vsc2UKLQlzMSA9IGNhbGNfZWNjWzBdIF4g
cmVhZF9lY2NbMF07Ci0JczAgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFd
OwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9IHJl
YWRfZWNjWzFdIF4gY2FsY19lY2NbMV07CisJYjEgPSByZWFkX2VjY1swXSBe
IGNhbGNfZWNjWzBdOwogI2VuZGlmCi0JaWYgKChzMCB8IHMxIHwgczIpID09
IDApCi0JCXJldHVybiAwOworCWIyID0gcmVhZF9lY2NbMl0gXiBjYWxjX2Vj
Y1syXTsKIAotCS8qIENoZWNrIGZvciBhIHNpbmdsZSBiaXQgZXJyb3IgKi8K
LQlpZiggKChzMCBeIChzMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCi0J
ICAgICgoczEgXiAoczEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgotCSAg
ICAoKHMyIF4gKHMyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHsKKwkvKiBj
aGVjayBpZiB0aGVyZSBhcmUgYW55IGJpdGZhdWx0cyAqLwogCi0JCXVpbnQz
Ml90IGJ5dGVvZmZzLCBiaXRudW07CisJLyogY291bnQgbnIgb2YgYml0czsg
dXNlIHRhYmxlIGxvb2t1cCwgZmFzdGVyIHRoYW4gY2FsY3VsYXRpbmcgaXQg
Ki8KKwlucl9iaXRzID0gYml0c3BlcmJ5dGVbYjBdICsgYml0c3BlcmJ5dGVb
YjFdICsgYml0c3BlcmJ5dGVbYjJdOwogCi0JCWJ5dGVvZmZzID0gKHMxIDw8
IDApICYgMHg4MDsKLQkJYnl0ZW9mZnMgfD0gKHMxIDw8IDEpICYgMHg0MDsK
LQkJYnl0ZW9mZnMgfD0gKHMxIDw8IDIpICYgMHgyMDsKLQkJYnl0ZW9mZnMg
fD0gKHMxIDw8IDMpICYgMHgxMDsKLQotCQlieXRlb2ZmcyB8PSAoczAgPj4g
NCkgJiAweDA4OwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMykgJiAweDA0Owot
CQlieXRlb2ZmcyB8PSAoczAgPj4gMikgJiAweDAyOwotCQlieXRlb2ZmcyB8
PSAoczAgPj4gMSkgJiAweDAxOwotCi0JCWJpdG51bSA9IChzMiA+PiA1KSAm
IDB4MDQ7Ci0JCWJpdG51bSB8PSAoczIgPj4gNCkgJiAweDAyOwotCQliaXRu
dW0gfD0gKHMyID4+IDMpICYgMHgwMTsKLQotCQlkYXRbYnl0ZW9mZnNdIF49
ICgxIDw8IGJpdG51bSk7Ci0KLQkJcmV0dXJuIDE7CisJLyogcmVwZWF0ZWQg
aWYgc3RhdGVtZW50cyBhcmUgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgdGhh
biBzd2l0Y2ggLi4uICovCisJLyogb3JkZXJlZCBpbiBvcmRlciBvZiBsaWtl
bGlob29kICovCisJaWYgKG5yX2JpdHMgPT0gMCkKKwkJcmV0dXJuICgwKTsJ
Lyogbm8gZXJyb3IgKi8KKwlpZiAobnJfYml0cyA9PSAxMSkgewkvKiBjb3Jy
ZWN0YWJsZSBlcnJvciAqLworCQkvKgorCQkgKiBycDE1LzEzLzExLzkvNy81
LzMvMSBpbmRpY2F0ZSB3aGljaCBieXRlIGlzIHRoZSBmYXVsdHkgYnl0ZQor
CQkgKiBjcCA1LzMvMSBpbmRpY2F0ZSB0aGUgZmF1bHR5IGJpdC4KKwkJICog
QSBsb29rdXAgdGFibGUgKGNhbGxlZCBhZGRyZXNzYml0cykgaXMgdXNlZCB0
byBmaWx0ZXIKKwkJICogdGhlIGJpdHMgZnJvbSB0aGUgYnl0ZSB0aGV5IGFy
ZSBpbi4KKwkJICogQSBtYXJnaW5hbCBvcHRpbWlzYXRpb24gaXMgcG9zc2li
bGUgYnkgaGF2aW5nIHRocmVlCisJCSAqIGRpZmZlcmVudCBsb29rdXAgdGFi
bGVzLgorCQkgKiBPbmUgYXMgd2UgaGF2ZSBub3cgKGZvciBiMCksIG9uZSBm
b3IgYjIKKwkJICogKHRoYXQgd291bGQgYXZvaWQgdGhlID4+IDEpLCBhbmQg
b25lIGZvciBiMSAod2l0aCBhbGwgdmFsdWVzCisJCSAqIDw8IDQpLiBIb3dl
dmVyIGl0IHdhcyBmZWx0IHRoYXQgaW50cm9kdWNpbmcgdHdvIG1vcmUgdGFi
bGVzCisJCSAqIGhhcmRseSBqdXN0aWZ5IHRoZSBnYWluLgorCQkgKgorCQkg
KiBUaGUgYjIgc2hpZnQgaXMgdGhlcmUgdG8gZ2V0IHJpZCBvZiB0aGUgbG93
ZXN0IHR3byBiaXRzLgorCQkgKiBXZSBjb3VsZCBhbHNvIGRvIGFkZHJlc3Ni
aXRzW2IyXSA+PiAxIGJ1dCBmb3IgdGhlCisJCSAqIHBlcmZvcm1hY2UgaXQg
ZG9lcyBub3QgbWFrZSBhbnkgZGlmZmVyZW5jZQorCQkgKi8KKwkJYnl0ZV9h
ZGRyID0gKGFkZHJlc3NiaXRzW2IxXSA8PCA0KSArIGFkZHJlc3NiaXRzW2Iw
XTsKKwkJYml0X2FkZHIgPSBhZGRyZXNzYml0c1tiMiA+PiAyXTsKKwkJLyog
ZmxpcCB0aGUgYml0ICovCisJCWJ1ZltieXRlX2FkZHJdIF49ICgxIDw8IGJp
dF9hZGRyKTsKKwkJcmV0dXJuICgxKTsKIAl9Ci0KLQlpZihjb3VudGJpdHMo
czAgfCAoKHVpbnQzMl90KXMxIDw8IDgpIHwgKCh1aW50MzJfdClzMiA8PDE2
KSkgPT0gMSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gLUVCQURNU0c7CisJ
aWYgKG5yX2JpdHMgPT0gMSkKKwkJcmV0dXJuICgxKTsJLyogZXJyb3IgaW4g
ZWNjIGRhdGE7IG5vIGFjdGlvbiBuZWVkZWQgKi8KKwlyZXR1cm4gLTE7CiB9
CisKKyNpZm5kZWYgU1RBTkRBTE9ORQogRVhQT1JUX1NZTUJPTChuYW5kX2Nv
cnJlY3RfZGF0YSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVM
RV9BVVRIT1IoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0
ZWQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRnJhbnMgTWV1bGVuYnJvZWtz
Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgTkFORCBFQ0Mgc3Vw
cG9ydCIpOworI2VuZGlmClNpZ25lZC1vZmYtYnk6IEZyYW5zIE1ldWxlbmJy
b2Vrcwo=
--0-415199513-1217354338=:23881--
More information about the linux-mtd
mailing list