From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.devel Subject: Re: Use cases for post-redisplay hooks Date: Mon, 04 Jul 2016 15:50:42 -0700 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 (generated by - "") Content-Type: multipart/mixed; boundary="Multipart_Mon_Jul__4_15:50:42_2016-1" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1467672717 14686 80.91.229.3 (4 Jul 2016 22:51:57 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 4 Jul 2016 22:51:57 +0000 (UTC) Cc: Michael Heerdegen , =?UTF-8?B?Q2zDqW1lbnQ=?= Pit--Claudel , emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Jul 05 00:51:47 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1bKCiQ-0003ue-Jo for ged-emacs-devel@m.gmane.org; Tue, 05 Jul 2016 00:51:46 +0200 Original-Received: from localhost ([::1]:50923 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bKCiP-0006Xm-9L for ged-emacs-devel@m.gmane.org; Mon, 04 Jul 2016 18:51:45 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59960) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bKChj-0006XZ-3c for emacs-devel@gnu.org; Mon, 04 Jul 2016 18:51:04 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bKChg-0000io-IB for emacs-devel@gnu.org; Mon, 04 Jul 2016 18:51:02 -0400 Original-Received: from beige.maple.relay.mailchannels.net ([23.83.214.16]:56103) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bKChc-0000i0-9p; Mon, 04 Jul 2016 18:50:56 -0400 X-Sender-Id: _forwarded-from|45.48.239.195 Original-Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 0CA781BC1FE; Mon, 4 Jul 2016 22:50:53 +0000 (UTC) Original-Received: from cobb.liquidweb.com (ip-10-37-2-55.us-west-2.compute.internal [10.37.2.55]) by relay.mailchannels.net (Postfix) with ESMTPA id 1020F1BC321; Mon, 4 Jul 2016 22:50:51 +0000 (UTC) X-Sender-Id: _forwarded-from|45.48.239.195 Original-Received: from cobb.liquidweb.com (cobb.liquidweb.com [10.91.5.35]) (using TLSv1 with cipher DHE-RSA-AES256-SHA) by 0.0.0.0:2500 (trex/5.6.15); Mon, 04 Jul 2016 22:50:52 +0000 X-MC-Relay: Forwarding X-MailChannels-SenderId: _forwarded-from|45.48.239.195 X-MailChannels-Auth-Id: liquidweb X-MC-Loop-Signature: 1467672652715:4141331348 X-MC-Ingress-Time: 1467672652715 Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:50125 helo=server.local.localhost) by cobb.liquidweb.com with esmtp (Exim 4.82) (envelope-from ) id 1bKChQ-000331-9U; Mon, 04 Jul 2016 18:50:44 -0400 X-AuthUser: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 23.83.214.16 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:205163 Archived-At: --Multipart_Mon_Jul__4_15:50:42_2016-1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable The implementation of the `window-start-end-hook` is probably easier to e= xplain with a diff, which is attached. I haven't worked much on the hook= since March 11, 2016, so it applies to the master branch on or about tha= t date. [I think I made a few very minor changes after that, but don't h= ave a diff ready at this time.] Each command loop, I place the following overlays on just the visible win= dow: * [Maybe] draw a vertical line that tracks the cursor position, which is = compatible with `word-wrap` enabled. Sometimes I force it to draw immedi= ately, but most of the time it is on an idle timer. The line stretches f= rom the top of the window to the bottom of the window. * Place line numbers to the left of the left-fringe. * Place pilcrows at the end of each line. [The `buffer-display-table` ca= n't be used for this because those pilcrows are not compatible with the v= ertical line, which also adds pilcrows.] * Draw a horizontal line underneath where the cursor is located. The lin= e stretches from the left-fringe to the right-fringe, and sometimes some = I add bitmaps in the fringe. * If there is a region active, then the region is colored appropriately t= o work with the cross-hairs (describe-above). * I also run some other stuff at the tail end, which is not really that i= mportant to the use case -- e.g., parentheses highlighting, and flyspell. The reason I mentioned the `window-scroll-functions` hook was an assumpti= on (on my part) that Cl=C3=A9ment had initially categorized my potential = usage of the proposed `post-redisplay-hook` as only relating to scrolling= . I just wanted to clarify / differentiate my proposed use case as needi= ng `window-start` and `window-end` each command loop. With respect to the hook running more than once each command loop, it is = only a problem for me because my calculations are costly time-wise (e.g.,= `vertical-motion'). So, I only want to do it one time each command loop= . The `window-start-end-hook` only fires completely when point is fully = visible and when the values for `window-start` and `window-end` are corre= ct (at least in so far as my testing has shown). Someone who uses a simp= le function attached to a hook that runs multiple times each command loop= would not likely be bothered if there is a little waste. I suffer from = a little O.C.D., so just the thought of a function running for no reason = at all bothers me. :) Keith ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; At Mon, 04 Jul 2016 18:06:33 -0400, Stefan Monnier wrote: >=20 > > I am using a slightly modified version of Emacs that has what > > I call a `window-start-end-hook`, which lets me draw overlays on just= the > > visible window every command loop. I needs more work, but that is th= e > > general idea of the modification. >=20 > Could you clarify what you use it for? >=20 > Also is it run after redisplay? If so, how does it work? I mean how d= o > you add overlays *after* redisplay? Do you trigger a second redisplay > right after the first, or is it simply that your overlays don't affect > the display? >=20 > > There are certain movements of point that are not covered by the > > `window-scroll-functions` hook, so that hook cannot be used reliably = for the > > above-mentioned purpose. >=20 > Not sure what point has to do with window-start-end-hook. >=20 > > And, the hook *may* run more than once each command loop, leading to > > potentially wasted time spent running an overlay function that will > > need to run again anyway before the display cycle finishes. >=20 > Is that a problem in practice? >=20 >=20 > Stefan --Multipart_Mon_Jul__4_15:50:42_2016-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="window_start_end_hook.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9idWZmZXIuYwppbmRleCA5OGI2MWMzLi5i YTM3Y2JjIDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmMKKysrIGIvc3JjL2J1ZmZlci5jCkBAIC01 MDczLDYgKzUwNzMsNyBAQCBpbml0X2J1ZmZlcl9vbmNlICh2b2lkKQogICBYU0VURkFTVElOVCAo QlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgZGlzcGxheV90YWJsZSksIGlkeCk7ICsraWR4Owog ICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgc3ludGF4X3RhYmxlKSwg aWR4KTsgKytpZHg7CiAgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBj YWNoZV9sb25nX3NjYW5zKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVm ZmVyX2xvY2FsX2ZsYWdzLCB3aW5kb3dfc3RhcnRfZW5kX2hvb2spLCBpZHgpOyArK2lkeDsKICAg WFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIGNhdGVnb3J5X3RhYmxlKSwg aWR4KTsgKytpZHg7CiAgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBi aWRpX2Rpc3BsYXlfcmVvcmRlcmluZyksIGlkeCk7ICsraWR4OwogICBYU0VURkFTVElOVCAoQlZB UiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgYmlkaV9wYXJhZ3JhcGhfZGlyZWN0aW9uKSwgaWR4KTsg KytpZHg7CkBAIC01MTY2LDYgKzUxNjcsNyBAQCBpbml0X2J1ZmZlcl9vbmNlICh2b2lkKQogICBY U0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9kZWZhdWx0cywgZmlsbF9jb2x1bW4pLCA3MCk7CiAg IFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBsZWZ0X21hcmdpbiksIDApOwog ICBic2V0X2NhY2hlX2xvbmdfc2NhbnMgKCZidWZmZXJfZGVmYXVsdHMsIFF0KTsKKyAgYnNldF93 aW5kb3dfc3RhcnRfZW5kX2hvb2sgKCZidWZmZXJfZGVmYXVsdHMsIFFuaWwpOwogICBic2V0X2Zp bGVfdHJ1ZW5hbWUgKCZidWZmZXJfZGVmYXVsdHMsIFFuaWwpOwogICBYU0VURkFTVElOVCAoQlZB UiAoJmJ1ZmZlcl9kZWZhdWx0cywgZGlzcGxheV9jb3VudCksIDApOwogICBYU0VURkFTVElOVCAo QlZBUiAoJmJ1ZmZlcl9kZWZhdWx0cywgbGVmdF9tYXJnaW5fY29scyksIDApOwpAQCAtNTM3OSw2 ICs1MzgxLDggQEAgc3ltc19vZl9idWZmZXIgKHZvaWQpCiAgIHN0YXRpY3BybyAoJlFTRnVuZGFt ZW50YWwpOwogICBzdGF0aWNwcm8gKCZWYnVmZmVyX2FsaXN0KTsKIAorICBERUZTWU0gKFF3aW5k b3dfc3RhcnRfZW5kX2hvb2ssICJ3aW5kb3ctc3RhcnQtZW5kLWhvb2siKTsKKwogICBERUZTWU0g KFFjaG9pY2UsICJjaG9pY2UiKTsKICAgREVGU1lNIChRbGVmdCwgImxlZnQiKTsKICAgREVGU1lN IChRcmlnaHQsICJyaWdodCIpOwpAQCAtNjE0OCw2ICs2MTUyLDExIEBAIG1haW50YWluZWQgaW50 ZXJuYWxseSBieSB0aGUgRW1hY3MgcHJpbWl0aXZlcy4gIEVuYWJsaW5nIG9yIGRpc2FibGluZwog dGhlIGNhY2hlIHNob3VsZCBub3QgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBhbnkgb2YgdGhlIG1v dGlvbgogZnVuY3Rpb25zOyBpdCBzaG91bGQgb25seSBhZmZlY3QgdGhlaXIgcGVyZm9ybWFuY2Uu ICAqLyk7CiAKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJ3aW5kb3ctc3RhcnQtZW5kLWhvb2siLCAm QlZBUiAoY3VycmVudF9idWZmZXIsIHdpbmRvd19zdGFydF9lbmRfaG9vayksIFFuaWwsCisgICAg ZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIGhvb2sgdXNlZCB0byBvYnRhaW4gbmV3IGB3aW5kb3ctc3Rh cnRgIGFuZCBgd2luZG93LWVuZGAKK2R1cmluZyByZWRpc3BsYXkuICBUaGUgZnVuY3Rpb24gYXR0 YWNoZWQgdG8gdGhpcyBob29rIGhhcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKK1dJTkRPVywg V0lORE9XLVNUQVJULCBXSU5ET1ctRU5ELCBQQk9MLVNUQVJULCBQRU9MLUVORCwgRlVMTFktUC4g ICovKTsKKwogICBERUZWQVJfUEVSX0JVRkZFUiAoInBvaW50LWJlZm9yZS1zY3JvbGwiLCAmQlZB UiAoY3VycmVudF9idWZmZXIsIHBvaW50X2JlZm9yZV9zY3JvbGwpLCBRbmlsLAogCQkgICAgIGRv YzogLyogVmFsdWUgb2YgcG9pbnQgYmVmb3JlIHRoZSBsYXN0IHNlcmllcyBvZiBzY3JvbGwgb3Bl cmF0aW9ucywgb3IgbmlsLiAgKi8pOwogCmRpZmYgLS1naXQgYS9zcmMvYnVmZmVyLmggYi9zcmMv YnVmZmVyLmgKaW5kZXggNTc4M2JmYi4uMzVlZGRmYiAxMDA2NDQKLS0tIGEvc3JjL2J1ZmZlci5o CisrKyBiL3NyYy9idWZmZXIuaApAQCAtNjQzLDYgKzY0Myw5IEBAIHN0cnVjdCBidWZmZXIKICAg ICAgY2FjaGUgYXJlIGVuYWJsZWQuICBTZWUgc2VhcmNoLmMsIGluZGVudC5jIGFuZCBiaWRpLmMg Zm9yIGRldGFpbHMuICAqLwogICBMaXNwX09iamVjdCBjYWNoZV9sb25nX3NjYW5zXzsKIAorICAv KiBUaGUgbmFtZSBvZiB0aGUgaG9vay4gICovCisgIExpc3BfT2JqZWN0IHdpbmRvd19zdGFydF9l bmRfaG9va187CisKICAgLyogSWYgdGhlIHdpZHRoIHJ1biBjYWNoZSBpcyBlbmFibGVkLCB0aGlz IHRhYmxlIGNvbnRhaW5zIHRoZQogICAgICBjaGFyYWN0ZXIgd2lkdGhzIHdpZHRoX3J1bl9jYWNo ZSAoc2VlIGFib3ZlKSBhc3N1bWVzLiAgV2hlbiB3ZQogICAgICBkbyBhIHRob3JvdWdoIHJlZGlz cGxheSwgd2UgY29tcGFyZSB0aGlzIGFnYWluc3QgdGhlIGJ1ZmZlcidzCkBAIC04ODUsNiArODg4 LDExIEBAIHN0cnVjdCBidWZmZXIKICAgIGJ1ZmZlci4gIChTb21lIHNldHRlcnMgdGhhdCBhcmUg cHJpdmF0ZSB0byBhIHNpbmdsZSAuYyBmaWxlIGFyZQogICAgZGVmaW5lZCBhcyBzdGF0aWMgaW4g dGhvc2UgZmlsZXMuKSAgKi8KIElOTElORSB2b2lkCitic2V0X3dpbmRvd19zdGFydF9lbmRfaG9v ayAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT53aW5kb3dfc3Rh cnRfZW5kX2hvb2tfID0gdmFsOworfQorSU5MSU5FIHZvaWQKIGJzZXRfYmlkaV9wYXJhZ3JhcGhf ZGlyZWN0aW9uIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCiB7CiAgIGItPmJp ZGlfcGFyYWdyYXBoX2RpcmVjdGlvbl8gPSB2YWw7CmRpZmYgLS1naXQgYS9zcmMva2V5Ym9hcmQu YyBiL3NyYy9rZXlib2FyZC5jCmluZGV4IDRlMWFjMTUuLjMyOWNiYTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9rZXlib2FyZC5jCisrKyBiL3NyYy9rZXlib2FyZC5jCkBAIC0xMjQ0LDYgKzEyNDQsMTUgQEAg c3RhdGljIGludCByZWFkX2tleV9zZXF1ZW5jZSAoTGlzcF9PYmplY3QgKiwgaW50LCBMaXNwX09i amVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wsIGJvb2wsIGJvb2wsIGJv b2wpOwogc3RhdGljIHZvaWQgYWRqdXN0X3BvaW50X2Zvcl9wcm9wZXJ0eSAocHRyZGlmZl90LCBi b29sKTsKIAorc3RhdGljIHZvaWQKK3NldF93aW5kb3dfc3RhcnRfZW5kX2hvb2sgKHZvaWQpCit7 CisgIExpc3BfT2JqZWN0IHdpbmRvdyA9IChzZWxlY3RlZF93aW5kb3cpOworICBzdHJ1Y3Qgd2lu ZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93ICh3aW5kb3cpOworICB3LT53aW5kb3dfc3RhcnRf ZW5kX2hvb2tfZm9yY2UgPSB0cnVlOworICB3LT53aW5kb3dfc3RhcnRfZW5kX2hvb2tfcGVuZGlu ZyA9IHRydWU7Cit9CisKIExpc3BfT2JqZWN0CiBjb21tYW5kX2xvb3BfMSAodm9pZCkKIHsKQEAg LTEyNjksNiArMTI3OCw4IEBAIGNvbW1hbmRfbG9vcF8xICh2b2lkKQogICAgICAgaWYgKCFOSUxQ IChWcG9zdF9jb21tYW5kX2hvb2spICYmICFOSUxQIChWcnVuX2hvb2tzKSkKIAlzYWZlX3J1bl9o b29rcyAoUXBvc3RfY29tbWFuZF9ob29rKTsKIAorICAgICAgc2V0X3dpbmRvd19zdGFydF9lbmRf aG9vayAoKTsKKwogICAgICAgLyogSWYgZGlzcGxheWluZyBhIG1lc3NhZ2UsIHJlc2l6ZSB0aGUg ZWNobyBhcmVhIHdpbmRvdyB0byBmaXQKIAkgdGhhdCBtZXNzYWdlJ3Mgc2l6ZSBleGFjdGx5LiAg Ki8KICAgICAgIGlmICghTklMUCAoZWNob19hcmVhX2J1ZmZlclswXSkpCkBAIC0xNDg1LDYgKzE0 OTYsOCBAQCBjb21tYW5kX2xvb3BfMSAodm9pZCkKIAogICAgICAgc2FmZV9ydW5faG9va3MgKFFw b3N0X2NvbW1hbmRfaG9vayk7CiAKKyAgICAgIHNldF93aW5kb3dfc3RhcnRfZW5kX2hvb2sgKCk7 CisKICAgICAgIC8qIElmIGRpc3BsYXlpbmcgYSBtZXNzYWdlLCByZXNpemUgdGhlIGVjaG8gYXJl YSB3aW5kb3cgdG8gZml0CiAJIHRoYXQgbWVzc2FnZSdzIHNpemUgZXhhY3RseS4gICovCiAgICAg ICBpZiAoIU5JTFAgKGVjaG9fYXJlYV9idWZmZXJbMF0pKQpkaWZmIC0tZ2l0IGEvc3JjL3dpbmRv dy5oIGIvc3JjL3dpbmRvdy5oCmluZGV4IDJjMDMwMzMuLjVjZDU4YjUgMTAwNjQ0Ci0tLSBhL3Ny Yy93aW5kb3cuaAorKysgYi9zcmMvd2luZG93LmgKQEAgLTM5NSw2ICszOTUsMTYgQEAgc3RydWN0 IHdpbmRvdwogICAgIC8qIFpfQllURSAtIGJ1ZmZlciBwb3NpdGlvbiBvZiB0aGUgbGFzdCBnbHlw aCBpbiB0aGUgY3VycmVudCBtYXRyaXggb2YgVy4KICAgICAgICBTaG91bGQgYmUgbm9ubmVnYXRp dmUsIGFuZCBvbmx5IHZhbGlkIGlmIHdpbmRvd19lbmRfdmFsaWQgaXMgdHJ1ZS4gICovCiAgICAg cHRyZGlmZl90IHdpbmRvd19lbmRfYnl0ZXBvczsKKworICAgIC8qIFRydWUgbWVhbnMgZm9yY2Ug YSBjYWxsIHRvIFZ3aW5kb3dfc3RhcnRfZW5kX2hvb2suICAqLworICAgIGJvb2xfYmYgd2luZG93 X3N0YXJ0X2VuZF9ob29rX2ZvcmNlIDogMTsKKworICAgIC8qIFRydWUgbWVhbnMgdGhlIGhvb2sg aGFzIG5vdCB5ZXQgcnVuIHdpdGggcG9pbnQgZnVsbHkgdmlzaWJsZS4gICovCisgICAgYm9vbF9i ZiB3aW5kb3dfc3RhcnRfZW5kX2hvb2tfcGVuZGluZyA6IDE7CisKKyAgICAvKiBWYWx1ZXMgZm9y IHByZXZpb3VzIGFuZCBjdXJyZW50IGB3aW5kb3ctc3RhcnQnIGFuZCBgd2luZG93LWVuZCcuICAq LworICAgIGludCB3aW5kb3dfc3RhcnRfZW5kX2hvb2tfaW50X3dpbmRvd19zdGFydCwgd2luZG93 X3N0YXJ0X2VuZF9ob29rX2ludF93aW5kb3dfZW5kLAorICAgICAgICB3aW5kb3dfc3RhcnRfZW5k X2hvb2tfaW50X3ByZXZpb3VzX3dpbmRvd19zdGFydCwgd2luZG93X3N0YXJ0X2VuZF9ob29rX2lu dF9wcmV2aW91c193aW5kb3dfZW5kOwogICB9OwogCiAvKiBNb3N0IGNvZGUgc2hvdWxkIHVzZSB0 aGVzZSBmdW5jdGlvbnMgdG8gc2V0IExpc3AgZmllbGRzIGluIHN0cnVjdApkaWZmIC0tZ2l0IGEv c3JjL3hkaXNwLmMgYi9zcmMveGRpc3AuYwppbmRleCA1Yjk2MTQ0Li4wOWUwYzQ5IDEwMDY0NAot LS0gYS9zcmMveGRpc3AuYworKysgYi9zcmMveGRpc3AuYwpAQCAtMTM0MTQsNiArMTM0MTQsOTEg QEAgZG8geyBpZiAoISBwb2xsaW5nX3N0b3BwZWRfaGVyZSkgc3RvcF9wb2xsaW5nICgpOwlcCiBk byB7IGlmIChwb2xsaW5nX3N0b3BwZWRfaGVyZSkgc3RhcnRfcG9sbGluZyAoKTsJXAogICAgICAg IHBvbGxpbmdfc3RvcHBlZF9oZXJlID0gZmFsc2U7IH0gd2hpbGUgKGZhbHNlKQogCitzdGF0aWMg dm9pZAorcnVuX3dpbmRvd19zdGFydF9lbmRfaG9vayAoTGlzcF9PYmplY3Qgd2luZG93LCBzdHJ1 Y3QgdGV4dF9wb3Mgc3RhcnRwLCBFTUFDU19JTlQgcG9zaW50LCBzdHJ1Y3QgaXQgaXQsIGNoYXIg KnN0cmluZywgYm9vbCBmb3JjZSkKK3sKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZl X3dpbmRvdyAod2luZG93KTsKKyAgTGlzcF9PYmplY3QgYnVmOworICBzdHJ1Y3QgYnVmZmVyICpi OworICBidWYgPSB3LT5jb250ZW50czsKKyAgQ0hFQ0tfQlVGRkVSIChidWYpOworICBiID0gWEJV RkZFUiAoYnVmKTsKKyAgc3RydWN0IGJ1ZmZlciAqb2xkX2J1ZmZlciA9IE5VTEw7CisgIHZvaWQg Kml0ZGF0YSA9IE5VTEw7CisgIGJvb2wgZnVsbHlfcCA9IGZhbHNlOworICBpbnQgeCwgeSwgcnRv cCwgcmJvdCwgcm93aCwgdnBvcywgc3RhcnRwX2ludGVnZXIsIGVuZHAsIHBib2xfc3RhcnRwLCBw ZW9sX2VuZHA7CisgIHN0YXJ0cF9pbnRlZ2VyID0gQ0hBUlBPUyAoc3RhcnRwKTsKKyAgaWYgKGIg IT0gY3VycmVudF9idWZmZXIpCisgICAgeworICAgICAgb2xkX2J1ZmZlciA9IGN1cnJlbnRfYnVm ZmVyOworICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAoYik7CisgICAgfQorICBpZiAody0+d2lu ZG93X3N0YXJ0X2VuZF9ob29rX3BlbmRpbmcKKyAgICAgICYmICFOSUxQIChCVkFSIChjdXJyZW50 X2J1ZmZlciwgd2luZG93X3N0YXJ0X2VuZF9ob29rKSkpCisgICAgeworICAgICAgaWYgKCgocG9z aW50ID49IENIQVJQT1MgKHN0YXJ0cCkgJiYgcG9zaW50IDw9IEJVRl9aViAoYikpCisgICAgICAg ICAgICAmJiBDSEFSUE9TIChzdGFydHApID49IEJVRl9CRUdWIChiKQorICAgICAgICAgICAgJiYg Q0hBUlBPUyAoc3RhcnRwKSA8PSBCVUZfWlYgKGIpCisgICAgICAgICAgICAmJiBwb3NfdmlzaWJs ZV9wICh3LCBwb3NpbnQsICZ4LCAmeSwgJnJ0b3AsICZyYm90LCAmcm93aCwgJnZwb3MpKSkKKyAg ICAgICAgZnVsbHlfcCA9ICFydG9wICYmICFyYm90OworICAgICAgaWYgKGZ1bGx5X3ApCisgICAg ICAgIHsKKyAgICAgICAgICB3LT53aW5kb3dfc3RhcnRfZW5kX2hvb2tfaW50X3ByZXZpb3VzX3dp bmRvd19zdGFydCA9IHctPndpbmRvd19zdGFydF9lbmRfaG9va19pbnRfd2luZG93X3N0YXJ0Owor ICAgICAgICAgIHctPndpbmRvd19zdGFydF9lbmRfaG9va19pbnRfd2luZG93X3N0YXJ0ID0gc3Rh cnRwX2ludGVnZXI7CisgICAgICAgICAgaXRkYXRhID0gYmlkaV9zaGVsdmVfY2FjaGUgKCk7Cisg ICAgICAgICAgc3RhcnRfZGlzcGxheSAoJml0LCB3LCBzdGFydHApOworICAgICAgICAgIG1vdmVf aXRfdmVydGljYWxseSAoJml0LCB3aW5kb3dfYm94X2hlaWdodCAodykpOworICAgICAgICAgIGlm IChpdC5jdXJyZW50X3kgPCBpdC5sYXN0X3Zpc2libGVfeSkKKyAgICAgICAgICAgIG1vdmVfaXRf cGFzdF9lb2wgKCZpdCk7CisgICAgICAgICAgZW5kcCA9IChJVF9DSEFSUE9TIChpdCkpOworICAg ICAgICAgIHctPndpbmRvd19zdGFydF9lbmRfaG9va19pbnRfcHJldmlvdXNfd2luZG93X2VuZCA9 IHctPndpbmRvd19zdGFydF9lbmRfaG9va19pbnRfd2luZG93X2VuZDsKKyAgICAgICAgICB3LT53 aW5kb3dfc3RhcnRfZW5kX2hvb2tfaW50X3dpbmRvd19lbmQgPSBlbmRwOworICAgICAgICAgIGJp ZGlfdW5zaGVsdmVfY2FjaGUgKGl0ZGF0YSwgZmFsc2UpOworICAgICAgICAgIFNFVF9QVCAoc3Rh cnRwX2ludGVnZXIpOworICAgICAgICAgIHBib2xfc3RhcnRwID0gWElOVCAoRmxpbmVfYmVnaW5u aW5nX3Bvc2l0aW9uIChRbmlsKSk7CisgICAgICAgICAgU0VUX1BUIChlbmRwKTsKKyAgICAgICAg ICBwZW9sX2VuZHAgPSBYSU5UIChGbGluZV9lbmRfcG9zaXRpb24gKFFuaWwpKTsKKyAgICAgICAg ICBTRVRfUFQgKHBvc2ludCk7CisjaWZkZWYgR0xZUEhfREVCVUcKKyAgICAgICAgICBkZWJ1Z19t ZXRob2RfYWRkICh3LCAiJXMgLS0geDogJWQgfCB5OiAlZCB8IHN0YXJ0cDogJWQgfCBlbmRwOiAl ZCB8IHBib2xfc3RhcnRwOiAlZCB8IHBlb2xfZW5kcDogJWQiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cmluZywgeCwgeSwgc3RhcnRwX2ludGVnZXIsIGVuZHAsIHBib2xfc3Rh cnRwLCBwZW9sX2VuZHApOworI2VuZGlmCisgICAgICAgICAgLyogUmVzZXQgdGhlIGZsYWcgX2Jl Zm9yZV8gY2FsbGluZyBMaXNwLCBub3QgYWZ0ZXIsIHNvIHRoYXQKKyAgICAgICAgICAgICBpZiBM aXNwIGRvZXMgc2lnbmFsIGFuIGVycm9yLCB0aGUgZmxhZyB3aWxsIGJlIHJlc2V0LCBhbmQKKyAg ICAgICAgICAgICB3b24ndCBjYXVzZSB0aGUgaG9vayB0byBiZSBjYWxsZWQgYWQgbmF1c2VhbS4g ICovCisgICAgICAgICAgdy0+d2luZG93X3N0YXJ0X2VuZF9ob29rX3BlbmRpbmcgPSBmYWxzZTsK KyAgICAgICAgICAvKiBXaGVuIGNhbGxpbmcgTGlzcCBmcm9tIHJlZGlzcGxheSwgYWx3YXlzIHVz ZSBzYWZlX2NhbGwsIHRvIGJlCisgICAgICAgICAgICAgcHJvdGVjdGVkIGFnYWluc3QgZXJyb3Jz IHNpZ25hbGVkIGJ5IHRoYXQgTGlzcC4gICovCisgICAgICAgICAgLyogc2FmZV9jYWxsOiAgZm4s IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcgICovCisgICAgICAgICAg c2FmZV9jYWxsICg4LAorICAgICAgICAgICAgICBRcnVuX2hvb2tfd2l0aF9hcmdzLAorICAgICAg ICAgICAgICBRd2luZG93X3N0YXJ0X2VuZF9ob29rLAorICAgICAgICAgICAgICB3aW5kb3csCisg ICAgICAgICAgICAgIG1ha2VfbnVtYmVyIChzdGFydHBfaW50ZWdlciksCisgICAgICAgICAgICAg IG1ha2VfbnVtYmVyIChlbmRwKSwKKyAgICAgICAgICAgICAgbWFrZV9udW1iZXIgKHBib2xfc3Rh cnRwKSwKKyAgICAgICAgICAgICAgbWFrZV9udW1iZXIgKHBlb2xfZW5kcCksCisgICAgICAgICAg ICAgIGZ1bGx5X3AgPyBRdCA6IFFuaWwpOworICAgICAgICAgIC8qIEF0IHRoZSBjYXRjaC1hbGwg d2hlbiBzY3JvbGxpbmcgd2l0aCB0aGUgbW91c2Ugd2hlZWwsIHRoaXMgbmV4dCBzZWN0aW9uIGNh dXNlcyBhIHZpc3VhbCBmbGFzaAorICAgICAgICAgIG9mIGN1cnNvciBpbiB0aGUgd3JvbmcgcG9z aXRpb24gZHVlIHRvIFNFVF9QVCBhYm92ZS4gICovCisgICAgICAgICAgaWYgKGZvcmNlKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBjbGVhcl9nbHlwaF9tYXRyaXggKHctPmRlc2lyZWRf bWF0cml4KTsKKyAgICAgICAgICAgICAgdHJ5X3dpbmRvdyAod2luZG93LCBzdGFydHAsIDApOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisjaWZk ZWYgR0xZUEhfREVCVUcKKyAgICAgICAgICAgIC8qIFNlZSB0aGUgZG9jLXN0cmluZyBmb3IgYHBv cy12aXNpYmxlLWluLXdpbmRvdy1wJy4gICovCisgICAgICAgICAgICBkZWJ1Z19tZXRob2RfYWRk ICh3LCAiJXMgLS0geDogJWQgfCB5OiAlZCB8IHJ0b3A6ICVkIHwgcmJvdCAlZCB8IHJvd2g6ICVk IHwgdnBvczogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCB4 LCB5LCBydG9wLCByYm90LCByb3doLCB2cG9zKTsKKyNlbmRpZgorICAgICAgICAgIH0KKyAgICB9 CisgIGlmIChvbGRfYnVmZmVyKQorICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIp OworfQogCiAvKiBQZXJoYXBzIGluIHRoZSBmdXR1cmUgYXZvaWQgcmVjZW50ZXJpbmcgd2luZG93 cyBpZiBpdAogICAgaXMgbm90IG5lY2Vzc2FyeTsgY3VycmVudGx5IHRoYXQgY2F1c2VzIHNvbWUg cHJvYmxlbXMuICAqLwpAQCAtMTM2ODcsNiArMTM3NzIsNyBAQCByZWRpc3BsYXlfaW50ZXJuYWwg KHZvaWQpCiAgICAgICAmJiBtYXRjaF9wCiAgICAgICAmJiAhdy0+Zm9yY2Vfc3RhcnQKICAgICAg ICYmICF3LT5vcHRpb25hbF9uZXdfc3RhcnQKKyAgICAgICYmICF3LT53aW5kb3dfc3RhcnRfZW5k X2hvb2tfZm9yY2UKICAgICAgIC8qIFBvaW50IG11c3QgYmUgb24gdGhlIGxpbmUgdGhhdCB3ZSBo YXZlIGluZm8gcmVjb3JkZWQgYWJvdXQuICAqLwogICAgICAgJiYgUFQgPj0gQ0hBUlBPUyAodGxi dWZwb3MpCiAgICAgICAmJiBQVCA8PSBaIC0gQ0hBUlBPUyAodGxlbmRwb3MpCkBAIC0xNTM4OCw2 ICsxNTQ3NCw4IEBAIHRyeV9zY3JvbGxpbmcgKExpc3BfT2JqZWN0IHdpbmRvdywgYm9vbCBqdXN0 X3RoaXNfb25lX3AsCiAgIC8qIFJ1biB3aW5kb3cgc2Nyb2xsIGZ1bmN0aW9ucy4gICovCiAgIHN0 YXJ0cCA9IHJ1bl93aW5kb3dfc2Nyb2xsX2Z1bmN0aW9ucyAod2luZG93LCBzdGFydHApOwogCisg IHJ1bl93aW5kb3dfc3RhcnRfZW5kX2hvb2sgKHdpbmRvdywgc3RhcnRwLCBQVCwgaXQsICJ0cnlf c2Nyb2xsaW5nIiwgZmFsc2UpOworCiAgIC8qIERpc3BsYXkgdGhlIHdpbmRvdy4gIEdpdmUgdXAg aWYgbmV3IGZvbnRzIGFyZSBsb2FkZWQsIG9yIGlmIHBvaW50CiAgICAgIGRvZXNuJ3QgYXBwZWFy LiAgKi8KICAgaWYgKCF0cnlfd2luZG93ICh3aW5kb3csIHN0YXJ0cCwgMCkpCkBAIC0xNjA1Myw2 ICsxNjE0MSw3IEBAIHJlZGlzcGxheV93aW5kb3cgKExpc3BfT2JqZWN0IHdpbmRvdywgYm9vbCBq dXN0X3RoaXNfb25lX3ApCiAgIHB0cmRpZmZfdCBiZWdfdW5jaGFuZ2VkLCBlbmRfdW5jaGFuZ2Vk OwogICBpbnQgZnJhbWVfbGluZV9oZWlnaHQ7CiAgIGJvb2wgdXNlX2Rlc2lyZWRfbWF0cml4Owor ICBib29sIHdpbmRvd19zdGFydF9lbmRfaG9va19zdXBwcmVzc193c2YgPSBmYWxzZTsKIAogICBT RVRfVEVYVF9QT1MgKGxwb2ludCwgUFQsIFBUX0JZVEUpOwogICBvcG9pbnQgPSBscG9pbnQ7CkBA IC0xNjI0MywxMyArMTYzMzIsMTYgQEAgcmVkaXNwbGF5X3dpbmRvdyAoTGlzcF9PYmplY3Qgd2lu ZG93LCBib29sIGp1c3RfdGhpc19vbmVfcCkKIAogICAvKiBJZiBzb21lb25lIHNwZWNpZmllZCBh IG5ldyBzdGFydGluZyBwb2ludCBidXQgZGlkIG5vdCBpbnNpc3QsCiAgICAgIGNoZWNrIHdoZXRo ZXIgaXQgY2FuIGJlIHVzZWQuICAqLwotICBpZiAoKHctPm9wdGlvbmFsX25ld19zdGFydCB8fCB3 aW5kb3dfZnJvemVuX3AgKHcpKQorICBpZiAoKHctPm9wdGlvbmFsX25ld19zdGFydCB8fCB3LT53 aW5kb3dfc3RhcnRfZW5kX2hvb2tfZm9yY2UgfHwgd2luZG93X2Zyb3plbl9wICh3KSkKICAgICAg ICYmIENIQVJQT1MgKHN0YXJ0cCkgPj0gQkVHVgogICAgICAgJiYgQ0hBUlBPUyAoc3RhcnRwKSA8 PSBaVikKICAgICB7CisKKyAgICAgIGlmICh3LT53aW5kb3dfc3RhcnRfZW5kX2hvb2tfZm9yY2Ug JiYgIXctPm9wdGlvbmFsX25ld19zdGFydCAmJiAhd2luZG93X2Zyb3plbl9wICh3KSAmJiAhdy0+ Zm9yY2Vfc3RhcnQpCisgICAgICAgIHdpbmRvd19zdGFydF9lbmRfaG9va19zdXBwcmVzc193c2Yg PSB0cnVlOworCiAgICAgICBwdHJkaWZmX3QgaXRfY2hhcnBvczsKIAotICAgICAgdy0+b3B0aW9u YWxfbmV3X3N0YXJ0ID0gZmFsc2U7CiAgICAgICBzdGFydF9kaXNwbGF5ICgmaXQsIHcsIHN0YXJ0 cCk7CiAgICAgICBtb3ZlX2l0X3RvICgmaXQsIFBULCAwLCBpdC5sYXN0X3Zpc2libGVfeSwgLTEs CiAJCSAgTU9WRV9UT19QT1MgfCBNT1ZFX1RPX1ggfCBNT1ZFX1RPX1kpOwpAQCAtMTYyNzAsMTQg KzE2MzYyLDI4IEBAIHJlZGlzcGxheV93aW5kb3cgKExpc3BfT2JqZWN0IHdpbmRvdywgYm9vbCBq dXN0X3RoaXNfb25lX3ApCiAJICAgIHctPmZvcmNlX3N0YXJ0ID0gdHJ1ZTsKICNpZmRlZiBHTFlQ SF9ERUJVRwogCSAgaWYgKHctPmZvcmNlX3N0YXJ0KQotCSAgICB7Ci0JICAgICAgaWYgKHdpbmRv d19mcm96ZW5fcCAodykpCi0JCWRlYnVnX21ldGhvZF9hZGQgKHcsICJzZXQgZm9yY2Vfc3RhcnQg ZnJvbSBmcm96ZW4gd2luZG93IHN0YXJ0Iik7Ci0JICAgICAgZWxzZQotCQlkZWJ1Z19tZXRob2Rf YWRkICh3LCAic2V0IGZvcmNlX3N0YXJ0IGZyb20gb3B0aW9uYWxfbmV3X3N0YXJ0Iik7Ci0JICAg IH0KKyAgICB7CisgICAgICBpZiAod2luZG93X2Zyb3plbl9wICh3KSkKKyAgICAgICAgeworICAg ICAgICBkZWJ1Z19tZXRob2RfYWRkICh3LCAicmVkaXNwbGF5X3dpbmRvdyAoZm9yY2Vfc3RhcnQp OiAgd2luZG93X2Zyb3plbl9wICh3KSIpOworICAgICAgfQorICAgICAgZWxzZSBpZiAody0+b3B0 aW9uYWxfbmV3X3N0YXJ0KQorICAgICAgICB7CisgICAgICAgIGRlYnVnX21ldGhvZF9hZGQgKHcs ICJyZWRpc3BsYXlfd2luZG93IChmb3JjZV9zdGFydCk6ICB3LT5vcHRpb25hbF9uZXdfc3RhcnQi KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHctPndpbmRvd19zdGFydF9lbmRfaG9va19mb3Jj ZSkKKyAgICAgICAgeworICAgICAgICBkZWJ1Z19tZXRob2RfYWRkICh3LCAicmVkaXNwbGF5X3dp bmRvdyAoZm9yY2Vfc3RhcnQpOiAgdy0+d2luZG93X3N0YXJ0X2VuZF9ob29rX2ZvcmNlIik7Cisg ICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgZGVidWdfbWV0aG9kX2FkZCAo dywgInJlZGlzcGxheV93aW5kb3cgKGZvcmNlX3N0YXJ0KTogIFRoaXMgc2l0dWF0aW9uIGlzIG5v dCB5ZXQgY29udGVtcGxhdGVkLiIpOworICAgICAgfQorICAgIH0KICNlbmRpZgogCX0KKyAgICAg IHctPm9wdGlvbmFsX25ld19zdGFydCA9IGZhbHNlOworICAgICAgdy0+d2luZG93X3N0YXJ0X2Vu ZF9ob29rX2ZvcmNlID0gZmFsc2U7CiAgICAgfQogCiAgZm9yY2Vfc3RhcnQ6CkBAIC0xNjMwNSwx MSArMTY0MTEsMTggQEAgcmVkaXNwbGF5X3dpbmRvdyAoTGlzcF9PYmplY3Qgd2luZG93LCBib29s IGp1c3RfdGhpc19vbmVfcCkKIAkgdGhhbiB0byBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wIGNh bGxpbmcgdGhlIGhvb2sgZnVuY3Rpb25zCiAJIGFuZCBoYXZpbmcgdGhlbSBnZXQgbW9yZSBlcnJv cnMuICAqLwogICAgICAgaWYgKCF1cGRhdGVfbW9kZV9saW5lCi0JICB8fCAhIE5JTFAgKFZ3aW5k b3dfc2Nyb2xsX2Z1bmN0aW9ucykpCisJICB8fCAhIE5JTFAgKFZ3aW5kb3dfc2Nyb2xsX2Z1bmN0 aW9ucykKKwkgIHx8ICEgTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIHdpbmRvd19zdGFydF9l bmRfaG9vaykpKQogCXsKIAkgIHVwZGF0ZV9tb2RlX2xpbmUgPSB0cnVlOwogCSAgdy0+dXBkYXRl X21vZGVfbGluZSA9IHRydWU7Ci0JICBzdGFydHAgPSBydW5fd2luZG93X3Njcm9sbF9mdW5jdGlv bnMgKHdpbmRvdywgc3RhcnRwKTsKKworICAvKiBSdW4gd2luZG93IHNjcm9sbCBmdW5jdGlvbnMu ICAqLworICBpZiAoIXdpbmRvd19zdGFydF9lbmRfaG9va19zdXBwcmVzc193c2YpCisgICAgc3Rh cnRwID0gcnVuX3dpbmRvd19zY3JvbGxfZnVuY3Rpb25zICh3aW5kb3csIHN0YXJ0cCk7CisKKyAg cnVuX3dpbmRvd19zdGFydF9lbmRfaG9vayAod2luZG93LCBzdGFydHAsIFBULCBpdCwgInJlZGlz cGxheV93aW5kb3cgKGZvcmNlX3N0YXJ0KSIsIGZhbHNlKTsKKwogCX0KIAogICAgICAgaWYgKENI QVJQT1MgKHN0YXJ0cCkgPCBCRUdWKQpAQCAtMTY0NjAsOSArMTY1NzMsMTMgQEAgcmVkaXNwbGF5 X3dpbmRvdyAoTGlzcF9PYmplY3Qgd2luZG93LCBib29sIGp1c3RfdGhpc19vbmVfcCkKIAkgIGdv dG8gdHJ5X3RvX3Njcm9sbDsKIAl9CiAKKyAgLyogV2hlbiBzY3JvbGxpbmcgd2l0aCB0aGUgbW91 c2Ugd2hlZWwsIFBUIGhhcyBub3QgeWV0IGJlZW4gcmVzZXQgc28gd2UgdXNlIENIQVJQT1MgKHN0 YXJ0cCkuICAqLworICBydW5fd2luZG93X3N0YXJ0X2VuZF9ob29rICh3aW5kb3csIHN0YXJ0cCwg Q0hBUlBPUyAoc3RhcnRwKSwgaXQsICJyZWRpc3BsYXlfd2luZG93OiAgY2F0Y2gtYWxsIiwgZmFs c2UpOworCiAjaWZkZWYgR0xZUEhfREVCVUcKLSAgICAgIGRlYnVnX21ldGhvZF9hZGQgKHcsICJm b3JjZWQgd2luZG93IHN0YXJ0Iik7CisgICAgICBkZWJ1Z19tZXRob2RfYWRkICh3LCAicmVkaXNw bGF5X3dpbmRvdzogIGZvcmNlZCB3aW5kb3cgc3RhcnQiKTsKICNlbmRpZgorCiAgICAgICBnb3Rv IGRvbmU7CiAgICAgfQogCkBAIC0xNjU3Nyw2ICsxNjY5NCw3IEBAIHJlZGlzcGxheV93aW5kb3cg KExpc3BfT2JqZWN0IHdpbmRvdywgYm9vbCBqdXN0X3RoaXNfb25lX3ApCiAJICAgICBiZWNhdXNl IGEgd2luZG93IHNjcm9sbCBmdW5jdGlvbiBjYW4gaGF2ZSBjaGFuZ2VkIHRoZQogCSAgICAgYnVm ZmVyLiAgKi8KIAkgIHx8ICFOSUxQIChWd2luZG93X3Njcm9sbF9mdW5jdGlvbnMpCisJICB8fCAh TklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIHdpbmRvd19zdGFydF9lbmRfaG9vaykpCiAJICB8 fCBNSU5JX1dJTkRPV19QICh3KQogCSAgfHwgISh1c2VkX2N1cnJlbnRfbWF0cml4X3AKIAkgICAg ICAgPSB0cnlfd2luZG93X3JldXNpbmdfY3VycmVudF9tYXRyaXggKHcpKSkKQEAgLTE2Nzc0LDYg KzE2ODkyLDggQEAgcmVkaXNwbGF5X3dpbmRvdyAoTGlzcF9PYmplY3Qgd2luZG93LCBib29sIGp1 c3RfdGhpc19vbmVfcCkKICAgLyogUnVuIHNjcm9sbCBob29rcy4gICovCiAgIHN0YXJ0cCA9IHJ1 bl93aW5kb3dfc2Nyb2xsX2Z1bmN0aW9ucyAod2luZG93LCBpdC5jdXJyZW50LnBvcyk7CiAKKyAg cnVuX3dpbmRvd19zdGFydF9lbmRfaG9vayAod2luZG93LCBzdGFydHAsIFBULCBpdCwgInJlZGlz cGxheV93aW5kb3cgKHJlY2VudGVyKSIsIGZhbHNlKTsKKwogICAvKiBSZWRpc3BsYXkgdGhlIHdp bmRvdy4gICovCiAgIHVzZV9kZXNpcmVkX21hdHJpeCA9IGZhbHNlOwogICBpZiAoIWN1cnJlbnRf bWF0cml4X3VwX3RvX2RhdGVfcApAQCAtMTY3ODIsNiArMTY5MDIsNyBAQCByZWRpc3BsYXlfd2lu ZG93IChMaXNwX09iamVjdCB3aW5kb3csIGJvb2wganVzdF90aGlzX29uZV9wKQogICAgICAgLyog RG9uJ3QgdXNlIHRyeV93aW5kb3dfcmV1c2luZ19jdXJyZW50X21hdHJpeCBpbiB0aGlzIGNhc2UK IAkgYmVjYXVzZSBpdCBjYW4gaGF2ZSBjaGFuZ2VkIHRoZSBidWZmZXIuICAqLwogICAgICAgfHwg IU5JTFAgKFZ3aW5kb3dfc2Nyb2xsX2Z1bmN0aW9ucykKKyAgICAgIHx8ICFOSUxQIChCVkFSIChj dXJyZW50X2J1ZmZlciwgd2luZG93X3N0YXJ0X2VuZF9ob29rKSkKICAgICAgIHx8ICFqdXN0X3Ro aXNfb25lX3AKICAgICAgIHx8IE1JTklfV0lORE9XX1AgKHcpCiAgICAgICB8fCAhKHVzZWRfY3Vy cmVudF9tYXRyaXhfcApAQCAtMTY5MDIsNyArMTcwMjMsMTMgQEAgcmVkaXNwbGF5X3dpbmRvdyAo TGlzcF9PYmplY3Qgd2luZG93LCBib29sIGp1c3RfdGhpc19vbmVfcCkKIAkgIGNsZWFyX2dseXBo X21hdHJpeCAody0+ZGVzaXJlZF9tYXRyaXgpOwogCSAgaWYgKDEgPT0gdHJ5X3dpbmRvdyAod2lu ZG93LCBpdC5jdXJyZW50LnBvcywKIAkJCSAgICAgICBUUllfV0lORE9XX0NIRUNLX01BUkdJTlMp KQotCSAgICBnb3RvIGRvbmU7CisgICAgeworICAgICAgLyogVG8gYXZvaWQgYSB2aXN1YWwgaGlj ay11cCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHNldCB0aGUgbGFzdCBhcmd1bWVudCB0byB0cnVlIC0t IHRoYXQgdHJpZ2dlcnMKKyAgICAgIGBjbGVhcl9nbHlwaF9tYXRyaXgnIGFuZCBgdHJ5X3dpbmRv dycgYWZ0ZXIgdGhlIGZ1bmN0aW9ucyBhdHRhY2hlZCB0byB0aGUgaG9vayBoYXZlIHJ1bi4gICov CisgICAgICBydW5fd2luZG93X3N0YXJ0X2VuZF9ob29rICh3aW5kb3csIGl0LmN1cnJlbnQucG9z LCBQVCwgaXQsICJyZWRpc3BsYXlfd2luZG93IChwb3N0LXJlY2VudGVyKSIsIHRydWUpOworICAg ICAgZ290byBkb25lOworICAgIH0KKwogCX0KIAogICAgICAgLyogSWYgY2VudGVyaW5nIHBvaW50 IGZhaWxlZCB0byBtYWtlIHRoZSB3aG9sZSBsaW5lIHZpc2libGUsCg== --Multipart_Mon_Jul__4_15:50:42_2016-1--