From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Eric Ludlam Newsgroups: gmane.emacs.devel Subject: Re: progmodes/project.el and search paths Date: Tue, 04 Aug 2015 21:29:19 -0400 Message-ID: <55C166EF.9060909@gmail.com> References: <55BE209F.1000009@siege-engine.com> <55BE509B.2080307@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090700070200030803050405" X-Trace: ger.gmane.org 1438738182 6859 80.91.229.3 (5 Aug 2015 01:29:42 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 5 Aug 2015 01:29:42 +0000 (UTC) To: Dmitry Gutov , Emacs Development Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Aug 05 03:29:37 2015 Return-path: Envelope-to: ged-emacs-devel@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 1ZMnWO-0006QR-VH for ged-emacs-devel@m.gmane.org; Wed, 05 Aug 2015 03:29:33 +0200 Original-Received: from localhost ([::1]:38703 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZMnWN-0002Wm-HZ for ged-emacs-devel@m.gmane.org; Tue, 04 Aug 2015 21:29:31 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:47102) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZMnWH-0002WF-7O for emacs-devel@gnu.org; Tue, 04 Aug 2015 21:29:27 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZMnWD-0003TE-OJ for emacs-devel@gnu.org; Tue, 04 Aug 2015 21:29:25 -0400 Original-Received: from mail-vk0-x22b.google.com ([2607:f8b0:400c:c05::22b]:33029) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZMnWD-0003T4-I4 for emacs-devel@gnu.org; Tue, 04 Aug 2015 21:29:21 -0400 Original-Received: by vkgc186 with SMTP id c186so10372899vkg.0 for ; Tue, 04 Aug 2015 18:29:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type; bh=Gl/4cEZaZXXG9B5MxqEYIj3GSfnHsZXpwpWHxqAESwM=; b=NLsXMKrYU0F8PJ3ck9lrBWf+AOPSqSuI/VsK5OwCULFVRzawcc8ooWQgQxPyzi8v0O 8WPL6nExhoPuuWX355t1kiVIbaC5/q7SttTnmY6G8z8wFGDsvHYTJ954GpKQMz+CP3Re x5wGH5a/6mZz5gkQPy66DOKh/sNwLFLYyCeJt6k4VnyZbiSdQFvHLZovbthjrhU1PPvn CRMQ8FXWXPJqZvbY1EoF8aNY3mAz/PwCCMu+yytKWWDreSAqI9TLiByLLMdhB+ASh5Wn RO+TUwuc/oFqmNjaTN1PyZqp1zMiIJKYQQsWp+HTrx0l7FNph0r4aO4izdW39gNXHZ4S ZSFg== X-Received: by 10.52.245.8 with SMTP id xk8mr9251774vdc.63.1438738161205; Tue, 04 Aug 2015 18:29:21 -0700 (PDT) Original-Received: from [192.168.1.202] (pool-71-184-198-118.bstnma.fios.verizon.net. [71.184.198.118]) by smtp.googlemail.com with ESMTPSA id r1sm257527vdr.11.2015.08.04.18.29.20 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Aug 2015 18:29:20 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 In-Reply-To: <55BE509B.2080307@yandex.ru> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400c:c05::22b X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:188419 Archived-At: This is a multi-part message in MIME format. --------------090700070200030803050405 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 08/02/2015 01:17 PM, Dmitry Gutov wrote: > If you can propose better ways to do the same things, or something > else worth adding, please do. AND On 08/04/2015 09:43 AM, Eli Zaretskii wrote: > I really think we could benefit from presenting some kind of goal or > vision for the project.el development. AFAICS, it started as a way to > standardize finding a "project root", then moved to finding "project > directories", but now it seems we are discussing a much wider scope, > something like infrastructure for project definition and possibly also > IDEs? If it's the latter, then I won't expect to see arguments about > "complications outweighing benefits" in reference to features that are > basic for any IDE that is worth its menus. > > So maybe we should step back a notch and decide anew where is > project.el going, and what is and isn't in its scope? Hi Dmitry, I was tempted to start replying to multiple sub-threads in multiple emails, but I suspect there is nuance I am not expressing well, so I've opted to go back to one of your original questions to engage in a more positive way. I scraped through some old threads, old code, and my memory to put together the attached org file. The intent is to answer your first question about things worth adding to a generic project. It also happens to be something that can answer Eli's question, so I quoted him too. When the generic project was first proposed, I thought it was a good idea where either EDE could be adapted to be a base, or EDE could adapt to a new base. I wasn't too picky, but I clearly had many assumptions about what it was that did not match. EDE's story is one where it started out specific, but became more generic because I needed to provide services to external tools I was writing, and there was just a lot of code donations and demand for more project definitions. Emacs has a lot of tools that could use a project service, and sometimes all the tool needs is a small push of convenience, and not full project management system. A generic project system will make it easy to add small conveniences in lots of places you may not expect because tool authors will feel safe using it. The attached is my experience of things I either needed in EDE's base classes to implement a project, or that some tool needed, and what I learned along the way. You might think it is too EDE specific, but I put in only the most basic stuff, and put in things I kind of wish I had time to add to EDE. I am sure there are entries you consider out of scope. In my mind projects need a centralizing force to bring consistency in the same way comint brought some very basic consistency to shell buffers. We should not skimp in approaching this goal. I consider this file incomplete, but I hope it proves useful as a starting point. I'd be happy to periodically update it for a little while if it is useful. Eric --------------090700070200030803050405 Content-Type: text/plain; charset=UTF-8; name="generic_project.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="generic_project.txt" RXJpYydzIG5vdGVzIGZvciBHZW5lcmljIFByb2plY3QKCiogRGVmaW5pdGlvbnMKKiogUHJv amVjdCBEaXJlY3RvcnkKIEEgdG9wIGxldmVsIGRpcmVjdG9yeSBpbiB3aGljaCBzb3VyY2Ug Y29kZSBmb3IgYSBwcm9qZWN0IHJlc2lkZXMuCioqIFByb2plY3QKIEEgY29sbGVjdGlvbiBv ZiBNZXRhIERhdGEgYW5kIFNlcnZpY2VzIHRoYXQgZGVzY3JpYmUgaG93IGNvZGUgaW4gYSBQ cm9qZWN0CiBEaXJlY3RvcnkgaXMgb3JnYW5pemVkLCB2ZXJzaW9uZWQsIGNvbXBpbGVkLCBl dGMuCioqIFByb2plY3QgTWV0YSBEYXRhCiBBIHBpZWNlIG9mIGluZm9ybWF0aW9uIHRoYXQg ZGVzY3JpYmVzIHNvbWUgYXNwZWN0IG9mIHRoZSBwcm9qZWN0LgogQWxzbzogYHNsb3QnIG9u IGEgJ1Byb2plY3QnIGluIENMT1MgcGFybGFuY2UKKiogUHJvamVjdCBTZXJ2aWNlCiBGdW5j dGlvbmFsaXR5IHByb3ZpZGVkIGJ5IGEgZ2VuZXJpYyBwcm9qZWN0IGludGVyZmFjZQogQWxz bzogJ21ldGhvZCcgb24gYSAnUHJvamVjdCcgaW4gQ0xPUyBwYXJsYW5jZQoqKiBQcm9qZWN0 IENsaWVudAogQSBmZWF0dXJlIHRoYXQgZGVwZW5kcyBvbiBlaXRoZXIgdGhlIFByb2plY3Qg RGlyZWN0b3J5LCBQcm9qZWN0LCBvciBhCiBQcm9qZWN0IFNlcnZpY2UsIHVzdWFsbHkgZGV2 ZWxvcGVkIGluZGVwZW5kZW50bHkgb2YgcHJvamVjdCBpbXBsZW1lbnRhdGlvbnMuCioqIFBy b2plY3QgSW1wbGVtZW50YXRpb24KIEFuIGltcGxlbWVudGF0aW9uIG9mIGEgY29uY3JldGUg cHJvamVjdCB0aGF0IHByb3ZpZGVzIGFjdHVhbAogZnVuY3Rpb25hbGl0eSwgc29tZSBvZiB3 aGljaCBpcyBwcm92aWRlZCB2aWEgdGhlIGdlbmVyaWMgcHJvamVjdAogc2VydmljZS4KKiog VGhpbmcKIFNvbWV0aGluZyB0aGUgZ2VuZXJpYyBwcm9qZWN0IHNob3VsZCBoYW5kbGUgdGhh dCBkb2Vzbid0IGZpdCBpbnRvCiBvbmUgb2YgdGhlIGFib3ZlIGNhdGVnb3JpZXMuLi4geWV0 LgoKKiBTZXJ2aWNlOiBDdXJyZW50IFByb2plY3QgRGlyZWN0b3J5ClByb3ZpZGVzIGV4dGVy bmFsIHRvb2xzIGEgd2F5IHRvIGlkZW50aWZ5IHRoZSB0b3AtbW9zdCBkaXJlY3Rvcnkgb2Yg dGhlIGN1cnJlbnQgcHJvamVjdC4KCioqIEZlYXR1cmVzOgoqKiogUGVyZm9ybWFuY2U7IEZv ciBhIGJ1ZmZlcjoKQXMgZmFzdCBhcyBhIGJ1ZmZlciBsb2NhbCB2YXJpYWJsZSByZWYKKioq IFBlcmZvcm1hbmNlOyBGb3IgYSBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lOiAKRmlyc3QgdGlt ZSBsb29rdXAgc2hvdWxkIHRha2UgYWR2YW50YWdlIG9mIGFueSBrbm93biBvcGVuIHByb2pl Y3RzLgoqKiogTmVzdGVkIFByb2plY3RzClRoZXJlIHNob3VsZCBiZSB3YXlzIGZvciB0aGVy ZSB0byBiZSBwcm9qZWN0cyBpbiBwcm9qZWN0cy4KKioqKiBFeGFtcGxlOiBIYXZpbmcgYSBz ZXQgb2Ygc21hbGwgcHJvamVjdHMgZm9yIHRlc3RpbmcgaW4gYSBsYXJnZXIgcHJvamVjdAoK KiogUHJvamVjdCBDbGllbnQgRXhhbXBsZXMKKioqIElkZW50aWZ5IGEgVEFHUyBmaWxlIHRv IHVzZSBmb3IgbmF2aWdhdGluZyBhIHNvdXJjZSB0cmVlCioqKiBTdGFydGluZyBwb2ludCBm b3Igc2VhcmNoIHRvb2xzCioqKiBMb2NhdGlvbiBvZiBNYW5pZmVzdHMsIEFVVEhPUiwgYW5k IG90aGVyIGRpc3QgZmlsZXMKCiogU2VydmljZTogQ3VycmVudCBQcm9qZWN0ClRvb2xzIHRo YXQgbmVlZCB0byBrbm93IGFib3V0IHNvbWUgbWV0YS1kYXRhIG9mIHRoZSBjdXJyZW50IHBy b2plY3QKd2lsbCBuZWVkIGEgd2F5IHRvIHJlZmVyIHRvIHRoZSBjdXJyZW50IHByb2plY3Qu ICBUaGUgY3VycmVudCBwcm9qZWN0Cm5lZWRzIHRvIGJlIHNvbWUgJ3RoaW5nJyB0aGF0IHBy b3ZpZGVzIHByb2plY3QgZmVhdHVyZXMuCgoqKiBGZWF0dXJlcwoqKiogUHJvamVjdCBNZXRh IERhdGEKUHJvamVjdHMgY2FuIGhhdmUgbWV0YSBkYXRhLiAgVGhlcmUgc2hvdWxkIGJlIHNv bWUgc3RhbmRhcmQgbWV0YS1kYXRhLAphbmQgbWV0YSBkYXRhIG9wdGlvbmFsbHkgcHJvdmlk ZWQgYnkgc3BlY2lmaWMgcHJvamVjdCBpbXBsZW1lbnRhdGlvbnMuCioqKiBQcm9qZWN0IFNl cnZpY2VzClByb2plY3RzIGNhbiBoYXZlIGJlaGF2aW9yIGFuZCBwcm92aWRlIHNlcnZpY2Vz LiAgVGhlcmUgc2hvdWxkIGJlCnNvbWUgYmFzaWMgc3RhbmRhcmQgc2VydmljZXMsIGFuZCBv cHRpb25hbGx5IHByb3ZpZGVkIHNlcnZpY2VzCnNwZWNpZmljIHRvIHByb2plY3QgaW1wbGVt ZW50YXRpb25zLgoqKiogUHJvamVjdCBDb21tYW5kcwpTZXJ2aWNlcyBmb3IgdXNlcnMgdG8g ZXhlY3V0ZSB3aGVuIHRoZXkgYXJlIG1hbmFnaW5nIHRoZWlyIHByb2plY3QuClRoZXJlIHNo b3VsZCBiZSBzb21lIGJhc2ljIHN0YW5kYXJkIGNvbW1hbmRzLCBhbmQgb3B0aW9uYWxseSBw cm92aWRlZApjb21tYW5kcyBzcGVjaWZpYyB0byBwcm9qZWN0IGltcGxlbWVudGF0aW9ucy4K ClByb2plY3QgQ29tbWFuZHMgbWF5IHNlZW0gb3B0aW9uYWwgZnJvbSBhIGdlbmVyaWMgcHJv amVjdCBwb2ludCBvZiB2aWV3LgpUaGV5IGFyZSBwcmltYXJpbHkgaGVscGZ1bCBhcyBhIGhv bW9nZW5pemluZyBmb3JjZSBiZXR3ZWVuIGRpc3BhcmF0ZQpwcm9qZWN0IGltcGxlbWVudGF0 aW9ucyB3aGljaCB3b3VsZCBiZSBhIGdvb2QgdGhpbmcgaW4gdGhlIGxvbmcgcnVuLAp0aGUg d2F5IGNvbWludCBtYWRlIGFsbCBzaGVsbCBidWZmZXJzIHZlcnkgc2ltaWxhciBhbmQgZWFz eSB0byBtb3ZlCmJldHdlZW4uCioqKiBNZW51L1Rvb2xiYXIvT3RoZXIgVUkgU2VydmljZXMK UHJvamVjdCBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGhhdmUgYSBzdGFuZGFyZCB3YXkgdG8g aW50ZWdyYXRlIGludG8KdGhlIERldmVsb3BtZW50IG1lbnUgd2hlcmUgdXNlcnMgZXhwZWN0 IHByb2plY3QgY29tbWFuZHMgdG8gZXhpc3QuCioqKiBFeHRlbnNpYmxlClRoZSB0aGluZyB1 c2VkIHRvIHJlcHJlc2VudCBhIGdlbmVyaWMgcHJvamVjdCBzaG91bGQgYmUgZXh0ZW5zaWJs ZSBzbwpwcm9qZWN0IGltcGxlbWVudGF0aW9ucyBjYW4gaW1wbGVtZW50IGFic3RyYWN0IHNl cnZpY2VzLCBvciBhZGQgbmV3Cm9uZXMuCioqKiBTZW5zaWJsZSBEZWZhdWx0cwpUaGUgZ2Vu ZXJpYyBwcm9qZWN0IHRoaW5nIHNob3VsZCBoYXZlIHNlbnNpYmxlIGRlZmF1bHRzIGZvciBt ZXRhIGRhdGEKYW5kIHNwZWNpZmljIHNlcnZpY2VzIHNvIGEgcHJvamVjdCBpbXBsZW1lbnRh dGlvbiBkb2Vzbid0IG5lZWQgdG8KaW1wbGVtZW50IHRoZW0gYWxsLgoKKiogRXhhbXBsZSBG ZWF0dXJlcwoqKiogVmVyc2lvbiBudW1iZXIgb2YgcHJvamVjdApVc2VmdWwgd2hlbiBkaXN0 aW5ndWlzaGluZyBiZXR3ZWVuIGRpZmZlcmVudCBsb2NhbCByZXBvc2l0b3JpZXMgeW91Cm1p Z2h0IGJlIHdvcmtpbmcgb24uCioqKiBDb21waWxlCkludGVncmF0aW9uIHdpdGggdGhlIGBj b21waWxlJyBjb21tYW5kLCBhIHN0YW5kYXJkIGFjdGlvbiBmb3IgbWFueQpjb21waWxlZCBw cm9ncmFtcy4gIEEgbW9yZSBnZW5lcmljIHRlcm0gdGhhdCB3b3VsZCB3b3JrIGZvciBydW5u aW5nCnRlc3RzIGluIGFuIGludGVycHJldGVkIGVudmlyb25tZW50IG1heSBiZSBwcmVmZXJy ZWQuCgoqIFNlcnZpY2U6IFByb2plY3QgRGV0ZWN0aW9uCkFsbCBwcm9qZWN0IG1hbmFnZW1l bnQgc3lzdGVtcyBuZWVkIGEgd2F5IHRvICdkZXRlY3QnIGEgcHJvamVjdCB0aGUKZmlyc3Qg dGltZSBhIHVzZXIgdmlzaXRzIGEgZmlsZS4gIE1hbnkgb2YgdGhvc2Ugc3lzdGVtcyBhcmUg dGhlIHNhbWUsCmFuZCBpbnZvbHZlIHdhbGtpbmcgdXAgYW5kIGRvd24gZGlyZWN0b3J5IHRy ZWVzIGxvb2tpbmcgZm9yCmRvbWluYXRpbmcgZmlsZXMuCgoqKiBGZWF0dXJlczoKKioqIERv bWluYXRpbmcgRmlsZSBEZXRlY3Rpb24KQSBjb3JlIHdheSB0byBpZGVudGlmeSBwcm9qZWN0 cyB0aGF0IHVzZSBhIGRvbWluYXRpbmcgZmlsZSwgc3VjaCBhcyBhCnRvcCBsZXZlbCBidWls ZC54bWwsIG9yIGEgQW5kcm9pZE1hbmlmZXN0LnhtbC4KKioqIERpc3RyaWJ1dGVkIGRvbWlu YXRpbmcgZmlsZSBkZXRlY3Rpb24KQSBjb3JlIHdheSB0byBpZGVudGlmeSBwcm9qZWN0cyB0 aGF0IHVzZSB0aGUgc2FtZSBkb21pbmF0aW5nIGZpbGUgaW4KYWxsIGRpcmVjdG9yaWVzIGlu IGEgcHJvamVjdCwgc3VjaCBhcyBNYWtlZmlsZSwgQ1ZTLgoqKiogTmVzdGVkIFByb2plY3Rz ClRoZXJlIHNob3VsZCBiZSB3YXlzIGZvciB0aGVyZSB0byBiZSBwcm9qZWN0cyBpbiBwcm9q ZWN0cy4KKioqIERlY2xhcmF0aXZlIGRldGVjdGlvbiBmZWF0dXJlcwpXaGVuIGFuIHByb2pl Y3QgaW1wbGVtZW50YXRpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBnZW5lcmljIHByb2plY3QK c3lzdGVtLCBpdCBzaG91bGQgYmUgYWJsZSB0byAnZGVjbGFyZScgaG93IHRvIGRldGVjdCBh IHByb2plY3Qgb2YgaXRzCnByZWZlcnJlZCB0eXBlLiAgVGhhdCB3YXkgdGhlIHNvdXJjZSBj b2RlIGZvciB0aGUgcHJvamVjdAppbXBsZW1lbnRhdGlvbiB3aWxsIG9ubHkgYmUgbG9hZGVk IGludG8gRW1hY3Mgd2hlbiBhIHByb2plY3Qgb2YgdGhhdAp0eXBlIGlzIGRldGVjdC4KKioq IE1hbnkgcHJvamVjdCB0eXBlcyBkZXRlY3RhYmxlIHcvb3V0IHVzZXIgY29uZmlndXJhdGlv bgpVc2VycyBzaG91bGQgaGF2ZSBhbGwgYXZhaWxhYmxlIHByb2plY3QgdHlwZXMgYXV0b21h dGljYWxseSBkZXRlY3RlZAp3aXRob3V0IGhhdmluZyB0byBmaWRkbGUgd2l0aCB0aGVpciAu ZW1hY3MgZmlsZS4gIEVMUEEgcHJvamVjdAppbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGhhdmUg YSB3YXkgdG8gYWRkIHRoZW1zZWx2ZXMgdG8gdGhlIGRldGVjdGlvbgpsaXN0IHdpdGhvdXQg bG9hZGluZyB0aGVpciBjb2RlLgoKKiogUHJvamVjdCBEZXRlY3Rpb24gRGVjbGFyYXRpb24g ZmVhdHVyZXMgCkZlYXR1cmVzIHRoYXQgYSBkZWNsYXJhdGlvbiBvZiBob3cgdG8gZGV0ZWN0 IHNob3VsZCBwcm92aWRlCioqKiBIb3cgdG8gZGV0ZWN0CkEgZGVjbGFyYXRpdmUgd2F5IHRv IGV4cHJlc3MgdGhlIGRlc2lyZWQgZGV0ZWN0aW9uIG1lY2hhbmlzbS4KKioqIEhvdyB0byBs b2FkIHRoZSBwcm9qZWN0IGNvZGUgdG8gc3VwcG9ydCB0aGUgcHJvamVjdApBIGZ1bmN0aW9u IHN5bWJvbCBhbmQvb3IgYSBzeW1ib2wgdG8gcmVxdWlyZSB0aGF0IHdpbGwgZW5hYmxlIGEK cHJvamVjdCBpbXBsZW1lbnRhdGlvbiB0byBiZSBjcmVhdGVkIHRvIHN1cHBvcnQgdGhlIGRl dGVjdGVkIHByb2plY3QuCioqKiBQcm9qZWN0IExvYWRpbmcgc2FmZXR5ClNvbWUgcHJvamVj dCB0eXBlcyBtaWdodCBuZWVkIHRvIGxvYWQgZWxpc3AtY29kZS1saWtlIHN0cnVjdHVyZXMg dG8KYnJpbmcgaW4gbWV0YSBkYXRhLiAgSWYgdGhpcyBpcyBwb3RlbnRpYWxseSB1bnNhZmUs IHRoZSBwcm9qZWN0IGxvYWRlcgpzaG91bGQgYXNrIHRoZSB1c2VyLCBvciBjb25zdWx0IGEg Y29uZmlndXJhdGlvbiwgYmVmb3JlIGFsbG93aW5nIGl0LgoqKiogRGV0ZWN0aW9uIG9yZGVy aW5nClNvbWUgcHJvamVjdCB0eXBlcyBhcmUgYSBzdWJzZXQgb2Ygb3RoZXIgcHJvamVjdCB0 eXBlcy4gIFByaW9yaXR5IG9mCnByb2plY3QgZGV0ZWN0aW9uL2xvYWRpbmcgc2hvdWxkIGJl IGEgcGFydCBvZiB0aGUgZGV0ZWN0aW9uIGRlY2xhcmF0aW9uLgoqKioqIEV4YW1wbGU6Ck1h a2VmaWxlIGJhc2VkIHByb2plY3QgY291bGQgZXhpc3Qgd2l0aCBhIC5naXQgcmVwb3NpdG9y eS4gIFRoZQpNYWtlZmlsZSBwcm9qZWN0IGlzIG1vcmUgc3BlY2lmaWMgdGhhbiB0aGUgLmdp dCByZXBvc2l0b3J5LCBhbmQKc2hvdWxkIGJlIHNlbGVjdGVkIGZpcnN0LgoKKiogVG9vbCBF eGFtcGxlCioqKiBBIHByb2plY3QgbWFuYWdlciAoSkRFRSwgRURFLCBldGMpClRoZXNlIHRv b2xzIG5lZWQgdG8gZGV0ZWN0IHByb2plY3RzIHRoYXQgYmVsb25nIHRvIHRoZW0sIGJ1dCBF REUgbWlnaHQKaWRlbnRpZnkgYW4gQU5UIHByb2plY3QsIGFuZCBKREVFIG1pZ2h0IGlkZW50 aWZ5IGl0cyAucHJqIGZpbGUsIGFuZAp0aGV5IHdvdWxkIGF0dGVtcHQgdG8gY28tZXhpc3Qg d2l0aG91dCBhIG1lZGlhdGluZyBnZW5lcmljIHByb2plY3QKc2VydmljZS4gIFdoZW4gYSB0 b29sIGFza3MgZm9yIHRoZSBjdXJyZW50IHByb2plY3QsIHRoZXJlIHNob3VsZCBiZQpvbmx5 IG9uZS4KCiogU2VydmljZTogUHJvamVjdCBDb21tYW5kcwpFbWFjcyBhbHJlYWR5IGhhcyBh IHdpZGUgcmFuZ2Ugb2YgdXNlZnVsIElERSBsaWtlIHRvb2xzLCBzdWNoIGFzCmBjb21waWxl JyBhbmQgYGd1ZCcuICBUaGVzZSBhcmUgZ2VuZXJpYywgYW5kIHJlcXVpcmUgdGhlIHVzZXIg dG8gdHlwZQppbiBhbnkgc3BlY2lmaWMgb3B0aW9ucyBuZWVkZWQgZm9yIHRoZWlyIHByb2pl Y3QuCgpHZW5lcmljIHByb2plY3RzIHNob3VsZCBwcm92aWRlIGludGVncmF0aW9uIHdpdGgg dGhvc2UgdG9vbHMsCmFuZCBsaWtlbHkgbXVsdGlwbGUgdmFyaWFudHMgcmVnYXJkaW5nIHRo ZSBwcm9qZWN0IGluIHF1ZXN0aW9uLiAgVGhlCnByb2plY3Qgc2VydmljZSBzaG91bGQgYWxs b3cgcHJvamVjdCBpbXBsZW1lbnRhdGlvbnMgdG8gYXVnbWVudCB0aGVzZQpjb3JlIGZlYXR1 cmVzIHdpdGggdmFyaWFudHMuCgoqKiBGZWF0dXJlcwoqKiogQ29tcGlsZSBpbnRlZ3JhdGlv bgpQcm9qZWN0cyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8gcHJvdmlkZSBk ZWZhdWx0IGNvbXBpbGUKYXJndW1lbnRzIGJhc2VkIG9uIHByb2plY3QgbWV0YSBkYXRhLiAg TXVsdGlwbGUgdmFyaWF0aW9ucyBzaG91bGQgYmUKYXZhaWxhYmxlIHN1Y2ggYXMgYHdob2xl IHByb2plY3QnIG9yIGBqdXN0IHRoaXMgdGhpbmcgaW4gbXkgYnVmZmVyJy4KKioqIEdVRCBp bnRlZ3JhdGlvbgpQcm92aWRlIGRlZmF1bHQgZGVidWdnZXIgY29tbWFuZHMsIGFuZCBhcmd1 bWVudHMgdG8gR1VEIHN1cHBvcnRlZApkZWJ1Z2dlciBjb21tYW5kcy4KKioqIFVwZGF0ZSBt ZXRhLWRhdGEKRW1hY3MgaXMgbm90IHRoZSBvbmx5IHByb2plY3Qgc3lzdGVtIG91dCB0aGVy ZSwgc28gdXNlcnMgc2hvdWxkIGhhdmUKYSB3YXkgdG8gZm9yY2UgYSBwcm9qZWN0IGltcGxl bWVudGF0aW9uIHRvIHJlZnJlc2ggaXRzZWxmIGZyb20Kb24tZGlzayBjaGFuZ2VzLgoqKiog UHJvamVjdCBicm93c2luZwpTdGFydCB1c2VycyBwcmVmZXJyZWQgZmlsZSBicm93c2luZyBw cm9qZWN0IGNsaWVudCBvbiB0aGUgcHJvamVjdC4KKioqKiBFeGFtcGxlczogRUNCLCBTcGVl ZGJhciwgRGlyZWQsIGV4dGVybmFsIGV4ZWN1dGFibGUKCiogU2VydmljZTogS2V5YmluZGlu ZyAvIE1lbnUgLyBUb29sYmFyIG1hbmFnZW1lbnQKUHJvamVjdCBpbXBsZW1lbnRhdGlvbnMg c2hvdWxkIGhhdmUgYSBzdGFuZGFyZCB3YXkgdG8gaW50ZWdyYXRlIGludG8KdGhlIERldmVs b3BtZW50IG1lbnUgd2hlcmUgdXNlcnMgZXhwZWN0IHByb2plY3QgY29tbWFuZHMgdG8gZXhp c3QuClVzZXIgY29tbWFuZHMgcHJvdmlkZWQgc2hvdWxkIGJlIGNvbnNpc3RlbnQgYmV0d2Vl biB0eXBlcyBvZiBwcm9qZWN0cy4KClRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gcHJvdmlk ZSBhIGhvbW9nZW5pemluZyBmb3JjZSBzbyB0aGF0CmRpZmZlcmVudCBwcm9qZWN0IGltcGxl bWVudGF0aW9ucyB3aWxsIGdhaW4gYSBzaW1pbGFyIGxvb2sgYW5kIGZlZWwKc28gdXNlcnMg Y2FuIG1vdmUgYmV0d2VlbiBkaWZmZXJlbnQgcHJvamVjdHMsIGFuZCBlbmpveSBjb25zaXN0 ZW50CmtleWJpbmRpbmdzIGFuZCBVSSBlbGVtZW50cy4KCioqIEZlYXR1cmVzCioqKiBPcmdh bml6ZWQgcHJvamVjdCBvcHRpb25zClRvb2xzIHNob3VsZCBiZSBsb2dpY2FsbHkgb3JnYW5p emVkIGluIHdoaWNoZXZlciBVSSBlbGVtZW50cyBhcmUKdXNlZCB0byBleHByZXNzIGl0Lgoq KiogRGVmYXVsdCBwcm9qZWN0IGNvbW1hbmRzClRoZXJlIHNob3VsZCBiZSBzb21lIGRlZmF1 bHQgcHJvamVjdCBjb21tYW5kcywgbGlrZSAnY29tcGlsZScgYnVpbHQgaW4uCioqKiBSb29t IGZvciBjdXN0b20gb3B0aW9ucwpUaGVyZSBzaG91bGQgYmUgYW4gZWFzeSB3YXkgZm9yIGEg cHJvamVjdCBpbXBsZW1lbnRhdGlvbiB0byBhZGQgbmV3Cml0ZW1zIGludG8gdGhlIGxvZ2lj YWwgZ3JvdXBpbmdzIHByb3ZpZGVkLgoKKiogRXhhbXBsZXMKKioqIEFyZHVpbm86IHVwbG9h ZCB0byBkZXYgYm9hcmQKQXJkdWlubyBwcm9qZWN0IGltcGxlbWVudGF0aW9uIG5lZWRzIHRv IGFkZCBhbiBlbnRyeSB0byB0aGUgbWVudQpzeXN0ZW0gdG8gdXBsb2FkIGEgcHJvamVjdCBv bnRvIHRoZSBkZXYgYm9hcmQsIHNlcGFyYXRlIGZyb20KY29tcGlsaW5nIHRvIGEgYmluYXJ5 LgoqKiogSkRFRSB2cyBFREUKQ29tcGlsZSBjb21tYW5kcyBhcmUgZGlmZmVyZW50IGJldHdl ZW4gSkRFRSBhbmQgRURFLiAgSWYgYSBzdGFuZGFyZAp3YXkgb2YgaW52b2tpbmcgdGhlIGRp c3BhcmF0ZSBjb21tYW5kcyB3ZXJlIGF2YWlsYWJsZSwgdXNlcnMgY291bGQKd29yayBpbiBD KysgYW5kIEphdmEgYW5kIHVzZSB0aGUgc2FtZSBrZXliaW5kaW5ncyBvciBtZW51cyBpbiBl YWNoLgoKKiBTZXJ2aWNlOiBQcm9qZWN0IExvY2FsIFZhcmlhYmxlcwpUb29scyBsaWtlIGRp ci1sb2NhbHMgcHJvdmlkZSBzb21lIGxldmVsIG9mIHRoaXMgZmVhdHVyZS4gIEdlbmVyaWMK cHJvamVjdHMgY291bGQgaGVscCBlbmFibGUgcHJvamVjdCBsb2NhbCB2YXJpYWJsZXMuCgoq IE1ldGEgRGF0YTogVmVyc2lvbgpQcm9qZWN0cyBzaG91bGQgcHJvdmlkZSBhIHdheSB0byBl eHRyYWN0IHZlcnNpb24gbnVtYmVycywgYW5kIG1ha2UKdGhlbSByZWFkaWx5IGF2YWlsYWJs ZSBzbyB1c2VycyBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtdWx0aXBsZQp2ZXJzaW9ucyBv ZiB0aGUgc2FtZSBjb2RlIGJhc2UuCgoqIE1ldGEgRGF0YTogQXJiaXRyYXJ5ClByb2plY3Qg aW1wbGVtZW50YXRpb25zIHNob3VsZCBoYXZlIGEgd2F5IHRvIHByb3ZpZGUgdGhlaXIgb3du IG1ldGEKZGF0YSB0byBleHRlcm5hbCBjb21tYW5kcywgYW5kIGhhdmUgYSB3YXkgdG8gbmVn b3RpYXRlIGZvciBjb21tb25hbGl0eQpiZXR3ZWVuIHByb2plY3QgaW1wbGVtZW50YXRpb25z IHRoYXQgc3VwcG9ydCB0aGUgc2FtZSBjb25jZXB0LgoKKiBNZXRhIERhdGE6IENsaWVudCBE YXRhClByb2plY3QgY2xpZW50cyB0aGF0IGRldmVsb3AgYSB1c2VyIHNlcnZpY2UgYmFzZWQg b24gZ2VuZXJpYyBwcm9qZWN0CmRhdGEgc2hvdWxkIGhhdmUgYSB3YXkgdG8gcHJvdmlkZSB0 aGVpciBvd24gZGF0YSB0byBhIHByb2plY3Qgd2hlcmUKdGhlIG9yaWdpbmFsIHByb2plY3Qg aW1wbGVtZW50YXRpb24gYXV0aG9yIG1heSBub3Qga25vdyB3aGF0IGlzCm5lZWRlZC4KCioq IEV4YW1wbGVzCioqKiBGbHltYWtlCkZseW1ha2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gYXNr IGZvciBtZXRhIGRhdGEgYWJvdXQgY29tcGlsYXRpb24sIGFuZAppZiB0aGUgcHJvamVjdCBp bXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnQgaXQsIHRoZXJlIHNob3VsZCBiZSBubwpl cnJvcnMsIGFuZCBGbHltYWtlIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgYW55dGhpbmcgc3Bl Y2lmaWMgYWJvdXQKYWxsIGltcGxlbWVudGF0aW9ucyB0aGF0IG1pZ2h0IHN1cHBvcnQgaXQu CioqKiBVc2VyIE9wdGlvbiBmb3IgY2xpZW50ClRoZSBwcm9qZWN0IGNsaWVudCAncHJvamVj dGlsZScgY2FuIHRvZ2dsZSBiZXR3ZWVuIGNvZGUgYW5kIHRlc3QsIGJ1dAp0aGUgcHJvamVj dCBpbXBsZW1lbnRhdGlvbiBhdXRob3IgZGlkbid0IGFjY291bnQgZm9yIHRoYXQuClByb2pl Y3RpbGUgd2lsbCBuZWVkIHRvIGFzc29jaWF0ZSB1c2VyIHN1cHBsaWVkIG1ldGEtZGF0YSBh Ym91dCB0ZXN0CmxvY2F0aW9ucyB3aXRoIHRoZSBwcm9qZWN0LgoKUHV6emxlIC0gcGVyc2lz dGVuY2U/CgoqIFNlcnZpY2U6IEZpbmRpbmcgRmlsZXMKRmluZGluZyBmaWxlcyBjb21lcyBp biBhIGNvdXBsZSBkaWZmZXJlbnQgZmxhdm9ycy4KMSkgVXNlciB3YW50cyB0byB2aXNpdCBh IGZpbGUgdmlhIGEgJ3Nob3J0IG5hbWUnLCBhbmQgdGhlIHByb2plY3QgY2FuCiAgIGZpbmQg aXQuCjIpIENvZGUgb2Z0ZW4gcmVmZXJzIHRvIG90aGVyIGZpbGVzIHVzaW5nIGEgc2hvcnQg bmFtZSwgYW5kIHJlZmVycyB0bwogICBhbiAnaW5jbHVkZSBwYXRoJyBjb25jZXB0IGluIHRo ZSBwcm9qZWN0IHRvIGZpbmQgaXQuCgoqKiBGZWF0dXJlczoKKioqIEVuYWJsZSBhIHByb2pl Y3QgY2xpZW50IHRvIHByb3ZpZGUgdXNlciB0b29scyB0byAnanVtcCcgdG8gYSBmaWxlLgoq KiogRW5hYmxlIGxhbmd1YWdlIHNwZWNpZmljICdpbmNsdWRlIHBhdGgnIGNvbmNlcHQKVXNl ZnVsIHdoZW4gbXVsdGlwbGUgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGV4aXN0LCBhbmQg YXJlCmRpc3Rpbmd1aXNoZWQgYnkgbG9jYXRpb24uCioqIEV4YW1wbGVzCioqKiBDKysgaW5j bHVkZSBwYXRoClRoZSBzZW1hbnRpYyBzbWFydCBjb21wbGV0aW9uIGVuZ2luZSBkZXBlbmRz IG9uIGluY2x1ZGUgcGF0aHMgdG8gZmluZApoZWFkZXJzIHdoaWNoIHByb3ZpZGUgZGVmaW5p dGlvbnMgdG8gY29tcGxldGUgb24uCioqKiBKYXZhIENsYXNzcGF0aApTZW1hbnRpYyBkZXBl bmRzIG9uIGEgamF2YSBjbGFzc3BhdGggdG8gZmluZCBqYXIgZmlsZXMgZnJvbSB3aGljaCBp dApleHRyYWN0cyBzeW1ib2wgaW5mb3JtYXRpb24gdXNlZCBmb3Igc21hcnQgY29tcGxldGlv bi4KKioqIGNzY29wZSBvciBHTlUgR2xvYmFsIGludGVncmF0aW9uIGFzIHByb2plY3Qgc2Vy dmljZQpUaGVzZSB0b29scyB0cmFjayBub3QganVzdCByZWZlcmVuY2VzLCBidXQgZmlsZXMg aW4gYSBwcm9qZWN0LCBhbmQKaGF2ZSBlYXN5IHdheXMgdG8gY29udmVydCBhIHNob3J0IGZp bGUgbmFtZSBpbnRvIGEgZnVsbCBwYXRoIG5hbWUuCioqKiBwcm9qZWN0IGNsaWVudCB0byBq dW1wIGZyb20gJ2luY2x1ZGUnIHN0YXRlbWVudCBpbiBDKysgdG8gdGhlIGZpbGUKKioqIHBy b2plY3QgY2xpZW50IHRvIGp1bXAgYmV0d2VlbiBhIHNyYyBmaWxlICh4bWwsIGV0YykgdG8g Z2VuZXJhdGVkIG91dHB1dC4KCiogQ29tbWFuZDogTG9hZCBhIHByb2plY3Q7ICAgU2Vydmlj ZTogS25vd24gdW5vcGVuZWQgcHJvamVjdHMKVGhlIGdlbmVyaWMgcHJvamVjdCBzeXN0ZW0g c2hvdWxkIGhhdmUgYSBoYW5keSB3YXkgdG8gcHJvdmlkZSBhCmNvbXBsZXRpb24gbGlzdCBv ZiBrbm93biBwcm9qZWN0cyBhIHVzZXIgbWlnaHQgY2hvb3NlIHRvIGxvYWQuCgpQcm9qZWN0 IGxpc3RzIG1pZ2h0IGJlIHByb3ZpZGVkIGJ5IHJlY29yZGluZyBhbGwgcHJvamVjdHMgYSB1 c2VyIG1heQpoYXZlIHByZXZpb3VzbHkgb3BlbmVkLCBvciB2aWEgc2NhbiBvZiBhcmVhcyBy ZWxldmFudCB0byB0aGUgdXNlci4KCioqIEV4YW1wbGVzOgoqKiogZGVza3RvcApBIHByb2pl Y3QgY2xpZW50IG1pZ2h0IGFzc29jaWF0ZWQgYSB3b3JraW5nIHNldCBvZiBidWZmZXJzIHRv IGxvYWQgdXBvbgpvcGVuaW5nIGEgcHJvamVjdC4KCiogVGhpbmc6IE11bHRpcGxlIGFjdGl2 aXRpZXMgb24gb25lIHByb2plY3QKUHJvamVjdHMgdXN1YWxseSBoYXZlIG11bHRpcGxlIGFj dGl2aXRpZXMgaW4gdGhlbS4gIEF0IHRoZSBtb3N0IGJhc2ljCnRoZXJlIGFyZSAnZ2V0IGl0 IHJlYWR5IHRvIHVzZScgc3VwcG9ydCBmaWxlcywgc3VjaCBhcyBjb21waWxhdGlvbgpzeXN0 ZW0sIElOU1RBTEwgZG9jLCBldGMsIGFuZCB0aGUgc291cmNlIGNvZGUuICBGdWxsIHByb2pl Y3QKZG9jdW1lbnRhdGlvbiwgYW5kIG11bHRpLWZlYXR1cmUgcHJvamVjdHMgaGF2ZSBtdWx0 aXBsZSBidWlsZAp0YXJnZXRzLCBhbmQgY29tcGxleCBidWlsZCBzeXN0ZW1zLgoKVGhlIGdl bmVyaWMgcHJvamVjdCBzaG91bGQgY29uc2lkZXIgc3VwcG9ydGluZyBjb25jZXB0cyBmb3Ig bXVsdGlwbGUKYWN0aXZpdGllcyBpbiBvbmUgcHJvamVjdC4KCioqIEV4YW1wbGVzCioqKiBg Y29tcGlsZScga25vd3Mgd2hpY2ggdGhpbmcgdG8gY29tcGlsZSBpbiBhIHByb2plY3QKKioq IExhbmd1YWdlIHNwZWNpZmljaXR5Ck9wZXJhdGlvbnMgaW4gYSBwYXJ0aWN1bGFyIGxhbmd1 YWdlIHJlc3RyaWN0ZWQgdG8gb3RoZXIgZmlsZXMgb2YgdGhhdApsYW5ndWFnZS4KKioqIENv ZGUgJiBEb2MKRW5hYmxlIGEgcHJvamVjdCBjbGllbnQgdG8gc3VwcG9ydCBuYXZpZ2F0aW5n IGJldHdlZW4gY29kZSBhbmQgZG9jLgo= --------------090700070200030803050405--