From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Noah Lavine Newsgroups: gmane.lisp.guile.devel Subject: Re: PEG Patches Date: Mon, 28 Mar 2011 16:44:37 -0400 Message-ID: References: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=20cf307f3b9c163544049f9103f9 X-Trace: dough.gmane.org 1301345155 1081 80.91.229.12 (28 Mar 2011 20:45:55 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 28 Mar 2011 20:45:55 +0000 (UTC) Cc: guile-devel To: Andy Wingo Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Mon Mar 28 22:45:51 2011 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Q4JJi-0003jd-QJ for guile-devel@m.gmane.org; Mon, 28 Mar 2011 22:45:51 +0200 Original-Received: from localhost ([127.0.0.1]:60845 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q4JJh-0004Ca-FO for guile-devel@m.gmane.org; Mon, 28 Mar 2011 16:45:37 -0400 Original-Received: from [140.186.70.92] (port=58689 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q4JIm-0003ZM-C5 for guile-devel@gnu.org; Mon, 28 Mar 2011 16:44:41 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q4JIl-0002T8-7R for guile-devel@gnu.org; Mon, 28 Mar 2011 16:44:40 -0400 Original-Received: from mail-vx0-f169.google.com ([209.85.220.169]:60273) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q4JIk-0002Sz-VY for guile-devel@gnu.org; Mon, 28 Mar 2011 16:44:39 -0400 Original-Received: by vxk20 with SMTP id 20so2838841vxk.0 for ; Mon, 28 Mar 2011 13:44:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=Y02IJBbVCRKLUSdROsTGsm7Vyw4gnuER4HnP0ZBpGEc=; b=e15KJY8idzCz7paZ+CwxcxP2ifRJESeYl9I/LvwXzbn09aWMSDMfxkpR6EntgumWZO D2NxqS5QStf9689BXhLYGugX8gfsN4ljRvUv9GL69+b5a39bMmRXDS8xts5Jvd+7YnFj DCbtuq0SWI8cE0OVjFil8z617KtiAAEX34fxo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; b=UbGzVTbOrwA8oZWdt28folyn0ASgiXGjqrTVoeB/WB6c36BMb1DqtJCvXfOKD3kfYr 3X245V2cPfT4nwWvfPlZhaZj64Zct1KUy5ZnXDfjOl8+ytuEaYNpKNLpy4omZvLomx5F X/NU5WUh4TGoOyfJNK8zQss7nPXnJqsRrd0V0= Original-Received: by 10.52.66.135 with SMTP id f7mr6032273vdt.198.1301345077703; Mon, 28 Mar 2011 13:44:37 -0700 (PDT) Original-Received: by 10.52.166.194 with HTTP; Mon, 28 Mar 2011 13:44:37 -0700 (PDT) In-Reply-To: X-Google-Sender-Auth: ewrxly7WSn8AFsdKxX9vyGmNfBI X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 209.85.220.169 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:12030 Archived-At: --20cf307f3b9c163544049f9103f9 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi, > I think the solution is to confront the circularity directly. =A0It exist= s > because the PEG s-exp grammar also deals with the string grammar, which > needs an already-build PEG parser. > > Let's break it instead into layers without cycles: removing the string > grammar from the s-exp code generator. =A0If we want a layer with both, w= e > build it on top of the two lower layers. > > What do you think? I've been working on that. The attached two patches break the circularity. The code still isn't organized brilliantly, but after applying these I think we would only want pretty minor cleanups before merging PEG into the main branch. However, there's an interesting issue which I am not sure how to confront. Here it is: Currently, peg-sexp-compile is defined as a big case statement: (define (peg-sexp-compile pattern accum) (syntax-case pattern (....) )) What these patches do is take out the case for embedded PEG strings, so the case statement has one fewer case. Then they add a new function peg-extended-compile, defined by (define (peg-extended-compile pattern accum) (syntax-case pattern (peg) ((peg str) (string? (syntax->datum #'str)) (peg-string-compile #'str (if (eq? accum 'all) 'body accum))) (else (peg-sexp-compile pattern accum)))) peg-string-compile takes a string, parses it, and then calls peg-sexp-compile on the result, so this is noncircular. Unfortunately, this sacrifices a feature. The trouble is that the cases in peg-sexp-compile call peg-sexp-compile on parts of themselves, because PEG expressions are recursive. Those inner PEG expressions can never contain embedded string PEGs with this definition, because those calls never go through peg-extended-compile. I see a few options: - say that string PEGs can only occur at the top level of a PEG expression. The peg module has never been released, so no one uses this feature now anyway. - instead of defining a new function peg-extended-compile, redefine peg-sexp-compile via set! once we have string pegs. - write peg-extended-compile as its own big case statement, basically duplicating peg-sexp-compile. - adopt some interface that allows people to extend the cases in peg-sexp-compile. We would start with just s-expression PEGs, then use this interface to add string PEGs later in the load sequence. The second and third options seem hackish to me. The third option is especially bad because I think some of the calls to peg-sexp-compile are in helper functions that peg-sexp-compile calls, so we might have to duplicate most of codegen.scm to make this work. The fourth option seems elegant, but I'm not sure what a good interface for that is. Is there anything in Guile now that can idiomatically be used for an extensible list of cases? It seems almost like something GOOPS would do, but not quite. I am also a bit concerned about the fourth option because it could become an interface that is only ever used once, and might just add unnecessary complexity. I think the first option is the best one for now, because it doesn't require much work and it would allow a smooth transition if we ever enable non-top-level PEG strings in the future. What do other people think? Noah --20cf307f3b9c163544049f9103f9 Content-Type: application/octet-stream; name="0001-Move-define-nonterm.patch" Content-Disposition: attachment; filename="0001-Move-define-nonterm.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gltus1bw0 RnJvbSAyOTZhMzFkMGVjZjNhNmY3NTg4NzFmOWMzZGMyYjY5Mzc1OTJiMjVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIExhdmluZSA8bmxhdmluZUBoYXZlcmZvcmQuZWR1PgpE YXRlOiBNb24sIDI4IE1hciAyMDExIDE1OjEzOjM1IC0wNDAwClN1YmplY3Q6IFtQQVRDSCAxLzJd IE1vdmUgZGVmaW5lLW5vbnRlcm0KCiogbW9kdWxlL2ljZS05L3BlZy9zdHJpbmctcGVnLnNjbTog cmVtb3ZlIGRlZmluZS1ub250ZXJtIGFuZCBtYWtlIGEgc2ltcGxlcgogICBtYWNybyBjYWxsZWQg YGRlZmluZS1zZXhwLXBhcnNlcicgdG8gbWFrZSB0aGUgUEVHIGdyYW1tYXIKKiBtb2R1bGUvaWNl LTkvcGVnLnNjbTogbW92ZSBkZWZpbmUtbm9udGVybSBtYWNybyB0byB0aGlzIGZpbGUKKiBtb2R1 bGUvaWNlLTkvcGVnL2NvZGVnZW4uc2NtOiBtb3ZlIGNvZGUgdG8gd3JhcCBhIHBhcnNlciByZXN1 bHQgbmljZWx5IHRvCiAgIHRoaXMgZmlsZSwgdW5kZXIgbmFtZSBgd3JhcC1wYXJzZXItZm9yLXVz ZXJzJwotLS0KIG1vZHVsZS9pY2UtOS9wZWcuc2NtICAgICAgICAgICAgfCAgIDMzICsrKysrKysr KysrLQogbW9kdWxlL2ljZS05L3BlZy9jb2RlZ2VuLnNjbSAgICB8ICAgMjkgKysrKysrKysrKy0K IG1vZHVsZS9pY2UtOS9wZWcvc3RyaW5nLXBlZy5zY20gfCAgMTA3ICsrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA4OSBpbnNlcnRpb25zKCsp LCA4MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9tb2R1bGUvaWNlLTkvcGVnLnNjbSBiL21v ZHVsZS9pY2UtOS9wZWcuc2NtCmluZGV4IDY0NGFmNmQuLjRmNGJiZjggMTAwNjQ0Ci0tLSBhL21v ZHVsZS9pY2UtOS9wZWcuc2NtCisrKyBiL21vZHVsZS9pY2UtOS9wZWcuc2NtCkBAIC0xOSw3ICsx OSw3IEBACiAKIChkZWZpbmUtbW9kdWxlIChpY2UtOSBwZWcpCiAgICM6ZXhwb3J0IChwZWctcGFy c2UKLTsgICAgICAgICAgICBkZWZpbmUtbm9udGVybQorICAgICAgICAgICAgZGVmaW5lLW5vbnRl cm0KIDsgICAgICAgICAgICBkZWZpbmUtbm9udGVybS1mCiAgICAgICAgICAgICBwZWctbWF0Y2gp CiA7ICAjOmV4cG9ydC1zeW50YXggKGRlZmluZS1ub250ZXJtKQpAQCAtMzAsNyArMzAsNyBAQAog ICAjOnJlLWV4cG9ydCAocGVnLXNleHAtY29tcGlsZQogICAgICAgICAgICAgICAgZGVmaW5lLWdy YW1tYXIKICAgICAgICAgICAgICAgIGRlZmluZS1ncmFtbWFyLWYKLSAgICAgICAgICAgICAgIGRl ZmluZS1ub250ZXJtCis7ICAgICAgICAgICAgICAgZGVmaW5lLW5vbnRlcm0KICAgICAgICAgICAg ICAgIGtleXdvcmQtZmxhdHRlbgogICAgICAgICAgICAgICAgY29udGV4dC1mbGF0dGVuCiAgICAg ICAgICAgICAgICBwZWc6c3RhcnQKQEAgLTY3LDYgKzY3LDM1IEBAIGV4ZWN1dGUgdGhlIFNUTVRz IGFuZCB0cnkgYWdhaW4uIgogICAgICAgICAjZgogICAgICAgICAobWFrZS1wcmVjIDAgKGNhciBy ZXMpIHN0cmluZyAoc3RyaW5nLWNvbGxhcHNlIChjYWRyIHJlcykpKSkpKQogCis7OyBUaGUgcmVz dWx0cyBvZiBwYXJzaW5nIHVzaW5nIGEgbm9udGVybWluYWwgYXJlIGNhY2hlZC4gIFRoaW5rIG9m IGl0IGxpa2UgYQorOzsgaGFzaCB3aXRoIG5vIGNvbmZsaWN0IHJlc29sdXRpb24uICBQcm9jZXNz IGZvciBkZWNpZGluZyBvbiB0aGUgY2FjaGUgc2l6ZQorOzsgd2Fzbid0IHZlcnkgc2NpZW50aWZp YzsganVzdCByYW4gdGhlIGJlbmNobWFya3MgYW5kIHN0b3BwZWQgYSBsaXR0bGUgYWZ0ZXIKKzs7 IHRoZSBwb2ludCBvZiBkaW1pbmlzaGluZyByZXR1cm5zIG9uIG15IGJveC4KKyhkZWZpbmUgKmNh Y2hlLXNpemUqIDUxMikKKworOzsgRGVmaW5lcyBhIG5ldyBub250ZXJtaW5hbCBzeW1ib2wgYWNj dW11bGF0aW5nIHdpdGggQUNDVU0uCisoZGVmaW5lLXN5bnRheCBkZWZpbmUtbm9udGVybQorICAo bGFtYmRhICh4KQorICAgIChzeW50YXgtY2FzZSB4ICgpCisgICAgICAoKF8gc3ltIGFjY3VtIHBh dCkKKyAgICAgICAobGV0ICgobWF0Y2hmIChwZWctc2V4cC1jb21waWxlICMncGF0IChzeW50YXgt PmRhdHVtICMnYWNjdW0pKSkKKyAgICAgICAgICAgICAoYWNjdW1zeW0gKHN5bnRheC0+ZGF0dW0g IydhY2N1bSkpCisgICAgICAgICAgICAgKGMgKGRhdHVtLT5zeW50YXggeCAoZ2Vuc3ltKSkpKTs7 IHRoZSBjYWNoZQorICAgICAgICAgOzsgQ09ERSBpcyB0aGUgY29kZSB0byBwYXJzZSB0aGUgc3Ry aW5nIGlmIHRoZSByZXN1bHQgaXNuJ3QgY2FjaGVkLgorICAgICAgICAgKGxldCAoKHN5biAod3Jh cC1wYXJzZXItZm9yLXVzZXJzIHggbWF0Y2hmIGFjY3Vtc3ltICMnc3ltKSkpCisgICAgICAgICAg ICNgKGJlZ2luCisgICAgICAgICAgICAgICAoZGVmaW5lICMsYyAobWFrZS12ZWN0b3IgKmNhY2hl LXNpemUqICNmKSk7OyB0aGUgY2FjaGUKKyAgICAgICAgICAgICAgIChkZWZpbmUgKHN5bSBzdHIg c3RybGVuIGF0KQorICAgICAgICAgICAgICAgICAobGV0KiAoKHZyZWYgKHZlY3Rvci1yZWYgIyxj IChtb2R1bG8gYXQgKmNhY2hlLXNpemUqKSkpKQorICAgICAgICAgICAgICAgICAgIDs7IENoZWNr IHRvIHNlZSB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBjYWNoZWQuCisgICAgICAgICAgICAgICAgICAg KGlmIChhbmQgdnJlZiAoZXE/IChjYXIgdnJlZikgc3RyKSAoPSAoY2FkciB2cmVmKSBhdCkpCisg ICAgICAgICAgICAgICAgICAgICAgIChjYWRkciB2cmVmKTs7IElmIGl0IGlzIHJldHVybiBpdC4K KyAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGZyZXMgOzsgRWxzZSBjYWxjdWxhdGUgaXQg YW5kIGNhY2hlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCMsc3luIHN0ciBz dHJsZW4gYXQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yLXNldCEgIyxjICht b2R1bG8gYXQgKmNhY2hlLXNpemUqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGlzdCBzdHIgYXQgZnJlcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcykp KSkpKSkpKSkpCisKIDs7IFNlYXJjaGVzIHRocm91Z2ggU1RSSU5HIGZvciBzb21ldGhpbmcgdGhh dCBwYXJzZXMgdG8gUEVHLU1BVENIRVIuICBUaGluawogOzsgcmVnZXhwIHNlYXJjaC4KIChkZWZp bmUtc3ludGF4IHBlZy1tYXRjaApkaWZmIC0tZ2l0IGEvbW9kdWxlL2ljZS05L3BlZy9jb2RlZ2Vu LnNjbSBiL21vZHVsZS9pY2UtOS9wZWcvY29kZWdlbi5zY20KaW5kZXggMmM4NWNjYy4uMDgwNGQx ZSAxMDA2NDQKLS0tIGEvbW9kdWxlL2ljZS05L3BlZy9jb2RlZ2VuLnNjbQorKysgYi9tb2R1bGUv aWNlLTkvcGVnL2NvZGVnZW4uc2NtCkBAIC0xOCw3ICsxOCw3IEBACiA7Ozs7CiAKIChkZWZpbmUt bW9kdWxlIChpY2UtOSBwZWcgY29kZWdlbikKLSAgIzpleHBvcnQgKHBlZy1zZXhwLWNvbXBpbGUp CisgICM6ZXhwb3J0IChwZWctc2V4cC1jb21waWxlIHdyYXAtcGFyc2VyLWZvci11c2VycykKICAg Izp1c2UtbW9kdWxlIChpY2UtOSBwZWcpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgcGVnIHN0cmlu Zy1wZWcpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgcHJldHR5LXByaW50KQpAQCAtMjQ0LDMgKzI0 NCwzMCBAQCByZXR1cm4gRVhQLiIKICAgICAgICAgICAgICAgICAgICAgICAobGl0CiAgICAgICAg ICAgICAgICAgICAgICAgICNgKGFuZCBzdWNjZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjLChjZ2dyIGFjY3VtICdjZy1ib2R5ICMnKHJldmVyc2UgYm9keSkgIyduZXctZW5kKSkp KSkpKSkpKSkKKworOzsgUGFja2FnZXMgdGhlIHJlc3VsdHMgb2YgYSBwYXJzZXIKKyhkZWZpbmUg KHdyYXAtcGFyc2VyLWZvci11c2VycyBmb3Itc3ludGF4IHBhcnNlciBhY2N1bXN5bSBzLXN5bikK KyAgICNgKGxhbWJkYSAoc3RyIHN0cmxlbiBhdCkKKyAgICAgIChsZXQgKChyZXMgKCMscGFyc2Vy IHN0ciBzdHJsZW4gYXQpKSkKKyAgICAgICAgOzsgVHJ5IHRvIG1hdGNoIHRoZSBub250ZXJtaW5h bC4KKyAgICAgICAgKGlmIHJlcworICAgICAgICAgICAgOzsgSWYgd2UgbWF0Y2hlZCwgZG8gc29t ZSBwb3N0LXByb2Nlc3NpbmcgdG8gZmlndXJlIG91dAorICAgICAgICAgICAgOzsgd2hhdCBkYXRh IHRvIHByb3BhZ2F0ZSB1cHdhcmQuCisgICAgICAgICAgICAobGV0ICgoYXQgKGNhciByZXMpKQor ICAgICAgICAgICAgICAgICAgKGJvZHkgKGNhZHIgcmVzKSkpCisgICAgICAgICAgICAgICMsKGNv bmQKKyAgICAgICAgICAgICAgICAgKChlcT8gYWNjdW1zeW0gJ25hbWUpCisgICAgICAgICAgICAg ICAgICAjYChsaXN0IGF0ICcjLHMtc3luKSkKKyAgICAgICAgICAgICAgICAgKChlcT8gYWNjdW1z eW0gJ2FsbCkKKyAgICAgICAgICAgICAgICAgICNgKGxpc3QgKGNhciByZXMpCisgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5vdCAo bGlzdD8gYm9keSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJyMscy1zeW4g Ym9keSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG51bGw/IGJvZHkpICcjLHMtc3lu KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzeW1ib2w/IChjYXIgYm9keSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJyMscy1zeW4gYm9keSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZWxzZSAoY29ucyAnIyxzLXN5biBib2R5KSkpKSkKKyAgICAgICAg ICAgICAgICAgKChlcT8gYWNjdW1zeW0gJ25vbmUpICNgKGxpc3QgKGNhciByZXMpICcoKSkpCisg ICAgICAgICAgICAgICAgIChlbHNlICNgKGJlZ2luIHJlcykpKSkKKyAgICAgICAgICAgIDs7IElm IHdlIGRpZG4ndCBtYXRjaCwganVzdCByZXR1cm4gZmFsc2UuCisgICAgICAgICAgICAjZikpKSkK ZGlmZiAtLWdpdCBhL21vZHVsZS9pY2UtOS9wZWcvc3RyaW5nLXBlZy5zY20gYi9tb2R1bGUvaWNl LTkvcGVnL3N0cmluZy1wZWcuc2NtCmluZGV4IGY3ZTIxZjYuLmE4OTk3MjcgMTAwNjQ0Ci0tLSBh L21vZHVsZS9pY2UtOS9wZWcvc3RyaW5nLXBlZy5zY20KKysrIGIvbW9kdWxlL2ljZS05L3BlZy9z dHJpbmctcGVnLnNjbQpAQCAtMjIsMTYgKzIyLDExIEBACiAgICAgICAgICAgICBwZWctYXMtcGVn CiAgICAgICAgICAgICBkZWZpbmUtZ3JhbW1hcgogICAgICAgICAgICAgZGVmaW5lLWdyYW1tYXIt ZgotICAgICAgICAgICAgZGVmaW5lLW5vbnRlcm0KICAgICAgICAgICAgIHBlZy1ncmFtbWFyKQog ICAjOnVzZS1tb2R1bGUgKGljZS05IHBlZykKLSAgIzp1c2UtbW9kdWxlIChpY2UtOSBwZWcgY29k ZWdlbikpCi0KLTs7IFRoZSByZXN1bHRzIG9mIHBhcnNpbmcgdXNpbmcgYSBub250ZXJtaW5hbCBh cmUgY2FjaGVkLiAgVGhpbmsgb2YgaXQgbGlrZSBhCi07OyBoYXNoIHdpdGggbm8gY29uZmxpY3Qg cmVzb2x1dGlvbi4gIFByb2Nlc3MgZm9yIGRlY2lkaW5nIG9uIHRoZSBjYWNoZSBzaXplCi07OyB3 YXNuJ3QgdmVyeSBzY2llbnRpZmljOyBqdXN0IHJhbiB0aGUgYmVuY2htYXJrcyBhbmQgc3RvcHBl ZCBhIGxpdHRsZSBhZnRlcgotOzsgdGhlIHBvaW50IG9mIGRpbWluaXNoaW5nIHJldHVybnMgb24g bXkgYm94LgotKGRlZmluZSAqY2FjaGUtc2l6ZSogNTEyKQorICAjOnVzZS1tb2R1bGUgKGljZS05 IHBlZyBjb2RlZ2VuKQorICAjOnVzZS1tb2R1bGUgKGljZS05IHBlZyBtYXRjaC1yZWNvcmQpCisg ICM6dXNlLW1vZHVsZSAoaWNlLTkgcGVnIHNpbXBsaWZ5LXRyZWUpKQogCiA7OyBHZXRzIHRoZSBs ZWZ0LWhhbmQgZGVwdGggb2YgYSBsaXN0LgogKGRlZmluZSAoZGVwdGggbHN0KQpAQCAtMzksNTgg KzM0LDYgQEAKICAgICAgIDAKICAgICAgICgrIDEgKGRlcHRoIChjYXIgbHN0KSkpKSkKIAotKGV2 YWwtd2hlbiAoY29tcGlsZSBsb2FkIGV2YWwpCi0oZGVmaW5lIChzeW50YXgtZm9yLW5vbi1jYWNo ZS1jYXNlIGZvci1zeW50YXggbWF0Y2hmLXN5biBhY2N1bXN5bSBzLXN5bikKLTsgIChsZXQgKCht YXRjaGYtc3luIChkYXR1bS0+c3ludGF4IGZvci1zeW50YXggbWF0Y2hmKSkpCi0gICAjYChsYW1i ZGEgKHN0ciBzdHJsZW4gYXQpCi0gICAgICAobGV0ICgocmVzICgjLG1hdGNoZi1zeW4gc3RyIHN0 cmxlbiBhdCkpKQotICAgICAgICA7OyBUcnkgdG8gbWF0Y2ggdGhlIG5vbnRlcm1pbmFsLgotICAg ICAgICAoaWYgcmVzCi0gICAgICAgICAgICA7OyBJZiB3ZSBtYXRjaGVkLCBkbyBzb21lIHBvc3Qt cHJvY2Vzc2luZyB0byBmaWd1cmUgb3V0Ci0gICAgICAgICAgICA7OyB3aGF0IGRhdGEgdG8gcHJv cGFnYXRlIHVwd2FyZC4KLSAgICAgICAgICAgIChsZXQgKChhdCAoY2FyIHJlcykpCi0gICAgICAg ICAgICAgICAgICAoYm9keSAoY2FkciByZXMpKSkKLSAgICAgICAgICAgICAgIywoY29uZAotICAg ICAgICAgICAgICAgICAoKGVxPyBhY2N1bXN5bSAnbmFtZSkKLSAgICAgICAgICAgICAgICAgICNg KGxpc3QgYXQgJyMscy1zeW4pKQotICAgICAgICAgICAgICAgICAoKGVxPyBhY2N1bXN5bSAnYWxs KQotICAgICAgICAgICAgICAgICAgI2AobGlzdCAoY2FyIHJlcykKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgobm90IChsaXN0PyBi b2R5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnIyxzLXN5biBib2R5KSkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICgobnVsbD8gYm9keSkgJyMscy1zeW4pCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAoKHN5bWJvbD8gKGNhciBib2R5KSkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobGlzdCAnIyxzLXN5biBib2R5KSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIChlbHNlIChjb25zICcjLHMtc3luIGJvZHkpKSkpKQotICAgICAgICAgICAgICAg ICAoKGVxPyBhY2N1bXN5bSAnbm9uZSkgI2AobGlzdCAoY2FyIHJlcykgJygpKSkKLSAgICAgICAg ICAgICAgICAgKGVsc2UgI2AoYmVnaW4gcmVzKSkpKQotICAgICAgICAgICAgOzsgSWYgd2UgZGlk bid0IG1hdGNoLCBqdXN0IHJldHVybiBmYWxzZS4KLSAgICAgICAgICAgICNmKSkpKQotKQotCi07 OyBEZWZpbmVzIGEgbmV3IG5vbnRlcm1pbmFsIHN5bWJvbCBhY2N1bXVsYXRpbmcgd2l0aCBBQ0NV TS4KLShkZWZpbmUtc3ludGF4IGRlZmluZS1ub250ZXJtCi0gIChsYW1iZGEgKHgpCi0gICAgKHN5 bnRheC1jYXNlIHggKCkKLSAgICAgICgoXyBzeW0gYWNjdW0gcGF0KQotICAgICAgIChsZXQgKCht YXRjaGYgKHBlZy1zZXhwLWNvbXBpbGUgIydwYXQgKHN5bnRheC0+ZGF0dW0gIydhY2N1bSkpKQot ICAgICAgICAgICAgIChhY2N1bXN5bSAoc3ludGF4LT5kYXR1bSAjJ2FjY3VtKSkKLSAgICAgICAg ICAgICAoYyAoZGF0dW0tPnN5bnRheCB4IChnZW5zeW0pKSkpOzsgdGhlIGNhY2hlCi0gICAgICAg ICA7OyBDT0RFIGlzIHRoZSBjb2RlIHRvIHBhcnNlIHRoZSBzdHJpbmcgaWYgdGhlIHJlc3VsdCBp c24ndCBjYWNoZWQuCi0gICAgICAgICAobGV0ICgoc3luIChzeW50YXgtZm9yLW5vbi1jYWNoZS1j YXNlIHggbWF0Y2hmIGFjY3Vtc3ltICMnc3ltKSkpCi0gICAgICAgICAgICNgKGJlZ2luCi0gICAg ICAgICAgICAgICAoZGVmaW5lICMsYyAobWFrZS12ZWN0b3IgKmNhY2hlLXNpemUqICNmKSk7OyB0 aGUgY2FjaGUKLSAgICAgICAgICAgICAgIChkZWZpbmUgKHN5bSBzdHIgc3RybGVuIGF0KQotICAg ICAgICAgICAgICAgICAobGV0KiAoKHZyZWYgKHZlY3Rvci1yZWYgIyxjIChtb2R1bG8gYXQgKmNh Y2hlLXNpemUqKSkpKQotICAgICAgICAgICAgICAgICAgIDs7IENoZWNrIHRvIHNlZSB3aGV0aGVy IHRoZSB2YWx1ZSBpcyBjYWNoZWQuCi0gICAgICAgICAgICAgICAgICAgKGlmIChhbmQgdnJlZiAo ZXE/IChjYXIgdnJlZikgc3RyKSAoPSAoY2FkciB2cmVmKSBhdCkpCi0gICAgICAgICAgICAgICAg ICAgICAgIChjYWRkciB2cmVmKTs7IElmIGl0IGlzIHJldHVybiBpdC4KLSAgICAgICAgICAgICAg ICAgICAgICAgKGxldCAoKGZyZXMgOzsgRWxzZSBjYWxjdWxhdGUgaXQgYW5kIGNhY2hlIGl0Lgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCMsc3luIHN0ciBzdHJsZW4gYXQpKSkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yLXNldCEgIyxjIChtb2R1bG8gYXQgKmNhY2hl LXNpemUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCBzdHIg YXQgZnJlcykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnJlcykpKSkpKSkpKSkpCi0KIDs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CiA7Ozs7OyBQYXJzZSBzdHJpbmcgUEVHcyB1c2luZyBzZXhw IFBFR3MuCiA7OyBTZWUgdGhlIHZhcmlhYmxlIFBFRy1BUy1QRUcgZm9yIGFuIGVhc2llci10by1y ZWFkIHN5bnRheC4KQEAgLTExNCwzNCArNTcsNDMgQEAgTEIgPCAnWycKIFJCIDwgJ10nCiAiKQog Ci0oZGVmaW5lLW5vbnRlcm0gcGVnLWdyYW1tYXIgYWxsCisoZGVmaW5lLXN5bnRheCBkZWZpbmUt c2V4cC1wYXJzZXIKKyAgKGxhbWJkYSAoeCkKKyAgICAoc3ludGF4LWNhc2UgeCAoKQorICAgICAg KChfIHN5bSBhY2N1bSBwYXQpCisgICAgICAgKGxldCogKChtYXRjaGYgKHBlZy1zZXhwLWNvbXBp bGUgIydwYXQgKHN5bnRheC0+ZGF0dW0gIydhY2N1bSkpKQorICAgICAgICAgICAgICAoYWNjdW1z eW0gKHN5bnRheC0+ZGF0dW0gIydhY2N1bSkpCisgICAgICAgICAgICAgIChzeW4gKHdyYXAtcGFy c2VyLWZvci11c2VycyB4IG1hdGNoZiBhY2N1bXN5bSAjJ3N5bSkpKQorICAgICAgICAgICAjYChk ZWZpbmUgc3ltICMsc3luKSkpKSkpCisKKyhkZWZpbmUtc2V4cC1wYXJzZXIgcGVnLWdyYW1tYXIg YWxsCiAgIChib2R5IGxpdCAoYW5kIHBlZy1ub250ZXJtaW5hbCAob3IgIjwtLSIgIjwtIiAiPCIp IHBlZy1zcCBwZWctcGF0dGVybikgKykpCi0oZGVmaW5lLW5vbnRlcm0gcGVnLXBhdHRlcm4gYWxs CisoZGVmaW5lLXNleHAtcGFyc2VyIHBlZy1wYXR0ZXJuIGFsbAogICAoYW5kIHBlZy1hbHRlcm5h dGl2ZQogICAgICAgIChib2R5IGxpdCAoYW5kIChpZ25vcmUgIi8iKSBwZWctc3AgcGVnLWFsdGVy bmF0aXZlKSAqKSkpCi0oZGVmaW5lLW5vbnRlcm0gcGVnLWFsdGVybmF0aXZlIGFsbAorKGRlZmlu ZS1zZXhwLXBhcnNlciBwZWctYWx0ZXJuYXRpdmUgYWxsCiAgIChib2R5IGxpdCAoYW5kIChib2R5 IGxpdCAob3IgIiEiICImIikgPykgcGVnLXNwIHBlZy1zdWZmaXgpICspKQotKGRlZmluZS1ub250 ZXJtIHBlZy1zdWZmaXggYWxsCisoZGVmaW5lLXNleHAtcGFyc2VyIHBlZy1zdWZmaXggYWxsCiAg IChhbmQgcGVnLXByaW1hcnkgKGJvZHkgbGl0IChhbmQgKG9yICIqIiAiKyIgIj8iKSBwZWctc3Ap ICopKSkKLShkZWZpbmUtbm9udGVybSBwZWctcHJpbWFyeSBhbGwKKyhkZWZpbmUtc2V4cC1wYXJz ZXIgcGVnLXByaW1hcnkgYWxsCiAgIChvciAoYW5kICIoIiBwZWctc3AgcGVnLXBhdHRlcm4gIiki IHBlZy1zcCkKICAgICAgIChhbmQgIi4iIHBlZy1zcCkKICAgICAgIHBlZy1saXRlcmFsCiAgICAg ICBwZWctY2hhcmNsYXNzCiAgICAgICAoYW5kIHBlZy1ub250ZXJtaW5hbCAoYm9keSAhICI8IiAx KSkpKQotKGRlZmluZS1ub250ZXJtIHBlZy1saXRlcmFsIGFsbAorKGRlZmluZS1zZXhwLXBhcnNl ciBwZWctbGl0ZXJhbCBhbGwKICAgKGFuZCAiJyIgKGJvZHkgbGl0IChhbmQgKGJvZHkgISAiJyIg MSkgcGVnLWFueSkgKikgIiciIHBlZy1zcCkpCi0oZGVmaW5lLW5vbnRlcm0gcGVnLWNoYXJjbGFz cyBhbGwKKyhkZWZpbmUtc2V4cC1wYXJzZXIgcGVnLWNoYXJjbGFzcyBhbGwKICAgKGFuZCAoaWdu b3JlICJbIikKICAgICAgICAoYm9keSBsaXQgKGFuZCAoYm9keSAhICJdIiAxKQogICAgICAgICAg ICAgICAgICAgICAgIChvciBjaGFyY2xhc3MtcmFuZ2UgY2hhcmNsYXNzLXNpbmdsZSkpICopCiAg ICAgICAgKGlnbm9yZSAiXSIpCiAgICAgICAgcGVnLXNwKSkKLShkZWZpbmUtbm9udGVybSBjaGFy Y2xhc3MtcmFuZ2UgYWxsIChhbmQgcGVnLWFueSAiLSIgcGVnLWFueSkpCi0oZGVmaW5lLW5vbnRl cm0gY2hhcmNsYXNzLXNpbmdsZSBhbGwgcGVnLWFueSkKLShkZWZpbmUtbm9udGVybSBwZWctbm9u dGVybWluYWwgYWxsCisoZGVmaW5lLXNleHAtcGFyc2VyIGNoYXJjbGFzcy1yYW5nZSBhbGwgKGFu ZCBwZWctYW55ICItIiBwZWctYW55KSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgY2hhcmNsYXNzLXNp bmdsZSBhbGwgcGVnLWFueSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgcGVnLW5vbnRlcm1pbmFsIGFs bAogICAoYW5kIChib2R5IGxpdCAob3IgKHJhbmdlICNcYSAjXHopIChyYW5nZSAjXEEgI1xaKSAo cmFuZ2UgI1wwICNcOSkgIi0iKSArKSBwZWctc3ApKQotKGRlZmluZS1ub250ZXJtIHBlZy1zcCBu b25lCisoZGVmaW5lLXNleHAtcGFyc2VyIHBlZy1zcCBub25lCiAgIChib2R5IGxpdCAob3IgIiAi ICJcdCIgIlxuIikgKikpCiAKIDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CkBAIC0yOTcsOSArMjQ5 LDEwIEBAIFJCIDwgJ10nCiAKIDs7IEJ1aWxkcyBhIGxhbWJkYS1leHByZXNzaW9ucyBmb3IgdGhl IHBhdHRlcm4gU1RSIHVzaW5nIGFjY3VtLgogKGRlZmluZSAocGVnLXN0cmluZy1jb21waWxlIHN0 ci1zdHggYWNjdW0pCi0gIChwZWctc2V4cC1jb21waWxlCi0gICAoY29tcHJlc3NvcgotICAgIChw ZWctcGF0dGVybi0+ZGVmbgotICAgICAocGVnOnRyZWUgKHBlZy1wYXJzZSBwZWctcGF0dGVybiAo c3ludGF4LT5kYXR1bSBzdHItc3R4KSkpIHN0ci1zdHgpCi0gICAgc3RyLXN0eCkKLSAgIGFjY3Vt KSkKKyAgKGxldCAoKHN0cmluZyAoc3ludGF4LT5kYXR1bSBzdHItc3R4KSkpCisgICAgKHBlZy1z ZXhwLWNvbXBpbGUKKyAgICAgKGNvbXByZXNzb3IKKyAgICAgIChwZWctcGF0dGVybi0+ZGVmbgor ICAgICAgIChwZWc6dHJlZSAocGVnLXBhcnNlIHBlZy1wYXR0ZXJuIHN0cmluZykpIHN0ci1zdHgp CisgICAgICBzdHItc3R4KQorICAgICBhY2N1bSkpKQotLSAKMS43LjQuMQoK --20cf307f3b9c163544049f9103f9 Content-Type: application/octet-stream; name="0002-Separate-PEG-Concerns.patch" Content-Disposition: attachment; filename="0002-Separate-PEG-Concerns.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gltus52a1 RnJvbSAzZmViZjExNmE2N2FmOTc5ZmY0ZjY5MjY5M2E1MDliMzE3MzU0ZmY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIExhdmluZSA8bmxhdmluZUBoYXZlcmZvcmQuZWR1PgpE YXRlOiBNb24sIDI4IE1hciAyMDExIDE1OjE4OjI3IC0wNDAwClN1YmplY3Q6IFtQQVRDSCAyLzJd IFNlcGFyYXRlIFBFRyBDb25jZXJucwoKKiBtb2R1bGUvaWNlLTkvcGVnL2NvZGVnZW4uc2NtOiBw ZWctc2V4cC1jb21waWxlIG5vIGxvbmdlciBrbm93cyBhYm91dAogICBzdHJpbmcgUEVHcwoqIG1v ZHVsZS9pY2UtOS9wZWcuc2NtOiBhZGQgYSBuZXcgZnVuY3Rpb24gcGVnLWV4dGVuZGVkLWNvbXBp bGUgdGhhdAogICBjYWxscyBwZWctc2V4cC1jb21waWxlIG9yIHBlZy1zdHJpbmctY29tcGlsZSBv biBpdHMgYXJndW1lbnQgYXMKICAgYXBwcm9wcmlhdGUKLS0tCiBtb2R1bGUvaWNlLTkvcGVnLnNj bSAgICAgICAgIHwgICAgOSArKysrKysrKy0KIG1vZHVsZS9pY2UtOS9wZWcvY29kZWdlbi5zY20g fCAgICAzIC0tLQogMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvbW9kdWxlL2ljZS05L3BlZy5zY20gYi9tb2R1bGUvaWNlLTkvcGVn LnNjbQppbmRleCA0ZjRiYmY4Li41OGUzNWNlIDEwMDY0NAotLS0gYS9tb2R1bGUvaWNlLTkvcGVn LnNjbQorKysgYi9tb2R1bGUvaWNlLTkvcGVnLnNjbQpAQCAtNjcsNiArNjcsMTMgQEAgZXhlY3V0 ZSB0aGUgU1RNVHMgYW5kIHRyeSBhZ2Fpbi4iCiAgICAgICAgICNmCiAgICAgICAgIChtYWtlLXBy ZWMgMCAoY2FyIHJlcykgc3RyaW5nIChzdHJpbmctY29sbGFwc2UgKGNhZHIgcmVzKSkpKSkpCiAK KyhkZWZpbmUgKHBlZy1leHRlbmRlZC1jb21waWxlIHBhdHRlcm4gYWNjdW0pCisgIChzeW50YXgt Y2FzZSBwYXR0ZXJuIChwZWcpCisgICAgKChwZWcgc3RyKQorICAgICAoc3RyaW5nPyAoc3ludGF4 LT5kYXR1bSAjJ3N0cikpCisgICAgIChwZWctc3RyaW5nLWNvbXBpbGUgIydzdHIgKGlmIChlcT8g YWNjdW0gJ2FsbCkgJ2JvZHkgYWNjdW0pKSkKKyAgICAoZWxzZSAocGVnLXNleHAtY29tcGlsZSBw YXR0ZXJuIGFjY3VtKSkpKQorCiA7OyBUaGUgcmVzdWx0cyBvZiBwYXJzaW5nIHVzaW5nIGEgbm9u dGVybWluYWwgYXJlIGNhY2hlZC4gIFRoaW5rIG9mIGl0IGxpa2UgYQogOzsgaGFzaCB3aXRoIG5v IGNvbmZsaWN0IHJlc29sdXRpb24uICBQcm9jZXNzIGZvciBkZWNpZGluZyBvbiB0aGUgY2FjaGUg c2l6ZQogOzsgd2Fzbid0IHZlcnkgc2NpZW50aWZpYzsganVzdCByYW4gdGhlIGJlbmNobWFya3Mg YW5kIHN0b3BwZWQgYSBsaXR0bGUgYWZ0ZXIKQEAgLTc4LDcgKzg1LDcgQEAgZXhlY3V0ZSB0aGUg U1RNVHMgYW5kIHRyeSBhZ2Fpbi4iCiAgIChsYW1iZGEgKHgpCiAgICAgKHN5bnRheC1jYXNlIHgg KCkKICAgICAgICgoXyBzeW0gYWNjdW0gcGF0KQotICAgICAgIChsZXQgKChtYXRjaGYgKHBlZy1z ZXhwLWNvbXBpbGUgIydwYXQgKHN5bnRheC0+ZGF0dW0gIydhY2N1bSkpKQorICAgICAgIChsZXQg KChtYXRjaGYgKHBlZy1leHRlbmRlZC1jb21waWxlICMncGF0IChzeW50YXgtPmRhdHVtICMnYWNj dW0pKSkKICAgICAgICAgICAgICAoYWNjdW1zeW0gKHN5bnRheC0+ZGF0dW0gIydhY2N1bSkpCiAg ICAgICAgICAgICAgKGMgKGRhdHVtLT5zeW50YXggeCAoZ2Vuc3ltKSkpKTs7IHRoZSBjYWNoZQog ICAgICAgICAgOzsgQ09ERSBpcyB0aGUgY29kZSB0byBwYXJzZSB0aGUgc3RyaW5nIGlmIHRoZSBy ZXN1bHQgaXNuJ3QgY2FjaGVkLgpkaWZmIC0tZ2l0IGEvbW9kdWxlL2ljZS05L3BlZy9jb2RlZ2Vu LnNjbSBiL21vZHVsZS9pY2UtOS9wZWcvY29kZWdlbi5zY20KaW5kZXggMDgwNGQxZS4uOGRkNTA3 YyAxMDA2NDQKLS0tIGEvbW9kdWxlL2ljZS05L3BlZy9jb2RlZ2VuLnNjbQorKysgYi9tb2R1bGUv aWNlLTkvcGVnL2NvZGVnZW4uc2NtCkBAIC0xNjQsOSArMTY0LDYgQEAgcmV0dXJuIEVYUC4iCiAg ICAgIChwZWctc2V4cC1jb21waWxlICMncGF0ICdub25lKSkKICAgICAoKGNhcHR1cmUgcGF0KSA7 OyBwYXJzZQogICAgICAocGVnLXNleHAtY29tcGlsZSAjJ3BhdCAnYm9keSkpCi0gICAgKChwZWcg cGF0KSAgOzsgZW1iZWRkZWQgUEVHIHN0cmluZwotICAgICAoc3RyaW5nPyAoc3ludGF4LT5kYXR1 bSAjJ3BhdCkpCi0gICAgIChwZWctc3RyaW5nLWNvbXBpbGUgIydwYXQgKGJhZiBhY2N1bSkpKQog ICAgICgoYW5kIHBhdCAuLi4pCiAgICAgIChjZy1hbmQgIycocGF0IC4uLikgKGJhZiBhY2N1bSkp KQogICAgICgob3IgcGF0IC4uLikKLS0gCjEuNy40LjEKCg== --20cf307f3b9c163544049f9103f9--