From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.emacs.gnus.general/87708 Path: news.gmane.org!.POSTED!not-for-mail From: Eric Abrahamsen Newsgroups: gmane.emacs.gnus.general,gmane.emacs.devel Subject: Gnus work Date: Wed, 04 Oct 2017 11:32:03 -0700 Message-ID: <87vajudasc.fsf@ericabrahamsen.net> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: blaine.gmane.org 1507142039 23285 195.159.176.226 (4 Oct 2017 18:33:59 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 4 Oct 2017 18:33:59 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.60 (gnu/linux) Cc: emacs-devel@gnu.org To: ding@gnus.org Original-X-From: ding-owner+m35922@lists.math.uh.edu Wed Oct 04 20:33:55 2017 Return-path: Envelope-to: ding-account@gmane.org Original-Received: from mxfilter-048035.atla03.us.yomura.com ([107.189.48.35]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dzoUN-0004ft-WA for ding-account@gmane.org; Wed, 04 Oct 2017 20:33:48 +0200 X-Yomura-MXScrub: 1.0 Original-Received: from lists1.math.uh.edu (unknown [129.7.128.208]) by mxfilter-048035.atla03.us.yomura.com (Halon) with ESMTPS id 8644822f-a932-11e7-86ce-b499baabecb2; Wed, 04 Oct 2017 18:33:33 +0000 (UTC) Original-Received: from localhost ([127.0.0.1] helo=lists.math.uh.edu) by lists1.math.uh.edu with smtp (Exim 4.87) (envelope-from ) id 1dzoT6-0006mJ-7Y; Wed, 04 Oct 2017 13:32:28 -0500 Original-Received: from mx2.math.uh.edu ([129.7.128.33]) by lists1.math.uh.edu with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1dzoT3-0006lf-8s for ding@lists.math.uh.edu; Wed, 04 Oct 2017 13:32:25 -0500 Original-Received: from quimby.gnus.org ([80.91.231.51]) by mx2.math.uh.edu with esmtps (TLSv1.2:DHE-RSA-AES128-SHA:128) (Exim 4.87) (envelope-from ) id 1dzoSv-0004G1-84 for ding@lists.math.uh.edu; Wed, 04 Oct 2017 13:32:24 -0500 Original-Received: from [195.159.176.226] (helo=blaine.gmane.org) by quimby.gnus.org with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1dzoSt-0001wn-OH for ding@gnus.org; Wed, 04 Oct 2017 20:32:15 +0200 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1dzoSk-0001nI-6s for ding@gnus.org; Wed, 04 Oct 2017 20:32:06 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Followup-To: gmane.emacs.gnus.general Original-Lines: 240 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:FmH+1h05f/ciXuAHY1Mw+xkepkU= List-ID: Precedence: bulk Xref: news.gmane.org gmane.emacs.gnus.general:87708 gmane.emacs.devel:219084 Archived-At: --=-=-= Content-Type: text/plain Hi all, I've been very slowly reading the Gnus code base, and looking at how to go about doing some refactoring, cleanups, and a few new features. I wrote a roadmap which I'm attaching here -- it's not so much an actual roadmap as a collection of possible changes, as a starting point for argument. It's also not meant to be a mini bug tracker in Org -- my idea was that if any of the ideas looked like they were going to be acceptable, the todo items would turn into real bug reports on debbugs. In general, I've been working from a few principles: 1. Replace Gnus' homemade mechanisms with equivalent mechanisms that have since appeared in core (in many cases Gnus had them first). 2. Add docstrings and comments to minimize bug-hunter bewilderment. 3. Look at unpicking functions so that there's a clearer demarcation between code that does server logic (marks and whatnot) and code that does UX/presentation stuff. 4. #3 would ideally allow more of the code to be testable. 5. Reduce number of dynamic variables, to cut back on "spooky action at a distance". To be honest I don't even know where to start here. The roadmap is also not meant to address all of Gnus -- for the most part I'm sticking to groups, servers, and marks. I don't feel comfortable or competent to mess with other areas like MIME/threading/washing/network/definitely not security. Some of those areas already have "shepherds", anyway. I'd like to make this document publicly accessible and editable (a branch? Emacswiki?), and see if anyone has anything to contribute, or otherwise wants to jump in. I think there's a lot of love for Gnus out there, and my hope is that the roadmap might spur people to pop up and share their ideas, and maybe offer to pitch in. Where could I put it? Eric PS: No, I don't have any code yet. The one patch I do have touches nothing but docstrings, code comments, and "Commentary" sections -- stuff I've added over the course of reading the code. --=-=-= Content-Type: application/vnd.lotus-organizer Content-Disposition: attachment; filename=roadmap.org Content-Transfer-Encoding: base64 IyBQb3RlbnRpYWwgZml4dXBzIGZvciBHbnVzLiBUaGUgInVzZXIiIHRhZyBpbmRpY2F0ZXMgYQoj IG5vbi1iYWNrd2FyZHMtY29tcGF0aWJsZSBjaGFuZ2UgdGhhdCB0aGUgdXNlciB3b3VsZCBoYXZl IHRvIGJlIG1hZGUKIyBhd2FyZSBvZi4KKiBFYXN5IGZpeGVzIGFuZCB1cGRhdGVzCioqIFRPRE8g T2Jzb2xldGUgfmdudXMtZGVmYXVsdC1ubnRwLXNlcnZlcn4KQWxvbmcgd2l0aCB+Z251cy1ubnRw LXNlcnZlcn4sIGFuZCBqdXN0IHJlbW92ZSB0aGF0IHdob2xlICJzZWxlY3QgYW4Kbm50cCBzZXJ2 ZXIiIG1lY2hhbmlzbSBjb21wbGV0ZWx5LgoqKiBUT0RPIFJlcGxhY2UgfmdudXMtY29weS1zZXF1 ZW5jZX4gd2l0aCB+Y29weS10cmVlfgpJdCBkb2VzIHRoZSBzYW1lIHRoaW5nLgoqKiBUT0RPIFJl cGxhY2UgfmdudXMtbGFzdC1lbGVtZW50fiB3aXRoIH4oY2FyIChsYXN0IExJU1QpKX4KVXNpbmcg fmxhc3R+IGlzIG1vcmUgZWZmaWNpZW50LgoqKiBUT0RPIFJlbW92ZSB+Z251cy1yZXBsYWNlLWlu LXN0cmluZ34KTG9va3MgbGlrZSB0aGlzIGlzIG9ubHkgaGVyZSBmb3Igb3RoZXIgRW1hY3Nlbi4K KiogVE9ETyBJcyB+Z251cy1ldmFsLWluLWJ1ZmZlci13aW5kb3d+IHJlZHVuZGFudD8KSXMgaXQg dGhlIHNhbWUgYXMgfnNhdmUtd2luZG93LWV4Y3Vyc2lvbn4gcGx1cyB+d2l0aC1jdXJyZW50LWJ1 ZmZlcn4/CioqIFRPRE8gUmVwbGFjZSB+Z251cy1zdHJpbmc+fiB3aXRoIH5zdHJpbmc+fgoqKiBU T0RPIFJlcGxhY2UgfmdudXMtc3RyaW5nPH4gd2l0aCB+c3RyaW5nPH4KQ2hlY2sgYmVoYXZpb3Ig b2YgfmNhc2UtZm9sZC1zZWFyY2h+LgoqKiBUT0RPIFJlbW92ZSB+Z251cy15LW9yLW4tcH4gYW5k IH5nbnVzLXllcy1vci1uby1wfgpXaHkgdGhlIGNhbGwgdG8gfm1lc3NhZ2V+PwoqKiBUT0RPIFJl dmlzaXQgfmdudXMtbWFrZS1oYXNodGFibGV+IGFuZCB+Z251cy1jcmVhdGUtaGFzaC1zaXplfgo6 UFJPUEVSVElFUzoKOklEOiAgICAgICBjNjM2OTU3ZC0zZmU1LTRlMjItODNmNi1iNGUyYmFkYTg0 NjYKOkVORDoKTm90IHN1cmUgaWYgdGhlc2UgYXJlIG9ic29sZXRlLCBidXQgdGhleSByZWZlciB0 byBTUEFSQyBtYWNoaW5lcywgc28KaXQncyB3b3J0aCByZXZpc2l0aW5nLiBJZiB3ZSBbW2lkOmM2 MzY5NTdkLTNmZTUtNGUyMi04M2Y2LWI0ZTJiYWRhODQ2Nl1bdXNlIHJlYWwgaGFzaHRhYmxlc11d LCB0aGlzIHdvbid0IGJlIGFuCmlzc3VlLgoqKiBUT0RPIFVzZSBkb2xpc3Qgd2hlcmUgcG9zc2li bGUKVGhlcmUncyBhIHdob2xlIGxvdCBvZiBjb2RlIHRoYXQgdXNlcyB+KHdoaWxlIChzZXRxIHRo aW5nIChjYXIKbGlzdCkpLi4uKX4gYW5kIHRoZSBsaWtlLCBhbmQgaXQgbWFrZXMgYWxyZWFkeS1j b252b2x1dGVkIGZ1bmN0aW9ucwp0aGF0IG11Y2ggbW9yZSBkaWZmaWN1bHQgdG8gcGFyc2UuIFRo ZXJlIGFyZSBjbGVhbmVyIGNvbnZlbnRpb25zIHRoYXQKY291bGQgYmUgdXNlZCBub3cuCioqIFRP RE8gVXNlIH5wcm9jZXNzLWxpdmUtcH4KSW5zdGVhZCBvZiB+KG1lbXEgKHByb2Nlc3Mtc3RhdHVz IHByb2Nlc3MpICcob3BlbiBydW4pKX4uCiogTWVkaXVtLWxldmVsIHJlZmFjdG9yaW5nCioqIFRP RE8gQ29tYmluZSBnbnVzLWV4cGVydC11c2VyIGFuZCBnbnVzLW5vdmljZS11c2VyICAgICAgICAg ICAgICAgICA6dXNlcjoKV2h5IHdvdWxkIHdlIG5lZWQgYm90aD8gVGhlIGRvY3N0cmluZ3MgbWFr ZSB0aGVtIHNvdW5kIHNpbWlsYXIuIElmCiJub3ZpY2UiIGdvdmVybnMgdmVyYm9zaXR5IC9hbmQv IGNvbmZpcm1hdGlvbnMsIGFuZCAiZXhwZXJ0IiBqdXN0CmdvdmVybnMgY29uZmlybWF0aW9ucywg dGhlbiB3ZSBjb3VsZCBtb3ZlIGFsbCB2ZXJib3NpdHkgYmVoYXZpb3IgdW5kZXIKfmdudXMtdmVy Ym9zZX4gYW5kIG9ubHkga2VlcCBvbmUgImV4cGVydCIgc2V0dGluZyB0aGF0IG9ubHkgZ292ZXJu ZWQKY29uZmlybWF0aW9ucy4gSXQgYWxzbyBzZWVtcyBsaWtlIH5nbnVzLWludGVyYWN0aXZlLWNh dGNodXB+IHNob3VsZCBiZQpwYXJ0IG9mIHRoZSAiZXhwZXJ0IiBzZXR0aW5nLCB0aG91Z2ggcGVy aGFwcyB+Z251cy1pbnRlcmFjdGl2ZS1leGl0fgpzaG91bGQgcmVtYWluIGl0cyBvd24gdGhpbmcu CioqIFRPRE8gQ29uc29saWRhdGUgc2VydmVyIGxpc3RzClZhcnMgdGhhdCBsaXN0IHRoZSBjdXJy ZW50bHktZGVmaW5lZCBzZXJ2ZXJzOgoKMS4gfmdudXMtc2VydmVyLWFsaXN0fjogT25seSBjb250 YWlucyB0aGUgYXJjaGl2ZSBtZXRob2QgLS0gYnVnPwoyLiB+Z251cy1vcGVuZWQtc2VydmVyc346 IEhvbGRzIGFsbCB0aGUgc2VydmVycyAoYm90aCBvcGVuZWQgYW5kIGluCiAgIG90aGVyIHN0YXR1 c2VzKSwgdGhlaXIgcGFyYW1ldGVycywgYW5kIGEgc3RhdHVzIHN5bWJvbC4KMy4gfm5ub28tc3Rh dGUtYWxpc3R+OiBIb2xkcyBhbGwgdGhlIHNlcnZlcnMsIHNvbWUgb3RoZXIgc2VydmVycyAoPyks CiAgIGFuZCBhbGwgdGhlIGdyb3VwcyBhbmQgbWFya3MuCjUuIH5nbnVzLXNlcnZlci1tZXRob2Qt Y2FjaGV+OiBBIHNpbXBsZXIgYWxpc3Qgb2Ygc2VydmVyIG5hbWVzIGFuZAogICBzZXJ2ZXIgdmFy aWFibGVzLgoKSG93IHJlZHVuZGFudCBhcmUgdGhlc2U/CgpWYXJzIHRoYXQgbGlzdCBzZXJ2ZXJz IHRoYXQgY291bGQgYmU6CgoxLiB+Z251cy12YWxpZC1zZWxlY3QtbWV0aG9kc346IEZhaXJseSBs aWdodHdlaWdodCBsaXN0IG9mIGRlZmluZWQKICAgc2VydmVyIHR5cGVzIGFuZCB0aGVpciBjYXRl Z29yeSBrZXlzLgoyLiB+bm5vby1kZWZpbml0aW9uLWFsaXN0fjogSGVhdnl3ZWlnaHQgbGlzdCBv ZiBkZWZpbmVkIHNlcnZlciB0eXBlcwogICB3aXRoIGFsbCB0aGVpciBwb3NzaWJsZSBzZXJ2ZXIg cGFyYW1ldGVycy4KMy4gfmdudXMtcHJlZGVmaW5lZC1zZXJ2ZXItYWxpc3R+OiBUaGlzIG9uZSBu b3Qgc28gbXVjaCwgaXQganVzdAogICBpbmRpY2F0ZXMgd2hhdCB3ZSBzaG91bGQgc3RhcnQgb3V0 IHdpdGguCgoqKiBUT0RPIFVzZSByZWFsIGhhc2h0YWJsZXMKOlBST1BFUlRJRVM6CjpJRDogICAg ICAgYTc3YzNjM2YtZWU5MC00ZmRkLTk5ZDctZmQ0YzYzNmMxNGJiCjpFTkQ6ClRoZXNlIHZhcmlh YmxlcyBhcmUgY3VycmVudGx5IGNhbGxlZCBoYXNodGFibGVzLCBidXQgYWN0dWFsbHkgdXNlCm9i YXJyYXlzLiBBcmUgYW55IG9mIHRoZW0gd29ydGggdHVybmluZyBpbnRvIHJlYWwgaGFzaCB0YWJs ZXM/CgotIGdudXMtZHVwLWhhc2h0YgotIGdudXMtYXN5bmMtaGFzaHRiCi0gZ251cy1raWxsZWQt aGFzaHRiCi0gZ251cy1hY3RpdmUtaGFzaHRiCi0gZ251cy1uZXdzcmMtaGFzaHRiCi0gZ251cy1i YWNrbG9nLWhhc2h0YgotIGdudXMtbW9kZXJhdGVkLWhhc2h0YgotIGdudXMtYWdlbnQtc3BhbS1o YXNodGIKLSBnbnVzLWRlc2NyaXB0aW9uLWhhc2h0YgotIGdudXMtY2FjaGUtYWN0aXZlLWhhc2h0 YgotIGdudXMtY2FjaGUtdG90YWwtZmV0Y2hlZC1oYXNodGIKLSBnbnVzLWFnZW50LXRvdGFsLWZl dGNoZWQtaGFzaHRiCioqIFRPRE8gUmVmYWN0b3IgZ3JvdXAgcmVhZGluZy9zZWxlY3Rpb24KVGhp cyB3b3VsZG4ndCBoYXZlIHRvIGJlIGFzIGhhcmQgYXMgaXQgc291bmRzLgoKUmlnaHQgbm93IHdl IGRvIChpbiBtYWtlLWJlbGlldmUgY29kZSk6CgojK0JFR0lOX1NSQyBlbWFjcy1saXNwCiAgKGdu dXMtZ3JvdXAtcmVhZC1ncm91cAogICAoZ251cy1zdW1tYXJ5LXJlYWQtZ3JvdXAKICAgIChnbnVz LXN1bW1hcnktcmVhZC1ncm91cC0xCiAgICAgKGdudXMtc2VsZWN0LW5ld3Nncm91cAogICAgICAo Z251cy1yZXF1ZXN0LWdyb3VwKQogICAgICAoZ251cy1yZXRyaWV2ZS1oZWFkZXJzKSkpKSkKIytF TkRfU1JDCgpBbG1vc3QgYWxsIHRob3NlIGZ1bmN0aW9ucywgYXBhcnQgZnJvbSB0aGUgdHdvIGlu bmVybW9zdCBvbmVzLCBhcmUKaW52b2x2ZWQgaW4gbW9zdCBhc3BlY3RzIG9mIHN1bW1hcnkgYnVm ZmVyIGNyZWF0aW9uOiBjaG9vc2luZyBhcnRpY2xlcwp0byByZWFkLCBtYW5pcHVsYXRpbmcgbWFy a3MsIGRvaW5nIGVuY29kaW5nLCBoYW5kbGluZyBwZXJpcGhlcmFsIHN0dWZmCmxpa2UgY2FjaGlu ZywgaGFuZGxpbmcgZXJyb3JzLCBhbmQgZG9pbmcgdGhlIHZpc3VhbCBzZXR1cCBvZiB0aGUKXHN0 YXJ7fVN1bW1hcnlcc3RhciBidWZmZXIuCgpUcnkgdG8gdW5waWNrIHRoZXNlIGZ1bmN0aW9ucyBh IGJpdDoKCi0gfmdudXMtZ3JvdXAtcmVhZC1ncm91cH4gOjogQW5kIG90aGVyIHNpbWlsYXIgZnVu Y3Rpb25zIHNob3VsZCBiZQogICAgIHRoaW4gaW50ZXJhY3RpdmUgd3JhcHBlcnMgdGhhdCBoYW5k bGUgdXNlciBwcm9tcHRzLgotIH5nbnVzLXN1bW1hcnktcmVhZC1ncm91cH4gOjogQ2FsbHMgfmdu dXMtc2VsZWN0LW5ld3Nncm91cH4gdG8gZ2V0CiAgICAgdGhlIGRlc2lyZWQgYXJ0aWNsZSBoZWFk ZXJzLCBjb25zdWx0cyB0aGUgZGlzcGxheS0vc2VsZWN0LXJlbGF0ZWQKICAgICBhcmd1bWVudHMs IGFuZCBoYW5kbGVzIGVpdGhlciBzZXR0aW5nIHVwIHRoZSBzdW1tYXJ5IGJ1ZmZlciwgb3IKICAg ICBxdWl0dGluZy4gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGZvb2wgd2l0aCB0aGUgc2VsZWN0aW9u IG9mCiAgICAgYXJ0aWNsZXMgYXQgYWxsLgotIH5nbnVzLXNlbGVjdC1uZXdzZ3JvdXB+IDo6IElz IHBhc3NlZCBhcmd1bWVudHMgc2F5aW5nIGhvdyBtYW55L3doaWNoCiAgICAgYXJ0aWNsZXMgdG8g ZmV0Y2guIEV4YW1pbmVzIHRoZSBncm91cCBpbmZvLCBjYWxscwogICAgIH5nbnVzLXJlcXVlc3Qt Z3JvdXB+IGFuZCB+Z251cy1yZXRyaWV2ZS1oZWFkZXJzfiwgYW5kIHBhc3NlcyB0aGUKICAgICBo ZWFkZXJzIGJhY2sgdXAuIFRoaXMgZnVuY3Rpb24gaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUg dmlzdWFsCiAgICAgcHJlc2VudGF0aW9uIG9mIHRoZSBzdW1tYXJ5IGJ1ZmZlci4KClRoYXQgd291 bGQgZ2V0IHVzIGEgc3RlcCBjbG9zZXIgdG8gYmVpbmcgYWJsZSB0byB3cml0ZSB0ZXN0cy4KCkFs c28sIHRoZSB2YXJpb3VzIGFyZ3VtZW50cyBsaWtlIH5zaG93LWFsbH4sIH5uby1kaXNwbGF5fiwK fm5vLWFydGljbGV+LCB+c2VsZWN0LWFydGljbGVzfiwgZXRjLCBhcmUgZWl0aGVyIHN0ZXBwaW5n IG9uIGVhY2gKb3RoZXJzJyB0b2VzLCBvciBzaG91bGQgYmUgZG9jdW1lbnRlZCBhIGxpdHRsZSBi ZXR0ZXIgc28gdGhlaXIKcmVsYXRpb25zaGlwIGlzIGNsZWFyZXIuCioqIFRPRE8gVXBkYXRlIHRv IHVzZSB+ZGVjb2RlLWNvZGluZy1zdHJpbmd+CkdldCByaWQgb2YgdGhlIGxhc3QgdXNlcyBvZiB+ c3RyaW5nLSh0b3xmcm9tKS0odW5pfG11bHRpKWJ5dGV+LgpGaW5hbGx5IGNsZWFyIHVwIHRob3Nl IGNvbXBpbGVyIHdhcm5pbmdzLgoqKiBUT0RPIENvbnNvbGlkYXRlIGRpcmVjdG9yeSB2YXJpYWJs ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnVzZXI6CklzIHRoZXJlIHJlYWxseSBh IG5lZWQgZm9yIHNlcGFyYXRlIHZhcmlhYmxlcyBmb3IgfmdudXMtZGlyZWN0b3J5fiwKfmdudXMt aG9tZS1kaXJlY3Rvcnl+LCBhbmQgfmdudXMtZGVmYXVsdC1kaXJlY3Rvcnl+PwoqKiBUT0RPIENv bnNpZGVyIHVzaW5nIHNpZGUgd2luZG93cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOnVzZXI6Ckluc3RlYWQgb2YgR251cycgd2luZG93IGNvbmZpZz8KKiBIYXJkIHJlZmFjdG9y aW5nCioqIFRPRE8gV3JpdGUgbWFyay1zZXR0aW5nIG1hY3JvcwpUaGUgZ29hbCB3b3VsZCBiZSB0 byBnZXQgYWxsIG9wYXF1ZSB3cml0ZS1vbmx5IGNvZGUgb3V0IG9mIHRoZQoiZ251cy1zdW0iIGFu ZCAiZ251cy1ncm91cCIgZmlsZXMsIGFuZCBtb3ZlZCBpbnRvIChwcm9iYWJseSkKImdudXMtcmFu Z2UiLiBXaGVuIGhhY2tlcnMgYW5kIGJ1Zy1yZXBvcnRlcnMgbG9vayBhdCB0aGVzZSBmaWxlcywg dGhleQpzaG91bGRuJ3QgaGF2ZSB0byBpbnRlcnByZXQgY29kZSBiaXRzIGxpa2UgfihzZXRjZHIg bGlzdCAoY2RkcgpsaXN0KSl+LiBDcmVhdGUgYSBoYW5kZnVsIG9mIG1hY3JvcyB3aXRoIHNlbnNp YmxlIG5hbWVzIHRvIGhhbmRsZQp0aGUgY29tbW9uIHRyYW5zYWN0aW9ucy4KKiBBbWJpdGlvdXMg c3R1ZmYKKiogVE9ETyBVc2UgRUlFSU8gY2xhc3NlcyBmb3IgZ3JvdXBzCldlIGNvdWxkIGdldCB+ Z251cy1kZWZpbmUtZ3JvdXAtcGFyYW1ldGVyfiBhbmQgdGhlIGN1c3RvbWl6YXRpb24gZWRpdApp bnRlcmZhY2UgZm9yIGZyZWUuICBTdWJjbGFzc2luZyBncm91cHMgY291bGQgYWxsb3cgcHJldHR5 IGRpZmZlcmVudApncm91cCBiZWhhdmlvciBmb3IgZGlmZmVyZW50IHNlcnZlcnMuIFdvdWxkIGRv IGF3YXkgd2l0aCBkaXN0aW5jdGlvbgpiZXR3ZWVuICJncm91cCIgYW5kICJpbmZvIi4KKiogVE9E TyBVc2UgRUlFSU8gY2xhc3NlcyBmb3Igc2VydmVycyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDp1c2VyOgpDb3VsZCBkbyBhd2F5IHdpdGggYWxsIG9mIG5ub28uZWwuIFdvdWxkIGRv IGF3YXkgd2l0aCB0aGUgInNlbGVjdAptZXRob2QiIHZzICJjb21tYW5kIG1ldGhvZCIgdnMgInNl cnZlciIgdnMgImJhY2tlbmQiIGRpc3RpbmN0aW9uLCBhbmQKd2UgY291bGQgZHJvcCB2ZXJ5IG11 Y2ggY29kZSB1c2VkIGZvciBib3VuY2luZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCnNlcnZlcnMg YW5kIG1ldGhvZHMuIFdvdWxkIGFsbG93IHVzIHRvIHVzZSBzbG90cyBhbmQgZ2VuZXJpYyBtZXRo b2RzCmluc3RlYWQgb2YgfmRlZnZvb34gYW5kIH5kZWZmb29+LgoKVGhpcyBtaWdodCBhbHNvIHJl cXVpcmUgY2hhbmdpbmcgdGhlIHdheSBHbnVzIHNhdmVzIGl0cyBzdGF0ZSwgYnV0CmhvcGVmdWxs eSBpbiBhIHBvc2l0aXZlIHdheS4gQ3VycmVudGx5IHdlJ3ZlIGdvdDoKCi0gZ251cy5lbCA6OiBI b2xkcyB+Z251cy1zZWxlY3QtbWV0aG9kfiBhbmQKICAgICB+Z251cy1zZWNvbmRhcnktc2VsZWN0 LW1ldGhvZHN+LCBhcyB3ZWxsIGFzIGFsbCBnbnVzLXJlbGF0ZWQKICAgICB2YXJpYWJsZS9jdXN0 b21pemF0aW9uIHNldHRpbmdzLgotIG5ld3NyYy5lbGQgOjogSG9sZHMgbWFya3MsIGFzIHdlbGwg YXMgYWxsIHN0YXRlIHNldCBieSB0aGUgdXNlciwKICAgICBzdWNoIGFzIHRvcGljIHRvcG9sb2d5 LCBncm91cCBzb3J0aW5nLCBncm91cCBzZXR0aW5ncywgZXRjLgoKVGhpcyBjaGFuZ2Ugd291bGQg bWVhbiB0aHJlZSBkaWZmZXJlbnQgZmlsZXM6CgotIGdudXMuZWwgOjogT25seSBob2xkcyB2YXJp YWJsZS9jdXN0b21pemF0aW9uIHNldHRpbmdzLCBjdXN0b20KICAgICBmdW5jdGlvbnMsIGV0Yy4K LSBnbnVzLXNlcnZlcnMuZWwgOjogSG9sZHMgYWxsIHNlcnZlciBkZWZpbml0aW9ucywgZ3JvdXAg cGFyYW1ldGVyCiAgICAgY3VzdG9taXphdGlvbnMsIGFuZCBhbGwgdXNlci1lZGl0YWJsZSBzdGF0 ZSBzZXQgdGhyb3VnaCBHbnVzJwogICAgIGludGVyZmFjZXMgKHN1Y2ggYXMgdG9waWMgdG9wb2xv Z3kpLgotIGdudXMtbWFya3MuZWwgOjogVGhpcyB3b3VsZCBjb250YWluIG5vdGhpbmcgYnV0IGdy b3VwLXRvLW1hcmtzCiAgICAgY29ycmVzcG9uZGVuY2VzLiBEaWZmZXJlbnQgc2VydmVyIG9yIGdy b3VwIGNsYXNzZXMgY291bGQgc3RvcmUKICAgICB0aGVpciBtYXJrcyBkaWZmZXJlbnRseTogaWUs IG9uIGEgcmVtb3RlIHNlcnZlciwgb3IgaW4gYQogICAgIGRhdGFiYXNlLiBCdXQgYnkgZGVmYXVs dCwgdGhleSdkIGFsbCBiZSBzdHVjayBpbiB0aGlzIGZpbGUuCgpJbXBsaWNhdGlvbnM6CgoxLiBF dmVyeXRoaW5nIGluIGdudXMuZWwgaXMgdGhlb3JldGljYWxseSBlZGl0YWJsZSB2aWEgdGhlCiAg IGN1c3RvbWl6YXRpb24gaW50ZXJmYWNlLCBwbHVzIGN1c3RvbSBmdW5jdGlvbnMuCjIuIEV2ZXJ5 dGhpbmcgaW4gZ251cy1zZXJ2ZXJzLmVsIGlzIG1lYW50IHRvIGJlIGVkaXRlZCB0aHJvdWdoIEdu dXMnCiAgIG93biBpbnRlcmZhY2VzLiBUbyBkZWZpbmUgc2VydmVycywgeW91IGdvIHRvIHRoZSBc c3Rhcnt9U2VydmVyXHN0YXIKICAgYnVmZmVyIGFuZCBydW4gaW5zZXJ0L2RlbGV0ZS9lZGl0IGNv bW1hbmRzIHRoZXJlLiBJdCB3b3VsZCBiZQogICBwb3NzaWJsZSB0byBlZGl0IHRoZSBmaWxlIGJ5 IGhhbmQsIGJ1dCBpdCdzIC9tZWFudC8gdG8gYmUgZWRpdGVkCiAgIHdpdGhpbiBHbnVzLgozLiBn bnVzLW1hcmtzLmVsIHNob3VsZCBvbmx5IGJlIGVkaXRlZCBieSBHbnVzLiBJZiB5b3Ugd2FudCB0 bwogICBzaGFyZS9wcm9wYWdhdGUgbWFya3MgYmV0d2VlbiBtYWNoaW5lcywgR251cyB3aWxsIHBy b3ZpZGUKICAgbWVjaGFuaXNtcyBmb3IgZG9pbmcgdGhhdC4KNC4gRmlsZXMgb25lIGFuZCB0d28g Y2FuIG5vdyBiZSBzYWZlbHkga2VwdCB3aXRoaW4gdmVyc2lvbiBjb250cm9sLgogICBUaGV5IHJl cHJlc2VudCBvcHRpb25zIGFuZCBzdGF0ZSB0aGF0IGhhdmUgYmVlbiBleHBsaWNpdGx5IHNldCBi eQogICB0aGUgdXNlciwgYW5kIHdoaWNoIGNhbiByZWFzb25hYmx5IGJlIGV4cGVjdGVkIG5vdCB0 byBjaGFuZ2Ugb24gYQogICBkYXktdG8tZGF5IGJhc2lzLgoqKiBUT0RPIFJlbW92ZSB+Z251cy1z ZWNvbmRhcnktc2VsZWN0LW1ldGhvZHN+ICAgICAgICAgICAgICAgICAgICAgICAgOnVzZXI6Cklu c3RlYWQganVzdCBoYXZlIGEgc2luZ2xlIH5nbnVzLXNlbGVjdC1tZXRob2RzfiBvcHRpb24uIFNv bWUgcGVvcGxlCndpbGwgbG92ZSB0aGlzIGlkZWEsIHNvbWUgd2lsbCBoYXRlIGl0LgoqKiBUT0RP IFJldGhpbmsgfm5udHAtc2VydmVyLWJ1ZmZlcn4gYmVoYXZpb3IgLS0gdGhyZWFkaW5nPwp+bm5o ZWFkZXItaW5pdC1zZXJ2ZXItYnVmZmVyfiBjcmVhdGVzIGEgYnVmZmVyIG5hbWVkIH48ICpubnRw ZCo+fiwKd2hlcmUgYWxsIHNlcnZlcnMgd3JpdGUgdGhlaXIgcmVzcG9uc2VzIC0tIHNvIGZhciBz byBnb29kLiBUaGUgYnVmZmVyCmRvZXMgbm90IGFjdHVhbGx5IGhhdmUgYSBwcm9jZXNzIGFzc29j aWF0ZWQgd2l0aCBpdC4gU2VydmVycyB3aXRoCmxvbmctcnVubmluZyBwcm9jZXNzZXMsIGxpa2Ug bm50cCBhbmQgaW1hcCwgbWFpbnRhaW4gcHJvY2Vzcy1idWZmZXIKbGlzdHMgaW4gdmFyaWFibGVz IGxpa2Ugfm5udHAtY29ubmVjdGlvbi1hbGlzdH4gYW5kCn5ubmltYXAtY29ubmVjdGlvbi1hbGlz dH4uIEhvd2V2ZXIsIHRoZXNlIHZhcmlhYmxlcyBvbmx5IGV2ZXIgaG9sZCBhCnNpbmdsZSBlbGVt ZW50IChldmVuIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIElNQVAgc2VydmVycyBjb25maWd1cmVk LApmb3IgZXhhbXBsZSksIGFuZCB0aGUgZWxlbWVudCBpcyBzd2FwcGVkIG91dCBhcyBkaWZmZXJl bnQgc2VydmVycyBhcmUKb3BlbmVkLiBUaGUgZWxlbWVudCBpcyBhIGxpc3Qgb2YgdGhlIH5ubnRw LXNlcnZlci1idWZmZXJ+LCBhbmQgdGhlCnNlcnZlcidzIHByb2Nlc3MgYnVmZmVyLiBIb3cgaXMg dGhlIGVsZW1lbnQgc3dhcHBlZCBvdXQ/IFdoeT8gV2hhdCdzCnRoZSBwb2ludCBvZiBkb2luZyB+ KGNhZHIgKGFzc29jIG5udHAtc2VydmVyLWJ1ZmZlcgpubmltYXAtY29ubmVjdGlvbi1hbGlzdCkp fiB0byBnZXQgdGhlIGltYXAgc2VydmVyIGJ1ZmZlcj8gV2h5IGFyZSBhbGwKdGhlIHByb2Nlc3Mg YnVmZmVycyB0aGVuIGtlcHQgaW4gfm5uaW1hcC1wcm9jZXNzLWJ1ZmZlcnN+PwoKSWYgZWFjaCBz ZXJ2ZXIgd3JvdGUgdG8gaXRzIG93biBvdXRwdXQgYnVmZmVyIChhbmQgc2VydmVycyB3aXRoCmxv bmctcnVubmluZyBwcm9jZXNzZXMgY291bGQgYXR0YWNoIHRoZWlyIHByb2Nlc3MgdG8gdGhpcyBi dWZmZXIpLCB3ZQpjb3VsZCBzZXBhcmF0ZSBjb25jZXJucyBjb21wbGV0ZWx5LiBFYWNoIHNlcnZl ciB3b3VsZCByZWFkIGl0cyBvdXRwdXQKaW5kZXBlbmRlbnRseSwgYW5kIHdlIGNvdWxkIHVzZSB0 aHJlYWRpbmcgZm9yIHByb2Nlc3MgY29uY3VycmVuY3ksCmluc3RlYWQgb2YgdGhlIHByZXNlbnQg fnJldHJpZXZlLWdyb3VwLWRhdGEtZWFybHl+IHN5c3RlbS4KKiogVE9ETyBJbmNvcnBvcmF0ZSBz b21ldGhpbmcgbGlrZSAiZ251cy1wZXJzIiBieSBkZWZhdWx0ICAgICAgICAgICAgIDp1c2VyOgpU aGUgc2VwYXJhdGlvbiBvZiByZWFkaW5nIGFuZCBzZW5kaW5nIGlzIGNvcnJlY3QsIGFuZCBhZG1p cmFibGUsIGJ1dApzb21ldGltZXMgaW5jb252ZW5pZW50LiBBdCB0aGUgdmVyeSBsZWFzdCwgaWYg YSAiZnJvbSIgYWRkcmVzcyBjb3VsZApiZSBhc3NvY2lhdGVkIHdpdGggYSBzZXJ2ZXIsIHRoYXQg d291bGQgZ2l2ZSB1cyBhIGxvdCBvZiBsZWV3YXkuCioqIFRPRE8gQWxsb3cgYmFja2VuZHMgdG8g aGFuZGxlIGRyYWZ0cyBhbmQgYXJjaGl2ZXMgICAgICAgICAgICAgICAgICA6dXNlcjoKVGhlIGlk ZWEgaXMgdGhhdCBtYWlsLWxpa2UgYmFja2VuZHMgc2hvdWxkIGJlIGdpdmVuIGEgc2hvdCB0byBo YW5kbGUKZHJhZnQgc2F2aW5nIGFuZCBtZXNzYWdlIGFyY2hpdmluZy4gSW1hcCBzZXJ2ZXJzLCBm b3IgaW5zdGFuY2UsIGNvdWxkCmFkdmVydGlzZSB0aGVtc2VsdmVzIGhhcyBiZWluZyBhYmxlIHRv IGRvIHRoaXMuIENyZWF0ZSBuZXcgZnVuY3Rpb25zCn5yZXF1ZXN0LXNhdmUtZHJhZnR+IGFuZCB+ cmVxdWVzdC1hcmNoaXZlLW1lc3NhZ2V+LCBhbmQgb25seSBpZiB0aGUKc2VydmVyIGluIHF1ZXN0 aW9uIGRvZXNuJ3QgaGF2ZSB0aG9zZSBmdW5jdGlvbnMgKG9yIHdlJ3JlIHVucGx1Z2dlZCkKZG9l cyB0aGUgYWdlbnQgaGFuZGxlIGl0IGxvY2FsbHkuCg== --=-=-=--