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 1vMvCK-005zbV-1k for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Nov 2025 21:31:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vMvCJ-00Ce2f-0Z for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Nov 2025 21:31:11 +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 1vMvCI-00Ce2W-1A for pgsql-hackers@lists.postgresql.org; Sat, 22 Nov 2025 21:31:11 +0000 Received: from fhigh-b1-smtp.messagingengine.com ([202.12.124.152]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vMvC7-000wzX-2H for pgsql-hackers@postgresql.org; Sat, 22 Nov 2025 21:31:10 +0000 Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailfhigh.stl.internal (Postfix) with ESMTP id 54C537A0182; Sat, 22 Nov 2025 16:30:56 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-06.internal (MEProxy); Sat, 22 Nov 2025 16:30:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc: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=fm1; t=1763847056; x=1763933456; bh=ZuXv8YBMrG FzMX3wv0nGUaa6D6dy2axwrbPchc8Ahs4=; b=Pc9o8VlnM65GDG+M10dtqEF1GH vlVBcIotwaTAuefJ18ZjOXh6Xvle3AT1PRJPeUeuK3A1zAcgthMgjcZS0fIl0cCO lMJ2q3tPiQ4XR4h7I6bR8Mv5hIlQ/ophyNizvPUXujDKi9cNpfuED/LYYBGwMjZM r4pjFaS7KHJFtamtWH7mEfo4rC0l80oQT62LMUZfpFAOcwSJzHTSfL+BovSB4fIJ SLgk8GylSYQfYPyJ5a3jbfn2DFh4wRQHbKxi01mKOsTgNtpgx5w3rkS3UaIYj7WS h7qNRXKhbNeZbNF4Gc/8rRv2pOptsoyfqxG9LM/ZifLlu74E3ViZmsw9+gSA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc: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= 1763847056; x=1763933456; bh=ZuXv8YBMrGFzMX3wv0nGUaa6D6dy2axwrbP chc8Ahs4=; b=Fta3slBguV2J3csSebh+3vi8V5YWups7hPnDm3Ho0YxxAY8d7C5 qqe4TIqHLjTKPTgxOOT6bBtOEAtXF0NKVX9xUUHV3to/UCQIDIfZgK7CQQcsnHZ7 /nasJ89lAI3iwg6HSyckh7VDRMwQNXOM0yp0capOF6ow1ULikR321rXUiVdLvTFU XAX82datuQRm87tVBNs7jJTzJn83v7HRiMRsmjRF6w+bwhd/5G0EHcZjtDcpAi0G Nk79M0QiE31WkfCPoTGfil6SOHO/ClDA7Xd3GKOSYmhHNbFWJmjdNSXr9NOxNiL6 WW4NBnls5F+RZLPIzz7sBozmiRE9Ifvx2nQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvfeefledvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpeffhffvvefkjghfuffogggtsehmtdhmre ertdejnecuhfhrohhmpefirhgvghcuuehurhguuceoghhrvghgsegsuhhrugdrmhgvqeen ucggtffrrghtthgvrhhnpeelveeutdfhhfeklefhgffhffdtheffteeujeeggeeggeehud fhueffhefhtdegfeenucffohhmrghinhepuggrthgrsghrihgtkhhsrdgtohhmnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepghhrvghgsegsuh hrugdrmhgvpdhnsggprhgtphhtthhopedvpdhmohguvgepshhmthhpohhuthdprhgtphht thhopegsohgvkhgvfihurhhmodhpohhsthhgrhgvshesghhmrghilhdrtghomhdprhgtph htthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 22 Nov 2025 16:30:55 -0500 (EST) Date: Sat, 22 Nov 2025 16:30:39 -0500 From: Greg Burd To: Matthias van de Meent Cc: "=?utf-8?Q?pgsql-hackers=40postgresql.org?=" Message-ID: In-Reply-To: References: Subject: Re: Expanding HOT updates for expression and partial indexes X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="69222b7f_511fa7db_1582" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --69222b7f_511fa7db_1582 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Nov 21 2025, at 10:25 am, Matthias van de Meent wrote: > On Wed, 19 Nov 2025 at 19:00, Greg Burd wrote: >> >> Attached are rebased (d5b4f3a6d4e) patches with the only changes >> happening in the last patch in the series. > > Here's a high-level review of the patchset, extending on what I shared > offline. I haven't looked too closely at the code changes. Matthias, thanks for spending a bit of time writing up your thoughts and for chatting a bit with me before doing so. I really appreciate your point of view. > Re: Perf testing > > Apart from the workload we've discussed offline, there's another > workload to consider: Right now, we only really consider HOT when we > know there's space on the page. Yes, and no. In master every UPDATE triggers a call into HeapDetermineColumnsInfo() in heap_update(). That function's job is to examine all the indexed attributes checking each attribute for changes. The set of indexed attributes is generated by combining a set of Bitmapsets fetched (copied) from the relcache: hot_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_HOT_BLOCKING); sum_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_SUMMARIZED); key_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_KEY); id_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_IDENTITY_KEY); interesting_attrs = NULL; interesting_attrs = bms_add_members(interesting_attrs, hot_attrs); interesting_attrs = bms_add_members(interesting_attrs, sum_attrs); interesting_attrs = bms_add_members(interesting_attrs, key_attrs); interesting_attrs = bms_add_members(interesting_attrs, id_attrs); These "interesting attributes" are each checked comparing the newly formed updated HeapTuple passed in from the executor against a HeapTuple read from the page. This happens after taking the buffer lock on that page. The comparison is done with heap_attr_compare() which calls datumIsEqual() which boils down to a memcmp(). The function returns the "modified_attrs". This is the primary "work" that happens before considering HOT that I've moved outside the buffer lock and into the executor. The rest of the HOT decision is 1) will it fit (possibly after being TOASTed), and b) do the HOT blocking attributes overlap with the modified_attrs? If they do, unless they are all summarizing you can't go HOT. Net new work with my approach is only related to the more complicated checks that have to be done when there are expressions, partial indexes, or an index implements the new index AM API for comparing datums. In those cases there is a bit more work, especially when it comes to expression indexes. Evaluating partial index predicate twice rather than once is a bit more overhead. Using type-specific comparison when the index doesn't support index-only scans is a tad more. Overall, not a whole lot of new work. Certainly a much more complex code path, and maybe that'll show up in performance tests. I don't know yet. > This patch, however, will front-load a > lot more checks before we have access to the page, and that will > ~always impact update performance. Disagree, 90% of that work happens today on that same path after the page lock. Even in the case that the HeapTuple can't fit into the page that work will happen, there's not much net new "wasted" effort. Concurrency under load may be better because buffer locks will be held for less time. > I'm a bit worried that the cost of off-page updates (when the page of > the old tuple can't fit the new tuple) will be too significantly > increased, especially considering that we have a default fillfactor of > 100 -- if a table's tuples only grow, it's quite likely the table > frequently can't apply HOT regardless of the updated columns. So, a > workload that's tuned to only update tuples in a way that excercises > 'can we HOT or not' code for already-full pages would be appreciated. > A solution to the issue might be needed if we lose too much > performance on expensive checks; a solution like passing page space of > the old tuple to the checks, and short-circuiting the non-HOT path if > that page space is too small for the new tuple. Here's the problem, there's not much that can be known about what ultimate size the HeapTuple will take or if the page can hold it until after the lock. Second, I feel that this signal would be specific to the heap, it's particular MVCC implementation, and it's optimization (HOT). I really wanted this solution to be non-heap-specific, but heap-enabling. For me that meant that in the general case the executor should be concerned with updating only the set of indexes that it must and no more. So performing this work in the executor ahead of calling into the table AM or index AM makes sense. It is only due to heap's "special" model that we have other concerns related to HOT. Sure, everyone/everything today uses heap so we should pay attention to this, but I set out not to create yet another thing that depends on heap's specific operational model. I think I did that. > 0001: > > I'm not sure I understand why the code is near completely duplicated > here. Maybe you can rename the resulting heap_update to > heap_update_ext, and keep a heap_update around which wraps this > heap_update_ext, allowing old callers to keep their signature until > they need to use _ext's features? Then you can introduce the > duplication if and when needed in later patches -- though I don't > expect a lot of this duplication to be strictly necessary, though that > may need some new helper functions. This is just a split where I move the top portion of heap_update() into the two paths that use it. Sure I could have pulled that into another function, but in this series the next step is to obliterate one half and (if I get my other patch in cf-6221) then I can completely remove HeapDetermineColumnsInfo() and vastly simplify simple_heap_update(). > I also see that for every update we're now copying, passing 5 > bitmapsets individually and then freeing those bitmaps just a moment > later. I'd like to avoid that overhead and duplication if possible. We do this today, nothing new here. They are passed by reference, not value into heap_update(). > Maybe we can store these in an 'update context' struct, passed by > reference down to table_tuple_update() from the calling code, and then > onward to heap_update? That might then also be a prime candidate to > contain the EState * of ExecCheckIndexedAttrsForChanges. I've explored using UpdateContext before, not a bad idea but again this is just a setup commit. It could be cleaner on it's own, but it doesn't really take a step backward on any dimension. > 0002: > > This patch seems to have some formatting updates to changes you made > in 0001, without actually changing the code (e.g. at heap_update's > definition). When updating code, please put it in the expected > formatting in the same patch. I'll find/fix those after v23 attached, sorry for the noise. > --- > In the patch subject: >> For instance, >> indexes with collation information allowing more HOT updates when the >> index is specified to be case insensitive. > > It is incorrect to assume that indexed "btree-equal" datums allow HOT > updates. The user can not be returned an old datum in index-only > scans, even if it's sorted the same as the new datum -- after all, a > function on the datum may return different results even if the datums > are otherwise equal. Think: count_uppercase(string). See also below at > "HOT, datum compare, etc". Thanks for pointing out the oversight for index-oriented scans (IOS), you're right that the code in v22 doesn't handle that correctly. I'll fix that. I still think that indexes that don't support IOS can and should use the type-specific equality checks. This opens the door to HOT with custom types that have unusual equality rules (see BSON). > With the addition of rd_indexedattr we now have 6 bitmaps in > RelationData, which generally only get accessed through > RelationGetIndexAttrBitmap by an enum value. Maybe it's now time to > bite the bullet and change that to a more general approach with > `Bitmapset *rd_bitmaps[NUM_INDEX_ATTR_BITMAP]`? That way, the hot > path in RelationGetIndexAttrBitmap would not depend on the compiler to > determine that the fast path can do simple offset arithmatic to get > the requested bitmap. More than a few of those bitmaps in RelationData are purely for the HOT tests, yes. I'll review those and see if I can shrink the set meaningfully. It was something that had occurred to me too. I'll review and consider ways to consolidate them. > 0003: > This looks like it's a cleanup patch for 0002, and doesn't have much > standing on its own. Maybe the changes for ri_ChangedIndexedCols can > all be moved into 0003? I think that gives this patch more weight and > standing. The goal in this patch was to show that we could eliminate the redundant set work of index_unchanged_by_update() in execIndexing's update path. Separating it out was done to make it more easily reviewed and to prove that before/after tests passed making the change safe. > 0004: > This does two things: > 1. Add index expression evaluation to the toolset to determine which > indexes were unchanged, and > 2. Allow index access methods to say "this value has not changed" > even if the datum itself may have changed. Yes, that's what it does. :) > Could that be split up into two different patches? Maybe, I might be able to add the index AM piece first and then the expression piece. > (aside: 2 makes a lot of sense in some cases, like trgm indexes > strings if no new trigrams are added/removed, so I really like the > idea behind this change). Nice, I appreciate that. > HOT, datum compare, etc.: > > Note that for index-only scans on an index to return correct results, > you _must_ update the index (and thus, do a non-HOT update) whenever a > value changes its binary datum, even if the value has the same btree > sort location as the old value. Yes, I get this now. I also wasn't testing the INCLUDING (non-key) columns. I've fixed both of those in v23. > Even for non-IOS-supporting indexes, > the index may need more information than what's used in btree > comparisons when it has a btree opclass. It's not always just the btree opclass for equality, but that is common. > As SP/GIST have IOS support, they also need to compare the image of > the datum and not use ordinary equality as defined in nbtree's compare > function: the value must be exactly equal to what the table AM > would've provided. In v23 I've changed the logic to use datumIsEqual() for any index that supports IOS and doesn't supply a custom amcomparedatums() function. > Primary example: Btree compares the `numeric` datums of `1.0` and > `1.00` as equal, but for a user there is an observable difference; the > following SQL must return `1.0` in every valid plan: > > BEGIN; > INSERT INTO mytab (mynumeric) VALUES ('1.00'); > UPDATE mytab SET mynumeric = '1.0'; > SELECT mynumeric FROM mytab; I'll try to reproduce this and add a test if I can. > So, IMO, the default datum compare in ExecCheckIndexedAttrsForChanges > and friends should just use datumIsEqual, and not this new > tts_attr_equal. Sure, and that's the case in v23. tts_attr_equal() still has value in other cases so it's not gone. > Indexes without IOS support might be able to opt into using a more lax > datum comparator, but 1.) it should never be the default, as it'd be a > loaded footgun for IndexAM implementers, and 2.) should not depend on > another AM's understanding of attributes, as that is a very leaky > abstraction. Agree, which is why the default for IOS indexes is datumIsEqual() now. > Kind regards, > > Matthias van de Meent > Databricks (https://www.databricks.com) Thanks again for the time and renewed interest in the patch! I've also added a lot more tests into the heap_hot_updates.sql regression suite, likely too many, but for now it's good to be testing the corners. v23 attached, changes are all in 0004, best. -greg --69222b7f_511fa7db_1582 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v23-0001-Reorganize-heap-update-logic.patch" RnJvbSAxYWNjODA1N2UzODliMzJlNTU5MTUzMzZkODgwNzA5NThhMGRkZDhjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy IE5vdiAyMDI1IDExOjM2OjIwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MjMgMS80XSBSZW9yZ2Fu 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 cy9oZWFwYW0uaAppbmRleCA2MzJjNDMzMmE4Yy4uMmY5YTJiMDY5Y2QgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFt LmgKQEAgLTM2NCwxMSArMzY0LDEzIEBAIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVs YXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJCSBUTV9G YWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQpOwogZXh0ZXJuIHZvaWQgaGVhcF9m aW5pc2hfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0 YSAqdGlkKTsKIGV4dGVybiB2b2lkIGhlYXBfYWJvcnRfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVs YXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKTsKLWV4dGVybiBUTV9SZXN1bHQgaGVh cF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwK LQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNo b3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwg TG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0 ZV9pbmRleGVzKTsKK2V4dGVybiBUTV9SZXN1bHQgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRp b24sIEhlYXBUdXBsZURhdGEgKm9sZHR1cCwKKwkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwgQ29t bWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAorCQkJCQkJCSBUTV9G YWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsIEJ1ZmZlciBidWZmZXIs CisJCQkJCQkJIFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwgQml0bWFw c2V0ICpob3RfYXR0cnMsCisJCQkJCQkJIEJpdG1hcHNldCAqc3VtX2F0dHJzLCBCaXRtYXBzZXQg KnBrX2F0dHJzLCBCaXRtYXBzZXQgKnJpZF9hdHRycywKKwkJCQkJCQkgQml0bWFwc2V0ICptaXhf YXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCisJCQkJCQkJIGJvb2wgcmVwX2lkX2tleV9yZXF1aXJl ZCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogZXh0ZXJuIFRNX1Jlc3VsdCBo ZWFwX2xvY2tfdHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJ CQkJIENvbW1hbmRJZCBjaWQsIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2Fp dF9wb2xpY3ksCiAJCQkJCQkJCSBib29sIGZvbGxvd191cGRhdGVzLApAQCAtNDMwLDYgKzQzMiwx OCBAQCBleHRlcm4gdm9pZCBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplKFJlbGF0aW9uIHJlbGF0 aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkJICBPZmZzZXROdW1iZXIgKmRlYWQsIGludCBu ZGVhZCwKIAkJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyICp1bnVzZWQsIGludCBudW51c2VkKTsKIAor LyogaW4gaGVhcC9oZWFwYW0uYyAqLworZXh0ZXJuIEJpdG1hcHNldCAqSGVhcERldGVybWluZUNv bHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqaW50 ZXJlc3RpbmdfY29scywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCisJ CQkJCQkJCQkJICAgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKKwkJCQkJCQkJ CQkgICBib29sICpoYXNfZXh0ZXJuYWwpOworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKK2V4 dGVybiB2b2lkIGNoZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChSZWxhdGlvbiBy ZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCisJCQkJ CQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCk7CisjZW5kaWYKKwogLyogaW4gaGVhcC92YWN1dW1s YXp5LmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsCiAJCQkJ CQkJY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0 ZWd5KTsKLS0gCjIuNDkuMAoK --69222b7f_511fa7db_1582 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v23-0002-Track-changed-indexed-columns-in-the-executor-du.patch" RnJvbSA2YTZjMjhiOGVlMjVhMGVmMDRkNjVhYTU0YzQ3OTJmYThhZGEwM2ZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy NiBPY3QgMjAyNSAxMDo0OToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIzIDIvNF0gVHJhY2sg 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== --69222b7f_511fa7db_1582 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?utf-8?Q?v23-0003-Replace-index=5Funchanged=5Fby=5Fupdate-with-ri=5FChange.patch?=" RnJvbSBjZTBlNTBhYThiMTRmODM4ZjA0YjhiNDVhZjhhNDdmNWM0ZTczNTEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogRnJpLCAz MSBPY3QgMjAyNSAxNDo1NToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIzIDMvNF0gUmVwbGFj 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= --69222b7f_511fa7db_1582 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v23-0004-Enable-HOT-updates-for-expression-and-partial-in.patch" RnJvbSBjYWQyMzYxNDlhZjJkMmE0ZjU3NjIzMzRkMGQ5NmJhMTM0NDNiMDIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy NiBPY3QgMjAyNSAxMDo0OToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIzIDQvNF0gRW5hYmxl 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 bnV0aWwuYyAgICAgICAgICAgICAgfCAgIDkyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMgICAgICAgICAgICAgICAgfCAgIDQ0ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jICAgICAgICAgICAgICB8ICAgMTAgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVlLmMgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW0uYyAgICAgICAgICAgIHwgICAgNCArLQogc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3Rz dHJhcC5jICAgICAgICAgICAgIHwgICAgOCArCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMg ICAgICAgICAgICAgICAgICAgfCAgIDU0ICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXhpbmcu YyAgICAgICAgICAgICAgICB8ICAgMTYgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3Rpbmcu YyAgICAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4 aW5nLmMgICAgICAgICAgIHwgICA0NSArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlm eVRhYmxlLmMgICAgICAgIHwgIDQ5NiArKysrLQogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNz LmMgICAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAg ICAgICAgICAgICAgICAgICAgfCAgIDI4ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaCAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oICAg ICAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAg ICAgICAgICAgICAgICAgfCAgICA4ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAg ICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgg ICAgICAgICAgICAgICB8ICAgMTIgKy0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAg ICAgICAgICAgICAgICB8ICAgMTkgKwogLi4uL2V4cGVjdGVkL2luc2VydC1jb25mbGljdC1zcGVj Y29uZmxpY3Qub3V0IHwgICAyMCArCiAuLi4vcmVncmVzcy9leHBlY3RlZC9oZWFwX2hvdF91cGRh dGVzLm91dCAgICAgfCAxOTIyICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICA2ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2hlYXBfaG90X3VwZGF0ZXMuc3FsICAgICB8IDEzMjUgKysrKysrKysrKysrCiBzcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgICAxICsKIDI3IGZpbGVzIGNo YW5nZWQsIDQwMTUgaW5zZXJ0aW9ucygrKSwgMTI1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBkYXRlcy5vdXQKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9oZWFwX2hvdF91cGRhdGVzLnNx bAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCBjYjMzMzE5MjFjYi4uMzZlNjM5NTUyZTYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBicmluaGFuZGxlcihQR19G VU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IE5VTEw7CiAJYW1yb3V0aW5l LT5hbWJ1aWxkcGhhc2VuYW1lID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtdmFsaWRhdGUgPSBicmlu dmFsaWRhdGU7CisJYW1yb3V0aW5lLT5hbWNvbXBhcmVkYXR1bXMgPSBOVUxMOwogCWFtcm91dGlu ZS0+YW1hZGp1c3RtZW1iZXJzID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gYnJp bmJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gYnJpbnJlc2NhbjsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpbi9naW51dGlsLmMKaW5kZXggNzhmN2I3YTI0OTUuLjhlMzFlYzIxYzFjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbnV0aWwuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvaW5k ZXhmc20uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2lu ZGV4X3NlbGZ1bmNzLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1 dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogCkBAIC03OCw2ICs3OSw3 IEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtcHJvcGVydHkg PSBOVUxMOwogCWFtcm91dGluZS0+YW1idWlsZHBoYXNlbmFtZSA9IGdpbmJ1aWxkcGhhc2VuYW1l OwogCWFtcm91dGluZS0+YW12YWxpZGF0ZSA9IGdpbnZhbGlkYXRlOworCWFtcm91dGluZS0+YW1j b21wYXJlZGF0dW1zID0gZ2luY29tcGFyZWRhdHVtczsKIAlhbXJvdXRpbmUtPmFtYWRqdXN0bWVt YmVycyA9IGdpbmFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGdpbmJl Z2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gZ2lucmVzY2FuOwpAQCAtNDc3LDEzICs0 NzksNiBAQCBjbXBFbnRyaWVzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFy ZykKIAlyZXR1cm4gcmVzOwogfQogCi0KLS8qCi0gKiBFeHRyYWN0IHRoZSBpbmRleCBrZXkgdmFs dWVzIGZyb20gYW4gaW5kZXhhYmxlIGl0ZW0KLSAqCi0gKiBUaGUgcmVzdWx0aW5nIGtleSB2YWx1 ZXMgYXJlIHNvcnRlZCwgYW5kIGFueSBkdXBsaWNhdGVzIGFyZSByZW1vdmVkLgotICogVGhpcyBh dm9pZHMgZ2VuZXJhdGluZyByZWR1bmRhbnQgaW5kZXggZW50cmllcy4KLSAqLwogRGF0dW0gKgog Z2luRXh0cmFjdEVudHJpZXMoR2luU3RhdGUgKmdpbnN0YXRlLCBPZmZzZXROdW1iZXIgYXR0bnVt LAogCQkJCSAgRGF0dW0gdmFsdWUsIGJvb2wgaXNOdWxsLApAQCAtNzI5LDMgKzcyNCw4NiBAQCBn aW5idWlsZHBoYXNlbmFtZShpbnQ2NCBwaGFzZW51bSkKIAkJCXJldHVybiBOVUxMOwogCX0KIH0K KworLyoKKyAqIGdpbmNvbXBhcmVkYXR1bXMgLSBDb21wYXJlIGRhdHVtcyB0byBkZXRlcm1pbmUg aWYgdGhleSBwcm9kdWNlIGlkZW50aWNhbCBrZXlzCisgKgorICogVGhpcyBmdW5jdGlvbiBleHRy YWN0cyBrZXlzIGZyb20gYm90aCBvbGRfZGF0dW0gYW5kIG5ld19kYXR1bSB1c2luZyB0aGUKKyAq IG9wY2xhc3MncyBleHRyYWN0VmFsdWUgZnVuY3Rpb24sIHRoZW4gY29tcGFyZXMgdGhlIGV4dHJh Y3RlZCBrZXkgYXJyYXlzLgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgc2V0cyBhcmUgaWRl bnRpY2FsIChzYW1lIGtleXMsIHNhbWUgY291bnRzKS4KKyAqCisgKiBUaGlzIGVuYWJsZXMgSE9U IHVwZGF0ZXMgZm9yIEdJTiBpbmRleGVzIHdoZW4gdGhlIGluZGV4ZWQgcG9ydGlvbnMgb2YgYQor ICogdmFsdWUgaGF2ZW4ndCBjaGFuZ2VkLCBldmVuIGlmIHRoZSB2YWx1ZSBpdHNlbGYgaGFzIGNo YW5nZWQuCisgKgorICogRXhhbXBsZTogSlNPTkIgY29sdW1uIHdpdGggR0lOIGluZGV4LiBJZiBh biB1cGRhdGUgY2hhbmdlcyBhIG5vbi1pbmRleGVkCisgKiBrZXkgaW4gdGhlIEpTT05CIGRvY3Vt ZW50LCB0aGUgZXh0cmFjdGVkIGtleXMgYXJlIGlkZW50aWNhbCBhbmQgd2UgY2FuCisgKiBkbyBh IEhPVCB1cGRhdGUuCisgKi8KK2Jvb2wKK2dpbmNvbXBhcmVkYXR1bXMoUmVsYXRpb24gaW5kZXgs IGludCBhdHRudW0sCisJCQkJIERhdHVtIG9sZF9kYXR1bSwgYm9vbCBvbGRfaXNudWxsLAorCQkJ CSBEYXR1bSBuZXdfZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCkKK3sKKwlHaW5TdGF0ZQlnaW5zdGF0 ZTsKKwlEYXR1bQkgICAqb2xkX2tleXM7CisJRGF0dW0JICAgKm5ld19rZXlzOworCUdpbk51bGxD YXRlZ29yeSAqb2xkX2NhdGVnb3JpZXM7CisJR2luTnVsbENhdGVnb3J5ICpuZXdfY2F0ZWdvcmll czsKKwlpbnQzMgkJb2xkX25rZXlzOworCWludDMyCQluZXdfbmtleXM7CisJTWVtb3J5Q29udGV4 dCB0bXBjb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlib29sCQlyZXN1bHQg PSB0cnVlOworCisJLyogSGFuZGxlIE5VTEwgY2FzZXMgKi8KKwlpZiAob2xkX2lzbnVsbCAhPSBu ZXdfaXNudWxsKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKG9sZF9pc251bGwpCisJCXJldHVybiB0 cnVlOworCisJLyogQ3JlYXRlIHRlbXBvcmFyeSBjb250ZXh0IGZvciBleHRyYWN0aW9uIHdvcmsg Ki8KKwl0bXBjb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250 ZXh0LAorCQkJCQkJCQkJICAgIkdJTiBkYXR1bSBjb21wYXJpc29uIiwKKwkJCQkJCQkJCSAgIEFM TE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8odG1wY29udGV4dCk7CisKKwlpbml0R2luU3RhdGUoJmdpbnN0YXRlLCBpbmRleCk7CisKKwkv KiBFeHRyYWN0IGtleXMgZnJvbSBib3RoIGRhdHVtcyB1c2luZyBleGlzdGluZyBHSU4gaW5mcmFz dHJ1Y3R1cmUgKi8KKwlvbGRfa2V5cyA9IGdpbkV4dHJhY3RFbnRyaWVzKCZnaW5zdGF0ZSwgYXR0 bnVtLCBvbGRfZGF0dW0sIG9sZF9pc251bGwsCisJCQkJCQkJCSAmb2xkX25rZXlzLCAmb2xkX2Nh dGVnb3JpZXMpOworCW5ld19rZXlzID0gZ2luRXh0cmFjdEVudHJpZXMoJmdpbnN0YXRlLCBhdHRu dW0sIG5ld19kYXR1bSwgbmV3X2lzbnVsbCwKKwkJCQkJCQkJICZuZXdfbmtleXMsICZuZXdfY2F0 ZWdvcmllcyk7CisKKwkvKiBEaWZmZXJlbnQgbnVtYmVyIG9mIGtleXMsIGRlZmluaXRlbHkgZGlm ZmVyZW50ICovCisJaWYgKG9sZF9ua2V5cyAhPSBuZXdfbmtleXMpCisJeworCQlyZXN1bHQgPSBm YWxzZTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogQ29tcGFyZSB0aGUgc29ydGVk IGtleSBhcnJheXMgZWxlbWVudC1ieS1lbGVtZW50LiBTaW5jZSBib3RoIGFycmF5cyBhcmUKKwkg KiBhbHJlYWR5IHNvcnRlZCBieSBnaW5FeHRyYWN0RW50cmllcywgd2UgY2FuIGRvIGEgc2ltcGxl IE8obikKKwkgKiBjb21wYXJpc29uLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgb2xkX25r ZXlzOyBpKyspCisJeworCQlpbnQJCQljbXAgPSBnaW5Db21wYXJlRW50cmllcygmZ2luc3RhdGUs IGF0dG51bSwKKwkJCQkJCQkJCQkJb2xkX2tleXNbaV0sIG9sZF9jYXRlZ29yaWVzW2ldLAorCQkJ CQkJCQkJCQluZXdfa2V5c1tpXSwgbmV3X2NhdGVnb3JpZXNbaV0pOworCisJCWlmIChjbXAgIT0g MCkKKwkJeworCQkJcmVzdWx0ID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKworY2xlYW51 cDoKKwkvKiBDbGVhbiB1cCAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsK KwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGNvbnRleHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2guYwppbmRleCA1MzA2MWM4MTlmYi4uOTEzNzFkZmRhY2QgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTUwLDYgKzUwLDEwIEBAIHN0YXRpYyB2b2lkIGhhc2hidWls ZENhbGxiYWNrKFJlbGF0aW9uIGluZGV4LAogCQkJCQkJCSAgdm9pZCAqc3RhdGUpOwogCiAKK3N0 YXRpYyBib29sIGhhc2hjb21wYXJlZGF0dW1zKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bnVtLAor CQkJCQkJCSAgRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9pc251bGwsCisJCQkJCQkJICBEYXR1 bSBuZXdfZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCk7CisKIC8qCiAgKiBIYXNoIGhhbmRsZXIgZnVu Y3Rpb246IHJldHVybiBJbmRleEFtUm91dGluZSB3aXRoIGFjY2VzcyBtZXRob2QgcGFyYW1ldGVy cwogICogYW5kIGNhbGxiYWNrcy4KQEAgLTk4LDYgKzEwMiw3IEBAIGhhc2hoYW5kbGVyKFBHX0ZV TkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXByb3BlcnR5ID0gTlVMTDsKIAlhbXJvdXRpbmUt PmFtYnVpbGRwaGFzZW5hbWUgPSBOVUxMOwogCWFtcm91dGluZS0+YW12YWxpZGF0ZSA9IGhhc2h2 YWxpZGF0ZTsKKwlhbXJvdXRpbmUtPmFtY29tcGFyZWRhdHVtcyA9IGhhc2hjb21wYXJlZGF0dW1z OwogCWFtcm91dGluZS0+YW1hZGp1c3RtZW1iZXJzID0gaGFzaGFkanVzdG1lbWJlcnM7CiAJYW1y b3V0aW5lLT5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW47CiAJYW1yb3V0aW5lLT5hbXJlc2Nh biA9IGhhc2hyZXNjYW47CkBAIC05NDQsMyArOTQ5LDQyIEBAIGhhc2h0cmFuc2xhdGVjbXB0eXBl KENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSkKIAkJcmV0dXJuIEhURXF1YWxTdHJh dGVneU51bWJlcjsKIAlyZXR1cm4gSW52YWxpZFN0cmF0ZWd5OwogfQorCisvKgorICogaGFzaGNv bXBhcmVkYXR1bXMgLSBDb21wYXJlIGRhdHVtcyB0byBkZXRlcm1pbmUgaWYgdGhleSBwcm9kdWNl IGlkZW50aWNhbCBrZXlzCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBoYXNoIHZhbHVlcyBh cmUgaWRlbnRpY2FsIChpbmRleCBkb2Vzbid0IG5lZWQgdXBkYXRlKS4KKyAqLworYm9vbAoraGFz aGNvbXBhcmVkYXR1bXMoUmVsYXRpb24gaW5kZXgsIGludCBhdHRudW0sCisJCQkJICBEYXR1bSBv bGRfZGF0dW0sIGJvb2wgb2xkX2lzbnVsbCwKKwkJCQkgIERhdHVtIG5ld19kYXR1bSwgYm9vbCBu ZXdfaXNudWxsKQoreworCXVpbnQzMgkJb2xkX2hhc2hrZXk7CisJdWludDMyCQluZXdfaGFzaGtl eTsKKworCS8qIElmIGJvdGggYXJlIE5VTEwsIHRoZXkncmUgZXF1YWwgKi8KKwlpZiAob2xkX2lz bnVsbCAmJiBuZXdfaXNudWxsKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIElmIE5VTEwgc3RhdHVz IGRpZmZlcnMsIHRoZXkncmUgbm90IGVxdWFsICovCisJaWYgKG9sZF9pc251bGwgIT0gbmV3X2lz bnVsbCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBfaGFzaF9kYXR1bTJoYXNoa2V5KCkg aXMgdXNlZCBiZWNhdXNlIHdlIGtub3cgdGhpcyBjYW4ndCBiZSBhIGNyb3NzCisJICogdHlwZSBj b21wYXJpc29uLgorCSAqLworCW9sZF9oYXNoa2V5ID0gX2hhc2hfZGF0dW0yaGFzaGtleShpbmRl eCwgb2xkX2RhdHVtKTsKKwluZXdfaGFzaGtleSA9IF9oYXNoX2RhdHVtMmhhc2hrZXkoaW5kZXgs IG5ld19kYXR1bSk7CisKKwkvKgorCSAqIElmIGhhc2gga2V5cyBhcmUgaWRlbnRpY2FsLCB0aGUg aW5kZXggZW50cnkgd291bGQgYmUgdGhlIHNhbWUuIFJldHVybgorCSAqIHRydWUgdG8gaW5kaWNh dGUgbm8gaW5kZXggdXBkYXRlIG5lZWRlZC4KKwkgKgorCSAqIE5vdGU6IEhhc2ggY29sbGlzaW9u cyBhcmUgcmFyZSBidXQgcG9zc2libGUuIElmIGhhc2goeCkgPT0gaGFzaCh5KSBidXQKKwkgKiB4 ICE9IHksIHRoZSBoYXNoIGluZGV4IHN0aWxsIHRyZWF0cyB0aGVtIGlkZW50aWNhbGx5LCBzbyB3 ZSBjb3JyZWN0bHkKKwkgKiByZXR1cm4gdHJ1ZS4KKwkgKi8KKwlyZXR1cm4gKG9sZF9oYXNoa2V5 ID09IG5ld19oYXNoa2V5KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggMWNkYjcy YjNhN2EuLjViMGZmMTNiMTNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtMzI2OCw3 ICszMjY4LDcgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZURhdGEg Km9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKIAkJCVRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2Nr VHVwbGVNb2RlICpsb2NrbW9kZSwKIAkJCUJ1ZmZlciBidWZmZXIsIFBhZ2UgcGFnZSwgQmxvY2tO dW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwKIAkJCUJpdG1hcHNldCAqaG90X2F0dHJzLCBCaXRtYXBz ZXQgKnN1bV9hdHRycywgQml0bWFwc2V0ICpwa19hdHRycywKLQkJCUJpdG1hcHNldCAqcmlkX2F0 dHJzLCBCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVyICp2bWJ1ZmZlciwKKwkJCUJpdG1hcHNl dCAqcmlkX2F0dHJzLCBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVyICp2bWJ1ZmZl ciwKIAkJCWJvb2wgcmVwX2lkX2tleV9yZXF1aXJlZCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRl X2luZGV4ZXMpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKQEAgLTQzMzcsOCArNDMzNyw5IEBAIEhl YXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKICAqIFRoaXMgcm91dGlu ZSBtYXkgYmUgdXNlZCB0byB1cGRhdGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBv ZiB0aGUKICAqIHRhcmdldCB0dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3IgZXhhbXBsZSwgYmVj YXVzZSB3ZSBoYXZlIGEgbG9jayBvbiB0aGUKICAqIHJlbGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0 aGUgdHVwbGUpLiAgQW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQgdmlhIGVyZXBvcnQoKS4KKyAqIFJl dHVybnMgdGhlIHNldCBvZiBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMuCiAgKi8KLXZvaWQK K0JpdG1hcHNldCAqCiBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cGxlLAogCQkJCSAgIFRVX1VwZGF0 ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewpAQCAtNDQ2Nyw3ICs0NDY4LDcgQEAgc2ltcGxl X2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90 aWQsIEhlYXBUdXBsZSB0dXAKIAogCQllbG9nKEVSUk9SLCAidHVwbGUgY29uY3VycmVudGx5IGRl bGV0ZWQiKTsKIAotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qCkBAIC00NTAw LDcgKzQ1MDEsNiBAQCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cAogCWJtc19mcmVlKHN1bV9hdHRy cyk7CiAJYm1zX2ZyZWUocGtfYXR0cnMpOwogCWJtc19mcmVlKHJpZF9hdHRycyk7Ci0JYm1zX2Zy ZWUobWl4X2F0dHJzKTsKIAlibXNfZnJlZShpZHhfYXR0cnMpOwogCiAJc3dpdGNoIChyZXN1bHQp CkBAIC00NTI2LDYgKzQ1MjYsOCBAQCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRp b24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cAogCQkJZWxvZyhF UlJPUiwgInVucmVjb2duaXplZCBoZWFwX3VwZGF0ZSBzdGF0dXM6ICV1IiwgcmVzdWx0KTsKIAkJ CWJyZWFrOwogCX0KKworCXJldHVybiBtaXhfYXR0cnM7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZWYwOGUxZDNlMTAuLjc1Mjc4MDllYzA4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTMxOSw3ICszMTks NyBAQCBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBv dGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJU25hcHNob3QgY3Jvc3NjaGVjaywgYm9v bCB3YWl0LAogCQkJCQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwKIAkJCQkJTG9ja1R1cGxlTW9kZSAq bG9ja21vZGUsCi0JCQkJCUJpdG1hcHNldCAqbWl4X2F0dHJzLAorCQkJCQljb25zdCBCaXRtYXBz ZXQgKm1peF9hdHRycywKIAkJCQkJVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCiB7 CiAJYm9vbAkJcmVwX2lkX2tleV9yZXF1aXJlZCA9IGZhbHNlOwpAQCAtNDA3LDEwICs0MDcsNiBA QCBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlk LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAogCUFzc2VydChJdGVtSWRJc05vcm1hbChscCkpOwog Ci0JLyoKLQkgKiBQYXJ0aWFsbHkgY29uc3RydWN0IHRoZSBvbGR0dXAgZm9yIEhlYXBEZXRlcm1p bmVDb2x1bW5zSW5mbyB0byB3b3JrIGFuZAotCSAqIHRoZW4gcGFzcyB0aGF0IG9uIHRvIGhlYXBf dXBkYXRlLgotCSAqLwogCW9sZHR1cC50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxh dGlvbik7CiAJb2xkdHVwLnRfZGF0YSA9IChIZWFwVHVwbGVIZWFkZXIpIFBhZ2VHZXRJdGVtKHBh Z2UsIGxwKTsKIAlvbGR0dXAudF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggZmRmZjk2MGMxMzAuLmU0MzVmMGQ1ZGI0IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTE1NSw2ICsxNTUsNyBAQCBidGhhbmRsZXIoUEdf RlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtcHJvcGVydHkgPSBidHByb3BlcnR5OwogCWFt cm91dGluZS0+YW1idWlsZHBoYXNlbmFtZSA9IGJ0YnVpbGRwaGFzZW5hbWU7CiAJYW1yb3V0aW5l LT5hbXZhbGlkYXRlID0gYnR2YWxpZGF0ZTsKKwlhbXJvdXRpbmUtPmFtY29tcGFyZWRhdHVtcyA9 IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWFkanVzdG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnM7CiAJ YW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNj YW4gPSBidHJlc2NhbjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmluZGV4IGRhZGNmMDNl ZDI0Li5lZjc3MzZiZmE3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBAIC0zMzYs NyArMzM2LDcgQEAgdm9pZAogc2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWws IEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJ ICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSAgQml0bWFwc2V0ICptb2RpZmllZF9pbmRleGVk X2NvbHMsCisJCQkJCQkgIGNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLAogCQkJCQkJICBUVV9V cGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlUTV9SZXN1bHQJcmVzdWx0OwpAQCAt MzQ4LDcgKzM0OCw3IEBAIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJ dGVtUG9pbnRlciBvdGlkLAogCQkJCQkJCQlzbmFwc2hvdCwgSW52YWxpZFNuYXBzaG90LAogCQkJ CQkJCQl0cnVlIC8qIHdhaXQgZm9yIGNvbW1pdCAqLyAsCiAJCQkJCQkJCSZ0bWZkLCAmbG9ja21v ZGUsCi0JCQkJCQkJCW1vZGlmaWVkX2luZGV4ZWRfY29scywKKwkJCQkJCQkJbWl4X2F0dHJzLAog CQkJCQkJCQl1cGRhdGVfaW5kZXhlcyk7CiAKIAlzd2l0Y2ggKHJlc3VsdCkKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJh cC9ib290c3RyYXAuYwppbmRleCBmYzg2MzhjMWI2MS4uMzI5YzExMGQwYmYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYworKysgYi9zcmMvYmFja2VuZC9ib290 c3RyYXAvYm9vdHN0cmFwLmMKQEAgLTk2MSwxMCArOTYxLDE4IEBAIGluZGV4X3JlZ2lzdGVyKE9p ZCBoZWFwLAogCW5ld2luZC0+aWxfaW5mby0+aWlfRXhwcmVzc2lvbnMgPQogCQljb3B5T2JqZWN0 KGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMpOwogCW5ld2luZC0+aWxfaW5mby0+aWlfRXhwcmVz c2lvbnNTdGF0ZSA9IE5JTDsKKwkvKiBleHByZXNzaW9uIGF0dHJzIHdpbGwgbGlrZWx5IGJlIG51 bGwsIGJ1dCBtYXkgYXMgd2VsbCBjb3B5IGl0ICovCisJbmV3aW5kLT5pbF9pbmZvLT5paV9FeHBy ZXNzaW9uc0F0dHJzID0KKwkJY29weU9iamVjdChpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zQXR0 cnMpOwogCS8qIHByZWRpY2F0ZSB3aWxsIGxpa2VseSBiZSBudWxsLCBidXQgbWF5IGFzIHdlbGwg Y29weSBpdCAqLwogCW5ld2luZC0+aWxfaW5mby0+aWlfUHJlZGljYXRlID0KIAkJY29weU9iamVj dChpbmRleEluZm8tPmlpX1ByZWRpY2F0ZSk7CiAJbmV3aW5kLT5pbF9pbmZvLT5paV9QcmVkaWNh dGVTdGF0ZSA9IE5VTEw7CisJLyogcHJlZGljYXRlIGF0dHJzIHdpbGwgbGlrZWx5IGJlIG51bGws IGJ1dCBtYXkgYXMgd2VsbCBjb3B5IGl0ICovCisJbmV3aW5kLT5pbF9pbmZvLT5paV9QcmVkaWNh dGVBdHRycyA9CisJCWNvcHlPYmplY3QoaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVBdHRycyk7CisJ bmV3aW5kLT5pbF9pbmZvLT5paV9DaGVja2VkUHJlZGljYXRlID0gZmFsc2U7CisJbmV3aW5kLT5p bF9pbmZvLT5paV9QcmVkaWNhdGVTYXRpc2ZpZWQgPSBmYWxzZTsKIAkvKiBubyBleGNsdXNpb24g Y29uc3RyYWludHMgYXQgYm9vdHN0cmFwIHRpbWUsIHNvIG5vIG5lZWQgdG8gY29weSAqLwogCUFz c2VydChpbmRleEluZm8tPmlpX0V4Y2x1c2lvbk9wcyA9PSBOVUxMKTsKIAlBc3NlcnQoaW5kZXhJ bmZvLT5paV9FeGNsdXNpb25Qcm9jcyA9PSBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCA1ZDlk YjE2N2U1OS4uZTg4ZGI3ZTkxOWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5k ZXguYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTI3LDYgKzI3LDcgQEAK ICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5o IgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAiYWNjZXNzL3N5c2F0dHIu aCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90b2FzdF9j b21wcmVzc2lvbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCkBAIC01OCw2ICs1OSw3 IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25v ZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9k ZUZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgpAQCAtMjQxNCw2ICsy NDE2LDU4IEBAIGluZGV4X2Ryb3AoT2lkIGluZGV4SWQsIGJvb2wgY29uY3VycmVudCwgYm9vbCBj b25jdXJyZW50X2xvY2tfbW9kZSkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCisvKiAtLS0tLS0tLS0tLS0t LS0tCisgKiBCdWlsZFVwZGF0ZUluZGV4SW5mbworICoKKyAqIEZvciBleHByZXNzaW9uIGluZGV4 ZXMgdXBkYXRlcyBtYXkgbm90IGNoYW5nZSB0aGUgaW5kZXhlZCB2YWx1ZSBhbGxvd2luZworICog Zm9yIGEgSE9UIHVwZGF0ZS4gIEFkZCBpbmZvcm1hdGlvbiB0byB0aGUgSW5kZXhJbmZvIHRvIGFs bG93IGZvciBjaGVja2luZworICogaWYgdGhlIGluZGV4ZWQgdmFsdWUgaGFzIGNoYW5nZWQuCisg KgorICogRG8gdGhpcyBwcm9jZXNzaW5nIGhlcmUgcmF0aGVyIHRoYW4gaW4gQnVpbGRJbmRleElu Zm8oKSB0byBub3QgaW5jdXIgdGhlCisgKiBvdmVyaGVhZCBpbiB0aGUgY29tbW9uIG5vbi1leHBy ZXNzaW9uIGNhc2VzLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitCdWlsZFVwZGF0 ZUluZGV4SW5mbyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvKQoreworCWZvciAoaW50IGog PSAwOyBqIDwgcmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlczsgaisrKQorCXsKKwkJaW50CQkJ aTsKKwkJaW50CQkJaW5kbmF0dHM7CisJCUJpdG1hcHNldCAgKmF0dHJzID0gTlVMTDsKKwkJSW5k ZXhJbmZvICAqaWkgPSByZXN1bHRSZWxJbmZvLT5yaV9JbmRleFJlbGF0aW9uSW5mb1tqXTsKKwor CQlpbmRuYXR0cyA9IGlpLT5paV9OdW1JbmRleEF0dHJzOworCisJCS8qIENvbGxlY3Qga2V5IGF0 dHJpYnV0ZXMgdXNlZCBieSB0aGUgaW5kZXgsIGtleSBhbmQgaW5jbHVkaW5nICovCisJCWZvciAo aSA9IDA7IGkgPCBpbmRuYXR0czsgaSsrKQorCQl7CisJCQlBdHRyTnVtYmVyCWF0dG51bSA9IGlp LT5paV9JbmRleEF0dHJOdW1iZXJzW2ldOworCisJCQlpZiAoYXR0bnVtICE9IDApCisJCQkJYXR0 cnMgPSBibXNfYWRkX21lbWJlcihhdHRycywgYXR0bnVtIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0 dHJpYnV0ZU51bWJlcik7CisJCX0KKworCQkvKiBDb2xsZWN0IGF0dHJpYnV0ZXMgdXNlZCBpbiB0 aGUgZXhwcmVzc2lvbiAqLworCQlpZiAoaWktPmlpX0V4cHJlc3Npb25zKQorCQkJcHVsbF92YXJh dHRub3MoKE5vZGUgKikgaWktPmlpX0V4cHJlc3Npb25zLAorCQkJCQkJICAgcmVzdWx0UmVsSW5m by0+cmlfUmFuZ2VUYWJsZUluZGV4LAorCQkJCQkJICAgJmlpLT5paV9FeHByZXNzaW9uc0F0dHJz KTsKKworCQkvKiBDb2xsZWN0IGF0dHJpYnV0ZXMgdXNlZCBpbiB0aGUgcHJlZGljYXRlICovCisJ CWlmIChpaS0+aWlfUHJlZGljYXRlKQorCQkJcHVsbF92YXJhdHRub3MoKE5vZGUgKikgaWktPmlp X1ByZWRpY2F0ZSwKKwkJCQkJCSAgIHJlc3VsdFJlbEluZm8tPnJpX1JhbmdlVGFibGVJbmRleCwK KwkJCQkJCSAgICZpaS0+aWlfUHJlZGljYXRlQXR0cnMpOworCisJCS8qIENvbWJpbmUga2V5LCBp bmNsdWRpbmcsIGFuZCBleHByZXNzaW9uIGF0dHJpYnV0ZXMsIGJ1dCBub3QgcHJlZGljYXRlICov CisJCWlpLT5paV9JbmRleGVkQXR0cnMgPSBibXNfdW5pb24oYXR0cnMsIGlpLT5paV9FeHByZXNz aW9uc0F0dHJzKTsKKworCQkvKiBBbGwgaW5kZXhlcyBzaG91bGQgaW5kZXggKnNvbWV0aGluZyoh ICovCisJCUFzc2VydCghYm1zX2lzX2VtcHR5KGlpLT5paV9JbmRleGVkQXR0cnMpKTsKKwl9Cit9 CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlCdWlsZEluZGV4SW5mbwogICoJCQlDb25zdHJ1 Y3QgYW4gSW5kZXhJbmZvIHJlY29yZCBmb3IgYW4gb3BlbiBpbmRleApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleGlu Zy5jCmluZGV4IDAwNGM1MTIxMDAwLi5hMzYxYzIxNTQ5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXhpbmcu YwpAQCAtMTAyLDcgKzEwMiw3IEBAIENhdGFsb2dJbmRleEluc2VydChDYXRhbG9nSW5kZXhTdGF0 ZSBpbmRzdGF0ZSwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKIAkgKiBHZXQgaW5mb3JtYXRpb24gZnJv bSB0aGUgc3RhdGUgc3RydWN0dXJlLiAgRmFsbCBvdXQgaWYgbm90aGluZyB0byBkby4KIAkgKi8K IAludW1JbmRleGVzID0gaW5kc3RhdGUtPnJpX051bUluZGljZXM7Ci0JaWYgKG51bUluZGV4ZXMg PT0gMCkKKwlpZiAobnVtSW5kZXhlcyA9PSAwIHx8IHVwZGF0ZUluZGV4ZXMgPT0gVFVfTm9uZSkK IAkJcmV0dXJuOwogCXJlbGF0aW9uRGVzY3MgPSBpbmRzdGF0ZS0+cmlfSW5kZXhSZWxhdGlvbkRl c2NzOwogCWluZGV4SW5mb0FycmF5ID0gaW5kc3RhdGUtPnJpX0luZGV4UmVsYXRpb25JbmZvOwpA QCAtMzE0LDE1ICszMTQsMTggQEAgQ2F0YWxvZ1R1cGxlVXBkYXRlKFJlbGF0aW9uIGhlYXBSZWws IGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cCkKIHsKIAlDYXRhbG9n SW5kZXhTdGF0ZSBpbmRzdGF0ZTsKIAlUVV9VcGRhdGVJbmRleGVzIHVwZGF0ZUluZGV4ZXMgPSBU VV9BbGw7CisJQml0bWFwc2V0ICAqdXBkYXRlZEF0dHJzOwogCiAJQ2F0YWxvZ1R1cGxlQ2hlY2tD b25zdHJhaW50cyhoZWFwUmVsLCB0dXApOwogCiAJaW5kc3RhdGUgPSBDYXRhbG9nT3BlbkluZGV4 ZXMoaGVhcFJlbCk7CiAKLQlzaW1wbGVfaGVhcF91cGRhdGUoaGVhcFJlbCwgb3RpZCwgdHVwLCAm dXBkYXRlSW5kZXhlcyk7Ci0KKwl1cGRhdGVkQXR0cnMgPSBzaW1wbGVfaGVhcF91cGRhdGUoaGVh cFJlbCwgb3RpZCwgdHVwLCAmdXBkYXRlSW5kZXhlcyk7CisJKChSZXN1bHRSZWxJbmZvICopIGlu ZHN0YXRlKS0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gdXBkYXRlZEF0dHJzOwogCUNhdGFsb2dJ bmRleEluc2VydChpbmRzdGF0ZSwgdHVwLCB1cGRhdGVJbmRleGVzKTsKKwogCUNhdGFsb2dDbG9z ZUluZGV4ZXMoaW5kc3RhdGUpOworCWJtc19mcmVlKHVwZGF0ZWRBdHRycyk7CiB9CiAKIC8qCkBA IC0zMzgsMTIgKzM0MSwxNSBAQCBDYXRhbG9nVHVwbGVVcGRhdGVXaXRoSW5mbyhSZWxhdGlvbiBo ZWFwUmVsLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdQogCQkJCQkJICAgQ2F0 YWxvZ0luZGV4U3RhdGUgaW5kc3RhdGUpCiB7CiAJVFVfVXBkYXRlSW5kZXhlcyB1cGRhdGVJbmRl eGVzID0gVFVfQWxsOworCUJpdG1hcHNldCAgKnVwZGF0ZWRBdHRyczsKIAogCUNhdGFsb2dUdXBs ZUNoZWNrQ29uc3RyYWludHMoaGVhcFJlbCwgdHVwKTsKIAotCXNpbXBsZV9oZWFwX3VwZGF0ZSho ZWFwUmVsLCBvdGlkLCB0dXAsICZ1cGRhdGVJbmRleGVzKTsKLQorCXVwZGF0ZWRBdHRycyA9IHNp bXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVsLCBvdGlkLCB0dXAsICZ1cGRhdGVJbmRleGVzKTsKKwko KFJlc3VsdFJlbEluZm8gKikgaW5kc3RhdGUpLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSB1cGRh dGVkQXR0cnM7CiAJQ2F0YWxvZ0luZGV4SW5zZXJ0KGluZHN0YXRlLCB0dXAsIHVwZGF0ZUluZGV4 ZXMpOworCSgoUmVzdWx0UmVsSW5mbyAqKSBpbmRzdGF0ZSktPnJpX0NoYW5nZWRJbmRleGVkQ29s cyA9IE5VTEw7CisJYm1zX2ZyZWUodXBkYXRlZEF0dHJzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9h c3RpbmcuYwppbmRleCA1ZDgxOWJkYTU0YS4uYzY2NWFhNzQ0YjMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0 aW5nLmMKQEAgLTI5Miw4ICsyOTIsMTIgQEAgY3JlYXRlX3RvYXN0X3RhYmxlKFJlbGF0aW9uIHJl bCwgT2lkIHRvYXN0T2lkLCBPaWQgdG9hc3RJbmRleE9pZCwKIAlpbmRleEluZm8tPmlpX0luZGV4 QXR0ck51bWJlcnNbMV0gPSAyOwogCWluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMgPSBOSUw7CiAJ aW5kZXhJbmZvLT5paV9FeHByZXNzaW9uc1N0YXRlID0gTklMOworCWluZGV4SW5mby0+aWlfRXhw cmVzc2lvbnNBdHRycyA9IE5VTEw7CiAJaW5kZXhJbmZvLT5paV9QcmVkaWNhdGUgPSBOSUw7CiAJ aW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0ZSA9IE5VTEw7CisJaW5kZXhJbmZvLT5paV9QcmVk aWNhdGVBdHRycyA9IE5VTEw7CisJaW5kZXhJbmZvLT5paV9DaGVja2VkUHJlZGljYXRlID0gZmFs c2U7CisJaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTYXRpc2ZpZWQgPSBmYWxzZTsKIAlpbmRleElu Zm8tPmlpX0V4Y2x1c2lvbk9wcyA9IE5VTEw7CiAJaW5kZXhJbmZvLT5paV9FeGNsdXNpb25Qcm9j cyA9IE5VTEw7CiAJaW5kZXhJbmZvLT5paV9FeGNsdXNpb25TdHJhdHMgPSBOVUxMOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCBmYjFiYzNhNDgwZC4uMjA5NjhhODE0ZDYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC0xMDksMTEgKzEwOSwxNSBAQAogI2lu Y2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgogI2lu Y2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCisj aW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNp bmNsdWRlICJ1dGlscy9tdWx0aXJhbmdldHlwZXMuaCIKICNpbmNsdWRlICJ1dGlscy9yYW5nZXR5 cGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgpAQCAtMzE4LDggKzMyMiw4IEBAIEV4 ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCVJlbGF0 aW9uCWhlYXBSZWxhdGlvbjsKIAlJbmRleEluZm8gKippbmRleEluZm9BcnJheTsKIAlFeHByQ29u dGV4dCAqZWNvbnRleHQ7Ci0JRGF0dW0JCXZhbHVlc1tJTkRFWF9NQVhfS0VZU107Ci0JYm9vbAkJ aXNudWxsW0lOREVYX01BWF9LRVlTXTsKKwlEYXR1bQkJbG9jX3ZhbHVlc1tJTkRFWF9NQVhfS0VZ U107CisJYm9vbAkJbG9jX2lzbnVsbFtJTkRFWF9NQVhfS0VZU107CiAKIAlBc3NlcnQoSXRlbVBv aW50ZXJJc1ZhbGlkKHR1cGxlaWQpKTsKIApAQCAtMzQzLDEzICszNDcsMTMgQEAgRXhlY0luc2Vy dEluZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJLyogQXJyYW5nZSBm b3IgZWNvbnRleHQncyBzY2FuIHR1cGxlIHRvIGJlIHRoZSB0dXBsZSB1bmRlciB0ZXN0ICovCiAJ ZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gc2xvdDsKIAotCS8qCi0JICogZm9yIGVhY2ggaW5k ZXgsIGZvcm0gYW5kIGluc2VydCB0aGUgaW5kZXggdHVwbGUKLQkgKi8KKwkvKiBJbnNlcnQgaW50 byBlYWNoIGluZGV4IHRoYXQgbmVlZHMgdXBkYXRpbmcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVt SW5kaWNlczsgaSsrKQogCXsKIAkJUmVsYXRpb24JaW5kZXhSZWxhdGlvbiA9IHJlbGF0aW9uRGVz Y3NbaV07CiAJCUluZGV4SW5mbyAgKmluZGV4SW5mbzsKKwkJRGF0dW0JICAgKnZhbHVlczsKKwkJ Ym9vbAkgICAqaXNudWxsOwogCQlib29sCQlhcHBseU5vRHVwRXJyOwogCQlJbmRleFVuaXF1ZUNo ZWNrIGNoZWNrVW5pcXVlOwogCQlib29sCQlpbmRleFVuY2hhbmdlZDsKQEAgLTM2Niw3ICszNzAs NyBAQCBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywK IAogCQkvKgogCQkgKiBTa2lwIHByb2Nlc3Npbmcgb2Ygbm9uLXN1bW1hcml6aW5nIGluZGV4ZXMg aWYgd2Ugb25seSB1cGRhdGUKLQkJICogc3VtbWFyaXppbmcgaW5kZXhlcworCQkgKiBzdW1tYXJp emluZyBpbmRleGVzIG9yIGlmIHRoaXMgaW5kZXggaXMgdW5jaGFuZ2VkLgogCQkgKi8KIAkJaWYg KG9ubHlTdW1tYXJpemluZyAmJiAhaW5kZXhJbmZvLT5paV9TdW1tYXJpemluZykKIAkJCWNvbnRp bnVlOwpAQCAtMzg3LDggKzM5MSwxNSBAQCBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoUmVzdWx0UmVs SW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJCQlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZVN0YXRlID0g cHJlZGljYXRlOwogCQkJfQogCisJCQkvKiBDaGVjayB0aGUgaW5kZXggcHJlZGljYXRlIGlmIHdl IGhhdmVuJ3QgZG9uZSBzbyBlYXJsaWVyIG9uICovCisJCQlpZiAoIWluZGV4SW5mby0+aWlfQ2hl Y2tlZFByZWRpY2F0ZSkKKwkJCXsKKwkJCQlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZVNhdGlzZmll ZCA9IEV4ZWNRdWFsKHByZWRpY2F0ZSwgZWNvbnRleHQpOworCQkJCWluZGV4SW5mby0+aWlfQ2hl Y2tlZFByZWRpY2F0ZSA9IHRydWU7CisJCQl9CisKIAkJCS8qIFNraXAgdGhpcyBpbmRleC11cGRh dGUgaWYgdGhlIHByZWRpY2F0ZSBpc24ndCBzYXRpc2ZpZWQgKi8KLQkJCWlmICghRXhlY1F1YWwo cHJlZGljYXRlLCBlY29udGV4dCkpCisJCQlpZiAoIWluZGV4SW5mby0+aWlfUHJlZGljYXRlU2F0 aXNmaWVkKQogCQkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTM5NiwxMSArNDA3LDEwIEBAIEV4ZWNJ bnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkgKiBGb3Jt SW5kZXhEYXR1bSBmaWxscyBpbiBpdHMgdmFsdWVzIGFuZCBpc251bGwgcGFyYW1ldGVycyB3aXRo IHRoZQogCQkgKiBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIHRoZSBjb2x1bW4ocykgb2YgdGhlIGlu ZGV4LgogCQkgKi8KLQkJRm9ybUluZGV4RGF0dW0oaW5kZXhJbmZvLAotCQkJCQkgICBzbG90LAot CQkJCQkgICBlc3RhdGUsCi0JCQkJCSAgIHZhbHVlcywKLQkJCQkJICAgaXNudWxsKTsKKwkJRm9y bUluZGV4RGF0dW0oaW5kZXhJbmZvLCBzbG90LCBlc3RhdGUsIGxvY192YWx1ZXMsIGxvY19pc251 bGwpOworCisJCXZhbHVlcyA9IGxvY192YWx1ZXM7CisJCWlzbnVsbCA9IGxvY19pc251bGw7CiAK IAkJLyogQ2hlY2sgd2hldGhlciB0byBhcHBseSBub0R1cEVyciB0byB0aGlzIGluZGV4ICovCiAJ CWFwcGx5Tm9EdXBFcnIgPSBub0R1cEVyciAmJgpAQCAtNDM1LDcgKzQ0NSw5IEBAIEV4ZWNJbnNl cnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkgKiBpbmRleC4g IElmIHdlJ3JlIGJlaW5nIGNhbGxlZCBhcyBwYXJ0IG9mIGFuIFVQREFURSBzdGF0ZW1lbnQsCiAJ CSAqIGNvbnNpZGVyIGlmIHRoZSAnaW5kZXhVbmNoYW5nZWQnID0gdHJ1ZSBoaW50IHNob3VsZCBi ZSBwYXNzZWQuCiAJCSAqLwotCQlpbmRleFVuY2hhbmdlZCA9IHVwZGF0ZSAmJiBibXNfaXNfZW1w dHkocmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzKTsKKwkJaW5kZXhVbmNoYW5n ZWQgPSB1cGRhdGUgJiYKKwkJCSFibXNfb3ZlcmxhcChpbmRleEluZm8tPmlpX0luZGV4ZWRBdHRy cywKKwkJCQkJCSByZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOwogCiAJCXNh dGlzZmllc0NvbnN0cmFpbnQgPQogCQkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRpb24sIC8qIGlu ZGV4IHJlbGF0aW9uICovCkBAIC02MDQsNyArNjE2LDEyIEBAIEV4ZWNDaGVja0luZGV4Q29uc3Ry YWludHMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CiAJCWNoZWNrZWRJbmRleCA9IHRydWU7CiAKIAkJLyogQ2hlY2sgZm9yIHBhcnRpYWwgaW5kZXgg Ki8KLQkJaWYgKGluZGV4SW5mby0+aWlfUHJlZGljYXRlICE9IE5JTCkKKwkJaWYgKGluZGV4SW5m by0+aWlfQ2hlY2tlZFByZWRpY2F0ZSAmJiAhaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTYXRpc2Zp ZWQpCisJCXsKKwkJCS8qIFdlJ3ZlIGFscmVhZHkgY2hlY2tlZCBhbmQgdGhlIHByZWRpY2F0ZSB3 YXNuJ3Qgc2F0aXNmaWVkLiAqLworCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoaW5kZXhJ bmZvLT5paV9QcmVkaWNhdGUgIT0gTklMKQogCQl7CiAJCQlFeHByU3RhdGUgICpwcmVkaWNhdGU7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggMzRmODY1NDZmYzku LmVhNTBmY2FmNWRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5 VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAt NTQsMTAgKzU0LDEzIEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vz cy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJhY2Nlc3MvYXR0bnVtLmgiCisjaW5jbHVkZSAi YWNjZXNzL3N5c2F0dHIuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUg ImFjY2Vzcy90dXBjb252ZXJ0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R1cGRlc2MuaCIKICNpbmNs dWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIKICNpbmNsdWRl ICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5o IgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCkBAIC03NSw2ICs3OCw3IEBACiAjaW5j bHVkZSAidXRpbHMvZmxvYXQuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUg InV0aWxzL3NuYXBtZ3IuaCIKIAogCkBAIC0yNDUsNiArMjQ5LDEwIEBAIHR0c19hdHRyX2VxdWFs KE9pZCB0eXBpZCwgT2lkIGNvbGxhdGlvbiwgYm9vbCB0eXBieXZhbCwgaW50MTYgdHlwbGVuLAog CXR5cGVudHJ5ID0gbG9va3VwX3R5cGVfY2FjaGUodHlwaWQsCiAJCQkJCQkJCSBUWVBFQ0FDSEVf RVFfT1BSIHwgVFlQRUNBQ0hFX0VRX09QUl9GSU5GTyk7CiAKKwkvKiBVc2UgdGhlIHR5cGUncyBj b2xsYXRpb24gaWYgbm9uZSBwcm92aWRlZCAqLworCWlmIChjb2xsYXRpb24gPT0gLTEpCisJCWNv bGxhdGlvbiA9IHR5cGVudHJ5LT50eXBjb2xsYXRpb247CisKIAkvKgogCSAqIElmIG5vIGVxdWFs aXR5IG9wZXJhdG9yIGlzIGF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIGJpbmFyeSBjb21wYXJpc29u LgogCSAqIFRoaXMgaGFuZGxlcyB0eXBlcyB0aGF0IGRvbid0IGhhdmUgcHJvcGVyIGVxdWFsaXR5 IG9wZXJhdG9ycyBkZWZpbmVkLgpAQCAtMjkxLDEwOCArMjk5LDQxNSBAQCB0dHNfYXR0cl9lcXVh bChPaWQgdHlwaWQsIE9pZCBjb2xsYXRpb24sIGJvb2wgdHlwYnl2YWwsIGludDE2IHR5cGxlbiwK IH0KIAogLyoKLSAqIERldGVybWluZSB3aGljaCB1cGRhdGVkIGF0dHJpYnV0ZXMgYWN0dWFsbHkg Y2hhbmdlZCB2YWx1ZXMgYmV0d2VlbiBvbGQgYW5kCi0gKiBuZXcgdHVwbGVzIGFuZCBhcmUgcmVm ZXJlbmNlZCBieSBpbmRleGVzIG9uIHRoZSByZWxhdGlvbi4KKyAqIEV4ZWNDaGVja0luZGV4ZWRB dHRyc0ZvckNoYW5nZXMKKyAqCisgKiBEZXRlcm1pbmUgd2hpY2ggaW5kZXhlcyBuZWVkIHVwZGF0 aW5nIGJ5IGZpbmRpbmcgdGhlIHNldCBvZiBtb2RpZmllZAorICogaW5kZXhlZCBhdHRyaWJ1dGVz LgorICoKKyAqIEZvciBleHByZXNzaW9uIGluZGV4ZXMgYW5kIGluZGV4ZXMgd2hpY2ggaW1wbGVt ZW50IHRoZSBhbWNvbXBhcmVkYXR1bXMoKQorICogaW5kZXggQU0gQVBJIHdlJ2xsIG5lZWQgdG8g Zm9ybSBpbmRleCBkYXR1bSBhbmQgY29tcGFyZSBlYWNoIGF0dHJpYnV0ZSB0bworICogc2VlIGlm IGFueSBhY3R1YWxseSBjaGFuZ2VkLgorICoKKyAqIEZvciBleHByZXNzaW9uIGluZGV4ZXMgdGhl IHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBtaWdodCBub3QgY2hhbmdlIGF0IGFsbCwKKyAqIHRo aXMgaXMgY29tbW9uIHdpdGggSlNPTkIgY29sdW1ucywgd2hpY2ggcmVxdWlyZSBleHByZXNzaW9u IGluZGV4ZXMuICBJdCBpcworICogaXMgY29tbW9ucGxhY2UgdG8gaW5kZXggb25lIG9yIG1vcmUg ZmllbGRzIHdpdGhpbiBhIGRvY3VtZW50IGFuZCBwZXJmb3JtCisgKiB1cGRhdGVzIHRvIHRoZSBk b2N1bWVudCB3aGlsZSBsZWF2aW5nIHRoZSBpbmRleGVkIGZpZWxkcyB1bmNoYW5nZWQuICBUaGVz ZQorICogdXBkYXRlcyBkb24ndCBuZWNlc3NpdGF0ZSBpbmRleCB1cGRhdGVzLgorICoKKyAqIFBh cnRpYWwgaW5kZXhlcyB3b24ndCB0cmlnZ2VyIGluZGV4IHVwZGF0ZXMgd2hlbiB0aGUgb2xkL25l dyB0dXBsZXMgYXJlIGJvdGgKKyAqIG91dHNpZGUgb2YgdGhlIHByZWRpY2F0ZSByYW5nZS4gIEEg dHJhbnNpdGlvbiBpbnRvIG9yIG91dCBvZiB0aGUgcHJlZGljYXRlCisgKiBkb2VzIHJlcXVpcmUg YW4gaW5kZXggdXBkYXRlLgorICoKKyAqIEluZGV4ZXMgdGhhdCBzdXBwb3J0IGluZGV4LW9ubHkg c2NhbnMgKElPUykgc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgdGhhdAorICogaXMgdGhlIGJpbmFy eSBlcXVhdmFsZW50IG9mIHdoYXQgaXMgaW4gdGhlIHRhYmxlLiAgRm9yIHRoYXQgcmVhc29uIHdl IG11c3QKKyAqIHVzZSBkYXR1bUlzRXF1YWwoKSB3aGVuIGRlY2lkaW5nIGlmIGFuIGluZGV4IHVw ZGF0ZSBpcyByZXF1aXJlZCBvciBub3QuCisgKgorICogQWxsIG90aGVyIGluZGV4ZXMgcmVxdWly ZSB0ZXN0aW5nIG9sZC9uZXcgZGF0dW0gZm9yIGVxdWFsaXR5LCB3ZSBub3cgdGVzdAorICogd2l0 aCBhIHR5cGUtc3BlY2lmaWMgZXF1YWxpdHkgb3BlcmF0b3IgYW5kIGZhbGwgYmFjayB0byBkYXR1 bUlzRXF1YWwoKQorICogd2hlbiB0aGF0IGlzbid0IHBvc3NpYmxlLgorICoKKyAqIEZvciBhIEJU UkVFIGluZGV4IChuYnRyZWUpIHRoZWlyIGlzIGFuIGFkZGl0aW9uYWwgcmVhc29uIHRvIHVzZSBi aW5hcnkKKyAqIGNvbXBhcmlzb24gZm9yIGVxdWFsaXR5LiAgVElEIGRlZHVwbGljYXRpb24gb24g cGFnZSBzcGxpdCBpbiBuYnRyZWUgdXNlcworICogYmluYXJ5IGNvbXBhcmlzb24uCisgKgorICog VGhlIGdvYWwgaXMgZm9yIHRoZSBleGVjdXRvciB0byBrbm93LCBhaGVhZCBvZiBjYWxsaW5nIGlu dG8gdGhlIHRhYmxlIEFNIHRvCisgKiBwcm9jZXNzIHRoZSB1cGRhdGUgYW5kIGJlZm9yZSBjYWxs aW5nIGludG8gdGhlIGluZGV4IEFNIGZvciBpbnNlcnRpbmcgbmV3CisgKiBpbmRleCB0dXBsZXMs IHdoaWNoIGF0dHJpYnV0ZXMgaW4gdGhlIG5ldyBUdXBsZVRhYmxlU2xvdCwgaWYgYW55LCB0cnVl bHkKKyAqIG5lY2Vzc2l0YXRlIGEgbmV3IGluZGV4IHR1cGxlLgogICoKLSAqIFJldHVybnMgYSBC aXRtYXBzZXQgb2YgYXR0cmlidXRlIG9mZnNldHMgKDAtYmFzZWQsIGFkanVzdGVkIGJ5Ci0gKiBG aXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKSBvciBOVUxMIGlmIG5vIGF0dHJpYnV0 ZXMgY2hhbmdlZC4KKyAqIFJldHVybnMgYSBCaXRtYXBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGlu dGVyc2VjdHMgd2l0aCBpbmRleGVzIHdoaWNoIHJlcXVpcmUKKyAqIGEgbmV3IGluZGV4IHR1cGxl LgogICovCiBCaXRtYXBzZXQgKgogRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhSZXN1 bHRSZWxJbmZvICpyZWxpbmZvLAotCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqdHRzX29sZCwKLQkJ CQkJCQkJVHVwbGVUYWJsZVNsb3QgKnR0c19uZXcpCisJCQkJCQkJCUVTdGF0ZSAqZXN0YXRlLAor CQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqb2xkX3R0cywKKwkJCQkJCQkJVHVwbGVUYWJsZVNsb3Qg Km5ld190dHMpCiB7CiAJUmVsYXRpb24JcmVsYXRpb24gPSByZWxpbmZvLT5yaV9SZWxhdGlvbkRl c2M7CiAJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKLQlC aXRtYXBzZXQgICppbmRleGVkX2F0dHJzOwotCUJpdG1hcHNldCAgKm1vZGlmaWVkID0gTlVMTDsK LQlpbnQJCQlhdHRpZHg7CisJQml0bWFwc2V0ICAqbWl4X2F0dHJzID0gTlVMTDsKIAogCS8qIElm IG5vIGluZGV4ZXMsIHdlJ3JlIGRvbmUgKi8KIAlpZiAocmVsaW5mby0+cmlfTnVtSW5kaWNlcyA9 PSAwKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCi0JICogR2V0IHRoZSBzZXQgb2YgaW5kZXgga2V5 IGF0dHJpYnV0ZXMuICBUaGlzIGluY2x1ZGVzIHN1bW1hcml6aW5nLAotCSAqIGV4cHJlc3Npb24g aW5kZXhlcyBhbmQgYXR0cmlidXRlcyBtZW50aW9uZWQgaW4gdGhlIHByZWRpY2F0ZSBvZiBhCi0J ICogcGFydGl0aW9uIGJ1dCBub3QgdGhvc2UgaW4gSU5DTFVESU5HLgorCSAqIE5PVEU6IEV4cHJl c3Npb24gYW5kIHByZWRpY2F0ZXMgdGhhdCBhcmUgb2JzZXJ2ZWQgdG8gY2hhbmdlIHdpbGwgaGF2 ZQorCSAqIGFsbCB0aGVpciBhdHRyaWJ1dGVzIGFkZGVkIGludG8gdGhlIG1fYXR0cnMgc2V0IGtu b3dpbmcgdGhhdCBzb21lIG9mCisJICogdGhvc2UgbWlnaHQgbm90IGhhdmUgY2hhbmdlZC4gIFRh a2UgZm9yIGluc3RhbmNlIGFuIGluZGV4IG9uIChhICsgYikKKwkgKiBmb2xsb3dlZCBieSBhbiBp bmRleCBvbiAoYikgd2l0aCBhbiB1cGRhdGUgdGhhdCBjaGFuZ2VzIG9ubHkgdGhlIHZhbHVlCisJ ICogb2YgJ2EnLiAgV2UnbGwgYWRkIGJvdGggJ2EnIGFuZCAnYicgdG8gdGhlIG1fYXR0cnMgc2V0 IHRoZW4gbGF0ZXIgd2hlbgorCSAqIHJldmlld2luZyB0aGUgc2Vjb25kIGluZGV4IGFkZCAnYicg dG8gdGhlIHVfYXR0cnMgKHVuY2hhbmdlZCkgc2V0LiAgSW4KKwkgKiB0aGUgZW5kLCB3ZSdsbCBy ZW1vdmUgYWxsIHRoZSB1bmNoYW5nZWQgZnJvbSB0aGUgbV9hdHRycyBhbmQgZ2V0IG91cgorCSAq IGRlc2lyZWQgcmVzdWx0LgogCSAqLwotCWluZGV4ZWRfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4 QXR0ckJpdG1hcChyZWxhdGlvbiwKLQkJCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfSU5E RVhFRCk7Ci0JQXNzZXJ0KCFibXNfaXNfZW1wdHkoaW5kZXhlZF9hdHRycykpOwogCi0JLyoKLQkg KiBOT1RFOiBJdCBpcyBpbXBvcnRhbnQgdG8gc2NhbiBhbGwgaW5kZXhlZCBhdHRyaWJ1dGVzIGlu IHRoZSB0dXBsZXMKLQkgKiBiZWNhdXNlIEV4ZWNHZXRBbGxVcGRhdGVkQ29scyB3b24ndCBpbmNs dWRlIGNvbHVtbnMgdGhhdCBtYXkgaGF2ZSBiZWVuCi0JICogbW9kaWZpZWQgdmlhIGhlYXBfbW9k aWZ5X3R1cGxlX2J5X2NvbCB3aGljaCBpcyB0aGUgY2FzZSBpbgotCSAqIHRzdmVjdG9yX3VwZGF0 ZV90cmlnZ2VyLgotCSAqLwotCWF0dGlkeCA9IC0xOwotCXdoaWxlICgoYXR0aWR4ID0gYm1zX25l eHRfbWVtYmVyKGluZGV4ZWRfYXR0cnMsIGF0dGlkeCkpID49IDApCisJLyogRmluZCB0aGUgaW5k ZXhlcyB0aGF0IHJlZmVyZW5jZSB0aGlzIGF0dHJpYnV0ZSAqLworCWZvciAoaW50IGkgPSAwOyBp IDwgcmVsaW5mby0+cmlfTnVtSW5kaWNlczsgaSsrKQogCXsKLQkJLyogYXR0aWR4IGlzIHplcm8t YmFzZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRyaWJ1dGUgbnVtYmVyICovCi0JCUF0dHJO dW1iZXIJYXR0cm51bSA9IGF0dGlkeCArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1i ZXI7Ci0JCUZvcm1fcGdfYXR0cmlidXRlIGF0dHI7Ci0JCWJvb2wJCW9sZG51bGwsCi0JCQkJCW5l d251bGw7Ci0JCURhdHVtCQlvbGR2YWwsCi0JCQkJCW5ld3ZhbDsKKwkJUmVsYXRpb24JaW5kZXgg PSByZWxpbmZvLT5yaV9JbmRleFJlbGF0aW9uRGVzY3NbaV07CisJCUluZGV4QW1Sb3V0aW5lICph bXJvdXRpbmUgPSBpbmRleC0+cmRfaW5kYW07CisJCUluZGV4SW5mbyAgKmluZGV4SW5mbyA9IHJl bGluZm8tPnJpX0luZGV4UmVsYXRpb25JbmZvW2ldOworCQlCaXRtYXBzZXQgICptX2F0dHJzID0g TlVMTDsgLyogKHBvc3NpYmx5KSBtb2RpZmllZCBrZXkgYXR0cmlidXRlcyAqLworCQlCaXRtYXBz ZXQgICpwX2F0dHJzID0gTlVMTDsgLyogKHBvc3NpYmx5KSBtb2RpZmllZCBwcmVkaWNhdGUKKwkJ CQkJCQkJCSAqIGF0dHJpYnV0ZXMgKi8KKwkJQml0bWFwc2V0ICAqdV9hdHRycyA9IE5VTEw7IC8q IHVubW9kaWZpZWQgYXR0cmlidXRlcyAqLworCQlCaXRtYXBzZXQgICpwcmVfYXR0cnMgPSBpbmRl eEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJzOworCQlib29sCQloYXNfZXhwcmVzc2lvbnMgPSAoaW5k ZXhJbmZvLT5paV9FeHByZXNzaW9ucyAhPSBOSUwpOworCQlib29sCQloYXNfYW1fY29tcGFyZSA9 IChhbXJvdXRpbmUtPmFtY29tcGFyZWRhdHVtcyAhPSBOVUxMKTsKKwkJYm9vbAkJc3VwcG9ydHNf aW9zID0gKGFtcm91dGluZS0+YW1jYW5yZXR1cm4gIT0gTlVMTCk7CisJCWJvb2wJCWlzX3BhcnRp YWwgPSAoaW5kZXhJbmZvLT5paV9QcmVkaWNhdGUgIT0gTklMKTsKKwkJVHVwbGVUYWJsZVNsb3Qg KnNhdmVfc2NhbnR1cGxlOworCQlFeHByQ29udGV4dCAqZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4 cHJDb250ZXh0KGVzdGF0ZSk7CisJCURhdHVtCQlvbGRfdmFsdWVzW0lOREVYX01BWF9LRVlTXTsK KwkJYm9vbAkJb2xkX2lzbnVsbFtJTkRFWF9NQVhfS0VZU107CisJCURhdHVtCQluZXdfdmFsdWVz W0lOREVYX01BWF9LRVlTXTsKKwkJYm9vbAkJbmV3X2lzbnVsbFtJTkRFWF9NQVhfS0VZU107CisK KwkJLyogSWYgd2UndmUgcmV2aWV3ZWQgYWxsIHRoZSBhdHRyaWJ1dGVzIG9uIHRoaXMgaW5kZXgs IG1vdmUgb24gKi8KKwkJaWYgKGJtc19pc19zdWJzZXQoaW5kZXhJbmZvLT5paV9JbmRleGVkQXR0 cnMsIG1peF9hdHRycykpCisJCQljb250aW51ZTsKIAotCQkvKgotCQkgKiBJZiBpdCdzIGEgd2hv bGUtdHVwbGUgcmVmZXJlbmNlLCByZWNvcmQgYXMgbW9kaWZpZWQuICBJdCdzIG5vdAotCQkgKiBy ZWFsbHkgd29ydGggc3VwcG9ydGluZyB0aGlzIGNhc2UsIHNpbmNlIGl0IGNvdWxkIG9ubHkgc3Vj Y2VlZAotCQkgKiBhZnRlciBhIG5vLW9wIHVwZGF0ZSwgd2hpY2ggaXMgaGFyZGx5IGEgY2FzZSB3 b3J0aCBvcHRpbWl6aW5nIGZvci4KLQkJICovCi0JCWlmIChhdHRybnVtID09IDApCisJCS8qIENo ZWNraW5nIHBhcnRpYWwgYXQgdGhpcyBwb2ludCBpc24ndCB2aWFibGUgd2hlbiB3ZSdyZSBzZXJp YWxpemFibGUgKi8KKwkJaWYgKGlzX3BhcnRpYWwgJiYgSXNvbGF0aW9uSXNTZXJpYWxpemFibGUo KSkKIAkJewotCQkJbW9kaWZpZWQgPSBibXNfYWRkX21lbWJlcihtb2RpZmllZCwgYXR0aWR4KTsK LQkJCWNvbnRpbnVlOworCQkJcF9hdHRycyA9IGJtc19hZGRfbWVtYmVycyhwX2F0dHJzLCBwcmVf YXR0cnMpOworCQl9CisJCS8qIENoZWNrIHBhcnRpYWwgaW5kZXggcHJlZGljYXRlICovCisJCWVs c2UgaWYgKGlzX3BhcnRpYWwpCisJCXsKKwkJCUV4cHJTdGF0ZSAgKnBzdGF0ZTsKKwkJCWJvb2wJ CW9sZF9xdWFsaWZpZXMsCisJCQkJCQluZXdfcXVhbGlmaWVzOworCisJCQlpZiAoIWluZGV4SW5m by0+aWlfQ2hlY2tlZFByZWRpY2F0ZSkKKwkJCQlwc3RhdGUgPSBFeGVjUHJlcGFyZVF1YWwoaW5k ZXhJbmZvLT5paV9QcmVkaWNhdGUsIGVzdGF0ZSk7CisJCQllbHNlCisJCQkJcHN0YXRlID0gaW5k ZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0ZTsKKworCQkJc2F2ZV9zY2FudHVwbGUgPSBlY29udGV4 dC0+ZWN4dF9zY2FudHVwbGU7CisKKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IG9sZF90 dHM7CisJCQlvbGRfcXVhbGlmaWVzID0gRXhlY1F1YWwocHN0YXRlLCBlY29udGV4dCk7CisKKwkJ CWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IG5ld190dHM7CisJCQluZXdfcXVhbGlmaWVzID0g RXhlY1F1YWwocHN0YXRlLCBlY29udGV4dCk7CisKKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBs ZSA9IHNhdmVfc2NhbnR1cGxlOworCisJCQlpbmRleEluZm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUg PSB0cnVlOworCQkJaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0ZSA9IHBzdGF0ZTsKKwkJCWlu ZGV4SW5mby0+aWlfUHJlZGljYXRlU2F0aXNmaWVkID0gbmV3X3F1YWxpZmllczsKKworCQkJLyog Qm90aCBvdXRzaWRlIHByZWRpY2F0ZSwgaW5kZXggZG9lc24ndCBuZWVkIHVwZGF0ZSAqLworCQkJ aWYgKCFvbGRfcXVhbGlmaWVzICYmICFuZXdfcXVhbGlmaWVzKQorCQkJCWNvbnRpbnVlOworCisJ CQkvKiBBIHRyYW5zaXRpb24gbWVhbnMgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGluZGV4ICovCisJ CQlpZiAob2xkX3F1YWxpZmllcyAhPSBuZXdfcXVhbGlmaWVzKQorCQkJCXBfYXR0cnMgPSBibXNf Y29weShwcmVfYXR0cnMpOworCisJCQkvKgorCQkJICogV2hlbiBib3RoIGFyZSB3aXRoaW4gdGhl IHByZWRpY2F0ZSB3ZSBtdXN0IHVwZGF0ZSB0aGlzIGluZGV4LAorCQkJICogYnV0IG9ubHkgaWYg b25lIG9mIHRoZSBpbmRleCBrZXkgYXR0cmlidXRlcyBjaGFuZ2VkLgorCQkJICovCiAJCX0KIAog CQkvKgotCQkgKiBMaWtld2lzZSwgaW5jbHVkZSBpbiB0aGUgbW9kaWZpZWQgc2V0IGFueSBzeXN0 ZW0gYXR0cmlidXRlIG90aGVyCi0JCSAqIHRoYW4gdGFibGVPSUQ7IHdlIGNhbm5vdCBleHBlY3Qg dGhlc2UgdG8gYmUgY29uc2lzdGVudCBpbiBhIEhPVAotCQkgKiBjaGFpbiwgb3IgZXZlbiB0byBi ZSBzZXQgY29ycmVjdGx5IHlldCBpbiB0aGUgbmV3IHR1cGxlLgorCQkgKiBFeHByZXNzaW9uIGlu ZGV4ZXMsIG9yIGFuIGluZGV4IHRoYXQgaGFzIGEgY29tcGFyaXNvbiBmdW5jdGlvbiwKKwkJICog cmVxdWlyZXMgdXMgdG8gZm9ybSBpbmRleCBkYXR1bXMgYW5kIGNvbXBhcmUuICBXZSd2ZSBkb25l IGFsbCB3ZQorCQkgKiBjYW4gdG8gYXZvaWQgdGhpcyBvdmVyaGVhZCwgbm93IGl0J3MgdGltZSB0 byBiaXRlIHRoZSBidWxsZXQgYW5kCisJCSAqIGdldCBpdCBkb25lLgorCQkgKgorCQkgKiBYWFg6 IENhY2hpbmcgdGhlIHZhbHVlcy9pc251bGwgbWlnaHQgYmUgYSB3aW4gYW5kIGF2b2lkIG9uZSBv ZiB0aGUKKwkJICogYWRkZWQgY2FsbHMgdG8gRm9ybUluZGV4RGF0dW0oKS4KIAkJICovCi0JCWlm IChhdHRybnVtIDwgMCkKKwkJaWYgKGhhc19leHByZXNzaW9ucyB8fCBoYXNfYW1fY29tcGFyZSkK IAkJewotCQkJaWYgKGF0dHJudW0gIT0gVGFibGVPaWRBdHRyaWJ1dGVOdW1iZXIpCi0JCQkJbW9k aWZpZWQgPSBibXNfYWRkX21lbWJlcihtb2RpZmllZCwgYXR0aWR4KTsKLQkJCWNvbnRpbnVlOwot CQl9CisJCQlzYXZlX3NjYW50dXBsZSA9IGVjb250ZXh0LT5lY3h0X3NjYW50dXBsZTsKIAotCQkv KiBFeHRyYWN0IHZhbHVlcyBmcm9tIGJvdGggc2xvdHMgKi8KLQkJb2xkdmFsID0gc2xvdF9nZXRh dHRyKHR0c19vbGQsIGF0dHJudW0sICZvbGRudWxsKTsKLQkJbmV3dmFsID0gc2xvdF9nZXRhdHRy KHR0c19uZXcsIGF0dHJudW0sICZuZXdudWxsKTsKKwkJCS8qIEV2YWx1YXRlIGV4cHJlc3Npb25z IChpZiBhbnkpIHRvIGdldCBiYXNlIGRhdHVtcyAqLworCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1 cGxlID0gb2xkX3R0czsKKwkJCUZvcm1JbmRleERhdHVtKGluZGV4SW5mbywgb2xkX3R0cywgZXN0 YXRlLCBvbGRfdmFsdWVzLCBvbGRfaXNudWxsKTsKIAotCQkvKiBJZiBvbmUgdmFsdWUgaXMgTlVM TCBhbmQgdGhlIG90aGVyIGlzIG5vdCwgdGhleSBhcmUgbm90IGVxdWFsICovCi0JCWlmIChvbGRu dWxsICE9IG5ld251bGwpCi0JCXsKLQkJCW1vZGlmaWVkID0gYm1zX2FkZF9tZW1iZXIobW9kaWZp ZWQsIGF0dGlkeCk7Ci0JCQljb250aW51ZTsKKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9 IG5ld190dHM7CisJCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sIG5ld190dHMsIGVzdGF0ZSwg bmV3X3ZhbHVlcywgbmV3X2lzbnVsbCk7CisKKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9 IHNhdmVfc2NhbnR1cGxlOworCisJCQkvKiBDb21wYXJlIHRoZSBpbmRleCBrZXkgZGF0dW1zIGZv ciBlcXVhbGl0eSAqLworCQkJZm9yIChpbnQgaiA9IDA7IGogPCBpbmRleEluZm8tPmlpX051bUlu ZGV4S2V5QXR0cnM7IGorKykKKwkJCXsKKwkJCQlBdHRyTnVtYmVyCXJlbF9hdHRybnVtID0gaW5k ZXhJbmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2pdOworCQkJCWludAkJCXJlbF9hdHRyaWR4ID0g cmVsX2F0dHJudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQkJCWlu dAkJCW50aF9leHByID0gMDsKKwkJCQlib29sCQl2YWx1ZXNfZXF1YWwgPSBmYWxzZTsKKworCQkJ CS8qCisJCQkJICogV2UgY2FuJ3Qgc2tpcCBhdHRyaWJ1dGVzIHRoYXQgd2UndmUgYWxyZWFkeSBp ZGVudGlmaWVkIGFzCisJCQkJICogdHJpZ2dlcmluZyBhbiBpbmRleCB1cGRhdGUgYmVjYXVzZSB3 ZSBtYXkgaGF2ZSBhZGRlZCBhbgorCQkJCSAqIGF0dHJpYnV0ZSBmcm9tIGFuIGV4cHJlc3Npb24g aW5kZXggdGhhdCBkaWRuJ3QgY2hhbmdlIGJ1dAorCQkJCSAqIHRoZSBleHByZXNzaW9uIGRpZCBh bmQgdGhhdCB1bmNoYW5nZWQgYXR0cmlidXRlIGlzCisJCQkJICogcmVmZXJlbmNlZCBpbiBhIHN1 YnNlcXVlbnQgaW5kZXggd2hlcmUgd2Ugd2lsbCBkaXNjb3ZlcgorCQkJCSAqIHRoYXQgZmFjdC4K KwkJCQkgKi8KKworCQkJCS8qIEEgY2hhbmdlIHRvL2Zyb20gTlVMTCwgcmVjb3JkIHRoaXMgYXR0 cmlidXRlICovCisJCQkJaWYgKG9sZF9pc251bGxbal0gIT0gbmV3X2lzbnVsbFtqXSkKKwkJCQl7 CisJCQkJCS8qIEV4cHJlc3Npb25zIHdpbGwgaGF2ZSByZWxfYXR0cm51bSA9PSAwICovCisJCQkJ CWlmIChyZWxfYXR0cm51bSA9PSAwKQorCQkJCQkJbV9hdHRycyA9IGJtc19hZGRfbWVtYmVycyht X2F0dHJzLCBpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zQXR0cnMpOworCQkJCQllbHNlCisJCQkJ CQltX2F0dHJzID0gYm1zX2FkZF9tZW1iZXIobV9hdHRycywgcmVsX2F0dHJpZHgpOworCQkJCQlj b250aW51ZTsKKwkJCQl9CisKKwkJCQkvKiBCb3RoIE5VTEwsIG5vIGNoYW5nZSAqLworCQkJCWlm IChvbGRfaXNudWxsW2pdKQorCQkJCXsKKwkJCQkJaWYgKHJlbF9hdHRybnVtICE9IDApCisJCQkJ CQl1X2F0dHJzID0gYm1zX2FkZF9tZW1iZXIodV9hdHRycywgcmVsX2F0dHJpZHgpOworCisJCQkJ CWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8qCisJCQkJICogVXNlIGluZGV4IEFNJ3MgY29tcGFy aXNvbiBmdW5jdGlvbiBpZiBwcmVzZW50IHdoZW4KKwkJCQkgKiBjb21wYXJpbmcgdGhlIGluZGV4 IGRhdHVtIGZvcm1lZCB3aGVuIGNyZWF0aW5nIGFuIGluZGV4CisJCQkJICoga2V5LgorCQkJCSAq LworCQkJCWlmIChoYXNfYW1fY29tcGFyZSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIE5PVEU6 IEZvciBBTSBjb21wYXJpc29uLCBwYXNzIHRoZSAxLWJhc2VkIGluZGV4CisJCQkJCSAqIGF0dHJp YnV0ZSBudW1iZXIuIFRoZSBBTSdzIGNvbXBhcmUgZnVuY3Rpb24gZXhwZWN0cyB0aGUKKwkJCQkJ ICogc2FtZSBudW1iZXJpbmcgYXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBBTS4KKwkJCQkJICov CisJCQkJCXZhbHVlc19lcXVhbCA9IGFtcm91dGluZS0+YW1jb21wYXJlZGF0dW1zKGluZGV4LCBq ICsgMSwKKwkJCQkJCQkJCQkJCQkJCSAgb2xkX3ZhbHVlc1tqXSwgb2xkX2lzbnVsbFtqXSwKKwkJ CQkJCQkJCQkJCQkJCSAgbmV3X3ZhbHVlc1tqXSwgbmV3X2lzbnVsbFtqXSk7CisJCQkJfQorCQkJ CWVsc2UKKwkJCQl7CisJCQkJCS8qIE5vbi16ZXJvIGF0dHJpYnV0ZSBtZWFucyBub3QgYW4gZXhw cmVzc2lvbiAqLworCQkJCQlpZiAocmVsX2F0dHJudW0gIT0gMCkKKwkJCQkJeworCQkJCQkJaWYg KHN1cHBvcnRzX2lvcykKKwkJCQkJCXsKKwkJCQkJCQlDb21wYWN0QXR0cmlidXRlICphdHRyID0g VHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgcmVsX2F0dHJudW0gLSAxKTsKKworCQkJCQkJ CXZhbHVlc19lcXVhbCA9IGRhdHVtSXNFcXVhbChvbGRfdmFsdWVzW2pdLAorCQkJCQkJCQkJCQkJ CQluZXdfdmFsdWVzW2pdLAorCQkJCQkJCQkJCQkJCQlhdHRyLT5hdHRieXZhbCwKKwkJCQkJCQkJ CQkJCQkJYXR0ci0+YXR0bGVuKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJ CQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCByZWxfYXR0 cm51bSAtIDEpOworCisJCQkJCQkJLyoKKwkJCQkJCQkgKiBDb21wYXJlIHVzaW5nIHR5cGUtc3Bl Y2lmaWMgZXF1YWxpdHkgd2hpY2ggYXQKKwkJCQkJCQkgKiB0aGlzIHBvaW50IGlzIHRoZSByZWxh dGlvbidzIHR5cGUgYmVjYXVzZQorCQkJCQkJCSAqIEZvcm1JbmRleERhdHVtKCkgd2lsbCBwb3B1 bGF0ZSB0aGUgdmFsdWVzL251bGxzCisJCQkJCQkJICogYnV0IHdvbid0IHRyYW5zZm9ybSB0aGVt IGludG8gdGhlIGZpbmFsIHZhbHVlcworCQkJCQkJCSAqIGRlc3RpbmVkIGZvciB0aGUgaW5kZXgg dHVwbGUsIHRoYXQncyBsZWZ0IHRvCisJCQkJCQkJICogaW5kZXhfZm9ybV90dXBsZSgpIHdoaWNo IHdlIGRvbid0IGNhbGwgKG9uCisJCQkJCQkJICogcHVycG9zZSkuCisJCQkJCQkJICovCisJCQkJ CQkJdmFsdWVzX2VxdWFsID0gdHRzX2F0dHJfZXF1YWwoYXR0ci0+YXR0dHlwaWQsCisJCQkJCQkJ CQkJCQkJCSAgYXR0ci0+YXR0Y29sbGF0aW9uLAorCQkJCQkJCQkJCQkJCQkgIGF0dHItPmF0dGJ5 dmFsLAorCQkJCQkJCQkJCQkJCQkgIGF0dHItPmF0dGxlbiwKKwkJCQkJCQkJCQkJCQkJICBvbGRf dmFsdWVzW2pdLAorCQkJCQkJCQkJCQkJCQkgIG5ld192YWx1ZXNbal0pOworCQkJCQkJfQorCQkJ CQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIEFuIGV4cHJlc3Npb24g b24gYW4gaW5kZXhlZCBhdHRyaWJ1dGUgd2l0aG91dAorCQkJCQkJICogY3VzdG9tIEFNIGNvbXBh cmlzb24gZnVuY3Rpb24uIEluIHRoaXMgY2FzZSwgYmVjYXNlCisJCQkJCQkgKiBpbmRleGVzIHdp bGwgc3RvcmUgdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbidzCisJCQkJCQkgKiBldmFsdWF0 aW9uLCB3ZSBjYW4gdGVzdCBmb3IgZXF1YWxpdHkgdXNpbmcgdGhlCisJCQkJCQkgKiBleHByZXNz aW9uJ3MgcmVzdWx0IHR5cGUuICBUaGlzIGFsbG93cyBmb3IgSlNPTkIKKwkJCQkJCSAqIGFuZCBj dXN0b20gdHlwZSBlcXVhbGl0eSB0ZXN0cywgd2hpY2ggbWF5IG5vdCBiZQorCQkJCQkJICogdGhl IHNhbWUgYXMgYmluYXJ5IGVxdWFsaXR5LCB0byBiZSBpbiBlZmZlY3QuICBUaGUKKwkJCQkJCSAq IHJlc3VsdCBzdG9yZWQgaW4gdGhlIGluZGV4IGFuZCB1c2VkIGluIGluZGV4LW9ubHkKKwkJCQkJ CSAqIHNjYW5zIHdpbGwgYmUgdmFsaWQgYXMgaXQgaXMgdGhlIGV4cHJlc3Npb25zCisJCQkJCQkg KiByZXN1bHQsIHdoaWNoIHNob3VsZG4ndCBjaGFuZ2UgZ2l2ZW4gdGhlIHNhbWUKKwkJCQkJCSAq IGlucHV0LgorCQkJCQkJICoKKwkJCQkJCSAqIEF0IHRoaXMgcG9pbnQgdGhlIGV4cHJlc3Npb24n cyB0eXBlIGlzIHdoYXQgaXMKKwkJCQkJCSAqIHJlcXVpcmVkIHdoZW4gdGVzdGluZyBmb3IgZXF1 YWxpdHksIG5vdCB0aGUgaW5kZXgncworCQkJCQkJICogdHlwZSwgYmVjYXVzZSB0aGUgdmFsdWUg Y3JlYXRlZCBieSBGb3JtSW5kZXhEYXR1bSgpCisJCQkJCQkgKiBpcyB0aGUgZXhwcmVzc2lvbidz IHJlc3VsdC4gIExhdGVyIG9uIGluCisJCQkJCQkgKiBpbmRleF9mb3JtX3R1cGxlKCkgYW4gaW5k ZXggbWF5IHRyYW5zZm9ybSB0aGUgdmFsdWUKKwkJCQkJCSAqIHdoZW4gZm9ybWluZyBpdCdzIGtl eSAoYXMgaXMgdGhlIGNhc2Ugd2l0aCBIQVNIKSwKKwkJCQkJCSAqIGJ1dCBhdCB0aGlzIHBvaW50 IHRoZSBEYXR1bSBpcyB0aGUgZXhwcmVzc2lvbidzCisJCQkJCQkgKiByZXN1bHQgdHlwZS4KKwkJ CQkJCSAqLworCQkJCQkJT2lkCQkJZXhwcl90eXBlX29pZDsKKwkJCQkJCWludDE2CQl0eXBsZW47 CisJCQkJCQlib29sCQl0eXBieXZhbDsKKwkJCQkJCUV4cHIJICAgKmV4cHIgPSAoRXhwciAqKSBs aXN0X250aChpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zLCBudGhfZXhwcik7CisKKwkJCQkJCUFz c2VydChleHByICE9IE5VTEwpOworCisJCQkJCQkvKiBHZXQgdHlwZSBPSUQgZnJvbSB0aGUgZXhw cmVzc2lvbiAqLworCQkJCQkJZXhwcl90eXBlX29pZCA9IGV4cHJUeXBlKChOb2RlICopIGV4cHIp OworCisJCQkJCQkvKiBHZXQgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBPSUQgKi8KKwkJCQkJ CWdldF90eXBsZW5ieXZhbChleHByX3R5cGVfb2lkLCAmdHlwbGVuLCAmdHlwYnl2YWwpOworCisJ CQkJCQl2YWx1ZXNfZXF1YWwgPSB0dHNfYXR0cl9lcXVhbChleHByX3R5cGVfb2lkLAorCQkJCQkJ CQkJCQkJCSAgLTEsCS8qIHVzZSBUQkQgZXhwciB0eXBlICovCisJCQkJCQkJCQkJCQkJICB0eXBi eXZhbCwKKwkJCQkJCQkJCQkJCQkgIHR5cGxlbiwKKwkJCQkJCQkJCQkJCQkgIG9sZF92YWx1ZXNb al0sCisJCQkJCQkJCQkJCQkJICBuZXdfdmFsdWVzW2pdKTsKKwkJCQkJfQorCQkJCX0KKworCQkJ CWlmICghdmFsdWVzX2VxdWFsKQorCQkJCXsKKwkJCQkJLyogRXhwcmVzc2lvbnMgd2lsbCBoYXZl IHJlbF9hdHRybnVtID09IDAgKi8KKwkJCQkJaWYgKHJlbF9hdHRybnVtID09IDApCisJCQkJCQlt X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKG1fYXR0cnMsIGluZGV4SW5mby0+aWlfRXhwcmVzc2lv bnNBdHRycyk7CisJCQkJCWVsc2UKKwkJCQkJCW1fYXR0cnMgPSBibXNfYWRkX21lbWJlcihtX2F0 dHJzLCByZWxfYXR0cmlkeCk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmIChyZWxf YXR0cm51bSAhPSAwKQorCQkJCQkJdV9hdHRycyA9IGJtc19hZGRfbWVtYmVyKHVfYXR0cnMsIHJl bF9hdHRyaWR4KTsKKwkJCQl9CisKKwkJCQlpZiAocmVsX2F0dHJudW0gPT0gMCkKKwkJCQkJbnRo X2V4cHIrKzsKKwkJCX0KIAkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBIZXJlIHdlIGtu b3cgdGhhdCB3ZSdyZSByZXZpZXdpbmcgYW4gaW5kZXggdGhhdCBkb2Vzbid0IGhhdmUgYQorCQkJ ICogcGFydGlhbCBwcmVkaWNhdGUsIGRvZXNuJ3QgdXNlIGV4cHJlc3Npb25zLCBhbmQgZG9lc24n dCBoYXZlIGEKKwkJCSAqIGFtY29tcGFyZWRhdHVtcygpIGltcGxlbWVudGF0aW9uLiAgSWYgdGhp cyBpbmRleCBzdXBwb3J0cyBJT1MKKwkJCSAqIHdlIG5lZWQgdG8gdXNlIGJpbmFyeSBjb21wYXJp c29uLCBpZiBub3QgdGhlbiB0eXBlLXNwZWNpZmljCisJCQkgKiB3aWxsIHByb3ZpZGUgYSBtb3Jl IGFjY3VyYXRlIHJlc3VsdC4KKwkJCSAqLwogCi0JCS8qIElmIGJvdGggYXJlIE5VTEwsIGNvbnNp ZGVyIHRoZW0gZXF1YWwgKi8KLQkJaWYgKG9sZG51bGwpCi0JCQljb250aW51ZTsKKwkJCS8qIENv bXBhcmUgdGhlIGluZGV4IGtleSBkYXR1bXMgZm9yIGVxdWFsaXR5ICovCisJCQlmb3IgKGludCBq ID0gMDsgaiA8IGluZGV4SW5mby0+aWlfTnVtSW5kZXhLZXlBdHRyczsgaisrKQorCQkJeworCQkJ CUF0dHJOdW1iZXIJcmVsX2F0dHJudW07CisJCQkJaW50CQkJcmVsX2F0dHJpZHg7CisJCQkJYm9v bAkJdmFsdWVzX2VxdWFsID0gZmFsc2U7CisJCQkJYm9vbAkJb2xkX251bGwsCisJCQkJCQkJbmV3 X251bGw7CisJCQkJRGF0dW0JCW9sZF92YWwsCisJCQkJCQkJbmV3X3ZhbDsKIAotCQkvKiBHZXQg YXR0cmlidXRlIG1ldGFkYXRhICovCi0JCUFzc2VydChhdHRybnVtID4gMCAmJiBhdHRybnVtIDw9 IHR1cGRlc2MtPm5hdHRzKTsKLQkJYXR0ciA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgYXR0cm51 bSAtIDEpOwotCi0JCS8qIENvbXBhcmUgdXNpbmcgdHlwZS1zcGVjaWZpYyBlcXVhbGl0eSBvcGVy YXRvciAqLwotCQlpZiAoIXR0c19hdHRyX2VxdWFsKGF0dHItPmF0dHR5cGlkLAotCQkJCQkJCWF0 dHItPmF0dGNvbGxhdGlvbiwKLQkJCQkJCQlhdHRyLT5hdHRieXZhbCwKLQkJCQkJCQlhdHRyLT5h dHRsZW4sCi0JCQkJCQkJb2xkdmFsLAotCQkJCQkJCW5ld3ZhbCkpCi0JCQltb2RpZmllZCA9IGJt c19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOwotCX0KKwkJCQlyZWxfYXR0cm51bSA9IGlu ZGV4SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVyc1tqXTsKKwkJCQlyZWxfYXR0cmlkeCA9IHJlbF9h dHRybnVtIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKworCQkJCS8qIFpl cm8gd291bGQgbWVhbiBleHByZXNzaW9uLCBzb21ldGhpbmcgd2UgZG9uJ3QgZXhwZWN0IGhlcmUg Ki8KKwkJCQlBc3NlcnQocmVsX2F0dHJudW0gPiAwICYmIHJlbF9hdHRybnVtIDw9IHR1cGRlc2Mt Pm5hdHRzKTsKKworCQkJCS8qIEV4dHJhY3QgdmFsdWVzIGZyb20gYm90aCBzbG90cyBmb3IgdGhp cyBhdHRyaWJ1dGUgKi8KKwkJCQlvbGRfdmFsID0gc2xvdF9nZXRhdHRyKG9sZF90dHMsIHJlbF9h dHRybnVtLCAmb2xkX251bGwpOworCQkJCW5ld192YWwgPSBzbG90X2dldGF0dHIobmV3X3R0cywg cmVsX2F0dHJudW0sICZuZXdfbnVsbCk7CiAKLQlibXNfZnJlZShpbmRleGVkX2F0dHJzKTsKKwkJ CQkvKgorCQkJCSAqIElmIG9uZSB2YWx1ZSBpcyBOVUxMIGFuZCB0aGUgb3RoZXIgaXMgbm90LCB0 aGV5IGFyZSBub3QKKwkJCQkgKiBlcXVhbAorCQkJCSAqLworCQkJCWlmIChvbGRfbnVsbCAhPSBu ZXdfbnVsbCkKKwkJCQl7CisJCQkJCW1fYXR0cnMgPSBibXNfYWRkX21lbWJlcihtX2F0dHJzLCBy ZWxfYXR0cmlkeCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8qIElmIGJvdGggYXJl IE5VTEwsIGNvbnNpZGVyIHRoZW0gZXF1YWwgKi8KKwkJCQlpZiAob2xkX251bGwpCisJCQkJewor CQkJCQl1X2F0dHJzID0gYm1zX2FkZF9tZW1iZXIodV9hdHRycywgcmVsX2F0dHJpZHgpOworCQkJ CQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoc3VwcG9ydHNfaW9zKQorCQkJCXsKKwkJCQkJ Q29tcGFjdEF0dHJpYnV0ZSAqYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGRlc2MsIHJl bF9hdHRybnVtIC0gMSk7CisKKwkJCQkJdmFsdWVzX2VxdWFsID0gZGF0dW1Jc0VxdWFsKG9sZF92 YWwsCisJCQkJCQkJCQkJCQluZXdfdmFsLAorCQkJCQkJCQkJCQkJYXR0ci0+YXR0Ynl2YWwsCisJ CQkJCQkJCQkJCQlhdHRyLT5hdHRsZW4pOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCByZWxfYXR0cm51 bSAtIDEpOworCisJCQkJCS8qCisJCQkJCSAqIENvbXBhcmUgdXNpbmcgdHlwZS1zcGVjaWZpYyBl cXVhbGl0eSB3aGljaCBhdCB0aGlzCisJCQkJCSAqIHBvaW50IGlzIHRoZSByZWxhdGlvbidzIHR5 cGUgYmVjYXVzZSBGb3JtSW5kZXhEYXR1bSgpCisJCQkJCSAqIHdpbGwgcG9wdWxhdGUgdGhlIHZh bHVlcy9udWxscyBidXQgd29uJ3QgdHJhbnNmb3JtIHRoZW0KKwkJCQkJICogaW50byB0aGUgZmlu YWwgdmFsdWVzIGRlc3RpbmVkIGZvciB0aGUgaW5kZXggdHVwbGUsCisJCQkJCSAqIHRoYXQncyBs ZWZ0IHRvIGluZGV4X2Zvcm1fdHVwbGUoKSB3aGljaCB3ZSBkb24ndCBjYWxsCisJCQkJCSAqIChv biBwdXJwb3NlKS4KKwkJCQkJICovCisJCQkJCXZhbHVlc19lcXVhbCA9IHR0c19hdHRyX2VxdWFs KGF0dHItPmF0dHR5cGlkLAorCQkJCQkJCQkJCQkJICBhdHRyLT5hdHRjb2xsYXRpb24sCisJCQkJ CQkJCQkJCQkgIGF0dHItPmF0dGJ5dmFsLAorCQkJCQkJCQkJCQkJICBhdHRyLT5hdHRsZW4sCisJ CQkJCQkJCQkJCQkgIG9sZF92YWwsCisJCQkJCQkJCQkJCQkgIG5ld192YWwpOworCQkJCX0KKwor CQkJCWlmICghdmFsdWVzX2VxdWFsKQorCQkJCQltX2F0dHJzID0gYm1zX2FkZF9tZW1iZXIobV9h dHRycywgcmVsX2F0dHJpZHgpOworCQkJCWVsc2UKKwkJCQkJdV9hdHRycyA9IGJtc19hZGRfbWVt YmVyKHVfYXR0cnMsIHJlbF9hdHRyaWR4KTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIEhlcmUg d2Uga25vdyBhbGwgdGhlIGF0dHJpYnV0ZXMgd2UgdGhvdWdodCBtaWdodCBiZSBtb2RpZmllZCBh bmQKKwkJICogYWxsIHRob3NlIHdlIGtub3cgaGF2ZW4ndCBiZWVuLiAgVGFrZSB0aGUgZGlmZmVy ZW5jZSBhbmQgYWRkIGl0IHRvCisJCSAqIHRoZSBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMg c2V0LgorCQkgKi8KKwkJbV9hdHRycyA9IGJtc19kZWxfbWVtYmVycyhtX2F0dHJzLCB1X2F0dHJz KTsKKwkJcF9hdHRycyA9IGJtc19kZWxfbWVtYmVycyhwX2F0dHJzLCB1X2F0dHJzKTsKKwkJbWl4 X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKG1peF9hdHRycywgbV9hdHRycyk7CisJCW1peF9hdHRy cyA9IGJtc19hZGRfbWVtYmVycyhtaXhfYXR0cnMsIHBfYXR0cnMpOworCisJCWJtc19mcmVlKG1f YXR0cnMpOworCQlibXNfZnJlZSh1X2F0dHJzKTsKKwkJYm1zX2ZyZWUocF9hdHRycyk7CisJfQog Ci0JcmV0dXJuIG1vZGlmaWVkOworCXJldHVybiBtaXhfYXR0cnM7CiB9CiAKIC8qCkBAIC0yMzk1 LDYgKzI3MTAsOSBAQCBFeGVjVXBkYXRlQWN0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwg UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAlib29sCQlwYXJ0aXRpb25fY29uc3RyYWlu dF9mYWlsZWQ7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAorCS8qIFRoZSBzZXQgb2YgbW9kaWZpZWQg aW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQgdHJpZ2dlciBuZXcgaW5kZXggZW50cmllcyAqLworCUJp dG1hcHNldCAgKm1peF9hdHRycyA9IE5VTEw7CisKIAl1cGRhdGVDeHQtPmNyb3NzUGFydFVwZGF0 ZSA9IGZhbHNlOwogCiAJLyoKQEAgLTI1MTcsMTMgKzI4MzUsMzIgQEAgbHJlcGxhY2U6CiAJYm1z X2ZyZWUocmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzKTsKIAlyZXN1bHRSZWxJ bmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSBOVUxMOwogCi0JcmVzdWx0UmVsSW5mby0+cmlf Q2hhbmdlZEluZGV4ZWRDb2xzID0KLQkJRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhy ZXN1bHRSZWxJbmZvLCBvbGRTbG90LCBzbG90KTsKKwkvKgorCSAqIER1cmluZyB1cGRhdGVzIHdl J2xsIG5lZWQgYSBiaXQgbW9yZSBpbmZvcm1hdGlvbiBpbiBJbmRleEluZm8gYnV0IHdlJ3ZlCisJ ICogZGVsYXllZCBhZGRpbmcgaXQgdW50aWwgaGVyZS4gIFdlIGNoZWNrIHRvIGVuc3VyZSB0aGF0 IHRoZXJlIGFyZQorCSAqIGluZGV4ZXMsIHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIHRoYXQg aXMgaW5kZXhlZCwgYW5kIHRoYXQgdGhlIGZpcnN0CisJICogaW5kZXggZG9lc24ndCB5ZXQgaGF2 ZSBpaV9JbmRleGVkQXR0cnMgc2V0IGFzIGEgd2F5IHRvIGVuc3VyZSB3ZSBvbmx5CisJICogYnVp bGQgdGhpcyB3aGVuIG5lZWRlZCBhbmQgb25seSBvbmNlLiAgV2UgZG9uJ3QgYnVpbGQgdGhpcyBp bgorCSAqIEV4ZWNPcGVuSW5kaWNpZXMoKSBhcyBpdCBpcyB1bm5lY2Vzc2FyeSBvdmVyaGVhZCB3 aGVuIG5vdCBwZXJmb3JtaW5nIGFuCisJICogdXBkYXRlLgorCSAqLworCWlmIChyZXN1bHRSZWxJ bmZvLT5yaV9OdW1JbmRpY2VzID4gMCAmJgorCQlibXNfaXNfZW1wdHkocmVzdWx0UmVsSW5mby0+ cmlfSW5kZXhSZWxhdGlvbkluZm9bMF0tPmlpX0luZGV4ZWRBdHRycykpCisJCUJ1aWxkVXBkYXRl SW5kZXhJbmZvKHJlc3VsdFJlbEluZm8pOworCisJLyoKKwkgKiBOZXh0IHVwIHdlIG5lZWQgdG8g ZmluZCBvdXQgdGhlIHNldCBvZiBpbmRleGVkIGF0dHJpYnV0ZXMgdGhhdCBoYXZlCisJICogY2hh bmdlZCBpbiB2YWx1ZSBhbmQgc2hvdWxkIHRyaWdnZXIgYSBuZXcgaW5kZXggdHVwbGUuICBXZSBj b3VsZCBzdGFydAorCSAqIHdpdGggdGhlIHNldCBvZiB1cGRhdGVkIGNvbHVtbnMgdmlhIEV4ZWNH ZXRVcGRhdGVkQ29scygpLCBidXQgaWYgd2UgZG8KKwkgKiB3ZSB3aWxsIG92ZXJsb29rIGF0dHJp YnV0ZXMgZGlyZWN0bHkgbW9kaWZpZWQgYnkgaGVhcF9tb2RpZnlfdHVwbGUoKQorCSAqIHdoaWNo IGFyZSBub3Qga25vd24gdG8gRXhlY0dldFVwZGF0ZWRDb2xzKCkuCisJICovCisJbWl4X2F0dHJz ID0gRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhyZXN1bHRSZWxJbmZvLCBlc3RhdGUs IG9sZFNsb3QsIHNsb3QpOwogCiAJLyoKLQkgKiByZXBsYWNlIHRoZSBoZWFwIHR1cGxlCisJICog Q2FsbCBpbnRvIHRoZSB0YWJsZSBBTSB0byB1cGRhdGUgdGhlIGhlYXAgdHVwbGUuCiAJICoKLQkg KiBOb3RlOiBpZiBlc19jcm9zc2NoZWNrX3NuYXBzaG90IGlzbid0IEludmFsaWRTbmFwc2hvdCwg d2UgY2hlY2sgdGhhdAorCSAqIE5PVEU6IGlmIGVzX2Nyb3NzY2hlY2tfc25hcHNob3QgaXNuJ3Qg SW52YWxpZFNuYXBzaG90LCB3ZSBjaGVjayB0aGF0CiAJICogdGhlIHJvdyB0byBiZSB1cGRhdGVk IGlzIHZpc2libGUgdG8gdGhhdCBzbmFwc2hvdCwgYW5kIHRocm93IGEKIAkgKiBjYW4ndC1zZXJp YWxpemUgZXJyb3IgaWYgbm90LiBUaGlzIGlzIGEgc3BlY2lhbC1jYXNlIGJlaGF2aW9yIG5lZWRl ZAogCSAqIGZvciByZWZlcmVudGlhbCBpbnRlZ3JpdHkgdXBkYXRlcyBpbiB0cmFuc2FjdGlvbi1z bmFwc2hvdCBtb2RlCkBAIC0yNTM1LDkgKzI4NzIsMTIgQEAgbHJlcGxhY2U6CiAJCQkJCQkJCWVz dGF0ZS0+ZXNfY3Jvc3NjaGVja19zbmFwc2hvdCwKIAkJCQkJCQkJdHJ1ZSAvKiB3YWl0IGZvciBj b21taXQgKi8gLAogCQkJCQkJCQkmY29udGV4dC0+dG1mZCwgJnVwZGF0ZUN4dC0+bG9ja21vZGUs Ci0JCQkJCQkJCXJlc3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scywKKwkJCQkJCQkJ bWl4X2F0dHJzLAogCQkJCQkJCQkmdXBkYXRlQ3h0LT51cGRhdGVJbmRleGVzKTsKIAorCUFzc2Vy dChibXNfaXNfZW1wdHkocmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzKSk7CisJ cmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gbWl4X2F0dHJzOworCiAJcmV0 dXJuIHJlc3VsdDsKIH0KIApAQCAtMjU1NSw3ICsyODk1LDcgQEAgRXhlY1VwZGF0ZUVwaWxvZ3Vl KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwgVXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0LAog CU1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUgPSBjb250ZXh0LT5tdHN0YXRlOwogCUxpc3QJICAg KnJlY2hlY2tJbmRleGVzID0gTklMOwogCi0JLyogaW5zZXJ0IGluZGV4IGVudHJpZXMgZm9yIHR1 cGxlIGlmIG5lY2Vzc2FyeSAqLworCS8qIEluc2VydCBpbmRleCBlbnRyaWVzIGZvciB0dXBsZSBp ZiBuZWNlc3NhcnkgKi8KIAlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDAgJiYg KHVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhlcyAhPSBUVV9Ob25lKSkKIAkJcmVjaGVja0luZGV4ZXMg PSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKIAkJCQkJCQkJCQkJICAgc2xv dCwgY29udGV4dC0+ZXN0YXRlLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwppbmRleCBkNjlkYzA5MGFhNC4u ZTlhNTNiOTVjYWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBAIC04NTUsMTAgKzg1NSwxNCBAQCBt YWtlSW5kZXhJbmZvKGludCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExp c3QgKmV4cHJlc3Npb25zLAogCS8qIGV4cHJlc3Npb25zICovCiAJbi0+aWlfRXhwcmVzc2lvbnMg PSBleHByZXNzaW9uczsKIAluLT5paV9FeHByZXNzaW9uc1N0YXRlID0gTklMOworCW4tPmlpX0V4 cHJlc3Npb25zQXR0cnMgPSBOVUxMOwogCiAJLyogcHJlZGljYXRlcyAgKi8KIAluLT5paV9QcmVk aWNhdGUgPSBwcmVkaWNhdGVzOwogCW4tPmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKwluLT5p aV9QcmVkaWNhdGVBdHRycyA9IE5VTEw7CisJbi0+aWlfQ2hlY2tlZFByZWRpY2F0ZSA9IGZhbHNl OworCW4tPmlpX1ByZWRpY2F0ZVNhdGlzZmllZCA9IGZhbHNlOwogCiAJLyogZXhjbHVzaW9uIGNv bnN0cmFpbnRzICovCiAJbi0+aWlfRXhjbHVzaW9uT3BzID0gTlVMTDsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5k ZXggNjNkZDQxYzFmMjEuLjliZGY3M2VkYTU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvYW1hcGkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMjExLDYgKzIx MSwzMyBAQCB0eXBlZGVmIHZvaWQgKCphbW1hcmtwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNj IHNjYW4pOwogLyogcmVzdG9yZSBtYXJrZWQgc2NhbiBwb3NpdGlvbiAqLwogdHlwZWRlZiB2b2lk ICgqYW1yZXN0cnBvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKKy8qCisgKiBh bWNvbXBhcmVkYXR1bXMgLSBDb21wYXJlIGRhdHVtcyB0byBkZXRlcm1pbmUgaWYgaW5kZXggdXBk YXRlIGlzIG5lZWRlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29tcGFyZXMgb2xkX2RhdHVtIGFu ZCBuZXdfZGF0dW0gdG8gZGV0ZXJtaW5lIGlmIHRoZXkgd291bGQKKyAqIHByb2R1Y2UgZGlmZmVy ZW50IGluZGV4IGVudHJpZXMuIEZvciBleHRyYWN0aW9uLWJhc2VkIGluZGV4ZXMgKEdJTiwgUlVN KSwKKyAqIHRoaXMgc2hvdWxkOgorICogIDEuIEV4dHJhY3Qga2V5cyBmcm9tIG9sZF9kYXR1bSB1 c2luZyB0aGUgb3BjbGFzcydzIGV4dHJhY3RWYWx1ZSBmdW5jdGlvbgorICogIDIuIEV4dHJhY3Qg a2V5cyBmcm9tIG5ld19kYXR1bSB1c2luZyB0aGUgb3BjbGFzcydzIGV4dHJhY3RWYWx1ZSBmdW5j dGlvbgorICogIDMuIENvbXBhcmUgdGhlIHR3byBzZXRzIG9mIGtleXMgdXNpbmcgYXBwcm9wcmlh dGUgZXF1YWxpdHkgb3BlcmF0b3JzCisgKiAgNC4gUmV0dXJuIHRydWUgaWYgdGhlIHNldHMgYXJl IGVxdWFsIChubyBpbmRleCB1cGRhdGUgbmVlZGVkKQorICoKKyAqIFRoZSBjb21wYXJpc29uIHNo b3VsZCBhY2NvdW50IGZvcjoKKyAqICAtIERpZmZlcmVudCBudW1iZXJzIG9mIGV4dHJhY3RlZCBr ZXlzCisgKiAgLSBOVUxMIHZhbHVlcworICogIC0gVHlwZS1zcGVjaWZpYyBlcXVhbGl0eSAobm90 IGp1c3QgYmluYXJ5IGVxdWFsaXR5KQorICogIC0gT3BjbGFzcyBwYXJhbWV0ZXJzIChlLmcuLCBw YXRoIGluIGJzb25fcnVtX3NpbmdsZV9wYXRoX29wcykKKyAqCisgKiBGb3IgdGhlIERvY3VtZW50 REIgZXhhbXBsZSB3aXRoIHBhdGg9J2EnLCB0aGlzIHdvdWxkIGV4dHJhY3QgdmFsdWVzIGF0Cisg KiBwYXRoICdhJyBmcm9tIGJvdGggb2xkIGFuZCBuZXcgQlNPTiBkb2N1bWVudHMgYW5kIGNvbXBh cmUgdGhlbSB1c2luZworICogQlNPTidzIGVxdWFsaXR5IG9wZXJhdG9yLgorICovCisvKiBpZGVu dGlmeSBpZiB1cGRhdGVkIGRhdHVtcyB3b3VsZCBwcm9kdWNlIG9uZSBvciBtb3JlIGluZGV4IGVu dHJpZXMgKi8KK3R5cGVkZWYgYm9vbCAoKmFtY29tcGFyZWRhdHVtc19mdW5jdGlvbikgKFJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkJICBpbnQgYXR0bm8sCisJCQkJCQkJCQkJICBE YXR1bSBvbGRfZGF0dW0sIGJvb2wgb2xkX2lzbnVsbCwKKwkJCQkJCQkJCQkgIERhdHVtIG5ld19k YXR1bSwgYm9vbCBuZXdfaXNudWxsKTsKKwogLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9uIHNpZ25h dHVyZXMgLSBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnMuCiAgKi8KQEAgLTMxMyw2ICszNDAsNyBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVu ZHNjYW47CiAJYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8K IAlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1j b21wYXJlZGF0dW1zX2Z1bmN0aW9uIGFtY29tcGFyZWRhdHVtczsJLyogY2FuIGJlIE5VTEwgKi8K IAogCS8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2Fu cyAqLwogCWFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbjsgLyogY2FuIGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9n aW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaAppbmRleCAxM2VhOTE5MjJlZi4uMmYyNjVm NDgxNmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvZ2luLmgKQEAgLTEwMCw2ICsxMDAsOSBAQCBleHRlcm4gUEdETExJTVBPUlQg aW50IGdpbl9wZW5kaW5nX2xpc3RfbGltaXQ7CiBleHRlcm4gdm9pZCBnaW5HZXRTdGF0cyhSZWxh dGlvbiBpbmRleCwgR2luU3RhdHNEYXRhICpzdGF0cyk7CiBleHRlcm4gdm9pZCBnaW5VcGRhdGVT dGF0cyhSZWxhdGlvbiBpbmRleCwgY29uc3QgR2luU3RhdHNEYXRhICpzdGF0cywKIAkJCQkJCSAg IGJvb2wgaXNfYnVpbGQpOworZXh0ZXJuIGJvb2wgZ2luY29tcGFyZWRhdHVtcyhSZWxhdGlvbiBp bmRleCwgaW50IGF0dG51bSwKKwkJCQkJCQkgRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9pc251 bGwsCisJCQkJCQkJIERhdHVtIG5ld19kYXR1bSwgYm9vbCBuZXdfaXNudWxsKTsKIAogZXh0ZXJu IHZvaWQgX2dpbl9wYXJhbGxlbF9idWlsZF9tYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2Mg KnRvYyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAyZjlhMmIwNjljZC4uNTc4M2RiZWJmZjAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvaGVhcGFtLmgKQEAgLTM2OSw3ICszNjksNyBAQCBleHRlcm4gVE1fUmVzdWx0IGhlYXBf dXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGVEYXRhICpvbGR0dXAsCiAJCQkJCQkJ IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwgQnVmZmVyIGJ1 ZmZlciwKIAkJCQkJCQkgUGFnZSBwYWdlLCBCbG9ja051bWJlciBibG9jaywgSXRlbUlkIGxwLCBC aXRtYXBzZXQgKmhvdF9hdHRycywKIAkJCQkJCQkgQml0bWFwc2V0ICpzdW1fYXR0cnMsIEJpdG1h cHNldCAqcGtfYXR0cnMsIEJpdG1hcHNldCAqcmlkX2F0dHJzLAotCQkJCQkJCSBCaXRtYXBzZXQg Km1peF9hdHRycywgQnVmZmVyICp2bWJ1ZmZlciwKKwkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICpt aXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCiAJCQkJCQkJIGJvb2wgcmVwX2lkX2tleV9yZXF1 aXJlZCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogZXh0ZXJuIFRNX1Jlc3Vs dCBoZWFwX2xvY2tfdHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJ CQkJCQkJIENvbW1hbmRJZCBjaWQsIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kg d2FpdF9wb2xpY3ksCkBAIC00MDQsOCArNDA0LDggQEAgZXh0ZXJuIGJvb2wgaGVhcF90dXBsZV9u ZWVkc19ldmVudHVhbF9mcmVlemUoSGVhcFR1cGxlSGVhZGVyIHR1cGxlKTsKIAogZXh0ZXJuIHZv aWQgc2ltcGxlX2hlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwKTsK IGV4dGVybiB2b2lkIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICp0aWQpOwotZXh0ZXJuIHZvaWQgc2ltcGxlX2hlYXBfdXBkYXRlKFJl bGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCi0JCQkJCQkJICAg SGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOworZXh0ZXJu IEJpdG1hcHNldCAqc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJ dGVtUG9pbnRlckRhdGEgKm90aWQsCisJCQkJCQkJCQkgSGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRl SW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogCiBleHRlcm4gVHJhbnNhY3Rpb25JZCBoZWFwX2lu ZGV4X2RlbGV0ZV90dXBsZXMoUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCQkgIFRNX0luZGV4RGVs ZXRlT3AgKmRlbHN0YXRlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCAxNmJlNWM3YTljMS4uNDJiZDMy OWVhYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTEyMTAsNiArMTIxMCwxMCBAQCBleHRlcm4gaW50 CWJ0Z2V0dHJlZWhlaWdodChSZWxhdGlvbiByZWwpOwogCiBleHRlcm4gQ29tcGFyZVR5cGUgYnR0 cmFuc2xhdGVzdHJhdGVneShTdHJhdGVneU51bWJlciBzdHJhdGVneSwgT2lkIG9wZmFtaWx5KTsK IGV4dGVybiBTdHJhdGVneU51bWJlciBidHRyYW5zbGF0ZWNtcHR5cGUoQ29tcGFyZVR5cGUgY21w dHlwZSwgT2lkIG9wZmFtaWx5KTsKK2V4dGVybiBib29sIGJ0Y29tcGFyZWRhdHVtcyhSZWxhdGlv biBpbmRleCwgaW50IGF0dG51bSwKKwkJCQkJCQlEYXR1bSBvbGRfZGF0dW0sIGJvb2wgb2xkX2lz bnVsbCwKKwkJCQkJCQlEYXR1bSBuZXdfZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCk7CisKIAogLyoK ICAqIHByb3RvdHlwZXMgZm9yIGludGVybmFsIGZ1bmN0aW9ucyBpbiBuYnRyZWUuYwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmgKaW5kZXggOGE1OTMxYTMxMTguLjJiOTIwNmZmMjRhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFt LmgKQEAgLTU0OSw3ICs1NDksNyBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJ CQkJCQkgYm9vbCB3YWl0LAogCQkJCQkJCQkgVE1fRmFpbHVyZURhdGEgKnRtZmQsCiAJCQkJCQkJ CSBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKLQkJCQkJCQkJIEJpdG1hcHNldCAqdXBkYXRlZF9j b2xzLAorCQkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICp1cGRhdGVkX2NvbHMsCiAJCQkJCQkJCSBU VV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcyk7CiAKIAkvKiBzZWUgdGFibGVfdHVwbGVf bG9jaygpIGZvciByZWZlcmVuY2UgYWJvdXQgcGFyYW1ldGVycyAqLwpAQCAtMTUwMywxMiArMTUw MywxMiBAQCBzdGF0aWMgaW5saW5lIFRNX1Jlc3VsdAogdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0 aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJICAg Q29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCiAJ CQkJICAgYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9j a21vZGUsCi0JCQkJICAgQml0bWFwc2V0ICp1cGRhdGVkX2NvbHMsIFRVX1VwZGF0ZUluZGV4ZXMg KnVwZGF0ZV9pbmRleGVzKQorCQkJCSAgIGNvbnN0IEJpdG1hcHNldCAqbWl4X2NvbHMsIFRVX1Vw ZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCXJldHVybiByZWwtPnJkX3RhYmxlYW0t PnR1cGxlX3VwZGF0ZShyZWwsIG90aWQsIHNsb3QsCiAJCQkJCQkJCQkJIGNpZCwgc25hcHNob3Qs IGNyb3NzY2hlY2ssCiAJCQkJCQkJCQkJIHdhaXQsIHRtZmQsIGxvY2ttb2RlLAotCQkJCQkJCQkJ CSB1cGRhdGVkX2NvbHMsIHVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkJCQkgbWl4X2NvbHMsIHVw ZGF0ZV9pbmRleGVzKTsKIH0KIAogLyoKQEAgLTIwMTEsNyArMjAxMSw3IEBAIGV4dGVybiB2b2lk IHNpbXBsZV90YWJsZV90dXBsZV9kZWxldGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQs CiAJCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90KTsKIGV4dGVybiB2b2lkIHNpbXBsZV90YWJs ZV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJCQkJ ICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgIEJp dG1hcHNldCAqbW9kaWZpZWRfaW5kZXhlX2F0dHJzLAorCQkJCQkJCQkJICBjb25zdCBCaXRtYXBz ZXQgKm1peF9hdHRycywKIAkJCQkJCQkJCSAgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4 ZXMpOwogCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvaW5kZXguaAppbmRleCBkZGE5NWU1NDkwMy4uOGQzNjRmOGIzMGYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL2luZGV4LmgKQEAgLTEzMiw2ICsxMzIsNyBAQCBleHRlcm4gYm9vbCBDb21wYXJlSW5k ZXhJbmZvKGNvbnN0IEluZGV4SW5mbyAqaW5mbzEsIGNvbnN0IEluZGV4SW5mbyAqaW5mbzIsCiAJ CQkJCQkJIGNvbnN0IEF0dHJNYXAgKmF0dG1hcCk7CiAKIGV4dGVybiB2b2lkIEJ1aWxkU3BlY3Vs YXRpdmVJbmRleEluZm8oUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaWkpOworZXh0ZXJuIHZv aWQgQnVpbGRVcGRhdGVJbmRleEluZm8oUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbyk7CiAK IGV4dGVybiB2b2lkIEZvcm1JbmRleERhdHVtKEluZGV4SW5mbyAqaW5kZXhJbmZvLAogCQkJCQkJ ICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA5OTNk YzBlNmNlZC4uYTE5NTg1YmEwNjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtNzM5LDYg KzczOSwxMSBAQCBleHRlcm4gQml0bWFwc2V0ICpFeGVjR2V0QWxsVXBkYXRlZENvbHMoUmVzdWx0 UmVsSW5mbyAqcmVsaW5mbywgRVN0YXRlICplc3RhdGUpOwogICovCiBleHRlcm4gdm9pZCBFeGVj T3BlbkluZGljZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywgYm9vbCBzcGVjdWxhdGl2 ZSk7CiBleHRlcm4gdm9pZCBFeGVjQ2xvc2VJbmRpY2VzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJl bEluZm8pOworZXh0ZXJuIEJpdG1hcHNldCAqRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVz KFJlc3VsdFJlbEluZm8gKnJlbGluZm8sCisJCQkJCQkJCQkJCQkgQml0bWFwc2V0ICptaXhfYXR0 cnMsCisJCQkJCQkJCQkJCQkgRVN0YXRlICplc3RhdGUsCisJCQkJCQkJCQkJCQkgVHVwbGVUYWJs ZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKm5ld190dHMpOwog ZXh0ZXJuIExpc3QgKkV4ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvLAogCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRVN0YXRlICplc3RhdGUs CiAJCQkJCQkJCSAgIGJvb2wgdXBkYXRlLApAQCAtODAwLDkgKzgwNSwxMCBAQCBleHRlcm4gUmVz dWx0UmVsSW5mbyAqRXhlY0xvb2t1cFJlc3VsdFJlbEJ5T2lkKE1vZGlmeVRhYmxlU3RhdGUgKm5v ZGUsCiAJCQkJCQkJCQkJCSAgIE9pZCByZXN1bHRvaWQsCiAJCQkJCQkJCQkJCSAgIGJvb2wgbWlz c2luZ19vaywKIAkJCQkJCQkJCQkJICAgYm9vbCB1cGRhdGVfY2FjaGUpOwotZXh0ZXJuIEJpdG1h cHNldCAqRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvLAotCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqdHRzX29sZCwKLQkJCQkJ CQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnR0c19uZXcpOworZXh0ZXJuIEJpdG1hcHNldCAqRXhl Y0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAorCQkJ CQkJCQkJCQkJICBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3Qg Km9sZF90dHMsCisJCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpuZXdfdHRzKTsKIGV4dGVy biBib29sIHR0c19hdHRyX2VxdWFsKE9pZCB0eXBpZCwgT2lkIGNvbGxhdGlvbiwgYm9vbCB0eXBi eXZhbCwgaW50MTYgdHlwbGVuLAogCQkJCQkJICAgRGF0dW0gdmFsdWUxLCBEYXR1bSB2YWx1ZTIp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDg5ODM2OGZiOGNiLi5kOGU4ODgxNzIwNiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3NCwxNSArMTc0LDI5IEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4SW5mbwogCSAqLwogCUF0dHJOdW1iZXIJaWlfSW5kZXhBdHRyTnVtYmVyc1tJTkRFWF9NQVhf S0VZU107CiAKKwkvKgorCSAqIEFsbCBrZXksIGV4cHJlc3Npb24sIHN1bWFyaXppbmcsIGFuZCBw YXJ0aXRpb24gYXR0cmlidXRlcyByZWZlcmVuY2VkIGJ5CisJICogdGhpcyBpbmRleAorCSAqLwor CUJpdG1hcHNldCAgKmlpX0luZGV4ZWRBdHRyczsKKwogCS8qIGV4cHIgdHJlZXMgZm9yIGV4cHJl c3Npb24gZW50cmllcywgb3IgTklMIGlmIG5vbmUgKi8KIAlMaXN0CSAgICppaV9FeHByZXNzaW9u czsgLyogbGlzdCBvZiBFeHByICovCiAJLyogZXhlYyBzdGF0ZSBmb3IgZXhwcmVzc2lvbnMsIG9y IE5JTCBpZiBub25lICovCiAJTGlzdAkgICAqaWlfRXhwcmVzc2lvbnNTdGF0ZTsJLyogbGlzdCBv ZiBFeHByU3RhdGUgKi8KKwkvKiBhdHRyaWJ1dGVzIGV4Y2x1c2l2ZWx5IHJlZmVyZW5jZWQgYnkg ZXhwcmVzc2lvbiBpbmRleGVzICovCisJQml0bWFwc2V0ICAqaWlfRXhwcmVzc2lvbnNBdHRyczsK IAogCS8qIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlLCBvciBOSUwgaWYgbm9uZSAqLwogCUxpc3QJ ICAgKmlpX1ByZWRpY2F0ZTsJLyogbGlzdCBvZiBFeHByICovCiAJLyogZXhlYyBzdGF0ZSBmb3Ig ZXhwcmVzc2lvbnMsIG9yIE5JTCBpZiBub25lICovCiAJRXhwclN0YXRlICAqaWlfUHJlZGljYXRl U3RhdGU7CisJLyogYXR0cmlidXRlcyByZWZlcmVuY2VkIGJ5IHRoZSBwcmVkaWNhdGUgKi8KKwlC aXRtYXBzZXQgICppaV9QcmVkaWNhdGVBdHRyczsKKwkvKiBwYXJ0aWFsIGluZGV4IHByZWRpY2F0 ZSBkZXRlcm1pbmVkIHlldD8gKi8KKwlib29sCQlpaV9DaGVja2VkUHJlZGljYXRlOworCS8qIGFt dXBkYXRlIGhpbnQgdXNlZCB0byBhdm9pZCByZWNoZWNraW5nIHByZWRpY2F0ZSAqLworCWJvb2wJ CWlpX1ByZWRpY2F0ZVNhdGlzZmllZDsKIAogCS8qIFBlci1jb2x1bW4gZXhjbHVzaW9uIG9wZXJh dG9ycywgb3IgTlVMTCBpZiBub25lICovCiAJT2lkCQkgICAqaWlfRXhjbHVzaW9uT3BzOwkvKiBh cnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgY29sdW1uICovCkBAIC00OTQsNiArNTA4LDExIEBAIHR5 cGVkZWYgc3RydWN0IFJlc3VsdFJlbEluZm8KIAlCaXRtYXBzZXQgICpyaV9leHRyYVVwZGF0ZWRD b2xzOwogCS8qIHRydWUgaWYgdGhlIGFib3ZlIGhhcyBiZWVuIGNvbXB1dGVkICovCiAJYm9vbAkJ cmlfZXh0cmFVcGRhdGVkQ29sc192YWxpZDsKKworCS8qCisJICogRm9yIFVQREFURSBhIEJpdG1h cHNldCBvZiB0aGUgYXR0cmlidXRlcyB0aGF0IGFyZSBib3RoIGluZGV4ZWQgYW5kIGhhdmUKKwkg KiBjaGFuZ2VkIGluIHZhbHVlLgorCSAqLwogCUJpdG1hcHNldCAgKnJpX0NoYW5nZWRJbmRleGVk Q29sczsKIAogCS8qIFByb2plY3Rpb24gdG8gZ2VuZXJhdGUgbmV3IHR1cGxlIGluIGFuIElOU0VS VC9VUERBVEUgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbnNl cnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0Lm91dCBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3Rl ZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0Lm91dAppbmRleCBlMzRhODIxYzQwMy4uNTRi Mzk4MTkxOGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbnNlcnQt Y29uZmxpY3Qtc3BlY2NvbmZsaWN0Lm91dAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0 ZWQvaW5zZXJ0LWNvbmZsaWN0LXNwZWNjb25mbGljdC5vdXQKQEAgLTgwLDYgKzgwLDEwIEBAIHBn X2Fkdmlzb3J5X3VubG9jawogdCAgICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKK3MxOiBOT1RJ Q0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQorczE6 IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29yeSBsb2NrIG9uIDIKK3MxOiBOT1RJQ0U6ICBibHVy dF9hbmRfbG9ja18xMjMoKSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTog IGFjcXVpcmluZyBhZHZpc29yeSBsb2NrIG9uIDIKIHMxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9j a18xMjMoKSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQogczE6IE5PVElDRTogIGFjcXVpcmlu ZyBhZHZpc29yeSBsb2NrIG9uIDIKIHMxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBj YWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQpAQCAtMTcyLDYgKzE3NiwxMCBAQCBwZ19hZHZpc29y eV91bmxvY2sKIHQgICAgICAgICAgICAgICAgIAogKDEgcm93KQogCitzMjogTk9USUNFOiAgYmx1 cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6 ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xv Y2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBhY3F1aXJp bmcgYWR2aXNvcnkgbG9jayBvbiAyCiBzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkg Y2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKIHMyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNv cnkgbG9jayBvbiAyCiBzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZv ciBrMSBpbiBzZXNzaW9uIDIKQEAgLTM2OSw2ICszNzcsMTAgQEAga2V5fGRhdGEKIHN0ZXAgczFf Y29tbWl0OiBDT01NSVQ7CiBzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVk IGZvciBrMSBpbiBzZXNzaW9uIDIKIHMyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9j ayBvbiAyCitzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBp biBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitz MjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9u IDIKK3MyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCiBzdGVwIHMyX3Vw c2VydDogPC4uLiBjb21wbGV0ZWQ+CiBzdGVwIGNvbnRyb2xsZXJfc2hvdzogU0VMRUNUICogRlJP TSB1cHNlcnR0ZXN0Owoga2V5fGRhdGEgICAgICAgCkBAIC01MzAsNiArNTQyLDE0IEBAIGlzb2xh dGlvbi9pbnNlcnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0L3MyfHRyYW5zYWN0aW9uaWR8RXhjbHVz aXZlTG9ja3x0CiBzdGVwIHMyX2NvbW1pdDogQ09NTUlUOwogczE6IE5PVElDRTogIGJsdXJ0X2Fu ZF9sb2NrXzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAxCiBzMTogTk9USUNFOiAgYWNx dWlyaW5nIGFkdmlzb3J5IGxvY2sgb24gMgorczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEy MygpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAxCitzMTogTk9USUNFOiAgYWNxdWlyaW5nIGFk dmlzb3J5IGxvY2sgb24gMgorczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxl ZCBmb3IgazEgaW4gc2Vzc2lvbiAxCitzMTogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxv Y2sgb24gMgorczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzQoKSBjYWxsZWQgZm9yIGsxIGlu IHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29yeSBsb2NrIG9uIDQKK3Mx OiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja180KCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDEK K3MxOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiA0CiBzdGVwIHMxX3Vwc2Vy dDogPC4uLiBjb21wbGV0ZWQ+CiBzdGVwIHMxX25vb3A6IAogc3RlcCBjb250cm9sbGVyX3Nob3c6 IFNFTEVDVCAqIEZST00gdXBzZXJ0dGVzdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvaGVhcF9ob3RfdXBkYXRlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2hlYXBfaG90X3VwZGF0ZXMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5mNmJkOGIxOGFmOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvaGVhcF9ob3RfdXBkYXRlcy5vdXQKQEAgLTAsMCArMSwxOTIyIEBACistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CistLSBUZXN0IFN1aXRlIGZvciBIZWFwLW9ubHkgKEhPVCkgVXBkYXRlcworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor LS0gU2V0dXA6IENyZWF0ZSBmdW5jdGlvbiB0byBtZWFzdXJlIEhPVCB1cGRhdGVzCitDUkVBVEUg T1IgUkVQTEFDRSBGVU5DVElPTiBjaGVja19ob3RfdXBkYXRlcygKKyAgICBleHBlY3RlZCBJTlQs CisgICAgcF90YWJsZV9uYW1lIFRFWFQgREVGQVVMVCAndCcsCisgICAgcF9zY2hlbWFfbmFtZSBU RVhUIERFRkFVTFQgY3VycmVudF9zY2hlbWEoKQorKQorUkVUVVJOUyBUQUJMRSAoCisgICAgdGFi bGVfbmFtZSBURVhULAorICAgIHRvdGFsX3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91cGRhdGVz IEJJR0lOVCwKKyAgICBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgTlVNRVJJQywKKyAgICBtYXRjaGVz X2V4cGVjdGVkIEJPT0xFQU4KKykKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisg ICAgdl9yZWxpZCBvaWQ7CisgICAgdl9xdWFsaWZpZWRfbmFtZSBURVhUOworICAgIHZfaG90X3Vw ZGF0ZXMgQklHSU5UOworICAgIHZfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl94YWN0X2hvdF91cGRh dGVzIEJJR0lOVDsKKyAgICB2X3hhY3RfdXBkYXRlcyBCSUdJTlQ7CitCRUdJTgorICAgIC0tIEZv cmNlIHN0YXRpc3RpY3MgdXBkYXRlCisgICAgUEVSRk9STSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1 c2goKTsKKworICAgIC0tIEdldCB0YWJsZSBPSUQKKyAgICB2X3F1YWxpZmllZF9uYW1lIDo9IHF1 b3RlX2lkZW50KHBfc2NoZW1hX25hbWUpIHx8ICcuJyB8fCBxdW90ZV9pZGVudChwX3RhYmxlX25h bWUpOworICAgIHZfcmVsaWQgOj0gdl9xdWFsaWZpZWRfbmFtZTo6cmVnY2xhc3M7CisKKyAgICBJ RiB2X3JlbGlkIElTIE5VTEwgVEhFTgorCVJBSVNFIEVYQ0VQVElPTiAnVGFibGUgJS4lIG5vdCBm b3VuZCcsIHBfc2NoZW1hX25hbWUsIHBfdGFibGVfbmFtZTsKKyAgICBFTkQgSUY7CisKKyAgICAt LSBHZXQgY3VtdWxhdGl2ZSArIHRyYW5zYWN0aW9uIHN0YXRzCisgICAgdl9ob3RfdXBkYXRlcyA6 PSBDT0FMRVNDRShwZ19zdGF0X2dldF90dXBsZXNfaG90X3VwZGF0ZWQodl9yZWxpZCksIDApOwor ICAgIHZfdXBkYXRlcyA6PSBDT0FMRVNDRShwZ19zdGF0X2dldF90dXBsZXNfdXBkYXRlZCh2X3Jl bGlkKSwgMCk7CisgICAgdl94YWN0X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0 X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKHZfcmVsaWQpLCAwKTsKKyAgICB2X3hhY3RfdXBkYXRl cyA6PSBDT0FMRVNDRShwZ19zdGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAw KTsKKworICAgIHZfaG90X3VwZGF0ZXMgOj0gdl9ob3RfdXBkYXRlcyArIHZfeGFjdF9ob3RfdXBk YXRlczsKKyAgICB2X3VwZGF0ZXMgOj0gdl91cGRhdGVzICsgdl94YWN0X3VwZGF0ZXM7CisKKyAg ICBSRVRVUk4gUVVFUlkKKyAgICBTRUxFQ1QKKwlwX3RhYmxlX25hbWU6OlRFWFQsCisJdl91cGRh dGVzOjpCSUdJTlQsCisJdl9ob3RfdXBkYXRlczo6QklHSU5ULAorCUNBU0UgV0hFTiB2X3VwZGF0 ZXMgPiAwCisJICAgICBUSEVOIFJPVU5EKCh2X2hvdF91cGRhdGVzOjpudW1lcmljIC8gdl91cGRh dGVzOjpudW1lcmljICogMTAwKTo6bnVtZXJpYywgMikKKwkgICAgIEVMU0UgMAorCUVORCwKKwko dl9ob3RfdXBkYXRlcyA9IGV4cGVjdGVkKTo6Qk9PTEVBTjsKK0VORDsKKyQkOworQ1JFQVRFIENP TExBVElPTiBjYXNlX2luc2Vuc2l0aXZlICgKKyAgICBwcm92aWRlciA9IGxpYmMsCisgICAgbG9j YWxlID0gJ0MnCispOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gQmFzaWMgSlNPTkIgRXhwcmVzc2lvbiBJbmRl eAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5UIFBSSU1BUlkgS0VZLCBkb2NzIEpT T05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcw KTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfbmFtZV9pZHggT04gdCgoZG9jcy0+J25hbWUnKSk7CitJ TlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3sibmFtZSI6ICJhbGljZSIsICJhZ2UiOiAzMH0nKTsK Ky0tIFVwZGF0ZSBub24taW5kZXhlZCBKU09OQiBmaWVsZCAtIHNob3VsZCBiZSBIT1QKK1VQREFU RSB0IFNFVCBkb2NzID0gJ3sibmFtZSI6ICJhbGljZSIsICJhZ2UiOiAzMX0nIFdIRVJFIGlkID0g MTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRv dGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNo ZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8 ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQK KygxIHJvdykKKworLS0gVXBkYXRlIGluZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91bGQgTk9UIGJl IEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJuYW1lIjogImJvYiIsICJhZ2UiOiAzMX0nIFdI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVf bmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFn ZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1 MC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGZpZWxkIGFnYWluIC0g c2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJuYW1lIjogImJvYiIsICJhZ2Ui OiAzMn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7 CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVf cGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMiB8ICAgICAgICAg ICAgICAgICA2Ni42NyB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0OworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor LS0gSlNPTkIgRXhwcmVzc2lvbiBJbmRleCBhbiBzb21lIGluY2x1ZGluZyBjb2x1bW5zCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQgUFJJTUFSWSBLRVksIGRvY3MgSlNPTkIsIHN0 YXR1cyBURVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3Rv ciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfbmFtZV9pZHggT04gdCgoZG9jcy0+J25hbWUn KSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3sibmFtZSI6ICJhbGljZSIsICJhZ2UiOiAz MH0nLCAnb2snKTsKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBKU09OQiBmaWVsZCAtIHNob3VsZCBi ZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0gJ3sibmFtZSI6ICJhbGljZSIsICJhZ2UiOiAzMX0n IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFi bGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2Vu dGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAg IDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIEpTT05CIGZpZWxk IC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHN0YXR1cyA9ICdub3Qgb2snIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CisgdGFibGVfbmFtZSB8 IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1h dGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAg ICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8 IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gUGFydGlhbCBJbmRl eCB3aXRoIFByZWRpY2F0ZSBUcmFuc2l0aW9ucworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQo aWQgSU5ULCB2YWx1ZSBJTlQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBm aWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfdmFsdWVfaWR4IE9OIHQodmFsdWUpIFdI RVJFIHZhbHVlID4gMTA7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgNSk7CistLSBCb3RoIG91 dHNpZGUgcHJlZGljYXRlIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gOCBX SEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxl X25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRh Z2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAx MDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFRyYW5zaXRpb24gaW50byBwcmVkaWNhdGUgLSBzaG91 bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMTUgV0hFUkUgaWQgPSAxOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBk YXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBl Y3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAg ICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93 KQorCistLSBCb3RoIGluc2lkZSBwcmVkaWNhdGUsIHZhbHVlIGNoYW5nZXMgLSBzaG91bGQgTk9U IGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMjAgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAK Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAg MyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMzLjMzIHwgdAorKDEgcm93KQorCist LSBUcmFuc2l0aW9uIG91dCBvZiBwcmVkaWNhdGUgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRF IHQgU0VUIHZhbHVlID0gNSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICA0IHwgICAgICAgICAgIDEg fCAgICAgICAgICAgICAgICAgMjUuMDAgfCB0CisoMSByb3cpCisKKy0tIEJvdGggb3V0c2lkZSBw cmVkaWNhdGUgYWdhaW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSAzIFdI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CisgdGFibGVf bmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFn ZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICB8ICAgICAgICAgICAgIDUgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgICA0 MC4wMCB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0OworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gRXhwcmVz c2lvbiBJbmRleCB3aXRoIFBhcnRpYWwgUHJlZGljYXRlCistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFC TEUgdChkb2NzIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmls bGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2lkeCBPTiB0KChkb2NzLT4nc3RhdHVzJykp CisgICAgV0hFUkUgKGRvY3MtPidwcmlvcml0eScpOjppbnQgPiA1OworSU5TRVJUIElOVE8gdCBW QUxVRVMgKCd7InN0YXR1cyI6ICJwZW5kaW5nIiwgInByaW9yaXR5IjogM30nKTsKKy0tIEJvdGgg b3V0c2lkZSBwcmVkaWNhdGUsIHN0YXR1cyB1bmNoYW5nZWQgLSBzaG91bGQgYmUgSE9UCitVUERB VEUgdCBTRVQgZG9jcyA9ICd7InN0YXR1cyI6ICJwZW5kaW5nIiwgInByaW9yaXR5IjogNH0nOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19l eHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEg cm93KQorCistLSBUcmFuc2l0aW9uIGludG8gcHJlZGljYXRlIC0gc2hvdWxkIE5PVCBiZSBIT1QK K1VQREFURSB0IFNFVCBkb2NzID0gJ3sic3RhdHVzIjogInBlbmRpbmciLCAicHJpb3JpdHkiOiAx MH0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwg dG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0 Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg IHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwg dAorKDEgcm93KQorCistLSBJbnNpZGUgcHJlZGljYXRlLCBzdGF0dXMgY2hhbmdlcyAtIHNob3Vs ZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZG9jcyA9ICd7InN0YXR1cyI6ICJhY3RpdmUiLCAi cHJpb3JpdHkiOiAxMH0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0 YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJj ZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAg ICAgIDMzLjMzIHwgdAorKDEgcm93KQorCistLSBJbnNpZGUgcHJlZGljYXRlLCBzdGF0dXMgdW5j aGFuZ2VkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJzdGF0dXMiOiAi YWN0aXZlIiwgInByaW9yaXR5IjogOH0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygyKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3Vw ZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNCB8ICAgICAgICAgICAyIHwgICAg ICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBHSU4gSW5kZXggb24gSlNPTkIKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlk IElOVCwgZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZp bGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQgVVNJTkcgZ2luKGRh dGEpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7InRhZ3MiOiBbInBvc3RncmVzIiwgImRh dGFiYXNlIl19Jyk7CistLSBDaGFuZ2UgdGFncyAtIEdJTiBrZXlzIGNoYW5nZWQsIHNob3VsZCBO T1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3MiOiBbInBvc3RncmVzIiwgInNx bCJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsK KyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9w ZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAwIHwgICAgICAgICAg ICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCistLSBDaGFuZ2UgdGFncyBhZ2FpbiAtIEdJTiBr ZXlzIGNoYW5nZWQsIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRh Z3MiOiBbIm15c3FsIiwgInNxbCJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRh dGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAg ICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCistLSBBZGQgZmll bGQgd2l0aG91dCBjaGFuZ2luZyBleGlzdGluZyBrZXlzIC0gR0lOIGtleXMgY2hhbmdlZCAoYWRk ZWQgIm5vdGUiKSwgTk9UIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJteXNx bCIsICJzcWwiXSwgIm5vdGUiOiAidGVzdCJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90 X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwg ICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKK0RST1Ag VEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJTiBJbmRleCB3aXRoIFVuY2hhbmdlZCBLZXlzCist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworLS0gQ3JlYXRlIEdJ TiBpbmRleCBvbiBzcGVjaWZpYyBwYXRoCitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQgVVNJ TkcgZ2luKChkYXRhLT4ndGFncycpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJ0YWdz IjogWyJwb3N0Z3JlcyIsICJzcWwiXSwgInN0YXR1cyI6ICJhY3RpdmUifScpOworLS0gQ2hhbmdl IG5vbi1pbmRleGVkIGZpZWxkIC0gR0lOIGtleXMgb24gJ3RhZ3MnIHVuY2hhbmdlZCwgc2hvdWxk IGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJwb3N0Z3JlcyIsICJzcWwi XSwgInN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAg ICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5n ZSBpbmRleGVkIHRhZ3MgLSBHSU4ga2V5cyBjaGFuZ2VkLCBzaG91bGQgTk9UIGJlIEhPVAorVVBE QVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJteXNxbCIsICJzcWwiXSwgInN0YXR1cyI6ICJp bmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBk YXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAg ICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIEdJTiB3aXRoIGpzb25iX3BhdGhfb3BzCistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUg dChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2Zm LCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfZ2luX2lkeCBPTiB0IFVTSU5HIGdp bihkYXRhIGpzb25iX3BhdGhfb3BzKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJ1c2Vy IjogeyJuYW1lIjogImFsaWNlIn0sICJ0YWdzIjogWyJhIiwgImIiXX0nKTsKKy0tIENoYW5nZSB2 YWx1ZSBhdCBkaWZmZXJlbnQgcGF0aCAtIGtleXMgY2hhbmdlZCwgTk9UIEhPVAorVVBEQVRFIHQg U0VUIGRhdGEgPSAneyJ1c2VyIjogeyJuYW1lIjogImJvYiJ9LCAidGFncyI6IFsiYSIsICJiIl19 JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAg ICAgIDAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIE11 bHRpLUNvbHVtbiBFeHByZXNzaW9uIEluZGV4CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChp ZCBJTlQsIGEgSU5ULCBiIElOVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYs IGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHggT04gdChpZCwgYWJzKGEpLCBh YnMoYikpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIC01LCAtMTApOworLS0gQ2hhbmdlIHNp Z24gYnV0IG5vdCBhYnMgdmFsdWUgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgYSA9IDUg V0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJs ZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50 YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0 ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAg MTAwLjAwIHwgdAorKDEgcm93KQorCistLSBDaGFuZ2UgYWJzIHZhbHVlIC0gc2hvdWxkIE5PVCBi ZSBIT1QKK1VQREFURSB0IFNFVCBiID0gLTE1IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3Rf dXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAg ICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJvdykKKworLS0gQ2hh bmdlIGlkIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBpZCA9IDIgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwg dG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0 Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg IHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMzLjMzIHwg dAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBNaXhlZCBJbmRleCBU eXBlcyAoQlJJTiArIEV4cHJlc3Npb24pCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJ TlQsIHZhbHVlIElOVCwgZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9icmluX2lkeCBPTiB0IFVT SU5HIGJyaW4odmFsdWUpOworQ1JFQVRFIElOREVYIHRfZXhwcl9pZHggT04gdCgoZGF0YS0+J3N0 YXR1cycpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAxMDAsICd7InN0YXR1cyI6ICJhY3Rp dmUifScpOworLS0gVXBkYXRlIG9ubHkgQlJJTiBjb2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERB VEUgdCBTRVQgdmFsdWUgPSAyMDAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVz IHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAg ICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgb25s eSBleHByZXNzaW9uIGNvbHVtbiAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0 YSA9ICd7InN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90 X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwg ICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVw ZGF0ZSBib3RoIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDMwMCwg ZGF0YSA9ICd7InN0YXR1cyI6ICJwZW5kaW5nIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBo b3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCist LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMg fCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQKKygxIHJvdykKKworRFJP UCBUQUJMRSB0OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorLS0gRXhwcmVzc2lvbiB3aXRoIENPTExBVElPTiBhbmQg QlRSRUUgKG5idHJlZSkgaW5kZXgKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KAorICAgIGlk IElOVCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFRFWFQgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZl CispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NS RUFURSBJTkRFWCB0X2xvd2VyX2lkeCBPTiB0IFVTSU5HIEJUUkVFIChuYW1lIENPTExBVEUgY2Fz ZV9pbnNlbnNpdGl2ZSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ0FMSUNFJyk7CistLSBD aGFuZ2UgY2FzZSBidXQgbm90IHZhbHVlIC0gc2hvdWxkIE5PVCBiZSBIT1QgaW4gQlRSRUUKK1VQ REFURSB0IFNFVCBuYW1lID0gJ0FsaWNlJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAg ICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5n ZSB0byBuZXcgdmFsdWUgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIG5hbWUgPSAn Qk9CJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOwor IHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3Bl cmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDAgfCAgICAgICAgICAg ICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IEFycmF5IEV4cHJlc3Npb24gSW5kZXgKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElO VCwgdGFncyBURVhUW10pCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxs ZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfYXJyYXlfbGVuX2lkeCBPTiB0KGFycmF5X2xl bmd0aCh0YWdzLCAxKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgQVJSQVlbJ2EnLCAnYics ICdjJ10pOworLS0gU2FtZSBsZW5ndGgsIGRpZmZlcmVudCBlbGVtZW50cyAtIHNob3VsZCBiZSBI T1QKK1VQREFURSB0IFNFVCB0YWdzID0gQVJSQVlbJ2QnLCAnZScsICdmJ10gV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90 YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hl c19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwg ICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAor KDEgcm93KQorCistLSBEaWZmZXJlbnQgbGVuZ3RoIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFU RSB0IFNFVCB0YWdzID0gQVJSQVlbJ2QnLCAnZSddIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBo b3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCist LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIg fCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJvdykKKworRFJP UCBUQUJMRSB0OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorLS0gTmVzdGVkIEpTT05CIEV4cHJlc3Npb24gYW5kIEpT T05CIGVxdWFsaXR5ICctPicgKG5vdCAnLT4+JykKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0 KGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFj dG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfbmVzdGVkX2lkeCBPTiB0KChkYXRhLT4ndXNlcict PiduYW1lJykpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKCd7InVzZXIiOiB7Im5hbWUiOiAiYWxp Y2UiLCAiYWdlIjogMzB9fScpOworLS0gQ2hhbmdlIG5lc3RlZCBub24taW5kZXhlZCBmaWVsZCAt IHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidXNlciI6IHsibmFtZSI6ICJh bGljZSIsICJhZ2UiOiAzMX19JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7 CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVf cGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAg ICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gQ2hhbmdlIG5lc3RlZCBpbmRleGVkIGZp ZWxkIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidXNlciI6IHsi bmFtZSI6ICJib2IiLCAiYWdlIjogMzF9fSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3Rf dXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAg ICAgICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKy0tIENvbXBsZXggUHJlZGljYXRlIG9uIE11bHRpcGxlIEpTT05CIEZpZWxkcworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHggT04g dCgoZGF0YS0+J3N0YXR1cycpKQorICAgIFdIRVJFIChkYXRhLT4ncHJpb3JpdHknKTo6aW50ID4g NQorICAgICAgQU5EIChkYXRhLT4nYWN0aXZlJyk6OmJvb2xlYW4gPSB0cnVlOworSU5TRVJUIElO VE8gdCBWQUxVRVMgKCd7InN0YXR1cyI6ICJwZW5kaW5nIiwgInByaW9yaXR5IjogMywgImFjdGl2 ZSI6IHRydWV9Jyk7CistLSBPdXRzaWRlIHByZWRpY2F0ZSAocHJpb3JpdHkgdG9vIGxvdykgLSBz aG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6ICJkb25lIiwgInBy aW9yaXR5IjogMywgImFjdGl2ZSI6IHRydWV9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhv dF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8 ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVHJhbnNpdGlvbiBpbnRv IHByZWRpY2F0ZSAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0 YXR1cyI6ICJkb25lIiwgInByaW9yaXR5IjogMTAsICJhY3RpdmUiOiB0cnVlfSc7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVz IHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVk IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisK Ky0tIEluc2lkZSBwcmVkaWNhdGUsIGNoYW5nZSB0byBvdXRzaWRlIChhY3RpdmUgPSBmYWxzZSkg LSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJzdGF0dXMiOiAiZG9u ZSIsICJwcmlvcml0eSI6IDEwLCAiYWN0aXZlIjogZmFsc2V9JzsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBk YXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAg ICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQKKygxIHJvdykKKworRFJPUCBUQUJM RSB0OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorLS0gR0lOIEFycmF5IEluZGV4IC0gT3JkZXIgSW5zZW5zaXRpdmUg RXh0cmFjdGlvbgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoCisgICAgaWQgSU5UIFBSSU1B UlkgS0VZLAorICAgIGRhdGEgSlNPTkIKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2Zm LCBmaWxsZmFjdG9yID0gNzApOworLS0gR0lOIGluZGV4IG9uIEpTT05CIGFycmF5IChleHRyYWN0 cyBhbGwgZWxlbWVudHMpCitDUkVBVEUgSU5ERVggdF9pdGVtc19naW4gT04gdCBVU0lORyBHSU4g KChkYXRhLT4naXRlbXMnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3siaXRlbXMiOiBb MSwgMiwgM10sICJzdGF0dXMiOiAiYWN0aXZlIn0nKTsKKy0tIFVwZGF0ZTogUmVvcmRlciBhcnJh eSBlbGVtZW50cworLS0gSlNPTkIgZXF1YWxpdHk6IE5PVCBlcXVhbCAoZGlmZmVyZW50IGFycmF5 cykKKy0tIEdJTiBleHRyYWN0aW9uOiBTYW1lIGVsZW1lbnRzIGV4dHJhY3RlZCAobWlnaHQgYWxs b3cgSE9UIGlmIG5vdCBjYXJlZnVsKQorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJpdGVtcyI6IFsz LCAyLCAxXSwgInN0YXR1cyI6ICJhY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhv dF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8 ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBV cGRhdGU6IEFkZC9yZW1vdmUgZWxlbWVudAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJpdGVtcyI6 IFsxLCAyLCAzLCA0XSwgInN0YXR1cyI6ICJhY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNU ICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRl cyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAg ICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQor CitEUk9QIFRBQkxFIHQ7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUT0FTVGVkIFZhbHVlcyBpbiBFeHByZXNz aW9uIEluZGV4CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGxhcmdlX3RleHQg VEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3 MCk7CitDUkVBVEUgSU5ERVggdF9zdWJzdHJfaWR4IE9OIHQoc3Vic3RyKGxhcmdlX3RleHQsIDEs IDEwKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgcmVwZWF0KCd4JywgNTAwMCkgfHwgJ2lk ZW50aWZpZXInKTsKKy0tIENoYW5nZSBlbmQgb2Ygc3RyaW5nLCBwcmVmaXggdW5jaGFuZ2VkIC0g c2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGxhcmdlX3RleHQgPSByZXBlYXQoJ3gnLCA1MDAw KSB8fCAnZGlmZmVyZW50JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEg fCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5nZSBwcmVmaXgg LSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGxhcmdlX3RleHQgPSByZXBlYXQoJ3kn LCA1MDAwKSB8fCAnZGlmZmVyZW50JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0 ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAg ICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUg dDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIFRFU1Q6IEdJTiB3aXRoIFRPQVNUZWQgVEVYVCAodHN2ZWN0b3Ip CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNvbnRlbnQgVEVYVCwgc2VhcmNo X3ZlYyB0c3ZlY3RvcikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxm YWN0b3IgPSA3MCk7CistLSBDcmVhdGUgdHJpZ2dlciB0byBtYWludGFpbiB0c3ZlY3RvcgorQ1JF QVRFIFRSSUdHRVIgdHN2ZWN0b3J1cGRhdGVfdG9hc3QKKyAgICBCRUZPUkUgSU5TRVJUIE9SIFVQ REFURSBPTiB0CisgICAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04KKyAgICB0c3ZlY3Rv cl91cGRhdGVfdHJpZ2dlcihzZWFyY2hfdmVjLCAncGdfY2F0YWxvZy5lbmdsaXNoJywgY29udGVu dCk7CitDUkVBVEUgSU5ERVggdF9naW4gT04gdCBVU0lORyBnaW4oc2VhcmNoX3ZlYyk7CistLSBJ bnNlcnQgd2l0aCBsYXJnZSBjb250ZW50ICh3aWxsIGJlIFRPQVNUZWQpCitJTlNFUlQgSU5UTyB0 IChpZCwgY29udGVudCkgVkFMVUVTCisgICAgKDEsIHJlcGVhdCgnaW1wb3J0YW50IGtleXdvcmQg JywgMTAwMCkgfHwgcmVwZWF0KCdmaWxsZXIgdGV4dCAnLCAxMDAwMCkpOworLS0gVmVyaWZ5IGlu aXRpYWwgc3RhdGUKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hFUkUgc2VhcmNoX3ZlYyBAQCB0 b190c3F1ZXJ5KCdpbXBvcnRhbnQnKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93 KQorCistLSBFeHBlY3RlZDogMSByb3cKKy0tIElNUE9SVEFOVDogVGhlIEJFRk9SRSBVUERBVEUg dHJpZ2dlciBtb2RpZmllcyBzZWFyY2hfdmVjLCBzbyBieSB0aGUgdGltZQorLS0gRXhlY1doaWNo SW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgcnVucywgc2VhcmNoX3ZlYyBoYXMgYWxyZWFkeSBjaGFu Z2VkLgorLS0gVGhpcyBtZWFucyB0aGUgY29tcGFyaXNvbiBzZWVzIG9sZCB0c3ZlY3RvciB2cy4g dHJpZ2dlci1tb2RpZmllZCB0c3ZlY3RvciwKKy0tIG5vdCB0aGUgbmF0dXJhbCBwcm9ncmVzc2lv bi4gSE9UIHdvbid0IGhhcHBlbiBiZWNhdXNlIHRoZSB0cmlnZ2VyIGNoYW5nZWQKKy0tIHRoZSBp bmRleGVkIGNvbHVtbi4KKy0tIFVwZGF0ZTogRXZlbiB0aG91Z2ggY29udGVudCBrZXl3b3JkcyB1 bmNoYW5nZWQsIHRyaWdnZXIgc3RpbGwgZmlyZXMKK1VQREFURSB0CitTRVQgY29udGVudCA9IHJl cGVhdCgnaW1wb3J0YW50IGtleXdvcmQgJywgMTAwMCkgfHwgcmVwZWF0KCdkaWZmZXJlbnQgZmls bGVyICcsIDEwMDAwKQorV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90 X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAwIHwg ICAgICAgICAgICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMCBIT1Qg KHRyaWdnZXIgbW9kaWZpZXMgc2VhcmNoX3ZlYywgYmxvY2tpbmcgSE9UKQorLS0gVGhpcyBpcyBh Y3R1YWxseSBjb3JyZWN0IGJlaGF2aW9yIC0gdGhlIHRyaWdnZXIgdXBkYXRlZCBhbiBpbmRleGVk IGNvbHVtbgorLS0gVXBkYXRlOiBDaGFuZ2UgaW5kZXhlZCBrZXl3b3JkcworVVBEQVRFIHQKK1NF VCBjb250ZW50ID0gcmVwZWF0KCdjcml0aWNhbCBrZXl3b3JkICcsIDEwMDApIHx8IHJlcGVhdCgn ZGlmZmVyZW50IGZpbGxlciAnLCAxMDAwMCkKK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3Rf dXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAg ICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhw ZWN0ZWQ6IDAgSE9UIChpbmRleCBrZXlzIGNoYW5nZWQpCistLSBWZXJpZnkgcXVlcnkgY29ycmVj dG5lc3MKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hFUkUgc2VhcmNoX3ZlYyBAQCB0b190c3F1 ZXJ5KCdjcml0aWNhbCcpOworIGNvdW50IAorLS0tLS0tLQorICAgICAxCisoMSByb3cpCisKKy0t IEV4cGVjdGVkOiAxIHJvdworRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBU RVNUOiBHSU4gd2l0aCBUT0FTVGVkIEpTT05CCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChp ZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBm aWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfZ2luIE9OIHQgVVNJTkcgZ2luKChkYXRh LT4ndGFncycpKTsKKy0tIEluc2VydCB3aXRoIFRPQVNUZWQgSlNPTkIKK0lOU0VSVCBJTlRPIHQg KGlkLCBkYXRhKSBWQUxVRVMKKyAgICAoMSwganNvbmJfYnVpbGRfb2JqZWN0KAorICAgICAgICAn dGFncycsICdbInBvc3RncmVzIiwgImRhdGFiYXNlIl0nOjpqc29uYiwKKyAgICAgICAgJ2xhcmdl X2ZpZWxkJywgcmVwZWF0KCd4JywgMTAwMDApCisgICAgKSk7CistLSBVcGRhdGU6IENoYW5nZSBs YXJnZV9maWVsZCwgdGFncyB1bmNoYW5nZWQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdAorU0VU IGRhdGEgPSBqc29uYl9idWlsZF9vYmplY3QoCisgICAgJ3RhZ3MnLCAnWyJwb3N0Z3JlcyIsICJk YXRhYmFzZSJdJzo6anNvbmIsCisgICAgJ2xhcmdlX2ZpZWxkJywgcmVwZWF0KCd5JywgMTAwMDAp CispCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOwor IHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3Bl cmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAg ICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAxIEhPVCB1cGRhdGUKKy0t IFVwZGF0ZTogQ2hhbmdlIHRhZ3MgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQKK1NFVCBk YXRhID0ganNvbmJfYnVpbGRfb2JqZWN0KAorICAgICd0YWdzJywgJ1sicG9zdGdyZXMiLCAic3Fs Il0nOjpqc29uYiwKKyAgICAnbGFyZ2VfZmllbGQnLCByZXBlYXQoJ3knLCAxMDAwMCkKKykKK1dI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVf bmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFn ZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1 MC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IFN0aWxsIDEgSE9UCistLSBWZXJpZnkg Y29ycmVjdG5lc3MKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hFUkUgZGF0YS0+J3RhZ3MnIEA+ ICdbImRhdGFiYXNlIl0nOjpqc29uYjsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMAorKDEgcm93 KQorCistLSBFeHBlY3RlZDogMCByb3dzCitTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdIRVJFIGRh dGEtPid0YWdzJyBAPiAnWyJzcWwiXSc6Ompzb25iOworIGNvdW50IAorLS0tLS0tLQorICAgICAx CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAxIHJvdworRFJPUCBUQUJMRSB0IENBU0NBREU7Cist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CistLSBURVNUOiBHSU4gd2l0aCBBcnJheSBvZiBMYXJnZSBTdHJpbmdzCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIHRhZ3MgVEVYVFtdKQorICAgIFdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0 X2dpbiBPTiB0IFVTSU5HIGdpbih0YWdzKTsKKy0tIEluc2VydCB3aXRoIGxhcmdlIGFycmF5IGVs ZW1lbnRzIChtaWdodCBiZSBUT0FTVGVkKQorSU5TRVJUIElOVE8gdCAoaWQsIHRhZ3MpIFZBTFVF UworICAgICgxLCBBUlJBWVtyZXBlYXQoJ3RhZzEnLCAxMDAwKSwgcmVwZWF0KCd0YWcyJywgMTAw MCldKTsKKy0tIFVwZGF0ZTogQ2hhbmdlIHRvIGRpZmZlcmVudCBsYXJnZSB2YWx1ZXMgLSBOT1Qg SE9UCitVUERBVEUgdAorU0VUIHRhZ3MgPSBBUlJBWVtyZXBlYXQoJ3RhZzMnLCAxMDAwKSwgcmVw ZWF0KCd0YWc0JywgMTAwMCldCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hv dF91cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMg fCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAg IDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAw IEhPVCAoa2V5cyBhY3R1YWxseSBjaGFuZ2VkKQorLS0gVXBkYXRlOiBLZWVwIHNhbWUgdGFnIHZh bHVlcywganVzdCByZW9yZGVyIC0gU0hPVUxEIEJFIEhPVAorLS0gKEdJTiBpcyBvcmRlci1pbnNl bnNpdGl2ZTogYm90aCBbdGFnMyx0YWc0XSBhbmQgW3RhZzQsdGFnM10KKy0tIGV4dHJhY3QgdG8g dGhlIHNhbWUgc29ydGVkIGtleSBzZXQgWyd0YWczJywndGFnNCddKQorVVBEQVRFIHQKK1NFVCB0 YWdzID0gQVJSQVlbcmVwZWF0KCd0YWc0JywgMTAwMCksIHJlcGVhdCgndGFnMycsIDEwMDApXQor V0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJs ZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50 YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0 ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAg IDUwLjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSBIT1QgKEdJTiBrZXlzIHNlbWFu dGljYWxseSBpZGVudGljYWwpCistLSBVcGRhdGU6IFJlbW92ZSBhbiBlbGVtZW50IC0gTk9UIEhP VCAoa2V5cyBjaGFuZ2VkKQorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlbcmVwZWF0KCd0YWc0 JywgMTAwMCldCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBk YXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDEgfCAgICAg ICAgICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiBTdGlsbCAxIEhP VCAobm90IHRoaXMgb25lKQorRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBC UklOIEluZGV4IHdpdGggUGFydGlhbCBQcmVkaWNhdGUKKy0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJM RSB0KAorICAgIGlkIElOVCBQUklNQVJZIEtFWSwKKyAgICB2YWx1ZSBJTlQsCisgICAgZGVzY3Jp cHRpb24gVEVYVAorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3Ig PSA3MCk7CitDUkVBVEUgSU5ERVggdF9icmluX3BhcnRpYWxfaWR4IE9OIHQgVVNJTkcgYnJpbih2 YWx1ZSkgV0hFUkUgdmFsdWUgPiAxMDA7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgNTAsICdi ZWxvdyByYW5nZScpOworLS0gVGVzdCAxOiBPdXRzaWRlIHByZWRpY2F0ZQorVVBEQVRFIHQgU0VU IGRlc2NyaXB0aW9uID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBk YXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAg ICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVmFsaWRh dGU6IFByZWRpY2F0ZSBxdWVyeSByZXR1cm5zIDAgcm93cworU0VMRUNUIENPVU5UKCopIGFzIGNu dCBGUk9NIHQgV0hFUkUgdmFsdWUgPiAxMDA7CisgY250IAorLS0tLS0KKyAgIDAKKygxIHJvdykK KworLS0gVGVzdCAyOiBUcmFuc2l0aW9uIGludG8gcHJlZGljYXRlCitVUERBVEUgdCBTRVQgdmFs dWUgPSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygy KTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0 ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAyIHwgICAgICAg ICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBWYWxpZGF0ZTogUHJlZGljYXRlIHF1 ZXJ5IHJldHVybnMgMSByb3cgd2l0aCBjb3JyZWN0IHZhbHVlCitTRUxFQ1QgQ09VTlQoKikgYXMg Y250LCBNQVgodmFsdWUpIGFzIG1heF92YWwgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworIGNu dCB8IG1heF92YWwgCistLS0tLSstLS0tLS0tLS0KKyAgIDEgfCAgICAgMTUwCisoMSByb3cpCisK Ky0tIFRlc3QgMzogSW5zaWRlIHByZWRpY2F0ZSwgdmFsdWUgY2hhbmdlcworVVBEQVRFIHQgU0VU IHZhbHVlID0gMTYwLCBkZXNjcmlwdGlvbiA9ICd1cGRhdGVkIGFnYWluJyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMpOworIHRhYmxlX25hbWUgfCB0b3Rh bF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVz X2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAg ICAgICAgICAgICAzIHwgICAgICAgICAgIDMgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0Ciso MSByb3cpCisKKy0tIFZhbGlkYXRlOiBVcGRhdGVkIHZhbHVlICgxNjApIGlzIHJldHVybmVkCitT RUxFQ1QgQ09VTlQoKikgYXMgY250LCBNQVgodmFsdWUpIGFzIG1heF92YWwgRlJPTSB0IFdIRVJF IHZhbHVlID4gMTAwOworIGNudCB8IG1heF92YWwgCistLS0tLSstLS0tLS0tLS0KKyAgIDEgfCAg ICAgMTYwCisoMSByb3cpCisKKy0tIFRlc3QgNDogVHJhbnNpdGlvbiBvdXQgb2YgcHJlZGljYXRl CitVUERBVEUgdCBTRVQgdmFsdWUgPSA1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDQpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICA0IHwgICAg ICAgICAgIDQgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKK1NFTEVDVCBD T1VOVCgqKSBhcyBjbnQgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworIGNudCAKKy0tLS0tCisg ICAwCisoMSByb3cpCisKK1NFTEVDVCBpZCwgdmFsdWUsIGRlc2NyaXB0aW9uIEZST00gdDsKKyBp ZCB8IHZhbHVlIHwgIGRlc2NyaXB0aW9uICAKKy0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0K KyAgMSB8ICAgIDUwIHwgdXBkYXRlZCBhZ2FpbgorKDEgcm93KQorCitEUk9QIFRBQkxFIHQgQ0FT Q0FERTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKy0tIEhBU0ggSW5kZXggKFNpbXBsZSBDb2x1bW4pCistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNvZGUgVkFSQ0hBUigyMCksIGRlc2NyaXB0aW9u IFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0g NzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9pZHggT04gdCBVU0lORyBoYXNoKGNvZGUpOworSU5T RVJUIElOVE8gdCBWQUxVRVMgKDEsICdDT0RFMDAxJywgJ2luaXRpYWwnKTsKKy0tIFVwZGF0ZSBu b24taW5kZXhlZCBjb2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGVzY3JpcHRp b24gPSAndXBkYXRlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90 X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwg ICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgaW5kZXhlZCBj b2x1bW4gLSBIQVNIIGluZGV4IHJlcXVpcmVzIHVwZGF0ZSwgTk9UIEhPVAorVVBEQVRFIHQgU0VU IGNvZGUgPSAnQ09ERTAwMicgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwg aG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAx IHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgYm90aCAt IE5PVCBIT1QKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NPREUwMDMnLCBkZXNjcmlwdGlvbiA9ICdj aGFuZ2VkJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEp OworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRl X3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDEgfCAgICAgICAg ICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisKKy0tIEJhY2sgdG8gb3JpZ2luYWwgY29kZSAt IE5PVCBIT1QgKGRpZmZlcmVudCBoYXNoIGJ1Y2tldCBsb2NhdGlvbikKK1VQREFURSB0IFNFVCBj b2RlID0gJ0NPREUwMDEnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhv dF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMSB8 ICAgICAgICAgICAgICAgICAyNS4wMCB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0IENBU0NB REU7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLSBIQVNIIEluZGV4IG9uIEV4cHJlc3Npb24KKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K K0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZW1haWwgVEVYVCwgZGF0YSBKU09OQikKKyAgICBXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5E RVggdF9oYXNoX2xvd2VyX2VtYWlsX2lkeCBPTiB0IFVTSU5HIEhBU0gobG93ZXIoZW1haWwpKTsK K0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnQWxpY2VARXhhbXBsZS5jb20nLCAneyJzdGF0dXMi OiAibmV3In0nKTsKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBmaWVsZCAtIHNob3VsZCBiZSBIT1QK K1VQREFURSB0IFNFVCBkYXRhID0gJ3sic3RhdHVzIjogImFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3Rh bF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVz X2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAg ICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0Ciso MSByb3cpCisKKy0tIFVwZGF0ZSBlbWFpbCB3aXRoIGNhc2UgY2hhbmdlIG9ubHkgKHNhbWUgbG93 ZXJjYXNlKSAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBlbWFpbCA9ICdhbGljZUBleGFt cGxlLmNvbScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygy KTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0 ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAyIHwgICAgICAg ICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgZW1haWwgdG8gZGlmZmVy ZW50IGxvd2VyY2FzZSAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBlbWFpbCA9ICdib2JAZXhhbXBs ZS5jb20nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7 CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVf cGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMiB8ICAgICAgICAg ICAgICAgICA2Ni42NyB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLSBIQVNIIEluZGV4IG9uIEpTT05CIEZpZWxkCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUg VEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9jYXRlZ29yeV9p ZHggT04gdCBVU0lORyBoYXNoKChkYXRhLT4nY2F0ZWdvcnknKSk7CitJTlNFUlQgSU5UTyB0IFZB TFVFUyAoMSwgJ3siY2F0ZWdvcnkiOiAiYm9va3MiLCAidGl0bGUiOiAiUG9zdGdyZVNRTCBHdWlk ZSJ9Jyk7CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91bGQgYmUgSE9U CitVUERBVEUgdCBTRVQgZGF0YSA9ICd7ImNhdGVnb3J5IjogImJvb2tzIiwgInRpdGxlIjogIlBv c3RncmVTUUwgSGFuZGJvb2sifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVz IHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAg ICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgaW5k ZXhlZCBKU09OQiBmaWVsZCAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3siY2F0ZWdv cnkiOiAidmlkZW9zIiwgInRpdGxlIjogIlBvc3RncmVTUUwgSGFuZGJvb2sifScgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwg dG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0 Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg IHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwg dAorKDEgcm93KQorCistLSBVcGRhdGUgYm90aCAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBkYXRh ID0gJ3siY2F0ZWdvcnkiOiAiY291cnNlcyIsICJ0aXRsZSI6ICJQb3N0Z3JlU1FMIEJhc2ljcyJ9 JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAg ICAgMzMuMzMgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0gTXVsdGlwbGUgSEFTSCBJbmRleGVzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChp ZCBJTlQsIGNhdGVnb3J5IFZBUkNIQVIsIHN0YXR1cyBWQVJDSEFSLCB2YWx1ZSBJTlQpCisgICAg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRF IElOREVYIHRfaGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0NS RUFURSBJTkRFWCB0X2hhc2hfc3RhdHVzX2lkeCBPTiB0IFVTSU5HIGhhc2goc3RhdHVzKTsKK0lO U0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnZWxlY3Ryb25pY3MnLCAnYWN0aXZlJywgMTAwKTsKKy0t IFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQg dmFsdWUgPSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3Vw ZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAg ICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgb25lIGluZGV4ZWQg Y29sdW1uIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0gJ2Jvb2tzJyBXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAg fCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSBvdGhlciBpbmRleGVkIGNvbHVtbiAtIE5PVCBIT1QK K1VQREFURSB0IFNFVCBzdGF0dXMgPSAnaW5hY3RpdmUnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQKKygxIHJvdykKKwor LS0gVXBkYXRlIGJvdGggaW5kZXhlZCBjb2x1bW5zIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNh dGVnb3J5ID0gJ3ZpZGVvcycsIHN0YXR1cyA9ICdwZW5kaW5nJyBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICA0IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMjUuMDAgfCB0CisoMSByb3cp CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gQlJJTiB2cyBIQVNIIENv bXBhcmlzb24KKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0X2JyaW4oaWQgSU5ULCB2YWx1ZSBJ TlQsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxm YWN0b3IgPSA3MCk7CitDUkVBVEUgVEFCTEUgdF9oYXNoKGlkIElOVCwgdmFsdWUgSU5ULCBkYXRh IFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0g NzApOworQ1JFQVRFIElOREVYIHRfYnJpbl92YWx1ZV9pZHggT04gdF9icmluIFVTSU5HIGJyaW4o dmFsdWUpOworQ1JFQVRFIElOREVYIHRfaGFzaF92YWx1ZV9pZHggT04gdF9oYXNoIFVTSU5HIGhh c2godmFsdWUpOworSU5TRVJUIElOVE8gdF9icmluIFZBTFVFUyAoMSwgMTAwLCAnaW5pdGlhbCcp OworSU5TRVJUIElOVE8gdF9oYXNoIFZBTFVFUyAoMSwgMTAwLCAnaW5pdGlhbCcpOworLS0gU2Ft ZSB1cGRhdGUgb24gYm90aCAtIGRpZmZlcmVudCBIT1QgYmVoYXZpb3IgZXhwZWN0ZWQKKy0tIEJS SU46IG1pZ2h0IGFsbG93IEhPVCAocmFuZ2Ugc3VtbWFyeSB1bmNoYW5nZWQpCistLSBIQVNIOiBi bG9ja3MgSE9UIChoYXNoIGJ1Y2tldCBjaGFuZ2VkKQorVVBEQVRFIHRfYnJpbiBTRVQgdmFsdWUg PSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAn dF9icmluJyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhv dF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tCisgdF9icmluICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8 ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDEgSE9U IChCUklOIGFsbG93cyBpdCBmb3Igc2luZ2xlIHJvdykKK1VQREFURSB0X2hhc2ggU0VUIHZhbHVl ID0gMTUwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwg J3RfaGFzaCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIHRfaGFzaCAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAg fCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAwIEhP VCAoSEFTSCBibG9ja3MgaXQpCitEUk9QIFRBQkxFIHRfYnJpbiBDQVNDQURFOworRFJPUCBUQUJM RSB0X2hhc2ggQ0FTQ0FERTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEhBU0ggSW5kZXggd2l0aCBOVUxMIFZh bHVlcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBjYXRlZ29yeSBWQVJDSEFS LCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFj dG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBo YXNoKGNhdGVnb3J5KTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnZWxlY3Ryb25pY3MnLCAn aW5pdGlhbCcpOworLS0gVXBkYXRlIGluZGV4ZWQgY29sdW1uIHRvIE5VTEwgLSBOT1QgSE9UICho YXNoIHZhbHVlIGNoYW5nZWQpCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSBOVUxMIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8 IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1h dGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAg ICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8 IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDAgSE9UCistLSBVcGRhdGUgaW5kZXhlZCBjb2x1 bW4gZnJvbSBOVUxMIHRvIHZhbHVlIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0g J2Jvb2tzJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAp OworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRl X3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDAgfCAgICAgICAg ICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAwIEhPVAorLS0gVXBk YXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRh ID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91 cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAg ICAgICAgICAgICAgICAzMy4zMyB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDEgSE9UCitE Uk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEJSSU4gb24gSlNPTkIgRmllbGQK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgbWV0cmljcyBKU09OQikKKyAgICBX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CistLSBCUklO IGRvZXNuJ3QgZGlyZWN0bHkgc3VwcG9ydCBKU09OQiwgYnV0IHdlIGNhbiB0ZXN0IG9uIGV4cHJl c3Npb24KK0NSRUFURSBJTkRFWCB0X2JyaW5fY291bnRfaWR4IE9OIHQgVVNJTkcgYnJpbigKKyAg ICBDQVNUKG1ldHJpY3MtPj4nY291bnQnIEFTIElOVEVHRVIpCispOworSU5TRVJUIElOVE8gdCBW QUxVRVMgKDEsICd7ImNvdW50IjogIjEwMCIsICJ0aW1lc3RhbXAiOiAiMjAyNC0wMS0wMSJ9Jyk7 CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91bGQgYmUgSE9UCitVUERB VEUgdCBTRVQgbWV0cmljcyA9ICd7ImNvdW50IjogIjEwMCIsICJ0aW1lc3RhbXAiOiAiMjAyNC0w MS0wMiJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEp OworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRl X3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAg ICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAxIEhPVAorLS0gVXBk YXRlIGluZGV4ZWQgZmllbGQgLSBCUklOIGFsbG93cyBIT1QgZm9yIHNpbmdsZSByb3cKK1VQREFU RSB0IFNFVCBtZXRyaWNzID0gJ3siY291bnQiOiAiMTUwIiwgInRpbWVzdGFtcCI6ICIyMDI0LTAx LTAyIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7 CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVf cGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMiB8ICAgICAgICAg ICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDIgSE9UIChCUklOIHBl cm1pdHMgc2luZ2xlLXJvdyB1cGRhdGVzKQorRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBNaXhlZCBCUklOICsgSEFTSCBvbiBTYW1lIFRhYmxlCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVB VEUgVEFCTEUgdChpZCBJTlQsIGNhdGVnb3J5IFZBUkNIQVIsIHRpbWVzdGFtcCBUSU1FU1RBTVAs IHByaWNlIE5VTUVSSUMsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9icmluX3RpbWVzdGFtcF9p ZHggT04gdCBVU0lORyBicmluKHRpbWVzdGFtcCk7CitDUkVBVEUgSU5ERVggdF9oYXNoX2NhdGVn b3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goY2F0ZWdvcnkpOworSU5TRVJUIElOVE8gdCBWQUxVRVMg KDEsICdib29rcycsICcyMDI0LTAxLTAxIDEwOjAwOjAwJywgMjkuOTksICdpbml0aWFsJyk7Cist LSBVcGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VU IGRhdGEgPSAndXBkYXRlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwg aG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAx IHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSBI T1QKKy0tIFVwZGF0ZSBCUklOIGluZGV4ZWQgY29sdW1uIC0gYWxsb3dzIEhPVAorVVBEQVRFIHQg U0VUIHRpbWVzdGFtcCA9ICcyMDI0LTAxLTAyIDEwOjAwOjAwJyBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICAyIHwgICAgICAgICAgIDIgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cp CisKKy0tIEV4cGVjdGVkOiAyIEhPVAorLS0gVXBkYXRlIEhBU0ggaW5kZXhlZCBjb2x1bW4gLSBi bG9ja3MgSE9UCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSAndmlkZW9zJyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworIHRhYmxlX25hbWUgfCB0b3Rh bF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVz X2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAg ICAgICAgICAgICAzIHwgICAgICAgICAgIDIgfCAgICAgICAgICAgICAgICAgNjYuNjcgfCB0Ciso MSByb3cpCisKKy0tIEV4cGVjdGVkOiAyIEhPVCAoSEFTSCBibG9ja3MgaXQpCistLSBVcGRhdGUg cHJpY2UgKG5vbi1pbmRleGVkKSAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBwcmljZSA9 IDM5Ljk5IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMyk7 CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVf cGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMyB8ICAgICAgICAg ICAgICAgICA3NS4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDMgSE9UCitEUk9QIFRB QkxFIHQgQ0FTQ0FERTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEluZGV4IGJvdGggb24gYSBmaWVsZCBpbiBh IEpTT05CIGRvY3VtZW50LCBhbmQgdGhlIGRvY3VtZW50CistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFC TEUgdChpZCBJTlQgUFJJTUFSWSBLRVksIGRvY3MgSlNPTkIpIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfaWR4IE9O IHQoKGRvY3MtPiduYW1lJykpOworQ1JFQVRFIElOREVYIHRfZG9jc19jb2xfaWR4IE9OIHQoZG9j cyk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3sibmFtZSI6ICJqb2huIiwgImRhdGEiOiAi c29tZSBkYXRhIn0nKTsKKy0tIFVwZGF0ZSBpbXBhY3RzIGluZGV4IG9uIHdob2xlIGRvY21lbnQg YXR0cmlidXRlLCBjYW4ndCBnbyBIT1QKK1VQREFURSB0IFNFVCBkb2NzPSd7Im5hbWUiOiAiam9o biIsICJkYXRhIjogInNvbWUgb3RoZXIgZGF0YSJ9JyBXSEVSRSBpZD0xOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhv dF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8 ICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCitEUk9Q IFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFR3byBpbmRleGVzIG9uIGEgSlNPTkIg ZG9jdW1lbnQsIG9uZSBwYXJ0aWFsCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdCAoZG9jcyBK U09OQikgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOwor SU5TRVJUIElOVE8gdCAoZG9jcykgVkFMVUVTICgneyJhIjogMCwgImIiOiAwfScpOworSU5TRVJU IElOVE8gdCAoZG9jcykgU0VMRUNUIGpzb25iX2J1aWxkX29iamVjdCgnYicsIG4pIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEwMCwgMTAwMDApIGFzIG47CitDUkVBVEUgSU5ERVggdF9pZHhfYSBPTiB0 ICgoZG9jcy0+J2EnKSk7CitDUkVBVEUgSU5ERVggdF9pZHhfYiBPTiB0ICgoZG9jcy0+J2InKSkg V0hFUkUgKGRvY3MtPidiJyk6Om51bWVyaWMgPiA5OworU0VUIFNFU1NJT04gZW5hYmxlX3NlcXNj YW4gPSBPRkY7CitTRVQgU0VTU0lPTiBlbmFibGVfYml0bWFwc2NhbiA9IE9GRjsKKy0tIExlYXZl ICdhJyB1bmNoYW5nZWQgYnV0IG1vZGlmeSAnYicgdG8gYSB2YWx1ZSBvdXRzaWRlIG9mIHRoZSBp bmRleCBwcmVkaWNhdGUuCistLSBUaGlzIHNob3VsZCBiZSBhIEhPVCB1cGRhdGUgYmVjYXVzZSBu ZWl0aGVyIGluZGV4IGlzIGNoYW5nZWQuCitVUERBVEUgdCBTRVQgZG9jcyA9IGpzb25iX2J1aWxk X29iamVjdCgnYScsIDAsICdiJywgMSkgV0hFUkUgKGRvY3MtPidhJyk6Om51bWVyaWMgPSAwOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19l eHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEg cm93KQorCistLSBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXggZG9lcyBub3QgY29u dGFpbiBhIHZhbHVlIGZvciAnYicKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0 IFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPidiJyk6Om51bWVyaWMg PCAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0X2lkeF9iIG9uIHQKKyAgIEZp bHRlcjogKCgoZG9jcyAtPiAnYic6OnRleHQpKTo6bnVtZXJpYyA8ICcxMDAnOjpudW1lcmljKQor KDIgcm93cykKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID4g OSBBTkQgKGRvY3MtPidiJyk6Om51bWVyaWMgPCAxMDA7CisgZG9jcyAKKy0tLS0tLQorKDAgcm93 cykKKworLS0gTGVhdmUgJ2EnIHVuY2hhbmdlZCBidXQgbW9kaWZ5ICdiJyB0byBhIHZhbHVlIHdp dGhpbiB0aGUgaW5kZXggcHJlZGljYXRlLgorLS0gVGhpcyByZXByZXNlbnRzIGEgY2hhbmdlIGZv ciBmaWVsZCAnYicgZnJvbSB1bmluZGV4ZWQgdG8gaW5kZXhlZCBhbmQgc28KKy0tIHRoaXMgc2hv dWxkIG5vdCB0YWtlIHRoZSBIT1QgcGF0aC4KK1VQREFURSB0IFNFVCBkb2NzID0ganNvbmJfYnVp bGRfb2JqZWN0KCdhJywgMCwgJ2InLCAxMCkgV0hFUkUgKGRvY3MtPidhJyk6Om51bWVyaWMgPSAw OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90 YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hl c19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwg ICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAor KDEgcm93KQorCistLSBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXggY29udGFpbnMg dGhlIG5ldyB2YWx1ZSBvZiAnYicKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0 IFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPidiJyk6Om51bWVyaWMg PCAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0X2lkeF9iIG9uIHQKKyAgIEZp bHRlcjogKCgoZG9jcyAtPiAnYic6OnRleHQpKTo6bnVtZXJpYyA8ICcxMDAnOjpudW1lcmljKQor KDIgcm93cykKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID4g OSBBTkQgKGRvY3MtPidiJyk6Om51bWVyaWMgPCAxMDA7CisgICAgICAgZG9jcyAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tCisgeyJhIjogMCwgImIiOiAxMH0KKygxIHJvdykKKworLS0gVGhp cyB1cGRhdGUgbW9kaWZpZXMgdGhlIHZhbHVlIG9mICdhJywgYW4gaW5kZXhlZCBmaWVsZCwgc28g aXQgYWxzbyBjYW5ub3QKKy0tIGJlIGEgSE9UIHVwZGF0ZS4KK1VQREFURSB0IFNFVCBkb2NzID0g anNvbmJfYnVpbGRfb2JqZWN0KCdhJywgMSwgJ2InLCAxMCkgV0hFUkUgKGRvY3MtPidiJyk6Om51 bWVyaWMgPSAxMDsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVf bmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFn ZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAz My4zMyB8IHQKKygxIHJvdykKKworLS0gVGhpcyB1cGRhdGUgY2hhbmdlcyBib3RoICdhJyBhbmQg J2InIHRvIG5ldyB2YWx1ZXMgdGhpcyBjYW5ub3QgdXNlIHRoZSBIT1QgcGF0aC4KK1VQREFURSB0 IFNFVCBkb2NzID0ganNvbmJfYnVpbGRfb2JqZWN0KCdhJywgMiwgJ2InLCAxMikgV0hFUkUgKGRv Y3MtPidiJyk6Om51bWVyaWMgPSAxMDsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMo MSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRh dGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMSB8ICAgICAg ICAgICAgICAgICAyNS4wMCB8IHQKKygxIHJvdykKKworLS0gQ2hlY2sgdG8gbWFrZSBzdXJlIHRo YXQgdGhlIGluZGV4IGNvbnRhaW5zIHRoZSBuZXcgdmFsdWUgb2YgJ2InCitFWFBMQUlOIChDT1NU UyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVSRSAoZG9jcy0+J2InKTo6bnVtZXJpYyA+IDkgQU5E IChkb2NzLT4nYicpOjpudW1lcmljIDwgMTAwOworICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNp bmcgdF9pZHhfYiBvbiB0CisgICBGaWx0ZXI6ICgoKGRvY3MgLT4gJ2InOjp0ZXh0KSk6Om51bWVy aWMgPCAnMTAwJzo6bnVtZXJpYykKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdCBXSEVSRSAo ZG9jcy0+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4nYicpOjpudW1lcmljIDwgMTAwOwor ICAgICAgIGRvY3MgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsiYSI6IDIsICJiIjog MTJ9CisoMSByb3cpCisKKy0tIFRoaXMgdXBkYXRlIGNoYW5nZXMgJ2InIHRvIGEgdmFsdWUgb3V0 c2lkZSBpdHMgcHJlZGljYXRlIHJlcXVpcmluZyB0aGF0CistLSB3ZSByZW1vdmUgaXQgZnJvbSB0 aGUgaW5kZXguICBUaGF0J3MgYSB0cmFuc2l0aW9uIHRoYXQgY2FuJ3QgYmUgZG9uZQorLS0gZHVy aW5nIGEgSE9UIHVwZGF0ZS4KK1VQREFURSB0IFNFVCBkb2NzID0ganNvbmJfYnVpbGRfb2JqZWN0 KCdhJywgMiwgJ2InLCAxKSBXSEVSRSAoZG9jcy0+J2InKTo6bnVtZXJpYyA9IDEyOworU0VMRUNU ICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRl cyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAg ICAgNSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDIwLjAwIHwgdAorKDEgcm93KQor CistLSBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXggbm8gbG9uZ2VyIGNvbnRhaW5z IHRoZSB2YWx1ZSBvZiAnYicKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0IFdI RVJFIChkb2NzLT4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPidiJyk6Om51bWVyaWMgPCAx MDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0X2lkeF9iIG9uIHQKKyAgIEZpbHRl cjogKCgoZG9jcyAtPiAnYic6OnRleHQpKTo6bnVtZXJpYyA8ICcxMDAnOjpudW1lcmljKQorKDIg cm93cykKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID4gOSBB TkQgKGRvY3MtPidiJyk6Om51bWVyaWMgPCAxMDA7CisgZG9jcyAKKy0tLS0tLQorKDAgcm93cykK KworRFJPUCBUQUJMRSB0IENBU0NBREU7CitTRVQgU0VTU0lPTiBlbmFibGVfc2Vxc2NhbiA9IE9O OworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPTjsKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRl c3RzIHRvIGNoZWNrIGV4cHJlc3Npb24gaW5kZXhlcworLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxF IHQoYSBJTlQsIGIgSU5UKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0 b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHhfYSBPTiB0KGFicyhhKSkgV0hFUkUgYWJzKGEp ID4gMTA7CitDUkVBVEUgSU5ERVggdF9pZHhfYiBPTiB0KGFicyhiKSk7CitJTlNFUlQgSU5UTyB0 IFZBTFVFUyAoLTEsIC0xKSwgKC0yLCAtMiksICgtMywgLTMpLCAoLTQsIC00KSwgKC01LCAtNSk7 CitJTlNFUlQgSU5UTyB0IFNFTEVDVCBtLCBuIEZST00gZ2VuZXJhdGVfc2VyaWVzKC0xMDAwMCwg LTEwKSBBUyBtLCBhYnMobSkgQVMgbjsKK1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT0ZG OworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPRkY7CistLSBUaGUgaW5kZXhlZCB2 YWx1ZSBvZiBiIGhhc24ndCBjaGFuZ2VkLCB0aGlzIHNob3VsZCBiZSBhIEhPVCB1cGRhdGUuCist LSAoLTUsIC01KSAtPiAoLTUsIDEpCitVUERBVEUgdCBTRVQgYiA9IDUgV0hFUkUgYSA9IC01Owor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19l eHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEg cm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBiICBGUk9NIHQgV0hFUkUgYWJzKGIp IDwgMTAgQU5EIGFicyhiKSA+IDA7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgdF9pZHhfYiBvbiB0CisgICBJbmRleCBDb25kOiAo KGFicyhiKSA8IDEwKSBBTkQgKGFicyhiKSA+IDApKQorKDIgcm93cykKKworU0VMRUNUIGIgRlJP TSB0IFdIRVJFIGFicyhiKSA8IDEwIEFORCBhYnMoYikgPiAwOworIGIgIAorLS0tLQorIC0xCisg LTIKKyAtMworIC00CisgIDUKKyg1IHJvd3MpCisKKy0tIE5vdyB0aGF0IHdlJ3JlIG5vdCBjaGVj a2luZyB0aGUgcHJlZGljYXRlIG9mIHRoZSBwYXJ0aWFsIGluZGV4LCB0aGlzCistLSB1cGRhdGUg b2YgYSBmcm9tIC01IHRvIDUgc2hvdWxkIGJlIEhPVCBiZWNhdXNlIHdlIHNob3VsZCBpZ25vcmUg dGhlCistLSBwcmVkaWNhdGUgYW5kIGNoZWNrIHRoZSBleHByZXNzaW9uIGFuZCBmaW5kIGl0IHVu Y2hhbmdlZC4KKy0tICgtNSwgMSkgLT4gKDUsIDEpCitVUERBVEUgdCBTRVQgYSA9IDUgV0hFUkUg YSA9IC01OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAyIHwgICAgICAgICAgICAgICAgMTAwLjAw IHwgdAorKDEgcm93KQorCistLSBUaGlzIHVwZGF0ZSBtb3ZlcyBhIGludG8gdGhlIHBhcnRpYWwg aW5kZXggYW5kIHNob3VsZCBub3QKKy0tIGJlIEhPVC4gIExldCdzIG1ha2Ugc3VyZSBvZiB0aGF0 IGFuZCBjaGVjayB0aGUgaW5kZXggYXMgd2VsbC4KKy0tICgtNCwgLTQpIC0+ICgtMTEsIC00KQor VVBEQVRFIHQgU0VUIGEgPSAtMTEgV0hFUkUgYSA9IC00OworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygyKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVz IHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAg ICAyIHwgICAgICAgICAgICAgICAgIDY2LjY3IHwgdAorKDEgcm93KQorCitFWFBMQUlOIChDT1NU UyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVSRSBhYnMoYSkgPiAxMCBBTkQgYWJzKGEpIDwgMTU7 CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0X2lkeF9hIG9uIHQKKyAgIEluZGV4IENvbmQ6 IChhYnMoYSkgPCAxNSkKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdCBXSEVSRSBhYnMoYSkg PiAxMCBBTkQgYWJzKGEpIDwgMTU7CisgIGEgIHwgYiAgCistLS0tLSstLS0tCisgLTEwIHwgMTAK KyAtMTEgfCAtNAorIC0xMSB8IDExCisgLTEyIHwgMTIKKyAtMTMgfCAxMworIC0xNCB8IDE0Ciso NiByb3dzKQorCistLSAoLTExLCAtNCkgLT4gKDExLCAtNCkKK1VQREFURSB0IFNFVCBhID0gMTEg V0hFUkUgYiA9IC00OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygzKTsKKyB0YWJs ZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50 YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0 ICAgICAgICAgIHwgICAgICAgICAgICAgNCB8ICAgICAgICAgICAzIHwgICAgICAgICAgICAgICAg IDc1LjAwIHwgdAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00g dCBXSEVSRSBhYnMoYSkgPiAxMCBBTkQgYWJzKGEpIDwgMTU7CisgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2Nh biB1c2luZyB0X2lkeF9hIG9uIHQKKyAgIEluZGV4IENvbmQ6IChhYnMoYSkgPCAxNSkKKygyIHJv d3MpCisKK1NFTEVDVCAqIEZST00gdCBXSEVSRSBhYnMoYSkgPiAxMCBBTkQgYWJzKGEpIDwgMTU7 CisgIGEgIHwgYiAgCistLS0tLSstLS0tCisgLTEwIHwgMTAKKyAgMTEgfCAtNAorIC0xMSB8IDEx CisgLTEyIHwgMTIKKyAtMTMgfCAxMworIC0xNCB8IDE0CisoNiByb3dzKQorCistLSAoMTEsIC00 KSAtPiAoLTQsIC00KQorVVBEQVRFIHQgU0VUIGEgPSAtNCBXSEVSRSBiID0gLTQ7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVz IHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVk IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICA1IHwgICAgICAgICAgIDMgfCAgICAgICAgICAgICAgICAgNjAuMDAgfCB0CisoMSByb3cpCisK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0IFdIRVJFIGFicyhhKSA+IDEwIEFO RCBhYnMoYSkgPCAxNTsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHRfaWR4X2Egb24gdAor ICAgSW5kZXggQ29uZDogKGFicyhhKSA8IDE1KQorKDIgcm93cykKKworU0VMRUNUICogRlJPTSB0 IFdIRVJFIGFicyhhKSA+IDEwIEFORCBhYnMoYSkgPCAxNTsKKyAgYSAgfCBiICAKKy0tLS0tKy0t LS0KKyAtMTAgfCAxMAorIC0xMSB8IDExCisgLTEyIHwgMTIKKyAtMTMgfCAxMworIC0xNCB8IDE0 CisoNSByb3dzKQorCistLSBUaGlzIHVwZGF0ZSBvZiBhIGZyb20gNSB0byAtMSBpcyBIT1QgZGVz cGl0ZSB0aGF0IGF0dHJpYnV0ZQorLS0gYmVpbmcgaW5kZXhlZCBiZWNhdXNlIHRoZSBiZWZvcmUg YW5kIGFmdGVyIHZhbHVlcyBmb3IgdGhlCistLSBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSBhcmUg b3V0c2lkZSB0aGUgaW5kZXggZGVmaW5pdGlvbi4KKy0tICg1LCAxKSAtPiAoLTEsIDEpCitVUERB VEUgdCBTRVQgYSA9IC0xIFdIRVJFIGEgPSA1OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcyg0KTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90 X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNiB8ICAgICAgICAgICA0IHwg ICAgICAgICAgICAgICAgIDY2LjY3IHwgdAorKDEgcm93KQorCistLSBUaGlzIHVwZGF0ZSBvZiBh IGZyb20gLTIgdG8gLTEgd2lsbCBiZSBIT1QgYmVjYXVzZSB0aGUgYmVmb3JlL2FmdGVyIHZhbHVl cworLS0gb2YgYSBhcmUgYm90aCBvdXRzaWRlIHRoZSBwcmVkaWNhdGUgb2YgdGhlIHBhcnRpYWwg aW5kZXguCistLSAoLTEsIDEpIC0+ICgtMiwgMSkKK1VQREFURSB0IFNFVCBhID0gLTIgV0hFUkUg YiA9IC0yOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcyg1KTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgIHwgICAgICAgICAgICAgNyB8ICAgICAgICAgICA1IHwgICAgICAgICAgICAgICAgIDcxLjQz IHwgdAorKDEgcm93KQorCistLSBUaGUgaW5kZXhlZCB2YWx1ZSBmb3IgYiBpc24ndCBjaGFuZ2lu ZywgdGhpcyBzaG91bGQgYmUgSE9ULgorLS0gKC0yLCAtMikgLT4gKC0yLCAyKQorVVBEQVRFIHQg U0VUIGIgPSAyIFdIRVJFIGIgPSAtMjsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMo Nik7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRh dGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDggfCAgICAgICAgICAgNiB8ICAgICAg ICAgICAgICAgICA3NS4wMCB8IHQKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgYiBGUk9NIHQgV0hFUkUgYWJzKGIpIDwgMTAgQU5EIGFicyhiKSA+IDA7CisgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgdF9pZHhf YiBvbiB0CisgICBJbmRleCBDb25kOiAoKGFicyhiKSA8IDEwKSBBTkQgKGFicyhiKSA+IDApKQor KDIgcm93cykKKworU0VMRUNUIGIgRlJPTSB0IFdIRVJFIGFicyhiKSA8IDEwIEFORCBhYnMoYikg PiAwOworIGIgIAorLS0tLQorIC0xCisgIDIKKyAtMworIC00CisgIDUKKyg1IHJvd3MpCisKK1NF TEVDVCAqIEZST00gdCB3aGVyZSBhID4gLTEwIEFORCBhIDwgMTA7CisgYSAgfCBiICAKKy0tLS0r LS0tLQorIC0xIHwgLTEKKyAtMyB8IC0zCisgLTEgfCAgNQorIC00IHwgLTQKKyAtMiB8ICAyCiso NSByb3dzKQorCistLSBCZWZvcmUgYW5kIGFmdGVyIHZhbHVlcyBmb3IgYSBhcmUgb3V0c2lkZSB0 aGUgcHJlZGljYXRlIG9mIHRoZSBpbmRleCwKKy0tIGFuZCBiZWNhdXNlIHdlJ3JlIGNoZWNraW5n IHRoaXMgc2hvdWxkIGJlIEhPVC4KKy0tICgtMiwgMSkgLT4gKDUsIDEpCistLSAoLTIsIC0yKSAt PiAoNSwgLTIpCitVUERBVEUgdCBTRVQgYSA9IDUgV0hFUkUgYSA9IC0xOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcyg4KTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhv dF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAxMCB8 ICAgICAgICAgICA4IHwgICAgICAgICAgICAgICAgIDgwLjAwIHwgdAorKDEgcm93KQorCitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVSRSBhYnMoYSkgPiAxMCBBTkQgYWJz KGEpIDwgMTU7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0X2lkeF9hIG9uIHQKKyAgIElu ZGV4IENvbmQ6IChhYnMoYSkgPCAxNSkKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdCBXSEVS RSBhYnMoYSkgPiAxMCBBTkQgYWJzKGEpIDwgMTU7CisgIGEgIHwgYiAgCistLS0tLSstLS0tCisg LTEwIHwgMTAKKyAtMTEgfCAxMQorIC0xMiB8IDEyCisgLTEzIHwgMTMKKyAtMTQgfCAxNAorKDUg cm93cykKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CitTRVQgU0VTU0lPTiBlbmFibGVfc2Vxc2Nh biA9IE9OOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPTjsKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIEpTT05CIHdpdGggdHdvIGluZGV4ZXMgZWFjaCBvbiBzZXBhcmF0ZSBmaWVsZHMsIG9uZSBw YXJ0aWFsCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChkb2NzIEpTT05CKSBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9k b2NzX2lkeCBPTiB0KChkb2NzLT4nYScpKSBXSEVSRSAoZG9jcy0+J2InKTo6aW50ZWdlciA9IDE7 CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoJ3siYSI6IDEsICJiIjogMX0nKTsKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUICogRlJPTSB0OworICBRVUVSWSBQTEFOICAgCistLS0tLS0tLS0tLS0t LS0KKyBTZXEgU2NhbiBvbiB0CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdDsKKyAgICAgICBk b2NzICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgeyJhIjogMSwgImIiOiAxfQorKDEgcm93 KQorCitTRVQgU0VTU0lPTiBlbmFibGVfc2Vxc2NhbiA9IE9GRjsKK1NFVCBTRVNTSU9OIGVuYWJs ZV9iaXRtYXBzY2FuID0gT0ZGOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHQg V0hFUkUgKGRvY3MtPidiJyk6OmludGVnZXIgPSAxOworICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNj YW4gdXNpbmcgdF9kb2NzX2lkeCBvbiB0CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdCBXSEVS RSAoZG9jcy0+J2InKTo6aW50ZWdlciA9IDE7CisgICAgICAgZG9jcyAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLQorIHsiYSI6IDEsICJiIjogMX0KKygxIHJvdykKKworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91 cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMCB8ICAg ICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAgICAwIHwgdAorKDEgcm93KQorCitVUERBVEUg dCBTRVQgZG9jcz0neyJhIjogMSwgImIiOiAwfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAg fCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdCBX SEVSRSAoZG9jcy0+J2InKTo6aW50ZWdlciA9IDE7CisgZG9jcyAKKy0tLS0tLQorKDAgcm93cykK KworU0VUIFNFU1NJT04gZW5hYmxlX3NlcXNjYW4gPSBPTjsKK1NFVCBTRVNTSU9OIGVuYWJsZV9i aXRtYXBzY2FuID0gT047CitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRl c3RzIGZvciBtdWx0aS1jb2x1bW4gaW5kZXhlcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQo aWQgSU5ULCBkb2NzIEpTT05CKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxm YWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9kb2NzX2lkeCBPTiB0KGlkLCAoZG9jcy0+J2En KSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3siYSI6IDEsICJiIjogMX0nKTsKK1NFVCBT RVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT0ZGOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNj YW4gPSBPRkY7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVSRSBpZCA+ IDAgQU5EIChkb2NzLT4nYScpOjppbnRlZ2VyID4gMDsKKyAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0X2RvY3NfaWR4IG9uIHQKKyAg IEluZGV4IENvbmQ6IChpZCA+IDApCisgICBGaWx0ZXI6ICgoKGRvY3MgLT4gJ2EnOjp0ZXh0KSk6 OmludGVnZXIgPiAwKQorKDMgcm93cykKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIGlkID4gMCBB TkQgKGRvY3MtPidhJyk6OmludGVnZXIgPiAwOworIGlkIHwgICAgICAgZG9jcyAgICAgICAKKy0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgfCB7ImEiOiAxLCAiYiI6IDF9CisoMSByb3cpCisK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFs X3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNf ZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAg ICAgICAgICAgIDAgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgICAgMCB8IHQKKygx IHJvdykKKworLS0gQ2hhbmdpbmcgdGhlIGlkIGF0dHJpYnV0ZSB3aGljaCBpcyBhbiBpbmRleGVk IGF0dHJpYnV0ZSBzaG91bGQKKy0tIHByZXZlbnQgSE9UIHVwZGF0ZXMuCitVUERBVEUgdCBTRVQg aWQgPSAyOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAw IHwgdAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgaWQgPiAwIEFORCAoZG9jcy0+ J2EnKTo6aW50ZWdlciA+IDA7CisgaWQgfCAgICAgICBkb2NzICAgICAgIAorLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0KKyAgMiB8IHsiYSI6IDEsICJiIjogMX0KKygxIHJvdykKKworLS0gQ2hhbmdp bmcgdGhlIGRvY3MtPidhJyBmaWVsZCBpbiB0aGUgaW5kZXhlZCBhdHRyaWJ1dGUgJ2RvY3MnCist LSBzaG91bGQgcHJldmVudCBIT1QgdXBkYXRlcy4KK1VQREFURSB0IFNFVCBkb2NzPSd7ImEiOiAt MiwgImIiOiAxfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworIHRhYmxl X25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRh Z2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAg IDAuMDAgfCB0CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdCBXSEVSRSBpZCA+IDAgQU5EIChk b2NzLT4nYScpOjppbnRlZ2VyIDwgMDsKKyBpZCB8ICAgICAgIGRvY3MgICAgICAgIAorLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tCisgIDIgfCB7ImEiOiAtMiwgImIiOiAxfQorKDEgcm93KQorCist LSBMZWF2aW5nIHRoZSBkb2NzLT4nYScgYXR0cmlidXRlIHVuY2hhbmdlZCBtZWFucyB0aGF0IHRo ZSBleHByZXNzaW9uCistLSBpcyB1bmNoYW5nZWQgYW5kIGJlY2F1c2UgdGhlICdpZCcgYXR0cmli dXRlIGlzbid0IGluIHRoZSBtb2RpZmllZAorLS0gc2V0IHRoZSBpbmRleGVkIHR1cGxlIGlzIHVu Y2hhbmdlZCwgdGhpcyBjYW4gZ28gSE9ULgorVVBEQVRFIHQgU0VUIGRvY3M9J3siYSI6IC0yLCAi YiI6IDJ9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFt ZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8 IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAg ICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4z MyB8IHQKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIGlkID4gMCBBTkQgKGRvY3Mt PidhJyk6OmludGVnZXIgPCAwOworIGlkIHwgICAgICAgZG9jcyAgICAgICAgCistLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgMiB8IHsiYSI6IC0yLCAiYiI6IDJ9CisoMSByb3cpCisKKy0tIEhl cmUgd2UgY2hhbmdlIHRoZSAnaWQnIGF0dHJpYnV0ZSBhbmQgdGhlICdkb2NzJyBhdHRyaWJ1dGUg c2V0dGluZworLS0gdGhlIGV4cHJlc3Npb24gZG9jcy0+J2EnIHRvIGEgbmV3IHZhbHVlLCB0aGlz IGNhbm5vdCBiZSBhIEhPVCB1cGRhdGUuCitVUERBVEUgdCBTRVQgaWQgPSAzLCBkb2NzPSd7ImEi OiAzLCAiYiI6IDN9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFi bGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2Vu dGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAg ICAyNS4wMCB8IHQKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIGlkID4gMCBBTkQg KGRvY3MtPidhJyk6OmludGVnZXIgPiAwOworIGlkIHwgICAgICAgZG9jcyAgICAgICAKKy0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tCisgIDMgfCB7ImEiOiAzLCAiYiI6IDN9CisoMSByb3cpCisKK1NF VCBTRVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT047CitTRVQgU0VTU0lPTiBlbmFibGVfYml0bWFw c2NhbiA9IE9OOworRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBSZWxhdGlv biB3aXRoIHVuaXF1ZSBjb25zdHJhaW50LCBwYXJ0aWFsIGluZGV4CistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVB VEUgVEFCTEUgdXNlcnMgKAorICAgIHVzZXJfaWQgc2VyaWFsIHByaW1hcnkga2V5LAorICAgIG5h bWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgIGVtYWlsIFZBUkNIQVIoMjU1KSBOT1QgTlVM TCwKKyAgICBFWENMVURFIFVTSU5HIGJ0cmVlIChsb3dlcihlbWFpbCkgV0lUSCA9KQorKTsKKy0t IEFkZCBzb21lIGRhdGEgdG8gdGhlIHRhYmxlIGFuZCB0aGVuIHVwZGF0ZSBpdCBpbiB3YXlzIHRo YXQgc2hvdWxkIGFuZCBzaG91bGQKKy0tIG5vdCBiZSBIT1QgdXBkYXRlcy4KK0lOU0VSVCBJTlRP IHVzZXJzIChuYW1lLCBlbWFpbCkgVkFMVUVTCisoJ3VzZXIxJywgJ3VzZXIxQGV4YW1wbGUuY29t JyksCisoJ3VzZXIyJywgJ3VzZXIyQGV4YW1wbGUuY29tJyksCisoJ3Rha2VuJywgJ3Rha2VuQEVY QU1QTEUuY29tJyksCisoJ3lvdScsICd5b3VAZG9tYWluLmNvbScpLAorKCd0YWtlbicsICd0YWtl bkBkb21haW4uY29tJyk7CistLSBTaG91bGQgZmFpbCBiZWNhdXNlIG9mIHRoZSB1bmlxdWUgY29u c3RyYWludCBvbiB0aGUgZW1haWwgY29sdW1uLgorVVBEQVRFIHVzZXJzIFNFVCBlbWFpbCA9ICd1 c2VyMUBleGFtcGxlLmNvbScgV0hFUkUgZW1haWwgPSAndXNlcjJAZXhhbXBsZS5jb20nOworRVJS T1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVzaW9uIGNvbnN0cmFpbnQg InVzZXJzX2xvd2VyX2V4Y2wiCitERVRBSUw6ICBLZXkgKGxvd2VyKGVtYWlsOjp0ZXh0KSk9KHVz ZXIxQGV4YW1wbGUuY29tKSBjb25mbGljdHMgd2l0aCBleGlzdGluZyBrZXkgKGxvd2VyKGVtYWls Ojp0ZXh0KSk9KHVzZXIxQGV4YW1wbGUuY29tKS4KK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMCwgJ3VzZXJzJyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBk YXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdXNlcnMgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAg ICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKworLS0gU2hvdWxk IHN1Y2NlZWQgYmVjYXVzZSB0aGUgZW1haWwgY29sdW1uIGlzIG5vdCBiZWluZyB1cGRhdGVkIGFu ZCBzaG91bGQgZ28gSE9ULgorVVBEQVRFIHVzZXJzIFNFVCBuYW1lID0gJ2ZvbycgV0hFUkUgZW1h aWwgPSAndXNlcjFAZXhhbXBsZS5jb20nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygxLCAndXNlcnMnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVz IHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0KKyB1c2VycyAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAg ICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCistLSBDcmVhdGUgYSBw YXJ0aWFsIGluZGV4IG9uIHRoZSBlbWFpbCBjb2x1bW4sIHVwZGF0ZXMKK0NSRUFURSBJTkRFWCBp ZHhfdXNlcnNfZW1haWxfbm9fZXhhbXBsZSBPTiB1c2VycyAobG93ZXIoZW1haWwpKSBXSEVSRSBs b3dlcihlbWFpbCkgTElLRSAnJUBleGFtcGxlLmNvbSUnOworLS0gQW4gdXBkYXRlIHRoYXQgY2hh bmdlcyB0aGUgZW1haWwgY29sdW1uIGJ1dCBub3QgdGhlIGluZGV4ZWQgcG9ydGlvbiBvZiBpdCBh bmQgZmFsbHMgb3V0c2lkZSB0aGUgY29uc3RyYWludC4KKy0tIFNob3VsZG4ndCBiZSBhIEhPVCB1 cGRhdGUgYmVjYXVzZSBvZiB0aGUgZXhjbHVzaW9uIGNvbnN0cmFpbnQuCitVUERBVEUgdXNlcnMg U0VUIGVtYWlsID0gJ3lvdSsyQGRvbWFpbi5jb20nIFdIRVJFIG5hbWUgPSAneW91JzsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3VzZXJzJyk7CisgdGFibGVfbmFtZSB8IHRv dGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNo ZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdXNlcnMgICAgICB8 ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQK KygxIHJvdykKKworLS0gQW4gdXBkYXRlIHRoYXQgY2hhbmdlcyB0aGUgZW1haWwgY29sdW1uIGJ1 dCBub3QgdGhlIGluZGV4ZWQgcG9ydGlvbiBvZiBpdCBhbmQgZmFsbHMgd2l0aGluIHRoZSBjb25z dHJhaW50LgorLS0gQWdhaW4sIHNob3VsZCBmYWlsIGNvbnN0cmFpbnQgYW5kIGZhaWwgdG8gYmUg YSBIT1QgdXBkYXRlLgorVVBEQVRFIHVzZXJzIFNFVCBlbWFpbCA9ICd0YWtlbkBkb21haW4uY29t JyBXSEVSRSBuYW1lID0gJ3lvdSc7CitFUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9s YXRlcyBleGNsdXNpb24gY29uc3RyYWludCAidXNlcnNfbG93ZXJfZXhjbCIKK0RFVEFJTDogIEtl eSAobG93ZXIoZW1haWw6OnRleHQpKT0odGFrZW5AZG9tYWluLmNvbSkgY29uZmxpY3RzIHdpdGgg ZXhpc3Rpbmcga2V5IChsb3dlcihlbWFpbDo6dGV4dCkpPSh0YWtlbkBkb21haW4uY29tKS4KK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3VzZXJzJyk7CisgdGFibGVfbmFtZSB8 IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1h dGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdXNlcnMgICAg ICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAyNS4wMCB8 IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB1c2VycyBDQVNDQURFOworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0g Q29uc3RyYWludHMgc3BvaWxpbmcgSE9UIHVwZGF0ZXMsIHRoaXMgdGltZSB3aXRoIGEgcmFuZ2Uu CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgZXZlbnRzICgKKyAgICBpZCBzZXJpYWwgcHJpbWFy eSBrZXksCisgICAgbmFtZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCisgICAgZXZlbnRfdGltZSB0 c3R6cmFuZ2UsCisgICAgY29uc3RyYWludCBub19zY3JlZW5pbmdfdGltZV9vdmVybGFwIGV4Y2x1 ZGUgdXNpbmcgZ2lzdCAoCisgICAgICAgIGV2ZW50X3RpbWUgV0lUSCAmJgorICAgICkKKyk7Cist LSBBZGQgdHdvIG5vbi1vdmVybGFwcGluZyBldmVudHMuCitJTlNFUlQgSU5UTyBldmVudHMgKGlk LCBldmVudF90aW1lLCBuYW1lKQorVkFMVUVTCisgICAgKDEsICdbIjIwMjMtMDEtMDEgMTk6MDA6 MDAiLCAiMjAyMy0wMS0wMSAyMDo0NTowMCJdJywgJ2V2ZW50MScpLAorICAgICgyLCAnWyIyMDIz LTAxLTAxIDIxOjAwOjAwIiwgIjIwMjMtMDEtMDEgMjE6NDU6MDAiXScsICdldmVudDInKTsKKy0t IFVwZGF0ZSB0aGUgZmlyc3QgZXZlbnQgdG8gb3ZlcmxhcCB3aXRoIHRoZSBzZWNvbmQsIHNob3Vs ZCBmYWlsIHRoZSBjb25zdHJhaW50IGFuZCBub3QgYmUgSE9ULgorVVBEQVRFIGV2ZW50cyBTRVQg ZXZlbnRfdGltZSA9ICdbIjIwMjMtMDEtMDEgMjA6MDA6MDAiLCAiMjAyMy0wMS0wMSAyMTo0NTow MCJdJyBXSEVSRSBpZCA9IDE7CitFUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRl cyBleGNsdXNpb24gY29uc3RyYWludCAibm9fc2NyZWVuaW5nX3RpbWVfb3ZlcmxhcCIKK0RFVEFJ TDogIEtleSAoZXZlbnRfdGltZSk9KFsiU3VuIEphbiAwMSAyMDowMDowMCAyMDIzIFBTVCIsIlN1 biBKYW4gMDEgMjE6NDU6MDAgMjAyMyBQU1QiXSkgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcga2V5 IChldmVudF90aW1lKT0oWyJTdW4gSmFuIDAxIDIxOjAwOjAwIDIwMjMgUFNUIiwiU3VuIEphbiAw MSAyMTo0NTowMCAyMDIzIFBTVCJdKS4KK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMo MCwgJ2V2ZW50cycpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMg fCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLQorIGV2ZW50cyAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAg IDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSB0aGUg Zmlyc3QgZXZlbnQgdG8gbm90IG92ZXJsYXAgd2l0aCB0aGUgc2Vjb25kLCBhZ2FpbiBub3QgSE9U IGR1ZSB0byB0aGUgY29uc3RyYWludC4KK1VQREFURSBldmVudHMgU0VUIGV2ZW50X3RpbWUgPSAn WyIyMDIzLTAxLTAxIDIyOjAwOjAwIiwgIjIwMjMtMDEtMDEgMjI6NDU6MDAiXScgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAnZXZlbnRzJyk7CisgdGFi bGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2Vu dGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisg ZXZlbnRzICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAg ICAgMC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIHRoZSBmaXJzdCBldmVudCB0byBub3Qg b3ZlcmxhcCB3aXRoIHRoZSBzZWNvbmQsIHRoaXMgdGltZSB3ZSdyZSBIT1QgYmVjYXVzZSB3ZSBk b24ndCBvdmVybGFwIHdpdGggdGhlIGNvbnN0cmFpbnQuCitVUERBVEUgZXZlbnRzIFNFVCBuYW1l ID0gJ25ldyBuYW1lIGhlcmUnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMSwgJ2V2ZW50cycpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90 X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIGV2ZW50cyAgICAgfCAgICAgICAgICAgICAzIHwg ICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisKK0RST1Ag VEFCTEUgZXZlbnRzIENBU0NBREU7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBFbnN1cmUgdGhhdCBvbmx5IHRo ZSBtb2RpZmllZCBzdW1tYXJpemluZyBpbmRleGVzIGFyZSB1cGRhdGVkLgorLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor Q1JFQVRFIFRBQkxFIGV4IChpZCBTRVJJQUwgcHJpbWFyeSBrZXksIGF0dDEgSlNPTkIsIGF0dDIg dGV4dCwgYXR0MyB0ZXh0LCBhdHQ0IHRleHQpIFdJVEggKGZpbGxmYWN0b3IgPSA2MCk7CitDUkVB VEUgSU5ERVggZXhfZXhwcjFfaWR4IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQxLT4nZGF0YScpKTsK K0NSRUFURSBJTkRFWCBleF9zdW1yMV9pZHggT04gZXggVVNJTkcgQlJJTihhdHQyKTsKK0NSRUFU RSBJTkRFWCBleF9leHByMl9pZHggT04gZXggVVNJTkcgYnRyZWUoKGF0dDEtPidhJykpOworQ1JF QVRFIElOREVYIGV4X2V4cHIzX2lkeCBPTiBleCBVU0lORyBidHJlZSgoYXR0MS0+J2InKSk7CitD UkVBVEUgSU5ERVggZXhfZXhwcjRfaWR4IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQxLT4nYycpKTsK K0NSRUFURSBJTkRFWCBleF9zdW1yMl9pZHggT04gZXggVVNJTkcgQlJJTihhdHQzKTsKK0NSRUFU RSBJTkRFWCBleF9zdW1yM19pZHggT04gZXggVVNJTkcgQlJJTihhdHQ0KTsKK0NSRUFURSBJTkRF WCBleF9leHByNV9pZHggT04gZXggVVNJTkcgYnRyZWUoKGF0dDEtPidkJykpOworSU5TRVJUIElO VE8gZXggKGF0dDEsIGF0dDIpIFZBTFVFUyAoJ3siZGF0YSI6IFtdfSc6Ompzb24sICdub3RoaW5n IHNwZWNpYWwnKTsKK1NFTEVDVCAqIEZST00gZXg7CisgaWQgfCAgICAgYXR0MSAgICAgfCAgICAg IGF0dDIgICAgICAgfCBhdHQzIHwgYXR0NCAKKy0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tKy0tLS0tLQorICAxIHwgeyJkYXRhIjogW119IHwgbm90aGluZyBzcGVj aWFsIHwgICAgICB8IAorKDEgcm93KQorCistLSBVcGRhdGUgYXR0MiBhbmQgYXR0NCBib3RoIGFy ZSBCUklOL3N1bW1hcml6aW5nIGluZGV4ZXMsIHRoaXMgc2hvdWxkIGJlIGEgSE9UIHVwZGF0ZSBh bmQKKy0tIG9ubHkgdXBkYXRlIHR3byBvZiB0aGUgdGhyZWUgc3VtbWFyaXppbmcgaW5kZXhlcy4K K1VQREFURSBleCBTRVQgYXR0MiA9ICdzcGVjaWFsIGluZGVlZCcsIGF0dDQgPSAnd2hhdGV2ZXIn OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAnZXgnKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyBleCAgICAg ICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAw IHwgdAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGV4OworIGlkIHwgICAgIGF0dDEgICAgIHwg ICAgICBhdHQyICAgICAgfCBhdHQzIHwgICBhdHQ0ICAgCistLS0tKy0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0KKyAgMSB8IHsiZGF0YSI6IFtdfSB8IHNw ZWNpYWwgaW5kZWVkIHwgICAgICB8IHdoYXRldmVyCisoMSByb3cpCisKKy0tIFVwZGF0ZSBhdHQx IGFuZCBhdHQyLCBvbmx5IG9uZSBpcyBCUklOL3N1bW1hcml6aW5nLCB0aGlzIHNob3VsZCBOT1Qg YmUgYSBIT1QgdXBkYXRlLgorVVBEQVRFIGV4IFNFVCBhdHQxID0gYXR0MSB8fCAneyJkYXRhIjog Imhvd2R5In0nLCBhdHQyID0gJ3NwZWNpYWwsIHNvIHNwZWNpYWwnOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygxLCAnZXgnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAK Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyBleCAgICAgICAgIHwgICAgICAgICAgICAg MiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCitT RUxFQ1QgKiBGUk9NIGV4OworIGlkIHwgICAgICAgYXR0MSAgICAgICAgfCAgICAgICAgYXR0MiAg ICAgICAgIHwgYXR0MyB8ICAgYXR0NCAgIAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLQorICAxIHwgeyJkYXRhIjogImhvd2R5 In0gfCBzcGVjaWFsLCBzbyBzcGVjaWFsIHwgICAgICB8IHdoYXRldmVyCisoMSByb3cpCisKKy0t IFVwZGF0ZSBhdHQyLCBhdHQzLCBhbmQgYXR0NCBhbGwgYXJlIEJSSU4vc3VtbWFyaXppbmcgaW5k ZXhlcywgdGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlCistLSBhbmQgeWV0IHN0aWxsIHVwZGF0 ZSBhbGwgdGhyZWUgc3VtbWFyaXppbmcgaW5kZXhlcy4KK1VQREFURSBleCBTRVQgYXR0MiA9ICdh JywgYXR0MyA9ICdiJywgYXR0NCA9ICdjJzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMiwgJ2V4Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8 IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tCisgZXggICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAg MiB8ICAgICAgICAgICAgICAgICA2Ni42NyB8IHQKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBl eDsKKyBpZCB8ICAgICAgIGF0dDEgICAgICAgIHwgYXR0MiB8IGF0dDMgfCBhdHQ0IAorLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tCisgIDEgfCB7ImRhdGEiOiAi aG93ZHkifSB8IGEgICAgfCBiICAgIHwgYworKDEgcm93KQorCistLSBVcGRhdGUgYXR0MSwgYXR0 MiwgYW5kIGF0dDMgYWxsIG1vZGlmaWVkIHZhbHVlcyBhcmUgQlJJTi9zdW1tYXJpemluZyBpbmRl eGVzLCB0aGlzIHNob3VsZCBiZSBhIEhPVCB1cGRhdGUKKy0tIGFuZCB5ZXQgc3RpbGwgdXBkYXRl IGFsbCB0aHJlZSBzdW1tYXJpemluZyBpbmRleGVzLgorVVBEQVRFIGV4IFNFVCBhdHQxID0gJ3si ZGF0YSI6ICJob3dkeSJ9JywgYXR0MiA9ICdkJywgYXR0MyA9ICdlJzsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMywgJ2V4Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgZXggICAgICAgICB8ICAgICAgICAgICAg IDQgfCAgICAgICAgICAgMyB8ICAgICAgICAgICAgICAgICA3NS4wMCB8IHQKKygxIHJvdykKKwor U0VMRUNUICogRlJPTSBleDsKKyBpZCB8ICAgICAgIGF0dDEgICAgICAgIHwgYXR0MiB8IGF0dDMg fCBhdHQ0IAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tCisg IDEgfCB7ImRhdGEiOiAiaG93ZHkifSB8IGQgICAgfCBlICAgIHwgYworKDEgcm93KQorCitEUk9Q IFRBQkxFIGV4IENBU0NBREU7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBEb24ndCB1cGRhdGUgdW5tb2RpZmll ZCBzdW1tYXJpemluZyBpbmRleGVzIGJ1dCBkbyBhbGxvdyBIT1QKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFU RSBUQUJMRSBleCAoYXR0MSBKU09OQiwgYXR0MiB0ZXh0KSBXSVRIIChmaWxsZmFjdG9yID0gNjAp OworQ1JFQVRFIElOREVYIGV4X2V4cHIxX2lkeCBPTiBleCBVU0lORyBidHJlZSgoYXR0MS0+J2Rh dGEnKSk7CitDUkVBVEUgSU5ERVggZXhfc3VtcjFfaWR4IE9OIGV4IFVTSU5HIEJSSU4oYXR0Mik7 CitJTlNFUlQgSU5UTyBleCBWQUxVRVMgKCd7ImRhdGEiOiBbXX0nLCAnbm90aGluZyBzcGVjaWFs Jyk7CistLSBVcGRhdGUgdGhlIHVuaW5kZXhlZCB2YWx1ZSBvZiBhdHQxLCB0aGlzIHNob3VsZCBi ZSBhIEhPVCB1cGRhdGUgYW5kIGFuZCBzaG91bGQKKy0tIHVwZGF0ZSB0aGUgc3VtbWFyaXppbmcg aW5kZXguCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQxIHx8ICd7InN0YXR1cyI6ICJzdGFsZW1h dGUifSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICdleCcpOworIHRhYmxl X25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRh Z2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIGV4 ICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAx MDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSB0aGUgaW5kZXhlZCB2YWx1ZSBvZiBhdHQy LCBhIHN1bW1hcml6ZWQgdmFsdWUsIHRoaXMgaXMgYSBzdW1tYXJpemVkCistLSBvbmx5IHVwZGF0 ZSBhbmQgc2hvdWxkIHVzZSB0aGUgSE9UIHBhdGggd2hpbGUgc3RpbGwgdHJpZ2dlcmluZyBhbiB1 cGRhdGUgdG8KKy0tIHRoZSBzdW1tYXJpemluZyBCUklOIGluZGV4LgorVVBEQVRFIGV4IFNFVCBh dHQyID0gJ3NwZWNpYWwgaW5kZWVkJzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMo MiwgJ2V4Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhv dF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tCisgZXggICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMiB8 ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIHRvIGF0dDEg ZG9lc24ndCBjaGFuZ2UgdGhlIGluZGV4ZWQgdmFsdWUgd2hpbGUgdGhlIHVwZGF0ZSB0byBhdHQy IGRvZXMsCistLSB0aGlzIGFnYWluIGlzIGEgc3VtbWFyaXplZCBvbmx5IHVwZGF0ZSBhbmQgc2hv dWxkIHVzZSB0aGUgSE9UIHBhdGggYXMgd2VsbCBhcworLS0gdHJpZ2dlciBhbiB1cGRhdGUgdG8g dGhlIEJSSU4gaW5kZXguCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQxIHx8ICd7InN0YXR1cyI6 ICJjaGVja21hdGUifScsIGF0dDIgPSAnc3BlY2lhbCwgc28gc3BlY2lhbCc7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDMsICdleCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIGV4ICAgICAgICAgfCAgICAgICAg ICAgICAzIHwgICAgICAgICAgIDMgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cp CisKKy0tIFRoaXMgdXBkYXRlcyBib3RoIGluZGV4ZXMsIHRoZSBleHByZXNzaW9uIGluZGV4IG9u IGF0dDEgYW5kIHRoZSBzdW1tYXJpemluZworLS0gaW5kZXggb24gYXR0Mi4gIFRoaXMgc2hvdWxk IG5vdCBiZSBhIEhPVCB1cGRhdGUgYmVjYXVzZSB0aGVyZSBhcmUgbW9kaWZpZWQKKy0tIGluZGV4 ZXMgYW5kIG9ubHkgc29tZSBhcmUgc3VtbWFyaXplZCwgbm90IGFsbC4gIFRoaXMgc2hvdWxkIGZv cmNlIGFsbAorLS0gaW5kZXhlcyB0byBiZSB1cGRhdGVkLgorVVBEQVRFIGV4IFNFVCBhdHQxID0g YXR0MSB8fCAneyJkYXRhIjogWzEsMiwzXX0nLCBhdHQyID0gJ2RvIHlvdSB3YW50IHRvIHBsYXkg YSBnYW1lPyc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMsICdleCcpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IGV4ICAgICAgICAgfCAgICAgICAgICAgICA0IHwgICAgICAgICAgIDMgfCAgICAgICAgICAgICAg ICAgNzUuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgZXggQ0FTQ0FERTsKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIEVuc3VyZSBjdXN0b20gdHlwZSBlcXVhbGl0eSBvcGVyYXRvcnMgYXJlIHVzZWQKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KK0NSRUFURSBUWVBFIG15X2N1c3RvbV90eXBlIEFTICh2YWwgaW50KTsKKy0tIENv bXBhcmlzb24gZnVuY3Rpb25zIChyZXR1cm5zIGJvb2xlYW4pCitDUkVBVEUgRlVOQ1RJT04gbXlf Y3VzdG9tX2x0KGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMgYm9v bGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgPCBiLnZhbDsKK0VORDsKKyQkIExB TkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0 b21fbGUoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFu IEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA8PSBiLnZhbDsKK0VORDsKKyQkIExBTkdV QUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21f ZXEoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFuIEFT ICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA9IGIudmFsOworRU5EOworJCQgTEFOR1VBR0Ug cGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworQ1JFQVRFIEZVTkNUSU9OIG15X2N1c3RvbV9nZShh IG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJvb2xlYW4gQVMgJCQK K0JFR0lOCisgICAgUkVUVVJOIGEudmFsID49IGIudmFsOworRU5EOworJCQgTEFOR1VBR0UgcGxw Z3NxbCBJTU1VVEFCTEUgU1RSSUNUOworQ1JFQVRFIEZVTkNUSU9OIG15X2N1c3RvbV9ndChhIG15 X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJvb2xlYW4gQVMgJCQKK0JF R0lOCisgICAgUkVUVVJOIGEudmFsID4gYi52YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3Fs IElNTVVUQUJMRSBTVFJJQ1Q7CitDUkVBVEUgRlVOQ1RJT04gbXlfY3VzdG9tX25lKGEgbXlfY3Vz dG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMgYm9vbGVhbiBBUyAkJAorQkVHSU4K KyAgICBSRVRVUk4gYS52YWwgIT0gYi52YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElN TVVUQUJMRSBTVFJJQ1Q7CistLSBDb21wYXJpc29uIGZ1bmN0aW9uIChyZXR1cm5zIC0xLCAwLCAx KQorQ1JFQVRFIEZVTkNUSU9OIG15X2N1c3RvbV9jbXAoYSBteV9jdXN0b21fdHlwZSwgYiBteV9j dXN0b21fdHlwZSkgUkVUVVJOUyBpbnQgQVMgJCQKK0JFR0lOCisgICAgSUYgYS52YWwgPCBiLnZh bCBUSEVOCisgICAgICAgIFJFVFVSTiAtMTsKKyAgICBFTFNJRiBhLnZhbCA+IGIudmFsIFRIRU4K KyAgICAgICAgUkVUVVJOIDE7CisgICAgRUxTRQorICAgICAgICBSRVRVUk4gMDsKKyAgICBFTkQg SUY7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CistLSBDcmVh dGUgdGhlIG9wZXJhdG9ycworQ1JFQVRFIE9QRVJBVE9SIDwgKAorICAgIExFRlRBUkcgPSBteV9j dXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVS RSA9IG15X2N1c3RvbV9sdCwKKyAgICBDT01NVVRBVE9SID0gPiwKKyAgICBORUdBVE9SID0gPj0K Kyk7CitDUkVBVEUgT1BFUkFUT1IgPD0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwK KyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3Rv bV9sZSwKKyAgICBDT01NVVRBVE9SID0gPj0sCisgICAgTkVHQVRPUiA9ID4KKyk7CitDUkVBVEUg T1BFUkFUT1IgPSAoCisgICAgTEVGVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJH ID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX2VxLAorICAgIENP TU1VVEFUT1IgPSA9LAorICAgIE5FR0FUT1IgPSA8PgorKTsKK0NSRUFURSBPUEVSQVRPUiA+PSAo CisgICAgTEVGVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9t X3R5cGUsCisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX2dlLAorICAgIENPTU1VVEFUT1IgPSA8 PSwKKyAgICBORUdBVE9SID0gPAorKTsKK0NSRUFURSBPUEVSQVRPUiA+ICgKKyAgICBMRUZUQVJH ID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBQ Uk9DRURVUkUgPSBteV9jdXN0b21fZ3QsCisgICAgQ09NTVVUQVRPUiA9IDwsCisgICAgTkVHQVRP UiA9IDw9CispOworQ1JFQVRFIE9QRVJBVE9SIDw+ICgKKyAgICBMRUZUQVJHID0gbXlfY3VzdG9t X3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBQUk9DRURVUkUgPSBt eV9jdXN0b21fbmUsCisgICAgQ09NTVVUQVRPUiA9IDw+LAorICAgIE5FR0FUT1IgPSA9CispOwor LS0gQ3JlYXRlIHRoZSBvcGVyYXRvciBjbGFzcyAoaW5jbHVkaW5nIHRoZSBzdXBwb3J0IGZ1bmN0 aW9uKQorQ1JFQVRFIE9QRVJBVE9SIENMQVNTIG15X2N1c3RvbV9vcHMKKyAgICBERUZBVUxUIEZP UiBUWVBFIG15X2N1c3RvbV90eXBlIFVTSU5HIGJ0cmVlIEFTCisgICAgT1BFUkFUT1IgMSA8LAor ICAgIE9QRVJBVE9SIDIgPD0sCisgICAgT1BFUkFUT1IgMyA9LAorICAgIE9QRVJBVE9SIDQgPj0s CisgICAgT1BFUkFUT1IgNSA+LAorICAgIEZVTkNUSU9OIDEgbXlfY3VzdG9tX2NtcChteV9jdXN0 b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworLS0gQ3JlYXRlIHRoZSB0YWJsZQorQ1JFQVRFIFRB QkxFIG15X3RhYmxlICgKKyAgICBpZCBpbnQsCisgICAgY3VzdG9tX3ZhbCBteV9jdXN0b21fdHlw ZQorKTsKKy0tIEluc2VydCBzb21lIGRhdGEKK0lOU0VSVCBJTlRPIG15X3RhYmxlIChpZCwgY3Vz dG9tX3ZhbCkgVkFMVUVTCisoMSwgUk9XKDMpOjpteV9jdXN0b21fdHlwZSksCisoMiwgUk9XKDEp OjpteV9jdXN0b21fdHlwZSksCisoMywgUk9XKDQpOjpteV9jdXN0b21fdHlwZSksCisoNCwgUk9X KDIpOjpteV9jdXN0b21fdHlwZSk7CistLSBDcmVhdGUgYSBmdW5jdGlvbiB0byB1c2Ugd2hlbiBp bmRleGluZworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYWJzX3ZhbCh2YWwgbXlfY3VzdG9t X3R5cGUpIFJFVFVSTlMgaW50IEFTICQkCitCRUdJTgorICBSRVRVUk4gYWJzKHZhbC52YWwpOwor RU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworLS0gQ3JlYXRlIHRo ZSBpbmRleAorQ1JFQVRFIElOREVYIGlkeF9jdXN0b21fdmFsX2FicyBPTiBteV90YWJsZSAoYWJz X3ZhbChjdXN0b21fdmFsKSk7CistLSBVcGRhdGUgMQorVVBEQVRFIG15X3RhYmxlIFNFVCBjdXN0 b21fdmFsID0gUk9XKDUpOjpteV9jdXN0b21fdHlwZSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICdteV90YWJsZScpOworIHRhYmxlX25hbWUgfCB0b3Rh bF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVz X2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIG15X3RhYmxlICAgfCAg ICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0Ciso MSByb3cpCisKKy0tIFVwZGF0ZSAyCitVUERBVEUgbXlfdGFibGUgU0VUIGN1c3RvbV92YWwgPSBS T1coMCk6Om15X2N1c3RvbV90eXBlIFdIRVJFIGN1c3RvbV92YWwgPCBST1coMyk6Om15X2N1c3Rv bV90eXBlOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAnbXlfdGFibGUnKTsK KyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9w ZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0KKyBteV90YWJsZSAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAwIHwgICAgICAgICAg ICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgMworVVBEQVRFIG15X3RhYmxl IFNFVCBjdXN0b21fdmFsID0gUk9XKDYpOjpteV9jdXN0b21fdHlwZSBXSEVSRSBpZCA9IDM7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICdteV90YWJsZScpOworIHRhYmxlX25h bWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2Ug fCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIG15X3Rh YmxlICAgfCAgICAgICAgICAgICA0IHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAu MDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSA0CitVUERBVEUgbXlfdGFibGUgU0VUIGlkID0g NSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICdteV90 YWJsZScpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3Rf dXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLQorIG15X3RhYmxlICAgfCAgICAgICAgICAgICA1IHwgICAgICAgICAgIDEgfCAg ICAgICAgICAgICAgICAgMjAuMDAgfCB0CisoMSByb3cpCisKKy0tIFF1ZXJ5IHVzaW5nIHRoZSBp bmRleAorU0VMRUNUICogRlJPTSBteV90YWJsZSBXSEVSRSBhYnNfdmFsKGN1c3RvbV92YWwpID0g NjsKKyBpZCB8IGN1c3RvbV92YWwgCistLS0tKy0tLS0tLS0tLS0tLQorICAzIHwgKDYpCisoMSBy b3cpCisKKy0tIENsZWFuIHVwIHRlc3QgY2FzZQorRFJPUCBUQUJMRSBteV90YWJsZSBDQVNDQURF OworRFJPUCBPUEVSQVRPUiBDTEFTUyBteV9jdXN0b21fb3BzIFVTSU5HIGJ0cmVlIENBU0NBREU7 CitEUk9QIE9QRVJBVE9SIDwgKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9Q IE9QRVJBVE9SIDw9IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBPUEVS QVRPUiA9IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBPUEVSQVRPUiA+ PSAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgT1BFUkFUT1IgPiAobXlf Y3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgT1BFUkFUT1IgPD4gKG15X2N1c3Rv bV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1c3RvbV9sdChteV9j dXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBteV9jdXN0b21fbGUo bXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJT04gbXlfY3VzdG9t X2VxKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1 c3RvbV9nZShteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBt eV9jdXN0b21fZ3QobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJ T04gbXlfY3VzdG9tX25lKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZV TkNUSU9OIG15X2N1c3RvbV9jbXAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RS T1AgRlVOQ1RJT04gYWJzX3ZhbChteV9jdXN0b21fdHlwZSk7CitEUk9QIFRZUEUgbXlfY3VzdG9t X3R5cGUgQ0FTQ0FERTsKKy0tIENsZWFudXAKK0RST1AgRlVOQ1RJT04gY2hlY2tfaG90X3VwZGF0 ZXMoaW50LCB0ZXh0LCB0ZXh0KTsKK0RST1AgQ09MTEFUSU9OIGNhc2VfaW5zZW5zaXRpdmU7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCBmNTY0ODJmYjlmMS4uOTUyMGQwZDQ2MDEg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTI1LDYgKzEyNSwxMiBAQCB0ZXN0 OiBwbGFuY2FjaGUgbGltaXQgcGxwZ3NxbCBjb3B5MiB0ZW1wIGRvbWFpbiByYW5nZWZ1bmNzIHBy ZXBhcmUgY29udmVyc2lvbiB0cgogIyAtLS0tLS0tLS0tCiB0ZXN0OiBwYXJ0aXRpb25fam9pbiBw YXJ0aXRpb25fcHJ1bmUgcmVsb3B0aW9ucyBoYXNoX3BhcnQgaW5kZXhpbmcgcGFydGl0aW9uX2Fn Z3JlZ2F0ZSBwYXJ0aXRpb25faW5mbyB0dXBsZXNvcnQgZXhwbGFpbiBjb21wcmVzc2lvbiBjb21w cmVzc2lvbl9sejQgbWVtb2l6ZSBzdGF0cyBwcmVkaWNhdGUgbnVtYSBlYWdlcl9hZ2dyZWdhdGUK IAorCisjIC0tLS0tLS0tLS0KKyMgQW5vdGhlciBncm91cCBvZiBwYXJhbGxlbCB0ZXN0cywgdGhl c2UgZm9jdXNlZCBvbiBoZWFwIEhPVCB1cGRhdGVzCisjIC0tLS0tLS0tLS0KK3Rlc3Q6IGhlYXBf aG90X3VwZGF0ZXMKKwogIyBldmVudF90cmlnZ2VyIGRlcGVuZHMgb24gY3JlYXRlX2FtIGFuZCBj YW5ub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoCiAjIGFueSB0ZXN0IHRoYXQgcnVucyBEREwKICMg b2lkam9pbnMgaXMgcmVhZC1vbmx5LCB0aG91Z2gsIGFuZCBzaG91bGQgcnVuIGxhdGUgZm9yIGJl c3QgY292ZXJhZ2UKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hlYXBfaG90X3Vw ZGF0ZXMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhkNTUxMDk4OWRmCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwKQEAg LTAsMCArMSwxMzI1IEBACistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IFN1aXRlIGZvciBIZWFwLW9ubHkg KEhPVCkgVXBkYXRlcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLSBTZXR1cDogQ3JlYXRlIGZ1bmN0aW9uIHRv IG1lYXN1cmUgSE9UIHVwZGF0ZXMKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGNoZWNrX2hv dF91cGRhdGVzKAorICAgIGV4cGVjdGVkIElOVCwKKyAgICBwX3RhYmxlX25hbWUgVEVYVCBERUZB VUxUICd0JywKKyAgICBwX3NjaGVtYV9uYW1lIFRFWFQgREVGQVVMVCBjdXJyZW50X3NjaGVtYSgp CispCitSRVRVUk5TIFRBQkxFICgKKyAgICB0YWJsZV9uYW1lIFRFWFQsCisgICAgdG90YWxfdXBk YXRlcyBCSUdJTlQsCisgICAgaG90X3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91cGRhdGVfcGVy Y2VudGFnZSBOVU1FUklDLAorICAgIG1hdGNoZXNfZXhwZWN0ZWQgQk9PTEVBTgorKQorTEFOR1VB R0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgICB2X3JlbGlkIG9pZDsKKyAgICB2X3F1YWxp ZmllZF9uYW1lIFRFWFQ7CisgICAgdl9ob3RfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl91cGRhdGVz IEJJR0lOVDsKKyAgICB2X3hhY3RfaG90X3VwZGF0ZXMgQklHSU5UOworICAgIHZfeGFjdF91cGRh dGVzIEJJR0lOVDsKK0JFR0lOCisgICAgLS0gRm9yY2Ugc3RhdGlzdGljcyB1cGRhdGUKKyAgICBQ RVJGT1JNIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgpOworCisgICAgLS0gR2V0IHRhYmxlIE9J RAorICAgIHZfcXVhbGlmaWVkX25hbWUgOj0gcXVvdGVfaWRlbnQocF9zY2hlbWFfbmFtZSkgfHwg Jy4nIHx8IHF1b3RlX2lkZW50KHBfdGFibGVfbmFtZSk7CisgICAgdl9yZWxpZCA6PSB2X3F1YWxp ZmllZF9uYW1lOjpyZWdjbGFzczsKKworICAgIElGIHZfcmVsaWQgSVMgTlVMTCBUSEVOCisJUkFJ U0UgRVhDRVBUSU9OICdUYWJsZSAlLiUgbm90IGZvdW5kJywgcF9zY2hlbWFfbmFtZSwgcF90YWJs ZV9uYW1lOworICAgIEVORCBJRjsKKworICAgIC0tIEdldCBjdW11bGF0aXZlICsgdHJhbnNhY3Rp b24gc3RhdHMKKyAgICB2X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3R1cGxl c19ob3RfdXBkYXRlZCh2X3JlbGlkKSwgMCk7CisgICAgdl91cGRhdGVzIDo9IENPQUxFU0NFKHBn X3N0YXRfZ2V0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKyAgICB2X3hhY3RfaG90X3Vw ZGF0ZXMgOj0gQ09BTEVTQ0UocGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQodl9y ZWxpZCksIDApOworICAgIHZfeGFjdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3hh Y3RfdHVwbGVzX3VwZGF0ZWQodl9yZWxpZCksIDApOworCisgICAgdl9ob3RfdXBkYXRlcyA6PSB2 X2hvdF91cGRhdGVzICsgdl94YWN0X2hvdF91cGRhdGVzOworICAgIHZfdXBkYXRlcyA6PSB2X3Vw ZGF0ZXMgKyB2X3hhY3RfdXBkYXRlczsKKworICAgIFJFVFVSTiBRVUVSWQorICAgIFNFTEVDVAor CXBfdGFibGVfbmFtZTo6VEVYVCwKKwl2X3VwZGF0ZXM6OkJJR0lOVCwKKwl2X2hvdF91cGRhdGVz OjpCSUdJTlQsCisJQ0FTRSBXSEVOIHZfdXBkYXRlcyA+IDAKKwkgICAgIFRIRU4gUk9VTkQoKHZf aG90X3VwZGF0ZXM6Om51bWVyaWMgLyB2X3VwZGF0ZXM6Om51bWVyaWMgKiAxMDApOjpudW1lcmlj LCAyKQorCSAgICAgRUxTRSAwCisJRU5ELAorCSh2X2hvdF91cGRhdGVzID0gZXhwZWN0ZWQpOjpC T09MRUFOOworRU5EOworJCQ7CisKK0NSRUFURSBDT0xMQVRJT04gY2FzZV9pbnNlbnNpdGl2ZSAo CisgICAgcHJvdmlkZXIgPSBsaWJjLAorICAgIGxvY2FsZSA9ICdDJworKTsKKworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0gQmFzaWMgSlNPTkIgRXhwcmVzc2lvbiBJbmRleAorLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRB QkxFIHQoaWQgSU5UIFBSSU1BUlkgS0VZLCBkb2NzIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2RvY3Nf bmFtZV9pZHggT04gdCgoZG9jcy0+J25hbWUnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwg J3sibmFtZSI6ICJhbGljZSIsICJhZ2UiOiAzMH0nKTsKKworLS0gVXBkYXRlIG5vbi1pbmRleGVk IEpTT05CIGZpZWxkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJuYW1l IjogImFsaWNlIiwgImFnZSI6IDMxfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxKTsKKworLS0gVXBkYXRlIGluZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91 bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJuYW1lIjogImJvYiIsICJhZ2Ui OiAzMX0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7 CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBmaWVsZCBhZ2FpbiAtIHNob3VsZCBiZSBIT1QKK1VQ REFURSB0IFNFVCBkb2NzID0gJ3sibmFtZSI6ICJib2IiLCAiYWdlIjogMzJ9JyBXSEVSRSBpZCA9 IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworCitEUk9QIFRBQkxFIHQ7 CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIEpTT05CIEV4cHJlc3Npb24gSW5kZXggYW4gc29tZSBpbmNsdWRp bmcgY29sdW1ucworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5UIFBSSU1BUlkgS0VZ LCBkb2NzIEpTT05CLCBzdGF0dXMgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9kb2NzX25hbWVfaWR4IE9O IHQoKGRvY3MtPiduYW1lJykpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7Im5hbWUiOiAi YWxpY2UiLCAiYWdlIjogMzB9JywgJ29rJyk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBKU09O QiBmaWVsZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0gJ3sibmFtZSI6ICJh bGljZSIsICJhZ2UiOiAzMX0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMSk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBKU09OQiBmaWVsZCAtIHNob3Vs ZCBiZSBIT1QKK1VQREFURSB0IFNFVCBzdGF0dXMgPSAnbm90IG9rJyBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworCitEUk9QIFRBQkxFIHQ7CisKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKy0tIFBhcnRpYWwgSW5kZXggd2l0aCBQcmVkaWNhdGUgVHJhbnNpdGlvbnMKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgdmFsdWUgSU5UKQorICAgIFdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0 X3ZhbHVlX2lkeCBPTiB0KHZhbHVlKSBXSEVSRSB2YWx1ZSA+IDEwOworSU5TRVJUIElOVE8gdCBW QUxVRVMgKDEsIDUpOworCistLSBCb3RoIG91dHNpZGUgcHJlZGljYXRlIC0gc2hvdWxkIGJlIEhP VAorVVBEQVRFIHQgU0VUIHZhbHVlID0gOCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBUcmFuc2l0aW9uIGludG8gcHJlZGljYXRlIC0gc2hv dWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDE1IFdIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIEJvdGggaW5zaWRlIHByZWRp Y2F0ZSwgdmFsdWUgY2hhbmdlcyAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFs dWUgPSAyMCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEp OworCistLSBUcmFuc2l0aW9uIG91dCBvZiBwcmVkaWNhdGUgLSBzaG91bGQgTk9UIGJlIEhPVAor VVBEQVRFIHQgU0VUIHZhbHVlID0gNSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworCistLSBCb3RoIG91dHNpZGUgcHJlZGljYXRlIGFnYWluIC0gc2hv dWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMyBXSEVSRSBpZCA9IDE7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIEV4cHJlc3Npb24gSW5kZXggd2l0aCBQYXJ0aWFsIFByZWRpY2F0ZQorLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorQ1JFQVRFIFRBQkxFIHQoZG9jcyBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHggT04gdCgoZG9j cy0+J3N0YXR1cycpKQorICAgIFdIRVJFIChkb2NzLT4ncHJpb3JpdHknKTo6aW50ID4gNTsKK0lO U0VSVCBJTlRPIHQgVkFMVUVTICgneyJzdGF0dXMiOiAicGVuZGluZyIsICJwcmlvcml0eSI6IDN9 Jyk7CisKKy0tIEJvdGggb3V0c2lkZSBwcmVkaWNhdGUsIHN0YXR1cyB1bmNoYW5nZWQgLSBzaG91 bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZG9jcyA9ICd7InN0YXR1cyI6ICJwZW5kaW5nIiwgInBy aW9yaXR5IjogNH0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworLS0g VHJhbnNpdGlvbiBpbnRvIHByZWRpY2F0ZSAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBT RVQgZG9jcyA9ICd7InN0YXR1cyI6ICJwZW5kaW5nIiwgInByaW9yaXR5IjogMTB9JzsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIEluc2lkZSBwcmVkaWNhdGUsIHN0 YXR1cyBjaGFuZ2VzIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0gJ3si c3RhdHVzIjogImFjdGl2ZSIsICJwcmlvcml0eSI6IDEwfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworCistLSBJbnNpZGUgcHJlZGljYXRlLCBzdGF0dXMgdW5jaGFuZ2Vk IC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJzdGF0dXMiOiAiYWN0aXZl IiwgInByaW9yaXR5IjogOH0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsK KworRFJPUCBUQUJMRSB0OworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBHSU4gSW5kZXggb24gSlNPTkIKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZGF0YSBKU09OQikKKyAgICBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVgg dF9naW5faWR4IE9OIHQgVVNJTkcgZ2luKGRhdGEpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEs ICd7InRhZ3MiOiBbInBvc3RncmVzIiwgImRhdGFiYXNlIl19Jyk7CisKKy0tIENoYW5nZSB0YWdz IC0gR0lOIGtleXMgY2hhbmdlZCwgc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRh ID0gJ3sidGFncyI6IFsicG9zdGdyZXMiLCAic3FsIl19JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworCistLSBDaGFuZ2UgdGFncyBhZ2FpbiAtIEdJ TiBrZXlzIGNoYW5nZWQsIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7 InRhZ3MiOiBbIm15c3FsIiwgInNxbCJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygwKTsKKworLS0gQWRkIGZpZWxkIHdpdGhvdXQgY2hhbmdpbmcgZXhp c3Rpbmcga2V5cyAtIEdJTiBrZXlzIGNoYW5nZWQgKGFkZGVkICJub3RlIiksIE5PVCBIT1QKK1VQ REFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6IFsibXlzcWwiLCAic3FsIl0sICJub3RlIjogInRl c3QifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsK KworRFJPUCBUQUJMRSB0OworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBHSU4gSW5kZXggd2l0aCBVbmNoYW5n ZWQgS2V5cworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQor ICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKKy0t IENyZWF0ZSBHSU4gaW5kZXggb24gc3BlY2lmaWMgcGF0aAorQ1JFQVRFIElOREVYIHRfZ2luX2lk eCBPTiB0IFVTSU5HIGdpbigoZGF0YS0+J3RhZ3MnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAo MSwgJ3sidGFncyI6IFsicG9zdGdyZXMiLCAic3FsIl0sICJzdGF0dXMiOiAiYWN0aXZlIn0nKTsK KworLS0gQ2hhbmdlIG5vbi1pbmRleGVkIGZpZWxkIC0gR0lOIGtleXMgb24gJ3RhZ3MnIHVuY2hh bmdlZCwgc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJwb3N0 Z3JlcyIsICJzcWwiXSwgInN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBDaGFuZ2UgaW5kZXhlZCB0YWdz IC0gR0lOIGtleXMgY2hhbmdlZCwgc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRh ID0gJ3sidGFncyI6IFsibXlzcWwiLCAic3FsIl0sICJzdGF0dXMiOiAiaW5hY3RpdmUifScgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworRFJPUCBU QUJMRSB0OworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CistLSBHSU4gd2l0aCBqc29uYl9wYXRoX29wcworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2dp bl9pZHggT04gdCBVU0lORyBnaW4oZGF0YSBqc29uYl9wYXRoX29wcyk7CitJTlNFUlQgSU5UTyB0 IFZBTFVFUyAoMSwgJ3sidXNlciI6IHsibmFtZSI6ICJhbGljZSJ9LCAidGFncyI6IFsiYSIsICJi Il19Jyk7CisKKy0tIENoYW5nZSB2YWx1ZSBhdCBkaWZmZXJlbnQgcGF0aCAtIGtleXMgY2hhbmdl ZCwgTk9UIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ1c2VyIjogeyJuYW1lIjogImJvYiJ9 LCAidGFncyI6IFsiYSIsICJiIl19JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDApOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIE11bHRp LUNvbHVtbiBFeHByZXNzaW9uIEluZGV4CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJ TlQsIGEgSU5ULCBiIElOVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZp bGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHggT04gdChpZCwgYWJzKGEpLCBhYnMo YikpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIC01LCAtMTApOworCistLSBDaGFuZ2Ugc2ln biBidXQgbm90IGFicyB2YWx1ZSAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBhID0gNSBX SEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBD aGFuZ2UgYWJzIHZhbHVlIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBiID0gLTE1 IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0t IENoYW5nZSBpZCAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgaWQgPSAyIFdIRVJF IGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKK0RST1AgVEFC TEUgdDsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorLS0gTWl4ZWQgSW5kZXggVHlwZXMgKEJSSU4gKyBFeHByZXNz aW9uKQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCB2YWx1ZSBJTlQsIGRhdGEg SlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0g NzApOworQ1JFQVRFIElOREVYIHRfYnJpbl9pZHggT04gdCBVU0lORyBicmluKHZhbHVlKTsKK0NS RUFURSBJTkRFWCB0X2V4cHJfaWR4IE9OIHQoKGRhdGEtPidzdGF0dXMnKSk7CitJTlNFUlQgSU5U TyB0IFZBTFVFUyAoMSwgMTAwLCAneyJzdGF0dXMiOiAiYWN0aXZlIn0nKTsKKworLS0gVXBkYXRl IG9ubHkgQlJJTiBjb2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSAy MDAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKwor LS0gVXBkYXRlIG9ubHkgZXhwcmVzc2lvbiBjb2x1bW4gLSBzaG91bGQgTk9UIGJlIEhPVAorVVBE QVRFIHQgU0VUIGRhdGEgPSAneyJzdGF0dXMiOiAiaW5hY3RpdmUifScgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworLS0gVXBkYXRlIGJvdGggLSBz aG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMzAwLCBkYXRhID0gJ3sic3Rh dHVzIjogInBlbmRpbmcifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygxKTsKKworRFJPUCBUQUJMRSB0OworCistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBFeHByZXNzaW9u IHdpdGggQ09MTEFUSU9OIGFuZCBCVFJFRSAobmJ0cmVlKSBpbmRleAorLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JF QVRFIFRBQkxFIHQoCisgICAgaWQgSU5UIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVEVYVCBDT0xM QVRFIGNhc2VfaW5zZW5zaXRpdmUKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBm aWxsZmFjdG9yID0gNzApOworCitDUkVBVEUgSU5ERVggdF9sb3dlcl9pZHggT04gdCBVU0lORyBC VFJFRSAobmFtZSBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUpOworCitJTlNFUlQgSU5UTyB0IFZB TFVFUyAoMSwgJ0FMSUNFJyk7CisKKy0tIENoYW5nZSBjYXNlIGJ1dCBub3QgdmFsdWUgLSBzaG91 bGQgTk9UIGJlIEhPVCBpbiBCVFJFRQorVVBEQVRFIHQgU0VUIG5hbWUgPSAnQWxpY2UnIFdIRVJF IGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisKKy0tIENoYW5n ZSB0byBuZXcgdmFsdWUgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIG5hbWUgPSAn Qk9CJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOwor CitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEFycmF5IEV4cHJlc3Npb24gSW5kZXgK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgdGFncyBURVhUW10pCisgICAgV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElO REVYIHRfYXJyYXlfbGVuX2lkeCBPTiB0KGFycmF5X2xlbmd0aCh0YWdzLCAxKSk7CitJTlNFUlQg SU5UTyB0IFZBTFVFUyAoMSwgQVJSQVlbJ2EnLCAnYicsICdjJ10pOworCistLSBTYW1lIGxlbmd0 aCwgZGlmZmVyZW50IGVsZW1lbnRzIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHRhZ3Mg PSBBUlJBWVsnZCcsICdlJywgJ2YnXSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworCistLSBEaWZmZXJlbnQgbGVuZ3RoIC0gc2hvdWxkIE5PVCBiZSBI T1QKK1VQREFURSB0IFNFVCB0YWdzID0gQVJSQVlbJ2QnLCAnZSddIFdIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKK0RST1AgVEFCTEUgdDsKKworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gTmVzdGVkIEpTT05CIEV4cHJlc3Npb24gYW5kIEpTT05CIGVxdWFsaXR5ICct PicgKG5vdCAnLT4+JykKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGRhdGEgSlNPTkIpCisg ICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JF QVRFIElOREVYIHRfbmVzdGVkX2lkeCBPTiB0KChkYXRhLT4ndXNlcictPiduYW1lJykpOworSU5T RVJUIElOVE8gdCBWQUxVRVMgKCd7InVzZXIiOiB7Im5hbWUiOiAiYWxpY2UiLCAiYWdlIjogMzB9 fScpOworCistLSBDaGFuZ2UgbmVzdGVkIG5vbi1pbmRleGVkIGZpZWxkIC0gc2hvdWxkIGJlIEhP VAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ1c2VyIjogeyJuYW1lIjogImFsaWNlIiwgImFnZSI6 IDMxfX0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworLS0gQ2hhbmdl IG5lc3RlZCBpbmRleGVkIGZpZWxkIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBk YXRhID0gJ3sidXNlciI6IHsibmFtZSI6ICJib2IiLCAiYWdlIjogMzF9fSc7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIENvbXBsZXggUHJlZGljYXRlIG9uIE11bHRpcGxlIEpTT05CIEZpZWxkcworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorQ1JFQVRFIFRBQkxFIHQoZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHggT04gdCgoZGF0 YS0+J3N0YXR1cycpKQorICAgIFdIRVJFIChkYXRhLT4ncHJpb3JpdHknKTo6aW50ID4gNQorICAg ICAgQU5EIChkYXRhLT4nYWN0aXZlJyk6OmJvb2xlYW4gPSB0cnVlOworCitJTlNFUlQgSU5UTyB0 IFZBTFVFUyAoJ3sic3RhdHVzIjogInBlbmRpbmciLCAicHJpb3JpdHkiOiAzLCAiYWN0aXZlIjog dHJ1ZX0nKTsKKworLS0gT3V0c2lkZSBwcmVkaWNhdGUgKHByaW9yaXR5IHRvbyBsb3cpIC0gc2hv dWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJzdGF0dXMiOiAiZG9uZSIsICJwcmlv cml0eSI6IDMsICJhY3RpdmUiOiB0cnVlfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEpOworCistLSBUcmFuc2l0aW9uIGludG8gcHJlZGljYXRlIC0gc2hvdWxkIE5PVCBiZSBI T1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sic3RhdHVzIjogImRvbmUiLCAicHJpb3JpdHkiOiAx MCwgImFjdGl2ZSI6IHRydWV9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7 CisKKy0tIEluc2lkZSBwcmVkaWNhdGUsIGNoYW5nZSB0byBvdXRzaWRlIChhY3RpdmUgPSBmYWxz ZSkgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJzdGF0dXMiOiAi ZG9uZSIsICJwcmlvcml0eSI6IDEwLCAiYWN0aXZlIjogZmFsc2V9JzsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKK0RST1AgVEFCTEUgdDsKKworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0g R0lOIEFycmF5IEluZGV4IC0gT3JkZXIgSW5zZW5zaXRpdmUgRXh0cmFjdGlvbgorLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorQ1JFQVRFIFRBQkxFIHQoCisgICAgaWQgSU5UIFBSSU1BUlkgS0VZLAorICAgIGRhdGEgSlNP TkIKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOwor CistLSBHSU4gaW5kZXggb24gSlNPTkIgYXJyYXkgKGV4dHJhY3RzIGFsbCBlbGVtZW50cykKK0NS RUFURSBJTkRFWCB0X2l0ZW1zX2dpbiBPTiB0IFVTSU5HIEdJTiAoKGRhdGEtPidpdGVtcycpKTsK KworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7Iml0ZW1zIjogWzEsIDIsIDNdLCAic3RhdHVz IjogImFjdGl2ZSJ9Jyk7CisKKy0tIFVwZGF0ZTogUmVvcmRlciBhcnJheSBlbGVtZW50cworLS0g SlNPTkIgZXF1YWxpdHk6IE5PVCBlcXVhbCAoZGlmZmVyZW50IGFycmF5cykKKy0tIEdJTiBleHRy YWN0aW9uOiBTYW1lIGVsZW1lbnRzIGV4dHJhY3RlZCAobWlnaHQgYWxsb3cgSE9UIGlmIG5vdCBj YXJlZnVsKQorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJpdGVtcyI6IFszLCAyLCAxXSwgInN0YXR1 cyI6ICJhY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygxKTsKKworLS0gVXBkYXRlOiBBZGQvcmVtb3ZlIGVsZW1lbnQKK1VQREFURSB0IFNFVCBk YXRhID0gJ3siaXRlbXMiOiBbMSwgMiwgMywgNF0sICJzdGF0dXMiOiAiYWN0aXZlIn0nIFdIRVJF IGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKK0RST1AgVEFC TEUgdDsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorLS0gVE9BU1RlZCBWYWx1ZXMgaW4gRXhwcmVzc2lvbiBJbmRl eAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBsYXJnZV90ZXh0IFRFWFQpCisg ICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JF QVRFIElOREVYIHRfc3Vic3RyX2lkeCBPTiB0KHN1YnN0cihsYXJnZV90ZXh0LCAxLCAxMCkpOwor CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgcmVwZWF0KCd4JywgNTAwMCkgfHwgJ2lkZW50aWZp ZXInKTsKKworLS0gQ2hhbmdlIGVuZCBvZiBzdHJpbmcsIHByZWZpeCB1bmNoYW5nZWQgLSBzaG91 bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgbGFyZ2VfdGV4dCA9IHJlcGVhdCgneCcsIDUwMDApIHx8 ICdkaWZmZXJlbnQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMSk7CisKKy0tIENoYW5nZSBwcmVmaXggLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQg U0VUIGxhcmdlX3RleHQgPSByZXBlYXQoJ3knLCA1MDAwKSB8fCAnZGlmZmVyZW50JyBXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCitEUk9QIFRBQkxF IHQ7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKy0tIFRFU1Q6IEdJTiB3aXRoIFRPQVNUZWQgVEVYVCAodHN2ZWN0 b3IpCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNvbnRlbnQgVEVYVCwgc2Vh cmNoX3ZlYyB0c3ZlY3RvcikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZp bGxmYWN0b3IgPSA3MCk7CisKKy0tIENyZWF0ZSB0cmlnZ2VyIHRvIG1haW50YWluIHRzdmVjdG9y CitDUkVBVEUgVFJJR0dFUiB0c3ZlY3RvcnVwZGF0ZV90b2FzdAorICAgIEJFRk9SRSBJTlNFUlQg T1IgVVBEQVRFIE9OIHQKKyAgICBGT1IgRUFDSCBST1cgRVhFQ1VURSBGVU5DVElPTgorICAgIHRz dmVjdG9yX3VwZGF0ZV90cmlnZ2VyKHNlYXJjaF92ZWMsICdwZ19jYXRhbG9nLmVuZ2xpc2gnLCBj b250ZW50KTsKKworQ1JFQVRFIElOREVYIHRfZ2luIE9OIHQgVVNJTkcgZ2luKHNlYXJjaF92ZWMp OworCistLSBJbnNlcnQgd2l0aCBsYXJnZSBjb250ZW50ICh3aWxsIGJlIFRPQVNUZWQpCitJTlNF UlQgSU5UTyB0IChpZCwgY29udGVudCkgVkFMVUVTCisgICAgKDEsIHJlcGVhdCgnaW1wb3J0YW50 IGtleXdvcmQgJywgMTAwMCkgfHwgcmVwZWF0KCdmaWxsZXIgdGV4dCAnLCAxMDAwMCkpOworCist LSBWZXJpZnkgaW5pdGlhbCBzdGF0ZQorU0VMRUNUIGNvdW50KCopIEZST00gdCBXSEVSRSBzZWFy Y2hfdmVjIEBAIHRvX3RzcXVlcnkoJ2ltcG9ydGFudCcpOworLS0gRXhwZWN0ZWQ6IDEgcm93CisK Ky0tIElNUE9SVEFOVDogVGhlIEJFRk9SRSBVUERBVEUgdHJpZ2dlciBtb2RpZmllcyBzZWFyY2hf dmVjLCBzbyBieSB0aGUgdGltZQorLS0gRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkg cnVucywgc2VhcmNoX3ZlYyBoYXMgYWxyZWFkeSBjaGFuZ2VkLgorLS0gVGhpcyBtZWFucyB0aGUg Y29tcGFyaXNvbiBzZWVzIG9sZCB0c3ZlY3RvciB2cy4gdHJpZ2dlci1tb2RpZmllZCB0c3ZlY3Rv ciwKKy0tIG5vdCB0aGUgbmF0dXJhbCBwcm9ncmVzc2lvbi4gSE9UIHdvbid0IGhhcHBlbiBiZWNh dXNlIHRoZSB0cmlnZ2VyIGNoYW5nZWQKKy0tIHRoZSBpbmRleGVkIGNvbHVtbi4KKworLS0gVXBk YXRlOiBFdmVuIHRob3VnaCBjb250ZW50IGtleXdvcmRzIHVuY2hhbmdlZCwgdHJpZ2dlciBzdGls bCBmaXJlcworVVBEQVRFIHQKK1NFVCBjb250ZW50ID0gcmVwZWF0KCdpbXBvcnRhbnQga2V5d29y ZCAnLCAxMDAwKSB8fCByZXBlYXQoJ2RpZmZlcmVudCBmaWxsZXIgJywgMTAwMDApCitXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworLS0gRXhwZWN0ZWQ6 IDAgSE9UICh0cmlnZ2VyIG1vZGlmaWVzIHNlYXJjaF92ZWMsIGJsb2NraW5nIEhPVCkKKy0tIFRo aXMgaXMgYWN0dWFsbHkgY29ycmVjdCBiZWhhdmlvciAtIHRoZSB0cmlnZ2VyIHVwZGF0ZWQgYW4g aW5kZXhlZCBjb2x1bW4KKworLS0gVXBkYXRlOiBDaGFuZ2UgaW5kZXhlZCBrZXl3b3JkcworVVBE QVRFIHQKK1NFVCBjb250ZW50ID0gcmVwZWF0KCdjcml0aWNhbCBrZXl3b3JkICcsIDEwMDApIHx8 IHJlcGVhdCgnZGlmZmVyZW50IGZpbGxlciAnLCAxMDAwMCkKK1dIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CistLSBFeHBlY3RlZDogMCBIT1QgKGluZGV4 IGtleXMgY2hhbmdlZCkKKworLS0gVmVyaWZ5IHF1ZXJ5IGNvcnJlY3RuZXNzCitTRUxFQ1QgY291 bnQoKikgRlJPTSB0IFdIRVJFIHNlYXJjaF92ZWMgQEAgdG9fdHNxdWVyeSgnY3JpdGljYWwnKTsK Ky0tIEV4cGVjdGVkOiAxIHJvdworCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0gVEVTVDogR0lOIHdpdGggVE9BU1RlZCBKU09OQgorLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRB QkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2dpbiBPTiB0IFVTSU5HIGdp bigoZGF0YS0+J3RhZ3MnKSk7CisKKy0tIEluc2VydCB3aXRoIFRPQVNUZWQgSlNPTkIKK0lOU0VS VCBJTlRPIHQgKGlkLCBkYXRhKSBWQUxVRVMKKyAgICAoMSwganNvbmJfYnVpbGRfb2JqZWN0KAor ICAgICAgICAndGFncycsICdbInBvc3RncmVzIiwgImRhdGFiYXNlIl0nOjpqc29uYiwKKyAgICAg ICAgJ2xhcmdlX2ZpZWxkJywgcmVwZWF0KCd4JywgMTAwMDApCisgICAgKSk7CisKKy0tIFVwZGF0 ZTogQ2hhbmdlIGxhcmdlX2ZpZWxkLCB0YWdzIHVuY2hhbmdlZCAtIHNob3VsZCBiZSBIT1QKK1VQ REFURSB0CitTRVQgZGF0YSA9IGpzb25iX2J1aWxkX29iamVjdCgKKyAgICAndGFncycsICdbInBv c3RncmVzIiwgImRhdGFiYXNlIl0nOjpqc29uYiwKKyAgICAnbGFyZ2VfZmllbGQnLCByZXBlYXQo J3knLCAxMDAwMCkKKykKK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMSk7CistLSBFeHBlY3RlZDogMSBIT1QgdXBkYXRlCisKKy0tIFVwZGF0ZTogQ2hhbmdl IHRhZ3MgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQKK1NFVCBkYXRhID0ganNvbmJfYnVp bGRfb2JqZWN0KAorICAgICd0YWdzJywgJ1sicG9zdGdyZXMiLCAic3FsIl0nOjpqc29uYiwKKyAg ICAnbGFyZ2VfZmllbGQnLCByZXBlYXQoJ3knLCAxMDAwMCkKKykKK1dIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CistLSBFeHBlY3RlZDogU3RpbGwgMSBI T1QKKworLS0gVmVyaWZ5IGNvcnJlY3RuZXNzCitTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdIRVJF IGRhdGEtPid0YWdzJyBAPiAnWyJkYXRhYmFzZSJdJzo6anNvbmI7CistLSBFeHBlY3RlZDogMCBy b3dzCitTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdIRVJFIGRhdGEtPid0YWdzJyBAPiAnWyJzcWwi XSc6Ompzb25iOworLS0gRXhwZWN0ZWQ6IDEgcm93CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOwor CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLSBURVNUOiBHSU4gd2l0aCBBcnJheSBvZiBMYXJnZSBTdHJpbmdzCist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIHRhZ3MgVEVYVFtdKQorICAgIFdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRF WCB0X2dpbiBPTiB0IFVTSU5HIGdpbih0YWdzKTsKKworLS0gSW5zZXJ0IHdpdGggbGFyZ2UgYXJy YXkgZWxlbWVudHMgKG1pZ2h0IGJlIFRPQVNUZWQpCitJTlNFUlQgSU5UTyB0IChpZCwgdGFncykg VkFMVUVTCisgICAgKDEsIEFSUkFZW3JlcGVhdCgndGFnMScsIDEwMDApLCByZXBlYXQoJ3RhZzIn LCAxMDAwKV0pOworCistLSBVcGRhdGU6IENoYW5nZSB0byBkaWZmZXJlbnQgbGFyZ2UgdmFsdWVz IC0gTk9UIEhPVAorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlbcmVwZWF0KCd0YWczJywgMTAw MCksIHJlcGVhdCgndGFnNCcsIDEwMDApXQorV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygwKTsKKy0tIEV4cGVjdGVkOiAwIEhPVCAoa2V5cyBhY3R1YWxseSBj aGFuZ2VkKQorCistLSBVcGRhdGU6IEtlZXAgc2FtZSB0YWcgdmFsdWVzLCBqdXN0IHJlb3JkZXIg LSBTSE9VTEQgQkUgSE9UCistLSAoR0lOIGlzIG9yZGVyLWluc2Vuc2l0aXZlOiBib3RoIFt0YWcz LHRhZzRdIGFuZCBbdGFnNCx0YWczXQorLS0gZXh0cmFjdCB0byB0aGUgc2FtZSBzb3J0ZWQga2V5 IHNldCBbJ3RhZzMnLCd0YWc0J10pCitVUERBVEUgdAorU0VUIHRhZ3MgPSBBUlJBWVtyZXBlYXQo J3RhZzQnLCAxMDAwKSwgcmVwZWF0KCd0YWczJywgMTAwMCldCitXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworLS0gRXhwZWN0ZWQ6IDEgSE9UIChHSU4g a2V5cyBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsKQorCistLSBVcGRhdGU6IFJlbW92ZSBhbiBlbGVt ZW50IC0gTk9UIEhPVCAoa2V5cyBjaGFuZ2VkKQorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlb cmVwZWF0KCd0YWc0JywgMTAwMCldCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworLS0gRXhwZWN0ZWQ6IFN0aWxsIDEgSE9UIChub3QgdGhpcyBvbmUp CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBCUklOIEluZGV4IHdp dGggUGFydGlhbCBQcmVkaWNhdGUKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KAorICAgIGlk IElOVCBQUklNQVJZIEtFWSwKKyAgICB2YWx1ZSBJTlQsCisgICAgZGVzY3JpcHRpb24gVEVYVAor KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CisKK0NS RUFURSBJTkRFWCB0X2JyaW5fcGFydGlhbF9pZHggT04gdCBVU0lORyBicmluKHZhbHVlKSBXSEVS RSB2YWx1ZSA+IDEwMDsKKworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIDUwLCAnYmVsb3cgcmFu Z2UnKTsKKworLS0gVGVzdCAxOiBPdXRzaWRlIHByZWRpY2F0ZQorVVBEQVRFIHQgU0VUIGRlc2Ny aXB0aW9uID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMSk7CisKKy0tIFZhbGlkYXRlOiBQcmVkaWNhdGUgcXVlcnkgcmV0dXJucyAwIHJv d3MKK1NFTEVDVCBDT1VOVCgqKSBhcyBjbnQgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworCist LSBUZXN0IDI6IFRyYW5zaXRpb24gaW50byBwcmVkaWNhdGUKK1VQREFURSB0IFNFVCB2YWx1ZSA9 IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOwor CistLSBWYWxpZGF0ZTogUHJlZGljYXRlIHF1ZXJ5IHJldHVybnMgMSByb3cgd2l0aCBjb3JyZWN0 IHZhbHVlCitTRUxFQ1QgQ09VTlQoKikgYXMgY250LCBNQVgodmFsdWUpIGFzIG1heF92YWwgRlJP TSB0IFdIRVJFIHZhbHVlID4gMTAwOworCistLSBUZXN0IDM6IEluc2lkZSBwcmVkaWNhdGUsIHZh bHVlIGNoYW5nZXMKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDE2MCwgZGVzY3JpcHRpb24gPSAndXBk YXRlZCBhZ2FpbicgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygzKTsKKworLS0gVmFsaWRhdGU6IFVwZGF0ZWQgdmFsdWUgKDE2MCkgaXMgcmV0dXJuZWQKK1NF TEVDVCBDT1VOVCgqKSBhcyBjbnQsIE1BWCh2YWx1ZSkgYXMgbWF4X3ZhbCBGUk9NIHQgV0hFUkUg dmFsdWUgPiAxMDA7CisKKy0tIFRlc3QgNDogVHJhbnNpdGlvbiBvdXQgb2YgcHJlZGljYXRlCitV UERBVEUgdCBTRVQgdmFsdWUgPSA1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDQpOworCitTRUxFQ1QgQ09VTlQoKikgYXMgY250IEZST00gdCBXSEVSRSB2 YWx1ZSA+IDEwMDsKKworU0VMRUNUIGlkLCB2YWx1ZSwgZGVzY3JpcHRpb24gRlJPTSB0OworCitE Uk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gSEFTSCBJbmRleCAoU2ltcGxl IENvbHVtbikKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgY29kZSBWQVJDSEFS KDIwKSwgZGVzY3JpcHRpb24gVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBv ZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9oYXNoX2lkeCBPTiB0IFVTSU5H IGhhc2goY29kZSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ0NPREUwMDEnLCAnaW5pdGlh bCcpOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBE QVRFIHQgU0VUIGRlc2NyaXB0aW9uID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIFVwZGF0ZSBpbmRleGVkIGNvbHVtbiAt IEhBU0ggaW5kZXggcmVxdWlyZXMgdXBkYXRlLCBOT1QgSE9UCitVUERBVEUgdCBTRVQgY29kZSA9 ICdDT0RFMDAyJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDEpOworCistLSBVcGRhdGUgYm90aCAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NP REUwMDMnLCBkZXNjcmlwdGlvbiA9ICdjaGFuZ2VkJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBCYWNrIHRvIG9yaWdpbmFsIGNvZGUgLSBO T1QgSE9UIChkaWZmZXJlbnQgaGFzaCBidWNrZXQgbG9jYXRpb24pCitVUERBVEUgdCBTRVQgY29k ZSA9ICdDT0RFMDAxJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEpOworCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gSEFTSCBJ bmRleCBvbiBFeHByZXNzaW9uCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGVt YWlsIFRFWFQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2Zm LCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9sb3dlcl9lbWFpbF9pZHgg T04gdCBVU0lORyBIQVNIKGxvd2VyKGVtYWlsKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwg J0FsaWNlQEV4YW1wbGUuY29tJywgJ3sic3RhdHVzIjogIm5ldyJ9Jyk7CisKKy0tIFVwZGF0ZSBu b24taW5kZXhlZCBmaWVsZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3si c3RhdHVzIjogImFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hv dF91cGRhdGVzKDEpOworCistLSBVcGRhdGUgZW1haWwgd2l0aCBjYXNlIGNoYW5nZSBvbmx5IChz YW1lIGxvd2VyY2FzZSkgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZW1haWwgPSAnYWxp Y2VAZXhhbXBsZS5jb20nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMik7CisKKy0tIFVwZGF0ZSBlbWFpbCB0byBkaWZmZXJlbnQgbG93ZXJjYXNlIC0gTk9U IEhPVAorVVBEQVRFIHQgU0VUIGVtYWlsID0gJ2JvYkBleGFtcGxlLmNvbScgV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKworRFJPUCBUQUJMRSB0IENB U0NBREU7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKy0tIEhBU0ggSW5kZXggb24gSlNPTkIgRmllbGQKKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9o YXNoX2NhdGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goKGRhdGEtPidjYXRlZ29yeScpKTsKK0lO U0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJjYXRlZ29yeSI6ICJib29rcyIsICJ0aXRsZSI6ICJQ b3N0Z3JlU1FMIEd1aWRlIn0nKTsKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIEpTT05CIGZpZWxk IC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJjYXRlZ29yeSI6ICJib29r cyIsICJ0aXRsZSI6ICJQb3N0Z3JlU1FMIEhhbmRib29rIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIFVwZGF0ZSBpbmRleGVkIEpTT05C IGZpZWxkIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJjYXRlZ29yeSI6ICJ2aWRl b3MiLCAidGl0bGUiOiAiUG9zdGdyZVNRTCBIYW5kYm9vayJ9JyBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBVcGRhdGUgYm90aCAtIE5PVCBI T1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3siY2F0ZWdvcnkiOiAiY291cnNlcyIsICJ0aXRsZSI6 ICJQb3N0Z3JlU1FMIEJhc2ljcyJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor LS0gTXVsdGlwbGUgSEFTSCBJbmRleGVzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJ TlQsIGNhdGVnb3J5IFZBUkNIQVIsIHN0YXR1cyBWQVJDSEFSLCB2YWx1ZSBJTlQpCisgICAgV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElO REVYIHRfaGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0NSRUFU RSBJTkRFWCB0X2hhc2hfc3RhdHVzX2lkeCBPTiB0IFVTSU5HIGhhc2goc3RhdHVzKTsKK0lOU0VS VCBJTlRPIHQgVkFMVUVTICgxLCAnZWxlY3Ryb25pY3MnLCAnYWN0aXZlJywgMTAwKTsKKworLS0g VXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCB2 YWx1ZSA9IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDEpOworCistLSBVcGRhdGUgb25lIGluZGV4ZWQgY29sdW1uIC0gTk9UIEhPVAorVVBEQVRFIHQg U0VUIGNhdGVnb3J5ID0gJ2Jvb2tzJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworCistLSBVcGRhdGUgb3RoZXIgaW5kZXhlZCBjb2x1bW4gLSBOT1Qg SE9UCitVUERBVEUgdCBTRVQgc3RhdHVzID0gJ2luYWN0aXZlJyBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBVcGRhdGUgYm90aCBpbmRleGVk IGNvbHVtbnMgLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSAndmlkZW9zJywgc3Rh dHVzID0gJ3BlbmRpbmcnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMSk7CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBCUklO IHZzIEhBU0ggQ29tcGFyaXNvbgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHRfYnJpbihpZCBJ TlQsIHZhbHVlIElOVCwgZGF0YSBURVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBUQUJMRSB0X2hhc2goaWQgSU5ULCB2YWx1 ZSBJTlQsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZp bGxmYWN0b3IgPSA3MCk7CisKK0NSRUFURSBJTkRFWCB0X2JyaW5fdmFsdWVfaWR4IE9OIHRfYnJp biBVU0lORyBicmluKHZhbHVlKTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfdmFsdWVfaWR4IE9OIHRf aGFzaCBVU0lORyBoYXNoKHZhbHVlKTsKKworSU5TRVJUIElOVE8gdF9icmluIFZBTFVFUyAoMSwg MTAwLCAnaW5pdGlhbCcpOworSU5TRVJUIElOVE8gdF9oYXNoIFZBTFVFUyAoMSwgMTAwLCAnaW5p dGlhbCcpOworCistLSBTYW1lIHVwZGF0ZSBvbiBib3RoIC0gZGlmZmVyZW50IEhPVCBiZWhhdmlv ciBleHBlY3RlZAorLS0gQlJJTjogbWlnaHQgYWxsb3cgSE9UIChyYW5nZSBzdW1tYXJ5IHVuY2hh bmdlZCkKKy0tIEhBU0g6IGJsb2NrcyBIT1QgKGhhc2ggYnVja2V0IGNoYW5nZWQpCitVUERBVEUg dF9icmluIFNFVCB2YWx1ZSA9IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEsICd0X2JyaW4nKTsKKy0tIEV4cGVjdGVkOiAxIEhPVCAoQlJJTiBhbGxv d3MgaXQgZm9yIHNpbmdsZSByb3cpCisKK1VQREFURSB0X2hhc2ggU0VUIHZhbHVlID0gMTUwIFdI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3RfaGFzaCcp OworLS0gRXhwZWN0ZWQ6IDAgSE9UIChIQVNIIGJsb2NrcyBpdCkKKworRFJPUCBUQUJMRSB0X2Jy aW4gQ0FTQ0FERTsKK0RST1AgVEFCTEUgdF9oYXNoIENBU0NBREU7CisKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IEhBU0ggSW5kZXggd2l0aCBOVUxMIFZhbHVlcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQo aWQgSU5ULCBjYXRlZ29yeSBWQVJDSEFSLCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9j YXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0lOU0VSVCBJTlRPIHQgVkFM VUVTICgxLCAnZWxlY3Ryb25pY3MnLCAnaW5pdGlhbCcpOworCistLSBVcGRhdGUgaW5kZXhlZCBj b2x1bW4gdG8gTlVMTCAtIE5PVCBIT1QgKGhhc2ggdmFsdWUgY2hhbmdlZCkKK1VQREFURSB0IFNF VCBjYXRlZ29yeSA9IE5VTEwgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygwKTsKKy0tIEV4cGVjdGVkOiAwIEhPVAorCistLSBVcGRhdGUgaW5kZXhlZCBjb2x1 bW4gZnJvbSBOVUxMIHRvIHZhbHVlIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0g J2Jvb2tzJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAp OworLS0gRXhwZWN0ZWQ6IDAgSE9UCisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4gLSBz aG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd1cGRhdGVkJyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworLS0gRXhwZWN0ZWQ6IDEgSE9U CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBCUklOIG9uIEpTT05C IEZpZWxkCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIG1ldHJpY3MgSlNPTkIp CisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOwor LS0gQlJJTiBkb2Vzbid0IGRpcmVjdGx5IHN1cHBvcnQgSlNPTkIsIGJ1dCB3ZSBjYW4gdGVzdCBv biBleHByZXNzaW9uCitDUkVBVEUgSU5ERVggdF9icmluX2NvdW50X2lkeCBPTiB0IFVTSU5HIGJy aW4oCisgICAgQ0FTVChtZXRyaWNzLT4+J2NvdW50JyBBUyBJTlRFR0VSKQorKTsKK0lOU0VSVCBJ TlRPIHQgVkFMVUVTICgxLCAneyJjb3VudCI6ICIxMDAiLCAidGltZXN0YW1wIjogIjIwMjQtMDEt MDEifScpOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91bGQgYmUg SE9UCitVUERBVEUgdCBTRVQgbWV0cmljcyA9ICd7ImNvdW50IjogIjEwMCIsICJ0aW1lc3RhbXAi OiAiMjAyNC0wMS0wMiJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEpOworLS0gRXhwZWN0ZWQ6IDEgSE9UCisKKy0tIFVwZGF0ZSBpbmRleGVkIGZpZWxk IC0gQlJJTiBhbGxvd3MgSE9UIGZvciBzaW5nbGUgcm93CitVUERBVEUgdCBTRVQgbWV0cmljcyA9 ICd7ImNvdW50IjogIjE1MCIsICJ0aW1lc3RhbXAiOiAiMjAyNC0wMS0wMiJ9JyBXSEVSRSBpZCA9 IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworLS0gRXhwZWN0ZWQ6IDIg SE9UIChCUklOIHBlcm1pdHMgc2luZ2xlLXJvdyB1cGRhdGVzKQorCitEUk9QIFRBQkxFIHQgQ0FT Q0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorLS0gTWl4ZWQgQlJJTiArIEhBU0ggb24gU2FtZSBUYWJsZQor LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBjYXRlZ29yeSBWQVJDSEFSLCB0aW1l c3RhbXAgVElNRVNUQU1QLCBwcmljZSBOVU1FUklDLCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRf YnJpbl90aW1lc3RhbXBfaWR4IE9OIHQgVVNJTkcgYnJpbih0aW1lc3RhbXApOworQ1JFQVRFIElO REVYIHRfaGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0lOU0VS VCBJTlRPIHQgVkFMVUVTICgxLCAnYm9va3MnLCAnMjAyNC0wMS0wMSAxMDowMDowMCcsIDI5Ljk5 LCAnaW5pdGlhbCcpOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJl IEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAndXBkYXRlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNU ICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKy0tIEV4cGVjdGVkOiAxIEhPVAorCistLSBV cGRhdGUgQlJJTiBpbmRleGVkIGNvbHVtbiAtIGFsbG93cyBIT1QKK1VQREFURSB0IFNFVCB0aW1l c3RhbXAgPSAnMjAyNC0wMS0wMiAxMDowMDowMCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygyKTsKKy0tIEV4cGVjdGVkOiAyIEhPVAorCistLSBVcGRhdGUg SEFTSCBpbmRleGVkIGNvbHVtbiAtIGJsb2NrcyBIT1QKK1VQREFURSB0IFNFVCBjYXRlZ29yeSA9 ICd2aWRlb3MnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMo Mik7CistLSBFeHBlY3RlZDogMiBIT1QgKEhBU0ggYmxvY2tzIGl0KQorCistLSBVcGRhdGUgcHJp Y2UgKG5vbi1pbmRleGVkKSAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBwcmljZSA9IDM5 Ljk5IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMyk7Cist LSBFeHBlY3RlZDogMyBIT1QKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CisKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIEluZGV4IGJvdGggb24gYSBmaWVsZCBpbiBhIEpTT05CIGRvY3VtZW50LCBhbmQgdGhlIGRv Y3VtZW50CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQgUFJJTUFSWSBLRVksIGRv Y3MgSlNPTkIpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcw KTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfaWR4IE9OIHQoKGRvY3MtPiduYW1lJykpOworQ1JFQVRF IElOREVYIHRfZG9jc19jb2xfaWR4IE9OIHQoZG9jcyk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAo MSwgJ3sibmFtZSI6ICJqb2huIiwgImRhdGEiOiAic29tZSBkYXRhIn0nKTsKKworLS0gVXBkYXRl IGltcGFjdHMgaW5kZXggb24gd2hvbGUgZG9jbWVudCBhdHRyaWJ1dGUsIGNhbid0IGdvIEhPVAor VVBEQVRFIHQgU0VUIGRvY3M9J3sibmFtZSI6ICJqb2huIiwgImRhdGEiOiAic29tZSBvdGhlciBk YXRhIn0nIFdIRVJFIGlkPTE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOwor CitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUd28gaW5kZXhlcyBv biBhIEpTT05CIGRvY3VtZW50LCBvbmUgcGFydGlhbAorLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxF IHQgKGRvY3MgSlNPTkIpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3Rv ciA9IDcwKTsKK0lOU0VSVCBJTlRPIHQgKGRvY3MpIFZBTFVFUyAoJ3siYSI6IDAsICJiIjogMH0n KTsKK0lOU0VSVCBJTlRPIHQgKGRvY3MpIFNFTEVDVCBqc29uYl9idWlsZF9vYmplY3QoJ2InLCBu KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAsIDEwMDAwKSBhcyBuOworQ1JFQVRFIElOREVYIHRf aWR4X2EgT04gdCAoKGRvY3MtPidhJykpOworQ1JFQVRFIElOREVYIHRfaWR4X2IgT04gdCAoKGRv Y3MtPidiJykpIFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID4gOTsKKworU0VUIFNFU1NJT04g ZW5hYmxlX3NlcXNjYW4gPSBPRkY7CitTRVQgU0VTU0lPTiBlbmFibGVfYml0bWFwc2NhbiA9IE9G RjsKKworLS0gTGVhdmUgJ2EnIHVuY2hhbmdlZCBidXQgbW9kaWZ5ICdiJyB0byBhIHZhbHVlIG91 dHNpZGUgb2YgdGhlIGluZGV4IHByZWRpY2F0ZS4KKy0tIFRoaXMgc2hvdWxkIGJlIGEgSE9UIHVw ZGF0ZSBiZWNhdXNlIG5laXRoZXIgaW5kZXggaXMgY2hhbmdlZC4KK1VQREFURSB0IFNFVCBkb2Nz ID0ganNvbmJfYnVpbGRfb2JqZWN0KCdhJywgMCwgJ2InLCAxKSBXSEVSRSAoZG9jcy0+J2EnKTo6 bnVtZXJpYyA9IDA7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBD aGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXggZG9lcyBub3QgY29udGFpbiBhIHZhbHVl IGZvciAnYicKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0IFdIRVJFIChkb2Nz LT4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPidiJyk6Om51bWVyaWMgPCAxMDA7CitTRUxF Q1QgKiBGUk9NIHQgV0hFUkUgKGRvY3MtPidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+J2In KTo6bnVtZXJpYyA8IDEwMDsKKworLS0gTGVhdmUgJ2EnIHVuY2hhbmdlZCBidXQgbW9kaWZ5ICdi JyB0byBhIHZhbHVlIHdpdGhpbiB0aGUgaW5kZXggcHJlZGljYXRlLgorLS0gVGhpcyByZXByZXNl bnRzIGEgY2hhbmdlIGZvciBmaWVsZCAnYicgZnJvbSB1bmluZGV4ZWQgdG8gaW5kZXhlZCBhbmQg c28KKy0tIHRoaXMgc2hvdWxkIG5vdCB0YWtlIHRoZSBIT1QgcGF0aC4KK1VQREFURSB0IFNFVCBk b2NzID0ganNvbmJfYnVpbGRfb2JqZWN0KCdhJywgMCwgJ2InLCAxMCkgV0hFUkUgKGRvY3MtPidh Jyk6Om51bWVyaWMgPSAwOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKwor LS0gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IGNvbnRhaW5zIHRoZSBuZXcgdmFs dWUgb2YgJ2InCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVSRSAoZG9j cy0+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4nYicpOjpudW1lcmljIDwgMTAwOworU0VM RUNUICogRlJPTSB0IFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPidi Jyk6Om51bWVyaWMgPCAxMDA7CisKKy0tIFRoaXMgdXBkYXRlIG1vZGlmaWVzIHRoZSB2YWx1ZSBv ZiAnYScsIGFuIGluZGV4ZWQgZmllbGQsIHNvIGl0IGFsc28gY2Fubm90CistLSBiZSBhIEhPVCB1 cGRhdGUuCitVUERBVEUgdCBTRVQgZG9jcyA9IGpzb25iX2J1aWxkX29iamVjdCgnYScsIDEsICdi JywgMTApIFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID0gMTA7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzIGJvdGggJ2EnIGFu ZCAnYicgdG8gbmV3IHZhbHVlcyB0aGlzIGNhbm5vdCB1c2UgdGhlIEhPVCBwYXRoLgorVVBEQVRF IHQgU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2EnLCAyLCAnYicsIDEyKSBXSEVSRSAo ZG9jcy0+J2InKTo6bnVtZXJpYyA9IDEwOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygxKTsKKworLS0gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IGNvbnRhaW5zIHRo ZSBuZXcgdmFsdWUgb2YgJ2InCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBX SEVSRSAoZG9jcy0+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4nYicpOjpudW1lcmljIDwg MTAwOworU0VMRUNUICogRlJPTSB0IFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID4gOSBBTkQg KGRvY3MtPidiJyk6Om51bWVyaWMgPCAxMDA7CisKKy0tIFRoaXMgdXBkYXRlIGNoYW5nZXMgJ2In IHRvIGEgdmFsdWUgb3V0c2lkZSBpdHMgcHJlZGljYXRlIHJlcXVpcmluZyB0aGF0CistLSB3ZSBy ZW1vdmUgaXQgZnJvbSB0aGUgaW5kZXguICBUaGF0J3MgYSB0cmFuc2l0aW9uIHRoYXQgY2FuJ3Qg YmUgZG9uZQorLS0gZHVyaW5nIGEgSE9UIHVwZGF0ZS4KK1VQREFURSB0IFNFVCBkb2NzID0ganNv bmJfYnVpbGRfb2JqZWN0KCdhJywgMiwgJ2InLCAxKSBXSEVSRSAoZG9jcy0+J2InKTo6bnVtZXJp YyA9IDEyOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworLS0gQ2hlY2sg dG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IG5vIGxvbmdlciBjb250YWlucyB0aGUgdmFsdWUg b2YgJ2InCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVSRSAoZG9jcy0+ J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4nYicpOjpudW1lcmljIDwgMTAwOworU0VMRUNU ICogRlJPTSB0IFdIRVJFIChkb2NzLT4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPidiJyk6 Om51bWVyaWMgPCAxMDA7CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworU0VUIFNFU1NJT04gZW5h YmxlX3NlcXNjYW4gPSBPTjsKK1NFVCBTRVNTSU9OIGVuYWJsZV9iaXRtYXBzY2FuID0gT047CisK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKy0tIFRlc3RzIHRvIGNoZWNrIGV4cHJlc3Npb24gaW5kZXhlcworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorQ1JFQVRFIFRBQkxFIHQoYSBJTlQsIGIgSU5UKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHhfYSBPTiB0KGFi cyhhKSkgV0hFUkUgYWJzKGEpID4gMTA7CitDUkVBVEUgSU5ERVggdF9pZHhfYiBPTiB0KGFicyhi KSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoLTEsIC0xKSwgKC0yLCAtMiksICgtMywgLTMpLCAo LTQsIC00KSwgKC01LCAtNSk7CitJTlNFUlQgSU5UTyB0IFNFTEVDVCBtLCBuIEZST00gZ2VuZXJh dGVfc2VyaWVzKC0xMDAwMCwgLTEwKSBBUyBtLCBhYnMobSkgQVMgbjsKK1NFVCBTRVNTSU9OIGVu YWJsZV9zZXFzY2FuID0gT0ZGOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPRkY7 CisKKy0tIFRoZSBpbmRleGVkIHZhbHVlIG9mIGIgaGFzbid0IGNoYW5nZWQsIHRoaXMgc2hvdWxk IGJlIGEgSE9UIHVwZGF0ZS4KKy0tICgtNSwgLTUpIC0+ICgtNSwgMSkKK1VQREFURSB0IFNFVCBi ID0gNSBXSEVSRSBhID0gLTU7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgYiAgRlJPTSB0IFdIRVJFIGFicyhiKSA8IDEwIEFO RCBhYnMoYikgPiAwOworU0VMRUNUIGIgRlJPTSB0IFdIRVJFIGFicyhiKSA8IDEwIEFORCBhYnMo YikgPiAwOworCistLSBOb3cgdGhhdCB3ZSdyZSBub3QgY2hlY2tpbmcgdGhlIHByZWRpY2F0ZSBv ZiB0aGUgcGFydGlhbCBpbmRleCwgdGhpcworLS0gdXBkYXRlIG9mIGEgZnJvbSAtNSB0byA1IHNo b3VsZCBiZSBIT1QgYmVjYXVzZSB3ZSBzaG91bGQgaWdub3JlIHRoZQorLS0gcHJlZGljYXRlIGFu ZCBjaGVjayB0aGUgZXhwcmVzc2lvbiBhbmQgZmluZCBpdCB1bmNoYW5nZWQuCistLSAoLTUsIDEp IC0+ICg1LCAxKQorVVBEQVRFIHQgU0VUIGEgPSA1IFdIRVJFIGEgPSAtNTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CisKKy0tIFRoaXMgdXBkYXRlIG1vdmVzIGEgaW50byB0 aGUgcGFydGlhbCBpbmRleCBhbmQgc2hvdWxkIG5vdAorLS0gYmUgSE9ULiAgTGV0J3MgbWFrZSBz dXJlIG9mIHRoYXQgYW5kIGNoZWNrIHRoZSBpbmRleCBhcyB3ZWxsLgorLS0gKC00LCAtNCkgLT4g KC0xMSwgLTQpCitVUERBVEUgdCBTRVQgYSA9IC0xMSBXSEVSRSBhID0gLTQ7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBG Uk9NIHQgV0hFUkUgYWJzKGEpID4gMTAgQU5EIGFicyhhKSA8IDE1OworU0VMRUNUICogRlJPTSB0 IFdIRVJFIGFicyhhKSA+IDEwIEFORCBhYnMoYSkgPCAxNTsKKworLS0gKC0xMSwgLTQpIC0+ICgx MSwgLTQpCitVUERBVEUgdCBTRVQgYSA9IDExIFdIRVJFIGIgPSAtNDsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00g dCBXSEVSRSBhYnMoYSkgPiAxMCBBTkQgYWJzKGEpIDwgMTU7CitTRUxFQ1QgKiBGUk9NIHQgV0hF UkUgYWJzKGEpID4gMTAgQU5EIGFicyhhKSA8IDE1OworCistLSAoMTEsIC00KSAtPiAoLTQsIC00 KQorVVBEQVRFIHQgU0VUIGEgPSAtNCBXSEVSRSBiID0gLTQ7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDMpOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHQgV0hF UkUgYWJzKGEpID4gMTAgQU5EIGFicyhhKSA8IDE1OworU0VMRUNUICogRlJPTSB0IFdIRVJFIGFi cyhhKSA+IDEwIEFORCBhYnMoYSkgPCAxNTsKKworLS0gVGhpcyB1cGRhdGUgb2YgYSBmcm9tIDUg dG8gLTEgaXMgSE9UIGRlc3BpdGUgdGhhdCBhdHRyaWJ1dGUKKy0tIGJlaW5nIGluZGV4ZWQgYmVj YXVzZSB0aGUgYmVmb3JlIGFuZCBhZnRlciB2YWx1ZXMgZm9yIHRoZQorLS0gcGFydGlhbCBpbmRl eCBwcmVkaWNhdGUgYXJlIG91dHNpZGUgdGhlIGluZGV4IGRlZmluaXRpb24uCistLSAoNSwgMSkg LT4gKC0xLCAxKQorVVBEQVRFIHQgU0VUIGEgPSAtMSBXSEVSRSBhID0gNTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoNCk7CisKKy0tIFRoaXMgdXBkYXRlIG9mIGEgZnJvbSAtMiB0 byAtMSB3aWxsIGJlIEhPVCBiZWNhdXNlIHRoZSBiZWZvcmUvYWZ0ZXIgdmFsdWVzCistLSBvZiBh IGFyZSBib3RoIG91dHNpZGUgdGhlIHByZWRpY2F0ZSBvZiB0aGUgcGFydGlhbCBpbmRleC4KKy0t ICgtMSwgMSkgLT4gKC0yLCAxKQorVVBEQVRFIHQgU0VUIGEgPSAtMiBXSEVSRSBiID0gLTI7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDUpOworCistLSBUaGUgaW5kZXhlZCB2YWx1 ZSBmb3IgYiBpc24ndCBjaGFuZ2luZywgdGhpcyBzaG91bGQgYmUgSE9ULgorLS0gKC0yLCAtMikg LT4gKC0yLCAyKQorVVBEQVRFIHQgU0VUIGIgPSAyIFdIRVJFIGIgPSAtMjsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoNik7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBiIEZS T00gdCBXSEVSRSBhYnMoYikgPCAxMCBBTkQgYWJzKGIpID4gMDsKK1NFTEVDVCBiIEZST00gdCBX SEVSRSBhYnMoYikgPCAxMCBBTkQgYWJzKGIpID4gMDsKKworU0VMRUNUICogRlJPTSB0IHdoZXJl IGEgPiAtMTAgQU5EIGEgPCAxMDsKKworLS0gQmVmb3JlIGFuZCBhZnRlciB2YWx1ZXMgZm9yIGEg YXJlIG91dHNpZGUgdGhlIHByZWRpY2F0ZSBvZiB0aGUgaW5kZXgsCistLSBhbmQgYmVjYXVzZSB3 ZSdyZSBjaGVja2luZyB0aGlzIHNob3VsZCBiZSBIT1QuCistLSAoLTIsIDEpIC0+ICg1LCAxKQor LS0gKC0yLCAtMikgLT4gKDUsIC0yKQorVVBEQVRFIHQgU0VUIGEgPSA1IFdIRVJFIGEgPSAtMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoOCk7CisKK0VYUExBSU4gKENPU1RTIE9G RikgU0VMRUNUICogRlJPTSB0IFdIRVJFIGFicyhhKSA+IDEwIEFORCBhYnMoYSkgPCAxNTsKK1NF TEVDVCAqIEZST00gdCBXSEVSRSBhYnMoYSkgPiAxMCBBTkQgYWJzKGEpIDwgMTU7CisKK0RST1Ag VEFCTEUgdCBDQVNDQURFOworU0VUIFNFU1NJT04gZW5hYmxlX3NlcXNjYW4gPSBPTjsKK1NFVCBT RVNTSU9OIGVuYWJsZV9iaXRtYXBzY2FuID0gT047CisKKworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gSlNPTkIg d2l0aCB0d28gaW5kZXhlcyBlYWNoIG9uIHNlcGFyYXRlIGZpZWxkcywgb25lIHBhcnRpYWwKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGRvY3MgSlNPTkIpIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfaWR4IE9O IHQoKGRvY3MtPidhJykpIFdIRVJFIChkb2NzLT4nYicpOjppbnRlZ2VyID0gMTsKK0lOU0VSVCBJ TlRPIHQgVkFMVUVTICgneyJhIjogMSwgImIiOiAxfScpOworCitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAqIEZST00gdDsKK1NFTEVDVCAqIEZST00gdDsKKworU0VUIFNFU1NJT04gZW5hYmxl X3NlcXNjYW4gPSBPRkY7CitTRVQgU0VTU0lPTiBlbmFibGVfYml0bWFwc2NhbiA9IE9GRjsKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgKGRvY3MtPidiJyk6Omlu dGVnZXIgPSAxOworU0VMRUNUICogRlJPTSB0IFdIRVJFIChkb2NzLT4nYicpOjppbnRlZ2VyID0g MTsKKworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKworVVBEQVRFIHQgU0VU IGRvY3M9J3siYSI6IDEsICJiIjogMH0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygwKTsKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIChkb2NzLT4nYicpOjppbnRlZ2VyID0gMTsK KworU0VUIFNFU1NJT04gZW5hYmxlX3NlcXNjYW4gPSBPTjsKK1NFVCBTRVNTSU9OIGVuYWJsZV9i aXRtYXBzY2FuID0gT047CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCisKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIFRlc3RzIGZvciBtdWx0aS1jb2x1bW4gaW5kZXhlcworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRB QkxFIHQoaWQgSU5ULCBkb2NzIEpTT05CKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYs IGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9kb2NzX2lkeCBPTiB0KGlkLCAoZG9j cy0+J2EnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3siYSI6IDEsICJiIjogMX0nKTsK KworU0VUIFNFU1NJT04gZW5hYmxlX3NlcXNjYW4gPSBPRkY7CitTRVQgU0VTU0lPTiBlbmFibGVf Yml0bWFwc2NhbiA9IE9GRjsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHQg V0hFUkUgaWQgPiAwIEFORCAoZG9jcy0+J2EnKTo6aW50ZWdlciA+IDA7CitTRUxFQ1QgKiBGUk9N IHQgV0hFUkUgaWQgPiAwIEFORCAoZG9jcy0+J2EnKTo6aW50ZWdlciA+IDA7CisKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisKKy0tIENoYW5naW5nIHRoZSBpZCBhdHRyaWJ1 dGUgd2hpY2ggaXMgYW4gaW5kZXhlZCBhdHRyaWJ1dGUgc2hvdWxkCistLSBwcmV2ZW50IEhPVCB1 cGRhdGVzLgorVVBEQVRFIHQgU0VUIGlkID0gMjsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMCk7CisKK1NFTEVDVCAqIEZST00gdCBXSEVSRSBpZCA+IDAgQU5EIChkb2NzLT4nYScp OjppbnRlZ2VyID4gMDsKKworLS0gQ2hhbmdpbmcgdGhlIGRvY3MtPidhJyBmaWVsZCBpbiB0aGUg aW5kZXhlZCBhdHRyaWJ1dGUgJ2RvY3MnCistLSBzaG91bGQgcHJldmVudCBIT1QgdXBkYXRlcy4K K1VQREFURSB0IFNFVCBkb2NzPSd7ImEiOiAtMiwgImIiOiAxfSc7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDApOworCitTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgaWQgPiAwIEFORCAo ZG9jcy0+J2EnKTo6aW50ZWdlciA8IDA7CisKKy0tIExlYXZpbmcgdGhlIGRvY3MtPidhJyBhdHRy aWJ1dGUgdW5jaGFuZ2VkIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24KKy0tIGlzIHVuY2hhbmdl ZCBhbmQgYmVjYXVzZSB0aGUgJ2lkJyBhdHRyaWJ1dGUgaXNuJ3QgaW4gdGhlIG1vZGlmaWVkCist LSBzZXQgdGhlIGluZGV4ZWQgdHVwbGUgaXMgdW5jaGFuZ2VkLCB0aGlzIGNhbiBnbyBIT1QuCitV UERBVEUgdCBTRVQgZG9jcz0neyJhIjogLTIsICJiIjogMn0nOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxKTsKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIGlkID4gMCBBTkQgKGRv Y3MtPidhJyk6OmludGVnZXIgPCAwOworCistLSBIZXJlIHdlIGNoYW5nZSB0aGUgJ2lkJyBhdHRy aWJ1dGUgYW5kIHRoZSAnZG9jcycgYXR0cmlidXRlIHNldHRpbmcKKy0tIHRoZSBleHByZXNzaW9u IGRvY3MtPidhJyB0byBhIG5ldyB2YWx1ZSwgdGhpcyBjYW5ub3QgYmUgYSBIT1QgdXBkYXRlLgor VVBEQVRFIHQgU0VUIGlkID0gMywgZG9jcz0neyJhIjogMywgImIiOiAzfSc7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCitTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgaWQgPiAw IEFORCAoZG9jcy0+J2EnKTo6aW50ZWdlciA+IDA7CisKK1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFz Y2FuID0gT047CitTRVQgU0VTU0lPTiBlbmFibGVfYml0bWFwc2NhbiA9IE9OOworCitEUk9QIFRB QkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gUmVsYXRpb24gd2l0aCB1bmlxdWUgY29u c3RyYWludCwgcGFydGlhbCBpbmRleAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHVzZXJzICgK KyAgICB1c2VyX2lkIHNlcmlhbCBwcmltYXJ5IGtleSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSBO T1QgTlVMTCwKKyAgICBlbWFpbCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCisgICAgRVhDTFVERSBV U0lORyBidHJlZSAobG93ZXIoZW1haWwpIFdJVEggPSkKKyk7CisKKy0tIEFkZCBzb21lIGRhdGEg dG8gdGhlIHRhYmxlIGFuZCB0aGVuIHVwZGF0ZSBpdCBpbiB3YXlzIHRoYXQgc2hvdWxkIGFuZCBz aG91bGQKKy0tIG5vdCBiZSBIT1QgdXBkYXRlcy4KK0lOU0VSVCBJTlRPIHVzZXJzIChuYW1lLCBl bWFpbCkgVkFMVUVTCisoJ3VzZXIxJywgJ3VzZXIxQGV4YW1wbGUuY29tJyksCisoJ3VzZXIyJywg J3VzZXIyQGV4YW1wbGUuY29tJyksCisoJ3Rha2VuJywgJ3Rha2VuQEVYQU1QTEUuY29tJyksCiso J3lvdScsICd5b3VAZG9tYWluLmNvbScpLAorKCd0YWtlbicsICd0YWtlbkBkb21haW4uY29tJyk7 CisKKy0tIFNob3VsZCBmYWlsIGJlY2F1c2Ugb2YgdGhlIHVuaXF1ZSBjb25zdHJhaW50IG9uIHRo ZSBlbWFpbCBjb2x1bW4uCitVUERBVEUgdXNlcnMgU0VUIGVtYWlsID0gJ3VzZXIxQGV4YW1wbGUu Y29tJyBXSEVSRSBlbWFpbCA9ICd1c2VyMkBleGFtcGxlLmNvbSc7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDAsICd1c2VycycpOworCistLSBTaG91bGQgc3VjY2VlZCBiZWNhdXNl IHRoZSBlbWFpbCBjb2x1bW4gaXMgbm90IGJlaW5nIHVwZGF0ZWQgYW5kIHNob3VsZCBnbyBIT1Qu CitVUERBVEUgdXNlcnMgU0VUIG5hbWUgPSAnZm9vJyBXSEVSRSBlbWFpbCA9ICd1c2VyMUBleGFt cGxlLmNvbSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd1c2VycycpOwor CistLSBDcmVhdGUgYSBwYXJ0aWFsIGluZGV4IG9uIHRoZSBlbWFpbCBjb2x1bW4sIHVwZGF0ZXMK K0NSRUFURSBJTkRFWCBpZHhfdXNlcnNfZW1haWxfbm9fZXhhbXBsZSBPTiB1c2VycyAobG93ZXIo ZW1haWwpKSBXSEVSRSBsb3dlcihlbWFpbCkgTElLRSAnJUBleGFtcGxlLmNvbSUnOworCistLSBB biB1cGRhdGUgdGhhdCBjaGFuZ2VzIHRoZSBlbWFpbCBjb2x1bW4gYnV0IG5vdCB0aGUgaW5kZXhl ZCBwb3J0aW9uIG9mIGl0IGFuZCBmYWxscyBvdXRzaWRlIHRoZSBjb25zdHJhaW50LgorLS0gU2hv dWxkbid0IGJlIGEgSE9UIHVwZGF0ZSBiZWNhdXNlIG9mIHRoZSBleGNsdXNpb24gY29uc3RyYWlu dC4KK1VQREFURSB1c2VycyBTRVQgZW1haWwgPSAneW91KzJAZG9tYWluLmNvbScgV0hFUkUgbmFt ZSA9ICd5b3UnOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndXNlcnMnKTsK KworLS0gQW4gdXBkYXRlIHRoYXQgY2hhbmdlcyB0aGUgZW1haWwgY29sdW1uIGJ1dCBub3QgdGhl IGluZGV4ZWQgcG9ydGlvbiBvZiBpdCBhbmQgZmFsbHMgd2l0aGluIHRoZSBjb25zdHJhaW50Lgor LS0gQWdhaW4sIHNob3VsZCBmYWlsIGNvbnN0cmFpbnQgYW5kIGZhaWwgdG8gYmUgYSBIT1QgdXBk YXRlLgorVVBEQVRFIHVzZXJzIFNFVCBlbWFpbCA9ICd0YWtlbkBkb21haW4uY29tJyBXSEVSRSBu YW1lID0gJ3lvdSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd1c2Vycycp OworCitEUk9QIFRBQkxFIHVzZXJzIENBU0NBREU7CisKKy0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIENvbnN0cmFp bnRzIHNwb2lsaW5nIEhPVCB1cGRhdGVzLCB0aGlzIHRpbWUgd2l0aCBhIHJhbmdlLgorLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorQ1JFQVRFIFRBQkxFIGV2ZW50cyAoCisgICAgaWQgc2VyaWFsIHByaW1hcnkga2V5LAor ICAgIG5hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgIGV2ZW50X3RpbWUgdHN0enJhbmdl LAorICAgIGNvbnN0cmFpbnQgbm9fc2NyZWVuaW5nX3RpbWVfb3ZlcmxhcCBleGNsdWRlIHVzaW5n IGdpc3QgKAorICAgICAgICBldmVudF90aW1lIFdJVEggJiYKKyAgICApCispOworCistLSBBZGQg dHdvIG5vbi1vdmVybGFwcGluZyBldmVudHMuCitJTlNFUlQgSU5UTyBldmVudHMgKGlkLCBldmVu dF90aW1lLCBuYW1lKQorVkFMVUVTCisgICAgKDEsICdbIjIwMjMtMDEtMDEgMTk6MDA6MDAiLCAi MjAyMy0wMS0wMSAyMDo0NTowMCJdJywgJ2V2ZW50MScpLAorICAgICgyLCAnWyIyMDIzLTAxLTAx IDIxOjAwOjAwIiwgIjIwMjMtMDEtMDEgMjE6NDU6MDAiXScsICdldmVudDInKTsKKworLS0gVXBk YXRlIHRoZSBmaXJzdCBldmVudCB0byBvdmVybGFwIHdpdGggdGhlIHNlY29uZCwgc2hvdWxkIGZh aWwgdGhlIGNvbnN0cmFpbnQgYW5kIG5vdCBiZSBIT1QuCitVUERBVEUgZXZlbnRzIFNFVCBldmVu dF90aW1lID0gJ1siMjAyMy0wMS0wMSAyMDowMDowMCIsICIyMDIzLTAxLTAxIDIxOjQ1OjAwIl0n IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ2V2ZW50 cycpOworCistLSBVcGRhdGUgdGhlIGZpcnN0IGV2ZW50IHRvIG5vdCBvdmVybGFwIHdpdGggdGhl IHNlY29uZCwgYWdhaW4gbm90IEhPVCBkdWUgdG8gdGhlIGNvbnN0cmFpbnQuCitVUERBVEUgZXZl bnRzIFNFVCBldmVudF90aW1lID0gJ1siMjAyMy0wMS0wMSAyMjowMDowMCIsICIyMDIzLTAxLTAx IDIyOjQ1OjAwIl0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMCwgJ2V2ZW50cycpOworCistLSBVcGRhdGUgdGhlIGZpcnN0IGV2ZW50IHRvIG5vdCBvdmVy bGFwIHdpdGggdGhlIHNlY29uZCwgdGhpcyB0aW1lIHdlJ3JlIEhPVCBiZWNhdXNlIHdlIGRvbid0 IG92ZXJsYXAgd2l0aCB0aGUgY29uc3RyYWludC4KK1VQREFURSBldmVudHMgU0VUIG5hbWUgPSAn bmV3IG5hbWUgaGVyZScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygxLCAnZXZlbnRzJyk7CisKK0RST1AgVEFCTEUgZXZlbnRzIENBU0NBREU7CisKKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKy0tIEVuc3VyZSB0aGF0IG9ubHkgdGhlIG1vZGlmaWVkIHN1bW1hcml6aW5nIGluZGV4 ZXMgYXJlIHVwZGF0ZWQuCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgZXggKGlkIFNFUklBTCBw cmltYXJ5IGtleSwgYXR0MSBKU09OQiwgYXR0MiB0ZXh0LCBhdHQzIHRleHQsIGF0dDQgdGV4dCkg V0lUSCAoZmlsbGZhY3RvciA9IDYwKTsKK0NSRUFURSBJTkRFWCBleF9leHByMV9pZHggT04gZXgg VVNJTkcgYnRyZWUoKGF0dDEtPidkYXRhJykpOworQ1JFQVRFIElOREVYIGV4X3N1bXIxX2lkeCBP TiBleCBVU0lORyBCUklOKGF0dDIpOworQ1JFQVRFIElOREVYIGV4X2V4cHIyX2lkeCBPTiBleCBV U0lORyBidHJlZSgoYXR0MS0+J2EnKSk7CitDUkVBVEUgSU5ERVggZXhfZXhwcjNfaWR4IE9OIGV4 IFVTSU5HIGJ0cmVlKChhdHQxLT4nYicpKTsKK0NSRUFURSBJTkRFWCBleF9leHByNF9pZHggT04g ZXggVVNJTkcgYnRyZWUoKGF0dDEtPidjJykpOworQ1JFQVRFIElOREVYIGV4X3N1bXIyX2lkeCBP TiBleCBVU0lORyBCUklOKGF0dDMpOworQ1JFQVRFIElOREVYIGV4X3N1bXIzX2lkeCBPTiBleCBV U0lORyBCUklOKGF0dDQpOworQ1JFQVRFIElOREVYIGV4X2V4cHI1X2lkeCBPTiBleCBVU0lORyBi dHJlZSgoYXR0MS0+J2QnKSk7CitJTlNFUlQgSU5UTyBleCAoYXR0MSwgYXR0MikgVkFMVUVTICgn eyJkYXRhIjogW119Jzo6anNvbiwgJ25vdGhpbmcgc3BlY2lhbCcpOworCitTRUxFQ1QgKiBGUk9N IGV4OworCistLSBVcGRhdGUgYXR0MiBhbmQgYXR0NCBib3RoIGFyZSBCUklOL3N1bW1hcml6aW5n IGluZGV4ZXMsIHRoaXMgc2hvdWxkIGJlIGEgSE9UIHVwZGF0ZSBhbmQKKy0tIG9ubHkgdXBkYXRl IHR3byBvZiB0aGUgdGhyZWUgc3VtbWFyaXppbmcgaW5kZXhlcy4KK1VQREFURSBleCBTRVQgYXR0 MiA9ICdzcGVjaWFsIGluZGVlZCcsIGF0dDQgPSAnd2hhdGV2ZXInOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygxLCAnZXgnKTsKK1NFTEVDVCAqIEZST00gZXg7CisKKy0tIFVwZGF0 ZSBhdHQxIGFuZCBhdHQyLCBvbmx5IG9uZSBpcyBCUklOL3N1bW1hcml6aW5nLCB0aGlzIHNob3Vs ZCBOT1QgYmUgYSBIT1QgdXBkYXRlLgorVVBEQVRFIGV4IFNFVCBhdHQxID0gYXR0MSB8fCAneyJk YXRhIjogImhvd2R5In0nLCBhdHQyID0gJ3NwZWNpYWwsIHNvIHNwZWNpYWwnOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAnZXgnKTsKK1NFTEVDVCAqIEZST00gZXg7CisKKy0t IFVwZGF0ZSBhdHQyLCBhdHQzLCBhbmQgYXR0NCBhbGwgYXJlIEJSSU4vc3VtbWFyaXppbmcgaW5k ZXhlcywgdGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlCistLSBhbmQgeWV0IHN0aWxsIHVwZGF0 ZSBhbGwgdGhyZWUgc3VtbWFyaXppbmcgaW5kZXhlcy4KK1VQREFURSBleCBTRVQgYXR0MiA9ICdh JywgYXR0MyA9ICdiJywgYXR0NCA9ICdjJzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMiwgJ2V4Jyk7CitTRUxFQ1QgKiBGUk9NIGV4OworCistLSBVcGRhdGUgYXR0MSwgYXR0Miwg YW5kIGF0dDMgYWxsIG1vZGlmaWVkIHZhbHVlcyBhcmUgQlJJTi9zdW1tYXJpemluZyBpbmRleGVz LCB0aGlzIHNob3VsZCBiZSBhIEhPVCB1cGRhdGUKKy0tIGFuZCB5ZXQgc3RpbGwgdXBkYXRlIGFs bCB0aHJlZSBzdW1tYXJpemluZyBpbmRleGVzLgorVVBEQVRFIGV4IFNFVCBhdHQxID0gJ3siZGF0 YSI6ICJob3dkeSJ9JywgYXR0MiA9ICdkJywgYXR0MyA9ICdlJzsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMywgJ2V4Jyk7CitTRUxFQ1QgKiBGUk9NIGV4OworCitEUk9QIFRBQkxF IGV4IENBU0NBREU7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIERvbid0IHVwZGF0ZSB1bm1vZGlmaWVkIHN1 bW1hcml6aW5nIGluZGV4ZXMgYnV0IGRvIGFsbG93IEhPVAorLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRB QkxFIGV4IChhdHQxIEpTT05CLCBhdHQyIHRleHQpIFdJVEggKGZpbGxmYWN0b3IgPSA2MCk7CitD UkVBVEUgSU5ERVggZXhfZXhwcjFfaWR4IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQxLT4nZGF0YScp KTsKK0NSRUFURSBJTkRFWCBleF9zdW1yMV9pZHggT04gZXggVVNJTkcgQlJJTihhdHQyKTsKK0lO U0VSVCBJTlRPIGV4IFZBTFVFUyAoJ3siZGF0YSI6IFtdfScsICdub3RoaW5nIHNwZWNpYWwnKTsK KworLS0gVXBkYXRlIHRoZSB1bmluZGV4ZWQgdmFsdWUgb2YgYXR0MSwgdGhpcyBzaG91bGQgYmUg YSBIT1QgdXBkYXRlIGFuZCBhbmQgc2hvdWxkCistLSB1cGRhdGUgdGhlIHN1bW1hcml6aW5nIGlu ZGV4LgorVVBEQVRFIGV4IFNFVCBhdHQxID0gYXR0MSB8fCAneyJzdGF0dXMiOiAic3RhbGVtYXRl In0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAnZXgnKTsKKworLS0gVXBk YXRlIHRoZSBpbmRleGVkIHZhbHVlIG9mIGF0dDIsIGEgc3VtbWFyaXplZCB2YWx1ZSwgdGhpcyBp cyBhIHN1bW1hcml6ZWQKKy0tIG9ubHkgdXBkYXRlIGFuZCBzaG91bGQgdXNlIHRoZSBIT1QgcGF0 aCB3aGlsZSBzdGlsbCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZSB0bworLS0gdGhlIHN1bW1hcml6aW5n IEJSSU4gaW5kZXguCitVUERBVEUgZXggU0VUIGF0dDIgPSAnc3BlY2lhbCBpbmRlZWQnOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyLCAnZXgnKTsKKworLS0gVXBkYXRlIHRvIGF0 dDEgZG9lc24ndCBjaGFuZ2UgdGhlIGluZGV4ZWQgdmFsdWUgd2hpbGUgdGhlIHVwZGF0ZSB0byBh dHQyIGRvZXMsCistLSB0aGlzIGFnYWluIGlzIGEgc3VtbWFyaXplZCBvbmx5IHVwZGF0ZSBhbmQg c2hvdWxkIHVzZSB0aGUgSE9UIHBhdGggYXMgd2VsbCBhcworLS0gdHJpZ2dlciBhbiB1cGRhdGUg dG8gdGhlIEJSSU4gaW5kZXguCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQxIHx8ICd7InN0YXR1 cyI6ICJjaGVja21hdGUifScsIGF0dDIgPSAnc3BlY2lhbCwgc28gc3BlY2lhbCc7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMsICdleCcpOworCistLSBUaGlzIHVwZGF0ZXMgYm90 aCBpbmRleGVzLCB0aGUgZXhwcmVzc2lvbiBpbmRleCBvbiBhdHQxIGFuZCB0aGUgc3VtbWFyaXpp bmcKKy0tIGluZGV4IG9uIGF0dDIuICBUaGlzIHNob3VsZCBub3QgYmUgYSBIT1QgdXBkYXRlIGJl Y2F1c2UgdGhlcmUgYXJlIG1vZGlmaWVkCistLSBpbmRleGVzIGFuZCBvbmx5IHNvbWUgYXJlIHN1 bW1hcml6ZWQsIG5vdCBhbGwuICBUaGlzIHNob3VsZCBmb3JjZSBhbGwKKy0tIGluZGV4ZXMgdG8g YmUgdXBkYXRlZC4KK1VQREFURSBleCBTRVQgYXR0MSA9IGF0dDEgfHwgJ3siZGF0YSI6IFsxLDIs M119JywgYXR0MiA9ICdkbyB5b3Ugd2FudCB0byBwbGF5IGEgZ2FtZT8nOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygzLCAnZXgnKTsKKworRFJPUCBUQUJMRSBleCBDQVNDQURFOwor CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLSBFbnN1cmUgY3VzdG9tIHR5cGUgZXF1YWxpdHkgb3BlcmF0b3JzIGFy ZSB1c2VkCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKK0NSRUFURSBUWVBFIG15X2N1c3RvbV90eXBlIEFTICh2YWwg aW50KTsKKworLS0gQ29tcGFyaXNvbiBmdW5jdGlvbnMgKHJldHVybnMgYm9vbGVhbikKK0NSRUFU RSBGVU5DVElPTiBteV9jdXN0b21fbHQoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlw ZSkgUkVUVVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA8IGIudmFs OworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUg RlVOQ1RJT04gbXlfY3VzdG9tX2xlKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUp IFJFVFVSTlMgYm9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgPD0gYi52YWw7 CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBG VU5DVElPTiBteV9jdXN0b21fZXEoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkg UkVUVVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA9IGIudmFsOwor RU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVO Q1RJT04gbXlfY3VzdG9tX2dlKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJF VFVSTlMgYm9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgPj0gYi52YWw7CitF TkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5D VElPTiBteV9jdXN0b21fZ3QoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVU VVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA+IGIudmFsOworRU5E OworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJ T04gbXlfY3VzdG9tX25lKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVS TlMgYm9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgIT0gYi52YWw7CitFTkQ7 CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CisKKy0tIENvbXBhcmlzb24g ZnVuY3Rpb24gKHJldHVybnMgLTEsIDAsIDEpCitDUkVBVEUgRlVOQ1RJT04gbXlfY3VzdG9tX2Nt cChhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGludCBBUyAkJAor QkVHSU4KKyAgICBJRiBhLnZhbCA8IGIudmFsIFRIRU4KKyAgICAgICAgUkVUVVJOIC0xOworICAg IEVMU0lGIGEudmFsID4gYi52YWwgVEhFTgorICAgICAgICBSRVRVUk4gMTsKKyAgICBFTFNFCisg ICAgICAgIFJFVFVSTiAwOworICAgIEVORCBJRjsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwg SU1NVVRBQkxFIFNUUklDVDsKKworLS0gQ3JlYXRlIHRoZSBvcGVyYXRvcnMKK0NSRUFURSBPUEVS QVRPUiA8ICgKKyAgICBMRUZUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBt eV9jdXN0b21fdHlwZSwKKyAgICBQUk9DRURVUkUgPSBteV9jdXN0b21fbHQsCisgICAgQ09NTVVU QVRPUiA9ID4sCisgICAgTkVHQVRPUiA9ID49CispOworCitDUkVBVEUgT1BFUkFUT1IgPD0gKAor ICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90 eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9sZSwKKyAgICBDT01NVVRBVE9SID0gPj0s CisgICAgTkVHQVRPUiA9ID4KKyk7CisKK0NSRUFURSBPUEVSQVRPUiA9ICgKKyAgICBMRUZUQVJH ID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBQ Uk9DRURVUkUgPSBteV9jdXN0b21fZXEsCisgICAgQ09NTVVUQVRPUiA9ID0sCisgICAgTkVHQVRP UiA9IDw+CispOworCitDUkVBVEUgT1BFUkFUT1IgPj0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0 b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9 IG15X2N1c3RvbV9nZSwKKyAgICBDT01NVVRBVE9SID0gPD0sCisgICAgTkVHQVRPUiA9IDwKKyk7 CisKK0NSRUFURSBPUEVSQVRPUiA+ICgKKyAgICBMRUZUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisg ICAgUklHSFRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBQUk9DRURVUkUgPSBteV9jdXN0b21f Z3QsCisgICAgQ09NTVVUQVRPUiA9IDwsCisgICAgTkVHQVRPUiA9IDw9CispOworCitDUkVBVEUg T1BFUkFUT1IgPD4gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFS RyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9uZSwKKyAgICBD T01NVVRBVE9SID0gPD4sCisgICAgTkVHQVRPUiA9ID0KKyk7CisKKy0tIENyZWF0ZSB0aGUgb3Bl cmF0b3IgY2xhc3MgKGluY2x1ZGluZyB0aGUgc3VwcG9ydCBmdW5jdGlvbikKK0NSRUFURSBPUEVS QVRPUiBDTEFTUyBteV9jdXN0b21fb3BzCisgICAgREVGQVVMVCBGT1IgVFlQRSBteV9jdXN0b21f dHlwZSBVU0lORyBidHJlZSBBUworICAgIE9QRVJBVE9SIDEgPCwKKyAgICBPUEVSQVRPUiAyIDw9 LAorICAgIE9QRVJBVE9SIDMgPSwKKyAgICBPUEVSQVRPUiA0ID49LAorICAgIE9QRVJBVE9SIDUg PiwKKyAgICBGVU5DVElPTiAxIG15X2N1c3RvbV9jbXAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3Rv bV90eXBlKTsKKworLS0gQ3JlYXRlIHRoZSB0YWJsZQorQ1JFQVRFIFRBQkxFIG15X3RhYmxlICgK KyAgICBpZCBpbnQsCisgICAgY3VzdG9tX3ZhbCBteV9jdXN0b21fdHlwZQorKTsKKworLS0gSW5z ZXJ0IHNvbWUgZGF0YQorSU5TRVJUIElOVE8gbXlfdGFibGUgKGlkLCBjdXN0b21fdmFsKSBWQUxV RVMKKygxLCBST1coMyk6Om15X2N1c3RvbV90eXBlKSwKKygyLCBST1coMSk6Om15X2N1c3RvbV90 eXBlKSwKKygzLCBST1coNCk6Om15X2N1c3RvbV90eXBlKSwKKyg0LCBST1coMik6Om15X2N1c3Rv bV90eXBlKTsKKworLS0gQ3JlYXRlIGEgZnVuY3Rpb24gdG8gdXNlIHdoZW4gaW5kZXhpbmcKK0NS RUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFic192YWwodmFsIG15X2N1c3RvbV90eXBlKSBSRVRV Uk5TIGludCBBUyAkJAorQkVHSU4KKyAgUkVUVVJOIGFicyh2YWwudmFsKTsKK0VORDsKKyQkIExB TkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKKworLS0gQ3JlYXRlIHRoZSBpbmRleAor Q1JFQVRFIElOREVYIGlkeF9jdXN0b21fdmFsX2FicyBPTiBteV90YWJsZSAoYWJzX3ZhbChjdXN0 b21fdmFsKSk7CisKKy0tIFVwZGF0ZSAxCitVUERBVEUgbXlfdGFibGUgU0VUIGN1c3RvbV92YWwg PSBST1coNSk6Om15X2N1c3RvbV90eXBlIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMCwgJ215X3RhYmxlJyk7CisKKy0tIFVwZGF0ZSAyCitVUERBVEUgbXlf dGFibGUgU0VUIGN1c3RvbV92YWwgPSBST1coMCk6Om15X2N1c3RvbV90eXBlIFdIRVJFIGN1c3Rv bV92YWwgPCBST1coMyk6Om15X2N1c3RvbV90eXBlOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygwLCAnbXlfdGFibGUnKTsKKworLS0gVXBkYXRlIDMKK1VQREFURSBteV90YWJsZSBT RVQgY3VzdG9tX3ZhbCA9IFJPVyg2KTo6bXlfY3VzdG9tX3R5cGUgV0hFUkUgaWQgPSAzOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAnbXlfdGFibGUnKTsKKworLS0gVXBkYXRl IDQKK1VQREFURSBteV90YWJsZSBTRVQgaWQgPSA1IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ215X3RhYmxlJyk7CisKKy0tIFF1ZXJ5IHVzaW5nIHRo ZSBpbmRleAorU0VMRUNUICogRlJPTSBteV90YWJsZSBXSEVSRSBhYnNfdmFsKGN1c3RvbV92YWwp ID0gNjsKKworLS0gQ2xlYW4gdXAgdGVzdCBjYXNlCitEUk9QIFRBQkxFIG15X3RhYmxlIENBU0NB REU7CitEUk9QIE9QRVJBVE9SIENMQVNTIG15X2N1c3RvbV9vcHMgVVNJTkcgYnRyZWUgQ0FTQ0FE RTsKK0RST1AgT1BFUkFUT1IgPCAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RS T1AgT1BFUkFUT1IgPD0gKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIE9Q RVJBVE9SID0gKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIE9QRVJBVE9S ID49IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBPUEVSQVRPUiA+ICht eV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBPUEVSQVRPUiA8PiAobXlfY3Vz dG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJT04gbXlfY3VzdG9tX2x0KG15 X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1c3RvbV9s ZShteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBteV9jdXN0 b21fZXEobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJT04gbXlf Y3VzdG9tX2dlKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9O IG15X2N1c3RvbV9ndChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5D VElPTiBteV9jdXN0b21fbmUobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1Ag RlVOQ1RJT04gbXlfY3VzdG9tX2NtcChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOwor RFJPUCBGVU5DVElPTiBhYnNfdmFsKG15X2N1c3RvbV90eXBlKTsKK0RST1AgVFlQRSBteV9jdXN0 b21fdHlwZSBDQVNDQURFOworCistLSBDbGVhbnVwCitEUk9QIEZVTkNUSU9OIGNoZWNrX2hvdF91 cGRhdGVzKGludCwgdGV4dCwgdGV4dCk7CitEUk9QIENPTExBVElPTiBjYXNlX2luc2Vuc2l0aXZl OwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAyN2E0ZDEzMTg5Ny4uMWVhY2U1NzQ5OTQg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTAsNiArMzkwLDcgQEAgQ2FjaGVkRnVu Y3Rpb25Db21waWxlQ2FsbGJhY2sKIENhY2hlZEZ1bmN0aW9uRGVsZXRlQ2FsbGJhY2sKIENhY2hl ZEZ1bmN0aW9uSGFzaEVudHJ5CiBDYWNoZWRGdW5jdGlvbkhhc2hLZXkKK0NhY2hlZEluZGV4RGF0 dW0KIENhY2hlZFBsYW4KIENhY2hlZFBsYW5Tb3VyY2UKIENhbGxDb250ZXh0Ci0tIAoyLjQ5LjAK Cg== --69222b7f_511fa7db_1582--