Return-Path: Delivered-To: apmail-apr-dev-archive@www.apache.org Received: (qmail 47941 invoked from network); 28 Jul 2005 21:26:02 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 28 Jul 2005 21:26:02 -0000 Received: (qmail 99141 invoked by uid 500); 28 Jul 2005 21:26:00 -0000 Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 99109 invoked by uid 500); 28 Jul 2005 21:25:59 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Id: Delivered-To: mailing list dev@apr.apache.org Received: (qmail 99096 invoked by uid 99); 28 Jul 2005 21:25:59 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 28 Jul 2005 14:25:59 -0700 X-ASF-Spam-Status: No, hits=0.3 required=10.0 tests=HTML_10_20,HTML_MESSAGE X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [83.131.71.198] (HELO ranns.org) (83.131.71.198) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 28 Jul 2005 14:25:50 -0700 Received: by ranns.org (Postfix, from userid 1000) id B468B4B39D; Thu, 28 Jul 2005 23:26:05 +0200 (CEST) Subject: [PATCH] Port testucs to Unix From: Neale Ranns To: APR developers Content-Type: multipart/mixed; boundary="=-rDLo8ZLNEOBVOLj6KBAj" Message-Id: <1122585964.8175.211.camel@holland.ranns.org> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 Date: Thu, 28 Jul 2005 23:26:05 +0200 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N --=-rDLo8ZLNEOBVOLj6KBAj Content-Type: multipart/alternative; boundary="=-8qeDr7sevjTZgRxX9B1I" --=-8qeDr7sevjTZgRxX9B1I Content-Type: text/plain Content-Transfer-Encoding: 7bit hi, firstly apologies if i have gone about this all wrong; this is my first contribution. it was mentioned in the status mail this morning (28th July) that testucs needs to be ported to unix. i have attempted to do this. the testucs app tests the two functions apr_conv_utf8_to_ucs2 and apr_conv_ucs2_to_utf8. These functions are only declared for win32. Looking at this code there doesn't seem to be much that is win32 specific in it (in fact it does compile unchanged on linux). So to get this test to work on unix i just have to link this to functions into the unix shared lib. two ways i see to do this: 1) a clean way: i move the win32 arch dependant utf8 files (include/arch/win32/apr_arch_utf8.h and misc/win32/utf8.c) to a common place (include/apr_utf8.h and strings/apr_utf8.c (aplogies for the use of the strings dir, but it seemed like to most appropriate. of course i can change that)). Then update all win32 files that #include the old locations, change the .dsp files (this i did manually so i could be wrong) and update the test/internal/Makefile.in (to build the test) and the testucs.c file (to reflect the include path changes) clean.patch that is attached does this. 2) a dirty way i copied the win32 arch files to the unix arch directory. I updated the test/internal/Makefile.in file to include the arch dependant files. The arch directory that is included is set by the configure script. dirty.patch that is attached does this. both patches are based on version 1.1.1. you must ./buildconf and ./configure once applied (for both patches), since i moved some files around. using both patches i have now run the testucs program on my linux box. the testall program also reports success. the real (almost laughable) downside is that i do not have a windows compile environment to test that i have not broken it there. there is a distinct possibility that i have. i prefer the clean patch, but i don't now enough about the consequences to comment on whether it is suitable. the dirty way would work better with symbolic links not straight copies. i hope that is what was required and that i have contributed in the correct way neale --=-8qeDr7sevjTZgRxX9B1I Content-Type: text/html; charset=utf-8
hi,

firstly apologies if i have gone about this all wrong; this is my first contribution.

it was mentioned in the status mail this morning (28th July) that testucs needs to be ported to unix. i have attempted to do this.

the testucs app tests the two functions  apr_conv_utf8_to_ucs2 and apr_conv_ucs2_to_utf8. These functions are only declared for win32. Looking at this code there doesn't seem to be much that is win32 specific in it (in fact it does compile unchanged on linux). So to get this test to work on unix i just have to link this to functions into the unix shared lib.

two ways i see to do this:
    1) a clean way:
    i move the win32 arch dependant utf8 files (include/arch/win32/apr_arch_utf8.h and misc/win32/utf8.c) to a common place (include/apr_utf8.h and strings/apr_utf8.c (aplogies for the use of the strings dir, but it seemed like to most appropriate. of course i can change that)). Then update all win32 files that #include the old locations, change the .dsp files (this i did manually so i could be wrong) and update the test/internal/Makefile.in (to build the test) and the testucs.c file (to reflect the include path changes)

    clean.patch that is attached does this.

    2) a dirty way
    i copied the win32 arch files to the unix arch directory. I updated the test/internal/Makefile.in file to include the arch dependant files. The arch directory that is included is set by the configure script.

    dirty.patch that is attached does this.

both patches are based on version 1.1.1.

you must ./buildconf and ./configure once applied (for both patches), since i moved some files around.

using both patches i have now run the testucs program on my linux box. the testall program also reports success. the real (almost laughable) downside is that i do not have a windows compile environment to test that i have not broken it there. there is a distinct possibility that i have.

i prefer the clean patch, but i don't now enough about the consequences to comment on whether it is suitable. the dirty way would work better with symbolic links not straight copies.


i hope that is what was required and that i have contributed in the correct way

neale


--=-8qeDr7sevjTZgRxX9B1I-- --=-rDLo8ZLNEOBVOLj6KBAj Content-Disposition: attachment; filename=clean.patch Content-Type: text/x-patch; name=clean.patch; charset=UTF-8 Content-Transfer-Encoding: base64 LS0tIC9kZXYvbnVsbAkyMDA1LTA2LTEwIDE1OjE4OjA4LjAwMDAwMDAwMCArMDIwMA0KKysrIGlu Y2x1ZGUvYXByX3V0ZjguaAkyMDA1LTA3LTI4IDE0OjMzOjI1LjMxODY5OTU3NiArMDIwMA0KQEAg LTAsMCArMSw1NSBAQA0KKy8qIENvcHlyaWdodCAyMDAwLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uDQorICoNCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogWW91IG1heSBv YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgaHR0cDovL3d3dy5h cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQg YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICog ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT IiBCQVNJUywNCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogbGltaXRh dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorI2lmbmRlZiBVVEY4X0gNCisjZGVm aW5lIFVURjhfSA0KKw0KKyNpbmNsdWRlICJhcHIuaCINCisjaW5jbHVkZSAiYXByX2xpYi5oIg0K KyNpbmNsdWRlICJhcHJfZXJybm8uaCINCisNCisvKiBJZiB3ZSBldmVyIHN1cHBvcnQgYW55dGhp bmcgbW9yZSBleGNpdGluZyB0aGFuIGNoYXIuLi4gdGhpcyBjb3VsZCBtb3ZlLg0KKyAqLw0KK3R5 cGVkZWYgYXByX3VpbnQxNl90IGFwcl93Y2hhcl90Ow0KKw0KKy8qKg0KKyAqIEFuIEFQUiBpbnRl cm5hbCBmdW5jdGlvbiBmb3IgZmFzdCB1dGYtOCBvY3RldC1lbmNvZGVkIFVuaWNvZGUgY29udmVy c2lvbg0KKyAqIHRvIHRoZSB1Y3MtMiB3aWRlIFVuaWNvZGUgZm9ybWF0LiAgVGhpcyBmdW5jdGlv biBpcyB1c2VkIGZvciBmaWxlbmFtZSBhbmQgDQorICogb3RoZXIgcmVzb3VyY2UgY29udmVyc2lv bnMgZm9yIHBsYXRmb3JtcyBwcm92aWRpbmcgbmF0aXZlIFVuaWNvZGUgc3VwcG9ydC4NCisgKg0K KyAqIEB0aXAgT25seSB0aGUgZXJyb3JzIEFQUl9FSU5WQUwgYW5kIEFQUl9JTkNPTVBMRVRFIG1h eSBvY2N1ciwgdGhlIGZvcm1lcg0KKyAqIHdoZW4gdGhlIGNoYXJhY3RlciBjb2RlIGlzIGludmFs aWQgKGluIG9yIG91dCBvZiBjb250ZXh0KSBhbmQgdGhlIGxhdGVyDQorICogd2hlbiBtb3JlIGNo YXJhY3RlcnMgd2VyZSBleHBlY3RlZCwgYnV0IGluc3VmZmljaWVudCBjaGFyYWN0ZXJzIHJlbWFp bi4NCisgKi8NCitBUFJfREVDTEFSRShhcHJfc3RhdHVzX3QpIGFwcl9jb252X3V0ZjhfdG9fdWNz Mihjb25zdCBjaGFyICppbiwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXByX3NpemVfdCAqaW5ieXRlcywNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfd2NoYXJfdCAqb3V0LCANCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfc2l6ZV90ICpvdXR3b3Jk cyk7DQorDQorLyoqDQorICogQW4gQVBSIGludGVybmFsIGZ1bmN0aW9uIGZvciBmYXN0IHVjcy0y IHdpZGUgVW5pY29kZSBmb3JtYXQgY29udmVyc2lvbiB0byANCisgKiB0aGUgdXRmLTggb2N0ZXQt ZW5jb2RlZCBVbmljb2RlLiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBmaWxlbmFtZSBhbmQg DQorICogb3RoZXIgcmVzb3VyY2UgY29udmVyc2lvbnMgZm9yIHBsYXRmb3JtcyBwcm92aWRpbmcg bmF0aXZlIFVuaWNvZGUgc3VwcG9ydC4NCisgKg0KKyAqIEB0aXAgT25seSB0aGUgZXJyb3JzIEFQ Ul9FSU5WQUwgYW5kIEFQUl9JTkNPTVBMRVRFIG1heSBvY2N1ciwgdGhlIGZvcm1lcg0KKyAqIHdo ZW4gdGhlIGNoYXJhY3RlciBjb2RlIGlzIGludmFsaWQgKGluIG9yIG91dCBvZiBjb250ZXh0KSBh bmQgdGhlIGxhdGVyDQorICogd2hlbiBtb3JlIHdvcmRzIHdlcmUgZXhwZWN0ZWQsIGJ1dCBpbnN1 ZmZpY2llbnQgd29yZHMgcmVtYWluLg0KKyAqLw0KK0FQUl9ERUNMQVJFKGFwcl9zdGF0dXNfdCkg YXByX2NvbnZfdWNzMl90b191dGY4KGNvbnN0IGFwcl93Y2hhcl90ICppbiwgDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3NpemVfdCAqaW53b3Jk cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICpvdXQsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFwcl9zaXplX3QgKm91dGJ5dGVzKTsNCisNCisjZW5kaWYgLyogZGVmIFVURjhfSCAqLw0KLS0t IC9kZXYvbnVsbAkyMDA1LTA2LTEwIDE1OjE4OjA4LjAwMDAwMDAwMCArMDIwMA0KKysrIHN0cmlu Z3MvYXByX3V0ZjguYwkyMDA1LTA3LTI4IDE0OjM0OjM5LjY1NjM5ODUyOCArMDIwMA0KQEAgLTAs MCArMSwyNTMgQEANCisvKiBDb3B5cmlnaHQgMjAwMC0yMDA0IFRoZSBBcGFjaGUgU29mdHdhcmUg Rm91bmRhdGlvbg0KKyAqDQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmls ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAqIFlvdSBtYXkgb2J0 YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgIGh0dHA6Ly93d3cuYXBh Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5 IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRp c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg QkFTSVMsDQorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAqIGxpbWl0YXRp b25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJhcHIuaCINCisjaW5j bHVkZSAiYXByX3ByaXZhdGUuaCINCisjaW5jbHVkZSAiYXByX2Vycm5vLmgiDQorI2luY2x1ZGUg ImFwcl91dGY4LmgiDQorDQorLyogSW1wbGVtZW50IHRoZSBkZXNpZ24gcHJpbmNpcGFsIHNwZWNp ZmllZCBieSBSRkMgMjcxOCAyLjIuNSANCisgKiBHdWlkZWxpbmVzIGZvciBuZXcgVVJMIFNjaGVt ZXMgLSB3aXRoaW4gdGhlIEFQUi4NCisgKg0KKyAqIFNpbmNlIG1hbnkgYXJjaGl0ZWN0dXJlcyBz dXBwb3J0IHVuaWNvZGUsIGFuZCBVQ1MyIGlzIHRoZSBtb3N0DQorICogZWZmaWNpZW50IHN0b3Jh Z2UgdXNlZCBieSB0aG9zZSBhcmNoaWN0dXJlcywgdGhlc2UgZnVuY3Rpb25zDQorICogZXhpc3Qg dG8gdmFsaWRhdGUgYSBVQ1Mgc3RyaW5nLiAgSXQgaXMgdXAgdG8gdGhlIG9wZXJhdGluZyBzeXN0 ZW0NCisgKiB0byBkZXRlcm1pbmUgdGhlIHZhbGlkaXRpdHkgb2YgdGhlIHN0cmluZyBpbiB0aGUg Y29udGV4dCBvZiBpdCdzDQorICogbmF0aXZlIGxhbmd1YWdlIHN1cHBvcnQuICBGaWxlIHN5c3Rl bXMgdGhhdCBzdXBwb3J0IGZpbGVuYW1lIA0KKyAqIGNoYXJhY3RlcnMgb2YgMHg4MC0weGZmIGJ1 dCBoYXZlIG5vIHN1cHBvcnQgb2YgVW5pY29kZSB3aWxsIGZpbmQgDQorICogdGhpcyBmdW5jdGlv biB1c2VmdWwgb25seSBmb3IgdmFsaWRhdGluZyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlcyANCisg KiBhbmQgcmVqZWN0aW5nIHBvb3JseSBlbmNvZGVkIHN0cmluZ3MsIGlmIFJGQyAyNzE4IDIuMi41 IG5hbWluZyBpcw0KKyAqIGRlc2lyZWQuDQorICoNCisgKiBmcm9tIFJGQyAyMjc5IFVURi04LCBh IHRyYW5zZm9ybWF0aW9uIGZvcm1hdCBvZiBJU08gMTA2NDYNCisgKg0KKyAqICAgICBVQ1MtNCBy YW5nZSAoaGV4LikgICAgVVRGLTggb2N0ZXQgc2VxdWVuY2UgKGJpbmFyeSkNCisgKiAxOjIgMDAw MCAwMDAwLTAwMDAgMDA3RiAgIDB4eHh4eHh4DQorICogMjoyIDAwMDAgMDA4MC0wMDAwIDA3RkYg ICAxMTBYWFhYeCAxMHh4eHh4eA0KKyAqIDM6MiAwMDAwIDA4MDAtMDAwMCBGRkZGICAgMTExMFhY WFggMTBYeHh4eHggMTB4eHh4eHgNCisgKiA0OjQgMDAwMSAwMDAwLTAwMUYgRkZGRiAgIDExMTEw elhYIDEwWFh4eHh4IDEweHh4eHh4IDEweHh4eHh4DQorICogaW52IDAwMjAgMDAwMC0wM0ZGIEZG RkYgICAxMTExMTBYWCAxMFhYWHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eA0KKyAqIGlu diAwNDAwIDAwMDAtN0ZGRiBGRkZGICAgMTExMTExMFggMTBYWFhYeHggMTB4eHh4eHggMTB4eHh4 eHggMTB4eHh4eHggMTB4eHh4eHgNCisgKg0KKyAqIE9uZSBvZiB0aGUgWCB2YWx1ZXMgbXVzdCBi ZSBvbmUgZm9yIHRoZSBlbmNvZGluZyBsZW5ndGggdG8gYmUgbGVnaXQuDQorICogTmVpdGhlciB0 aGUgeiBiaXQsIG5vciB0aGUgZmluYWwgdHdvIGZvcm1zLCBhcmUgdXNlZCBmb3IgdWNzLTINCisg Kg0KKyAqICAgIlBhaXJzIG9mIFVDUy0yIHZhbHVlcyBiZXR3ZWVuIEQ4MDAgYW5kIERGRkYgKHN1 cnJvZ2F0ZSBwYWlycyBpbiANCisgKiAgIFVuaWNvZGUgcGFybGFuY2UpLCBiZWluZyBhY3R1YWxs eSBVQ1MtNCBjaGFyYWN0ZXJzIHRyYW5zZm9ybWVkIA0KKyAqICAgdGhyb3VnaCBVVEYtMTYsIG5l ZWQgc3BlY2lhbCB0cmVhdG1lbnQ6IHRoZSBVVEYtMTYgdHJhbnNmb3JtYXRpb24gDQorICogICBt dXN0IGJlIHVuZG9uZSwgeWllbGRpbmcgYSBVQ1MtNCBjaGFyYWN0ZXIgdGhhdCBpcyB0aGVuIHRy YW5zZm9ybWVkIA0KKyAqICAgYXMgYWJvdmUuIg0KKyAqDQorICogZnJvbSBSRkMyNzgxIFVURi0x NjogdGhlIGNvbXByZXNzZWQgSVNPIDEwNjQ2IGVuY29kaW5nIGJpdG1hc2sNCisgKg0KKyAqICBV JyA9IFUgLSAweDEwMDAwDQorICogIFUnID0gMDAwMDAwMDAwMDAweXl5eXl5eXl5eXh4eHh4eHh4 eHgNCisgKiAgICAgICAgICAgICAgICAgIFcxID0gMTEwMTEweXl5eXl5eXl5eQ0KKyAqICAgICAg ICAgICAgICAgICAgVzIgPSAxMTAxMTF4eHh4eHh4eHh4DQorICoNCisgKiBhcHJfY29udl91dGY4 X3RvX3VjczIgb3V0IGJ5dGVzOnNpemVvZihpbikgKiAxIDw9IFJlcSA8PSBzaXplb2YoaW4pICog Mg0KKyAqDQorICogYXByX2NvbnZfdWNzMl90b191dGY4IG91dCB3b3JkczpzaXplb2YoaW4pIC8g MiA8PSBSZXEgPD0gc2l6ZW9mKGluKSAqIDMgLyAyDQorICovDQorDQorQVBSX0RFQ0xBUkUoYXBy X3N0YXR1c190KSBhcHJfY29udl91dGY4X3RvX3VjczIoY29uc3QgY2hhciAqaW4sIA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9zaXplX3QgKmlu Ynl0ZXMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXByX3djaGFyX3QgKm91dCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXByX3NpemVfdCAqb3V0d29yZHMpDQorew0KKyAgICBhcHJfaW50NjRfdCBu ZXdjaCwgbWFzazsNCisgICAgYXByX3NpemVfdCBleHBlY3QsIGVhdGluZzsNCisgICAgaW50IGNo Ow0KKyAgICANCisgICAgd2hpbGUgKCppbmJ5dGVzICYmICpvdXR3b3JkcykgDQorICAgIHsNCisg ICAgICAgIGNoID0gKHVuc2lnbmVkIGNoYXIpKCppbisrKTsNCisgICAgICAgIGlmICghKGNoICYg MDIwMCkpIHsNCisgICAgICAgICAgICAvKiBVUy1BU0NJSS03IHBsYWluIHRleHQNCisgICAgICAg ICAgICAgKi8NCisgICAgICAgICAgICAtLSppbmJ5dGVzOw0KKyAgICAgICAgICAgIC0tKm91dHdv cmRzOw0KKyAgICAgICAgICAgICoob3V0KyspID0gY2g7DQorICAgICAgICB9DQorICAgICAgICBl bHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKChjaCAmIDAzMDApICE9IDAzMDApIHsg DQorICAgICAgICAgICAgICAgIC8qIE11bHRpYnl0ZSBDb250aW51YXRpb24gaXMgb3V0IG9mIHBs YWNlDQorICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICByZXR1cm4gQVBSX0VJ TlZBTDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsN CisgICAgICAgICAgICAgICAgLyogTXVsdGlieXRlIFNlcXVlbmNlIExlYWQgQ2hhcmFjdGVyDQor ICAgICAgICAgICAgICAgICAqDQorICAgICAgICAgICAgICAgICAqIENvbXB1dGUgdGhlIGV4cGVj dGVkIGJ5dGVzIHdoaWxlIGFkanVzdGluZw0KKyAgICAgICAgICAgICAgICAgKiBvciBsZWFkIGJ5 dGUgYW5kIGxlYWRpbmcgemVyb3MgbWFzay4NCisgICAgICAgICAgICAgICAgICovDQorICAgICAg ICAgICAgICAgIG1hc2sgPSAwMzQwOw0KKyAgICAgICAgICAgICAgICBleHBlY3QgPSAxOw0KKyAg ICAgICAgICAgICAgICB3aGlsZSAoKGNoICYgbWFzaykgPT0gbWFzaykgew0KKyAgICAgICAgICAg ICAgICAgICAgbWFzayB8PSBtYXNrID4+IDE7DQorICAgICAgICAgICAgICAgICAgICBpZiAoKytl eHBlY3QgPiAzKSAvKiAodHJ1bHkgNSBmb3IgdWNzLTQpICovDQorICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg ICAgICAgbmV3Y2ggPSBjaCAmIH5tYXNrOw0KKyAgICAgICAgICAgICAgICBlYXRpbmcgPSBleHBl Y3QgKyAxOw0KKyAgICAgICAgICAgICAgICBpZiAoKmluYnl0ZXMgPD0gZXhwZWN0KQ0KKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9JTkNPTVBMRVRFOw0KKyAgICAgICAgICAgICAgICAv KiBSZWplY3QgdmFsdWVzIG9mIGV4Y2Vzc2l2ZSBsZWFkaW5nIDAgYml0cw0KKyAgICAgICAgICAg ICAgICAgKiB1dGYtOCBfZGVtYW5kc18gdGhlIHNob3J0ZXN0IHBvc3NpYmxlIGJ5dGUgbGVuZ3Ro DQorICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ID09IDEp IHsNCisgICAgICAgICAgICAgICAgICAgIGlmICghKG5ld2NoICYgMDAzNikpDQorICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQorICAgICAgICAgICAgICAgIH0NCisg ICAgICAgICAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAvKiBSZWplY3QgdmFs dWVzIG9mIGV4Y2Vzc2l2ZSBsZWFkaW5nIDAgYml0cw0KKyAgICAgICAgICAgICAgICAgICAgICov DQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld2NoICYmICEoKHVuc2lnbmVkIGNoYXIpKmlu ICYgMDA3NyAmIChtYXNrIDw8IDEpKSkNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g QVBSX0VJTlZBTDsNCisgICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3QgPT0gMikgew0KKyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlamVjdCB2YWx1ZXMgRDgwMC1ERkZGIHdoZW4gbm90 IHV0ZjE2IGVuY29kZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgKiAobWF5IG5vdCBiZSBh biBhcHByb3ByaWF0ZSByZXN0cmljdGlvbiBmb3IgdWNzLTQpDQorICAgICAgICAgICAgICAgICAg ICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld2NoID09IDAwMTUgJiYg KCh1bnNpZ25lZCBjaGFyKSppbiAmIDAwNDApKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gQVBSX0VJTlZBTDsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg ICAgICAgICAgIGVsc2UgaWYgKGV4cGVjdCA9PSAzKSB7DQorICAgICAgICAgICAgICAgICAgICAg ICAgLyogU2hvcnQgY2lyY3VpdCB2YWx1ZXMgPiAxMTAwMDANCisgICAgICAgICAgICAgICAgICAg ICAgICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Y2ggPiA0KQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVBSX0VJTlZBTDsNCisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAobmV3Y2ggPT0gNCAmJiAoKHVuc2lnbmVkIGNoYXIpKmluICYgMDA2MCkp DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBUFJfRUlOVkFMOw0KKyAgICAg ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIC8q IFdoZXJlIHRoZSBib29sZWFuIChleHBlY3QgPiAyKSBpcyB0cnVlLCB3ZSB3aWxsIG5lZWQNCisg ICAgICAgICAgICAgICAgICogYW4gZXh0cmEgd29yZCBmb3IgdGhlIG91dHB1dC4NCisgICAgICAg ICAgICAgICAgICovDQorICAgICAgICAgICAgICAgIGlmICgqb3V0d29yZHMgPCAoYXByX3NpemVf dCkoZXhwZWN0ID4gMikgKyAxKSANCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBidWZm ZXIgZnVsbCAqLw0KKyAgICAgICAgICAgICAgICB3aGlsZSAoZXhwZWN0LS0pDQorICAgICAgICAg ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIC8qIE11bHRpYnl0ZSBDb250aW51YXRpb24g bXVzdCBiZSBsZWdhbCAqLw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCgoY2ggPSAodW5zaWdu ZWQgY2hhcikqKGluKyspKSAmIDAzMDApICE9IDAyMDApDQorICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIEFQUl9FSU5WQUw7DQorICAgICAgICAgICAgICAgICAgICBuZXdjaCA8PD0gNjsN CisgICAgICAgICAgICAgICAgICAgIG5ld2NoIHw9IChjaCAmIDAwNzcpOw0KKyAgICAgICAgICAg ICAgICB9DQorICAgICAgICAgICAgICAgICppbmJ5dGVzIC09IGVhdGluZzsNCisgICAgICAgICAg ICAgICAgLyogbmV3Y2ggaXMgbm93IGEgdHJ1ZSB1Y3MtNCBjaGFyYWN0ZXINCisgICAgICAgICAg ICAgICAgICoNCisgICAgICAgICAgICAgICAgICogbm93IHdlIG5lZWQgdG8gZm9sZCB0byB1Y3Mt Mg0KKyAgICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICAgaWYgKG5ld2NoIDwgMHgx MDAwMCkgDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIC0tKm91dHdv cmRzOw0KKyAgICAgICAgICAgICAgICAgICAgKihvdXQrKykgPSAoYXByX3djaGFyX3QpIG5ld2No Ow0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UgDQorICAgICAgICAg ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICpvdXR3b3JkcyAtPSAyOw0KKyAgICAgICAg ICAgICAgICAgICAgbmV3Y2ggLT0gMHgxMDAwMDsNCisgICAgICAgICAgICAgICAgICAgICoob3V0 KyspID0gKGFwcl93Y2hhcl90KSAoMHhEODAwIHwgKG5ld2NoID4+IDEwKSk7DQorICAgICAgICAg ICAgICAgICAgICAqKG91dCsrKSA9IChhcHJfd2NoYXJfdCkgKDB4REMwMCB8IChuZXdjaCAmIDB4 MDNGRikpOyAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIH0NCisgICAgICAg ICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgLyogQnVmZmVyIGZ1bGwgJ2Vycm9ycycg YXJlbid0IGVycm9ycywgdGhlIGNsaWVudCBtdXN0IGluc3BlY3QgYm90aA0KKyAgICAgKiB0aGUg aW5ieXRlcyBhbmQgb3V0d29yZHMgdmFsdWVzDQorICAgICAqLw0KKyAgICByZXR1cm4gQVBSX1NV Q0NFU1M7DQorfQ0KKw0KK0FQUl9ERUNMQVJFKGFwcl9zdGF0dXNfdCkgYXByX2NvbnZfdWNzMl90 b191dGY4KGNvbnN0IGFwcl93Y2hhcl90ICppbiwgDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXByX3NpemVfdCAqaW53b3JkcywNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpvdXQsIA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9zaXplX3QgKm91 dGJ5dGVzKQ0KK3sNCisgICAgYXByX2ludDY0X3QgbmV3Y2gsIHJlcXVpcmU7DQorICAgIGFwcl9z aXplX3QgbmVlZDsNCisgICAgY2hhciAqaW52b3V0Ow0KKyAgICBpbnQgY2g7DQorICAgIA0KKyAg ICB3aGlsZSAoKmlud29yZHMgJiYgKm91dGJ5dGVzKSANCisgICAgew0KKyAgICAgICAgY2ggPSAo dW5zaWduZWQgc2hvcnQpKCppbisrKTsNCisgICAgICAgIGlmIChjaCA8IDB4ODApDQorICAgICAg ICB7DQorICAgICAgICAgICAgLS0qaW53b3JkczsNCisgICAgICAgICAgICAtLSpvdXRieXRlczsN CisgICAgICAgICAgICAqKG91dCsrKSA9ICh1bnNpZ25lZCBjaGFyKSBjaDsNCisgICAgICAgIH0N CisgICAgICAgIGVsc2UgDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKChjaCAmIDB4RkMw MCkgPT0gMHhEQzAwKSB7DQorICAgICAgICAgICAgICAgIC8qIEludmFsaWQgTGVhZGluZyB1Y3Mt MiBNdWx0aXdvcmQgQ29udGludWF0aW9uIENoYXJhY3Rlcg0KKyAgICAgICAgICAgICAgICAgKi8N CisgICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQorICAgICAgICAgICAgfQ0KKyAg ICAgICAgICAgIGlmICgoY2ggJiAweEZDMDApID09IDB4RDgwMCkgew0KKyAgICAgICAgICAgICAg ICAvKiBMZWFkaW5nIHVjcy0yIE11bHRpd29yZCBDaGFyYWN0ZXINCisgICAgICAgICAgICAgICAg ICovDQorICAgICAgICAgICAgICAgIGlmICgqaW53b3JkcyA8IDIpIHsNCisgICAgICAgICAgICAg ICAgICAgIC8qIE1pc3NpbmcgdWNzLTIgTXVsdGl3b3JkIENvbnRpbnVhdGlvbiBDaGFyYWN0ZXIN CisgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFQ Ul9JTkNPTVBMRVRFOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGlmICgo KHVuc2lnbmVkIHNob3J0KSgqaW4pICYgMHhGQzAwKSAhPSAweERDMDApIHsNCisgICAgICAgICAg ICAgICAgICAgIC8qIEludmFsaWQgdWNzLTIgTXVsdGl3b3JkIENvbnRpbnVhdGlvbiBDaGFyYWN0 ZXINCisgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFQUl9FSU5WQUw7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgbmV3Y2gg PSAoY2ggJiAweDAzRkYpIDw8IDEwIHwgKCh1bnNpZ25lZCBzaG9ydCkoKmluKyspICYgMHgwM0ZG KTsNCisgICAgICAgICAgICAgICAgbmV3Y2ggKz0gMHgxMDAwMDsNCisgICAgICAgICAgICB9DQor ICAgICAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgICAgIC8qIHVjcy0yIFNpbmdsZSBXb3Jk IENoYXJhY3Rlcg0KKyAgICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICAgbmV3Y2gg PSBjaDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBhYnNv bHV0ZSBtaW5pbXVtIHV0Zi04IGJ5dGVzIHJlcXVpcmVkDQorICAgICAgICAgICAgICovDQorICAg ICAgICAgICAgcmVxdWlyZSA9IG5ld2NoID4+IDExOw0KKyAgICAgICAgICAgIG5lZWQgPSAxOw0K KyAgICAgICAgICAgIHdoaWxlIChyZXF1aXJlKQ0KKyAgICAgICAgICAgICAgICByZXF1aXJlID4+ PSA1LCArK25lZWQ7DQorICAgICAgICAgICAgaWYgKG5lZWQgPj0gKm91dGJ5dGVzKQ0KKyAgICAg ICAgICAgICAgICBicmVhazsgLyogSW5zdWZmaWNpZW50IGJ1ZmZlciAqLw0KKyAgICAgICAgICAg ICppbndvcmRzIC09IChuZWVkID4gMikgKyAxOw0KKyAgICAgICAgICAgICpvdXRieXRlcyAtPSBu ZWVkICsgMTsNCisgICAgICAgICAgICAvKiBDb21wdXRlIHRoZSB1dGYtOCBjaGFyYWN0ZXJzIGlu IGxhc3QgdG8gZmlyc3Qgb3JkZXIsDQorICAgICAgICAgICAgICogY2FsY3VsYXRpbmcgdGhlIGxl YWQgY2hhcmFjdGVyIGxlbmd0aCBiaXRzIGFsb25nIHRoZSB3YXkuDQorICAgICAgICAgICAgICov DQorICAgICAgICAgICAgY2ggPSAwMjAwOw0KKyAgICAgICAgICAgIG91dCArPSBuZWVkICsgMTsN CisgICAgICAgICAgICBpbnZvdXQgPSBvdXQ7DQorICAgICAgICAgICAgd2hpbGUgKG5lZWQtLSkg ew0KKyAgICAgICAgICAgICAgICBjaCB8PSBjaCA+PiAxOw0KKyAgICAgICAgICAgICAgICAqKC0t aW52b3V0KSA9ICh1bnNpZ25lZCBjaGFyKSgwMjAwIHwgKG5ld2NoICYgMDA3NykpOw0KKyAgICAg ICAgICAgICAgICBuZXdjaCA+Pj0gNjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgLyog Q29tcHV0ZSB0aGUgbGVhZCB1dGYtOCBjaGFyYWN0ZXIgYW5kIG1vdmUgdGhlIGRlc3Qgb2Zmc2V0 DQorICAgICAgICAgICAgICovDQorICAgICAgICAgICAgKigtLWludm91dCkgPSAodW5zaWduZWQg Y2hhcikoY2ggfCBuZXdjaCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgLyogQnVmZmVyIGZ1 bGwgJ2Vycm9ycycgYXJlbid0IGVycm9ycywgdGhlIGNsaWVudCBtdXN0IGluc3BlY3QgYm90aA0K KyAgICAgKiB0aGUgaW53b3JkcyBhbmQgb3V0Ynl0ZXMgdmFsdWVzDQorICAgICAqLw0KKyAgICBy ZXR1cm4gQVBSX1NVQ0NFU1M7ICAgIA0KK30NCi0tLSBpbmNsdWRlL2FyY2gvd2luMzIvYXByX2Fy Y2hfdXRmOC5oCTIwMDQtMTEtMjQgMjM6NTE6NTEuMDAwMDAwMDAwICswMTAwDQorKysgL2Rldi9u dWxsCTIwMDUtMDYtMTAgMTU6MTg6MDguMDAwMDAwMDAwICswMjAwDQpAQCAtMSw1NSArMCwwIEBA DQotLyogQ29weXJpZ2h0IDIwMDAtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24N Ci0gKg0KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg KHRoZSAiTGljZW5zZSIpOw0KLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg b2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj ZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1 bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAq IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw cmVzcyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0 aGUgTGljZW5zZS4NCi0gKi8NCi0NCi0jaWZuZGVmIFVURjhfSA0KLSNkZWZpbmUgVVRGOF9IDQot DQotI2luY2x1ZGUgImFwci5oIg0KLSNpbmNsdWRlICJhcHJfbGliLmgiDQotI2luY2x1ZGUgImFw cl9lcnJuby5oIg0KLQ0KLS8qIElmIHdlIGV2ZXIgc3VwcG9ydCBhbnl0aGluZyBtb3JlIGV4Y2l0 aW5nIHRoYW4gY2hhci4uLiB0aGlzIGNvdWxkIG1vdmUuDQotICovDQotdHlwZWRlZiBhcHJfdWlu dDE2X3QgYXByX3djaGFyX3Q7DQotDQotLyoqDQotICogQW4gQVBSIGludGVybmFsIGZ1bmN0aW9u IGZvciBmYXN0IHV0Zi04IG9jdGV0LWVuY29kZWQgVW5pY29kZSBjb252ZXJzaW9uDQotICogdG8g dGhlIHVjcy0yIHdpZGUgVW5pY29kZSBmb3JtYXQuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9y IGZpbGVuYW1lIGFuZCANCi0gKiBvdGhlciByZXNvdXJjZSBjb252ZXJzaW9ucyBmb3IgcGxhdGZv cm1zIHByb3ZpZGluZyBuYXRpdmUgVW5pY29kZSBzdXBwb3J0Lg0KLSAqDQotICogQHRpcCBPbmx5 IHRoZSBlcnJvcnMgQVBSX0VJTlZBTCBhbmQgQVBSX0lOQ09NUExFVEUgbWF5IG9jY3VyLCB0aGUg Zm9ybWVyDQotICogd2hlbiB0aGUgY2hhcmFjdGVyIGNvZGUgaXMgaW52YWxpZCAoaW4gb3Igb3V0 IG9mIGNvbnRleHQpIGFuZCB0aGUgbGF0ZXINCi0gKiB3aGVuIG1vcmUgY2hhcmFjdGVycyB3ZXJl IGV4cGVjdGVkLCBidXQgaW5zdWZmaWNpZW50IGNoYXJhY3RlcnMgcmVtYWluLg0KLSAqLw0KLUFQ Ul9ERUNMQVJFKGFwcl9zdGF0dXNfdCkgYXByX2NvbnZfdXRmOF90b191Y3MyKGNvbnN0IGNoYXIg KmluLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh cHJfc2l6ZV90ICppbmJ5dGVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFwcl93Y2hhcl90ICpvdXQsIA0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9zaXplX3QgKm91dHdvcmRzKTsNCi0NCi0vKioN Ci0gKiBBbiBBUFIgaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGZhc3QgdWNzLTIgd2lkZSBVbmljb2Rl IGZvcm1hdCBjb252ZXJzaW9uIHRvIA0KLSAqIHRoZSB1dGYtOCBvY3RldC1lbmNvZGVkIFVuaWNv ZGUuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGZpbGVuYW1lIGFuZCANCi0gKiBvdGhlciBy ZXNvdXJjZSBjb252ZXJzaW9ucyBmb3IgcGxhdGZvcm1zIHByb3ZpZGluZyBuYXRpdmUgVW5pY29k ZSBzdXBwb3J0Lg0KLSAqDQotICogQHRpcCBPbmx5IHRoZSBlcnJvcnMgQVBSX0VJTlZBTCBhbmQg QVBSX0lOQ09NUExFVEUgbWF5IG9jY3VyLCB0aGUgZm9ybWVyDQotICogd2hlbiB0aGUgY2hhcmFj dGVyIGNvZGUgaXMgaW52YWxpZCAoaW4gb3Igb3V0IG9mIGNvbnRleHQpIGFuZCB0aGUgbGF0ZXIN Ci0gKiB3aGVuIG1vcmUgd29yZHMgd2VyZSBleHBlY3RlZCwgYnV0IGluc3VmZmljaWVudCB3b3Jk cyByZW1haW4uDQotICovDQotQVBSX0RFQ0xBUkUoYXByX3N0YXR1c190KSBhcHJfY29udl91Y3My X3RvX3V0ZjgoY29uc3QgYXByX3djaGFyX3QgKmluLCANCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfc2l6ZV90ICppbndvcmRzLA0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm91dCwgDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3NpemVfdCAq b3V0Ynl0ZXMpOw0KLQ0KLSNlbmRpZiAvKiBkZWYgVVRGOF9IICovDQotLS0gbWlzYy93aW4zMi91 dGY4LmMJMjAwNC0xMS0yNCAyMzo1MTo1MS4wMDAwMDAwMDAgKzAxMDANCisrKyAvZGV2L251bGwJ MjAwNS0wNi0xMCAxNToxODowOC4wMDAwMDAwMDAgKzAyMDANCkBAIC0xLDI1MyArMCwwIEBADQot LyogQ29weXJpZ2h0IDIwMDAtMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24NCi0g Kg0KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo ZSAiTGljZW5zZSIpOw0KLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg dGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z ZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRl ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAqIFdJ VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz cyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1 YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUg TGljZW5zZS4NCi0gKi8NCi0NCi0jaW5jbHVkZSAiYXByLmgiDQotI2luY2x1ZGUgImFwcl9wcml2 YXRlLmgiDQotI2luY2x1ZGUgImFwcl9lcnJuby5oIg0KLSNpbmNsdWRlICJhcHJfYXJjaF91dGY4 LmgiDQotDQotLyogSW1wbGVtZW50IHRoZSBkZXNpZ24gcHJpbmNpcGFsIHNwZWNpZmllZCBieSBS RkMgMjcxOCAyLjIuNSANCi0gKiBHdWlkZWxpbmVzIGZvciBuZXcgVVJMIFNjaGVtZXMgLSB3aXRo aW4gdGhlIEFQUi4NCi0gKg0KLSAqIFNpbmNlIG1hbnkgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IHVu aWNvZGUsIGFuZCBVQ1MyIGlzIHRoZSBtb3N0DQotICogZWZmaWNpZW50IHN0b3JhZ2UgdXNlZCBi eSB0aG9zZSBhcmNoaWN0dXJlcywgdGhlc2UgZnVuY3Rpb25zDQotICogZXhpc3QgdG8gdmFsaWRh dGUgYSBVQ1Mgc3RyaW5nLiAgSXQgaXMgdXAgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0NCi0gKiB0 byBkZXRlcm1pbmUgdGhlIHZhbGlkaXRpdHkgb2YgdGhlIHN0cmluZyBpbiB0aGUgY29udGV4dCBv ZiBpdCdzDQotICogbmF0aXZlIGxhbmd1YWdlIHN1cHBvcnQuICBGaWxlIHN5c3RlbXMgdGhhdCBz dXBwb3J0IGZpbGVuYW1lIA0KLSAqIGNoYXJhY3RlcnMgb2YgMHg4MC0weGZmIGJ1dCBoYXZlIG5v IHN1cHBvcnQgb2YgVW5pY29kZSB3aWxsIGZpbmQgDQotICogdGhpcyBmdW5jdGlvbiB1c2VmdWwg b25seSBmb3IgdmFsaWRhdGluZyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlcyANCi0gKiBhbmQgcmVq ZWN0aW5nIHBvb3JseSBlbmNvZGVkIHN0cmluZ3MsIGlmIFJGQyAyNzE4IDIuMi41IG5hbWluZyBp cw0KLSAqIGRlc2lyZWQuDQotICoNCi0gKiBmcm9tIFJGQyAyMjc5IFVURi04LCBhIHRyYW5zZm9y bWF0aW9uIGZvcm1hdCBvZiBJU08gMTA2NDYNCi0gKg0KLSAqICAgICBVQ1MtNCByYW5nZSAoaGV4 LikgICAgVVRGLTggb2N0ZXQgc2VxdWVuY2UgKGJpbmFyeSkNCi0gKiAxOjIgMDAwMCAwMDAwLTAw MDAgMDA3RiAgIDB4eHh4eHh4DQotICogMjoyIDAwMDAgMDA4MC0wMDAwIDA3RkYgICAxMTBYWFhY eCAxMHh4eHh4eA0KLSAqIDM6MiAwMDAwIDA4MDAtMDAwMCBGRkZGICAgMTExMFhYWFggMTBYeHh4 eHggMTB4eHh4eHgNCi0gKiA0OjQgMDAwMSAwMDAwLTAwMUYgRkZGRiAgIDExMTEwelhYIDEwWFh4 eHh4IDEweHh4eHh4IDEweHh4eHh4DQotICogaW52IDAwMjAgMDAwMC0wM0ZGIEZGRkYgICAxMTEx MTBYWCAxMFhYWHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eA0KLSAqIGludiAwNDAwIDAw MDAtN0ZGRiBGRkZGICAgMTExMTExMFggMTBYWFhYeHggMTB4eHh4eHggMTB4eHh4eHggMTB4eHh4 eHggMTB4eHh4eHgNCi0gKg0KLSAqIE9uZSBvZiB0aGUgWCB2YWx1ZXMgbXVzdCBiZSBvbmUgZm9y IHRoZSBlbmNvZGluZyBsZW5ndGggdG8gYmUgbGVnaXQuDQotICogTmVpdGhlciB0aGUgeiBiaXQs IG5vciB0aGUgZmluYWwgdHdvIGZvcm1zLCBhcmUgdXNlZCBmb3IgdWNzLTINCi0gKg0KLSAqICAg IlBhaXJzIG9mIFVDUy0yIHZhbHVlcyBiZXR3ZWVuIEQ4MDAgYW5kIERGRkYgKHN1cnJvZ2F0ZSBw YWlycyBpbiANCi0gKiAgIFVuaWNvZGUgcGFybGFuY2UpLCBiZWluZyBhY3R1YWxseSBVQ1MtNCBj aGFyYWN0ZXJzIHRyYW5zZm9ybWVkIA0KLSAqICAgdGhyb3VnaCBVVEYtMTYsIG5lZWQgc3BlY2lh bCB0cmVhdG1lbnQ6IHRoZSBVVEYtMTYgdHJhbnNmb3JtYXRpb24gDQotICogICBtdXN0IGJlIHVu ZG9uZSwgeWllbGRpbmcgYSBVQ1MtNCBjaGFyYWN0ZXIgdGhhdCBpcyB0aGVuIHRyYW5zZm9ybWVk IA0KLSAqICAgYXMgYWJvdmUuIg0KLSAqDQotICogZnJvbSBSRkMyNzgxIFVURi0xNjogdGhlIGNv bXByZXNzZWQgSVNPIDEwNjQ2IGVuY29kaW5nIGJpdG1hc2sNCi0gKg0KLSAqICBVJyA9IFUgLSAw eDEwMDAwDQotICogIFUnID0gMDAwMDAwMDAwMDAweXl5eXl5eXl5eXh4eHh4eHh4eHgNCi0gKiAg ICAgICAgICAgICAgICAgIFcxID0gMTEwMTEweXl5eXl5eXl5eQ0KLSAqICAgICAgICAgICAgICAg ICAgVzIgPSAxMTAxMTF4eHh4eHh4eHh4DQotICoNCi0gKiBhcHJfY29udl91dGY4X3RvX3VjczIg b3V0IGJ5dGVzOnNpemVvZihpbikgKiAxIDw9IFJlcSA8PSBzaXplb2YoaW4pICogMg0KLSAqDQot ICogYXByX2NvbnZfdWNzMl90b191dGY4IG91dCB3b3JkczpzaXplb2YoaW4pIC8gMiA8PSBSZXEg PD0gc2l6ZW9mKGluKSAqIDMgLyAyDQotICovDQotDQotQVBSX0RFQ0xBUkUoYXByX3N0YXR1c190 KSBhcHJfY29udl91dGY4X3RvX3VjczIoY29uc3QgY2hhciAqaW4sIA0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9zaXplX3QgKmluYnl0ZXMsDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3djaGFy X3QgKm91dCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXByX3NpemVfdCAqb3V0d29yZHMpDQotew0KLSAgICBhcHJfaW50NjRfdCBuZXdjaCwgbWFz azsNCi0gICAgYXByX3NpemVfdCBleHBlY3QsIGVhdGluZzsNCi0gICAgaW50IGNoOw0KLSAgICAN Ci0gICAgd2hpbGUgKCppbmJ5dGVzICYmICpvdXR3b3JkcykgDQotICAgIHsNCi0gICAgICAgIGNo ID0gKHVuc2lnbmVkIGNoYXIpKCppbisrKTsNCi0gICAgICAgIGlmICghKGNoICYgMDIwMCkpIHsN Ci0gICAgICAgICAgICAvKiBVUy1BU0NJSS03IHBsYWluIHRleHQNCi0gICAgICAgICAgICAgKi8N Ci0gICAgICAgICAgICAtLSppbmJ5dGVzOw0KLSAgICAgICAgICAgIC0tKm91dHdvcmRzOw0KLSAg ICAgICAgICAgICoob3V0KyspID0gY2g7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAg ICAgICB7DQotICAgICAgICAgICAgaWYgKChjaCAmIDAzMDApICE9IDAzMDApIHsgDQotICAgICAg ICAgICAgICAgIC8qIE11bHRpYnl0ZSBDb250aW51YXRpb24gaXMgb3V0IG9mIHBsYWNlDQotICAg ICAgICAgICAgICAgICAqLw0KLSAgICAgICAgICAgICAgICByZXR1cm4gQVBSX0VJTlZBTDsNCi0g ICAgICAgICAgICB9DQotICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAg ICAgICAgICAgLyogTXVsdGlieXRlIFNlcXVlbmNlIExlYWQgQ2hhcmFjdGVyDQotICAgICAgICAg ICAgICAgICAqDQotICAgICAgICAgICAgICAgICAqIENvbXB1dGUgdGhlIGV4cGVjdGVkIGJ5dGVz IHdoaWxlIGFkanVzdGluZw0KLSAgICAgICAgICAgICAgICAgKiBvciBsZWFkIGJ5dGUgYW5kIGxl YWRpbmcgemVyb3MgbWFzay4NCi0gICAgICAgICAgICAgICAgICovDQotICAgICAgICAgICAgICAg IG1hc2sgPSAwMzQwOw0KLSAgICAgICAgICAgICAgICBleHBlY3QgPSAxOw0KLSAgICAgICAgICAg ICAgICB3aGlsZSAoKGNoICYgbWFzaykgPT0gbWFzaykgew0KLSAgICAgICAgICAgICAgICAgICAg bWFzayB8PSBtYXNrID4+IDE7DQotICAgICAgICAgICAgICAgICAgICBpZiAoKytleHBlY3QgPiAz KSAvKiAodHJ1bHkgNSBmb3IgdWNzLTQpICovDQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEFQUl9FSU5WQUw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbmV3 Y2ggPSBjaCAmIH5tYXNrOw0KLSAgICAgICAgICAgICAgICBlYXRpbmcgPSBleHBlY3QgKyAxOw0K LSAgICAgICAgICAgICAgICBpZiAoKmluYnl0ZXMgPD0gZXhwZWN0KQ0KLSAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIEFQUl9JTkNPTVBMRVRFOw0KLSAgICAgICAgICAgICAgICAvKiBSZWplY3Qg dmFsdWVzIG9mIGV4Y2Vzc2l2ZSBsZWFkaW5nIDAgYml0cw0KLSAgICAgICAgICAgICAgICAgKiB1 dGYtOCBfZGVtYW5kc18gdGhlIHNob3J0ZXN0IHBvc3NpYmxlIGJ5dGUgbGVuZ3RoDQotICAgICAg ICAgICAgICAgICAqLw0KLSAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ID09IDEpIHsNCi0gICAg ICAgICAgICAgICAgICAgIGlmICghKG5ld2NoICYgMDAzNikpDQotICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAg ICAgICAgZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAvKiBSZWplY3QgdmFsdWVzIG9mIGV4 Y2Vzc2l2ZSBsZWFkaW5nIDAgYml0cw0KLSAgICAgICAgICAgICAgICAgICAgICovDQotICAgICAg ICAgICAgICAgICAgICBpZiAoIW5ld2NoICYmICEoKHVuc2lnbmVkIGNoYXIpKmluICYgMDA3NyAm IChtYXNrIDw8IDEpKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVBSX0VJTlZB TDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3QgPT0gMikgew0KLSAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlamVjdCB2YWx1ZXMgRDgwMC1ERkZGIHdoZW4gbm90IHV0ZjE2IGVu Y29kZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiAobWF5IG5vdCBiZSBhbiBhcHByb3By aWF0ZSByZXN0cmljdGlvbiBmb3IgdWNzLTQpDQotICAgICAgICAgICAgICAgICAgICAgICAgICov DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld2NoID09IDAwMTUgJiYgKCh1bnNpZ25l ZCBjaGFyKSppbiAmIDAwNDApKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g QVBSX0VJTlZBTDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAg IGVsc2UgaWYgKGV4cGVjdCA9PSAzKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hv cnQgY2lyY3VpdCB2YWx1ZXMgPiAxMTAwMDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8N Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Y2ggPiA0KQ0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gQVBSX0VJTlZBTDsNCi0gICAgICAgICAgICAgICAgICAgICAg ICBpZiAobmV3Y2ggPT0gNCAmJiAoKHVuc2lnbmVkIGNoYXIpKmluICYgMDA2MCkpDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBUFJfRUlOVkFMOw0KLSAgICAgICAgICAgICAg ICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIC8qIFdoZXJlIHRo ZSBib29sZWFuIChleHBlY3QgPiAyKSBpcyB0cnVlLCB3ZSB3aWxsIG5lZWQNCi0gICAgICAgICAg ICAgICAgICogYW4gZXh0cmEgd29yZCBmb3IgdGhlIG91dHB1dC4NCi0gICAgICAgICAgICAgICAg ICovDQotICAgICAgICAgICAgICAgIGlmICgqb3V0d29yZHMgPCAoYXByX3NpemVfdCkoZXhwZWN0 ID4gMikgKyAxKSANCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBidWZmZXIgZnVsbCAq Lw0KLSAgICAgICAgICAgICAgICB3aGlsZSAoZXhwZWN0LS0pDQotICAgICAgICAgICAgICAgIHsN Ci0gICAgICAgICAgICAgICAgICAgIC8qIE11bHRpYnl0ZSBDb250aW51YXRpb24gbXVzdCBiZSBs ZWdhbCAqLw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCgoY2ggPSAodW5zaWduZWQgY2hhcikq KGluKyspKSAmIDAzMDApICE9IDAyMDApDQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFQUl9FSU5WQUw7DQotICAgICAgICAgICAgICAgICAgICBuZXdjaCA8PD0gNjsNCi0gICAgICAg ICAgICAgICAgICAgIG5ld2NoIHw9IChjaCAmIDAwNzcpOw0KLSAgICAgICAgICAgICAgICB9DQot ICAgICAgICAgICAgICAgICppbmJ5dGVzIC09IGVhdGluZzsNCi0gICAgICAgICAgICAgICAgLyog bmV3Y2ggaXMgbm93IGEgdHJ1ZSB1Y3MtNCBjaGFyYWN0ZXINCi0gICAgICAgICAgICAgICAgICoN Ci0gICAgICAgICAgICAgICAgICogbm93IHdlIG5lZWQgdG8gZm9sZCB0byB1Y3MtMg0KLSAgICAg ICAgICAgICAgICAgKi8NCi0gICAgICAgICAgICAgICAgaWYgKG5ld2NoIDwgMHgxMDAwMCkgDQot ICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIC0tKm91dHdvcmRzOw0KLSAg ICAgICAgICAgICAgICAgICAgKihvdXQrKykgPSAoYXByX3djaGFyX3QpIG5ld2NoOw0KLSAgICAg ICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGVsc2UgDQotICAgICAgICAgICAgICAgIHsN Ci0gICAgICAgICAgICAgICAgICAgICpvdXR3b3JkcyAtPSAyOw0KLSAgICAgICAgICAgICAgICAg ICAgbmV3Y2ggLT0gMHgxMDAwMDsNCi0gICAgICAgICAgICAgICAgICAgICoob3V0KyspID0gKGFw cl93Y2hhcl90KSAoMHhEODAwIHwgKG5ld2NoID4+IDEwKSk7DQotICAgICAgICAgICAgICAgICAg ICAqKG91dCsrKSA9IChhcHJfd2NoYXJfdCkgKDB4REMwMCB8IChuZXdjaCAmIDB4MDNGRikpOyAg ICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQot ICAgICAgICB9DQotICAgIH0NCi0gICAgLyogQnVmZmVyIGZ1bGwgJ2Vycm9ycycgYXJlbid0IGVy cm9ycywgdGhlIGNsaWVudCBtdXN0IGluc3BlY3QgYm90aA0KLSAgICAgKiB0aGUgaW5ieXRlcyBh bmQgb3V0d29yZHMgdmFsdWVzDQotICAgICAqLw0KLSAgICByZXR1cm4gQVBSX1NVQ0NFU1M7DQot fQ0KLQ0KLUFQUl9ERUNMQVJFKGFwcl9zdGF0dXNfdCkgYXByX2NvbnZfdWNzMl90b191dGY4KGNv bnN0IGFwcl93Y2hhcl90ICppbiwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXByX3NpemVfdCAqaW53b3JkcywNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpvdXQsIA0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9zaXplX3QgKm91dGJ5dGVzKQ0K LXsNCi0gICAgYXByX2ludDY0X3QgbmV3Y2gsIHJlcXVpcmU7DQotICAgIGFwcl9zaXplX3QgbmVl ZDsNCi0gICAgY2hhciAqaW52b3V0Ow0KLSAgICBpbnQgY2g7DQotICAgIA0KLSAgICB3aGlsZSAo Kmlud29yZHMgJiYgKm91dGJ5dGVzKSANCi0gICAgew0KLSAgICAgICAgY2ggPSAodW5zaWduZWQg c2hvcnQpKCppbisrKTsNCi0gICAgICAgIGlmIChjaCA8IDB4ODApDQotICAgICAgICB7DQotICAg ICAgICAgICAgLS0qaW53b3JkczsNCi0gICAgICAgICAgICAtLSpvdXRieXRlczsNCi0gICAgICAg ICAgICAqKG91dCsrKSA9ICh1bnNpZ25lZCBjaGFyKSBjaDsNCi0gICAgICAgIH0NCi0gICAgICAg IGVsc2UgDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKChjaCAmIDB4RkMwMCkgPT0gMHhE QzAwKSB7DQotICAgICAgICAgICAgICAgIC8qIEludmFsaWQgTGVhZGluZyB1Y3MtMiBNdWx0aXdv cmQgQ29udGludWF0aW9uIENoYXJhY3Rlcg0KLSAgICAgICAgICAgICAgICAgKi8NCi0gICAgICAg ICAgICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg IGlmICgoY2ggJiAweEZDMDApID09IDB4RDgwMCkgew0KLSAgICAgICAgICAgICAgICAvKiBMZWFk aW5nIHVjcy0yIE11bHRpd29yZCBDaGFyYWN0ZXINCi0gICAgICAgICAgICAgICAgICovDQotICAg ICAgICAgICAgICAgIGlmICgqaW53b3JkcyA8IDIpIHsNCi0gICAgICAgICAgICAgICAgICAgIC8q IE1pc3NpbmcgdWNzLTIgTXVsdGl3b3JkIENvbnRpbnVhdGlvbiBDaGFyYWN0ZXINCi0gICAgICAg ICAgICAgICAgICAgICAqLw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9JTkNPTVBM RVRFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICgoKHVuc2lnbmVk IHNob3J0KSgqaW4pICYgMHhGQzAwKSAhPSAweERDMDApIHsNCi0gICAgICAgICAgICAgICAgICAg IC8qIEludmFsaWQgdWNzLTIgTXVsdGl3b3JkIENvbnRpbnVhdGlvbiBDaGFyYWN0ZXINCi0gICAg ICAgICAgICAgICAgICAgICAqLw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9FSU5W QUw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbmV3Y2ggPSAoY2ggJiAw eDAzRkYpIDw8IDEwIHwgKCh1bnNpZ25lZCBzaG9ydCkoKmluKyspICYgMHgwM0ZGKTsNCi0gICAg ICAgICAgICAgICAgbmV3Y2ggKz0gMHgxMDAwMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAg ICAgZWxzZSB7DQotICAgICAgICAgICAgICAgIC8qIHVjcy0yIFNpbmdsZSBXb3JkIENoYXJhY3Rl cg0KLSAgICAgICAgICAgICAgICAgKi8NCi0gICAgICAgICAgICAgICAgbmV3Y2ggPSBjaDsNCi0g ICAgICAgICAgICB9DQotICAgICAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBhYnNvbHV0ZSBtaW5p bXVtIHV0Zi04IGJ5dGVzIHJlcXVpcmVkDQotICAgICAgICAgICAgICovDQotICAgICAgICAgICAg cmVxdWlyZSA9IG5ld2NoID4+IDExOw0KLSAgICAgICAgICAgIG5lZWQgPSAxOw0KLSAgICAgICAg ICAgIHdoaWxlIChyZXF1aXJlKQ0KLSAgICAgICAgICAgICAgICByZXF1aXJlID4+PSA1LCArK25l ZWQ7DQotICAgICAgICAgICAgaWYgKG5lZWQgPj0gKm91dGJ5dGVzKQ0KLSAgICAgICAgICAgICAg ICBicmVhazsgLyogSW5zdWZmaWNpZW50IGJ1ZmZlciAqLw0KLSAgICAgICAgICAgICppbndvcmRz IC09IChuZWVkID4gMikgKyAxOw0KLSAgICAgICAgICAgICpvdXRieXRlcyAtPSBuZWVkICsgMTsN Ci0gICAgICAgICAgICAvKiBDb21wdXRlIHRoZSB1dGYtOCBjaGFyYWN0ZXJzIGluIGxhc3QgdG8g Zmlyc3Qgb3JkZXIsDQotICAgICAgICAgICAgICogY2FsY3VsYXRpbmcgdGhlIGxlYWQgY2hhcmFj dGVyIGxlbmd0aCBiaXRzIGFsb25nIHRoZSB3YXkuDQotICAgICAgICAgICAgICovDQotICAgICAg ICAgICAgY2ggPSAwMjAwOw0KLSAgICAgICAgICAgIG91dCArPSBuZWVkICsgMTsNCi0gICAgICAg ICAgICBpbnZvdXQgPSBvdXQ7DQotICAgICAgICAgICAgd2hpbGUgKG5lZWQtLSkgew0KLSAgICAg ICAgICAgICAgICBjaCB8PSBjaCA+PiAxOw0KLSAgICAgICAgICAgICAgICAqKC0taW52b3V0KSA9 ICh1bnNpZ25lZCBjaGFyKSgwMjAwIHwgKG5ld2NoICYgMDA3NykpOw0KLSAgICAgICAgICAgICAg ICBuZXdjaCA+Pj0gNjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgLyogQ29tcHV0ZSB0 aGUgbGVhZCB1dGYtOCBjaGFyYWN0ZXIgYW5kIG1vdmUgdGhlIGRlc3Qgb2Zmc2V0DQotICAgICAg ICAgICAgICovDQotICAgICAgICAgICAgKigtLWludm91dCkgPSAodW5zaWduZWQgY2hhcikoY2gg fCBuZXdjaCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgLyogQnVmZmVyIGZ1bGwgJ2Vycm9y cycgYXJlbid0IGVycm9ycywgdGhlIGNsaWVudCBtdXN0IGluc3BlY3QgYm90aA0KLSAgICAgKiB0 aGUgaW53b3JkcyBhbmQgb3V0Ynl0ZXMgdmFsdWVzDQotICAgICAqLw0KLSAgICByZXR1cm4gQVBS X1NVQ0NFU1M7ICAgIA0KLX0NCi0tLSAuLi8uLi90bXAvYXByLTEuMS4xL3Rlc3QvaW50ZXJuYWwv TWFrZWZpbGUuaW4JMjAwNS0wNy0yOCAxNTowMDoxNi41MTM3NjA2OTYgKzAyMDANCisrKyB0ZXN0 L2ludGVybmFsL01ha2VmaWxlLmluCTIwMDUtMDctMjggMTU6MDg6MzkuMjkxMzI2ODg4ICswMjAw DQpAQCAtMTQsNyArMTQsNyBAQA0KIA0KIExPQ0FMX0xJQlM9Li4vLi4vbGliQEFQUl9MSUJOQU1F QC5sYQ0KIA0KLUNMRUFOX1RBUkdFVFMgPSB0ZXN0cmVnZXhARVhFRVhUQA0KK0NMRUFOX1RBUkdF VFMgPSAkKE5PTlBPUlRBQkxFKQ0KIA0KIElOQ0RJUj0uLi8uLi9pbmNsdWRlDQogSU5DTFVERVM9 LUkkKElOQ0RJUikNCi== --=-rDLo8ZLNEOBVOLj6KBAj Content-Disposition: attachment; filename=dirty.patch Content-Type: text/x-patch; name=dirty.patch; charset=UTF-8 Content-Transfer-Encoding: base64 LS0tIC9kZXYvbnVsbAkyMDA1LTA2LTEwIDE1OjE4OjA4LjAwMDAwMDAwMCArMDIwMA0KKysrIGlu Y2x1ZGUvYXJjaC91bml4L2Fwcl9hcmNoX3V0ZjguaAkyMDA1LTA3LTI4IDE1OjAxOjU1LjU3MDcw MTc1MiArMDIwMA0KQEAgLTAsMCArMSw1NSBAQA0KKy8qIENvcHlyaWdodCAyMDAwLTIwMDQgVGhl IEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQorICoNCisgKiBMaWNlbnNlZCB1bmRlciB0aGUg QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCisgKiB5b3UgbWF5 IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu DQorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAg ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBV bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs IHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0 ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgKiBTZWUgdGhl IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg YW5kDQorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorI2lmbmRl ZiBVVEY4X0gNCisjZGVmaW5lIFVURjhfSA0KKw0KKyNpbmNsdWRlICJhcHIuaCINCisjaW5jbHVk ZSAiYXByX2xpYi5oIg0KKyNpbmNsdWRlICJhcHJfZXJybm8uaCINCisNCisvKiBJZiB3ZSBldmVy IHN1cHBvcnQgYW55dGhpbmcgbW9yZSBleGNpdGluZyB0aGFuIGNoYXIuLi4gdGhpcyBjb3VsZCBt b3ZlLg0KKyAqLw0KK3R5cGVkZWYgYXByX3VpbnQxNl90IGFwcl93Y2hhcl90Ow0KKw0KKy8qKg0K KyAqIEFuIEFQUiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgZmFzdCB1dGYtOCBvY3RldC1lbmNvZGVk IFVuaWNvZGUgY29udmVyc2lvbg0KKyAqIHRvIHRoZSB1Y3MtMiB3aWRlIFVuaWNvZGUgZm9ybWF0 LiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBmaWxlbmFtZSBhbmQgDQorICogb3RoZXIgcmVz b3VyY2UgY29udmVyc2lvbnMgZm9yIHBsYXRmb3JtcyBwcm92aWRpbmcgbmF0aXZlIFVuaWNvZGUg c3VwcG9ydC4NCisgKg0KKyAqIEB0aXAgT25seSB0aGUgZXJyb3JzIEFQUl9FSU5WQUwgYW5kIEFQ Ul9JTkNPTVBMRVRFIG1heSBvY2N1ciwgdGhlIGZvcm1lcg0KKyAqIHdoZW4gdGhlIGNoYXJhY3Rl ciBjb2RlIGlzIGludmFsaWQgKGluIG9yIG91dCBvZiBjb250ZXh0KSBhbmQgdGhlIGxhdGVyDQor ICogd2hlbiBtb3JlIGNoYXJhY3RlcnMgd2VyZSBleHBlY3RlZCwgYnV0IGluc3VmZmljaWVudCBj aGFyYWN0ZXJzIHJlbWFpbi4NCisgKi8NCitBUFJfREVDTEFSRShhcHJfc3RhdHVzX3QpIGFwcl9j b252X3V0ZjhfdG9fdWNzMihjb25zdCBjaGFyICppbiwgDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3NpemVfdCAqaW5ieXRlcywNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfd2NoYXJfdCAqb3V0 LCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf c2l6ZV90ICpvdXR3b3Jkcyk7DQorDQorLyoqDQorICogQW4gQVBSIGludGVybmFsIGZ1bmN0aW9u IGZvciBmYXN0IHVjcy0yIHdpZGUgVW5pY29kZSBmb3JtYXQgY29udmVyc2lvbiB0byANCisgKiB0 aGUgdXRmLTggb2N0ZXQtZW5jb2RlZCBVbmljb2RlLiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZv ciBmaWxlbmFtZSBhbmQgDQorICogb3RoZXIgcmVzb3VyY2UgY29udmVyc2lvbnMgZm9yIHBsYXRm b3JtcyBwcm92aWRpbmcgbmF0aXZlIFVuaWNvZGUgc3VwcG9ydC4NCisgKg0KKyAqIEB0aXAgT25s eSB0aGUgZXJyb3JzIEFQUl9FSU5WQUwgYW5kIEFQUl9JTkNPTVBMRVRFIG1heSBvY2N1ciwgdGhl IGZvcm1lcg0KKyAqIHdoZW4gdGhlIGNoYXJhY3RlciBjb2RlIGlzIGludmFsaWQgKGluIG9yIG91 dCBvZiBjb250ZXh0KSBhbmQgdGhlIGxhdGVyDQorICogd2hlbiBtb3JlIHdvcmRzIHdlcmUgZXhw ZWN0ZWQsIGJ1dCBpbnN1ZmZpY2llbnQgd29yZHMgcmVtYWluLg0KKyAqLw0KK0FQUl9ERUNMQVJF KGFwcl9zdGF0dXNfdCkgYXByX2NvbnZfdWNzMl90b191dGY4KGNvbnN0IGFwcl93Y2hhcl90ICpp biwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy X3NpemVfdCAqaW53b3JkcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpvdXQsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFwcl9zaXplX3QgKm91dGJ5dGVzKTsNCisNCisjZW5kaWYgLyogZGVm IFVURjhfSCAqLw0KLS0tIC9kZXYvbnVsbAkyMDA1LTA2LTEwIDE1OjE4OjA4LjAwMDAwMDAwMCAr MDIwMA0KKysrIG1pc2MvdW5peC91dGY4LmMJMjAwNS0wNy0yOCAxNTowMTozMS4yNzYzOTUwNDgg KzAyMDANCkBAIC0wLDAgKzEsMjUzIEBADQorLyogQ29weXJpZ2h0IDIwMDAtMjAwNCBUaGUgQXBh Y2hlIFNvZnR3YXJlIEZvdW5kYXRpb24NCisgKg0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFj aGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqIHlvdSBtYXkgbm90 IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisg KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgICBo dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVz cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m dHdhcmUNCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv biBhbiAiQVMgSVMiIEJBU0lTLA0KKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqIFNlZSB0aGUgTGlj ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQN CisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCisNCisjaW5jbHVkZSAi YXByLmgiDQorI2luY2x1ZGUgImFwcl9wcml2YXRlLmgiDQorI2luY2x1ZGUgImFwcl9lcnJuby5o Ig0KKyNpbmNsdWRlICJhcHJfYXJjaF91dGY4LmgiDQorDQorLyogSW1wbGVtZW50IHRoZSBkZXNp Z24gcHJpbmNpcGFsIHNwZWNpZmllZCBieSBSRkMgMjcxOCAyLjIuNSANCisgKiBHdWlkZWxpbmVz IGZvciBuZXcgVVJMIFNjaGVtZXMgLSB3aXRoaW4gdGhlIEFQUi4NCisgKg0KKyAqIFNpbmNlIG1h bnkgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IHVuaWNvZGUsIGFuZCBVQ1MyIGlzIHRoZSBtb3N0DQor ICogZWZmaWNpZW50IHN0b3JhZ2UgdXNlZCBieSB0aG9zZSBhcmNoaWN0dXJlcywgdGhlc2UgZnVu Y3Rpb25zDQorICogZXhpc3QgdG8gdmFsaWRhdGUgYSBVQ1Mgc3RyaW5nLiAgSXQgaXMgdXAgdG8g dGhlIG9wZXJhdGluZyBzeXN0ZW0NCisgKiB0byBkZXRlcm1pbmUgdGhlIHZhbGlkaXRpdHkgb2Yg dGhlIHN0cmluZyBpbiB0aGUgY29udGV4dCBvZiBpdCdzDQorICogbmF0aXZlIGxhbmd1YWdlIHN1 cHBvcnQuICBGaWxlIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGZpbGVuYW1lIA0KKyAqIGNoYXJhY3Rl cnMgb2YgMHg4MC0weGZmIGJ1dCBoYXZlIG5vIHN1cHBvcnQgb2YgVW5pY29kZSB3aWxsIGZpbmQg DQorICogdGhpcyBmdW5jdGlvbiB1c2VmdWwgb25seSBmb3IgdmFsaWRhdGluZyB0aGUgY2hhcmFj dGVyIHNlcXVlbmNlcyANCisgKiBhbmQgcmVqZWN0aW5nIHBvb3JseSBlbmNvZGVkIHN0cmluZ3Ms IGlmIFJGQyAyNzE4IDIuMi41IG5hbWluZyBpcw0KKyAqIGRlc2lyZWQuDQorICoNCisgKiBmcm9t IFJGQyAyMjc5IFVURi04LCBhIHRyYW5zZm9ybWF0aW9uIGZvcm1hdCBvZiBJU08gMTA2NDYNCisg Kg0KKyAqICAgICBVQ1MtNCByYW5nZSAoaGV4LikgICAgVVRGLTggb2N0ZXQgc2VxdWVuY2UgKGJp bmFyeSkNCisgKiAxOjIgMDAwMCAwMDAwLTAwMDAgMDA3RiAgIDB4eHh4eHh4DQorICogMjoyIDAw MDAgMDA4MC0wMDAwIDA3RkYgICAxMTBYWFhYeCAxMHh4eHh4eA0KKyAqIDM6MiAwMDAwIDA4MDAt MDAwMCBGRkZGICAgMTExMFhYWFggMTBYeHh4eHggMTB4eHh4eHgNCisgKiA0OjQgMDAwMSAwMDAw LTAwMUYgRkZGRiAgIDExMTEwelhYIDEwWFh4eHh4IDEweHh4eHh4IDEweHh4eHh4DQorICogaW52 IDAwMjAgMDAwMC0wM0ZGIEZGRkYgICAxMTExMTBYWCAxMFhYWHh4eCAxMHh4eHh4eCAxMHh4eHh4 eCAxMHh4eHh4eA0KKyAqIGludiAwNDAwIDAwMDAtN0ZGRiBGRkZGICAgMTExMTExMFggMTBYWFhY eHggMTB4eHh4eHggMTB4eHh4eHggMTB4eHh4eHggMTB4eHh4eHgNCisgKg0KKyAqIE9uZSBvZiB0 aGUgWCB2YWx1ZXMgbXVzdCBiZSBvbmUgZm9yIHRoZSBlbmNvZGluZyBsZW5ndGggdG8gYmUgbGVn aXQuDQorICogTmVpdGhlciB0aGUgeiBiaXQsIG5vciB0aGUgZmluYWwgdHdvIGZvcm1zLCBhcmUg dXNlZCBmb3IgdWNzLTINCisgKg0KKyAqICAgIlBhaXJzIG9mIFVDUy0yIHZhbHVlcyBiZXR3ZWVu IEQ4MDAgYW5kIERGRkYgKHN1cnJvZ2F0ZSBwYWlycyBpbiANCisgKiAgIFVuaWNvZGUgcGFybGFu Y2UpLCBiZWluZyBhY3R1YWxseSBVQ1MtNCBjaGFyYWN0ZXJzIHRyYW5zZm9ybWVkIA0KKyAqICAg dGhyb3VnaCBVVEYtMTYsIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQ6IHRoZSBVVEYtMTYgdHJhbnNm b3JtYXRpb24gDQorICogICBtdXN0IGJlIHVuZG9uZSwgeWllbGRpbmcgYSBVQ1MtNCBjaGFyYWN0 ZXIgdGhhdCBpcyB0aGVuIHRyYW5zZm9ybWVkIA0KKyAqICAgYXMgYWJvdmUuIg0KKyAqDQorICog ZnJvbSBSRkMyNzgxIFVURi0xNjogdGhlIGNvbXByZXNzZWQgSVNPIDEwNjQ2IGVuY29kaW5nIGJp dG1hc2sNCisgKg0KKyAqICBVJyA9IFUgLSAweDEwMDAwDQorICogIFUnID0gMDAwMDAwMDAwMDAw eXl5eXl5eXl5eXh4eHh4eHh4eHgNCisgKiAgICAgICAgICAgICAgICAgIFcxID0gMTEwMTEweXl5 eXl5eXl5eQ0KKyAqICAgICAgICAgICAgICAgICAgVzIgPSAxMTAxMTF4eHh4eHh4eHh4DQorICoN CisgKiBhcHJfY29udl91dGY4X3RvX3VjczIgb3V0IGJ5dGVzOnNpemVvZihpbikgKiAxIDw9IFJl cSA8PSBzaXplb2YoaW4pICogMg0KKyAqDQorICogYXByX2NvbnZfdWNzMl90b191dGY4IG91dCB3 b3JkczpzaXplb2YoaW4pIC8gMiA8PSBSZXEgPD0gc2l6ZW9mKGluKSAqIDMgLyAyDQorICovDQor DQorQVBSX0RFQ0xBUkUoYXByX3N0YXR1c190KSBhcHJfY29udl91dGY4X3RvX3VjczIoY29uc3Qg Y2hhciAqaW4sIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9zaXplX3QgKmluYnl0ZXMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXByX3djaGFyX3QgKm91dCwgDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3NpemVfdCAqb3V0d29yZHMpDQorew0K KyAgICBhcHJfaW50NjRfdCBuZXdjaCwgbWFzazsNCisgICAgYXByX3NpemVfdCBleHBlY3QsIGVh dGluZzsNCisgICAgaW50IGNoOw0KKyAgICANCisgICAgd2hpbGUgKCppbmJ5dGVzICYmICpvdXR3 b3JkcykgDQorICAgIHsNCisgICAgICAgIGNoID0gKHVuc2lnbmVkIGNoYXIpKCppbisrKTsNCisg ICAgICAgIGlmICghKGNoICYgMDIwMCkpIHsNCisgICAgICAgICAgICAvKiBVUy1BU0NJSS03IHBs YWluIHRleHQNCisgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAtLSppbmJ5dGVzOw0KKyAg ICAgICAgICAgIC0tKm91dHdvcmRzOw0KKyAgICAgICAgICAgICoob3V0KyspID0gY2g7DQorICAg ICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKChjaCAm IDAzMDApICE9IDAzMDApIHsgDQorICAgICAgICAgICAgICAgIC8qIE11bHRpYnl0ZSBDb250aW51 YXRpb24gaXMgb3V0IG9mIHBsYWNlDQorICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAg ICAgICByZXR1cm4gQVBSX0VJTlZBTDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxz ZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgLyogTXVsdGlieXRlIFNlcXVlbmNl IExlYWQgQ2hhcmFjdGVyDQorICAgICAgICAgICAgICAgICAqDQorICAgICAgICAgICAgICAgICAq IENvbXB1dGUgdGhlIGV4cGVjdGVkIGJ5dGVzIHdoaWxlIGFkanVzdGluZw0KKyAgICAgICAgICAg ICAgICAgKiBvciBsZWFkIGJ5dGUgYW5kIGxlYWRpbmcgemVyb3MgbWFzay4NCisgICAgICAgICAg ICAgICAgICovDQorICAgICAgICAgICAgICAgIG1hc2sgPSAwMzQwOw0KKyAgICAgICAgICAgICAg ICBleHBlY3QgPSAxOw0KKyAgICAgICAgICAgICAgICB3aGlsZSAoKGNoICYgbWFzaykgPT0gbWFz aykgew0KKyAgICAgICAgICAgICAgICAgICAgbWFzayB8PSBtYXNrID4+IDE7DQorICAgICAgICAg ICAgICAgICAgICBpZiAoKytleHBlY3QgPiAzKSAvKiAodHJ1bHkgNSBmb3IgdWNzLTQpICovDQor ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQorICAgICAgICAgICAg ICAgIH0NCisgICAgICAgICAgICAgICAgbmV3Y2ggPSBjaCAmIH5tYXNrOw0KKyAgICAgICAgICAg ICAgICBlYXRpbmcgPSBleHBlY3QgKyAxOw0KKyAgICAgICAgICAgICAgICBpZiAoKmluYnl0ZXMg PD0gZXhwZWN0KQ0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9JTkNPTVBMRVRFOw0K KyAgICAgICAgICAgICAgICAvKiBSZWplY3QgdmFsdWVzIG9mIGV4Y2Vzc2l2ZSBsZWFkaW5nIDAg Yml0cw0KKyAgICAgICAgICAgICAgICAgKiB1dGYtOCBfZGVtYW5kc18gdGhlIHNob3J0ZXN0IHBv c3NpYmxlIGJ5dGUgbGVuZ3RoDQorICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAg ICBpZiAoZXhwZWN0ID09IDEpIHsNCisgICAgICAgICAgICAgICAgICAgIGlmICghKG5ld2NoICYg MDAzNikpDQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQorICAg ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgICAg ICAgICAvKiBSZWplY3QgdmFsdWVzIG9mIGV4Y2Vzc2l2ZSBsZWFkaW5nIDAgYml0cw0KKyAgICAg ICAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld2NoICYmICEo KHVuc2lnbmVkIGNoYXIpKmluICYgMDA3NyAmIChtYXNrIDw8IDEpKSkNCisgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gQVBSX0VJTlZBTDsNCisgICAgICAgICAgICAgICAgICAgIGlmIChl eHBlY3QgPT0gMikgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlamVjdCB2YWx1ZXMg RDgwMC1ERkZGIHdoZW4gbm90IHV0ZjE2IGVuY29kZWQNCisgICAgICAgICAgICAgICAgICAgICAg ICAgKiAobWF5IG5vdCBiZSBhbiBhcHByb3ByaWF0ZSByZXN0cmljdGlvbiBmb3IgdWNzLTQpDQor ICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg KG5ld2NoID09IDAwMTUgJiYgKCh1bnNpZ25lZCBjaGFyKSppbiAmIDAwNDApKQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVBSX0VJTlZBTDsNCisgICAgICAgICAgICAgICAg ICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4cGVjdCA9PSAzKSB7DQorICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2hvcnQgY2lyY3VpdCB2YWx1ZXMgPiAxMTAwMDANCisg ICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo bmV3Y2ggPiA0KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVBSX0VJTlZB TDsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Y2ggPT0gNCAmJiAoKHVuc2lnbmVk IGNoYXIpKmluICYgMDA2MCkpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBB UFJfRUlOVkFMOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQor ICAgICAgICAgICAgICAgIC8qIFdoZXJlIHRoZSBib29sZWFuIChleHBlY3QgPiAyKSBpcyB0cnVl LCB3ZSB3aWxsIG5lZWQNCisgICAgICAgICAgICAgICAgICogYW4gZXh0cmEgd29yZCBmb3IgdGhl IG91dHB1dC4NCisgICAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgIGlmICgqb3V0 d29yZHMgPCAoYXByX3NpemVfdCkoZXhwZWN0ID4gMikgKyAxKSANCisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOyAvKiBidWZmZXIgZnVsbCAqLw0KKyAgICAgICAgICAgICAgICB3aGlsZSAoZXhw ZWN0LS0pDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIC8qIE11bHRp Ynl0ZSBDb250aW51YXRpb24gbXVzdCBiZSBsZWdhbCAqLw0KKyAgICAgICAgICAgICAgICAgICAg aWYgKCgoY2ggPSAodW5zaWduZWQgY2hhcikqKGluKyspKSAmIDAzMDApICE9IDAyMDApDQorICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQorICAgICAgICAgICAgICAg ICAgICBuZXdjaCA8PD0gNjsNCisgICAgICAgICAgICAgICAgICAgIG5ld2NoIHw9IChjaCAmIDAw NzcpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICppbmJ5dGVzIC09IGVh dGluZzsNCisgICAgICAgICAgICAgICAgLyogbmV3Y2ggaXMgbm93IGEgdHJ1ZSB1Y3MtNCBjaGFy YWN0ZXINCisgICAgICAgICAgICAgICAgICoNCisgICAgICAgICAgICAgICAgICogbm93IHdlIG5l ZWQgdG8gZm9sZCB0byB1Y3MtMg0KKyAgICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAg ICAgaWYgKG5ld2NoIDwgMHgxMDAwMCkgDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg ICAgICAgICAgIC0tKm91dHdvcmRzOw0KKyAgICAgICAgICAgICAgICAgICAgKihvdXQrKykgPSAo YXByX3djaGFyX3QpIG5ld2NoOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg IGVsc2UgDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICpvdXR3b3Jk cyAtPSAyOw0KKyAgICAgICAgICAgICAgICAgICAgbmV3Y2ggLT0gMHgxMDAwMDsNCisgICAgICAg ICAgICAgICAgICAgICoob3V0KyspID0gKGFwcl93Y2hhcl90KSAoMHhEODAwIHwgKG5ld2NoID4+ IDEwKSk7DQorICAgICAgICAgICAgICAgICAgICAqKG91dCsrKSA9IChhcHJfd2NoYXJfdCkgKDB4 REMwMCB8IChuZXdjaCAmIDB4MDNGRikpOyAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAg ICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgLyogQnVm ZmVyIGZ1bGwgJ2Vycm9ycycgYXJlbid0IGVycm9ycywgdGhlIGNsaWVudCBtdXN0IGluc3BlY3Qg Ym90aA0KKyAgICAgKiB0aGUgaW5ieXRlcyBhbmQgb3V0d29yZHMgdmFsdWVzDQorICAgICAqLw0K KyAgICByZXR1cm4gQVBSX1NVQ0NFU1M7DQorfQ0KKw0KK0FQUl9ERUNMQVJFKGFwcl9zdGF0dXNf dCkgYXByX2NvbnZfdWNzMl90b191dGY4KGNvbnN0IGFwcl93Y2hhcl90ICppbiwgDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3NpemVfdCAqaW53 b3JkcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICpvdXQsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9zaXplX3QgKm91dGJ5dGVzKQ0KK3sNCisgICAgYXByX2ludDY0X3QgbmV3Y2gsIHJl cXVpcmU7DQorICAgIGFwcl9zaXplX3QgbmVlZDsNCisgICAgY2hhciAqaW52b3V0Ow0KKyAgICBp bnQgY2g7DQorICAgIA0KKyAgICB3aGlsZSAoKmlud29yZHMgJiYgKm91dGJ5dGVzKSANCisgICAg ew0KKyAgICAgICAgY2ggPSAodW5zaWduZWQgc2hvcnQpKCppbisrKTsNCisgICAgICAgIGlmIChj aCA8IDB4ODApDQorICAgICAgICB7DQorICAgICAgICAgICAgLS0qaW53b3JkczsNCisgICAgICAg ICAgICAtLSpvdXRieXRlczsNCisgICAgICAgICAgICAqKG91dCsrKSA9ICh1bnNpZ25lZCBjaGFy KSBjaDsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgDQorICAgICAgICB7DQorICAgICAgICAg ICAgaWYgKChjaCAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7DQorICAgICAgICAgICAgICAgIC8qIElu dmFsaWQgTGVhZGluZyB1Y3MtMiBNdWx0aXdvcmQgQ29udGludWF0aW9uIENoYXJhY3Rlcg0KKyAg ICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQor ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmICgoY2ggJiAweEZDMDApID09IDB4RDgwMCkg ew0KKyAgICAgICAgICAgICAgICAvKiBMZWFkaW5nIHVjcy0yIE11bHRpd29yZCBDaGFyYWN0ZXIN CisgICAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgIGlmICgqaW53b3JkcyA8IDIp IHsNCisgICAgICAgICAgICAgICAgICAgIC8qIE1pc3NpbmcgdWNzLTIgTXVsdGl3b3JkIENvbnRp bnVhdGlvbiBDaGFyYWN0ZXINCisgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIEFQUl9JTkNPTVBMRVRFOw0KKyAgICAgICAgICAgICAgICB9DQorICAg ICAgICAgICAgICAgIGlmICgoKHVuc2lnbmVkIHNob3J0KSgqaW4pICYgMHhGQzAwKSAhPSAweERD MDApIHsNCisgICAgICAgICAgICAgICAgICAgIC8qIEludmFsaWQgdWNzLTIgTXVsdGl3b3JkIENv bnRpbnVhdGlvbiBDaGFyYWN0ZXINCisgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIEFQUl9FSU5WQUw7DQorICAgICAgICAgICAgICAgIH0NCisgICAg ICAgICAgICAgICAgbmV3Y2ggPSAoY2ggJiAweDAzRkYpIDw8IDEwIHwgKCh1bnNpZ25lZCBzaG9y dCkoKmluKyspICYgMHgwM0ZGKTsNCisgICAgICAgICAgICAgICAgbmV3Y2ggKz0gMHgxMDAwMDsN CisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgICAgIC8q IHVjcy0yIFNpbmdsZSBXb3JkIENoYXJhY3Rlcg0KKyAgICAgICAgICAgICAgICAgKi8NCisgICAg ICAgICAgICAgICAgbmV3Y2ggPSBjaDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgLyog RGV0ZXJtaW5lIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIHV0Zi04IGJ5dGVzIHJlcXVpcmVkDQorICAg ICAgICAgICAgICovDQorICAgICAgICAgICAgcmVxdWlyZSA9IG5ld2NoID4+IDExOw0KKyAgICAg ICAgICAgIG5lZWQgPSAxOw0KKyAgICAgICAgICAgIHdoaWxlIChyZXF1aXJlKQ0KKyAgICAgICAg ICAgICAgICByZXF1aXJlID4+PSA1LCArK25lZWQ7DQorICAgICAgICAgICAgaWYgKG5lZWQgPj0g Km91dGJ5dGVzKQ0KKyAgICAgICAgICAgICAgICBicmVhazsgLyogSW5zdWZmaWNpZW50IGJ1ZmZl ciAqLw0KKyAgICAgICAgICAgICppbndvcmRzIC09IChuZWVkID4gMikgKyAxOw0KKyAgICAgICAg ICAgICpvdXRieXRlcyAtPSBuZWVkICsgMTsNCisgICAgICAgICAgICAvKiBDb21wdXRlIHRoZSB1 dGYtOCBjaGFyYWN0ZXJzIGluIGxhc3QgdG8gZmlyc3Qgb3JkZXIsDQorICAgICAgICAgICAgICog Y2FsY3VsYXRpbmcgdGhlIGxlYWQgY2hhcmFjdGVyIGxlbmd0aCBiaXRzIGFsb25nIHRoZSB3YXku DQorICAgICAgICAgICAgICovDQorICAgICAgICAgICAgY2ggPSAwMjAwOw0KKyAgICAgICAgICAg IG91dCArPSBuZWVkICsgMTsNCisgICAgICAgICAgICBpbnZvdXQgPSBvdXQ7DQorICAgICAgICAg ICAgd2hpbGUgKG5lZWQtLSkgew0KKyAgICAgICAgICAgICAgICBjaCB8PSBjaCA+PiAxOw0KKyAg ICAgICAgICAgICAgICAqKC0taW52b3V0KSA9ICh1bnNpZ25lZCBjaGFyKSgwMjAwIHwgKG5ld2No ICYgMDA3NykpOw0KKyAgICAgICAgICAgICAgICBuZXdjaCA+Pj0gNjsNCisgICAgICAgICAgICB9 DQorICAgICAgICAgICAgLyogQ29tcHV0ZSB0aGUgbGVhZCB1dGYtOCBjaGFyYWN0ZXIgYW5kIG1v dmUgdGhlIGRlc3Qgb2Zmc2V0DQorICAgICAgICAgICAgICovDQorICAgICAgICAgICAgKigtLWlu dm91dCkgPSAodW5zaWduZWQgY2hhcikoY2ggfCBuZXdjaCk7DQorICAgICAgICB9DQorICAgIH0N CisgICAgLyogQnVmZmVyIGZ1bGwgJ2Vycm9ycycgYXJlbid0IGVycm9ycywgdGhlIGNsaWVudCBt dXN0IGluc3BlY3QgYm90aA0KKyAgICAgKiB0aGUgaW53b3JkcyBhbmQgb3V0Ynl0ZXMgdmFsdWVz DQorICAgICAqLw0KKyAgICByZXR1cm4gQVBSX1NVQ0NFU1M7ICAgIA0KK30NCi0tLSAuLi8uLi90 bXAvYXByLTEuMS4xL3Rlc3QvaW50ZXJuYWwvTWFrZWZpbGUuaW4JMjAwNC0xMS0yNCAyMzo1MTo1 MS4wMDAwMDAwMDAgKzAxMDANCisrKyB0ZXN0L2ludGVybmFsL01ha2VmaWxlLmluCTIwMDUtMDct MjggMTU6MjY6MjYuODYwMDMxNzc2ICswMjAwDQpAQCAtMSw4ICsxLDEwIEBADQogc3JjZGlyID0g QHNyY2RpckANCiBWUEFUSCA9IEBzcmNkaXJADQordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQA0K IA0KIE5PTlBPUlRBQkxFID0gXA0KLQl0ZXN0cmVnZXhARVhFRVhUQA0KKwl0ZXN0cmVnZXhARVhF RVhUQCBcDQorCXRlc3R1Y3NARVhFRVhUQA0KIA0KIFBST0dSQU1TID0gXA0KIA0KQEAgLTEzLDEw ICsxNSwxMyBAQA0KIA0KIExPQ0FMX0xJQlM9Li4vLi4vbGliQEFQUl9MSUJOQU1FQC5sYQ0KIA0K LUNMRUFOX1RBUkdFVFMgPSB0ZXN0cmVnZXhARVhFRVhUQA0KK0NMRUFOX1RBUkdFVFMgPSAkKE5P TlBPUlRBQkxFKQ0KIA0KIElOQ0RJUj0uLi8uLi9pbmNsdWRlDQotSU5DTFVERVM9LUkkKElOQ0RJ UikNCisNCitPU0RJUj0kKHRvcF9zcmNkaXIpL2luY2x1ZGUvYXJjaC9AT1NESVJADQorREVGT1NE SVI9JChJTkNESVIpL2FyY2gvQERFRkFVTFRfT1NESVJADQorSU5DTFVERVM9LUkkKElOQ0RJUikg LUkkKE9TRElSKQ0KIA0KIENGTEFHUz0kKE1ZX0NGTEFHUykNCiANCkBAIC0zNCw0ICszOSw3IEBA DQogdGVzdHJlZ2V4QEVYRUVYVEA6IHRlc3RyZWdleC5sbyAkKExPQ0FMX0xJQlMpDQogCSQoTElO SykgdGVzdHJlZ2V4LmxvICQoTE9DQUxfTElCUykgJChBTExfTElCUykNCiANCit0ZXN0dWNzQEVY RUVYVEA6IHRlc3R1Y3MubG8gJChMT0NBTF9MSUJTKQ0KKwkkKExJTkspIHRlc3R1Y3MubG8gJChM T0NBTF9MSUJTKSAkKEFMTF9MSUJTKQ0KKw0KICMgRE8gTk9UIFJFTU9WRQ0K --=-rDLo8ZLNEOBVOLj6KBAj--