From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Lennart Borgman Newsgroups: gmane.emacs.devel Subject: Re: moving window handling into lisp Date: Fri, 14 Aug 2009 03:13:06 +0200 Message-ID: References: <4A83E300.5000104@gmx.at> <4A841B8B.8040107@gmx.at> <4A84567E.4080602@gmx.at> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001636ed663734252404710fc1c9 X-Trace: ger.gmane.org 1250212434 24544 80.91.229.12 (14 Aug 2009 01:13:54 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 14 Aug 2009 01:13:54 +0000 (UTC) Cc: Stefan Monnier , emacs-devel@gnu.org To: martin rudalics Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Aug 14 03:13:46 2009 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1MblM7-0001PM-Ds for ged-emacs-devel@m.gmane.org; Fri, 14 Aug 2009 03:13:44 +0200 Original-Received: from localhost ([127.0.0.1]:57886 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MblM6-0006fg-KA for ged-emacs-devel@m.gmane.org; Thu, 13 Aug 2009 21:13:18 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MblM0-0006fa-BE for emacs-devel@gnu.org; Thu, 13 Aug 2009 21:13:12 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MblLv-0006eo-OQ for emacs-devel@gnu.org; Thu, 13 Aug 2009 21:13:11 -0400 Original-Received: from [199.232.76.173] (port=42646 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MblLv-0006ea-Li for emacs-devel@gnu.org; Thu, 13 Aug 2009 21:13:07 -0400 Original-Received: from an-out-0708.google.com ([209.85.132.243]:11031) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MblLv-0006pn-9Q for emacs-devel@gnu.org; Thu, 13 Aug 2009 21:13:07 -0400 Original-Received: by an-out-0708.google.com with SMTP id b6so537293ana.21 for ; Thu, 13 Aug 2009 18:13:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=Ok7+L//OpOVRmZNWZ8Tu1aAvVO7gqdnHGQxgd6kXAtc=; b=YHBUQ+Yh4jcQ/eZc73Cu2a3r8eaGfmULwXs4UOPovjGn/qV25kTzjN0+63XNI5pwVa QViJq97S1euQW1dhYiPTY5BElUGArWBdUHXq99xVUnB4Hr51YobqQXvwx/K31HFS//Ev w6GHPlVkJaQgYY5S1EGQ/+OV2Cn/fKf+fMwo4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=b5blOYoA8X5NT3foyO52JhzYO6MUaMJKbe+jGbuyTetJHQG190TFDynOLRg4RWuvO4 FElutfptwJvCkt8vYiC6f5omCdxQxyFTy9Xj7eY8wM1tkBIQPicKsPoXM4dDfvKWngGw mLWWpiA02oMXg/PJD/iYEu1dQoD0KKjVr+nMI= Original-Received: by 10.101.88.12 with SMTP id q12mr1381183anl.117.1250212386710; Thu, 13 Aug 2009 18:13:06 -0700 (PDT) In-Reply-To: <4A84567E.4080602@gmx.at> X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:114211 Archived-At: --001636ed663734252404710fc1c9 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Thu, Aug 13, 2009 at 8:07 PM, martin rudalics wrote: >> I am not sure why you want to do something like the above. However you >> introduce a new element here: relaxing of the requirements. > > Not only - in the first step I would make them stronger. > >> Do you really want to do that? Or did I misunderstand you? > > When I change the size of a particular window on one end of my frame I > don't want Emacs to change the sizes of windows at the other end. > Changes should be "as local as possible". =C2=A0For example, when I drag = a > modeline I usually do not expect the sizes of windows not adjacent to > that modeline change unless Emacs has no other choice. I see. But would not that be easy to implement with the algorithm I suggest= ed? You just have to find the window subtree that is adjecent to the modeline and apply the algorithm there. (With new temporary restrictions there. These things must of course be added to the algorithm, but I can't see any fundamental problem with it.) What problems do you see with that? >> More seriously: if you are changing the rules, then please tell what >> rules you want to use see we can see if the problem is solveable with >> your new rules. > > What rules? =C2=A0Please tell me _how_ your algorithm would handle a sing= le > `enlarge-window' command. =C2=A0Which other windows would change in which > order? =C2=A0How would new window sizes relate to the old ones? A very important idea in the algorithm is that it works with all the child windows on level at once. You compute all the sizes on that level and then you apply them. (So a new function in C for applying the changes per sublevel is needed.) To apply enlarge-window (or any similar command) -- or, VERY important, rather what it does --- simply set fix size restrictions on that windows size (to the desired size) and other windows (to their current sizes) on that level that is not adjecent to the window that we try to enlarge. If this fails then then take away the restrictions on windows next-adjecent and try again. Repeat until success or final failure. (The order of repetioins is just the lenght of the list, there is no recursions, so it is no performance problem.) Of course I did not implement an easy way to apply the restrictions right now but that is easily added (except for my clumsiness... ;-). Note: The existing enlarge-window should in this scenario go away and a new one should be implemented (probably in elis then) that does the above things. The same apply to the other window handling routines that does similar things. I attach yet a new version of my little play thing for this. I have not tried to implement something that handles restrictions as per above there. You could at the moment simulate it by setting the restrictions for max and min sizes for a window. It is not difficult to add the restrictions, it just one of those small things where I tend to make a lot of small mistakes a la or/and etc so I do not want to do it right now. I need some more minutes to get it done. (What I have done in this version is making it a bit easier to play with and added comments about how I think it should tie into the C level.) > martin > --001636ed663734252404710fc1c9 Content-Type: text/plain; charset=US-ASCII; name="win-alg.el" Content-Disposition: attachment; filename="win-alg.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fyc830s80 Ozs7IHdpbi1hbGcuZWwgLS0tIFdpbmRvdyBzaXplIGNvbXB1dGF0aW9uDQo7Ow0KOzsgQXV0aG9y OiBMZW5uYXJ0IEJvcmdtYW4gKGxlbm5hcnQgTyBib3JnbWFuIEEgZ21haWwgTyBjb20pDQo7OyBD cmVhdGVkOiAyMDA5LTA4LTEyIFdlZA0KOzsgVmVyc2lvbjogMC4yDQo7OyBMYXN0LVVwZGF0ZWQ6 IDIwMDktMDgtMTMgVGh1DQo7Ow0KOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KOzsNCjs7OyBDb2RlOg0KDQoNCjs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KOzs7IFdp bmRvdyBjcmVhdGlvbiBldGMNCg0KOzsoZGVmdW4gd2EtbWFrZS13aW5kb3cgKHdpZHRoIHd1bWlu IHd1bWF4IGhlaWdodCBobWluIGhtYXgpDQooZGVmdW4gd2EtbWFrZS13aW5kb3cgKG5hbWUgd2lk dGggd3VtaW4gd3VtYXgpDQogIChsaXN0IChsaXN0ICduYW1lIG5hbWUpICAgICAgICAgICAgOzsg RWFzaWVyIGNvbW11bmljYXRpb24gLi4uDQogICAgICAgIChsaXN0ICdjaGlsZCBuaWwpICAgICAg ICAgICAgOzsgQ2hpbGQgd2luZG93cw0KICAgICAgICAobGlzdCAndXNyLXNpemUgd3VtaW4gd3Vt YXgpIDs7IFJlc3RyaWN0aW9ucw0KICAgICAgICAobGlzdCAncmVxLXNpemUgbmlsIG5pbCkgICAg IDs7IFNsb3QgZm9yIGNvbXB1dGF0ZWQgcmVxdWlyZW1lbnRzLCB3dW1pbiB3dW1heA0KICAgICAg ICAobGlzdCAnc2V0LXNpemUgbmlsIHdpZHRoKSAgICAgICA7OyBTbG90IGZvciBzZXR0aW5nIG5l dyBzaXplDQogICAgICAgICkpDQoNCjs7IEZpeC1tZTogTWFrZSBkZWZtYWNybyB0byBtYWtlIHRo b3NlIGdldHRlcnMgc2V0dGVycy4uLiAtIGluY2x1ZGluZw0KOzsgY2hlY2tzLi4uDQoNCihkZWZ1 biB3YS1uYW1lICAod2luZG93KSAobnRoIDEgKG50aCAwIHdpbmRvdykpKSA7OyAnbmFtZQ0KKGRl ZnVuIHdhLWNoaWxkICh3aW5kb3cpIChudGggMSAobnRoIDEgd2luZG93KSkpIDs7ICdjaGlsZA0K KGRlZnVuIHdhLXd1bWluICh3aW5kb3cpIChudGggMSAobnRoIDIgd2luZG93KSkpIDs7ICd1c3It c2l6ZQ0KKGRlZnVuIHdhLXd1bWF4ICh3aW5kb3cpIChudGggMiAobnRoIDIgd2luZG93KSkpIDs7 ICd1c3Itc2l6ZQ0KKGRlZnVuIHdhLXdybWluICh3aW5kb3cpIChudGggMSAobnRoIDMgd2luZG93 KSkpIDs7ICdyZXEtc2l6ZQ0KKGRlZnVuIHdhLXdybWF4ICh3aW5kb3cpIChudGggMiAobnRoIDMg d2luZG93KSkpIDs7ICdyZXEtc2l6ZQ0KKGRlZnVuIHdhLXdzZXQgICh3aW5kb3cpIChudGggMiAo bnRoIDQgd2luZG93KSkpIDs7ICdzZXQtc2l6ZQ0KDQooZGVmdW4gd2Etc2V0LW5hbWUgICAod2lu ZG93IG5hbWUpICAoc2V0Y2FyIChudGhjZHIgMSAobnRoIDAgd2luZG93KSkgbmFtZSkpICA7OyAn bmFtZQ0KKGRlZnVuIHdhLXNldC1jaGlsZCAgKHdpbmRvdyBjaGlsZCkgKHNldGNhciAobnRoY2Ry IDEgKG50aCAxIHdpbmRvdykpIGNoaWxkKSkgOzsgJ2NoaWxkDQooZGVmdW4gd2Etc2V0LXd1bWlu ICAod2luZG93IHd1bWluKSAoc2V0Y2FyIChudGhjZHIgMSAobnRoIDIgd2luZG93KSkgd3VtaW4p KSA7OyAndXNyLXNpemUNCihkZWZ1biB3YS1zZXQtd3VtYXggICh3aW5kb3cgd3VtYXgpIChzZXRj YXIgKG50aGNkciAyIChudGggMiB3aW5kb3cpKSB3dW1heCkpIDs7ICd1c3Itc2l6ZQ0KKGRlZnVu IHdhLXNldC13cm1pbiAgKHdpbmRvdyB3dW1pbikgKHNldGNhciAobnRoY2RyIDEgKG50aCAzIHdp bmRvdykpIHd1bWluKSkgOzsgJ3JlcS1zaXplDQooZGVmdW4gd2Etc2V0LXdybWF4ICAod2luZG93 IHd1bWF4KSAoc2V0Y2FyIChudGhjZHIgMiAobnRoIDMgd2luZG93KSkgd3VtYXgpKSA7OyAncmVx LXNpemUNCihkZWZ1biB3YS1zZXQtd3NldCAgICh3aW5kb3cgc2l6ZSkgIChzZXRjYXIgKG50aGNk ciAyIChudGggNCB3aW5kb3cpKSBzaXplKSkgIDs7ICdzZXQtc2l6ZQ0KDQooZGVmdW4gd2Etc2V0 LWZsYWcgICAod2luZG93IGZsYWcpICAoc2V0Y2FyIChudGhjZHIgMSAobnRoIDQgd2luZG93KSkg ZmxhZykpICA7OyAnc2V0LXNpemUNCg0KKGRlZnZhciB3YS1mYWlsZWQgbmlsKQ0KDQooZGVmdW4g d2EtZXJyb3IgKGZvcm1hdC1zdHJpbmcgJnJlc3QgYXJncykNCiAgKHNldHEgd2EtZmFpbGVkIHQp DQogIChhcHBseSAnbWVzc2FnZSAocHJvcGVydGl6ZSBmb3JtYXQtc3RyaW5nICdmYWNlICdzZWNv bmRhcnktc2VsZWN0aW9uKQ0KICAgICAgICAgYXJncykNCiAgKHRocm93ICd3YS1lcnJvciBuaWwp KQ0KDQooZGVmdW4gd2Etd2luLWVycm9yICh3aW4gZm9ybWF0LXN0cmluZyAmcmVzdCBhcmdzKQ0K ICAod2Etc2V0LWZsYWcgd2luIChjb25jYXQgIkZBSUxFRDogIiAoYXBwbHkgJ2Zvcm1hdCBmb3Jt YXQtc3RyaW5nIGFyZ3MpKSkNCiAgKGFwcGx5ICd3YS1lcnJvciBmb3JtYXQtc3RyaW5nIGFyZ3Mp KQ0KDQooZGVmdW4gd2Etc2V0LWNoaWxkLXdpbmRvd3MgKHBhcmVudCB2ZXJ0aWNhbCAmcmVzdCBz aXplcykNCiAgKHVubGVzcyB3YS1mYWlsZWQgKGFzc2VydCAoPCAxIChsZW5ndGggc2l6ZXMpKSB0 KSkNCiAgKGxldCAoY2hpbGRyZW4NCiAgICAgICAgKG51bSAwKSkNCiAgICAoc2V0cSBjaGlsZHJl biAobWFwY2FyIChsYW1iZGEgKHNpemUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz ZXRxIG51bSAoMSsgbnVtKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHZlcnRp Y2FsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2EtbWFrZS13aW5kb3cgKGZv cm1hdCAiJXMtJWQiICh3YS1uYW1lIHBhcmVudCkgbnVtKQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChudGggMCBzaXplKQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudGggMSBzaXplKSkpKQ0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZXMpKQ0KICAgICh3YS1zZXQtY2hpbGQgcGFyZW50IGNoaWxk cmVuKQ0KICAgIHBhcmVudCkpDQoNCihkZWZ1biB3YS1jaGVjay1maXQgKHdpbikNCiAgKGxldCAo KHd1bWluICh3YS13dW1pbiB3aW4pKQ0KICAgICAgICAod3VtYXggKHdhLXd1bWF4IHdpbikpDQog ICAgICAgICh3cm1pbiAod2Etd3JtaW4gd2luKSkNCiAgICAgICAgKHdybWF4ICh3YS13cm1heCB3 aW4pKQ0KICAgICAgICAod3NldCAgKHdhLXdzZXQgd2luKSkpDQogICAgKHdhLXNldC1mbGFnIHdp biAnRkFJTEVEKQ0KICAgIDs7IFRvcCB3aW5kb3cNCiAgICAod2hlbiAoYW5kIHdzZXQgd3JtaW4p DQogICAgICAodW5sZXNzICg8PSB3cm1pbiB3c2V0KQ0KICAgICAgICAod2Etd2luLWVycm9yIHdp biAiV2luZG93ICVzIHNldCBzaXplIHRvbyBzbWFsbD0lZCwgbWluPSVkIiAod2EtbmFtZSB3aW4p IHdzZXQgd3JtaW4pKSkNCiAgICAod2hlbiAoYW5kIHdzZXQgd3JtYXgpDQogICAgICAodW5sZXNz ICg+PSB3cm1heCB3c2V0KQ0KICAgICAgICAod2Etd2luLWVycm9yIHdpbiAiV2luZG93ICVzIHNl dCBzaXplIHRvbyBsYXJnZT0lZCwgbWF4PSVzIiAod2EtbmFtZSB3aW4pIHdzZXQgd3JtYXgpKSkN CiAgICA7OyBBbGwNCiAgICAod2hlbiAoYW5kIHd1bWF4IHdybWluKQ0KICAgICAgKHVubGVzcyAo PD0gd3JtaW4gd3VtYXgpDQogICAgICAgICh3YS13aW4tZXJyb3Igd2luICJXaW5kb3cgJXMgaXMg dG9vIHNtYWxsLCBtaW49JWQsIGJ1dCBjYW4gYmUgbWF4PSVkIiAod2EtbmFtZSB3aW4pIHdybWlu IHd1bWF4KSkpDQogICAgKHdoZW4gKGFuZCB3cm1heCB3dW1pbikNCiAgICAgICh1bmxlc3MgKD49 IHdybWF4IHd1bWluKQ0KICAgICAgICAod2Etd2luLWVycm9yIHdpbiAiV2luZG93ICVzJ3MgY2hp bGRzIGFyZSB0b28gc21hbGwsIG1heD0lZCwgYnV0IGNhbiBiZSBtaW49JWQiICh3YS1uYW1lIHdp bikgd3JtYXggd3VtaW4pKSkNCiAgICAod2Etc2V0LWZsYWcgd2luICdPSykpKQ0KDQoNCjs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KOzs7IENvbXB1 dGF0aW9uIG9mIHNpemVzDQoNCihkZWZ1biB3YS1jbGVhci1jb21wdXRlZCAod2luKQ0KICAod2Et c2V0LXdybWluIHdpbiBuaWwpDQogICh3YS1zZXQtd3JtYXggd2luIG5pbCkNCiAgKHdhLXNldC13 c2V0ICB3aW4gbmlsKQ0KICAoZG9saXN0IChjICh3YS1jaGlsZCB3aW4pKQ0KICAgICh3YS1jbGVh ci1jb21wdXRlZCBjKSkpDQoNCihkZWZ1biB3YS1pbml0LWZhaWwtZmxhZyAod2luKQ0KICAod2Et c2V0LWZsYWcgd2luICdJTklUKQ0KICAoZG9saXN0IChjICh3YS1jaGlsZCB3aW4pKQ0KICAgICh3 YS1pbml0LWZhaWwtZmxhZyBjKSkpDQoNCihkZWZ1biB3YS1jb21wdXRlLXJlcXVpcmVkICh3aW4p DQogICJXYWxrIHVwIGNvbGxlY3RpbmcgbmVlZGVkIHNpemVzLiINCiAgKGxldCAoKGNoaWxkcyAo d2EtY2hpbGQgd2luKSkNCiAgICAgICAgKHd1bWluICh3YS13dW1pbiB3aW4pKQ0KICAgICAgICAo d3VtYXggKHdhLXd1bWF4IHdpbikpDQogICAgICAgIChjbWluIDApDQogICAgICAgIChjbWF4IG5p bCkpDQogICAgKHdoZW4gY2hpbGRzDQogICAgICA7OyBDbGVhciBjaGlsZHMgc2V0IHNpemVzLCB3 ZSBkbyBub3Qga25vdyB0aGVtIGhlcmUNCiAgICAgIChkb2xpc3QgKGMgY2hpbGRzKSAod2Etc2V0 LXdzZXQgYyBuaWwpKQ0KICAgICAgKGRvbGlzdCAoYyBjaGlsZHMpDQogICAgICAgIChsZXQqICgo cmVzICh3YS1jb21wdXRlLXJlcXVpcmVkIGMpKQ0KICAgICAgICAgICAgICAgKHJlcy1taW4gKG50 aCAwIHJlcykpDQogICAgICAgICAgICAgICAocmVzLW1heCAobnRoIDEgcmVzKSkpDQogICAgICAg ICAgOzsgSnVzdCBzdW0gdGhlIE1JTg0KICAgICAgICAgIChzZXRxIGNtaW4gKCsgY21pbiByZXMt bWluKSkNCiAgICAgICAgICAoaWYgcmVzLW1heA0KICAgICAgICAgICAgICA7OyAuLi4gb2ssIGxl dCB1cyBzdW0gTUFYIHRvIHNlZSBob3cgYmlnIHdlIGNhbiBiZSAuLi4NCiAgICAgICAgICAgICAg KGlmIChudW1iZXJwIGNtYXgpDQogICAgICAgICAgICAgICAgICAoc2V0cSBjbWF4ICgrIGNtYXgg cmVzLW1heCkpDQogICAgICAgICAgICAgICAgKHNldHEgY21heCByZXMtbWF4KSkNCiAgICAgICAg ICAgIDs7IEh1cnJheSwgYXQgbGVhc3Qgb25lIGNoaWxkIGNhbiBncm93IQ0KICAgICAgICAgICAg KHNldHEgY21heCBuaWwpKSkpKQ0KICAgICh3aGVuIHd1bWluIChzZXRxIGNtaW4gKG1heCB3dW1p biAob3IgY21pbiB3dW1pbikpKSkNCiAgICAod2hlbiB3dW1heCAoc2V0cSBjbWF4IChtaW4gd3Vt YXggKG9yIGNtYXggd3VtYXgpKSkpDQogICAgOzsgU2FuaXR5DQogICAgKHdoZW4gKD0gY21pbiAw KSAoc2V0cSBjbWluIDEpKQ0KICAgICh1bmxlc3Mgd2EtZmFpbGVkIChhc3NlcnQgKG9yIChub3Qg Y21pbikgKDw9IDEgY21pbikpIHQpKQ0KICAgICh1bmxlc3Mgd2EtZmFpbGVkIChhc3NlcnQgKG9y IChub3QgY21heCkgKDw9IDEgY21heCkpIHQpKQ0KICAgICh3YS1zZXQtd3JtaW4gd2luIGNtaW4p DQogICAgKHdhLXNldC13cm1heCB3aW4gY21heCkNCiAgICAod2EtY2hlY2stZml0IHdpbikNCiAg ICAobGlzdCAod2Etd3JtaW4gd2luKQ0KICAgICAgICAgICh3YS13cm1heCB3aW4pKSkpDQoNCihk ZWZ1biB3YS1jb21wdXRlLXJlc3VsdGluZyAod2luIHN0cmF0ZWd5KQ0KICAiV2FsayBkb3duIGNv bXB1dGUgcmVzdWx0aW5nIHNpemVzIGFuZCBhcHBseSB0aGVtLiINCiAgOzsgTk9URTogVGhpcyBp cyB0aGUgcGFydCB0aGF0IGNhbiB0aWUgaW50byB0aGUgQyBmdW5jdGlvbnMuIFRoaXMNCiAgOzsg Y29tcHV0ZXMgdGhlIHNpemVzIHRvIGFwcGx5IGxldmVsIGJ5IGxldmVsIHdoZW4gZ29pbmcgZG93 bi4NCiAgOzsNCiAgOzsgVG8gYXBwbHkgaXQgdG8gdGhlIEMgbGV2ZWwgSSBzdWdnZXN0IGltcGxl bWVudGluZyBhIGZ1bmN0aW9uIGluIEMNCiAgOzsgdGhhdCBhY2NlcHQgYSBsaXN0IG9mIHNpemVz LCBvbmUgc2l6ZSBwZXIgd2luZG93IG9uIHRoYXQNCiAgOzsgbGV2ZWwuIFdhbGsgdGhlIEMgc3Ry dWN0dXJlcyBpbiBwYXJhbGxlbGwgd2l0aCB0aGlzIHdoZW4gYXBwbHlpbmcNCiAgOzsgdGhlIHNp emVzLiAoSSBkbyBub3QgdGhpbmsgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgdGhpcyBjb2RlIGlu DQogIDs7IEMuKQ0KICAod2hlbiAod2EtY2hpbGQgd2luKQ0KICAgIChsZXQgKChjbWluICAgKHdh LXdybWluICB3aW4pKQ0KICAgICAgICAgIChjbWF4ICAgKHdhLXdybWF4ICB3aW4pKQ0KICAgICAg ICAgICh3aWR0aCAgKHdhLXdzZXQgd2luKSkNCiAgICAgICAgICAoY2hpbGRzICh3YS1jaGlsZCB3 aW4pKSkNCiAgICAgIChjYXNlIHN0cmF0ZWd5DQogICAgICAgICgnZXEtc2l6ZXMNCiAgICAgICAg IChsZXQgKChyZXN0LXdpZHRoIHdpZHRoKQ0KICAgICAgICAgICAgICAgKGdvYWwgKC8gd2lkdGgg KGxlbmd0aCBjaGlsZHMpKSkNCiAgICAgICAgICAgICAgIChyZXN0LWNoaWxkcyAoY29weS1zZXF1 ZW5jZSBjaGlsZHMpKSkNCiAgICAgICAgICAgOzsgQ2xlYXIgY2hpbGRzDQogICAgICAgICAgIChk b2xpc3QgKGMgY2hpbGRzKSAod2Etc2V0LXdzZXQgYyBuaWwpKQ0KICAgICAgICAgICA7OyBDaGVj ayBjaGlsZCBtaW4gcmVxdWlyZW1lbnRzDQogICAgICAgICAgIChkb2xpc3QgKGMgKGNvcHktc2Vx dWVuY2UgcmVzdC1jaGlsZHMpKQ0KICAgICAgICAgICAgIChsZXQgKCh3cm1pbiAod2Etd3JtaW4g YykpKQ0KICAgICAgICAgICAgICAgKHdoZW4gKGFuZCB3cm1pbiAoPD0gZ29hbCB3cm1pbikpDQog ICAgICAgICAgICAgICAgICh3YS1zZXQtd3NldCBjICh3YS13cm1pbiBjKSkNCiAgICAgICAgICAg ICAgICAgKHNldHEgcmVzdC1jaGlsZHMgKGRlbGV0ZSBjIHJlc3QtY2hpbGRzKSkNCiAgICAgICAg ICAgICAgICAgKHNldHEgcmVzdC13aWR0aCAoLSByZXN0LXdpZHRoICh3YS13cm1pbiBjKSkpKSkp DQogICAgICAgICAgIChzZXRxIGdvYWwgKC8gcmVzdC13aWR0aCAobGVuZ3RoIGNoaWxkcykpKQ0K ICAgICAgICAgICA7OyBDaGVjayBjaGlsZCBtYXggcmVxdWlyZW1lbnRzDQogICAgICAgICAgIChk b2xpc3QgKGMgKGNvcHktc2VxdWVuY2UgcmVzdC1jaGlsZHMpKQ0KICAgICAgICAgICAgIChsZXQg KCh3cm1heCAod2Etd3JtYXggYykpKQ0KICAgICAgICAgICAgICAgKHdoZW4gKGFuZCB3cm1heCAo Pj0gZ29hbCB3cm1heCkpDQogICAgICAgICAgICAgICAgICh3YS1zZXQtd3NldCBjICh3YS13cm1h eCBjKSkNCiAgICAgICAgICAgICAgICAgKHNldHEgcmVzdC1jaGlsZHMgKGRlbGV0ZSBjIHJlc3Qt Y2hpbGRzKSkNCiAgICAgICAgICAgICAgICAgKHNldHEgcmVzdC13aWR0aCAoLSByZXN0LXdpZHRo ICh3YS13cm1heCBjKSkpKSkpDQogICAgICAgICAgIChzZXRxIGdvYWwgKC8gcmVzdC13aWR0aCAo bGVuZ3RoIGNoaWxkcykpKQ0KICAgICAgICAgICA7OyBEaXN0cmlidXRlIHRoZSByZXN0LCB0YWtp bmcgY2FyZSBvZiByb3VuZGluZ3MNCiAgICAgICAgICAgKHdhLXNldC13c2V0IChjYXIgcmVzdC1j aGlsZHMpDQogICAgICAgICAgICAgICAgICAgICAgICAoLSByZXN0LXdpZHRoICgqIGdvYWwgKDEt IChsZW5ndGggcmVzdC1jaGlsZHMpKSkpKQ0KICAgICAgICAgICAoZG9saXN0IChjIChjZHIgcmVz dC1jaGlsZHMpKQ0KICAgICAgICAgICAgICh3YS1zZXQtd3NldCBjIGdvYWwpKSkpDQogICAgICAg ICh0ICh3YS1lcnJvciAiVW5rbm93biBzdHJhdGVneTogJXMiIHN0cmF0ZWd5KSkpDQogICAgICA7 OyBDaGVjaw0KICAgICAgKGxldCAoKHcgMCkpDQogICAgICAgIChkb2xpc3QgKGMgY2hpbGRzKQ0K ICAgICAgICAgIChsZXQgKCh3c2V0ICh3YS13c2V0IGMpKSkNCiAgICAgICAgICAgICh1bmxlc3Mg d2EtZmFpbGVkIChhc3NlcnQgKDw9IDAgd3NldCkgdCkpDQogICAgICAgICAgICAoc2V0cSB3ICgr IHcgd3NldCkpKSkNCiAgICAgICAgKHVubGVzcyAoPSB3ICh3YS13c2V0IHdpbikpDQogICAgICAg ICAgKHdhLWVycm9yICJCYWQgc2V0IHNpemVzIGNoaWxkIHN1bSB3PSVkLCB3aW4gd2lkdGg9JWQi IHcgKHdhLXdzZXQgd2luKSkpKQ0KICAgICAgOzsgQ2FsbCB0aGUgc3VnZ2VzdGVkIEMgbGV2ZWwg ZnVuY3Rpb24gaGVyZSBmb3IgZXhhbXBsZS4NCiAgICAgIDs7IC4uLi4uLi4NCiAgICAgIDs7IFdh bGsgZG93bg0KICAgICAgKGRvbGlzdCAoYyBjaGlsZHMpDQogICAgICAgICh3YS1jb21wdXRlLXJl c3VsdGluZyBjIHN0cmF0ZWd5KSkpKSkNCg0KDQo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCjs7OyBUZXN0aW5nIHBhcnQNCg0KKGRlZnZhciB3YS1yb290 LXdpbmRvdyBuaWwpDQoNCihkZWZ1biB3YS1hZGQtdGVzdC1jaGlsZHMgKCkNCiAgKHdhLXNldC1j aGlsZC13aW5kb3dzIHdhLXJvb3Qtd2luZG93IHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAn KG5pbCAxMikNCiAgICAgICAgICAgICAgICAgICAgICAgICAnKDE0IG5pbCkNCiAgICAgICAgICAg ICAgICAgICAgICAgICAnKG5pbCBuaWwpDQogICAgICAgICAgICAgICAgICAgICAgICAgJygzIG5p bCkNCiAgICAgICAgICAgICAgICAgICAgICAgICApDQogICh3YS1zZXQtY2hpbGQtd2luZG93cyAo Y2FyICh3YS1jaGlsZCB3YS1yb290LXdpbmRvdykpIHQNCiAgICAgICAgICAgICAgICAgICAgICAg ICcobmlsIG5pbCkNCiAgICAgICAgICAgICAgICAgICAgICAgICcoOCAxNSkpDQogICkNCg0KOzsg KHdhLWNoaWxkIHdhLXJvb3Qtd2luZG93KQ0KOzsgKHdhLXdzZXQgd2Etcm9vdC13aW5kb3cpDQo7 OyAod2Etd3VtaW4gd2Etcm9vdC13aW5kb3cpDQo7OyAod2Etd3VtYXggd2Etcm9vdC13aW5kb3cp DQo7OyAod2EtY2xlYXItY29tcHV0ZWQgd2Etcm9vdC13aW5kb3cpDQoNCjs7IFNldHVwDQooc2V0 cSB3YS1yb290LXdpbmRvdyAod2EtbWFrZS13aW5kb3cgIlJvb3QiIDgwIG5pbCBuaWwpKQ0KKHNl dHEgd2Etcm9vdC13aW5kb3cgKHdhLW1ha2Utd2luZG93ICJSb290IiA4MCBuaWwgOCkpDQooc2V0 cSB3YS1yb290LXdpbmRvdyAod2EtbWFrZS13aW5kb3cgIlJvb3QiIDgwIG5pbCA2KSkNCihzZXRx IHdhLXJvb3Qtd2luZG93ICh3YS1tYWtlLXdpbmRvdyAiUm9vdCIgODAgNSBuaWwpKQ0KKHNldHEg d2Etcm9vdC13aW5kb3cgKHdhLW1ha2Utd2luZG93ICJSb290IiA0MyAxNSBuaWwpKQ0KKHNldHEg d2Etcm9vdC13aW5kb3cgKHdhLW1ha2Utd2luZG93ICJSb290IiAxOCAxNSBuaWwpKQ0KKHNldHEg d2Etcm9vdC13aW5kb3cgKHdhLW1ha2Utd2luZG93ICJSb290IiAxNSAxNSBuaWwpKQ0KDQood2Et YWRkLXRlc3QtY2hpbGRzKQ0KKHdhLWluaXQtZmFpbC1mbGFnICAgICB3YS1yb290LXdpbmRvdykN CihzZXRxIHdhLWZhaWxlZCBuaWwpDQoNCjs7IFNob3cgc3RhdGUgbm93IGluIGNhc2Ugd2Ugd2Fu dCB0byBzdG9wIG9uIGVycm9ycw0KKGRlc2NyaWJlLXZhcmlhYmxlICAgICd3YS1yb290LXdpbmRv dykNCg0KOzsgQ29tcHV0ZSByZXF1aXJlZCwgbWF5IGZhaWwuDQooY2F0Y2ggJ3dhLWVycm9yDQog ICh3YS1jb21wdXRlLXJlcXVpcmVkIHdhLXJvb3Qtd2luZG93KQ0KDQogIDs7IE5vdyBpdCBzaG91 bGQgbm90IGZhaWwNCiAgKHdhLWNvbXB1dGUtcmVzdWx0aW5nICB3YS1yb290LXdpbmRvdyAnZXEt c2l6ZXMpKQ0KDQo7OyBTaG93IGZpbmFsIHN0YXRlDQooZGVzY3JpYmUtdmFyaWFibGUgICAgJ3dh LXJvb3Qtd2luZG93KQ0KKHdpdGgtY3VycmVudC1idWZmZXIgKGhlbHAtYnVmZmVyKQ0KICAoaGkt bG9jay1mYWNlLWJ1ZmZlciAiXCJGQUlMRUQuKlwiIiAnaGktcmVkLWIpDQogIChoaS1sb2NrLWZh Y2UtYnVmZmVyICJPSyIgJ2hpLWdyZWVuKQ0KICAoaGktbG9jay1mYWNlLWJ1ZmZlciAiSU5JVCIg J2hpLWJsdWUpKQ0KDQoNCjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCjs7OyB3aW4tYWxnLmVsIGVuZHMgaGVyZQ0K --001636ed663734252404710fc1c9--