From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21259 invoked by alias); 2 Nov 2010 17:35:52 -0000 Received: (qmail 20260 invoked by uid 22791); 2 Nov 2010 17:35:44 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,TW_BJ,TW_RG,T_RP_MATCHES_RCVD,WEIRD_QUOTING X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 02 Nov 2010 17:35:31 +0000 Received: from kpbe14.cbf.corp.google.com (kpbe14.cbf.corp.google.com [172.25.105.78]) by smtp-out.google.com with ESMTP id oA2HZTad012410 for ; Tue, 2 Nov 2010 10:35:29 -0700 Received: from gxk23 (gxk23.prod.google.com [10.202.11.23]) by kpbe14.cbf.corp.google.com with ESMTP id oA2HXm7G032631 for ; Tue, 2 Nov 2010 10:35:25 -0700 Received: by gxk23 with SMTP id 23so4242690gxk.19 for ; Tue, 02 Nov 2010 10:35:06 -0700 (PDT) MIME-Version: 1.0 Received: by 10.42.183.200 with SMTP id ch8mr12796333icb.245.1288719305243; Tue, 02 Nov 2010 10:35:05 -0700 (PDT) Received: by 10.220.192.73 with HTTP; Tue, 2 Nov 2010 10:35:04 -0700 (PDT) In-Reply-To: <83r5f56611.fsf@gnu.org> References: <20101101024704.6A4AA2461AF@ruffy.mtv.corp.google.com> <83r5f56611.fsf@gnu.org> Date: Tue, 02 Nov 2010 17:35:00 -0000 Message-ID: Subject: Re: [RFA, doc RFA]: New printing module and info/disable/enable commands From: Doug Evans To: Eli Zaretskii Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf303bf516677def0494155875 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-11/txt/msg00027.txt.bz2 --20cf303bf516677def0494155875 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 4571 On Sun, Oct 31, 2010 at 9:07 PM, Eli Zaretskii wrote: >> Date: Sun, 31 Oct 2010 19:47:04 -0700 (PDT) >> From: dje@google.com (Doug Evans) >> >> This patch adds two things: A new python module to assist in writing >> pretty-printers (mostly to formalize some of the administrivia aspects >> to support the new commands), and three new commands: >> info|enable|disable pretty-printer. > > Thanks. > >> + =A0** Module gdb.printing has been added. >> + =A0 =A0 It contains utilities for writing and registering pretty-print= ers. >> + =A0 =A0 New classes: PrettyPrinter, =A0SubPrettyPrinter, >> + =A0 =A0 RegexpCollectionPrettyPrinter. >> + =A0 =A0 New function: register_pretty_printer. >> + >> + =A0** New commands "info pretty-printers", "enable pretty-printer" and >> + =A0 =A0 "disable pretty-printer" have been added. > > This is okay. > >> +Pretty-printers are normally named. =A0This makes them easy to manage. >> +For example, the @samp{info pretty-printer} command will list all the >> +installed pretty-printers. > > It's not clear how "info pretty-printers" is an example of giving > names to pretty-printers. =A0How about > > =A0The @samp{info pretty-printer} command will list all the installed > =A0pretty-printers with their names. > >> +For pretty-printers that handle multiple types, we call the printer >> +of each individual type a @code{subprinter}, and each subprinter is nam= ed. > > Suggest to rephrase: > > =A0If a pretty-printer can handle multiple data types, then its > =A0@dfn{subprinters} are the printers for the individual data types. > =A0Each such subprinter has its own name. > >> +The format of the name is @samp{printer-name}:@samp{subprinter-name}. > > Please use @var here, not @code, since both of these stand for > something else, they are not literal symbols. > >> +Pretty-printers are installed by @samp{registering} them with @value{GD= BN}. > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0^^= ^^^^^^^^^^^^^^^^ > @dfn, not @samp. =A0You are defining new terminology. > >> +@node Pretty-Printer Commands >> +@subsection Pretty-Printer Commands > > A @cindex entry here would be good. > >> +@var{object-regexp} is a regular expression matching the objects to lis= t. > > "Objects to list" or "objects whose pretty-printers to list"? > >> +Objects are @code{global}, the program space's file > =A0 ^^^^^^^^^^^ > "Objects can be ...", perhaps? > >> +@item disable pretty-printer @var{object-regexp} @var{name-regexp} >> +Disable the pretty-printer matching @var{object-regexp} and @var{name-r= egexp}. > =A0 ^^^^^^^^^^^^^^^^^^^^^^^^^^ > "Disable pretty-printers", in plural. > >> +@item enable pretty-printer @var{object-regexp} @var{name-regexp} >> +Enable the pretty-printer matching @var{object-regexp} and @var{name-re= gexp}. > =A0 ^^^^^^^^^^^^^^^^^^^^^^^^^ > Ditto. > >> +Note that for @code{bar} the entire printer can be disabled, >> +as can each individual @code{subprinter}. > > Why is "subprinter" in @code here? > >> +When a printer handles several types we call the printer for each type >> +a @code{subprinter}. > > @dfn, and I suggest to rephrase as above. > >> +@node gdb.printing >> +@subsubsection gdb.printing > > An index entry here, please. > > Thanks. Thanks. This applies all your suggestions. And I still need approval for the code part. 2010-11-02 Doug Evans New python module gdb.printing, and new commands info pretty-printe= r, enable pretty-printer, disable pretty-printer. * NEWS: Mention them. * data-directory/Makefile.in (PYTHON_FILES): Add gdb/printing.py, gdb/command/__init__.py, gdb/command/pretty_printers.py. * python/lib/gdb/__init__.py: Install pretty-printer commands. * python/lib/gdb/printing.py: New file. * python/lib/gdb/command/__init__.py: New file. * python/lib/gdb/command/pretty_printers.py: New file. doc/ * gdb.texinfo (Pretty Printing): Expand into three sections, introduction, example, and commands. (Python API): Delete section Disabling Pretty-Printers, merge into Selecting Pretty-Printers. (Writing a Pretty-Printer): New section. Move the pretty-printer example here, and reformat to match python coding style. Add a sec= ond example using the gdb.printing module. (Python modules): Add gdb.printing. testsuite/ * gdb.python/py-pp-maint.c: New file. * gdb.python/py-pp-maint.exp: New file. * gdb.python/py-pp-maint.py: New file. --20cf303bf516677def0494155875 Content-Type: text/plain; charset=US-ASCII; name="gdb-101102-pp-maint-3.patch.txt" Content-Disposition: attachment; filename="gdb-101102-pp-maint-3.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gg125v4g0 Content-length: 69707 MjAxMC0xMS0wMiAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCU5l dyBweXRob24gbW9kdWxlIGdkYi5wcmludGluZywgYW5kIG5ldyBjb21tYW5k cyBpbmZvIHByZXR0eS1wcmludGVyLAoJZW5hYmxlIHByZXR0eS1wcmludGVy LCBkaXNhYmxlIHByZXR0eS1wcmludGVyLgoJKiBORVdTOiBNZW50aW9uIHRo ZW0uCgkqIGRhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluIChQWVRIT05fRklM RVMpOiBBZGQgZ2RiL3ByaW50aW5nLnB5LAoJZ2RiL2NvbW1hbmQvX19pbml0 X18ucHksIGdkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weS4KCSogcHl0 aG9uL2xpYi9nZGIvX19pbml0X18ucHk6IEluc3RhbGwgcHJldHR5LXByaW50 ZXIgY29tbWFuZHMuCgkqIHB5dGhvbi9saWIvZ2RiL3ByaW50aW5nLnB5OiBO ZXcgZmlsZS4KCSogcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9fX2luaXRfXy5w eTogTmV3IGZpbGUuCgkqIHB5dGhvbi9saWIvZ2RiL2NvbW1hbmQvcHJldHR5 X3ByaW50ZXJzLnB5OiBOZXcgZmlsZS4KCglkb2MvCgkqIGdkYi50ZXhpbmZv IChQcmV0dHkgUHJpbnRpbmcpOiBFeHBhbmQgaW50byB0aHJlZSBzZWN0aW9u cywKCWludHJvZHVjdGlvbiwgZXhhbXBsZSwgYW5kIGNvbW1hbmRzLgoJKFB5 dGhvbiBBUEkpOiBEZWxldGUgc2VjdGlvbiBEaXNhYmxpbmcgUHJldHR5LVBy aW50ZXJzLCBtZXJnZSBpbnRvCglTZWxlY3RpbmcgUHJldHR5LVByaW50ZXJz LgoJKFdyaXRpbmcgYSBQcmV0dHktUHJpbnRlcik6IE5ldyBzZWN0aW9uLiAg TW92ZSB0aGUgcHJldHR5LXByaW50ZXIKCWV4YW1wbGUgaGVyZSwgYW5kIHJl Zm9ybWF0IHRvIG1hdGNoIHB5dGhvbiBjb2Rpbmcgc3R5bGUuICBBZGQgYSBz ZWNvbmQKCWV4YW1wbGUgdXNpbmcgdGhlIGdkYi5wcmludGluZyBtb2R1bGUu CgkoUHl0aG9uIG1vZHVsZXMpOiBBZGQgZ2RiLnByaW50aW5nLgoKCXRlc3Rz dWl0ZS8KCSogZ2RiLnB5dGhvbi9weS1wcC1tYWludC5jOiBOZXcgZmlsZS4K CSogZ2RiLnB5dGhvbi9weS1wcC1tYWludC5leHA6IE5ldyBmaWxlLgoJKiBn ZGIucHl0aG9uL3B5LXBwLW1haW50LnB5OiBOZXcgZmlsZS4KCkluZGV4OiBO RVdTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvTkVXUyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MDcKZGlm ZiAtdSAtcCAtcjEuNDA3IE5FV1MKLS0tIE5FV1MJMTMgT2N0IDIwMTAgMjA6 MDg6NDIgLTAwMDAJMS40MDcKKysrIE5FV1MJMiBOb3YgMjAxMCAxNzoxNToy MSAtMDAwMApAQCAtMTYsNiArMTYsMTUgQEAKICAgICAgSXQgY29udGFpbnMg YSBjb2xsZWN0aW9uIG9mIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIGdk Yi5UeXBlcyBvYmplY3RzOgogICAgICBnZXRfYmFzaWNfdHlwZSwgaGFzX2Zp ZWxkLCBtYWtlX2VudW1fZGljdC4KIAorICAqKiBNb2R1bGUgZ2RiLnByaW50 aW5nIGhhcyBiZWVuIGFkZGVkLgorICAgICBJdCBjb250YWlucyB1dGlsaXRp ZXMgZm9yIHdyaXRpbmcgYW5kIHJlZ2lzdGVyaW5nIHByZXR0eS1wcmludGVy cy4KKyAgICAgTmV3IGNsYXNzZXM6IFByZXR0eVByaW50ZXIsICBTdWJQcmV0 dHlQcmludGVyLAorICAgICBSZWdleHBDb2xsZWN0aW9uUHJldHR5UHJpbnRl ci4KKyAgICAgTmV3IGZ1bmN0aW9uOiByZWdpc3Rlcl9wcmV0dHlfcHJpbnRl ci4KKworICAqKiBOZXcgY29tbWFuZHMgImluZm8gcHJldHR5LXByaW50ZXJz IiwgImVuYWJsZSBwcmV0dHktcHJpbnRlciIgYW5kCisgICAgICJkaXNhYmxl IHByZXR0eS1wcmludGVyIiBoYXZlIGJlZW4gYWRkZWQuCisKICogQysrIElt cHJvdmVtZW50czoKIAogICAqKiBHREIgbm93IHB1dHMgdGVtcGxhdGUgcGFy YW1ldGVycyBpbiBzY29wZSB3aGVuIGRlYnVnZ2luZyBpbiBhbgpJbmRleDog ZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9kYXRhLWRpcmVjdG9y eS9NYWtlZmlsZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYg LXUgLXAgLXIxLjQgTWFrZWZpbGUuaW4KLS0tIGRhdGEtZGlyZWN0b3J5L01h a2VmaWxlLmluCTIxIE9jdCAyMDEwIDIzOjUwOjQ1IC0wMDAwCTEuNAorKysg ZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4JMiBOb3YgMjAxMCAxNzoxNToy MSAtMDAwMApAQCAtNTIsNyArNTIsMTAgQEAgUFlUSE9OX0RJUiA9IHB5dGhv bgogUFlUSE9OX0lOU1RBTExfRElSID0gJChERVNURElSKS8kKEdEQl9EQVRB RElSKS8kKFBZVEhPTl9ESVIpCiBQWVRIT05fRklMRVMgPSBcCiAJZ2RiL19f aW5pdF9fLnB5IFwKLQlnZGIvdHlwZXMucHkKKwlnZGIvdHlwZXMucHkgXAor CWdkYi9wcmludGluZy5weSBcCisJZ2RiL2NvbW1hbmQvX19pbml0X18ucHkg XAorCWdkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weQogCiBGTEFHU19U T19QQVNTID0gXAogCSJwcmVmaXg9JChwcmVmaXgpIiBcCkluZGV4OiBkb2Mv Z2RiLnRleGluZm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9kb2MvZ2RiLnRleGluZm8sdgpyZXRyaWV2aW5n IHJldmlzaW9uIDEuNzcwCmRpZmYgLXUgLXAgLXIxLjc3MCBnZGIudGV4aW5m bwotLS0gZG9jL2dkYi50ZXhpbmZvCTMwIE9jdCAyMDEwIDA0OjM5OjQ3IC0w MDAwCTEuNzcwCisrKyBkb2MvZ2RiLnRleGluZm8JMiBOb3YgMjAxMCAxNzox NToyMSAtMDAwMApAQCAtODEyNyw4ICs4MTI3LDYwIEBAIFNob3cgd2hldGhl ciBDQHR7Kyt9IHZpcnR1YWwgZnVuY3Rpb24gdGEKIFB5dGhvbiBjb2RlLiAg SXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBkaXNwbGF5IG9mIGNvbXBsZXgg b2JqZWN0cy4gIFRoaXMKIG1lY2hhbmlzbSB3b3JrcyBmb3IgYm90aCBNSSBh bmQgdGhlIENMSS4KIAotRm9yIGV4YW1wbGUsIGhlcmUgaXMgaG93IGEgQ0B0 eysrfSBAY29kZXtzdGQ6OnN0cmluZ30gbG9va3Mgd2l0aG91dCBhCi1wcmV0 dHktcHJpbnRlcjoKK0BtZW51CisqIFByZXR0eS1QcmludGVyIEludHJvZHVj dGlvbjo6ICBJbnRyb2R1Y3Rpb24gdG8gcHJldHR5LXByaW50ZXJzCisqIFBy ZXR0eS1QcmludGVyIEV4YW1wbGU6OiAgICAgICBBbiBleGFtcGxlIHByZXR0 eS1wcmludGVyCisqIFByZXR0eS1QcmludGVyIENvbW1hbmRzOjogICAgICBQ cmV0dHktcHJpbnRlciBjb21tYW5kcworQGVuZCBtZW51CisKK0Bub2RlIFBy ZXR0eS1QcmludGVyIEludHJvZHVjdGlvbgorQHN1YnNlY3Rpb24gUHJldHR5 LVByaW50ZXIgSW50cm9kdWN0aW9uCisKK1doZW4gQHZhbHVle0dEQk59IHBy aW50cyBhIHZhbHVlLCBpdCBmaXJzdCBzZWVzIGlmIHRoZXJlIGlzIGEgcHJl dHR5LXByaW50ZXIKK3JlZ2lzdGVyZWQgZm9yIHRoZSB2YWx1ZSdzIHR5cGUu ICBJZiB0aGVyZSBpcyB0aGVuIEB2YWx1ZXtHREJOfSBpbnZva2VzIHRoZQor cHJldHR5LXByaW50ZXIgdG8gcHJpbnQgdGhlIHZhbHVlLiAgT3RoZXJ3aXNl IHRoZSB2YWx1ZSBpcyBwcmludGVkIG5vcm1hbGx5LgorCitQcmV0dHktcHJp bnRlcnMgYXJlIG5vcm1hbGx5IG5hbWVkLiAgVGhpcyBtYWtlcyB0aGVtIGVh c3kgdG8gbWFuYWdlLgorVGhlIEBzYW1we2luZm8gcHJldHR5LXByaW50ZXJ9 IGNvbW1hbmQgd2lsbCBsaXN0IGFsbCB0aGUgaW5zdGFsbGVkCitwcmV0dHkt cHJpbnRlcnMgd2l0aCB0aGVpciBuYW1lcy4KK0lmIGEgcHJldHR5LXByaW50 ZXIgY2FuIGhhbmRsZSBtdWx0aXBsZSBkYXRhIHR5cGVzLCB0aGVuIGl0cwor QGRmbntzdWJwcmludGVyc30gYXJlIHRoZSBwcmludGVycyBmb3IgdGhlIGlu ZGl2aWR1YWwgZGF0YSB0eXBlcy4KK0VhY2ggc3VjaCBzdWJwcmludGVyIGhh cyBpdHMgb3duIG5hbWUuCitUaGUgZm9ybWF0IG9mIHRoZSBuYW1lIGlzIEB2 YXJ7cHJpbnRlci1uYW1lfTpAdmFye3N1YnByaW50ZXItbmFtZX0uCisKK1By ZXR0eS1wcmludGVycyBhcmUgaW5zdGFsbGVkIGJ5IEBkZm57cmVnaXN0ZXJp bmd9IHRoZW0gd2l0aCBAdmFsdWV7R0RCTn0uCitUeXBpY2FsbHkgdGhleSBh cmUgYXV0b21hdGljYWxseSBsb2FkZWQgYW5kIHJlZ2lzdGVyZWQgd2hlbiB0 aGUgY29ycmVzcG9uZGluZworZGVidWcgaW5mb3JtYXRpb24gaXMgbG9hZGVk LCB0aHVzIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB3aXRob3V0IGhhdmluZyB0 bworZG8gYW55dGhpbmcgc3BlY2lhbC4KKworVGhlcmUgYXJlIHRocmVlIHBs YWNlcyB3aGVyZSBhIHByZXR0eS1wcmludGVyIGNhbiBiZSByZWdpc3RlcmVk LgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbQorUHJldHR5LXByaW50ZXJz IHJlZ2lzdGVyZWQgZ2xvYmFsbHkgYXJlIGF2YWlsYWJsZSB3aGVuIGRlYnVn Z2luZworYWxsIGluZmVyaW9ycy4KKworQGl0ZW0KK1ByZXR0eS1wcmludGVy cyByZWdpc3RlcmVkIHdpdGggYSBwcm9ncmFtIHNwYWNlIGFyZSBhdmFpbGFi bGUgb25seQord2hlbiBkZWJ1Z2dpbmcgdGhhdCBwcm9ncmFtLgorQHhyZWZ7 UHJvZ3NwYWNlcyBJbiBQeXRob259LCBmb3IgbW9yZSBkZXRhaWxzIG9uIHBy b2dyYW0gc3BhY2VzIGluIFB5dGhvbi4KKworQGl0ZW0KK1ByZXR0eS1wcmlu dGVycyByZWdpc3RlcmVkIHdpdGggYW4gb2JqZmlsZSBhcmUgbG9hZGVkIGFu ZCB1bmxvYWRlZAord2l0aCB0aGUgY29ycmVzcG9uZGluZyBvYmpmaWxlIChl LmcuLCBzaGFyZWQgbGlicmFyeSkuCitAeHJlZntPYmpmaWxlcyBJbiBQeXRo b259LCBmb3IgbW9yZSBkZXRhaWxzIG9uIG9iamZpbGVzIGluIFB5dGhvbi4K K0BlbmQgaXRlbWl6ZQorCitAeHJlZntTZWxlY3RpbmcgUHJldHR5LVByaW50 ZXJzfSwgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gaG93IAorcHJldHR5 LXByaW50ZXJzIGFyZSBzZWxlY3RlZCwKKworQHhyZWZ7V3JpdGluZyBhIFBy ZXR0eS1QcmludGVyfSwgZm9yIGltcGxlbWVudGluZyBwcmV0dHkgcHJpbnRl cnMKK2ZvciBuZXcgdHlwZXMuCisKK0Bub2RlIFByZXR0eS1QcmludGVyIEV4 YW1wbGUKK0BzdWJzZWN0aW9uIFByZXR0eS1QcmludGVyIEV4YW1wbGUKKwor SGVyZSBpcyBob3cgYSBDQHR7Kyt9IEBjb2Rle3N0ZDo6c3RyaW5nfSBsb29r cyB3aXRob3V0IGEgcHJldHR5LXByaW50ZXI6CiAKIEBzbWFsbGV4YW1wbGUK IChAdmFsdWV7R0RCUH0pIHByaW50IHMKQEAgLTgxNTMsOCArODIwNSw5MSBA QCBXaXRoIGEgcHJldHR5LXByaW50ZXIgZm9yIEBjb2Rle3N0ZDo6c3RyCiAk MiA9ICJhYmNkIgogQGVuZCBzbWFsbGV4YW1wbGUKIAotRm9yIGltcGxlbWVu dGluZyBwcmV0dHkgcHJpbnRlcnMgZm9yIG5ldyB0eXBlcyB5b3Ugc2hvdWxk IHJlYWQgdGhlIFB5dGhvbiBBUEkKLWRldGFpbHMgKEBweHJlZntQcmV0dHkg UHJpbnRpbmcgQVBJfSkuCitAbm9kZSBQcmV0dHktUHJpbnRlciBDb21tYW5k cworQHN1YnNlY3Rpb24gUHJldHR5LVByaW50ZXIgQ29tbWFuZHMKK0BjaW5k ZXggcHJldHR5LXByaW50ZXIgY29tbWFuZHMKKworQHRhYmxlIEBjb2RlCitA a2luZGV4IGluZm8gcHJldHR5LXByaW50ZXIKK0BpdGVtIGluZm8gcHJldHR5 LXByaW50ZXIgW0B2YXJ7b2JqZWN0LXJlZ2V4cH0gW0B2YXJ7bmFtZS1yZWdl eHB9XV0KK1ByaW50IHRoZSBsaXN0IG9mIGluc3RhbGxlZCBwcmV0dHktcHJp bnRlcnMuCitUaGlzIGluY2x1ZGVzIGRpc2FibGVkIHByZXR0eS1wcmludGVy cywgd2hpY2ggYXJlIG1hcmtlZCBhcyBzdWNoLgorCitAdmFye29iamVjdC1y ZWdleHB9IGlzIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSBv YmplY3RzCit3aG9zZSBwcmV0dHktcHJpbnRlcnMgdG8gbGlzdC4KK09iamVj dHMgY2FuIGJlIEBjb2Rle2dsb2JhbH0sIHRoZSBwcm9ncmFtIHNwYWNlJ3Mg ZmlsZQorKEBweHJlZntQcm9nc3BhY2VzIEluIFB5dGhvbn0pLAorYW5kIHRo ZSBvYmplY3QgZmlsZXMgd2l0aGluIHRoYXQgcHJvZ3JhbSBzcGFjZSAoQHB4 cmVme09iamZpbGVzIEluIFB5dGhvbn0pLgorQHhyZWZ7U2VsZWN0aW5nIFBy ZXR0eS1QcmludGVyc30sIGZvciBkZXRhaWxzIG9uIGhvdyBAdmFsdWV7R0RC Tn0KK2xvb2tzIHVwIGEgcHJpbnRlciBmcm9tIHRoZXNlIHRocmVlIG9iamVj dHMuCisKK0B2YXJ7bmFtZS1yZWdleHB9IGlzIGEgcmVndWxhciBleHByZXNz aW9uIG1hdGNoaW5nIHRoZSBuYW1lIG9mIHRoZSBwcmludGVycwordG8gbGlz dC4KKworQGtpbmRleCBkaXNhYmxlIHByZXR0eS1wcmludGVyCitAaXRlbSBk aXNhYmxlIHByZXR0eS1wcmludGVyIFtAdmFye29iamVjdC1yZWdleHB9IFtA dmFye25hbWUtcmVnZXhwfV1dCitEaXNhYmxlIHByZXR0eS1wcmludGVycyBt YXRjaGluZyBAdmFye29iamVjdC1yZWdleHB9IGFuZCBAdmFye25hbWUtcmVn ZXhwfS4KK0EgZGlzYWJsZWQgcHJldHR5LXByaW50ZXIgaXMgbm90IGZvcmdv dHRlbiwgaXQgbWF5IGJlIGVuYWJsZWQgYWdhaW4gbGF0ZXIuCisKK0BraW5k ZXggZW5hYmxlIHByZXR0eS1wcmludGVyCitAaXRlbSBlbmFibGUgcHJldHR5 LXByaW50ZXIgW0B2YXJ7b2JqZWN0LXJlZ2V4cH0gW0B2YXJ7bmFtZS1yZWdl eHB9XV0KK0VuYWJsZSBwcmV0dHktcHJpbnRlcnMgbWF0Y2hpbmcgQHZhcntv YmplY3QtcmVnZXhwfSBhbmQgQHZhcntuYW1lLXJlZ2V4cH0uCitAZW5kIHRh YmxlCisKK0V4YW1wbGU6CisKK1N1cHBvc2Ugd2UgaGF2ZSB0aHJlZSBwcmV0 dHktcHJpbnRlcnMgaW5zdGFsbGVkOiBvbmUgZnJvbSBsaWJyYXJ5MS5zbwor bmFtZWQgQGNvZGV7Zm9vfSB0aGF0IHByaW50cyBvYmplY3RzIG9mIHR5cGUg QGNvZGV7Zm9vfSwgYW5kCithbm90aGVyIGZyb20gbGlicmFyeTIuc28gbmFt ZWQgQGNvZGV7YmFyfSB0aGF0IHByaW50cyB0d28gdHlwZXMgb2Ygb2JqZWN0 cywKK0Bjb2Rle2JhcjF9IGFuZCBAY29kZXtiYXIyfS4KKworQHNtYWxsZXhh bXBsZQorKGdkYikgaW5mbyBwcmV0dHktcHJpbnRlcgorbGlicmFyeTEuc286 CisgIGZvbworbGlicmFyeTIuc286CisgIGJhcgorICAgIGJhcjEKKyAgICBi YXIyCisoZ2RiKSBpbmZvIHByZXR0eS1wcmludGVyIGxpYnJhcnkyCitsaWJy YXJ5Mi5zbzoKKyAgYmFyCisgICAgYmFyMQorICAgIGJhcjIKKyhnZGIpIGRp c2FibGUgcHJldHR5LXByaW50ZXIgbGlicmFyeTEKKzEgcHJpbnRlciBkaXNh YmxlZAorMiBvZiAzIHByaW50ZXJzIGVuYWJsZWQKKyhnZGIpIGluZm8gcHJl dHR5LXByaW50ZXIKK2xpYnJhcnkxLnNvOgorICBmb28gW2Rpc2FibGVkXQor bGlicmFyeTIuc286CisgIGJhcgorICAgIGJhcjEKKyAgICBiYXIyCisoZ2Ri KSBkaXNhYmxlIHByZXR0eS1wcmludGVyIGxpYnJhcnkyIGJhcjpiYXIxCisx IHByaW50ZXIgZGlzYWJsZWQKKzEgb2YgMyBwcmludGVycyBlbmFibGVkCiso Z2RiKSBpbmZvIHByZXR0eS1wcmludGVyIGxpYnJhcnkyCitsaWJyYXJ5MS5z bzoKKyAgZm9vIFtkaXNhYmxlZF0KK2xpYnJhcnkyLnNvOgorICBiYXIKKyAg ICBiYXIxIFtkaXNhYmxlZF0KKyAgICBiYXIyCisoZ2RiKSBkaXNhYmxlIHBy ZXR0eS1wcmludGVyIGxpYnJhcnkyIGJhcgorMSBwcmludGVyIGRpc2FibGVk CiswIG9mIDMgcHJpbnRlcnMgZW5hYmxlZAorKGdkYikgaW5mbyBwcmV0dHkt cHJpbnRlciBsaWJyYXJ5MgorbGlicmFyeTEuc286CisgIGZvbyBbZGlzYWJs ZWRdCitsaWJyYXJ5Mi5zbzoKKyAgYmFyIFtkaXNhYmxlZF0KKyAgICBiYXIx IFtkaXNhYmxlZF0KKyAgICBiYXIyCitAZW5kIHNtYWxsZXhhbXBsZQorCitO b3RlIHRoYXQgZm9yIEBjb2Rle2Jhcn0gdGhlIGVudGlyZSBwcmludGVyIGNh biBiZSBkaXNhYmxlZCwKK2FzIGNhbiBlYWNoIGluZGl2aWR1YWwgc3VicHJp bnRlci4KIAogQG5vZGUgVmFsdWUgSGlzdG9yeQogQHNlY3Rpb24gVmFsdWUg SGlzdG9yeQpAQCAtMjA0ODQsNyArMjA2MTksNyBAQCBzaXR1YXRpb24sIGEg UHl0aG9uIEBjb2Rle0tleWJvYXJkSW50ZXJyCiAqIFR5cGVzIEluIFB5dGhv bjo6ICAgICAgICAgICAgIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiB0eXBl cy4KICogUHJldHR5IFByaW50aW5nIEFQSTo6ICAgICAgICAgUHJldHR5LXBy aW50aW5nIHZhbHVlcy4KICogU2VsZWN0aW5nIFByZXR0eS1QcmludGVyczo6 ICAgSG93IEdEQiBjaG9vc2VzIGEgcHJldHR5LXByaW50ZXIuCi0qIERpc2Fi bGluZyBQcmV0dHktUHJpbnRlcnM6OiAgIERpc2FibGluZyBicm9rZW4gcHJp bnRlcnMuCisqIFdyaXRpbmcgYSBQcmV0dHktUHJpbnRlcjo6ICAgIFdyaXRp bmcgYSBQcmV0dHktUHJpbnRlci4KICogSW5mZXJpb3JzIEluIFB5dGhvbjo6 ICAgICAgICAgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGluZmVyaW9ycyAo cHJvY2Vzc2VzKQogKiBUaHJlYWRzIEluIFB5dGhvbjo6ICAgICAgICAgICBB Y2Nlc3NpbmcgaW5mZXJpb3IgdGhyZWFkcyBmcm9tIFB5dGhvbi4KICogQ29t bWFuZHMgSW4gUHl0aG9uOjogICAgICAgICAgSW1wbGVtZW50aW5nIG5ldyBj b21tYW5kcyBpbiBQeXRob24uCkBAIC0yMTM0OSwxMiArMjE0ODQsMTMgQEAg cHJpbnRlciBleGlzdHMsIHRoZW4gdGhpcyByZXR1cm5zIEBjb2RlewogCiBU aGUgUHl0aG9uIGxpc3QgQGNvZGV7Z2RiLnByZXR0eV9wcmludGVyc30gY29u dGFpbnMgYW4gYXJyYXkgb2YKIGZ1bmN0aW9ucyBvciBjYWxsYWJsZSBvYmpl Y3RzIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgdmlhIGFkZGl0aW9uCi1h cyBhIHByZXR0eS1wcmludGVyLgorYXMgYSBwcmV0dHktcHJpbnRlci4gIFBy aW50ZXJzIGluIHRoaXMgbGlzdCBhcmUgY2FsbGVkIEBjb2Rle2dsb2JhbH0K K3ByaW50ZXJzLCB0aGV5J3JlIGF2YWlsYWJsZSB3aGVuIGRlYnVnZ2luZyBh bGwgaW5mZXJpb3JzLgogRWFjaCBAY29kZXtnZGIuUHJvZ3NwYWNlfSBjb250 YWlucyBhIEBjb2Rle3ByZXR0eV9wcmludGVyc30gYXR0cmlidXRlLgogRWFj aCBAY29kZXtnZGIuT2JqZmlsZX0gYWxzbyBjb250YWlucyBhIEBjb2Rle3By ZXR0eV9wcmludGVyc30KIGF0dHJpYnV0ZS4KIAotQSBmdW5jdGlvbiBvbiBv bmUgb2YgdGhlc2UgbGlzdHMgaXMgcGFzc2VkIGEgc2luZ2xlIEBjb2Rle2dk Yi5WYWx1ZX0KK0VhY2ggZnVuY3Rpb24gb24gdGhlc2UgbGlzdHMgaXMgcGFz c2VkIGEgc2luZ2xlIEBjb2Rle2dkYi5WYWx1ZX0KIGFyZ3VtZW50IGFuZCBz aG91bGQgcmV0dXJuIGEgcHJldHR5LXByaW50ZXIgb2JqZWN0IGNvbmZvcm1p bmcgdG8gdGhlCiBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhYm92ZSAoQHB4cmVm e1ByZXR0eSBQcmludGluZyBBUEl9KS4gIElmIGEgZnVuY3Rpb24KIGNhbm5v dCBjcmVhdGUgYSBwcmV0dHktcHJpbnRlciBmb3IgdGhlIHZhbHVlLCBpdCBz aG91bGQgcmV0dXJuCkBAIC0yMTM2Miw5ICsyMTQ5OCw4IEBAIGNhbm5vdCBj cmVhdGUgYSBwcmV0dHktcHJpbnRlciBmb3IgdGhlIHYKIAogQHZhbHVle0dE Qk59IGZpcnN0IGNoZWNrcyB0aGUgQGNvZGV7cHJldHR5X3ByaW50ZXJzfSBh dHRyaWJ1dGUgb2YgZWFjaAogQGNvZGV7Z2RiLk9iamZpbGV9IGluIHRoZSBj dXJyZW50IHByb2dyYW0gc3BhY2UgYW5kIGl0ZXJhdGl2ZWx5IGNhbGxzCi1l YWNoIGVuYWJsZWQgZnVuY3Rpb24gKEBweHJlZntEaXNhYmxpbmcgUHJldHR5 LVByaW50ZXJzfSkKLWluIHRoZSBsaXN0IGZvciB0aGF0IEBjb2Rle2dkYi5P YmpmaWxlfSB1bnRpbCBpdCByZWNlaXZlcwotYSBwcmV0dHktcHJpbnRlciBv YmplY3QuCitlYWNoIGVuYWJsZWQgbG9va3VwIHJvdXRpbmUgaW4gdGhlIGxp c3QgZm9yIHRoYXQgQGNvZGV7Z2RiLk9iamZpbGV9Cit1bnRpbCBpdCByZWNl aXZlcyBhIHByZXR0eS1wcmludGVyIG9iamVjdC4KIElmIG5vIHByZXR0eS1w cmludGVyIGlzIGZvdW5kIGluIHRoZSBvYmpmaWxlIGxpc3RzLCBAdmFsdWV7 R0RCTn0gdGhlbgogc2VhcmNoZXMgdGhlIHByZXR0eS1wcmludGVyIGxpc3Qg b2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSBzcGFjZSwKIGNhbGxpbmcgZWFjaCBl bmFibGVkIGZ1bmN0aW9uIHVudGlsIGFuIG9iamVjdCBpcyByZXR1cm5lZC4K QEAgLTIxMzc3LDIwICsyMTUxMiw0MyBAQCBnaXZlbiBsaXN0LCBmdW5jdGlv bnMgYXJlIGFsd2F5cyBpbnZva2VkCiBhbmQgaXRlcmF0ZWQgb3ZlciBzZXF1 ZW50aWFsbHkgdW50aWwgdGhlIGVuZCBvZiB0aGUgbGlzdCwgb3IgYSBwcmlu dGVyCiBvYmplY3QgaXMgcmV0dXJuZWQuCiAKK0ZvciB2YXJpb3VzIHJlYXNv bnMgYSBwcmV0dHktcHJpbnRlciBtYXkgbm90IHdvcmsuCitGb3IgZXhhbXBs ZSwgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgbWF5IGhhdmUgY2hh bmdlZCBhbmQKK3RoZSBwcmV0dHktcHJpbnRlciBpcyBvdXQgb2YgZGF0ZS4K KworVGhlIGNvbnNlcXVlbmNlcyBvZiBhIGJyb2tlbiBwcmV0dHktcHJpbnRl ciBhcmUgc2V2ZXJlIGVub3VnaCB0aGF0CitAdmFsdWV7R0RCTn0gcHJvdmlk ZXMgc3VwcG9ydCBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBpbmRpdmlk dWFsCitwcmludGVycy4gIEZvciBleGFtcGxlLCBpZiBAY29kZXtwcmludCBm cmFtZS1hcmd1bWVudHN9IGlzIG9uLAorYSBiYWNrdHJhY2UgY2FuIGJlY29t ZSBoaWdobHkgaWxsZWdpYmxlIGlmIGFueSBhcmd1bWVudCBpcyBwcmludGVk Cit3aXRoIGEgYnJva2VuIHByaW50ZXIuCisKK1ByZXR0eS1wcmludGVycyBh cmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgYnkgYXR0YWNoaW5nIGFuIEBjb2Rl e2VuYWJsZWR9CithdHRyaWJ1dGUgdG8gdGhlIHJlZ2lzdGVyZWQgZnVuY3Rp b24gb3IgY2FsbGFibGUgb2JqZWN0LiAgSWYgdGhpcyBhdHRyaWJ1dGUKK2lz IHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBAY29kZXtGYWxzZX0sIHRoZSBw cmludGVyIGlzIGRpc2FibGVkLCBvdGhlcndpc2UKK3RoZSBwcmludGVyIGlz IGVuYWJsZWQuCisKK0Bub2RlIFdyaXRpbmcgYSBQcmV0dHktUHJpbnRlcgor QHN1YnN1YnNlY3Rpb24gV3JpdGluZyBhIFByZXR0eS1QcmludGVyCitAY2lu ZGV4IHdyaXRpbmcgYSBwcmV0dHktcHJpbnRlcgorCitBIHByZXR0eS1wcmlu dGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0czogYSBsb29rdXAgZnVuY3Rpb24g dG8gZGV0ZWN0CitpZiB0aGUgdHlwZSBpcyBzdXBwb3J0ZWQsIGFuZCB0aGUg cHJpbnRlciBpdHNlbGYuCisKIEhlcmUgaXMgYW4gZXhhbXBsZSBzaG93aW5n IGhvdyBhIEBjb2Rle3N0ZDo6c3RyaW5nfSBwcmludGVyIG1pZ2h0IGJlCi13 cml0dGVuOgord3JpdHRlbi4gIEB4cmVme1ByZXR0eSBQcmludGluZyBBUEl9 LCBmb3IgZGV0YWlscyBvbiB0aGUgQVBJIHRoaXMgY2xhc3MKK211c3QgcHJv dmlkZS4KIAogQHNtYWxsZXhhbXBsZQotY2xhc3MgU3RkU3RyaW5nUHJpbnRl cjoKK2NsYXNzIFN0ZFN0cmluZ1ByaW50ZXIob2JqZWN0KToKICAgICAiUHJp bnQgYSBzdGQ6OnN0cmluZyIKIAotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwg dmFsKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsKToKICAgICAgICAg c2VsZi52YWwgPSB2YWwKIAotICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgor ICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxm LnZhbFsnX01fZGF0YXBsdXMnXVsnX01fcCddCiAKLSAgICBkZWYgZGlzcGxh eV9oaW50IChzZWxmKToKKyAgICBkZWYgZGlzcGxheV9oaW50KHNlbGYpOgog ICAgICAgICByZXR1cm4gJ3N0cmluZycKIEBlbmQgc21hbGxleGFtcGxlCiAK QEAgLTIxMzk4LDE1ICsyMTU1NiwxMyBAQCBBbmQgaGVyZSBpcyBhbiBleGFt cGxlIHNob3dpbmcgaG93IGEgbG9vCiBleGFtcGxlIGFib3ZlIG1pZ2h0IGJl IHdyaXR0ZW4uCiAKIEBzbWFsbGV4YW1wbGUKLWRlZiBzdHJfbG9va3VwX2Z1 bmN0aW9uICh2YWwpOgotCitkZWYgc3RyX2xvb2t1cF9mdW5jdGlvbih2YWwp OgogICAgIGxvb2t1cF90YWcgPSB2YWwudHlwZS50YWcKLSAgICByZWdleCA9 IHJlLmNvbXBpbGUgKCJec3RkOjpiYXNpY19zdHJpbmc8Y2hhciwuKj4kIikK ICAgICBpZiBsb29rdXBfdGFnID09IE5vbmU6CiAgICAgICAgIHJldHVybiBO b25lCi0gICAgaWYgcmVnZXgubWF0Y2ggKGxvb2t1cF90YWcpOgotICAgICAg ICByZXR1cm4gU3RkU3RyaW5nUHJpbnRlciAodmFsKQotICAgIAorICAgIHJl Z2V4ID0gcmUuY29tcGlsZSgiXnN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsLio+ JCIpCisgICAgaWYgcmVnZXgubWF0Y2gobG9va3VwX3RhZyk6CisgICAgICAg IHJldHVybiBTdGRTdHJpbmdQcmludGVyKHZhbCkKICAgICByZXR1cm4gTm9u ZQogQGVuZCBzbWFsbGV4YW1wbGUKIApAQCAtMjE0NDIsOCArMjE1OTgsOCBA QCBUbyBjb250aW51ZSB0aGUgQGNvZGV7c3RkOjpzdHJpbmd9IGV4YW1wCiB0 aGlzIGNvZGUgbWlnaHQgYXBwZWFyIGluIEBjb2Rle2dkYi5saWJzdGRjeHgu djZ9OgogCiBAc21hbGxleGFtcGxlCi1kZWYgcmVnaXN0ZXJfcHJpbnRlcnMg KG9iamZpbGUpOgotICAgIG9iamZpbGUucHJldHR5X3ByaW50ZXJzLmFkZCAo c3RyX2xvb2t1cF9mdW5jdGlvbikKK2RlZiByZWdpc3Rlcl9wcmludGVycyhv YmpmaWxlKToKKyAgICBvYmpmaWxlLnByZXR0eV9wcmludGVycy5hZGQoc3Ry X2xvb2t1cF9mdW5jdGlvbikKIEBlbmQgc21hbGxleGFtcGxlCiAKIEBub2lu ZGVudApAQCAtMjE0NTEsMjcgKzIxNjA3LDkyIEBAIEFuZCB0aGVuIHRoZSBj b3JyZXNwb25kaW5nIGNvbnRlbnRzIG9mIHQKIAogQHNtYWxsZXhhbXBsZQog aW1wb3J0IGdkYi5saWJzdGRjeHgudjYKLWdkYi5saWJzdGRjeHgudjYucmVn aXN0ZXJfcHJpbnRlcnMgKGdkYi5jdXJyZW50X29iamZpbGUgKCkpCitnZGIu bGlic3RkY3h4LnY2LnJlZ2lzdGVyX3ByaW50ZXJzKGdkYi5jdXJyZW50X29i amZpbGUoKSkKIEBlbmQgc21hbGxleGFtcGxlCiAKLUBub2RlIERpc2FibGlu ZyBQcmV0dHktUHJpbnRlcnMKLUBzdWJzdWJzZWN0aW9uIERpc2FibGluZyBQ cmV0dHktUHJpbnRlcnMKLUBjaW5kZXggZGlzYWJsaW5nIHByZXR0eS1wcmlu dGVycworVGhlIHByZXZpb3VzIGV4YW1wbGUgaWxsdXN0cmF0ZXMgYSBiYXNp YyBwcmV0dHktcHJpbnRlci4KK1RoZXJlIGFyZSBhIGZldyB0aGluZ3MgdGhh dCBjYW4gYmUgaW1wcm92ZWQgb24uCitUaGUgcHJpbnRlciBkb2Vzbid0IGhh dmUgYSBuYW1lLCBtYWtpbmcgaXQgaGFyZCB0byBpZGVudGlmeSBpbiBhCits aXN0IG9mIGluc3RhbGxlZCBwcmludGVycy4gIFRoZSBsb29rdXAgZnVuY3Rp b24gaGFzIGEgbmFtZSwgYnV0Citsb29rdXAgZnVuY3Rpb25zIGNhbiBoYXZl IGFyYml0cmFyeSwgZXZlbiBpZGVudGljYWwsIG5hbWVzLgogCi1Gb3IgdmFy aW91cyByZWFzb25zIGEgcHJldHR5LXByaW50ZXIgbWF5IG5vdCB3b3JrLgot Rm9yIGV4YW1wbGUsIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIG1h eSBoYXZlIGNoYW5nZWQgYW5kCi10aGUgcHJldHR5LXByaW50ZXIgaXMgb3V0 IG9mIGRhdGUuCitTZWNvbmQsIHRoZSBwcmludGVyIG9ubHkgaGFuZGxlcyBv bmUgdHlwZSwgd2hlcmVhcyBhIGxpYnJhcnkgdHlwaWNhbGx5IGhhcworc2V2 ZXJhbCB0eXBlcy4gIE9uZSBjb3VsZCBpbnN0YWxsIGEgbG9va3VwIGZ1bmN0 aW9uIGZvciBlYWNoIGRlc2lyZWQgdHlwZQoraW4gdGhlIGxpYnJhcnksIGJ1 dCBvbmUgY291bGQgYWxzbyBoYXZlIGEgc2luZ2xlIGxvb2t1cCBmdW5jdGlv biByZWNvZ25pemUKK3NldmVyYWwgdHlwZXMuICBUaGUgbGF0dGVyIGlzIHRo ZSBjb252ZW50aW9uYWwgd2F5IHRoaXMgaXMgaGFuZGxlZC4KK0lmIGEgcHJl dHR5LXByaW50ZXIgY2FuIGhhbmRsZSBtdWx0aXBsZSBkYXRhIHR5cGVzLCB0 aGVuIGl0cworQGRmbntzdWJwcmludGVyc30gYXJlIHRoZSBwcmludGVycyBm b3IgdGhlIGluZGl2aWR1YWwgZGF0YSB0eXBlcy4KIAotVGhlIGNvbnNlcXVl bmNlcyBvZiBhIGJyb2tlbiBwcmV0dHktcHJpbnRlciBhcmUgc2V2ZXJlIGVu b3VnaCB0aGF0Ci1AdmFsdWV7R0RCTn0gcHJvdmlkZXMgc3VwcG9ydCBmb3Ig ZW5hYmxpbmcgYW5kIGRpc2FibGluZyBpbmRpdmlkdWFsCi1wcmludGVycy4g IEZvciBleGFtcGxlLCBpZiBAY29kZXtwcmludCBmcmFtZS1hcmd1bWVudHN9 IGlzIG9uLAotYSBiYWNrdHJhY2UgY2FuIGJlY29tZSBoaWdobHkgaWxsZWdp YmxlIGlmIGFueSBhcmd1bWVudCBpcyBwcmludGVkCi13aXRoIGEgYnJva2Vu IHByaW50ZXIuCitUaGUgQGNvZGV7Z2RiLnByaW50aW5nfSBtb2R1bGUgcHJv dmlkZXMgYSBmb3JtYWwgd2F5IG9mIHNvbHZpbmcgdGhlc2UKK3Byb2JsZW1z IChAcHhyZWZ7Z2RiLnByaW50aW5nfSkuCitIZXJlIGlzIGFub3RoZXIgZXhh bXBsZSB0aGF0IGhhbmRsZXMgbXVsdGlwbGUgdHlwZXMuCiAKLVByZXR0eS1w cmludGVycyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgYnkgYXR0YWNoaW5n IGFuIEBjb2Rle2VuYWJsZWR9Ci1hdHRyaWJ1dGUgdG8gdGhlIHJlZ2lzdGVy ZWQgZnVuY3Rpb24gb3IgY2FsbGFibGUgb2JqZWN0LiAgSWYgdGhpcyBhdHRy aWJ1dGUKLWlzIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBAY29kZXtGYWxz ZX0sIHRoZSBwcmludGVyIGlzIGRpc2FibGVkLCBvdGhlcndpc2UKLXRoZSBw cmludGVyIGlzIGVuYWJsZWQuCitUaGVzZSBhcmUgdGhlIHR5cGVzIHdlIGFy ZSBnb2luZyB0byBwcmV0dHktcHJpbnQ6CisKK0BzbWFsbGV4YW1wbGUKK3N0 cnVjdCBmb28gQHsgaW50IGEsIGI7IEB9Oworc3RydWN0IGJhciBAeyBzdHJ1 Y3QgZm9vIHgsIHk7IEB9OworQGVuZCBzbWFsbGV4YW1wbGUKKworSGVyZSBh cmUgdGhlIHByaW50ZXJzOgorCitAc21hbGxleGFtcGxlCitjbGFzcyBmb29Q cmludGVyOgorICAgICIiIlByaW50IGEgZm9vIG9iamVjdC4iIiIKKworICAg IGRlZiBfX2luaXRfXyhzZWxmLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9 IHZhbAorCisgICAgZGVmIHRvX3N0cmluZyhzZWxmKToKKyAgICAgICAgcmV0 dXJuICgiYT08IiArIHN0cihzZWxmLnZhbFsiYSJdKSArCisgICAgICAgICAg ICAgICAgIj4gYj08IiArIHN0cihzZWxmLnZhbFsiYiJdKSArICI+IikKKwor Y2xhc3MgYmFyUHJpbnRlcjoKKyAgICAiIiJQcmludCBhIGJhciBvYmplY3Qu IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsKToKKyAgICAgICAg c2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6Cisg ICAgICAgIHJldHVybiAoIng9PCIgKyBzdHIoc2VsZi52YWxbIngiXSkgKwor ICAgICAgICAgICAgICAgICI+IHk9PCIgKyBzdHIoc2VsZi52YWxbInkiXSkg KyAiPiIpCitAZW5kIHNtYWxsZXhhbXBsZQorCitUaGlzIGV4YW1wbGUgZG9l c24ndCBuZWVkIGEgbG9va3VwIGZ1bmN0aW9uLCB0aGF0IGlzIGhhbmRsZWQg YnkgdGhlCitAY29kZXtnZGIucHJpbnRpbmd9IG1vZHVsZS4gIEluc3RlYWQg YSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBidWlsZCB1cAordGhlIG9iamVj dCB0aGF0IGhhbmRsZXMgdGhlIGxvb2t1cC4KKworQHNtYWxsZXhhbXBsZQor aW1wb3J0IGdkYi5wcmludGluZworCitkZWYgYnVpbGRfcHJldHR5X3ByaW50 ZXIoKToKKyAgICBwcCA9IGdkYi5wcmludGluZy5SZWdleHBDb2xsZWN0aW9u UHJldHR5UHJpbnRlcigKKyAgICAgICAgIm15X2xpYnJhcnkiKQorICAgIHBw LmFkZF9wcmludGVyKCdmb28nLCAnXmZvbyQnLCBmb29QcmludGVyKQorICAg IHBwLmFkZF9wcmludGVyKCdiYXInLCAnXmJhciQnLCBiYXJQcmludGVyKQor ICAgIHJldHVybiBwcAorQGVuZCBzbWFsbGV4YW1wbGUKKworQW5kIGhlcmUg aXMgdGhlIGF1dG9sb2FkIHN1cHBvcnQ6CisKK0BzbWFsbGV4YW1wbGUKK2lt cG9ydCBnZGIucHJpbnRpbmcKK2ltcG9ydCBteV9saWJyYXJ5CitnZGIucHJp bnRpbmcucmVnaXN0ZXJfcHJldHR5X3ByaW50ZXIoCisgICAgZ2RiLmN1cnJl bnRfb2JqZmlsZSgpLAorICAgIG15X2xpYnJhcnkuYnVpbGRfcHJldHR5X3By aW50ZXIoKSkKK0BlbmQgc21hbGxleGFtcGxlCisKK0ZpbmFsbHksIHdoZW4g dGhpcyBwcmludGVyIGlzIGxvYWRlZCBpbnRvIEB2YWx1ZXtHREJOfSwgaGVy ZSBpcyB0aGUKK2NvcnJlc3BvbmRpbmcgb3V0cHV0IG9mIEBzYW1we2luZm8g cHJldHR5LXByaW50ZXJ9OgorCitAc21hbGxleGFtcGxlCisoZ2RiKSBpbmZv IHByZXR0eS1wcmludGVyCitteV9saWJyYXJ5LnNvOgorICBteV9saWJyYXJ5 CisgICAgZm9vCisgICAgYmFyCitAZW5kIHNtYWxsZXhhbXBsZQogCiBAbm9k ZSBJbmZlcmlvcnMgSW4gUHl0aG9uCiBAc3Vic3Vic2VjdGlvbiBJbmZlcmlv cnMgSW4gUHl0aG9uCkBAIC0yMjkyMCwxNiArMjMxNDEsNDIgQEAgdG9wIG9m IHRoZSBzb3VyY2UgdHJlZSB0byB0aGUgc291cmNlIHNlYQogQHN1YnNlY3Rp b24gUHl0aG9uIG1vZHVsZXMKIEBjaW5kZXggcHl0aG9uIG1vZHVsZXMKIAot QGMgSXQgaXMgYXNzdW1lZCB0aGF0IGF0IGxlYXN0IG9uZSBtb3JlIG1vZHVs ZSB3aWxsIGJlIGFkZGVkIGJlZm9yZQotQGMgdGhlIG5leHQgcmVsZWFzZSBv ZiBnZGIuICBUaHVzIHdlIHVzZSBhIG1lbnUgaGVyZS4KIEB2YWx1ZXtHREJO fSBjb21lcyB3aXRoIGEgbW9kdWxlIHRvIGFzc2lzdCB3cml0aW5nIFB5dGhv biBjb2RlLgogCiBAbWVudQorKiBnZGIucHJpbnRpbmc6OiAgICAgICBCdWls ZGluZyBhbmQgcmVnaXN0ZXJpbmcgcHJldHR5LXByaW50ZXJzLgogKiBnZGIu dHlwZXM6OiAgICAgICAgICBVdGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCB0 eXBlcy4KIEBlbmQgbWVudQogCitAbm9kZSBnZGIucHJpbnRpbmcKK0BzdWJz dWJzZWN0aW9uIGdkYi5wcmludGluZworQGNpbmRleCBnZGIucHJpbnRpbmcK KworVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjb2xsZWN0aW9uIG9mIHV0aWxp dGllcyBmb3Igd29ya2luZyB3aXRoCitwcmV0dHktcHJpbnRlcnMuCisKK0B0 YWJsZSBAY29kZQorQGl0ZW0gUHJldHR5UHJpbnRlciAoQHZhcntuYW1lfSwg QHZhcntzdWJwcmludGVyc309Tm9uZSkKK1RoaXMgY2xhc3Mgc3BlY2lmaWVz IHRoZSBBUEkgdGhhdCBtYWtlcyBAc2FtcHtpbmZvIHByZXR0eS1wcmludGVy fSwKK0BzYW1we2VuYWJsZSBwcmV0dHktcHJpbnRlcn0gYW5kIEBzYW1we2Rp c2FibGUgcHJldHR5LXByaW50ZXJ9IHdvcmsuCitQcmV0dHktcHJpbnRlcnMg c2hvdWxkIGdlbmVyYWxseSBpbmhlcml0IGZyb20gdGhpcyBjbGFzcy4KKwor QGl0ZW0gU3ViUHJldHR5UHJpbnRlciAoQHZhcntuYW1lfSkKK0ZvciBwcmlu dGVycyB0aGF0IGhhbmRsZSBtdWx0aXBsZSB0eXBlcywgdGhpcyBjbGFzcyBz cGVjaWZpZXMgdGhlCitjb3JyZXNwb25kaW5nIEFQSSBmb3IgdGhlIHN1YnBy aW50ZXJzLgorCitAaXRlbSBSZWdleHBDb2xsZWN0aW9uUHJldHR5UHJpbnRl ciAoQHZhcntuYW1lfSkKK1V0aWxpdHkgY2xhc3MgZm9yIGhhbmRsaW5nIG11 bHRpcGxlIHByaW50ZXJzLCBhbGwgcmVjb2duaXplZCB2aWEKK3JlZ3VsYXIg ZXhwcmVzc2lvbnMuCitAeHJlZntXcml0aW5nIGEgUHJldHR5LVByaW50ZXJ9 LCBmb3IgYW4gZXhhbXBsZS4KKworQGl0ZW0gcmVnaXN0ZXJfcHJldHR5X3By aW50ZXIgKEB2YXJ7b2JqfSwgQHZhcntwcmludGVyfSkKK1JlZ2lzdGVyIEB2 YXJ7cHJpbnRlcn0gd2l0aCB0aGUgcHJldHR5LXByaW50ZXIgbGlzdCBvZiBA dmFye29ian0uCitAZW5kIHRhYmxlCisKIEBub2RlIGdkYi50eXBlcwogQHN1 YnN1YnNlY3Rpb24gZ2RiLnR5cGVzCitAY2luZGV4IGdkYi50eXBlcwogCiBU aGlzIG1vZHVsZSBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVz IGZvciB3b3JraW5nIHdpdGgKIEBjb2Rle2dkYi5UeXBlc30gb2JqZWN0cy4K SW5kZXg6IHB5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5Cj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvcHl0aG9u L2xpYi9nZGIvX19pbml0X18ucHksdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu MQpkaWZmIC11IC1wIC1yMS4xIF9faW5pdF9fLnB5Ci0tLSBweXRob24vbGli L2dkYi9fX2luaXRfXy5weQk2IE9jdCAyMDEwIDE2OjAyOjQ0IC0wMDAwCTEu MQorKysgcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkJMiBOb3YgMjAxMCAx NzoxNToyMiAtMDAwMApAQCAtMTIsMyArMTIsNyBAQAogIwogIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQogIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor aW1wb3J0IGdkYi5jb21tYW5kLnByZXR0eV9wcmludGVycworCitnZGIuY29t bWFuZC5wcmV0dHlfcHJpbnRlcnMucmVnaXN0ZXJfcHJldHR5X3ByaW50ZXJf Y29tbWFuZHMoKQpJbmRleDogcHl0aG9uL2xpYi9nZGIvcHJpbnRpbmcucHkK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogcHl0aG9uL2xpYi9n ZGIvcHJpbnRpbmcucHkKZGlmZiAtTiBweXRob24vbGliL2dkYi9wcmludGlu Zy5weQotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK KysrIHB5dGhvbi9saWIvZ2RiL3ByaW50aW5nLnB5CTIgTm92IDIwMTAgMTc6 MTU6MjIgLTAwMDAKQEAgLTAsMCArMSwxOTcgQEAKKyMgUHJldHR5LXByaW50 ZXIgdXRpbGl0aWVzLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyIi IlV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIHByZXR0eS1wcmludGVycy4i IiIKKworaW1wb3J0IGdkYgoraW1wb3J0IGdkYi50eXBlcworaW1wb3J0IHJl CisKKworY2xhc3MgUHJldHR5UHJpbnRlcihvYmplY3QpOgorICAgICIiIkEg YmFzaWMgcHJldHR5LXByaW50ZXIuCisKKyAgICBBdHRyaWJ1dGVzOgorICAg ICAgICBuYW1lOiBBIHVuaXF1ZSBzdHJpbmcgYW1vbmcgYWxsIHByaW50ZXJz IGZvciB0aGUgY29udGV4dCBpbiB3aGljaAorICAgICAgICAgICAgICBpdCBp cyBkZWZpbmVkIChvYmpmaWxlLCBwcm9nc3BhY2UsIG9yIGdsb2JhbChnZGIp KSwgYW5kIHNob3VsZAorICAgICAgICAgICAgICBtZWFuaW5nZnVsbHkgZGVz Y3JpYmUgd2hhdCBjYW4gYmUgcHJldHR5LXByaW50ZWQuCisgICAgICAgICAg ICAgIEUuZy4sICJTdHJpbmdQaWVjZSIgb3IgInByb3RvYnVmcyIuCisgICAg ICAgIHN1YnByaW50ZXJzOiBBbiBpdGVyYWJsZSBvYmplY3Qgd2l0aCBlYWNo IGVsZW1lbnQgaGF2aW5nIGEgYG5hbWUnCisgICAgICAgICAgICAgICAgICAg ICBhdHRyaWJ1dGUsIGFuZCwgcG90ZW50aWFsbHksICJlbmFibGVkIiBhdHRy aWJ1dGUuCisgICAgICAgICAgICAgICAgICAgICBPciB0aGlzIGlzIE5vbmUg aWYgdGhlcmUgYXJlIG5vIHN1YnByaW50ZXJzLgorICAgICAgICBlbmFibGVk OiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgcHJpbnRlciBpcyBlbmFi bGVkLgorCisgICAgU3VicHJpbnRlcnMgYXJlIGZvciBzaXR1YXRpb25zIHdo ZXJlICJvbmUiIHByZXR0eS1wcmludGVyIGlzIGFjdHVhbGx5IGEKKyAgICBj b2xsZWN0aW9uIG9mIHNldmVyYWwgcHJpbnRlcnMuICBFLmcuLCBUaGUgbGli c3RkYysrIHByZXR0eS1wcmludGVyIGhhcworICAgIGEgcHJldHR5LXByaW50 ZXIgZm9yIGVhY2ggb2Ygc2V2ZXJhbCBkaWZmZXJlbnQgdHlwZXMsIGJhc2Vk IG9uIHJlZ2V4cHMuCisgICAgIiIiCisKKyAgICAjIFdoaWxlIG9uZSBtaWdo dCB3YW50IHRvIHB1c2ggc3VicHJpbnRlcnMgaW50byB0aGUgc3ViY2xhc3Ms IGl0J3MKKyAgICAjIHByZXNlbnQgaGVyZSB0byBmb3JtYWxpemUgc3VjaCBz dXBwb3J0IHRvIHNpbXBsaWZ5CisgICAgIyBjb21tYW5kcy9wcmV0dHlfcHJp bnRlcnMucHkuCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3Vi cHJpbnRlcnM9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAg ICAgICAgc2VsZi5zdWJwcmludGVycyA9IHN1YnByaW50ZXJzCisgICAgICAg IHNlbGYuZW5hYmxlZCA9IFRydWUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxm LCB2YWwpOgorICAgICAgICAjIFRoZSBzdWJjbGFzcyBtdXN0IGRlZmluZSB0 aGlzLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJQcmV0 dHlQcmludGVyIF9fY2FsbF9fIikKKworCitjbGFzcyBTdWJQcmV0dHlQcmlu dGVyKG9iamVjdCk6CisgICAgIiIiQmFzZWNsYXNzIGZvciBzdWItcHJldHR5 LXByaW50ZXJzLgorCisgICAgU3ViLXByZXR0eS1wcmludGVycyBuZWVkbid0 IHVzZSB0aGlzLCBidXQgaXQgZm9ybWFsaXplcyB3aGF0J3MgbmVlZGVkLgor CisgICAgQXR0cmlidXRlczoKKyAgICAgICAgbmFtZTogVGhlIG5hbWUgb2Yg dGhlIHN1YnByaW50ZXIuCisgICAgICAgIGVuYWJsZWQ6IEEgYm9vbGVhbiBp bmRpY2F0aW5nIGlmIHRoZSBzdWJwcmludGVyIGlzIGVuYWJsZWQuCisgICAg IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAg IHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5lbmFibGVkID0gVHJ1 ZQorCisKK2RlZiByZWdpc3Rlcl9wcmV0dHlfcHJpbnRlcihvYmosIHByaW50 ZXIpOgorICAgICIiIlJlZ2lzdGVyIHByZXR0eS1wcmludGVyIFBSSU5URVIg d2l0aCBPQkouCisKKyAgICBUaGUgcHJpbnRlciBpcyBhZGRlZCB0byB0aGUg ZnJvbnQgb2YgdGhlIHNlYXJjaCBsaXN0LCB0aHVzIG9uZSBjYW4gb3ZlcnJp ZGUKKyAgICBhbiBleGlzdGluZyBwcmludGVyIGlmIG9uZSBuZWVkcyB0by4K KworICAgIEFyZ3VtZW50czoKKyAgICAgICAgb2JqOiBFaXRoZXIgYW4gb2Jq ZmlsZSwgcHJvZ3NwYWNlLCBvciBOb25lIChpbiB3aGljaCBjYXNlIHRoZSBw cmludGVyCisgICAgICAgICAgICAgaXMgcmVnaXN0ZXJlZCBnbG9iYWxseSku CisgICAgICAgIHByaW50ZXI6IEVpdGhlciBhIGZ1bmN0aW9uIG9mIG9uZSBh cmd1bWVudCAob2xkIHdheSkgb3IgYW55IG9iamVjdAorICAgICAgICAgICAg ICAgICB3aGljaCBoYXMgYXR0cmlidXRlczogbmFtZSwgZW5hYmxlZCwgX19j YWxsX18uCisKKyAgICBSZXR1cm5zOgorICAgICAgICBOb3RoaW5nLgorCisg ICAgUmFpc2VzOgorICAgICAgICBUeXBlRXJyb3I6IEEgcHJvYmxlbSB3aXRo IHRoZSB0eXBlIG9mIHRoZSBwcmludGVyLgorICAgICAgICBWYWx1ZUVycm9y OiBUaGUgcHJpbnRlcidzIG5hbWUgY29udGFpbnMgYSBjb2xvbiAiOiIuCisK KyAgICBJZiB0aGUgY2FsbGVyIHdhbnRzIHRoZSBwcmludGVyIHRvIGJlIGxp c3RhYmxlIGFuZCBkaXNhYmxlYWJsZSwgaXQgbXVzdAorICAgIGZvbGxvdyB0 aGUgUHJldHR5UHJpbnRlciBBUEkuICBUaGlzIGFwcGxpZXMgdG8gdGhlIG9s ZCB3YXkgKGZ1bmN0aW9ucykgdG9vLgorICAgIElmIHByaW50ZXIgaXMgYW4g b2JqZWN0LCBfX2NhbGxfXyBpcyBhIG1ldGhvZCBvZiB0d28gYXJndW1lbnRz OgorICAgIHNlbGYsIGFuZCB0aGUgdmFsdWUgdG8gYmUgcHJldHR5LXByaW50 ZWQuICBTZWUgUHJldHR5UHJpbnRlci4KKyAgICAiIiIKKworICAgICMgV2F0 Y2ggZm9yIGJvdGggX19uYW1lX18gYW5kIG5hbWUuCisgICAgIyBGdW5jdGlv bnMgZ2V0IHRoZSBmb3JtZXIgZm9yIGZyZWUsIGJ1dCB3ZSBkb24ndCB3YW50 IHRvIHVzZSBhbgorICAgICMgYXR0cmlidXRlIG5hbWVkIF9fZm9vX18gZm9y IHByZXR0eS1wcmludGVycy1hcy1vYmplY3RzLgorICAgICMgSWYgcHJpbnRl ciBoYXMgYm90aCwgd2UgdXNlIGBuYW1lJy4KKyAgICBpZiBub3QgaGFzYXR0 cihwcmludGVyLCAiX19uYW1lX18iKSBhbmQgbm90IGhhc2F0dHIocHJpbnRl ciwgIm5hbWUiKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJwcmludGVy IG1pc3NpbmcgYXR0cmlidXRlOiBuYW1lIikKKyAgICBpZiBoYXNhdHRyKHBy aW50ZXIsICJuYW1lIikgYW5kIG5vdCBoYXNhdHRyKHByaW50ZXIsICJlbmFi bGVkIik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicHJpbnRlciBtaXNz aW5nIGF0dHJpYnV0ZTogZW5hYmxlZCIpIAorICAgIGlmIG5vdCBoYXNhdHRy KHByaW50ZXIsICJfX2NhbGxfXyIpOgorICAgICAgICByYWlzZSBUeXBlRXJy b3IoInByaW50ZXIgbWlzc2luZyBhdHRyaWJ1dGU6IF9fY2FsbF9fIikKKwor ICAgIGlmIG9iaiBpcyBOb25lOgorICAgICAgICBpZiBnZGIucGFyYW1ldGVy KCJ2ZXJib3NlIik6CisgICAgICAgICAgICBnZGIud3JpdGUoIlJlZ2lzdGVy aW5nIGdsb2JhbCAlcyBwcmV0dHktcHJpbnRlciAuLi5cbiIgJSBuYW1lKQor ICAgICAgICBvYmogPSBnZGIKKyAgICBlbHNlOgorICAgICAgICBpZiBnZGIu cGFyYW1ldGVyKCJ2ZXJib3NlIik6CisgICAgICAgICAgICBnZGIud3JpdGUo IlJlZ2lzdGVyaW5nICVzIHByZXR0eS1wcmludGVyIGZvciAlcyAuLi5cbiIg JQorICAgICAgICAgICAgICAgICAgICAgIChwcmludGVyLm5hbWUsIG9iai5m aWxlbmFtZSkpCisKKyAgICBpZiBoYXNhdHRyKHByaW50ZXIsICJuYW1lIik6 CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHByaW50ZXIubmFtZSwgYmFz ZXN0cmluZyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInByaW50 ZXIgbmFtZSBpcyBub3QgYSBzdHJpbmciKQorICAgICAgICAjIElmIHByaW50 ZXIgcHJvdmlkZXMgYSBuYW1lLCBtYWtlIHN1cmUgaXQgZG9lc24ndCBjb250 YWluICI6Ii4KKyAgICAgICAgIyBDb2xvbiBpcyB1c2VkIGJ5IHRoZSBpbmZv L2VuYWJsZS9kaXNhYmxlIHByZXR0eS1wcmludGVyIGNvbW1hbmRzCisgICAg ICAgICMgdG8gZGVsaW1pdCBzdWJwcmludGVycy4KKyAgICAgICAgaWYgcHJp bnRlci5uYW1lLmZpbmQoIjoiKSA+PSAwOgorICAgICAgICAgICAgcmFpc2Ug VmFsdWVFcnJvcigiY29sb24gJzonIGluIHByaW50ZXIgbmFtZSIpCisgICAg ICAgICMgQWxzbyBtYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlLgorICAg ICAgICAjIEFsYXMsIHdlIGNhbid0IGRvIHRoZSBzYW1lIGZvciBmdW5jdGlv bnMgYW5kIF9fbmFtZV9fLCB0aGV5IGNvdWxkCisgICAgICAgICMgYWxsIGhh dmUgYSBjYW5vbmljYWwgbmFtZSBsaWtlICJsb29rdXBfZnVuY3Rpb24iLgor ICAgICAgICAjIFBFUkY6IGdkYiByZWNvcmRzIHByaW50ZXJzIGluIGEgbGlz dCwgbWFraW5nIHRoaXMgaW5lZmZpY2llbnQuCisgICAgICAgIGlmIChwcmlu dGVyLm5hbWUgaW4KKyAgICAgICAgICAgICAgW3AubmFtZSBmb3IgcCBpbiBv YmoucHJldHR5X3ByaW50ZXJzIGlmIGhhc2F0dHIocCwgIm5hbWUiKV0pOgor ICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJwcmV0dHktcHJpbnRl ciBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICVzIiAlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRlci5uYW1lKQorCisgICAgb2JqLnByZXR0 eV9wcmludGVycy5pbnNlcnQoMCwgcHJpbnRlcikKKworCitjbGFzcyBSZWdl eHBDb2xsZWN0aW9uUHJldHR5UHJpbnRlcihQcmV0dHlQcmludGVyKToKKyAg ICAiIiJDbGFzcyBmb3IgaW1wbGVtZW50aW5nIGEgY29sbGVjdGlvbiBvZiBy ZWd1bGFyLWV4cHJlc3Npb24gYmFzZWQgcHJldHR5LXByaW50ZXJzLgorCisg ICAgSW50ZW5kZWQgdXNhZ2U6CisKKyAgICBwcmV0dHlfcHJpbnRlciA9IFJl Z2V4cENvbGxlY3Rpb25QcmV0dHlQcmludGVyKCJteV9saWJyYXJ5IikKKyAg ICBwcmV0dHlfcHJpbnRlci5hZGRfcHJpbnRlcigibXljbGFzczEiLCAiXm15 Y2xhc3MxJCIsIE15Q2xhc3MxUHJpbnRlcikKKyAgICAuLi4KKyAgICBwcmV0 dHlfcHJpbnRlci5hZGRfcHJpbnRlcigibXljbGFzc04iLCAiXm15Y2xhc3NO JCIsIE15Q2xhc3NOUHJpbnRlcikKKyAgICByZWdpc3Rlcl9wcmV0dHlfcHJp bnRlcihvYmosIHByZXR0eV9wcmludGVyKQorICAgICIiIgorCisgICAgY2xh c3MgUmVnZXhwU3VicHJpbnRlcihTdWJQcmV0dHlQcmludGVyKToKKyAgICAg ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHJlZ2V4cCwgZ2VuX3ByaW50 ZXIpOgorICAgICAgICAgICAgc3VwZXIoUmVnZXhwQ29sbGVjdGlvblByZXR0 eVByaW50ZXIuUmVnZXhwU3VicHJpbnRlciwgc2VsZikuX19pbml0X18obmFt ZSkKKyAgICAgICAgICAgIHNlbGYucmVnZXhwID0gcmVnZXhwCisgICAgICAg ICAgICBzZWxmLmdlbl9wcmludGVyID0gZ2VuX3ByaW50ZXIKKyAgICAgICAg ICAgIHNlbGYuY29tcGlsZWRfcmUgPSByZS5jb21waWxlKHJlZ2V4cCkKKwor ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc3VwZXIo UmVnZXhwQ29sbGVjdGlvblByZXR0eVByaW50ZXIsIHNlbGYpLl9faW5pdF9f KG5hbWUsIFtdKQorCisgICAgZGVmIGFkZF9wcmludGVyKHNlbGYsIG5hbWUs IHJlZ2V4cCwgZ2VuX3ByaW50ZXIpOgorICAgICAgICAiIiJBZGQgYSBwcmlu dGVyIHRvIHRoZSBsaXN0LgorCisgICAgICAgIFRoZSBwcmludGVyIGlzIGFk ZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisKKyAgICAgICAgQXJndW1l bnRzOgorICAgICAgICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIHN1YnBy aW50ZXIuCisgICAgICAgICAgICByZWdleHA6IFRoZSByZWd1bGFyIGV4cHJl c3Npb24sIGFzIGEgc3RyaW5nLgorICAgICAgICAgICAgZ2VuX3ByaW50ZXI6 IEEgZnVuY3Rpb24vbWV0aG9kIHRoYXQgZ2l2ZW4gYSB2YWx1ZSByZXR1cm5z IGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHRvIHByZXR0 eS1wcmludCBpdC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAg Tm90aGluZy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBOT1RFOiBBIHBy ZXZpb3VzIHZlcnNpb24gbWFkZSB0aGUgbmFtZSBvZiBlYWNoIHByaW50ZXIg dGhlIHJlZ2V4cC4KKyAgICAgICAgIyBUaGF0IG1ha2VzIGl0IGF3a3dhcmQg dG8gcGFzcyB0byB0aGUgZW5hYmxlL2Rpc2FibGUgY29tbWFuZHMgKGl0J3MK KyAgICAgICAgIyBjdW1iZXJzb21lIHRvIG1ha2UgYSByZWdleHAgb2YgYSBy ZWdleHApLiAgU28gbm93IHRoZSBuYW1lIGlzIGEKKyAgICAgICAgIyBzZXBh cmF0ZSBwYXJhbWV0ZXIuCisKKyAgICAgICAgc2VsZi5zdWJwcmludGVycy5h cHBlbmQoc2VsZi5SZWdleHBTdWJwcmludGVyKG5hbWUsIHJlZ2V4cCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdlbl9wcmludGVyKSkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxm LCB2YWwpOgorICAgICAgICAiIiJMb29rdXAgdGhlIHByZXR0eS1wcmludGVy IGZvciB0aGUgcHJvdmlkZWQgdmFsdWUuIiIiCisKKyAgICAgICAgIyBHZXQg dGhlIHR5cGUgbmFtZS4KKyAgICAgICAgdHlwZW5hbWUgPSBnZGIudHlwZXMu Z2V0X2Jhc2ljX3R5cGUodmFsLnR5cGUpLnRhZworICAgICAgICBpZiBub3Qg dHlwZW5hbWU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAg ICMgSXRlcmF0ZSBvdmVyIHRhYmxlIG9mIHR5cGUgcmVnZXhwcyB0byBkZXRl cm1pbmUKKyAgICAgICAgIyBpZiBhIHByaW50ZXIgaXMgcmVnaXN0ZXJlZCBm b3IgdGhhdCB0eXBlLgorICAgICAgICAjIFJldHVybiBhbiBpbnN0YW50aWF0 aW9uIG9mIHRoZSBwcmludGVyIGlmIGZvdW5kLgorICAgICAgICBmb3IgcHJp bnRlciBpbiBzZWxmLnN1YnByaW50ZXJzOgorICAgICAgICAgICAgaWYgcHJp bnRlci5lbmFibGVkIGFuZCBwcmludGVyLmNvbXBpbGVkX3JlLnNlYXJjaCh0 eXBlbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHByaW50ZXIuZ2Vu X3ByaW50ZXIodmFsKQorCisgICAgICAgICMgQ2Fubm90IGZpbmQgYSBwcmV0 dHkgcHJpbnRlci4gIFJldHVybiBOb25lLgorICAgICAgICByZXR1cm4gTm9u ZQpJbmRleDogcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9fX2luaXRfXy5weQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBweXRob24vbGliL2dk Yi9jb21tYW5kL19faW5pdF9fLnB5CmRpZmYgLU4gcHl0aG9uL2xpYi9nZGIv Y29tbWFuZC9fX2luaXRfXy5weQotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAg MDA6MDA6MDAgLTAwMDAKKysrIHB5dGhvbi9saWIvZ2RiL2NvbW1hbmQvX19p bml0X18ucHkJMiBOb3YgMjAxMCAxNzoxNToyMiAtMDAwMApAQCAtMCwwICsx LDE2IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor IworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCkluZGV4OiBw eXRob24vbGliL2dkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBweXRob24vbGliL2dkYi9j b21tYW5kL3ByZXR0eV9wcmludGVycy5weQpkaWZmIC1OIHB5dGhvbi9saWIv Z2RiL2NvbW1hbmQvcHJldHR5X3ByaW50ZXJzLnB5Ci0tLSAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgcHl0aG9uL2xpYi9nZGIv Y29tbWFuZC9wcmV0dHlfcHJpbnRlcnMucHkJMiBOb3YgMjAxMCAxNzoxNToy MiAtMDAwMApAQCAtMCwwICsxLDM2OSBAQAorIyBQcmV0dHktcHJpbnRlciBj b21tYW5kcy4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisiIiJHREIg Y29tbWFuZHMgZm9yIHdvcmtpbmcgd2l0aCBwcmV0dHktcHJpbnRlcnMuIiIi CisKK2ltcG9ydCBjb3B5CitpbXBvcnQgZ2RiCitpbXBvcnQgcmUKKworCitk ZWYgcGFyc2VfcHJpbnRlcl9yZWdleHBzKGFyZyk6CisgICAgIiIiSW50ZXJu YWwgdXRpbGl0eSB0byBwYXJzZSBhIHByZXR0eS1wcmludGVyIGNvbW1hbmQg YXJndi4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgYXJnOiBUaGUgYXJn dW1lbnRzIHRvIHRoZSBjb21tYW5kLiAgVGhlIGZvcm1hdCBpczoKKyAgICAg ICAgICAgICBbb2JqZWN0LXJlZ2V4cCBbbmFtZS1yZWdleHBdXS4KKyAgICAg ICAgICAgICBJbmRpdmlkdWFsIHByaW50ZXJzIGluIGEgY29sbGVjdGlvbiBh cmUgbmFtZWQgYXMKKyAgICAgICAgICAgICBwcmludGVyLW5hbWU6c3VicHJp bnRlci1uYW1lLgorCisgICAgUmV0dXJuczoKKyAgICAgICAgVGhlIHJlc3Vs dCBpcyBhIDMtdHVwbGUgb2YgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9u cywgZXhjZXB0IHRoYXQKKyAgICAgICAgdGhlIHJlc3VsdGluZyBjb21waWxl ZCBzdWJwcmludGVyIHJlZ2V4cCBpcyBOb25lIGlmIG5vdCBwcm92aWRlZC4K KworICAgIFJhaXNlczoKKyAgICAgICAgU3ludGF4RXJyb3I6IGFuIGVycm9y IHByb2Nlc3NpbmcgQVJHCisgICAgIiIiCisKKyAgICBhcmd2ID0gZ2RiLnN0 cmluZ190b19hcmd2KGFyZyk7CisgICAgYXJnYyA9IGxlbihhcmd2KQorICAg IG9iamVjdF9yZWdleHAgPSAiIiAgIyBtYXRjaCBldmVyeXRoaW5nCisgICAg bmFtZV9yZWdleHAgPSAiIiAgIyBtYXRjaCBldmVyeXRoaW5nCisgICAgc3Vi bmFtZV9yZWdleHAgPSBOb25lCisgICAgaWYgYXJnYyA+IDM6CisgICAgICAg IHJhaXNlIFN5bnRheEVycm9yKCJ0b28gbWFueSBhcmd1bWVudHMiKQorICAg IGlmIGFyZ2MgPj0gMToKKyAgICAgICAgb2JqZWN0X3JlZ2V4cCA9IGFyZ3Zb MF0KKyAgICBpZiBhcmdjID49IDI6CisgICAgICAgIG5hbWVfc3VibmFtZSA9 IGFyZ3ZbMV0uc3BsaXQoIjoiLCAxKQorICAgICAgICBuYW1lX3JlZ2V4cCA9 IG5hbWVfc3VibmFtZVswXQorICAgICAgICBpZiBsZW4obmFtZV9zdWJuYW1l KSA9PSAyOgorICAgICAgICAgICAgc3VibmFtZV9yZWdleHAgPSBuYW1lX3N1 Ym5hbWVbMV0KKyAgICAjIFRoYXQgcmUuY29tcGlsZSByYWlzZXMgU3ludGF4 RXJyb3Igd2FzIGRldGVybWluZWQgZW1waXJpY2FsbHkuCisgICAgIyBXZSBj YXRjaCBpdCBhbmQgcmVyYWlzZSBpdCB0byBwcm92aWRlIGEgc2xpZ2h0bHkg bW9yZSB1c2VmdWwKKyAgICAjIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSB1c2Vy LgorICAgIHRyeToKKyAgICAgICAgb2JqZWN0X3JlID0gcmUuY29tcGlsZShv YmplY3RfcmVnZXhwKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAg ICAgcmFpc2UgU3ludGF4RXJyb3IoImludmFsaWQgb2JqZWN0IHJlZ2V4cDog JXMiICUgb2JqZWN0X3JlZ2V4cCkKKyAgICB0cnk6CisgICAgICAgIG5hbWVf cmUgPSByZS5jb21waWxlIChuYW1lX3JlZ2V4cCkKKyAgICBleGNlcHQgU3lu dGF4RXJyb3I6CisgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJpbnZhbGlk IG5hbWUgcmVnZXhwOiAlcyIgJSBuYW1lX3JlZ2V4cCkKKyAgICBpZiBzdWJu YW1lX3JlZ2V4cCBpcyBub3QgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAg ICAgICAgc3VibmFtZV9yZSA9IHJlLmNvbXBpbGUoc3VibmFtZV9yZWdleHAp CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHJh aXNlIFN5bnRheEVycm9yKCJpbnZhbGlkIHN1Ym5hbWUgcmVnZXhwOiAlcyIg JSBzdWJuYW1lX3JlZ2V4cCkKKyAgICBlbHNlOgorICAgICAgICBzdWJuYW1l X3JlID0gTm9uZQorICAgIHJldHVybihvYmplY3RfcmUsIG5hbWVfcmUsIHN1 Ym5hbWVfcmUpCisKKworZGVmIHByaW50ZXJfZW5hYmxlZF9wKHByaW50ZXIp OgorICAgICIiIkludGVybmFsIHV0aWxpdHkgdG8gc2VlIGlmIHByaW50ZXIg KG9yIHN1YnByaW50ZXIpIGlzIGVuYWJsZWQuIiIiCisgICAgaWYgaGFzYXR0 cihwcmludGVyLCAiZW5hYmxlZCIpOgorICAgICAgICByZXR1cm4gcHJpbnRl ci5lbmFibGVkCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIFRydWUKKwor CitjbGFzcyBJbmZvUHJldHR5UHJpbnRlcihnZGIuQ29tbWFuZCk6CisgICAg IiIiR0RCIGNvbW1hbmQgdG8gbGlzdCBhbGwgcmVnaXN0ZXJlZCBwcmV0dHkt cHJpbnRlcnMuCisKKyAgICBVc2FnZTogaW5mbyBwcmV0dHktcHJpbnRlciBb b2JqZWN0LXJlZ2V4cCBbbmFtZS1yZWdleHBdXQorCisgICAgT0JKRUNULVJF R0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgb2Jq ZWN0cyB0byBsaXN0LgorICAgIE9iamVjdHMgYXJlICJnbG9iYWwiLCB0aGUg cHJvZ3JhbSBzcGFjZSdzIGZpbGUsIGFuZCB0aGUgb2JqZmlsZXMgd2l0aGlu CisgICAgdGhhdCBwcm9ncmFtIHNwYWNlLgorCisgICAgTkFNRS1SRUdFWFAg bWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgcHJldHR5LXByaW50ZXIuCisgICAg SW5kaXZpZHVhbCBwcmludGVycyBpbiBhIGNvbGxlY3Rpb24gYXJlIG5hbWVk IGFzCisgICAgcHJpbnRlci1uYW1lOnN1YnByaW50ZXItbmFtZS4KKyAgICAi IiIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIHN1cGVy KEluZm9QcmV0dHlQcmludGVyLCBzZWxmKS5fX2luaXRfXygiaW5mbyBwcmV0 dHktcHJpbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKworICAgIEBz dGF0aWNtZXRob2QKKyAgICBkZWYgZW5hYmxlZF9zdHJpbmcocHJpbnRlcik6 CisgICAgICAgICIiIlJldHVybiAiIiBpZiBQUklOVEVSIGlzIGVuYWJsZWQs IG90aGVyd2lzZSAiIFtkaXNhYmxlZF0iLiIiIgorICAgICAgICBpZiBwcmlu dGVyX2VuYWJsZWRfcChwcmludGVyKToKKyAgICAgICAgICAgIHJldHVybiAi IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIgW2Rpc2Fi bGVkXSIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJpbnRlcl9u YW1lKHByaW50ZXIpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHByaW50ZXIn cyBuYW1lLiIiIgorICAgICAgICBpZiBoYXNhdHRyKHByaW50ZXIsICJuYW1l Iik6CisgICAgICAgICAgICByZXR1cm4gcHJpbnRlci5uYW1lCisgICAgICAg IGlmIGhhc2F0dHIocHJpbnRlciwgIl9fbmFtZV9fIik6CisgICAgICAgICAg ICByZXR1cm4gcHJpbnRlci5fX25hbWVfXworICAgICAgICAjIFRoaXMgInNo b3VsZG4ndCBoYXBwZW4iLCBidXQgdGhlIHB1YmxpYyBBUEkgYWxsb3dzIGZv cgorICAgICAgICAjIGRpcmVjdCBhZGRpdGlvbnMgdG8gdGhlIHByZXR0eS1w cmludGVyIGxpc3QsIGFuZCB3ZSBzaG91bGRuJ3QKKyAgICAgICAgIyBjcmFz aCBiZWNhdXNlIHNvbWVvbmUgYWRkZWQgYSBib2d1cyBwcmludGVyLgorICAg ICAgICAjIFBsdXMgd2Ugd2FudCB0byBnaXZlIHRoZSB1c2VyIGEgd2F5IHRv IGxpc3QgdW5rbm93biBwcmludGVycy4KKyAgICAgICAgcmV0dXJuICJ1bmtu b3duIgorCisgICAgZGVmIGxpc3RfcHJldHR5X3ByaW50ZXJzKHNlbGYsIHBy ZXR0eV9wcmludGVycywgbmFtZV9yZSwgc3VibmFtZV9yZSk6CisgICAgICAg ICIiIlByaW50IGEgbGlzdCBvZiBwcmV0dHktcHJpbnRlcnMuIiIiCisgICAg ICAgICMgQSBwb3RlbnRpYWwgZW5oYW5jZW1lbnQgaXMgdG8gcHJvdmlkZSBh biBvcHRpb24gdG8gbGlzdCBwcmludGVycyBpbgorICAgICAgICAjICJsb29r dXAgb3JkZXIiIChpLmUuIHVuc29ydGVkKS4KKyAgICAgICAgc29ydGVkX3By ZXR0eV9wcmludGVycyA9IGNvcHkuY29weShwcmV0dHlfcHJpbnRlcnMpCisg ICAgICAgIHNvcnRlZF9wcmV0dHlfcHJpbnRlcnMuc29ydChsYW1iZGEgeCwg eToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj bXAoc2VsZi5wcmludGVyX25hbWUoeCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlcl9uYW1lKHkp KSkKKyAgICAgICAgZm9yIHByaW50ZXIgaW4gc29ydGVkX3ByZXR0eV9wcmlu dGVyczoKKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLnByaW50ZXJfbmFtZShw cmludGVyKQorICAgICAgICAgICAgZW5hYmxlZCA9IHNlbGYuZW5hYmxlZF9z dHJpbmcocHJpbnRlcikKKyAgICAgICAgICAgIGlmIG5hbWVfcmUubWF0Y2go bmFtZSk6CisgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMlcyIgJSAobmFt ZSwgZW5hYmxlZCkKKyAgICAgICAgICAgICAgICBpZiAoaGFzYXR0cihwcmlu dGVyLCAic3VicHJpbnRlcnMiKSBhbmQKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRlci5zdWJwcmludGVycyBpcyBub3QgTm9uZSk6CisgICAgICAgICAg ICAgICAgICAgIHNvcnRlZF9zdWJwcmludGVycyA9IGNvcHkuY29weShwcmlu dGVyLnN1YnByaW50ZXJzKQorICAgICAgICAgICAgICAgICAgICBzb3J0ZWRf c3VicHJpbnRlcnMuc29ydChsYW1iZGEgeCwgeToKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtcChzZWxmLnBy aW50ZXJfbmFtZSh4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXJfbmFtZSh5KSkp CisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJwcmludGVyIGluIHNvcnRl ZF9zdWJwcmludGVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu b3Qgc3VibmFtZV9yZSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN1Ym5hbWVfcmUubWF0Y2goc3VicHJpbnRlci5uYW1lKSk6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCIgICAgJXMlcyIgJQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VicHJpbnRlci5u YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs Zi5lbmFibGVkX3N0cmluZyhzdWJwcmludGVyKSkpCisKKyAgICBkZWYgaW52 b2tlMShzZWxmLCB0aXRsZSwgcHJpbnRlcl9saXN0LAorICAgICAgICAgICAg ICAgIG9ial9uYW1lX3RvX21hdGNoLCBvYmplY3RfcmUsIG5hbWVfcmUsIHN1 Ym5hbWVfcmUpOgorICAgICAgICAiIiIiU3Vicm91dGluZSBvZiBpbnZva2Ug dG8gc2ltcGxpZnkgaXQuIiIiCisgICAgICAgIGlmIHByaW50ZXJfbGlzdCBh bmQgb2JqZWN0X3JlLm1hdGNoKG9ial9uYW1lX3RvX21hdGNoKToKKyAgICAg ICAgICAgIHByaW50IHRpdGxlCisgICAgICAgICAgICBzZWxmLmxpc3RfcHJl dHR5X3ByaW50ZXJzKHByaW50ZXJfbGlzdCwgbmFtZV9yZSwgc3VibmFtZV9y ZSkKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6Cisg ICAgICAgICIiIkdEQiBjYWxscyB0aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1h bmQuIiIiCisgICAgICAgIChvYmplY3RfcmUsIG5hbWVfcmUsIHN1Ym5hbWVf cmUpID0gcGFyc2VfcHJpbnRlcl9yZWdleHBzKGFyZykKKyAgICAgICAgc2Vs Zi5pbnZva2UxKCJnbG9iYWwgcHJldHR5LXByaW50ZXJzOiIsIGdkYi5wcmV0 dHlfcHJpbnRlcnMsCisgICAgICAgICAgICAgICAgICAgICAiZ2xvYmFsIiwg b2JqZWN0X3JlLCBuYW1lX3JlLCBzdWJuYW1lX3JlKQorICAgICAgICBjcCA9 IGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpCisgICAgICAgIHNlbGYuaW52b2tl MSgicHJvZ3NwYWNlICVzIHByZXR0eS1wcmludGVyczoiICUgY3AuZmlsZW5h bWUsCisgICAgICAgICAgICAgICAgICAgICBjcC5wcmV0dHlfcHJpbnRlcnMs ICJwcm9nc3BhY2UiLAorICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3Jl LCBuYW1lX3JlLCBzdWJuYW1lX3JlKQorICAgICAgICBmb3Igb2JqZmlsZSBp biBnZGIub2JqZmlsZXMoKToKKyAgICAgICAgICAgIHNlbGYuaW52b2tlMSgi ICBvYmpmaWxlICVzIHByZXR0eS1wcmludGVyczoiICUgb2JqZmlsZS5maWxl bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvYmpmaWxlLnByZXR0 eV9wcmludGVycywgb2JqZmlsZS5maWxlbmFtZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBvYmplY3RfcmUsIG5hbWVfcmUsIHN1Ym5hbWVfcmUpCisK KworZGVmIGNvdW50X2VuYWJsZWRfcHJpbnRlcnMocHJldHR5X3ByaW50ZXJz KToKKyAgICAiIiJSZXR1cm4gYSAyLXR1cGxlIG9mIG51bWJlciBvZiBlbmFi bGVkIGFuZCB0b3RhbCBwcmludGVycy4iIiIKKyAgICBlbmFibGVkID0gMAor ICAgIHRvdGFsID0gMAorICAgIGZvciBwcmludGVyIGluIHByZXR0eV9wcmlu dGVyczoKKyAgICAgICAgaWYgKGhhc2F0dHIocHJpbnRlciwgInN1YnByaW50 ZXJzIikKKyAgICAgICAgICAgIGFuZCBwcmludGVyLnN1YnByaW50ZXJzIGlz IG5vdCBOb25lKToKKyAgICAgICAgICAgIGlmIHByaW50ZXJfZW5hYmxlZF9w KHByaW50ZXIpOgorICAgICAgICAgICAgICAgIGZvciBzdWJwcmludGVyIGlu IHByaW50ZXIuc3VicHJpbnRlcnM6CisgICAgICAgICAgICAgICAgICAgIGlm IHByaW50ZXJfZW5hYmxlZF9wKHN1YnByaW50ZXIpOgorICAgICAgICAgICAg ICAgICAgICAgICAgZW5hYmxlZCArPSAxCisgICAgICAgICAgICB0b3RhbCAr PSBsZW4ocHJpbnRlci5zdWJwcmludGVycykKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIGlmIHByaW50ZXJfZW5hYmxlZF9wKHByaW50ZXIpOgorICAg ICAgICAgICAgICAgIGVuYWJsZWQgKz0gMQorICAgICAgICAgICAgdG90YWwg Kz0gMQorICAgIHJldHVybiAoZW5hYmxlZCwgdG90YWwpCisKKworZGVmIGNv dW50X2FsbF9lbmFibGVkX3ByaW50ZXJzKCk6CisgICAgIiIiUmV0dXJuIGEg Mi10dWJsZSBvZiB0aGUgZW5hYmxlZCBzdGF0ZSBhbmQgdG90YWwgbnVtYmVy IG9mIGFsbCBwcmludGVycy4KKyAgICBUaGlzIGluY2x1ZGVzIHN1YnByaW50 ZXJzLgorICAgICIiIgorICAgIGVuYWJsZWRfY291bnQgPSAwCisgICAgdG90 YWxfY291bnQgPSAwCisgICAgKHRfZW5hYmxlZCwgdF90b3RhbCkgPSBjb3Vu dF9lbmFibGVkX3ByaW50ZXJzKGdkYi5wcmV0dHlfcHJpbnRlcnMpCisgICAg ZW5hYmxlZF9jb3VudCArPSB0X2VuYWJsZWQKKyAgICB0b3RhbF9jb3VudCAr PSB0X3RvdGFsCisgICAgKHRfZW5hYmxlZCwgdF90b3RhbCkgPSBjb3VudF9l bmFibGVkX3ByaW50ZXJzKGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLnByZXR0 eV9wcmludGVycykKKyAgICBlbmFibGVkX2NvdW50ICs9IHRfZW5hYmxlZAor ICAgIHRvdGFsX2NvdW50ICs9IHRfdG90YWwKKyAgICBmb3Igb2JqZmlsZSBp biBnZGIub2JqZmlsZXMoKToKKyAgICAgICAgKHRfZW5hYmxlZCwgdF90b3Rh bCkgPSBjb3VudF9lbmFibGVkX3ByaW50ZXJzKG9iamZpbGUucHJldHR5X3By aW50ZXJzKQorICAgICAgICBlbmFibGVkX2NvdW50ICs9IHRfZW5hYmxlZAor ICAgICAgICB0b3RhbF9jb3VudCArPSB0X3RvdGFsCisgICAgcmV0dXJuIChl bmFibGVkX2NvdW50LCB0b3RhbF9jb3VudCkKKworCitkZWYgcGx1cmFsaXpl KHRleHQsIG4sIHN1ZmZpeD0icyIpOgorICAgICIiIlJldHVybiBURVhUIHBs dXJhbGl6ZWQgaWYgTiAhPSAxLiIiIgorICAgIGlmIG4gIT0gMToKKyAgICAg ICAgcmV0dXJuICIlcyVzIiAlICh0ZXh0LCBzdWZmaXgpCisgICAgZWxzZToK KyAgICAgICAgcmV0dXJuIHRleHQKKworCitkZWYgc2hvd19wcmV0dHlfcHJp bnRlcl9lbmFibGVkX3N1bW1hcnkoKToKKyAgICAiIiJQcmludCB0aGUgbnVt YmVyIG9mIHByaW50ZXJzIGVuYWJsZWQvZGlzYWJsZWQuCisgICAgV2UgY291 bnQgc3VicHJpbnRlcnMgaW5kaXZpZHVhbGx5LgorICAgICIiIgorICAgIChl bmFibGVkX2NvdW50LCB0b3RhbF9jb3VudCkgPSBjb3VudF9hbGxfZW5hYmxl ZF9wcmludGVycygpCisgICAgcHJpbnQgIiVkIG9mICVkIHByaW50ZXJzIGVu YWJsZWQiICUgKGVuYWJsZWRfY291bnQsIHRvdGFsX2NvdW50KQorCisKK2Rl ZiBkb19lbmFibGVfcHJldHR5X3ByaW50ZXJfMSAocHJldHR5X3ByaW50ZXJz LCBuYW1lX3JlLCBzdWJuYW1lX3JlLCBmbGFnKToKKyAgICAiIiJXb3JrZXIg Zm9yIGVuYWJsaW5nL2Rpc2FibGluZyBwcmV0dHktcHJpbnRlcnMuCisKKyAg ICBBcmd1bWVudHM6CisgICAgICAgIHByZXR0eV9wcmludGVyczogbGlzdCBv ZiBwcmV0dHktcHJpbnRlcnMKKyAgICAgICAgbmFtZV9yZTogcmVndWxhci1l eHByZXNzaW9uIG9iamVjdCB0byBzZWxlY3QgcHJpbnRlcnMKKyAgICAgICAg c3VibmFtZV9yZTogcmVndWxhciBleHByZXNzaW9uIG9iamVjdCB0byBzZWxl Y3Qgc3VicHJpbnRlcnMgb3IgTm9uZQorICAgICAgICAgICAgICAgICAgICBp ZiBhbGwgYXJlIGFmZmVjdGVkCisgICAgICAgIGZsYWc6IFRydWUgZm9yIEVu YWJsZSwgRmFsc2UgZm9yIERpc2FibGUKKworICAgIFJldHVybnM6CisgICAg ICAgIFRoZSBudW1iZXIgb2YgcHJpbnRlcnMgYWZmZWN0ZWQuCisgICAgICAg IFRoaXMgaXMganVzdCBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBmb3Ig dGhlIHVzZXIuCisgICAgIiIiCisgICAgdG90YWwgPSAwCisgICAgZm9yIHBy aW50ZXIgaW4gcHJldHR5X3ByaW50ZXJzOgorICAgICAgICBpZiAoaGFzYXR0 cihwcmludGVyLCAibmFtZSIpIGFuZCBuYW1lX3JlLm1hdGNoKHByaW50ZXIu bmFtZSkgb3IKKyAgICAgICAgICAgIGhhc2F0dHIocHJpbnRlciwgIl9fbmFt ZV9fIikgYW5kIG5hbWVfcmUubWF0Y2gocHJpbnRlci5fX25hbWVfXykpOgor ICAgICAgICAgICAgaWYgaGFzYXR0cihwcmludGVyLCAic3VicHJpbnRlcnMi KToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3VibmFtZV9yZToKKyAgICAg ICAgICAgICAgICAgICAgIyBPbmx5IHJlY29yZCBwcmludGVycyB0aGF0IGNo YW5nZSBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgcHJpbnRlcl9l bmFibGVkX3AocHJpbnRlcikgIT0gZmxhZzoKKyAgICAgICAgICAgICAgICAg ICAgICAgIGZvciBzdWJwcmludGVyIGluIHByaW50ZXIuc3VicHJpbnRlcnM6 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJpbnRlcl9lbmFi bGVkX3Aoc3VicHJpbnRlcik6CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRvdGFsICs9IDEKKyAgICAgICAgICAgICAgICAgICAgIyBOT1RF OiBXZSBwcmVzZXJ2ZSBpbmRpdmlkdWFsIHN1YnByaW50ZXIgc2V0dGluZ3Mu CisgICAgICAgICAgICAgICAgICAgIHByaW50ZXIuZW5hYmxlZCA9IGZsYWcK KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAj IE5PVEU6IFdoZXRoZXIgdGhpcyBhY3R1YWxseSBkaXNhYmxlcyB0aGUgc3Vi cHJpbnRlcgorICAgICAgICAgICAgICAgICAgICAjIGRlcGVuZHMgb24gd2hl dGhlciB0aGUgcHJpbnRlcidzIGxvb2t1cCBmdW5jdGlvbiBzdXBwb3J0cwor ICAgICAgICAgICAgICAgICAgICAjIHRoZSAiZW5hYmxlIiBBUEkuICBXZSBj YW4gb25seSBhc3N1bWUgaXQgZG9lcy4KKyAgICAgICAgICAgICAgICAgICAg Zm9yIHN1YnByaW50ZXIgaW4gcHJpbnRlci5zdWJwcmludGVyczoKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIHN1Ym5hbWVfcmUubWF0Y2goc3VicHJp bnRlci5uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9u bHkgcmVjb3JkIHByaW50ZXJzIHRoYXQgY2hhbmdlIHN0YXRlLgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW50ZXJfZW5hYmxlZF9wKHBy aW50ZXIpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZXJfZW5hYmxlZF9wKHN1YnByaW50ZXIpICE9IGZsYWcpOgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IDEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN1YnByaW50ZXIuZW5hYmxlZCA9IGZsYWcK KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUaGlzIHBy aW50ZXIgaGFzIG5vIHN1YnByaW50ZXJzLgorICAgICAgICAgICAgICAgICMg SWYgdGhlIHVzZXIgZG9lcyAiZGlzYWJsZSBwcmV0dHktcHJpbnRlciAuKiAu KiBmb28iCisgICAgICAgICAgICAgICAgIyBzaG91bGQgd2UgZGlzYWJsZSBw cmludGVycyB0aGF0IGRvbid0IGhhdmUgc3VicHJpbnRlcnM/CisgICAgICAg ICAgICAgICAgIyBIb3cgZG8gd2UgYXBwbHkgImZvbyIgaW4gdGhpcyBjb250 ZXh0PyAgU2luY2UgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgICAgICAjICJm b28iIHN1YnByaW50ZXIgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgc2tpcCB0 aGlzIHByaW50ZXIuCisgICAgICAgICAgICAgICAgIyBUaGVyZSdzIHN0aWxs IHRoZSBpc3N1ZSBvZiBob3cgdG8gaGFuZGxlCisgICAgICAgICAgICAgICAg IyAiZGlzYWJsZSBwcmV0dHktcHJpbnRlciAuKiAuKiAuKiIsIGFuZCBldmVy eSBvdGhlciB2YXJpYXRpb24KKyAgICAgICAgICAgICAgICAjIHRoYXQgY2Fu IG1hdGNoIGV2ZXJ5dGhpbmcuICBGb3Igbm93IHB1bnQgYW5kIG9ubHkgc3Vw cG9ydAorICAgICAgICAgICAgICAgICMgImRpc2FibGUgcHJldHR5LXByaW50 ZXIgLiogLioiIChpLmUuIHN1Ym5hbWUgaXMgZWxpZGVkKQorICAgICAgICAg ICAgICAgICMgdG8gZGlzYWJsZSBldmVyeXRoaW5nLgorICAgICAgICAgICAg ICAgIGlmIG5vdCBzdWJuYW1lX3JlOgorICAgICAgICAgICAgICAgICAgICAj IE9ubHkgcmVjb3JkIHByaW50ZXJzIHRoYXQgY2hhbmdlIHN0YXRlLgorICAg ICAgICAgICAgICAgICAgICBpZiBwcmludGVyX2VuYWJsZWRfcChwcmludGVy KSAhPSBmbGFnOgorICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0g MQorICAgICAgICAgICAgICAgICAgICBwcmludGVyLmVuYWJsZWQgPSBmbGFn CisgICAgcmV0dXJuIHRvdGFsCisKKworZGVmIGRvX2VuYWJsZV9wcmV0dHlf cHJpbnRlciAoYXJnLCBmbGFnKToKKyAgICAiIiJJbnRlcm5hbCB3b3JrZXIg Zm9yIGVuYWJsaW5nL2Rpc2FibGluZyBwcmV0dHktcHJpbnRlcnMuIiIiCisg ICAgKG9iamVjdF9yZSwgbmFtZV9yZSwgc3VibmFtZV9yZSkgPSBwYXJzZV9w cmludGVyX3JlZ2V4cHMoYXJnKQorCisgICAgdG90YWwgPSAwCisgICAgaWYg b2JqZWN0X3JlLm1hdGNoKCJnbG9iYWwiKToKKyAgICAgICAgdG90YWwgKz0g ZG9fZW5hYmxlX3ByZXR0eV9wcmludGVyXzEoZ2RiLnByZXR0eV9wcmludGVy cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmFtZV9yZSwgc3VibmFtZV9yZSwgZmxhZykKKyAgICBjcCA9IGdkYi5j dXJyZW50X3Byb2dzcGFjZSgpCisgICAgaWYgb2JqZWN0X3JlLm1hdGNoKCJw cm9nc3BhY2UiKToKKyAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX3ByZXR0 eV9wcmludGVyXzEoY3AucHJldHR5X3ByaW50ZXJzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3JlLCBzdWJu YW1lX3JlLCBmbGFnKQorICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxl cygpOgorICAgICAgICBpZiBvYmplY3RfcmUubWF0Y2gob2JqZmlsZS5maWxl bmFtZSk6CisgICAgICAgICAgICB0b3RhbCArPSBkb19lbmFibGVfcHJldHR5 X3ByaW50ZXJfMShvYmpmaWxlLnByZXR0eV9wcmludGVycywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVf cmUsIHN1Ym5hbWVfcmUsIGZsYWcpCisKKyAgICBpZiBmbGFnOgorICAgICAg ICBzdGF0ZSA9ICJlbmFibGVkIgorICAgIGVsc2U6CisgICAgICAgIHN0YXRl ID0gImRpc2FibGVkIgorICAgIHByaW50ICIlZCAlcyAlcyIgJSAodG90YWws IHBsdXJhbGl6ZSgicHJpbnRlciIsIHRvdGFsKSwgc3RhdGUpCisKKyAgICAj IFByaW50IHRoZSB0b3RhbCBsaXN0IG9mIHByaW50ZXJzIGN1cnJlbnRseSBl bmFibGVkL2Rpc2FibGVkLgorICAgICMgVGhpcyBpcyB0byBmdXJ0aGVyIGFz c2lzdCB0aGUgdXNlciBpbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSByZXN1 bHQKKyAgICAjIGlzIGV4cGVjdGVkLiAgU2luY2Ugd2UgdXNlIHJlZ2V4cHMg dG8gc2VsZWN0IGl0J3MgdXNlZnVsLgorICAgIHNob3dfcHJldHR5X3ByaW50 ZXJfZW5hYmxlZF9zdW1tYXJ5KCkKKworCisjIEVuYWJsZS9EaXNhYmxlIG9u ZSBvciBtb3JlIHByZXR0eS1wcmludGVycy4KKyMKKyMgVGhpcyBpcyBpbnRl bmRlZCBmb3IgdXNlIHdoZW4gYSBicm9rZW4gcHJldHR5LXByaW50ZXIgaXMg c2hpcHBlZC9pbnN0YWxsZWQKKyMgYW5kIHRoZSB1c2VyIHdhbnRzIHRvIGRp c2FibGUgdGhhdCBwcmludGVyIHdpdGhvdXQgZGlzYWJsaW5nIGFsbCB0aGUg b3RoZXIKKyMgcHJpbnRlcnMuCisjCisjIEEgdXNlZnVsIGFkZGl0aW9uIHdv dWxkIGJlIC12ICh2ZXJib3NlKSB0byBzaG93IGVhY2ggcHJpbnRlciBhZmZl Y3RlZC4KKworY2xhc3MgRW5hYmxlUHJldHR5UHJpbnRlciAoZ2RiLkNvbW1h bmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGVuYWJsZSB0aGUgc3BlY2lm aWVkIHByZXR0eS1wcmludGVyLgorCisgICAgVXNhZ2U6IGVuYWJsZSBwcmV0 dHktcHJpbnRlciBbb2JqZWN0LXJlZ2V4cCBbbmFtZS1yZWdleHBdXQorCisg ICAgT0JKRUNULVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRj aGluZyB0aGUgb2JqZWN0cyB0byBleGFtaW5lLgorICAgIE9iamVjdHMgYXJl ICJnbG9iYWwiLCB0aGUgcHJvZ3JhbSBzcGFjZSdzIGZpbGUsIGFuZCB0aGUg b2JqZmlsZXMgd2l0aGluCisgICAgdGhhdCBwcm9ncmFtIHNwYWNlLgorCisg ICAgTkFNRS1SRUdFWFAgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgcHJldHR5 LXByaW50ZXIuCisgICAgSW5kaXZpZHVhbCBwcmludGVycyBpbiBhIGNvbGxl Y3Rpb24gYXJlIG5hbWVkIGFzCisgICAgcHJpbnRlci1uYW1lOnN1YnByaW50 ZXItbmFtZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToK KyAgICAgICAgc3VwZXIoRW5hYmxlUHJldHR5UHJpbnRlciwgc2VsZikuX19p bml0X18oImVuYWJsZSBwcmV0dHktcHJpbnRlciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09N TUFORF9EQVRBKQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21f dHR5KToKKyAgICAgICAgIiIiR0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0 aGUgY29tbWFuZC4iIiIKKyAgICAgICAgZG9fZW5hYmxlX3ByZXR0eV9wcmlu dGVyKGFyZywgVHJ1ZSkKKworCitjbGFzcyBEaXNhYmxlUHJldHR5UHJpbnRl ciAoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGRpc2Fi bGUgdGhlIHNwZWNpZmllZCBwcmV0dHktcHJpbnRlci4KKworICAgIFVzYWdl OiBkaXNhYmxlIHByZXR0eS1wcmludGVyIFtvYmplY3QtcmVnZXhwIFtuYW1l LXJlZ2V4cF1dCisKKyAgICBPQkpFQ1QtUkVHRVhQIGlzIGEgcmVndWxhciBl eHByZXNzaW9uIG1hdGNoaW5nIHRoZSBvYmplY3RzIHRvIGV4YW1pbmUuCisg ICAgT2JqZWN0cyBhcmUgImdsb2JhbCIsIHRoZSBwcm9ncmFtIHNwYWNlJ3Mg ZmlsZSwgYW5kIHRoZSBvYmpmaWxlcyB3aXRoaW4KKyAgICB0aGF0IHByb2dy YW0gc3BhY2UuCisKKyAgICBOQU1FLVJFR0VYUCBtYXRjaGVzIHRoZSBuYW1l IG9mIHRoZSBwcmV0dHktcHJpbnRlci4KKyAgICBJbmRpdmlkdWFsIHByaW50 ZXJzIGluIGEgY29sbGVjdGlvbiBhcmUgbmFtZWQgYXMKKyAgICBwcmludGVy LW5hbWU6c3VicHJpbnRlci1uYW1lLgorICAgICIiIgorCisgICAgZGVmIF9f aW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihEaXNhYmxlUHJldHR5UHJp bnRlciwgc2VsZikuX19pbml0X18oImRpc2FibGUgcHJldHR5LXByaW50ZXIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKworICAgIGRlZiBpbnZva2Uo c2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAgICIiIkdEQiBjYWxscyB0 aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQuIiIiCisgICAgICAgIGRvX2Vu YWJsZV9wcmV0dHlfcHJpbnRlcihhcmcsIEZhbHNlKQorCisKK2RlZiByZWdp c3Rlcl9wcmV0dHlfcHJpbnRlcl9jb21tYW5kcygpOgorICAgICIiIkNhbGwg ZnJvbSBhIHRvcCBsZXZlbCBzY3JpcHQgdG8gaW5zdGFsbCB0aGUgcHJldHR5 LXByaW50ZXIgY29tbWFuZHMuIiIiCisgICAgSW5mb1ByZXR0eVByaW50ZXIo KQorICAgIEVuYWJsZVByZXR0eVByaW50ZXIoKQorICAgIERpc2FibGVQcmV0 dHlQcmludGVyKCkKSW5kZXg6IHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXBw LW1haW50LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVz dHN1aXRlL2dkYi5weXRob24vcHktcHAtbWFpbnQuYwpkaWZmIC1OIHRlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LXBwLW1haW50LmMKLS0tIC9kZXYvbnVsbAkx IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1wcC1tYWludC5jCTIgTm92IDIwMTAgMTc6MTU6MjIgLTAwMDAK QEAgLTAsMCArMSw2OCBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9m IEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTAg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3Ry dWN0IGZ1bmN0aW9uX2xvb2t1cF90ZXN0Cit7CisgIGludCB4LHk7Cit9Owor Cit2b2lkCitpbml0X2ZsdCAoc3RydWN0IGZ1bmN0aW9uX2xvb2t1cF90ZXN0 ICpwLCBpbnQgeCwgaW50IHkpCit7CisgIHAtPnggPSB4OworICBwLT55ID0g eTsKK30KKworc3RydWN0IHMKK3sKKyAgaW50IGE7CisgIGludCAqYjsKK307 CisKK3N0cnVjdCBzcworeworICBzdHJ1Y3QgcyBhOworICBzdHJ1Y3QgcyBi OworfTsKKwordm9pZAoraW5pdF9zIChzdHJ1Y3QgcyAqcywgaW50IGEpCit7 CisgIHMtPmEgPSBhOworICBzLT5iID0gJnMtPmE7Cit9CisKK3ZvaWQKK2lu aXRfc3MgKHN0cnVjdCBzcyAqcywgaW50IGEsIGludCBiKQoreworICBpbml0 X3MgKCZzLT5hLCBhKTsKKyAgaW5pdF9zICgmcy0+YiwgYik7Cit9CisKK2lu dAorbWFpbiAoKQoreworICBzdHJ1Y3QgZnVuY3Rpb25fbG9va3VwX3Rlc3Qg Zmx0OworICBzdHJ1Y3Qgc3Mgc3M7CisKKyAgaW5pdF9mbHQgKCZmbHQsIDQy LCA0Myk7CisgIGluaXRfc3MgKCZzcywgMSwgMik7CisgIAorICByZXR1cm4g MDsgICAgICAvKiBicmVhayB0byBpbnNwZWN0ICovCit9CkluZGV4OiB0ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1wcC1tYWludC5leHAKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5weXRob24vcHkt cHAtbWFpbnQuZXhwCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5weXRob24vcHkt cHAtbWFpbnQuZXhwCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDow MCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5weXRob24vcHktcHAtbWFpbnQu ZXhwCTIgTm92IDIwMTAgMTc6MTU6MjIgLTAwMDAKQEAgLTAsMCArMSwxMjYg QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgUHl0aG9u LWJhc2VkCisjIHByZXR0eS1wcmludGluZyBmb3IgdGhlIENMSS4KKworaWYg JHRyYWNlbGV2ZWwgdGhlbiB7CisgICAgc3RyYWNlICR0cmFjZWxldmVsCit9 CisKK2lmIFtpc19yZW1vdGUgaG9zdF0geworICAgIHVudGVzdGVkICJweS1w cC1tYWludC5leHAgY2FuIG9ubHkgYmUgcnVuIGxvY2FsbHkiCisgICAgcmV0 dXJuIC0xCit9CisKK2xvYWRfbGliIGdkYi1weXRob24uZXhwCisKK3NldCB0 ZXN0ZmlsZSAicHktcHAtbWFpbnQiCitzZXQgc3JjZmlsZSAke3Rlc3RmaWxl fS5jCitzZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJkaXJ9LyR7dGVzdGZp bGV9CisKKyMgU3RhcnQgd2l0aCBhIGZyZXNoIGdkYi4KK2dkYl9leGl0Citn ZGJfc3RhcnQKKworIyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24gc2NyaXB0 aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBbc2tpcF9weXRob25fdGVzdHNd IH0geyBjb250aW51ZSB9CisKK2lmIHsgW2dkYl9jb21waWxlICIke3NyY2Rp cn0vJHtzdWJkaXJ9LyR7c3JjZmlsZX0iICIke2JpbmZpbGV9IiBleGVjdXRh YmxlICJkZWJ1ZyJdICE9ICIiIH0geworICAgIHVudGVzdGVkICJDb3VsZG4n dCBjb21waWxlICR7c3JjZmlsZX0iCisgICAgcmV0dXJuIC0xCit9CisKK2dk Yl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQg JHtiaW5maWxlfQorCitpZiAhW3J1bnRvX21haW4gXSB0aGVuIHsKKyAgICBm YWlsICJDYW4ndCBydW4gdG8gbWFpbiIKKyAgICByZXR1cm4gLTEKK30KKwor IyBFbnN1cmUgc3lzLnBhdGgsIGV0LmFsLiBhcmUgaW5pdGlhbGl6ZWQgcHJv cGVybHkuCitnZGJfY2hlY2tfcHl0aG9uX2NvbmZpZworCitnZGJfdGVzdCAi YiBbZ2RiX2dldF9saW5lX251bWJlciB7YnJlYWsgdG8gaW5zcGVjdH0gJHt0 ZXN0ZmlsZX0uYyBdIiBcCisgICAgIi4qQnJlYWtwb2ludC4qIgorZ2RiX3Rl c3QgImNvbnRpbnVlIiAiLipCcmVha3BvaW50LioiCisKK3NldCBweXRob25f ZmlsZSAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5CisKK2dk Yl90ZXN0X25vX291dHB1dCAicHl0aG9uIGV4ZWNmaWxlICgnJHtweXRob25f ZmlsZX0nKSIgIiIKKworZ2RiX3Rlc3QgImluZm8gcHJldHR5LXByaW50ZXIi IFwKKyAgICB7LipmdW5jdGlvbl9sb29rdXBfdGVzdC4qcHAtdGVzdC4qc3Ry dWN0IHNzLip9CisKK2dkYl90ZXN0ICJpbmZvIHByZXR0eS1wcmludGVyIGds b2JhbCAuKmZ1bmN0aW9uIiBcCisgICAgey4qZnVuY3Rpb25fbG9va3VwX3Rl c3QuKn0KKworZ2RiX3Rlc3QgImluZm8gcHJldHR5LXByaW50ZXIgLiogcHAt dGVzdCIgXAorICAgIHsuKnBwLXRlc3QuKnN0cnVjdCBzcy4qfQorCitnZGJf dGVzdCAicHJpbnQgZmx0IiAiID0geD08NDI+IHk9PDQzPiIgXAorICAgICJw cmludCBmbHQgZW5hYmxlZCAjMSIKKworZ2RiX3Rlc3QgInByaW50IHNzIiAi ID0gYT08YT08MT4gYj08JGhleD4+IGI9PGE9PDI+IGI9PCRoZXg+PiIgXAor ICAgICJwcmludCBzcyBlbmFibGVkICMxIgorCitnZGJfdGVzdCAiZGlzYWJs ZSBwcmV0dHktcHJpbnRlciIgXAorICAgICI1IHByaW50ZXJzIGRpc2FibGVk LiowIG9mIDUgcHJpbnRlcnMgZW5hYmxlZCIKKworZ2RiX3Rlc3QgImRpc2Fi bGUgcHJldHR5LXByaW50ZXIgZ2xvYmFsIiBcCisgICAgIjAgcHJpbnRlcnMg ZGlzYWJsZWQuKjAgb2YgNSBwcmludGVycyBlbmFibGVkIgorCitnZGJfdGVz dCAiZGlzYWJsZSBwcmV0dHktcHJpbnRlciBnbG9iYWwgbG9va3VwX2Z1bmN0 aW9uX2xvb2t1cF90ZXN0IiBcCisgICAgIjAgcHJpbnRlcnMgZGlzYWJsZWQu KjAgb2YgNSBwcmludGVycyBlbmFibGVkIgorCitnZGJfdGVzdCAiZGlzYWJs ZSBwcmV0dHktcHJpbnRlciBnbG9iYWwgcHAtdGVzdDouKiIgXAorICAgICIw IHByaW50ZXJzIGRpc2FibGVkLiowIG9mIDUgcHJpbnRlcnMgZW5hYmxlZCIK KworZ2RiX3Rlc3QgImluZm8gcHJldHR5LXByaW50ZXIgZ2xvYmFsIC4qZnVu Y3Rpb24iIFwKKyAgICB7LipmdW5jdGlvbl9sb29rdXBfdGVzdCBcW2Rpc2Fi bGVkXF0uKn0KKworZ2RiX3Rlc3QgImluZm8gcHJldHR5LXByaW50ZXIgLiog cHAtdGVzdCIgXAorICAgIHsuKnBwLXRlc3QuKnN0cnVjdCBzcyBcW2Rpc2Fi bGVkXF0uKn0KKworZ2RiX3Rlc3QgInByaW50IGZsdCIgIiA9IHt4ID0gNDIs IHkgPSA0M30iIFwKKyAgICAicHJpbnQgZmx0IGRpc2FibGVkIgorCitnZGJf dGVzdCAicHJpbnQgc3MiICIgPSB7YSA9IHthID0gMSwgYiA9ICRoZXh9LCBi ID0ge2EgPSAyLCBiID0gJGhleH19IiBcCisgICAgInByaW50IHNzIGRpc2Fi bGVkIgorCitnZGJfdGVzdCAiZW5hYmxlIHByZXR0eS1wcmludGVyIGdsb2Jh bCBsb29rdXBfZnVuY3Rpb25fbG9va3VwX3Rlc3QiIFwKKyAgICAiMSBwcmlu dGVyIGVuYWJsZWQuKjEgb2YgNSBwcmludGVycyBlbmFibGVkIgorCisjIFRo aXMgZG9lc24ndCBlbmFibGUgYW55IHByaW50ZXJzIGJlY2F1c2UgZWFjaCBz dWJwcmludGVyIGluIHRoZSBjb2xsZWN0aW9uCisjIGlzIHN0aWxsIGluZGl2 aWR1YWxseSBkaXNhYmxlZC4gIEJ1dCB0aGlzIGlzIHN0aWxsIG5lZWRlZCwg dG8gZW5hYmxlIHRoZQorIyBjb2xsZWN0aW9uIGl0c2VsZi4KK2dkYl90ZXN0 ICJlbmFibGUgcHJldHR5LXByaW50ZXIgZ2xvYmFsIHBwLXRlc3QiIFwKKyAg ICAiMCBwcmludGVycyBlbmFibGVkLioxIG9mIDUgcHJpbnRlcnMgZW5hYmxl ZCIKKworZ2RiX3Rlc3QgImVuYWJsZSBwcmV0dHktcHJpbnRlciBnbG9iYWwg cHAtdGVzdDouKnNzLioiIFwKKyAgICAiMiBwcmludGVycyBlbmFibGVkLioz IG9mIDUgcHJpbnRlcnMgZW5hYmxlZCIKKworZ2RiX3Rlc3QgImVuYWJsZSBw cmV0dHktcHJpbnRlciBnbG9iYWwgcHAtdGVzdDouKnMuKiIgXAorICAgICIy IHByaW50ZXJzIGVuYWJsZWQuKjUgb2YgNSBwcmludGVycyBlbmFibGVkIgor CitnZGJfdGVzdCAiaW5mbyBwcmV0dHktcHJpbnRlciIgXAorICAgIHsuKmZ1 bmN0aW9uX2xvb2t1cF90ZXN0LipwcC10ZXN0LipzdHJ1Y3Qgc3MuKn0KKwor Z2RiX3Rlc3QgInByaW50IGZsdCIgIiA9IHg9PDQyPiB5PTw0Mz4iIFwKKyAg ICAicHJpbnQgZmx0IHJlLWVuYWJsZWQiCisKK2dkYl90ZXN0ICJwcmludCBz cyIgIiA9IGE9PGE9PDE+IGI9PCRoZXg+PiBiPTxhPTwyPiBiPTwkaGV4Pj4i IFwKKyAgICAicHJpbnQgc3MgcmUtZW5hYmxlZCIKSW5kZXg6IHRlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LXBwLW1haW50LnB5Cj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXBwLW1h aW50LnB5CmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5weXRob24vcHktcHAtbWFp bnQucHkKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw CisrKyB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1wcC1tYWludC5weQkyIE5v diAyMDEwIDE3OjE1OjIyIC0wMDAwCkBAIC0wLDAgKzEsNzQgQEAKKyMgQ29w eXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgcHl0aG9uIHByZXR0eQor IyBwcmludGVycy4KKworaW1wb3J0IHJlCitpbXBvcnQgZ2RiLnR5cGVzCitp bXBvcnQgZ2RiLnByaW50aW5nCisKKworZGVmIGxvb2t1cF9mdW5jdGlvbl9s b29rdXBfdGVzdCh2YWwpOgorICAgIGNsYXNzIFByaW50RnVuY3Rpb25Mb29r dXAob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCk6 CisgICAgICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAgICAgIGRlZiB0 b19zdHJpbmcoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gKCJ4PTwiICsg c3RyKHNlbGYudmFsWyJ4Il0pICsKKyAgICAgICAgICAgICAgICAgICAgIj4g eT08IiArIHN0cihzZWxmLnZhbFsieSJdKSArICI+IikKKworICAgIHR5cGVu YW1lID0gZ2RiLnR5cGVzLmdldF9iYXNpY190eXBlKHZhbC50eXBlKS50YWcK KyAgICAjIE5vdGU6IHR5cGVuYW1lIGNvdWxkIGJlIE5vbmUuCisgICAgaWYg dHlwZW5hbWUgPT0gImZ1bmN0aW9uX2xvb2t1cF90ZXN0IjoKKyAgICAgICAg cmV0dXJuIFByaW50RnVuY3Rpb25Mb29rdXAodmFsKQorICAgIHJldHVybiBO b25lCisKKworY2xhc3MgcHBfczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwg dmFsKToKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19z dHJpbmcoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnZhbFsiYSJdCisgICAg ICAgIGIgPSBzZWxmLnZhbFsiYiJdCisgICAgICAgIGlmIGEuYWRkcmVzcyAh PSBiOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCImYSglcykgIT0g YiglcykiICUgKHN0cihhLmFkZHJlc3MpLCBzdHIoYikpKQorICAgICAgICBy ZXR1cm4gImE9PCIgKyBzdHIoc2VsZi52YWxbImEiXSkgKyAiPiBiPTwiICsg c3RyKHNlbGYudmFsWyJiIl0pICsgIj4iCisKKworY2xhc3MgcHBfc3M6Cisg ICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCk6CisgICAgICAgIHNlbGYudmFs ID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICBy ZXR1cm4gImE9PCIgKyBzdHIoc2VsZi52YWxbImEiXSkgKyAiPiBiPTwiICsg c3RyKHNlbGYudmFsWyJiIl0pICsgIj4iCisKKworZGVmIGJ1aWxkX3ByZXR0 eV9wcmludGVyKCk6CisgICAgcHAgPSBnZGIucHJpbnRpbmcuUmVnZXhwQ29s bGVjdGlvblByZXR0eVByaW50ZXIoInBwLXRlc3QiKQorCisgICAgcHAuYWRk X3ByaW50ZXIoJ3N0cnVjdCBzJywgJ15zdHJ1Y3QgcyQnLCBwcF9zKQorICAg IHBwLmFkZF9wcmludGVyKCdzJywgJ15zJCcsIHBwX3MpCisKKyAgICAjIFVz ZSBhIGxhbWJkYSB0aGlzIHRpbWUgdG8gZXhlcmNpc2UgZG9pbmcgdGhpbmdz IHRoaXMgd2F5LgorICAgIHBwLmFkZF9wcmludGVyKCdzdHJ1Y3Qgc3MnLCAn XnN0cnVjdCBzcyQnLCBsYW1iZGEgdmFsOiBwcF9zcyh2YWwpKQorICAgIHBw LmFkZF9wcmludGVyKCdzcycsICdec3MkJywgbGFtYmRhIHZhbDogcHBfc3Mo dmFsKSkKKworICAgIHJldHVybiBwcAorCisKK2dkYi5wcmludGluZy5yZWdp c3Rlcl9wcmV0dHlfcHJpbnRlcihnZGIsIGxvb2t1cF9mdW5jdGlvbl9sb29r dXBfdGVzdCkKK2dkYi5wcmludGluZy5yZWdpc3Rlcl9wcmV0dHlfcHJpbnRl cihnZGIsIGJ1aWxkX3ByZXR0eV9wcmludGVyKCkpCg== --20cf303bf516677def0494155875--