From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christopher Genovese Subject: new tag query parser [3/5] -- the code and how to use it (code attached) Date: Thu, 16 Aug 2012 00:00:53 -0400 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=f46d042e00e33965c804c75a186a Return-path: Received: from eggs.gnu.org ([208.118.235.92]:36793) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1rGn-000663-Da for emacs-orgmode@gnu.org; Thu, 16 Aug 2012 00:01:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T1rGl-0006P1-VP for emacs-orgmode@gnu.org; Thu, 16 Aug 2012 00:01:17 -0400 Received: from mail-gg0-f169.google.com ([209.85.161.169]:41434) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1rGl-0006Ok-Ia for emacs-orgmode@gnu.org; Thu, 16 Aug 2012 00:01:15 -0400 Received: by ggnf4 with SMTP id f4so2781072ggn.0 for ; Wed, 15 Aug 2012 21:01:14 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --f46d042e00e33965c804c75a186a Content-Type: multipart/alternative; boundary=f46d042e00e33965a004c75a1868 --f46d042e00e33965a004c75a1868 Content-Type: text/plain; charset=ISO-8859-1 * The code for my new tag/todo-query parser implementation is attached. 1. org-tag-query-parse.el -- the new parser implementation 2. tag-query-tests.el -- the ``try it'' interface and test suites * Installing [fn:1] 1. Put org-tag-query-parse.el on your load path (or add its location) 2. Byte compile org-tag-query-parse.el but do *not* load it yet 3. Load tag-query-tests.el or do (require 'tag-query-tests). * Using it [fn:2] 1. Run the tests with M-x run-tag-query-tests This runs the tests and nicely displays a summary in a new buffer. Give a prefix argument to display detailed test results instead, showing all the queries tested. All tests passed for me with GNU Emacs 23.2 and 24.1 on Mac OS X 10.7.3 and 10.6.8. 2. Search with queries as usual. Do ordinary tag searches or use the mapping API via org-scan-tags and org-map-entries as you ordinarily would. 3. Swap parsers with M-x org-use-tag-parser. This toggles between new and original parser implementations. With a prefix argument, it prompts you for which version to use. The intent is to make it easy to try out and compare the new and current parsers in your query searches. (This command affects standard org behaviors, such as agenda search and org-map-entries. The tests run with run-tag-query-tests are unaffected by it, *except* for the org-map-entries-1 suite which uses the current org-map-entries function. To see all PASS's, you should run the test with the new parser version installed.) ---------------- [fn:1] For example, if you move to the directory with the .el files in emacs, you can do (add-to-list 'load-path default-directory) (byte-compile-file "org-tag-query-parse.el") (byte-compile-file "tag-query-tests.el") ; optional! (require 'tag-query-tests) [fn:2] Just to be clear, the commands run-tag-query-tests and org-use-tag-parser are convenience commands in tag-query-tests.el and are not part of the main code. --f46d042e00e33965a004c75a1868 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable * The code for my new tag= /todo-query parser implementation is attached.
=A0 1. org-tag-query-parse.el=A0=A0 -- the new parser implementation
=A0 2. tag-query-tests.el= =A0=A0=A0=A0=A0=A0 -- the ``try it'' interface and test suites

* Installing [fn:1]
=A0 1. Put org-tag-query-parse.el on your load path= (or add its location)
=A0 2. Byte compile org-t= ag-query-parse.el but do *not* load it yet

=A0= 3. Load tag-query-tests.el or do (require 'tag-query-tests).
* Using it [fn:2]
=A0 1= . Run the tests with M-x run-tag-query-tests
=A0=A0=A0=A0
=A0=A0=A0=A0 This runs the tests and nicely displays a su= mmary in a new buffer.
=A0=A0=A0=A0 Give a prefi= x argument to display detailed test results instead,

=A0=A0=A0=A0 showing all the queries tested. All tests passed for me= with
=A0=A0=A0=A0 GNU Emacs 23= .2 and 24.1 on Mac OS X 10.7.3 and 10.6.8.

=A0 2. Search with queries as = usual.

=A0=A0=A0=A0
=A0=A0=A0=A0 Do ordinary tag searches or use the mapping = API via
=A0=A0=A0=A0 org-scan-tag= s and org-map-entries as you ordinarily would.
=A0=A0=A0=A0
=A0 3. Swap parsers with = M-x org-use-tag-parser.
=A0=A0=A0=A0 =A0=A0=A0=A0 This toggles= between new and original parser implementations.
=A0=A0=A0=A0 With a prefix argument, it prompts you for which version t= o use.
=A0=A0=A0=A0 The intent i= s to make it easy to try out and compare the new
=A0=A0=A0=A0 and current parsers in your query searches.
=A0=A0=A0=A0
=A0=A0=A0=A0 (This command affects standard org behaviors= , such as agenda search
=A0=A0=A0=A0 and org-map-= entries. The tests run with run-tag-query-tests are
=A0=A0=A0=A0 unaffected by it, *except* for the org-map-entries-1 sui= te which
=A0=A0=A0=A0 uses the cur= rent org-map-entries function. To see all PASS's, you
=A0=A0=A0=A0 should run the test with the new parser version = installed.)
=A0=A0=A0=A0
----------------
[fn:1] For example, if yo= u move to the directory with the .el files
=A0= =A0=A0=A0=A0=A0 in emacs, you can do
=A0=A0=A0=A0=A0=A0=A0=A0= =A0 (add-to-list 'load-path default-directory)
=A0=A0=A0=A0=A0=A0=A0=A0=A0 (byte-compile-file "org-tag-query-par= se.el")
=A0=A0=A0=A0=A0=A0=A0=A0= =A0 (byte-compile-file "tag-query-tests.el") ; optional!=A0=A0=A0=A0=A0=A0=A0=A0=A0 (require 'tag-query-te= sts)

[fn:2] Just to be clear, the commands run-tag-query-= tests and
=A0=A0=A0=A0=A0=A0 org-use-tag-parse= r are convenience commands in tag-query-tests.el
=A0=A0=A0=A0=A0=A0 and ar= e not part of the main code.

--f46d042e00e33965a004c75a1868-- --f46d042e00e33965c804c75a186a Content-Type: application/octet-stream; name="org-tag-query-parse.el" Content-Disposition: attachment; filename="org-tag-query-parse.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5xbph4r0 Ozs7IG9yZy10YWctcXVlcnktcGFyc2UuZWwgLS0gcHJvcG9zZWQgZnVsbCBwYXJzZXIgZm9yIHRh ZyBxdWVyaWVzCgo7OyBDb3B5cmlnaHQgKEMpIDIwMTIsIENocmlzdG9waGVyIFIuIEdlbm92ZXNl LCBhbGwgcmlnaHRzIHJlc2VydmVkLgoKOzsgQXV0aG9yOiAgQ2hyaXN0b3BoZXIgR2Vub3Zlc2Ug PGdlbm92ZXNlQGNtdS5lZHU+Cjs7IFZlcnNpb246IDEuMAo7Owo7OyBDcmVhdGVkOiAgICAgIFN1 biAyOSBKdWwgMjAxMiBhdCAxMDowNCBFRFQKOzsgTGFzdC1VcGRhdGVkOiBXZWQgMTUgQXVnIDIw MTIgYXQgMjI6MzAgRURUCjs7IFVwZGF0ZWQgQnk6ICAgQ2hyaXN0b3BoZXIgUi4gR2Vub3Zlc2UK OzsgS2V5d29yZHM6IG9yZy1tb2RlLCB0YWdzLCBxdWVyeSwgc2VhcmNoCjs7IFBhY2thZ2UtUmVx dWlyZXM6ICgob3JnLW1vZGUgNy44KSkKCgo7OzsgQ29tbWVudGFyeToKOzsKOzsgIFRoZSBjdXJy ZW50IHBhcnNlciBmb3IgdGFnIHF1ZXJ5IHNlYXJjaGVzIGRvZXMgbm90IGhhbmRsZQo7OyAgcGFy ZW50aGVzaXplZCBleHByZXNzaW9ucyBhbmQgdGh1cyBkb2VzIG5vdCBhbGxvdyBuZWdhdGluZyBj b21wbGV4Cjs7ICBxdWVyaWVzLiBUaGlzIGNvZGUgaW1wbGVtZW50cyBhIGZ1bGwgcGFyc2VyIGZv ciB0YWcgcXVlcmllcyB3aXRoCjs7ICBudW1iZXIgb2YgdXNlZnVsIGZlYXR1cmVzIChzZWUgdGhl IGxhYmVsZWQgTm90ZXMgYmVsb3cgZm9yIGZ1cnRoZXIKOzsgIGNvbW1lbnRzIG9uIHRoZXNlIGZl YXR1cmVzKToKOzsgCjs7ICAgMS4gUGFyZW50aGVzaXplZCBleHByZXNzaW9ucyB0byBhcmJpdHJh cnkgZGVwdGggYXJlIGFsbG93ZWQuCjs7ICAgMi4gQSAnLScgY2FuIGJlIHVzZWQgdG8gbmVnYXRl IGEgcGFyZW50aGVzaXplZCB0ZXJtLiAgICAgICAgICAgICBbTm90ZSBhXQo7OyAgIDMuIFJlZ2V4 J3MgaW4ge30gY2FuIGNvbnRhaW4gYnJhY2VzIGVzY2FwZWQgYnkgZG91Ymxpbmc6IHt7IH19LiAg W05vdGUgYl0KOzsgICA0LiBTdXBwb3J0cyBmYXN0IHByb3BlcnR5IHNlYXJjaCBvbiBIRUFESU5H IGFuZCBQUklPUklUWS4gICAgICAgIFtOb3RlIGNdCjs7ICAgNS4gSGFuZGxlcyBoeXBoZW5zIGlu IHByb3BlcnR5IG5hbWVzIHByb3Blcmx5LiAgICAgICAgICAgICAgICAgICBbTm90ZSBkXQo7OyAg IDYuIEFsbG93cyBvbmx5IHRoZSBwcm9wZXIgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGluY2x1ZGlu ZyA9PS4gICAgW05vdGUgZV0KOzsgICA3LiBBbGxvd3Mgc3BhY2VzIGFyb3VuZCBvcGVyYXRvcnMg YW5kIHRlcm1zIGZvciByZWFkYWJpbGl0eS4gICAgIFtOb3RlIGZdCjs7ICAgOC4gUGFyc2UgdHJl ZXMgdXNlIHRoZSBvcmlnaW5hbCBleHByZXNzaW9uIG9yZGVyOyBub3QgYSBiaWcKOzsgICAgICBk ZWFsLCBidXQgZnJlZS4KOzsgICA5LiBSZXR1cm5lZCBwYXJzZSB0cmVlcyBhcmUgY2xlYW4sIHdp dGhvdXQgdHJpdmlhbCBvcGVyYXRvcnMsCjs7ICAgICAgYW5kIGVycm9yIG1lc3NhZ2VzIGR1cmlu ZyBwYXJzaW5nIGFyZSByZWFzb25hYmx5IGhlbHBmdWwuCjs7ICAgMTAuIEEgZmV3IGJ1ZyBmaXhl cyBhbmQgYSBjbGVhbmVyIGBvcmctbWFrZS10YWdzLW1hdGNoZXInLiAgICAgICAKOzsKOzsgIFRo ZSB0d28gZXhpc3RpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIGFmZmVjdGVkIGluIHRoZSBjb2RlIGFy ZQo7OyAgYG9yZy1tYWtlLXRhZ3MtbWF0Y2hlcicgYW5kIGBvcmctc2Nhbi10YWdzJy4gSW4gdGhl IG5ldyB2ZXJzaW9uIG9mCjs7ICB0aGUgZm9ybWVyLCBJJ3ZlIHVuaWZpZWQgYm90aCBraW5kcyBv ZiBxdWVyeSBwYXJzaW5nLCBsZWFkaW5nIHRvIGEKOzsgIHNob3J0ZXIgYW5kIGNsZWFuZXIgZnVu Y3Rpb24uLiBUaGUgbmV3IHZlcnNpb24gb2YgdGhlIGxhdHRlciBkaWZmZXJzCjs7ICBpbiBvbmx5 IGEgY291cGxlICp2ZXJ5IG1pbm9yKiBwbGFjZXMgdGhhdCBjYXB0dXJlIHR3byB2YWx1ZXMgdGhh dAo7OyAgd2VyZSBhbHJlYWR5IGJlaW5nIGNvbXB1dGVkIGFueXdheSAoc2VlIHRoZSBkaWZmIHJl cHJvZHVjZWQgaW4gdGhlCjs7ICBjb21tZW50cykuCjs7ICAKOzsgIFRoZSBtYWluIGVudHJ5IHBv aW50IGlzIGBvcmctbWFrZS10YWdzLW1hdGNoZXInLCBhbmQgdGhlIHdvcmtob3JzZQo7OyAgZm9y IHRoZSBuZXcgcGFyc2VyIGlzIGBvcmctdGFnLXF1ZXJ5LXBhcnNlJywgd2l0aCBuZXcgZnVuY3Rp b24KOzsgIGBvcmctdG9kby1xdWVyeS1wYXJzZScgaGFuZGxpbmcgdGhlIC8hPyB0b2RvIHBhcnNp bmcuCjs7ICAKOzsgIE5vdGVzOgo7OyAgICBhLiBUaGVyZSBpcyBubyBuZWVkIHRvIGludHJvZHVj ZSBhIG5ldyBjaGFyYWN0ZXIgc3VjaCBhcyAhIGZvcgo7OyAgICAgICBuZWdhdGlvbiBiZWNhdXNl IHRoZSBzZW1hbnRpY3Mgb2YgdGhlIC0gYXJlIGNsZWFyIGFuZCBhcmUKOzsgICAgICAgY29uc2lz dGVudCB3aXRoIGl0cyB1c2UgZm9yIHRhZ3MuIEEgLSBiaW5kcyBtb3JlIHRpZ2h0bHkKOzsgICAg ICAgdGhhbiAmIHdoaWNoIGluIHR1cm4gYmluZHMgbW9yZSB0aWdodGx5IHRoYW4gfC4gQSArCjs7 ICAgICAgIHNlbGVjdG9yIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHBvc2l0aXZlIHNlbGVjdGlvbiBv ZiBhCjs7ICAgICAgIHBhcmVudGhlc2l6ZWQgdGVybSBidXQgaXQgaXMgZXF1aXZhbGVudCB0byB1 c2luZyBubwo7OyAgICAgICBzZWxlY3RvciwganVzdCBhcyBmb3IgdGFncy4KOzsgICAgICAgCjs7 ICAgIGIuIEJlY2F1c2UgXCdzIGFyZSBzbyBoZWF2aWx5IHVzZWQgaW4gcmVnZXgncyBhbmQgYmVj YXVzZSB0aGV5Cjs7ICAgICAgIGhhdmUgdG8gYmUgZG91YmxlZCBpbiBzdHJpbmdzLCB1c2luZyBc J3MgZm9yIGFuIGFkZGl0aW9uYWwKOzsgICAgICAgZXNjYXBlIGxheWVyIHdvdWxkIGJlIG1lc3N5 LCBhbWJpZ3VvdXMsIGFuZCBoYXJkIHRvIHJlYWQuCjs7ICAgICAgIE9ubHkgdGhlIHt9J3MgbmVl ZCB0byBiZSBlc2NhcGVkIGFuZCB0aGUgZG91YmxpbmcgZXNjYXBlcwo7OyAgICAgICB7eyAtPiB7 IGFuZCB9fSAtPiB9IGFyZSBzaW1wbGUsIHJlYWRhYmxlLCBhbmQgZmFzdCB0bwo7OyAgICAgICBw YXJzZS4gRm9yIGV4YW1wbGU6ICIre2FiY1xce3szLDdcXH19fSIgZ2l2ZXMgdGhlIHJlZ2V4Cjs7 ICAgICAgICJhYmNcXHszLDdcXH0iLiBQYXJpdHkgbWFrZXMgY29ycmVjdG5lc3MgY2xlYXIgYXQg YSBnbGFuY2UuCjs7ICAgICAgIAo7OyAgICBjLiBCZWNhdXNlIGhlYWRsaW5lIChhbmQgcHJpb3Jp dHkpIHNlYXJjaGVzIGNhbiBiZSB1c2VmdWwgYW5kCjs7ICAgICAgIHBvd2VyZnVsLCBhbmQgYmVj YXVzZSB0aGUgaW5mb3JtYXRpb24gb24gdGhvc2UgZmllbGRzIGlzCjs7ICAgICAgICphbHJlYWR5 IHByb2Nlc3NlZCogaW4gYG9yZy1zY2FuLXRhZ3MnLCB3ZSBnZXQgdGhvc2UKOzsgICAgICAgc3Bl Y2lhbCBzZWFyY2hlcyAqZXNzZW50aWFsbHkgZm9yIGZyZWUqLCByZXF1aXJpbmcgb25seSB0d28K OzsgICAgICAgbWlub3IgY2hhbmdlcyB0byBgb3JnLXNjYW4tdGFncycuIFNlZSB0aGUgdW5pZmll ZCBkaWZmIGluCjs7ICAgICAgIGNvbW1lbnRzLiBUaGUgc3BlY2lhbCBQUklPUklUWSBwcm9wZXJ0 eSBhbHJlYWR5IGV4aXN0czsgSQo7OyAgICAgICBhZGRlZCB0aGUgc3BlY2lhbCBIRUFESU5HIHBy b3BlcnR5IGZvciB0aGVzZSBwdXJwb3Nlcy4gSSdtCjs7ICAgICAgIG9wZW4gdG8gY2hhbmdpbmcg dGhlIG5hbWUgb2YgY291cnNlLCBidXQgSSBkbyB0aGluayB0aGUKOzsgICAgICAgZmVhdHVyZSBp cyB2ZXJ5IHVzZWZ1bC4KOzsgCjs7ICAgIGQuIEkgZGlkIG5vdCBzZWUgaXQgaW4gdGhlIG1hbnVh bCwgYnV0IEkgdGhpbmsgdGhhdCBwcm9wZXJ0eSBuYW1lcwo7OyAgICAgICB3aXRoIGh5cGhlbnMg c2hvdWxkIGhhdmUgdGhlc2UgXC1lc2NhcGVkIC0ncyBpbiB0aGUgcXVlcnkKOzsgICAgICAgc3Ry aW5nLCB3aXRoIHRoZSBlc2NhcGluZyBzbGFzaGVzIHJlbW92ZWQgaW4gdGhlIHByb2R1Y2VkCjs7 ICAgICAgIG1hdGNoZXIuIFRoaXMgaXMgbm90IGN1cnJlbnRseSBkb25lLCBidXQgdGhlIG5ldyB2 ZXJzaW9uIGRvZXMuCjs7ICAgICAgIFNlZSBOb3RlIGggZm9yIGRldGFpbHMuCjs7IAo7OyAgICBl LiBJdCBzZWVtcyBkZXNpcmFibGUgdG8gc3VwcG9ydCBib3RoID0gYW5kID09IGFzIGVxdWFsaXR5 IG9wZXJhdG9ycwo7OyAgICAgICBzaW5jZSB0aGUgbGF0dGVyIGlzIHNvIGNvbW1vbiBieSBoYWJp dC4gVGhlIG5ldyB2ZXJzaW9uIGFsbG93cwo7OyAgICAgICB0aGlzIGV4cGxpY2l0bHkuIFRoZSBv cmlnaW5hbCB2ZXJzaW9uIGRvZXMgYXMgd2VsbCwgYnV0IHRoZQo7OyAgICAgICByZWdleCBmb3Ig dGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgYWxzbyBhbGxvd3Mgb3RoZXIgb3BlcmF0b3JzCjs7ICAg ICAgIDw8LCA+PCwgPj4sID0+LCBhbmQgPj0gYXMgd2VsbCwgd2hpY2ggY2FuIHByb2R1Y2UgYmFk IG1hdGNoZXJzLgo7OyAKOzsgICAgZi4gQ3VycmVudGx5LCBzcGFjZXMgYXJlIGlnbm9yZWQgYXJv dW5kICYsIHwsIHRoZSBpbXBsaWNpdCAmIGJldHdlZW4KOzsgICAgICAgdGVybXMsIGFyb3VuZCB0 aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgaW4gcHJvcGVydHkgc2VhcmNoZXMsCjs7ICAgICAgIGFu ZCBhcm91bmQgKy8tIHNlbGVjdG9ycy4gU3BhY2VzIGFyZSBub3QgaWdub3JlZCBpbnNpZGUge30n cwo7OyAgICAgICBmb3IgYSByZWdleHAgbWF0Y2guCjs7Cjs7ICBXaGF0IGZvbGxvd3MgaXMgYSBn cmFtbWFyIGZvciB0aGUgdXBkYXRlZCB0YWcgcXVlcnkgZHNsLCB3aGljaCBpcwo7OyAgZ2l2ZW4g aW4gYW4gaW5mb3JtYWwgaHlicmlkIG9mIEJORiBhbmQgcmVnZXggb3BlcmF0b3JzLiBIb3BlZnVs bHksIGl0J3MKOzsgIGNsZWFyIGVub3VnaC4gVGhlIG5vbi1vYnZpb3VzIHRlcm1pbmFscyBhcmUg QUxMIENBUFMgYW5kIGFyZSBsaXN0ZWQgYmVsb3cuCjs7ICBJJ3ZlIGV4Y2x1ZGVkIHRoZSAvIT8g dG9kbyBxdWVyeSBjb21wb25lbnRzIGhlcmUsIG1vc3RseSBvdXQgb2YgbGF6aW5lc3MsCjs7ICBi dXQgaW4gYnJpZWYsIHRoZXNlIGNhbiBlbmQgdGhlIHN0cmluZyBvciBhbnkgcGFyZW50aGVzaXpl ZCBleHByZXNzaW9uLgo7OyAKOzsgIEdyYW1tYXI6Cjs7ICAgIEV4cHJlc3Npb24gIDwtICBDb25q dW5jdGlvbiAoT1IgQ29uanVuY3Rpb24pKgo7OyAgICBDb25qdW5jdGlvbiA8LSAgVGVybSAoQU5E PyBUZXJtKSoKOzsgICAgVGVybSAgICAgICAgPC0gIFNFTEVDVE9SPyBUQUdfSURFTlQKOzsgICAg ICAgICAgICAgICAgIHwgIFNFTEVDVE9SPyBMQlJBQ0UgUmVnZXggUkJSQUNFCjs7ICAgICAgICAg ICAgICAgICB8ICBTRUxFQ1RPUj8gUFJPUF9JREVOVCBDTVBfT1AgTlVNQkVSCjs7ICAgICAgICAg ICAgICAgICB8ICBTRUxFQ1RPUj8gUFJPUF9JREVOVCBDTVBfT1AgU1RSSU5HCjs7ICAgICAgICAg ICAgICAgICB8ICBTRUxFQ1RPUj8gUFJPUF9JREVOVCBDTVBfT1AgREFURV9TVFJJTkcKOzsgICAg ICAgICAgICAgICAgIHwgIFNFTEVDVE9SPyBQUk9QX0lERU5UIE1BVENIX09QIExCUkFDRSBSRUdF WCBSQlJBQ0UKOzsgICAgICAgICAgICAgICAgIHwgIFNFTEVDVE9SPyBMUEFSRU4gRXhwcmVzc2lv biBSUEFSRU4KOzsgICAgICAgICAgICAgICAgIAo7OyAgVGVybWluYWxzICh0aGUgbm9ub2J2aW91 cyBvbmVzKToKOzsgICAgT1IgPSB8Cjs7ICAgIEFORCA9ICYKOzsgICAgQ01QX09QID0gKD09fD18 PD18PD58Pj18Pnw8KQo7OyAgICBNQVRDSF9PUCA9ICg9PXw9fDw+KQo7OyAgICBUQUdfSURFTlQg PSBbQS1aYS16MC05X0AjJV0rICAgICAgICAgCjs7ICAgIFBST1BfSURFTlQgPSAoW0EtWmEtejAt OV9dKyhcXC0pKikrICAKOzsgICAgU0VMRUNUT1I/ID0gWy0rXT8KOzsgICAgU1RSSU5HID0gYmFs YW5jZWQgZG91YmxlLXF1b3RlZCBzdHJpbmcgd2l0aCBlc2NhcGVzCjs7ICAgIERBVEVfU1RSSU5H ID0gb3JnIHN0eWxlIGRhdGUgc3RyaW5nCjs7ICAgIFJFR0VYUCA9IHJlZ3VsYXIgZXhwcmVzc2lv biB3aXRoIHsgYW5kIH0gZG91YmxlZCB0byBlc2NhcGUsIHt7IGFuZCB9fQo7OwoKCjs7OyBMaWNl bnNlOgo7Owo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCjs7IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCjs7IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvcgo7OyAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgo7Owo7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKOzsgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKOzsgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo7Owo7OyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdy aXRlIHRvCjs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGgKOzsgRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgo7OwoK Cjs7OyBDb2RlOgoKKHJlcXVpcmUgJ29yZykKKGV2YWwtd2hlbi1jb21waWxlCiAgKHJlcXVpcmUg J2NsKSkKCgo7OzsgVXRpbGl0aWVzCgooZGVmdW4gb3JnLXJlYWQtYmFsYW5jZWQtc3RyaW5nIChv cGVuLWRlbGltIGNsb3NlLWRlbGltKQogICJSZXR1cm4gc3RyaW5nIGRlbGltaXRlZCBieSBPUEVO LURFTElNIGFuZCBDTE9TRS1ERUxJTSB3aXRoIGVzY2FwZXMuCk9QRU4tREVMSU0gYW5kIENMT1NF LURFTElNIG11c3QgYmUgKmRpc3RpbmN0KiBjaGFyYWN0ZXJzLiBSZWFkaW5nCmJlZ2lucyBhdCBw b2ludCBpbiB0aGUgY3VycmVudCBidWZmZXIuIFRvIGluY2x1ZGUgT1BFTi1ERUxJTSBhbmQKQ0xP U0UtREVMSU0gaW5zaWRlIHRoZSBzdHJpbmcgYmVpbmcgcmVhZCwgdGhvc2UgY2hhcmFjdGVycyBt dXN0CmJlICpkb3VibGVkKiBhbmQgb25seSBvbmUgY29weSBvZiB0aGUgY2hhcmFjdGVyIGlzIGtl cHQgaW4gdGhlCnN0cmluZy4gVGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGVsaW1pdGVycyBmb3Ig dGhlIHJlYWQgc2VxdWVuY2UKbXVzdCBiZSBzaW5nbGUgY29waWVzLCBhbmQgYW4gdW5lc2NhcGVk IE9QRU4tREVMSU0gd2lsbCByYWlzZSBhbgplcnJvci4iCiAgKHdoZW4gKGNoYXItZXF1YWwgb3Bl bi1kZWxpbSBjbG9zZS1kZWxpbSkKICAgIChlcnJvciAiT3BlbiBhbmQgY2xvc2UgZGVsaW1pdGVy cyBtdXN0IGJlIGRpc3RpbmN0LCAlYyIgb3Blbi1kZWxpbSkpCiAgKHVubGVzcyAoY2hhci1lcXVh bCAoY2hhci1hZnRlcikgb3Blbi1kZWxpbSkKICAgIChlcnJvciAiTWlzc2luZyBvcGVuaW5nICVj IGluIGRlbGltaXRlZCBzdHJpbmciIG9wZW4tZGVsaW0pKQogIChmb3J3YXJkLWNoYXIgMSkgOyBz a2lwIGluaXRpYWwgZGVsaW1pdGVyCiAgKGxldCAoKGRlbGltLXJlIChmb3JtYXQgIlslYyVjXSIg b3Blbi1kZWxpbSBjbG9zZS1kZWxpbSkpCiAgICAgICAgKGRlbGltcy11bmJhbGFuY2VkIHQpCiAg ICAgICAgKGJlZ2luIChwb2ludCkpCiAgICAgICAgKGZyYWdtZW50cyBuaWwpCiAgICAgICAgKGNo IG5pbCkpCiAgICAod2hpbGUgKGFuZCBkZWxpbXMtdW5iYWxhbmNlZCAocmUtc2VhcmNoLWZvcndh cmQgZGVsaW0tcmUgbmlsIHQpKQogICAgICAoc2V0cSBjaCAoY2hhci1iZWZvcmUpKQogICAgICAo Y29uZAogICAgICAgICgoY2hhci1lcXVhbCBjaCBvcGVuLWRlbGltKQogICAgICAgICAoc2V0cSBj aCAoY2hhci1hZnRlcikpCiAgICAgICAgIChpZiAobm90IChhbmQgY2ggKGNoYXItZXF1YWwgY2gg b3Blbi1kZWxpbSkpKQogICAgICAgICAgICAgKGVycm9yICJVbmVzY2FwZWQgb3BlbiBkZWxpbWl0 ZXIgJWMgaW4gYmFsYW5jZWQgc3RyaW5nIiBvcGVuLWRlbGltKQogICAgICAgICAgIChwdXNoIChi dWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgYmVnaW4gKDEtIChwb2ludCkpKSBmcmFnbWVu dHMpCiAgICAgICAgICAgKHNldHEgYmVnaW4gKHBvaW50KSkKICAgICAgICAgICAoZm9yd2FyZC1j aGFyIDEpKSkKICAgICAgICAoKGNoYXItZXF1YWwgY2ggY2xvc2UtZGVsaW0pCiAgICAgICAgIChz ZXRxIGNoIChjaGFyLWFmdGVyKSkKICAgICAgICAgKGlmIChub3QgKGFuZCBjaCAoY2hhci1lcXVh bCBjaCBjbG9zZS1kZWxpbSkpKQogICAgICAgICAgICAgKHNldHEgZGVsaW1zLXVuYmFsYW5jZWQg bmlsKQogICAgICAgICAgIChwdXNoIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgYmVn aW4gKDEtIChwb2ludCkpKSBmcmFnbWVudHMpCiAgICAgICAgICAgKHNldHEgYmVnaW4gKHBvaW50 KSkKICAgICAgICAgICAoZm9yd2FyZC1jaGFyIDEpKSkpKQogICAgKHdoZW4gZGVsaW1zLXVuYmFs YW5jZWQKICAgICAgKGVycm9yICJVbmJhbGFuY2VkIGRlbGltaXRlcnMgJWMlYyBpbiBiYWxhbmNl ZCBzdHJpbmcgYXQgY2hhciAlZC4iCiAgICAgICAgICAgICBvcGVuLWRlbGltIGNsb3NlLWRlbGlt IChwb2ludCkpKQogICAgKHB1c2ggKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBiZWdp biAoMS0gKHBvaW50KSkpIGZyYWdtZW50cykKICAgIChpZiAobnVsbCAoY2RyIGZyYWdtZW50cykp CiAgICAgICAgKGNhciBmcmFnbWVudHMpCiAgICAgIChhcHBseSAnY29uY2F0IChucmV2ZXJzZSBm cmFnbWVudHMpKSkpKQoKKGRlZnVuIG9yZy1yZWFkLXF1b3RlZC1zdHJpbmctaW4tcXVlcnkgKCkK ICAiUmVhZCBhIHF1b3RlZCBzdHJpbmcsIHdpdGggZXNjYXBlcywgc3RhcnRpbmcgYXQgcG9pbnQu CkFzc3VtZSB0aGF0IGFuIG9wZW5pbmcgcXVvdGUgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBUaGlz IGlzIGp1c3QKYSB3cmFwcGVyIGZvciBgcmVhZCcgdGhhdCByZXBvcnRzIGVycm9ycyBuaWNlbHku IgogIChsZXQgKChzdGFydCAocG9pbnQpKSkKICAgIChjb25kaXRpb24tY2FzZSBleGNlcHRpb24K ICAgICAgICAocmVhZCAoY3VycmVudC1idWZmZXIpKQogICAgICAoZXJyb3IKICAgICAgIChvcmct dHF1ZXJ5LWVycm9yCiAgICAgICAgImJhZGx5IGZvcm1lZCBxdW90ZWQgdmFsdWUgaW4gcHJvcGVy dHkgY29tcGFyaXNvbiIgOnBvcyBzdGFydCkpKSkpCgo7OyBJJ20gaW5jbGluZWQgdG8gZGVmaW5l IGFuIGVycm9yIHN5bWJvbHMgaGVyZSB0byBhbGxvdyBmaW5lciBjb250cm9sLgo7OyBCdXQgZXJy b3Igc3ltYm9scyBkb24ndCBzZWVtIHRvIGJlIHVzZWQgaW4gdGhlIG1haW4gb3JnIGNvZGUsIHNv IEknbGwKOzsgZm9yZ28gdGhlbSBoZXJlIGFuZCB1c2UgYGVycm9yJyBkaXJlY3RseS4gIC0tIENS RyAzMSBKdWx5IDIwMTIKKGRlZnVuIG9yZy10cXVlcnktZXJyb3IgKGluZm8gJnJlc3Qgb3RoZXIt YXJncykKICAiUmFpc2UgYSBxdWVyeSBwYXJzaW5nIGVycm9yLgpJTkZPIGlzIGFuIGF1eGlsbGlh cnkgbWVzc2FnZSB3aGljaCBpcyBhcHBlbmRlZCB0byB0aGUgc3RhbmRhcmQKbWVzc2FnZSBhbmQg d2hpY2ggaXMgdHJlYXRlZCBhcyBhIGZvcm1hdCBzdHJpbmcgZm9yIE9USEVSLUFSR1MuClRoaXMg bmVlZC9zaG91bGQgbm90IGJlIGNhcGl0YWxpemVkLiBUaGUgZW5kIG9mIE9USEVSLUFSR1MgY2Fu CmNvbnRhaW4ga2V5d29yZC12YWx1ZSBwYWlycyA6cG9zIDxudW1iZXItb3ItbWFya2VyPiBhbmQg OnR5cGUKPGRlc2NyaXB0aXZlIHN0cmluZz4gdG8gY29udHJvbCB0aGUgZmluYWwgZXJyb3IgbWVz c2FnZS4gVGhlCmZvcm1lciBkZWZhdWx0cyB0byBwb2ludCAocG9zaXRpb24gaW4gdGhlIHF1ZXJ5 IHN0cmluZykgYW5kIHRoZQpsYXR0ZXIgZGVmYXVsdHMgdG8gYHRhZycuIgogIChsZXQqICgocG9z IChvciAoY2FkciAobWVtcSA6cG9zIG90aGVyLWFyZ3MpKSAocG9pbnQpKSkKICAgICAgICAgKHF0 eXBlIChvciAoY2FkciAobWVtcSA6dHlwZSBvdGhlci1hcmdzKSkgInRhZyAiKSkpCiAgICAoZXJy b3IgKGZvcm1hdCAiUGFyc2UgZXJyb3IgaW4gJXNxdWVyeSBhdCBjaGFyYWN0ZXIgJWQsICVzIgog ICAgICAgICAgICAgICAgICAgcXR5cGUgcG9zIChhcHBseSAnZm9ybWF0IGluZm8gb3RoZXItYXJn cykpKSkpCgo7OyBUaGlzIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBwYXJzZXIgc3ltYm9sIHRhYmxl IGF0IGNvbXBpbGUgdGltZS4KKGRlZm1hY3JvIG9yZy1kZWZoYXNoLWF0LWNvbXBpbGUgKG5hbWUg b3B0aW9ucyAmcmVzdCBib2R5KSAKICAiRGVmaW5lIGEgaGFzaCB0YWJsZSBOQU1FIGF0IGNvbXBp bGUgdGltZSBhbmQvb3IgbG9hZC10aW1lLgpPUFRJT05TIGlzIGEgbGlzdCwgcG9zc2libHkgZW1w dHksIG9mIG9wdGlvbnMgdG8gcGFzcyB0bwpgbWFrZS1oYXNoLXRhYmxlJy4gQk9EWSBpcyBhIGxp c3Qgb2Ygc2VxdWVuY2VzIChsaXN0cyBvcgp2ZWN0b3JzKSwgZWFjaCBvZiB3aGljaCBjb250YWlu cyBhIGtleSB2YWx1ZSBwYWlyLiBUaGUga2V5IGFuZAp0aGUgdmFsdWUgd2lsbCBiZSBldmFsdWF0 ZWQsIHNvIGZvciBleGFtcGxlLCBhIHN5bWJvbCBrZXkgc2hvdWxkCmJlIHF1b3RlZC4iCiAgKGRl Y2xhcmUgKGluZGVudCAyKSkKICAobGV0KiAoKGRvY3N0cmluZyAoYW5kIChzdHJpbmdwIChjYXIg Ym9keSkpIChjYXIgYm9keSkpKQogICAgICAgICAodGFibGUgKGlmIGRvY3N0cmluZyAoY2RyIGJv ZHkpIGJvZHkpKSkKICAgIGAoZXZhbC1hbmQtY29tcGlsZQogICAgICAgKGRlZnZhciAsbmFtZSAo bWFrZS1oYXNoLXRhYmxlICxAb3B0aW9ucykgLGRvY3N0cmluZykKICAgICAgICxAKG1hcGNhciAo bGFtYmRhIChzKSBgKHB1dGhhc2ggLChlbHQgcyAwKSAsKGVsdCBzIDEpICxuYW1lKSkgdGFibGUp KSkpCgoKOzs7IFJlZ2V4IGNvbXBhcmlzb24gZnVuY3Rpb25zIGluIGEgZm9ybSBsaWtlIHRoZSBv dGhlciBjb21wYXJpc29uIG9wZXJhdG9ycwoKKGRlZnVuIG9yZy1zdHJpbmctbWF0Y2g9IChzdHJp bmcgcmVnZXhwKQogIChzdHJpbmctbWF0Y2gtcCByZWdleHAgc3RyaW5nKSkKCihkZWZ1biBvcmct c3RyaW5nLW1hdGNoPD4gKHN0cmluZyByZWdleHApCiAgKG5vdCAoc3RyaW5nLW1hdGNoLXAgcmVn ZXhwIHN0cmluZykpKQoKCjs7OyBQYXJzaW5nIHV0aWxpdHkgZm9yIHJlYWRhYmxlIG1hdGNoZXJz Cgoob3JnLWRlZmhhc2gtYXQtY29tcGlsZSBvcmctdGFnLXF1ZXJ5LXRlcm1pbmFscyAoKQogICJM ZXhpY2FsIHRva2VuIHJlZ2V4ZXMgZm9yIHRhZyBxdWVyeSBwYXJzaW5nLgpIYXNoIHRhYmxlIGFs c28gY29udGFpbnMgdGhlIHN5bWJvbHMgKywgKiBhbmQgPyB0aGF0IGNhbiBiZSB1c2VkCnRvIHJl cHJlc2VudCByZXBldGl0aW9uIG9wZXJhdG9ycyBpbiBtYXRjaGVkIGV4cHJlc3Npb25zLAplLmcu LCAoTlVNQkVSKSsgb3IgKFNFTEVDVE9SKVw/LiAoPyBtdXN0IGJlIGVzY2FwZWQuKSIKICBbJ1RF Uk0tQkVHSU4gICAgKG9yZy1yZSAiWy0rWzphbG51bTpdX3soXSIpXQogIFsnU0VMRUNUT1IgICAg ICAiWy0rXSJdCiAgWydUQUctSURFTlQgICAgIChvcmctcmUgICJbWzphbG51bTpdX0AjJTpdKyIp XQogIFsnUFJPUC1JREVOVCAgICAob3JnLXJlICJcXCg/OltbOmFsbnVtOl1fXStcXCg/OlxcXFwt XFwpKlxcKSsiKV0KICBbJ0NNUC1PUCAgICAgICAgIlxcKD86PT0/XFx8PD1cXHw8PlxcfD49XFx8 PFxcfD5cXCkiXQogIFsnTUFUQ0gtT1AgICAgICAiXFwoPzo9PT9cXHw8PlxcKSJdCiAgWydDTVAt UkhTLUJFR0lOIChvcmctcmUgIlxcKD86e1xcfFxcXCJcXHwtP1suWzpkaWdpdDpdXVxcKSIpXQog IFsnUkVHRVgtT1BFTiAgICAieyJdCiAgWydHUk9VUC1PUEVOICAgICIoIl0KICBbJ0dST1VQLUNM T1NFICAgIikiXQogIFsnT1ItT1AgICAgICAgICAifCJdCiAgWydBTkQtT1AgICAgICAgICImIl0K ICBbJ0RBVEUtU1RSSU5HICAgIlwiW1s8XS4qP1tdPl1cIiJdCiAgWydJTlRFR0VSICAgICAgIChv cmctcmUgIi0/W1s6ZGlnaXQ6XV0rIildCiAgWydOVU1CRVIgICAgICAgICItP1xcKD86XFwuWzAt OV0rXFx8WzAtOV0rXFwoPzpcXC5bMC05XSpcXCk/XFwpXFwoPzpbZUVdWy0rXT9bMC05XStcXCk/ Il0KICBbJ1NQQUNFICAgICAgICAgIltbOmJsYW5rOl1dIl0KICBbJ1NQQUNFKiAgICAgICAgIltb OmJsYW5rOl1dKiJdCiAgWydUT0RPLU1BUktFUiAgICIvIl0KICBbJ1RPRE8tT05MWS1NICAgIiEi XQogIFsnVE9ETy1LRVkgICAgICAiW14tK1wie30mfCgpXSsiXQogIFsnKiAgICAgICAgICAgICAi KiJdCiAgWycrICAgICAgICAgICAgICIrIl0KICBbJ1w/ICAgICAgICAgICAgIj8iXSkKCihvcmct ZGVmaGFzaC1hdC1jb21waWxlIG9yZy10YWctcXVlcnktY21wLW9wcyAoOnRlc3QgJ2VxdWFsKQog ICJNYXBzIGNvbXBhcmlzb24gb3BlcmF0b3Igc3RyaW5ncyB0byBhIHZlY3RvciBvZiBjb21wYXJp c29uIGZ1bmN0aW9ucy4KVGhlIGZ1bmN0aW9ucyBhcmUgYXJyYW5nZWQgaW4gdGhlIHZlY3RvciBm b3IgZGlmZmVyZW50IHR5cGVzIGFzIGZvbGxvd3M6CiAgICAgICAgIE5VTSAgIFNUUklORyAgICAg ICBUSU1FICAgICAgIFJFR0VYIgogICgiPSIgIFs9ICAgICBzdHJpbmc9ICAgICAgb3JnLXRpbWU9 ICBvcmctc3RyaW5nLW1hdGNoPV0pCiAgKCI9PSIgWz0gICAgIHN0cmluZz0gICAgICBvcmctdGlt ZT0gIG9yZy1zdHJpbmctbWF0Y2g9XSkKICAoIjw+IiBbb3JnPD4gb3JnLXN0cmluZzw+IG9yZy10 aW1lPD4gb3JnLXN0cmluZy1tYXRjaDw+XSkKICAoIjwiICBbPCAgICAgc3RyaW5nPCAgICAgIG9y Zy10aW1lPCAgbmlsXSkKICAoIjw9IiBbPD0gICAgb3JnLXN0cmluZzw9IG9yZy10aW1lPD0gbmls XSkKICAoIj49IiBbPj0gICAgb3JnLXN0cmluZz49IG9yZy10aW1lPj0gbmlsXSkKICAoIj4iICBb PiAgICAgb3JnLXN0cmluZz4gIG9yZy10aW1lPiAgbmlsXSkpCgooZXZhbC1hbmQtY29tcGlsZQog IDs7IEknZCBwcmVmZXIgZ2Vuc3ltcyBmb3IgdGhpcywgYnV0IHJlYWxpc3RpY2FsbHkgdGhpcyB3 aWxsIGRvLgogIChkZWZ2YXIgb3JnLXRhZy1xdWVyeS9wcml2YXRlLW9wdC1jaC0gbmlsCiAgICAi VGhpcyB2YXJpYWJsZSBzaG91bGQgbm90IGJlIHNldCBieSB0aGUgdXNlciwgZXZlbiBsb2NhbGx5 LgpJdCBzaG91bGQgcmVtYWluIG5pbCBvciBjaGFvcyBtYXkgZW5zdWUuIikKCiAgKGRlZnVuIG9y Zy1zdHJpbmctYXMtY2hhci1wIChzKQogICAgIklzIFMgYSBzdHJpbmcgb2YgYSBzaW5nbGUsIHBv c3NpYmx5IGJhY2tzbGFzaC1lc2NhcGVkLCBjaGFyYWN0ZXI/CklmIHNvLCByZXR1cm4gdGhlIGNo YXJhY3RlciB0aGlzIHJlcHJlc2VudHMsIG90aGVyd2lzZSBuaWwuIgogICAgKGlmIChzdHJpbmdw IHMpCiAgICAgICAgKGxldCAoKGxlbiAobGVuZ3RoIHMpKSkKICAgICAgICAgIChvciAoYW5kICg9 IDEgbGVuKSAoc3RyaW5nLXRvLWNoYXIgcykpCiAgICAgICAgICAgICAgKGFuZCAoPSAyIGxlbikg KGNoYXItZXF1YWwgP1xcIChzdHJpbmctdG8tY2hhciBzKSkgKGFyZWYgcyAxKSkpKQogICAgICBu aWwpKQoKICAoZGVmdW4gb3JnLXRhZy1xdWVyeS1tYXRjaGVyPC0gKHBhdHRlcm5zICZvcHRpb25h bCBhdXRvZ3JvdXAgdGVybWluYWxzIG5leHQtY2gpCiAgICAiQ29udmVydCBhIGxpc3Qgb2YgUEFU VEVSTlMgdG8gYSBgbG9va2luZy1hdCcgcXVlcnkuIApBVVRPR1JPVVAsIGlmIG5vbi1uaWwsIHR1 cm5zIG9uIGF1dG9ncm91cGluZyBvZiBzaW5nbGV0b25zLgpURVJNSU5BTFMsIGlmIG5vbi1uaWws IHNob3VsZCBiZSBhIGhhc2ggdGFibGUgZm9yIGF0dGVtcHRlZApzeW1ib2wgbG9va3VwLiBTZWUg YG9yZy1tYXRjaC1jb25kJyBmb3IgbW9yZSBkZXRhaWxzIG9uClBBVFRFUk5TJ3MgZm9ybWF0LiIK ICAgIChsZXQqICgoYWxsLXN0cmluZ3MKICAgICAgICAgICAgKGxhbWJkYSAoZWxlbWVudHMpCiAg ICAgICAgICAgICAgKGxldCAoKHB0ciBlbGVtZW50cykpCiAgICAgICAgICAgICAgICAod2hpbGUg KGFuZCBwdHIgKHN0cmluZ3AgKGNhciBwdHIpKSkKICAgICAgICAgICAgICAgICAgKHNldHEgcHRy IChjZHIgcHRyKSkpCiAgICAgICAgICAgICAgICAobnVsbCBwdHIpKSkpCiAgICAgICAgICAgKHJl cGxhY2UtdGVybWluYWwKICAgICAgICAgICAgKGxhbWJkYSAoaXRlbSkKICAgICAgICAgICAgICAo Y29uZCAoKG5vdCAoaGFzaC10YWJsZS1wIHRlcm1pbmFscykpIGl0ZW0pCiAgICAgICAgICAgICAg ICAgICAgKChzeW1ib2xwIGl0ZW0pICAgIChnZXRoYXNoIGl0ZW0gdGVybWluYWxzIGl0ZW0pKQog ICAgICAgICAgICAgICAgICAgICh0ICAgICAgICAgICAgICAgICBpdGVtKSkpKQogICAgICAgICAg IChwdXNoLWFsbAogICAgICAgICAgICAobGFtYmRhIChzcmMgZGVzdCkgKGRvbGlzdCAocyBzcmMg ZGVzdCkgKHB1c2ggcyBkZXN0KSkpKQogICAgICAgICAgIChhbHRlcm5hdGl2ZXMKICAgICAgICAg ICAgKGxldCAocmhzIGFjYyBub2dyb3VwIG5vY2FwdHVyZSkKICAgICAgICAgICAgICAoZG9saXN0 IChwIHBhdHRlcm5zIChwcm9nbiAocHVzaCAobnJldmVyc2UgcmhzKSBhY2MpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5yZXZlcnNlIGFjYykpKQogICAgICAgICAg ICAgICAgKGNvbmQgCiAgICAgICAgICAgICAgICAgKChlcSBwICd8KQogICAgICAgICAgICAgICAg ICAoaWYgKG51bGwgcmhzKQogICAgICAgICAgICAgICAgICAgICAgKG9yZy10cXVlcnktZXJyb3Ig Im1pc3BsYWNlZCBhbHRlcm5hdGl2ZSBtYXJrZXIiKQogICAgICAgICAgICAgICAgICAgIChwdXNo IChucmV2ZXJzZSByaHMpIGFjYykKICAgICAgICAgICAgICAgICAgICAoc2V0cSByaHMgbmlsKSkp CiAgICAgICAgICAgICAgICAgKChlcSBwIDpub2dyb3VwKQogICAgICAgICAgICAgICAgICAoc2V0 cSBub2dyb3VwIHQpKQogICAgICAgICAgICAgICAgICgoZXEgcCA6bm9jYXB0dXJlKQogICAgICAg ICAgICAgICAgICAoc2V0cSBub2NhcHR1cmUgdCkpCiAgICAgICAgICAgICAgICAgKChvciAoY29u c3AgcCkgKHZlY3RvcnAgcCkpIDsgY2FwdHVyaW5nL25vbmNhcHR1cmluZyBncm91cCByZXNwLgog ICAgICAgICAgICAgICAgICAodW5sZXNzIG5vZ3JvdXAgOyBhbGxvdyBub2dyb3VwL25vY2FwdHVy ZSBoZXJlIGZvciBjb25zaXN0ZW5jeQogICAgICAgICAgICAgICAgICAgIChwdXNoIChpZiAob3Ig bm9jYXB0dXJlICh2ZWN0b3JwIHApKSAiXFwoPzoiICJcXCgiKSByaHMpKQogICAgICAgICAgICAg ICAgICAoc2V0cSByaHMgKGZ1bmNhbGwgcHVzaC1hbGwgKG1hcGNhciByZXBsYWNlLXRlcm1pbmFs IHApIHJocykpCiAgICAgICAgICAgICAgICAgICh1bmxlc3Mgbm9ncm91cAogICAgICAgICAgICAg ICAgICAgIChwdXNoICJcXCkiIHJocykpCiAgICAgICAgICAgICAgICAgIChzZXRxIG5vZ3JvdXAg bmlsIG5vY2FwdHVyZSBuaWwpKQogICAgICAgICAgICAgICAgICgoYW5kIGF1dG9ncm91cCAobm90 IG5vZ3JvdXApKQogICAgICAgICAgICAgICAgICAocHVzaCAoaWYgKG9yIG5vY2FwdHVyZSAodmVj dG9ycCBwKSkgIlxcKD86IiAiXFwoIikgcmhzKQogICAgICAgICAgICAgICAgICAocHVzaCAoZnVu Y2FsbCByZXBsYWNlLXRlcm1pbmFsIHApIHJocykKICAgICAgICAgICAgICAgICAgKHB1c2ggIlxc KSIgcmhzKQogICAgICAgICAgICAgICAgICAoc2V0cSBub2dyb3VwIG5pbCBub2NhcHR1cmUgbmls KSkKICAgICAgICAgICAgICAgICAodAogICAgICAgICAgICAgICAgICAocHVzaCAoZnVuY2FsbCBy ZXBsYWNlLXRlcm1pbmFsIHApIHJocykKICAgICAgICAgICAgICAgICAgKHNldHEgbm9ncm91cCBu aWwgbm9jYXB0dXJlIG5pbCkpKSkpKQogICAgICAgICAgIChtYXRjaGVycwogICAgICAgICAgICAo bWFwY2FyIChsYW1iZGEgKHB0ZXJtcykKICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChmc3Qg KGNhciBwdGVybXMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjaCBuaWwpKQogICAg ICAgICAgICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAgICAgICAgICAgKChhbmQg KGNkciBwdGVybXMpIChmdW5jYWxsIGFsbC1zdHJpbmdzIHB0ZXJtcykpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgYChsb29raW5nLWF0ICwoYXBwbHkgJ2NvbmNhdCBwdGVybXMpKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICgoY2RyIHB0ZXJtcykKICAgICAgICAgICAgICAgICAgICAgICAg ICBgKGxvb2tpbmctYXQgKGNvbmNhdCAsQHB0ZXJtcykpKQogICAgICAgICAgICAgICAgICAgICAg ICAgKChhbmQgbmV4dC1jaCAoc2V0cSBzY2ggKG9yZy1zdHJpbmctYXMtY2hhci1wIGZzdCkpKQog ICAgICAgICAgICAgICAgICAgICAgICAgIGAoYW5kICxuZXh0LWNoCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNoYXItZXF1YWwgLG5leHQtY2ggLHNjaCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc2V0cSBvcmctdGFnLXF1ZXJ5L3ByaXZhdGUtb3B0LWNoLSAsc2No KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAodAogICAgICAgICAgICAgICAgICAgICAgICAg IGAobG9va2luZy1hdCAsZnN0KSkpKSkKICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMp KSkKICAgICAgKGlmIChjZHIgbWF0Y2hlcnMpCiAgICAgICAgICBgKG9yICxAbWF0Y2hlcnMpCiAg ICAgICAgYCwoY2FyIG1hdGNoZXJzKSkpKSkKCihkZWZtYWNybyBvcmctbWF0Y2gtY29uZCAob3B0 aW9ucyAmcmVzdCBjbGF1c2VzKQogICJMaWtlIGBjb25kJywgYnV0IGFsbG93cyBzcGVjaWFsIGZv cm1zIGluIHRoZSBjbGF1c2VzIHRoYXQgbG9va2FoZWFkIGluLApleHRyYWN0IGZyb20sIGFuZCBt b3ZlIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4gVGhlIHNwZWNpYWwgZm9ybXMKYXJlIGRlc2NyaWJl ZCBiZWxvdy4gT1BUSU9OUywgaWYgbm9uLW5pbCwgaXMgZWl0aGVyIGEgc3ltYm9sLApTWU1CT0wt VEFCTEUsIGJvdW5kIHRvIGEgaGFzaCB0YWJsZSBmb3Igc3ltYm9sIGxvb2t1cCwgb3IgYSBsaXN0 Cm9mIHRoZSBmb3JtIChTWU1CT0wtVEFCTEUgTkVYVC1DSEFSLVNZTSAmcmVzdCBCSU5ESU5HUyku IElmIE5FWFQtQ0hBUi1TWU0KaXMgbm90IG5pbCwgaXQgc2hvdWxkIGJlIGEgc3ltYm9sIHRoYXQg d2lsbCBiZSBib3VuZCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIKYW5kIHVzZWQgdG8gb3B0aW1pemUg dGhlIG1hdGNoaW5nIG9mIGVzcGVjaWFsbHkgc2ltcGxlIHBhdHRlcm5zLCBhcyBkZXNjcmliZWQK YmVsb3cuIEJJTkRJTkdTIGFyZSBzdGFuZGFyZCBsZXQgYmluZGluZ3Mgd2hpY2ggd2lsbCB2aXNp YmxlIGluIHRoZQpDTEFVU0VTLiBDTEFVU0VTIGFyZSBzdHJ1Y3R1cmVkIGxpa2UgdGhlIGNsYXVz ZXMgaW4gYGNvbmQnLgoKICAgTG9va2FoZWFkOgogICAgICg8LSAgUEFUVEVSTi4uLiBbfCBQQVRU RVJOLi4uXSopICAtLSBzeW1ib2wgbG9va3VwIGluIFNZTUJPTC1IQVNICiAgICAgKDw8LSBQQVRU RVJOLi4uIFt8IFBBVFRFUk4uLi5dKikgIC0tIHN5bWJvbCBsb29rdXAgKyBzaW5nbGV0b24gYXV0 b2dyb3VwaW5nCiAgICAgKDw8PSBQQVRURVJOLi4uIFt8IFBBVFRFUk4uLi5dKikgIC0tIG5vIHN5 bWJvbCBsb29rdXAgb3IgYXV0b2dyb3VwaW5nCgogICAgIEVhY2ggcGF0dGVybiBpbiB0aGUgbGlz dCBpcyBlaXRoZXIgYSBzdHJpbmcsIGEgc3ltYm9sLCBhCiAgICAgbGlzdCBvZiBzdHJpbmdzIGFu ZCBzeW1ib2xzIC0tIHJlcHJlc2VudGluZyBjYXB0dXJpbmcKICAgICBncm91cHMsIG9yIGEgdmVj dG9yIG9mIHN0cmluZ3MgYW5kIHN5bWJvbHMgLS0gcmVwcmVzZW50aW5nCiAgICAgbm9uLWNhcHR1 cmluZyBncm91cHMuIFRoZSB8J3Mgc2VwYXJhdGUgYWx0ZXJuYXRpdmVzIHRoYXQgYXJlCiAgICAg dGVzdGVkIGxhemlseSAoYSBsYSBgb3InKTsgdGhlIGV2ZW50dWFsIHN0cmluZ3MgY29tcHV0ZWQg Zm9yCiAgICAgdGhlIHBhdHRlcm5zIGluIGVhY2ggYWx0ZXJuYXRpdmUgYXJlIGNvbmNhdGVuYXRl ZCB0b2dldGhlcgogICAgIHRvIGZvcm0gYSByZWd1bGFyIGV4cHJlc3Npb24gd2hpY2ggaXMgdGVz dGVkIHdpdGgKICAgICBgbG9va2luZy1hdCcuIFdoZW4gc3ltYm9sIGxvb2t1cCBpcyBpbiBlZmZl Y3QgKDwtIGFuZCA8PC0KICAgICBmb3JtcyksIHN5bWJvbHMgaW4gYSBwYXR0ZXJuIGFyZSBmaXJz dCBsb29rZWQgdXAgaW4KICAgICBTWU1CT0wtVEFCTEUgaWYgaXQgZXhpc3RzLCBhbmQgcmVwbGFj ZWQgd2l0aCB0aGUKICAgICBjb3JyZXNwb25kaW5nIHZhbHVlIGlmIHByZXNlbnQuIElmIGFsbCB0 aGUgcGF0dGVybnMncyBpbiBhbgogICAgIGFsdGVybmF0aXZlIHJlc29sdmUgdG8gc3RyaW5ncyBh dCBjb21waWxlIHRpbWUsIHRoZSByZWd1bGFyCiAgICAgZXhwcmVzc2lvbiBpcyBjb21wdXRlZCBh dCBjb21waWxlIHRpbWUgYW5kIGFsbCB0aGUgZm9ybXMKICAgICByZWR1Y2UgdG8gYSBzaW5nbGUg Y2FsbCB0byBgbG9va2luZy1hdCcuIE90aGVyd2lzZSwgdGhlCiAgICAgcmVndWxhciBleHByZXNz aW9uIGlzIGNvbXB1dGVkIGF0IHJ1bnRpbWUuCgogICAgIEluIHRoZSBzcGVjaWFsIGNhc2Ugd2hl cmUgdGhlcmUgYXJlIG5vIGFsdGVybmF0aXZlcywgdGhlCiAgICAgcGF0dGVybiBpcyBhIHN0cmlu ZyByZXByZXNlbnRpbmcgYSBzaW5nbGUgY2hhcmFjdGVyIGF0CiAgICAgY29tcGlsZSB0aW1lIChv bmUgY2hhcmFjdGVyIG9yIGEgYmFja3NsYXNoLWVzY2FwZWQKICAgICBjaGFyYWN0ZXIpLCBhbmQg TkVYVC1DSEFSLVNZTSBpcyBhIG5vbi1uaWwgc3ltYm9sLCB0aGUgY29uZAogICAgIGNsYXVzZSBp cyBvcHRpbWl6ZWQgdG8gZG8gYSBjaGFyYWN0ZXIgY29tcGFyaXNvbiByYXRoZXIgdGhhbgogICAg IGEgYGxvb2tpbmctYXQnLiBTcGVjaWZpY2FsbHksIE5FWFQtQ0hBUi1TWU0gaXMgYm91bmQgdG8g dGhlCiAgICAgY2hhcmFjdGVyIGF0IHBvaW50IGJlZm9yZSBhbnkgdGVzdHMgYW5kIHVzZWQgdmlh CiAgICAgYGNoYXItZXF1YWwnIGZvciB0aGlzIG9wdGltaXplZCBtYXRjaC4gTW92ZW1lbnQgYW5k IHN0cmluZwogICAgIGZvcm1zIHdpdGggZ3JvdXAgMCwgaS5lLiwgKEAgZW5kIDApLCAoJCAwKSwg KCQkIDApLCBzZWUKICAgICBiZWxvdywgc3RpbGwgd29yayBhcyBleHBlY3RlZCBpbiB0aGlzIGNh c2UuIFRvIHN1cHByZXNzIHRoZQogICAgIGNoYXJhY3RlciBvcHRpbWl6YXRpb24gd2hlbiBORVhU LUNIQVItU1lNIGlzIG5vbi1uaWwsIGZvcgogICAgIGluc3RhbmNlIHRvIG1hdGNoIGEgcmVndWxh ciBleHByZXNzaW9uIGAuJywgaXQgaXMgc3VmZmljaWVudAogICAgIHRvIGluY2x1ZGUgYW4gZW1w dHkgc3RyaW5nIGluIHRoZSBwYXR0ZXJuIGxpc3Qgb3IgdG8gcHV0IHRoZQogICAgIHRlcm0gaW4g YSBub24tY2FwdHVyaW5nIGdyb3VwLi4KCiAgICAgSW4gdGhlIDw8LSBmb3JtLCBlYWNoIHNpbmds ZXRvbiBwYXR0ZXJuIChzdHJpbmdzIG9yIHN5bWJvbHMpCiAgICAgaXMgYXV0b21hdGljYWxseSBw dXQgaW4gYSBjYXB0dXJpbmcgZ3JvdXAsIHVubGVzcyBwcmVjZWRlZCBieQogICAgIDpub2dyb3Vw IChpbmhpYml0aW5nIGdyb3VwKSBvciA6bm9jYXB0dXJlIChpbmhpYml0aW5nIGNhcHR1cmUpLgoK ICAgTW92ZW1lbnQ6CiAgICAgKEAgRlJPTSBHUk9VUCBbT0ZGU0VUXSkgCiAgICAgICAgTW92ZXMg cG9pbnQgdG8gYSBwb3NpdGlvbiByZWxhdGl2ZSB0byBhIG1hdGNoIEdST1VQLAogICAgICAgIHdo aWNoIHNob3VsZCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiBUaGlzIGhhcyBubwogICAgICAg IGVmZmVjdCBpZiB0aGUgZ3JvdXAgZGlkIG5vdCBtYXRjaCwgZXhjZXB0IGFuIChAIGVuZCAwKQog ICAgICAgIGFsd2F5cyBtb3ZlcyB0byB0aGUgZW5kIG9mIHdoYXQgbWF0Y2hlZCBldmVuIGlmIHRo ZQogICAgICAgIGNsYXVzZSB3YXMgb3B0aW1pemVkIGludG8gYSBjaGFyYWN0ZXIgbWF0Y2guIEZS T00gY2FuIGJlCiAgICAgICAgZWl0aGVyIHRoZSBzeW1ib2wgYGVuZCcgb3IgYGJlZ2luJywgd2hp Y2ggbWF0Y2hlcyB0aGUgZW5kCiAgICAgICAgb3IgYmVnaW5uaW5nIG9mIHRoZSBncm91cCwgb3Ig YSBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQKICAgICAgICB3aXRoIGdyb3VwIGFzIGFuIGFyZ3Vt ZW50LiBPcHRpb25hbCBPRkZTRVQsIGlmIG5vbi1uaWwsCiAgICAgICAgaXMgYWRkZWQgdG8gdGhl IHNwZWNpZmllZCBwb3NpdGlvbi4KCiAgIFN0cmluZyBFeHRyYWN0aW9uOgogICAgICgkIEdST1VQ KSAgIFRoZSBtYXRjaGVkIHN0cmluZyBmb3IgZ3JvdXAgR1JPVVAsIG9yIG5pbC4KICAgICAgICAg ICAgICAgICBBICgkIDApIGFsd2F5cyB3b3JrcywgZXZlbiB3aXRoIGNoYXJhY3RlciBvcHRpbWl6 YXRpb24uCiIKICAoZGVjbGFyZSAoaW5kZW50IDEpKQogIChsZXQqICgob3B0LWxpc3RwIChjb25z cCBvcHRpb25zKSkKICAgICAgICAgKHN5bS10YWJsZSAoaWYgb3B0LWxpc3RwIChjYXIgb3B0aW9u cykgICAgICBvcHRpb25zKSkKICAgICAgICAgKG5leHQtY2hhciAoaWYgb3B0LWxpc3RwIChjYWRy IG9wdGlvbnMpICAgICBuaWwpKQogICAgICAgICAobmV4dC1zeW0gIChpZiBuZXh0LWNoYXIgYCcs bmV4dC1jaGFyIG5pbCkpCiAgICAgICAgIChiaW5kaW5ncyAgKGlmIG9wdC1saXN0cCAobnRoY2Ry IDIgb3B0aW9ucykgbmlsKSkpCiAgIGAobWFjcm9sZXQgKCg8LSAoJnJlc3QgcGF0dGVybnMpICAg ICA7IGxvb2t1cAogICAgICAgICAgICAgICAgICAgYCwob3JnLXRhZy1xdWVyeS1tYXRjaGVyPC0g cGF0dGVybnMgbmlsICxzeW0tdGFibGUgLG5leHQtc3ltKSkKICAgICAgICAgICAgICAgKDw8LSAo JnJlc3QgcGF0dGVybnMpICAgIDsgbG9va3VwICsgYXV0b2dyb3VwaW5nCiAgICAgICAgICAgICAg ICAgICAgYCwob3JnLXRhZy1xdWVyeS1tYXRjaGVyPC0gcGF0dGVybnMgdCAsc3ltLXRhYmxlICxu ZXh0LXN5bSkpCiAgICAgICAgICAgICAgICg8PD0gKCZyZXN0IHBhdHRlcm5zKSAgICA7IG5vIGxv b2t1cCBvciBhdXRvZ3JvdXBpbmcKICAgICAgICAgICAgICAgICAgICBgLChvcmctdGFnLXF1ZXJ5 LW1hdGNoZXI8LSBwYXR0ZXJucyBuaWwgbmlsICxuZXh0LXN5bSkpCiAgICAgICAgICAgICAgIChA IChmcm9tIGdyb3VwICZvcHRpb25hbCBvZmZzZXQpIDsgbW92ZSBwb2ludCByZWxhdGl2ZSB0byBn cm91cAogICAgICAgICAgICAgICAgICA7OyBIYW5kbGluZyB0aGUgY2hhcmFjdGVyLW1hdGNoIG9w dGltaXphdGlvbiByZXF1aXJlcwogICAgICAgICAgICAgICAgICA7OyBjaGVja2luZyBpZiBhIGNo YXJhY3RlciBtYXRjaCB3YXMgbWFkZSBzbyBhbiAoQCBlbmQgMCkKICAgICAgICAgICAgICAgICAg OzsgbW92ZXMgZm9yd2FyZCBpbnN0ZWFkIG9mIHJlZmVycmluZyB0byB0aGUgbWF0Y2gKICAgICAg ICAgICAgICAgICAgOzsgZGF0YS4gVGhlIGlkZWEgaGVyZSBpcyB0byBvbmx5IGNoZWNrIHRoYXQg Y2FzZSB3aGVuCiAgICAgICAgICAgICAgICAgIDs7IHRoZSBvcHRpbWl6YXRpb24gd2FzIHJlcXVl c3RlZCBpbiB0aGUgZmlyc3QgcGxhY2UKICAgICAgICAgICAgICAgICAgOzsgYW5kIHRoZW4gdG8g ZG8gYXMgbXVjaCB3b3JrIGFzIHBvc3NpYmxlIGF0IGNvbXBpbGUKICAgICAgICAgICAgICAgICAg OzsgdGltZS4gQWRtaXR0ZWRseSwgdGhpcyBwYXJ0IGhhcyBnb3R0ZW4gYSBiaXQgY3JhenksCiAg ICAgICAgICAgICAgICAgIDs7IGJ1dCBpdCBkb2VzIHByb2R1Y2UgZ29vZCBjb2RlLiAtLSBDUkcg MDIgQXVnIDIwMTIKICAgICAgICAgICAgICAgICAgLChpZiAobm90IG5leHQtY2hhcikKICAgICAg ICAgICAgICAgICAgICAgICBgKGxldCAoKGlwb3MKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjYXNlIGZyb20KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZCBgKG9y IChtYXRjaC1lbmQgLGdyb3VwKSAocG9pbnQpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGJlZ2luIGAob3IgKG1hdGNoLWJlZ2lubmluZyAsZ3JvdXApIChwb2ludCkpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodCBgKCxmcm9tICxncm91cCkpKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgYChnb3RvLWNoYXIgLChpZiBvZmZzZXQgYCgrICxpcG9zICxv ZmZzZXQpIGlwb3MpKSkKICAgICAgICAgICAgICAgICAgICAgYChsZXQgKChpcG9zIChjYXNlIGZy b20KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYChpZiBvcmctdGFnLXF1ZXJ5L3ByaXZhdGUtb3B0LWNo LQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsKGNvbmQKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFuZCAoaW50ZWdlcnAgZ3Jv dXApICh6ZXJvcCBncm91cCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICcobWluICgxKyAocG9pbnQpKSAocG9pbnQtbWF4KSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbnRlZ2VycCBncm91cCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhwb2ludCkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYChtaW4gKCsgKHBvaW50KQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHplcm9wICxncm91cCkgMSAw KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBv aW50LW1heCkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAo bWF0Y2gtZW5kICxncm91cCkgKHBvaW50KSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAob3Ig KGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCBvcmct dGFnLXF1ZXJ5L3ByaXZhdGUtb3B0LWNoLSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChtYXRjaC1iZWdpbm5pbmcgLGdyb3VwKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50KSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh0IGAoLGZyb20gLGdyb3VwKSkpKSkKICAgICAgICAgICAgICAgICAgICAg ICAgYChnb3RvLWNoYXIgLChpZiBvZmZzZXQgYCgrICxpcG9zICxvZmZzZXQpIGlwb3MpKSkpKQog ICAgICAgICAgICAgICAoJCAoZ3JvdXApICAgICAgICAgIDsgc3RyaW5nIG9yIG5pbCBpZiBubyBt YXRjaCBmb3IgZ3JvdXAKICAgICAgICAgICAgICAgICAgLChpZiAobm90IG5leHQtY2hhcikKICAg ICAgICAgICAgICAgICAgICAgICBgYChtYXRjaC1zdHJpbmcgLGdyb3VwKQogICAgICAgICAgICAg ICAgICAgICBgYChpZiBvcmctdGFnLXF1ZXJ5L3ByaXZhdGUtb3B0LWNoLQogICAgICAgICAgICAg ICAgICAgICAgICAgICwoaWYgKGludGVnZXJwIGdyb3VwKSA7OyB3L2xpdGVyYWwgZ3JvdXAsIGp1 c3QgZG8gaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoemVyb3AgZ3JvdXAp IDs7ICBsaWtlbHkgdGhlIGNvbW1vbiBjYXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJyhzdHJpbmcgb3JnLXRhZy1xdWVyeS9wcml2YXRlLW9wdC1jaC0pIG5pbCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBgKGlmICh6ZXJvcCAsZ3JvdXApCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoc3RyaW5nIG9yZy10YWctcXVlcnkvcHJpdmF0ZS1vcHQtY2gt KSBuaWwpKQogICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2gtc3RyaW5nICxncm91cCkpKSkp CiAgICAgIChsZXQgKCxAYmluZGluZ3MKICAgICAgICAgICAgLEAoaWYgbmV4dC1jaGFyIChsaXN0 IGAoLG5leHQtY2hhciAoY2hhci1hZnRlcikpKSBuaWwpCiAgICAgICAgICAgICxAKGlmIG5leHQt Y2hhciAobGlzdCAnKG9yZy10YWctcXVlcnkvcHJpdmF0ZS1vcHQtY2gtIG5pbCkpIG5pbCkpCiAg ICAgICAgKGNvbmQKICAgICAgICAgLEBjbGF1c2VzKSkpKSkKCgo7OzsgVGhlIHRhZyBxdWVyeSBw YXJzZXIgaXRzZWxmCgooZGVmdW4gb3JnLXRhZy1xdWVyeS1wYXJzZSAodG9kby1vbmx5KQogIDs7 IFdvcmtzIGluIGN1cnJlbnQgYnVmZmVyIHdpdGggc3RyaW5nIHRvIGJlIHBhcnNlZCBzdGFydGlu ZyBhdCBwb2ludC4KICAobGV0ICgocGFyc2Utc3RhY2sgbmlsKQogICAgICAgIChwYXJlbi1jb3Vu dCAwKQogICAgICAgIG5lZy1zZWxlY3QgZ290LXNlbGVjdAogICAgICAgIHRvZG8tYmFuZyB0b2Rv LW1hdGNoKQogICAgKGxhYmVscwogICAgICAgICgoZW1pdCAoJnJlc3QgaXRlbXMpCiAgICAgICAg ICAgICAgIChkb2xpc3QgKGl0ZW0gaXRlbXMpIChwdXNoIGl0ZW0gcGFyc2Utc3RhY2spKSkKICAg ICAgICAgKG5vLXRlcm0tcCAoKQogICAgICAgICAgICAgICAgICAgIChsZXQgKCh0b3AgKGNhciBw YXJzZS1zdGFjaykpKQogICAgICAgICAgICAgICAgICAgICAgKGFuZCAoc3ltYm9scCAoY2FyIHBh cnNlLXN0YWNrKSkgKG5vdCAoZXEgdG9wIHQpKSkpKQogICAgICAgICAobmVnYXRlLWlmIChuZWdh dGUgaXRlbSkKICAgICAgICAgICAgICAgICAgICAoaWYgbmVnYXRlIGAobm90ICxpdGVtKSBpdGVt KSkKICAgICAgICAgKHRocmVhZCAoJnJlc3QgaXRlcmF0aW9ucykKICAgICAgICAgICAgICAgICAo ZG9saXN0IChfIGl0ZXJhdGlvbnMpCiAgICAgICAgICAgICAgICAgICAobGV0IChlbnRyaWVzIG5l dy1lbnRyeSB0eXBlKQogICAgICAgICAgICAgICAgICAgICAod2hpbGUgKG9yIChlcSB0IChjYXIg cGFyc2Utc3RhY2spKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKHN5bWJv bHAgKGNhciBwYXJzZS1zdGFjaykpKSkKICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBlbnRy aWVzIChjb25zIChwb3AgcGFyc2Utc3RhY2spIGVudHJpZXMpKSkKICAgICAgICAgICAgICAgICAg ICAgKHVubGVzcyAoYW5kIGVudHJpZXMgcGFyc2Utc3RhY2spCiAgICAgICAgICAgICAgICAgICAg ICAgKG9yZy10cXVlcnktZXJyb3IgImVtcHR5IHN1YmV4cHJlc3Npb24iKSkKICAgICAgICAgICAg ICAgICAgICAgKGNhc2UgKHNldHEgdHlwZSAocG9wIHBhcnNlLXN0YWNrKSkKICAgICAgICAgICAg ICAgICAgICAgICAoKGFuZCBvcikKICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgbmV3LWVu dHJ5IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGNkciBlbnRyaWVzKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgdHlwZSBlbnRyaWVzKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjYXIgZW50cmllcykpKSkKICAgICAgICAgICAgICAg ICAgICAgICAobm90CiAgICAgICAgICAgICAgICAgICAgICAgIChhc3NlcnQgKG51bGwgKGNkciBl bnRyaWVzKSkgbmlsICJub3QgaXMgdW5hcnkiKQogICAgICAgICAgICAgICAgICAgICAgICAobGV0 ICgoYXJnIChjYXIgZW50cmllcykpKQogICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIG5l dy1lbnRyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoYW5kIChjb25zcCBh cmcpIChlcSAoY2FyIGFyZykgJ25vdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjYWRyIGFyZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAobm90ICxh cmcpKSkpKQogICAgICAgICAgICAgICAgICAgICAgIChpZGVudGl0eQogICAgICAgICAgICAgICAg ICAgICAgICAoYXNzZXJ0IChudWxsIChjZHIgZW50cmllcykpIG5pbCAiKCkgaXMgb25lIGV4cHJl c3Npb24iKQogICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBuZXctZW50cnkgKGNhciBlbnRy aWVzKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKHQgICAgICAgICAgICAgICAgICA7IHRoaXMg cmVhbGx5IHNob3VsZG4ndCBoYXBwZW4KICAgICAgICAgICAgICAgICAgICAgICAgKG9yZy10cXVl cnktZXJyb3IgImludmFsaWQgc3ltYm9sICVzIG9uIHN0YWNrLiIgdHlwZSkpKQogICAgICAgICAg ICAgICAgICAgICAoZW1pdCBuZXctZW50cnkpKSkpCiAgICAgICAgICh0YWctY2hlY2sgKGlkICZv cHRpb25hbCBuZWdhdGUpCiAgICAgICAgICAgICAgICAgICAgKGxldCAoKGNoZWNrIGAobWVtYmVy ICxpZCB0YWdzLWxpc3QpKSkKICAgICAgICAgICAgICAgICAgICAgIChpZiBuZWdhdGUgYChub3Qg LGNoZWNrKSBjaGVjaykpKQogICAgICAgICAocHJvcC1jaGVjayAocHJvcCAmb3B0aW9uYWwgbnVt ZXJpY3ApCiAgICAgICAgICAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAgICAgICAo KHN0cmluZy1lcXVhbCBwcm9wICJMRVZFTCIpCiAgICAgICAgICAgICAgICAgICAgICAgJ2xldmVs KQogICAgICAgICAgICAgICAgICAgICAgKChtZW1iZXIgcHJvcCAnKCJUT0RPIiAiSEVBRElORyIg IlBSSU9SSVRZIikpCiAgICAgICAgICAgICAgICAgICAgICAgYChvciAsKGludGVybiAoZG93bmNh c2UgcHJvcCkpICIiKSkKICAgICAgICAgICAgICAgICAgICAgICgoc3RyaW5nLWVxdWFsIHByb3Ag IkNBVEVHT1JZIikKICAgICAgICAgICAgICAgICAgICAgICAnKG9yIChnZXQtdGV4dC1wcm9wZXJ0 eSAocG9pbnQpICdvcmctY2F0ZWdvcnkpICIiKSkKICAgICAgICAgICAgICAgICAgICAgICAobnVt ZXJpY3AKICAgICAgICAgICAgICAgICAgICAgICAgYChzdHJpbmctdG8tbnVtYmVyCiAgICAgICAg ICAgICAgICAgICAgICAgICAgKG9yIChvcmctY2FjaGVkLWVudHJ5LWdldCBuaWwgLHByb3ApICIi KSkpCiAgICAgICAgICAgICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgICAgICAgICAgYChv ciAob3JnLWNhY2hlZC1lbnRyeS1nZXQgbmlsICxwcm9wKSAiIikpKSkpCiAgICAgIDs7IFNlZWQg b3V0ZXJtb3N0IGV4cHJlc3Npb24gaW4gcGFyc2UgdHJlZQogICAgICAoZW1pdCAnb3IgJ2FuZCkK ICAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAob3JnLXJlICJbOmJsYW5rOl0iKSkKCiAgICAgICh3 aGlsZSAobm90IChlb2JwKSkKICAgICAgICA7OyBQcm9jZXNzIGEgdGVybQogICAgICAgIDs7ICAg TG9vayBmb3IgdGhlIHNlbGVjdG9yIGNoYXIgZmlyc3QKICAgICAgICAob3JnLW1hdGNoLWNvbmQg b3JnLXRhZy1xdWVyeS10ZXJtaW5hbHMKICAgICAgICAgICgoPC0gKFNFTEVDVE9SKSBTUEFDRSop CiAgICAgICAgICAgKEAgZW5kIDApCiAgICAgICAgICAgKHNldHEgZ290LXNlbGVjdCB0CiAgICAg ICAgICAgICAgICAgbmVnLXNlbGVjdCAoY2hhci1lcXVhbCAoc3RyaW5nLXRvLWNoYXIgKCQgMSkp ID8tKSkpCiAgICAgICAgICAodAogICAgICAgICAgIChzZXRxIGdvdC1zZWxlY3QgbmlsCiAgICAg ICAgICAgICAgICAgbmVnLXNlbGVjdCBuaWwpKSkKICAgICAgICA7OyAgIE5vdyBsb29rIGZvciB0 aGUgcmVzdCBvZiB0aGUgdGVybQogICAgICAgIChvcmctbWF0Y2gtY29uZCAob3JnLXRhZy1xdWVy eS10ZXJtaW5hbHMgY2hhci1hdC1wb2ludCkKICAgICAgICAgKCg8LSAoUFJPUC1JREVOVCkgU1BB Q0UqIChDTVAtT1ApIFNQQUNFKiAoQ01QLVJIUy1CRUdJTikpCiAgICAgICAgICAoQCBiZWdpbiAz KQogICAgICAgICAgKGxldCogKChwcm9wIChzYXZlLW1hdGNoLWRhdGEKICAgICAgICAgICAgICAg ICAgICAgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAg ICAgICAiXFxcXC0iICItIiAoJCAxKSB0IHQpKSkKICAgICAgICAgICAgICAgICAoY21wICAoJCAy KSkKICAgICAgICAgICAgICAgICAoaW5keCAoY2FzZSAoY2hhci1hZnRlcikKICAgICAgICAgICAg ICAgICAgICAgICAgICg/XHsgMykKICAgICAgICAgICAgICAgICAgICAgICAgICg/XCIgKG9yZy1t YXRjaC1jb25kIG9yZy10YWctcXVlcnktdGVybWluYWxzCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCg8LSBEQVRFLVNUUklORykgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodCAxKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAodCAwKSkpCiAgICAgICAgICAg ICAgICAgKG9wLWYgKGFyZWYgKGdldGhhc2ggY21wIG9yZy10YWctcXVlcnktY21wLW9wcykgaW5k eCkpCiAgICAgICAgICAgICAgICAgKHJocwogICAgICAgICAgICAgICAgICAoY2FzZSBpbmR4CiAg ICAgICAgICAgICAgICAgICAgKDAgKG9yZy1tYXRjaC1jb25kIG9yZy10YWctcXVlcnktdGVybWlu YWxzCiAgICAgICAgICAgICAgICAgICAgICAgICAoKDwtIE5VTUJFUikgKEAgZW5kIDApIChzdHJp bmctdG8tbnVtYmVyICgkIDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICh0IChvcmctdHF1 ZXJ5LWVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbnVtYmVyIG9u IHJocyBvZiBwcm9wZXJ0eSBjb21wYXJpc29uIikpKSkKICAgICAgICAgICAgICAgICAgICAoMSAo b3JnLXJlYWQtcXVvdGVkLXN0cmluZy1pbi1xdWVyeSkpCiAgICAgICAgICAgICAgICAgICAgKDIg KG9yZy1tYXRjaGVyLXRpbWUgKG9yZy1yZWFkLXF1b3RlZC1zdHJpbmctaW4tcXVlcnkpKSkKICAg ICAgICAgICAgICAgICAgICAoMyAob3JnLXJlYWQtYmFsYW5jZWQtc3RyaW5nID9ceyA/XH0pKSkp CiAgICAgICAgICAgICAgICAgKGZvcm0gKGxpc3Qgb3AtZiAocHJvcC1jaGVjayBwcm9wICh6ZXJv cCBpbmR4KSkgcmhzKSkpCiAgICAgICAgICAgICh1bmxlc3Mgb3AtZgogICAgICAgICAgICAgIChv cmctdHF1ZXJ5LWVycm9yICJpbnZhbGlkIG9wZXJhdG9yIGZvciBwcm9wZXJ0eSByZWdleHAgbWF0 Y2giKSkKICAgICAgICAgICAgKGVtaXQgKG5lZ2F0ZS1pZiBuZWctc2VsZWN0IGZvcm0pKSkpCiAg ICAgICAgICgoPC0gVEFHLUlERU5UKQogICAgICAgICAgKEAgZW5kIDApCiAgICAgICAgICAoZW1p dCAodGFnLWNoZWNrICgkIDApIG5lZy1zZWxlY3QpKSkKICAgICAgICAgKCg8LSBSRUdFWC1PUEVO KQogICAgICAgICAgKGxldCAoKHJlZ2V4IChvcmctcmVhZC1iYWxhbmNlZC1zdHJpbmcgP1x7ID9c fSkpKQogICAgICAgICAgICAoZW1pdCAobmVnYXRlLWlmIG5lZy1zZWxlY3QgYChvcmctbWF0Y2gt YW55LXAgLHJlZ2V4IHRhZ3MtbGlzdCkpKSkpCiAgICAgICAgICgoPC0gR1JPVVAtT1BFTikKICAg ICAgICAgIChAIGVuZCAwKQogICAgICAgICAgKGVtaXQgKGlmIG5lZy1zZWxlY3QgJ25vdCAnaWRl bnRpdHkpICdvciAnYW5kKQogICAgICAgICAgKGluY2YgcGFyZW4tY291bnQpKQogICAgICAgICAo Z290LXNlbGVjdAogICAgICAgICAgKG9yZy10cXVlcnktZXJyb3IgInRyYWlsaW5nIHNlbGVjdG9y IHdpdGggbm8gdGVybSIpKQogICAgICAgICAoKDwtIFRPRE8tTUFSS0VSIChUT0RPLU9OTFktTSlc PyBTUEFDRSopCiAgICAgICAgICAoQCBlbmQgMCkKICAgICAgICAgIChzZXRxIHRvZG8tYmFuZyAg KGFuZCAoJCAxKSB0KSkKICAgICAgICAgICh3aGVuIChuby10ZXJtLXApIDsgbm8gdGFnIHF1ZXJ5 IHRlcm1zIGJlZm9yZSB0aGlzCiAgICAgICAgICAgIChlbWl0IHQpKQogICAgICAgICAgKHVubGVz cyAoZW9icCkKICAgICAgICAgICAgKHNldHEgdG9kby1tYXRjaCAob3JnLXRvZG8tcXVlcnktcGFy c2UpKSkpCiAgICAgICAgICgobm8tdGVybS1wKQogICAgICAgICAgKG9yZy10cXVlcnktZXJyb3Ig Im1pc3NpbmcgdGhlIGV4cGVjdGVkIHRlcm0iKSkKICAgICAgICAgKCg8LSBHUk9VUC1DTE9TRSkg ICAgOyBlbmQgb2Ygc3ViZXhwcmVzc2lvbiwgY2xlYW4gdXAKICAgICAgICAgIChAIGVuZCAwKQog ICAgICAgICAgKGRlY2YgcGFyZW4tY291bnQpCiAgICAgICAgICAod2hlbiAoPCBwYXJlbi1jb3Vu dCAwKSAob3JnLXRxdWVyeS1lcnJvciAibWlzbWF0Y2hlZCApJ3MiKSkKICAgICAgICAgICh0aHJl YWQgJ2Nvbmp1bmN0aW9uICdkaXNqdW5jdGlvbikKICAgICAgICAgIDs7IGNvbWJpbmUgY3VycmVu dCB0YWcgZXhwcmVzc2lvbiBhbmQgdG9kbyBtYXRjaGVyLCBpZiBhbnkKICAgICAgICAgICh3aGVu IChvciB0b2RvLWJhbmcgdG9kby1tYXRjaCkgIAogICAgICAgICAgICAoZW1pdCBgKGFuZCAsQChh bmQgdG9kby1iYW5nICcoKG1lbWJlciB0b2RvIG9yZy1ub3QtZG9uZS1rZXl3b3JkcykpKQogICAg ICAgICAgICAgICAgICAgICAgICAsKHBvcCBwYXJzZS1zdGFjaykgOyA8LSB0YWcgZXhwciBmb3Ig dGhpcyAoKSBncm91cAogICAgICAgICAgICAgICAgICAgICAgICAsQHRvZG8tbWF0Y2gpKQogICAg ICAgICAgICAoc2V0cSB0b2RvLWJhbmcgbmlsIHRvZG8tbWF0Y2ggbmlsKSkKICAgICAgICAgICh0 aHJlYWQgJ3NlbGVjdG9yKSkKICAgICAgICAgKCg8LSBBTkQtT1ApICAgICAgICAgOyBjb250aW51 ZSBjb25qdW5jdGlvbiwgZXhwZWN0IGEgdGVybQogICAgICAgICAgKEAgZW5kIDApKSAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgKCg8LSBPUi1PUCkgICAgICAgICAgOyBzdGFydCBvciBjb250 aW51ZSBhIGRpc2p1bmN0aW9uCiAgICAgICAgICAoQCBlbmQgMCkKICAgICAgICAgICh0aHJlYWQg J2Nvbmp1bmN0aW9uKQogICAgICAgICAgKGVtaXQgJ2FuZCkpCiAgICAgICAgICh0CiAgICAgICAg ICAob3JnLXRxdWVyeS1lcnJvciAiaW52YWxpZCB0b2tlbiAlYyBkdXJpbmcgcXVlcnkgcGFyc2Ui CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhci1hZnRlcikpKSkKICAgICAgICA7OyBB bGxvdyBzcGFjZXMgYXJvdW5kIHRlcm1zLCBvcGVyYXRvcnMsIGFuZCBwYXJlbnMKICAgICAgICAo c2tpcC1jaGFycy1mb3J3YXJkIChvcmctcmUgIls6Ymxhbms6XSIpKSkKCiAgICAgICh1bmxlc3Mg KHplcm9wIHBhcmVuLWNvdW50KQogICAgICAgIChvcmctdHF1ZXJ5LWVycm9yICJtaXNzaW5nIClz IGluIHF1ZXJ5IHN0cmluZyIpKQoKICAgICAgOzsgQnVpbGQgdGhlIGZpbmFsIHBhcnNlIHRyZWUg YnkgdGhyZWFkaW5nIHRoZSBzdGFjawogICAgICAod2hpbGUgKGNkciBwYXJzZS1zdGFjaykKICAg ICAgICAodGhyZWFkICdhbnkpKQoKICAgICAgOzsgUHV0IHRoZSBwaWVjZXMgdG9nZXRoZXIgKHRv ZG8tbWF0Y2ggaXMgd3JhcHBlZCBpbiBhIGxpc3QpCiAgICAgIChsZXQgKCh0YWctbWF0Y2hlcgog ICAgICAgICAgICAgKGlmIChlcSAoY2FyIHBhcnNlLXN0YWNrKSB0KQogICAgICAgICAgICAgICAg IHQKICAgICAgICAgICAgICAgYChwcm9nbgogICAgICAgICAgICAgICAgICAoc2V0cSBvcmctY2Fj aGVkLXByb3BzIG5pbCkKICAgICAgICAgICAgICAgICAgLChjYXIgcGFyc2Utc3RhY2spKSkpCiAg ICAgICAgICAgICh0b2RvLXJlc3RyaWN0CiAgICAgICAgICAgICAoaWYgKG9yIHRvZG8tYmFuZyB0 b2RvLW9ubHkpCiAgICAgICAgICAgICAgICAgJygobWVtYmVyIHRvZG8gb3JnLW5vdC1kb25lLWtl eXdvcmRzKSkKICAgICAgICAgICAgICAgbmlsKSkpCiAgICAgICAgKGlmIChvciB0b2RvLXJlc3Ry aWN0IHRvZG8tbWF0Y2gpCiAgICAgICAgICAgIGAoYW5kICxAdG9kby1yZXN0cmljdCAsdGFnLW1h dGNoZXIgLEB0b2RvLW1hdGNoKQogICAgICAgICAgdGFnLW1hdGNoZXIpKSkpKQoKKGRlZnVuIG9y Zy10b2RvLXF1ZXJ5LXBhcnNlICgpCiAgOzsgVG9kbyB0ZXJtcyBtYXRjaCBURVJNIChBTkQtT1A/ IFRFUk0pKiBiZXR3ZWVuIE9SLU9QJ3MsCiAgOzsgd2hlcmUgVEVSTSA9ICJcXChbLSs6XVxcKT9c XCh7W159XSp9XFx8W14tK1wie30mfF0rXFwpIgogIChsZXQgKG9ybGlzdCBhbmRsaXN0IG5lZy1z ZWxlY3QgZ290LXNlbGVjdCBkb25lKQogICAgKHdoaWxlIChub3QgKG9yIGRvbmUgKGVvYnApKSkK ICAgICAgKG9yZy1tYXRjaC1jb25kIG9yZy10YWctcXVlcnktdGVybWluYWxzCiAgICAgICAgKCg8 LSAoU0VMRUNUT1IpIFNQQUNFKikKICAgICAgICAgKEAgZW5kIDApCiAgICAgICAgIChzZXRxIGdv dC1zZWxlY3QgdAogICAgICAgICAgICAgICBuZWctc2VsZWN0IChjaGFyLWVxdWFsIChzdHJpbmct dG8tY2hhciAoJCAxKSkgPy0pKSkKICAgICAgICAodAogICAgICAgICAoc2V0cSBnb3Qtc2VsZWN0 IG5pbAogICAgICAgICAgICAgICBuZWctc2VsZWN0IG5pbCkpKQogICAgICAob3JnLW1hdGNoLWNv bmQgKG9yZy10YWctcXVlcnktdGVybWluYWxzIGNoYXItYXQtcG9pbnQpCiAgICAgICAgKCg8LSBS RUdFWC1PUEVOKQogICAgICAgICAobGV0KiAoKHJlZ2V4IChvcmctcmVhZC1iYWxhbmNlZC1zdHJp bmcgP1x7ID9cfSkpKQogICAgICAgICAgICAocHVzaCAoaWYgbmVnLXNlbGVjdAogICAgICAgICAg ICAgICAgICAgICAgYChvcmctc3RyaW5nLW1hdGNoPD4gKG9yIHRvZG8gIiIpICxyZWdleCkKICAg ICAgICAgICAgICAgICAgICBgKG9yZy1zdHJpbmctbWF0Y2g9IChvciB0b2RvICIiKSAscmVnZXgp KQogICAgICAgICAgICAgICAgICBhbmRsaXN0KSkpCiAgICAgICAgKCg8LSBUT0RPLUtFWSkKICAg ICAgICAgKEAgZW5kIDApCiAgICAgICAgIChsZXQgKChtYXRjaCBgKGVxdWFsIHRvZG8gLCgkIDAp KSkpCiAgICAgICAgICAgKHB1c2ggKGlmIG5lZy1zZWxlY3QgYChub3QgLG1hdGNoKSBtYXRjaCkg YW5kbGlzdCkpKQogICAgICAgICgoPC0gQU5ELU9QKQogICAgICAgICAoQCBlbmQgMCkKICAgICAg ICAgKGNvbmQKICAgICAgICAgIChnb3Qtc2VsZWN0CiAgICAgICAgICAgKG9yZy10cXVlcnktZXJy b3IgInRyYWlsaW5nIHNlbGVjdG9yIHdpdGggbm8gdG9kbyB0ZXJtIikpCiAgICAgICAgICAoKG51 bGwgYW5kbGlzdCkKICAgICAgICAgICAob3JnLXRxdWVyeS1lcnJvciAibWlzc2luZyB0b2RvIHRl cm0gYmVmb3JlICYiKSkpKQogICAgICAgIChnb3Qtc2VsZWN0CiAgICAgICAgIChvcmctdHF1ZXJ5 LWVycm9yICJ0cmFpbGluZyBzZWxlY3RvciB3aXRoIG5vIHRvZG8gdGVybSIpKQogICAgICAgICgo PC0gT1ItT1ApCiAgICAgICAgIChAIGVuZCAwKQogICAgICAgICAod2hlbiAobnVsbCBhbmRsaXN0 KQogICAgICAgICAgIChvcmctdHF1ZXJ5LWVycm9yICJtaXNzaW5nIHRvZG8gdGVybSBiZWZvcmUg fCIpKQogICAgICAgICAocHVzaCAoaWYgKGNkciBhbmRsaXN0KQogICAgICAgICAgICAgICAgICAg KGNvbnMgJ2FuZCAobnJldmVyc2UgYW5kbGlzdCkpCiAgICAgICAgICAgICAgICAgKGNhciBhbmRs aXN0KSkKICAgICAgICAgICAgICAgb3JsaXN0KQogICAgICAgICAoc2V0cSBhbmRsaXN0IG5pbCkp CiAgICAgICAgKCg8LSBHUk9VUC1DTE9TRSkgOyBlbmQgdG9kbyBwYXJzZSBhbmQgcmV0dXJuIHRv IG1haW4gcGFyc2VyCiAgICAgICAgIChzZXRxIGRvbmUgdCkpCiAgICAgICAgKHQKICAgICAgICAg KG9yZy10cXVlcnktZXJyb3IgImludmFsaWQgdG9rZW4gJWMgaW4gdG9kbyBleHByZXNzaW9uIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhci1hZnRlcikpKSkKICAgICAgKHNraXAtY2hh cnMtZm9yd2FyZCAob3JnLXJlICJbOmJsYW5rOl0iKSkpCiAgICAod2hlbiBhbmRsaXN0CiAgICAg IChwdXNoIChpZiAoY2RyIGFuZGxpc3QpIChjb25zICdhbmQgKG5yZXZlcnNlIGFuZGxpc3QpKSAo Y2FyIGFuZGxpc3QpKQogICAgICAgICAgICBvcmxpc3QpKQogICAgKGNvbmQgICAgICAgICAgICAg ICA7IHJlc3VsdCB3aWxsIGJlIHNwbGljZWQgaW50byBhbiBhbmQKICAgICAoKGNkciBvcmxpc3Qp ICAgICAgICA7IHdyYXAgaW4gYSBsaXN0IGZvciBsYXRlciBzcGxpY2luZwogICAgICAobGlzdCAo Y29ucyAnb3IgKG5yZXZlcnNlIG9ybGlzdCkpKSkKICAgICAoKGFuZCAoY29uc3AgKGNhciBvcmxp c3QpKSAoZXEgJ2FuZCAoY2FyIChjYXIgb3JsaXN0KSkpKQogICAgICAoY2RyIChjYXIgb3JsaXN0 KSkpIDsgc3BsaWNlIChhbmQgLi4uKSBhcyAoLi4uKSBkaXJlY3RseQogICAgICh0ICAgICAgICAg ICAgICAgICAgIDsgd3JhcCBpbiBhIGxpc3QgZm9yIGxhdGVyIHNwbGljaW5nCiAgICAgIChsaXN0 IChjYXIgb3JsaXN0KSkpKSkpCgoKOzs7IE1vZGlmaWVkIGBvcmctbWFrZS10YWdzLW1hdGNoZXIn IGFuZCBgb3JnLXNjYW4tdGFncycgdGhhdCB1c2UgdGhlIG5ldyBwYXJzZXIKCjs7OyBUaGUgbWFp biBjaGFuZ2UgdG8gYG9yZy1tYWtlLXRhZ3MtbWF0Y2hlcicgaXMgdG8gaW5zZXJ0IHRoZSBuZXcg dGFnCjs7OyBwYXJzZXIsIGJ1dCB0aGlzIGFsbG93ZWQgbWUgdG8gc2hvcnRlbiBhbmQgY2xlYW4g dXAgdGhlIGNvZGUsIGZpeAo7Ozsgb25lIHZlcnkgbWlub3IgYnVnIChzZWUgTk9URSBiZWxvdyks IGFuZCB1cGRhdGUgdGhlIGRvY3N0cmluZy4KOzs7IEkndmUgYWxzbyBzZXBhcmF0ZWQgb3V0IHRo ZSB0b2RvIHBhcnNpbmcgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uCjs7OyBmb3IgY2xhcml0eSBh bmQgc3ltbWV0cnksIHRob3VnaCBJJ3ZlIGxlZnQgdGhlIG1ldGhvZCBhcyBpcy4KOzs7IAo7Ozsg VGhlIGNoYW5nZXMgdG8gYG9yZy1zY2FuLXRhZ3MnIGFyZSBtaW5vciBhbmQgZXNzZW50aWFsbHkg ZnJlZSwgYW5kIAo7OzsgSSBpbmNsdWRlIHRoZSBjb250ZXh0IGRpZmYgaW4gY29tbWVudHMgYmVs b3cuCjs7Owo7OzsgVGhlc2UgYm90aCBhcmUgZHJhd24gZnJvbSB0aGUgNy44LjExIGNvZGUuIFRv IGZhY2lsaXRhdGUgdGVzdGluZywKOzs7IEkndmUgYWRkZWQgYW4gLU5FVyB0byB0aGUgbmFtZXMg b2YgdGhlc2UgZnVuY3Rpb25zIGZvciB0aGUgbW9tZW50LAo7OzsgYnV0IHRoYXQgc2hvdWxkIGJl IGNoYW5nZWQgaWYgdGhleSBhcmUgdXNlZC4gVGhlIHRlbXBvcmFyeSBmdW5jdGlvbgo7OzsgYG9y Zy10bXAtdXNlLXRhZy1wYXJzZXInIGFsbG93cyBzd2l0Y2hpbmcgYmV0d2VlbiBvbGQgYW5kIG5l dyBmb3IKOzs7IHRlc3RpbmcuIFNlZSBhbHNvIHRoZSBmaWxlIGB0YWctcXVlcnktdGVzdHMuZWwn IHRoYXQgcnVucyBzb21lIGJhc2ljCjs7OyB0ZXN0cy4KCjs7IE5vdGU6IFN1Y2Nlc3NpdmUgbWF0 Y2hlcyAoXEctc3R5bGUpIGluIGEgZml4ZWQgc3RyaW5nIGFyZSBub3QgcG9zc2libGUKOzsgaW4g ZW1hY3MgKHdpdGhvdXQgbWFraW5nIHJlcGVhdGVkIGNvcGllcyBvZiBzdWJzdHJpbmdzKSBiZWNh dXNlIHRoZXJlCjs7IGlzIG5vIHdheSB0byBhbmNob3IgYSBzdHJpbmctbWF0Y2ggYXQgdGhlIHN0 YXJ0IHBvc2l0aW9uIGFyZ3VtZW50Lgo7OyAoSSBoYXZlIHN1Z2dlc3RlZCB1c2luZyB0aGUgemVy by1sZW5ndGggYXNzZXJ0aW9uIFw9IGluIGEgc3RyaW5nIHRvCjs7IGFuY2hvciBhdCB0aGF0IHBv c2l0aW9uLCBhbmFsb2dvdXMgdG8gaXRzIHVzZSBpbiBidWZmZXIgc2VhcmNoZXMuIElmCjs7IHlv dSdyZSB3aXRoIG1lLCBzcHJlYWQgdGhlIHdvcmQuKQo7Owo7OyBTbyBpbnN0ZWFkIG9mIG1hcmNo aW5nIHRocm91Z2ggdGhlIHN0cmluZyBjb3B5aW5nIHN1YnN0cmluZ3MsIHdlCjs7IHByb2Nlc3Mg dGhlIHF1ZXJ5IHN0cmluZyBpbiBhIHRlbXBvcmFyeSBidWZmZXIuIFRoaXMgaXMgbW9yZQo7OyBp ZGlvbWF0aWMgZWxpc3AgaW4gYW55IGNhc2UsIGFuZCBpcyBxdWl0ZSBmYXN0IGFuZCBjb252ZW5p ZW50IGl0Cjs7IHR1cm5zIG91dC4gRG9pbmcgaXQgdGhlIG90aGVyIHdheSBpcyBwb3NzaWJsZSBh cyB3ZWxsLCBieSBtYWtpbmcKOzsgY2hhbmdlcyBpbiBhIGZldyBwbGFjZXMsIHBhcnRpY3VsYXJs eSB0aGUgb3JnLW1hdGNoLWNvbmQgbWFjcm8gYW5kCjs7IG9yZy10YWctcXVlcnktcGFyc2UgaW4g YSBmZXcgcGxhY2VzLiBCdXQgc28gZmFyIEkgbGlrZSB0aGlzIGFwcHJvYWNoLgoKKGRlZnVuIG9y Zy1tYWtlLXRhZ3MtbWF0Y2hlciAobWF0Y2gpCiAgIkNyZWF0ZSB0aGUgVEFHUy9UT0RPIG1hdGNo ZXIgZm9ybSBmb3IgdGhlIHNlbGVjdGlvbiBzdHJpbmcgTUFUQ0guCgpUaGUgdmFyaWFibGUgYHRv ZG8tb25seScgaXMgc2NvcGVkIGR5bmFtaWNhbGx5IGludG8gdGhpcwpmdW5jdGlvbjsgaXQgd2ls bCBiZSBzZXQgdG8gdCBpZiB0aGUgbWF0Y2hlciByZXN0cmljdHMgbWF0Y2hpbmcKdG8gVE9ETyBl bnRyaWVzLCBvdGhlcndpc2Ugd2lsbCBub3QgYmUgdG91Y2hlZC4KClJldHVybnMgYSBjb25zIG9m IHRoZSBzZWxlY3Rpb24gc3RyaW5nIE1BVENIIGFuZCB0aGUgY29uc3RydWN0ZWQKbGlzcCBmb3Jt IGltcGxlbWVudGluZyB0aGUgbWF0Y2hlci4gVGhlIG1hdGNoZXIgaXMgdG8gYmUKZXZhbHVhdGVk IGF0IGFuIE9yZyBlbnRyeSwgd2l0aCBwb2ludCBvbiB0aGUgaGVhZGxpbmUsIGFuZApyZXR1cm5z IHQgaWYgdGhlIGVudHJ5IG1hdGNoZXMgdGhlIHNlbGVjdGlvbiBzdHJpbmcgTUFUQ0guIFRoZQpy ZXR1cm5lZCBsaXNwIGZvcm0gbWF5IHJlZmVyZW5jZSBmb3VyIHZhcmlhYmxlcyB3aXRoIGluZm9y bWF0aW9uCmFib3V0IHRoZSBlbnRyeSwgd2hpY2ggbXVzdCBiZSBib3VuZCBhcm91bmQgdGhlIGZv cm0ncwpldmFsdWF0aW9uOiB0b2RvLCB0aGUgVE9ETyBrZXl3b3JkIGF0IHRoZSBlbnRyeSAob3Ig bmlsIG9mIG5vbmUpOwpoZWFkaW5nLCB0aGUgdGV4dCBvZiB0aGUgaGVhZGluZyBmb3IgdGhlIGVu dHJ5OyBwcmlvcml0eSwgdGhlCnByaW9yaXR5IGNvb2tpZSBmb3IgdGhlIGVudHJ5IG9yIG5pbDsg YW5kIHRhZ3MtbGlzdCwgdGhlIGxpc3Qgb2YKYWxsIHRhZ3MgYXQgdGhlIGVudHJ5IGluY2x1ZGlu ZyBpbmhlcml0ZWQgb25lcy4gQWRkaXRpb25hbGx5LCB0aGUKY2F0ZWdvcnkgb2YgdGhlIGVudHJ5 IChpZiBhbnkpIG11c3QgYmUgc3BlY2lmaWVkIGFzIHRoZSB0ZXh0CnByb3BlcnR5ICdvcmctY2F0 ZWdvcnkgb24gdGhlIGhlYWRsaW5lLgoKU2VlIGFsc28gYG9yZy1zY2FuLXRhZ3MnLgoiCiAgKGRl Y2xhcmUgKHNwZWNpYWwgdG9kby1vbmx5KSkKICAodW5sZXNzIChib3VuZHAgJ3RvZG8tb25seSkK ICAgIChlcnJvciAib3JnLW1ha2UtdGFncy1tYXRjaGVyIGV4cGVjdHMgdG9kby1vbmx5IHRvIGJl IHNjb3BlZCBpbiIpKQogICh1bmxlc3MgbWF0Y2gKICAgIDs7IEdldCBhIG5ldyBtYXRjaCByZXF1 ZXN0LCB3aXRoIGNvbXBsZXRpb24KICAgIChsZXQgKChvcmctbGFzdC10YWdzLWNvbXBsZXRpb24t dGFibGUKCSAgIChvcmctZ2xvYmFsLXRhZ3MtY29tcGxldGlvbi10YWJsZSkpKQogICAgICAoc2V0 cSBtYXRjaCAob3JnLWNvbXBsZXRpbmctcmVhZC1uby1pCgkJICAgIk1hdGNoOiAiICdvcmctdGFn cy1jb21wbGV0aW9uLWZ1bmN0aW9uIG5pbCBuaWwgbmlsCgkJICAgJ29yZy10YWdzLWhpc3Rvcnkp KSkpCgogIDs7IFBhcnNlIHRoZSBzdHJpbmcgaW50byBhIG1hdGNoZXIgbGlzcCBmb3JtCiAgKGNv bmQKICAgKChvciAobm90IG1hdGNoKSAobm90IChzdHJpbmctbWF0Y2gtcCAiXFxTLSIgbWF0Y2gp KSkKICAgIChjb25zIG1hdGNoIHQpKQogICAoKHN0cmluZy1tYXRjaCAiXlxccy0qXFwoW14tK0Et WmEtejAtOV9AJSM6eygvIFx0XVxcKSIgbWF0Y2gpCiAgICAob3JnLXRxdWVyeS1lcnJvciAiaW52 YWxpZCBjaGFyYWN0ZXJzIGluIHF1ZXJ5IHN0cmluZyIKICAgICAgICAgICAgICAgICAgICAgIDpw b3MgKG1hdGNoLWJlZ2lubmluZyAxKSkpCiAgICh0CiAgICAod2l0aC10ZW1wLWJ1ZmZlcgogICAg ICAoaW5zZXJ0IG1hdGNoKQogICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAoY29u cyBtYXRjaCAob3JnLXRhZy1xdWVyeS1wYXJzZSB0b2RvLW9ubHkpKSkpKSkKCjs7IFRoZSBjaGFu Z2VzIHRvIG9yZy1zY2FuLXRhZ3MgYXJlIG1pbm9yIGFuZCBlc3NlbnRpYWxseSBmcmVlLgo7OyBB IGRpZmYgLVUgMiBhZ2FpbnN0IG9yZy5lbCBmcm9tIDcuOC4xMSB3aXRoIG9ubHkgdGhpcyBmdW5j dGlvbgo7OyBjaGFuZ2VkIGZvbGxvd3MuCjs7Cjs7IC0tLSBvcmcuZWwgICAgICAyMDEyLTA3LTMx IDE1OjMyOjE3LjAwMDAwMDAwMCAtMDQwMAo7OyArKysgbW9kaWZpZWQtb3JnLmVsICAgICAyMDEy LTA3LTMxIDE1OjIwOjU2LjAwMDAwMDAwMCAtMDQwMAo7OyBAQCAtMTI4MzAsNSArMTI4MzAsNSBA QAo7OyAgICAgICAgICAgICAgICAgICAgICAiICpcXChcXDxcXCgiCjs7ICAgICAgICAgICAgICAg ICAgICAgIChtYXBjb25jYXQgJ3JlZ2V4cC1xdW90ZSBvcmctdG9kby1rZXl3b3Jkcy0xICJcXHwi KQo7OyAtICAgICAgICAgICAgICAgICAgICAob3JnLXJlICJcXClcXD5cXCk/ICpcXCguKj9cXClc XCg6W1s6YWxudW06XV9AIyU6XSs6XFwpP1sgXHRdKiQiKSkpCjs7ICsgICAgICAgICAgICAgICAg ICAgIChvcmctcmUgIlxcKVxcPlxcKT9bIFx0XSpcXCg/OlxcWyNcXCguXFwpXFxdXFwpP1sgXHRd KlxcKC4qP1xcKVxcKDpbWzphbG51bTpdX0AjJTpdKzpcXCk/WyBcdF0qJCIpKSkKOzsgICAgICAg ICAgKHByb3BzIChsaXN0ICdmYWNlICdkZWZhdWx0Cjs7ICAgICAgICAgICAgICAgICAgICAgICAn ZG9uZS1mYWNlICdvcmctYWdlbmRhLWRvbmUKOzsgQEAgLTEyODQ4LDUgKzEyODQ4LDUgQEAKOzsg ICAgICAgICAgKHRhZ3MtYWxpc3QgKGxpc3QgKGNvbnMgMCBvcmctZmlsZS10YWdzKSkpCjs7ICAg ICAgICAgIChsbGFzdCAwKSBydG4gcnRuMSBsZXZlbCBjYXRlZ29yeSBpIHR4dAo7OyAtICAgICAg ICB0b2RvIG1hcmtlciBlbnRyeSBwcmlvcml0eSkKOzsgKyAgICAgICAgdG9kbyBtYXJrZXIgZW50 cnkgaGVhZGluZyBwcmlvcml0eSBwcmlvcml0eS1udW0pCjs7ICAgICAgKHdoZW4gKG5vdCAob3Ig KG1lbWJlciBhY3Rpb24gJyhhZ2VuZGEgc3BhcnNlLXRyZWUpKSAoZnVuY3Rpb25wIGFjdGlvbikp KQo7OyAgICAgICAgKHNldHEgYWN0aW9uIChsaXN0ICdsYW1iZGEgbmlsIGFjdGlvbikpKQo7OyBA QCAtMTI4NjAsNSArMTI4NjAsNyBAQAo7OyAgICAgICAgIChjYXRjaCA6c2tpcAo7OyAgICAgICAg ICAgKHNldHEgdG9kbyAoaWYgKG1hdGNoLWVuZCAxKSAob3JnLW1hdGNoLXN0cmluZy1uby1wcm9w ZXJ0aWVzIDIpKQo7OyAtICAgICAgICAgICAgICAgdGFncyAoaWYgKG1hdGNoLWVuZCA0KSAob3Jn LW1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDQpKSkKOzsgKyAgICAgICAgICAgICAgICBwcmlv cml0eSAoaWYgKG1hdGNoLWVuZCAzKSAob3JnLW1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDMp KQo7OyArICAgICAgICAgICAgICAgIGhlYWRpbmcgKG9yZy1tYXRjaC1zdHJpbmctbm8tcHJvcGVy dGllcyA0KQo7OyArICAgICAgICAgICAgICAgdGFncyAoaWYgKG1hdGNoLWVuZCA1KSAob3JnLW1h dGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDUpKSkKOzsgICAgICAgICAgIChnb3RvLWNoYXIgKHNl dHEgbHNwb3MgKG1hdGNoLWJlZ2lubmluZyAwKSkpCjs7ICAgICAgICAgICAoc2V0cSBsZXZlbCAo b3JnLXJlZHVjZWQtbGV2ZWwgKGZ1bmNhbGwgb3V0bGluZS1sZXZlbCkpCjs7IEBAIC0xMjkzOCw1 ICsxMjk0MCw1IEBACjs7ICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzLWxpc3QKOzsgICAg ICAgICAgICAgICAgICAgICAgICAgICkKOzsgLSAgICAgICAgICAgICAgICAgICBwcmlvcml0eSAo b3JnLWdldC1wcmlvcml0eSB0eHQpKQo7OyArICAgICAgICAgICAgICAgICAgIHByaW9yaXR5LW51 bSAob3JnLWdldC1wcmlvcml0eSB0eHQpKQo7OyAgICAgICAgICAgICAgIChnb3RvLWNoYXIgbHNw b3MpCjs7ICAgICAgICAgICAgICAgKHNldHEgbWFya2VyIChvcmctYWdlbmRhLW5ldy1tYXJrZXIp KQo7OyBAQCAtMTI5NDQsNSArMTI5NDYsNSBAQAo7OyAgICAgICAgICAgICAgICAgJ29yZy1tYXJr ZXIgbWFya2VyICdvcmctaGQtbWFya2VyIG1hcmtlciAnb3JnLWNhdGVnb3J5IGNhdGVnb3J5Cjs7 ICAgICAgICAgICAgICAgICAndG9kby1zdGF0ZSB0b2RvCjs7IC0gICAgICAgICAgICAgICAncHJp b3JpdHkgcHJpb3JpdHkgJ3R5cGUgInRhZ3NtYXRjaCIpCjs7ICsgICAgICAgICAgICAgICAncHJp b3JpdHkgcHJpb3JpdHktbnVtICd0eXBlICJ0YWdzbWF0Y2giKQo7OyAgICAgICAgICAgICAgIChw dXNoIHR4dCBydG4pKQo7OyAgICAgICAgICAgICAgKChmdW5jdGlvbnAgYWN0aW9uKQo7OyAKCihk ZWZ1biBvcmctc2Nhbi10YWdzIChhY3Rpb24gbWF0Y2hlciB0b2RvLW9ubHkgJm9wdGlvbmFsIHN0 YXJ0LWxldmVsKQogICJTY2FuIGhlYWRsaW5lIHRhZ3Mgd2l0aCBpbmhlcml0YW5jZSBhbmQgcHJv ZHVjZSBvdXRwdXQgQUNUSU9OLgoKQUNUSU9OIGNhbiBiZSBgc3BhcnNlLXRyZWUnIHRvIHByb2R1 Y2UgYSBzcGFyc2UgdHJlZSBpbiB0aGUgY3VycmVudCBidWZmZXIsCm9yIGBhZ2VuZGEnIHRvIHBy b2R1Y2UgYW4gZW50cnkgbGlzdCBmb3IgYW4gYWdlbmRhIHZpZXcuICBJdCBjYW4gYWxzbyBiZQph IExpc3AgZm9ybSBvciBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCBhdCBlYWNoIG1h dGNoZWQgaGVhZGxpbmUsIGluCnRoaXMgY2FzZSB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgbGlzdCBv ZiBhbGwgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZXNlIGNhbGxzLgoKTUFUQ0hFUiBpcyBhIExpc3Ag Zm9ybSB0byBiZSBldmFsdWF0ZWQsIHRlc3RpbmcgaWYgYSBnaXZlbiBzZXQgb2YgdGFncwpxdWFs aWZpZXMgYSBoZWFkbGluZSBmb3IgaW5jbHVzaW9uLiAgV2hlbiBUT0RPLU9OTFkgaXMgbm9uLW5p bCwKb25seSBsaW5lcyB3aXRoIGEgbm90LWRvbmUgVE9ETyBrZXl3b3JkIGFyZSBpbmNsdWRlZCBp biB0aGUgb3V0cHV0LgpUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSB2YXJpYWJsZSB0aGF0IHdhcyBz Y29wZWQgaW50bwphbmQgc2V0IGJ5IGBvcmctbWFrZS10YWdzLW1hdGNoZXInIHdoZW4gaXQgY29u c3RydWN0ZWQgTUFUQ0hFUi4KClNUQVJULUxFVkVMIGNhbiBiZSBhIHN0cmluZyB3aXRoIGFzdGVy aXNrcywgcmVkdWNpbmcgdGhlIHNjb3BlIHRvCmhlYWRsaW5lcyBtYXRjaGluZyB0aGlzIHN0cmlu Zy4iCiAgKHJlcXVpcmUgJ29yZy1hZ2VuZGEpCiAgKGxldCogKChyZSAoY29uY2F0ICJeIgoJCSAg ICAgKGlmIHN0YXJ0LWxldmVsCgkJCSA7OyBHZXQgdGhlIGNvcnJlY3QgbGV2ZWwgdG8gbWF0Y2gK CQkJIChjb25jYXQgIlxcKlxceyIgKG51bWJlci10by1zdHJpbmcgc3RhcnQtbGV2ZWwpICJcXH0g IikKCQkgICAgICAgb3JnLW91dGxpbmUtcmVnZXhwKQoJCSAgICAgIiAqXFwoXFw8XFwoIgoJCSAg ICAgKG1hcGNvbmNhdCAncmVnZXhwLXF1b3RlIG9yZy10b2RvLWtleXdvcmRzLTEgIlxcfCIpCgkJ ICAgICAob3JnLXJlICJcXClcXD5cXCk/WyBcdF0qXFwoPzpcXFsjXFwoLlxcKVxcXVxcKT9bIFx0 XSpcXCguKj9cXClcXCg6W1s6YWxudW06XV9AIyU6XSs6XFwpP1sgXHRdKiQiKSkpCgkgKHByb3Bz IChsaXN0ICdmYWNlICdkZWZhdWx0CgkJICAgICAgJ2RvbmUtZmFjZSAnb3JnLWFnZW5kYS1kb25l CgkJICAgICAgJ3VuZG9uZS1mYWNlICdkZWZhdWx0CgkJICAgICAgJ21vdXNlLWZhY2UgJ2hpZ2hs aWdodAoJCSAgICAgICdvcmctbm90LWRvbmUtcmVnZXhwIG9yZy1ub3QtZG9uZS1yZWdleHAKCQkg ICAgICAnb3JnLXRvZG8tcmVnZXhwIG9yZy10b2RvLXJlZ2V4cAoJCSAgICAgICdvcmctY29tcGxl eC1oZWFkaW5nLXJlZ2V4cCBvcmctY29tcGxleC1oZWFkaW5nLXJlZ2V4cAoJCSAgICAgICdoZWxw LWVjaG8KCQkgICAgICAoZm9ybWF0ICJtb3VzZS0yIG9yIFJFVCBqdW1wIHRvIG9yZyBmaWxlICVz IgoJCQkgICAgICAoYWJicmV2aWF0ZS1maWxlLW5hbWUKCQkJICAgICAgIChvciAoYnVmZmVyLWZp bGUtbmFtZSAoYnVmZmVyLWJhc2UtYnVmZmVyKSkKCQkJCSAgIChidWZmZXItbmFtZSAoYnVmZmVy LWJhc2UtYnVmZmVyKSkpKSkpKQoJIChjYXNlLWZvbGQtc2VhcmNoIG5pbCkKCSAob3JnLW1hcC1j b250aW51ZS1mcm9tIG5pbCkKICAgICAgICAgbHNwb3MgdGFncyB0YWdzLWxpc3QKCSAodGFncy1h bGlzdCAobGlzdCAoY29ucyAwIG9yZy1maWxlLXRhZ3MpKSkKCSAobGxhc3QgMCkgcnRuIHJ0bjEg bGV2ZWwgY2F0ZWdvcnkgaSB0eHQKCSB0b2RvIG1hcmtlciBlbnRyeSBoZWFkaW5nIHByaW9yaXR5 IHByaW9yaXR5LW51bSkKICAgICh3aGVuIChub3QgKG9yIChtZW1iZXIgYWN0aW9uICcoYWdlbmRh IHNwYXJzZS10cmVlKSkgKGZ1bmN0aW9ucCBhY3Rpb24pKSkKICAgICAgKHNldHEgYWN0aW9uIChs aXN0ICdsYW1iZGEgbmlsIGFjdGlvbikpKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3Rv LWNoYXIgKHBvaW50LW1pbikpCiAgICAgICh3aGVuIChlcSBhY3Rpb24gJ3NwYXJzZS10cmVlKQoJ KG9yZy1vdmVydmlldykKCShvcmctcmVtb3ZlLW9jY3VyLWhpZ2hsaWdodHMpKQogICAgICAod2hp bGUgKHJlLXNlYXJjaC1mb3J3YXJkIHJlIG5pbCB0KQoJKHNldHEgb3JnLW1hcC1jb250aW51ZS1m cm9tIG5pbCkKCShjYXRjaCA6c2tpcAoJICAoc2V0cSB0b2RvIChpZiAobWF0Y2gtZW5kIDEpIChv cmctbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMikpCiAgICAgICAgICAgICAgICBwcmlvcml0 eSAoaWYgKG1hdGNoLWVuZCAzKSAob3JnLW1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDMpKQog ICAgICAgICAgICAgICAgaGVhZGluZyAob3JnLW1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDQp CgkJdGFncyAoaWYgKG1hdGNoLWVuZCA1KSAob3JnLW1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVz IDUpKSkKCSAgKGdvdG8tY2hhciAoc2V0cSBsc3BvcyAobWF0Y2gtYmVnaW5uaW5nIDApKSkKCSAg KHNldHEgbGV2ZWwgKG9yZy1yZWR1Y2VkLWxldmVsIChmdW5jYWxsIG91dGxpbmUtbGV2ZWwpKQoJ CWNhdGVnb3J5IChvcmctZ2V0LWNhdGVnb3J5KSkKCSAgKHNldHEgaSBsbGFzdCBsbGFzdCBsZXZl bCkKCSAgOzsgcmVtb3ZlIHRhZyBsaXN0cyBmcm9tIHNhbWUgYW5kIHN1YmxldmVscwoJICAod2hp bGUgKD49IGkgbGV2ZWwpCgkgICAgKHdoZW4gKHNldHEgZW50cnkgKGFzc29jIGkgdGFncy1hbGlz dCkpCgkgICAgICAoc2V0cSB0YWdzLWFsaXN0IChkZWxldGUgZW50cnkgdGFncy1hbGlzdCkpKQoJ ICAgIChzZXRxIGkgKDEtIGkpKSkKCSAgOzsgYWRkIHRoZSBuZXh0IHRhZ3MKCSAgKHdoZW4gdGFn cwoJICAgIChzZXRxIHRhZ3MgKG9yZy1zcGxpdC1zdHJpbmcgdGFncyAiOiIpCgkJICB0YWdzLWFs aXN0CgkJICAoY29ucyAoY29ucyBsZXZlbCB0YWdzKSB0YWdzLWFsaXN0KSkpCgkgIDs7IGNvbXBp bGUgdGFncyBmb3IgY3VycmVudCBoZWFkbGluZQoJICAoc2V0cSB0YWdzLWxpc3QKCQkoaWYgb3Jn LXVzZS10YWctaW5oZXJpdGFuY2UKCQkgICAgKGFwcGx5ICdhcHBlbmQgKG1hcGNhciAnY2RyIChy ZXZlcnNlIHRhZ3MtYWxpc3QpKSkKCQkgIHRhZ3MpCgkJb3JnLXNjYW5uZXItdGFncyB0YWdzLWxp c3QpCgkgICh3aGVuIG9yZy11c2UtdGFnLWluaGVyaXRhbmNlCgkgICAgKHNldGNkciAoY2FyIHRh Z3MtYWxpc3QpCgkJICAgIChtYXBjYXIgKGxhbWJkYSAoeCkKCQkJICAgICAgKHNldHEgeCAoY29w eS1zZXF1ZW5jZSB4KSkKCQkJICAgICAgKG9yZy1hZGQtcHJvcC1pbmhlcml0ZWQgeCkpCgkJCSAg ICAoY2RhciB0YWdzLWFsaXN0KSkpKQoJICAod2hlbiAoYW5kIHRhZ3Mgb3JnLXVzZS10YWctaW5o ZXJpdGFuY2UKCQkgICAgIChvciAobm90IChlcSB0IG9yZy11c2UtdGFnLWluaGVyaXRhbmNlKSkK CQkJIG9yZy10YWdzLWV4Y2x1ZGUtZnJvbS1pbmhlcml0YW5jZSkpCgkgICAgOzsgc2VsZWN0aXZl IGluaGVyaXRhbmNlLCByZW1vdmUgdW5pbmhlcml0ZWQgb25lcwoJICAgIChzZXRjZHIgKGNhciB0 YWdzLWFsaXN0KQoJCSAgICAob3JnLXJlbW92ZS11bmluaGVyaXRlZC10YWdzIChjZGFyIHRhZ3Mt YWxpc3QpKSkpCgkgICh3aGVuIChhbmQKCgkJIDs7IGV2YWwgbWF0Y2hlciBvbmx5IHdoZW4gdGhl IHRvZG8gY29uZGl0aW9uIGlzIE9LCgkJIChhbmQgKG9yIChub3QgdG9kby1vbmx5KSAobWVtYmVy IHRvZG8gb3JnLW5vdC1kb25lLWtleXdvcmRzKSkKCQkgICAgICAobGV0ICgoY2FzZS1mb2xkLXNl YXJjaCB0KSkgKGV2YWwgbWF0Y2hlcikpKQoKCQkgOzsgQ2FsbCB0aGUgc2tpcHBlciwgYnV0IHJl dHVybiB0IGlmIGl0IGRvZXMgbm90IHNraXAsCgkJIDs7IHNvIHRoYXQgdGhlIGBhbmQnIGZvcm0g Y29udGludWVzIGV2YWx1YXRpbmcKCQkgKHByb2duCgkJICAgKHVubGVzcyAoZXEgYWN0aW9uICdz cGFyc2UtdHJlZSkgKG9yZy1hZ2VuZGEtc2tpcCkpCgkJICAgdCkKCgkJIDs7IENoZWNrIGlmIHRp bWVzdGFtcHMgYXJlIGRlc2VsZWN0aW5nIHRoaXMgZW50cnkKCQkgKG9yIChub3QgdG9kby1vbmx5 KQoJCSAgICAgKGFuZCAobWVtYmVyIHRvZG8gb3JnLW5vdC1kb25lLWtleXdvcmRzKQoJCQkgIChv ciAobm90IG9yZy1hZ2VuZGEtdGFncy10b2RvLWhvbm9yLWlnbm9yZS1vcHRpb25zKQoJCQkgICAg ICAobm90IChvcmctYWdlbmRhLWNoZWNrLWZvci10aW1lc3RhbXAtYXMtcmVhc29uLXRvLWlnbm9y ZS10b2RvLWl0ZW0pKSkpKQoKCQkgOzsgRXh0cmEgY2hlY2sgZm9yIHRoZSBhcmNoaXZlIHRhZwoJ CSA7OyBGSVhNRTogRG9lcyB0aGUgc2tpcHBlciBhbHJlYWR5IGRvIHRoaXM/Pz8/CgkJIChvcgoJ CSAgKG5vdCAobWVtYmVyIG9yZy1hcmNoaXZlLXRhZyB0YWdzLWxpc3QpKQoJCSAgOzsgd2UgaGF2 ZSBhbiBhcmNoaXZlIHRhZywgc2hvdWxkIHdlIHVzZSB0aGlzIGFueXdheT8KCQkgIChvciAobm90 IG9yZy1hZ2VuZGEtc2tpcC1hcmNoaXZlZC10cmVlcykKCQkgICAgICAoYW5kIChlcSBhY3Rpb24g J2FnZW5kYSkgb3JnLWFnZW5kYS1hcmNoaXZlcy1tb2RlKSkpKQoKCSAgICA7OyBzZWxlY3QgdGhp cyBoZWFkbGluZQoKCSAgICAoY29uZAoJICAgICAoKGVxIGFjdGlvbiAnc3BhcnNlLXRyZWUpCgkg ICAgICAoYW5kIG9yZy1oaWdobGlnaHQtc3BhcnNlLXRyZWUtbWF0Y2hlcwoJCSAgIChvcmctZ2V0 LWhlYWRpbmcpIChtYXRjaC1lbmQgMCkKCQkgICAob3JnLWhpZ2hsaWdodC1uZXctbWF0Y2gKCQkg ICAgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKSkKCSAgICAgIChvcmctc2hvdy1j b250ZXh0ICd0YWdzLXRyZWUpKQoJICAgICAoKGVxIGFjdGlvbiAnYWdlbmRhKQoJICAgICAgKHNl dHEgdHh0IChvcmctYWdlbmRhLWZvcm1hdC1pdGVtCgkJCSAiIgoJCQkgKGNvbmNhdAoJCQkgIChp ZiAoZXEgb3JnLXRhZ3MtbWF0Y2gtbGlzdC1zdWJsZXZlbHMgJ2luZGVudGVkKQoJCQkgICAgICAo bWFrZS1zdHJpbmcgKDEtIGxldmVsKSA/LikgIiIpCgkJCSAgKG9yZy1nZXQtaGVhZGluZykpCgkJ CSBjYXRlZ29yeQoJCQkgdGFncy1saXN0CgkJCSApCgkJICAgIHByaW9yaXR5LW51bSAob3JnLWdl dC1wcmlvcml0eSB0eHQpKQoJICAgICAgKGdvdG8tY2hhciBsc3BvcykKCSAgICAgIChzZXRxIG1h cmtlciAob3JnLWFnZW5kYS1uZXctbWFya2VyKSkKCSAgICAgIChvcmctYWRkLXByb3BzIHR4dCBw cm9wcwoJCSdvcmctbWFya2VyIG1hcmtlciAnb3JnLWhkLW1hcmtlciBtYXJrZXIgJ29yZy1jYXRl Z29yeSBjYXRlZ29yeQoJCSd0b2RvLXN0YXRlIHRvZG8KCQkncHJpb3JpdHkgcHJpb3JpdHktbnVt ICd0eXBlICJ0YWdzbWF0Y2giKQoJICAgICAgKHB1c2ggdHh0IHJ0bikpCgkgICAgICgoZnVuY3Rp b25wIGFjdGlvbikKCSAgICAgIChzZXRxIG9yZy1tYXAtY29udGludWUtZnJvbSBuaWwpCgkgICAg ICAoc2F2ZS1leGN1cnNpb24KCQkoc2V0cSBydG4xIChmdW5jYWxsIGFjdGlvbikpCgkJKHB1c2gg cnRuMSBydG4pKSkKCSAgICAgKHQgKGVycm9yICJJbnZhbGlkIGFjdGlvbiIpKSkKCgkgICAgOzsg aWYgd2UgYXJlIHRvIHNraXAgc3VibGV2ZWxzLCBqdW1wIHRvIGVuZCBvZiBzdWJ0cmVlCgkgICAg KHVubGVzcyBvcmctdGFncy1tYXRjaC1saXN0LXN1YmxldmVscwoJICAgICAgKG9yZy1lbmQtb2Yt c3VidHJlZSB0KQoJICAgICAgKGJhY2t3YXJkLWNoYXIgMSkpKSkKCTs7IEdldCB0aGUgY29ycmVj dCBwb3NpdGlvbiBmcm9tIHdoZXJlIHRvIGNvbnRpbnVlCgkoaWYgb3JnLW1hcC1jb250aW51ZS1m cm9tCgkgICAgKGdvdG8tY2hhciBvcmctbWFwLWNvbnRpbnVlLWZyb20pCgkgIChhbmQgKD0gKHBv aW50KSBsc3BvcykgKGVuZC1vZi1saW5lIDEpKSkpKQogICAgKHdoZW4gKGFuZCAoZXEgYWN0aW9u ICdzcGFyc2UtdHJlZSkKCSAgICAgICAobm90IG9yZy1zcGFyc2UtdHJlZS1vcGVuLWFyY2hpdmVk LXRyZWVzKSkKICAgICAgKG9yZy1oaWRlLWFyY2hpdmVkLXN1YnRyZWVzIChwb2ludC1taW4pIChw b2ludC1tYXgpKSkKICAgIChucmV2ZXJzZSBydG4pKSkKCgoocHJvdmlkZSAnb3JnLXRhZy1xdWVy eS1wYXJzZSkKCjs7OyBvcmctdGFnLXF1ZXJ5LXBhcnNlLmVsIGVuZHMgaGVyZQo= --f46d042e00e33965c804c75a186a Content-Type: application/octet-stream; name="tag-query-tests.el" Content-Disposition: attachment; filename="tag-query-tests.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5xbpndd1 Ozs7IHRhZy1xdWVyeS10ZXN0cy5lbCAtLSB0ZXN0IHN1aXRlcyBmb3IgbmV3IG9yZyB0YWcgcXVl cnkgcGFyc2VyCgo7OyBDb3B5cmlnaHQgKEMpIDIwMTIsIENocmlzdG9waGVyIFIuIEdlbm92ZXNl LCBhbGwgcmlnaHRzIHJlc2VydmVkLgoKOzsgQXV0aG9yOiAgQ2hyaXN0b3BoZXIgR2Vub3Zlc2Ug PGdlbm92ZXNlQGNtdS5lZHU+Cjs7IFZlcnNpb246IDEuMAo7Owo7OyBDcmVhdGVkOiAgICAgIFdl ZCAwMSBBdWcgMjAxMiBhdCAyMDo0MyBFRFQKOzsgTGFzdC1VcGRhdGVkOiBXZWQgMTUgQXVnIDIw MTIgYXQgMjE6MjIgRURUCjs7IFVwZGF0ZWQgQnk6ICAgQ2hyaXN0b3BoZXIgUi4gR2Vub3Zlc2UK OzsgS2V5d29yZHM6IG9yZy1tb2RlLCB0YWdzLCBxdWVyeSwgc2VhcmNoCjs7IFBhY2thZ2UtUmVx dWlyZXM6ICgob3JnLW1vZGUgNy44KSkKCgo7OzsgQ29tbWVudGFyeToKOzsKOzsgIFByb3ZpZGVz IGEgc2ltcGxlIGludGVyZmFjZSBmb3IgdHJ5aW5nIHRoZSBuZXcgcGFyc2VyIGltcGxlbWVudGVk IGluCjs7ICB0aGUgZmlsZSBgb3JnLXRhZy1xdWVyeS1wYXJzZS5lbCcuIEJ1dCBsb2FkIHRoaXMg ZmlsZSBGSVJTVCEKOzsKOzsgIFRoZSB0d28gbWFpbiBjb21tYW5kcyBhcmUgYG9yZy11c2UtdGFn LXBhcnNlcicgYW5kIGBydW4tdGFnLXF1ZXJ5LXRlc3RzJzoKOzsKOzsgICAxLiBUaGUgY29tbWFu ZCBgb3JnLXVzZS10YWctcGFyc2VyJyBsZXQncyB5b3UgY2hvb3NlIChvciB0b2dnbGUpIGJldHdl ZW4KOzsgICAgICB0aGUgbmV3IGFuZCBvcmlnaW5hbCBwYXJzZXJzOyB3aXRoIGEgcHJlZml4IGFy Z3VtZW50LCBpdCB3aWxsIHByb21wdAo7OyAgICAgIHlvdSBmb3IgdGhlIGNob2ljZS4KOzsKOzsg ICAyLiBUaGUgY29tbWFuZCBgcnVuLXRhZy1xdWVyeS10ZXN0cycgcnVucyBhbGwgdGhlIHRlc3Qg c3VpdGVzIGFuZCBsaXN0cwo7OyAgICAgIHRoZSByZXN1bHRzIGluIGEgc2VwYXJhdGUgYnVmZmVy LiBVc2UgYSBwcmVmaXggYXJndW1lbnQgdG8gZ2V0IGEgbW9yZQo7OyAgICAgIGRldGFpbGVkIGxp c3Rpbmcgb2YgcmVzdWx0cy4gVGhlIHZhcmlhYmxlIGBvcmctd2hpY2gtdGFnLXBhcnNlcicKOzsg ICAgICB0ZWxscyB5b3Ugd2hpY2ggdmVyc2lvbiBpcyBjdXJyZW50Lgo7OyAgCjs7ICBOb3RlOiBU aGlzIHNob3VsZCBiZSBsb2FkZWQgKmJlZm9yZSogYG9yZy10YWctcXVlcnktcGFyc2UuZWwnLCB3 aGljaAo7OyAgc2hvdWxkIGJlIHZpc2libGUgb24gdGhlIGxvYWQgcGF0aC4gSXQgaXMgYWxzbyBy ZWNvbW1lbmRlZCB0aGF0IHlvdQo7OyAgYnl0ZSBjb21waWxlIGBvcmctdGFnLXF1ZXJ5LXBhcnNl LmVsJyBmaXJzdC4gWW91IGNhbiBjb21waWxlIHRoaXMKOzsgIGZpbGUgYXMgd2VsbCwgaWYgeW91 IGxpa2UuCjs7Cjs7ICBUaGUgcmVtYWluZGVyIG9mIHRoZSBmaWxlIGRlZmluZXMgdGhlIHRlc3Rz IGFuZCB0ZXN0IGZyYW1ld29yay4KOzsKOzsgIEEgZmV3IGRldGFpbHMgKGlmIHlvdSBjYXJlKQo7 OyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjs7ICBUaGUgZXhpc3RpbmcgZnVuY3Rpb25z IGZyb20gb3JnIHRoYXQgYXJlIG1vZGlmaWVkIGJ5Cjs7ICBgb3JnLXRhZy1xdWVyeS1wYXJzZS5l bCcgYXJlIGBvcmctbWFrZS10YWdzLW1hdGNoZXInIGFuZAo7OyAgYG9yZy1zY2FuLXRhZ3MnLiBB ZnRlciBsb2FkaW5nICp0aGlzKiBwYWNrYWdlLCB0aHJlZSB2ZXJzaW9ucyBvZiBlYWNoCjs7ICB0 aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBhdmFpbGFibGU6Cjs7Cjs7ICAgICBvcmctbWFrZS10YWdz LW1hdGNoZXItT1JJR0lOQUwgICAgIC0tIHRoZSBvcmlnaW5hbCBvcmcgIHZlcnNpb24KOzsgICAg IG9yZy1zY2FuLXRhZ3MtT1JJR0lOQUwKOzsgICAgIAo7OyAgICAgb3JnLW1ha2UtdGFncy1tYXRj aGVyLU5FVyAgICAgICAgICAtLSB0aGUgbmV3IG9yZy10YWctcXVlcnktcGFyc2UgdmVyc2lvbgo7 OyAgICAgb3JnLXNjYW4tdGFncy1ORVcKOzsKOzsgICAgIG9yZy1tYWtlLXRhZ3MtbWF0Y2hlciAg ICAgICAgICAgICAgLS0gdGhlIGN1cnJlbnQgdmVyc2lvbiwgaW5pdGlhbGx5IC1ORVcKOzsgICAg IG9yZy1zY2FuLXRhZ3MKOzsKOzsgIFRoZSBmdW5jdGlvbiBgb3JnLXVzZS10YWctcGFyc2VyJyBz d2l0Y2hlcyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZXNlCjs7ICBmdW5jdGlvbnMgdG8gZWl0 aGVyIHRoZSAtTkVXIG9yIC1PUklHSU5BTCB2ZXJzaW9ucy4gVGhpcyBhbGxvd3MgeW91IHRvCjs7 ICB0cnkgb3V0IGFuZCBjb21wYXJlIHRoZSB0d28gcGFyc2Vycy4gCjs7Cjs7ICBZb3UgY2FuIHJ1 biB0aGUgdGVzdHMgYnkgdXNpbmcgdGhlIGNvbW1hbmQgYHJ1bi10YWctcXVlcnktdGVzdHMnIHdo aWNoIHN1bW1hcml6ZXMKOzsgIHRoZSByZXN1bHRzIGluIGEgbmV3IGJ1ZmZlci4gVGhlIGZ1bmN0 aW9uIGB0YWctdGVzdC1ydW4nIGJlbG93IGFsbG93cyBmaW5lcgo7OyAgY29udHJvbCBvdmVyIHdo aWNoIHRlc3RzIGFyZSBydW4uIFRoZSBmb3JtcyBgdGFnLXRlc3Qtc3VpdGUnIGRlZmluZSB0aGUK OzsgIHRlc3Qgc3VpdGVzIGFzIGRvY3VtZW50ZWQgYmVsb3cuCgoocmVxdWlyZSAnb3JnKQooZXZh bC13aGVuLWNvbXBpbGUKICAocmVxdWlyZSAnY2wpKQoKOzs7IFNhdmUgdGhlIE9SSUdJTkFMIGFu ZCBORVcgdmVyc2lvbnMKOzs7ICAgVGhpcyBpcyB3aHkgdGhpcyBmaWxlIG5lZWRzIHRvIGJlIGxv YWRlZCAqYmVmb3JlKiBvcmctdGFnLXF1ZXJ5LXBhcnNlLmVsLgoKKHVubGVzcyAoZmVhdHVyZXAg J29yZy10YWctcXVlcnktcGFyc2UpCiAgKGZzZXQgJ29yZy1zY2FuLXRhZ3MtT1JJR0lOQUwgKHN5 bWJvbC1mdW5jdGlvbiAnb3JnLXNjYW4tdGFncykpCiAgKGZzZXQgJ29yZy1tYWtlLXRhZ3MtbWF0 Y2hlci1PUklHSU5BTCAoc3ltYm9sLWZ1bmN0aW9uICdvcmctbWFrZS10YWdzLW1hdGNoZXIpKQoK ICAocmVxdWlyZSAnb3JnLXRhZy1xdWVyeS1wYXJzZSkKCiAgKGZzZXQgJ29yZy1zY2FuLXRhZ3Mt TkVXIChzeW1ib2wtZnVuY3Rpb24gJ29yZy1zY2FuLXRhZ3MpKQogIChmc2V0ICdvcmctbWFrZS10 YWdzLW1hdGNoZXItTkVXIChzeW1ib2wtZnVuY3Rpb24gJ29yZy1tYWtlLXRhZ3MtbWF0Y2hlcikp KQoKCjs7OyBvcmctdXNlLXRhZy1wYXJzZXIgLS0gc3dpdGNoZXMgYmV0d2VlbiBuZXcgYW5kIG9y aWdpbmFsIHZlcnNpb24KCihkZWZ2YXIgb3JnLXdoaWNoLXRhZy1wYXJzZXIgJ25ldwogICJWZXJz aW9uIG9mIHRoZSB0YWcgcXVlcnkgcGFyc2VyIHRoYXQgaXMgY3VycmVudCwgbmV3IG9yIG9yaWdp bmFsLiIpCgooZGVmdW4gb3JnLXVzZS10YWctcGFyc2VyICgmb3B0aW9uYWwgd2hpY2gpCiAgIlN3 aXRjaCBiZXR3ZWVuIHRhZyBxdWVyeSBwYXJzZXJzLiAKSWYgbmlsIG9yICd0b2dnbGUsIGl0IHRv Z2dsZXMgYmV0d2VlbiBuZXcgYW5kIG9yaWdpbmFsLgpPdGhlcndpc2UsIFdISUNIIG11c3QgYmUg ZWl0aGVyICduZXcgb3IgJ29yaWdpbmFsLiIKICAoaW50ZXJhY3RpdmUKICAgKGxpc3QKICAgIChp ZiAobm90IGN1cnJlbnQtcHJlZml4LWFyZykKICAgICAgICAndG9nZ2xlCiAgICAgIChsZXQgKCht ZXNnICJXaGljaCBwYXJzZXIgW3Rdb2dnbGUsIFtuXWV3LCBvciBbb11yaWdpbmFsPyAiKQogICAg ICAgICAgICAobWVzZzIgIlBsZWFzZSBjaG9vc2Ugb25lIG9mIFt0XW9nZ2xlLCBbbl1ldywgb3Ig W29dcmlnaW5hbCEgIikKICAgICAgICAgICAgKGNob2ljZSBuaWwpKQogICAgICAgICh3aGlsZSAo bm90IGNob2ljZSkKICAgICAgICAgIChzZXRxIGNob2ljZQogICAgICAgICAgICAgICAgKGNhc2Ug KHJlYWQtY2hhciBtZXNnKQogICAgICAgICAgICAgICAgICAoP3QgJ3RvZ2dsZSkKICAgICAgICAg ICAgICAgICAgKD9uICduZXcpCiAgICAgICAgICAgICAgICAgICg/byAnb3JpZ2luYWwpCiAgICAg ICAgICAgICAgICAgICh0CiAgICAgICAgICAgICAgICAgICAoc2V0cSBtZXNnIG1lc2cyKQogICAg ICAgICAgICAgICAgICAgbmlsKSkpKQogICAgICAgIGNob2ljZSkpKSkKICAoZWNhc2UgKG9yIHdo aWNoICd0b2dnbGUpIAogICAgKHRvZ2dsZQogICAgIChvcmctdXNlLXRhZy1wYXJzZXIgKGlmIChl cSBvcmctd2hpY2gtdGFnLXBhcnNlciAnb3JpZ2luYWwpICduZXcgJ29yaWdpbmFsKSkpCiAgICAo bmV3CiAgICAgKGZzZXQgJ29yZy1zY2FuLXRhZ3MgKHN5bWJvbC1mdW5jdGlvbiAnb3JnLXNjYW4t dGFncy1ORVcpKQogICAgIChmc2V0ICdvcmctbWFrZS10YWdzLW1hdGNoZXIgKHN5bWJvbC1mdW5j dGlvbiAnb3JnLW1ha2UtdGFncy1tYXRjaGVyLU5FVykpCiAgICAgKG1lc3NhZ2UgIkluc3RhbGxp bmcgbmV3IHRhZy90b2RvLXF1ZXJ5IHBhcnNlciIpCiAgICAgKHNldHEgb3JnLXdoaWNoLXRhZy1w YXJzZXIgJ25ldykpCiAgICAob3JpZ2luYWwKICAgICAoZnNldCAnb3JnLXNjYW4tdGFncyAoc3lt Ym9sLWZ1bmN0aW9uICdvcmctc2Nhbi10YWdzLU9SSUdJTkFMKSkKICAgICAoZnNldCAnb3JnLW1h a2UtdGFncy1tYXRjaGVyIChzeW1ib2wtZnVuY3Rpb24gJ29yZy1tYWtlLXRhZ3MtbWF0Y2hlci1P UklHSU5BTCkpCiAgICAgKG1lc3NhZ2UgIkluc3RhbGxpbmcgb3JpZ2luYWwgdGFnL3RvZG8tcXVl cnkgcGFyc2VyIikKICAgICAoc2V0cSBvcmctd2hpY2gtdGFnLXBhcnNlciAnb3JpZ2luYWwpKSkp CgoKOzs7IHJ1bi10YWctcXVlcnktdGVzdHMgLS0gcnVucyB0ZXN0IGFuZCBuaWNlbHkgZGlzcGxh eWVzIHJlc3VsdHMKCihkZWZtYWNybyB0YWctcXVlcnktdGVzdC1wc3RyaW5nIChzdHJpbmcgJnJl c3QgZmFjZS1wcm9wcykKICAiU1RSSU5HIHdpdGggaXRzIGZhY2UgcHJvcGVydGllcyBzZXQgdG8g RkFDRS1QUk9QUy4KSWYgRkFDRS1QUk9QUyBpcyBlbXB0eSwgcmV0dXJuIHRoZSB1bnByb3BlcnRp emVkIHN0cmluZy4iCiAgKGRlY2xhcmUgKGluZGVudCAxKSkKICAoaWYgKG51bGwgZmFjZS1wcm9w cykKICAgICAgYCxzdHJpbmcKICBgKHByb3BlcnRpemUgLHN0cmluZyAnZmFjZSAnKCxAZmFjZS1w cm9wcykpKSkKCihkZWZ1biBydW4tdGFnLXF1ZXJ5LXRlc3RzICgmb3B0aW9uYWwgZ2l2ZS1kZXRh aWxzKQogICJSdW4gYWxsIHRlc3Qgc3VpdGVzIGZvciB0aGUgbmV3IHRhZyBxdWVyeSBwYXJzZXIg YW5kIGRpc3BsYXkKaW4gYSB0ZW1wb3JhcnkgYnVmZmVyICpUYWdRdWVyeVRlc3RzKi4gV2l0aCBh IHByZWZpeCBhcmcsCmdpdmUgZGV0YWlsZWQgcmVzdWx0cyBvZiBlYWNoIHRlc3Q7IG90aGVyd2lz ZSwgZ2l2ZSBhIHN1bW1hcnkKZm9yIGVhY2ggc3VpdGUuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAg KGxldCogKChkZXRhaWwgKGlmIGdpdmUtZGV0YWlscyA6cmVzdWx0cyA6c3VtbWFyaXplKSkKCSAo YnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKlRhZ1F1ZXJ5VGVzdHMqIikpCgkgKGRpc3BsYXkg KGxhbWJkYSAocmVzdWx0cykKCQkgICAgOzsgVGhpcyBpcyBhIGJpdCBvZiBhIG1lc3MsIGJ1dCBv aCB3ZWxsLgoJCSAgICAoZG9saXN0IChyZXN1bHQgcmVzdWx0cykKCQkgICAgICAoaWYgKGFuZCAo Y29uc3AgcmVzdWx0KSAoY29uc3AgKGNkciByZXN1bHQpKSkKCQkJICAoZG9saXN0IChpbmQtcmVz IHJlc3VsdCkKCQkJICAgIChjb25kCgkJCSAgICAgKChjb25zcCBpbmQtcmVzKQoJCQkgICAgICAo aW5zZXJ0ICIgICAgIikKCQkJICAgICAgKGNvbmQKCQkJICAgICAgICgobnVsbCAoY2FyIGluZC1y ZXMpKQoJCQkJKGluc2VydCAodGFnLXF1ZXJ5LXRlc3QtcHN0cmluZyAiRmFpbCIgOmZvcmVncm91 bmQgInJlZCIpICIgICIpCgkJCQkocHJpbjEgKGNkciBpbmQtcmVzKSBidWZmZXIpKQoJCQkgICAg ICAgKChlcSAoY2FyIGluZC1yZXMpIHQpCgkJCQkoaW5zZXJ0ICh0YWctcXVlcnktdGVzdC1wc3Ry aW5nICJQYXNzIiA6Zm9yZWdyb3VuZCAiZ3JlZW4iKSAiICAiKQoJCQkJKHByaW4xIChjZHIgaW5k LXJlcykgYnVmZmVyKSkKCQkJICAgICAgICh0CgkJCQkoaW5zZXJ0ICh0YWctcXVlcnktdGVzdC1w c3RyaW5nICJQYXNzIiA6Zm9yZWdyb3VuZCAiZ3JlZW4iKSAiICAiKQoJCQkJKHByaW4xIChjZHIg aW5kLXJlcykgYnVmZmVyKQoJCQkJKGluc2VydCAodGFnLXF1ZXJ5LXRlc3QtcHN0cmluZyAiICA9 PiAgIiA6Zm9yZWdyb3VuZCAiZ3JlZW4iKSkKCQkJCShwcmluYyAoY2FyIGluZC1yZXMpIGJ1ZmZl cikpKQoJCQkgICAgICAoaW5zZXJ0ICJcbiIpKQoJCQkgICAgICgoc3ltYm9scCBpbmQtcmVzKQoJ CQkgICAgICAoaW5zZXJ0ICh0YWctcXVlcnktdGVzdC1wc3RyaW5nIChzeW1ib2wtbmFtZSBpbmQt cmVzKQoJCQkJCQkJICAgICAgOmZvcmVncm91bmQgImJsdWUiKSAiXG4iKSkpKQoJCQkoaWYgKGF0 b20gcmVzdWx0KQoJCQkgICAgKHByaW5jIHJlc3VsdCBidWZmZXIpCgkJCSAgKGluc2VydAoJCQkg ICAoaWYgKGNkciByZXN1bHQpCgkJCSAgICAgICAodGFnLXF1ZXJ5LXRlc3QtcHN0cmluZyAiQWxs IFBhc3NlZCIgOmZvcmVncm91bmQgImdyZWVuIikKCQkJICAgICAodGFnLXF1ZXJ5LXRlc3QtcHN0 cmluZyAgICJGYWlsdXJlcyAgIiA6Zm9yZWdyb3VuZCAicmVkIikpCgkJCSAgICIgICIKCQkJICAg KHRhZy1xdWVyeS10ZXN0LXBzdHJpbmcgKHN5bWJvbC1uYW1lIChjYXIgcmVzdWx0KSkKCQkJCQkJ ICAgOmZvcmVncm91bmQgImJsdWUiKQoJCQkgICAiXG4iKSkpKSkpKQogICAgKHdpdGgtY3VycmVu dC1idWZmZXIgYnVmZmVyCiAgICAgIChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkgbmlsKQogICAgICAo ZXJhc2UtYnVmZmVyKQogICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAoaW5zZXJ0 CiAgICAgICAodGFnLXF1ZXJ5LXRlc3QtcHN0cmluZwogICAgICAgICJUYWcgUXVlcnkgUGFyc2Vy IFRlc3QgUmVzdWx0cyIKICAgICAgICA6Zm9yZWdyb3VuZCAibWlkbmlnaHQgYmx1ZSIgOndlaWdo dCBib2xkIDpoZWlnaHQgMS40NCkKICAgICAgICJcbiIpCiAgICAgIChpZiBnaXZlLWRldGFpbHMK ICAgICAgICAgIChpbnNlcnQgIlxuIikKICAgICAgICAoaW5zZXJ0ICh0YWctcXVlcnktdGVzdC1w c3RyaW5nCiAgICAgICAgICAgICAgICAgICAgIkdpdmUgcHJlZml4IGFyZ3VtZW50IHRvIE0teCBy dW4tdGFnLXF1ZXJ5LXRlc3RzIGZvciBkZXRhaWxlZCByZXN1bHRzLiIKICAgICAgICAgICAgICAg ICAgOmZvcmVncm91bmQgIm1pZG5pZ2h0IGJsdWUiKQogICAgICAgICAgICAgICAgIlxuXG4iKSkK ICAgICAgKGluc2VydAogICAgICAgKHRhZy1xdWVyeS10ZXN0LXBzdHJpbmcKICAgICAgICAiVGVz dCByZXN1bHRzIGJ5IHN1aXRlIiA6dW5kZXJsaW5lICJtaWRuaWdodCBibHVlIiA6d2VpZ2h0IGJv bGQpCiAgICAgICAiXG4iKQogICAgICAoZnVuY2FsbCBkaXNwbGF5ICh0YWctdGVzdC1ydW4gZGV0 YWlsKSkKICAgICAgKGluc2VydAogICAgICAgIlxuIgogICAgICAgKHRhZy1xdWVyeS10ZXN0LXBz dHJpbmcKICAgICAgICAgICAiTWFwcGluZyBUZXN0cyBvbiBhbiBPcmcgRmlsZSIgOnVuZGVybGlu ZSAibWlkbmlnaHQgYmx1ZSIgOndlaWdodCBib2xkKSA7IGN1cnJlbnRseSBvbmx5IG9uZSBzdWl0 ZQogICAgICAgIlxuIikKICAgICAgKGZ1bmNhbGwgZGlzcGxheSAodGFnLXRlc3Qtb3RoZXItdGVz dHMgZGV0YWlsKSkKICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICAgKHZpZXctbW9k ZSAxKSkKICAgIChwb3AtdG8tYnVmZmVyIGJ1ZmZlcikpKQoKCjs7OyBBIHNvbWV3aGF0IG1lc3N5 IHRlc3QgZnJhbWV3b3JrCgo7OyBDb21wYXJpbmcgb3JnLXRhZy1xdWVyeS1wYXJzZXIgYW5kIG9y Zy1tYWtlLXRhZy1tYXRjaGVyIGlzCjs7IGNvbXBsaWNhdGVkIGJ5IHRoZSBkaWZmZXJlbnQgb3Jk ZXJpbmcgb2YgbGVhdmVzIGluIHRoZSB0cmVlcy4KOzsgU3BlY2lmaWNhbGx5LCB0aGUgZm9ybWVy IHB1dHMgdGhlIHRlcm1zIGluIHRoZSBnaXZlbiBvcmRlciwKOzsgYnV0IHRoZSBsYXR0ZXIgKHRo ZSBleGlzdGluZyBvcmcgY29kZSkgcmV2ZXJzZXMgdGhlIHRlcm1zLgo7OyBQYXJzaW5nIHRoZSBz dHJpbmcgdG8gcmV2ZXJzZSB3b3VsZCByZXF1aXJlIHRlc3RpbmcgdGhlIHNlY29uZGFyeQo7OyBw YXJzZXIgYW5kIHR1cnRsZXMgYWxsIHRoZSB3YXkgZG93bi4KOzsKOzsgVHdvIGFwcHJvYWNoZXMg dGhlbjogc3BlY2lmeSB0aGUgc3RyaW5ncyBtYW51YWxseSBpbiBwYWlycywgb3IKOzsgZGVmaW5l IHRyYW5zZm9ybSB0aGF0IGFjY291bnRzIGZvciB0aGUgZGlmZmVyZW5jZXMuIEhlcmUKOzsgYHRh Zy10ZXN0LXN1aXRlJyBtb3N0bHkgdGFrZXMgdGhlIGZvcm1lciBhcHByb2FjaCwgdW5sZXNzIG9u bHkgb25lCjs7IHN0cmluZyBpcyBnaXZlbiBpbiB3aGljaCBjYXNlIGl0IHVzZXMgYHRhZy10ZXN0 LXRyYW5zZm9ybScgdG8gcmVtYXAKOzsgdGhlIG9yaWdpbmFsIGZvcm1zLiBUaGUgZnVuY3Rpb24g YHRhZy10ZXN0LXRyYW5zZm9ybScgdGFuc2Zvcm1zIHRoZQo7OyBleGlzdGluZyBmb3JtcyBpbnRv IG5ldyBmb3JtcyBleGNlcHQgaXQgaWdub3JlcyBQUklPUklUWSBhbmQgSEVBRElORwo7OyBxdWVy aWVzIHdoaWNoIGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5IGluIHRoZSBuZXcgY29kZS4KCihldmFs LXdoZW4tY29tcGlsZQogIChkZWZ1biB0YWctdGVzdC1yZWFkLWJhbGFuY2VkLXN0cmluZyAob3Bl bi1kZWxpbSBjbG9zZS1kZWxpbSkKICAgICJSZXR1cm4gc3RyaW5nIGRlbGltaXRlZCBieSBPUEVO LURFTElNIGFuZCBDTE9TRS1ERUxJTSB3aXRoIGVzY2FwZXMuCk9QRU4tREVMSU0gYW5kIENMT1NF LURFTElNIG11c3QgYmUgKmRpc3RpbmN0KiBjaGFyYWN0ZXJzLiBSZWFkaW5nCmJlZ2lucyBhdCBw b2ludCBpbiB0aGUgY3VycmVudCBidWZmZXIuIFRvIGluY2x1ZGUgT1BFTi1ERUxJTSBhbmQKQ0xP U0UtREVMSU0gaW5zaWRlIHRoZSBzdHJpbmcgYmVpbmcgcmVhZCwgdGhvc2UgY2hhcmFjdGVycyBt dXN0CmJlICpkb3VibGVkKiBhbmQgb25seSBvbmUgY29weSBvZiB0aGUgY2hhcmFjdGVyIGlzIGtl cHQgaW4gdGhlCnN0cmluZy4gVGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGVsaW1pdGVycyBmb3Ig dGhlIHJlYWQgc2VxdWVuY2UKbXVzdCBiZSBzaW5nbGUgY29waWVzLCBhbmQgYW4gdW5lc2NhcGVk IE9QRU4tREVMSU0gd2lsbCByYWlzZSBhbgplcnJvci4iCiAgICAod2hlbiAoY2hhci1lcXVhbCBv cGVuLWRlbGltIGNsb3NlLWRlbGltKQogICAgICAoZXJyb3IgIk9wZW4gYW5kIGNsb3NlIGRlbGlt aXRlcnMgbXVzdCBiZSBkaXN0aW5jdCwgJWMiIG9wZW4tZGVsaW0pKQogICAgKHVubGVzcyAoY2hh ci1lcXVhbCAoY2hhci1hZnRlcikgb3Blbi1kZWxpbSkKICAgICAgKGVycm9yICJNaXNzaW5nIG9w ZW5pbmcgJWMgaW4gZGVsaW1pdGVkIHN0cmluZyIgb3Blbi1kZWxpbSkpCiAgICAoZm9yd2FyZC1j aGFyIDEpICAgICAgICAgICAgICAgICAgICA7IHNraXAgaW5pdGlhbCBkZWxpbWl0ZXIKICAgIChs ZXQgKChkZWxpbS1yZSAoZm9ybWF0ICJbJWMlY10iIG9wZW4tZGVsaW0gY2xvc2UtZGVsaW0pKQog ICAgICAgICAgKGRlbGltcy11bmJhbGFuY2VkIHQpCiAgICAgICAgICAoYmVnaW4gKHBvaW50KSkK ICAgICAgICAgIChmcmFnbWVudHMgbmlsKQogICAgICAgICAgKGNoIG5pbCkpCiAgICAgICh3aGls ZSAoYW5kIGRlbGltcy11bmJhbGFuY2VkIChyZS1zZWFyY2gtZm9yd2FyZCBkZWxpbS1yZSBuaWwg dCkpCiAgICAgICAgKHNldHEgY2ggKGNoYXItYmVmb3JlKSkKICAgICAgICAoY29uZAogICAgICAg ICAoKGNoYXItZXF1YWwgY2ggb3Blbi1kZWxpbSkKICAgICAgICAgIChzZXRxIGNoIChjaGFyLWFm dGVyKSkKICAgICAgICAgIChpZiAobm90IChhbmQgY2ggKGNoYXItZXF1YWwgY2ggb3Blbi1kZWxp bSkpKQogICAgICAgICAgICAgIChlcnJvciAiVW5lc2NhcGVkIG9wZW4gZGVsaW1pdGVyICVjIGlu IGJhbGFuY2VkIHN0cmluZyIgb3Blbi1kZWxpbSkKICAgICAgICAgICAgKHB1c2ggKGJ1ZmZlci1z dWJzdHJpbmctbm8tcHJvcGVydGllcyBiZWdpbiAoMS0gKHBvaW50KSkpIGZyYWdtZW50cykKICAg ICAgICAgICAgKHNldHEgYmVnaW4gKHBvaW50KSkKICAgICAgICAgICAgKGZvcndhcmQtY2hhciAx KSkpCiAgICAgICAgICgoY2hhci1lcXVhbCBjaCBjbG9zZS1kZWxpbSkKICAgICAgICAgIChzZXRx IGNoIChjaGFyLWFmdGVyKSkKICAgICAgICAgIChpZiAobm90IChhbmQgY2ggKGNoYXItZXF1YWwg Y2ggY2xvc2UtZGVsaW0pKSkKICAgICAgICAgICAgICAoc2V0cSBkZWxpbXMtdW5iYWxhbmNlZCBu aWwpCiAgICAgICAgICAgIChwdXNoIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgYmVn aW4gKDEtIChwb2ludCkpKSBmcmFnbWVudHMpCiAgICAgICAgICAgIChzZXRxIGJlZ2luIChwb2lu dCkpCiAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgMSkpKSkpCiAgICAgICh3aGVuIGRlbGltcy11 bmJhbGFuY2VkCiAgICAgICAgKGVycm9yICJVbmJhbGFuY2VkIGRlbGltaXRlcnMgJWMlYyBpbiBi YWxhbmNlZCBzdHJpbmcgYXQgY2hhciAlZC4iCiAgICAgICAgICAgICAgIG9wZW4tZGVsaW0gY2xv c2UtZGVsaW0gKHBvaW50KSkpCiAgICAgIChwdXNoIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3Bl cnRpZXMgYmVnaW4gKDEtIChwb2ludCkpKSBmcmFnbWVudHMpCiAgICAgIChpZiAobnVsbCAoY2Ry IGZyYWdtZW50cykpCiAgICAgICAgICAoY2FyIGZyYWdtZW50cykKICAgICAgICAoYXBwbHkgJ2Nv bmNhdCAobnJldmVyc2UgZnJhZ21lbnRzKSkpKSkKCiAgKGRlZnVuIHRhZy10ZXN0LWZpbmQtdG9k by1xdWVyeSAocXVlcnktc3RyaW5nKQogICAgIkRvZXMgcXVlcnkgc3RyaW5nIGNvbnRhaW4gYSB0 b2RvIG1hdGNoIGV4cHJlc3Npb24gYXQgdGhlIGVuZD8gClNlYXJjaCBmb3IgdGhlIGZpcnN0IC8g dGhhdCBpcyBub3QgYmV0d2VlbiBxdW90ZXMgb3IgYnJhY2VzLCBhbmQKcmV0dXJuIHRoZSBpbmRl eCBvZiB0aGF0IGNoYXJhY3RlciBpZiBmb3VuZCwgb3IgbmlsLgpTZXQgbWF0Y2ggZGF0YSBmb3Ig UVVFUlktU1RSSU5HIHNvIHRoYXQgZ3JvdXAgMCBzcGFucyBmcm9tIHRoZQpmb3VuZCAvIHRvIHRo ZSBlbmQgb2YgdGhlIHN0cmluZywgZ3JvdXAgMSBtYXRjaGVzIFwiLyE/XFxzLSpcIiBhdAp0aGUg Zm91bmQgLywgYW5kIGdyb3VwIDIgbWF0Y2hlcyB0aGUgISBpZiBwcmVzZW50LiIKICAgICh3aXRo LXRlbXAtYnVmZmVyCiAgICAgIChpbnNlcnQgcXVlcnktc3RyaW5nKQogICAgICAoZ290by1jaGFy IChwb2ludC1taW4pKQogICAgICA7OyBTZWFyY2ggZm9yIGZpcnN0IC8gdGhhdCBpcyBub3QgYmV0 d2VlbiAiIidzIG9yIHt9J3Mgb3IgKCkncwogICAgICAoY2F0Y2ggOmZvdW5kLXNsYXNoCiAgICAg ICAgKGxldCAoKHBhcmVuLWNvdW50IDApKQogICAgICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9y d2FyZCAiXFwoL1xcKCFcXCk/XFxzLSpcXClcXHxbXCJ7KCldIiBuaWwgdCkKICAgICAgICAgICAg KHdoZW4gKGFuZCAoemVyb3AgcGFyZW4tY291bnQpIChtYXRjaC1lbmQgMSkpCiAgICAgICAgICAg ICAgKHNldC1tYXRjaC1kYXRhICAKICAgICAgICAgICAgICAgKG1hcGNhciAnMS0gICAgICAgICA7 IHNldCBpbmRpY2VzIHVzaW5nIHN0cmluZyBjb252ZW50aW9uCiAgICAgICAgICAgICAgICAgICAg ICAgKG5jb25jIChsaXN0IChtYXRjaC1iZWdpbm5pbmcgMCkgKHBvaW50LW1heCkgOzAgLyB0byBl bmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoLWJlZ2lubmluZyAx KSAobWF0Y2gtZW5kIDEpKSA7MSAvIT9cXHMtKgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoaWYgKG1hdGNoLWVuZCAyKSA7MiAhPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxpc3QgKG1hdGNoLWJlZ2lubmluZyAyKSAobWF0Y2gtZW5kIDIpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5pbCkpKSkKICAgICAgICAgICAgICAodGhyb3cgOmZvdW5kLXNs YXNoICgxLSAobWF0Y2gtYmVnaW5uaW5nIDEpKSkpCiAgICAgICAgICAgIChnb3RvLWNoYXIgKG1h dGNoLWJlZ2lubmluZyAwKSkKICAgICAgICAgICAgKGNhc2UgKGNoYXItYWZ0ZXIpCiAgICAgICAg ICAgICAgKD9cKCAoc2V0cSBwYXJlbi1jb3VudCAoMSsgcGFyZW4tY291bnQpKSAoZm9yd2FyZC1j aGFyKSkKICAgICAgICAgICAgICAoP1wpIChzZXRxIHBhcmVuLWNvdW50ICgxLSBwYXJlbi1jb3Vu dCkpIChmb3J3YXJkLWNoYXIpKQogICAgICAgICAgICAgICg/XCIgKHJlYWQgKGN1cnJlbnQtYnVm ZmVyKSkpCiAgICAgICAgICAgICAgKD9ceyAodGFnLXRlc3QtcmVhZC1iYWxhbmNlZC1zdHJpbmcg P1x7ID9cfSkpCiAgICAgICAgICAgICAgKD8vICAoZm9yd2FyZC1jaGFyKSkpKSkKICAgICAgICBu aWwpKSkpCgooZGVmdW4gdGFnLXRlc3QtdHJhbnNmb3JtIChtYXRjaGVyKQogIChsZXQgKChzcGVj CiAgICAgICAgIChpZiAoYW5kIChlcSAoY2FkciBtYXRjaGVyKSAnYW5kKQogICAgICAgICAgICAg ICAgICAoZXEgKGNhciAobGFzdCBtYXRjaGVyKSkgdCkpCiAgICAgICAgICAgICAoY29ucyAoY2Fy IG1hdGNoZXIpIChjYXIgKGNkZHIgbWF0Y2hlcikpKQogICAgICAgICAgIG1hdGNoZXIpKSkKICAg IChpZiAobGlzdHAgKGNkciBzcGVjKSkKICAgICAgICAobWFwY2FyICd0YWctdGVzdC10cmFuc2Zv cm0tMSBzcGVjKQogICAgICBzcGVjKSkpCgooZGVmdW4gdGFnLXRlc3QtdHJhbnNmb3JtLTEgKHNw ZWMpCiAgKGlmIChhdG9tIHNwZWMpCiAgICAgIHNwZWMKICAgIChjYXNlIChjYXIgc3BlYykKICAg ICAgKGFuZAogICAgICAgKGNvbnMgJ2FuZCAobnJldmVyc2UgKG1hcGNhciAndGFnLXRlc3QtdHJh bnNmb3JtLTEgKGNkciBzcGVjKSkpKSkKICAgICAgKG9yCiAgICAgICAoaWYgKGFuZCAobnVsbCAo bnRoY2RyIDMgc3BlYykpCiAgICAgICAgICAgICAgICAoZXF1YWwgKGNhciAoY2RkciBzcGVjKSkg IiIpKQogICAgICAgICAgIHNwZWMKICAgICAgICAgKGNvbnMgJ29yIChucmV2ZXJzZSAobWFwY2Fy ICd0YWctdGVzdC10cmFuc2Zvcm0tMSAoY2RyIHNwZWMpKSkpKSkKICAgICAgKG5vdAogICAgICAg KGlmIChlcSAoY2FyIChjYWRyIHNwZWMpKSAnc3RyaW5nLW1hdGNoKQogICAgICAgICAgIChsaXN0 ICdvcmctc3RyaW5nLW1hdGNoPD4KICAgICAgICAgICAgICAgICAoY2FyIChjZGRyIChjYWRyIHNw ZWMpKSkKICAgICAgICAgICAgICAgICAoY2FkciAoY2FkciBzcGVjKSkpCiAgICAgICAgIHNwZWMp KQogICAgICAoc3RyaW5nLW1hdGNoCiAgICAgICAobGlzdCAnb3JnLXN0cmluZy1tYXRjaD0gKGNh ciAoY2RkciBzcGVjKSkgKGNhZHIgc3BlYykpKQogICAgICAodAogICAgICAgKGNvbnMgKHRhZy10 ZXN0LXRyYW5zZm9ybS0xIChjYXIgc3BlYykpCiAgICAgICAgICAgICAobWFwY2FyICd0YWctdGVz dC10cmFuc2Zvcm0tMSAoY2RyIHNwZWMpKSkpKSkpCgooZGVmdW4gdGFnLXRlc3QtbSAocXVlcnkg Jm9wdGlvbmFsIG9yaWdpbmFscCkKICAiQ2FsbCBgb3JnLW1ha2UtdGFncy1tYXRjaGVyJyBvbiBR VUVSWS4gCk5ldyB2ZXJzaW9uIGJ5IGRlZmF1bHQsIG9yaWdpbmFsIHZlcnNpb24gaWYgT1JJR0lO QUxQIGlzIG5vbi1uaWwuIgogIChsZXQgKCh0b2RvLW9ubHkgbmlsKSkKICAgIChmdW5jYWxsCiAg ICAgKGlmIG9yaWdpbmFscAogICAgICAgICAnb3JnLW1ha2UtdGFncy1tYXRjaGVyLU9SSUdJTkFM CiAgICAgICAnb3JnLW1ha2UtdGFncy1tYXRjaGVyLU5FVykKICAgICBxdWVyeSkpKQoKKGRlZnVu IHRhZy10ZXN0LXBhcnNlLXRyZWUgKHF1ZXJ5KQogICJSZXR1cm4gKGp1c3QpIHRoZSBwYXJzZSB0 cmVlIGZvciBxdWVyeSBwcm9kdWNlZCBieSBgb3JnLXRhZy1xdWVyeS1wYXJzZXInIgogIChjYXIg KG50aGNkciAyIChvcmctdGFnLXF1ZXJ5LXBhcnNlIHF1ZXJ5KSkpKQo7OyB1c2VmdWwgYXQgcmVw bDogKGRlZnVuIHRxIChxdWVyeSkgKGNvbnMgcXVlcnkgKHRhZy10ZXN0LXBhcnNlLXRyZWUgcXVl cnkpKSkKCgooZGVmdW4gdGFnLXRlc3QtY29tcGFyZSAobmV3IG9yaWdpbmFsKQogIChpZiAoYW5k IChvciAoZXEgKGNkciBuZXcpIHQpIChlcSAoY2FkciBuZXcpICdwcm9nbikpCiAgICAgICAgICAg KGVxIChjYWRyIG9yaWdpbmFsKSAnYW5kKQogICAgICAgICAgIChlcSAoY2FyIChsYXN0IG9yaWdp bmFsKSkgdCkpCiAgICAgIChlcXVhbCBgKGFuZCAsKGNkciBuZXcpIHQpIChjZHIgb3JpZ2luYWwp KQogICAgKGVxdWFsIChjZHIgbmV3KSAoY2RyIG9yaWdpbmFsKSkpKQo7OyBmb3JtZXJseSByZXR1 cm5lZCAoYW5kIF9fIChmb3JtYXQgIiVzPD09PiVzIiAoY2FyIG5ldykgKGNhciBvcmlnaW5hbCkp KQoKKGRlZnZhciB0YWctdGVzdC1zdWl0ZS10YWJsZSAobWFrZS1oYXNoLXRhYmxlKQogICJNYXBw aW5nIGZyb20gdGVzdCBuYW1lIHN5bWJvbHMgdG8gdGFnIHRlc3QgZnVuY3Rpb25zLiBFYWNoCmZ1 bmN0aW9uIHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCB3aGljaCBpZiBub24tbmlsLCBjYXVz ZXMgYQpzaW1wbGUgYm9vbGVhbiBzdW1tYXJ5IHRvIGJlIHJldHVybmVkLiBPdGhlcndpc2UsIHRo ZSBmdW5jdGlvbgpyZXR1cm5zIHRoZSBsaXN0IG9mIHJlc3VsdHMgZm9ybXMuIENhbGwgd2l0aCBg dGFnLXRlc3QtcnVuJwpnaXZpbmcgbmFtZSBhbmQgb3B0aW9uYWwgc3VtbWFyaXplIGFyZ3VtZW50 LiIpCgooZGVmbWFjcm8gdGFnLXRlc3Qtc3VpdGUgKG5hbWUgJnJlc3QgYm9keSkKICAiUmVnaXN0 ZXIgdGVzdCBOQU1FLiBJZiBOQU1FIGlzIG5pbCwgZG8gbm90IHNhdmUgdGhlIHRlc3QsIHJ1biBp dApub3cgd2l0aCBzdW1tYXJpemUgYXJndW1lbnQgdC4iCiAgKGRlY2xhcmUgKGluZGVudCAxKSkK ICAoZmxldCAoKHRlc3QtaXQgKHNwZWMpCiAgICAgICAgICAgICAgICAgIChsZXQgKChxdWVyeSAo Y2FyIHNwZWMpKQogICAgICAgICAgICAgICAgICAgICAgICAob2JqICAgKGNkciBzcGVjKSkpCiAg ICAgICAgICAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICAgICAgICAgKChudWxsIG9iaikK ICAgICAgICAgICAgICAgICAgICAgIGAobGV0ICgodG9kby1vbmx5IG5pbCkpIDsgbmVlZHMgdG8g YmUgc2NvcGVkIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgZXhj ZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGVxdWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Jn LW1ha2UtdGFncy1tYXRjaGVyLU5FVyAscXVlcnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodGFnLXRlc3QtdHJhbnNmb3JtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KG9yZy1tYWtlLXRhZ3MtbWF0Y2hlci1PUklHSU5BTCAscXVlcnkpKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLHF1ZXJ5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3Ig KGNvbnMgbmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0 ICJFUlJPUiBvbiBxdWVyeSAlczogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICxxdWVyeSAoY2FkciBleGNlcHRpb24pKSkpKSkpCiAgICAgICAgICAg ICAgICAgICAgICgoc3RyaW5ncCBvYmopCiAgICAgICAgICAgICAgICAgICAgICBgKGxldCAoKHRv ZG8tb25seSBuaWwpKSA7IG5lZWRzIHRvIGJlIHNjb3BlZCBpbgogICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbmRpdGlvbi1jYXNlIGV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YWctdGVzdC1jb21wYXJl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3JnLW1ha2UtdGFncy1tYXRjaGVyLU5F VyAscXVlcnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3JnLW1ha2UtdGFncy1t YXRjaGVyLU9SSUdJTkFMICxvYmopKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAscXVl cnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciAoY29ucyBuaWwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIkVSUk9SIG9uIHF1ZXJ5ICVz OiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHF1 ZXJ5IChjYWRyIGV4Y2VwdGlvbikpKSkpKSkKICAgICAgICAgICAgICAgICAgICAgKChlcSBvYmog J2Vycm9yKQogICAgICAgICAgICAgICAgICAgICAgYChjb25kaXRpb24tY2FzZSBleGNlcHRpb24K ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKHRvZG8tb25seSBuaWwpKSA7IG5lZWRz IHRvIGJlIHNjb3BlZCBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmctbWFrZS10 YWdzLW1hdGNoZXItTkVXICxxdWVyeSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u cyBuaWwgLHF1ZXJ5KSkKICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciAoY29ucyAoY2Fk ciBleGNlcHRpb24pICxxdWVyeSkpKSkKICAgICAgICAgICAgICAgICAgICAgKChlcSBvYmogdCkK ICAgICAgICAgICAgICAgICAgICAgIGAoY29uZGl0aW9uLWNhc2UgZXhjZXB0aW9uCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1 YWwgKHRhZy10ZXN0LW0gLHF1ZXJ5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICcoLHF1ZXJ5IC4gdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAscXVlcnkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAoZXJyb3IgKGNvbnMgbmlsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJFUlJPUiBvbiBxdWVyeSAlczogJXMiCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxxdWVyeSAoY2FkciBl eGNlcHRpb24pKSkpKSkKICAgICAgICAgICAgICAgICAgICAgKChhbmQgKGNvbnNwIG9iaikKICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHRhZy10ZXN0LWZpbmQtdG9kby1xdWVyeSBxdWVyeSkp CiAgICAgICAgICAgICAgICAgICAgICBgKGNvbmRpdGlvbi1jYXNlIGV4Y2VwdGlvbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVx dWFsICh0YWctdGVzdC1tICxxdWVyeSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnLChjb25zIHF1ZXJ5IChjYXIgb2JqKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAs cXVlcnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IgKGNvbnMgbmlsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJFUlJPUiBvbiBxdWVyeSAl czogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxx dWVyeSAoY2FkciBleGNlcHRpb24pKSkpKSkKICAgICAgICAgICAgICAgICAgICAgKChjb25zcCBv YmopCiAgICAgICAgICAgICAgICAgICAgICBgKGNvbmRpdGlvbi1jYXNlIGV4Y2VwdGlvbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAoY29ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAg KGVxdWFsICh0YWctdGVzdC1tICxxdWVyeSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnKCxxdWVyeSBwcm9nbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzZXRxIG9yZy1jYWNoZWQtcHJvcHMgbmlsKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICwoY2FyIG9iaikpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgLHF1ZXJ5KQogICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yIChjb25zIG5pbAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiRVJST1Igb24g cXVlcnkgJXM6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAscXVlcnkgKGNhZHIgZXhjZXB0aW9uKSkpKSkpCiAgICAgICAgICAgICAgICAgICAgICh0 IChlcnJvciAiVW5yZWNvZ25pemVkIHRlc3QgdHlwZSIpKSkpKSkKICAgIChsZXQqICgocmVzdWx0 LWZvcm1zIChtYXBjYXIgJ3Rlc3QtaXQgYm9keSkpCiAgICAgICAgICAgKHRlc3QgYChsYW1iZGEg KCZvcHRpb25hbCBzdW1tYXJpemU/KQogICAgICAgICAgICAgICAgICAgIChsZXQgKCh0ZXN0cyAo bGlzdCAsQHJlc3VsdC1mb3JtcykpKQogICAgICAgICAgICAgICAgICAgICAgKGlmIHN1bW1hcml6 ZT8KICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgob3V0Y29tZSAoY2F0Y2ggOmZhaWx1 cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2xpc3QgKHJl c3VsdCB0ZXN0cyB0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAodW5sZXNzIChjYXIgcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh0aHJvdyA6ZmFpbHVyZSBuaWwpKSkpKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpZiBvdXRjb21lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1l c3NhZ2UgIkFsbCAlcyB0ZXN0cyBwYXNzZWQuIiAnLG5hbWUpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChtZXNzYWdlICJTb21lICVzIHRlc3RzIGZhaWxlZC4iICcsbmFtZSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvdXRjb21lKQogICAgICAgICAgICAgICAgICAgICAgICAo bGlzdCAsQHJlc3VsdC1mb3JtcykpKSkpKQogICAgICAoaWYgbmFtZQogICAgICAgICAgYChwcm9n biAocHV0aGFzaCAnLG5hbWUgLHRlc3QgdGFnLXRlc3Qtc3VpdGUtdGFibGUpIHQpCiAgICAgICAg YChmdW5jYWxsICx0ZXN0IHQpKSkpKQoKKGRlZnVuIHRhZy10ZXN0LXJ1biAoc3VtbWFyaXplPyAm cmVzdCBzdWl0ZS1zeW1ib2xzKQogIChsZXQgKChzdW1tYXJpemUgKGFuZCBzdW1tYXJpemU/CiAg ICAgICAgICAgICAgICAgICAgICAgIChub3QgKG1lbXEgc3VtbWFyaXplPyAnKDpzaG93IDpyZXN1 bHRzIDpyZXN1bHQpKSkpKQogICAgICAgIChyZXN1bHRzIG5pbCkKICAgICAgICAoc3VpdGVzIChp ZiBzdWl0ZS1zeW1ib2xzCiAgICAgICAgICAgICAgICAgICAgc3VpdGUtc3ltYm9scwogICAgICAg ICAgICAgICAgICAobG9vcCBmb3Iga2V5IGJlaW5nIHRoZSBoYXNoLWtleXMgb2YgdGFnLXRlc3Qt c3VpdGUtdGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdCBrZXkpKSkpCiAgICAo ZG9saXN0IChzdWl0ZSBzdWl0ZXMpCiAgICAgIChjb25kaXRpb24tY2FzZSBleGNlcHQKICAgICAg ICAgIChsZXQgKCh0ZXN0IChnZXRoYXNoIHN1aXRlIHRhZy10ZXN0LXN1aXRlLXRhYmxlKSkpCiAg ICAgICAgICAgIChpZiAoYW5kIHRlc3QgKGZ1bmN0aW9ucCB0ZXN0KSkKICAgICAgICAgICAgICAg IChwdXNoIChjb25zIHN1aXRlIChmdW5jYWxsIHRlc3Qgc3VtbWFyaXplKSkgcmVzdWx0cykKICAg ICAgICAgICAgICAocHVzaCAoY29ucyBzdWl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zIG5pbCAoZm9ybWF0ICJUZXN0IHN1aXRlICVzIG5vdCBmb3VuZCIgc3VpdGUpKSkKICAgICAg ICAgICAgICAgICAgICByZXN1bHRzKSkpCiAgICAgICAgKGVycm9yIChwdXNoIChmb3JtYXQgIlVu Y2F1Z2h0IGVycm9yIG9uIHN1aXRlICVzOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdWl0ZSBleGNlcHQpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMpKSkpCiAgICAoaWYg KGNkciByZXN1bHRzKSAobnJldmVyc2UgcmVzdWx0cykgKGNhciByZXN1bHRzKSkpKQoKCjs7OyBU aGUgVGVzdCBTdWl0ZXMKCih0YWctdGVzdC1zdWl0ZSBzaW1wbGUtdGFnLW1hdGNoZXJzLTEKICAo IiIpCiAgKCJmb28iKQogICgiLWZvbyIpCiAgKCJmb28rYmFyIikKICAoImZvby1iYXIiKQogICgi LWZvbytiYXIiKQogICgiLWZvby1iYXIiKQogICgie15IVStSUkFZfSIpCiAgKCIte15CTypPIX0i KQogICgiZm9vK2Jhcit6YXAiKQogICgiZm9vLWJhcit6YXAiKQogICgiLWZvbytiYXItemFwIikK ICAoImZvb3xiYXJ8LXphcCIpCiAgKCItZm9vK2Jhcit6YXAte15hLip9IikKICAoIi17XmFiY30r e15hfSIpCiAgKCJ7XkF9fHteLkJ9fHteQ30iKQogICgie15BfXxvay16YXB8e15DfSIpKQoKKHRh Zy10ZXN0LXN1aXRlIGxldmVsLWNvbXBhcmlzb25zCiAgKCJMRVZFTDwzIikKICAoIkxFVkVMPjMi KQogICgiTEVWRUw8PTMiKQogICgiTEVWRUw+PTMiKQogICgiTEVWRUw9MyIpCiAgKCJMRVZFTDw+ MyIpCiAgKCJMRVZFTD40fExFVkVMPDMiKQogICgiemFwK0xFVkVMPTMiKQogICgiemFwK0xFVkVM PjItYmFyIikKICAoIi17WzAtOV19fHphcDlAIyVpdHxMRVZFTD41IikKICAoInh5eiZMRVZFTDw+ M3x7XmF9LWFiYyZMRVZFTDw+MyIpCiAgKCJ6YXAtYmFyK2ZvbyZMRVZFTD4yIikpCgoodGFnLXRl c3Qtc3VpdGUgcHJvcGVydHktc3RyaW5nLWNvbXBhcmlzb25zCiAgKCJBX1BST1A8XCJmb29cIiIp CiAgKCJBX1BST1A+XCJmb29cIiIpCiAgKCJBX1BST1A8PVwiZm9vXCIiKQogICgiQV9QUk9QPj1c ImZvb1wiIikKICAoIkFfUFJPUDw+XCJmb29cIiIpCiAgKCJBX1BST1A9XCJmb29cIiIpCiAgKCJB X1BST1A8PnteZi4qb30iKQogICgiQV9QUk9QPXteZi4qb30iKQogICgiZm9vK1BST1A9XCJBXCIr Wj17YWJjfS1iYXIiKSkKCih0YWctdGVzdC1zdWl0ZSBwcm9wZXJ0eS1kYXRlLWNvbXBhcmlzb25z CiAgKCJBX0RBVEU9XCI8MjAwOC0xMi0yNCAxODozMD5cIiIpCiAgKCJBX0RBVEU8XCI8MjAwOC0x Mi0yNCAxODozMD5cIiIpCiAgKCJBX0RBVEU8PVwiPDIwMDgtMTItMjQgMTg6MzA+XCIiKQogICgi QV9EQVRFPj1cIjwyMDA4LTEyLTI0IDE4OjMwPlwiIikKICAoIkFfREFURT5cIjwyMDA4LTEyLTI0 IDE4OjMwPlwiIikKICAoIkFfREFURTw+XCI8MjAwOC0xMi0yNCAxODozMD5cIiIpCiAgKCJERUFE TElORTw+XCI8LTJkPlwiIikKICAoIkRFQURMSU5FPVwiPCsxdz5cIiIpCiAgKCJERUFETElORT5c IjwrNjBtPlwiIikKICAoIkRFQURMSU5FPFwiPHRvZGF5PlwiIikKICAoIlNDSEVEVUxFRD49XCI8 dG9tb3Jyb3c+XCIiKQogICgiU0NIRURVTEVEPD1cIjwrMnk+XCIiKSkKCih0YWctdGVzdC1zdWl0 ZSBwcm9wZXJ0eS1udW1lcmljLWNvbXBhcmlzb25zCiAgKCJFZmZvcnQ8MyIpCiAgKCJFZmZvcnQ+ MyIpCiAgKCJFZmZvcnQ8PTMiKQogICgiRWZmb3J0Pj0zIikKICAoIkVmZm9ydD0zIikKICAoIkVm Zm9ydDw+MyIpCiAgKCJFZmZvcnQ+NHxFZmZvcnQ8MyIpCiAgKCJzdHJlbmd0aD4tMS4wJmVmZm9y dDw0JmZvbz4xLjdlMTAiKQogICgiQT40fEI8MTAiKQogICgiQT40LjAmQjwuNCZDPD4xZTUiKSkK Cih0YWctdGVzdC1zdWl0ZSB0b2RvLWNhdGVnb3J5LWNvbXBhcmlzb25zCiAgKCJUT0RPPVwiV0FJ VFwiIikKICAoIlRPRE88PlwiV0FJVFwiIikKICAoIlRPRE89e15XfSIpCiAgKCJUT0RPPD57Xld9 IikKICAoIkNBVEVHT1JZPVwiZm9vXCIiKQogICgiQ0FURUdPUlk8PlwiZm9vXCIiKQogICgiQ0FU RUdPUlk9e15mfSIpCiAgKCJDQVRFR09SWTw+e15mfSIpCiAgKCJ3b3JrK1RPRE89XCJXQUlUSU5H XCJ8aG9tZStUT0RPPVwiV0FJVElOR1wiIikKICAoIndvcmstVE9ETz1cIldBSVRJTkdcInxob21l JlRPRE89XCJXQUlUSU5HXCIiKSkKCih0YWctdGVzdC1zdWl0ZSBjb21iaW5lZC1tYXRjaGVycy0x CiAgKCItemFwK2JhcnxMRVZFTDw9MiZUT0RPPD5cIldBSVRcIiIpCiAgKCIrd29yay1ib3NzK1BS SU9SQz1cIkFcIitDb2ZmZWU9XCJ1bmxpbWl0ZWRcIitFZmZvcnQ8MitXaXRoPXtTYXJhaFxcfERl bm55fStTQ0hFRFVMRUQ+PVwiPDIwMDgtMTAtMTE+XCIiKQogICgiZm9vLXh5eiZYPjIuMHxZPDMu MCIpCiAgKCJmb28tYmFyfFNDSEVEVUxFRD1cIjwyMDEyLTA3LTAxPlwifFRPRE89XCJVUkdFTlRc IiIpCiAgKCJ4eXomTEVWRUw8PjN8e15hfS1hYmMmQV9QUk9QPD5cImZvb1wifEFfUFJPUD1cImZv b1wiIikKICAoIi1hfGEmTEVWRUw9NHxhJkFfUFJPUDw+e15mb299IikpCgo7OyBTb21lIG9mIHRo ZXNlIGFyZSB0aGUgc2FtZSBhcyBhYm92ZSwgYnV0IEkndmUgZXhwbGljaXRseSByZXZlcnNlZAo7 OyB0aGUgdGVybXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRyYW5zZm9ybWVyIGlzIG5vdCBtYXNr aW5nIGFueSBwcm9ibGVtcy4KOzsgVGhpcyBuZWNlc3NhcmlseSBleGNsdWRlcyB0aGUgb3RoZXIg dHJhbnNmb3JtYXRpb25zIHNvIGl0IGlzIHJlYWxseSBhIG1ldGEtdGVzdC4KOzsgVGhlIHJlc3Qg aW5jbHVkZSB0b2RvIG1hdGNoZXJzIGluIHRoZSBjb21wYXJpc29uLgoodGFnLXRlc3Qtc3VpdGUg Y2hlY2stbWF0Y2hlcnMKICAoImZvbytiYXIremFwIiAuICJ6YXArYmFyK2ZvbyIpCiAgKCJmb28t YmFyK3phcCIgLiAiemFwLWJhcitmb28iKQogICgiLWZvbytiYXItemFwIiAuICItemFwK2Jhci1m b28iKQogICgiZm9vfGJhcnwtemFwIiAuICItemFwfGJhcnxmb28iKQogICgiLWZvbytiYXIremFw LXteYS4qfSIgLiAiLXteYS4qfSt6YXArYmFyLWZvbyIpCiAgKCIte15hYmN9K3teYX0iIC4gInte YX0te15hYmN9IikKICAoIi17WzAtOV19fHphcDlAIyVpdHxMRVZFTD41IiAuICJMRVZFTD41fHph cDlAIyVpdHwte1swLTldfSIpCiAgKCJ7XkF9fHteLkJ9fHteQ30iIC4gInteQ318e14uQn18e15B fSIpCiAgKCJ7XkF9fG9rLXphcHx7XkN9IiAuICJ7XkN9fC16YXArb2t8e15BfSIpCiAgKCJ3b3Jr K1RPRE89XCJXQUlUSU5HXCJ8aG9tZStUT0RPPVwiV0FJVElOR1wiIiAuICJUT0RPPVwiV0FJVElO R1wiK2hvbWV8VE9ETz1cIldBSVRJTkdcIit3b3JrIikKICAoIndvcmstVE9ETz1cIldBSVRJTkdc Inxob21lJlRPRE89XCJXQUlUSU5HXCIiIC4gIlRPRE89XCJXQUlUSU5HXCImaG9tZXwtVE9ETz1c IldBSVRJTkdcIit3b3JrIikKICAoInphcCAtYmFyICAgK2ZvbyAmIExFVkVMID4gMiIgLiAiTEVW RUw+MiZmb28tYmFyK3phcCIpCiAgKCItemFwK2JhciB8IExFVkVMIDw9IDIgJiBUT0RPIDw+IFwi V0FJVFwiIiAuICJUT0RPPD5cIldBSVRcIiZMRVZFTDw9MnxiYXItemFwIikpCgoodGFnLXRlc3Qt c3VpdGUgdG9kby1tYXRjaGVycy0xCiAgKCJmb28rYmFyL1RPRE8rV0FJVC1ET05FIgogICAoYW5k CiAgICAocHJvZ24KICAgICAgKHNldHEgb3JnLWNhY2hlZC1wcm9wcyBuaWwpCiAgICAgIChhbmQK ICAgICAgIChtZW1iZXIgImZvbyIgdGFncy1saXN0KQogICAgICAgKG1lbWJlciAiYmFyIiB0YWdz LWxpc3QpKSkKICAgIChlcXVhbCB0b2RvICJUT0RPIikKICAgIChlcXVhbCB0b2RvICJXQUlUIikK ICAgIChub3QgKGVxdWFsIHRvZG8gIkRPTkUiKSkpKQogICgiZm9vK2Jhci9UT0RPK1dBSVR8VVJH RU5UIiAKICAgKGFuZAogICAgKHByb2duCiAgICAgIChzZXRxIG9yZy1jYWNoZWQtcHJvcHMgbmls KQogICAgICAoYW5kCiAgICAgICAobWVtYmVyICJmb28iIHRhZ3MtbGlzdCkKICAgICAgIChtZW1i ZXIgImJhciIgdGFncy1saXN0KSkpCiAgICAob3IKICAgICAoYW5kCiAgICAgIChlcXVhbCB0b2Rv ICJUT0RPIikKICAgICAgKGVxdWFsIHRvZG8gIldBSVQiKSkKICAgICAoZXF1YWwgdG9kbyAiVVJH RU5UIikpKSkKICAoIi9BIiAoYW5kIHQgKGVxdWFsIHRvZG8gIkEiKSkpCiAgKCIvQS17QUlUfSIg CiAgIChhbmQgdAogICAgICAgIChlcXVhbCB0b2RvICJBIikKICAgICAgICAob3JnLXN0cmluZy1t YXRjaDw+IChvciB0b2RvICIiKSAiQUlUIikpKQogICgiZm9vLWJhci9BK0J8Qy1EfHtXK30iIAog ICAoYW5kCiAgICAocHJvZ24KICAgICAgKHNldHEgb3JnLWNhY2hlZC1wcm9wcyBuaWwpCiAgICAg IChhbmQKICAgICAgIChtZW1iZXIgImZvbyIgdGFncy1saXN0KQogICAgICAgKG5vdCAobWVtYmVy ICJiYXIiIHRhZ3MtbGlzdCkpKSkKICAgIChvcgogICAgIChhbmQKICAgICAgKGVxdWFsIHRvZG8g IkEiKQogICAgICAoZXF1YWwgdG9kbyAiQiIpKQogICAgIChhbmQKICAgICAgKGVxdWFsIHRvZG8g IkMiKQogICAgICAobm90IChlcXVhbCB0b2RvICJEIikpKQogICAgIChvcmctc3RyaW5nLW1hdGNo PSAob3IgdG9kbyAiIikgIlcrIikpKSkKICAoIi1hYmMrdXZ3LXh5ei97XlR9K1dBSVQtRE9ORXxV UkdFTlR8e15JfS1JR05PUkUiIAogICAoYW5kCiAgICAocHJvZ24KICAgICAgKHNldHEgb3JnLWNh Y2hlZC1wcm9wcyBuaWwpCiAgICAgIChhbmQKICAgICAgIChub3QgKG1lbWJlciAiYWJjIiB0YWdz LWxpc3QpKQogICAgICAgKG1lbWJlciAidXZ3IiB0YWdzLWxpc3QpCiAgICAgICAobm90IChtZW1i ZXIgInh5eiIgdGFncy1saXN0KSkpKQogICAgKG9yCiAgICAgKGFuZAogICAgICAob3JnLXN0cmlu Zy1tYXRjaD0gKG9yIHRvZG8gIiIpICJeVCIpCiAgICAgIChlcXVhbCB0b2RvICJXQUlUIikKICAg ICAgKG5vdCAoZXF1YWwgdG9kbyAiRE9ORSIpKSkKICAgICAoZXF1YWwgdG9kbyAiVVJHRU5UIikK ICAgICAoYW5kCiAgICAgIChvcmctc3RyaW5nLW1hdGNoPSAob3IgdG9kbyAiIikgIl5JIikKICAg ICAgKG5vdCAoZXF1YWwgdG9kbyAiSUdOT1JFIikpKSkpKQogICgiLSgtYWJjK3V2dy14eXove15U fStXQUlULURPTkV8VVJHRU5UfHteSX0tSUdOT1JFKSIgCiAgIChub3QgKGFuZAogICAgICAgICAo YW5kCiAgICAgICAgICAobm90IChtZW1iZXIgImFiYyIgdGFncy1saXN0KSkKICAgICAgICAgICht ZW1iZXIgInV2dyIgdGFncy1saXN0KQogICAgICAgICAgKG5vdCAobWVtYmVyICJ4eXoiIHRhZ3Mt bGlzdCkpKQogICAgICAgICAob3IKICAgICAgICAgIChhbmQKICAgICAgICAgICAob3JnLXN0cmlu Zy1tYXRjaD0gKG9yIHRvZG8gIiIpICJeVCIpCiAgICAgICAgICAgKGVxdWFsIHRvZG8gIldBSVQi KQogICAgICAgICAgIChub3QgKGVxdWFsIHRvZG8gIkRPTkUiKSkpCiAgICAgICAgICAoZXF1YWwg dG9kbyAiVVJHRU5UIikKICAgICAgICAgIChhbmQKICAgICAgICAgICAob3JnLXN0cmluZy1tYXRj aD0gKG9yIHRvZG8gIiIpICJeSSIpCiAgICAgICAgICAgKG5vdCAoZXF1YWwgdG9kbyAiSUdOT1JF IikpKSkpKSkKICAoIi16YXArYmFyfExFVkVMPD0yJlRPRE88PlwiV0FJVFwiL09LLU5PVHxHT09E LUJBRHxIVVJSQVktQk9PIikpCgoodGFnLXRlc3Qtc3VpdGUgdG9kby1tYXRjaGVycy0yCiAgKCIt KC97XFxTLX0pfEhFQURJTkc9e1VwfSIKICAgKG9yCiAgICAobm90CiAgICAgKGFuZCB0CiAgICAg ICAgICAob3JnLXN0cmluZy1tYXRjaD0gKG9yIHRvZG8gIiIpICJcXFMtIikpKQogICAgKG9yZy1z dHJpbmctbWF0Y2g9IChvciBoZWFkaW5nICIiKSAiVXAiKSkpCiAgKCIve1xcUy19IiAoYW5kIHQg KG9yZy1zdHJpbmctbWF0Y2g9IChvciB0b2RvICIiKSAiXFxTLSIpKSkKICAoIi0oL1RPRE8pfChI RUFESU5HPXtVcH0vVE9ETykiCiAgIChvcgogICAgKG5vdCAoYW5kIHQgKGVxdWFsIHRvZG8gIlRP RE8iKSkpCiAgICAoYW5kCiAgICAgKG9yZy1zdHJpbmctbWF0Y2g9IChvciBoZWFkaW5nICIiKSAi VXAiKQogICAgIChlcXVhbCB0b2RvICJUT0RPIikpKSkKICAoIi0oZm9vK2Jhci16YXAvVE9ETytX QUlUKSIKICAgKG5vdCAoYW5kIChhbmQKICAgICAgICAgICAgICAobWVtYmVyICJmb28iIHRhZ3Mt bGlzdCkKICAgICAgICAgICAgICAobWVtYmVyICJiYXIiIHRhZ3MtbGlzdCkKICAgICAgICAgICAg ICAobm90IChtZW1iZXIgInphcCIgdGFncy1saXN0KSkpCiAgICAgICAgICAgICAoZXF1YWwgdG9k byAiVE9ETyIpCiAgICAgICAgICAgICAoZXF1YWwgdG9kbyAiV0FJVCIpKSkpCiAgKCItKGZvb3xi YXJ8emFwL1RPRE98V0FJVCkiCiAgIChub3QgKGFuZCAob3IKICAgICAgICAgICAgICAobWVtYmVy ICJmb28iIHRhZ3MtbGlzdCkKICAgICAgICAgICAgICAobWVtYmVyICJiYXIiIHRhZ3MtbGlzdCkK ICAgICAgICAgICAgICAobWVtYmVyICJ6YXAiIHRhZ3MtbGlzdCkpCiAgICAgICAgICAgICAob3IK ICAgICAgICAgICAgICAoZXF1YWwgdG9kbyAiVE9ETyIpCiAgICAgICAgICAgICAgKGVxdWFsIHRv ZG8gIldBSVQiKSkpKSkKICAoIi0oZm9vfGJhcnwoemFwJkxFVkVMPjIpL1RPRE98e15XfS1XQUlU KSIKICAgKG5vdCAoYW5kCiAgICAgICAgIChvcgogICAgICAgICAgKG1lbWJlciAiZm9vIiB0YWdz LWxpc3QpCiAgICAgICAgICAobWVtYmVyICJiYXIiIHRhZ3MtbGlzdCkKICAgICAgICAgIChhbmQg KG1lbWJlciAiemFwIiB0YWdzLWxpc3QpCiAgICAgICAgICAgICAgICg+IGxldmVsIDIpKSkKICAg ICAgICAgKG9yCiAgICAgICAgICAoZXF1YWwgdG9kbyAiVE9ETyIpCiAgICAgICAgICAoYW5kCiAg ICAgICAgICAgKG9yZy1zdHJpbmctbWF0Y2g9IChvciB0b2RvICIiKSAiXlciKQogICAgICAgICAg IChub3QgKGVxdWFsIHRvZG8gIldBSVQiKSkpKSkpKQogICgiZm9vfGJhcnx6YXAmTEVWRUw+Mi9U T0RPfHteV30tV0FJVCIgCiAgIChhbmQKICAgIChwcm9nbgogICAgICAoc2V0cSBvcmctY2FjaGVk LXByb3BzIG5pbCkKICAgICAgKG9yCiAgICAgICAobWVtYmVyICJmb28iIHRhZ3MtbGlzdCkKICAg ICAgIChtZW1iZXIgImJhciIgdGFncy1saXN0KQogICAgICAgKGFuZAogICAgICAgIChtZW1iZXIg InphcCIgdGFncy1saXN0KQogICAgICAgICg+IGxldmVsIDIpKSkpCiAgICAob3IKICAgICAoZXF1 YWwgdG9kbyAiVE9ETyIpCiAgICAgKGFuZAogICAgICAob3JnLXN0cmluZy1tYXRjaD0gKG9yIHRv ZG8gIiIpICJeVyIpCiAgICAgIChub3QgKGVxdWFsIHRvZG8gIldBSVQiKSkpKSkpKQoKKHRhZy10 ZXN0LXN1aXRlIGZhbmN5LW1hdGNoZXJzLTEKICAoIkxFVkVMID09IDIgJiBIRUFESU5HIDw+IHs8 Lio+fSAmIFBSSU9SSVRZIDw+IFwiQVwiICIKICAgKGFuZAogICAgKD0gbGV2ZWwgMikKICAgIChv cmctc3RyaW5nLW1hdGNoPD4gKG9yIGhlYWRpbmcgIiIpICI8Lio+IikKICAgIChvcmctc3RyaW5n PD4gKG9yIHByaW9yaXR5ICIiKSAiQSIpKSkKICAoIih4eXp8e15hfS1hYmMpICYgTEVWRUwgPiAx IgogICAoYW5kCiAgICAob3IgKG1lbWJlciAieHl6IiB0YWdzLWxpc3QpCiAgICAgICAgKGFuZAog ICAgICAgICAob3JnLW1hdGNoLWFueS1wICJeYSIgdGFncy1saXN0KQogICAgICAgICAobm90ICht ZW1iZXIgImFiYyIgdGFncy1saXN0KSkpKQogICAgKD4gbGV2ZWwgMSkpKQogICgiLSgoeHl6fHte YX0tYWJjKSAmIExFVkVMID4gMSkiCiAgIChub3QgKGFuZAogICAgICAgICAob3IgKG1lbWJlciAi eHl6IiB0YWdzLWxpc3QpCiAgICAgICAgICAgICAoYW5kCiAgICAgICAgICAgICAgKG9yZy1tYXRj aC1hbnktcCAiXmEiIHRhZ3MtbGlzdCkKICAgICAgICAgICAgICAobm90IChtZW1iZXIgImFiYyIg dGFncy1saXN0KSkpKQogICAgICAgICAoPiBsZXZlbCAxKSkpKQogICgiSEVBRElORyA9PSB7Wlxc e3szLDdcXH19fSAmIFRPRE88PlwiVE9ET1wiIiAKICAgKGFuZAogICAgKG9yZy1zdHJpbmctbWF0 Y2g9IChvciBoZWFkaW5nICIiKSAiWlxcezMsN1xcfSIpCiAgICAob3JnLXN0cmluZzw+IChvciB0 b2RvICIiKSAiVE9ETyIpKSkKICAoIigoYS1iK3teW2MtZ119KS0oZCtMRVZFTD4yKSl8e156fSZM RVZFTD01Ji0oQV9QUk9QPVwiZm9vXCJ8Ql9QUk9QPVwiYmFyXCIpIgogICAob3IKICAgIChhbmQK ICAgICAoYW5kCiAgICAgIChtZW1iZXIgImEiIHRhZ3MtbGlzdCkKICAgICAgKG5vdCAobWVtYmVy ICJiIiB0YWdzLWxpc3QpKQogICAgICAob3JnLW1hdGNoLWFueS1wICJeW2MtZ10iIHRhZ3MtbGlz dCkpCiAgICAgKG5vdAogICAgICAoYW5kCiAgICAgICAobWVtYmVyICJkIiB0YWdzLWxpc3QpCiAg ICAgICAoPiBsZXZlbCAyKSkpKQogICAgKGFuZAogICAgIChvcmctbWF0Y2gtYW55LXAgIl56IiB0 YWdzLWxpc3QpCiAgICAgKD0gbGV2ZWwgNSkKICAgICAobm90CiAgICAgIChvcgogICAgICAgKHN0 cmluZz0gKG9yIChvcmctY2FjaGVkLWVudHJ5LWdldCBuaWwgIkFfUFJPUCIpICIiKSAiZm9vIikK ICAgICAgIChzdHJpbmc9IChvciAob3JnLWNhY2hlZC1lbnRyeS1nZXQgbmlsICJCX1BST1AiKSAi IikgImJhciIpKSkpKSkpCgo7OyBzb21lIG9mIHRoZSAvIHRvZG8gbWF0Y2hlcyBhcmUgcHJhY3Rp Y2FsbHkgc2lsbHksIGJ1dCB0ZXN0aW5nIHN0cnVjdHVyZSBoZXJlCih0YWctdGVzdC1zdWl0ZSBm YW5jeS1tYXRjaGVycy0yCiAgKCIiIC4gdCkKICAoIiAgICAgICAgICAgLyEiIAogICAoYW5kICht ZW1iZXIgdG9kbyBvcmctbm90LWRvbmUta2V5d29yZHMpIHQpKQogICgiICAgICAgICAgICAvISAg ICAgICAgICAgICAgIiAKICAgKGFuZCAobWVtYmVyIHRvZG8gb3JnLW5vdC1kb25lLWtleXdvcmRz KSB0KSkKICAoIkFfUFJPUD17XjB4WzAtOUEtRl0rfSIKICAgKG9yZy1zdHJpbmctbWF0Y2g9CiAg ICAob3IgKG9yZy1jYWNoZWQtZW50cnktZ2V0IG5pbCAiQV9QUk9QIikgIiIpICJeMHhbMC05QS1G XSsiKSkKICAoIkFfUFJPUDw+e15bQS1aXSt9IgogICAob3JnLXN0cmluZy1tYXRjaDw+CiAgICAo b3IgKG9yZy1jYWNoZWQtZW50cnktZ2V0IG5pbCAiQV9QUk9QIikgIiIpICJeW0EtWl0rIikpCiAg KCIoYStiLWN8QV9QUk9QPT0yfC0oZC1lK2YmTEVWRUw+MykpIgogICAob3IKICAgIChhbmQKICAg ICAobWVtYmVyICJhIiB0YWdzLWxpc3QpCiAgICAgKG1lbWJlciAiYiIgdGFncy1saXN0KQogICAg IChub3QgKG1lbWJlciAiYyIgdGFncy1saXN0KSkpCiAgICAoPSAoc3RyaW5nLXRvLW51bWJlciAo b3IgKG9yZy1jYWNoZWQtZW50cnktZ2V0IG5pbCAiQV9QUk9QIikgIiIpKSAyKQogICAgKG5vdCAo YW5kCiAgICAgICAgICAobWVtYmVyICJkIiB0YWdzLWxpc3QpCiAgICAgICAgICAobm90IChtZW1i ZXIgImUiIHRhZ3MtbGlzdCkpCiAgICAgICAgICAobWVtYmVyICJmIiB0YWdzLWxpc3QpCiAgICAg ICAgICAoPiBsZXZlbCAzKSkpKSkKICAoIigoYykpIiAobWVtYmVyICJjIiB0YWdzLWxpc3QpKQog ICgiKCgtKCgoLShjKSkpKSkpIiAobWVtYmVyICJjIiB0YWdzLWxpc3QpKQogICgiKCgtKC0oKC0o YykpKSkpKSIgKG5vdCAobWVtYmVyICJjIiB0YWdzLWxpc3QpKSkKICAoIi0oemFwIC1iYXIgICAr Zm9vICYgTEVWRUwgPiAyIHwgSEVBRElORyA9PSB7Wnt7Myw3fX19KSIKICAgKG5vdCAob3IgKGFu ZAogICAgICAgICAgICAgKG1lbWJlciAiemFwIiB0YWdzLWxpc3QpCiAgICAgICAgICAgICAobm90 IChtZW1iZXIgImJhciIgdGFncy1saXN0KSkKICAgICAgICAgICAgIChtZW1iZXIgImZvbyIgdGFn cy1saXN0KQogICAgICAgICAgICAgKD4gbGV2ZWwgMikpCiAgICAgICAgICAgIChvcmctc3RyaW5n LW1hdGNoPSAob3IgaGVhZGluZyAiIikgIlp7Myw3fSIpKSkpCiAgKCJ6YXAgLWJhciAgICtmb28g JiBMRVZFTCA+IDIiIAogICAoYW5kIAogICAgKG1lbWJlciAiemFwIiB0YWdzLWxpc3QpCiAgICAo bm90IChtZW1iZXIgImJhciIgdGFncy1saXN0KSkKICAgIChtZW1iZXIgImZvbyIgdGFncy1saXN0 KQogICAgKD4gbGV2ZWwgMikpKQogICgiLXphcCtiYXIgfCBMRVZFTCA8PSAyICYgVE9ETyA8PiBc IldBSVRcIiIgCiAgIChvcgogICAgKGFuZAogICAgIChub3QgKG1lbWJlciAiemFwIiB0YWdzLWxp c3QpKQogICAgIChtZW1iZXIgImJhciIgdGFncy1saXN0KSkKICAgIChhbmQKICAgICAoPD0gbGV2 ZWwgMikKICAgICAob3JnLXN0cmluZzw+IChvciB0b2RvICIiKSAgIldBSVQiKSkpKQogICgiLSh6 YXB8e15BfXxMRVZFTD0yKSIKICAgKG5vdCAob3IKICAgICAgICAgKG1lbWJlciAiemFwIiB0YWdz LWxpc3QpCiAgICAgICAgIChvcmctbWF0Y2gtYW55LXAgIl5BIiB0YWdzLWxpc3QpCiAgICAgICAg ICg9IGxldmVsIDIpKSkpCiAgKCIvIVRPRE8iCiAgIChhbmQKICAgIChtZW1iZXIgdG9kbyBvcmct bm90LWRvbmUta2V5d29yZHMpCiAgICB0CiAgICAoZXF1YWwgdG9kbyAiVE9ETyIpKSkKICAoIi9U T0RPIgogICAoYW5kIHQgKGVxdWFsIHRvZG8gIlRPRE8iKSkpCiAgKCIvISIKICAgKGFuZCAobWVt YmVyIHRvZG8gb3JnLW5vdC1kb25lLWtleXdvcmRzKSB0KSkKICAoImFiYy11dncreHl6LyFUT0RP IgogICAoYW5kCiAgICAobWVtYmVyIHRvZG8gb3JnLW5vdC1kb25lLWtleXdvcmRzKQogICAgKHBy b2duCiAgICAgIChzZXRxIG9yZy1jYWNoZWQtcHJvcHMgbmlsKQogICAgICAoYW5kCiAgICAgICAo bWVtYmVyICJhYmMiIHRhZ3MtbGlzdCkKICAgICAgIChub3QgKG1lbWJlciAidXZ3IiB0YWdzLWxp c3QpKQogICAgICAgKG1lbWJlciAieHl6IiB0YWdzLWxpc3QpKSkKICAgIChlcXVhbCB0b2RvICJU T0RPIikpKQogICgiYWJjLXV2dyt4eXorTEVWRUw8PTMvVE9ET3xIT0xESU5HLVdBSVRJTkd8QVZP SURJTkctUkVBTExZX0FWT0lESU5HIiAKICAgKGFuZAogICAgKHByb2duCiAgICAgIChzZXRxIG9y Zy1jYWNoZWQtcHJvcHMgbmlsKQogICAgICAoYW5kCiAgICAgICAobWVtYmVyICJhYmMiIHRhZ3Mt bGlzdCkKICAgICAgIChub3QgKG1lbWJlciAidXZ3IiB0YWdzLWxpc3QpKQogICAgICAgKG1lbWJl ciAieHl6IiB0YWdzLWxpc3QpCiAgICAgICAoPD0gbGV2ZWwgMykpKQogICAgKG9yCiAgICAgKGVx dWFsIHRvZG8gIlRPRE8iKQogICAgIChhbmQKICAgICAgKGVxdWFsIHRvZG8gIkhPTERJTkciKQog ICAgICAobm90IChlcXVhbCB0b2RvICJXQUlUSU5HIikpKQogICAgIChhbmQKICAgICAgKGVxdWFs IHRvZG8gIkFWT0lESU5HIikKICAgICAgKG5vdCAoZXF1YWwgdG9kbyAiUkVBTExZX0FWT0lESU5H IikpKSkpKQogICgiYWJjLXV2dyt4eXorTEVWRUw8PTMvIVRPRE98SE9MRElORy1XQUlUSU5HfEFW T0lESU5HLVJFQUxMWV9BVk9JRElORyIKICAgKGFuZAogICAgKG1lbWJlciB0b2RvIG9yZy1ub3Qt ZG9uZS1rZXl3b3JkcykKICAgIChwcm9nbgogICAgICAoc2V0cSBvcmctY2FjaGVkLXByb3BzIG5p bCkKICAgICAgKGFuZAogICAgICAgKG1lbWJlciAiYWJjIiB0YWdzLWxpc3QpCiAgICAgICAobm90 IChtZW1iZXIgInV2dyIgdGFncy1saXN0KSkKICAgICAgIChtZW1iZXIgInh5eiIgdGFncy1saXN0 KQogICAgICAgKDw9IGxldmVsIDMpKSkKICAgIChvcgogICAgIChlcXVhbCB0b2RvICJUT0RPIikK ICAgICAoYW5kCiAgICAgIChlcXVhbCB0b2RvICJIT0xESU5HIikKICAgICAgKG5vdCAoZXF1YWwg dG9kbyAiV0FJVElORyIpKSkKICAgICAoYW5kCiAgICAgIChlcXVhbCB0b2RvICJBVk9JRElORyIp CiAgICAgIChub3QgKGVxdWFsIHRvZG8gIlJFQUxMWV9BVk9JRElORyIpKSkpKSkKICAoImFiYy11 dncreHl6K0xFVkVMPD0zLyFUT0RPfHtZfS17Wn18e0F9LXtCfSIKICAgKGFuZAogICAgKG1lbWJl ciB0b2RvIG9yZy1ub3QtZG9uZS1rZXl3b3JkcykKICAgIChwcm9nbgogICAgICAoc2V0cSBvcmct Y2FjaGVkLXByb3BzIG5pbCkKICAgICAgKGFuZAogICAgICAgKG1lbWJlciAiYWJjIiB0YWdzLWxp c3QpCiAgICAgICAobm90IChtZW1iZXIgInV2dyIgdGFncy1saXN0KSkKICAgICAgIChtZW1iZXIg Inh5eiIgdGFncy1saXN0KQogICAgICAgKDw9IGxldmVsIDMpKSkKICAgIChvcgogICAgIChlcXVh bCB0b2RvICJUT0RPIikKICAgICAoYW5kCiAgICAgIChvcmctc3RyaW5nLW1hdGNoPSAob3IgdG9k byAiIikgIlkiKQogICAgICAob3JnLXN0cmluZy1tYXRjaDw+IChvciB0b2RvICIiKSAiWiIpKQog ICAgIChhbmQKICAgICAgKG9yZy1zdHJpbmctbWF0Y2g9IChvciB0b2RvICIiKSAiQSIpCiAgICAg IChvcmctc3RyaW5nLW1hdGNoPD4gKG9yIHRvZG8gIiIpICJCIikpKSkpCiAgKCJQUk9QPXteXFxz LSovLyAuKiR9L0F7fUIiCiAgIChhbmQKICAgIChwcm9nbgogICAgICAoc2V0cSBvcmctY2FjaGVk LXByb3BzIG5pbCkKICAgICAgKG9yZy1zdHJpbmctbWF0Y2g9IChvciAob3JnLWNhY2hlZC1lbnRy eS1nZXQgbmlsICJQUk9QIikgIiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAiXlxccy0qLy8g LiokIikpCiAgICAoZXF1YWwgdG9kbyAiQSIpCiAgICAob3JnLXN0cmluZy1tYXRjaD0gKG9yIHRv ZG8gIiIpICIiKQogICAgKGVxdWFsIHRvZG8gIkIiKSkpIDsgU2VlIE5vdGUgaCBmb3Igd2h5IHRo ZSBjdXJyZW50IDcuOCBjb2RlIGRvZXMgbm90IHdvcmsgZm9yIHRoaXMgY2FzZQogICgiUFJPUD17 Xlxccy0qLy8gLiokfS9BK3teLiphYiR9K0IiIAogICAoYW5kCiAgICAocHJvZ24KICAgICAgKHNl dHEgb3JnLWNhY2hlZC1wcm9wcyBuaWwpCiAgICAgIChvcmctc3RyaW5nLW1hdGNoPSAob3IgKG9y Zy1jYWNoZWQtZW50cnktZ2V0IG5pbCAiUFJPUCIpICIiKQogICAgICAgICAgICAgICAgICAgICAg ICAgIl5cXHMtKi8vIC4qJCIpKQogICAgKGVxdWFsIHRvZG8gIkEiKQogICAgKG9yZy1zdHJpbmct bWF0Y2g9IChvciB0b2RvICIiKSAiXi4qYWIkIikKICAgIChlcXVhbCB0b2RvICJCIikpKQogICgi UFJPUD17Xlxccy0qLy8gLiokfS9BK3teLiphYnt7MSwzfX0kfStCIiAKICAgKGFuZAogICAgKHBy b2duCiAgICAgIChzZXRxIG9yZy1jYWNoZWQtcHJvcHMgbmlsKQogICAgICAob3JnLXN0cmluZy1t YXRjaD0gKG9yIChvcmctY2FjaGVkLWVudHJ5LWdldCBuaWwgIlBST1AiKSAiIikKICAgICAgICAg ICAgICAgICAgICAgICAgICJeXFxzLSovLyAuKiQiKSkKICAgIChlcXVhbCB0b2RvICJBIikKICAg IChvcmctc3RyaW5nLW1hdGNoPSAob3IgdG9kbyAiIikgIl4uKmFiezEsM30kIikKICAgIChlcXVh bCB0b2RvICJCIikpKQogICgiUFJPUD17Xlxccy0qLy8gLiokfS9BLXteLiphYiR9LUJ8LUMre15j KiR9IiAKICAgKGFuZAogICAgKHByb2duCiAgICAgIChzZXRxIG9yZy1jYWNoZWQtcHJvcHMgbmls KQogICAgICAob3JnLXN0cmluZy1tYXRjaD0gKG9yIChvcmctY2FjaGVkLWVudHJ5LWdldCBuaWwg IlBST1AiKSAiIikgCiAgICAgICAgICAgICAgICAgICAgICAgICAiXlxccy0qLy8gLiokIikpCiAg ICAob3IKICAgICAoYW5kCiAgICAgIChlcXVhbCB0b2RvICJBIikKICAgICAgKG9yZy1zdHJpbmct bWF0Y2g8PiAob3IgdG9kbyAiIikgIl4uKmFiJCIpCiAgICAgIChub3QgKGVxdWFsIHRvZG8gIkIi KSkpCiAgICAgKGFuZAogICAgICAobm90IChlcXVhbCB0b2RvICJDIikpCiAgICAgIChvcmctc3Ry aW5nLW1hdGNoPSAob3IgdG9kbyAiIikgIl5jKiQiKSkpKSkKICAoIi8hQSIgCiAgIChhbmQKICAg IChtZW1iZXIgdG9kbyBvcmctbm90LWRvbmUta2V5d29yZHMpCiAgICB0CiAgICAoZXF1YWwgdG9k byAiQSIpKSkKICAoImZvbytiYXIvIVRPRE8rV0FJVC1ET05FIiAKICAgKGFuZAogICAgKG1lbWJl ciB0b2RvIG9yZy1ub3QtZG9uZS1rZXl3b3JkcykKICAgIChwcm9nbgogICAgICAoc2V0cSBvcmct Y2FjaGVkLXByb3BzIG5pbCkKICAgICAgKGFuZAogICAgICAgKG1lbWJlciAiZm9vIiB0YWdzLWxp c3QpCiAgICAgICAobWVtYmVyICJiYXIiIHRhZ3MtbGlzdCkpKQogICAgKGVxdWFsIHRvZG8gIlRP RE8iKQogICAgKGVxdWFsIHRvZG8gIldBSVQiKQogICAgKG5vdCAoZXF1YWwgdG9kbyAiRE9ORSIp KSkpCiAgKCJmb28rYmFyLyFUT0RPK1dBSVR8VVJHRU5UIgogICAoYW5kCiAgICAobWVtYmVyIHRv ZG8gb3JnLW5vdC1kb25lLWtleXdvcmRzKQogICAgKHByb2duCiAgICAgIChzZXRxIG9yZy1jYWNo ZWQtcHJvcHMgbmlsKQogICAgICAoYW5kCiAgICAgICAobWVtYmVyICJmb28iIHRhZ3MtbGlzdCkK ICAgICAgIChtZW1iZXIgImJhciIgdGFncy1saXN0KSkpCiAgICAob3IKICAgICAoYW5kCiAgICAg IChlcXVhbCB0b2RvICJUT0RPIikKICAgICAgKGVxdWFsIHRvZG8gIldBSVQiKSkKICAgICAoZXF1 YWwgdG9kbyAiVVJHRU5UIikpKSkKICAoImZvbytiYXIvIVRPRE98V0FJVHxVUkdFTlQiCiAgIChh bmQKICAgIChtZW1iZXIgdG9kbyBvcmctbm90LWRvbmUta2V5d29yZHMpCiAgICAocHJvZ24KICAg ICAgKHNldHEgb3JnLWNhY2hlZC1wcm9wcyBuaWwpCiAgICAgIChhbmQKICAgICAgIChtZW1iZXIg ImZvbyIgdGFncy1saXN0KQogICAgICAgKG1lbWJlciAiYmFyIiB0YWdzLWxpc3QpKSkKICAgIChv cgogICAgIChlcXVhbCB0b2RvICJUT0RPIikKICAgICAoZXF1YWwgdG9kbyAiV0FJVCIpCiAgICAg KGVxdWFsIHRvZG8gIlVSR0VOVCIpKSkpICAKICAoImZvbytiYXIvIXtUT0RPfS1XQUlUIgogICAo YW5kCiAgICAobWVtYmVyIHRvZG8gb3JnLW5vdC1kb25lLWtleXdvcmRzKQogICAgKHByb2duCiAg ICAgIChzZXRxIG9yZy1jYWNoZWQtcHJvcHMgbmlsKQogICAgICAoYW5kCiAgICAgICAobWVtYmVy ICJmb28iIHRhZ3MtbGlzdCkKICAgICAgIChtZW1iZXIgImJhciIgdGFncy1saXN0KSkpCiAgICAo b3JnLXN0cmluZy1tYXRjaD0gKG9yIHRvZG8gIiIpICJUT0RPIikKICAgIChub3QgKGVxdWFsIHRv ZG8gIldBSVQiKSkpKSkKCih0YWctdGVzdC1zdWl0ZSBmYW5jeS1tYXRjaGVycy0zCiAgKCIoKGEg K2IgLWMgJiBMRVZFTCA+IDIgfCBjICYgTEVWRUwgPT0gMSktKEhFQURJTkc9ezxOT1RFUz59fFRP RE89XCJET05FXCIpfHVyZ2VudHxfcXVldWUmREVBRExJTkU+XCI8MjAxMi0wMS0wMSAwNDowMD5c IikiCiAgIChvcgogICAgKGFuZAogICAgIChvciAoYW5kCiAgICAgICAgICAobWVtYmVyICJhIiB0 YWdzLWxpc3QpCiAgICAgICAgICAobWVtYmVyICJiIiB0YWdzLWxpc3QpCiAgICAgICAgICAobm90 IChtZW1iZXIgImMiIHRhZ3MtbGlzdCkpCiAgICAgICAgICAoPiBsZXZlbCAyKSkKICAgICAgICAg KGFuZAogICAgICAgICAgKG1lbWJlciAiYyIgdGFncy1saXN0KQogICAgICAgICAgKD0gbGV2ZWwg MSkpKQogICAgIChub3QKICAgICAgKG9yIChvcmctc3RyaW5nLW1hdGNoPSAob3IgaGVhZGluZyAi IikgIjxOT1RFUz4iKQogICAgICAgICAgKHN0cmluZz0gKG9yIHRvZG8gIiIpICJET05FIikpKSkK ICAgIChtZW1iZXIgInVyZ2VudCIgdGFncy1saXN0KQogICAgKGFuZAogICAgIChtZW1iZXIgIl9x dWV1ZSIgdGFncy1saXN0KQogICAgIChvcmctdGltZT4gKG9yIChvcmctY2FjaGVkLWVudHJ5LWdl dCBuaWwgIkRFQURMSU5FIikgIiIpIDEzMjUzOTQwMDAuMCkpKSkKICAoIit5b3UrbWUtdGhlbSZQ UklPUklUWT09XCJBXCIrQ0FURUdPUlk8PlwibWlzc2luZ1wiIgogICAoYW5kCiAgICAobWVtYmVy ICJ5b3UiIHRhZ3MtbGlzdCkKICAgIChtZW1iZXIgIm1lIiB0YWdzLWxpc3QpCiAgICAobm90ICht ZW1iZXIgInRoZW0iIHRhZ3MtbGlzdCkpCiAgICAoc3RyaW5nPSAob3IgcHJpb3JpdHkgIiIpICJB IikKICAgIChvcmctc3RyaW5nPD4KICAgICAob3IgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkg J29yZy1jYXRlZ29yeSkgIiIpICJtaXNzaW5nIikpKQogICgiK3lvdSttZS10aGVtICYgUFJJT1JJ VFkgPT0gXCJBXCIgKyBDQVRFR09SWSA8PiBcIm1pc3NpbmdcIiIKICAgKGFuZAogICAgKG1lbWJl ciAieW91IiB0YWdzLWxpc3QpCiAgICAobWVtYmVyICJtZSIgdGFncy1saXN0KQogICAgKG5vdCAo bWVtYmVyICJ0aGVtIiB0YWdzLWxpc3QpKQogICAgKHN0cmluZz0gKG9yIHByaW9yaXR5ICIiKSAi QSIpCiAgICAob3JnLXN0cmluZzw+IChvciAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnb3Jn LWNhdGVnb3J5KSAiIikgIm1pc3NpbmciKSkpCiAgKCIreW91K21lLXRoZW0gJiBQUklPUklUWSA8 IFwiQVwiIHwgQ0FURUdPUlkgPD4gXCJtaXNzaW5nXCIgKyB1cyB8IEhFQURJTkc9e1xcKD86W1Nz XWVjcmV0XFwpe3sxLDN9fX0iCiAgIChvcgogICAgKGFuZAogICAgIChtZW1iZXIgInlvdSIgdGFn cy1saXN0KQogICAgIChtZW1iZXIgIm1lIiB0YWdzLWxpc3QpCiAgICAgKG5vdCAobWVtYmVyICJ0 aGVtIiB0YWdzLWxpc3QpKQogICAgIChzdHJpbmc8IChvciBwcmlvcml0eSAiIikgIkEiKSkKICAg IChhbmQKICAgICAob3JnLXN0cmluZzw+IChvciAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAn b3JnLWNhdGVnb3J5KSAiIikKICAgICAgICAgICAgICAgICAgICJtaXNzaW5nIikKICAgICAobWVt YmVyICJ1cyIgdGFncy1saXN0KSkKICAgIChvcmctc3RyaW5nLW1hdGNoPSAob3IgaGVhZGluZyAi IikgIlxcKD86W1NzXWVjcmV0XFwpezEsM30iKSkpCiAgKCJQUk9QXFwtV0lUSFxcLUhZUEhFTlM9 MiIKICAgKD0KICAgIChzdHJpbmctdG8tbnVtYmVyCiAgICAgKG9yCiAgICAgIChvcmctY2FjaGVk LWVudHJ5LWdldCBuaWwgIlBST1AtV0lUSC1IWVBIRU5TIikKICAgICAgIiIpKQogICAgMikpCiAg KCJQUk9QPXteXFxzLSovLyAuKiR9IgogICAob3JnLXN0cmluZy1tYXRjaD0KICAgIChvciAob3Jn LWNhY2hlZC1lbnRyeS1nZXQgbmlsICJQUk9QIikgIiIpCiAgICAiXlxccy0qLy8gLiokIikpCiAg KCJ3b3JrLVRPRE89XCJXQUlUSU5HXCJ8aG9tZSZUT0RPPVwiV0FJVElOR1wiLyEiIAogICAoYW5k CiAgICAobWVtYmVyIHRvZG8gb3JnLW5vdC1kb25lLWtleXdvcmRzKQogICAgKHByb2duCiAgICAg IChzZXRxIG9yZy1jYWNoZWQtcHJvcHMgbmlsKQogICAgICAob3IKICAgICAgIChhbmQKICAgICAg ICAobWVtYmVyICJ3b3JrIiB0YWdzLWxpc3QpCiAgICAgICAgKG5vdCAoc3RyaW5nPSAob3IgdG9k byAiIikgIldBSVRJTkciKSkpCiAgICAgICAoYW5kCiAgICAgICAgKG1lbWJlciAiaG9tZSIgdGFn cy1saXN0KQogICAgICAgIChzdHJpbmc9IChvciB0b2RvICIiKSAiV0FJVElORyIpKSkpKSkpCgoo dGFnLXRlc3Qtc3VpdGUgc2hvdWxkLWVycm9yLTEKICAoIigpIiAuIGVycm9yKSA7IHdlIG1pZ2h0 IGp1c3QgZG8gdCBoZXJlLCBidXQgdGhlIHBhcmVucyBzdWdnZXN0IGFuIGVycm9yCiAgKCIoJmZv bytMRVZFTD0xKSIgLiBlcnJvcikKICAoIihmb28rTEVWRUw9MSIgLiBlcnJvcikKICAoIihmb28r TEVWRUw9MSkpIiAuIGVycm9yKQogICgiKGFiYyspIiAuIGVycm9yKQogICgiYWJjK3h5eiEiIC4g ZXJyb3IpCiAgKCIobWlzc2luZytwYXJlbiIgLiBlcnJvcikgICAgICAgICAgICAKICAoIlBST1A9 ey4qY2xvc2luZyBicmFjZT8iIC4gZXJyb3IpIAogICgiUFJPUD1cImFiYyIgLiBlcnJvcikKICAo IlA8PDItYmFkK2NtcCtvcCIgLiBlcnJvcikKICAoIlA8PXteZm9vfSIgLiBlcnJvcikKICAoIlBS T1A8LS5keCIgLiBlcnJvcikgICAgICAgICAgIDsgYmFkIG51bWJlcgogICgiIT87IiAuIGVycm9y KQogICgiICAgW3hdIiAuIGVycm9yKQogICgiKGZvbytiYXIvVE9ETyIgLiBlcnJvcikKICAoIihm b28rYmFyKSsvVE9ETyIgLiBlcnJvcikKICAoImZvbytiYXIvIVRPRE98e0FDIiAuIGVycm9yKQog ICgiKCgoZm9vKSkpKS9UT0RPIiAuIGVycm9yKQogICgiZm9vKyIgLiBlcnJvcikKICAoImZvby9U T0RPLSIgLiBlcnJvcikKICAoIi0oZm9vK2Jhci8rKSIgLiBlcnJvcikKICAoIi0oZm9vK2Jhci9B LUIoKSkiIC4gZXJyb3IpKQoKOzs7IE1pc2NlbGxhbmVvdXMgT3RoZXIgdGVzdHMgLS0gcmVhbGx5 IG5lZWQgYSBjb21wbGV0ZSBmcmFtZXdvcmsgaGVyZS4KCihkZWZ1biB0cXMgKHEpCiAgKGxldCAo KHRvZG8tb25seSBuaWwpKQogICAgKGNkciAob3JnLW1ha2UtdGFncy1tYXRjaGVyLU5FVyBxKSkp KQoKKGRlZnVuIHRhZy10ZXN0LXNjYW4gKHMgcG9pbnQtbGlzdCAmb3B0aW9uYWwgc3RheS1wdXQp CiAgKHByb2cxCiAgICAgIChpZiAoYXRvbSBwb2ludC1saXN0KQogICAgICAgICAgKG9yZy1zY2Fu LXRhZ3MtTkVXICdwb2ludCAodHFzIHMpIG5pbCkKICAgICAgICAoY29ucyAoZXF1YWwgKG9yZy1z Y2FuLXRhZ3MtTkVXICdwb2ludCAodHFzIHMpIG5pbCkgcG9pbnQtbGlzdCkgcykpCiAgICAodW5s ZXNzIHN0YXktcHV0CiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpKSkpCgooZGVmdW4gdGFn LXRlc3QtZG8tc2Nhbi10ZXN0cy0xICh0ZXN0cyBmdW5jKQogIChsZXQgKChjb250ZW50cwogICAg ICAgICAiKiBbI0JdIEEgaGVhZGluZyBPbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOnh5ejoKKiogUHV0IGEgT25lIGhlcmUgdG9vIGF0IGxl dmVsIFR3bwoqKiogQW5kIGEgbGV2ZWwgVGhyZWUsIGFsc28gT25lICAgCiogWyNDXSBCIGhlYWRp bmcgVHdvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDp1dnc6CioqIEFub3RoZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphYmM6CiogWyNBXSBDIGhlYWRpbmcgVGhyZWUg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp4eXo6 CiogPE5PVEVTPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDp3dGY6CioqIE1vcmUgbW9yZSBtb3JlCioqKiBUT0RPIE9ud2Fy ZAoqKiogVE9ETyBVcHdhcmQKKioqIFdBVFQgV2hhdCBjb21lcyB1cC4uLgoqKiogRE9ORSBHbGlk aW5nIGhvbWUKKioqKiBKdXN0IGEgdGVzdCAgICAKKiBbI0FdIEQgaGVhZGluZyBGb3VyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnV2dzoKKiBU T0RPIEUgaGVhZGluZyBGaXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDphYmM6dXZ3Onh5ejoKICBTQ0hFRFVMRUQ6IDwyMDEyLTA3LTMxIFR1ZT4KKiogQW5z d2VycwogICArIHh5ejogMSAzMTQgNjc2CiAgICsgeHl6LWFiYzogMSAzMTQgIAogICArIFByaW9y aXR5IEE6IDMxNCA1OTUKICAgKyBQcmlvcml0eSBub3QgZW1wdHk6IDEgMTUyIDMxNCA1OTUKICAg KyBQcmlvcml0eSBlbXB0eSwgTGV2ZWwgMTogMzk1IDY3NgogICArIFNjaGVkdWxlZCBhZnRlciA8 MjAxMi0wNy0wMSAwMDowMD46IDY3NgogICArIFRPRE89XCJUT0RPXCI6IDQ5NCA1MTAgNjc2CiAg ICsgVE9ETz1cIlRPRE9cIiwgTGV2ZWw+MTogNDk0IDUxMAogICArIEhFQURJTkc9ezwuKj59OiAz OTUKICAgKyBIRUFESU5HPXtPbmVcXHxUd299LCBMZXZlbCA8PSAyOiAxIDgyIDE1MgoiKSkKICAg ICh3aXRoLXRlbXAtYnVmZmVyCiAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ29yZy10 YWdzLWNvbHVtbikgLTgwKQogICAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdvcmctdG9k by1rZXl3b3JkcykKICAgICAgICAgICAnKChzZXF1ZW5jZSAiVE9ETyIgIldBSVQiICJET05FIikp KQogICAgICAob3JnLW1vZGUpCiAgICAgIChpbnNlcnQgY29udGVudHMpCiAgICAgIChnb3RvLWNo YXIgKHBvaW50LW1pbikpCiAgICAgIChtYXBjYXIgZnVuYyB0ZXN0cykpKSkKCihkZWZ1biB0YWct dGVzdC1vdGhlci10ZXN0cyAoJm9wdGlvbmFsIHN1bW1hcml6ZT8pCiAgKGxldCAoKHN1bW1hcml6 ZSAoYW5kIHN1bW1hcml6ZT8KICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAobWVtcSBzdW1t YXJpemU/ICcoOnNob3cgOnJlc3VsdHMgOnJlc3VsdCkpKSkpCiAgICAgICAgKGFsbCAobGFtYmRh ICh4KQogICAgICAgICAgICAgICAoY2F0Y2ggOmRvbmUKICAgICAgICAgICAgICAgICAoZG9saXN0 IChpdGVtIHggdCkKICAgICAgICAgICAgICAgICAgICh3aGVuIChudWxsIChjYXIgaXRlbSkpICh0 aHJvdyA6ZG9uZSBuaWwpKSkpKSkKICAgICAgICAocmVzdWx0cwogICAgICAgICAobGlzdAogICAg ICAgICAgOzsgVGVzdGluZyB0aGF0IHRoZSBtYXRjaGVycyB3b3JrIHdpdGggb3JnLXNjYW4tdGFn cwogICAgICAgICAgKGxldCAoKHNjYW4tdGVzdHMgJygoInh5eitMRVZFTD0xIiAxIDMxNCA2NzYp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgieHl6LWFiYytMRVZFTD0xIiAxIDMxNCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ4eXoiIDEgODIgMTE3IDMxNCA2NzYgNzg3 KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInh5ei1hYmMiIDEgODIgMTE3IDMxNCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJIRUFESU5HPXs8Lio+fSIgMzk1KQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoIkhFQURJTkc9e09uZVxcfFR3b30gJiBMRVZFTCA8 PSAyIiAxIDgyIDE1MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJQUklPUklUWT1c IkFcIiIgMzE0IDU5NSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJQUklPUklUWTw+ XCJcIiIgMSAxNTIgMzE0IDU5NSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJQUklP UklUWT1cIlwiICsgTEVWRUwgPT0gMSIgMzk1IDY3NikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCJTQ0hFRFVMRUQ+PVwiPDIwMTItMDctMDEgMDA6MDA+XCIiIDY3NikKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCJUT0RPPVwiVE9ET1wiIiA0OTQgNTEwIDY3NikKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCJUT0RPPVwiVE9ET1wiICAmIExFVkVMID4gMSIgNDk0 IDUxMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ3dGYvVE9ETyIgNDk0IDUxMCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCItd3RmL1RPRE8iIDY3NikKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCItKHd0Zi9UT0RPKSIgMSA4MiAxMTcgMTUyIDIzMyAzMTQg Mzk1IDQ3NiA1MjYgNTUyIDU3NCA1OTUgNjc2IDc4NykKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCItKC9UT0RPKXwoSEVBRElORz17VXB9L1RPRE8pIiAxIDgyIDExNyAxNTIgMjMzIDMx NCAzOTUgNDc2IDUxMCA1MjYgNTUyIDU3NCA1OTUgNzg3KQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoIi0oL3tcXFMtfSl8SEVBRElORz17VXB9IiAxIDgyIDExNyAxNTIgMjMzIDMxNCAz OTUgNDc2IDUxMCA1MjYgNTc0IDU5NSA3ODcpKSkpCiAgICAgICAgICAgIChjb25zICdvcmctc2Nh bi10YWdzLTEKICAgICAgICAgICAgICAgICAgKHRhZy10ZXN0LWRvLXNjYW4tdGVzdHMtMQogICAg ICAgICAgICAgICAgICAgc2Nhbi10ZXN0cyAnKGxhbWJkYSAodikgKHRhZy10ZXN0LXNjYW4gKGNh ciB2KSAoY2RyIHYpKSkpKSkKICAgICAgICAgIDs7IFRlc3RpbmcgdGhhdCB0aGUgbWF0Y2hlcnMg d29yayB3aXRoIG9yZy1tYXAtZW50cmllcwogICAgICAgICAgKGxldCAoKHNjYW4tdGVzdHMgJygo Inh5eitMRVZFTD0xIiAxIDMxNCA2NzYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgi eHl6LWFiYytMRVZFTD0xIiAxIDMxNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ4 eXoiIDEgODIgMTE3IDMxNCA2NzYgNzg3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Inh5ei1hYmMiIDEgODIgMTE3IDMxNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJI RUFESU5HPXs8Lio+fSIgMzk1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkhFQURJ Tkc9e09uZVxcfFR3b30gJiBMRVZFTCA8PSAyIiAxIDgyIDE1MikKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCJQUklPUklUWT1cIkFcIiIgMzE0IDU5NSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCJQUklPUklUWTw+XCJcIiIgMSAxNTIgMzE0IDU5NSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCJQUklPUklUWT1cIlwiICsgTEVWRUwgPT0gMSIgMzk1IDY3NikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJTQ0hFRFVMRUQ+PVwiPDIwMTItMDctMDEg MDA6MDA+XCIiIDY3NikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUT0RPPVwiVE9E T1wiIiA0OTQgNTEwIDY3NikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUT0RPPVwi VE9ET1wiICAmIExFVkVMID4gMSIgNDk0IDUxMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCJ3dGYvVE9ETyIgNDk0IDUxMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIt d3RmL1RPRE8iIDY3NikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCItKHd0Zi9UT0RP KSIgMSA4MiAxMTcgMTUyIDIzMyAzMTQgMzk1IDQ3NiA1MjYgNTUyIDU3NCA1OTUgNjc2IDc4NykK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCItKC9UT0RPKXwoSEVBRElORz17VXB9L1RP RE8pIiAxIDgyIDExNyAxNTIgMjMzIDMxNCAzOTUgNDc2IDUxMCA1MjYgNTUyIDU3NCA1OTUgNzg3 KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIi0oL3tcXFMtfSl8SEVBRElORz17VXB9 IiAxIDgyIDExNyAxNTIgMjMzIDMxNCAzOTUgNDc2IDUxMCA1MjYgNTc0IDU5NSA3ODcpKSkpCiAg ICAgICAgICAgIChjb25zICdvcmctbWFwLWVudHJpZXMtMQogICAgICAgICAgICAgICAgICAodGFn LXRlc3QtZG8tc2Nhbi10ZXN0cy0xCiAgICAgICAgICAgICAgICAgICBzY2FuLXRlc3RzICcobGFt YmRhICh2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyAoZXF1YWwgKG9y Zy1tYXAtZW50cmllcyAncG9pbnQgKGNhciB2KSkgKGNkciB2KSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNhciB2KSkpKSkpKSkpCiAgICAoaWYgc3VtbWFyaXplCiAg ICAgICAgKG1hcGNhciAobGFtYmRhIChzdWl0ZSkgKGNvbnMgKGNhciBzdWl0ZSkgKGZ1bmNhbGwg YWxsIChjZHIgc3VpdGUpKSkpCiAgICAgICAgICAgICAgICByZXN1bHRzKQogICAgICByZXN1bHRz KSkpCgoKKHByb3ZpZGUgJ3RhZy1xdWVyeS10ZXN0cykKCjs7OyB0YWctcXVlcnktdGVzdHMuZWwg ZW5kcyBoZXJlCg== --f46d042e00e33965c804c75a186a--