From Daniel.Stenberg@sth.frontec.se Fri Jul 24 09:06 CDT 1998 Received: from latour.sth.frontec.se (pc252.frontec.se [193.13.194.252]) by landfield.com (8.9.0/8.9.0) with ESMTP id JAA02673 for ; Fri, 24 Jul 1998 09:06:22 -0500 (CDT) Received: from metal (metal.sth1.frontec.se [193.12.206.10]) by latour.sth.frontec.se (8.8.0/8.6.6) with SMTP id QAA03785 for ; Fri, 24 Jul 1998 16:03:20 +0200 (MET DST) Date: Fri, 24 Jul 1998 16:03:18 +0200 (MET DST) From: Daniel Stenberg X-Sender: dast@metal To: Kent Landfield Subject: hypermail *FIXED* Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-851401618-901288998=:17635" X-Lines: 2420 Content-Length: 146654 Status: OR ---559023410-851401618-901288998=:17635 Content-Type: TEXT/PLAIN; charset="US-ASCII" X-Sun-Content-Length: 432 Hi I'm sorry I caused those problems. I'm sending you the only two files I changed to get your test mail archive to get processed successfully. Clearly, I was just lucky my first implementation worked on my examples. Just get back if there's anything more I can do before the new beta release! -- Daniel Stenberg - http://www.fts.frontec.se/~dast ech`echo xiun|tr nu oc|sed 'sx\([sx]\)\([xoi]\)xo un\2\1 is xg'`ol ---559023410-851401618-901288998=:17635 Content-Type: TEXT/PLAIN; charset="US-ASCII"; name="parse.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Disposition: attachment; filename="parse.c" X-Sun-Content-Length: 92053 LyogDQoqKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgRW50ZXJwcmlzZSBJ bnRlZ3JhdGlvbiBUZWNobm9sb2dpZXMgQ29ycC4NCioqICAgICAgICAgVmVy aUZvbmUgSW5jLi9IZXdsZXR0LVBhY2thcmQuIEFsbCBSaWdodHMgUmVzZXJ2 ZWQuDQoqKiBLZXZpbiBIdWdoZXMsIGtldkBrZXZjb20uY29tIDMvMTEvOTQN CioqIEtlbnQgTGFuZGZpZWxkLCBrZW50QGxhbmRmaWVsZC5jb20gNC82Lzk3 DQoqKiANCioqIFRoaXMgcHJvZ3JhbSBhbmQgbGlicmFyeSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgDQoqKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgKExpYnJhcnkp IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgDQoqKiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiANCioqIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4g DQoqKiANCioqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCANCioqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mIA0KKiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIA0KKiogR05VIChMaWJyYXJ5 KSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuIA0K KiogDQoqKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgKExpYnJhcnkpIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCioqIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlIA0KKiogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl IFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBV U0EgDQoqLw0KDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8 c3lzL3N0YXQuaD4NCiNpbmNsdWRlIDxmY250bC5oPg0KDQojaW5jbHVkZSAi aHlwZXJtYWlsLmgiDQojaW5jbHVkZSA8Y3R5cGUuaD4NCiNpbmNsdWRlIDxl cnJuby5oPg0KDQojZGVmaW5lIFBBVEhfU0VQQVJBVE9SICcvJw0KDQp0eXBl ZGVmIGVudW0gew0KICAgIEVOQ09ERV9OT1JNQUwsDQogICAgRU5DT0RFX1FQ LCAgICAgLyogcXVvdGVkIHByaW50YWJsZSAqLw0KDQogICAgRU5DT0RFX01V TFRJTElORUQsIC8qIHRoaXMgaXMgbm90IGEgcmVhbCB0eXBlLCBidXQganVz dCBhIHNlcGFyYXRvciBzaG93aW5nICAgICAgICAgICAgICAgICAgICAgICAg ICB0aGF0IHRoZSB0eXBlcyBiZWxvdyBhcmUgZW5jb2RlZCBpbiBhIHdheSB0 aGF0IG1ha2VzDQogICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBsaW5l IGluIHRoZSBpbmRhdGEgbWF5IGJlY29tZSBvbmUgb3IgbW9yZSBsaW5lcw0K ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgb3V0ZGF0YSAqLw0K DQogICAgRU5DT0RFX0JBU0U2NCwgLyogYmFzZTY0ICovDQogICAgRU5DT0RF X1VVRU5DT0RFLCAvKiB3ZWxsLCBpdCBzZWVtcyB0aGVyZSBleGlzdCBzb21l IGtpbmQgb2Ygc2VtaS1zdGFuZGFyZA0KICAgICAgICAgICAgICAgICAgICAg ICAgZm9yIHV1LWVuY29kZWQgYXR0YWNobWVudHMuICovDQogDQogICAgRU5D T0RFX1VOS05PV04gLyogbXVzdCBiZSB0aGUgbGFzdCBvbmUgKi8NCn0gRW5j b2RlVHlwZTsNCg0KdHlwZWRlZiBlbnVtIHsNCiAgICBDT05URU5UX1RFWFQs ICAgLyogbm9ybWFsIG1haWxzIGFyZSB0ZXh0IGJhc2VkIGRlZmF1bHQgKi8N CiAgICBDT05URU5UX0JJTkFSWSwgLyogdGhpcyBraW5kIHdlIHN0b3JlIHNl cGFyYXRlbHkgYW5kIGhyZWYgdG8gKi8NCiAgICBDT05URU5UX0hUTUwsICAg LyogdGhpcyBpcyBodG1sIGZvcm1hdGVkIHRleHQgKi8NCiAgICBDT05URU5U X0lHTk9SRSwgLyogZG9uJ3QgY2FyZSBhYm91dCB0aGlzIGNvbnRlbnQgKi8N Cg0KICAgIENPTlRFTlRfVU5LTk9XTiAvKiBtdXN0IGJlIHRoZSBsYXN0IG9u ZSAqLw0KfSBDb250ZW50VHlwZTsNCg0KDQppbnQgaWdub3JlY29udGVudChj aGFyICp0eXBlKQ0Kew0KICAgcmV0dXJuIChpbmxpc3QoaWdub3JlX3R5cGVz LCB0eXBlKSk7DQp9DQoNCmludCBpbmxpbmVjb250ZW50KGNoYXIgKnR5cGUp DQp7DQogICByZXR1cm4gKGlubGlzdChpbmxpbmVfdHlwZXMsIHR5cGUpKTsN Cn0NCg0KaW50IHByZWZlcmVkY29udGVudChjaGFyICp0eXBlKQ0Kew0KICAv KiBXZSBsZXQgcGxhaW4gdGV4dCByZW1haW4gUFJFRkVSRUQgYXQgYWxsIHRp bWVzICovDQogIGlmKCFzdHJjYXNlY21wKCJ0ZXh0L3BsYWluIiwgdHlwZSkp DQogICAgcmV0dXJuOw0KDQogIGlmKHByZWZlcmVkX3R5cGVzKSB7DQogICAg cmV0dXJuIChpbmxpc3QocHJlZmVyZWRfdHlwZXMsIHR5cGUpKTsNCiAgfQ0K ICByZXR1cm4gMDsNCn0NCg0KY2hhciAqdG1wbmFtZShjaGFyICpkaXIsIGNo YXIgKnBmeCkNCnsNCiAgICBpbnQgc3ZlcnJubzsNCiAgICBjaGFyICpmLCAq bmFtZTsNCiAgICBzdGF0aWMgY250ciA9IDA7DQoNCiAgICBjaGFyICpta3Rl bXAoY2hhciAqdGVtcGxhdGUpOw0KDQogICAgaWYgKChuYW1lID0gbWFsbG9j KE1BWExJTkUpKSA9PSBOVUxMKQ0KICAgICAgICAgIHJldHVybihOVUxMKTsN Cg0KICAgIHNwcmludGYobmFtZSwgIiVzLyVzJWRYWFhYWFgiLCBkaXIsIHBm eCwgY250cisrKTsNCg0KICAgIGlmICgoZiA9IG1rdGVtcChuYW1lKSkgIT0g TlVMTCkNCiAgICAgICAgcmV0dXJuKGYpOw0KDQogICAgc3ZlcnJubyA9IGVy cm5vOw0KICAgIGZyZWUobmFtZSk7DQogICAgZXJybm8gPSBzdmVycm5vOw0K ICAgIHJldHVybihOVUxMKTsNCn0NCg0KLyoNCioqIENyb3NzLWluZGV4ZXMg LSBhZGRzIHRvIGEgbGlzdCBvZiByZXBsaWVzLiBJZiBhIG1lc3NhZ2UgaXMg YSByZXBseSB0bw0KKiogYW5vdGhlciwgdGhlIG51bWJlciBvZiB0aGUgbWVz c2dlIGl0J3MgcmVwbHlpbmcgdG8gaXMgYWRkZWQgdG8gdGhlIGxpc3QuDQoq KiBUaGlzIGxpc3QgaXMgc2VhcmNoZWQgdXBvbiBwcmludGluZy4NCiovDQoN CnZvaWQgY3Jvc3NpbmRleCgpDQp7DQogICAgaW50IG51bSwgc3RhdHVzLCBt YXliZXJlcGx5Ow0KICAgIGNoYXIgbmFtZVtOQU1FU1RSTEVOXSwgc3ViamVj dFtTVUJKU1RSTEVOXSwgZW1haWxbTUFJTFNUUkxFTl0sDQogICAgICAgIGlu cmVwbHlbUkVQWVNUUkxFTl0sIGRhdGVbREFURVNUUkxFTl0sIGZyb21kYXRl W0RBVEVTVFJMRU5dLA0KICAgICAgICBtc2dpZFtNU0dEU1RSTEVOXTsNCg0K ICAgIG51bSA9IDA7DQogICAgcmVwbHlsaXN0ID0gTlVMTDsNCg0KICAgIHdo aWxlIChoYXNobnVtbG9va3VwKG51bSxuYW1lLGVtYWlsLHN1YmplY3QsaW5y ZXBseSxkYXRlLGZyb21kYXRlLG1zZ2lkKSAhPSBOVUxMKSB7DQogICAgICAg IGlmIChpbnJlcGx5WzBdICE9ICdcMCcpIHsNCiAgICAgICAgICAgIHN0YXR1 cyA9IGhhc2hyZXBseW51bWxvb2t1cChpbnJlcGx5LCAmbWF5YmVyZXBseSk7 DQogICAgICAgICAgICBpZiAoc3RhdHVzICE9IC0xKQ0KICAgICAgICAgICAg ICAgIHJlcGx5bGlzdCA9IChzdHJ1Y3QgcmVwbHkgKikNCiAgICAgICAgICAg ICAgICBhZGRyZXBseShyZXBseWxpc3Qsc3RhdHVzLG51bSxuYW1lLHN1Ympl Y3QsbWF5YmVyZXBseSk7DQogICAgICAgIH0NCiAgICAgICAgbnVtKys7DQog ICAgfQ0KfQ0KDQovKiANCioqIFJlY3Vyc2l2ZWx5IGNoZWNrcyBmb3IgcmVw bGllcyB0byByZXBsaWVzIHRvIGEgbWVzc2FnZSwgZXRjLg0KKiogUmVwbGll cyBhcmUgYWRkZWQgdG8gdGhlIHRocmVhZCBsaXN0Lg0KKi8NCg0Kdm9pZCBj cm9zc2luZGV4dGhyZWFkMihpbnQgbnVtKQ0Kew0KICAgIHN0cnVjdCByZXBs eSAqcnA7DQoNCiAgICBmb3IgKHJwID0gcmVwbHlsaXN0OyBycCAhPSBOVUxM OyBycCA9IHJwLT5uZXh0KSB7DQogICAgICAgIGlmIChycC0+bXNnbnVtID09 IG51bSkgew0KICAgICAgICAgICAgdGhyZWFkbGlzdCA9IChzdHJ1Y3QgcmVw bHkgKilhZGRyZXBseSh0aHJlYWRsaXN0LCBycC0+ZnJvbW1zZ251bSwgDQog ICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sIHJwLT5uYW1lLCBycC0+ c3ViamVjdCwgMCk7DQogICAgICAgICAgICBwcmludGVkbGlzdCA9IChzdHJ1 Y3QgcHJpbnRlZCAqKQ0KICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Fz cHJpbnRlZChwcmludGVkdGhyZWFkbGlzdCwgcnAtPmZyb21tc2dudW0pOw0K ICAgICAgICAgICAgY3Jvc3NpbmRleHRocmVhZDIocnAtPmZyb21tc2dudW0p Ow0KICAgICAgICB9DQogICAgfQ0KfQ0KDQoNCi8qDQoqKiBGaXJzdCwgcHJp bnQgb3V0IHRoZSB0aHJlYWRzIGluIG9yZGVyIGJ5IGRhdGUuLi4NCioqIEVh Y2ggbWVzc2FnZSBudW1iZXIgaXMgYXBwZW5kZWQgdG8gYSB0aHJlYWQgbGlz dC4gVGhyZWFkcyBhbmQgaW5kaXZpZHVhbA0KKiogbWVzc2FnZXMgYXJlIHNl cGFyYXRlZCBieSBhIC0xLg0KKi8NCg0Kdm9pZCBjcm9zc2luZGV4dGhyZWFk MShzdHJ1Y3QgaGVhZGVyICpocCkNCnsNCiAgICBpbnQgaGFzcmVwbHk7DQog ICAgc3RydWN0IHJlcGx5ICpycDsNCg0KICAgIGlmIChocCAhPSBOVUxMKSB7 DQogICAgICAgIGNyb3NzaW5kZXh0aHJlYWQxKGhwLT5sZWZ0KTsNCg0KICAg ICAgICBmb3IgKGhhc3JlcGx5ID0gMCwgcnAgPSByZXBseWxpc3Q7IHJwICE9 IE5VTEw7IHJwID0gcnAtPm5leHQpIHsNCiAgICAgICAgICAgICBpZiAocnAt PmZyb21tc2dudW0gPT0gaHAtPm1zZ251bSkgew0KICAgICAgICAgICAgICAg ICBoYXNyZXBseSA9IDE7DQogICAgICAgICAgICAgICAgIGJyZWFrOw0KICAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmICghaGFzcmVw bHkgJiYgIXdhc3ByaW50ZWQocHJpbnRlZHRocmVhZGxpc3QsIGhwLT5tc2du dW0pKSB7DQogICAgICAgICAgICB0aHJlYWRsaXN0ID0gKHN0cnVjdCByZXBs eSAqKQ0KICAgICAgICAgICAgICBhZGRyZXBseSh0aHJlYWRsaXN0LGhwLT5t c2dudW0saHAtPm1zZ251bSxocC0+bmFtZSxocC0+c3ViamVjdCwwKTsNCiAg ICAgICAgICAgIGNyb3NzaW5kZXh0aHJlYWQyKGhwLT5tc2dudW0pOw0KICAg ICAgICAgICAgICB0aHJlYWRsaXN0ID0gKHN0cnVjdCByZXBseSAqKWFkZHJl cGx5KHRocmVhZGxpc3QsLTEsLTEsIiAiLCIgIiwwKTsNCiAgICAgICAgfQ0K DQogICAgICAgIGNyb3NzaW5kZXh0aHJlYWQxKGhwLT5yaWdodCk7DQogICAg fQ0KfQ0KDQovKg0KKiogR3JhYnMgdGhlIGRhdGUgc3RyaW5nIGZyb20gYSBE YXRlOiBoZWFkZXIuDQoqLw0KDQpjaGFyICpnZXRtYWlsZGF0ZShjaGFyICps aW5lKQ0Kew0KICAgIGludCBpOw0KICAgIGludCBsZW47DQogICAgY2hhciAq YzsNCiAgICBzdGF0aWMgY2hhciBkYXRlW0RBVEVTVFJMRU5dOw0KDQogICAg YyA9IChjaGFyICopIHN0cmNocihsaW5lLCAnOicpOw0KICAgIGlmICgoKihj ICsgMSkgJiYgKihjICsgMSkgPT0gJ1xuJykgfHwgKCooYyArIDIpICYmICoo YyArIDIpID09ICdcbicpKSB7DQogICAgICAgIHN0cmNweShkYXRlLCBOT0RB VEUpOw0KICAgICAgICByZXR1cm4gZGF0ZTsNCiAgICB9DQogICAgYyArPSAy Ow0KICAgIHdoaWxlICgqYyA9PSAnICcgfHwgKmMgPT0gJ1x0JykNCiAgICAg ICAgYysrOw0KICAgIGZvciAoaSA9IDAsIGxlbiA9IERBVEVTVFJMRU4tMTsg KmMgJiYgKmMgIT0gJ1xuJyAmJiBpIDwgbGVuOyBjKyspDQogICAgICAgIGRh dGVbaSsrXSA9ICpjOw0KICAgIGRhdGVbaV0gPSAnXDAnOw0KDQogICAgcmV0 dXJuIGRhdGU7DQp9DQoNCi8qDQoqKiBHcmFicyB0aGUgZGF0ZSBzdHJpbmcg ZnJvbSBhIEZyb20gYXJ0aWNsZSBzZXBhcmF0b3IuDQoqLw0KDQpjaGFyICpn ZXRmcm9tZGF0ZShjaGFyICpsaW5lKQ0Kew0KICAgIHN0YXRpYyBjaGFyIHRt cGRhdGVbREFURVNUUkxFTl07DQogICAgaW50IGk7DQogICAgaW50IGxlbjsN CiAgICBjaGFyICpjID0gTlVMTDsNCg0KICAgIGZvciAoaSA9IDA7IGRheXNb aV0gIT0gTlVMTCAmJiANCiAgICAgICAgKChjID0gKGNoYXIgKikgc3Ryc3Ry KGxpbmUsIGRheXNbaV0pKSA9PSBOVUxMKTsgaSsrKQ0KICAgICAgICA7DQog ICAgaWYgKGRheXNbaV0gPT0gTlVMTCkNCiAgICAgICAgdG1wZGF0ZVswXSA9 ICdcMCc7DQogICAgZWxzZSB7DQogICAgICAgIGZvciAoaSA9IDAsIGxlbiA9 IERBVEVTVFJMRU4tMTsgKmMgJiYgKmMgIT0gJ1xuJyAmJiBpIDwgbGVuOyBj KyspDQogICAgICAgICAgICAgdG1wZGF0ZVtpKytdID0gKmM7DQoNCiAgICAg ICAgdG1wZGF0ZVtpXSA9ICdcMCc7DQoNCiAgICAgICAgaWYgKHRtcGRhdGVb MTZdICE9ICc6Jykgew0KICAgICAgICAgICAgICAgIHRtcGRhdGVbMTZdID0g JzonOw0KICAgICAgICAgICAgICAgIHRtcGRhdGVbMTddID0gJzAnOw0KICAg ICAgICAgICAgICAgIHRtcGRhdGVbMThdID0gJzAnOw0KICAgICAgICAgICAg ICAgIHRtcGRhdGVbMTldID0gJyAnOw0KICAgICAgICAgICAgICAgIHRtcGRh dGVbMjBdID0gdGhpc3llYXJbMF07DQogICAgICAgICAgICAgICAgdG1wZGF0 ZVsyMV0gPSB0aGlzeWVhclsxXTsNCiAgICAgICAgICAgICAgICB0bXBkYXRl WzIyXSA9IHRoaXN5ZWFyWzJdOw0KICAgICAgICAgICAgICAgIHRtcGRhdGVb MjNdID0gdGhpc3llYXJbM107DQogICAgICAgICAgICAgICAgdG1wZGF0ZVsy NF0gPSAnXDAnOw0KICAgICAgICB9DQogICAgICAgIHNwcmludGYodG1wZGF0 ZSwgIiVzICVzIiwgdG1wZGF0ZSwgdGltZXpvbmVzdHIpOw0KICAgICAgICBy ZXR1cm4gdG1wZGF0ZTsNCiAgICB9DQoNCiAgICByZXR1cm4gdG1wZGF0ZTsN Cn0NCg0KDQovKg0KKiogR3JhYnMgdGhlIG5hbWUgYW5kIGVtYWlsIGFkZHJl c3MgZnJvbSBhIEZyb206IGhlYWRlci4NCioqIFRoaXMgY291bGQgZ2V0IHRy aWNreTsgSSd2ZSB0cmllZCB0byBrZWVwIGl0IHNpbXBsZS4NCioqIFNob3Vs ZCBiZSBhYmxlIHRvIGhhbmRsZSBhbGwgdGhlIGFkZHJlc3NlcyBiZWxvdzoN CioqDQoqKiAgIEZyb206IHVzZXIgICAgICAgICAgICAgICAgICAgW25vIEBd DQoqKiAgIEZyb206IGtlbnQgKEtlbnQgTGFuZGZpZWxkKSAgW25vIEAgLSB3 aXRoIGNvbW1lbnRdDQoqKiAgIEZyb206IDx1c2VyQG5vZGUuZG9tYWluPiAg ICAgW25vIHRleHQgbmFtZSwgdXNlIGVtYWlsIGFzIHRleHQgbmFtZV0NCioq ICAgRnJvbTogS2VudCBMYW5kZmllbGQgPGtlbnQ+ICBbdGV4dCBuYW1lIGJ1 dCBubyBAXQ0KKiogICBGcm9tOiAoa2VudCkgICAgICAgICAgICAgICAgIFtj b21tZW50IC0gbm8gZW1haWwgYWRkcmVzc10NCioqICAgRnJvbTogIiIgPGtl bnQ+ICAgICAgICAgICAgICBbZW1haWwgYWRkcmVzcyBidXQgbnVsbCBjb21t ZW50XQ0KKiogICBGcm9tOiAgICAgICAgICAgICAgICAgICAgICAgIFtibGFu ayBGcm9tOiBsaW5lXQ0KKiogICBGcm9tOiB1dS5uZXQha2VudCAgICAgICAg ICAgIFt1dWNwIGFkZHJlc3NlcyAtIG5vIGNvbW1lbnRdDQoqKiAgIEZyb206 IHV1Lm5ldCFrZW50IChrZW50KSAgICAgW3V1Y3AgYWRkcmVzc2VzIC0gd2l0 aCBjb21tZW50XQ0KKiogICBGcm9tOiAiKEpvZSBCbG9nZ3MpIiA8am9lQGFu b3JnLmNvbT4gDQoqKiAgIEZyb206ICJSb3kgVC4gRmllbGRpbmciIDxmaWVs ZGluZ0BraXdpLmljcy51Y2kuZWR1Pg0KKiogICBGcm9tOiBrZW50QGxvY2Fs aG9zdA0KKiogICBGcm9tOiBrZW50QHV1Lm5ldCAoS2VudCBMYW5kZmllbGQp DQoqKiAgIEZyb206IChHZW9yZ2UgQnVyZ3lhbikgPGdidXJneWFuQGN5YmVy Y29uLmNvbT4NCioqICAgRnJvbTogPGdidXJneWFuQGN5YmVyY29uLmNvbT4g KEdlb3JnZSBCdXJneWFuKSANCioqICAgRnJvbTogICAgICAgICAgICAgIEtl bnQgQi4gTGFuZGZpZWxkIDxrZW50QGxhbmRmaWVsZC5jb20+DQoqKiAgIEZy b206ICAgICAgSU4lImZla2V0ZStyZXBseUBjMi5uZXQiIDI2LUpBTi0xOTk3 IDEzOjI4OjU1LjM2DQoqKiAgIEZyb206ICAgICAgSU4lInZpY3JpY0BwYW5p eC5jb20iICAiVmlja2kgUmljaG1hbiIgMTMtQVVHLTE5OTYgMTA6NTQ6MzMu MzgNCioqICAgRnJvbTogICAgICBVUzJSTUM6OiJsd3YyNkBjYXMub3JnIiAi TGFycnkgVy4gVmlyZGVuLCB4MjQ4NyIgMjItT0NULTE5OTQgMDk6NDQ6MjEu NDQNCioqICAgRnJvbTogICAgICAgICAgTWFpbCBEZWxpdmVyeSBTdWJzeXN0 ZW0gPHBvc3RtYXN0ZXJAaWdjLmFwYy5vcmc+DQoqKiAgIEZyb206ICAgICAg ICAgIFNlbGYgPGVoYXNicm91Y2s+DQoqKiAgIEZyb206ICAgICAgICAgYWRh bUBlZGVuLmFwYW5hLm9yZy5hdSAoQWRhbSBGcmV5KQ0KKiogICBGcm9tOiAg ICAgICAgZmFxc2VydkBwZW5ndWluLWx1c3QubWl0LmVkdQ0KKiogICBGcm9t OiAgICBuYzA1NDhAZnJlZWJzZC5uZXRjb20uY29tIChNYXJrIEhpdHRpbmdl cikNCioqICAgRnJvbTogIi0gUGFtIEdyZWVuZSwgb25lIG9mIHRoZSAqLmFu c3dlcnMgbW9kZXJhdG9ycyIgPHBncmVlbmVATUlULkVEVT4NCioqICAgRnJv bTogIkZlbGFuIHNoZW5hIFRob3JvbidlZHJhcyIgPGZlbGFuQG5ldGNvbS5j b20+DQoqKiAgIEZyb206IERhdmlkIE11aXIgU2hhcm5vZmYgPG11aXJAaWRp b20uY29tPg0KKiogICBGcm9tOiBBLkouRG9oZXJ0eUByZWFkaW5nLmFjLnVr IChBbmR5IERvaGVydHkpDQoqKiAgIEZyb206IEpvcmRhbiBIdWJiYXJkICAg ICAgICAgICAgICAgICAgICAgICAgPGpraEB2ZWN0b3IuZWlrb24uZS10ZWNo bmlrLnR1LW11ZW5jaGVuLmRlPg0KKiogICBGcm9tOiBaWFBBTiVTTEFDVk0u QklUTkVUQE1JVFZNQS5NSVQuRURVDQoqKiAgIEZyb206IGFmcyFwaXohYWxm QHV1NS5wc2kuY29tIChBbGYgdGhlIFBvZXQpDQoqKiAgIEZyb206IGFuc3dl cnNAY3AudG4udHVkZWxmdC5ubCAoIk1vZGVyYXRvciAqLmFuc3dlcnMiKQ0K KiogICBGcm9tOiBtZHclbWVyZW5ndWVAbWVyZW5ndWUub2l0LnVuYy5lZHUg KE1hdHQgV2Vsc2gpDQoqKiAgIEZyb206IGJnb2ZmZUB3aGFsZS5zdC51c20u ZWR1IChXaWxsaWFtIEwuIEdvZmZlKQ0KKi8NCg0Kdm9pZCBnZXRuYW1lKGNo YXIgKmxpbmUsIGNoYXIgKm5hbWUsIGNoYXIgKmVtYWlsKQ0Kew0KICAgIGlu dCBpOw0KICAgIGludCBsZW47DQogICAgY2hhciAqYzsNCg0KICAgIGxlbiA9 IE1BSUxTVFJMRU4tMTsNCg0KICAgIC8qDQogICAgKiogWmVyb291dCBkYXRh Lg0KICAgICovDQogICAgemVyb19vdXQoZW1haWwsIE1BSUxTVFJMRU4pOw0K ICAgIHplcm9fb3V0KG5hbWUsIE5BTUVTVFJMRU4pOw0KDQogICAgLyogRU1h aWwgUHJvY2Vzc2luZyBGaXJzdDoNCiAgICAqKiBGaXJzdCwgaXMgdGhlcmUg YW4gJ0AnIHNpZ24gd2UgY2FuIHVzZSBhcyBhbiBhbmNob3IgPw0KICAgICov DQogICAgaWYgKChjID0gKGNoYXIgKikgc3RyY2hyKGxpbmUsICdAJykpID09 IE5VTEwpIHsNCiAgICAgICAgLyogDQogICAgICAgICoqIE5vICdAJyBzaWdu IGhlcmUgc28gLi4uDQogICAgICAgICovDQogICAgICAgIGlmIChzdHJjaHIo bGluZSwgJygnKSkgeyAgICAgICAvKiBGcm9tOiBib2IgKFRoZSBCaWcgR3V5 KSAqLw0KICAgICAgICAgICAgYyA9IChjaGFyICopIHN0cmNocihsaW5lLCAn OicpICsgMTsNCiAgICAgICAgICAgIHdoaWxlICgqYyA9PSAnICcgfHwgKmMg PT0gJ1x0JykNCiAgICAgICAgICAgICAgICBjKys7DQogICAgICAgICAgICBm b3IgKGkgPSAwOyAqYyAmJiAqYyAhPSAnKCcgJiYgKmMgIT0gJyAnICYmIA0K ICAgICAgICAgICAgICAgICAqYyAhPSAnXHQnICYmICpjICE9ICdcbicgJiYg aSA8IGxlbjsgYysrKQ0KICAgICAgICAgICAgICAgIGVtYWlsW2krK10gPSAq YzsNCiAgICAgICAgICAgIGVtYWlsW2ldID0gJ1wwJzsNCiAgICAgICAgfQ0K ICAgICAgICBlbHNlIGlmICgoYyA9IChjaGFyICopIHN0cmNocihsaW5lLCAn PCcpKSkgeyAgLyogRnJvbTogPGtlbnQ+ICovDQogICAgICAgICAgICBjKys7 DQogICAgICAgICAgICBmb3IgKGkgPSAwOyAqYyAmJiAqYyAhPSAnPicgJiYg KmMgIT0gJyAnICYmIA0KICAgICAgICAgICAgICAgICAqYyAhPSAnXHQnICYm ICpjICE9ICdcbicgJiYgaSA8IGxlbjsgYysrKQ0KICAgICAgICAgICAgICAg IGVtYWlsW2krK10gPSAqYzsNCiAgICAgICAgICAgIGVtYWlsW2ldID0gJ1ww JzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIC8q IA0KICAgICAgICAgICAgKiogICAgLSBjaGVjayB0byBzZWUgaWYgdGhlIEZy b206IGxpbmUgaXMgYmxhbmssICh0YWtlbiBjYXJlIG9mKQ0KICAgICAgICAg ICAgKiogICAgLSBjaGVjayBpZiBGcm9tOiB1dS5uZXQha2VudCBmb3JtYXR0 ZWQgbGluZQ0KICAgICAgICAgICAgKiogICAgLSBjaGVjayBpZiAiRnJvbTog a2VudCIgZm9ybWF0dGVkIGxpbmUNCiAgICAgICAgICAgICovDQogICAgICAg ICAgICBjID0gKGNoYXIgKikgc3RyY2hyKGxpbmUsICc6JykgKyAxOw0KICAg ICAgICAgICAgd2hpbGUgKCpjID09ICcgJyB8fCAqYyA9PSAnXHQnKQ0KICAg ICAgICAgICAgICAgICAgIGMrKzsNCiAgICAgICAgICAgIGZvciAoaSA9IDA7 ICpjICYmICpjICE9ICcgJyAmJiAqYyAhPSAnXHQnICYmIA0KICAgICAgICAg ICAgICAgICpjICE9ICdcbicgJiYgKmMgIT0gJywnICYmIGkgPCBsZW47IGMr KykNCiAgICAgICAgICAgICAgICAgZW1haWxbaSsrXSA9ICpjOw0KICAgICAg ICAgICAgZW1haWxbaV0gPSAnXDAnOw0KDQogICAgICAgIH0NCg0KICAgICAg ICBpZiAoZW1haWxbMF0gPT0gJ1wwJykgLyogV2FzIGl0IGEganVuayBGcm9t IGxpbmUgPyAqLw0KICAgICAgICAgICAgc3RyY3B5KGVtYWlsLCBOT0VNQUlM KTsNCg0KICAgICAgICBlbHNlIGlmICh1c2VfZG9tYWluYWRkcikgeyANCiAg ICAgICAgICAgIC8qDQogICAgICAgICAgICAqKiBjaGVjayBpZiBzaXRlIGRv bWFpbml6ZXMgYWRkcmVzc2VzIA0KICAgICAgICAgICAgKiogYnV0IGRvbid0 IG1vZGlmeSB1dWNwIGFkZHJlc3Nlcw0KICAgICAgICAgICAgKi8NCiAgICAg ICAgICAgIGlmICgoYyA9IChjaGFyICopIHN0cmNocihlbWFpbCwgJyEnKSkg PT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIHN0cmNhdChlbWFpbCwgIkAi KTsNCiAgICAgICAgICAgICAgICBzdHJjYXQoZW1haWwsIGRvbWFpbmFkZHIp Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2Ug ew0KICAgICAgICB3aGlsZSAoKmMgIT0gJyAnICYmICpjICE9ICdcdCcgJiYg KmMgIT0gJzwnICYmICpjICE9ICciJykNCiAgICAgICAgICAgIGMtLTsNCiAg ICAgICAgYysrOw0KICAgICAgICBmb3IgKGkgPSAwOyAqYyAmJiAqYyAhPSAn PicgJiYgKmMgIT0gJyAnICYmICpjICE9ICdcdCcgJiYNCiAgICAgICAgICAg ICAqYyAhPSAnIicgJiYgKmMgIT0gJ1xuJyAmJiBpIDwgbGVuOyBjKyspDQog ICAgICAgICAgICBlbWFpbFtpKytdID0gKmM7DQogICAgICAgIGVtYWlsW2ld ID0gJ1wwJzsNCiAgICB9DQoNCiAgICAvKg0KICAgICoqIE5BTUUgUHJvY2Vz c2luZyAtIEJveSBhcmUgdGhlcmUgYSBidW5jaCBvZiBmdW5reSBmb3JtYXRz IGhlcmUuDQogICAgKiogICAgICAgICAgICAgICAgICAgTm8gcHJvbWlzZXMu Li4gSSdsbCBkbyBteSBiZXN0LiBMZXQgbWUga25vdw0KICAgICoqICAgICAg ICAgICAgICAgICAgIHdoYXQgSSBtaXNzZWQuLi4NCiAgICAqLw0KICAgIGlm IChzdHJjaHIobGluZSwgJygnKSkgew0KICAgICAgICBjID0gKGNoYXIgKikg c3RyY2hyKGxpbmUsICcoJykgKyAxOw0KICAgICAgICBpZiAoKmMgPT0gJyIn KSAvKiBpcyB0aGVyZSBhIGNvbW1lbnQgaW4gdGhlIGNvbW1lbnQgPyAqLw0K ICAgICAgICAgICAgIGMrKzsNCiAgICB9DQogICAgZWxzZSBpZiAoc3RyY2hy KGxpbmUsICc8JykpIHsNCiAgICAgICAgYyA9IChjaGFyICopIHN0cmNocihs aW5lLCAnOicpICsgMTsNCiAgICAgICAgd2hpbGUgKCpjID09ICcgJyB8fCAq YyA9PSAnXHQnIHx8ICpjID09ICdcIicpDQogICAgICAgICAgICBjKys7DQog ICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAvKg0KICAgICAgICAqKiBJcyB0 aGVyZSBhbiBlbWFpbCBhZGRyZXNzIGF2YWlsYWJsZSANCiAgICAgICAgKiog dGhhdCB3ZSBjYW4gdXNlIGZvciB0aGUgbmFtZSA/DQogICAgICAgICovDQog ICAgICAgIGlmICghc3RyY21wKGVtYWlsLCBOT0VNQUlMKSkgICAgLyogTm8g Ki8NCiAgICAgICAgICAgIHN0cmNweShuYW1lLCBOT05BTUUpOw0KICAgICAg ICBlbHNlIHsNCiAgICAgICAgICAgIGMgPSBlbWFpbCtzdHJsZW4oZW1haWwp IC0gMTsNCiAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjKSkgKmMtLSA9 ICdcMCc7DQogICAgICAgICAgICBzdHJjcHkobmFtZSwgZW1haWwpOyAgICAg ICAgLyogWWVzICovDQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuOw0KICAg IH0NCg0KICAgIGZvciAoaSA9IDAsIGxlbiA9IE5BTUVTVFJMRU4tMTsgKmMg JiYgKmMgIT0gJzwnICYmICpjICE9ICdcIicgJiYgKmMgIT0gJyknICYmICpj ICE9ICcoJyAmJiAqYyAhPSAnXG4nICYmIGkgPCBsZW47IGMrKykNCiAgICAg ICAgbmFtZVtpKytdID0gKmM7DQoNCiAgICBpZiAoKmMgPT0gJzwnIHx8ICpj ID09ICcoJykNCiAgICAgICAgbmFtZVstLWldID0gJ1wwJzsNCiAgICBlbHNl DQogICAgICAgIG5hbWVbaV0gPSAnXDAnOw0KDQogICAgDQogICAgLyogQmFp bGluZyBhbmQgdGFraW5nIHRoZSBlYXN5IHdheSBvdXQuLi4gKi8NCg0KICAg IGlmIChuYW1lWzBdID09ICdcMCcpIHsNCiAgICAgICAgaWYgKGVtYWlsWzBd ID09ICdcMCcpDQogICAgICAgICAgICBzdHJjcHkobmFtZSwgTk9OQU1FKTsN CiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgc3RyY3B5KG5hbWUsIGVtYWls KTsNCiAgICB9DQoNCiAgICAgLyogbmVlZCB0byBzdHJpcCBzcGFjZXMgb2Zm IHRoZSBlbmQgb2YgDQogICAgICoqIHRoZSBlbWFpbCBhbmQgbmFtZSBzdHJp bmdzIA0KICAgICAqLw0KDQogICAgIGMgPSBlbWFpbCtzdHJsZW4oZW1haWwp IC0gMTsNCiAgICAgd2hpbGUgKGlzc3BhY2UoKmMpKSAqYy0tID0gJ1wwJzsN CiAgICAgYyA9IG5hbWUrc3RybGVuKG5hbWUpIC0gMTsNCiAgICAgd2hpbGUg KGlzc3BhY2UoKmMpKSAqYy0tID0gJ1wwJzsNCn0NCg0KLyogDQoqKiBHcmFi cyB0aGUgbWVzc2FnZSBJRCwgbGlrZSA8Li4uPiBmcm9tIHRoZSBNZXNzYWdl LUlEOiBoZWFkZXIuDQoqLw0KDQoNCmNoYXIgKmdldGlkKGNoYXIgKmxpbmUp DQp7DQogICAgaW50IGk7DQogICAgaW50IGxlbjsNCiAgICBjaGFyICpjOw0K ICAgIHN0YXRpYyBjaGFyIG1zZ2lkW01TR0RTVFJMRU5dOw0KIA0KICAgIGlm ICgoY2hhciAqKXN0cmNocihsaW5lLCAnPCcpID09IE5VTEwpIHsNCiAgICAg ICAgLyogYm96byBhbGVydCENCiAgICAgICAgKiogICBtc2ctaWQgPSAiPCIg YWRkci1zcGVjICI+IiANCiAgICAgICAgKiogdHJ5IHRvIHJlY292ZXIgYXMg YmVzdCB3ZSBjYW4NCiAgICAgICAgKi8NCiAgICAgICAgYyA9IChjaGFyICop IHN0cmNocihsaW5lLCAnOicpICsgMTsgLyogd2Uga25vdyB0aGlzIGV4aXN0 cyEgKi8NCg0KICAgICAgICAvKiBza2lwIHNwYWNlcyBiZWZvcmUgbWVzc2Fn ZSBJRCAqLw0KICAgICAgICB3aGlsZSAoKmMgJiYgKCpjID09ICcgJyB8fCAq YyA9PSAnXHQnKSkgYysrOyANCiAgICB9DQogICAgZWxzZSANCiAgICAgICAg YyA9IChjaGFyICopIHN0cmNocihsaW5lLCAnPCcpICsgMTsNCg0KICAgIGZv ciAoaSA9IDAsIGxlbiA9IE1TR0RTVFJMRU4gLTE7ICpjICYmICpjICE9ICc+ JyAmJiAqYyAhPSAnXG4nICYmIGkgPCBsZW47IGMrKykgew0KICAgICAgICBp ZiAoKmMgPT0gJ1xcJykNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAg ICBtc2dpZFtpKytdID0gKmM7DQogICAgfQ0KDQogICAgbXNnaWRbaV0gPSAn XDAnOw0KDQogICAgaWYgKHN0cmxlbihtc2dpZCkgPT0gMCkgDQogICAgICAg IHN0cmNweShtc2dpZCwgIkJPWk8iKTsNCg0KICAgIHJldHVybiBtc2dpZDsN Cn0NCg0KDQovKg0KKiogR3JhYnMgdGhlIHN1YmplY3QgZnJvbSB0aGUgU3Vi amVjdDogaGVhZGVyLg0KKi8NCg0KY2hhciAqZ2V0c3ViamVjdChjaGFyICps aW5lKQ0Kew0KICAgIGludCBpOw0KICAgIGludCBsZW47DQogICAgY2hhciAq YzsNCiAgICBzdGF0aWMgY2hhciBzdWJqZWN0W1NVQkpTVFJMRU5dOw0KDQog ICAgYyA9IChjaGFyICopIHN0cmNocihsaW5lLCAnOicpICsgMjsNCiAgICB3 aGlsZSAoaXNzcGFjZSgqYykpDQogICAgICAgICBjKys7DQogICAgZm9yIChp ID0gMCwgbGVuID0gU1VCSlNUUkxFTiAtMTsgKmMgJiYgKmMgIT0gJ1xuJyAm JiBpIDwgbGVuOyBjKyspDQogICAgICAgICBzdWJqZWN0W2krK10gPSAqYzsN Cg0KICAgIHN1YmplY3RbaV0gPSAnXDAnOw0KDQogICAgLyogc3RyaXAgdHJh aWxpbmcgc3BhY2VzICovDQoNCg0KICAgIGZvciAoaS0tOyBpID49IDAgJiYg aXNzcGFjZShzdWJqZWN0W2ldKTsgaS0tKQ0KICAgICAgICAgc3ViamVjdFtp XSA9ICdcMCc7DQoNCiAgICAvKg0KICAgICoqIEZpeCBmb3IgRXhjaGFuZ2Ug YnVnIHRoYXQgcHV0cyAiRlc6IiBpbiBmcm9udCBvZiBmb3J3YXJkZWQgDQog ICAgKiogbWVzc2FnZXMgd2hpY2ggYXJlIHN1YnN0aXR1dGVkIGJ5IEV4Y2hh bmdlIGZvciAiUkU6IiBvbiByZXBsaWVzDQogICAgKi8NCg0KICAgIGlmICgh c3RybmNtcChzdWJqZWN0LCAiRlc6IiwgMykpIHsNCiAgICAgICAgc3ViamVj dFswXSA9ICdSJzsNCiAgICAgICAgc3ViamVjdFsxXSA9ICdlJzsNCiAgICB9 ICAgDQoNCiAgICBpZiAoc3ViamVjdFswXSA9PSAgJ1wwJyB8fCBpc3NwYWNl KHN1YmplY3RbMF0pIHx8IHN1YmplY3RbMF0gPT0gJ1xuJyB8fCANCiAgICAg ICAgIXN0cmNhc2VjbXAoc3ViamVjdCwgIlJlOiIpIHx8ICFzdHJjYXNlY21w KHN1YmplY3QsICJSZVsyXToiKSkNCiAgICAgICAgc3RyY3B5KHN1YmplY3Qs IE5PU1VCSkVDVCk7DQoNCiAgICByZXR1cm4gc3ViamVjdDsNCn0NCg0KLyoN CioqIEdyYWJzIHRoZSBtZXNzYWdlIElELCBvciBkYXRlLCBmcm9tIHRoZSBJ bi1yZXBseS10bzogaGVhZGVyLg0KKioNCioqIE1heWJlIEknbSBjb25mdXNl ZCBidXQuLi4uDQoqKiAgICAgV2hhdCBlaXRoZXIgPyBTaG91bGQgaXQgbm90 IGJlIGNvbnNpc3RlbnQgYW5kIGNob29zZSB0byByZXR1cm4gDQoqKiAgICAg b25lICh0aGUgbXNnaWQpIGFzIHRoZSBkZWZhdWx0IGFuZCBmYWxsIGJhY2sg dG8gZGF0ZSB3aGVuIGEgDQoqKiAgICAgbXNnaWQgY2Fubm90IGJlIGZvdW5k ID8NCioqDQoqKiBXaG8ga25vd3Mgd2hhdCBvdGhlciBmb3JtYXRzIGFyZSBv dXQgdGhlcmUuLi4NCioqDQoqKiBJbi1SZXBseS1UbzogPDFERDlCODU0RTI3 QGV2ZXJldHQucGl0dC5jYy5uYy51cz4NCioqIEluLVJlcGx5LVRvOiA8MTk5 NzA5MTgxNjQ1Lk1BQTAyMDk3QG1haWwuY2xhcmsubmV0PiBmcm9tICJNYXJj dXMgSi4gUmFudW0iIGF0IFNlcCAxOCwgOTcgMTI6NDE6NDAgcG0NCioqIElu LVJlcGx5LVRvOiA8MTk5NzA5MTgxNjQ1Lk1BQTAyMDk3QG1haWwuY2xhcmsu bmV0PiBmcm9tIA0KKiogSW4tUmVwbHktVG86ICJMLiBEZXR3ZWlsZXIiJ3Mg bWVzc2FnZSBvZiBGcmksIDA0IEZlYiA5NCAyMjo1MToyMiAtMDcwMCA8MTk5 NDAyMDUwNTUxLldBQTE2MTg5QGxvbmdzLmxhbmNlLmNvbG9zdGF0ZS5lZHU+ DQoqKg0KKiogVGhpcyByb3V0aW5lIGlzIGJ1Z2d5IGFuZCB0aGUgZml4IGlz IHRvIGFkZCBhIHJlYWRsaW5lIHJvdXRpbmUgdGhhdCANCioqIGNvbmNhdGVu YXRlcyBjb250aW51YXRpb24gbGluZXMgaW50byBhIHNpbmdsZSBsaW5lIGFu ZCBjb2xsYXBzZXMgDQoqKiB3aGl0ZXNwYWNlLiBUaGUgbWVzc2FnZSBpZCBz aG91bGQgYWx3YXlzIGJlIHJldHVybmVkIGZvciB0aHJlYWRpbmcgDQoqKiBw dXJwb3Nlcy4gTWl4aW5nIG1lc3NhZ2UtaWRzIGFuZCBkYXRlcyBqdXN0IGRv ZXMgbm90IGFsbG93IGZvciBwcm9wZXIgDQoqKiB0aHJlYWRpbmcgbG9va3Vw cy4NCiovDQogDQpjaGFyICpnZXRyZXBseShjaGFyICpsaW5lKQ0Kew0KICAg IGludCBpOw0KICAgIGludCByZXBseWxlbjsNCiAgICBpbnQgbWxlbjsNCiAg ICBjaGFyICpjOw0KICAgIGNoYXIgKm07DQogICAgc3RhdGljIGNoYXIgcmVw bHlbUkVQWVNUUkxFTl07DQoNCiAgICByZXBseWxlbiA9IFJFUFlTVFJMRU4g LTE7DQogICAgbWxlbiA9IE1TR0RTVFJMRU4gLTE7DQoNCiAgICAvKiBDaGVj ayBmb3IgYmxhbmsgbGluZSAqLw0KDQogICAgLyogDQogICAgKiogQ2hlY2sg Zm9yIGxpbmUgd2l0aCAiIGZyb20gIiBhbmQgIiBhdCAiLiAgRm9ybWF0IG9m IHRoZSBsaW5lIGlzIA0KICAgICoqICAgICA8bXNnaWQ+IGZyb20gInF1b3Rl ZCB1c2VyIG5hbWUiIGF0IGRhdGUtc3RyaW5nDQogICAgKi8NCg0KICAgIGlm ICgoY2hhciAqKSBzdHJzdHIobGluZSwgIiBmcm9tICIpICE9IE5VTEwpIHsN CiAgICAgICAgaWYgKCgoY2hhciAqKSBzdHJzdHIobGluZSwgIiBhdCAiKSkg IT0gTlVMTCkgew0KICAgICAgICAgICAgaWYgKChtID0gKGNoYXIgKikgc3Ry Y2hyKGxpbmUsICc8JykpICE9IE5VTEwpIHsNCiAgICAgICAgICAgICAgICBm b3IgKG0rKywgaSA9IDA7ICptICYmICptICE9ICc+JyAmJiAqbSAhPSAnXG4n ICYmIGkgPCByZXBseWxlbjsgbSsrKQ0KICAgICAgICAgICAgICAgICAgICAg cmVwbHlbaSsrXSA9ICptOw0KICAgICAgICAgICAgICAgIHJlcGx5W2ldID0g J1wwJzsNCiAgICAgICAgICAgICAgICByZXR1cm4ocmVwbHkpOw0KICAgICAg ICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLyogDQogICAgICAgICoq IElmIG5vICdhdCcgdGhlIGxpbmUgbWF5IGJlIGEgY29udGludWVkIGxpbmUg b3IgYSB0cnVuY2F0ZWQgbGluZS4NCiAgICAgICAgKiogQm90aCB3aWxsIGJl IHBpY2tlZCB1cCBsYXRlci4NCiAgICAgICAgKi8NCiAgICB9DQoNCiAgICAv KiANCiAgICAqKiBDaGVjayBmb3IgbGluZSB3aXRoICIgbWVzc2FnZSBvZiAi LiAgRm9ybWF0IG9mIHRoZSBsaW5lIGlzIA0KICAgICoqICAgICAicXVvdGVk IHVzZXIgbmFtZSIncyBtZXNzYWdlIG9mIGRhdGUtc3RyaW5nIDxtc2dpZD4N CiAgICAqLw0KDQogICAgaWYgKChjID0gKGNoYXIgKikgc3Ryc3RyKGxpbmUs ICJtZXNzYWdlIG9mICIpKSAhPSBOVUxMKSB7DQogICAgICAgIC8qDQogICAg ICAgICoqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1lc3NhZ2UgSUQg b24gdGhlIGxpbmUuIA0KICAgICAgICAqKiBJZiBub3QgdGhpcyBpcyBhIGNv bnRpbnVlZCBsaW5lIGFuZCB3aGVuIHlvdSBhZGQgYSByZWFkbGluZSgpDQog ICAgICAgICoqIGZ1bmN0aW9uIHRoYXQgY29uY2F0ZW5hdGVzIGNvbnRpbnVh dGlvbiBsaW5lcyBjb2xsYXBzaW5nDQogICAgICAgICoqIHdoaXRlIHNwYWNl LCB5b3UgbWlnaHQgd2FudCB0byByZXZpc2l0IHRoaXMuLi4NCiAgICAgICAg Ki8NCg0KICAgICAgICBpZiAoKG0gPSAoY2hhciAqKSBzdHJjaHIobGluZSwg JzwnKSkgIT0gTlVMTCkgew0KICAgICAgICAgICAgIGZvciAobSsrLCBpID0g MDsgKm0gJiYgKm0gIT0gJz4nICYmICptICE9ICdcbicgJiYgaSA8IHJlcGx5 bGVuOyBtKyspDQogICAgICAgICAgICAgICAgICByZXBseVtpKytdID0gKm07 DQogICAgICAgICAgICAgcmVwbHlbaV0gPSAnXDAnOw0KICAgICAgICAgICAg IHJldHVybihyZXBseSk7DQogICAgICAgIH0NCiAgDQogICAgICAgIC8qIE5v cGUuLi4gR28gZm9yIHRoZSBEYXRlIGluZm8uLi4gQnVnLi4uKi8NCiAgICAg ICAgYyArPSAxMTsNCiAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmMpKQ0KICAg ICAgICAgICAgYysrOw0KICAgICAgICBpZiAoKmMgPT0gJyInKSANCiAgICAg ICAgICAgIGMrKzsNCg0KICAgICAgICBmb3IgKGkgPSAwOyAqYyAmJiAqYyAh PSAnLicgJiYgKmMgIT0gJ1xuJyAmJiBpIDwgcmVwbHlsZW47IGMrKykNCiAg ICAgICAgICAgICByZXBseVtpKytdID0gKmM7DQogICAgICAgIHJlcGx5W2ld ID0gJ1wwJzsNCiAgICAgICAgcmV0dXJuKHJlcGx5KTsNCiAgICB9DQoNCiAg ICBpZiAoKGMgPSAoY2hhciAqKSBzdHJzdHIobGluZSwgImRhdGVkOiAiKSkg IT0gTlVMTCkgew0KICAgICAgICBjICs9IDc7DQogICAgICAgIGZvciAoaSA9 IDA7ICpjICYmICpjICE9ICcuJyAmJiAqYyAhPSAnXG4nICYmIGkgPCByZXBs eWxlbjsgYysrKQ0KICAgICAgICAgICAgIHJlcGx5W2krK10gPSAqYzsNCiAg ICAgICAgcmVwbHlbaV0gPSAnXDAnOw0KICAgICAgICByZXR1cm4ocmVwbHkp Ow0KICAgIH0NCiANCiAgICBpZiAoKGMgPSAoY2hhciAqKSBzdHJzdHIobGlu ZSwgImRhdGVkICIpKSAhPSBOVUxMKSB7DQogICAgICAgIGMgKz0gNjsNCiAg ICAgICAgZm9yIChpID0gMDsgKmMgJiYgKmMgIT0gJy4nICYmICpjICE9ICdc bicgJiYgaSA8IHJlcGx5bGVuOyBjKyspDQogICAgICAgICAgICAgcmVwbHlb aSsrXSA9ICpjOw0KICAgICAgICByZXBseVtpXSA9ICdcMCc7DQogICAgICAg IHJldHVybihyZXBseSk7DQogICAgfQ0KDQogICAgaWYgKChjID0gKGNoYXIg Kikgc3RyY2hyKGxpbmUsICc8JykpICE9IE5VTEwgKSB7DQogICAgICAgIGMr KzsNCiAgICAgICAgZm9yIChpID0gMDsgKmMgJiYgKmMgIT0gJz4nICYmICpj ICE9ICdcbicgJiYgaSA8IG1sZW47IGMrKykgew0KICAgICAgICAgICAgIGlm ICgqYyA9PSAnXFwnKQ0KICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAg ICAgICAgICAgICByZXBseVtpKytdID0gKmM7DQogICAgICAgIH0NCiAgICAg ICAgcmVwbHlbaV0gPSAnXDAnOw0KICAgICAgICByZXR1cm4ocmVwbHkpOw0K ICAgIH0NCiANCiAgICBpZiAoKGMgPSAoY2hhciAqKSBzdHJzdHIobGluZSwg InNhZ2Ugb2YgIikpICE9IE5VTEwpIHsNCiAgICAgICAgYyArPSA4Ow0KICAg ICAgICBpZiAoKmMgPT0gJ1wiJykNCiAgICAgICAgICAgIGMrKzsNCg0KICAg ICAgICBmb3IgKGkgPSAwOyAqYyAmJiAqYyAhPSAnLicgJiYgKmMgIT0gJ1xu JyAmJiANCiAgICAgICAgICAgICAqYyAhPSAnZicgJiYgaSA8IHJlcGx5bGVu OyBjKyspDQogICAgICAgICAgICAgcmVwbHlbaSsrXSA9ICpjOw0KICAgICAg ICByZXBseVtpXSA9ICdcMCc7DQoNCiAgICAgICAgaWYgKCpjID09ICdmJykN CiAgICAgICAgICAgIHJlcGx5Wy0taV0gPSAnXDAnOw0KICAgICAgICByZXR1 cm4ocmVwbHkpOw0KICAgIH0NCiANCiAgICByZXBseVswXSA9ICdcMCc7DQog ICAgcmV0dXJuKHJlcGx5KTsNCn0NCg0KLyoNCioqIFJGQyAyMDQ3IGRlZmlu ZXMgTUlNRSBleHRlbnNpb25zIGZvciBtYWlsIGhlYWRlcnMuDQoqKg0KKiog VGhpcyBmdW5jdGlvbiBkZWNvZGVzIHRoYXQgaW50byBiaW5hcnkvOGJpdCBk YXRhLg0KKioNCioqIEV4YW1wbGU6DQoqKiAgID0/aXNvLTg4NTktMT9xP0kn bV9jYWxsZWRfPz0gPT9pc28tODg1OS0xP3E/RGFuaWVsPz0NCioqDQoqKiBT aG91bGQgcmVzdWx0IGluICJJJ20gY2FsbGVkIERhbmllbCIsIGJ1dDoNCioq DQoqKiAgID0/aXNvLTg4NTktMT9xP0knbV9jYWxsZWQ/PSBEYW5pZWwNCioq DQoqKiBTaG91bGQgcmVzdWx0IGluICJJJ20gY2FsbGVkIERhbmllbCIgdG9v Lg0KKioNCioqIFJldHVybnMgdGhlIG5ld2x5IGFsbGNhdGVkIHN0cmluZywg b3IgdGhlIHByZXZpb3VzIGlmIG5vdGhpbmcgY2hhbmdlZCANCiovDQoNCnN0 YXRpYyBjaGFyICptZGVjb2RlUkZDMjA0NyggY2hhciAqc3RyaW5nLCBpbnQg bGVuZ3RoICkNCnsNCiAgICBjaGFyICppcHRyID0gc3RyaW5nOw0KICAgIGNo YXIgKm9sZHB0cjsNCiAgICBjaGFyICpzdG9yYWdlPW1hbGxvYyhsZW5ndGgr MSk7DQogIA0KICAgIGNoYXIgKm91dHB1dCA9IHN0b3JhZ2U7DQogIA0KICAg IGNoYXIgY2hhcnNldFsxMjldOw0KICAgIGNoYXIgZW5jb2RpbmdbMzNdOw0K ICAgIGNoYXIgYmx1cmJbMTI5XTsNCiAgICBjaGFyIGVxdWFsOw0KICAgIGlu dCB2YWx1ZTsNCiAgDQogICAgY2hhciBkaWRhbnl0aGluZz1GQUxTRTsNCg0K ICAgIHdoaWxlICgqaXB0cikgew0KICAgICAgICBpZiAoIXN0cm5jbXAoaXB0 ciwgIj0/IiwgMikgJiYNCiAgICAgICAgICAgICg0ID09IHNzY2FuZihpcHRy KzIsICIlMTI4W14/XT8lMzJbXj9dPyUxMjhbXj9dPyVjIiwNCiAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXJzZXQsIGVuY29kaW5nLCBibHVyYiwgJmVx dWFsKSkgJiYNCiAgICAgICAgICAgICgnPScgPT0gZXF1YWwpKSB7DQogICAg ICAgICAgICAvKiBUaGlzIGlzIGEgZnVsbCwgdmFsaWQgJ2VuY29kZWQtd29y ZCcuIERlY29kZSEgKi8NCiAgICAgICAgICAgIGNoYXIgKnB0cj1ibHVyYjsN CiAgDQogICAgICAgICAgICBkaWRhbnl0aGluZz1UUlVFOyAvKiB5ZXMsIHdl IGRlY29kZSBzb21ldGhpbmcgKi8NCiAgDQogICAgICAgICAgICAvKiB3ZSBj b3VsZCd2ZSBkb25lIHRoaXMgd2l0aCBhICVuIGluIHRoZSBzc2NhbmYsIGJ1 dCB3ZSBrbm93IGFsbA0KICAgICAgICAgICAgICAgc3NjYW5mcyBkb24ndCBn cm9rIHRoYXQgKi8NCg0KICAgICAgICAgICAgaXB0ciArPSAyKyBzdHJsZW4o Y2hhcnNldCkgKyAxICsgc3RybGVuKGVuY29kaW5nKSArIDEgKyBzdHJsZW4o Ymx1cmIpICsgMjsNCiAgDQogICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAo InEiLCBlbmNvZGluZykpIHsNCiAgICAgICAgICAgICAgIC8qIHF1b3RlZCBw cmludGFibGUgZGVjb2RpbmcgKi8NCiAgDQogICAgICAgICAgICAgICAgZm9y ICggOyAqcHRyOyBwdHIrKyApIHsNCiAgICAgICAgICAgICAgICAgICAgc3dp dGNoICggKnB0ciApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug Jz0nOg0KICAgICAgICAgICAgICAgICAgICAgICAgICBzc2NhbmYoIHB0cisx LCAiJTAyWCIsICZ2YWx1ZSApOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAqb3V0cHV0KysgPSB2YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgcHRyICs9IDI7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXyc6DQogICAgICAg ICAgICAgICAgICAgICAgICAgICpvdXRwdXQrKyA9ICcgJzsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAg ICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0 cHV0KysgPSAqcHRyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjYXNl Y21wKCJiIiwgZW5jb2RpbmcpKSB7DQogICAgICAgICAgICAgICAgLyogYmFz ZTY0IGRlY29kaW5nICovDQogICAgICAgICAgICAgICAgaW50IGxlbmd0aDsN CiAgICAgICAgICAgICAgICBiYXNlNjREZWNvZGUocHRyLCBvdXRwdXQsICZs ZW5ndGgpOw0KICAgICAgICAgICAgICAgIG91dHB1dCArPSBsZW5ndGgtMTsN CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAg ICAgICAgIC8qIHVuc3VwcG9ydGVkIGVuY29kaW5nIHR5cGUgKi8NCiAgICAg ICAgICAgICAgICBzdHJjcHkob3V0cHV0LCAiPHVua25vd24+Iik7DQogICAg ICAgICAgICAgICAgb3V0cHV0ICs9IDk7DQogICAgICAgICAgICB9DQogIA0K ICAgICAgICAgICAgb2xkcHRyID0gaXB0cjsgLyogc2F2ZSBzdGFydCBwb3Np dGlvbiAqLw0KICANCiAgICAgICAgICAgIHdoaWxlICgqaXB0ciAmJiBpc3Nw YWNlKCppcHRyKSkNCiAgICAgICAgICAgICAgICAgIGlwdHIrKzsgLyogcGFz cyBhbGwgd2hpdGVzcGFjZXMgKi8NCiAgDQogICAgICAgICAgICAvKiBpZiB0 aGlzIGlzIGFuIGVuY29kZWQgd29yZCBoZXJlLCB3ZSBzaG91bGQgc2tpcCB0 aGUgcGFzc2VkDQogICAgICAgICAgICAgICB3aGl0ZXNwYWNlcy4gSWYgaXQg aXNuJ3QgYW4gZW5jb2RlZC13b3JkLCB3ZSBzaG91bGQgaW5jbHVkZSB0aGUN CiAgICAgICAgICAgICAgIHdoaXRlc3BhY2VzIGluIHRoZSBvdXRwdXQuICov DQoNCiAgICAgICAgICAgIGlmICghc3RybmNtcChpcHRyLCAiPT8iLCAyKSAm Jg0KICAgICAgICAgICAgICAgICg0ID09IHNzY2FuZihpcHRyKzIsICIlMTI4 W14/XT8lMzJbXj9dPyUxMjhbXj9dPyVjIiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXJzZXQsIGVuY29kaW5nLCBibHVyYiwgJmVxdWFs KSkgJiYNCiAgICAgICAgICAgICAgICAoJz0nID09IGVxdWFsKSkgew0KICAg ICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiB0aGlzIElTIGFuIGVuY29kZWQt d29yZCwgY29udGludWUgZnJvbSBoZXJlICovDQogICAgICAgICAgICB9DQog ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIC8qIHRoaXMgSVMgTk9U IGFuIGVuY29kZWQtd29yZCwgbW92ZSBiYWNrIHRvIHRoZSBmaXJzdCB3aGl0 ZXNwYWNlICovDQogICAgICAgICAgICAgIGlwdHIgPSBvbGRwdHI7DQogICAg ICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgKm91dHB1dCsrID0g KmlwdHIrKzsgICANCiAgICB9DQogICAgKm91dHB1dD0wOw0KICANCiAgICBp ZiAoZGlkYW55dGhpbmcpIHsNCiAgICAgICAgLyogdGhpcyBjaGVjayBwcmV2 ZW50cyB1bm5lY2Nlc3Nhcnkgc3Ryc2F2KCkgY2FsbHMgaWYgbm90IG5lZWRl ZCAqLw0KICAgICAgICBmcmVlKHN0cmluZyk7IC8qIGZyZWUgb2xkIG1lbW9y eSAqLw0KICANCiNpZiAwDQogICAgICAgIC8qIGRlYnVnIGRpc3BsYXkgKi8N CiAgICAgICAgcHJpbnRmKCJORVc6ICVzXG4iLCBzdG9yYWdlKTsNCiAgDQog ICAgICAgIHsgIA0KICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZjsNCiAg ICAgICAgICAgIHB1dHMoIk5FVzoiKTsNCiAgICAgICAgICAgIGZvciAoZj1z dG9yYWdlOyBmPG91dHB1dDsgZisrKSB7DQogICAgICAgICAgICAgICAgaWYg KGlzZ3JhcGgoKmYpKQ0KICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWMi LCAqZik7DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAg ICAgIHByaW50ZigiJTAyWCIsICh1bnNpZ25lZCBjaGFyKSpmKTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIHB1dHMoIiIpOw0KICAgICAgICB9ICAN CiNlbmRpZg0KICAgICAgICByZXR1cm4gc3RvcmFnZTsgLyogcmV0dXJuIG5l dyAqLw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGZyZWUgKHN0b3JhZ2Up Ow0KICAgICAgcmV0dXJuIHN0cmluZzsNCiAgICB9DQp9DQoNCi8qDQoqKiBE ZWNvZGUgdGhpcyBbdmlydHVhbF0gUXVvdGVkLVByaW50YWJsZSBsaW5lIGFz IGRlZmluZWQgYnkgUkZDMjA0NS4NCioqIFdyaXR0ZW4gYnkgRGFuaWVsLlN0 ZW5iZXJnQHN0aC5mcm9udGVjLnNlDQoqLw0KDQpzdGF0aWMgdm9pZCBtZGVj b2RlUVAoRklMRSAqZmlsZSwgY2hhciAqaW5wdXQsIGNoYXIgKipyZXN1bHQs IGludCAqbGVuZ3RoKQ0Kew0KICAgIGludCBvdXRjb3VudD0wOw0KICAgIGNo YXIgKmJ1ZmZlcj1pbnB1dDsNCiAgICB1bnNpZ25lZCBjaGFyIGluY2hhcjsN CiAgICBjaGFyICpvdXRwdXQ7DQoNCiAgICBpbnQgbGVuPXN0cmxlbihpbnB1 dCk7ICANCiAgICBvdXRwdXQ9c3Ryc2F2KGlucHV0KTsNCg0KI2RlZmluZSBR UF9FTkxBUkdFX1NURVAgNTEyDQoNCiAgICB3aGlsZSAoKGluY2hhciA9ICpp bnB1dCkgIT0gJ1wwJykgew0KDQogICAgICAgIGlmIChvdXRjb3VudD49bGVu LTEpIHsNCiAgICAgICAgICAgIC8qIHdlIG5lZWQgdG8gZW5sYXJnZSB0aGUg ZGVzdGluYXRpb24gYXJlYSEgKi8NCiAgICAgICAgICAgIGNoYXIgKm5ld3Ag PSByZWFsbG9jKG91dHB1dCwgbGVuK1FQX0VOTEFSR0VfU1RFUCk7DQogICAg ICAgICAgICBpZiAobmV3cCkgew0KICAgICAgICAgICAgICAgIG91dHB1dCA9 IG5ld3A7DQogICAgICAgICAgICAgICAgbGVuICs9IFFQX0VOTEFSR0VfU1RF UDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KDQogICAgICAgIGlucHV0Kys7 DQogICAgICAgIGlmICgnPScgPT0gaW5jaGFyKSB7DQogICAgICAgICAgICBp bnQgdmFsdWU7DQogICAgICAgICAgICBpZiAoJ1xuJz09ICppbnB1dCkgew0K ICAgICAgICAgICAgICAgIGlmICghZmdldHMoYnVmZmVyLCBNQVhMSU5FLCBm aWxlKSkNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAg ICAgICAgaW5wdXQgPSBidWZmZXI7DQogICAgICAgICAgICAgICAgY29udGlu dWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmICgnPScg PT0gKmlucHV0KSB7DQogICAgICAgICAgICAgICAgaW5jaGFyPSc9JzsNCiAg ICAgICAgICAgICAgICBpbnB1dCsrOyAvKiBwYXNzIHRoaXMgKi8NCiAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYgKGlzeGRpZ2l0KCppbnB1 dCkpIHsNCiAgICAgICAgICAgICAgICBzc2NhbmYoaW5wdXQsICIlMDJYIiwg JnZhbHVlKTsNCiAgICAgICAgICAgICAgICBpbmNoYXIgPSAodW5zaWduZWQg Y2hhcil2YWx1ZTsNCiAgICAgICAgICAgICAgICBpbnB1dCs9MjsgLyogcGFz cyB0aGUgdHdvIGxldHRlcnMgKi8NCiAgICAgICAgICAgIH0NCiAgICAgICAg ICAgIGVsc2UNCiAgICAgICAgICAgICAgICBpbmNoYXI9Jz0nOw0KICAgICAg ICB9DQogICAgICAgIG91dHB1dFtvdXRjb3VudCsrXSA9IGluY2hhcjsNCiAg ICB9DQogICAgb3V0cHV0W291dGNvdW50XT0wOyAvKiB6ZXJvIHRlcm1pbmF0 ZSAqLw0KDQogICAgKnJlc3VsdCA9IG91dHB1dDsNCiAgICAqbGVuZ3RoID0g b3V0Y291bnQ7DQp9DQoNCi8qDQoqKiBQYXJzaW5nLi4udGhlIGhlYXJ0IG9m IEh5cGVybWFpbCENCioqIFRoaXMgbG9hZHMgaW4gdGhlIGFydGljbGVzIGZy b20gc3RkaW4gb3IgYSBtYWlsYm94LCBhZGRpbmcgdGhlIHJpZ2h0DQoqKiBm aWVsZCB2YXJpYWJsZXMgdG8gdGhlIHJpZ2h0IHN0cnVjdHVyZXMuIElmIHJl YWRvbmUgaXMgc2V0LCBpdCB3aWxsDQoqKiB0aGluayBhbnl0aGluZyBpdCBy ZWFkcyBpbiBpcyBvbmUgYXJ0aWNsZSBvbmx5Lg0KKi8NCg0Kdm9pZCBsb2Fk aGVhZGVycyhjaGFyICptYm94LCBpbnQgdXNlX3N0ZGluLCBpbnQgcmVhZG9u ZSwgY2hhciAqZGlyKQ0Kew0KICAgIEZJTEUgKmZwOw0KICAgIGNoYXIgbmFt ZVtOQU1FU1RSTEVOXSwgZW1haWxbTUFJTFNUUkxFTl0sIGRhdGVbREFURVNU UkxFTl0sDQogICAgICAgIG1zZ2lkW01TR0RTVFJMRU5dLCBzdWJqZWN0W1NV QkpTVFJMRU5dLCBpbnJlcGx5W1JFUFlTVFJMRU5dLA0KICAgICAgICBsaW5l W01BWExJTkVdLCB0bXBmcm9tW01BWExJTkVdLCBmcm9tZGF0ZVtEQVRFU1RS TEVOXSwNCiAgICAgICAgb2xkbGluZVtNQVhMSU5FXSwgKmNwOw0KICAgIGlu dCBudW0sIGlzaW5oZWFkZXIsIGhhc3N1YmplY3QsIGhhc2RhdGU7DQojaWYg MA0KICAgIGludCB3YXNpbnJlcGx5Ow0KI2VuZGlmDQoNCiAgICAvKiAtLSB2 YXJpYWJsZXMgZm9yIHRoZSBtdWx0aXBhcnQvYWx0ZXJuYXRpdmUgcGFyc2Vy IC0tICovDQogICAgc3RydWN0IGJvZHkgKm9yaWdicD1OVUxMOyAvKiBzdG9y ZSB0aGUgb3JpZ2luYWwgYnAgKi8NCiAgICBzdHJ1Y3QgYm9keSAqb3JpZ2xw PU5VTEw7IC8qIC4uLiBhbmQgdGhlIG9yaWdpbmFsIGxwICovDQogICAgc3Ry dWN0IGJvZHkgKmZpcnN0YnA9TlVMTDsgLyogdXNlIHRoaXMgZm9yIHRoZSBm aXJzdCBwYXJ0ICovDQogICAgY2hhciBhbHRlcm5hdGl2ZXBhcnNlcj1GQUxT RTsgLyogc2V0IHdoZW4gaW5zaWRlIGFsdGVybmF0aXZlIHBhcnNlcg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgKi8NCg0K ICAgIC8qIC0tIGVuZCBvZiBhbHRlcm5hdGl2ZSBwYXJzZXIgdmFyaWFibGVz IC0tICovDQoNCiAgICBzdHJ1Y3QgYm9keSAqYnA7DQogICAgc3RydWN0IGJv ZHkgKmxwPU5VTEw7IC8qIHRoZSBsYXN0IHBvaW50ZXIsIHBvaW50cyB0byB0 aGUgbGFzdCBub2RlIGluIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib2R5IGxpc3QuIEluaXRpYWxseSBzZXQgdG8gTlVMTCBzaW5jZSB3 ZSBoYXZlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmUgYXQg dGhlIG1vbWVudC4gKi8NCg0KICAgIHN0cnVjdCBib2R5ICpoZWFkcD1OVUxM OyAvKiBzdG9yZWQgcG9pbnRlciB0byB0aGUgcG9pbnQgd2hlcmUgd2UgbGFz dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FubmVkIHRo ZSBoZWFkZXJzIG9mIHRoaXMgbWFpbC4gKi8NCg0KICAgIGNoYXIgTWltZV9C ID0gRkFMU0U7DQoNCiAgICBjaGFyIGJvdW5kYnVmZmVyWzEyOF09IiI7DQoN CiAgICAvKiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gc3RvcmUgYSBzdGFj ayBvZiBib3VuZGFyeSBzZXBhcmF0b3JzIGluIGNhc2VzDQogICAgICAgd2l0 aCBtaW1lZCBtYWlscyBpbnNpZGUgbWltZWQgbWFpbHMgKi8NCiAgICBzdHJ1 Y3QgYm91bmRhcnkgKmJvdW5kcD1OVUxMOw0KDQogICAgLyogVGhpcyB2YXJp YWJsZSBpcyBzZXQgVFJVRSBpZiB3ZSBoYXZlIHJlYWQgYSBwYXJ0aWFsIGxp bmUgb2ZmIGENCiAgICAgICBtdWx0aWxpbmUtZW5jb2RlZCBsaW5lLCBhbmQg dGhlIG5leHQgbGluZSB3ZSByZWFkIGlzIHN1cHBvc2VkIHRvIGdldA0KICAg ICAgIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91cyBvbmUgKi8NCiAgICBjaGFy IG11bHRpbGluZW5vZW5kPUZBTFNFOw0KDQogICAgLyogVGhpcyB2YXJpYWJs ZSBpcyBzZXQgdG8gZXh0cmEgZmxhZ3MgdGhhdCB0aGUgYWRkYm9keSgpIGNh bGxzIHNob3VsZCBPUg0KICAgICAgIGluIHRoZSBmbGFnIHBhcmFtZXRlciAq Lw0KICAgIGludCBib2R5ZmxhZ3M9MDsNCg0KICAgIGNoYXIgKmJpbm5hbWU9 TlVMTDsgLyogZmlsZSBuYW1lIHRvIHN0b3JlIGJpbmFyeSBhdHRhY2htZW50 cyBpbiAqLw0KICAgIGludCBiaW5maWxlPS0xOw0KDQogICAgRW5jb2RlVHlw ZSBkZWNvZGU9RU5DT0RFX05PUk1BTDsNCiAgICBDb250ZW50VHlwZSBjb250 ZW50PUNPTlRFTlRfVEVYVDsNCiAgDQogICAgaWYgKCFzdHJjYXNlY21wKG1i b3gsICJOT05FIikgfHwgdXNlX3N0ZGluKQ0KICAgICAgICBmcCA9IHN0ZGlu Ow0KICAgIGVsc2Ugew0KICAgICAgICBpZiAoKGZwID0gZm9wZW4obWJveCwg InIiKSkgPT0gTlVMTCkgew0KICAgICAgICAgICAgc3ByaW50ZihlcnJtc2cs ICJDb3VsZG4ndCBvcGVuIG1haWwgYXJjaGl2ZSBcIiVzXCIuIiwgbWJveCk7 DQogICAgICAgICAgICBwcm9nZXJyKE5VTEwpOw0KICAgICAgICB9DQogICAg fQ0KICANCiAgICBpZiAocmVhZG9uZSkNCiAgICAgICAgbnVtID0gYmlnbnVt Ow0KICAgIGVsc2UNCiAgICAgICAgbnVtID0gMDsNCg0KICAgIGhhc3N1Ympl Y3QgPSAwOw0KICAgIGhhc2RhdGUgPSAwOw0KI2lmIDANCiAgICB3YXNpbnJl cGx5ID0gMDsNCiNlbmRpZg0KICAgIGlzaW5oZWFkZXIgPSAxOw0KICAgIHN0 cmNweShzdWJqZWN0LCBOT1NVQkpFQ1QpOw0KICAgIGlucmVwbHlbMF0gPSAn XDAnOw0KICAgIHRtcGZyb21bMF0gPSAnXDAnOw0KICAgIG9sZGxpbmVbMF0g PSAnXDAnOw0KICAgIG1zZ2lkWzBdID0gJ1wwJzsNCiAgICBicCA9IE5VTEw7 DQoNCiAgICBpZiAoIXJlYWRvbmUpIHsNCiAgICAgICAgcmVwbHlsaXN0ID0g TlVMTDsNCiAgICAgICAgc3ViamVjdGxpc3QgPSBOVUxMOw0KICAgICAgICBh dXRob3JsaXN0ID0gTlVMTDsNCiAgICAgICAgZGF0ZWxpc3QgPSBOVUxMOw0K ICAgIH0NCg0KICAgIGlmIChzaG93cHJvZ3Jlc3MgJiYgcmVhZG9uZSkNCiAg ICAgICAgcHJpbnRmKCJSZWFkaW5nIG5ldyBoZWFkZXIuLi5cbiIpOw0KDQog ICAgaWYgKHNob3dwcm9ncmVzcyAmJiAhcmVhZG9uZSkgew0KICAgICAgICBp ZiAoIXN0cmNhc2VjbXAobWJveCwgIk5PTkUiKSB8fCB1c2Vfc3RkaW4pDQog ICAgICAgICAgICBwcmludGYoIkxvYWRpbmcgbWFpbGJveC4uLiAgICAiKTsN CiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcHJpbnRmKCJMb2FkaW5nIG1h aWxib3ggXCIlc1wiLi4uICAgICIsIG1ib3gpOw0KICAgIH0NCiAgICB3aGls ZSAoZmdldHMobGluZSwgTUFYTElORSwgZnApICE9IE5VTEwpIHsNCiAgICAg ICAgaWYgKGlzaW5oZWFkZXIpIHsNCiAgICAgICAgICAgIGlmICghc3RybmNh c2VjbXAobGluZSwgIkZyb20gIiwgNSkpDQogICAgICAgICAgICAgICAgc3Ry Y3B5bWF4KGZyb21kYXRlLCAoY2hhciAqKSBnZXRmcm9tZGF0ZShsaW5lKSwg REFURVNUUkxFTik7DQogICAgICAgICAgICAvKiBjaGVjayBmb3IgTUlNRSAq Lw0KICAgICAgICAgICAgZWxzZSBpZiAoIXN0cm5jYXNlY21wKCBsaW5lLCAi TUlNRS1WZXJzaW9uOiIsIDEzKSkNCiAgICAgICAgICAgICAgICBNaW1lX0Ig PSBUUlVFOw0KI2lmIDANCi8qIERhbmllbCdzIG5vdGU6IGp1c3QgKndoYXQq IGlzIHRoaXMgaGFjayBkb2luZz8gKi8NCi8qIEtlbnQncyBub3RlOiBTYWQg YXR0ZW1wdCBhdCBkZXRlcm1pbmcgYSBjb250aW51YXRpb24gbGluZSA/ICov DQogICAgICAgICAgICBlbHNlIGlmICgoIXN0cm5jbXAobGluZSwgIiAgICAi LCA0KSB8fCBsaW5lWzBdID09ICdcdCcpICYmDQogICAgICAgICAgICAgICAg c3RyY2hyKGxpbmUsICc8JykgJiYgc3RyY2hyKGxpbmUsICc+JykgJiYNCiAg ICAgICAgICAgICAgICBzdHJjaHIobGluZSwgJ0AnKSAmJiB3YXNpbnJlcGx5 KSB7DQogICAgICAgICAgICAgICAgYnAgPSAoc3RydWN0IGJvZHkgKikgYWRk Ym9keShicCwgJmxwLCBsaW5lLCAwKTsNCiAgICAgICAgICAgICAgICBzdHJj cHltYXgoaW5yZXBseSwgKGNoYXIgKikgZ2V0cmVwbHkobGluZSksIFJFUFlT VFJMRU4pOw0KICAgICAgICAgICAgICAgIHdhc2lucmVwbHkgPSAwOw0KICAg ICAgICAgICAgfQ0KI2VuZGlmDQogICAgICAgICAgICBlbHNlIGlmIChpc3Nw YWNlKGxpbmVbMF0pICYmICgnXG4nICE9IGxpbmVbMF0pICkgew0KICAgICAg ICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgKiogc2luY2UgdGhpcyBi ZWdpbnMgd2l0aCBhIHdoaXRlc3BhY2UsIGl0IG1lYW5zIHRoZSANCiAgICAg ICAgICAgICAgICAqKiBwcmV2aW91cyBsaW5lIGlzIGNvbnRpbnVlZCBvbiB0 aGlzIGxpbmUsIGxlYXZlIG9ubHkgDQogICAgICAgICAgICAgICAgKiogb25l IHNwYWNlIGNoYXJhY3RlciBhbmQgZ28hIA0KICAgICAgICAgICAgICAgICov DQogICAgICAgICAgICAgICAgY2hhciAqcHRyPWxpbmU7DQogICAgICAgICAg ICAgICAgd2hpbGUgKGlzc3BhY2UoKnB0cikpDQogICAgICAgICAgICAgICAg ICAgICBwdHIrKzsNCiAgICAgICAgICAgICAgICBwdHItLTsgLyogbGVhdmUg b25lIHNwYWNlICovDQogICAgICAgICAgICAgICAgKnB0cj0nICc7IC8qIG1h a2UgaXQgYSB0cnVlIHNwYWNlLCBubyB0YWJzIGhlcmUhICovDQojaWYgMA0K ICAgICAgICAgICAgICAgIGRlY29kZVJGQzIwNDcocHRyKzEsIE1BWExJTkUt KHB0cisyLWxpbmUpKTsNCiNlbmRpZg0KICAgICAgICAgICAgICAgIGJwID0g KHN0cnVjdCBib2R5ICopIGFkZGJvZHkoYnAsICZscCwgcHRyLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9EWV9DT05USU5V RXxCT0RZX0hFQURFUnxib2R5ZmxhZ3MpOw0KICAgICAgICAgICAgfQ0KICAN CiAgICAgICAgICAgIGVsc2UgaWYgKGxpbmVbMF0gPT0gJ1xuJykgew0KICAg ICAgICAgICAgICAgIHN0cnVjdCBib2R5ICpoZWFkOw0KDQogICAgICAgICAg ICAgICAgY2hhciBzYXZlYWx0ZXJuYXRpdmU7DQoNCiAgICAgICAgICAgICAg ICAvKiANCiAgICAgICAgICAgICAgICAqKiB3ZSBtYXJrIHRoaXMgYXMgYSBo ZWFkZXItbGluZSwgYW5kIHdlIHVzZSBpdCB0byANCiAgICAgICAgICAgICAg ICAqKiB0cmFjayBlbmQtb2YtaGVhZGVyIGRpc3BsYXlzIA0KICAgICAgICAg ICAgICAgICovDQogICAgICAgICAgICAgICAgYnAgPSAoc3RydWN0IGJvZHkg KikgYWRkYm9keShicCwgJmxwLCBsaW5lLCANCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQk9EWV9IRUFERVJ8Ym9keWZsYWdzKTsN CiAgICAgICAgICAgICAgICBpc2luaGVhZGVyLS07DQoNCiAgICAgICAgICAg ICAgICAvKg0KICAgICAgICAgICAgICAgICoqIFRoaXMgc2lnbmFscyB1cyB0 aGF0IHdlIGFyZSBubyBsb25nZXIgaW4gdGhlIGhlYWRlciwgDQogICAgICAg ICAgICAgICAgKiogbGV0J3MgZmlsbCBpbiBhbGwgdGhvc2UgZmllbGRzIHdl IGFyZSBpbnRlcmVzdGVkIGluLiANCiAgICAgICAgICAgICAgICAqKiBQYXJz ZSB0aGUgaGVhZGVycyB1cCB0byBub3cgYW5kIGNvcHkgdG8gdGhlIHRhcmdl dCANCiAgICAgICAgICAgICAgICAqKiB2YXJpYWJsZXMgDQogICAgICAgICAg ICAgICAgKi8NCiAgDQogICAgICAgICAgICAgICAgZm9yIChoZWFkID0gYnA7 IGhlYWQ7IGhlYWQ9aGVhZC0+bmV4dCkgew0KICAgICAgICAgICAgICAgICAg ICBpZiAoaGVhZC0+aGVhZGVyICYmICFoZWFkLT5kZW1pbWVkICYmIE1pbWVf Qikgew0KICAgICAgICAgICAgICAgICAgICAgICBoZWFkLT5saW5lID0gbWRl Y29kZVJGQzIwNDcoaGVhZC0+bGluZSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihoZWFkLT5s aW5lKSk7DQogICAgICAgICAgICAgICAgICAgICAgIGhlYWQtPmRlbWltZWQ9 VFJVRTsgLyogZG9uJ3QgZG8gdGhpcyBhZ2FpbiAqLw0KICAgICAgICAgICAg ICAgICAgICB9DQogIA0KICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZC0+ YXR0YWNoZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 DQogICAgICAgICAgICAgICAgICAgIH0NCiAgDQogICAgICAgICAgICAgICAg ICAgIGlmICghc3RybmNhc2VjbXAoaGVhZC0+bGluZSwgIkRhdGU6IiwgNSkp IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweW1heChkYXRlLCAo Y2hhciAqKWdldG1haWxkYXRlKGhlYWQtPmxpbmUpLCANCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVTVFJMRU4pOw0KICAgICAg ICAgICAgICAgICAgICAgICAgaGFzZGF0ZSA9IDE7DQogICAgICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0cm5j YXNlY21wKGhlYWQtPmxpbmUsICJGcm9tOiIsIDUpKSB7DQogICAgICAgICAg ICAgICAgICAgICAgICBnZXRuYW1lKGhlYWQtPmxpbmUsIG5hbWUsIGVtYWls KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmICghc3RybmNhc2VjbXAoaGVhZC0+bGluZSwgIk1lc3NhZ2Ut SWQ6IiwgMTEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHlt YXgobXNnaWQsKGNoYXIgKilnZXRpZChoZWFkLT5saW5lKSxNU0dEU1RSTEVO KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmICghc3RybmNhc2VjbXAoaGVhZC0+bGluZSwgIlN1YmplY3Q6 IiwgOCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweW1heChz dWJqZWN0LChjaGFyICopZ2V0c3ViamVjdChoZWFkLT5saW5lKSwgDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCSlNUUkxFTik7DQog ICAgICAgICAgICAgICAgICAgICAgICBoYXNzdWJqZWN0ID0gMTsNCiAgICAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlm ICghc3RybmNhc2VjbXAoaGVhZC0+bGluZSwgIkluLVJlcGx5LVRvOiIsIDEy KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5bWF4KGlucmVw bHksKGNoYXIgKilnZXRyZXBseShoZWFkLT5saW5lKSwgDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUkVQWVNUUkxFTik7DQogICAgICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo IXN0cm5jYXNlY21wKGhlYWQtPmxpbmUsICJSZWZlcmVuY2VzOiIsIDExKSkg ew0KICAgICAgICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAg ICAgICAgICAgICoqIEFkZGluZyB0aHJlYWRpbmcgY2FwYWJpbGl0eSBmb3Ig dGhlICJSZWZlcmVuY2VzIiANCiAgICAgICAgICAgICAgICAgICAgICAgICoq IGhlYWRlciwgYWxhIFJGQyA4MjIsIHVzZWQgb25seSBmb3IgbWVzc2FnZXMg dGhhdCANCiAgICAgICAgICAgICAgICAgICAgICAgICoqIGhhdmUgIlJlZmVy ZW5jZXMiIGJ1dCBkbyBub3QgaGF2ZSBhbiAiSW4tcmVwbHktdG8iDQogICAg ICAgICAgICAgICAgICAgICAgICAqKiBmaWVsZC4gVGhpcyBpcyBwYXJ0aWNh bGx5IGEgY29uY2Vzc2lvbiBmb3IgTmV0c2NhcGUncw0KICAgICAgICAgICAg ICAgICAgICAgICAgKiogZW1haWwgY29tcG9zZXIsIHdoaWNoIGVycm9uZW91 c2x5IHVzZXMgIlJlZmVyZW5jZXMiICAgICAgICAgICAgICAgICAgICAgICAg ICoqIHdoZW4gaXQgc2hvdWxkIHVzZSAiSW4tcmVwbHktdG8iLiANCiAgICAg ICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoISppbnJlcGx5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cmNweW1heChpbnJlcGx5LChjaGFyICopZ2V0aWQoaGVhZC0+bGluZSks IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVBZ U1RSTEVOKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmICghaGVhZHApDQogICAgICAg ICAgICAgICAgICAgIGhlYWRwPWJwOw0KDQogICAgICAgICAgICAgICAgc2F2 ZWFsdGVybmF0aXZlID0gRkFMU0U7DQogICAgICAgICAgICAgICAgDQogICAg ICAgICAgICAgICAgZm9yIChoZWFkID0gaGVhZHA7IGhlYWQ7IGhlYWQ9aGVh ZC0+bmV4dCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cm5jYXNl Y21wKCBoZWFkLT5saW5lLCAiQ29udGVudC1UeXBlOiIsIDEzKSkgew0KICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICpwdHI9aGVhZC0+bGluZSsxMzsN CiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYm91bmRhcnk7DQogICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgdHlwZVsxMjldOw0KI2RlZmluZSBE SVNQX0hSRUYgMQ0KI2RlZmluZSBESVNQX0lNRyAgMg0KI2RlZmluZSBESVNQ X0lHTk9SRSAzDQogICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQg aXMgaHJlZiB0byB0aGUgYXR0YWNobWVudDogKi8NCiAgICAgICAgICAgICAg ICAgICAgICAgY2hhciBkaXNwb3NpdGlvbj1ESVNQX0hSRUY7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKnB0cikpDQogICAg ICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsNCg0KICAgICAgICAgICAg ICAgICAgICAgICBzc2NhbmYocHRyLCAiJTEyOFteO10iLCB0eXBlKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgaWYgKChjcCA9IHN0cmNocih0eXBlLCAn XG4nKSkgIT0gTlVMTCkgDQogICAgICAgICAgICAgICAgICAgICAgICAgKmNw ID0gJ1wwJzsgLyogcm0gbmV3bGluZXMgKi8NCg0KICAgICAgICAgICAgICAg ICAgICAgICBpZihhbHRlcm5hdGl2ZXBhcnNlcikgew0KICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFdlIGFyZSBwYXJzaW5nIGFsdGVybmF0aXZlcy4u LiAqLw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJlZmVyZWRj b250ZW50KHR5cGUpICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogLi4uIHRoaXMgaXMgYSBwcmVmZXJlZCB0eXBlLCB3ZSB3YW50IHRvIHN0 b3JlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIFtpbnN0 ZWFkIG9mIHRoZSBlYXJsaWVyIG9uZV0uICovDQogICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgYm9keSAqbmV4dDsNCiNpZiAwDQogICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzIGlzIG1vcmUgZnVuIHRo YW4gdGhlIHByZXZpb3VzIG9uZVxuIiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0eXBlKTsNCiNlbmRpZg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2hpbGUoYnApIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmV4dD1icC0+bmV4dDsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnJlZShicC0+bGluZSk7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZyZWUoYnApOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicD1uZXh0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZHAgPSBOVUxMOw0KICAg ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC4u LmFuZCB0aGlzIHR5cGUgaXMgbm90IGEgcHJlZmVyZWQgb25lLiBUaHVzLCB3 ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2hhbGwgaWdub3Jl IGl0IGNvbXBsZXRlbHkhICovDQogICAgICAgICAgICAgICAgICAgICAgICAg ICBkaXNwb3NpdGlvbiA9IERJU1BfSUdOT1JFOw0KICAgICAgICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgICAgICAgICAgICBpZiggKERJU1BfSUdOT1JFPT1kaXNwb3NpdGlv bikgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZWNvbnRl bnQodHlwZSkgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9u J3Qgc2F2ZSB0aGlzICovDQogICAgICAgICAgICAgICAgICAgICAgICAgZGlz cG9zaXRpb24gPSBESVNQX0lHTk9SRTsNCiAgICAgICAgICAgICAgICAgICAg ICAgICBjb250ZW50ID0gQ09OVEVOVF9JR05PUkU7DQogICAgICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo IXN0cm5jYXNlY21wKHR5cGUsICJ0ZXh0IiwgNCkpIHsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAvKiANCiAgICAgICAgICAgICAgICAgICAgICAgICAg KiogdGV4dCBmb2xsb3dzLCBpZ25vcmUgdGhpcyANCiAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyog ZGVmYXVsdCBpcyBqdXN0IHBsYWluIDcvOCBiaXQgKi8NCiAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVjb2RlID0gRU5DT0RFX05PUk1BTDsNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cm5jYXNlY21wKCZ0eXBl WzRdLCAiL2h0bWwiLCA1KSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRlbnQgPSBDT05URU5UX0hUTUw7DQogICAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRlbnQgPSBDT05URU5UX1RFWFQ7DQogICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJuY2FzZWNtcCh0 eXBlLCAibWVzc2FnZS9yZmM4MjIiLCAxNCkpIHsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg KiogSGVyZSBjb21lcyBhbiBhdHRhY2hlZCBtYWlsISBUaGlzIGNhbiBiZSB1 Z2x5LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICoqIHNpbmNlIHRo ZSBhdHRhY2hlZCBtYWlsIG1heSB2ZXJ5IHdlbGwgaXRzZWxmIA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiogY29udGFpbiBhdHRhY2hlZCBiaW5h cmllcywgb3Igd2h5IG5vdCBhbm90aGVyIA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiogYXR0YWNoZWQgbWFpbD8gOi0pDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg KiogV2UgbmVlZCB0byBzdG9yZSB0aGUgY3VycmVudCBib3VuZGFyeSBzZXBh cmF0b3IgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAqKiBpbiBvcmRl ciB0byBnZXQgaXQgYmFjayB3aGVuIHdlJ3JlIGRvbmUgcGFyc2luZyANCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICoqIHRoaXMgcGFydGljdWxhciBt YWlsLCBzaW5jZSBlYWNoIGF0dGFjaGVkIG1haWwgDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAqKiB3aWxsIGhhdmUgaXRzIG93biBib3VuZGFyeSBz ZXBhcmF0b3IgdGhhdCAqbWlnaHQqICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiogYmUgdXNlZC4gIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwID0gKHN0cnVjdCBi b2R5ICopIGFkZGJvZHkoYnAsICZscCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiPFA+PFNUUk9ORz5hdHRhY2hlZCBtYWlsIGZvbGxvd3M6 PC9TVFJPTkc+PEhSPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQk9EWV9IVE1MSVpFRCB8IGJvZHlmbGFncyk7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICBib2R5ZmxhZ3MgfD0gQk9EWV9BVFRBQ0hFRDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5oZWFkZXIgPSAyOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoc3RybmNhc2VjbXAodHlwZSwgIm11bHRpcGFydC8iLCAxMCkpIHsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiogVGhpcyBpcyBub3QgYSBtdWx0aXBhcnQgYW5kIG5v dCB0ZXh0IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYXR0YWNobmFtZVsxMjldOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjaGVja3BhdGhbMjU2 XTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWU7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmaWxlID0gTlVMTDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgbmFtZWlzdW5pcT1G QUxTRTsNCiAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0g KGNoYXIgKilzdHJzdHIocHRyLCAibmFtZT0iKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChuYW1lKSB7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3NjYW5mKG5hbWUrNiwgIiUxMjhbXlwiXSIsIGF0dGFj aG5hbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUg PSBhdHRhY2huYW1lOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2hlY2sgaWYgd2UgY2FuIHVzZSB0aGlzIGF0dGFjaGVkIG5hbWUg Zm9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rvcmlu ZzogKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJs ZW4obmFtZSkgKyBzdHJsZW4oZGlyKSA8PSAyNTQpIHsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHllcywgd2UgaGF2ZSByb29tIGlu IG91ciBhcnJheSAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHN0YXQgZmlsZWluZm87DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyIGFsdGVyWzJdPSIiOw0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ZXI9J2EnOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWlzdW5pcT1UUlVFOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gew0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGNoZWNrcGF0 aCwgIiVzLyVzJXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRpciwgYWx0ZXIsIG5hbWUpOw0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBsb29wIHdoaWxlIHRoZSBmaWxl IGV4aXN0IGFuZCB0cnkgYSBmZXcNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgZmlsZSBuYW1lcyBiZWZvcmUg Z2l2aW5nIHVwICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmKGNvdW50ZXI+PSd6Jykgew0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHdlIGRpZG4ndCBmaW5kIGEgdW5pcXVlIGZp bGUgbmFtZSAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5hbWVpc3VuaXE9RkFMU0U7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3ByaW50ZihhbHRlciwgIiVjIiwgY291bnRlcisrKTsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCA9PSBsc3Rh dChjaGVja3BhdGgsICZmaWxlaW5mbykpOw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmKERJU1BfSUdOT1JFICE9IGRpc3Bv c2l0aW9uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiBTYXZpbmcgb2YgdGhl IGF0dGFjaG1lbnRzIGlzIGJlaW5nIGRvbmUgaW5saW5lICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiogYXMgdGhleSBhcmUgZW5jb3VudGVyZWQu IFRoZSBkaXJlY3RvcmllcyBtdXN0IA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKiBleGlzdCBmaXJzdC4uLg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLw0KICANCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYoIW5hbWVpc3VuaXEpDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogZ2V0IGEgcmFuZG9tIG5hbWUgKi8NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiaW5uYW1lID0gdG1wbmFtZShkaXIsICJiaW4i KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJpbm5hbWUgPSBjaGVja3BhdGg7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbm5hbWUp IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5maWxlPW9w ZW4oYmlubmFtZSwgT19XUk9OTFl8T19DUkVBVCwgZmlsZW1vZGUpOw0KDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoLTEgIT0gYmluZmls ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2htb2Qo YmlubmFtZSwgZmlsZW1vZGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYoc2hvd3Byb2dyZXNzKQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIlxuQ3JlYXRlZCBmaWxlICVzIHdp dGggbW9kZSAlb1xuIiwgYmlubmFtZSwgZmlsZW1vZGUpOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0NCg0KI2lmIDENCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmaWxlPShjaGFyICopc3RycmNocihiaW5u YW1lLCBQQVRIX1NFUEFSQVRPUik7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGZpbGUpDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmaWxlKys7IC8qIHBhc3MgdGhlIHNlcGFyYXRvciAqLw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZpbGU9YmlubmFtZTsNCiNlbHNlDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9YmlubmFtZTsN CiNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBpbmxpbmVjb250ZW50KHR5 cGUpICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlm IHdlIGtub3cgb3VyIGJyb3dzZXJzIGNhbiBzaG93IHRoaXMNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIG9mIGNvbnRleHQgYXMt aXMsIHdlIG1ha2UgYSA8aW1nPiB0YWcNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnN0ZWFkIG9mIDxhIGhyZWY+ISAqLw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uID0gRElTUF9J TUc7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRm KGxpbmUsICIlczxJTUcgU1JDPVwiJXNcIiBBTFQ9XCIlc1wiPiIsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvd2hyID8g IjxIUj5cbiIgOiAiIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmaWxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbmFtZSA/IG5hbWUgOiAicGljdHVyZSIpOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNwcmludGYobGluZSwgIiVzPFVMPlxuPExJPiVzIGF0dGFjaG1lbnQ6 IDxBIEhSRUY9XCIlc1wiPiVzPC9BPlxuPC9VTD5cbiIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvd2hyID8gIjxIUj5c biIgOiAiIiksIHR5cGUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmlsZSA/IGZpbGUgOiAiPHZvaWQ+IiwgDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID8gbmFtZSA6 ICJzdG9yZWQiKTsNCiAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAgPSAoc3RydWN0 IGJvZHkgKikgYWRkYm9keShicCwgJmxwLCBsaW5lLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEJPRFlfSFRNTElaRUR8Ym9keWZsYWdzKTsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3ByaW50ZihhdHRhY2huYW1lLCAiPCEtLSBhdHRhY2ht ZW50PVwiJS44MHNcIiAtLT5cbiIsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmlsZSk7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJwID0gKHN0cnVjdCBib2R5ICopIGFkZGJvZHkoYnAsICZscCwg YXR0YWNobmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCT0RZX0hUTUxJWkVEfGJvZHlm bGFncyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQ0KICANCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmKERJU1BfSUdOT1JFID09IGRpc3Bvc2l0aW9uKSB7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBDT05URU5U X0lHTk9SRTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoYmlubmFtZSAmJiAoYmluZmlsZSE9LTEpKQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBDT05U RU5UX0JJTkFSWTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBD T05URU5UX1VOS05PV047DQogICAgICAgICAgICAgICAgICAgICAgICAgICB9 DQogICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWVpc3VuaXEg JiYgYmlubmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJl ZShiaW5uYW1lKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAqKiBG aW5kIHRoZSBmaXJzdCBib3VuZGFyeSBzZXBhcmF0b3IgDQogICAgICAgICAg ICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgDQogICAgICAgICAgICAg ICAgICAgICAgICAgYm91bmRhcnk9c3RyY2FzZXN0cihwdHIsICJib3VuZGFy eT0iKTsNCiAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGJvdW5kYXJ5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICBib3VuZGFyeT0oY2hhciAqKXN0cmNocihib3VuZGFyeSwgJz0nKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3VuZGFyeSkgew0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSsrOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqYm91bmRh cnkpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5 Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnXCInID09 ICpib3VuZGFyeSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNzY2FuZigrK2JvdW5kYXJ5LCAiJVteXCJdIiwgYm91bmRidWZmZXIpOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3NjYW5mKGJvdW5kYXJ5LCAiJXMiLCBib3VuZGJ1ZmZl cik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0g Ym91bmRidWZmZXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBNQVhMSU5FLCBmcCkpIHsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKGxp bmUsICItLSIsIDIpICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAhc3RybmNtcChsaW5lKzIsIGJvdW5kYnVmZmVyLCANCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihib3Vu ZGJ1ZmZlcikpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICoq IFRoaXMgc3RvcmVzIHRoZSBib3VuZGFyeSBzdHJpbmcgaW4gYSBzdGFjayAN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICoqIG9mIHN0cmluZ3M6IA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvdW5kcCA9IGJvdW5kKGJvdW5kcCwgYm91bmRidWZm ZXIpOw0KICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW50 Zigic2V0IG5ldyBib3VuZGFyeTogJXNcbiIsIGJvdW5kcC0+bGluZSk7ICov DQogIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICoqIFdlIHNldCBvdXJzZWx2ZXMsICJiYWNr IGluIGhlYWRlciIgc2luY2UgdGhlcmUgaXMgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKiBnb25uYSBjb21lIE1JTUUgaGVhZGVycyBub3cgYWZ0ZXIg dGhlIHNlcGFyYXRvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8N CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5oZWFkZXIgPSAxOw0K DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhbmllbCBTdGVu YmVyZyBzdGFydGVkIGFkZGluZyB0aGUNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqICJtdWx0aXBhcnQvYWx0ZXJuYXRpdmUiIHBhcnNlciAxM3Ro IG9mIEp1bHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDE5OTgh ICBXZSBjaGVjayBpZiB0aGlzIGlzIGEgJ211bHRpcGFydC8NCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIGFsdGVybmF0aXZlJyBoZWFkZXIsIGlu IHdoaWNoIGNhc2Ugd2UgbmVlZCB0bw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogdHJlYXQgaXQgdmVyeSBzcGVjaWFsLiAgKi8NCg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYoIXN0cm5jYXNlY21wKCZwdHJbMTBd LCAiYWx0ZXJuYXRpdmUiLCAxMSkpIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSXQgKmlzKiBhbiBhbHRlcm5hdGl2ZSBzZXNzaW9uISAg QWx0ZXJuYXRpdmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog bWVhbnMgdGhlcmUgd2lsbCBiZSBYIHBhcnRzIHdpdGggdGhlIHNhbWUgdGV4 dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2luZyBkaWZm ZXJlbnQgY29udGVudC10eXBlcy4gV2UgYXJlIHN1cHBvc2VkDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIHRvIHRha2UgdGhlIG1vc3QgcHJl ZmVyZWQgZm9ybWF0IG9mIHRoZSBvbmVzDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqIHVzZWQgYW5kIG9ubHkgb3V0cHV0IHRoYXQgb25lLiBN SU1FIGRlZmluZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog dGhlIG9yZGVyIG9mIHRoZSB0ZXh0cyB0byBzdGFydCB3aXRoIHB1cmUgdGV4 dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbmQgdGhlbiBj b250aW51ZSB3aXRoIG1vcmUgYW5kIG1vcmUgb2JzY3VyZQ0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBmb3JtYXRzLiAod2VsbCwgaXQgZG9l c24ndCB1c2UgdGhvc2UgdGVybXMgYnV0DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqIHRoYXQncyB3aGF0IGl0IG1lYW5zISA7LSkpICovDQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSG93ICJ3ZSIgYXJl IGdvbm5hIGRlYWwgd2l0aCB0aGVtOg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBX ZSBjcmVhdGUgYSAic3BhcmUiIGxpbmtlZCBsaXN0IGJvZHkgZm9yIHRoZQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB2ZXJ5IGZpcnN0IHBh cnQuIFNpbmNlIHRoZSBmaXJzdCBwYXJ0IGlzDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqIGRlZmluZWQgdG8gYmUgdGhlIG1vc3QgcmVhZGFi bGUsIHdlIHNhdmUgdGhhdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiBpbiBjYXNlIG5vIGNvbnRlbnQtdHlwZSBwcmVzZW50IGlzIHByZWZl cmVkIQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBXZSBza2lwIGFsbCBwYXJ0cyB0 aGF0IGFyZSBub3QgcHJlZmVyZWQuIEFsbA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBwcmVmZXJlZCBwYXJ0cyBmb3VuZCB3aWxsIHJlcGxh Y2UgdGhlIGZpcnN0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq IG9uZSB0aGF0IGlzIHNhdmVkLiBXaGVuIHdlIHJlYWNoIHRoZSBlbmQgb2YN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGFsdGVybmF0 aXZlcywgd2Ugd2lsbCB1c2UgdGhlIGxhc3Qgc2F2ZWQNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogb25lIGFzIHByZWZlcmVkLg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiAqLw0KDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNhdmVhbHRlcm5hdGl2ZSA9IFRSVUU7DQojaWYg MA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNBVkVB TFRFUk5BVElWRTogeWVzXG4iKTsNCiNlbmRpZiAgICAgICAgICAgDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvdW5kYXJ5ID0gTlVMTDsNCiAgICAgICAgICAgICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgICBlbHNlIGlmICghc3RybmNhc2VjbXAoaGVhZC0+bGluZSwgIkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IiwgMjYpKSB7DQogICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKnB0cj1oZWFkLT5saW5lKzI2Ow0KICANCiAgICAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKnB0cikpDQogICAg ICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsNCiAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFzdHJuY2FzZWNtcChwdHIsICJRVU9URUQtUFJJTlRB QkxFIiwgMTYpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNv ZGUgPSBFTkNPREVfUVA7DQogICAgICAgICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0cm5jYXNlY21wKHB0 ciwgIkJBU0U2NCIsIDYpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICBkZWNvZGUgPSBFTkNPREVfQkFTRTY0Ow0KICAgICAgICAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJu Y2FzZWNtcChwdHIsICI4QklUIiwgNCkpIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlY29kZSA9IEVOQ09ERV9OT1JNQUw7DQogICAgICAgICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoIXN0cm5jYXNlY21wKHB0ciwgIjdCSVQiLCA0KSkgew0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVjb2RlID0gRU5DT0RFX05PUk1BTDsNCiAg ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmICghc3RybmNhc2VjbXAocHRyLCAieC11dWUiLCA1KSkgew0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlID0gRU5DT0RFX1VV RU5DT0RFOw0KICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1 dWRlY29kZShmcCwgbGluZSwgbGluZSwgTlVMTCwgVFJVRSkpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKiBvaCBnZWUsIHdlIGZhaWxlZCB0aGlzIGlzIGNo YW9zICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 DQogICAgICAgICAgICAgICAgICAgICAgIH0gIA0KICAgICAgICAgICAgICAg ICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRoaXMgaXMgYW4gdW5rbm93biBmb3JtYXQsIHdlIHVzZSBkZWZhdWx0IGRl Y29kaW5nICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNv ZGVbNjRdOw0KICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzY2Fu ZihwdHIsICIlNjNzIiwgY29kZSk7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICBzcHJpbnRmKGxpbmUsICIgKCclcycgZW5jb2RpbmcgaXMgbm90IHN1 cHBvcnRlZCwgc3RvcmVkIGFzLWlzKVxuIiwgY29kZSk7DQogIA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnAgPSAoc3RydWN0IGJvZHkgKikgYWRk Ym9keShicCwgJmxwLCBsaW5lLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQk9EWV9IVE1MSVpFRHxib2R5ZmxhZ3Mp Ow0KICAgICAgICAgICAgICAgICAgICAgIH0gIA0KICAgICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChzYXZl YWx0ZXJuYXRpdmUpIHsNCiAgICAgICAgICAgICAgICAgIC8qIGxldCdzIHJl bWVtYmVyICdicCcgYW5kICdscCcgKi8NCg0KICAgICAgICAgICAgICAgICAg b3JpZ2JwPWJwOw0KICAgICAgICAgICAgICAgICAgb3JpZ2xwPWxwOw0KDQog ICAgICAgICAgICAgICAgICBmaXJzdGJwPU5VTEw7IC8qIHJlc2V0IHRoaXMg Ki8NCiAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlcGFyc2VyID0gVFJV RTsNCg0KICAgICAgICAgICAgICAgICAgLyogcmVzdGFydCBvbiBhIG5ldyBs aXN0OiAqLw0KICAgICAgICAgICAgICAgICAgbHA9YnA9TlVMTDsNCiAgICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgICBoZWFkcCA9IGxwOyAvKiBzdGFy dCBhdCB0aGlzIHBvaW50IG5leHQgdGltZSAqLw0KICAgICAgICAgIH0NCiAg ICAgICAgICBlbHNlIHsNCiNpZiAwDQogICAgICAgICAgICAgIGRlY29kZVJG QzIwNDcobGluZSwgTUFYTElORSk7DQojZW5kaWYNCiAgICAgICAgICAgICAg YnAgPSAoc3RydWN0IGJvZHkgKikgYWRkYm9keShicCwgJmxwLCBsaW5lLCBC T0RZX0hFQURFUnxib2R5ZmxhZ3MpOw0KICAgICAgICAgICAgfQ0KICAgICAg ICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgaWYgKCFzdHJuY21w KGxpbmUsICJGcm9tICIsIDUpICYmIChvbGRsaW5lWzBdPT0nXG4nKSkgew0K ICAgICAgICAgICAgICAgIGlmIChyZWFkb25lKQ0KICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKG9s ZGxpbmUsICJGb3J3YXJkZWQgbWVzc2FnZToiKSkgew0KICAgICAgICAgICAg ICAgICAgICBvbGRsaW5lWzBdID0gJ1wwJzsNCiAgICAgICAgICAgICAgICAg ICAgY29udGludWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgIGlzaW5oZWFkZXIgPSAxOw0KI2lmIDANCiAgICAgICAgICAgICAgICB3 YXNpbnJlcGx5ID0gMDsNCiNlbmRpZg0KICAgICAgICAgICAgICAgIGlmICgh aGFzc3ViamVjdCkNCiAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHN1Ympl Y3QsIE5PU1VCSkVDVCk7DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgICAgICAgICBoYXNzdWJqZWN0ID0gMTsNCiAgDQogICAgICAgICAg ICAgICAgaWYgKCFoYXNkYXRlKQ0KICAgICAgICAgICAgICAgICAgICBzdHJj cHkoZGF0ZSwgTk9EQVRFKTsNCiAgICAgICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICAgICAgIGhhc2RhdGUgPSAxOw0KICANCiAgICAgICAgICAg ICAgICBpZiAoaW5yZXBseVswXSA9PSAnXDAnKQ0KICAgICAgICAgICAgICAg ICAgICBvbmV1bnJlKGlucmVwbHksIHN1YmplY3QpOw0KICANCiAgICAgICAg ICAgICAgICB3aGlsZSAocm1sYXN0bGluZXMoYnApKTsNCiAgICAgICAgICAg ICAgICBhZGRoYXNoKG51bSxkYXRlLG5hbWUsZW1haWwsbXNnaWQsc3ViamVj dCxpbnJlcGx5LGZyb21kYXRlLGJwKTsgICAgICAgICAgICAgICAgYXV0aG9y bGlzdCA9IChzdHJ1Y3QgaGVhZGVyICopDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWRkaGVhZGVyKGF1dGhvcmxpc3QsIG51bSwgbmFtZSwgc3Vi amVjdCwgZGF0ZSwgMSk7ICAgICAgICAgICAgICAgIHN1YmplY3RsaXN0ID0g KHN0cnVjdCBoZWFkZXIgKikNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhZGRoZWFkZXIoc3ViamVjdGxpc3QsbnVtLG5hbWUsdW5yZShzdWJqZWN0 KSxkYXRlLDApOw0KICAgICAgICAgICAgICAgIGRhdGVsaXN0ID0gKHN0cnVj dCBoZWFkZXIgKikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRo ZWFkZXIoZGF0ZWxpc3QsIG51bSwgbmFtZSwgc3ViamVjdCwgZnJvbWRhdGUs IDIpOw0KICAgICAgICAgICAgICAgIHN0cmNweW1heChmcm9tZGF0ZSwgKGNo YXIgKikgZ2V0ZnJvbWRhdGUobGluZSksIERBVEVTVFJMRU4pOw0KICAgICAg ICAgICAgDQogICAgICAgICAgICAgICAgYnAgPSBOVUxMOw0KICAgICAgICAg ICAgICAgIG51bSsrOw0KICAgICAgICAgICAgICAgIGJvZHlmbGFncz0wOyAv KiByZXNldCBzdGF0ZSBmbGFncyAqLw0KICAgICANCiAgICAgICAgICAgICAg ICAvKiBnbyBiYWNrIHRvIGRlZmF1bHQgbW9kZTogKi8NCiAgICAgICAgICAg ICAgICBjb250ZW50ID0gQ09OVEVOVF9URVhUOw0KICAgICAgICAgICAgICAg IGRlY29kZSA9IEVOQ09ERV9OT1JNQUw7DQogICAgICAgICAgICAgICAgTWlt ZV9CID0gRkFMU0U7DQogICAgICAgICAgICAgICAgaGVhZHAgPSBOVUxMOyAN CiAgICAgDQogICAgICAgICAgICAgICAgaWYgKCEobnVtICUgMTApICYmIHNo b3dwcm9ncmVzcyAmJiAhcmVhZG9uZSkgew0KICAgICAgICAgICAgICAgICAg ICBwcmludGYoIlxiXGJcYlxiJTRkIiwgbnVtKTsNCiAgICAgICAgICAgICAg ICAgICAgZmZsdXNoKHN0ZG91dCk7DQogICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICAgIGlucmVwbHlbMF0gPSAnXDAnOw0KICAgICAgICAgICAg fQ0KICAgICAgICAgICAgZWxzZSB7IC8qIGRlY29kZSBNSU1FIGNvbXBsaWVu dCBnaWJiZXJpc2ggKi8NCiAgICAgICAgICAgICAgICBjaGFyIG5ld2J1ZmZl cltNQVhMSU5FXTsNCiAgICAgICAgICAgICAgICBjaGFyICpkYXRhOw0KICAg ICAgICAgICAgICAgIGludCBkYXRhbGVuPS0xOyAvKiAtMSBtZWFucyB1c2Ug c3RybGVuIHRvIGdldCBsZW5ndGggKi8NCiAgICANCiAgICAgICAgICAgICAg ICBpZiAoTWltZV9CKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChib3Vu ZHAgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICFzdHJuY21wKGxpbmUs ICItLSIsIDIpICYmDQogICAgICAgICAgICAgICAgICAgICAgICAhc3RybmNt cChsaW5lKzIsIGJvdW5kcC0+bGluZSwgc3RybGVuKGJvdW5kcC0+bGluZSkp KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogcmlnaHQgYXQgdGhpcyBw b2ludCwgd2UgaGF2ZSBhbm90aGVyIHBhcnQgY29taW5nIHVwICovDQogICAg ICAgICAgICAgICAgICAgICAgICBpc2luaGVhZGVyID0gMTsgLyogYmFjayBv biBhIGtpbmQtb2YtaGVhZGVyICovDQoNCiNpZiAwICAgIA0KICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJoaXQgJXNcbiIsIGxpbmUpOw0KI2Vu ZGlmDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cm5jbXAobGlu ZSsyK3N0cmxlbihib3VuZHAtPmxpbmUpLCAiLS0iLCAyKSkgew0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJwID0gKHN0cnVjdCBib2R5ICopIGFk ZGJvZHkoYnAsICZscCwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCT0RZX0hUTUxJWkVEfGJvZHlm bGFncyk7DQogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91 bmRwID0gYm91bmQoYm91bmRwLCBOVUxMKTsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIWJvdW5kcCkgew0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib2R5ZmxhZ3MgJj0gfkJPRFlfQVRUQUNIRUQ7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmKGFsdGVybmF0aXZlcGFyc2VyKSB7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYm9keSAqbmV4dDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIG5vIGxvbmdlciBo YXZlIGFsdGVybmF0aXZlcyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYWx0ZXJuYXRpdmVwYXJzZXIgPSBGQUxTRTsNCiNpZiAwDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIldlIERVTVAgYW4g b2xkIGFsdGVybmF0aXZlXG4iKTsNCiNlbmRpZg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2hpbGUoYnApIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3JpZ2JwID0gYWRkYm9keShvcmlnYnAsICZvcmln bHAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnAtPmxpbmUsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGJwLT5oZWFkZXI/Qk9EWV9IRUFE RVI6MCl8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGJwLT5odG1sP0JPRFlfSFRNTElaRUQ6MCl8DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGJwLT5hdHRhY2hlZD9CT0RZX0FUVEFDSEVEOjApDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dD0gYnAtPm5leHQ7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoYnAtPmxpbmUp Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGJwKTsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnA9bmV4dDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJwID0gb3JpZ2JwOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbHAgPSBvcmlnbHA7DQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGhlYWRwPSBOVUxMOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0NCiNpZiAwDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGJvdW5kcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJiYWNrICVzXG4iLCBib3VuZHAtPmxpbmUpOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJiYWNrIHRvIE5PTkVcbiIpOw0K I2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgDQogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoLTEgIT0gYmluZmlsZSkgew0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKGJpbmZpbGUpOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmZpbGU9LTE7DQogICAgICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgIH0NCiAgICANCiAgICAgICAgICAgICAgICBzd2l0Y2ggKCBkZWNvZGUg KSB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgRU5DT0RFX1FQOg0KI2lm IDANCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVRUChmcCwgbGlu ZSwgbmV3YnVmZmVyLCBNQVhMSU5FKTsNCiAgICAgICAgICAgICAgICAgICAg ICAgICBkYXRhID0gbmV3YnVmZmVyOw0KI2Vsc2UNCiAgICAgICAgICAgICAg ICAgICAgICAgICBtZGVjb2RlUVAoZnAsIGxpbmUsICZkYXRhLCAmZGF0YWxl bik7DQojZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN CiAgICAgICAgICAgICAgICAgICAgY2FzZSBFTkNPREVfQkFTRTY0Og0KICAg ICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NERlY29kZShsaW5lLCBuZXdi dWZmZXIsICZkYXRhbGVuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICBk YXRhID0gbmV3YnVmZmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIEVOQ09ERV9VVUVOQ09E RToNCiAgICAgICAgICAgICAgICAgICAgICAgICB1dWRlY29kZShOVUxMLCBs aW5lLCBuZXdidWZmZXIsICZkYXRhbGVuLCBGQUxTRSk7DQogICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YSA9IG5ld2J1ZmZlcjsNCiAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2Fz ZSBFTkNPREVfTk9STUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGEgPSBsaW5lOw0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHdlIGhhdmUgbm8gY2x1ZSEgKi8NCiAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhID0gTlVMTDsNCiAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgaWYgKGRhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKChj b250ZW50ID09IENPTlRFTlRfVEVYVCkgfHwgKGNvbnRlbnQ9PUNPTlRFTlRf SFRNTCkpIHsgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb2RlID4g RU5DT0RFX01VTFRJTElORUQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiBUaGlz IGNhbiBiZSBtb3JlIHRoYW4gb25lIHJlc3VsdGluZyBsaW5lLCANCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKiBhcyB0aGUgZGVjb2RlZCB0aGUg c3RyaW5nIG1heSBsb29rIGxpa2U6DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiMhL2Jpbi9zaFxyXG5cclxuaGVscCgpIHtcclxuIGVjaG8gJ1Vz YWdlOiBkaWZmdHJlZSINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAq Lw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnA9ZGF0YTsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpuOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgc3RvcmU7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKChuID0gKGNoYXIgKilzdHJjaHIo cCwgJ1xuJykpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdG9yZSA9IG5bMV07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuWzFdPTA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicCA9IChzdHJ1Y3QgYm9keSAqKSBhZGRib2R5KGJwLCAmbHAsIHAsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bXVsdGlsaW5lbm9lbmQ/Qk9EWV9DT05USU5VRTowKXwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlmbGFncyk7 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWxpbmVu b2VuZCA9IEZBTFNFOyAvKiBmdWxsIGxpbmUgcHVzaGVkICovICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgblsxXT1zdG9yZTsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBuKzE7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChzdHJsZW4ocCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoqIFRoaXMgbGluZSBkb2Vzbid0IHJlYWxseSBlbmQgaGVyZSwgDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqIHdlIHdpbGwgZ2V0IGFu b3RoZXIgbGluZSBzb29uIHRoYXQgDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICoqIHNob3VsZCBnZXQgYXBwZW5kZWQhIA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicCA9IChzdHJ1Y3QgYm9keSAqKSBhZGRib2R5KGJw LCAmbHAsIHAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobXVsdGlsaW5lbm9lbmQ/Qk9EWV9DT05USU5VRTowKXwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvZHlmbGFncyk7DQogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoq IFdlIHdhbnQgdGhlIG5leHQgbGluZSB0byBnZXQgYXBwZW5kZWQgdG8gdGhp cyENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlsaW5lbm9lbmQgPSBU UlVFOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVs c2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwID0gKHN0cnVj dCBib2R5ICopIGFkZGJvZHkoYnAsICZscCwgZGF0YSwgDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRlbnQ9PUNP TlRFTlRfSFRNTD8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCT0RZX0hUTUxJWkVEOjApIHwgYm9keWZsYWdzICk7DQog ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29udGVudCA9PSBD T05URU5UX0JJTkFSWSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg KC0xICE9IGJpbmZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZGF0YWxlbiA8IDApDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGFsZW4gPSBzdHJsZW4oZGF0YSk7DQogICAgICAgICAgICAg ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLypmd3JpdGUoZGF0 YSwgZGF0YWxlbiwgMSwgYmluZmlsZSk7ICovDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgd3JpdGUoYmluZmlsZSwgZGF0YSwgZGF0YWxlbik7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgLypicCA9IChzdHJ1Y3QgYm9k eSAqKSBhZGRib2R5KGJwLCAiZmlsZSBjb250ZW50cyIpOyovDQogICAgICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAg ICANCiAgICAgICAgICAgICAgICAgICAgaWYgKEVOQ09ERV9RUCA9PSBkZWNv ZGUpDQogICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGRhdGEpOyAvKiB0 aGlzIHdhcyBhbGxvY2F0ZCBieSBtZGVjb2RlUVAoKSAqLw0KICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBz dHJjcHltYXgob2xkbGluZSwgbGluZSwgTUFYTElORSk7DQogICAgfQ0KDQog ICAgaWYgKCFpc2luaGVhZGVyKSB7DQogICAgICAgIGlmICghaGFzc3ViamVj dCkNCiAgICAgICAgICAgIHN0cmNweShzdWJqZWN0LCBOT1NVQkpFQ1QpOw0K DQogICAgICAgIGlmICghaGFzZGF0ZSkNCiAgICAgICAgICAgIHN0cmNweShk YXRlLCBOT0RBVEUpOw0KDQogICAgICAgIGlmIChpbnJlcGx5WzBdID09ICdc MCcpDQogICAgICAgICAgICBvbmV1bnJlKGlucmVwbHksIHN1YmplY3QpOw0K DQogICAgICAgIHdoaWxlIChybWxhc3RsaW5lcyhicCkpOw0KDQogICAgICAg IGFkZGhhc2gobnVtLCBkYXRlLCBuYW1lLCBlbWFpbCwgbXNnaWQsIHN1Ympl Y3QsIGlucmVwbHksIGZyb21kYXRlLCBicCk7DQogICAgICAgIGF1dGhvcmxp c3QgPSAoc3RydWN0IGhlYWRlciAqKQ0KICAgICAgICAgICAgICAgICAgICAg IGFkZGhlYWRlcihhdXRob3JsaXN0LCBudW0sIG5hbWUsIHN1YmplY3QsIGRh dGUsIDEpOw0KICAgICAgICBzdWJqZWN0bGlzdCA9IChzdHJ1Y3QgaGVhZGVy ICopDQogICAgICAgICAgICAgICAgICAgICAgYWRkaGVhZGVyKHN1YmplY3Rs aXN0LCBudW0sIG5hbWUsIHVucmUoc3ViamVjdCksIGRhdGUsIDApOw0KICAg ICAgICBkYXRlbGlzdCA9IChzdHJ1Y3QgaGVhZGVyICopIA0KICAgICAgICAg ICAgICAgICAgICAgIGFkZGhlYWRlcihkYXRlbGlzdCwgbnVtLCBuYW1lLCBz dWJqZWN0LCBmcm9tZGF0ZSwgMik7DQogICAgICAgIG51bSsrOw0KICAgIH0N CiAgICANCiAgICBpZiAoc2hvd3Byb2dyZXNzICYmICFyZWFkb25lKQ0KICAg ICAgICBwcmludGYoIlxiXGJcYlxiJTRkIGFydGljbGVzLlxuIiwgbnVtKTsN CiAgICANCiAgICBpZiAoIXJlYWRvbmUpDQogICAgICAgIGJpZ251bSA9IG51 bSAtIDE7DQoNCiAgICBmY2xvc2UoZnApOw0KDQogICAgY3Jvc3NpbmRleCgp Ow0KICAgIHRocmVhZGxpc3QgPSBOVUxMOw0KICAgIHByaW50ZWR0aHJlYWRs aXN0ID0gTlVMTDsNCiAgICBjcm9zc2luZGV4dGhyZWFkMShkYXRlbGlzdCk7 DQogIA0KICAgIC8qIGNhbiB3ZSBjbGVhbiB1cCBhIGJpdCBwbGVhc2UuLi4g Ki8NCiAgDQogICAgaWYgKGJvdW5kcCAhPSBOVUxMKSB7DQogICAgICAgIGlm IChib3VuZHAtPmxpbmUpIA0KICAgICAgICAgICAgZnJlZShib3VuZHAtPmxp bmUpOw0KICAgICAgICBmcmVlKGJvdW5kcCk7DQogICAgfQ0KDQojaWYgMA0K ICAgIGlmIChwcmludGVkdGhyZWFkbGlzdCAhPSBOVUxMKSB7DQogICAgICAg IHN0cnVjdCBwcmludGVkICpwcDsNCg0KICAgICAgICBkbyB7DQogICAgICAg ICAgICBwcCA9IHByaW50ZWR0aHJlYWRsaXN0Ow0KICAgICAgICAgICAgcHJp bnRlZHRocmVhZGxpc3QgPSBwcmludGVkdGhyZWFkbGlzdC0+bmV4dDsNCiAg ICAgICAgICAgIGZyZWUocHApOw0KICAgICAgICB9IHdoaWxlIChwcmludGVk dGhyZWFkbGlzdCk7DQogICAgfQ0KI2VuZGlmDQp9DQoNCi8qDQoqKiBBbGwg dGhpcyBkb2VzIGlzIGdldCBhbGwgdGhlIHJlbGV2YW50IGhlYWRlciBpbmZv cm1hdGlvbiBmcm9tIHRoZQ0KKiogY29tbWVudCBmaWVsZHMgaW4gZXhpc3Rp bmcgYXJjaGl2ZSBmaWxlcy4gRXZlcnl0aGluZyBpcyBsb2FkZWQgaW50bw0K Kiogc3RydWN0dXJlcyBpbiB0aGUgZXhhY3Qgc2FtZSB3YXkgYXMgaWYgYXJ0 aWNsZXMgd2VyZSBiZWluZyByZWFkIGZyb20NCioqIHN0ZGluIG9yIGEgbWFp bGJveC4NCiovDQoNCnZvaWQgbG9hZG9sZGhlYWRlcnMoY2hhciAqZGlyKQ0K ew0KICAgIEZJTEUgKmZwOw0KICAgIGNoYXIgbmFtZVtOQU1FU1RSTEVOXSwg ZW1haWxbTUFJTFNUUkxFTl0sIGRhdGVbREFURVNUUkxFTl0sDQogICAgICAg IG1zZ2lkW01TR0RTVFJMRU5dLCBzdWJqZWN0W1NVQkpTVFJMRU5dLCBpbnJl cGx5W1JFUFlTVFJMRU5dLA0KICAgICAgICBsaW5lW01BWExJTkVdLCBmcm9t ZGF0ZVtEQVRFU1RSTEVOXSwgZmlsZW5hbWVbTUFYRklMRUxFTl07DQogICAg aW50IG51bTsNCg0KICAgIHN0cnVjdCBib2R5ICpicD1OVUxMOw0KICAgIHN0 cnVjdCBib2R5ICpscD1OVUxMOw0KDQogICAgbnVtID0gMDsNCiAgICBzcHJp bnRmKGZpbGVuYW1lLCAiJXMlcyUuNGQuaHRtbCIsIGRpciwgDQogICAgICAg ICAgICAgIChkaXJbc3RybGVuKGRpcikgLSAxXSA9PSAnLycpID8gIiIgOiAi LyIsIG51bSk7DQoNCiAgICBicCA9IChzdHJ1Y3QgYm9keSAqKSBhZGRib2R5 KGJwLCAmbHAsICJcMCIsIDApOw0KDQogICAgYXV0aG9ybGlzdCA9IHN1Ympl Y3RsaXN0ID0gZGF0ZWxpc3QgPSBOVUxMOw0KDQogICAgaWYgKHNob3dwcm9n cmVzcykNCiAgICAgICAgcHJpbnRmKCJSZWFkaW5nIG9sZCBoZWFkZXJzLi4u ICAgICIpOw0KDQogICAgLyoNCiAgICAqKiBXQVJOSU5HOiBUaGUgZm9sbG93 aW5nIHdoaWxlIGxvb3AgaXMgZGVwZW5kZW50IG9uIHRoZSBvcmRlciBvZiB0 aGUNCiAgICAqKiBjb21tZW50cyBpbiB0aGUgSFRNTCBmaWxlcy4gVGhlIGNv bW1lbnRzIG5lZWQgdG8gYmUgaW4gdGhlIG9yZGVyDQogICAgKiogcGFyc2Vk IGJlbG93IG9yIHRoaXMgbG9vcCBuZWVkIHRvIGJlIGNoYW5nZS4gKEl0IHJl YWxseSBuZWVkcyB0byBiZQ0KICAgICoqIHRvdGFsbHkgcmV3cml0dGVuIHRv IGJlIG1vcmUgcm9idXN0IGFuZCBmb3JnaXZpbmcuLi4gU29vbi4NCiAgICAq KiANCiAgICAqKiBmcm9tZGF0ZSA9PSA8IS0tIHJlY2VpdmVkPSJXZWQgSnVu ICAzIDEwOjEyOjAwIDE5OTggQ0RUIiAtLT4NCiAgICAqKiBkYXRlICAgICA9 PSA8IS0tIHNlbnQ9IldlZCwgMyBKdW4gMTk5OCAxMDoxMjowNyAtMDUwMCAo Q0RUKSIgLS0+DQogICAgKiogbmFtZSAgICAgPT0gPCEtLSBuYW1lPSJLZW50 IExhbmRmaWVsZCIgLS0+DQogICAgKiogZW1haWwgICAgPT0gPCEtLSBlbWFp bD0ia2VudEBsYW5kZmllbGQuY29tIiAtLT4NCiAgICAqKiBzdWJqZWN0ICA9 PSA8IS0tIHN1YmplY3Q9IlRlc3QgbWVzc2FnZSBvZiB0aGUgdGVzdG1haWwg bWFpbCBhZGRyZXNzLiIgLS0+DQogICAgKiogbXNnaWQgICAgPT0gPCEtLSBp ZD0iMTk5ODA2MDMxNTEyLktBQTIyMzIzQGxhbmRmaWVsZC5jb20iIC0tPg0K ICAgICoqIGlucmVwbHkgID09IDwhLS0gaW5yZXBseXRvPSIiIC0tPg0KICAg ICovDQoNCiAgICB3aGlsZSAoKGZwID0gZm9wZW4oZmlsZW5hbWUsICJyIikp ICE9IE5VTEwpIHsNCg0KICAgICAgICAvKiBza2lwIGFsbCBsaW5lcyBiZWZv cmUgdGhlIGZpcnN0IDwhLS0gKi8NCiAgICAgICAgd2hpbGUgKCBmZ2V0cyhs aW5lLCBzaXplb2YobGluZSksIGZwKSwgc3RybmNtcChsaW5lLCAiPCEtLSAi LCA1KSApOw0KDQogICAgICAgIHN0cmNweW1heChmcm9tZGF0ZSwgKGNoYXIg KikgZ2V0dmFsdWUobGluZSksIERBVEVTVFJMRU4pOw0KDQogICAgICAgIGZn ZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApOw0KICAgICAgICBzdHJjcHlt YXgoZGF0ZSwgKGNoYXIgKikgZ2V0dmFsdWUobGluZSksIERBVEVTVFJMRU4p Ow0KDQogICAgICAgIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApOw0K ICAgICAgICBzdHJjcHltYXgobmFtZSwgKGNoYXIgKikgZ2V0dmFsdWUobGlu ZSksIE5BTUVTVFJMRU4pOw0KDQogICAgICAgIGZnZXRzKGxpbmUsIHNpemVv ZihsaW5lKSwgZnApOw0KICAgICAgICBzdHJjcHltYXgoZW1haWwsIChjaGFy ICopIGdldHZhbHVlKGxpbmUpLCBNQUlMU1RSTEVOKTsNCg0KICAgICAgICBm Z2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKTsNCiAgICAgICAgc3RyY3B5 bWF4KHN1YmplY3QsIChjaGFyICopIHVuY29udmNoYXJzKGdldHZhbHVlKGxp bmUpKSwgU1VCSlNUUkxFTik7DQoNCiAgICAgICAgZmdldHMobGluZSwgc2l6 ZW9mKGxpbmUpLCBmcCk7DQogICAgICAgIHN0cmNweW1heChtc2dpZCwgKGNo YXIgKikgZ2V0dmFsdWUobGluZSksIE1TR0RTVFJMRU4pOw0KDQogICAgICAg IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApOw0KICAgICAgICBzdHJj cHltYXgoaW5yZXBseSwgKGNoYXIgKikgdW5jb252Y2hhcnMoZ2V0dmFsdWUo bGluZSkpLCBNU0dEU1RSTEVOKTsNCg0KICAgICAgICBmY2xvc2UoZnApOw0K DQogICAgICAgIGFkZGhhc2gobnVtLCBkYXRlLCBuYW1lLCBlbWFpbCwgbXNn aWQsIHN1YmplY3QsIGlucmVwbHksIGZyb21kYXRlLCBicCk7ICAgICAgICBh dXRob3JsaXN0ID0gKHN0cnVjdCBoZWFkZXIgKikgYWRkaGVhZGVyKGF1dGhv cmxpc3QsIG51bSwgbmFtZSwgc3ViamVjdCwgZGF0ZSwgMSk7DQogICAgICAg IHN1YmplY3RsaXN0ID0gKHN0cnVjdCBoZWFkZXIgKikgYWRkaGVhZGVyKHN1 YmplY3RsaXN0LCBudW0sIG5hbWUsIHVucmUoc3ViamVjdCksIGRhdGUsIDAp Ow0KICAgICAgICBkYXRlbGlzdCA9IChzdHJ1Y3QgaGVhZGVyICopYWRkaGVh ZGVyKGRhdGVsaXN0LG51bSxuYW1lLHN1YmplY3QsZnJvbWRhdGUsMik7DQoN CiAgICAgICAgbnVtKys7DQogICAgICAgIGlmICghKG51bSAlIDEwKSAmJiBz aG93cHJvZ3Jlc3MpIHsNCiAgICAgICAgICAgIHByaW50ZigiXGJcYlxiXGIl NGQiLCBudW0pOw0KICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7DQogICAg ICAgIH0NCg0KICAgICAgICBzcHJpbnRmKGZpbGVuYW1lLCAiJXMlcyUuNGQu aHRtbCIsIGRpciwNCiAgICAgICAgICAgICAgICAoZGlyW3N0cmxlbihkaXIp IC0gMV0gPT0gJy8nKSA/ICIiIDogIi8iLCBudW0pOw0KICAgIH0NCg0KICAg IGlmIChzaG93cHJvZ3Jlc3MpDQogICAgICAgIHByaW50ZigiXGJcYlxiXGIl NGQgYXJ0aWNsZXMuXG4iLCBudW0pOw0KDQogICAgaWYgKCFudW0pDQogICAg ICAgIGJpZ251bSA9IDA7DQogICAgZWxzZQ0KICAgICAgICBiaWdudW0gPSBu dW07DQoNCiAgICAvKiBjYW4gd2UgY2xlYW4gdXAgYSBiaXQgcGxlYXNlLi4u ICovDQogICAgaWYgKGJwICE9IE5VTEwpIHsNCiAgICAgICAgaWYgKGJwLT5s aW5lKSBmcmVlKGJwLT5saW5lKTsNCiAgICAgICAgZnJlZShicCk7DQogICAg fQ0KfQ0KDQovKg0KKiogQWRkcyBhICJOZXh0OiIgbGluayBpbiB0aGUgcHJv cGVyIGFydGljbGUsIGFmdGVyIHRoZSBhcmNoaXZlIGhhcyBiZWVuDQoqKiBp bmNyZW1lbnRhbGx5IHVwZGF0ZWQuDQoqLw0KDQp2b2lkIGZpeG5leHRoZWFk ZXIoY2hhciAqZGlyLCBpbnQgbnVtKQ0Kew0KICAgIGNoYXIgZmlsZW5hbWVb TUFYRklMRUxFTl0sIGxpbmVbTUFYTElORV0sIG5hbWVbTkFNRVNUUkxFTl0s DQogICAgICAgIGVtYWlsW01BSUxTVFJMRU5dLCBzdWJqZWN0W1NVQkpTVFJM RU5dLCBpbnJlcGx5W1JFUFlTVFJMRU5dLA0KICAgICAgICBkYXRlW0RBVEVT VFJMRU5dLCBmcm9tZGF0ZVtEQVRFU1RSTEVOXSwgbXNnaWRbTVNHRFNUUkxF Tl07DQogICAgc3RydWN0IGJvZHkgKmJwLCAqY3AsICpkcCwgKnN0YXR1cywg KmxwPU5VTEw7DQogICAgaW50IHVsOw0KICAgIEZJTEUgKmZwOw0KDQogICAg dWwgPSAwOw0KICAgIHNwcmludGYoZmlsZW5hbWUsICIlcyVzJS40ZC5odG1s IiwgZGlyLA0KICAgICAgICAgIChkaXJbc3RybGVuKGRpcikgLSAxXSA9PSAn LycpID8gIiIgOiAiLyIsIG51bSk7DQoNCiAgICBicCA9IE5VTEw7DQogICAg aWYgKChmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSAhPSBOVUxMKSB7DQog ICAgICAgIHdoaWxlICgoZmdldHMobGluZSwgTUFYTElORSwgZnApKSAhPSBO VUxMKQ0KICAgICAgICAgICAgYnAgPSAoc3RydWN0IGJvZHkgKikgYWRkYm9k eShicCwgJmxwLCBsaW5lLCAwKTsNCiAgICB9DQogICAgZWxzZQ0KICAgICAg ICByZXR1cm47DQogICAgZmNsb3NlKGZwKTsNCg0KICAgIGNwID0gYnA7IC8q IHNhdmUgc3RhcnQgb2YgbGlzdCB0byBmcmVlIGxhdGVyICovDQoNCiAgICBp ZiAoKGZwID0gZm9wZW4oZmlsZW5hbWUsICJ3KyIpKSAhPSBOVUxMKSB7DQog ICAgICAgd2hpbGUgKGJwICE9IE5VTEwpIHsNCiAgICAgICAgICAgIGZwcmlu dGYoZnAsICIlcyIsIGJwLT5saW5lKTsNCiAgICAgICAgICAgIGlmICghc3Ry bmNtcChicC0+bGluZSwgIjwhLS0gbmV4dD0iLCAxMCkpIHsNCiAgICAgICAg ICAgICAgICBzdGF0dXMgPSAoc3RydWN0IGJvZHkgKikgaGFzaG51bWxvb2t1 cChudW0gKyAxLCBuYW1lLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAg ZW1haWwsIHN1YmplY3QsIGlucmVwbHksIGRhdGUsIGZyb21kYXRlLCBtc2dp ZCk7DQogICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBOVUxMKSB7DQog ICAgICAgICAgICAgICAgICAgIGlmICh1c2V0YWJsZSkgew0KICAgICAgICAg ICAgICAgICAgICAgICAgZHAgPSBicC0+bmV4dDsNCiAgICAgICAgICAgICAg ICAgICAgICAgIGlmICghc3RybmNtcChkcC0+bGluZSwgIjxVTD4iLCA0KSkg ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIl cyIsIGRwLT5saW5lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bCA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwg IjxMST48U1RST05HPk5leHQgbWVzc2FnZTo8L1NUUk9ORz4gIik7DQogICAg ICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICI8QSBIUkVGPVwiJS40ZC5o dG1sXCI+JXM6IFwiJXNcIjwvQT5cbiIsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnVtICsgMSwgbmFtZSwgY29udmNoYXJzKHN1Ympl Y3QpKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHVsKSB7DQogICAgICAg ICAgICAgICAgICAgICAgICBicCA9IGRwOw0KICAgICAgICAgICAgICAgICAg ICAgICAgdWwgPSAwOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnAgPSBi cC0+bmV4dDsNCiAgICAgICB9DQogICAgfQ0KDQogICAgZmNsb3NlKGZwKTsN Cg0KICAgIC8qIGNhbiB3ZSBjbGVhbiB1cCBhIGJpdCBwbGVhc2UuLi4gKi8N CiAgICBicCA9IGNwOw0KICAgIHdoaWxlIChicCAhPSBOVUxMKSB7DQogICAg ICAgIGNwID0gYnAtPm5leHQ7DQogICAgICAgIGlmIChicC0+bGluZSkgZnJl ZShicC0+bGluZSk7DQogICAgICAgIGZyZWUoYnApOw0KICAgICAgICBicCA9 IGNwOw0KICAgIH0NCn0NCg0KLyoNCioqIEFkZHMgYSAiUmVwbHk6IiBsaW5r IGluIHRoZSBwcm9wZXIgYXJ0aWNsZSwgYWZ0ZXIgdGhlIGFyY2hpdmUgaGFz IGJlZW4NCioqIGluY3JlbWVudGFsbHkgdXBkYXRlZC4NCiovDQoNCnZvaWQg Zml4cmVwbHloZWFkZXIoY2hhciAqZGlyLCBpbnQgbnVtKQ0Kew0KICAgIGlu dCByZXBseW51bSwgc3Viam1hdGNoOw0KICAgIGNoYXIgZmlsZW5hbWVbTUFY RklMRUxFTl0sIGxpbmVbTUFYTElORV0sIG5hbWVbTkFNRVNUUkxFTl0sDQog ICAgICAgIGVtYWlsW01BSUxTVFJMRU5dLCBzdWJqZWN0W1NVQkpTVFJMRU5d LCBpbnJlcGx5W1JFUFlTVFJMRU5dLA0KICAgICAgICBkYXRlW0RBVEVTVFJM RU5dLCBmcm9tZGF0ZVtEQVRFU1RSTEVOXSwgbXNnaWRbTVNHRFNUUkxFTl0s DQogICAgICAgIG5hbWUyW05BTUVTVFJMRU5dLCBzdWJqZWN0MltTVUJKU1RS TEVOXTsNCiAgICBzdHJ1Y3QgYm9keSAqYnAsICpjcCwgKnN0YXR1czsNCiAg ICBzdHJ1Y3QgYm9keSAqbHAgPSBOVUxMOw0KICAgIEZJTEUgKmZwOw0KDQog ICAgc3RhdHVzID0gKHN0cnVjdCBib2R5ICopIGhhc2hudW1sb29rdXAobnVt LCBuYW1lLCBlbWFpbCwgc3ViamVjdCwgDQogICAgICAgICAgICAgIGlucmVw bHksIGRhdGUsIGZyb21kYXRlLCBtc2dpZCk7DQoNCiAgICBpZiAoc3RhdHVz ID09IE5VTEwgfHwgaW5yZXBseVswXSA9PSAnXDAnKQ0KICAgICAgICByZXR1 cm47DQoNCiAgICBpZiAoaW5yZXBseVswXSAhPSAnXDAnKSB7DQogICAgICAg IHJlcGx5bnVtID0gaGFzaHJlcGx5bG9va3VwKGlucmVwbHksIG5hbWUyLCBz dWJqZWN0MiwgJnN1YmptYXRjaCk7DQogICAgICAgIGlmIChyZXBseW51bSA9 PSAtMSkNCiAgICAgICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICBzcHJp bnRmKGZpbGVuYW1lLCAiJXMlcyUuNGQuaHRtbCIsIGRpciwgDQogICAgICAg ICAgICAgICAgICAgICAgIChkaXJbc3RybGVuKGRpcikgLSAxXSA9PSAnLycp ID8gIiIgOiAiLyIsIHJlcGx5bnVtKTsNCg0KICAgIGJwID0gTlVMTDsNCiAg ICBpZiAoKGZwID0gZm9wZW4oZmlsZW5hbWUsICJyIikpICE9IE5VTEwpIHsN CiAgICAgICAgd2hpbGUgKChmZ2V0cyhsaW5lLCBNQVhMSU5FLCBmcCkpICE9 IE5VTEwpDQogICAgICAgICAgICBicCA9IChzdHJ1Y3QgYm9keSAqKSBhZGRi b2R5KGJwLCAmbHAsIGxpbmUsIDApOw0KICAgIH0NCiAgICBlbHNlDQogICAg ICAgIHJldHVybjsNCiAgICBmY2xvc2UoZnApOw0KDQogICAgY3AgPSBicDsg IC8qIHNhdmUgc3RhcnQgb2YgbGlzdCB0byBmcmVlIGxhdGVyICovDQoNCiAg ICBpZiAoKGZwID0gZm9wZW4oZmlsZW5hbWUsICJ3KyIpKSAhPSBOVUxMKSB7 DQogICAgICAgIHdoaWxlIChicCAhPSBOVUxMKSB7DQogICAgICAgICAgICBp ZiAoIXN0cm5jbXAoYnAtPmxpbmUsICI8IS0tIHJlcGx5IiwgMTApKSB7DQog ICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIjxMST48U1RST05HPlJlcGx5 OjwvU1RST05HPiAiKTsNCiAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAi PEEgSFJFRj1cIiUuNGQuaHRtbFwiPiIsIG51bSk7DQogICAgICAgICAgICAg ICAgZnByaW50ZihmcCwgIiVzOiBcIiVzXCI8L0E+XG4iLCBuYW1lLCBjb252 Y2hhcnMoc3ViamVjdCkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ZnByaW50ZihmcCwgIiVzIiwgYnAtPmxpbmUpOw0KICAgICAgICAgICAgYnAg PSBicC0+bmV4dDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBmY2xvc2UoZnAp Ow0KDQogICAgLyogY2FuIHdlIGNsZWFuIHVwIGEgYml0IHBsZWFzZS4uLiAq Lw0KICAgIGJwID0gY3A7DQogICAgd2hpbGUgKGJwICE9IE5VTEwpIHsNCiAg ICAgICAgY3AgPSBicC0+bmV4dDsNCiAgICAgICAgaWYgKGJwLT5saW5lKSBm cmVlKGJwLT5saW5lKTsNCiAgICAgICAgZnJlZShicCk7DQogICAgICAgIGJw ID0gY3A7DQogICAgfQ0KfQ0KDQovKg0KKiogQWRkcyBhICJOZXh0IGluIHRo cmVhZDoiIGxpbmsgaW4gdGhlIHByb3BlciBhcnRpY2xlLCBhZnRlciB0aGUg YXJjaGl2ZQ0KKiogaGFzIGJlZW4gaW5jcmVtZW50YWxseSB1cGRhdGVkLg0K Ki8NCg0Kdm9pZCBmaXh0aHJlYWRoZWFkZXIoY2hhciAqZGlyLCBpbnQgbnVt KQ0Kew0KICAgIGNoYXIgZmlsZW5hbWVbTUFYRklMRUxFTl0sbGluZVtNQVhM SU5FXSxuYW1lW05BTUVTVFJMRU5dOw0KICAgIGNoYXIgc3ViamVjdFtTVUJK U1RSTEVOXTsNCiAgICBGSUxFICpmcDsNCiAgICBzdHJ1Y3QgcmVwbHkgKnJw Ow0KICAgIHN0cnVjdCBib2R5ICpicCwgKmNwOw0KICAgIHN0cnVjdCBib2R5 ICpscD1OVUxMOw0KICAgIGludCB0aHJlYWRudW0gPSAwOw0KDQogICAgZm9y IChycCA9IHRocmVhZGxpc3Q7IHJwICE9IE5VTEw7IHJwID0gcnAtPm5leHQp IHsNCiAgICAgICAgaWYgKHJwLT5uZXh0ICE9IE5VTEwgJiYgcnAtPm5leHQt Pm1zZ251bSA9PSBudW0gJiYgcnAtPm1zZ251bSAhPSAtMSkgew0KICAgICAg ICAgICAgdGhyZWFkbnVtID0gcnAtPm1zZ251bTsNCiAgICAgICAgICAgIHN0 cmNweW1heChuYW1lLCBycC0+bmV4dC0+bmFtZSwgTkFNRVNUUkxFTik7DQog ICAgICAgICAgICBzdHJjcHltYXgoc3ViamVjdCwgcnAtPm5leHQtPnN1Ympl Y3QsIFNVQkpTVFJMRU4pOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAg IH0NCiAgICB9DQoNCiAgICBpZiAocnAgPT0gTlVMTCkNCiAgICAgICAgcmV0 dXJuOw0KDQogICAgc3ByaW50ZihmaWxlbmFtZSwgIiVzJXMlLjRkLmh0bWwi LCBkaXIsDQogICAgKGRpcltzdHJsZW4oZGlyKSAtIDFdID09ICcvJykgPyAi IiA6ICIvIiwgdGhyZWFkbnVtKTsNCg0KICAgIGJwID0gTlVMTDsNCiAgICBp ZiAoKGZwID0gZm9wZW4oZmlsZW5hbWUsICJyIikpICE9IE5VTEwpIHsNCiAg ICAgICAgd2hpbGUgKChmZ2V0cyhsaW5lLCBNQVhMSU5FLCBmcCkpICE9IE5V TEwpDQogICAgICAgICAgICBicCA9IChzdHJ1Y3QgYm9keSAqKSBhZGRib2R5 KGJwLCAmbHAsIGxpbmUsIDApOw0KICAgIH0NCiAgICBlbHNlDQogICAgICAg IHJldHVybjsNCg0KICAgIGZjbG9zZShmcCk7DQoNCiAgICBjcCA9IGJwOyAg Lyogc2F2ZSBzdGFydCBvZiBsaXN0IHRvIGZyZWUgbGF0ZXIgKi8NCg0KICAg IGlmICgoZnAgPSBmb3BlbihmaWxlbmFtZSwgIncrIikpICE9IE5VTEwpIHsN CiAgICAgICAgd2hpbGUgKGJwICE9IE5VTEwpIHsNCiAgICAgICAgICAgIGZw cmludGYoZnAsICIlcyIsIGJwLT5saW5lKTsNCiAgICAgICAgICAgIGlmICgh c3RybmNtcChicC0+bGluZSwgIjwhLS0gbmV4dHRociIsIDEyKSkgew0KICAg ICAgICAgICAgICAgIGZwcmludGYoZnAsICI8TEk+PFNUUk9ORz5OZXh0IGlu IHRocmVhZDo8L1NUUk9ORz4gIik7DQogICAgICAgICAgICAgICAgZnByaW50 ZihmcCwgIjxBIEhSRUY9XCIlLjRkLmh0bWxcIj4iLCBudW0pOw0KICAgICAg ICAgICAgICAgIGZwcmludGYoZnAsICIlczogXCIlc1wiPC9BPlxuIiwNCiAg ICAgICAgICAgICAgICBuYW1lLCBjb252Y2hhcnMoc3ViamVjdCkpOw0KICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgYnAgPSBicC0+bmV4dDsNCiAgICAg ICAgfQ0KICAgIH0NCiAgICBmY2xvc2UoZnApOw0KDQogICAgLyogY2FuIHdl IGNsZWFuIHVwIGEgYml0IHBsZWFzZS4uLiAqLw0KICAgIGJwID0gY3A7DQog ICAgd2hpbGUgKGJwICE9IE5VTEwpIHsNCiAgICAgICAgY3AgPSBicC0+bmV4 dDsNCiAgICAgICAgaWYgKGJwLT5saW5lKSBmcmVlKGJwLT5saW5lKTsNCiAg ICAgICAgZnJlZShicCk7DQogICAgICAgIGJwID0gY3A7DQogICAgfQ0KfQ0K DQo= ---559023410-851401618-901288998=:17635 Content-Type: TEXT/PLAIN; charset="US-ASCII"; name="print.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Disposition: attachment; filename="print.c" X-Sun-Content-Length: 53472 LyogDQoqKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgRW50ZXJwcmlzZSBJ bnRlZ3JhdGlvbiBUZWNobm9sb2dpZXMgQ29ycC4NCioqICAgICAgICAgVmVy aUZvbmUgSW5jLi9IZXdsZXR0LVBhY2thcmQuIEFsbCBSaWdodHMgUmVzZXJ2 ZWQuDQoqKiBLZXZpbiBIdWdoZXMsIGtldkBrZXZjb20uY29tIDMvMTEvOTQN CioqIEtlbnQgTGFuZGZpZWxkLCBrZW50QGxhbmRmaWVsZC5jb20gNC82Lzk3 DQoqKiANCioqIFRoaXMgcHJvZ3JhbSBhbmQgbGlicmFyeSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgDQoqKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgKExpYnJhcnkp IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgDQoqKiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiANCioqIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4g DQoqKiANCioqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCANCioqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mIA0KKiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIA0KKiogR05VIChMaWJyYXJ5 KSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuIA0K KiogDQoqKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgKExpYnJhcnkpIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCioqIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlIA0KKiogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl IFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBV U0EgDQoqLw0KDQojaW5jbHVkZSAiaHlwZXJtYWlsLmgiDQojaW5jbHVkZSA8 Y3R5cGUuaD4NCg0KI2RlZmluZSBGUk9NX0FVVEhPUiAgMA0KI2RlZmluZSBG Uk9NX0RBVEUgICAgMQ0KI2RlZmluZSBGUk9NX1RIUkVBRCAgMg0KI2RlZmlu ZSBGUk9NX1NVQkpFQ1QgMw0KDQojZGVmaW5lIFBBR0VfVE9QICAgICAxDQoj ZGVmaW5lIFBBR0VfQk9UVE9NICAyDQoNCnR5cGVkZWYgZW51bSB7REFURV9J TkRFWCwgVEhSRUFEX0lOREVYLCBTVUJKRUNUX0lOREVYLCBBVVRIT1JfSU5E RVgsDQogICAgICAgICAgICAgIE5PX0lOREVYfSBtaW5kZXhfdDsNCg0KLyoN CioqIFByaW50cyBhIHByb2dyYW0gZXJyb3Igc3RyaW5nIGFuZCBzdG9wcy4g SWYgZXJyb3JzdHIgaXMgTlVMTCwNCioqIHRoaXMgcHJpbnRzIHdoYXRldmVy IGhhcHBlbnMgdG8gYmUgaW4gZXJyc3RyW10gYXQgdGhlIHRpbWUuDQoqLw0K DQp2b2lkIHByb2dlcnIoY2hhciAqZXJyb3JzdHIpDQp7DQogICAgaWYgKGVy cm9yc3RyICE9IE5VTEwpDQogICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6 ICVzXG4iLCBQUk9HTkFNRSwgZXJyb3JzdHIpOw0KICAgIGVsc2UNCiAgICAg ICAgZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIFBST0dOQU1FLCBlcnJt c2cpOw0KICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHR5cGUgXCIlcyAtelwi IGZvciBvcHRpb25zLlxuIiwgUFJPR05BTUUsIFBST0dOQU1FKTsNCiAgICBl eGl0KC0xKTsNCn0NCg0KLyoNCioqIE91dHB1dCBhIG1lbnUgbGluZSB3aXRo IGh5cGVybGlua3MgZm9yIHRhYmxlIGRpc3BsYXkNCioqDQoqKiBBbGwgcGFy YW1ldGVycyBhcmUgaW5wdXRzIG9ubHkuICBQYXJhbWV0ZXJzOg0KKiogICBm cCAgICAgICA6IEhUTUwgb3V0cHV0IGZpbGUgcG9pbnRlcg0KKiogICBpZHgg ICAgICA6IFR5cGUgb2YgcGFnZSB0aGlzIG1lbnUgaXMgZm9yLg0KKiogICBh Ym91dCAgICA6ICJOT05FIiBvciBlbHNlIHRoZSBVUkwgb2YgaW5mbyBhYm91 dCB0aGlzIGFyY2hpdmUuDQoqKiAgIGFyY2hpdmVzIDogIk5PTkUiIG9yIGVs c2UgdGhlIFVSTCBvZiBtb3JlIGh5cGVybWFpbCBhcmNoaXZlcy4NCioqICAg Y3VycmVudGlkOiAiIiBvciBlbHNlIHRoZSBpZCBvZiB0aGUgImN1cnJlbnQi IG1lc3NhZ2UuDQoqKiAgIGN1cnN1YiAgIDogIiIgb3IgZWxzZSB0aGUgc3Vi amVjdCBvZiB0aGUgImN1cnJlbnQiIG1lc3NhZ2UuDQoqKiAgIHBvcyAgICAg IDogQ2FsbGVkIGF0IHRoZSB0b3Agb3IgYm90dG9tIG9mIHRoZSBwYWdlLg0K Ki8NCg0Kdm9pZCBmcHJpbnRfbWVudShGSUxFICpmcCwgbWluZGV4X3QgaWR4 LCBjaGFyICphYm91dCwgY2hhciAqYXJjaGl2ZXMsDQogICAgICAgICAgICAg ICAgIGNoYXIgKmN1cnJlbnRpZCwgY2hhciAqY3Vyc3ViLCBpbnQgcG9zKQ0K ew0KICAgZnByaW50ZihmcCwgIjxESVYgQUxJR049Q0VOVEVSPlxuPFRBQkxF IEJPUkRFUj0yIFdJRFRIPVwiMTAwJSVcIj5cbjxUUj5cbiIpOw0KDQogICBp ZiAobWFpbGNvbW1hbmQpIHsNCiAgICAgICBpZiAoKmhtYWlsKSB7DQogICAg ICAgICAgIGZwcmludGYoZnAsICI8VEg+PEEgSFJFRj1cIiVzXCI+TmV3IE1l c3NhZ2U8L0E+PC9USD5cbiIsDQogICAgICAgICAgICAgICAgICBtYWtlbWFp bGNvbW1hbmQoIm1haWx0bzokVE8iLCBobWFpbCwgIiIsICIiKSk7DQoNCiAg ICAgICAgICAgaWYoKGN1cnJlbnRpZCAhPSBOVUxMICYmIGN1cnJlbnRpZFsw XSAhPSAnXDAnKSB8fA0KICAgICAgICAgICAgICAoY3Vyc3ViICAgICE9IE5V TEwgJiYgY3Vyc3ViWzBdICAgICE9ICdcMCcpKQ0KICAgICAgICAgICAgICBm cHJpbnRmKGZwLCAiPFRIPjxBIEhSRUY9XCIlc1wiPlJlcGx5PC9BPjwvVEg+ XG4iLA0KICAgICAgICAgICAgICAgICAgIG1ha2VtYWlsY29tbWFuZChtYWls Y29tbWFuZCxobWFpbCxjdXJyZW50aWQsY3Vyc3ViKSk7DQogICAgICAgfQ0K ICAgfQ0KDQogICBpZiAoKmFib3V0KQ0KICAgICAgZnByaW50ZihmcCwiPFRI PjxBIEhSRUY9XCIlc1wiPkFib3V0IHRoaXMgbGlzdDwvQT48L1RIPlxuIixh Ym91dCk7DQoNCiAgIGlmIChpZHggIT0gTk9fSU5ERVggJiYgIXJldmVyc2Up IHsNCiAgICAgIGlmIChwb3MgPT0gUEFHRV9UT1ApDQogICAgICAgICAgZnBy aW50ZihmcCwiPFRIPjxBIEhSRUY9XCIjZW5kXCI+RW5kIG9mIE1lc3NhZ2Vz PC9BPjwvVEg+XG4iKTsNCiAgICAgIGVsc2UNCiAgICAgICAgICBmcHJpbnRm KGZwLCI8VEg+PEEgTkFNRT1cImVuZFwiIEhSRUY9XCIjXCI+U3RhcnQgb2Yg TWVzc2FnZXM8L0E+PC9USD5cbiIpOw0KICAgfQ0KICAgICAgICAgICANCiAg IGlmKGlkeCAhPSBEQVRFX0lOREVYKQ0KICAgICAgZnByaW50ZihmcCwiPFRI PjxBIEhSRUY9XCIlc1wiPkRhdGUgdmlldzwvQT48L1RIPlxuIixkYXRlbmFt ZSk7DQoNCiAgIGlmKGlkeCAhPSBUSFJFQURfSU5ERVgpDQogICAgICBmcHJp bnRmKGZwLCI8VEg+PEEgSFJFRj1cIiVzXCI+VGhyZWFkIHZpZXc8L0E+PC9U SD5cbiIsdGhyZG5hbWUpOw0KDQogICBpZihpZHggIT0gU1VCSkVDVF9JTkRF WCkNCiAgICAgIGZwcmludGYoZnAsIjxUSD48QSBIUkVGPVwiJXNcIj5TdWJq ZWN0IHZpZXc8L0E+PC9USD5cbiIsc3Viam5hbWUpOw0KDQogICBpZihpZHgg IT0gQVVUSE9SX0lOREVYKQ0KICAgICAgZnByaW50ZihmcCwiPFRIPjxBIEhS RUY9XCIlc1wiPkF1dGhvciB2aWV3PC9BPjwvVEg+XG4iLGF1dGhuYW1lKTsN Cg0KICAgaWYgKCphcmNoaXZlcykNCiAgICAgIGZwcmludGYoZnAsIjxUSD48 QSBIUkVGPVwiJXNcIj5PdGhlciBncm91cHM8L0E+PC9USD5cbiIsIGFyY2hp dmVzKTsNCg0KICAgZnByaW50ZihmcCwgIjwvVFI+XG48L1RBQkxFPlxuPC9E SVY+XG4iKTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8NCg0Kdm9pZCBmcHJpbnRfc3VtbWFyeShGSUxFICpmcCwgaW50IGZp cnN0X2QsIGludCBsYXN0X2QsIGludCBudW0pDQp7DQogICBmcHJpbnRmKGZw LCAiPERJViBBTElHTj1DRU5URVI+XG4iKTsNCiAgIGZwcmludGYoZnAsICI8 VEFCTEU+XG48VFI+XG4gIDxUSCBDT0xTUEFOPTQ+JWQgTWVzc2FnZXM8L1RI PlxuPC9UUj5cbiIsIG51bSk7DQogICBmcHJpbnRmKGZwLCAiPFRSPlxuIik7 DQogICBmcHJpbnRmKGZwLCAiICA8VEg+U3RhcnRpbmc6PC9USD48VEQ+PEVN PiVzPC9FTT48L1REPlxuIixnZXRkYXRlc3RyKGZpcnN0X2QpKTsNCiAgIGZw cmludGYoZnAsICIgIDxUSD5FbmRpbmc6PC9USD48VEQ+PEVNPiVzPC9FTT48 L1REPlxuIixnZXRkYXRlc3RyKGxhc3RfZCkpOw0KICAgZnByaW50ZihmcCwg IjwvVFI+XG48L1RBQkxFPlxuPC9ESVY+XG4iKTsNCn0NCg0KLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0Kdm9pZCBwcmludF9pbmRl eF9oZWFkZXJfbGlua3MoRklMRSAqZnAsY2hhciAqYXJjaGl2ZXMsY2hhciAq YWJvdXQsaW50IGNhbGxlZCkNCnsNCiAgICAvKiANCiAgICAqKiBQcmludCBv dXQgdGhlIGxpbmtzIGZvcg0KICAgICoqIA0KICAgICoqICAgICAgQWJvdXQg dGhpcyBhcmNoaXZlIA0KICAgICoqICAgICAgTW9zdCByZWNlbnQgbWVzc2Fn ZXMgDQogICAgKiogICAgICBNZXNzYWdlcyBzb3J0ZWQgYnk6IFsgZGF0ZSBd WyBzdWJqZWN0IF1bIGF1dGhvciBdIA0KICAgICoqICAgICAgT3RoZXIgbWFp bCBhcmNoaXZlcyANCiAgICAqKg0KICAgICoqIGFzIGFwcHJvcHJpYXRlLg0K ICAgICovDQogICAgDQogICAgZnByaW50ZihmcCwgIjxVTD5cbiIpOw0KDQog ICAgaWYgKCphYm91dCkgew0KICAgICAgICBmcHJpbnRmKGZwLCAiPExJPjxT VFJPTkc+PEEgSFJFRj1cIiVzXCI+QWJvdXQgdGhpcyAiLCBhYm91dCk7DQog ICAgICAgIGZwcmludGYoZnAsICJhcmNoaXZlPC9BPjwvU1RST05HPlxuIik7 DQogICAgfQ0KDQogICAgaWYgKCFyZXZlcnNlICYmIChjYWxsZWQgIT0gRlJP TV9BVVRIT1IgJiYgY2FsbGVkICE9IEZST01fU1VCSkVDVCkpDQogICAgICAg IGZwcmludGYoZnAsDQogICAgICAgICI8TEk+PFNUUk9ORz48QSBIUkVGPVwi I2VuZFwiPk1vc3QgcmVjZW50IG1lc3NhZ2VzPC9BPjwvU1RST05HPlxuIik7 DQoNCiAgICBmcHJpbnRmKGZwLCAiPExJPjxTVFJPTkc+TWVzc2FnZXMgc29y dGVkIGJ5OjwvU1RST05HPiBcbiIpOw0KDQogICAgaWYgKGNhbGxlZCAhPSBG Uk9NX0FVVEhPUikNCiAgICAgICAgZnByaW50ZihmcCwgIjxBIEhSRUY9XCIl c1wiPlsgYXV0aG9yIF08L0E+XG4iLCBhdXRobmFtZSk7DQoNCiAgICBpZiAo Y2FsbGVkICE9IEZST01fREFURSkNCiAgICAgICAgIGZwcmludGYoZnAsICI8 QSBIUkVGPVwiJXNcIj5bIGRhdGUgXTwvQT5cbiIsIGRhdGVuYW1lKTsNCg0K ICAgIGlmIChjYWxsZWQgIT0gRlJPTV9USFJFQUQpDQogICAgICAgICBmcHJp bnRmKGZwLCAiPEEgSFJFRj1cIiVzXCI+WyB0aHJlYWQgXTwvQT5cbiIsIHRo cmRuYW1lKTsNCg0KICAgIGlmIChjYWxsZWQgIT0gRlJPTV9TVUJKRUNUKQ0K ICAgICAgICAgZnByaW50ZihmcCwgIjxBIEhSRUY9XCIlc1wiPlsgc3ViamVj dCBdPC9BPlxuIiwgc3Viam5hbWUpOw0KDQogICAgaWYgKCphcmNoaXZlcykg ew0KICAgICAgICBmcHJpbnRmKGZwLCAiPExJPjxTVFJPTkc+PEEgSFJFRj1c IiVzXCI+T3RoZXIgbWFpbCAiLCBhcmNoaXZlcyk7DQogICAgICAgIGZwcmlu dGYoZnAsICJhcmNoaXZlczwvQT48L1NUUk9ORz5cbiIpOw0KICAgIH0NCiAg ICBmcHJpbnRmKGZwLCAiPC9VTD5cbjxQPlxuIik7DQp9DQoNCnZvaWQgcHJp bnRfaW5kZXhfZm9vdGVyX2xpbmtzKEZJTEUgKmZwLCBjaGFyICphcmNoaXZl cywgaW50IGNhbGxlZCkNCnsNCiAgICAvKiANCiAgICAqKiBQcmludCBvdXQg dGhlIGxpbmtzIGZvcg0KICAgICoqIA0KICAgICoqICAgICAgTWVzc2FnZXMg c29ydGVkIGJ5OiBbIGRhdGUgXVsgc3ViamVjdCBdWyBhdXRob3IgXSANCiAg ICAqKiAgICAgIE90aGVyIG1haWwgYXJjaGl2ZXMgDQogICAgKioNCiAgICAq KiBhcyBhcHByb3ByaWF0ZS4NCiAgICAqLw0KDQogICAgZnByaW50ZihmcCwg IjxVTD5cbiIpOw0KICAgIGZwcmludGYoZnAsICI8TEk+PFNUUk9ORz5NZXNz YWdlcyBzb3J0ZWQgYnk6PC9TVFJPTkc+IFxuIik7DQoNCiAgICBpZiAoY2Fs bGVkICE9IEZST01fQVVUSE9SKQ0KICAgICAgICBmcHJpbnRmKGZwLCAiPEEg SFJFRj1cIiVzXCI+WyBhdXRob3IgXTwvQT5cbiIsIGF1dGhuYW1lKTsNCg0K ICAgIGlmIChjYWxsZWQgIT0gRlJPTV9EQVRFKQ0KICAgICAgICBmcHJpbnRm KGZwLCAiPEEgSFJFRj1cIiVzXCI+WyBkYXRlIF08L0E+XG4iLCBkYXRlbmFt ZSk7DQoNCiAgICBpZiAoY2FsbGVkICE9IEZST01fVEhSRUFEKQ0KICAgICAg ICBmcHJpbnRmKGZwLCAiPEEgSFJFRj1cIiVzXCI+WyB0aHJlYWQgXTwvQT5c biIsIHRocmRuYW1lKTsNCg0KICAgIGlmIChjYWxsZWQgIT0gRlJPTV9TVUJK RUNUKQ0KICAgICAgICBmcHJpbnRmKGZwLCAiPEEgSFJFRj1cIiVzXCI+WyBz dWJqZWN0IF08L0E+XG4iLCBzdWJqbmFtZSk7DQoNCiAgICBpZiAoKmFyY2hp dmVzKSB7DQogICAgICAgIGZwcmludGYoZnAsICI8TEk+PFNUUk9ORz48QSBI UkVGPVwiJXNcIj5PdGhlciBtYWlsICIsIGFyY2hpdmVzKTsNCiAgICAgICAg ZnByaW50ZihmcCwgImFyY2hpdmVzPC9BPjwvU1RST05HPlxuIik7DQogICAg fQ0KICAgIGZwcmludGYoZnAsICI8L1VMPlxuXG4iKTsNCn0NCg0KLyoNCioq IFByaW50cyBhIGNvbW1lbnQgaW4gdGhlIGZpbGUuDQoqLw0KDQp2b2lkIHBy aW50Y29tbWVudChGSUxFICpmcCwgY2hhciAqbGFiZWwsIGNoYXIgKnZhbHVl KQ0Kew0KICAgIGZwcmludGYoZnAsICI8IS0tICVzPVwiJXNcIiAtLT5cbiIs IGxhYmVsLCB2YWx1ZSk7DQp9DQoNCi8qDQoqKiBQcmludHMgYSBsaW5lIG9m IEhUTUwuIFVzZWQgdG8gZmlsdGVyIG9mZiB1bndhbnRlZCB0YWdzIGZyb20g dGhlIG91dHB1dC4NCiovDQoNCnZvaWQgcHJpbnRodG1sKEZJTEUgKmZwLCBj aGFyICpsaW5lKQ0Kew0KICAvKiB0aGUgYmFubmVkIHRhZ3MgaWdub3JlIGFs bCBvZiB0aGVtIHRoYXQgYmVnaW4gZXhhY3RseSBsaWtlICI8dGFnIiBvcg0K ICAgICAiPC90YWciIChjYXNlIGluc2Vuc2l0aXZlKS4gQW55IG90aGVyIGxl dHRlcnMgd2l0aGluIHRoZSB0YWdzIGRlc3Ryb3kNCiAgICAgdGhpcyBmaWx0 ZXIgY2FwYWJpbGl0eS4gKi8NCg0KICBjaGFyICpiYW5uZWRfdGFnc1tdPXsi aHRtbD4ifTsgLyogZW5kaW5nID4tbGV0dGVyIG11c3QgYmUgaW5jbHVkZWQg Ki8NCiAgaW50IGk7DQogIGludCBpbmRleDsNCiAgDQogIHdoaWxlKCpsaW5l KSB7DQogICAgaWYoJzwnICE9ICpsaW5lKQ0KICAgICAgZnB1dGMoKmxpbmUr KywgZnApOw0KICAgIGVsc2Ugew0KICAgICAgaWYoJy8nID09IGxpbmVbMV0p DQogICAgICAgIGluZGV4PTI7DQogICAgICBlbHNlDQogICAgICAgIGluZGV4 PTE7DQogICAgICBmb3IoaT0wOyBpPHNpemVvZihiYW5uZWRfdGFncykvc2l6 ZW9mKGJhbm5lZF90YWdzWzBdKTtpKyspIHsNCiAgICAgICAgaWYoIXN0cm5j YXNlY21wKCZsaW5lW2luZGV4XSwNCiAgICAgICAgICAgICAgICAgICAgICAg IGJhbm5lZF90YWdzW2ldLA0KICAgICAgICAgICAgICAgICAgICAgICAgc3Ry bGVuKGJhbm5lZF90YWdzW2ldKSkpIHsNCiAgICAgICAgICBsaW5lKz1zdHJs ZW4oYmFubmVkX3RhZ3NbaV0pK2luZGV4Ow0KICAgICAgICAgIGJyZWFrOw0K ICAgICAgICB9DQogICAgICB9DQogICAgICBpZihzaXplb2YoYmFubmVkX3Rh Z3MpL3NpemVvZihiYW5uZWRfdGFnc1swXSkgPT0gaSkgew0KICAgICAgICBm cHV0YygqbGluZSsrLCBmcCk7DQogICAgICAgIGlmKDIgPT0gaW5kZXgpDQog ICAgICAgICAgZnB1dGMoKmxpbmUrKywgZnApOw0KICAgICAgfQ0KICAgIH0N CiAgfQ0KDQp9DQoNCi8qDQoqKiBQcmV0dHktcHJpbnRzIHRoZSBkYXRlcyBp biB0aGUgaW5kZXggZmlsZXMuDQoqLw0KDQp2b2lkIHByaW50ZGF0ZXMoRklM RSAqZnAsIHN0cnVjdCBoZWFkZXIgKmhwKQ0Kew0KICAgIGlmIChocCAhPSBO VUxMKSB7DQogICAgICAgIHByaW50ZGF0ZXMoZnAsIGhwLT5sZWZ0KTsNCiAg ICAgICAgZnByaW50ZihmcCwgIjxMST48QSBIUkVGPVwiJS40ZC5odG1sXCI+ PFNUUk9ORz4lczwvU1RST05HPjwvQT4gIiwNCiAgICAgICAgICAgICAgICAg ICAgaHAtPm1zZ251bSwgY29udmNoYXJzKGhwLT5zdWJqZWN0KSk7DQogICAg ICAgIGZwcmludGYoZnAsICI8QSBOQU1FPVwiJWRcIj48RU0+JXM8L0VNPjwv QT5cbiIsIGhwLT5tc2dudW0sIGhwLT5uYW1lKTsNCiAgICAgICAgcHJpbnRk YXRlcyhmcCwgaHAtPnJpZ2h0KTsNCiAgICB9DQp9DQoNCmludCBzaG93aGVh ZGVyKGNoYXIgKmhlYWRlcikNCnsNCiAgIHJldHVybiAoaW5saXN0KHNob3df aGVhZGVycywgaGVhZGVyKSk7DQp9DQoNCg0KLyoNCioqIFRoZSBoZXVyaXN0 aWNzIGZvciBkaXNwbGF5aW5nIGFuIG90aGVyd2lzZSBvcmRpbmFyeSBsaW5l IChhIG5vbi1xdW90ZSwNCioqIG5vbi1zaWcsIG5vbi1pbmh0bWwsIG5vbi1i bGFuayBsaW5lKSBpZiAnc2hvd2h0bWwnIGlzIHRydWUgKHdoaWNoIHJlYWxs eQ0KKiogbWVhbnMgd2UncmUgKm5vdCogZG9pbmcgPFBSRT4gdG8gZm9ybWF0 IHRoZSB0ZXh0KSBoYXZlIGNoYW5nZWQgc28gdGhhdA0KKiogaW5kZW50ZWQg dGV4dCBzaG93cyB1cCBjb3JyZWN0bHkuICBGaXJzdCwgbGVhZGluZyBzcGFj ZXMgYmVjb21lIEhUTUwNCioqIG5vbi1icmVha2luZyBzcGFjZXMgKCZuYnNw OykuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB0aG9zZSBsaW5lcw0K KiogbXVzdCBoYXZlIGJlZW4gcHJlY2VkZWQgYnkgYSA8QlI+IG9yIDxQPi4g IFdlIGFjY29tcGxpc2ggdGhpcyBieSBjaGVja2luZw0KKiogYWhlYWQgd2hl biB3ZSBwcmludCBlYWNoIGxpbmUuLi4gaWYgd2UgZGV0ZXJtaW5lIHRoYXQg dGhlIG5leHQgbGluZQ0KKiogc2hvdWxkIGJlIGJyb2tlbiBiZWZvcmUsIHdl IGRvIHNvLg0KKi8NCg0Kdm9pZCBwcmludGJvZHkoRklMRSAqZnAsIHN0cnVj dCBib2R5ICpicCwgY2hhciAqaWQsIGNoYXIgKnN1YmplY3QpDQp7DQogICAg aW50IGluc2lnLCBpbmJsYW5rOw0KICAgIGludCBpbmh0bWw7DQogICAgY2hh ciBpbmhlYWRlcj1GQUxTRTsgLyogd2UgYWx3YXlzIHN0YXJ0IGluIGEgbWFp bCBoZWFkZXIgKi8NCiAgICBpbnQgcHJlPUZBTFNFOw0KDQogICAgaWYgKHNo b3docikNCiAgICAgICAgZnByaW50ZihmcCwgIjxIUj5cbiIpOw0KDQogICAg cHJpbnRjb21tZW50KGZwLCAiYm9keSIsICJzdGFydCIpOw0KDQogICAgaWYg KCFzaG93aHRtbCkgew0KICAgICAgZnByaW50ZihmcCwgIjxQUkU+XG4iKTsN CiAgICAgIHByZT1UUlVFOw0KICAgIH0NCiNpZiAwDQogICAgZWxzZQ0KICAg ICAgcHJpbnRmKCJTSE9XSFRNTCBpcyBPTlxuIik7DQojZW5kaWYNCiAgICBp bmJsYW5rID0gMTsNCiAgICBpbnNpZyA9IDA7DQoNCiAgICBpbmh0bWwgPSAw Ow0KDQogICAgd2hpbGUgKGJwICE9IE5VTEwpIHsNCiNpZiAxDQogICAgICAg ICAgaWYgKGJwLT5odG1sKSB7DQogICAgICAgICAgICAvKiBhbHJlYWR5IGlu IEhUTUwsIGRvbid0IHRvdWNoICovDQogICAgICAgICAgICBwcmludGh0bWwo ZnAsIGJwLT5saW5lKTsNCiNlbHNlDQogICAgICAgICAgaWYgKGJwLT5odG1s ICYmIChzdHJuY2FzZWNtcChicC0+bGluZSwgIjxIVE1MPiIsIDYpICYmIA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNhc2VjbXAoYnAtPmxp bmUsICI8L0hUTUw+IiwgNykpKSB7DQogICAgICAgICAgICBmcHJpbnRmKGZw LCAiJXMiLCBicC0+bGluZSk7DQojZW5kaWYNCiAgICAgICAgICAgIGJwID0g YnAtPm5leHQ7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICB9 DQoNCiAgICAgICAgICBpZihicC0+aGVhZGVyKSB7DQogICAgICAgICAgICBj aGFyIGhlYWRbMTI4XTsNCiAgICAgICAgICAgIGlmKCFpbmhlYWRlcikgew0K ICAgICAgICAgICAgICBpZighcHJlICYmIHNob3dodG1sICYmIHNob3doZWFk ZXJzKSB7DQogICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIjxQUkU+XG4i KTsNCiAgICAgICAgICAgICAgICBwcmU9VFJVRTsNCiAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaW5oZWFkZXI9VFJVRTsN CiAgICAgICAgICAgIGlmKHNzY2FuZihicC0+bGluZSwgIiUxMjdbXjpdIiwg aGVhZCkgJiYNCiAgICAgICAgICAgICAgIHNob3dfaGVhZGVycyAmJiAhc2hv d2hlYWRlcihoZWFkKSkgew0KICAgICAgICAgICAgICAvKiB0aGUgc2hvdyBo ZWFkZXIga2V5d29yZCBoYXMgYmVlbiB1c2VkLCB0aGVuIHdlIHNraXAgYWxs IHRob3NlDQogICAgICAgICAgICAgICAgIHRoYXQgYXJlbid0IG1lbnRpb25l ZCEgKi8NCiAgICAgICAgICAgICAgaWYoaXNhbG51bSgqaGVhZCkgfHwgIXNo b3doZWFkZXJzKSB7DQogICAgICAgICAgICAgICAgLyogdGhpcyBjaGVjayBp cyBvbmx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXN0IGxpbmUgYW1vbmcg DQogICAgICAgICAgICAgICAgICAgdGhlIGhlYWRlcnMgKHRoZSAiXG4iIG9u ZSkgd29uJ3QgYmUgZmlsdGVyZWQgb2ZmICovDQogICAgICAgICAgICAgICAg YnAgPSBicC0+bmV4dDsNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAg ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAg ICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIGlmKGluaGVhZGVyKSB7DQog ICAgICAgICAgICAgIGlmKHNob3dodG1sICYmIHNob3doZWFkZXJzICYmIHBy ZSkgew0KICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICI8L1BSRT5cbiIp Ow0KICAgICAgICAgICAgICAgIHByZT1GQUxTRTsNCiAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiPFA+XG4iKTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIGluaGVhZGVyPUZBTFNFOw0KICAgICAg ICAgIH0NCg0KICAgICAgICAgIGlmIChicC0+YXR0YWNoZWQgJiYgYnAtPmhl YWRlcikgew0KICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAqIFRoaXMg aXMgYW4gYXR0YWNoZWQgbWFpbCdzIGhlYWRlcnMuIE9ubHkgb3V0cHV0IHRo ZSBmZXcNCiAgICAgICAgICAgICAqIG9uZXMgd2UgbWlnaHQgYmUgaW50ZXJl c3RlZCBpbi4gSG1tbS4uLiBBcmUgdGhlcmUgb3RoZXJzID8NCiAgICAgICAg ICAgICAqLw0KI2lmIDANCiAgICAgICAgICAgIGlmICghc3RybmNtcChicC0+ bGluZSwgIkZyb206IiwgNSkgfHwNCiAgICAgICAgICAgICAgICFzdHJuY21w KGJwLT5saW5lLCAiVG86IiwgMykgfHwNCiAgICAgICAgICAgICAgICFzdHJu Y21wKGJwLT5saW5lLCAiRGF0ZToiLCA1KSB8fA0KICAgICAgICAgICAgICAg IXN0cm5jbXAoYnAtPmxpbmUsICJTdWJqZWN0OiIsIDgpICkgew0KI2VuZGlm DQogICAgICAgICAgICAgIGZwcmludGYoZnAsICI8U1RST05HPiVzPC9TVFJP Tkc+PEJSPlxuIiwgYnAtPmxpbmUpOw0KI2lmIDANCiAgICAgICAgICAgIH0N CiNlbmRpZg0KICAgICAgICAgICAgYnAgPSBicC0+bmV4dDsNCiAgICAgICAg ICAgIGNvbnRpbnVlOyAgICAgICAgICAgIA0KICAgICAgICAgIH0NCg0KICAg ICAgICBpZiAoKGJwLT5saW5lKVswXSA9PSAnXG4nKSB7DQojaWYgMA0KICAg ICAgICAgICAgaWYgKGJwLT5oZWFkZXIgJiYgc2hvd2h0bWwgJiYgc2hvd2hl YWRlcnMpDQogICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIjwvUFJFPlxu Iik7DQojZW5kaWYNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChicC0+ aGVhZGVyICYmICFzaG93aGVhZGVycykgew0KICAgICAgICAgICAgYnAgPSBi cC0+bmV4dDsNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQoN CiAgICAgICAgaWYgKChicC0+bGluZSlbMF0gPT0gJ1xuJyAmJiBpbmJsYW5r KSB7DQogICAgICAgICAgICBicCA9IGJwLT5uZXh0Ow0KICAgICAgICAgICAg Y29udGludWU7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICAg ICAgaW5ibGFuayA9IDA7DQoNCiAgICAgICAgaWYgKCFzdHJuY2FzZWNtcChi cC0+bGluZSwgIjxIVE1MPiIsIDYpKSB7DQogICAgICAgICAgICBpbmh0bWwg PSAxOw0KICAgICAgICAgICAgaWYgKCFzaG93aHRtbCAmJiBwcmUpIHsNCiAg ICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiPC9QUkU+XG4iKTsNCiAgICAg ICAgICAgICAgICBwcmU9RkFMU0U7DQogICAgICAgICAgICB9DQogICAgICAg IH0NCiAgICAgICAgZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJwLT5saW5lLCAi PC9IVE1MPiIsIDcpKSB7DQogICAgICAgICAgICBpbmh0bWwgPSAwOw0KICAg ICAgICAgICAgZnByaW50ZihmcCwgIiVzIiwgYnAtPmxpbmUpOw0KICAgICAg ICAgICAgaWYgKCFzaG93aHRtbCAmJiAhcHJlKSB7DQogICAgICAgICAgICAg ICAgZnByaW50ZihmcCwgIjxQUkU+XG4iKTsNCiAgICAgICAgICAgICAgICBw cmU9VFJVRTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJwID0gYnAt Pm5leHQ7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KDQog ICAgICAgIGlmIChpbmh0bWwpIHsNCiAgICAgICAgICAgIGZwcmludGYoZnAs ICIlcyIsIGJwLT5saW5lKTsNCiAgICAgICAgICAgIGJwID0gYnAtPm5leHQ7 DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KICAgICAgICBp ZiAoc2hvd2h0bWwpIHsNCiAgICAgICAgICAgIGlmICghc3RyY21wKGJwLT5s aW5lLCAiLS1cbiIpIHx8DQogICAgICAgICAgICAgICAgIXN0cmNtcChicC0+ bGluZSwgIi0tIFxuIikgfHwNCiAgICAgICAgICAgICAgICAhc3RyY21wKGJw LT5saW5lLCAiLS0tXG4iKSkgew0KICAgICAgICAgICAgICAgIGluc2lnID0g MTsNCiAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiPFBSRT5cbiIpOw0K ICAgICAgICAgICAgICAgIHByZT1UUlVFOw0KICAgICAgICAgICAgfQ0KDQog ICAgICAgICAgICBpZiAoKGJwLT5saW5lKVswXSA9PSAnXG4nKQ0KICAgICAg ICAgICAgICAgIDsNCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAg ICAgIGlmIChpbnNpZykNCiAgICAgICAgICAgICAgICAgICAgZnByaW50Zihm cCwgIiVzIiwgKGNoYXIgKiljb252dXJscyhicC0+bGluZSxpZCxzdWJqZWN0 KSk7DQogICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNxdW90ZShicC0+bGlu ZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzJXMl c1xuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChpcXVvdGVzKT8i PEVNPiI6IiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGFu aWVsIGNoYW5nZWQgdGhpcyAxMHRoIG9mIEp1bHkgMTk5OCBmcm9tDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udnVybHMocm1jcihicC0+ bGluZSksIGlkLCBzdWJqZWN0KSwgKi8NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnZ1cmxzKGJwLT5saW5lLCBpZCwgc3ViamVjdCksDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAoaXF1b3Rlcyk/IjwvRU0+IjoiIik7 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UgaWYg KChicC0+bGluZSlbMF0gIT0gJ1wwJykgew0KICAgICAgICAgICAgICAgICAg ICBpbnQgc3A7DQogICAgICAgICAgICAgICAgICAgIGZvciAoc3AgPSAwO2lz c3BhY2UoYnAtPmxpbmVbc3BdKTtzcCsrKXsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChicC0+bGluZVtzcF0gPT0gJ1x0JykNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Iik7DQogICAgICAg ICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgZnByaW50ZihmcCwgIiZuYnNwOyIpOw0KICAgICAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIlcyIs Y29udnVybHMoJmJwLT5saW5lW3NwXSxpZCxzdWJqZWN0KSk7DQoNCiAgICAg ICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgKiogRGV0 ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIGJyZWFrLg0KICAgICAgICAgICAg ICAgICAgICAqKiBXZSBjb3VsZCBjaGVjayBmb3IgbGVhZGluZyBzcGFjZXMN CiAgICAgICAgICAgICAgICAgICAgKiogb3IgcXVvdGUgbGluZXMsIGJ1dCBp biBnZW5lcmFsLA0KICAgICAgICAgICAgICAgICAgICAqKiBub24tYWxwaGFu dW1lcmljIGxpbmVzIHNob3VsZCBiZQ0KICAgICAgICAgICAgICAgICAgICAq KiBicm9rZW4gYmVmb3JlLg0KICAgICAgICAgICAgICAgICAgICAqLw0KIA0K ICAgICAgICAgICAgICAgICAgICBpZiAoKHNob3diciAmJiAhYnAtPmhlYWRl cikgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICgoYnAtPm5leHQgIT0g TlVMTCkgJiYgIWlzYWxudW0oYnAtPm5leHQtPmxpbmVbMF0pKSkNCiAgICAg ICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiPEJSPiIpOw0KICAgICAg ICAgICAgICAgICAgICBpZighYnAtPmhlYWRlcikgew0KICAgICAgICAgICAg ICAgICAgICAgIGZwcmludGYoZnAsICJcbiIpOw0KICAgICAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9DQog ICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoKGJwLT5saW5lKVswXSAhPSAn XDAnKSB7DQogICAgICAgICAgICBmcHJpbnRmKGZwLCAiJXMiLCAoY2hhciAq KSBjb252dXJscyhicC0+bGluZSwgaWQsIHN1YmplY3QpKTsNCiAgICAgICAg fQ0KICAgICAgICBicCA9IGJwLT5uZXh0Ow0KDQogICAgfQ0KDQogICAgaWYg KHByZSkgDQogICAgICAgIGZwcmludGYoZnAsICI8L1BSRT5cbiIpOw0KDQog ICAgcHJpbnRjb21tZW50KGZwLCAiYm9keSIsICJlbmQiKTsNCiAgICBpZiAo c2hvd2hyKQ0KICAgICAgICBmcHJpbnRmKGZwLCAiPEhSPlxuIik7DQp9DQoN Ci8qDQoqKiBQcmludGluZy4uLnRoZSBvdGhlciBtYWluIHBhcnQgb2YgdGhp cyBwcm9ncmFtIQ0KKiogVGhpcyB3cml0ZXMgb3V0IHRoZSBhcnRpY2xlcywg YmVnaW5uaW5nIHdpdGggdGhlIG51bWJlciBzdGFydG51bS4NCiovDQoNCnZv aWQgd3JpdGVhcnRpY2xlcyhjaGFyICpkaXIsY2hhciAqbGFiZWwsY2hhciAq YWJvdXQsaW50IG92ZXJ3cml0ZSxpbnQgc3RhcnRudW0pDQp7DQogICAgaW50 IG51bSwgc3RhdHVzbnVtLCBza2lwLCBzdWJqbWF0Y2gsIG5ld2ZpbGU7DQog ICAgY2hhciBuYW1lW05BTUVTVFJMRU5dLCBlbWFpbFtNQUlMU1RSTEVOXSwg c3ViamVjdFtTVUJKU1RSTEVOXSwNCiAgICAgICAgaW5yZXBseVtSRVBZU1RS TEVOXSwgZGF0ZVtEQVRFU1RSTEVOXSwgZnJvbWRhdGVbREFURVNUUkxFTl0s DQogICAgICAgIG1zZ2lkW01TR0RTVFJMRU5dOw0KICAgIGNoYXIgbmFtZTJb TkFNRVNUUkxFTl0sIGVtYWlsMltNQUlMU1RSTEVOXSwgc3ViamVjdDJbU1VC SlNUUkxFTl0sDQogICAgICAgIGlucmVwbHkyW1JFUFlTVFJMRU5dLCBkYXRl MltEQVRFU1RSTEVOXSwgZnJvbWRhdGUyW0RBVEVTVFJMRU5dLA0KICAgICAg ICBtc2dpZDJbTVNHRFNUUkxFTl07DQogICAgY2hhciBmaWxlbmFtZVtNQVhG SUxFTEVOXTsNCiAgICBzdHJ1Y3QgYm9keSAqYnAsICpzdGF0dXM7DQogICAg c3RydWN0IHJlcGx5ICpycDsNCiAgICBGSUxFICpmcDsNCg0KICAgIG51bSA9 IHN0YXJ0bnVtOw0KICAgIHNraXAgPSAwOw0KDQogICAgaWYgKHNob3dwcm9n cmVzcykNCiAgICAgICAgcHJpbnRmKCJXcml0aW5nIGFydGljbGVzIHRvIFwi JXNcIi4uLiAgICAiLCBkaXIpOw0KDQogICAgd2hpbGUgKChicCA9IChzdHJ1 Y3QgYm9keSAqKSBoYXNobnVtbG9va3VwKG51bSwgbmFtZSwgZW1haWwsDQog ICAgICAgICAgICBzdWJqZWN0LCBpbnJlcGx5LCBkYXRlLCBmcm9tZGF0ZSwg bXNnaWQpKSAhPSBOVUxMKSB7DQoNCiAgICAgICAgc3ByaW50ZihmaWxlbmFt ZSwgIiVzJXMlLjRkLmh0bWwiLCANCiAgICAgICAgICAgICAgICBkaXIsIChk aXJbc3RybGVuKGRpcikgLSAxXSA9PSAnLycpID8gIiIgOiAiLyIsIG51bSk7 DQoNCiAgICAgICAgLyoNCiAgICAgICAgKiogRGV0ZXJtaW5lIHRvIG92ZXJ3 cml0ZSBmaWxlcyBvciBub3QNCiAgICAgICAgKi8NCg0KICAgICAgICBpZiAo aXNmaWxlKGZpbGVuYW1lKSkNCiAgICAgICAgICAgIG5ld2ZpbGUgPSAwOw0K ICAgICAgICBlbHNlDQogICAgICAgICAgICBuZXdmaWxlID0gMTsNCg0KICAg ICAgICBpZiAoIW5ld2ZpbGUgJiYgIW92ZXJ3cml0ZSkgew0KICAgICAgICAg ICAgc2tpcCA9IDE7IC8qIGlzIHRoaXMgcmVhbGx5IG5lY2Vzc2FyeSB3aXRo IGNvbnRpbnVlID8/PyAqLw0KICAgICAgICAgICAgbnVtKys7DQogICAgICAg ICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAg ICAgICAgICAgIGlmICgoZnAgPSBmb3BlbihmaWxlbmFtZSwgInciKSkgPT0g TlVMTCkgew0KICAgICAgICAgICAgICAgIHNwcmludGYoZXJybXNnLCAiQ291 bGRuJ3Qgd3JpdGUgXCIlc1wiLiIsIGZpbGVuYW1lKTsNCiAgICAgICAgICAg ICAgICBwcm9nZXJyKChjaGFyICopIE5VTEwpOw0KICAgICAgICAgICAgfQ0K ICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAgICAgKiogQ3JlYXRlIHRo ZSBjb21tZW50IGZpZWxkcyBuZWNlc3NhcnkgZm9yIGluY3JlbWVudGFsIHVw ZGF0aW5nDQogICAgICAgICovDQoNCiAgICAgICAgcHJpbnRfbXNnX2hlYWRl cihmcCwgbGFiZWwsIHN1YmplY3QsIGRpciwgbmFtZSwgZW1haWwsIG1zZ2lk KTsNCg0KICAgICAgICBwcmludGNvbW1lbnQoZnAsICJyZWNlaXZlZCIsIGZy b21kYXRlKTsNCiAgICAgICAgcHJpbnRjb21tZW50KGZwLCAic2VudCIsIGRh dGUpOw0KICAgICAgICBwcmludGNvbW1lbnQoZnAsICJuYW1lIiwgbmFtZSk7 DQogICAgICAgIHByaW50Y29tbWVudChmcCwgImVtYWlsIiwgZW1haWwpOw0K ICAgICAgICBwcmludGNvbW1lbnQoZnAsICJzdWJqZWN0IiwgY29udmNoYXJz KHN1YmplY3QpKTsNCiAgICAgICAgcHJpbnRjb21tZW50KGZwLCAiaWQiLCBt c2dpZCk7DQogICAgICAgIHByaW50Y29tbWVudChmcCwgImlucmVwbHl0byIs IGNvbnZjaGFycyhpbnJlcGx5KSk7DQoNCiAgICAgICAgaWYgKHVzZXRhYmxl KSB7DQogICAgICAgICAgICBmcHJpbnRfbWVudShmcCxOT19JTkRFWCxhYm91 dCwiIixtc2dpZCxzdWJqZWN0LFBBR0VfVE9QKTsNCiAgICAgICAgICAgIGZw cmludGYoZnAsICI8UD5cbiIpOw0KICAgICAgICB9DQoNCiAgICAgICAgLyoN CiAgICAgICAgKiogUHJpbnQgdGhlIG1lc3NhZ2UncyBhdXRob3IgaW5mbyBh bmQgZGF0ZS4NCiAgICAgICAgKi8NCg0KICAgICAgICBpZiAoIXN0cmNtcChu YW1lLCBlbWFpbCkpIHsNCiAgICAgICAgICAgIGlmICh1c2VfbWFpbGNvbW1h bmQpIHsNCiAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiPEEgSFJFRj1c IiVzXCI+IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgbWFrZW1haWxj b21tYW5kKG1haWxjb21tYW5kLGVtYWlsLG1zZ2lkLHN1YmplY3QpKTsNCiAg ICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiPEVNPiVzPC9FTT48L0E+PEJS PlxuIiwgbmFtZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNl DQogICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIjxFTT4lczwvRU0+PEJS PlxuIiwgbmFtZSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAg ICAgICAgICBpZiAodXNlX21haWxjb21tYW5kKSB7ICANCiAgICAgICAgICAg ICAgICBmcHJpbnRmKGZwLCI8U1RST05HPiVzPC9TVFJPTkc+ICg8QSBIUkVG PVwiJXNcIj4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxtYWtl bWFpbGNvbW1hbmQobWFpbGNvbW1hbmQsZW1haWwsbXNnaWQsc3ViamVjdCkp Ow0KICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICI8RU0+JXM8L0VNPjwv QT4pPEJSPlxuIiwgZW1haWwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgZWxzZQ0KICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIlcyAoPEVN PiVzPC9FTT4pPEJSPlxuIiwgbmFtZSwgZW1haWwpOw0KICAgICAgICB9DQog ICAgICAgIGZwcmludGYoZnAsICI8RU0+JXM8L0VNPlxuPFA+XG4iLCBkYXRl KTsNCiANCiAgICAgICAgLyoNCiAgICAgICAgKiogVGhpcyBpcyBoZXJlIGJl Y2F1c2UgaXQgbG9va3MgYmV0dGVyIGhlcmUuIFRoZSB0YWJsZSBsb29rcw0K ICAgICAgICAqKiBiZXR0ZXIgYmVmb3JlIHRoZSBBdXRob3IgaW5mby4gVGhp cyBzdHVmZiBzaG91bGQgYmUgaW4gDQogICAgICAgICoqIHByaW50ZmlsZSgp IHNvIGl0IGNvdWxkIGJlIGxhaWQgb3V0IGFzIHRoZSB1c2VyIHdhbnRzLi4u DQogICAgICAgICovDQoNCiAgICAgICAgaWYgKCF1c2V0YWJsZSkgew0KICAg ICAgICAgICAgZnByaW50ZihmcCwgIjxVTD5cbiIpOw0KICAgICAgICAgICAg ZnByaW50ZihmcCwgIjxMST48U1RST05HPk1lc3NhZ2VzIHNvcnRlZCBieTo8 L1NUUk9ORz4gXG4iKTsNCiAgICAgICAgICAgIGZwcmludGYoZnAsICI8QSBI UkVGPVwiJXMjJWRcIj5bIGRhdGUgXTwvQT5cbiIsIGRhdGVuYW1lLCBudW0p Ow0KICAgICAgICAgICAgZnByaW50ZihmcCwgIjxBIEhSRUY9XCIlcyMlZFwi PlsgdGhyZWFkIF08L0E+XG4iLCB0aHJkbmFtZSwgbnVtKTsNCiAgICAgICAg ICAgIGZwcmludGYoZnAsICI8QSBIUkVGPVwiJXMjJWRcIj5bIHN1YmplY3Qg XTwvQT5cbiIsIHN1YmpuYW1lLCBudW0pOw0KICAgICAgICAgICAgZnByaW50 ZihmcCwgIjxBIEhSRUY9XCIlcyMlZFwiPlsgYXV0aG9yIF08L0E+XG4iLCBh dXRobmFtZSxudW0pOw0KICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAg ICAgKiogU2hvdWxkIHdlIHByaW50IG1lc3NhZ2UgbGlua3MgPw0KICAgICAg ICAqLw0KDQogICAgICAgIGlmIChzaG93X21zZ19saW5rcykgew0KICAgICAg ICAgICAgcHJpbnRjb21tZW50KGZwLCAibmV4dCIsICJzdGFydCIpOw0KICAg ICAgICAgICAgaWYgKHVzZXRhYmxlKQ0KICAgICAgICAgICAgICAgIGZwcmlu dGYoZnAsICI8VUw+XG4iKTsNCiAgICANCiAgICAgICAgICAgIC8qDQogICAg ICAgICAgICAqKiBJcyB0aGVyZSBhIG5leHQgbWVzc2FnZT8NCiAgICAgICAg ICAgICovDQogICAgDQogICAgICAgICAgICBzdGF0dXMgPSAoc3RydWN0IGJv ZHkgKikgaGFzaG51bWxvb2t1cChudW0gKyAxLCBuYW1lMiwgZW1haWwyLA0K ICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QyLCBpbnJlcGx5MiwgZGF0 ZTIsIGZyb21kYXRlMiwgbXNnaWQyKTsNCiAgICAgICAgICAgIGlmIChzdGF0 dXMgIT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICI8 TEk+PFNUUk9ORz5OZXh0IG1lc3NhZ2U6PC9TVFJPTkc+ICIpOw0KICAgICAg ICAgICAgICAgIGZwcmludGYoZnAsICI8QSBIUkVGPVwiJS40ZC5odG1sXCI+ JXM6IFwiJXNcIjwvQT5cbiIsDQogICAgICAgICAgICAgICAgbnVtICsgMSwg bmFtZTIsIGNvbnZjaGFycyhzdWJqZWN0MikpOw0KICAgICAgICAgICAgfQ0K ICAgIA0KICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICoqIElzIHRoZXJl IGEgcHJldmlvdXMgbWVzc2FnZT8NCiAgICAgICAgICAgICovDQogICAgDQog ICAgICAgICAgICBzdGF0dXMgPSAoc3RydWN0IGJvZHkgKikgaGFzaG51bWxv b2t1cChudW0gLSAxLCBuYW1lMiwgZW1haWwyLA0KICAgICAgICAgICAgICAg ICAgICAgIHN1YmplY3QyLCBpbnJlcGx5MiwgZGF0ZTIsIGZyb21kYXRlMiwg bXNnaWQyKTsNCiAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gTlVMTCkgew0K ICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICI8TEk+PFNUUk9ORz5QcmV2 aW91cyBtZXNzYWdlOjwvU1RST05HPiAiKTsNCiAgICAgICAgICAgICAgICBm cHJpbnRmKGZwLCAiPEEgSFJFRj1cIiUuNGQuaHRtbFwiPiVzOiBcIiVzXCI8 L0E+XG4iLA0KICAgICAgICAgICAgICAgIG51bSAtIDEsIG5hbWUyLCBjb252 Y2hhcnMoc3ViamVjdDIpKTsNCiAgICAgICAgICAgIH0NCiAgICANCiAgICAg ICAgICAgIC8qDQogICAgICAgICAgICAqKiBJcyB0aGlzIG1lc3NhZ2UgYSBy ZXBseSB0byBhbm90aGVyPw0KICAgICAgICAgICAgKi8NCiAgICANCiAgICAg ICAgICAgIGlmIChpbnJlcGx5WzBdICE9ICdcMCcpIHsNCiAgICAgICAgICAg ICAgICBzdGF0dXNudW0gPSBoYXNocmVwbHlsb29rdXAoaW5yZXBseTIsbmFt ZTIsc3ViamVjdDIsJnN1YmptYXRjaCk7DQogICAgICAgICAgICAgICAgaWYg KHN0YXR1c251bSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAo c3Viam1hdGNoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50Zihm cCwiPExJPjxTVFJPTkc+TWF5YmUgaW4gcmVwbHkgdG86PC9TVFJPTkc+Iik7 DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAg ICAgICAgIGZwcmludGYoZnAsIjxMST48U1RST05HPkluIHJlcGx5IHRvOjwv U1RST05HPiIpOw0KICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCIg PEEgSFJFRj1cIiUuNGQuaHRtbFwiPiIsc3RhdHVzbnVtKTsNCiAgICAgICAg ICAgICAgICAgICAgZnByaW50ZihmcCwiJXM6IFwiJXNcIjwvQT5cbiIsbmFt ZTIsY29udmNoYXJzKHN1YmplY3QyKSk7DQogICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgfQ0KICAgIA0KICAgICAgICAgICAgLyoNCiAgICAgICAg ICAgICoqIElzIHRoZXJlIGEgbWVzc2FnZSBuZXh0IGluIHRoZSB0aHJlYWQ/ DQogICAgICAgICAgICAqLw0KICAgIA0KICAgICAgICAgICAgcHJpbnRjb21t ZW50KGZwLCAibmV4dHRocmVhZCIsICJzdGFydCIpOw0KICAgIA0KICAgICAg ICAgICAgZm9yIChycCA9IHRocmVhZGxpc3Q7IHJwICE9IE5VTEw7IHJwID0g cnAtPm5leHQpDQogICAgICAgICAgICAgICAgaWYgKHJwLT5tc2dudW0gPT0g bnVtICYmIHJwLT5uZXh0ICE9IE5VTEwgJiYNCiAgICAgICAgICAgICAgICAg ICAgcnAtPm5leHQtPm1zZ251bSAhPSAtMSkgew0KICAgICAgICAgICAgICAg ICAgICBmcHJpbnRmKGZwLCAiPExJPjxTVFJPTkc+TmV4dCBpbiB0aHJlYWQ6 PC9TVFJPTkc+ICIpOw0KICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZw LCAiPEEgSFJFRj1cIiUuNGQuaHRtbFwiPiIsIHJwLT5uZXh0LT5tc2dudW0p Ow0KICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiJXM6IFwiJXNc IjwvQT5cbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcnAtPm5l eHQtPm5hbWUsIGNvbnZjaGFycyhycC0+bmV4dC0+c3ViamVjdCkpOw0KICAg ICAgICAgICAgICAgIH0NCiAgICANCiAgICAgICAgICAgICAgICAvKg0KICAg ICAgICAgICAgICAgICoqIERvZXMgdGhpcyBtZXNzYWdlIGhhdmUgcmVwbGll cz8gSWYgc28sIHByaW50IHRoZW0gYWxsIQ0KICAgICAgICAgICAgICAgICov DQogICAgDQogICAgICAgICAgICAgICAgaWYgKHNob3dyZXBsaWVzKSB7DQog ICAgICAgICAgICAgICAgICAgIGZvciAocnAgPSByZXBseWxpc3Q7IHJwICE9 IE5VTEw7IHJwID0gcnAtPm5leHQpIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChycC0+bXNnbnVtID09IG51bSkgew0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChycC0+bWF5YmVyZXBseSkNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwiPExJPjxTVFJPTkc+ TWF5YmUgcmVwbHk6PC9TVFJPTkc+Iik7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmcHJpbnRmKGZwLCAiPExJPjxTVFJPTkc+UmVwbHk6PC9TVFJPTkc+Iik7 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwiIDxB IEhSRUY9XCIlLjRkLmh0bWxcIj4iLHJwLT5mcm9tbXNnbnVtKTsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCIlczogXCIlc1wi PC9BPlxuIixycC0+bmFtZSxjb252Y2hhcnMocnAtPnN1YmplY3QpKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgICAgICBwcmludGNvbW1lbnQoZnAsICJyZXBs eSIsICJlbmQiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCg0K ICAgICAgICBmcHJpbnRmKGZwLCAiPC9VTD5cbiIpOw0KDQoNCiAgICAgICAg LyoNCiAgICAgICAgKiogRmluYWxseS4uLnByaW50IHRoZSBib2R5IQ0KICAg ICAgICAqLw0KDQogICAgICAgIHByaW50Ym9keShmcCwgYnAsIG1zZ2lkLCBz dWJqZWN0KTsNCg0KICAgICAgICAvKg0KICAgICAgICAqKiBTaG91bGQgd2Ug cHJpbnQgb3V0IHRoZSBtZXNzYWdlIGxpbmtzID8NCiAgICAgICAgKi8NCg0K ICAgICAgICBpZiAoc2hvd19tc2dfbGlua3MpIHsNCiAgICAgICAgICAgIGZw cmludGYoZnAsICI8UD5cbjxVTD5cbiIpOw0KICAgIA0KICAgICAgICAgICAg cHJpbnRjb21tZW50KGZwLCAibmV4dCIsICJzdGFydCIpOw0KICAgIA0KICAg ICAgICAgICAgc3RhdHVzID0gKHN0cnVjdCBib2R5ICopIGhhc2hudW1sb29r dXAobnVtICsgMSwgbmFtZTIsDQogICAgICAgICAgICAgICAgICAgICAgZW1h aWwyLCBzdWJqZWN0MiwgaW5yZXBseTIsIGRhdGUyLCBmcm9tZGF0ZTIsIG1z Z2lkMik7DQogICAgICAgICAgICBpZiAoc3RhdHVzICE9IE5VTEwpIHsNCiAg ICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiPExJPjxTVFJPTkc+TmV4dCBt ZXNzYWdlOjwvU1RST05HPiAiKTsNCiAgICAgICAgICAgICAgICBmcHJpbnRm KGZwLCAiPEEgSFJFRj1cIiUuNGQuaHRtbFwiPiVzOiBcIiVzXCI8L0E+XG4i LA0KICAgICAgICAgICAgICAgICAgICAgICAgbnVtICsgMSwgbmFtZTIsIGNv bnZjaGFycyhzdWJqZWN0MikpOw0KICAgICAgICAgICAgfQ0KICAgIA0KICAg ICAgICAgICAgc3RhdHVzID0gKHN0cnVjdCBib2R5ICopIGhhc2hudW1sb29r dXAobnVtIC0gMSwgbmFtZTIsDQogICAgICAgICAgICAgICAgICAgICAgZW1h aWwyLCBzdWJqZWN0MiwgaW5yZXBseTIsIGRhdGUyLCBmcm9tZGF0ZTIsIG1z Z2lkMik7DQogICAgICAgICAgICBpZiAoc3RhdHVzICE9IE5VTEwpIHsNCiAg ICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiPExJPjxTVFJPTkc+UHJldmlv dXMgbWVzc2FnZTo8L1NUUk9ORz4gIik7DQogICAgICAgICAgICAgICAgZnBy aW50ZihmcCwgIjxBIEhSRUY9XCIlLjRkLmh0bWxcIj4lczogXCIlc1wiPC9B PlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG51bSAtIDEsIG5hbWUy LCBjb252Y2hhcnMoc3ViamVjdDIpKTsNCiAgICAgICAgICAgIH0NCiAgICAN CiAgICAgICAgICAgIGlmIChpbnJlcGx5WzBdICE9ICdcMCcpIHsNCiAgICAg ICAgICAgICAgICBzdGF0dXNudW0gPSBoYXNocmVwbHlsb29rdXAoaW5yZXBs eTIsbmFtZTIsc3ViamVjdDIsJnN1YmptYXRjaCk7DQogICAgICAgICAgICAg ICAgaWYgKHN0YXR1c251bSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAg ICBpZiAoc3Viam1hdGNoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgZnBy aW50ZihmcCwiPExJPjxTVFJPTkc+TWF5YmUgaW4gcmVwbHkgdG86PC9TVFJP Tkc+Iik7DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgICAgICAgICAgIGZwcmludGYoZnAsIjxMST48U1RST05HPkluIHJlcGx5 IHRvOjwvU1RST05HPiIpOw0KICAgICAgICAgICAgICAgICAgICBmcHJpbnRm KGZwLCIgPEEgSFJFRj1cIiUuNGQuaHRtbFwiPiIsc3RhdHVzbnVtKTsNCiAg ICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwiJXM6IFwiJXNcIjwvQT5c biIsbmFtZTIsY29udmNoYXJzKHN1YmplY3QyKSk7DQogICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgfQ0KICAgIA0KICAgICAgICAgICAgcHJpbnRj b21tZW50KGZwLCAibmV4dHRocmVhZCIsICJzdGFydCIpOw0KICAgIA0KICAg ICAgICAgICAgZm9yIChycCA9IHRocmVhZGxpc3Q7IHJwICE9IE5VTEw7IHJw ID0gcnAtPm5leHQpIHsNCiAgICAgICAgICAgICAgICBpZiAocnAtPm1zZ251 bSA9PSBudW0gJiYgcnAtPm5leHQgIT0gTlVMTCAmJg0KICAgICAgICAgICAg ICAgICAgICBycC0+bmV4dC0+bXNnbnVtICE9IC0xKSB7DQogICAgICAgICAg ICAgICAgICAgIGZwcmludGYoZnAsICI8TEk+PFNUUk9ORz5OZXh0IGluIHRo cmVhZDo8L1NUUk9ORz4gIik7DQogICAgICAgICAgICAgICAgICAgIGZwcmlu dGYoZnAsICI8QSBIUkVGPVwiJS40ZC5odG1sXCI+IiwgcnAtPm5leHQtPm1z Z251bSk7DQogICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIlczog XCIlc1wiPC9BPlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBy cC0+bmV4dC0+bmFtZSwgY29udmNoYXJzKHJwLT5uZXh0LT5zdWJqZWN0KSk7 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgIA0KICAg ICAgICAgICAgaWYgKHNob3dyZXBsaWVzKSB7DQogICAgICAgICAgICAgICAg Zm9yIChycCA9IHJlcGx5bGlzdDsgcnAgIT0gTlVMTDsgcnAgPSBycC0+bmV4 dCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAocnAtPm1zZ251bSA9PSBu dW0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChycC0+bWF5YmVy ZXBseSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZw LCAiPExJPjxTVFJPTkc+TWF5YmUgcmVwbHk6PC9TVFJPTkc+Iik7DQogICAg ICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnByaW50ZihmcCwgIjxMST48U1RST05HPlJlcGx5OjwvU1RS T05HPiIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwg IiA8QSBIUkVGPVwiJS40ZC5odG1sXCI+IiwgcnAtPmZyb21tc2dudW0pOw0K ICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzOiBcIiVz XCI8L0E+XG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy cC0+bmFtZSwgY29udmNoYXJzKHJwLT5zdWJqZWN0KSk7DQogICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg ICAgcHJpbnRjb21tZW50KGZwLCAicmVwbHkiLCAiZW5kIik7DQogICAgICAg ICAgICB9DQogICAgICAgICAgICBmcHJpbnRmKGZwLCAiPC9VTD5cbiIpOw0K ICAgIA0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHVzZXRhYmxlKQ0KICAg ICAgICAgICAgZnByaW50X21lbnUoZnAsTk9fSU5ERVgsYWJvdXQsIiIsbXNn aWQsc3ViamVjdCxQQUdFX0JPVFRPTSk7DQoNCiAgICAgICAgcHJpbnRmb290 ZXIoZnAsIG1odG1sZm9vdGVyLCBsYWJlbCwgZGlyLCBzdWJqZWN0KTsNCg0K ICAgICAgICBmY2xvc2UoZnApOw0KDQogICAgICAgIGlmIChuZXdmaWxlICYm IGNobW9kKGZpbGVuYW1lLCBmaWxlbW9kZSkgPT0gLTEpIHsNCiAgICAgICAg ICAgIHNwcmludGYoZXJybXNnLCAiQ291bGRuJ3QgY2htb2QgXCIlc1wiIHRv ICVvLiIsDQogICAgICAgICAgICBmaWxlbmFtZSwgZmlsZW1vZGUpOw0KICAg ICAgICAgICAgcHJvZ2VycigoY2hhciAqKSBOVUxMKTsNCiAgICAgICAgfQ0K DQogICAgICAgIGlmICghKG51bSAlIDUpICYmIHNob3dwcm9ncmVzcyAmJiAh c2tpcCkgew0KICAgICAgICAgICAgcHJpbnRmKCJcYlxiXGJcYiUzLjBmJWMi LCgoZmxvYXQpIG51bSAvIChmbG9hdCkgYmlnbnVtKSAqIDEwMCwnJScpOw0K ICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7DQogICAgICAgIH0NCg0KICAg ICAgICBudW0rKzsNCiAgICB9DQogICAgaWYgKHNob3dwcm9ncmVzcykNCiAg ICAgICAgcHJpbnRmKCJcYlxiXGJcYiAgICBcbiIpOw0KICAgIGlmICghb3Zl cndyaXRlKQ0KICAgICAgICBiaWdudW0gPSBudW0gLSAxOw0KfQ0KDQoNCi8q DQoqKiBXcml0ZSB0aGUgZGF0ZSBpbmRleC4uLg0KKi8NCg0Kdm9pZCB3cml0 ZWRhdGVzKGNoYXIgKmRpciwgY2hhciAqbGFiZWwsIGNoYXIgKmFyY2hpdmVz LCBjaGFyICphYm91dCkNCnsNCiAgICBpbnQgbmV3ZmlsZTsNCiAgICBjaGFy IGZpbGVuYW1lW01BWEZJTEVMRU5dOw0KICAgIEZJTEUgKmZwOw0KDQogICAg c3ByaW50ZihmaWxlbmFtZSwgIiVzJXMlcyIsIGRpciwNCgkoZGlyW3N0cmxl bihkaXIpIC0gMV0gPT0gJy8nKSA/ICIiIDogIi8iLCBkYXRlbmFtZSk7DQoN CiAgICBpZiAoaXNmaWxlKGZpbGVuYW1lKSkNCiAgICAgICAgbmV3ZmlsZSA9 IDA7DQogICAgZWxzZQ0KICAgICAgICBuZXdmaWxlID0gMTsNCg0KICAgIGlm ICgoZnAgPSBmb3BlbihmaWxlbmFtZSwgInciKSkgPT0gTlVMTCkgew0KICAg ICAgICBzcHJpbnRmKGVycm1zZywgIkNvdWxkbid0IHdyaXRlIFwiJXNcIi4i LCBmaWxlbmFtZSk7DQogICAgICAgIHByb2dlcnIoKGNoYXIgKikgTlVMTCk7 DQogICAgfQ0KDQogICAgaWYgKHNob3dwcm9ncmVzcykNCiAgICAgICAgcHJp bnRmKCJXcml0aW5nIGRhdGUgaW5kZXggdG8gXCIlc1wiLi4uIiwgZmlsZW5h bWUpOw0KDQogICAgLyoNCiAgICAqKiBQcmludCBvdXQgdGhlIGluZGV4IGZp bGUgaGVhZGVyIA0KICAgICovDQogICAgcHJpbnRfaW5kZXhfaGVhZGVyKGZw LCBsYWJlbCwgZGlyLCAiQnkgRGF0ZSIpOw0KDQogICAgaWYgKCF1c2V0YWJs ZSkgew0KICAgICAgICAvKiANCiAgICAgICAgKiogUHJpbnQgb3V0IGFyY2hp dmUgaW5mb3JtYXRpb24gbGlua3MgYXQgdGhlIHRvcCBvZiB0aGUgaW5kZXgN CiAgICAgICAgKi8gDQogICAgICAgIHByaW50X2luZGV4X2hlYWRlcl9saW5r cyhmcCwgYXJjaGl2ZXMsIGFib3V0LCBGUk9NX0RBVEUpOw0KICAgIA0KICAg ICAgICBpZiAoc2hvd2hyKQ0KICAgICAgICAgICAgZnByaW50ZihmcCwgIjxI Uj5cbiIpOw0KDQogICAgICAgIC8qDQogICAgICAgICoqIFByaW50b3V0IHRo ZSBEYXRlcyBmb3IgdGhlIFN0YXJ0aW5nIGFuZCBFbmRpbmcgbWVzc2FnZXMg DQogICAgICAgICoqIGluIHRoZSBhcmNoaXZlLCBhbG9uZyB3aXRoIGEgY291 bnQgb2YgdGhlIG1lc3NhZ2VzLg0KICAgICAgICAqLw0KDQogICAgICAgIGZw cmludGYoZnAsICI8U1RST05HPlN0YXJ0aW5nOjwvU1RST05HPiA8RU0+JXM8 L0VNPjxCUj5cbiIsIA0KICAgICAgICAgICAgICAgIGdldGRhdGVzdHIoZmly c3RkYXRlbnVtKSk7DQogICAgICAgIGZwcmludGYoZnAsICI8U1RST05HPkVu ZGluZzo8L1NUUk9ORz4gPEVNPiVzPC9FTT48QlI+XG4iLCANCiAgICAgICAg ICAgICAgICBnZXRkYXRlc3RyKGxhc3RkYXRlbnVtKSk7DQogICAgICAgIGZw cmludGYoZnAsICI8U1RST05HPk1lc3NhZ2VzOjwvU1RST05HPiAlZFxuPFA+ XG4iLCBiaWdudW0gKyAxKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAg IGZwcmludF9tZW51KGZwLCBEQVRFX0lOREVYLCBhYm91dCwgYXJjaGl2ZXMs ICIiLCAiIiwgUEFHRV9UT1ApOw0KICAgICAgICBmcHJpbnRfc3VtbWFyeShm cCwgZmlyc3RkYXRlbnVtLCBsYXN0ZGF0ZW51bSwgYmlnbnVtICsgMSk7DQog ICAgICAgIGlmIChzaG93aHIpDQogICAgICAgICAgICBmcHJpbnRmKGZwLCAi PEhSPlxuIik7DQogICAgfQ0KDQogICAgLyoNCiAgICAqKiBQcmludCBvdXQg dGhlIGFjdHVhbCBtZXNzYWdlIGluZGV4IGxpc3RzLiBIZXJlJ3MgdGhlIGJl ZWYuDQogICAgKi8NCg0KICAgIGZwcmludGYoZnAsICI8VUw+XG4iKTsNCiAg ICBwcmludGRhdGVzKGZwLCBkYXRlbGlzdCk7DQogICAgZnByaW50ZihmcCwg IjwvVUw+XG48UD5cbiIpOw0KDQogICAgaWYgKCF1c2V0YWJsZSkgew0KICAg ICAgICAvKg0KICAgICAgICAqKiBQcmludG91dCB0aGUgZGF0ZXMgZm9yIHRo ZSBsYXN0IG1lc3NhZ2UgaW4gdGhlIGFyY2hpdmUNCiAgICAgICAgKiogYWxv bmcgd2l0aCB0aGUgZGF0ZSB0aGUgYXJjaGl2ZSB3YXMgZ2VuZXJhdGVkIG9u Lg0KICAgICAgICAqLw0KDQogICAgICAgIGZwcmludGYoZnAsIjxBIE5BTUU9 XCJlbmRcIj48U1RST05HPkxhc3QgbWVzc2FnZSBkYXRlOjwvU1RST05HPjwv QT4gIik7DQogICAgICAgIGZwcmludGYoZnAsIjxFTT4lczwvRU0+PEJSPlxu IiwgZ2V0ZGF0ZXN0cihsYXN0ZGF0ZW51bSkpOw0KICAgICAgICBmcHJpbnRm KGZwLCI8U1RST05HPkFyY2hpdmVkIG9uOjwvU1RST05HPiA8RU0+JXM8L0VN PjxQPlxuIixnZXRsb2NhbHRpbWUoKSk7DQogICAgICAgIGlmIChzaG93aHIp DQogICAgICAgICAgICBmcHJpbnRmKGZwLCAiPEhSPlxuIik7DQoNCiAgICAg ICAgLyogDQogICAgICAgICoqIFByaW50IG91dCBhcmNoaXZlIGluZm9ybWF0 aW9uIGxpbmtzIGF0IHRoZSBib3R0b20gb2YgdGhlIGluZGV4DQogICAgICAg ICovIA0KICAgICAgICBwcmludF9pbmRleF9mb290ZXJfbGlua3MoZnAsIGFy Y2hpdmVzLCBGUk9NX0RBVEUpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAg ICAgZnByaW50X21lbnUoZnAsIERBVEVfSU5ERVgsIGFib3V0LCBhcmNoaXZl cywgIiIsICIiLCBQQUdFX0JPVFRPTSk7DQogICAgfQ0KDQogICAgLyogDQog ICAgKiogUHJpbnQgdGhlIGluZGV4IHBhZ2UgZm9vdGVyLg0KICAgICovDQog ICAgcHJpbnRmb290ZXIoZnAsIGlodG1sZm9vdGVyLCBsYWJlbCwgZGlyLCAi QnkgRGF0ZSIpOw0KDQogICAgZmNsb3NlKGZwKTsNCg0KICAgIGlmIChuZXdm aWxlICYmIGNobW9kKGZpbGVuYW1lLCBmaWxlbW9kZSkgPT0gLTEpIHsNCiAg ICAgICAgc3ByaW50ZihlcnJtc2csICJDb3VsZG4ndCBjaG1vZCBcIiVzXCIg dG8gJW8uIiwgZmlsZW5hbWUsDQogICAgICAgIGZpbGVtb2RlKTsNCiAgICAg ICAgcHJvZ2VycigoY2hhciAqKSBOVUxMKTsNCiAgICB9DQoNCiAgICBpZiAo c2hvd3Byb2dyZXNzKQ0KICAgICAgICBwdXRjaGFyKCdcbicpOw0KfQ0KDQov Kg0KKiogV2hpbGUgcHJpbnRpbmcgdGhlIHRocmVhZCBpbmRleCwgcHJpbnRz IGFueSByZXBsaWVzIHRvIHJlcGxpZXMuDQoqLw0KDQp2b2lkIGNoZWNrcmVw bGllcyhGSUxFICpmcCwgaW50IG51bSwgaW50IGxldmVsKQ0Kew0KICAgIHN0 cnVjdCByZXBseSAqcnA7DQoNCiAgICBmb3IgKHJwID0gcmVwbHlsaXN0OyBy cCAhPSBOVUxMOyBycCA9IHJwLT5uZXh0KSB7DQogICAgICAgIGlmIChycC0+ bXNnbnVtID09IG51bSkgew0KICAgICAgICAgICAgaWYgKGxldmVsIDwgdGhy ZGxldmVscykNCiAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiPFVMPlxu Iik7DQogICAgICAgICAgICBmcHJpbnRmKGZwLCI8TEk+PEEgSFJFRj1cIiUu NGQuaHRtbFwiPiIscnAtPmZyb21tc2dudW0pOw0KICAgICAgICAgICAgcHJp bnRlZGxpc3QgPSAoc3RydWN0IHByaW50ZWQgKikNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1hcmthc3ByaW50ZWQocHJpbnRlZGxpc3QsIHJwLT5m cm9tbXNnbnVtKTsNCiAgICAgICAgICAgIGZwcmludGYoZnAsIjxTVFJPTkc+ JXMgPC9TVFJPTkc+PC9BPiAiLGNvbnZjaGFycyhycC0+c3ViamVjdCkpOw0K ICAgICAgICAgICAgZnByaW50ZihmcCwgIjxBIE5BTUU9XCIlZFwiPjxFTT4l czwvRU0+PC9BPlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJw LT5mcm9tbXNnbnVtLCBycC0+bmFtZSk7DQogICAgICAgICAgICBjaGVja3Jl cGxpZXMoZnAsIHJwLT5mcm9tbXNnbnVtLCBsZXZlbCArIDEpOw0KICAgICAg ICAgICAgaWYgKGxldmVsIDwgdGhyZGxldmVscykNCiAgICAgICAgICAgICAg ICBmcHJpbnRmKGZwLCAiPC9VTD5cbiIpOw0KICAgICAgICB9DQogICAgfQ0K fQ0KDQovKg0KKiogUHJpbnRzIHRoZSBhcnRpY2xlIHBvaW50ZXJzIGluIHRo ZSB0aHJlYWQgaW5kZXggYnkgZGF0ZS4NCiovDQoNCnZvaWQgcHJpbnR0aHJl YWRzKEZJTEUgKmZwLCBzdHJ1Y3QgaGVhZGVyICpocCkNCnsNCiAgICBpbnQg aGFzcmVwbHk7DQogICAgc3RydWN0IHJlcGx5ICpycDsNCg0KICAgIGlmICho cCAhPSBOVUxMKSB7DQogICAgICAgIHByaW50dGhyZWFkcyhmcCwgaHAtPmxl ZnQpOw0KDQogICAgICAgIGZvciAoaGFzcmVwbHkgPSAwLCBycCA9IHJlcGx5 bGlzdDsgcnAgIT0gTlVMTDsgcnAgPSBycC0+bmV4dCkgew0KICAgICAgICAg ICAgaWYgKHJwLT5mcm9tbXNnbnVtID09IGhwLT5tc2dudW0pIHsNCiAgICAg ICAgICAgICAgICBoYXNyZXBseSA9IDE7DQogICAgICAgICAgICAgICAgYnJl YWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAo IWhhc3JlcGx5ICYmICF3YXNwcmludGVkKHByaW50ZWRsaXN0LCBocC0+bXNn bnVtKSkgew0KICAgICAgICAgICAgZnByaW50ZihmcCwgIjxMST48QSBIUkVG PVwiJS40ZC5odG1sXCI+PFNUUk9ORz4lczwvU1RST05HPjwvQT4gIiwNCiAg ICAgICAgICAgICAgICAgICAgaHAtPm1zZ251bSwgY29udmNoYXJzKGhwLT5z dWJqZWN0KSk7DQogICAgICAgICAgICBmcHJpbnRmKGZwLCI8QSBOQU1FPVwi JWRcIj48RU0+JXM8L0VNPjwvQT5cbiIsaHAtPm1zZ251bSxocC0+bmFtZSk7 DQogICAgICAgICAgICBwcmludGVkbGlzdCA9IChzdHJ1Y3QgcHJpbnRlZCAq KQ0KICAgICAgICAgICAgICAgICAgICBtYXJrYXNwcmludGVkKHByaW50ZWRs aXN0LCBocC0+bXNnbnVtKTsNCg0KICAgICAgICAgICAgY2hlY2tyZXBsaWVz KGZwLCBocC0+bXNnbnVtLCAxKTsNCiAgICAgICAgfQ0KICAgICAgICBwcmlu dHRocmVhZHMoZnAsIGhwLT5yaWdodCk7DQogICAgfQ0KfQ0KDQovKg0KKiog V3JpdGUgdGhlIHRocmVhZCBpbmRleC4uLg0KKi8NCg0Kdm9pZCB3cml0ZXRo cmVhZHMoY2hhciAqZGlyLCBjaGFyICpsYWJlbCwgY2hhciAqYXJjaGl2ZXMs IGNoYXIgKmFib3V0KQ0Kew0KICAgIGludCBuZXdmaWxlOw0KICAgIGNoYXIg ZmlsZW5hbWVbTUFYRklMRUxFTl07DQogICAgRklMRSAqZnA7DQoNCiAgICBz dHJ1Y3QgcHJpbnRlZCAqcHA7DQoNCiAgICB3aGlsZSAocHJpbnRlZGxpc3Qp IHsgLyogY2xlYW51cCBuZWVkZWQgPz8gKi8NCiAgICAgICAgIHBwID0gcHJp bnRlZGxpc3Q7DQogICAgICAgICBwcmludGVkbGlzdCA9IHByaW50ZWRsaXN0 LT5uZXh0Ow0KICAgICAgICAgZnJlZShwcCk7DQogICAgfQ0KDQogICAgcHJp bnRlZGxpc3QgPSBOVUxMOw0KDQogICAgc3ByaW50ZihmaWxlbmFtZSwgIiVz JXMlcyIsIA0KICAgICAgICAgICAgZGlyLCAoZGlyW3N0cmxlbihkaXIpIC0g MV0gPT0gJy8nKSA/ICIiIDogIi8iLCB0aHJkbmFtZSk7DQoNCiAgICBpZiAo aXNmaWxlKGZpbGVuYW1lKSkNCiAgICAgICAgbmV3ZmlsZSA9IDA7DQogICAg ZWxzZQ0KICAgICAgICBuZXdmaWxlID0gMTsNCg0KICAgIGlmICgoZnAgPSBm b3BlbihmaWxlbmFtZSwgInciKSkgPT0gTlVMTCkgew0KICAgICAgICBzcHJp bnRmKGVycm1zZywgIkNvdWxkbid0IHdyaXRlIFwiJXNcIi4iLCBmaWxlbmFt ZSk7DQogICAgICAgIHByb2dlcnIoKGNoYXIgKikgTlVMTCk7DQogICAgfQ0K DQogICAgaWYgKHNob3dwcm9ncmVzcykNCiAgICAgICAgcHJpbnRmKCJXcml0 aW5nIHRocmVhZCBpbmRleCB0byBcIiVzXCIuLi4iLCBmaWxlbmFtZSk7DQoN CiAgICBwcmludF9pbmRleF9oZWFkZXIoZnAsIGxhYmVsLCBkaXIsICJCeSBU aHJlYWQiKTsNCg0KICAgIGlmICghdXNldGFibGUpIHsNCiAgICAgICAgLyog DQogICAgICAgICoqIFByaW50IG91dCB0aGUgaW5kZXggcGFnZSBsaW5rcyAN CiAgICAgICAgKi8gDQogICAgICAgIHByaW50X2luZGV4X2hlYWRlcl9saW5r cyhmcCwgYXJjaGl2ZXMsIGFib3V0LCBGUk9NX1RIUkVBRCk7DQogICAgICAg IA0KICAgICAgICBpZiAoc2hvd2hyKQ0KICAgICAgICAgICAgZnByaW50Zihm cCwgIjxIUj5cbiIpOw0KICAgIA0KICAgICAgICBmcHJpbnRmKGZwLCAiPFNU Uk9ORz5TdGFydGluZzo8L1NUUk9ORz4gPEVNPiVzPC9FTT48QlI+XG4iLA0K ICAgICAgICAgICAgICAgIGdldGRhdGVzdHIoZmlyc3RkYXRlbnVtKSk7DQog ICAgICAgIGZwcmludGYoZnAsICI8U1RST05HPkVuZGluZzo8L1NUUk9ORz4g PEVNPiVzPC9FTT48QlI+XG4iLCANCiAgICAgICAgICAgICAgICBnZXRkYXRl c3RyKGxhc3RkYXRlbnVtKSk7DQogICAgICAgIGZwcmludGYoZnAsICI8U1RS T05HPk1lc3NhZ2VzOjwvU1RST05HPiAlZFxuPFA+XG4iLCBiaWdudW0gKyAx KTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIGZwcmludF9tZW51KGZw LCBUSFJFQURfSU5ERVgsIGFib3V0LCBhcmNoaXZlcywgIiIsICIiLCBQQUdF X1RPUCk7DQogICAgICAgIGZwcmludF9zdW1tYXJ5KGZwLCBmaXJzdGRhdGVu dW0sIGxhc3RkYXRlbnVtLCBiaWdudW0gKyAxKTsNCiAgICAgICAgaWYgKHNo b3docikNCiAgICAgICAgICAgIGZwcmludGYoZnAsICI8SFI+XG4iKTsNCiAg ICB9DQoNCiAgICBmcHJpbnRmKGZwLCAiPFVMPlxuIik7DQogICAgcHJpbnR0 aHJlYWRzKGZwLCBkYXRlbGlzdCk7DQogICAgZnByaW50ZihmcCwgIjwvVUw+ XG48UD5cbiIpOw0KDQogICAgaWYgKCF1c2V0YWJsZSkgew0KICAgICAgICBm cHJpbnRmKGZwLCAiPEEgTkFNRT1cImVuZFwiPjxTVFJPTkc+TGFzdCBtZXNz YWdlIGRhdGU6PC9TVFJPTkc+PC9BPiAiKTsNCiAgICAgICAgZnByaW50Zihm cCwgIjxFTT4lczwvRU0+PEJSPlxuIiwgZ2V0ZGF0ZXN0cihsYXN0ZGF0ZW51 bSkpOw0KICAgICAgICBmcHJpbnRmKGZwLCAiPFNUUk9ORz5BcmNoaXZlZCBv bjo8L1NUUk9ORz4gPEVNPiVzPC9FTT48UD5cbiIsIGdldGxvY2FsdGltZSgp KTsNCiAgICAgICAgICAgICANCiAgICAgICAgaWYgKHNob3docikNCiAgICAg ICAgICAgIGZwcmludGYoZnAsICI8SFI+XG4iKTsNCiAgICANCiAgICAgICAg LyogDQogICAgICAgICoqIFByaW50IG91dCBhcmNoaXZlIGluZm9ybWF0aW9u IGxpbmtzIGF0IHRoZSBib3R0b20gb2YgdGhlIGluZGV4DQogICAgICAgICov IA0KICAgICAgICBwcmludF9pbmRleF9mb290ZXJfbGlua3MoZnAsIGFyY2hp dmVzLCBGUk9NX1RIUkVBRCk7DQogICAgDQogICAgfQ0KICAgIGVsc2Ugew0K ICAgICAgICBmcHJpbnRfbWVudShmcCwgVEhSRUFEX0lOREVYLCBhYm91dCwg YXJjaGl2ZXMsICIiLCAiIiwgUEFHRV9CT1RUT00pOw0KICAgIH0NCg0KICAg IHByaW50Zm9vdGVyKGZwLCBpaHRtbGZvb3RlciwgbGFiZWwsIGRpciwgIkJ5 IFRocmVhZCIpOw0KDQogICAgZmNsb3NlKGZwKTsNCg0KICAgIGlmIChuZXdm aWxlICYmIGNobW9kKGZpbGVuYW1lLCBmaWxlbW9kZSkgPT0gLTEpIHsNCiAg ICAgICAgc3ByaW50ZihlcnJtc2csICJDb3VsZG4ndCBjaG1vZCBcIiVzXCIg dG8gJW8uIiwgZmlsZW5hbWUsIGZpbGVtb2RlKTsNCiAgICAgICAgcHJvZ2Vy cigoY2hhciAqKSBOVUxMKTsNCiAgICB9DQoNCiAgICBpZiAoc2hvd3Byb2dy ZXNzKQ0KICAgICAgICBwdXRjaGFyKCdcbicpOw0KfQ0KDQovKg0KKiogUHJp bnQgdGhlIHN1YmplY3QgaW5kZXggcG9pbnRlcnMgYWxwaGFiZXRpY2FsbHku DQoqLw0KDQp2b2lkIHByaW50c3ViamVjdHMoRklMRSAqZnAsIHN0cnVjdCBo ZWFkZXIgKmhwKQ0Kew0KICAgIHN0YXRpYyBjaGFyIG9sZHN1YmplY3RbU1VC SlNUUkxFTl07DQoNCiAgICBpZiAoaHAgIT0gTlVMTCkgew0KICAgICAgICBw cmludHN1YmplY3RzKGZwLCBocC0+bGVmdCk7DQogICAgICAgIGlmIChzdHJj YXNlY21wKGhwLT5zdWJqZWN0LCBvbGRzdWJqZWN0KSkNCiAgICAgICAgICAg IGZwcmludGYoZnAsICI8TEk+PFNUUk9ORz4lczwvU1RST05HPlxuIixjb252 Y2hhcnMoaHAtPnN1YmplY3QpKTsNCiAgICAgICAgZnByaW50ZihmcCwgIjxV TD5cbiIpOw0KICAgICAgICBmcHJpbnRmKGZwLCI8TEk+PEEgSFJFRj1cIiUu NGQuaHRtbFwiPiVzPC9BPiAiLGhwLT5tc2dudW0saHAtPm5hbWUpOw0KICAg ICAgICBmcHJpbnRmKGZwLCI8QSBOQU1FPVwiJWRcIj48RU0+JXM8L0VNPjwv QT5cbiIsIGhwLT5tc2dudW0saHAtPmRhdGVzdHIpOw0KICAgICAgICBmcHJp bnRmKGZwLCAiPC9VTD5cbiIpOw0KICAgICAgICBzdHJjcHkob2xkc3ViamVj dCwgaHAtPnN1YmplY3QpOw0KICAgICAgICBwcmludHN1YmplY3RzKGZwLCBo cC0+cmlnaHQpOw0KICAgIH0NCn0NCg0KLyoNCioqIFByaW50cyB0aGUgc3Vi amVjdCBpbmRleC4NCiovDQoNCnZvaWQgd3JpdGVzdWJqZWN0cyhjaGFyICpk aXIsIGNoYXIgKmxhYmVsLCBjaGFyICphcmNoaXZlcywgY2hhciAqYWJvdXQp DQp7DQogICAgaW50IG5ld2ZpbGU7DQogICAgY2hhciBmaWxlbmFtZVtNQVhG SUxFTEVOXTsNCiAgICBGSUxFICpmcDsNCg0KICAgIHNwcmludGYoZmlsZW5h bWUsICIlcyVzJXMiLCANCiAgICAgICAgICAgIGRpciwgKGRpcltzdHJsZW4o ZGlyKSAtIDFdID09ICcvJykgPyAiIiA6ICIvIiwgc3Viam5hbWUpOw0KDQog ICAgaWYgKGlzZmlsZShmaWxlbmFtZSkpDQogICAgICAgIG5ld2ZpbGUgPSAw Ow0KICAgIGVsc2UNCiAgICAgICAgbmV3ZmlsZSA9IDE7DQoNCiAgICBpZiAo KGZwID0gZm9wZW4oZmlsZW5hbWUsICJ3IikpID09IE5VTEwpIHsNCiAgICAg ICAgc3ByaW50ZihlcnJtc2csICJDb3VsZG4ndCB3cml0ZSBcIiVzXCIuIiwg ZmlsZW5hbWUpOw0KICAgICAgICBwcm9nZXJyKChjaGFyICopIE5VTEwpOw0K ICAgIH0NCg0KICAgIGlmIChzaG93cHJvZ3Jlc3MpDQogICAgICAgIHByaW50 ZigiV3JpdGluZyBzdWJqZWN0IGluZGV4IHRvIFwiJXNcIi4uLiIsIGZpbGVu YW1lKTsNCg0KICAgIHByaW50X2luZGV4X2hlYWRlcihmcCwgbGFiZWwsIGRp ciwgIkJ5IFN1YmplY3QiKTsNCg0KICAgIGlmICghdXNldGFibGUpIHsNCiAg ICAgICAgLyogDQogICAgICAgICoqIFByaW50IG91dCB0aGUgaW5kZXggcGFn ZSBsaW5rcyANCiAgICAgICAgKi8gDQogICAgICAgIHByaW50X2luZGV4X2hl YWRlcl9saW5rcyhmcCwgYXJjaGl2ZXMsIGFib3V0LCBGUk9NX1NVQkpFQ1Qp Ow0KICAgIA0KICAgICAgICBpZiAoc2hvd2hyKQ0KICAgICAgICAgICAgZnBy aW50ZihmcCwgIjxIUj5cbiIpOw0KDQogICAgICAgIGZwcmludGYoZnAsICI8 U1RST05HPlN0YXJ0aW5nOjwvU1RST05HPiA8RU0+JXM8L0VNPjxCUj5cbiIs DQogICAgICAgICAgICAgICAgZ2V0ZGF0ZXN0cihmaXJzdGRhdGVudW0pKTsN CiAgICAgICAgZnByaW50ZihmcCwgIjxTVFJPTkc+RW5kaW5nOjwvU1RST05H PiA8RU0+JXM8L0VNPjxCUj5cbiIsIA0KICAgICAgICAgICAgICAgIGdldGRh dGVzdHIobGFzdGRhdGVudW0pKTsNCiAgICAgICAgZnByaW50ZihmcCwgIjxT VFJPTkc+TWVzc2FnZXM6PC9TVFJPTkc+ICVkXG48UD5cbiIsIGJpZ251bSAr IDEpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgZnByaW50X21lbnUo ZnAsIFNVQkpFQ1RfSU5ERVgsIGFib3V0LCBhcmNoaXZlcywgIiIsICIiLCBQ QUdFX1RPUCk7DQogICAgICAgIGZwcmludF9zdW1tYXJ5KGZwLCBmaXJzdGRh dGVudW0sIGxhc3RkYXRlbnVtLCBiaWdudW0gKyAxKTsNCiAgICAgICAgaWYg KHNob3docikNCiAgICAgICAgICAgIGZwcmludGYoZnAsICI8SFI+XG4iKTsN CiAgICB9DQoNCiAgICBmcHJpbnRmKGZwLCAiPFVMPlxuIik7DQogICAgcHJp bnRzdWJqZWN0cyhmcCwgc3ViamVjdGxpc3QpOw0KICAgIGZwcmludGYoZnAs ICI8L1VMPlxuPFA+XG4iKTsNCg0KICAgIGlmICghdXNldGFibGUpIHsNCiAg ICAgICAgZnByaW50ZihmcCwgIjxTVFJPTkc+TGFzdCBtZXNzYWdlIGRhdGU6 PC9TVFJPTkc+IDxFTT4lczwvRU0+PEJSPlxuIiwNCiAgICAgICAgICAgICAg ICBnZXRkYXRlc3RyKGxhc3RkYXRlbnVtKSk7DQogICAgICAgIGZwcmludGYo ZnAsICI8U1RST05HPkFyY2hpdmVkIG9uOjwvU1RST05HPiA8RU0+JXM8L0VN PjxQPlxuIiwgDQogICAgICAgICAgICAgICAgZ2V0bG9jYWx0aW1lKCkpOw0K DQogICAgICAgIGlmIChzaG93aHIpDQogICAgICAgICAgICBmcHJpbnRmKGZw LCAiPEhSPlxuIik7DQoNCiAgICAgICAgLyogDQogICAgICAgICoqIFByaW50 IG91dCBhcmNoaXZlIGluZm9ybWF0aW9uIGxpbmtzIGF0IHRoZSBib3R0b20g b2YgdGhlIGluZGV4DQogICAgICAgICovIA0KICAgICAgICBwcmludF9pbmRl eF9mb290ZXJfbGlua3MoZnAsIGFyY2hpdmVzLCBGUk9NX1NVQkpFQ1QpOw0K ICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgZnByaW50X21lbnUoZnAsIFNV QkpFQ1RfSU5ERVgsIGFib3V0LCBhcmNoaXZlcywgIiIsICIiLCBQQUdFX0JP VFRPTSk7DQogICAgfQ0KDQogICAgcHJpbnRmb290ZXIoZnAsIGlodG1sZm9v dGVyLCBsYWJlbCwgZGlyLCAiQnkgU3ViamVjdCIpOw0KDQogICAgZmNsb3Nl KGZwKTsNCg0KICAgIGlmIChuZXdmaWxlICYmIGNobW9kKGZpbGVuYW1lLCBm aWxlbW9kZSkgPT0gLTEpIHsNCiAgICAgICAgc3ByaW50ZihlcnJtc2csICJD b3VsZG4ndCBjaG1vZCBcIiVzXCIgdG8gJW8uIiwgZmlsZW5hbWUsDQogICAg ICAgIGZpbGVtb2RlKTsNCiAgICAgICAgcHJvZ2VycigoY2hhciAqKSBOVUxM KTsNCiAgICB9DQoNCiAgICBpZiAoc2hvd3Byb2dyZXNzKQ0KICAgICAgICBw dXRjaGFyKCdcbicpOw0KfQ0KDQovKg0KKiogUHJpbnRzIHRoZSBhdXRob3Ig aW5kZXggbGlua3Mgc29ydGVkIGFscGhhYmV0aWNhbGx5Lg0KKi8NCg0Kdm9p ZCBwcmludGF1dGhvcnMoRklMRSAqZnAsIHN0cnVjdCBoZWFkZXIgKmhwKQ0K ew0KICAgIHN0YXRpYyBjaGFyIG9sZG5hbWVbU1VCSlNUUkxFTl07DQoNCiAg ICBpZiAoaHAgIT0gTlVMTCkgew0KICAgICAgICBwcmludGF1dGhvcnMoZnAs IGhwLT5sZWZ0KTsNCiAgICAgICAgaWYgKHN0cmNhc2VjbXAoaHAtPm5hbWUs IG9sZG5hbWUpKQ0KICAgICAgICAgICAgZnByaW50ZihmcCwgIjxMST48U1RS T05HPiVzPC9TVFJPTkc+XG4iLCBocC0+bmFtZSk7DQogICAgICAgIGZwcmlu dGYoZnAsIjxVTD5cbiIpOw0KICAgICAgICBmcHJpbnRmKGZwLCI8TEk+PEEg SFJFRj1cIiUuNGQuaHRtbFwiPiVzPC9BPiAiLA0KICAgICAgICAgICAgICAg ICAgICAgaHAtPm1zZ251bSwgY29udmNoYXJzKGhwLT5zdWJqZWN0KSk7DQog ICAgICAgIGZwcmludGYoZnAsIjxBIE5BTUU9XCIlZFwiPjxFTT4lczwvRU0+ PC9BPlxuIiwgaHAtPm1zZ251bSxocC0+ZGF0ZXN0cik7DQogICAgICAgIGZw cmludGYoZnAsIjwvVUw+XG4iKTsNCiAgICAgICAgc3RyY3B5KG9sZG5hbWUs IGhwLT5uYW1lKTsNCiAgICAgICAgcHJpbnRhdXRob3JzKGZwLCBocC0+cmln aHQpOw0KICAgIH0NCn0NCg0KLyoNCioqIFByaW50cyB0aGUgYXV0aG9yIGlu ZGV4IGZpbGUgYW5kIGxpbmtzIHNvcnRlZCBhbHBoYWJldGljYWxseS4NCiov DQoNCnZvaWQgd3JpdGVhdXRob3JzKGNoYXIgKmRpciwgY2hhciAqbGFiZWws IGNoYXIgKmFyY2hpdmVzLCBjaGFyICphYm91dCkNCnsNCiAgICBpbnQgbmV3 ZmlsZTsNCiAgICBjaGFyIGZpbGVuYW1lW01BWEZJTEVMRU5dOw0KICAgIEZJ TEUgKmZwOw0KDQogICAgc3ByaW50ZihmaWxlbmFtZSwgIiVzJXMlcyIsIA0K ICAgICAgICAgICAgZGlyLCAoZGlyW3N0cmxlbihkaXIpIC0gMV0gPT0gJy8n KSA/ICIiIDogIi8iLCBhdXRobmFtZSk7DQoNCiAgICBpZiAoaXNmaWxlKGZp bGVuYW1lKSkNCiAgICAgICAgbmV3ZmlsZSA9IDA7DQogICAgZWxzZQ0KICAg ICAgICBuZXdmaWxlID0gMTsNCg0KICAgIGlmICgoZnAgPSBmb3BlbihmaWxl bmFtZSwgInciKSkgPT0gTlVMTCkgew0KICAgICAgICBzcHJpbnRmKGVycm1z ZywgIkNvdWxkbid0IHdyaXRlIFwiJXNcIi4iLCBmaWxlbmFtZSk7DQogICAg ICAgIHByb2dlcnIoKGNoYXIgKilOVUxMKTsNCiAgICB9DQoNCiAgICBpZiAo c2hvd3Byb2dyZXNzKQ0KICAgICAgICBwcmludGYoIldyaXRpbmcgYXV0aG9y IGluZGV4IHRvIFwiJXNcIi4uLiIsIGZpbGVuYW1lKTsNCg0KICAgIHByaW50 X2luZGV4X2hlYWRlcihmcCwgbGFiZWwsIGRpciwgIkJ5IEF1dGhvciIpOw0K DQogICAgaWYgKCF1c2V0YWJsZSkgew0KICAgICAgICAvKiANCiAgICAgICAg KiogUHJpbnQgb3V0IHRoZSBpbmRleCBwYWdlIGxpbmtzIA0KICAgICAgICAq LyANCiAgICAgICAgcHJpbnRfaW5kZXhfaGVhZGVyX2xpbmtzKGZwLCBhcmNo aXZlcywgYWJvdXQsIEZST01fQVVUSE9SKTsNCiAgICAgICAgDQogICAgICAg IGlmIChzaG93aHIpDQogICAgICAgICAgICBmcHJpbnRmKGZwLCAiPEhSPlxu Iik7DQogICAgDQogICAgICAgIGZwcmludGYoZnAsICI8U1RST05HPlN0YXJ0 aW5nOjwvU1RST05HPiA8RU0+JXM8L0VNPjxCUj5cbiIsDQogICAgICAgICAg ICAgICAgZ2V0ZGF0ZXN0cihmaXJzdGRhdGVudW0pKTsNCiAgICAgICAgZnBy aW50ZihmcCwgIjxTVFJPTkc+RW5kaW5nOjwvU1RST05HPiA8RU0+JXM8L0VN PjxCUj5cbiIsIA0KICAgICAgICAgICAgICAgIGdldGRhdGVzdHIobGFzdGRh dGVudW0pKTsNCiAgICAgICAgZnByaW50ZihmcCwgIjxTVFJPTkc+TWVzc2Fn ZXM6PC9TVFJPTkc+ICVkXG48UD5cbiIsIGJpZ251bSArIDEpOw0KICAgIH0N CiAgICBlbHNlIHsNCiAgICAgICAgZnByaW50X21lbnUoZnAsIEFVVEhPUl9J TkRFWCwgYWJvdXQsIGFyY2hpdmVzLCAiIiwgIiIsIFBBR0VfVE9QKTsNCiAg ICAgICAgZnByaW50X3N1bW1hcnkoZnAsIGZpcnN0ZGF0ZW51bSwgbGFzdGRh dGVudW0sIGJpZ251bSArIDEpOyAgICAgICAgDQogICAgICAgIGlmIChzaG93 aHIpDQogICAgICAgICAgICBmcHJpbnRmKGZwLCAiPEhSPlxuIik7DQogICAg fQ0KDQogICAgZnByaW50ZihmcCwgIjxVTD5cbiIpOw0KICAgIHByaW50YXV0 aG9ycyhmcCwgYXV0aG9ybGlzdCk7DQogICAgZnByaW50ZihmcCwgIjwvVUw+ XG48UD5cbiIpOw0KDQogICAgaWYgKCF1c2V0YWJsZSkgew0KICAgICAgICBm cHJpbnRmKGZwLCAiPFNUUk9ORz5MYXN0IG1lc3NhZ2UgZGF0ZTo8L1NUUk9O Rz4gPEVNPiVzPC9FTT48QlI+XG4iLA0KICAgICAgICAgICAgICAgICAgICBn ZXRkYXRlc3RyKGxhc3RkYXRlbnVtKSk7DQogICAgICAgIGZwcmludGYoZnAs IjxTVFJPTkc+QXJjaGl2ZWQgb246PC9TVFJPTkc+IDxFTT4lczwvRU0+PFA+ XG4iLGdldGxvY2FsdGltZSgpKTsNCg0KICAgICAgICBpZiAoc2hvd2hyKQ0K ICAgICAgICAgICAgZnByaW50ZihmcCwgIjxIUj5cbiIpOw0KDQogICAgICAg IC8qIA0KICAgICAgICAqKiBQcmludCBvdXQgYXJjaGl2ZSBpbmZvcm1hdGlv biBsaW5rcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBpbmRleA0KICAgICAgICAq LyANCiAgICAgICAgcHJpbnRfaW5kZXhfZm9vdGVyX2xpbmtzKGZwLCBhcmNo aXZlcywgRlJPTV9BVVRIT1IpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAg ICAgZnByaW50X21lbnUoZnAsIEFVVEhPUl9JTkRFWCwgYWJvdXQsIGFyY2hp dmVzLCAiIiwgIiIsIFBBR0VfQk9UVE9NKTsNCiAgICB9DQoNCiAgICBwcmlu dGZvb3RlcihmcCwgaWh0bWxmb290ZXIsIGxhYmVsLCBkaXIsICJCeSBBdXRo b3IiKTsNCg0KICAgIGZjbG9zZShmcCk7DQoNCiAgICBpZiAobmV3ZmlsZSAm JiBjaG1vZChmaWxlbmFtZSwgZmlsZW1vZGUpID09IC0xKSB7DQogICAgICAg IHNwcmludGYoZXJybXNnLCAiQ291bGRuJ3QgY2htb2QgXCIlc1wiIHRvICVv LiIsIGZpbGVuYW1lLCBmaWxlbW9kZSk7DQogICAgICAgIHByb2dlcnIoKGNo YXIqKU5VTEwpOw0KICAgIH0NCg0KICAgIGlmIChzaG93cHJvZ3Jlc3MpDQog ICAgICAgIHB1dGNoYXIoJ1xuJyk7DQp9DQo= ---559023410-851401618-901288998=:17635--