Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZXOw6-0003NY-6u for pgsql-hackers@arkaria.postgresql.org; Thu, 03 Sep 2015 07:27:54 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZXOw5-00086I-EW for pgsql-hackers@arkaria.postgresql.org; Thu, 03 Sep 2015 07:27:53 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZXOua-0006Yu-Uy for pgsql-hackers@postgresql.org; Thu, 03 Sep 2015 07:26:21 +0000 Received: from boipeva.ensmp.fr ([194.214.158.136]) by makus.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1ZXOuW-0002Jn-9J for pgsql-hackers@postgresql.org; Thu, 03 Sep 2015 07:26:19 +0000 Received: from cri.ensmp.fr (nat-any-rnt.cri.ensmp.fr [195.83.117.252]) (authenticated bits=0) by boipeva.ensmp.fr (8.15.2/8.15.1/JMMC-22/Oct/2013) with ESMTPSA id t837Q1aQ023859 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 3 Sep 2015 09:26:05 +0200 Date: Thu, 3 Sep 2015 09:26:01 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@sto To: Andres Freund cc: Robert Haas , Josh Berkus , "pgsql-hackers@postgresql.org" Subject: Re: pgbench stats per script & other stuff In-Reply-To: <20150902172617.GJ5286@alap3.anarazel.de> Message-ID: References: <55AFD8C6.8010507@agliodbs.com> <20150902172617.GJ5286@alap3.anarazel.de> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-1235310649-1441265165=:16877" X-Miltered: at boipeva.ensmp.fr with ID 55E7F609.000 by Joe's j-chkmail (http : // j-chkmail dot ensmp dot fr)! X-j-chkmail-Auth: USER-ID fabien.coelho X-j-chkmail-Enveloppe: 55E7F609.000 from nat-any-rnt.cri.ensmp.fr/nat-any-rnt.cri.ensmp.fr/195.83.117.252/cri.ensmp.fr/ X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-1235310649-1441265165=:16877 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Hello Anders, This v9 : - add "-b list" to show the list of builtins - remove the explicit --per-scripts-stats option, which is instead automatically set when several scripts are run or with per-command latencies (-r) - count scripts from 1 instead of 0 in the output I've left out: - removing -N/-S upward compatibility shorthands but I will not cry if they are removed - requiring percents instead of integer weights, because it is too constrained - your "array" remark as I did not understood it Thanks to the restructuring and sharing of stats code, the patch does not change the loc count, although a few features are added. -- Fabien. --8323329-1235310649-1441265165=:16877 Content-Type: TEXT/x-diff; name=pgbench-script-stats-9.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-9.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IDI1MTdhM2Eu LjNlZGQ2NWEgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjEsNiArMjYxLDI1IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICAgIGJlbmNobWFya2luZyBhcmd1bWVudHM6DQogDQog ICAgIDx2YXJpYWJsZWxpc3Q+DQorICAgICA8dmFybGlzdGVudHJ5Pg0KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LWI8Lz4gPHJlcGxhY2VhYmxlPnNjcmlwdG5h bWVbQHdlaWdodF08Lz48L3Rlcm0+DQorICAgICAgPHRlcm0+PG9wdGlvbj4t LWJ1aWx0aW48Lz4gPHJlcGxhY2VhYmxlPnNjcmlwdG5hbWVbQHdlaWdodF08 Lz48L3Rlcm0+DQorICAgICAgPGxpc3RpdGVtPg0KKyAgICAgICA8cGFyYT4N CisgICAgICAgIEFkZCB0aGUgc3BlY2lmaWVkIGJ1aWx0aW4gc2NyaXB0IHRv IHRoZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQorICAgICAgICBBbiBv cHRpb25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0ZXJhbD5APC8+IGFs bG93cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9iYWJpbGl0eSBvZiBk cmF3aW5nIHRoZSB0ZXN0Lg0KKyAgICAgICAgQXZhaWxhYmxlIGJ1aWx0aW4g c2NyaXB0cyBhcmU6IDxsaXRlcmFsPnRwY2ItbGlrZTwvPiwNCisgICAgICAg IDxsaXRlcmFsPnNpbXBsZS11cGRhdGU8Lz4gYW5kIDxsaXRlcmFsPnNlbGVj dC1vbmx5PC8+Lg0KKyAgICAgICAgVGhlIHByb3ZpZGVkIDxyZXBsZWFjYWJs ZT5zY3JpcHRuYW1lPC8+IG5lZWRzIG9ubHkgdG8gYmUgYSBwcmVmaXgNCisg ICAgICAgIG9mIHRoZSBidWlsdGluIG5hbWUsIGhlbmNlIDxsaXRlcmFsPnNp bXA8Lz4gd291bGQgYmUgZW5vdWdoIHRvIHNlbGVjdA0KKyAgICAgICAgPGxp dGVyYWw+c2ltcGxlLXVwZGF0ZTwvPi4NCisgICAgICAgIFdpdGggc3BlY2lh bCBuYW1lIDxsaXRlcmFsPmxpc3Q8Lz4sIHNob3cgdGhlIGxpc3Qgb2YgYnVp bHRpbiBzY3JpcHRzDQorICAgICAgICBhbmQgZXhpdCBpbW1lZGlhdGVseS4N CisgICAgICAgPC9wYXJhPg0KKyAgICAgIDwvbGlzdGl0ZW0+DQorICAgICA8 L3Zhcmxpc3RlbnRyeT4NCisNCiANCiAgICAgIDx2YXJsaXN0ZW50cnk+DQog ICAgICAgPHRlcm0+PG9wdGlvbj4tYzwvb3B0aW9uPiA8cmVwbGFjZWFibGU+ Y2xpZW50czwvPjwvdGVybT4NCkBAIC0zMDcsMTQgKzMyNiwxNSBAQCBwZ2Jl bmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRp b25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgPC92YXJsaXN0 ZW50cnk+DQogDQogICAgICA8dmFybGlzdGVudHJ5Pg0KLSAgICAgIDx0ZXJt PjxvcHRpb24+LWY8L29wdGlvbj4gPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+ PC90ZXJtPg0KLSAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWxlPTwvb3B0aW9u PjxyZXBsYWNlYWJsZT5maWxlbmFtZTwvPjwvdGVybT4NCisgICAgICA8dGVy bT48b3B0aW9uPi1mPC8+IDxyZXBsYWNlYWJsZT5maWxlbmFtZVtAd2VpZ2h0 XTwvPjwvdGVybT4NCisgICAgICA8dGVybT48b3B0aW9uPi0tZmlsZT08Lz48 cmVwbGFjZWFibGU+ZmlsZW5hbWVbQHdlaWdodF08Lz48L3Rlcm0+DQogICAg ICAgPGxpc3RpdGVtPg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIFJlYWQg dHJhbnNhY3Rpb24gc2NyaXB0IGZyb20gPHJlcGxhY2VhYmxlPmZpbGVuYW1l PC8+Lg0KKyAgICAgICAgQWRkIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQg ZnJvbSA8cmVwbGFjZWFibGU+ZmlsZW5hbWU8Lz4gdG8NCisgICAgICAgIHRo ZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQorICAgICAgICBBbiBvcHRp b25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0ZXJhbD5APC8+IGFsbG93 cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9iYWJpbGl0eSBvZiBkcmF3 aW5nIHRoZSB0ZXN0Lg0KICAgICAgICAgU2VlIGJlbG93IGZvciBkZXRhaWxz Lg0KLSAgICAgICAgPG9wdGlvbj4tTjwvb3B0aW9uPiwgPG9wdGlvbj4tUzwv b3B0aW9uPiwgYW5kIDxvcHRpb24+LWY8L29wdGlvbj4NCi0gICAgICAgIGFy ZSBtdXR1YWxseSBleGNsdXNpdmUuDQogICAgICAgIDwvcGFyYT4NCiAgICAg ICA8L2xpc3RpdGVtPg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQpAQCAtNDA0 LDEwICs0MjQsNyBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxl Pm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwv Pg0KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1za2lwLXNvbWUtdXBkYXRlczwv b3B0aW9uPjwvdGVybT4NCiAgICAgICA8bGlzdGl0ZW0+DQogICAgICAgIDxw YXJhPg0KLSAgICAgICAgRG8gbm90IHVwZGF0ZSA8c3RydWN0bmFtZT5wZ2Jl bmNoX3RlbGxlcnM8Lz4gYW5kDQotICAgICAgICA8c3RydWN0bmFtZT5wZ2Jl bmNoX2JyYW5jaGVzPC8+Lg0KLSAgICAgICAgVGhpcyB3aWxsIGF2b2lkIHVw ZGF0ZSBjb250ZW50aW9uIG9uIHRoZXNlIHRhYmxlcywgYnV0DQotICAgICAg ICBpdCBtYWtlcyB0aGUgdGVzdCBjYXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1C Lg0KKyAgICAgICAgU2hvcnRoYW5kIGZvciA8b3B0aW9uPi1iIHNpbXBsZS11 cGRhdGVAMTwvPi4NCiAgICAgICAgPC9wYXJhPg0KICAgICAgIDwvbGlzdGl0 ZW0+DQogICAgICA8L3Zhcmxpc3RlbnRyeT4NCkBAIC00OTksOSArNTE2LDkg QEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+ IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICAg IFJlcG9ydCB0aGUgc3BlY2lmaWVkIHNjYWxlIGZhY3RvciBpbiA8YXBwbGlj YXRpb24+cGdiZW5jaDwvPidzDQogICAgICAgICBvdXRwdXQuICBXaXRoIHRo ZSBidWlsdC1pbiB0ZXN0cywgdGhpcyBpcyBub3QgbmVjZXNzYXJ5OyB0aGUN CiAgICAgICAgIGNvcnJlY3Qgc2NhbGUgZmFjdG9yIHdpbGwgYmUgZGV0ZWN0 ZWQgYnkgY291bnRpbmcgdGhlIG51bWJlciBvZg0KLSAgICAgICAgcm93cyBp biB0aGUgPHN0cnVjdG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPiB0YWJsZS4g IEhvd2V2ZXIsIHdoZW4gdGVzdGluZw0KLSAgICAgICAgY3VzdG9tIGJlbmNo bWFya3MgKDxvcHRpb24+LWY8Lz4gb3B0aW9uKSwgdGhlIHNjYWxlIGZhY3Rv cg0KLSAgICAgICAgd2lsbCBiZSByZXBvcnRlZCBhcyAxIHVubGVzcyB0aGlz IG9wdGlvbiBpcyB1c2VkLg0KKyAgICAgICAgcm93cyBpbiB0aGUgPHN0cnVj dG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPiB0YWJsZS4NCisgICAgICAgIEhv d2V2ZXIsIHdoZW4gdGVzdGluZyBvbmx5IGN1c3RvbSBiZW5jaG1hcmtzICg8 b3B0aW9uPi1mPC8+IG9wdGlvbiksDQorICAgICAgICB0aGUgc2NhbGUgZmFj dG9yIHdpbGwgYmUgcmVwb3J0ZWQgYXMgMSB1bmxlc3MgdGhpcyBvcHRpb24g aXMgdXNlZC4NCiAgICAgICAgPC9wYXJhPg0KICAgICAgIDwvbGlzdGl0ZW0+ DQogICAgICA8L3Zhcmxpc3RlbnRyeT4NCkBAIC01MTEsNyArNTI4LDcgQEAg cGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwv b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICA8dGVy bT48b3B0aW9uPi0tc2VsZWN0LW9ubHk8L29wdGlvbj48L3Rlcm0+DQogICAg ICAgPGxpc3RpdGVtPg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIFBlcmZv cm0gc2VsZWN0LW9ubHkgdHJhbnNhY3Rpb25zIGluc3RlYWQgb2YgVFBDLUIt bGlrZSB0ZXN0Lg0KKyAgICAgICAgU2hvcnRoYW5kIGZvciA8b3B0aW9uPi1i IHNlbGVjdC1vbmx5QDE8Lz4uDQogICAgICAgIDwvcGFyYT4NCiAgICAgICA8 L2xpc3RpdGVtPg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQpAQCAtNjYxLDcg KzY3OCwyMCBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9w dGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0K ICAgPHRpdGxlPldoYXQgaXMgdGhlIDxxdW90ZT5UcmFuc2FjdGlvbjwvPiBB Y3R1YWxseSBQZXJmb3JtZWQgaW4gcGdiZW5jaD88L3RpdGxlPg0KIA0KICAg PHBhcmE+DQotICAgVGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gc2NyaXB0IGlz c3VlcyBzZXZlbiBjb21tYW5kcyBwZXIgdHJhbnNhY3Rpb246DQorICAgUGdi ZW5jaCBleGVjdXRlcyB0ZXN0IHNjcmlwdHMgY2hvc2VuIHJhbmRvbWx5IGZy b20gYSBzcGVjaWZpZWQgbGlzdC4NCisgICBUaGV5IGluY2x1ZGUgYnVpbHQt aW4gc2NyaXB0cyB3aXRoIDxvcHRpb24+LWI8Lz4gYW5kDQorICAgdXNlci1w cm92aWRlZCBjdXN0b20gc2NyaXB0cyB3aXRoIDxvcHRpb24+LWY8Lz4uDQor ICAgRWFjaCBzY3JpcHQgbWF5IGJlIGdpdmVuIGEgcmVsYXRpdmUgd2VpZ2h0 IHNwZWNpZmllZCBhZnRlciBhDQorICAgPGxpdGVyYWw+QDwvPiBzbyBhcyB0 byBjaGFuZ2UgaXRzIGRyYXdpbmcgcHJvYmFiaWxpdHkuDQorICAgVGhlIGRl ZmF1bHQgd2VpZ2h0IGlzIDxsaXRlcmFsPjE8Lz4uDQorIDwvcGFyYT4NCisN CisgIDxwYXJhPg0KKyAgIFRoZSBkZWZhdWx0IGJ1aWx0aW4gdHJhbnNhY3Rp b24gc2NyaXB0IChhbHNvIGludm9rZWQgd2l0aCA8b3B0aW9uPi1iIHRwY2It bGlrZTwvPikNCisgICBpc3N1ZXMgc2V2ZW4gY29tbWFuZHMgcGVyIHRyYW5z YWN0aW9uIG92ZXIgcmFuZG9tbHkgY2hvc2VuIDxsaXRlcmFsPmFpZDwvPiwN CisgICA8bGl0ZXJhbD50aWQ8Lz4sIDxsaXRlcmFsPmJpZDwvPiBhbmQgPGxp dGVyYWw+YmFsYW5jZTwvPi4NCisgICBUaGUgc2NlbmFyaW8gaXMgaW5zcGly ZWQgYnkgdGhlIFRQQy1CIGJlbmNobWFyaywgYnV0IGlzIG5vdCBhY3R1YWxs eSBUUEMtQiwNCisgICBoZW5jZSB0aGUgbmFtZS4NCiAgIDwvcGFyYT4NCiAN CiAgIDxvcmRlcmVkbGlzdD4NCkBAIC02NzUsOSArNzA1LDE1IEBAIHBnYmVu Y2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlv bmFsPiA8cmVwbGFjZWFibGU+ZGJuYW1lPC8+DQogICA8L29yZGVyZWRsaXN0 Pg0KIA0KICAgPHBhcmE+DQotICAgSWYgeW91IHNwZWNpZnkgPG9wdGlvbj4t TjwvPiwgc3RlcHMgNCBhbmQgNSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlDQot ICAgdHJhbnNhY3Rpb24uICBJZiB5b3Ugc3BlY2lmeSA8b3B0aW9uPi1TPC8+ LCBvbmx5IHRoZSA8Y29tbWFuZD5TRUxFQ1Q8Lz4gaXMNCi0gICBpc3N1ZWQu DQorICAgSWYgeW91IHNlbGVjdCB0aGUgPGxpdGVyYWw+c2ltcGxlLXVwZGF0 ZTwvPiBidWlsdGluIChhbHNvIDxvcHRpb24+LU48Lz4pLA0KKyAgIHN0ZXBz IDQgYW5kIDUgYXJlbid0IGluY2x1ZGVkIGluIHRoZSB0cmFuc2FjdGlvbi4N CisgICBUaGlzIHdpbGwgYXZvaWQgdXBkYXRlIGNvbnRlbnRpb24gb24gdGhl c2UgdGFibGVzLCBidXQNCisgICBpdCBtYWtlcyB0aGUgdGVzdCBjYXNlIGV2 ZW4gbGVzcyBsaWtlIFRQQy1CLg0KKyAgPC9wYXJhPg0KKw0KKyAgPHBhcmE+ DQorICAgSWYgeW91IHNlbGVjdCB0aGUgPGxpdGVyYWw+c2VsZWN0LW9ubHk8 Lz4gYnVpbHRpbiAoYWxzbyA8b3B0aW9uPi1TPC8+KSwNCisgICBvbmx5IHRo ZSA8Y29tbWFuZD5TRUxFQ1Q8Lz4gaXMgaXNzdWVkLg0KICAgPC9wYXJhPg0K ICA8L3JlZnNlY3QyPg0KIA0KQEAgLTY4OSwxMCArNzI1LDcgQEAgcGdiZW5j aCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9u YWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICBiZW5jaG1hcmsgc2Nl bmFyaW9zIGJ5IHJlcGxhY2luZyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBz Y3JpcHQNCiAgICAoZGVzY3JpYmVkIGFib3ZlKSB3aXRoIGEgdHJhbnNhY3Rp b24gc2NyaXB0IHJlYWQgZnJvbSBhIGZpbGUNCiAgICAoPG9wdGlvbj4tZjwv b3B0aW9uPiBvcHRpb24pLiAgSW4gdGhpcyBjYXNlIGEgPHF1b3RlPnRyYW5z YWN0aW9uPC8+DQotICAgY291bnRzIGFzIG9uZSBleGVjdXRpb24gb2YgYSBz Y3JpcHQgZmlsZS4gIFlvdSBjYW4gZXZlbiBzcGVjaWZ5DQotICAgbXVsdGlw bGUgc2NyaXB0cyAobXVsdGlwbGUgPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRp b25zKSwgaW4gd2hpY2gNCi0gICBjYXNlIGEgcmFuZG9tIG9uZSBvZiB0aGUg c2NyaXB0cyBpcyBjaG9zZW4gZWFjaCB0aW1lIGEgY2xpZW50IHNlc3Npb24N Ci0gICBzdGFydHMgYSBuZXcgdHJhbnNhY3Rpb24uDQorICAgY291bnRzIGFz IG9uZSBleGVjdXRpb24gb2YgYSBzY3JpcHQgZmlsZS4NCiAgIDwvcGFyYT4N CiANCiAgIDxwYXJhPg0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9w Z2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jDQppbmRleCAz MGU4ZDJhLi44NTQwYWM3IDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wZ2JlbmNo L3BnYmVuY2guYw0KKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0K QEAgLTE2NCwxMSArMTY0LDEwIEBAIGJvb2wJCXVzZV9sb2c7CQkJLyogbG9n IHRyYW5zYWN0aW9uIGxhdGVuY2llcyB0byBhIGZpbGUgKi8NCiBib29sCQl1 c2VfcXVpZXQ7CQkJLyogcXVpZXQgbG9nZ2luZyBvbnRvIHN0ZGVyciAqLw0K IGludAkJCWFnZ19pbnRlcnZhbDsJCS8qIGxvZyBhZ2dyZWdhdGVzIGluc3Rl YWQgb2YgaW5kaXZpZHVhbA0KIAkJCQkJCQkJICogdHJhbnNhY3Rpb25zICov DQorYm9vbCAgICAgICAgcGVyX3NjcmlwdF9zdGF0cyA9IGZhbHNlOyAvKiB3 aGV0aGVyIHRvIGNvbGxlY3Qgc3RhdHMgcGVyIHNjcmlwdCAqLw0KIGludAkJ CXByb2dyZXNzID0gMDsJCS8qIHRocmVhZCBwcm9ncmVzcyByZXBvcnQgZXZl cnkgdGhpcyBzZWNvbmRzICovDQotaW50CQkJcHJvZ3Jlc3NfbmNsaWVudHMg PSAwOwkJLyogbnVtYmVyIG9mIGNsaWVudHMgZm9yIHByb2dyZXNzDQotCQkJ CQkJCQkJCSAqIHJlcG9ydCAqLw0KLWludAkJCXByb2dyZXNzX250aHJlYWRz ID0gMDsJCS8qIG51bWJlciBvZiB0aHJlYWRzIGZvciBwcm9ncmVzcw0KLQkJ CQkJCQkJCQkgKiByZXBvcnQgKi8NCitpbnQJCQluY2xpZW50cyA9IDE7CQkv KiBudW1iZXIgb2YgY2xpZW50cyAqLw0KK2ludAkJCW50aHJlYWRzID0gMTsJ ICAgIC8qIG51bWJlciBvZiB0aHJlYWRzICovDQogYm9vbAkJaXNfY29ubmVj dDsJCQkvKiBlc3RhYmxpc2ggY29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2Fj dGlvbiAqLw0KIGJvb2wJCWlzX2xhdGVuY2llczsJCS8qIHJlcG9ydCBwZXIt Y29tbWFuZCBsYXRlbmNpZXMgKi8NCiBpbnQJCQltYWluX3BpZDsJCQkvKiBt YWluIHByb2Nlc3MgaWQgdXNlZCBpbiBsb2cgZmlsZW5hbWUgKi8NCkBAIC0x NzksNiArMTc4LDggQEAgY2hhcgkgICAqbG9naW4gPSBOVUxMOw0KIGNoYXIJ ICAgKmRiTmFtZTsNCiBjb25zdCBjaGFyICpwcm9nbmFtZTsNCiANCisjZGVm aW5lIFdTRVAgJ0AnIC8qIHdlaWdodCBzZXBhcmF0b3IgKi8NCisNCiB2b2xh dGlsZSBib29sIHRpbWVyX2V4Y2VlZGVkID0gZmFsc2U7CS8qIGZsYWcgZnJv bSBzaWduYWwgaGFuZGxlciAqLw0KIA0KIC8qIHZhcmlhYmxlIGRlZmluaXRp b25zICovDQpAQCAtMTg4LDEzICsxODksMzkgQEAgdHlwZWRlZiBzdHJ1Y3QN CiAJY2hhcgkgICAqdmFsdWU7CQkJLyogaXRzIHZhbHVlICovDQogfSBWYXJp YWJsZTsNCiANCi0jZGVmaW5lIE1BWF9GSUxFUwkJMTI4CQkvKiBtYXggbnVt YmVyIG9mIFNRTCBzY3JpcHQgZmlsZXMgYWxsb3dlZCAqLw0KKyNkZWZpbmUg TUFYX1NDUklQVFMJCTEyOAkJLyogbWF4IG51bWJlciBvZiBTUUwgc2NyaXB0 cyBhbGxvd2VkICovDQogI2RlZmluZSBTSEVMTF9DT01NQU5EX1NJWkUJMjU2 IC8qIG1heGltdW0gc2l6ZSBhbGxvd2VkIGZvciBzaGVsbCBjb21tYW5kICov DQogDQogLyoNCisgKiBzaW1wbGUgZGF0YSBzdHJ1Y3R1cmUgdG8ga2VlcCBz dGF0cyBhYm91dCBzb21ldGhpbmcuDQorICogcHJvYmFibHkgdGhlIGZpcnN0 IHZhbHVlIHNob3VsZCBiZSBrZXB0IGFuZCB1c2VkIGFzIGFuIG9mZnNldCBm b3INCisgKiBiZXR0ZXIgbnVtZXJpY2FsIHN0YWJpbGl0eS4uLg0KKyAqLw0K K3R5cGVkZWYgc3RydWN0DQorew0KKwlpbnQ2NF90IGNvdW50OyAgICAvKiBo b3cgbWFueSB2YWx1ZXMgd2hlcmUgZW5jb3VudGVyZWQgKi8NCisJZG91Ymxl IG1pbjsgICAvKiB0aGUgbWluaW11bSBzZWVuICovDQorCWRvdWJsZSBtYXg7 ICAgLyogdGhlIG1heGltdW0gc2VlbiAqLw0KKwlkb3VibGUgc3VtOyAgIC8q IHN1bSBvZiB2YWx1ZXMgKi8NCisJZG91YmxlIHN1bTI7ICAvKiBzdW0gb2Yg c3F1YXJlZCB2YWx1ZXMgKi8NCit9IFNpbXBsZVN0YXRzOw0KKw0KKy8qIGRh dGEgc3RydWN0dXJlIHRvIGhvbGQgdmFyaW91cyBzdGF0aXN0aWNzLg0KKyAq IGl0IGlzIHVzZWQgZm9yIGludGVydmFsIHN0YXRpc3RpY3MgYXMgd2VsbCBh cyBmaWxlIHN0YXRpc3RpY3MuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7 DQorCWxvbmcJCXN0YXJ0X3RpbWU7CQkvKiB3aGVuIHRoZSBpbnRlcnZhbCBz dGFydHMsIGZvciBhZ2dyZWdhdGVzICovDQorCWludDY0CQljbnQ7CQkJLyog bnVtYmVyIG9mIHRyYW5zYWN0aW9ucyAqLw0KKwlpbnQ2NAkJc2tpcHBlZDsJ CS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgc2tpcHBlZCB1bmRlciAtLXJh dGUNCisJCQkJCQkJCSAqIGFuZCAtLWxhdGVuY3ktbGltaXQgKi8NCisJU2lt cGxlU3RhdHMJbGF0ZW5jeTsNCisJU2ltcGxlU3RhdHMJbGFnOw0KK30gU3Rh dHNEYXRhOw0KKw0KKy8qDQogICogc3RydWN0dXJlcyB1c2VkIGluIGN1c3Rv bSBxdWVyeSBtb2RlDQogICovDQotDQogdHlwZWRlZiBzdHJ1Y3QNCiB7DQog CVBHY29ubgkgICAqY29uOwkJCS8qIGNvbm5lY3Rpb24gaGFuZGxlIHRvIERC ICovDQpAQCAtMjAyLDIyICsyMjksMjAgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJ aW50CQkJc3RhdGU7CQkJLyogc3RhdGUgTm8uICovDQogCWludAkJCWxpc3Rl bjsJCQkvKiAwIGluZGljYXRlcyB0aGF0IGFuIGFzeW5jIHF1ZXJ5IGhhcyBi ZWVuDQogCQkJCQkJCQkgKiBzZW50ICovDQotCWludAkJCXNsZWVwaW5nOwkJ LyogMSBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpZW50IGlzIG5hcHBpbmcgKi8N CisJYm9vbAkJaXNfdGhyb3R0bGVkOwkvKiB3aGV0aGVyIHRyYW5zYWN0aW9u IHRocm90dGxpbmcgaXMgZG9uZSAqLw0KKwlib29sCQlzbGVlcGluZzsJCS8q IHdoZXRoZXIgdGhlIGNsaWVudCBpcyBuYXBwaW5nICovDQogCWJvb2wJCXRo cm90dGxpbmc7CQkvKiB3aGV0aGVyIG5hcCBpcyBmb3IgdGhyb3R0bGluZyAq Lw0KIAlWYXJpYWJsZSAgICp2YXJpYWJsZXM7CQkvKiBhcnJheSBvZiB2YXJp YWJsZSBkZWZpbml0aW9ucyAqLw0KIAlpbnQJCQludmFyaWFibGVzOw0KIAlp bnQ2NAkJdHhuX3NjaGVkdWxlZDsJLyogc2NoZWR1bGVkIHN0YXJ0IHRpbWUg b2YgdHJhbnNhY3Rpb24gKHVzZWMpICovDQogCWluc3RyX3RpbWUJdHhuX2Jl Z2luOwkJLyogdXNlZCBmb3IgbWVhc3VyaW5nIHNjaGVkdWxlIGxhZyB0aW1l cyAqLw0KIAlpbnN0cl90aW1lCXN0bXRfYmVnaW47CQkvKiB1c2VkIGZvciBt ZWFzdXJpbmcgc3RhdGVtZW50IGxhdGVuY2llcyAqLw0KLQlib29sCQlpc190 aHJvdHRsZWQ7CS8qIHdoZXRoZXIgdHJhbnNhY3Rpb24gdGhyb3R0bGluZyBp cyBkb25lICovDQotCWludAkJCXVzZV9maWxlOwkJLyogaW5kZXggaW4gc3Fs X2ZpbGVzIGZvciB0aGlzIGNsaWVudCAqLw0KLQlib29sCQlwcmVwYXJlZFtN QVhfRklMRVNdOw0KKwlpbnQJCQl1c2VfZmlsZTsJCS8qIGluZGV4IGluIHNx bF9zY3JpcHRzIGZvciB0aGlzIGNsaWVudCAqLw0KKwlib29sCQlwcmVwYXJl ZFtNQVhfU0NSSVBUU107IC8qIHdoZXRoZXIgY2xpZW50IHByZXBhcmVkIHRo ZSBzY3JpcHQgKi8NCiANCiAJLyogcGVyIGNsaWVudCBjb2xsZWN0ZWQgc3Rh dHMgKi8NCi0JaW50CQkJY250OwkJCS8qIHhhY3RzIGNvdW50ICovDQorCWlu dDY0CQljbnQ7CQkJLyogdHJhbnNhY3Rpb24gY291bnQgKi8NCiAJaW50CQkJ ZWNudDsJCQkvKiBlcnJvciBjb3VudCAqLw0KLQlpbnQ2NAkJdHhuX2xhdGVu Y2llczsJLyogY3VtdWxhdGVkIGxhdGVuY2llcyAqLw0KLQlpbnQ2NAkJdHhu X3NxbGF0czsJCS8qIGN1bXVsYXRlZCBzcXVhcmUgbGF0ZW5jaWVzICovDQog fSBDU3RhdGU7DQogDQogLyoNCkBAIC0yMjksMTkgKzI1NCwxNCBAQCB0eXBl ZGVmIHN0cnVjdA0KIAlwdGhyZWFkX3QJdGhyZWFkOwkJCS8qIHRocmVhZCBo YW5kbGUgKi8NCiAJQ1N0YXRlCSAgICpzdGF0ZTsJCQkvKiBhcnJheSBvZiBD U3RhdGUgKi8NCiAJaW50CQkJbnN0YXRlOwkJCS8qIGxlbmd0aCBvZiBzdGF0 ZVtdICovDQotCWluc3RyX3RpbWUJc3RhcnRfdGltZTsJCS8qIHRocmVhZCBz dGFydCB0aW1lICovDQotCWluc3RyX3RpbWUgKmV4ZWNfZWxhcHNlZDsJLyog dGltZSBzcGVudCBleGVjdXRpbmcgY21kcyAocGVyIENvbW1hbmQpICovDQot CWludAkJICAgKmV4ZWNfY291bnQ7CQkvKiBudW1iZXIgb2YgY21kIGV4ZWN1 dGlvbnMgKHBlciBDb21tYW5kKSAqLw0KLQl1bnNpZ25lZCBzaG9ydCByYW5k b21fc3RhdGVbM107CQkvKiBzZXBhcmF0ZSByYW5kb21uZXNzIGZvciBlYWNo IHRocmVhZCAqLw0KLQlpbnQ2NAkJdGhyb3R0bGVfdHJpZ2dlcjsJCS8qIHBy ZXZpb3VzL25leHQgdGhyb3R0bGluZyAodXMpICovDQorCXVuc2lnbmVkIHNo b3J0IHJhbmRvbV9zdGF0ZVszXTsJIC8qIHNlcGFyYXRlIHJhbmRvbW5lc3Mg Zm9yIGVhY2ggdGhyZWFkICovDQorCWludDY0CQl0aHJvdHRsZV90cmlnZ2Vy OwkgLyogcHJldmlvdXMvbmV4dCB0aHJvdHRsaW5nICh1cykgKi8NCiANCiAJ LyogcGVyIHRocmVhZCBjb2xsZWN0ZWQgc3RhdHMgKi8NCisJaW5zdHJfdGlt ZQlzdGFydF90aW1lOwkJLyogdGhyZWFkIHN0YXJ0IHRpbWUgKi8NCiAJaW5z dHJfdGltZQljb25uX3RpbWU7DQotCWludDY0CQl0aHJvdHRsZV9sYWc7CS8q IHRvdGFsIHRyYW5zYWN0aW9uIGxhZyBiZWhpbmQgdGhyb3R0bGluZyAqLw0K LQlpbnQ2NAkJdGhyb3R0bGVfbGFnX21heDsJCS8qIG1heCB0cmFuc2FjdGlv biBsYWcgKi8NCi0JaW50NjQJCXRocm90dGxlX2xhdGVuY3lfc2tpcHBlZDsJ CS8qIGxhZ2dpbmcgdHJhbnNhY3Rpb25zDQotCQkJCQkJCQkJCQkJICogc2tp cHBlZCAqLw0KLQlpbnQ2NAkJbGF0ZW5jeV9sYXRlOwkvKiBsYXRlIHRyYW5z YWN0aW9ucyAqLw0KKwlTdGF0c0RhdGEgICBzdGF0czsNCisJaW50NjQJCWxh dGVuY3lfbGF0ZTsJLyogZXhlY3V0ZWQgYnV0IGxhdGUgdHJhbnNhY3Rpb25z ICovDQogfSBUU3RhdGU7DQogDQogI2RlZmluZSBJTlZBTElEX1RIUkVBRAkJ KChwdGhyZWFkX3QpIDApDQpAQCAtMjczLDgwICsyOTMsOTcgQEAgdHlwZWRl ZiBzdHJ1Y3QNCiAJY2hhcgkgICAqYXJndltNQVhfQVJHU107IC8qIGNvbW1h bmQgd29yZCBsaXN0ICovDQogCWludAkJCWNvbHNbTUFYX0FSR1NdOyAvKiBj b3JyZXNwb25kaW5nIGNvbHVtbiBzdGFydGluZyBmcm9tIDEgKi8NCiAJUGdC ZW5jaEV4cHIgKmV4cHI7CQkJLyogcGFyc2VkIGV4cHJlc3Npb24gKi8NCisJ U2ltcGxlU3RhdHMJc3RhdHM7ICAgICAgICAgIC8qIHRpbWUgc3BlbnQgaW4g dGhpcyBjb21tYW5kICovDQogfSBDb21tYW5kOw0KIA0KKy8qIFNRTCBzY3Jp cHQgdG8gYmUgZXhlY3V0ZWQsIGVpdGhlciBhIGZpbGUgb3IgYW4gaW50ZXJu YWwgc2NyaXB0DQorICovDQogdHlwZWRlZiBzdHJ1Y3QNCiB7DQotDQotCWxv bmcJCXN0YXJ0X3RpbWU7CQkvKiB3aGVuIGRvZXMgdGhlIGludGVydmFsIHN0 YXJ0ICovDQotCWludAkJCWNudDsJCQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rp b25zICovDQotCWludAkJCXNraXBwZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNh Y3Rpb25zIHNraXBwZWQgdW5kZXIgLS1yYXRlDQotCQkJCQkJCQkgKiBhbmQg LS1sYXRlbmN5LWxpbWl0ICovDQotDQotCWRvdWJsZQkJbWluX2xhdGVuY3k7 CS8qIG1pbi9tYXggbGF0ZW5jaWVzICovDQotCWRvdWJsZQkJbWF4X2xhdGVu Y3k7DQotCWRvdWJsZQkJc3VtX2xhdGVuY3k7CS8qIHN1bShsYXRlbmN5KSwg c3VtKGxhdGVuY3leMikgLSBmb3INCi0JCQkJCQkJCSAqIGVzdGltYXRlcyAq Lw0KLQlkb3VibGUJCXN1bTJfbGF0ZW5jeTsNCi0NCi0JZG91YmxlCQltaW5f bGFnOw0KLQlkb3VibGUJCW1heF9sYWc7DQotCWRvdWJsZQkJc3VtX2xhZzsJ CS8qIHN1bShsYWcpICovDQotCWRvdWJsZQkJc3VtMl9sYWc7CQkvKiBzdW0o bGFnKmxhZykgKi8NCi19IEFnZ1ZhbHM7DQotDQotc3RhdGljIENvbW1hbmQg KipzcWxfZmlsZXNbTUFYX0ZJTEVTXTsJLyogU1FMIHNjcmlwdCBmaWxlcyAq Lw0KLXN0YXRpYyBpbnQJbnVtX2ZpbGVzOwkJCS8qIG51bWJlciBvZiBzY3Jp cHQgZmlsZXMgKi8NCisJY29uc3QgY2hhciAqbmFtZTsNCisJaW50IHdlaWdo dDsNCisJQ29tbWFuZCAqKmNvbW1hbmRzOw0KKwlTdGF0c0RhdGEgc3RhdHM7 DQorfSBTUUxTY3JpcHQ7DQorDQorc3RhdGljIFNRTFNjcmlwdCBzcWxfc2Ny aXB0W01BWF9TQ1JJUFRTXTsNCitzdGF0aWMgaW50CW51bV9zY3JpcHRzOwkJ LyogbnVtYmVyIG9mIHNjcmlwdCBpbiBzcWxfc2NyaXB0W10gKi8NCiBzdGF0 aWMgaW50CW51bV9jb21tYW5kcyA9IDA7CS8qIHRvdGFsIG51bWJlciBvZiBD b21tYW5kIHN0cnVjdHMgKi8NCitzdGF0aWMgaW50ICB0b3RhbF93ZWlnaHQg PSAwOw0KKw0KIHN0YXRpYyBpbnQJZGVidWcgPSAwOwkJCS8qIGRlYnVnIGZs YWcgKi8NCiANCi0vKiBkZWZhdWx0IHNjZW5hcmlvICovDQotc3RhdGljIGNo YXIgKnRwY19iID0gew0KLQkiXFxzZXQgbmJyYW5jaGVzICIgQ3BwQXNTdHJp bmcyKG5icmFuY2hlcykgIiAqIDpzY2FsZVxuIg0KLQkiXFxzZXQgbnRlbGxl cnMgIiBDcHBBc1N0cmluZzIobnRlbGxlcnMpICIgKiA6c2NhbGVcbiINCi0J Ilxcc2V0IG5hY2NvdW50cyAiIENwcEFzU3RyaW5nMihuYWNjb3VudHMpICIg KiA6c2NhbGVcbiINCi0JIlxcc2V0cmFuZG9tIGFpZCAxIDpuYWNjb3VudHNc biINCi0JIlxcc2V0cmFuZG9tIGJpZCAxIDpuYnJhbmNoZXNcbiINCi0JIlxc c2V0cmFuZG9tIHRpZCAxIDpudGVsbGVyc1xuIg0KLQkiXFxzZXRyYW5kb20g ZGVsdGEgLTUwMDAgNTAwMFxuIg0KLQkiQkVHSU47XG4iDQotCSJVUERBVEUg cGdiZW5jaF9hY2NvdW50cyBTRVQgYWJhbGFuY2UgPSBhYmFsYW5jZSArIDpk ZWx0YSBXSEVSRSBhaWQgPSA6YWlkO1xuIg0KLQkiU0VMRUNUIGFiYWxhbmNl IEZST00gcGdiZW5jaF9hY2NvdW50cyBXSEVSRSBhaWQgPSA6YWlkO1xuIg0K LQkiVVBEQVRFIHBnYmVuY2hfdGVsbGVycyBTRVQgdGJhbGFuY2UgPSB0YmFs YW5jZSArIDpkZWx0YSBXSEVSRSB0aWQgPSA6dGlkO1xuIg0KLQkiVVBEQVRF IHBnYmVuY2hfYnJhbmNoZXMgU0VUIGJiYWxhbmNlID0gYmJhbGFuY2UgKyA6 ZGVsdGEgV0hFUkUgYmlkID0gOmJpZDtcbiINCi0JIklOU0VSVCBJTlRPIHBn YmVuY2hfaGlzdG9yeSAodGlkLCBiaWQsIGFpZCwgZGVsdGEsIG10aW1lKSBW QUxVRVMgKDp0aWQsIDpiaWQsIDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1F U1RBTVApO1xuIg0KLQkiRU5EO1xuIg0KLX07DQotDQotLyogLU4gY2FzZSAq Lw0KLXN0YXRpYyBjaGFyICpzaW1wbGVfdXBkYXRlID0gew0KLQkiXFxzZXQg bmJyYW5jaGVzICIgQ3BwQXNTdHJpbmcyKG5icmFuY2hlcykgIiAqIDpzY2Fs ZVxuIg0KLQkiXFxzZXQgbnRlbGxlcnMgIiBDcHBBc1N0cmluZzIobnRlbGxl cnMpICIgKiA6c2NhbGVcbiINCi0JIlxcc2V0IG5hY2NvdW50cyAiIENwcEFz U3RyaW5nMihuYWNjb3VudHMpICIgKiA6c2NhbGVcbiINCi0JIlxcc2V0cmFu ZG9tIGFpZCAxIDpuYWNjb3VudHNcbiINCi0JIlxcc2V0cmFuZG9tIGJpZCAx IDpuYnJhbmNoZXNcbiINCi0JIlxcc2V0cmFuZG9tIHRpZCAxIDpudGVsbGVy c1xuIg0KLQkiXFxzZXRyYW5kb20gZGVsdGEgLTUwMDAgNTAwMFxuIg0KLQki QkVHSU47XG4iDQotCSJVUERBVEUgcGdiZW5jaF9hY2NvdW50cyBTRVQgYWJh bGFuY2UgPSBhYmFsYW5jZSArIDpkZWx0YSBXSEVSRSBhaWQgPSA6YWlkO1xu Ig0KLQkiU0VMRUNUIGFiYWxhbmNlIEZST00gcGdiZW5jaF9hY2NvdW50cyBX SEVSRSBhaWQgPSA6YWlkO1xuIg0KLQkiSU5TRVJUIElOVE8gcGdiZW5jaF9o aXN0b3J5ICh0aWQsIGJpZCwgYWlkLCBkZWx0YSwgbXRpbWUpIFZBTFVFUyAo OnRpZCwgOmJpZCwgOmFpZCwgOmRlbHRhLCBDVVJSRU5UX1RJTUVTVEFNUCk7 XG4iDQotCSJFTkQ7XG4iDQotfTsNCi0NCi0vKiAtUyBjYXNlICovDQotc3Rh dGljIGNoYXIgKnNlbGVjdF9vbmx5ID0gew0KLQkiXFxzZXQgbmFjY291bnRz ICIgQ3BwQXNTdHJpbmcyKG5hY2NvdW50cykgIiAqIDpzY2FsZVxuIg0KLQki XFxzZXRyYW5kb20gYWlkIDEgOm5hY2NvdW50c1xuIg0KLQkiU0VMRUNUIGFi YWxhbmNlIEZST00gcGdiZW5jaF9hY2NvdW50cyBXSEVSRSBhaWQgPSA6YWlk O1xuIg0KLX07DQotDQogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLw0KIHN0 YXRpYyB2b2lkIHNldGFsYXJtKGludCBzZWNvbmRzKTsNCiBzdGF0aWMgdm9p ZCAqdGhyZWFkUnVuKHZvaWQgKmFyZyk7DQorc3RhdGljIHZvaWQgZG9UeFN0 YXRzKFRTdGF0ZSosIENTdGF0ZSosIGluc3RyX3RpbWUqLCBib29sLCBGSUxF KiwgU3RhdHNEYXRhKik7DQogDQotc3RhdGljIHZvaWQgZG9Mb2coVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3Rp bWUgKm5vdywNCi0JICBBZ2dWYWxzICphZ2csIGJvb2wgc2tpcHBlZCk7DQor LyogRGVmaW5lIGJ1aWx0aW4gdGVzdCBzY3JpcHRzICovDQorI2RlZmluZSBO X0JVSUxUSU4gMw0KK3N0YXRpYyBzdHJ1Y3Qgew0KKwljaGFyICpuYW1lOyAg IC8qIHZlcnkgc2hvcnQgbmFtZSBmb3IgLWIgLi4uKi8NCisJY2hhciAqZGVz YzsgICAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLw0KKwljaGFyICpzY3JpcHQ7 IC8qIGFjdHVhbCBwZ2JlbmNoIHNjcmlwdCAqLw0KK30gYnVpbHRpbl9zY3Jp cHRbXSA9IHsNCit7DQorCSJ0cGNiLWxpa2UiLA0KKwkiPGJ1aWx0aW46IFRQ Qy1CIChzb3J0IG9mKT4iLA0KKwkiXFxzZXQgbmJyYW5jaGVzICIgQ3BwQXNT dHJpbmcyKG5icmFuY2hlcykgIiAqIDpzY2FsZVxuIg0KKwkiXFxzZXQgbnRl bGxlcnMgIiBDcHBBc1N0cmluZzIobnRlbGxlcnMpICIgKiA6c2NhbGVcbiIN CisJIlxcc2V0IG5hY2NvdW50cyAiIENwcEFzU3RyaW5nMihuYWNjb3VudHMp ICIgKiA6c2NhbGVcbiINCisJIlxcc2V0cmFuZG9tIGFpZCAxIDpuYWNjb3Vu dHNcbiINCisJIlxcc2V0cmFuZG9tIGJpZCAxIDpuYnJhbmNoZXNcbiINCisJ Ilxcc2V0cmFuZG9tIHRpZCAxIDpudGVsbGVyc1xuIg0KKwkiXFxzZXRyYW5k b20gZGVsdGEgLTUwMDAgNTAwMFxuIg0KKwkiQkVHSU47XG4iDQorCSJVUERB VEUgcGdiZW5jaF9hY2NvdW50cyBTRVQgYWJhbGFuY2UgPSBhYmFsYW5jZSAr IDpkZWx0YSBXSEVSRSBhaWQgPSA6YWlkO1xuIg0KKwkiU0VMRUNUIGFiYWxh bmNlIEZST00gcGdiZW5jaF9hY2NvdW50cyBXSEVSRSBhaWQgPSA6YWlkO1xu Ig0KKwkiVVBEQVRFIHBnYmVuY2hfdGVsbGVycyBTRVQgdGJhbGFuY2UgPSB0 YmFsYW5jZSArIDpkZWx0YSBXSEVSRSB0aWQgPSA6dGlkO1xuIg0KKwkiVVBE QVRFIHBnYmVuY2hfYnJhbmNoZXMgU0VUIGJiYWxhbmNlID0gYmJhbGFuY2Ug KyA6ZGVsdGEgV0hFUkUgYmlkID0gOmJpZDtcbiINCisJIklOU0VSVCBJTlRP IHBnYmVuY2hfaGlzdG9yeSAodGlkLCBiaWQsIGFpZCwgZGVsdGEsIG10aW1l KSBWQUxVRVMgKDp0aWQsIDpiaWQsIDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9U SU1FU1RBTVApO1xuIg0KKwkiRU5EO1xuIg0KK30sDQorew0KKwkic2ltcGxl LXVwZGF0ZSIsDQorCSI8YnVpbHRpbjogc2ltcGxlIHVwZGF0ZT4iLA0KKwki XFxzZXQgbmJyYW5jaGVzICIgQ3BwQXNTdHJpbmcyKG5icmFuY2hlcykgIiAq IDpzY2FsZVxuIg0KKwkiXFxzZXQgbnRlbGxlcnMgIiBDcHBBc1N0cmluZzIo bnRlbGxlcnMpICIgKiA6c2NhbGVcbiINCisJIlxcc2V0IG5hY2NvdW50cyAi IENwcEFzU3RyaW5nMihuYWNjb3VudHMpICIgKiA6c2NhbGVcbiINCisJIlxc c2V0cmFuZG9tIGFpZCAxIDpuYWNjb3VudHNcbiINCisJIlxcc2V0cmFuZG9t IGJpZCAxIDpuYnJhbmNoZXNcbiINCisJIlxcc2V0cmFuZG9tIHRpZCAxIDpu dGVsbGVyc1xuIg0KKwkiXFxzZXRyYW5kb20gZGVsdGEgLTUwMDAgNTAwMFxu Ig0KKwkiQkVHSU47XG4iDQorCSJVUERBVEUgcGdiZW5jaF9hY2NvdW50cyBT RVQgYWJhbGFuY2UgPSBhYmFsYW5jZSArIDpkZWx0YSBXSEVSRSBhaWQgPSA6 YWlkO1xuIg0KKwkiU0VMRUNUIGFiYWxhbmNlIEZST00gcGdiZW5jaF9hY2Nv dW50cyBXSEVSRSBhaWQgPSA6YWlkO1xuIg0KKwkiSU5TRVJUIElOVE8gcGdi ZW5jaF9oaXN0b3J5ICh0aWQsIGJpZCwgYWlkLCBkZWx0YSwgbXRpbWUpIFZB TFVFUyAoOnRpZCwgOmJpZCwgOmFpZCwgOmRlbHRhLCBDVVJSRU5UX1RJTUVT VEFNUCk7XG4iDQorCSJFTkQ7XG4iDQorfSwNCit7DQorCSJzZWxlY3Qtb25s eSIsDQorCSI8YnVpbHRpbjogc2VsZWN0IG9ubHk+IiwNCisJIlxcc2V0IG5h Y2NvdW50cyAiIENwcEFzU3RyaW5nMihuYWNjb3VudHMpICIgKiA6c2NhbGVc biINCisJIlxcc2V0cmFuZG9tIGFpZCAxIDpuYWNjb3VudHNcbiINCisJIlNF TEVDVCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlk ID0gOmFpZDtcbiINCit9IH07DQorDQorc3RhdGljIGNoYXIgKg0KK2ZpbmRf YnVpbHRpbihjb25zdCBjaGFyICpuYW1lLCBjaGFyICoqZGVzYykNCit7DQor CWludAkJbGVuID0gc3RybGVuKG5hbWUpLCBpOw0KKw0KKwlmb3IgKGkgPSAw OyBpIDwgTl9CVUlMVElOOyBpKyspDQorCXsNCisJCWlmIChzdHJuY21wKGJ1 aWx0aW5fc2NyaXB0W2ldLm5hbWUsIG5hbWUsIGxlbikgPT0gMCkNCisJCXsN CisJCQkqZGVzYyA9IGJ1aWx0aW5fc2NyaXB0W2ldLmRlc2M7DQorCQkJcmV0 dXJuIGJ1aWx0aW5fc2NyaXB0W2ldLnNjcmlwdDsNCisJCX0NCisJfQ0KKw0K KwlmcHJpbnRmKHN0ZGVyciwgIm5vIGJ1aWx0aW4gZm91bmQgZm9yIFwiJXNc IlxuIiwgbmFtZSk7DQorCWV4aXQoMSk7DQorfQ0KIA0KIHN0YXRpYyB2b2lk DQogdXNhZ2Uodm9pZCkNCkBAIC0zNjYsMTEgKzQwMywxMyBAQCB1c2FnZSh2 b2lkKQ0KIAkgIiAgLS10YWJsZXNwYWNlPVRBQkxFU1BBQ0UgIGNyZWF0ZSB0 YWJsZXMgaW4gdGhlIHNwZWNpZmllZCB0YWJsZXNwYWNlXG4iDQogCQkgICAi ICAtLXVubG9nZ2VkLXRhYmxlcyAgICAgICAgY3JlYXRlIHRhYmxlcyBhcyB1 bmxvZ2dlZCB0YWJsZXNcbiINCiAJCSAgICJcbkJlbmNobWFya2luZyBvcHRp b25zOlxuIg0KKwkJICAgIiAgLWIsIC0tYnVpbHRpbj1OQU1FQFcgICAgIGFk ZCB3ZWlnaHRlZCBidWl0aW4gc2NyaXB0IGFtb25nIFwidHBjYi1saWtlXCJc biINCisJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNpbXBs ZS11cGRhdGVcIiBhbmQgXCJzZWxlY3Qtb25seVwiLlxuIg0KIAkJICAgIiAg LWMsIC0tY2xpZW50PU5VTSAgICAgICAgIG51bWJlciBvZiBjb25jdXJyZW50 IGRhdGFiYXNlIGNsaWVudHMgKGRlZmF1bHQ6IDEpXG4iDQogCQkgICAiICAt QywgLS1jb25uZWN0ICAgICAgICAgICAgZXN0YWJsaXNoIG5ldyBjb25uZWN0 aW9uIGZvciBlYWNoIHRyYW5zYWN0aW9uXG4iDQogCQkgICAiICAtRCwgLS1k ZWZpbmU9VkFSTkFNRT1WQUxVRVxuIg0KIAkgICIgICAgICAgICAgICAgICAg ICAgICAgICAgICBkZWZpbmUgdmFyaWFibGUgZm9yIHVzZSBieSBjdXN0b20g c2NyaXB0XG4iDQotCQkgIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgIHJl YWQgdHJhbnNhY3Rpb24gc2NyaXB0IGZyb20gRklMRU5BTUVcbiINCisJCSAi ICAtZiwgLS1maWxlPUZJTEVOQU1FQFcgICAgYWRkIHdlaWdodGVkIHRyYW5z YWN0aW9uIHNjcmlwdCBmcm9tIEZJTEVOQU1FXG4iDQogCQkgICAiICAtaiwg LS1qb2JzPU5VTSAgICAgICAgICAgbnVtYmVyIG9mIHRocmVhZHMgKGRlZmF1 bHQ6IDEpXG4iDQogCQkgICAiICAtbCwgLS1sb2cgICAgICAgICAgICAgICAg d3JpdGUgdHJhbnNhY3Rpb24gdGltZXMgdG8gbG9nIGZpbGVcbiINCiAJIiAg LUwsIC0tbGF0ZW5jeS1saW1pdD1OVU0gIGNvdW50IHRyYW5zYWN0aW9ucyBs YXN0aW5nIG1vcmUgdGhhbiBOVU0gbXNcbiINCkBAIC0zNzgsMTIgKzQxNywx MiBAQCB1c2FnZSh2b2lkKQ0KIAkJICAgIiAgLU0sIC0tcHJvdG9jb2w9c2lt cGxlfGV4dGVuZGVkfHByZXBhcmVkXG4iDQogCQkgICAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJvdG9jb2wgZm9yIHN1Ym1pdHRpbmcgcXVlcmll cyAoZGVmYXVsdDogc2ltcGxlKVxuIg0KIAkJICAgIiAgLW4sIC0tbm8tdmFj dXVtICAgICAgICAgIGRvIG5vdCBydW4gVkFDVVVNIGJlZm9yZSB0ZXN0c1xu Ig0KLQkJICAgIiAgLU4sIC0tc2tpcC1zb21lLXVwZGF0ZXMgIHNraXAgdXBk YXRlcyBvZiBwZ2JlbmNoX3RlbGxlcnMgYW5kIHBnYmVuY2hfYnJhbmNoZXNc biINCisJCSAgICIgIC1OLCAtLXNraXAtc29tZS11cGRhdGVzICBzYW1lIGFz IFwiLWIgc2ltcGxlLXVwZGF0ZUAxXCJcbiINCiAJCSAgICIgIC1QLCAtLXBy b2dyZXNzPU5VTSAgICAgICBzaG93IHRocmVhZCBwcm9ncmVzcyByZXBvcnQg ZXZlcnkgTlVNIHNlY29uZHNcbiINCiAJCSAgICIgIC1yLCAtLXJlcG9ydC1s YXRlbmNpZXMgICByZXBvcnQgYXZlcmFnZSBsYXRlbmN5IHBlciBjb21tYW5k XG4iDQogCQkiICAtUiwgLS1yYXRlPU5VTSAgICAgICAgICAgdGFyZ2V0IHJh dGUgaW4gdHJhbnNhY3Rpb25zIHBlciBzZWNvbmRcbiINCiAJCSAgICIgIC1z LCAtLXNjYWxlPU5VTSAgICAgICAgICByZXBvcnQgdGhpcyBzY2FsZSBmYWN0 b3IgaW4gb3V0cHV0XG4iDQotCQkgICAiICAtUywgLS1zZWxlY3Qtb25seSAg ICAgICAgcGVyZm9ybSBTRUxFQ1Qtb25seSB0cmFuc2FjdGlvbnNcbiINCisJ CSAgICIgIC1TLCAtLXNlbGVjdC1vbmx5ICAgICAgICBzYW1lIGFzIFwiLWIg c2VsZWN0LW9ubHlAMVwiXG4iDQogCQkgICAiICAtdCwgLS10cmFuc2FjdGlv bnM9TlVNICAgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBlYWNoIGNsaWVudCBy dW5zIChkZWZhdWx0OiAxMClcbiINCiAJCSAiICAtVCwgLS10aW1lPU5VTSAg ICAgICAgICAgZHVyYXRpb24gb2YgYmVuY2htYXJrIHRlc3QgaW4gc2Vjb25k c1xuIg0KIAkJICAgIiAgLXYsIC0tdmFjdXVtLWFsbCAgICAgICAgIHZhY3V1 bSBhbGwgZm91ciBzdGFuZGFyZCB0YWJsZXMgYmVmb3JlIHRlc3RzXG4iDQpA QCAtNTgwLDYgKzYxOSw0OSBAQCBnZXRQb2lzc29uUmFuZChUU3RhdGUgKnRo cmVhZCwgaW50NjQgY2VudGVyKQ0KIAlyZXR1cm4gKGludDY0KSAoLWxvZyh1 bmlmb3JtKSAqICgoZG91YmxlKSBjZW50ZXIpICsgMC41KTsNCiB9DQogDQor c3RhdGljIHZvaWQNCitpbml0U2ltcGxlU3RhdHMoU2ltcGxlU3RhdHMgKiBz cykNCit7DQorCW1lbXNldChzcywgMCwgc2l6ZW9mKFNpbXBsZVN0YXRzKSk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorZG9TaW1wbGVTdGF0cyhTaW1wbGVT dGF0cyAqc3MsIGRvdWJsZSB2YWwpDQorew0KKwlpZiAoc3MtPmNvdW50ID09 IDAgfHwgdmFsIDwgc3MtPm1pbikNCisJCXNzLT5taW4gPSB2YWw7DQorCWlm IChzcy0+Y291bnQgPT0gMCB8fCB2YWwgPiBzcy0+bWF4KQ0KKwkJc3MtPm1h eCA9IHZhbDsNCisJc3MtPmNvdW50ICsrOw0KKwlzcy0+c3VtICs9IHZhbDsN CisJc3MtPnN1bTIgKz0gdmFsICogdmFsOw0KK30NCisNCitzdGF0aWMgdm9p ZA0KK2FwcGVuZFNpbXBsZVN0YXRzKFNpbXBsZVN0YXRzICphY2MsIFNpbXBs ZVN0YXRzICpzcykNCit7DQorCWlmIChhY2MtPmNvdW50ID09IDAgfHwgc3Mt Pm1pbiA8IGFjYy0+bWluKQ0KKwkJYWNjLT5taW4gPSBzcy0+bWluOw0KKwlp ZiAoYWNjLT5jb3VudCA9PSAwIHx8IHNzLT5tYXggPiBhY2MtPm1heCkNCisJ CWFjYy0+bWF4ID0gc3MtPm1heDsNCisJYWNjLT5jb3VudCArPSBzcy0+Y291 bnQ7DQorCWFjYy0+c3VtICs9IHNzLT5zdW07DQorCWFjYy0+c3VtMiArPSBz cy0+c3VtMjsNCit9DQorDQorc3RhdGljIHZvaWQNCitpbml0U3RhdHMoU3Rh dHNEYXRhICpzZCwgZG91YmxlIHN0YXJ0X3RpbWUpDQorew0KKwlzZC0+Y250 ID0gMDsNCisJc2QtPnNraXBwZWQgPSAwOw0KKwlpbml0U2ltcGxlU3RhdHMo JiBzZC0+bGF0ZW5jeSk7DQorCWluaXRTaW1wbGVTdGF0cygmIHNkLT5sYWcp Ow0KKw0KKwkvKiBub3QgbmVjZXNzYXJpbHkgb3ZlcnJpZGVuPyAqLw0KKwlp ZiAoc3RhcnRfdGltZSkNCisJCXNkLT5zdGFydF90aW1lID0gc3RhcnRfdGlt ZTsNCit9DQorDQogLyogY2FsbCBQUWV4ZWMoKSBhbmQgZXhpdCgpIG9uIGZh aWx1cmUgKi8NCiBzdGF0aWMgdm9pZA0KIGV4ZWN1dGVTdGF0ZW1lbnQoUEdj b25uICpjb24sIGNvbnN0IGNoYXIgKnNxbCkNCkBAIC0xMDk5LDMzICsxMTgx LDIxIEBAIGNsaWVudERvbmUoQ1N0YXRlICpzdCwgYm9vbCBvaykNCiAJcmV0 dXJuIGZhbHNlOwkJCQkvKiBhbHdheXMgZmFsc2UgKi8NCiB9DQogDQotc3Rh dGljIHZvaWQNCi1hZ2dfdmFsc19pbml0KEFnZ1ZhbHMgKmFnZ3MsIGluc3Ry X3RpbWUgc3RhcnQpDQorc3RhdGljIGludA0KK2Nob29zZVNjcmlwdChUU3Rh dGUgKnRocmVhZCkNCiB7DQotCS8qIGJhc2ljIGNvdW50ZXJzICovDQotCWFn Z3MtPmNudCA9IDA7CQkJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgKGlu Y2x1ZGVzIHNraXBwZWQpICovDQotCWFnZ3MtPnNraXBwZWQgPSAwOwkJCS8q IHhhY3RzIHNraXBwZWQgdW5kZXIgLS1yYXRlIC0tbGF0ZW5jeS1saW1pdCAq Lw0KKwlpbnQgaSA9IDAsIHcgPSAwLCB3YyA9IChpbnQpIGdldHJhbmQodGhy ZWFkLCAwLCB0b3RhbF93ZWlnaHQgLSAxKTsNCiANCi0JYWdncy0+c3VtX2xh dGVuY3kgPSAwOwkJLyogU1VNKGxhdGVuY3kpICovDQotCWFnZ3MtPnN1bTJf bGF0ZW5jeSA9IDA7CQkvKiBTVU0obGF0ZW5jeSpsYXRlbmN5KSAqLw0KKwlk byB7DQorCQl3ICs9IHNxbF9zY3JpcHRbaSsrXS53ZWlnaHQ7DQorCX0gd2hp bGUgKHcgPD0gd2MpOw0KIA0KLQkvKiBtaW4gYW5kIG1heCB0cmFuc2FjdGlv biBkdXJhdGlvbiAqLw0KLQlhZ2dzLT5taW5fbGF0ZW5jeSA9IDA7DQotCWFn Z3MtPm1heF9sYXRlbmN5ID0gMDsNCi0NCi0JLyogc2NoZWR1bGUgbGFnIGNv dW50ZXJzICovDQotCWFnZ3MtPnN1bV9sYWcgPSAwOw0KLQlhZ2dzLT5zdW0y X2xhZyA9IDA7DQotCWFnZ3MtPm1pbl9sYWcgPSAwOw0KLQlhZ2dzLT5tYXhf bGFnID0gMDsNCi0NCi0JLyogc3RhcnQgb2YgdGhlIGN1cnJlbnQgaW50ZXJ2 YWwgKi8NCi0JYWdncy0+c3RhcnRfdGltZSA9IElOU1RSX1RJTUVfR0VUX0RP VUJMRShzdGFydCk7DQorCXJldHVybiBpIC0gMTsNCiB9DQogDQogLyogcmV0 dXJuIGZhbHNlIGlmZiBjbGllbnQgc2hvdWxkIGJlIGRpc2Nvbm5lY3RlZCAq Lw0KIHN0YXRpYyBib29sDQotZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENT dGF0ZSAqc3QsIGluc3RyX3RpbWUgKmNvbm5fdGltZSwgRklMRSAqbG9nZmls ZSwgQWdnVmFscyAqYWdnKQ0KK2RvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBpbnN0cl90aW1lICpjb25uX3RpbWUsIEZJTEUgKmxvZ2Zp bGUsIFN0YXRzRGF0YSAqYWdnKQ0KIHsNCiAJUEdyZXN1bHQgICAqcmVzOw0K IAlDb21tYW5kICAgKipjb21tYW5kczsNCkBAIC0xMTQzLDcgKzEyMTMsNyBA QCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgaW5zdHJf dGltZSAqY29ubl90aW1lLCBGSUxFICpsb2dmaWxlLCBBZ2dWYQ0KIHRvcDoN CiAJSU5TVFJfVElNRV9TRVRfWkVSTyhub3cpOw0KIA0KLQljb21tYW5kcyA9 IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVdOw0KKwljb21tYW5kcyA9IHNxbF9z Y3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kczsNCiANCiAJLyoNCiAJICog SGFuZGxlIHRocm90dGxpbmcgb25jZSBwZXIgdHJhbnNhY3Rpb24gYnkgc2xl ZXBpbmcuICBJdCBpcyBzaW1wbGVyIHRvDQpAQCAtMTE3OSwxOCArMTI0OSwx NSBAQCB0b3A6DQogCQkJbm93X3VzID0gSU5TVFJfVElNRV9HRVRfTUlDUk9T RUMobm93KTsNCiAJCQl3aGlsZSAodGhyZWFkLT50aHJvdHRsZV90cmlnZ2Vy IDwgbm93X3VzIC0gbGF0ZW5jeV9saW1pdCkNCiAJCQl7DQotCQkJCXRocmVh ZC0+dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkKys7DQotDQotCQkJCWlmIChs b2dmaWxlKQ0KLQkJCQkJZG9Mb2codGhyZWFkLCBzdCwgbG9nZmlsZSwgJm5v dywgYWdnLCB0cnVlKTsNCi0NCisJCQkJZG9UeFN0YXRzKHRocmVhZCwgc3Qs ICAmbm93LCB0cnVlLCBsb2dmaWxlLCBhZ2cpOw0KKwkJCQkvKiBuZXh0IHJl bmRlei12b3VzICovDQogCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCh0aHJl YWQsIHRocm90dGxlX2RlbGF5KTsNCiAJCQkJdGhyZWFkLT50aHJvdHRsZV90 cmlnZ2VyICs9IHdhaXQ7DQogCQkJCXN0LT50eG5fc2NoZWR1bGVkID0gdGhy ZWFkLT50aHJvdHRsZV90cmlnZ2VyOw0KIAkJCX0NCiAJCX0NCiANCi0JCXN0 LT5zbGVlcGluZyA9IDE7DQorCQlzdC0+c2xlZXBpbmcgPSB0cnVlOw0KIAkJ c3QtPnRocm90dGxpbmcgPSB0cnVlOw0KIAkJc3QtPmlzX3Rocm90dGxlZCA9 IHRydWU7DQogCQlpZiAoZGVidWcpDQpAQCAtMTIwMCwyNyArMTI2NywxMyBA QCB0b3A6DQogDQogCWlmIChzdC0+c2xlZXBpbmcpDQogCXsJCQkJCQkJLyog YXJlIHdlIHNsZWVwaW5nPyAqLw0KLQkJaW50NjQJCW5vd191czsNCi0NCiAJ CWlmIChJTlNUUl9USU1FX0lTX1pFUk8obm93KSkNCiAJCQlJTlNUUl9USU1F X1NFVF9DVVJSRU5UKG5vdyk7DQotCQlub3dfdXMgPSBJTlNUUl9USU1FX0dF VF9NSUNST1NFQyhub3cpOw0KLQkJaWYgKHN0LT50eG5fc2NoZWR1bGVkIDw9 IG5vd191cykNCi0JCXsNCi0JCQlzdC0+c2xlZXBpbmcgPSAwOwkvKiBEb25l IHNsZWVwaW5nLCBnbyBhaGVhZCB3aXRoIG5leHQgY29tbWFuZCAqLw0KLQkJ CWlmIChzdC0+dGhyb3R0bGluZykNCi0JCQl7DQotCQkJCS8qIE1lYXN1cmUg bGFnIG9mIHRocm90dGxlZCB0cmFuc2FjdGlvbiByZWxhdGl2ZSB0byB0YXJn ZXQgKi8NCi0JCQkJaW50NjQJCWxhZyA9IG5vd191cyAtIHN0LT50eG5fc2No ZWR1bGVkOw0KLQ0KLQkJCQl0aHJlYWQtPnRocm90dGxlX2xhZyArPSBsYWc7 DQotCQkJCWlmIChsYWcgPiB0aHJlYWQtPnRocm90dGxlX2xhZ19tYXgpDQot CQkJCQl0aHJlYWQtPnRocm90dGxlX2xhZ19tYXggPSBsYWc7DQotCQkJCXN0 LT50aHJvdHRsaW5nID0gZmFsc2U7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZQ0K KwkJaWYgKElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKG5vdykgPCBzdC0+dHhu X3NjaGVkdWxlZCkNCiAJCQlyZXR1cm4gdHJ1ZTsJCS8qIFN0aWxsIHNsZWVw aW5nLCBub3RoaW5nIHRvIGRvIGhlcmUgKi8NCisJCS8qIEVsc2UgZG9uZSBz bGVlcGluZywgZ28gYWhlYWQgd2l0aCBuZXh0IGNvbW1hbmQgKi8NCisJCXN0 LT5zbGVlcGluZyA9IGZhbHNlOw0KKwkJc3QtPnRocm90dGxpbmcgPSBmYWxz ZTsNCiAJfQ0KIA0KIAlpZiAoc3QtPmxpc3RlbikNCkBAIC0xMjQ0LDQ3ICsx Mjk3LDI0IEBAIHRvcDoNCiAJCSAqLw0KIAkJaWYgKGlzX2xhdGVuY2llcykN CiAJCXsNCi0JCQlpbnQJCQljbnVtID0gY29tbWFuZHNbc3QtPnN0YXRlXS0+ Y29tbWFuZF9udW07DQotDQogCQkJaWYgKElOU1RSX1RJTUVfSVNfWkVSTyhu b3cpKQ0KIAkJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7DQotCQkJ SU5TVFJfVElNRV9BQ0NVTV9ESUZGKHRocmVhZC0+ZXhlY19lbGFwc2VkW2Nu dW1dLA0KLQkJCQkJCQkJICBub3csIHN0LT5zdG10X2JlZ2luKTsNCi0JCQl0 aHJlYWQtPmV4ZWNfY291bnRbY251bV0rKzsNCisNCisJCQkvKiBhbHRob3Vn aCBhIG11dGV4IHdvdWxkIG1ha2Ugc2Vuc2UsIHRoZSBsaWtlbHlob29kIG9m IGFuIGlzc3VlDQorCQkJICogaXMgc21hbGwgYW5kIHRoZXNlIGFyZSBvbmx5 IHN0YXRzIHdoaWNoIG1heSBiZSBzbGlnaHRseSBmYWxzZQ0KKwkJCSAqLw0K KwkJCWRvU2ltcGxlU3RhdHMoJiBjb21tYW5kc1tzdC0+c3RhdGVdLT5zdGF0 cywNCisJCQkJCQkgIElOU1RSX1RJTUVfR0VUX0RPVUJMRShub3cpIC0NCisJ CQkJCQkgIElOU1RSX1RJTUVfR0VUX0RPVUJMRShzdC0+c3RtdF9iZWdpbikp Ow0KIAkJfQ0KIA0KIAkJLyogdHJhbnNhY3Rpb24gZmluaXNoZWQ6IGNhbGN1 bGF0ZSBsYXRlbmN5IGFuZCBsb2cgdGhlIHRyYW5zYWN0aW9uICovDQogCQlp ZiAoY29tbWFuZHNbc3QtPnN0YXRlICsgMV0gPT0gTlVMTCkNCiAJCXsNCi0J CQkvKiBvbmx5IGNhbGN1bGF0ZSBsYXRlbmN5IGlmIGFuIG9wdGlvbiBpcyB1 c2VkIHRoYXQgbmVlZHMgaXQgKi8NCi0JCQlpZiAocHJvZ3Jlc3MgfHwgdGhy b3R0bGVfZGVsYXkgfHwgbGF0ZW5jeV9saW1pdCkNCi0JCQl7DQotCQkJCWlu dDY0CQlsYXRlbmN5Ow0KLQ0KLQkJCQlpZiAoSU5TVFJfVElNRV9JU19aRVJP KG5vdykpDQotCQkJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7DQot DQotCQkJCWxhdGVuY3kgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhub3cp IC0gc3QtPnR4bl9zY2hlZHVsZWQ7DQotDQotCQkJCXN0LT50eG5fbGF0ZW5j aWVzICs9IGxhdGVuY3k7DQotDQotCQkJCS8qDQotCQkJCSAqIFhYWCBJbiBh IGxvbmcgYmVuY2htYXJrIHJ1biBvZiBoaWdoLWxhdGVuY3kgdHJhbnNhY3Rp b25zLA0KLQkJCQkgKiB0aGlzIGludDY0IGFkZGl0aW9uIGV2ZW50dWFsbHkg b3ZlcmZsb3dzLiAgRm9yIGV4YW1wbGUsIDEwMA0KLQkJCQkgKiB0aHJlYWRz IHJ1bm5pbmcgMTBzIHRyYW5zYWN0aW9ucyB3aWxsIG92ZXJmbG93IGl0IGlu IDIuNTYNCi0JCQkJICogaG91cnMuICBXaXRoIGEgbW9yZS10eXBpY2FsIE9M VFAgd29ya2xvYWQgb2YgLjFzDQotCQkJCSAqIHRyYW5zYWN0aW9ucywgb3Zl cmZsb3cgd291bGQgdGFrZSAyNTYgaG91cnMuDQotCQkJCSAqLw0KLQkJCQlz dC0+dHhuX3NxbGF0cyArPSBsYXRlbmN5ICogbGF0ZW5jeTsNCi0NCi0JCQkJ LyogcmVjb3JkIG92ZXIgdGhlIGxpbWl0IHRyYW5zYWN0aW9ucyBpZiBuZWVk ZWQuICovDQotCQkJCWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kgPiBs YXRlbmN5X2xpbWl0KQ0KLQkJCQkJdGhyZWFkLT5sYXRlbmN5X2xhdGUrKzsN Ci0JCQl9DQotDQotCQkJLyogcmVjb3JkIHRoZSB0aW1lIGl0IHRvb2sgaW4g dGhlIGxvZyAqLw0KLQkJCWlmIChsb2dmaWxlKQ0KLQkJCQlkb0xvZyh0aHJl YWQsIHN0LCBsb2dmaWxlLCAmbm93LCBhZ2csIGZhbHNlKTsNCisJCQlpZiAo cHJvZ3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkgfHwgbGF0ZW5jeV9saW1pdCB8 fCBwZXJfc2NyaXB0X3N0YXRzIHx8IGxvZ2ZpbGUpDQorCQkJCWRvVHhTdGF0 cyh0aHJlYWQsIHN0LCAmbm93LCBmYWxzZSwgbG9nZmlsZSwgYWdnKTsNCisJ CQllbHNlDQorCQkJCXRocmVhZC0+c3RhdHMuY250ICsrOw0KIAkJfQ0KIA0K IAkJaWYgKGNvbW1hbmRzW3N0LT5zdGF0ZV0tPnR5cGUgPT0gU1FMX0NPTU1B TkQpDQpAQCAtMTMyNyw4ICsxMzU3LDkgQEAgdG9wOg0KIAkJaWYgKGNvbW1h bmRzW3N0LT5zdGF0ZV0gPT0gTlVMTCkNCiAJCXsNCiAJCQlzdC0+c3RhdGUg PSAwOw0KLQkJCXN0LT51c2VfZmlsZSA9IChpbnQpIGdldHJhbmQodGhyZWFk LCAwLCBudW1fZmlsZXMgLSAxKTsNCi0JCQljb21tYW5kcyA9IHNxbF9maWxl c1tzdC0+dXNlX2ZpbGVdOw0KKwkJCXN0LT51c2VfZmlsZSA9IG51bV9zY3Jp cHRzPT0xPyAwOiBjaG9vc2VTY3JpcHQodGhyZWFkKTsNCisNCisJCQljb21t YW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kczsNCiAJ CQlzdC0+aXNfdGhyb3R0bGVkID0gZmFsc2U7DQogDQogCQkJLyoNCkBAIC0x MzcxLDcgKzE0MDIsNyBAQCB0b3A6DQogCX0NCiANCiAJLyogUmVjb3JkIHRy YW5zYWN0aW9uIHN0YXJ0IHRpbWUgdW5kZXIgbG9nZ2luZywgcHJvZ3Jlc3Mg b3IgdGhyb3R0bGluZyAqLw0KLQlpZiAoKGxvZ2ZpbGUgfHwgcHJvZ3Jlc3Mg fHwgdGhyb3R0bGVfZGVsYXkgfHwgbGF0ZW5jeV9saW1pdCkgJiYgc3QtPnN0 YXRlID09IDApDQorCWlmICgobG9nZmlsZSB8fCBwcm9ncmVzcyB8fCB0aHJv dHRsZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0IHx8IHBlcl9zY3JpcHRfc3Rh dHMpICYmIHN0LT5zdGF0ZSA9PSAwKQ0KIAl7DQogCQlJTlNUUl9USU1FX1NF VF9DVVJSRU5UKHN0LT50eG5fYmVnaW4pOw0KIA0KQEAgLTE2NTksNyArMTY5 MCw3IEBAIHRvcDoNCiANCiAJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5v dyk7DQogCQkJc3QtPnR4bl9zY2hlZHVsZWQgPSBJTlNUUl9USU1FX0dFVF9N SUNST1NFQyhub3cpICsgdXNlYzsNCi0JCQlzdC0+c2xlZXBpbmcgPSAxOw0K KwkJCXN0LT5zbGVlcGluZyA9IHRydWU7DQogDQogCQkJc3QtPmxpc3RlbiA9 IDE7DQogCQl9DQpAQCAtMTY5MSwyMiArMTcyMiwzOSBAQCB0b3A6DQogCQkJ ZWxzZQkvKiBzdWNjZWVkZWQgKi8NCiAJCQkJc3QtPmxpc3RlbiA9IDE7DQog CQl9DQorDQorCQkvKiBhZnRlciBhIG1ldGEgY29tbWFuZCwgaW1tZWRpYXRl bHkgcHJvY2VlZCB3aXRoIG5leHQgY29tbWFuZCAqLw0KIAkJZ290byB0b3A7 DQogCX0NCiANCiAJcmV0dXJuIHRydWU7DQogfQ0KIA0KK3N0YXRpYyB2b2lk DQorZG9TdGF0cyhTdGF0c0RhdGEgKnN0YXRzLCBib29sIHNraXBwZWQsIGRv dWJsZSBsYXQsIGRvdWJsZSBsYWcpDQorew0KKwlzdGF0cy0+Y250ICsrOw0K Kw0KKwlpZiAoc2tpcHBlZCkNCisJCS8qIG5vIGxhdGVuY3kgdG8gcmVjb3Jk IG9uIHNraXBwZWQgdHJhbnNhY3Rpb25zICovDQorCQlzdGF0cy0+c2tpcHBl ZCArKzsNCisJZWxzZQ0KKwl7DQorCQlkb1NpbXBsZVN0YXRzKCYgc3RhdHMt PmxhdGVuY3ksIGxhdCk7DQorDQorCQkvKiBhbmQgcG9zc2libHkgdGhlIHNh bWUgZm9yIHNjaGVkdWxlIGxhZyAqLw0KKwkJaWYgKHRocm90dGxlX2RlbGF5 KQ0KKwkJCWRvU2ltcGxlU3RhdHMoJiBzdGF0cy0+bGFnLCBsYWcpOw0KKwl9 DQorfQ0KKw0KIC8qDQogICogcHJpbnQgbG9nIGVudHJ5IGFmdGVyIGNvbXBs ZXRpbmcgb25lIHRyYW5zYWN0aW9uLg0KICAqLw0KIHN0YXRpYyB2b2lkDQot ZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2Zp bGUsIGluc3RyX3RpbWUgKm5vdywgQWdnVmFscyAqYWdnLA0KLQkgIGJvb2wg c2tpcHBlZCkNCitkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwg RklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LA0KKwkgIFN0YXRzRGF0 YSAqYWdnLCBib29sIHNraXBwZWQsIGRvdWJsZSBsYXRlbmN5LCBkb3VibGUg bGFnKQ0KIHsNCi0JZG91YmxlCQlsYWc7DQotCWRvdWJsZQkJbGF0ZW5jeTsN Ci0NCiAJLyoNCiAJICogU2tpcCB0aGUgbG9nIGVudHJ5IGlmIHNhbXBsaW5n IGlzIGVuYWJsZWQgYW5kIHRoaXMgcm93IGRvZXNuJ3QgYmVsb25nDQogCSAq IHRvIHRoZSByYW5kb20gc2FtcGxlLg0KQEAgLTE3MTUsMTUgKzE3NjMsNiBA QCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9n ZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICphZ2csDQogCQlwZ19l cmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKSA+IHNhbXBsZV9yYXRlKQ0K IAkJcmV0dXJuOw0KIA0KLQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKCpub3cp KQ0KLQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCgqbm93KTsNCi0NCi0JbGF0 ZW5jeSA9IChkb3VibGUpIChJTlNUUl9USU1FX0dFVF9NSUNST1NFQygqbm93 KSAtIHN0LT50eG5fc2NoZWR1bGVkKTsNCi0JaWYgKHNraXBwZWQpDQotCQls YWcgPSBsYXRlbmN5Ow0KLQllbHNlDQotCQlsYWcgPSAoZG91YmxlKSAoSU5T VFJfVElNRV9HRVRfTUlDUk9TRUMoc3QtPnR4bl9iZWdpbikgLSBzdC0+dHhu X3NjaGVkdWxlZCk7DQotDQogCS8qIHNob3VsZCB3ZSBhZ2dyZWdhdGUgdGhl IHJlc3VsdHMgb3Igbm90PyAqLw0KIAlpZiAoYWdnX2ludGVydmFsID4gMCkN CiAJew0KQEAgLTE3MzMsMzkgKzE3NzIsNyBAQCBkb0xvZyhUU3RhdGUgKnRo cmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAq bm93LCBBZ2dWYWxzICphZ2csDQogCQkgKi8NCiAJCWlmIChhZ2ctPnN0YXJ0 X3RpbWUgKyBhZ2dfaW50ZXJ2YWwgPj0gSU5TVFJfVElNRV9HRVRfRE9VQkxF KCpub3cpKQ0KIAkJew0KLQkJCWFnZy0+Y250ICs9IDE7DQotCQkJaWYgKHNr aXBwZWQpDQotCQkJew0KLQkJCQkvKg0KLQkJCQkgKiB0aGVyZSBpcyBubyBs YXRlbmN5IHRvIHJlY29yZCBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzDQotCQkJ CSAqIHNraXBwZWQNCi0JCQkJICovDQotCQkJCWFnZy0+c2tpcHBlZCArPSAx Ow0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlhZ2ctPnN1bV9sYXRl bmN5ICs9IGxhdGVuY3k7DQotCQkJCWFnZy0+c3VtMl9sYXRlbmN5ICs9IGxh dGVuY3kgKiBsYXRlbmN5Ow0KLQ0KLQkJCQkvKiBmaXJzdCBpbiB0aGlzIGFn Z3JlZ2F0aW9uIGludGVydmFsICovDQotCQkJCWlmICgoYWdnLT5jbnQgPT0g MSkgfHwgKGxhdGVuY3kgPCBhZ2ctPm1pbl9sYXRlbmN5KSkNCi0JCQkJCWFn Zy0+bWluX2xhdGVuY3kgPSBsYXRlbmN5Ow0KLQ0KLQkJCQlpZiAoKGFnZy0+ Y250ID09IDEpIHx8IChsYXRlbmN5ID4gYWdnLT5tYXhfbGF0ZW5jeSkpDQot CQkJCQlhZ2ctPm1heF9sYXRlbmN5ID0gbGF0ZW5jeTsNCi0NCi0JCQkJLyog YW5kIHRoZSBzYW1lIGZvciBzY2hlZHVsZSBsYWcgKi8NCi0JCQkJaWYgKHRo cm90dGxlX2RlbGF5KQ0KLQkJCQl7DQotCQkJCQlhZ2ctPnN1bV9sYWcgKz0g bGFnOw0KLQkJCQkJYWdnLT5zdW0yX2xhZyArPSBsYWcgKiBsYWc7DQotDQot CQkJCQlpZiAoKGFnZy0+Y250ID09IDEpIHx8IChsYWcgPCBhZ2ctPm1pbl9s YWcpKQ0KLQkJCQkJCWFnZy0+bWluX2xhZyA9IGxhZzsNCi0JCQkJCWlmICgo YWdnLT5jbnQgPT0gMSkgfHwgKGxhZyA+IGFnZy0+bWF4X2xhZykpDQotCQkJ CQkJYWdnLT5tYXhfbGFnID0gbGFnOw0KLQkJCQl9DQotCQkJfQ0KKwkJCWRv U3RhdHMoYWdnLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOw0KIAkJfQ0KIAkJ ZWxzZQ0KIAkJew0KQEAgLTE3ODAsNTIgKzE3ODcsMzQgQEAgZG9Mb2coVFN0 YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3Ry X3RpbWUgKm5vdywgQWdnVmFscyAqYWdnLA0KIAkJCQkgKiB1c2FnZSksIHNv IHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRoaXMgaW4gYSBzcGVjaWFsIHdh eQ0KIAkJCQkgKiAoc2VlIGJlbG93KS4NCiAJCQkJICovDQotCQkJCWZwcmlu dGYobG9nZmlsZSwgIiVsZCAlZCAlLjBmICUuMGYgJS4wZiAlLjBmIiwNCisJ CQkJZnByaW50Zihsb2dmaWxlLCAiJWxkICIgSU5UNjRfRk9STUFUICIgJS4w ZiAlLjBmICUuMGYgJS4wZiIsDQogCQkJCQkJYWdnLT5zdGFydF90aW1lLA0K IAkJCQkJCWFnZy0+Y250LA0KLQkJCQkJCWFnZy0+c3VtX2xhdGVuY3ksDQot CQkJCQkJYWdnLT5zdW0yX2xhdGVuY3ksDQotCQkJCQkJYWdnLT5taW5fbGF0 ZW5jeSwNCi0JCQkJCQlhZ2ctPm1heF9sYXRlbmN5KTsNCisJCQkJCQlhZ2ct PmxhdGVuY3kuc3VtLA0KKwkJCQkJCWFnZy0+bGF0ZW5jeS5zdW0yLA0KKwkJ CQkJCWFnZy0+bGF0ZW5jeS5taW4sDQorCQkJCQkJYWdnLT5sYXRlbmN5Lm1h eCk7DQogCQkJCWlmICh0aHJvdHRsZV9kZWxheSkNCiAJCQkJew0KIAkJCQkJ ZnByaW50Zihsb2dmaWxlLCAiICUuMGYgJS4wZiAlLjBmICUuMGYiLA0KLQkJ CQkJCQlhZ2ctPnN1bV9sYWcsDQotCQkJCQkJCWFnZy0+c3VtMl9sYWcsDQot CQkJCQkJCWFnZy0+bWluX2xhZywNCi0JCQkJCQkJYWdnLT5tYXhfbGFnKTsN CisJCQkJCQkJYWdnLT5sYWcuc3VtLA0KKwkJCQkJCQlhZ2ctPmxhZy5zdW0y LA0KKwkJCQkJCQlhZ2ctPmxhZy5taW4sDQorCQkJCQkJCWFnZy0+bGFnLm1h eCk7DQogCQkJCQlpZiAobGF0ZW5jeV9saW1pdCkNCi0JCQkJCQlmcHJpbnRm KGxvZ2ZpbGUsICIgJWQiLCBhZ2ctPnNraXBwZWQpOw0KKwkJCQkJCWZwcmlu dGYobG9nZmlsZSwgIiAiIElOVDY0X0ZPUk1BVCwgYWdnLT5za2lwcGVkKTsN CiAJCQkJfQ0KIAkJCQlmcHV0YygnXG4nLCBsb2dmaWxlKTsNCiANCi0JCQkJ LyogbW92ZSB0byB0aGUgbmV4dCBpbnRldmFsICovDQotCQkJCWFnZy0+c3Rh cnRfdGltZSA9IGFnZy0+c3RhcnRfdGltZSArIGFnZ19pbnRlcnZhbDsNCisJ CQkJLyogbW92ZSB0byB0aGUgbmV4dCBpbnRlcnZhbCAqLw0KKwkJCQlhZ2ct PnN0YXJ0X3RpbWUgKz0gYWdnX2ludGVydmFsOw0KIA0KIAkJCQkvKiByZXNl dCBmb3IgIm5vIHRyYW5zYWN0aW9uIiBpbnRlcnZhbHMgKi8NCi0JCQkJYWdn LT5jbnQgPSAwOw0KLQkJCQlhZ2ctPnNraXBwZWQgPSAwOw0KLQkJCQlhZ2ct Pm1pbl9sYXRlbmN5ID0gMDsNCi0JCQkJYWdnLT5tYXhfbGF0ZW5jeSA9IDA7 DQotCQkJCWFnZy0+c3VtX2xhdGVuY3kgPSAwOw0KLQkJCQlhZ2ctPnN1bTJf bGF0ZW5jeSA9IDA7DQotCQkJCWFnZy0+bWluX2xhZyA9IDA7DQotCQkJCWFn Zy0+bWF4X2xhZyA9IDA7DQotCQkJCWFnZy0+c3VtX2xhZyA9IDA7DQotCQkJ CWFnZy0+c3VtMl9sYWcgPSAwOw0KKwkJCQlpbml0U3RhdHMoYWdnLCAwLjAp Ow0KIAkJCX0NCiANCiAJCQkvKiByZXNldCB0aGUgdmFsdWVzIHRvIGluY2x1 ZGUgb25seSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gKi8NCi0JCQlhZ2ct PmNudCA9IDE7DQotCQkJYWdnLT5za2lwcGVkID0gc2tpcHBlZCA/IDEgOiAw Ow0KLQkJCWFnZy0+bWluX2xhdGVuY3kgPSBsYXRlbmN5Ow0KLQkJCWFnZy0+ bWF4X2xhdGVuY3kgPSBsYXRlbmN5Ow0KLQkJCWFnZy0+c3VtX2xhdGVuY3kg PSBza2lwcGVkID8gMC4wIDogbGF0ZW5jeTsNCi0JCQlhZ2ctPnN1bTJfbGF0 ZW5jeSA9IHNraXBwZWQgPyAwLjAgOiBsYXRlbmN5ICogbGF0ZW5jeTsNCi0J CQlhZ2ctPm1pbl9sYWcgPSBsYWc7DQotCQkJYWdnLT5tYXhfbGFnID0gbGFn Ow0KLQkJCWFnZy0+c3VtX2xhZyA9IGxhZzsNCi0JCQlhZ2ctPnN1bTJfbGFn ID0gbGFnICogbGFnOw0KKwkJCWRvU3RhdHMoYWdnLCBza2lwcGVkLCBsYXRl bmN5LCBsYWcpOw0KIAkJfQ0KIAl9DQogCWVsc2UNCkBAIC0xODM1LDIxICsx ODI0LDIxIEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBG SUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csIEFnZ1ZhbHMgKmFnZywN CiANCiAJCS8qIFRoaXMgaXMgbW9yZSB0aGFuIHdlIHJlYWxseSBvdWdodCB0 byBrbm93IGFib3V0IGluc3RyX3RpbWUgKi8NCiAJCWlmIChza2lwcGVkKQ0K LQkJCWZwcmludGYobG9nZmlsZSwgIiVkICVkIHNraXBwZWQgJWQgJWxkICVs ZCIsDQorCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQg IiBza2lwcGVkICVkICVsZCAlbGQiLA0KIAkJCQkJc3QtPmlkLCBzdC0+Y250 LCBzdC0+dXNlX2ZpbGUsDQogCQkJCQkobG9uZykgbm93LT50dl9zZWMsIChs b25nKSBub3ctPnR2X3VzZWMpOw0KIAkJZWxzZQ0KLQkJCWZwcmludGYobG9n ZmlsZSwgIiVkICVkICUuMGYgJWQgJWxkICVsZCIsDQorCQkJZnByaW50Zihs b2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiAlLjBmICVkICVsZCAlbGQi LA0KIAkJCQkJc3QtPmlkLCBzdC0+Y250LCBsYXRlbmN5LCBzdC0+dXNlX2Zp bGUsDQogCQkJCQkobG9uZykgbm93LT50dl9zZWMsIChsb25nKSBub3ctPnR2 X3VzZWMpOw0KICNlbHNlDQogDQogCQkvKiBPbiBXaW5kb3dzLCBpbnN0cl90 aW1lIGRvZXNuJ3QgcHJvdmlkZSBhIHRpbWVzdGFtcCBhbnl3YXkgKi8NCiAJ CWlmIChza2lwcGVkKQ0KLQkJCWZwcmludGYobG9nZmlsZSwgIiVkICVkIHNr aXBwZWQgJWQgMCAwIiwNCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiSU5U NjRfRk9STUFUIiBza2lwcGVkICVkIDAgMCIsDQogCQkJCQlzdC0+aWQsIHN0 LT5jbnQsIHN0LT51c2VfZmlsZSk7DQogCQllbHNlDQotCQkJZnByaW50Zihs b2dmaWxlLCAiJWQgJWQgJS4wZiAlZCAwIDAiLA0KKwkJCWZwcmludGYobG9n ZmlsZSwgIiVkICJJTlQ2NF9GT1JNQVQiICUuMGYgJWQgMCAwIiwNCiAJCQkJ CXN0LT5pZCwgc3QtPmNudCwgbGF0ZW5jeSwgc3QtPnVzZV9maWxlKTsNCiAj ZW5kaWYNCiAJCWlmICh0aHJvdHRsZV9kZWxheSkNCkBAIC0xODU4LDYgKzE4 NDcsNDQgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJ TEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdnVmFscyAqYWdnLA0K IAl9DQogfQ0KIA0KKy8qDQorICogZW5kIG9mIHRyYW5zYWN0aW9uIHN0YXRp c3RpY3MNCisgKi8NCitzdGF0aWMgdm9pZA0KK2RvVHhTdGF0cyhUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwgaW5zdHJfdGltZSAqbm93LA0KKwkJICBi b29sIHNraXBwZWQsIEZJTEUgKmxvZ2ZpbGUsIFN0YXRzRGF0YSAqYWdnKQ0K K3sNCisJZG91YmxlIGxhdGVuY3kgPSAwLjAsIGxhZyA9IDAuMDsNCisNCisJ aWYgKCghc2tpcHBlZCB8fCBhZ2dfaW50ZXJ2YWwpICYmIElOU1RSX1RJTUVf SVNfWkVSTygqbm93KSkNCisJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoKm5v dyk7DQorDQorCWlmICghc2tpcHBlZCkNCisJew0KKwkJLyogY29tcHV0ZSBs YXRlbmN5ICYgbGFnIGlmIG5lZWRlZCAqLw0KKwkJbGF0ZW5jeSA9IElOU1RS X1RJTUVfR0VUX01JQ1JPU0VDKCpub3cpIC0gc3QtPnR4bl9zY2hlZHVsZWQ7 DQorCQlsYWcgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdC0+dHhuX2Jl Z2luKSAtIHN0LT50eG5fc2NoZWR1bGVkOw0KKwl9DQorDQorCWlmIChwcm9n cmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0KQ0KKwl7 DQorCQlkb1N0YXRzKCYgdGhyZWFkLT5zdGF0cywgc2tpcHBlZCwgbGF0ZW5j eSwgbGFnKTsNCisNCisJCS8qIHJlY29yZCBvdmVyIHRoZSBsaW1pdCB0cmFu c2FjdGlvbnMgaWYgbmVlZGVkLiAqLw0KKwkJaWYgKGxhdGVuY3lfbGltaXQg JiYgbGF0ZW5jeSA+IGxhdGVuY3lfbGltaXQpDQorCQkJdGhyZWFkLT5sYXRl bmN5X2xhdGUrKzsNCisJfQ0KKwllbHNlDQorCQl0aHJlYWQtPnN0YXRzLmNu dCArKzsNCisNCisJaWYgKHVzZV9sb2cpDQorCQlkb0xvZyh0aHJlYWQsIHN0 LCBsb2dmaWxlLCBub3csIGFnZywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsN CisNCisJaWYgKHBlcl9zY3JpcHRfc3RhdHMpIC8qIG11dGV4PyBobW1tLi4u IHRoZXNlIGFyZSBvbmx5IHN0YXRpc3RpY3MgKi8NCisJCWRvU3RhdHMoJiBz cWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uc3RhdHMsIHNraXBwZWQsIGxhdGVu Y3ksIGxhZyk7DQorfQ0KKw0KKw0KIC8qIGRpc2NhcmQgY29ubmVjdGlvbnMg Ki8NCiBzdGF0aWMgdm9pZA0KIGRpc2Nvbm5lY3RfYWxsKENTdGF0ZSAqc3Rh dGUsIGludCBsZW5ndGgpDQpAQCAtMjI1NCw2ICsyMjgxLDcgQEAgcHJvY2Vz c19jb21tYW5kcyhjaGFyICpidWYsIGNvbnN0IGNoYXIgKnNvdXJjZSwgY29u c3QgaW50IGxpbmVubykNCiAJbXlfY29tbWFuZHMtPmNvbW1hbmRfbnVtID0g bnVtX2NvbW1hbmRzKys7DQogCW15X2NvbW1hbmRzLT50eXBlID0gMDsJCS8q IHVudGlsIHNldCAqLw0KIAlteV9jb21tYW5kcy0+YXJnYyA9IDA7DQorCWlu aXRTaW1wbGVTdGF0cygmIG15X2NvbW1hbmRzLT5zdGF0cyk7DQogDQogCWlm ICgqcCA9PSAnXFwnKQ0KIAl7DQpAQCAtMjQ3OCw3ICsyNTA2LDcgQEAgcmVh ZF9saW5lX2Zyb21fZmlsZShGSUxFICpmZCkNCiAJcmV0dXJuIE5VTEw7DQog fQ0KIA0KLXN0YXRpYyBpbnQNCitzdGF0aWMgQ29tbWFuZCAqKg0KIHByb2Nl c3NfZmlsZShjaGFyICpmaWxlbmFtZSkNCiB7DQogI2RlZmluZSBDT01NQU5E U19BTExPQ19OVU0gMTI4DQpAQCAtMjQ4NiwxNSArMjUxNCw5IEBAIHByb2Nl c3NfZmlsZShjaGFyICpmaWxlbmFtZSkNCiAJQ29tbWFuZCAgICoqbXlfY29t bWFuZHM7DQogCUZJTEUJICAgKmZkOw0KIAlpbnQJCQlsaW5lbm8sDQotCQkJ CWluZGV4Ow0KKwkJCQlpbmRleCwNCisJCQkJYWxsb2NfbnVtOw0KIAljaGFy CSAgICpidWY7DQotCWludAkJCWFsbG9jX251bTsNCi0NCi0JaWYgKG51bV9m aWxlcyA+PSBNQVhfRklMRVMpDQotCXsNCi0JCWZwcmludGYoc3RkZXJyLCAi YXQgbW9zdCAlZCBTUUwgZmlsZXMgYXJlIGFsbG93ZWRcbiIsIE1BWF9GSUxF Uyk7DQotCQlleGl0KDEpOw0KLQl9DQogDQogCWFsbG9jX251bSA9IENPTU1B TkRTX0FMTE9DX05VTTsNCiAJbXlfY29tbWFuZHMgPSAoQ29tbWFuZCAqKikg cGdfbWFsbG9jKHNpemVvZihDb21tYW5kICopICogYWxsb2NfbnVtKTsNCkBA IC0yNTA2LDcgKzI1MjgsNyBAQCBwcm9jZXNzX2ZpbGUoY2hhciAqZmlsZW5h bWUpDQogCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuIGZpbGUg XCIlc1wiOiAlc1xuIiwNCiAJCQkJZmlsZW5hbWUsIHN0cmVycm9yKGVycm5v KSk7DQogCQlwZ19mcmVlKG15X2NvbW1hbmRzKTsNCi0JCXJldHVybiBmYWxz ZTsNCisJCXJldHVybiBOVUxMOw0KIAl9DQogDQogCWxpbmVubyA9IDA7DQpA QCAtMjUzOCwxMyArMjU2MCwxMSBAQCBwcm9jZXNzX2ZpbGUoY2hhciAqZmls ZW5hbWUpDQogDQogCW15X2NvbW1hbmRzW2luZGV4XSA9IE5VTEw7DQogDQot CXNxbF9maWxlc1tudW1fZmlsZXMrK10gPSBteV9jb21tYW5kczsNCi0NCi0J cmV0dXJuIHRydWU7DQorCXJldHVybiBteV9jb21tYW5kczsNCiB9DQogDQog c3RhdGljIENvbW1hbmQgKioNCi1wcm9jZXNzX2J1aWx0aW4oY2hhciAqdGIs IGNvbnN0IGNoYXIgKnNvdXJjZSkNCitwcm9jZXNzX2J1aWx0aW4oY29uc3Qg Y2hhciAqdGIsIGNvbnN0IGNoYXIgKnNvdXJjZSkNCiB7DQogI2RlZmluZSBD T01NQU5EU19BTExPQ19OVU0gMTI4DQogDQpAQCAtMjU5OCwzNSArMjYxOCw3 NyBAQCBwcm9jZXNzX2J1aWx0aW4oY2hhciAqdGIsIGNvbnN0IGNoYXIgKnNv dXJjZSkNCiAJcmV0dXJuIG15X2NvbW1hbmRzOw0KIH0NCiANCisvKiBQb3Nz aWJ5IHRydW5jYXRlIG9wdGlvbiBhbmQgcmV0dXJuIHdlaWdodCAqLw0KK3N0 YXRpYyBpbnQNCitnZXRXZWlnaHQoY2hhciAqb3B0aW9uKQ0KK3sNCisJY2hh ciAgICpzZXA7DQorCWludAkJd2VpZ2h0Ow0KKw0KKwlpZiAoKHNlcCA9IHN0 cnJjaHIob3B0aW9uLCBXU0VQKSkpDQorCXsNCisJCSpzZXArKyA9ICdcMCc7 DQorCQl3ZWlnaHQgPSBhdG9pKHNlcCk7DQorCQlpZiAod2VpZ2h0IDw9IDAp DQorCQl7DQorCQkJZnByaW50ZihzdGRlcnIsDQorCQkJCQkid2VpZ2h0IG11 c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUsIGdvdCBcIiVzXCJcbiIsIHNlcCk7 DQorCQkJZXhpdCgxKTsNCisJCX0NCisJfQ0KKwllbHNlDQorCQl3ZWlnaHQg PSAxOw0KKwlyZXR1cm4gd2VpZ2h0Ow0KK30NCisNCitzdGF0aWMgdm9pZA0K K2FkZFNjcmlwdChjb25zdCBjaGFyICpuYW1lLCBDb21tYW5kICoqIGNvbW1h bmRzLCBpbnQgd2VpZ2h0KQ0KK3sNCisJaWYgKGNvbW1hbmRzID09IE5VTEwp DQorCXsNCisJCWZwcmludGYoc3RkZXJyLCAiZW1wdHkgY29tbWFuZHMgZm9y ICVzXG4iLCBuYW1lKTsNCisJCWV4aXQoMSk7DQorCX0NCisNCisJaWYgKG51 bV9zY3JpcHRzID49IE1BWF9TQ1JJUFRTKQ0KKwl7DQorCQlmcHJpbnRmKHN0 ZGVyciwgImF0IG1vc3QgJWQgU1FMIHNjcmlwdHMgYXJlIGFsbG93ZWRcbiIs IE1BWF9TQ1JJUFRTKTsNCisJCWV4aXQoMSk7DQorCX0NCisNCisJc3FsX3Nj cmlwdFtudW1fc2NyaXB0c10ubmFtZSA9IG5hbWU7DQorCXNxbF9zY3JpcHRb bnVtX3NjcmlwdHNdLndlaWdodCA9IHdlaWdodDsNCisJc3FsX3NjcmlwdFtu dW1fc2NyaXB0c10uY29tbWFuZHMgPSBjb21tYW5kczsNCisJaW5pdFN0YXRz KCYgc3FsX3NjcmlwdFtudW1fc2NyaXB0c10uc3RhdHMsIDAuMCk7DQorCW51 bV9zY3JpcHRzKys7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorcHJpbnRTaW1w bGVTdGF0cyhjaGFyICpwcmVmaXgsIFNpbXBsZVN0YXRzICpzcykNCit7DQor CS8qIHByaW50IE5hTiBpZiBubyB0cmFuc2FjdGlvbnMgd2hlcmUgZXhlY3V0 ZWQgKi8NCisJZG91YmxlIGxhdGVuY3kgPSBzcy0+c3VtIC8gc3MtPmNvdW50 Ow0KKwlkb3VibGUgc3RkZGV2ID0gc3FydChzcy0+c3VtMiAvIHNzLT5jb3Vu dCAtIGxhdGVuY3kqbGF0ZW5jeSk7DQorCXByaW50ZigiJXMgYXZlcmFnZSA9 ICUuM2YgbXNcbiIsIHByZWZpeCwgMC4wMDEgKiBsYXRlbmN5KTsNCisJcHJp bnRmKCIlcyBzdGRkZXYgPSAlLjNmIG1zXG4iLCBwcmVmaXgsIDAuMDAxICog c3RkZGV2KTsNCit9DQorDQogLyogcHJpbnQgb3V0IHJlc3VsdHMgKi8NCiBz dGF0aWMgdm9pZA0KLXByaW50UmVzdWx0cyhpbnQgdHR5cGUsIGludDY0IG5v cm1hbF94YWN0cywgaW50IG5jbGllbnRzLA0KLQkJCSBUU3RhdGUgKnRocmVh ZHMsIGludCBudGhyZWFkcywNCi0JCQkgaW5zdHJfdGltZSB0b3RhbF90aW1l LCBpbnN0cl90aW1lIGNvbm5fdG90YWxfdGltZSwNCi0JCQkgaW50NjQgdG90 YWxfbGF0ZW5jaWVzLCBpbnQ2NCB0b3RhbF9zcWxhdHMsDQotCQkJIGludDY0 IHRocm90dGxlX2xhZywgaW50NjQgdGhyb3R0bGVfbGFnX21heCwNCi0JCQkg aW50NjQgdGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkLCBpbnQ2NCBsYXRlbmN5 X2xhdGUpDQorcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNE YXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLA0KKwkJCSBpbnN0 cl90aW1lIGNvbm5fdG90YWxfdGltZSwgaW50IGxhdGVuY3lfbGF0ZSkNCiB7 DQogCWRvdWJsZQkJdGltZV9pbmNsdWRlLA0KIAkJCQl0cHNfaW5jbHVkZSwN CiAJCQkJdHBzX2V4Y2x1ZGU7DQotCWNoYXIJICAgKnM7DQogDQogCXRpbWVf aW5jbHVkZSA9IElOU1RSX1RJTUVfR0VUX0RPVUJMRSh0b3RhbF90aW1lKTsN Ci0JdHBzX2luY2x1ZGUgPSBub3JtYWxfeGFjdHMgLyB0aW1lX2luY2x1ZGU7 DQotCXRwc19leGNsdWRlID0gbm9ybWFsX3hhY3RzIC8gKHRpbWVfaW5jbHVk ZSAtDQorCXRwc19pbmNsdWRlID0gdG90YWwtPmNudCAvIHRpbWVfaW5jbHVk ZTsNCisJdHBzX2V4Y2x1ZGUgPSB0b3RhbC0+Y250IC8gKHRpbWVfaW5jbHVk ZSAtDQogCQkJCQkJKElOU1RSX1RJTUVfR0VUX0RPVUJMRShjb25uX3RvdGFs X3RpbWUpIC8gbnRocmVhZHMpKTsNCiANCi0JaWYgKHR0eXBlID09IDApDQot CQlzID0gIlRQQy1CIChzb3J0IG9mKSI7DQotCWVsc2UgaWYgKHR0eXBlID09 IDIpDQotCQlzID0gIlVwZGF0ZSBvbmx5IHBnYmVuY2hfYWNjb3VudHMiOw0K LQllbHNlIGlmICh0dHlwZSA9PSAxKQ0KLQkJcyA9ICJTRUxFQ1Qgb25seSI7 DQotCWVsc2UNCi0JCXMgPSAiQ3VzdG9tIHF1ZXJ5IjsNCi0NCi0JcHJpbnRm KCJ0cmFuc2FjdGlvbiB0eXBlOiAlc1xuIiwgcyk7DQorCXByaW50ZigidHJh bnNhY3Rpb24gdHlwZTogJXNcbiIsDQorCQkgICBudW1fc2NyaXB0cyA9PSAx PyBzcWxfc2NyaXB0WzBdLm5hbWU6ICJtdWx0aXBsZSBzY3JpcHRzIik7DQog CXByaW50Zigic2NhbGluZyBmYWN0b3I6ICVkXG4iLCBzY2FsZSk7DQogCXBy aW50ZigicXVlcnkgbW9kZTogJXNcbiIsIFFVRVJZTU9ERVtxdWVyeW1vZGVd KTsNCiAJcHJpbnRmKCJudW1iZXIgb2YgY2xpZW50czogJWRcbiIsIG5jbGll bnRzKTsNCkBAIC0yNjM0LDQ5ICsyNjk2LDM4IEBAIHByaW50UmVzdWx0cyhp bnQgdHR5cGUsIGludDY0IG5vcm1hbF94YWN0cywgaW50IG5jbGllbnRzLA0K IAlpZiAoZHVyYXRpb24gPD0gMCkNCiAJew0KIAkJcHJpbnRmKCJudW1iZXIg b2YgdHJhbnNhY3Rpb25zIHBlciBjbGllbnQ6ICVkXG4iLCBueGFjdHMpOw0K LQkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHBy b2Nlc3NlZDogIiBJTlQ2NF9GT1JNQVQgIi8iIElOVDY0X0ZPUk1BVCAiXG4i LA0KLQkJCSAgIG5vcm1hbF94YWN0cywgKGludDY0KSBueGFjdHMgKiBuY2xp ZW50cyk7DQorCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0 dWFsbHkgcHJvY2Vzc2VkOiAiSU5UNjRfRk9STUFUIi8lZFxuIiwNCisJCQkg ICB0b3RhbC0+Y250LCBueGFjdHMgKiBuY2xpZW50cyk7DQogCX0NCiAJZWxz ZQ0KIAl7DQogCQlwcmludGYoImR1cmF0aW9uOiAlZCBzXG4iLCBkdXJhdGlv bik7DQotCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFs bHkgcHJvY2Vzc2VkOiAiIElOVDY0X0ZPUk1BVCAiXG4iLA0KLQkJCSAgIG5v cm1hbF94YWN0cyk7DQorCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlv bnMgYWN0dWFsbHkgcHJvY2Vzc2VkOiAiSU5UNjRfRk9STUFUIlxuIiwNCisJ CQkgICB0b3RhbC0+Y250KTsNCiAJfQ0KIA0KIAkvKiBSZW1haW5pbmcgc3Rh dHMgYXJlIG5vbnNlbnNpY2FsIGlmIHdlIGZhaWxlZCB0byBleGVjdXRlIGFu eSB4YWN0cyAqLw0KLQlpZiAobm9ybWFsX3hhY3RzIDw9IDApDQorCWlmICh0 b3RhbC0+Y250IDw9IDApDQogCQlyZXR1cm47DQogDQogCWlmICh0aHJvdHRs ZV9kZWxheSAmJiBsYXRlbmN5X2xpbWl0KQ0KLQkJcHJpbnRmKCJudW1iZXIg b2YgdHJhbnNhY3Rpb25zIHNraXBwZWQ6ICIgSU5UNjRfRk9STUFUICIgKCUu M2YgJSUpXG4iLA0KLQkJCSAgIHRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCwN Ci0JCQkgICAxMDAuMCAqIHRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCAvICh0 aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQgKyBub3JtYWxfeGFjdHMpKTsNCisJ CXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkOiAiSU5U NjRfRk9STUFUIiAoJS4zZiAlJSlcbiIsDQorCQkJICAgdG90YWwtPnNraXBw ZWQsDQorCQkJICAgMTAwLjAgKiB0b3RhbC0+c2tpcHBlZCAvICh0b3RhbC0+ c2tpcHBlZCArIHRvdGFsLT5jbnQpKTsNCiANCiAJaWYgKGxhdGVuY3lfbGlt aXQpDQotCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWJvdmUg dGhlICUuMWYgbXMgbGF0ZW5jeSBsaW1pdDogIiBJTlQ2NF9GT1JNQVQgIiAo JS4zZiAlJSlcbiIsDQorCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlv bnMgYWJvdmUgdGhlICUuMWYgbXMgbGF0ZW5jeSBsaW1pdDogJWQgKCUuM2Yg JSUpXG4iLA0KIAkJCSAgIGxhdGVuY3lfbGltaXQgLyAxMDAwLjAsIGxhdGVu Y3lfbGF0ZSwNCi0JCSAgIDEwMC4wICogbGF0ZW5jeV9sYXRlIC8gKHRocm90 dGxlX2xhdGVuY3lfc2tpcHBlZCArIG5vcm1hbF94YWN0cykpOw0KKwkJICAg MTAwLjAgKiBsYXRlbmN5X2xhdGUgLyAodG90YWwtPnNraXBwZWQgKyB0b3Rh bC0+Y250KSk7DQogDQogCWlmICh0aHJvdHRsZV9kZWxheSB8fCBwcm9ncmVz cyB8fCBsYXRlbmN5X2xpbWl0KQ0KLQl7DQotCQkvKiBjb21wdXRlIGFuZCBz aG93IGxhdGVuY3kgYXZlcmFnZSBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uICov DQotCQlkb3VibGUJCWxhdGVuY3kgPSAwLjAwMSAqIHRvdGFsX2xhdGVuY2ll cyAvIG5vcm1hbF94YWN0czsNCi0JCWRvdWJsZQkJc3FsYXQgPSAoZG91Ymxl KSB0b3RhbF9zcWxhdHMgLyBub3JtYWxfeGFjdHM7DQotDQotCQlwcmludGYo ImxhdGVuY3kgYXZlcmFnZTogJS4zZiBtc1xuIg0KLQkJCSAgICJsYXRlbmN5 IHN0ZGRldjogJS4zZiBtc1xuIiwNCi0JCQkgICBsYXRlbmN5LCAwLjAwMSAq IHNxcnQoc3FsYXQgLSAxMDAwMDAwLjAgKiBsYXRlbmN5ICogbGF0ZW5jeSkp Ow0KLQl9DQorCQlwcmludFNpbXBsZVN0YXRzKCJsYXRlbmN5IiwgJiB0b3Rh bC0+bGF0ZW5jeSk7DQogCWVsc2UNCi0Jew0KIAkJLyogb25seSBhbiBhdmVy YWdlIGxhdGVuY3kgY29tcHV0ZWQgZnJvbSB0aGUgZHVyYXRpb24gaXMgYXZh aWxhYmxlICovDQogCQlwcmludGYoImxhdGVuY3kgYXZlcmFnZTogJS4zZiBt c1xuIiwNCi0JCQkgICAxMDAwLjAgKiBkdXJhdGlvbiAqIG5jbGllbnRzIC8g bm9ybWFsX3hhY3RzKTsNCi0JfQ0KKwkJCSAgIDEwMDAuMCAqIGR1cmF0aW9u ICogbmNsaWVudHMgLyB0b3RhbC0+Y250KTsNCiANCiAJaWYgKHRocm90dGxl X2RlbGF5KQ0KLQl7DQogCQkvKg0KIAkJICogUmVwb3J0IGF2ZXJhZ2UgdHJh bnNhY3Rpb24gbGFnIHVuZGVyIHJhdGUgbGltaXQgdGhyb3R0bGluZy4gIFRo aXMNCiAJCSAqIGlzIHRoZSBkZWxheSBiZXR3ZWVuIHNjaGVkdWxlZCBhbmQg YWN0dWFsIHN0YXJ0IHRpbWVzIGZvciB0aGUNCkBAIC0yNjg0LDUzICsyNzM1 LDQ0IEBAIHByaW50UmVzdWx0cyhpbnQgdHR5cGUsIGludDY0IG5vcm1hbF94 YWN0cywgaW50IG5jbGllbnRzLA0KIAkJICogdGhlIGRhdGFiYXNlIGxvYWQs IG9yIHRoZSBQb2lzc29uIHRocm90dGxpbmcgcHJvY2Vzcy4NCiAJCSAqLw0K IAkJcHJpbnRmKCJyYXRlIGxpbWl0IHNjaGVkdWxlIGxhZzogYXZnICUuM2Yg KG1heCAlLjNmKSBtc1xuIiwNCi0JCQkgICAwLjAwMSAqIHRocm90dGxlX2xh ZyAvIG5vcm1hbF94YWN0cywgMC4wMDEgKiB0aHJvdHRsZV9sYWdfbWF4KTsN Ci0JfQ0KKwkJCSAgIDAuMDAxICogdG90YWwtPmxhZy5zdW0gLyB0b3RhbC0+ Y250LCAwLjAwMSAqIHRvdGFsLT5sYWcubWF4KTsNCiANCiAJcHJpbnRmKCJ0 cHMgPSAlZiAoaW5jbHVkaW5nIGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZylc biIsIHRwc19pbmNsdWRlKTsNCiAJcHJpbnRmKCJ0cHMgPSAlZiAoZXhjbHVk aW5nIGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZylcbiIsIHRwc19leGNsdWRl KTsNCiANCi0JLyogUmVwb3J0IHBlci1jb21tYW5kIGxhdGVuY2llcyAqLw0K LQlpZiAoaXNfbGF0ZW5jaWVzKQ0KKwkvKiBSZXBvcnQgcGVyLWZpbGUgZGF0 YSAqLw0KKwlpZiAocGVyX3NjcmlwdF9zdGF0cykNCiAJew0KLQkJaW50CQkJ aTsNCisJCWludCBpOw0KIA0KLQkJZm9yIChpID0gMDsgaSA8IG51bV9maWxl czsgaSsrKQ0KKwkJZm9yIChpID0gMDsgaSA8IG51bV9zY3JpcHRzOyBpKysp DQogCQl7DQotCQkJQ29tbWFuZCAgICoqY29tbWFuZHM7DQorCQkJcHJpbnRm KCJTUUwgc2NyaXB0ICVkLCB3ZWlnaHQgJWQ6ICVzXG4iDQorCQkJCSAgICIg LSAiSU5UNjRfRk9STUFUIiB0cmFuc2FjdGlvbnMgKCUuMWYlJSBvZiB0b3Rh bCwgdHBzID0gJWYpXG4iLA0KKwkJCQkgICBpKzEsIHNxbF9zY3JpcHRbaV0u d2VpZ2h0LCBzcWxfc2NyaXB0W2ldLm5hbWUsDQorCQkJCSAgIHNxbF9zY3Jp cHRbaV0uc3RhdHMuY250LA0KKwkJCQkgICAxMDAuMCAqIHNxbF9zY3JpcHRb aV0uc3RhdHMuY250IC8gdG90YWwtPmNudCwNCisJCQkJICAgc3FsX3Njcmlw dFtpXS5zdGF0cy5jbnQgLyB0aW1lX2luY2x1ZGUpOw0KIA0KLQkJCWlmIChu dW1fZmlsZXMgPiAxKQ0KLQkJCQlwcmludGYoInN0YXRlbWVudCBsYXRlbmNp ZXMgaW4gbWlsbGlzZWNvbmRzLCBmaWxlICVkOlxuIiwgaSArIDEpOw0KLQkJ CWVsc2UNCi0JCQkJcHJpbnRmKCJzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1p bGxpc2Vjb25kczpcbiIpOw0KKwkJCWlmIChsYXRlbmN5X2xpbWl0KQ0KKwkJ CQlwcmludGYoIiAtIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgc2tpcHBlZDog IklOVDY0X0ZPUk1BVCIgKCUuM2YlJSlcbiIsDQorCQkJCQkgICBzcWxfc2Ny aXB0W2ldLnN0YXRzLnNraXBwZWQsDQorCQkJCQkgICAxMDAuMCAqIHNxbF9z Y3JpcHRbaV0uc3RhdHMuc2tpcHBlZCAvDQorCQkJCQkgICAoc3FsX3Njcmlw dFtpXS5zdGF0cy5za2lwcGVkICsgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQp KTsNCiANCi0JCQlmb3IgKGNvbW1hbmRzID0gc3FsX2ZpbGVzW2ldOyAqY29t bWFuZHMgIT0gTlVMTDsgY29tbWFuZHMrKykNCisJCQlwcmludFNpbXBsZVN0 YXRzKCIgLSBsYXRlbmN5IiwgJiBzcWxfc2NyaXB0W2ldLnN0YXRzLmxhdGVu Y3kpOw0KKw0KKwkJCS8qIFJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNpZXMg Ki8NCisJCQlpZiAoaXNfbGF0ZW5jaWVzKQ0KIAkJCXsNCi0JCQkJQ29tbWFu ZCAgICAqY29tbWFuZCA9ICpjb21tYW5kczsNCi0JCQkJaW50CQkJY251bSA9 IGNvbW1hbmQtPmNvbW1hbmRfbnVtOw0KLQkJCQlkb3VibGUJCXRvdGFsX3Rp bWU7DQotCQkJCWluc3RyX3RpbWUJdG90YWxfZXhlY19lbGFwc2VkOw0KLQkJ CQlpbnQJCQl0b3RhbF9leGVjX2NvdW50Ow0KLQkJCQlpbnQJCQl0Ow0KKwkJ CQlDb21tYW5kICoqIGNvbTsNCiANCi0JCQkJLyogQWNjdW11bGF0ZSBwZXIt dGhyZWFkIGRhdGEgZm9yIGNvbW1hbmQgKi8NCi0JCQkJSU5TVFJfVElNRV9T RVRfWkVSTyh0b3RhbF9leGVjX2VsYXBzZWQpOw0KLQkJCQl0b3RhbF9leGVj X2NvdW50ID0gMDsNCi0JCQkJZm9yICh0ID0gMDsgdCA8IG50aHJlYWRzOyB0 KyspDQotCQkJCXsNCi0JCQkJCVRTdGF0ZQkgICAqdGhyZWFkID0gJnRocmVh ZHNbdF07DQorCQkJCXByaW50ZigiIC0gcGVyIGNvbW1hbmQgbGF0ZW5jaWVz IGluIG1zOlxuIik7DQogDQotCQkJCQlJTlNUUl9USU1FX0FERCh0b3RhbF9l eGVjX2VsYXBzZWQsDQotCQkJCQkJCQkgICB0aHJlYWQtPmV4ZWNfZWxhcHNl ZFtjbnVtXSk7DQotCQkJCQl0b3RhbF9leGVjX2NvdW50ICs9IHRocmVhZC0+ ZXhlY19jb3VudFtjbnVtXTsNCi0JCQkJfQ0KLQ0KLQkJCQlpZiAodG90YWxf ZXhlY19jb3VudCA+IDApDQotCQkJCQl0b3RhbF90aW1lID0gSU5TVFJfVElN RV9HRVRfTUlMTElTRUModG90YWxfZXhlY19lbGFwc2VkKSAvIChkb3VibGUp IHRvdGFsX2V4ZWNfY291bnQ7DQotCQkJCWVsc2UNCi0JCQkJCXRvdGFsX3Rp bWUgPSAwLjA7DQotDQotCQkJCXByaW50ZigiXHQlZlx0JXNcbiIsIHRvdGFs X3RpbWUsIGNvbW1hbmQtPmxpbmUpOw0KKwkJCQlmb3IgKGNvbSA9IHNxbF9z Y3JpcHRbaV0uY29tbWFuZHM7ICpjb20gIT0gTlVMTDsgY29tKyspDQorCQkJ CQlwcmludGYoIiAgICUxMS4zZiAgJXNcbiIsDQorCQkJCQkJICAgMTAwMC4w ICogKCpjb20pLT5zdGF0cy5zdW0gLyAoKmNvbSktPnN0YXRzLmNvdW50LA0K KwkJCQkJCSAgICgqY29tKS0+bGluZSk7DQogCQkJfQ0KIAkJfQ0KIAl9DQpA QCAtMjc0Miw2ICsyNzg0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpDQogew0KIAlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNb XSA9IHsNCiAJCS8qIHN5c3RlbWF0aWMgbG9uZy9zaG9ydCBuYW1lZCBvcHRp b25zICovDQorCQl7InRwYy1iIiwgbm9fYXJndW1lbnQsIE5VTEwsICdCJ30s DQogCQl7ImNsaWVudCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnYyd9 LA0KIAkJeyJjb25uZWN0Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdDJ30sDQog CQl7ImRlYnVnIiwgbm9fYXJndW1lbnQsIE5VTEwsICdkJ30sDQpAQCAtMjc1 MiwxMiArMjc5NSwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikN CiAJCXsiaW5pdGlhbGl6ZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaSd9LA0K IAkJeyJqb2JzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdqJ30sDQog CQl7ImxvZyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnbCd9LA0KKwkJeyJsYXRl bmN5LWxpbWl0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdMJ30sDQog CQl7Im5vLXZhY3V1bSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnbid9LA0KIAkJ eyJwb3J0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sDQogCQl7 InByb2dyZXNzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sDQog CQl7InByb3RvY29sIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdNJ30s DQogCQl7InF1aWV0Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdxJ30sDQogCQl7 InJlcG9ydC1sYXRlbmNpZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3InfSwN CisJCXsicmF0ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LA0K IAkJeyJzY2FsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncyd9LA0K IAkJeyJzZWxlY3Qtb25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnUyd9LA0K IAkJeyJza2lwLXNvbWUtdXBkYXRlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAn Tid9LA0KQEAgLTI3NzIsMjUgKzI4MTcsMTkgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpDQogCQl7InVubG9nZ2VkLXRhYmxlcyIsIG5vX2FyZ3Vt ZW50LCAmdW5sb2dnZWRfdGFibGVzLCAxfSwNCiAJCXsic2FtcGxpbmctcmF0 ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwNCiAJCXsiYWdncmVn YXRlLWludGVydmFsIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDV9LA0K LQkJeyJyYXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sDQot CQl7ImxhdGVuY3ktbGltaXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwg J0wnfSwNCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQ0KIAl9Ow0KIA0KIAlpbnQJ CQljOw0KLQlpbnQJCQluY2xpZW50cyA9IDE7CS8qIGRlZmF1bHQgbnVtYmVy IG9mIHNpbXVsYXRlZCBjbGllbnRzICovDQotCWludAkJCW50aHJlYWRzID0g MTsJLyogZGVmYXVsdCBudW1iZXIgb2YgdGhyZWFkcyAqLw0KIAlpbnQJCQlp c19pbml0X21vZGUgPSAwOwkJLyogaW5pdGlhbGl6ZSBtb2RlPyAqLw0KIAlp bnQJCQlpc19ub192YWN1dW0gPSAwOwkJLyogbm8gdmFjdXVtIGF0IGFsbCBi ZWZvcmUgdGVzdGluZz8gKi8NCiAJaW50CQkJZG9fdmFjdXVtX2FjY291bnRz ID0gMDsgLyogZG8gdmFjdXVtIGFjY291bnRzIGJlZm9yZSB0ZXN0aW5nPyAq Lw0KLQlpbnQJCQl0dHlwZSA9IDA7CQkvKiB0cmFuc2FjdGlvbiB0eXBlLiAw OiBUUEMtQiwgMTogU0VMRUNUIG9ubHksDQotCQkJCQkJCQkgKiAyOiBza2lw IHVwZGF0ZSBvZiBicmFuY2hlcyBhbmQgdGVsbGVycyAqLw0KIAlpbnQJCQlv cHRpbmRleDsNCi0JY2hhcgkgICAqZmlsZW5hbWUgPSBOVUxMOw0KIAlib29s CQlzY2FsZV9naXZlbiA9IGZhbHNlOw0KIA0KIAlib29sCQliZW5jaG1hcmtp bmdfb3B0aW9uX3NldCA9IGZhbHNlOw0KIAlib29sCQlpbml0aWFsaXphdGlv bl9vcHRpb25fc2V0ID0gZmFsc2U7DQorCWJvb2wJCWludGVybmFsX3Njcmlw dF91c2VkID0gZmFsc2U7DQogDQogCUNTdGF0ZQkgICAqc3RhdGU7CQkJLyog c3RhdHVzIG9mIGNsaWVudHMgKi8NCiAJVFN0YXRlCSAgICp0aHJlYWRzOwkJ LyogYXJyYXkgb2YgdGhyZWFkICovDQpAQCAtMjc5OCwxMyArMjgzNywxMCBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJaW5zdHJfdGltZQlz dGFydF90aW1lOwkJLyogc3RhcnQgdXAgdGltZSAqLw0KIAlpbnN0cl90aW1l CXRvdGFsX3RpbWU7DQogCWluc3RyX3RpbWUJY29ubl90b3RhbF90aW1lOw0K LQlpbnQ2NAkJdG90YWxfeGFjdHMgPSAwOw0KLQlpbnQ2NAkJdG90YWxfbGF0 ZW5jaWVzID0gMDsNCi0JaW50NjQJCXRvdGFsX3NxbGF0cyA9IDA7DQotCWlu dDY0CQl0aHJvdHRsZV9sYWcgPSAwOw0KLQlpbnQ2NAkJdGhyb3R0bGVfbGFn X21heCA9IDA7DQotCWludDY0CQl0aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQg PSAwOw0KIAlpbnQ2NAkJbGF0ZW5jeV9sYXRlID0gMDsNCisJU3RhdHNEYXRh CXN0YXRzOw0KKwlpbnQJCQl3ZWlnaHQ7DQorCWNoYXIJICAgKmRlc2M7DQog DQogCWludAkJCWk7DQogCWludAkJCW5jbGllbnRzX2RlYWx0Ow0KQEAgLTI4 NTAsNyArMjg4Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0K IAlzdGF0ZSA9IChDU3RhdGUgKikgcGdfbWFsbG9jKHNpemVvZihDU3RhdGUp KTsNCiAJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoQ1N0YXRlKSk7DQogDQot CXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJpaDpudnA6 ZHFTTmM6ajpDcnM6dDpUOlU6bGY6RDpGOk06UDpSOkw6IiwgbG9uZ19vcHRp b25zLCAmb3B0aW5kZXgpKSAhPSAtMSkNCisJd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImloOm52cDpkcWI6U05jOmo6Q3JzOnQ6VDpV OmxmOkQ6RjpNOlA6UjpMOiIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkg IT0gLTEpDQogCXsNCiAJCXN3aXRjaCAoYykNCiAJCXsNCkBAIC0yODcyLDE0 ICsyOTA4LDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkJ Y2FzZSAnZCc6DQogCQkJCWRlYnVnKys7DQogCQkJCWJyZWFrOw0KLQkJCWNh c2UgJ1MnOg0KLQkJCQl0dHlwZSA9IDE7DQotCQkJCWJlbmNobWFya2luZ19v cHRpb25fc2V0ID0gdHJ1ZTsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSAnTic6 DQotCQkJCXR0eXBlID0gMjsNCi0JCQkJYmVuY2htYXJraW5nX29wdGlvbl9z ZXQgPSB0cnVlOw0KLQkJCQlicmVhazsNCiAJCQljYXNlICdjJzoNCiAJCQkJ YmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KIAkJCQluY2xpZW50 cyA9IGF0b2kob3B0YXJnKTsNCkBAIC0yOTMxLDYgKzI5NTksNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCQkJYnJlYWs7DQogCQkJY2Fz ZSAncic6DQogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsN CisJCQkJcGVyX3NjcmlwdF9zdGF0cyA9IHRydWU7DQogCQkJCWlzX2xhdGVu Y2llcyA9IHRydWU7DQogCQkJCWJyZWFrOw0KIAkJCWNhc2UgJ3MnOg0KQEAg LTI5ODIsMTIgKzMwMTEsNDEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpDQogCQkJCWluaXRpYWxpemF0aW9uX29wdGlvbl9zZXQgPSB0cnVlOw0K IAkJCQl1c2VfcXVpZXQgPSB0cnVlOw0KIAkJCQlicmVhazsNCisJCQkJLyog d2hhdCB0byBydW4gKi8NCisJCQljYXNlICdiJzoNCisNCisJCQkJaWYgKHN0 cmNtcChvcHRhcmcsICJsaXN0IikgPT0gMCkNCisJCQkJew0KKwkJCQkJaW50 IGk7DQorCQkJCQlmcHJpbnRmKHN0ZG91dCwgIiVkIGJ1aWx0aW4gc2NyaXB0 czogIiwgTl9CVUlMVElOKTsNCisJCQkJCWZvciAoaSA9IDA7IGkgPCBOX0JV SUxUSU47IGkrKykNCisJCQkJCQlmcHJpbnRmKHN0ZG91dCwgIiVzICIsIGJ1 aWx0aW5fc2NyaXB0W2ldLm5hbWUpOw0KKwkJCQkJZnByaW50ZihzdGRvdXQs ICJcbiIpOw0KKwkJCQkJZXhpdCgwKTsNCisJCQkJfQ0KKw0KKwkJCQl3ZWln aHQgPSBnZXRXZWlnaHQob3B0YXJnKTsNCisJCQkJYWRkU2NyaXB0KGRlc2Ms IHByb2Nlc3NfYnVpbHRpbigNCisJCQkJCQkJICBmaW5kX2J1aWx0aW4ob3B0 YXJnLCAmZGVzYyksIGRlc2MpLCB3ZWlnaHQpOw0KKwkJCQliZW5jaG1hcmtp bmdfb3B0aW9uX3NldCA9IHRydWU7DQorCQkJCWludGVybmFsX3NjcmlwdF91 c2VkID0gdHJ1ZTsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSAnUyc6DQorCQkJ CWFkZFNjcmlwdChkZXNjLCBwcm9jZXNzX2J1aWx0aW4oDQorCQkJCQkJCSAg ZmluZF9idWlsdGluKCJzZWxlY3Qtb25seSIsICZkZXNjKSwgZGVzYyksIDEp Ow0KKwkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQorCQkJ CWludGVybmFsX3NjcmlwdF91c2VkID0gdHJ1ZTsNCisJCQkJYnJlYWs7DQor CQkJY2FzZSAnTic6DQorCQkJCWFkZFNjcmlwdChkZXNjLCBwcm9jZXNzX2J1 aWx0aW4oDQorCQkJCQkJCSAgZmluZF9idWlsdGluKCJzaW1wbGUtdXBkYXRl IiwgJmRlc2MpLCBkZXNjKSwgMSk7DQorCQkJCWJlbmNobWFya2luZ19vcHRp b25fc2V0ID0gdHJ1ZTsNCisJCQkJaW50ZXJuYWxfc2NyaXB0X3VzZWQgPSB0 cnVlOw0KKwkJCQlicmVhazsNCiAJCQljYXNlICdmJzoNCisJCQkJd2VpZ2h0 ID0gZ2V0V2VpZ2h0KG9wdGFyZyk7DQorCQkJCWFkZFNjcmlwdChvcHRhcmcs IHByb2Nlc3NfZmlsZShvcHRhcmcpLCB3ZWlnaHQpOw0KIAkJCQliZW5jaG1h cmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQotCQkJCXR0eXBlID0gMzsNCi0J CQkJZmlsZW5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsNCi0JCQkJaWYgKHBy b2Nlc3NfZmlsZShmaWxlbmFtZSkgPT0gZmFsc2UgfHwgKnNxbF9maWxlc1tu dW1fZmlsZXMgLSAxXSA9PSBOVUxMKQ0KLQkJCQkJZXhpdCgxKTsNCiAJCQkJ YnJlYWs7DQogCQkJY2FzZSAnRCc6DQogCQkJCXsNCkBAIC0zMDE4LDkgKzMw NzYsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCQkJYnJl YWs7DQogCQkJY2FzZSAnTSc6DQogCQkJCWJlbmNobWFya2luZ19vcHRpb25f c2V0ID0gdHJ1ZTsNCi0JCQkJaWYgKG51bV9maWxlcyA+IDApDQorCQkJCWlm IChudW1fc2NyaXB0cyA+IDApDQogCQkJCXsNCi0JCQkJCWZwcmludGYoc3Rk ZXJyLCAicXVlcnkgbW9kZSAoLU0pIHNob3VsZCBiZSBzcGVjaWZpZWQgYmVm b3JlIGFueSB0cmFuc2FjdGlvbiBzY3JpcHRzICgtZilcbiIpOw0KKwkJCQkJ ZnByaW50ZihzdGRlcnIsICJxdWVyeSBtb2RlICgtTSkgc2hvdWxkIGJlIHNw ZWNpZmllZCBiZWZvcmUgYW55IHRyYW5zYWN0aW9uIHNjcmlwdHMgKC1mIG9y IC1iKVxuIik7DQogCQkJCQlleGl0KDEpOw0KIAkJCQl9DQogCQkJCWZvciAo cXVlcnltb2RlID0gMDsgcXVlcnltb2RlIDwgTlVNX1FVRVJZTU9ERTsgcXVl cnltb2RlKyspDQpAQCAtMzExNyw2ICszMTc1LDIzIEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQ0KIAkJfQ0KIAl9DQogDQorCS8qIHNldCBkZWZh dWx0IHNjcmlwdCBpZiBub25lICovDQorCWlmIChudW1fc2NyaXB0cyA9PSAw ICYmICFpbml0aWFsaXphdGlvbl9vcHRpb25fc2V0KQ0KKwl7DQorCQlhZGRT Y3JpcHQoZGVzYywgcHJvY2Vzc19idWlsdGluKA0KKwkJCQkJICBmaW5kX2J1 aWx0aW4oInRwY2ItbGlrZSIsICZkZXNjKSwgZGVzYyksIDEpOw0KKwkJYmVu Y2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KKwkJaW50ZXJuYWxfc2Ny aXB0X3VzZWQgPSB0cnVlOw0KKwl9DQorDQorCS8qIGNvbXB1dGUgdG90YWxf d2VpZ2h0ICovDQorCWZvciAoaSA9IDA7IGkgPCBudW1fc2NyaXB0czsgaSsr KQ0KKwkJdG90YWxfd2VpZ2h0ICs9IHNxbF9zY3JpcHRbaV0ud2VpZ2h0Ow0K Kw0KKwkvKiBzaG93IHBlciBzY3JpcHQgc3RhdHMgaWYgc2V2ZXJhbCBzY3Jp cHRzIGFyZSB1c2VkICovDQorCWlmICghaW5pdGlhbGl6YXRpb25fb3B0aW9u X3NldCAmJiBudW1fc2NyaXB0cyA+IDEpDQorCQlwZXJfc2NyaXB0X3N0YXRz ID0gdHJ1ZTsNCisNCiAJLyoNCiAJICogRG9uJ3QgbmVlZCBtb3JlIHRocmVh ZHMgdGhhbiB0aGVyZSBhcmUgY2xpZW50cy4gIChUaGlzIGlzIG5vdCBtZXJl bHkgYW4NCiAJICogb3B0aW1pemF0aW9uOyB0aHJvdHRsZV9kZWxheSBpcyBj YWxjdWxhdGVkIGluY29ycmVjdGx5IGJlbG93IGlmIHNvbWUNCkBAIC0zMjAx LDggKzMyNzYsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJ ICogY2hhbmdlZCBhZnRlciBmb3JrLg0KIAkgKi8NCiAJbWFpbl9waWQgPSAo aW50KSBnZXRwaWQoKTsNCi0JcHJvZ3Jlc3NfbmNsaWVudHMgPSBuY2xpZW50 czsNCi0JcHJvZ3Jlc3NfbnRocmVhZHMgPSBudGhyZWFkczsNCiANCiAJaWYg KG5jbGllbnRzID4gMSkNCiAJew0KQEAgLTMyNDUsNyArMzMxOCw3IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJZXhpdCgxKTsNCiAJfQ0K IA0KLQlpZiAodHR5cGUgIT0gMykNCisJaWYgKGludGVybmFsX3NjcmlwdF91 c2VkKQ0KIAl7DQogCQkvKg0KIAkJICogZ2V0IHRoZSBzY2FsaW5nIGZhY3Rv ciB0aGF0IHNob3VsZCBiZSBzYW1lIGFzIGNvdW50KCopIGZyb20NCkBAIC0z MzI5LDMxICszNDAyLDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp DQogCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoc3RhcnRfdGltZSk7DQogCXNy YW5kb20oKHVuc2lnbmVkIGludCkgSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMo c3RhcnRfdGltZSkpOw0KIA0KLQkvKiBwcm9jZXNzIGJ1aWx0aW4gU1FMIHNj cmlwdHMgKi8NCi0Jc3dpdGNoICh0dHlwZSkNCi0Jew0KLQkJY2FzZSAwOg0K LQkJCXNxbF9maWxlc1swXSA9IHByb2Nlc3NfYnVpbHRpbih0cGNfYiwNCi0J CQkJCQkJCQkJICAgIjxidWlsdGluOiBUUEMtQiAoc29ydCBvZik+Iik7DQot CQkJbnVtX2ZpbGVzID0gMTsNCi0JCQlicmVhazsNCi0NCi0JCWNhc2UgMToN Ci0JCQlzcWxfZmlsZXNbMF0gPSBwcm9jZXNzX2J1aWx0aW4oc2VsZWN0X29u bHksDQotCQkJCQkJCQkJCSAgICI8YnVpbHRpbjogc2VsZWN0IG9ubHk+Iik7 DQotCQkJbnVtX2ZpbGVzID0gMTsNCi0JCQlicmVhazsNCi0NCi0JCWNhc2Ug MjoNCi0JCQlzcWxfZmlsZXNbMF0gPSBwcm9jZXNzX2J1aWx0aW4oc2ltcGxl X3VwZGF0ZSwNCi0JCQkJCQkJCQkJICAgIjxidWlsdGluOiBzaW1wbGUgdXBk YXRlPiIpOw0KLQkJCW51bV9maWxlcyA9IDE7DQotCQkJYnJlYWs7DQotDQot CQlkZWZhdWx0Og0KLQkJCWJyZWFrOw0KLQl9DQotDQogCS8qIHNldCB1cCB0 aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzICovDQogCXRocmVhZHMgPSAoVFN0YXRl ICopIHBnX21hbGxvYyhzaXplb2YoVFN0YXRlKSAqIG50aHJlYWRzKTsNCiAJ bmNsaWVudHNfZGVhbHQgPSAwOw0KQEAgLTMzNjksMzIgKzM0MTcsMTAgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQl0aHJlYWQtPnJhbmRv bV9zdGF0ZVswXSA9IHJhbmRvbSgpOw0KIAkJdGhyZWFkLT5yYW5kb21fc3Rh dGVbMV0gPSByYW5kb20oKTsNCiAJCXRocmVhZC0+cmFuZG9tX3N0YXRlWzJd ID0gcmFuZG9tKCk7DQotCQl0aHJlYWQtPnRocm90dGxlX2xhdGVuY3lfc2tp cHBlZCA9IDA7DQogCQl0aHJlYWQtPmxhdGVuY3lfbGF0ZSA9IDA7DQorCQlp bml0U3RhdHMoJiB0aHJlYWQtPnN0YXRzLCAwLjApOw0KIA0KIAkJbmNsaWVu dHNfZGVhbHQgKz0gdGhyZWFkLT5uc3RhdGU7DQotDQotCQlpZiAoaXNfbGF0 ZW5jaWVzKQ0KLQkJew0KLQkJCS8qIFJlc2VydmUgbWVtb3J5IGZvciB0aGUg dGhyZWFkIHRvIHN0b3JlIHBlci1jb21tYW5kIGxhdGVuY2llcyAqLw0KLQkJ CWludAkJCXQ7DQotDQotCQkJdGhyZWFkLT5leGVjX2VsYXBzZWQgPSAoaW5z dHJfdGltZSAqKQ0KLQkJCQlwZ19tYWxsb2Moc2l6ZW9mKGluc3RyX3RpbWUp ICogbnVtX2NvbW1hbmRzKTsNCi0JCQl0aHJlYWQtPmV4ZWNfY291bnQgPSAo aW50ICopDQotCQkJCXBnX21hbGxvYyhzaXplb2YoaW50KSAqIG51bV9jb21t YW5kcyk7DQotDQotCQkJZm9yICh0ID0gMDsgdCA8IG51bV9jb21tYW5kczsg dCsrKQ0KLQkJCXsNCi0JCQkJSU5TVFJfVElNRV9TRVRfWkVSTyh0aHJlYWQt PmV4ZWNfZWxhcHNlZFt0XSk7DQotCQkJCXRocmVhZC0+ZXhlY19jb3VudFt0 XSA9IDA7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXRocmVh ZC0+ZXhlY19lbGFwc2VkID0gTlVMTDsNCi0JCQl0aHJlYWQtPmV4ZWNfY291 bnQgPSBOVUxMOw0KLQkJfQ0KIAl9DQogDQogCS8qIGFsbCBjbGllbnRzIG11 c3QgYmUgYXNzaWduZWQgdG8gYSB0aHJlYWQgKi8NCkBAIC0zNDM3LDExICsz NDYzLDExIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KICNlbmRp ZiAgIC8qIEVOQUJMRV9USFJFQURfU0FGRVRZICovDQogDQogCS8qIHdhaXQg Zm9yIHRocmVhZHMgYW5kIGFjY3VtdWxhdGUgcmVzdWx0cyAqLw0KKwlpbml0 U3RhdHMoJiBzdGF0cywgMC4wKTsNCiAJSU5TVFJfVElNRV9TRVRfWkVSTyhj b25uX3RvdGFsX3RpbWUpOw0KIAlmb3IgKGkgPSAwOyBpIDwgbnRocmVhZHM7 IGkrKykNCiAJew0KIAkJVFN0YXRlCSAgICp0aHJlYWQgPSAmdGhyZWFkc1tp XTsNCi0JCWludAkJCWo7DQogDQogI2lmZGVmIEVOQUJMRV9USFJFQURfU0FG RVRZDQogCQlpZiAodGhyZWFkc1tpXS50aHJlYWQgPT0gSU5WQUxJRF9USFJF QUQpDQpAQCAtMzQ1NCwyMSArMzQ4MCwxMyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikNCiAJCSh2b2lkKSB0aHJlYWRSdW4odGhyZWFkKTsNCiAj ZW5kaWYgICAvKiBFTkFCTEVfVEhSRUFEX1NBRkVUWSAqLw0KIA0KLQkJLyog dGhyZWFkIGxldmVsIHN0YXRzICovDQotCQl0aHJvdHRsZV9sYWcgKz0gdGhy ZWFkLT50aHJvdHRsZV9sYWc7DQotCQl0aHJvdHRsZV9sYXRlbmN5X3NraXBw ZWQgKz0gdGhyZWFkcy0+dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkOw0KKwkJ LyogYWdncmVnYXRlIHRocmVhZCBsZXZlbCBzdGF0cyAqLw0KKwkJYXBwZW5k U2ltcGxlU3RhdHMoJiBzdGF0cy5sYXRlbmN5LCAmIHRocmVhZC0+c3RhdHMu bGF0ZW5jeSk7DQorCQlhcHBlbmRTaW1wbGVTdGF0cygmIHN0YXRzLmxhZywg JiB0aHJlYWQtPnN0YXRzLmxhZyk7DQorCQlzdGF0cy5jbnQgKz0gdGhyZWFk LT5zdGF0cy5jbnQ7DQorCQlzdGF0cy5za2lwcGVkICs9IHRocmVhZC0+c3Rh dHMuc2tpcHBlZDsNCiAJCWxhdGVuY3lfbGF0ZSArPSB0aHJlYWQtPmxhdGVu Y3lfbGF0ZTsNCi0JCWlmICh0aHJvdHRsZV9sYWdfbWF4ID4gdGhyZWFkLT50 aHJvdHRsZV9sYWdfbWF4KQ0KLQkJCXRocm90dGxlX2xhZ19tYXggPSB0aHJl YWQtPnRocm90dGxlX2xhZ19tYXg7DQogCQlJTlNUUl9USU1FX0FERChjb25u X3RvdGFsX3RpbWUsIHRocmVhZC0+Y29ubl90aW1lKTsNCi0NCi0JCS8qIGNs aWVudC1sZXZlbCBzdGF0cyAqLw0KLQkJZm9yIChqID0gMDsgaiA8IHRocmVh ZC0+bnN0YXRlOyBqKyspDQotCQl7DQotCQkJdG90YWxfeGFjdHMgKz0gdGhy ZWFkLT5zdGF0ZVtqXS5jbnQ7DQotCQkJdG90YWxfbGF0ZW5jaWVzICs9IHRo cmVhZC0+c3RhdGVbal0udHhuX2xhdGVuY2llczsNCi0JCQl0b3RhbF9zcWxh dHMgKz0gdGhyZWFkLT5zdGF0ZVtqXS50eG5fc3FsYXRzOw0KLQkJfQ0KIAl9 DQogCWRpc2Nvbm5lY3RfYWxsKHN0YXRlLCBuY2xpZW50cyk7DQogDQpAQCAt MzQ4NCwxMCArMzUwMiw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQ0KIAkgKi8NCiAJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCh0b3RhbF90aW1l KTsNCiAJSU5TVFJfVElNRV9TVUJUUkFDVCh0b3RhbF90aW1lLCBzdGFydF90 aW1lKTsNCi0JcHJpbnRSZXN1bHRzKHR0eXBlLCB0b3RhbF94YWN0cywgbmNs aWVudHMsIHRocmVhZHMsIG50aHJlYWRzLA0KLQkJCQkgdG90YWxfdGltZSwg Y29ubl90b3RhbF90aW1lLCB0b3RhbF9sYXRlbmNpZXMsIHRvdGFsX3NxbGF0 cywNCi0JCQkJIHRocm90dGxlX2xhZywgdGhyb3R0bGVfbGFnX21heCwgdGhy b3R0bGVfbGF0ZW5jeV9za2lwcGVkLA0KLQkJCQkgbGF0ZW5jeV9sYXRlKTsN CisJcHJpbnRSZXN1bHRzKHRocmVhZHMsICZzdGF0cywgdG90YWxfdGltZSwg Y29ubl90b3RhbF90aW1lLCBsYXRlbmN5X2xhdGUpOw0KIA0KIAlyZXR1cm4g MDsNCiB9DQpAQCAtMzUwOCwxMyArMzUyMyw3IEBAIHRocmVhZFJ1bih2b2lk ICphcmcpDQogCWludDY0CQl0aHJlYWRfc3RhcnQgPSBJTlNUUl9USU1FX0dF VF9NSUNST1NFQyh0aHJlYWQtPnN0YXJ0X3RpbWUpOw0KIAlpbnQ2NAkJbGFz dF9yZXBvcnQgPSB0aHJlYWRfc3RhcnQ7DQogCWludDY0CQluZXh0X3JlcG9y dCA9IGxhc3RfcmVwb3J0ICsgKGludDY0KSBwcm9ncmVzcyAqIDEwMDAwMDA7 DQotCWludDY0CQlsYXN0X2NvdW50ID0gMCwNCi0JCQkJbGFzdF9sYXRzID0g MCwNCi0JCQkJbGFzdF9zcWxhdHMgPSAwLA0KLQkJCQlsYXN0X2xhZ3MgPSAw LA0KLQkJCQlsYXN0X3NraXBwZWQgPSAwOw0KLQ0KLQlBZ2dWYWxzCQlhZ2dz Ow0KKwlTdGF0c0RhdGEJbGFzdCwgYWdnczsNCiANCiAJLyoNCiAJICogSW5p dGlhbGl6ZSB0aHJvdHRsaW5nIHJhdGUgdGFyZ2V0IGZvciBhbGwgb2YgdGhl IHRocmVhZCdzIGNsaWVudHMuICBJdA0KQEAgLTM1MjQsOCArMzUzMyw2IEBA IHRocmVhZFJ1bih2b2lkICphcmcpDQogCSAqLw0KIAlJTlNUUl9USU1FX1NF VF9DVVJSRU5UKHN0YXJ0KTsNCiAJdGhyZWFkLT50aHJvdHRsZV90cmlnZ2Vy ID0gSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoc3RhcnQpOw0KLQl0aHJlYWQt PnRocm90dGxlX2xhZyA9IDA7DQotCXRocmVhZC0+dGhyb3R0bGVfbGFnX21h eCA9IDA7DQogDQogCUlOU1RSX1RJTUVfU0VUX1pFUk8odGhyZWFkLT5jb25u X3RpbWUpOw0KIA0KQEAgLTM1NjIsMTYgKzM1NjksMTcgQEAgdGhyZWFkUnVu KHZvaWQgKmFyZykNCiAJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCh0aHJlYWQt PmNvbm5fdGltZSk7DQogCUlOU1RSX1RJTUVfU1VCVFJBQ1QodGhyZWFkLT5j b25uX3RpbWUsIHRocmVhZC0+c3RhcnRfdGltZSk7DQogDQotCWFnZ192YWxz X2luaXQoJmFnZ3MsIHRocmVhZC0+c3RhcnRfdGltZSk7DQorCWluaXRTdGF0 cygmYWdncywgSU5TVFJfVElNRV9HRVRfRE9VQkxFKHRocmVhZC0+c3RhcnRf dGltZSkpOw0KKwlsYXN0ID0gYWdnczsNCiANCiAJLyogc2VuZCBzdGFydCB1 cCBxdWVyaWVzIGluIGFzeW5jIG1hbm5lciAqLw0KIAlmb3IgKGkgPSAwOyBp IDwgbnN0YXRlOyBpKyspDQogCXsNCiAJCUNTdGF0ZQkgICAqc3QgPSAmc3Rh dGVbaV07DQotCQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9maWxlc1tz dC0+dXNlX2ZpbGVdOw0KKwkJQ29tbWFuZCAgICoqY29tbWFuZHMgPSBzcWxf c2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHM7DQogCQlpbnQJCQlwcmV2 X2VjbnQgPSBzdC0+ZWNudDsNCiANCi0JCXN0LT51c2VfZmlsZSA9IGdldHJh bmQodGhyZWFkLCAwLCBudW1fZmlsZXMgLSAxKTsNCisJCXN0LT51c2VfZmls ZSA9IG51bV9zY3JpcHRzPT0xPyAwOiBjaG9vc2VTY3JpcHQodGhyZWFkKTsN CiAJCWlmICghZG9DdXN0b20odGhyZWFkLCBzdCwgJnRocmVhZC0+Y29ubl90 aW1lLCBsb2dmaWxlLCAmYWdncykpDQogCQkJcmVtYWlucy0tOwkJCS8qIEkn dmUgYWJvcnRlZCAqLw0KIA0KQEAgLTM1OTksNyArMzYwNyw3IEBAIHRocmVh ZFJ1bih2b2lkICphcmcpDQogCQlmb3IgKGkgPSAwOyBpIDwgbnN0YXRlOyBp KyspDQogCQl7DQogCQkJQ1N0YXRlCSAgICpzdCA9ICZzdGF0ZVtpXTsNCi0J CQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9maWxlc1tzdC0+dXNlX2Zp bGVdOw0KKwkJCUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3FsX3NjcmlwdFtz dC0+dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIAkJCWludAkJCXNvY2s7DQogDQog CQkJaWYgKHN0LT5jb24gPT0gTlVMTCkNCkBAIC0zNjEyLDcgKzM2MjAsNyBA QCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJCQl7DQogCQkJCQkvKiBpbnRl cnJ1cHQgY2xpZW50IHdoaWNoIGhhcyBub3Qgc3RhcnRlZCBhIHRyYW5zYWN0 aW9uICovDQogCQkJCQlyZW1haW5zLS07DQotCQkJCQlzdC0+c2xlZXBpbmcg PSAwOw0KKwkJCQkJc3QtPnNsZWVwaW5nID0gZmFsc2U7DQogCQkJCQlzdC0+ dGhyb3R0bGluZyA9IGZhbHNlOw0KIAkJCQkJUFFmaW5pc2goc3QtPmNvbik7 DQogCQkJCQlzdC0+Y29uID0gTlVMTDsNCkBAIC0zNzA1LDcgKzM3MTMsNyBA QCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJZm9yIChpID0gMDsgaSA8IG5z dGF0ZTsgaSsrKQ0KIAkJew0KIAkJCUNTdGF0ZQkgICAqc3QgPSAmc3RhdGVb aV07DQotCQkJQ29tbWFuZCAgICoqY29tbWFuZHMgPSBzcWxfZmlsZXNbc3Qt PnVzZV9maWxlXTsNCisJCQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9z Y3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kczsNCiAJCQlpbnQJCQlwcmV2 X2VjbnQgPSBzdC0+ZWNudDsNCiANCiAJCQlpZiAoc3QtPmNvbiAmJiAoRkRf SVNTRVQoUFFzb2NrZXQoc3QtPmNvbiksICZpbnB1dF9tYXNrKQ0KQEAgLTM3 MzYsMTEgKzM3NDQsNyBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJCWlm IChub3cgPj0gbmV4dF9yZXBvcnQpDQogCQkJew0KIAkJCQkvKiBnZW5lcmF0 ZSBhbmQgc2hvdyByZXBvcnQgKi8NCi0JCQkJaW50NjQJCWNvdW50ID0gMCwN Ci0JCQkJCQkJbGF0cyA9IDAsDQotCQkJCQkJCXNxbGF0cyA9IDAsDQotCQkJ CQkJCWxhZ3MgPSAwLA0KLQkJCQkJCQlza2lwcGVkID0gMDsNCisJCQkJU3Rh dHNEYXRhICAgY3VyOw0KIAkJCQlpbnQ2NAkJcnVuID0gbm93IC0gbGFzdF9y ZXBvcnQ7DQogCQkJCWRvdWJsZQkJdHBzLA0KIAkJCQkJCQl0b3RhbF9ydW4s DQpAQCAtMzc2MCwyNSArMzc2NCwyNCBAQCB0aHJlYWRSdW4odm9pZCAqYXJn KQ0KIAkJCQkgKiAoSWYgYSByZWFkIGZyb20gYSA2NC1iaXQgaW50ZWdlciBp cyBub3QgYXRvbWljLCB5b3UgbWlnaHQNCiAJCQkJICogZ2V0IGEgInRvcm4i IHJlYWQgYW5kIGNvbXBsZXRlbHkgYm9ndXMgbGF0ZW5jaWVzIHRob3VnaCEp DQogCQkJCSAqLw0KLQkJCQlmb3IgKGkgPSAwOyBpIDwgcHJvZ3Jlc3NfbmNs aWVudHM7IGkrKykNCisJCQkJaW5pdFN0YXRzKCYgY3VyLCAwLjApOw0KKwkJ CQlmb3IgKGkgPSAwOyBpIDwgbnRocmVhZHM7IGkrKykNCiAJCQkJew0KLQkJ CQkJY291bnQgKz0gc3RhdGVbaV0uY250Ow0KLQkJCQkJbGF0cyArPSBzdGF0 ZVtpXS50eG5fbGF0ZW5jaWVzOw0KLQkJCQkJc3FsYXRzICs9IHN0YXRlW2ld LnR4bl9zcWxhdHM7DQotCQkJCX0NCi0NCi0JCQkJZm9yIChpID0gMDsgaSA8 IHByb2dyZXNzX250aHJlYWRzOyBpKyspDQotCQkJCXsNCi0JCQkJCXNraXBw ZWQgKz0gdGhyZWFkW2ldLnRocm90dGxlX2xhdGVuY3lfc2tpcHBlZDsNCi0J CQkJCWxhZ3MgKz0gdGhyZWFkW2ldLnRocm90dGxlX2xhZzsNCisJCQkJCWFw cGVuZFNpbXBsZVN0YXRzKCYgY3VyLmxhdGVuY3ksICYgdGhyZWFkW2ldLnN0 YXRzLmxhdGVuY3kpOw0KKwkJCQkJYXBwZW5kU2ltcGxlU3RhdHMoJiBjdXIu bGFnLCAmIHRocmVhZFtpXS5zdGF0cy5sYWcpOw0KKwkJCQkJY3VyLmNudCAr PSB0aHJlYWRbaV0uc3RhdHMuY250Ow0KKwkJCQkJY3VyLnNraXBwZWQgKz0g dGhyZWFkW2ldLnN0YXRzLnNraXBwZWQ7DQogCQkJCX0NCiANCiAJCQkJdG90 YWxfcnVuID0gKG5vdyAtIHRocmVhZF9zdGFydCkgLyAxMDAwMDAwLjA7DQot CQkJCXRwcyA9IDEwMDAwMDAuMCAqIChjb3VudCAtIGxhc3RfY291bnQpIC8g cnVuOw0KLQkJCQlsYXRlbmN5ID0gMC4wMDEgKiAobGF0cyAtIGxhc3RfbGF0 cykgLyAoY291bnQgLSBsYXN0X2NvdW50KTsNCi0JCQkJc3FsYXQgPSAxLjAg KiAoc3FsYXRzIC0gbGFzdF9zcWxhdHMpIC8gKGNvdW50IC0gbGFzdF9jb3Vu dCk7DQorCQkJCXRwcyA9IDEwMDAwMDAuMCAqIChjdXIuY250IC0gbGFzdC5j bnQpIC8gcnVuOw0KKwkJCQlsYXRlbmN5ID0gMC4wMDEgKiAoY3VyLmxhdGVu Y3kuc3VtIC0gbGFzdC5sYXRlbmN5LnN1bSkgLw0KKwkJCQkJKGN1ci5jbnQg LSBsYXN0LmNudCk7DQorCQkJCXNxbGF0ID0gMS4wICogKGN1ci5sYXRlbmN5 LnN1bTIgLSBsYXN0LmxhdGVuY3kuc3VtMikNCisJCQkJCS8gKGN1ci5jbnQg LSBsYXN0LmNudCk7DQogCQkJCXN0ZGV2ID0gMC4wMDEgKiBzcXJ0KHNxbGF0 IC0gMTAwMDAwMC4wICogbGF0ZW5jeSAqIGxhdGVuY3kpOw0KLQkJCQlsYWcg PSAwLjAwMSAqIChsYWdzIC0gbGFzdF9sYWdzKSAvIChjb3VudCAtIGxhc3Rf Y291bnQpOw0KKwkJCQlsYWcgPSAwLjAwMSAqIChjdXIubGFnLnN1bSAtIGxh c3QubGFnLnN1bSkgLw0KKwkJCQkJKGN1ci5jbnQgLSBsYXN0LmNudCk7DQog DQogCQkJCWZwcmludGYoc3RkZXJyLA0KIAkJCQkJCSJwcm9ncmVzczogJS4x ZiBzLCAlLjFmIHRwcywgIg0KQEAgLTM3ODgsMTcgKzM3OTEsMTMgQEAgdGhy ZWFkUnVuKHZvaWQgKmFyZykNCiAJCQkJew0KIAkJCQkJZnByaW50ZihzdGRl cnIsICIsIGxhZyAlLjNmIG1zIiwgbGFnKTsNCiAJCQkJCWlmIChsYXRlbmN5 X2xpbWl0KQ0KLQkJCQkJCWZwcmludGYoc3RkZXJyLCAiLCAiIElOVDY0X0ZP Uk1BVCAiIHNraXBwZWQiLA0KLQkJCQkJCQkJc2tpcHBlZCAtIGxhc3Rfc2tp cHBlZCk7DQorCQkJCQkJZnByaW50ZihzdGRlcnIsICIsICJJTlQ2NF9GT1JN QVQiIHNraXBwZWQiLA0KKwkJCQkJCQkJY3VyLnNraXBwZWQgLSBsYXN0LnNr aXBwZWQpOw0KIAkJCQl9DQogCQkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsN CiANCi0JCQkJbGFzdF9jb3VudCA9IGNvdW50Ow0KLQkJCQlsYXN0X2xhdHMg PSBsYXRzOw0KLQkJCQlsYXN0X3NxbGF0cyA9IHNxbGF0czsNCi0JCQkJbGFz dF9sYWdzID0gbGFnczsNCisJCQkJbGFzdCA9IGN1cjsNCiAJCQkJbGFzdF9y ZXBvcnQgPSBub3c7DQotCQkJCWxhc3Rfc2tpcHBlZCA9IHNraXBwZWQ7DQog DQogCQkJCS8qDQogCQkJCSAqIEVuc3VyZSB0aGF0IHRoZSBuZXh0IHJlcG9y dCBpcyBpbiB0aGUgZnV0dXJlLCBpbiBjYXNlDQo= --8323329-1235310649-1441265165=:16877 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --8323329-1235310649-1441265165=:16877--