From mboxrd@z Thu Jan 1 00:00:00 1970 From: alex sassmannshausen Subject: Patches: Trivial (add div), Progressive Enhancement, Externalise CSS/JS Date: Sun, 18 Aug 2013 14:55:28 +0200 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11c2e74c9671cd04e438564e Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:39153) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VB2W3-0001QA-Ly for guix-devel@gnu.org; Sun, 18 Aug 2013 08:55:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VB2W2-0006sP-6E for guix-devel@gnu.org; Sun, 18 Aug 2013 08:55:31 -0400 Received: from mail-ob0-x233.google.com ([2607:f8b0:4003:c01::233]:61011) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VB2W1-0006sG-RN for guix-devel@gnu.org; Sun, 18 Aug 2013 08:55:30 -0400 Received: by mail-ob0-f179.google.com with SMTP id fb19so3737858obc.24 for ; Sun, 18 Aug 2013 05:55:28 -0700 (PDT) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: guix-devel@gnu.org --001a11c2e74c9671cd04e438564e Content-Type: multipart/alternative; boundary=001a11c2e74c9671c704e438564c --001a11c2e74c9671c704e438564c Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Hello, Right, thanks for your feedback =97 and Cyril, for finding an HTML5 validat= or that works. The NU validator seems to be well hidden if your starting point is validator.w3.org. Please find attached 3 patches. First is trivial, continuing Cyril's work to make the package-list validate. It simply adds a missing closing div, just after the footer. The second patch re-introduces changes to the SXML and JavaScript to fulfill the criteria of Progressive Enhancement: - All content is shown when JavaScript is not enabled on GUI browsers. In addition the patch implements JS that carries out the changes to the HTML document successively rather than all at the end, which, with the current size of the page, would cause a 'flicker'. I have improved the changelog, as well as, I believe, made the functions that these changes require, clearer. Ludo, I appreciate set! being evil (maybe not the true extent yet though=85), but I believe it to be necessary on this occasion: show_hide-grouper collects package description IDs in the local lid list variable. This is achieved through repeated set!-ing. That list needs to be cleared after each occasion that show_hide-grouper generates an sxml JavaScript call to bulk_show_hide, with the collected package-IDs as formals, to be inserted in the final HTML. bulk_show_hide initially hides the package descriptions and creates the element that allows for the package description to be 'expanded' or 'collapsed'. Currently show_hide-grouper inserts roughly 31 JavaScript calls to bulk_show hide (1 every 15 package descriptions + 1 at the end to collect the remaining package descriptions) in the final HTML document. Hope this makes sense; if you can think of a better way of doing it please let me know. The third patch finally moves the CSS and JS into separate files, as suggested by Ludo. I have implemented this so that by default, the page simply links to those external files (this allows browsers to cache the JS and CSS independently from the HTML). This does mean that those 2 additional files (package-list.js and package-list.css) need to be pushed to the Guix site whenever changes are carried out to the CSS/JS. The alternative, inlining the CSS and JS in the resulting HTML, which is I think what was proposed, has been implemented as suggested, but I'm running into an error =97 and I'm having difficulty locating it. It seems to be happenning either during the (cute) evaluation, or the (dump-port) evaluation. This functionality is currently disabled, and can be enabled by calling insert-css or insert-js with an optional additional formal parameter if you want to have a go at testing. I'd be happy with the latter functionality removed or fixed =97 in terms of HTML practice, I think the default, that is linking to external files, is generally the done thing. Best Wishes, Alex --001a11c2e74c9671c704e438564c Content-Type: text/html; charset=windows-1252 Content-Transfer-Encoding: quoted-printable
Hello,

Right, thanks for your feedback =97 and Cyri= l, for finding an HTML5 validator
that works. The NU validator seems to = be well hidden if your starting
point is
validator.w3.org.

Please find attached 3 patches. First is trivial, continuing Cyril'= s
work to make the package-list validate. It simply adds a missing closi= ng
div, just after the footer.

The second patch re-introduces cha= nges to the SXML and JavaScript to
fulfill the criteria of Progressive Enhancement:
- All content is shown = when JavaScript is not enabled on GUI browsers.
In addition the patch im= plements JS that carries out the changes to the
HTML document successive= ly rather than all at the end, which, with the
current size of the page, would cause a 'flicker'.

I have im= proved the changelog, as well as, I believe, made the functions
that the= se changes require, clearer.
Ludo, I appreciate set! being evil (maybe n= ot the true extent yet
though=85), but I believe it to be necessary on this occasion:
show_hide= -grouper collects package description IDs in the local lid list
variable= . This is achieved through repeated set!-ing. That list needs to
be clea= red after each occasion that show_hide-grouper generates an sxml
JavaScript call to bulk_show_hide, with the collected package-IDs as
for= mals, to be inserted in the final HTML. bulk_show_hide initially
hides t= he package descriptions and creates the <a> element that allows
for the package description to be 'expanded' or 'collapsed'= .

Currently show_hide-grouper inserts roughly 31 JavaScript calls to=
bulk_show hide (1 every 15 package descriptions + 1 at the end to
collect the remaining package descriptions) in the final HTML
document. = Hope this makes sense; if you can think of a better way of
doing it plea= se let me know.

The third patch finally moves the CSS and JS into se= parate files, as
suggested by Ludo. I have implemented this so that by default, the page
= simply links to those external files (this allows browsers to cache the
= JS and CSS independently from the HTML). This does mean that those 2
additional files (package-list.js and package-list.css) need to be
pushe= d to the Guix site whenever changes are carried out to the CSS/JS.
The a= lternative, inlining the CSS and JS in the resulting HTML, which is
I think what was proposed, has been implemented as suggested, but I'mrunning into an error =97 and I'm having difficulty locating it. It s= eems
to be happenning either during the (cute) evaluation, or the (dump-= port)
evaluation. This functionality is currently disabled, and can be enabledby calling insert-css or insert-js with an optional additional formal
p= arameter if you want to have a go at testing.

I'd be happy with = the latter functionality removed or fixed =97 in terms
of HTML practice, I think the default, that is linking to external
files= , is generally the done thing.

Best Wishes,

Alex

--001a11c2e74c9671c704e438564c-- --001a11c2e74c9671cd04e438564e Content-Type: application/octet-stream; name="0001-list-packages-Add-missing-closing-div-after-footer-i.patch" Content-Disposition: attachment; filename="0001-list-packages-Add-missing-closing-div-after-footer-i.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hkibekhc0 RnJvbSAwMWQxMTgzZDMxMGE0MDQ1MDBlY2ZkYTJlM2JlZTRjOTk2ZDU4MGY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4IFNhc3NtYW5uc2hhdXNlbiA8YWxleC5zYXNzbWFubnNo YXVzZW5AZ21haWwuY29tPgpEYXRlOiBTdW4sIDE4IEF1ZyAyMDEzIDEzOjM0OjA1ICswMjAwClN1 YmplY3Q6IFtQQVRDSCAxLzNdIGxpc3QtcGFja2FnZXM6IEFkZCBtaXNzaW5nIGNsb3NpbmcgPC9k aXY+IGFmdGVyIGZvb3RlcgogaW5jbHVkZS4KCiogYnVpbGQtYXV4L2xpc3QtcGFja2FnZXMuc2Nt IChsaXN0LXBhY2thZ2VzKTogQWRkIG1pc3NpbmcgY2xvc2luZyA8L2Rpdj4KICBhZnRlciBmb290 ZXIgaW5jbHVkZS4KLS0tCiBidWlsZC1hdXgvbGlzdC1wYWNrYWdlcy5zY20gfCAgICAzICsrLQog MSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdp dCBhL2J1aWxkLWF1eC9saXN0LXBhY2thZ2VzLnNjbSBiL2J1aWxkLWF1eC9saXN0LXBhY2thZ2Vz LnNjbQppbmRleCBiYWUyNWFjLi41ZmJlMzU5IDEwMDc1NQotLS0gYS9idWlsZC1hdXgvbGlzdC1w YWNrYWdlcy5zY20KKysrIGIvYnVpbGQtYXV4L2xpc3QtcGFja2FnZXMuc2NtCkBAIC0yNDQsNyAr MjQ0LDggQEAgd2l0aCBnbnUub3JnIHNlcnZlci1zaWRlIGluY2x1ZGUgYW5kIGFsbCB0aGF0LiIK ICAgIChmb3JtYXQgI3QgIjwhLS0jaW5jbHVkZSB2aXJ0dWFsPVwiL3NlcnZlci9iYW5uZXIuaHRt bFwiIC0tPiIpCiAKICAgIChzeG1sLT54bWwgKHBhY2thZ2VzLT5zeG1sIHBhY2thZ2VzKSkKLSAg IChmb3JtYXQgI3QgIjwhLS0jaW5jbHVkZSB2aXJ0dWFsPVwiL3NlcnZlci9mb290ZXIuaHRtbFwi IC0tPgorICAgKGZvcm1hdCAjdCAiPC9kaXY+Cis8IS0tI2luY2x1ZGUgdmlydHVhbD1cIi9zZXJ2 ZXIvZm9vdGVyLmh0bWxcIiAtLT4KIDxkaXYgaWQ9XCJmb290ZXJcIj4KIAogPHA+UGxlYXNlIHNl bmQgZ2VuZXJhbCBGU0YgJmFtcDsgR05VIGlucXVpcmllcyB0bwotLSAKMS43LjEwLjQKCg== --001a11c2e74c9671cd04e438564e Content-Type: application/octet-stream; name="0002-list-packages-Progressive-Enhancement-approach-to-JS.patch" Content-Disposition: attachment; filename="0002-list-packages-Progressive-Enhancement-approach-to-JS.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hkibekin1 RnJvbSBmY2JmODFhNTE2NGU0OWEzODViZDFjZDI4YTY3ZTU5ZDg2OGExY2JmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4IFNhc3NtYW5uc2hhdXNlbiA8YWxleC5zYXNzbWFubnNo YXVzZW5AZ21haWwuY29tPgpEYXRlOiBTdW4sIDE4IEF1ZyAyMDEzIDEzOjQzOjA1ICswMjAwClN1 YmplY3Q6IFtQQVRDSCAyLzNdIGxpc3QtcGFja2FnZXM6IFByb2dyZXNzaXZlIEVuaGFuY2VtZW50 IGFwcHJvYWNoIHRvIEpTLgoKKiBidWlsZC1hdXgvbGlzdC1wYWNrYWdlcy5zY20gKHBhY2thZ2Ut PnN4bWwpOiBSZW1vdmUgPGE+IGVsZW1lbnQgYW5kIEpTCiAgZnVuY3Rpb24gY2FsbHMuIFRoZXNl IGFyZSBub3cgcHJvdmlkZWQgdGhyb3VnaCAoc2hvd19oaWRlLWdyb3VwZXIpIGJlbG93LgogIEFk ZCBjYWxsIHRvIChzaG93X2hpZGUtZ3JvdXBlcikgZm9yIGV2ZXJ5IHBhY2thZ2UgYWRkZWQgdG8g dGhlIHRhYmxlLgogIChzaG93X2hpZGUtZ3JvdXBlcik6IE5ldyBmdW5jdGlvbi4KICAocGFja2Fn ZXMtPnN4bWwpOiBBZGQgZmluYWwgY2FsbCB0byAoc2hvd19oaWRlLWdyb3VwZXIpLgogIChpbnNl cnQtanMpOiBzaG93X2hpZGU6IGFkZCBjb21wYXRpYmlsaXR5IGNoZWNrLCBpbnRyb2R1Y2UsIHVz ZSB0aGluZ0xpbmsuCiAgICAgICAgICAgICAgIHByZXA6IG5ldyBKUyBmdW5jdGlvbi4KICAgICAg ICAgICAgICAgYnVsa19zaG93X2hpZGU6IG5ldyBKUyBmdW5jdGlvbi4KLS0tCiBidWlsZC1hdXgv bGlzdC1wYWNrYWdlcy5zY20gfCAgIDgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9saXN0LXBhY2thZ2VzLnNjbSBiL2J1aWxkLWF1 eC9saXN0LXBhY2thZ2VzLnNjbQppbmRleCA1ZmJlMzU5Li4xNjExMTZiIDEwMDc1NQotLS0gYS9i dWlsZC1hdXgvbGlzdC1wYWNrYWdlcy5zY20KKysrIGIvYnVpbGQtYXV4L2xpc3QtcGFja2FnZXMu c2NtCkBAIC0xMDMsMTMgKzEwMyw4IEBAIGV4ZWMgZ3VpbGUgLWwgIiQwIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICh0aXRsZSAiTGluayB0byB0aGUg R3VpeCBwYWNrYWdlIHNvdXJjZSBjb2RlIikpCiAgICAgICAgICAgICAgICAsKHBhY2thZ2UtbmFt ZSBwYWNrYWdlKSAiICIKICAgICAgICAgICAgICAgICwocGFja2FnZS12ZXJzaW9uIHBhY2thZ2Up KSkKLSAgICAgICAgKHRkIChhIChAIChocmVmICJqYXZhc2NyaXB0OnZvaWQoMCkiKQotICAgICAg ICAgICAgICAgICAgKHRpdGxlICJzaG93L2hpZGUgcGFja2FnZSBkZXNjcmlwdGlvbiIpCi0gICAg ICAgICAgICAgICAgICAob25DbGljayAsKGZvcm1hdCAjZiAiamF2YXNjcmlwdDpzaG93X2hpZGUo J35hJykiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi1p ZCkpKQotICAgICAgICAgICAgICAgLChwYWNrYWdlLXN5bm9wc2lzIHBhY2thZ2UpKQotICAgICAg ICAgICAgKGRpdiAoQCAoaWQgLGRlc2NyaXB0aW9uLWlkKQotICAgICAgICAgICAgICAgICAgICAo c3R5bGUgImRpc3BsYXk6IG5vbmU7IikpCisgICAgICAgICh0ZCAoc3BhbiAoc3Ryb25nICwocGFj a2FnZS1zeW5vcHNpcyBwYWNrYWdlKSkpCisgICAgICAgICAgICAoZGl2IChAIChpZCAsZGVzY3Jp cHRpb24taWQpKQogICAgICAgICAgICAgICAgICAsKG1hdGNoIChwYWNrYWdlLWxvZ28gKHBhY2th Z2UtbmFtZSBwYWNrYWdlKSkKICAgICAgICAgICAgICAgICAgICAgKCg/IHN0cmluZz8gdXJsKQog ICAgICAgICAgICAgICAgICAgICAgYChpbWcgKEAgKHNyYyAsdXJsKQpAQCAtMTIyLDcgKzExNyw0 NCBAQCBleGVjIGd1aWxlIC1sICIkMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg ICAgICAgICAgICAgICAgIChhIChAIChocmVmICwocGFja2FnZS1ob21lLXBhZ2UgcGFja2FnZSkp CiAgICAgICAgICAgICAgICAgICAgICAgICh0aXRsZSAiTGluayB0byB0aGUgcGFja2FnZSdzIHdl YnNpdGUiKSkKICAgICAgICAgICAgICAgICAgICAgLChwYWNrYWdlLWhvbWUtcGFnZSBwYWNrYWdl KSkKLSAgICAgICAgICAgICAgICAgLChzdGF0dXMgcGFja2FnZSkpKSkpKQorICAgICAgICAgICAg ICAgICAsKHN0YXR1cyBwYWNrYWdlKSkKKyAgICAgICAgICAgICwoc2hvd19oaWRlLWdyb3VwZXIg ZGVzY3JpcHRpb24taWQpKSkpKQorCisoZGVmaW5lIHNob3dfaGlkZS1ncm91cGVyCisgIChsZXQg KChsaWQgJygpKQorICAgICAgICAoZ3JvdXAtY291bnRlciAxNSkpCisgICAgKGxhbWJkYSAoaWQp CisgICAgICAiQ29sbGVjdCBHUk9VUC1DT1VOVEVSIGVsZW1lbnQgSURzLCB0aGVuIGFwcGx5IHRo ZW0gdG8KK2J1bGtfc2hvd19oaWRlLiBJZiBJRCBpcyAjZiwgZm9yY2UgdGhlIGFwcGxpY2F0aW9u IG9mIGNvbGxlY3RlZCBJRHMgdG8KK2J1bGtfc2hvd19oaWRlIGV2ZW4gd2hlbiB0aGUgbnVtYmVy IG9mIElEcyBpcyBzbWFsbGVyIHRoYW4gR1JPVVAtQ09VTlRFUi4iCisgICAgICAoZGVmaW5lIChp bnNlcnQtanMtY2FsbCkKKyAgICAgICAgIlJldHVybiBhbiBzeG1sIGNhbGwgdG8gYnVsa19zaG93 X2hpZGUuIgorICAgICAgICAoZGVmaW5lIChsaWQtPmpzLWFyZ2wpCisgICAgICAgICAgIlBhcnNl IGEgU2NoZW1lIGxpc3QgaW50byBhIEphdmFTY3JpcHQgc3R5bGUgYXJndW1lbnRzIGxpc3QuIgor ICAgICAgICAgIChkZWZpbmUgKGhlbHBlciBsKQorICAgICAgICAgICAgKGlmIChudWxsPyBsKQor ICAgICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgICAgICAgKHNldCEgbGlkICcoKSkg OyBsaWQsIG5vdyBwcm9jZXNzZWQsIHNhZmUgdG8gcmVzZXQuCisgICAgICAgICAgICAgICAgICAi IikKKyAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiLCAnIiAoY2FyIGwpICInIiAgICAg IDsgZnVydGhlciBhcmdzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoZWxwZXIg KGNkciBsKSkpKSkKKyAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiJyIgKGNhciBsaWQpICInIiAg ICAgICAgICAgICA7IGluaXRpYWwgYXJnLgorICAgICAgICAgICAgICAgICAgICAgICAgIChoZWxw ZXIgKGNkciBsaWQpKSkpCisgICAgICAgIGAoc2NyaXB0IChAICh0eXBlICJ0ZXh0L2phdmFzY3Jp cHQiKSkKKyAgICAgICAgICAgICAgICAgLChmb3JtYXQgI2YgImJ1bGtfc2hvd19oaWRlKH5hKSIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpZC0+anMtYXJnbCkpKSkKKyAgICAgIChpZiBp ZAorICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgOzsgSWYgSUQgaXMgbm90IGZhbHNlLCB0 aGVuIHdlIGFkZCBJRCB0byBMSUQuCisgICAgICAgICAgICAoc2V0ISBsaWQgKGNvbnMgaWQgbGlk KSkKKyAgICAgICAgICAgIDs7IElmIExJRCBpcyBub3cgZXF1YWwgdG8gR1JPVVAtQ09VTlRFUiBp dCBpcyB0aW1lIHRvIGluc2VydCBhCisgICAgICAgICAgICA7OyBjYWxsIHRvIGJ1bGtfc2hvd19o aWRlIGluIHRoZSBIVE1MLgorICAgICAgICAgICAgKGlmICg9IChsZW5ndGggbGlkKSBncm91cC1j b3VudGVyKQorICAgICAgICAgICAgICAgIChpbnNlcnQtanMtY2FsbCkKKyAgICAgICAgICAgICAg ICAiIikpCisgICAgICAgICAgOzsgaWYgSUQgaXMgZmFsc2UgdGhlbiB3ZSBmb3JjZSB0aGUgaW5z ZXJ0IG9mIGEgY2FsbCB0bworICAgICAgICAgIDs7IGJ1bGtfc2hvd19oaWRlIGZvciAoPCBuIEdS T1VQLUNPVU5URVIpIHBhY2thZ2VzIGluIHRoZSBIVE1MLgorICAgICAgICAgIChpbnNlcnQtanMt Y2FsbCkpKSkpCiAKIChkZWZpbmUgKHBhY2thZ2VzLT5zeG1sIHBhY2thZ2VzKQogICAiUmV0dXJu IGFuIEhUTUwgcGFnZSBhcyBTWE1MIGRlc2NyaWJpbmcgUEFDS0FHRVMuIgpAQCAtMTQ2LDYgKzE3 OCw3IEBAIGV4ZWMgZ3VpbGUgLWwgIiQwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK ICAgICAgICAgICAgICAgICh0aCAiUGFja2FnZSB2ZXJzaW9uIikKICAgICAgICAgICAgICAgICh0 aCAiUGFja2FnZSBkZXRhaWxzIikpCiAgICAgICAgICAgICxAKG1hcCBwYWNrYWdlLT5zeG1sIHBh Y2thZ2VzKSkKKyAgICAsKHNob3dfaGlkZS1ncm91cGVyICNmKQogICAgIChhIChAIChocmVmICIj aW50cm8iKQogICAgICAgICAgICh0aXRsZSAiQmFjayB0byB0b3AuIikKICAgICAgICAgICAoaWQg InRvcCIpKQpAQCAtMjEwLDE0ICsyNDMsNDUgQEAgY29sb3I6I2ZmZjsKIC8vIGxpY2Vuc2U6IEND MAogZnVuY3Rpb24gc2hvd19oaWRlKGlkVGhpbmcpCiB7CisgIGlmKGRvY3VtZW50LmdldEVsZW1l bnRCeUlkICYmIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKSB7CiAgICAgdmFyIHRoaW5nID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRUaGluZyk7CisgICAgLyogVXNlZCB0byBjaGFuZ2UgdGhl IGxpbmsgdGV4dCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgZGVzY3JpcHRpb24gaXMKKyAgICAgICBj b2xsYXBzZWQgb3IgZXhwYW5kZWQgKi8KKyAgICB2YXIgdGhpbmdMaW5rID0gdGhpbmcucHJldmlv dXNTaWJsaW5nLmxhc3RDaGlsZC5maXJzdENoaWxkOwogICAgIGlmICh0aGluZykgewogICAgICAg aWYgKHRoaW5nLnN0eWxlLmRpc3BsYXkgPT0gXCJub25lXCIpIHsKICAgICAgICAgdGhpbmcuc3R5 bGUuZGlzcGxheSA9IFwiXCI7CisgICAgICAgIHRoaW5nTGluay5kYXRhID0gJ0NvbGxhcHNlJzsK ICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHRoaW5nLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjsK KyAgICAgICAgdGhpbmdMaW5rLmRhdGEgPSAnRXhwYW5kJzsKICAgICAgIH0KICAgICB9CisgIH0K K30KKy8qIEFkZCBjb250cm9sbGVycyB1c2VkIGZvciBjb2xsYXBzZS9leHBhbnNpb24gb2YgcGFj a2FnZSBkZXNjcmlwdGlvbnMgKi8KK2Z1bmN0aW9uIHByZXAoaWRUaGluZykKK3sKKyAgdmFyIHRk VGhpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFRoaW5nKS5wYXJlbnROb2RlOworICBp ZiAodGRUaGluZykgeworICAgIHZhciBhVGhpbmcgPSB0ZFRoaW5nLmZpcnN0Q2hpbGQuYXBwZW5k Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpKTsKKyAgICBhVGhpbmcuc2V0QXR0cmli dXRlKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKScpOworICAgIGFUaGluZy5zZXRBdHRyaWJ1 dGUoJ3RpdGxlJywgJ3Nob3cvaGlkZSBwYWNrYWdlIGRlc2NyaXB0aW9uJyk7CisgICAgYVRoaW5n LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBhbmQnKSk7CisgICAgYVRo aW5nLm9uY2xpY2s9ZnVuY3Rpb24oKXtzaG93X2hpZGUoaWRUaGluZyk7fTsKKyAgICAvKiBhVGhp bmcub25rZXlwcmVzcz1mdW5jdGlvbigpe3Nob3dfaGlkZShpZFRoaW5nKTt9OyAqLworICB9Cit9 CisvKiBUYWtlIG4gZWxlbWVudCBJRHMsIHByZXBhcmUgdGhlbSBmb3IgamF2YXNjcmlwdCBlbmhh bmNlZAorZGlzcGxheSBhbmQgaGlkZSB0aGUgSURzIGJ5IGRlZmF1bHQuICovCitmdW5jdGlvbiBi dWxrX3Nob3dfaGlkZSgpCit7CisgIGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkICYmIGRvY3Vt ZW50LmNyZWF0ZVRleHROb2RlKSB7CisgICAgZm9yKHZhciBpPTA7IGk8YXJndW1lbnRzLmxlbmd0 aDsgaSsrKSB7CisgICAgICBwcmVwKGFyZ3VtZW50c1tpXSkKKyAgICAgIHNob3dfaGlkZShhcmd1 bWVudHNbaV0pOworICAgIH0KKyAgfQogfQogPC9zY3JpcHQ+IikpCiAKLS0gCjEuNy4xMC40Cgo= --001a11c2e74c9671cd04e438564e Content-Type: application/octet-stream; name="0003-list-packages-Externalise-CSS-and-JavaScript.patch" Content-Disposition: attachment; filename="0003-list-packages-Externalise-CSS-and-JavaScript.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hkibekj32 RnJvbSAzYzNiZmI2ZGVhMWIyMDQ0N2JhOGJiNDhlYzk1YThjYzRiNTU2MTI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4IFNhc3NtYW5uc2hhdXNlbiA8YWxleC5zYXNzbWFubnNo YXVzZW5AZ21haWwuY29tPgpEYXRlOiBTdW4sIDE4IEF1ZyAyMDEzIDE1OjIzOjAzICswMjAwClN1 YmplY3Q6IFtQQVRDSCAzLzNdIGxpc3QtcGFja2FnZXM6IEV4dGVybmFsaXNlIENTUyBhbmQgSmF2 YVNjcmlwdC4KCiogYnVpbGQtYXV4L2xpc3QtcGFja2FnZXMuc2NtICglbG9hZC1kaXJlY3Rvcnkp OiBOZXcgdmFyaWFibGUuCiAgKCVjc3MtZmlsZSk6IE5ldyB2YXJpYWJsZS4KICAoJWpzLWZpbGUp OiBOZXcgdmFyaWFibGUuCiAgKGluc2VydC1jc3MpOiBSZXdyaXRlIHRvLCBieSBkZWZhdWx0LCBn ZW5lcmF0ZSBhIDxsaW5rPiBlbGVtZW50IGNhbGxpbmcgdGhlCiAgZXh0ZXJuYWwgQ1NTIHN0eWxl c2hlZXQuIENvbnRhaW5zIHN0cnVjdHVyZSBmb3IgaW5saW5pbmcgdGhlIENTUyBmcm9tIHRoZQog IGV4dGVybmFsIHN0eWxlc2hlZXQuCiAgKGluc2VydC1qcyk6IFJld3JpdGUgdG8sIGJ5IGRlZmF1 bHQsIGNhbGwgZXh0ZXJuYWwgSlMgZmlsZSwgcmF0aGVyIHRoYW4KICBpbmxpbmluZyBpdC4gQ29u dGFpbnMgc3RydWN0dXJlIGZvciBpbmxpbmluZyB0aGUgSlMgZnJvbSB0aGUgZXh0ZXJuYWwgZmls ZS4KICAobGlzdC1wYWNrYWdlcyk6IGdlbmVyYXRlIHN4bWwgZnJvbSBpbnNlcnQtY3NzIGFuZCBp bnNlcnQtanMuCiogcGFja2FnZS1saXN0LmNzczogTmV3IENTUyBmaWxlLCB3aXRoIG1pbm9yIHR3 ZWFrcy4KKiBwYWNrYWdlLWxpc3QuanM6IE5ldyBKUyBmaWxlLCBpZGVudGljYWwgdG8gbGFzdCBj b21taXQuCi0tLQogYnVpbGQtYXV4L2xpc3QtcGFja2FnZXMuc2NtIHwgIDEzNCArKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBidWlsZC1hdXgvcGFja2FnZS1saXN0 LmNzcyAgfCAgIDgxICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBidWlsZC1hdXgvcGFja2Fn ZS1saXN0LmpzICAgfCAgIDQzICsrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE1OCBp bnNlcnRpb25zKCspLCAxMDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgYnVpbGQt YXV4L3BhY2thZ2UtbGlzdC5jc3MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBidWlsZC1hdXgvcGFja2Fn ZS1saXN0LmpzCgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2xpc3QtcGFja2FnZXMuc2NtIGIvYnVp bGQtYXV4L2xpc3QtcGFja2FnZXMuc2NtCmluZGV4IDE2MTExNmIuLjg4M2MzMmIgMTAwNzU1Ci0t LSBhL2J1aWxkLWF1eC9saXN0LXBhY2thZ2VzLnNjbQorKysgYi9idWlsZC1hdXgvbGlzdC1wYWNr YWdlcy5zY20KQEAgLTI3LDExICsyNywxMyBAQCBleGVjIGd1aWxlIC1sICIkMCIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBwYWNrYWdlcykKICAg Izp1c2UtbW9kdWxlIChndWl4IGxpY2Vuc2VzKQogICAjOnVzZS1tb2R1bGUgKGd1aXggZ251LW1h aW50ZW5hbmNlKQorICAjOnVzZS1tb2R1bGUgKGd1aXggYnVpbGQgdXRpbHMpCiAgICM6dXNlLW1v ZHVsZSAoZ251IHBhY2thZ2VzKQogICAjOnVzZS1tb2R1bGUgKHN4bWwgc2ltcGxlKQogICAjOnVz ZS1tb2R1bGUgKHdlYiB1cmkpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgbWF0Y2gpCiAgICM6dXNl LW1vZHVsZSAoc3JmaSBzcmZpLTEpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTI2KQogICAj OmV4cG9ydCAobGlzdC1wYWNrYWdlcykpCiAKIDs7OyBDb21tZW50YXJ5OgpAQCAtMTg1LDEwNSAr MTg3LDM3IEBAIGJ1bGtfc2hvd19oaWRlIGV2ZW4gd2hlbiB0aGUgbnVtYmVyIG9mIElEcyBpcyBz bWFsbGVyIHRoYW4gR1JPVVAtQ09VTlRFUi4iCiAgICAgICAgIl4iKSkpCiAKIAwKLShkZWZpbmUg KGluc2VydC1jc3MpCi0gICJSZXR1cm4gdGhlIENTUyBmb3IgdGhlIGxpc3QtcGFja2FnZXMgcGFn ZS4iCi0gIChmb3JtYXQgI3QKLSI8c3R5bGU+Ci1hIHt0cmFuc2l0aW9uOiBhbGwgMC4zc30KLWRp diNpbnRybyB7bWFyZ2luLWJvdHRvbTogNWVtfQotZGl2I2ludHJvIGRpdiwgZGl2I2ludHJvIHAg e3BhZGRpbmc6MC41ZW19Ci1kaXYjaW50cm8gZGl2IHtmbG9hdDpsZWZ0fQotdGFibGUjcGFja2Fn ZXMsIHRhYmxlI3BhY2thZ2VzIHRyLCB0YWJsZSNwYWNrYWdlcyB0Ym9keSwgdGFibGUjcGFja2Fn ZXMgdGQsCi10YWJsZSNwYWNrYWdlcyB0aCB7Ym9yZGVyOiAwcHggc29saWQgYmxhY2t9Ci1kaXYu cGFja2FnZS1kZXNjcmlwdGlvbiB7cG9zaXRpb246IHJlbGF0aXZlfQotdGFibGUjcGFja2FnZXMg dHI6bnRoLWNoaWxkKGV2ZW4pIHtiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGfQotdGFibGUjcGFja2Fn ZXMgdHI6bnRoLWNoaWxkKG9kZCkge2JhY2tncm91bmQtY29sb3I6ICNFRUV9Ci10YWJsZSNwYWNr YWdlcyB0cjpob3ZlciwgdGFibGUjcGFja2FnZXMgdHI6Zm9jdXMsIHRhYmxlI3BhY2thZ2VzIHRy OmFjdGl2ZSB7YmFja2dyb3VuZC1jb2xvcjogI0RERH0KLXRhYmxlI3BhY2thZ2VzIHRyOmZpcnN0 LWNoaWxkLCB0YWJsZSNwYWNrYWdlcyB0cjpmaXJzdC1jaGlsZDpob3ZlciwgdGFibGUjcGFja2Fn ZXMgdHI6Zmlyc3QtY2hpbGQ6Zm9jdXMsIHRhYmxlI3BhY2thZ2VzIHRyOmZpcnN0LWNoaWxkOmFj dGl2ZSB7Ci1iYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwotY29sb3I6ICNmZmY7Ci19Ci10YWJsZSNw YWNrYWdlcyB0ZAotewotbWFyZ2luOjBweDsKLXBhZGRpbmc6MC4yZW0gMC41ZW07Ci19Ci10YWJs ZSNwYWNrYWdlcyB0ZDpmaXJzdC1jaGlsZCB7Ci13aWR0aDoxMCU7Ci10ZXh0LWFsaWduOmNlbnRl cjsKLX0KLXRhYmxlI3BhY2thZ2VzIHRkOm50aC1jaGlsZCgyKXt3aWR0aDozMCU7fQotdGFibGUj cGFja2FnZXMgdGQ6bGFzdC1jaGlsZCB7d2lkdGg6NjAlfQotaW1nLnBhY2thZ2UtbG9nbyB7Ci1m bG9hdDogbGVmdDsKLXBhZGRpbmctcmlnaHQ6IDFlbTsKLX0KLXRhYmxlI3BhY2thZ2VzIHNwYW4g YSB7ZmxvYXQ6IHJpZ2h0fQotYSN0b3AgewotcG9zaXRpb246Zml4ZWQ7Ci1yaWdodDoyJTsKLWJv dHRvbToyJTsKLWZvbnQtc2l6ZToxNTAlOwotYmFja2dyb3VuZC1jb2xvcjojRUVFOwotcGFkZGlu ZzoxLjEyNSUgMC43NSUgMCUgMC43NSU7Ci10ZXh0LWRlY29yYXRpb246bm9uZTsKLWNvbG9yOiMw MDA7Ci1ib3JkZXItcmFkaXVzOjVweDsKLX0KLWEjdG9wOmhvdmVyLCBhI3RvcDpmb2N1cyB7Ci1i YWNrZ3JvdW5kLWNvbG9yOiMzMzM7Ci1jb2xvcjojZmZmOwotfQotPC9zdHlsZT4iKSkKKyhkZWZp bmUgJWxvYWQtZGlyZWN0b3J5CisgIChzdHJpbmctYXBwZW5kIChkaXJuYW1lIChjdXJyZW50LWZp bGVuYW1lKSkgIi8iKSkKIAotKGRlZmluZSAoaW5zZXJ0LWpzKQotICAiUmV0dXJuIHRoZSBKYXZh U2NyaXB0IGZvciB0aGUgbGlzdC1wYWNrYWdlcyBwYWdlLiIKLSAgKGZvcm1hdCAjdAotIjxzY3Jp cHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPgotLy8gbGljZW5zZTogQ0MwCi1mdW5jdGlvbiBz aG93X2hpZGUoaWRUaGluZykKLXsKLSAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgJiYgZG9j dW1lbnQuY3JlYXRlVGV4dE5vZGUpIHsKLSAgICB2YXIgdGhpbmcgPSBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZChpZFRoaW5nKTsKLSAgICAvKiBVc2VkIHRvIGNoYW5nZSB0aGUgbGluayB0ZXh0LCBk ZXBlbmRpbmcgb24gd2hldGhlciBkZXNjcmlwdGlvbiBpcwotICAgICAgIGNvbGxhcHNlZCBvciBl eHBhbmRlZCAqLwotICAgIHZhciB0aGluZ0xpbmsgPSB0aGluZy5wcmV2aW91c1NpYmxpbmcubGFz dENoaWxkLmZpcnN0Q2hpbGQ7Ci0gICAgaWYgKHRoaW5nKSB7Ci0gICAgICBpZiAodGhpbmcuc3R5 bGUuZGlzcGxheSA9PSBcIm5vbmVcIikgewotICAgICAgICB0aGluZy5zdHlsZS5kaXNwbGF5ID0g XCJcIjsKLSAgICAgICAgdGhpbmdMaW5rLmRhdGEgPSAnQ29sbGFwc2UnOwotICAgICAgfSBlbHNl IHsKLSAgICAgICAgdGhpbmcuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiOwotICAgICAgICB0aGlu Z0xpbmsuZGF0YSA9ICdFeHBhbmQnOwotICAgICAgfQotICAgIH0KLSAgfQotfQotLyogQWRkIGNv bnRyb2xsZXJzIHVzZWQgZm9yIGNvbGxhcHNlL2V4cGFuc2lvbiBvZiBwYWNrYWdlIGRlc2NyaXB0 aW9ucyAqLwotZnVuY3Rpb24gcHJlcChpZFRoaW5nKQotewotICB2YXIgdGRUaGluZyA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKGlkVGhpbmcpLnBhcmVudE5vZGU7Ci0gIGlmICh0ZFRoaW5nKSB7 Ci0gICAgdmFyIGFUaGluZyA9IHRkVGhpbmcuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVu dC5jcmVhdGVFbGVtZW50KCdhJykpOwotICAgIGFUaGluZy5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAn amF2YXNjcmlwdDp2b2lkKDApJyk7Ci0gICAgYVRoaW5nLnNldEF0dHJpYnV0ZSgndGl0bGUnLCAn c2hvdy9oaWRlIHBhY2thZ2UgZGVzY3JpcHRpb24nKTsKLSAgICBhVGhpbmcuYXBwZW5kQ2hpbGQo ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGFuZCcpKTsKLSAgICBhVGhpbmcub25jbGljaz1m dW5jdGlvbigpe3Nob3dfaGlkZShpZFRoaW5nKTt9OwotICAgIC8qIGFUaGluZy5vbmtleXByZXNz PWZ1bmN0aW9uKCl7c2hvd19oaWRlKGlkVGhpbmcpO307ICovCi0gIH0KLX0KLS8qIFRha2UgbiBl bGVtZW50IElEcywgcHJlcGFyZSB0aGVtIGZvciBqYXZhc2NyaXB0IGVuaGFuY2VkCi1kaXNwbGF5 IGFuZCBoaWRlIHRoZSBJRHMgYnkgZGVmYXVsdC4gKi8KLWZ1bmN0aW9uIGJ1bGtfc2hvd19oaWRl KCkKLXsKLSAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgJiYgZG9jdW1lbnQuY3JlYXRlVGV4 dE5vZGUpIHsKLSAgICBmb3IodmFyIGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAg ICAgIHByZXAoYXJndW1lbnRzW2ldKQotICAgICAgc2hvd19oaWRlKGFyZ3VtZW50c1tpXSk7Ci0g ICAgfQotICB9Ci19Ci08L3NjcmlwdD4iKSkKKyhkZWZpbmUgJWNzcy1maWxlCisgICJwYWNrYWdl LWxpc3QuY3NzIikKKyhkZWZpbmUgJWpzLWZpbGUKKyAgInBhY2thZ2UtbGlzdC5qcyIpCisKKyhk ZWZpbmUgKGluc2VydC1jc3MgLiBpbmxpbmUpCisgICJSZXR1cm4gYW4gc3htbCBsaW5rIHRvIHRo ZSBDU1MgZmlsZSBmb3IgdGhlIGxpc3QtcGFja2FnZXMgcGFnZS4gIElmCit0aGUgb3B0aW9uYWwg aW5saW5lIGFyZ3VtZW50IGlzIHByZXNlbnQsIGlubGluZSB0aGUgQ1NTIGluc3RlYWQuCitJbmxp bmluZyBjdXJyZW50bHkgZmFpbCB3aXRoIHdyb25nLW51bS1hcmdzIGVycm9yLiIKKyAgKGlmIChu dWxsPyBpbmxpbmUpCisgICAgICBgKGxpbmsgKEAgKHR5cGUgInRleHQvY3NzIikKKwkJKHJlbCAi c3R5bGVzaGVldCIpCisJCShocmVmICwlY3NzLWZpbGUpKSkKKyAgICAgIGAoc3R5bGUgKEAgKHR5 cGUgInRleHQvY3NzIikpCisJICwod2l0aC1pbnB1dC1mcm9tLWZpbGUgKHN0cmluZy1hcHBlbmQg JWxvYWQtZGlyZWN0b3J5ICVjc3MtZmlsZSkKKwkgICAgKGN1dGUgZHVtcC1wb3J0IDw+IChjdXJy ZW50LW91dHB1dC1wb3J0KSkpKSkpCisKKyhkZWZpbmUgKGluc2VydC1qcyAuIGlubGluZSkKKyAg IlJldHVybiBhbiBzeG1sIGxpbmsgdG8gdGhlIENTUyBmaWxlIGZvciB0aGUgbGlzdC1wYWNrYWdl cyBwYWdlLiAgSWYKK3RoZSBvcHRpb25hbCBpbmxpbmUgYXJndW1lbnQgaXMgcHJlc2VudCwgaW5s aW5lIHRoZSBDU1MgaW5zdGVhZC4KK0lubGluaW5nIGN1cnJlbnRseSBmYWlsIHdpdGggd3Jvbmct bnVtLWFyZ3MgZXJyb3IuIgorICAoaWYgKG51bGw/IGlubGluZSkKKyAgICAgIGAoc2NyaXB0IChA ICh0eXBlICJ0ZXh0L2phdmFzY3JpcHQiKQorICAgICAgICAgICAgICAgICAgKHNyYyAsJWpzLWZp bGUpKQorICAgICAgICAgICAgICAgIiAiKQorICAgICAgYChzdHlsZSAoQCAodHlwZSAidGV4dC9q YXZhc2NyaXB0IikpCisJICwod2l0aC1pbnB1dC1mcm9tLWZpbGUgKHN0cmluZy1hcHBlbmQgJWxv YWQtZGlyZWN0b3J5ICVqcy1maWxlKQorCSAgICAoY3V0ZSBkdW1wLXBvcnQgPD4gKGN1cnJlbnQt b3V0cHV0LXBvcnQpKSkpKSkKIAogDAogKGRlZmluZSAobGlzdC1wYWNrYWdlcyAuIGFyZ3MpCkBA IC0zMDMsOCArMjM3LDggQEAgd2l0aCBnbnUub3JnIHNlcnZlci1zaWRlIGluY2x1ZGUgYW5kIGFs bCB0aGF0LiIKIDwhLS0gUGFyZW50LVZlcnNpb246IDEuNzAgJCAtLT4KIDx0aXRsZT5HTlUgR3Vp eCAtIEdOVSBEaXN0cmlidXRpb24gLSBHTlUgUHJvamVjdDwvdGl0bGU+CiAiKQotICAgKGluc2Vy dC1jc3MpCi0gICAoaW5zZXJ0LWpzKQorICAgKHN4bWwtPnhtbCBgKCwoaW5zZXJ0LWNzcykKKyAg ICAgICAgICAgICAgICAsKGluc2VydC1qcykpKQogICAgKGZvcm1hdCAjdCAiPCEtLSNpbmNsdWRl IHZpcnR1YWw9XCIvc2VydmVyL2Jhbm5lci5odG1sXCIgLS0+IikKIAogICAgKHN4bWwtPnhtbCAo cGFja2FnZXMtPnN4bWwgcGFja2FnZXMpKQpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L3BhY2thZ2Ut bGlzdC5jc3MgYi9idWlsZC1hdXgvcGFja2FnZS1saXN0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42N2Q0MjNhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQtYXV4L3Bh Y2thZ2UtbGlzdC5jc3MKQEAgLTAsMCArMSw4MSBAQAorLyogbGljZW5zZTogQ0MwICovCithIHsK KyAgdHJhbnNpdGlvbjogYWxsIDAuM3M7Cit9CisKK2RpdiNpbnRybyB7CisgIG1hcmdpbi1ib3R0 b206IDJlbTsKK30KK2RpdiNpbnRybyBkaXYsIGRpdiNpbnRybyBwIHsKKyAgcGFkZGluZzowLjVl bTsKK30KK2RpdiNpbnRybyBkaXYgeworICBmbG9hdDpsZWZ0OworfQorZGl2I2ludHJvIGltZyB7 CisgIGZsb2F0OmxlZnQ7CisgIHBhZGRpbmc6MC43NWVtOworfQorCit0YWJsZSNwYWNrYWdlcywg dGFibGUjcGFja2FnZXMgdHIsIHRhYmxlI3BhY2thZ2VzIHRib2R5LCB0YWJsZSNwYWNrYWdlcyB0 ZCwgdGFibGUjcGFja2FnZXMgdGggeworICBib3JkZXI6IDBweCBzb2xpZCBibGFjazsKKyAgY2xl YXI6IGJvdGg7Cit9CisKK2Rpdi5wYWNrYWdlLWRlc2NyaXB0aW9uIHsKKyAgcG9zaXRpb246IHJl bGF0aXZlOworfQorCit0YWJsZSNwYWNrYWdlcyB0cjpudGgtY2hpbGQoZXZlbikgeworICBiYWNr Z3JvdW5kLWNvbG9yOiAjRkZGOworfQordGFibGUjcGFja2FnZXMgdHI6bnRoLWNoaWxkKG9kZCkg eworICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFOworfQordGFibGUjcGFja2FnZXMgdHI6aG92ZXIs IHRhYmxlI3BhY2thZ2VzIHRyOmZvY3VzLCB0YWJsZSNwYWNrYWdlcyB0cjphY3RpdmUgeworICBi YWNrZ3JvdW5kLWNvbG9yOiAjREREOworfQordGFibGUjcGFja2FnZXMgdHI6Zmlyc3QtY2hpbGQs IHRhYmxlI3BhY2thZ2VzIHRyOmZpcnN0LWNoaWxkOmhvdmVyLCB0YWJsZSNwYWNrYWdlcyB0cjpm aXJzdC1jaGlsZDpmb2N1cywgdGFibGUjcGFja2FnZXMgdHI6Zmlyc3QtY2hpbGQ6YWN0aXZlIHsK KyAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKKyAgY29sb3I6ICNmZmY7Cit9Cit0YWJsZSNwYWNr YWdlcyB0ZAoreworIG1hcmdpbjowcHg7CisgcGFkZGluZzowLjJlbSAwLjVlbTsKK30KK3RhYmxl I3BhY2thZ2VzIHRkOmZpcnN0LWNoaWxkIHsKK3dpZHRoOjEwJTsKK3RleHQtYWxpZ246Y2VudGVy OworfQordGFibGUjcGFja2FnZXMgdGQ6bnRoLWNoaWxkKDIpeworICB3aWR0aDozMCU7Cit9Cit0 YWJsZSNwYWNrYWdlcyB0ZDpsYXN0LWNoaWxkIHsKKyAgd2lkdGg6NjAlOworfQorCitpbWcucGFj a2FnZS1sb2dvIHsKK2Zsb2F0OiBsZWZ0OworcGFkZGluZzogMC43NWVtOworfQorCit0YWJsZSNw YWNrYWdlcyBzcGFuIGEgeworICBmbG9hdDogcmlnaHQ7Cit9CisKK2EjdG9wIHsKK3Bvc2l0aW9u OmZpeGVkOworcmlnaHQ6MTBweDsKK2JvdHRvbToxMHB4OworZm9udC1zaXplOjE1MCU7CitiYWNr Z3JvdW5kLWNvbG9yOiNFRUU7CitwYWRkaW5nOjEwcHggNy41cHggMCA3LjVweDsKK3RleHQtZGVj b3JhdGlvbjpub25lOworY29sb3I6IzAwMDsKK2JvcmRlci1yYWRpdXM6NXB4OworfQorYSN0b3A6 aG92ZXIsIGEjdG9wOmZvY3VzIHsKK2JhY2tncm91bmQtY29sb3I6IzMzMzsKK2NvbG9yOiNmZmY7 Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L3Bh Y2thZ2UtbGlzdC5qcyBiL2J1aWxkLWF1eC9wYWNrYWdlLWxpc3QuanMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyOTcxYQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1 eC9wYWNrYWdlLWxpc3QuanMKQEAgLTAsMCArMSw0MyBAQAorLy8gbGljZW5zZTogQ0MwCitmdW5j dGlvbiBzaG93X2hpZGUoaWRUaGluZykKK3sKKyAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQg JiYgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUpIHsKKyAgICB2YXIgdGhpbmcgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZChpZFRoaW5nKTsKKyAgICAvKiBVc2VkIHRvIGNoYW5nZSB0aGUgbGluayB0 ZXh0LCBkZXBlbmRpbmcgb24gd2hldGhlciBkZXNjcmlwdGlvbiBpcworICAgICAgIGNvbGxhcHNl ZCBvciBleHBhbmRlZCAqLworICAgIHZhciB0aGluZ0xpbmsgPSB0aGluZy5wcmV2aW91c1NpYmxp bmcubGFzdENoaWxkLmZpcnN0Q2hpbGQ7CisgICAgaWYgKHRoaW5nKSB7CisgICAgICBpZiAodGhp bmcuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpIHsKKyAgICAgICAgdGhpbmcuc3R5bGUuZGlzcGxh eSA9ICIiOworICAgICAgICB0aGluZ0xpbmsuZGF0YSA9ICdDb2xsYXBzZSc7CisgICAgICB9IGVs c2UgeworICAgICAgICB0aGluZy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICB0aGlu Z0xpbmsuZGF0YSA9ICdFeHBhbmQnOworICAgICAgfQorICAgIH0KKyAgfQorfQorLyogQWRkIGNv bnRyb2xsZXJzIHVzZWQgZm9yIGNvbGxhcHNlL2V4cGFuc2lvbiBvZiBwYWNrYWdlIGRlc2NyaXB0 aW9ucyAqLworZnVuY3Rpb24gcHJlcChpZFRoaW5nKQoreworICB2YXIgdGRUaGluZyA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKGlkVGhpbmcpLnBhcmVudE5vZGU7CisgIGlmICh0ZFRoaW5nKSB7 CisgICAgdmFyIGFUaGluZyA9IHRkVGhpbmcuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVu dC5jcmVhdGVFbGVtZW50KCdhJykpOworICAgIGFUaGluZy5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAn amF2YXNjcmlwdDp2b2lkKDApJyk7CisgICAgYVRoaW5nLnNldEF0dHJpYnV0ZSgndGl0bGUnLCAn c2hvdy9oaWRlIHBhY2thZ2UgZGVzY3JpcHRpb24nKTsKKyAgICBhVGhpbmcuYXBwZW5kQ2hpbGQo ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGFuZCcpKTsKKyAgICBhVGhpbmcub25jbGljaz1m dW5jdGlvbigpe3Nob3dfaGlkZShpZFRoaW5nKTt9OworICAgIC8qIGFUaGluZy5vbmtleXByZXNz PWZ1bmN0aW9uKCl7c2hvd19oaWRlKGlkVGhpbmcpO307ICovCisgIH0KK30KKy8qIFRha2UgbiBl bGVtZW50IElEcywgcHJlcGFyZSB0aGVtIGZvciBqYXZhc2NyaXB0IGVuaGFuY2VkCitkaXNwbGF5 IGFuZCBoaWRlIHRoZSBJRHMgYnkgZGVmYXVsdC4gKi8KK2Z1bmN0aW9uIGJ1bGtfc2hvd19oaWRl KCkKK3sKKyAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgJiYgZG9jdW1lbnQuY3JlYXRlVGV4 dE5vZGUpIHsKKyAgICBmb3IodmFyIGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAg ICAgIHByZXAoYXJndW1lbnRzW2ldKQorICAgICAgc2hvd19oaWRlKGFyZ3VtZW50c1tpXSk7Cisg ICAgfQorICB9Cit9Ci0tIAoxLjcuMTAuNAoK --001a11c2e74c9671cd04e438564e--