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: Sun, 7 Apr 2024 12:14:54 +0100 Message-ID: References: <83sf3xgimq.fsf@gnu.org> <83plyzfoe4.fsf@gnu.org> <83plyxca0t.fsf@gnu.org> <8334vrczig.fsf@gnu.org> <86frwejkxe.fsf@gnu.org> <86il12bxwj.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000001a389f06157fcd58" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24072"; 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 Sun Apr 07 13:16:08 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 1rtQVM-00068x-CG for ged-emacs-devel@m.gmane-mx.org; Sun, 07 Apr 2024 13:16:08 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rtQUV-0005Fu-DI; Sun, 07 Apr 2024 07:15:18 -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 1rtQUT-0005Fl-0a for emacs-devel@gnu.org; Sun, 07 Apr 2024 07:15:13 -0400 Original-Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rtQUQ-0003xp-Ju; Sun, 07 Apr 2024 07:15:12 -0400 Original-Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2d6fd3cfaa6so46473771fa.2; Sun, 07 Apr 2024 04:15:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712488507; x=1713093307; 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=KO91qPPxWhEVgGsE5YxCW6xiLKOiyY23NsU2Goh4VjA=; b=lUd76cNflN29+Sx2N3DLfzS4JRo0apsD4pimkzAXtrpYXIgvrE/+P5jKHe1yRwlRKU cFnnkqf92HSPTwL29VTG3aZ/f1deY9bHaVFqsf4FMiMopuPPgKHTdoFjIWndiQaPakSB VKjij1zTIvTB29N5Kkl1tXH9TU5xVXJUfQciVxz+9OyUzS1nbFbFwwdCBe09QbwIV2w9 6S/j+AK+rvWiLV7r65pLmHy/p0y4OZPDWY0G0j9lAxYVhn88LiW+w9RjWxJQtxUucSCR umjXQzNU2ycL33tN8gslAwUhXBUHXchcFMJpJcdcX2wjS8xRHzae88Mu5t58A3puz4O2 IGMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712488507; x=1713093307; 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=KO91qPPxWhEVgGsE5YxCW6xiLKOiyY23NsU2Goh4VjA=; b=DSludML9RBJ5fkG5s/WgRFG9PpFmdROK+NjmBdZuQyBYZxMea6wa8drICLUtWOrSzg HkQV+zR0II64pfgtVTk0oXf3y+8v0NW0Y3Wq6oCWHsxYH/tL+g7zFW4OVePJOmT5trF3 oz/mqpuMyGrYpmH0e2UM5VTc5jDLaeH+uJK4HYoGCzVkuyY+iFUxbHz+2prANJaqlP0b kdRbmwemjC61ygB3e3jiWNpSkKlspR3Jv6cPYpBSnnF83dllwPYv94PKyy8Fs5d7lGtD Rw/V+EvgDwRVHq5QYzj79WuSy+T2PYNlNQMtGrPhL1wWSc8bcyvSW+WQAi2mngwkkwpM t69A== X-Gm-Message-State: AOJu0YzGG9Oi6dp7js+1Bi+L9v7JGuEp6RVR3VkBik+Z9rE6LDzUYuKP laC9dG+KB6Blxlf/SR0G98kESyGOhFCyKihhVnXt9a1S5DJQiNFwI78abQHN44Jwfglne03NNgf W+t7oybFpMgH0az7ty3s/1bWIJWONKFnlhw== X-Google-Smtp-Source: AGHT+IHMpCA0Rde2oMEm4zzcMGnh0phwa0Fy9yoL6WOflzLLucvL7ixzpr3VGS/iMJdeIgnrLd0MXtEBRgxmlSOtbcA= X-Received: by 2002:a2e:2282:0:b0:2d8:68a3:8594 with SMTP id i124-20020a2e2282000000b002d868a38594mr4364377lji.34.1712488506332; Sun, 07 Apr 2024 04:15:06 -0700 (PDT) In-Reply-To: <86il12bxwj.fsf@gnu.org> Received-SPF: pass client-ip=2a00:1450:4864:20::234; envelope-from=vekazanov@gmail.com; helo=mail-lj1-x234.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:317586 Archived-At: --0000000000001a389f06157fcd58 Content-Type: text/plain; charset="UTF-8" Hi Eli, Here's a 3rd version of the patch. Please, ignore documentation, which I'll update later, and take a look at the code itself. > Like I said earlier: I think it would be better to have the tooltip > text in a separate property, not as part of the 'display' property > spec. > > Also, I don't see a need for recording the positions in the glyph_row > structure, because finding the glyph that corresponds to buffer/string > text with that special property is easy enough. Done. The code in the patch goes through glyphs of the row under a mouse pointer, finds an object that generated the glyph (glyph->object, which can be a buffer or a string) and checks if left-fringe-help/right-fringe-help text properties are defined. Strings from the properties are then displayed as tooltips. This only works for properties of visible text that has glyphs generated for it. Properties coming from invisible text and zero-length overlays are not represented as glyphs as much I can see from the code. Here are some code examples: ;;; tooltips will be shown in the examples below: (insert (propertize "foo" 'left-fringe-help "left tooltip")) (insert (propertize "foo" 'right-fringe-help "right tooltip")) (overlay-put (make-overlay (point) (1+ (point))) 'right-fringe-help "right tooltip") (overlay-put (make-overlay (point) (1+ (point))) 'after-string (propertize "lll" 'left-fringe-help "left tooltip")) (overlay-put (make-overlay (point) (1+ (point))) 'after-string (propertize "rrr" 'right-fringe-help "right tooltip")) ;;; Tooltips will NOT be shown (insert (propertize "foo" 'display '(left-fringe left-arrow warning) 'left-fringe-help "left tooltip")) (insert (propertize "foo" 'display '(right-fringe left-arrow warning) 'right-fringe-help "right tooltip")) (insert (propertize "foo" 'left-fringe-help "left tooltip")) (insert (propertize "foo" 'right-fringe-help "right tooltip")) (overlay-put (make-overlay 1 2) 'before-string (propertize "x" 'left-fringe-help "left tooltip" 'display '(left-fringe right-arrow warning))) So this is a partial solution. If you're fine with the general approach, we can do this in step-by-step fashion. I'll fix the documentation and provide a final version of this implementation, and then think about what to do about invisible text. Thanks! -- Regards, Vladimir Kazanov --0000000000001a389f06157fcd58 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Tooltips-for-user-defined-fringe-indicators.patch" Content-Disposition: attachment; filename="v3-0001-Tooltips-for-user-defined-fringe-indicators.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lupf6w5i0 RnJvbSAwNmNjZjE1NWFhYmM2NjNhOTJiYjY1NTJkZjc0ZGY1MmMyYzZmZWM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWbGFkaW1pciBLYXphbm92IDx2ZWthemFub3ZAZ21haWwuY29t PgpEYXRlOiBTdW4sIDI0IERlYyAyMDIzIDExOjEzOjEwICswMDAwClN1YmplY3Q6IFtQQVRDSCB2 M10gVG9vbHRpcHMgZm9yIHVzZXItZGVmaW5lZCBmcmluZ2UgaW5kaWNhdG9ycwoKLS0tCiBkb2Mv bGlzcHJlZi9kaXNwbGF5LnRleGkgfCAgNyArKystLQogZXRjL05FV1MgICAgICAgICAgICAgICAg IHwgIDYgKysrKwogZXRjL1RPRE8gICAgICAgICAgICAgICAgIHwgIDQgLS0tCiBzcmMvZnJhbWUu YyAgICAgICAgICAgICAgfCAgMiArKwogc3JjL3hkaXNwLmMgICAgICAgICAgICAgIHwgNjEgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogNSBmaWxlcyBjaGFuZ2VkLCA3 MSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9saXNwcmVm L2Rpc3BsYXkudGV4aSBiL2RvYy9saXNwcmVmL2Rpc3BsYXkudGV4aQppbmRleCBmODJjMmZhZDE0 ZC4uYjNiODFiZDM0MmMgMTAwNjQ0Ci0tLSBhL2RvYy9saXNwcmVmL2Rpc3BsYXkudGV4aQorKysg Yi9kb2MvbGlzcHJlZi9kaXNwbGF5LnRleGkKQEAgLTU0OTIsMTQgKzU0OTIsMTUgQEAgT3RoZXIg RGlzcGxheSBTcGVjcwogYnV0IGl0IGlzIGRvbmUgYXMgYSBzcGVjaWFsIGNhc2Ugb2YgbWFyZ2lu YWwgZGlzcGxheSAoQHB4cmVme0Rpc3BsYXkKIE1hcmdpbnN9KS4KCi1AaXRlbSAobGVmdC1mcmlu Z2UgQHZhcntiaXRtYXB9IEBye1t9QHZhcntmYWNlfUBye119KQotQGl0ZW14IChyaWdodC1mcmlu Z2UgQHZhcntiaXRtYXB9IEBye1t9QHZhcntmYWNlfUBye119KQorQGl0ZW0gKGxlZnQtZnJpbmdl IEB2YXJ7Yml0bWFwfSBAcntbfUB2YXJ7ZmFjZX1AcntdfSBAcntbfUB2YXJ7aGVscC1lY2hvfUBy e119KQorQGl0ZW14IChyaWdodC1mcmluZ2UgQHZhcntiaXRtYXB9IEBye1t9QHZhcntmYWNlfUBy e119IEBye1t9QHZhcntoZWxwLWVjaG99QHJ7XX0pCiBUaGlzIGRpc3BsYXkgc3BlY2lmaWNhdGlv biBvbiBhbnkgY2hhcmFjdGVyIG9mIGEgbGluZSBvZiB0ZXh0IGNhdXNlcwogdGhlIHNwZWNpZmll ZCBAdmFye2JpdG1hcH0gYmUgZGlzcGxheWVkIGluIHRoZSBsZWZ0IG9yIHJpZ2h0IGZyaW5nZXMK IGZvciB0aGF0IGxpbmUsIGluc3RlYWQgb2YgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRoZSBk aXNwbGF5CiBzcGVjaWZpY2F0aW9uLiAgVGhlIG9wdGlvbmFsIEB2YXJ7ZmFjZX0gc3BlY2lmaWVz IHRoZSBmYWNlIHdob3NlCiBjb2xvcnMgYXJlIHRvIGJlIHVzZWQgZm9yIHRoZSBiaXRtYXAgZGlz cGxheS4gIEB4cmVme0ZyaW5nZSBCaXRtYXBzfSwKLWZvciB0aGUgZGV0YWlscy4KK2ZvciB0aGUg ZGV0YWlscy4gIFRoZSBvcHRpb25hbCBAdmFye2hlbHAtZWNob30gc3RyaW5nIGNhbiBiZSB1c2Vk IHRvCitkaXNwbGF5IHRvb2x0aXBzIG9yIGhlbHAgdGV4dCBpbiB0aGUgZWNobyBhcmVhLgoKIEBp dGVtIChzcGFjZS13aWR0aCBAdmFye2ZhY3Rvcn0pCiBUaGlzIGRpc3BsYXkgc3BlY2lmaWNhdGlv biBhZmZlY3RzIGFsbCB0aGUgc3BhY2UgY2hhcmFjdGVycyB3aXRoaW4gdGhlCmRpZmYgLS1naXQg YS9ldGMvTkVXUyBiL2V0Yy9ORVdTCmluZGV4IDMyY2VjODJmOTcwLi5iMWY3MmNiOWJmNCAxMDA2 NDQKLS0tIGEvZXRjL05FV1MKKysrIGIvZXRjL05FV1MKQEAgLTE4MTUsNiArMTgxNSwxMiBAQCB0 aGUgaGFuZGxlciBjb2RlIHdpdGhvdXQgdW53aW5kaW5nIHRoZSBzdGFjaywgc3VjaCB0aGF0IHdl IGNhbiByZWNvcmQKIHRoZSBiYWNrdHJhY2UgYW5kIG90aGVyIGR5bmFtaWMgc3RhdGUgYXQgdGhl IHBvaW50IG9mIHRoZSBlcnJvci4gIFNlZQogdGhlIEluZm8gbm9kZSAiKGVsaXNwKSBIYW5kbGlu ZyBFcnJvcnMiLgoKKysrKworKiogVG9vbHRpcHMgZm9yIHVzZXIgZnJpbmdlIGluZGljYXRvcnMu CitVc2VyIGZyaW5nZSBpbmRpY2F0b3JzIGRlZmluZWQgaW4gdGV4dCBkaXNwbGF5IHNwZWNpZmlj YXRpb25zIG5vdworc3VwcG9ydCB1c2VyLWRlZmluZWQgdG9vbHRpcHMuICBTZWUgdGhlICJPdGhl ciBEaXNwbGF5IFNwZWNpZmljYXRpb25zIgorbm9kZSBpbiB0aGUgRW1hY3MgTGlzcCBSZWZlcmVu Y2UgTWFudWFsLgorCiArKysKICoqIE5ldyAncG9wLXVwLWZyYW1lcycgYWN0aW9uIGFsaXN0IGVu dHJ5IGZvciAnZGlzcGxheS1idWZmZXInLgogVGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRo ZSB2YXJpYWJsZSBvZiB0aGUgc2FtZSBuYW1lIGFuZCB0YWtlcwpkaWZmIC0tZ2l0IGEvZXRjL1RP RE8gYi9ldGMvVE9ETwppbmRleCA1MmM3N2NjYzI4ZC4uMjFiNTA0YWQxOGIgMTAwNjQ0Ci0tLSBh L2V0Yy9UT0RPCisrKyBiL2V0Yy9UT0RPCkBAIC0xNzIsMTAgKzE3Miw2IEBAIENoYW5nZSB0aGVt IHRvIHVzZSByZXBvcnQtZW1hY3MtYnVnLgogKioqKiBsbS1yZXBvcnQtYnVnCiAqKioqIHRyYW1w LWJ1ZwogKioqKiBjLXN1Ym1pdC1idWctcmVwb3J0Ci0KLSoqIEFsbG93IGZyaW5nZSBpbmRpY2F0 b3JzIHRvIGRpc3BsYXkgYSB0b29sdGlwCi1Qcm92aWRlIGEgaGVscC1lY2hvIHByb3BlcnR5Pwot CiAqKiBBZGQgYSBkZWZjdXN0b20gdGhhdCBzdXBwbGllcyBhIGZ1bmN0aW9uIHRvIG5hbWUgbnVt ZXJpYyBiYWNrdXAgZmlsZXMKIExpa2UgJ21ha2UtYmFja3VwLWZpbGUtbmFtZS1mdW5jdGlvbicg Zm9yIG5vbi1udW1lcmljIGJhY2t1cCBmaWxlcy4KCmRpZmYgLS1naXQgYS9zcmMvZnJhbWUuYyBi L3NyYy9mcmFtZS5jCmluZGV4IGFiZDZlZjAwOTAxLi5mZjk5YjAzNTNhZiAxMDA2NDQKLS0tIGEv c3JjL2ZyYW1lLmMKKysrIGIvc3JjL2ZyYW1lLmMKQEAgLTYzODMsNiArNjM4Myw3IEBAIHN5bXNf b2ZfZnJhbWUgKHZvaWQpCiAgIERFRlNZTSAoUWNoaWxkX2ZyYW1lX2JvcmRlcl93aWR0aCwgImNo aWxkLWZyYW1lLWJvcmRlci13aWR0aCIpOwogICBERUZTWU0gKFFpbnRlcm5hbF9ib3JkZXJfd2lk dGgsICJpbnRlcm5hbC1ib3JkZXItd2lkdGgiKTsKICAgREVGU1lNIChRbGVmdF9mcmluZ2UsICJs ZWZ0LWZyaW5nZSIpOworICBERUZTWU0gKFFsZWZ0X2ZyaW5nZV9oZWxwLCAibGVmdC1mcmluZ2Ut aGVscCIpOwogICBERUZTWU0gKFFsaW5lX3NwYWNpbmcsICJsaW5lLXNwYWNpbmciKTsKICAgREVG U1lNIChRbWVudV9iYXJfbGluZXMsICJtZW51LWJhci1saW5lcyIpOwogICBERUZTWU0gKFF0YWJf YmFyX2xpbmVzLCAidGFiLWJhci1saW5lcyIpOwpAQCAtNjM5MCw2ICs2MzkxLDcgQEAgc3ltc19v Zl9mcmFtZSAodm9pZCkKICAgREVGU1lNIChRbmFtZSwgIm5hbWUiKTsKICAgREVGU1lNIChRcmln aHRfZGl2aWRlcl93aWR0aCwgInJpZ2h0LWRpdmlkZXItd2lkdGgiKTsKICAgREVGU1lNIChRcmln aHRfZnJpbmdlLCAicmlnaHQtZnJpbmdlIik7CisgIERFRlNZTSAoUXJpZ2h0X2ZyaW5nZV9oZWxw LCAicmlnaHQtZnJpbmdlLWhlbHAiKTsKICAgREVGU1lNIChRc2NyZWVuX2dhbW1hLCAic2NyZWVu LWdhbW1hIik7CiAgIERFRlNZTSAoUXNjcm9sbF9iYXJfYmFja2dyb3VuZCwgInNjcm9sbC1iYXIt YmFja2dyb3VuZCIpOwogICBERUZTWU0gKFFzY3JvbGxfYmFyX2ZvcmVncm91bmQsICJzY3JvbGwt YmFyLWZvcmVncm91bmQiKTsKZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3JjL3hkaXNwLmMK aW5kZXggMTQwZDcxMTI5ZjMuLmI0ZDU3YjViNmYyIDEwMDY0NAotLS0gYS9zcmMveGRpc3AuYwor KysgYi9zcmMveGRpc3AuYwpAQCAtMzU3MzAsNiArMzU3MzAsNTkgQEAgbm90ZV9tb2RlX2xpbmVf b3JfbWFyZ2luX2hpZ2hsaWdodCAoTGlzcF9PYmplY3Qgd2luZG93LCBpbnQgeCwgaW50IHksCiB9 CgoKKy8qIFRha2UgcHJvcGVyIGFjdGlvbiB3aGVuIG1vdXNlIGhhcyBtb3ZlZCB0byB0aGUgd2lu ZG93IFdJTkRPVywgd2l0aAorICAgd2luZG93LWxvY2FsIHgtcG9zaXRpb24gWCBhbmQgeS1wb3Np dGlvbiBZLiBUaGlzIGlzIG9ubHkgdXNlZCBmb3IKKyAgIGRpc3BsYXlpbmcgdXNlci1kZWZpbmVk IGZyaW5nZSBpbmRpY2F0b3IgaGVscC1lY2hvIG1lc3NhZ2VzLiAgKi8KKworc3RhdGljIHZvaWQK K25vdGVfZnJpbmdlX2hpZ2hsaWdodCAoTGlzcF9PYmplY3Qgd2luZG93LCBpbnQgeCwgaW50IHks CisJCSAgICAgICBlbnVtIHdpbmRvd19wYXJ0IHBhcnQpCit7CisgIGlmICghTklMUCAoaGVscF9l Y2hvX3N0cmluZykpCisgICAgcmV0dXJuOworCisgIC8qIEZpbmQgYSBtZXNzYWdlIHRvIGRpc3Bs YXkgdGhyb3VnaCB0aGUgaGVscC1lY2hvIG1lY2hhbmlzbSB3aGVuZXZlcgorICAgICB0aGUgbW91 c2UgaG92ZXJzIG92ZXIgYSBmcmluZ2UgaW5kaWNhdG9yLiAgQm90aCB0ZXh0IHByb3BlcnRpZXMg YW5kCisgICAgIG92ZXJsYXlzIGhhdmUgdG8gYmUgY2hlY2tlZC4gICovCisKKyAgLyogQ2hlY2sg dGhlIHRleHQgcHJvcGVydHkgc3ltYm9sIHRvIHVzZS4gICovCisgIExpc3BfT2JqZWN0IHN5bTsK KyAgaWYgKHBhcnQgPT0gT05fTEVGVF9GUklOR0UpCisgICAgc3ltID0gUWxlZnRfZnJpbmdlX2hl bHA7CisgIGVsc2UKKyAgICBzeW0gPSBRcmlnaHRfZnJpbmdlX2hlbHA7CisKKyAgLyogVHJhbnNs YXRlIHdpbmRvd3MgY29vcmRpbmF0ZXMgaW50byBhIHZlcnRpY2FsIHdpbmRvdyBwb3NpdGlvbi4g ICovCisgIGludCBocG9zLCB2cG9zLCBhcmVhOworICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRP VyAod2luZG93KTsKKyAgeF95X3RvX2hwb3NfdnBvcyAodywgeCwgeSwgJmhwb3MsICZ2cG9zLCAw LCAwLCAmYXJlYSk7CisKKyAgLyogR2V0IHRvIHRoZSBmaXJzdCBnbHlwaCBvZiBhIHRleHQgcm93 IGJhc2VkIG9uIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbgorICAgICBvZiB0aGUgZnJpbmdlLiAgKi8K KyAgc3RydWN0IGdseXBoICpnbHlwaCA9IE1BVFJJWF9ST1dfR0xZUEhfU1RBUlQody0+Y3VycmVu dF9tYXRyaXgsIHZwb3MpOworICBpbnQgZ2x5cGhfbnVtID0gTUFUUklYX1JPV19VU0VEKHctPmN1 cnJlbnRfbWF0cml4LCB2cG9zKTsKKworICAvKiBDaGVjayBhbGwgZ2x5cGhzIHdoaWxlIGxvb2tp bmcgZm9yIGZyaW5nZSB0b29sdGlwcy4gICovCisKKyAgLyogTk9URTogaXRlcmF0aW5nIG92ZXIg Z2x5cGhzIGNhbiBvbmx5IGZpbmQgdGV4dCBwcm9wZXJ0aWVzIGNvbWluZworICAgICBmcm9tIHZp c2libGUgdGV4dC4gIFRoaXMgbWVhbnMgdGhhdCB6ZXJvLWxlbmd0aCBvdmVybGF5cyBhbmQKKyAg ICAgaW52aXNpYmlsZSB0ZXh0IGFyZSBOT1QgaW5zcGVjdGVkLiAgKi8KKyAgZm9yICg7Z2x5cGhf bnVtOyBnbHlwaF9udW0tLSwgZ2x5cGgrKykKKyAgICB7CisgICAgICBMaXNwX09iamVjdCBwb3Mg PSBtYWtlX2ZpeG51bShnbHlwaC0+Y2hhcnBvcyk7CisgICAgICBMaXNwX09iamVjdCBoZWxwX2Vj aG8gPSBRbmlsOworCisgICAgICBpZiAoU1RSSU5HUChnbHlwaC0+b2JqZWN0KSB8fCBCVUZGRVJQ KGdseXBoLT5vYmplY3QpKQorCWhlbHBfZWNobyA9IGdldF9jaGFyX3Byb3BlcnR5X2FuZF9vdmVy bGF5IChwb3MsIHN5bSwgZ2x5cGgtPm9iamVjdCwgTlVMTCk7CisKKyAgICAgIGlmIChTVFJJTkdQ IChoZWxwX2VjaG8pKQorCXsKKwkgIGhlbHBfZWNob19zdHJpbmcgPSBoZWxwX2VjaG87CisJICBi cmVhazsKKwl9CisgICAgfQorfQorCiAvKiBFWFBPUlQ6CiAgICBUYWtlIHByb3BlciBhY3Rpb24g d2hlbiB0aGUgbW91c2UgaGFzIG1vdmVkIHRvIHBvc2l0aW9uIFgsIFkgb24KICAgIGZyYW1lIEYg d2l0aCByZWdhcmRzIHRvIGhpZ2hsaWdodGluZyBwb3J0aW9ucyBvZiBkaXNwbGF5IHRoYXQgaGF2 ZQpAQCAtMzU5NTcsOCArMzYwMTAsMTIgQEAgbm90ZV9tb3VzZV9oaWdobGlnaHQgKHN0cnVjdCBm cmFtZSAqZiwgaW50IHgsIGludCB5KQogICAgICAgfQogICAgIGVsc2UKICAgICAgIGN1cnNvciA9 IEZSQU1FX09VVFBVVF9EQVRBIChmKS0+bm9udGV4dF9jdXJzb3I7Ci0gIGVsc2UgaWYgKHBhcnQg PT0gT05fTEVGVF9GUklOR0UgfHwgcGFydCA9PSBPTl9SSUdIVF9GUklOR0UKLQkgICB8fCBwYXJ0 ID09IE9OX1ZFUlRJQ0FMX1NDUk9MTF9CQVIKKyAgZWxzZSBpZiAocGFydCA9PSBPTl9MRUZUX0ZS SU5HRSB8fCBwYXJ0ID09IE9OX1JJR0hUX0ZSSU5HRSkKKyAgICB7CisgICAgICBjdXJzb3IgPSBG UkFNRV9PVVRQVVRfREFUQSAoZiktPm5vbnRleHRfY3Vyc29yOworICAgICAgbm90ZV9mcmluZ2Vf aGlnaGxpZ2h0ICh3aW5kb3csIHgsIHksIHBhcnQpOworICAgIH0KKyAgZWxzZSBpZiAocGFydCA9 PSBPTl9WRVJUSUNBTF9TQ1JPTExfQkFSCiAJICAgfHwgcGFydCA9PSBPTl9IT1JJWk9OVEFMX1ND Uk9MTF9CQVIpCiAgICAgY3Vyc29yID0gRlJBTUVfT1VUUFVUX0RBVEEgKGYpLT5ub250ZXh0X2N1 cnNvcjsKICAgZWxzZQotLQoyLjM0LjEK --0000000000001a389f06157fcd58--