Full Disclosure mailing list archives
XXT version 2 - Trash talking challege version ;-)
From: full-disclosure () lists netsys com (full-disclosure () lists netsys com)
Date: Wed, 28 Aug 2002 04:55:39 -0700
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime () docserver cac washington edu for more info. ---1062731517-1887128600-1030535739=:215259 Content-Type: TEXT/PLAIN; charset=US-ASCII A big thanks to all who participated in The Trash Talker Challenge and helped me to make xxt a _much_ better piece of work. How many other hacks like this can claim such a wide review *grin* ? My original intention was to "call out" a few people who I thought were talent-less loudmouths. However, the people who contacted me about bugs or problems both in private and on the list were very tactful and talented. Anyway I wish to thank: Rain Forest Puppy, Zen Parse (have fun with my 50 bucks!), Steven M. Christey, Hank Leininger, Daniel Hartmeier, and anyone I forgot who provided me with feedback, bugfixes, or pointed out errors in the original release of xxt v1. Attached is version 2.0 of xxt which has the following features and changes over 1.0: o Tried to mitigate race condition in -g by wiping the environment var as soon as it's copied. You'll be warned if you try to use -g but it will still work as before. o Checked for NULL pointer when copying the environment variable data. o Added use of O_EXCL for opening the output file. o Fixed problem whereby the hash of the key was being reduced to 64bits since I was using a char array that was being populated with ascii hex values rather than just binary o Moved the argv trashing loop up so that it happens before any file I/O thus a little more quickly. This only effects users who pass the keyphrase via the CLI option -k. o Fixed an issue whereby someone may create a malicious xxt crypted file with a bad filesize header. Now I check to make sure the filesize jives with the stored header value. o Checked for access to read & write to file in case someone is dumb enough to make this setuid root, also drop any permissions given to xxt via a SUID bit (probably superceeding the former). o Added the -f functionality to use a whole file as the key. The file is hashed to a 128 bit key. This is the most secure option for providing a key and I would encourage it over -k or -g. aliver ---1062731517-1887128600-1030535739=:215259 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="xxt.c" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.SGI.4.44.0208280455390.215259@hexeris> Content-Description: xxt.c - a file encryption utility. Content-Disposition: attachment; filename="xxt.c" LyogeHh0IGVuY3J5cHRvciBieSBhbGl2ZXIgICAgICAgICAgICAgICAqLw0K LyogVmVyc2lvbiAyLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K LyogQW4gaW1wbGVtZW50YXRpb24gb2YgeHh0ZWEgZW5jcnlwdGlvbiAqLw0K LyogQSB2ZXJ5IHNtYWxsIChjb2RlIHdpc2UpIHNlY3VyZSBibG9jayAqLw0K LyogY2lwaGVyLiBTdXBwb3NlZGx5IGZhc3RlciB0aGFuIGJ0ZWEgICAqLw0K LyogYW5kIGZvciBmaWxlcyBvZiBhbnkgbm9uLXRyaXZhbCBzaXplICAqLw0K LyogaXQncyBnb25uYSBiZSB3YXkgZmFzdGVyIHRoYW4gVEVBIG9yICAqLw0K LyogSURFQS4gQXQgd29yc3QgaXQncyBzb21ldGhpbmcgbGlrZSA0eCAqLw0K LyogdGhlIHNwZWVkIG9mIERFUywgYW5kIG1vcmUgc2VjdXJlIGJ5ICAqLw0K LyogYSBmYWN0b3Igb2YgMl43MiB+IDQuNyB4IDEwXjIxICAgICAgICAqLw0K LyogTXkgdGVzdHMgc2VlbWVkIHRvIGluZGljYXRlIHRoYXQgeHh0ICAqLw0K LyogaXMgYWJvdXQgM3ggdGhlIHNwZWVkIG9mIG1jcnlwdCB3aXRoICAqLw0K LyogdGhlIHNhbWUgb3B0aW9ucy4gTm90IHRoYXQgbWNyeXB0IGlzICAqLw0K Lyogbm90IGEgZ3JlYXQgcGllY2Ugb2Ygd29yay4gSXQgaXMuICAgICAqLw0K LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K LyogVGhlIHh4dGVhIGFsZ29yaXRobSB3YXMgZGVzaWduZWQgYnk6ICAqLw0K LyogRGF2aWQgV2hlZWxlciBhbmQgUm9nZXIgTmVlZGhhbS4gU29tZSAqLw0K LyogY29kZSBmcm9tIHRoZWlyIHB1YmxpY2F0aW9ucyB3YXMgdXNlZCAqLw0K LyogZm9yIHNvbWUgb2YgdGhlIGVuY3J5cHRpb24gcG9ydGlvbnMuICAqLw0K LyogSG93ZXZlciBpdCB3YXMgYWx0ZXJlZCB0byBiZSA2NCBiaXQgICAqLw0K LyogYXJjaGl0ZWN0dXJlIGZyaWVuZGx5LiAgICAgICAgICAgICAgICAqLw0K LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K LyogTUQ1IEhhc2hpbmcgd2FzIGludmVudGVkIGJ5OiAgICAgICAgICAqLw0K LyogUHJvZmVzc29yIFJvbmFsZCBSaXZlc3QgICAgICAgICAgICAgICAqLw0K LyogSSB1c2UgTUQ1IHRvIGhhc2ggdGhlIGtleS4gVGhlIE1ENSAgICAqLw0K LyogaW1wbGVtZW50YXRpb24gaGVyZSBpcyB1c2VzIGEgcHVibGljICAqLw0K LyogZG9tYWluIFJGQzEzMjEgcmlwb2ZmIGltcGxlbWVudGF0aW9uICAqLw0K LyogZnJvbTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K LyogTC4gUGV0ZXIgRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICAqLw0K Lyogc28gdGhlIFJTQSBmb2xrcyBjYW4ndCBjbGFpbSBJIG93ZSAgICAqLw0K LyogdGhlbSBhbnl0aGluZy4gICAgICAgICAgICAgICAgICAgICAgICAqLw0K LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0K LyogSSdkIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBmb2xrcyAqLw0K LyogUmFpbiBGb3Jlc3QgUHVwcHksIFplbiBQYXJzZSwgU3RldmVuICAqLw0K LyogTS4gQ2hyaXN0ZXksIEhhbmsgTGVpbmluZ2VyLCBEYW5pZWwgICAqLw0K LyogSGFydG1laWVyLCBhbmQgYW55b25lIEkgZm9yZ290IHdobyAgICAqLw0K LyogcHJvdmlkZWQgbWUgd2l0aCBmZWVkYmFjaywgYnVnZml4ZXMsICAqLw0K Lyogb3IgcG9pbnRlZCBvdXQgZXJyb3JzIGluIHRoZSBvcmlnaW5hbCAqLw0K LyogcmVsZWFzZSBvZiB4eHQgICAgICAgICAgICAgICAgICAgICAgICAqLw0K LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0K LyogQ0hBTkdFIExPRyAtIENIQU5HRSBMT0cgLSBDSEFOR0UgTE9HICAqLw0K LyogVmVyc2lvbiAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K LyogbyBUcmllZCB0byBtaXRpZ2F0ZSByYWNlIGNvbmRpdGlvbiBpbiAqLw0K LyogICAtZyBieSB3aXBpbmcgdGhlIGVudmlyb25tZW50IHZhciBhcyAqLw0K LyogICBzb29uIGFzIGl0J3MgY29waWVkLiAgICAgICAgICAgICAgICAqLw0K LyogbyBDaGVja2VkIGZvciBOVUxMIHBvaW50ZXIgb24gLWcgICAgICAqLw0K LyogbyBBZGRlZCB1c2Ugb2YgT19FWENMIGZvciBvcGVuaW5nIHRoZSAqLw0K LyogICBvdXRwdXQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAqLw0K LyogbyBGaXhlZCBwcm9ibGVtIHdoZXJlYnkgdGhlIGhhc2ggb2YgICAqLw0K LyogICB0aGUga2V5IHdhcyBiZWluZyByZWR1Y2VkIHRvIDY0Yml0cyAqLw0K LyogICBzaW5jZSBJIHdhcyB1c2luZyBhIGNoYXIgYXJyYXkgdGhhdCAqLw0K LyogICB3YXMgYmVpbmcgcG9wdWxhdGVkIHdpdGggYXNjaWkgaGV4ICAqLw0K LyogICB2YWx1ZXMgcmF0aGVyIHRoYW4ganVzdCBiaW5hcnkgICAgICAqLw0K LyogbyBNb3ZlZCB0aGUgYXJndiB0cmFzaGluZyBsb29wIHVwIHNvICAqLw0K LyogICB0aGF0IGl0IGhhcHBlbnMgYmVmb3JlIGFueSBmaWxlIEkvTyAqLw0K LyogbyBGaXhlZCBhbiBpc3N1ZSB3aGVyZWJ5IHNvbWVvbmUgbWF5ICAqLw0K LyogICBjcmVhdGUgYSBtYWxpY2lvdXMgeHh0IGNyeXB0ZWQgZmlsZSAqLw0K LyogICB3aXRoIGEgYmFkIGZpbGVzaXplIGhlYWRlci4gTm93IEkgICAqLw0K LyogICBjaGVjayBmb3IgdGhpcy4gICAgICAgICAgICAgICAgICAgICAqLw0K LyogbyBDaGVja2VkIGZvciBhY2Nlc3MgdG8gcmVhZCAmIHdyaXRlICAqLw0K LyogICB0byBmaWxlIGluIGNhc2Ugc29tZW9uZSBpcyBkdW1iICAgICAqLw0K LyogICBlbm91Z2ggdG8gbWFrZSB0aGlzIHNldHVpZCByb290ICAgICAqLw0K LyogbyBBZGRlZCB0aGUgLWYgZnVuY3Rpb25hbGl0eSB0byB1c2UgYSAqLw0K LyogICB3aG9sZSBmaWxlIGFzIHRoZSBrZXkuIFRoZSBmaWxlIGlzICAqLw0K LyogICBoYXNoZWQgdG8gYSAxMjggYml0IGtleS4gICAgICAgICAgICAqLw0K LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0K LyogQ29tcGlsZSB3aXRoIGNjIC1PMyAtbyB4eHQgeHh0LmMgICAgICAqLw0K LyogInh4dCAtaCIgZm9yIGhlbHAsIGFmdGVyIHRoYXQgICAgICAgICAqLw0K LyogdGVzdGVkIG9uIElSSVgsIFNvbGFyaXMsIExpbnV4ICAgICAgICAqLw0K LyogTmV0QlNELCBhbmQgQUlYICAgICAgICAgICAgICAgICAgICAgICAqLw0K DQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0K I2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPGZjbnRsLmg+DQojaW5j bHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3N0YXQuaD4NCiNp bmNsdWRlIDxpbnR0eXBlcy5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2lu Y2x1ZGUgPGVycm5vLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUg PG5ldGluZXQvaW4uaD4NCg0KbG9uZyBidGVhKCBpbnQzMl90ICogdiwgaW50 MzJfdCBuICwgaW50MzJfdCAqIGsgKTsNCmNoYXIgKiBtZW1uY2F0KGNoYXIg KmJpbnN0cl9hLGludCBzaXplX2EsY2hhciAqYmluc3RyX2IsaW50IHNpemVf Yik7DQpjaGFyICogY25wKGNoYXIgKmJ5dGVzdHJlYW0sIGludCBibG9jaywg aW50IHNpemUpOw0Kdm9pZCBzaG93aGVscCh2b2lkKTsNCg0KI2RlZmluZSBN WCAoej4+NV55PDwyKSsoeT4+M156PDw0KV4oc3VtXnkpKyhrW3AmM15lXV56 KSA7DQoNCi8qIG1vc3Qgb2YgdGhlIE1ENSBoYXNoaW5nIHN0dWZmIGlzIGZy b20gTC4gUGV0ZXIgRGV1dHNjaCAqLw0KLyogc2VlIGhpcyBub3RpY2UgYXQg dGhlIGJvdHRvbSBhbG9uZyB3aXRoIHRoZSBhbGdvcml0aG0gICovDQojaWZu ZGVmIG1kNV9JTkNMVURFRA0KI2RlZmluZSBtZDVfSU5DTFVERUQNCnR5cGVk ZWYgdW5zaWduZWQgY2hhciBtZDVfYnl0ZV90OyAvKiA4LWJpdCBieXRlICov DQp0eXBlZGVmIHVuc2lnbmVkIGludCBtZDVfd29yZF90OyAgLyogMzItYml0 IHdvcmQgKi8NCnR5cGVkZWYgc3RydWN0IG1kNV9zdGF0ZV9zIHsNCiAgICBt ZDVfd29yZF90IGNvdW50WzJdOw0KICAgIG1kNV93b3JkX3QgYWJjZFs0XTsN CiAgICBtZDVfYnl0ZV90IGJ1Zls2NF07DQp9DQptZDVfc3RhdGVfdDsNCg0K dm9pZCBtZDVfaW5pdChtZDVfc3RhdGVfdCAqcG1zKTsNCnZvaWQgbWQ1X2Fw cGVuZChtZDVfc3RhdGVfdCAqcG1zLCBjb25zdCBtZDVfYnl0ZV90ICpkYXRh LCBpbnQgbmJ5dGVzKTsNCnZvaWQgbWQ1X2ZpbmlzaChtZDVfc3RhdGVfdCAq cG1zLCBtZDVfYnl0ZV90IGRpZ2VzdFsxNl0pOw0KI2VuZGlmDQoNCi8qIHlv dSBjYW4gZ2V0IHNvbWUgdHJpdmFsIHNwZWVkdXBzIHdpdGggTVNCIGlmIHlv dSBkZWZpbmUgdGhpcyByaWdodCAqLw0KI3VuZGVmIEJZVEVfT1JERVIJLyog MSA9IGJpZy1lbmRpYW4sIC0xID0gbGl0dGxlLWVuZGlhbiwgMCA9IHVua25v d24gKi8NCiNpZmRlZiBBUkNIX0lTX0JJR19FTkRJQU4NCiMgIGRlZmluZSBC WVRFX09SREVSIChBUkNIX0lTX0JJR19FTkRJQU4gPyAxIDogLTEpDQojZWxz ZQ0KIyAgZGVmaW5lIEJZVEVfT1JERVIgMA0KI2VuZGlmDQoNCiNkZWZpbmUg VF9NQVNLICgobWQ1X3dvcmRfdCl+MCkNCiNkZWZpbmUgVDEgLyogMHhkNzZh YTQ3OCAqLyAoVF9NQVNLIF4gMHgyODk1NWI4NykNCiNkZWZpbmUgVDIgLyog MHhlOGM3Yjc1NiAqLyAoVF9NQVNLIF4gMHgxNzM4NDhhOSkNCiNkZWZpbmUg VDMgICAgMHgyNDIwNzBkYg0KI2RlZmluZSBUNCAvKiAweGMxYmRjZWVlICov IChUX01BU0sgXiAweDNlNDIzMTExKQ0KI2RlZmluZSBUNSAvKiAweGY1N2Mw ZmFmICovIChUX01BU0sgXiAweDBhODNmMDUwKQ0KI2RlZmluZSBUNiAgICAw eDQ3ODdjNjJhDQojZGVmaW5lIFQ3IC8qIDB4YTgzMDQ2MTMgKi8gKFRfTUFT SyBeIDB4NTdjZmI5ZWMpDQojZGVmaW5lIFQ4IC8qIDB4ZmQ0Njk1MDEgKi8g KFRfTUFTSyBeIDB4MDJiOTZhZmUpDQojZGVmaW5lIFQ5ICAgIDB4Njk4MDk4 ZDgNCiNkZWZpbmUgVDEwIC8qIDB4OGI0NGY3YWYgKi8gKFRfTUFTSyBeIDB4 NzRiYjA4NTApDQojZGVmaW5lIFQxMSAvKiAweGZmZmY1YmIxICovIChUX01B U0sgXiAweDAwMDBhNDRlKQ0KI2RlZmluZSBUMTIgLyogMHg4OTVjZDdiZSAq LyAoVF9NQVNLIF4gMHg3NmEzMjg0MSkNCiNkZWZpbmUgVDEzICAgIDB4NmI5 MDExMjINCiNkZWZpbmUgVDE0IC8qIDB4ZmQ5ODcxOTMgKi8gKFRfTUFTSyBe IDB4MDI2NzhlNmMpDQojZGVmaW5lIFQxNSAvKiAweGE2Nzk0MzhlICovIChU X01BU0sgXiAweDU5ODZiYzcxKQ0KI2RlZmluZSBUMTYgICAgMHg0OWI0MDgy MQ0KI2RlZmluZSBUMTcgLyogMHhmNjFlMjU2MiAqLyAoVF9NQVNLIF4gMHgw OWUxZGE5ZCkNCiNkZWZpbmUgVDE4IC8qIDB4YzA0MGIzNDAgKi8gKFRfTUFT SyBeIDB4M2ZiZjRjYmYpDQojZGVmaW5lIFQxOSAgICAweDI2NWU1YTUxDQoj ZGVmaW5lIFQyMCAvKiAweGU5YjZjN2FhICovIChUX01BU0sgXiAweDE2NDkz ODU1KQ0KI2RlZmluZSBUMjEgLyogMHhkNjJmMTA1ZCAqLyAoVF9NQVNLIF4g MHgyOWQwZWZhMikNCiNkZWZpbmUgVDIyICAgIDB4MDI0NDE0NTMNCiNkZWZp bmUgVDIzIC8qIDB4ZDhhMWU2ODEgKi8gKFRfTUFTSyBeIDB4Mjc1ZTE5N2Up DQojZGVmaW5lIFQyNCAvKiAweGU3ZDNmYmM4ICovIChUX01BU0sgXiAweDE4 MmMwNDM3KQ0KI2RlZmluZSBUMjUgICAgMHgyMWUxY2RlNg0KI2RlZmluZSBU MjYgLyogMHhjMzM3MDdkNiAqLyAoVF9NQVNLIF4gMHgzY2M4ZjgyOSkNCiNk ZWZpbmUgVDI3IC8qIDB4ZjRkNTBkODcgKi8gKFRfTUFTSyBeIDB4MGIyYWYy NzgpDQojZGVmaW5lIFQyOCAgICAweDQ1NWExNGVkDQojZGVmaW5lIFQyOSAv KiAweGE5ZTNlOTA1ICovIChUX01BU0sgXiAweDU2MWMxNmZhKQ0KI2RlZmlu ZSBUMzAgLyogMHhmY2VmYTNmOCAqLyAoVF9NQVNLIF4gMHgwMzEwNWMwNykN CiNkZWZpbmUgVDMxICAgIDB4Njc2ZjAyZDkNCiNkZWZpbmUgVDMyIC8qIDB4 OGQyYTRjOGEgKi8gKFRfTUFTSyBeIDB4NzJkNWIzNzUpDQojZGVmaW5lIFQz MyAvKiAweGZmZmEzOTQyICovIChUX01BU0sgXiAweDAwMDVjNmJkKQ0KI2Rl ZmluZSBUMzQgLyogMHg4NzcxZjY4MSAqLyAoVF9NQVNLIF4gMHg3ODhlMDk3 ZSkNCiNkZWZpbmUgVDM1ICAgIDB4NmQ5ZDYxMjINCiNkZWZpbmUgVDM2IC8q IDB4ZmRlNTM4MGMgKi8gKFRfTUFTSyBeIDB4MDIxYWM3ZjMpDQojZGVmaW5l IFQzNyAvKiAweGE0YmVlYTQ0ICovIChUX01BU0sgXiAweDViNDExNWJiKQ0K I2RlZmluZSBUMzggICAgMHg0YmRlY2ZhOQ0KI2RlZmluZSBUMzkgLyogMHhm NmJiNGI2MCAqLyAoVF9NQVNLIF4gMHgwOTQ0YjQ5ZikNCiNkZWZpbmUgVDQw IC8qIDB4YmViZmJjNzAgKi8gKFRfTUFTSyBeIDB4NDE0MDQzOGYpDQojZGVm aW5lIFQ0MSAgICAweDI4OWI3ZWM2DQojZGVmaW5lIFQ0MiAvKiAweGVhYTEy N2ZhICovIChUX01BU0sgXiAweDE1NWVkODA1KQ0KI2RlZmluZSBUNDMgLyog MHhkNGVmMzA4NSAqLyAoVF9NQVNLIF4gMHgyYjEwY2Y3YSkNCiNkZWZpbmUg VDQ0ICAgIDB4MDQ4ODFkMDUNCiNkZWZpbmUgVDQ1IC8qIDB4ZDlkNGQwMzkg Ki8gKFRfTUFTSyBeIDB4MjYyYjJmYzYpDQojZGVmaW5lIFQ0NiAvKiAweGU2 ZGI5OWU1ICovIChUX01BU0sgXiAweDE5MjQ2NjFhKQ0KI2RlZmluZSBUNDcg ICAgMHgxZmEyN2NmOA0KI2RlZmluZSBUNDggLyogMHhjNGFjNTY2NSAqLyAo VF9NQVNLIF4gMHgzYjUzYTk5YSkNCiNkZWZpbmUgVDQ5IC8qIDB4ZjQyOTIy NDQgKi8gKFRfTUFTSyBeIDB4MGJkNmRkYmIpDQojZGVmaW5lIFQ1MCAgICAw eDQzMmFmZjk3DQojZGVmaW5lIFQ1MSAvKiAweGFiOTQyM2E3ICovIChUX01B U0sgXiAweDU0NmJkYzU4KQ0KI2RlZmluZSBUNTIgLyogMHhmYzkzYTAzOSAq LyAoVF9NQVNLIF4gMHgwMzZjNWZjNikNCiNkZWZpbmUgVDUzICAgIDB4NjU1 YjU5YzMNCiNkZWZpbmUgVDU0IC8qIDB4OGYwY2NjOTIgKi8gKFRfTUFTSyBe IDB4NzBmMzMzNmQpDQojZGVmaW5lIFQ1NSAvKiAweGZmZWZmNDdkICovIChU X01BU0sgXiAweDAwMTAwYjgyKQ0KI2RlZmluZSBUNTYgLyogMHg4NTg0NWRk MSAqLyAoVF9NQVNLIF4gMHg3YTdiYTIyZSkNCiNkZWZpbmUgVDU3ICAgIDB4 NmZhODdlNGYNCiNkZWZpbmUgVDU4IC8qIDB4ZmUyY2U2ZTAgKi8gKFRfTUFT SyBeIDB4MDFkMzE5MWYpDQojZGVmaW5lIFQ1OSAvKiAweGEzMDE0MzE0ICov IChUX01BU0sgXiAweDVjZmViY2ViKQ0KI2RlZmluZSBUNjAgICAgMHg0ZTA4 MTFhMQ0KI2RlZmluZSBUNjEgLyogMHhmNzUzN2U4MiAqLyAoVF9NQVNLIF4g MHgwOGFjODE3ZCkNCiNkZWZpbmUgVDYyIC8qIDB4YmQzYWYyMzUgKi8gKFRf TUFTSyBeIDB4NDJjNTBkY2EpDQojZGVmaW5lIFQ2MyAgICAweDJhZDdkMmJi DQojZGVmaW5lIFQ2NCAvKiAweGViODZkMzkxICovIChUX01BU0sgXiAweDE0 NzkyYzZlKQ0KDQoNCmludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltd KSB7DQogICAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsNCiAgICBleHRlcm4gaW50 ICBvcHRpbmQ7DQogICAgZXh0ZXJuIGludCBlcnJubzsNCiAgICBpbnQgYzsN CiAgICBpbnQgaTsNCiAgICBpbnQgajsNCiAgICBpbnQgc2w7DQogICAgaW50 IGRlYnVnID0gMDsNCiAgICBpbnQgdW5saW5raXQgPSAwOw0KICAgIGludCB1 c2Vfb3V0ID0gMDsNCiAgICBpbnQgdXNlX2twICA9IDA7DQogICAgaW50IHVz ZV9rZSAgPSAwOw0KICAgIGludCBmaXJzdF9ibG9jayA9IDE7DQogICAgaW50 IGZkX2luOw0KICAgIGludCBmZF9vdXQ7DQogICAgaW50IGVuY3J5cHQgPSAw Ow0KICAgIGludCBkZWNyeXB0ID0gMDsNCiAgICBpbnQgYmwgPSAwOw0KICAg IGludCBieXRlc19yZWFkOw0KICAgIGludCBwYWQgPSAwOw0KICAgIGludCBu b3VtYXNrID0gMDsNCiAgICBpbnQgdHJuZCA9IDA7DQogICAgaW50IHVpZDsN CiAgICBpbnQgdXNlX2ZpbGUgPSAwOw0KICAgIHVpbnQzMl90IHJhbmRwYWRb MTZdOw0KICAgIHVpbnQzMl90IGhhc2hbOF07DQogICAgdWludDMyX3QgZmls ZXNpemUgPSAwOw0KICAgIHVpbnQzMl90IGZpbGVzaXplX21zYiA9IDA7DQog ICAgdWludDMyX3QgcmVhZF9maWxlc2l6ZV9tc2IgPSAwOw0KICAgIHVpbnQz Ml90IHJlYWRfZmlsZXNpemUgPSAwOw0KICAgIHVpbnQzMl90IGJzZiA9IDA7 DQogICAgY2hhciAqaW5fZmlsZSA9IE5VTEw7DQogICAgY2hhciAqb3V0X2Zp bGUgPSBOVUxMOw0KICAgIGNoYXIgKmtleXBocmFzZSA9IE5VTEw7DQogICAg Y2hhciAqa2V5ZW52ID0gTlVMTDsNCiAgICBjaGFyICprZXlmaWxlID0gTlVM TDsNCiAgICBjaGFyICprZl9hbGwgPSBOVUxMOw0KICAgIGNoYXIgZmJfYnVm ZmVyWzY0XTsNCiAgICAvKiB1X2NoYXIgKnBsYWludGV4dCA9IE5VTEw7ICov DQogICAgdV9jaGFyIHBsYWludGV4dFs2NF07DQogICAgc3RydWN0IHN0YXQg c3RhdGJ1ZjsNCiAgICBtZDVfc3RhdGVfdCBzdGF0ZTsNCiAgICBtZDVfYnl0 ZV90IGRpZ2VzdFszMl07DQoNCiAgICAvKiBkcm9wIGFueSBwcml2aWxlZ2Vz IGdpdmVuIHRvIHVzIGJ5IHNvbWVvbmUgZHVtYiBlbm91Z2ggdG8gKi8NCiAg ICAvKiBtYWtlIHh4dCBhIFNVSUQgcHJvZ3JhbSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8NCiAgICB1aWQgPSBnZXR1aWQoKTsNCiAg ICBzZXR1aWQodWlkKTsNCg0KICAgIHdoaWxlKCAoYyA9IGdldG9wdChhcmdj LGFyZ3YsImk6bzprOmc6ZjpoeGRldXYiKSkgIT0gLTEgKSB7DQogICAgICAg IHN3aXRjaChjKSB7DQogICAgICAgIGNhc2UgJ2gnOg0KICAgICAgICAgICAg c2hvd2hlbHAoKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNl ICd2JzoNCiAgICAgICAgICAgIGRlYnVnID0gMTsNCiAgICAgICAgICAgIGJy ZWFrOw0KICAgICAgICBjYXNlICdpJzoNCiAgICAgICAgICAgIGlmKE5VTEwg PT0gKGluX2ZpbGUgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKG9wdGFyZykg KyAyKSkpIHsNCiAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiRkFU QUw6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkuXG4iKTsNCiAgICAgICAgICAg ICAgICBleGl0KDEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc3Ry bmNweShpbl9maWxlLG9wdGFyZyxzdHJsZW4ob3B0YXJnKSArIDEpOw0KICAg ICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ28nOg0KICAgICAgICAg ICAgdXNlX291dCA9IDE7DQogICAgICAgICAgICBpZihOVUxMID09IChvdXRf ZmlsZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ob3B0YXJnKSArIDIpKSkg ew0KICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogY2Fu bm90IGFsbG9jYXRlIG1lbW9yeS5cbiIpOw0KICAgICAgICAgICAgICAgIGV4 aXQoMSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBzdHJuY3B5KG91 dF9maWxlLG9wdGFyZyxzdHJsZW4ob3B0YXJnKSArIDEpOw0KICAgICAgICAg ICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ2YnOg0KICAgICAgICAgICAgdXNl X2ZpbGUgPSAxOw0KICAgICAgICAgICAgaWYoTlVMTCA9PSAoa2V5ZmlsZSA9 IChjaGFyICopIG1hbGxvYyhzdHJsZW4ob3B0YXJnKSArIDIpKSkgew0KICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogY2Fubm90IGFs bG9jYXRlIG1lbW9yeS5cbiIpOw0KICAgICAgICAgICAgICAgIGV4aXQoMSk7 DQogICAgICAgICAgICB9DQogICAgICAgICAgICBzdHJuY3B5KGtleWZpbGUs b3B0YXJnLHN0cmxlbihvcHRhcmcpICsgMSk7DQogICAgICAgICAgICBicmVh azsNCiAgICAgICAgY2FzZSAnayc6DQogICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwiV0FSTklORzogdXNpbmcgYSBrZXlwaHJhc2UgZnJvbSB0aGUgY29t bWFuZCBsaW5lIGNhbiBiZSBpbnNlY3VyZS5cbiIpOw0KICAgICAgICAgICAg dXNlX2twID0gMTsNCiAgICAgICAgICAgIGlmKE5VTEwgPT0gKGtleXBocmFz ZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ob3B0YXJnKSArIDIpKSkgew0K ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogY2Fubm90 IGFsbG9jYXRlIG1lbW9yeS5cbiIpOw0KICAgICAgICAgICAgICAgIGV4aXQo MSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBzdHJuY3B5KGtleXBo cmFzZSxvcHRhcmcsc3RybGVuKG9wdGFyZykgKyAxKTsNCiAgICAgICAgICAg IGJyZWFrOw0KICAgICAgICBjYXNlICdnJzoNCiAgICAgICAgICAgIC8qIG15 IG92ZXJhbGwgb3BpbmlvbiBpcyB0aGF0IHVzaW5nIC1nIG9yIC1rIGNhbiBi ZSAqLw0KICAgICAgICAgICAgLyogaW5zZWN1cmUuIEV2ZW4gdGhvdWdoIEkg ZG8gbXkgYmVzdCB0byBtaXRpZ2F0ZSAgICovDQogICAgICAgICAgICAvKiB0 aGUgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoIHVzaW5nIGdldGVudigpIGhl cmUgKi8NCiAgICAgICAgICAgIC8qIGJ5IHdpcGluZyB0aGUgZW52aXJvbm1l bnQgdmFyIGFmdGVyd2FyZHMsIGl0J3MgICAqLw0KICAgICAgICAgICAgLyog c3RpbGwgYSBsaXR0bGUgdnVsbmVyYWJsZSB0byBhIHJhY2UgY29uZGl0aW9u ICAgICovDQogICAgICAgICAgICAvKiBTbywgSSB0aGluayBpdCdzIHBydWRl bnQgdGhhdCBJIHdhcm4gdGhlIHVzZXIgb24gKi8NCiAgICAgICAgICAgIC8q IHRoZSB1c2Ugb2YgdGhpcyBub3csIHRvby4gICAgICAgICAgICAgICAgICAg ICAgICAqLw0KICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIldhcm5pbmc6 IHVzZSBvZiAtZyBjYW4gYmUgaW5zZWN1cmU7IHVzZSAtZiBpbnN0ZWFkLlxu Iik7DQogICAgICAgICAgICB1c2Vfa2UgPSAxOw0KICAgICAgICAgICAgaWYo TlVMTCA9PSAoa2V5ZW52ID0gZ2V0ZW52KG9wdGFyZykpKSB7DQogICAgICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBZb3VyIGVudmlyb25t ZW50IHZhcmlhYmxlIHdhcyBudWxsLiBObyBrZXlwaHJhc2UgZm91bmQuXG4i KTsNCiAgICAgICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgaWYoTlVMTCA9PSAoa2V5cGhyYXNlID0gKGNoYXIgKikg bWFsbG9jKHN0cmxlbihrZXllbnYpICsgMikpKSB7DQogICAgICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBjYW5ub3QgYWxsb2NhdGUgbWVt b3J5LlxuIik7DQogICAgICAgICAgICAgICAgZXhpdCgxKTsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgICAgIHN0cm5jcHkoa2V5cGhyYXNlLGtleWVudixz dHJsZW4oa2V5ZW52KSArIDEpOw0KICAgICAgICAgICAgLyogZ2V0IHJpZCBv ZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQVNBUCAqLw0KICAgICAgICAg ICAgLyogc2luY2UgaXQgY2FuIGJlIHNlZW4gaW4gdGhlICdwcycgb3V0cHV0 ICAqLw0KICAgICAgICAgICAgdW5zZXRlbnYob3B0YXJnKTsNCiAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdkJzoNCiAgICAgICAgICAgIGRl Y3J5cHQgPSAxOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2Ug J2UnOg0KICAgICAgICAgICAgZW5jcnlwdCA9IDE7DQogICAgICAgICAgICBi cmVhazsNCiAgICAgICAgY2FzZSAndSc6DQogICAgICAgICAgICB1bmxpbmtp dCA9IDE7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAneCc6 DQogICAgICAgICAgICBub3VtYXNrID0gMTsNCiAgICAgICAgICAgIGJyZWFr Ow0KICAgICAgICB9IC8qIGVuZCBvZiBzd2l0Y2goKSAqLw0KICAgIH0gLyog ZW5kIG9mIHdoaWxlIGdldG9wdCgpICovDQoNCiAgICAvKiB0cnkgdG8gcHVs bCBhIGZhc3Qgb25lIGFuZCB3aXBlIHRoZSBhcmd1bWVudHMgKi8NCiAgICAv KiBhIHBlcnNvbiBjb3VsZCBzdGlsbCB0cnkgYW5kIHJhY2UgdG8gZ2V0IHRo ZW0gKi8NCiAgICAvKiBidXQgaXQnZCBiZSBwcmV0dHkgdG91Z2ggKE5PVCBp bXBvc3NpYmxlKSBJJ20gKi8NCiAgICAvKiBqdXN0IG1ha2luZyBpdCBoYXJk ZXIsIGJ1dCBJJ20gbm90IGdvaW5nIHRvICAgKi8NCiAgICAvKiBzYXkgdGhh dCB0aGlzIG1ha2VzIGl0IGEgdG90YWxseSBzZWN1cmUgd2F5ICAgKi8NCiAg ICAvKiB0byBtYWtlIHBhc3NpbmcgdGhlIGtleSBvbiB0aGUgY29tbWFuZCBs aW5lIGEgKi8NCiAgICAvKiBzYW5lIG9yIGdvb2QgaWRlYS4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8NCiAgICBmb3IgKGkgPSAxOyBpIDwgYXJn YzsgKytpKSB7DQogICAgICAgIHNsID0gc3RybGVuKGFyZ3ZbaV0pOw0KICAg ICAgICBmb3IgKGogPSAwOyBqIDwgc2w7ICsraikNCiAgICAgICAgICAgIGFy Z3ZbaV1bal0gPSAwOw0KICAgIH0NCg0KICAgIC8qIHlvdSBtdXN0IHVzZSBh IGtleSBmaWxlIG9yIGEga2V5IHBocmFzZSBvciBhIGtleSB2YXJpYWJsZSAq Lw0KICAgIGlmKCF1c2Vfa3AgJiYgIXVzZV9rZSAmJiAhdXNlX2ZpbGUpIHsN CiAgICAgICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBJIHdvbnQgZW5jcnlw dCB3aXRob3V0IGEga2V5IVxuXG4iKTsNCiAgICAgICAgc2hvd2hlbHAoKTsN CiAgICAgICAgZXhpdCgxKTsNCiAgICB9DQoNCiAgICAvKiBvbmUgbW9kZSwg YW5kIG9ubHkgb25lIG1vZGUuICovDQogICAgaWYoKGRlY3J5cHQgJiYgZW5j cnlwdCkgfHwgKCFlbmNyeXB0ICYmICFkZWNyeXB0KSkgew0KICAgICAgICBm cHJpbnRmKHN0ZGVyciwiRkFUQUw6IFlvdXIgZW5jcnlwdC9kZWNyeXB0IG9w dGlvbnMgYXJlIG1pc3Npbmcgb3IgZG8gbm90IG1ha2Ugc2Vuc2UuXG4iKTsN CiAgICAgICAgZXhpdCgxKTsNCiAgICB9DQoNCiAgICBpZihrZXlmaWxlICE9 IE5VTEwpIHsNCiAgICAgICAgaWYoLTEgPT0gKHN0YXQoa2V5ZmlsZSwmc3Rh dGJ1ZikpKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiRkFUQUw6 IGNhbm5vdCBzdGF0IHRoZSBrZXkgZmlsZSFcbiIpOw0KICAgICAgICAgICAg ZXhpdCgxKTsNCiAgICAgICAgfQ0KICAgICAgICBpZihzdGF0YnVmLnN0X3Np emUgPT0gKG9mZl90KSAwKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwiRkFUQUw6IEtleWZpbGUgaXMgMCBieXRlcy4gVGhpcyB3aWxsIG5vdCBm bHkuXG4iKTsNCiAgICAgICAgICAgIGV4aXQoMSk7DQogICAgICAgIH0NCiAg ICAgICAgaWYoc3RhdGJ1Zi5zdF9zaXplID4gMTAwMDApIHsNCiAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCJOb3RpY2U6IHlvdXIga2V5ZmlsZSBpcyBs YXJnZSBlbm91Z2ggdGhhdCBpdCB3aWxsIHNsb3cgZG93biB4eHRcbiIpOw0K ICAgICAgICB9DQogICAgICAgIGlmKC0xID09IGFjY2VzcyhrZXlmaWxlLFJf T0spKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiRkFUQUw6IGFj Y2VzcyBkZW5pZWQgd2hpbGUgdHJ5aW5nIHRvIHJlYWQgJXM6ICVzXG4iDQog ICAgICAgICAgICAgICAgICAgICxpbl9maWxlDQogICAgICAgICAgICAgICAg ICAgICxzdHJlcnJvcihlcnJubykpOw0KICAgICAgICAgICAgZXhpdCgxKTsN CiAgICAgICAgfQ0KICAgICAgICBpZighbm91bWFzaykNCiAgICAgICAgICAg IHVtYXNrKDA3Nyk7DQogICAgICAgIGlmKC0xID09IChmZF9pbiA9IG9wZW4o a2V5ZmlsZSxPX1JET05MWSkpKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwiRkFUQUw6IENhbm5vdCBvcGVuKCkgdGhlIGZpbGU6ICVzXG4iLHN0 cmVycm9yKGVycm5vKSk7DQogICAgICAgICAgICBleGl0KDEpOw0KICAgICAg ICB9IGVsc2Ugew0KICAgICAgICAgICAgaWYoTlVMTCA9PSAoa2ZfYWxsID0g KGNoYXIgKikgbWFsbG9jKHN0YXRidWYuc3Rfc2l6ZSkpKSB7DQogICAgICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBjYW5ub3QgYWxsb2Nh dGUgbWVtb3J5IGZvciBrZXlmaWxlLiBUb28gYmlnP1xuIik7DQogICAgICAg ICAgICB9DQogICAgICAgICAgICBpID0gcmVhZChmZF9pbiwga2ZfYWxsLCBz dGF0YnVmLnN0X3NpemUpOw0KICAgICAgICAgICAgaWYoaSA9PSAoaW50KSBO VUxMIHx8IGkgIT0gc3RhdGJ1Zi5zdF9zaXplKSB7DQogICAgICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBTdHJhbmdlbHkgZW5vdWdoIEkg Y291bGQgbm90IHJlYWQgdGhlIGtleWZpbGUgY29ycmVjdGx5LlxuIik7DQog ICAgICAgICAgICAgICAgZXhpdCgxKTsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgfQ0KICAgICAgICBtZDVfaW5pdCgmc3RhdGUpOw0KICAgICAgICBtZDVf YXBwZW5kKCZzdGF0ZSwgKGNvbnN0IG1kNV9ieXRlX3QgKikga2ZfYWxsLCBz dHJsZW4oa2ZfYWxsKSk7DQogICAgICAgIG1kNV9maW5pc2goJnN0YXRlLCBk aWdlc3QpOw0KICAgICAgICBtZW1jcHkoaGFzaCxkaWdlc3QsIDMyKTsNCiAg ICAgICAgY2xvc2UoZmRfaW4pOw0KICAgICAgICAvKiBnZXQgdGhpcyBjbGVh ciB0ZXh0IG91dCBvZiBtZW1vcnkgYXNhcCAqLw0KICAgICAgICBtZW1zZXQo a2ZfYWxsLDAsc3RhdGJ1Zi5zdF9zaXplKTsNCiAgICAgICAgZnJlZShrZl9h bGwpOw0KICAgIH0NCg0KICAgIC8qIFRoZXkgbXVzdCBnaXZlIHVzIGFuIGlu cHV0IGZpbGUsIGFuZCBpdCBtdXN0ICovDQogICAgLyogYmUgc3RhdGFibGUg YW5kIHJlYWRhYmxlIGJ5IHVzIG9yIHdlIGZhaWwgICAgKi8NCiAgICBpZihp bl9maWxlICE9IE5VTEwpIHsNCiAgICAgICAgaWYoLTEgPT0gKHN0YXQoaW5f ZmlsZSwmc3RhdGJ1ZikpKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwiRkFUQUw6IGNhbm5vdCBzdGF0IHRoZSBpbnB1dCBmaWxlIVxuIik7DQog ICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICB9DQogICAgICAgIGlmKHN0 YXRidWYuc3Rfc2l6ZSA9PSAob2ZmX3QpIDApIHsNCiAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCJGQVRBTDogV1RGIGFyZSB5b3UgZW5jcnlwdGluZyBh biBlbXB0eSBmaWxlIGZvcj9cbiIpOw0KICAgICAgICAgICAgZXhpdCgxKTsN CiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIChvZmZfdCkgZmlsZXNp emUgPSBzdGF0YnVmLnN0X3NpemU7DQogICAgICAgICAgICBmaWxlc2l6ZV9t c2IgPSBodG9ubChmaWxlc2l6ZSk7DQogICAgICAgIH0NCiAgICAgICAgaWYo LTEgPT0gYWNjZXNzKGluX2ZpbGUsUl9PSykpIHsNCiAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCJGQVRBTDogYWNjZXNzIGRlbmllZCB3aGlsZSB0cnlp bmcgdG8gcmVhZCAlczogJXNcbiINCiAgICAgICAgICAgICAgICAgICAgLGlu X2ZpbGUNCiAgICAgICAgICAgICAgICAgICAgLHN0cmVycm9yKGVycm5vKSk7 DQogICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICB9DQogICAgICAgIGlm KCFub3VtYXNrKQ0KICAgICAgICAgICAgdW1hc2soMDc3KTsNCiAgICAgICAg aWYoLTEgPT0gKGZkX2luID0gb3Blbihpbl9maWxlLE9fUkRPTkxZKSkpIHsN CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogQ2Fubm90IG9w ZW4oKSB0aGUgZmlsZS5cblx0JXNcbiIsc3RyZXJyb3IoZXJybm8pKTsNCiAg ICAgICAgICAgIGV4aXQoMSk7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0K ICAgICAgICBmcHJpbnRmKHN0ZGVyciwiRkFUQUw6IG5vIGlucHV0IGZpbGUh XG4iKTsNCiAgICAgICAgZXhpdCgxKTsNCiAgICB9DQoNCiAgICAvKiBpZiB0 aGV5IGRpZG4ndCBwcm92aWRlIGFuIG91dCBmaWxlLCBsZXQncyB1c2UgKi8N CiAgICAvKiBpbl9maWxlLnh4dCBhcyB0aGUgb3V0X2ZpbGUgbmFtZSAgICAg ICAgICAgICAgKi8NCiAgICBpZihvdXRfZmlsZSA9PSBOVUxMKSB7DQogICAg ICAgIHVzZV9vdXQgPSAxOw0KICAgICAgICBpZihOVUxMID09IChvdXRfZmls ZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4oaW5fZmlsZSkgKyA2KSkpIHsN CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogY2Fubm90IGFs bG9jYXRlIG1lbW9yeS5cbiIpOw0KICAgICAgICAgICAgZXhpdCgxKTsNCiAg ICAgICAgfQ0KICAgICAgICBzbnByaW50ZihvdXRfZmlsZSxzdHJsZW4oaW5f ZmlsZSkgKyA2LCIlcy54eHQiLGluX2ZpbGUpOw0KICAgICAgICBpZighbm91 bWFzaykNCiAgICAgICAgICAgIHVtYXNrKDA3Nyk7DQogICAgICAgIGlmKC0x ID09IChmZF9vdXQgPSBvcGVuKG91dF9maWxlLE9fV1JPTkxZfE9fQ1JFQVR8 T19FWENMLDAwNjAwKSkpIHsNCiAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCJGQVRBTDogY2Fubm90IG9wZW4gdGhlIG91dHB1dCBmaWxlICVzIGZvciB3 cml0aW5nLlxuXHQlc1xuIg0KICAgICAgICAgICAgICAgICAgICAsb3V0X2Zp bGUNCiAgICAgICAgICAgICAgICAgICAgLHN0cmVycm9yKGVycm5vKSk7DQog ICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsN CiAgICAgICAgaWYoIW5vdW1hc2spDQogICAgICAgICAgICB1bWFzaygwNzcp Ow0KICAgICAgICBpZigtMSA9PSAoZmRfb3V0ID0gb3BlbihvdXRfZmlsZSxP X1dST05MWXxPX0NSRUFUfE9fRVhDTCwwMDYwMCkpKSB7DQogICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwiRkFUQUw6IGNhbm5vdCBvcGVuIHRoZSBvdXRw dXQgZmlsZSAlcyBmb3Igd3JpdGluZy5cblx0JXNcbiINCiAgICAgICAgICAg ICAgICAgICAgLG91dF9maWxlDQogICAgICAgICAgICAgICAgICAgICxzdHJl cnJvcihlcnJubykpOw0KICAgICAgICAgICAgZXhpdCgxKTsNCiAgICAgICAg fQ0KICAgIH0NCg0KICAgIC8qIGNyZWF0ZSBzb21lIHJhbmRvbSBieXRlcyB0 aGF0IHdlIG1heSB3YW50IHRvICovDQogICAgLyogdXNlIGxhdGVyIG9uIGZv ciBwYWRkaW5nLCBkZXBlbmRpbmcgb24gdGhlICAgKi8NCiAgICAvKiBsZW5n dGggb2YgdGhlIGlucHV0IGl0IG1heSBvciBtYXkgbm90IGdldCAgICAqLw0K ICAgIC8qIHVzZWQuIFRoZSBtYXhpbXVtIHdlIG1heSBuZWVkIGZvciBwYWRk aW5nIGlzICovDQogICAgLyogZ29pbmcgdG8gYmUgNjQgYnl0ZXMuICh0aGUg YmxvY2sgc2l6ZSkgICAgICAgKi8NCiAgICBmb3IoaSA9IDA7IGkgPCAxNjsg aSsrKSB7DQogICAgICAgIHNyYW5kKGkpOw0KICAgICAgICB0cm5kID0gcmFu ZCgpOw0KICAgICAgICBzcmFuZCgoaW50KXRpbWUoMCkgKyBnZXRwaWQoKSAr IGkgKyB0cm5kKTsNCiAgICAgICAgcmFuZHBhZFtpXSA9IHJhbmQoKTsNCiAg ICB9DQoNCiAgICBpZighdXNlX2ZpbGUpIHsNCiAgICAgICAgbWVtc2V0KCZo YXNoLDAsMzIpOw0KICAgICAgICAvKiBsZXRzIGhhc2ggdGhlIGtleXMuIFdl IGdldCBhIDI1NiBiaXQgaGFzaCAgICAqLw0KICAgICAgICAvKiBmcm9tIG1k NSwgYnV0IHh4dGVhIHRha2VzIGEgMTI4IGJpdCBrZXkgc28gICAqLw0KICAg ICAgICAvKiB0aGUgaGFzaCB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgZmly c3QgICAgICAqLw0KICAgICAgICAvKiBieSBuYXR1cmUgb2YgdGhlIGFsZ29y aXRobSBpdHNlbGYgMTI4IGJpdHMgICAqLw0KICAgICAgICBtZDVfaW5pdCgm c3RhdGUpOw0KICAgICAgICBtZDVfYXBwZW5kKCZzdGF0ZSwgKGNvbnN0IG1k NV9ieXRlX3QgKikga2V5cGhyYXNlLCBzdHJsZW4oa2V5cGhyYXNlKSk7DQog ICAgICAgIG1kNV9maW5pc2goJnN0YXRlLCBkaWdlc3QpOw0KICAgICAgICBt ZW1jcHkoaGFzaCxkaWdlc3QsIDMyKTsNCiAgICB9DQogICAgLyogc2hvdyBh IHN1bW1hcnkgb2YgYXJncyBpZiB3ZSBhcmUgaW4gdmVyYm9zZSBtb2RlICov DQogICAgaWYoZGVidWcpIHsNCiAgICAgICAgcHJpbnRmKCItLS09WyAgWW91 ciBvcHRpb24gc3VtbWFyeSBdPS0tLSBcbiIpOw0KICAgICAgICBwcmludGYo IklORklMRSAgICA9PSAlc1xuIixpbl9maWxlKTsNCiAgICAgICAgcHJpbnRm KCJPVVRGSUxFICAgPT0gJXNcbiIsb3V0X2ZpbGUpOw0KICAgICAgICBwcmlu dGYoIlVOTElOSyAgICA9PSAlZFxuIix1bmxpbmtpdCk7DQogICAgfQ0KDQog ICAgaWYoZW5jcnlwdCkgew0KICAgICAgICB3aGlsZShmaXJzdF9ibG9jaykg ew0KICAgICAgICAgICAgYnl0ZXNfcmVhZCA9IHJlYWQoZmRfaW4scGxhaW50 ZXh0LDYwKTsNCiAgICAgICAgICAgIGlmKGJ5dGVzX3JlYWQgPT0gLTEpIHsN CiAgICAgICAgICAgICAgICBwcmludGYoIkZBVEFMOiAgUHJvYmxlbSByZWFk aW5nIGlucHV0IGZpbGUuXG5cdCVzXG4iLHN0cmVycm9yKGVycm5vKSk7DQog ICAgICAgICAgICAgICAgZXhpdCgxKTsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgICAgIC8qIGlmIHRoZSBpbml0aWFsIGlucHV0IGlzbid0IGF0IGxlYXN0 IDYwIGJ5dGVzICovDQogICAgICAgICAgICAvKiB3ZSBhcmUgZ29pbmcgdG8g aGF2ZSB0byBwYWQgaXQuICovDQogICAgICAgICAgICBpZihieXRlc19yZWFk ICE9IDYwKSB7DQogICAgICAgICAgICAgICAgcGFkID0gNjAgLSBieXRlc19y ZWFkIDsNCiAgICAgICAgICAgICAgICBtZW1jcHkocGxhaW50ZXh0K2J5dGVz X3JlYWQscmFuZHBhZCxwYWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgbWVtY3B5KGZiX2J1ZmZlciwgJmZpbGVzaXplX21zYiwgNCk7DQogICAg ICAgICAgICBtZW1jcHkoZmJfYnVmZmVyKzQsIHBsYWludGV4dCwgNjApOw0K ICAgICAgICAgICAgYnRlYSgoaW50MzJfdCAqKSBmYl9idWZmZXIsIDE2LCAo aW50MzJfdCAqKSBoYXNoKTsNCiAgICAgICAgICAgIHdyaXRlKGZkX291dCwo Y2hhciAqKSBmYl9idWZmZXIsNjQpOw0KICAgICAgICAgICAgZmlyc3RfYmxv Y2sgPSAwOw0KICAgICAgICB9DQogICAgICAgIHdoaWxlKCAoYnl0ZXNfcmVh ZCA9IHJlYWQoZmRfaW4scGxhaW50ZXh0LDY0KSkgKSB7DQogICAgICAgICAg ICBpZihieXRlc19yZWFkID09IDY0KSB7DQogICAgICAgICAgICAgICAgYnRl YSgoaW50MzJfdCAqKSBwbGFpbnRleHQsIDE2LCAoaW50MzJfdCAqKSBoYXNo KTsNCiAgICAgICAgICAgICAgICB3cml0ZShmZF9vdXQsKGNoYXIgKikgcGxh aW50ZXh0LDY0KTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg ICAgICAgcGFkID0gNjQgLSBieXRlc19yZWFkOw0KICAgICAgICAgICAgICAg IG1lbWNweShwbGFpbnRleHQrYnl0ZXNfcmVhZCxyYW5kcGFkLHBhZCk7DQog ICAgICAgICAgICAgICAgYnRlYSgoaW50MzJfdCAqKSBwbGFpbnRleHQsIDE2 LCAoaW50MzJfdCAqKSBoYXNoKTsNCiAgICAgICAgICAgICAgICB3cml0ZShm ZF9vdXQsKGNoYXIgKikgcGxhaW50ZXh0LDY0KTsNCiAgICAgICAgICAgIH0N CiAgICAgICAgfQ0KICAgIH0gZWxzZSBpZihkZWNyeXB0KSB7DQogICAgICAg IHdoaWxlKGZpcnN0X2Jsb2NrKSB7DQogICAgICAgICAgICByZWFkKGZkX2lu LHBsYWludGV4dCw2NCk7DQogICAgICAgICAgICBidGVhKChpbnQzMl90ICop IHBsYWludGV4dCwgLTE2LCAoaW50MzJfdCAqKSBoYXNoKTsNCiAgICAgICAg ICAgIG1lbWNweSgmcmVhZF9maWxlc2l6ZV9tc2IscGxhaW50ZXh0LDQpOw0K ICAgICAgICAgICAgcmVhZF9maWxlc2l6ZSA9IG50b2hsKHJlYWRfZmlsZXNp emVfbXNiKTsNCiAgICAgICAgICAgIC8qIG5vdyB0aGF0IHdlIGtub3cgdGhl IGZpbGVzaXplLiBMZXQncyBjYWxjdWxhdGUgaWYgdGhlICovDQogICAgICAg ICAgICAvKiBpbiBmaWxlIGFjdHVhbGx5IG1hdGNoZXMgaXQuIFRoaXMgaXMg YW4gYXR0ZW1wdCB0byAgICAqLw0KICAgICAgICAgICAgLyogYXZvaWQgc29t ZW9uZSBtYWtpbmcgYW4gImV2aWwiIHh4dCBhbmQgY3JlYXRpbmcgZmlsZXMg Ki8NCiAgICAgICAgICAgIC8qIHRvIGNyYXNoIHNvbWVvbmUgZWxzZXMgImdv b2QiIHZlcnNpb24gYW5kL29yIGNyZWF0ZSAgICovDQogICAgICAgICAgICAv KiBtb25zdGVyIGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLw0KICAgICAgICAgICAgcGFkID0gKDY0IC0gKHJlYWRf ZmlsZXNpemUpICUgNjQpOw0KICAgICAgICAgICAgaWYocGFkIDwgNCkgew0K ICAgICAgICAgICAgICAgIHBhZCArPSA2NDsNCiAgICAgICAgICAgICAgICBp ID0gcmVhZF9maWxlc2l6ZSA7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAg ICAgICAgICAgICAgIGkgPSByZWFkX2ZpbGVzaXplOw0KICAgICAgICAgICAg fQ0KICAgICAgICAgICAgaWYoZmlsZXNpemUgIT0gKGkgKyBwYWQpKSB7DQog ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiB0aGUgZmls ZSBzaXplIGluIHRoZSBoZWFkZXIgaXMgbWlzbWF0Y2hlZCB3aXRoIHRoZSBh Y3R1YWwgc2l6ZS5cbiIpOw0KICAgICAgICAgICAgICAgIGV4aXQoMSk7DQog ICAgICAgICAgICB9DQogICAgICAgICAgICBpZihyZWFkX2ZpbGVzaXplID49 IDYwKSB7DQogICAgICAgICAgICAgICAgd3JpdGUoZmRfb3V0LChjaGFyICop IHBsYWludGV4dCs0LDYwKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAg ICAgICAgICAgICAgd3JpdGUoZmRfb3V0LChjaGFyICopIHBsYWludGV4dCs0 LHJlYWRfZmlsZXNpemUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg YnNmICs9IDY0Ow0KICAgICAgICAgICAgZmlyc3RfYmxvY2sgPSAwOw0KICAg ICAgICB9DQogICAgICAgIHdoaWxlKDAgIT0gKGJ5dGVzX3JlYWQgPSByZWFk KGZkX2luLHBsYWludGV4dCw2NCkpICkgew0KICAgICAgICAgICAgYnRlYSgo aW50MzJfdCAqKSBwbGFpbnRleHQsIC0xNiwgKGludDMyX3QgKikgaGFzaCk7 DQogICAgICAgICAgICBic2YgKz0gNjQ7DQogICAgICAgICAgICBpZihic2Yg PCAocmVhZF9maWxlc2l6ZSArIDQpICYmIHJlYWRfZmlsZXNpemUgPiA2NCkg ew0KICAgICAgICAgICAgICAgIHdyaXRlKGZkX291dCwoY2hhciAqKSBwbGFp bnRleHQsNjQpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg ICAgICBibCA9IDY0IC0gKGJzZiAtIChyZWFkX2ZpbGVzaXplICsgNCkpOyAv KiBjYWxjIGhvdyBtdWNoIGlzIHJlYWxseSBsZWZ0ICovDQogICAgICAgICAg ICAgICAgd3JpdGUoZmRfb3V0LChjaGFyICopIHBsYWludGV4dCxibCk7DQog ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKiBpZiB0 aGV5IHdhbnQgdG8gZGVsZXRlIHRoZSBpbmZpbGUgKi8NCiAgICBpZih1bmxp bmtpdCkNCiAgICAgICAgdW5saW5rKGluX2ZpbGUpOw0KDQogICAgLyogZnJl ZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGFuZCB6ZXJvIG91dCB0 aGUgY29udGVudHMgdG8gKi8NCiAgICAvKiB0cnkgdG8gbWFrZSByZWNvdmVy eSBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHdlIGRpZCBoYXJkZXIgICAq Lw0KICAgIG1lbXNldChpbl9maWxlLDAsc3RybGVuKGluX2ZpbGUpKTsNCiAg ICBmcmVlKGluX2ZpbGUpOw0KICAgIGlmKHVzZV9rcCB8fCB1c2Vfa2UpIHsN CiAgICAgICAgbWVtc2V0KGtleXBocmFzZSwwLHN0cmxlbihrZXlwaHJhc2Up KTsNCiAgICAgICAgZnJlZShrZXlwaHJhc2UpOw0KICAgIH0NCiAgICBpZih1 c2Vfb3V0KSB7DQogICAgICAgIG1lbXNldChvdXRfZmlsZSwwLHN0cmxlbihv dXRfZmlsZSkpOw0KICAgICAgICBmcmVlKG91dF9maWxlKTsNCiAgICB9DQog ICAgaWYodXNlX2ZpbGUpIHsNCiAgICAgICAgbWVtc2V0KGtleWZpbGUsMCxz dHJsZW4oa2V5ZmlsZSkpOw0KICAgICAgICBmcmVlKGtleWZpbGUpOw0KICAg IH0NCiAgICBjbG9zZShmZF9vdXQpOw0KICAgIGNsb3NlKGZkX2luKTsNCiAg ICByZXR1cm4oMCk7DQp9DQoNCnZvaWQgc2hvd2hlbHAodm9pZCkgew0KICAg IHByaW50ZigiXG54eHQgLSBhbiB4eHRlYSBiYXNlZCB2YXJpYWJsZSBibG9j ay1tb2RlIGZpbGUgZW5jcnlwdG9yLlxuIik7DQogICAgcHJpbnRmKCJieSBh bGl2ZXJcblxuIik7DQogICAgcHJpbnRmKCIrLS0tPVsgT3B0aW9ucyBdPS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuIik7DQogICAgcHJpbnRmKCJ8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxu Iik7DQogICAgcHJpbnRmKCJ8IC1oIHByaW50IGhlbHAgICAgICAgIC12IGJl IHZlcmJvc2UgICAgICAgfFxuIik7DQogICAgcHJpbnRmKCJ8IC1pIGlucHV0 X2ZpbGUgICAgICAgIC1vIG91dHB1dF9maWxlICAgICAgfFxuIik7DQogICAg cHJpbnRmKCJ8IC1rIGtleXBocmFzZSAgICAgICAgIC1nIGtleSBlbnZfdmFy aWFibGUgfFxuIik7DQogICAgcHJpbnRmKCJ8IC11IHVubGluayBpbnB1dF9m aWxlIGFmdGVyIGVuY3J5cHRpb24gICAgfFxuIik7DQogICAgcHJpbnRmKCJ8 IC14IGRvbnQgc2V0IHVtYXNrIHRvIGEgc2FmZSB2YWx1ZSAgICAgICAgfFxu Iik7DQogICAgcHJpbnRmKCJ8IEV4YW1wbGU6ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfFxuIik7DQogICAgcHJpbnRmKCJ8IFwieHh0IC1r IHNlY3JldHBhc3MgLWkgdGVzdCAtdVwiICAgICAgICAgICB8XG4iKTsNCiAg ICBwcmludGYoInwgWW91IGdldCBcInRlc3QueHh0XCIgYW5kIGRlbGV0ZXMg XCJ0ZXN0XCIgICAgfFxuIik7DQogICAgcHJpbnRmKCJ8ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuIik7DQogICAgcHJp bnRmKCIrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tK1xuIik7DQoNCn0NCg0KDQovKiBuZWFybHkgYWxsIHRoZSBmb2xsb3dp bmcgeHh0ZWEgY3J5cHRvICovDQovKiBjb2RlIGZyb20gdGhlIHBvc3Qgc2Ny aXB0ICAgICAgICAgICAgICovDQovKiBieSBEYXZpZCBXaGVlbGVyIGFuZCBS b2dlciBOZWVkaGFtICAgICovDQovKiBJJ3ZlIGFsdGVyZWQgaXQgdG8gYmUg bW9yZSBwb3J0YWJsZSAgICovDQovKiBvbiA2NCBiaXQgcGxhdGZvcm1zIGJ5 IG1ha2luZyB1c2Ugb2YgICovDQovKiBkZWZpbml0aW9ucyBpbiBzdGRpbnQu aCAgICAgICAgICAgICAgICovDQpsb25nIGJ0ZWEoIGludDMyX3QgKiB2LCBp bnQzMl90IG4gLCBpbnQzMl90ICogayApIHsNCiAgICB1aW50MzJfdCB6PXZb bi0xXSwgeT12WzBdLCBzdW09MCxlLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBERUxUQT0weDllMzc3OWI5IDsNCiAgICBpbnQzMl90 IHAsIHEgOw0KICAgIGlmICggbj4xKSB7DQogICAgICAgIC8qIENvZGluZyBQ YXJ0ICovDQogICAgICAgIHEgPSA2KzUyL24gOw0KICAgICAgICB3aGlsZSAo IHEtLSA+IDAgKSB7DQogICAgICAgICAgICBzdW0gKz0gREVMVEEgOw0KICAg ICAgICAgICAgZSA9IHN1bSA+PiAyJjMgOw0KICAgICAgICAgICAgZm9yICgg cCA9IDAgOyBwIDwgbi0xIDsgcCsrICkNCiAgICAgICAgICAgICAgICB5ID0g dltwKzFdLA0KICAgICAgICAgICAgICAgICAgICB6ID0gdltwXSArPSBNWA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gdlswXSA7DQog ICAgICAgICAgICB6ID0gdltuLTFdICs9IE1YDQogICAgICAgICAgICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwIDsNCiAg ICB9DQogICAgLyogRGVjb2RpbmcgUGFydCAqLw0KICAgIGVsc2UgaWYgKCBu IDwtMSApIHsNCiAgICAgICAgbiA9IC1uIDsNCiAgICAgICAgcSA9IDYrNTIv biA7DQogICAgICAgIHN1bSA9IHEqREVMVEEgOw0KICAgICAgICB3aGlsZSAo c3VtICE9IDApIHsNCiAgICAgICAgICAgIGUgPSBzdW0+PjIgJiAzIDsNCiAg ICAgICAgICAgIGZvciAocCA9IG4tMSA7IHAgPiAwIDsgcC0tICkNCiAgICAg ICAgICAgICAgICB6ID0gdltwLTFdLA0KICAgICAgICAgICAgICAgICAgICB5 ID0gdltwXSAtPSBNWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB6ID0gdltuLTFdIDsNCiAgICAgICAgICAgIHkgPSB2WzBdIC09IE1YDQog ICAgICAgICAgICAgICAgICAgICAgICBzdW0gLT0gREVMVEEgOw0KICAgICAg ICB9DQogICAgICAgIHJldHVybiAwIDsNCiAgICB9DQogICAgcmV0dXJuIDEg Ow0KfSAvKiBTaWduYWwgbj0wLDEsLTEgKi8NCg0KDQoNCi8qIE1ENSBhbGdv cml0aG0gdXNlZCB0byBoYXNoIHRoZSBrZXlzIGdpdmVuIHRvIHh4dCAqLw0K LyogVGhpcyBzb3VyY2UgY29kZSBoYXMgYmVlbiBhbHRlcmVkIHRvIGJldHRl ciBzdWl0ICovDQovKiBteSBwdXJwb3NlcyAoc3BlZWQsIGFuZCBmb3JtYXR0 aW5nKSBhbmQgSSBhbSBub3cgKi8NCi8qIGRlY2xhcmluZyBpdCBzbyBub2Jv ZHkgaGFzIGEgZml0IGFib3V0IGl0LiBOb3cgICAqLw0KLyogeW91IGNhbiBy ZWFkIFBldGVyJ3Mgbm90aWNlIGJlbG93LiBJdCBvbmx5ICAgICAgICovDQov KiBhcHBsaWVzIHRvIHRoZSBNRDUgaGFzaGluZyBwYXJ0IG9mIHh4dCAhICAg ICAgICAgKi8NCg0KLyoNCiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAy MDAyIEFsYWRkaW4gRW50ZXJwcmlzZXMuICBBbGwgcmlnaHRzIHJlc2VydmVk Lg0KIA0KICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdp dGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZA0KICB3YXJyYW50eS4gIElu IG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9y IGFueSBkYW1hZ2VzDQogIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMg c29mdHdhcmUuDQogDQogIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlv bmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLA0KICBp bmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRl ciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0DQogIGZyZWVseSwgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoNCiANCiAgMS4gVGhlIG9y aWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2Vu dGVkOyB5b3UgbXVzdCBub3QNCiAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUg dGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdh cmUNCiAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0 aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlDQogICAgIGFwcHJl Y2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuDQogIDIuIEFsdGVyZWQgc291 cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwg YW5kIG11c3Qgbm90IGJlDQogICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5n IHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4NCiAgMy4gVGhpcyBub3RpY2UgbWF5 IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRp c3RyaWJ1dGlvbi4NCiANCiAgTC4gUGV0ZXIgRGV1dHNjaA0KICBnaG9zdEBh bGFkZGluLmNvbQ0KIA0KICovDQoNCnN0YXRpYyB2b2lkIG1kNV9wcm9jZXNz KG1kNV9zdGF0ZV90ICpwbXMsIGNvbnN0IG1kNV9ieXRlX3QgKmRhdGEgLypb NjRdKi8pIHsNCiAgICBtZDVfd29yZF90DQogICAgYSA9IHBtcy0+YWJjZFsw XSwgYiA9IHBtcy0+YWJjZFsxXSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgYyA9IHBtcy0+YWJjZFsyXSwgZCA9IHBtcy0+YWJjZFszXTsNCiAgICBt ZDVfd29yZF90IHQ7DQojaWYgQllURV9PUkRFUiA+IDANCiAgICAvKiBEZWZp bmUgc3RvcmFnZSBvbmx5IGZvciBiaWctZW5kaWFuIENQVXMuICovDQogICAg bWQ1X3dvcmRfdCBYWzE2XTsNCiNlbHNlDQovKiBEZWZpbmUgc3RvcmFnZSBm b3IgbGl0dGxlLWVuZGlhbiBvciBib3RoIHR5cGVzIG9mIENQVXMuICovDQog ICAgbWQ1X3dvcmRfdCB4YnVmWzE2XTsNCiAgICBjb25zdCBtZDVfd29yZF90 ICpYOw0KI2VuZGlmDQoNCiAgICB7DQojaWYgQllURV9PUkRFUiA9PSAwDQog ICAgICAgIC8qDQogICAgICAgICAqIERldGVybWluZSBkeW5hbWljYWxseSB3 aGV0aGVyIHRoaXMgaXMgYSBiaWctZW5kaWFuIG9yDQogICAgICAgICAqIGxp dHRsZS1lbmRpYW4gbWFjaGluZSwgc2luY2Ugd2UgY2FuIHVzZSBhIG1vcmUg ZWZmaWNpZW50DQogICAgICAgICAqIGFsZ29yaXRobSBvbiB0aGUgbGF0dGVy Lg0KICAgICAgICAgKi8NCiAgICAgICAgc3RhdGljIGNvbnN0IGludCB3ID0g MTsNCg0KICAgICAgICBpZiAoKigoY29uc3QgbWQ1X2J5dGVfdCAqKSZ3KSkg LyogZHluYW1pYyBsaXR0bGUtZW5kaWFuICovDQojZW5kaWYNCiNpZiBCWVRF X09SREVSIDw9IDAJCS8qIGxpdHRsZS1lbmRpYW4gKi8gDQp7DQogICAgICAg ICAgICAvKg0KICAgICAgICAgICAgICogT24gbGl0dGxlLWVuZGlhbiBtYWNo aW5lcywgd2UgY2FuIHByb2Nlc3MgcHJvcGVybHkgYWxpZ25lZA0KICAgICAg ICAgICAgICogZGF0YSB3aXRob3V0IGNvcHlpbmcgaXQuDQogICAgICAgICAg ICAgKi8NCiAgICAgICAgICAgIGlmICghKChkYXRhIC0gKGNvbnN0IG1kNV9i eXRlX3QgKikwKSAmIDMpKSB7DQogICAgICAgICAgICAgICAgLyogZGF0YSBh cmUgcHJvcGVybHkgYWxpZ25lZCAqLw0KICAgICAgICAgICAgICAgIFggPSAo Y29uc3QgbWQ1X3dvcmRfdCAqKWRhdGE7DQogICAgICAgICAgICB9IGVsc2Ug ew0KICAgICAgICAgICAgICAgIC8qIG5vdCBhbGlnbmVkICovDQogICAgICAg ICAgICAgICAgbWVtY3B5KHhidWYsIGRhdGEsIDY0KTsNCiAgICAgICAgICAg ICAgICBYID0geGJ1ZjsNCiAgICAgICAgICAgIH0NCiAgICB9DQojZW5kaWYN CiNpZiBCWVRFX09SREVSID09IDANCiAgICBlbHNlCQkJLyogZHluYW1pYyBi aWctZW5kaWFuICovDQojZW5kaWYNCiNpZiBCWVRFX09SREVSID49IDAJCS8q IGJpZy1lbmRpYW4gKi8gDQp7DQogICAgICAgIC8qDQogICAgICAgICAqIE9u IGJpZy1lbmRpYW4gbWFjaGluZXMsIHdlIG11c3QgYXJyYW5nZSB0aGUgYnl0 ZXMgaW4gdGhlDQogICAgICAgICAqIHJpZ2h0IG9yZGVyLg0KICAgICAgICAg Ki8NCiAgICAgICAgY29uc3QgbWQ1X2J5dGVfdCAqeHAgPSBkYXRhOw0KICAg IGludCBpOw0KDQojICBpZiBCWVRFX09SREVSID09IDANCiAgICBYID0geGJ1 ZjsJCS8qIChkeW5hbWljIG9ubHkpICovDQojICBlbHNlDQojICAgIGRlZmlu ZSB4YnVmIFgJCS8qIChzdGF0aWMgb25seSkgKi8NCiMgIGVuZGlmDQogICAg Zm9yIChpID0gMDsgaSA8IDE2OyArK2ksIHhwICs9IDQpDQogICAgICAgIHhi dWZbaV0gPSB4cFswXSArICh4cFsxXSA8PCA4KSArICh4cFsyXSA8PCAxNikg KyAoeHBbM10gPDwgMjQpOw0KfQ0KI2VuZGlmDQp9DQoNCiNkZWZpbmUgUk9U QVRFX0xFRlQoeCwgbikgKCgoeCkgPDwgKG4pKSB8ICgoeCkgPj4gKDMyIC0g KG4pKSkpDQoNCi8qIFJvdW5kIDEuICovDQovKiBMZXQgW2FiY2QgayBzIGld IGRlbm90ZSB0aGUgb3BlcmF0aW9uDQogICBhID0gYiArICgoYSArIEYoYixj LGQpICsgWFtrXSArIFRbaV0pIDw8PCBzKS4gKi8NCiNkZWZpbmUgRih4LCB5 LCB6KSAoKCh4KSAmICh5KSkgfCAofih4KSAmICh6KSkpDQojZGVmaW5lIFNF VChhLCBiLCBjLCBkLCBrLCBzLCBUaSlcDQp0ID0gYSArIEYoYixjLGQpICsg WFtrXSArIFRpO1wNCmEgPSBST1RBVEVfTEVGVCh0LCBzKSArIGINCi8qIERv IHRoZSBmb2xsb3dpbmcgMTYgb3BlcmF0aW9ucy4gKi8NClNFVChhLCBiLCBj LCBkLCAgMCwgIDcsICBUMSk7DQpTRVQoZCwgYSwgYiwgYywgIDEsIDEyLCAg VDIpOw0KU0VUKGMsIGQsIGEsIGIsICAyLCAxNywgIFQzKTsNClNFVChiLCBj LCBkLCBhLCAgMywgMjIsICBUNCk7DQpTRVQoYSwgYiwgYywgZCwgIDQsICA3 LCAgVDUpOw0KU0VUKGQsIGEsIGIsIGMsICA1LCAxMiwgIFQ2KTsNClNFVChj LCBkLCBhLCBiLCAgNiwgMTcsICBUNyk7DQpTRVQoYiwgYywgZCwgYSwgIDcs IDIyLCAgVDgpOw0KU0VUKGEsIGIsIGMsIGQsICA4LCAgNywgIFQ5KTsNClNF VChkLCBhLCBiLCBjLCAgOSwgMTIsIFQxMCk7DQpTRVQoYywgZCwgYSwgYiwg MTAsIDE3LCBUMTEpOw0KU0VUKGIsIGMsIGQsIGEsIDExLCAyMiwgVDEyKTsN ClNFVChhLCBiLCBjLCBkLCAxMiwgIDcsIFQxMyk7DQpTRVQoZCwgYSwgYiwg YywgMTMsIDEyLCBUMTQpOw0KU0VUKGMsIGQsIGEsIGIsIDE0LCAxNywgVDE1 KTsNClNFVChiLCBjLCBkLCBhLCAxNSwgMjIsIFQxNik7DQojdW5kZWYgU0VU DQoNCi8qIFJvdW5kIDIuICovDQovKiBMZXQgW2FiY2QgayBzIGldIGRlbm90 ZSB0aGUgb3BlcmF0aW9uDQogICAgIGEgPSBiICsgKChhICsgRyhiLGMsZCkg KyBYW2tdICsgVFtpXSkgPDw8IHMpLiAqLw0KI2RlZmluZSBHKHgsIHksIHop ICgoKHgpICYgKHopKSB8ICgoeSkgJiB+KHopKSkNCiNkZWZpbmUgU0VUKGEs IGIsIGMsIGQsIGssIHMsIFRpKVwNCnQgPSBhICsgRyhiLGMsZCkgKyBYW2td ICsgVGk7XA0KYSA9IFJPVEFURV9MRUZUKHQsIHMpICsgYg0KLyogRG8gdGhl IGZvbGxvd2luZyAxNiBvcGVyYXRpb25zLiAqLw0KU0VUKGEsIGIsIGMsIGQs ICAxLCAgNSwgVDE3KTsNClNFVChkLCBhLCBiLCBjLCAgNiwgIDksIFQxOCk7 DQpTRVQoYywgZCwgYSwgYiwgMTEsIDE0LCBUMTkpOw0KU0VUKGIsIGMsIGQs IGEsICAwLCAyMCwgVDIwKTsNClNFVChhLCBiLCBjLCBkLCAgNSwgIDUsIFQy MSk7DQpTRVQoZCwgYSwgYiwgYywgMTAsICA5LCBUMjIpOw0KU0VUKGMsIGQs IGEsIGIsIDE1LCAxNCwgVDIzKTsNClNFVChiLCBjLCBkLCBhLCAgNCwgMjAs IFQyNCk7DQpTRVQoYSwgYiwgYywgZCwgIDksICA1LCBUMjUpOw0KU0VUKGQs IGEsIGIsIGMsIDE0LCAgOSwgVDI2KTsNClNFVChjLCBkLCBhLCBiLCAgMywg MTQsIFQyNyk7DQpTRVQoYiwgYywgZCwgYSwgIDgsIDIwLCBUMjgpOw0KU0VU KGEsIGIsIGMsIGQsIDEzLCAgNSwgVDI5KTsNClNFVChkLCBhLCBiLCBjLCAg MiwgIDksIFQzMCk7DQpTRVQoYywgZCwgYSwgYiwgIDcsIDE0LCBUMzEpOw0K U0VUKGIsIGMsIGQsIGEsIDEyLCAyMCwgVDMyKTsNCiN1bmRlZiBTRVQNCg0K LyogUm91bmQgMy4gKi8NCi8qIExldCBbYWJjZCBrIHMgdF0gZGVub3RlIHRo ZSBvcGVyYXRpb24NCiAgICAgYSA9IGIgKyAoKGEgKyBIKGIsYyxkKSArIFhb a10gKyBUW2ldKSA8PDwgcykuICovDQojZGVmaW5lIEgoeCwgeSwgeikgKCh4 KSBeICh5KSBeICh6KSkNCiNkZWZpbmUgU0VUKGEsIGIsIGMsIGQsIGssIHMs IFRpKVwNCnQgPSBhICsgSChiLGMsZCkgKyBYW2tdICsgVGk7XA0KYSA9IFJP VEFURV9MRUZUKHQsIHMpICsgYg0KLyogRG8gdGhlIGZvbGxvd2luZyAxNiBv cGVyYXRpb25zLiAqLw0KU0VUKGEsIGIsIGMsIGQsICA1LCAgNCwgVDMzKTsN ClNFVChkLCBhLCBiLCBjLCAgOCwgMTEsIFQzNCk7DQpTRVQoYywgZCwgYSwg YiwgMTEsIDE2LCBUMzUpOw0KU0VUKGIsIGMsIGQsIGEsIDE0LCAyMywgVDM2 KTsNClNFVChhLCBiLCBjLCBkLCAgMSwgIDQsIFQzNyk7DQpTRVQoZCwgYSwg YiwgYywgIDQsIDExLCBUMzgpOw0KU0VUKGMsIGQsIGEsIGIsICA3LCAxNiwg VDM5KTsNClNFVChiLCBjLCBkLCBhLCAxMCwgMjMsIFQ0MCk7DQpTRVQoYSwg YiwgYywgZCwgMTMsICA0LCBUNDEpOw0KU0VUKGQsIGEsIGIsIGMsICAwLCAx MSwgVDQyKTsNClNFVChjLCBkLCBhLCBiLCAgMywgMTYsIFQ0Myk7DQpTRVQo YiwgYywgZCwgYSwgIDYsIDIzLCBUNDQpOw0KU0VUKGEsIGIsIGMsIGQsICA5 LCAgNCwgVDQ1KTsNClNFVChkLCBhLCBiLCBjLCAxMiwgMTEsIFQ0Nik7DQpT RVQoYywgZCwgYSwgYiwgMTUsIDE2LCBUNDcpOw0KU0VUKGIsIGMsIGQsIGEs ICAyLCAyMywgVDQ4KTsNCiN1bmRlZiBTRVQNCg0KLyogUm91bmQgNC4gKi8N Ci8qIExldCBbYWJjZCBrIHMgdF0gZGVub3RlIHRoZSBvcGVyYXRpb24NCiAg ICAgYSA9IGIgKyAoKGEgKyBJKGIsYyxkKSArIFhba10gKyBUW2ldKSA8PDwg cykuICovDQojZGVmaW5lIEkoeCwgeSwgeikgKCh5KSBeICgoeCkgfCB+KHop KSkNCiNkZWZpbmUgU0VUKGEsIGIsIGMsIGQsIGssIHMsIFRpKVwNCnQgPSBh ICsgSShiLGMsZCkgKyBYW2tdICsgVGk7XA0KYSA9IFJPVEFURV9MRUZUKHQs IHMpICsgYg0KLyogRG8gdGhlIGZvbGxvd2luZyAxNiBvcGVyYXRpb25zLiAq Lw0KU0VUKGEsIGIsIGMsIGQsICAwLCAgNiwgVDQ5KTsNClNFVChkLCBhLCBi LCBjLCAgNywgMTAsIFQ1MCk7DQpTRVQoYywgZCwgYSwgYiwgMTQsIDE1LCBU NTEpOw0KU0VUKGIsIGMsIGQsIGEsICA1LCAyMSwgVDUyKTsNClNFVChhLCBi LCBjLCBkLCAxMiwgIDYsIFQ1Myk7DQpTRVQoZCwgYSwgYiwgYywgIDMsIDEw LCBUNTQpOw0KU0VUKGMsIGQsIGEsIGIsIDEwLCAxNSwgVDU1KTsNClNFVChi LCBjLCBkLCBhLCAgMSwgMjEsIFQ1Nik7DQpTRVQoYSwgYiwgYywgZCwgIDgs ICA2LCBUNTcpOw0KU0VUKGQsIGEsIGIsIGMsIDE1LCAxMCwgVDU4KTsNClNF VChjLCBkLCBhLCBiLCAgNiwgMTUsIFQ1OSk7DQpTRVQoYiwgYywgZCwgYSwg MTMsIDIxLCBUNjApOw0KU0VUKGEsIGIsIGMsIGQsICA0LCAgNiwgVDYxKTsN ClNFVChkLCBhLCBiLCBjLCAxMSwgMTAsIFQ2Mik7DQpTRVQoYywgZCwgYSwg YiwgIDIsIDE1LCBUNjMpOw0KU0VUKGIsIGMsIGQsIGEsICA5LCAyMSwgVDY0 KTsNCiN1bmRlZiBTRVQNCg0KLyogVGhlbiBwZXJmb3JtIHRoZSBmb2xsb3dp bmcgYWRkaXRpb25zLiAoVGhhdCBpcyBpbmNyZW1lbnQgZWFjaA0KICAgb2Yg dGhlIGZvdXIgcmVnaXN0ZXJzIGJ5IHRoZSB2YWx1ZSBpdCBoYWQgYmVmb3Jl IHRoaXMgYmxvY2sNCiAgIHdhcyBzdGFydGVkLikgKi8NCnBtcy0+YWJjZFsw XSArPSBhOw0KICAgICAgICAgICAgICAgIHBtcy0+YWJjZFsxXSArPSBiOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbXMtPmFiY2RbMl0g Kz0gYzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBtcy0+YWJjZFszXSArPSBkOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgbWQ1X2luaXQobWQ1 X3N0YXRlX3QgKnBtcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbXMt PmNvdW50WzBdID0gcG1zLT5jb3VudFsxXSA9IDA7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBtcy0+YWJjZFswXSA9IDB4Njc0NTIzMDE7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBtcy0+YWJjZFsxXSA9IC8qMHhlZmNkYWI4OSov IFRfTUFTSyBeIDB4MTAzMjU0NzY7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBtcy0+YWJjZFsyXSA9IC8qMHg5OGJhZGNmZSovIFRfTUFTSyBeIDB4Njc0 NTIzMDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtcy0+YWJjZFszXSA9 IDB4MTAzMjU0NzY7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCBtZDVfYXBwZW5kKG1kNV9zdGF0ZV90ICpwbXMs IGNvbnN0IG1kNV9ieXRlX3QgKmRhdGEsIGludCBuYnl0ZXMpIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbWQ1X2J5dGVfdCAqcCA9IGRhdGE7 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZWZ0ID0gbmJ5dGVzOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKHBtcy0+Y291 bnRbMF0gPj4gMykgJiA2MzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1 X3dvcmRfdCBuYml0cyA9IChtZDVfd29yZF90KShuYnl0ZXMgPDwgMyk7DQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ieXRlcyA8PSAwKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgbWVzc2FnZSBsZW5ndGguICov DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBtcy0+Y291bnRbMV0gKz0gbmJ5 dGVzID4+IDI5Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbXMtPmNvdW50 WzBdICs9IG5iaXRzOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG1z LT5jb3VudFswXSA8IG5iaXRzKQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcG1zLT5jb3VudFsxXSsrOw0KDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFByb2Nlc3MgYW4gaW5pdGlhbCBwYXJ0aWFsIGJsb2NrLiAqLw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0KSB7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgY29weSA9IChvZmZzZXQgKyBuYnl0ZXMg PiA2NCA/IDY0IC0gb2Zmc2V0IDogbmJ5dGVzKTsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWVtY3B5KHBtcy0+YnVmICsgb2Zmc2V0LCBwLCBj b3B5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQg KyBjb3B5IDwgNjQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBjb3B5 Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSBjb3B5Ow0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1X3Byb2Nlc3MocG1zLCBw bXMtPmJ1Zik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGZ1bGwgYmxvY2tzLiAqLw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbGVmdCA+PSA2NDsgcCAr PSA2NCwgbGVmdCAtPSA2NCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1kNV9wcm9jZXNzKHBtcywgcCk7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUHJvY2VzcyBhIGZpbmFsIHBhcnRpYWwgYmxvY2suICovDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0KQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWVtY3B5KHBtcy0+YnVmLCBwLCBsZWZ0KTsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG1k NV9maW5pc2gobWQ1X3N0YXRlX3QgKnBtcywgbWQ1X2J5dGVfdCBkaWdlc3Rb MTZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBt ZDVfYnl0ZV90IHBhZFs2NF0gPSB7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWQ1X2J5dGVfdCBkYXRhWzhdOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgaTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT YXZlIHRoZSBsZW5ndGggYmVmb3JlIHBhZGRpbmcuICovDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gKG1kNV9ieXRlX3QpKHBt cy0+Y291bnRbaSA+PiAyXSA+PiAoKGkgJiAzKSA8PCAzKSk7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFBhZCB0byA1NiBieXRlcyBtb2QgNjQuICov DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1kNV9hcHBlbmQocG1zLCBwYWQs ICgoNTUgLSAocG1zLT5jb3VudFswXSA+PiAzKSkgJiA2MykgKyAxKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQXBwZW5kIHRoZSBsZW5ndGguICov DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1kNV9hcHBlbmQocG1zLCBkYXRh LCA4KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IDE2OyArK2kpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3Rb aV0gPSAobWQ1X2J5dGVfdCkocG1zLT5hYmNkW2kgPj4gMl0gPj4gKChpICYg MykgPDwgMykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0K ---1062731517-1887128600-1030535739=:215259--
Current thread:
- XXT version 2 - Trash talking challege version ;-) full-disclosure () lists netsys com (Aug 28)