From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Barry OReilly Newsgroups: gmane.emacs.bugs Subject: bug#16411: undo-only bugs Date: Wed, 28 May 2014 14:42:33 -0400 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11c2ed6ceff48804fa7a2cf3 X-Trace: ger.gmane.org 1401302663 10696 80.91.229.3 (28 May 2014 18:44:23 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 28 May 2014 18:44:23 +0000 (UTC) Cc: 16411 <16411@debbugs.gnu.org> To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed May 28 20:44:14 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1Wpipg-0003u4-5d for geb-bug-gnu-emacs@m.gmane.org; Wed, 28 May 2014 20:44:12 +0200 Original-Received: from localhost ([::1]:44268 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wpipf-0000lF-QQ for geb-bug-gnu-emacs@m.gmane.org; Wed, 28 May 2014 14:44:11 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:35476) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wpiog-0007zD-11 for bug-gnu-emacs@gnu.org; Wed, 28 May 2014 14:43:17 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WpioY-0007Gy-E4 for bug-gnu-emacs@gnu.org; Wed, 28 May 2014 14:43:09 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:35957) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WpioY-0007Gr-8u for bug-gnu-emacs@gnu.org; Wed, 28 May 2014 14:43:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1WpioX-00034G-Ni for bug-gnu-emacs@gnu.org; Wed, 28 May 2014 14:43:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Barry OReilly Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 28 May 2014 18:43:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 16411 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 16411-submit@debbugs.gnu.org id=B16411.140130257111768 (code B ref 16411); Wed, 28 May 2014 18:43:01 +0000 Original-Received: (at 16411) by debbugs.gnu.org; 28 May 2014 18:42:51 +0000 Original-Received: from localhost ([127.0.0.1]:34834 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WpioI-00033d-5K for submit@debbugs.gnu.org; Wed, 28 May 2014 14:42:51 -0400 Original-Received: from mail-oa0-f54.google.com ([209.85.219.54]:48347) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WpioB-00033D-MR for 16411@debbugs.gnu.org; Wed, 28 May 2014 14:42:44 -0400 Original-Received: by mail-oa0-f54.google.com with SMTP id j17so11552752oag.13 for <16411@debbugs.gnu.org>; Wed, 28 May 2014 11:42:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=MopVM+tZm9gqdGgn3tu+q2C51bvHDJgS4KjapGlJrnU=; b=Tx2E1SNUOtiso+/mPiMjPLbXSe4F0KkXagMzQ8UAiwizfnB84Obj8+/bhZdy8afdDW bzprGKJicziAR9o+FmFcvFjLMLuknbghxlUgfROxtDMdQEhvzFFXZDdbbNifgbMhtmO+ np+cCef5FjXpNv2TeyErz13hvNtGZC3bG57Rpdzc5ef+3Wkebx8OCpTX3NdikNIPXpKz /HXOqw0QNvhlXD23RrguilB3NlX4GqudoZFJ9e+gmqbZlnRcaHk9gx4cE7HIGWl4/T5z 7Yrz3EcTd69eCN4lm1Zje5BdGjmSDXZhDT493ejAmOmDd7gEjDVDt7Rx6ORGFr8x/Sgl U5PA== X-Received: by 10.60.50.197 with SMTP id e5mr1848141oeo.37.1401302553700; Wed, 28 May 2014 11:42:33 -0700 (PDT) Original-Received: by 10.76.6.44 with HTTP; Wed, 28 May 2014 11:42:33 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.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-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:89638 Archived-At: --001a11c2ed6ceff48804fa7a2cf3 Content-Type: multipart/alternative; boundary=001a11c2ed6ceff48304fa7a2cf1 --001a11c2ed6ceff48304fa7a2cf1 Content-Type: text/plain; charset=UTF-8 I have attached a patch against trunk which omits the generators, changes the data format of pending-undo-list, and addresses other comments. The undo-tests pass with this patch. As with the last patch, it doesn't solve an actual bug yet, but that is forthcoming. Since undo-tree uses primitive-undo, I think it must remain compatible. To do this and not duplicate code, I split individual element logic out to an undo-primitive-elt function and moved the look ahead at marker adjustments to undo-more. Since the latter is recent functionality, I doubt undo-tree relies on primitive-undo doing that. --001a11c2ed6ceff48304fa7a2cf1 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
I have attached a patch against trunk which omits the gene= rators,
changes the data format of pending-undo-list, and addresses othe= r
comments. The undo-tests pass with this patch. As with the last
pat= ch, it doesn't solve an actual bug yet, but that is
forthcoming.

Since undo-tree uses primitive-undo, I think it must re= main
compatible. To do this and not duplicate code, I split individualelement logic out to an undo-primitive-elt function and moved the
look ahead at marker adjustments to undo-more. Since the latter
is recen= t functionality, I doubt undo-tree relies on
primitive-undo doing that.<= br>
--001a11c2ed6ceff48304fa7a2cf1-- --001a11c2ed6ceff48804fa7a2cf3 Content-Type: text/plain; charset=US-ASCII; name="undone-undos.diff" Content-Disposition: attachment; filename="undone-undos.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hvqzbq6d0 ZGlmZiAtLWdpdCBhL2xpc3Avc2ltcGxlLmVsIGIvbGlzcC9zaW1wbGUuZWwKaW5kZXggYWY4ZTQ3 Yy4uOWI0N2NjYiAxMDA2NDQKLS0tIGEvbGlzcC9zaW1wbGUuZWwKKysrIGIvbGlzcC9zaW1wbGUu ZWwKQEAgLTIwNTQsMjAgKzIwNTQsNTAgQEAgR28gdG8gdGhlIGhpc3RvcnkgZWxlbWVudCBieSB0 aGUgYWJzb2x1dGUgaGlzdG9yeSBwb3NpdGlvbiBISVNULVBPUy4iCiA7UHV0IHRoaXMgb24gQy14 IHUsIHNvIHdlIGNhbiBmb3JjZSB0aGF0IHJhdGhlciB0aGFuIEMtXyBpbnRvIHN0YXJ0dXAgbXNn CiAoZGVmaW5lLW9ic29sZXRlLWZ1bmN0aW9uLWFsaWFzICdhZHZlcnRpc2VkLXVuZG8gJ3VuZG8g IjIzLjIiKQogCis7OyBOb3RlOiBXZSBjb25zaWRlcmVkIGEgZGVzaWduIHdoZXJlYnkgb25lIGVu dHJ5IGluIHRoZQorOzsgdW5kby1yZWRvLXRhYmxlIG1hcHMgYSBjaGFuZ2UgZ3JvdXAgdG8gYSBs aXN0IG9mIHVuZG9uZSBlbGVtZW50cyBvcgorOzsgZ3JvdXBzLiAgVGhpcyBkZXNpZ24gZG9lcyBu b3Qgd29yayBiZWNhdXNlIHRoZSB2YWx1ZSBzdG9yZWQgaW4KKzs7IHVuZG8tcmVkby10YWJsZSB3 b3VsZCBuZWVkIHRvIGJlIGEgbm9uIHdlYWsgbGlzdCB3aXRoIHdlYWsKKzs7IHJlZmVyZW5jZXMg aW50byBidWZmZXItdW5kby1saXN0LiAgQ3VycmVudGx5IEVsaXNwIG9ubHkgZmVhdHVyZXMKKzs7 IHdlYWsgcmVmZXJlbmNlcyB3aGVuIHRoZXkgYXJlIGRpcmVjdGx5IGtleXMgb3IgdmFsdWVzIG9m IGEgd2VhaworOzsgaGFzaCB0YWJsZSwgc28gYSBsaXN0IGNvbnRhaW5pbmcgd2VhayByZWZlcmVu Y2VzIGlzIG5vdCBzdXBwb3J0ZWQuCisoZGVmdmFyIHVuZG8tcmVkby10YWJsZSAobWFrZS1oYXNo LXRhYmxlIDp0ZXN0ICdlcSA6d2Vha25lc3MgdCkKKyAgIkhhc2ggdGFibGUgbWFwcGluZyB1bmRv cyB0byB3aGF0IHRoZXkgdW5kaWQuCisKK1NwZWNpZmljYWxseSwgdGhlIGtleXMgYW5kIHZhbHVl cyBhcmUgZXEgdG8gYSBjb25zIG9mCitidWZmZXItdW5kby1saXN0IHN1Y2ggdGhhdCB0aGUgY2Fy IG9mIHRoZSBrZXkgaXMgYW4gdW5kbyBlbGVtZW50CithbmQgdGhlIGNhciBvZiB0aGUgdmFsdWUg aXMgdGhlIHVuZG9uZSBlbGVtZW50LgorCitUaGUgaGFzaCB0YWJsZSBpcyB3ZWFrIHNvIGFzIHRy dW5jYXRlZCB1bmRvIGVsZW1lbnRzIGNhbiBiZQorZ2FyYmFnZSBjb2xsZWN0ZWQuIikKIChkZWZj b25zdCB1bmRvLWVxdWl2LXRhYmxlIChtYWtlLWhhc2gtdGFibGUgOnRlc3QgJ2VxIDp3ZWFrbmVz cyB0KQogICAiVGFibGUgbWFwcGluZyByZWRvIHJlY29yZHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcg dW5kbyBvbmUuCiBBIHJlZG8gcmVjb3JkIGZvciB1bmRvLWluLXJlZ2lvbiBtYXBzIHRvIHQuCiBB IHJlZG8gcmVjb3JkIGZvciBvcmRpbmFyeSB1bmRvIG1hcHMgdG8gdGhlIGZvbGxvd2luZyAoZWFy bGllcikgdW5kby4iKQorKG1ha2Utb2Jzb2xldGUtdmFyaWFibGUKKyAndW5kby1lcXVpdi10YWJs ZQorICJVc2UgdW5kby1yZWRvLXRhYmxlIGluc3RlYWQuICBGb3Igbm9uIHJlZ2lvbmFsIHVuZG9z LCAoZ2V0aGFzaAorayB1bmRvLWVxdWl2LXRhYmxlKSBpcyB0aGUgc2FtZSBhcyB0YWtpbmcgKGdl dGhhc2ggawordW5kby1yZWRvLXRhYmxlKSBhbmQgc2Nhbm5pbmcgZm9yd2FyZCBvbmUgY2hhbmdl IGdyb3VwLiIKKyAiMjQuNSIpCiAKIChkZWZ2YXIgdW5kby1pbi1yZWdpb24gbmlsCi0gICJOb24t bmlsIGlmIGBwZW5kaW5nLXVuZG8tbGlzdCcgaXMgbm90IGp1c3QgYSB0YWlsIG9mIGBidWZmZXIt dW5kby1saXN0Jy4iKQorICAiTm9uLW5pbCBkdXJpbmcgYW4gdW5kbyBpbiByZWdpb24uIikKIAog KGRlZnZhciB1bmRvLW5vLXJlZG8gbmlsCiAgICJJZiB0LCBgdW5kbycgZG9lc24ndCBnbyB0aHJv dWdoIHJlZG8gZW50cmllcy4iKQogCiAoZGVmdmFyIHBlbmRpbmctdW5kby1saXN0IG5pbAotICAi V2l0aGluIGEgcnVuIG9mIGNvbnNlY3V0aXZlIHVuZG8gY29tbWFuZHMsIGxpc3QgcmVtYWluaW5n IHRvIGJlIHVuZG9uZS4KLUlmIHQsIHdlIHVuZGlkIGFsbCB0aGUgd2F5IHRvIHRoZSBlbmQgb2Yg aXQuIikKKyAgIlRoZSBwZW5kaW5nIHVuZG8gZWxlbWVudHMgaW4gYSBydW4gb2YgY29uc2VjdXRp dmUgdW5kbyBjb21tYW5kcy4KKworU3BlY2lmaWNhbGx5LCB0aGlzIGlzIGEgbGlzdCBvZiBhc3Nv Y2F0aW9ucyBvZiB0aGUKK2Zvcm0gKEFESlVTVEVELUVMVCAuIE9SSUctVU5ETy1MSVNUKS4gIEFE SlVTVEVELUVMVCBpcyBhbiB1bmRvCitlbGVtZW50IHdpdGggYWRqdXN0ZWQgcG9zaXRpb25zIGFu ZCBPUklHLVVORE8tTElTVCBpcyBhIGNvbnMgb2YKK2J1ZmZlci11bmRvLWxpc3Qgd2hvc2UgY2Fy IGlzIHRoZSBvcmlnaW5hbCB1bmFkanVzdGVkIHVuZG8KK2VsZW1lbnQuICBBREpVU1RFRC1FTFQg bWF5IG9yIG1heSBub3QgYmUgZXEgdG8gKGNhcgorT1JJRy1VTkRPLUxJU1QpLgorCitJZiB0LCB0 aGVyZSBpcyBubyBtb3JlIHRvIHVuZG8uIikKIAogKGRlZnVuIHVuZG8gKCZvcHRpb25hbCBhcmcp CiAgICJVbmRvIHNvbWUgcHJldmlvdXMgY2hhbmdlcy4KQEAgLTIxMTUsOSArMjE0NSw4IEBAIGFz IGFuIGFyZ3VtZW50IGxpbWl0cyB1bmRvIHRvIGNoYW5nZXMgd2l0aGluIHRoZSBjdXJyZW50IHJl Z2lvbi4iCiAgICAgICAodW5kby1tb3JlIDEpKQogICAgIDs7IElmIHdlIGdvdCB0aGlzIGZhciwg dGhlIG5leHQgY29tbWFuZCBzaG91bGQgYmUgYSBjb25zZWN1dGl2ZSB1bmRvLgogICAgIChzZXRx IHRoaXMtY29tbWFuZCAndW5kbykKLSAgICA7OyBDaGVjayB0byBzZWUgd2hldGhlciB3ZSdyZSBo aXR0aW5nIGEgcmVkbyByZWNvcmQsIGFuZCBpZgotICAgIDs7IHNvLCBhc2sgdGhlIHVzZXIgd2hl dGhlciBzaGUgd2FudHMgdG8gc2tpcCB0aGUgcmVkby91bmRvIHBhaXIuCi0gICAgKGxldCAoKGVx dWl2IChnZXRoYXNoIHBlbmRpbmctdW5kby1saXN0IHVuZG8tZXF1aXYtdGFibGUpKSkKKyAgICA7 OyBDaGVjayB0byBzZWUgd2hldGhlciB3ZSdyZSBoaXR0aW5nIGEgcmVkbyByZWNvcmQKKyAgICAo bGV0ICgoZXF1aXYgKGdldGhhc2ggKGNkci1zYWZlIHBlbmRpbmctdW5kby1saXN0KSB1bmRvLWVx dWl2LXRhYmxlKSkpCiAgICAgICAob3IgKGVxIChzZWxlY3RlZC13aW5kb3cpIChtaW5pYnVmZmVy LXdpbmRvdykpCiAJICAoc2V0cSBtZXNzYWdlIChmb3JtYXQgIiVzJXMhIgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoaWYgKG9yIHVuZG8tbm8tcmVkbyAobm90IGVxdWl2KSkKQEAg LTIxMjgsNyArMjE1Nyw3IEBAIGFzIGFuIGFyZ3VtZW50IGxpbWl0cyB1bmRvIHRvIGNoYW5nZXMg d2l0aGluIHRoZSBjdXJyZW50IHJlZ2lvbi4iCiAJOzsgdW5kby1yZWRvLXVuZG8tcmVkby0uLi4g c28gc2tpcCB0byB0aGUgdmVyeSBsYXN0IGVxdWl2LgogCSh3aGlsZSAobGV0ICgobmV4dCAoZ2V0 aGFzaCBlcXVpdiB1bmRvLWVxdWl2LXRhYmxlKSkpCiAJCSAoaWYgbmV4dCAoc2V0cSBlcXVpdiBu ZXh0KSkpKQotCShzZXRxIHBlbmRpbmctdW5kby1saXN0IGVxdWl2KSkpCisJKHNldHEgcGVuZGlu Zy11bmRvLWxpc3QgKGNvbnMgKGNhciBlcXVpdikgZXF1aXYpKSkpCiAgICAgKHVuZG8tbW9yZQog ICAgICAoaWYgKG51bWJlcnAgYXJnKQogCSAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKQpAQCAt MjEzOCwxOCArMjE2NywyMCBAQCBhcyBhbiBhcmd1bWVudCBsaW1pdHMgdW5kbyB0byBjaGFuZ2Vz IHdpdGhpbiB0aGUgY3VycmVudCByZWdpb24uIgogICAgIDs7IEluIHRoZSBvcmRpbmFyeSBjYXNl IChub3Qgd2l0aGluIGEgcmVnaW9uKSwgbWFwIHRoZSByZWRvCiAgICAgOzsgcmVjb3JkIHRvIHRo ZSBmb2xsb3dpbmcgdW5kb3MuCiAgICAgOzsgSSBkb24ndCBrbm93IGhvdyB0byBkbyB0aGF0IGlu IHRoZSB1bmRvLWluLXJlZ2lvbiBjYXNlLgotICAgIChsZXQgKChsaXN0IGJ1ZmZlci11bmRvLWxp c3QpKQorICAgIChsZXQgKChsaXN0IGJ1ZmZlci11bmRvLWxpc3QpCisgICAgICAgICAgKG5ldy1l cXVpdiAoY2RyLXNhZmUgcGVuZGluZy11bmRvLWxpc3QpKSkKICAgICAgIDs7IFN0cmlwIGFueSBs ZWFkaW5nIHVuZG8gYm91bmRhcmllcyB0aGVyZSBtaWdodCBiZSwgbGlrZSB3ZSBkbwogICAgICAg OzsgYWJvdmUgd2hlbiBjaGVja2luZy4KICAgICAgICh3aGlsZSAoZXEgKGNhciBsaXN0KSBuaWwp CiAJKHNldHEgbGlzdCAoY2RyIGxpc3QpKSkKLSAgICAgIChwdXRoYXNoIGxpc3QKLSAgICAgICAg ICAgICAgIDs7IFByZXZlbnQgaWRlbnRpdHkgbWFwcGluZy4gIFRoaXMgY2FuIGhhcHBlbiBpZgot ICAgICAgICAgICAgICAgOzsgY29uc2VjdXRpdmUgbmlscyBhcmUgZXJyb25lb3VzbHkgaW4gdW5k byBsaXN0LgotICAgICAgICAgICAgICAgKGlmIChvciB1bmRvLWluLXJlZ2lvbiAoZXEgbGlzdCBw ZW5kaW5nLXVuZG8tbGlzdCkpCi0gICAgICAgICAgICAgICAgICAgdAotICAgICAgICAgICAgICAg ICBwZW5kaW5nLXVuZG8tbGlzdCkKLQkgICAgICAgdW5kby1lcXVpdi10YWJsZSkpCisgICAgICAo d2hlbiBuZXctZXF1aXYKKyAgICAgICAgKHB1dGhhc2ggbGlzdAorICAgICAgICAgICAgICAgICA7 OyBQcmV2ZW50IGlkZW50aXR5IG1hcHBpbmcuICBUaGlzIGNhbiBoYXBwZW4gaWYKKyAgICAgICAg ICAgICAgICAgOzsgY29uc2VjdXRpdmUgbmlscyBhcmUgZXJyb25lb3VzbHkgaW4gdW5kbyBsaXN0 LgorICAgICAgICAgICAgICAgICAoaWYgKG9yIHVuZG8taW4tcmVnaW9uIChlcSBsaXN0IG5ldy1l cXVpdikpCisgICAgICAgICAgICAgICAgICAgICB0CisgICAgICAgICAgICAgICAgICAgbmV3LWVx dWl2KQorICAgICAgICAgICAgICAgICB1bmRvLWVxdWl2LXRhYmxlKSkpCiAgICAgOzsgRG9uJ3Qg c3BlY2lmeSBhIHBvc2l0aW9uIGluIHRoZSB1bmRvIHJlY29yZCBmb3IgdGhlIHVuZG8gY29tbWFu ZC4KICAgICA7OyBJbnN0ZWFkLCB1bmRvaW5nIHRoaXMgc2hvdWxkIG1vdmUgcG9pbnQgdG8gd2hl cmUgdGhlIGNoYW5nZSBpcy4KICAgICAobGV0ICgodGFpbCBidWZmZXItdW5kby1saXN0KQpAQCAt MjIwMiwxNDUgKzIyMzMsMTUyIEBAIFNvbWUgY2hhbmdlLWhvb2tzIHRlc3QgdGhpcyB2YXJpYWJs ZSB0byBkbyBzb21ldGhpbmcgZGlmZmVyZW50LiIpCiAgICJVbmRvIGJhY2sgTiB1bmRvLWJvdW5k YXJpZXMgYmV5b25kIHdoYXQgd2FzIGFscmVhZHkgdW5kb25lIHJlY2VudGx5LgogQ2FsbCBgdW5k by1zdGFydCcgdG8gZ2V0IHJlYWR5IHRvIHVuZG8gcmVjZW50IGNoYW5nZXMsCiB0aGVuIGNhbGwg YHVuZG8tbW9yZScgb25lIG9yIG1vcmUgdGltZXMgdG8gdW5kbyB0aGVtLiIKLSAgKG9yIChsaXN0 cCBwZW5kaW5nLXVuZG8tbGlzdCkKLSAgICAgICh1c2VyLWVycm9yIChjb25jYXQgIk5vIGZ1cnRo ZXIgdW5kbyBpbmZvcm1hdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCB1bmRv LWluLXJlZ2lvbiAiIGZvciByZWdpb24iKSkpKQotICAobGV0ICgodW5kby1pbi1wcm9ncmVzcyB0 KSkKLSAgICA7OyBOb3RlOiBUaGUgZm9sbG93aW5nLCB3aGlsZSBwdWxsaW5nIGVsZW1lbnRzIG9m ZgotICAgIDs7IGBwZW5kaW5nLXVuZG8tbGlzdCcgd2lsbCBjYWxsIHByaW1pdGl2ZSBjaGFuZ2Ug ZnVuY3Rpb25zIHdoaWNoCi0gICAgOzsgd2lsbCBwdXNoIG1vcmUgZWxlbWVudHMgb250byBgYnVm ZmVyLXVuZG8tbGlzdCcuCi0gICAgKHNldHEgcGVuZGluZy11bmRvLWxpc3QgKHByaW1pdGl2ZS11 bmRvIG4gcGVuZGluZy11bmRvLWxpc3QpKQotICAgIChpZiAobnVsbCBwZW5kaW5nLXVuZG8tbGlz dCkKLQkoc2V0cSBwZW5kaW5nLXVuZG8tbGlzdCB0KSkpKQorICAod2hlbiAoZXEgcGVuZGluZy11 bmRvLWxpc3QgdCkKKyAgICAodXNlci1lcnJvciAoY29uY2F0ICJObyBmdXJ0aGVyIHVuZG8gaW5m b3JtYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIHVuZG8taW4tcmVnaW9uICIg Zm9yIHJlZ2lvbiIpKSkpCisgIChsZXQgKCh1bmRvLWluLXByb2dyZXNzIHQpCisgICAgICAgIChn cm91cCBuKQorICAgICAgICBhc3NvYykKKyAgICAod2hpbGUgKD4gZ3JvdXAgMCkKKyAgICAgICh3 aGlsZSAoY2FyIChzZXRxIGFzc29jIChwb3AgcGVuZGluZy11bmRvLWxpc3QpKSkKKyAgICAgICAg KGxldCAoKGVsdCAoY2FyIGFzc29jKSkKKyAgICAgICAgICAgICAgKG9yaWctdGFpbCAoY2RyIGFz c29jKSkKKyAgICAgICAgICAgICAgdmFsaWQtbWFya2VyLWFkanVzdG1lbnRzKQorICAgICAgICAg ICh3aGVuIChhbmQgKHN0cmluZ3AgKGNhci1zYWZlIGVsdCkpCisgICAgICAgICAgICAgICAgICAg ICAoaW50ZWdlcnAgKGNkci1zYWZlIGVsdCkpKQorICAgICAgICAgICAgOzsgQ2hlY2sgdGhhdCBt YXJrZXIgYWRqdXN0bWVudHMgd2hpY2ggd2VyZSByZWNvcmRlZCB3aXRoCisgICAgICAgICAgICA7 OyB0aGUgKFNUUklORyAuIFBPUykgcmVjb3JkIGFyZSBzdGlsbCB2YWxpZCwgaWUgdGhlCisgICAg ICAgICAgICA7OyBtYXJrZXJzIGhhdmVuJ3QgbW92ZWQuICBXZSBjaGVjayB0aGVpciB2YWxpZGl0 eSBiZWZvcmUKKyAgICAgICAgICAgIDs7IHJlaW5zZXJ0aW5nIHRoZSBzdHJpbmcgc28gYXMgd2Ug ZG9uJ3QgbmVlZCB0byBtaW5kCisgICAgICAgICAgICA7OyBtYXJrZXIgaW5zZXJ0aW9uLXR5cGUu CisgICAgICAgICAgICAod2hpbGUgKGFuZCAobWFya2VycCAoY2FyLXNhZmUgKGNhYXIgcGVuZGlu Zy11bmRvLWxpc3QpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlZ2VycCAoY2RyLXNh ZmUgKGNhYXIgcGVuZGluZy11bmRvLWxpc3QpKSkpCisgICAgICAgICAgICAgIChsZXQqICgobWFy a2VyLWFkaiAoY2FyIChwb3AgcGVuZGluZy11bmRvLWxpc3QpKSkKKyAgICAgICAgICAgICAgICAg ICAgIChtIChjYXIgbWFya2VyLWFkaikpKQorICAgICAgICAgICAgICAgIChhbmQgKGVxIChtYXJr ZXItYnVmZmVyIG0pIChjdXJyZW50LWJ1ZmZlcikpCisgICAgICAgICAgICAgICAgICAgICAoPSAo Y2RyIGVsdCkgbSkKKyAgICAgICAgICAgICAgICAgICAgIChwdXNoIG1hcmtlci1hZGogdmFsaWQt bWFya2VyLWFkanVzdG1lbnRzKSkpKSkKKyAgICAgICAgICAod2hlbiAobWFya2VycCAoY2FyLXNh ZmUgZWx0KSkKKyAgICAgICAgICAgIDs7IE5vdGU6IGV2ZW4gdGhvdWdoIHRoZXNlIGVsZW1lbnRz IGFyZSBub3QgZXhwZWN0ZWQgaW4KKyAgICAgICAgICAgIDs7IHRoZSB1bmRvIGxpc3QsIGFkanVz dCB0aGVtIHRvIGJlIGNvbnNlcnZhdGl2ZSBmb3IgdGhlCisgICAgICAgICAgICA7OyAyNC40IHJl bGVhc2UuICAoQnVnIzE2ODE4KQorICAgICAgICAgICAgKHdhcm4gIkVuY291bnRlcmVkICVTIGVu dHJ5IGluIHVuZG8gbGlzdCB3aXRoIG5vIG1hdGNoaW5nIChURVhUIC4gUE9TKSBlbnRyeSIKKyAg ICAgICAgICAgICAgICAgIGVsdCkpCisgICAgICAgICAgOzsgTm90ZTogVGhlIGZvbGxvd2luZyBj aGFuZ2VzIHRoZSBidWZmZXIsIGFuZCBzbyBjYWxscworICAgICAgICAgIDs7IHByaW1pdGl2ZSBj aGFuZ2UgZnVuY3Rpb25zIHRoYXQgcHVzaCBtb3JlIGVsZW1lbnRzIG9udG8KKyAgICAgICAgICA7 OyBgYnVmZmVyLXVuZG8tbGlzdCcuCisgICAgICAgICAgKHdoZW4gKHVuZG8tcHJpbWl0aXZlLWVs dCBlbHQpCisgICAgICAgICAgICA7OyBNYXAgdGhlIG5ldyB1bmRvIGVsZW1lbnQgdG8gd2hhdCBp dCB1bmRpZC4gIE5vdCBhd2FyZQorICAgICAgICAgICAgOzsgeWV0IG9mIGNhc2VzIHdoZXJlIHdl IHdhbnQgdG8gbWFwIGFsbCBuZXcgZWxlbWVudHMuCisgICAgICAgICAgICAocHV0aGFzaCBidWZm ZXItdW5kby1saXN0IG9yaWctdGFpbCB1bmRvLXJlZG8tdGFibGUpKQorICAgICAgICAgIDs7IEFk anVzdCB0aGUgdmFsaWQgbWFya2VyIGFkanVzdG1lbnRzCisgICAgICAgICAgKGRvbGlzdCAoYWRq IHZhbGlkLW1hcmtlci1hZGp1c3RtZW50cykKKyAgICAgICAgICAgICh1bmRvLXByaW1pdGl2ZS1l bHQgYWRqKSkpKQorICAgICAgKHNldHEgZ3JvdXAgKDEtIGdyb3VwKSkpCisgICAgOzsgUmVhY2hl ZCB0aGUgZW5kIG9mIHVuZG8gaGlzdG9yeQorICAgICh1bmxlc3MgcGVuZGluZy11bmRvLWxpc3Qg KHNldHEgcGVuZGluZy11bmRvLWxpc3QgdCkpKSkKIAogKGRlZnVuIHByaW1pdGl2ZS11bmRvIChu IGxpc3QpCi0gICJVbmRvIE4gcmVjb3JkcyBmcm9tIHRoZSBmcm9udCBvZiB0aGUgbGlzdCBMSVNU LgorICAiVW5kbyBOIGNoYW5nZSBncm91cHMgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGxpc3QgTElT VC4KIFJldHVybiB3aGF0IHJlbWFpbnMgb2YgdGhlIGxpc3QuIgorICAobGV0ICgoYXJnIG4pCisg ICAgICAgIChuZXh0IG5pbCkpCisgICAgKHdoaWxlICg+IGFyZyAwKQorICAgICAgKHdoaWxlIChz ZXRxIG5leHQgKHBvcCBsaXN0KSkgICAgIDtFeGl0IGlubmVyIGxvb3AgYXQgdW5kbyBib3VuZGFy eS4KKyAgICAgICAgKHVuZG8tcHJpbWl0aXZlLWVsdCBuZXh0KSkKKyAgICAgIChzZXRxIGFyZyAo MS0gYXJnKSkpKSkKIAotICA7OyBUaGlzIGlzIGEgZ29vZCBmZWF0dXJlLCBidXQgd291bGQgbWFr ZSB1bmRvLXN0YXJ0Ci0gIDs7IHVuYWJsZSB0byBkbyB3aGF0IGlzIGV4cGVjdGVkLgotICA7Oyh3 aGVuIChudWxsIChjYXIgKGxpc3QpKSkKLSAgOzsgIDs7IElmIHRoZSBoZWFkIG9mIHRoZSBsaXN0 IGlzIGEgYm91bmRhcnksIGl0IGlzIHRoZSBib3VuZGFyeQotICA7OyAgOzsgcHJlY2VkaW5nIHRo aXMgY29tbWFuZC4gIEdldCByaWQgb2YgaXQgYW5kIGRvbid0IGNvdW50IGl0LgotICA7OyAgKHNl dHEgbGlzdCAoY2RyIGxpc3QpKSkpCisoZGVmdW4gdW5kby1wcmltaXRpdmUtZWx0IChuZXh0KQor ICAiVW5kbyB0aGUgZWxlbWVudCBORVhUIGFuZCByZXR1cm4gbm9uIG5pbCBpZiBjaGFuZ2VzIHdl cmUgbWFkZS4KIAotICAobGV0ICgoYXJnIG4pCi0gICAgICAgIDs7IEluIGEgd3JpdGFibGUgYnVm ZmVyLCBlbmFibGUgdW5kb2luZyByZWFkLW9ubHkgdGV4dCB0aGF0IGlzCitORVhUIGlzIG9uZSBv ZiB0aGUgdmFsaWQgZm9ybXMgZG9jdW1lbnRlZCBpbiB0aGUgVW5kbyBzZWN0aW9uIG9mCit0aGUg RWxpc3AgbWFudWFsLiIKKyAgKGxldCAoOzsgSW4gYSB3cml0YWJsZSBidWZmZXIsIGVuYWJsZSB1 bmRvaW5nIHJlYWQtb25seSB0ZXh0IHRoYXQgaXMKICAgICAgICAgOzsgc28gYmVjYXVzZSBvZiB0 ZXh0IHByb3BlcnRpZXMuCiAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0KQogICAgICAgICA7 OyBEb24ndCBsZXQgYGludGFuZ2libGUnIHByb3BlcnRpZXMgaW50ZXJmZXJlIHdpdGggdW5kby4K ICAgICAgICAgKGluaGliaXQtcG9pbnQtbW90aW9uLWhvb2tzIHQpCiAgICAgICAgIDs7IFdlIHVz ZSBvbGRsaXN0IG9ubHkgdG8gY2hlY2sgZm9yIEVRLiAgKytrZnMKLSAgICAgICAgKG9sZGxpc3Qg YnVmZmVyLXVuZG8tbGlzdCkKLSAgICAgICAgKGRpZC1hcHBseSBuaWwpCi0gICAgICAgIChuZXh0 IG5pbCkpCi0gICAgKHdoaWxlICg+IGFyZyAwKQotICAgICAgKHdoaWxlIChzZXRxIG5leHQgKHBv cCBsaXN0KSkgICAgIDtFeGl0IGlubmVyIGxvb3AgYXQgdW5kbyBib3VuZGFyeS4KLSAgICAgICAg OzsgSGFuZGxlIGFuIGludGVnZXIgYnkgc2V0dGluZyBwb2ludCB0byB0aGF0IHZhbHVlLgotICAg ICAgICAocGNhc2UgbmV4dAotICAgICAgICAgICgocHJlZCBpbnRlZ2VycCkgKGdvdG8tY2hhciBu ZXh0KSkKLSAgICAgICAgICA7OyBFbGVtZW50ICh0IC4gVElNRSkgcmVjb3JkcyBwcmV2aW91cyBt b2R0aW1lLgotICAgICAgICAgIDs7IFByZXNlcnZlIGFueSBmbGFnIG9mIE5PTkVYSVNURU5UX01P RFRJTUVfTlNFQ1Mgb3IKLSAgICAgICAgICA7OyBVTktOT1dOX01PRFRJTUVfTlNFQ1MuCi0gICAg ICAgICAgKGAodCAuICx0aW1lKQotICAgICAgICAgICA7OyBJZiB0aGlzIHJlY29yZHMgYW4gb2Jz b2xldGUgc2F2ZQotICAgICAgICAgICA7OyAobm90IG1hdGNoaW5nIHRoZSBhY3R1YWwgZGlzayBm aWxlKQotICAgICAgICAgICA7OyB0aGVuIGRvbid0IG1hcmsgdW5tb2RpZmllZC4KLSAgICAgICAg ICAgKHdoZW4gKG9yIChlcXVhbCB0aW1lICh2aXNpdGVkLWZpbGUtbW9kdGltZSkpCi0gICAgICAg ICAgICAgICAgICAgICAoYW5kIChjb25zcCB0aW1lKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAoZXF1YWwgKGxpc3QgKGNhciB0aW1lKSAoY2RyIHRpbWUpKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHZpc2l0ZWQtZmlsZS1tb2R0aW1lKSkpKQotICAgICAgICAgICAgICh3 aGVuIChmYm91bmRwICd1bmxvY2stYnVmZmVyKQotICAgICAgICAgICAgICAgKHVubG9jay1idWZm ZXIpKQotICAgICAgICAgICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbmlsKSkpCi0gICAgICAg ICAgOzsgRWxlbWVudCAobmlsIFBST1AgVkFMIEJFRyAuIEVORCkgaXMgcHJvcGVydHkgY2hhbmdl LgotICAgICAgICAgIChgKG5pbCAuICwob3IgYCgscHJvcCAsdmFsICxiZWcgLiAsZW5kKSBwY2Fz ZS0tZG9udGNhcmUpKQotICAgICAgICAgICAod2hlbiAob3IgKD4gKHBvaW50LW1pbikgYmVnKSAo PCAocG9pbnQtbWF4KSBlbmQpKQotICAgICAgICAgICAgIChlcnJvciAiQ2hhbmdlcyB0byBiZSB1 bmRvbmUgYXJlIG91dHNpZGUgdmlzaWJsZSBwb3J0aW9uIG9mIGJ1ZmZlciIpKQotICAgICAgICAg ICAocHV0LXRleHQtcHJvcGVydHkgYmVnIGVuZCBwcm9wIHZhbCkpCi0gICAgICAgICAgOzsgRWxl bWVudCAoQkVHIC4gRU5EKSBtZWFucyByYW5nZSB3YXMgaW5zZXJ0ZWQuCi0gICAgICAgICAgKGAo LChhbmQgYmVnIChwcmVkIGludGVnZXJwKSkgLiAsKGFuZCBlbmQgKHByZWQgaW50ZWdlcnApKSkK LSAgICAgICAgICAgOzsgKGFuZCBgKCxiZWcgLiAsZW5kKSBgKCwocHJlZCBpbnRlZ2VycCkgLiAs KHByZWQgaW50ZWdlcnApKSkKLSAgICAgICAgICAgOzsgSWRlYWxseTogYCgsKHByZWQgaW50ZWdl cnAgYmVnKSAuICwocHJlZCBpbnRlZ2VycCBlbmQpKQotICAgICAgICAgICAod2hlbiAob3IgKD4g KHBvaW50LW1pbikgYmVnKSAoPCAocG9pbnQtbWF4KSBlbmQpKQotICAgICAgICAgICAgIChlcnJv ciAiQ2hhbmdlcyB0byBiZSB1bmRvbmUgYXJlIG91dHNpZGUgdmlzaWJsZSBwb3J0aW9uIG9mIGJ1 ZmZlciIpKQotICAgICAgICAgICA7OyBTZXQgcG9pbnQgZmlyc3QgdGhpbmcsIHNvIHRoYXQgdW5k b2luZyB0aGlzIHVuZG8KLSAgICAgICAgICAgOzsgZG9lcyBub3Qgc2VuZCBwb2ludCBiYWNrIHRv IHdoZXJlIGl0IGlzIG5vdy4KLSAgICAgICAgICAgKGdvdG8tY2hhciBiZWcpCi0gICAgICAgICAg IChkZWxldGUtcmVnaW9uIGJlZyBlbmQpKQotICAgICAgICAgIDs7IEVsZW1lbnQgKGFwcGx5IEZV TiAuIEFSR1MpIG1lYW5zIGNhbGwgRlVOIHRvIHVuZG8uCi0gICAgICAgICAgKGAoYXBwbHkgLiAs ZnVuLWFyZ3MpCi0gICAgICAgICAgIChsZXQgKChjdXJyYnVmZiAoY3VycmVudC1idWZmZXIpKSkK LSAgICAgICAgICAgICAoaWYgKGludGVnZXJwIChjYXIgZnVuLWFyZ3MpKQotICAgICAgICAgICAg ICAgICA7OyBMb25nIGZvcm1hdDogKGFwcGx5IERFTFRBIFNUQVJUIEVORCBGVU4gLiBBUkdTKS4K LSAgICAgICAgICAgICAgICAgKHBjYXNlLWxldCogKChgKCxkZWx0YSAsc3RhcnQgLGVuZCAsZnVu IC4gLGFyZ3MpIGZ1bi1hcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0 LW1hcmsgKGNvcHktbWFya2VyIHN0YXJ0IG5pbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoZW5kLW1hcmsgKGNvcHktbWFya2VyIGVuZCB0KSkpCi0gICAgICAgICAgICAgICAgICAg KHdoZW4gKG9yICg+IChwb2ludC1taW4pIHN0YXJ0KSAoPCAocG9pbnQtbWF4KSBlbmQpKQotICAg ICAgICAgICAgICAgICAgICAgKGVycm9yICJDaGFuZ2VzIHRvIGJlIHVuZG9uZSBhcmUgb3V0c2lk ZSB2aXNpYmxlIHBvcnRpb24gb2YgYnVmZmVyIikpCi0gICAgICAgICAgICAgICAgICAgKGFwcGx5 IGZ1biBhcmdzKSA7OyBVc2UgYHNhdmUtY3VycmVudC1idWZmZXInPwotICAgICAgICAgICAgICAg ICAgIDs7IENoZWNrIHRoYXQgdGhlIGZ1bmN0aW9uIGRpZCB3aGF0IHRoZSBlbnRyeQotICAgICAg ICAgICAgICAgICAgIDs7IHNhaWQgaXQgd291bGQgZG8uCi0gICAgICAgICAgICAgICAgICAgKHVu bGVzcyAoYW5kICg9IHN0YXJ0IHN0YXJ0LW1hcmspCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICg9ICgrIGRlbHRhIGVuZCkgZW5kLW1hcmspKQotICAgICAgICAgICAgICAgICAgICAg KGVycm9yICJDaGFuZ2VzIHRvIGJlIHVuZG9uZSBieSBmdW5jdGlvbiBkaWZmZXJlbnQgdGhhbiBh bm5vdW5jZWQiKSkKLSAgICAgICAgICAgICAgICAgICAoc2V0LW1hcmtlciBzdGFydC1tYXJrIG5p bCkKLSAgICAgICAgICAgICAgICAgICAoc2V0LW1hcmtlciBlbmQtbWFyayBuaWwpKQotICAgICAg ICAgICAgICAgKGFwcGx5IGZ1bi1hcmdzKSkKLSAgICAgICAgICAgICAodW5sZXNzIChlcSBjdXJy YnVmZiAoY3VycmVudC1idWZmZXIpKQotICAgICAgICAgICAgICAgKGVycm9yICJVbmRvIGZ1bmN0 aW9uIHN3aXRjaGVkIGJ1ZmZlciIpKQotICAgICAgICAgICAgIChzZXRxIGRpZC1hcHBseSB0KSkp Ci0gICAgICAgICAgOzsgRWxlbWVudCAoU1RSSU5HIC4gUE9TKSBtZWFucyBTVFJJTkcgd2FzIGRl bGV0ZWQuCi0gICAgICAgICAgKGAoLChhbmQgc3RyaW5nIChwcmVkIHN0cmluZ3ApKSAuICwoYW5k IHBvcyAocHJlZCBpbnRlZ2VycCkpKQotICAgICAgICAgICAod2hlbiAobGV0ICgoYXBvcyAoYWJz IHBvcykpKQotICAgICAgICAgICAgICAgICAgIChvciAoPCBhcG9zIChwb2ludC1taW4pKSAoPiBh cG9zIChwb2ludC1tYXgpKSkpCi0gICAgICAgICAgICAgKGVycm9yICJDaGFuZ2VzIHRvIGJlIHVu ZG9uZSBhcmUgb3V0c2lkZSB2aXNpYmxlIHBvcnRpb24gb2YgYnVmZmVyIikpCi0gICAgICAgICAg IChsZXQgKHZhbGlkLW1hcmtlci1hZGp1c3RtZW50cykKLSAgICAgICAgICAgICA7OyBDaGVjayB0 aGF0IG1hcmtlciBhZGp1c3RtZW50cyB3aGljaCB3ZXJlIHJlY29yZGVkCi0gICAgICAgICAgICAg Ozsgd2l0aCB0aGUgKFNUUklORyAuIFBPUykgcmVjb3JkIGFyZSBzdGlsbCB2YWxpZCwgaWUKLSAg ICAgICAgICAgICA7OyB0aGUgbWFya2VycyBoYXZlbid0IG1vdmVkLiAgV2UgY2hlY2sgdGhlaXIg dmFsaWRpdHkKLSAgICAgICAgICAgICA7OyBiZWZvcmUgcmVpbnNlcnRpbmcgdGhlIHN0cmluZyBz byBhcyB3ZSBkb24ndCBuZWVkIHRvCi0gICAgICAgICAgICAgOzsgbWluZCBtYXJrZXIgaW5zZXJ0 aW9uLXR5cGUuCi0gICAgICAgICAgICAgKHdoaWxlIChhbmQgKG1hcmtlcnAgKGNhci1zYWZlIChj YXIgbGlzdCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlZ2VycCAoY2RyLXNhZmUg KGNhciBsaXN0KSkpKQotICAgICAgICAgICAgICAgKGxldCogKChtYXJrZXItYWRqIChwb3AgbGlz dCkpCi0gICAgICAgICAgICAgICAgICAgICAgKG0gKGNhciBtYXJrZXItYWRqKSkpCi0gICAgICAg ICAgICAgICAgIChhbmQgKGVxIChtYXJrZXItYnVmZmVyIG0pIChjdXJyZW50LWJ1ZmZlcikpCi0g ICAgICAgICAgICAgICAgICAgICAgKD0gcG9zIG0pCi0gICAgICAgICAgICAgICAgICAgICAgKHB1 c2ggbWFya2VyLWFkaiB2YWxpZC1tYXJrZXItYWRqdXN0bWVudHMpKSkpCi0gICAgICAgICAgICAg OzsgSW5zZXJ0IHN0cmluZyBhbmQgYWRqdXN0IHBvaW50Ci0gICAgICAgICAgICAgKGlmICg8IHBv cyAwKQotICAgICAgICAgICAgICAgICAocHJvZ24KLSAgICAgICAgICAgICAgICAgICAoZ290by1j aGFyICgtIHBvcykpCi0gICAgICAgICAgICAgICAgICAgKGluc2VydCBzdHJpbmcpKQotICAgICAg ICAgICAgICAgKGdvdG8tY2hhciBwb3MpCi0gICAgICAgICAgICAgICAoaW5zZXJ0IHN0cmluZykK LSAgICAgICAgICAgICAgIChnb3RvLWNoYXIgcG9zKSkKLSAgICAgICAgICAgICA7OyBBZGp1c3Qg dGhlIHZhbGlkIG1hcmtlciBhZGp1c3RtZW50cwotICAgICAgICAgICAgIChkb2xpc3QgKGFkaiB2 YWxpZC1tYXJrZXItYWRqdXN0bWVudHMpCi0gICAgICAgICAgICAgICAoc2V0LW1hcmtlciAoY2Fy IGFkaikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIChjYXIgYWRqKSAoY2RyIGFkaikp KSkpKQotICAgICAgICAgIDs7IChNQVJLRVIgLiBPRkZTRVQpIG1lYW5zIGEgbWFya2VyIE1BUktF UiB3YXMgYWRqdXN0ZWQgYnkgT0ZGU0VULgotICAgICAgICAgIChgKCwoYW5kIG1hcmtlciAocHJl ZCBtYXJrZXJwKSkgLiAsKGFuZCBvZmZzZXQgKHByZWQgaW50ZWdlcnApKSkKLSAgICAgICAgICAg KHdhcm4gIkVuY291bnRlcmVkICVTIGVudHJ5IGluIHVuZG8gbGlzdCB3aXRoIG5vIG1hdGNoaW5n IChURVhUIC4gUE9TKSBlbnRyeSIKLSAgICAgICAgICAgICAgICAgbmV4dCkKLSAgICAgICAgICAg OzsgRXZlbiB0aG91Z2ggdGhlc2UgZWxlbWVudHMgYXJlIG5vdCBleHBlY3RlZCBpbiB0aGUgdW5k bwotICAgICAgICAgICA7OyBsaXN0LCBhZGp1c3QgdGhlbSB0byBiZSBjb25zZXJ2YXRpdmUgZm9y IHRoZSAyNC40Ci0gICAgICAgICAgIDs7IHJlbGVhc2UuICAoQnVnIzE2ODE4KQotICAgICAgICAg ICAod2hlbiAobWFya2VyLWJ1ZmZlciBtYXJrZXIpCi0gICAgICAgICAgICAgKHNldC1tYXJrZXIg bWFya2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgKC0gbWFya2VyIG9mZnNldCkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAobWFya2VyLWJ1ZmZlciBtYXJrZXIpKSkpCi0gICAgICAgICAg KF8gKGVycm9yICJVbnJlY29nbml6ZWQgZW50cnkgaW4gdW5kbyBsaXN0ICVTIiBuZXh0KSkpKQot ICAgICAgKHNldHEgYXJnICgxLSBhcmcpKSkKLSAgICA7OyBNYWtlIHN1cmUgYW4gYXBwbHkgZW50 cnkgcHJvZHVjZXMgYXQgbGVhc3Qgb25lIHVuZG8gZW50cnksCi0gICAgOzsgc28gdGhlIHRlc3Qg aW4gYHVuZG8nIGZvciBjb250aW51aW5nIGFuIHVuZG8gc2VyaWVzCi0gICAgOzsgd2lsbCB3b3Jr IHJpZ2h0LgotICAgIChpZiAoYW5kIGRpZC1hcHBseQotICAgICAgICAgICAgIChlcSBvbGRsaXN0 IGJ1ZmZlci11bmRvLWxpc3QpKQotICAgICAgICAoc2V0cSBidWZmZXItdW5kby1saXN0Ci0gICAg ICAgICAgICAgIChjb25zIChsaXN0ICdhcHBseSAnY2RyIG5pbCkgYnVmZmVyLXVuZG8tbGlzdCkp KSkKLSAgbGlzdCkKKyAgICAgICAgKG9sZGxpc3QgYnVmZmVyLXVuZG8tbGlzdCkpCisgICAgOzsg SGFuZGxlIGFuIGludGVnZXIgYnkgc2V0dGluZyBwb2ludCB0byB0aGF0IHZhbHVlLgorICAgIChw Y2FzZSBuZXh0CisgICAgICAoKHByZWQgaW50ZWdlcnApIChnb3RvLWNoYXIgbmV4dCkpCisgICAg ICA7OyBFbGVtZW50ICh0IC4gVElNRSkgcmVjb3JkcyBwcmV2aW91cyBtb2R0aW1lLgorICAgICAg OzsgUHJlc2VydmUgYW55IGZsYWcgb2YgTk9ORVhJU1RFTlRfTU9EVElNRV9OU0VDUyBvcgorICAg ICAgOzsgVU5LTk9XTl9NT0RUSU1FX05TRUNTLgorICAgICAgKGAodCAuICx0aW1lKQorICAgICAg IDs7IElmIHRoaXMgcmVjb3JkcyBhbiBvYnNvbGV0ZSBzYXZlCisgICAgICAgOzsgKG5vdCBtYXRj aGluZyB0aGUgYWN0dWFsIGRpc2sgZmlsZSkKKyAgICAgICA7OyB0aGVuIGRvbid0IG1hcmsgdW5t b2RpZmllZC4KKyAgICAgICAod2hlbiAob3IgKGVxdWFsIHRpbWUgKHZpc2l0ZWQtZmlsZS1tb2R0 aW1lKSkKKyAgICAgICAgICAgICAgICAgKGFuZCAoY29uc3AgdGltZSkKKyAgICAgICAgICAgICAg ICAgICAgICAoZXF1YWwgKGxpc3QgKGNhciB0aW1lKSAoY2RyIHRpbWUpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodmlzaXRlZC1maWxlLW1vZHRpbWUpKSkpCisgICAgICAgICAod2hl biAoZmJvdW5kcCAndW5sb2NrLWJ1ZmZlcikKKyAgICAgICAgICAgKHVubG9jay1idWZmZXIpKQor ICAgICAgICAgKHNldC1idWZmZXItbW9kaWZpZWQtcCBuaWwpKSkKKyAgICAgIDs7IEVsZW1lbnQg KG5pbCBQUk9QIFZBTCBCRUcgLiBFTkQpIGlzIHByb3BlcnR5IGNoYW5nZS4KKyAgICAgIChgKG5p bCAuICwob3IgYCgscHJvcCAsdmFsICxiZWcgLiAsZW5kKSBwY2FzZS0tZG9udGNhcmUpKQorICAg ICAgICh3aGVuIChvciAoPiAocG9pbnQtbWluKSBiZWcpICg8IChwb2ludC1tYXgpIGVuZCkpCisg ICAgICAgICAoZXJyb3IgIkNoYW5nZXMgdG8gYmUgdW5kb25lIGFyZSBvdXRzaWRlIHZpc2libGUg cG9ydGlvbiBvZiBidWZmZXIiKSkKKyAgICAgICAocHV0LXRleHQtcHJvcGVydHkgYmVnIGVuZCBw cm9wIHZhbCkpCisgICAgICA7OyBFbGVtZW50IChCRUcgLiBFTkQpIG1lYW5zIHJhbmdlIHdhcyBp bnNlcnRlZC4KKyAgICAgIChgKCwoYW5kIGJlZyAocHJlZCBpbnRlZ2VycCkpIC4gLChhbmQgZW5k IChwcmVkIGludGVnZXJwKSkpCisgICAgICAgOzsgKGFuZCBgKCxiZWcgLiAsZW5kKSBgKCwocHJl ZCBpbnRlZ2VycCkgLiAsKHByZWQgaW50ZWdlcnApKSkKKyAgICAgICA7OyBJZGVhbGx5OiBgKCwo cHJlZCBpbnRlZ2VycCBiZWcpIC4gLChwcmVkIGludGVnZXJwIGVuZCkpCisgICAgICAgKHdoZW4g KG9yICg+IChwb2ludC1taW4pIGJlZykgKDwgKHBvaW50LW1heCkgZW5kKSkKKyAgICAgICAgIChl cnJvciAiQ2hhbmdlcyB0byBiZSB1bmRvbmUgYXJlIG91dHNpZGUgdmlzaWJsZSBwb3J0aW9uIG9m IGJ1ZmZlciIpKQorICAgICAgIDs7IFNldCBwb2ludCBmaXJzdCB0aGluZywgc28gdGhhdCB1bmRv aW5nIHRoaXMgdW5kbworICAgICAgIDs7IGRvZXMgbm90IHNlbmQgcG9pbnQgYmFjayB0byB3aGVy ZSBpdCBpcyBub3cuCisgICAgICAgKGdvdG8tY2hhciBiZWcpCisgICAgICAgKGRlbGV0ZS1yZWdp b24gYmVnIGVuZCkpCisgICAgICA7OyBFbGVtZW50IChhcHBseSBGVU4gLiBBUkdTKSBtZWFucyBj YWxsIEZVTiB0byB1bmRvLgorICAgICAgKGAoYXBwbHkgLiAsZnVuLWFyZ3MpCisgICAgICAgKGxl dCAoKGN1cnJidWZmIChjdXJyZW50LWJ1ZmZlcikpKQorICAgICAgICAgKGlmIChpbnRlZ2VycCAo Y2FyIGZ1bi1hcmdzKSkKKyAgICAgICAgICAgICA7OyBMb25nIGZvcm1hdDogKGFwcGx5IERFTFRB IFNUQVJUIEVORCBGVU4gLiBBUkdTKS4KKyAgICAgICAgICAgICAocGNhc2UtbGV0KiAoKGAoLGRl bHRhICxzdGFydCAsZW5kICxmdW4gLiAsYXJncykgZnVuLWFyZ3MpCisgICAgICAgICAgICAgICAg ICAgICAgICAgIChzdGFydC1tYXJrIChjb3B5LW1hcmtlciBzdGFydCBuaWwpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAoZW5kLW1hcmsgKGNvcHktbWFya2VyIGVuZCB0KSkpCisgICAgICAg ICAgICAgICAod2hlbiAob3IgKD4gKHBvaW50LW1pbikgc3RhcnQpICg8IChwb2ludC1tYXgpIGVu ZCkpCisgICAgICAgICAgICAgICAgIChlcnJvciAiQ2hhbmdlcyB0byBiZSB1bmRvbmUgYXJlIG91 dHNpZGUgdmlzaWJsZSBwb3J0aW9uIG9mIGJ1ZmZlciIpKQorICAgICAgICAgICAgICAgKGFwcGx5 IGZ1biBhcmdzKSA7OyBVc2UgYHNhdmUtY3VycmVudC1idWZmZXInPworICAgICAgICAgICAgICAg OzsgQ2hlY2sgdGhhdCB0aGUgZnVuY3Rpb24gZGlkIHdoYXQgdGhlIGVudHJ5CisgICAgICAgICAg ICAgICA7OyBzYWlkIGl0IHdvdWxkIGRvLgorICAgICAgICAgICAgICAgKHVubGVzcyAoYW5kICg9 IHN0YXJ0IHN0YXJ0LW1hcmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKD0gKCsgZGVs dGEgZW5kKSBlbmQtbWFyaykpCisgICAgICAgICAgICAgICAgIChlcnJvciAiQ2hhbmdlcyB0byBi ZSB1bmRvbmUgYnkgZnVuY3Rpb24gZGlmZmVyZW50IHRoYW4gYW5ub3VuY2VkIikpCisgICAgICAg ICAgICAgICAoc2V0LW1hcmtlciBzdGFydC1tYXJrIG5pbCkKKyAgICAgICAgICAgICAgIChzZXQt bWFya2VyIGVuZC1tYXJrIG5pbCkpCisgICAgICAgICAgIChhcHBseSBmdW4tYXJncykpCisgICAg ICAgICAodW5sZXNzIChlcSBjdXJyYnVmZiAoY3VycmVudC1idWZmZXIpKQorICAgICAgICAgICAo ZXJyb3IgIlVuZG8gZnVuY3Rpb24gc3dpdGNoZWQgYnVmZmVyIikpCisgICAgICAgICA7OyBNYWtl IHN1cmUgYW4gYXBwbHkgZW50cnkgcHJvZHVjZXMgYXQgbGVhc3Qgb25lIHVuZG8gZW50cnksCisg ICAgICAgICA7OyBzbyB0aGUgdGVzdCBpbiBgdW5kbycgZm9yIGNvbnRpbnVpbmcgYW4gdW5kbyBz ZXJpZXMKKyAgICAgICAgIDs7IHdpbGwgd29yayByaWdodC4KKyAgICAgICAgICh3aGVuIChlcSBv bGRsaXN0IGJ1ZmZlci11bmRvLWxpc3QpCisgICAgICAgICAgIChwdXNoIChsaXN0ICdhcHBseSAn Y2RyIG5pbCkgYnVmZmVyLXVuZG8tbGlzdCkpKSkKKyAgICAgIDs7IEVsZW1lbnQgKFNUUklORyAu IFBPUykgbWVhbnMgU1RSSU5HIHdhcyBkZWxldGVkLgorICAgICAgKGAoLChhbmQgc3RyaW5nIChw cmVkIHN0cmluZ3ApKSAuICwoYW5kIHBvcyAocHJlZCBpbnRlZ2VycCkpKQorICAgICAgICh3aGVu IChsZXQgKChhcG9zIChhYnMgcG9zKSkpCisgICAgICAgICAgICAgICAob3IgKDwgYXBvcyAocG9p bnQtbWluKSkgKD4gYXBvcyAocG9pbnQtbWF4KSkpKQorICAgICAgICAgKGVycm9yICJDaGFuZ2Vz IHRvIGJlIHVuZG9uZSBhcmUgb3V0c2lkZSB2aXNpYmxlIHBvcnRpb24gb2YgYnVmZmVyIikpCisg ICAgICAgOzsgSW5zZXJ0IHN0cmluZyBhbmQgYWRqdXN0IHBvaW50CisgICAgICAgKGlmICg8IHBv cyAwKQorICAgICAgICAgICAocHJvZ24KKyAgICAgICAgICAgICAoZ290by1jaGFyICgtIHBvcykp CisgICAgICAgICAgICAgKGluc2VydCBzdHJpbmcpKQorICAgICAgICAgKGdvdG8tY2hhciBwb3Mp CisgICAgICAgICAoaW5zZXJ0IHN0cmluZykKKyAgICAgICAgIChnb3RvLWNoYXIgcG9zKSkpCisg ICAgICA7OyAoTUFSS0VSIC4gT0ZGU0VUKSBtZWFucyBhIG1hcmtlciBNQVJLRVIgd2FzIGFkanVz dGVkIGJ5IE9GRlNFVC4KKyAgICAgIChgKCwoYW5kIG1hcmtlciAocHJlZCBtYXJrZXJwKSkgLiAs KGFuZCBvZmZzZXQgKHByZWQgaW50ZWdlcnApKSkKKyAgICAgICAod2hlbiAobWFya2VyLWJ1ZmZl ciBtYXJrZXIpCisgICAgICAgICAoc2V0LW1hcmtlciBtYXJrZXIKKyAgICAgICAgICAgICAgICAg ICAgICgtIG1hcmtlciBvZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAobWFya2VyLWJ1ZmZl ciBtYXJrZXIpKSkpCisgICAgICAoXyAoZXJyb3IgIlVucmVjb2duaXplZCBlbnRyeSBpbiB1bmRv IGxpc3QgJVMiIG5leHQpKSkKKyAgICAobm90IChlcSBvbGRsaXN0IGJ1ZmZlci11bmRvLWxpc3Qp KSkpCiAKIDs7IERlZXAgY29weSBvZiBhIGxpc3QKIChkZWZ1biB1bmRvLWNvcHktbGlzdCAobGlz dCkKQEAgLTIzNTMsMTcgKzIzOTEsMjIgQEAgUmV0dXJuIHdoYXQgcmVtYWlucyBvZiB0aGUgbGlz dC4iCiAgICAgZWx0KSkKIAogKGRlZnVuIHVuZG8tc3RhcnQgKCZvcHRpb25hbCBiZWcgZW5kKQot ICAiU2V0IGBwZW5kaW5nLXVuZG8tbGlzdCcgdG8gdGhlIGZyb250IG9mIHRoZSB1bmRvIGxpc3Qu Ci1UaGUgbmV4dCBjYWxsIHRvIGB1bmRvLW1vcmUnIHdpbGwgdW5kbyB0aGUgbW9zdCByZWNlbnRs eSBtYWRlIGNoYW5nZS4KLUlmIEJFRyBhbmQgRU5EIGFyZSBzcGVjaWZpZWQsIHRoZW4gb25seSB1 bmRvIGVsZW1lbnRzCi10aGF0IGFwcGx5IHRvIHRleHQgYmV0d2VlbiBCRUcgYW5kIEVORCBhcmUg dXNlZDsgb3RoZXIgdW5kbyBlbGVtZW50cwotYXJlIGlnbm9yZWQuICBJZiBCRUcgYW5kIEVORCBh cmUgbmlsLCBhbGwgdW5kbyBlbGVtZW50cyBhcmUgdXNlZC4iCisgICJTZXQgYHBlbmRpbmctdW5k by1saXN0JyB0byBiZWdpbiBhIHJ1biBvZiB1bmRvcy4gIFRoZSBuZXh0CitjYWxsIHRvIGB1bmRv LW1vcmUnIHdpbGwgdW5kbyB0aGUgbmV4dCBjaGFuZ2UgZ3JvdXAuICBJZiBCRUcgYW5kCitFTkQg YXJlIHNwZWNpZmllZCwgdGhlbiBvbmx5IHVuZG8gZWxlbWVudHMgdGhhdCBhcHBseSB0byB0ZXh0 CitiZXR3ZWVuIEJFRyBhbmQgRU5EIGFyZSB1c2VkOyBvdGhlciB1bmRvIGVsZW1lbnRzIGFyZSBp Z25vcmVkLgorSWYgQkVHIGFuZCBFTkQgYXJlIG5pbCwgYWxsIHVuZG8gZWxlbWVudHMgYXJlIHVz ZWQuIgogICAoaWYgKGVxIGJ1ZmZlci11bmRvLWxpc3QgdCkKICAgICAgICh1c2VyLWVycm9yICJO byB1bmRvIGluZm9ybWF0aW9uIGluIHRoaXMgYnVmZmVyIikpCiAgIChzZXRxIHBlbmRpbmctdW5k by1saXN0CiAJKGlmIChhbmQgYmVnIGVuZCAobm90ICg9IGJlZyBlbmQpKSkKLQkgICAgKHVuZG8t bWFrZS1zZWxlY3RpdmUtbGlzdCAobWluIGJlZyBlbmQpIChtYXggYmVnIGVuZCkpCi0JICBidWZm ZXItdW5kby1saXN0KSkpCisJICAgICh1bmRvLW1ha2UtcmVnaW9uYWwtbGlzdCAobWluIGJlZyBl bmQpIChtYXggYmVnIGVuZCkpCisgICAgICAgICAgKGxldCAoKGxpc3QtaSBidWZmZXItdW5kby1s aXN0KQorICAgICAgICAgICAgICAgIGFzc29jLWxpc3QpCisgICAgICAgICAgICAod2hpbGUgbGlz dC1pCisgICAgICAgICAgICAgIChwdXNoIChjb25zIChjYXIgbGlzdC1pKSBsaXN0LWkpIGFzc29j LWxpc3QpCisgICAgICAgICAgICAgIChwb3AgbGlzdC1pKSkKKyAgICAgICAgICAgIChucmV2ZXJz ZSBhc3NvYy1saXN0KSkpKSkKIAogOzsgVGhlIHBvc2l0aW9ucyBnaXZlbiBpbiBlbGVtZW50cyBv ZiB0aGUgdW5kbyBsaXN0IGFyZSB0aGUgcG9zaXRpb25zCiA7OyBhcyBvZiB0aGUgdGltZSB0aGF0 IGVsZW1lbnQgd2FzIHJlY29yZGVkIHRvIHVuZG8gaGlzdG9yeS4gIEluCkBAIC0yNDI0LDE1ICsy NDY3LDE3IEBAIGFyZSBpZ25vcmVkLiAgSWYgQkVHIGFuZCBFTkQgYXJlIG5pbCwgYWxsIHVuZG8g ZWxlbWVudHMgYXJlIHVzZWQuIgogOzsgImNjYWFiYWQiLCBhcyB0aG91Z2ggdGhlIGZpcnN0ICJk IiBiZWNhbWUgZGV0YWNoZWQgZnJvbSB0aGUKIDs7IG9yaWdpbmFsICJkZGQiIGluc2VydGlvbi4g IFRoaXMgcXVpcmsgaXMgYSBGSVhNRS4KIAotKGRlZnVuIHVuZG8tbWFrZS1zZWxlY3RpdmUtbGlz dCAoc3RhcnQgZW5kKQotICAiUmV0dXJuIGEgbGlzdCBvZiB1bmRvIGVsZW1lbnRzIGZvciB0aGUg cmVnaW9uIFNUQVJUIHRvIEVORC4KLVRoZSBlbGVtZW50cyBjb21lIGZyb20gYGJ1ZmZlci11bmRv LWxpc3QnLCBidXQgd2Uga2VlcCBvbmx5IHRoZQotZWxlbWVudHMgaW5zaWRlIHRoaXMgcmVnaW9u LCBhbmQgZGlzY2FyZCB0aG9zZSBvdXRzaWRlIHRoaXMKLXJlZ2lvbi4gIFRoZSBlbGVtZW50cycg cG9zaXRpb25zIGFyZSBhZGp1c3RlZCBzbyBhcyB0aGUgcmV0dXJuZWQKLWxpc3QgY2FuIGJlIGFw cGxpZWQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLiIKKyhkZWZ1biB1bmRvLW1ha2UtcmVnaW9uYWwt bGlzdCAoc3RhcnQgZW5kKQorICAiUmV0dXJuIGEgbGlzdCBvZiB1bmRvIGFzc29jaWF0aW9ucyBm b3IgdGhlIHJlZ2lvbiBTVEFSVCB0byBFTkQsCisKK1RoZSB1bmRvIGFzc29jaWF0aW9ucyBhcmUg b2YgdGhlIGZvcm0gKEFESlVTVEVELUVMVAorLiBPUklHLVVORE8tTElTVCkgYW5kIGFyZSBhcyBk b2N1bWVudGVkIGZvcgorcGVuZGluZy11bmRvLWxpc3QuIE9ubHkgYXNzb2NpYXRpb25zIGZvciBl bGVtZW50cyBseWluZyBpbnNpZGUKK3RoZSByZWdpb24gYXJlIGluY2x1ZGVkLiBUaGVpciBwb3Np dGlvbnMgYXJlIGFkanVzdGVkIGJhc2VkIG9uCit0aGUgZGlzY2FyZGVkIGVsZW1lbnRzIG5vdCBm dWxseSBpbiB0aGUgcmVnaW9uLiIKICAgKGxldCAoKHVsaXN0IGJ1ZmZlci11bmRvLWxpc3QpCi0g ICAgICAgIDs7IEEgbGlzdCBvZiBwb3NpdGlvbiBhZGp1c3RlZCB1bmRvIGVsZW1lbnRzIGluIHRo ZSByZWdpb24uCi0gICAgICAgIChzZWxlY3RpdmUtbGlzdCAobGlzdCBuaWwpKQorICAgICAgICA7 OyBUaGUgbGlzdCBvZiAoQURKVVNURUQtRUxUIC4gT1JJRy1VTkRPLUxJU1QpIHRvIHJldHVybgor ICAgICAgICAoc2VsZWN0aXZlLWxpc3QgKGxpc3QgKGNvbnMgbmlsIG5pbCkpKQogICAgICAgICA7 OyBBIGxpc3Qgb2YgdW5kby1kZWx0YXMgZm9yIG91dCBvZiByZWdpb24gdW5kbyBlbGVtZW50cy4K ICAgICAgICAgdW5kby1kZWx0YXMKICAgICAgICAgdW5kby1lbHQpCkBAIC0yNDQzLDE0ICsyNDg4 LDE2IEBAIGxpc3QgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLiIKICAgICAg IChzZXRxIHVuZG8tZWx0IChjYXIgdWxpc3QpKQogICAgICAgKGNvbmQKICAgICAgICAoKG51bGwg dW5kby1lbHQpCi0gICAgICAgIDs7IERvbid0IHB1dCB0d28gbmlscyB0b2dldGhlciBpbiB0aGUg bGlzdAotICAgICAgICAod2hlbiAoY2FyIHNlbGVjdGl2ZS1saXN0KQotICAgICAgICAgIChwdXNo IG5pbCBzZWxlY3RpdmUtbGlzdCkpKQorICAgICAgICAobGV0ICg7OyBVbmRvIGJvdW5kYXJ5IHJl cHJlc2VudGF0aW9uCisgICAgICAgICAgICAgIChib3VuZGFyeSAoY29ucyBuaWwgbmlsKSkpCisg ICAgICAgICAgOzsgRG9uJ3QgcHV0IHR3byB1bmRvIGJvdW5kYXJpZXMgdG9nZXRoZXIgaW4gdGhl IGxpc3QKKyAgICAgICAgICAodW5sZXNzIChlcXVhbCBib3VuZGFyeSAoY2FyIHNlbGVjdGl2ZS1s aXN0KSkKKyAgICAgICAgICAgIChwdXNoIGJvdW5kYXJ5IHNlbGVjdGl2ZS1saXN0KSkpKQogICAg ICAgICgoYW5kIChjb25zcCB1bmRvLWVsdCkgKGVxIChjYXIgdW5kby1lbHQpIHQpKQogICAgICAg ICA7OyBUaGlzIGlzIGEgIndhcyB1bm1vZGlmaWVkIiBlbGVtZW50LiAgS2VlcCBpdAogICAgICAg ICA7OyBpZiB3ZSBoYXZlIGtlcHQgZXZlcnl0aGluZyB0aHVzIGZhci4KICAgICAgICAgKHdoZW4g KG5vdCB1bmRvLWRlbHRhcykKLSAgICAgICAgICAocHVzaCB1bmRvLWVsdCBzZWxlY3RpdmUtbGlz dCkpKQorICAgICAgICAgIChwdXNoIChjb25zIHVuZG8tZWx0IHVsaXN0KSBzZWxlY3RpdmUtbGlz dCkpKQogICAgICAgIDs7IFNraXAgb3ZlciBtYXJrZXIgYWRqdXN0bWVudHMsIGluc3RlYWQgcmVs eWluZwogICAgICAgIDs7IG9uIGZpbmRpbmcgdGhlbSBhZnRlciAoVEVYVCAuIFBPUykgZWxlbWVu dHMKICAgICAgICAoKG1hcmtlcnAgKGNhci1zYWZlIHVuZG8tZWx0KSkKQEAgLTI0NjEsMjAgKzI1 MDgsMzAgQEAgbGlzdCBjYW4gYmUgYXBwbGllZCB0byB0aGUgY3VycmVudCBidWZmZXIuIgogICAg ICAgICAgIChpZiAodW5kby1lbHQtaW4tcmVnaW9uIGFkanVzdGVkLXVuZG8tZWx0IHN0YXJ0IGVu ZCkKICAgICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAgKHNldHEgZW5kICgrIGVu ZCAoY2RyICh1bmRvLWRlbHRhIGFkanVzdGVkLXVuZG8tZWx0KSkpKQotICAgICAgICAgICAgICAg IChwdXNoIGFkanVzdGVkLXVuZG8tZWx0IHNlbGVjdGl2ZS1saXN0KQorICAgICAgICAgICAgICAg IChwdXNoIChjb25zIGFkanVzdGVkLXVuZG8tZWx0IHVsaXN0KSBzZWxlY3RpdmUtbGlzdCkKICAg ICAgICAgICAgICAgICA7OyBLZWVwIChNQVJLRVIgLiBBREpVU1RNRU5UKSBpZiB0aGVpciAoVEVY VCAuIFBPUykgd2FzCiAgICAgICAgICAgICAgICAgOzsga2VwdC4gIHByaW1pdGl2ZS11bmRvIG1h eSBkaXNjYXJkIHRoZW0gbGF0ZXIuCiAgICAgICAgICAgICAgICAgKHdoZW4gKGFuZCAoc3RyaW5n cCAoY2FyLXNhZmUgYWRqdXN0ZWQtdW5kby1lbHQpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGludGVnZXJwIChjZHItc2FmZSBhZGp1c3RlZC11bmRvLWVsdCkpKQogICAgICAgICAgICAg ICAgICAgKGxldCAoKGxpc3QtaSAoY2RyIHVsaXN0KSkpCiAgICAgICAgICAgICAgICAgICAgICh3 aGlsZSAobWFya2VycCAoY2FyLXNhZmUgKGNhciBsaXN0LWkpKSkKLSAgICAgICAgICAgICAgICAg ICAgICAocHVzaCAocG9wIGxpc3QtaSkgc2VsZWN0aXZlLWxpc3QpKSkpKQorICAgICAgICAgICAg ICAgICAgICAgIChsZXQgKChtYXJrZXItYWRqIChwb3AgbGlzdC1pKSkpCisgICAgICAgICAgICAg ICAgICAgICAgICAocHVzaCAoY29ucyBtYXJrZXItYWRqIG1hcmtlci1hZGopCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWxlY3RpdmUtbGlzdCkpKSkpKQogICAgICAgICAgICAgKGxl dCAoKGRlbHRhICh1bmRvLWRlbHRhIHVuZG8tZWx0KSkpCiAgICAgICAgICAgICAgICh3aGVuICgv PSAwIChjZHIgZGVsdGEpKQogICAgICAgICAgICAgICAgIChwdXNoIGRlbHRhIHVuZG8tZGVsdGFz KSkpKSkpKQogICAgICAgKHBvcCB1bGlzdCkpCiAgICAgKG5yZXZlcnNlIHNlbGVjdGl2ZS1saXN0 KSkpCiAKKyhkZWZ1biB1bmRvLW1ha2Utc2VsZWN0aXZlLWxpc3QgKHN0YXJ0IGVuZCkKKyAgIlJl YWxpemUgYSBmdWxsIHNlbGVjdGl2ZSB1bmRvIGxpc3QgcGVyCit1bmRvLW1ha2UtcmVnaW9uYWwt Z2VuZXJhdG9yLiIKKyAgKG1hcGNhciAjJ2NhciAodW5kby1tYWtlLXJlZ2lvbmFsLWxpc3Qgc3Rh cnQgZW5kKSkpCisobWFrZS1vYnNvbGV0ZSAndW5kby1tYWtlLXNlbGVjdGl2ZS1saXN0CisgICAg ICAgICAgICAgICAiVXNlIHVuZG8tbWFrZS1yZWdpb25hbC1saXN0IGluc3RlYWQuIgorICAgICAg ICAgICAgICAgIjI0LjUiKQorCiAoZGVmdW4gdW5kby1lbHQtaW4tcmVnaW9uICh1bmRvLWVsdCBz dGFydCBlbmQpCiAgICJEZXRlcm1pbmUgd2hldGhlciBVTkRPLUVMVCBmYWxscyBpbnNpZGUgdGhl IHJlZ2lvbiBTVEFSVCAuLi4gRU5ELgogSWYgaXQgY3Jvc3NlcyB0aGUgZWRnZSwgd2UgcmV0dXJu IG5pbC4K --001a11c2ed6ceff48804fa7a2cf3--