From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Mauro Aranda Newsgroups: gmane.emacs.bugs Subject: bug#18: Fine-grained revert-buffer Date: Wed, 15 May 2019 20:10:00 -0300 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000078df090588f54034" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="208039"; mail-complaints-to="usenet@blaine.gmane.org" To: 18@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu May 16 01:11:36 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hR33f-000s0N-FX for geb-bug-gnu-emacs@m.gmane.org; Thu, 16 May 2019 01:11:35 +0200 Original-Received: from localhost ([127.0.0.1]:45350 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hR33e-00033K-DQ for geb-bug-gnu-emacs@m.gmane.org; Wed, 15 May 2019 19:11:34 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:33268) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hR33C-0002rs-6V for bug-gnu-emacs@gnu.org; Wed, 15 May 2019 19:11:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hR339-0003Ea-4u for bug-gnu-emacs@gnu.org; Wed, 15 May 2019 19:11:06 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:40088) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hR338-0003EA-Su for bug-gnu-emacs@gnu.org; Wed, 15 May 2019 19:11:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hR338-0004y8-It for bug-gnu-emacs@gnu.org; Wed, 15 May 2019 19:11:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Mauro Aranda Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 15 May 2019 23:11:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 18 X-GNU-PR-Package: emacs Original-Received: via spool by 18-submit@debbugs.gnu.org id=B18.155796182319054 (code B ref 18); Wed, 15 May 2019 23:11:02 +0000 Original-Received: (at 18) by debbugs.gnu.org; 15 May 2019 23:10:23 +0000 Original-Received: from localhost ([127.0.0.1]:53632 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hR32U-0004xE-Gz for submit@debbugs.gnu.org; Wed, 15 May 2019 19:10:23 -0400 Original-Received: from mail-lf1-f49.google.com ([209.85.167.49]:44418) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hR32R-0004x1-TK for 18@debbugs.gnu.org; Wed, 15 May 2019 19:10:21 -0400 Original-Received: by mail-lf1-f49.google.com with SMTP id n134so1059988lfn.11 for <18@debbugs.gnu.org>; Wed, 15 May 2019 16:10:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=7fNGGMb87livZ2pCoz2ZtObOZjDgDrSDXCeFN21tkzk=; b=BJSPLwdgaOb0u0n94XaXYrtnFMXjf0Iwru4hPKR4o/+rwJaJrk3dOxPow4a3W4u1zt 2iOcG4kJNKOKwuWLxORpas71CCElYOHnjB5MkmjM6thVh4khJo27ClXXqy75cVRFydlt 5nHc587uedjnUR5COBuwCR8+4zTxEkTFyNbYDbHOBQTdUJaVlYgslmKKEX2wM0+RCEts ohYdkg7AU+HSK9Nluq7ToiRWBOl+MeyaDDRmtoOKtNlezxfsVsP9zKOPSGsR537lSPzv 0Nw51POD7U5z32OSVPdkOwzTGmVqG2cFqSby7xfRcOn96vlD4uiD+CVnF3k7rrk5vH+J KKGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=7fNGGMb87livZ2pCoz2ZtObOZjDgDrSDXCeFN21tkzk=; b=L1gAw2MHvJxNXsiAv18mwZUceiKUAXz316b80X/4SYhIl6TcqOyrSOwLMpiGLK1ipf 5Jyzj+BW4eOlBdU6/1RA5+NNm96SIUvV001KNeoJRHRJGDs9Kk68c9mIk7bOFOJTcmEN yrZrx7NxGTC7334ktKUxf/wq7hmuZJFUfCnIrb0Ehb4f/Mgwk+CI+XOgyEkBQH7MAqQY DuhPd98QR0WXatXBHIVjg88WMVcAAVK+4Uin1z0DRffTmEBOEBEYcH9mcX0urs/DEkKt hJej02BprauazEOKwAPfcuwkov7N8oFOHLgbmYCNPNgNm43kc4SYU/dEeOQ8F9UTfeo2 4pCg== X-Gm-Message-State: APjAAAWo8zxKU2AwGhps9I3Sktthw813yeBkACE0Ac+c4JrKXlSD7XBA LDYpaNgvXm8WCbmWNpa1SIzDV348dtgXJZ61VBBoLCJo X-Google-Smtp-Source: APXvYqzjgwAxh1azm6Tx5shpBmSHZMAeF0fasHMGSgxX/RzEjSJiNWuAorG1hXavRPQuM95xnpIBOy5pBJzDS+MADDs= X-Received: by 2002:ac2:51a9:: with SMTP id f9mr22830474lfk.56.1557961813566; Wed, 15 May 2019 16:10:13 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:159369 Archived-At: --00000000000078df090588f54034 Content-Type: multipart/alternative; boundary="00000000000078df050588f54032" --00000000000078df050588f54032 Content-Type: text/plain; charset="UTF-8" I spent some time thinking on how to get this new revert command integrated with the rest of revert-buffer functions, and I came up with the attached patch. Since the difference between revert-buffer and revert-buffer-with-fine-grain lies at the insert-file-contents level, I wrote an alternative to revert-buffer-insert-file-contents--default-function, that uses replace-buffer-contents, as Eli suggested. I named it revert-buffer-insert-file-contents-delicately. Then, revert-buffer-with-fine-grain only needs to bind revert-buffer-insert-file-contents-function to revert-buffer-insert-file-contents-delicately to get the job done. There are some more things that revert-buffer-with-fine-grain needs to do: 1) Manipulate the current-prefix-arg, just like revert-buffer does. 2) Since replace-buffer-contents can fail to replace conservatively, return that information could be useful. But revert-buffer--default always returns t after reverting, so I used a closure that then gets called by revert-buffer-with-fine-grain. To control how much time replace-buffer-contents spends trying to be non-destructive, I introduced a new variable to pass as the MAX-SECS argument. 2.0 secs looks like a good value, according to the previous benchmark I posted, and the new one I post here. I think it should be an acceptable delay. As I said above, I timed the command, and to compare I timed revert-buffer too. IMO, the results look good. Some files fail and take a lot of time, yes, but I think it's unlikely that a user will revert so many changes. And for those, at least the variable revert-buffer-with-fine-grain-max-seconds helps to terminate the execution earlier. I also went ahead and wrote a test for revert-buffer-with-fine-grain, because I figure it would be required, as well as the benchmarking. As I was there, I wrote a similar test for revert-buffer. Corrections and comments are welcome. Better names too. Best regards, Mauro. --00000000000078df050588f54032 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I spent some time thinking on how to get = this new revert command
integrated with the rest of revert-buffer functi= ons, and I came up with
the attached patch.

Since the difference = between revert-buffer and
revert-buffer-with-fine-grain lies at the inse= rt-file-contents level, I
wrote an alternative to
revert-buffer-inser= t-file-contents--default-function, that uses
replace-buffer-contents, as= Eli suggested.=C2=A0 I named it
revert-buffer-insert-file-contents-deli= cately.

Then, revert-buffer-with-fine-grain only needs to bind
re= vert-buffer-insert-file-contents-function to
revert-buffer-insert-file-c= ontents-delicately to get the job done.

There are some more things t= hat revert-buffer-with-fine-grain needs to
do:
1) Manipulate the curr= ent-prefix-arg, just like revert-buffer does.
2) Since replace-buffer-co= ntents can fail to replace conservatively,
return that information could= be useful.=C2=A0 But revert-buffer--default
always returns t after reve= rting, so I used a closure that then gets
called by revert-buffer-with-f= ine-grain.

To control how much time replace-buffer-contents spends t= rying to be
non-destructive, I introduced a new variable to pass as the = MAX-SECS
argument.=C2=A0 2.0 secs looks like a good value, according to = the previous
benchmark I posted, and the new one I post here.=C2=A0 I th= ink it should be
an acceptable delay.

As I said above, I timed the command, a= nd to compare I timed
revert-buffer too.=C2=A0 IMO, the results look goo= d.=C2=A0 Some files fail and
take a lot of time, yes, but I think it'= ;s unlikely that a user will revert
so many changes.=C2=A0 And for those= , at least the variable
revert-buffer-with-fine-grain-max-seconds helps = to terminate the
execution earlier.

I also went ahead and wrote a= test for revert-buffer-with-fine-grain,
because I figure it would be re= quired, as well as the benchmarking.
As I was there, I wrote a similar t= est for revert-buffer.

Corrections and comments are welcome.=C2=A0 B= etter names too.

Best = regards,
Mauro.
--00000000000078df050588f54032-- --00000000000078df090588f54034 Content-Type: text/plain; charset="US-ASCII"; name="bug18-benchmark.txt" Content-Disposition: attachment; filename="bug18-benchmark.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jvpu4fpx1 RklMRQlPTEQgU0laRQlORVcgU0laRQlIVU5LUwlSRVZFUlQtQlVGRkVSCVJFVkVSVC1CVUZGRVIt V0lUSC1GSU5FLUdSQUlOCmFsbG9jLmMJMjA0NTIwCTIwOTYzMAkyODcJMC4xNjg4NTUxMjcwMDAw MDA5NwkyLjUyMTY1NDA1CmF0aW1lci5jCTE0MTIzCTE0MTM2CTQJMC4wNDU2NjU1MzcJMC4wMTAw NDcwMTcKYXRpbWVyLmgJMjE3MQkyMTcyCTIJMC4wMzcxMDY2NzEJMC4wMDM5MDUxOQpiaWRpLmMJ MTI0Nzg2CTEyNTE4NQkxMwkwLjA5Mjg2NTY3NgkwLjA2MjI1MjI5NApibG9ja2lucHV0LmgJMjMy MwkyMzI0CTIJMC4wMzc3ODcxOTUJMC4wMDM5MTc0MTMKYnVmZmVyLmMJMjEwNjY1CTIwOTA0NAk2 MQkwLjE0NjExMzc3OTAwMDAwMTU1CTAuOTM3MDQ1NzM3CmJ1ZmZlci5oCTQ2MzU2CTQ3MjUzCTE1 CTAuMDY4MjUzMzc0CTAuMDQ1NTU2OTY5CmJ5dGVjb2RlLmMJNDQ1MDgJMzQ2MTgJMjM5CTAuMDY0 NDM5NjAyCTIuMjM4NjE2NgpjYWxsaW50LmMJMzA4NDUJMzEyNDMJNwkwLjA0OTYyMjU1MQkwLjAy Mjc5MDcwNgpjYWxscHJvYy5jCTUyNDE0CTUyMzI1CTQzCTAuMDcwMzE2NDU3CTAuMDgwNTI0NzQ5 CmNhc2VmaWRkbGUuYwkxMzUzMAkyMTU2MQk1MgkwLjA0MDU3NTc4CTQuNjE5MjQ3Mzg3CmNhc2V0 YWIuYwk4NjQxCTg2NDIJMgkwLjAzODU3NDI5NQkwLjAwNTI2NzcwNApjYXRlZ29yeS5jCTE2NDk4 CTE2NDYzCTMJMC4wMzcyMTc2NDYJMC4wMDc4Njg1NTcKY2F0ZWdvcnkuaAk0NjA1CTQ2MDYJMQkw LjA0MDc1MTc3NwkwLjAwNTA3ODUwNwpjY2wuYwk2NDg5Mgk2NDkwOQk5CTAuMDc0ODIwMDQyCTAu MDM0MzAzODc4CmNjbC5oCTMzNzgJMzM3OQkxCTAuMDQwMTAzNTE5CTAuMDA0NDk4NjkzCmNoYXJh Y3Rlci5jCTMwMDExCTMxNDYwCTEyCTAuMDQ2MDA4MjQyCTAuMDMxOTg1MTEKY2hhcmFjdGVyLmgJ MjIyNjAJMjI4MDcJMTAJMC4wNTEzMjA0MzkJMC4wMjM2ODI0MjUKY2hhcnNldC5jCTcxMDk5CTcx MzUzCTI3CTAuMDcyMTg4ODc2CTAuMDUxNjk3MzIzCmNoYXJzZXQuaAkxOTQ5NwkxOTQ5OAkyCTAu MDQ1MTc1Njc0CTAuMDEyNDE1MTYKY2hhcnRhYi5jCTQwNTAwCTQwNDc3CTMJMC4wNDY1MjY5NDYJ MC4wMTY1MjA3OTIKY20uYwkxMjQ1MAkxMjQ5Nwk4CTAuMDM5ODA2Mjc3CTAuMDA4OTg1NjUyCmNt LmgJNjY2Mwk2NjY0CTIJMC4wNDAwNDkyNTIJMC4wMDczNzYyNTMKY21kcy5jCTE2NTI2CTE2NTk5 CTcJMC4wNDI2OTc1MjkJMC4wMTA4ODM0OTMKY29kaW5nLmMJMzM4OTczCTMzOTYxNAk1MAkwLjIy MTY2MjI0OTAwMDAwMDcJMC4yMDEyMTY1MjQKY29kaW5nLmgJMjUxMzUJMjUwODkJOQkwLjA1MTg2 NDU2NAkwLjA0MzUwMjY4Mgpjb21tYW5kcy5oCTE3NzcJMTc3OAkyCTAuMDM3NTQxMjg1CTAuMDAz NzI3MjM3CmNvbXBvc2l0ZS5jCTYyMjA3CTYyNjYyCTIyCTAuMDY2MDQzNjIyCTAuMDQwOTYwMDA2 CmNvbXBvc2l0ZS5oCTEyODQxCTEyODQyCTIJMC4wNDMyMjQ1NDQJMC4wMTAxNTAxNwpjb25mX3Bv c3QuaAkxMjIxOQkxMzYxOQkzMgkwLjA1Nzk0NDMwNQkwLjMxNjcyMDI4NgpjeWd3MzIuYwk0MDk3 CTQxMDMJNAkwLjAzNDg4NTY3NQkwLjAwNDE3NjAzCmN5Z3czMi5oCTExMTQJMTExNQkyCTAuMDM3 ODk3MTkyCTAuMDAzODM2MjU4CmRhdGEuYwkxMDU5NzAJMTExODU5CTE3MwkwLjA5MTEwNTIwMwky LjM2OTQzNjc3CmRidXNiaW5kLmMJNTY3MTcJNTYxMTQJMzMJMC4wNzA5Njc2NDUJMC4wNDA1MTQ2 MzMKZGVjb21wcmVzcy5jCTU4MTgJNTgxNgk2CTAuMDM3NzExOTA0CTAuMDA2MjU0NzU3CmRpcmVk LmMJMzM5MzMJMzUyNjQJNDYJMC4wNTQzODE4MTkJMC4xMjkxMTQ3MjUKZGlzcGV4dGVybi5oCTEy NTA0OQkxMjU1OTkJMjcJMC4xMTI1MTQ4MzIwMDAwMDI0CTAuMTM3Njg5NzE2CmRpc3BuZXcuYwkx OTI4MjAJMTk1MDAyCTQwCTAuMTQwMzQyMDIwMDAwMDAyMTgJMC4xMjYzODQzMTcKZGlzcHRhYi5o CTM3OTIJMzc5MwkyCTAuMDM4OTQ4Nzc2CTAuMDA1NzYxOTY0CmRvYy5jCTMwNzg3CTMwMzY0CTYw CTAuMDU0MjA2Nzk4CTIuMDQwOTIwNjU5CmRvcHJudC5jCTE3NDQwCTE3MzQxCTExCTAuMDQ1ODQy OTk3CTEuNDE4MDk0NzAyCmRvc2Zucy5jCTI0MDIzCTI0MDI0CTIJMC4wNDM5MzE0NjYJMC4wMTIx MDc2NTIKZG9zZm5zLmgJMTM1NAkxMzU1CTIJMC4wMzY1ODc5NjIJMC4wMDMzMjc4MgpkeW5saWIu Ywk4MjA0CTgxNDQJMTMJMC4wMzk0NDI1NDcJMC4wMTA4OTkxMzUKZHlubGliLmgJMTIzNgkxNDcw CTQJMC4wMzQ0MTI5MjUJMC4wMDY1MzQ4ODYKZWRpdGZucy5jCTE2MzczOQkxNzY2OTYJMTY4CTAu MTMzMjk5NjY3CTIxLjg0MjI0MTEyOAplbWFjcy1pY29uLmgJMTEyMjcJOTc0MQk1CTAuMDQ0MjEx NTk1CTAuODk5Mzk0MDY3CmVtYWNzLW1vZHVsZS5jCTM2MTQxCTQxMDgzCTEyMwkwLjA1MzE1NzE2 NgkzLjQ0MTk5MDk5MgplbWFjcy1tb2R1bGUuaAk1OTI2CTExNDAzCTM5CTAuMDM5MzEwNTQ5CTAu MzM1NzIzOTgxCmVtYWNzLmMJNzY2MDkJODIyNTkJMTA0CTAuMTAyNDEwNjA0OTk5OTk3NzcJMC43 ODI1MjI0MDkKZW1hY3NndGtmaXhlZC5jCTc2MTAJNzU5Mwk3CTAuMDM4MjQwODc0CTAuMDA2Njgy NTI3CmVtYWNzZ3RrZml4ZWQuaAkxMjMyCTEyMzMJMgkwLjAzNjEyNDAxMgkwLjAwMzY0NjU3CmV2 YWwuYwkxMTQxMjAJMTI0NzEwCTE4OAkwLjA4NzU4OTE1NQkyLjg5ODcyMjMxNQpmaWxlaW8uYwkx OTM4OTUJMTk4NTM0CTE3OAkwLjE1MTc1MzUwOTk5OTk5ODQ4CTIuMTA3NjI2MzQyCmZpbGVsb2Nr LmMJMjUxMjMJMjQ5MTYJMTgJMC4wNTMwNDU3CTAuMDMwMDYzMwpmaXJzdGZpbGUuYwkxMTc0CTEx ODEJNAkwLjAzNjI3NDU4OAkwLjAwMzQyMzYzOQpmbG9hdGZucy5jCTE0MzAxCTE0OTQyCTQyCTAu MDQzMDMwOTQyCTAuMDcwMDYwNjc4CmZucy5jCTE0NDI5NwkxNTIzOTAJMjYxCTAuMTEzMTQ3NDQJ Mi42MjgwNjIwMDcKZm9udC5jCTE1Njc1OQkxNTgwOTAJNDYJMC4xMjE4NTczNjkJMC4xMDYxMTc2 NjYKZm9udC5oCTMyNzY3CTM1MTExCTQxCTAuMDU5MjcyNTk0CTAuMDgxMzg1MTM0CmZvbnRzZXQu Ywk2MzgwNgk2NjAxNQk0MwkwLjA2Njc0MjIyOAkwLjA2ODc0OTAwNwpmb250c2V0LmgJMTg3MAkx ODcxCTIJMC4wMzYyMDEyNTUJMC4wMDM3NzQ2NTYKZnJhbWUuYwkxNjk0NTkJMTk3MDM1CTE5Nwkw LjE0MTg4MDUyMzk5OTk5NzIzCTExLjM5MDgyNjg5MgpmcmFtZS5oCTUxNzI0CTU1ODI5CTM1CTAu MDg0MDk1NTk4CTAuMTk4ODkwMwpmcmluZ2UuYwk0NzEwNwk0NzQxMAk2CTAuMDU4MjU1NzE4CTAu MDI1NjIxMzE1CmZ0Y3Jmb250LmMJODUyMgk4OTk5CTEzCTAuMDM3NTkzMTAzCTAuMDE4NDcxOTA4 CmZ0Zm9udC5jCTc2NTMxCTc0NzM2CTI5CTAuMDg0MDk5NTA5CTAuMDk5NzExMzQ1CmZ0Zm9udC5o CTE0NzcJMTQ3OAkxCTAuMDM4Mzg1NTgxCTAuMDAzODg0MTY1CmZ0eGZvbnQuYwk5MjUyCTk4MTcJ MTkJMC4wMzgwOTIyNTEJMC4wMjQ0MDIwNDQKZ2V0cGFnZXNpemUuaAkxNTQyCTE1NDMJMgkwLjAz ODE5ODMzOQkwLjAwNTk2MDQ0NgpnZmlsZW5vdGlmeS5jCTEwMzU2CTExMDA1CTEwCTAuMDM5MTk2 NjM2CTAuMDE0NzE0MzYzCmdtYWxsb2MuYwk1OTUzNQk1ODczNgk4NgkwLjA3NDAzNzgxOQkwLjI5 ODI1MTYwMgpnbnV0bHMuYwk1NzM1MAk4ODYyOAkxMzQJMC4wNzQxNjE5OTUJMTMuNDQwNTA5Mjk2 CmdudXRscy5oCTI3ODIJMzE0Ngk3CTAuMDM5MDczOTI3CTAuMDA3MzUyMjkyCmd0a3V0aWwuYwkx NjIyNDAJMTY3MDIxCTY1CTAuMTM3Nzg1NjQxCTEuMTAyNzQ3NDM0Cmd0a3V0aWwuaAk3MTQ4CTc2 NjkJNwkwLjA0MjYwNTEyNAkwLjAxNDU2Mzc4NQppbWFnZS5jCTI3MDI1MwkyNzIxMzYJMTk3CTAu MjQwNDg2NjMyOTk5OTk5NzMJMC4zNzcxMDEzMjYwMDAwMDAxCmluZGVudC5jCTY4NzI1CTcyNTQz CTQwCTAuMDY5NjU1NDc2CTAuMTk3OTU3OTY4CmluZGVudC5oCTIxNzEJMjE3MgkyCTAuMDM3Nzkx MDk5CTAuMDAzNzQ3NzY3Cmlub3RpZnkuYwkxMTc0NAkxNjQyMwkyOQkwLjA0MDkwOTY3OQkxLjE3 NDgzMjAzMwppbnNkZWwuYwk2NTMyOQk2OTMxNAkyMQkwLjA2NjY4NTUxNQkwLjMyNTUxOTQxMwpp bnRlcnZhbHMuYwk2OTkwNgk2OTE3Ngk5CTAuMDY3NTc2NzQ4CTAuMDUwNDg0MzY1CmludGVydmFs cy5oCTExNzAyCTExNjA0CTExCTAuMDQ1NDA3Mzk3CTAuMDExOTA5NjQ2CmtleWJvYXJkLmMJMzY4 Njk4CTM3NTI5Nwk5OQkwLjI1ODYyNTE0Mjk5OTk5Njk1CTAuNDY1Mzc5MTY0CmtleWJvYXJkLmgJ MTg0MjQJMTg0NjkJNgkwLjA1MDE2NjE3OAkwLjAxMzczMjY4NgprZXltYXAuYwkxMTI2NjIJMTEz MzM1CTE3CTAuMDgzNjk1Njg3CTAuMDU2ODUxNTU5CmtleW1hcC5oCTIzMDEJMjMwMgkyCTAuMDM3 NTk1MDU2CTAuMDAzNzIwMzkKa3F1ZXVlLmMJMTU4OTkJMTY1NDMJMTAJMC4wNDQ1ODI2NTIJMC4w MTUyNzIxNzQKbGFzdGZpbGUuYwkxODkyCTIwNTMJNQkwLjAzNjIzNzkxOQkwLjAwNDA4NzUzOQps aXNwLmgJMTUxNTMyCTE1NDc1MAkyNjYJMC4xNTA5MTU1NDY5OTk5OTc1CTM1Ljg5NzE4MzU4NAps cmVhZC5jCTE0MTQzNAkxNTM5NjIJMTg0CTAuMTE5MDQ2MjgyCTIuNzIwMTQzOTIzCm1hY2ZvbnQu aAkyNzEyCTI4NDgJMwkwLjAzNTg1OTAzNAkwLjAwNDY0NDg2MwptYWNyb3MuYwkxMjI5NwkxMjMw NwkzCTAuMDQxMDM1ODA5CTAuMDA2Nzg1Njc1Cm1hY3Jvcy5oCTE2NjQJMTY2NQkyCTAuMDM0MjUy NTY2CTAuMDAzNDk3OTQ3Cm1hY3V2cy5oCTQ3ODcxMAk0Nzg4NDIJOQkwLjIwODg3MDEwNwkwLjI4 MTY2NTY0MQptYXJrZXIuYwkyMTY1NQkyMjE5MAk2CTAuMDQzODg1MDE2CTAuMDE1MzQ5OTAxCm1l bnUuYwk0NTQ0Mgk0NTMxMAk4CTAuMDYwNzI3MDEzCTAuMDI1NDQ1NzkyCm1lbnUuaAkyMjkxCTIy NzYJMwkwLjAzNzQ3NTI3OAkwLjAwNDQ1MzIyMQptaW5pYnVmLmMJNzEzNDgJNzM3NTQJNDEJMC4w NzA1NTA2MTUJMC4wOTQ5MTc4MDUKbXNkb3MuYwkxMTcwMzIJMTE3NTcwCTkJMC4xMTM5ODQzOTEw MDAwMDAwNwkxLjg1MDQ1NDQ5Mwptc2Rvcy5oCTQyMjcJNDM0OAk1CTAuMDM5ODQwNDkxCTAuMDA2 MjI3ODYxCm5zZ3VpLmgJNDkzOAk0OTM5CTIJMC4wNDE0MjM5ODEJMC4wMTAwODgwNjkKbnN0ZXJt LmgJMzg2MjYJNDQwODMJNDQJMC4wNzExODQ2OTUJMC40OTc0OTAxNzUKcHJpbnQuYwk3MDAzOAk3 Mzg0MQk0NQkwLjA3NDk2Mzc1NQkzLjA5MjkwMTY3Ngpwcm9jZXNzLmMJMjI3NTgyCTI0NzI5MAky OTUJMC4xODkwNDY0MTAwMDAwMDAyCTIyLjA5MDIzMDY5NApwcm9jZXNzLmgJODIzNAk5ODM2CTE2 CTAuMDQxNzA4MDIxCTAuMDM5MjE4NTUxCnByb2ZpbGVyLmMJMTg0ODIJMTg0NTcJMTEJMC4wNDUw NjYxNTMJMC4wMTIyNzgyNTUKcHVyZXNpemUuaAkzNDQyCTM0NDMJMwkwLjA0MTQ3MjM4CTAuMDA1 ODkxOTk4CnJhbGxvYy5jCTMzNDQ0CTMzMDgzCTcJMC4wNDg1NjQxMDcJMC4wMTkzNDY5OQpyZWdl eC5jCTE5NDMwNQkxOTMzMjYJOTcJMC4xODQyMDU0OTMwMDAwMDI1NQkyLjExNDA1Mjk4MDAwMDAw MzQKcmVnZXguaAkyMzc2MgkyMzc4NAkxOAkwLjA1NTEwNjMyOQkwLjAzNzQzOTk5OQpyZWdpb24t Y2FjaGUuYwkyNjYyMQkyNjYyMgkyCTAuMDQwOTM0MTE5CTAuMDExNjQ3MTA5CnJlZ2lvbi1jYWNo ZS5oCTUyNzgJNTI3OQkyCTAuMDM3NzUxOTg0CTAuMDA0NTA4NDY0CnNjcm9sbC5jCTMyNTEzCTMy NDc5CTYJMC4wNDQyNTIxNjQJMC4wMTI4MjE4OTEKc2VhcmNoLmMJMTAzNTEzCTEwMzMyMQk2MQkw LjA4NjQ2NTE5OQkwLjA4MTU0MDUxOApzaGVhcC5jCTI5NDIJMjE0MAkxNAkwLjAzNjg4OTEwNgkw LjAyODIxODIzMQpzb3VuZC5jCTQwMzU3CTQwNDEzCTgJMC4wNTM5Mjk1OQkwLjAyMTMyNzQ0OApz eW50YXguYwkxMDk3MzgJMTEzMTYxCTE1OAkwLjA4NzI2NzQ1NAkxLjQzNDMyNTUyMwpzeW50YXgu aAk3NzYxCTc3NjIJMgkwLjAzNzkwNTQ5MwkwLjAwNTY0OTAyNApzeXNkZXAuYwkxMDIwMDcJMTEx NTgyCTk5CTAuMTMyODk1MzMwOTk5OTk2NzMJMS45ODk3MjE1NzMKc3lzc2VsZWN0LmgJMjI4Mwky NTU2CTMJMC4wMzcyNzQ4MzQJMC4wMDYzMDkwMTQKc3lzc2lnbmFsLmgJMjIzMgkyMzY3CTQJMC4w Mzg3ODQ1MDMJMC4wMDUzMjczNApzeXNzdGRpby5oCTEwMjIJMjEyNQkzCTAuMDM3MTg0ODgJMC4w MTMwNjU4NDIKc3lzdGltZS5oCTMxODYJMzE4NwkyCTAuMDM4NDY5MTc0CTAuMDA0ODgxNDgKc3lz dHR5LmgJMjc3NAkyNzU0CTMJMC4wMzkxMjM3ODcJMC4wMDUxNTE4MzIKc3lzd2FpdC5oCTE5MDkJ MTkxMAkzCTAuMDM5MDUyODk5CTAuMDA0ODQ2MjgxCnRlcm0uYwkxMzAwODIJMTMxMDk3CTU3CTAu MTA5OTg4MjU4CTAuMDg2NDgyMTI4CnRlcm1jYXAuYwkxNTg0OQkxNTk1MAkyCTAuMDQxNjgxMTMJ MC4wMDkxODI2NTgKdGVybWNoYXIuaAk5MzA2CTkxNDIJMwkwLjAzODAzNzQ5CTAuMDA3Mzg4NDYz CnRlcm1ob29rcy5oCTI4MDQ3CTI4Nzk5CTEwCTAuMDUyNzI4ODkzCTAuMDI0Nzg0ODE2CnRlcm1p bmFsLmMJMTg1MzIJMTg4NDIJNQkwLjA0MjQ4OTc0MgkwLjAxMjYzNzA5Mwp0ZXJtaW5mby5jCTE2 MDQJMTYwNQkyCTAuMDM3MDI5OTA0CTAuMDAzMjk5OTQ5CnRlcm1vcHRzLmgJMTA2NAkxMDY1CTIJ MC4wMzc1MDY1NjQJMC4wMDMzMTI2Ngp0ZXh0cHJvcC5jCTcyMDY4CTcyODg1CTEwCTAuMDYyOTk0 OTMzCTAuMDM5Nzg4NTg0CnRwYXJhbS5jCTcyOTYJNzM5OQk5CTAuMDM5NjMyNzEzCTAuMDA2NTE0 ODMyCnRwYXJhbS5oCTEyODUJMTM0MAkzCTAuMDM2NzU5NTUxCTAuMDAzNzI0Nzg3CnVuZG8uYwkx NTY4MgkxNTY4MwkyCTAuMDM3NDQ0NDc2CTAuMDA2OTk0NDI1CnVuZXhhaXguYwkxNTUxNAkxNTUx NQkyCTAuMDQxMjc0ODY4CTAuMDA5MDAxNzcyCnVuZXhjb2ZmLmMJMTUxNTYJMTUxNTcJMgkwLjA0 MjA0MTkyNAkwLjAwOTU5MTg1MQp1bmV4Y3cuYwk5MTA3CTg5MTYJMTIJMC4wNDEwNzU0MDQJMC4w MDc4ODgxCnVuZXhlYy5oCTExNgkxMTYJMAkwLjAzMzQwODc1MQkwLjAwMzAzOTg2NAp1bmV4ZWxm LmMJMjM3NjUJMjEyOTkJMTEJMC4wNTM5MDQ2NTQJMC4xNDg5Mzk2NDcKdW5leGhwOWs4MDAuYwk5 ODE3CTk4MTcJMAkwLjAzNjA1NDU4MgkwLjAwNjQ4NDUyMgp1bmV4bWFjb3N4LmMJNDMyMjAJNDIz NTAJNgkwLjA1MzYwNjQzNgkwLjAyOTg3ODQ3CnVuZXhzb2wuYwk2MDQJNjA0CTAJMC4wMzU2Nzg2 MzIJMC4wMDMwODUzMwp1bmV4dzMyLmMJMjY5OTgJMjcxODkJMjUJMC4wNDg4ODEzODgJMC4wMzAx NjAwNjYKdm0tbGltaXQuYwk1NzQ1CTU5MDcJNAkwLjAzODExMzI2NgkwLjAwNzI1NjQ2NQp3MTZz ZWxlY3QuYwkyMjI3OQkyMjI4MAkyCTAuMDQzMDU5Nzc2CTAuMDEwNzc2NDExCnczMi5jCTI2NjAw NQkyNzM3NDgJNjYJMC4xODI2MDA5NjgwMDAwMDE1OAkwLjYyNzY0MjkzMQp3MzIuaAk4OTQ5CTg5 NTMJNAkwLjA0MjAxMDYzNgkwLjAwNzU5MTgzOAp3MzJjb21tb24uaAkxNjY1CTE2NjYJMgkwLjAz NjQ1NjQ0MwkwLjAwMzc5MzcxOQp3MzJjb25zb2xlLmMJMjM1MzgJMjQ2OTYJMjIJMC4wNDg4OTUw NzUJMC4wMjM0MjA4MzYKdzMyZm5zLmMJMzI0NDk5CTM2MjU1MgkyMTIJMC4yMTkzNzQyMDQwMDAw MDA2OAkxOC4yNDg1MDEzMjQKdzMyZm9udC5jCTg4NjQzCTkwODQyCTI5CTAuMDgxNTE5NjU3CTAu MDcyMDI2MzgzCnczMmZvbnQuaAkyOTc3CTI5NDIJMwkwLjAzOTExMDU4NQkwLjAwNDY5MjI4Mgp3 MzJndWkuaAk0MDIwCTQwMjEJMgkwLjAzNzQ5NjI5NQkwLjAwNzA0MTM1Nwp3MzJoZWFwLmMJMjM5 MDUJMjYyMzMJMTYJMC4wNDk5MzEwMTcJMC4wNTAyNjYyNzkKdzMyaGVhcC5oCTIyNjcJMjI0NQk0 CTAuMDM2ODU0ODgxCTAuMDAzOTUxNjI3CnczMmluZXZ0LmMJMjMzNzUJMjQxOTMJMjEJMC4wNDcz MzE2MjkJMC4wMzQ2NjI2NTcKdzMyaW5ldnQuaAkxMTc2CTExNzcJMgkwLjAzNDMzNjY0OQkwLjAw MzQwNjAzNgp3MzJtZW51LmMJNDU1OTUJNDU2MDAJMTMJMC4wNjAwMzgxNjgJMC4wMjczNjcwODIK dzMybm90aWZ5LmMJMjQwMDMJMjUxMjIJNDMJMC4wNDUyMjg5NDYJMC4yOTYzMTMzNTUKdzMycHJv Yy5jCTExNDE0MAkxMTU4NDEJMzAJMC4wOTgyOTQxODYJMC4wODk3MTg5OTMKdzMycmVnLmMJNDQ1 OAk0NDczCTQJMC4wMzcyNjAxNjQJMC4wMDQ2Mjg3MjcKdzMyc2VsZWN0LmMJMzI0OTgJMzU2ODMJ OAkwLjA1MTgyMjAxMgkwLjExNjM5MTg2NAp3MzJzZWxlY3QuaAk5NTMJOTU0CTIJMC4wMzY5NjI5 MjQJMC4wMDMyNDYxNzEKdzMydGVybS5jCTIwODIxNAkyMTY4MDQJMTI4CTAuMTQ2Mzg1MDQ3OTk5 OTk4MgkwLjQxNTczNjc2OAp3MzJ0ZXJtLmgJMzAxMTMJMzAxNjkJMTYJMC4wNjAzMzczNjQJMC4w NDgxMDk4MjMKdzMydW5pc2NyaWJlLmMJMzcyNTIJMzc4NTgJMTEJMC4wNTQ2MTMwNDEJMC4wMzAy NTkzMDMKdzMyeGZucy5jCTc0MjkJODQ0OQk0CTAuMDM3NjYxNTM2CTAuMDE2ODgzMDI0CndpZGdl dC5jCTE1MjM1CTE1NDA4CTIwCTAuMDQwOTgxNTM1CTAuMDE4MTU0NjA0CndpZGdldC5oCTI4MzkJ Mjg0Nwk0CTAuMDM5NjQ4MzU0CTAuMDA2MjAwOTcKd2lkZ2V0cHJ2LmgJMjE5MgkyMTkzCTQJMC4w MzQ4Mjg0NjMJMC4wMDM4MDU0NTEKd2luZG93LmMJMjQ3MDI5CTI2MzE5NgkxMTMJMC4xNTk2MTMy MjI5OTk5OTc4CTEuNzYyMDk4NTA4CndpbmRvdy5oCTQwNjc2CTQyNTMxCTU3CTAuMDY2NTIyMjEz CTAuNjcyOTc0MzE1CnhkaXNwLmMJMTAxNDI2MQkxMDYzOTEwCTQxMwkwLjU3MDk1Mzg3Njk5OTk5 NjgJOC4wODUyMTE5MTg5OTk5OTkKeGZhY2VzLmMJMTk4ODQwCTIwMDY4OQk0NAkwLjE1MzU1NTk2 NzAwMDAwMTU3CTAuMTMzMTc0MTY0CnhmbnMuYwkyMTk5OTIJMjQ5MDY4CTE0MgkwLjE3ODAxNDI1 Njk5OTk5NjgyCTExLjc3NzU5NTEzOQp4Zm9udC5jCTMxOTg0CTMxMjY2CTE3CTAuMDQ5NDE1NzMJ MC4wNDUwNjY1MjkKeGZ0Zm9udC5jCTIzODU4CTI0NjU4CTIzCTAuMDUzMzE5OTQ1CTAuMDk0OTYy NzEzCnhnc2VsZWN0LmMJNTI0NAk1NDQwCTExCTAuMDM4MjMyNTQ5CTAuMDA3NTM4MDU4Cnhnc2Vs ZWN0LmgJMTAwNgk5ODcJMwkwLjAzNDAzMTA5NQkwLjAwMzYxNTI3Ngp4bWVudS5jCTY3MDc0CTY4 ODAxCTE1CTAuMDgzNTEyODIzCTAuMDUzMzA2NjIKeG1sLmMJODA1NAk4MDM5CTYJMC4wMzg3ODk4 NzQJMC4wMDcwODg3NzYKeHJkYi5jCTE3Mzc1CTE3NDk4CTUJMC4wNDM0ODcwNTUJMC4wMTI5Nzcz NDkKeHNlbGVjdC5jCTg2ODE0CTg3Nzc2CTE2CTAuMDc1NzY1OTk1CTAuMDUxMjQyMDc1CnhzZXR0 aW5ncy5jCTMwNjU5CTMwNjM5CTQJMC4wNTYzMjQ2MTQJMC4wMTgzOTE3MDcKeHNldHRpbmdzLmgJ MTEzNAkxMTM1CTIJMC4wMzUzODc3NDIJMC4wMDM1MTc1CnhzbWZucy5jCTE3NTU5CTE3NjA1CTUJ MC4wNDUxMjUyOTkJMC4wMTA2MTgwMDkKeHRlcm0uYwkzODMwMTUJNDAyNTIxCTIwOAkwLjI5MDk5 MDA1MTk5OTk5NTE3CTIuMTQxNDY0NTI0OTk5OTk2NAp4dGVybS5oCTQxMzczCTQzNDI3CTEzCTAu MDcwMjMxMzU4CTAuMDcwMjM0MTI2Cnh3aWRnZXQuYwkzNzE5MwkzODQ1Ngk1MgkwLjA1NjEzNzg2 CTIuMTU4MDMzMTUyCnh3aWRnZXQuaAkzNzM5CTM2MjIJNQkwLjAzODQwMzE2OAkwLjAwNjI0MzUw MQo= --00000000000078df090588f54034 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-a-new-functionality-for-reverting-visiting-file-.patch" Content-Disposition: attachment; filename="0001-Add-a-new-functionality-for-reverting-visiting-file-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jvpu3ynz0 RnJvbSA1MGIxY2UwMTg1Y2Q3YjVmOGJlMTI0ZWI0YTYxMmZkNTZlNGUwNjU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXVybyBBcmFuZGEgPG1hdXJvb2FyYW5kYUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTQgTWF5IDIwMTkgMjI6MjM6MTcgLTAzMDAKU3ViamVjdDogW1BBVENIXSBB ZGQgYSBuZXcgZnVuY3Rpb25hbGl0eSBmb3IgcmV2ZXJ0aW5nIHZpc2l0aW5nLWZpbGUgYnVmZmVy cwoKKiBsaXNwL2ZpbGVzLmVsIChyZXZlcnQtYnVmZmVyLXdpdGgtZmluZS1ncmFpbik6IE5ldyBj b21tYW5kLiAgUmV2ZXJ0CmEgYnVmZmVyIHRyeWluZyB0byBiZSBub24tZGVzdHJ1Y3RpdmUsIGJ5 IHVzaW5nIHJlcGxhY2UtYnVmZmVyLWNvbnRlbnRzLgoocmV2ZXJ0LWJ1ZmZlci1pbnNlcnQtZmls ZS1jb250ZW50cy1kZWxpY2F0ZWx5KTogTmV3IGZ1bmN0aW9uLCBhbHRlcm5hdGl2ZQp0byByZXZl cnQtYnVmZmVyLWluc2VydC1maWxlLWNvbnRlbnRzLWZ1bmN0aW9uLS1kZWZhdWx0LWZ1bmN0aW9u LgoocmV2ZXJ0LWJ1ZmZlci13aXRoLWZpbmUtZ3JhaW4tbWF4LXNlY29uZHMpOiBOZXcgdmFyaWFi bGUuICBQYXNzZWQgYXMKYXJndW1lbnQgTUFYLVNFQ1Mgb2YgcmVwbGFjZS1idWZmZXItY29udGVu dHMuCgoqIGRvYy9lbWFjcy9maWxlcy50ZXhpIChSZXZlcnRpbmcpOiBEb2N1bWVudCB0aGUgbmV3 IGNvbW1hbmQgYW5kIHRoZQpuZXcgdmFyaWFibGUuCgoqIGV0Yy9ORVdTOiBNZW50aW9uIHRoZSBu ZXcgY29tbWFuZCBhbmQgdGhlIG5ldyB2YXJpYWJsZS4KCiogdGVzdC9saXNwL2ZpbGVzLXRlc3Rz LmVsIChmaWxlcy10ZXN0cy1sYW8gZmlsZXMtdGVzdHMtdHp1KTogSGVscGVyCiAgdmFyaWFibGVz LCB0YWtlbiBmcm9tIGRpZmZ1dGlscyBtYW51YWwsIHRvIHRlc3QgcmV2ZXJ0aW5nIGEgYnVmZmVy LgogIChmaWxlcy10ZXN0cy1yZXZlcnQtYnVmZmVyKQogIChmaWxlcy10ZXN0cy1yZXZlcnQtYnVm ZmVyLXdpdGgtZmluZS1ncmFpbik6IE5ldyB0ZXN0cy4KLS0tCiBkb2MvZW1hY3MvZmlsZXMudGV4 aSAgICAgfCAxNCArKysrKysrKysrCiBldGMvTkVXUyAgICAgICAgICAgICAgICAgfCAxMCArKysr KysrCiBsaXNwL2ZpbGVzLmVsICAgICAgICAgICAgfCA3MSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3QvbGlzcC9maWxlcy10ZXN0cy5lbCB8IDU0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAx NDkgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RvYy9lbWFjcy9maWxlcy50ZXhpIGIvZG9j L2VtYWNzL2ZpbGVzLnRleGkKaW5kZXggMzZlZjFkYy4uMzk4NTEyNCAxMDA2NDQKLS0tIGEvZG9j L2VtYWNzL2ZpbGVzLnRleGkKKysrIGIvZG9jL2VtYWNzL2ZpbGVzLnRleGkKQEAgLTkxNiw2ICs5 MTYsNyBAQCBUaW1lIFN0YW1wcwogQG5vZGUgUmV2ZXJ0aW5nCiBAc2VjdGlvbiBSZXZlcnRpbmcg YSBCdWZmZXIKIEBmaW5kZXggcmV2ZXJ0LWJ1ZmZlcgorQGZpbmRleCByZXZlcnQtYnVmZmVyLXdp dGgtZmluZS1ncmFpbgogQGNpbmRleCBkcmFzdGljIGNoYW5nZXMKIEBjaW5kZXggcmVyZWFkIGEg ZmlsZQogCkBAIC05MzYsNiArOTM3LDE5IEBAIFJldmVydGluZwogYWxpYXNlcyB0byBicmluZyB0 aGUgcmV2ZXJ0ZWQgY2hhbmdlcyBiYWNrLCBpZiB5b3UgaGFwcGVuIHRvIGNoYW5nZQogeW91ciBt aW5kLgogCitAdmluZGV4IHJldmVydC1idWZmZXItd2l0aC1maW5lLWdyYWluLW1heC1zZWNvbmRz CisgIFRvIHJldmVydCBhIGJ1ZmZlciBtb3JlIGNvbnNlcnZhdGl2ZWx5LCB5b3UgY2FuIHVzZSB0 aGUgY29tbWFuZAorQGNvZGV7cmV2ZXJ0LWJ1ZmZlci13aXRoLWZpbmUtZ3JhaW59LiAgVGhpcyBj b21tYW5kIGFjdHMgbGlrZQorQGNvZGV7cmV2ZXJ0LWJ1ZmZlcn0sIGJ1dCBpdCB0cmllcyB0byBi ZSBhcyBub24tZGVzdHJ1Y3RpdmUgYXMKK3Bvc3NpYmxlLCBtYWtpbmcgYW4gZWZmb3J0IHRvIHBy ZXNlcnZlIGFsbCBtYXJrZXJzLCBwcm9wZXJ0aWVzIGFuZAorb3ZlcmxheXMgaW4gdGhlIGJ1ZmZl ci4gIFNpbmNlIHJldmVydGluZyB0aGlzIHdheSBjYW4gYmUgdmVyeSBzbG93Cit3aGVuIHlvdSBo YXZlIG1hZGUgYSBsYXJnZSBudW1iZXIgb2YgY2hhbmdlcywgeW91IGNhbiBtb2RpZnkgdGhlCit2 YXJpYWJsZSBAY29kZXtyZXZlcnQtYnVmZmVyLXdpdGgtZmluZS1ncmFpbi1tYXgtc2Vjb25kc30g dG8KK3NwZWNpZnkgYSBtYXhpbXVtIGFtb3VudCBvZiBzZWNvbmRzIHRoYXQgcmVwbGFjaW5nIHRo ZSBidWZmZXIKK2NvbnRlbnRzIHRoaXMgd2F5IHNob3VsZCB0YWtlLiAgTm90ZSB0aGF0IGl0IGlz IG5vdCBlbnN1cmVkIHRoYXQgdGhlCit3aG9sZSBleGVjdXRpb24gb2YgQGNvZGV7cmV2ZXJ0LWJ1 ZmZlci13aXRoLWZpbmUtZ3JhaW59IHdvbid0IHRha2UKK2xvbmdlciB0aGFuIHRoaXMuCisKICAg U29tZSBraW5kcyBvZiBidWZmZXJzIHRoYXQgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGggZmlsZXMs IHN1Y2ggYXMKIERpcmVkIGJ1ZmZlcnMsIGNhbiBhbHNvIGJlIHJldmVydGVkLiAgRm9yIHRoZW0s IHJldmVydGluZyBtZWFucwogcmVjYWxjdWxhdGluZyB0aGVpciBjb250ZW50cy4gIEJ1ZmZlcnMg Y3JlYXRlZCBleHBsaWNpdGx5IHdpdGgKZGlmZiAtLWdpdCBhL2V0Yy9ORVdTIGIvZXRjL05FV1MK aW5kZXggNjk5YTA0Yi4uOTBiNDViMCAxMDA2NDQKLS0tIGEvZXRjL05FV1MKKysrIGIvZXRjL05F V1MKQEAgLTQzOSw2ICs0MzksMTYgQEAgSWYgdGhlIHJlZ2lvbiBpcyBhY3RpdmUsIHRoZSBjb21t YW5kIGpvaW5zIGFsbCB0aGUgbGluZXMgaW4gdGhlCiByZWdpb24uICBXaGVuIHRoZXJlJ3Mgbm8g YWN0aXZlIHJlZ2lvbiwgdGhlIGNvbW1hbmQgd29ya3Mgb24gdGhlCiBjdXJyZW50IGFuZCB0aGUg cHJldmlvdXMgb3IgdGhlIG5leHQgbGluZSwgYXMgYmVmb3JlLgogCisrKysKKyoqIE5ldyBjb21t YW5kICdyZXZlcnQtYnVmZmVyLXdpdGgtZmluZS1ncmFpbicuCitSZXZlcnQgYSBidWZmZXIgdHJ5 aW5nIHRvIGJlIGFzIG5vbi1kZXN0cnVjdGl2ZSBhcyBwb3NzaWJsZSwKK3ByZXNlcnZpbmcgbWFy a2VycywgcHJvcGVydGllcyBhbmQgb3ZlcmxheXMuCisKKysrKworKiogVGhlIG5ldyB2YXJpYWJs ZSAncmV2ZXJ0LWJ1ZmZlci13aXRoLWZpbmUtZ3JhaW4tbWF4LXNlY29uZHMnIHNwZWNpZmllcwor dGhlIG1heGltdW0gc2Vjb25kcyB0aGF0ICdyZXZlcnQtYnVmZmVyLXdpdGgtZmluZS1ncmFpbicg c2hvdWxkIHNwZW5kCit0cnlpbmcgdG8gYmUgbm9uLWRlc3RydWN0aXZlLgorCiAMCiAqIENoYW5n ZXMgaW4gU3BlY2lhbGl6ZWQgTW9kZXMgYW5kIFBhY2thZ2VzIGluIEVtYWNzIDI3LjEKIApkaWZm IC0tZ2l0IGEvbGlzcC9maWxlcy5lbCBiL2xpc3AvZmlsZXMuZWwKaW5kZXggOGZhN2YxNi4uYjY3 MjQ1OSAxMDA2NDQKLS0tIGEvbGlzcC9maWxlcy5lbAorKysgYi9saXNwL2ZpbGVzLmVsCkBAIC02 MDc2LDYgKzYwNzYsNzcgQEAgcmV2ZXJ0LWJ1ZmZlci1pbnNlcnQtZmlsZS1jb250ZW50cy0tZGVm YXVsdC1mdW5jdGlvbgogICAgICAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgZmlsZS1uYW1lIChu b3QgYXV0by1zYXZlLXApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgbmlsIHQp KSkpKSkKIAorKGRlZnZhciByZXZlcnQtYnVmZmVyLXdpdGgtZmluZS1ncmFpbi1tYXgtc2Vjb25k cyAyLjAKKyAgIk1heGltdW0gdGltZSB0aGF0IGByZXZlcnQtYnVmZmVyLXdpdGgtZmluZS1ncmFp bicgc2hvdWxkIHNwZW5kIHRyeWluZyB0bworcHJlc2VydmUgbWFya2VycywgcHJvcGVydGllcyBh bmQgb3ZlcmxheXMuICBJZiB0aGUgb3BlcmF0aW9uIHRha2VzIG1vcmUgdGhhbgordGhpcyB0aW1l LCBhIHNpbmdsZSBkZWxldGUraW5zZXJ0IGlzIHBlcmZvcm1lZC4KK0FjdHVhbGx5LCB0aGlzIHZh bHVlIGlzIHBhc3NlZCBhcyB0aGUgTUFYLVNFQ1MgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uCitg cmVwbGFjZS1idWZmZXItY29udGVudHMnLCBzbyBpdCBpcyBub3QgZW5zdXJlZCB0aGF0IHRoZSB3 aG9sZSBleGVjdXRpb24gd29uJ3QKK3Rha2UgbG9uZ2VyLiAgU2VlIGByZXBsYWNlLWJ1ZmZlci1j b250ZW50cycgZm9yIG1vcmUgZGV0YWlscy4iKQorCisoZGVmdW4gcmV2ZXJ0LWJ1ZmZlci1pbnNl cnQtZmlsZS1jb250ZW50cy1kZWxpY2F0ZWx5IChmaWxlLW5hbWUgX2F1dG8tc2F2ZS1wKQorICAi T3B0aW9uYWwgZnVuY3Rpb24gZm9yIGByZXZlcnQtYnVmZmVyLWluc2VydC1maWxlLWNvbnRlbnRz LWZ1bmN0aW9uJy4KK1RoZSBmdW5jdGlvbiBgcmV2ZXJ0LWJ1ZmZlci13aXRoLWZpbmUtZ3JhaW4n IHVzZXMgdGhpcyBmdW5jdGlvbiBieSBiaW5kaW5nCitgcmV2ZXJ0LWJ1ZmZlci1pbnNlcnQtZmls ZS1jb250ZW50cy1mdW5jdGlvbicgdG8gaXQuCitBcyB3aXRoIHJldmVydC1idWZmZXItaW5zZXJ0 LWZpbGUtY29udGVudHMtLWRlZmF1bHQtZnVuY3Rpb24sIEZJTEUtTkFNRSBpcwordGhlIG5hbWUg b2YgdGhlIGZpbGUgYW5kIEFVVE8tU0FWRS1QIGlzIG5vbi1uaWwgaWYgdGhpcyBpcyBhbiBhdXRv LXNhdmUgZmlsZS4KK1NpbmNlIGNhbGxpbmcgYHJlcGxhY2UtYnVmZmVyLWNvbnRlbnRzJyBjYW4g dGFrZSBhIGxvbmcgdGltZSwgZGVwZW5kaW5nIG9mCit0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFk ZSB0byB0aGUgYnVmZmVyLCBpdCB1c2VzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKK2ByZXZl cnQtYnVmZmVyLXdpdGgtZmluZS1ncmFpbi1tYXgtc2Vjb25kcycgYXMgYSBtYXhpbXVtIHRpbWUg dG8gdHJ5IGRlbGljYXRlbHkKK3JldmVydGluZyB0aGUgYnVmZmVyLiAgSWYgaXQgZmFpbHMsIGRv ZXMgYSBkZWxldGUraW5zZXJ0LiAgRm9yIG1vcmUgZGV0YWlscywKK3NlZSBgcmVwbGFjZS1idWZm ZXItY29udGVudHMnLiIKKyAgKGNvbmQgKChub3QgKGZpbGUtZXhpc3RzLXAgZmlsZS1uYW1lKSkK KyAgICAgICAgIChlcnJvciAoaWYgYnVmZmVyLWZpbGUtbnVtYmVyCisgICAgICAgICAgICAgICAg ICAgICJGaWxlICVzIG5vIGxvbmdlciBleGlzdHMiCisgICAgICAgICAgICAgICAgICAiQ2Fubm90 IHJldmVydCBub25leGlzdGVudCBmaWxlICVzIikKKyAgICAgICAgICAgICAgICBmaWxlLW5hbWUp KQorICAgICAgICAoKG5vdCAoZmlsZS1yZWFkYWJsZS1wIGZpbGUtbmFtZSkpCisgICAgICAgICAo ZXJyb3IgKGlmIGJ1ZmZlci1maWxlLW51bWJlcgorICAgICAgICAgICAgICAgICAgICAiRmlsZSAl cyBubyBsb25nZXIgcmVhZGFibGUiCisgICAgICAgICAgICAgICAgICAiQ2Fubm90IHJldmVydCB1 bnJlYWRhYmxlIGZpbGUgJXMiKQorICAgICAgICAgICAgICAgIGZpbGUtbmFtZSkpCisgICAgICAg ICh0CisgICAgICAgICAobGV0KiAoKGJ1ZiAoY3VycmVudC1idWZmZXIpKSA7IGN1cnJlbnQtYnVm ZmVyIGlzIHRoZSBidWZmZXIgdG8gcmV2ZXJ0LgorICAgICAgICAgICAgICAgIChzdWNjZXNzCisg ICAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAgICAgICAgICAgIChzYXZl LXJlc3RyaWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAod2lkZW4pCisgICAgICAgICAgICAg ICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAoaW5zZXJ0 LWZpbGUtY29udGVudHMgZmlsZS1uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgo dGVtcC1idWYgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKHNl dC1idWZmZXIgYnVmKQorICAgICAgICAgICAgICAgICAgICAgICAgIChyZXBsYWNlLWJ1ZmZlci1j b250ZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLWJ1ZgorICAgICAgICAgICAg ICAgICAgICAgICAgICByZXZlcnQtYnVmZmVyLXdpdGgtZmluZS1ncmFpbi1tYXgtc2Vjb25kcykp KSkpKSkKKyAgICAgICAgICAgOzsgU2VlIGNvbW1lbnRzIGluIHJldmVydC1idWZmZXItd2l0aC1m aW5lLWdyYWluIGZvciBhbiBleHBsYW5hdGlvbi4KKyAgICAgICAgICAgKGRlZnVuIHJldmVydC1i dWZmZXItd2l0aC1maW5lLWdyYWluLXN1Y2Nlc3MtcCAoKQorICAgICAgICAgICAgIHN1Y2Nlc3Mp KQorICAgICAgICAgKHNldC1idWZmZXItbW9kaWZpZWQtcCBuaWwpKSkpCisKKyhkZWZ1biByZXZl cnQtYnVmZmVyLXdpdGgtZmluZS1ncmFpbiAoJm9wdGlvbmFsIGlnbm9yZS1hdXRvIG5vY29uZmly bSkKKyAgIlJldmVydCBidWZmZXIgcHJlc2VydmluZyBtYXJrZXJzLCBvdmVybGF5cywgZXRjLgor VGhpcyBjb21tYW5kIGlzIGFuIGFsdGVybmF0aXZlIHRvIGByZXZlcnQtYnVmZmVyJyBiZWNhdXNl IGl0IHRyaWVzIHRvIGJlIGFzCitub24tZGVzdHJ1Y3RpdmUgYXMgcG9zc2libGUsIHByZXNlcnZp bmcgbWFya2VycywgcHJvcGVydGllcyBhbmQgb3ZlcmxheXMuCitCaW5kcyBgcmV2ZXJ0LWJ1ZmZl ci1pbnNlcnQtZmlsZS1jb250ZW50cy1mdW5jdGlvbicgdG8gdGhlIGZ1bmN0aW9uCitgcmV2ZXJ0 LWJ1ZmZlci1pbnNlcnQtZmlsZS1jb250ZW50cy1kZWxpY2F0ZWx5Jy4KK1dpdGggYSBwcmVmaXgg YXJndW1lbnQsIG9mZmVyIHRvIHJldmVydCBmcm9tIGxhdGVzdCBhdXRvLXNhdmUgZmlsZS4gIEZv ciBtb3JlCitkZXRhaWxzIG9uIHRoZSBhcmd1bWVudHMsIHNlZSBgcmV2ZXJ0LWJ1ZmZlcicuIgor ICA7OyBTZWUgcmV2ZXJ0LWJ1ZmZlciBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhpcy4KKyAgKGlu dGVyYWN0aXZlIChsaXN0IChub3QgY3VycmVudC1wcmVmaXgtYXJnKSkpCisgIDs7IFNpbXBseSBi aW5kIHJldmVydC1idWZmZXItaW5zZXJ0LWZpbGUtY29udGVudHMtZnVuY3Rpb24gdG8gdGhlIHNw ZWNpYWxpemVkCisgIDs7IGZ1bmN0aW9uLCBhbmQgY2FsbCByZXZlcnQtYnVmZmVyLgorICAobGV0 ICgocmV2ZXJ0LWJ1ZmZlci1pbnNlcnQtZmlsZS1jb250ZW50cy1mdW5jdGlvbgorICAgICAgICAg IydyZXZlcnQtYnVmZmVyLWluc2VydC1maWxlLWNvbnRlbnRzLWRlbGljYXRlbHkpKQorICAgIChy ZXZlcnQtYnVmZmVyIGlnbm9yZS1hdXRvIG5vY29uZmlybSB0KQorICAgIDs7IFRoaXMgY2xvc3Vy ZSBpcyBkZWZpbmVkIGluIHJldmVydC1idWZmZXItaW5zZXJ0LWZpbGUtY29udGVudHMtZnVuY3Rp b24uCisgICAgOzsgSXQgaXMgbmVlZGVkIGJlY2F1c2UgcmV2ZXJ0LWJ1ZmZlci0tZGVmYXVsdCBh bHdheXMgcmV0dXJucyB0IGFmdGVyCisgICAgOzsgcmV2ZXJ0aW5nLCBhbmQgaXQgbWlnaHQgYmUg bmVlZGVkIHRvIHJlcG9ydCB0aGUgc3VjY2Vzcy9mYWlsdXJlIG9mCisgICAgOzsgcmV2ZXJ0aW5n IGRlbGljYXRlbHkuCisgICAgKHdoZW4gKGZib3VuZHAgJ3JldmVydC1idWZmZXItd2l0aC1maW5l LWdyYWluLXN1Y2Nlc3MtcCkKKyAgICAgIChwcm9nMQorICAgICAgICAgIChyZXZlcnQtYnVmZmVy LXdpdGgtZmluZS1ncmFpbi1zdWNjZXNzLXApCisgICAgICAgIChmbWFrdW5ib3VuZCAncmV2ZXJ0 LWJ1ZmZlci13aXRoLWZpbmUtZ3JhaW4tc3VjY2Vzcy1wKSkpKSkKKwogKGRlZnVuIHJlY292ZXIt dGhpcy1maWxlICgpCiAgICJSZWNvdmVyIHRoZSB2aXNpdGVkIGZpbGUtLWdldCBjb250ZW50cyBm cm9tIGl0cyBsYXN0IGF1dG8tc2F2ZSBmaWxlLiIKICAgKGludGVyYWN0aXZlKQpkaWZmIC0tZ2l0 IGEvdGVzdC9saXNwL2ZpbGVzLXRlc3RzLmVsIGIvdGVzdC9saXNwL2ZpbGVzLXRlc3RzLmVsCmlu ZGV4IGZlMmU5NTguLjlhNmYzNWQgMTAwNjQ0Ci0tLSBhL3Rlc3QvbGlzcC9maWxlcy10ZXN0cy5l bAorKysgYi90ZXN0L2xpc3AvZmlsZXMtdGVzdHMuZWwKQEAgLTEyNTksNSArMTI1OSw1OSBAQCBm aWxlcy10ZXN0cy1maWxlLWF0dHJpYnV0ZXMtZXF1YWwKICAgICAgIChpZ25vcmUtZXJyb3JzIChh ZHZpY2UtcmVtb3ZlICMnd3JpdGUtcmVnaW9uIGFkdmljZSkpCiAgICAgICAoaWdub3JlLWVycm9y cyAoZGVsZXRlLWZpbGUgdGVtcC1maWxlLW5hbWUpKSkpKQogCisoZGVmdmFyIGZpbGVzLXRlc3Rz LWxhbyAiVGhlIFdheSB0aGF0IGNhbiBiZSB0b2xkIG9mIGlzIG5vdCB0aGUgZXRlcm5hbCBXYXk7 CitUaGUgbmFtZSB0aGF0IGNhbiBiZSBuYW1lZCBpcyBub3QgdGhlIGV0ZXJuYWwgbmFtZS4KK1Ro ZSBOYW1lbGVzcyBpcyB0aGUgb3JpZ2luIG9mIEhlYXZlbiBhbmQgRWFydGg7CitUaGUgTmFtZWQg aXMgdGhlIG1vdGhlciBvZiBhbGwgdGhpbmdzLgorVGhlcmVmb3JlIGxldCB0aGVyZSBhbHdheXMg YmUgbm9uLWJlaW5nLAorICBzbyB3ZSBtYXkgc2VlIHRoZWlyIHN1YnRsZXR5LAorQW5kIGxldCB0 aGVyZSBhbHdheXMgYmUgYmVpbmcsCisgIHNvIHdlIG1heSBzZWUgdGhlaXIgb3V0Y29tZS4KK1Ro ZSB0d28gYXJlIHRoZSBzYW1lLAorQnV0IGFmdGVyIHRoZXkgYXJlIHByb2R1Y2VkLAorICB0aGV5 IGhhdmUgZGlmZmVyZW50IG5hbWVzLgorIikKKworKGRlZnZhciBmaWxlcy10ZXN0cy10enUgIlRo ZSBOYW1lbGVzcyBpcyB0aGUgb3JpZ2luIG9mIEhlYXZlbiBhbmQgRWFydGg7CitUaGUgbmFtZWQg aXMgdGhlIG1vdGhlciBvZiBhbGwgdGhpbmdzLgorCitUaGVyZWZvcmUgbGV0IHRoZXJlIGFsd2F5 cyBiZSBub24tYmVpbmcsCisgIHNvIHdlIG1heSBzZWUgdGhlaXIgc3VidGxldHksCitBbmQgbGV0 IHRoZXJlIGFsd2F5cyBiZSBiZWluZywKKyAgc28gd2UgbWF5IHNlZSB0aGVpciBvdXRjb21lLgor VGhlIHR3byBhcmUgdGhlIHNhbWUsCitCdXQgYWZ0ZXIgdGhleSBhcmUgcHJvZHVjZWQsCisgIHRo ZXkgaGF2ZSBkaWZmZXJlbnQgbmFtZXMuCitUaGV5IGJvdGggbWF5IGJlIGNhbGxlZCBkZWVwIGFu ZCBwcm9mb3VuZC4KK0RlZXBlciBhbmQgbW9yZSBwcm9mb3VuZCwKK1RoZSBkb29yIG9mIGFsbCBz dWJ0bGV0aWVzIQorIikKKworKGVydC1kZWZ0ZXN0IGZpbGVzLXRlc3RzLXJldmVydC1idWZmZXIg KCkKKyAgIlRlc3QgdGhhdCByZXZlcnQtYnVmZmVyIGlzIHN1Y2Nlc2Z1bC4iCisgIChmaWxlcy10 ZXN0cy0td2l0aC10ZW1wLWZpbGUgdGVtcC1maWxlLW5hbWUKKyAgICAod2l0aC10ZW1wLWJ1ZmZl cgorICAgICAgKGluc2VydCBmaWxlcy10ZXN0cy1sYW8pCisgICAgICAod3JpdGUtZmlsZSB0ZW1w LWZpbGUtbmFtZSkKKyAgICAgIChlcmFzZS1idWZmZXIpCisgICAgICAoaW5zZXJ0IGZpbGVzLXRl c3RzLXR6dSkKKyAgICAgIChyZXZlcnQtYnVmZmVyIHQgdCB0KQorICAgICAgKHNob3VsZCAoY29t cGFyZS1zdHJpbmdzIGZpbGVzLXRlc3RzLWxhbyBuaWwgbmlsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsIG5pbCkpKSkpCisKKyhlcnQtZGVmdGVz dCBmaWxlcy10ZXN0cy1yZXZlcnQtYnVmZmVyLXdpdGgtZmluZS1ncmFpbiAoKQorICAiVGVzdCB0 aGF0IHJldmVydC1idWZmZXItd2l0aC1maW5lLWdyYWluIGlzIHN1Y2Nlc3NmdWwuIgorICAoZmls ZXMtdGVzdHMtLXdpdGgtdGVtcC1maWxlIHRlbXAtZmlsZS1uYW1lCisgICAgKHdpdGgtdGVtcC1i dWZmZXIKKyAgICAgIChpbnNlcnQgZmlsZXMtdGVzdHMtbGFvKQorICAgICAgKHdyaXRlLWZpbGUg dGVtcC1maWxlLW5hbWUpCisgICAgICAoZXJhc2UtYnVmZmVyKQorICAgICAgKGluc2VydCBmaWxl cy10ZXN0cy10enUpCisgICAgICAoc2hvdWxkIChyZXZlcnQtYnVmZmVyLXdpdGgtZmluZS1ncmFp biB0IHQpKQorICAgICAgKHNob3VsZCAoY29tcGFyZS1zdHJpbmdzIGZpbGVzLXRlc3RzLWxhbyBu aWwgbmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcg KHBvaW50LW1pbikgKHBvaW50LW1heCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmlsIG5pbCkpKSkpCisKIChwcm92aWRlICdmaWxlcy10ZXN0cykKIDs7OyBmaWxlcy10ZXN0cy5l bCBlbmRzIGhlcmUKLS0gCjIuNy40Cgo= --00000000000078df090588f54034--