Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vLmol-00AKjx-2S for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Nov 2025 18:22:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vLmoj-00EVRb-2l for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Nov 2025 18:22:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vLmoj-00EVRS-0n for pgsql-hackers@lists.postgresql.org; Wed, 19 Nov 2025 18:22:09 +0000 Received: from fout-b2-smtp.messagingengine.com ([202.12.124.145]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vLmof-000PD0-2N for pgsql-hackers@postgresql.org; Wed, 19 Nov 2025 18:22:08 +0000 Received: from phl-compute-11.internal (phl-compute-11.internal [10.202.2.51]) by mailfout.stl.internal (Postfix) with ESMTP id B98DF1D000D0 for ; Wed, 19 Nov 2025 13:22:02 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-11.internal (MEProxy); Wed, 19 Nov 2025 13:22:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1763576522; x=1763662922; bh=06/gdnGGzI cGJnOMumuW3N9vDUt17eSWZlXMLwu8IOY=; b=S3wxMqSDdi+ztCtQWmaa+hj3Dr WDsancthfdpfdVB/3kzMx8wYW+d5T1GOO6N0Ksp8+BHME+KqPDVCh17R0Kga7dyN wEP62SjGLbScVUZyAxZLA7jedbYrbUScIJQKEctsns2Wn0uWz9F5jqZKpyHbVr2/ 9U/DfUB3pl96kF0ulBcw/li+YnYJ63CGT9WYfHr4AMmJcdXRp30NDHDiwDH2Tcr3 r6h+yIknztbZR8Jcx/9kT6IH0WS9M+YVF9vffFk26rrtwXKZTruvFIEnFspyo/Ro d1CpwDLH6y0XelyaHejhj4PFrjbjkTCQ+3rtXESMmDss2hzBXSZICqUXg5VQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1763576522; x=1763662922; bh=06/gdnGGzIcGJnOMumuW3N9vDUt17eSWZlX MLwu8IOY=; b=dse092/mYKJYI2N7rAiSm5XyUEw/CQhxqyDrMXTX2ZCKm/u/yGr bmdq8sg0z7Vme7qUW5ogUelgLVqG4dKhDEQVhsBRI0ppTJv7UrEv/uxoeRASKeX3 JyIeQYncZzxeu/CDWGRpU5EsqVSFVyUauiJ19Nzg09VVw0SirB8AizSMuMoVNsqB 5LDLpB0g3O6M1gZxPh6pSCdgYy7YFCAmZPI10weY0Seib9rTypODk1cO28k/bziN c1O6atRmZqE4v+7AAWLKEKZE4gNv+rgWYbJzbI6MQ31BmDuK3fWkM0hZiFVho6A1 q6KN5U3E/eiRlCNvX5wjJN6qwqxzvsRSUyw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvvdegleduucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpeffhffvkfgjfhfuofggtgesmhdtmherre dtjeenucfhrhhomhepifhrvghguceuuhhrugcuoehgrhgvghessghurhgurdhmvgeqnecu ggftrfgrthhtvghrnhepfeeluedutdeludduieekgfduffehffffieelueeuvddtveejve euueegkeeuteeunecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhf rhhomhepghhrvghgsegsuhhrugdrmhgvpdhnsggprhgtphhtthhopedupdhmohguvgepsh hmthhpohhuthdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhgrhgv shhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Wed, 19 Nov 2025 13:22:02 -0500 (EST) Date: Wed, 19 Nov 2025 13:21:51 -0500 From: Greg Burd To: "=?utf-8?Q?pgsql-hackers=40postgresql.org?=" Message-ID: <092E6AFE-81DA-4869-91C7-8F9F5A7541E5@greg.burd.me> In-Reply-To: <3A8869E9-04FA-463C-9FC8-AC1BD0BF73B3@greg.burd.me> References: <3A8869E9-04FA-463C-9FC8-AC1BD0BF73B3@greg.burd.me> Subject: Re: Expanding HOT updates for expression and partial indexes X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="691e0abf_10e796de_db0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --691e0abf_10e796de_db0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Nov 19 2025, at 1:00 pm, Greg Burd wrote: > > On Nov 16 2025, at 1:53 pm, Greg Burd wrote: > >> 0004 - Enable HOT updates for expression and partial indexes >> >> This finally gets us back to where this project started, but on much >> more firm ground than before because we're not going to >> self-deadlock. >> The idea has grown from a small function into something larger, but only >> out of necessity. >> >> In this patch I add ExecWhichIndexesRequireUpdates() in execIndexing.c >> which implements (c) finding the set of attributes that force new index >> updates. This set can be very different from the modified indexed >> attributes. We know that some attributes are not equal to their >> previous versions, but does that mean that the index that references >> that attribute needs a new index tuple? It may, or it may not. Here's >> the comment on that function that explains: >> >> /* >> * ExecWhichIndexesRequireUpdates >> * >> * Determine which indexes need updating given modified indexed attributes. >> * This function is a companion to ExecCheckIndexedAttrsForChanges(). >> On the >> * surface, they appear similar but they are doing two very different things. >> * >> * For a standard index on a set of attributes this is the >> intersection of >> * the mix_attrs and the index attrs (key, expression, but not predicate). >> * >> * For expression indexes and indexes which implement the amcomparedatums() >> * index AM API we'll need to form index datum and compare each >> attribute to >> * see if any actually changed. >> * >> * For expression indexes the result of the expression might not change >> at all, >> * this is common with JSONB columns which require expression indexes >> and where >> * it is commonplace to index a field within a document and have >> updates that >> * generally don't update that field. >> * >> * Partial indexes won't trigger index tuples when the old/new tuples >> are both >> * outside of the predicate range. >> * >> * For nbtree the amcomparedatums() API is critical as it requires >> that key >> * attributes are equal when they memcmp(), which might not be the >> case when >> * using type-specific comparison or factoring in collation which >> might make >> * an index case insensitive. >> * >> * All of this is to say that the goal is for the executor to know, >> ahead of >> * calling into the table AM for the update and before calling into >> the index >> * AM for inserting new index tuples, which attributes at a minimum will >> * necessitate a new index tuple. >> * >> ... >> */ > > Attached are rebased (d5b4f3a6d4e) patches with the only changes > happening in the last patch in the series. > > 0004 - Enable HOT updates for expression and partial indexes > > I was never happy with the dual functions > ExecCheckIndexedAttrsForChanges() and ExecWhichIndexesRequireUpdates(), > it felt like too much overhead and duplication of effort. While > updating my tests, adding a few cases, I found that there was also a > flaw in the logic. So, time to rewrite and combine them. > > What did I discover? Before the logic was to find the set of modified > indexed attributes then review all the indexes for changed attributes > using FormIndexDatum() and comparing before/after to see if expressions > really changed the value to be indexed or not. The first pass didn't > take into account expressions, the second did. So, an expression index > over JSONB data wouldn't extract and test the field within the document, > it was just comparing the entire document before/after using the jsonb > comparison function, no bueno. > > This approach wraps both functions into one somewhat simplified > function. The logic is basically, iterate over the indexes reviewing > indexed attributes for changes. Along the way we call into the new > index AM's comparison function when present, otherwise we find and use > the proper type-specific comparison function for the datum. At the end > of the function we have our Bitmapset of attributes that should trigger > new index tuples. > >> What's left undone? >> >> * I need to check code coverage so that I might > > I did this and it was quite good, I'll do it again for this new series > but it's nice to see that the tests are exercising the vast majority of > the code paths. > >> * create tests covering all the new cases > > I think the coverage is good, maybe even redundant or overly complex > in places. > >> * update the README.HOT documentation, wiki, etc. > > Soon, I hope to have this approach solid and under review before > solidifying the docs. > >> * performance... > > Still as yet unmeasured, I know that there is more work per-update to > perform these checks, so some overhead, but I don't know if that > overhead is more than before with HeapDetermineColumnsInfo() and > index_unchanged_by_update(). Those two functions did essentially the > same thing, only with binary comparison (datumIsEqual()). I need to > measure that. What about doing all this work outside of the buffer lock > in heap_update()? Surely that'll give back a bit or at least add to > concurrency. Forming index tuples a few extra times and evaluating the > expressions 3 times rather than 1 is going to hurt, I think I can come > up with a way to cache the formed datum and use it later on, but is that > worth it? Complex expressions, yes. Also, what about expressions that > expect to be executed once... and now are 3x? That's what forced my > update to the insert-conflict-specconflict.out test, but AFAICT there is > no way to test if an expression's value is going to change on update > without exercising it once for the old tuple and once for the new tuple. > Even if it were possible for an index to provide the key it might have > changed after the expression evaluation (as is the case in hash), so I > don't think this is avoidable. Maybe that's reason enough to add a > reloption to disable the expression evaluation piece of this? Given > that it might create a logic or performance regression. The flip side > is the potential to use the HOT path, that's a real savings. > > One concerning thing is that nbtree's assumption that key attributes for > TIDs must use binary comparison for equality. This means that for our > common case (heap/btree) there is more work per-update than before, > which is why I need to measure. I could look into eliminating the > nbtree requirement, I don't understand it too well as yet by I believe > that on page split there is an attempt to deduplicate TIDs into a > TIDBitmap and the test for when that's possible is datumIsEqual(). If > that were the same as in this new code, possibly evening using > tts_attr_equal(), then... I don't know, I'll have to investigate. Chime > in here if you can educate me on this one. :) > > best. > > -greg Doh! I forgot to commit the fixed regression test expected output before formatting the patch set, here it is. -greg --691e0abf_10e796de_db0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v22-0001-Reorganize-heap-update-logic.patch" RnJvbSAwZGUwNTlhZTE3MDQyYTc2NTk0NjEwZTFiN2IzNWRiYjJkYjk0MTVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy IE5vdiAyMDI1IDExOjM2OjIwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MjIgMS80XSBSZW9yZ2Fu aXplIGhlYXAgdXBkYXRlIGxvZ2ljCgpUaGlzIGNvbW1pdCByZWZhY3RvcnMgdGhlIGludGVyYWN0 aW9uIGJldHdlZW4gaGVhcF90dXBsZV91cGRhdGUoKSwKaGVhcF91cGRhdGUoKSwgYW5kIHNpbXBs ZV9oZWFwX3VwZGF0ZSgpIHRvIGltcHJvdmUgY29kZSBvcmdhbml6YXRpb24KYW5kIGZsZXhpYmls aXR5LiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlCnByZXZp b3VzIGltcGxlbWVudGF0aW9uIGFuZCBoYXZlIG5vIHBlcmZvcm1hbmNlIGltcGFjdC4KClRoZSBw cmltYXJ5IG1vdGl2YXRpb24gaXMgdG8gcHJlcGFyZSBmb3IgdXBjb21pbmcgbW9kaWZpY2F0aW9u cyB0bwpob3cgYW5kIHdoZXJlIG1vZGlmaWVkIGF0dHJpYnV0ZXMgYXJlIGlkZW50aWZpZWQgZHVy aW5nIHRoZSB1cGRhdGUKcGF0aCwgcGFydGljdWxhcmx5IGZvciBjYXRhbG9nIHVwZGF0ZXMuCgpB cyBwYXJ0IG9mIHRoaXMgcmVvcmdhbml6YXRpb24sIHRoZSBoYW5kbGluZyBvZiByZXBsaWNhIGlk ZW50aXR5IGtleQphdHRyaWJ1dGVzIGhhcyBiZWVuIGFkanVzdGVkLiBJbnN0ZWFkIG9mIGZldGNo aW5nIGEgc2Vjb25kIGNvcHkgb2YKdGhlIGJpdG1hcCBkdXJpbmcgYW4gdXBkYXRlIG9wZXJhdGlv biwgdGhlIGNhbGxlciBpcyBub3cgcmVxdWlyZWQgdG8KcHJvdmlkZSBpdC4gVGhpcyBjaGFuZ2Ug YXBwbGllcyB0byBib3RoIGhlYXBfdXBkYXRlKCkgYW5kCmhlYXBfZGVsZXRlKCkuCgpObyB1c2Vy LXZpc2libGUgY2hhbmdlcy4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAg ICAgICAgIHwgNTY4ICsrKysrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jIHwgMTE3ICsrKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmggICAgICAgICAgICAgIHwgIDI0ICstCiAzIGZpbGVzIGNoYW5nZWQsIDQxMCBpbnNlcnRp b25zKCspLCAyOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCA0 YjBjNDlmNGJiMC4uYWZmNDc0ODEzNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC0z OSwxOCArMzksMjQgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKICNpbmNsdWRlICJh Y2Nlc3MvdmFsaWQuaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgorI2luY2x1 ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKKyNpbmNs dWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZV9kLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv dmFjdXVtLmgiCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAicGdzdGF0 LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVm bWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pdGVtcHRyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9s bWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMv aW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1 dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NwY2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvc3lzY2FjaGUuaCIKIApAQCAtNjIsMTYgKzY4LDggQEAgc3RhdGljIFhMb2dSZWNQdHIg bG9nX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbG4sIEJ1ZmZlciBvbGRidWYsCiAJCQkJCQkJCSAg SGVhcFR1cGxlIG5ld3R1cCwgSGVhcFR1cGxlIG9sZF9rZXlfdHVwbGUsCiAJCQkJCQkJCSAgYm9v bCBhbGxfdmlzaWJsZV9jbGVhcmVkLCBib29sIG5ld19hbGxfdmlzaWJsZV9jbGVhcmVkKTsKICNp ZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi1zdGF0aWMgdm9pZCBjaGVja19sb2NrX2lmX2lucGxh Y2VfdXBkYXRlYWJsZV9yZWwoUmVsYXRpb24gcmVsYXRpb24sCi0JCQkJCQkJCQkJCQkgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLAotCQkJCQkJCQkJCQkJIEhlYXBUdXBsZSBuZXd0dXApOwog c3RhdGljIHZvaWQgY2hlY2tfaW5wbGFjZV9yZWxfbG9jayhIZWFwVHVwbGUgb2xkdHVwKTsKICNl bmRpZgotc3RhdGljIEJpdG1hcHNldCAqSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9u IHJlbGF0aW9uLAotCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqaW50ZXJlc3RpbmdfY29scywKLQkJ CQkJCQkJCQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCi0JCQkJCQkJCQkJICAgSGVhcFR1 cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkJCQkgICBib29sICpoYXNfZXh0 ZXJuYWwpOwogc3RhdGljIGJvb2wgaGVhcF9hY3F1aXJlX3R1cGxvY2soUmVsYXRpb24gcmVsYXRp b24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJCQkgTG9ja1R1cGxlTW9kZSBt b2RlLCBMb2NrV2FpdFBvbGljeSB3YWl0X3BvbGljeSwKIAkJCQkJCQkJIGJvb2wgKmhhdmVfdHVw bGVfbG9jayk7CkBAIC0xMDMsMTAgKzEwMSwxMCBAQCBzdGF0aWMgYm9vbCBDb25kaXRpb25hbE11 bHRpWGFjdElkV2FpdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0U3RhdHVzIHN0YXR1cwog c3RhdGljIHZvaWQgaW5kZXhfZGVsZXRlX3NvcnQoVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUp Owogc3RhdGljIGludAlib3R0b211cF9zb3J0X2FuZF9zaHJpbmsoVE1fSW5kZXhEZWxldGVPcCAq ZGVsc3RhdGUpOwogc3RhdGljIFhMb2dSZWNQdHIgbG9nX2hlYXBfbmV3X2NpZChSZWxhdGlvbiBy ZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCk7Ci1zdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNh SWRlbnRpdHkoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWly ZWQsCitzdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24gcmVs YXRpb24sIEhlYXBUdXBsZSB0cCwKKwkJCQkJCQkJCQlCaXRtYXBzZXQgKnJpZF9hdHRycywgYm9v bCBrZXlfcmVxdWlyZWQsCiAJCQkJCQkJCQkJYm9vbCAqY29weSk7CiAKLQogLyoKICAqIEVhY2gg dHVwbGUgbG9jayBtb2RlIGhhcyBhIGNvcnJlc3BvbmRpbmcgaGVhdnl3ZWlnaHQgbG9jaywgYW5k IG9uZSBvciB0d28KICAqIGNvcnJlc3BvbmRpbmcgTXVsdGlYYWN0U3RhdHVzZXMgKG9uZSB0byBt ZXJlbHkgbG9jayB0dXBsZXMsIGFub3RoZXIgb25lIHRvCkBAIC0yNzk5LDYgKzI3OTcsNyBAQCBo ZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQs CiAJQnVmZmVyCQlidWZmZXI7CiAJQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAJ VHJhbnNhY3Rpb25JZCBuZXdfeG1heDsKKwlCaXRtYXBzZXQgICpyaWRfYXR0cnM7CiAJdWludDE2 CQluZXdfaW5mb21hc2ssCiAJCQkJbmV3X2luZm9tYXNrMjsKIAlib29sCQloYXZlX3R1cGxlX2xv Y2sgPSBmYWxzZTsKQEAgLTI4MTEsNiArMjgxMCw4IEBAIGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCwKIAogCUFzc2VydEhhc1NuYXBzaG90 Rm9yVG9hc3QocmVsYXRpb24pOwogCisJcmlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJC aXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSk7CisKIAkvKgog CSAqIEZvcmJpZCB0aGlzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVzdCBpdCBhbGxv Y2F0ZSBhIGNvbWJvIENJRC4KIAkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5lZWQgdGhhdCBjb21i byBDSUQgZm9yIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKQEAgLTMwMTQsNiArMzAxNSw3IEBA IGwxOgogCQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKHRwLnRfc2VsZiksIExvY2tU dXBsZUV4Y2x1c2l2ZSk7CiAJCWlmICh2bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQogCQkJUmVs ZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CiAJCXJldHVybiBy ZXN1bHQ7CiAJfQogCkBAIC0zMDM1LDcgKzMwMzcsMTAgQEAgbDE6CiAJICogQ29tcHV0ZSByZXBs aWNhIGlkZW50aXR5IHR1cGxlIGJlZm9yZSBlbnRlcmluZyB0aGUgY3JpdGljYWwgc2VjdGlvbiBz bwogCSAqIHdlIGRvbid0IFBBTklDIHVwb24gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgog CSAqLwotCW9sZF9rZXlfdHVwbGUgPSBFeHRyYWN0UmVwbGljYUlkZW50aXR5KHJlbGF0aW9uLCAm dHAsIHRydWUsICZvbGRfa2V5X2NvcGllZCk7CisJb2xkX2tleV90dXBsZSA9IEV4dHJhY3RSZXBs aWNhSWRlbnRpdHkocmVsYXRpb24sICZ0cCwgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAgIHRydWUs ICZvbGRfa2V5X2NvcGllZCk7CisJYm1zX2ZyZWUocmlkX2F0dHJzKTsKKwlyaWRfYXR0cnMgPSBO VUxMOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwb3NzaWJseS1tdWx0aXhhY3Qt YWJsZSBvcGVyYXRpb24gaW4gdGhlIGN1cnJlbnQKQEAgLTMyNDcsNyArMzI1MiwxMCBAQCBzaW1w bGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq dGlkKQogICoJaGVhcF91cGRhdGUgLSByZXBsYWNlIGEgdHVwbGUKICAqCiAgKiBTZWUgdGFibGVf dHVwbGVfdXBkYXRlKCkgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzLCBleGNl cHQgdGhhdAotICogdGhpcyByb3V0aW5lIGRpcmVjdGx5IHRha2VzIGEgdHVwbGUgcmF0aGVyIHRo YW4gYSBzbG90LgorICogdGhpcyByb3V0aW5lIGRpcmVjdGx5IHRha2VzIGEgaGVhcCB0dXBsZSBy YXRoZXIgdGhhbiBhIHNsb3QuCisgKgorICogSXQncyByZXF1aXJlZCB0aGF0IHRoZSBjYWxsZXIg aGFzIGFjcXVpcmVkIHRoZSBwaW4gYW5kIGxvY2sgb24gdGhlIGJ1ZmZlci4KKyAqIFRoYXQgbG9j ayBhbmQgcGluIHdpbGwgYmUgbWFuYWdlZCBoZXJlLCBub3QgaW4gdGhlIGNhbGxlci4KICAqCiAg KiBJbiB0aGUgZmFpbHVyZSBjYXNlcywgdGhlIHJvdXRpbmUgZmlsbHMgKnRtZmQgd2l0aCB0aGUg dHVwbGUncyB0X2N0aWQsCiAgKiB0X3htYXggKHJlc29sdmluZyBhIHBvc3NpYmxlIE11bHRpWGFj dCwgaWYgbmVjZXNzYXJ5KSwgYW5kIHRfY21heCAodGhlIGxhc3QKQEAgLTMyNTUsMzAgKzMyNjMs MjEgQEAgc2ltcGxlX2hlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9p bnRlckRhdGEgKnRpZCkKICAqIGdlbmVyYXRlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uKS4KICAq LwogVE1fUmVzdWx0Ci1oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBv aW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAotCQkJQ29tbWFuZElkIGNpZCwgU25h cHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExv Y2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4 ZXMpCitoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlRGF0YSAqb2xkdHVw LAorCQkJSGVhcFR1cGxlIG5ld3R1cCwgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVj aywgYm9vbCB3YWl0LAorCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxv Y2ttb2RlLCBCdWZmZXIgYnVmZmVyLAorCQkJUGFnZSBwYWdlLCBCbG9ja051bWJlciBibG9jaywg SXRlbUlkIGxwLCBCaXRtYXBzZXQgKmhvdF9hdHRycywKKwkJCUJpdG1hcHNldCAqc3VtX2F0dHJz LCBCaXRtYXBzZXQgKnBrX2F0dHJzLCBCaXRtYXBzZXQgKnJpZF9hdHRycywKKwkJCUJpdG1hcHNl dCAqbWl4X2F0dHJzLCBCdWZmZXIgKnZtYnVmZmVyLAorCQkJYm9vbCByZXBfaWRfa2V5X3JlcXVp cmVkLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlUTV9SZXN1bHQJcmVz dWx0OwogCVRyYW5zYWN0aW9uSWQgeGlkID0gR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKLQlC aXRtYXBzZXQgICpob3RfYXR0cnM7Ci0JQml0bWFwc2V0ICAqc3VtX2F0dHJzOwotCUJpdG1hcHNl dCAgKmtleV9hdHRyczsKLQlCaXRtYXBzZXQgICppZF9hdHRyczsKLQlCaXRtYXBzZXQgICppbnRl cmVzdGluZ19hdHRyczsKLQlCaXRtYXBzZXQgICptb2RpZmllZF9hdHRyczsKLQlJdGVtSWQJCWxw OwotCUhlYXBUdXBsZURhdGEgb2xkdHVwOwogCUhlYXBUdXBsZQloZWFwdHVwOwogCUhlYXBUdXBs ZQlvbGRfa2V5X3R1cGxlID0gTlVMTDsKIAlib29sCQlvbGRfa2V5X2NvcGllZCA9IGZhbHNlOwot CVBhZ2UJCXBhZ2U7Ci0JQmxvY2tOdW1iZXIgYmxvY2s7CiAJTXVsdGlYYWN0U3RhdHVzIG14YWN0 X3N0YXR1czsKLQlCdWZmZXIJCWJ1ZmZlciwKLQkJCQluZXdidWYsCi0JCQkJdm1idWZmZXIgPSBJ bnZhbGlkQnVmZmVyLAorCUJ1ZmZlcgkJbmV3YnVmLAogCQkJCXZtYnVmZmVyX25ldyA9IEludmFs aWRCdWZmZXI7CiAJYm9vbAkJbmVlZF90b2FzdDsKIAlTaXplCQluZXd0dXBzaXplLApAQCAtMzI5 Miw3ICszMjkxLDYgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Q b2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAlib29sCQlhbGxfdmlzaWJsZV9j bGVhcmVkX25ldyA9IGZhbHNlOwogCWJvb2wJCWNoZWNrZWRfbG9ja2VyczsKIAlib29sCQlsb2Nr ZXJfcmVtYWluczsKLQlib29sCQlpZF9oYXNfZXh0ZXJuYWwgPSBmYWxzZTsKIAlUcmFuc2FjdGlv bklkIHhtYXhfbmV3X3R1cGxlLAogCQkJCXhtYXhfb2xkX3R1cGxlOwogCXVpbnQxNgkJaW5mb21h c2tfb2xkX3R1cGxlLApAQCAtMzMwMCwxNDQgKzMyOTgsMTMgQEAgaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1 cCwKIAkJCQlpbmZvbWFza19uZXdfdHVwbGUsCiAJCQkJaW5mb21hc2syX25ld190dXBsZTsKIAot CUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOwotCi0JLyogQ2hlYXAsIHNpbXBsaXN0 aWMgY2hlY2sgdGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlwZS4gKi8KLQlB c3NlcnQoSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHMobmV3dHVwLT50X2RhdGEpIDw9Ci0JCSAgIFJl bGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7Ci0KKwlBc3NlcnQoQnVmZmVy SXNMb2NrZWRCeU1lKGJ1ZmZlcikpOworCUFzc2VydChJdGVtSWRJc05vcm1hbChscCkpOwogCUFz c2VydEhhc1NuYXBzaG90Rm9yVG9hc3QocmVsYXRpb24pOwogCi0JLyoKLQkgKiBGb3JiaWQgdGhp cyBkdXJpbmcgYSBwYXJhbGxlbCBvcGVyYXRpb24sIGxlc3QgaXQgYWxsb2NhdGUgYSBjb21ibyBD SUQuCi0JICogT3RoZXIgd29ya2VycyBtaWdodCBuZWVkIHRoYXQgY29tYm8gQ0lEIGZvciB2aXNp YmlsaXR5IGNoZWNrcywgYW5kIHdlCi0JICogaGF2ZSBubyBwcm92aXNpb24gZm9yIGJyb2FkY2Fz dGluZyBpdCB0byB0aGVtLgotCSAqLwotCWlmIChJc0luUGFyYWxsZWxNb2RlKCkpCi0JCWVyZXBv cnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5TQUNUSU9OX1NUQVRF KSwKLQkJCQkgZXJybXNnKCJjYW5ub3QgdXBkYXRlIHR1cGxlcyBkdXJpbmcgYSBwYXJhbGxlbCBv cGVyYXRpb24iKSkpOwotCi0jaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwotCWNoZWNrX2xvY2tf aWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChyZWxhdGlvbiwgb3RpZCwgbmV3dHVwKTsKLSNlbmRp ZgotCi0JLyoKLQkgKiBGZXRjaCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGNoZWNrZWQg Zm9yIHZhcmlvdXMgb3BlcmF0aW9ucy4KLQkgKgotCSAqIEZvciBIT1QgY29uc2lkZXJhdGlvbnMs IHRoaXMgaXMgd2FzdGVkIGVmZm9ydCBpZiB3ZSBmYWlsIHRvIHVwZGF0ZSBvcgotCSAqIGhhdmUg dG8gcHV0IHRoZSBuZXcgdHVwbGUgb24gYSBkaWZmZXJlbnQgcGFnZS4gIEJ1dCB3ZSBtdXN0IGNv bXB1dGUgdGhlCi0JICogbGlzdCBiZWZvcmUgb2J0YWluaW5nIGJ1ZmZlciBsb2NrIC0tLSBpbiB0 aGUgd29yc3QgY2FzZSwgaWYgd2UgYXJlCi0JICogZG9pbmcgYW4gdXBkYXRlIG9uIG9uZSBvZiB0 aGUgcmVsZXZhbnQgc3lzdGVtIGNhdGFsb2dzLCB3ZSBjb3VsZAotCSAqIGRlYWRsb2NrIGlmIHdl IHRyeSB0byBmZXRjaCB0aGUgbGlzdCBsYXRlci4gIEluIGFueSBjYXNlLCB0aGUgcmVsY2FjaGUK LQkgKiBjYWNoZXMgdGhlIGRhdGEgc28gdGhpcyBpcyB1c3VhbGx5IHByZXR0eSBjaGVhcC4KLQkg KgotCSAqIFdlIGFsc28gbmVlZCBjb2x1bW5zIHVzZWQgYnkgdGhlIHJlcGxpY2EgaWRlbnRpdHkg YW5kIGNvbHVtbnMgdGhhdCBhcmUKLQkgKiBjb25zaWRlcmVkIHRoZSAia2V5IiBvZiByb3dzIGlu IHRoZSB0YWJsZS4KLQkgKgotCSAqIE5vdGUgdGhhdCB3ZSBnZXQgY29waWVzIG9mIGVhY2ggYml0 bWFwLCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dAotCSAqIHJlbGNhY2hlIGZsdXNoIGhhcHBl bmluZyBtaWR3YXkgdGhyb3VnaC4KLQkgKi8KLQlob3RfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4 QXR0ckJpdG1hcChyZWxhdGlvbiwKLQkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9IT1Rf QkxPQ0tJTkcpOwotCXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0 aW9uLAotCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOwotCWtleV9h dHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJTkRFWF9BVFRSX0JJ VE1BUF9LRVkpOwotCWlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRp b24sCi0JCQkJCQkJCQkJICBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVkpOwotCWludGVy ZXN0aW5nX2F0dHJzID0gTlVMTDsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVy cyhpbnRlcmVzdGluZ19hdHRycywgaG90X2F0dHJzKTsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJt c19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywgc3VtX2F0dHJzKTsKLQlpbnRlcmVzdGlu Z19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywga2V5X2F0dHJzKTsK LQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywg aWRfYXR0cnMpOwotCi0JYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKG90aWQpOwot CUlOSkVDVElPTl9QT0lOVCgiaGVhcF91cGRhdGUtYmVmb3JlLXBpbiIsIE5VTEwpOwotCWJ1ZmZl ciA9IFJlYWRCdWZmZXIocmVsYXRpb24sIGJsb2NrKTsKLQlwYWdlID0gQnVmZmVyR2V0UGFnZShi dWZmZXIpOwotCi0JLyoKLQkgKiBCZWZvcmUgbG9ja2luZyB0aGUgYnVmZmVyLCBwaW4gdGhlIHZp c2liaWxpdHkgbWFwIHBhZ2UgaWYgaXQgYXBwZWFycyB0bwotCSAqIGJlIG5lY2Vzc2FyeS4gIFNp bmNlIHdlIGhhdmVuJ3QgZ290IHRoZSBsb2NrIHlldCwgc29tZW9uZSBlbHNlIG1pZ2h0IGJlCi0J ICogaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGlzLCBzbyB3ZSdsbCBuZWVkIHRvIHJlY2hl Y2sgYWZ0ZXIgd2UgaGF2ZQotCSAqIHRoZSBsb2NrLgotCSAqLwotCWlmIChQYWdlSXNBbGxWaXNp YmxlKHBhZ2UpKQotCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxvY2ssICZ2bWJ1ZmZl cik7Ci0KLQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKLQotCWxw ID0gUGFnZUdldEl0ZW1JZChwYWdlLCBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihvdGlkKSk7 Ci0KLQkvKgotCSAqIFVzdWFsbHksIGEgYnVmZmVyIHBpbiBhbmQvb3Igc25hcHNob3QgYmxvY2tz IHBydW5pbmcgb2Ygb3RpZCwgZW5zdXJpbmcKLQkgKiB3ZSBzZWUgTFBfTk9STUFMIGhlcmUuICBX aGVuIHRoZSBvdGlkIG9yaWdpbiBpcyBhIHN5c2NhY2hlLCB3ZSBtYXkgaGF2ZQotCSAqIG5laXRo ZXIgYSBwaW4gbm9yIGEgc25hcHNob3QuICBIZW5jZSwgd2UgbWF5IHNlZSBvdGhlciBMUF8gc3Rh dGVzLCBlYWNoCi0JICogb2Ygd2hpY2ggaW5kaWNhdGVzIGNvbmN1cnJlbnQgcHJ1bmluZy4KLQkg KgotCSAqIEZhaWxpbmcgd2l0aCBUTV9VcGRhdGVkIHdvdWxkIGJlIG1vc3QgYWNjdXJhdGUuICBI b3dldmVyLCB1bmxpa2Ugb3RoZXIKLQkgKiBUTV9VcGRhdGVkIHNjZW5hcmlvcywgd2UgZG9uJ3Qg a25vdyB0aGUgc3VjY2Vzc29yIGN0aWQgaW4gTFBfVU5VU0VEIGFuZAotCSAqIExQX0RFQUQgY2Fz ZXMuICBXaGlsZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBUTV9VcGRhdGVkIGFuZCBUTV9EZWxl dGVkCi0JICogZG9lcyBtYXR0ZXIgdG8gU1FMIHN0YXRlbWVudHMgVVBEQVRFIGFuZCBNRVJHRSwg dGhvc2UgU1FMIHN0YXRlbWVudHMKLQkgKiBob2xkIGEgc25hcHNob3QgdGhhdCBlbnN1cmVzIExQ X05PUk1BTC4gIEhlbmNlLCB0aGUgY2hvaWNlIGJldHdlZW4KLQkgKiBUTV9VcGRhdGVkIGFuZCBU TV9EZWxldGVkIGFmZmVjdHMgb25seSB0aGUgd29yZGluZyBvZiBlcnJvciBtZXNzYWdlcy4KLQkg KiBTZXR0bGUgb24gVE1fRGVsZXRlZCwgZm9yIHR3byByZWFzb25zLiAgRmlyc3QsIGl0IGF2b2lk cyBjb21wbGljYXRpbmcKLQkgKiB0aGUgc3BlY2lmaWNhdGlvbiBvZiB3aGVuIHRtZmQtPmN0aWQg aXMgdmFsaWQuICBTZWNvbmQsIGl0IGNyZWF0ZXMKLQkgKiBlcnJvciBsb2cgZXZpZGVuY2UgdGhh dCB3ZSB0b29rIHRoaXMgYnJhbmNoLgotCSAqCi0JICogU2luY2UgaXQncyBwb3NzaWJsZSB0byBz ZWUgTFBfVU5VU0VEIGF0IG90aWQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZWUKLQkgKiBMUF9O T1JNQUwgZm9yIGEgdHVwbGUgdGhhdCByZXBsYWNlZCBMUF9VTlVTRUQuICBJZiBpdCdzIGEgdHVw bGUgZm9yIGFuCi0JICogdW5yZWxhdGVkIHJvdywgd2UnbGwgZmFpbCB3aXRoICJkdXBsaWNhdGUg a2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSIuCi0JICogWFhYIGlmIG90aWQgaXMgdGhlIGxpdmUs IG5ld2VyIHZlcnNpb24gb2YgdGhlIG5ld3R1cCByb3csIHdlJ2xsIGRpc2NhcmQKLQkgKiBjaGFu Z2VzIG9yaWdpbmF0aW5nIGluIHZlcnNpb25zIG9mIHRoaXMgY2F0YWxvZyByb3cgYWZ0ZXIgdGhl IHZlcnNpb24KLQkgKiB0aGUgY2FsbGVyIGdvdCBmcm9tIHN5c2NhY2hlLiAgU2VlIHN5c2NhY2hl LXVwZGF0ZS1wcnVuZWQuc3BlYy4KLQkgKi8KLQlpZiAoIUl0ZW1JZElzTm9ybWFsKGxwKSkKLQl7 Ci0JCUFzc2VydChSZWxhdGlvblN1cHBvcnRzU3lzQ2FjaGUoUmVsYXRpb25HZXRSZWxpZChyZWxh dGlvbikpKTsKLQotCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7Ci0JCUFzc2VydCghaGF2 ZV90dXBsZV9sb2NrKTsKLQkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCQlSZWxl YXNlQnVmZmVyKHZtYnVmZmVyKTsKLQkJdG1mZC0+Y3RpZCA9ICpvdGlkOwotCQl0bWZkLT54bWF4 ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXRtZmQtPmNtYXggPSBJbnZhbGlkQ29tbWFuZElk OwotCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwotCi0JCWJtc19mcmVlKGhvdF9hdHRycyk7 Ci0JCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JCWJtc19mcmVlKGtleV9hdHRycyk7Ci0JCWJtc19m cmVlKGlkX2F0dHJzKTsKLQkJLyogbW9kaWZpZWRfYXR0cnMgbm90IHlldCBpbml0aWFsaXplZCAq LwotCQlibXNfZnJlZShpbnRlcmVzdGluZ19hdHRycyk7Ci0JCXJldHVybiBUTV9EZWxldGVkOwot CX0KLQotCS8qCi0JICogRmlsbCBpbiBlbm91Z2ggZGF0YSBpbiBvbGR0dXAgZm9yIEhlYXBEZXRl cm1pbmVDb2x1bW5zSW5mbyB0byB3b3JrCi0JICogcHJvcGVybHkuCi0JICovCi0Jb2xkdHVwLnRf dGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKLQlvbGR0dXAudF9kYXRhID0g KEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOwotCW9sZHR1cC50X2xlbiA9 IEl0ZW1JZEdldExlbmd0aChscCk7Ci0Jb2xkdHVwLnRfc2VsZiA9ICpvdGlkOwotCi0JLyogdGhl IG5ldyB0dXBsZSBpcyByZWFkeSwgZXhjZXB0IGZvciB0aGlzOiAqLworCS8qIFRoZSBuZXcgdHVw bGUgaXMgcmVhZHksIGV4Y2VwdCBmb3IgdGhpcyAqLwogCW5ld3R1cC0+dF90YWJsZU9pZCA9IFJl bGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgY29sdW1ucyBt b2RpZmllZCBieSB0aGUgdXBkYXRlLiAgQWRkaXRpb25hbGx5LCBpZGVudGlmeQotCSAqIHdoZXRo ZXIgYW55IG9mIHRoZSB1bm1vZGlmaWVkIHJlcGxpY2EgaWRlbnRpdHkga2V5IGF0dHJpYnV0ZXMg aW4gdGhlCi0JICogb2xkIHR1cGxlIGlzIGV4dGVybmFsbHkgc3RvcmVkIG9yIG5vdC4gIFRoaXMg aXMgcmVxdWlyZWQgYmVjYXVzZSBmb3IKLQkgKiBzdWNoIGF0dHJpYnV0ZXMgdGhlIGZsYXR0ZW5l ZCB2YWx1ZSB3b24ndCBiZSBXQUwgbG9nZ2VkIGFzIHBhcnQgb2YgdGhlCi0JICogbmV3IHR1cGxl IHNvIHdlIG11c3QgaW5jbHVkZSBpdCBhcyBwYXJ0IG9mIHRoZSBvbGRfa2V5X3R1cGxlLiAgU2Vl Ci0JICogRXh0cmFjdFJlcGxpY2FJZGVudGl0eS4KLQkgKi8KLQltb2RpZmllZF9hdHRycyA9IEhl YXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhyZWxhdGlvbiwgaW50ZXJlc3RpbmdfYXR0cnMsCi0JCQkJ CQkJCQkJCSAgaWRfYXR0cnMsICZvbGR0dXAsCi0JCQkJCQkJCQkJCSAgbmV3dHVwLCAmaWRfaGFz X2V4dGVybmFsKTsKLQogCS8qCiAJICogSWYgd2UncmUgbm90IHVwZGF0aW5nIGFueSAia2V5IiBj b2x1bW4sIHdlIGNhbiBncmFiIGEgd2Vha2VyIGxvY2sgdHlwZS4KIAkgKiBUaGlzIGFsbG93cyBm b3IgbW9yZSBjb25jdXJyZW5jeSB3aGVuIHdlIGFyZSBydW5uaW5nIHNpbXVsdGFuZW91c2x5CkBA IC0zNDQ5LDcgKzMzMTYsNyBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCSAqIGlzIHVwZGF0ZXMg dGhhdCBkb24ndCBtYW5pcHVsYXRlIGtleSBjb2x1bW5zLCBub3QgdGhvc2UgdGhhdAogCSAqIHNl cmVuZGlwaXRvdXNseSBhcnJpdmUgYXQgdGhlIHNhbWUga2V5IHZhbHVlcy4KIAkgKi8KLQlpZiAo IWJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBrZXlfYXR0cnMpKQorCWlmICghYm1zX292ZXJs YXAobWl4X2F0dHJzLCBwa19hdHRycykpCiAJewogCQkqbG9ja21vZGUgPSBMb2NrVHVwbGVOb0tl eUV4Y2x1c2l2ZTsKIAkJbXhhY3Rfc3RhdHVzID0gTXVsdGlYYWN0U3RhdHVzTm9LZXlVcGRhdGU7 CkBAIC0zNDczLDE3ICszMzQwLDEwIEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBj b25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCWtleV9pbnRh Y3QgPSBmYWxzZTsKIAl9CiAKLQkvKgotCSAqIE5vdGU6IGJleW9uZCB0aGlzIHBvaW50LCB1c2Ug b2xkdHVwIG5vdCBvdGlkIHRvIHJlZmVyIHRvIG9sZCB0dXBsZS4KLQkgKiBvdGlkIG1heSB2ZXJ5 IHdlbGwgcG9pbnQgYXQgbmV3dHVwLT50X3NlbGYsIHdoaWNoIHdlIHdpbGwgb3ZlcndyaXRlCi0J ICogd2l0aCB0aGUgbmV3IHR1cGxlJ3MgbG9jYXRpb24sIHNvIHRoZXJlJ3MgZ3JlYXQgcmlzayBv ZiBjb25mdXNpb24gaWYgd2UKLQkgKiB1c2Ugb3RpZCBhbnltb3JlLgotCSAqLwotCiBsMjoKIAlj aGVja2VkX2xvY2tlcnMgPSBmYWxzZTsKIAlsb2NrZXJfcmVtYWlucyA9IGZhbHNlOwotCXJlc3Vs dCA9IEhlYXBUdXBsZVNhdGlzZmllc1VwZGF0ZSgmb2xkdHVwLCBjaWQsIGJ1ZmZlcik7CisJcmVz dWx0ID0gSGVhcFR1cGxlU2F0aXNmaWVzVXBkYXRlKG9sZHR1cCwgY2lkLCBidWZmZXIpOwogCiAJ Lyogc2VlIGJlbG93IGFib3V0IHRoZSAibm8gd2FpdCIgY2FzZSAqLwogCUFzc2VydChyZXN1bHQg IT0gVE1fQmVpbmdNb2RpZmllZCB8fCB3YWl0KTsKQEAgLTM1MTUsOCArMzM3NSw4IEBAIGwyOgog CQkgKi8KIAogCQkvKiBtdXN0IGNvcHkgc3RhdGUgZGF0YSBiZWZvcmUgdW5sb2NraW5nIGJ1ZmZl ciAqLwotCQl4d2FpdCA9IEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSk7 Ci0JCWluZm9tYXNrID0gb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazsKKwkJeHdhaXQgPSBIZWFw VHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKTsKKwkJaW5mb21hc2sgPSBvbGR0 dXAtPnRfZGF0YS0+dF9pbmZvbWFzazsKIAogCQkvKgogCQkgKiBOb3cgd2UgaGF2ZSB0byBkbyBz b21ldGhpbmcgYWJvdXQgdGhlIGV4aXN0aW5nIGxvY2tlci4gIElmIGl0J3MgYQpAQCAtMzU1Niwx MyArMzQxNiwxMiBAQCBsMjoKIAkJCQkgKiByZXF1ZXN0aW5nIGEgbG9jayBhbmQgYWxyZWFkeSBo YXZlIG9uZTsgYXZvaWRzIGRlYWRsb2NrKS4KIAkJCQkgKi8KIAkJCQlpZiAoIWN1cnJlbnRfaXNf bWVtYmVyKQotCQkJCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAudF9z ZWxmKSwgKmxvY2ttb2RlLAorCQkJCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJm9s ZHR1cC0+dF9zZWxmLCAqbG9ja21vZGUsCiAJCQkJCQkJCQkJIExvY2tXYWl0QmxvY2ssICZoYXZl X3R1cGxlX2xvY2spOwogCiAJCQkJLyogd2FpdCBmb3IgbXVsdGl4YWN0ICovCiAJCQkJTXVsdGlY YWN0SWRXYWl0KChNdWx0aVhhY3RJZCkgeHdhaXQsIG14YWN0X3N0YXR1cywgaW5mb21hc2ssCi0J CQkJCQkJCXJlbGF0aW9uLCAmb2xkdHVwLnRfc2VsZiwgWExUV19VcGRhdGUsCi0JCQkJCQkJCSZy ZW1haW4pOworCQkJCQkJCQlyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCBYTFRXX1VwZGF0ZSwg JnJlbWFpbik7CiAJCQkJY2hlY2tlZF9sb2NrZXJzID0gdHJ1ZTsKIAkJCQlsb2NrZXJfcmVtYWlu cyA9IHJlbWFpbiAhPSAwOwogCQkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENM VVNJVkUpOwpAQCAtMzU3Miw5ICszNDMxLDkgQEAgbDI6CiAJCQkJICogY291bGQgdXBkYXRlIHRo aXMgdHVwbGUgYmVmb3JlIHdlIGdldCB0byB0aGlzIHBvaW50LiAgQ2hlY2sKIAkJCQkgKiBmb3Ig eG1heCBjaGFuZ2UsIGFuZCBzdGFydCBvdmVyIGlmIHNvLgogCQkJCSAqLwotCQkJCWlmICh4bWF4 X2luZm9tYXNrX2NoYW5nZWQob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKKwkJCQlpZiAoeG1h eF9pbmZvbWFza19jaGFuZ2VkKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAogCQkJCQkJCQkJ CSAgaW5mb21hc2spIHx8Ci0JCQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKEhlYXBUdXBsZUhlYWRl ckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSksCisJCQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKEhl YXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEpLAogCQkJCQkJCQkJCSB4d2Fp dCkpCiAJCQkJCWdvdG8gbDI7CiAJCQl9CkBAIC0zNTk5LDggKzM0NTgsOCBAQCBsMjoKIAkJCSAq IGJlZm9yZSB0aGlzIG9uZSwgd2hpY2ggYXJlIGltcG9ydGFudCB0byBrZWVwIGluIGNhc2UgdGhp cwogCQkJICogc3VieGFjdCBhYm9ydHMuCiAJCQkgKi8KLQkJCWlmICghSEVBUF9YTUFYX0lTX0xP Q0tFRF9PTkxZKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2spKQotCQkJCXVwZGF0ZV94YWN0ID0g SGVhcFR1cGxlR2V0VXBkYXRlWGlkKG9sZHR1cC50X2RhdGEpOworCQkJaWYgKCFIRUFQX1hNQVhf SVNfTE9DS0VEX09OTFkob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2spKQorCQkJCXVwZGF0ZV94 YWN0ID0gSGVhcFR1cGxlR2V0VXBkYXRlWGlkKG9sZHR1cC0+dF9kYXRhKTsKIAkJCWVsc2UKIAkJ CQl1cGRhdGVfeGFjdCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCkBAIC0zNjQxLDkgKzM1MDAs OSBAQCBsMjoKIAkJCSAqIGxvY2suCiAJCQkgKi8KIAkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZG RVJfTE9DS19VTkxPQ0spOwotCQkJaGVhcF9hY3F1aXJlX3R1cGxvY2socmVsYXRpb24sICYob2xk dHVwLnRfc2VsZiksICpsb2NrbW9kZSwKKwkJCWhlYXBfYWNxdWlyZV90dXBsb2NrKHJlbGF0aW9u LCAmb2xkdHVwLT50X3NlbGYsICpsb2NrbW9kZSwKIAkJCQkJCQkJIExvY2tXYWl0QmxvY2ssICZo YXZlX3R1cGxlX2xvY2spOwotCQkJWGFjdExvY2tUYWJsZVdhaXQoeHdhaXQsIHJlbGF0aW9uLCAm b2xkdHVwLnRfc2VsZiwKKwkJCVhhY3RMb2NrVGFibGVXYWl0KHh3YWl0LCByZWxhdGlvbiwgJm9s ZHR1cC0+dF9zZWxmLAogCQkJCQkJCSAgWExUV19VcGRhdGUpOwogCQkJY2hlY2tlZF9sb2NrZXJz ID0gdHJ1ZTsKIAkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwpA QCAtMzY1MywyMCArMzUxMiwyMCBAQCBsMjoKIAkJCSAqIG90aGVyIHhhY3QgY291bGQgdXBkYXRl IHRoaXMgdHVwbGUgYmVmb3JlIHdlIGdldCB0byB0aGlzIHBvaW50LgogCQkJICogQ2hlY2sgZm9y IHhtYXggY2hhbmdlLCBhbmQgc3RhcnQgb3ZlciBpZiBzby4KIAkJCSAqLwotCQkJaWYgKHhtYXhf aW5mb21hc2tfY2hhbmdlZChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrLCBpbmZvbWFzaykgfHwK KwkJCWlmICh4bWF4X2luZm9tYXNrX2NoYW5nZWQob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2ss IGluZm9tYXNrKSB8fAogCQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKHh3YWl0LAotCQkJCQkJCQkJ IEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSkpKQorCQkJCQkJCQkJIEhl YXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEpKSkKIAkJCQlnb3RvIGwyOwog CiAJCQkvKiBPdGhlcndpc2UgY2hlY2sgaWYgaXQgY29tbWl0dGVkIG9yIGFib3J0ZWQgKi8KLQkJ CVVwZGF0ZVhtYXhIaW50Qml0cyhvbGR0dXAudF9kYXRhLCBidWZmZXIsIHh3YWl0KTsKLQkJCWlm IChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpCisJCQlVcGRh dGVYbWF4SGludEJpdHMob2xkdHVwLT50X2RhdGEsIGJ1ZmZlciwgeHdhaXQpOworCQkJaWYgKG9s ZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpCiAJCQkJY2FuX2Nv bnRpbnVlID0gdHJ1ZTsKIAkJfQogCiAJCWlmIChjYW5fY29udGludWUpCiAJCQlyZXN1bHQgPSBU TV9PazsKLQkJZWxzZSBpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKCZvbGR0dXAudF9zZWxmLCAmb2xk dHVwLnRfZGF0YS0+dF9jdGlkKSkKKwkJZWxzZSBpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKCZvbGR0 dXAtPnRfc2VsZiwgJm9sZHR1cC0+dF9kYXRhLT50X2N0aWQpKQogCQkJcmVzdWx0ID0gVE1fVXBk YXRlZDsKIAkJZWxzZQogCQkJcmVzdWx0ID0gVE1fRGVsZXRlZDsKQEAgLTM2NzksMzkgKzM1Mzgs MzMgQEAgbDI6CiAJCQkgICByZXN1bHQgPT0gVE1fVXBkYXRlZCB8fAogCQkJICAgcmVzdWx0ID09 IFRNX0RlbGV0ZWQgfHwKIAkJCSAgIHJlc3VsdCA9PSBUTV9CZWluZ01vZGlmaWVkKTsKLQkJQXNz ZXJ0KCEob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBfWE1BWF9JTlZBTElEKSk7CisJ CUFzc2VydCghKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQp KTsKIAkJQXNzZXJ0KHJlc3VsdCAhPSBUTV9VcGRhdGVkIHx8Ci0JCQkgICAhSXRlbVBvaW50ZXJF cXVhbHMoJm9sZHR1cC50X3NlbGYsICZvbGR0dXAudF9kYXRhLT50X2N0aWQpKTsKKwkJCSAgICFJ dGVtUG9pbnRlckVxdWFscygmb2xkdHVwLT50X3NlbGYsICZvbGR0dXAtPnRfZGF0YS0+dF9jdGlk KSk7CiAJfQogCiAJaWYgKGNyb3NzY2hlY2sgIT0gSW52YWxpZFNuYXBzaG90ICYmIHJlc3VsdCA9 PSBUTV9PaykKIAl7CiAJCS8qIFBlcmZvcm0gYWRkaXRpb25hbCBjaGVjayBmb3IgdHJhbnNhY3Rp b24tc25hcHNob3QgbW9kZSBSSSB1cGRhdGVzICovCi0JCWlmICghSGVhcFR1cGxlU2F0aXNmaWVz VmlzaWJpbGl0eSgmb2xkdHVwLCBjcm9zc2NoZWNrLCBidWZmZXIpKQorCQlpZiAoIUhlYXBUdXBs ZVNhdGlzZmllc1Zpc2liaWxpdHkob2xkdHVwLCBjcm9zc2NoZWNrLCBidWZmZXIpKQogCQkJcmVz dWx0ID0gVE1fVXBkYXRlZDsKIAl9CiAKIAlpZiAocmVzdWx0ICE9IFRNX09rKQogCXsKLQkJdG1m ZC0+Y3RpZCA9IG9sZHR1cC50X2RhdGEtPnRfY3RpZDsKLQkJdG1mZC0+eG1heCA9IEhlYXBUdXBs ZUhlYWRlckdldFVwZGF0ZVhpZChvbGR0dXAudF9kYXRhKTsKKwkJdG1mZC0+Y3RpZCA9IG9sZHR1 cC0+dF9kYXRhLT50X2N0aWQ7CisJCXRtZmQtPnhtYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRVcGRh dGVYaWQob2xkdHVwLT50X2RhdGEpOwogCQlpZiAocmVzdWx0ID09IFRNX1NlbGZNb2RpZmllZCkK LQkJCXRtZmQtPmNtYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRDbWF4KG9sZHR1cC50X2RhdGEpOwor CQkJdG1mZC0+Y21heCA9IEhlYXBUdXBsZUhlYWRlckdldENtYXgob2xkdHVwLT50X2RhdGEpOwog CQllbHNlCiAJCQl0bWZkLT5jbWF4ID0gSW52YWxpZENvbW1hbmRJZDsKIAkJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihidWZmZXIpOwogCQlpZiAoaGF2ZV90dXBsZV9sb2NrKQotCQkJVW5sb2NrVHVwbGVU dXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYpLCAqbG9ja21vZGUpOwotCQlpZiAodm1i dWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOworCQkJ VW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmb2xkdHVwLT50X3NlbGYsICpsb2NrbW9kZSk7 CisJCWlmICgqdm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKKwkJCVJlbGVhc2VCdWZmZXIoKnZt YnVmZmVyKTsKIAkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKIAotCQlibXNfZnJlZShob3Rf YXR0cnMpOwotCQlibXNfZnJlZShzdW1fYXR0cnMpOwotCQlibXNfZnJlZShrZXlfYXR0cnMpOwot CQlibXNfZnJlZShpZF9hdHRycyk7Ci0JCWJtc19mcmVlKG1vZGlmaWVkX2F0dHJzKTsKLQkJYm1z X2ZyZWUoaW50ZXJlc3RpbmdfYXR0cnMpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtMzcy NCwxMCArMzU3NywxMCBAQCBsMjoKIAkgKiB0dXBsZSBoYXMgYmVlbiBsb2NrZWQgb3IgdXBkYXRl ZCB1bmRlciB1cywgYnV0IGhvcGVmdWxseSBpdCB3b24ndAogCSAqIGhhcHBlbiB2ZXJ5IG9mdGVu LgogCSAqLwotCWlmICh2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2li bGUocGFnZSkpCisJaWYgKCp2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZp c2libGUocGFnZSkpCiAJewogCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NL KTsKLQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZmZXIpOworCQl2 aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxvY2ssIHZtYnVmZmVyKTsKIAkJTG9ja0J1ZmZl cihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJCWdvdG8gbDI7CiAJfQpAQCAtMzcz OCw5ICszNTkxLDkgQEAgbDI6CiAJICogSWYgdGhlIHR1cGxlIHdlJ3JlIHVwZGF0aW5nIGlzIGxv Y2tlZCwgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgbG9ja2luZwogCSAqIGluZm8gaW4gdGhlIG9s ZCB0dXBsZSdzIFhtYXguICBQcmVwYXJlIGEgbmV3IFhtYXggdmFsdWUgZm9yIHRoaXMuCiAJICov Ci0JY29tcHV0ZV9uZXdfeG1heF9pbmZvbWFzayhIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9s ZHR1cC50X2RhdGEpLAotCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKLQkJCQkJ CQkgIG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syLAorCWNvbXB1dGVfbmV3X3htYXhfaW5mb21h c2soSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAtPnRfZGF0YSksCisJCQkJCQkJICBv bGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaywKKwkJCQkJCQkgIG9sZHR1cC0+dF9kYXRhLT50X2lu Zm9tYXNrMiwKIAkJCQkJCQkgIHhpZCwgKmxvY2ttb2RlLCB0cnVlLAogCQkJCQkJCSAgJnhtYXhf b2xkX3R1cGxlLCAmaW5mb21hc2tfb2xkX3R1cGxlLAogCQkJCQkJCSAgJmluZm9tYXNrMl9vbGRf dHVwbGUpOwpAQCAtMzc1MiwxMiArMzYwNSwxMiBAQCBsMjoKIAkgKiB0dXBsZS4gIChJbiByYXJl IGNhc2VzIHRoYXQgbWlnaHQgYWxzbyBiZSBJbnZhbGlkVHJhbnNhY3Rpb25JZCBhbmQgeWV0CiAJ ICogbm90IGhhdmUgdGhlIEhFQVBfWE1BWF9JTlZBTElEIGJpdCBzZXQ7IHRoYXQncyBmaW5lLikK IAkgKi8KLQlpZiAoKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJ RCkgfHwKLQkJSEVBUF9MT0NLRURfVVBHUkFERUQob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaykg fHwKKwlpZiAoKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQp IHx8CisJCUhFQVBfTE9DS0VEX1VQR1JBREVEKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrKSB8 fAogCQkoY2hlY2tlZF9sb2NrZXJzICYmICFsb2NrZXJfcmVtYWlucykpCiAJCXhtYXhfbmV3X3R1 cGxlID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJZWxzZQotCQl4bWF4X25ld190dXBsZSA9IEhl YXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSk7CisJCXhtYXhfbmV3X3R1cGxl ID0gSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAtPnRfZGF0YSk7CiAKIAlpZiAoIVRy YW5zYWN0aW9uSWRJc1ZhbGlkKHhtYXhfbmV3X3R1cGxlKSkKIAl7CkBAIC0zNzcyLDcgKzM2MjUs NyBAQCBsMjoKIAkJICogTm90ZSB0aGF0IHNpbmNlIHdlJ3JlIGRvaW5nIGFuIHVwZGF0ZSwgdGhl IG9ubHkgcG9zc2liaWxpdHkgaXMgdGhhdAogCQkgKiB0aGUgbG9ja2VycyBoYWQgRk9SIEtFWSBT SEFSRSBsb2NrLgogCQkgKi8KLQkJaWYgKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQ X1hNQVhfSVNfTVVMVEkpCisJCWlmIChvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBf WE1BWF9JU19NVUxUSSkKIAkJewogCQkJR2V0TXVsdGlYYWN0SWRIaW50Qml0cyh4bWF4X25ld190 dXBsZSwgJmluZm9tYXNrX25ld190dXBsZSwKIAkJCQkJCQkJICAgJmluZm9tYXNrMl9uZXdfdHVw bGUpOwpAQCAtMzgwMCw3ICszNjUzLDcgQEAgbDI6CiAJICogUmVwbGFjZSBjaWQgd2l0aCBhIGNv bWJvIENJRCBpZiBuZWNlc3NhcnkuICBOb3RlIHRoYXQgd2UgYWxyZWFkeSBwdXQKIAkgKiB0aGUg cGxhaW4gY2lkIGludG8gdGhlIG5ldyB0dXBsZS4KIAkgKi8KLQlIZWFwVHVwbGVIZWFkZXJBZGp1 c3RDbWF4KG9sZHR1cC50X2RhdGEsICZjaWQsICZpc2NvbWJvKTsKKwlIZWFwVHVwbGVIZWFkZXJB ZGp1c3RDbWF4KG9sZHR1cC0+dF9kYXRhLCAmY2lkLCAmaXNjb21ibyk7CiAKIAkvKgogCSAqIElm IHRoZSB0b2FzdGVyIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCwgT1IgaWYgdGhlIG5ldyB0dXBsZSB3 aWxsIG5vdCBmaXQKQEAgLTM4MTcsMTIgKzM2NzAsMTIgQEAgbDI6CiAJCXJlbGF0aW9uLT5yZF9y ZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9NQVRWSUVXKQogCXsKIAkJLyogdG9hc3QgdGFibGUgZW50 cmllcyBzaG91bGQgbmV2ZXIgYmUgcmVjdXJzaXZlbHkgdG9hc3RlZCAqLwotCQlBc3NlcnQoIUhl YXBUdXBsZUhhc0V4dGVybmFsKCZvbGR0dXApKTsKKwkJQXNzZXJ0KCFIZWFwVHVwbGVIYXNFeHRl cm5hbChvbGR0dXApKTsKIAkJQXNzZXJ0KCFIZWFwVHVwbGVIYXNFeHRlcm5hbChuZXd0dXApKTsK IAkJbmVlZF90b2FzdCA9IGZhbHNlOwogCX0KIAllbHNlCi0JCW5lZWRfdG9hc3QgPSAoSGVhcFR1 cGxlSGFzRXh0ZXJuYWwoJm9sZHR1cCkgfHwKKwkJbmVlZF90b2FzdCA9IChIZWFwVHVwbGVIYXNF eHRlcm5hbChvbGR0dXApIHx8CiAJCQkJCSAgSGVhcFR1cGxlSGFzRXh0ZXJuYWwobmV3dHVwKSB8 fAogCQkJCQkgIG5ld3R1cC0+dF9sZW4gPiBUT0FTVF9UVVBMRV9USFJFU0hPTEQpOwogCkBAIC0z ODU1LDkgKzM3MDgsOSBAQCBsMjoKIAkJICogdXBkYXRpbmcsIGJlY2F1c2UgdGhlIHBvdGVudGlh bGx5IGNyZWF0ZWQgbXVsdGl4YWN0IHdvdWxkIG90aGVyd2lzZQogCQkgKiBiZSB3cm9uZy4KIAkJ ICovCi0JCWNvbXB1dGVfbmV3X3htYXhfaW5mb21hc2soSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1h eChvbGR0dXAudF9kYXRhKSwKLQkJCQkJCQkJICBvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrLAot CQkJCQkJCQkgIG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syLAorCQljb21wdXRlX25ld194bWF4 X2luZm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEpLAorCQkJ CQkJCQkgIG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAorCQkJCQkJCQkgIG9sZHR1cC0+dF9k YXRhLT50X2luZm9tYXNrMiwKIAkJCQkJCQkJICB4aWQsICpsb2NrbW9kZSwgZmFsc2UsCiAJCQkJ CQkJCSAgJnhtYXhfbG9ja19vbGRfdHVwbGUsICZpbmZvbWFza19sb2NrX29sZF90dXBsZSwKIAkJ CQkJCQkJICAmaW5mb21hc2syX2xvY2tfb2xkX3R1cGxlKTsKQEAgLTM4NjcsMTggKzM3MjAsMTgg QEAgbDI6CiAJCVNUQVJUX0NSSVRfU0VDVElPTigpOwogCiAJCS8qIENsZWFyIG9ic29sZXRlIHZp c2liaWxpdHkgZmxhZ3MgLi4uICovCi0JCW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJj0gfihI RUFQX1hNQVhfQklUUyB8IEhFQVBfTU9WRUQpOwotCQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNr MiAmPSB+SEVBUF9LRVlTX1VQREFURUQ7Ci0JCUhlYXBUdXBsZUNsZWFySG90VXBkYXRlZCgmb2xk dHVwKTsKKwkJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgJj0gfihIRUFQX1hNQVhfQklUUyB8 IEhFQVBfTU9WRUQpOworCQlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIgJj0gfkhFQVBfS0VZ U19VUERBVEVEOworCQlIZWFwVHVwbGVDbGVhckhvdFVwZGF0ZWQob2xkdHVwKTsKIAkJLyogLi4u IGFuZCBzdG9yZSBpbmZvIGFib3V0IHRyYW5zYWN0aW9uIHVwZGF0aW5nIHRoaXMgdHVwbGUgKi8K IAkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtYXhfbG9ja19vbGRfdHVwbGUpKTsKLQkJ SGVhcFR1cGxlSGVhZGVyU2V0WG1heChvbGR0dXAudF9kYXRhLCB4bWF4X2xvY2tfb2xkX3R1cGxl KTsKLQkJb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayB8PSBpbmZvbWFza19sb2NrX29sZF90dXBs ZTsKLQkJb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIgfD0gaW5mb21hc2syX2xvY2tfb2xkX3R1 cGxlOwotCQlIZWFwVHVwbGVIZWFkZXJTZXRDbWF4KG9sZHR1cC50X2RhdGEsIGNpZCwgaXNjb21i byk7CisJCUhlYXBUdXBsZUhlYWRlclNldFhtYXgob2xkdHVwLT50X2RhdGEsIHhtYXhfbG9ja19v bGRfdHVwbGUpOworCQlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayB8PSBpbmZvbWFza19sb2Nr X29sZF90dXBsZTsKKwkJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2syIHw9IGluZm9tYXNrMl9s b2NrX29sZF90dXBsZTsKKwkJSGVhcFR1cGxlSGVhZGVyU2V0Q21heChvbGR0dXAtPnRfZGF0YSwg Y2lkLCBpc2NvbWJvKTsKIAogCQkvKiB0ZW1wb3JhcmlseSBtYWtlIGl0IGxvb2sgbm90LXVwZGF0 ZWQsIGJ1dCBsb2NrZWQgKi8KLQkJb2xkdHVwLnRfZGF0YS0+dF9jdGlkID0gb2xkdHVwLnRfc2Vs ZjsKKwkJb2xkdHVwLT50X2RhdGEtPnRfY3RpZCA9IG9sZHR1cC0+dF9zZWxmOwogCiAJCS8qCiAJ CSAqIENsZWFyIGFsbC1mcm96ZW4gYml0IG9uIHZpc2liaWxpdHkgbWFwIGlmIG5lZWRlZC4gV2Ug Y291bGQKQEAgLTM4ODcsNyArMzc0MCw3IEBAIGwyOgogCQkgKiB3b3J0aHdoaWxlLgogCQkgKi8K IAkJaWYgKFBhZ2VJc0FsbFZpc2libGUocGFnZSkgJiYKLQkJCXZpc2liaWxpdHltYXBfY2xlYXIo cmVsYXRpb24sIGJsb2NrLCB2bWJ1ZmZlciwKKwkJCXZpc2liaWxpdHltYXBfY2xlYXIocmVsYXRp b24sIGJsb2NrLCAqdm1idWZmZXIsCiAJCQkJCQkJCVZJU0lCSUxJVFlNQVBfQUxMX0ZST1pFTikp CiAJCQljbGVhcmVkX2FsbF9mcm96ZW4gPSB0cnVlOwogCkBAIC0zOTAxLDEwICszNzU0LDEwIEBA IGwyOgogCQkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMCwgYnVm ZmVyLCBSRUdCVUZfU1RBTkRBUkQpOwogCi0JCQl4bHJlYy5vZmZudW0gPSBJdGVtUG9pbnRlckdl dE9mZnNldE51bWJlcigmb2xkdHVwLnRfc2VsZik7CisJCQl4bHJlYy5vZmZudW0gPSBJdGVtUG9p bnRlckdldE9mZnNldE51bWJlcigmb2xkdHVwLT50X3NlbGYpOwogCQkJeGxyZWMueG1heCA9IHht YXhfbG9ja19vbGRfdHVwbGU7Ci0JCQl4bHJlYy5pbmZvYml0c19zZXQgPSBjb21wdXRlX2luZm9i aXRzKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2ssCi0JCQkJCQkJCQkJCQkgIG9sZHR1cC50X2Rh dGEtPnRfaW5mb21hc2syKTsKKwkJCXhscmVjLmluZm9iaXRzX3NldCA9IGNvbXB1dGVfaW5mb2Jp dHMob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2ssCisJCQkJCQkJCQkJCQkgIG9sZHR1cC0+dF9k YXRhLT50X2luZm9tYXNrMik7CiAJCQl4bHJlYy5mbGFncyA9CiAJCQkJY2xlYXJlZF9hbGxfZnJv emVuID8gWExIX0xPQ0tfQUxMX0ZST1pFTl9DTEVBUkVEIDogMDsKIAkJCVhMb2dSZWdpc3RlckRh dGEoJnhscmVjLCBTaXplT2ZIZWFwTG9jayk7CkBAIC0zOTI2LDcgKzM3NzksNyBAQCBsMjoKIAkJ aWYgKG5lZWRfdG9hc3QpCiAJCXsKIAkJCS8qIE5vdGUgd2UgYWx3YXlzIHVzZSBXQUwgYW5kIEZT TSBkdXJpbmcgdXBkYXRlcyAqLwotCQkJaGVhcHR1cCA9IGhlYXBfdG9hc3RfaW5zZXJ0X29yX3Vw ZGF0ZShyZWxhdGlvbiwgbmV3dHVwLCAmb2xkdHVwLCAwKTsKKwkJCWhlYXB0dXAgPSBoZWFwX3Rv YXN0X2luc2VydF9vcl91cGRhdGUocmVsYXRpb24sIG5ld3R1cCwgb2xkdHVwLCAwKTsKIAkJCW5l d3R1cHNpemUgPSBNQVhBTElHTihoZWFwdHVwLT50X2xlbik7CiAJCX0KIAkJZWxzZQpAQCAtMzk2 MiwyMCArMzgxNSwyMCBAQCBsMjoKIAkJCQkvKiBJdCBkb2Vzbid0IGZpdCwgbXVzdCB1c2UgUmVs YXRpb25HZXRCdWZmZXJGb3JUdXBsZS4gKi8KIAkJCQluZXdidWYgPSBSZWxhdGlvbkdldEJ1ZmZl ckZvclR1cGxlKHJlbGF0aW9uLCBoZWFwdHVwLT50X2xlbiwKIAkJCQkJCQkJCQkJCSAgIGJ1ZmZl ciwgMCwgTlVMTCwKLQkJCQkJCQkJCQkJCSAgICZ2bWJ1ZmZlcl9uZXcsICZ2bWJ1ZmZlciwKKwkJ CQkJCQkJCQkJCSAgICZ2bWJ1ZmZlcl9uZXcsIHZtYnVmZmVyLAogCQkJCQkJCQkJCQkJICAgMCk7 CiAJCQkJLyogV2UncmUgYWxsIGRvbmUuICovCiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKiBBY3F1 aXJlIFZNIHBhZ2UgcGluIGlmIG5lZWRlZCBhbmQgd2UgZG9uJ3QgaGF2ZSBpdC4gKi8KLQkJCWlm ICh2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFnZSkpCi0J CQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZmZXIpOworCQkJaWYg KCp2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFnZSkpCisJ CQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCB2bWJ1ZmZlcik7CiAJCQkvKiBS ZS1hY3F1aXJlIHRoZSBsb2NrIG9uIHRoZSBvbGQgdHVwbGUncyBwYWdlLiAqLwogCQkJTG9ja0J1 ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJCQkvKiBSZS1jaGVjayB1c2lu ZyB0aGUgdXAtdG8tZGF0ZSBmcmVlIHNwYWNlICovCiAJCQlwYWdlZnJlZSA9IFBhZ2VHZXRIZWFw RnJlZVNwYWNlKHBhZ2UpOwogCQkJaWYgKG5ld3R1cHNpemUgPiBwYWdlZnJlZSB8fAotCQkJCSh2 bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFnZSkpKQorCQkJ CSgqdm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlciAmJiBQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpKSkK IAkJCXsKIAkJCQkvKgogCQkJCSAqIFJhdHMsIGl0IGRvZXNuJ3QgZml0IGFueW1vcmUsIG9yIHNv bWVib2R5IGp1c3Qgbm93IHNldCB0aGUKQEAgLTQwMTMsNyArMzg2Niw3IEBAIGwyOgogCSAqIHdp bGwgaW5jbHVkZSBjaGVja2luZyB0aGUgcmVsYXRpb24gbGV2ZWwsIHRoZXJlIGlzIG5vIGJlbmVm aXQgdG8gYQogCSAqIHNlcGFyYXRlIGNoZWNrIGZvciB0aGUgbmV3IHR1cGxlLgogCSAqLwotCUNo ZWNrRm9yU2VyaWFsaXphYmxlQ29uZmxpY3RJbihyZWxhdGlvbiwgJm9sZHR1cC50X3NlbGYsCisJ Q2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdEluKHJlbGF0aW9uLCAmb2xkdHVwLT50X3NlbGYs CiAJCQkJCQkJCSAgIEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcikpOwogCiAJLyoKQEAgLTQw MjEsNyArMzg3NCw2IEBAIGwyOgogCSAqIGhhcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXcgdHVw bGUuICBJZiB0aGV5IGFyZSB0aGUgc2FtZSBidWZmZXIsIG9ubHkKIAkgKiBvbmUgcGluIGlzIGhl bGQuCiAJICovCi0KIAlpZiAobmV3YnVmID09IGJ1ZmZlcikKIAl7CiAJCS8qCkBAIC00MDI5LDcg KzM4ODEsNyBAQCBsMjoKIAkJICogdG8gZG8gYSBIT1QgdXBkYXRlLiAgQ2hlY2sgaWYgYW55IG9m IHRoZSBpbmRleCBjb2x1bW5zIGhhdmUgYmVlbgogCQkgKiBjaGFuZ2VkLgogCQkgKi8KLQkJaWYg KCFibXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgaG90X2F0dHJzKSkKKwkJaWYgKCFibXNfb3Zl cmxhcChtaXhfYXR0cnMsIGhvdF9hdHRycykpCiAJCXsKIAkJCXVzZV9ob3RfdXBkYXRlID0gdHJ1 ZTsKIApAQCAtNDA0MCw3ICszODkyLDcgQEAgbDI6CiAJCQkgKiBpbmRleGVzIGlmIHRoZSBjb2x1 bW5zIHdlcmUgdXBkYXRlZCwgb3Igd2UgbWF5IGZhaWwgdG8gZGV0ZWN0CiAJCQkgKiBlLmcuIHZh bHVlIGJvdW5kIGNoYW5nZXMgaW4gQlJJTiBtaW5tYXggaW5kZXhlcy4KIAkJCSAqLwotCQkJaWYg KGJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBzdW1fYXR0cnMpKQorCQkJaWYgKGJtc19vdmVy bGFwKG1peF9hdHRycywgc3VtX2F0dHJzKSkKIAkJCQlzdW1tYXJpemVkX3VwZGF0ZSA9IHRydWU7 CiAJCX0KIAl9CkBAIC00MDU3LDEwICszOTA5LDggQEAgbDI6CiAJICogbG9nZ2VkLiAgUGFzcyBv bGQga2V5IHJlcXVpcmVkIGFzIHRydWUgb25seSBpZiB0aGUgcmVwbGljYSBpZGVudGl0eSBrZXkK IAkgKiBjb2x1bW5zIGFyZSBtb2RpZmllZCBvciBpdCBoYXMgZXh0ZXJuYWwgZGF0YS4KIAkgKi8K LQlvbGRfa2V5X3R1cGxlID0gRXh0cmFjdFJlcGxpY2FJZGVudGl0eShyZWxhdGlvbiwgJm9sZHR1 cCwKLQkJCQkJCQkJCQkgICBibXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgaWRfYXR0cnMpIHx8 Ci0JCQkJCQkJCQkJICAgaWRfaGFzX2V4dGVybmFsLAotCQkJCQkJCQkJCSAgICZvbGRfa2V5X2Nv cGllZCk7CisJb2xkX2tleV90dXBsZSA9IEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkocmVsYXRpb24s IG9sZHR1cCwgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAgIHJlcF9pZF9rZXlfcmVxdWlyZWQsICZv bGRfa2V5X2NvcGllZCk7CiAKIAkvKiBOTyBFUkVQT1JUKEVSUk9SKSBmcm9tIGhlcmUgdGlsbCBj aGFuZ2VzIGFyZSBsb2dnZWQgKi8KIAlTVEFSVF9DUklUX1NFQ1RJT04oKTsKQEAgLTQwODIsNyAr MzkzMiw3IEBAIGwyOgogCWlmICh1c2VfaG90X3VwZGF0ZSkKIAl7CiAJCS8qIE1hcmsgdGhlIG9s ZCB0dXBsZSBhcyBIT1QtdXBkYXRlZCAqLwotCQlIZWFwVHVwbGVTZXRIb3RVcGRhdGVkKCZvbGR0 dXApOworCQlIZWFwVHVwbGVTZXRIb3RVcGRhdGVkKG9sZHR1cCk7CiAJCS8qIEFuZCBtYXJrIHRo ZSBuZXcgdHVwbGUgYXMgaGVhcC1vbmx5ICovCiAJCUhlYXBUdXBsZVNldEhlYXBPbmx5KGhlYXB0 dXApOwogCQkvKiBNYXJrIHRoZSBjYWxsZXIncyBjb3B5IHRvbywgaW4gY2FzZSBkaWZmZXJlbnQg ZnJvbSBoZWFwdHVwICovCkBAIC00MDkxLDcgKzM5NDEsNyBAQCBsMjoKIAllbHNlCiAJewogCQkv KiBNYWtlIHN1cmUgdHVwbGVzIGFyZSBjb3JyZWN0bHkgbWFya2VkIGFzIG5vdC1IT1QgKi8KLQkJ SGVhcFR1cGxlQ2xlYXJIb3RVcGRhdGVkKCZvbGR0dXApOworCQlIZWFwVHVwbGVDbGVhckhvdFVw ZGF0ZWQob2xkdHVwKTsKIAkJSGVhcFR1cGxlQ2xlYXJIZWFwT25seShoZWFwdHVwKTsKIAkJSGVh cFR1cGxlQ2xlYXJIZWFwT25seShuZXd0dXApOwogCX0KQEAgLTQxMDAsMTcgKzM5NTAsMTcgQEAg bDI6CiAKIAogCS8qIENsZWFyIG9ic29sZXRlIHZpc2liaWxpdHkgZmxhZ3MsIHBvc3NpYmx5IHNl dCBieSBvdXJzZWx2ZXMgYWJvdmUuLi4gKi8KLQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrICY9 IH4oSEVBUF9YTUFYX0JJVFMgfCBIRUFQX01PVkVEKTsKLQlvbGR0dXAudF9kYXRhLT50X2luZm9t YXNrMiAmPSB+SEVBUF9LRVlTX1VQREFURUQ7CisJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sg Jj0gfihIRUFQX1hNQVhfQklUUyB8IEhFQVBfTU9WRUQpOworCW9sZHR1cC0+dF9kYXRhLT50X2lu Zm9tYXNrMiAmPSB+SEVBUF9LRVlTX1VQREFURUQ7CiAJLyogLi4uIGFuZCBzdG9yZSBpbmZvIGFi b3V0IHRyYW5zYWN0aW9uIHVwZGF0aW5nIHRoaXMgdHVwbGUgKi8KIAlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoeG1heF9vbGRfdHVwbGUpKTsKLQlIZWFwVHVwbGVIZWFkZXJTZXRYbWF4KG9s ZHR1cC50X2RhdGEsIHhtYXhfb2xkX3R1cGxlKTsKLQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNr IHw9IGluZm9tYXNrX29sZF90dXBsZTsKLQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrMiB8PSBp bmZvbWFzazJfb2xkX3R1cGxlOwotCUhlYXBUdXBsZUhlYWRlclNldENtYXgob2xkdHVwLnRfZGF0 YSwgY2lkLCBpc2NvbWJvKTsKKwlIZWFwVHVwbGVIZWFkZXJTZXRYbWF4KG9sZHR1cC0+dF9kYXRh LCB4bWF4X29sZF90dXBsZSk7CisJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgfD0gaW5mb21h c2tfb2xkX3R1cGxlOworCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrMiB8PSBpbmZvbWFzazJf b2xkX3R1cGxlOworCUhlYXBUdXBsZUhlYWRlclNldENtYXgob2xkdHVwLT50X2RhdGEsIGNpZCwg aXNjb21ibyk7CiAKIAkvKiByZWNvcmQgYWRkcmVzcyBvZiBuZXcgdHVwbGUgaW4gdF9jdGlkIG9m IG9sZCBvbmUgKi8KLQlvbGR0dXAudF9kYXRhLT50X2N0aWQgPSBoZWFwdHVwLT50X3NlbGY7CisJ b2xkdHVwLT50X2RhdGEtPnRfY3RpZCA9IGhlYXB0dXAtPnRfc2VsZjsKIAogCS8qIGNsZWFyIFBE X0FMTF9WSVNJQkxFIGZsYWdzLCByZXNldCBhbGwgdmlzaWJpbGl0eW1hcCBiaXRzICovCiAJaWYg KFBhZ2VJc0FsbFZpc2libGUoQnVmZmVyR2V0UGFnZShidWZmZXIpKSkKQEAgLTQxMTgsNyArMzk2 OCw3IEBAIGwyOgogCQlhbGxfdmlzaWJsZV9jbGVhcmVkID0gdHJ1ZTsKIAkJUGFnZUNsZWFyQWxs VmlzaWJsZShCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOwogCQl2aXNpYmlsaXR5bWFwX2NsZWFyKHJl bGF0aW9uLCBCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXIpLAotCQkJCQkJCXZtYnVmZmVyLCBW SVNJQklMSVRZTUFQX1ZBTElEX0JJVFMpOworCQkJCQkJCSp2bWJ1ZmZlciwgVklTSUJJTElUWU1B UF9WQUxJRF9CSVRTKTsKIAl9CiAJaWYgKG5ld2J1ZiAhPSBidWZmZXIgJiYgUGFnZUlzQWxsVmlz aWJsZShCdWZmZXJHZXRQYWdlKG5ld2J1ZikpKQogCXsKQEAgLTQxNDMsMTIgKzM5OTMsMTIgQEAg bDI6CiAJCSAqLwogCQlpZiAoUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhy ZWxhdGlvbikpCiAJCXsKLQkJCWxvZ19oZWFwX25ld19jaWQocmVsYXRpb24sICZvbGR0dXApOwor CQkJbG9nX2hlYXBfbmV3X2NpZChyZWxhdGlvbiwgb2xkdHVwKTsKIAkJCWxvZ19oZWFwX25ld19j aWQocmVsYXRpb24sIGhlYXB0dXApOwogCQl9CiAKIAkJcmVjcHRyID0gbG9nX2hlYXBfdXBkYXRl KHJlbGF0aW9uLCBidWZmZXIsCi0JCQkJCQkJCSBuZXdidWYsICZvbGR0dXAsIGhlYXB0dXAsCisJ CQkJCQkJCSBuZXdidWYsIG9sZHR1cCwgaGVhcHR1cCwKIAkJCQkJCQkJIG9sZF9rZXlfdHVwbGUs CiAJCQkJCQkJCSBhbGxfdmlzaWJsZV9jbGVhcmVkLAogCQkJCQkJCQkgYWxsX3Zpc2libGVfY2xl YXJlZF9uZXcpOwpAQCAtNDE3Myw3ICs0MDIzLDcgQEAgbDI6CiAJICogYm90aCB0dXBsZSB2ZXJz aW9ucyBpbiBvbmUgY2FsbCB0byBpbnZhbC5jIHNvIHdlIGNhbiBhdm9pZCByZWR1bmRhbnQKIAkg KiBzaW52YWwgbWVzc2FnZXMuKQogCSAqLwotCUNhY2hlSW52YWxpZGF0ZUhlYXBUdXBsZShyZWxh dGlvbiwgJm9sZHR1cCwgaGVhcHR1cCk7CisJQ2FjaGVJbnZhbGlkYXRlSGVhcFR1cGxlKHJlbGF0 aW9uLCBvbGR0dXAsIGhlYXB0dXApOwogCiAJLyogTm93IHdlIGNhbiByZWxlYXNlIHRoZSBidWZm ZXIocykgKi8KIAlpZiAobmV3YnVmICE9IGJ1ZmZlcikKQEAgLTQxODEsMTQgKzQwMzEsMTQgQEAg bDI6CiAJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCWlmIChCdWZmZXJJc1ZhbGlkKHZtYnVmZmVy X25ldykpCiAJCVJlbGVhc2VCdWZmZXIodm1idWZmZXJfbmV3KTsKLQlpZiAoQnVmZmVySXNWYWxp ZCh2bWJ1ZmZlcikpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOworCWlmIChCdWZmZXJJc1Zh bGlkKCp2bWJ1ZmZlcikpCisJCVJlbGVhc2VCdWZmZXIoKnZtYnVmZmVyKTsKIAogCS8qCiAJICog UmVsZWFzZSB0aGUgbG1nciB0dXBsZSBsb2NrLCBpZiB3ZSBoYWQgaXQuCiAJICovCiAJaWYgKGhh dmVfdHVwbGVfbG9jaykKLQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50 X3NlbGYpLCAqbG9ja21vZGUpOworCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRpb24sICZvbGR0 dXAtPnRfc2VsZiwgKmxvY2ttb2RlKTsKIAogCXBnc3RhdF9jb3VudF9oZWFwX3VwZGF0ZShyZWxh dGlvbiwgdXNlX2hvdF91cGRhdGUsIG5ld2J1ZiAhPSBidWZmZXIpOwogCkBAIC00MjIxLDEzICs0 MDcxLDYgQEAgbDI6CiAJaWYgKG9sZF9rZXlfdHVwbGUgIT0gTlVMTCAmJiBvbGRfa2V5X2NvcGll ZCkKIAkJaGVhcF9mcmVldHVwbGUob2xkX2tleV90dXBsZSk7CiAKLQlibXNfZnJlZShob3RfYXR0 cnMpOwotCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JYm1zX2ZyZWUoa2V5X2F0dHJzKTsKLQlibXNf ZnJlZShpZF9hdHRycyk7Ci0JYm1zX2ZyZWUobW9kaWZpZWRfYXR0cnMpOwotCWJtc19mcmVlKGlu dGVyZXN0aW5nX2F0dHJzKTsKLQogCXJldHVybiBUTV9PazsKIH0KIApAQCAtNDIzNiw3ICs0MDc5 LDcgQEAgbDI6CiAgKiBDb25maXJtIGFkZXF1YXRlIGxvY2sgaGVsZCBkdXJpbmcgaGVhcF91cGRh dGUoKSwgcGVyIHJ1bGVzIGZyb20KICAqIFJFQURNRS50dXBsb2NrIHNlY3Rpb24gIkxvY2tpbmcg dG8gd3JpdGUgaW5wbGFjZS11cGRhdGVkIHRhYmxlcyIuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lk CiBjaGVja19sb2NrX2lmX2lucGxhY2VfdXBkYXRlYWJsZV9yZWwoUmVsYXRpb24gcmVsYXRpb24s CiAJCQkJCQkJCQkgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLAogCQkJCQkJCQkJIEhlYXBU dXBsZSBuZXd0dXApCkBAIC00NDA4LDcgKzQyNTEsNyBAQCBoZWFwX2F0dHJfZXF1YWxzKFR1cGxl RGVzYyB0dXBkZXNjLCBpbnQgYXR0cm51bSwgRGF0dW0gdmFsdWUxLCBEYXR1bSB2YWx1ZTIsCiAg KiBsaXN0ZWQgYXMgaW50ZXJlc3RpbmcpIG9mIHRoZSBvbGQgdHVwbGUgaXMgYSBtZW1iZXIgb2Yg ZXh0ZXJuYWxfY29scyBhbmQgaXMKICAqIHN0b3JlZCBleHRlcm5hbGx5LgogICovCi1zdGF0aWMg Qml0bWFwc2V0ICoKK0JpdG1hcHNldCAqCiBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRp b24gcmVsYXRpb24sCiAJCQkJCQkgQml0bWFwc2V0ICppbnRlcmVzdGluZ19jb2xzLAogCQkJCQkJ IEJpdG1hcHNldCAqZXh0ZXJuYWxfY29scywKQEAgLTQ0OTEsMjUgKzQzMzQsMTc1IEBAIEhlYXBE ZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKIH0KIAogLyoKLSAqCXNpbXBs ZV9oZWFwX3VwZGF0ZSAtIHJlcGxhY2UgYSB0dXBsZQotICoKLSAqIFRoaXMgcm91dGluZSBtYXkg YmUgdXNlZCB0byB1cGRhdGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBvZgotICog dGhlIHRhcmdldCB0dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3IgZXhhbXBsZSwgYmVjYXVzZSB3 ZSBoYXZlIGEgbG9jawotICogb24gdGhlIHJlbGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHVw bGUpLiAgQW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQKLSAqIHZpYSBlcmVwb3J0KCkuCisgKiBUaGlz IHJvdXRpbmUgbWF5IGJlIHVzZWQgdG8gdXBkYXRlIGEgdHVwbGUgd2hlbiBjb25jdXJyZW50IHVw ZGF0ZXMgb2YgdGhlCisgKiB0YXJnZXQgdHVwbGUgYXJlIG5vdCBleHBlY3RlZCAoZm9yIGV4YW1w bGUsIGJlY2F1c2Ugd2UgaGF2ZSBhIGxvY2sgb24gdGhlCisgKiByZWxhdGlvbiBhc3NvY2lhdGVk IHdpdGggdGhlIHR1cGxlKS4gIEFueSBmYWlsdXJlIGlzIHJlcG9ydGVkIHZpYSBlcmVwb3J0KCku CiAgKi8KIHZvaWQKLXNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwLAorc2ltcGxlX2hlYXBfdXBkYXRl KFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBs ZSB0dXBsZSwKIAkJCQkgICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlU TV9SZXN1bHQJcmVzdWx0OwogCVRNX0ZhaWx1cmVEYXRhIHRtZmQ7CiAJTG9ja1R1cGxlTW9kZSBs b2NrbW9kZTsKKwlCdWZmZXIJCWJ1ZmZlcjsKKwlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxpZEJ1 ZmZlcjsKKwlQYWdlCQlwYWdlOworCUJsb2NrTnVtYmVyIGJsb2NrOworCUJpdG1hcHNldCAgKmhv dF9hdHRycywKKwkJCSAgICpzdW1fYXR0cnMsCisJCQkgICAqcGtfYXR0cnMsCisJCQkgICAqcmlk X2F0dHJzLAorCQkJICAgKm1peF9hdHRycywKKwkJCSAgICppZHhfYXR0cnM7CisJSXRlbUlkCQls cDsKKwlIZWFwVHVwbGVEYXRhIG9sZHR1cDsKKwlib29sCQlyZXBfaWRfa2V5X3JlcXVpcmVkID0g ZmFsc2U7CisKKwlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKG90aWQpKTsKKworCS8qIENoZWFw LCBzaW1wbGlzdGljIGNoZWNrIHRoYXQgdGhlIHR1cGxlIG1hdGNoZXMgdGhlIHJlbCdzIHJvd3R5 cGUuICovCisJQXNzZXJ0KEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2RhdGEpIDw9 CisJCSAgIFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7CisKKwkvKgor CSAqIEZvcmJpZCB0aGlzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVzdCBpdCBhbGxv Y2F0ZSBhIGNvbWJvIENJRC4KKwkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5lZWQgdGhhdCBjb21i byBDSUQgZm9yIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKKwkgKiBoYXZlIG5vIHByb3Zpc2lv biBmb3IgYnJvYWRjYXN0aW5nIGl0IHRvIHRoZW0uCisJICovCisJaWYgKElzSW5QYXJhbGxlbE1v ZGUoKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVFJB TlNBQ1RJT05fU1RBVEUpLAorCQkJCSBlcnJtc2coImNhbm5vdCB1cGRhdGUgdHVwbGVzIGR1cmlu ZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiIpKSk7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisJY2hlY2tfbG9ja19pZl9pbnBsYWNlX3VwZGF0ZWFibGVfcmVsKHJlbGF0aW9uLCBvdGlkLCB0 dXBsZSk7CisjZW5kaWYKKworCS8qCisJICogRmV0Y2ggdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyB0 byBiZSBjaGVja2VkIGZvciB2YXJpb3VzIG9wZXJhdGlvbnMuCisJICoKKwkgKiBGb3IgSE9UIGNv bnNpZGVyYXRpb25zLCB0aGlzIGlzIHdhc3RlZCBlZmZvcnQgaWYgd2UgZmFpbCB0byB1cGRhdGUg b3IKKwkgKiBoYXZlIHRvIHB1dCB0aGUgbmV3IHR1cGxlIG9uIGEgZGlmZmVyZW50IHBhZ2UuICBC dXQgd2UgbXVzdCBjb21wdXRlIHRoZQorCSAqIGxpc3QgYmVmb3JlIG9idGFpbmluZyBidWZmZXIg bG9jayAtLS0gaW4gdGhlIHdvcnN0IGNhc2UsIGlmIHdlIGFyZQorCSAqIGRvaW5nIGFuIHVwZGF0 ZSBvbiBvbmUgb2YgdGhlIHJlbGV2YW50IHN5c3RlbSBjYXRhbG9ncywgd2UgY291bGQKKwkgKiBk ZWFkbG9jayBpZiB3ZSB0cnkgdG8gZmV0Y2ggdGhlIGxpc3QgbGF0ZXIuICBJbiBhbnkgY2FzZSwg dGhlIHJlbGNhY2hlCisJICogY2FjaGVzIHRoZSBkYXRhIHNvIHRoaXMgaXMgdXN1YWxseSBwcmV0 dHkgY2hlYXAuCisJICoKKwkgKiBXZSBhbHNvIG5lZWQgY29sdW1ucyB1c2VkIGJ5IHRoZSByZXBs aWNhIGlkZW50aXR5IGFuZCBjb2x1bW5zIHRoYXQgYXJlCisJICogY29uc2lkZXJlZCB0aGUgImtl eSIgb2Ygcm93cyBpbiB0aGUgdGFibGUuCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgZ2V0IGNvcGll cyBvZiBlYWNoIGJpdG1hcCwgc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQKKwkgKiByZWxjYWNo ZSBmbHVzaCBoYXBwZW5pbmcgbWlkd2F5IHRocm91Z2guCisJICovCisJaG90X2F0dHJzID0gUmVs YXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJCQkJCQkJCQkJICAgSU5ERVhfQVRU Ul9CSVRNQVBfSE9UX0JMT0NLSU5HKTsKKwlzdW1fYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0 ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJ WkVEKTsKKwlwa19hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJ TkRFWF9BVFRSX0JJVE1BUF9LRVkpOworCXJpZF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRy Qml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX0lERU5USVRZ X0tFWSk7CisKKwlpZHhfYXR0cnMgPSBibXNfY29weShob3RfYXR0cnMpOworCWlkeF9hdHRycyA9 IGJtc19hZGRfbWVtYmVycyhpZHhfYXR0cnMsIHN1bV9hdHRycyk7CisJaWR4X2F0dHJzID0gYm1z X2FkZF9tZW1iZXJzKGlkeF9hdHRycywgcGtfYXR0cnMpOworCWlkeF9hdHRycyA9IGJtc19hZGRf bWVtYmVycyhpZHhfYXR0cnMsIHJpZF9hdHRycyk7CisKKwlibG9jayA9IEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIob3RpZCk7CisJSU5KRUNUSU9OX1BPSU5UKCJoZWFwX3VwZGF0ZS1iZWZvcmUt cGluIiwgTlVMTCk7CisJYnVmZmVyID0gUmVhZEJ1ZmZlcihyZWxhdGlvbiwgYmxvY2spOworCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisKKwkvKgorCSAqIEJlZm9yZSBsb2NraW5nIHRo ZSBidWZmZXIsIHBpbiB0aGUgdmlzaWJpbGl0eSBtYXAgcGFnZSBpZiBpdCBhcHBlYXJzIHRvCisJ ICogYmUgbmVjZXNzYXJ5LiAgU2luY2Ugd2UgaGF2ZW4ndCBnb3QgdGhlIGxvY2sgeWV0LCBzb21l b25lIGVsc2UgbWlnaHQgYmUKKwkgKiBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIHRoaXMsIHNv IHdlJ2xsIG5lZWQgdG8gcmVjaGVjayBhZnRlciB3ZSBoYXZlCisJICogdGhlIGxvY2suCisJICov CisJaWYgKFBhZ2VJc0FsbFZpc2libGUocGFnZSkpCisJCXZpc2liaWxpdHltYXBfcGluKHJlbGF0 aW9uLCBibG9jaywgJnZtYnVmZmVyKTsKKworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9D S19FWENMVVNJVkUpOworCisJbHAgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIEl0ZW1Qb2ludGVyR2V0 T2Zmc2V0TnVtYmVyKG90aWQpKTsKKworCS8qCisJICogVXN1YWxseSwgYSBidWZmZXIgcGluIGFu ZC9vciBzbmFwc2hvdCBibG9ja3MgcHJ1bmluZyBvZiBvdGlkLCBlbnN1cmluZworCSAqIHdlIHNl ZSBMUF9OT1JNQUwgaGVyZS4gIFdoZW4gdGhlIG90aWQgb3JpZ2luIGlzIGEgc3lzY2FjaGUsIHdl IG1heSBoYXZlCisJICogbmVpdGhlciBhIHBpbiBub3IgYSBzbmFwc2hvdC4gIEhlbmNlLCB3ZSBt YXkgc2VlIG90aGVyIExQXyBzdGF0ZXMsIGVhY2gKKwkgKiBvZiB3aGljaCBpbmRpY2F0ZXMgY29u Y3VycmVudCBwcnVuaW5nLgorCSAqCisJICogRmFpbGluZyB3aXRoIFRNX1VwZGF0ZWQgd291bGQg YmUgbW9zdCBhY2N1cmF0ZS4gIEhvd2V2ZXIsIHVubGlrZSBvdGhlcgorCSAqIFRNX1VwZGF0ZWQg c2NlbmFyaW9zLCB3ZSBkb24ndCBrbm93IHRoZSBzdWNjZXNzb3IgY3RpZCBpbiBMUF9VTlVTRUQg YW5kCisJICogTFBfREVBRCBjYXNlcy4gIFdoaWxlIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIFRN X1VwZGF0ZWQgYW5kIFRNX0RlbGV0ZWQKKwkgKiBkb2VzIG1hdHRlciB0byBTUUwgc3RhdGVtZW50 cyBVUERBVEUgYW5kIE1FUkdFLCB0aG9zZSBTUUwgc3RhdGVtZW50cworCSAqIGhvbGQgYSBzbmFw c2hvdCB0aGF0IGVuc3VyZXMgTFBfTk9STUFMLiAgSGVuY2UsIHRoZSBjaG9pY2UgYmV0d2Vlbgor CSAqIFRNX1VwZGF0ZWQgYW5kIFRNX0RlbGV0ZWQgYWZmZWN0cyBvbmx5IHRoZSB3b3JkaW5nIG9m IGVycm9yIG1lc3NhZ2VzLgorCSAqIFNldHRsZSBvbiBUTV9EZWxldGVkLCBmb3IgdHdvIHJlYXNv bnMuICBGaXJzdCwgaXQgYXZvaWRzIGNvbXBsaWNhdGluZworCSAqIHRoZSBzcGVjaWZpY2F0aW9u IG9mIHdoZW4gdG1mZC0+Y3RpZCBpcyB2YWxpZC4gIFNlY29uZCwgaXQgY3JlYXRlcworCSAqIGVy cm9yIGxvZyBldmlkZW5jZSB0aGF0IHdlIHRvb2sgdGhpcyBicmFuY2guCisJICoKKwkgKiBTaW5j ZSBpdCdzIHBvc3NpYmxlIHRvIHNlZSBMUF9VTlVTRUQgYXQgb3RpZCwgaXQncyBhbHNvIHBvc3Np YmxlIHRvIHNlZQorCSAqIExQX05PUk1BTCBmb3IgYSB0dXBsZSB0aGF0IHJlcGxhY2VkIExQX1VO VVNFRC4gIElmIGl0J3MgYSB0dXBsZSBmb3IgYW4KKwkgKiB1bnJlbGF0ZWQgcm93LCB3ZSdsbCBm YWlsIHdpdGggImR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIi4KKwkgKiBYWFgg aWYgb3RpZCBpcyB0aGUgbGl2ZSwgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgbmV3dHVwIHJvdywgd2Un bGwgZGlzY2FyZAorCSAqIGNoYW5nZXMgb3JpZ2luYXRpbmcgaW4gdmVyc2lvbnMgb2YgdGhpcyBj YXRhbG9nIHJvdyBhZnRlciB0aGUgdmVyc2lvbgorCSAqIHRoZSBjYWxsZXIgZ290IGZyb20gc3lz Y2FjaGUuICBTZWUgc3lzY2FjaGUtdXBkYXRlLXBydW5lZC5zcGVjLgorCSAqLworCWlmICghSXRl bUlkSXNOb3JtYWwobHApKQorCXsKKwkJQXNzZXJ0KFJlbGF0aW9uU3VwcG9ydHNTeXNDYWNoZShS ZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSkpOworCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVm ZmVyKTsKKwkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCisJCQlSZWxlYXNlQnVmZmVy KHZtYnVmZmVyKTsKKwkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKKworCQlibXNfZnJlZSho b3RfYXR0cnMpOworCQlibXNfZnJlZShzdW1fYXR0cnMpOworCQlibXNfZnJlZShwa19hdHRycyk7 CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CisJCWJtc19mcmVlKGlkeF9hdHRycyk7CisJCS8qIG1p eF9hdHRycyBub3QgeWV0IGluaXRpYWxpemVkICovCisKKwkJZWxvZyhFUlJPUiwgInR1cGxlIGNv bmN1cnJlbnRseSBkZWxldGVkIik7CisKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUGFydGlh bGx5IGNvbnN0cnVjdCB0aGUgb2xkdHVwIGZvciBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8gdG8g d29yayBhbmQKKwkgKiB0aGVuIHBhc3MgdGhhdCBvbiB0byBoZWFwX3VwZGF0ZS4KKwkgKi8KKwlv bGR0dXAudF90YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCW9sZHR1cC50 X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBscCk7CisJb2xkdHVw LnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKKwlvbGR0dXAudF9zZWxmID0gKm90aWQ7CisK KwltaXhfYXR0cnMgPSBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8ocmVsYXRpb24sIGlkeF9hdHRy cywgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAmb2xkdHVwLCB0dXBsZSwgJnJlcF9pZF9rZXlfcmVx dWlyZWQpOworCisJLyoKKwkgKiBXZSdsbCBuZWVkIHRvIFdBTCBsb2cgdGhlIHJlcGxpY2EgaWRl bnRpdHkgYXR0cmlidXRlcyBpZiBlaXRoZXIgdGhleQorCSAqIG92ZXJsYXAgd2l0aCB0aGUgbW9k aWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIG9yLCBhcyB3ZSd2ZSBjaGVja2VkIGZvcgorCSAqIGp1 c3Qgbm93IGluIEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbywgdGhleSB3ZXJlIHVubW9kaWZpZWQg ZXh0ZXJuYWwKKwkgKiBpbmRleGVkIGF0dHJpYnV0ZXMuCisJICovCisJcmVwX2lkX2tleV9yZXF1 aXJlZCA9IHJlcF9pZF9rZXlfcmVxdWlyZWQgfHwgYm1zX292ZXJsYXAobWl4X2F0dHJzLCByaWRf YXR0cnMpOworCisJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sICZvbGR0dXAsIHR1cGxl LCBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJIEludmFsaWRTbmFwc2hvdCwgdHJ1 ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLCAmdG1mZCwgJmxvY2ttb2RlLAorCQkJCQkJIGJ1ZmZl ciwgcGFnZSwgYmxvY2ssIGxwLCBob3RfYXR0cnMsIHN1bV9hdHRycywgcGtfYXR0cnMsCisJCQkJ CQkgcmlkX2F0dHJzLCBtaXhfYXR0cnMsICZ2bWJ1ZmZlciwgcmVwX2lkX2tleV9yZXF1aXJlZCwK KwkJCQkJCSB1cGRhdGVfaW5kZXhlcyk7CisKKwlibXNfZnJlZShob3RfYXR0cnMpOworCWJtc19m cmVlKHN1bV9hdHRycyk7CisJYm1zX2ZyZWUocGtfYXR0cnMpOworCWJtc19mcmVlKHJpZF9hdHRy cyk7CisJYm1zX2ZyZWUobWl4X2F0dHJzKTsKKwlibXNfZnJlZShpZHhfYXR0cnMpOwogCi0JcmVz dWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cCwKLQkJCQkJCSBHZXRDdXJyZW50 Q29tbWFuZElkKHRydWUpLCBJbnZhbGlkU25hcHNob3QsCi0JCQkJCQkgdHJ1ZSAvKiB3YWl0IGZv ciBjb21taXQgKi8gLAotCQkJCQkJICZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsK IAlzd2l0Y2ggKHJlc3VsdCkKIAl7CiAJCWNhc2UgVE1fU2VsZk1vZGlmaWVkOgpAQCAtOTE0OSwx MiArOTE0MiwxMSBAQCBsb2dfaGVhcF9uZXdfY2lkKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVw bGUgdHVwKQogICogdGhlIHNhbWUgdHVwbGUgdGhhdCB3YXMgcGFzc2VkIGluLgogICovCiBzdGF0 aWMgSGVhcFR1cGxlCi1FeHRyYWN0UmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbGF0aW9uLCBI ZWFwVHVwbGUgdHAsIGJvb2wga2V5X3JlcXVpcmVkLAotCQkJCQkgICBib29sICpjb3B5KQorRXh0 cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHRwLCBCaXRt YXBzZXQgKnJpZF9hdHRycywKKwkJCQkJICAgYm9vbCBrZXlfcmVxdWlyZWQsIGJvb2wgKmNvcHkp CiB7CiAJVHVwbGVEZXNjCWRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKIAljaGFy CQlyZXBsaWRlbnQgPSByZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXBsaWRlbnQ7Ci0JQml0bWFwc2V0 ICAqaWRhdHRyczsKIAlIZWFwVHVwbGUJa2V5X3R1cGxlOwogCWJvb2wJCW51bGxzW01heEhlYXBB dHRyaWJ1dGVOdW1iZXJdOwogCURhdHVtCQl2YWx1ZXNbTWF4SGVhcEF0dHJpYnV0ZU51bWJlcl07 CkBAIC05MTg1LDE3ICs5MTc3LDEzIEBAIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24g cmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCiAJaWYgKCFrZXlfcmVx dWlyZWQpCiAJCXJldHVybiBOVUxMOwogCi0JLyogZmluZCBvdXQgdGhlIHJlcGxpY2EgaWRlbnRp dHkgY29sdW1ucyAqLwotCWlkYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxh dGlvbiwKLQkJCQkJCQkJCQkgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsKLQogCS8q CiAJICogSWYgdGhlcmUncyBubyBkZWZpbmVkIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucywgdHJl YXQgYXMgIWtleV9yZXF1aXJlZC4KIAkgKiAoVGhpcyBjYXNlIHNob3VsZCBub3QgYmUgcmVhY2hh YmxlIGZyb20gaGVhcF91cGRhdGUsIHNpbmNlIHRoYXQgc2hvdWxkCiAJICogY2FsY3VsYXRlIGtl eV9yZXF1aXJlZCBhY2N1cmF0ZWx5LiAgQnV0IGhlYXBfZGVsZXRlIGp1c3QgcGFzc2VzCiAJICog Y29uc3RhbnQgdHJ1ZSBmb3Iga2V5X3JlcXVpcmVkLCBzbyB3ZSBjYW4gaGl0IHRoaXMgY2FzZSBp biBkZWxldGVzLikKIAkgKi8KLQlpZiAoYm1zX2lzX2VtcHR5KGlkYXR0cnMpKQorCWlmIChibXNf aXNfZW1wdHkocmlkX2F0dHJzKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAtOTIwOCw3ICs5 MTk2LDcgQEAgRXh0cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1 cGxlIHRwLCBib29sIGtleV9yZXF1aXJlZCwKIAlmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPm5h dHRzOyBpKyspCiAJewogCQlpZiAoYm1zX2lzX21lbWJlcihpICsgMSAtIEZpcnN0TG93SW52YWxp ZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCQkgIGlkYXR0cnMpKQorCQkJCQkJICByaWRfYXR0 cnMpKQogCQkJQXNzZXJ0KCFudWxsc1tpXSk7CiAJCWVsc2UKIAkJCW51bGxzW2ldID0gdHJ1ZTsK QEAgLTkyMTcsOCArOTIwNSw2IEBAIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24gcmVs YXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCiAJa2V5X3R1cGxlID0gaGVh cF9mb3JtX3R1cGxlKGRlc2MsIHZhbHVlcywgbnVsbHMpOwogCSpjb3B5ID0gdHJ1ZTsKIAotCWJt c19mcmVlKGlkYXR0cnMpOwotCiAJLyoKIAkgKiBJZiB0aGUgdHVwbGUsIHdoaWNoIGJ5IGhlcmUg b25seSBjb250YWlucyBpbmRleGVkIGNvbHVtbnMsIHN0aWxsIGhhcwogCSAqIHRvYXN0ZWQgY29s dW1ucywgZm9yY2UgdGhlbSB0byBiZSBpbmxpbmVkLiBUaGlzIGlzIHNvbWV3aGF0IHVubGlrZWx5 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBiY2JhYzg0NGJi Ni4uMWNmOWExODc3NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIu YwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5j bHVkZSAic3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAog c3RhdGljIHZvaWQgcmVmb3JtX2FuZF9yZXdyaXRlX3R1cGxlKEhlYXBUdXBsZSB0dXBsZSwKQEAg LTMxMiwyMyArMzEzLDEzMyBAQCBoZWFwYW1fdHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9u LCBJdGVtUG9pbnRlciB0aWQsIENvbW1hbmRJZCBjaWQsCiAJcmV0dXJuIGhlYXBfZGVsZXRlKHJl bGF0aW9uLCB0aWQsIGNpZCwgY3Jvc3NjaGVjaywgd2FpdCwgdG1mZCwgY2hhbmdpbmdQYXJ0KTsK IH0KIAotCiBzdGF0aWMgVE1fUmVzdWx0CiBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJQ29t bWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCiAJCQkJ CWJvb2wgd2FpdCwgVE1fRmFpbHVyZURhdGEgKnRtZmQsCiAJCQkJCUxvY2tUdXBsZU1vZGUgKmxv Y2ttb2RlLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKKwlib29sCQlyZXBf aWRfa2V5X3JlcXVpcmVkID0gZmFsc2U7CiAJYm9vbAkJc2hvdWxkRnJlZSA9IHRydWU7CiAJSGVh cFR1cGxlCXR1cGxlID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzbG90LCB0cnVlLCAmc2hvdWxk RnJlZSk7CisJSGVhcFR1cGxlRGF0YSBvbGR0dXA7CisJQnVmZmVyCQlidWZmZXI7CisJQnVmZmVy CQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJUGFnZQkJcGFnZTsKKwlCbG9ja051bWJlciBi bG9jazsKKwlJdGVtSWQJCWxwOworCUJpdG1hcHNldCAgKmhvdF9hdHRycywKKwkJCSAgICpzdW1f YXR0cnMsCisJCQkgICAqcGtfYXR0cnMsCisJCQkgICAqcmlkX2F0dHJzLAorCQkJICAgKm1peF9h dHRycywKKwkJCSAgICppZHhfYXR0cnM7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAorCUFzc2VydChJ dGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOworCisJLyogQ2hlYXAsIHNpbXBsaXN0aWMgY2hlY2sg dGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlwZS4gKi8KKwlBc3NlcnQoSGVh cFR1cGxlSGVhZGVyR2V0TmF0dHModHVwbGUtPnRfZGF0YSkgPD0KKwkJICAgUmVsYXRpb25HZXRO dW1iZXJPZkF0dHJpYnV0ZXMocmVsYXRpb24pKTsKKworCS8qCisJICogRm9yYmlkIHRoaXMgZHVy aW5nIGEgcGFyYWxsZWwgb3BlcmF0aW9uLCBsZXN0IGl0IGFsbG9jYXRlIGEgY29tYm8gQ0lELgor CSAqIE90aGVyIHdvcmtlcnMgbWlnaHQgbmVlZCB0aGF0IGNvbWJvIENJRCBmb3IgdmlzaWJpbGl0 eSBjaGVja3MsIGFuZCB3ZQorCSAqIGhhdmUgbm8gcHJvdmlzaW9uIGZvciBicm9hZGNhc3Rpbmcg aXQgdG8gdGhlbS4KKwkgKi8KKwlpZiAoSXNJblBhcmFsbGVsTW9kZSgpKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UUkFOU0FDVElPTl9TVEFURSksCisJ CQkJIGVycm1zZygiY2Fubm90IHVwZGF0ZSB0dXBsZXMgZHVyaW5nIGEgcGFyYWxsZWwgb3BlcmF0 aW9uIikpKTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwljaGVja19sb2NrX2lmX2lu cGxhY2VfdXBkYXRlYWJsZV9yZWwocmVsYXRpb24sIG90aWQsIHR1cGxlKTsKKyNlbmRpZgorCisJ LyoKKwkgKiBGZXRjaCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGNoZWNrZWQgZm9yIHZh cmlvdXMgb3BlcmF0aW9ucy4KKwkgKgorCSAqIEZvciBIT1QgY29uc2lkZXJhdGlvbnMsIHRoaXMg aXMgd2FzdGVkIGVmZm9ydCBpZiB3ZSBmYWlsIHRvIHVwZGF0ZSBvcgorCSAqIGhhdmUgdG8gcHV0 IHRoZSBuZXcgdHVwbGUgb24gYSBkaWZmZXJlbnQgcGFnZS4gIEJ1dCB3ZSBtdXN0IGNvbXB1dGUg dGhlCisJICogbGlzdCBiZWZvcmUgb2J0YWluaW5nIGJ1ZmZlciBsb2NrIC0tLSBpbiB0aGUgd29y c3QgY2FzZSwgaWYgd2UgYXJlCisJICogZG9pbmcgYW4gdXBkYXRlIG9uIG9uZSBvZiB0aGUgcmVs ZXZhbnQgc3lzdGVtIGNhdGFsb2dzLCB3ZSBjb3VsZAorCSAqIGRlYWRsb2NrIGlmIHdlIHRyeSB0 byBmZXRjaCB0aGUgbGlzdCBsYXRlci4gIEluIGFueSBjYXNlLCB0aGUgcmVsY2FjaGUKKwkgKiBj YWNoZXMgdGhlIGRhdGEgc28gdGhpcyBpcyB1c3VhbGx5IHByZXR0eSBjaGVhcC4KKwkgKgorCSAq IFdlIGFsc28gbmVlZCBjb2x1bW5zIHVzZWQgYnkgdGhlIHJlcGxpY2EgaWRlbnRpdHkgYW5kIGNv bHVtbnMgdGhhdCBhcmUKKwkgKiBjb25zaWRlcmVkIHRoZSAia2V5IiBvZiByb3dzIGluIHRoZSB0 YWJsZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSBnZXQgY29waWVzIG9mIGVhY2ggYml0bWFwLCBz byB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dAorCSAqIHJlbGNhY2hlIGZsdXNoIGhhcHBlbmluZyBt aWR3YXkgdGhyb3VnaC4KKwkgKi8KKwlob3RfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJp dG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJ TkcpOworCXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAor CQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOworCXBrX2F0dHJzID0g UmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0tF WSk7CisJcmlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJ CQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsKKworCWlkeF9hdHRy cyA9IGJtc19jb3B5KGhvdF9hdHRycyk7CisJaWR4X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGlk eF9hdHRycywgc3VtX2F0dHJzKTsKKwlpZHhfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMoaWR4X2F0 dHJzLCBwa19hdHRycyk7CisJaWR4X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGlkeF9hdHRycywg cmlkX2F0dHJzKTsKKworCWJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcihvdGlkKTsK KwlJTkpFQ1RJT05fUE9JTlQoImhlYXBfdXBkYXRlLWJlZm9yZS1waW4iLCBOVUxMKTsKKwlidWZm ZXIgPSBSZWFkQnVmZmVyKHJlbGF0aW9uLCBibG9jayk7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo YnVmZmVyKTsKKworCS8qCisJICogQmVmb3JlIGxvY2tpbmcgdGhlIGJ1ZmZlciwgcGluIHRoZSB2 aXNpYmlsaXR5IG1hcCBwYWdlIGlmIGl0IGFwcGVhcnMgdG8KKwkgKiBiZSBuZWNlc3NhcnkuICBT aW5jZSB3ZSBoYXZlbid0IGdvdCB0aGUgbG9jayB5ZXQsIHNvbWVvbmUgZWxzZSBtaWdodCBiZQor CSAqIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgdGhpcywgc28gd2UnbGwgbmVlZCB0byByZWNo ZWNrIGFmdGVyIHdlIGhhdmUKKwkgKiB0aGUgbG9jay4KKwkgKi8KKwlpZiAoUGFnZUlzQWxsVmlz aWJsZShwYWdlKSkKKwkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZm ZXIpOworCisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisKKwls cCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIob3RpZCkp OworCisJQXNzZXJ0KEl0ZW1JZElzTm9ybWFsKGxwKSk7CisKKwkvKgorCSAqIFBhcnRpYWxseSBj b25zdHJ1Y3QgdGhlIG9sZHR1cCBmb3IgSGVhcERldGVybWluZUNvbHVtbnNJbmZvIHRvIHdvcmsg YW5kCisJICogdGhlbiBwYXNzIHRoYXQgb24gdG8gaGVhcF91cGRhdGUuCisJICovCisJb2xkdHVw LnRfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlvbGR0dXAudF9kYXRh ID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOworCW9sZHR1cC50X2xl biA9IEl0ZW1JZEdldExlbmd0aChscCk7CisJb2xkdHVwLnRfc2VsZiA9ICpvdGlkOworCisJbWl4 X2F0dHJzID0gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9uLCBpZHhfYXR0cnMsIHJp ZF9hdHRycywKKwkJCQkJCQkJCQkgJm9sZHR1cCwgdHVwbGUsICZyZXBfaWRfa2V5X3JlcXVpcmVk KTsKKworCS8qCisJICogV2UnbGwgbmVlZCB0byBXQUwgbG9nIHRoZSByZXBsaWNhIGlkZW50aXR5 IGF0dHJpYnV0ZXMgaWYgZWl0aGVyIHRoZXkKKwkgKiBvdmVybGFwIHdpdGggdGhlIG1vZGlmaWVk IGluZGV4ZWQgYXR0cmlidXRlcyBvciwgYXMgd2UndmUgY2hlY2tlZCBmb3IKKwkgKiBqdXN0IG5v dyBpbiBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8sIHRoZXkgd2VyZSB1bm1vZGlmaWVkIGV4dGVy bmFsCisJICogaW5kZXhlZCBhdHRyaWJ1dGVzLgorCSAqLworCXJlcF9pZF9rZXlfcmVxdWlyZWQg PSByZXBfaWRfa2V5X3JlcXVpcmVkIHx8IGJtc19vdmVybGFwKG1peF9hdHRycywgcmlkX2F0dHJz KTsKKwogCS8qIFVwZGF0ZSB0aGUgdHVwbGUgd2l0aCB0YWJsZSBvaWQgKi8KIAlzbG90LT50dHNf dGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKIAl0dXBsZS0+dF90YWJsZU9p ZCA9IHNsb3QtPnR0c190YWJsZU9pZDsKIAotCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9u LCBvdGlkLCB0dXBsZSwgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LAotCQkJCQkJIHRtZmQsIGxvY2tt b2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sICZv bGR0dXAsIHR1cGxlLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsIHRtZmQsIGxvY2ttb2RlLAorCQkJ CQkJIGJ1ZmZlciwgcGFnZSwgYmxvY2ssIGxwLCBob3RfYXR0cnMsIHN1bV9hdHRycywgcGtfYXR0 cnMsCisJCQkJCQkgcmlkX2F0dHJzLCBtaXhfYXR0cnMsICZ2bWJ1ZmZlciwgcmVwX2lkX2tleV9y ZXF1aXJlZCwgdXBkYXRlX2luZGV4ZXMpOworCisJYm1zX2ZyZWUoaG90X2F0dHJzKTsKKwlibXNf ZnJlZShzdW1fYXR0cnMpOworCWJtc19mcmVlKHBrX2F0dHJzKTsKKwlibXNfZnJlZShyaWRfYXR0 cnMpOworCWJtc19mcmVlKG1peF9hdHRycyk7CisJYm1zX2ZyZWUoaWR4X2F0dHJzKTsKKwogCUl0 ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOwogCiAJLyoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaAppbmRleCA5MDlkYjczYjdiYi4uNDFkNTQxYWE2YjIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFt LmgKQEAgLTMyMSwxMSArMzIxLDEzIEBAIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVs YXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJCSBUTV9G YWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQpOwogZXh0ZXJuIHZvaWQgaGVhcF9m aW5pc2hfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0 YSAqdGlkKTsKIGV4dGVybiB2b2lkIGhlYXBfYWJvcnRfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVs YXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKTsKLWV4dGVybiBUTV9SZXN1bHQgaGVh cF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwK LQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNo b3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwg TG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0 ZV9pbmRleGVzKTsKK2V4dGVybiBUTV9SZXN1bHQgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRp b24sIEhlYXBUdXBsZURhdGEgKm9sZHR1cCwKKwkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwgQ29t bWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAorCQkJCQkJCSBUTV9G YWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsIEJ1ZmZlciBidWZmZXIs CisJCQkJCQkJIFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwgQml0bWFw c2V0ICpob3RfYXR0cnMsCisJCQkJCQkJIEJpdG1hcHNldCAqc3VtX2F0dHJzLCBCaXRtYXBzZXQg KnBrX2F0dHJzLCBCaXRtYXBzZXQgKnJpZF9hdHRycywKKwkJCQkJCQkgQml0bWFwc2V0ICptaXhf YXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCisJCQkJCQkJIGJvb2wgcmVwX2lkX2tleV9yZXF1aXJl ZCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogZXh0ZXJuIFRNX1Jlc3VsdCBo ZWFwX2xvY2tfdHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJ CQkJIENvbW1hbmRJZCBjaWQsIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2Fp dF9wb2xpY3ksCiAJCQkJCQkJCSBib29sIGZvbGxvd191cGRhdGVzLApAQCAtMzkxLDYgKzM5Mywx OCBAQCBleHRlcm4gdm9pZCBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplKFJlbGF0aW9uIHJlbGF0 aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkJICBPZmZzZXROdW1iZXIgKmRlYWQsIGludCBu ZGVhZCwKIAkJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyICp1bnVzZWQsIGludCBudW51c2VkKTsKIAor LyogaW4gaGVhcC9oZWFwYW0uYyAqLworZXh0ZXJuIEJpdG1hcHNldCAqSGVhcERldGVybWluZUNv bHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqaW50 ZXJlc3RpbmdfY29scywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCisJ CQkJCQkJCQkJICAgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKKwkJCQkJCQkJ CQkgICBib29sICpoYXNfZXh0ZXJuYWwpOworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKK2V4 dGVybiB2b2lkIGNoZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChSZWxhdGlvbiBy ZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCisJCQkJ CQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCk7CisjZW5kaWYKKwogLyogaW4gaGVhcC92YWN1dW1s YXp5LmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsCiAJCQkJ CQkJY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0 ZWd5KTsKLS0gCjIuNDkuMAoK --691e0abf_10e796de_db0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v22-0002-Track-changed-indexed-columns-in-the-executor-du.patch" RnJvbSBlZGMxNzBhM2Y2MWRlMjE0MWIzODMxMzRhZTQwZjEwNWVlOTBhZWJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy NiBPY3QgMjAyNSAxMDo0OToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIyIDIvNF0gVHJhY2sg Y2hhbmdlZCBpbmRleGVkIGNvbHVtbnMgaW4gdGhlIGV4ZWN1dG9yIGR1cmluZwogVVBEQVRFcwoK UmVmYWN0b3IgZXhlY3V0b3IgdXBkYXRlIGxvZ2ljIHRvIGRldGVybWluZSB3aGljaCBpbmRleGVk IGNvbHVtbnMgaGF2ZQphY3R1YWxseSBjaGFuZ2VkIGR1cmluZyBhbiBVUERBVEUgb3BlcmF0aW9u IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhpcyB1cAp0byBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8g aW4gaGVhcF91cGRhdGUuIFRoaXMgZW5hYmxlcyB0aGUgY29tcGFyaXNvbgp0byBoYXBwZW4gd2l0 aG91dCB0YWtpbmcgYSBsb2NrIG9uIHRoZSBwYWdlIGFuZCBvcGVucyB0aGUgZG9vciB0byByZXVz ZQppbiBvdGhlciBjb2RlIHBhdGhzLgoKQmVjYXVzZSBoZWFwX3VwZGF0ZSBub3cgcmVxdWlyZXMg dGhlIGNhbGxlciB0byBwcm92aWRlIHRoZSBtb2RpZmllZAppbmRleGVkIGNvbHVtbnMgc2ltcGxl X2hlYXBfdXBkYXRlIGhhcyBiZWNvbWUgYSB0YWQgbW9yZSBjb21wbGV4LiAgSXQgaXMKZnJlcXVl bnRseSBjYWxsZWQgZnJvbSBDYXRhbG9nVHVwbGVVcGRhdGUgd2hpY2ggZWl0aGVyIHVwZGF0ZXMg aGVhcAp0dXBsZXMgdmlhIHRoZWlyIGZvcm0gb3IgdXNpbmcgaGVhcF9tb2RpZnlfdHVwbGUuICBJ biBib3RoIGNhc2VzIHRoZQpjYWxsZXIgZG9lcyBrbm93IHRoZSBtb2RpZmllZCBzZXQgb2YgYXR0 cmlidXRlcywgYnV0IHNhZGx5IHRob3NlCmF0dHJpYnV0ZXMgYXJlIGxvc3QgYmVmb3JlIGJlaW5n IHByb3ZpZGVkIHRvIHNpbXBsZV9oZWFwX3VwZGF0ZS4gIER1ZSB0bwp0aGF0IHRoZSAic2ltcGxl IiBwYXRoIGhhcyB0byByZXRhaW4gdGhlIEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyBsb2dpYwpv ZiBvbGQgKGZvciBub3cpLiAgSW4gb3JkZXIgZm9yIHRoYXQgdG8gd29yayBpdCB3YXMgbmVjZXNz YXJ5IHRvIHNwbGl0CnRoZSAob3Zlcmx5IGxhcmdlKSBoZWFwX3VwZGF0ZSBjYWxsIGl0c2VsZiB1 cC4gIFRoaXMgbW92ZXMgdXAgaW50bwpzaW1wbGVfaGVhcF91cGRhdGUgYW5kIGhlYXBfdHVwbGVf dXBkYXRlIGEgYml0IG9mIHdoYXQgZXhpc3RlZCBpbgpoZWFwX3VwZGF0ZSBpdHNlbGYuICBJZGVh bGx5IHRoaXMgd2lsbCBiZSBjbGVhbmVkIHVwIG9uY2UKQ2F0YWxvZ1R1cGxlVXBkYXRlIHBhdGhz IGFyZSBhbGwgcmVjb3JkaW5nIG1vZGlmaWVkIGF0dHJpYnV0ZXMKY29ycmVjdGx5LCB3aGVuIHRo YXQgaGFwcGVucyB0aGUgInNpbXBsZSIgcGF0aCBjYW4gYmUgc2ltcGxpZmllZCBhZ2Fpbi4KCkV4 ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMgcmVwbGFjZXMgSGVhcERldGVybWluZXNDb2x1 bW5zSW5mbyBhbmQKdHRzX2F0dHJfZXF1YWwgcmVwbGFjZXMgaGVhcF9hdHRyX2VxdWFsIGNoYW5n aW5nIHRoZSB0ZXN0IGZvciBlcXVhbGl0eQp3aGVuIGNhbGxpbmcgaW50byBoZWFwX3R1cGxlX3Vw ZGF0ZSAoYnV0IG5vdCBzaW1wbGVfaGVhcF91cGRhdGUpLiAgSW4KdGhlIHBhc3Qgd2UgdXNlZCBk YXR1bUlzRXF1YWwoKSwgZXNzZW50aWFsbHkgYSBiaW5hcnkgY29tcGFyaXNvbiB1c2luZwptZW1j bXAoKSwgbm93IHRoZSBjb21wYXJpc29uIGNvZGUgaW4gdHRzX2F0dHJfZXF1YWwgdXNlcyB0eXBl LXNwZWNpZmljCmVxdWFsaXR5IGZ1bmN0aW9uIHdoZW4gYXZhaWxhYmxlIGFuZCBmYWxscyBiYWNr IHRvIGRhdHVtSXNFcXVhbCgpIHdoZW4Kbm90LiAgVGhpcyBjaGFuZ2UgaW4gZXF1YWxpdHkgdGVz dGluZyBoYXMgc29tZSBpbnRlbmRlZCBpbXBsaWNhdGlvbnMgYW5kCm9wZW5zIHRoZSBkb29yIGZv ciBtb3JlIEhPVCB1cGRhdGVzIChmb3Jlc2hhZG93aW5nKS4gIEZvciBpbnN0YW5jZSwKaW5kZXhl cyB3aXRoIGNvbGxhdGlvbiBpbmZvcm1hdGlvbiBhbGxvd2luZyBtb3JlIEhPVCB1cGRhdGVzIHdo ZW4gdGhlCmluZGV4IGlzIHNwZWNpZmllZCB0byBiZSBjYXNlIGluc2Vuc2l0aXZlLgoKVGhpcyBj aGFuZ2UgZm9yY2VkIHNvbWUgbG9naWMgY2hhbmdlcyBpbiBleGVjUmVwbGljYXRpb24gb24gdGhl IHVwZGF0ZQpwYXRocyBpcyBub3cgaXQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBrbm93bGVkZ2Ugb2Yg dGhlIHNldCBvZiBhdHRyaWJ1dGVzCnRoYXQgYXJlIGJvdGggY2hhbmdlZCBhbmQgcmVmZXJlbmNl ZCBieSBpbmRleGVzLiAgTHVja2lsbHksIHRoZSB0aGlzIGlzCmF2YWlsYWJsZSB3aXRoaW4gY2Fs bHMgdG8gc2xvdF9tb2RpZnlfZGF0YSgpIHdoZXJlIExvZ2ljYWxSZXBUdXBsZURhdGEKaXMgcHJv Y2Vzc2VkIGFuZCBoYXMgYSBzZXQgb2YgdXBkYXRlZCBhdHRyaWJ1dGVzLiAgSW4gdGhpcyBjYXNl IHJhdGhlcgp0aGFuIHVzaW5nIEV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMgd2UgY2Fu IHByZXNldmUgd2hhdApzbG90X21vZGlmeV9kYXRhKCkgaWRlbnRpZmllcyBhcyB0aGUgbW9kaWZp ZWQgc2V0IGFuZCB0aGVuIGludGVyc2VjdAp0aGF0IHdpdGggdGhlIHNldCBvZiBpbmRleGVzIG9u IHRoZSByZWxhdGlvbiBhbmQgZ2V0IHRoZSBjb3JyZWN0IHNldCBvZgptb2RpZmllZCBpbmRleGVk IGF0dHJpYnV0ZXMgcmVxdWlyZWQgb24gaGVhcF91cGRhdGUoKS4KLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgIHwgIDEyICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jIHwgIDcyICsrKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtLmMgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNN YWluLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0 aW9uLmMgICB8ICAgNyArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAg IHwgMjQ3ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBz ZXQuYyAgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv d29ya2VyLmMgfCAgNzIgKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUu YyAgICAgICB8ICAxNSArKwogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAg ICB8ICAgOCArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgICB8ICAg NSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvdXRpbHMvcmVsY2FjaGUuaCAgICAgICAgICAgICB8ICAgMSArCiAxNCBmaWxlcyBjaGFuZ2Vk LCA0MTUgaW5zZXJ0aW9ucygrKSwgMzYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYwppbmRleCBhZmY0NzQ4MTM0NS4uMWNkYjcyYjNhN2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCkBAIC0zMjYzLDEyICszMjYzLDEyIEBAIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlv biByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpCiAgKiBnZW5lcmF0ZWQgYnkg YW5vdGhlciB0cmFuc2FjdGlvbikuCiAgKi8KIFRNX1Jlc3VsdAotaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIEhlYXBUdXBsZURhdGEgKm9sZHR1cCwKLQkJCUhlYXBUdXBsZSBuZXd0dXAs IENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKLQkJCVRNX0Zh aWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwgQnVmZmVyIGJ1ZmZlciwK LQkJCVBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwgQml0bWFwc2V0ICpo b3RfYXR0cnMsCi0JCQlCaXRtYXBzZXQgKnN1bV9hdHRycywgQml0bWFwc2V0ICpwa19hdHRycywg Qml0bWFwc2V0ICpyaWRfYXR0cnMsCi0JCQlCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVyICp2 bWJ1ZmZlciwKK2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGVEYXRhICpv bGR0dXAsIEhlYXBUdXBsZSBuZXd0dXAsCisJCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9z c2NoZWNrLCBib29sIHdhaXQsCisJCQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9k ZSAqbG9ja21vZGUsCisJCQlCdWZmZXIgYnVmZmVyLCBQYWdlIHBhZ2UsIEJsb2NrTnVtYmVyIGJs b2NrLCBJdGVtSWQgbHAsCisJCQlCaXRtYXBzZXQgKmhvdF9hdHRycywgQml0bWFwc2V0ICpzdW1f YXR0cnMsIEJpdG1hcHNldCAqcGtfYXR0cnMsCisJCQlCaXRtYXBzZXQgKnJpZF9hdHRycywgQml0 bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCiAJCQlib29sIHJlcF9pZF9rZXlf cmVxdWlyZWQsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCVRNX1Jlc3Vs dAlyZXN1bHQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAx Y2Y5YTE4Nzc1ZC4uZWYwOGUxZDNlMTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYwpAQCAtMzE1LDkgKzMxNSwxMiBAQCBoZWFwYW1fdHVwbGVfZGVsZXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsIENvbW1hbmRJZCBjaWQsCiAKIHN0YXRpYyBU TV9SZXN1bHQKIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2lu dGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQlDb21tYW5kSWQgY2lkLCBTbmFw c2hvdCBzbmFwc2hvdCwgU25hcHNob3QgY3Jvc3NjaGVjaywKLQkJCQkJYm9vbCB3YWl0LCBUTV9G YWlsdXJlRGF0YSAqdG1mZCwKLQkJCQkJTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsIFRVX1VwZGF0 ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQorCQkJCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBz bmFwc2hvdCwKKwkJCQkJU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAorCQkJCQlUTV9G YWlsdXJlRGF0YSAqdG1mZCwKKwkJCQkJTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCisJCQkJCUJp dG1hcHNldCAqbWl4X2F0dHJzLAorCQkJCQlUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhl cykKIHsKIAlib29sCQlyZXBfaWRfa2V5X3JlcXVpcmVkID0gZmFsc2U7CiAJYm9vbAkJc2hvdWxk RnJlZSA9IHRydWU7CkBAIC0zMzIsNyArMzM1LDYgQEAgaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxh dGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJ CQkgICAqc3VtX2F0dHJzLAogCQkJICAgKnBrX2F0dHJzLAogCQkJICAgKnJpZF9hdHRycywKLQkJ CSAgICptaXhfYXR0cnMsCiAJCQkgICAqaWR4X2F0dHJzOwogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAK QEAgLTQxNCwxNiArNDE2LDYxIEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRp b24sIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCW9sZHR1cC50X2xl biA9IEl0ZW1JZEdldExlbmd0aChscCk7CiAJb2xkdHVwLnRfc2VsZiA9ICpvdGlkOwogCi0JbWl4 X2F0dHJzID0gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9uLCBpZHhfYXR0cnMsIHJp ZF9hdHRycywKLQkJCQkJCQkJCQkgJm9sZHR1cCwgdHVwbGUsICZyZXBfaWRfa2V5X3JlcXVpcmVk KTsKLQogCS8qCi0JICogV2UnbGwgbmVlZCB0byBXQUwgbG9nIHRoZSByZXBsaWNhIGlkZW50aXR5 IGF0dHJpYnV0ZXMgaWYgZWl0aGVyIHRoZXkKLQkgKiBvdmVybGFwIHdpdGggdGhlIG1vZGlmaWVk IGluZGV4ZWQgYXR0cmlidXRlcyBvciwgYXMgd2UndmUgY2hlY2tlZCBmb3IKLQkgKiBqdXN0IG5v dyBpbiBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8sIHRoZXkgd2VyZSB1bm1vZGlmaWVkIGV4dGVy bmFsCi0JICogaW5kZXhlZCBhdHRyaWJ1dGVzLgorCSAqIFdlJ2xsIG5lZWQgdG8gaW5jbHVkZSB0 aGUgcmVwbGljYSBpZGVudGl0eSBrZXkgd2hlbiBlaXRoZXIgdGhlIGlkZW50aXR5CisJICoga2V5 IGF0dHJpYnV0ZXMgb3ZlcmxhcCB3aXRoIHRoZSBtb2RpZmllZCBpbmRleCBhdHRyaWJ1dGVzIG9y IHdoZW4gdGhlCisJICogcmVwbGljYSBpZGVudGl0eSBhdHRyaWJ1dGVzIGFyZSBzdG9yZWQgZXh0 ZXJuYWxseS4gIFRoaXMgaXMgcmVxdWlyZWQKKwkgKiBiZWNhdXNlIGZvciBzdWNoIGF0dHJpYnV0 ZXMgdGhlIGZsYXR0ZW5lZCB2YWx1ZSB3b24ndCBiZSBXQUwgbG9nZ2VkIGFzCisJICogcGFydCBv ZiB0aGUgbmV3IHR1cGxlIHNvIHdlIG11c3QgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZXh0cmFj dCBhbmQKKwkgKiBpbmNsdWRlIHRoZW0gYXMgcGFydCBvZiB0aGUgb2xkX2tleV90dXBsZSAoc2Vl IEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkpLgogCSAqLwotCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBy ZXBfaWRfa2V5X3JlcXVpcmVkIHx8IGJtc19vdmVybGFwKG1peF9hdHRycywgcmlkX2F0dHJzKTsK KwlyZXBfaWRfa2V5X3JlcXVpcmVkID0gYm1zX292ZXJsYXAobWl4X2F0dHJzLCByaWRfYXR0cnMp OworCWlmICghcmVwX2lkX2tleV9yZXF1aXJlZCkKKwl7CisJCUJpdG1hcHNldCAgKmF0dHJzOwor CQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pOworCQlpbnQJ CQlhdHRpZHggPSAtMTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBvd24gaWR4X2F0dHJzIHNvIHdl J2xsIGNvcHkgaXQgYW5kIHJlbW92ZSB0aGUgbW9kaWZpZWQgc2V0CisJCSAqIHRvIHJlZHVjZSB0 aGUgYXR0cmlidXRlcyB3ZSBuZWVkIHRvIHRlc3QgaW4gdGhlIHdoaWxlIGxvb3AgYW5kCisJCSAq IGF2b2lkIGEgdHdvIGJyYW5jaGVzIGluIHRoZSBsb29wLgorCQkgKi8KKwkJYXR0cnMgPSBibXNf ZGlmZmVyZW5jZShpZHhfYXR0cnMsIG1peF9hdHRycyk7CisJCWF0dHJzID0gYm1zX2ludF9tZW1i ZXJzKGF0dHJzLCByaWRfYXR0cnMpOworCisJCXdoaWxlICgoYXR0aWR4ID0gYm1zX25leHRfbWVt YmVyKGF0dHJzLCBhdHRpZHgpKSA+PSAwKQorCQl7CisJCQkvKgorCQkJICogYXR0aWR4IGlzIHpl cm8tYmFzZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRyaWJ1dGUgbnVtYmVyCisJCQkgKi8K KwkJCUF0dHJOdW1iZXIJYXR0cm51bSA9IGF0dGlkeCArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRy aWJ1dGVOdW1iZXI7CisJCQlEYXR1bQkJdmFsdWU7CisJCQlib29sCQlpc251bGw7CisKKwkJCS8q CisJCQkgKiBTeXN0ZW0gYXR0cmlidXRlcyBhcmUgbm90IGFkZGVkIGludG8gaW50ZXJlc3Rpbmdf YXR0cnMgaW4KKwkJCSAqIHJlbGNhY2hlCisJCQkgKi8KKwkJCUFzc2VydChhdHRybnVtID4gMCk7 CisKKwkJCXZhbHVlID0gaGVhcF9nZXRhdHRyKCZvbGR0dXAsIGF0dHJudW0sIHR1cGRlc2MsICZp c251bGwpOworCisJCQkvKiBObyBuZWVkIHRvIGNoZWNrIGF0dHJpYnV0ZXMgdGhhdCBjYW4ndCBi ZSBzdG9yZWQgZXh0ZXJuYWxseSAqLworCQkJaWYgKGlzbnVsbCB8fAorCQkJCVR1cGxlRGVzY0Nv bXBhY3RBdHRyKHR1cGRlc2MsIGF0dHJudW0gLSAxKS0+YXR0bGVuICE9IC0xKQorCQkJCWNvbnRp bnVlOworCisJCQkvKiBDaGVjayBpZiB0aGUgb2xkIHR1cGxlJ3MgYXR0cmlidXRlIGlzIHN0b3Jl ZCBleHRlcm5hbGx5ICovCisJCQlpZiAoVkFSQVRUX0lTX0VYVEVSTkFMKChzdHJ1Y3QgdmFybGVu YSAqKSBEYXR1bUdldFBvaW50ZXIodmFsdWUpKSkKKwkJCXsKKwkJCQlyZXBfaWRfa2V5X3JlcXVp cmVkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWJtc19mcmVlKGF0dHJzKTsK Kwl9CiAKIAkvKiBVcGRhdGUgdGhlIHR1cGxlIHdpdGggdGFibGUgb2lkICovCiAJc2xvdC0+dHRz X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CkBAIC00MzcsNyArNDg0LDYg QEAgaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3Rp ZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJYm1zX2ZyZWUoc3VtX2F0dHJzKTsKIAlibXNfZnJl ZShwa19hdHRycyk7CiAJYm1zX2ZyZWUocmlkX2F0dHJzKTsKLQlibXNfZnJlZShtaXhfYXR0cnMp OwogCWJtc19mcmVlKGlkeF9hdHRycyk7CiAKIAlJdGVtUG9pbnRlckNvcHkoJnR1cGxlLT50X3Nl bGYsICZzbG90LT50dHNfdGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJs ZS90YWJsZWFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmluZGV4IDVl NDE0MDQ5MzdlLi5kYWRjZjAzZWQyNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Rh YmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBA IC0zMzYsNiArMzM2LDcgQEAgdm9pZAogc2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlv biByZWwsIEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAog CQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCSAgQml0bWFwc2V0ICptb2RpZmllZF9p bmRleGVkX2NvbHMsCiAJCQkJCQkgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQog ewogCVRNX1Jlc3VsdAlyZXN1bHQ7CkBAIC0zNDYsNyArMzQ3LDkgQEAgc2ltcGxlX3RhYmxlX3R1 cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkJCUdldEN1 cnJlbnRDb21tYW5kSWQodHJ1ZSksCiAJCQkJCQkJCXNuYXBzaG90LCBJbnZhbGlkU25hcHNob3Qs CiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKLQkJCQkJCQkJJnRtZmQsICZs b2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJCQkmdG1mZCwgJmxvY2ttb2RlLAorCQkJ CQkJCQltb2RpZmllZF9pbmRleGVkX2NvbHMsCisJCQkJCQkJCXVwZGF0ZV9pbmRleGVzKTsKIAog CXN3aXRjaCAocmVzdWx0KQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IDI3YzllZWM2 OTdiLi42YjdiNmJjODAxOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0xMjgyLDYgKzEy ODIsNyBAQCBJbml0UmVzdWx0UmVsSW5mbyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAog CS8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBzZXQgbGF0ZXIgaWYgbmVlZGVkICovCiAJcmVz dWx0UmVsSW5mby0+cmlfUm93SWRBdHRObyA9IDA7CiAJcmVzdWx0UmVsSW5mby0+cmlfZXh0cmFV cGRhdGVkQ29scyA9IE5VTEw7CisJcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xz ID0gTlVMTDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9wcm9qZWN0TmV3ID0gTlVMTDsKIAlyZXN1bHRS ZWxJbmZvLT5yaV9uZXdUdXBsZVNsb3QgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX29sZFR1 cGxlU2xvdCA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4 IGRlZjMyNzc0YzkwLi4yNzA5ZTJkYjBmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2lu Y2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2lu Y2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKQEAg LTkzNiw3ICs5MzcsMTMgQEAgRXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRlKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAJCWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCiAJCQlF eGVjUGFydGl0aW9uQ2hlY2socmVzdWx0UmVsSW5mbywgc2xvdCwgZXN0YXRlLCB0cnVlKTsKIAor CQkvKgorCQkgKiBXZSdyZSBub3QgZ29pbmcgdG8gY2FsbCBFeGVjQ2hlY2tJbmRleGVkQXR0cnNG b3JDaGFuZ2VzIGhlcmUKKwkJICogYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhl IGNoYW5nZXMgZWFybGllciBvbiB0aGFua3MgdG8KKwkJICogc2xvdF9tb2RpZnlfZGF0YS4KKwkJ ICovCiAJCXNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUocmVsLCB0aWQsIHNsb3QsIGVzdGF0ZS0+ ZXNfc25hcHNob3QsCisJCQkJCQkJCSAgcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRD b2xzLAogCQkJCQkJCQkgICZ1cGRhdGVfaW5kZXhlcyk7CiAKIAkJY29uZmxpY3RpbmRleGVzID0g cmVzdWx0UmVsSW5mby0+cmlfb25Db25mbGljdEFyYml0ZXJJbmRleGVzOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCAwMDQyOTMyNmMzNC4uMzRmODY1NDZmYzkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAg KgkJRXhlY01vZGlmeVRhYmxlCQktIHJldHJpZXZlIHRoZSBuZXh0IHR1cGxlIGZyb20gdGhlIG5v ZGUKICAqCQlFeGVjRW5kTW9kaWZ5VGFibGUJLSBzaHV0IGRvd24gdGhlIE1vZGlmeVRhYmxlIG5v ZGUKICAqCQlFeGVjUmVTY2FuTW9kaWZ5VGFibGUgLSByZXNjYW4gdGhlIE1vZGlmeVRhYmxlIG5v ZGUKKyAqCQlFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzIC0gZmluZCBzZXQgb2YgdXBk YXRlZCBpbmRleGVkIGNvbHVtbnMKICAqCiAgKgkgTk9URVMKICAqCQlUaGUgTW9kaWZ5VGFibGUg bm9kZSByZWNlaXZlcyBpbnB1dCBmcm9tIGl0cyBvdXRlclBsYW4sIHdoaWNoIGlzCkBAIC01NCwx MSArNTUsMTQgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRl ICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy90dXBjb252ZXJ0LmgiCisjaW5j bHVkZSAiYWNjZXNzL3R1cGRlc2MuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9u LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9u b2RlTW9kaWZ5VGFibGUuaCIKKyNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgogI2luY2x1 ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi bm9kZXMvbm9kZUZ1bmNzLmgiCkBAIC02OCw2ICs3Miw4IEBACiAjaW5jbHVkZSAic3RvcmFnZS9s bWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1 bS5oIgorI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgog CkBAIC0xNzYsNiArMTgyLDIxOSBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZU5v dE1hdGNoZWQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJCSAgIGJvb2wg Y2FuU2V0VGFnKTsKIAogCisvKgorICogQ29tcGFyZSB0d28gZGF0dW1zIHVzaW5nIHRoZSB0eXBl J3MgZGVmYXVsdCBlcXVhbGl0eSBvcGVyYXRvci4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhl IHZhbHVlcyBhcmUgZXF1YWwgYWNjb3JkaW5nIHRvIHRoZSB0eXBlJ3MgZXF1YWxpdHkKKyAqIG9w ZXJhdG9yLCBmYWxzZSBvdGhlcndpc2UuIEZhbGxzIGJhY2sgdG8gYmluYXJ5IGNvbXBhcmlzb24g aWYgbm8KKyAqIHR5cGUtc3BlY2lmaWMgb3BlcmF0b3IgaXMgYXZhaWxhYmxlLgorICoKKyAqIFRo aXMgZnVuY3Rpb24gdXNlcyB0aGUgVHlwZUNhY2hlIGluZnJhc3RydWN0dXJlIHdoaWNoIGNhY2hl cyBvcGVyYXRvcgorICogbG9va3VwcyBmb3IgZWZmaWNpZW5jeS4KKyAqLworYm9vbAordHRzX2F0 dHJfZXF1YWwoT2lkIHR5cGlkLCBPaWQgY29sbGF0aW9uLCBib29sIHR5cGJ5dmFsLCBpbnQxNiB0 eXBsZW4sCisJCQkgICBEYXR1bSB2YWx1ZTEsIERhdHVtIHZhbHVlMikKK3sKKwlUeXBlQ2FjaGVF bnRyeSAqdHlwZW50cnk7CisKKwlMT0NBTF9GQ0lORk8oZmNpbmZvLCAyKTsKKwlEYXR1bQkJcmVz dWx0OworCisJLyoKKwkgKiBGYXN0IHBhdGggZm9yIGNvbW1vbiB0eXBlcyB0byBhdm9pZCBldmVu IHRoZSB0eXBlIGNhY2hlIGxvb2t1cC4gVGhlc2UKKwkgKiB0eXBlcyBoYXZlIHNpbXBsZSBlcXVh bGl0eSBzZW1hbnRpY3MuCisJICovCisJc3dpdGNoICh0eXBpZCkKKwl7CisJCWNhc2UgSU5UMk9J RDoKKwkJCXJldHVybiBEYXR1bUdldEludDE2KHZhbHVlMSkgPT0gRGF0dW1HZXRJbnQxNih2YWx1 ZTIpOworCQljYXNlIElOVDRPSUQ6CisJCQlyZXR1cm4gRGF0dW1HZXRJbnQzMih2YWx1ZTEpID09 IERhdHVtR2V0SW50MzIodmFsdWUyKTsKKwkJY2FzZSBJTlQ4T0lEOgorCQkJcmV0dXJuIERhdHVt R2V0SW50NjQodmFsdWUxKSA9PSBEYXR1bUdldEludDY0KHZhbHVlMik7CisJCWNhc2UgRkxPQVQ0 T0lEOgorCQkJcmV0dXJuICFmbG9hdDRfY21wX2ludGVybmFsKERhdHVtR2V0RmxvYXQ0KHZhbHVl MSksIERhdHVtR2V0RmxvYXQ0KHZhbHVlMikpOworCQljYXNlIEZMT0FUOE9JRDoKKwkJCXJldHVy biAhZmxvYXQ4X2NtcF9pbnRlcm5hbChEYXR1bUdldEZsb2F0OCh2YWx1ZTEpLCBEYXR1bUdldEZs b2F0OCh2YWx1ZTIpKTsKKwkJY2FzZSBCT09MT0lEOgorCQkJcmV0dXJuIERhdHVtR2V0Qm9vbCh2 YWx1ZTEpID09IERhdHVtR2V0Qm9vbCh2YWx1ZTIpOworCQljYXNlIE9JRE9JRDoKKwkJY2FzZSBS RUdQUk9DT0lEOgorCQljYXNlIFJFR1BST0NFRFVSRU9JRDoKKwkJY2FzZSBSRUdPUEVST0lEOgor CQljYXNlIFJFR09QRVJBVE9ST0lEOgorCQljYXNlIFJFR0NMQVNTT0lEOgorCQljYXNlIFJFR1RZ UEVPSUQ6CisJCWNhc2UgUkVHUk9MRU9JRDoKKwkJY2FzZSBSRUdOQU1FU1BBQ0VPSUQ6CisJCWNh c2UgUkVHQ09ORklHT0lEOgorCQljYXNlIFJFR0RJQ1RJT05BUllPSUQ6CisJCQlyZXR1cm4gRGF0 dW1HZXRPYmplY3RJZCh2YWx1ZTEpID09IERhdHVtR2V0T2JqZWN0SWQodmFsdWUyKTsKKwkJY2Fz ZSBDSEFST0lEOgorCQkJcmV0dXJuIERhdHVtR2V0Q2hhcih2YWx1ZTEpID09IERhdHVtR2V0Q2hh cih2YWx1ZTIpOworCQlkZWZhdWx0OgorCQkJLyogQ29udGludWUgdG8gdHlwZSBjYWNoZSBsb29r dXAgKi8KKwkJCWJyZWFrOworCX0KKworCS8qCisJICogTG9vayB1cCB0aGUgdHlwZSdzIGVxdWFs aXR5IG9wZXJhdG9yIHVzaW5nIHRoZSB0eXBlIGNhY2hlLiBSZXF1ZXN0IGJvdGgKKwkgKiB0aGUg b3BlcmF0b3IgT0lEIGFuZCB0aGUgZnVuY3Rpb24gaW5mbyBmb3IgZWZmaWNpZW5jeS4KKwkgKi8K Kwl0eXBlbnRyeSA9IGxvb2t1cF90eXBlX2NhY2hlKHR5cGlkLAorCQkJCQkJCQkgVFlQRUNBQ0hF X0VRX09QUiB8IFRZUEVDQUNIRV9FUV9PUFJfRklORk8pOworCisJLyoKKwkgKiBJZiBubyBlcXVh bGl0eSBvcGVyYXRvciBpcyBhdmFpbGFibGUsIGZhbGwgYmFjayB0byBiaW5hcnkgY29tcGFyaXNv bi4KKwkgKiBUaGlzIGhhbmRsZXMgdHlwZXMgdGhhdCBkb24ndCBoYXZlIHByb3BlciBlcXVhbGl0 eSBvcGVyYXRvcnMgZGVmaW5lZC4KKwkgKi8KKwlpZiAoIU9pZElzVmFsaWQodHlwZW50cnktPmVx X29wcikpCisJCXJldHVybiBkYXR1bUlzRXF1YWwodmFsdWUxLCB2YWx1ZTIsIHR5cGJ5dmFsLCB0 eXBsZW4pOworCisJLyoKKwkgKiBVc2UgdGhlIGNhY2hlZCBmdW5jdGlvbiBpbmZvIGlmIGF2YWls YWJsZSwgb3RoZXJ3aXNlIGxvb2sgaXQgdXAuIFRoZQorCSAqIHR5cGUgY2FjaGUga2VlcHMgdGhp cyBhcm91bmQgc28gc3Vic2VxdWVudCBjYWxscyBhcmUgZmFzdC4KKwkgKi8KKwlpZiAodHlwZW50 cnktPmVxX29wcl9maW5mby5mbl9hZGRyID09IE5VTEwpCisJeworCQlPaWQJCQllcV9wcm9jID0g Z2V0X29wY29kZSh0eXBlbnRyeS0+ZXFfb3ByKTsKKworCQlpZiAoIU9pZElzVmFsaWQoZXFfcHJv YykpCisJCQkvKiBTaG91bGRuJ3QgaGFwcGVuLCBidXQgZmFsbCBiYWNrIHRvIGJpbmFyeSBjb21w YXJpc29uICovCisJCQlyZXR1cm4gZGF0dW1Jc0VxdWFsKHZhbHVlMSwgdmFsdWUyLCB0eXBieXZh bCwgdHlwbGVuKTsKKworCQlmbWdyX2luZm9fY3h0KGVxX3Byb2MsICZ0eXBlbnRyeS0+ZXFfb3By X2ZpbmZvLAorCQkJCQkgIENhY2hlTWVtb3J5Q29udGV4dCk7CisJfQorCisJLyogU2V0IHVwIGZ1 bmN0aW9uIGNhbGwgKi8KKwlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKmZjaW5mbywgJnR5cGVu dHJ5LT5lcV9vcHJfZmluZm8sIDIsCisJCQkJCQkJIGNvbGxhdGlvbiwgTlVMTCwgTlVMTCk7CisK KwlmY2luZm8tPmFyZ3NbMF0udmFsdWUgPSB2YWx1ZTE7CisJZmNpbmZvLT5hcmdzWzBdLmlzbnVs bCA9IGZhbHNlOworCWZjaW5mby0+YXJnc1sxXS52YWx1ZSA9IHZhbHVlMjsKKwlmY2luZm8tPmFy Z3NbMV0uaXNudWxsID0gZmFsc2U7CisKKwkvKiBJbnZva2UgdGhlIGVxdWFsaXR5IG9wZXJhdG9y ICovCisJcmVzdWx0ID0gRnVuY3Rpb25DYWxsSW52b2tlKGZjaW5mbyk7CisKKwkvKgorCSAqIElm IHRoZSBmdW5jdGlvbiByZXR1cm5lZCBOVUxMIChzaG91bGRuJ3QgaGFwcGVuIGZvciBlcXVhbGl0 eSBvcHMpLAorCSAqIHRyZWF0IGFzIG5vdCBlcXVhbCBmb3Igc2FmZXR5LgorCSAqLworCWlmIChm Y2luZm8tPmlzbnVsbCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIERhdHVtR2V0Qm9vbChy ZXN1bHQpOworfQorCisvKgorICogRGV0ZXJtaW5lIHdoaWNoIHVwZGF0ZWQgYXR0cmlidXRlcyBh Y3R1YWxseSBjaGFuZ2VkIHZhbHVlcyBiZXR3ZWVuIG9sZCBhbmQKKyAqIG5ldyB0dXBsZXMgYW5k IGFyZSByZWZlcmVuY2VkIGJ5IGluZGV4ZXMgb24gdGhlIHJlbGF0aW9uLgorICoKKyAqIFJldHVy bnMgYSBCaXRtYXBzZXQgb2YgYXR0cmlidXRlIG9mZnNldHMgKDAtYmFzZWQsIGFkanVzdGVkIGJ5 CisgKiBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKSBvciBOVUxMIGlmIG5vIGF0 dHJpYnV0ZXMgY2hhbmdlZC4KKyAqLworQml0bWFwc2V0ICoKK0V4ZWNDaGVja0luZGV4ZWRBdHRy c0ZvckNoYW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKKwkJCQkJCQkJVHVwbGVUYWJsZVNs b3QgKnR0c19vbGQsCisJCQkJCQkJCVR1cGxlVGFibGVTbG90ICp0dHNfbmV3KQoreworCVJlbGF0 aW9uCXJlbGF0aW9uID0gcmVsaW5mby0+cmlfUmVsYXRpb25EZXNjOworCVR1cGxlRGVzYwl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbik7CisJQml0bWFwc2V0ICAqaW5kZXhlZF9h dHRyczsKKwlCaXRtYXBzZXQgICptb2RpZmllZCA9IE5VTEw7CisJaW50CQkJYXR0aWR4OworCisJ LyogSWYgbm8gaW5kZXhlcywgd2UncmUgZG9uZSAqLworCWlmIChyZWxpbmZvLT5yaV9OdW1JbmRp Y2VzID09IDApCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBHZXQgdGhlIHNldCBvZiBpbmRl eCBrZXkgYXR0cmlidXRlcy4gIFRoaXMgaW5jbHVkZXMgc3VtbWFyaXppbmcsCisJICogZXhwcmVz c2lvbiBpbmRleGVzIGFuZCBhdHRyaWJ1dGVzIG1lbnRpb25lZCBpbiB0aGUgcHJlZGljYXRlIG9m IGEKKwkgKiBwYXJ0aXRpb24gYnV0IG5vdCB0aG9zZSBpbiBJTkNMVURJTkcuCisJICovCisJaW5k ZXhlZF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJ CQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEKTsKKwlBc3NlcnQoIWJtc19pc19lbXB0 eShpbmRleGVkX2F0dHJzKSk7CisKKwkvKgorCSAqIE5PVEU6IEl0IGlzIGltcG9ydGFudCB0byBz Y2FuIGFsbCBpbmRleGVkIGF0dHJpYnV0ZXMgaW4gdGhlIHR1cGxlcworCSAqIGJlY2F1c2UgRXhl Y0dldEFsbFVwZGF0ZWRDb2xzIHdvbid0IGluY2x1ZGUgY29sdW1ucyB0aGF0IG1heSBoYXZlIGJl ZW4KKwkgKiBtb2RpZmllZCB2aWEgaGVhcF9tb2RpZnlfdHVwbGVfYnlfY29sIHdoaWNoIGlzIHRo ZSBjYXNlIGluCisJICogdHN2ZWN0b3JfdXBkYXRlX3RyaWdnZXIuCisJICovCisJYXR0aWR4ID0g LTE7CisJd2hpbGUgKChhdHRpZHggPSBibXNfbmV4dF9tZW1iZXIoaW5kZXhlZF9hdHRycywgYXR0 aWR4KSkgPj0gMCkKKwl7CisJCS8qIGF0dGlkeCBpcyB6ZXJvLWJhc2VkLCBhdHRybnVtIGlzIHRo ZSBub3JtYWwgYXR0cmlidXRlIG51bWJlciAqLworCQlBdHRyTnVtYmVyCWF0dHJudW0gPSBhdHRp ZHggKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQlGb3JtX3BnX2F0dHJp YnV0ZSBhdHRyOworCQlib29sCQlvbGRudWxsLAorCQkJCQluZXdudWxsOworCQlEYXR1bQkJb2xk dmFsLAorCQkJCQluZXd2YWw7CisKKwkJLyoKKwkJICogSWYgaXQncyBhIHdob2xlLXR1cGxlIHJl ZmVyZW5jZSwgcmVjb3JkIGFzIG1vZGlmaWVkLiAgSXQncyBub3QKKwkJICogcmVhbGx5IHdvcnRo IHN1cHBvcnRpbmcgdGhpcyBjYXNlLCBzaW5jZSBpdCBjb3VsZCBvbmx5IHN1Y2NlZWQKKwkJICog YWZ0ZXIgYSBuby1vcCB1cGRhdGUsIHdoaWNoIGlzIGhhcmRseSBhIGNhc2Ugd29ydGggb3B0aW1p emluZyBmb3IuCisJCSAqLworCQlpZiAoYXR0cm51bSA9PSAwKQorCQl7CisJCQltb2RpZmllZCA9 IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCQkJY29udGludWU7CisJCX0KKwor CQkvKgorCQkgKiBMaWtld2lzZSwgaW5jbHVkZSBpbiB0aGUgbW9kaWZpZWQgc2V0IGFueSBzeXN0 ZW0gYXR0cmlidXRlIG90aGVyCisJCSAqIHRoYW4gdGFibGVPSUQ7IHdlIGNhbm5vdCBleHBlY3Qg dGhlc2UgdG8gYmUgY29uc2lzdGVudCBpbiBhIEhPVAorCQkgKiBjaGFpbiwgb3IgZXZlbiB0byBi ZSBzZXQgY29ycmVjdGx5IHlldCBpbiB0aGUgbmV3IHR1cGxlLgorCQkgKi8KKwkJaWYgKGF0dHJu dW0gPCAwKQorCQl7CisJCQlpZiAoYXR0cm51bSAhPSBUYWJsZU9pZEF0dHJpYnV0ZU51bWJlcikK KwkJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCQkJY29u dGludWU7CisJCX0KKworCQkvKiBFeHRyYWN0IHZhbHVlcyBmcm9tIGJvdGggc2xvdHMgKi8KKwkJ b2xkdmFsID0gc2xvdF9nZXRhdHRyKHR0c19vbGQsIGF0dHJudW0sICZvbGRudWxsKTsKKwkJbmV3 dmFsID0gc2xvdF9nZXRhdHRyKHR0c19uZXcsIGF0dHJudW0sICZuZXdudWxsKTsKKworCQkvKiBJ ZiBvbmUgdmFsdWUgaXMgTlVMTCBhbmQgdGhlIG90aGVyIGlzIG5vdCwgdGhleSBhcmUgbm90IGVx dWFsICovCisJCWlmIChvbGRudWxsICE9IG5ld251bGwpCisJCXsKKwkJCW1vZGlmaWVkID0gYm1z X2FkZF9tZW1iZXIobW9kaWZpZWQsIGF0dGlkeCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8q IElmIGJvdGggYXJlIE5VTEwsIGNvbnNpZGVyIHRoZW0gZXF1YWwgKi8KKwkJaWYgKG9sZG51bGwp CisJCQljb250aW51ZTsKKworCQkvKiBHZXQgYXR0cmlidXRlIG1ldGFkYXRhICovCisJCUFzc2Vy dChhdHRybnVtID4gMCAmJiBhdHRybnVtIDw9IHR1cGRlc2MtPm5hdHRzKTsKKwkJYXR0ciA9IFR1 cGxlRGVzY0F0dHIodHVwZGVzYywgYXR0cm51bSAtIDEpOworCisJCS8qIENvbXBhcmUgdXNpbmcg dHlwZS1zcGVjaWZpYyBlcXVhbGl0eSBvcGVyYXRvciAqLworCQlpZiAoIXR0c19hdHRyX2VxdWFs KGF0dHItPmF0dHR5cGlkLAorCQkJCQkJCWF0dHItPmF0dGNvbGxhdGlvbiwKKwkJCQkJCQlhdHRy LT5hdHRieXZhbCwKKwkJCQkJCQlhdHRyLT5hdHRsZW4sCisJCQkJCQkJb2xkdmFsLAorCQkJCQkJ CW5ld3ZhbCkpCisJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgp OworCX0KKworCWJtc19mcmVlKGluZGV4ZWRfYXR0cnMpOworCisJcmV0dXJuIG1vZGlmaWVkOwor fQorCiAvKgogICogVmVyaWZ5IHRoYXQgdGhlIHR1cGxlcyB0byBiZSBwcm9kdWNlZCBieSBJTlNF UlQgbWF0Y2ggdGhlCiAgKiB0YXJnZXQgcmVsYXRpb24ncyByb3d0eXBlCkBAIC0yMTY4LDggKzIz ODcsOCBAQCBFeGVjVXBkYXRlUHJlcGFyZVNsb3QoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m bywKICAqLwogc3RhdGljIFRNX1Jlc3VsdAogRXhlY1VwZGF0ZUFjdChNb2RpZnlUYWJsZUNvbnRl eHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCi0JCQkgIEl0ZW1Qb2lu dGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0J CQkgIGJvb2wgY2FuU2V0VGFnLCBVcGRhdGVDb250ZXh0ICp1cGRhdGVDeHQpCisJCQkgIEl0ZW1Q b2ludGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwgVHVwbGVUYWJsZVNsb3QgKm9sZFNs b3QsCisJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sIGNhblNldFRhZywgVXBkYXRlQ29u dGV4dCAqdXBkYXRlQ3h0KQogewogCUVTdGF0ZQkgICAqZXN0YXRlID0gY29udGV4dC0+ZXN0YXRl OwogCVJlbGF0aW9uCXJlc3VsdFJlbGF0aW9uRGVzYyA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0 aW9uRGVzYzsKQEAgLTIyOTEsNiArMjUxMCwxNiBAQCBscmVwbGFjZToKIAlpZiAocmVzdWx0UmVs YXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0cikKIAkJRXhlY0NvbnN0cmFpbnRzKHJlc3VsdFJlbElu Zm8sIHNsb3QsIGVzdGF0ZSk7CiAKKwkvKgorCSAqIElkZW50aWZ5IHdoaWNoLCBpZiBhbnksIGlu ZGV4ZWQgYXR0cmlidXRlcyB3ZXJlIG1vZGlmaWVkIGhlcmUgc28gdGhhdAorCSAqIHdlIG1pZ2h0 IHJldXNlIGl0IGluIGEgZmV3IHBsYWNlcy4KKwkgKi8KKwlibXNfZnJlZShyZXN1bHRSZWxJbmZv LT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOworCXJlc3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJbmRl eGVkQ29scyA9IE5VTEw7CisKKwlyZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMg PQorCQlFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzKHJlc3VsdFJlbEluZm8sIG9sZFNs b3QsIHNsb3QpOworCiAJLyoKIAkgKiByZXBsYWNlIHRoZSBoZWFwIHR1cGxlCiAJICoKQEAgLTIz MDYsNiArMjUzNSw3IEBAIGxyZXBsYWNlOgogCQkJCQkJCQllc3RhdGUtPmVzX2Nyb3NzY2hlY2tf c25hcHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKIAkJCQkJCQkJ JmNvbnRleHQtPnRtZmQsICZ1cGRhdGVDeHQtPmxvY2ttb2RlLAorCQkJCQkJCQlyZXN1bHRSZWxJ bmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMsCiAJCQkJCQkJCSZ1cGRhdGVDeHQtPnVwZGF0ZUlu ZGV4ZXMpOwogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTI1MjQsOCArMjc1NCw5IEBAIEV4ZWNVcGRh dGUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJ bmZvLAogCQkgKi8KIHJlZG9fYWN0OgogCQlsb2NrZWR0aWQgPSAqdHVwbGVpZDsKLQkJcmVzdWx0 ID0gRXhlY1VwZGF0ZUFjdChjb250ZXh0LCByZXN1bHRSZWxJbmZvLCB0dXBsZWlkLCBvbGR0dXBs ZSwgc2xvdCwKLQkJCQkJCQkgICBjYW5TZXRUYWcsICZ1cGRhdGVDeHQpOworCisJCXJlc3VsdCA9 IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwgb2xkdHVwbGUs IG9sZFNsb3QsCisJCQkJCQkJICAgc2xvdCwgY2FuU2V0VGFnLCAmdXBkYXRlQ3h0KTsKIAogCQkv KgogCQkgKiBJZiBFeGVjVXBkYXRlQWN0IHJlcG9ydHMgdGhhdCBhIGNyb3NzLXBhcnRpdGlvbiB1 cGRhdGUgd2FzIGRvbmUsCkBAIC0zMjIyLDggKzM0NTMsOCBAQCBsbWVyZ2VfbWF0Y2hlZDoKIAkJ CQkJQXNzZXJ0KG9sZHR1cGxlID09IE5VTEwpOwogCiAJCQkJCXJlc3VsdCA9IEV4ZWNVcGRhdGVB Y3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwKLQkJCQkJCQkJCQkgICBOVUxMLCBu ZXdzbG90LCBjYW5TZXRUYWcsCi0JCQkJCQkJCQkJICAgJnVwZGF0ZUN4dCk7CisJCQkJCQkJCQkJ ICAgTlVMTCwgcmVzdWx0UmVsSW5mby0+cmlfb2xkVHVwbGVTbG90LAorCQkJCQkJCQkJCSAgIG5l d3Nsb3QsIGNhblNldFRhZywgJnVwZGF0ZUN4dCk7CiAKIAkJCQkJLyoKIAkJCQkJICogQXMgaW4g RXhlY1VwZGF0ZSgpLCBpZiBFeGVjVXBkYXRlQWN0KCkgcmVwb3J0cyB0aGF0IGEKQEAgLTMyNDgs NiArMzQ3OSw3IEBAIGxtZXJnZV9tYXRjaGVkOgogCQkJCQkJCQkJICAgdHVwbGVpZCwgTlVMTCwg bmV3c2xvdCk7CiAJCQkJCW10c3RhdGUtPm10X21lcmdlX3VwZGF0ZWQgKz0gMTsKIAkJCQl9CisK IAkJCQlicmVhazsKIAogCQkJY2FzZSBDTURfREVMRVRFOgpAQCAtNDM1NCw3ICs0NTg2LDcgQEAg RXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkgKiBGb3IgVVBEQVRFL0RFTEVU RS9NRVJHRSwgZmV0Y2ggdGhlIHJvdyBpZGVudGl0eSBpbmZvIGZvciB0aGUgdHVwbGUKIAkJICog dG8gYmUgdXBkYXRlZC9kZWxldGVkL21lcmdlZC4gIEZvciBhIGhlYXAgcmVsYXRpb24sIHRoYXQn cyBhIFRJRDsKIAkJICogb3RoZXJ3aXNlIHdlIG1heSBoYXZlIGEgd2hvbGVyb3cganVuayBhdHRy IHRoYXQgY2FycmllcyB0aGUgb2xkCi0JCSAqIHR1cGxlIGluIHRvdG8uICBLZWVwIHRoaXMgaW4g c3RlcCB3aXRoIHRoZSBwYXJ0IG9mCisJCSAqIHR1cGxlIGluIHRvdGFsLiAgS2VlcCB0aGlzIGlu IHN0ZXAgd2l0aCB0aGUgcGFydCBvZgogCQkgKiBFeGVjSW5pdE1vZGlmeVRhYmxlIHRoYXQgc2V0 cyB1cCByaV9Sb3dJZEF0dE5vLgogCQkgKi8KIAkJaWYgKG9wZXJhdGlvbiA9PSBDTURfVVBEQVRF IHx8IG9wZXJhdGlvbiA9PSBDTURfREVMRVRFIHx8CkBAIC00NTMwLDYgKzQ3NjIsNyBAQCBFeGVj TW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCQkJLyogTm93IGFwcGx5IHRoZSB1cGRh dGUuICovCiAJCQkJc2xvdCA9IEV4ZWNVcGRhdGUoJmNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1 cGxlaWQsIG9sZHR1cGxlLAogCQkJCQkJCQkgIG9sZFNsb3QsIHNsb3QsIG5vZGUtPmNhblNldFRh Zyk7CisKIAkJCQlpZiAodHVwbG9jaykKIAkJCQkJVW5sb2NrVHVwbGUocmVzdWx0UmVsSW5mby0+ cmlfUmVsYXRpb25EZXNjLCB0dXBsZWlkLAogCQkJCQkJCQlJbnBsYWNlVXBkYXRlVHVwbGVMb2Nr KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2JpdG1hcHNldC5jIGIvc3JjL2JhY2tl bmQvbm9kZXMvYml0bWFwc2V0LmMKaW5kZXggYjRlY2YwYjAzOTAuLjkwMTQ5OTAyNjdhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYworKysgYi9zcmMvYmFja2VuZC9u b2Rlcy9iaXRtYXBzZXQuYwpAQCAtMjM4LDYgKzIzOCwxMCBAQCBibXNfbWFrZV9zaW5nbGV0b24o aW50IHgpCiB2b2lkCiBibXNfZnJlZShCaXRtYXBzZXQgKmEpCiB7CisjaWYgVVNFX0FTU0VSVF9D SEVDS0lORworCUFzc2VydChibXNfaXNfdmFsaWRfc2V0KGEpKTsKKyNlbmRpZgorCiAJaWYgKGEp CiAJCXBmcmVlKGEpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMK aW5kZXggOTM5NzBjNmFmMjkuLmIzNjNlYWE0OWNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKQEAgLTI0Myw2ICsyNDMsOCBAQAogICovCiAKICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAibm9kZXMv Yml0bWFwc2V0LmgiCiAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5o PgpAQCAtMjc1LDcgKzI3Nyw2IEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0 aW9uLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL29yaWdpbi5oIgotI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L3dvcmtlcl9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIK QEAgLTI5MSw2ICsyOTIsNyBAQAogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvcGdfbHNuLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRp bHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9ybHMuaCIKICNpbmNsdWRlICJ1dGlscy9z bmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKQEAgLTExMTAsMTUgKzExMTIs MTggQEAgc2xvdF9zdG9yZV9kYXRhKFR1cGxlVGFibGVTbG90ICpzbG90LCBMb2dpY2FsUmVwUmVs TWFwRW50cnkgKnJlbCwKICAqICJzbG90IiBpcyBmaWxsZWQgd2l0aCBhIGNvcHkgb2YgdGhlIHR1 cGxlIGluICJzcmNzbG90IiwgcmVwbGFjaW5nCiAgKiBjb2x1bW5zIHByb3ZpZGVkIGluICJ0dXBs ZURhdGEiIGFuZCBsZWF2aW5nIG90aGVycyBhcy1pcy4KICAqCisgKiBSZXR1cm5zIGEgYml0bWFw IG9mIHRoZSBtb2RpZmllZCBjb2x1bW5zLgorICoKICAqIENhdXRpb246IHVucmVwbGFjZWQgcGFz cy1ieS1yZWYgY29sdW1ucyBpbiAic2xvdCIgd2lsbCBwb2ludCBpbnRvIHRoZQogICogc3RvcmFn ZSBmb3IgInNyY3Nsb3QiLiAgVGhpcyBpcyBPSyBmb3IgY3VycmVudCB1c2FnZSwgYnV0IHNvbWVk YXkgd2UgbWF5CiAgKiBuZWVkIHRvIG1hdGVyaWFsaXplICJzbG90IiBhdCB0aGUgZW5kIHRvIG1h a2UgaXQgaW5kZXBlbmRlbnQgb2YgInNyY3Nsb3QiLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGlj IEJpdG1hcHNldCAqCiBzbG90X21vZGlmeV9kYXRhKFR1cGxlVGFibGVTbG90ICpzbG90LCBUdXBs ZVRhYmxlU2xvdCAqc3Jjc2xvdCwKIAkJCQkgTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWwsCiAJ CQkJIExvZ2ljYWxSZXBUdXBsZURhdGEgKnR1cGxlRGF0YSkKIHsKKwlCaXRtYXBzZXQgICptb2Rp ZmllZCA9IE5VTEw7CiAJaW50CQkJbmF0dHMgPSBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5u YXR0czsKIAlpbnQJCQlpOwogCkBAIC0xMTk1LDYgKzEyMDAsMjggQEAgc2xvdF9tb2RpZnlfZGF0 YShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgVHVwbGVUYWJsZVNsb3QgKnNyY3Nsb3QsCiAJCQkJc2xv dC0+dHRzX2lzbnVsbFtpXSA9IHRydWU7CiAJCQl9CiAKKwkJCS8qCisJCQkgKiBEZXRlcm1pbmUg aWYgdGhlIHJlcGxpY2F0ZWQgdmFsdWUgY2hhbmdlZCB0aGUgbG9jYWwgdmFsdWUgYnkKKwkJCSAq IGNvbXBhcmluZyBzbG90cy4gIFRoaXMgaXMgYSBzdWJzZXQgb2YKKwkJCSAqIEV4ZWNDaGVja0lu ZGV4ZWRBdHRyc0ZvckNoYW5nZXMuCisJCQkgKi8KKwkJCWlmIChzcmNzbG90LT50dHNfaXNudWxs W2ldICE9IHNsb3QtPnR0c19pc251bGxbaV0pCisJCQl7CisJCQkJLyogT25lIGlzIE5VTEwsIHRo ZSBvdGhlciBpcyBub3Qgc28gdGhlIHZhbHVlIGNoYW5nZWQgKi8KKwkJCQltb2RpZmllZCA9IGJt c19hZGRfbWVtYmVyKG1vZGlmaWVkLCBpICsgMSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1 dGVOdW1iZXIpOworCQkJfQorCQkJZWxzZSBpZiAoIXNyY3Nsb3QtPnR0c19pc251bGxbaV0pCisJ CQl7CisJCQkJLyogQm90aCBhcmUgbm90IE5VTEwsIGNvbXBhcmUgdGhlaXIgdmFsdWVzICovCisJ CQkJaWYgKCF0dHNfYXR0cl9lcXVhbChhdHQtPmF0dHR5cGlkLAorCQkJCQkJCQkJYXR0LT5hdHRj b2xsYXRpb24sCisJCQkJCQkJCQlhdHQtPmF0dGJ5dmFsLAorCQkJCQkJCQkJYXR0LT5hdHRsZW4s CisJCQkJCQkJCQlzcmNzbG90LT50dHNfdmFsdWVzW2ldLAorCQkJCQkJCQkJc2xvdC0+dHRzX3Zh bHVlc1tpXSkpCisJCQkJCW1vZGlmaWVkID0gYm1zX2FkZF9tZW1iZXIobW9kaWZpZWQsIGkgKyAx IC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJCQl9CisKIAkJCS8qIFJl c2V0IGF0dG51bSBmb3IgZXJyb3IgY2FsbGJhY2sgKi8KIAkJCWFwcGx5X2Vycm9yX2NhbGxiYWNr X2FyZy5yZW1vdGVfYXR0bnVtID0gLTE7CiAJCX0KQEAgLTEyMDIsNiArMTIyOSw4IEBAIHNsb3Rf bW9kaWZ5X2RhdGEoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFR1cGxlVGFibGVTbG90ICpzcmNzbG90 LAogCiAJLyogQW5kIGZpbmFsbHksIGRlY2xhcmUgdGhhdCAic2xvdCIgY29udGFpbnMgYSB2YWxp ZCB2aXJ0dWFsIHR1cGxlICovCiAJRXhlY1N0b3JlVmlydHVhbFR1cGxlKHNsb3QpOworCisJcmV0 dXJuIG1vZGlmaWVkOwogfQogCiAvKgpAQCAtMjkxOCw2ICsyOTQ3LDcgQEAgYXBwbHlfaGFuZGxl X3VwZGF0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCUNvbmZsaWN0VHVw bGVJbmZvIGNvbmZsaWN0dHVwbGUgPSB7MH07CiAJYm9vbAkJZm91bmQ7CiAJTWVtb3J5Q29udGV4 dCBvbGRjdHg7CisJQml0bWFwc2V0ICAqaW5kZXhlZCA9IE5VTEw7CiAKIAlFdmFsUGxhblF1YWxJ bml0KCZlcHFzdGF0ZSwgZXN0YXRlLCBOVUxMLCBOSUwsIC0xLCBOSUwpOwogCUV4ZWNPcGVuSW5k aWNlcyhyZWxpbmZvLCBmYWxzZSk7CkBAIC0yOTM0LDYgKzI5NjQsOCBAQCBhcHBseV9oYW5kbGVf dXBkYXRlX2ludGVybmFsKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJICovCiAJaWYgKGZv dW5kKQogCXsKKwkJQml0bWFwc2V0ICAqbW9kaWZpZWQgPSBOVUxMOworCiAJCS8qCiAJCSAqIFJl cG9ydCB0aGUgY29uZmxpY3QgaWYgdGhlIHR1cGxlIHdhcyBtb2RpZmllZCBieSBhIGRpZmZlcmVu dAogCQkgKiBvcmlnaW4uCkBAIC0yOTU3LDE1ICsyOTg5LDI5IEBAIGFwcGx5X2hhbmRsZV91cGRh dGVfaW50ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAogCQkvKiBQcm9jZXNzIGFu ZCBzdG9yZSByZW1vdGUgdHVwbGUgaW4gdGhlIHNsb3QgKi8KIAkJb2xkY3R4ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4dChlc3RhdGUpKTsKLQkJc2xvdF9t b2RpZnlfZGF0YShyZW1vdGVzbG90LCBsb2NhbHNsb3QsIHJlbG1hcGVudHJ5LCBuZXd0dXApOwor CQltb2RpZmllZCA9IHNsb3RfbW9kaWZ5X2RhdGEocmVtb3Rlc2xvdCwgbG9jYWxzbG90LCByZWxt YXBlbnRyeSwgbmV3dHVwKTsKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CiAKKwkJ LyoKKwkJICogTm9ybWFsbHkgd2UnZCBjYWxsIEV4ZWNDaGVja0luZGV4ZWRBdHRyRm9yQ2hhbmdl cyBidXQgaGVyZSB3ZSBoYXZlCisJCSAqIHRoZSByZWNvcmQgb2YgY2hhbmdlZCBjb2x1bW5zIGlu IHRoZSByZXBsaWNhdGlvbiBzdGF0ZSwgc28gbGV0J3MKKwkJICogdXNlIHRoYXQgaW5zdGVhZC4K KwkJICovCisJCWluZGV4ZWQgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxpbmZvLT5y aV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEKTsK KworCQlibXNfZnJlZShyZWxpbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOworCQlyZWxpbmZv LT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSBibXNfaW50X21lbWJlcnMobW9kaWZpZWQsIGluZGV4 ZWQpOworCQlibXNfZnJlZShpbmRleGVkKTsKKwogCQlFdmFsUGxhblF1YWxTZXRTbG90KCZlcHFz dGF0ZSwgcmVtb3Rlc2xvdCk7CiAKIAkJSW5pdENvbmZsaWN0SW5kZXhlcyhyZWxpbmZvKTsKIAot CQkvKiBEbyB0aGUgYWN0dWFsIHVwZGF0ZS4gKi8KKwkJLyogRmlyc3QgY2hlY2sgcHJpdmlsZWdl cyAqLwogCQlUYXJnZXRQcml2aWxlZ2VzQ2hlY2socmVsaW5mby0+cmlfUmVsYXRpb25EZXNjLCBB Q0xfVVBEQVRFKTsKKworCQkvKiBUaGVuIGRvIHRoZSBhY3R1YWwgdXBkYXRlLiAqLwogCQlFeGVj U2ltcGxlUmVsYXRpb25VcGRhdGUocmVsaW5mbywgZXN0YXRlLCAmZXBxc3RhdGUsIGxvY2Fsc2xv dCwKIAkJCQkJCQkJIHJlbW90ZXNsb3QpOwogCX0KQEAgLTM0NTUsNiArMzUwMSw4IEBAIGFwcGx5 X2hhbmRsZV90dXBsZV9yb3V0aW5nKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJCQkJYm9v bAkJZm91bmQ7CiAJCQkJRVBRU3RhdGUJZXBxc3RhdGU7CiAJCQkJQ29uZmxpY3RUdXBsZUluZm8g Y29uZmxpY3R0dXBsZSA9IHswfTsKKwkJCQlCaXRtYXBzZXQgICptb2RpZmllZCA9IE5VTEw7CisJ CQkJQml0bWFwc2V0ICAqaW5kZXhlZDsKIAogCQkJCS8qIEdldCB0aGUgbWF0Y2hpbmcgbG9jYWwg dHVwbGUgZnJvbSB0aGUgcGFydGl0aW9uLiAqLwogCQkJCWZvdW5kID0gRmluZFJlcGxUdXBsZUlu TG9jYWxSZWwoZWRhdGEsIHBhcnRyZWwsCkBAIC0zNTIzLDggKzM1NzEsOCBAQCBhcHBseV9oYW5k bGVfdHVwbGVfcm91dGluZyhBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCQkJCSAqIHJlbW90 ZXNsb3RfcGFydC4KIAkJCQkgKi8KIAkJCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o R2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0ZSkpOwotCQkJCXNsb3RfbW9kaWZ5X2RhdGEo cmVtb3Rlc2xvdF9wYXJ0LCBsb2NhbHNsb3QsIHBhcnRfZW50cnksCi0JCQkJCQkJCSBuZXd0dXAp OworCQkJCW1vZGlmaWVkID0gc2xvdF9tb2RpZnlfZGF0YShyZW1vdGVzbG90X3BhcnQsIGxvY2Fs c2xvdCwgcGFydF9lbnRyeSwKKwkJCQkJCQkJCQkJbmV3dHVwKTsKIAkJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKIAogCQkJCUV2YWxQbGFuUXVhbEluaXQoJmVwcXN0YXRlLCBlc3Rh dGUsIE5VTEwsIE5JTCwgLTEsIE5JTCk7CkBAIC0zNTQ5LDYgKzM1OTcsMTggQEAgYXBwbHlfaGFu ZGxlX3R1cGxlX3JvdXRpbmcoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJCQkJRXZhbFBs YW5RdWFsU2V0U2xvdCgmZXBxc3RhdGUsIHJlbW90ZXNsb3RfcGFydCk7CiAJCQkJCVRhcmdldFBy aXZpbGVnZXNDaGVjayhwYXJ0cmVsaW5mby0+cmlfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkJCSAg QUNMX1VQREFURSk7CisKKwkJCQkJLyoKKwkJCQkJICogTm9ybWFsbHkgd2UnZCBjYWxsIEV4ZWND aGVja0luZGV4ZWRBdHRyRm9yQ2hhbmdlcyBidXQKKwkJCQkJICogaGVyZSB3ZSBoYXZlIHRoZSBy ZWNvcmQgb2YgY2hhbmdlZCBjb2x1bW5zIGluIHRoZQorCQkJCQkgKiByZXBsaWNhdGlvbiBzdGF0 ZSwgc28gbGV0J3MgdXNlIHRoYXQgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCWluZGV4ZWQgPSBS ZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChwYXJ0cmVsaW5mby0+cmlfUmVsYXRpb25EZXNjLAor CQkJCQkJCQkJCQkJCQkgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCk7CisJCQkJCWJtc19mcmVl KHBhcnRyZWxpbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOworCQkJCQlwYXJ0cmVsaW5mby0+ cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gYm1zX2ludF9tZW1iZXJzKG1vZGlmaWVkLCBpbmRleGVk KTsKKwkJCQkJYm1zX2ZyZWUoaW5kZXhlZCk7CisKIAkJCQkJRXhlY1NpbXBsZVJlbGF0aW9uVXBk YXRlKHBhcnRyZWxpbmZvLCBlc3RhdGUsICZlcHFzdGF0ZSwKIAkJCQkJCQkJCQkJIGxvY2Fsc2xv dCwgcmVtb3Rlc2xvdF9wYXJ0KTsKIAkJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpp bmRleCA5MTVkMGJjOTA4NC4uMzI4MjU1OTZiZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYwpAQCAtMjQ4Miw2ICsyNDgyLDcgQEAgUmVsYXRpb25EZXN0cm95UmVsYXRpb24oUmVsYXRp b24gcmVsYXRpb24sIGJvb2wgcmVtZW1iZXJfdHVwZGVzYykKIAlibXNfZnJlZShyZWxhdGlvbi0+ cmRfaWRhdHRyKTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyKTsKIAli bXNfZnJlZShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOworCWJtc19mcmVlKHJlbGF0aW9u LT5yZF9pbmRleGVkYXR0cik7CiAJaWYgKHJlbGF0aW9uLT5yZF9wdWJkZXNjKQogCQlwZnJlZShy ZWxhdGlvbi0+cmRfcHViZGVzYyk7CiAJaWYgKHJlbGF0aW9uLT5yZF9vcHRpb25zKQpAQCAtNTI4 Myw2ICs1Mjg0LDcgQEAgUmVsYXRpb25HZXRJbmRleFByZWRpY2F0ZShSZWxhdGlvbiByZWxhdGlv bikKICAqCQkJCQkJCQkJaW5kZXggKGVtcHR5IGlmIEZVTEwpCiAgKglJTkRFWF9BVFRSX0JJVE1B UF9IT1RfQkxPQ0tJTkcJQ29sdW1ucyB0aGF0IGJsb2NrIHVwZGF0ZXMgZnJvbSBiZWluZyBIT1QK ICAqCUlOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQJQ29sdW1ucyBpbmNsdWRlZCBpbiBzdW1t YXJpemluZyBpbmRleGVzCisgKglJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVECQlDb2x1bW5zIHJl ZmVyZW5jZWQgYnkgaW5kZXhlcwogICoKICAqIEF0dHJpYnV0ZSBudW1iZXJzIGFyZSBvZmZzZXQg YnkgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciBzbyB0aGF0CiAgKiB3ZSBjYW4g aW5jbHVkZSBzeXN0ZW0gYXR0cmlidXRlcyAoZS5nLiwgT0lEKSBpbiB0aGUgYml0bWFwIHJlcHJl c2VudGF0aW9uLgpAQCAtNTMwNyw2ICs1MzA5LDcgQEAgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRt YXAoUmVsYXRpb24gcmVsYXRpb24sIEluZGV4QXR0ckJpdG1hcEtpbmQgYXR0cktpbmQpCiAJQml0 bWFwc2V0ICAqaWRpbmRleGF0dHJzOwkvKiBjb2x1bW5zIGluIHRoZSByZXBsaWNhIGlkZW50aXR5 ICovCiAJQml0bWFwc2V0ICAqaG90YmxvY2tpbmdhdHRyczsJLyogY29sdW1ucyB3aXRoIEhPVCBi bG9ja2luZyBpbmRleGVzICovCiAJQml0bWFwc2V0ICAqc3VtbWFyaXplZGF0dHJzOwkvKiBjb2x1 bW5zIHdpdGggc3VtbWFyaXppbmcgaW5kZXhlcyAqLworCUJpdG1hcHNldCAgKmluZGV4ZWRhdHRy czsJLyogY29sdW1ucyByZWZlcmVuY2VkIGJ5IGluZGV4ZXMgKi8KIAlMaXN0CSAgICppbmRleG9p ZGxpc3Q7CiAJTGlzdAkgICAqbmV3aW5kZXhvaWRsaXN0OwogCU9pZAkJCXJlbHBraW5kZXg7CkBA IC01MzI5LDYgKzUzMzIsOCBAQCBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChSZWxhdGlvbiBy ZWxhdGlvbiwgSW5kZXhBdHRyQml0bWFwS2luZCBhdHRyS2luZCkKIAkJCQlyZXR1cm4gYm1zX2Nv cHkocmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0cik7CiAJCQljYXNlIElOREVYX0FUVFJfQklU TUFQX1NVTU1BUklaRUQ6CiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9zdW1tYXJp emVkYXR0cik7CisJCQljYXNlIElOREVYX0FUVFJfQklUTUFQX0lOREVYRUQ6CisJCQkJcmV0dXJu IGJtc19jb3B5KHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CiAJCQlkZWZhdWx0OgogCQkJCWVs b2coRVJST1IsICJ1bmtub3duIGF0dHJLaW5kICV1IiwgYXR0cktpbmQpOwogCQl9CkBAIC01Mzcz LDYgKzUzNzgsNyBAQCByZXN0YXJ0OgogCWlkaW5kZXhhdHRycyA9IE5VTEw7CiAJaG90YmxvY2tp bmdhdHRycyA9IE5VTEw7CiAJc3VtbWFyaXplZGF0dHJzID0gTlVMTDsKKwlpbmRleGVkYXR0cnMg PSBOVUxMOwogCWZvcmVhY2gobCwgaW5kZXhvaWRsaXN0KQogCXsKIAkJT2lkCQkJaW5kZXhPaWQg PSBsZmlyc3Rfb2lkKGwpOwpAQCAtNTUwNSwxMCArNTUxMSwxNCBAQCByZXN0YXJ0OgogCQlibXNf ZnJlZShpZGluZGV4YXR0cnMpOwogCQlibXNfZnJlZShob3RibG9ja2luZ2F0dHJzKTsKIAkJYm1z X2ZyZWUoc3VtbWFyaXplZGF0dHJzKTsKKwkJYm1zX2ZyZWUoaW5kZXhlZGF0dHJzKTsKIAogCQln b3RvIHJlc3RhcnQ7CiAJfQogCisJLyogQ29tYmluZSBhbGwgaW5kZXggYXR0cmlidXRlcyAqLwor CWluZGV4ZWRhdHRycyA9IGJtc191bmlvbihob3RibG9ja2luZ2F0dHJzLCBzdW1tYXJpemVkYXR0 cnMpOworCiAJLyogRG9uJ3QgbGVhayB0aGUgb2xkIHZhbHVlcyBvZiB0aGVzZSBiaXRtYXBzLCBp ZiBhbnkgKi8KIAlyZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IGZhbHNlOwogCWJtc19mcmVlKHJl bGF0aW9uLT5yZF9rZXlhdHRyKTsKQEAgLTU1MjEsNiArNTUzMSw4IEBAIHJlc3RhcnQ6CiAJcmVs YXRpb24tPnJkX2hvdGJsb2NraW5nYXR0ciA9IE5VTEw7CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJk X3N1bW1hcml6ZWRhdHRyKTsKIAlyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIgPSBOVUxMOwor CWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CisJcmVsYXRpb24tPnJkX2luZGV4 ZWRhdHRyID0gTlVMTDsKIAogCS8qCiAJICogTm93IHNhdmUgY29waWVzIG9mIHRoZSBiaXRtYXBz IGluIHRoZSByZWxjYWNoZSBlbnRyeS4gIFdlIGludGVudGlvbmFsbHkKQEAgLTU1MzUsNiArNTU0 Nyw3IEBAIHJlc3RhcnQ6CiAJcmVsYXRpb24tPnJkX2lkYXR0ciA9IGJtc19jb3B5KGlkaW5kZXhh dHRycyk7CiAJcmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0ciA9IGJtc19jb3B5KGhvdGJsb2Nr aW5nYXR0cnMpOwogCXJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0ciA9IGJtc19jb3B5KHN1bW1h cml6ZWRhdHRycyk7CisJcmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyID0gYm1zX2NvcHkoaW5kZXhl ZGF0dHJzKTsKIAlyZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IHRydWU7CiAJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGN4dCk7CiAKQEAgLTU1NTEsNiArNTU2NCw4IEBAIHJlc3RhcnQ6CiAJCQly ZXR1cm4gaG90YmxvY2tpbmdhdHRyczsKIAkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJ WkVEOgogCQkJcmV0dXJuIHN1bW1hcml6ZWRhdHRyczsKKwkJY2FzZSBJTkRFWF9BVFRSX0JJVE1B UF9JTkRFWEVEOgorCQkJcmV0dXJuIGluZGV4ZWRhdHRyczsKIAkJZGVmYXVsdDoKIAkJCWVsb2co RVJST1IsICJ1bmtub3duIGF0dHJLaW5kICV1IiwgYXR0cktpbmQpOwogCQkJcmV0dXJuIE5VTEw7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3RhYmxlYW0uaAppbmRleCBlMTZiZjAyNTY5Mi4uOGE1OTMxYTMxMTggMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaApAQCAtNTQ5LDYgKzU0OSw3IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0 aW5lCiAJCQkJCQkJCSBib29sIHdhaXQsCiAJCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwK IAkJCQkJCQkJIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAorCQkJCQkJCQkgQml0bWFwc2V0ICp1 cGRhdGVkX2NvbHMsCiAJCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcyk7 CiAKIAkvKiBzZWUgdGFibGVfdHVwbGVfbG9jaygpIGZvciByZWZlcmVuY2UgYWJvdXQgcGFyYW1l dGVycyAqLwpAQCAtMTUwMiwxMiArMTUwMywxMiBAQCBzdGF0aWMgaW5saW5lIFRNX1Jlc3VsdAog dGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCiAJCQkJICAgQ29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3Qs IFNuYXBzaG90IGNyb3NzY2hlY2ssCiAJCQkJICAgYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAq dG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJICAgVFVfVXBkYXRlSW5kZXhlcyAq dXBkYXRlX2luZGV4ZXMpCisJCQkJICAgQml0bWFwc2V0ICp1cGRhdGVkX2NvbHMsIFRVX1VwZGF0 ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1 cGxlX3VwZGF0ZShyZWwsIG90aWQsIHNsb3QsCiAJCQkJCQkJCQkJIGNpZCwgc25hcHNob3QsIGNy b3NzY2hlY2ssCi0JCQkJCQkJCQkJIHdhaXQsIHRtZmQsCi0JCQkJCQkJCQkJIGxvY2ttb2RlLCB1 cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCQkJIHdhaXQsIHRtZmQsIGxvY2ttb2RlLAorCQkJCQkJ CQkJCSB1cGRhdGVkX2NvbHMsIHVwZGF0ZV9pbmRleGVzKTsKIH0KIAogLyoKQEAgLTIwMTAsNiAr MjAxMSw3IEBAIGV4dGVybiB2b2lkIHNpbXBsZV90YWJsZV90dXBsZV9kZWxldGUoUmVsYXRpb24g cmVsLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90KTsKIGV4 dGVybiB2b2lkIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9p bnRlciBvdGlkLAogCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgU25hcHNob3Qgc25h cHNob3QsCisJCQkJCQkJCQkgIEJpdG1hcHNldCAqbW9kaWZpZWRfaW5kZXhlX2F0dHJzLAogCQkJ CQkJCQkJICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcyk7CiAKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWN1dG9yLmgKaW5kZXggZmEyYjY1N2ZiMmYuLjk5M2RjMGU2Y2VkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWN1dG9yLmgKQEAgLTgwMCw1ICs4MDAsMTAgQEAgZXh0ZXJuIFJlc3VsdFJlbEluZm8gKkV4 ZWNMb29rdXBSZXN1bHRSZWxCeU9pZChNb2RpZnlUYWJsZVN0YXRlICpub2RlLAogCQkJCQkJCQkJ CQkgICBPaWQgcmVzdWx0b2lkLAogCQkJCQkJCQkJCQkgICBib29sIG1pc3Npbmdfb2ssCiAJCQkJ CQkJCQkJCSAgIGJvb2wgdXBkYXRlX2NhY2hlKTsKK2V4dGVybiBCaXRtYXBzZXQgKkV4ZWNDaGVj a0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJ CQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnR0c19vbGQsCisJCQkJCQkJCQkJCQkgIFR1cGxl VGFibGVTbG90ICp0dHNfbmV3KTsKK2V4dGVybiBib29sIHR0c19hdHRyX2VxdWFsKE9pZCB0eXBp ZCwgT2lkIGNvbGxhdGlvbiwgYm9vbCB0eXBieXZhbCwgaW50MTYgdHlwbGVuLAorCQkJCQkJICAg RGF0dW0gdmFsdWUxLCBEYXR1bSB2YWx1ZTIpOwogCiAjZW5kaWYJCQkJCQkJLyogRVhFQ1VUT1Jf SCAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMThhZThmMGQ0YmIuLjhiMDhlMDA0NWJhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNDk4LDYgKzQ5OCw3IEBAIHR5cGVkZWYgc3RydWN0IFJl c3VsdFJlbEluZm8KIAlCaXRtYXBzZXQgICpyaV9leHRyYVVwZGF0ZWRDb2xzOwogCS8qIHRydWUg aWYgdGhlIGFib3ZlIGhhcyBiZWVuIGNvbXB1dGVkICovCiAJYm9vbAkJcmlfZXh0cmFVcGRhdGVk Q29sc192YWxpZDsKKwlCaXRtYXBzZXQgICpyaV9DaGFuZ2VkSW5kZXhlZENvbHM7CiAKIAkvKiBQ cm9qZWN0aW9uIHRvIGdlbmVyYXRlIG5ldyB0dXBsZSBpbiBhbiBJTlNFUlQvVVBEQVRFICovCiAJ UHJvamVjdGlvbkluZm8gKnJpX3Byb2plY3ROZXc7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IDgwMjg2MDc2YTExLi5i MjNhNzMwNmU2OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTE2NCw2ICsxNjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBS ZWxhdGlvbkRhdGEKIAlCaXRtYXBzZXQgICpyZF9pZGF0dHI7CQkvKiBpbmNsdWRlZCBpbiByZXBs aWNhIGlkZW50aXR5IGluZGV4ICovCiAJQml0bWFwc2V0ICAqcmRfaG90YmxvY2tpbmdhdHRyOyAv KiBjb2xzIGJsb2NraW5nIEhPVCB1cGRhdGUgKi8KIAlCaXRtYXBzZXQgICpyZF9zdW1tYXJpemVk YXR0cjsJLyogY29scyBpbmRleGVkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KKwlCaXRtYXBz ZXQgICpyZF9pbmRleGVkYXR0cjsgLyogYWxsIGNvbHMgcmVmZXJlbmNlZCBieSBpbmRleGVzICov CiAKIAlQdWJsaWNhdGlvbkRlc2MgKnJkX3B1YmRlc2M7CS8qIHB1YmxpY2F0aW9uIGRlc2NyaXB0 b3IsIG9yIE5VTEwgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUu aCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKaW5kZXggMzU2MWM2YmVmMGIuLmQzZmJi OGIwOTNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKQEAgLTcxLDYgKzcxLDcgQEAgdHlwZWRlZiBlbnVt IEluZGV4QXR0ckJpdG1hcEtpbmQKIAlJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVksCiAJ SU5ERVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HLAogCUlOREVYX0FUVFJfQklUTUFQX1NVTU1B UklaRUQsCisJSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCwKIH0gSW5kZXhBdHRyQml0bWFwS2lu ZDsKIAogZXh0ZXJuIEJpdG1hcHNldCAqUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAoUmVsYXRp b24gcmVsYXRpb24sCi0tIAoyLjQ5LjAKCg== --691e0abf_10e796de_db0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?utf-8?Q?v22-0003-Replace-index=5Funchanged=5Fby=5Fupdate-with-ri=5FChange.patch?=" RnJvbSBjZjQxODI3ZGQyZWQxM2U1ZmEwMjc2M2JkZGVjNTcwMTI1YWY2MjFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogRnJpLCAz MSBPY3QgMjAyNSAxNDo1NToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIyIDMvNF0gUmVwbGFj ZSBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlIHdpdGgKIHJpX0NoYW5nZWRJbmRleGVkQ29scwoK SW4gZXhlY0luZGV4aW5nIG9uIHVwZGF0ZXMgd2UnZCBsaWtlIHRvIHBhc3MgYSBoaW50IHRvIHRo ZSBpbmRleGluZyBjb2RlCndoZW4gdGhlIGluZGV4ZWQgYXR0cmlidXRlcyBhcmUgdW5jaGFuZ2Vk LiAgVGhpcyBjb21taXQgcmVwbGFjZXMgdGhlIG5vdwpyZWR1bmRhbnQgY29kZSBpbiBpbmRleF91 bmNoYW5nZWRfYnlfdXBkYXRlIHdpdGggdGhlIHNhbWUgaW5mb3JtYXRpb24KZm91bmQgZWFybGll ciBpbiB0aGUgdXBkYXRlIHBhdGguCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5j ICAgICAgfCAgIDIgLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgfCAxNTYg Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNz LmMgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgfCAg IDQgLQogNCBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMTYzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvdG9hc3RpbmcuYwppbmRleCA4NzRhOGZjODlhZC4uNWQ4MTliZGE1NGEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3RvYXN0aW5nLmMKQEAgLTMwMCw4ICszMDAsNiBAQCBjcmVhdGVfdG9hc3RfdGFibGUo UmVsYXRpb24gcmVsLCBPaWQgdG9hc3RPaWQsIE9pZCB0b2FzdEluZGV4T2lkLAogCWluZGV4SW5m by0+aWlfVW5pcXVlID0gdHJ1ZTsKIAlpbmRleEluZm8tPmlpX051bGxzTm90RGlzdGluY3QgPSBm YWxzZTsKIAlpbmRleEluZm8tPmlpX1JlYWR5Rm9ySW5zZXJ0cyA9IHRydWU7Ci0JaW5kZXhJbmZv LT5paV9DaGVja2VkVW5jaGFuZ2VkID0gZmFsc2U7Ci0JaW5kZXhJbmZvLT5paV9JbmRleFVuY2hh bmdlZCA9IGZhbHNlOwogCWluZGV4SW5mby0+aWlfQ29uY3VycmVudCA9IGZhbHNlOwogCWluZGV4 SW5mby0+aWlfQnJva2VuSG90Q2hhaW4gPSBmYWxzZTsKIAlpbmRleEluZm8tPmlpX1BhcmFsbGVs V29ya2VycyA9IDA7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhp bmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDQwMTYwNmY4 NDBhLi5mYjFiYzNhNDgwZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0lu ZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTEz OCwxMSArMTM4LDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25z dHJhaW50KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAogc3RhdGljIGJvb2wgaW5kZXhf cmVjaGVja19jb25zdHJhaW50KFJlbGF0aW9uIGluZGV4LCBjb25zdCBPaWQgKmNvbnN0cl9wcm9j cywKIAkJCQkJCQkJCSBjb25zdCBEYXR1bSAqZXhpc3RpbmdfdmFsdWVzLCBjb25zdCBib29sICpl eGlzdGluZ19pc251bGwsCiAJCQkJCQkJCQkgY29uc3QgRGF0dW0gKm5ld192YWx1ZXMpOwotc3Rh dGljIGJvb2wgaW5kZXhfdW5jaGFuZ2VkX2J5X3VwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvLAotCQkJCQkJCQkJICBFU3RhdGUgKmVzdGF0ZSwgSW5kZXhJbmZvICppbmRleEluZm8s Ci0JCQkJCQkJCQkgIFJlbGF0aW9uIGluZGV4UmVsYXRpb24pOwotc3RhdGljIGJvb2wgaW5kZXhf ZXhwcmVzc2lvbl9jaGFuZ2VkX3dhbGtlcihOb2RlICpub2RlLAotCQkJCQkJCQkJCQlCaXRtYXBz ZXQgKmFsbFVwZGF0ZWRDb2xzKTsKIHN0YXRpYyB2b2lkIEV4ZWNXaXRob3V0T3ZlcmxhcHNOb3RF bXB0eShSZWxhdGlvbiByZWwsIE5hbWVEYXRhIGF0dG5hbWUsIERhdHVtIGF0dHZhbCwKIAkJCQkJ CQkJCQljaGFyIHR5cHR5cGUsIE9pZCBhdHR0eXBpZCk7CiAKQEAgLTQ0MCwxMCArNDM1LDcgQEAg RXhlY0luc2VydEluZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCSAq IGluZGV4LiAgSWYgd2UncmUgYmVpbmcgY2FsbGVkIGFzIHBhcnQgb2YgYW4gVVBEQVRFIHN0YXRl bWVudCwKIAkJICogY29uc2lkZXIgaWYgdGhlICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQg c2hvdWxkIGJlIHBhc3NlZC4KIAkJICovCi0JCWluZGV4VW5jaGFuZ2VkID0gdXBkYXRlICYmIGlu ZGV4X3VuY2hhbmdlZF9ieV91cGRhdGUocmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJCQkJCQkJCSBl c3RhdGUsCi0JCQkJCQkJCQkJCQkJCQkgaW5kZXhJbmZvLAotCQkJCQkJCQkJCQkJCQkJIGluZGV4 UmVsYXRpb24pOworCQlpbmRleFVuY2hhbmdlZCA9IHVwZGF0ZSAmJiBibXNfaXNfZW1wdHkocmVz dWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzKTsKIAogCQlzYXRpc2ZpZXNDb25zdHJh aW50ID0KIAkJCWluZGV4X2luc2VydChpbmRleFJlbGF0aW9uLCAvKiBpbmRleCByZWxhdGlvbiAq LwpAQCAtOTkzLDE1MiArOTg1LDYgQEAgaW5kZXhfcmVjaGVja19jb25zdHJhaW50KFJlbGF0aW9u IGluZGV4LCBjb25zdCBPaWQgKmNvbnN0cl9wcm9jcywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoK LSAqIENoZWNrIGlmIEV4ZWNJbnNlcnRJbmRleFR1cGxlcygpIHNob3VsZCBwYXNzIGluZGV4VW5j aGFuZ2VkIGhpbnQuCi0gKgotICogV2hlbiB0aGUgZXhlY3V0b3IgcGVyZm9ybXMgYW4gVVBEQVRF IHRoYXQgcmVxdWlyZXMgYSBuZXcgcm91bmQgb2YgaW5kZXgKLSAqIHR1cGxlcywgZGV0ZXJtaW5l IGlmIHdlIHNob3VsZCBwYXNzICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQgZm9yIG9uZQot ICogc2luZ2xlIGluZGV4LgotICovCi1zdGF0aWMgYm9vbAotaW5kZXhfdW5jaGFuZ2VkX2J5X3Vw ZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBFU3RhdGUgKmVzdGF0ZSwKLQkJCQkJ CSAgSW5kZXhJbmZvICppbmRleEluZm8sIFJlbGF0aW9uIGluZGV4UmVsYXRpb24pCi17Ci0JQml0 bWFwc2V0ICAqdXBkYXRlZENvbHM7Ci0JQml0bWFwc2V0ICAqZXh0cmFVcGRhdGVkQ29sczsKLQlC aXRtYXBzZXQgICphbGxVcGRhdGVkQ29sczsKLQlib29sCQloYXNleHByZXNzaW9uID0gZmFsc2U7 Ci0JTGlzdAkgICAqaWR4RXhwcnM7Ci0KLQkvKgotCSAqIENoZWNrIGNhY2hlIGZpcnN0Ci0JICov Ci0JaWYgKGluZGV4SW5mby0+aWlfQ2hlY2tlZFVuY2hhbmdlZCkKLQkJcmV0dXJuIGluZGV4SW5m by0+aWlfSW5kZXhVbmNoYW5nZWQ7Ci0JaW5kZXhJbmZvLT5paV9DaGVja2VkVW5jaGFuZ2VkID0g dHJ1ZTsKLQotCS8qCi0JICogQ2hlY2sgZm9yIGluZGV4ZWQgYXR0cmlidXRlIG92ZXJsYXAgd2l0 aCB1cGRhdGVkIGNvbHVtbnMuCi0JICoKLQkgKiBPbmx5IGRvIHRoaXMgZm9yIGtleSBjb2x1bW5z LiAgQSBjaGFuZ2UgdG8gYSBub24ta2V5IGNvbHVtbiB3aXRoaW4gYW4KLQkgKiBJTkNMVURFIGlu ZGV4IHNob3VsZCBub3QgYmUgY291bnRlZCBoZXJlLiAgTm9uLWtleSBjb2x1bW4gdmFsdWVzIGFy ZQotCSAqIG9wYXF1ZSBwYXlsb2FkIHN0YXRlIHRvIHRoZSBpbmRleCBBTSwgYSBsaXR0bGUgbGlr ZSBhbiBleHRyYSB0YWJsZSBUSUQuCi0JICoKLQkgKiBOb3RlIHRoYXQgcm93LWxldmVsIEJFRk9S RSB0cmlnZ2VycyB3b24ndCBhZmZlY3Qgb3VyIGJlaGF2aW9yLCBzaW5jZQotCSAqIHRoZXkgZG9u J3QgYWZmZWN0IHRoZSB1cGRhdGVkQ29scyBiaXRtYXBzIGdlbmVyYWxseS4gIEl0IGRvZXNuJ3Qg c2VlbQotCSAqIHdvcnRoIHRoZSB0cm91YmxlIG9mIGNoZWNraW5nIHdoaWNoIGF0dHJpYnV0ZXMg d2VyZSBjaGFuZ2VkIGRpcmVjdGx5LgotCSAqLwotCXVwZGF0ZWRDb2xzID0gRXhlY0dldFVwZGF0 ZWRDb2xzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSk7Ci0JZXh0cmFVcGRhdGVkQ29scyA9IEV4ZWNH ZXRFeHRyYVVwZGF0ZWRDb2xzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSk7Ci0JZm9yIChpbnQgYXR0 ciA9IDA7IGF0dHIgPCBpbmRleEluZm8tPmlpX051bUluZGV4S2V5QXR0cnM7IGF0dHIrKykKLQl7 Ci0JCWludAkJCWtleWNvbCA9IGluZGV4SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVyc1thdHRyXTsK LQotCQlpZiAoa2V5Y29sIDw9IDApCi0JCXsKLQkJCS8qCi0JCQkgKiBTa2lwIGV4cHJlc3Npb25z IGZvciBub3csIGJ1dCByZW1lbWJlciB0byBkZWFsIHdpdGggdGhlbSBsYXRlcgotCQkJICogb24K LQkJCSAqLwotCQkJaGFzZXhwcmVzc2lvbiA9IHRydWU7Ci0JCQljb250aW51ZTsKLQkJfQotCi0J CWlmIChibXNfaXNfbWVtYmVyKGtleWNvbCAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVO dW1iZXIsCi0JCQkJCQkgIHVwZGF0ZWRDb2xzKSB8fAotCQkJYm1zX2lzX21lbWJlcihrZXljb2wg LSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyLAotCQkJCQkJICBleHRyYVVwZGF0 ZWRDb2xzKSkKLQkJewotCQkJLyogQ2hhbmdlZCBrZXkgY29sdW1uIC0tIGRvbid0IGhpbnQgZm9y IHRoaXMgaW5kZXggKi8KLQkJCWluZGV4SW5mby0+aWlfSW5kZXhVbmNoYW5nZWQgPSBmYWxzZTsK LQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCS8qCi0JICogV2hlbiB3ZSBnZXQgdGhpcyBm YXIgYW5kIGluZGV4IGhhcyBubyBleHByZXNzaW9ucywgcmV0dXJuIHRydWUgc28gdGhhdAotCSAq IGluZGV4X2luc2VydCgpIGNhbGwgd2lsbCBnbyBvbiB0byBwYXNzICdpbmRleFVuY2hhbmdlZCcg PSB0cnVlIGhpbnQuCi0JICoKLQkgKiBUaGUgX2Fic2VuY2VfIG9mIGFuIGluZGV4ZWQga2V5IGF0 dHJpYnV0ZSB0aGF0IG92ZXJsYXBzIHdpdGggdXBkYXRlZAotCSAqIGF0dHJpYnV0ZXMgKGluIGFk ZGl0aW9uIHRvIHRoZSB0b3RhbCBhYnNlbmNlIG9mIGluZGV4ZWQgZXhwcmVzc2lvbnMpCi0JICog c2hvd3MgdGhhdCB0aGUgaW5kZXggYXMgYSB3aG9sZSBpcyBsb2dpY2FsbHkgdW5jaGFuZ2VkIGJ5 IFVQREFURS4KLQkgKi8KLQlpZiAoIWhhc2V4cHJlc3Npb24pCi0JewotCQlpbmRleEluZm8tPmlp X0luZGV4VW5jaGFuZ2VkID0gdHJ1ZTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiBO ZWVkIHRvIHBhc3Mgb25seSBvbmUgYm1zIHRvIGV4cHJlc3Npb25fdHJlZV93YWxrZXIgaGVscGVy IGZ1bmN0aW9uLgotCSAqIEF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IGluIGNvbW1vbiBjYXNlIHdo ZXJlIHRoZXJlIGFyZSBubyBleHRyYSBjb2xzLgotCSAqLwotCWlmICghZXh0cmFVcGRhdGVkQ29s cykKLQkJYWxsVXBkYXRlZENvbHMgPSB1cGRhdGVkQ29sczsKLQllbHNlCi0JCWFsbFVwZGF0ZWRD b2xzID0gYm1zX3VuaW9uKHVwZGF0ZWRDb2xzLCBleHRyYVVwZGF0ZWRDb2xzKTsKLQotCS8qCi0J ICogV2UgaGF2ZSB0byB3b3JrIHNsaWdodGx5IGhhcmRlciBpbiB0aGUgZXZlbnQgb2YgaW5kZXhl ZCBleHByZXNzaW9ucywKLQkgKiBidXQgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZSBhcyBiZWZv cmU6IHRyeSB0byBmaW5kIGNvbHVtbnMgKFZhcnMsCi0JICogYWN0dWFsbHkpIHRoYXQgb3Zlcmxh cCB3aXRoIGtub3duLXVwZGF0ZWQgY29sdW1ucy4KLQkgKgotCSAqIElmIHdlIGZpbmQgYW55IG1h dGNoaW5nIFZhcnMsIGRvbid0IHBhc3MgaGludCBmb3IgaW5kZXguICBPdGhlcndpc2UKLQkgKiBw YXNzIGhpbnQuCi0JICovCi0JaWR4RXhwcnMgPSBSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lvbnMo aW5kZXhSZWxhdGlvbik7Ci0JaGFzZXhwcmVzc2lvbiA9IGluZGV4X2V4cHJlc3Npb25fY2hhbmdl ZF93YWxrZXIoKE5vZGUgKikgaWR4RXhwcnMsCi0JCQkJCQkJCQkJCQkJYWxsVXBkYXRlZENvbHMp OwotCWxpc3RfZnJlZShpZHhFeHBycyk7Ci0JaWYgKGV4dHJhVXBkYXRlZENvbHMpCi0JCWJtc19m cmVlKGFsbFVwZGF0ZWRDb2xzKTsKLQotCWlmIChoYXNleHByZXNzaW9uKQotCXsKLQkJaW5kZXhJ bmZvLT5paV9JbmRleFVuY2hhbmdlZCA9IGZhbHNlOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0J LyoKLQkgKiBEZWxpYmVyYXRlbHkgZG9uJ3QgY29uc2lkZXIgaW5kZXggcHJlZGljYXRlcy4gIFdl IHNob3VsZCBldmVuIGdpdmUgdGhlCi0JICogaGludCB3aGVuIHJlc3VsdCByZWwncyAidXBkYXRl ZCB0dXBsZSIgaGFzIG5vIGNvcnJlc3BvbmRpbmcgaW5kZXgKLQkgKiB0dXBsZSwgd2hpY2ggaXMg cG9zc2libGUgd2l0aCBhIHBhcnRpYWwgaW5kZXggKHByb3ZpZGVkIHRoZSB1c3VhbAotCSAqIGNv bmRpdGlvbnMgYXJlIG1ldCkuCi0JICovCi0JaW5kZXhJbmZvLT5paV9JbmRleFVuY2hhbmdlZCA9 IHRydWU7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBJbmRleGVkIGV4cHJlc3Npb24gaGVs cGVyIGZvciBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKCkuCi0gKgotICogUmV0dXJucyB0cnVl IHdoZW4gVmFyIHRoYXQgYXBwZWFycyB3aXRoaW4gYWxsVXBkYXRlZENvbHMgbG9jYXRlZC4KLSAq Lwotc3RhdGljIGJvb2wKLWluZGV4X2V4cHJlc3Npb25fY2hhbmdlZF93YWxrZXIoTm9kZSAqbm9k ZSwgQml0bWFwc2V0ICphbGxVcGRhdGVkQ29scykKLXsKLQlpZiAobm9kZSA9PSBOVUxMKQotCQly ZXR1cm4gZmFsc2U7Ci0KLQlpZiAoSXNBKG5vZGUsIFZhcikpCi0JewotCQlWYXIJCSAgICp2YXIg PSAoVmFyICopIG5vZGU7Ci0KLQkJaWYgKGJtc19pc19tZW1iZXIodmFyLT52YXJhdHRubyAtIEZp cnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCQkgIGFsbFVwZGF0ZWRDb2xz KSkKLQkJewotCQkJLyogVmFyIHdhcyB1cGRhdGVkIC0tIGluZGljYXRlcyB0aGF0IHdlIHNob3Vs ZCBub3QgaGludCAqLwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvKiBTdGlsbCBoYXZlbid0 IGZvdW5kIGEgcmVhc29uIHRvIG5vdCBwYXNzIHRoZSBoaW50ICovCi0JCXJldHVybiBmYWxzZTsK LQl9Ci0KLQlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBpbmRleF9leHByZXNz aW9uX2NoYW5nZWRfd2Fsa2VyLAotCQkJCQkJCQkgIGFsbFVwZGF0ZWRDb2xzKTsKLX0KLQogLyoK ICAqIEV4ZWNXaXRob3V0T3ZlcmxhcHNOb3RFbXB0eSAtIHJhaXNlIGFuIGVycm9yIGlmIHRoZSB0 dXBsZSBoYXMgYW4gZW1wdHkKICAqIHJhbmdlIG9yIG11bHRpcmFuZ2UgaW4gdGhlIGdpdmVuIGF0 dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggZTJkOWU5YmU0MWEuLmQ2OWRjMDkwYWE0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtODQ1LDggKzg0NSw2IEBAIG1ha2VJbmRleEluZm8o aW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwgTGlzdCAqZXhwcmVzc2lv bnMsCiAJbi0+aWlfVW5pcXVlID0gdW5pcXVlOwogCW4tPmlpX051bGxzTm90RGlzdGluY3QgPSBu dWxsc19ub3RfZGlzdGluY3Q7CiAJbi0+aWlfUmVhZHlGb3JJbnNlcnRzID0gaXNyZWFkeTsKLQlu LT5paV9DaGVja2VkVW5jaGFuZ2VkID0gZmFsc2U7Ci0Jbi0+aWlfSW5kZXhVbmNoYW5nZWQgPSBm YWxzZTsKIAluLT5paV9Db25jdXJyZW50ID0gY29uY3VycmVudDsKIAluLT5paV9TdW1tYXJpemlu ZyA9IHN1bW1hcml6aW5nOwogCW4tPmlpX1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFw czsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggOGIwOGUwMDQ1YmEuLjg5ODM2OGZiOGNiIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaApAQCAtMjAyLDEwICsyMDIsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eEluZm8KIAlib29sCQlpaV9OdWxsc05vdERpc3RpbmN0OwogCS8qIGlzIGl0IHZhbGlkIGZvciBp bnNlcnRzPyAqLwogCWJvb2wJCWlpX1JlYWR5Rm9ySW5zZXJ0czsKLQkvKiBJbmRleFVuY2hhbmdl ZCBzdGF0dXMgZGV0ZXJtaW5lZCB5ZXQ/ICovCi0JYm9vbAkJaWlfQ2hlY2tlZFVuY2hhbmdlZDsK LQkvKiBhbWluc2VydCBoaW50LCBjYWNoZWQgZm9yIHJldGFpbCBpbnNlcnRzICovCi0JYm9vbAkJ aWlfSW5kZXhVbmNoYW5nZWQ7CiAJLyogYXJlIHdlIGRvaW5nIGEgY29uY3VycmVudCBpbmRleCBi dWlsZD8gKi8KIAlib29sCQlpaV9Db25jdXJyZW50OwogCS8qIGRpZCB3ZSBkZXRlY3QgYW55IGJy b2tlbiBIT1QgY2hhaW5zPyAqLwotLSAKMi40OS4wCgo= --691e0abf_10e796de_db0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v22-0004-Enable-HOT-updates-for-expression-and-partial-in.patch" RnJvbSA5ZjU4NGFmYzdmMjdhYzhlOTNjNmNmNDI1MjQ4YTI0ZmJhNjc5YTRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy NiBPY3QgMjAyNSAxMDo0OToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIyIDQvNF0gRW5hYmxl IEhPVCB1cGRhdGVzIGZvciBleHByZXNzaW9uIGFuZCBwYXJ0aWFsIGluZGV4ZXMKCkN1cnJlbnRs eSwgUG9zdGdyZVNRTCBjb25zZXJ2YXRpdmVseSBwcmV2ZW50cyBIT1QgKEhlYXAtT25seSBUdXBs ZSkKdXBkYXRlcyB3aGVuZXZlciBhbnkgaW5kZXhlZCBjb2x1bW4gY2hhbmdlcywgZXZlbiBpZiB0 aGUgaW5kZXhlZApwb3J0aW9uIG9mIHRoYXQgY29sdW1uIHJlbWFpbnMgaWRlbnRpY2FsLiBUaGlz IGlzIG92ZXJseSByZXN0cmljdGl2ZQpmb3IgZXhwcmVzc2lvbiBpbmRleGVzICh3aGVyZSBmKGNv bHVtbikgbWlnaHQgbm90IGNoYW5nZSBldmVuIHdoZW4KY29sdW1uIGNoYW5nZXMpIGFuZCBwYXJ0 aWFsIGluZGV4ZXMgKHdoZXJlIGJvdGggb2xkIGFuZCBuZXcgdHVwbGVzCm1pZ2h0IGZhbGwgb3V0 c2lkZSB0aGUgcHJlZGljYXRlKS4gIEZpbmFsbHksIGluZGV4IEFNcyBwbGF5IG5vIHJvbGUKaW4g ZGVjaWRpbmcgd2hlbiB0aGV5IG5lZWQgYSBuZXcgaW5kZXggZW50cnkgb24gdXBkYXRlLCB0aGUg cnVsZXMKcmVnYXJkaW5nIHRoYXQgYXJlIGJhc2VkIG9uIGJpbmFyeSBlcXVhbGl0eSBhbmQgdGhl IEhFQVAncyBtb2RlbCBmb3IKTVZDQyBhbmQgcmVsYXRlZCBIT1Qgb3B0aW1pemF0aW9uLiAgSGVy ZSB3ZSBvcGVuIHRoYXQgZG9vciBhIGJpdCBzbwphcyB0byBlbmFibGUgbW9yZSBudWFuY2VkIGNv bnRyb2wgb3ZlciB0aGUgcHJvY2Vzcy4gIFRoaXMgZW5hYmxlcwppbmRleCBBTXMgdGhhdCByZXF1 aXJlIGJpbmFyeSBlcXVhbGl0eSAoYXMgaXMgdGhlIGNhc2UgZm9yIG5idHJlZSkKdG8gZG8gdGhh dCB3aXRob3V0IGRpc2FsbG93aW5nIHR5cGUtc3BlY2lmaWMgZXF1YWxpdHkgY2hlY2tpbmcgZm9y Cm90aGVyIGluZGV4ZXMuCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgc2V2ZXJhbCBpbXByb3ZlbWVu dHMgdG8gZW5hYmxlIEhPVCB1cGRhdGVzIGluCnRoZXNlIGNhc2VzOgoKQWRkIGFtY29tcGFyZWRh dHVtcygpIGNhbGxiYWNrIHRvIEluZGV4QW1Sb3V0aW5lLiBUaGlzIGFsbG93cyBpbmRleAphY2Nl c3MgbWV0aG9kcyBsaWtlIEdJTiB0byBwcm92aWRlIGN1c3RvbSBsb2dpYyBmb3IgY29tcGFyaW5n IGRhdHVtcyBieQpleHRyYWN0aW5nIGFuZCBjb21wYXJpbmcgaW5kZXgga2V5cyByYXRoZXIgdGhh biBjb21wYXJpbmcgdGhlIHJhdwpkYXR1bXMuIEdJTiBpbmRleGVzIG5vdyBpbXBsZW1lbnQgZ2lu Y29tcGFyZWRhdHVtcygpIHdoaWNoIGV4dHJhY3RzIGtleXMKZnJvbSBib3RoIGRhdHVtcyBhbmQg Y29tcGFyZXMgdGhlIHJlc3VsdGluZyBrZXkgc2V0cy4gIEFsc28sIGFzCm1lbnRpb25lZCBlYXJs aWVyIG5idHJlZSBpbXBsZW1lbnRzIHRoaXMgQVBJIGFuZCB1c2VzIGRhdHVtSXNFcXVhbCgpIGZv cgplcXVhbGl0eSBzbyB0aGF0IHRoZSBtYW5uZXIgaW4gd2hpY2ggaXQgZGVkdXBsaWNhdGVzIFRJ RHMgb24gcGFnZSBzcGxpdApkb2Vzbid0IGhhdmUgdG8gY2hhbmdlLiAgVGhpcyBpcyBub3QgYSBy ZXF1aXJlZCBBUEksIHdoZW4gbm90CmltcGxlbWVudGVkIHRoZSBleGVjdXRvciB3aWxsIGNvbXBh cmUgVHVwbGVUYWJsZVNsb3QgZGF0dW0gZm9yIGVxdWFsaXR5CnVzaW5nIHR5cGUtc3BlY2lmaWMg b3BlcmF0b3JzIGFuZCB0YWtlIGludG8gYWNjb3VudCBjb2xsYXRpb24gc28gdGhhdCBhbgp1cGRh dGUgZnJvbSAiQXBwbGUiIHRvICJBUFBMRSIgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGluZGV4IGNh biBub3cgYmUKSE9ULgoKRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgaXMgcmUtd3Jp dHRlbiB0byBmaW5kIHRoZSBzZXQgb2YKbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQg dHJpZ2dlciBuZXcgaW5kZXggdHVwbGVzIG9uIHVwZGF0ZWQuCkZvciBwYXJ0aWFsIGluZGV4ZXMs IHRoaXMgY2hlY2tzIHdoZXRoZXIgYm90aCBvbGQgYW5kIG5ldyB0dXBsZXMgc2F0aXNmeQpvciBm YWlsIHRoZSBwcmVkaWNhdGUuIEZvciBleHByZXNzaW9uIGluZGV4ZXMsIHRoaXMgdXNlcyB0eXBl LXNwZWNpZmljCmVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIGNvbXB1dGVkIHZhbHVlcy4g Rm9yIGV4dHJhY3Rpb24tYmFzZWQKaW5kZXhlcyAoR0lOL1JVTSkgdGhhdCBpbXBsZW1lbnQgYW1j b21wYXJlZGF0dW1zKCkgaXQgdXNlcyB0aGF0LgoKSW1wb3J0YW50bHksIHRhYmxlIGFjY2VzcyBt ZXRob2RzIGNhbiBzdGlsbCBzaWduYWwgdXNpbmcgVFVfVXBkYXRlIGlmCmFsbCwgbm9uZSwgb3Ig b25seSBzdW1tYXJpemluZyBpbmRleGVzIHNob3VsZCBiZSB1cGRhdGVkLiAgV2hpbGUgdGhlCmV4 ZWN1dG9yIGxheWVyIG5vdyBvd25zIGRldGVybWluaW5nIHdoYXQgaGFzIGNoYW5nZWQgZHVlIHRv IGFuIHVwZGF0ZQphbmQgaXMgaW50ZXJlc3RlZCBpbiBvbmx5IHVwZGF0aW5nIHRoZSBtaW5pbXVt IG51bWJlciBvZiBpbmRleGVzCnBvc3NpYmxlLCB0aGUgdGFibGUgQU0gY2FuIG92ZXJyaWRlIHRo YXQgd2hpbGUgcGVyZm9ybWluZwp0YWJsZV90dXBsZV91cGRhdGUoKSwgd2hpY2ggaXMgd2hhdCBo ZWFwIGRvZXMuICBXaGlsZSB0aGlzIHNpZ25hbCBpcwp2ZXJ5IHNwZWNpZmljIHRvIGhvdyB0aGUg aGVhcCBpbXBsZW1lbnRzIE1WQ0MgYW5kIGl0cyBIT1Qgb3B0aW1pemF0aW9uLAp3ZSdsbCBsZWF2 ZSByZXBsYWNpbmcgdGhhdCBmb3IgYW5vdGhlciBkYXkuCgpUaGlzIG9wdGltaXphdGlvbiB0cmFk ZXMgb2ZmIHNvbWUgbmV3IG92ZXJoZWFkIGZvciB0aGUgcG90ZW50aWFsIGZvcgptb3JlIHVwZGF0 ZXMgdG8gdXNlIHRoZSBIT1Qgb3B0aW1pemVkIHBhdGggYW5kIGF2b2lkIGluZGV4IGFuZCBoZWFw CmJsb2F0LiAgVGhpcyBzaG91bGQgc2lnbmlmaWNhbnRseSBpbXByb3ZlIHVwZGF0ZSBwZXJmb3Jt YW5jZSBmb3IgdGFibGVzCndpdGggZXhwcmVzc2lvbiBpbmRleGVzLCBwYXJ0aWFsIGluZGV4ZXMs IGFuZCBHSU4vR2lTVCBpbmRleGVzIG9uCmNvbXBsZXggZGF0YSB0eXBlcyBsaWtlIEpTT05CIGFu ZCB0c3ZlY3Rvciwgd2hpbGUgbWFpbnRhaW5pbmcgY29ycmVjdAppbmRleCBzZW1hbnRpY3MuICBN aW5pbWFsIGFkZGl0aW9uYWwgb3ZlcmhlYWQgZHVlIHRvIHR5cGUtc3BlY2lmaWMKZXF1YWxpdHkg Y2hlY2tpbmcgc2hvdWxkIGJlIHdhc2hlZCBvdXQgYnkgdGhlIGJlbmVmaXRzIG9mIHVwZGF0aW5n CmluZGV4ZXMgZmV3ZXIgdGltZXMuCgpPbmUgbm90YWJsZSB0cmFkZS1vZmYgaXMgdGhhdCB0aGVy ZSBhcmUgbW9yZSBjYWxscyB0byBGb3JtSW5kZXhEYXR1bSgpCmFzIGEgcmVzdWx0LiAgQ2FjaGlu ZyB0aGVzZSBtaWdodCByZWR1Y2Ugc29tZSBvZiB0aGF0IG92ZXJoZWFkLCBidXQgbm90CmFsbC4g IFRoaXMgbGVhZCB0byB0aGUgY2hhbmdlIGluIHRoZSBmcmVxdWVuY3kgZm9yIGV4cHJlc3Npb25z IGluIHRoZQpzcGVjIHVwZGF0ZSB0ZXN0IHRvIG91dHB1dCBub3RpY2UgbWVzc2FnZXMsIGJ1dCBk b2VzIG5vdCBpbXBhY3QKY29ycmVjdG5lc3MuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYyAgICAgICAgICAgICAgfCAgIDk0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYyAgICAgICAgICAgICAgfCAgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jICAgICAgfCAgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHJlZS5jICAgICAgICAgICAgfCAgIDM4ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90 YWJsZWFtLmMgICAgICAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290 c3RyYXAuYyAgICAgICAgICAgICB8ICAgIDggKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5j ICAgICAgICAgICAgICAgICAgIHwgICA1NyArCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4aW5n LmMgICAgICAgICAgICAgICAgfCAgIDE2ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5n LmMgICAgICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRl eGluZy5jICAgICAgICAgICB8ICAgNDUgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jICAgICAgICB8ICA0MzcgKysrKystLQogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMgICAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGku aCAgICAgICAgICAgICAgICAgICAgfCAgIDI4ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaCAg ICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5o ICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5o ICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o ICAgICAgICAgICAgICAgICAgfCAgICA4ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4Lmgg ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmggICAgICAgICAgICAgICB8ICAgMTIgKy0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o ICAgICAgICAgICAgICAgICB8ICAgMTkgKwogLi4uL2V4cGVjdGVkL2luc2VydC1jb25mbGljdC1z cGVjY29uZmxpY3Qub3V0IHwgICAyMCArCiAuLi4vZXhwZWN0ZWQvaG90X2V4cHJlc3Npb25faW5k ZXhlcy5vdXQgICAgICAgfCAxMDA2ICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICA2ICsKIC4uLi9yZWdyZXNzL3NxbC9o b3RfZXhwcmVzc2lvbl9pbmRleGVzLnNxbCAgICB8ICA3NDcgKysrKysrKysrKysrCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgICAxICsKIDI2IGZpbGVz IGNoYW5nZWQsIDI0NjAgaW5zZXJ0aW9ucygrKSwgMTI1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaG90X2V4cHJlc3Npb25faW5kZXhl cy5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9ob3RfZXhwcmVz c2lvbl9pbmRleGVzLnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2Jy aW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCBjYjMzMzE5MjFjYi4u MzZlNjM5NTUyZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBi cmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWJ1aWxkcGhhc2VuYW1lID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFt dmFsaWRhdGUgPSBicmludmFsaWRhdGU7CisJYW1yb3V0aW5lLT5hbWNvbXBhcmVkYXR1bXMgPSBO VUxMOwogCWFtcm91dGluZS0+YW1hZGp1c3RtZW1iZXJzID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFt YmVnaW5zY2FuID0gYnJpbmJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gYnJpbnJl c2NhbjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggNzhmN2I3YTI0OTUuLjg1ZTI1ZWQ3 M2U4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1 ZGUgInN0b3JhZ2UvaW5kZXhmc20uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2lu Y2x1ZGUgInV0aWxzL2luZGV4X3NlbGZ1bmNzLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgog CkBAIC03OCw2ICs3OSw3IEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRp bmUtPmFtcHJvcGVydHkgPSBOVUxMOwogCWFtcm91dGluZS0+YW1idWlsZHBoYXNlbmFtZSA9IGdp bmJ1aWxkcGhhc2VuYW1lOwogCWFtcm91dGluZS0+YW12YWxpZGF0ZSA9IGdpbnZhbGlkYXRlOwor CWFtcm91dGluZS0+YW1jb21wYXJlZGF0dW1zID0gZ2luY29tcGFyZWRhdHVtczsKIAlhbXJvdXRp bmUtPmFtYWRqdXN0bWVtYmVycyA9IGdpbmFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5hbWJl Z2luc2NhbiA9IGdpbmJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gZ2lucmVzY2Fu OwpAQCAtNDc3LDEzICs0NzksNiBAQCBjbXBFbnRyaWVzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZv aWQgKmIsIHZvaWQgKmFyZykKIAlyZXR1cm4gcmVzOwogfQogCi0KLS8qCi0gKiBFeHRyYWN0IHRo ZSBpbmRleCBrZXkgdmFsdWVzIGZyb20gYW4gaW5kZXhhYmxlIGl0ZW0KLSAqCi0gKiBUaGUgcmVz dWx0aW5nIGtleSB2YWx1ZXMgYXJlIHNvcnRlZCwgYW5kIGFueSBkdXBsaWNhdGVzIGFyZSByZW1v dmVkLgotICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyByZWR1bmRhbnQgaW5kZXggZW50cmllcy4K LSAqLwogRGF0dW0gKgogZ2luRXh0cmFjdEVudHJpZXMoR2luU3RhdGUgKmdpbnN0YXRlLCBPZmZz ZXROdW1iZXIgYXR0bnVtLAogCQkJCSAgRGF0dW0gdmFsdWUsIGJvb2wgaXNOdWxsLApAQCAtNzI5 LDMgKzcyNCw4OCBAQCBnaW5idWlsZHBoYXNlbmFtZShpbnQ2NCBwaGFzZW51bSkKIAkJCXJldHVy biBOVUxMOwogCX0KIH0KKworLyoKKyAqIGdpbmNvbXBhcmVkYXR1bXMgLSBDb21wYXJlIHR3byBk YXR1bXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgcHJvZHVjZSBpZGVudGljYWwga2V5cworICoKKyAq IFRoaXMgZnVuY3Rpb24gZXh0cmFjdHMga2V5cyBmcm9tIGJvdGggb2xkX2RhdHVtIGFuZCBuZXdf ZGF0dW0gdXNpbmcgdGhlCisgKiBvcGNsYXNzJ3MgZXh0cmFjdFZhbHVlIGZ1bmN0aW9uLCB0aGVu IGNvbXBhcmVzIHRoZSBleHRyYWN0ZWQga2V5IGFycmF5cy4KKyAqIFJldHVybnMgdHJ1ZSBpZiB0 aGUga2V5IHNldHMgYXJlIGlkZW50aWNhbCAoc2FtZSBrZXlzLCBzYW1lIGNvdW50cykuCisgKgor ICogVGhpcyBlbmFibGVzIEhPVCB1cGRhdGVzIGZvciBHSU4gaW5kZXhlcyB3aGVuIHRoZSBpbmRl eGVkIHBvcnRpb25zIG9mIGEKKyAqIHZhbHVlIGhhdmVuJ3QgY2hhbmdlZCwgZXZlbiBpZiB0aGUg dmFsdWUgaXRzZWxmIGhhcyBjaGFuZ2VkLgorICoKKyAqIEV4YW1wbGU6IEpTT05CIGNvbHVtbiB3 aXRoIEdJTiBpbmRleC4gSWYgYW4gdXBkYXRlIGNoYW5nZXMgYSBub24taW5kZXhlZAorICoga2V5 IGluIHRoZSBKU09OQiBkb2N1bWVudCwgdGhlIGV4dHJhY3RlZCBrZXlzIGFyZSBpZGVudGljYWwg YW5kIHdlIGNhbgorICogZG8gYSBIT1QgdXBkYXRlLgorICovCitib29sCitnaW5jb21wYXJlZGF0 dW1zKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bnVtLAorCQkJCSBEYXR1bSBvbGRfZGF0dW0sIGJv b2wgb2xkX2lzbnVsbCwKKwkJCQkgRGF0dW0gbmV3X2RhdHVtLCBib29sIG5ld19pc251bGwpCit7 CisJR2luU3RhdGUJZ2luc3RhdGU7CisJRGF0dW0JICAgKm9sZF9rZXlzOworCURhdHVtCSAgICpu ZXdfa2V5czsKKwlHaW5OdWxsQ2F0ZWdvcnkgKm9sZF9jYXRlZ29yaWVzOworCUdpbk51bGxDYXRl Z29yeSAqbmV3X2NhdGVnb3JpZXM7CisJaW50MzIJCW9sZF9ua2V5czsKKwlpbnQzMgkJbmV3X25r ZXlzOworCU1lbW9yeUNvbnRleHQgdG1wY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRl eHQ7CisJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKKworCS8qIEhhbmRsZSBOVUxMIGNhc2VzICovCisJ aWYgKG9sZF9pc251bGwgIT0gbmV3X2lzbnVsbCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChvbGRf aXNudWxsKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIENyZWF0ZSB0ZW1wb3JhcnkgY29udGV4dCBm b3IgZXh0cmFjdGlvbiB3b3JrICovCisJdG1wY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0 ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgICJHSU4gZGF0dW0gY29tcGFyaXNv biIsCisJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGNvbnRleHQpOworCisJaW5pdEdpblN0YXRlKCZnaW5z dGF0ZSwgaW5kZXgpOworCisJLyoKKwkgKiBFeHRyYWN0IGtleXMgZnJvbSBib3RoIGRhdHVtcyB1 c2luZyBleGlzdGluZyBHSU4gaW5mcmFzdHJ1Y3R1cmUuCisJICovCisJb2xkX2tleXMgPSBnaW5F eHRyYWN0RW50cmllcygmZ2luc3RhdGUsIGF0dG51bSwgb2xkX2RhdHVtLCBvbGRfaXNudWxsLAor CQkJCQkJCQkgJm9sZF9ua2V5cywgJm9sZF9jYXRlZ29yaWVzKTsKKwluZXdfa2V5cyA9IGdpbkV4 dHJhY3RFbnRyaWVzKCZnaW5zdGF0ZSwgYXR0bnVtLCBuZXdfZGF0dW0sIG5ld19pc251bGwsCisJ CQkJCQkJCSAmbmV3X25rZXlzLCAmbmV3X2NhdGVnb3JpZXMpOworCisJLyogRGlmZmVyZW50IG51 bWJlciBvZiBrZXlzIOKGkiBkZWZpbml0ZWx5IGRpZmZlcmVudCAqLworCWlmIChvbGRfbmtleXMg IT0gbmV3X25rZXlzKQorCXsKKwkJcmVzdWx0ID0gZmFsc2U7CisJCWdvdG8gY2xlYW51cDsKKwl9 CisKKwkvKgorCSAqIENvbXBhcmUgdGhlIHNvcnRlZCBrZXkgYXJyYXlzIGVsZW1lbnQtYnktZWxl bWVudC4gU2luY2UgYm90aCBhcnJheXMgYXJlCisJICogYWxyZWFkeSBzb3J0ZWQgYnkgZ2luRXh0 cmFjdEVudHJpZXMsIHdlIGNhbiBkbyBhIHNpbXBsZSBPKG4pCisJICogY29tcGFyaXNvbi4KKwkg Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IG9sZF9ua2V5czsgaSsrKQorCXsKKwkJaW50CQkJY21w ID0gZ2luQ29tcGFyZUVudHJpZXMoJmdpbnN0YXRlLCBhdHRudW0sCisJCQkJCQkJCQkJCW9sZF9r ZXlzW2ldLCBvbGRfY2F0ZWdvcmllc1tpXSwKKwkJCQkJCQkJCQkJbmV3X2tleXNbaV0sIG5ld19j YXRlZ29yaWVzW2ldKTsKKworCQlpZiAoY21wICE9IDApCisJCXsKKwkJCXJlc3VsdCA9IGZhbHNl OworCQkJYnJlYWs7CisJCX0KKwl9CisKK2NsZWFudXA6CisJLyogQ2xlYW4gdXAgKi8KKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBj b250ZXh0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmlu ZGV4IDFjZGI3MmIzYTdhLi41YjBmZjEzYjEzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMK QEAgLTMyNjgsNyArMzI2OCw3IEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFw VHVwbGVEYXRhICpvbGR0dXAsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCQlUTV9GYWlsdXJlRGF0YSAq dG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCiAJCQlCdWZmZXIgYnVmZmVyLCBQYWdlIHBh Z2UsIEJsb2NrTnVtYmVyIGJsb2NrLCBJdGVtSWQgbHAsCiAJCQlCaXRtYXBzZXQgKmhvdF9hdHRy cywgQml0bWFwc2V0ICpzdW1fYXR0cnMsIEJpdG1hcHNldCAqcGtfYXR0cnMsCi0JCQlCaXRtYXBz ZXQgKnJpZF9hdHRycywgQml0bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCisJ CQlCaXRtYXBzZXQgKnJpZF9hdHRycywgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZl ciAqdm1idWZmZXIsCiAJCQlib29sIHJlcF9pZF9rZXlfcmVxdWlyZWQsIFRVX1VwZGF0ZUluZGV4 ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCVRNX1Jlc3VsdAlyZXN1bHQ7CkBAIC00MzM3LDggKzQz MzcsOSBAQCBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRpb24sCiAgKiBU aGlzIHJvdXRpbmUgbWF5IGJlIHVzZWQgdG8gdXBkYXRlIGEgdHVwbGUgd2hlbiBjb25jdXJyZW50 IHVwZGF0ZXMgb2YgdGhlCiAgKiB0YXJnZXQgdHVwbGUgYXJlIG5vdCBleHBlY3RlZCAoZm9yIGV4 YW1wbGUsIGJlY2F1c2Ugd2UgaGF2ZSBhIGxvY2sgb24gdGhlCiAgKiByZWxhdGlvbiBhc3NvY2lh dGVkIHdpdGggdGhlIHR1cGxlKS4gIEFueSBmYWlsdXJlIGlzIHJlcG9ydGVkIHZpYSBlcmVwb3J0 KCkuCisgKiBSZXR1cm5zIHRoZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzLgog ICovCi12b2lkCitCaXRtYXBzZXQgKgogc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0 aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkg ICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKQEAgLTQ0NjcsNyArNDQ2OCw3 IEBAIHNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50 ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwCiAKIAkJZWxvZyhFUlJPUiwgInR1cGxlIGNvbmN1 cnJlbnRseSBkZWxldGVkIik7CiAKLQkJcmV0dXJuOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkv KgpAQCAtNDUwMCw3ICs0NTAxLDYgQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0 aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAKIAlibXNfZnJl ZShzdW1fYXR0cnMpOwogCWJtc19mcmVlKHBrX2F0dHJzKTsKIAlibXNfZnJlZShyaWRfYXR0cnMp OwotCWJtc19mcmVlKG1peF9hdHRycyk7CiAJYm1zX2ZyZWUoaWR4X2F0dHJzKTsKIAogCXN3aXRj aCAocmVzdWx0KQpAQCAtNDUyNiw2ICs0NTI2LDggQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAK IAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgaGVhcF91cGRhdGUgc3RhdHVzOiAldSIsIHJl c3VsdCk7CiAJCQlicmVhazsKIAl9CisKKwlyZXR1cm4gbWl4X2F0dHJzOwogfQogCiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGVmMDhlMWQzZTEwLi43NTI3 ODA5ZWMwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0z MTksNyArMzE5LDcgQEAgaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRl bVBvaW50ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCVNuYXBzaG90IGNyb3Nz Y2hlY2ssIGJvb2wgd2FpdCwKIAkJCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsCiAJCQkJCUxvY2tU dXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJCQlCaXRtYXBzZXQgKm1peF9hdHRycywKKwkJCQkJY29u c3QgQml0bWFwc2V0ICptaXhfYXR0cnMsCiAJCQkJCVRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9p bmRleGVzKQogewogCWJvb2wJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBmYWxzZTsKQEAgLTQwNywx MCArNDA3LDYgQEAgaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBv aW50ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAKIAlBc3NlcnQoSXRlbUlkSXNOb3Jt YWwobHApKTsKIAotCS8qCi0JICogUGFydGlhbGx5IGNvbnN0cnVjdCB0aGUgb2xkdHVwIGZvciBI ZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8gdG8gd29yayBhbmQKLQkgKiB0aGVuIHBhc3MgdGhhdCBv biB0byBoZWFwX3VwZGF0ZS4KLQkgKi8KIAlvbGR0dXAudF90YWJsZU9pZCA9IFJlbGF0aW9uR2V0 UmVsaWQocmVsYXRpb24pOwogCW9sZHR1cC50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdl R2V0SXRlbShwYWdlLCBscCk7CiAJb2xkdHVwLnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IGZkZmY5NjBjMTMwLi43M2NjMzIwODc1 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNTUsNiArMTU1LDcgQEAgYnRo YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXByb3BlcnR5ID0gYnRwcm9w ZXJ0eTsKIAlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBidGJ1aWxkcGhhc2VuYW1lOwog CWFtcm91dGluZS0+YW12YWxpZGF0ZSA9IGJ0dmFsaWRhdGU7CisJYW1yb3V0aW5lLT5hbWNvbXBh cmVkYXR1bXMgPSBidGNvbXBhcmVkYXR1bXM7CiAJYW1yb3V0aW5lLT5hbWFkanVzdG1lbWJlcnMg PSBidGFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2Fu OwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBidHJlc2NhbjsKQEAgLTE3OTUsMyArMTc5Niw0MCBA QCBidHRyYW5zbGF0ZWNtcHR5cGUoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5KQog CQkJcmV0dXJuIEludmFsaWRTdHJhdGVneTsKIAl9CiB9CisKKy8qCisgKiBidGNvbXBhcmVkYXR1 bXMgLSBDb21wYXJlIHR3byBkYXR1bXMgZm9yIGVxdWFsaXR5CisgKgorICogVGhpcyBmdW5jdGlv biBpcyBuZWNlc3NhcnkgYmVjYXVzZSBuYnRyZWUgcmVxdWlyZXMgdGhhdCBrZXlzIHRoYXQgYXJl IG5vdAorICogYmluYXJ5IGlkZW50aWNhbCBub3QgYmUgImVxdWFsIi4gIE90aGVyIGluZGV4ZXMg bWlnaHQgYWxsb3cgIkEiIGFuZCAiYSIgdG8KKyAqIGJlICJlcXVhbCIgd2hlbiBjb2xsYXRpb24g aXMgY2FzZSBpbnNlbnNhdGl2ZSwgYnV0IG5vdCBuYnRyZWUuICBXaHk/ICBXZWxsLAorICogbmJ0 cmVlIGRlZHVwbGljYXRlcyBUSURzIG9uIHBhZ2Ugc3BsaXQgYW5kIHRoZSB3YXkgaXQgYWNjb21w bGlzaCB0aGF0IGlzIGJ5CisgKiBkb2luZyBhIGJpbmFyeSBjb21wYXJpc29uIG9mIHRoZSBrZXlz LgorICovCisKK2Jvb2wKK2J0Y29tcGFyZWRhdHVtcyhSZWxhdGlvbiBpbmRleCwgaW50IGF0dHJu dW0sCisJCQkJRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9pc251bGwsCisJCQkJRGF0dW0gbmV3 X2RhdHVtLCBib29sIG5ld19pc251bGwpCit7CisJVHVwbGVEZXNjCWRlc2MgPSBSZWxhdGlvbkdl dERlc2NyKGluZGV4KTsKKwlDb21wYWN0QXR0cmlidXRlICphdHQ7CisKKwkvKgorCSAqIElmIG9u ZSB2YWx1ZSBpcyBOVUxMIGFuZCBvdGhlciBpcyBub3QsIHRoZW4gdGhleSBhcmUgY2VydGFpbmx5 IG5vdAorCSAqIGVxdWFsCisJICovCisJaWYgKG9sZF9pc251bGwgIT0gbmV3X2lzbnVsbCkKKwkJ cmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiBib3RoIGFyZSBOVUxMLCB0aGV5IGNhbiBiZSBj b25zaWRlcmVkIGVxdWFsLgorCSAqLworCWlmIChvbGRfaXNudWxsKQorCQlyZXR1cm4gdHJ1ZTsK KworCS8qIFdlIGRvIHNpbXBsZSBiaW5hcnkgY29tcGFyaXNvbiBvZiB0aGUgdHdvIGRhdHVtcyAq LworCUFzc2VydChhdHRybnVtIDw9IGRlc2MtPm5hdHRzKTsKKwlhdHQgPSBUdXBsZURlc2NDb21w YWN0QXR0cihkZXNjLCBhdHRybnVtIC0gMSk7CisJcmV0dXJuIGRhdHVtSXNFcXVhbChvbGRfZGF0 dW0sIG5ld19kYXR1bSwgYXR0LT5hdHRieXZhbCwgYXR0LT5hdHRsZW4pOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90YWJsZS90YWJsZWFtLmMKaW5kZXggZGFkY2YwM2VkMjQuLmVmNzczNmJmYTc2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkCiBzaW1wbGVf dGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJ CSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJ CQkJICBCaXRtYXBzZXQgKm1vZGlmaWVkX2luZGV4ZWRfY29scywKKwkJCQkJCSAgY29uc3QgQml0 bWFwc2V0ICptaXhfYXR0cnMsCiAJCQkJCQkgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRl eGVzKQogewogCVRNX1Jlc3VsdAlyZXN1bHQ7CkBAIC0zNDgsNyArMzQ4LDcgQEAgc2ltcGxlX3Rh YmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkJ CXNuYXBzaG90LCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29t bWl0ICovICwKIAkJCQkJCQkJJnRtZmQsICZsb2NrbW9kZSwKLQkJCQkJCQkJbW9kaWZpZWRfaW5k ZXhlZF9jb2xzLAorCQkJCQkJCQltaXhfYXR0cnMsCiAJCQkJCQkJCXVwZGF0ZV9pbmRleGVzKTsK IAogCXN3aXRjaCAocmVzdWx0KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jv b3RzdHJhcC5jIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCmluZGV4IGZjODYz OGMxYjYxLi4zMjljMTEwZDBiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jv b3RzdHJhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYwpAQCAtOTYx LDEwICs5NjEsMTggQEAgaW5kZXhfcmVnaXN0ZXIoT2lkIGhlYXAsCiAJbmV3aW5kLT5pbF9pbmZv LT5paV9FeHByZXNzaW9ucyA9CiAJCWNvcHlPYmplY3QoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9u cyk7CiAJbmV3aW5kLT5pbF9pbmZvLT5paV9FeHByZXNzaW9uc1N0YXRlID0gTklMOworCS8qIGV4 cHJlc3Npb24gYXR0cnMgd2lsbCBsaWtlbHkgYmUgbnVsbCwgYnV0IG1heSBhcyB3ZWxsIGNvcHkg aXQgKi8KKwluZXdpbmQtPmlsX2luZm8tPmlpX0V4cHJlc3Npb25zQXR0cnMgPQorCQljb3B5T2Jq ZWN0KGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNBdHRycyk7CiAJLyogcHJlZGljYXRlIHdpbGwg bGlrZWx5IGJlIG51bGwsIGJ1dCBtYXkgYXMgd2VsbCBjb3B5IGl0ICovCiAJbmV3aW5kLT5pbF9p bmZvLT5paV9QcmVkaWNhdGUgPQogCQljb3B5T2JqZWN0KGluZGV4SW5mby0+aWlfUHJlZGljYXRl KTsKIAluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKwkvKiBwcmVk aWNhdGUgYXR0cnMgd2lsbCBsaWtlbHkgYmUgbnVsbCwgYnV0IG1heSBhcyB3ZWxsIGNvcHkgaXQg Ki8KKwluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRpY2F0ZUF0dHJzID0KKwkJY29weU9iamVjdChp bmRleEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJzKTsKKwluZXdpbmQtPmlsX2luZm8tPmlpX0NoZWNr ZWRQcmVkaWNhdGUgPSBmYWxzZTsKKwluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRpY2F0ZVNhdGlz ZmllZCA9IGZhbHNlOwogCS8qIG5vIGV4Y2x1c2lvbiBjb25zdHJhaW50cyBhdCBib290c3RyYXAg dGltZSwgc28gbm8gbmVlZCB0byBjb3B5ICovCiAJQXNzZXJ0KGluZGV4SW5mby0+aWlfRXhjbHVz aW9uT3BzID09IE5VTEwpOwogCUFzc2VydChpbmRleEluZm8tPmlpX0V4Y2x1c2lvblByb2NzID09 IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDVkOWRiMTY3ZTU5Li4yOWI4Y2M0YmFkZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvaW5kZXguYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0u aCIKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNj YW4uaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJs ZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3RyYW5zYW0uaCIKQEAgLTU4LDYgKzU5LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy90 cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvb3B0aW1pemVyLmgiCkBAIC0yNDE0LDYgKzI0MTYsNjEgQEAgaW5kZXhfZHJvcChPaWQg aW5kZXhJZCwgYm9vbCBjb25jdXJyZW50LCBib29sIGNvbmN1cnJlbnRfbG9ja19tb2RlKQogICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICovCiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIEJ1aWxkVXBkYXRlSW5kZXhJ bmZvCisgKgorICogRm9yIGV4cHJlc3Npb24gaW5kZXhlcyB1cGRhdGVzIG1heSBub3QgY2hhbmdl IHRoZSBpbmRleGVkIHZhbHVlIGFsbG93aW5nCisgKiBmb3IgYSBIT1QgdXBkYXRlLiAgQWRkIGlu Zm9ybWF0aW9uIHRvIHRoZSBJbmRleEluZm8gdG8gYWxsb3cgZm9yIGNoZWNraW5nCisgKiBpZiB0 aGUgaW5kZXhlZCB2YWx1ZSBoYXMgY2hhbmdlZC4KKyAqCisgKiBEbyB0aGlzIHByb2Nlc3Npbmcg aGVyZSByYXRoZXIgdGhhbiBpbiBCdWlsZEluZGV4SW5mbygpIHRvIG5vdCBpbmN1ciB0aGUKKyAq IG92ZXJoZWFkIGluIHRoZSBjb21tb24gbm9uLWV4cHJlc3Npb24gY2FzZXMuCisgKiAtLS0tLS0t LS0tLS0tLS0tCisgKi8KK3ZvaWQKK0J1aWxkVXBkYXRlSW5kZXhJbmZvKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8pCit7CisJZm9yIChpbnQgaiA9IDA7IGogPCByZXN1bHRSZWxJbmZvLT5y aV9OdW1JbmRpY2VzOyBqKyspCisJeworCQlpbnQJCQlpOworCQlpbnQJCQlpbmRua2V5YXR0czsK KwkJQml0bWFwc2V0ICAqYXR0cnMgPSBOVUxMOworCQlJbmRleEluZm8gICppaSA9IHJlc3VsdFJl bEluZm8tPnJpX0luZGV4UmVsYXRpb25JbmZvW2pdOworCisJCS8qCisJCSAqIEV4cHJlc3Npb25z IGFyZSBub3QgYWxsb3dlZCBvbiBub24ta2V5IGF0dHJpYnV0ZXMsIHNvIHdlIGNhbiBza2lwCisJ CSAqIHRoZW0gYXMgdGhleSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgaW5kZXggSE9ULWJsb2NraW5n IGF0dHJpYnV0ZXMuCisJCSAqLworCQlpbmRua2V5YXR0cyA9IGlpLT5paV9OdW1JbmRleEtleUF0 dHJzOworCisJCS8qIENvbGxlY3Qga2V5IGF0dHJpYnV0ZXMgdXNlZCBieSB0aGUgaW5kZXggKi8K KwkJZm9yIChpID0gMDsgaSA8IGluZG5rZXlhdHRzOyBpKyspCisJCXsKKwkJCUF0dHJOdW1iZXIJ YXR0bnVtID0gaWktPmlpX0luZGV4QXR0ck51bWJlcnNbaV07CisKKwkJCWlmIChhdHRudW0gIT0g MCkKKwkJCQlhdHRycyA9IGJtc19hZGRfbWVtYmVyKGF0dHJzLCBhdHRudW0gLSBGaXJzdExvd0lu dmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJfQorCisJCS8qIENvbGxlY3QgYXR0cmlidXRl cyB1c2VkIGluIHRoZSBleHByZXNzaW9uICovCisJCWlmIChpaS0+aWlfRXhwcmVzc2lvbnMpCisJ CQlwdWxsX3ZhcmF0dG5vcygoTm9kZSAqKSBpaS0+aWlfRXhwcmVzc2lvbnMsCisJCQkJCQkgICBy ZXN1bHRSZWxJbmZvLT5yaV9SYW5nZVRhYmxlSW5kZXgsCisJCQkJCQkgICAmaWktPmlpX0V4cHJl c3Npb25zQXR0cnMpOworCisJCS8qIENvbGxlY3QgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBwcmVk aWNhdGUgKi8KKwkJaWYgKGlpLT5paV9QcmVkaWNhdGUpCisJCQlwdWxsX3ZhcmF0dG5vcygoTm9k ZSAqKSBpaS0+aWlfUHJlZGljYXRlLAorCQkJCQkJICAgcmVzdWx0UmVsSW5mby0+cmlfUmFuZ2VU YWJsZUluZGV4LAorCQkJCQkJICAgJmlpLT5paV9QcmVkaWNhdGVBdHRycyk7CisKKwkJaWktPmlp X0luZGV4ZWRBdHRycyA9IGJtc191bmlvbihhdHRycywgaWktPmlpX0V4cHJlc3Npb25zQXR0cnMp OworCisJCS8qIEFsbCBpbmRleGVzIHNob3VsZCBpbmRleCAqc29tZXRoaW5nKiEgKi8KKwkJQXNz ZXJ0KCFibXNfaXNfZW1wdHkoaWktPmlpX0luZGV4ZWRBdHRycykpOworCX0KK30KKwogLyogLS0t LS0tLS0tLS0tLS0tLQogICoJCUJ1aWxkSW5kZXhJbmZvCiAgKgkJCUNvbnN0cnVjdCBhbiBJbmRl eEluZm8gcmVjb3JkIGZvciBhbiBvcGVuIGluZGV4CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4aW5nLmMKaW5kZXgg MDA0YzUxMjEwMDAuLmEzNjFjMjE1NDkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9n L2luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleGluZy5jCkBAIC0xMDIs NyArMTAyLDcgQEAgQ2F0YWxvZ0luZGV4SW5zZXJ0KENhdGFsb2dJbmRleFN0YXRlIGluZHN0YXRl LCBIZWFwVHVwbGUgaGVhcFR1cGxlLAogCSAqIEdldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdGF0 ZSBzdHJ1Y3R1cmUuICBGYWxsIG91dCBpZiBub3RoaW5nIHRvIGRvLgogCSAqLwogCW51bUluZGV4 ZXMgPSBpbmRzdGF0ZS0+cmlfTnVtSW5kaWNlczsKLQlpZiAobnVtSW5kZXhlcyA9PSAwKQorCWlm IChudW1JbmRleGVzID09IDAgfHwgdXBkYXRlSW5kZXhlcyA9PSBUVV9Ob25lKQogCQlyZXR1cm47 CiAJcmVsYXRpb25EZXNjcyA9IGluZHN0YXRlLT5yaV9JbmRleFJlbGF0aW9uRGVzY3M7CiAJaW5k ZXhJbmZvQXJyYXkgPSBpbmRzdGF0ZS0+cmlfSW5kZXhSZWxhdGlvbkluZm87CkBAIC0zMTQsMTUg KzMxNCwxOCBAQCBDYXRhbG9nVHVwbGVVcGRhdGUoUmVsYXRpb24gaGVhcFJlbCwgY29uc3QgSXRl bVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwKQogewogCUNhdGFsb2dJbmRleFN0YXRl IGluZHN0YXRlOwogCVRVX1VwZGF0ZUluZGV4ZXMgdXBkYXRlSW5kZXhlcyA9IFRVX0FsbDsKKwlC aXRtYXBzZXQgICp1cGRhdGVkQXR0cnM7CiAKIAlDYXRhbG9nVHVwbGVDaGVja0NvbnN0cmFpbnRz KGhlYXBSZWwsIHR1cCk7CiAKIAlpbmRzdGF0ZSA9IENhdGFsb2dPcGVuSW5kZXhlcyhoZWFwUmVs KTsKIAotCXNpbXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVsLCBvdGlkLCB0dXAsICZ1cGRhdGVJbmRl eGVzKTsKLQorCXVwZGF0ZWRBdHRycyA9IHNpbXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVsLCBvdGlk LCB0dXAsICZ1cGRhdGVJbmRleGVzKTsKKwkoKFJlc3VsdFJlbEluZm8gKikgaW5kc3RhdGUpLT5y aV9DaGFuZ2VkSW5kZXhlZENvbHMgPSB1cGRhdGVkQXR0cnM7CiAJQ2F0YWxvZ0luZGV4SW5zZXJ0 KGluZHN0YXRlLCB0dXAsIHVwZGF0ZUluZGV4ZXMpOworCiAJQ2F0YWxvZ0Nsb3NlSW5kZXhlcyhp bmRzdGF0ZSk7CisJYm1zX2ZyZWUodXBkYXRlZEF0dHJzKTsKIH0KIAogLyoKQEAgLTMzOCwxMiAr MzQxLDE1IEBAIENhdGFsb2dUdXBsZVVwZGF0ZVdpdGhJbmZvKFJlbGF0aW9uIGhlYXBSZWwsIGNv bnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1CiAJCQkJCQkgICBDYXRhbG9nSW5kZXhT dGF0ZSBpbmRzdGF0ZSkKIHsKIAlUVV9VcGRhdGVJbmRleGVzIHVwZGF0ZUluZGV4ZXMgPSBUVV9B bGw7CisJQml0bWFwc2V0ICAqdXBkYXRlZEF0dHJzOwogCiAJQ2F0YWxvZ1R1cGxlQ2hlY2tDb25z dHJhaW50cyhoZWFwUmVsLCB0dXApOwogCi0Jc2ltcGxlX2hlYXBfdXBkYXRlKGhlYXBSZWwsIG90 aWQsIHR1cCwgJnVwZGF0ZUluZGV4ZXMpOwotCisJdXBkYXRlZEF0dHJzID0gc2ltcGxlX2hlYXBf dXBkYXRlKGhlYXBSZWwsIG90aWQsIHR1cCwgJnVwZGF0ZUluZGV4ZXMpOworCSgoUmVzdWx0UmVs SW5mbyAqKSBpbmRzdGF0ZSktPnJpX0NoYW5nZWRJbmRleGVkQ29scyA9IHVwZGF0ZWRBdHRyczsK IAlDYXRhbG9nSW5kZXhJbnNlcnQoaW5kc3RhdGUsIHR1cCwgdXBkYXRlSW5kZXhlcyk7CisJKChS ZXN1bHRSZWxJbmZvICopIGluZHN0YXRlKS0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gTlVMTDsK KwlibXNfZnJlZSh1cGRhdGVkQXR0cnMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy90b2FzdGluZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCmlu ZGV4IDVkODE5YmRhNTRhLi5jNjY1YWE3NDRiMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy90b2FzdGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwpAQCAt MjkyLDggKzI5MiwxMiBAQCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRpb24gcmVsLCBPaWQgdG9h c3RPaWQsIE9pZCB0b2FzdEluZGV4T2lkLAogCWluZGV4SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVy c1sxXSA9IDI7CiAJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyA9IE5JTDsKIAlpbmRleEluZm8t PmlpX0V4cHJlc3Npb25zU3RhdGUgPSBOSUw7CisJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9uc0F0 dHJzID0gTlVMTDsKIAlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZSA9IE5JTDsKIAlpbmRleEluZm8t PmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKwlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJz ID0gTlVMTDsKKwlpbmRleEluZm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUgPSBmYWxzZTsKKwlpbmRl eEluZm8tPmlpX1ByZWRpY2F0ZVNhdGlzZmllZCA9IGZhbHNlOwogCWluZGV4SW5mby0+aWlfRXhj bHVzaW9uT3BzID0gTlVMTDsKIAlpbmRleEluZm8tPmlpX0V4Y2x1c2lvblByb2NzID0gTlVMTDsK IAlpbmRleEluZm8tPmlpX0V4Y2x1c2lvblN0cmF0cyA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jCmluZGV4IGZiMWJjM2E0ODBkLi4yMDk2OGE4MTRkNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTEwOSwxMSArMTA5LDE1IEBACiAjaW5jbHVkZSAiYWNj ZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nl c3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKKyNpbmNsdWRlICJu b2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0 aWxzL211bHRpcmFuZ2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMuaCIKICNp bmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCkBAIC0zMTgsOCArMzIyLDggQEAgRXhlY0luc2VydElu ZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJUmVsYXRpb24JaGVhcFJl bGF0aW9uOwogCUluZGV4SW5mbyAqKmluZGV4SW5mb0FycmF5OwogCUV4cHJDb250ZXh0ICplY29u dGV4dDsKLQlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKLQlib29sCQlpc251bGxbSU5E RVhfTUFYX0tFWVNdOworCURhdHVtCQlsb2NfdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKKwlib29s CQlsb2NfaXNudWxsW0lOREVYX01BWF9LRVlTXTsKIAogCUFzc2VydChJdGVtUG9pbnRlcklzVmFs aWQodHVwbGVpZCkpOwogCkBAIC0zNDMsMTMgKzM0NywxMyBAQCBFeGVjSW5zZXJ0SW5kZXhUdXBs ZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkvKiBBcnJhbmdlIGZvciBlY29udGV4 dCdzIHNjYW4gdHVwbGUgdG8gYmUgdGhlIHR1cGxlIHVuZGVyIHRlc3QgKi8KIAllY29udGV4dC0+ ZWN4dF9zY2FudHVwbGUgPSBzbG90OwogCi0JLyoKLQkgKiBmb3IgZWFjaCBpbmRleCwgZm9ybSBh bmQgaW5zZXJ0IHRoZSBpbmRleCB0dXBsZQotCSAqLworCS8qIEluc2VydCBpbnRvIGVhY2ggaW5k ZXggdGhhdCBuZWVkcyB1cGRhdGluZyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1JbmRpY2VzOyBp KyspCiAJewogCQlSZWxhdGlvbglpbmRleFJlbGF0aW9uID0gcmVsYXRpb25EZXNjc1tpXTsKIAkJ SW5kZXhJbmZvICAqaW5kZXhJbmZvOworCQlEYXR1bQkgICAqdmFsdWVzOworCQlib29sCSAgICpp c251bGw7CiAJCWJvb2wJCWFwcGx5Tm9EdXBFcnI7CiAJCUluZGV4VW5pcXVlQ2hlY2sgY2hlY2tV bmlxdWU7CiAJCWJvb2wJCWluZGV4VW5jaGFuZ2VkOwpAQCAtMzY2LDcgKzM3MCw3IEBAIEV4ZWNJ bnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCiAJCS8qCiAJ CSAqIFNraXAgcHJvY2Vzc2luZyBvZiBub24tc3VtbWFyaXppbmcgaW5kZXhlcyBpZiB3ZSBvbmx5 IHVwZGF0ZQotCQkgKiBzdW1tYXJpemluZyBpbmRleGVzCisJCSAqIHN1bW1hcml6aW5nIGluZGV4 ZXMgb3IgaWYgdGhpcyBpbmRleCBpcyB1bmNoYW5nZWQuCiAJCSAqLwogCQlpZiAob25seVN1bW1h cml6aW5nICYmICFpbmRleEluZm8tPmlpX1N1bW1hcml6aW5nKQogCQkJY29udGludWU7CkBAIC0z ODcsOCArMzkxLDE1IEBAIEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvLAogCQkJCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBwcmVkaWNhdGU7 CiAJCQl9CiAKKwkJCS8qIENoZWNrIHRoZSBpbmRleCBwcmVkaWNhdGUgaWYgd2UgaGF2ZW4ndCBk b25lIHNvIGVhcmxpZXIgb24gKi8KKwkJCWlmICghaW5kZXhJbmZvLT5paV9DaGVja2VkUHJlZGlj YXRlKQorCQkJeworCQkJCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU2F0aXNmaWVkID0gRXhlY1F1 YWwocHJlZGljYXRlLCBlY29udGV4dCk7CisJCQkJaW5kZXhJbmZvLT5paV9DaGVja2VkUHJlZGlj YXRlID0gdHJ1ZTsKKwkJCX0KKwogCQkJLyogU2tpcCB0aGlzIGluZGV4LXVwZGF0ZSBpZiB0aGUg cHJlZGljYXRlIGlzbid0IHNhdGlzZmllZCAqLwotCQkJaWYgKCFFeGVjUXVhbChwcmVkaWNhdGUs IGVjb250ZXh0KSkKKwkJCWlmICghaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTYXRpc2ZpZWQpCiAJ CQkJY29udGludWU7CiAJCX0KIApAQCAtMzk2LDExICs0MDcsMTAgQEAgRXhlY0luc2VydEluZGV4 VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCSAqIEZvcm1JbmRleERhdHVt IGZpbGxzIGluIGl0cyB2YWx1ZXMgYW5kIGlzbnVsbCBwYXJhbWV0ZXJzIHdpdGggdGhlCiAJCSAq IGFwcHJvcHJpYXRlIHZhbHVlcyBmb3IgdGhlIGNvbHVtbihzKSBvZiB0aGUgaW5kZXguCiAJCSAq LwotCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sCi0JCQkJCSAgIHNsb3QsCi0JCQkJCSAgIGVz dGF0ZSwKLQkJCQkJICAgdmFsdWVzLAotCQkJCQkgICBpc251bGwpOworCQlGb3JtSW5kZXhEYXR1 bShpbmRleEluZm8sIHNsb3QsIGVzdGF0ZSwgbG9jX3ZhbHVlcywgbG9jX2lzbnVsbCk7CisKKwkJ dmFsdWVzID0gbG9jX3ZhbHVlczsKKwkJaXNudWxsID0gbG9jX2lzbnVsbDsKIAogCQkvKiBDaGVj ayB3aGV0aGVyIHRvIGFwcGx5IG5vRHVwRXJyIHRvIHRoaXMgaW5kZXggKi8KIAkJYXBwbHlOb0R1 cEVyciA9IG5vRHVwRXJyICYmCkBAIC00MzUsNyArNDQ1LDkgQEAgRXhlY0luc2VydEluZGV4VHVw bGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCSAqIGluZGV4LiAgSWYgd2UncmUg YmVpbmcgY2FsbGVkIGFzIHBhcnQgb2YgYW4gVVBEQVRFIHN0YXRlbWVudCwKIAkJICogY29uc2lk ZXIgaWYgdGhlICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQgc2hvdWxkIGJlIHBhc3NlZC4K IAkJICovCi0JCWluZGV4VW5jaGFuZ2VkID0gdXBkYXRlICYmIGJtc19pc19lbXB0eShyZXN1bHRS ZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOworCQlpbmRleFVuY2hhbmdlZCA9IHVwZGF0 ZSAmJgorCQkJIWJtc19vdmVybGFwKGluZGV4SW5mby0+aWlfSW5kZXhlZEF0dHJzLAorCQkJCQkJ IHJlc3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scyk7CiAKIAkJc2F0aXNmaWVzQ29u c3RyYWludCA9CiAJCQlpbmRleF9pbnNlcnQoaW5kZXhSZWxhdGlvbiwgLyogaW5kZXggcmVsYXRp b24gKi8KQEAgLTYwNCw3ICs2MTYsMTIgQEAgRXhlY0NoZWNrSW5kZXhDb25zdHJhaW50cyhSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJY2hlY2tl ZEluZGV4ID0gdHJ1ZTsKIAogCQkvKiBDaGVjayBmb3IgcGFydGlhbCBpbmRleCAqLwotCQlpZiAo aW5kZXhJbmZvLT5paV9QcmVkaWNhdGUgIT0gTklMKQorCQlpZiAoaW5kZXhJbmZvLT5paV9DaGVj a2VkUHJlZGljYXRlICYmICFpbmRleEluZm8tPmlpX1ByZWRpY2F0ZVNhdGlzZmllZCkKKwkJewor CQkJLyogV2UndmUgYWxyZWFkeSBjaGVja2VkIGFuZCB0aGUgcHJlZGljYXRlIHdhc24ndCBzYXRp c2ZpZWQuICovCisJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChpbmRleEluZm8tPmlpX1By ZWRpY2F0ZSAhPSBOSUwpCiAJCXsKIAkJCUV4cHJTdGF0ZSAgKnByZWRpY2F0ZTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCAzNGY4NjU0NmZjOS4uZTRiMmNkNWEz ZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC01NCwxMCArNTQs MTMgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0 YWlscy5oIgorI2luY2x1ZGUgImFjY2Vzcy9hdHRudW0uaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lz YXR0ci5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R1 cGNvbnZlcnQuaCIKICNpbmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgogI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3RyaWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVk ZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKQEAgLTc1LDYgKzc4LDcgQEAKICNpbmNsdWRlICJ1dGls cy9mbG9hdC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxz L3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25h cG1nci5oIgogCiAKQEAgLTI0NSw2ICsyNDksMTAgQEAgdHRzX2F0dHJfZXF1YWwoT2lkIHR5cGlk LCBPaWQgY29sbGF0aW9uLCBib29sIHR5cGJ5dmFsLCBpbnQxNiB0eXBsZW4sCiAJdHlwZW50cnkg PSBsb29rdXBfdHlwZV9jYWNoZSh0eXBpZCwKIAkJCQkJCQkJIFRZUEVDQUNIRV9FUV9PUFIgfCBU WVBFQ0FDSEVfRVFfT1BSX0ZJTkZPKTsKIAorCS8qIFVzZSB0aGUgdHlwZSdzIGNvbGxhdGlvbiBp ZiBub25lIHByb3ZpZGVkICovCisJaWYgKGNvbGxhdGlvbiA9PSAtMSkKKwkJY29sbGF0aW9uID0g dHlwZW50cnktPnR5cGNvbGxhdGlvbjsKKwogCS8qCiAJICogSWYgbm8gZXF1YWxpdHkgb3BlcmF0 b3IgaXMgYXZhaWxhYmxlLCBmYWxsIGJhY2sgdG8gYmluYXJ5IGNvbXBhcmlzb24uCiAJICogVGhp cyBoYW5kbGVzIHR5cGVzIHRoYXQgZG9uJ3QgaGF2ZSBwcm9wZXIgZXF1YWxpdHkgb3BlcmF0b3Jz IGRlZmluZWQuCkBAIC0yOTEsMTA4ICsyOTksMzU2IEBAIHR0c19hdHRyX2VxdWFsKE9pZCB0eXBp ZCwgT2lkIGNvbGxhdGlvbiwgYm9vbCB0eXBieXZhbCwgaW50MTYgdHlwbGVuLAogfQogCiAvKgot ICogRGV0ZXJtaW5lIHdoaWNoIHVwZGF0ZWQgYXR0cmlidXRlcyBhY3R1YWxseSBjaGFuZ2VkIHZh bHVlcyBiZXR3ZWVuIG9sZCBhbmQKLSAqIG5ldyB0dXBsZXMgYW5kIGFyZSByZWZlcmVuY2VkIGJ5 IGluZGV4ZXMgb24gdGhlIHJlbGF0aW9uLgorICogRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hh bmdlcworICoKKyAqIERldGVybWluZSB3aGljaCBpbmRleGVzIG5lZWQgdXBkYXRpbmcgYnkgZmlu ZGluZyB0aGUgc2V0IG9mIG1vZGlmaWVkCisgKiBpbmRleGVkIGF0dHJpYnV0ZXMuCisgKgorICog Rm9yIGV4cHJlc3Npb24gaW5kZXhlcyBhbmQgaW5kZXhlcyB3aGljaCBpbXBsZW1lbnQgdGhlIGFt Y29tcGFyZWRhdHVtcygpCisgKiBpbmRleCBBTSBBUEkgd2UnbGwgbmVlZCB0byBmb3JtIGluZGV4 IGRhdHVtIGFuZCBjb21wYXJlIGVhY2ggYXR0cmlidXRlIHRvCisgKiBzZWUgaWYgYW55IGFjdHVh bGx5IGNoYW5nZWQuCisgKgorICogRm9yIGV4cHJlc3Npb24gaW5kZXhlcyB0aGUgcmVzdWx0IG9m IHRoZSBleHByZXNzaW9uIG1pZ2h0IG5vdCBjaGFuZ2UgYXQgYWxsLAorICogdGhpcyBpcyBjb21t b24gd2l0aCBKU09OQiBjb2x1bW5zIHdoaWNoIHJlcXVpcmUgZXhwcmVzc2lvbiBpbmRleGVzIGFu ZCB3aGVyZQorICogaXQgaXMgY29tbW9ucGxhY2UgdG8gaW5kZXggYSBmaWVsZCB3aXRoaW4gYSBk b2N1bWVudCBhbmQgaGF2ZSB1cGRhdGVzIHRoYXQKKyAqIGdlbmVyYWxseSBkb24ndCB1cGRhdGUg dGhhdCBmaWVsZC4KKyAqCisgKiBQYXJ0aWFsIGluZGV4ZXMgd29uJ3QgdHJpZ2dlciBpbmRleCB0 dXBsZXMgd2hlbiB0aGUgb2xkL25ldyB0dXBsZXMgYXJlIGJvdGgKKyAqIG91dHNpZGUgb2YgdGhl IHByZWRpY2F0ZSByYW5nZS4KKyAqCisgKiBBbGwgb3RoZXIgaW5kZXhlcyByZXF1aXJlIHRlc3Rp bmcgb2xkL25ldyBkYXR1bSBmb3IgZXF1YWxpdHkuICBXZSBkbyB0aGlzCisgKiBieSBjYWxsaW5n IHRoZSB0eXBlLXNwZWNpZmljIGVxdWFsaXR5IG9wZXJhdG9yIHdoZW4gcG9zc2libGUsIG90aGVy d2lzZSB3ZQorICogZmFsbCBiYWNrIHRvIGJpbmFyeSBlcXVhbGl0eSB3aXRoIGRhdHVtSXNFcXVh bCgpLgorICoKKyAqIEZvciBuYnRyZWUgdGhlIGFtY29tcGFyZWRhdHVtcygpIEFQSSBpcyBjcml0 aWNhbCBhcyBpdCByZXF1aXJlcyB0aGF0IGtleQorICogYXR0cmlidXRlcyBhcmUgZXF1YWwgd2hl biB0aGV5IG1lbWNtcCgpLCB3aGljaCBtaWdodCBub3QgYmUgdGhlIGNhc2Ugd2hlbgorICogdXNp bmcgdHlwZS1zcGVjaWZpYyBjb21wYXJpc29uIG9yIGZhY3RvcmluZyBpbiBjb2xsYXRpb24gd2hp Y2ggbWlnaHQgbWFrZQorICogYW4gaW5kZXggY2FzZSBpbnNlbnNpdGl2ZS4KICAqCi0gKiBSZXR1 cm5zIGEgQml0bWFwc2V0IG9mIGF0dHJpYnV0ZSBvZmZzZXRzICgwLWJhc2VkLCBhZGp1c3RlZCBi eQotICogRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcikgb3IgTlVMTCBpZiBubyBh dHRyaWJ1dGVzIGNoYW5nZWQuCisgKiBBbGwgb2YgdGhpcyBpcyB0byBzYXkgdGhhdCB0aGUgZ29h bCBpcyBmb3IgdGhlIGV4ZWN1dG9yIHRvIGtub3csIGFoZWFkIG9mCisgKiBjYWxsaW5nIGludG8g dGhlIHRhYmxlIEFNIHRvIHByb2Nlc3MgdGhlIHVwZGF0ZSBhbmQgYmVmb3JlIGNhbGxpbmcgaW50 byB0aGUKKyAqIGluZGV4IEFNIGZvciBpbnNlcnRpbmcgbmV3IGluZGV4IHR1cGxlcywgd2hpY2gg YXR0cmlidXRlcyB0cnVlbHkgbmVjZXNzaXRhdGUKKyAqIGEgbmV3IGluZGV4IHR1cGxlLgorICoK KyAqIFJldHVybnMgYSByZWZpbmVkIEJpdG1hcHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgZm9yY2Ug aW5kZXggdXBkYXRlcy4KICAqLwogQml0bWFwc2V0ICoKIEV4ZWNDaGVja0luZGV4ZWRBdHRyc0Zv ckNoYW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKLQkJCQkJCQkJVHVwbGVUYWJsZVNsb3Qg KnR0c19vbGQsCi0JCQkJCQkJCVR1cGxlVGFibGVTbG90ICp0dHNfbmV3KQorCQkJCQkJCQlFU3Rh dGUgKmVzdGF0ZSwKKwkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJCVR1 cGxlVGFibGVTbG90ICpuZXdfdHRzKQogewogCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsaW5mby0+ cmlfUmVsYXRpb25EZXNjOwogCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWxhdGlvbik7Ci0JQml0bWFwc2V0ICAqaW5kZXhlZF9hdHRyczsKLQlCaXRtYXBzZXQgICptb2Rp ZmllZCA9IE5VTEw7Ci0JaW50CQkJYXR0aWR4OworCUJpdG1hcHNldCAgKm1peF9hdHRycyA9IE5V TEw7CiAKIAkvKiBJZiBubyBpbmRleGVzLCB3ZSdyZSBkb25lICovCiAJaWYgKHJlbGluZm8tPnJp X051bUluZGljZXMgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgotCSAqIEdldCB0aGUgc2V0 IG9mIGluZGV4IGtleSBhdHRyaWJ1dGVzLiAgVGhpcyBpbmNsdWRlcyBzdW1tYXJpemluZywKLQkg KiBleHByZXNzaW9uIGluZGV4ZXMgYW5kIGF0dHJpYnV0ZXMgbWVudGlvbmVkIGluIHRoZSBwcmVk aWNhdGUgb2YgYQotCSAqIHBhcnRpdGlvbiBidXQgbm90IHRob3NlIGluIElOQ0xVRElORy4KKwkg KiBOT1RFOiBFeHByZXNzaW9uIGFuZCBwcmVkaWNhdGVzIHRoYXQgYXJlIG9ic2VydmVkIHRvIGNo YW5nZSB3aWxsIGhhdmUKKwkgKiBhbGwgdGhlaXIgYXR0cmlidXRlcyBhZGRlZCBpbnRvIHRoZSBt X2F0dHJzIHNldCBrbm93aW5nIHRoYXQgc29tZSBvZgorCSAqIHRob3NlIG1pZ2h0IG5vdCBoYXZl IGNoYW5nZWQuICBUYWtlIGZvciBpbnN0YW5jZSBhbiBpbmRleCBvbiAoYSArIGIpCisJICogZm9s bG93ZWQgYnkgYW4gaW5kZXggb24gKGIpIHdpdGggYW4gdXBkYXRlIHRoYXQgY2hhbmdlcyBvbmx5 IHRoZSB2YWx1ZQorCSAqIG9mICdhJy4gIFdlJ2xsIGFkZCBib3RoICdhJyBhbmQgJ2InIHRvIHRo ZSBtX2F0dHJzIHNldCB0aGVuIGxhdGVyIHdoZW4KKwkgKiByZXZpZXdpbmcgdGhlIHNlY29uZCBp bmRleCBhZGQgJ2InIHRvIHRoZSB1X2F0dHJzICh1bmNoYW5nZWQpIHNldC4gIEluCisJICogdGhl IGVuZCwgd2UnbGwgcmVtb3ZlIGFsbCB0aGUgdW5jaGFuZ2VkIGZyb20gdGhlIG1fYXR0cnMgYW5k IGdldCBvdXIKKwkgKiBkZXNpcmVkIHJlc3VsdC4KIAkgKi8KLQlpbmRleGVkX2F0dHJzID0gUmVs YXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCi0JCQkJCQkJCQkJCSAgIElOREVYX0FU VFJfQklUTUFQX0lOREVYRUQpOwotCUFzc2VydCghYm1zX2lzX2VtcHR5KGluZGV4ZWRfYXR0cnMp KTsKIAotCS8qCi0JICogTk9URTogSXQgaXMgaW1wb3J0YW50IHRvIHNjYW4gYWxsIGluZGV4ZWQg YXR0cmlidXRlcyBpbiB0aGUgdHVwbGVzCi0JICogYmVjYXVzZSBFeGVjR2V0QWxsVXBkYXRlZENv bHMgd29uJ3QgaW5jbHVkZSBjb2x1bW5zIHRoYXQgbWF5IGhhdmUgYmVlbgotCSAqIG1vZGlmaWVk IHZpYSBoZWFwX21vZGlmeV90dXBsZV9ieV9jb2wgd2hpY2ggaXMgdGhlIGNhc2UgaW4KLQkgKiB0 c3ZlY3Rvcl91cGRhdGVfdHJpZ2dlci4KLQkgKi8KLQlhdHRpZHggPSAtMTsKLQl3aGlsZSAoKGF0 dGlkeCA9IGJtc19uZXh0X21lbWJlcihpbmRleGVkX2F0dHJzLCBhdHRpZHgpKSA+PSAwKQorCS8q IEZpbmQgdGhlIGluZGV4ZXMgdGhhdCByZWZlcmVuY2UgdGhpcyBhdHRyaWJ1dGUgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IHJlbGluZm8tPnJpX051bUluZGljZXM7IGkrKykKIAl7Ci0JCS8qIGF0 dGlkeCBpcyB6ZXJvLWJhc2VkLCBhdHRybnVtIGlzIHRoZSBub3JtYWwgYXR0cmlidXRlIG51bWJl ciAqLwotCQlBdHRyTnVtYmVyCWF0dHJudW0gPSBhdHRpZHggKyBGaXJzdExvd0ludmFsaWRIZWFw QXR0cmlidXRlTnVtYmVyOwotCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyOwotCQlib29sCQlvbGRu dWxsLAotCQkJCQluZXdudWxsOwotCQlEYXR1bQkJb2xkdmFsLAotCQkJCQluZXd2YWw7CisJCVJl bGF0aW9uCWluZGV4UmVsID0gcmVsaW5mby0+cmlfSW5kZXhSZWxhdGlvbkRlc2NzW2ldOworCQlJ bmRleEFtUm91dGluZSAqYW1yb3V0aW5lID0gaW5kZXhSZWwtPnJkX2luZGFtOworCQlJbmRleElu Zm8gICppbmRleEluZm8gPSByZWxpbmZvLT5yaV9JbmRleFJlbGF0aW9uSW5mb1tpXTsKKwkJQml0 bWFwc2V0ICAqbV9hdHRycyA9IE5VTEw7IC8qIChwb3NzaWJseSkgbW9kaWZpZWQga2V5IGF0dHJp YnV0ZXMgKi8KKwkJQml0bWFwc2V0ICAqcF9hdHRycyA9IE5VTEw7IC8qIChwb3NzaWJseSkgbW9k aWZpZWQgcHJlZGljYXRlIGF0dHJpYnV0ZXMgKi8KKwkJQml0bWFwc2V0ICAqdV9hdHRycyA9IE5V TEw7IC8qIHVubW9kaWZpZWQgYXR0cmlidXRlcyAqLworCQlCaXRtYXBzZXQgICpwcmVfYXR0cnMg PSBpbmRleEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJzOworCQlib29sCQloYXNfZXhwcmVzc2lvbnMg PSAoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyAhPSBOSUwpOworCQlib29sCQloYXNfYW1fY29t cGFyZSA9IChhbXJvdXRpbmUtPmFtY29tcGFyZWRhdHVtcyAhPSBOVUxMKTsKKwkJYm9vbAkJaXNf cGFydGlhbCA9IChpbmRleEluZm8tPmlpX1ByZWRpY2F0ZSAhPSBOSUwpOworCQlUdXBsZVRhYmxl U2xvdCAqc2F2ZV9zY2FudHVwbGU7CisJCUV4cHJDb250ZXh0ICplY29udGV4dCA9IEdldFBlclR1 cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKKwkJRGF0dW0JCW9sZF92YWx1ZXNbSU5ERVhfTUFYX0tF WVNdOworCQlib29sCQlvbGRfaXNudWxsW0lOREVYX01BWF9LRVlTXTsKKwkJRGF0dW0JCW5ld192 YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOworCQlib29sCQluZXdfaXNudWxsW0lOREVYX01BWF9LRVlT XTsKKworCQkvKiBJZiB3ZSd2ZSByZXZpZXdlZCBhbGwgdGhlIGF0dHJpYnV0ZXMgb24gdGhpcyBp bmRleCwgbW92ZSBvbiAqLworCQlpZiAoYm1zX2lzX3N1YnNldChpbmRleEluZm8tPmlpX0luZGV4 ZWRBdHRycywgbWl4X2F0dHJzKSkKKwkJCWNvbnRpbnVlOwogCi0JCS8qCi0JCSAqIElmIGl0J3Mg YSB3aG9sZS10dXBsZSByZWZlcmVuY2UsIHJlY29yZCBhcyBtb2RpZmllZC4gIEl0J3Mgbm90Ci0J CSAqIHJlYWxseSB3b3J0aCBzdXBwb3J0aW5nIHRoaXMgY2FzZSwgc2luY2UgaXQgY291bGQgb25s eSBzdWNjZWVkCi0JCSAqIGFmdGVyIGEgbm8tb3AgdXBkYXRlLCB3aGljaCBpcyBoYXJkbHkgYSBj YXNlIHdvcnRoIG9wdGltaXppbmcgZm9yLgotCQkgKi8KLQkJaWYgKGF0dHJudW0gPT0gMCkKKwkJ LyogQ2hlY2tpbmcgcGFydGlhbCBhdCB0aGlzIHBvaW50IGlzbid0IHZpYWJsZSB3aGVuIHdlJ3Jl IHNlcmlhbGl6YWJsZSAqLworCQlpZiAoaXNfcGFydGlhbCAmJiBJc29sYXRpb25Jc1NlcmlhbGl6 YWJsZSgpKQogCQl7Ci0JCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRp ZHgpOwotCQkJY29udGludWU7CisJCQlwX2F0dHJzID0gYm1zX2NvcHkocHJlX2F0dHJzKTsKKwkJ fQorCQkvKiBDaGVjayBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSAqLworCQllbHNlIGlmIChpc19w YXJ0aWFsKQorCQl7CisJCQlFeHByU3RhdGUgICpwc3RhdGU7CisJCQlib29sCQlvbGRfcXVhbGlm aWVzLAorCQkJCQkJbmV3X3F1YWxpZmllczsKKworCQkJaWYgKCFpbmRleEluZm8tPmlpX0NoZWNr ZWRQcmVkaWNhdGUpCisJCQkJcHN0YXRlID0gRXhlY1ByZXBhcmVRdWFsKGluZGV4SW5mby0+aWlf UHJlZGljYXRlLCBlc3RhdGUpOworCQkJZWxzZQorCQkJCXBzdGF0ZSA9IGluZGV4SW5mby0+aWlf UHJlZGljYXRlU3RhdGU7CisKKwkJCXNhdmVfc2NhbnR1cGxlID0gZWNvbnRleHQtPmVjeHRfc2Nh bnR1cGxlOworCisJCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBvbGRfdHRzOworCQkJb2xk X3F1YWxpZmllcyA9IEV4ZWNRdWFsKHBzdGF0ZSwgZWNvbnRleHQpOworCisJCQllY29udGV4dC0+ ZWN4dF9zY2FudHVwbGUgPSBuZXdfdHRzOworCQkJbmV3X3F1YWxpZmllcyA9IEV4ZWNRdWFsKHBz dGF0ZSwgZWNvbnRleHQpOworCisJCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzYXZlX3Nj YW50dXBsZTsKKworCQkJaW5kZXhJbmZvLT5paV9DaGVja2VkUHJlZGljYXRlID0gdHJ1ZTsKKwkJ CWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBwc3RhdGU7CisJCQlpbmRleEluZm8tPmlp X1ByZWRpY2F0ZVNhdGlzZmllZCA9IG5ld19xdWFsaWZpZXM7CisKKwkJCS8qIEJvdGggb3V0c2lk ZSBwcmVkaWNhdGUsIGluZGV4IGRvZXNuJ3QgbmVlZCB1cGRhdGUgKi8KKwkJCWlmICghb2xkX3F1 YWxpZmllcyAmJiAhbmV3X3F1YWxpZmllcykKKwkJCQljb250aW51ZTsKKworCQkJLyogQSB0cmFu c2l0aW9uIG1lYW5zIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBpbmRleCAqLworCQkJaWYgKG9sZF9x dWFsaWZpZXMgIT0gbmV3X3F1YWxpZmllcykKKwkJCQlwX2F0dHJzID0gYm1zX2NvcHkocHJlX2F0 dHJzKTsKKworCQkJLyoKKwkJCSAqIFdoZW4gYm90aCBhcmUgd2l0aGluIHRoZSBwcmVkaWNhdGUg d2UgbXVzdCB1cGRhdGUgdGhpcyBpbmRleCwKKwkJCSAqIGJ1dCBvbmx5IGlmIG9uZSBvZiB0aGUg aW5kZXgga2V5IGF0dHJpYnV0ZXMgY2hhbmdlZC4KKwkJCSAqLwogCQl9CiAKIAkJLyoKLQkJICog TGlrZXdpc2UsIGluY2x1ZGUgaW4gdGhlIG1vZGlmaWVkIHNldCBhbnkgc3lzdGVtIGF0dHJpYnV0 ZSBvdGhlcgotCQkgKiB0aGFuIHRhYmxlT0lEOyB3ZSBjYW5ub3QgZXhwZWN0IHRoZXNlIHRvIGJl IGNvbnNpc3RlbnQgaW4gYSBIT1QKLQkJICogY2hhaW4sIG9yIGV2ZW4gdG8gYmUgc2V0IGNvcnJl Y3RseSB5ZXQgaW4gdGhlIG5ldyB0dXBsZS4KKwkJICogRXhwcmVzc2lvbiBpbmRleGVzIG9yIGV4 dHJhY3Rpb24tYmFzZWQgaW5kZXggcmVxdWlyZSB1cyB0byBmb3JtCisJCSAqIGluZGV4IGRhdHVt cyBhbmQgY29tcGFyZS4gIFdlJ3ZlIGRvbmUgYWxsIHdlIGNhbiB0byBhdm9pZCB0aGlzCisJCSAq IG92ZXJoZWFkLCBub3cgaXQncyB0aW1lIHRvIGJpdGUgdGhlIGJ1bGxldCBhbmQgZ2V0IGl0IGRv bmUuCisJCSAqCisJCSAqIFhYWDogQ2FjaGluZyB0aGUgdmFsdWVzL2lzbnVsbCBtaWdodCBiZSBh IHdpbiBhbmQgYXZvaWQgb25lIG9mIHRoZQorCQkgKiBhZGRlZCBjYWxscyB0byBGb3JtSW5kZXhE YXR1bSgpLgogCQkgKi8KLQkJaWYgKGF0dHJudW0gPCAwKQorCQlpZiAoaGFzX2V4cHJlc3Npb25z IHx8IGhhc19hbV9jb21wYXJlKQogCQl7Ci0JCQlpZiAoYXR0cm51bSAhPSBUYWJsZU9pZEF0dHJp YnV0ZU51bWJlcikKLQkJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRp ZHgpOwotCQkJY29udGludWU7Ci0JCX0KKwkJCXNhdmVfc2NhbnR1cGxlID0gZWNvbnRleHQtPmVj eHRfc2NhbnR1cGxlOwogCi0JCS8qIEV4dHJhY3QgdmFsdWVzIGZyb20gYm90aCBzbG90cyAqLwot CQlvbGR2YWwgPSBzbG90X2dldGF0dHIodHRzX29sZCwgYXR0cm51bSwgJm9sZG51bGwpOwotCQlu ZXd2YWwgPSBzbG90X2dldGF0dHIodHRzX25ldywgYXR0cm51bSwgJm5ld251bGwpOworCQkJLyog RXZhbHVhdGUgZXhwcmVzc2lvbnMgKGlmIGFueSkgdG8gZ2V0IGJhc2UgZGF0dW1zICovCisJCQll Y29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBvbGRfdHRzOworCQkJRm9ybUluZGV4RGF0dW0oaW5k ZXhJbmZvLCBvbGRfdHRzLCBlc3RhdGUsIG9sZF92YWx1ZXMsIG9sZF9pc251bGwpOwogCi0JCS8q IElmIG9uZSB2YWx1ZSBpcyBOVUxMIGFuZCB0aGUgb3RoZXIgaXMgbm90LCB0aGV5IGFyZSBub3Qg ZXF1YWwgKi8KLQkJaWYgKG9sZG51bGwgIT0gbmV3bnVsbCkKLQkJewotCQkJbW9kaWZpZWQgPSBi bXNfYWRkX21lbWJlcihtb2RpZmllZCwgYXR0aWR4KTsKLQkJCWNvbnRpbnVlOworCQkJZWNvbnRl eHQtPmVjeHRfc2NhbnR1cGxlID0gbmV3X3R0czsKKwkJCUZvcm1JbmRleERhdHVtKGluZGV4SW5m bywgbmV3X3R0cywgZXN0YXRlLCBuZXdfdmFsdWVzLCBuZXdfaXNudWxsKTsKKworCQkJZWNvbnRl eHQtPmVjeHRfc2NhbnR1cGxlID0gc2F2ZV9zY2FudHVwbGU7CisKKwkJCS8qIENvbXBhcmUgdGhl IGluZGV4IGtleSBkYXR1bXMgZm9yIGVxdWFsaXR5ICovCisJCQlmb3IgKGludCBqID0gMDsgaiA8 IGluZGV4SW5mby0+aWlfTnVtSW5kZXhLZXlBdHRyczsgaisrKQorCQkJeworCQkJCUF0dHJOdW1i ZXIJaWR4X2F0dHJudW0gPSBpbmRleEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbal07CisJCQkJ aW50CQkJaWR4X2F0dHJpZHggPSBpZHhfYXR0cm51bSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRy aWJ1dGVOdW1iZXI7CisJCQkJaW50CQkJbnRoX2V4cHIgPSAwOworCQkJCWJvb2wJCXZhbHVlc19l cXVhbCA9IGZhbHNlOworCisJCQkJLyoKKwkJCQkgKiBXZSBjYW4ndCBza2lwIGF0dHJpYnV0ZXMg dGhhdCB3ZSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYXMKKwkJCQkgKiB0cmlnZ2VyaW5nIGFuIGlu ZGV4IHVwZGF0ZSBiZWNhdXNlIHdlIG1heSBoYXZlIGFkZGVkIGFuCisJCQkJICogYXR0cmlidXRl IGZyb20gYW4gZXhwcmVzc2lvbiBpbmRleCB0aGF0IGRpZG4ndCBjaGFuZ2UgYnV0CisJCQkJICog dGhlIGV4cHJlc3Npb24gZGlkIGFuZCB0aGF0IHVuY2hhbmdlZCBhdHRyaWJ1dGUgaXMKKwkJCQkg KiByZWZlcmVuY2VkIGluIGEgc3Vic2VxdWVudCBpbmRleCB3aGVyZSB3ZSB3aWxsIGRpc2NvdmVy IHRoYXQKKwkJCQkgKiBmYWN0LgorCQkJCSAqLworCisJCQkJLyogQSBjaGFuZ2UgdG8vZnJvbSBO VUxMLCByZWNvcmQgdGhpcyBhdHRyaWJ1dGUgKi8KKwkJCQlpZiAob2xkX2lzbnVsbFtqXSAhPSBu ZXdfaXNudWxsW2pdKQorCQkJCXsKKwkJCQkJLyogRXhwcmVzc2lvbnMgd2lsbCBoYXZlIGlkeF9h dHRybnVtID09IDAgKi8KKwkJCQkJaWYgKGlkeF9hdHRybnVtID09IDApCisJCQkJCQltX2F0dHJz ID0gYm1zX2FkZF9tZW1iZXJzKG1fYXR0cnMsIGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNBdHRy cyk7CisJCQkJCWVsc2UKKwkJCQkJCW1fYXR0cnMgPSBibXNfYWRkX21lbWJlcihtX2F0dHJzLCBp ZHhfYXR0cmlkeCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8qIEJvdGggTlVMTCwg bm8gY2hhbmdlICovCisJCQkJaWYgKG9sZF9pc251bGxbal0pCisJCQkJeworCQkJCQlpZiAoaWR4 X2F0dHJudW0gIT0gMCkKKwkJCQkJCXVfYXR0cnMgPSBibXNfYWRkX21lbWJlcih1X2F0dHJzLCBp ZHhfYXR0cmlkeCk7CisKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBV c2UgaW5kZXggQU0ncyBjb21wYXJpc29uIGZ1bmN0aW9uIGlmIHByZXNlbnQgd2hlbiBjb21wYXJp bmcKKwkJCQkgKiB0aGUgaW5kZXggZGF0dW0gZm9ybWVkIHdoZW4gY3JlYXRpbmcgYW4gaW5kZXgg a2V5LgorCQkJCSAqLworCQkJCWlmIChoYXNfYW1fY29tcGFyZSkKKwkJCQl7CisJCQkJCS8qCisJ CQkJCSAqIEZvciBuYnRyZWUgdG8gcHJvcGVybHkgZGVkdXBsaWNhdGUgVElEcyBvbiBwYWdlIHNw bGl0IGl0CisJCQkJCSAqIG11c3QgdHJlYXQgZXF1YWxpdHkgYXMgYmluYXJ5IGNvbXBhcmlzb24u ICBTbyBpdCBpcworCQkJCQkgKiB2aXRhbCB0aGF0IHdlIGNhbGwgaXQncyBjb21wYXJlZGF0dW1z KCkgZnVuY3Rpb24uCisJCQkJCSAqCisJCQkJCSAqIEluIHRoZSBjYXNlIG9mIEdJTi9SVU0gaW5k ZXhlcyB0aGV5IHRvbyBiZWhhdmUKKwkJCQkJICogZGlmZmVyZW50bHkgYW5kIGNhbiBldmVuIGV4 dHJhY3Qgb25lIG9yIG1vcmUgcG9ydGlvbnMgb2YKKwkJCQkJICogdGhlIGRhdHVtIHdoZW4gZm9y bWluZyBpbmRleCB0dXBsZXMuICBXZSdkIGxpa2UgdG8ga25vdworCQkJCQkgKiBpZiB0aGlzIHVw ZGF0ZSBuZWVkcyB0byB0cmlnZ2VyIG9uZSBvciBtb3JlIGluZGV4CisJCQkJCSAqIHR1cGxlcywg c28gd2UgbGV0IHRoZSBpbmRleCBBTSBwZXJmb3JtIHRoZWlyIGV4dHJhY3Rpb24KKwkJCQkJICog YW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMuCisJCQkJCSAqCisJCQkJCSAqIFRoZXJlIG1heSBiZSBv dGhlciBzaW1pbGFyIGluZGV4IEFNIGltcGxlbWVudGF0aW9uIHdpdGgKKwkJCQkJICogZXh0cmFj dGlvbiB3aGVyZSBpbmRleGVzIGFyZSBidWlsdCB1c2luZyBvbmx5IHBhcnQocykgb2YKKwkJCQkJ ICogdGhlIERhdHVtIGFuZCBtaWdodCBldmVuIG5lZWQgdG8gaW52b2tlIHR5cGUtc3BlY2lmaWMK KwkJCQkJICogZXF1YWxpdHkgb3BlcmF0b3JzLgorCQkJCQkgKgorCQkJCQkgKiBOT1RFOiBGb3Ig QU0gY29tcGFyaXNvbiwgcGFzcyB0aGUgMS1iYXNlZCBpbmRleAorCQkJCQkgKiBhdHRyaWJ1dGUg bnVtYmVyLiBUaGUgQU0ncyBjb21wYXJlIGZ1bmN0aW9uIGV4cGVjdHMgdGhlCisJCQkJCSAqIHNh bWUgbnVtYmVyaW5nIGFzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgQU0uCisJCQkJCSAqLworCQkJ CQl2YWx1ZXNfZXF1YWwgPSBhbXJvdXRpbmUtPmFtY29tcGFyZWRhdHVtcyhpbmRleFJlbCwgaiAr IDEsCisJCQkJCQkJCQkJCQkJCQkgIG9sZF92YWx1ZXNbal0sIG9sZF9pc251bGxbal0sCisJCQkJ CQkJCQkJCQkJCQkgIG5ld192YWx1ZXNbal0sIG5ld19pc251bGxbal0pOworCQkJCX0KKwkJCQll bHNlCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBFeHByZXNzaW9uIGluZGV4IHdpdGhvdXQgY3Vz dG9tIEFNIGNvbXBhcmlzb24uIENvbXBhcmUKKwkJCQkJICogdGhlIGV4cHJlc3Npb24gcmVzdWx0 cyB1c2luZyB0eXBlLXNwZWNpZmljIGVxdWFsaXR5CisJCQkJCSAqIHdoaWNoIGF0IHRoaXMgcG9p bnQgaXMgdGhlIGV4cHJlc3Npb24ncyB0eXBlLCBub3QgdGhlCisJCQkJCSAqIGluZGV4J3MgdHlw ZS4gSXQgaXMgaW4gaW5kZXhfZm9ybV90dXBsZSgpIHRoYXQgaW5kZXgKKwkJCQkJICogYXR0cmli dXRlcyBhcmUgdHJhbnNmb3JtZWQsIG5vdCBGb3JtSW5kZXhEYXR1bSgpLgorCQkJCQkgKi8KKwkJ CQkJT2lkCQkJZXhwcl90eXBlX29pZDsKKwkJCQkJaW50MTYJCXR5cGxlbjsgLyogT3V0cHV0OiB0 eXBlIGxlbmd0aCAqLworCQkJCQlib29sCQl0eXBieXZhbDsKKwkJCQkJRXhwcgkgICAqZXhwciA9 IChFeHByICopIGxpc3RfbnRoKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMsIG50aF9leHByKTsK KworCQkJCQlBc3NlcnQoZXhwciAhPSBOVUxMKTsKKworCQkJCQkvKiBHZXQgdHlwZSBPSUQgZnJv bSB0aGUgZXhwcmVzc2lvbiAqLworCQkJCQlleHByX3R5cGVfb2lkID0gZXhwclR5cGUoKE5vZGUg KikgZXhwcik7CisKKwkJCQkJLyogR2V0IHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgT0lEICov CisJCQkJCWdldF90eXBsZW5ieXZhbChleHByX3R5cGVfb2lkLCAmdHlwbGVuLCAmdHlwYnl2YWwp OworCisJCQkJCXZhbHVlc19lcXVhbCA9IHR0c19hdHRyX2VxdWFsKGV4cHJfdHlwZV9vaWQsCisJ CQkJCQkJCQkJCQkgIC0xLAkvKiB1c2UgVEJEIGV4cHIgdHlwZSAqLworCQkJCQkJCQkJCQkJICB0 eXBieXZhbCwKKwkJCQkJCQkJCQkJCSAgdHlwbGVuLAorCQkJCQkJCQkJCQkJICBvbGRfdmFsdWVz W2pdLAorCQkJCQkJCQkJCQkJICBuZXdfdmFsdWVzW2pdKTsKKwkJCQl9CisKKwkJCQlpZiAoIXZh bHVlc19lcXVhbCkKKwkJCQl7CisJCQkJCS8qIEV4cHJlc3Npb25zIHdpbGwgaGF2ZSBpZHhfYXR0 cm51bSA9PSAwICovCisJCQkJCWlmIChpZHhfYXR0cm51bSA9PSAwKQorCQkJCQkJbV9hdHRycyA9 IGJtc19hZGRfbWVtYmVycyhtX2F0dHJzLCBpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zQXR0cnMp OworCQkJCQllbHNlCisJCQkJCQltX2F0dHJzID0gYm1zX2FkZF9tZW1iZXIobV9hdHRycywgaWR4 X2F0dHJpZHgpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZiAoaWR4X2F0dHJudW0g IT0gMCkKKwkJCQkJCXVfYXR0cnMgPSBibXNfYWRkX21lbWJlcih1X2F0dHJzLCBpZHhfYXR0cmlk eCk7CisJCQkJfQorCisJCQkJaWYgKGlkeF9hdHRybnVtID09IDApCisJCQkJCW50aF9leHByKys7 CisJCQl9CiAJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogSGVyZSB3ZSBrbm93IHRoYXQg d2UncmUgcmV2aWV3aW5nIGFuIGluZGV4IHRoYXQgZG9lc24ndCBoYXZlIGEKKwkJCSAqIHBhcnRp YWwgcHJlZGljYXRlLCBkb2Vzbid0IHVzZSBleHByZXNzaW9ucywgYW5kIGRvZXNuJ3QgaGF2ZSBh CisJCQkgKiBhbWNvbXBhcmVkYXR1bXMoKSBpbXBsZW1lbnRhdGlvbi4KKwkJCSAqLwogCi0JCS8q IElmIGJvdGggYXJlIE5VTEwsIGNvbnNpZGVyIHRoZW0gZXF1YWwgKi8KLQkJaWYgKG9sZG51bGwp Ci0JCQljb250aW51ZTsKKwkJCS8qIENvbXBhcmUgdGhlIGluZGV4IGtleSBkYXR1bXMgZm9yIGVx dWFsaXR5ICovCisJCQlmb3IgKGludCBqID0gMDsgaiA8IGluZGV4SW5mby0+aWlfTnVtSW5kZXhL ZXlBdHRyczsgaisrKQorCQkJeworCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHI7CisJCQkJQXR0 ck51bWJlcglyZWxfYXR0cm51bTsKKwkJCQlpbnQJCQlyZWxfYXR0cmlkeDsKKwkJCQlib29sCQl2 YWx1ZXNfZXF1YWwgPSBmYWxzZTsKKwkJCQlib29sCQlvbGRfbnVsbCwKKwkJCQkJCQluZXdfbnVs bDsKKwkJCQlEYXR1bQkJb2xkX3ZhbCwKKwkJCQkJCQluZXdfdmFsOwogCi0JCS8qIEdldCBhdHRy aWJ1dGUgbWV0YWRhdGEgKi8KLQkJQXNzZXJ0KGF0dHJudW0gPiAwICYmIGF0dHJudW0gPD0gdHVw ZGVzYy0+bmF0dHMpOwotCQlhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRybnVtIC0g MSk7Ci0KLQkJLyogQ29tcGFyZSB1c2luZyB0eXBlLXNwZWNpZmljIGVxdWFsaXR5IG9wZXJhdG9y ICovCi0JCWlmICghdHRzX2F0dHJfZXF1YWwoYXR0ci0+YXR0dHlwaWQsCi0JCQkJCQkJYXR0ci0+ YXR0Y29sbGF0aW9uLAotCQkJCQkJCWF0dHItPmF0dGJ5dmFsLAotCQkJCQkJCWF0dHItPmF0dGxl biwKLQkJCQkJCQlvbGR2YWwsCi0JCQkJCQkJbmV3dmFsKSkKLQkJCW1vZGlmaWVkID0gYm1zX2Fk ZF9tZW1iZXIobW9kaWZpZWQsIGF0dGlkeCk7Ci0JfQorCQkJCXJlbF9hdHRybnVtID0gaW5kZXhJ bmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2pdOworCQkJCXJlbF9hdHRyaWR4ID0gcmVsX2F0dHJu dW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOwogCi0JYm1zX2ZyZWUoaW5k ZXhlZF9hdHRycyk7CisJCQkJLyogWmVybyB3b3VsZCBtZWFuIGV4cHJlc3Npb24sIHNvbWV0aGlu ZyB3ZSBkb24ndCBleHBlY3QgaGVyZSAqLworCQkJCUFzc2VydChyZWxfYXR0cm51bSA+IDAgJiYg cmVsX2F0dHJudW0gPD0gdHVwZGVzYy0+bmF0dHMpOwogCi0JcmV0dXJuIG1vZGlmaWVkOworCQkJ CS8qIEV4dHJhY3QgdmFsdWVzIGZyb20gYm90aCBzbG90cyBmb3IgdGhpcyBhdHRyaWJ1dGUgKi8K KwkJCQlvbGRfdmFsID0gc2xvdF9nZXRhdHRyKG9sZF90dHMsIHJlbF9hdHRybnVtLCAmb2xkX251 bGwpOworCQkJCW5ld192YWwgPSBzbG90X2dldGF0dHIobmV3X3R0cywgcmVsX2F0dHJudW0sICZu ZXdfbnVsbCk7CisKKwkJCQkvKgorCQkJCSAqIElmIG9uZSB2YWx1ZSBpcyBOVUxMIGFuZCB0aGUg b3RoZXIgaXMgbm90LCB0aGV5IGFyZSBub3QKKwkJCQkgKiBlcXVhbAorCQkJCSAqLworCQkJCWlm IChvbGRfbnVsbCAhPSBuZXdfbnVsbCkKKwkJCQl7CisJCQkJCW1fYXR0cnMgPSBibXNfYWRkX21l bWJlcihtX2F0dHJzLCByZWxfYXR0cmlkeCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJ CS8qIElmIGJvdGggYXJlIE5VTEwsIGNvbnNpZGVyIHRoZW0gZXF1YWwgKi8KKwkJCQlpZiAob2xk X251bGwpCisJCQkJeworCQkJCQl1X2F0dHJzID0gYm1zX2FkZF9tZW1iZXIodV9hdHRycywgcmVs X2F0dHJpZHgpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlhdHRyID0gVHVwbGVEZXNj QXR0cih0dXBkZXNjLCByZWxfYXR0cm51bSAtIDEpOworCisJCQkJLyoKKwkJCQkgKiBDb21wYXJl IHVzaW5nIHR5cGUtc3BlY2lmaWMgZXF1YWxpdHkgd2hpY2ggYXQgdGhpcyBwb2ludCBpcworCQkJ CSAqIHRoZSByZWxhdGlvbidzIHR5cGUgYmVjYXVzZSBGb3JtSW5kZXhEYXR1bSgpIHdpbGwgcG9w dWxhdGUKKwkJCQkgKiB0aGUgdmFsdWVzL251bGxzIGJ1dCB3b24ndCB0cmFuc2Zvcm0gdGhlbSBp bnRvIHRoZSBmaW5hbAorCQkJCSAqIHZhbHVlcyBkZXN0aW5lZCBmb3IgdGhlIGluZGV4IHR1cGxl LCB0aGF0J3MgbGVmdCB0bworCQkJCSAqIGluZGV4X2Zvcm1fdHVwbGUoKSB3aGljaCB3ZSBkb24n dCBjYWxsIChvbiBwdXJwb3NlKS4KKwkJCQkgKi8KKwkJCQl2YWx1ZXNfZXF1YWwgPSB0dHNfYXR0 cl9lcXVhbChhdHRyLT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJICBhdHRyLT5hdHRjb2xsYXRpb24s CisJCQkJCQkJCQkJCSAgYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSAgYXR0ci0+YXR0bGVu LAorCQkJCQkJCQkJCQkgIG9sZF92YWwsCisJCQkJCQkJCQkJCSAgbmV3X3ZhbCk7CisKKwkJCQlp ZiAoIXZhbHVlc19lcXVhbCkKKwkJCQkJbV9hdHRycyA9IGJtc19hZGRfbWVtYmVyKG1fYXR0cnMs IHJlbF9hdHRyaWR4KTsKKwkJCQllbHNlCisJCQkJCXVfYXR0cnMgPSBibXNfYWRkX21lbWJlcih1 X2F0dHJzLCByZWxfYXR0cmlkeCk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBIZXJlIHdlIGtu b3cgYWxsIHRoZSBhdHRyaWJ1dGVzIHdlIHRob3VnaHQgbWlnaHQgYmUgbW9kaWZpZWQgYW5kCisJ CSAqIGFsbCB0aG9zZSB3ZSBrbm93IGhhdmVuJ3QgYmVlbi4gIFRha2UgdGhlIGRpZmZlcmVuY2Ug YW5kIGFkZCBpdCB0bworCQkgKiB0aGUgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHNldC4K KwkJICovCisJCW1fYXR0cnMgPSBibXNfZGVsX21lbWJlcnMobV9hdHRycywgdV9hdHRycyk7CisJ CXBfYXR0cnMgPSBibXNfZGVsX21lbWJlcnMocF9hdHRycywgdV9hdHRycyk7CisJCW1peF9hdHRy cyA9IGJtc19hZGRfbWVtYmVycyhtaXhfYXR0cnMsIG1fYXR0cnMpOworCQltaXhfYXR0cnMgPSBi bXNfYWRkX21lbWJlcnMobWl4X2F0dHJzLCBwX2F0dHJzKTsKKworCQlibXNfZnJlZShtX2F0dHJz KTsKKwkJYm1zX2ZyZWUodV9hdHRycyk7CisJCWJtc19mcmVlKHBfYXR0cnMpOworCX0KKworCXJl dHVybiBtaXhfYXR0cnM7CiB9CiAKIC8qCkBAIC0yMzk1LDYgKzI2NTEsOSBAQCBFeGVjVXBkYXRl QWN0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVs SW5mbywKIAlib29sCQlwYXJ0aXRpb25fY29uc3RyYWludF9mYWlsZWQ7CiAJVE1fUmVzdWx0CXJl c3VsdDsKIAorCS8qIFRoZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQg dHJpZ2dlciBuZXcgaW5kZXggZW50cmllcyAqLworCUJpdG1hcHNldCAgKm1peF9hdHRycyA9IE5V TEw7CisKIAl1cGRhdGVDeHQtPmNyb3NzUGFydFVwZGF0ZSA9IGZhbHNlOwogCiAJLyoKQEAgLTI1 MTcsMTMgKzI3NzYsMzIgQEAgbHJlcGxhY2U6CiAJYm1zX2ZyZWUocmVzdWx0UmVsSW5mby0+cmlf Q2hhbmdlZEluZGV4ZWRDb2xzKTsKIAlyZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENv bHMgPSBOVUxMOwogCi0JcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0KLQkJ RXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhyZXN1bHRSZWxJbmZvLCBvbGRTbG90LCBz bG90KTsKKwkvKgorCSAqIER1cmluZyB1cGRhdGVzIHdlJ2xsIG5lZWQgYSBiaXQgbW9yZSBpbmZv cm1hdGlvbiBpbiBJbmRleEluZm8gYnV0IHdlJ3ZlCisJICogZGVsYXllZCBhZGRpbmcgaXQgdW50 aWwgaGVyZS4gIFdlIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZQorCSAqIGluZGV4ZXMs IHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIHRoYXQgaXMgaW5kZXhlZCwgYW5kIHRoYXQgdGhl IGZpcnN0CisJICogaW5kZXggZG9lc24ndCB5ZXQgaGF2ZSBpaV9JbmRleGVkQXR0cnMgc2V0IGFz IGEgd2F5IHRvIGVuc3VyZSB3ZSBvbmx5CisJICogYnVpbGQgdGhpcyB3aGVuIG5lZWRlZCBhbmQg b25seSBvbmNlLiAgV2UgZG9uJ3QgYnVpbGQgdGhpcyBpbgorCSAqIEV4ZWNPcGVuSW5kaWNpZXMo KSBhcyBpdCBpcyB1bm5lY2Vzc2FyeSBvdmVyaGVhZCB3aGVuIG5vdCBwZXJmb3JtaW5nIGFuCisJ ICogdXBkYXRlLgorCSAqLworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCAm JgorCQlibXNfaXNfZW1wdHkocmVzdWx0UmVsSW5mby0+cmlfSW5kZXhSZWxhdGlvbkluZm9bMF0t PmlpX0luZGV4ZWRBdHRycykpCisJCUJ1aWxkVXBkYXRlSW5kZXhJbmZvKHJlc3VsdFJlbEluZm8p OworCisJLyoKKwkgKiBOZXh0IHVwIHdlIG5lZWQgdG8gZmluZCBvdXQgdGhlIHNldCBvZiBpbmRl eGVkIGF0dHJpYnV0ZXMgdGhhdCBoYXZlCisJICogY2hhbmdlZCBpbiB2YWx1ZSBhbmQgc2hvdWxk IHRyaWdnZXIgYSBuZXcgaW5kZXggdHVwbGUuICBXZSBjb3VsZCBzdGFydAorCSAqIHdpdGggdGhl IHNldCBvZiB1cGRhdGVkIGNvbHVtbnMgdmlhIEV4ZWNHZXRVcGRhdGVkQ29scygpLCBidXQgaWYg d2UgZG8KKwkgKiB3ZSB3aWxsIG92ZXJsb29rIGF0dHJpYnV0ZXMgZGlyZWN0bHkgbW9kaWZpZWQg YnkgaGVhcF9tb2RpZnlfdHVwbGUoKQorCSAqIHdoaWNoIGFyZSBub3Qga25vd24gdG8gRXhlY0dl dFVwZGF0ZWRDb2xzKCkuCisJICovCisJbWl4X2F0dHJzID0gRXhlY0NoZWNrSW5kZXhlZEF0dHJz Rm9yQ2hhbmdlcyhyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIG9sZFNsb3QsIHNsb3QpOwogCiAJLyoK LQkgKiByZXBsYWNlIHRoZSBoZWFwIHR1cGxlCisJICogQ2FsbCBpbnRvIHRoZSB0YWJsZSBBTSB0 byB1cGRhdGUgdGhlIGhlYXAgdHVwbGUuCiAJICoKLQkgKiBOb3RlOiBpZiBlc19jcm9zc2NoZWNr X3NuYXBzaG90IGlzbid0IEludmFsaWRTbmFwc2hvdCwgd2UgY2hlY2sgdGhhdAorCSAqIE5PVEU6 IGlmIGVzX2Nyb3NzY2hlY2tfc25hcHNob3QgaXNuJ3QgSW52YWxpZFNuYXBzaG90LCB3ZSBjaGVj ayB0aGF0CiAJICogdGhlIHJvdyB0byBiZSB1cGRhdGVkIGlzIHZpc2libGUgdG8gdGhhdCBzbmFw c2hvdCwgYW5kIHRocm93IGEKIAkgKiBjYW4ndC1zZXJpYWxpemUgZXJyb3IgaWYgbm90LiBUaGlz IGlzIGEgc3BlY2lhbC1jYXNlIGJlaGF2aW9yIG5lZWRlZAogCSAqIGZvciByZWZlcmVudGlhbCBp bnRlZ3JpdHkgdXBkYXRlcyBpbiB0cmFuc2FjdGlvbi1zbmFwc2hvdCBtb2RlCkBAIC0yNTM1LDkg KzI4MTMsMTIgQEAgbHJlcGxhY2U6CiAJCQkJCQkJCWVzdGF0ZS0+ZXNfY3Jvc3NjaGVja19zbmFw c2hvdCwKIAkJCQkJCQkJdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAogCQkJCQkJCQkmY29u dGV4dC0+dG1mZCwgJnVwZGF0ZUN4dC0+bG9ja21vZGUsCi0JCQkJCQkJCXJlc3VsdFJlbEluZm8t PnJpX0NoYW5nZWRJbmRleGVkQ29scywKKwkJCQkJCQkJbWl4X2F0dHJzLAogCQkJCQkJCQkmdXBk YXRlQ3h0LT51cGRhdGVJbmRleGVzKTsKIAorCUFzc2VydChibXNfaXNfZW1wdHkocmVzdWx0UmVs SW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzKSk7CisJcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdl ZEluZGV4ZWRDb2xzID0gbWl4X2F0dHJzOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjU1 NSw3ICsyODM2LDcgQEAgRXhlY1VwZGF0ZUVwaWxvZ3VlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29u dGV4dCwgVXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0LAogCU1vZGlmeVRhYmxlU3RhdGUgKm10c3Rh dGUgPSBjb250ZXh0LT5tdHN0YXRlOwogCUxpc3QJICAgKnJlY2hlY2tJbmRleGVzID0gTklMOwog Ci0JLyogaW5zZXJ0IGluZGV4IGVudHJpZXMgZm9yIHR1cGxlIGlmIG5lY2Vzc2FyeSAqLworCS8q IEluc2VydCBpbmRleCBlbnRyaWVzIGZvciB0dXBsZSBpZiBuZWNlc3NhcnkgKi8KIAlpZiAocmVz dWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDAgJiYgKHVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhl cyAhPSBUVV9Ob25lKSkKIAkJcmVjaGVja0luZGV4ZXMgPSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMo cmVzdWx0UmVsSW5mbywKIAkJCQkJCQkJCQkJICAgc2xvdCwgY29udGV4dC0+ZXN0YXRlLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rl cy9tYWtlZnVuY3MuYwppbmRleCBkNjlkYzA5MGFhNC4uZTlhNTNiOTVjYWYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21h a2VmdW5jcy5jCkBAIC04NTUsMTAgKzg1NSwxNCBAQCBtYWtlSW5kZXhJbmZvKGludCBudW1hdHRy cywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25zLAogCS8qIGV4 cHJlc3Npb25zICovCiAJbi0+aWlfRXhwcmVzc2lvbnMgPSBleHByZXNzaW9uczsKIAluLT5paV9F eHByZXNzaW9uc1N0YXRlID0gTklMOworCW4tPmlpX0V4cHJlc3Npb25zQXR0cnMgPSBOVUxMOwog CiAJLyogcHJlZGljYXRlcyAgKi8KIAluLT5paV9QcmVkaWNhdGUgPSBwcmVkaWNhdGVzOwogCW4t PmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKwluLT5paV9QcmVkaWNhdGVBdHRycyA9IE5VTEw7 CisJbi0+aWlfQ2hlY2tlZFByZWRpY2F0ZSA9IGZhbHNlOworCW4tPmlpX1ByZWRpY2F0ZVNhdGlz ZmllZCA9IGZhbHNlOwogCiAJLyogZXhjbHVzaW9uIGNvbnN0cmFpbnRzICovCiAJbi0+aWlfRXhj bHVzaW9uT3BzID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggNjNkZDQxYzFmMjEuLjliZGY3M2Vk YTU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMjExLDYgKzIxMSwzMyBAQCB0eXBlZGVmIHZvaWQgKCph bW1hcmtwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwogLyogcmVzdG9yZSBtYXJr ZWQgc2NhbiBwb3NpdGlvbiAqLwogdHlwZWRlZiB2b2lkICgqYW1yZXN0cnBvc19mdW5jdGlvbikg KEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKKy8qCisgKiBhbWNvbXBhcmVkYXR1bXMgLSBDb21wYXJl IGRhdHVtcyB0byBkZXRlcm1pbmUgaWYgaW5kZXggdXBkYXRlIGlzIG5lZWRlZAorICoKKyAqIFRo aXMgZnVuY3Rpb24gY29tcGFyZXMgb2xkX2RhdHVtIGFuZCBuZXdfZGF0dW0gdG8gZGV0ZXJtaW5l IGlmIHRoZXkgd291bGQKKyAqIHByb2R1Y2UgZGlmZmVyZW50IGluZGV4IGVudHJpZXMuIEZvciBl eHRyYWN0aW9uLWJhc2VkIGluZGV4ZXMgKEdJTiwgUlVNKSwKKyAqIHRoaXMgc2hvdWxkOgorICog IDEuIEV4dHJhY3Qga2V5cyBmcm9tIG9sZF9kYXR1bSB1c2luZyB0aGUgb3BjbGFzcydzIGV4dHJh Y3RWYWx1ZSBmdW5jdGlvbgorICogIDIuIEV4dHJhY3Qga2V5cyBmcm9tIG5ld19kYXR1bSB1c2lu ZyB0aGUgb3BjbGFzcydzIGV4dHJhY3RWYWx1ZSBmdW5jdGlvbgorICogIDMuIENvbXBhcmUgdGhl IHR3byBzZXRzIG9mIGtleXMgdXNpbmcgYXBwcm9wcmlhdGUgZXF1YWxpdHkgb3BlcmF0b3JzCisg KiAgNC4gUmV0dXJuIHRydWUgaWYgdGhlIHNldHMgYXJlIGVxdWFsIChubyBpbmRleCB1cGRhdGUg bmVlZGVkKQorICoKKyAqIFRoZSBjb21wYXJpc29uIHNob3VsZCBhY2NvdW50IGZvcjoKKyAqICAt IERpZmZlcmVudCBudW1iZXJzIG9mIGV4dHJhY3RlZCBrZXlzCisgKiAgLSBOVUxMIHZhbHVlcwor ICogIC0gVHlwZS1zcGVjaWZpYyBlcXVhbGl0eSAobm90IGp1c3QgYmluYXJ5IGVxdWFsaXR5KQor ICogIC0gT3BjbGFzcyBwYXJhbWV0ZXJzIChlLmcuLCBwYXRoIGluIGJzb25fcnVtX3NpbmdsZV9w YXRoX29wcykKKyAqCisgKiBGb3IgdGhlIERvY3VtZW50REIgZXhhbXBsZSB3aXRoIHBhdGg9J2En LCB0aGlzIHdvdWxkIGV4dHJhY3QgdmFsdWVzIGF0CisgKiBwYXRoICdhJyBmcm9tIGJvdGggb2xk IGFuZCBuZXcgQlNPTiBkb2N1bWVudHMgYW5kIGNvbXBhcmUgdGhlbSB1c2luZworICogQlNPTidz IGVxdWFsaXR5IG9wZXJhdG9yLgorICovCisvKiBpZGVudGlmeSBpZiB1cGRhdGVkIGRhdHVtcyB3 b3VsZCBwcm9kdWNlIG9uZSBvciBtb3JlIGluZGV4IGVudHJpZXMgKi8KK3R5cGVkZWYgYm9vbCAo KmFtY29tcGFyZWRhdHVtc19mdW5jdGlvbikgKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJ CQkJCQkJICBpbnQgYXR0bm8sCisJCQkJCQkJCQkJICBEYXR1bSBvbGRfZGF0dW0sIGJvb2wgb2xk X2lzbnVsbCwKKwkJCQkJCQkJCQkgIERhdHVtIG5ld19kYXR1bSwgYm9vbCBuZXdfaXNudWxsKTsK KwogLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZXMgLSBmb3IgcGFyYWxsZWwgaW5k ZXggc2NhbnMuCiAgKi8KQEAgLTMxMyw2ICszNDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFt Um91dGluZQogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47CiAJYW1tYXJrcG9zX2Z1bmN0 aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbXJlc3RycG9zX2Z1bmN0aW9uIGFt cmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1jb21wYXJlZGF0dW1zX2Z1bmN0aW9uIGFt Y29tcGFyZWRhdHVtczsJLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlv bnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxl bHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9naW4uaAppbmRleCAxM2VhOTE5MjJlZi4uMmYyNjVmNDgxNmMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9naW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2luLmgKQEAgLTEw MCw2ICsxMDAsOSBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IGdpbl9wZW5kaW5nX2xpc3RfbGlt aXQ7CiBleHRlcm4gdm9pZCBnaW5HZXRTdGF0cyhSZWxhdGlvbiBpbmRleCwgR2luU3RhdHNEYXRh ICpzdGF0cyk7CiBleHRlcm4gdm9pZCBnaW5VcGRhdGVTdGF0cyhSZWxhdGlvbiBpbmRleCwgY29u c3QgR2luU3RhdHNEYXRhICpzdGF0cywKIAkJCQkJCSAgIGJvb2wgaXNfYnVpbGQpOworZXh0ZXJu IGJvb2wgZ2luY29tcGFyZWRhdHVtcyhSZWxhdGlvbiBpbmRleCwgaW50IGF0dG51bSwKKwkJCQkJ CQkgRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9pc251bGwsCisJCQkJCQkJIERhdHVtIG5ld19k YXR1bSwgYm9vbCBuZXdfaXNudWxsKTsKIAogZXh0ZXJuIHZvaWQgX2dpbl9wYXJhbGxlbF9idWls ZF9tYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYyk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApp bmRleCA0MWQ1NDFhYTZiMi4uNTlkYjM4OWE1NDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTMyNiw3 ICszMjYsNyBAQCBleHRlcm4gVE1fUmVzdWx0IGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9u LCBIZWFwVHVwbGVEYXRhICpvbGR0dXAsCiAJCQkJCQkJIFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBM b2NrVHVwbGVNb2RlICpsb2NrbW9kZSwgQnVmZmVyIGJ1ZmZlciwKIAkJCQkJCQkgUGFnZSBwYWdl LCBCbG9ja051bWJlciBibG9jaywgSXRlbUlkIGxwLCBCaXRtYXBzZXQgKmhvdF9hdHRycywKIAkJ CQkJCQkgQml0bWFwc2V0ICpzdW1fYXR0cnMsIEJpdG1hcHNldCAqcGtfYXR0cnMsIEJpdG1hcHNl dCAqcmlkX2F0dHJzLAotCQkJCQkJCSBCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVyICp2bWJ1 ZmZlciwKKwkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZm ZXIsCiAJCQkJCQkJIGJvb2wgcmVwX2lkX2tleV9yZXF1aXJlZCwgVFVfVXBkYXRlSW5kZXhlcyAq dXBkYXRlX2luZGV4ZXMpOwogZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2xvY2tfdHVwbGUoUmVsYXRp b24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIExv Y2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2FpdF9wb2xpY3ksCkBAIC0zNjEsOCAr MzYxLDggQEAgZXh0ZXJuIGJvb2wgaGVhcF90dXBsZV9uZWVkc19ldmVudHVhbF9mcmVlemUoSGVh cFR1cGxlSGVhZGVyIHR1cGxlKTsKIAogZXh0ZXJuIHZvaWQgc2ltcGxlX2hlYXBfaW5zZXJ0KFJl bGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwKTsKIGV4dGVybiB2b2lkIHNpbXBsZV9oZWFw X2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpOwot ZXh0ZXJuIHZvaWQgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJ dGVtUG9pbnRlckRhdGEgKm90aWQsCi0JCQkJCQkJICAgSGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRl SW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOworZXh0ZXJuIEJpdG1hcHNldCAqc2ltcGxlX2hlYXBf dXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCisJ CQkJCQkJCQkgSGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMp OwogCiBleHRlcm4gVHJhbnNhY3Rpb25JZCBoZWFwX2luZGV4X2RlbGV0ZV90dXBsZXMoUmVsYXRp b24gcmVsLAogCQkJCQkJCQkJCQkgIFRNX0luZGV4RGVsZXRlT3AgKmRlbHN0YXRlKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9u YnRyZWUuaAppbmRleCAxNmJlNWM3YTljMS4uNDJiZDMyOWVhYWQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgK QEAgLTEyMTAsNiArMTIxMCwxMCBAQCBleHRlcm4gaW50CWJ0Z2V0dHJlZWhlaWdodChSZWxhdGlv biByZWwpOwogCiBleHRlcm4gQ29tcGFyZVR5cGUgYnR0cmFuc2xhdGVzdHJhdGVneShTdHJhdGVn eU51bWJlciBzdHJhdGVneSwgT2lkIG9wZmFtaWx5KTsKIGV4dGVybiBTdHJhdGVneU51bWJlciBi dHRyYW5zbGF0ZWNtcHR5cGUoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5KTsKK2V4 dGVybiBib29sIGJ0Y29tcGFyZWRhdHVtcyhSZWxhdGlvbiBpbmRleCwgaW50IGF0dG51bSwKKwkJ CQkJCQlEYXR1bSBvbGRfZGF0dW0sIGJvb2wgb2xkX2lzbnVsbCwKKwkJCQkJCQlEYXR1bSBuZXdf ZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCk7CisKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIGludGVy bmFsIGZ1bmN0aW9ucyBpbiBuYnRyZWUuYwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggOGE1OTMxYTMx MTguLjJiOTIwNmZmMjRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTU0OSw3ICs1NDksNyBAQCB0 eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJCQkJCQkgYm9vbCB3YWl0LAogCQkJCQkJ CQkgVE1fRmFpbHVyZURhdGEgKnRtZmQsCiAJCQkJCQkJCSBMb2NrVHVwbGVNb2RlICpsb2NrbW9k ZSwKLQkJCQkJCQkJIEJpdG1hcHNldCAqdXBkYXRlZF9jb2xzLAorCQkJCQkJCQkgY29uc3QgQml0 bWFwc2V0ICp1cGRhdGVkX2NvbHMsCiAJCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVf aW5kZXhlcyk7CiAKIAkvKiBzZWUgdGFibGVfdHVwbGVfbG9jaygpIGZvciByZWZlcmVuY2UgYWJv dXQgcGFyYW1ldGVycyAqLwpAQCAtMTUwMywxMiArMTUwMywxMiBAQCBzdGF0aWMgaW5saW5lIFRN X1Jlc3VsdAogdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3Rp ZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJICAgQ29tbWFuZElkIGNpZCwgU25hcHNob3Qg c25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCiAJCQkJICAgYm9vbCB3YWl0LCBUTV9GYWls dXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJICAgQml0bWFwc2V0 ICp1cGRhdGVkX2NvbHMsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQorCQkJCSAg IGNvbnN0IEJpdG1hcHNldCAqbWl4X2NvbHMsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRl eGVzKQogewogCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX3VwZGF0ZShyZWwsIG90aWQs IHNsb3QsCiAJCQkJCQkJCQkJIGNpZCwgc25hcHNob3QsIGNyb3NzY2hlY2ssCiAJCQkJCQkJCQkJ IHdhaXQsIHRtZmQsIGxvY2ttb2RlLAotCQkJCQkJCQkJCSB1cGRhdGVkX2NvbHMsIHVwZGF0ZV9p bmRleGVzKTsKKwkJCQkJCQkJCQkgbWl4X2NvbHMsIHVwZGF0ZV9pbmRleGVzKTsKIH0KIAogLyoK QEAgLTIwMTEsNyArMjAxMSw3IEBAIGV4dGVybiB2b2lkIHNpbXBsZV90YWJsZV90dXBsZV9kZWxl dGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJCQkgIFNuYXBzaG90IHNu YXBzaG90KTsKIGV4dGVybiB2b2lkIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24g cmVsLCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwg U25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgIEJpdG1hcHNldCAqbW9kaWZpZWRfaW5kZXhl X2F0dHJzLAorCQkJCQkJCQkJICBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywKIAkJCQkJCQkJ CSAgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogCiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApp bmRleCBkZGE5NWU1NDkwMy4uOGQzNjRmOGIzMGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKQEAgLTEzMiw2 ICsxMzIsNyBAQCBleHRlcm4gYm9vbCBDb21wYXJlSW5kZXhJbmZvKGNvbnN0IEluZGV4SW5mbyAq aW5mbzEsIGNvbnN0IEluZGV4SW5mbyAqaW5mbzIsCiAJCQkJCQkJIGNvbnN0IEF0dHJNYXAgKmF0 dG1hcCk7CiAKIGV4dGVybiB2b2lkIEJ1aWxkU3BlY3VsYXRpdmVJbmRleEluZm8oUmVsYXRpb24g aW5kZXgsIEluZGV4SW5mbyAqaWkpOworZXh0ZXJuIHZvaWQgQnVpbGRVcGRhdGVJbmRleEluZm8o UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbyk7CiAKIGV4dGVybiB2b2lkIEZvcm1JbmRleERh dHVtKEluZGV4SW5mbyAqaW5kZXhJbmZvLAogCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA5OTNkYzBlNmNlZC4uYTE5NTg1YmEwNjUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtNzM5LDYgKzczOSwxMSBAQCBleHRlcm4gQml0bWFw c2V0ICpFeGVjR2V0QWxsVXBkYXRlZENvbHMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywgRVN0YXRl ICplc3RhdGUpOwogICovCiBleHRlcm4gdm9pZCBFeGVjT3BlbkluZGljZXMoUmVzdWx0UmVsSW5m byAqcmVzdWx0UmVsSW5mbywgYm9vbCBzcGVjdWxhdGl2ZSk7CiBleHRlcm4gdm9pZCBFeGVjQ2xv c2VJbmRpY2VzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8pOworZXh0ZXJuIEJpdG1hcHNl dCAqRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKFJlc3VsdFJlbEluZm8gKnJlbGluZm8s CisJCQkJCQkJCQkJCQkgQml0bWFwc2V0ICptaXhfYXR0cnMsCisJCQkJCQkJCQkJCQkgRVN0YXRl ICplc3RhdGUsCisJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJ CQkJCQkgVHVwbGVUYWJsZVNsb3QgKm5ld190dHMpOwogZXh0ZXJuIExpc3QgKkV4ZWNJbnNlcnRJ bmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkgICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgRVN0YXRlICplc3RhdGUsCiAJCQkJCQkJCSAgIGJvb2wgdXBkYXRl LApAQCAtODAwLDkgKzgwNSwxMCBAQCBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhlY0xvb2t1cFJl c3VsdFJlbEJ5T2lkKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUsCiAJCQkJCQkJCQkJCSAgIE9pZCBy ZXN1bHRvaWQsCiAJCQkJCQkJCQkJCSAgIGJvb2wgbWlzc2luZ19vaywKIAkJCQkJCQkJCQkJICAg Ym9vbCB1cGRhdGVfY2FjaGUpOwotZXh0ZXJuIEJpdG1hcHNldCAqRXhlY0NoZWNrSW5kZXhlZEF0 dHJzRm9yQ2hhbmdlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJCQkJ ICBUdXBsZVRhYmxlU2xvdCAqdHRzX29sZCwKLQkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3Qg KnR0c19uZXcpOworZXh0ZXJuIEJpdG1hcHNldCAqRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hh bmdlcyhSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAorCQkJCQkJCQkJCQkJICBFU3RhdGUgKmVzdGF0 ZSwKKwkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJCQkJCQkg IFR1cGxlVGFibGVTbG90ICpuZXdfdHRzKTsKIGV4dGVybiBib29sIHR0c19hdHRyX2VxdWFsKE9p ZCB0eXBpZCwgT2lkIGNvbGxhdGlvbiwgYm9vbCB0eXBieXZhbCwgaW50MTYgdHlwbGVuLAogCQkJ CQkJICAgRGF0dW0gdmFsdWUxLCBEYXR1bSB2YWx1ZTIpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmlu ZGV4IDg5ODM2OGZiOGNiLi5kOGU4ODgxNzIwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3 NCwxNSArMTc0LDI5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwogCSAqLwogCUF0dHJOdW1i ZXIJaWlfSW5kZXhBdHRyTnVtYmVyc1tJTkRFWF9NQVhfS0VZU107CiAKKwkvKgorCSAqIEFsbCBr ZXksIGV4cHJlc3Npb24sIHN1bWFyaXppbmcsIGFuZCBwYXJ0aXRpb24gYXR0cmlidXRlcyByZWZl cmVuY2VkIGJ5CisJICogdGhpcyBpbmRleAorCSAqLworCUJpdG1hcHNldCAgKmlpX0luZGV4ZWRB dHRyczsKKwogCS8qIGV4cHIgdHJlZXMgZm9yIGV4cHJlc3Npb24gZW50cmllcywgb3IgTklMIGlm IG5vbmUgKi8KIAlMaXN0CSAgICppaV9FeHByZXNzaW9uczsgLyogbGlzdCBvZiBFeHByICovCiAJ LyogZXhlYyBzdGF0ZSBmb3IgZXhwcmVzc2lvbnMsIG9yIE5JTCBpZiBub25lICovCiAJTGlzdAkg ICAqaWlfRXhwcmVzc2lvbnNTdGF0ZTsJLyogbGlzdCBvZiBFeHByU3RhdGUgKi8KKwkvKiBhdHRy aWJ1dGVzIGV4Y2x1c2l2ZWx5IHJlZmVyZW5jZWQgYnkgZXhwcmVzc2lvbiBpbmRleGVzICovCisJ Qml0bWFwc2V0ICAqaWlfRXhwcmVzc2lvbnNBdHRyczsKIAogCS8qIHBhcnRpYWwtaW5kZXggcHJl ZGljYXRlLCBvciBOSUwgaWYgbm9uZSAqLwogCUxpc3QJICAgKmlpX1ByZWRpY2F0ZTsJLyogbGlz dCBvZiBFeHByICovCiAJLyogZXhlYyBzdGF0ZSBmb3IgZXhwcmVzc2lvbnMsIG9yIE5JTCBpZiBu b25lICovCiAJRXhwclN0YXRlICAqaWlfUHJlZGljYXRlU3RhdGU7CisJLyogYXR0cmlidXRlcyBy ZWZlcmVuY2VkIGJ5IHRoZSBwcmVkaWNhdGUgKi8KKwlCaXRtYXBzZXQgICppaV9QcmVkaWNhdGVB dHRyczsKKwkvKiBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSBkZXRlcm1pbmVkIHlldD8gKi8KKwli b29sCQlpaV9DaGVja2VkUHJlZGljYXRlOworCS8qIGFtdXBkYXRlIGhpbnQgdXNlZCB0byBhdm9p ZCByZWNoZWNraW5nIHByZWRpY2F0ZSAqLworCWJvb2wJCWlpX1ByZWRpY2F0ZVNhdGlzZmllZDsK IAogCS8qIFBlci1jb2x1bW4gZXhjbHVzaW9uIG9wZXJhdG9ycywgb3IgTlVMTCBpZiBub25lICov CiAJT2lkCQkgICAqaWlfRXhjbHVzaW9uT3BzOwkvKiBhcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIg Y29sdW1uICovCkBAIC00OTQsNiArNTA4LDExIEBAIHR5cGVkZWYgc3RydWN0IFJlc3VsdFJlbElu Zm8KIAlCaXRtYXBzZXQgICpyaV9leHRyYVVwZGF0ZWRDb2xzOwogCS8qIHRydWUgaWYgdGhlIGFi b3ZlIGhhcyBiZWVuIGNvbXB1dGVkICovCiAJYm9vbAkJcmlfZXh0cmFVcGRhdGVkQ29sc192YWxp ZDsKKworCS8qCisJICogRm9yIFVQREFURSBhIEJpdG1hcHNldCBvZiB0aGUgYXR0cmlidXRlcyB0 aGF0IGFyZSBib3RoIGluZGV4ZWQgYW5kIGhhdmUKKwkgKiBjaGFuZ2VkIGluIHZhbHVlLgorCSAq LwogCUJpdG1hcHNldCAgKnJpX0NoYW5nZWRJbmRleGVkQ29sczsKIAogCS8qIFByb2plY3Rpb24g dG8gZ2VuZXJhdGUgbmV3IHR1cGxlIGluIGFuIElOU0VSVC9VUERBVEUgKi8KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0 Lm91dCBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2Nv bmZsaWN0Lm91dAppbmRleCBlMzRhODIxYzQwMy4uNTRiMzk4MTkxOGMgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0Lm91 dAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5zZXJ0LWNvbmZsaWN0LXNwZWNj b25mbGljdC5vdXQKQEAgLTgwLDYgKzgwLDEwIEBAIHBnX2Fkdmlzb3J5X3VubG9jawogdCAgICAg ICAgICAgICAgICAgCiAoMSByb3cpCiAKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMo KSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZp c29yeSBsb2NrIG9uIDIKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQg Zm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29yeSBsb2Nr IG9uIDIKIHMxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQgZm9yIGsxIGlu IHNlc3Npb24gMQogczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29yeSBsb2NrIG9uIDIKIHMx OiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24g MQpAQCAtMTcyLDYgKzE3NiwxMCBAQCBwZ19hZHZpc29yeV91bmxvY2sKIHQgICAgICAgICAgICAg ICAgIAogKDEgcm93KQogCitzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVk IGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9j ayBvbiAyCitzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBp biBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCiBz MjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9u IDIKIHMyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCiBzMjogTk9USUNF OiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKQEAgLTM2 OSw2ICszNzcsMTAgQEAga2V5fGRhdGEKIHN0ZXAgczFfY29tbWl0OiBDT01NSVQ7CiBzMjogTk9U SUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKIHMy OiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitzMjogTk9USUNFOiAgYmx1 cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6 ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xv Y2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBhY3F1aXJp bmcgYWR2aXNvcnkgbG9jayBvbiAyCiBzdGVwIHMyX3Vwc2VydDogPC4uLiBjb21wbGV0ZWQ+CiBz dGVwIGNvbnRyb2xsZXJfc2hvdzogU0VMRUNUICogRlJPTSB1cHNlcnR0ZXN0Owoga2V5fGRhdGEg ICAgICAgCkBAIC01MzAsNiArNTQyLDE0IEBAIGlzb2xhdGlvbi9pbnNlcnQtY29uZmxpY3Qtc3Bl Y2NvbmZsaWN0L3MyfHRyYW5zYWN0aW9uaWR8RXhjbHVzaXZlTG9ja3x0CiBzdGVwIHMyX2NvbW1p dDogQ09NTUlUOwogczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3Ig azEgaW4gc2Vzc2lvbiAxCiBzMTogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24g MgorczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vz c2lvbiAxCitzMTogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24gMgorczE6IE5P VElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAxCitz MTogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24gMgorczE6IE5PVElDRTogIGJs dXJ0X2FuZF9sb2NrXzQoKSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTog IGFjcXVpcmluZyBhZHZpc29yeSBsb2NrIG9uIDQKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9j a180KCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDEKK3MxOiBOT1RJQ0U6ICBhY3F1aXJpbmcg YWR2aXNvcnkgbG9jayBvbiA0CiBzdGVwIHMxX3Vwc2VydDogPC4uLiBjb21wbGV0ZWQ+CiBzdGVw IHMxX25vb3A6IAogc3RlcCBjb250cm9sbGVyX3Nob3c6IFNFTEVDVCAqIEZST00gdXBzZXJ0dGVz dDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaG90X2V4cHJlc3Npb25f aW5kZXhlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2hvdF9leHByZXNzaW9uX2lu ZGV4ZXMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yOWFhZDcw ZTJhYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaG90X2V4 cHJlc3Npb25faW5kZXhlcy5vdXQKQEAgLTAsMCArMSwxMDA2IEBACistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBU ZXN0IFN1aXRlIGZvciBIZWFwLW9ubHkgKEhPVCkgVXBkYXRlcworLS0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gU2V0 dXA6IENyZWF0ZSBmdW5jdGlvbiB0byBtZWFzdXJlIEhPVCB1cGRhdGVzCitDUkVBVEUgT1IgUkVQ TEFDRSBGVU5DVElPTiBjaGVja19ob3RfdXBkYXRlcygKKyAgICBleHBlY3RlZCBJTlQsCisgICAg cF90YWJsZV9uYW1lIFRFWFQgREVGQVVMVCAndCcsCisgICAgcF9zY2hlbWFfbmFtZSBURVhUIERF RkFVTFQgY3VycmVudF9zY2hlbWEoKQorKQorUkVUVVJOUyBUQUJMRSAoCisgICAgdGFibGVfbmFt ZSBURVhULAorICAgIHRvdGFsX3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91cGRhdGVzIEJJR0lO VCwKKyAgICBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgTlVNRVJJQywKKyAgICBtYXRjaGVzX2V4cGVj dGVkIEJPT0xFQU4KKykKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgICAgdl9y ZWxpZCBvaWQ7CisgICAgdl9xdWFsaWZpZWRfbmFtZSBURVhUOworICAgIHZfaG90X3VwZGF0ZXMg QklHSU5UOworICAgIHZfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl94YWN0X2hvdF91cGRhdGVzIEJJ R0lOVDsKKyAgICB2X3hhY3RfdXBkYXRlcyBCSUdJTlQ7CitCRUdJTgorICAgIC0tIEZvcmNlIHN0 YXRpc3RpY3MgdXBkYXRlCisgICAgUEVSRk9STSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsK KworICAgIC0tIEdldCB0YWJsZSBPSUQKKyAgICB2X3F1YWxpZmllZF9uYW1lIDo9IHF1b3RlX2lk ZW50KHBfc2NoZW1hX25hbWUpIHx8ICcuJyB8fCBxdW90ZV9pZGVudChwX3RhYmxlX25hbWUpOwor ICAgIHZfcmVsaWQgOj0gdl9xdWFsaWZpZWRfbmFtZTo6cmVnY2xhc3M7CisKKyAgICBJRiB2X3Jl bGlkIElTIE5VTEwgVEhFTgorCVJBSVNFIEVYQ0VQVElPTiAnVGFibGUgJS4lIG5vdCBmb3VuZCcs IHBfc2NoZW1hX25hbWUsIHBfdGFibGVfbmFtZTsKKyAgICBFTkQgSUY7CisKKyAgICAtLSBHZXQg Y3VtdWxhdGl2ZSArIHRyYW5zYWN0aW9uIHN0YXRzCisgICAgdl9ob3RfdXBkYXRlcyA6PSBDT0FM RVNDRShwZ19zdGF0X2dldF90dXBsZXNfaG90X3VwZGF0ZWQodl9yZWxpZCksIDApOworICAgIHZf dXBkYXRlcyA6PSBDT0FMRVNDRShwZ19zdGF0X2dldF90dXBsZXNfdXBkYXRlZCh2X3JlbGlkKSwg MCk7CisgICAgdl94YWN0X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3hhY3Rf dHVwbGVzX2hvdF91cGRhdGVkKHZfcmVsaWQpLCAwKTsKKyAgICB2X3hhY3RfdXBkYXRlcyA6PSBD T0FMRVNDRShwZ19zdGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKwor ICAgIHZfaG90X3VwZGF0ZXMgOj0gdl9ob3RfdXBkYXRlcyArIHZfeGFjdF9ob3RfdXBkYXRlczsK KyAgICB2X3VwZGF0ZXMgOj0gdl91cGRhdGVzICsgdl94YWN0X3VwZGF0ZXM7CisKKyAgICBSRVRV Uk4gUVVFUlkKKyAgICBTRUxFQ1QKKwlwX3RhYmxlX25hbWU6OlRFWFQsCisJdl91cGRhdGVzOjpC SUdJTlQsCisJdl9ob3RfdXBkYXRlczo6QklHSU5ULAorCUNBU0UgV0hFTiB2X3VwZGF0ZXMgPiAw CisJICAgICBUSEVOIFJPVU5EKCh2X2hvdF91cGRhdGVzOjpudW1lcmljIC8gdl91cGRhdGVzOjpu dW1lcmljICogMTAwKTo6bnVtZXJpYywgMikKKwkgICAgIEVMU0UgMAorCUVORCwKKwkodl9ob3Rf dXBkYXRlcyA9IGV4cGVjdGVkKTo6Qk9PTEVBTjsKK0VORDsKKyQkOworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0g QmFzaWMgSlNPTkIgRXhwcmVzc2lvbiBJbmRleAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQo aWQgSU5UIFBSSU1BUlkgS0VZLCBkb2NzIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfbmFtZV9p ZHggT04gdCgoZG9jcy0+PiduYW1lJykpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7Im5h bWUiOiAiYWxpY2UiLCAiYWdlIjogMzB9Jyk7CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIg ZmllbGQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZG9jcyA9ICd7Im5hbWUiOiAiYWxp Y2UiLCAiYWdlIjogMzF9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRl cyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAg ICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIGlu ZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3Mg PSAneyJuYW1lIjogImJvYiIsICJhZ2UiOiAzMX0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRl cyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAg ICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQor CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgZmllbGQgYWdhaW4gLSBzaG91bGQgYmUgSE9UCitVUERB VEUgdCBTRVQgZG9jcyA9ICd7Im5hbWUiOiAiYm9iIiwgImFnZSI6IDMyfScgV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyLCAndCcpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDIgfCAgICAgICAgICAgICAgICAgNjYuNjcg fCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFBhcnRpYWwgSW5k ZXggd2l0aCBQcmVkaWNhdGUgVHJhbnNpdGlvbnMKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0 KGlkIElOVCwgdmFsdWUgSU5UKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwg ZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X3ZhbHVlX2lkeCBPTiB0KHZhbHVlKSBX SEVSRSB2YWx1ZSA+IDEwOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIDUpOworLS0gQm90aCBv dXRzaWRlIHByZWRpY2F0ZSAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDgg V0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOwor IHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3Bl cmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAg ICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFRyYW5zaXRpb24gaW50byBwcmVkaWNhdGUg LSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMTUgV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAg fCB0CisoMSByb3cpCisKKy0tIEJvdGggaW5zaWRlIHByZWRpY2F0ZSwgdmFsdWUgY2hhbmdlcyAt IHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSAyMCBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8 IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1h dGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAg ICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8 IHQKKygxIHJvdykKKworLS0gVHJhbnNpdGlvbiBvdXQgb2YgcHJlZGljYXRlIC0gc2hvdWxkIE5P VCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDUgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICA0IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMjUuMDAgfCB0CisoMSByb3cp CisKKy0tIEJvdGggb3V0c2lkZSBwcmVkaWNhdGUgYWdhaW4gLSBzaG91bGQgYmUgSE9UCitVUERB VEUgdCBTRVQgdmFsdWUgPSAzIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMiwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRh dGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNSB8ICAgICAg ICAgICAyIHwgICAgICAgICAgICAgICAgIDQwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxF IHQ7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLSBFeHByZXNzaW9uIEluZGV4IHdpdGggUGFydGlhbCBQcmVkaWNh dGUKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGRvY3MgSlNPTkIpCisgICAgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRf aWR4IE9OIHQoKGRvY3MtPj4nc3RhdHVzJykpCisgICAgV0hFUkUgKGRvY3MtPj4ncHJpb3JpdHkn KTo6aW50ID4gNTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgneyJzdGF0dXMiOiAicGVuZGluZyIs ICJwcmlvcml0eSI6IDN9Jyk7CistLSBCb3RoIG91dHNpZGUgcHJlZGljYXRlLCBzdGF0dXMgdW5j aGFuZ2VkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJzdGF0dXMiOiAi cGVuZGluZyIsICJwcmlvcml0eSI6IDR9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwg aG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAx IHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBUcmFuc2l0aW9uIGlu dG8gcHJlZGljYXRlIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0gJ3si c3RhdHVzIjogInBlbmRpbmciLCAicHJpb3JpdHkiOiAxMH0nOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90 X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwg ICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisKKy0tIElu c2lkZSBwcmVkaWNhdGUsIHN0YXR1cyBjaGFuZ2VzIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFU RSB0IFNFVCBkb2NzID0gJ3sic3RhdHVzIjogImFjdGl2ZSIsICJwcmlvcml0eSI6IDEwfSc7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRv dGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNo ZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8 ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQK KygxIHJvdykKKworLS0gSW5zaWRlIHByZWRpY2F0ZSwgc3RhdHVzIHVuY2hhbmdlZCAtIHNob3Vs ZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0gJ3sic3RhdHVzIjogImFjdGl2ZSIsICJwcmlv cml0eSI6IDh9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMiwgJ3QnKTsKKyB0 YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJj ZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNCB8ICAgICAgICAgICAyIHwgICAgICAgICAgICAg ICAgIDUwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBH SU4gSW5kZXggb24gSlNPTkIKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZGF0 YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3Ig PSA3MCk7CitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQgVVNJTkcgZ2luKGRhdGEpOworSU5T RVJUIElOVE8gdCBWQUxVRVMgKDEsICd7InRhZ3MiOiBbInBvc3RncmVzIiwgImRhdGFiYXNlIl19 Jyk7CistLSBDaGFuZ2UgdGFncyAtIEdJTiBrZXlzIGNoYW5nZWQsIHNob3VsZCBOT1QgYmUgSE9U CitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3MiOiBbInBvc3RncmVzIiwgInNxbCJdfScgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndCcpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAg ICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5nZSB0YWdzIGFnYWluIC0gR0lOIGtleXMg Y2hhbmdlZCwgc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6 IFsibXlzcWwiLCAic3FsIl19JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hv dF91cGRhdGVzKDAsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBk YXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAg ICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKworLS0gQWRkIGZp ZWxkIHdpdGhvdXQgY2hhbmdpbmcgZXhpc3Rpbmcga2V5cyAtIEdJTiBrZXlzIGNoYW5nZWQgKGFk ZGVkICJub3RlIiksIE5PVCBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6IFsibXlz cWwiLCAic3FsIl0sICJub3RlIjogInRlc3QifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygwLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVz IHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVk IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICAzIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisK K0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJTiBJbmRleCB3aXRoIFVuY2hhbmdlZCBL ZXlzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworLS0gQ3Jl YXRlIEdJTiBpbmRleCBvbiBzcGVjaWZpYyBwYXRoCitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9O IHQgVVNJTkcgZ2luKChkYXRhLT4ndGFncycpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAn eyJ0YWdzIjogWyJwb3N0Z3JlcyIsICJzcWwiXSwgInN0YXR1cyI6ICJhY3RpdmUifScpOworLS0g Q2hhbmdlIG5vbi1pbmRleGVkIGZpZWxkIC0gR0lOIGtleXMgb24gJ3RhZ3MnIHVuY2hhbmdlZCwg c2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJwb3N0Z3JlcyIs ICJzcWwiXSwgInN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0 ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0 ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAg ICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykK KworLS0gQ2hhbmdlIGluZGV4ZWQgdGFncyAtIEdJTiBrZXlzIGNoYW5nZWQsIHNob3VsZCBOT1Qg YmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3MiOiBbIm15c3FsIiwgInNxbCJdLCAi c3RhdHVzIjogImluYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91 cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAg ICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRB QkxFIHQ7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLSBHSU4gd2l0aCBqc29uYl9wYXRoX29wcworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2dpbl9p ZHggT04gdCBVU0lORyBnaW4oZGF0YSBqc29uYl9wYXRoX29wcyk7CitJTlNFUlQgSU5UTyB0IFZB TFVFUyAoMSwgJ3sidXNlciI6IHsibmFtZSI6ICJhbGljZSJ9LCAidGFncyI6IFsiYSIsICJiIl19 Jyk7CistLSBDaGFuZ2UgdmFsdWUgYXQgZGlmZmVyZW50IHBhdGggLSBrZXlzIGNoYW5nZWQsIE5P VCBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidXNlciI6IHsibmFtZSI6ICJib2IifSwgInRh Z3MiOiBbImEiLCAiYiJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygwLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0 ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAg ICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUg dDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIE11bHRpLUNvbHVtbiBFeHByZXNzaW9uIEluZGV4CistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGEgSU5ULCBiIElOVCkKKyAgICBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9p ZHggT04gdChpZCwgYWJzKGEpLCBhYnMoYikpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIC01 LCAtMTApOworLS0gQ2hhbmdlIHNpZ24gYnV0IG5vdCBhYnMgdmFsdWUgLSBzaG91bGQgYmUgSE9U CitVUERBVEUgdCBTRVQgYSA9IDUgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAg ICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5n ZSBhYnMgdmFsdWUgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGIgPSAtMTUgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAg ICAgNTAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5nZSBpZCAtIHNob3VsZCBOT1QgYmUgSE9U CitVUERBVEUgdCBTRVQgaWQgPSAyIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91 cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMyB8ICAg ICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMzLjMzIHwgdAorKDEgcm93KQorCitEUk9QIFRB QkxFIHQ7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLSBNaXhlZCBJbmRleCBUeXBlcyAoQlJJTiArIEV4cHJlc3Np b24pCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIHZhbHVlIElOVCwgZGF0YSBK U09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3 MCk7CitDUkVBVEUgSU5ERVggdF9icmluX2lkeCBPTiB0IFVTSU5HIGJyaW4odmFsdWUpOworQ1JF QVRFIElOREVYIHRfZXhwcl9pZHggT04gdCgoZGF0YS0+PidzdGF0dXMnKSk7CitJTlNFUlQgSU5U TyB0IFZBTFVFUyAoMSwgMTAwLCAneyJzdGF0dXMiOiAiYWN0aXZlIn0nKTsKKy0tIFVwZGF0ZSBv bmx5IEJSSU4gY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMjAw IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsK KyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9w ZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAg ICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgb25seSBleHByZXNzaW9uIGNv bHVtbiAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6 ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8 IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAg MSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIGJvdGgg LSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMzAwLCBkYXRhID0gJ3si c3RhdHVzIjogInBlbmRpbmcifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAg ICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisKK0RST1AgVEFC TEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKy0tIEV4cHJlc3Npb24gd2l0aCBDT0xMQVRJT04gYW5kIEJUUkVF IChuYnRyZWUpIGluZGV4CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgQ09MTEFUSU9OIGNhc2VfaW5zZW5z aXRpdmUgKAorICAgIHByb3ZpZGVyID0gbGliYywKKyAgICBsb2NhbGUgPSAnQycKKyk7CitDUkVB VEUgVEFCTEUgdCgKKyAgICBpZCBJTlQgUFJJTUFSWSBLRVksCisgICAgbmFtZSBURVhUIENPTExB VEUgY2FzZV9pbnNlbnNpdGl2ZQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZp bGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9sb3dlcl9pZHggT04gdCBVU0lORyBCVFJF RSAobmFtZSBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUpOworSU5TRVJUIElOVE8gdCBWQUxVRVMg KDEsICdBTElDRScpOworLS0gQ2hhbmdlIGNhc2UgYnV0IG5vdCB2YWx1ZSAtIHNob3VsZCBOT1Qg YmUgSE9UIGluIEJUUkVFCitVUERBVEUgdCBTRVQgbmFtZSA9ICdBbGljZScgV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndCcpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAg fCB0CisoMSByb3cpCisKKy0tIENoYW5nZSB0byBuZXcgdmFsdWUgLSBzaG91bGQgTk9UIGJlIEhP VAorVVBEQVRFIHQgU0VUIG5hbWUgPSAnQk9CJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDAsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDIgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKwor RFJPUCBUQUJMRSB0OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gQXJyYXkgRXhwcmVzc2lvbiBJbmRleAorLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCB0YWdzIFRFWFRbXSkKKyAgICBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVgg dF9hcnJheV9sZW5faWR4IE9OIHQoYXJyYXlfbGVuZ3RoKHRhZ3MsIDEpKTsKK0lOU0VSVCBJTlRP IHQgVkFMVUVTICgxLCBBUlJBWVsnYScsICdiJywgJ2MnXSk7CistLSBTYW1lIGxlbmd0aCwgZGlm ZmVyZW50IGVsZW1lbnRzIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHRhZ3MgPSBBUlJB WVsnZCcsICdlJywgJ2YnXSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRl cyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAg ICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gRGlmZmVyZW50 IGxlbmd0aCAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgdGFncyA9IEFSUkFZWydk JywgJ2UnXSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEs ICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91 cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAg ICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0OworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorLS0gTmVzdGVkIEpTT05CIEV4cHJlc3Npb24gYW5kIEpTT05CIGVxdWFsaXR5ICctPicg KG5vdCAnLT4+JykKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGRhdGEgSlNPTkIpCisgICAg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRF IElOREVYIHRfbmVzdGVkX2lkeCBPTiB0KChkYXRhLT4ndXNlcictPiduYW1lJykpOworSU5TRVJU IElOVE8gdCBWQUxVRVMgKCd7InVzZXIiOiB7Im5hbWUiOiAiYWxpY2UiLCAiYWdlIjogMzB9fScp OworLS0gQ2hhbmdlIG5lc3RlZCBub24taW5kZXhlZCBmaWVsZCAtIHNob3VsZCBiZSBIT1QKK1VQ REFURSB0IFNFVCBkYXRhID0gJ3sidXNlciI6IHsibmFtZSI6ICJhbGljZSIsICJhZ2UiOiAzMX19 JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAw IHwgdAorKDEgcm93KQorCistLSBDaGFuZ2UgbmVzdGVkIGluZGV4ZWQgZmllbGQgLSBzaG91bGQg Tk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ1c2VyIjogeyJuYW1lIjogImJvYiIs ICJhZ2UiOiAzMX19JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsK KyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9w ZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAg ICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist LSBDb21wbGV4IFByZWRpY2F0ZSBvbiBNdWx0aXBsZSBKU09OQiBGaWVsZHMKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K K0NSRUFURSBUQUJMRSB0KGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaWR4IE9OIHQoKGRhdGEt Pj4nc3RhdHVzJykpCisgICAgV0hFUkUgKGRhdGEtPj4ncHJpb3JpdHknKTo6aW50ID4gNQorICAg ICAgQU5EIChkYXRhLT4+J2FjdGl2ZScpOjpib29sZWFuID0gdHJ1ZTsKK0lOU0VSVCBJTlRPIHQg VkFMVUVTICgneyJzdGF0dXMiOiAicGVuZGluZyIsICJwcmlvcml0eSI6IDMsICJhY3RpdmUiOiB0 cnVlfScpOworLS0gT3V0c2lkZSBwcmVkaWNhdGUgKHByaW9yaXR5IHRvbyBsb3cpIC0gc2hvdWxk IGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJzdGF0dXMiOiAiZG9uZSIsICJwcmlvcml0 eSI6IDMsICJhY3RpdmUiOiB0cnVlfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhv dF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8 ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVHJhbnNpdGlvbiBpbnRv IHByZWRpY2F0ZSAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0 YXR1cyI6ICJkb25lIiwgInByaW9yaXR5IjogMTAsICJhY3RpdmUiOiB0cnVlfSc7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3Vw ZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhw ZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAg ICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJv dykKKworLS0gSW5zaWRlIHByZWRpY2F0ZSwgY2hhbmdlIHRvIG91dHNpZGUgKGFjdGl2ZSA9IGZh bHNlKSAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6 ICJkb25lIiwgInByaW9yaXR5IjogMTAsICJhY3RpdmUiOiBmYWxzZX0nOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVz IHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVk IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICAzIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisK K0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJTiBBcnJheSBJbmRleCAtIE9yZGVyIElu c2Vuc2l0aXZlIEV4dHJhY3Rpb24KKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KAorICAgIGlk IElOVCBQUklNQVJZIEtFWSwKKyAgICBkYXRhIEpTT05CCispIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKKy0tIEdJTiBpbmRleCBvbiBKU09OQiBhcnJh eSAoZXh0cmFjdHMgYWxsIGVsZW1lbnRzKQorQ1JFQVRFIElOREVYIHRfaXRlbXNfZ2luIE9OIHQg VVNJTkcgR0lOICgoZGF0YS0+J2l0ZW1zJykpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7 Iml0ZW1zIjogWzEsIDIsIDNdLCAic3RhdHVzIjogImFjdGl2ZSJ9Jyk7CistLSBVcGRhdGU6IFJl b3JkZXIgYXJyYXkgZWxlbWVudHMKKy0tIEpTT05CIGVxdWFsaXR5OiBOT1QgZXF1YWwgKGRpZmZl cmVudCBhcnJheXMpCistLSBHSU4gZXh0cmFjdGlvbjogU2FtZSBlbGVtZW50cyBleHRyYWN0ZWQg KG1pZ2h0IGFsbG93IEhPVCBpZiBub3QgY2FyZWZ1bCkKK1VQREFURSB0IFNFVCBkYXRhID0gJ3si aXRlbXMiOiBbMywgMiwgMV0sICJzdGF0dXMiOiAiYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90 YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hl c19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwg ICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAor KDEgcm93KQorCistLSBVcGRhdGU6IEFkZC9yZW1vdmUgZWxlbWVudAorVVBEQVRFIHQgU0VUIGRh dGEgPSAneyJpdGVtcyI6IFsxLCAyLCAzLCA0XSwgInN0YXR1cyI6ICJhY3RpdmUifScgV0hFUkUg aWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxl X25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRh Z2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAg NTAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRPQVNU ZWQgVmFsdWVzIGluIEV4cHJlc3Npb24gSW5kZXgKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0 KGlkIElOVCwgbGFyZ2VfdGV4dCBURVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X3N1YnN0cl9pZHggT04gdChz dWJzdHIobGFyZ2VfdGV4dCwgMSwgMTApKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCByZXBl YXQoJ3gnLCA1MDAwKSB8fCAnaWRlbnRpZmllcicpOworLS0gQ2hhbmdlIGVuZCBvZiBzdHJpbmcs IHByZWZpeCB1bmNoYW5nZWQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgbGFyZ2VfdGV4 dCA9IHJlcGVhdCgneCcsIDUwMDApIHx8ICdkaWZmZXJlbnQnIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19l eHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEg cm93KQorCistLSBDaGFuZ2UgcHJlZml4IC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNF VCBsYXJnZV90ZXh0ID0gcmVwZWF0KCd5JywgNTAwMCkgfHwgJ2RpZmZlcmVudCcgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25h bWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2Ug fCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAg ICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAu MDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRFU1Q6IEdJ TiB3aXRoIFRPQVNUZWQgVEVYVCAodHN2ZWN0b3IpCistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUg dChpZCBJTlQsIGNvbnRlbnQgVEVYVCwgc2VhcmNoX3ZlYyB0c3ZlY3RvcikKKyAgICBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CistLSBDcmVhdGUgdHJp Z2dlciB0byBtYWludGFpbiB0c3ZlY3RvcgorQ1JFQVRFIFRSSUdHRVIgdHN2ZWN0b3J1cGRhdGVf dG9hc3QKKyAgICBCRUZPUkUgSU5TRVJUIE9SIFVQREFURSBPTiB0CisgICAgRk9SIEVBQ0ggUk9X IEVYRUNVVEUgRlVOQ1RJT04KKyAgICB0c3ZlY3Rvcl91cGRhdGVfdHJpZ2dlcihzZWFyY2hfdmVj LCAncGdfY2F0YWxvZy5lbmdsaXNoJywgY29udGVudCk7CitDUkVBVEUgSU5ERVggdF9naW4gT04g dCBVU0lORyBnaW4oc2VhcmNoX3ZlYyk7CistLSBJbnNlcnQgd2l0aCBsYXJnZSBjb250ZW50ICh3 aWxsIGJlIFRPQVNUZWQpCitJTlNFUlQgSU5UTyB0IChpZCwgY29udGVudCkgVkFMVUVTCisgICAg KDEsIHJlcGVhdCgnaW1wb3J0YW50IGtleXdvcmQgJywgMTAwMCkgfHwgcmVwZWF0KCdmaWxsZXIg dGV4dCAnLCAxMDAwMCkpOworLS0gVmVyaWZ5IGluaXRpYWwgc3RhdGUKK1NFTEVDVCBjb3VudCgq KSBGUk9NIHQgV0hFUkUgc2VhcmNoX3ZlYyBAQCB0b190c3F1ZXJ5KCdpbXBvcnRhbnQnKTsKKyBj b3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSByb3cKKy0t IElNUE9SVEFOVDogVGhlIEJFRk9SRSBVUERBVEUgdHJpZ2dlciBtb2RpZmllcyBzZWFyY2hfdmVj LCBzbyBieSB0aGUgdGltZQorLS0gRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgcnVu cywgc2VhcmNoX3ZlYyBoYXMgYWxyZWFkeSBjaGFuZ2VkLgorLS0gVGhpcyBtZWFucyB0aGUgY29t cGFyaXNvbiBzZWVzIG9sZCB0c3ZlY3RvciB2cy4gdHJpZ2dlci1tb2RpZmllZCB0c3ZlY3RvciwK Ky0tIG5vdCB0aGUgbmF0dXJhbCBwcm9ncmVzc2lvbi4gSE9UIHdvbid0IGhhcHBlbiBiZWNhdXNl IHRoZSB0cmlnZ2VyIGNoYW5nZWQKKy0tIHRoZSBpbmRleGVkIGNvbHVtbi4KKy0tIFVwZGF0ZTog RXZlbiB0aG91Z2ggY29udGVudCBrZXl3b3JkcyB1bmNoYW5nZWQsIHRyaWdnZXIgc3RpbGwgZmly ZXMKK1VQREFURSB0CitTRVQgY29udGVudCA9IHJlcGVhdCgnaW1wb3J0YW50IGtleXdvcmQgJywg MTAwMCkgfHwgcmVwZWF0KCdkaWZmZXJlbnQgZmlsbGVyICcsIDEwMDAwKQorV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndCcpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAg fCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAwIEhPVCAodHJpZ2dlciBtb2RpZmllcyBzZWFy Y2hfdmVjLCBibG9ja2luZyBIT1QpCistLSBUaGlzIGlzIGFjdHVhbGx5IGNvcnJlY3QgYmVoYXZp b3IgLSB0aGUgdHJpZ2dlciB1cGRhdGVkIGFuIGluZGV4ZWQgY29sdW1uCistLSBVcGRhdGU6IENo YW5nZSBpbmRleGVkIGtleXdvcmRzCitVUERBVEUgdAorU0VUIGNvbnRlbnQgPSByZXBlYXQoJ2Ny aXRpY2FsIGtleXdvcmQgJywgMTAwMCkgfHwgcmVwZWF0KCdkaWZmZXJlbnQgZmlsbGVyICcsIDEw MDAwKQorV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAn dCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBk YXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDAgfCAgICAg ICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAwIEhPVCAoaW5k ZXgga2V5cyBjaGFuZ2VkKQorLS0gVmVyaWZ5IHF1ZXJ5IGNvcnJlY3RuZXNzCitTRUxFQ1QgY291 bnQoKikgRlJPTSB0IFdIRVJFIHNlYXJjaF92ZWMgQEAgdG9fdHNxdWVyeSgnY3JpdGljYWwnKTsK KyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSByb3cK K0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVEVTVDogR0lOIHdpdGggVE9B U1RlZCBKU09OQgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05C KQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsK K0NSRUFURSBJTkRFWCB0X2dpbiBPTiB0IFVTSU5HIGdpbigoZGF0YS0+J3RhZ3MnKSk7CistLSBJ bnNlcnQgd2l0aCBUT0FTVGVkIEpTT05CCitJTlNFUlQgSU5UTyB0IChpZCwgZGF0YSkgVkFMVUVT CisgICAgKDEsIGpzb25iX2J1aWxkX29iamVjdCgKKyAgICAgICAgJ3RhZ3MnLCAnWyJwb3N0Z3Jl cyIsICJkYXRhYmFzZSJdJzo6anNvbmIsCisgICAgICAgICdsYXJnZV9maWVsZCcsIHJlcGVhdCgn eCcsIDEwMDAwKQorICAgICkpOworLS0gVXBkYXRlOiBDaGFuZ2UgbGFyZ2VfZmllbGQsIHRhZ3Mg dW5jaGFuZ2VkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQKK1NFVCBkYXRhID0ganNvbmJfYnVp bGRfb2JqZWN0KAorICAgICd0YWdzJywgJ1sicG9zdGdyZXMiLCAiZGF0YWJhc2UiXSc6Ompzb25i LAorICAgICdsYXJnZV9maWVsZCcsIHJlcGVhdCgneScsIDEwMDAwKQorKQorV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAg fCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAxIEhPVCB1cGRhdGUKKy0tIFVwZGF0ZTogQ2hh bmdlIHRhZ3MgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQKK1NFVCBkYXRhID0ganNvbmJf YnVpbGRfb2JqZWN0KAorICAgICd0YWdzJywgJ1sicG9zdGdyZXMiLCAic3FsIl0nOjpqc29uYiwK KyAgICAnbGFyZ2VfZmllbGQnLCByZXBlYXQoJ3knLCAxMDAwMCkKKykKK1dIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwg dG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0 Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg IHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwg dAorKDEgcm93KQorCistLSBFeHBlY3RlZDogU3RpbGwgMSBIT1QKKy0tIFZlcmlmeSBjb3JyZWN0 bmVzcworU0VMRUNUIGNvdW50KCopIEZST00gdCBXSEVSRSBkYXRhLT4ndGFncycgQD4gJ1siZGF0 YWJhc2UiXSc6Ompzb25iOworIGNvdW50IAorLS0tLS0tLQorICAgICAwCisoMSByb3cpCisKKy0t IEV4cGVjdGVkOiAwIHJvd3MKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hFUkUgZGF0YS0+J3Rh Z3MnIEA+ICdbInNxbCJdJzo6anNvbmI7CisgY291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJv dykKKworLS0gRXhwZWN0ZWQ6IDEgcm93CitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIFRFU1Q6IEdJTiB3aXRoIEFycmF5IG9mIExhcmdlIFN0cmluZ3MKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K K0NSRUFURSBUQUJMRSB0KGlkIElOVCwgdGFncyBURVhUW10pCisgICAgV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfZ2luIE9O IHQgVVNJTkcgZ2luKHRhZ3MpOworLS0gSW5zZXJ0IHdpdGggbGFyZ2UgYXJyYXkgZWxlbWVudHMg KG1pZ2h0IGJlIFRPQVNUZWQpCitJTlNFUlQgSU5UTyB0IChpZCwgdGFncykgVkFMVUVTCisgICAg KDEsIEFSUkFZW3JlcGVhdCgndGFnMScsIDEwMDApLCByZXBlYXQoJ3RhZzInLCAxMDAwKV0pOwor LS0gVXBkYXRlOiBDaGFuZ2UgdG8gZGlmZmVyZW50IGxhcmdlIHZhbHVlcyAtIE5PVCBIT1QKK1VQ REFURSB0CitTRVQgdGFncyA9IEFSUkFZW3JlcGVhdCgndGFnMycsIDEwMDApLCByZXBlYXQoJ3Rh ZzQnLCAxMDAwKV0KK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMCwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwg aG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAw IHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMCBI T1QgKGtleXMgYWN0dWFsbHkgY2hhbmdlZCkKKy0tIFVwZGF0ZTogS2VlcCBzYW1lIHRhZyB2YWx1 ZXMsIGp1c3QgcmVvcmRlciAtIFNIT1VMRCBCRSBIT1QKKy0tIChHSU4gaXMgb3JkZXItaW5zZW5z aXRpdmU6IGJvdGggW3RhZzMsdGFnNF0gYW5kIFt0YWc0LHRhZzNdCistLSBleHRyYWN0IHRvIHRo ZSBzYW1lIHNvcnRlZCBrZXkgc2V0IFsndGFnMycsJ3RhZzQnXSkKK1VQREFURSB0CitTRVQgdGFn cyA9IEFSUkFZW3JlcGVhdCgndGFnNCcsIDEwMDApLCByZXBlYXQoJ3RhZzMnLCAxMDAwKV0KK1dI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0 YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJj ZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAg ICAgIDUwLjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSBIT1QgKEdJTiBrZXlzIHNl bWFudGljYWxseSBpZGVudGljYWwpCistLSBVcGRhdGU6IFJlbW92ZSBhbiBlbGVtZW50IC0gTk9U IEhPVCAoa2V5cyBjaGFuZ2VkKQorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlbcmVwZWF0KCd0 YWc0JywgMTAwMCldCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8 IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAg MSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IFN0 aWxsIDEgSE9UIChub3QgdGhpcyBvbmUpCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIEJSSU4gSW5kZXggd2l0aCBQYXJ0aWFsIFByZWRpY2F0ZQorLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JF QVRFIFRBQkxFIHQoCisgICAgaWQgSU5UIFBSSU1BUlkgS0VZLAorICAgIHZhbHVlIElOVCwKKyAg ICBkZXNjcmlwdGlvbiBURVhUCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmls bGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2JyaW5fcGFydGlhbF9pZHggT04gdCBVU0lO RyBicmluKHZhbHVlKSBXSEVSRSB2YWx1ZSA+IDEwMDsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgx LCA1MCwgJ2JlbG93IHJhbmdlJyk7CistLSBUZXN0IDE6IE91dHNpZGUgcHJlZGljYXRlCitVUERB VEUgdCBTRVQgZGVzY3JpcHRpb24gPSAndXBkYXRlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cp CisKKy0tIFZhbGlkYXRlOiBQcmVkaWNhdGUgcXVlcnkgcmV0dXJucyAwIHJvd3MKK1NFTEVDVCBD T1VOVCgqKSBhcyBjbnQgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworIGNudCAKKy0tLS0tCisg ICAwCisoMSByb3cpCisKKy0tIFRlc3QgMjogVHJhbnNpdGlvbiBpbnRvIHByZWRpY2F0ZQorVVBE QVRFIHQgU0VUIHZhbHVlID0gMTUwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMiwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91 cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAg ICAgICAgICAyIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBWYWxp ZGF0ZTogUHJlZGljYXRlIHF1ZXJ5IHJldHVybnMgMSByb3cgd2l0aCBjb3JyZWN0IHZhbHVlCitT RUxFQ1QgQ09VTlQoKikgYXMgY250LCBNQVgodmFsdWUpIGFzIG1heF92YWwgRlJPTSB0IFdIRVJF IHZhbHVlID4gMTAwOworIGNudCB8IG1heF92YWwgCistLS0tLSstLS0tLS0tLS0KKyAgIDEgfCAg ICAgMTUwCisoMSByb3cpCisKKy0tIFRlc3QgMzogSW5zaWRlIHByZWRpY2F0ZSwgdmFsdWUgY2hh bmdlcworVVBEQVRFIHQgU0VUIHZhbHVlID0gMTYwLCBkZXNjcmlwdGlvbiA9ICd1cGRhdGVkIGFn YWluJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMsICd0 Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRh dGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMyB8ICAgICAg ICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVmFsaWRhdGU6IFVwZGF0ZWQgdmFs dWUgKDE2MCkgaXMgcmV0dXJuZWQKK1NFTEVDVCBDT1VOVCgqKSBhcyBjbnQsIE1BWCh2YWx1ZSkg YXMgbWF4X3ZhbCBGUk9NIHQgV0hFUkUgdmFsdWUgPiAxMDA7CisgY250IHwgbWF4X3ZhbCAKKy0t LS0tKy0tLS0tLS0tLQorICAgMSB8ICAgICAxNjAKKygxIHJvdykKKworLS0gVGVzdCA0OiBUcmFu c2l0aW9uIG91dCBvZiBwcmVkaWNhdGUKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDUwIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoNCwgJ3QnKTsKKyB0YWJsZV9u YW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdl IHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgIHwgICAgICAgICAgICAgNCB8ICAgICAgICAgICA0IHwgICAgICAgICAgICAgICAgMTAw LjAwIHwgdAorKDEgcm93KQorCitTRUxFQ1QgQ09VTlQoKikgYXMgY250IEZST00gdCBXSEVSRSB2 YWx1ZSA+IDEwMDsKKyBjbnQgCistLS0tLQorICAgMAorKDEgcm93KQorCitTRUxFQ1QgaWQsIHZh bHVlLCBkZXNjcmlwdGlvbiBGUk9NIHQ7CisgaWQgfCB2YWx1ZSB8ICBkZXNjcmlwdGlvbiAgCist LS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgIDEgfCAgICA1MCB8IHVwZGF0ZWQgYWdhaW4K KygxIHJvdykKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBIQVNIIElu ZGV4IChTaW1wbGUgQ29sdW1uKQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBj b2RlIFZBUkNIQVIoMjApLCBkZXNjcmlwdGlvbiBURVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfaWR4 IE9OIHQgVVNJTkcgaGFzaChjb2RlKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnQ09ERTAw MScsICdpbml0aWFsJyk7CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJl IEhPVAorVVBEQVRFIHQgU0VUIGRlc2NyaXB0aW9uID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwg dG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0 Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg IHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwg dAorKDEgcm93KQorCistLSBVcGRhdGUgaW5kZXhlZCBjb2x1bW4gLSBIQVNIIGluZGV4IHJlcXVp cmVzIHVwZGF0ZSwgTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNvZGUgPSAnQ09ERTAwMicgV0hFUkUg aWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxl X25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRh Z2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAg NTAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSBib3RoIC0gTk9UIEhPVAorVVBEQVRFIHQg U0VUIGNvZGUgPSAnQ09ERTAwMycsIGRlc2NyaXB0aW9uID0gJ2NoYW5nZWQnIFdIRVJFIGlkID0g MTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMzLjMz IHwgdAorKDEgcm93KQorCistLSBCYWNrIHRvIG9yaWdpbmFsIGNvZGUgLSBOT1QgSE9UIChkaWZm ZXJlbnQgaGFzaCBidWNrZXQgbG9jYXRpb24pCitVUERBVEUgdCBTRVQgY29kZSA9ICdDT0RFMDAx JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7 CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVf cGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMSB8ICAgICAgICAg ICAgICAgICAyNS4wMCB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLSBIQVNIIEluZGV4IG9uIEV4cHJlc3Npb24KKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBU QUJMRSB0KGlkIElOVCwgZW1haWwgVEVYVCwgZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9oYXNo X2xvd2VyX2VtYWlsX2lkeCBPTiB0IFVTSU5HIEhBU0gobG93ZXIoZW1haWwpKTsKK0lOU0VSVCBJ TlRPIHQgVkFMVUVTICgxLCAnQWxpY2VARXhhbXBsZS5jb20nLCAneyJzdGF0dXMiOiAibmV3In0n KTsKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBmaWVsZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0 IFNFVCBkYXRhID0gJ3sic3RhdHVzIjogImFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3Vw ZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhw ZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAg ICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJv dykKKworLS0gVXBkYXRlIGVtYWlsIHdpdGggY2FzZSBjaGFuZ2Ugb25seSAoc2FtZSBsb3dlcmNh c2UpIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGVtYWlsID0gJ2FsaWNlQGV4YW1wbGUu Y29tJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0 Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRh dGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMiB8ICAgICAg ICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIGVtYWlsIHRvIGRpZmZl cmVudCBsb3dlcmNhc2UgLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgZW1haWwgPSAnYm9iQGV4YW1w bGUuY29tJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIs ICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91 cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMiB8ICAg ICAgICAgICAgICAgICA2Ni42NyB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0IENBU0NBREU7 CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLSBIQVNIIEluZGV4IG9uIEpTT05CIEZpZWxkCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitD UkVBVEUgVEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9jYXRl Z29yeV9pZHggT04gdCBVU0lORyBoYXNoKChkYXRhLT4+J2NhdGVnb3J5JykpOworSU5TRVJUIElO VE8gdCBWQUxVRVMgKDEsICd7ImNhdGVnb3J5IjogImJvb2tzIiwgInRpdGxlIjogIlBvc3RncmVT UUwgR3VpZGUifScpOworLS0gVXBkYXRlIG5vbi1pbmRleGVkIEpTT05CIGZpZWxkIC0gc2hvdWxk IGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJjYXRlZ29yeSI6ICJib29rcyIsICJ0aXRs ZSI6ICJQb3N0Z3JlU1FMIEhhbmRib29rIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAK Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAg MSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCist LSBVcGRhdGUgaW5kZXhlZCBKU09OQiBmaWVsZCAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBkYXRh ID0gJ3siY2F0ZWdvcnkiOiAidmlkZW9zIiwgInRpdGxlIjogIlBvc3RncmVTUUwgSGFuZGJvb2si fScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcp OworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRl X3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAg ICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSBib3RoIC0gTk9UIEhPVAor VVBEQVRFIHQgU0VUIGRhdGEgPSAneyJjYXRlZ29yeSI6ICJjb3Vyc2VzIiwgInRpdGxlIjogIlBv c3RncmVTUUwgQmFzaWNzIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRh dGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAg ICAgICAxIHwgICAgICAgICAgICAgICAgIDMzLjMzIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxF IHQgQ0FTQ0FERTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIE11bHRpcGxlIEhBU0ggSW5kZXhlcworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBjYXRlZ29yeSBWQVJDSEFSLCBzdGF0dXMgVkFS Q0hBUiwgdmFsdWUgSU5UKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmls bGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfY2F0ZWdvcnlfaWR4IE9OIHQgVVNJ TkcgaGFzaChjYXRlZ29yeSk7CitDUkVBVEUgSU5ERVggdF9oYXNoX3N0YXR1c19pZHggT04gdCBV U0lORyBoYXNoKHN0YXR1cyk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ2VsZWN0cm9uaWNz JywgJ2FjdGl2ZScsIDEwMCk7CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxk IGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMTUwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBk YXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBl Y3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAg ICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93 KQorCistLSBVcGRhdGUgb25lIGluZGV4ZWQgY29sdW1uIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VU IGNhdGVnb3J5ID0gJ2Jvb2tzJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hv dF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBk YXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAg ICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRl IG90aGVyIGluZGV4ZWQgY29sdW1uIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIHN0YXR1cyA9ICdp bmFjdGl2ZScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygx LCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3Rf dXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDEgfCAg ICAgICAgICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSBib3RoIGluZGV4 ZWQgY29sdW1ucyAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBjYXRlZ29yeSA9ICd2aWRlb3MnLCBz dGF0dXMgPSAncGVuZGluZycgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0 ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICA0IHwgICAgICAg ICAgIDEgfCAgICAgICAgICAgICAgICAgMjUuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUg dCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorLS0gQlJJTiB2cyBIQVNIIENvbXBhcmlzb24KKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KK0NSRUFURSBUQUJMRSB0X2JyaW4oaWQgSU5ULCB2YWx1ZSBJTlQsIGRhdGEgVEVYVCkK KyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitD UkVBVEUgVEFCTEUgdF9oYXNoKGlkIElOVCwgdmFsdWUgSU5ULCBkYXRhIFRFWFQpCisgICAgV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElO REVYIHRfYnJpbl92YWx1ZV9pZHggT04gdF9icmluIFVTSU5HIGJyaW4odmFsdWUpOworQ1JFQVRF IElOREVYIHRfaGFzaF92YWx1ZV9pZHggT04gdF9oYXNoIFVTSU5HIGhhc2godmFsdWUpOworSU5T RVJUIElOVE8gdF9icmluIFZBTFVFUyAoMSwgMTAwLCAnaW5pdGlhbCcpOworSU5TRVJUIElOVE8g dF9oYXNoIFZBTFVFUyAoMSwgMTAwLCAnaW5pdGlhbCcpOworLS0gU2FtZSB1cGRhdGUgb24gYm90 aCAtIGRpZmZlcmVudCBIT1QgYmVoYXZpb3IgZXhwZWN0ZWQKKy0tIEJSSU46IG1pZ2h0IGFsbG93 IEhPVCAocmFuZ2Ugc3VtbWFyeSB1bmNoYW5nZWQpCistLSBIQVNIOiBibG9ja3MgSE9UIChoYXNo IGJ1Y2tldCBjaGFuZ2VkKQorVVBEQVRFIHRfYnJpbiBTRVQgdmFsdWUgPSAxNTAgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndF9icmluJyk7CisgdGFi bGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2Vu dGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisg dF9icmluICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAg IDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDEgSE9UIChCUklOIGFsbG93cyBp dCBmb3Igc2luZ2xlIHJvdykKK1VQREFURSB0X2hhc2ggU0VUIHZhbHVlID0gMTUwIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3RfaGFzaCcpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IHRfaGFzaCAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAg ICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAwIEhPVCAoSEFTSCBibG9ja3Mg aXQpCitEUk9QIFRBQkxFIHRfYnJpbiBDQVNDQURFOworRFJPUCBUQUJMRSB0X2hhc2ggQ0FTQ0FE RTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIEhBU0ggSW5kZXggd2l0aCBOVUxMIFZhbHVlcworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBjYXRlZ29yeSBWQVJDSEFSLCBkYXRhIFRFWFQpCisg ICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JF QVRFIElOREVYIHRfaGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsK K0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnZWxlY3Ryb25pY3MnLCAnaW5pdGlhbCcpOworLS0g VXBkYXRlIGluZGV4ZWQgY29sdW1uIHRvIE5VTEwgLSBOT1QgSE9UIChoYXNoIHZhbHVlIGNoYW5n ZWQpCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSBOVUxMIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBk YXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBl Y3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAg ICAgICAgMSB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAorKDEgcm93 KQorCistLSBFeHBlY3RlZDogMCBIT1QKKy0tIFVwZGF0ZSBpbmRleGVkIGNvbHVtbiBmcm9tIE5V TEwgdG8gdmFsdWUgLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSAnYm9va3MnIFdI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsKKyB0 YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJj ZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAg ICAgICAwLjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMCBIT1QKKy0tIFVwZGF0ZSBu b24taW5kZXhlZCBjb2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd1 cGRhdGVkJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEs ICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91 cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAg ICAgICAgICAgICAgICAzMy4zMyB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDEgSE9UCitE Uk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEJSSU4gb24gSlNPTkIgRmllbGQK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgbWV0cmljcyBKU09OQikKKyAgICBX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CistLSBCUklO IGRvZXNuJ3QgZGlyZWN0bHkgc3VwcG9ydCBKU09OQiwgYnV0IHdlIGNhbiB0ZXN0IG9uIGV4cHJl c3Npb24KK0NSRUFURSBJTkRFWCB0X2JyaW5fY291bnRfaWR4IE9OIHQgVVNJTkcgYnJpbigKKyAg ICBDQVNUKG1ldHJpY3MtPj4nY291bnQnIEFTIElOVEVHRVIpCispOworSU5TRVJUIElOVE8gdCBW QUxVRVMgKDEsICd7ImNvdW50IjogIjEwMCIsICJ0aW1lc3RhbXAiOiAiMjAyNC0wMS0wMSJ9Jyk7 CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91bGQgYmUgSE9UCitVUERB VEUgdCBTRVQgbWV0cmljcyA9ICd7ImNvdW50IjogIjEwMCIsICJ0aW1lc3RhbXAiOiAiMjAyNC0w MS0wMiJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEs ICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91 cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAg ICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDEgSE9UCist LSBVcGRhdGUgaW5kZXhlZCBmaWVsZCAtIEJSSU4gYWxsb3dzIEhPVCBmb3Igc2luZ2xlIHJvdwor VVBEQVRFIHQgU0VUIG1ldHJpY3MgPSAneyJjb3VudCI6ICIxNTAiLCAidGltZXN0YW1wIjogIjIw MjQtMDEtMDIifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygyLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDIg fCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAyIEhP VCAoQlJJTiBwZXJtaXRzIHNpbmdsZS1yb3cgdXBkYXRlcykKK0RST1AgVEFCTEUgdCBDQVNDQURF OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorLS0gTWl4ZWQgQlJJTiArIEhBU0ggb24gU2FtZSBUYWJsZQorLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBjYXRlZ29yeSBWQVJDSEFSLCB0aW1lc3RhbXAg VElNRVNUQU1QLCBwcmljZSBOVU1FUklDLCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfYnJpbl90 aW1lc3RhbXBfaWR4IE9OIHQgVVNJTkcgYnJpbih0aW1lc3RhbXApOworQ1JFQVRFIElOREVYIHRf aGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0lOU0VSVCBJTlRP IHQgVkFMVUVTICgxLCAnYm9va3MnLCAnMjAyNC0wMS0wMSAxMDowMDowMCcsIDI5Ljk5LCAnaW5p dGlhbCcpOworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNob3VsZCBiZSBIT1QKK1VQ REFURSB0IFNFVCBkYXRhID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAK Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAg MSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCist LSBFeHBlY3RlZDogMSBIT1QKKy0tIFVwZGF0ZSBCUklOIGluZGV4ZWQgY29sdW1uIC0gYWxsb3dz IEhPVAorVVBEQVRFIHQgU0VUIHRpbWVzdGFtcCA9ICcyMDI0LTAxLTAyIDEwOjAwOjAwJyBXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7CisgdGFi bGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2Vu dGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAg IDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDIgSE9UCistLSBVcGRhdGUgSEFT SCBpbmRleGVkIGNvbHVtbiAtIGJsb2NrcyBIT1QKK1VQREFURSB0IFNFVCBjYXRlZ29yeSA9ICd2 aWRlb3MnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMiwg J3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3Vw ZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAyIHwgICAg ICAgICAgICAgICAgIDY2LjY3IHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMiBIT1QgKEhB U0ggYmxvY2tzIGl0KQorLS0gVXBkYXRlIHByaWNlIChub24taW5kZXhlZCkgLSBzaG91bGQgYmUg SE9UCitVUERBVEUgdCBTRVQgcHJpY2UgPSAzOS45OSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDMsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0 ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0 ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAg ICAgIDQgfCAgICAgICAgICAgMyB8ICAgICAgICAgICAgICAgICA3NS4wMCB8IHQKKygxIHJvdykK KworLS0gRXhwZWN0ZWQ6IDMgSE9UCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tIENsZWFudXAK K0RST1AgRlVOQ1RJT04gY2hlY2tfaG90X3VwZGF0ZXMoaW50LCB0ZXh0LCB0ZXh0KTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IGY1NjQ4MmZiOWYxLi40NDU5NjI1YTU5YiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xMjUsNiArMTI1LDEyIEBAIHRlc3Q6IHBs YW5jYWNoZSBsaW1pdCBwbHBnc3FsIGNvcHkyIHRlbXAgZG9tYWluIHJhbmdlZnVuY3MgcHJlcGFy ZSBjb252ZXJzaW9uIHRyCiAjIC0tLS0tLS0tLS0KIHRlc3Q6IHBhcnRpdGlvbl9qb2luIHBhcnRp dGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVn YXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNvbXByZXNzaW9uIGNvbXByZXNz aW9uX2x6NCBtZW1vaXplIHN0YXRzIHByZWRpY2F0ZSBudW1hIGVhZ2VyX2FnZ3JlZ2F0ZQogCisK KyMgLS0tLS0tLS0tLQorIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzLCB0aGVzZSBm b2N1c2VkIG9uIGhlYXAgSE9UIHVwZGF0ZXMKKyMgLS0tLS0tLS0tLQordGVzdDogaG90X2V4cHJl c3Npb25faW5kZXhlcworCiAjIGV2ZW50X3RyaWdnZXIgZGVwZW5kcyBvbiBjcmVhdGVfYW0gYW5k IGNhbm5vdCBydW4gY29uY3VycmVudGx5IHdpdGgKICMgYW55IHRlc3QgdGhhdCBydW5zIERETAog IyBvaWRqb2lucyBpcyByZWFkLW9ubHksIHRob3VnaCwgYW5kIHNob3VsZCBydW4gbGF0ZSBmb3Ig YmVzdCBjb3ZlcmFnZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaG90X2V4cHJl c3Npb25faW5kZXhlcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ob3RfZXhwcmVzc2lvbl9p bmRleGVzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDkyOWJl MTQ0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ob3RfZXhwcmVz c2lvbl9pbmRleGVzLnNxbApAQCAtMCwwICsxLDc0NyBAQAorLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdCBT dWl0ZSBmb3IgSGVhcC1vbmx5IChIT1QpIFVwZGF0ZXMKKy0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0gU2V0dXA6 IENyZWF0ZSBmdW5jdGlvbiB0byBtZWFzdXJlIEhPVCB1cGRhdGVzCitDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiBjaGVja19ob3RfdXBkYXRlcygKKyAgICBleHBlY3RlZCBJTlQsCisgICAgcF90 YWJsZV9uYW1lIFRFWFQgREVGQVVMVCAndCcsCisgICAgcF9zY2hlbWFfbmFtZSBURVhUIERFRkFV TFQgY3VycmVudF9zY2hlbWEoKQorKQorUkVUVVJOUyBUQUJMRSAoCisgICAgdGFibGVfbmFtZSBU RVhULAorICAgIHRvdGFsX3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91cGRhdGVzIEJJR0lOVCwK KyAgICBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgTlVNRVJJQywKKyAgICBtYXRjaGVzX2V4cGVjdGVk IEJPT0xFQU4KKykKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgICAgdl9yZWxp ZCBvaWQ7CisgICAgdl9xdWFsaWZpZWRfbmFtZSBURVhUOworICAgIHZfaG90X3VwZGF0ZXMgQklH SU5UOworICAgIHZfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl94YWN0X2hvdF91cGRhdGVzIEJJR0lO VDsKKyAgICB2X3hhY3RfdXBkYXRlcyBCSUdJTlQ7CitCRUdJTgorICAgIC0tIEZvcmNlIHN0YXRp c3RpY3MgdXBkYXRlCisgICAgUEVSRk9STSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKKwor ICAgIC0tIEdldCB0YWJsZSBPSUQKKyAgICB2X3F1YWxpZmllZF9uYW1lIDo9IHF1b3RlX2lkZW50 KHBfc2NoZW1hX25hbWUpIHx8ICcuJyB8fCBxdW90ZV9pZGVudChwX3RhYmxlX25hbWUpOworICAg IHZfcmVsaWQgOj0gdl9xdWFsaWZpZWRfbmFtZTo6cmVnY2xhc3M7CisKKyAgICBJRiB2X3JlbGlk IElTIE5VTEwgVEhFTgorCVJBSVNFIEVYQ0VQVElPTiAnVGFibGUgJS4lIG5vdCBmb3VuZCcsIHBf c2NoZW1hX25hbWUsIHBfdGFibGVfbmFtZTsKKyAgICBFTkQgSUY7CisKKyAgICAtLSBHZXQgY3Vt dWxhdGl2ZSArIHRyYW5zYWN0aW9uIHN0YXRzCisgICAgdl9ob3RfdXBkYXRlcyA6PSBDT0FMRVND RShwZ19zdGF0X2dldF90dXBsZXNfaG90X3VwZGF0ZWQodl9yZWxpZCksIDApOworICAgIHZfdXBk YXRlcyA6PSBDT0FMRVNDRShwZ19zdGF0X2dldF90dXBsZXNfdXBkYXRlZCh2X3JlbGlkKSwgMCk7 CisgICAgdl94YWN0X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkKHZfcmVsaWQpLCAwKTsKKyAgICB2X3hhY3RfdXBkYXRlcyA6PSBDT0FM RVNDRShwZ19zdGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKworICAg IHZfaG90X3VwZGF0ZXMgOj0gdl9ob3RfdXBkYXRlcyArIHZfeGFjdF9ob3RfdXBkYXRlczsKKyAg ICB2X3VwZGF0ZXMgOj0gdl91cGRhdGVzICsgdl94YWN0X3VwZGF0ZXM7CisKKyAgICBSRVRVUk4g UVVFUlkKKyAgICBTRUxFQ1QKKwlwX3RhYmxlX25hbWU6OlRFWFQsCisJdl91cGRhdGVzOjpCSUdJ TlQsCisJdl9ob3RfdXBkYXRlczo6QklHSU5ULAorCUNBU0UgV0hFTiB2X3VwZGF0ZXMgPiAwCisJ ICAgICBUSEVOIFJPVU5EKCh2X2hvdF91cGRhdGVzOjpudW1lcmljIC8gdl91cGRhdGVzOjpudW1l cmljICogMTAwKTo6bnVtZXJpYywgMikKKwkgICAgIEVMU0UgMAorCUVORCwKKwkodl9ob3RfdXBk YXRlcyA9IGV4cGVjdGVkKTo6Qk9PTEVBTjsKK0VORDsKKyQkOworCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBC YXNpYyBKU09OQiBFeHByZXNzaW9uIEluZGV4CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChp ZCBJTlQgUFJJTUFSWSBLRVksIGRvY3MgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfZG9jc19uYW1lX2lk eCBPTiB0KChkb2NzLT4+J25hbWUnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3sibmFt ZSI6ICJhbGljZSIsICJhZ2UiOiAzMH0nKTsKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIEpTT05C IGZpZWxkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJuYW1lIjogImFs aWNlIiwgImFnZSI6IDMxfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygxLCAndCcpOworCistLSBVcGRhdGUgaW5kZXhlZCBKU09OQiBmaWVsZCAtIHNob3Vs ZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZG9jcyA9ICd7Im5hbWUiOiAiYm9iIiwgImFnZSI6 IDMxfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAn dCcpOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgZmllbGQgYWdhaW4gLSBzaG91bGQgYmUgSE9U CitVUERBVEUgdCBTRVQgZG9jcyA9ICd7Im5hbWUiOiAiYm9iIiwgImFnZSI6IDMyfScgV0hFUkUg aWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyLCAndCcpOworCitEUk9Q IFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFBhcnRpYWwgSW5kZXggd2l0aCBQcmVkaWNhdGUg VHJhbnNpdGlvbnMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgdmFsdWUgSU5U KQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsK K0NSRUFURSBJTkRFWCB0X3ZhbHVlX2lkeCBPTiB0KHZhbHVlKSBXSEVSRSB2YWx1ZSA+IDEwOwor SU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIDUpOworCistLSBCb3RoIG91dHNpZGUgcHJlZGljYXRl IC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gOCBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIFRyYW5zaXRpb24g aW50byBwcmVkaWNhdGUgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0g MTUgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcp OworCistLSBCb3RoIGluc2lkZSBwcmVkaWNhdGUsIHZhbHVlIGNoYW5nZXMgLSBzaG91bGQgTk9U IGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMjAgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBUcmFuc2l0aW9uIG91dCBvZiBw cmVkaWNhdGUgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gNSBXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0t IEJvdGggb3V0c2lkZSBwcmVkaWNhdGUgYWdhaW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBT RVQgdmFsdWUgPSAzIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMiwgJ3QnKTsKKworRFJPUCBUQUJMRSB0OworCistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBFeHByZXNzaW9u IEluZGV4IHdpdGggUGFydGlhbCBQcmVkaWNhdGUKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0 KGRvY3MgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFj dG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaWR4IE9OIHQoKGRvY3MtPj4nc3RhdHVzJykpCisg ICAgV0hFUkUgKGRvY3MtPj4ncHJpb3JpdHknKTo6aW50ID4gNTsKK0lOU0VSVCBJTlRPIHQgVkFM VUVTICgneyJzdGF0dXMiOiAicGVuZGluZyIsICJwcmlvcml0eSI6IDN9Jyk7CisKKy0tIEJvdGgg b3V0c2lkZSBwcmVkaWNhdGUsIHN0YXR1cyB1bmNoYW5nZWQgLSBzaG91bGQgYmUgSE9UCitVUERB VEUgdCBTRVQgZG9jcyA9ICd7InN0YXR1cyI6ICJwZW5kaW5nIiwgInByaW9yaXR5IjogNH0nOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBUcmFuc2l0aW9u IGludG8gcHJlZGljYXRlIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0g J3sic3RhdHVzIjogInBlbmRpbmciLCAicHJpb3JpdHkiOiAxMH0nOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBJbnNpZGUgcHJlZGljYXRlLCBzdGF0dXMg Y2hhbmdlcyAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZG9jcyA9ICd7InN0YXR1 cyI6ICJhY3RpdmUiLCAicHJpb3JpdHkiOiAxMH0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygxLCAndCcpOworCistLSBJbnNpZGUgcHJlZGljYXRlLCBzdGF0dXMgdW5jaGFuZ2Vk IC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJzdGF0dXMiOiAiYWN0aXZl IiwgInByaW9yaXR5IjogOH0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyLCAn dCcpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJTiBJbmRleCBvbiBKU09O QgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJ TkRFWCB0X2dpbl9pZHggT04gdCBVU0lORyBnaW4oZGF0YSk7CitJTlNFUlQgSU5UTyB0IFZBTFVF UyAoMSwgJ3sidGFncyI6IFsicG9zdGdyZXMiLCAiZGF0YWJhc2UiXX0nKTsKKworLS0gQ2hhbmdl IHRhZ3MgLSBHSU4ga2V5cyBjaGFuZ2VkLCBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VU IGRhdGEgPSAneyJ0YWdzIjogWyJwb3N0Z3JlcyIsICJzcWwiXX0nIFdIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsKKworLS0gQ2hhbmdlIHRhZ3Mg YWdhaW4gLSBHSU4ga2V5cyBjaGFuZ2VkLCBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VU IGRhdGEgPSAneyJ0YWdzIjogWyJteXNxbCIsICJzcWwiXX0nIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsKKworLS0gQWRkIGZpZWxkIHdpdGhv dXQgY2hhbmdpbmcgZXhpc3Rpbmcga2V5cyAtIEdJTiBrZXlzIGNoYW5nZWQgKGFkZGVkICJub3Rl IiksIE5PVCBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6IFsibXlzcWwiLCAic3Fs Il0sICJub3RlIjogInRlc3QifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygwLCAndCcpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJ TiBJbmRleCB3aXRoIFVuY2hhbmdlZCBLZXlzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChp ZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBm aWxsZmFjdG9yID0gNzApOworLS0gQ3JlYXRlIEdJTiBpbmRleCBvbiBzcGVjaWZpYyBwYXRoCitD UkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQgVVNJTkcgZ2luKChkYXRhLT4ndGFncycpKTsKK0lO U0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJ0YWdzIjogWyJwb3N0Z3JlcyIsICJzcWwiXSwgInN0 YXR1cyI6ICJhY3RpdmUifScpOworCistLSBDaGFuZ2Ugbm9uLWluZGV4ZWQgZmllbGQgLSBHSU4g a2V5cyBvbiAndGFncycgdW5jaGFuZ2VkLCBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0 YSA9ICd7InRhZ3MiOiBbInBvc3RncmVzIiwgInNxbCJdLCAic3RhdHVzIjogImluYWN0aXZlIn0n IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsK KworLS0gQ2hhbmdlIGluZGV4ZWQgdGFncyAtIEdJTiBrZXlzIGNoYW5nZWQsIHNob3VsZCBOT1Qg YmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3MiOiBbIm15c3FsIiwgInNxbCJdLCAi c3RhdHVzIjogImluYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworRFJPUCBUQUJMRSB0OworCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBH SU4gd2l0aCBqc29uYl9wYXRoX29wcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5U LCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZh Y3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2dpbl9pZHggT04gdCBVU0lORyBnaW4oZGF0YSBq c29uYl9wYXRoX29wcyk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3sidXNlciI6IHsibmFt ZSI6ICJhbGljZSJ9LCAidGFncyI6IFsiYSIsICJiIl19Jyk7CisKKy0tIENoYW5nZSB2YWx1ZSBh dCBkaWZmZXJlbnQgcGF0aCAtIGtleXMgY2hhbmdlZCwgTk9UIEhPVAorVVBEQVRFIHQgU0VUIGRh dGEgPSAneyJ1c2VyIjogeyJuYW1lIjogImJvYiJ9LCAidGFncyI6IFsiYSIsICJiIl19JyBXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICd0Jyk7CisKK0RS T1AgVEFCTEUgdDsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gTXVsdGktQ29sdW1uIEV4cHJlc3Npb24gSW5k ZXgKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgYSBJTlQsIGIgSU5UKQorICAg IFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFU RSBJTkRFWCB0X2lkeCBPTiB0KGlkLCBhYnMoYSksIGFicyhiKSk7CitJTlNFUlQgSU5UTyB0IFZB TFVFUyAoMSwgLTUsIC0xMCk7CisKKy0tIENoYW5nZSBzaWduIGJ1dCBub3QgYWJzIHZhbHVlIC0g c2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGEgPSA1IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gQ2hhbmdlIGFicyB2YWx1ZSAt IHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgYiA9IC0xNSBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIENoYW5nZSBpZCAt IHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgaWQgPSAyIFdIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworRFJPUCBUQUJMRSB0Owor CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLSBNaXhlZCBJbmRleCBUeXBlcyAoQlJJTiArIEV4cHJlc3Npb24pCist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIHZhbHVlIElOVCwgZGF0YSBKU09OQikK KyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitD UkVBVEUgSU5ERVggdF9icmluX2lkeCBPTiB0IFVTSU5HIGJyaW4odmFsdWUpOworQ1JFQVRFIElO REVYIHRfZXhwcl9pZHggT04gdCgoZGF0YS0+PidzdGF0dXMnKSk7CitJTlNFUlQgSU5UTyB0IFZB TFVFUyAoMSwgMTAwLCAneyJzdGF0dXMiOiAiYWN0aXZlIn0nKTsKKworLS0gVXBkYXRlIG9ubHkg QlJJTiBjb2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSAyMDAgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCist LSBVcGRhdGUgb25seSBleHByZXNzaW9uIGNvbHVtbiAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERB VEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIFVwZGF0ZSBib3Ro IC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDMwMCwgZGF0YSA9ICd7 InN0YXR1cyI6ICJwZW5kaW5nIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworRFJPUCBUQUJMRSB0OworCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBF eHByZXNzaW9uIHdpdGggQ09MTEFUSU9OIGFuZCBCVFJFRSAobmJ0cmVlKSBpbmRleAorLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorQ1JFQVRFIENPTExBVElPTiBjYXNlX2luc2Vuc2l0aXZlICgKKyAgICBwcm92aWRlciA9 IGxpYmMsCisgICAgbG9jYWxlID0gJ0MnCispOworQ1JFQVRFIFRBQkxFIHQoCisgICAgaWQgSU5U IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVEVYVCBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUKKykg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworCitDUkVB VEUgSU5ERVggdF9sb3dlcl9pZHggT04gdCBVU0lORyBCVFJFRSAobmFtZSBDT0xMQVRFIGNhc2Vf aW5zZW5zaXRpdmUpOworCitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ0FMSUNFJyk7CisKKy0t IENoYW5nZSBjYXNlIGJ1dCBub3QgdmFsdWUgLSBzaG91bGQgTk9UIGJlIEhPVCBpbiBCVFJFRQor VVBEQVRFIHQgU0VUIG5hbWUgPSAnQWxpY2UnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsKKworLS0gQ2hhbmdlIHRvIG5ldyB2YWx1ZSAtIHNo b3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgbmFtZSA9ICdCT0InIFdIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsKKworRFJPUCBUQUJMRSB0 OworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLSBBcnJheSBFeHByZXNzaW9uIEluZGV4CistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitD UkVBVEUgVEFCTEUgdChpZCBJTlQsIHRhZ3MgVEVYVFtdKQorICAgIFdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2FycmF5X2xl bl9pZHggT04gdChhcnJheV9sZW5ndGgodGFncywgMSkpOworSU5TRVJUIElOVE8gdCBWQUxVRVMg KDEsIEFSUkFZWydhJywgJ2InLCAnYyddKTsKKworLS0gU2FtZSBsZW5ndGgsIGRpZmZlcmVudCBl bGVtZW50cyAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCB0YWdzID0gQVJSQVlbJ2QnLCAn ZScsICdmJ10gV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygx LCAndCcpOworCistLSBEaWZmZXJlbnQgbGVuZ3RoIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFU RSB0IFNFVCB0YWdzID0gQVJSQVlbJ2QnLCAnZSddIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworRFJPUCBUQUJMRSB0OworCistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBOZXN0ZWQgSlNPTkIgRXhwcmVzc2lvbiBhbmQgSlNPTkIgZXF1YWxpdHkgJy0+JyAo bm90ICctPj4nKQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoZGF0YSBKU09OQikKKyAgICBX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUg SU5ERVggdF9uZXN0ZWRfaWR4IE9OIHQoKGRhdGEtPid1c2VyJy0+J25hbWUnKSk7CitJTlNFUlQg SU5UTyB0IFZBTFVFUyAoJ3sidXNlciI6IHsibmFtZSI6ICJhbGljZSIsICJhZ2UiOiAzMH19Jyk7 CisKKy0tIENoYW5nZSBuZXN0ZWQgbm9uLWluZGV4ZWQgZmllbGQgLSBzaG91bGQgYmUgSE9UCitV UERBVEUgdCBTRVQgZGF0YSA9ICd7InVzZXIiOiB7Im5hbWUiOiAiYWxpY2UiLCAiYWdlIjogMzF9 fSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIENoYW5n ZSBuZXN0ZWQgaW5kZXhlZCBmaWVsZCAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQg ZGF0YSA9ICd7InVzZXIiOiB7Im5hbWUiOiAiYm9iIiwgImFnZSI6IDMxfX0nOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKy0tIENvbXBsZXggUHJlZGljYXRlIG9uIE11bHRpcGxlIEpTT05CIEZpZWxkcworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHggT04g dCgoZGF0YS0+PidzdGF0dXMnKSkKKyAgICBXSEVSRSAoZGF0YS0+Pidwcmlvcml0eScpOjppbnQg PiA1CisgICAgICBBTkQgKGRhdGEtPj4nYWN0aXZlJyk6OmJvb2xlYW4gPSB0cnVlOworCitJTlNF UlQgSU5UTyB0IFZBTFVFUyAoJ3sic3RhdHVzIjogInBlbmRpbmciLCAicHJpb3JpdHkiOiAzLCAi YWN0aXZlIjogdHJ1ZX0nKTsKKworLS0gT3V0c2lkZSBwcmVkaWNhdGUgKHByaW9yaXR5IHRvbyBs b3cpIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJzdGF0dXMiOiAiZG9u ZSIsICJwcmlvcml0eSI6IDMsICJhY3RpdmUiOiB0cnVlfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIFRyYW5zaXRpb24gaW50byBwcmVkaWNhdGUgLSBz aG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJzdGF0dXMiOiAiZG9uZSIs ICJwcmlvcml0eSI6IDEwLCAiYWN0aXZlIjogdHJ1ZX0nOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxLCAndCcpOworCistLSBJbnNpZGUgcHJlZGljYXRlLCBjaGFuZ2UgdG8gb3V0 c2lkZSAoYWN0aXZlID0gZmFsc2UpIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBk YXRhID0gJ3sic3RhdHVzIjogImRvbmUiLCAicHJpb3JpdHkiOiAxMCwgImFjdGl2ZSI6IGZhbHNl fSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKK0RST1AgVEFC TEUgdDsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorLS0gR0lOIEFycmF5IEluZGV4IC0gT3JkZXIgSW5zZW5zaXRp dmUgRXh0cmFjdGlvbgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoCisgICAgaWQgSU5UIFBS SU1BUlkgS0VZLAorICAgIGRhdGEgSlNPTkIKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g b2ZmLCBmaWxsZmFjdG9yID0gNzApOworCistLSBHSU4gaW5kZXggb24gSlNPTkIgYXJyYXkgKGV4 dHJhY3RzIGFsbCBlbGVtZW50cykKK0NSRUFURSBJTkRFWCB0X2l0ZW1zX2dpbiBPTiB0IFVTSU5H IEdJTiAoKGRhdGEtPidpdGVtcycpKTsKKworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7Iml0 ZW1zIjogWzEsIDIsIDNdLCAic3RhdHVzIjogImFjdGl2ZSJ9Jyk7CisKKy0tIFVwZGF0ZTogUmVv cmRlciBhcnJheSBlbGVtZW50cworLS0gSlNPTkIgZXF1YWxpdHk6IE5PVCBlcXVhbCAoZGlmZmVy ZW50IGFycmF5cykKKy0tIEdJTiBleHRyYWN0aW9uOiBTYW1lIGVsZW1lbnRzIGV4dHJhY3RlZCAo bWlnaHQgYWxsb3cgSE9UIGlmIG5vdCBjYXJlZnVsKQorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJp dGVtcyI6IFszLCAyLCAxXSwgInN0YXR1cyI6ICJhY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBVcGRhdGU6IEFkZC9y ZW1vdmUgZWxlbWVudAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJpdGVtcyI6IFsxLCAyLCAzLCA0 XSwgInN0YXR1cyI6ICJhY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxLCAndCcpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IFRPQVNUZWQgVmFsdWVzIGluIEV4cHJlc3Npb24gSW5kZXgKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBU QUJMRSB0KGlkIElOVCwgbGFyZ2VfdGV4dCBURVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X3N1YnN0cl9pZHgg T04gdChzdWJzdHIobGFyZ2VfdGV4dCwgMSwgMTApKTsKKworSU5TRVJUIElOVE8gdCBWQUxVRVMg KDEsIHJlcGVhdCgneCcsIDUwMDApIHx8ICdpZGVudGlmaWVyJyk7CisKKy0tIENoYW5nZSBlbmQg b2Ygc3RyaW5nLCBwcmVmaXggdW5jaGFuZ2VkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VU IGxhcmdlX3RleHQgPSByZXBlYXQoJ3gnLCA1MDAwKSB8fCAnZGlmZmVyZW50JyBXSEVSRSBpZCA9 IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIENoYW5n ZSBwcmVmaXggLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGxhcmdlX3RleHQgPSBy ZXBlYXQoJ3knLCA1MDAwKSB8fCAnZGlmZmVyZW50JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKK0RST1AgVEFCTEUgdDsKKworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorLS0gVEVTVDogR0lOIHdpdGggVE9BU1RlZCBURVhUICh0c3ZlY3RvcikKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgY29udGVudCBURVhULCBzZWFyY2hfdmVjIHRzdmVj dG9yKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcw KTsKKworLS0gQ3JlYXRlIHRyaWdnZXIgdG8gbWFpbnRhaW4gdHN2ZWN0b3IKK0NSRUFURSBUUklH R0VSIHRzdmVjdG9ydXBkYXRlX3RvYXN0CisgICAgQkVGT1JFIElOU0VSVCBPUiBVUERBVEUgT04g dAorICAgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OCisgICAgdHN2ZWN0b3JfdXBkYXRl X3RyaWdnZXIoc2VhcmNoX3ZlYywgJ3BnX2NhdGFsb2cuZW5nbGlzaCcsIGNvbnRlbnQpOworCitD UkVBVEUgSU5ERVggdF9naW4gT04gdCBVU0lORyBnaW4oc2VhcmNoX3ZlYyk7CisKKy0tIEluc2Vy dCB3aXRoIGxhcmdlIGNvbnRlbnQgKHdpbGwgYmUgVE9BU1RlZCkKK0lOU0VSVCBJTlRPIHQgKGlk LCBjb250ZW50KSBWQUxVRVMKKyAgICAoMSwgcmVwZWF0KCdpbXBvcnRhbnQga2V5d29yZCAnLCAx MDAwKSB8fCByZXBlYXQoJ2ZpbGxlciB0ZXh0ICcsIDEwMDAwKSk7CisKKy0tIFZlcmlmeSBpbml0 aWFsIHN0YXRlCitTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdIRVJFIHNlYXJjaF92ZWMgQEAgdG9f dHNxdWVyeSgnaW1wb3J0YW50Jyk7CistLSBFeHBlY3RlZDogMSByb3cKKworLS0gSU1QT1JUQU5U OiBUaGUgQkVGT1JFIFVQREFURSB0cmlnZ2VyIG1vZGlmaWVzIHNlYXJjaF92ZWMsIHNvIGJ5IHRo ZSB0aW1lCistLSBFeGVjV2hpY2hJbmRleGVzUmVxdWlyZVVwZGF0ZXMoKSBydW5zLCBzZWFyY2hf dmVjIGhhcyBhbHJlYWR5IGNoYW5nZWQuCistLSBUaGlzIG1lYW5zIHRoZSBjb21wYXJpc29uIHNl ZXMgb2xkIHRzdmVjdG9yIHZzLiB0cmlnZ2VyLW1vZGlmaWVkIHRzdmVjdG9yLAorLS0gbm90IHRo ZSBuYXR1cmFsIHByb2dyZXNzaW9uLiBIT1Qgd29uJ3QgaGFwcGVuIGJlY2F1c2UgdGhlIHRyaWdn ZXIgY2hhbmdlZAorLS0gdGhlIGluZGV4ZWQgY29sdW1uLgorCistLSBVcGRhdGU6IEV2ZW4gdGhv dWdoIGNvbnRlbnQga2V5d29yZHMgdW5jaGFuZ2VkLCB0cmlnZ2VyIHN0aWxsIGZpcmVzCitVUERB VEUgdAorU0VUIGNvbnRlbnQgPSByZXBlYXQoJ2ltcG9ydGFudCBrZXl3b3JkICcsIDEwMDApIHx8 IHJlcGVhdCgnZGlmZmVyZW50IGZpbGxlciAnLCAxMDAwMCkKK1dIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsKKy0tIEV4cGVjdGVkOiAwIEhPVCAo dHJpZ2dlciBtb2RpZmllcyBzZWFyY2hfdmVjLCBibG9ja2luZyBIT1QpCistLSBUaGlzIGlzIGFj dHVhbGx5IGNvcnJlY3QgYmVoYXZpb3IgLSB0aGUgdHJpZ2dlciB1cGRhdGVkIGFuIGluZGV4ZWQg Y29sdW1uCisKKy0tIFVwZGF0ZTogQ2hhbmdlIGluZGV4ZWQga2V5d29yZHMKK1VQREFURSB0CitT RVQgY29udGVudCA9IHJlcGVhdCgnY3JpdGljYWwga2V5d29yZCAnLCAxMDAwKSB8fCByZXBlYXQo J2RpZmZlcmVudCBmaWxsZXIgJywgMTAwMDApCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDAsICd0Jyk7CistLSBFeHBlY3RlZDogMCBIT1QgKGluZGV4IGtl eXMgY2hhbmdlZCkKKworLS0gVmVyaWZ5IHF1ZXJ5IGNvcnJlY3RuZXNzCitTRUxFQ1QgY291bnQo KikgRlJPTSB0IFdIRVJFIHNlYXJjaF92ZWMgQEAgdG9fdHNxdWVyeSgnY3JpdGljYWwnKTsKKy0t IEV4cGVjdGVkOiAxIHJvdworCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor LS0gVEVTVDogR0lOIHdpdGggVE9BU1RlZCBKU09OQgorLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxF IHQoaWQgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9m ZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2dpbiBPTiB0IFVTSU5HIGdpbigo ZGF0YS0+J3RhZ3MnKSk7CisKKy0tIEluc2VydCB3aXRoIFRPQVNUZWQgSlNPTkIKK0lOU0VSVCBJ TlRPIHQgKGlkLCBkYXRhKSBWQUxVRVMKKyAgICAoMSwganNvbmJfYnVpbGRfb2JqZWN0KAorICAg ICAgICAndGFncycsICdbInBvc3RncmVzIiwgImRhdGFiYXNlIl0nOjpqc29uYiwKKyAgICAgICAg J2xhcmdlX2ZpZWxkJywgcmVwZWF0KCd4JywgMTAwMDApCisgICAgKSk7CisKKy0tIFVwZGF0ZTog Q2hhbmdlIGxhcmdlX2ZpZWxkLCB0YWdzIHVuY2hhbmdlZCAtIHNob3VsZCBiZSBIT1QKK1VQREFU RSB0CitTRVQgZGF0YSA9IGpzb25iX2J1aWxkX29iamVjdCgKKyAgICAndGFncycsICdbInBvc3Rn cmVzIiwgImRhdGFiYXNlIl0nOjpqc29uYiwKKyAgICAnbGFyZ2VfZmllbGQnLCByZXBlYXQoJ3kn LCAxMDAwMCkKKykKK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMSwgJ3QnKTsKKy0tIEV4cGVjdGVkOiAxIEhPVCB1cGRhdGUKKworLS0gVXBkYXRlOiBDaGFu Z2UgdGFncyAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdAorU0VUIGRhdGEgPSBqc29uYl9i dWlsZF9vYmplY3QoCisgICAgJ3RhZ3MnLCAnWyJwb3N0Z3JlcyIsICJzcWwiXSc6Ompzb25iLAor ICAgICdsYXJnZV9maWVsZCcsIHJlcGVhdCgneScsIDEwMDAwKQorKQorV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworLS0gRXhwZWN0ZWQ6IFN0 aWxsIDEgSE9UCisKKy0tIFZlcmlmeSBjb3JyZWN0bmVzcworU0VMRUNUIGNvdW50KCopIEZST00g dCBXSEVSRSBkYXRhLT4ndGFncycgQD4gJ1siZGF0YWJhc2UiXSc6Ompzb25iOworLS0gRXhwZWN0 ZWQ6IDAgcm93cworU0VMRUNUIGNvdW50KCopIEZST00gdCBXSEVSRSBkYXRhLT4ndGFncycgQD4g J1sic3FsIl0nOjpqc29uYjsKKy0tIEV4cGVjdGVkOiAxIHJvdworCitEUk9QIFRBQkxFIHQgQ0FT Q0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorLS0gVEVTVDogR0lOIHdpdGggQXJyYXkgb2YgTGFyZ2UgU3Ry aW5ncworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCB0YWdzIFRFWFRbXSkKKyAg ICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVB VEUgSU5ERVggdF9naW4gT04gdCBVU0lORyBnaW4odGFncyk7CisKKy0tIEluc2VydCB3aXRoIGxh cmdlIGFycmF5IGVsZW1lbnRzIChtaWdodCBiZSBUT0FTVGVkKQorSU5TRVJUIElOVE8gdCAoaWQs IHRhZ3MpIFZBTFVFUworICAgICgxLCBBUlJBWVtyZXBlYXQoJ3RhZzEnLCAxMDAwKSwgcmVwZWF0 KCd0YWcyJywgMTAwMCldKTsKKworLS0gVXBkYXRlOiBDaGFuZ2UgdG8gZGlmZmVyZW50IGxhcmdl IHZhbHVlcyAtIE5PVCBIT1QKK1VQREFURSB0CitTRVQgdGFncyA9IEFSUkFZW3JlcGVhdCgndGFn MycsIDEwMDApLCByZXBlYXQoJ3RhZzQnLCAxMDAwKV0KK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsKKy0tIEV4cGVjdGVkOiAwIEhPVCAoa2V5 cyBhY3R1YWxseSBjaGFuZ2VkKQorCistLSBVcGRhdGU6IEtlZXAgc2FtZSB0YWcgdmFsdWVzLCBq dXN0IHJlb3JkZXIgLSBTSE9VTEQgQkUgSE9UCistLSAoR0lOIGlzIG9yZGVyLWluc2Vuc2l0aXZl OiBib3RoIFt0YWczLHRhZzRdIGFuZCBbdGFnNCx0YWczXQorLS0gZXh0cmFjdCB0byB0aGUgc2Ft ZSBzb3J0ZWQga2V5IHNldCBbJ3RhZzMnLCd0YWc0J10pCitVUERBVEUgdAorU0VUIHRhZ3MgPSBB UlJBWVtyZXBlYXQoJ3RhZzQnLCAxMDAwKSwgcmVwZWF0KCd0YWczJywgMTAwMCldCitXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CistLSBFeHBl Y3RlZDogMSBIT1QgKEdJTiBrZXlzIHNlbWFudGljYWxseSBpZGVudGljYWwpCisKKy0tIFVwZGF0 ZTogUmVtb3ZlIGFuIGVsZW1lbnQgLSBOT1QgSE9UIChrZXlzIGNoYW5nZWQpCitVUERBVEUgdAor U0VUIHRhZ3MgPSBBUlJBWVtyZXBlYXQoJ3RhZzQnLCAxMDAwKV0KK1dIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKy0tIEV4cGVjdGVkOiBTdGls bCAxIEhPVCAobm90IHRoaXMgb25lKQorCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorLS0gQlJJTiBJbmRleCB3aXRoIFBhcnRpYWwgUHJlZGljYXRlCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitD UkVBVEUgVEFCTEUgdCgKKyAgICBpZCBJTlQgUFJJTUFSWSBLRVksCisgICAgdmFsdWUgSU5ULAor ICAgIGRlc2NyaXB0aW9uIFRFWFQKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBm aWxsZmFjdG9yID0gNzApOworCitDUkVBVEUgSU5ERVggdF9icmluX3BhcnRpYWxfaWR4IE9OIHQg VVNJTkcgYnJpbih2YWx1ZSkgV0hFUkUgdmFsdWUgPiAxMDA7CisKK0lOU0VSVCBJTlRPIHQgVkFM VUVTICgxLCA1MCwgJ2JlbG93IHJhbmdlJyk7CisKKy0tIFRlc3QgMTogT3V0c2lkZSBwcmVkaWNh dGUKK1VQREFURSB0IFNFVCBkZXNjcmlwdGlvbiA9ICd1cGRhdGVkJyBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIFZhbGlkYXRlOiBQ cmVkaWNhdGUgcXVlcnkgcmV0dXJucyAwIHJvd3MKK1NFTEVDVCBDT1VOVCgqKSBhcyBjbnQgRlJP TSB0IFdIRVJFIHZhbHVlID4gMTAwOworCistLSBUZXN0IDI6IFRyYW5zaXRpb24gaW50byBwcmVk aWNhdGUKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7CisKKy0tIFZhbGlkYXRlOiBQcmVkaWNhdGUg cXVlcnkgcmV0dXJucyAxIHJvdyB3aXRoIGNvcnJlY3QgdmFsdWUKK1NFTEVDVCBDT1VOVCgqKSBh cyBjbnQsIE1BWCh2YWx1ZSkgYXMgbWF4X3ZhbCBGUk9NIHQgV0hFUkUgdmFsdWUgPiAxMDA7CisK Ky0tIFRlc3QgMzogSW5zaWRlIHByZWRpY2F0ZSwgdmFsdWUgY2hhbmdlcworVVBEQVRFIHQgU0VU IHZhbHVlID0gMTYwLCBkZXNjcmlwdGlvbiA9ICd1cGRhdGVkIGFnYWluJyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMsICd0Jyk7CisKKy0tIFZhbGlkYXRl OiBVcGRhdGVkIHZhbHVlICgxNjApIGlzIHJldHVybmVkCitTRUxFQ1QgQ09VTlQoKikgYXMgY250 LCBNQVgodmFsdWUpIGFzIG1heF92YWwgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworCistLSBU ZXN0IDQ6IFRyYW5zaXRpb24gb3V0IG9mIHByZWRpY2F0ZQorVVBEQVRFIHQgU0VUIHZhbHVlID0g NTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcyg0LCAndCcp OworCitTRUxFQ1QgQ09VTlQoKikgYXMgY250IEZST00gdCBXSEVSRSB2YWx1ZSA+IDEwMDsKKwor U0VMRUNUIGlkLCB2YWx1ZSwgZGVzY3JpcHRpb24gRlJPTSB0OworCitEUk9QIFRBQkxFIHQgQ0FT Q0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorLS0gSEFTSCBJbmRleCAoU2ltcGxlIENvbHVtbikKKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgY29kZSBWQVJDSEFSKDIwKSwgZGVzY3JpcHRp b24gVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3Ig PSA3MCk7CitDUkVBVEUgSU5ERVggdF9oYXNoX2lkeCBPTiB0IFVTSU5HIGhhc2goY29kZSk7CitJ TlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ0NPREUwMDEnLCAnaW5pdGlhbCcpOworCistLSBVcGRh dGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRlc2Ny aXB0aW9uID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gVXBkYXRlIGluZGV4ZWQgY29sdW1uIC0gSEFTSCBpbmRl eCByZXF1aXJlcyB1cGRhdGUsIE5PVCBIT1QKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NPREUwMDIn IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsK KworLS0gVXBkYXRlIGJvdGggLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY29kZSA9ICdDT0RFMDAz JywgZGVzY3JpcHRpb24gPSAnY2hhbmdlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBCYWNrIHRvIG9yaWdpbmFsIGNvZGUgLSBO T1QgSE9UIChkaWZmZXJlbnQgaGFzaCBidWNrZXQgbG9jYXRpb24pCitVUERBVEUgdCBTRVQgY29k ZSA9ICdDT0RFMDAxJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEsICd0Jyk7CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBI QVNIIEluZGV4IG9uIEV4cHJlc3Npb24KKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElO VCwgZW1haWwgVEVYVCwgZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9oYXNoX2xvd2VyX2VtYWls X2lkeCBPTiB0IFVTSU5HIEhBU0gobG93ZXIoZW1haWwpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVT ICgxLCAnQWxpY2VARXhhbXBsZS5jb20nLCAneyJzdGF0dXMiOiAibmV3In0nKTsKKworLS0gVXBk YXRlIG5vbi1pbmRleGVkIGZpZWxkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEg PSAneyJzdGF0dXMiOiAiYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gVXBkYXRlIGVtYWlsIHdpdGggY2FzZSBjaGFu Z2Ugb25seSAoc2FtZSBsb3dlcmNhc2UpIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGVt YWlsID0gJ2FsaWNlQGV4YW1wbGUuY29tJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7CisKKy0tIFVwZGF0ZSBlbWFpbCB0byBkaWZmZXJlbnQg bG93ZXJjYXNlIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGVtYWlsID0gJ2JvYkBleGFtcGxlLmNv bScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyLCAndCcp OworCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gSEFTSCBJbmRleCBv biBKU09OQiBGaWVsZAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpT T05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcw KTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfY2F0ZWdvcnlfaWR4IE9OIHQgVVNJTkcgaGFzaCgoZGF0 YS0+PidjYXRlZ29yeScpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJjYXRlZ29yeSI6 ICJib29rcyIsICJ0aXRsZSI6ICJQb3N0Z3JlU1FMIEd1aWRlIn0nKTsKKworLS0gVXBkYXRlIG5v bi1pbmRleGVkIEpTT05CIGZpZWxkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEg PSAneyJjYXRlZ29yeSI6ICJib29rcyIsICJ0aXRsZSI6ICJQb3N0Z3JlU1FMIEhhbmRib29rIn0n IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsK KworLS0gVXBkYXRlIGluZGV4ZWQgSlNPTkIgZmllbGQgLSBOT1QgSE9UCitVUERBVEUgdCBTRVQg ZGF0YSA9ICd7ImNhdGVnb3J5IjogInZpZGVvcyIsICJ0aXRsZSI6ICJQb3N0Z3JlU1FMIEhhbmRi b29rIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwg J3QnKTsKKworLS0gVXBkYXRlIGJvdGggLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7 ImNhdGVnb3J5IjogImNvdXJzZXMiLCAidGl0bGUiOiAiUG9zdGdyZVNRTCBCYXNpY3MifScgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCitE Uk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gTXVsdGlwbGUgSEFTSCBJbmRl eGVzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNhdGVnb3J5IFZBUkNIQVIs IHN0YXR1cyBWQVJDSEFSLCB2YWx1ZSBJTlQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9jYXRlZ29yeV9p ZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfc3RhdHVz X2lkeCBPTiB0IFVTSU5HIGhhc2goc3RhdHVzKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAn ZWxlY3Ryb25pY3MnLCAnYWN0aXZlJywgMTAwKTsKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNv bHVtbiAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDE1MCBXSEVSRSBpZCA9 IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIFVwZGF0 ZSBvbmUgaW5kZXhlZCBjb2x1bW4gLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSAn Ym9va3MnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwg J3QnKTsKKworLS0gVXBkYXRlIG90aGVyIGluZGV4ZWQgY29sdW1uIC0gTk9UIEhPVAorVVBEQVRF IHQgU0VUIHN0YXR1cyA9ICdpbmFjdGl2ZScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBVcGRhdGUgYm90aCBpbmRleGVkIGNvbHVt bnMgLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSAndmlkZW9zJywgc3RhdHVzID0g J3BlbmRpbmcnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMo MSwgJ3QnKTsKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CisKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEJSSU4g dnMgSEFTSCBDb21wYXJpc29uCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdF9icmluKGlkIElO VCwgdmFsdWUgSU5ULCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g b2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIFRBQkxFIHRfaGFzaChpZCBJTlQsIHZhbHVl IElOVCwgZGF0YSBURVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmls bGZhY3RvciA9IDcwKTsKKworQ1JFQVRFIElOREVYIHRfYnJpbl92YWx1ZV9pZHggT04gdF9icmlu IFVTSU5HIGJyaW4odmFsdWUpOworQ1JFQVRFIElOREVYIHRfaGFzaF92YWx1ZV9pZHggT04gdF9o YXNoIFVTSU5HIGhhc2godmFsdWUpOworCitJTlNFUlQgSU5UTyB0X2JyaW4gVkFMVUVTICgxLCAx MDAsICdpbml0aWFsJyk7CitJTlNFUlQgSU5UTyB0X2hhc2ggVkFMVUVTICgxLCAxMDAsICdpbml0 aWFsJyk7CisKKy0tIFNhbWUgdXBkYXRlIG9uIGJvdGggLSBkaWZmZXJlbnQgSE9UIGJlaGF2aW9y IGV4cGVjdGVkCistLSBCUklOOiBtaWdodCBhbGxvdyBIT1QgKHJhbmdlIHN1bW1hcnkgdW5jaGFu Z2VkKQorLS0gSEFTSDogYmxvY2tzIEhPVCAoaGFzaCBidWNrZXQgY2hhbmdlZCkKK1VQREFURSB0 X2JyaW4gU0VUIHZhbHVlID0gMTUwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSwgJ3RfYnJpbicpOworLS0gRXhwZWN0ZWQ6IDEgSE9UIChCUklOIGFsbG93 cyBpdCBmb3Igc2luZ2xlIHJvdykKKworVVBEQVRFIHRfaGFzaCBTRVQgdmFsdWUgPSAxNTAgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndF9oYXNoJyk7 CistLSBFeHBlY3RlZDogMCBIT1QgKEhBU0ggYmxvY2tzIGl0KQorCitEUk9QIFRBQkxFIHRfYnJp biBDQVNDQURFOworRFJPUCBUQUJMRSB0X2hhc2ggQ0FTQ0FERTsKKworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0g SEFTSCBJbmRleCB3aXRoIE5VTEwgVmFsdWVzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChp ZCBJTlQsIGNhdGVnb3J5IFZBUkNIQVIsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9oYXNoX2Nh dGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goY2F0ZWdvcnkpOworSU5TRVJUIElOVE8gdCBWQUxV RVMgKDEsICdlbGVjdHJvbmljcycsICdpbml0aWFsJyk7CisKKy0tIFVwZGF0ZSBpbmRleGVkIGNv bHVtbiB0byBOVUxMIC0gTk9UIEhPVCAoaGFzaCB2YWx1ZSBjaGFuZ2VkKQorVVBEQVRFIHQgU0VU IGNhdGVnb3J5ID0gTlVMTCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDAsICd0Jyk7CistLSBFeHBlY3RlZDogMCBIT1QKKworLS0gVXBkYXRlIGluZGV4ZWQg Y29sdW1uIGZyb20gTlVMTCB0byB2YWx1ZSAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBjYXRlZ29y eSA9ICdib29rcycgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygwLCAndCcpOworLS0gRXhwZWN0ZWQ6IDAgSE9UCisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBj b2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd1cGRhdGVkJyBXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CistLSBF eHBlY3RlZDogMSBIT1QKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CisKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IEJSSU4gb24gSlNPTkIgRmllbGQKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwg bWV0cmljcyBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxm YWN0b3IgPSA3MCk7CistLSBCUklOIGRvZXNuJ3QgZGlyZWN0bHkgc3VwcG9ydCBKU09OQiwgYnV0 IHdlIGNhbiB0ZXN0IG9uIGV4cHJlc3Npb24KK0NSRUFURSBJTkRFWCB0X2JyaW5fY291bnRfaWR4 IE9OIHQgVVNJTkcgYnJpbigKKyAgICBDQVNUKG1ldHJpY3MtPj4nY291bnQnIEFTIElOVEVHRVIp CispOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7ImNvdW50IjogIjEwMCIsICJ0aW1lc3Rh bXAiOiAiMjAyNC0wMS0wMSJ9Jyk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBKU09OQiBmaWVs ZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBtZXRyaWNzID0gJ3siY291bnQiOiAiMTAw IiwgInRpbWVzdGFtcCI6ICIyMDI0LTAxLTAyIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKy0tIEV4cGVjdGVkOiAxIEhPVAorCistLSBV cGRhdGUgaW5kZXhlZCBmaWVsZCAtIEJSSU4gYWxsb3dzIEhPVCBmb3Igc2luZ2xlIHJvdworVVBE QVRFIHQgU0VUIG1ldHJpY3MgPSAneyJjb3VudCI6ICIxNTAiLCAidGltZXN0YW1wIjogIjIwMjQt MDEtMDIifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygy LCAndCcpOworLS0gRXhwZWN0ZWQ6IDIgSE9UIChCUklOIHBlcm1pdHMgc2luZ2xlLXJvdyB1cGRh dGVzKQorCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gTWl4ZWQgQlJJ TiArIEhBU0ggb24gU2FtZSBUYWJsZQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5U LCBjYXRlZ29yeSBWQVJDSEFSLCB0aW1lc3RhbXAgVElNRVNUQU1QLCBwcmljZSBOVU1FUklDLCBk YXRhIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9y ID0gNzApOworQ1JFQVRFIElOREVYIHRfYnJpbl90aW1lc3RhbXBfaWR4IE9OIHQgVVNJTkcgYnJp bih0aW1lc3RhbXApOworQ1JFQVRFIElOREVYIHRfaGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lO RyBoYXNoKGNhdGVnb3J5KTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnYm9va3MnLCAnMjAy NC0wMS0wMSAxMDowMDowMCcsIDI5Ljk5LCAnaW5pdGlhbCcpOworCistLSBVcGRhdGUgbm9uLWlu ZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAndXBkYXRl ZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcp OworLS0gRXhwZWN0ZWQ6IDEgSE9UCisKKy0tIFVwZGF0ZSBCUklOIGluZGV4ZWQgY29sdW1uIC0g YWxsb3dzIEhPVAorVVBEQVRFIHQgU0VUIHRpbWVzdGFtcCA9ICcyMDI0LTAxLTAyIDEwOjAwOjAw JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7 CistLSBFeHBlY3RlZDogMiBIT1QKKworLS0gVXBkYXRlIEhBU0ggaW5kZXhlZCBjb2x1bW4gLSBi bG9ja3MgSE9UCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSAndmlkZW9zJyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7CistLSBFeHBlY3RlZDog MiBIT1QgKEhBU0ggYmxvY2tzIGl0KQorCistLSBVcGRhdGUgcHJpY2UgKG5vbi1pbmRleGVkKSAt IHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBwcmljZSA9IDM5Ljk5IFdIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMywgJ3QnKTsKKy0tIEV4cGVjdGVkOiAz IEhPVAorCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gQ2xlYW51cAorRFJPUCBGVU5DVElP TiBjaGVja19ob3RfdXBkYXRlcyhpbnQsIHRleHQsIHRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCAyM2JjZTcyYWU2NC4uNTJlZjhmMTBiMzUgMTAwNjQ0Ci0tLSBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC0zOTAsNiArMzkwLDcgQEAgQ2FjaGVkRnVuY3Rpb25Db21waWxlQ2FsbGJhY2sK IENhY2hlZEZ1bmN0aW9uRGVsZXRlQ2FsbGJhY2sKIENhY2hlZEZ1bmN0aW9uSGFzaEVudHJ5CiBD YWNoZWRGdW5jdGlvbkhhc2hLZXkKK0NhY2hlZEluZGV4RGF0dW0KIENhY2hlZFBsYW4KIENhY2hl ZFBsYW5Tb3VyY2UKIENhbGxDb250ZXh0Ci0tIAoyLjQ5LjAKCg== --691e0abf_10e796de_db0--