From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: =?UTF-8?Q?Linus_Bj=C3=B6rnstam?= Newsgroups: gmane.lisp.guile.devel Subject: Re: [PATCH] Add srfi-171 to guile Date: Mon, 23 Mar 2020 18:17:16 +0100 Message-ID: <1b731380-52d0-43ff-b278-95461205161c@www.fastmail.com> References: <87mub2ywcc.fsf@pobox.com> <87fteic3k4.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=d04c7496f0e44060a020e8f82edf4e96 Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="126964"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Cyrus-JMAP/3.1.7-1021-g152deaf-fmstable-20200319v1 Cc: Guile Devel To: =?UTF-8?Q?Ludovic_Court=C3=A8s?= Original-X-From: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Mon Mar 23 18:17:58 2020 Return-path: Envelope-to: guile-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jGQi5-000Wrm-91 for guile-devel@m.gmane-mx.org; Mon, 23 Mar 2020 18:17:57 +0100 Original-Received: from localhost ([::1]:37342 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGQi4-0002Iw-9V for guile-devel@m.gmane-mx.org; Mon, 23 Mar 2020 13:17:56 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:47976) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGQhp-0002IF-2q for guile-devel@gnu.org; Mon, 23 Mar 2020 13:17:43 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGQhn-00007E-6e for guile-devel@gnu.org; Mon, 23 Mar 2020 13:17:40 -0400 Original-Received: from out5-smtp.messagingengine.com ([66.111.4.29]:40241) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGQhm-00006W-LF; Mon, 23 Mar 2020 13:17:39 -0400 Original-Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id E6A945C043A; Mon, 23 Mar 2020 13:17:36 -0400 (EDT) Original-Received: from imap1 ([10.202.2.51]) by compute7.internal (MEProxy); Mon, 23 Mar 2020 13:17:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=veryfast.biz; h= mime-version:message-id:in-reply-to:references:date:from:to:cc :subject:content-type; s=fm2; bh=HEq3P8+48co56emzQbnpI0w3eiSYmPv Xy39LDvZCPus=; b=boNz+2tewE2OQJtq7OsL5kdMgKXP8UuV0s6OlN7kTcn8Pb3 p4lTQhd3HyYdVUMhV9Cgih8Zw2dBHkRRGoBbkeR7vIpntMalqzUMLlrXFss17zeR U5+FK160eOq+UB7rHhbsWJLvx+euRyvcZuM19S7RGcJbHZMZHnCVVodxn129dRJm XQEyrBIRpBPhFdmFDha38z+wg5pdHd+L3i89phjsODvJWB33Zb3+lhB+ahqKU4Zn zKnh3RAldzfXdnMcjaSNy/pjyB1sON8fQRfTBTRKbKGT1KtoEY+r68Bn7JfmHM39 RJSLAegz6aVz35izlzAcIsXUzka0A84JBvOhggg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=HEq3P8 +48co56emzQbnpI0w3eiSYmPvXy39LDvZCPus=; b=U8FdaLjYSXBi92Tjmwuwgi 3bMymd4/Gf/ZhYjYP/zkxa29SgAzTi9AUfhpVHG98HCIeQoVgtlIYqarOYVBVbZB a1t30uI09JOf7amBn5btozQWc9ZuwudrkmDH87C/nCEdokSIwmbWBxcJKISw0AhX jnOiSKbNqqh3lFFNijW4fKKwNoidYNahefvFyXg5LpzphA/NQ3NYlNsptA8uU+HQ p3cRChiCnovsbA8op/2y+FFZYo57EihSqpNIEWBCSyMRGnaV3gtPB6kSpO1rziex rXsDkTGi8PT4AZFj1pKloqQK+p4ibxA1w1N3qqGE+wnv8fCqGswonSlBWaGRzBQA == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrudegkedgleejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfggfkjghffffhvffutgesmhdtreerreerjeenucfhrhhomhepnfhinhhu shgpuehjnphrnhhsthgrmhcuoehlihhnuhhsrdgsjhhorhhnshhtrghmsehvvghrhihfrg hsthdrsghiiieqnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhf rhhomheplhhinhhushdrsghjohhrnhhsthgrmhesvhgvrhihfhgrshhtrdgsihii X-ME-Proxy: Original-Received: by mailuser.nyi.internal (Postfix, from userid 501) id 720C2C200A4; Mon, 23 Mar 2020 13:17:36 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface In-Reply-To: <87fteic3k4.fsf@gnu.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.111.4.29 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Original-Sender: "guile-devel" Xref: news.gmane.io gmane.lisp.guile.devel:20461 Archived-At: --d04c7496f0e44060a020e8f82edf4e96 Content-Type: text/plain;charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Ludo!=20 All things except some of the docstrings are fixed. The reason not all o= f the docstrings are fixed according to the suggestion is that the reduc= ers you specifically used as examples do not return reducers, but ARE re= ducers, and specifically they are srfi-171-styled reducers. i.e: they do= not return anything, but are meant to be used without calling them: (li= st-transduce (tmap 1+) rcons '(1 2 3)), in contrast to (list-transduce (= tmap 1+) (revery odd?) '(1 3 5 6)). All other docstrings and all other s= uggestions are addressed.=20 It compiles fine against the latest master on my ARM64 linux computer. Best regards Linus Bj=C3=B6rnstam On Sun, 8 Mar 2020, at 15:40, Ludovic Court=C3=A8s wrote: > Hi Linus, >=20 > Linus Bj=C3=B6rnstam skribis: >=20 > > From c382d7808a8d41cd4e9ef8a17b7ba9553835499b Mon Sep 17 00:00:00 20= 01 > > From: =3D?UTF-8?q?Linus=3D20Bj=3DC3=3DB6rnstam?=3D > > Date: Thu, 16 Jan 2020 20:31:45 +0100 > > Subject: [PATCH] Add SRFI-171 (transducers) to guile. > > > > The two guile-specific additions are powerful transducers which can = be > > used to generalize transducers like tsegment. They are hard to get > > right, but powerful and useful enough to warrant inclusion. > > > > * doc/ref/srfi-modules.texi: added srfi-171 section > > * module/Makefile.am (SOURCES): > > * module/srfi/srfi-171.scm: > > * module/srfi/srfi-171/meta.scm: Add SRFI-171 > > * module/srfi/srfi-171/gnu.scm: Add 2 guile-specific extensions. > > * test-suite/Makefile.am (SCM_TESTS): > > * test-suite/tests/srfi-171.test: Add tests. >=20 > I think the patch is almost ready for inclusion, thanks for taking the= > time to address Andy=E2=80=99s comments! >=20 > I have additional stylistic comments, and then I think we=E2=80=99re r= eady to go: >=20 > > +Transducers are oblivious to what kind of process they are used in,= and > > +are composable without building intermediate collections. This mean= s we > > +can create a transducer that squares all even numbers: @code{(compo= se > > +(tfilter odd?) (tmap (lambda (x) (* x x))))} and reuse it with list= s, >=20 > For readability, it=E2=80=99s probably best to use @example rather tha= n @code > for the example above (for an example larger than a couple of words in= > general.) >=20 > > +The central part of transducers are 3-arity reducing functions. >=20 > In general, RnRS and Guile use the term =E2=80=9Cprocedure=E2=80=9D ra= ther than > =E2=80=9Cfunctions=E2=80=9D. Not a big deal, but bonus points if you = can adjust the > documentation accordingly. :-) >=20 > > +@itemize > > +@item > > +(): Produce an identity >=20 > s/an/the/ ? >=20 > > +@subheading The concept of transducers > > + > > +A transducer is a one-arity function that takes a reducer and produ= ces a > > +reducing function that behaves as follows: > > + > > +@itemize > > +@item > > +(): calls reducer with no arguments (producing its identity) >=20 > It=E2=80=99s not clear from this where you=E2=80=99d write () (there=E2= =80=99s a missing @code > here, right?), which is not a valid Scheme expression in itself. > Perhaps an extra bit of introduction is needed above for clarity? >=20 > Also, this is under the =E2=80=9CConcept=E2=80=9D heading, but it look= s more like the > API, no? >=20 > > +@item > > +(result-so-far): Maybe transform the result-so-far and call reducer= with it. > > + > > +@item > > +(result-so-far input) Maybe do something to input and maybe call th= e > > +reducer with result-so-far and the maybe-transformed input. >=20 > Missing @code ornaments here. >=20 > > +a simple example is as following: @code{ (list-transduce (tfilter o= dd?) > ^ > Capital. >=20 > @example for the example. >=20 > > ++ '(1 2 3 4 5))}. This first returns a transducer filtering all odd= > > +elements, then it runs @code{+} without arguments to retrieve its > > +identity. It then starts the transduction by passing @code{+} to th= e >=20 > Please make sure to add two spaces after end-of-sentence periods > throughout the document. >=20 > > + Even though transducers appear to be somewhat of a generalisation = of > > + map and friends, this is not really true. Since transducers don't = know >=20 > s/map/@code{map}/ >=20 > > +@deffn {Scheme Procedure} list-transduce xform f lst > > +@deffnx {Scheme Procedure} list-transduce xform f identity lst > > + Initializes the transducer @code{xform} by passing the reducer @co= de{f} > > + to it. If no identity is provided, @code{f} is run without argumen= ts to > > + return the reducer identity. It then reduces over @code{lst} using= the > > + identity as the seed. >=20 > Please remove the extra leading space. Also, use @var, and use > imperative tense, like so: >=20 > @deffn {Scheme Procedure} list-transduce @var{xform} @var{f} @var{ls= t} > Initialize the transducer @var{xform} by passing the reduce @var{f} = to > it. =E2=80=A6 > @end deffn >=20 > > +If one of the transducers finishes early (such as @code{ttake} or > > +@code{tdrop}), it communicates this by returning a reduced value, w= hich > > +in the sample implementation is just a value wrapped in a SRFI 9 re= cord > > +type named "reduced". If such a value is returned by the transducer= , >=20 > For proper typesetting, write ``reduced'' instead of "reduced". >=20 > s/SRFI /SRFI-/ >=20 > > +Same as @code{list-transduce}, but for vectors, strings, u8-bytevec= tors > > +and srfi-158-styled generators respectively. > > + > > +@end deffn >=20 > Please remove the newline before @end deffn. >=20 > > +@node SRFI-171 Helpers > > +@subsubsection Helper functions for writing transducers > > +@cindex transducers helpers > > + > > +These functions are in the @code{(srfi 171 meta)} module and are on= ly > ^ > (srfi srfi-171 meta) >=20 > > +@deffn {Scheme Procedure} reduced value > > + > > +Wraps a value in a @code{} container, signalling that the > > +reduction should stop. > > +@end deffn >=20 > Please remove extra line before @deffn (throughout the document). >=20 > > +(define-module (srfi srfi-171) > > + #:declarative? #t >=20 > Is it necessary? If so, could you add a comment so our future selves > know whether this is still necessary? :-) >=20 > > +(define reverse-rcons > > + (case-lambda > > + "A transducer-friendly consing reducer with '() as identity. > > +The resulting list is in reverse order." >=20 > In general, the style for docstrings is to use imperative tense, like:= >=20 > Return a consing reducer with the empty list as its identity. >=20 > (Throughout the file.) >=20 > Could you also add docstrings to the exported procedures that lack one= ? > (Docstrings can be short of course, no need to be as precise as in the= > manual.) >=20 > > +++ b/test-suite/tests/srfi-171.test > > @@ -0,0 +1,195 @@ > > +;; TODO: test all transducers that take an equality predicate > > +;; TODO: test treplace with all kinds of hash tables >=20 > Should we wait for these tests before merging? Tested code is always > better than untested code. :-) >=20 > Also, please add a Guile copyright header. >=20 > > + (pass-if "tfilter+tmap" (equal? > > + '(1 3 5) > > + (list-transduce (compose (tfilter even?)= (tmap add1)) rcons numeric-list))) >=20 > Please wrap lines to 80 chars. >=20 > Could you send an updated patch? >=20 > Thank you! >=20 > Ludo=E2=80=99. > --d04c7496f0e44060a020e8f82edf4e96 Content-Disposition: attachment;filename="0001-Add-SRFI-171-to-guile.patch" Content-Type: application/octet-stream; name="0001-Add-SRFI-171-to-guile.patch" Content-Transfer-Encoding: BASE64 RnJvbSAxNDUwNjYxYzI0MzI1MjJlZTQxYjQzZGZmZDA1ZTQ2Mzg0YTNmZjFiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/TGludXM9MjBCaj1DMz1CNnJuc3Rh bT89IDxsaW51cy5iam9ybnN0YW1AZmFzdG1haWwuc2U+CkRhdGU6IE1vbiwgMjMgTWFyIDIw MjAgMTQ6NTk6MzkgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBZGQgU1JGSS0xNzEgdG8gZ3Vp bGUKClRoaXMgYWRkcyBTUkZJLTE3MSAodHJhbnNkdWNlcnMpIHRvIGd1aWxlLiAKClRoZSB0 d28gZ3VpbGUtc3BlY2lmaWMgYWRkaXRpb25zIGFyZSBwb3dlcmZ1bCB0cmFuc2R1Y2VycyB3 aGljaCBjYW4gYmUKdXNlZCB0byBnZW5lcmFsaXplIHRyYW5zZHVjZXJzIGxpa2UgdHNlZ21l bnQuIFRoZXkgYXJlIGhhcmQgdG8gZ2V0CnJpZ2h0LCBidXQgcG93ZXJmdWwgYW5kIHVzZWZ1 bCBlbm91Z2ggdG8gd2FycmFudCBpbmNsdXNpb24uCgogKiBkb2MvcmVmL3NyZmktbW9kdWxl cy50ZXhpOiBhZGRlZCBzcmZpLTE3MSBzZWN0aW9uCiAqIG1vZHVsZS9NYWtlZmlsZS5hbSAo U09VUkNFUyk6CiAqIG1vZHVsZS9zcmZpL3NyZmktMTcxLnNjbToKICogbW9kdWxlL3NyZmkv c3JmaS0xNzEvbWV0YS5zY206IEFkZCBTUkZJLTE3MQogKiBtb2R1bGUvc3JmaS9zcmZpLTE3 MS9nbnUuc2NtOiBBZGQgMiBndWlsZS1zcGVjaWZpYyBleHRlbnNpb25zLgogKiB0ZXN0LXN1 aXRlL01ha2VmaWxlLmFtIChTQ01fVEVTVFMpOgogKiB0ZXN0LXN1aXRlL3Rlc3RzL3NyZmkt MTcxLnRlc3Q6IEFkZCB0ZXN0cy4KLS0tCiBkb2MvcmVmL3NyZmktbW9kdWxlcy50ZXhpICAg ICAgfCA0ODcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBtb2R1bGUvTWFr ZWZpbGUuYW0gICAgICAgICAgICAgfCAgIDMgKwogbW9kdWxlL3NyZmkvc3JmaS0xNzEuc2Nt ICAgICAgIHwgNDU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIG1vZHVsZS9z cmZpL3NyZmktMTcxL2dudS5zY20gICB8ICA2NSArKysrKwogbW9kdWxlL3NyZmkvc3JmaS0x NzEvbWV0YS5zY20gIHwgMTEzICsrKysrKysrCiB0ZXN0LXN1aXRlL01ha2VmaWxlLmFtICAg ICAgICAgfCAgIDEgKwogdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTE3MS50ZXN0IHwgMjY3ICsr KysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCAxMzkzIGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBtb2R1bGUvc3JmaS9zcmZpLTE3MS5zY20KIGNyZWF0ZSBt b2RlIDEwMDY0NCBtb2R1bGUvc3JmaS9zcmZpLTE3MS9nbnUuc2NtCiBjcmVhdGUgbW9kZSAx MDA2NDQgbW9kdWxlL3NyZmkvc3JmaS0xNzEvbWV0YS5zY20KIGNyZWF0ZSBtb2RlIDEwMDY0 NCB0ZXN0LXN1aXRlL3Rlc3RzL3NyZmktMTcxLnRlc3QKCmRpZmYgLS1naXQgYS9kb2MvcmVm L3NyZmktbW9kdWxlcy50ZXhpIGIvZG9jL3JlZi9zcmZpLW1vZHVsZXMudGV4aQppbmRleCA4 ZjViNjQzYzYuLmZkMTkwNzk5YyAxMDA2NDQKLS0tIGEvZG9jL3JlZi9zcmZpLW1vZHVsZXMu dGV4aQorKysgYi9kb2MvcmVmL3NyZmktbW9kdWxlcy50ZXhpCkBAIC02NCw2ICs2NCw3IEBA IGdldCB0aGUgcmVsZXZhbnQgU1JGSSBkb2N1bWVudHMgZnJvbSB0aGUgU1JGSSBob21lIHBh Z2UKICogU1JGSS05ODo6ICAgICAgICAgICAgICAgICAgICAgQWNjZXNzaW5nIGVudmlyb25t ZW50IHZhcmlhYmxlcy4KICogU1JGSS0xMDU6OiAgICAgICAgICAgICAgICAgICAgQ3VybHkt aW5maXggZXhwcmVzc2lvbnMuCiAqIFNSRkktMTExOjogICAgICAgICAgICAgICAgICAgIEJv eGVzLgorKiBTUkZJLTE3MTo6ICAgICAgICAgICAgICAgICAgICBUcmFuc2R1Y2VycwogQGVu ZCBtZW51CiAKIApAQCAtNTYwMiw2ICs1NjAzLDQ5MiBAQCBSZXR1cm4gdGhlIGN1cnJlbnQg Y29udGVudHMgb2YgQHZhcntib3h9LgogU2V0IHRoZSBjb250ZW50cyBvZiBAdmFye2JveH0g dG8gQHZhcnt2YWx1ZX0uCiBAZW5kIGRlZmZuCiAKK0Bub2RlIFNSRkktMTcxCitAc3Vic2Vj dGlvbiBUcmFuc2R1Y2VycworQGNpbmRleCBTUkZJLTE3MQorQGNpbmRleCB0cmFuc2R1Y2Vy cworCitTb21lIG9mIHRoZSBtb3N0IGNvbW1vbiBvcGVyYXRpb25zIHVzZWQgaW4gdGhlIFNj aGVtZSBsYW5ndWFnZSBhcmUgdGhvc2UKK3RyYW5zZm9ybWluZyBsaXN0czogbWFwLCBmaWx0 ZXIsIHRha2UgYW5kIHNvIG9uLiAgVGhleSB3b3JrIHdlbGwsIGFyZSB3ZWxsCit1bmRlcnN0 b29kLCBhbmQgYXJlIHVzZWQgZGFpbHkgYnkgbW9zdCBTY2hlbWUgcHJvZ3JhbW1lcnMuICBU aGV5IGFyZSBob3dldmVyIG5vdAorZ2VuZXJhbCBiZWNhdXNlIHRoZXkgb25seSB3b3JrIG9u IGxpc3RzLCBhbmQgdGhleSBkbyBub3QgY29tcG9zZSB2ZXJ5IHdlbGwKK3NpbmNlIGNvbWJp bmluZyBOIG9mIHRoZW0gYnVpbGRzIEBjb2RleygtIE4gMSl9IGludGVybWVkaWF0ZSBsaXN0 cy4KKworVHJhbnNkdWNlcnMgYXJlIG9ibGl2aW91cyB0byB3aGF0IGtpbmQgb2YgcHJvY2Vz cyB0aGV5IGFyZSB1c2VkIGluLCBhbmQKK2FyZSBjb21wb3NhYmxlIHdpdGhvdXQgYnVpbGRp bmcgaW50ZXJtZWRpYXRlIGNvbGxlY3Rpb25zLiAgVGhpcyBtZWFucyB3ZQorY2FuIGNyZWF0 ZSBhIHRyYW5zZHVjZXIgdGhhdCBzcXVhcmVzIGFsbCBldmVuIG51bWJlcnM6CisKK0BleGFt cGxlCisoY29tcG9zZSAodGZpbHRlciBvZGQ/KSAodG1hcCAobGFtYmRhICh4KSAoKiB4IHgp KSkpCitAZW5kIGV4YW1wbGUKKworYW5kIHJldXNlIGl0IHdpdGggbGlzdHMsIHZlY3RvcnMs IG9yIGluIGp1c3QgYWJvdXQgYW55IGNvbnRleHQgd2hlcmUKK2RhdGEgZmxvd3MgaW4gb25l IGRpcmVjdGlvbi4gIFdlIGNvdWxkIHVzZSBpdCBhcyBhIHByb2Nlc3Npbmcgc3RlcCBmb3IK K2FzeW5jaHJvbm91cyBjaGFubmVscywgd2l0aCBhbiBldmVudCBmcmFtZXdvcmsgYXMgYSBw cmUtcHJvY2Vzc2luZyBzdGVwLAorb3IgZXZlbiBpbiBsYXp5IGNvbnRleHRzIHdoZXJlIHlv dSBwYXNzIGEgbGF6eSBjb2xsZWN0aW9uIGFuZCBhCit0cmFuc2R1Y2VyIHRvIGEgZnVuY3Rp b24gYW5kIGdldCBhIG5ldyBsYXp5IGNvbGxlY3Rpb24gYmFjay4KKworVGhlIHRyYWRpdGlv bmFsIFNjaGVtZSBhcHByb2FjaCBvZiBoYXZpbmcgY29sbGVjdGlvbi1zcGVjaWZpYyBwcm9j ZWR1cmVzCitpcyBub3QgY2hhbmdlZC4gIFdlIGluc3RlYWQgc3BlY2lmeSBhIGdlbmVyYWwg Zm9ybSBvZiB0cmFuc2Zvcm1hdGlvbnMKK3RoYXQgY29tcGxlbWVudCB0aGVzZSBwcm9jZWR1 cmVzLiBUaGUgYmVuZWZpdHMgYXJlIG9idmlvdXM6IGEgY2xlYXIsCit3ZWxsLXVuZGVyc3Rv b2Qgd2F5IG9mIGRlc2NyaWJpbmcgY29tbW9uIHRyYW5zZm9ybWF0aW9ucyBpbiBhIHdheSB0 aGF0CitpcyBmYXN0ZXIgdGhhbiBqdXN0IGNoYWluaW5nIHRoZSBjb2xsZWN0aW9uLXNwZWNp ZmljIGNvdW50ZXJwYXJ0cy4gIEZvcgorZ3VpbGUgaW4gcGFydGljdWxhciB0aGlzIG1lYW5z IGEgbG90IGJldHRlciBHQyBwZXJmb3JtYW5jZS4KKworTm90aWNlIGhvd2V2ZXIgdGhhdCBA Y29kZXsoY29tcG9zZSBAZG90c3t9KX0gY29tcG9zZXMgdHJhbnNkdWNlcnMKK2xlZnQtdG8t cmlnaHQsIGR1ZSB0byBob3cgdHJhbnNkdWNlcnMgYXJlIGluaXRpYXRlZC4KKworQG1lbnUK KyogU1JGSS0xNzEgR2VuZXJhbCBEaXNjdXNzaW9uOjogICAgICAgR2VuZXJhbCBpbmZvcm1h dGlvbiBhYm91dCB0cmFuc2R1Y2VycworKiBTUkZJLTE3MSBBcHBseWluZyBUcmFuc2R1Y2Vy czo6ICAgICBEb2N1bWVudGF0aW9uIG9mIGNvbGxlY3Rpb24tc3BlY2lmaWMgZm9ybXMKKyog U1JGSS0xNzEgUmVkdWNlcnM6OiAgICAgICAgICAgICAgICAgUmVkdWNlcnMgc3BlY2lmaWVk IGJ5IHRoZSBTUkZJCisqIFNSRkktMTcxIFRyYW5zZHVjZXJzOjogICAgICAgICAgICAgIFRy YW5zZHVjZXJzIHNwZWNpZmllZCBieSB0aGUgU1JGSQorKiBTUkZJLTE3MSBIZWxwZXJzOjog ICAgICAgICAgICAgICAgICBVdGlsaXRpZXMgZm9yIHdyaXRpbmcgeW91ciBvd24gdHJhbnNk dWNlcnMKK0BlbmQgbWVudQorCitAbm9kZSBTUkZJLTE3MSBHZW5lcmFsIERpc2N1c3Npb24K K0BzdWJzdWJzZWN0aW9uIFNSRkktMTcxIEdlbmVyYWwgRGlzY3Vzc2lvbgorQGNpbmRleCB0 cmFuc2R1Y2VycyBkaXNjdXNzaW9uCisKK0BzdWJoZWFkaW5nIFRoZSBjb25jZXB0IG9mIHJl ZHVjZXJzCitUaGUgY2VudHJhbCBwYXJ0IG9mIHRyYW5zZHVjZXJzIGFyZSAzLWFyaXR5IHJl ZHVjaW5nIHByb2NlZHVyZXMuCisKK0BpdGVtaXplCitAaXRlbQorbm8gYXJndW1lbnRzOiBQ cm9kdWNlcyB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlZHVjZXIuCisKK0BpdGVtCisocmVzdWx0 LXNvLWZhcik6IGNvbXBsZXRpb24uIFJldHVybnMgQGNvZGV7cmVzdWx0LXNvLWZhcn0gZWl0 aGVyIHdpdGggb3IKK3dpdGhvdXQgdHJhbnNmb3JtaW5nIGl0IGZpcnN0LgorCitAaXRlbQor KHJlc3VsdC1zby1mYXIgaW5wdXQpIGNvbWJpbmVzIEBjb2Rle3Jlc3VsdC1zby1mYXJ9IGFu ZCBAY29kZXtpbnB1dH0gdG8gcHJvZHVjZQorYSBuZXcgQGNvZGV7cmVzdWx0LXNvLWZhcn0u CitAZW5kIGl0ZW1pemUKKworSW4gdGhlIGNhc2Ugb2YgYSBzdW1taW5nIEBjb2Rleyt9IHJl ZHVjZXIsIHRoZSByZWR1Y2VyIHdvdWxkIHByb2R1Y2UsIGluCithcml0eSBvcmRlcjogQGNv ZGV7MH0sIEBjb2Rle3Jlc3VsdC1zby1mYXJ9LCBAY29kZXsoKyByZXN1bHQtc28tZmFyCitp bnB1dCl9LiBUaGlzIGhhcHBlbnMgdG8gYmUgZXhhY3RseSB3aGF0IHRoZSByZWd1bGFyIEBj b2Rleyt9IGRvZXMuCisKK0BzdWJoZWFkaW5nIFRoZSBjb25jZXB0IG9mIHRyYW5zZHVjZXJz CitBIHRyYW5zZHVjZXIgaXMgYSBvbmUtYXJpdHkgcHJvY2VkdXJlIHRoYXQgdGFrZXMgYSBy ZWR1Y2VyIGFuZCBwcm9kdWNlcyBhCityZWR1Y2luZyBmdW5jdGlvbiB0aGF0IGJlaGF2ZXMg YXMgZm9sbG93czoKKworQGl0ZW1pemUKK0BpdGVtCitubyBhcmd1bWVudHM6IGNhbGxzIHJl ZHVjZXIgd2l0aCBubyBhcmd1bWVudHMgKHByb2R1Y2luZyBpdHMgaWRlbnRpdHkpCisKK0Bp dGVtCisocmVzdWx0LXNvLWZhcik6IE1heWJlIHRyYW5zZm9ybSB0aGUgcmVzdWx0LXNvLWZh ciBhbmQgY2FsbCByZWR1Y2VyIHdpdGggaXQuCisKK0BpdGVtCisocmVzdWx0LXNvLWZhciBp bnB1dCkgTWF5YmUgZG8gc29tZXRoaW5nIHRvIGlucHV0IGFuZCBtYXliZSBjYWxsIHRoZQor cmVkdWNlciB3aXRoIHJlc3VsdC1zby1mYXIgYW5kIHRoZSBtYXliZS10cmFuc2Zvcm1lZCBp bnB1dC4KK0BlbmQgaXRlbWl6ZQorCitBIHNpbXBsZSBleGFtcGxlIGlzIGFzIGZvbGxvd2lu ZzoKKworQGV4YW1wbGUKKyhsaXN0LXRyYW5zZHVjZSAodGZpbHRlciBvZGQ/KSsgJygxIDIg MyA0IDUpKS4KK0BlbmQgZXhhbXBsZQorCitUaGlzIGZpcnN0IHJldHVybnMgYSB0cmFuc2R1 Y2VyIGZpbHRlcmluZyBhbGwgb2RkCitlbGVtZW50cywgdGhlbiBpdCBydW5zIEBjb2Rleyt9 IHdpdGhvdXQgYXJndW1lbnRzIHRvIHJldHJpZXZlIGl0cworaWRlbnRpdHkuICBJdCB0aGVu IHN0YXJ0cyB0aGUgdHJhbnNkdWN0aW9uIGJ5IHBhc3NpbmcgQGNvZGV7K30gdG8gdGhlCit0 cmFuc2R1Y2VyIHJldHVybmVkIGJ5IEBjb2Rleyh0ZmlsdGVyIG9kZD8pfSB3aGljaCByZXR1 cm5zIGEgcmVkdWNpbmcKK2Z1bmN0aW9uLiAgSXQgd29ya3Mgbm90IHVubGlrZSByZWR1Y2Ug ZnJvbSBTUkZJIDEsIGJ1dCBhbHNvIGNoZWNrcword2hldGhlciBvbmUgb2YgdGhlIGludGVy bWVkaWF0ZSB0cmFuc2R1Y2VycyByZXR1cm5zIGEgInJlZHVjZWQiIHZhbHVlCisoaW1wbGVt ZW50ZWQgYXMgYSBTUkZJIDkgcmVjb3JkKSwgd2hpY2ggbWVhbnMgdGhlIHJlZHVjdGlvbiBm aW5pc2hlZAorZWFybHkuCisKK0JlY2F1c2UgdHJhbnNkdWNlcnMgY29tcG9zZSBhbmQgdGhl IGZpbmFsIHJlZHVjdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGluCit0aGUgbGFzdCBzdGVwLCBj b21wb3NlZCB0cmFuc2R1Y2VycyB3aWxsIG5vdCBidWlsZCBhbnkgaW50ZXJtZWRpYXRlCity ZXN1bHQgb3IgY29sbGVjdGlvbnMuICBBbHRob3VnaCB0aGUgbm9ybWFsIHdheSBvZiB0aGlu a2luZyBhYm91dAorYXBwbGljYXRpb24gb2YgY29tcG9zZWQgZnVuY3Rpb25zIGlzIHJpZ2h0 IHRvIGxlZnQsIGR1ZSB0byBob3cgdGhlCit0cmFuc2R1Y3Rpb24gaXMgYnVpbHQgaXQgaXMg YXBwbGllZCBsZWZ0IHRvIHJpZ2h0LiAgQGNvZGV7KGNvbXBvc2UKKyh0ZmlsdGVyIG9kZD8p ICh0bWFwIHNxcnQpKX0gd2lsbCBjcmVhdGUgYSB0cmFuc2R1Y2VyIHRoYXQgZmlyc3QgZmls dGVycworb3V0IGFueSBvZGQgdmFsdWVzIGFuZCB0aGVuIGNvbXB1dGVzIHRoZSBzcXVhcmUg cm9vdCBvZiB0aGUgcmVzdC4KKworCitAc3ViaGVhZGluZyBTdGF0ZQorRXZlbiB0aG91Z2gg dHJhbnNkdWNlcnMgYXBwZWFyIHRvIGJlIHNvbWV3aGF0IG9mIGEgZ2VuZXJhbGlzYXRpb24g b2YKK0Bjb2Rle21hcH0gYW5kIGZyaWVuZHMsIHRoaXMgaXMgbm90IHJlYWxseSB0cnVlLiAg U2luY2UgdHJhbnNkdWNlcnMgZG9uJ3QKK2tub3cgaW4gd2hpY2ggY29udGV4dCB0aGV5IGFy ZSBiZWluZyB1c2VkLCBzb21lIHRyYW5zZHVjZXJzIG11c3Qga2VlcAorc3RhdGUgd2hlcmUg dGhlaXIgY29sbGVjdGlvbi1zcGVjaWZpYyBjb3VudGVycGFydHMgZG8gbm90LiAgVGhlCit0 cmFuc2R1Y2VycyB0aGF0IGtlZXAgc3RhdGUgZG8gc28gdXNpbmcgaGlkZGVuIG11dGFibGUg c3RhdGUsIGFuZCBhcworc3VjaCBhbGwgdGhlIGNhdmVhdHMgb2YgbXV0YXRpb24sIHBhcmFs bGVsaXNtLCBhbmQgbXVsdGktc2hvdAorY29udGludWF0aW9ucyBhcHBseS4gIEVhY2ggdHJh bnNkdWNlciBrZWVwaW5nIHN0YXRlIGlzIGNsZWFybHkgZGVzY3JpYmVkCithcyBkb2luZyBz byBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworQHN1YmhlYWRpbmcgTmFtaW5nCisKK1JlZHVj ZXJzIGV4cG9ydGVkIGZyb20gdGhlIHRyYW5zZHVjZXJzIG1vZHVsZSBhcmUgbmFtZWQgYXMg aW4gdGhlaXIKK1NSRkktMSBjb3VudGVycGFydCwgYnV0IHByZXBlbmRlZCB3aXRoIGFuIHIu ICBUcmFuc2R1Y2VycyBhbHNvIGZvbGxvdwordGhhdCBuYW1pbmcsIGJ1dCBhcmUgcHJlcGVu ZGVkIHdpdGggYSB0LgorCisKK0Bub2RlIFNSRkktMTcxIEFwcGx5aW5nIFRyYW5zZHVjZXJz CitAc3Vic3Vic2VjdGlvbiBBcHBseWluZyBUcmFuc2R1Y2VycworQGNpbmRleCB0cmFuc2R1 Y2VycyBhcHBseWluZworCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IGxpc3QtdHJhbnNk dWNlIHhmb3JtIGYgbHN0CitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSBsaXN0LXRyYW5z ZHVjZSB4Zm9ybSBmIGlkZW50aXR5IGxzdAorSW5pdGlhbGl6ZSB0aGUgdHJhbnNkdWNlciBA dmFye3hmb3JtfSBieSBwYXNzaW5nIHRoZSByZWR1Y2VyIEB2YXJ7Zn0KK3RvIGl0LiAgSWYg bm8gaWRlbnRpdHkgaXMgcHJvdmlkZWQsIEB2YXJ7Zn0gcnVucyB3aXRob3V0IGFyZ3VtZW50 cyB0bworcmV0dXJuIHRoZSByZWR1Y2VyIGlkZW50aXR5LiAgSXQgdGhlbiByZWR1Y2VzIG92 ZXIgQHZhcntsc3R9IHVzaW5nIHRoZQoraWRlbnRpdHkgYXMgdGhlIHNlZWQuCisKK0lmIG9u ZSBvZiB0aGUgdHJhbnNkdWNlcnMgZmluaXNoZXMgZWFybHkgKHN1Y2ggYXMgQGNvZGV7dHRh a2V9IG9yCitAY29kZXt0ZHJvcH0pLCBpdCBjb21tdW5pY2F0ZXMgdGhpcyBieSByZXR1cm5p bmcgYSByZWR1Y2VkIHZhbHVlLCB3aGljaAoraW4gdGhlIGd1aWxlIGltcGxlbWVudGF0aW9u IGlzIGp1c3QgYSB2YWx1ZSB3cmFwcGVkIGluIGEgU1JGSSA5IHJlY29yZAordHlwZSBuYW1l ZCBgYHJlZHVjZWQnJy4gIElmIHN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZCBieSB0aGUgdHJh bnNkdWNlciwKK0Bjb2Rle2xpc3QtdHJhbnNkdWNlfSBtdXN0IHN0b3AgZXhlY3V0aW9uIGFu ZCByZXR1cm4gYW4gdW5yZWR1Y2VkIHZhbHVlCitpbW1lZGlhdGVseS4KK0BlbmQgZGVmZm4K KworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB2ZWN0b3ItdHJhbnNkdWNlIHhmb3JtIGYg dmVjCitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSB2ZWN0b3ItdHJhbnNkdWNlIHhmb3Jt IGYgaWRlbnRpdHkgdmVjCitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSBzdHJpbmctdHJh bnNkdWNlIHhmb3JtIGYgc3RyCitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSBzdHJpbmct dHJhbnNkdWNlIHhmb3JtIGYgaWRlbnRpdHkgc3RyCitAZGVmZm54IHtTY2hlbWUgUHJvY2Vk dXJlfSBieXRldmVjdG9yLXU4LXRyYW5zZHVjZSB4Zm9ybSBmIGJ2CitAZGVmZm54IHtTY2hl bWUgUHJvY2VkdXJlfSBieXRldmVjdG9yLXU4LXRyYW5zZHVjZSB4Zm9ybSBmIGlkZW50aXR5 IGJ2CitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSBnZW5lcmF0b3ItdHJhbnNkdWNlIHhm b3JtIGYgZ2VuCitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSBnZW5lcmF0b3ItdHJhbnNk dWNlIHhmb3JtIGYgaWRlbnRpdHkgZ2VuCisKK1NhbWUgYXMgQGNvZGV7bGlzdC10cmFuc2R1 Y2V9LCBidXQgZm9yIHZlY3RvcnMsIHN0cmluZ3MsIHU4LWJ5dGV2ZWN0b3JzCithbmQgU1JG SS0xNTgtc3R5bGVkIGdlbmVyYXRvcnMgcmVzcGVjdGl2ZWx5LgorQGVuZCBkZWZmbgorCitA ZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHBvcnQtdHJhbnNkdWNlIHhmb3JtIGYgcmVhZGVy CitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSBwb3J0LXRyYW5zZHVjZSB4Zm9ybSBmIHJl YWRlciBwb3J0CitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSBwb3J0LXRyYW5zZHVjZSB4 Zm9ybSBmIGlkZW50aXR5IHJlYWRlciBwb3J0CisKK1NhbWUgYXMgQGNvZGV7bGlzdC1yZWR1 Y2V9IGJ1dCBmb3IgcG9ydHMuICBDYWxsZWQgd2l0aG91dCBhIHBvcnQsIGl0CityZWR1Y2Vz IG92ZXIgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgQHZhcnsocmVhZGVyKX0gdW50aWwgdGhl CitFT0Ytb2JqZWN0IGlzIHJldHVybmVkLCBwcmVzdW1hYmx5IHRvIHJlYWQgZnJvbQorQGNv ZGV7Y3VycmVudC1pbnB1dC1wb3J0fS4gIFdpdGggYSBwb3J0IEB2YXJ7cmVhZGVyfSBpcyBh cHBsaWVkIHRvCitAdmFye3BvcnR9IGluc3RlYWQgb2Ygd2l0aG91dCBhbnkgYXJndW1lbnRz LiAgSWYgQHZhcntpZGVudGl0eX0gaXMKK3Byb3ZpZGVkLCB0aGF0IGlzIHVzZWQgYXMgdGhl IGluaXRpYWwgaWRlbnRpdHkgaW4gdGhlIHJlZHVjdGlvbi4KK0BlbmQgZGVmZm4KKworCitA bm9kZSBTUkZJLTE3MSBSZWR1Y2VycworQHN1YnN1YnNlY3Rpb24gUmVkdWNlcnMKK0BjaW5k ZXggdHJhbnNkdWNlcnMgcmVkdWNlcnMKKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBy Y29ucworYSBzaW1wbGUgY29uc2luZyByZWR1Y2VyLiBXaGVuIGNhbGxlZCB3aXRob3V0IHZh bHVlcywgaXQgcmV0dXJucyBpdHMKK2lkZW50aXR5LCBAY29kZXsnKCl9LiAgV2l0aCBvbmUg dmFsdWUsIHdoaWNoIHdpbGwgYmUgYSBsaXN0LCBpdCByZXZlcnNlcwordGhlIGxpc3QgKHVz aW5nIEBjb2Rle3JldmVyc2UhfSkuICBXaGVuIGNhbGxlZCB3aXRoIHR3byB2YWx1ZXMsIGl0 IGNvbnNlcwordGhlIHNlY29uZCB2YWx1ZSB0byB0aGUgZmlyc3QuCisKK0BleGFtcGxlCiso bGlzdC10cmFuc2R1Y2UgKHRtYXAgKGxhbWJkYSAoeCkgKCsgeCAxKSkgcmNvbnMgKGxpc3Qg MCAxIDIgMykpCitAcmVzdWx0e30gKDEgMiAzIDQpCitAZW5kIGV4YW1wbGUKK0BlbmQgZGVm Zm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSByZXZlcnNlLXJjb25zCitzYW1lIGFz IHJjb25zLCBidXQgbGVhdmVzIHRoZSB2YWx1ZXMgaW4gdGhlaXIgcmV2ZXJzZWQgb3JkZXIu CitAZXhhbXBsZQorKGxpc3QtdHJhbnNkdWNlICh0bWFwIChsYW1iZGEgKHgpICgrIHggMSkp KSByZXZlcnNlLXJjb25zIChsaXN0IDAgMSAyIDMpKQorQHJlc3VsdHt9ICg0IDMgMiAxKQor QGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0g cmFueSBwcmVkPworVGhlIHJlZHVjZXIgdmVyc2lvbiBvZiBhbnkuICBSZXR1cm5zIEBjb2Rl eyhyZWR1Y2VkIChwcmVkPyB2YWx1ZSkpfSBpZgorYW55IEBjb2RleyhwcmVkPyB2YWx1ZSl9 IHJldHVybnMgbm9uLSNmLiAgVGhlIGlkZW50aXR5IGlzICNmLgorCitAZXhhbXBsZQorKGxp c3QtdHJhbnNkdWNlICh0bWFwIChsYW1iZGEgKHgpICgrIHggMSkpKSAocmFueSBvZGQ/KSAo bGlzdCAxIDMgNSkpCitAcmVzdWx0e30gI2YKKworKGxpc3QtdHJhbnNkdWNlICh0bWFwIChs YW1iZGEgKHgpICgrIHggMSkpKSAocmFueSBvZGQ/KSAobGlzdCAxIDMgNCA1KSkKK0ByZXN1 bHR7fSAjdAorQGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFBy b2NlZHVyZX0gcmV2ZXJ5IHByZWQ/CitUaGUgcmVkdWNlciB2ZXJzaW9uIG9mIGV2ZXJ5LiAg U3RvcHMgdGhlIHRyYW5zZHVjdGlvbiBhbmQgcmV0dXJucworQGNvZGV7KHJlZHVjZWQgI2Yp fSBpZiBhbnkgQGNvZGV7KHByZWQ/IHZhbHVlKX0gcmV0dXJucyAjZi4gIElmIGV2ZXJ5CitA Y29kZXsocHJlZD8gdmFsdWUpfSByZXR1cm5zIHRydWUsIGl0IHJldHVybnMgdGhlIHJlc3Vs dCBvZiB0aGUgbGFzdAoraW52b2NhdGlvbiBvZiBAY29kZXsocHJlZD8gdmFsdWUpfS4gIFRo ZSBpZGVudGl0eSBpcyAjdC4KKworQGV4YW1wbGUKKyhsaXN0LXRyYW5zZHVjZQorICAodG1h cCAobGFtYmRhICh4KSAoKyB4IDEpKSkKKyAgKHJldmVyeSAobGFtYmRhICh2KSAoaWYgKG9k ZD8gdikgdiAjZikpKQorICAobGlzdCAyIDQgNikpCisgIEByZXN1bHR7fSA3CisKKyhsaXN0 LXRyYW5zZHVjZSAodG1hcCAobGFtYmRhICh4KSAoKyB4IDEpKSAocmV2ZXJ5IG9kZD8pIChs aXN0IDIgNCA1IDYpKQorQHJlc3VsdHt9ICNmCitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmZm4K KworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSByY291bnQKK0Egc2ltcGxlIGNvdW50aW5n IHJlZHVjZXIuICBDb3VudHMgdGhlIHZhbHVlcyB0aGF0IHBhc3MgdGhyb3VnaCB0aGUKK3Ry YW5zZHVjdGlvbi4KK0BleGFtcGxlCisobGlzdC10cmFuc2R1Y2UgKHRmaWx0ZXIgb2RkPykg cmNvdW50IChsaXN0IDEgMiAzIDQpKSBAcmVzdWx0e30gMi4KK0BlbmQgZXhhbXBsZQorQGVu ZCBkZWZmbgorCisKK0Bub2RlIFNSRkktMTcxIFRyYW5zZHVjZXJzCitAc3Vic3Vic2VjdGlv biBUcmFuc2R1Y2VycworQGNpbmRleCB0cmFuc2R1Y2VycyB0cmFuc2R1Y2VycworCitAZGVm Zm4ge1NjaGVtZSBQcm9jZWR1cmV9IHRtYXAgcHJvYworUmV0dXJucyBhIHRyYW5zZHVjZXIg dGhhdCBhcHBsaWVzIEB2YXJ7cHJvY30gdG8gYWxsIHZhbHVlcy4gIFN0YXRlbGVzcy4KK0Bl bmQgZGVmZm4KKworQGRlZmZuIHRmaWx0ZXIgcHJlZD8KK1JldHVybnMgYSB0cmFuc2R1Y2Vy IHRoYXQgcmVtb3ZlcyB2YWx1ZXMgZm9yIHdoaWNoIEB2YXJ7cHJlZD99IHJldHVybnMgI2Yu CisKK1N0YXRlbGVzcy4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJl fSB0cmVtb3ZlIHByZWQ/CitSZXR1cm5zIGEgdHJhbnNkdWNlciB0aGF0IHJlbW92ZXMgdmFs dWVzIGZvciB3aGljaCBAdmFye3ByZWQ/fSByZXR1cm5zIG5vbi0jZi4KKworU3RhdGVsZXNz CitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gdGZpbHRlci1tYXAg cHJvYworVGhlIHNhbWUgYXMgQGNvZGV7KGNvbXBvc2UgKHRtYXAgcHJvYykgKHRmaWx0ZXIg dmFsdWVzKSl9LiAgU3RhdGVsZXNzLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQ cm9jZWR1cmV9IHRyZXBsYWNlIG1hcHBpbmcKK1RoZSBhcmd1bWVudCBAdmFye21hcHBpbmd9 IGlzIGFuIGFzc29jaWF0aW9uIGxpc3QgKHVzaW5nIEBjb2Rle2VxdWFsP30KK3RvIGNvbXBh cmUga2V5cyksIGEgaGFzaC10YWJsZSwgYSBvbmUtYXJndW1lbnQgcHJvY2VkdXJlIHRha2lu ZyBvbmUKK2FyZ3VtZW50IGFuZCBlaXRoZXIgcHJvZHVjaW5nIHRoYXQgc2FtZSBhcmd1bWVu dCBvciBhIHJlcGxhY2VtZW50IHZhbHVlLgorCitSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGlj aCBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbnkgdmFsdWUgcGFzc2VkCit0aHJvdWdo IGl0IGluIG1hcHBpbmcuICBJZiBhIG1hcHBpbmcgaXMgZm91bmQsIHRoZSB2YWx1ZSBvZiB0 aGF0IG1hcHBpbmcKK2lzIHJldHVybmVkLCBvdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRo ZSBvcmlnaW5hbCB2YWx1ZS4KKworRG9lcyBub3Qga2VlcCBpbnRlcm5hbCBzdGF0ZSwgYnV0 IG1vZGlmeWluZyB0aGUgbWFwcGluZyB3aGlsZSBpdCdzIGluCit1c2UgYnkgdHJlcGxhY2Ug aXMgYW4gZXJyb3IuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0g dGRyb3AgbgorUmV0dXJucyBhIHRyYW5zZHVjZXIgdGhhdCBkaXNjYXJkcyB0aGUgZmlyc3Qg QHZhcntufSB2YWx1ZXMuCisKK1N0YXRlZnVsLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1Nj aGVtZSBQcm9jZWR1cmV9IHR0YWtlIG4KK1JldHVybnMgYSB0cmFuc2R1Y2VyIHRoYXQgZGlz Y2FyZHMgYWxsIHZhbHVlcyBhbmQgc3RvcHMgdGhlIHRyYW5zZHVjdGlvbgorYWZ0ZXIgdGhl IGZpcnN0IEB2YXJ7bn0gdmFsdWVzIGhhdmUgYmVlbiBsZXQgdGhyb3VnaC4gIEFueSBzdWJz ZXF1ZW50IHZhbHVlcworYXJlIGlnbm9yZWQuCisKK1N0YXRlZnVsLgorQGVuZCBkZWZmbgor CisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gdGRyb3Atd2hpbGUgcHJlZD8KK1JldHVy bnMgYSB0cmFuc2R1Y2VyIHRoYXQgZGlzY2FyZHMgdGhlIHRoZSBmaXJzdCB2YWx1ZXMgZm9y IHdoaWNoCitAdmFye3ByZWQ/fSByZXR1cm5zIHRydWUuCisKK1N0YXRlZnVsLgorQGVuZCBk ZWZmbgorCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gdHRha2Utd2hpbGUgcHJlZD8K K0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IHR0YWtlLXdoaWxlIHByZWQ/IHJldGYKK1Jl dHVybnMgYSB0cmFuc2R1Y2VyIHRoYXQgc3RvcHMgdGhlIHRyYW5zZHVjdGlvbiBhZnRlciBA dmFye3ByZWQ/fSBoYXMKK3JldHVybmVkICNmLiAgQW55IHN1YnNlcXVlbnQgdmFsdWVzIGFy ZSBpZ25vcmVkIGFuZCB0aGUgbGFzdCBzdWNjZXNzZnVsCit2YWx1ZSBpcyByZXR1cm5lZC4g IEB2YXJ7cmV0Zn0gaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW5ldmVyCitA dmFye3ByZWQ/fSByZXR1cm5zIGZhbHNlLiAgVGhlIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHRo ZSByZXN1bHQgc28gZmFyCithbmQgdGhlIGlucHV0IGZvciB3aGljaCBwcmVkPyByZXR1cm5z IEBjb2RleyNmfS4gIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIGlzCitAY29kZXsobGFtYmRhIChy ZXN1bHQgaW5wdXQpIHJlc3VsdCl9LgorCitTdGF0ZWZ1bC4KK0BlbmQgZGVmZm4KKworCitA ZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHRjb25jYXRlbmF0ZQordGNvbmNhdGVuYXRlIEBl bXBoe2lzfSBhIHRyYW5zZHVjZXIgdGhhdCBjb25jYXRlbmF0ZXMgdGhlIGNvbnRlbnQgb2YK K2VhY2ggdmFsdWUgKHRoYXQgbXVzdCBiZSBhIGxpc3QpIGludG8gdGhlIHJlZHVjdGlvbi4K K0BleGFtcGxlCisobGlzdC10cmFuc2R1Y2UgdGNvbmNhdGVuYXRlIHJjb25zICcoKDEgMikg KDMgNCA1KSAoNiAoNyA4KSA5KSkpCitAcmVzdWx0e30gKDEgMiAzIDQgNSA2ICg3IDgpIDkp CitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJl fSB0YXBwZW5kLW1hcCBwcm9jCitUaGUgc2FtZSBhcyBAY29kZXsoY29tcG9zZSAodG1hcCBw cm9jKSB0Y29uY2F0ZW5hdGUpfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJv Y2VkdXJlfSB0ZmxhdHRlbgordGZsYXR0ZW4gQGVtcGh7aXN9IGEgdHJhbnNkdWNlciB0aGF0 IGZsYXR0ZW5zIGFuIGlucHV0IGNvbnNpc3Rpbmcgb2YgbGlzdHMuCisKK0BleGFtcGxlCiso bGlzdC10cmFuc2R1Y2UgdGZsYXR0ZW4gcmNvbnMgJygoMSAyKSAzICg0ICg1IDYpIDcgOCkg OSkKK0ByZXN1bHR7fSAoMSAyIDMgNCA1IDYgNyA4IDkpCitAZW5kIGV4YW1wbGUKK0BlbmQg ZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB0ZGVsZXRlLW5laWdoYm9yLWR1 cGxpY2F0ZXMKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IHRkZWxldGUtbmVpZ2hib3It ZHVwbGljYXRlcyBlcXVhbGl0eS1wcmVkaWNhdGUKK1JldHVybnMgYSB0cmFuc2R1Y2VyIHRo YXQgcmVtb3ZlcyBhbnkgZGlyZWN0bHkgZm9sbG93aW5nIGR1cGxpY2F0ZQorZWxlbWVudHMu ICBUaGUgZGVmYXVsdCBAdmFye2VxdWFsaXR5LXByZWRpY2F0ZX0gaXMgQGNvZGV7ZXF1YWw/ fS4KKworU3RhdGVmdWwuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVy ZX0gdGRlbGV0ZS1kdXBsaWNhdGVzCitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSB0ZGVs ZXRlLWR1cGxpY2F0ZXMgZXF1YWxpdHktcHJlZGljYXRlCitSZXR1cm5zIGEgdHJhbnNkdWNl ciB0aGF0IHJlbW92ZXMgYW55IHN1YnNlcXVlbnQgZHVwbGljYXRlIGVsZW1lbnRzCitjb21w YXJlZCB1c2luZyBAdmFye2VxdWFsaXR5LXByZWRpY2F0ZX0uICBUaGUgZGVmYXVsdAorQHZh cntlcXVhbGl0eS1wcmVkaWNhdGV9IGlzIEBjb2Rle2VxdWFsP30uCisKK1N0YXRlZnVsLgor QGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHRzZWdtZW50IG4KK1Jl dHVybnMgYSB0cmFuc2R1Y2VyIHRoYXQgZ3JvdXBzIEB2YXJ7bn0gaW5wdXRzIGluIGxpc3Rz IG9mIEB2YXJ7bn0KK2VsZW1lbnRzLiAgV2hlbiB0aGUgdHJhbnNkdWN0aW9uIHN0b3BzLCBp dCBmbHVzaGVzIGFueSByZW1haW5pbmcKK2NvbGxlY3Rpb24sIGV2ZW4gaWYgaXQgY29udGFp bnMgZmV3ZXIgdGhhbiBAdmFye259IGVsZW1lbnRzLgorCitTdGF0ZWZ1bC4KK0BlbmQgZGVm Zm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB0cGFydGl0aW9uIHByZWQ/CitSZXR1 cm5zIGEgdHJhbnNkdWNlciB0aGF0IGdyb3VwcyBpbnB1dHMgaW4gbGlzdHMgYnkgd2hlbmV2 ZXIKK0Bjb2RleyhwcmVkPyBpbnB1dCl9IGNoYW5nZXMgdmFsdWUuCisKK1N0YXRlZnVsLgor QGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHRhZGQtYmV0d2VlbiB2 YWx1ZQorUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hpY2ggaW50ZXJwb3NlcyBAdmFye3ZhbHVl fSBiZXR3ZWVuIGVhY2ggdmFsdWUKK2FuZCB0aGUgbmV4dC4gIFRoaXMgZG9lcyBub3QgY29t cG9zZSBncmFjZWZ1bGx5IHdpdGggdHJhbnNkdWNlcnMgbGlrZQorQGNvZGV7dHRha2V9LCBh cyB5b3UgbWlnaHQgZW5kIHVwIGVuZGluZyB0aGUgdHJhbnNkdWN0aW9uIG9uCitAY29kZXt2 YWx1ZX0uCisKK1N0YXRlZnVsLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9j ZWR1cmV9IHRlbnVtZXJhdGUKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IHRlbnVtZXJh dGUgc3RhcnQKK1JldHVybnMgYSB0cmFuc2R1Y2VyIHRoYXQgaW5kZXhlcyB2YWx1ZXMgcGFz c2VkIHRocm91Z2ggaXQsIHN0YXJ0aW5nIGF0CitAdmFye3N0YXJ0fSwgd2hpY2ggZGVmYXVs dHMgdG8gMC4gIFRoZSBpbmRleGluZyBpcyBkb25lIHRocm91Z2ggY29ucworcGFpcnMgbGlr ZSBAY29kZXsoaW5kZXggLiBpbnB1dCl9LgorCitAZXhhbXBsZQorKGxpc3QtdHJhbnNkdWNl ICh0ZW51bWVyYXRlIDEpIHJjb25zIChsaXN0ICdmaXJzdCAnc2Vjb25kICd0aGlyZCkpCitA cmVzdWx0e30gKCgxIC4gZmlyc3QpICgyIC4gc2Vjb25kKSAoMyAuIHRoaXJkKSkKK0BlbmQg ZXhhbXBsZQorCitTdGF0ZWZ1bC4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJv Y2VkdXJlfSB0bG9nCitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSB0bG9nIGxvZ2dlcgor UmV0dXJucyBhIHRyYW5zZHVjZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2cgb3IgcHJpbnQg dmFsdWVzIGFuZAorcmVzdWx0cy4gIFRoZSByZXN1bHQgb2YgdGhlIEB2YXJ7bG9nZ2VyfSBw cm9jZWR1cmUgaXMgZGlzY2FyZGVkLiAgVGhlCitkZWZhdWx0IEB2YXJ7bG9nZ2VyfSBpcyBA Y29kZXsobGFtYmRhIChyZXN1bHQgaW5wdXQpICh3cml0ZSBpbnB1dCkKKyhuZXdsaW5lKSl9 LgorCitTdGF0ZWxlc3MuCitAZW5kIGRlZmZuCisKK0BzdWJoZWFkaW5nIEd1aWxlLXNwZWNp ZmljIHRyYW5zZHVjZXJzCitUaGVzZSB0cmFuc2R1Y2VycyBhcmUgYXZhaWxhYmxlIGluIHRo ZSBAY29kZXsoc3JmaSBzcmZpLTE3MSBnbnUpfQorbGlicmFyeSwgYW5kIGFyZSBwcm92aWRl ZCBvdXRzaWRlIHRoZSBzdGFuZGFyZCBkZXNjcmliZWQgYnkgdGhlIFNSRkktMTcxCitkb2N1 bWVudC4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB0YmF0Y2ggcmVkdWNlcgorQGRl ZmZueCB7U2NoZW1lIFByb2NlZHVyZX0gdGJhdGNoIHRyYW5zZHVjZXIgcmVkdWNlcgorQSBi YXRjaGluZyB0cmFuc2R1Y2VyIHRoYXQgYWNjdW11bGF0ZXMgcmVzdWx0cyB1c2luZyBAdmFy e3JlZHVjZXJ9IG9yCitAY29kZXsoKHRyYW5zZHVjZXIpIHJlZHVjZXIpfSB1bnRpbCBpdCBy ZXR1cm5zIGEgcmVkdWNlZCB2YWx1ZS4gIFRoaXMgY2FuCitiZSB1c2VkIHRvIGdlbmVyYWxp emUgc29tZXRoaW5nIGxpa2UgQGNvZGV7dHNlZ21lbnR9OgorCitAZXhhbXBsZQorOzsgVGhp cyBiZWhhdmVzIGV4YWN0bHkgbGlrZSAodHNlZ21lbnQgNCkuCisobGlzdC10cmFuc2R1Y2Ug KHRiYXRjaCAodHRha2UgNCkgcmNvbnMpIHJjb25zIChpb3RhIDEwKSkKK0ByZXN1bHQge30g KCgwIDEgMiAzKSAoNCA1IDYgNykgKDggOSkpCitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmZm4K KworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB0Zm9sZCByZWR1Y2VyCitAZGVmZm54IHtT Y2hlbWUgUHJvY2VkdXJlfSB0Zm9sZCByZWR1Y2VyIHNlZWQKKworQSBmb2xkaW5nIHRyYW5z ZHVjZXIgdGhhdCB5aWVsZHMgdGhlIHJlc3VsdCBvZiBAY29kZXsocmVkdWNlciBzZWVkCit2 YWx1ZSl9LCBzYXZpbmcgaXQncyByZXN1bHQgYmV0d2VlbiBpdGVyYXRpb25zLgorCitAZXhh bXBsZQorKGxpc3QtdHJhbnNkdWNlICh0Zm9sZCArKSByY29ucyAoaW90YSAxMCkpCitAcmVz dWx0e30gKDAgMSAzIDYgMTAgMTUgMjEgMjggMzYgNDUpCitAZW5kIGV4YW1wbGUKK0BlbmQg ZGVmZm4KKworCitAbm9kZSBTUkZJLTE3MSBIZWxwZXJzCitAc3Vic3Vic2VjdGlvbiBIZWxw ZXIgZnVuY3Rpb25zIGZvciB3cml0aW5nIHRyYW5zZHVjZXJzCitAY2luZGV4IHRyYW5zZHVj ZXJzIGhlbHBlcnMKKworVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiB0aGUgQGNvZGV7KHNyZmkg c3JmaS0xNzEgbWV0YSl9IG1vZHVsZSBhbmQgYXJlIG9ubHkKK3VzYWJsZSB3aGVuIHlvdSB3 YW50IHRvIHdyaXRlIHlvdXIgb3duIHRyYW5zZHVjZXJzLgorCitAZGVmZm4ge1NjaGVtZSBQ cm9jZWR1cmV9IHJlZHVjZWQgdmFsdWUKK1dyYXBzIGEgdmFsdWUgaW4gYSBAY29kZXs8cmVk dWNlZD59IGNvbnRhaW5lciwgc2lnbmFsbGluZyB0aGF0IHRoZQorcmVkdWN0aW9uIHNob3Vs ZCBzdG9wLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHJlZHVj ZWQ/IHZhbHVlCitSZXR1cm5zICN0IGlmIHZhbHVlIGlzIGEgQGNvZGV7PHJlZHVjZWQ+fSBy ZWNvcmQuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gdW5yZWR1 Y2UgcmVkdWNlZC1jb250YWluZXIKK1JldHVybnMgdGhlIHZhbHVlIGluIHJlZHVjZWQtY29u dGFpbmVyLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IGVuc3Vy ZS1yZWR1Y2VkIHZhbHVlCitXcmFwcyB2YWx1ZSBpbiBhIEBjb2RlezxyZWR1Y2VkPn0gY29u dGFpbmVyIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHJlZHVjZWQuCitAZW5kIGRlZmZuCisKK0Bk ZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gcHJlc2VydmluZy1yZWR1Y2VkIHJlZHVjZXIKK1dy YXBzIEBjb2Rle3JlZHVjZXJ9IGluIGFub3RoZXIgcmVkdWNlciB0aGF0IGVuY2Fwc3VsYXRl cyBhbnkgcmV0dXJuZWQKK3JlZHVjZWQgdmFsdWUgaW4gYW5vdGhlciByZWR1Y2VkIGNvbnRh aW5lci4gIFRoaXMgaXMgdXNlZnVsIGluIHBsYWNlcword2hlcmUgeW91IHJlLXVzZSBhIHJl ZHVjZXIgd2l0aCBbY29sbGVjdGlvbl0tcmVkdWNlLiAgSWYgdGhlIHJlZHVjZXIKK3JldHVy bnMgYSByZWR1Y2VkIHZhbHVlLCBbY29sbGVjdGlvbl0tcmVkdWNlIHVud3JhcHMgaXQuICBV bmxlc3MgaGFuZGxlZCwKK3RoaXMgbGVhZHMgdG8gdGhlIHJlZHVjdGlvbiBjb250aW51aW5n LgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IGxpc3QtcmVkdWNl IGYgaWRlbnRpdHkgbHN0CitUaGUgcmVkdWNpbmcgZnVuY3Rpb24gdXNlZCBpbnRlcm5hbGx5 IGJ5IEBjb2Rle2xpc3QtdHJhbnNkdWNlfS4gIEB2YXJ7Zn0KK2lzIGEgcmVkdWNlciBhcyBy ZXR1cm5lZCBieSBhIHRyYW5zZHVjZXIuICBAdmFye2lkZW50aXR5fSBpcyB0aGUKK2lkZW50 aXR5IChzb21ldGltZXMgY2FsbGVkICJzZWVkIikgb2YgdGhlIHJlZHVjdGlvbi4gIEB2YXJ7 bHN0fSBpcyBhCitsaXN0LiAgSWYgQHZhcntmfSByZXR1cm5zIGEgcmVkdWNlZCB2YWx1ZSwg dGhlIHJlZHVjdGlvbiBzdG9wcworaW1tZWRpYXRlbHkgYW5kIHRoZSB1bnJlZHVjZWQgdmFs dWUgaXMgcmV0dXJuZWQuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVy ZX0gdmVjdG9yLXJlZHVjZSBmIGlkZW50aXR5IHZlYworVGhlIHZlY3RvciB2ZXJzaW9uIG9m IGxpc3QtcmVkdWNlLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9 IHN0cmluZy1yZWR1Y2UgZiBpZGVudGl0eSBzdHIKK1RoZSBzdHJpbmcgdmVyc2lvbiBvZiBs aXN0LXJlZHVjZS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBi eXRldmVjdG9yLXU4LXJlZHVjZSBmIGlkZW50aXR5IGJ2CitUaGUgYnl0ZXZlY3Rvci11OCB2 ZXJzaW9uIG9mIGxpc3QtcmVkdWNlLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQ cm9jZWR1cmV9IHBvcnQtcmVkdWNlIGYgaWRlbnRpdHkgcmVhZGVyIHBvcnQKK1RoZSBwb3J0 IHZlcnNpb24gb2YgbGlzdC1yZWR1Y2VyLiAgSXQgcmVkdWNlcyBvdmVyIHBvcnQgdXNpbmcg cmVhZGVyCit1bnRpbCByZWFkZXIgcmV0dXJucyB0aGUgRU9GIG9iamVjdC4KK0BlbmQgZGVm Zm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBnZW5lcmF0b3ItcmVkdWNlIGYgaWRl bnRpdHkgZ2VuCitUaGUgcG9ydCB2ZXJzaW9uIG9mIGxpc3QtcmVkdWNlLiAgSXQgcmVkdWNl cyBvdmVyIEBjb2Rle2dlbn0gdW50aWwgaXQKK3JldHVybnMgdGhlIEVPRiBvYmplY3QKK0Bl bmQgZGVmZm4KKwogQGMgc3JmaS1tb2R1bGVzLnRleGkgZW5kcyBoZXJlCiAKIEBjIExvY2Fs IFZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL21vZHVsZS9NYWtlZmlsZS5hbSBiL21vZHVsZS9N YWtlZmlsZS5hbQppbmRleCAxZDlkNTI0Y2YuLjQwYjRiNTYxYSAxMDA2NDQKLS0tIGEvbW9k dWxlL01ha2VmaWxlLmFtCisrKyBiL21vZHVsZS9NYWtlZmlsZS5hbQpAQCAtMzEyLDYgKzMx Miw5IEBAIFNPVVJDRVMgPQkJCQkJXAogICBzcmZpL3NyZmktODguc2NtCQkJCVwKICAgc3Jm aS9zcmZpLTk4LnNjbQkJCQlcCiAgIHNyZmkvc3JmaS0xMTEuc2NtCQkJCVwKKyAgc3JmaS9z cmZpLTE3MS5zY20gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3JmaS9zcmZp LTE3MS9nbnUuc2NtICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3JmaS9zcmZpLTE3 MS9tZXRhLnNjbSAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJCQkJCVwKICAgc3RhdHBy b2Yuc2NtCQkJCQlcCiAJCQkJCQlcCmRpZmYgLS1naXQgYS9tb2R1bGUvc3JmaS9zcmZpLTE3 MS5zY20gYi9tb2R1bGUvc3JmaS9zcmZpLTE3MS5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwLi5lYjJkNGQ0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGUv c3JmaS9zcmZpLTE3MS5zY20KQEAgLTAsMCArMSw0NTcgQEAKKzs7IAlDb3B5cmlnaHQgKEMp IDIwMjAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis7OworOzsgVGhpcyBsaWJy YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor OzsgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworOzsgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCis7OyB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OyAKKzs7IFRoaXMgbGlicmFy eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor OzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCis7OyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzsgCis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCis7OyBMaWNl bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlCis7OyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisKKyhkZWZpbmUtbW9kdWxl IChzcmZpIHNyZmktMTcxKQorICAjOnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQorICAjOnVz ZS1tb2R1bGUgKHNyZmkgc3JmaS05KQorICAjOnVzZS1tb2R1bGUgKChzcmZpIHNyZmktNDMp ICAjOnNlbGVjdCAodmVjdG9yLT5saXN0KSkKKyAgIzp1c2UtbW9kdWxlICgoc3JmaSBzcmZp LTY5KSAjOnByZWZpeCBzcmZpNjk6KQorICAjOnVzZS1tb2R1bGUgKChybnJzIGhhc2h0YWJs ZXMpICM6cHJlZml4IHJucnM6KQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xNzEgbWV0 YSkKKyAgIzpleHBvcnQgKHJjb25zCisgICAgICAgICAgICByZXZlcnNlLXJjb25zCisgICAg ICAgICAgICByY291bnQKKyAgICAgICAgICAgIHJhbnkKKyAgICAgICAgICAgIHJldmVyeQor ICAgICAgICAgICAgbGlzdC10cmFuc2R1Y2UKKyAgICAgICAgICAgIHZlY3Rvci10cmFuc2R1 Y2UKKyAgICAgICAgICAgIHN0cmluZy10cmFuc2R1Y2UKKyAgICAgICAgICAgIGJ5dGV2ZWN0 b3ItdTgtdHJhbnNkdWNlCisgICAgICAgICAgICBwb3J0LXRyYW5zZHVjZQorICAgICAgICAg ICAgZ2VuZXJhdG9yLXRyYW5zZHVjZQorCisgICAgICAgICAgICB0bWFwCisgICAgICAgICAg ICB0ZmlsdGVyCisgICAgICAgICAgICB0cmVtb3ZlCisgICAgICAgICAgICB0cmVwbGFjZQor ICAgICAgICAgICAgdGZpbHRlci1tYXAKKyAgICAgICAgICAgIHRkcm9wCisgICAgICAgICAg ICB0ZHJvcC13aGlsZQorICAgICAgICAgICAgdHRha2UKKyAgICAgICAgICAgIHR0YWtlLXdo aWxlCisgICAgICAgICAgICB0Y29uY2F0ZW5hdGUKKyAgICAgICAgICAgIHRhcHBlbmQtbWFw CisgICAgICAgICAgICB0ZGVsZXRlLW5laWdoYm9yLWR1cGxpY2F0ZXMKKyAgICAgICAgICAg IHRkZWxldGUtZHVwbGljYXRlcworICAgICAgICAgICAgdGZsYXR0ZW4KKyAgICAgICAgICAg IHRzZWdtZW50CisgICAgICAgICAgICB0cGFydGl0aW9uCisgICAgICAgICAgICB0YWRkLWJl dHdlZW4KKyAgICAgICAgICAgIHRlbnVtZXJhdGUKKyAgICAgICAgICAgIHRsb2cpKQorKGNv bmQtZXhwYW5kLXByb3ZpZGUgKGN1cnJlbnQtbW9kdWxlKSAnKHNyZmktMTcxKSkKKworCis7 OyBBIHBsYWNlaG9sZGVyIGZvciBhIHVuaXF1ZSAibm90aGluZyIuCisoZGVmaW5lIG5vdGhp bmcgKGxpc3QgJ25vdGhpbmcpKQorKGRlZmluZSAobm90aGluZz8gdmFsKQorICAoZXE/IHZh bCBub3RoaW5nKSkKKworOzs7IFJlZHVjaW5nIGZ1bmN0aW9ucyBtZWFudCB0byBiZSB1c2Vk IGF0IHRoZSBlbmQgYXQgdGhlIHRyYW5zZHVjaW5nIHByb2Nlc3MuCisoZGVmaW5lIHJjb25z CisgIChjYXNlLWxhbWJkYQorICAgICJBIHRyYW5zZHVjZXItZnJpZW5kbHkgY29uc2luZyBy ZWR1Y2VyIHdpdGggJygpIGFzIGlkZW50aXR5LiIKKyAgICAoKCkgJygpKQorICAgICgobHN0 KSAocmV2ZXJzZSEgbHN0KSkKKyAgICAoKGxzdCB4KSAoY29ucyB4IGxzdCkpKSkKKworKGRl ZmluZSByZXZlcnNlLXJjb25zCisgIChjYXNlLWxhbWJkYQorICAgICJBIHRyYW5zZHVjZXIt ZnJpZW5kbHkgY29uc2luZyByZWR1Y2VyIHdpdGggJygpIGFzIGlkZW50aXR5LgorVGhlIHJl c3VsdGluZyBsaXN0IGlzIGluIHJldmVyc2Ugb3JkZXIuIgorICAgICgoKSAnKCkpCisgICAg KChsc3QpIGxzdCkKKyAgICAoKGxzdCB4KSAoY29ucyB4IGxzdCkpKSkKKworKGRlZmluZSBy Y291bnQKKyAgKGNhc2UtbGFtYmRhCisgICAgIkEgY291bnRpbmcgcmVkdWNlciB0aGF0IGNv dW50cyBhbnkgZWxlbWVudHMgdGhhdCBtYWRlIGl0IHRocm91Z2ggdGhlCit0cmFuc2R1Y3Rp b24uCitAZXhhbXBsZQorKHRyYW5zZHVjZSAodGZpbHRlciBvZGQ/KSB0Y291bnQgKGxpc3Qg MSAyIDMpKSBAcmVzdWx0e30gMgorQGVuZCBleGFtcGxlIgorICAgICgoKSAwKQorICAgICgo cmVzdWx0KSByZXN1bHQpCisgICAgKChyZXN1bHQgaW5wdXQpCisgICAgICgrIDEgIHJlc3Vs dCkpKSkKKworKGRlZmluZSAocmFueSBwcmVkKQorICAoY2FzZS1sYW1iZGEKKyAgICAiUmV0 dXJuIGEgcmVkdWNlciB0aGF0IHRlc3RzIGlucHV0IHVzaW5nIEB2YXJ7cHJlZH0uIElmIGFu eSBpbnB1dCBzYXRpc2ZpZXMKK0B2YXJ7cHJlZH0sIHJldHVybiBAY29kZXsocmVkdWNlZCB2 YWx1ZSl9LiIKKyAgICAoKCkgI2YpCisgICAgKChyZXN1bHQpIHJlc3VsdCkKKyAgICAoKHJl c3VsdCBpbnB1dCkKKyAgICAgKGxldCAoKHRlc3QgKHByZWQgaW5wdXQpKSkKKyAgICAgICAo aWYgdGVzdAorICAgICAgICAgICAocmVkdWNlZCB0ZXN0KQorICAgICAgICAgICAjZikpKSkp CisKKyhkZWZpbmUgKHJldmVyeSBwcmVkKQorICAoY2FzZS1sYW1iZGEKKyAgICAiUmV0dXJu cyBhIHJlZHVjZXIgdGhhdCB0ZXN0cyBpbnB1dCB1c2luZyBAdmFye3ByZWR9LiBJZiBhbnkg aW5wdXQgc2F0aXNmaWVzCitAdmFye3ByZWR9LCBpdCByZXR1cm5zIEBjb2RleyhyZWR1Y2Vk ICNmKX0uIgorICAgICgoKSAjdCkKKyAgICAoKHJlc3VsdCkgcmVzdWx0KQorICAgICgocmVz dWx0IGlucHV0KQorICAgICAobGV0ICgodGVzdCAocHJlZCBpbnB1dCkpKQorICAgICAgIChp ZiAoYW5kIHJlc3VsdCB0ZXN0KQorICAgICAgICAgICB0ZXN0CisgICAgICAgICAgIChyZWR1 Y2VkICNmKSkpKSkpCisKKworKGRlZmluZSBsaXN0LXRyYW5zZHVjZQorICAoY2FzZS1sYW1i ZGEKKyAgICAoKHhmb3JtIGYgY29sbCkKKyAgICAgKGxpc3QtdHJhbnNkdWNlIHhmb3JtIGYg KGYpIGNvbGwpKQorICAgICgoeGZvcm0gZiBpbml0IGNvbGwpCisgICAgIChsZXQqICgoeGYg KHhmb3JtIGYpKQorICAgICAgICAgICAgKHJlc3VsdCAobGlzdC1yZWR1Y2UgeGYgaW5pdCBj b2xsKSkpCisgICAgICAgKHhmIHJlc3VsdCkpKSkpCisKKyhkZWZpbmUgdmVjdG9yLXRyYW5z ZHVjZQorICAoY2FzZS1sYW1iZGEKKyAgICAoKHhmb3JtIGYgY29sbCkKKyAgICAgKHZlY3Rv ci10cmFuc2R1Y2UgeGZvcm0gZiAoZikgY29sbCkpCisgICAgKCh4Zm9ybSBmIGluaXQgY29s bCkKKyAgICAgKGxldCogKCh4ZiAoeGZvcm0gZikpCisgICAgICAgICAgICAocmVzdWx0ICh2 ZWN0b3ItcmVkdWNlIHhmIGluaXQgY29sbCkpKQorICAgICAgICh4ZiByZXN1bHQpKSkpKQor CisoZGVmaW5lIHN0cmluZy10cmFuc2R1Y2UKKyAgKGNhc2UtbGFtYmRhCisgICAgKCh4Zm9y bSBmIGNvbGwpCisgICAgIChzdHJpbmctdHJhbnNkdWNlIHhmb3JtIGYgKGYpIGNvbGwpKQor ICAgICgoeGZvcm0gZiBpbml0IGNvbGwpCisgICAgIChsZXQqICgoeGYgKHhmb3JtIGYpKQor ICAgICAgICAgICAgKHJlc3VsdCAoc3RyaW5nLXJlZHVjZSB4ZiBpbml0IGNvbGwpKSkKKyAg ICAgICAoeGYgcmVzdWx0KSkpKSkKKworKGRlZmluZSBieXRldmVjdG9yLXU4LXRyYW5zZHVj ZQorICAoY2FzZS1sYW1iZGEKKyAgICAoKHhmb3JtIGYgY29sbCkKKyAgICAgKGJ5dGV2ZWN0 b3ItdTgtdHJhbnNkdWNlIHhmb3JtIGYgKGYpIGNvbGwpKQorICAgICgoeGZvcm0gZiBpbml0 IGNvbGwpCisgICAgIChsZXQqICgoeGYgKHhmb3JtIGYpKQorICAgICAgICAgICAgKHJlc3Vs dCAoYnl0ZXZlY3Rvci11OC1yZWR1Y2UgeGYgaW5pdCBjb2xsKSkpCisgICAgICAgKHhmIHJl c3VsdCkpKSkpCisKKyhkZWZpbmUgcG9ydC10cmFuc2R1Y2UKKyAgKGNhc2UtbGFtYmRhCisg ICAgKCh4Zm9ybSBmIGJ5KQorICAgICAoZ2VuZXJhdG9yLXRyYW5zZHVjZSB4Zm9ybSBmIGJ5 KSkKKyAgICAoKHhmb3JtIGYgYnkgcG9ydCkKKyAgICAgKHBvcnQtdHJhbnNkdWNlIHhmb3Jt IGYgKGYpIGJ5IHBvcnQpKQorICAgICgoeGZvcm0gZiBpbml0IGJ5IHBvcnQpCisgICAgIChs ZXQqICgoeGYgKHhmb3JtIGYpKQorICAgICAgICAgICAgKHJlc3VsdCAocG9ydC1yZWR1Y2Ug eGYgaW5pdCBieSBwb3J0KSkpCisgICAgICAgKHhmIHJlc3VsdCkpKSkpCisKKyhkZWZpbmUg Z2VuZXJhdG9yLXRyYW5zZHVjZQorICAoY2FzZS1sYW1iZGEKKyAgICAoKHhmb3JtIGYgZ2Vu KQorICAgICAoZ2VuZXJhdG9yLXRyYW5zZHVjZSB4Zm9ybSBmIChmKSBnZW4pKQorICAgICgo eGZvcm0gZiBpbml0IGdlbikKKyAgICAgKGxldCogKCh4ZiAoeGZvcm0gZikpCisgICAgICAg ICAgICAocmVzdWx0IChnZW5lcmF0b3ItcmVkdWNlIHhmIGluaXQgZ2VuKSkpCisgICAgICAg KHhmIHJlc3VsdCkpKSkpCisKKzs7OyBUcmFuc2R1Y2VycworKGRlZmluZSAodG1hcCBmKQor ICAobGFtYmRhIChyZWR1Y2VyKQorICAgIChjYXNlLWxhbWJkYQorICAgICAgKCgpIChyZWR1 Y2VyKSkKKyAgICAgICgocmVzdWx0KSAocmVkdWNlciByZXN1bHQpKSAKKyAgICAgICgocmVz dWx0IGlucHV0KQorICAgICAgIChyZWR1Y2VyIHJlc3VsdCAoZiBpbnB1dCkpKSkpKQorCiso ZGVmaW5lICh0ZmlsdGVyIHByZWQpCisgIChsYW1iZGEgKHJlZHVjZXIpCisgICAgKGNhc2Ut bGFtYmRhCisgICAgICAoKCkgKHJlZHVjZXIpKQorICAgICAgKChyZXN1bHQpIChyZWR1Y2Vy IHJlc3VsdCkpCisgICAgICAoKHJlc3VsdCBpbnB1dCkKKyAgICAgICAoaWYgKHByZWQgaW5w dXQpCisgICAgICAgICAgIChyZWR1Y2VyIHJlc3VsdCBpbnB1dCkKKyAgICAgICAgICAgcmVz dWx0KSkpKSkKKworKGRlZmluZSAodHJlbW92ZSBwcmVkKQorICAobGFtYmRhIChyZWR1Y2Vy KQorICAgIChjYXNlLWxhbWJkYQorICAgICAgKCgpIChyZWR1Y2VyKSkKKyAgICAgICgocmVz dWx0KSAocmVkdWNlciByZXN1bHQpKQorICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAgICAg KGlmIChub3QgKHByZWQgaW5wdXQpKQorICAgICAgICAgICAocmVkdWNlciByZXN1bHQgaW5w dXQpCisgICAgICAgICAgIHJlc3VsdCkpKSkpCisKKyhkZWZpbmUgKHRmaWx0ZXItbWFwIGYp IAorICAoY29tcG9zZSAodG1hcCBmKSAodGZpbHRlciB2YWx1ZXMpKSkKKworKGRlZmluZSAo bWFrZS1yZXBsYWNlciBtYXApCisgIChjb25kCisgICAoKGxpc3Q/IG1hcCkKKyAgICAobGFt YmRhICh4KQorICAgICAgKG1hdGNoIChhc3NvYyB4IG1hcCkKKyAgICAgICAgKChfIC4gcmVw bGFjZXIpIHJlcGxhY2VyKQorICAgICAgICAoI2YgeCkpKSkKKyAgICgoc3JmaTY5Omhhc2gt dGFibGU/IG1hcCkKKyAgICAobGFtYmRhICh4KQorICAgICAgKHNyZmk2OTpoYXNoLXRhYmxl LXJlZi9kZWZhdWx0IG1hcCB4IHgpKSkKKyAgICgocm5yczpoYXNodGFibGU/IG1hcCkKKyAg ICAobGFtYmRhICh4KQorICAgICAgKHJucnM6aGFzaHRhYmxlLXJlZiBtYXAgeCB4KSkpCisg ICAoKGhhc2gtdGFibGU/IG1hcCkKKyAgICAobGFtYmRhICh4KQorICAgICAgKGhhc2gtcmVm IG1hcCB4IHgpKSkKKyAgICgocHJvY2VkdXJlPyBtYXApIG1hcCkKKyAgIChlbHNlCisgICAg KGVycm9yICJVbnN1cHBvcnRlZCBtYXBwaW5nIGluIHRyZXBsYWNlIiBtYXApKSkpCisKKwor KGRlZmluZSAodHJlcGxhY2UgbWFwKQorICAiUmV0dXJuIGEgdHJhbnNkdWNlciB0aGF0IHNl YXJjaGVzIGZvciBhbnkgaW5wdXQgaW4gQHZhcnttYXB9LCB3aGljaCBtYXkKK2JlIGEgZ3Vp bGUgbmF0aXZlIGhhc2h0YWJsZSwgYW4gUjZSUyBoYXNodGFibGUsIGEgc3JmaS02OSBoYXNo dGFibGUsIGFuIGFsaXN0CitvciBhIG9uZS1hcmd1bWVudCBwcm9jZWR1cmUgdGFraW5nIG9u ZSB2YWx1ZSBhbmQgcHJvZHVjaW5nIGVpdGhlciB0aGUgc2FtZQordmFsdWUgb3IgYSByZXBs YWNlbWVudCBvbmUuIEFsaXN0cyBhbmQgZ3VpbGUtbmF0aXZlIGhhc2h0YmxlcyBjb21wYXJl IGtleXMKK3VzaW5nIEBjb2Rle2VxdWFsP30gd2hlcmVhcyB0aGUgb3RoZXIgbWFwcGluZ3Mg dXNlIHdoYXRldmVyIGVxdWFsaXR5IHByZWRpY2F0ZQordGhleSB3ZXJlIGNyZWF0ZWQgd2l0 aC4iCisgICh0bWFwIChtYWtlLXJlcGxhY2VyIG1hcCkpKQorCisoZGVmaW5lICh0ZHJvcCBu KQorICAobGFtYmRhIChyZWR1Y2VyKQorICAgIChsZXQgKChuZXctbiAoKyAxIG4pKSkKKyAg ICAgIChjYXNlLWxhbWJkYQorICAgICAgICAoKCkgKHJlZHVjZXIpKQorICAgICAgICAoKHJl c3VsdCkgKHJlZHVjZXIgcmVzdWx0KSkKKyAgICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAg ICAgICAoc2V0ISBuZXctbiAoLSBuZXctbiAxKSkKKyAgICAgICAgIChpZiAocG9zaXRpdmU/ IG5ldy1uKQorICAgICAgICAgICAgIHJlc3VsdAorICAgICAgICAgICAgIChyZWR1Y2VyIHJl c3VsdCBpbnB1dCkpKSkpKSkKKworKGRlZmluZSAodGRyb3Atd2hpbGUgcHJlZCkKKyAgKGxh bWJkYSAocmVkdWNlcikKKyAgICAobGV0ICgoZHJvcD8gI3QpKQorICAgICAgKGNhc2UtbGFt YmRhCisgICAgICAgICgoKSAocmVkdWNlcikpCisgICAgICAgICgocmVzdWx0KSAocmVkdWNl ciByZXN1bHQpKQorICAgICAgICAoKHJlc3VsdCBpbnB1dCkKKyAgICAgICAgIChpZiAoYW5k IChwcmVkIGlucHV0KSBkcm9wPykKKyAgICAgICAgICAgICByZXN1bHQKKyAgICAgICAgICAg ICAoYmVnaW4KKyAgICAgICAgICAgICAgIChzZXQhIGRyb3A/ICNmKQorICAgICAgICAgICAg ICAgKHJlZHVjZXIgcmVzdWx0IGlucHV0KSkpKSkpKSkKKworKGRlZmluZSAodHRha2UgbikK KyAgKGxhbWJkYSAocmVkdWNlcikKKyAgICA7OyB3ZSBuZWVkIHRvIHJlc2V0IG5ldy1uIGZv ciBldmVyeSBuZXcgdHJhbnNkdWN0aW9uCisgICAgKGxldCAoKG5ldy1uIG4pKQorICAgICAg KGNhc2UtbGFtYmRhCisgICAgICAgICgoKSAocmVkdWNlcikpCisgICAgICAgICgocmVzdWx0 KSAocmVkdWNlciByZXN1bHQpKQorICAgICAgICAoKHJlc3VsdCBpbnB1dCkKKyAgICAgICAg IChsZXQgKChyZXN1bHQgKGlmIChwb3NpdGl2ZT8gbmV3LW4pCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAocmVkdWNlciByZXN1bHQgaW5wdXQpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXN1bHQpKSkKKyAgICAgICAgICAgKHNldCEgbmV3LW4gKC0gbmV3LW4gMSkp CisgICAgICAgICAgIChpZiAobm90IChwb3NpdGl2ZT8gbmV3LW4pKQorICAgICAgICAgICAg ICAgKGVuc3VyZS1yZWR1Y2VkIHJlc3VsdCkKKyAgICAgICAgICAgICAgIHJlc3VsdCkpKSkp KSkKKworKGRlZmluZSB0dGFrZS13aGlsZQorICAoY2FzZS1sYW1iZGEKKyAgICAoKHByZWQp ICh0dGFrZS13aGlsZSBwcmVkIChsYW1iZGEgKHJlc3VsdCBpbnB1dCkgcmVzdWx0KSkpCisg ICAgKChwcmVkIHJldGYpCisgICAgIChsYW1iZGEgKHJlZHVjZXIpCisgICAgICAgKGxldCAo KHRha2U/ICN0KSkKKyAgICAgICAgIChjYXNlLWxhbWJkYQorICAgICAgICAgICAoKCkgKHJl ZHVjZXIpKQorICAgICAgICAgICAoKHJlc3VsdCkgKHJlZHVjZXIgcmVzdWx0KSkKKyAgICAg ICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAgICAgICAgICAoaWYgKGFuZCB0YWtlPyAocHJl ZCBpbnB1dCkpCisgICAgICAgICAgICAgICAgKHJlZHVjZXIgcmVzdWx0IGlucHV0KQorICAg ICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgICAgICAgKHNldCEgdGFrZT8gI2Yp CisgICAgICAgICAgICAgICAgICAoZW5zdXJlLXJlZHVjZWQgKHJldGYgcmVzdWx0IGlucHV0 KSkpKSkpKSkpKSkKKworKGRlZmluZSAodGNvbmNhdGVuYXRlIHJlZHVjZXIpCisgIChsZXQg KChwcmVzZXJ2aW5nLXJlZHVjZXIgKHByZXNlcnZpbmctcmVkdWNlZCByZWR1Y2VyKSkpCisg ICAgKGNhc2UtbGFtYmRhCisgICAgICAoKCkgKHJlZHVjZXIpKQorICAgICAgKChyZXN1bHQp IChyZWR1Y2VyIHJlc3VsdCkpCisgICAgICAoKHJlc3VsdCBpbnB1dCkKKyAgICAgICAobGlz dC1yZWR1Y2UgcHJlc2VydmluZy1yZWR1Y2VyIHJlc3VsdCBpbnB1dCkpKSkpCisKKyhkZWZp bmUgKHRhcHBlbmQtbWFwIGYpCisgIChjb21wb3NlICh0bWFwIGYpIHRjb25jYXRlbmF0ZSkp CisKKyhkZWZpbmUgKHRmbGF0dGVuIHJlZHVjZXIpCisgICJ0ZmxhdHRlbiBpcyBhIHRyYW5z ZHVjZXIgdGhhdCBmbGF0dGVucyBhbnkgbGlzdCBwYXNzZWQgdGhyb3VnaCBpdC4KK0BleGFt cGxlCisobGlzdC10cmFuc2R1Y2UgdGZsYXR0ZW4gY29uaiAobGlzdCAxIDIgKGxpc3QgMyA0 ICcoNSA2KSA3IDgpKSkKK0ByZXN1bHR7fSAoMSAyIDMgNCA1IDYgNyA4KQorQGVuZCBleGFt cGxlIgorICAoY2FzZS1sYW1iZGEKKyAgICAoKCkgJygpKQorICAgICgocmVzdWx0KSAocmVk dWNlciByZXN1bHQpKQorICAgICgocmVzdWx0IGlucHV0KQorICAgICAoaWYgKGxpc3Q/IGlu cHV0KQorICAgICAgICAgKGxpc3QtcmVkdWNlIChwcmVzZXJ2aW5nLXJlZHVjZWQgKHRmbGF0 dGVuIHJlZHVjZXIpKSByZXN1bHQgaW5wdXQpCisgICAgICAgICAocmVkdWNlciByZXN1bHQg aW5wdXQpKSkpKQorCisKKyhkZWZpbmUgdGRlbGV0ZS1uZWlnaGJvci1kdXBsaWNhdGVzCisg IChjYXNlLWxhbWJkYQorICAgICgoKSAodGRlbGV0ZS1uZWlnaGJvci1kdXBsaWNhdGVzIGVx dWFsPykpCisgICAgKChlcXVhbGl0eS1wcmVkPykgCisgICAgIChsYW1iZGEgKHJlZHVjZXIp CisgICAgICAgKGxldCAoKHByZXYgbm90aGluZykpCisgICAgICAgICAoY2FzZS1sYW1iZGEK KyAgICAgICAgICAgKCgpIChyZWR1Y2VyKSkKKyAgICAgICAgICAgKChyZXN1bHQpIChyZWR1 Y2VyIHJlc3VsdCkpCisgICAgICAgICAgICgocmVzdWx0IGlucHV0KQorICAgICAgICAgICAg KGlmIChlcXVhbGl0eS1wcmVkPyBwcmV2IGlucHV0KQorICAgICAgICAgICAgICAgIHJlc3Vs dAorICAgICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgICAgICAgKHNldCEgcHJl diBpbnB1dCkKKyAgICAgICAgICAgICAgICAgIChyZWR1Y2VyIHJlc3VsdCBpbnB1dCkpKSkp KSkpKSkKKworCisoZGVmaW5lKiAodGRlbGV0ZS1kdXBsaWNhdGVzICM6b3B0aW9uYWwgKGVx dWFsaXR5LXByZWQ/IGVxdWFsPykpCisgICJ0ZGVsZWRlLWR1cGxpY2F0ZXMgaXMgYSB0cmFu c2R1Y2VyIHRoYXQgZGVsZXRlcyBhbnkgc3Vic2VxdWVudCBkdXBsaWNhdGUKK2VsZW1lbnRz LiBDb21wYXJpc29ucyBpcyBkb25lIHVzaW5nIEB2YXJ7ZXF1YWxpdHktcHJlZD99LCB3aGlj aCBkZWZhdWx0cwordG8gQGNvZGV7ZXF1YWw/fS4iCisgIChsYW1iZGEgKHJlZHVjZXIpCisg ICAgKGxldCAoKGFscmVhZHktc2VlbiAoc3JmaTY5Om1ha2UtaGFzaC10YWJsZSBlcXVhbGl0 eS1wcmVkPykpKQorICAgICAgKGNhc2UtbGFtYmRhCisgICAgICAgICgoKSAocmVkdWNlcikp CisgICAgICAgICgocmVzdWx0KSAocmVkdWNlciByZXN1bHQpKQorICAgICAgICAoKHJlc3Vs dCBpbnB1dCkKKyAgICAgICAgIChpZiAoc3JmaTY5Omhhc2gtdGFibGUtZXhpc3RzPyBhbHJl YWR5LXNlZW4gaW5wdXQpCisgICAgICAgICAgICAgcmVzdWx0CisgICAgICAgICAgICAgKGJl Z2luCisgICAgICAgICAgICAgICAoc3JmaTY5Omhhc2gtdGFibGUtc2V0ISBhbHJlYWR5LXNl ZW4gaW5wdXQgI3QpCisgICAgICAgICAgICAgICAocmVkdWNlciByZXN1bHQgaW5wdXQpKSkp KSkpKQorCisoZGVmaW5lICh0c2VnbWVudCBuKQorICAiUmV0dXJuIGEgdHJhbnNkdWNlciB0 aGF0IHBhcnRpdGlvbnMgdGhlIGlucHV0IGludG8KK2xpc3RzIG9mIEB2YXJ7bn0gaXRlbXMu IElmIHRoZSBpbnB1dCBzdG9wcyBpdCBmbHVzaGVzIGFueQorYWNjdW11bGF0ZWQgc3RhdGUs IHdoaWNoIG1heSBiZSBzaG9ydGVyIHRoYW4gQHZhcntufS4iCisgIChpZiAobm90IChhbmQg KGludGVnZXI/IG4pIChwb3NpdGl2ZT8gbikpKQorICAgICAgKGVycm9yICJhcmd1bWVudCB0 byB0c2VnbWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpCisgICAgICAobGFtYmRh IChyZWR1Y2VyKQorICAgICAgICAobGV0ICgoaSAwKQorICAgICAgICAgICAgICAoY29sbGVj dCAobWFrZS12ZWN0b3IgbikpKQorICAgICAgICAgIChjYXNlLWxhbWJkYQorICAgICAgICAg ICAgKCgpIChyZWR1Y2VyKSkKKyAgICAgICAgICAgICgocmVzdWx0KQorICAgICAgICAgICAg IDs7IGlmIHRoZXJlIGlzIGFueXRoaW5nIGNvbGxlY3RlZCB3aGVuIHdlIGFyZSBhc2tlZCB0 byBxdWl0CisgICAgICAgICAgICAgOzsgd2UgZmx1c2ggaXQgdG8gdGhlIHJlbWFpbmluZyB0 cmFuc2R1Y2VycworICAgICAgICAgICAgIChsZXQgKChyZXN1bHQKKyAgICAgICAgICAgICAg ICAgICAgKGlmICh6ZXJvPyBpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Cisg ICAgICAgICAgICAgICAgICAgICAgICAocmVkdWNlciByZXN1bHQgKHZlY3Rvci0+bGlzdCBj b2xsZWN0IDAgaSkpKSkpCisgICAgICAgICAgICAgICAoc2V0ISBpIDApCisgICAgICAgICAg ICAgICA7OyBub3cgZmluYWxseSwgcGFzcyBpdCBkb3duc3RyZWFtcworICAgICAgICAgICAg ICAgKGlmIChyZWR1Y2VkPyByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgKHJlZHVjZXIg KHVucmVkdWNlIHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgKHJlZHVjZXIgcmVzdWx0 KSkpKQorICAgICAgICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAgICAgICAgICAgKHZlY3Rv ci1zZXQhIGNvbGxlY3QgaSBpbnB1dCkKKyAgICAgICAgICAgICAoc2V0ISBpICgrIGkgMSkp CisgICAgICAgICAgICAgOzsgSWYgd2UgaGF2ZSBjb2xsZWN0ZWQgZW5vdWdoIGlucHV0IHdl IGNhbiBwYXNzIGl0IG9uIGRvd25zdHJlYW0KKyAgICAgICAgICAgICAoaWYgKDwgaSBuKQor ICAgICAgICAgICAgICAgICByZXN1bHQKKyAgICAgICAgICAgICAgICAgKGxldCAoKG5leHQt aW5wdXQgKHZlY3Rvci0+bGlzdCBjb2xsZWN0IDAgaSkpKQorICAgICAgICAgICAgICAgICAg IChzZXQhIGkgMCkKKyAgICAgICAgICAgICAgICAgICAocmVkdWNlciByZXN1bHQgbmV4dC1p bnB1dCkpKSkpKSkpKQorCisoZGVmaW5lICh0cGFydGl0aW9uIGYpCisgICJSZXR1cm4gYSB0 cmFuc2R1Y2VyIHRoYXQgcGFydGl0aW9ucyBhbnkgaW5wdXQgYnkgd2hlbmV2ZXIKK0Bjb2Rl eyhmIGlucHV0KX0gY2hhbmdlcyB2YWx1ZS4gIgorICAobGFtYmRhIChyZWR1Y2VyKQorICAg IChsZXQqICgocHJldiBub3RoaW5nKQorICAgICAgICAgICAoY29sbGVjdCAnKCkpKQorICAg ICAgKGNhc2UtbGFtYmRhCisgICAgICAgICgoKSAocmVkdWNlcikpCisgICAgICAgICgocmVz dWx0KQorICAgICAgICAgKGxldCAoKHJlc3VsdAorICAgICAgICAgICAgICAgIChpZiAobnVs bD8gY29sbGVjdCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0CisgICAgICAgICAgICAg ICAgICAgIChyZWR1Y2VyIHJlc3VsdCAocmV2ZXJzZSEgY29sbGVjdCkpKSkpCisgICAgICAg ICAgIChzZXQhIGNvbGxlY3QgJygpKQorICAgICAgICAgICAoaWYgKHJlZHVjZWQ/IHJlc3Vs dCkKKyAgICAgICAgICAgICAgIChyZWR1Y2VyICh1bnJlZHVjZSByZXN1bHQpKQorICAgICAg ICAgICAgICAgKHJlZHVjZXIgcmVzdWx0KSkpKQorICAgICAgICAoKHJlc3VsdCBpbnB1dCkK KyAgICAgICAgIChsZXQgKChmb3V0IChmIGlucHV0KSkpCisgICAgICAgICAgIChjb25kCisg ICAgICAgICAgICAoKG9yIChlcXVhbD8gZm91dCBwcmV2KSAobm90aGluZz8gcHJldikpIDsg Y29sbGVjdAorICAgICAgICAgICAgIChzZXQhIHByZXYgZm91dCkKKyAgICAgICAgICAgICAo c2V0ISBjb2xsZWN0IChjb25zIGlucHV0IGNvbGxlY3QpKQorICAgICAgICAgICAgIHJlc3Vs dCkKKyAgICAgICAgICAgIChlbHNlIDsgZmx1c2ggd2hhdCB3ZSBjb2xsZWN0ZWQgYWxyZWFk eSB0byB0aGUgcmVkdWNlcgorICAgICAgICAgICAgIChsZXQgKChuZXh0LWlucHV0ICAocmV2 ZXJzZSEgY29sbGVjdCkpKQorICAgICAgICAgICAgICAgKHNldCEgcHJldiBmb3V0KQorICAg ICAgICAgICAgICAgKHNldCEgY29sbGVjdCAobGlzdCBpbnB1dCkpCisgICAgICAgICAgICAg ICAocmVkdWNlciByZXN1bHQgbmV4dC1pbnB1dCkpKSkpKSkpKSkKKworKGRlZmluZSAodGFk ZC1iZXR3ZWVuIGVsZW0pCisgICJSZXR1cm4gYSB0cmFuc2R1Y2VyIHRoYXQgaW50ZXJwb3Nl cyBAdmFye2VsZW19IGJldHdlZW4gZWFjaCB2YWx1ZSBwdXNoZWQKK3Rocm91Z2ggdGhlIHRy YW5zZHVjdGlvbi4iCisgIChsYW1iZGEgKHJlZHVjZXIpCisgICAgKGxldCAoKHNlbmQtZWxl bT8gI2YpKQorICAgICAgKGNhc2UtbGFtYmRhCisgICAgICAgICgoKSAocmVkdWNlcikpCisg ICAgICAgICgocmVzdWx0KQorICAgICAgICAgKHJlZHVjZXIgcmVzdWx0KSkKKyAgICAgICAg KChyZXN1bHQgaW5wdXQpCisgICAgICAgICAoaWYgc2VuZC1lbGVtPworICAgICAgICAgICAg IChsZXQgKChyZXN1bHQgKHJlZHVjZXIgcmVzdWx0IGVsZW0pKSkKKyAgICAgICAgICAgICAg IChpZiAocmVkdWNlZD8gcmVzdWx0KQorICAgICAgICAgICAgICAgICAgIHJlc3VsdAorICAg ICAgICAgICAgICAgICAgIChyZWR1Y2VyIHJlc3VsdCBpbnB1dCkpKQorICAgICAgICAgICAg IChiZWdpbgorICAgICAgICAgICAgICAgKHNldCEgc2VuZC1lbGVtPyAjdCkKKyAgICAgICAg ICAgICAgIChyZWR1Y2VyIHJlc3VsdCBpbnB1dCkpKSkpKSkpCisKKyhkZWZpbmUqICh0ZW51 bWVyYXRlICM6b3B0aW9uYWwgKG4gMCkpCisgICJSZXR1cm4gYSB0cmFuc2R1Y2VyIHRoYXQg aW5kZXhlcyBldmVyeSB2YWx1ZSBwYXNzZWQgdGhyb3VnaCBpbnRvIGEgY29ucworcGFpciBh cyBAY29kZXsoaW5kZXggLiB2YWx1ZSl9LiBTdGFydHMgYXQgQHZhcntufSB3aGljaCBkZWZh dWx0cyB0byAwLiIKKyAgKGxhbWJkYSAocmVkdWNlcikKKyAgICAobGV0ICgobiBuKSkKKyAg ICAgIChjYXNlLWxhbWJkYQorICAgICAgICAoKCkgKHJlZHVjZXIpKQorICAgICAgICAoKHJl c3VsdCkgKHJlZHVjZXIgcmVzdWx0KSkKKyAgICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAg ICAgICAobGV0ICgoaW5wdXQgKGNvbnMgbiBpbnB1dCkpKQorICAgICAgICAgICAoc2V0ISBu ICgrIG4gMSkpCisgICAgICAgICAgIChyZWR1Y2VyIHJlc3VsdCBpbnB1dCkpKSkpKSkKKwor KGRlZmluZSogKHRsb2cgIzpvcHRpb25hbAorICAgICAgICAgICAgICAgKGxvZy1mdW5jdGlv biAobGFtYmRhIChyZXN1bHQgaW5wdXQpICh3cml0ZSBpbnB1dCkgKG5ld2xpbmUpKSkpCisg IChsYW1iZGEgKHJlZHVjZXIpCisgICAgKGNhc2UtbGFtYmRhCisgICAgICAoKCkgKHJlZHVj ZXIpKQorICAgICAgKChyZXN1bHQpIChyZWR1Y2VyIHJlc3VsdCkpCisgICAgICAoKHJlc3Vs dCBpbnB1dCkKKyAgICAgICAobG9nLWZ1bmN0aW9uIHJlc3VsdCBpbnB1dCkKKyAgICAgICAo cmVkdWNlciByZXN1bHQgaW5wdXQpKSkpKQorCisKKworCmRpZmYgLS1naXQgYS9tb2R1bGUv c3JmaS9zcmZpLTE3MS9nbnUuc2NtIGIvbW9kdWxlL3NyZmkvc3JmaS0xNzEvZ251LnNjbQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjQ1YTRlMTlhZgotLS0gL2Rl di9udWxsCisrKyBiL21vZHVsZS9zcmZpL3NyZmktMTcxL2dudS5zY20KQEAgLTAsMCArMSw2 NSBAQAorOzsgCUNvcHlyaWdodCAoQykgMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKzs7Cis7OyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7OyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCis7OyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKzs7IHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKzs7IAorOzsgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzsgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKzs7 IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7OyAK Kzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKKzs7IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKzs7IEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EKKworKGRlZmluZS1tb2R1bGUgKHNyZmkgc3JmaS0xNzEgZ251KQorICAjOnVzZS1t b2R1bGUgKHNyZmkgc3JmaS0xNzEpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTE3MSBt ZXRhKQorICAjOmV4cG9ydCAodGJhdGNoIHRmb2xkKSkKKworCisoZGVmaW5lIHRiYXRjaAor ICAoY2FzZS1sYW1iZGEKKyAgICAoKHJlZHVjZXIpCisgICAgICh0YmF0Y2ggaWRlbnRpdHkg cmVkdWNlcikpCisgICAgKCh0IHIpCisgICAgIChsYW1iZGEgKHJlZHVjZXIpCisgICAgICAg KGxldCAoKGN1ci1yZWR1Y2VyICh0IHIpKQorICAgICAgICAgICAgIChjdXItc3RhdGUgKHIp KSkKKyAgICAgICAgIChjYXNlLWxhbWJkYQorICAgICAgICAgICAoKCkgKHJlZHVjZXIpKQor ICAgICAgICAgICAoKHJlc3VsdCkKKyAgICAgICAgICAgIChpZiAoZXF1YWw/IGN1ci1zdGF0 ZSAoY3VyLXJlZHVjZXIpKQorICAgICAgICAgICAgICAgIChyZWR1Y2VyIHJlc3VsdCkKKyAg ICAgICAgICAgICAgICAobGV0ICgobmV3LXJlcyAocmVkdWNlciByZXN1bHQgKGN1ci1yZWR1 Y2VyIGN1ci1zdGF0ZSkpKSkKKyAgICAgICAgICAgICAgICAgIChpZiAocmVkdWNlZD8gbmV3 LXJlcykKKyAgICAgICAgICAgICAgICAgICAgICAocmVkdWNlciAodW5yZWR1Y2UgbmV3LXJl cykpCisgICAgICAgICAgICAgICAgICAgICAgKHJlZHVjZXIgbmV3LXJlcykpKSkpCisgICAg ICAgICAgICgocmVzdWx0IHZhbHVlKQorICAgICAgICAgICAgKGxldCAoKHZhbCAoY3VyLXJl ZHVjZXIgY3VyLXN0YXRlIHZhbHVlKSkpCisgICAgICAgICAgICAgIChjb25kCisgICAgICAg ICAgICAgICA7OyBjdXItcmVkdWNlciBpcyBkb25lLiBQdXNoIHZhbHVlIGRvd25zdHJlYW0K KyAgICAgICAgICAgICAgIDs7IHJlLWluc3RhbnRpYXRlIHRoZSBzdGF0ZSBhbmQgdGhlIGN1 ci1yZWR1Y2VyCisgICAgICAgICAgICAgICAoKHJlZHVjZWQ/IHZhbCkKKyAgICAgICAgICAg ICAgICAobGV0ICgodW5yZWR1Y2VkLXZhbCAodW5yZWR1Y2UgdmFsKSkpCisgICAgICAgICAg ICAgICAgICAoc2V0ISBjdXItcmVkdWNlciAodCByKSkKKyAgICAgICAgICAgICAgICAgIChz ZXQhIGN1ci1zdGF0ZSAoY3VyLXJlZHVjZXIpKQorICAgICAgICAgICAgICAgICAgKHJlZHVj ZXIgcmVzdWx0IChjdXItcmVkdWNlciB1bnJlZHVjZWQtdmFsKSkpKQorICAgICAgICAgICAg ICAgKGVsc2UKKyAgICAgICAgICAgICAgICAoc2V0ISBjdXItc3RhdGUgdmFsKQorICAgICAg ICAgICAgICAgIHJlc3VsdCkpKSkpKSkpKSkKKworCisoZGVmaW5lKiAodGZvbGQgcmVkdWNl ciAjOm9wdGlvbmFsIChzZWVkIChyZWR1Y2VyKSkpCisgIChsYW1iZGEgKHIpCisgICAgKGxl dCAoKHN0YXRlIHNlZWQpKQorICAgICAgKGNhc2UtbGFtYmRhCisgICAgICAgICgoKSAocikp CisgICAgICAgICgocmVzdWx0KSAociByZXN1bHQpKQorICAgICAgICAoKHJlc3VsdCB2YWx1 ZSkKKyAgICAgICAgIChzZXQhIHN0YXRlIChyZWR1Y2VyIHN0YXRlIHZhbHVlKSkKKyAgICAg ICAgIChpZiAocmVkdWNlZD8gc3RhdGUpCisgICAgICAgICAgICAgKHJlZHVjZWQgKHJlZHVj ZXIgKHVucmVkdWNlIHN0YXRlKSkpCisgICAgICAgICAgICAgKHIgcmVzdWx0IHN0YXRlKSkp KSkpKQpkaWZmIC0tZ2l0IGEvbW9kdWxlL3NyZmkvc3JmaS0xNzEvbWV0YS5zY20gYi9tb2R1 bGUvc3JmaS9zcmZpLTE3MS9tZXRhLnNjbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAuLjc3MWY3MDdlZQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZS9zcmZpL3Ny ZmktMTcxL21ldGEuc2NtCkBAIC0wLDAgKzEsMTEzIEBACis7OyAJQ29weXJpZ2h0IChDKSAy MDIwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOzsKKzs7IFRoaXMgbGlicmFy eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzs7 IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKzs7IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlcgorOzsgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzsgCis7OyBUaGlzIGxpYnJhcnkg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7 IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOzsgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7IAorOzsgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworOzsgTGljZW5z ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQorOzsgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorCisKKyhkZWZpbmUtbW9kdWxl IChzcmZpIHNyZmktMTcxIG1ldGEpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTkpCisg ICM6dXNlLW1vZHVsZSAoKHJucnMgYnl0ZXZlY3RvcnMpICM6c2VsZWN0IChieXRldmVjdG9y LWxlbmd0aCBieXRldmVjdG9yLXU4LXJlZikpCisgICM6ZXhwb3J0IChyZWR1Y2VkIHJlZHVj ZWQ/CisgICAgICAgICAgICB1bnJlZHVjZQorICAgICAgICAgICAgZW5zdXJlLXJlZHVjZWQK KyAgICAgICAgICAgIHByZXNlcnZpbmctcmVkdWNlZAorCisgICAgICAgICAgICBsaXN0LXJl ZHVjZQorICAgICAgICAgICAgdmVjdG9yLXJlZHVjZQorICAgICAgICAgICAgc3RyaW5nLXJl ZHVjZQorICAgICAgICAgICAgYnl0ZXZlY3Rvci11OC1yZWR1Y2UKKyAgICAgICAgICAgIHBv cnQtcmVkdWNlCisgICAgICAgICAgICBnZW5lcmF0b3ItcmVkdWNlKSkKKworCis7OyBBIHJl ZHVjZWQgdmFsdWUgaXMgc3RvcHMgdGhlIHRyYW5zZHVjdGlvbi4KKyhkZWZpbmUtcmVjb3Jk LXR5cGUgPHJlZHVjZWQ+CisgIChyZWR1Y2VkIHZhbCkKKyAgcmVkdWNlZD8KKyAgKHZhbCB1 bnJlZHVjZSkpCisKKyhkZWZpbmUgKGVuc3VyZS1yZWR1Y2VkIHgpCisgICJFbnN1cmUgdGhh dCBAdmFye3h9IGlzIHJlZHVjZWQiCisgIChpZiAocmVkdWNlZD8geCkKKyAgICAgIHgKKyAg ICAgIChyZWR1Y2VkIHgpKSkKKworOzsgaGVscGVyIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYSBy ZWR1Y2VkIHZhbHVlIHR3aWNlIHNpbmNlIHJlZHVjaW5nIGZ1bmN0aW9ucyAobGlrZSBsaXN0 LXJlZHVjZSkKKzs7IHVud3JhcHMgdGhlbS4gdGNvbmNhdGVuYXRlIGlzIGEgZ29vZCBleGFt cGxlOiBpdCByZS11c2VzIGl0J3MgcmVkdWNlciBvbiBpdCdzIGlucHV0IHVzaW5nIGxpc3Qt cmVkdWNlLgorOzsgSWYgdGhhdCByZWR1Y3Rpb24gZmluaXNoZXMgZWFybHkgYW5kIHJldHVy bnMgYSByZWR1Y2VkIHZhbHVlLCBsaXN0LXJlZHVjZSB3b3VsZCAidW5yZWR1Y2UiCis7OyB0 aGF0IHZhbHVlIGFuZCB0cnkgdG8gY29udGludWUgdGhlIHRyYW5zZHVjaW5nIHByb2Nlc3Mu CisoZGVmaW5lIChwcmVzZXJ2aW5nLXJlZHVjZWQgcmVkdWNlcikKKyAgKGxhbWJkYSAoYSBi KQorICAgIChsZXQgKChyZXR1cm4gKHJlZHVjZXIgYSBiKSkpCisgICAgICAoaWYgKHJlZHVj ZWQ/IHJldHVybikKKyAgICAgICAgICAocmVkdWNlZCByZXR1cm4pCisgICAgICAgICAgcmV0 dXJuKSkpKQorCis7OyBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyB0b2Z1IGlzIGNvb2tlZAor KGRlZmluZSAobGlzdC1yZWR1Y2UgZiBpZGVudGl0eSBsc3QpCisgIChpZiAobnVsbD8gbHN0 KQorICAgICAgaWRlbnRpdHkKKyAgICAgIChsZXQgKCh2IChmIGlkZW50aXR5IChjYXIgbHN0 KSkpKQorICAgICAgICAoaWYgKHJlZHVjZWQ/IHYpCisgICAgICAgICAgICAodW5yZWR1Y2Ug dikKKyAgICAgICAgICAgIChsaXN0LXJlZHVjZSBmIHYgKGNkciBsc3QpKSkpKSkKKworKGRl ZmluZSAodmVjdG9yLXJlZHVjZSBmIGlkZW50aXR5IHZlYykKKyAgKGxldCAoKGxlbiAodmVj dG9yLWxlbmd0aCB2ZWMpKSkKKyAgICAobGV0IGxvb3AgKChpIDApIChhY2MgaWRlbnRpdHkp KQorICAgICAgKGlmICg9IGkgbGVuKQorICAgICAgICAgIGFjYworICAgICAgICAgIChsZXQg KChhY2MgKGYgYWNjICh2ZWN0b3ItcmVmIHZlYyBpKSkpKQorICAgICAgICAgICAgKGlmIChy ZWR1Y2VkPyBhY2MpCisgICAgICAgICAgICAgICAgKHVucmVkdWNlIGFjYykKKyAgICAgICAg ICAgICAgICAobG9vcCAoKyBpIDEpIGFjYykpKSkpKSkKKworKGRlZmluZSAoc3RyaW5nLXJl ZHVjZSBmIGlkZW50aXR5IHN0cikKKyAgKGxldCAoKGxlbiAoc3RyaW5nLWxlbmd0aCBzdHIp KSkKKyAgICAobGV0IGxvb3AgKChpIDApIChhY2MgaWRlbnRpdHkpKQorICAgICAgKGlmICg9 IGkgbGVuKQorICAgICAgICAgIGFjYworICAgICAgICAgIChsZXQgKChhY2MgKGYgYWNjIChz dHJpbmctcmVmIHN0ciBpKSkpKQorICAgICAgICAgICAgKGlmIChyZWR1Y2VkPyBhY2MpCisg ICAgICAgICAgICAgICAgKHVucmVkdWNlIGFjYykKKyAgICAgICAgICAgICAgICAobG9vcCAo KyBpIDEpIGFjYykpKSkpKSkKKworKGRlZmluZSAoYnl0ZXZlY3Rvci11OC1yZWR1Y2UgZiBp ZGVudGl0eSB2ZWMpCisgIChsZXQgKChsZW4gKGJ5dGV2ZWN0b3ItbGVuZ3RoIHZlYykpKQor ICAgIChsZXQgbG9vcCAoKGkgMCkgKGFjYyBpZGVudGl0eSkpCisgICAgICAoaWYgKD0gaSBs ZW4pCisgICAgICAgICAgYWNjCisgICAgICAgICAgKGxldCAoKGFjYyAoZiBhY2MgKGJ5dGV2 ZWN0b3ItdTgtcmVmIHZlYyBpKSkpKQorICAgICAgICAgICAgKGlmIChyZWR1Y2VkPyBhY2Mp CisgICAgICAgICAgICAgICAgKHVucmVkdWNlIGFjYykKKyAgICAgICAgICAgICAgICAobG9v cCAoKyBpIDEpIGFjYykpKSkpKSkKKworKGRlZmluZSAocG9ydC1yZWR1Y2UgZiBpZGVudGl0 eSByZWFkZXIgcG9ydCkKKyAgKGxldCBsb29wICgodmFsIChyZWFkZXIgcG9ydCkpIChhY2Mg aWRlbnRpdHkpKQorICAgIChpZiAoZW9mLW9iamVjdD8gdmFsKQorICAgICAgICBhY2MKKyAg ICAgICAgKGxldCAoKGFjYyAoZiBhY2MgdmFsKSkpCisgICAgICAgICAgKGlmIChyZWR1Y2Vk PyBhY2MpCisgICAgICAgICAgICAgICh1bnJlZHVjZSBhY2MpCisgICAgICAgICAgICAgIChs b29wIChyZWFkZXIgcG9ydCkgYWNjKSkpKSkpCisKKyhkZWZpbmUgKGdlbmVyYXRvci1yZWR1 Y2UgZiBpZGVudGl0eSBnZW4pCisgIChsZXQgbG9vcCAoKHZhbCAoZ2VuKSkgKGFjYyBpZGVu dGl0eSkpCisgICAgKGlmIChlb2Ytb2JqZWN0PyB2YWwpCisgICAgICAgIGFjYworICAgICAg ICAobGV0ICgoYWNjIChmIGFjYyB2YWwpKSkKKyAgICAgICAgICAoaWYgKHJlZHVjZWQ/IGFj YykKKyAgICAgICAgICAgICAgKHVucmVkdWNlIGFjYykKKyAgICAgICAgICAgICAgKGxvb3Ag KGdlbikgYWNjKSkpKSkpCisKZGlmZiAtLWdpdCBhL3Rlc3Qtc3VpdGUvTWFrZWZpbGUuYW0g Yi90ZXN0LXN1aXRlL01ha2VmaWxlLmFtCmluZGV4IDBkYzg2YjAyMC4uODE1OGFhZjQ0IDEw MDY0NAotLS0gYS90ZXN0LXN1aXRlL01ha2VmaWxlLmFtCisrKyBiL3Rlc3Qtc3VpdGUvTWFr ZWZpbGUuYW0KQEAgLTE2MCw2ICsxNjAsNyBAQCBTQ01fVEVTVFMgPSB0ZXN0cy8wMC1pbml0 aWFsLWVudi50ZXN0CQlcCiAJICAgIHRlc3RzL3NyZmktOTgudGVzdAkJCVwKIAkgICAgdGVz dHMvc3JmaS0xMDUudGVzdAkJCVwKIAkgICAgdGVzdHMvc3JmaS0xMTEudGVzdAkJCVwKKyAg ICAgICAgICAgIHRlc3RzL3NyZmktMTcxLnRlc3QgICAgICAgICAgICAgICAgIFwKIAkgICAg dGVzdHMvc3JmaS00LnRlc3QJCQlcCiAJICAgIHRlc3RzL3NyZmktOS50ZXN0CQkJXAogCSAg ICB0ZXN0cy9zdGF0cHJvZi50ZXN0CQkJXApkaWZmIC0tZ2l0IGEvdGVzdC1zdWl0ZS90ZXN0 cy9zcmZpLTE3MS50ZXN0IGIvdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTE3MS50ZXN0Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMWVmN2JjNWYyCi0tLSAvZGV2L251 bGwKKysrIGIvdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTE3MS50ZXN0CkBAIC0wLDAgKzEsMjY3 IEBACis7OyAJQ29weXJpZ2h0IChDKSAyMDIwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorOzsKKzs7IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzs7IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKzs7IExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorOzsgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorOzsgCis7OyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOzsg TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7IAor OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworOzsgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorOzsgRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorCisoZGVmaW5lLW1vZHVsZSAodGVzdC1zcmZpLTE3MSkKKyAgIzp1c2UtbW9kdWxl ICh0ZXN0LXN1aXRlIGxpYikKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBoYXNoLXRhYmxlKQor ICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xNzEpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBz cmZpLTE3MSBnbnUpCisgICM6dXNlLW1vZHVsZSAocm5ycyBieXRldmVjdG9ycykKKyAgIzp1 c2UtbW9kdWxlICgocm5ycyBoYXNodGFibGVzKSAjOnByZWZpeCBybnJzOikKKyAgIzp1c2Ut bW9kdWxlICgoc3JmaSBzcmZpLTY5KSAjOnByZWZpeCBzcmZpOikpCisKKyhkZWZpbmUgKGFk ZDEgeCkgKCsgeCAxKSkKKworKGRlZmluZSBudW1lcmljLWxpc3QgKGlvdGEgNSkpCisoZGVm aW5lIG51bWVyaWMtdmVjIChsaXN0LT52ZWN0b3IgbnVtZXJpYy1saXN0KSkKKyhkZWZpbmUg YnYgKGxpc3QtPnU4dmVjdG9yIG51bWVyaWMtbGlzdCkpCisoZGVmaW5lIHRlc3Qtc3RyaW5n ICIwMTIzNDU2Nzg5YWJjZGVmIikKKyhkZWZpbmUgbGlzdC1vZi1jaGFycyAoc3RyaW5nLT5s aXN0IHRlc3Qtc3RyaW5nKSkKKworOzsgZm9yIHRlc3RpbmcgYWxsIHRyZXBsYWNlIHZhcmlh dGlvbnMKKyhkZWZpbmUgcmVwbGFjZS1hbGlzdCAnKCgxIC4gcykgKDIgLiBjKSAoMyAuIGgp ICg0IC4gZSkgKDUgLiBtKSkpCisoZGVmaW5lIGd1aWxlLWhhc2h0YWJsZSAoYWxpc3QtPmhh c2gtdGFibGUgcmVwbGFjZS1hbGlzdCkpCisoZGVmaW5lIHNyZmk2OS1oYXNodGFibGUgKHNy Zmk6YWxpc3QtPmhhc2gtdGFibGUgcmVwbGFjZS1hbGlzdCkpCisoZGVmaW5lIHJucnMtaGFz aHRhYmxlIChybnJzOm1ha2UtZXEtaGFzaHRhYmxlKSkKKyhybnJzOmhhc2h0YWJsZS1zZXQh IHJucnMtaGFzaHRhYmxlIDEgJ3MpCisocm5yczpoYXNodGFibGUtc2V0ISBybnJzLWhhc2h0 YWJsZSAyICdjKQorKHJucnM6aGFzaHRhYmxlLXNldCEgcm5ycy1oYXNodGFibGUgMyAnaCkK KyhybnJzOmhhc2h0YWJsZS1zZXQhIHJucnMtaGFzaHRhYmxlIDQgJ2UpCisocm5yczpoYXNo dGFibGUtc2V0ISBybnJzLWhhc2h0YWJsZSA1ICdtKQorKGRlZmluZSAocmVwbGFjZS1mdW5j dGlvbiB2YWwpCisgIChjYXNlIHZhbAorICAgICgoMSkgJ3MpCisgICAgKCgyKSAnYykKKyAg ICAoKDMpICdoKQorICAgICgoNCkgJ2UpCisgICAgKCg1KSAnbSkKKyAgICAoZWxzZSB2YWwp KSkKKworOzsgVGVzdCBwcm9jZWR1cmVzIGZvciBwb3J0LXRyYW5zZHVjZQorOzsgYnJva2Vu IG91dCB0byBwcm9wZXJseSBjbG9zZSBwb3J0CisoZGVmaW5lIChwb3J0LXRyYW5zZHVjZS10 ZXN0KQorICAobGV0KiAoKHBvcnQgKG9wZW4taW5wdXQtc3RyaW5nICIwIDEgMiAzIDQiKSkK KyAgICAgICAgKHJlcyAoZXF1YWw/IDE1IChwb3J0LXRyYW5zZHVjZSAodG1hcCBhZGQxKSAr IHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Blbi1p bnB1dC1zdHJpbmcgIjAgMSAyIDMgNCIpKSkpKQorICAgIChjbG9zZS1wb3J0IHBvcnQpCisg ICAgcmVzKSkKKyhkZWZpbmUgKHBvcnQtdHJhbnNkdWNlLXdpdGgtaWRlbnRpdHktdGVzdCkK KyAgKGxldCogKChwb3J0IChvcGVuLWlucHV0LXN0cmluZyAiMCAxIDIgMyA0IikpCisgICAg ICAgICAocmVzIChlcXVhbD8gMTUgKHBvcnQtdHJhbnNkdWNlICh0bWFwIGFkZDEpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChvcGVuLWlucHV0LXN0cmluZyAiMCAxIDIgMyA0IikpKSkpCisgICAgKGNs b3NlLXBvcnQgcG9ydCkKKyAgICByZXMpKQorCisod2l0aC10ZXN0LXByZWZpeCAidHJhbnNk dWNlcnMiCisgIChwYXNzLWlmICJ0bWFwIiAoZXF1YWw/ICcoMSAyIDMgNCA1KSAobGlzdC10 cmFuc2R1Y2UgKHRtYXAgYWRkMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByY29ucworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMtbGlzdCkpKQorCisgIChw YXNzLWlmICJ0ZmlsdGVyIiAoZXF1YWw/ICcoMCAyIDQpIChsaXN0LXRyYW5zZHVjZSAodGZp bHRlciBldmVuPykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJjb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBudW1lcmljLWxpc3QpKSkKKworICAocGFzcy1pZiAidGZp bHRlcit0bWFwIiAoZXF1YWw/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAnKDEgMyA1 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlIChjb21wb3Nl ICh0ZmlsdGVyIGV2ZW4/KSAodG1hcCBhZGQxKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByY29ucworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG51bWVyaWMtbGlzdCkpKQorCisgIChwYXNzLWlmICJ0ZmlsdGVy LW1hcCIKKyAgICAgICAgICAgKGVxdWFsPyAnKDEgMyA1KQorICAgICAgICAgICAgICAgICAg IChsaXN0LXRyYW5zZHVjZSAodGZpbHRlci1tYXAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsYW1iZGEgKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpZiAoZXZlbj8geCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgrIHggMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICNmKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJj b25zIG51bWVyaWMtbGlzdCkpKQorCisgIChwYXNzLWlmICJ0cmVtb3ZlIgorICAgIChlcXVh bD8gKGxpc3QtdHJhbnNkdWNlICh0cmVtb3ZlIGNoYXItYWxwaGFiZXRpYz8pCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmNvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlzdC1vZi1jaGFycykKKyAgICAgICAgICAgIChzdHJpbmctdHJhbnNkdWNlICh0cmVt b3ZlIGNoYXItYWxwaGFiZXRpYz8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy Y291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qtc3RyaW5nKSkpCisK KyAgKHBhc3MtaWYgInRyZXBsYWNlIHdpdGggYWxpc3QiCisgICAgICAgICAgIChlcXVhbD8g JyhzIGMgaCBlIG0gZSAgciBvIGMgayBzKQorICAgICAgICAgICAgICAgICAgIChsaXN0LXRy YW5zZHVjZSAodHJlcGxhY2UgcmVwbGFjZS1hbGlzdCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmNvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJygxIDIgMyA0IDUgNCByIG8gYyBrIHMpICkpKQorCisgIChwYXNzLWlmICJ0cmVwbGFj ZSB3aXRoIHJlcGxhY2UtZnVuY3Rpb24iCisgICAgICAgICAgIChlcXVhbD8gJyhzIGMgaCBl IG0gZSAgciBvIGMgayBzKQorICAgICAgICAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAo dHJlcGxhY2UgcmVwbGFjZS1mdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmNvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJygx IDIgMyA0IDUgNCByIG8gYyBrIHMpKSkpCisKKworICAocGFzcy1pZiAidHJlcGxhY2Ugd2l0 aCBndWlsZSBoYXNoLXRhYmxlIgorICAgICAgICAgICAoZXF1YWw/ICcocyBjIGggZSBtIGUg IHIgbyBjIGsgcykKKyAgICAgICAgICAgICAgICAgICAobGlzdC10cmFuc2R1Y2UgKHRyZXBs YWNlIGd1aWxlLWhhc2h0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmNvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJygxIDIgMyA0 IDUgNCByIG8gYyBrIHMpKSkpCisKKyAgKHBhc3MtaWYgInRyZXBsYWNlIHdpdGggc3JmaS02 OSBoYXNoLXRhYmxlIgorICAgICAgICAgICAoZXF1YWw/ICcocyBjIGggZSBtIGUgIHIgbyBj IGsgcykKKyAgICAgICAgICAgICAgICAgICAobGlzdC10cmFuc2R1Y2UgKHRyZXBsYWNlIHNy Zmk2OS1oYXNodGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJj b25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoMSAyIDMgNCA1IDQg ciBvIGMgayBzKSkpKQorCisgIChwYXNzLWlmICJ0cmVwbGFjZSB3aXRoIHJucnMgaGFzaC10 YWJsZSIKKyAgICAgICAgICAgKGVxdWFsPyAnKHMgYyBoIGUgbSBlICByIG8gYyBrIHMpCisg ICAgICAgICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0cmVwbGFjZSBybnJzLWhhc2h0 YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmNvbnMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJygxIDIgMyA0IDUgNCByIG8gYyBrIHMp KSkpCisKKyAgKHBhc3MtaWYgInR0YWtlIgorICAgICAgICAgICAoZXF1YWw/IDYgKGxpc3Qt dHJhbnNkdWNlICh0dGFrZSA0KSArIG51bWVyaWMtbGlzdCkpKQorCisgIChwYXNzLWlmICJ0 ZHJvcCIKKyAgICAgICAgICAgKGVxdWFsPyA3IChsaXN0LXRyYW5zZHVjZSAodGRyb3AgMykg KyBudW1lcmljLWxpc3QpKSkKKworICAocGFzcy1pZiAidGRyb3Atd2hpbGUiCisgICAgKGVx dWFsPyAnKDMgNCkKKyAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodGRyb3Atd2hpbGUg KGxhbWJkYSAoeCkgKDwgeCAzKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmNv bnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljLWxpc3QpKSkKKworICAo cGFzcy1pZiAidHRha2Utd2hpbGUiCisgICAgKGVxdWFsPyAnKDAgMSAyKQorICAgICAgICAg ICAgKGxpc3QtdHJhbnNkdWNlICh0dGFrZS13aGlsZSAobGFtYmRhICh4KSAoPCB4IDMpKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByY29ucworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG51bWVyaWMtbGlzdCkpKQorCisgIChwYXNzLWlmICJ0Y29uY2F0ZW5hdGUi CisgICAgKGVxdWFsPyAnKDAgMSAyIDMgNCkgKGxpc3QtdHJhbnNkdWNlIHRjb25jYXRlbmF0 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY29ucworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCgwIDEpICgyIDMpICg0 KSkpKSkKKworICAocGFzcy1pZiAidGFwcGVuZC1tYXAiCisgICAgKGVxdWFsPyAnKDEgMiAy IDQgMyA2KQorICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0YXBwZW5kLW1hcCAobGFt YmRhICh4KSAobGlzdCB4ICgqIHggMikpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICByY29ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoMSAyIDMpKSkpCisKKyAg KHBhc3MtaWYgInRkZWxldGUtbmVpZ2hib3ItZHVwbGljYXRlcyIKKyAgICAoZXF1YWw/ICco MSAyIDEgMiAzKQorICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0ZGVsZXRlLW5laWdo Ym9yLWR1cGxpY2F0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmNvbnMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnKDEgMSAxIDIgMiAxIDIgMyAzKSkpKQorCisg IChwYXNzLWlmICJ0ZGVsZXRlLW5laWdoYm9yLWR1cGxpY2F0ZXMgd2l0aCBlcXVhbGl0eSBw cmVkaWNhdGUiCisgICAgKGVxdWFsPyAnKGEgYiBjICJoZWoiICJoZWoiKQorICAgICAgICAg ICAgKGxpc3QtdHJhbnNkdWNlICh0ZGVsZXRlLW5laWdoYm9yLWR1cGxpY2F0ZXMgZXE/KQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjb25zCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxpc3QgJ2EgJ2EgJ2IgJ2MgJ2MgImhlaiIgKHN0cmluZyAjXGggI1xlICNc aikpKSkpCisKKyAgKHBhc3MtaWYgInRkZWxldGUtZHVwbGljYXRlcyIKKyAgICAoZXF1YWw/ ICcoMSAyIDMgNCkKKyAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodGRlbGV0ZS1kdXBs aWNhdGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjb25zCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJygxIDEgMiAxIDIgMyAzIDEgMiAzIDQpKSkpCisKKyAgKHBh c3MtaWYgInRkZWxldGUtZHVwbGljYXRlcyB3aXRoIHByZWRpY2F0ZSIKKyAgICAoZXF1YWw/ ICcoImhlaiIgImhvcHAiKQorICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0ZGVsZXRl LWR1cGxpY2F0ZXMgc3RyaW5nLWNpPT8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmNvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAiaGVqIiAiSEVKIiAi aG9wcCIgIkhPUFAiICJoZUoiKSkpKQorCisgIChwYXNzLWlmICJ0ZmxhdHRlbiIKKyAgICAo ZXF1YWw/ICcoMSAyIDMgNCA1IDYgNyA4IDkpCisgICAgICAgICAgICAobGlzdC10cmFuc2R1 Y2UgdGZsYXR0ZW4gcmNvbnMgJygoMSAyKSAzICg0ICg1IDYpIDcpIDggKDkpKSkpKQorCisg IChwYXNzLWlmICJ0cGFydGl0aW9uIgorICAgIChlcXVhbD8gJygoMSAxIDEgMSkgKDIgMiAy IDIpICgzIDMgMykgKDQgNCA0IDQpKQorICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0 cGFydGl0aW9uIGV2ZW4/KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjb25zCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJygxIDEgMSAxIDIgMiAyIDIgMyAzIDMgNCA0 IDQgNCkpKSkKKworICAocGFzcy1pZiAidHNlZ21lbnQiCisgICAgKGVxdWFsPyAnKCgwIDEp ICgyIDMpICg0KSkKKyAgICAgICAgICAgICh2ZWN0b3ItdHJhbnNkdWNlICh0c2VnbWVudCAy KSByY29ucyBudW1lcmljLXZlYykpKQorCisgIChwYXNzLWlmICJ0YWRkLWJldHdlZW4iCisg ICAgKGVxdWFsPyAnKDAgYW5kIDEgYW5kIDIgYW5kIDMgYW5kIDQpCisgICAgICAgICAgICAo bGlzdC10cmFuc2R1Y2UgKHRhZGQtYmV0d2VlbiAnYW5kKSByY29ucyBudW1lcmljLWxpc3Qp KSkKKworICAocGFzcy1pZiAidGVudW1lcmF0ZSIKKyAgICAoZXF1YWw/ICcoKC0xIC4gMCkg KDAgLiAxKSAoMSAuIDIpICgyIC4gMykgKDMgLiA0KSkKKyAgICAgICAgICAgIChsaXN0LXRy YW5zZHVjZSAodGVudW1lcmF0ZSAoLSAxKSkgcmNvbnMgbnVtZXJpYy1saXN0KSkpCisKKyAg KHBhc3MtaWYgInRiYXRjaCIKKyAgICAoZXF1YWw/CisgICAgICAgICAgICAnKCgwIDEpICgy IDMpICg0KSkKKyAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodGJhdGNoICh0dGFrZSAy KSByY29ucykgcmNvbnMgbnVtZXJpYy1saXN0KSkpCisKKyAgKHBhc3MtaWYgInRmb2xkIgor ICAgICAgICAgICAoZXF1YWw/CisgICAgICAgICAgICAnKDAgMSAzIDYgMTApCisgICAgICAg ICAgICAobGlzdC10cmFuc2R1Y2UgKHRmb2xkICspIHJjb25zIG51bWVyaWMtbGlzdCkpKSkK KworCisod2l0aC10ZXN0LXByZWZpeCAieC10cmFuc2R1Y2UiCisgIChwYXNzLWlmICJsaXN0 LXRyYW5zZHVjZSIgCisgICAgICAgICAgIChlcXVhbD8gMTUgKGxpc3QtdHJhbnNkdWNlICh0 bWFwIGFkZDEpICsgbnVtZXJpYy1saXN0KSkpCisKKyAgKHBhc3MtaWYgImxpc3QtdHJhbnNk dWNlIHdpdGggaWRlbnRpdHkiCisgICAgICAgICAgIChlcXVhbD8gMTUgKGxpc3QtdHJhbnNk dWNlICh0bWFwIGFkZDEpICsgMCBudW1lcmljLWxpc3QpKSkKKworICAocGFzcy1pZiAidmVj dG9yLXRyYW5zZHVjZSIKKyAgICAgICAgICAgKGVxdWFsPyAxNSAodmVjdG9yLXRyYW5zZHVj ZSAodG1hcCBhZGQxKSArIG51bWVyaWMtdmVjKSkpCisKKyAgKHBhc3MtaWYgInZlY3Rvci10 cmFuc2R1Y2Ugd2l0aCBpZGVudGl0eSIKKyAgICAoZXF1YWw/IDE1CisgICAgICAgICAgICAo dmVjdG9yLXRyYW5zZHVjZSAodG1hcCBhZGQxKSArIDAgbnVtZXJpYy12ZWMpKSkKKworICAo cGFzcy1pZiAicG9ydC10cmFuc2R1Y2UiIChwb3J0LXRyYW5zZHVjZS10ZXN0KSkKKyAgKHBh c3MtaWYgInBvcnQtdHJhbnNkdWNlIHdpdGggaWRlbnRpdHkiIChwb3J0LXRyYW5zZHVjZS13 aXRoLWlkZW50aXR5LXRlc3QpKQorCisgIDs7IENvbnZlcnRzIGVhY2ggbnVtZXJpYyBjaGFy IHRvIGl0J3MgY29ycmVzcG9uZGluZyBpbnRlZ2VyICBhbmQgc3VtcyB0aGVtLgorICAocGFz cy1pZiAic3RyaW5nLXRyYW5zZHVjZSIgCisgICAgKGVxdWFsPworICAgICAxNQorICAgICAo c3RyaW5nLXRyYW5zZHVjZSAodG1hcCAobGFtYmRhICh4KSAoLSAoY2hhci0+aW50ZWdlciB4 KSA0NykpKSArICIwMTIzNCIpKSkKKworICAocGFzcy1pZiAic3RyaW5nLXRyYW5zZHVjZSB3 aXRoIGlkZW50aXR5IiAKKyAgICAoZXF1YWw/CisgICAgIDE1CisgICAgIChzdHJpbmctdHJh bnNkdWNlICAodG1hcCAobGFtYmRhICh4KSAoLSAoY2hhci0+aW50ZWdlciB4KSA0NykpKQor ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgMAor ICAgICAgICAgICAgICAgICAgICAgICAgIjAxMjM0IikpKQorCisgIChwYXNzLWlmICJnZW5l cmF0b3ItdHJhbnNkdWNlIiAKKyAgICAoZXF1YWw/CisgICAgICcoMSAyIDMpCisgICAgIChw YXJhbWV0ZXJpemUgKChjdXJyZW50LWlucHV0LXBvcnQgKG9wZW4taW5wdXQtc3RyaW5nICIx IDIgMyIpKSkKKyAgICAgICAoZ2VuZXJhdG9yLXRyYW5zZHVjZSAodG1hcCAobGFtYmRhICh4 KSB4KSkgcmNvbnMgcmVhZCkpKSkKKworICAocGFzcy1pZiAiZ2VuZXJhdG9yLXRyYW5zZHVj ZSB3aXRoIGlkZW50aXR5IiAKKyAgICAoZXF1YWw/CisgICAgICcoMSAyIDMpCisgICAgIChw YXJhbWV0ZXJpemUgKChjdXJyZW50LWlucHV0LXBvcnQgKG9wZW4taW5wdXQtc3RyaW5nICIx IDIgMyIpKSkKKyAgICAgICAoZ2VuZXJhdG9yLXRyYW5zZHVjZSAodG1hcCAobGFtYmRhICh4 KSB4KSkgcmNvbnMgJygpIHJlYWQpKSkpCisKKyAgKHBhc3MtaWYgImJ5dGV2ZWN0b3ItdTgt dHJhbnNkdWNlIiAKKyAgICAoZXF1YWw/IDE1IChieXRldmVjdG9yLXU4LXRyYW5zZHVjZSAo dG1hcCBhZGQxKSArIGJ2KSkpCisKKyAgKHBhc3MtaWYgImJ5dGV2ZWN0b3ItdTgtdHJhbnNk dWNlIHdpdGggaWRlbnRpdHkiIAorICAgIChlcXVhbD8gMTUgKGJ5dGV2ZWN0b3ItdTgtdHJh bnNkdWNlICh0bWFwIGFkZDEpICsgMCBidikpKSkKLS0gCjIuMjUuMAoK --d04c7496f0e44060a020e8f82edf4e96--