From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Vladimir Kazanov Newsgroups: gmane.emacs.devel Subject: Re: [PATCH] User-defined fringe tooltips (a request for review) Date: Wed, 27 Mar 2024 10:59:50 +0000 Message-ID: References: <83sf3xgimq.fsf@gnu.org> <83plyzfoe4.fsf@gnu.org> <83plyxca0t.fsf@gnu.org> <8334vrczig.fsf@gnu.org> <86frwejkxe.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000f398110614a24e7f" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24894"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Wed Mar 27 12:00:51 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rpR1W-0006Gy-Sy for ged-emacs-devel@m.gmane-mx.org; Wed, 27 Mar 2024 12:00:51 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rpR0u-0003mY-Ei; Wed, 27 Mar 2024 07:00:12 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rpR0r-0003kC-Pg for emacs-devel@gnu.org; Wed, 27 Mar 2024 07:00:09 -0400 Original-Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rpR0n-0007Vz-Q3; Wed, 27 Mar 2024 07:00:08 -0400 Original-Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-515a86daf09so4890461e87.3; Wed, 27 Mar 2024 04:00:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711537202; x=1712142002; darn=gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=MdWK2iIc41z+92ZggQpFdG9QiNXdUxasUpr3NS7Dg1Q=; b=O7oVGLKZKj/UDAs8ydFaSkKxfFedch2R37r4tU4qnYitKDh1l/cU7mYadx5NjWu6jO jpjb+3rBGms2TjwKVfc4fPThTyM2WUrgxdB7UFKQJ0NuZeJj7E9oByy+UbeMXfDtyYM6 +9M1tMi2LRKc25ePT0ZzOsVUGYa9G/KnpfppKH06+9NJCxXLECwbs9dprmHrau1cbay9 iowDBKcezdxSuawTqRnmxlCTAxxYoV+vE7kqyeOMaS7PYms+7q2vfoMqS7Dt0ZgPztpn UT0N8J3/zYbJkYTNsbL8LXcnQaeff12yJSAIiFPRJBHzrBSzBvAmpLoFOkCpWCCaf0tY qAGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711537202; x=1712142002; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MdWK2iIc41z+92ZggQpFdG9QiNXdUxasUpr3NS7Dg1Q=; b=Nx9eN+KKZnPvXd5gTTr5/U2vYNzatghSENNbuQk8/LPrbYhwtmMqbj90F0ajvhZkQB /Ic0dZ+6i6ZkyUJoEImbF2ifa53cwCfmL0iy+eFOZ+XFPDQmhEc1gXV63DXJTgy4Jgsz zmzIJhs100QQZEFL7JWgIWU463fHGZ+zOqOUKu5ogALQDJVoje6OaTxsBvjXcEhc2nsW RHcs+Fa8m+iBr6znSf3ye92T4jDrtXftMTHcegyHcvP82mqj5sRHVl8gK6KBau0e1rDz 1oeCE8Qqc9n5Vk9Jf4aYX4hBVNzcnaCErdUqzJKyzSshqlVuuCiSj6nGpnSEewciIkec W+3g== X-Gm-Message-State: AOJu0YwPUsQM1kGF0leyWSZtimNpn2ZH4hFZtBD8ZXWgZbiASzkzRPxZ KgDbmtzPq4eo2pHRS4oNloF74fcv2qe1a7irr1h2BP/+GcmubCZsFMVxKc+M1FznDtKSS4t4aRD fsFLcOIUpUdCpxrlLr665cuRpOzBQKaKKN2Ur X-Google-Smtp-Source: AGHT+IH9ulhmY2qBj1mlq18A0lr9zWXGBtYvBLti754xkKN1ThP4XIqCDYaCKJIWw1YysDFusk4qsQCigAC9NzT6MEA= X-Received: by 2002:a19:ca0c:0:b0:515:a58e:82e with SMTP id a12-20020a19ca0c000000b00515a58e082emr710360lfg.62.1711537202100; Wed, 27 Mar 2024 04:00:02 -0700 (PDT) In-Reply-To: Received-SPF: pass client-ip=2a00:1450:4864:20::130; envelope-from=vekazanov@gmail.com; helo=mail-lf1-x130.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 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-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:317328 Archived-At: --000000000000f398110614a24e7f Content-Type: text/plain; charset="UTF-8" Hi Eli, Attached is a v2 patch (for discussion, not yet finished) that demonstrates the approach. Examples of what works and what doesn't: ;; single spec, list of specs, vector of specs all work now (insert (propertize "foo" 'display '(right-fringe left-arrow warning "right tooltip")))foo (insert (propertize "foo" 'display '((left-fringe right-arrow warning "left tooltip"))))foo (insert (propertize "foo" 'display '[(right-fringe left-arrow warning "right tooltip")])) ;; overlays with display props also work (overlay-put (make-overlay 1 2) 'display `(left-fringe right-arrow warning "left tooltip")) ;; overlays with zero length DO NOT work (and provide no fringe indicators) (overlay-put (make-overlay 1 1) 'display `(left-fringe right-arrow warning "left tooltip")) ;; 'before-string and 'after-string DO NOT work (overlay-put (make-overlay (point) (point)) 'before-string (propertize "x" 'display `(left-fringe right-arrow warning "left tooltip"))) Adding (when CONDITION . SPEC) support is easy, still figuring out 'before-string/'after-string. Thanks On Tue, 26 Mar 2024 at 22:16, Vladimir Kazanov wrote: > > Hey, > > I just did a deep dive into the code again - looking for a cleaner solution. > > > The condition is only evaluated at glyph generation time, as for any > > other display property. When the tooltip should be displayed, the > > condition is not relevant, since if it were false when the glyphs were > > generated, you wouldn't have had the fringe bitmap shown in the first > > place. > > > > However, I think there's an easy way of making the implementation > > easier: just introduce a new overlay property called, say, > > fringe-help-echo, and put that property on the same text as the > > display property which produces the fringe. Then the code in > > note_fringe_highlight should simply check if the text which yielded > > the fringe bitmap also has this special property on it, and if so, > > display the tooltip. > > Maybe an even easier solution would work: > > 1. Record buffer position of the fringe display spec in struct it. > Then move it to glyph_row the same way user_fringe_bitmap_id's are > copied over. It is just a ptrdiff so nothing out of place for > glyph_rows. > > 2. In note_fringe_highlight it becomes easy to retrieve the fringe > display spec using a single call to get_char_property_and_overlay(), > no need to iterate over a line, or have the implementation detail leak > into text properties. > > What I don't really understand is whether I should handle overlays > with after-string/before-string properties. Overlays can contain > strings propertized with fringe display specs as well. In fact, there > is an example showing this trick in the manual > (https://www.gnu.org/software/emacs/manual/html_node/elisp/Fringe-Bitmaps.html). > > Should I just go through all overlays touching the spec position and > parse into the after-string/before-string as well? > > Pardon the many questions, display code has many moving parts. > > Thank you > > -- > Regards, > > Vladimir Kazanov -- Regards, Vladimir Kazanov --000000000000f398110614a24e7f Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-Tooltips-for-user-defined-fringe-indicators.patch" Content-Disposition: attachment; filename="v2-0001-Tooltips-for-user-defined-fringe-indicators.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu9otryw0 RnJvbSAzZjNiYzE1YWU0MTA2ODA3MzlkOGVhM2Y2MzRlMThiNjljOTY1YzIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWbGFkaW1pciBLYXphbm92IDx2ZWthemFub3ZAZ21haWw+CkRh dGU6IFN1biwgMjQgRGVjIDIwMjMgMTE6MTM6MTAgKzAwMDAKU3ViamVjdDogW1BBVENIIHYyXSBU b29sdGlwcyBmb3IgdXNlci1kZWZpbmVkIGZyaW5nZSBpbmRpY2F0b3JzCgotLS0KIGRvYy9saXNw cmVmL2Rpc3BsYXkudGV4aSB8ICAgNyArKy0KIGV0Yy9ORVdTICAgICAgICAgICAgICAgICB8ICAg NiArKwogZXRjL1RPRE8gICAgICAgICAgICAgICAgIHwgICA0IC0tCiBzcmMvZGlzcGV4dGVybi5o ICAgICAgICAgfCAgMTMgKysrKwogc3JjL3hkaXNwLmMgICAgICAgICAgICAgIHwgMTI0ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogNSBmaWxlcyBjaGFuZ2VkLCAxNDQg aW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL2xpc3ByZWYv ZGlzcGxheS50ZXhpIGIvZG9jL2xpc3ByZWYvZGlzcGxheS50ZXhpCmluZGV4IGI0OTc5NjdjNDQ1 Li4zMTQwOGU1ODY3OSAxMDA2NDQKLS0tIGEvZG9jL2xpc3ByZWYvZGlzcGxheS50ZXhpCisrKyBi L2RvYy9saXNwcmVmL2Rpc3BsYXkudGV4aQpAQCAtNTQ5MiwxNCArNTQ5MiwxNSBAQCBPdGhlciBE aXNwbGF5IFNwZWNzCiBidXQgaXQgaXMgZG9uZSBhcyBhIHNwZWNpYWwgY2FzZSBvZiBtYXJnaW5h bCBkaXNwbGF5IChAcHhyZWZ7RGlzcGxheQogTWFyZ2luc30pLgoKLUBpdGVtIChsZWZ0LWZyaW5n ZSBAdmFye2JpdG1hcH0gQHJ7W31AdmFye2ZhY2V9QHJ7XX0pCi1AaXRlbXggKHJpZ2h0LWZyaW5n ZSBAdmFye2JpdG1hcH0gQHJ7W31AdmFye2ZhY2V9QHJ7XX0pCitAaXRlbSAobGVmdC1mcmluZ2Ug QHZhcntiaXRtYXB9IEBye1t9QHZhcntmYWNlfUBye119IEBye1t9QHZhcntoZWxwLWVjaG99QHJ7 XX0pCitAaXRlbXggKHJpZ2h0LWZyaW5nZSBAdmFye2JpdG1hcH0gQHJ7W31AdmFye2ZhY2V9QHJ7 XX0gQHJ7W31AdmFye2hlbHAtZWNob31AcntdfSkKIFRoaXMgZGlzcGxheSBzcGVjaWZpY2F0aW9u IG9uIGFueSBjaGFyYWN0ZXIgb2YgYSBsaW5lIG9mIHRleHQgY2F1c2VzCiB0aGUgc3BlY2lmaWVk IEB2YXJ7Yml0bWFwfSBiZSBkaXNwbGF5ZWQgaW4gdGhlIGxlZnQgb3IgcmlnaHQgZnJpbmdlcwog Zm9yIHRoYXQgbGluZSwgaW5zdGVhZCBvZiB0aGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgdGhlIGRp c3BsYXkKIHNwZWNpZmljYXRpb24uICBUaGUgb3B0aW9uYWwgQHZhcntmYWNlfSBzcGVjaWZpZXMg dGhlIGZhY2Ugd2hvc2UKIGNvbG9ycyBhcmUgdG8gYmUgdXNlZCBmb3IgdGhlIGJpdG1hcCBkaXNw bGF5LiAgQHhyZWZ7RnJpbmdlIEJpdG1hcHN9LAotZm9yIHRoZSBkZXRhaWxzLgorZm9yIHRoZSBk ZXRhaWxzLiAgVGhlIG9wdGlvbmFsIEB2YXJ7aGVscC1lY2hvfSBzdHJpbmcgY2FuIGJlIHVzZWQg dG8KK2Rpc3BsYXkgdG9vbHRpcHMgb3IgaGVscCB0ZXh0IGluIHRoZSBlY2hvIGFyZWEuCgogQGl0 ZW0gKHNwYWNlLXdpZHRoIEB2YXJ7ZmFjdG9yfSkKIFRoaXMgZGlzcGxheSBzcGVjaWZpY2F0aW9u IGFmZmVjdHMgYWxsIHRoZSBzcGFjZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUKZGlmZiAtLWdpdCBh L2V0Yy9ORVdTIGIvZXRjL05FV1MKaW5kZXggNzNhZjZhYjc3M2UuLmIxNWNmZmU3M2Y5IDEwMDY0 NAotLS0gYS9ldGMvTkVXUworKysgYi9ldGMvTkVXUwpAQCAtMTc0MSw2ICsxNzQxLDEyIEBAIHRo ZSBoYW5kbGVyIGNvZGUgd2l0aG91dCB1bndpbmRpbmcgdGhlIHN0YWNrLCBzdWNoIHRoYXQgd2Ug Y2FuIHJlY29yZAogdGhlIGJhY2t0cmFjZSBhbmQgb3RoZXIgZHluYW1pYyBzdGF0ZSBhdCB0aGUg cG9pbnQgb2YgdGhlIGVycm9yLiAgU2VlCiB0aGUgSW5mbyBub2RlICIoZWxpc3ApIEhhbmRsaW5n IEVycm9ycyIuCgorKysrCisqKiBUb29sdGlwcyBmb3IgdXNlciBmcmluZ2UgaW5kaWNhdG9ycy4K K1VzZXIgZnJpbmdlIGluZGljYXRvcnMgZGVmaW5lZCBpbiB0ZXh0IGRpc3BsYXkgc3BlY2lmaWNh dGlvbnMgbm93CitzdXBwb3J0IHVzZXItZGVmaW5lZCB0b29sdGlwcy4gIFNlZSB0aGUgIk90aGVy IERpc3BsYXkgU3BlY2lmaWNhdGlvbnMiCitub2RlIGluIHRoZSBFbWFjcyBMaXNwIFJlZmVyZW5j ZSBNYW51YWwuCisKICsrKwogKiogTmV3ICdwb3AtdXAtZnJhbWVzJyBhY3Rpb24gYWxpc3QgZW50 cnkgZm9yICdkaXNwbGF5LWJ1ZmZlcicuCiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhl IHZhcmlhYmxlIG9mIHRoZSBzYW1lIG5hbWUgYW5kIHRha2VzCmRpZmYgLS1naXQgYS9ldGMvVE9E TyBiL2V0Yy9UT0RPCmluZGV4IDUyYzc3Y2NjMjhkLi4yMWI1MDRhZDE4YiAxMDA2NDQKLS0tIGEv ZXRjL1RPRE8KKysrIGIvZXRjL1RPRE8KQEAgLTE3MiwxMCArMTcyLDYgQEAgQ2hhbmdlIHRoZW0g dG8gdXNlIHJlcG9ydC1lbWFjcy1idWcuCiAqKioqIGxtLXJlcG9ydC1idWcKICoqKiogdHJhbXAt YnVnCiAqKioqIGMtc3VibWl0LWJ1Zy1yZXBvcnQKLQotKiogQWxsb3cgZnJpbmdlIGluZGljYXRv cnMgdG8gZGlzcGxheSBhIHRvb2x0aXAKLVByb3ZpZGUgYSBoZWxwLWVjaG8gcHJvcGVydHk/Ci0K ICoqIEFkZCBhIGRlZmN1c3RvbSB0aGF0IHN1cHBsaWVzIGEgZnVuY3Rpb24gdG8gbmFtZSBudW1l cmljIGJhY2t1cCBmaWxlcwogTGlrZSAnbWFrZS1iYWNrdXAtZmlsZS1uYW1lLWZ1bmN0aW9uJyBm b3Igbm9uLW51bWVyaWMgYmFja3VwIGZpbGVzLgoKZGlmZiAtLWdpdCBhL3NyYy9kaXNwZXh0ZXJu LmggYi9zcmMvZGlzcGV4dGVybi5oCmluZGV4IDFjMzIzMmZhZTNkLi44ZTQxZTAzZjY4MCAxMDA2 NDQKLS0tIGEvc3JjL2Rpc3BleHRlcm4uaAorKysgYi9zcmMvZGlzcGV4dGVybi5oCkBAIC0yMiw2 ICsyMiw3IEBAIENvcHlyaWdodCAoQykgMTk4NSwgMTk5My0xOTk0LCAxOTk3LTIwMjQgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjaWZuZGVmIERJU1BFWFRFUk5fSF9JTkNMVURFRAog I2RlZmluZSBESVNQRVhURVJOX0hfSU5DTFVERUQKCisjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5j bHVkZSAiY2hhcmFjdGVyLmgiCgogI2lmZGVmIEhBVkVfWF9XSU5ET1dTCkBAIC05NzUsNiArOTc2 LDEyIEBAICNkZWZpbmUgQ0hFQ0tfTUFUUklYKE1BVFJJWCkgKCh2b2lkKSAwKQogICAgICBpdCBz cGVjaWZpZXMgYWN0dWFsIGZyaW5nZSBiaXRtYXAgbnVtYmVyLiAgKi8KICAgaW50IG92ZXJsYXlf YXJyb3dfYml0bWFwOwoKKyAgLyogTGVmdCBmcmluZ2UgaGVscCBlY2hvIHBvc2l0aW9uIHdpdGhp biBhIGJ1ZmZlciAgKi8KKyAgcHRyZGlmZl90IGxlZnRfdXNlcl9mcmluZ2VfaGVscF9lY2hvX3Bv czsKKworICAvKiBSaWdodCBmcmluZ2UgaGVscCBlY2hvIHBvc2l0aW9uIHdpdGhpbiBhIGJ1ZmZl ciovCisgIHB0cmRpZmZfdCByaWdodF91c2VyX2ZyaW5nZV9oZWxwX2VjaG9fcG9zOworCiAgIC8q IExlZnQgZnJpbmdlIGJpdG1hcCBudW1iZXIgKGVudW0gZnJpbmdlX2JpdG1hcF90eXBlKS4gICov CiAgIHVuc2lnbmVkIGxlZnRfdXNlcl9mcmluZ2VfYml0bWFwIDogRlJJTkdFX0lEX0JJVFM7CgpA QCAtMjgxMSw2ICsyODE4LDEyIEBAICNkZWZpbmUgT1ZFUkxBWV9TVFJJTkdfQ0hVTktfU0laRSAx NgogICAgICBpcyBpbiBlZmZlY3QsIGFuZCBvbmx5IGluIGhzY3JvbGxlZCB3aW5kb3dzLiAgKi8K ICAgaW50IHN0cmV0Y2hfYWRqdXN0OwoKKyAgLyogTGVmdCBmcmluZ2UgaGVscCBlY2hvIHBvc2l0 aW9uIHdpdGhpbiBhIGJ1ZmZlciAgKi8KKyAgcHRyZGlmZl90IGxlZnRfdXNlcl9mcmluZ2VfaGVs cF9lY2hvX3BvczsKKworICAvKiBSaWdodCBmcmluZ2UgaGVscCBlY2hvIHBvc2l0aW9uIHdpdGhp biBhIGJ1ZmZlciovCisgIHB0cmRpZmZfdCByaWdodF91c2VyX2ZyaW5nZV9oZWxwX2VjaG9fcG9z OworCiAgIC8qIExlZnQgZnJpbmdlIGJpdG1hcCBudW1iZXIgKGVudW0gZnJpbmdlX2JpdG1hcF90 eXBlKS4gICovCiAgIHVuc2lnbmVkIGxlZnRfdXNlcl9mcmluZ2VfYml0bWFwIDogRlJJTkdFX0lE X0JJVFM7CgpkaWZmIC0tZ2l0IGEvc3JjL3hkaXNwLmMgYi9zcmMveGRpc3AuYwppbmRleCAxNDBk NzExMjlmMy4uNmQ4MWEzMDQxZTEgMTAwNjQ0Ci0tLSBhL3NyYy94ZGlzcC5jCisrKyBiL3NyYy94 ZGlzcC5jCkBAIC02MjQ4LDExICs2MjQ4LDEzIEBAIGhhbmRsZV9zaW5nbGVfZGlzcGxheV9zcGVj IChzdHJ1Y3QgaXQgKml0LCBMaXNwX09iamVjdCBzcGVjLCBMaXNwX09iamVjdCBvYmplY3QsCiAJ ICAgIHsKIAkgICAgICBpdC0+bGVmdF91c2VyX2ZyaW5nZV9iaXRtYXAgPSBmcmluZ2VfYml0bWFw OwogCSAgICAgIGl0LT5sZWZ0X3VzZXJfZnJpbmdlX2ZhY2VfaWQgPSBmYWNlX2lkOworICAgICAg ICAgICAgICBpdC0+bGVmdF91c2VyX2ZyaW5nZV9oZWxwX2VjaG9fcG9zID0gYnVmcG9zOwogCSAg ICB9CiAJICBlbHNlCiAJICAgIHsKIAkgICAgICBpdC0+cmlnaHRfdXNlcl9mcmluZ2VfYml0bWFw ID0gZnJpbmdlX2JpdG1hcDsKIAkgICAgICBpdC0+cmlnaHRfdXNlcl9mcmluZ2VfZmFjZV9pZCA9 IGZhY2VfaWQ7CisgICAgICAgICAgICAgIGl0LT5yaWdodF91c2VyX2ZyaW5nZV9oZWxwX2VjaG9f cG9zID0gYnVmcG9zOwogCSAgICB9CiAJfQogI2VuZGlmIC8qIEhBVkVfV0lORE9XX1NZU1RFTSAq LwpAQCAtMjYwMTksMTMgKzI2MDIxLDIwIEBAICNkZWZpbmUgUkVDT1JEX01BWF9NSU5fUE9TKElU KQkJCQkJXAogICAgICAgICYmIGl0LT5lbGxpcHNpc19wKTsKCiAgIC8qIFNhdmUgZnJpbmdlIGJp dG1hcHMgaW4gdGhpcyByb3cuICAqLworICByb3ctPmxlZnRfdXNlcl9mcmluZ2VfaGVscF9lY2hv X3BvcyA9IGl0LT5sZWZ0X3VzZXJfZnJpbmdlX2hlbHBfZWNob19wb3M7CiAgIHJvdy0+bGVmdF91 c2VyX2ZyaW5nZV9iaXRtYXAgPSBpdC0+bGVmdF91c2VyX2ZyaW5nZV9iaXRtYXA7CiAgIHJvdy0+ bGVmdF91c2VyX2ZyaW5nZV9mYWNlX2lkID0gaXQtPmxlZnRfdXNlcl9mcmluZ2VfZmFjZV9pZDsK KworICByb3ctPnJpZ2h0X3VzZXJfZnJpbmdlX2hlbHBfZWNob19wb3MgPSBpdC0+cmlnaHRfdXNl cl9mcmluZ2VfaGVscF9lY2hvX3BvczsKICAgcm93LT5yaWdodF91c2VyX2ZyaW5nZV9iaXRtYXAg PSBpdC0+cmlnaHRfdXNlcl9mcmluZ2VfYml0bWFwOwogICByb3ctPnJpZ2h0X3VzZXJfZnJpbmdl X2ZhY2VfaWQgPSBpdC0+cmlnaHRfdXNlcl9mcmluZ2VfZmFjZV9pZDsKCisgIC8qIFJlc2V0IGZy aW5nZSBpbmZvLiAgKi8KKyAgaXQtPmxlZnRfdXNlcl9mcmluZ2VfaGVscF9lY2hvX3BvcyA9IDA7 CiAgIGl0LT5sZWZ0X3VzZXJfZnJpbmdlX2JpdG1hcCA9IDA7CiAgIGl0LT5sZWZ0X3VzZXJfZnJp bmdlX2ZhY2VfaWQgPSAwOworCisgIGl0LT5yaWdodF91c2VyX2ZyaW5nZV9oZWxwX2VjaG9fcG9z ID0gMDsKICAgaXQtPnJpZ2h0X3VzZXJfZnJpbmdlX2JpdG1hcCA9IDA7CiAgIGl0LT5yaWdodF91 c2VyX2ZyaW5nZV9mYWNlX2lkID0gMDsKCkBAIC0zNTczMCw2ICszNTczOSwxMDkgQEAgbm90ZV9t b2RlX2xpbmVfb3JfbWFyZ2luX2hpZ2hsaWdodCAoTGlzcF9PYmplY3Qgd2luZG93LCBpbnQgeCwg aW50IHksCiB9CgoKKy8qIFRha2UgcHJvcGVyIGFjdGlvbiB3aGVuIG1vdXNlIGhhcyBtb3ZlZCB0 byB0aGUgd2luZG93IFdJTkRPVywgd2l0aAorICAgd2luZG93LWxvY2FsIHgtcG9zaXRpb24gWCBh bmQgeS1wb3NpdGlvbiBZLiBUaGlzIGlzIG9ubHkgdXNlZCBmb3IKKyAgIGRpc3BsYXlpbmcgdXNl ci1kZWZpbmVkIGZyaW5nZSBpbmRpY2F0b3IgaGVscC1lY2hvIG1lc3NhZ2VzLiAgKi8KKworc3Rh dGljIHZvaWQKK25vdGVfZnJpbmdlX2hpZ2hsaWdodCAoTGlzcF9PYmplY3Qgd2luZG93LCBpbnQg eCwgaW50IHksCisJCSAgICAgICBlbnVtIHdpbmRvd19wYXJ0IHBhcnQpCit7CisgIGlmICghTklM UCAoaGVscF9lY2hvX3N0cmluZykpCisgICAgcmV0dXJuOworCisgIC8qIEZpbmQgYSBtZXNzYWdl IHRvIGRpc3BsYXkgdGhyb3VnaCB0aGUgaGVscC1lY2hvIG1lY2hhbmlzbSB3aGVuZXZlcgorICAg ICB0aGUgbW91c2UgaG92ZXJzIG92ZXIgYSBmcmluZ2UgaW5kaWNhdG9yLiAgQm90aCB0ZXh0IHBy b3BlcnRpZXMgYW5kCisgICAgIG92ZXJsYXlzIGhhdmUgdG8gYmUgY2hlY2tlZC4gICovCisKKyAg LyogVHJhbnNsYXRlIHdpbmRvd3MgY29vcmRpbmF0ZXMgaW50byBhIHZlcnRpY2FsIHdpbmRvdyBw b3NpdGlvbi4gICovCisgIGludCBocG9zLCB2cG9zLCBhcmVhOworICBzdHJ1Y3Qgd2luZG93ICp3 ID0gWFdJTkRPVyAod2luZG93KTsKKyAgeF95X3RvX2hwb3NfdnBvcyAodywgeCwgeSwgJmhwb3Ms ICZ2cG9zLCAwLCAwLCAmYXJlYSk7CisKKyAgLyogR2V0IHRvIHRoZSBnbHlwaCByb3cgYmFzZWQg b24gdGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZQorICAgICBmcmluZ2UuICAqLworICBzdHJ1 Y3QgZ2x5cGhfcm93ICpyb3cgPSBNQVRSSVhfUk9XICh3LT5jdXJyZW50X21hdHJpeCwgdnBvcyk7 CisKKyAgLyogVGhlIGdseXBoIHJvdyBjb250YWlucyBpbmZvIG9uIGZyaW5nZSBpbmRpY2F0b3Jz IGZvdW5kLiAgKi8KKyAgcHRyZGlmZl90IGJ1ZnBvczsKKyAgTGlzcF9PYmplY3Qgc3BlY19zeW07 CisgIGlmIChwYXJ0ID09IE9OX0xFRlRfRlJJTkdFICYmIHJvdy0+bGVmdF91c2VyX2ZyaW5nZV9i aXRtYXAgIT0gMCkKKyAgICB7CisgICAgICBidWZwb3MgPSByb3ctPmxlZnRfdXNlcl9mcmluZ2Vf aGVscF9lY2hvX3BvczsKKyAgICAgIHNwZWNfc3ltID0gUWxlZnRfZnJpbmdlOworICAgIH0KKyAg ZWxzZSBpZiAocGFydCA9PSBPTl9SSUdIVF9GUklOR0UgJiYgcm93LT5yaWdodF91c2VyX2ZyaW5n ZV9iaXRtYXAgIT0gMCkKKyAgICB7CisgICAgICBidWZwb3MgPSByb3ctPnJpZ2h0X3VzZXJfZnJp bmdlX2hlbHBfZWNob19wb3M7CisgICAgICBzcGVjX3N5bSA9IFFyaWdodF9mcmluZ2U7CisgICAg fQorICBlbHNlCisgICAgcmV0dXJuOworCisgIC8qIExvb2t1cCBkaXNwbGF5IHByb3BlcnRpZXMg aW4gdGV4dCBwcm9wZXJ0aWVzIGFuZCBvdmVybGF5cyBhdCBidWZmZXIKKyAgICAgcG9zaXRpb24u ICAqLworCisgIExpc3BfT2JqZWN0IGRpc3BfcHJvcCA9IGdldF9jaGFyX3Byb3BlcnR5X2FuZF9v dmVybGF5IChtYWtlX2ZpeG51bSAoYnVmcG9zKSwKKwkJCQkJCQkgUWRpc3BsYXksIHctPmNvbnRl bnRzLCBOVUxMKTsKKyAgLyogVE9ETzogdGhlIHByb3BlcnR5IHdoZXJlIHRoZSBmcmluZ2UgaW5k aWNhdG9yIGNvbWVzIGZyb20gaXMKKyAgICAgcHJvYmFibHkgaW4gaGlkZGVuIG92ZXJsYXkgc3Ry aW5ncyAgKi8KKyAgaWYgKE5JTFAoZGlzcF9wcm9wKSkKKyAgICAgIHJldHVybjsKKworICAvKiBU T0RPOiByZWZhY3RvciB0aGlzIGludG8gYSBmdW5jdGlvbiwgb3IgZXh0ZW5kIGZpbmRfZGlzcGxh eV9wcm9wICovCisKKyAgLyogTG9vayBmb3IgZnJpbmdlIHNwZWNzIHdoaWxlIGhhbmRsZSBkaXNw bGF5IHByb3BlcnR5IGZvcm1hdHM6IHNpbmdsZQorICAgICBzcGVjLCBsaXN0IG9mIHNwZWNzLCB2 ZWN0b3Igb2Ygc3BlY3MuICAqLworCisgIExpc3BfT2JqZWN0IGZyaW5nZV9zcGVjID0gUW5pbDsK KyAgaWYgKCFOSUxQKGRpc3BfcHJvcCkgJiYgQ09OU1AoZGlzcF9wcm9wKSkKKyAgICB7CisKKyAg ICAgIC8qIFRoZSBzcGVjIGlzIGVpdGhlciBhIGxpc3Qgb2YgZGlzcGxheSBzcGVjcyBvciBhIHNp bmdsZQorICAgICAgICAgc3BlYy4gICovCisgICAgICBpZiAoRVEgKFhDQVIgKGRpc3BfcHJvcCks IHNwZWNfc3ltKSkKKyAgICAgICAgeworICAgICAgICAgIGZyaW5nZV9zcGVjID0gZGlzcF9wcm9w OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKDsgQ09O U1AgKGRpc3BfcHJvcCk7IGRpc3BfcHJvcCA9IFhDRFIgKGRpc3BfcHJvcCkpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIExpc3BfT2JqZWN0IHNwZWMgPSBYQ0FSKGRpc3BfcHJvcCk7Cisg ICAgICAgICAgICAgIGlmIChDT05TUCAoc3BlYykgJiYgRVEgKFhDQVIgKHNwZWMpLCBzcGVjX3N5 bSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZnJpbmdlX3NwZWMgPSBz cGVjOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgICAvKiBUaGUgc3BlYyBpcyBhIHZlY3Rvciwgd2hpY2ggdGhlIGNvZGUgaGFzIHRvIGxvb2sg Zm9yIGZyaW5nZQorICAgICAgIHNwZWNzIGluIHRoZSBlbGVtZW50cyBvZiB0aGUgdmVjdG9yLiAg ICovCisgIGVsc2UgaWYgKCFOSUxQKGRpc3BfcHJvcCkgJiYgVkVDVE9SUCAoZGlzcF9wcm9wKSkK KyAgICB7CisgICAgICBwdHJkaWZmX3QgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBBU0laRSAo ZGlzcF9wcm9wKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgTGlzcF9PYmplY3Qgc3BlYyA9 IEFSRUYgKGRpc3BfcHJvcCwgaSk7CisgICAgICAgICAgaWYgKCFOSUxQKHNwZWMpICYmIEVRIChY Q0FSIChzcGVjKSwgc3BlY19zeW0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcmlu Z2Vfc3BlYyA9IHNwZWM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgLyog VE9ETzogbm90aGluZyBmb3VuZCwgdGhlIGZyaW5nZSBpcyBwcm9iYWJseSBpbgorICAgICBhZnRl ci1zdHJpbmcvYmVmb3JlLXN0cmluZyAgKi8KKyAgaWYgKE5JTFAoZnJpbmdlX3NwZWMpKQorICAg ICAgcmV0dXJuOworCisgIC8qIFRPRE86ICh3aGVuIENPTkRJVElPTiAuIFNQRUMpICovCisgIExp c3BfT2JqZWN0IGZyaW5nZV9oZWxwX2VjaG8gPSBDQVJfU0FGRSAoQ0RSX1NBRkUgKENEUl9TQUZF IChDRFJfU0FGRSAoZnJpbmdlX3NwZWMpKSkpOworICBpZiAoU1RSSU5HUCAoZnJpbmdlX2hlbHBf ZWNobykpCisgICAgaGVscF9lY2hvX3N0cmluZyA9IGZyaW5nZV9oZWxwX2VjaG87Cit9CisKIC8q IEVYUE9SVDoKICAgIFRha2UgcHJvcGVyIGFjdGlvbiB3aGVuIHRoZSBtb3VzZSBoYXMgbW92ZWQg dG8gcG9zaXRpb24gWCwgWSBvbgogICAgZnJhbWUgRiB3aXRoIHJlZ2FyZHMgdG8gaGlnaGxpZ2h0 aW5nIHBvcnRpb25zIG9mIGRpc3BsYXkgdGhhdCBoYXZlCkBAIC0zNTk1NywxMCArMzYwNjksMTUg QEAgbm90ZV9tb3VzZV9oaWdobGlnaHQgKHN0cnVjdCBmcmFtZSAqZiwgaW50IHgsIGludCB5KQog ICAgICAgfQogICAgIGVsc2UKICAgICAgIGN1cnNvciA9IEZSQU1FX09VVFBVVF9EQVRBIChmKS0+ bm9udGV4dF9jdXJzb3I7Ci0gIGVsc2UgaWYgKHBhcnQgPT0gT05fTEVGVF9GUklOR0UgfHwgcGFy dCA9PSBPTl9SSUdIVF9GUklOR0UKLQkgICB8fCBwYXJ0ID09IE9OX1ZFUlRJQ0FMX1NDUk9MTF9C QVIKKyAgZWxzZSBpZiAocGFydCA9PSBPTl9MRUZUX0ZSSU5HRSB8fCBwYXJ0ID09IE9OX1JJR0hU X0ZSSU5HRSkKKyAgICB7CisgICAgICBjdXJzb3IgPSBGUkFNRV9PVVRQVVRfREFUQSAoZiktPm5v bnRleHRfY3Vyc29yOworCisgICAgICBub3RlX2ZyaW5nZV9oaWdobGlnaHQgKHdpbmRvdywgeCwg eSwgcGFydCk7CisgICAgfQorICBlbHNlIGlmIChwYXJ0ID09IE9OX1ZFUlRJQ0FMX1NDUk9MTF9C QVIKIAkgICB8fCBwYXJ0ID09IE9OX0hPUklaT05UQUxfU0NST0xMX0JBUikKLSAgICBjdXJzb3Ig PSBGUkFNRV9PVVRQVVRfREFUQSAoZiktPm5vbnRleHRfY3Vyc29yOworICAgICAgY3Vyc29yID0g RlJBTUVfT1VUUFVUX0RBVEEgKGYpLT5ub250ZXh0X2N1cnNvcjsKICAgZWxzZQogICAgIGN1cnNv ciA9IEZSQU1FX09VVFBVVF9EQVRBIChmKS0+dGV4dF9jdXJzb3I7CiAjZW5kaWYKQEAgLTM1OTgy LDYgKzM2MDk5LDcgQEAgbm90ZV9tb3VzZV9oaWdobGlnaHQgKHN0cnVjdCBmcmFtZSAqZiwgaW50 IHgsIGludCB5KQogICAgICAgYm9vbCBzYW1lX3JlZ2lvbjsKCiAgICAgICAvKiBGaW5kIHRoZSBn bHlwaCB1bmRlciBYL1kuICAqLworICAgICAgLyogVE9ETzogbW92ZSB1cD8gQW5kIHBhc3MgdGhl IGRhdGEgaW50byBub3RlX2ZyaW5kZ2UgaGlnaGxpZ2h0ICovCiAgICAgICBnbHlwaCA9IHhfeV90 b19ocG9zX3Zwb3MgKHcsIHgsIHksICZocG9zLCAmdnBvcywgJmR4LCAmZHksICZhcmVhKTsKCiAj aWZkZWYgSEFWRV9XSU5ET1dfU1lTVEVNCi0tCjIuMzQuMQo= --000000000000f398110614a24e7f--