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: Thu, 16 Jan 2020 20:52:33 +0100 Message-ID: References: <87mub2ywcc.fsf@pobox.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------18B8D087CD8B459B03C02E3C" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="63910"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 Cc: guile-devel To: Andy Wingo Original-X-From: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Thu Jan 16 20:53:04 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 1isBCS-000GSx-6t for guile-devel@m.gmane-mx.org; Thu, 16 Jan 2020 20:53:04 +0100 Original-Received: from localhost ([::1]:47756 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1isBCR-00069N-8b for guile-devel@m.gmane-mx.org; Thu, 16 Jan 2020 14:53:03 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:51889) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1isBC8-00067e-Bw for guile-devel@gnu.org; Thu, 16 Jan 2020 14:52:50 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1isBC1-00062v-Ol for guile-devel@gnu.org; Thu, 16 Jan 2020 14:52:44 -0500 Original-Received: from wout1-smtp.messagingengine.com ([64.147.123.24]:53623) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1isBC0-00061H-W4 for guile-devel@gnu.org; Thu, 16 Jan 2020 14:52:37 -0500 Original-Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.west.internal (Postfix) with ESMTP id 85D4D608; Thu, 16 Jan 2020 14:52:35 -0500 (EST) Original-Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Thu, 16 Jan 2020 14:52:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=veryfast.biz; h= subject:to:cc:references:from:message-id:date:mime-version :in-reply-to:content-type; s=fm1; bh=l2Fu1ngeeeXoFpZ+xCXNufDeQrb Mo7DFk/sFJ+n/6uk=; b=HIow7wZcutBUR2JR7BsbEJu2wUicMJlIOeMItYWHZ2b QpK2cNv89DgutYOGKOMd0MpCCt9rQFXyQEF0fFMqiKqRXqWU8AAyzY43mU4BqVTs 5DGJ0gJ3+HPTpwannVoyrcVvXZdCd3dQ2kn20kTeciPXprNTU+ekQNE3hKVMINAJ pGXiQFQ5kBPoqT2LY52G5DXEqWLEFE/SOZekyvaEmrUMAE/w3mHS9B5eEkZLYvzN hNeN8+ZwQ570fZPgQ8R4atzG2TIMRynA9MZBTeHoOciwAh2u/5XmpaVGhvs2eHEb VfqvCxOLbfFDPWHORzmvDS8beGccDhnbp26GkmipIFA== 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=fm1; bh=l2Fu1n geeeXoFpZ+xCXNufDeQrbMo7DFk/sFJ+n/6uk=; b=tIuhaAsy4lv6T81gp+eZe2 6GjNYmp3ISTwwhnpo6kceAOkxIHmSSQkgqhu2UbmZA7c9JuAZq3lhg+bztSWc/kz yn8DpRQvkgRW6l98RDHCnns51a6uIzn1mhYmP49hCSABWde1UJa9AAR1BIzNDMVz NqWBNwh9XVtpE3q6ECZqA4qzfBlQqQed1VQj+vd25996tf/fcSVY+GGhgwaPXPWR ++SZgSp7ZBnh3WY+dGwANTuhTI2Lzev+5TQW7OMvDUI7KtNinzMsJr39yQ84PD5n XOkvinUw862QP69NrQRgooeoKBHwMAvo3QLGC/7cBiX0m0DfTuQtQc5FQc7G4Btw == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrtdehgdduvdekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepuffvfhfhkffffgggjggtsehmtderredtfeejnecuhfhrohhmpefnihhnuhhs pgeujhpnrhhnshhtrghmuceolhhinhhushdrsghjohhrnhhsthgrmhesvhgvrhihfhgrsh htrdgsihiiqeenucffohhmrghinhepshgthhgvmhgvrhhsrdhorhhgpdhgnhhurdhorhhg necukfhppedukeehrdeihedrudefhedrvdefvdenucfrrghrrghmpehmrghilhhfrhhomh eplhhinhhushdrsghjohhrnhhsthgrmhesvhgvrhihfhgrshhtrdgsihiinecuvehluhhs thgvrhfuihiivgeptd X-ME-Proxy: Original-Received: from Linuss-iMac.local (unknown [185.65.135.232]) by mail.messagingengine.com (Postfix) with ESMTPA id 312A130607BE; Thu, 16 Jan 2020 14:52:34 -0500 (EST) In-Reply-To: <87mub2ywcc.fsf@pobox.com> Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 64.147.123.24 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:20287 Archived-At: This is a multi-part message in MIME format. --------------18B8D087CD8B459B03C02E3C Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit I have addressed all your feedback and present to you the revised patch. Some small code changes compared to the other patch. Most significantly, tsegment and tpartition have gotten paranoid about the downstream reducer managing to sneak a reduced value through (with no performance impact, mind you). Apart from that, some docstrings were added where it seemed sane, some accidental code duplication between (srfi srfi-171) and (srfi srfi-171 meta) was fixed. The only thing I am scared of is thunderbird accidentally sending this mail as HTML and maybe getting the commit message formatting wrong. Best regards Linus Björnstam On 2020-01-05 12:30, Andy Wingo wrote: > Hi :) > > Since this is a final SRFI I think there's no problem getting it in. > Some formatting notes follow; since it's your first Guile patch I'm a > bit verbose :) Probably this will miss 3.0.0 but make 3.0.1, FWIW. > > On Sun 22 Dec 2019 15:55, Linus Björnstam writes: > >> From 7e8d3b22ba5f814c40dbb5ab616a318c0cdc2f3e Mon Sep 17 00:00:00 2001 >> From: =?UTF-8?q?Linus=20Bj=C3=B6rnstam?= >> Date: Sun, 22 Dec 2019 15:38:34 +0100 >> Subject: [PATCH 1/2] Added srfi-171 to guile under the module name (srfi >> srfi-171). >> >> For more info, read the SRFI document: https://srfi.schemers.org/srfi-171/srfi-171.html > Needs a note per-file; see other commit log messages. Also please wrap > to 72 characters. > >> --- /dev/null >> +++ b/module/srfi/srfi-171.scm >> @@ -0,0 +1,498 @@ >> +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; >> +;; Copyright 2019 Linus Bj.rnstam >> +;; > I think you've assigned copyright so this can have the standard Guile > copyright block, right? > >> +;; This module name is guile-specific. The correct module name is of course >> +;; (srfi 171) > I don't think it's right to say there is a "correct" name. R6RS, R7RS, > and Guile have different naming conventions for SRFI modules and that's > OK. > > The style in Guile is generally that block comments like this should be > complete sentences, starting with capital letters and including > terminating punctuation. Generally we do two spaces after periods, > also. > >> +(define-module (srfi srfi-171) >> + #:declarative? #t >> + #:use-module (srfi srfi-9) >> + #:use-module ((srfi srfi-43) >> + #:select (vector->list)) >> + #:use-module ((srfi srfi-69) #:prefix srfi69:) >> + #:use-module ((rnrs hashtables) #:prefix rnrs:) >> + #:use-module (srfi srfi-171 meta) >> + #:export (rcons reverse-rcons >> + rcount >> + rany > Better to put rcons on its own line so that other exports are also > aligned with the open paren. > >> +;; A special value to be used as a placeholder where no value has been set and #f >> +;; doesn't cut it. Not exported. >> + >> +(define-record-type >> + (make-nothing) >> + nothing?) >> +(define nothing (make-nothing)) > Note that this can be somewhat cheaper as: > > (define nothing (list 'nothing)) > (define (nothing? x) (eq? x nothing)) > >> +;; helper function which ensures x is reduced. > Capitalize. FWIW, better done as a docstring: > > (define (ensure-reduced x) > "Ensure that @var{x} is reduced." > ...) > >> +;; helper function that wraps a reduced value twice since reducing functions (like list-reduce) >> +;; unwraps them. tconcatenate is a good example: it re-uses it's reducer on it's input using list-reduce. >> +;; If that reduction finishes early and returns a reduced value, list-reduce would "unreduce" >> +;; that value and try to continue the transducing process. > Capitalize and limit to 80 characters wide. > >> +(define (preserving-reduced f) >> + (lambda (a b) >> + (let ((return (f a b))) >> + (if (reduced? return) >> + (reduced return) >> + return)))) >> + >> + >> + >> + > Generally, put one blank line between functions. Two lines can be > between sections. Four is too much :) > >> +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; >> +;; Reducing functions meant to be used at the end at the transducing >> +;; process. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > This is a fairly non-standard comment style, FWIW; consider just > prefixing with ";;;". > >> +;; a transducer-friendly cons with the empty list as identity >> +(define rcons >> + (case-lambda > Similar comment regarding docstrings > >> +;; Use this as the f in transduce to count the amount of elements passed through. >> +;; (transduce (tfilter odd?) tcount (list 1 2 3)) => 2 > 80 characters, and the example can go in an @example if you like: > > (define rcount > (case-lambda > "A transducer that counts the number of elements passing through. \ > @example > (transduce (tfilter odd?) tcount (list 1 2 3)) @result{} 2 > @end example" > ...)) > >> +(define (make-replacer map) >> + (cond >> + ((list? map) >> + (lambda (x) >> + (let ((replacer? (assoc x map))) >> + (if replacer? >> + (cdr replacer?) >> + x)))) > I generally find this sort of thing better with (ice-9 match): > > (match (assoc x map) > ((x . replacer) replacer) > (#f x)) > >> +;; Flattens everything and passes each value through the reducer >> +;; (list-transduce tflatten conj (list 1 2 (list 3 4 '(5 6) 7 8))) => (1 2 3 4 5 6 7 8) > 80 chars > >> +;; I am not sure about the correctness of this. It seems to work. >> +;; we could maybe make it faster? >> +(define (tpartition f) > How could you know about the correctness? Probably a good idea to do > what it takes to be sure and then remove the comment. Regarding speed, > I would remove the comment, if it's slow then people can work on it. > > Note that in general comments shouldn't be from a first-person > perspective, because the code will be maintained as part of Guile, not > necessarily by the author. > >> diff --git a/module/srfi/srfi-171/gnu.scm b/module/srfi/srfi-171/gnu.scm >> new file mode 100644 >> index 000000000..9aa8ab28e >> --- /dev/null >> +++ b/module/srfi/srfi-171/gnu.scm >> @@ -0,0 +1,49 @@ >> +(define-module (srfi srfi-171 gnu) > Needs a copyright header > >> diff --git a/module/srfi/srfi-171/meta.scm b/module/srfi/srfi-171/meta.scm >> new file mode 100644 >> index 000000000..dd1fd06c4 >> --- /dev/null >> +++ b/module/srfi/srfi-171/meta.scm >> @@ -0,0 +1,115 @@ >> +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; >> +;; Copyright 2019 Linus Bj.rnstam > Probably should be a Guile copyright header >> diff --git a/test-suite/tests/srfi-171.test b/test-suite/tests/srfi-171.test >> new file mode 100644 >> index 000000000..c6d574af2 >> --- /dev/null >> +++ 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 >> + >> +(define-module (test-srfi-171) > Needs a copyright header > >> From 39be4808f5921a716916de6f4db03990412f2518 Mon Sep 17 00:00:00 2001 >> From: =?UTF-8?q?Linus=20Bj=C3=B6rnstam?= >> Date: Sun, 22 Dec 2019 15:39:35 +0100 >> Subject: [PATCH 2/2] Added documentation and tests for srfi-171. >> >> * doc/ref/srfi-modules.texi - Adapted and added the srfi document to the >> guile srfi documentation >> * module/Makefile.am - Added the srfi files for compilation >> * test-suite/Makefile.am - Added the srfi-171.test to the test suite. > Thanks for the per-file notes :) > > FWIW the general format would be like: > > * doc/ref/srfi-modules.texi: > * module/Makefile.am (SOURCES): > * test-suite/Makefile.am (SCM_TESTS): Add srfi-171. > > I.e. colons after the file, and the changed function or variable in > parens, and then the tense is present: it describes the change. See > https://www.gnu.org/prep/standards/html_node/Change-Logs.html (though we > adapt it for Git). > >> +@node SRFI-171 >> +@subsection Transducers >> +@cindex SRFI-171 >> +@cindex transducers >> + >> +Some of the most common operations used in the Scheme language are those transforming lists: map, filter, take and so on. They work well, are well understood, and are used daily by most Scheme programmers. They are however not general because they only work on lists, and they do not compose very well since combining N of them builds @code{(- N 1)} intermediate lists. > Limit to 80 chars please. In Emacs you'd do M-q to do this. > >> +@itemize @bullet > Probably you can leave off @bullet. > >> +@example >> +(list-transduce >> + (tmap (lambda (x) (+ x 1))) >> + (revery (lambda (v) (if (odd? v) v #f))) >> + (list 2 4 6)) @result{} 7 >> + >> + >> +(list-transduce (tmap (lambda (x) (+ x 1)) (revery odd?) (list 2 4 5 6)) @result{} #f >> +@end example > Probably better style to have just one empty line. I would also break > the last line. > > Cheers, > > Andy -- - Linus Björnstam --------------18B8D087CD8B459B03C02E3C Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0001-Add-SRFI-171-transducers-to-guile.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Add-SRFI-171-transducers-to-guile.patch" RnJvbSBjMzgyZDc4MDhhOGQ0MWNkNGU5ZWY4YTE3YjdiYTk1NTM4MzU0OTliIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/TGludXM9MjBCaj1DMz1CNnJuc3Rh bT89IDxsaW51cy5iam9ybnN0YW1AZmFzdG1haWwuc2U+CkRhdGU6IFRodSwgMTYgSmFuIDIw MjAgMjA6MzE6NDUgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBZGQgU1JGSS0xNzEgKHRyYW5z ZHVjZXJzKSB0byBndWlsZS4KClRoZSB0d28gZ3VpbGUtc3BlY2lmaWMgYWRkaXRpb25zIGFy ZSBwb3dlcmZ1bCB0cmFuc2R1Y2VycyB3aGljaCBjYW4gYmUKdXNlZCB0byBnZW5lcmFsaXpl IHRyYW5zZHVjZXJzIGxpa2UgdHNlZ21lbnQuIFRoZXkgYXJlIGhhcmQgdG8gZ2V0CnJpZ2h0 LCBidXQgcG93ZXJmdWwgYW5kIHVzZWZ1bCBlbm91Z2ggdG8gd2FycmFudCBpbmNsdXNpb24u CgogKiBkb2MvcmVmL3NyZmktbW9kdWxlcy50ZXhpOiBhZGRlZCBzcmZpLTE3MSBzZWN0aW9u CiAqIG1vZHVsZS9NYWtlZmlsZS5hbSAoU09VUkNFUyk6CiAqIG1vZHVsZS9zcmZpL3NyZmkt MTcxLnNjbToKICogbW9kdWxlL3NyZmkvc3JmaS0xNzEvbWV0YS5zY206IEFkZCBTUkZJLTE3 MQogKiBtb2R1bGUvc3JmaS9zcmZpLTE3MS9nbnUuc2NtOiBBZGQgMiBndWlsZS1zcGVjaWZp YyBleHRlbnNpb25zLgogKiB0ZXN0LXN1aXRlL01ha2VmaWxlLmFtIChTQ01fVEVTVFMpOgog KiB0ZXN0LXN1aXRlL3Rlc3RzL3NyZmktMTcxLnRlc3Q6IEFkZCB0ZXN0cy4KLS0tCiBkb2Mv cmVmL3NyZmktbW9kdWxlcy50ZXhpICAgICAgfCA1MTggKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiBtb2R1bGUvTWFrZWZpbGUuYW0gICAgICAgICAgICAgfCAgIDMgKwog bW9kdWxlL3NyZmkvc3JmaS0xNzEuc2NtICAgICAgIHwgNDU4ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiBtb2R1bGUvc3JmaS9zcmZpLTE3MS9nbnUuc2NtICAgfCAgNjUgKysr KysKIG1vZHVsZS9zcmZpL3NyZmktMTcxL21ldGEuc2NtICB8IDExMyArKysrKysrCiB0ZXN0 LXN1aXRlL01ha2VmaWxlLmFtICAgICAgICAgfCAgIDEgKwogdGVzdC1zdWl0ZS90ZXN0cy9z cmZpLTE3MS50ZXN0IHwgMTk1ICsrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgMTM1 MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbW9kdWxlL3NyZmkvc3JmaS0x NzEuc2NtCiBjcmVhdGUgbW9kZSAxMDA2NDQgbW9kdWxlL3NyZmkvc3JmaS0xNzEvZ251LnNj bQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1vZHVsZS9zcmZpL3NyZmktMTcxL21ldGEuc2NtCiBj cmVhdGUgbW9kZSAxMDA2NDQgdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTE3MS50ZXN0CgpkaWZm IC0tZ2l0IGEvZG9jL3JlZi9zcmZpLW1vZHVsZXMudGV4aSBiL2RvYy9yZWYvc3JmaS1tb2R1 bGVzLnRleGkKaW5kZXggOGY1YjY0M2M2Li5mY2M0MjMxYTcgMTAwNjQ0Ci0tLSBhL2RvYy9y ZWYvc3JmaS1tb2R1bGVzLnRleGkKKysrIGIvZG9jL3JlZi9zcmZpLW1vZHVsZXMudGV4aQpA QCAtNjQsNiArNjQsNyBAQCBnZXQgdGhlIHJlbGV2YW50IFNSRkkgZG9jdW1lbnRzIGZyb20g dGhlIFNSRkkgaG9tZSBwYWdlCiAqIFNSRkktOTg6OiAgICAgICAgICAgICAgICAgICAgIEFj Y2Vzc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAqIFNSRkktMTA1OjogICAgICAgICAg ICAgICAgICAgIEN1cmx5LWluZml4IGV4cHJlc3Npb25zLgogKiBTUkZJLTExMTo6ICAgICAg ICAgICAgICAgICAgICBCb3hlcy4KKyogU1JGSS0xNzE6OiAgICAgICAgICAgICAgICAgICAg VHJhbnNkdWNlcnMKIEBlbmQgbWVudQogCiAKQEAgLTU2MDIsNiArNTYwMyw1MjMgQEAgUmV0 dXJuIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIEB2YXJ7Ym94fS4KIFNldCB0aGUgY29udGVu dHMgb2YgQHZhcntib3h9IHRvIEB2YXJ7dmFsdWV9LgogQGVuZCBkZWZmbgogCitAbm9kZSBT UkZJLTE3MQorQHN1YnNlY3Rpb24gVHJhbnNkdWNlcnMKK0BjaW5kZXggU1JGSS0xNzEKK0Bj aW5kZXggdHJhbnNkdWNlcnMKKworU29tZSBvZiB0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9u cyB1c2VkIGluIHRoZSBTY2hlbWUgbGFuZ3VhZ2UgYXJlIHRob3NlCit0cmFuc2Zvcm1pbmcg bGlzdHM6IG1hcCwgZmlsdGVyLCB0YWtlIGFuZCBzbyBvbi4gVGhleSB3b3JrIHdlbGwsIGFy ZSB3ZWxsCit1bmRlcnN0b29kLCBhbmQgYXJlIHVzZWQgZGFpbHkgYnkgbW9zdCBTY2hlbWUg cHJvZ3JhbW1lcnMuIFRoZXkgYXJlIGhvd2V2ZXIgbm90CitnZW5lcmFsIGJlY2F1c2UgdGhl eSBvbmx5IHdvcmsgb24gbGlzdHMsIGFuZCB0aGV5IGRvIG5vdCBjb21wb3NlIHZlcnkgd2Vs bAorc2luY2UgY29tYmluaW5nIE4gb2YgdGhlbSBidWlsZHMgQGNvZGV7KC0gTiAxKX0gaW50 ZXJtZWRpYXRlIGxpc3RzLgorCitUcmFuc2R1Y2VycyBhcmUgb2JsaXZpb3VzIHRvIHdoYXQg a2luZCBvZiBwcm9jZXNzIHRoZXkgYXJlIHVzZWQgaW4sIGFuZAorYXJlIGNvbXBvc2FibGUg d2l0aG91dCBidWlsZGluZyBpbnRlcm1lZGlhdGUgY29sbGVjdGlvbnMuIFRoaXMgbWVhbnMg d2UKK2NhbiBjcmVhdGUgYSB0cmFuc2R1Y2VyIHRoYXQgc3F1YXJlcyBhbGwgZXZlbiBudW1i ZXJzOiBAY29kZXsoY29tcG9zZQorKHRmaWx0ZXIgb2RkPykgKHRtYXAgKGxhbWJkYSAoeCkg KCogeCB4KSkpKX0gYW5kIHJldXNlIGl0IHdpdGggbGlzdHMsCit2ZWN0b3JzLCBvciBpbiBq dXN0IGFib3V0IGFueSBjb250ZXh0IHdoZXJlIGRhdGEgZmxvd3MgaW4gb25lIGRpcmVjdGlv bi4KK1dlIGNvdWxkIHVzZSBpdCBhcyBhIHByb2Nlc3Npbmcgc3RlcCBmb3IgYXN5bmNocm9u b3VzIGNoYW5uZWxzLCB3aXRoIGFuCitldmVudCBmcmFtZXdvcmsgYXMgYSBwcmUtcHJvY2Vz c2luZyBzdGVwLCBvciBldmVuIGluIGxhenkgY29udGV4dHMgd2hlcmUKK3lvdSBwYXNzIGEg bGF6eSBjb2xsZWN0aW9uIGFuZCBhIHRyYW5zZHVjZXIgdG8gYSBmdW5jdGlvbiBhbmQgZ2V0 IGEgbmV3CitsYXp5IGNvbGxlY3Rpb24gYmFjay4KKworVGhlIHRyYWRpdGlvbmFsIFNjaGVt ZSBhcHByb2FjaCBvZiBoYXZpbmcgY29sbGVjdGlvbi1zcGVjaWZpYyBwcm9jZWR1cmVzCitp cyBub3QgY2hhbmdlZC4gV2UgaW5zdGVhZCBzcGVjaWZ5IGEgZ2VuZXJhbCBmb3JtIG9mIHRy YW5zZm9ybWF0aW9ucwordGhhdCBjb21wbGVtZW50IHRoZXNlIHByb2NlZHVyZXMuIFRoZSBi ZW5lZml0cyBhcmUgb2J2aW91czogYSBjbGVhciwKK3dlbGwtdW5kZXJzdG9vZCB3YXkgb2Yg ZGVzY3JpYmluZyBjb21tb24gdHJhbnNmb3JtYXRpb25zIGluIGEgd2F5IHRoYXQKK2lzIGZh c3RlciB0aGFuIGp1c3QgY2hhaW5pbmcgdGhlIGNvbGxlY3Rpb24tc3BlY2lmaWMgY291bnRl cnBhcnRzLiBGb3IKK2d1aWxlIGluIHBhcnRpY3VsYXIgdGhpcyBtZWFucyBhIGxvdCBiZXR0 ZXIgR0MgcGVyZm9ybWFuY2UuCisKK05vdGljZSBob3dldmVyIHRoYXQgQGNvZGV7KGNvbXBv c2UgQGRvdHN7fSl9IGNvbXBvc2VzIHRyYW5zZHVjZXJzCitsZWZ0LXRvLXJpZ2h0LCBkdWUg dG8gaG93IHRyYW5zZHVjZXJzIGFyZSBpbml0aWF0ZWQuCisKK0BtZW51CisqIFNSRkktMTcx IEdlbmVyYWwgRGlzY3Vzc2lvbjo6ICAgICAgIEdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQg dHJhbnNkdWNlcnMKKyogU1JGSS0xNzEgQXBwbHlpbmcgVHJhbnNkdWNlcnM6OiAgICAgRG9j dW1lbnRhdGlvbiBvZiBjb2xsZWN0aW9uLXNwZWNpZmljIGZvcm1zCisqIFNSRkktMTcxIFJl ZHVjZXJzOjogICAgICAgICAgICAgICAgIFJlZHVjZXJzIHNwZWNpZmllZCBieSB0aGUgU1JG SQorKiBTUkZJLTE3MSBUcmFuc2R1Y2Vyczo6ICAgICAgICAgICAgICBUcmFuc2R1Y2VycyBz cGVjaWZpZWQgYnkgdGhlIFNSRkkKKyogU1JGSS0xNzEgSGVscGVyczo6ICAgICAgICAgICAg ICAgICAgVXRpbGl0aWVzIGZvciB3cml0aW5nIHlvdXIgb3duIHRyYW5zZHVjZXJzCitAZW5k IG1lbnUKKworQG5vZGUgU1JGSS0xNzEgR2VuZXJhbCBEaXNjdXNzaW9uCitAc3Vic3Vic2Vj dGlvbiBTUkZJLTE3MSBHZW5lcmFsIERpc2N1c3Npb24KK0BjaW5kZXggdHJhbnNkdWNlcnMg ZGlzY3Vzc2lvbgorCitAc3ViaGVhZGluZyBUaGUgY29uY2VwdCBvZiByZWR1Y2VycworVGhl IGNlbnRyYWwgcGFydCBvZiB0cmFuc2R1Y2VycyBhcmUgMy1hcml0eSByZWR1Y2luZyBmdW5j dGlvbnMuCisKK0BpdGVtaXplCitAaXRlbQorKCk6IFByb2R1Y2UgYW4gaWRlbnRpdHkKKwor QGl0ZW0KKyhyZXN1bHQtc28tZmFyKTogY29tcGxldGlvbi4gSWYgeW91IGhhdmUgbm90aGlu ZyB0byBkbywgdGhlbiBqdXN0IHJldHVybgordGhlIHJlc3VsdCBzbyBmYXIKKworQGl0ZW0K KyhyZXN1bHQtc28tZmFyIGlucHV0KSBkbyB3aGF0ZXZlciB5b3UgbGlrZSB0byB0aGUgaW5w dXQgYW5kIHByb2R1Y2UgYQorbmV3IHJlc3VsdC1zby1mYXIKK0BlbmQgaXRlbWl6ZQorCitJ biB0aGUgY2FzZSBvZiBhIHN1bW1pbmcgQGNvZGV7K30gcmVkdWNlciwgdGhlIHJlZHVjZXIg d291bGQgcHJvZHVjZSwgaW4KK2FyaXR5IG9yZGVyOiBAY29kZXswfSwgQGNvZGV7cmVzdWx0 LXNvLWZhcn0sIEBjb2RleygrIHJlc3VsdC1zby1mYXIKK2lucHV0KX0uIFRoaXMgaGFwcGVu cyB0byBiZSBleGFjdGx5IHdoYXQgdGhlIHJlZ3VsYXIgQGNvZGV7K30gZG9lcy4KKworQHN1 YmhlYWRpbmcgVGhlIGNvbmNlcHQgb2YgdHJhbnNkdWNlcnMKKworQSB0cmFuc2R1Y2VyIGlz IGEgb25lLWFyaXR5IGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSByZWR1Y2VyIGFuZCBwcm9kdWNl cyBhCityZWR1Y2luZyBmdW5jdGlvbiB0aGF0IGJlaGF2ZXMgYXMgZm9sbG93czoKKworQGl0 ZW1pemUKK0BpdGVtCisoKTogY2FsbHMgcmVkdWNlciB3aXRoIG5vIGFyZ3VtZW50cyAocHJv ZHVjaW5nIGl0cyBpZGVudGl0eSkKKworQGl0ZW0KKyhyZXN1bHQtc28tZmFyKTogTWF5YmUg dHJhbnNmb3JtIHRoZSByZXN1bHQtc28tZmFyIGFuZCBjYWxsIHJlZHVjZXIgd2l0aCBpdC4K KworQGl0ZW0KKyhyZXN1bHQtc28tZmFyIGlucHV0KSBNYXliZSBkbyBzb21ldGhpbmcgdG8g aW5wdXQgYW5kIG1heWJlIGNhbGwgdGhlCityZWR1Y2VyIHdpdGggcmVzdWx0LXNvLWZhciBh bmQgdGhlIG1heWJlLXRyYW5zZm9ybWVkIGlucHV0LgorQGVuZCBpdGVtaXplCisKK2Egc2lt cGxlIGV4YW1wbGUgaXMgYXMgZm9sbG93aW5nOiBAY29kZXsgKGxpc3QtdHJhbnNkdWNlICh0 ZmlsdGVyIG9kZD8pCisrICcoMSAyIDMgNCA1KSl9LiBUaGlzIGZpcnN0IHJldHVybnMgYSB0 cmFuc2R1Y2VyIGZpbHRlcmluZyBhbGwgb2RkCitlbGVtZW50cywgdGhlbiBpdCBydW5zIEBj b2Rleyt9IHdpdGhvdXQgYXJndW1lbnRzIHRvIHJldHJpZXZlIGl0cworaWRlbnRpdHkuIEl0 IHRoZW4gc3RhcnRzIHRoZSB0cmFuc2R1Y3Rpb24gYnkgcGFzc2luZyBAY29kZXsrfSB0byB0 aGUKK3RyYW5zZHVjZXIgcmV0dXJuZWQgYnkgQGNvZGV7KHRmaWx0ZXIgb2RkPyl9IHdoaWNo IHJldHVybnMgYSByZWR1Y2luZworZnVuY3Rpb24uIEl0IHdvcmtzIG5vdCB1bmxpa2UgcmVk dWNlIGZyb20gU1JGSSAxLCBidXQgYWxzbyBjaGVja3MKK3doZXRoZXIgb25lIG9mIHRoZSBp bnRlcm1lZGlhdGUgdHJhbnNkdWNlcnMgcmV0dXJucyBhICJyZWR1Y2VkIiB2YWx1ZQorKGlt cGxlbWVudGVkIGFzIGEgU1JGSSA5IHJlY29yZCksIHdoaWNoIG1lYW5zIHRoZSByZWR1Y3Rp b24gZmluaXNoZWQKK2Vhcmx5LgorCitCZWNhdXNlIHRyYW5zZHVjZXJzIGNvbXBvc2UgYW5k IHRoZSBmaW5hbCByZWR1Y3Rpb24gaXMgb25seSBleGVjdXRlZCBpbgordGhlIGxhc3Qgc3Rl cCwgY29tcG9zZWQgdHJhbnNkdWNlcnMgd2lsbCBub3QgYnVpbGQgYW55IGludGVybWVkaWF0 ZQorcmVzdWx0IG9yIGNvbGxlY3Rpb25zLiBBbHRob3VnaCB0aGUgbm9ybWFsIHdheSBvZiB0 aGlua2luZyBhYm91dAorYXBwbGljYXRpb24gb2YgY29tcG9zZWQgZnVuY3Rpb25zIGlzIHJp Z2h0IHRvIGxlZnQsIGR1ZSB0byBob3cgdGhlCit0cmFuc2R1Y3Rpb24gaXMgYnVpbHQgaXQg aXMgYXBwbGllZCBsZWZ0IHRvIHJpZ2h0LiBAY29kZXsoY29tcG9zZQorKHRmaWx0ZXIgb2Rk PykgKHRtYXAgc3FydCkpfSB3aWxsIGNyZWF0ZSBhIHRyYW5zZHVjZXIgdGhhdCBmaXJzdCBm aWx0ZXJzCitvdXQgYW55IG9kZCB2YWx1ZXMgYW5kIHRoZW4gY29tcHV0ZXMgdGhlIHNxdWFy ZSByb290IG9mIHRoZSByZXN0LgorCisKK0BzdWJoZWFkaW5nIFN0YXRlCisKKyBFdmVuIHRo b3VnaCB0cmFuc2R1Y2VycyBhcHBlYXIgdG8gYmUgc29tZXdoYXQgb2YgYSBnZW5lcmFsaXNh dGlvbiBvZgorIG1hcCBhbmQgZnJpZW5kcywgdGhpcyBpcyBub3QgcmVhbGx5IHRydWUuIFNp bmNlIHRyYW5zZHVjZXJzIGRvbid0IGtub3cKKyBpbiB3aGljaCBjb250ZXh0IHRoZXkgYXJl IGJlaW5nIHVzZWQsIHNvbWUgdHJhbnNkdWNlcnMgbXVzdCBrZWVwIHN0YXRlCisgd2hlcmUg dGhlaXIgY29sbGVjdGlvbi1zcGVjaWZpYyBjb3VudGVycGFydHMgZG8gbm90LiBUaGUgdHJh bnNkdWNlcnMKKyB0aGF0IGtlZXAgc3RhdGUgZG8gc28gdXNpbmcgaGlkZGVuIG11dGFibGUg c3RhdGUsIGFuZCBhcyBzdWNoIGFsbCB0aGUKKyBjYXZlYXRzIG9mIG11dGF0aW9uLCBwYXJh bGxlbGlzbSwgYW5kIG11bHRpLXNob3QgY29udGludWF0aW9ucyBhcHBseS4KKyBFYWNoIHRy YW5zZHVjZXIga2VlcGluZyBzdGF0ZSBpcyBjbGVhcmx5IGRlc2NyaWJlZCBhcyBkb2luZyBz byBpbiB0aGUKKyBkb2N1bWVudGF0aW9uLgorCitAc3ViaGVhZGluZyBOYW1pbmcKKworUmVk dWNlcnMgZXhwb3J0ZWQgZnJvbSB0aGUgdHJhbnNkdWNlcnMgbW9kdWxlIGFyZSBuYW1lZCBh cyBpbiB0aGVpcgorU1JGSS0xIGNvdW50ZXJwYXJ0LCBidXQgcHJlcGVuZGVkIHdpdGggYW4g ci4gVHJhbnNkdWNlcnMgYWxzbyBmb2xsb3cKK3RoYXQgbmFtaW5nLCBidXQgYXJlIHByZXBl bmRlZCB3aXRoIGEgdC4KKworCitAbm9kZSBTUkZJLTE3MSBBcHBseWluZyBUcmFuc2R1Y2Vy cworQHN1YnN1YnNlY3Rpb24gQXBwbHlpbmcgVHJhbnNkdWNlcnMKK0BjaW5kZXggdHJhbnNk dWNlcnMgYXBwbHlpbmcKKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBsaXN0LXRyYW5z ZHVjZSB4Zm9ybSBmIGxzdAorQGRlZmZueCB7U2NoZW1lIFByb2NlZHVyZX0gbGlzdC10cmFu c2R1Y2UgeGZvcm0gZiBpZGVudGl0eSBsc3QKKyBJbml0aWFsaXplcyB0aGUgdHJhbnNkdWNl ciBAY29kZXt4Zm9ybX0gYnkgcGFzc2luZyB0aGUgcmVkdWNlciBAY29kZXtmfQorIHRvIGl0 LiBJZiBubyBpZGVudGl0eSBpcyBwcm92aWRlZCwgQGNvZGV7Zn0gaXMgcnVuIHdpdGhvdXQg YXJndW1lbnRzIHRvCisgcmV0dXJuIHRoZSByZWR1Y2VyIGlkZW50aXR5LiBJdCB0aGVuIHJl ZHVjZXMgb3ZlciBAY29kZXtsc3R9IHVzaW5nIHRoZQorIGlkZW50aXR5IGFzIHRoZSBzZWVk LgorCitJZiBvbmUgb2YgdGhlIHRyYW5zZHVjZXJzIGZpbmlzaGVzIGVhcmx5IChzdWNoIGFz IEBjb2Rle3R0YWtlfSBvcgorQGNvZGV7dGRyb3B9KSwgaXQgY29tbXVuaWNhdGVzIHRoaXMg YnkgcmV0dXJuaW5nIGEgcmVkdWNlZCB2YWx1ZSwgd2hpY2gKK2luIHRoZSBzYW1wbGUgaW1w bGVtZW50YXRpb24gaXMganVzdCBhIHZhbHVlIHdyYXBwZWQgaW4gYSBTUkZJIDkgcmVjb3Jk Cit0eXBlIG5hbWVkICJyZWR1Y2VkIi4gSWYgc3VjaCBhIHZhbHVlIGlzIHJldHVybmVkIGJ5 IHRoZSB0cmFuc2R1Y2VyLAorQGNvZGV7bGlzdC10cmFuc2R1Y2V9IG11c3Qgc3RvcCBleGVj dXRpb24gYW5kIHJldHVybiBhbiB1bnJlZHVjZWQgdmFsdWUKK2ltbWVkaWF0ZWx5LgorQGVu ZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHZlY3Rvci10cmFuc2R1Y2Ug eGZvcm0gZiB2ZWMKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IHZlY3Rvci10cmFuc2R1 Y2UgeGZvcm0gZiBpZGVudGl0eSB2ZWMKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IHN0 cmluZy10cmFuc2R1Y2UgeGZvcm0gZiBzdHIKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9 IHN0cmluZy10cmFuc2R1Y2UgeGZvcm0gZiBpZGVudGl0eSBzdHIKK0BkZWZmbngge1NjaGVt ZSBQcm9jZWR1cmV9IGJ5dGV2ZWN0b3ItdTgtdHJhbnNkdWNlIHhmb3JtIGYgYnYKK0BkZWZm bngge1NjaGVtZSBQcm9jZWR1cmV9IGJ5dGV2ZWN0b3ItdTgtdHJhbnNkdWNlIHhmb3JtIGYg aWRlbnRpdHkgYnYKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IGdlbmVyYXRvci10cmFu c2R1Y2UgeGZvcm0gZiBnZW4KK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IGdlbmVyYXRv ci10cmFuc2R1Y2UgeGZvcm0gZiBpZGVudGl0eSBnZW4KKworU2FtZSBhcyBAY29kZXtsaXN0 LXRyYW5zZHVjZX0sIGJ1dCBmb3IgdmVjdG9ycywgc3RyaW5ncywgdTgtYnl0ZXZlY3RvcnMK K2FuZCBzcmZpLTE1OC1zdHlsZWQgZ2VuZXJhdG9ycyByZXNwZWN0aXZlbHkuCisKK0BlbmQg ZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBwb3J0LXRyYW5zZHVjZSB4Zm9y bSBmIHJlYWRlcgorQGRlZmZueCB7U2NoZW1lIFByb2NlZHVyZX0gcG9ydC10cmFuc2R1Y2Ug eGZvcm0gZiByZWFkZXIgcG9ydAorQGRlZmZueCB7U2NoZW1lIFByb2NlZHVyZX0gcG9ydC10 cmFuc2R1Y2UgeGZvcm0gZiBpZGVudGl0eSByZWFkZXIgcG9ydAorCitTYW1lIGFzIEBjb2Rl e2xpc3QtcmVkdWNlfSBidXQgZm9yIHBvcnRzLiBDYWxsZWQgd2l0aG91dCBhIHBvcnQsIGl0 CityZWR1Y2VzIG92ZXIgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgQGNvZGV7KHJlYWRlcil9 IHVudGlsIHRoZQorRU9GLW9iamVjdCBpcyByZXR1cm5lZCwgcHJlc3VtYWJseSB0byByZWFk IGZyb20KK0Bjb2Rle2N1cnJlbnQtaW5wdXQtcG9ydH0uIFdpdGggYSBwb3J0IEBjb2Rle3Jl YWRlcn0gaXMgYXBwbGllZCB0bworQGNvZGV7cG9ydH0gaW5zdGVhZCBvZiB3aXRob3V0IGFu eSBhcmd1bWVudHMuIElmIGFuIEBjb2Rle2lkZW50aXR5fSBpcworcHJvdmlkZWQsIHRoYXQg aXMgdXNlZCBhcyB0aGUgaW5pdGlhbCBpZGVudGl0eSBpbiB0aGUgcmVkdWN0aW9uLgorQGVu ZCBkZWZmbgorCisKK0Bub2RlIFNSRkktMTcxIFJlZHVjZXJzCitAc3Vic3Vic2VjdGlvbiBS ZWR1Y2VycworQGNpbmRleCB0cmFuc2R1Y2VycyByZWR1Y2VycworCitAZGVmZm4ge1NjaGVt ZSBQcm9jZWR1cmV9IHJjb25zCithIHNpbXBsZSBjb25zaW5nIHJlZHVjZXIuIFdoZW4gY2Fs bGVkIHdpdGhvdXQgdmFsdWVzLCBpdCByZXR1cm5zIGl0cworaWRlbnRpdHksIEBjb2Rleyco KX0uIFdpdGggb25lIHZhbHVlLCB3aGljaCB3aWxsIGJlIGEgbGlzdCwgaXQgcmV2ZXJzZXMK K3RoZSBsaXN0ICh1c2luZyBAY29kZXtyZXZlcnNlIX0pLiBXaGVuIGNhbGxlZCB3aXRoIHR3 byB2YWx1ZXMsIGl0IGNvbnNlcwordGhlIHNlY29uZCB2YWx1ZSB0byB0aGUgZmlyc3QuCisK K0BleGFtcGxlCisobGlzdC10cmFuc2R1Y2UgKHRtYXAgKGxhbWJkYSAoeCkgKCsgeCAxKSkg cmNvbnMgKGxpc3QgMCAxIDIgMykpCitAcmVzdWx0e30gKDEgMiAzIDQpCitAZW5kIGV4YW1w bGUKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSByZXZlcnNlLXJj b25zCitzYW1lIGFzIHJjb25zLCBidXQgbGVhdmVzIHRoZSB2YWx1ZXMgaW4gdGhlaXIgcmV2 ZXJzZWQgb3JkZXIuCitAZXhhbXBsZQorKGxpc3QtdHJhbnNkdWNlICh0bWFwIChsYW1iZGEg KHgpICgrIHggMSkpKSByZXZlcnNlLXJjb25zIChsaXN0IDAgMSAyIDMpKQorQHJlc3VsdHt9 ICg0IDMgMiAxKQorQGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKKworQGRlZmZuIHtTY2hl bWUgUHJvY2VkdXJlfSByYW55IHByZWQ/CitUaGUgcmVkdWNlciB2ZXJzaW9uIG9mIGFueS4g UmV0dXJucyBAY29kZXsocmVkdWNlZCAocHJlZD8gdmFsdWUpKX0gaWYKK2FueSBAY29kZXso cHJlZD8gdmFsdWUpfSByZXR1cm5zIG5vbi0jZi4gVGhlIGlkZW50aXR5IGlzICNmLgorCitA ZXhhbXBsZQorKGxpc3QtdHJhbnNkdWNlICh0bWFwIChsYW1iZGEgKHgpICgrIHggMSkpKSAo cmFueSBvZGQ/KSAobGlzdCAxIDMgNSkpCitAcmVzdWx0e30gI2YKKworKGxpc3QtdHJhbnNk dWNlICh0bWFwIChsYW1iZGEgKHgpICgrIHggMSkpKSAocmFueSBvZGQ/KSAobGlzdCAxIDMg NCA1KSkKK0ByZXN1bHR7fSAjdAorQGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKKworQGRl ZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSByZXZlcnkgcHJlZD8KK1RoZSByZWR1Y2VyIHZlcnNp b24gb2YgZXZlcnkuIFN0b3BzIHRoZSB0cmFuc2R1Y3Rpb24gYW5kIHJldHVybnMKK0Bjb2Rl eyhyZWR1Y2VkICNmKX0gaWYgYW55IEBjb2RleyhwcmVkPyB2YWx1ZSl9IHJldHVybnMgI2Yu IElmIGV2ZXJ5CitAY29kZXsocHJlZD8gdmFsdWUpfSByZXR1cm5zIHRydWUsIGl0IHJldHVy bnMgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdAoraW52b2NhdGlvbiBvZiBAY29kZXsocHJlZD8g dmFsdWUpfS4gVGhlIGlkZW50aXR5IGlzICN0LgorCitAZXhhbXBsZQorKGxpc3QtdHJhbnNk dWNlCisgICh0bWFwIChsYW1iZGEgKHgpICgrIHggMSkpKQorICAocmV2ZXJ5IChsYW1iZGEg KHYpIChpZiAob2RkPyB2KSB2ICNmKSkpCisgIChsaXN0IDIgNCA2KSkKKyAgQHJlc3VsdHt9 IDcKKworKGxpc3QtdHJhbnNkdWNlICh0bWFwIChsYW1iZGEgKHgpICgrIHggMSkpIChyZXZl cnkgb2RkPykgKGxpc3QgMiA0IDUgNikpCitAcmVzdWx0e30gI2YKK0BlbmQgZXhhbXBsZQor QGVuZCBkZWZmbgorCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gcmNvdW50CitBIHNp bXBsZSBjb3VudGluZyByZWR1Y2VyLiBDb3VudHMgdGhlIHZhbHVlcyB0aGF0IHBhc3MgdGhy b3VnaCB0aGUgdHJhbnNkdWN0aW9uLgorQGV4YW1wbGUKKyhsaXN0LXRyYW5zZHVjZSAodGZp bHRlciBvZGQ/KSByY291bnQgKGxpc3QgMSAyIDMgNCkpIEByZXN1bHR7fSAyLgorQGVuZCBl eGFtcGxlCitAZW5kIGRlZmZuCisKKworQG5vZGUgU1JGSS0xNzEgVHJhbnNkdWNlcnMKK0Bz dWJzdWJzZWN0aW9uIFRyYW5zZHVjZXJzCitAY2luZGV4IHRyYW5zZHVjZXJzIHRyYW5zZHVj ZXJzCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gdG1hcCBwcm9jCitSZXR1cm5zIGEg dHJhbnNkdWNlciB0aGF0IGFwcGxpZXMgQGNvZGV7cHJvY30gdG8gYWxsIHZhbHVlcy4gU3Rh dGVsZXNzLgorQGVuZCBkZWZmbgorCisKK0BkZWZmbiB0ZmlsdGVyIHByZWQ/CitSZXR1cm5z IGEgdHJhbnNkdWNlciB0aGF0IHJlbW92ZXMgdmFsdWVzIGZvciB3aGljaCBAY29kZXtwcmVk P30gcmV0dXJucyAjZi4KKworU3RhdGVsZXNzLgorQGVuZCBkZWZmbgorCisKK0BkZWZmbiB7 U2NoZW1lIFByb2NlZHVyZX0gdHJlbW92ZSBwcmVkPworUmV0dXJucyBhIHRyYW5zZHVjZXIg dGhhdCByZW1vdmVzIHZhbHVlcyBmb3Igd2hpY2ggQGNvZGV7cHJlZD99IHJldHVybnMgbm9u LSNmLgorCitTdGF0ZWxlc3MKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2Vk dXJlfSB0ZmlsdGVyLW1hcCBwcm9jCitUaGUgc2FtZSBhcyBAY29kZXsoY29tcG9zZSAodG1h cCBwcm9jKSAodGZpbHRlciB2YWx1ZXMpKX0uIFN0YXRlbGVzcy4KK0BlbmQgZGVmZm4KKwor CitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHRyZXBsYWNlIG1hcHBpbmcKK1RoZSBhcmd1 bWVudCBAY29kZXttYXBwaW5nfSBpcyBhbiBhc3NvY2lhdGlvbiBsaXN0ICh1c2luZyBAY29k ZXtlcXVhbD99Cit0byBjb21wYXJlIGtleXMpLCBhIGhhc2gtdGFibGUsIGEgb25lLWFyZ3Vt ZW50IHByb2NlZHVyZSB0YWtpbmcgb25lCithcmd1bWVudCBhbmQgZWl0aGVyIHByb2R1Y2lu ZyB0aGF0IHNhbWUgYXJndW1lbnQgb3IgYSByZXBsYWNlbWVudCB2YWx1ZS4KKworUmV0dXJu cyBhIHRyYW5zZHVjZXIgd2hpY2ggY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgYW55IHZh bHVlIHBhc3NlZAordGhyb3VnaCBpdCBpbiBtYXBwaW5nLiBJZiBhIG1hcHBpbmcgaXMgZm91 bmQsIHRoZSB2YWx1ZSBvZiB0aGF0IG1hcHBpbmcKK2lzIHJldHVybmVkLCBvdGhlcndpc2Ug aXQganVzdCByZXR1cm5zIHRoZSBvcmlnaW5hbCB2YWx1ZS4KKworRG9lcyBub3Qga2VlcCBp bnRlcm5hbCBzdGF0ZSwgYnV0IG1vZGlmeWluZyB0aGUgbWFwcGluZyB3aGlsZSBpdCdzIGlu Cit1c2UgYnkgdHJlcGxhY2UgaXMgYW4gZXJyb3IuCitAZW5kIGRlZmZuCisKKworQGRlZmZu IHtTY2hlbWUgUHJvY2VkdXJlfSB0ZHJvcCBuCitSZXR1cm5zIGEgdHJhbnNkdWNlciB0aGF0 IGRpc2NhcmRzIHRoZSBmaXJzdCBuIHZhbHVlcy4KKworU3RhdGVmdWwuCitAZW5kIGRlZmZu CisKKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB0dGFrZSBuCitSZXR1cm5zIGEgdHJh bnNkdWNlciB0aGF0IGRpc2NhcmRzIGFsbCB2YWx1ZXMgYW5kIHN0b3BzIHRoZSB0cmFuc2R1 Y3Rpb24KK2FmdGVyIHRoZSBmaXJzdCBuIHZhbHVlcyBoYXZlIGJlZW4gbGV0IHRocm91Z2gu IEFueSBzdWJzZXF1ZW50IHZhbHVlcworYXJlIGlnbm9yZWQuCisKK1N0YXRlZnVsLgorQGVu ZCBkZWZmbgorCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gdGRyb3Atd2hpbGUgcHJl ZD8KK1JldHVybnMgYSB0cmFuc2R1Y2VyIHRoYXQgZGlzY2FyZHMgdGhlIHRoZSBmaXJzdCB2 YWx1ZXMgZm9yIHdoaWNoCitAY29kZXtwcmVkP30gcmV0dXJucyB0cnVlLgorCitTdGF0ZWZ1 bC4KK0BlbmQgZGVmZm4KKworCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHR0YWtlLXdo aWxlIHByZWQ/CitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSB0dGFrZS13aGlsZSBwcmVk PyByZXRmCitSZXR1cm5zIGEgdHJhbnNkdWNlciB0aGF0IHN0b3BzIHRoZSB0cmFuc2R1Y3Rp b24gYWZ0ZXIgQGNvZGV7cHJlZD99IGhhcworcmV0dXJuZWQgI2YuIEFueSBzdWJzZXF1ZW50 IHZhbHVlcyBhcmUgaWdub3JlZCBhbmQgdGhlIGxhc3Qgc3VjY2Vzc2Z1bAordmFsdWUgaXMg cmV0dXJuZWQuIEBjb2Rle3JldGZ9IGlzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3 aGVuZXZlcgorQGNvZGV7cHJlZD99IHJldHVybnMgZmFsc2UuIFRoZSBhcmd1bWVudHMgcGFz c2VkIGFyZSB0aGUgcmVzdWx0IHNvIGZhcgorYW5kIHRoZSBpbnB1dCBmb3Igd2hpY2ggcHJl ZD8gcmV0dXJucyAjZi4gVGhlIGRlZmF1bHQgZnVuY3Rpb24gaXMKK0Bjb2RleyhsYW1iZGEg KHJlc3VsdCBpbnB1dCkgcmVzdWx0KX0uCisKK1N0YXRlZnVsLgorQGVuZCBkZWZmbgorCisK K0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gdGNvbmNhdGVuYXRlCit0Y29uY2F0ZW5hdGUg QGVtcGh7aXN9IGEgdHJhbnNkdWNlciB0aGF0IGNvbmNhdGVuYXRlcyB0aGUgY29udGVudCBv ZgorZWFjaCB2YWx1ZSAodGhhdCBtdXN0IGJlIGEgbGlzdCkgaW50byB0aGUgcmVkdWN0aW9u LgorQGV4YW1wbGUKKyhsaXN0LXRyYW5zZHVjZSB0Y29uY2F0ZW5hdGUgcmNvbnMgJygoMSAy KSAoMyA0IDUpICg2ICg3IDgpIDkpKSkKK0ByZXN1bHR7fSAoMSAyIDMgNCA1IDYgKDcgOCkg OSkKK0BlbmQgZXhhbXBsZQorQGVuZCBkZWZmbgorCisKK0BkZWZmbiB7U2NoZW1lIFByb2Nl ZHVyZX0gdGFwcGVuZC1tYXAgcHJvYworVGhlIHNhbWUgYXMgQGNvZGV7KGNvbXBvc2UgKHRt YXAgcHJvYykgdGNvbmNhdGVuYXRlKX0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1l IFByb2NlZHVyZX0gdGZsYXR0ZW4KK3RmbGF0dGVuIEBlbXBoe2lzfSBhIHRyYW5zZHVjZXIg dGhhdCBmbGF0dGVucyBhbiBpbnB1dCBjb25zaXN0aW5nIG9mIGxpc3RzLgorCitAZXhhbXBs ZQorKGxpc3QtdHJhbnNkdWNlIHRmbGF0dGVuIHJjb25zICcoKDEgMikgMyAoNCAoNSA2KSA3 IDgpIDkpCitAcmVzdWx0e30gKDEgMiAzIDQgNSA2IDcgOCA5KQorQGVuZCBleGFtcGxlCitA ZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gdGRlbGV0ZS1uZWlnaGJv ci1kdXBsaWNhdGVzCitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSB0ZGVsZXRlLW5laWdo Ym9yLWR1cGxpY2F0ZXMgZXF1YWxpdHktcHJlZGljYXRlCisKK1JldHVybnMgYSB0cmFuc2R1 Y2VyIHRoYXQgcmVtb3ZlcyBhbnkgZGlyZWN0bHkgZm9sbG93aW5nIGR1cGxpY2F0ZQorZWxl bWVudHMuIFRoZSBkZWZhdWx0IEBjb2Rle2VxdWFsaXR5LXByZWRpY2F0ZX0gaXMgQGNvZGV7 ZXF1YWw/fS4KKworU3RhdGVmdWwuCitAZW5kIGRlZmZuCisKKworQGRlZmZuIHtTY2hlbWUg UHJvY2VkdXJlfSB0ZGVsZXRlLWR1cGxpY2F0ZXMKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1 cmV9IHRkZWxldGUtZHVwbGljYXRlcyBlcXVhbGl0eS1wcmVkaWNhdGUKKworUmV0dXJucyBh IHRyYW5zZHVjZXIgdGhhdCByZW1vdmVzIGFueSBzdWJzZXF1ZW50IGR1cGxpY2F0ZSBlbGVt ZW50cworY29tcGFyZWQgdXNpbmcgQGNvZGV7ZXF1YWxpdHktcHJlZGljYXRlfS4gVGhlIGRl ZmF1bHQKK0Bjb2Rle2VxdWFsaXR5LXByZWRpY2F0ZX0gaXMgQGNvZGV7ZXF1YWw/fS4KKwor U3RhdGVmdWwuCitAZW5kIGRlZmZuCisKKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB0 c2VnbWVudCBuCisKK1JldHVybnMgYSB0cmFuc2R1Y2VyIHRoYXQgZ3JvdXBzIEBjb2Rle259 IGlucHV0cyBpbiBsaXN0cyBvZiBAY29kZXtufQorZWxlbWVudHMuIFdoZW4gdGhlIHRyYW5z ZHVjdGlvbiBzdG9wcywgaXQgZmx1c2hlcyBhbnkgcmVtYWluaW5nCitjb2xsZWN0aW9uLCBl dmVuIGlmIGl0IGNvbnRhaW5zIGZld2VyIHRoYW4gQGNvZGV7bn0gZWxlbWVudHMuCisKK1N0 YXRlZnVsLgorQGVuZCBkZWZmbgorCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gdHBh cnRpdGlvbiBwcmVkPworCitSZXR1cm5zIGEgdHJhbnNkdWNlciB0aGF0IGdyb3VwcyBpbnB1 dHMgaW4gbGlzdHMgYnkgd2hlbmV2ZXIKK0Bjb2RleyhwcmVkPyBpbnB1dCl9IGNoYW5nZXMg dmFsdWUuCisKK1N0YXRlZnVsLgorQGVuZCBkZWZmbgorCisKK0BkZWZmbiB7U2NoZW1lIFBy b2NlZHVyZX0gdGFkZC1iZXR3ZWVuIHZhbHVlCitSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGlj aCBpbnRlcnBvc2VzIEBjb2Rle3ZhbHVlfSBiZXR3ZWVuIGVhY2ggdmFsdWUKK2FuZCB0aGUg bmV4dC4gVGhpcyBkb2VzIG5vdCBjb21wb3NlIGdyYWNlZnVsbHkgd2l0aCB0cmFuc2R1Y2Vy cyBsaWtlCitAY29kZXt0dGFrZX0sIGFzIHlvdSBtaWdodCBlbmQgdXAgZW5kaW5nIHRoZSB0 cmFuc2R1Y3Rpb24gb24KK0Bjb2Rle3ZhbHVlfS4KKworU3RhdGVmdWwuCitAZW5kIGRlZmZu CisKKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB0ZW51bWVyYXRlCitAZGVmZm54IHtT Y2hlbWUgUHJvY2VkdXJlfSB0ZW51bWVyYXRlIHN0YXJ0CitSZXR1cm5zIGEgdHJhbnNkdWNl ciB0aGF0IGluZGV4ZXMgdmFsdWVzIHBhc3NlZCB0aHJvdWdoIGl0LCBzdGFydGluZyBhdAor QGNvZGV7c3RhcnR9LCB3aGljaCBkZWZhdWx0cyB0byAwLiBUaGUgaW5kZXhpbmcgaXMgZG9u ZSB0aHJvdWdoIGNvbnMKK3BhaXJzIGxpa2UgQGNvZGV7KGluZGV4IC4gaW5wdXQpfS4KKwor QGV4YW1wbGUKKyhsaXN0LXRyYW5zZHVjZSAodGVudW1lcmF0ZSAxKSByY29ucyAobGlzdCAn Zmlyc3QgJ3NlY29uZCAndGhpcmQpKQorQHJlc3VsdHt9ICgoMSAuIGZpcnN0KSAoMiAuIHNl Y29uZCkgKDMgLiB0aGlyZCkpCitAZW5kIGV4YW1wbGUKKworU3RhdGVmdWwuCitAZW5kIGRl ZmZuCisKKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB0bG9nCitAZGVmZm54IHtTY2hl bWUgUHJvY2VkdXJlfSB0bG9nIGxvZ2dlcgorCitSZXR1cm5zIGEgdHJhbnNkdWNlciB0aGF0 IGNhbiBiZSB1c2VkIHRvIGxvZyBvciBwcmludCB2YWx1ZXMgYW5kCityZXN1bHRzLiBUaGUg cmVzdWx0IG9mIHRoZSBAY29kZXtsb2dnZXJ9IHByb2NlZHVyZSBpcyBkaXNjYXJkZWQuIFRo ZQorZGVmYXVsdCBAY29kZXtsb2dnZXJ9IGlzIEBjb2RleyhsYW1iZGEgKHJlc3VsdCBpbnB1 dCkgKHdyaXRlIGlucHV0KQorKG5ld2xpbmUpKX0uCisKK1N0YXRlbGVzcy4KK0BlbmQgZGVm Zm4KKworQHN1YmhlYWRpbmcgR3VpbGUtc3BlY2lmaWMgdHJhbnNkdWNlcnMKK1RoZXNlIHRy YW5zZHVjZXJzIGFyZSBhdmFpbGFibGUgaW4gdGhlIEBjb2RleyhzcmZpIHNyZmktMTcxIGdu dSl9CitsaWJyYXJ5LCBhbmQgYXJlIHByb3ZpZGVkIG91dHNpZGUgdGhlIHN0YW5kYXJkIGRl c2NyaWJlZCBieSB0aGUgU1JGSS0xNzEKK2RvY3VtZW50LgorCitAZGVmZm4ge1NjaGVtZSBQ cm9jZWR1cmV9IHRiYXRjaCByZWR1Y2VyCitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJlfSB0 YmF0Y2ggdHJhbnNkdWNlciByZWR1Y2VyCitBIGJhdGNoaW5nIHRyYW5zZHVjZXIgdGhhdCBh Y2N1bXVsYXRlcyByZXN1bHRzIHVzaW5nIEBjb2Rle3JlZHVjZXJ9IG9yCitAY29kZXsoKHRy YW5zZHVjZXIpIHJlZHVjZXIpfSB1bnRpbCBpdCByZXR1cm5zIGEgcmVkdWNlZCB2YWx1ZS4g VGhpcyBjYW4KK2JlIHVzZWQgdG8gZ2VuZXJhbGl6ZSBzb21ldGhpbmcgbGlrZSBAY29kZXt0 c2VnbWVudH06CisKK0BleGFtcGxlCis7OyBUaGlzIGJlaGF2ZXMgZXhhY3RseSBsaWtlICh0 c2VnbWVudCA0KS4KKyhsaXN0LXRyYW5zZHVjZSAodGJhdGNoICh0dGFrZSA0KSByY29ucykg cmNvbnMgKGlvdGEgMTApKQorQHJlc3VsdCB7fSAoKDAgMSAyIDMpICg0IDUgNiA3KSAoOCA5 KSkKK0BlbmQgZXhhbXBsZQorQGVuZCBkZWZmbgorCisKK0BkZWZmbiB7U2NoZW1lIFByb2Nl ZHVyZX0gdGZvbGQgcmVkdWNlcgorQGRlZmZueCB7U2NoZW1lIFByb2NlZHVyZX0gdGZvbGQg cmVkdWNlciBzZWVkCisKK0EgZm9sZGluZyB0cmFuc2R1Y2VyIHRoYXQgeWllbGRzIHRoZSBy ZXN1bHQgb2YgQGNvZGV7KHJlZHVjZXIgc2VlZAordmFsdWUpfSwgc2F2aW5nIGl0J3MgcmVz dWx0IGJldHdlZW4gaXRlcmF0aW9ucy4KKworQGV4YW1wbGUKKyhsaXN0LXRyYW5zZHVjZSAo dGZvbGQgKykgcmNvbnMgKGlvdGEgMTApKQorQHJlc3VsdHt9ICgwIDEgMyA2IDEwIDE1IDIx IDI4IDM2IDQ1KQorQGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKKworCisKK0Bub2RlIFNS RkktMTcxIEhlbHBlcnMKK0BzdWJzdWJzZWN0aW9uIEhlbHBlciBmdW5jdGlvbnMgZm9yIHdy aXRpbmcgdHJhbnNkdWNlcnMKK0BjaW5kZXggdHJhbnNkdWNlcnMgaGVscGVycworCitUaGVz ZSBmdW5jdGlvbnMgYXJlIGluIHRoZSBAY29kZXsoc3JmaSAxNzEgbWV0YSl9IG1vZHVsZSBh bmQgYXJlIG9ubHkKK3VzYWJsZSB3aGVuIHlvdSB3YW50IHRvIHdyaXRlIHlvdXIgb3duIHRy YW5zZHVjZXJzLgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHJlZHVjZWQgdmFsdWUK KworV3JhcHMgYSB2YWx1ZSBpbiBhIEBjb2RlezxyZWR1Y2VkPn0gY29udGFpbmVyLCBzaWdu YWxsaW5nIHRoYXQgdGhlCityZWR1Y3Rpb24gc2hvdWxkIHN0b3AuCitAZW5kIGRlZmZuCisK KworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSByZWR1Y2VkPyB2YWx1ZQorCitSZXR1cm5z ICN0IGlmIHZhbHVlIGlzIGEgQGNvZGV7PHJlZHVjZWQ+fSByZWNvcmQuCitAZW5kIGRlZmZu CisKKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB1bnJlZHVjZSByZWR1Y2VkLWNvbnRh aW5lcgorCitSZXR1cm5zIHRoZSB2YWx1ZSBpbiByZWR1Y2VkLWNvbnRhaW5lci4KK0BlbmQg ZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBlbnN1cmUtcmVkdWNlZCB2YWx1 ZQorV3JhcHMgdmFsdWUgaW4gYSBAY29kZXs8cmVkdWNlZD59IGNvbnRhaW5lciBpZiBpdCBp cyBub3QgYWxyZWFkeSByZWR1Y2VkLgorQGVuZCBkZWZmbgorCisKK0BkZWZmbiB7U2NoZW1l IFByb2NlZHVyZX0gcHJlc2VydmluZy1yZWR1Y2VkIHJlZHVjZXIKKworV3JhcHMgQGNvZGV7 cmVkdWNlcn0gaW4gYW5vdGhlciByZWR1Y2VyIHRoYXQgZW5jYXBzdWxhdGVzIGFueSByZXR1 cm5lZAorcmVkdWNlZCB2YWx1ZSBpbiBhbm90aGVyIHJlZHVjZWQgY29udGFpbmVyLiBUaGlz IGlzIHVzZWZ1bCBpbiBwbGFjZXMKK3doZXJlIHlvdSByZS11c2UgYSByZWR1Y2VyIHdpdGgg W2NvbGxlY3Rpb25dLXJlZHVjZS4gSWYgdGhlIHJlZHVjZXIKK3JldHVybnMgYSByZWR1Y2Vk IHZhbHVlLCBbY29sbGVjdGlvbl0tcmVkdWNlIHVud3JhcHMgaXQuIFVubGVzcyBoYW5kbGVk LAordGhpcyBsZWFkcyB0byB0aGUgcmVkdWN0aW9uIGNvbnRpbnVpbmcuCitAZW5kIGRlZmZu CisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gbGlzdC1yZWR1Y2UgZiBpZGVudGl0eSBs c3QKK1RoZSByZWR1Y2luZyBmdW5jdGlvbiB1c2VkIGludGVybmFsbHkgYnkgQGNvZGV7bGlz dC10cmFuc2R1Y2V9LiBAY29kZXtmfQoraXMgYSByZWR1Y2VyIGFzIHJldHVybmVkIGJ5IGEg dHJhbnNkdWNlci4gQGNvZGV7aWRlbnRpdHl9IGlzIHRoZQoraWRlbnRpdHkgKHNvbWV0aW1l cyBjYWxsZWQgInNlZWQiKSBvZiB0aGUgcmVkdWN0aW9uLiBAY29kZXtsc3R9IGlzIGEKK2xp c3QuIElmIEBjb2Rle2Z9IHJldHVybnMgYSByZWR1Y2VkIHZhbHVlLCB0aGUgcmVkdWN0aW9u IHN0b3BzCitpbW1lZGlhdGVseSBhbmQgdGhlIHVucmVkdWNlZCB2YWx1ZSBpcyByZXR1cm5l ZC4KK0BlbmQgZGVmZm4KKworCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHZlY3Rvci1y ZWR1Y2UgZiBpZGVudGl0eSB2ZWMKK1RoZSB2ZWN0b3IgdmVyc2lvbiBvZiBsaXN0LXJlZHVj ZS4KK0BlbmQgZGVmZm4KKworCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHN0cmluZy1y ZWR1Y2UgZiBpZGVudGl0eSBzdHIKK1RoZSBzdHJpbmcgdmVyc2lvbiBvZiBsaXN0LXJlZHVj ZS4KK0BlbmQgZGVmZm4KKworCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IGJ5dGV2ZWN0 b3ItdTgtcmVkdWNlIGYgaWRlbnRpdHkgYnYKK1RoZSBieXRldmVjdG9yLXU4IHZlcnNpb24g b2YgbGlzdC1yZWR1Y2UuCitAZW5kIGRlZmZuCisKKworQGRlZmZuIHtTY2hlbWUgUHJvY2Vk dXJlfSBwb3J0LXJlZHVjZSBmIGlkZW50aXR5IHJlYWRlciBwb3J0CitUaGUgcG9ydCB2ZXJz aW9uIG9mIGxpc3QtcmVkdWNlci4gSXQgcmVkdWNlcyBvdmVyIHBvcnQgdXNpbmcgcmVhZGVy Cit1bnRpbCByZWFkZXIgcmV0dXJucyB0aGUgRU9GIG9iamVjdC4KK0BlbmQgZGVmZm4KKwor CitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IGdlbmVyYXRvci1yZWR1Y2UgZiBpZGVudGl0 eSBnZW4KKworVGhlIHBvcnQgdmVyc2lvbiBvZiBsaXN0LXJlZHVjZS4gSXQgcmVkdWNlcyBv dmVyIEBjb2Rle2dlbn0gdW50aWwgaXQKK3JldHVybnMgdGhlIEVPRiBvYmplY3QKKworQGVu ZCBkZWZmbgorCisKIEBjIHNyZmktbW9kdWxlcy50ZXhpIGVuZHMgaGVyZQogCiBAYyBMb2Nh bCBWYXJpYWJsZXM6CmRpZmYgLS1naXQgYS9tb2R1bGUvTWFrZWZpbGUuYW0gYi9tb2R1bGUv TWFrZWZpbGUuYW0KaW5kZXggMWQ5ZDUyNGNmLi40MGI0YjU2MWEgMTAwNjQ0Ci0tLSBhL21v ZHVsZS9NYWtlZmlsZS5hbQorKysgYi9tb2R1bGUvTWFrZWZpbGUuYW0KQEAgLTMxMiw2ICsz MTIsOSBAQCBTT1VSQ0VTID0JCQkJCVwKICAgc3JmaS9zcmZpLTg4LnNjbQkJCQlcCiAgIHNy Zmkvc3JmaS05OC5zY20JCQkJXAogICBzcmZpL3NyZmktMTExLnNjbQkJCQlcCisgIHNyZmkv c3JmaS0xNzEuc2NtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHNyZmkvc3Jm aS0xNzEvZ251LnNjbSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHNyZmkvc3JmaS0x NzEvbWV0YS5zY20gICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQkJCQlcCiAgIHN0YXRw cm9mLnNjbQkJCQkJXAogCQkJCQkJXApkaWZmIC0tZ2l0IGEvbW9kdWxlL3NyZmkvc3JmaS0x NzEuc2NtIGIvbW9kdWxlL3NyZmkvc3JmaS0xNzEuc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMC4uNTQ1NTgxYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxl L3NyZmkvc3JmaS0xNzEuc2NtCkBAIC0wLDAgKzEsNDU4IEBACis7OyAJQ29weXJpZ2h0IChD KSAyMDIwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOzsKKzs7IFRoaXMgbGli cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK Kzs7IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKzs7IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorOzsgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzsgCis7OyBUaGlzIGxpYnJh cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK Kzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOzsgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7IAorOzsgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworOzsgTGlj ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorOzsgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorCisoZGVmaW5lLW1vZHVs ZSAoc3JmaSBzcmZpLTE3MSkKKyAgIzpkZWNsYXJhdGl2ZT8gI3QKKyAgIzp1c2UtbW9kdWxl IChpY2UtOSBtYXRjaCkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktOSkKKyAgIzp1c2Ut bW9kdWxlICgoc3JmaSBzcmZpLTQzKSAgIzpzZWxlY3QgKHZlY3Rvci0+bGlzdCkpCisgICM6 dXNlLW1vZHVsZSAoKHNyZmkgc3JmaS02OSkgIzpwcmVmaXggc3JmaTY5OikKKyAgIzp1c2Ut bW9kdWxlICgocm5ycyBoYXNodGFibGVzKSAjOnByZWZpeCBybnJzOikKKyAgIzp1c2UtbW9k dWxlIChzcmZpIHNyZmktMTcxIG1ldGEpCisgICM6ZXhwb3J0IChyY29ucworICAgICAgICAg ICAgcmV2ZXJzZS1yY29ucworICAgICAgICAgICAgcmNvdW50CisgICAgICAgICAgICByYW55 CisgICAgICAgICAgICByZXZlcnkKKyAgICAgICAgICAgIGxpc3QtdHJhbnNkdWNlCisgICAg ICAgICAgICB2ZWN0b3ItdHJhbnNkdWNlCisgICAgICAgICAgICBzdHJpbmctdHJhbnNkdWNl CisgICAgICAgICAgICBieXRldmVjdG9yLXU4LXRyYW5zZHVjZQorICAgICAgICAgICAgcG9y dC10cmFuc2R1Y2UKKyAgICAgICAgICAgIGdlbmVyYXRvci10cmFuc2R1Y2UKKworICAgICAg ICAgICAgdG1hcAorICAgICAgICAgICAgdGZpbHRlcgorICAgICAgICAgICAgdHJlbW92ZQor ICAgICAgICAgICAgdHJlcGxhY2UKKyAgICAgICAgICAgIHRmaWx0ZXItbWFwCisgICAgICAg ICAgICB0ZHJvcAorICAgICAgICAgICAgdGRyb3Atd2hpbGUKKyAgICAgICAgICAgIHR0YWtl CisgICAgICAgICAgICB0dGFrZS13aGlsZQorICAgICAgICAgICAgdGNvbmNhdGVuYXRlCisg ICAgICAgICAgICB0YXBwZW5kLW1hcAorICAgICAgICAgICAgdGRlbGV0ZS1uZWlnaGJvci1k dXBsaWNhdGVzCisgICAgICAgICAgICB0ZGVsZXRlLWR1cGxpY2F0ZXMKKyAgICAgICAgICAg IHRmbGF0dGVuCisgICAgICAgICAgICB0c2VnbWVudAorICAgICAgICAgICAgdHBhcnRpdGlv bgorICAgICAgICAgICAgdGFkZC1iZXR3ZWVuCisgICAgICAgICAgICB0ZW51bWVyYXRlCisg ICAgICAgICAgICB0bG9nKSkKKyhjb25kLWV4cGFuZC1wcm92aWRlIChjdXJyZW50LW1vZHVs ZSkgJyhzcmZpLTE3MSkpCisKKworOzsgQSBwbGFjZWhvbGRlciBmb3IgYSB1bmlxdWUgIm5v dGhpbmciLgorKGRlZmluZSBub3RoaW5nIChsaXN0ICdub3RoaW5nKSkKKyhkZWZpbmUgKG5v dGhpbmc/IHZhbCkKKyAgKGVxPyB2YWwgbm90aGluZykpCisKKzs7OyBSZWR1Y2luZyBmdW5j dGlvbnMgbWVhbnQgdG8gYmUgdXNlZCBhdCB0aGUgZW5kIGF0IHRoZSB0cmFuc2R1Y2luZyBw cm9jZXNzLgorKGRlZmluZSByY29ucworICAoY2FzZS1sYW1iZGEKKyAgICAiQSB0cmFuc2R1 Y2VyLWZyaWVuZGx5IGNvbnNpbmcgcmVkdWNlciB3aXRoICcoKSBhcyBpZGVudGl0eS4iCisg ICAgKCgpICcoKSkKKyAgICAoKGxzdCkgKHJldmVyc2UhIGxzdCkpCisgICAgKChsc3QgeCkg KGNvbnMgeCBsc3QpKSkpCisKKyhkZWZpbmUgcmV2ZXJzZS1yY29ucworICAoY2FzZS1sYW1i ZGEKKyAgICAiQSB0cmFuc2R1Y2VyLWZyaWVuZGx5IGNvbnNpbmcgcmVkdWNlciB3aXRoICco KSBhcyBpZGVudGl0eS4KK1RoZSByZXN1bHRpbmcgbGlzdCBpcyBpbiByZXZlcnNlIG9yZGVy LiIKKyAgICAoKCkgJygpKQorICAgICgobHN0KSBsc3QpCisgICAgKChsc3QgeCkgKGNvbnMg eCBsc3QpKSkpCisKKyhkZWZpbmUgcmNvdW50CisgIChjYXNlLWxhbWJkYQorICAgICJBIGNv dW50aW5nIHJlZHVjZXIgdGhhdCBjb3VudHMgYW55IGVsZW1lbnRzIHRoYXQgbWFkZSBpdCB0 aHJvdWdoIHRoZQordHJhbnNkdWN0aW9uLgorQGV4YW1wbGUKKyh0cmFuc2R1Y2UgKHRmaWx0 ZXIgb2RkPykgdGNvdW50IChsaXN0IDEgMiAzKSkgQHJlc3VsdHt9IDIKK0BlbmQgZXhhbXBs ZSIKKyAgICAoKCkgMCkKKyAgICAoKHJlc3VsdCkgcmVzdWx0KQorICAgICgocmVzdWx0IGlu cHV0KQorICAgICAoKyAxICByZXN1bHQpKSkpCisKKyhkZWZpbmUgKHJhbnkgcHJlZCkKKyAg KGNhc2UtbGFtYmRhCisgICAgIkEgcmVkdWNlciB0aGF0IHRlc3RzIGlucHV0IHVzaW5nIEB2 YXJ7cHJlZH0uIElmIGFueSBpbnB1dCBzYXRpc2ZpZXMKK0B2YXJ7cHJlZH0sIGl0IHJldHVy bnMgQGNvZGV7KHJlZHVjZWQgdmFsdWUpfS4iCisgICAgKCgpICNmKQorICAgICgocmVzdWx0 KSByZXN1bHQpCisgICAgKChyZXN1bHQgaW5wdXQpCisgICAgIChsZXQgKCh0ZXN0IChwcmVk IGlucHV0KSkpCisgICAgICAgKGlmIHRlc3QKKyAgICAgICAgICAgKHJlZHVjZWQgdGVzdCkK KyAgICAgICAgICAgI2YpKSkpKQorCisoZGVmaW5lIChyZXZlcnkgcHJlZCkKKyAgKGNhc2Ut bGFtYmRhCisgICAgIkEgcmVkdWNlciB0aGF0IHRlc3RzIGlucHV0IHVzaW5nIEB2YXJ7cHJl ZH0uIElmIGFueSBpbnB1dCBzYXRpc2ZpZXMKK0B2YXJ7cHJlZH0sIGl0IHJldHVybnMgQGNv ZGV7KHJlZHVjZWQgI2YpfS4iCisgICAgKCgpICN0KQorICAgICgocmVzdWx0KSByZXN1bHQp CisgICAgKChyZXN1bHQgaW5wdXQpCisgICAgIChsZXQgKCh0ZXN0IChwcmVkIGlucHV0KSkp CisgICAgICAgKGlmIChhbmQgcmVzdWx0IHRlc3QpCisgICAgICAgICAgIHRlc3QKKyAgICAg ICAgICAgKHJlZHVjZWQgI2YpKSkpKSkKKworCisoZGVmaW5lIGxpc3QtdHJhbnNkdWNlCisg IChjYXNlLWxhbWJkYQorICAgICgoeGZvcm0gZiBjb2xsKQorICAgICAobGlzdC10cmFuc2R1 Y2UgeGZvcm0gZiAoZikgY29sbCkpCisgICAgKCh4Zm9ybSBmIGluaXQgY29sbCkKKyAgICAg KGxldCogKCh4ZiAoeGZvcm0gZikpCisgICAgICAgICAgICAocmVzdWx0IChsaXN0LXJlZHVj ZSB4ZiBpbml0IGNvbGwpKSkKKyAgICAgICAoeGYgcmVzdWx0KSkpKSkKKworKGRlZmluZSB2 ZWN0b3ItdHJhbnNkdWNlCisgIChjYXNlLWxhbWJkYQorICAgICgoeGZvcm0gZiBjb2xsKQor ICAgICAodmVjdG9yLXRyYW5zZHVjZSB4Zm9ybSBmIChmKSBjb2xsKSkKKyAgICAoKHhmb3Jt IGYgaW5pdCBjb2xsKQorICAgICAobGV0KiAoKHhmICh4Zm9ybSBmKSkKKyAgICAgICAgICAg IChyZXN1bHQgKHZlY3Rvci1yZWR1Y2UgeGYgaW5pdCBjb2xsKSkpCisgICAgICAgKHhmIHJl c3VsdCkpKSkpCisKKyhkZWZpbmUgc3RyaW5nLXRyYW5zZHVjZQorICAoY2FzZS1sYW1iZGEK KyAgICAoKHhmb3JtIGYgY29sbCkKKyAgICAgKHN0cmluZy10cmFuc2R1Y2UgeGZvcm0gZiAo ZikgY29sbCkpCisgICAgKCh4Zm9ybSBmIGluaXQgY29sbCkKKyAgICAgKGxldCogKCh4ZiAo eGZvcm0gZikpCisgICAgICAgICAgICAocmVzdWx0IChzdHJpbmctcmVkdWNlIHhmIGluaXQg Y29sbCkpKQorICAgICAgICh4ZiByZXN1bHQpKSkpKQorCisoZGVmaW5lIGJ5dGV2ZWN0b3It dTgtdHJhbnNkdWNlCisgIChjYXNlLWxhbWJkYQorICAgICgoeGZvcm0gZiBjb2xsKQorICAg ICAoYnl0ZXZlY3Rvci11OC10cmFuc2R1Y2UgeGZvcm0gZiAoZikgY29sbCkpCisgICAgKCh4 Zm9ybSBmIGluaXQgY29sbCkKKyAgICAgKGxldCogKCh4ZiAoeGZvcm0gZikpCisgICAgICAg ICAgICAocmVzdWx0IChieXRldmVjdG9yLXU4LXJlZHVjZSB4ZiBpbml0IGNvbGwpKSkKKyAg ICAgICAoeGYgcmVzdWx0KSkpKSkKKworKGRlZmluZSBwb3J0LXRyYW5zZHVjZQorICAoY2Fz ZS1sYW1iZGEKKyAgICAoKHhmb3JtIGYgYnkpCisgICAgIChnZW5lcmF0b3ItdHJhbnNkdWNl IHhmb3JtIGYgYnkpKQorICAgICgoeGZvcm0gZiBieSBwb3J0KQorICAgICAocG9ydC10cmFu c2R1Y2UgeGZvcm0gZiAoZikgYnkgcG9ydCkpCisgICAgKCh4Zm9ybSBmIGluaXQgYnkgcG9y dCkKKyAgICAgKGxldCogKCh4ZiAoeGZvcm0gZikpCisgICAgICAgICAgICAocmVzdWx0IChw b3J0LXJlZHVjZSB4ZiBpbml0IGJ5IHBvcnQpKSkKKyAgICAgICAoeGYgcmVzdWx0KSkpKSkK KworKGRlZmluZSBnZW5lcmF0b3ItdHJhbnNkdWNlCisgIChjYXNlLWxhbWJkYQorICAgICgo eGZvcm0gZiBnZW4pCisgICAgIChnZW5lcmF0b3ItdHJhbnNkdWNlIHhmb3JtIGYgKGYpIGdl bikpCisgICAgKCh4Zm9ybSBmIGluaXQgZ2VuKQorICAgICAobGV0KiAoKHhmICh4Zm9ybSBm KSkKKyAgICAgICAgICAgIChyZXN1bHQgKGdlbmVyYXRvci1yZWR1Y2UgeGYgaW5pdCBnZW4p KSkKKyAgICAgICAoeGYgcmVzdWx0KSkpKSkKKworOzs7IFRyYW5zZHVjZXJzCisoZGVmaW5l ICh0bWFwIGYpCisgIChsYW1iZGEgKHJlZHVjZXIpCisgICAgKGNhc2UtbGFtYmRhCisgICAg ICAoKCkgKHJlZHVjZXIpKQorICAgICAgKChyZXN1bHQpIChyZWR1Y2VyIHJlc3VsdCkpIAor ICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAgICAgKHJlZHVjZXIgcmVzdWx0IChmIGlucHV0 KSkpKSkpCisKKyhkZWZpbmUgKHRmaWx0ZXIgcHJlZCkKKyAgKGxhbWJkYSAocmVkdWNlcikK KyAgICAoY2FzZS1sYW1iZGEKKyAgICAgICgoKSAocmVkdWNlcikpCisgICAgICAoKHJlc3Vs dCkgKHJlZHVjZXIgcmVzdWx0KSkKKyAgICAgICgocmVzdWx0IGlucHV0KQorICAgICAgIChp ZiAocHJlZCBpbnB1dCkKKyAgICAgICAgICAgKHJlZHVjZXIgcmVzdWx0IGlucHV0KQorICAg ICAgICAgICByZXN1bHQpKSkpKQorCisoZGVmaW5lICh0cmVtb3ZlIHByZWQpCisgIChsYW1i ZGEgKHJlZHVjZXIpCisgICAgKGNhc2UtbGFtYmRhCisgICAgICAoKCkgKHJlZHVjZXIpKQor ICAgICAgKChyZXN1bHQpIChyZWR1Y2VyIHJlc3VsdCkpCisgICAgICAoKHJlc3VsdCBpbnB1 dCkKKyAgICAgICAoaWYgKG5vdCAocHJlZCBpbnB1dCkpCisgICAgICAgICAgIChyZWR1Y2Vy IHJlc3VsdCBpbnB1dCkKKyAgICAgICAgICAgcmVzdWx0KSkpKSkKKworKGRlZmluZSAodGZp bHRlci1tYXAgZikgCisgIChjb21wb3NlICh0bWFwIGYpICh0ZmlsdGVyIHZhbHVlcykpKQor CisoZGVmaW5lIChtYWtlLXJlcGxhY2VyIG1hcCkKKyAgKGNvbmQKKyAgICgobGlzdD8gbWFw KQorICAgIChsYW1iZGEgKHgpCisgICAgICAobWF0Y2ggKGFzc29jIHggbWFwKQorICAgICAg ICAoKF8gLiByZXBsYWNlcikgcmVwbGFjZXIpCisgICAgICAgICgjZiB4KSkpKQorICAgKChz cmZpNjk6aGFzaC10YWJsZT8gbWFwKQorICAgIChsYW1iZGEgKHgpCisgICAgICAoc3JmaTY5 Omhhc2gtdGFibGUtcmVmL2RlZmF1bHQgbWFwIHggeCkpKQorICAgKChybnJzOmhhc2h0YWJs ZT8gbWFwKQorICAgIChsYW1iZGEgKHgpCisgICAgICAocm5yczpoYXNodGFibGUtcmVmIG1h cCB4IHgpKSkKKyAgICgoaGFzaC10YWJsZT8gbWFwKQorICAgIChsYW1iZGEgKHgpCisgICAg ICAoaGFzaC1yZWYgbWFwIHggeCkpKQorICAgKChwcm9jZWR1cmU/IG1hcCkgbWFwKQorICAg KGVsc2UKKyAgICAoZXJyb3IgIlVuc3VwcG9ydGVkIG1hcHBpbmcgaW4gdHJlcGxhY2UiIG1h cCkpKSkKKworCisoZGVmaW5lICh0cmVwbGFjZSBtYXApCisgICJSZXR1cm5zIGEgdHJhbnNk dWNlciB0aGF0IHNlYXJjaGVzIGZvciBhbnkgaW5wdXQgaW4gQHZhcnttYXB9LCB3aGljaCBt YXkKK2JlIGEgZ3VpbGUgbmF0aXZlIGhhc2h0YWJsZSwgYW4gUjZSUyBoYXNodGFibGUsIGEg c3JmaS02OSBoYXNodGFibGUsIGFuIGFsaXN0CitvciBhIG9uZS1hcmd1bWVudCBwcm9jZWR1 cmUgdGFraW5nIG9uZSB2YWx1ZSBhbmQgcHJvZHVjaW5nIGVpdGhlciB0aGUgc2FtZQordmFs dWUgb3IgYSByZXBsYWNlbWVudCBvbmUuIEFsaXN0cyBhbmQgZ3VpbGUtbmF0aXZlIGhhc2h0 YmxlcyBjb21wYXJlIGtleXMKK3VzaW5nIEBjb2Rle2VxdWFsP30gd2hlcmVhcyB0aGUgb3Ro ZXIgbWFwcGluZ3MgdXNlIHdoYXRldmVyIGVxdWFsaXR5IHByZWRpY2F0ZQordGhleSB3ZXJl IGNyZWF0ZWQgd2l0aC4iCisgICh0bWFwIChtYWtlLXJlcGxhY2VyIG1hcCkpKQorCisoZGVm aW5lICh0ZHJvcCBuKQorICAobGFtYmRhIChyZWR1Y2VyKQorICAgIChsZXQgKChuZXctbiAo KyAxIG4pKSkKKyAgICAgIChjYXNlLWxhbWJkYQorICAgICAgICAoKCkgKHJlZHVjZXIpKQor ICAgICAgICAoKHJlc3VsdCkgKHJlZHVjZXIgcmVzdWx0KSkKKyAgICAgICAgKChyZXN1bHQg aW5wdXQpCisgICAgICAgICAoc2V0ISBuZXctbiAoLSBuZXctbiAxKSkKKyAgICAgICAgIChp ZiAocG9zaXRpdmU/IG5ldy1uKQorICAgICAgICAgICAgIHJlc3VsdAorICAgICAgICAgICAg IChyZWR1Y2VyIHJlc3VsdCBpbnB1dCkpKSkpKSkKKworKGRlZmluZSAodGRyb3Atd2hpbGUg cHJlZCkKKyAgKGxhbWJkYSAocmVkdWNlcikKKyAgICAobGV0ICgoZHJvcD8gI3QpKQorICAg ICAgKGNhc2UtbGFtYmRhCisgICAgICAgICgoKSAocmVkdWNlcikpCisgICAgICAgICgocmVz dWx0KSAocmVkdWNlciByZXN1bHQpKQorICAgICAgICAoKHJlc3VsdCBpbnB1dCkKKyAgICAg ICAgIChpZiAoYW5kIChwcmVkIGlucHV0KSBkcm9wPykKKyAgICAgICAgICAgICByZXN1bHQK KyAgICAgICAgICAgICAoYmVnaW4KKyAgICAgICAgICAgICAgIChzZXQhIGRyb3A/ICNmKQor ICAgICAgICAgICAgICAgKHJlZHVjZXIgcmVzdWx0IGlucHV0KSkpKSkpKSkKKworKGRlZmlu ZSAodHRha2UgbikKKyAgKGxhbWJkYSAocmVkdWNlcikKKyAgICA7OyB3ZSBuZWVkIHRvIHJl c2V0IG5ldy1uIGZvciBldmVyeSBuZXcgdHJhbnNkdWN0aW9uCisgICAgKGxldCAoKG5ldy1u IG4pKQorICAgICAgKGNhc2UtbGFtYmRhCisgICAgICAgICgoKSAocmVkdWNlcikpCisgICAg ICAgICgocmVzdWx0KSAocmVkdWNlciByZXN1bHQpKQorICAgICAgICAoKHJlc3VsdCBpbnB1 dCkKKyAgICAgICAgIChsZXQgKChyZXN1bHQgKGlmIChwb3NpdGl2ZT8gbmV3LW4pCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAocmVkdWNlciByZXN1bHQgaW5wdXQpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkKKyAgICAgICAgICAgKHNldCEgbmV3LW4g KC0gbmV3LW4gMSkpCisgICAgICAgICAgIChpZiAobm90IChwb3NpdGl2ZT8gbmV3LW4pKQor ICAgICAgICAgICAgICAgKGVuc3VyZS1yZWR1Y2VkIHJlc3VsdCkKKyAgICAgICAgICAgICAg IHJlc3VsdCkpKSkpKSkKKworKGRlZmluZSB0dGFrZS13aGlsZQorICAoY2FzZS1sYW1iZGEK KyAgICAoKHByZWQpICh0dGFrZS13aGlsZSBwcmVkIChsYW1iZGEgKHJlc3VsdCBpbnB1dCkg cmVzdWx0KSkpCisgICAgKChwcmVkIHJldGYpCisgICAgIChsYW1iZGEgKHJlZHVjZXIpCisg ICAgICAgKGxldCAoKHRha2U/ICN0KSkKKyAgICAgICAgIChjYXNlLWxhbWJkYQorICAgICAg ICAgICAoKCkgKHJlZHVjZXIpKQorICAgICAgICAgICAoKHJlc3VsdCkgKHJlZHVjZXIgcmVz dWx0KSkKKyAgICAgICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAgICAgICAgICAoaWYgKGFu ZCB0YWtlPyAocHJlZCBpbnB1dCkpCisgICAgICAgICAgICAgICAgKHJlZHVjZXIgcmVzdWx0 IGlucHV0KQorICAgICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgICAgICAgKHNl dCEgdGFrZT8gI2YpCisgICAgICAgICAgICAgICAgICAoZW5zdXJlLXJlZHVjZWQgKHJldGYg cmVzdWx0IGlucHV0KSkpKSkpKSkpKSkKKworKGRlZmluZSAodGNvbmNhdGVuYXRlIHJlZHVj ZXIpCisgIChsZXQgKChwcmVzZXJ2aW5nLXJlZHVjZXIgKHByZXNlcnZpbmctcmVkdWNlZCBy ZWR1Y2VyKSkpCisgICAgKGNhc2UtbGFtYmRhCisgICAgICAoKCkgKHJlZHVjZXIpKQorICAg ICAgKChyZXN1bHQpIChyZWR1Y2VyIHJlc3VsdCkpCisgICAgICAoKHJlc3VsdCBpbnB1dCkK KyAgICAgICAobGlzdC1yZWR1Y2UgcHJlc2VydmluZy1yZWR1Y2VyIHJlc3VsdCBpbnB1dCkp KSkpCisKKyhkZWZpbmUgKHRhcHBlbmQtbWFwIGYpCisgIChjb21wb3NlICh0bWFwIGYpIHRj b25jYXRlbmF0ZSkpCisKKyhkZWZpbmUgKHRmbGF0dGVuIHJlZHVjZXIpCisgICJ0ZmxhdHRl biBpcyBhIHRyYW5zZHVjZXIgdGhhdCBmbGF0dGVucyBhbnkgbGlzdCBwYXNzZWQgdGhyb3Vn aCBpdC4KK0BleGFtcGxlCisobGlzdC10cmFuc2R1Y2UgdGZsYXR0ZW4gY29uaiAobGlzdCAx IDIgKGxpc3QgMyA0ICcoNSA2KSA3IDgpKSkKK0ByZXN1bHR7fSAoMSAyIDMgNCA1IDYgNyA4 KQorQGVuZCBleGFtcGxlIgorICAoY2FzZS1sYW1iZGEKKyAgICAoKCkgJygpKQorICAgICgo cmVzdWx0KSAocmVkdWNlciByZXN1bHQpKQorICAgICgocmVzdWx0IGlucHV0KQorICAgICAo aWYgKGxpc3Q/IGlucHV0KQorICAgICAgICAgKGxpc3QtcmVkdWNlIChwcmVzZXJ2aW5nLXJl ZHVjZWQgKHRmbGF0dGVuIHJlZHVjZXIpKSByZXN1bHQgaW5wdXQpCisgICAgICAgICAocmVk dWNlciByZXN1bHQgaW5wdXQpKSkpKQorCisKKyhkZWZpbmUgdGRlbGV0ZS1uZWlnaGJvci1k dXBsaWNhdGVzCisgIChjYXNlLWxhbWJkYQorICAgICgoKSAodGRlbGV0ZS1uZWlnaGJvci1k dXBsaWNhdGVzIGVxdWFsPykpCisgICAgKChlcXVhbGl0eS1wcmVkPykgCisgICAgIChsYW1i ZGEgKHJlZHVjZXIpCisgICAgICAgKGxldCAoKHByZXYgbm90aGluZykpCisgICAgICAgICAo Y2FzZS1sYW1iZGEKKyAgICAgICAgICAgKCgpIChyZWR1Y2VyKSkKKyAgICAgICAgICAgKChy ZXN1bHQpIChyZWR1Y2VyIHJlc3VsdCkpCisgICAgICAgICAgICgocmVzdWx0IGlucHV0KQor ICAgICAgICAgICAgKGlmIChlcXVhbGl0eS1wcmVkPyBwcmV2IGlucHV0KQorICAgICAgICAg ICAgICAgIHJlc3VsdAorICAgICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgICAg ICAgKHNldCEgcHJldiBpbnB1dCkKKyAgICAgICAgICAgICAgICAgIChyZWR1Y2VyIHJlc3Vs dCBpbnB1dCkpKSkpKSkpKSkKKworCisoZGVmaW5lKiAodGRlbGV0ZS1kdXBsaWNhdGVzICM6 b3B0aW9uYWwgKGVxdWFsaXR5LXByZWQ/IGVxdWFsPykpCisgICJ0ZGVsZWRlLWR1cGxpY2F0 ZXMgaXMgYSB0cmFuc2R1Y2VyIHRoYXQgZGVsZXRlcyBhbnkgc3Vic2VxdWVudCBkdXBsaWNh dGUKK2VsZW1lbnRzLiBDb21wYXJpc29ucyBpcyBkb25lIHVzaW5nIEB2YXJ7ZXF1YWxpdHkt cHJlZD99LCB3aGljaCBkZWZhdWx0cwordG8gQGNvZGV7ZXF1YWw/fS4iCisgIChsYW1iZGEg KHJlZHVjZXIpCisgICAgKGxldCAoKGFscmVhZHktc2VlbiAoc3JmaTY5Om1ha2UtaGFzaC10 YWJsZSBlcXVhbGl0eS1wcmVkPykpKQorICAgICAgKGNhc2UtbGFtYmRhCisgICAgICAgICgo KSAocmVkdWNlcikpCisgICAgICAgICgocmVzdWx0KSAocmVkdWNlciByZXN1bHQpKQorICAg ICAgICAoKHJlc3VsdCBpbnB1dCkKKyAgICAgICAgIChpZiAoc3JmaTY5Omhhc2gtdGFibGUt ZXhpc3RzPyBhbHJlYWR5LXNlZW4gaW5wdXQpCisgICAgICAgICAgICAgcmVzdWx0CisgICAg ICAgICAgICAgKGJlZ2luCisgICAgICAgICAgICAgICAoc3JmaTY5Omhhc2gtdGFibGUtc2V0 ISBhbHJlYWR5LXNlZW4gaW5wdXQgI3QpCisgICAgICAgICAgICAgICAocmVkdWNlciByZXN1 bHQgaW5wdXQpKSkpKSkpKQorCisoZGVmaW5lICh0c2VnbWVudCBuKQorICAidHNlZ21lbnQg cmV0dXJucyBhIHRyYW5zZHVjZXIgdGhhdCBwYXJ0aXRpb25zIHRoZSBpbnB1dCBpbnRvCits aXN0cyBvZiBAdmFye259IGl0ZW1zLiBJZiB0aGUgaW5wdXQgc3RvcHMgaXQgZmx1c2hlcyBh bnkKK2FjY3VtdWxhdGVkIHN0YXRlLCB3aGljaCBtYXkgYmUgc2hvcnRlciB0aGFuIEB2YXJ7 bn0uIgorICAoaWYgKG5vdCAoYW5kIChpbnRlZ2VyPyBuKSAocG9zaXRpdmU/IG4pKSkKKyAg ICAgIChlcnJvciAiYXJndW1lbnQgdG8gdHNlZ21lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIGlu dGVnZXIiKQorICAgICAgKGxhbWJkYSAocmVkdWNlcikKKyAgICAgICAgKGxldCAoKGkgMCkK KyAgICAgICAgICAgICAgKGNvbGxlY3QgKG1ha2UtdmVjdG9yIG4pKSkKKyAgICAgICAgICAo Y2FzZS1sYW1iZGEKKyAgICAgICAgICAgICgoKSAocmVkdWNlcikpCisgICAgICAgICAgICAo KHJlc3VsdCkKKyAgICAgICAgICAgICA7OyBpZiB0aGVyZSBpcyBhbnl0aGluZyBjb2xsZWN0 ZWQgd2hlbiB3ZSBhcmUgYXNrZWQgdG8gcXVpdAorICAgICAgICAgICAgIDs7IHdlIGZsdXNo IGl0IHRvIHRoZSByZW1haW5pbmcgdHJhbnNkdWNlcnMKKyAgICAgICAgICAgICAobGV0ICgo cmVzdWx0CisgICAgICAgICAgICAgICAgICAgIChpZiAoemVybz8gaSkKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICAgKHJlZHVjZXIg cmVzdWx0ICh2ZWN0b3ItPmxpc3QgY29sbGVjdCAwIGkpKSkpKQorICAgICAgICAgICAgICAg KHNldCEgaSAwKQorICAgICAgICAgICAgICAgOzsgbm93IGZpbmFsbHksIHBhc3MgaXQgZG93 bnN0cmVhbXMKKyAgICAgICAgICAgICAgIChpZiAocmVkdWNlZD8gcmVzdWx0KQorICAgICAg ICAgICAgICAgICAgIChyZWR1Y2VyICh1bnJlZHVjZSByZXN1bHQpKQorICAgICAgICAgICAg ICAgICAgIChyZWR1Y2VyIHJlc3VsdCkpKSkKKyAgICAgICAgICAgICgocmVzdWx0IGlucHV0 KQorICAgICAgICAgICAgICh2ZWN0b3Itc2V0ISBjb2xsZWN0IGkgaW5wdXQpCisgICAgICAg ICAgICAgKHNldCEgaSAoKyBpIDEpKQorICAgICAgICAgICAgIDs7IElmIHdlIGhhdmUgY29s bGVjdGVkIGVub3VnaCBpbnB1dCB3ZSBjYW4gcGFzcyBpdCBvbiBkb3duc3RyZWFtCisgICAg ICAgICAgICAgKGlmICg8IGkgbikKKyAgICAgICAgICAgICAgICAgcmVzdWx0CisgICAgICAg ICAgICAgICAgIChsZXQgKChuZXh0LWlucHV0ICh2ZWN0b3ItPmxpc3QgY29sbGVjdCAwIGkp KSkKKyAgICAgICAgICAgICAgICAgICAoc2V0ISBpIDApCisgICAgICAgICAgICAgICAgICAg KHJlZHVjZXIgcmVzdWx0IG5leHQtaW5wdXQpKSkpKSkpKSkKKworKGRlZmluZSAodHBhcnRp dGlvbiBmKQorICAidHBhcnRpdGlvbiByZXR1cm5zIGEgdHJhbnNkdWNlciB0aGF0IHBhcnRp dGlvbnMgYW55IGlucHV0IGJ5IHdoZW5ldmVyCitAY29kZXsoZiBpbnB1dCl9IGNoYW5nZXMg dmFsdWUuICIKKyAgKGxhbWJkYSAocmVkdWNlcikKKyAgICAobGV0KiAoKHByZXYgbm90aGlu ZykKKyAgICAgICAgICAgKGNvbGxlY3QgJygpKSkKKyAgICAgIChjYXNlLWxhbWJkYQorICAg ICAgICAoKCkgKHJlZHVjZXIpKQorICAgICAgICAoKHJlc3VsdCkKKyAgICAgICAgIChsZXQg KChyZXN1bHQKKyAgICAgICAgICAgICAgICAoaWYgKG51bGw/IGNvbGxlY3QpCisgICAgICAg ICAgICAgICAgICAgIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAocmVkdWNlciByZXN1 bHQgKHJldmVyc2UhIGNvbGxlY3QpKSkpKQorICAgICAgICAgICAoc2V0ISBjb2xsZWN0ICco KSkKKyAgICAgICAgICAgKGlmIChyZWR1Y2VkPyByZXN1bHQpCisgICAgICAgICAgICAgICAo cmVkdWNlciAodW5yZWR1Y2UgcmVzdWx0KSkKKyAgICAgICAgICAgICAgIChyZWR1Y2VyIHJl c3VsdCkpKSkKKyAgICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAgICAgICAobGV0ICgoZm91 dCAoZiBpbnB1dCkpKQorICAgICAgICAgICAoY29uZAorICAgICAgICAgICAgKChvciAoZXF1 YWw/IGZvdXQgcHJldikgKG5vdGhpbmc/IHByZXYpKSA7IGNvbGxlY3QKKyAgICAgICAgICAg ICAoc2V0ISBwcmV2IGZvdXQpCisgICAgICAgICAgICAgKHNldCEgY29sbGVjdCAoY29ucyBp bnB1dCBjb2xsZWN0KSkKKyAgICAgICAgICAgICByZXN1bHQpCisgICAgICAgICAgICAoZWxz ZSA7IGZsdXNoIHdoYXQgd2UgY29sbGVjdGVkIGFscmVhZHkgdG8gdGhlIHJlZHVjZXIKKyAg ICAgICAgICAgICAobGV0ICgobmV4dC1pbnB1dCAgKHJldmVyc2UhIGNvbGxlY3QpKSkKKyAg ICAgICAgICAgICAgIChzZXQhIHByZXYgZm91dCkKKyAgICAgICAgICAgICAgIChzZXQhIGNv bGxlY3QgKGxpc3QgaW5wdXQpKQorICAgICAgICAgICAgICAgKHJlZHVjZXIgcmVzdWx0IG5l eHQtaW5wdXQpKSkpKSkpKSkpCisKKyhkZWZpbmUgKHRhZGQtYmV0d2VlbiBlbGVtKQorICAi UmV0dXJucyBhIHRyYW5zZHVjZXIgdGhhdCBpbnRlcnBvc2VzIEB2YXJ7ZWxlbX0gYmV0d2Vl biBlYWNoIHZhbHVlIHB1c2hlZAordGhyb3VnaCB0aGUgdHJhbnNkdWN0aW9uLiIKKyAgKGxh bWJkYSAocmVkdWNlcikKKyAgICAobGV0ICgoc2VuZC1lbGVtPyAjZikpCisgICAgICAoY2Fz ZS1sYW1iZGEKKyAgICAgICAgKCgpIChyZWR1Y2VyKSkKKyAgICAgICAgKChyZXN1bHQpCisg ICAgICAgICAocmVkdWNlciByZXN1bHQpKQorICAgICAgICAoKHJlc3VsdCBpbnB1dCkKKyAg ICAgICAgIChpZiBzZW5kLWVsZW0/CisgICAgICAgICAgICAgKGxldCAoKHJlc3VsdCAocmVk dWNlciByZXN1bHQgZWxlbSkpKQorICAgICAgICAgICAgICAgKGlmIChyZWR1Y2VkPyByZXN1 bHQpCisgICAgICAgICAgICAgICAgICAgcmVzdWx0CisgICAgICAgICAgICAgICAgICAgKHJl ZHVjZXIgcmVzdWx0IGlucHV0KSkpCisgICAgICAgICAgICAgKGJlZ2luCisgICAgICAgICAg ICAgICAoc2V0ISBzZW5kLWVsZW0/ICN0KQorICAgICAgICAgICAgICAgKHJlZHVjZXIgcmVz dWx0IGlucHV0KSkpKSkpKSkKKworKGRlZmluZSogKHRlbnVtZXJhdGUgIzpvcHRpb25hbCAo biAwKSkKKyAgIkluZGV4ZXMgZXZlcnkgdmFsdWUgcGFzc2VkIHRocm91Z2ggaW50byBhIGNv bnMgcGFpciBhcworQGNvZGV7KGluZGV4IC4gdmFsdWUpfS4gU3RhcnRzIGF0IEB2YXJ7bn0g d2hpY2ggZGVmYXVsdHMgdG8gMC4iCisgIChsYW1iZGEgKHJlZHVjZXIpCisgICAgKGxldCAo KG4gbikpCisgICAgICAoY2FzZS1sYW1iZGEKKyAgICAgICAgKCgpIChyZWR1Y2VyKSkKKyAg ICAgICAgKChyZXN1bHQpIChyZWR1Y2VyIHJlc3VsdCkpCisgICAgICAgICgocmVzdWx0IGlu cHV0KQorICAgICAgICAgKGxldCAoKGlucHV0IChjb25zIG4gaW5wdXQpKSkKKyAgICAgICAg ICAgKHNldCEgbiAoKyBuIDEpKQorICAgICAgICAgICAocmVkdWNlciByZXN1bHQgaW5wdXQp KSkpKSkpCisKKyhkZWZpbmUqICh0bG9nICM6b3B0aW9uYWwKKyAgICAgICAgICAgICAgIChs b2ctZnVuY3Rpb24gKGxhbWJkYSAocmVzdWx0IGlucHV0KSAod3JpdGUgaW5wdXQpIChuZXds aW5lKSkpKQorICAobGFtYmRhIChyZWR1Y2VyKQorICAgIChjYXNlLWxhbWJkYQorICAgICAg KCgpIChyZWR1Y2VyKSkKKyAgICAgICgocmVzdWx0KSAocmVkdWNlciByZXN1bHQpKQorICAg ICAgKChyZXN1bHQgaW5wdXQpCisgICAgICAgKGxvZy1mdW5jdGlvbiByZXN1bHQgaW5wdXQp CisgICAgICAgKHJlZHVjZXIgcmVzdWx0IGlucHV0KSkpKSkKKworCisKKwpkaWZmIC0tZ2l0 IGEvbW9kdWxlL3NyZmkvc3JmaS0xNzEvZ251LnNjbSBiL21vZHVsZS9zcmZpL3NyZmktMTcx L2dudS5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi40NWE0ZTE5 YWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGUvc3JmaS9zcmZpLTE3MS9nbnUuc2NtCkBA IC0wLDAgKzEsNjUgQEAKKzs7IAlDb3B5cmlnaHQgKEMpIDIwMjAgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCis7OworOzsgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOzsgbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworOzsgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCis7 OyB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCis7OyAKKzs7IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCis7OyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorOzsgCis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCis7OyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCis7OyBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBCisKKyhkZWZpbmUtbW9kdWxlIChzcmZpIHNyZmktMTcxIGdudSkK KyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMTcxKQorICAjOnVzZS1tb2R1bGUgKHNyZmkg c3JmaS0xNzEgbWV0YSkKKyAgIzpleHBvcnQgKHRiYXRjaCB0Zm9sZCkpCisKKworKGRlZmlu ZSB0YmF0Y2gKKyAgKGNhc2UtbGFtYmRhCisgICAgKChyZWR1Y2VyKQorICAgICAodGJhdGNo IGlkZW50aXR5IHJlZHVjZXIpKQorICAgICgodCByKQorICAgICAobGFtYmRhIChyZWR1Y2Vy KQorICAgICAgIChsZXQgKChjdXItcmVkdWNlciAodCByKSkKKyAgICAgICAgICAgICAoY3Vy LXN0YXRlIChyKSkpCisgICAgICAgICAoY2FzZS1sYW1iZGEKKyAgICAgICAgICAgKCgpIChy ZWR1Y2VyKSkKKyAgICAgICAgICAgKChyZXN1bHQpCisgICAgICAgICAgICAoaWYgKGVxdWFs PyBjdXItc3RhdGUgKGN1ci1yZWR1Y2VyKSkKKyAgICAgICAgICAgICAgICAocmVkdWNlciBy ZXN1bHQpCisgICAgICAgICAgICAgICAgKGxldCAoKG5ldy1yZXMgKHJlZHVjZXIgcmVzdWx0 IChjdXItcmVkdWNlciBjdXItc3RhdGUpKSkpCisgICAgICAgICAgICAgICAgICAoaWYgKHJl ZHVjZWQ/IG5ldy1yZXMpCisgICAgICAgICAgICAgICAgICAgICAgKHJlZHVjZXIgKHVucmVk dWNlIG5ldy1yZXMpKQorICAgICAgICAgICAgICAgICAgICAgIChyZWR1Y2VyIG5ldy1yZXMp KSkpKQorICAgICAgICAgICAoKHJlc3VsdCB2YWx1ZSkKKyAgICAgICAgICAgIChsZXQgKCh2 YWwgKGN1ci1yZWR1Y2VyIGN1ci1zdGF0ZSB2YWx1ZSkpKQorICAgICAgICAgICAgICAoY29u ZAorICAgICAgICAgICAgICAgOzsgY3VyLXJlZHVjZXIgaXMgZG9uZS4gUHVzaCB2YWx1ZSBk b3duc3RyZWFtCisgICAgICAgICAgICAgICA7OyByZS1pbnN0YW50aWF0ZSB0aGUgc3RhdGUg YW5kIHRoZSBjdXItcmVkdWNlcgorICAgICAgICAgICAgICAgKChyZWR1Y2VkPyB2YWwpCisg ICAgICAgICAgICAgICAgKGxldCAoKHVucmVkdWNlZC12YWwgKHVucmVkdWNlIHZhbCkpKQor ICAgICAgICAgICAgICAgICAgKHNldCEgY3VyLXJlZHVjZXIgKHQgcikpCisgICAgICAgICAg ICAgICAgICAoc2V0ISBjdXItc3RhdGUgKGN1ci1yZWR1Y2VyKSkKKyAgICAgICAgICAgICAg ICAgIChyZWR1Y2VyIHJlc3VsdCAoY3VyLXJlZHVjZXIgdW5yZWR1Y2VkLXZhbCkpKSkKKyAg ICAgICAgICAgICAgIChlbHNlCisgICAgICAgICAgICAgICAgKHNldCEgY3VyLXN0YXRlIHZh bCkKKyAgICAgICAgICAgICAgICByZXN1bHQpKSkpKSkpKSkpCisKKworKGRlZmluZSogKHRm b2xkIHJlZHVjZXIgIzpvcHRpb25hbCAoc2VlZCAocmVkdWNlcikpKQorICAobGFtYmRhIChy KQorICAgIChsZXQgKChzdGF0ZSBzZWVkKSkKKyAgICAgIChjYXNlLWxhbWJkYQorICAgICAg ICAoKCkgKHIpKQorICAgICAgICAoKHJlc3VsdCkgKHIgcmVzdWx0KSkKKyAgICAgICAgKChy ZXN1bHQgdmFsdWUpCisgICAgICAgICAoc2V0ISBzdGF0ZSAocmVkdWNlciBzdGF0ZSB2YWx1 ZSkpCisgICAgICAgICAoaWYgKHJlZHVjZWQ/IHN0YXRlKQorICAgICAgICAgICAgIChyZWR1 Y2VkIChyZWR1Y2VyICh1bnJlZHVjZSBzdGF0ZSkpKQorICAgICAgICAgICAgIChyIHJlc3Vs dCBzdGF0ZSkpKSkpKSkKZGlmZiAtLWdpdCBhL21vZHVsZS9zcmZpL3NyZmktMTcxL21ldGEu c2NtIGIvbW9kdWxlL3NyZmkvc3JmaS0xNzEvbWV0YS5zY20KbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwLi43NzFmNzA3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1 bGUvc3JmaS9zcmZpLTE3MS9tZXRhLnNjbQpAQCAtMCwwICsxLDExMyBAQAorOzsgCUNvcHly aWdodCAoQykgMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzs7Cis7OyBU aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yCis7OyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCis7OyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKzs7IHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7IAorOzsgVGhp cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKzs7IExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7OyAKKzs7IFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK Kzs7IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKzs7IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKworCisoZGVm aW5lLW1vZHVsZSAoc3JmaSBzcmZpLTE3MSBtZXRhKQorICAjOnVzZS1tb2R1bGUgKHNyZmkg c3JmaS05KQorICAjOnVzZS1tb2R1bGUgKChybnJzIGJ5dGV2ZWN0b3JzKSAjOnNlbGVjdCAo Ynl0ZXZlY3Rvci1sZW5ndGggYnl0ZXZlY3Rvci11OC1yZWYpKQorICAjOmV4cG9ydCAocmVk dWNlZCByZWR1Y2VkPworICAgICAgICAgICAgdW5yZWR1Y2UKKyAgICAgICAgICAgIGVuc3Vy ZS1yZWR1Y2VkCisgICAgICAgICAgICBwcmVzZXJ2aW5nLXJlZHVjZWQKKworICAgICAgICAg ICAgbGlzdC1yZWR1Y2UKKyAgICAgICAgICAgIHZlY3Rvci1yZWR1Y2UKKyAgICAgICAgICAg IHN0cmluZy1yZWR1Y2UKKyAgICAgICAgICAgIGJ5dGV2ZWN0b3ItdTgtcmVkdWNlCisgICAg ICAgICAgICBwb3J0LXJlZHVjZQorICAgICAgICAgICAgZ2VuZXJhdG9yLXJlZHVjZSkpCisK KworOzsgQSByZWR1Y2VkIHZhbHVlIGlzIHN0b3BzIHRoZSB0cmFuc2R1Y3Rpb24uCisoZGVm aW5lLXJlY29yZC10eXBlIDxyZWR1Y2VkPgorICAocmVkdWNlZCB2YWwpCisgIHJlZHVjZWQ/ CisgICh2YWwgdW5yZWR1Y2UpKQorCisoZGVmaW5lIChlbnN1cmUtcmVkdWNlZCB4KQorICAi RW5zdXJlIHRoYXQgQHZhcnt4fSBpcyByZWR1Y2VkIgorICAoaWYgKHJlZHVjZWQ/IHgpCisg ICAgICB4CisgICAgICAocmVkdWNlZCB4KSkpCisKKzs7IGhlbHBlciBmdW5jdGlvbiB0aGF0 IHdyYXBzIGEgcmVkdWNlZCB2YWx1ZSB0d2ljZSBzaW5jZSByZWR1Y2luZyBmdW5jdGlvbnMg KGxpa2UgbGlzdC1yZWR1Y2UpCis7OyB1bndyYXBzIHRoZW0uIHRjb25jYXRlbmF0ZSBpcyBh IGdvb2QgZXhhbXBsZTogaXQgcmUtdXNlcyBpdCdzIHJlZHVjZXIgb24gaXQncyBpbnB1dCB1 c2luZyBsaXN0LXJlZHVjZS4KKzs7IElmIHRoYXQgcmVkdWN0aW9uIGZpbmlzaGVzIGVhcmx5 IGFuZCByZXR1cm5zIGEgcmVkdWNlZCB2YWx1ZSwgbGlzdC1yZWR1Y2Ugd291bGQgInVucmVk dWNlIgorOzsgdGhhdCB2YWx1ZSBhbmQgdHJ5IHRvIGNvbnRpbnVlIHRoZSB0cmFuc2R1Y2lu ZyBwcm9jZXNzLgorKGRlZmluZSAocHJlc2VydmluZy1yZWR1Y2VkIHJlZHVjZXIpCisgIChs YW1iZGEgKGEgYikKKyAgICAobGV0ICgocmV0dXJuIChyZWR1Y2VyIGEgYikpKQorICAgICAg KGlmIChyZWR1Y2VkPyByZXR1cm4pCisgICAgICAgICAgKHJlZHVjZWQgcmV0dXJuKQorICAg ICAgICAgIHJldHVybikpKSkKKworOzsgVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgdG9mdSBp cyBjb29rZWQKKyhkZWZpbmUgKGxpc3QtcmVkdWNlIGYgaWRlbnRpdHkgbHN0KQorICAoaWYg KG51bGw/IGxzdCkKKyAgICAgIGlkZW50aXR5CisgICAgICAobGV0ICgodiAoZiBpZGVudGl0 eSAoY2FyIGxzdCkpKSkKKyAgICAgICAgKGlmIChyZWR1Y2VkPyB2KQorICAgICAgICAgICAg KHVucmVkdWNlIHYpCisgICAgICAgICAgICAobGlzdC1yZWR1Y2UgZiB2IChjZHIgbHN0KSkp KSkpCisKKyhkZWZpbmUgKHZlY3Rvci1yZWR1Y2UgZiBpZGVudGl0eSB2ZWMpCisgIChsZXQg KChsZW4gKHZlY3Rvci1sZW5ndGggdmVjKSkpCisgICAgKGxldCBsb29wICgoaSAwKSAoYWNj IGlkZW50aXR5KSkKKyAgICAgIChpZiAoPSBpIGxlbikKKyAgICAgICAgICBhY2MKKyAgICAg ICAgICAobGV0ICgoYWNjIChmIGFjYyAodmVjdG9yLXJlZiB2ZWMgaSkpKSkKKyAgICAgICAg ICAgIChpZiAocmVkdWNlZD8gYWNjKQorICAgICAgICAgICAgICAgICh1bnJlZHVjZSBhY2Mp CisgICAgICAgICAgICAgICAgKGxvb3AgKCsgaSAxKSBhY2MpKSkpKSkpCisKKyhkZWZpbmUg KHN0cmluZy1yZWR1Y2UgZiBpZGVudGl0eSBzdHIpCisgIChsZXQgKChsZW4gKHN0cmluZy1s ZW5ndGggc3RyKSkpCisgICAgKGxldCBsb29wICgoaSAwKSAoYWNjIGlkZW50aXR5KSkKKyAg ICAgIChpZiAoPSBpIGxlbikKKyAgICAgICAgICBhY2MKKyAgICAgICAgICAobGV0ICgoYWNj IChmIGFjYyAoc3RyaW5nLXJlZiBzdHIgaSkpKSkKKyAgICAgICAgICAgIChpZiAocmVkdWNl ZD8gYWNjKQorICAgICAgICAgICAgICAgICh1bnJlZHVjZSBhY2MpCisgICAgICAgICAgICAg ICAgKGxvb3AgKCsgaSAxKSBhY2MpKSkpKSkpCisKKyhkZWZpbmUgKGJ5dGV2ZWN0b3ItdTgt cmVkdWNlIGYgaWRlbnRpdHkgdmVjKQorICAobGV0ICgobGVuIChieXRldmVjdG9yLWxlbmd0 aCB2ZWMpKSkKKyAgICAobGV0IGxvb3AgKChpIDApIChhY2MgaWRlbnRpdHkpKQorICAgICAg KGlmICg9IGkgbGVuKQorICAgICAgICAgIGFjYworICAgICAgICAgIChsZXQgKChhY2MgKGYg YWNjIChieXRldmVjdG9yLXU4LXJlZiB2ZWMgaSkpKSkKKyAgICAgICAgICAgIChpZiAocmVk dWNlZD8gYWNjKQorICAgICAgICAgICAgICAgICh1bnJlZHVjZSBhY2MpCisgICAgICAgICAg ICAgICAgKGxvb3AgKCsgaSAxKSBhY2MpKSkpKSkpCisKKyhkZWZpbmUgKHBvcnQtcmVkdWNl IGYgaWRlbnRpdHkgcmVhZGVyIHBvcnQpCisgIChsZXQgbG9vcCAoKHZhbCAocmVhZGVyIHBv cnQpKSAoYWNjIGlkZW50aXR5KSkKKyAgICAoaWYgKGVvZi1vYmplY3Q/IHZhbCkKKyAgICAg ICAgYWNjCisgICAgICAgIChsZXQgKChhY2MgKGYgYWNjIHZhbCkpKQorICAgICAgICAgIChp ZiAocmVkdWNlZD8gYWNjKQorICAgICAgICAgICAgICAodW5yZWR1Y2UgYWNjKQorICAgICAg ICAgICAgICAobG9vcCAocmVhZGVyIHBvcnQpIGFjYykpKSkpKQorCisoZGVmaW5lIChnZW5l cmF0b3ItcmVkdWNlIGYgaWRlbnRpdHkgZ2VuKQorICAobGV0IGxvb3AgKCh2YWwgKGdlbikp IChhY2MgaWRlbnRpdHkpKQorICAgIChpZiAoZW9mLW9iamVjdD8gdmFsKQorICAgICAgICBh Y2MKKyAgICAgICAgKGxldCAoKGFjYyAoZiBhY2MgdmFsKSkpCisgICAgICAgICAgKGlmIChy ZWR1Y2VkPyBhY2MpCisgICAgICAgICAgICAgICh1bnJlZHVjZSBhY2MpCisgICAgICAgICAg ICAgIChsb29wIChnZW4pIGFjYykpKSkpKQorCmRpZmYgLS1naXQgYS90ZXN0LXN1aXRlL01h a2VmaWxlLmFtIGIvdGVzdC1zdWl0ZS9NYWtlZmlsZS5hbQppbmRleCAzODEwMTk3ZTIuLmNh ZmE1YzkyYiAxMDA2NDQKLS0tIGEvdGVzdC1zdWl0ZS9NYWtlZmlsZS5hbQorKysgYi90ZXN0 LXN1aXRlL01ha2VmaWxlLmFtCkBAIC0xNjAsNiArMTYwLDcgQEAgU0NNX1RFU1RTID0gdGVz dHMvMDAtaW5pdGlhbC1lbnYudGVzdAkJXAogCSAgICB0ZXN0cy9zcmZpLTk4LnRlc3QJCQlc CiAJICAgIHRlc3RzL3NyZmktMTA1LnRlc3QJCQlcCiAJICAgIHRlc3RzL3NyZmktMTExLnRl c3QJCQlcCisgICAgICAgICAgICB0ZXN0cy9zcmZpLTE3MS50ZXN0ICAgICAgICAgICAgICAg ICBcCiAJICAgIHRlc3RzL3NyZmktNC50ZXN0CQkJXAogCSAgICB0ZXN0cy9zcmZpLTkudGVz dAkJCVwKIAkgICAgdGVzdHMvc3RhdHByb2YudGVzdAkJCVwKZGlmZiAtLWdpdCBhL3Rlc3Qt c3VpdGUvdGVzdHMvc3JmaS0xNzEudGVzdCBiL3Rlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xNzEu dGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmM2ZDU3NGFmMgot LS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xNzEudGVzdApAQCAt MCwwICsxLDE5NSBAQAorOzsgVE9ETzogdGVzdCBhbGwgdHJhbnNkdWNlcnMgdGhhdCB0YWtl IGFuIGVxdWFsaXR5IHByZWRpY2F0ZQorOzsgVE9ETzogdGVzdCB0cmVwbGFjZSB3aXRoIGFs bCBraW5kcyBvZiBoYXNoIHRhYmxlcworCisoZGVmaW5lLW1vZHVsZSAodGVzdC1zcmZpLTE3 MSkKKyAgIzp1c2UtbW9kdWxlICh0ZXN0LXN1aXRlIGxpYikKKyAgIzp1c2UtbW9kdWxlIChp Y2UtOSBoYXNoLXRhYmxlKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xNzEpCisgICM6 dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTE3MSBnbnUpCisgICM6dXNlLW1vZHVsZSAocm5ycyBi eXRldmVjdG9ycykKKyAgIzp1c2UtbW9kdWxlICgocm5ycyBoYXNodGFibGVzKSAjOnByZWZp eCBybnJzOikKKyAgIzp1c2UtbW9kdWxlICgoc3JmaSBzcmZpLTY5KSAjOnByZWZpeCBzcmZp OikpCisKKyhkZWZpbmUgKGFkZDEgeCkgKCsgeCAxKSkKKworCisoZGVmaW5lIG51bWVyaWMt bGlzdCAoaW90YSA1KSkKKyhkZWZpbmUgbnVtZXJpYy12ZWMgKGxpc3QtPnZlY3RvciBudW1l cmljLWxpc3QpKQorKGRlZmluZSBidiAobGlzdC0+dTh2ZWN0b3IgbnVtZXJpYy1saXN0KSkK KyhkZWZpbmUgdGVzdC1zdHJpbmcgIjAxMjM0NTY3ODlhYmNkZWYiKQorKGRlZmluZSBsaXN0 LW9mLWNoYXJzIChzdHJpbmctPmxpc3QgdGVzdC1zdHJpbmcpKQorCisKKzs7IGZvciB0ZXN0 aW5nIGFsbCB0cmVwbGFjZSB2YXJpYXRpb25zCisoZGVmaW5lIHJlcGxhY2UtYWxpc3QgJygo MSAuIHMpICgyIC4gYykgKDMgLiBoKSAoNCAuIGUpICg1IC4gbSkpKQorKGRlZmluZSBndWls ZS1oYXNodGFibGUgKGFsaXN0LT5oYXNoLXRhYmxlIHJlcGxhY2UtYWxpc3QpKQorKGRlZmlu ZSBzcmZpNjktaGFzaHRhYmxlIChzcmZpOmFsaXN0LT5oYXNoLXRhYmxlIHJlcGxhY2UtYWxp c3QpKQorKGRlZmluZSBybnJzLWhhc2h0YWJsZSAocm5yczptYWtlLWVxLWhhc2h0YWJsZSkp Cisocm5yczpoYXNodGFibGUtc2V0ISBybnJzLWhhc2h0YWJsZSAxICdzKQorKHJucnM6aGFz aHRhYmxlLXNldCEgcm5ycy1oYXNodGFibGUgMiAnYykKKyhybnJzOmhhc2h0YWJsZS1zZXQh IHJucnMtaGFzaHRhYmxlIDMgJ2gpCisocm5yczpoYXNodGFibGUtc2V0ISBybnJzLWhhc2h0 YWJsZSA0ICdlKQorKHJucnM6aGFzaHRhYmxlLXNldCEgcm5ycy1oYXNodGFibGUgNSAnbSkK KyhkZWZpbmUgKHJlcGxhY2UtZnVuY3Rpb24gdmFsKQorICAoY2FzZSB2YWwKKyAgICAoKDEp ICdzKQorICAgICgoMikgJ2MpCisgICAgKCgzKSAnaCkKKyAgICAoKDQpICdlKQorICAgICgo NSkgJ20pCisgICAgKGVsc2UgdmFsKSkpCisKKworOzsgVGVzdCBwcm9jZWR1cmVzIGZvciBw b3J0LXRyYW5zZHVjZQorOzsgYnJva2VuIG91dCB0byBwcm9wZXJseSBjbG9zZSBwb3J0Ciso ZGVmaW5lIChwb3J0LXRyYW5zZHVjZS10ZXN0KQorICAobGV0KiAoKHBvcnQgKG9wZW4taW5w dXQtc3RyaW5nICIwIDEgMiAzIDQiKSkKKyAgICAgICAgKHJlcyAoZXF1YWw/IDE1IChwb3J0 LXRyYW5zZHVjZSAodG1hcCBhZGQxKSArIHJlYWQgKG9wZW4taW5wdXQtc3RyaW5nICIwIDEg MiAzIDQiKSkpKSkKKyAgICAoY2xvc2UtcG9ydCBwb3J0KQorICAgIHJlcykpCisoZGVmaW5l IChwb3J0LXRyYW5zZHVjZS13aXRoLWlkZW50aXR5LXRlc3QpCisgIChsZXQqICgocG9ydCAo b3Blbi1pbnB1dC1zdHJpbmcgIjAgMSAyIDMgNCIpKQorICAgICAgICAgKHJlcyAoZXF1YWw/ IDE1IChwb3J0LXRyYW5zZHVjZSAodG1hcCBhZGQxKSArIDAgcmVhZCAob3Blbi1pbnB1dC1z dHJpbmcgIjAgMSAyIDMgNCIpKSkpKQorICAgIChjbG9zZS1wb3J0IHBvcnQpCisgICAgcmVz KSkKKworKHdpdGgtdGVzdC1wcmVmaXggInRyYW5zZHVjZXJzIgorICAocGFzcy1pZiAidG1h cCIgKGVxdWFsPyAnKDEgMiAzIDQgNSkgKGxpc3QtdHJhbnNkdWNlICh0bWFwIGFkZDEpIHJj b25zIG51bWVyaWMtbGlzdCkpKQorCisgIChwYXNzLWlmICJ0ZmlsdGVyIiAoZXF1YWw/ICco MCAyIDQpIChsaXN0LXRyYW5zZHVjZSAodGZpbHRlciBldmVuPykgcmNvbnMgbnVtZXJpYy1s aXN0KSkpCisKKyAgKHBhc3MtaWYgInRmaWx0ZXIrdG1hcCIgKGVxdWFsPworICAgICAgICAg ICAgICAgICAgICAgICAgICAgJygxIDMgNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IChsaXN0LXRyYW5zZHVjZSAoY29tcG9zZSAodGZpbHRlciBldmVuPykgKHRtYXAgYWRkMSkp IHJjb25zIG51bWVyaWMtbGlzdCkpKQorCisgIChwYXNzLWlmICJ0ZmlsdGVyLW1hcCIKKyAg ICAgICAgICAgKGVxdWFsPyAnKDEgMyA1KQorICAgICAgICAgICAgICAgICAgIChsaXN0LXRy YW5zZHVjZSAodGZpbHRlci1tYXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsYW1iZGEgKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpZiAoZXZlbj8geCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgrIHggMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICNmKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjb25zIG51bWVy aWMtbGlzdCkpKQorCisgIChwYXNzLWlmICJ0cmVtb3ZlIgorICAgICAgICAgICAoZXF1YWw/ IChsaXN0LXRyYW5zZHVjZSAodHJlbW92ZSBjaGFyLWFscGhhYmV0aWM/KSByY291bnQgbGlz dC1vZi1jaGFycykKKyAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXRyYW5zZHVjZSAodHJl bW92ZSBjaGFyLWFscGhhYmV0aWM/KSByY291bnQgdGVzdC1zdHJpbmcpKSkKKworICAocGFz cy1pZiAidHJlcGxhY2Ugd2l0aCBhbGlzdCIKKyAgICAgICAgICAgKGVxdWFsPyAnKHMgYyBo IGUgbSBlICByIG8gYyBrIHMpCisgICAgICAgICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNl ICh0cmVwbGFjZSByZXBsYWNlLWFsaXN0KSByY29ucyAnKDEgMiAzIDQgNSA0IHIgbyBjIGsg cykgKSkpCisKKyAgKHBhc3MtaWYgInRyZXBsYWNlIHdpdGggcmVwbGFjZS1mdW5jdGlvbiIK KyAgICAgICAgICAgKGVxdWFsPyAnKHMgYyBoIGUgbSBlICByIG8gYyBrIHMpCisgICAgICAg ICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0cmVwbGFjZSByZXBsYWNlLWZ1bmN0aW9u KSByY29ucyAnKDEgMiAzIDQgNSA0IHIgbyBjIGsgcykpKSkKKworCisgIChwYXNzLWlmICJ0 cmVwbGFjZSB3aXRoIGd1aWxlIGhhc2gtdGFibGUiCisgICAgICAgICAgIChlcXVhbD8gJyhz IGMgaCBlIG0gZSAgciBvIGMgayBzKQorICAgICAgICAgICAgICAgICAgIChsaXN0LXRyYW5z ZHVjZSAodHJlcGxhY2UgZ3VpbGUtaGFzaHRhYmxlKSByY29ucyAnKDEgMiAzIDQgNSA0IHIg byBjIGsgcykpKSkKKworICAocGFzcy1pZiAidHJlcGxhY2Ugd2l0aCBzcmZpLTY5IGhhc2gt dGFibGUiCisgICAgICAgICAgIChlcXVhbD8gJyhzIGMgaCBlIG0gZSAgciBvIGMgayBzKQor ICAgICAgICAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodHJlcGxhY2Ugc3JmaTY5LWhh c2h0YWJsZSkgcmNvbnMgJygxIDIgMyA0IDUgNCByIG8gYyBrIHMpKSkpCisKKyAgKHBhc3Mt aWYgInRyZXBsYWNlIHdpdGggcm5ycyBoYXNoLXRhYmxlIgorICAgICAgICAgICAoZXF1YWw/ ICcocyBjIGggZSBtIGUgIHIgbyBjIGsgcykKKyAgICAgICAgICAgICAgICAgICAobGlzdC10 cmFuc2R1Y2UgKHRyZXBsYWNlIHJucnMtaGFzaHRhYmxlKSByY29ucyAnKDEgMiAzIDQgNSA0 IHIgbyBjIGsgcykpKSkKKworCisKKyAgKHBhc3MtaWYgInR0YWtlIgorICAgICAgICAgICAo ZXF1YWw/IDYgKGxpc3QtdHJhbnNkdWNlICh0dGFrZSA0KSArIG51bWVyaWMtbGlzdCkpKQor CisgIChwYXNzLWlmICJ0ZHJvcCIKKyAgICAgICAgICAgKGVxdWFsPyA3IChsaXN0LXRyYW5z ZHVjZSAodGRyb3AgMykgKyBudW1lcmljLWxpc3QpKSkKKworICAocGFzcy1pZiAidGRyb3At d2hpbGUiCisgICAgICAgICAgIChlcXVhbD8gJygzIDQpIChsaXN0LXRyYW5zZHVjZSAodGRy b3Atd2hpbGUgKGxhbWJkYSAoeCkgKDwgeCAzKSkpIHJjb25zIG51bWVyaWMtbGlzdCkpKQor CisgIChwYXNzLWlmICJ0dGFrZS13aGlsZSIgKGVxdWFsPyAnKDAgMSAyKSAobGlzdC10cmFu c2R1Y2UgKHR0YWtlLXdoaWxlIChsYW1iZGEgKHgpICg8IHggMykpKSByY29ucyBudW1lcmlj LWxpc3QpKSkKKworICAocGFzcy1pZiAidGNvbmNhdGVuYXRlIgorICAgICAgICAgICAoZXF1 YWw/ICcoMCAxIDIgMyA0KSAobGlzdC10cmFuc2R1Y2UgdGNvbmNhdGVuYXRlIHJjb25zICco KDAgMSkgKDIgMykgKDQpKSkpKQorCisgIChwYXNzLWlmICJ0YXBwZW5kLW1hcCIKKyAgICAg ICAgICAgKGVxdWFsPyAnKDEgMiAyIDQgMyA2KSAobGlzdC10cmFuc2R1Y2UgKHRhcHBlbmQt bWFwIChsYW1iZGEgKHgpIChsaXN0IHggKCogeCAyKSkpKSByY29ucyAnKDEgMiAzKSkpKQor CisgIChwYXNzLWlmICJ0ZGVsZXRlLW5laWdoYm9yLWR1cGxpY2F0ZXMiCisgICAgICAgICAg IChlcXVhbD8gJygxIDIgMSAyIDMpIChsaXN0LXRyYW5zZHVjZSAodGRlbGV0ZS1uZWlnaGJv ci1kdXBsaWNhdGVzKSByY29ucyAnKDEgMSAxIDIgMiAxIDIgMyAzKSkpKQorCisgIChwYXNz LWlmICJ0ZGVsZXRlLW5laWdoYm9yLWR1cGxpY2F0ZXMgd2l0aCBlcXVhbGl0eSBwcmVkaWNh dGUiCisgICAgICAgICAgIChlcXVhbD8KKyAgICAgICAgICAgICcoYSBiIGMgImhlaiIgImhl aiIpCisgICAgICAgICAgICAobGlzdC10cmFuc2R1Y2UgKHRkZWxldGUtbmVpZ2hib3ItZHVw bGljYXRlcyBlcT8pIHJjb25zIChsaXN0ICdhICdhICdiICdjICdjICJoZWoiIChzdHJpbmcg I1xoICNcZSAjXGopKSkpKQorCisgIChwYXNzLWlmICJ0ZGVsZXRlLWR1cGxpY2F0ZXMiCisg ICAgICAgICAgIChlcXVhbD8gJygxIDIgMyA0KSAobGlzdC10cmFuc2R1Y2UgKHRkZWxldGUt ZHVwbGljYXRlcykgcmNvbnMgJygxIDEgMiAxIDIgMyAzIDEgMiAzIDQpKSkpCisKKyAgKHBh c3MtaWYgInRkZWxldGUtZHVwbGljYXRlcyB3aXRoIHByZWRpY2F0ZSIKKyAgICAgICAgICAg KGVxdWFsPyAnKCJoZWoiICJob3BwIikKKyAgICAgICAgICAgICAgICAgICAobGlzdC10cmFu c2R1Y2UgKHRkZWxldGUtZHVwbGljYXRlcyBzdHJpbmctY2k9PykgcmNvbnMgKGxpc3QgImhl aiIgIkhFSiIgImhvcHAiICJIT1BQIiAiaGVKIikpKSkKKworICAocGFzcy1pZiAidGZsYXR0 ZW4iCisgICAgICAgICAgIChlcXVhbD8gJygxIDIgMyA0IDUgNiA3IDggOSkgKGxpc3QtdHJh bnNkdWNlIHRmbGF0dGVuIHJjb25zICcoKDEgMikgMyAoNCAoNSA2KSA3KSA4ICg5KSkpKSkK KworICAocGFzcy1pZiAidHBhcnRpdGlvbiIKKyAgICAgICAgICAgKGVxdWFsPyAnKCgxIDEg MSAxKSAoMiAyIDIgMikgKDMgMyAzKSAoNCA0IDQgNCkpIChsaXN0LXRyYW5zZHVjZSAodHBh cnRpdGlvbiBldmVuPykgcmNvbnMgJygxIDEgMSAxIDIgMiAyIDIgMyAzIDMgNCA0IDQgNCkp KSkKKworICAocGFzcy1pZiAidHNlZ21lbnQiCisgICAgICAgICAgIChlcXVhbD8gJygoMCAx KSAoMiAzKSAoNCkpICh2ZWN0b3ItdHJhbnNkdWNlICh0c2VnbWVudCAyKSByY29ucyBudW1l cmljLXZlYykpKQorCisgIChwYXNzLWlmICJ0YWRkLWJldHdlZW4iCisgICAgICAgICAgIChl cXVhbD8gJygwIGFuZCAxIGFuZCAyIGFuZCAzIGFuZCA0KSAobGlzdC10cmFuc2R1Y2UgKHRh ZGQtYmV0d2VlbiAnYW5kKSByY29ucyBudW1lcmljLWxpc3QpKSkKKworICAocGFzcy1pZiAi dGVudW1lcmF0ZSIKKyAgICAgICAgICAgKGVxdWFsPyAnKCgtMSAuIDApICgwIC4gMSkgKDEg LiAyKSAoMiAuIDMpICgzIC4gNCkpIChsaXN0LXRyYW5zZHVjZSAodGVudW1lcmF0ZSAoLSAx KSkgcmNvbnMgbnVtZXJpYy1saXN0KSkpCisKKyAgKHBhc3MtaWYgInRiYXRjaCIKKyAgICAg ICAgICAgKGVxdWFsPworICAgICAgICAgICAgJygoMCAxKSAoMiAzKSAoNCkpCisgICAgICAg ICAgICAobGlzdC10cmFuc2R1Y2UgKHRiYXRjaCAodHRha2UgMikgcmNvbnMpIHJjb25zIG51 bWVyaWMtbGlzdCkpKQorCisgIChwYXNzLWlmICJ0Zm9sZCIKKyAgICAgICAgICAgKGVxdWFs PworICAgICAgICAgICAgJygwIDEgMyA2IDEwKQorICAgICAgICAgICAgKGxpc3QtdHJhbnNk dWNlICh0Zm9sZCArKSByY29ucyBudW1lcmljLWxpc3QpKSkpCisKKworKHdpdGgtdGVzdC1w cmVmaXggIngtdHJhbnNkdWNlIgorICAocGFzcy1pZiAibGlzdC10cmFuc2R1Y2UiIAorICAg ICAgICAgICAoZXF1YWw/IDE1IChsaXN0LXRyYW5zZHVjZSAodG1hcCBhZGQxKSArIG51bWVy aWMtbGlzdCkpKQorCisgIChwYXNzLWlmICJsaXN0LXRyYW5zZHVjZSB3aXRoIGlkZW50aXR5 IgorICAgICAgICAgICAoZXF1YWw/IDE1IChsaXN0LXRyYW5zZHVjZSAodG1hcCBhZGQxKSAr IDAgbnVtZXJpYy1saXN0KSkpCisKKyAgKHBhc3MtaWYgInZlY3Rvci10cmFuc2R1Y2UiCisg ICAgICAgICAgIChlcXVhbD8gMTUgKHZlY3Rvci10cmFuc2R1Y2UgKHRtYXAgYWRkMSkgKyBu dW1lcmljLXZlYykpKQorCisgIChwYXNzLWlmICJ2ZWN0b3ItdHJhbnNkdWNlIHdpdGggaWRl bnRpdHkiIChlcXVhbD8gMTUgKHZlY3Rvci10cmFuc2R1Y2UgKHRtYXAgYWRkMSkgKyAwIG51 bWVyaWMtdmVjKSkpCisKKworICAocGFzcy1pZiAicG9ydC10cmFuc2R1Y2UiIChwb3J0LXRy YW5zZHVjZS10ZXN0KSkKKyAgKHBhc3MtaWYgInBvcnQtdHJhbnNkdWNlIHdpdGggaWRlbnRp dHkiIChwb3J0LXRyYW5zZHVjZS13aXRoLWlkZW50aXR5LXRlc3QpKQorCisKKyAgOzsgQ29u dmVydHMgZWFjaCBudW1lcmljIGNoYXIgdG8gaXQncyBjb3JyZXNwb25kaW5nIGludGVnZXIg IGFuZCBzdW1zIHRoZW0uCisgIChwYXNzLWlmICJzdHJpbmctdHJhbnNkdWNlIiAKKyAgICAg ICAgICAgKGVxdWFsPyAxNSAoc3RyaW5nLXRyYW5zZHVjZSAgKHRtYXAgKGxhbWJkYSAoeCkg KC0gKGNoYXItPmludGVnZXIgeCkgNDcpKSkgKyAiMDEyMzQiKSkpCisKKyAgKHBhc3MtaWYg InN0cmluZy10cmFuc2R1Y2Ugd2l0aCBpZGVudGl0eSIgCisgICAgICAgICAgIChlcXVhbD8g MTUgKHN0cmluZy10cmFuc2R1Y2UgICh0bWFwIChsYW1iZGEgKHgpICgtIChjaGFyLT5pbnRl Z2VyIHgpIDQ3KSkpICsgMCAiMDEyMzQiKSkpCisKKyAgKHBhc3MtaWYgImdlbmVyYXRvci10 cmFuc2R1Y2UiIAorICAgICAgICAgICAoZXF1YWw/ICcoMSAyIDMpIChwYXJhbWV0ZXJpemUg KChjdXJyZW50LWlucHV0LXBvcnQgKG9wZW4taW5wdXQtc3RyaW5nICIxIDIgMyIpKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZW5lcmF0b3ItdHJhbnNkdWNlICh0bWFw IChsYW1iZGEgKHgpIHgpKSByY29ucyByZWFkKSkpKQorCisgIChwYXNzLWlmICJnZW5lcmF0 b3ItdHJhbnNkdWNlIHdpdGggaWRlbnRpdHkiIAorICAgICAgICAgICAoZXF1YWw/ICcoMSAy IDMpIChwYXJhbWV0ZXJpemUgKChjdXJyZW50LWlucHV0LXBvcnQgKG9wZW4taW5wdXQtc3Ry aW5nICIxIDIgMyIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZW5lcmF0 b3ItdHJhbnNkdWNlICh0bWFwIChsYW1iZGEgKHgpIHgpKSByY29ucyAnKCkgcmVhZCkpKSkK KworICAocGFzcy1pZiAiYnl0ZXZlY3Rvci11OC10cmFuc2R1Y2UiIAorICAgICAgICAgICAo ZXF1YWw/IDE1IChieXRldmVjdG9yLXU4LXRyYW5zZHVjZSAodG1hcCBhZGQxKSArIGJ2KSkp CisKKyAgKHBhc3MtaWYgImJ5dGV2ZWN0b3ItdTgtdHJhbnNkdWNlIHdpdGggaWRlbnRpdHki IAorICAgICAgICAgICAoZXF1YWw/IDE1IChieXRldmVjdG9yLXU4LXRyYW5zZHVjZSAodG1h cCBhZGQxKSArIDAgYnYpKSkpCi0tIAoyLjI0LjEKCg== --------------18B8D087CD8B459B03C02E3C--