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 1vomGD-00Dilm-1H for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Feb 2026 17:38:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vomGA-0073ST-0A for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Feb 2026 17:38:17 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vomG8-0073SK-1x for pgsql-hackers@lists.postgresql.org; Sat, 07 Feb 2026 17:38:17 +0000 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vomG3-000000011BM-3e79 for pgsql-hackers@lists.postgresql.org; Sat, 07 Feb 2026 17:38:15 +0000 Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-6581327d6baso4875520a12.3 for ; Sat, 07 Feb 2026 09:38:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770485890; cv=none; d=google.com; s=arc-20240605; b=gZRe+kxUGtmr7aY54zcXDCupGpLWcoLKkjcL+MvULlWpE7h4K04XWQXTAaeiRfemdN /tGSCrsnvRp5cHoGNHRcYEMvrXKXv32EUpxgPYGKG7VabB3JXVvQlEc3LT8XNabh8pjb /BHngNNPMIcO/zGmt0q7VkFx9OLljvzQmdMwKN/tb4zKBkd1CGhrn150JpfVts9igaAk FLcVwETKHiN69amAefSHObaUmZRWcHVDZ1K21d8/A+b9kaN1JuUsCOwOIIn2CdMxiqKW FRnftFn68MPszxPKS78GbugMtJWZMq8ziMlmFxM6wxT9ncnphF06KQtQgEal1o+k47bF wB1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Ctdtzu7fGRRYu4MMotjB5llT+NBaqd0zBNW1y2dXJJc=; fh=NUWH4M3sBJ3JX/f7jJELfxyHW4QlwO9OCTxfOjJ9vXU=; b=PB09uhWQJ6aVLrlkCtQUdhTAwheJMMXQfbg3K1o3E947gvPT8tQRvWfU3+85ZruJ5n ABE80MD5dhJ8E9NItt3iQ9gjGtialXYurvowNjIgb6NCZq6Ystpm4sya8z61AHu+BHbw mcfhx8UtRFNpbsnQPrw1dwMcN7FhqpnJeL+3d8MhVTRY5Wx0PhcOcAG4oas1lS/VLdHO uUqQJGnhI09mfPcZGgtmCPeypWS69k/4M2LxLTomQcpoc/6hQOACmS5KZLOZ4EDYSc7Y IzfGuwF+j6NADsClbV4AYnKKenKGGaJjP0b/wHlwZowANJdRBia1mIo/X+s1GaaimB5Z OecQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770485890; x=1771090690; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Ctdtzu7fGRRYu4MMotjB5llT+NBaqd0zBNW1y2dXJJc=; b=OSbAp2Stq1b84fP5v/eYv7wOZwzcmiL47eVG3uR9Q1SfHB3NBVxNxgSRyOyongd2EI aTS1LHRP/4YxcRpp5NcA5h0fNPE6fc/K8viqPjKc0HL3lBhRajGIqJrmbg+VTuiSAYBj aqu3ZNhJrxP0Hh2nx1u1zhET0B25EK7vPXTL1rVIUgkVD6rFCWm3/U3fBBQLwpC/cO9R 0lsP5rsh6NgZjJo/9WAh8J1ZspjKtEmDX1cseWRnvBOTMczNlS1RRHzOvVb95ACJiMqJ C8HD9yZcozq2YUW2PcwfI5nOOuFQVKRiXSs0IMBBSeQnSnX1nSH3d6Q1Jek14r6OIYpo V/Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770485890; x=1771090690; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Ctdtzu7fGRRYu4MMotjB5llT+NBaqd0zBNW1y2dXJJc=; b=ObTbkNgS2X8RD2y2mR3fjyv5oJYOXpklvFfxNfQ+On66VkDLfxgZ0oUOjMdeQ8vpOb TiHWtcP2omd0Ce0ktMp3k3sdYzQ6Y8YHZGG6M7fGjjpXZ0br3rkoU67L9zcFVELgbsl2 kPfw4VW0WZ+Cb3m+sjAq+zy8M2ppfpTPaq/ewBWCp28koGwYXpoI/1AKh2kxAXaPKYVy 3alom2sysCRurvNmafrt9RWmprdiqW8wJuqkq29+pisR2PL0oRQON/qEjnzSu6tOCtM3 CEnuXzGHzUVX64+QQwRZPaj/l6D3aVTcErA7YcMJl7J5jHMSlrz2ccVUAT/3Z0lKjh8E SGmA== X-Forwarded-Encrypted: i=1; AJvYcCVmT2Y8rUZHCOageabR4CQHduCJrPuKkhvs23rk12YSOTmKv5nMwwEJx0c6zC8wl6yCZL673xScYp3K4JC3@lists.postgresql.org X-Gm-Message-State: AOJu0YzsbQhp8sL0fcRt20pm6UJUkRVJxj/qIiPmYjC6W20h0hPb2CwT 3+2twrnr5FfnF/PZG1hRS/ixNnjxprpOeO10QXdKwlk2/ixXp4RAZk3pEl9cw6Wvtz4HzvMhi2R J7ajFbgkzFUfCPM6Bfytyfv5RxPT0dnA= X-Gm-Gg: AZuq6aI77aB5FSpoElF1TzZqXz8KPqTpg7GjlnU0yjr5tv6kzSYEpyGlux0lwGUCZTt gfA0c+rzqZnMnx/2TcJK1ifWmXp29StS9FB1guJI5CsEiA6m2RfTRBAnnovfw0Y609vhNkuS67D 0O4KlE2RfKkwLyqW+z8383g2BBAfUZ5iRLeuSJkbbhVkWbDYgDcqDVKToMUY9MgL8Y0wZTBF3mt 8ZBCRiYVo77ccCFuXU+1EpbFqa2q6I9XW7e12uemWJQRWMmvWsz96jaaadvU/TeoBlldchqlibw b5bpBc2cbwk0YKp6yV8C/6uOrDE= X-Received: by 2002:a17:907:d94:b0:b88:73ea:a1d5 with SMTP id a640c23a62f3a-b8edf3ea285mr372544866b.51.1770485889818; Sat, 07 Feb 2026 09:38:09 -0800 (PST) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Sat, 7 Feb 2026 12:37:56 -0500 X-Gm-Features: AZwV_Qh_ifhdCuCXQubxP3H5qduypCZqqGrI9jdeTIGaNHjZKnhTBrO51UZh6Dk Message-ID: Subject: Re: pg_plan_advice To: Richard Guo Cc: Lukas Fittl , Tom Lane , Jacob Champion , Dian Fay , Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers , Alexandra Wang Content-Type: multipart/mixed; boundary="0000000000008b3f75064a3f5e84" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008b3f75064a3f5e84 Content-Type: text/plain; charset="UTF-8" Here is a new patch set (v14). I finally got time to implement an idea I've been thinking about for a while, which is to run the regression tests planning every query twice. The first time, we generate plan advice. The second time, we replan using that advice to guide planning. If everything in the world is wonderful, this shouldn't cause the regression tests to fail. Of course, it did, so this patch set includes a bunch of changes to both make this kind of testing possible and to fix the issues thus revealed. Here's a rundown of the problems I discovered, some of which were problems in pg_plan_advice, some of which are problems created by my recently committed patches, and a few of which are long-standing planner problems that just haven't been very apparent up until now. 0. I couldn't actually write the test code to do the above because planner_setup_hook doesn't get cursorOptions as an argument, so having the planner setup hook call back into planner() wasn't easy to do correctly. I've added a new preparatory patch (0002) to fix it. I plan to proceed with this patch quickly unless there are objections, since planner_setup_hook is brand new and there seems to be no downside to fixing this quickly. 1. A bunch of tests failed because they use debug_parallel_query=on. That introduced a single-copy Gather node into the plan, which caused pg_plan_advice to emit GATHER() advice. When the queries are then replanned, they use a real Gather node, not a single-copy one. I've updated pg_plan_advice to disregard single-copy Gather nodes. 2. A bunch of tests failed because pg_plan_advice was assuming, in some places, that it was the only thing adjusting pgs_mask. But, a lot of our regression tests run under enable_SOMETHING=false. I adjusted pg_plan_advice so that it only ever *clears* bits from pgs_mask instead of sometimes being willing to set them. This means that the effects of enable_SOMETHING=false and pg_plan_advice are additive, rather than (as in previous versions) letting pg_plan_advice sometimes override the GUC value for no particular reason. 3. One test failed because cost_material() tries to check PGS_CONSIDER_NONPARTIAL instead of relying on the caller to set the "enabled" flag properly. See http://postgr.es/m/CA+TgmoawzvCoZAwFS85tE5+c8vBkqgcS8ZstQ_ohjXQ9wGT9sw@mail.gmail.com or patch 0001 for details and a fix. I plan to commit this one relatively quickly, too, barring objections. 4. One test failed because setting enable_indexonlyscan=false, or clearing the equivalent pgs_mask bit, can cause a Bitmap Heap Scan not to be used. I worked around this in pg_plan_advice, but I think we should consider doing something about it in the core planner. See http://postgr.es/m/CA+TgmoZJAH4vA0q3T0t+CnuCXvhXvg+ZcBqs8s_LUJ0D12QhBA@mail.gmail.com for all the details of what's happening here. 5. One test failed because pg_plan_advice was forcing the use of a particular index by deleting all the others from rel->indexlist in its get_relation_info_hook. This is currently the only method we have for a loadable module to force the use of an index, but the problem is that it makes the index invisible for all purposes, and this particular test relies on self-join elimination. The query can't try to force the use of index #1 without hiding the existence of index #2 from the SJE code, and then we're in trouble. I've also verified that deleting elements from the index list can break left join removal. So I think we need a way to tell the planner that we don't want a certain index to be scanned without telling it that the index doesn't exist at all. Therefore, I've revived my previous patch to add a 'disabled' flag to IndexOptInfo. At the time I last proposed that, Tom said it wasn't needed because we could just delete from the index list, and I didn't have any reason why we couldn't just do that, so I made pg_plan_advice work that way. But now I do have a reason, so brought that patch back as 0006 and adjusted pg_plan_advice to use it. 6. One tests failed because add_partial_path() doesn't consider startup cost as a figure of merit. There's a comment there written by me at the time I was introducing parallel query, back in 2016, which claims it isn't necessary, but by 2020, while looking at incremental sort, James Coleman had figured out that this was incorrect. In brief, what happens here is that the query plan doesn't use a sequential scan, but disabling sequential scans changes the final plan, and in fact the new plan has a lower cost than the old one. For full details and proposed patches, see http://postgr.es/m/CA+TgmobRufbUSksBoxytGJS1P+mQY4rWctCk-d0iAUO6-k9Wrg@mail.gmail.com -- I've also incorporated those patches into this patch set as 0008 and 0009, so that the new testing framework added in 0010 will actually pass. So here's an overview of the new patch set. 0001. New patch: fix PGS_CONSIDER_NONPARTIAL interaction with Materialize nodes. See point (3) above. 0002. New patch: pass cursorOptions to planner_setup_hook. See point (0) above. 0003-0005. These were 0001-0003 in the previous patch set, and I have included the changes suggested by Alexandra Wang in her review. 0006. Revived patch from an old thread: Allow extensions to mark an individual index as disabled. See point (5) above. 0007. pg_plan_advice. This was 0004 in the previous patch set. This has a few updates: - It has been adjusted for the new 0001, 0002, and 0006 patches. - The issues mentioned in points (1), (2), and (4) above have been fixed. - There's now a system for other plugins to add "advisors", which is a way for that other module to supply an advice string that can be used during query planning. Here, I've done that to enable the testing described above, but it could also be used by a module that wants to do on-the-fly advice injection. - Minor cosmetic improvements, mostly reordering some functions in pgpa_planner.c for (IMHO) better clarity. 0008-0009. My proposed patches to address add_partial_path's failure to consider startup costs and related bugs I found while investigating. See point (6) above. 0010. New patch: add src/test/modules/test_plan_advice, implementing the testing procedure described above. I think there's quite a bit more that can be done with this new testing methodology to find additional issues here, and I plan to pursue that. But I'm fairly happy with the results of this initial round of testing. On the other hand, it flushed out a bunch of issues that seem worth fixing. But it also didn't break a hundred things for a hundred different reasons, which seems good, too. -- Robert Haas EDB: http://www.enterprisedb.com --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0004-Store-information-about-elided-nodes-in-the-fina.patch" Content-Disposition: attachment; filename="v14-0004-Store-information-about-elided-nodes-in-the-fina.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclhaa33 RnJvbSAxZWJiYWQ2MzBjMTViMzM2MmNkMDQ2ODAxNWY0ZTVhOWJjZmRkODQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNCAw NC8xMF0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWxpZGVkIG5vZGVzIGluIHRoZSBmaW5hbAog cGxhbi4KCkFuIGV4dGVuc2lvbiAob3IgY29yZSBjb2RlKSBtaWdodCB3YW50IHRvIHJlY29uc3Ry dWN0IHRoZSBwbGFubmVyJ3MKY2hvaWNlIG9mIGpvaW4gb3JkZXIgZnJvbSB0aGUgZmluYWwgcGxh bi4gVG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUKdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMg dGhhdCB3ZXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbSBpbiB0aGF0IHBsYW4uClRoZSBwcmV2 aW91cyBjb21taXQsIHRvZ2V0aGVyIHdpdGggdGhlIGVhcmxpZXIgd29yayBpbgo4YzQ5YTQ4NGU4 ZWJiMDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQwLCBpcyBlbm91Z2ggdG8gbGV0IHVzIG1hdGNo IHVwClJUSXMgd2Ugc2VlIGluIHRoZSBmaW5hbCBwbGFuIHdpdGggUlRJcyB0aGF0IHdlIHNlZSBk dXJpbmcgdGhlIHBsYW5uaW5nCmN5Y2xlLCBidXQgd2Ugc3RpbGwgaGF2ZSBhIHByb2JsZW0gaWYg dGhlIHBsYW5uZXIgZGVjaWRlcyB0byBkcm9wIHNvbWUKUlRJcyBvdXQgb2YgdGhlIGZpbmFsIHBs YW4gYWx0b2dldGhlci4KClRvIGZpeCB0aGF0LCB3aGVuIHNldHJlZnMuYyByZW1vdmVzIGEgU3Vi cXVlcnlTY2FuLCBzaW5nbGUtY2hpbGQgQXBwZW5kLApvciBzaW5nbGUtY2hpbGQgTWVyZ2VBcHBl bmQgZnJvbSB0aGUgZmluYWwgUGxhbiB0cmVlLCByZWNvcmQgdGhlIHR5cGUgb2YKdGhlIHJlbW92 ZWQgbm9kZSBhbmQgdGhlIFJUSXMgdGhhdCB0aGUgcmVtb3ZlZCBub2RlIHdvdWxkIGhhdmUgc2Nh bm5lZAppbiB0aGUgZmluYWwgcGxhbiB0cmVlLiBJdCB3b3VsZCBiZSBuYXR1cmFsIHRvIHJlY29y ZCB0aGlzIGluZm9ybWF0aW9uCm9uIHRoZSBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBwbGFuIG5vZGUs IGJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nCmFuIGFkZGl0aW9uYWwgcG9pbnRlciBmaWVs ZCB0byB0eXBlIFBsYW4sIHdoaWNoIHNlZW1zIHVuZGVzaXJhYmxlLgpTbywgaW5zdGVhZCwgc3Rv cmUgdGhlIGluZm9ybWF0aW9uIGluIGEgc2VwYXJhdGUgbGlzdCB0aGF0IHRoZQpleGVjdXRvciBu ZWVkIG5ldmVyIGNvbnN1bHQsIGFuZCB1c2UgdGhlIHBsYW5fbm9kZV9pZCB0byBpZGVudGlmeQp0 aGUgcGxhbiBub2RlIHdpdGggd2hpY2ggdGhlIHJlbW92ZWQgbm9kZSBpcyBsb2dpY2FsbHkgYXNz b2NpYXRlZC4KCkFsc28sIHVwZGF0ZSBwZ19vdmVyZXhwbGFpbiB0byBkaXNwbGF5IHRoZXNlIGRl dGFpbHMuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3 ZWQtYnk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ClJldmll d2VkLWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1w aW9uIDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW1pdCBM YW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8 dHJpc3Rhbi55aW1AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQWxleGFuZHJhIFdhbmcgPGFsZXhh bmRyYS53YW5nLm9zc0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHA6Ly9wb3N0Z3IuZXMvbS9D QStUZ21vWi1KaDFUNlF5V29DT0RNVlFkaFRVUFlrYVpqV3p0elAxRW40PVpIb0tQendAbWFpbC5n bWFpbC5jb20KLS0tCiAuLi4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0ICAgICAgICAgICAg ICAgfCAgNCArLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jICAgICAg IHwgMzkgKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIu YyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAg ICAgICAgICB8IDUyICsrKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oICAgICAgICAgICAgICAgICB8ICAzICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaCAgICAgICAgICAgICAgICAgfCAyMCArKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDExNyBpbnNl cnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4 cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFp bi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggMWIzOWY5MjNjOGEuLmM3ZWVkYWQ4 MGZjIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJl eHBsYWluLm91dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJl eHBsYWluLm91dApAQCAtNDUyLDYgKzQ1Miw4IEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBX SEVSRSBnZW51cyA9ICdkYXVjdXMnOwogIFNlcSBTY2FuIG9uIGRhdWN1cyB2ZWdldGFibGVzCiAg ICBGaWx0ZXI6IChnZW51cyA9ICdkYXVjdXMnOjp0ZXh0KQogICAgU2NhbiBSVEk6IDIKKyAgIEVs aWRlZCBOb2RlIFR5cGU6IEFwcGVuZAorICAgRWxpZGVkIE5vZGUgUlRJczogMQogIFJUSSAxIChy ZWxhdGlvbiwgaW5oZXJpdGVkLCBpbi1mcm9tLWNsYXVzZSk6CiAgICBFcmVmOiB2ZWdldGFibGVz IChpZCwgbmFtZSwgZ2VudXMpCiAgICBSZWxhdGlvbjogdmVnZXRhYmxlcwpAQCAtNDY1LDcgKzQ2 Nyw3IEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBnZW51cyA9ICdkYXVjdXMnOwog ICAgUmVsYXRpb24gS2luZDogcmVsYXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNz U2hhcmVMb2NrCiAgVW5wcnVuYWJsZSBSVElzOiAxIDIKLSgxNiByb3dzKQorKDE4IHJvd3MpCiAK IC0tIEFsc28gdGVzdCBhIGNhc2UgdGhhdCBpbnZvbHZlcyBhIHdyaXRlLgogRVhQTEFJTiAoUkFO R0VfVEFCTEUsIENPU1RTIE9GRikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4v cGdfb3ZlcmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4u YwppbmRleCBiZjhjNzY4ZWQ0Ny4uZTAxODRiYTMxNGEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdf b3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWlu L3BnX292ZXJleHBsYWluLmMKQEAgLTE5MSw2ICsxOTEsOCBAQCBvdmVyZXhwbGFpbl9wZXJfbm9k ZV9ob29rKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICovCiAJaWYg KG9wdGlvbnMtPnJhbmdlX3RhYmxlKQogCXsKKwkJYm9vbAkJb3BlbmVkX2VsaWRlZF9ub2RlcyA9 IGZhbHNlOworCiAJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAkJewogCQkJY2FzZSBUX1NlcVNj YW46CkBAIC0yNTEsNiArMjUzLDQzIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0 YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7 CiAJCX0KKworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgZXMtPnBzdG10LT5lbGlkZWRO b2RlcykKKwkJeworCQkJY2hhcgkgICAqZWxpZGVkbm9kZXRhZzsKKworCQkJaWYgKG4tPnBsYW5f bm9kZV9pZCAhPSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQkJY29udGludWU7CisKKwkJCWlmICgh b3BlbmVkX2VsaWRlZF9ub2RlcykKKwkJCXsKKwkJCQlFeHBsYWluT3Blbkdyb3VwKCJFbGlkZWQg Tm9kZXMiLCAiRWxpZGVkIE5vZGVzIiwgZmFsc2UsIGVzKTsKKwkJCQlvcGVuZWRfZWxpZGVkX25v ZGVzID0gdHJ1ZTsKKwkJCX0KKworCQkJc3dpdGNoIChuLT5lbGlkZWRfdHlwZSkKKwkJCXsKKwkJ CQljYXNlIFRfQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIkFwcGVuZCI7CisJCQkJCWJy ZWFrOworCQkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkJZWxpZGVkbm9kZXRhZyA9ICJNZXJn ZUFwcGVuZCI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQkJCWVs aWRlZG5vZGV0YWcgPSAiU3VicXVlcnlTY2FuIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoK KwkJCQkJZWxpZGVkbm9kZXRhZyA9IHBzcHJpbnRmKCIlZCIsIG4tPmVsaWRlZF90eXBlKTsKKwkJ CQkJYnJlYWs7CisJCQl9CisKKwkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2RlIiwgTlVM TCwgdHJ1ZSwgZXMpOworCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiRWxpZGVkIE5vZGUgVHlwZSIs IGVsaWRlZG5vZGV0YWcsIGVzKTsKKwkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiRWxpZGVkIE5v ZGUgUlRJcyIsIG4tPnJlbGlkcywgZXMpOworCQkJRXhwbGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBO b2RlIiwgTlVMTCwgdHJ1ZSwgZXMpOworCQl9CisJCWlmIChvcGVuZWRfZWxpZGVkX25vZGVzKQor CQkJRXhwbGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlcyIsICJFbGlkZWQgTm9kZXMiLCBmYWxz ZSwgZXMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDJj OWZiNTBiNjEwLi5mNjgxNDJjZmNiOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIu YwpAQCAtNjY2LDYgKzY2Niw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25z dCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+cGFyYW1F eGVjVHlwZXMgPSBnbG9iLT5wYXJhbUV4ZWNUeXBlczsKIAkvKiB1dGlsaXR5U3RtdCBzaG91bGQg YmUgbnVsbCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgY29weSBpdCAqLwogCXJlc3VsdC0+dXRpbGl0 eVN0bXQgPSBwYXJzZS0+dXRpbGl0eVN0bXQ7CisJcmVzdWx0LT5lbGlkZWROb2RlcyA9IGdsb2It PmVsaWRlZE5vZGVzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5zdG10X2xvY2F0 aW9uOwogCXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3NldHJlZnMuYwppbmRleCBhNWIyMzE0ZWYyYS4uNWFkNmMxMzgzMGIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTIxMSw2ICsyMTEsOSBAQCBzdGF0aWMg TGlzdCAqc2V0X3dpbmRvd2FnZ19ydW5jb25kaXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJCQkJCQkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAg IFBsYW4gKnBsYW4pOwogCitzdGF0aWMgdm9pZCByZWNvcmRfZWxpZGVkX25vZGUoUGxhbm5lckds b2JhbCAqZ2xvYiwgaW50IHBsYW5fbm9kZV9pZCwKKwkJCQkJCQkgICBOb2RlVGFnIGVsaWRlZF90 eXBlLCBCaXRtYXBzZXQgKnJlbGlkcyk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpA QCAtMTQ2MCwxMCArMTQ2MywxNyBAQCBzZXRfc3VicXVlcnlzY2FuX3JlZmVyZW5jZXMoUGxhbm5l ckluZm8gKnJvb3QsCiAKIAlpZiAodHJpdmlhbF9zdWJxdWVyeXNjYW4ocGxhbikpCiAJeworCQlJ bmRleAkJc2NhbnJlbGlkOworCiAJCS8qCiAJCSAqIFdlIGNhbiBvbWl0IHRoZSBTdWJxdWVyeVNj YW4gbm9kZSBhbmQganVzdCBwdWxsIHVwIHRoZSBzdWJwbGFuLgogCQkgKi8KIAkJcmVzdWx0ID0g Y2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIHBsYW4sIHBsYW4tPnN1YnBsYW4p OworCisJCS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIFN1YnF1ZXJ5U2NhbiAqLworCQlz Y2FucmVsaWQgPSBwbGFuLT5zY2FuLnNjYW5yZWxpZCArIHJ0b2Zmc2V0OworCQlyZWNvcmRfZWxp ZGVkX25vZGUocm9vdC0+Z2xvYiwgcGxhbi0+c3VicGxhbi0+cGxhbl9ub2RlX2lkLAorCQkJCQkJ ICAgVF9TdWJxdWVyeVNjYW4sIGJtc19tYWtlX3NpbmdsZXRvbihzY2FucmVsaWQpKTsKIAl9CiAJ ZWxzZQogCXsKQEAgLTE4OTEsNyArMTkwMSwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxh bm5lckluZm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+ YXBwZW5kcGxhbnMpOwogCiAJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxhbi5w YXJhbGxlbF9hd2FyZSkKLQkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBs YW4gKikgYXBsYW4sIHApOworCQl7CisJCQlQbGFuCSAgICpyZXN1bHQ7CisKKwkJCXJlc3VsdCA9 IGNsZWFuX3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBhcGxhbiwgcCk7CisKKwkJCS8q IFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhbiBBcHBlbmQgKi8KKwkJCXJlY29yZF9lbGlkZWRf bm9kZShyb290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAorCQkJCQkJCSAgIG9m ZnNldF9yZWxpZF9zZXQoYXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKworCQkJcmV0dXJu IHJlc3VsdDsKKwkJfQogCX0KIAogCS8qCkBAIC0xOTU5LDcgKzE5NzksMTcgQEAgc2V0X21lcmdl YXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxh biAqKSBsaW5pdGlhbChtcGxhbi0+bWVyZ2VwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3 YXJlID09IG1wbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3Jl bW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBtcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJl c3VsdDsKKworCQkJcmVzdWx0ID0gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICop IG1wbGFuLCBwKTsKKworCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgTWVyZ2VBcHBl bmQgKi8KKwkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQs IFRfTWVyZ2VBcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVs aWRzLCBydG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJfQogCiAJLyoKQEAg LTM3NzQsMyArMzgwNCwyMSBAQCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIoTm9k ZSAqbm9kZSwgUGxhbm5lckluZm8gKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93 YWxrZXIobm9kZSwgZXh0cmFjdF9xdWVyeV9kZXBlbmRlbmNpZXNfd2Fsa2VyLAogCQkJCQkJCQkg IGNvbnRleHQpOwogfQorCisvKgorICogUmVjb3JkIHNvbWUgZGV0YWlscyBhYm91dCBhIG5vZGUg cmVtb3ZlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzCisgKiBwcm9jZXNzaW5nLCBmb3Ig dGhlIGJlbmVmaXQgb2YgY29kZSB0cnlpbmcgdG8gcmVjb25zdHJ1Y3QgcGxhbm5lciBkZWNpc2lv bnMKKyAqIGZyb20gZXhhbWluYXRpb24gb2YgdGhlIGZpbmFsIHBsYW4gdHJlZS4KKyAqLworc3Rh dGljIHZvaWQKK3JlY29yZF9lbGlkZWRfbm9kZShQbGFubmVyR2xvYmFsICpnbG9iLCBpbnQgcGxh bl9ub2RlX2lkLAorCQkJCSAgIE5vZGVUYWcgZWxpZGVkX3R5cGUsIEJpdG1hcHNldCAqcmVsaWRz KQoreworCUVsaWRlZE5vZGUgKm4gPSBtYWtlTm9kZShFbGlkZWROb2RlKTsKKworCW4tPnBsYW5f bm9kZV9pZCA9IHBsYW5fbm9kZV9pZDsKKwluLT5lbGlkZWRfdHlwZSA9IGVsaWRlZF90eXBlOwor CW4tPnJlbGlkcyA9IHJlbGlkczsKKworCWdsb2ItPmVsaWRlZE5vZGVzID0gbGFwcGVuZChnbG9i LT5lbGlkZWROb2Rlcywgbik7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGMxZTkzOTc2MjNi Li45Y2M1ZDJlNzQxMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIzMiw2ICsyMzIsOSBAQCB0 eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogdHlwZSBPSURzIGZvciBQQVJBTV9FWEVD IFBhcmFtcyAqLwogCUxpc3QJICAgKnBhcmFtRXhlY1R5cGVzOwogCisJLyogaW5mbyBhYm91dCBu b2RlcyBlbGlkZWQgZnJvbSB0aGUgcGxhbiBkdXJpbmcgc2V0cmVmcyBwcm9jZXNzaW5nICovCisJ TGlzdAkgICAqZWxpZGVkTm9kZXM7CisKIAkvKiBoaWdoZXN0IFBsYWNlSG9sZGVyVmFyIElEIGFz c2lnbmVkICovCiAJSW5kZXgJCWxhc3RQSElkOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDlh ZTcyYTYwN2UyLi4wYWQwZmY0MDRjOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxh bm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTE1Miw2ICsx NTIsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCS8qIG5vbi1udWxsIGlmIHRoaXMg aXMgdXRpbGl0eSBzdG10ICovCiAJTm9kZQkgICAqdXRpbGl0eVN0bXQ7CiAKKwkvKiBpbmZvIGFi b3V0IG5vZGVzIGVsaWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3Npbmcg Ki8KKwlMaXN0CSAgICplbGlkZWROb2RlczsKKwogCS8qCiAJICogRGVmRWxlbSBvYmplY3RzIGFk ZGVkIGJ5IGV4dGVuc2lvbnMsIGUuZy4gdXNpbmcgcGxhbm5lcl9zaHV0ZG93bl9ob29rCiAJICoK QEAgLTE4MzgsNCArMTg0MSwyMSBAQCB0eXBlZGVmIHN0cnVjdCBTdWJQbGFuUlRJbmZvCiAJYm9v bAkJZHVtbXk7CiB9IFN1YlBsYW5SVEluZm87CiAKKy8qCisgKiBFbGlkZWROb2RlCisgKgorICog SW5mb3JtYXRpb24gYWJvdXQgbm9kZXMgZWxpZGVkIGZyb20gdGhlIGZpbmFsIHBsYW4gdHJlZTog dHJpdmlhbCBzdWJxdWVyeQorICogc2NhbnMsIGFuZCBzaW5nbGUtY2hpbGQgQXBwZW5kIGFuZCBN ZXJnZUFwcGVuZCBub2Rlcy4KKyAqCisgKiBwbGFuX25vZGVfaWQgaXMgdGhhdCBvZiB0aGUgc3Vy dml2aW5nIHBsYW4gbm9kZSwgdGhlIHNvbGUgY2hpbGQgb2YgdGhlCisgKiBvbmUgd2hpY2ggd2Fz IGVsaWRlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgRWxpZGVkTm9kZQoreworCU5vZGVUYWcJCXR5 cGU7CisJaW50CQkJcGxhbl9ub2RlX2lkOworCU5vZGVUYWcJCWVsaWRlZF90eXBlOworCUJpdG1h cHNldCAgKnJlbGlkczsKK30gRWxpZGVkTm9kZTsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RF U19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGM5ZjQ1NmI1YTA4Li45NGFjMmE4 ZmRiNyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTcxMCw2ICs3MTAsNyBAQCBFYWNo U3RhdGUKIEVkZ2UKIEVkaXRhYmxlT2JqZWN0VHlwZQogRWxlbWVudHNTdGF0ZQorRWxpZGVkTm9k ZQogRW5hYmxlVGltZW91dFBhcmFtcwogRW5kRGF0YVB0clR5cGUKIEVuZERpcmVjdE1vZGlmeV9m dW5jdGlvbgotLSAKMi41MS4wCgo= --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0001-Fix-PGS_CONSIDER_NONPARTIAL-interaction-with-Mat.patch" Content-Disposition: attachment; filename="v14-0001-Fix-PGS_CONSIDER_NONPARTIAL-interaction-with-Mat.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclha910 RnJvbSA5ZDJmYmZhYmExMWM2ZTU5NDY5NjlkYTAwMjQ3NzhlODllMzRmNTYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMyBGZWIgMjAyNiAwOTowNzo1OSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDAx LzEwXSBGaXggUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaW50ZXJhY3Rpb24gd2l0aAogTWF0ZXJp YWxpemUgbm9kZXMuCgpDb21taXQgNDAyMGIzNzBmMjE0MzE1YjhjMTA0MzAzMDE4OThhYzIxNjU4 MTQzZiBoYWQgdGhlIGlkZWEgdGhhdAppdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBoYW5kbGUg dGVzdGluZyBQR1NfQ09OU0lERVJfTk9OUEFSVElBTAp3aXRoaW4gY29zdF9tYXRlcmlhbCB0byBz YXZlIGNhbGxlcnMgdGhlIHRyb3VibGUsIGJ1dCB0aGF0IHR1cm5zCm91dCBub3QgdG8gYmUgYSB2 ZXJ5IGdvb2QgaWRlYS4gT25lIGNvbmNlcm4gaXMgdGhhdCBpdCBtYWtlcwpjb3N0X21hdGVyaWFs KCkgZGVwZW5kZW50IG9uIHRoZSBjYWxsZXIgaGF2aW5nIGluaXRpYWxpemVkCmNlcnRhaW4gZmll bGRzIGluIHRoZSBNYXRlcmlhbFBhdGgsIHdoaWNoIGlzIGEgYml0IGF3a3dhcmQgZm9yCm1hdGVy aWFsaXplX2ZpbmlzaGVkX3BsYW4sIHdoaWNoIHdhbnRzIHRvIHVzZSBhIGR1bW15IHBhdGguCgpB bm90aGVyIHByb2JsZW0gaXMgdGhhdCBpdCBjYW4gcmVzdWx0IGluIGdlbmVyYXRlZCBtYXRlcmlh bGl6ZWQKbmVzdGVkIGxvb3BzIHdoZXJlIHRoZSBNYXRlcmlhbGl6ZSBub2RlIGlzIGRpc2FibGVk LCBjb250cmFyeSB0bwp0aGUgaW50ZW50aW9uIG9mIGpvaW5wYXRoLmMncyBsb2dpYyBpbiBtYXRj aF91bnNvcnRlZF9vdXRlcigpIGFuZApjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcCgpLCB3aGlj aCBhaW1zIHRvIGNvbnNpZGVyIHN1Y2ggcGF0aHMKb25seSB3aGVuIHRoZXkgd291bGQgbm90IG5l ZWQgdG8gYmUgZGlzYWJsZWQuIEluIHRoZSBwcmV2aW91cwpjb2RpbmcsIGl0IHdhcyBwb3NzaWJs ZSBmb3IgdGhlIHBnc19tYXNrIG9uIHRoZSBqb2lucmVsIHRvIGhhdmUKUEdTX0NPTlNJREVSX05P TlBBUlRJQUwgc2V0LCB3aGlsZSB0aGUgaW5uZXIgcmVsIGhhZCB0aGUgc2FtZQpiaXQgY2xlYXIu IEluIHRoYXQgY2FzZSwgd2UnZCBnZW5lcmF0ZSBhbmQgdGhlbiBkaXNhYmxlIGEKTWF0ZXJpYWxp emUgcGF0aC4KClRoYXQgc2VlbXMgd3JvbmcsIHNvIGluc3RlYWQsIHB1bGwgdXAgdGhlIGxvZ2lj IHRvIHRlc3QgdGhlClBHU19DT05TSURFUl9OT05QQVJUSUFMIGJpdCBpbnRvIGpvaW5wYXRoLmMs IHJlc3RvcmluZyB0aGUKaGlzdG9yaWNhbCBiZWhhdmlvciB0aGF0IHdlIGRvbid0IGdlbmVyYXRl IGEgZ2l2ZW4gbWF0ZXJpYWxpemVkCm5lc3RlZCBsb29wLCBvciB3ZSBkb24ndCBkaXNhYmxlIGl0 LgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICB8ICA1IC0tLS0t CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jICAgfCAxMSArKysrKysrKysr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgIDQgLS0tLQogMyBm aWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCBjMzBkNmU4NDY3Mi4uODljYTRlMDhiZjEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMjU4OSwxMSArMjU4OSw2 IEBAIGNvc3RfbWF0ZXJpYWwoUGF0aCAqcGF0aCwKIAlkb3VibGUJCW5ieXRlcyA9IHJlbGF0aW9u X2J5dGVfc2l6ZSh0dXBsZXMsIHdpZHRoKTsKIAlkb3VibGUJCXdvcmtfbWVtX2J5dGVzID0gd29y a19tZW0gKiAoU2l6ZSkgMTAyNDsKIAotCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDAg JiYKLQkJcGF0aC0+cGFyZW50ICE9IE5VTEwgJiYKLQkJKHBhdGgtPnBhcmVudC0+cGdzX21hc2sg JiBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCkgPT0gMCkKLQkJZW5hYmxlZCA9IGZhbHNlOwotCiAJ cGF0aC0+cm93cyA9IHR1cGxlczsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9qb2lucGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBh dGguYwppbmRleCAxZTQyNDZiNDlkNS4uZTBjMDBlMjZkZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvam9pbnBhdGguYwpAQCAtMTg5NSw4ICsxODk1LDE3IEBAIG1hdGNoX3Vuc29ydGVkX291 dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkvKgogCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5n IHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1bmxlc3MgdGhhdCBpcwogCQkgKiBkaXNhYmxlZCBv ciB0aGUgcGF0aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzIG91dHB1dCBhbnl3YXkuCisJ CSAqCisJCSAqIEF0IHByZXNlbnQsIHdlIG9ubHkgY29uc2lkZXIgbWF0ZXJpYWxpemF0aW9uIGZv ciBub24tcGFydGlhbCBvdXRlcgorCQkgKiBwYXRocywgc28gaXQncyBjb3JyZWN0IHRvIHRlc3Qg UEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZS4gSWYgd2UKKwkJICogZXZlciB3YW50IHRvIGNv bnNpZGVyIG1hdGVyaWFsaXphdGlvbiBmb3IgcGFydGlhbCBwYXRocywgd2UnbGwgbmVlZAorCQkg KiB0byBjcmVhdGUgbWF0cGF0aCB3aGVuZXZlciBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkUgaXMg c2V0LCB1c2UgaXQKKwkJICogZm9yIHBhcnRpYWwgcGF0aHMgZWl0aGVyIHdheSwgYW5kIHVzZSBp dCBmb3Igbm9uLXBhcnRpYWwgcGF0aHMgb25seQorCQkgKiB3aGVuIFBHU19DT05TSURFUl9OT05Q QVJUSUFMIGlzIGFsc28gc2V0LgogCQkgKi8KLQkJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1Nf TkVTVExPT1BfTUFURVJJQUxJWkUpICE9IDAgJiYKKwkJaWYgKChleHRyYS0+cGdzX21hc2sgJgor CQkJIChQR1NfTkVTVExPT1BfTUFURVJJQUxJWkUgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCkp ID09CisJCQkoUEdTX05FU1RMT09QX01BVEVSSUFMSVpFIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJ QUwpICYmCiAJCQlpbm5lcl9jaGVhcGVzdF90b3RhbCAhPSBOVUxMICYmCiAJCQkhRXhlY01hdGVy aWFsaXplc091dHB1dChpbm5lcl9jaGVhcGVzdF90b3RhbC0+cGF0aHR5cGUpKQogCQkJbWF0cGF0 aCA9IChQYXRoICopCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVh dGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXgg ZTUyMDBmNGIzY2UuLmE1MDI2MDI5MGZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jCkBAIC02NTI2LDEwICs2NTI2LDYgQEAgbWF0ZXJpYWxpemVfZmluaXNoZWRfcGxh bihQbGFuICpzdWJwbGFuKQogCXN1YnBsYW4tPnN0YXJ0dXBfY29zdCAtPSBpbml0cGxhbl9jb3N0 OwogCXN1YnBsYW4tPnRvdGFsX2Nvc3QgLT0gaW5pdHBsYW5fY29zdDsKIAotCS8qIENsZWFyIGZp ZWxkcyB0aGF0IGNvc3RfbWF0ZXJpYWwoKSB3aWxsIGNvbnN1bHQgKi8KLQltYXRwYXRoLnBhcmFs bGVsX3dvcmtlcnMgPSAwOwotCW1hdHBhdGgucGFyZW50ID0gTlVMTDsKLQogCS8qIFNldCBjb3N0 IGRhdGEgKi8KIAljb3N0X21hdGVyaWFsKCZtYXRwYXRoLAogCQkJCSAgZW5hYmxlX21hdGVyaWFs LAotLSAKMi41MS4wCgo= --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0003-Store-information-about-range-table-flattening-i.patch" Content-Disposition: attachment; filename="v14-0003-Store-information-about-range-table-flattening-i.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclha9y2 RnJvbSA1NTVhYzI5MzQ5N2FlYWNlM2YxM2E2NDAzMDc3NWQ3NmI1MWYyMzY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNCAw My8xMF0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgcmFuZ2UtdGFibGUgZmxhdHRlbmluZyBpbgog dGhlIGZpbmFsIHBsYW4uCgpTdXBwb3NlIHRoYXQgd2UncmUgY3VycmVudGx5IHBsYW5uaW5nIGEg cXVlcnkgYW5kLCB3aGVuIHRoYXQgc2FtZQpxdWVyeSB3YXMgcHJldmlvdXNseSBwbGFubmVkIGFu ZCBleGVjdXRlZCwgd2UgbGVhcm5lZCBzb21ldGhpbmcgYWJvdXQKaG93IGEgY2VydGFpbiB0YWJs ZSB3aXRoaW4gdGhhdCBxdWVyeSBzaG91bGQgYmUgcGxhbm5lZC4gV2Ugd2FudCB0bwp0YWtlIG5v dGUgd2hlbiB0aGF0IHNhbWUgdGFibGUgaXMgYmVpbmcgcGxhbm5lZCBkdXJpbmcgdGhlIGN1cnJl bnQKcGxhbm5pbmcgY3ljbGUsIGJ1dCB0aGlzIGlzIGRpZmZpY3VsdCB0byBkbywgYmVjYXVzZSB0 aGUgUlRJIG9mIHRoZQp0YWJsZSBmcm9tIHRoZSBwcmV2aW91cyBwbGFuIHdvbid0IG5lY2Vzc2Fy aWx5IGJlIGVxdWFsIHRvIHRoZSBSVEkKdGhhdCB3ZSBzZWUgZHVyaW5nIHRoZSBjdXJyZW50IHBs YW5uaW5nIGN5Y2xlLiBUaGlzIGlzIGJlY2F1c2UgZWFjaApzdWJxdWVyeSBoYXMgYSBzZXBhcmF0 ZSByYW5nZSB0YWJsZSBkdXJpbmcgcGxhbm5pbmcsIGJ1dCB0aGVzZSBhcmUKZmxhdHRlbmVkIGlu dG8gb25lIHJhbmdlIHRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBwbGFuLApjaGFu Z2luZyBSVElzLgoKQ29tbWl0IDhjNDlhNDg0ZThlYmIwMTk5ZmJhNGJkNjhlYWFlZGFmNDliNDhl ZDAgYWxsb3dzIHVzIHRvIG1hdGNoIHVwCnN1YnF1ZXJpZXMgc2VlbiBpbiB0aGUgcHJldmlvdXMg cGxhbm5pbmcgY3ljbGVzIHdpdGggdGhlIHN1YnF1ZXJpZXMKY3VycmVudGx5IGJlaW5nIHBsYW5u ZWQganVzdCBieSBjb21wYXJpbmcgdGV4dHVhbCBuYW1lcywgYnV0IHRoYXQncwpub3QgcXVpdGUg ZW5vdWdoIHRvIGxldCB1cyBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgaW5kaXZpZHVhbCB0YWJsZXMs CmJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBlYWNoIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUg YXBwZWFycyBpbgp0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KClRvIGZpeCB0aGF0 LCBzdG9yZSBhIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBvYmplY3RzIGluIHRoZSBmaW5hbApwbGFu bmVkIHN0YXRlbWVudCwgZWFjaCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHN1YnBsYW4sIHRo ZSBvZmZzZXQKYXQgd2hpY2ggaXQgYmVnaW5zIGluIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUs IGFuZCB3aGV0aGVyIG9yIG5vdAppdCB3YXMgYSBkdW1teSBzdWJwbGFuIC0tIGlmIGl0IHdhcywg c29tZSBSVElzIG1heSBoYXZlIGJlZW4gZHJvcHBlZApmcm9tIHRoZSBmaW5hbCByYW5nZSB0YWJs ZSwgYnV0IGFsc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbnRyb2wgaG93CmEgZHVtbXkgc3VicXVl cnkgZ2V0cyBwbGFubmVkLiBUaGUgdG9wbGV2ZWwgc3VicXVlcnkgaGFzIG5vIG5hbWUgYW5kCmFs d2F5cyBiZWdpbnMgYXQgcnRvZmZzZXQgMCwgc28gd2UgbWFrZSBubyBlbnRyeSBmb3IgaXQuCgpU aGlzIGNvbW1pdCB0ZWFjaGVzIHBnX292ZXJleHBsYWluJ3MgUkFOR0VfVEFCTEUgb3B0aW9uIHRv IG1ha2UgdXNlCm9mIHRoaXMgbmV3IGRhdGEgdG8gZGlzcGxheSB0aGUgc3VicXVlcnkgbmFtZSBm b3IgZWFjaCByYW5nZSB0YWJsZQplbnRyeS4KClJldmlld2VkLWJ5OiBMdWthcyBGaXR0bCA8bHVr YXNAZml0dGwuY29tPgpSZXZpZXdlZC1ieTogSmFrdWIgV2FydGFrIDxqYWt1Yi53YXJ0YWtAZW50 ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEdyZWcgQnVyZCA8Z3JlZ0BidXJkLm1lPgpSZXZp ZXdlZC1ieTogSmFjb2IgQ2hhbXBpb24gPGphY29iLmNoYW1waW9uQGVudGVycHJpc2VkYi5jb20+ ClJldmlld2VkLWJ5OiBBbWl0IExhbmdvdGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogSGFpYm8gWWFuIDx0cmlzdGFuLnlpbUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBB bGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndhbmcub3NzQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjog aHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9aLUpoMVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6 UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWlsLmNvbQotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhw bGFpbi5vdXQgICAgICAgICAgICAgICB8IDExOSArKysrKysrKysrKysrKysrKysKIGNvbnRyaWIv cGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8ICAzNiArKysrKysKIGNvbnRy aWIvcGdfb3ZlcmV4cGxhaW4vc3FsL3BnX292ZXJleHBsYWluLnNxbCB8ICAxMCArKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgICAgICAgICB8ICAyMCArKysKIHNyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgMTcgKysrCiBzcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogOCBmaWxlcyBjaGFu Z2VkLCAyMDcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxh aW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9l eHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggNTVkMzQ2NjZkODcuLjFiMzlmOTIzYzhh IDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBs YWluLm91dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBs YWluLm91dApAQCAtNDg5LDMgKzQ4OSwxMjIgQEAgSU5TRVJUIElOVE8gdmVnZXRhYmxlcyAobmFt ZSwgZ2VudXMpIFZBTFVFUyAoJ2Jyb2Njb2Zsb3dlcicsICdicmFzc2ljYScpOwogIFJlc3VsdCBS VElzOiAxCiAoMTUgcm93cykKIAorLS0gc2hvdWxkIHNob3cgIlN1YnBsYW46IHN1YiIKK0VYUExB SU4gKFJBTkdFX1RBQkxFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHZlZ2V0YWJsZXMgdiwK KyAgICAgICAoU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJFIGdlbnVzID0gJ2RhdWN1cycg T0ZGU0VUIDApIHN1YjsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGRhdWN1cyB2ZWdldGFibGVzCisgICAgICAg ICBGaWx0ZXI6IChnZW51cyA9ICdkYXVjdXMnOjp0ZXh0KQorICAgICAgICAgU2NhbiBSVEk6IDYK KyAgICAgICAgIEVsaWRlZCBOb2RlIFR5cGU6IEFwcGVuZAorICAgICAgICAgRWxpZGVkIE5vZGUg UlRJczogNQorICAgICAgICAgRWxpZGVkIE5vZGUgVHlwZTogU3VicXVlcnlTY2FuCisgICAgICAg ICBFbGlkZWQgTm9kZSBSVElzOiAyCisgICAtPiAgQXBwZW5kCisgICAgICAgICBBcHBlbmQgUlRJ czogMQorICAgICAgICAgQ2hpbGQgQXBwZW5kIFJUSXM6IG5vbmUKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBicmFzc2ljYSB2XzEKKyAgICAgICAgICAgICAgIFNjYW4gUlRJOiAzCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gZGF1Y3VzIHZfMgorICAgICAgICAgICAgICAgU2NhbiBSVEk6IDQK KyBSVEkgMSAocmVsYXRpb24sIGluaGVyaXRlZCwgaW4tZnJvbS1jbGF1c2UpOgorICAgQWxpYXM6 IHYgKCkKKyAgIEVyZWY6IHYgKGlkLCBuYW1lLCBnZW51cykKKyAgIFJlbGF0aW9uOiB2ZWdldGFi bGVzCisgICBSZWxhdGlvbiBLaW5kOiBwYXJ0aXRpb25lZF90YWJsZQorICAgUmVsYXRpb24gTG9j ayBNb2RlOiBBY2Nlc3NTaGFyZUxvY2sKKyAgIFBlcm1pc3Npb24gSW5mbyBJbmRleDogMQorIFJU SSAyIChzdWJxdWVyeSwgaW4tZnJvbS1jbGF1c2UpOgorICAgQWxpYXM6IHN1YiAoKQorICAgRXJl Zjogc3ViIChpZCwgbmFtZSwgZ2VudXMpCisgUlRJIDMgKHJlbGF0aW9uLCBpbi1mcm9tLWNsYXVz ZSk6CisgICBBbGlhczogdiAoaWQsIG5hbWUsIGdlbnVzKQorICAgRXJlZjogdiAoaWQsIG5hbWUs IGdlbnVzKQorICAgUmVsYXRpb246IGJyYXNzaWNhCisgICBSZWxhdGlvbiBLaW5kOiByZWxhdGlv bgorICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFyZUxvY2sKKyBSVEkgNCAocmVsYXRp b24sIGluLWZyb20tY2xhdXNlKToKKyAgIEFsaWFzOiB2IChpZCwgbmFtZSwgZ2VudXMpCisgICBF cmVmOiB2IChpZCwgbmFtZSwgZ2VudXMpCisgICBSZWxhdGlvbjogZGF1Y3VzCisgICBSZWxhdGlv biBLaW5kOiByZWxhdGlvbgorICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFyZUxvY2sK KyBSVEkgNSAocmVsYXRpb24sIGluaGVyaXRlZCwgaW4tZnJvbS1jbGF1c2UpOgorICAgU3VicGxh bjogc3ViCisgICBFcmVmOiB2ZWdldGFibGVzIChpZCwgbmFtZSwgZ2VudXMpCisgICBSZWxhdGlv bjogdmVnZXRhYmxlcworICAgUmVsYXRpb24gS2luZDogcGFydGl0aW9uZWRfdGFibGUKKyAgIFJl bGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVMb2NrCisgICBQZXJtaXNzaW9uIEluZm8gSW5k ZXg6IDIKKyBSVEkgNiAocmVsYXRpb24sIGluLWZyb20tY2xhdXNlKToKKyAgIFN1YnBsYW46IHN1 YgorICAgQWxpYXM6IHZlZ2V0YWJsZXMgKGlkLCBuYW1lLCBnZW51cykKKyAgIEVyZWY6IHZlZ2V0 YWJsZXMgKGlkLCBuYW1lLCBnZW51cykKKyAgIFJlbGF0aW9uOiBkYXVjdXMKKyAgIFJlbGF0aW9u IEtpbmQ6IHJlbGF0aW9uCisgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJlTG9jawor IFVucHJ1bmFibGUgUlRJczogMSAzIDQgNSA2CisoNTIgcm93cykKKworLS0gc2hvdWxkIHNob3cg IlN1YnBsYW46IHVubmFtZWRfc3VicXVlcnkiCitFWFBMQUlOIChSQU5HRV9UQUJMRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIHYsCisgICAgICAgKFNFTEVDVCAqIEZST00g dmVnZXRhYmxlcyBXSEVSRSBnZW51cyA9ICdkYXVjdXMnIE9GRlNFVCAwKTsKKyAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2Fu IG9uIGRhdWN1cyB2ZWdldGFibGVzCisgICAgICAgICBGaWx0ZXI6IChnZW51cyA9ICdkYXVjdXMn Ojp0ZXh0KQorICAgICAgICAgU2NhbiBSVEk6IDYKKyAgICAgICAgIEVsaWRlZCBOb2RlIFR5cGU6 IEFwcGVuZAorICAgICAgICAgRWxpZGVkIE5vZGUgUlRJczogNQorICAgICAgICAgRWxpZGVkIE5v ZGUgVHlwZTogU3VicXVlcnlTY2FuCisgICAgICAgICBFbGlkZWQgTm9kZSBSVElzOiAyCisgICAt PiAgQXBwZW5kCisgICAgICAgICBBcHBlbmQgUlRJczogMQorICAgICAgICAgQ2hpbGQgQXBwZW5k IFJUSXM6IG5vbmUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBicmFzc2ljYSB2XzEKKyAgICAg ICAgICAgICAgIFNjYW4gUlRJOiAzCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZGF1Y3VzIHZf MgorICAgICAgICAgICAgICAgU2NhbiBSVEk6IDQKKyBSVEkgMSAocmVsYXRpb24sIGluaGVyaXRl ZCwgaW4tZnJvbS1jbGF1c2UpOgorICAgQWxpYXM6IHYgKCkKKyAgIEVyZWY6IHYgKGlkLCBuYW1l LCBnZW51cykKKyAgIFJlbGF0aW9uOiB2ZWdldGFibGVzCisgICBSZWxhdGlvbiBLaW5kOiBwYXJ0 aXRpb25lZF90YWJsZQorICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFyZUxvY2sKKyAg IFBlcm1pc3Npb24gSW5mbyBJbmRleDogMQorIFJUSSAyIChzdWJxdWVyeSwgaW4tZnJvbS1jbGF1 c2UpOgorICAgRXJlZjogdW5uYW1lZF9zdWJxdWVyeSAoaWQsIG5hbWUsIGdlbnVzKQorIFJUSSAz IChyZWxhdGlvbiwgaW4tZnJvbS1jbGF1c2UpOgorICAgQWxpYXM6IHYgKGlkLCBuYW1lLCBnZW51 cykKKyAgIEVyZWY6IHYgKGlkLCBuYW1lLCBnZW51cykKKyAgIFJlbGF0aW9uOiBicmFzc2ljYQor ICAgUmVsYXRpb24gS2luZDogcmVsYXRpb24KKyAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNz U2hhcmVMb2NrCisgUlRJIDQgKHJlbGF0aW9uLCBpbi1mcm9tLWNsYXVzZSk6CisgICBBbGlhczog diAoaWQsIG5hbWUsIGdlbnVzKQorICAgRXJlZjogdiAoaWQsIG5hbWUsIGdlbnVzKQorICAgUmVs YXRpb246IGRhdWN1cworICAgUmVsYXRpb24gS2luZDogcmVsYXRpb24KKyAgIFJlbGF0aW9uIExv Y2sgTW9kZTogQWNjZXNzU2hhcmVMb2NrCisgUlRJIDUgKHJlbGF0aW9uLCBpbmhlcml0ZWQsIGlu LWZyb20tY2xhdXNlKToKKyAgIFN1YnBsYW46IHVubmFtZWRfc3VicXVlcnkKKyAgIEVyZWY6IHZl Z2V0YWJsZXMgKGlkLCBuYW1lLCBnZW51cykKKyAgIFJlbGF0aW9uOiB2ZWdldGFibGVzCisgICBS ZWxhdGlvbiBLaW5kOiBwYXJ0aXRpb25lZF90YWJsZQorICAgUmVsYXRpb24gTG9jayBNb2RlOiBB Y2Nlc3NTaGFyZUxvY2sKKyAgIFBlcm1pc3Npb24gSW5mbyBJbmRleDogMgorIFJUSSA2IChyZWxh dGlvbiwgaW4tZnJvbS1jbGF1c2UpOgorICAgU3VicGxhbjogdW5uYW1lZF9zdWJxdWVyeQorICAg QWxpYXM6IHZlZ2V0YWJsZXMgKGlkLCBuYW1lLCBnZW51cykKKyAgIEVyZWY6IHZlZ2V0YWJsZXMg KGlkLCBuYW1lLCBnZW51cykKKyAgIFJlbGF0aW9uOiBkYXVjdXMKKyAgIFJlbGF0aW9uIEtpbmQ6 IHJlbGF0aW9uCisgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJlTG9jaworIFVucHJ1 bmFibGUgUlRJczogMSAzIDQgNSA2CisoNTEgcm93cykKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9w Z19vdmVyZXhwbGFpbi5jCmluZGV4IDMxNmZmZDFjODdmLi5iZjhjNzY4ZWQ0NyAxMDA2NDQKLS0t IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIv cGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpAQCAtMzk1LDYgKzM5NSw4IEBAIHN0YXRp YyB2b2lkCiBvdmVyZXhwbGFpbl9yYW5nZV90YWJsZShQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQs IEV4cGxhaW5TdGF0ZSAqZXMpCiB7CiAJSW5kZXgJCXJ0aTsKKwlMaXN0Q2VsbCAgICpsY19zdWJy dGluZm8gPSBsaXN0X2hlYWQocGxhbm5lZHN0bXQtPnN1YnJ0aW5mb3MpOworCVN1YlBsYW5SVElu Zm8gKnJ0aW5mbyA9IE5VTEw7CiAKIAkvKiBPcGVuIGdyb3VwLCBvbmUgZW50cnkgcGVyIFJhbmdl VGJsRW50cnkgKi8KIAlFeHBsYWluT3Blbkdyb3VwKCJSYW5nZSBUYWJsZSIsICJSYW5nZSBUYWJs ZSIsIGZhbHNlLCBlcyk7CkBAIC00MDUsNiArNDA3LDE4IEBAIG92ZXJleHBsYWluX3JhbmdlX3Rh YmxlKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIAkJUmFuZ2VU YmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBwbGFubmVkc3RtdC0+cnRhYmxlKTsKIAkJY2hh cgkgICAqa2luZCA9IE5VTEw7CiAJCWNoYXIJICAgKnJlbGtpbmQ7CisJCVN1YlBsYW5SVEluZm8g Km5leHRfcnRpbmZvOworCisJCS8qIEFkdmFuY2UgdG8gbmV4dCBTdWJSVEluZm8sIGlmIGl0J3Mg dGltZS4gKi8KKwkJaWYgKGxjX3N1YnJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQluZXh0X3J0aW5m byA9IGxmaXJzdChsY19zdWJydGluZm8pOworCQkJaWYgKHJ0aSA+IG5leHRfcnRpbmZvLT5ydG9m ZnNldCkKKwkJCXsKKwkJCQlydGluZm8gPSBuZXh0X3J0aW5mbzsKKwkJCQlsY19zdWJydGluZm8g PSBsbmV4dChwbGFubmVkc3RtdC0+c3VicnRpbmZvcywgbGNfc3VicnRpbmZvKTsKKwkJCX0KKwkJ fQogCiAJCS8qIE5VTEwgZW50cmllcyBhcmUgcG9zc2libGU7IHNraXAgdGhlbSAqLwogCQlpZiAo cnRlID09IE5VTEwpCkBAIC00NjksNiArNDgzLDI4IEBAIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIAkJCUV4cGxhaW5Q cm9wZXJ0eUJvb2woIkluIEZyb20gQ2xhdXNlIiwgcnRlLT5pbkZyb21DbCwgZXMpOwogCQl9CiAK KwkJLyoKKwkJICogSW5kaWNhdGUgd2hpY2ggc3VicGxhbiBpcyB0aGUgb3JpZ2luIG9mIHdoaWNo IFJURS4gTm90ZSBkdW1teQorCQkgKiBzdWJwbGFucy4gSGVyZSBhZ2Fpbiwgd2UgY3J1bmNoIG1v cmUgb250byBvbmUgbGluZSBpbiB0ZXh0IGZvcm1hdC4KKwkJICovCisJCWlmIChydGluZm8gIT0g TlVMTCkKKwkJeworCQkJaWYgKGVzLT5mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwkJ CXsKKwkJCQlpZiAoIXJ0aW5mby0+ZHVtbXkpCisJCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIlN1 YnBsYW4iLCBydGluZm8tPnBsYW5fbmFtZSwgZXMpOworCQkJCWVsc2UKKwkJCQkJRXhwbGFpblBy b3BlcnR5VGV4dCgiU3VicGxhbiIsCisJCQkJCQkJCQkJcHNwcmludGYoIiVzIChkdW1teSkiLAor CQkJCQkJCQkJCQkJIHJ0aW5mby0+cGxhbl9uYW1lKSwgZXMpOworCQkJfQorCQkJZWxzZQorCQkJ eworCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIlN1YnBsYW4iLCBydGluZm8tPnBsYW5fbmFtZSwg ZXMpOworCQkJCUV4cGxhaW5Qcm9wZXJ0eUJvb2woIlN1YnBsYW4gSXMgRHVtbXkiLCBydGluZm8t PmR1bW15LCBlcyk7CisJCQl9CisJCX0KKwogCQkvKiBydGUtPmFsaWFzIGlzIG9wdGlvbmFsOyBy dGUtPmVyZWYgaXMgcmVxdWVzdGVkICovCiAJCWlmIChydGUtPmFsaWFzICE9IE5VTEwpCiAJCQlv dmVyZXhwbGFpbl9hbGlhcygiQWxpYXMiLCBydGUtPmFsaWFzLCBlcyk7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX292ZXJleHBsYWluL3NxbC9wZ19vdmVyZXhwbGFpbi5zcWwgYi9jb250cmliL3Bn X292ZXJleHBsYWluL3NxbC9wZ19vdmVyZXhwbGFpbi5zcWwKaW5kZXggNDJlMjc1YWMyZjkuLjM0 YTk1N2NiZWQzIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3NxbC9wZ19vdmVy ZXhwbGFpbi5zcWwKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9zcWwvcGdfb3ZlcmV4cGxh aW4uc3FsCkBAIC0xMTAsMyArMTEwLDEzIEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVS RSBnZW51cyA9ICdkYXVjdXMnOwogLS0gQWxzbyB0ZXN0IGEgY2FzZSB0aGF0IGludm9sdmVzIGEg d3JpdGUuCiBFWFBMQUlOIChSQU5HRV9UQUJMRSwgQ09TVFMgT0ZGKQogSU5TRVJUIElOVE8gdmVn ZXRhYmxlcyAobmFtZSwgZ2VudXMpIFZBTFVFUyAoJ2Jyb2Njb2Zsb3dlcicsICdicmFzc2ljYScp OworCistLSBzaG91bGQgc2hvdyAiU3VicGxhbjogc3ViIgorRVhQTEFJTiAoUkFOR0VfVEFCTEUs IENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdmVnZXRhYmxlcyB2LAorICAgICAgIChTRUxFQ1Qg KiBGUk9NIHZlZ2V0YWJsZXMgV0hFUkUgZ2VudXMgPSAnZGF1Y3VzJyBPRkZTRVQgMCkgc3ViOwor CistLSBzaG91bGQgc2hvdyAiU3VicGxhbjogdW5uYW1lZF9zdWJxdWVyeSIKK0VYUExBSU4gKFJB TkdFX1RBQkxFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHZlZ2V0YWJsZXMgdiwKKyAgICAg ICAoU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJFIGdlbnVzID0gJ2RhdWN1cycgT0ZGU0VU IDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDBjOTNmNDFmZmZmLi4y YzlmYjUwYjYxMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNjU1LDYg KzY1NSw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+dW5wcnVuYWJsZVJlbGlkcyA9 IGJtc19kaWZmZXJlbmNlKGdsb2ItPmFsbFJlbGlkcywKIAkJCQkJCQkJCQkJICBnbG9iLT5wcnVu YWJsZVJlbGlkcyk7CiAJcmVzdWx0LT5wZXJtSW5mb3MgPSBnbG9iLT5maW5hbHJ0ZXBlcm1pbmZv czsKKwlyZXN1bHQtPnN1YnJ0aW5mb3MgPSBnbG9iLT5zdWJydGluZm9zOwogCXJlc3VsdC0+cmVz dWx0UmVsYXRpb25zID0gZ2xvYi0+cmVzdWx0UmVsYXRpb25zOwogCXJlc3VsdC0+YXBwZW5kUmVs YXRpb25zID0gZ2xvYi0+YXBwZW5kUmVsYXRpb25zOwogCXJlc3VsdC0+c3VicGxhbnMgPSBnbG9i LT5zdWJwbGFuczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJl ZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCAxNmQyMDBj ZmI0Ni4uYTViMjMxNGVmMmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAg LTM5OSw2ICszOTksMjYgQEAgYWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUoUGxhbm5lckluZm8gKnJv b3QsIGJvb2wgcmVjdXJzaW5nKQogCUluZGV4CQlydGk7CiAJTGlzdENlbGwgICAqbGM7CiAKKwkv KgorCSAqIFJlY29yZCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gbWFrZSBpdCBwb3NzaWJsZSBmb3Ig Y29kZSB0aGF0IGxvb2tzIGF0CisJICogdGhlIGZpbmFsIHJhbmdlIHRhYmxlIHRvIHVuZGVyc3Rh bmQgaG93IGl0IHdhcyBjb25zdHJ1Y3RlZC4gKElmCisJICogZmluYWxydGFibGUgaXMgc3RpbGwg TklMLCB0aGVuIHRoaXMgaXMgdGhlIHZlcnkgdG9wbW9zdCBQbGFubmVySW5mbywKKwkgKiB3aGlj aCB3aWxsIGFsd2F5cyBoYXZlIHBsYW5fbmFtZSA9PSBOVUxMIGFuZCBydG9mZnNldCA9PSAwOyB3 ZSBvbWl0IHRoZQorCSAqIGRlZ2VuZXJhdGUgbGlzdCBlbnRyeS4pCisJICovCisJaWYgKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlICE9IE5JTCkKKwl7CisJCVN1YlBsYW5SVEluZm8gKnJ0aW5mbyA9 IG1ha2VOb2RlKFN1YlBsYW5SVEluZm8pOworCisJCXJ0aW5mby0+cGxhbl9uYW1lID0gcm9vdC0+ cGxhbl9uYW1lOworCQlydGluZm8tPnJ0b2Zmc2V0ID0gbGlzdF9sZW5ndGgocm9vdC0+Z2xvYi0+ ZmluYWxydGFibGUpOworCisJCS8qIFdoZW4gcmVjdXJzaW5nID0gdHJ1ZSwgaXQncyBhbiB1bnBs YW5uZWQgb3IgZHVtbXkgc3VicXVlcnkuICovCisJCXJ0aW5mby0+ZHVtbXkgPSByZWN1cnNpbmc7 CisKKwkJcm9vdC0+Z2xvYi0+c3VicnRpbmZvcyA9IGxhcHBlbmQocm9vdC0+Z2xvYi0+c3VicnRp bmZvcywgcnRpbmZvKTsKKwl9CisKIAkvKgogCSAqIEFkZCB0aGUgcXVlcnkncyBvd24gUlRFcyB0 byB0aGUgZmxhdHRlbmVkIHJhbmdldGFibGUuCiAJICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXgg ZmI4MDg4MjNhY2YuLmMxZTkzOTc2MjNiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMjA4LDYg KzIwOCw5IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiAiZmxhdCIgbGlzdCBv ZiBSVEVQZXJtaXNzaW9uSW5mb3MgKi8KIAlMaXN0CSAgICpmaW5hbHJ0ZXBlcm1pbmZvczsKIAor CS8qIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBub2RlcyAqLworCUxpc3QJICAgKnN1YnJ0aW5mb3M7 CisKIAkvKiAiZmxhdCIgbGlzdCBvZiBQbGFuUm93TWFya3MgKi8KIAlMaXN0CSAgICpmaW5hbHJv d21hcmtzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDRiYzZmYjU2NzBlLi45YWU3MmE2MDdl MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTEzMSw2ICsxMzEsOSBAQCB0eXBlZGVmIHN0cnVj dCBQbGFubmVkU3RtdAogCSAqLwogCUxpc3QJICAgKnN1YnBsYW5zOwogCisJLyogYSBsaXN0IG9m IFN1YlBsYW5SVEluZm8gb2JqZWN0cyAqLworCUxpc3QJICAgKnN1YnJ0aW5mb3M7CisKIAkvKiBp bmRpY2VzIG9mIHN1YnBsYW5zIHRoYXQgcmVxdWlyZSBSRVdJTkQgKi8KIAlCaXRtYXBzZXQgICpy ZXdpbmRQbGFuSURzOwogCkBAIC0xODIxLDQgKzE4MjQsMTggQEAgdHlwZWRlZiBlbnVtIE1vbm90 b25pY0Z1bmN0aW9uCiAJTU9OT1RPTklDRlVOQ19CT1RIID0gTU9OT1RPTklDRlVOQ19JTkNSRUFT SU5HIHwgTU9OT1RPTklDRlVOQ19ERUNSRUFTSU5HLAogfSBNb25vdG9uaWNGdW5jdGlvbjsKIAor LyoKKyAqIFN1YlBsYW5SVEluZm8KKyAqCisgKiBJbmZvcm1hdGlvbiBhYm91dCB3aGljaCByYW5n ZSB0YWJsZSBlbnRyaWVzIGNhbWUgZnJvbSB3aGljaCBzdWJxdWVyeQorICogcGxhbm5pbmcgY3lj bGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBTdWJQbGFuUlRJbmZvCit7CisJTm9kZVRhZwkJdHlw ZTsKKwljaGFyCSAgICpwbGFuX25hbWU7CisJSW5kZXgJCXJ0b2Zmc2V0OworCWJvb2wJCWR1bW15 OworfSBTdWJQbGFuUlRJbmZvOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5PREVTX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOWY1ZWU4ZmQ0ODIuLmM5ZjQ1NmI1YTA4IDEwMDY0 NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjkyOSw2ICsyOTI5LDcgQEAgU3ViTGluawogU3Vi TGlua1R5cGUKIFN1Yk9wdHMKIFN1YlBsYW4KK1N1YlBsYW5SVEluZm8KIFN1YlBsYW5TdGF0ZQog U3ViUmVsSW5mbwogU3ViUmVtb3ZlUmVscwotLSAKMi41MS4wCgo= --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0002-Pass-cursorOptions-to-planner_setup_hook.patch" Content-Disposition: attachment; filename="v14-0002-Pass-cursorOptions-to-planner_setup_hook.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclha9t1 RnJvbSA2ODhlZDFjZjhkMDZhYzQ4NDNjMDRmYTkyYWJkNDJjZDA4ZjI2ZDMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMjggSmFuIDIwMjYgMTI6NTk6MjkgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNCAw Mi8xMF0gUGFzcyBjdXJzb3JPcHRpb25zIHRvIHBsYW5uZXJfc2V0dXBfaG9vay4KCkNvbW1pdCA5 NGYzYWQzOTYxYTJjYjMyZDMwYzc5ZjAxYTcwZGI0Y2FmZjEzMzE4IGZhaWxlZCB0byBkbyB0aGlz CmJlY2F1c2UgSSBjb3VsZG4ndCB0aGluayBvZiBhIHVzZSBmb3IgdGhlIGluZm9ybWF0aW9uLCBi dXQgdGhpcyBoYXMKcHJvdmVuIHRvIGJlIHNob3J0LXNpZ2h0ZWQuIEJlc3QgdG8gZml4IGl0IGJl Zm9yZSB0aGlzIGNvZGUgaXMKb2ZmaWNpYWxseSByZWxlYXNlZC4KCk5vdywgdGhlIG9ubHkgYXJn dW1lbnQgdG8gc3RhbmRhcmRfcGxhbmVuciB0aGF0IGlzbid0IHBhc3NlZCB0bwpwbGFubmVyX3Nl dHVwX2hvb2sgaXMgYm91bmRQYXJhbXMsIGJ1dCB0aGF0IGlzIGFjY2Vzc2libGUgdmlhCmdsb2It PmJvdW5kUGFyYW1zLCBhbmQgc28gZG9lc24ndCBuZWVkIHRvIGJlIHBhc3NlZCBzZXBhcmF0ZWx5 LgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyB8IDMgKystCiBzcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm5lci5oICAgICAgfCAxICsKIDIgZmlsZXMgY2hhbmdlZCwg MyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jCmluZGV4IDc1N2JkYzdiMWRlLi4wYzkzZjQxZmZmZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYwpAQCAtNTExLDcgKzUxMSw4IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVl cnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAog CiAJLyogQWxsb3cgcGx1Z2lucyB0byB0YWtlIGNvbnRyb2wgYWZ0ZXIgd2UndmUgaW5pdGlhbGl6 ZWQgImdsb2IiICovCiAJaWYgKHBsYW5uZXJfc2V0dXBfaG9vaykKLQkJKCpwbGFubmVyX3NldHVw X2hvb2spIChnbG9iLCBwYXJzZSwgcXVlcnlfc3RyaW5nLCAmdHVwbGVfZnJhY3Rpb24sIGVzKTsK KwkJKCpwbGFubmVyX3NldHVwX2hvb2spIChnbG9iLCBwYXJzZSwgcXVlcnlfc3RyaW5nLCBjdXJz b3JPcHRpb25zLAorCQkJCQkJCSAgICZ0dXBsZV9mcmFjdGlvbiwgZXMpOwogCiAJLyogcHJpbWFy eSBwbGFubmluZyBlbnRyeSBwb2ludCAobWF5IHJlY3Vyc2UgZm9yIHN1YnF1ZXJpZXMpICovCiAJ cm9vdCA9IHN1YnF1ZXJ5X3BsYW5uZXIoZ2xvYiwgcGFyc2UsIE5VTEwsIE5VTEwsIGZhbHNlLCB0 dXBsZV9mcmFjdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFubmVy LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm5lci5oCmluZGV4IGFlM2Y3ZjJlZGI2Li44 MDUwOTc3M2MwMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5uZXIuaAor KysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm5lci5oCkBAIC0zNSw2ICszNSw3IEBAIGV4 dGVybiBQR0RMTElNUE9SVCBwbGFubmVyX2hvb2tfdHlwZSBwbGFubmVyX2hvb2s7CiAvKiBIb29r IGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGFmdGVyIFBsYW5uZXJHbG9iYWwgaXMgaW5pdGlh bGl6ZWQgKi8KIHR5cGVkZWYgdm9pZCAoKnBsYW5uZXJfc2V0dXBfaG9va190eXBlKSAoUGxhbm5l ckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAogCQkJCQkJCQkJCSBjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsCisJCQkJCQkJCQkJIGludCBjdXJzb3JPcHRpb25zLAogCQkJCQkJCQkJCSBkb3Vi bGUgKnR1cGxlX2ZyYWN0aW9uLAogCQkJCQkJCQkJCSBFeHBsYWluU3RhdGUgKmVzKTsKIGV4dGVy biBQR0RMTElNUE9SVCBwbGFubmVyX3NldHVwX2hvb2tfdHlwZSBwbGFubmVyX3NldHVwX2hvb2s7 Ci0tIAoyLjUxLjAKCg== --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0005-Store-information-about-Append-node-consolidatio.patch" Content-Disposition: attachment; filename="v14-0005-Store-information-about-Append-node-consolidatio.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclhaa74 RnJvbSA1MTdlZTdkZmZjNGExZjkyNTc0NGYwZjBlMWZjZjI3OTBlYzc2ODRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6MTI6MjUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNCAw NS8xMF0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbgog aW4gdGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2Fu dCB0byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFu ZCB3aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxh bi4gVG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMK b2YgcGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4g QXBwZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBh IHN1Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0 aGUgc3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtp bmcgdGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlz LCBwcm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4g dGhlICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VB cHBlbmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZp bmcgQXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmll bGQgaXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBh cHBlbmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9u ZSwgaWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBp dCB3YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVy ZQpwYXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lk IGxvc2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBp biB0aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19v dmVyZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhl IHNhdmVkIFJUSSBzZXRzLgoKQ28tYXV0aG9yZWQtYnk6IFJvYmVydCBIYWFzIDxyaGFhc0Bwb3N0 Z3Jlc3FsLm9yZz4KQ28tYXV0aG9yZWQtYnk6IEx1a2FzIEZpdHRsIDxsdWthc0BmaXR0bC5jb20+ ClJldmlld2VkLWJ5OiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpSZXZpZXdlZC1ieTog SmFrdWIgV2FydGFrIDxqYWt1Yi53YXJ0YWtAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6 IEdyZWcgQnVyZCA8Z3JlZ0BidXJkLm1lPgpSZXZpZXdlZC1ieTogSmFjb2IgQ2hhbXBpb24gPGph Y29iLmNoYW1waW9uQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBBbWl0IExhbmdvdGUg PGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSGFpYm8gWWFuIDx0cmlzdGFu LnlpbUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBBbGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndh bmcub3NzQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9a LUpoMVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWlsLmNv bQotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAgICAgICAgICB8ICAg NCArLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jICAgICAgIHwgIDU2 ICsrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgICAgICAgfCAx OTkgKysrKysrKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVs cy5jICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYyAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMg ICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5j ICAgICAgICB8ICA0MyArKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5j ICAgICAgICAgfCAgMjYgKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAg ICAgICAgICAgfCAgMTAgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAg ICAgICAgIHwgIDExICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oICAgICAgICAg ICAgICB8ICAxOCArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAg ICAgIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDI3MCBpbnNlcnRpb25zKCspLCAxMTAgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9w Z19vdmVyZXhwbGFpbi5vdXQgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292 ZXJleHBsYWluLm91dAppbmRleCBjN2VlZGFkODBmYy4uZjM3NmQyZTc5OTYgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0CisrKyBi L2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0CkBAIC0x MDQsNiArMTA0LDcgQEAgJCQpOwogICAgICAgICAgICAgICAgUGFyYWxsZWwgU2FmZTogdHJ1ZQog ICAgICAgICAgICAgICAgUGxhbiBOb2RlIElEOiAyCiAgICAgICAgICAgICAgICBBcHBlbmQgUlRJ czogMQorICAgICAgICAgICAgICAgQ2hpbGQgQXBwZW5kIFJUSXM6IG5vbmUKICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBicmFzc2ljYSB2ZWdldGFibGVzXzEKICAgICAgICAgICAgICAg ICAgICAgIERpc2FibGVkIE5vZGVzOiAwCiAgICAgICAgICAgICAgICAgICAgICBQYXJhbGxlbCBT YWZlOiB0cnVlCkBAIC0xNDIsNyArMTQzLDcgQEAgJCQpOwogICAgUmVsYXRpb24gS2luZDogcmVs YXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVMb2NrCiAgVW5wcnVuYWJs ZSBSVElzOiAxIDMgNAotKDUzIHJvd3MpCisoNTQgcm93cykKIAogLS0gVGVzdCBhIGRpZmZlcmVu dCBvdXRwdXQgZm9ybWF0LgogU0VMRUNUIGV4cGxhaW5fZmlsdGVyKCQkCkBAIC0xOTcsNiArMTk4 LDcgQEAgJCQpOwogICAgICAgICAgICAgICAgPGV4dFBhcmFtPm5vbmU8L2V4dFBhcmFtPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8YWxsUGFyYW0+bm9uZTwv YWxsUGFyYW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgICAgIDxB cHBlbmQtUlRJcz4xPC9BcHBlbmQtUlRJcz4gICAgICAgICAgICAgICAgICAgICAgICAgKworICAg ICAgICAgICAgICAgPENoaWxkLUFwcGVuZC1SVElzPm5vbmU8L0NoaWxkLUFwcGVuZC1SVElzPiAg ICAgICAgICArCiAgICAgICAgICAgICAgICA8U3VicGxhbnMtUmVtb3ZlZD4wPC9TdWJwbGFucy1S ZW1vdmVkPiAgICAgICAgICAgICAgICsKICAgICAgICAgICAgICAgIDxQbGFucz4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgICA8 UGxhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCmRpZmYg LS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgYi9jb250cmli L3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggZTAxODRiYTMxNGEuLjM2ZTZh YWMwZTJjIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWlu LmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCkBAIC01NCw2 ICs1NCw4IEBAIHN0YXRpYyB2b2lkIG92ZXJleHBsYWluX2FsaWFzKGNvbnN0IGNoYXIgKnFsYWJl bCwgQWxpYXMgKmFsaWFzLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9p ZCBvdmVyZXhwbGFpbl9iaXRtYXBzZXQoY29uc3QgY2hhciAqcWxhYmVsLCBCaXRtYXBzZXQgKmJt cywKIAkJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIG92ZXJleHBsYWlu X2JpdG1hcHNldF9saXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqYm1zX2xpc3QsCisJCQkJ CQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIG92ZXJleHBsYWluX2ludGxp c3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpsaXN0LAogCQkJCQkJCQlFeHBsYWluU3RhdGUg KmVzKTsKIApAQCAtMjMyLDExICsyMzQsMTcgQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9vayhQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCW92ZXJleHBsYWluX2Jp dG1hcHNldCgiQXBwZW5kIFJUSXMiLAogCQkJCQkJCQkJICAoKEFwcGVuZCAqKSBwbGFuKS0+YXBw cmVsaWRzLAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xpc3Qo IkNoaWxkIEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKEFwcGVuZCAqKSBwbGFuKS0+Y2hp bGRfYXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJCQkJICAgZXMpOwogCQkJCWJyZWFrOwogCQkJ Y2FzZSBUX01lcmdlQXBwZW5kOgogCQkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiQXBwZW5kIFJU SXMiLAogCQkJCQkJCQkJICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHMsCiAJCQkJ CQkJCQkgIGVzKTsKKwkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXRfbGlzdCgiQ2hpbGQgQXBwZW5k IFJUSXMiLAorCQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVF9S ZXN1bHQ6CiAKQEAgLTgxNSw2ICs4MjMsNTQgQEAgb3ZlcmV4cGxhaW5fYml0bWFwc2V0KGNvbnN0 IGNoYXIgKnFsYWJlbCwgQml0bWFwc2V0ICpibXMsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJcGZyZWUo YnVmLmRhdGEpOwogfQogCisvKgorICogRW1pdCBhIHRleHQgcHJvcGVydHkgZGVzY3JpYmluZyB0 aGUgY29udGVudHMgb2YgYSBsaXN0IG9mIGJpdG1hcHNldHMuCisgKiBJZiBhIGJpdG1hcHNldCBj b250YWlucyBleGFjdGx5IDEgbWVtYmVyLCB3ZSBqdXN0IHByaW50IGFuIGludGVnZXI7CisgKiBv dGhlcndpc2UsIHdlIHN1cnJvdW5kIHRoZSBsaXN0IG9mIG1lbWJlcnMgYnkgcGFyZW50aGVzZXMu CisgKgorICogSWYgdGhlcmUgYXJlIG5vIGJpdG1hcHNldHMgaW4gdGhlIGxpc3QsIHdlIHByaW50 IHRoZSB3b3JkICJub25lIi4KKyAqLworc3RhdGljIHZvaWQKK292ZXJleHBsYWluX2JpdG1hcHNl dF9saXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqYm1zX2xpc3QsCisJCQkJCQkgICBFeHBs YWluU3RhdGUgKmVzKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZv KCZidWYpOworCisJZm9yZWFjaF9ub2RlKEJpdG1hcHNldCwgYm1zLCBibXNfbGlzdCkKKwl7CisJ CWlmIChibXNfbWVtYmVyc2hpcChibXMpID09IEJNU19TSU5HTEVUT04pCisJCQlhcHBlbmRTdHJp bmdJbmZvKCZidWYsICIgJWQiLCBibXNfc2luZ2xldG9uX21lbWJlcihibXMpKTsKKwkJZWxzZQor CQl7CisJCQlpbnQJCQl4ID0gLTE7CisJCQlib29sCQlmaXJzdCA9IHRydWU7CisKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIiAoIik7CisJCQl3aGlsZSAoKHggPSBibXNfbmV4dF9t ZW1iZXIoYm1zLCB4KSkgPj0gMCkKKwkJCXsKKwkJCQlpZiAoZmlyc3QpCisJCQkJCWZpcnN0ID0g ZmFsc2U7CisJCQkJZWxzZQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnICcpOwor CQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVkIiwgeCk7CisJCQl9CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcigmYnVmLCAnKScpOworCQl9CisJfQorCisJaWYgKGJ1Zi5sZW4gPT0gMCkKKwl7 CisJCUV4cGxhaW5Qcm9wZXJ0eVRleHQocWxhYmVsLCAibm9uZSIsIGVzKTsKKwkJcmV0dXJuOwor CX0KKworCUFzc2VydChidWYuZGF0YVswXSA9PSAnICcpOworCUV4cGxhaW5Qcm9wZXJ0eVRleHQo cWxhYmVsLCBidWYuZGF0YSArIDEsIGVzKTsKKwlwZnJlZShidWYuZGF0YSk7Cit9CisKIC8qCiAg KiBFbWl0IGEgdGV4dCBwcm9wZXJ0eSBkZXNjcmliaW5nIHRoZSBjb250ZW50cyBvZiBhIGxpc3Qg b2YgaW50ZWdlcnMsIE9JRHMsCiAgKiBvciBYSURzIC0tIGVpdGhlciBhIHNwYWNlLXNlcGFyYXRl ZCBsaXN0IG9mIGludGVnZXIgbWVtYmVycywgb3IgdGhlIHdvcmQKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9hbGxwYXRocy5jCmluZGV4IGI0NTgxZTU0ZDkzLi45MDI3NWUyNTg3MiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0xMjgsOCArMTI4LDEwIEBAIHN0YXRpYyBQ YXRoICpnZXRfY2hlYXBlc3RfcGFyYW1ldGVyaXplZF9jaGlsZF9wYXRoKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkJCQkJICAgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKIHN0YXRpYyB2b2lk IGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwKIAkJCQkJCQkJCSAgTGlzdCAq KnN1YnBhdGhzLAotCQkJCQkJCQkJICBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocyk7Ci1zdGF0aWMg UGF0aCAqZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoKTsKKwkJCQkJCQkJ CSAgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBl bmRfcmVsaWRfc2V0cyk7CitzdGF0aWMgUGF0aCAqZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0 aChQYXRoICpwYXRoLAorCQkJCQkJCQkJCSAgTGlzdCAqKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz KTsKIHN0YXRpYyB2b2lkIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKTsK IHN0YXRpYyB2b2lkIHNldF9zdWJxdWVyeV9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCQkJCQkJCQkgIEluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsK QEAgLTE0MDQsMjIgKzE0MDYsMjEgQEAgdm9pZAogYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCUxpc3QgKmxpdmVfY2hpbGRy ZWxzKQogewotCUxpc3QJICAgKnN1YnBhdGhzID0gTklMOwotCWJvb2wJCXN1YnBhdGhzX3ZhbGlk ID0gdHJ1ZTsKLQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0gTklMOwotCWJvb2wJCXN0YXJ0 dXBfc3VicGF0aHNfdmFsaWQgPSB0cnVlOwotCUxpc3QJICAgKnBhcnRpYWxfc3VicGF0aHMgPSBO SUw7Ci0JTGlzdAkgICAqcGFfcGFydGlhbF9zdWJwYXRocyA9IE5JTDsKLQlMaXN0CSAgICpwYV9u b25wYXJ0aWFsX3N1YnBhdGhzID0gTklMOwotCWJvb2wJCXBhcnRpYWxfc3VicGF0aHNfdmFsaWQg PSB0cnVlOwotCWJvb2wJCXBhX3N1YnBhdGhzX3ZhbGlkOworCUFwcGVuZFBhdGhJbnB1dCB1bnBh cmFtZXRlcml6ZWQgPSB7MH07CisJQXBwZW5kUGF0aElucHV0IHN0YXJ0dXAgPSB7MH07CisJQXBw ZW5kUGF0aElucHV0IHBhcnRpYWxfb25seSA9IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQgcGFyYWxs ZWxfYXBwZW5kID0gezB9OworCWJvb2wJCXVucGFyYW1ldGVyaXplZF92YWxpZCA9IHRydWU7CisJ Ym9vbAkJc3RhcnR1cF92YWxpZCA9IHRydWU7CisJYm9vbAkJcGFydGlhbF9vbmx5X3ZhbGlkID0g dHJ1ZTsKKwlib29sCQlwYXJhbGxlbF9hcHBlbmRfdmFsaWQgPSB0cnVlOwogCUxpc3QJICAgKmFs bF9jaGlsZF9wYXRoa2V5cyA9IE5JTDsKIAlMaXN0CSAgICphbGxfY2hpbGRfb3V0ZXJzID0gTklM OwogCUxpc3RDZWxsICAgKmw7CiAJZG91YmxlCQlwYXJ0aWFsX3Jvd3MgPSAtMTsKIAogCS8qIElm IGFwcHJvcHJpYXRlLCBjb25zaWRlciBwYXJhbGxlbCBhcHBlbmQgKi8KLQlwYV9zdWJwYXRoc192 YWxpZCA9IGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQgJiYgcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsK KwlwYXJhbGxlbF9hcHBlbmRfdmFsaWQgPSBlbmFibGVfcGFyYWxsZWxfYXBwZW5kICYmIHJlbC0+ Y29uc2lkZXJfcGFyYWxsZWw7CiAKIAkvKgogCSAqIEZvciBldmVyeSBub24tZHVtbXkgY2hpbGQs IHJlbWVtYmVyIHRoZSBjaGVhcGVzdCBwYXRoLiAgQWxzbywgaWRlbnRpZnkKQEAgLTE0NDMsOSAr MTQ0NCw5IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsCiAJCWlmIChjaGlsZHJlbC0+cGF0aGxpc3QgIT0gTklMICYmCiAJCQljaGls ZHJlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKQogCQkJYWNjdW11 bGF0ZV9hcHBlbmRfc3VicGF0aChjaGlsZHJlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aCwKLQkJCQkJ CQkJCSAgJnN1YnBhdGhzLCBOVUxMKTsKKwkJCQkJCQkJCSAgJnVucGFyYW1ldGVyaXplZC5zdWJw YXRocywgTlVMTCwgJnVucGFyYW1ldGVyaXplZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJ CWVsc2UKLQkJCXN1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CisJCQl1bnBhcmFtZXRlcml6ZWRfdmFs aWQgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBXaGVuIHRoZSBwbGFubmVyIGlzIGNvbnNpZGVyaW5n IGNoZWFwIHN0YXJ0dXAgcGxhbnMsIHdlJ2xsIGFsc28KQEAgLTE0NzEsMTEgKzE0NzIsMTIgQEAg YWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCS8qIGNoZWFwZXN0X3N0YXJ0dXBfcGF0aCBtdXN0IG5vdCBiZSBhIHBhcmFtZXRlcml6 ZWQgcGF0aC4gKi8KIAkJCUFzc2VydChjaGVhcGVzdF9wYXRoLT5wYXJhbV9pbmZvID09IE5VTEwp OwogCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9wYXRoLAotCQkJCQkJCQkJ ICAmc3RhcnR1cF9zdWJwYXRocywKLQkJCQkJCQkJCSAgTlVMTCk7CisJCQkJCQkJCQkgICZzdGFy dHVwLnN1YnBhdGhzLAorCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJICAmc3RhcnR1cC5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCX0KIAkJZWxzZQotCQkJc3RhcnR1cF9zdWJwYXRoc192 YWxpZCA9IGZhbHNlOworCQkJc3RhcnR1cF92YWxpZCA9IGZhbHNlOwogCiAKIAkJLyogU2FtZSBp ZGVhLCBidXQgZm9yIGEgcGFydGlhbCBwbGFuLiAqLwpAQCAtMTQ4MywxNiArMTQ4NSwxNyBAQCBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQl7CiAJCQljaGVhcGVzdF9wYXJ0aWFsX3BhdGggPSBsaW5pdGlhbChjaGlsZHJlbC0+cGFy dGlhbF9wYXRobGlzdCk7CiAJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3Bh cnRpYWxfcGF0aCwKLQkJCQkJCQkJCSAgJnBhcnRpYWxfc3VicGF0aHMsIE5VTEwpOworCQkJCQkJ CQkJICAmcGFydGlhbF9vbmx5LnBhcnRpYWxfc3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkgICZw YXJ0aWFsX29ubHkuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQl9CiAJCWVsc2UKLQkJCXBh cnRpYWxfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCXBhcnRpYWxfb25seV92YWxpZCA9IGZh bHNlOwogCiAJCS8qCiAJCSAqIFNhbWUgaWRlYSwgYnV0IGZvciBhIHBhcmFsbGVsIGFwcGVuZCBt aXhpbmcgcGFydGlhbCBhbmQgbm9uLXBhcnRpYWwKIAkJICogcGF0aHMuCiAJCSAqLwotCQlpZiAo cGFfc3VicGF0aHNfdmFsaWQpCisJCWlmIChwYXJhbGxlbF9hcHBlbmRfdmFsaWQpCiAJCXsKIAkJ CVBhdGgJICAgKm5wcGF0aCA9IE5VTEw7CiAKQEAgLTE1MDIsNyArMTUwNSw3IEBAIGFkZF9wYXRo c190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlp ZiAoY2hlYXBlc3RfcGFydGlhbF9wYXRoID09IE5VTEwgJiYgbnBwYXRoID09IE5VTEwpCiAJCQl7 CiAJCQkJLyogTmVpdGhlciBhIHBhcnRpYWwgbm9yIGEgcGFyYWxsZWwtc2FmZSBwYXRoPyAgRm9y Z2V0IGl0LiAqLwotCQkJCXBhX3N1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CisJCQkJcGFyYWxsZWxf YXBwZW5kX3ZhbGlkID0gZmFsc2U7CiAJCQl9CiAJCQllbHNlIGlmIChucHBhdGggPT0gTlVMTCB8 fAogCQkJCQkgKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMICYmCkBAIC0xNTExLDggKzE1 MTQsOSBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCQkJCS8qIFBhcnRpYWwgcGF0aCBpcyBjaGVhcGVyIG9yIHRoZSBvbmx5IG9w dGlvbi4gKi8KIAkJCQlBc3NlcnQoY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpOwogCQkJ CWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAotCQkJCQkJ CQkJCSAgJnBhX3BhcnRpYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJICAmcGFfbm9ucGFydGlhbF9z dWJwYXRocyk7CisJCQkJCQkJCQkJICAmcGFyYWxsZWxfYXBwZW5kLnBhcnRpYWxfc3VicGF0aHMs CisJCQkJCQkJCQkJICAmcGFyYWxsZWxfYXBwZW5kLnN1YnBhdGhzLAorCQkJCQkJCQkJCSAgJnBh cmFsbGVsX2FwcGVuZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJCQllbHNlCiAJ CQl7CkBAIC0xNTMwLDggKzE1MzQsOSBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCSAqIGZpZ3VyZSB0aGF0IG91dC4KIAkJ CQkgKi8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKG5wcGF0aCwKLQkJCQkJCQkJCQkg ICZwYV9ub25wYXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCSAgTlVMTCk7CisJCQkJCQkJCQkJ ICAmcGFyYWxsZWxfYXBwZW5kLnN1YnBhdGhzLAorCQkJCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkJ CQkgICZwYXJhbGxlbF9hcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQkJfQogCQl9 CiAKQEAgLTE2MDUsMjggKzE2MTAsMjggQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiB1bnBhcmFtZXRlcml6ZWQgQXBwZW5k IHBhdGggZm9yIHRoZSByZWwuICAoTm90ZTogdGhpcyBpcyBjb3JyZWN0IGV2ZW4KIAkgKiBpZiB3 ZSBoYXZlIHplcm8gb3Igb25lIGxpdmUgc3VicGF0aCBkdWUgdG8gY29uc3RyYWludCBleGNsdXNp b24uKQogCSAqLwotCWlmIChzdWJwYXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAq KSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCWlmICh1bnBh cmFtZXRlcml6ZWRfdmFsaWQpCisJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgdW5wYXJhbWV0ZXJpemVkLAogCQkJCQkJCQkJCQkJICBOSUwsIE5V TEwsIDAsIGZhbHNlLAogCQkJCQkJCQkJCQkJICAtMSkpOwogCiAJLyogYnVpbGQgYW4gQXBwZW5k UGF0aCBmb3IgdGhlIGNoZWFwIHN0YXJ0dXAgcGF0aHMsIGlmIHZhbGlkICovCi0JaWYgKHN0YXJ0 dXBfc3VicGF0aHNfdmFsaWQpCi0JCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgc3RhcnR1cF9zdWJwYXRocywKLQkJCQkJCQkJCQkJCSAgTklMLCBO SUwsIE5VTEwsIDAsIGZhbHNlLCAtMSkpOworCWlmIChzdGFydHVwX3ZhbGlkKQorCQlhZGRfcGF0 aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN0YXJ0dXAsCisJ CQkJCQkJCQkJCQkgIE5JTCwgTlVMTCwgMCwgZmFsc2UsIC0xKSk7CiAKIAkvKgogCSAqIENvbnNp ZGVyIGFuIGFwcGVuZCBvZiB1bm9yZGVyZWQsIHVucGFyYW1ldGVyaXplZCBwYXJ0aWFsIHBhdGhz LiAgTWFrZQogCSAqIGl0IHBhcmFsbGVsLWF3YXJlIGlmIHBvc3NpYmxlLgogCSAqLwotCWlmIChw YXJ0aWFsX3N1YnBhdGhzX3ZhbGlkICYmIHBhcnRpYWxfc3VicGF0aHMgIT0gTklMKQorCWlmIChw YXJ0aWFsX29ubHlfdmFsaWQgJiYgcGFydGlhbF9vbmx5LnBhcnRpYWxfc3VicGF0aHMgIT0gTklM KQogCXsKIAkJQXBwZW5kUGF0aCAqYXBwZW5kcGF0aDsKIAkJTGlzdENlbGwgICAqbGM7CiAJCWlu dAkJCXBhcmFsbGVsX3dvcmtlcnMgPSAwOwogCiAJCS8qIEZpbmQgdGhlIGhpZ2hlc3QgbnVtYmVy IG9mIHdvcmtlcnMgcmVxdWVzdGVkIGZvciBhbnkgc3VicGF0aC4gKi8KLQkJZm9yZWFjaChsYywg cGFydGlhbF9zdWJwYXRocykKKwkJZm9yZWFjaChsYywgcGFydGlhbF9vbmx5LnBhcnRpYWxfc3Vi cGF0aHMpCiAJCXsKIAkJCVBhdGgJICAgKnBhdGggPSBsZmlyc3QobGMpOwogCkBAIC0xNjUzLDcg KzE2NTgsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCQlBc3NlcnQocGFyYWxsZWxfd29ya2VycyA+IDApOwogCiAJCS8qIEdl bmVyYXRlIGEgcGFydGlhbCBhcHBlbmQgcGF0aC4gKi8KLQkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9h cHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgcGFydGlhbF9zdWJwYXRocywKKwkJYXBwZW5kcGF0 aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHBhcnRpYWxfb25seSwKIAkJCQkJCQkJ CQlOSUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCQkJZW5hYmxlX3BhcmFsbGVs X2FwcGVuZCwKIAkJCQkJCQkJCQktMSk7CkBAIC0xNjc0LDcgKzE2NzksNyBAQCBhZGRfcGF0aHNf dG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIGEg bm9uLXBhcnRpYWwgcGF0aCB0aGF0IGlzIHN1YnN0YW50aWFsbHkgY2hlYXBlciB0aGFuIGFueSBw YXJ0aWFsIHBhdGg7CiAJICogb3RoZXJ3aXNlLCB3ZSBzaG91bGQgdXNlIHRoZSBhcHBlbmQgcGF0 aCBhZGRlZCBpbiB0aGUgcHJldmlvdXMgc3RlcC4pCiAJICovCi0JaWYgKHBhX3N1YnBhdGhzX3Zh bGlkICYmIHBhX25vbnBhcnRpYWxfc3VicGF0aHMgIT0gTklMKQorCWlmIChwYXJhbGxlbF9hcHBl bmRfdmFsaWQgJiYgcGFyYWxsZWxfYXBwZW5kLnN1YnBhdGhzICE9IE5JTCkKIAl7CiAJCUFwcGVu ZFBhdGggKmFwcGVuZHBhdGg7CiAJCUxpc3RDZWxsICAgKmxjOwpAQCAtMTY4NCw3ICsxNjg5LDcg QEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKIAkJICogRmluZCB0aGUgaGlnaGVzdCBudW1iZXIgb2Ygd29ya2VycyByZXF1ZXN0ZWQg Zm9yIGFueSBwYXJ0aWFsCiAJCSAqIHN1YnBhdGguCiAJCSAqLwotCQlmb3JlYWNoKGxjLCBwYV9w YXJ0aWFsX3N1YnBhdGhzKQorCQlmb3JlYWNoKGxjLCBwYXJhbGxlbF9hcHBlbmQucGFydGlhbF9z dWJwYXRocykKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTE3MDIs OCArMTcwNyw3IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJICAgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl cik7CiAJCUFzc2VydChwYXJhbGxlbF93b3JrZXJzID4gMCk7CiAKLQkJYXBwZW5kcGF0aCA9IGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHBhX25vbnBhcnRpYWxfc3VicGF0aHMsCi0JCQkJ CQkJCQkJcGFfcGFydGlhbF9zdWJwYXRocywKKwkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRf cGF0aChyb290LCByZWwsIHBhcmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQlOSUwsIE5VTEwsIHBh cmFsbGVsX3dvcmtlcnMsIHRydWUsCiAJCQkJCQkJCQkJcGFydGlhbF9yb3dzKTsKIAkJYWRkX3Bh cnRpYWxfcGF0aChyZWwsIChQYXRoICopIGFwcGVuZHBhdGgpOwpAQCAtMTcxMyw3ICsxNzE3LDcg QEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKIAkgKiBBbHNvIGJ1aWxkIHVucGFyYW1ldGVyaXplZCBvcmRlcmVkIGFwcGVuZCBwYXRo cyBiYXNlZCBvbiB0aGUgY29sbGVjdGVkCiAJICogbGlzdCBvZiBjaGlsZCBwYXRoa2V5cy4KIAkg Ki8KLQlpZiAoc3VicGF0aHNfdmFsaWQpCisJaWYgKHVucGFyYW1ldGVyaXplZF92YWxpZCkKIAkJ Z2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhyb290LCByZWwsIGxpdmVfY2hpbGRyZWxzLAog CQkJCQkJCQkJIGFsbF9jaGlsZF9wYXRoa2V5cyk7CiAKQEAgLTE3MzQsMTAgKzE3MzgsMTAgQEAg YWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAl7CiAJCVJlbGlkcwkJcmVxdWlyZWRfb3V0ZXIgPSAoUmVsaWRzKSBsZmlyc3QobCk7CiAJ CUxpc3RDZWxsICAgKmxjcjsKKwkJQXBwZW5kUGF0aElucHV0IHBhcmFtZXRlcml6ZWQgPSB7MH07 CisJCWJvb2wJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSB0cnVlOwogCiAJCS8qIFNlbGVjdCB0aGUg Y2hpbGQgcGF0aHMgZm9yIGFuIEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXphdGlvbiAqLwot CQlzdWJwYXRocyA9IE5JTDsKLQkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOwogCQlmb3JlYWNoKGxj ciwgbGl2ZV9jaGlsZHJlbHMpCiAJCXsKIAkJCVJlbE9wdEluZm8gKmNoaWxkcmVsID0gKFJlbE9w dEluZm8gKikgbGZpcnN0KGxjcik7CkBAIC0xNzQ2LDcgKzE3NTAsNyBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKGNo aWxkcmVsLT5wYXRobGlzdCA9PSBOSUwpCiAJCQl7CiAJCQkJLyogZmFpbGVkIHRvIG1ha2UgYSBz dWl0YWJsZSBwYXRoIGZvciB0aGlzIGNoaWxkICovCi0JCQkJc3VicGF0aHNfdmFsaWQgPSBmYWxz ZTsKKwkJCQlwYXJhbWV0ZXJpemVkX3ZhbGlkID0gZmFsc2U7CiAJCQkJYnJlYWs7CiAJCQl9CiAK QEAgLTE3NTYsMTUgKzE3NjAsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlmIChzdWJwYXRoID09IE5VTEwpCiAJCQl7 CiAJCQkJLyogZmFpbGVkIHRvIG1ha2UgYSBzdWl0YWJsZSBwYXRoIGZvciB0aGlzIGNoaWxkICov Ci0JCQkJc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCQlwYXJhbWV0ZXJpemVkX3ZhbGlkID0g ZmFsc2U7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1 YnBhdGgsICZzdWJwYXRocywgTlVMTCk7CisJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1 YnBhdGgsICZwYXJhbWV0ZXJpemVkLnN1YnBhdGhzLCBOVUxMLAorCQkJCQkJCQkJICAmcGFyYW1l dGVyaXplZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCX0KIAotCQlpZiAoc3VicGF0aHNf dmFsaWQpCisJCWlmIChwYXJhbWV0ZXJpemVkX3ZhbGlkKQogCQkJYWRkX3BhdGgocmVsLCAoUGF0 aCAqKQotCQkJCQkgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgc3VicGF0aHMsIE5JTCwK KwkJCQkJIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHBhcmFtZXRlcml6ZWQsCiAJCQkJ CQkJCQkJTklMLCByZXF1aXJlZF9vdXRlciwgMCwgZmFsc2UsCiAJCQkJCQkJCQkJLTEpKTsKIAl9 CkBAIC0xNzg1LDEzICsxNzkwLDE0IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCVBhdGgJICAgKnBhdGggPSAoUGF0 aCAqKSBsZmlyc3QobCk7CiAJCQlBcHBlbmRQYXRoICphcHBlbmRwYXRoOworCQkJQXBwZW5kUGF0 aElucHV0IGFwcGVuZCA9IHswfTsKIAogCQkJLyogc2tpcCBwYXRocyB3aXRoIG5vIHBhdGhrZXlz LiAqLwogCQkJaWYgKHBhdGgtPnBhdGhrZXlzID09IE5JTCkKIAkJCQljb250aW51ZTsKIAotCQkJ YXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtl MShwYXRoKSwKLQkJCQkJCQkJCQkJTklMLCBOVUxMLAorCQkJYXBwZW5kLnBhcnRpYWxfc3VicGF0 aHMgPSBsaXN0X21ha2UxKHBhdGgpOworCQkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0 aChyb290LCByZWwsIGFwcGVuZCwgTklMLCBOVUxMLAogCQkJCQkJCQkJCQlwYXRoLT5wYXJhbGxl bF93b3JrZXJzLCB0cnVlLAogCQkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQkJYWRkX3BhcnRp YWxfcGF0aChyZWwsIChQYXRoICopIGFwcGVuZHBhdGgpOwpAQCAtMTg3Myw5ICsxODc5LDkgQEAg Z2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogCWZvcmVhY2gobGNwLCBhbGxfY2hpbGRfcGF0aGtleXMpCiAJewogCQlMaXN0CSAg ICpwYXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwotCQlMaXN0CSAgICpzdGFydHVwX3N1 YnBhdGhzID0gTklMOwotCQlMaXN0CSAgICp0b3RhbF9zdWJwYXRocyA9IE5JTDsKLQkJTGlzdAkg ICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJQXBwZW5kUGF0aElucHV0IHN0YXJ0dXAg PSB7MH07CisJCUFwcGVuZFBhdGhJbnB1dCB0b3RhbCA9IHswfTsKKwkJQXBwZW5kUGF0aElucHV0 IGZyYWN0aW9uYWwgPSB7MH07CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3RvdGFsID0gZmFsc2U7CiAJ CWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29sCQltYXRjaF9wYXJ0aXRp b25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDQ0LDIzIEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRf cGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkgKiBqdXN0IGEg c2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55dGhpbmcKIAkJCQkgKiB1 c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBnZXRfc2luZ2xldG9uX2Fw cGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFwZXN0X3RvdGFsID0gZ2V0 X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7CisJCQkJY2hlYXBlc3Rf c3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3Rfc3Rh cnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CisJ CQkJY2hlYXBlc3RfdG90YWwgPQorCQkJCQlnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNo ZWFwZXN0X3RvdGFsLAorCQkJCQkJCQkJCQkJICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0 cyk7CiAKLQkJCQlzdGFydHVwX3N1YnBhdGhzID0gbGFwcGVuZChzdGFydHVwX3N1YnBhdGhzLCBj aGVhcGVzdF9zdGFydHVwKTsKLQkJCQl0b3RhbF9zdWJwYXRocyA9IGxhcHBlbmQodG90YWxfc3Vi cGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKKwkJCQlzdGFydHVwLnN1YnBhdGhzID0gbGFwcGVuZChz dGFydHVwLnN1YnBhdGhzLCBjaGVhcGVzdF9zdGFydHVwKTsKKwkJCQl0b3RhbC5zdWJwYXRocyA9 IGxhcHBlbmQodG90YWwuc3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKIAogCQkJCWlmIChjaGVh cGVzdF9mcmFjdGlvbmFsKQogCQkJCXsKLQkJCQkJY2hlYXBlc3RfZnJhY3Rpb25hbCA9IGdldF9z aW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCk7Ci0JCQkJCWZyYWN0 aW9uYWxfc3VicGF0aHMgPSBsYXBwZW5kKGZyYWN0aW9uYWxfc3VicGF0aHMsIGNoZWFwZXN0X2Zy YWN0aW9uYWwpOworCQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0KKwkJCQkJCWdldF9zaW5nbGV0 b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCwKKwkJCQkJCQkJCQkJCQkgJmZy YWN0aW9uYWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOworCQkJCQlmcmFjdGlvbmFsLnN1YnBh dGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbC5zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rp b25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1NywxMyArMjA3MCwxNiBAQCBnZW5l cmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJnZUFwcGVuZC4KIAkJCQkgKi8KIAkJ CQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXAsCi0JCQkJCQkJCQkJ ICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmc3RhcnR1cC5zdWJwYXRo cywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsK IAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3RvdGFsLAotCQkJCQkJCQkJ CSAgJnRvdGFsX3N1YnBhdGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkgICZ0b3RhbC5zdWJwYXRocywg TlVMTCwKKwkJCQkJCQkJCQkgICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAKIAkJ CQlpZiAoY2hlYXBlc3RfZnJhY3Rpb25hbCkKIAkJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0 aChjaGVhcGVzdF9mcmFjdGlvbmFsLAotCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhz LCBOVUxMKTsKKwkJCQkJCQkJCQkJICAmZnJhY3Rpb25hbC5zdWJwYXRocywgTlVMTCwKKwkJCQkJ CQkJCQkJICAmZnJhY3Rpb25hbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJCX0K IApAQCAtMjA3Myw4ICsyMDg5LDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJLyogV2Ugb25seSBuZWVkIEFwcGVu ZCAqLwogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwK IAkJCQkJCQkJCQkJCQkgIHJlbCwKLQkJCQkJCQkJCQkJCQkgIHN0YXJ0dXBfc3VicGF0aHMsCi0J CQkJCQkJCQkJCQkJICBOSUwsCisJCQkJCQkJCQkJCQkJICBzdGFydHVwLAogCQkJCQkJCQkJCQkJ CSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwKQEAg LTIwODMsMTkgKzIwOTgsMTcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQog CQkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJ CQkJCQkJCQkJCSAgcmVsLAotCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhzLAotCQkJCQkJ CQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkJICB0b3RhbCwKIAkJCQkJCQkJCQkJCQkJICBw YXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCQkgIDAsCiAJCQkJ CQkJCQkJCQkJCSAgZmFsc2UsCiAJCQkJCQkJCQkJCQkJCSAgLTEpKTsKIAotCQkJaWYgKGZyYWN0 aW9uYWxfc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQorCQkJaWYgKGZyYWN0aW9uYWwu c3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRoKHJlbCwgKFBhdGgg KikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJCQkJ CQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkJCSAgTklMLAorCQkJ CQkJCQkJCQkJCQkgIGZyYWN0aW9uYWwsCiAJCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJCQkJ CQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJCQkJICAwLApAQCAtMjEwNywyMCArMjEyMCwy MyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsCiAJCQkvKiBXZSBuZWVkIE1lcmdlQXBwZW5kICovCiAJCQlhZGRfcGF0aChy ZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJ CQkJcmVsLAotCQkJCQkJCQkJCQkJCQkJc3RhcnR1cF9zdWJwYXRocywKKwkJCQkJCQkJCQkJCQkJ CXN0YXJ0dXAuc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQlzdGFydHVwLmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQlOVUxM KSk7CiAJCQlpZiAoc3RhcnR1cF9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAq KSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkJCQlyZWwsCi0J CQkJCQkJCQkJCQkJCQkJdG90YWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwuc3Vi cGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJ CQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQkJTlVMTCkpOwogCi0JCQlp ZiAoZnJhY3Rpb25hbF9zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCisJCQlpZiAoZnJh Y3Rpb25hbC5zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgocmVs LCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkJ CQlyZWwsCi0JCQkJCQkJCQkJCQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocywKKwkJCQkJCQkJCQkJ CQkJCQlmcmFjdGlvbmFsLnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWwuY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJ CQkJCQkJCQkJTlVMTCkpOwogCQl9CkBAIC0yMjIzLDcgKzIyMzksOCBAQCBnZXRfY2hlYXBlc3Rf cGFyYW1ldGVyaXplZF9jaGlsZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAgKiBwYXRocykuCiAgKi8KIHN0YXRpYyB2b2lkCi1hY2N1bXVsYXRlX2FwcGVuZF9zdWJw YXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMp CithY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywg TGlzdCAqKnNwZWNpYWxfc3VicGF0aHMsCisJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cykKIHsKIAlpZiAoSXNBKHBhdGgsIEFwcGVuZFBhdGgpKQogCXsKQEAgLTIyMzIsNiAr MjI0OSwxMSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipz dWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlmICghYXBhdGgtPnBhdGgucGFy YWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aCA9PSAwKQogCQl7CiAJCQkq c3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRoLT5zdWJwYXRocyk7CisJCQkq Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxp ZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPQorCQkJCWxpc3RfY29uY2F0KCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQlh cGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQkJcmV0dXJuOwogCQl9CiAJCWVsc2Ug aWYgKHNwZWNpYWxfc3VicGF0aHMgIT0gTlVMTCkKQEAgLTIyNDYsNiArMjI2OCwxMSBAQCBhY2N1 bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAq KnNwZWNpYWxfc3VicGF0aHMpCiAJCQkJCQkJCQkJCQkgIGFwYXRoLT5maXJzdF9wYXJ0aWFsX3Bh dGgpOwogCQkJKnNwZWNpYWxfc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3BlY2lhbF9zdWJwYXRo cywKIAkJCQkJCQkJCQkJbmV3X3NwZWNpYWxfc3VicGF0aHMpOworCQkJKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+ cGFyZW50LT5yZWxpZHMpOworCQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQlsaXN0 X2NvbmNhdCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJYXBhdGgtPmNoaWxkX2Fw cGVuZF9yZWxpZF9zZXRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTIyNTQsNiArMjI4MSwx MSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRo cywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGggPSAo TWVyZ2VBcHBlbmRQYXRoICopIHBhdGg7CiAKIAkJKnN1YnBhdGhzID0gbGlzdF9jb25jYXQoKnN1 YnBhdGhzLCBtcGF0aC0+c3VicGF0aHMpOworCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQor CQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVsaWRz KTsKKwkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCWxpc3RfY29uY2F0KCpjaGlsZF9h cHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCW1wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7 CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyNjUsMTAgKzIyOTcsMTUgQEAgYWNjdW11bGF0ZV9hcHBl bmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1 YnBhdGhzKQogICoJCVJldHVybnMgdGhlIHNpbmdsZSBzdWJwYXRoIG9mIGFuIEFwcGVuZC9NZXJn ZUFwcGVuZCwgb3IganVzdAogICoJCXJldHVybiAncGF0aCcgaWYgaXQncyBub3QgYSBzaW5nbGUg c3ViLXBhdGggQXBwZW5kL01lcmdlQXBwZW5kLgogICoKKyAqIEFzIGEgc2lkZSBlZmZlY3QsIHdo ZW5ldmVyIHdlIHJldHVybiBhIHNpbmdsZSBzdWJwYXRoIHJhdGhlciB0aGFuIHRoZQorICogb3Jp Z2luYWwgcGF0aCwgYWRkIHRoZSByZWxpZCBzZXRzIGZvciB0aGUgb3JpZ2luYWwgcGF0aCB0bwor ICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHNvIHRoYXQgdGhvc2UgcmVsaWRzIGRvbid0IGVu dGlyZWx5IGRpc2FwcGVhcgorICogZnJvbSB0aGUgZmluYWwgcGxhbi4KKyAqCiAgKiBOb3RlOiAn cGF0aCcgbXVzdCBub3QgYmUgYSBwYXJhbGxlbC1hd2FyZSBwYXRoLgogICovCiBzdGF0aWMgUGF0 aCAqCi1nZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgpCitnZXRfc2luZ2xl dG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipjaGlsZF9hcHBlbmRfcmVsaWRf c2V0cykKIHsKIAlBc3NlcnQoIXBhdGgtPnBhcmFsbGVsX2F3YXJlKTsKIApAQCAtMjI3NywxNCAr MjMxNCwyOCBAQCBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgpCiAJCUFw cGVuZFBhdGggKmFwYXRoID0gKEFwcGVuZFBhdGggKikgcGF0aDsKIAogCQlpZiAobGlzdF9sZW5n dGgoYXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQt PnJlbGlkcyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxpc3RfY29uY2F0 KCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQlhcGF0aC0+Y2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMpOwogCQkJcmV0dXJuIChQYXRoICopIGxpbml0aWFsKGFwYXRoLT5zdWJwYXRocyk7 CisJCX0KIAl9CiAJZWxzZSBpZiAoSXNBKHBhdGgsIE1lcmdlQXBwZW5kUGF0aCkpCiAJewogCQlN ZXJnZUFwcGVuZFBhdGggKm1wYXRoID0gKE1lcmdlQXBwZW5kUGF0aCAqKSBwYXRoOwogCiAJCWlm IChsaXN0X2xlbmd0aChtcGF0aC0+c3VicGF0aHMpID09IDEpCisJCXsKKwkJCSpjaGlsZF9hcHBl bmRfcmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBh dGgtPnBhcmVudC0+cmVsaWRzKTsKKwkJCSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJ bGlzdF9jb25jYXQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCW1wYXRoLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwobXBhdGgt PnN1YnBhdGhzKTsKKwkJfQogCX0KIAogCXJldHVybiBwYXRoOwpAQCAtMjMwNCw2ICsyMzU1LDgg QEAgZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoKQogc3RhdGljIHZvaWQK IHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQogeworCUFwcGVuZFBhdGhJ bnB1dCBpbiA9IHswfTsKKwogCS8qIFNldCBkdW1teSBzaXplIGVzdGltYXRlcyAtLS0gd2UgbGVh dmUgYXR0cl93aWR0aHNbXSBhcyB6ZXJvZXMgKi8KIAlyZWwtPnJvd3MgPSAwOwogCXJlbC0+cmVs dGFyZ2V0LT53aWR0aCA9IDA7CkBAIC0yMzEzLDcgKzIzNjYsNyBAQCBzZXRfZHVtbXlfcmVsX3Bh dGhsaXN0KFJlbE9wdEluZm8gKnJlbCkKIAlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CiAK IAkvKiBTZXQgdXAgdGhlIGR1bW15IHBhdGggKi8KLQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIE5JTCwgTklMLAorCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwgaW4sCiAJCQkJCQkJCQkJCSAgTklM LCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZhbHNlLCAtMSkpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCAyNjE1NjUxYzA3My4uNDQzZTJk Y2E3YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMTUxMyw2ICsx NTEzLDcgQEAgdm9pZAogbWFya19kdW1teV9yZWwoUmVsT3B0SW5mbyAqcmVsKQogewogCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwlBcHBlbmRQYXRoSW5wdXQgaW4gPSB7MH07CiAKIAkvKiBB bHJlYWR5IG1hcmtlZD8gKi8KIAlpZiAoaXNfZHVtbXlfcmVsKHJlbCkpCkBAIC0xNTI5LDcgKzE1 MzAsNyBAQCBtYXJrX2R1bW15X3JlbChSZWxPcHRJbmZvICpyZWwpCiAJcmVsLT5wYXJ0aWFsX3Bh dGhsaXN0ID0gTklMOwogCiAJLyogU2V0IHVwIHRoZSBkdW1teSBwYXRoICovCi0JYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgoTlVMTCwgcmVsLCBOSUwsIE5JTCwKKwlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIGluLAog CQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFsX3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBm YWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4 IGE1MDI2MDI5MGZhLi45NTlkZjQzYzM5ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYwpAQCAtMTI2Myw2ICsxMjYzLDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFuLT5w bGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJcGxh bi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhrZXlz ICE9IE5JTCkKIAl7CkBAIC0xNDc1LDYgKzE0NzYsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bs YW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4t PmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFwcHJl bGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVz dF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBzb3J0 IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGY2ODE0MmNmY2I4Li4wMDZiMzI4 MTk2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDA2Myw3ICs0MDYz LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICogbWlnaHQgZ2V0IGJldHdlZW4gMCBhbmQgTiBv dXRwdXQgcm93cy4gT2ZmaGFuZCBJIHRoaW5rIHRoYXQncwogCQkgKiBkZXNpcmVkLikKIAkJICov Ci0JCUxpc3QJICAgKnBhdGhzID0gTklMOworCQlBcHBlbmRQYXRoSW5wdXQgYXBwZW5kID0gezB9 OwogCiAJCXdoaWxlICgtLW5yb3dzID49IDApCiAJCXsKQEAgLTQwNzEsMTMgKzQwNzEsMTIgQEAg Y3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKmlucHV0X3JlbCwKIAkJCQljcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgocm9vdCwgZ3Jv dXBlZF9yZWwsCiAJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCiAJCQkJCQkJCQkJ IChMaXN0ICopIHBhcnNlLT5oYXZpbmdRdWFsKTsKLQkJCXBhdGhzID0gbGFwcGVuZChwYXRocywg cGF0aCk7CisJCQlhcHBlbmQuc3VicGF0aHMgPSBsYXBwZW5kKGFwcGVuZC5zdWJwYXRocywgcGF0 aCk7CiAJCX0KIAkJcGF0aCA9IChQYXRoICopCiAJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwK IAkJCQkJCQkgICBncm91cGVkX3JlbCwKLQkJCQkJCQkgICBwYXRocywKLQkJCQkJCQkgICBOSUws CisJCQkJCQkJICAgYXBwZW5kLAogCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCmluZGV4IDc4Yzk1 YzM2ZGQ1Li5mNTBjMjk2ZTNkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9u LmMKQEAgLTY5Niw5ICs2OTYsOSBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25T dG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJTGlzdENlbGwgICAqbGM7CiAJTGlzdENlbGwg ICAqbGMyOwogCUxpc3RDZWxsICAgKmxjMzsKLQlMaXN0CSAgICpjaGVhcGVzdF9wYXRobGlzdCA9 IE5JTDsKLQlMaXN0CSAgICpvcmRlcmVkX3BhdGhsaXN0ID0gTklMOwotCUxpc3QJICAgKnBhcnRp YWxfcGF0aGxpc3QgPSBOSUw7CisJQXBwZW5kUGF0aElucHV0IGNoZWFwZXN0ID0gezB9OworCUFw cGVuZFBhdGhJbnB1dCBvcmRlcmVkID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJ0aWFsID0g ezB9OwogCWJvb2wJCXBhcnRpYWxfcGF0aHNfdmFsaWQgPSB0cnVlOwogCWJvb2wJCWNvbnNpZGVy X3BhcmFsbGVsID0gdHJ1ZTsKIAlMaXN0CSAgICpyZWxsaXN0OwpAQCAtNzgzLDcgKzc4Myw3IEBA IGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJaWYgKGlzX2R1bW15X3JlbChyZWwpKQogCQkJY29udGludWU7CiAKLQkJY2hlYXBl c3RfcGF0aGxpc3QgPSBsYXBwZW5kKGNoZWFwZXN0X3BhdGhsaXN0LAorCQljaGVhcGVzdC5zdWJw YXRocyA9IGxhcHBlbmQoY2hlYXBlc3Quc3VicGF0aHMsCiAJCQkJCQkJCQlyZWwtPmNoZWFwZXN0 X3RvdGFsX3BhdGgpOwogCiAJCWlmICh0cnlfc29ydGVkKQpAQCAtNzk1LDcgKzc5NSw3IEBAIGdl bmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJCQkJCQkJICBmYWxzZSk7CiAKIAkJCWlmIChvcmRlcmVkX3BhdGggIT0gTlVM TCkKLQkJCQlvcmRlcmVkX3BhdGhsaXN0ID0gbGFwcGVuZChvcmRlcmVkX3BhdGhsaXN0LCBvcmRl cmVkX3BhdGgpOworCQkJCW9yZGVyZWQuc3VicGF0aHMgPSBsYXBwZW5kKG9yZGVyZWQuc3VicGF0 aHMsIG9yZGVyZWRfcGF0aCk7CiAJCQllbHNlCiAJCQl7CiAJCQkJLyoKQEAgLTgxOCwyMCArODE4 LDIwIEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVy SW5mbyAqcm9vdCwKIAkJCWVsc2UgaWYgKHJlbC0+cGFydGlhbF9wYXRobGlzdCA9PSBOSUwpCiAJ CQkJcGFydGlhbF9wYXRoc192YWxpZCA9IGZhbHNlOwogCQkJZWxzZQotCQkJCXBhcnRpYWxfcGF0 aGxpc3QgPSBsYXBwZW5kKHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJCQkJICAgbGluaXRpYWwo cmVsLT5wYXJ0aWFsX3BhdGhsaXN0KSk7CisJCQkJcGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzID0g bGFwcGVuZChwYXJ0aWFsLnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkgICBsaW5pdGlh bChyZWwtPnBhcnRpYWxfcGF0aGxpc3QpKTsKIAkJfQogCX0KIAogCS8qIEJ1aWxkIHJlc3VsdCBy ZWxhdGlvbi4gKi8KIAlyZXN1bHRfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsIFVQUEVSUkVM X1NFVE9QLCByZWxpZHMpOwogCXJlc3VsdF9yZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9zZXRvcF9w YXRodGFyZ2V0KHJvb3QsIHRsaXN0LAotCQkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhdGhsaXN0KTsK KwkJCQkJCQkJCQkJCQljaGVhcGVzdC5zdWJwYXRocyk7CiAJcmVzdWx0X3JlbC0+Y29uc2lkZXJf cGFyYWxsZWwgPSBjb25zaWRlcl9wYXJhbGxlbDsKIAlyZXN1bHRfcmVsLT5jb25zaWRlcl9zdGFy dHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAKIAkvKiBJZiBhbGwgVU5JT04gY2hp bGRyZW4gd2VyZSBkdW1teSByZWxzLCBtYWtlIHRoZSByZXN1bHRpbmcgcmVsIGR1bW15ICovCi0J aWYgKGNoZWFwZXN0X3BhdGhsaXN0ID09IE5JTCkKKwlpZiAoY2hlYXBlc3Quc3VicGF0aHMgPT0g TklMKQogCXsKIAkJbWFya19kdW1teV9yZWwocmVzdWx0X3JlbCk7CiAKQEAgLTg0Miw4ICs4NDIs OCBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJICogQXBwZW5kIHRoZSBjaGlsZCByZXN1bHRzIHRvZ2V0aGVyIHVzaW5nIHRo ZSBjaGVhcGVzdCBwYXRocyBmcm9tIGVhY2gKIAkgKiB1bmlvbiBjaGlsZC4KIAkgKi8KLQlhcGF0 aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVhcGVz dF9wYXRobGlzdCwKLQkJCQkJCQkJCQlOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2UsIC0xKTsKKwlh cGF0aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVh cGVzdCwKKwkJCQkJCQkJCQlOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CiAKIAkvKgogCSAqIEVz dGltYXRlIG51bWJlciBvZiBncm91cHMuICBGb3Igbm93IHdlIGp1c3QgYXNzdW1lIHRoZSBvdXRw dXQgaXMgdW5pcXVlCkBAIC04NjIsNyArODYyLDcgQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0 T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQlpbnQJCQlwYXJhbGxlbF93 b3JrZXJzID0gMDsKIAogCQkvKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJl cXVlc3RlZCBmb3IgYW55IHN1YnBhdGguICovCi0JCWZvcmVhY2gobGMsIHBhcnRpYWxfcGF0aGxp c3QpCisJCWZvcmVhY2gobGMsIHBhcnRpYWwucGFydGlhbF9zdWJwYXRocykKIAkJewogCQkJUGF0 aAkgICAqc3VicGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTg4MSwxNCArODgxLDE0IEBAIGdlbmVy YXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwK IAkJaWYgKGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQpCiAJCXsKIAkJCXBhcmFsbGVsX3dvcmtlcnMg PSBNYXgocGFyYWxsZWxfd29ya2VycywKLQkJCQkJCQkJICAgcGdfbGVmdG1vc3Rfb25lX3BvczMy KGxpc3RfbGVuZ3RoKHBhcnRpYWxfcGF0aGxpc3QpKSArIDEpOworCQkJCQkJCQkgICBwZ19sZWZ0 bW9zdF9vbmVfcG9zMzIobGlzdF9sZW5ndGgocGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzKSkgKyAx KTsKIAkJCXBhcmFsbGVsX3dvcmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJ ICAgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcik7CiAJCX0KIAkJQXNzZXJ0KHBhcmFs bGVsX3dvcmtlcnMgPiAwKTsKIAogCQlwYXBhdGggPSAoUGF0aCAqKQotCQkJY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIE5JTCwgcGFydGlhbF9wYXRobGlzdCwKKwkJCWNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBwYXJ0aWFsLAogCQkJCQkJCSAgIE5JTCwg TlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkgICBlbmFibGVfcGFyYWxsZWxfYXBwZW5k LCAtMSk7CiAJCWdwYXRoID0gKFBhdGggKikKQEAgLTkwMSw3ICs5MDEsNyBAQCBnZW5lcmF0ZV91 bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCWRv dWJsZQkJZE51bUdyb3VwczsKIAkJYm9vbAkJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0YWJs ZShncm91cExpc3QpOwogCQlib29sCQljYW5faGFzaCA9IGdyb3VwaW5nX2lzX2hhc2hhYmxlKGdy b3VwTGlzdCk7Ci0JCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdF9wYXRo bGlzdCk7CisJCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdC5zdWJwYXRo cyk7CiAKIAkJLyoKIAkJICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBVTklPTiBvdXRwdXQgcm93 cy4gIEluIHRoZSBjYXNlIHdoZW4gb25seSBhCkBAIC05MTEsNyArOTExLDcgQEAgZ2VuZXJhdGVf dW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkg KiBjb250YWluIFZhcnMgd2l0aCB2YXJubz09MCwgd2hpY2ggZXN0aW1hdGVfbnVtX2dyb3Vwcygp IHdvdWxkbid0CiAJCSAqIGxpa2UuCiAJCSAqLwotCQlpZiAobGlzdF9sZW5ndGgoY2hlYXBlc3Rf cGF0aGxpc3QpID09IDEgJiYKKwkJaWYgKGxpc3RfbGVuZ3RoKGNoZWFwZXN0LnN1YnBhdGhzKSA9 PSAxICYmCiAJCQlmaXJzdF9wYXRoLT5wYXJlbnQtPnJlbG9wdGtpbmQgIT0gUkVMT1BUX1VQUEVS X1JFTCkKIAkJewogCQkJZE51bUdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKQEAg LTEwMTcsNyArMTAxNyw4IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tZXJn ZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJCSByZXN1bHRfcmVsLAotCQkJCQkJCQkJ CQkJCSBvcmRlcmVkX3BhdGhsaXN0LAorCQkJCQkJCQkJCQkJCSBvcmRlcmVkLnN1YnBhdGhzLAor CQkJCQkJCQkJCQkJCSBOSUwsCiAJCQkJCQkJCQkJCQkJIHVuaW9uX3BhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCSBOVUxMKTsKIApAQCAtMTIxNiw2ICsxMjE3LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJaWYgKG9w LT5hbGwpCiAJCQl7CiAJCQkJUGF0aAkgICAqYXBhdGg7CisJCQkJQXBwZW5kUGF0aElucHV0IGFw cGVuZCA9IHswfTsKKworCQkJCWFwcGVuZC5zdWJwYXRocyA9IGxpc3RfbWFrZTEobHBhdGgpOwog CiAJCQkJLyoKIAkJCQkgKiBFWENFUFQgQUxMOiBJZiB0aGUgcmlnaHQtaGFuZCBpbnB1dCBpcyBk dW1teSB0aGVuIHdlIGNhbgpAQCAtMTIyNCw4ICsxMjI4LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAqIGJl dHdlZW4gdGhlIHNldCBvcCB0YXJnZXRsaXN0IGFuZCB0aGUgdGFyZ2V0bGlzdCBvZiB0aGUKIAkJ CQkgKiBsZWZ0IGlucHV0LiAgVGhlIEFwcGVuZCB3aWxsIGJlIHJlbW92ZWQgaW4gc2V0cmVmcy5j LgogCQkJCSAqLwotCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3Qs IHJlc3VsdF9yZWwsIGxpc3RfbWFrZTEobHBhdGgpLAotCQkJCQkJCQkJCQkJCU5JTCwgTklMLCBO VUxMLCAwLCBmYWxzZSwgLTEpOworCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9w YXRoKHJvb3QsIHJlc3VsdF9yZWwsCisJCQkJCQkJCQkJCQkJYXBwZW5kLCBOSUwsIE5VTEwsIDAs CisJCQkJCQkJCQkJCQkJZmFsc2UsIC0xKTsKIAogCQkJCWFkZF9wYXRoKHJlc3VsdF9yZWwsIGFw YXRoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggN2I2YzVkNTFl NWQuLjk2NzhjMjBmZjFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAg LTEyOTgsNyArMTI5OCw3IEBAIGNyZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogQXBwZW5kUGF0aCAqCiBjcmVhdGVfYXBwZW5kX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICAgUmVsT3B0SW5mbyAqcmVsLAotCQkJCSAgIExpc3Qg KnN1YnBhdGhzLCBMaXN0ICpwYXJ0aWFsX3N1YnBhdGhzLAorCQkJCSAgIEFwcGVuZFBhdGhJbnB1 dCBpbnB1dCwKIAkJCQkgICBMaXN0ICpwYXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyLAog CQkJCSAgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCSAg IGRvdWJsZSByb3dzKQpAQCAtMTMwOCw2ICsxMzA4LDcgQEAgY3JlYXRlX2FwcGVuZF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCiAJQXNzZXJ0KCFwYXJhbGxlbF9hd2FyZSB8fCBwYXJhbGxlbF93 b3JrZXJzID4gMCk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBpbnB1 dC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRf QXBwZW5kOwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5w YXRodGFyZ2V0ID0gcmVsLT5yZWx0YXJnZXQ7CkBAIC0xMzIzLDcgKzEzMjQsNyBAQCBjcmVhdGVf YXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogb24gdGhlIHNpbXBsZXIgZ2V0X2Fw cGVuZHJlbF9wYXJhbXBhdGhpbmZvLiAgVGhlcmUncyBubyBwb2ludCBpbiBkb2luZwogCSAqIHRo ZSBtb3JlIGV4cGVuc2l2ZSB0aGluZyBmb3IgYSBkdW1teSBwYXRoLCBlaXRoZXIuCiAJICovCi0J aWYgKHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCAmJiByb290ICYmIHN1YnBhdGhz ICE9IE5JTCkKKwlpZiAocmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMICYmIHJvb3Qg JiYgaW5wdXQuc3VicGF0aHMgIT0gTklMKQogCQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0g Z2V0X2Jhc2VyZWxfcGFyYW1wYXRoaW5mbyhyb290LAogCQkJCQkJCQkJCQkJCQkJICByZWwsCiAJ CQkJCQkJCQkJCQkJCQkgIHJlcXVpcmVkX291dGVyKTsKQEAgLTEzNTQsMTEgKzEzNTUsMTEgQEAg Y3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkgKi8KIAkJQXNzZXJ0KHBh dGhrZXlzID09IE5JTCk7CiAKLQkJbGlzdF9zb3J0KHN1YnBhdGhzLCBhcHBlbmRfdG90YWxfY29z dF9jb21wYXJlKTsKLQkJbGlzdF9zb3J0KHBhcnRpYWxfc3VicGF0aHMsIGFwcGVuZF9zdGFydHVw X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5zdWJwYXRocywgYXBwZW5kX3RvdGFs X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5wYXJ0aWFsX3N1YnBhdGhzLCBhcHBl bmRfc3RhcnR1cF9jb3N0X2NvbXBhcmUpOwogCX0KLQlwYXRobm9kZS0+Zmlyc3RfcGFydGlhbF9w YXRoID0gbGlzdF9sZW5ndGgoc3VicGF0aHMpOwotCXBhdGhub2RlLT5zdWJwYXRocyA9IGxpc3Rf Y29uY2F0KHN1YnBhdGhzLCBwYXJ0aWFsX3N1YnBhdGhzKTsKKwlwYXRobm9kZS0+Zmlyc3RfcGFy dGlhbF9wYXRoID0gbGlzdF9sZW5ndGgoaW5wdXQuc3VicGF0aHMpOworCXBhdGhub2RlLT5zdWJw YXRocyA9IGxpc3RfY29uY2F0KGlucHV0LnN1YnBhdGhzLCBpbnB1dC5wYXJ0aWFsX3N1YnBhdGhz KTsKIAogCS8qCiAJICogQXBwbHkgcXVlcnktd2lkZSBMSU1JVCBpZiBrbm93biBhbmQgcGF0aCBp cyBmb3Igc29sZSBiYXNlIHJlbGF0aW9uLgpAQCAtMTQ3MCw2ICsxNDcxLDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4NSw2ICsxNDg3LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5MzIsMTEgKzM5MzUsMTIgQEAgcmVwYXJhbWV0ZXJp emVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwKIAkJY2FzZSBUX0FwcGVuZDoK IAkJCXsKIAkJCQlBcHBlbmRQYXRoICphcGF0aCA9IChBcHBlbmRQYXRoICopIHBhdGg7Ci0JCQkJ TGlzdAkgICAqY2hpbGRwYXRocyA9IE5JTDsKLQkJCQlMaXN0CSAgICpwYXJ0aWFscGF0aHMgPSBO SUw7CisJCQkJQXBwZW5kUGF0aElucHV0IG5ld19hcHBlbmQgPSB7MH07CiAJCQkJaW50CQkJaTsK IAkJCQlMaXN0Q2VsbCAgICpsYzsKIAorCQkJCW5ld19hcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKIAkJCQkvKiBSZXBhcmFt ZXRlcml6ZSB0aGUgY2hpbGRyZW4gKi8KIAkJCQlpID0gMDsKIAkJCQlmb3JlYWNoKGxjLCBhcGF0 aC0+c3VicGF0aHMpCkBAIC0zOTUwLDEzICszOTU0LDEzIEBAIHJlcGFyYW1ldGVyaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQkJ LyogV2UgaGF2ZSB0byByZS1zcGxpdCB0aGUgcmVndWxhciBhbmQgcGFydGlhbCBwYXRocyAqLwog CQkJCQlpZiAoaSA8IGFwYXRoLT5maXJzdF9wYXJ0aWFsX3BhdGgpCi0JCQkJCQljaGlsZHBhdGhz ID0gbGFwcGVuZChjaGlsZHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdfYXBwZW5kLnN1YnBhdGhz ID0gbGFwcGVuZChuZXdfYXBwZW5kLnN1YnBhdGhzLCBzcGF0aCk7CiAJCQkJCWVsc2UKLQkJCQkJ CXBhcnRpYWxwYXRocyA9IGxhcHBlbmQocGFydGlhbHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdf YXBwZW5kLnBhcnRpYWxfc3VicGF0aHMgPSBsYXBwZW5kKG5ld19hcHBlbmQucGFydGlhbF9zdWJw YXRocywgc3BhdGgpOwogCQkJCQlpKys7CiAJCQkJfQogCQkJCXJldHVybiAoUGF0aCAqKQotCQkJ CQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBwYXJ0aWFscGF0aHMs CisJCQkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIG5ld19hcHBlbmQsCiAJCQkJCQkJ CQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgICBh cGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgtPnBhdGgucGFy YWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDljYzVkMmU3NDExLi5jMTc1ZWU5 NWI2OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIyNTAsNiArMjI1MCwxMiBAQCB0eXBlZGVm IHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJwYXRocycgY29u dGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRpYWwgc3VicGF0 aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgpIGFsbG93cyB1 cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBwYXRocyBkb3du IHRvIG9uZSwgd2Ugc3RvcmUgdGhlIFJUSSBzZXRzIGZvciB0aGUgb21pdHRlZAorICogcGF0aHMg aW4gY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMuIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgcGxh bm5pbmcgb3IKKyAqIGV4ZWN1dGlvbjsgd2UgZG8gaXQgZm9yIHRoZSBiZW5lZml0IG9mIGNvZGUg dGhhdCB3YW50cyB0byBpbnNwZWN0IHRoZQorICogZmluYWwgcGxhbiBhbmQgdW5kZXJzdGFuZCBo b3cgaXQgY2FtZSB0byBiZS4KKyAqCiAgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBmb3IgInN1YnBh dGhzIiB0byBjb250YWluIG9ubHkgb25lLCBvciBldmVuIG5vLAogICogZWxlbWVudHMuICBUaGVz ZSBjYXNlcyBhcmUgb3B0aW1pemVkIGR1cmluZyBjcmVhdGVfYXBwZW5kX3BsYW4uCiAgKiBJbiBw YXJ0aWN1bGFyLCBhbiBBcHBlbmRQYXRoIHdpdGggbm8gc3VicGF0aHMgaXMgYSAiZHVtbXkiIHBh dGggdGhhdApAQCAtMjI2NSw2ICsyMjcxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUGF0aAog CS8qIEluZGV4IG9mIGZpcnN0IHBhcnRpYWwgcGF0aCBpbiBzdWJwYXRoczsgbGlzdF9sZW5ndGgo c3VicGF0aHMpIGlmIG5vbmUgKi8KIAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BhdGg7CiAJQ2FyZGlu YWxpdHkgbGltaXRfdHVwbGVzOwkvKiBoYXJkIGxpbWl0IG9uIG91dHB1dCB0dXBsZXMsIG9yIC0x ICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiB9IEFwcGVuZFBhdGg7CiAK ICNkZWZpbmUgSVNfRFVNTVlfQVBQRU5EKHApIFwKQEAgLTIyODEsMTIgKzIyODgsMTUgQEAgZXh0 ZXJuIGJvb2wgaXNfZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCk7CiAvKgogICogTWVyZ2VBcHBl bmRQYXRoIHJlcHJlc2VudHMgYSBNZXJnZUFwcGVuZCBwbGFuLCBpZSwgdGhlIG1lcmdpbmcgb2Yg c29ydGVkCiAgKiByZXN1bHRzIGZyb20gc2V2ZXJhbCBtZW1iZXIgcGxhbnMgdG8gcHJvZHVjZSBz aW1pbGFybHktc29ydGVkIG91dHB1dC4KKyAqCisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyBo YXMgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIGZvciBBcHBlbmRQYXRoLgogICovCiB0eXBlZGVm IHN0cnVjdCBNZXJnZUFwcGVuZFBhdGgKIHsKIAlQYXRoCQlwYXRoOwogCUxpc3QJICAgKnN1YnBh dGhzOwkJLyogbGlzdCBvZiBjb21wb25lbnQgUGF0aHMgKi8KIAlDYXJkaW5hbGl0eSBsaW1pdF90 dXBsZXM7CS8qIGhhcmQgbGltaXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAg ICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIH0gTWVyZ2VBcHBlbmRQYXRoOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaAppbmRleCAwYWQwZmY0MDRjOS4uNDg1YmVjNWFhYmQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCkBAIC0zOTQsOSArMzk0LDE2IEBAIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87 CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIHR5cGVkZWYgc3RydWN0 IEFwcGVuZAogewogCVBsYW4JCXBsYW47CisKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3Jt ZWQgYnkgdGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOworCisJLyogc2V0cyBv ZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlz dAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlM aXN0CSAgICphcHBlbmRwbGFuczsKKwogCS8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCiAJ aW50CQkJbmFzeW5jcGxhbnM7CiAKQEAgLTQyNiw2ICs0MzMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3Qg TWVyZ2VBcHBlbmQKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkgdGhpcyBub2Rl ICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOwogCisJLyogc2V0cyBvZiBSVElzIG9mIGFwcGVu ZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlzdAkgICAqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlMaXN0CSAgICptZXJnZXBs YW5zOwogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8g aW4gc3RydWN0IFNvcnQ6ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDIyNDc1MDg1 OWMzLi5jZjhhNjU0ZmE1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTE3LDYgKzE3 LDIwIEBACiAjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMvcGF0 aG5vZGVzLmgiCiAKKy8qCisgKiBFdmVyeXRoaW5nIGluIHN1YnBhdGhzIG9yIHBhcnRpYWxfc3Vi cGF0aHMgd2lsbCBiZWNvbWUgcGFydCBvZiB0aGUKKyAqIEFwcGVuZCBub2RlJ3Mgc3VicGF0aHMg bGlzdC4gUGFydGlhbCBhbmQgbm9uLXBhcnRpYWwgc3VicGF0aHMgY2FuIGJlCisgKiBtaXhlZCBp biB0aGUgc2FtZSBBcHBlbmQgbm9kZSBvbmx5IGlmIGl0IGlzIHBhcmFsbGVsLWF3YXJlLgorICoK KyAqIFNlZSB0aGUgY29tbWVudHMgZm9yIEFwcGVuZFBhdGggZm9yIHRoZSBtZWFuaW5nIGFuZCBw dXJwb3NlIG9mIHRoZQorICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgZmllbGQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IEFwcGVuZFBhdGhJbnB1dAoreworCUxpc3QJICAgKnN1YnBhdGhzOworCUxp c3QJICAgKnBhcnRpYWxfc3VicGF0aHM7CisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHM7Cit9IEFwcGVuZFBhdGhJbnB1dDsKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29u dHJvbCBkdXJpbmcgam9pbnJlbCBzZXR1cCAqLwogdHlwZWRlZiB2b2lkICgqam9pbnJlbF9zZXR1 cF9ob29rX3R5cGUpIChQbGFubmVySW5mbyAqcm9vdCwKQEAgLTc4LDE0ICs5MiwxNiBAQCBleHRl cm4gVGlkUmFuZ2VQYXRoICpjcmVhdGVfdGlkcmFuZ2VzY2FuX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkJCSAgTGlzdCAqdGlkcmFuZ2VxdWFscywKIAkJCQkJCQkJCQkJICBSZWxp ZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCSAgaW50IHBhcmFsbGVsX3dvcmtlcnMpOwor CiBleHRlcm4gQXBwZW5kUGF0aCAqY3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCi0JCQkJCQkJCQkgIExpc3QgKnN1YnBhdGhzLCBMaXN0ICpwYXJ0 aWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBBcHBlbmRQYXRoSW5wdXQgaW5wdXQsCiAJCQkJCQkJ CQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGlu dCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3Vi bGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBlbmRQYXRoICpjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJ CQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJIExpc3QgKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJIExpc3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJ IFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBleHRlcm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVf Z3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IDk0YWMyYThmZGI3Li4wMDIyYWRmNmJhZSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTEyNSw2ICsxMjUsNyBAQCBBbmxJbmRleERhdGEKIEFueUFycmF5VHlwZQogQXBw ZW5kCiBBcHBlbmRQYXRoCitBcHBlbmRQYXRoSW5wdXQKIEFwcGVuZFJlbEluZm8KIEFwcGVuZFN0 YXRlCiBBcHBseUVycm9yQ2FsbGJhY2tBcmcKLS0gCjIuNTEuMAoK --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0010-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Disposition: attachment; filename="v14-0010-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclhab09 RnJvbSA5ODc1NjBmNTVlY2E1N2QxODQwNTgzMDE3OGMzMmU5YmZlYWJjNWIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwOTozNjowOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDEw LzEwXSBUZXN0IHBnX3BsYW5fYWR2aWNlIHVzaW5nIGEgbmV3IHRlc3RfcGxhbl9hZHZpY2UKIG1v ZHVsZS4KClRoZSBUQVAgdGVzdCBpbmNsdWRlZCBpbiB0aGlzIG5ldyBtb2R1bGUgcnVucyB0aGUg cmVncmVzc2lvbiB0ZXN0cwp3aXRoIHBnX3BsYW5fYWR2aWNlIGxvYWRlZC4gSXQgYXJyYW5nZXMg Zm9yIGVhY2ggcXVlcnkgdG8gYmUgcGxhbm5lZAp0d2ljZS4gIFRoZSBmaXJzdCB0aW1lLCB3ZSBn ZW5lcmF0ZSBwbGFuIGFkdmljZS4gVGhlIHNlY29uZCB0aW1lLCB3ZQpyZXBsYW4gdGhlIHF1ZXJ5 IHVzaW5nIHRoZSByZXN1bHRpbmcgYWR2aWNlIHN0cmluZy4gSWYgdGhlIHRlc3RzCmZhaWwsIHRo YXQgbWVhbnMgdGhhdCB1c2luZyBwZ19wbGFuX2FkdmljZSB0byB0ZWxsIHRoZSBwbGFubmVyIHRv CmRvIHdoYXQgaXQgd2FzIGdvaW5nIHRvIGRvIGFueXdheSBicmVha3Mgc29tZXRoaW5nLCB3aGlj aCBpbmRpY2F0ZXMKYSBwcm9ibGVtIGVpdGhlciB3aXRoIHBnX3BsYW5fYWR2aWNlIG9yIHdpdGgg dGhlIHBsYW5uZXIuCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUg ICAgfCAgMjggKysrKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1 aWxkIHwgIDI5ICsrKysKIC4uLi90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNz LnBsICB8ICA2NCArKysrKysrKwogLi4uL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2Fkdmlj ZS5jICAgICAgIHwgMTQzICsrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyNjYg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9w bGFuX2FkdmljZS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9wbGFuX2FkdmljZS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90LzAwMV9yZXBsYW5fcmVncmVzcy5wbAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5f YWR2aWNlLmMKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rl c3QvbW9kdWxlcy9NYWtlZmlsZQppbmRleCA0NGM3MTYzYzFjZC4uZThjMzFlYzhlNzQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9N YWtlZmlsZQpAQCAtMzgsNiArMzgsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3Rfb2F0X2hvb2tz IFwKIAkJICB0ZXN0X3BhcnNlciBcCiAJCSAgdGVzdF9wZ19kdW1wIFwKKwkJICB0ZXN0X3BsYW5f YWR2aWNlIFwKIAkJICB0ZXN0X3ByZWR0ZXN0IFwKIAkJICB0ZXN0X3JhZGl4dHJlZSBcCiAJCSAg dGVzdF9yYnRyZWUgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBi L3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggMjYzNGE1MTk5MzUuLjY5OThhMjI2 ZmE3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTM5LDYgKzM5LDcgQEAgc3ViZGlyKCd0ZXN0X21p c2MnKQogc3ViZGlyKCd0ZXN0X29hdF9ob29rcycpCiBzdWJkaXIoJ3Rlc3RfcGFyc2VyJykKIHN1 YmRpcigndGVzdF9wZ19kdW1wJykKK3N1YmRpcigndGVzdF9wbGFuX2FkdmljZScpCiBzdWJkaXIo J3Rlc3RfcHJlZHRlc3QnKQogc3ViZGlyKCd0ZXN0X3JhZGl4dHJlZScpCiBzdWJkaXIoJ3Rlc3Rf cmJ0cmVlJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9N YWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtlZmlsZQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmUwMjZjZTM0YmYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAg LTAsMCArMSwyOCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZp bGUKKworUEdGSUxFREVTQyA9ICJ0ZXN0X3BsYW5fYWR2aWNlIC0gdGVzdCB3aGV0aGVyIGdlbmVy YXRlZCBwbGFuIGFkdmljZSB3b3JrcyIKKworTU9EVUxFX2JpZyA9IHRlc3RfcGxhbl9hZHZpY2UK K09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXRlc3RfcGxhbl9hZHZpY2UubworCitFWFRSQV9J TlNUQUxMID0gY29udHJpYi9wZ19wbGFuX2FkdmljZQorCitUQVBfVEVTVFMgPSAxCisKK2lmZGVm IFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NP TkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3Ny Y2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKworb3ZlcnJpZGUgQ1BQRkxB R1MgKz0gLUkkKHRvcF9zcmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworUkVHUkVTU19T SExJQj0kKGFic190b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZG SVgpCitleHBvcnQgUkVHUkVTU19TSExJQgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5f YWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li5hZmRlNDIwYmFlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9w bGFuX2FkdmljZS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoYykg MjAyMi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0X3Bs YW5fYWR2aWNlX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3RfcGxhbl9hZHZpY2UuYycsCispCisK K2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X3BsYW5fYWR2aWNlX3NvdXJjZXMg Kz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0t TkFNRScsICd0ZXN0X3BsYW5fYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X3BsYW5f YWR2aWNlIC0gdGVzdCB3aGV0aGVyIGdlbmVyYXRlZCBwbGFuIGFkdmljZSB3b3JrcycsXSkKK2Vu ZGlmCisKK3Rlc3RfcGxhbl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X3BsYW5fYWR2aWNl JywKKyAgdGVzdF9wbGFuX2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBw Z19wbGFuX2FkdmljZV9pbmMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rlc3Rf aW5zdGFsbF9saWJzICs9IHRlc3RfcGxhbl9hZHZpY2UKKwordGVzdHMgKz0geworICAnbmFtZSc6 ICd0ZXN0X3BsYW5fYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCks CisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rl c3RzJzogWworICAgICAgJ3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAor fQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3Jl cGxhbl9yZWdyZXNzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAx X3JlcGxhbl9yZWdyZXNzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4xM2IxYTIyNTcwMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9w bGFuX2FkdmljZS90LzAwMV9yZXBsYW5fcmVncmVzcy5wbApAQCAtMCwwICsxLDY0IEBACisjIENv cHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorCisjIFJ1biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNl IHRvIGNoZWNrIGZvciBwcm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwg PT4gJ2FsbCc7CisKK3VzZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6 QmFzZW5hbWUgcXcoZGlybmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwor dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlh bGl6ZSB0aGUgcHJpbWFyeSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQg Y29uZmlndXJhdGlvbi4KKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxF T00pOworc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPSd0ZXN0X3BsYW5fYWR2aWNlJworcGdfcGxh bl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitFT00KKyRub2Rl LT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRoKCIuLi8uLi8uLi8uLiIpOworCisjIC0t ZGxwYXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jl c3Muc28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4K K215ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVTU19TSExJQn0pOworCisjIC0tb3V0cHV0 ZGlyIHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBwbGFjZSB0aGUgb3V0cHV0IGZpbGVzLgor bXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1wX2NoZWNrOworCisj IC0taW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9mIHRoZSBpbnB1dCBmaWxlcy4KK215ICRp bnB1dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MiOworCisjIFJ1biB0aGUgdGVzdHMu CitteSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdSRVNTfSAuICIgIgorCSAgLiAiLS1iaW5k aXI9ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwiICIKKwkgIC4gIi0taG9zdD0iIC4gJG5v ZGUtPmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4gJG5vZGUtPnBvcnQgLiAiICIKKwkgIC4g Ii0tc2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIK KwkgIC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAgIgorCSAgLiAiLS1pbnB1dGRpcj1cIiRp bnB1dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1dGRpclwiIik7CisKKyMgRHVt cCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwgaWYgdGhlcmUgaXMgb25lCitpZiAoJHJj ICE9IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRkaXIvcmVncmVzc2lvbi5kaWZmcyI7CisJ aWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0gZHVtcGluZyAkZGlmZnMgPT09XG4iOwor CQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXByaW50ICI9PT0gRU9GID09PVxuIjsKKwl9 Cit9CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywgMCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFz cycpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf cGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi45OTY2NzVkYzM4NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMKQEAgLTAsMCArMSwxNDMg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRlc3RfcGxhbl9hZHZpY2UuYworICoJICBU ZXN0IHBnX3BsYW5fYWR2aWNlIGJ5IHBsYW5uaW5nIGV2ZXJ5IHF1ZXJ5IHdpdGggZ2VuZXJhdGVk IGFkdmljZS4KKyAqCisgKiBXaXRoIHRoaXMgbW9kdWxlIGxvYWRlZCwgZXZlcnkgdGltZSBhIHF1 ZXJ5IGlzIGV4ZWN1dGVkLCB3ZSBlbmQgdXAKKyAqIHBsYW5uaW5nIGl0IHR3aWNlLiBUaGUgZmly c3QgdGltZSB3ZSBwbGFuIGl0LCB3ZSBnZW5lcmF0ZSBwbGFuIGFkdmljZSwKKyAqIHdoaWNoIHdl IHRoZW4gZmVlZCBiYWNrIHRvIHBnX3BsYW5fYWR2aWNlIGFzIHRoZSBzdXBwbGllZCBwbGFuIGFk dmljZS4KKyAqIEl0IGlzIHRoZW4gcGxhbm5lZCBhIHNlY29uZCB0aW1lIHVzaW5nIHRoYXQgYWR2 aWNlLiBUaGlzIGhvcGVmdWxseQorICogYWxsb3dzIHVzIHRvIGRldGVjdCBjYXNlcyB3aGVyZSB0 aGUgYWR2aWNlIGlzIGluY29ycmVjdCBvciBjYXVzZXMKKyAqIGZhaWx1cmVzIG9yIHBsYW4gY2hh bmdlcyBmb3Igc29tZSByZWFzb24uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hh Y3QuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5o IgorI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisK K1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIGJvb2wgaW5fcmVjdXJzaW9uID0gZmFsc2U7CisK K3N0YXRpYyBjaGFyICp0ZXN0X3BsYW5fYWR2aWNlX2Fkdmlzb3IoUGxhbm5lckdsb2JhbCAqZ2xv YiwKKwkJCQkJCQkJCSAgUXVlcnkgKnBhcnNlLAorCQkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsCisJCQkJCQkJCQkgIGludCBjdXJzb3JPcHRpb25zLAorCQkJCQkJCQkJICBFeHBs YWluU3RhdGUgKmVzKTsKK3N0YXRpYyBEZWZFbGVtICpmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShM aXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBt b2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJdm9pZAkgICAqKCphZGRfYWR2 aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9vayBob29rKTsKKworCS8qCisJICog QXNrIHBnX3BsYW5fYWR2aWNlIHRvIGdldCBhZHZpY2Ugc3RyaW5ncyBmcm9tIHRlc3RfcGxhbl9h ZHZpY2VfYWR2aXNvcgorCSAqLworCWFkZF9hZHZpc29yX2ZuID0KKwkJbG9hZF9leHRlcm5hbF9m dW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9hZHZpY2VfYWRkX2Fkdmlzb3IiLAor CQkJCQkJCSAgIHRydWUsIE5VTEwpOworCisJKCphZGRfYWR2aXNvcl9mbikgKHRlc3RfcGxhbl9h ZHZpY2VfYWR2aXNvcik7Cit9CisKKy8qCisgKiBSZS1wbGFuIHRoZSBnaXZlbiBxdWVyeSBhbmQg cmV0dXJuIHRoZSBnZW5lcmF0ZWQgYWR2aWNlIHN0cmluZyBhcyB0aGUKKyAqIHN1cHBsaWVkIGFk dmljZS4KKyAqLworc3RhdGljIGNoYXIgKgordGVzdF9wbGFuX2FkdmljZV9hZHZpc29yKFBsYW5u ZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCSBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAorCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJ UGxhbm5lZFN0bXQgKnBzdG10OworCWludAkJCXNhdmVfbmVzdGxldmVsID0gMDsKKwlEZWZFbGVt ICAgICpwZ3BhX2l0ZW07CisJRGVmRWxlbSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCisJLyoK KwkgKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBwbGFubmVyIGFuZCB0 cmlnZ2VycyBwbGFubmluZywKKwkgKiB3ZSBuZWVkIGEgcmVjdXJzaW9uIGd1YXJkLgorCSAqLwor CWlmIChpbl9yZWN1cnNpb24pCisJCXJldHVybiBOVUxMOworCisJUEdfVFJZKCk7CisJeworCQlp bl9yZWN1cnNpb24gPSB0cnVlOworCisJCS8qCisJCSAqIFBsYW5uaW5nIGNhbiB0cmlnZ2VyIGV4 cHJlc3Npb24gZXZhbHVhdGlvbiwgd2hpY2ggY2FuIHJlc3VsdCBpbgorCQkgKiBzZW5kaW5nIE5P VElDRSBtZXNzYWdlcyBvciBvdGhlciBvdXRwdXQgdG8gdGhlIGNsaWVudC4gVG8gYXZvaWQKKwkJ ICogdGhhdCwgd2Ugc2V0IGNsaWVudF9taW5fbWVzc2FnZXMgPSBFUlJPUiBpbiB0aGUgaG9wZXMg b2YgZ2V0dGluZworCQkgKiB0aGUgc2FtZSBvdXRwdXQgd2l0aCBhbmQgd2l0aG91dCB0aGlzIG1v ZHVsZS4KKwkJICoKKwkJICogV2UgYWxzbyBuZWVkIHRvIHNldCBwZ19wbGFuX2FkdmljZS5hbHdh eXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgc28KKwkJICogdGhhdCBwZ19wbGFuX2FkdmljZSB3aWxs IGdlbmVyYXRlIGFuIGFkdmljZSBzdHJpbmcsIHNpbmNlIHRoZSB3aG9sZQorCQkgKiBwb2ludCBv ZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdldCBhY2Nlc3MgdG8gdGhhdC4KKwkJICovCisJCXNhdmVf bmVzdGxldmVsID0gTmV3R1VDTmVzdExldmVsKCk7CisJCXNldF9jb25maWdfb3B0aW9uKCJjbGll bnRfbWluX21lc3NhZ2VzIiwgImVycm9yIiwKKwkJCQkJCSAgUEdDX1NVU0VULCBQR0NfU19TRVNT SU9OLAorCQkJCQkJICBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAsIGZhbHNlKTsKKwkJc2V0X2Nv bmZpZ19vcHRpb24oInBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyIs ICJ0cnVlIiwKKwkJCQkJCSAgUEdDX1NVU0VULCBQR0NfU19TRVNTSU9OLAorCQkJCQkJICBHVUNf QUNUSU9OX1NBVkUsIHRydWUsIDAsIGZhbHNlKTsKKworCQkvKgorCQkgKiBSZXBsYW4uIFdlIG11 c3QgY29weSB0aGUgUXVlcnksIGJlY2F1c2UgdGhlIHBsYW5uZXIgbW9kaWZpZXMgaXQuCisJCSAq IChBcyBub3RlZCBlbHNld2hlcmUsIHRoYXQncyB1bmZvcnR1bmF0ZTsgcGVyaGFwcyBpdCB3aWxs IGJlIGZpeGVkCisJCSAqIHNvbWUgZGF5LikKKwkJICovCisJCXBzdG10ID0gcGxhbm5lcihjb3B5 T2JqZWN0KHBhcnNlKSwgcXVlcnlfc3RyaW5nLCBjdXJzb3JPcHRpb25zLAorCQkJCQkJZ2xvYi0+ Ym91bmRQYXJhbXMsIGVzKTsKKwl9CisJUEdfRklOQUxMWSgpOworCXsKKwkJaW5fcmVjdXJzaW9u ID0gZmFsc2U7CisJfQorCVBHX0VORF9UUlkoKTsKKworCS8qIFJvbGwgYmFjayBhbnkgR1VDIGNo YW5nZXMgKi8KKwlpZiAoc2F2ZV9uZXN0bGV2ZWwgPiAwKQorCQlBdEVPWGFjdF9HVUMoZmFsc2Us IHNhdmVfbmVzdGxldmVsKTsKKworCS8qIEV4dHJhY3QgYW5kIHJldHVybiB0aGUgYWR2aWNlIHN0 cmluZyAqLworCXBncGFfaXRlbSA9IGZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBzdG10LT5leHRl bnNpb25fc3RhdGUsCisJCQkJCQkJCQkJInBnX3BsYW5fYWR2aWNlIik7CisJaWYgKHBncGFfaXRl bSA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAiZXh0ZW5zaW9uIHN0YXRlIGZvciBwZ19wbGFuX2Fk dmljZSBub3QgZm91bmQiKTsKKwlhZHZpY2Vfc3RyaW5nX2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlf ZGVmbmFtZSgoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZywKKwkJCQkJCQkJCQkJCSAiYWR2aWNlX3N0 cmluZyIpOworCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0gPT0gTlVMTCkKKwkJZWxvZyhFUlJPUiwK KwkJCSAiYWR2aWNlIHN0cmluZyBmb3IgcGdfcGxhbl9hZHZpY2Ugbm90IGZvdW5kIGluIGV4dGVu c2lvbiBzdGF0ZSIpOworCXJldHVybiBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVtLT5hcmcpOwor fQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVtIG9iamVjdHMgZm9yIGEgZ2l2ZW4g ZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUo TGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNoX25vZGUoRGVmRWxlbSwg aXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVmbmFtZSwgZGVmbmFtZSkg PT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVybiBOVUxMOworfQotLSAKMi41MS4w Cgo= --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0008-Fix-add_partial_path-interaction-with-disabled_n.patch" Content-Disposition: attachment; filename="v14-0008-Fix-add_partial_path-interaction-with-disabled_n.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclhaas7 RnJvbSBlOTM1ZDM3Nzg1MDVmMmM3ZDc5ZGVlZDg5ZjNlNmMyZmZiY2RmYjc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgNSBGZWIgMjAyNiAxNToyMzozNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDA4 LzEwXSBGaXggYWRkX3BhcnRpYWxfcGF0aCBpbnRlcmFjdGlvbiB3aXRoCiBkaXNhYmxlZF9ub2Rl cwoKQ29tbWl0IGUyMjI1MzQ2Nzk0MmZkYjEwMDA4Nzc4N2MzZTFlM2E4NjIwYzU0YjIgYWRqdXN0 ZWQgdGhlIGxvZ2ljIGluCmFkZF9wYXRoKCkgdG8ga2VlcCB0aGUgcGF0aCBsaXN0IHNvcnRlZCBi eSBkaXNhYmxlZF9ub2RlcyBhbmQgdGhlbiBieQp0b3RhbF9jb3N0LCBidXQgZmFpbGVkIHRvIG1h a2UgdGhlIGNvcnJlc3BvbmRpbmcgYWRqdXN0bWVudCB0bwphZGRfcGFydGlhbF9wYXRoLiBBcyBh IHJlc3VsdCwgYWRkX3BhcnRpYWxfcGF0aCBtaWdodCBzb3J0IHRoZSBwYXRoIGxpc3QKanVzdCBi eSB0b3RhbCBjb3N0LCB3aGljaCBjb3VsZCBsZWFkIHRvIGxhdGVyIHBsYW5uZXIgbWlzYmVoYXZp b3IuCgpJbiBwcmluY2lwbGUsIHRoaXMgc2hvdWxkIGJlIGJhY2stcGF0Y2hlZCB0byB2MTgsIGJ1 dCB3ZSBhcmUgdHlwaWNhbGx5CnJlbHVjdGFudCB0byBiYWNrLXBhdGNoIHBsYW5uZXIgZml4ZXMg Zm9yIGZlYXIgb2YgZGVzdGFiaWxpemluZyB3b3JraW5nCmluc3RhbGxhdGlvbnMsIGFuZCBpdCBp cyB1bmNsZWFyIHRvIG1lIHRoYXQgdGhpcyBoYXMgc3VmZmljaWVudGx5CnNlcmlvdXMgY29uc2Vx dWVuY2VzIHRvIGp1c3RpZnkgYW4gZXhjZXB0aW9uLCBzbyBmb3Igbm93LCBubyBiYWNrLXBhdGNo LgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgfCA5ICsrKysrKyst LQogMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCA4MjkyOTViM2FmZS4uODc1NzY0YWJk YmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtODc4LDggKzg3OCwx MyBAQCBhZGRfcGFydGlhbF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWwsIFBhdGggKm5ld19w YXRoKQogCQl9CiAJCWVsc2UKIAkJewotCQkJLyogbmV3IGJlbG9uZ3MgYWZ0ZXIgdGhpcyBvbGQg cGF0aCBpZiBpdCBoYXMgY29zdCA+PSBvbGQncyAqLwotCQkJaWYgKG5ld19wYXRoLT50b3RhbF9j b3N0ID49IG9sZF9wYXRoLT50b3RhbF9jb3N0KQorCQkJLyoKKwkJCSAqIG5ldyBiZWxvbmdzIGFm dGVyIHRoaXMgb2xkIHBhdGggaWYgaXQgaGFzIG1vcmUgZGlzYWJsZWQgbm9kZXMKKwkJCSAqIG9y IGlmIGl0IGhhcyB0aGUgc2FtZSBudW1iZXIgb2Ygbm9kZXMgYnV0IGEgZ3JlYXRlciB0b3RhbCBj b3N0CisJCQkgKi8KKwkJCWlmIChuZXdfcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPiBvbGRfcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgfHwKKwkJCQkobmV3X3BhdGgtPmRpc2FibGVkX25vZGVzID09IG9sZF9w YXRoLT5kaXNhYmxlZF9ub2RlcyAmJgorCQkJCSBuZXdfcGF0aC0+dG90YWxfY29zdCA+PSBvbGRf cGF0aC0+dG90YWxfY29zdCkpCiAJCQkJaW5zZXJ0X2F0ID0gZm9yZWFjaF9jdXJyZW50X2luZGV4 KHAxKSArIDE7CiAJCX0KIAotLSAKMi41MS4wCgo= --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0009-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Disposition: attachment; filename="v14-0009-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclhaaw8 RnJvbSBkMDE0ZmVlNmI0ZjkxMTk5OWVlNjI4NmJlZDBjMWQ4YzhkZjQ2YzhmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgNiBGZWIgMjAyNiAxNDo1MToyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDA5 LzEwXSBDb25zaWRlciBzdGFydHVwIGNvc3QgYXMgYSBmaWd1cmUgb2YgbWVyaXQgZm9yCiBwYXJ0 aWFsIHBhdGhzLgoKUHJldmlvdXNseSwgdGhlIGNvbWVudHMgc3RhdGVkIHRoYXQgdGhlcmUgd2Fz IG5vIHB1cnBvc2UgdG8gY29uc2lkZXJpbmcKc3RhcnR1cCBjb3N0IGZvciBwYXJ0aWFsIHBhdGhz LCBidXQgdGhpcyBpcyBub3QgdGhlIGNhc2U6IGl0J3MgcGVyZmVjdGx5CnJlYXNvbmFibGUgdG8g d2FudCBhIGZhc3Qtc3RhcnQgcGF0aCBmb3IgYSBwbGFuIHRoYXQgaW52b2x2ZXMgYSBMSU1JVAoo cGVyaGFwcyBvdmVyIGFuIGFnZ3JlZ2F0ZSwgc28gdGhhdCB0aGVyZSBpcyBlbm91Z2ggZGF0YSBi ZWluZyBwcm9jZXNzZWQKdG8ganVzdGlmeSBwYXJhbGxlbCBxdWVyeSBidXQgeWV0IHdlIGRvbid0 IHdhbnQgYWxsIHRoZSByZXN1bHQgcm93cykuCgpBY2NvcmRpbmdseSwgcmV3cml0ZSBhZGRfcGFy dGlhbF9wYXRoIGFuZCBhZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrIHRvCmNvbnNpZGVyIHN0YXJ0 dXAgY29zdHMuIFRoaXMgYWxzbyBmaXhlcyBhbiBpbmRlcGVuZGVudCBidWcgaW4KYWRkX3BhcnRp YWxfcGF0aF9wcmVjaGVjazogY29tbWl0IGUyMjI1MzQ2Nzk0MmZkYjEwMDA4Nzc4N2MzZTFlM2E4 NjIwYzU0YjIKZmFpbGVkIHRvIHVwZGF0ZSBpdCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSBuZXcg ZGlzYWJsZWRfbm9kZXMgZmllbGQuClRoYXQgYnVnIGZpeCBpcyBmb3JtYWxseSBzZXBhcmF0ZSBm cm9tIHRoZSByZXN0IG9mIHRoaXMgcGF0Y2ggYW5kIGNvdWxkCmJlIGNvbW1pdHRlZCBzZXBhcmF0 ZWx5LCBidXQgSSB0aGluayBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGZpeCBib3RoCmlzc3VlcyB0 b2dldGhlciwgYmVjYXVzZSB0aGVuIHdlIGNhbiAoYXMgdGhpcyBjb21taXQgZG9lcykganVzdCBt YWtlCmFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2sgZG8gdGhlIGNvc3QgY29tcGFyaXNvbnMgaW4g dGhlIHNhbWUgd2F5IGFzCmNvbXBhcmVfcGF0aF9jb3N0c19mdXp6aWx5LCB3aGljaCBob3BlZnVs bHkgcmVkdWNlcyB0aGUgY2hhbmNlcyBvZgplbmRpbmcgdXAgd2l0aCBzb21ldGhpbmcgdGhhdCdz IHN0aWxsIGluY29ycmVjdC4KClRoaXMgcGF0Y2ggaXMgYmFzZWQgb24gZWFybGllciB3b3JrIG9u IHRoaXMgdG9waWMgYnkgVG9tYXMgVm9uZHJhLApidXQgSSBoYXZlIHJld3JpdHRlbiBhIGdyZWF0 IGRlYWwgb2YgaXQuCgpDby1hdXRob3JlZC1ieTogUm9iZXJ0IEhhYXMgPHJoYWFzQHBvc3RncmVz cWwub3JnPgpDby1hdXRob3JlZC1ieTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+Ci0t LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgICAgICAgIHwgICAzICsK IHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAgICAgICB8IDE1OSArKysr KysrKysrKy0tLS0tLS0KIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oICAgICAgICAg ICAgICB8ICAgMiArLQogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxfc29ydC5vdXQg ICAgIHwgIDE4ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5faGFzaC5vdXQgICAg ICAgfCAgMTMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwgICAgICAgICAg ICB8ICAxMCArLQogNiBmaWxlcyBjaGFuZ2VkLCAxMjIgaW5zZXJ0aW9ucygrKSwgODMgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGgu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKaW5kZXggZTBjMDBlMjZk ZDUuLjA0NDU2MGRhN2JmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9q b2lucGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKQEAg LTEwNDgsNiArMTA0OCw3IEBAIHRyeV9wYXJ0aWFsX25lc3Rsb29wX3BhdGgoUGxhbm5lckluZm8g KnJvb3QsCiAJaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpvaW50eXBl LCBuZXN0bG9vcF9zdWJ0eXBlLAogCQkJCQkJICBvdXRlcl9wYXRoLCBpbm5lcl9wYXRoLCBleHRy YSk7CiAJaWYgKCFhZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFjZS5k aXNhYmxlZF9ub2RlcywKKwkJCQkJCQkJICAgd29ya3NwYWNlLnN0YXJ0dXBfY29zdCwKIAkJCQkJ CQkJICAgd29ya3NwYWNlLnRvdGFsX2Nvc3QsIHBhdGhrZXlzKSkKIAkJcmV0dXJuOwogCkBAIC0x MjM3LDYgKzEyMzgsNyBAQCB0cnlfcGFydGlhbF9tZXJnZWpvaW5fcGF0aChQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJCSAgIGV4dHJhKTsKIAogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVj ayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkJCSAgIHdvcmtzcGFj ZS5zdGFydHVwX2Nvc3QsCiAJCQkJCQkJCSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBwYXRoa2V5 cykpCiAJCXJldHVybjsKIApAQCAtMTM2OSw2ICsxMzcxLDcgQEAgdHJ5X3BhcnRpYWxfaGFzaGpv aW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlpbml0aWFsX2Nvc3RfaGFzaGpvaW4ocm9vdCwg JndvcmtzcGFjZSwgam9pbnR5cGUsIGhhc2hjbGF1c2VzLAogCQkJCQkJICBvdXRlcl9wYXRoLCBp bm5lcl9wYXRoLCBleHRyYSwgcGFyYWxsZWxfaGFzaCk7CiAJaWYgKCFhZGRfcGFydGlhbF9wYXRo X3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFjZS5kaXNhYmxlZF9ub2RlcywKKwkJCQkJCQkJICAg d29ya3NwYWNlLnN0YXJ0dXBfY29zdCwKIAkJCQkJCQkJICAgd29ya3NwYWNlLnRvdGFsX2Nvc3Qs IE5JTCkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5k ZXggODc1NzY0YWJkYmUuLmQ2MWYzMjg3MDdmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Bh dGhub2RlLmMKQEAgLTc3NywxMCArNzc3LDkgQEAgYWRkX3BhdGhfcHJlY2hlY2soUmVsT3B0SW5m byAqcGFyZW50X3JlbCwgaW50IGRpc2FibGVkX25vZGVzLAogICoKICAqCSAgQmVjYXVzZSB3ZSBk b24ndCBjb25zaWRlciBwYXJhbWV0ZXJpemVkIHBhdGhzIGhlcmUsIHdlIGFsc28gZG9uJ3QKICAq CSAgbmVlZCB0byBjb25zaWRlciB0aGUgcm93IGNvdW50cyBhcyBhIG1lYXN1cmUgb2YgcXVhbGl0 eTogZXZlcnkgcGF0aCB3aWxsCi0gKgkgIHByb2R1Y2UgdGhlIHNhbWUgbnVtYmVyIG9mIHJvd3Mu ICBOZWl0aGVyIGRvIHdlIG5lZWQgdG8gY29uc2lkZXIgc3RhcnR1cAotICoJICBjb3N0czogcGFy YWxsZWxpc20gaXMgb25seSB1c2VkIGZvciBwbGFucyB0aGF0IHdpbGwgYmUgcnVuIHRvIGNvbXBs ZXRpb24uCi0gKgkgIFRoZXJlZm9yZSwgdGhpcyByb3V0aW5lIGlzIG11Y2ggc2ltcGxlciB0aGFu IGFkZF9wYXRoOiBpdCBuZWVkcyB0bwotICoJICBjb25zaWRlciBvbmx5IGRpc2FibGVkIG5vZGVz LCBwYXRoa2V5cyBhbmQgdG90YWwgY29zdC4KKyAqCSAgcHJvZHVjZSB0aGUgc2FtZSBudW1iZXIg b2Ygcm93cy4gIEhvd2V2ZXIsIHdlIGRvIG5lZWQgdG8gY29uc2lkZXIgdGhlCisgKgkgIHN0YXJ0 dXAgY29zdHM6IHRoaXMgcGFydGlhbCBwYXRoIGNvdWxkIGJlIHVzZWQgYmVuZWF0aCBhIExpbWl0 IG5vZGUsCisgKgkgIHNvIGEgZmFzdC1zdGFydCBwbGFuIGNvdWxkIGJlIGNvcnJlY3QuCiAgKgog ICoJICBBcyB3aXRoIGFkZF9wYXRoLCB3ZSBwZnJlZSBwYXRocyB0aGF0IGFyZSBmb3VuZCB0byBi ZSBkb21pbmF0ZWQgYnkKICAqCSAgYW5vdGhlciBwYXJ0aWFsIHBhdGg7IHRoaXMgcmVxdWlyZXMg dGhhdCB0aGVyZSBiZSBubyBvdGhlciByZWZlcmVuY2VzIHRvCkBAIC04MTgsNTIgKzgxNywzNiBA QCBhZGRfcGFydGlhbF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWwsIFBhdGggKm5ld19wYXRo KQogCQkvKiBDb21wYXJlIHBhdGhrZXlzLiAqLwogCQlrZXlzY21wID0gY29tcGFyZV9wYXRoa2V5 cyhuZXdfcGF0aC0+cGF0aGtleXMsIG9sZF9wYXRoLT5wYXRoa2V5cyk7CiAKLQkJLyogVW5sZXNz IHBhdGhrZXlzIGFyZSBpbmNvbXBhdGlibGUsIGtlZXAganVzdCBvbmUgb2YgdGhlIHR3byBwYXRo cy4gKi8KKwkJLyoKKwkJICogVW5sZXNzIHBhdGhrZXlzIGFyZSBpbmNvbXBhdGlibGUsIHNlZSBp ZiBvbmUgb2YgdGhlIHBhdGhzIGRvbWluYXRlcworCQkgKiB0aGUgb3RoZXIgKGJvdGggaW4gc3Rh cnR1cCBhbmQgdG90YWwgY29zdCkuIEl0IG1heSBoYXBwZW4gdGhhdCBvbmUKKwkJICogcGF0aCBo YXMgbG93ZXIgc3RhcnR1cCBjb3N0LCB0aGUgb3RoZXIgaGFzIGxvd2VyIHRvdGFsIGNvc3QuCisJ CSAqLwogCQlpZiAoa2V5c2NtcCAhPSBQQVRIS0VZU19ESUZGRVJFTlQpCiAJCXsKLQkJCWlmICh1 bmxpa2VseShuZXdfcGF0aC0+ZGlzYWJsZWRfbm9kZXMgIT0gb2xkX3BhdGgtPmRpc2FibGVkX25v ZGVzKSkKKwkJCVBhdGhDb3N0Q29tcGFyaXNvbiBjb3N0Y21wOworCisJCQkvKgorCQkJICogRG8g YSBmdXp6eSBjb3N0IGNvbXBhcmlzb24gd2l0aCBzdGFuZGFyZCBmdXp6aW5lc3MgbGltaXQuCisJ CQkgKi8KKwkJCWNvc3RjbXAgPSBjb21wYXJlX3BhdGhfY29zdHNfZnV6emlseShuZXdfcGF0aCwg b2xkX3BhdGgsCisJCQkJCQkJCQkJCQkgU1REX0ZVWlpfRkFDVE9SKTsKKwkJCWlmIChjb3N0Y21w ID09IENPU1RTX0JFVFRFUjEpCiAJCQl7Ci0JCQkJaWYgKG5ld19wYXRoLT5kaXNhYmxlZF9ub2Rl cyA+IG9sZF9wYXRoLT5kaXNhYmxlZF9ub2RlcykKLQkJCQkJYWNjZXB0X25ldyA9IGZhbHNlOwot CQkJCWVsc2UKKwkJCQlpZiAoa2V5c2NtcCA9PSBQQVRIS0VZU19CRVRURVIxKQogCQkJCQlyZW1v dmVfb2xkID0gdHJ1ZTsKIAkJCX0KLQkJCWVsc2UgaWYgKG5ld19wYXRoLT50b3RhbF9jb3N0ID4g b2xkX3BhdGgtPnRvdGFsX2Nvc3QKLQkJCQkJICogU1REX0ZVWlpfRkFDVE9SKQorCQkJZWxzZSBp ZiAoY29zdGNtcCA9PSBDT1NUU19CRVRURVIyKQogCQkJewotCQkJCS8qIE5ldyBwYXRoIGNvc3Rz IG1vcmU7IGtlZXAgaXQgb25seSBpZiBwYXRoa2V5cyBhcmUgYmV0dGVyLiAqLwotCQkJCWlmIChr ZXlzY21wICE9IFBBVEhLRVlTX0JFVFRFUjEpCisJCQkJaWYgKGtleXNjbXAgPT0gUEFUSEtFWVNf QkVUVEVSMikKIAkJCQkJYWNjZXB0X25ldyA9IGZhbHNlOwogCQkJfQotCQkJZWxzZSBpZiAob2xk X3BhdGgtPnRvdGFsX2Nvc3QgPiBuZXdfcGF0aC0+dG90YWxfY29zdAotCQkJCQkgKiBTVERfRlVa Wl9GQUNUT1IpCisJCQllbHNlIGlmIChjb3N0Y21wID09IENPU1RTX0VRVUFMKQogCQkJewotCQkJ CS8qIE9sZCBwYXRoIGNvc3RzIG1vcmU7IGtlZXAgaXQgb25seSBpZiBwYXRoa2V5cyBhcmUgYmV0 dGVyLiAqLwotCQkJCWlmIChrZXlzY21wICE9IFBBVEhLRVlTX0JFVFRFUjIpCisJCQkJaWYgKGtl eXNjbXAgPT0gUEFUSEtFWVNfQkVUVEVSMSkKIAkJCQkJcmVtb3ZlX29sZCA9IHRydWU7Ci0JCQl9 Ci0JCQllbHNlIGlmIChrZXlzY21wID09IFBBVEhLRVlTX0JFVFRFUjEpCi0JCQl7Ci0JCQkJLyog Q29zdHMgYXJlIGFib3V0IHRoZSBzYW1lLCBuZXcgcGF0aCBoYXMgYmV0dGVyIHBhdGhrZXlzLiAq LwotCQkJCXJlbW92ZV9vbGQgPSB0cnVlOwotCQkJfQotCQkJZWxzZSBpZiAoa2V5c2NtcCA9PSBQ QVRIS0VZU19CRVRURVIyKQotCQkJewotCQkJCS8qIENvc3RzIGFyZSBhYm91dCB0aGUgc2FtZSwg b2xkIHBhdGggaGFzIGJldHRlciBwYXRoa2V5cy4gKi8KLQkJCQlhY2NlcHRfbmV3ID0gZmFsc2U7 Ci0JCQl9Ci0JCQllbHNlIGlmIChvbGRfcGF0aC0+dG90YWxfY29zdCA+IG5ld19wYXRoLT50b3Rh bF9jb3N0ICogMS4wMDAwMDAwMDAxKQotCQkJewotCQkJCS8qIFBhdGhrZXlzIGFyZSB0aGUgc2Ft ZSwgYW5kIHRoZSBvbGQgcGF0aCBjb3N0cyBtb3JlLiAqLwotCQkJCXJlbW92ZV9vbGQgPSB0cnVl OwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogUGF0aGtleXMgYXJlIHRoZSBz YW1lLCBhbmQgbmV3IHBhdGggaXNuJ3QgbWF0ZXJpYWxseQotCQkJCSAqIGNoZWFwZXIuCi0JCQkJ ICovCi0JCQkJYWNjZXB0X25ldyA9IGZhbHNlOworCQkJCWVsc2UgaWYgKGtleXNjbXAgPT0gUEFU SEtFWVNfQkVUVEVSMikKKwkJCQkJYWNjZXB0X25ldyA9IGZhbHNlOwogCQkJfQogCQl9CiAKQEAg LTkxNCwxNiArODk3LDE2IEBAIGFkZF9wYXJ0aWFsX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3Jl bCwgUGF0aCAqbmV3X3BhdGgpCiAgKiBhZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrCiAgKgkgIENo ZWNrIHdoZXRoZXIgYSBwcm9wb3NlZCBuZXcgcGFydGlhbCBwYXRoIGNvdWxkIHBvc3NpYmx5IGdl dCBhY2NlcHRlZC4KICAqCi0gKiBVbmxpa2UgYWRkX3BhdGhfcHJlY2hlY2ssIHdlIGNhbiBpZ25v cmUgc3RhcnR1cCBjb3N0IGFuZCBwYXJhbWV0ZXJpemF0aW9uLAotICogc2luY2UgdGhleSBkb24n dCBtYXR0ZXIgZm9yIHBhcnRpYWwgcGF0aHMgKHNlZSBhZGRfcGFydGlhbF9wYXRoKS4gIEJ1dAot ICogd2UgZG8gd2FudCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgYWRkIGEgcGFydGlhbCBwYXRoIGlm IHRoZXJlJ3MgYWxyZWFkeQotICogYSBjb21wbGV0ZSBwYXRoIHRoYXQgZG9taW5hdGVzIGl0LCBz aW5jZSBpbiB0aGF0IGNhc2UgdGhlIHByb3Bvc2VkIHBhdGgKLSAqIGlzIHN1cmVseSBhIGxvc2Vy LgorICogVW5saWtlIGFkZF9wYXRoX3ByZWNoZWNrLCB3ZSBjYW4gaWdub3JlIHBhcmFtZXRlcml6 YXRpb24sIHNpbmNlIGl0IGRvZXNuJ3QKKyAqIG1hdHRlciBmb3IgcGFydGlhbCBwYXRocyAoc2Vl IGFkZF9wYXJ0aWFsX3BhdGgpLiAgQnV0IHdlIGRvIHdhbnQgdG8gbWFrZQorICogc3VyZSB3ZSBk b24ndCBhZGQgYSBwYXJ0aWFsIHBhdGggaWYgdGhlcmUncyBhbHJlYWR5IGEgY29tcGxldGUgcGF0 aCB0aGF0CisgKiBkb21pbmF0ZXMgaXQsIHNpbmNlIGluIHRoYXQgY2FzZSB0aGUgcHJvcG9zZWQg cGF0aCBpcyBzdXJlbHkgYSBsb3Nlci4KICAqLwogYm9vbAogYWRkX3BhcnRpYWxfcGF0aF9wcmVj aGVjayhSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBpbnQgZGlzYWJsZWRfbm9kZXMsCi0JCQkJCQkg IENvc3QgdG90YWxfY29zdCwgTGlzdCAqcGF0aGtleXMpCisJCQkJCQkgIENvc3Qgc3RhcnR1cF9j b3N0LCBDb3N0IHRvdGFsX2Nvc3QsIExpc3QgKnBhdGhrZXlzKQogeworCWJvb2wJCWNvbnNpZGVy X3N0YXJ0dXAgPSBwYXJlbnRfcmVsLT5jb25zaWRlcl9zdGFydHVwOwogCUxpc3RDZWxsICAgKnAx OwogCiAJLyoKQEAgLTkzMywyNSArOTE2LDgwIEBAIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2so UmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgaW50IGRpc2FibGVkX25vZGVzLAogCSAqIGlzIGNsZWFy bHkgc3VwZXJpb3IgdG8gc29tZSBleGlzdGluZyBwYXJ0aWFsIHBhdGggLS0gYXQgbGVhc3QsIG1v ZHVsbwogCSAqIGZpbmFsIGNvc3QgY29tcHV0YXRpb25zLiAgSWYgc28sIHdlIGRlZmluaXRlbHkg d2FudCB0byBjb25zaWRlciBpdC4KIAkgKgotCSAqIFVubGlrZSBhZGRfcGF0aCgpLCB3ZSBhbHdh eXMgY29tcGFyZSBwYXRoa2V5cyBoZXJlLiAgVGhpcyBpcyBiZWNhdXNlIHdlCi0JICogZXhwZWN0 IHBhcnRpYWxfcGF0aGxpc3QgdG8gYmUgdmVyeSBzaG9ydCwgYW5kIGdldHRpbmcgYSBkZWZpbml0 aXZlCisJICogVW5saWtlIGFkZF9wYXRoKCksIHdlIG5ldmVyIHRyeSB0byBleGl0IHRoaXMgbG9v cCBlYXJseS4gVGhpcyBpcyBiZWNhdXNlCisJICogd2UgZXhwZWN0IHBhcnRpYWxfcGF0aGxpc3Qg dG8gYmUgdmVyeSBzaG9ydCwgYW5kIGdldHRpbmcgYSBkZWZpbml0aXZlCiAJICogYW5zd2VyIGF0 IHRoaXMgc3RhZ2UgYXZvaWRzIHRoZSBuZWVkIHRvIGNhbGwgYWRkX3BhdGhfcHJlY2hlY2suCiAJ ICovCiAJZm9yZWFjaChwMSwgcGFyZW50X3JlbC0+cGFydGlhbF9wYXRobGlzdCkKIAl7CiAJCVBh dGgJICAgKm9sZF9wYXRoID0gKFBhdGggKikgbGZpcnN0KHAxKTsKKwkJUGF0aENvc3RDb21wYXJp c29uIGNvc3RjbXA7CiAJCVBhdGhLZXlzQ29tcGFyaXNvbiBrZXlzY21wOwogCi0JCWtleXNjbXAg PSBjb21wYXJlX3BhdGhrZXlzKHBhdGhrZXlzLCBvbGRfcGF0aC0+cGF0aGtleXMpOwotCQlpZiAo a2V5c2NtcCAhPSBQQVRIS0VZU19ESUZGRVJFTlQpCisJCS8qCisJCSAqIEZpcnN0LCBjb21wYXJl IGNvc3RzIGFuZCBkaXNhYmxlZCBub2Rlcy4gVGhpcyBsb2dpYyBzaG91bGQgYmUKKwkJICogaWRl bnRpY2FsIHRvIGNvbXBhcmVfcGF0aF9jb3N0c19mdXp6aWx5LCBleGNlcHQgdGhhdCBvbmUgb2Yg dGhlCisJCSAqIHBhdGhzIGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0LCBhbmQgdGhlIGZ1enogZmFj dG9yIGlzIGFsd2F5cworCQkgKiBTVERfRlVaWl9GQUNUT1IuCisJCSAqLworCQlpZiAodW5saWtl bHkob2xkX3BhdGgtPmRpc2FibGVkX25vZGVzICE9IGRpc2FibGVkX25vZGVzKSkKIAkJewotCQkJ aWYgKHRvdGFsX2Nvc3QgPiBvbGRfcGF0aC0+dG90YWxfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUiAm JgotCQkJCWtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0J CQlpZiAob2xkX3BhdGgtPnRvdGFsX2Nvc3QgPiB0b3RhbF9jb3N0ICogU1REX0ZVWlpfRkFDVE9S ICYmCi0JCQkJa2V5c2NtcCAhPSBQQVRIS0VZU19CRVRURVIyKQotCQkJCXJldHVybiB0cnVlOwor CQkJaWYgKGRpc2FibGVkX25vZGVzIDwgb2xkX3BhdGgtPmRpc2FibGVkX25vZGVzKQorCQkJCWNv c3RjbXAgPSBDT1NUU19CRVRURVIxOworCQkJZWxzZQorCQkJCWNvc3RjbXAgPSBDT1NUU19CRVRU RVIyOworCQl9CisJCWVsc2UgaWYgKHRvdGFsX2Nvc3QgPiBvbGRfcGF0aC0+dG90YWxfY29zdCAq IFNURF9GVVpaX0ZBQ1RPUikKKwkJeworCQkJaWYgKGNvbnNpZGVyX3N0YXJ0dXAgJiYKKwkJCQlv bGRfcGF0aC0+c3RhcnR1cF9jb3N0ID4gc3RhcnR1cF9jb3N0ICogU1REX0ZVWlpfRkFDVE9SKQor CQkJCWNvc3RjbXAgPSBDT1NUU19ESUZGRVJFTlQ7CisJCQllbHNlCisJCQkJY29zdGNtcCA9IENP U1RTX0JFVFRFUjI7CisJCX0KKwkJZWxzZSBpZiAob2xkX3BhdGgtPnRvdGFsX2Nvc3QgPiB0b3Rh bF9jb3N0ICogU1REX0ZVWlpfRkFDVE9SKQorCQl7CisJCQlpZiAoY29uc2lkZXJfc3RhcnR1cCAm JgorCQkJCXN0YXJ0dXBfY29zdCA+IG9sZF9wYXRoLT5zdGFydHVwX2Nvc3QgKiBTVERfRlVaWl9G QUNUT1IpCisJCQkJY29zdGNtcCA9IENPU1RTX0RJRkZFUkVOVDsKKwkJCWVsc2UKKwkJCQljb3N0 Y21wID0gQ09TVFNfQkVUVEVSMTsKIAkJfQorCQllbHNlIGlmIChzdGFydHVwX2Nvc3QgPiBvbGRf cGF0aC0+c3RhcnR1cF9jb3N0ICogU1REX0ZVWlpfRkFDVE9SKQorCQkJY29zdGNtcCA9IENPU1RT X0JFVFRFUjI7CisJCWVsc2UgaWYgKG9sZF9wYXRoLT5zdGFydHVwX2Nvc3QgPiBzdGFydHVwX2Nv c3QgKiBTVERfRlVaWl9GQUNUT1IpCisJCQljb3N0Y21wID0gQ09TVFNfQkVUVEVSMTsKKwkJZWxz ZQorCQkJY29zdGNtcCA9IENPU1RTX0VRVUFMOworCisJCS8qCisJCSAqIElmIG9uZSBwYXRoIHdp bnMgb24gc3RhcnR1cCBjb3N0IGFuZCB0aGUgb3RoZXIgb24gdG90YWwgY29zdCwgd2UKKwkJICog Y2FuJ3Qgc2F5IGZvciBzdXJlIHdoaWNoIGlzIGJldHRlci4KKwkJICovCisJCWlmIChjb3N0Y21w ID09IENPU1RTX0RJRkZFUkVOVCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoZSB0 d28gcGF0aHMgaGF2ZSBkaWZmZXJlbnQgcGF0aGtleXMsIHdlIGNhbid0IHNheSBmb3Igc3VyZQor CQkgKiB3aGljaCBpcyBiZXR0ZXIuCisJCSAqLworCQlrZXlzY21wID0gY29tcGFyZV9wYXRoa2V5 cyhwYXRoa2V5cywgb2xkX3BhdGgtPnBhdGhrZXlzKTsKKwkJaWYgKGtleXNjbXAgPT0gUEFUSEtF WVNfRElGRkVSRU5UKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWYgdGhlIGV4aXN0aW5n IHBhdGggaXMgY2hlYXBlciBhbmQgdGhlIHBhdGhrZXlzIGFyZSBlcXVhbCBvciB3b3JzZSwKKwkJ ICogdGhlIG5ldyBwYXRoIGlzIG5vdCBpbnRlcmVzdGluZy4KKwkJICovCisJCWlmIChjb3N0Y21w ID09IENPU1RTX0JFVFRFUjIgJiYga2V5c2NtcCAhPSBQQVRIS0VZU19CRVRURVIxKQorCQkJcmV0 dXJuIGZhbHNlOworCisJCS8qCisJCSAqIElmIHRoZSBuZXcgcGF0aCBpcyBjaGVhcGVyIGFuZCB0 aGUgcGF0aGtleXMgYXJlIGVxdWFsIG9yIGJldHRlciwKKwkJICogaXQgaXMgZGVmaW5pdGVseSBp bnRlcmVzdGluZy4KKwkJICovCisJCWlmIChjb3N0Y21wID09IENPU1RTX0JFVFRFUjEgJiYga2V5 c2NtcCAhPSBQQVRIS0VZU19CRVRURVIyKQorCQkJcmV0dXJuIHRydWU7CiAJfQogCiAJLyoKQEAg LTk1OSwxNCArOTk3LDkgQEAgYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhSZWxPcHRJbmZvICpw YXJlbnRfcmVsLCBpbnQgZGlzYWJsZWRfbm9kZXMsCiAJICogY2xlYXJseSBnb29kIGVub3VnaCB0 aGF0IGl0IG1pZ2h0IHJlcGxhY2Ugb25lLiAgQ29tcGFyZSBpdCB0bwogCSAqIG5vbi1wYXJhbGxl bCBwbGFucy4gIElmIGl0IGxvc2VzIGV2ZW4gYmVmb3JlIGFjY291bnRpbmcgZm9yIHRoZSBjb3N0 IG9mCiAJICogdGhlIEdhdGhlciBub2RlLCB3ZSBzaG91bGQgZGVmaW5pdGVseSByZWplY3QgaXQu Ci0JICoKLQkgKiBOb3RlIHRoYXQgd2UgcGFzcyB0aGUgdG90YWxfY29zdCB0byBhZGRfcGF0aF9w cmVjaGVjayB0d2ljZS4gIFRoaXMgaXMKLQkgKiBiZWNhdXNlIGl0J3MgbmV2ZXIgYWR2YW50YWdl b3VzIHRvIGNvbnNpZGVyIHRoZSBzdGFydHVwIGNvc3Qgb2YgYQotCSAqIHBhcnRpYWwgcGF0aDsg dGhlIHJlc3VsdGluZyBwbGFucywgaWYgcnVuIGluIHBhcmFsbGVsLCB3aWxsIGJlIHJ1biB0bwot CSAqIGNvbXBsZXRpb24uCiAJICovCi0JaWYgKCFhZGRfcGF0aF9wcmVjaGVjayhwYXJlbnRfcmVs LCBkaXNhYmxlZF9ub2RlcywgdG90YWxfY29zdCwgdG90YWxfY29zdCwKLQkJCQkJCSAgIHBhdGhr ZXlzLCBOVUxMKSkKKwlpZiAoIWFkZF9wYXRoX3ByZWNoZWNrKHBhcmVudF9yZWwsIGRpc2FibGVk X25vZGVzLCBzdGFydHVwX2Nvc3QsCisJCQkJCQkgICB0b3RhbF9jb3N0LCBwYXRoa2V5cywgTlVM TCkpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaAppbmRleCBjZjhhNjU0ZmE1My4uOTM4NTEwNDAwY2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL29wdGltaXplci9wYXRobm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo bm9kZS5oCkBAIC01NSw3ICs1NSw3IEBAIGV4dGVybiBib29sIGFkZF9wYXRoX3ByZWNoZWNrKFJl bE9wdEluZm8gKnBhcmVudF9yZWwsIGludCBkaXNhYmxlZF9ub2RlcywKIAkJCQkJCQkgIExpc3Qg KnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogZXh0ZXJuIHZvaWQgYWRkX3BhcnRp YWxfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCk7CiBleHRlcm4g Ym9vbCBhZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrKFJlbE9wdEluZm8gKnBhcmVudF9yZWwsCi0J CQkJCQkJCQkgIGludCBkaXNhYmxlZF9ub2RlcywKKwkJCQkJCQkJCSAgaW50IGRpc2FibGVkX25v ZGVzLCBDb3N0IHN0YXJ0dXBfY29zdCwKIAkJCQkJCQkJCSAgQ29zdCB0b3RhbF9jb3N0LCBMaXN0 ICpwYXRoa2V5cyk7CiAKIGV4dGVybiBQYXRoICpjcmVhdGVfc2Vxc2Nhbl9wYXRoKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2luY3JlbWVudGFsX3NvcnQub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9pbmNyZW1lbnRhbF9zb3J0Lm91dAppbmRleCBmZGVjNWI5YmE1Mi4uMjkwOTBkY2ExYmEgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxfc29ydC5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmNyZW1lbnRhbF9zb3J0Lm91dApAQCAt MTQ1MCwyMSArMTQ1MCwyMyBAQCBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBhLGIsc3VtKGMp IGZyb20gdCBncm91cCBieSAxLDIgb3JkZXIgYnkgMSwyLDMgbGltaXQgMQogCiBzZXQgZW5hYmxl X2luY3JlbWVudGFsX3NvcnQgPSBvbjsKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGEsYixz dW0oYykgZnJvbSB0IGdyb3VwIGJ5IDEsMiBvcmRlciBieSAxLDIsMyBsaW1pdCAxOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogIExpbWl0CiAgICAtPiAgSW5jcmVtZW50YWwgU29ydAogICAgICAgICAgU29ydCBL ZXk6IGEsIGIsIChzdW0oYykpCiAgICAgICAgICBQcmVzb3J0ZWQgS2V5OiBhLCBiCi0gICAgICAg ICAtPiAgR3JvdXBBZ2dyZWdhdGUKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0 ZQogICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBhLCBiCiAgICAgICAgICAgICAgICAtPiAgR2F0 aGVyIE1lcmdlCiAgICAgICAgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDIKLSAgICAg ICAgICAgICAgICAgICAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICBTb3J0IEtleTogYSwgYgotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlc29y dGVkIEtleTogYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEluZGV4 IFNjYW4gdXNpbmcgdF9hX2lkeCBvbiB0Ci0oMTIgcm93cykKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH cm91cCBLZXk6IGEsIGIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmNyZW1lbnRh bCBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogYSwgYgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlc29ydGVkIEtleTogYQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEluZGV4IFNjYW4gdXNpbmcg dF9hX2lkeCBvbiB0CisoMTQgcm93cykKIAogLS0gSW5jcmVtZW50YWwgc29ydCB2cy4gc2V0IG9w ZXJhdGlvbnMgd2l0aCB2YXJubyAwCiBzZXQgZW5hYmxlX2hhc2hhZ2cgdG8gb2ZmOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luX2hhc2gub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9qb2luX2hhc2gub3V0CmluZGV4IDQ3NDlmNmVkNzBkLi5iYzdjYzc2 NDY3ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luX2hhc2gub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dApAQCAtNzYsOCAr NzYsOCBAQCBpbnNlcnQgaW50byBleHRyZW1lbHlfc2tld2VkCiB1cGRhdGUgcGdfY2xhc3MKICAg c2V0IHJlbHR1cGxlcyA9IDIsIHJlbHBhZ2VzID0gcGdfcmVsYXRpb25fc2l6ZSgnZXh0cmVtZWx5 X3NrZXdlZCcpIC8gODE5MgogICB3aGVyZSByZWxuYW1lID0gJ2V4dHJlbWVseV9za2V3ZWQnOwot LS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggYSBjb3VwbGUgb2YgZW5vcm1vdXMgdHVwbGVzLgotY3Jl YXRlIHRhYmxlIHdpZGUgYXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAyKSBhcyBpZCwgcnBh ZCgnJywgMzIwMDAwLCAneCcpIGFzIHQ7CistLSBNYWtlIGEgcmVsYXRpb24gd2l0aCBzZXZlcmFs IGVub3Jtb3VzIHR1cGxlcy4KK2NyZWF0ZSB0YWJsZSB3aWRlIGFzIHNlbGVjdCBnZW5lcmF0ZV9z ZXJpZXMoMSwgMykgYXMgaWQsIHJwYWQoJycsIDMyMDAwMCwgJ3gnKSBhcyB0OwogYWx0ZXIgdGFi bGUgd2lkZSBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsKIC0tIFRoZSAib3B0aW1hbCIgY2Fz ZTogdGhlIGhhc2ggdGFibGUgZml0cyBpbiBtZW1vcnk7IHdlIHBsYW4gZm9yIDEKIC0tIGJhdGNo LCB3ZSBzdGljayB0byB0aGF0IG51bWJlciwgYW5kIHBlYWsgbWVtb3J5IHVzYWdlIHN0YXlzIHdp dGhpbgpAQCAtOTIyLDcgKzkyMiw3IEBAIHNldCB3b3JrX21lbSA9ICcxMjhrQic7CiBzZXQgaGFz aF9tZW1fbXVsdGlwbGllciA9IDEuMDsKIGV4cGxhaW4gKGNvc3RzIG9mZikKICAgc2VsZWN0IGxl bmd0aChtYXgocy50KSkKLSAgZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNj ZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsKKyAgZnJvbSB3aWRl IGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdp ZGUgd2hlcmUgaWQgPCAzKSBzIHVzaW5nIChpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgRmluYWxp emUgQWdncmVnYXRlCkBAIC05MzQsMTAgKzkzNCwxMSBAQCBleHBsYWluIChjb3N0cyBvZmYpCiAg ICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gd2lkZQogICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiB3aWRlIHdpZGVfMQotKDkgcm93cykKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGlkIDwgMykKKygxMCByb3dzKQog CiBzZWxlY3QgbGVuZ3RoKG1heChzLnQpKQotZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlk LCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsKK2Zy b20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQg ZnJvbSB3aWRlIHdoZXJlIGlkIDwgMykgcyB1c2luZyAoaWQpOwogIGxlbmd0aCAKIC0tLS0tLS0t CiAgMzIwMDAwCkBAIC05NDcsNyArOTQ4LDcgQEAgc2VsZWN0IGZpbmFsID4gMSBhcyBtdWx0aWJh dGNoCiAgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiAkJAogICBzZWxlY3QgbGVuZ3RoKG1heChz LnQpKQotICBmcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8 fCAnJyBhcyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOworICBmcm9tIHdpZGUgbGVmdCBqb2lu IChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSB3aGVyZSBp ZCA8IDMpIHMgdXNpbmcgKGlkKTsKICQkKTsKICBtdWx0aWJhdGNoIAogLS0tLS0tLS0tLS0tCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2guc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvam9pbl9oYXNoLnNxbAppbmRleCA0OWQzZmQ2MTg1Ni4uNTNkYjE3NTRiYjIg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvam9pbl9oYXNoLnNxbApAQCAtODMsOCArODMsOCBAQCB1cGRhdGUg cGdfY2xhc3MKICAgc2V0IHJlbHR1cGxlcyA9IDIsIHJlbHBhZ2VzID0gcGdfcmVsYXRpb25fc2l6 ZSgnZXh0cmVtZWx5X3NrZXdlZCcpIC8gODE5MgogICB3aGVyZSByZWxuYW1lID0gJ2V4dHJlbWVs eV9za2V3ZWQnOwogCi0tLSBNYWtlIGEgcmVsYXRpb24gd2l0aCBhIGNvdXBsZSBvZiBlbm9ybW91 cyB0dXBsZXMuCi1jcmVhdGUgdGFibGUgd2lkZSBhcyBzZWxlY3QgZ2VuZXJhdGVfc2VyaWVzKDEs IDIpIGFzIGlkLCBycGFkKCcnLCAzMjAwMDAsICd4JykgYXMgdDsKKy0tIE1ha2UgYSByZWxhdGlv biB3aXRoIHNldmVyYWwgZW5vcm1vdXMgdHVwbGVzLgorY3JlYXRlIHRhYmxlIHdpZGUgYXMgc2Vs ZWN0IGdlbmVyYXRlX3NlcmllcygxLCAzKSBhcyBpZCwgcnBhZCgnJywgMzIwMDAwLCAneCcpIGFz IHQ7CiBhbHRlciB0YWJsZSB3aWRlIHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIpOwogCiAtLSBU aGUgIm9wdGltYWwiIGNhc2U6IHRoZSBoYXNoIHRhYmxlIGZpdHMgaW4gbWVtb3J5OyB3ZSBwbGFu IGZvciAxCkBAIC00OTYsMTQgKzQ5NiwxNCBAQCBzZXQgd29ya19tZW0gPSAnMTI4a0InOwogc2V0 IGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVj dCBsZW5ndGgobWF4KHMudCkpCi0gIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29h bGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CisgIGZyb20g d2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJv bSB3aWRlIHdoZXJlIGlkIDwgMykgcyB1c2luZyAoaWQpOwogc2VsZWN0IGxlbmd0aChtYXgocy50 KSkKLWZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcn IGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7Citmcm9tIHdpZGUgbGVmdCBqb2luIChzZWxl Y3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSB3aGVyZSBpZCA8IDMp IHMgdXNpbmcgKGlkKTsKIHNlbGVjdCBmaW5hbCA+IDEgYXMgbXVsdGliYXRjaAogICBmcm9tIGhh c2hfam9pbl9iYXRjaGVzKAogJCQKICAgc2VsZWN0IGxlbmd0aChtYXgocy50KSkKLSAgZnJvbSB3 aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9t IHdpZGUpIHMgdXNpbmcgKGlkKTsKKyAgZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBj b2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUgd2hlcmUgaWQgPCAzKSBzIHVzaW5n IChpZCk7CiAkJCk7CiByb2xsYmFjayB0byBzZXR0aW5nczsKIAotLSAKMi41MS4wCgo= --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0006-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Disposition: attachment; filename="v14-0006-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclhaak5 RnJvbSBkZmU4ODA5YzNkMmQ1ZTA1NmNhNGZiNTA0ZTAzN2U5YjYyMTU1ZmJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwODoxNDo0MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDA2 LzEwXSBBbGxvdyBleHRlbnNpb25zIHRvIG1hcmsgYW4gaW5kaXZpZHVhbCBpbmRleCBhcwogZGlz YWJsZWQuCgpVcCB1bnRpbCBub3csIHRoZSBvbmx5IHdheSBmb3IgYSBsb2FkYWJsZSBtb2R1bGUg dG8gZGlzYWJsZSB0aGUgdXNlIG9mIGEKcGFydGljdWxhciBpbmRleCB3YXMgdG8gdXNlIGdldF9y ZWxhdGlvbl9pbmZvX2hvb2sgdG8gcmVtb3ZlIGl0IGZyb20gdGhlCmluZGV4IGxpc3QuIFdoaWxl IHRoYXQgd29ya3MsIGl0IGhhcyBzb21lIGRpc2FkdmFudGFnZXMuIEZpcnN0LCB0aGUKaW5kZXgg YmVjb21lcyBpbnZpc2libGUgZm9yIGFsbCBwdXJwb3NlcywgYW5kIGNhbiBubyBsb25nZXIgYmUg dXNlZCBmb3IKb3B0aW1pemF0aW9ucyBzdWNoIGFzIHNlbGYtam9pbiBlbGltaW5hdGlvbiBvciBs ZWZ0IGpvaW4gcmVtb3ZhbCwgd2hpY2gKY2FuIHNldmVyZWx5IGRlZ3JhZGUgdGhlIHJlc3VsdGlu ZyBwbGFuLgoKU2Vjb25kLCBpZiB0aGUgbW9kdWxlIGF0dGVtcHRzIHRvIGNvbXBlbCB0aGUgdXNl IG9mIGEgY2VydGFpbiBpbmRleApieSByZW1vdmluZyBhbGwgb3RoZXIgaW5kZXhlcyBmcm9tIHRo ZSBpbmRleCBsaXN0IGFuZCBkaXNhYmxpbmcKb3RoZXIgc2NhbiB0eXBlcywgYnV0IHRoZSBwbGFu bmVyIGlzIHVuYWJsZSB0byB1c2UgdGhlIGNob3NlbiBpbmRleApmb3Igc29tZSByZWFzb24sIGl0 IHdpbGwgZmFsbCBiYWNrIHRvIGEgc2VxdWVudGlhbCBzY2FuLCBiZWNhdXNlIHRoYXQKaXMgb25s eSBkaXNhYmxlZCwgd2hlcmVhcyB0aGUgb3RoZXIgaW5kZXhlcyBhcmUsIGZyb20gdGhlIHBsYW5u ZXIncwpwb2ludCBvZiB2aWV3LCBjb21wbGV0ZWx5IGdvbmUuIFdoaWxlIHRoaXMgc2l0dWF0aW9u IGlkZWFsbHkgc2hvdWxkbid0Cm9jY3VyLCBpdCdzIGhhcmQgZm9yIGEgbG9hZGFibGUgbW9kdWxl IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSB3aGV0aGVyCnRoZSBwbGFubmVyIHdpbGwgdmlldyBhIGNl cnRhaW4gaW5kZXggYXMgdXNhYmxlIGZvciBhIGNlcnRhaW4gcXVlcnkuCklmIGl0IGlzbid0LCBp dCdzIG1vcmUgZGVzaXJhYmxlIHRvIGZhbGwgYmFjayB0byB0aGUgbmV4dC1jaGVhcGVzdApwbGFu IHRoYW4gdG8gYmUgZm9yY2VkIGludG8gYSBzZXF1ZW50aWFsIHNjYW4uCi0tLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyB8IDggKysrKysrKysKIHNyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oICAgICAgICAgfCAyICsrCiAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2Vy dGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCA5Njc4YzIw ZmYxZi4uODI5Mjk1YjNhZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BhdGhub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpA QCAtMTA3Nyw2ICsxMDc3LDE0IEBAIGNyZWF0ZV9pbmRleF9wYXRoKFBsYW5uZXJJbmZvICpyb290 LAogCiAJY29zdF9pbmRleChwYXRobm9kZSwgcm9vdCwgbG9vcF9jb3VudCwgcGFydGlhbF9wYXRo KTsKIAorCS8qCisJICogY29zdF9pbmRleCB3aWxsIHNldCBkaXNhYmxlZF9ub2RlcyB0byAxIGlm IHRoaXMgcmVsIGlzIG5vdCBhbGxvd2VkIHRvCisJICogdXNlIGluZGV4IHNjYW5zIGluIGdlbmVy YWwsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdGhlIEluZGV4T3B0SW5mbyB0bworCSAqIGtub3cgd2hl dGhlciB0aGlzIHNwZWNpZmljIGluZGV4IGhhcyBiZWVuIGRpc2FibGVkLgorCSAqLworCWlmIChp bmRleC0+ZGlzYWJsZWQpCisJCXBhdGhub2RlLT5wYXRoLmRpc2FibGVkX25vZGVzID0gMTsKKwog CXJldHVybiBwYXRobm9kZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCBjMTc1ZWU5NWI2 OC4uMjc3NThlYzE2ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xNDEyLDYgKzE0MTIsOCBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleE9wdEluZm8KIAlib29sCQludWxsc25vdGRpc3RpbmN0Owog CS8qIGlzIHVuaXF1ZW5lc3MgZW5mb3JjZWQgaW1tZWRpYXRlbHk/ICovCiAJYm9vbAkJaW1tZWRp YXRlOworCS8qIHRydWUgaWYgcGF0aHMgdXNpbmcgdGhpcyBpbmRleCBzaG91bGQgYmUgbWFya2Vk IGRpc2FibGVkICovCisJYm9vbAkJZGlzYWJsZWQ7CiAJLyogdHJ1ZSBpZiBpbmRleCBkb2Vzbid0 IHJlYWxseSBleGlzdCAqLwogCWJvb2wJCWh5cG90aGV0aWNhbDsKIAotLSAKMi41MS4wCgo= --0000000000008b3f75064a3f5e84 Content-Type: application/octet-stream; name="v14-0007-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v14-0007-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlclhaao6 RnJvbSBiNzQ2YTE0NWNkYTNjYzI3MTFkYzNmMmZkYTZjZDIxMGIxN2RmNDVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjYgSmFuIDIwMjYgMDk6NTY6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNCAw Ny8xMF0gQWRkIHBnX3BsYW5fYWR2aWNlIGNvbnRyaWIgbW9kdWxlLgoKUHJvdmlkZSBhIGZhY2ls aXR5IHRoYXQgKDEpIGNhbiBiZSB1c2VkIHRvIHN0YWJpbGl6ZSBjZXJ0YWluIHBsYW4gY2hvaWNl cwpzbyB0aGF0IHRoZSBwbGFubmVyIGNhbm5vdCByZXZlcnNlIGNvdXJzZSB3aXRob3V0IGF1dGhv cml6YXRpb24gYW5kCigyKSBjYW4gYmUgdXNlZCBieSBrbm93bGVkZ2VhYmxlIHVzZXJzIHRvIGlu c2lzdCBvbiBwbGFuIGNob2ljZXMgY29udHJhcnkKdG8gd2hhdCB0aGUgcGxhbm5lciBiZWxpZXZl cyBiZXN0LiBJbiBib3RoIGNhc2VzLCB0ZXJyaWJsZSBvdXRjb21lcyBhcmUKcG9zc2libGU6IHVz ZXJzIHNob3VsZCB0aGluayB0d2ljZSBhbmQgcGVyaGFwcyB0aHJlZSB0aW1lcyBiZWZvcmUKY29u c3RyYWluaW5nIHRoZSBwbGFubmVyJ3MgYWJpbGl0eSB0byBkbyBhcyBpdCB0aGlua3MgYmVzdDsg bmV2ZXJ0aGVsZXNzLAp0aGVyZSBhcmUgcHJvYmxlbXMgdGhhdCBhcmUgbXVjaCBtb3JlIGVhc2ls eSBzb2x2ZWQgd2l0aCB0aGVzZSBmYWNpbGl0aWVzCnRoYW4gd2l0aG91dCB0aGVtLgoKVGhpcyBw YXRjaCB0YWtlcyB0aGUgYXBwcm9hY2ggb2YgYW5hbHl6aW5nIGEgZmluaXNoZWQgcGxhbiB0byBw cm9kdWNlCnRleHR1YWwgb3V0cHV0LCB3aGljaCB3ZSBjYWxsICJwbGFuIGFkdmljZSIsIHRoYXQg ZGVzY3JpYmVzIGtleQpkZWNpc2lvbnMgbWFkZSBkdXJpbmcgcGxhbjsgaWYgdGhhdCBwbGFuIGFk dmljZSBpcyBwcm92aWRlZCBkdXJpbmcKZnV0dXJlIHBsYW5uaW5nIGN5Y2xlcywgaXQgd2lsbCBm b3JjZSB0aG9zZSBrZXkgZGVjaXNpb25zIHRvIGJlIG1hZGUgaW4KdGhlIHNhbWUgd2F5LiAgTm90 IGFsbCBwbGFubmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7CmZv ciBleGFtcGxlLCBkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24gYXJl IGN1cnJlbnRseQpvdXQgb2Ygc2NvcGUsIGFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQbGFu IGFkdmljZSBjYW4gYWxzbyBiZSBlZGl0ZWQKYnkgdGhlIHVzZXIsIG9yIGV2ZW4gd3JpdHRlbiBm cm9tIHNjcmF0Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQKcG9zc2libGUgdG8gZ2VuZXJh dGUgb3V0Y29tZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4KUGFy dGlhbCBhZHZpY2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91dGNv bWVzIGJ1dCBub3QKb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2VkIG9u bHkgb24gc3BlY2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBzZXF1 ZW50aWFsIHNjYW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3RpbWF0 ZXMgdGhhdCBtaWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEKcG9z c2libHktaW5jb3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBiZSB1 c2VmdWwgdG8KdXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQgYWZm ZWN0cyBzZWxlY3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5nLCB0 aGF0IGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxzLCBz ZWUgY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgb3IgdGhlIFNHTUwKZG9jdW1lbnRhdGlv bi4KCk5PVEU6IFRoZXJlIGFyZSBzdGlsbCBzb21lIGtub3duIHByb2JsZW1zIHdpdGggdGhpcyBj b2RlLCB3aGljaCBhcmUKY2FsbGVkIG91dCBieSBYWFguCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0 dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQtYnk6IEpha3ViIFdhcnRhayA8amFrdWIud2Fy dGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5t ZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1waW9uIDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNl ZGIuY29tPgpSZXZpZXdlZC1ieTogSGFpYm8gWWFuIDx0cmlzdGFuLnlpbUBnbWFpbC5jb20+ClJl dmlld2VkLWJ5OiBEaWFuIEZheSA8ZGlAbm1mYXkuY29tPgpSZXZpZXdlZC1ieTogQWpheSBQYWwg PGFqYXkucGFsLmtAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSm9obiBOYXlsb3IgPGpvaG5jbmF5 bG9ybHNAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdtb1ot SmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwuY29t Ci0tLQogY29udHJpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg MSArCiBjb250cmliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAx ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZSAgICAgICAgICAgICB8ICAgIDMg KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICA1MCAr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRSAgICAgICAgICAgICAgICAgfCAgMjYwICsr KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0ICAgIHwgIDM3MSAr KysKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dCAgICB8ICA1MDkg KysrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0IHwgIDMz OSArKysKIC4uLi9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0ICAgICAgICAgICAgICB8ICAg NjcgKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IHwgIDQy NiArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3ByZXBhcmVkLm91dCAgfCAg IDY3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgICAgICB8ICA3 NTcgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91dCAg fCAgMzc3ICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0ICAg IHwgIDE5MiArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCAgICAgICAgICAg IHwgICA3OSArCiAuLi4vcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgICAg fCAgIDQzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyAgICAgICB8 ICA1NjUgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJv bCB8ICAgIDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oICAgICAg IHwgICA2MCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgICAgICAgICAgICAg fCAgMzUxICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oICAgICAgICAgICAg IHwgIDE4NSArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jICAgICAg IHwgIDYzOSArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oICAg ICAgIHwgICAxOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jICAg ICAgfCAgNDc2ICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgg ICAgICB8ICAgNTIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYyAgICAgICAg ICAgIHwgIDYyOSArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaCAgICAg ICAgICAgIHwgIDEwNSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgICAg ICAgICAgfCAgNTcxICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0Lmgg ICAgICAgICAgfCAgIDIyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueSAg ICAgICAgICB8ICAzMDEgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5j ICAgICAgICAgfCAyMDU5ICsrKysrKysrKysrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfcGxhbm5lci5oICAgICAgICAgfCAgIDE3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9zY2FuLmMgICAgICAgICAgICB8ICAzMDYgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5oICAgICAgICAgICAgfCAgIDg1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9zY2FubmVyLmwgICAgICAgICB8ICAyOTcgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfdHJvdmUuYyAgICAgICAgICAgfCAgNDkyICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5oICAgICAgICAgICB8ICAxMTMgKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3dhbGtlci5jICAgICAgICAgIHwgMTAwNiArKysrKysrKwogY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3dhbGtlci5oICAgICAgICAgIHwgIDE0MSArKwogY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvZ2F0aGVyLnNxbCAgICAgICAgIHwgICA4NiArCiBjb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbCAgICAgfCAgMTQ1ICsrCiBjb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbCAgfCAgIDg0ICsKIC4uLi9wZ19wbGFuX2Fkdmlj ZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCAgICB8ICAgNDQgKwogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgIHwgICA5OSArCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9wcmVwYXJlZC5zcWwgICAgICAgfCAgIDM3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3NjYW4uc3FsICAgICAgICAgICB8ICAxOTUgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3NlbWlqb2luLnNxbCAgICAgICB8ICAxMTggKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc3ludGF4LnNxbCAgICAgICAgIHwgICA2OCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3QvMDAxX3JlZ3Jlc3MucGwgICAgICAgfCAgMTQ4ICsrCiBkb2Mvc3JjL3NnbWwvY29udHJpYi5z Z21sICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGRvYy9zcmMvc2dtbC9maWxlbGlzdC5z Z21sICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL3NyYy9zZ21sL3BncGxhbmFkdmlj ZS5zZ21sICAgICAgICAgICAgICAgIHwgIDk1MiArKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAzOCArCiA1MyBmaWxlcyBjaGFuZ2VkLCAx NDA1MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVB RE1FCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9n YXRoZXIub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9qb2luX29yZGVyLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9w cmVwYXJlZC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL3NjYW4ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9leHBlY3RlZC9zZW1pam9pbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmll ci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4u YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5z cWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0 cmF0ZWd5LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L2xvY2FsX2NvbGxlY3Rvci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvc2VtaWpvaW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFr ZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IDJmMGE4OGQzZjc3Li5kZDA0YzIwYWNkMiAx MDA2NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0z NCw2ICszNCw3IEBAIFNVQkRJUlMgPSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJCXBnX2xvZ2lj YWxpbnNwZWN0IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXAorCQlwZ19wbGFuX2FkdmljZSBcCiAJCXBn X3ByZXdhcm0JXAogCQlwZ19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKZGlmZiAt LWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGRl ZjEzMjU3Y2JlLi41YTc1MmVhYzM0NyAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAor KysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigncGdjcnlw dG8nKQogc3ViZGlyKCdwZ19mcmVlc3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2FsaW5zcGVj dCcpCiBzdWJkaXIoJ3BnX292ZXJleHBsYWluJykKK3N1YmRpcigncGdfcGxhbl9hZHZpY2UnKQog c3ViZGlyKCdwZ19wcmV3YXJtJykKIHN1YmRpcigncGdyb3dsb2NrcycpCiBzdWJkaXIoJ3BnX3N0 YXRfc3RhdGVtZW50cycpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRp Z25vcmUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE5YTE0MjUzMDE5Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3BncGFf cGFyc2VyLmgKKy9wZ3BhX3BhcnNlci5jCisvcGdwYV9zY2FubmVyLmMKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL01h a2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZDRjNTU5YWVk OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAg LTAsMCArMSw1MCBAQAorIyBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCisKK01PRFVM RV9iaWcgPSBwZ19wbGFuX2FkdmljZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJcGdfcGxh bl9hZHZpY2UubyBcCisJcGdwYV9hc3QubyBcCisJcGdwYV9jb2xsZWN0b3IubyBcCisJcGdwYV9p ZGVudGlmaWVyLm8gXAorCXBncGFfam9pbi5vIFwKKwlwZ3BhX291dHB1dC5vIFwKKwlwZ3BhX3Bh cnNlci5vIFwKKwlwZ3BhX3BsYW5uZXIubyBcCisJcGdwYV9zY2FuLm8gXAorCXBncGFfc2Nhbm5l ci5vIFwKKwlwZ3BhX3Ryb3ZlLm8gXAorCXBncGFfd2Fsa2VyLm8KKworRVhURU5TSU9OID0gcGdf cGxhbl9hZHZpY2UKK0RBVEEgPSBwZ19wbGFuX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9 ICJwZ19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuIgor CitSRUdSRVNTID0gZ2F0aGVyIGpvaW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNl IHNjYW4KK1RBUF9URVNUUyA9IDEKKworRVhUUkFfQ0xFQU4gPSBwZ3BhX3BhcnNlci5oIHBncGFf cGFyc2VyLmMgcGdwYV9zY2FubmVyLmMKKworIyByZXF1aXJlZCBmb3IgMDAxX3JlZ3Jlc3MucGwK K1JFR1JFU1NfU0hMSUI9JChhYnNfdG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jl c3MkKERMU1VGRklYKQorZXhwb3J0IFJFR1JFU1NfU0hMSUIKKworaWZkZWYgVVNFX1BHWFMKK1BH X0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMp CitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UK K3RvcF9idWlsZGRpciA9IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZp bGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5t aworZW5kaWYKKworIyBTZWUgbm90ZXMgaW4gc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGFi b3V0IHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzCitwZ3BhX3BhcnNlci5oOiBwZ3BhX3BhcnNlci5j CisJdG91Y2ggJEAKKworcGdwYV9wYXJzZXIuYzogQklTT05GTEFHUyArPSAtZAorCisjIEZvcmNl IHRoZXNlIGRlcGVuZGVuY2llcyB0byBiZSBrbm93biBldmVuIHdpdGhvdXQgZGVwZW5kZW5jeSBp bmZvIGJ1aWx0OgorcGdwYV9wYXJzZXIubyBwZ3BhX3NjYW5uZXIubzogcGdwYV9wYXJzZXIuaApk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MGI4ODhmZDgyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JF QURNRQpAQCAtMCwwICsxLDI2MCBAQAorY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKKwor UGxhbiBBZHZpY2UKKz09PT09PT09PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtaW5p LWxhbmd1YWdlIGZvciAicGxhbiBhZHZpY2UiIHRoYXQgYWxsb3dzIGZvcgorY29udHJvbCBvZiBj ZXJ0YWluIGtleSBwbGFubmVyIGRlY2lzaW9ucy4gR29hbHMgaW5jbHVkZSAoMSkgZW5mb3JjaW5n IHBsYW4KK3N0YWJpbGl0eSAobXkgcHJldmlvdXMgcGxhbiB3YXMgZ29vZCBhbmQgSSB3b3VsZCBs aWtlIHRvIGtlZXAgZ2V0dGluZyBhCitzaW1pbGFyIG9uZSkgYW5kICgyKSBhbGxvd2luZyB1c2Vy cyB0byBleHBlcmltZW50IHdpdGggcGxhbnMgb3RoZXIgdGhhbgordGhlIG9uZSBwcmVmZXJyZWQg YnkgdGhlIG9wdGltaXplci4gTm9uLWdvYWxzIGluY2x1ZGUgKDEpIGNvbnRyb2xsaW5nCitldmVy eSBwb3NzaWJsZSBwbGFubmVyIGRlY2lzaW9uIGFuZCAoMikgZm9yY2luZyBjb25zaWRlcmF0aW9u IG9mIHBsYW5zCit0aGF0IHRoZSBvcHRpbWl6ZXIgcmVqZWN0cyBmb3IgcmVhc29ucyBvdGhlciB0 aGFuIGNvc3QuIChUaGVyZSBpcyBzb21lCityb29tIGZvciBiaWtlc2hlZGRpbmcgYWJvdXQgd2hh dCBleGFjdGx5IHRoaXMgbm9uLWdvYWwgbWVhbnM6IHdoYXQgaWYKK3dlIHNraXAgcGF0aCBnZW5l cmF0aW9uIGVudGlyZWx5IGZvciBhIGNlcnRhaW4gY2FzZSBvbiB0aGUgdGhlb3J5IHRoYXQKK3dl IGtub3cgaXQgY2Fubm90IHdpbiBvbiBjb3N0PyBEb2VzIHRoYXQgY291bnQgYXMgYSBjb3N0LWJh c2VkIHJlamVjdGlvbgorZXZlbiB0aG91Z2ggbm8gY29zdCB3YXMgZXZlciBjb21wdXRlZD8pCisK K0dlbmVyYWxseSwgcGxhbiBhZHZpY2UgaXMgYSBzZXJpZXMgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0 ZWQgYWR2aWNlIGl0ZW1zLAorZWFjaCBvZiB3aGljaCBhcHBsaWVzIGFuIGFkdmljZSB0YWcgdG8g YSBsaXN0IG9mIGFkdmljZSB0YXJnZXRzLiBGb3IKK2V4YW1wbGUsICJTRVFfU0NBTihmb28pIEhB U0hfSk9JTihiYXJAc3MpIiBjb250YWlucyB0d28gaXRlbXMgb2YgYWR2aWNlLAordGhlIGZpcnN0 IG9mIHdoaWNoIGFwcGxpZXMgdGhlIFNFUV9TQ0FOIHRhZyB0byAiZm9vIiBhbmQgdGhlIHNlY29u ZCBvZgord2hpY2ggYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byAiYmFyQHNzIi4gSW4gdGhp cyBzaW1wbGUgZXhhbXBsZSwgZWFjaAordGFyZ2V0IGlkZW50aWZpZXMgYSBzaW5nbGUgcmVsYXRp b247IHNlZSAiUmVsYXRpb24gSWRlbnRpZmllcnMiLCBiZWxvdy4KK0FkdmljZSB0YWdzIGNhbiBh bHNvIGJlIGFwcGxpZWQgdG8gZ3JvdXBzIG9mIHJlbGF0aW9uczsgZm9yIGV4YW1wbGUsCisiSEFT SF9KT0lOKGJheiAoYmxldGNoIHF1dXgpKSIgYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byB0 aGUgc2luZ2xlCityZWxhdGlvbiBpZGVudGlmaWVyICJiYXoiIGFzIHdlbGwgYXMgdG8gdGhlIDIt aXRlbSBsaXN0IGNvbnRhaW5pbmcKKyJibGV0Y2giIGFuZCAicXV1eCIuCisKK0NyaXRpY2FsbHks IHRoaXMgbW9kdWxlIGtub3dzIGJvdGggaG93IHRvIGdlbmVyYXRlIHBsYW4gYWR2aWNlIGZyb20g YW4KK2FscmVhZHktZXhpc3RpbmcgcGxhbiwgYW5kIGFsc28gaG93IHRvIGVuZm9yY2UgaXQgZHVy aW5nIGZ1dHVyZSBwbGFubmluZworY3ljbGVzLiBFdmVyeXRoaW5nIGl0IGRvZXMgaXMgaW50ZW5k ZWQgdG8gYmUgInJvdW5kLXRyaXAgc2FmZSI6IGlmIHlvdQorZ2VuZXJhdGUgYWR2aWNlIGZyb20g YSBwbGFuIGFuZCB0aGVuIGZlZWQgdGhhdCBiYWNrIGludG8gYSBmdXR1cmUgcGxhbmluZworY3lj bGUsIGVhY2ggcGllY2Ugb2YgYWR2aWNlIHNob3VsZCBiZSBndWFyYW50ZWVkIHRvIGFwcGx5IHRv IHRoZSBleGFjdGx5IHRoZQorc2FtZSBwYXJ0IG9mIHRoZSBxdWVyeSBmcm9tIHdoaWNoIGl0IHdh cyBnZW5lcmF0ZWQgd2l0aG91dCBhbWJpZ3VpdHkgb3IKK2d1ZXNzd29yaywgYW5kIGl0IHNob3Vs ZCBzdWNjZXNmdWxseSBlbmZvcmNlIHRoZSBzYW1lIHBsYW5uaW5nIGRlY2lzaW9uIHRoYXQKK2xl ZCB0byBpdCBiZWluZyBnZW5lcmF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBOb3RlIHRoYXQgdGhl cmUgaXMgbm8KK2ludGVudGlvbiB0aGF0IHRoZXNlIGd1YXJhbnRlZXMgaG9sZCBpbiB0aGUgcHJl c2VuY2Ugb2YgaW50ZXJ2ZW5pbmcgRERMOworZS5nLiBpZiB5b3UgY2hhbmdlIHRoZSBwcm9wZXJ0 aWVzIG9mIGEgZnVuY3Rpb24gc28gdGhhdCBhIHN1YnF1ZXJ5IGlzIG5vCitsb25nZXIgaW5saW5l ZCwgb3IgaWYgeW91IGRyb3AgYW4gaW5kZXggbmFtZWQgaW4gdGhlIHBsYW4gYWR2aWNlLCB0aGUg YWR2aWNlCitpc24ndCBnb2luZyB0byB3b3JrIGFueSBtb3JlLiBUaGF0J3MgZXhwZWN0ZWQuCisK K1RoaXMgbW9kdWxlIGFpbXMgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gZm9sbG93IGFueSBwcm92 aWRlZCBhZHZpY2Ugd2l0aG91dAorcmVnYXJkIHRvIHdoZXRoZXIgaXQgaXMgYXBwZWFycyB0byBi ZSBnb29kIGFkdmljZSBvciBiYWQgYWR2aWNlLiAgSWYgdGhlCit1c2VyIHByb3ZpZGVzIGJhZCBh ZHZpY2UsIHdoZXRoZXIgZGVyaXZlZCBmcm9tIGEgcHJldmlvdXNseS1nZW5lcmF0ZWQgcGxhbgor b3IgbWFudWFsbHkgd3JpdHRlbiwgdGhleSBtYXkgZ2V0IGEgYmFkIHBsYW4uIFdlIHJlZ2FyZCB0 aGlzIGFzIHVzZXIgZXJyb3IsCitub3QgYSBkZWZlY3QgaW4gdGhpcyBtb2R1bGUuIEl0IHNlZW1z IGxpa2VseSB0aGF0IGFwcGx5aW5nIGFkdmljZQoranVkaWNpb3VzbHkgYW5kIG9ubHkgd2hlbiB0 cnVseSByZXF1aXJlZCB0byBhdm9pZCBwcm9ibGVtcyB3aWxsIGJlIGEgbW9yZQorc3VjY2Vzc2Z1 bCBzdHJhdGVneSB0aGFuIGFwcGx5aW5nIGl0IHdpdGggYSBicm9hZCBicnVzaCwgYnV0IHVzZXJz IGFyZSBmcmVlCit0byBleHBlcmltZW50IHdpdGggd2hhdGV2ZXIgc3RyYXRlZ2llcyB0aGV5IHRo aW5rIGJlc3QuCisKK1JlbGF0aW9uIElkZW50aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQor CitVbmlxdWVseSBpZGVudGlmeWluZyB0aGUgcGFydCBvZiBhIHF1ZXJ5IHRvIHdoaWNoIGEgY2Vy dGFpbiBwaWVjZSBvZgorYWR2aWNlIGFwcGxpZXMgaXMgaGFyZGVyIHRoYW4gaXQgc291bmRzLiBP dXIgYmFzaWMgYXBwcm9hY2ggaXMgdG8gdXNlCityZWxhdGlvbiBhbGlhc2VzIGFzIGEgc3RhcnRp bmcgcG9pbnQsIGFuZCB0aGVuIGRpc2FtYmlndWF0ZS4gVGhlcmUgYXJlCit0aHJlZSB3YXlzIHRo YXQgc2FtZSByZWxhdGlvbiBhbGlhcyBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXM6CisKKzEuIEl0 IGNhbiBhcHBlYXIgaW4gbW9yZSB0aGFuIG9uZSBzdWJxdWVyeS4KKworMi4gSXQgY2FuIGFwcGVh ciBtb3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZSBzdWJxdWVyeSwKKyAgIGUuZy4gKGZvbyBKT0lO IGJhcikgeCBKT0lOIGZvby4KKworMy4gVGhlIHRhYmxlIGNhbiBiZSBwYXJ0aXRpb25lZC4KKwor QW55IGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHku ICBUaGVyZWZvcmUsIG91cgorZ2VuZXJhbCBzeW50YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmll ciBpczoKKworYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBh cnRpdGlvbl9uYW1lQHBsYW5fbmFtZQorCitBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSBh bGlhc19uYW1lIGFyZSBvcHRpb25hbCBhbmQgaW5jbHVkZWQgb25seQord2hlbiByZXF1aXJlZC4g V2hlbiBhIGNvbXBvbmVudCBpcyBvbWl0dGVkLCB0aGUgYXNzb2NpYXRlZCBwdW5jdHVhdGlvbgor bXVzdCBhbHNvIGJlIG9taXR0ZWQuIE9jY3VycmVuY2UgbnVtYmVycyBhcmUgY291bnRlZCBpZ25v cmluZyBjaGlsZHJlbiBvZgorcGFydGl0aW9uZWQgdGFibGVzLiAgV2hlbiB0aGUgZ2VuZXJhdGVk IG9jY3VycmVuY2UgbnVtYmVyIGlzIDEsIHdlIG9taXQKK3RoZSBvY2N1cnJlbmNlIG51bWJlci4g VGhlIHBhcnRpdGlvbiBzY2hlbWEgYW5kIHBhcnRpdGlvbiBuYW1lIGFyZSBpbmNsdWRlZAorb25s eSBmb3IgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQgdGFibGVzLiBJbiBnZW5lcmF0ZWQgYWR2aWNl LCB0aGUKK3BhcnRpdGlvbl9zY2hlbWEgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW5ldmVyIHRoZXJl IGlzIGEgcGFydGl0aW9uX25hbWUsCitidXQgdXNlci13cml0dGVuIGFkdmljZSBtYXkgbWVudGlv biB0aGUgbmFtZSBhbmQgb21pdCB0aGUgc2NoZW1hLiBUaGUKK3BsYW5fbmFtZSBpcyBvbWl0dGVk IGZvciB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLgorCitTY2FuIEFkdmljZQorPT09PT09PT09 PT0KKworRm9yIG1hbnkgdHlwZXMgb2Ygc2Nhbiwgbm8gYWR2aWNlIGlzIGdlbmVyYXRlZCBvciBw b3NzaWJsZTsgZm9yIGluc3RhbmNlLAorYSBzdWJxdWVyeSBpcyBhbHdheXMgc2Nhbm5lZCB1c2lu ZyBhIHN1YnF1ZXJ5IHNjYW4uIFdoaWxlIHRoYXQgc2NhbiBtYXkgYmUKK2VsaWRlZCB2aWEgc2V0 cmVmcyBwcm9jZXNzaW5nLCB0aGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQgb25seSBv bmUKK2Jhc2ljIGFwcHJvYWNoIGV4aXN0cy4gSGVuY2UsIHNjYW4gYWR2aWNlIGFwcGxpZXMgbW9z dGx5IHRvIHJlbGF0aW9ucywgd2hpY2gKK2NhbiBiZSBzY2FubmVkIGluIG11bHRpcGxlIHdheXMu CisKK1dlIHRlbmQgdG8gdGhpbmsgb2YgYSBzY2FuIGFzIHRhcmdldGluZyBhIHNpbmdsZSByZWxh dGlvbiwgYW5kIHRoYXQncworbm9ybWFsbHkgdGhlIGNhc2UsIGJ1dCBpdCBkb2Vzbid0IGhhdmUg dG8gYmUuIEZvciBpbnN0YW5jZSwgaWYgYSBqb2luIGlzCitwcm92ZW4gZW1wdHksIHRoZSB3aG9s ZSB0aGluZyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBSZXN1bHQgbm9kZQord2hpY2gs IGluIGVmZmVjdCwgaXMgYSBkZWdlbmVyYXRlIHNjYW4gb2YgZXZlcnkgcmVsYXRpb24gaW4gdGhl IGNvbGxhcHNlZAorcG9ydGlvbiBvZiB0aGUgam9pbiB0cmVlLiBTaW1pbGFybHksIGl0J3MgcG9z c2libGUgdG8gaW5qZWN0IGEgY3VzdG9tIHNjYW4KK2luIHN1Y2ggYSB3YXkgdGhhdCBpdCByZXBs YWNlcyBhbiBlbnRpcmUgam9pbi4gSWYgd2UgZXZlciBlbWl0IGFkdmljZQorZm9yIHRoZXNlIGNh c2VzLCBpdCB3b3VsZCB0YXJnZXQgc2V0cyBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBzdXJyb3Vu ZGVkCitieSBwYXJlbnRoZXNlcywgZS5nLiBTT01FX1NPUlRfT0ZfU0NBTihmb28gKGJhciBiYXop KSB3b3VsZCBtZWFuIHRoYXQgdGhlCit0aGUgZ2l2ZW4gc2NhbiB0eXBlIHdvdWxkIGJlIHVzZWQg Zm9yIGZvbyBhcyBhIHNpbmdsZSByZWxhdGlvbiBhbmQgYWxzbyB0aGUKK2NvbWJpbmF0aW9uIG9m IGJhciBhbmQgYmF6IGFzIGEgam9pbiBwcm9kdWN0LiBXZSBoYXZlIG5vIHN1Y2ggY2FzZXMgYXQK K3ByZXNlbnQuCisKK0ZvciBpbmRleCBhbmQgaW5kZXgtb25seSBzY2FucywgYm90aCB0aGUgcmVs YXRpb24gYmVpbmcgc2Nhbm5lZCBhbmQgdGhlCitpbmRleCBvciBpbmRleGVzIGJlaW5nIHVzZWQg bXVzdCBiZSBzcGVjaWZpZWQuIEZvciBleGFtcGxlLCBJTkRFWF9TQ0FOKGZvbworZm9vX2FfaWR4 IGJhciBiYXJfYl9pZHgpIGluZGljYXRlcyB0aGF0IGFuIGluZGV4IHNjYW4gKG5vdCBhbiBpbmRl eC1vbmx5CitzY2FuKSBzaG91bGQgYmUgdXNlZCBvbiBmb29fYV9pZHggd2hlbiBzY2FubmluZyBm b28sIGFuZCB0aGF0IGFuIGluZGV4IHNjYW4KK3Nob3VsZCBiZSB1c2VkIG9uIGJhcl9iX2lkeCB3 aGVuIHNjYW5uaW5nIGJhci4KKworQml0bWFwIGhlYXAgc2NhbnMgY3VycmVudGx5IGRvIG5vdCBh bGxvdyBmb3IgYW4gaW5kZXggc3BlY2lmaWNhdGlvbjoKK0JJVE1BUF9IRUFQX1NDQU4oZm9vIGJh cikgc2ltcGx5IG1lYW5zIHRoYXQgZWFjaCBvZiBmb28gYW5kIGJhciBzaG91bGQgdXNlCitzb21l IHNvcnQgb2YgYml0bWFwIGhlYXAgc2Nhbi4KKworSm9pbiBPcmRlciBBZHZpY2UKKz09PT09PT09 PT09PT09PT09CisKK1RoZSBKT0lOX09SREVSIHRhZyBzcGVjaWZpZXMgdGhlIG9yZGVyIGluIHdo aWNoIHNldmVyYWwgdGFibGVzIHRoYXQgYXJlCitwYXJ0IG9mIHRoZSBzYW1lIGpvaW4gcHJvYmxl bSBzaG91bGQgYmUgam9pbmVkLiBFYWNoIHN1YnF1ZXJ5IChleGNlcHQgZm9yCit0aG9zZSB0aGF0 IGFyZSBpbmxpbmVkKSBpcyBhIHNlcGFyYXRlIGpvaW4gcHJvYmxlbS4gV2l0aGluIGEgc3VicXVl cnksCitwYXJ0aXRpb253aXNlIGpvaW5zIGNhbiBjcmVhdGUgYWRkaXRpb25hbCwgc2VwYXJhdGUg am9pbiBwcm9ibGVtcy4gSGVuY2UsCitxdWVyaWVzIGludm9sdmluZyBwYXJ0aXRpb253aXNlIGpv aW5zIG1heSB1c2UgSk9JTl9PUkRFUigpIG1hbnkgdGltZXMuCisKK1dlIHRha2UgdGhlIGNhbm9u aWNhbCBqb2luIHN0cnVjdHVyZSB0byBiZSBhbiBvdXRlci1kZWVwIHRyZWUsIHNvCitKT0lOX09S REVSKHQxIHQyIHQzKSBzYXlzIHRoYXQgdDEgaXMgdGhlIGRyaXZpbmcgdGFibGUgYW5kIHNob3Vs ZCBiZSBqb2luZWQKK2ZpcnN0IHRvIHQyIGFuZCB0aGVuIHRvIHQzLiBJZiB0aGUgam9pbiBwcm9i bGVtIGludm9sdmVzIGFkZGl0aW9uYWwgdGFibGVzLAordGhleSBjYW4gYmUgam9pbmVkIGluIGFu eSBvcmRlciBhZnRlciB0aGUgam9pbiBiZXR3ZWVuIHQxLCB0MiwgYW5kIHQzIGhhcworYmVlbiBj b25zdHJ1Y3R1cmVkLiBHZW5lcmF0ZWQgam9pbiBhZHZpY2UgYWx3YXlzIG1lbnRpb25zIGFsbCB0 YWJsZXMKK2luIHRoZSBqb2luIHByb2JsZW0sIGJ1dCBtYW51YWxseSB3cml0dGVuIGpvaW4gYWR2 aWNlIG5lZWQgbm90IGRvIHNvLgorCitGb3IgdHJlZXMgd2hpY2ggYXJlIG5vdCBvdXRlci1kZWVw LCBwYXJlbnRoZXNlcyBjYW4gYmUgdXNlZC4gRm9yIGV4YW1wbGUsCitKT0lOX09SREVSKHQxICh0 MiB0MykpIHNheXMgdGhhdCB0aGUgdG9wLWxldmVsIGpvaW4gc2hvdWxkIGhhdmUgdDEgb24gdGhl CitvdXRlciBzaWRlIGFuZCBhIGpvaW4gYmV0d2VlbiB0MiBhbmQgdDMgb24gdGhlIGlubmVyIHNp ZGUuIFRoYXQgam9pbiBzaG91bGQKK2JlIGNvbnN0cnVjdGVkIHNvIHRoYXQgdDIgaXMgb24gdGhl IG91dGVyIHNpZGUgYW5kIHQzIGlzIG9uIHRoZSBpbm5lciBzaWRlLgorCitJbiBzb21lIGNhc2Vz LCBpdCdzIG5vdCBwb3NzaWJsZSB0byBmdWxseSBzcGVjaWZ5IHRoZSBqb2luIG9yZGVyIGluIHRo aXMgd2F5LgorRm9yIGV4YW1wbGUsIGlmIHQyIGFuZCB0MyBhcmUgYmVpbmcgc2Nhbm5lZCBieSBh IHNpbmdsZSBjdXN0b20gc2NhbiBvciBmb3JlaWduCitzY2FuLCBvciBpZiBhIHBhcnRpdGlvbndp c2Ugam9pbiBpcyBiZWluZyBwZXJmb3JtZWQgYmV0d2VlbiB0aG9zZSB0YWJsZXMsIHRoZW4KK2l0 J3MgaW1wb3NzaWJsZSB0byBzYXkgdGhhdCB0MiBpcyB0aGUgb3V0ZXIgdGFibGUgYW5kIHQzIGlz IHRoZSBpbm5lciB0YWJsZSwKK29yIHRoZSBvdGhlciB3YXkgYXJvdW5kOyBpdCdzIGp1c3QgdW5k ZWZpbmVkLiBJbiBzdWNoIGNhc2VzLCB3ZSBnZW5lcmF0ZQoram9pbiBhZHZpY2UgdGhhdCB1c2Vz IGN1cmx5IGJyYWNlcywgaW50ZW5kaW5nIHRvIGluZGljYXRlIGEgbGFjayBvZiBvcmRlcmluZzoK K0pPSU5fT1JERVIodDEge3QyIHQzfSkgc2F5cyB0aGF0IHRoZSB1cHBlcm1vc3Qgam9pbiBzaG91 bGQgaGF2ZSB0MSBvbiB0aGUgb3V0ZXIKK3NpZGUgYW5kIHNvbWUga2luZCBvZiBqb2luIGJldHdl ZW4gdDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLCBidXQgd2l0aG91dAorc2F5aW5nIGhvdyB0 aGF0IGpvaW4gbXVzdCBiZSBwZXJmb3JtZWQgb3IgYW55dGhpbmcgYWJvdXQgd2hpY2ggcmVsYXRp b24gc2hvdWxkCithcHBlYXIgb24gd2hpY2ggc2lkZSBvZiB0aGUgam9pbiwgb3IgZXZlbiB3aGV0 aGVyIHRoaXMga2luZCBvZiBqb2luIGhhcyBzaWRlcy4KKworSm9pbiBTdHJhdGVneSBBZHZpY2UK Kz09PT09PT09PT09PT09PT09PT09CisKK1RhZ3Mgc3VjaCBhcyBORVNURURfTE9PUF9QTEFJTiBz cGVjaWZ5IHRoZSBtZXRob2QgdGhhdCBzaG91bGQgYmUgdXNlZCB0bworcGVyZm9ybSBhIGNlcnRh aW4gam9pbi4gTW9yZSBzcGVjaWZpY2FsbHksIE5FU1RFRF9MT09QX1BMQUlOKHggKHkgeikpIHNh eXMKK3RoYXQgdGhlIHBsYW4gc2hvdWxkIHB1dCB0aGUgcmVsYXRpb24gd2hvc2UgaWRlbnRpZmll ciBpcyAieCIgb24gdGhlIGlubmVyCitzaWRlIG9mIGEgcGxhaW4gbmVzdGVkIGxvb3AgKG9uZSB3 aXRob3V0IG1hdGVyaWFsaXphdGlvbiBvciBtZW1vaXphdGlvbikKK2FuZCB0aGF0IGl0IHNob3Vs ZCBhbHNvIHB1dCBhIGpvaW4gYmV0d2VlbiB0aGUgcmVsYXRpb24gd2hvc2UgaWRlbnRpZmllciBp cworInkiIGFuZCB0aGUgcmVsYXRpb24gd2hvc2UgaWRlbnRpZmllciBpcyAieiIgb24gdGhlIGlu bmVyIHNpZGUgb2YgYSBuZXN0ZWQKK2xvb3AuIEhlbmNlLCBmb3IgYW4gTi10YWJsZSBqb2luIHBy b2JsZW0sIHRoZXJlIHdpbGwgYmUgTi0xIHBpZWNlcyBvZiBqb2luCitzdHJhdGVneSBhZHZpY2U7 IG5vIGpvaW4gc3RyYXRlZ3kgYWR2aWNlIGlzIHJlcXVpcmVkIGZvciB0aGUgb3V0ZXJtb3N0Cit0 YWJsZSBpbiB0aGUgam9pbiBwcm9ibGVtLgorCitDb25zaWRlcmluZyB0aGF0IHdlIGhhdmUgYm90 aCBqb2luIG9yZGVyIGFkdmljZSBhbmQgam9pbiBzdHJhdGVneSBhZHZpY2UsCitpdCBtaWdodCBz ZWVtIG5hdHVyYWwgdG8gc2F5IHRoYXQgTkVTVEVEX0xPT1BfUExBSU4oeCkgc2hvdWxkIGJlIHJl ZGVmaW5lZAordG8gbWVhbiB0aGF0IHggc2hvdWxkIGFwcGVhciBieSBpdHNlbGYgb24gb25lIHNp ZGUgb3IgdGhlIG90aGVyIG9mIGEgbmVzdGVkCitsb29wLCByYXRoZXIgdGhhbiBzcGVjaWZpY2Fs bHkgb24gdGhlIGlubmVyIHNpZGUsIGJ1dCB0aGlzIGRlZmluaXRpb24gYXBwZWFycwordXNlbGVz cyBpbiBwcmFjdGljZS4gSXQgZ2l2ZXMgdGhlIHBsYW5uZXIgdG9vIG11Y2ggZnJlZWRvbSB0byBk byB0aGluZ3MgdGhhdAorYmVhciBsaXR0bGUgcmVzZW1ibGFuY2UgdG8gd2hhdCB0aGUgdXNlciBw cm9iYWJseSBoYWQgaW4gbWluZC4gVGhpcyBtYWtlcworb25seSBhIGxpbWl0ZWQgYW1vdW50IG9m IHByYWN0aWNhbCBkaWZmZXJlbmNlIGluIHRoZSBjYXNlIG9mIGEgbWVyZ2Ugam9pbiBvcgordW5w YXJhbWV0ZXJpemVkIG5lc3RlZCBsb29wLCBidXQgZm9yIGEgcGFyYW1ldGVyaXplZCBuZXN0ZWQg bG9vcCBvciBhIGhhc2gKK2pvaW4sIHRoZSB0d28gc2lkZXMgYXJlIHRyZWF0ZWQgdmVyeSBkaWZm ZXJlbnRseSBhbmQgc2F5aW5nIHRoYXQgYSBjZXJ0YWluCityZWxhdGlvbiBzaG91bGQgYmUgaW52 b2x2ZWQgaW4gb25lIG9mIHRob3NlIG9wZXJhdGlvbnMgd2l0aG91dCBzYXlpbmcgd2hpY2gKK3Jv bGUgaXQgc2hvdWxkIHRha2UgaXNuJ3Qgc2F5aW5nIG11Y2guCisKK1RoaXMgY2hvaWNlIG9mIGRl ZmluaXRpb24gaW1wbGllcyB0aGF0IGpvaW4gc3RyYXRlZ3kgYWR2aWNlIGFsc28gaW1wb3NlcyBz b21lCitqb2luIG9yZGVyIGNvbnN0cmFpbnRzLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBqb2luIGJl dHdlZW4gZm9vIGFuZCBiYXIsCitIQVNIX0pPSU4oYmFyKSBpbXBsaWVzIHRoYXQgZm9vIGlzIHRo ZSBkcml2aW5nIHRhYmxlLiBPdGhlcndpc2UsIGl0IHdvdWxkCitiZSBpbXBvc3NpYmxlIHRvIHB1 dCBiYXIgYmVuZWF0aCB0aGUgaW5uZXIgc2lkZSBvZiBhIEhhc2ggSm9pbi4KKworTm90ZSB0aGF0 LCBnaXZlbiB0aGlzIGRlZmluaXRpb24sIGl0J3MgcmVhc29uYWJsZSB0byBjb25zaWRlciBkZWxl dGluZyB0aGUKK2pvaW4gb3JkZXIgYWR2aWNlIGJ1dCBhcHBseWluZyB0aGUgam9pbiBzdHJhdGVn eSBhZHZpY2UuIEZvciBleGFtcGxlLAorY29uc2lkZXIgYSBzdGFyIHNjaGVtYSB3aXRoIHRhYmxl cyBmYWN0LCBkaW0xLCBkaW0yLCBkaW0zLCBkaW00LCBhbmQgZGltNS4KK1RoZSBhdXRvbWF0aWNh bGx5IGdlbmVyYXRlZCBhZHZpY2UgbWlnaHQgc3BlY2lmeSBKT0lOX09SREVSKGZhY3QgZGltMSBk aW0zCitkaW00IGRpbTIgZGltNSkgSEFTSF9KT0lOKGRpbTIgZGltNCkgTkVTVEVEX0xPT1BfUExB SU4oZGltMSBkaW0zIGRpbTUpLgorRGVsZXRpbmcgdGhlIEpPSU5fT1JERVIgYWR2aWNlIGFsbG93 cyB0aGUgcGxhbm5lciB0byByZW9yZGVyIHRoZSBqb2lucworaG93ZXZlciBpdCBsaWtlcyB3aGls ZSBzdGlsbCBmb3JjaW5nIHRoZSBzYW1lIGNob2ljZSBvZiBqb2luIG1ldGhvZC4gVGhpcworc2Vl bXMgcG90ZW50aWFsbHkgdXNlZnVsLCBhbmQgaXMgb25lIHJlYXNvbiB3aHkgYSB1bmlmaWVkIHN5 bnRheCB0aGF0IGNvbnRyb2xzCitib3RoIGpvaW4gb3JkZXIgYW5kIGpvaW4gbWV0aG9kIGluIGEg c2luZ2xlIGxvY3V0aW9uIHdhcyBub3QgY2hvc2VuLgorCitBZHZpY2UgQ29tcGxldGVuZXNzCis9 PT09PT09PT09PT09PT09PT09CisKK0FuIGVzc2VudGlhbCBndWlkaW5nIHByaW5jaXBsZSBpcyB0 aGF0IG5vIGluZmVyZW5jZSBtYXkgbWFkZSBvbiB0aGUgYmFzaXMKK29mIHRoZSBhYnNlbmNlIG9m IGFkdmljZS4gVGhlIHVzZXIgaXMgZW50aXRsZWQgdG8gcmVtb3ZlIGFueSBwb3J0aW9uIG9mIHRo ZQorZ2VuZXJhdGVkIGFkdmljZSB3aGljaCB0aGV5IGRlZW0gdW5zdWl0YWJsZSBvciBjb3VudGVy cHJvZHVjdGl2ZSBhbmQgdGhlCityZXN1bHQgc2hvdWxkIG9ubHkgYmUgdG8gaW5jcmVhc2UgdGhl IGZsZXhpYmlsaXR5IGFmZm9yZGVkIHRvIHRoZSBwbGFubmVyLgorVGhpcyBtZWFucyB0aGF0IGlm IGFkdmljZSBjYW4gc2F5IHRoYXQgYSBjZXJ0YWluIG9wdGltaXphdGlvbiBvciB0ZWNobmlxdWUK K3Nob3VsZCBiZSB1c2VkLCBpdCBzaG91bGQgYWxzbyBiZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBv cHRpbWl6YXRpb24gb3IKK3RlY2huaXF1ZSBzaG91bGQgbm90IGJlIHVzZWQuIFdlIHNob3VsZCBu ZXZlciBhc3N1bWUgdGhhdCB0aGUgYWJzZW5jZSBvZiBhbgoraW5zdHJ1Y3Rpb24gdG8gZG8gYSBj ZXJ0YWluIHRoaW5nIG1lYW5zIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSBkb25lOyBhbGwKK2luc3Ry dWN0aW9ucyBtdXN0IGJlIGV4cGxpY2l0LgorCitTZW1pam9pbiBVbmlxdWVuZXNzCis9PT09PT09 PT09PT09PT09PT09CisKK0ZhY2VkIHdpdGggYSBzZW1pam9pbiwgdGhlIHBsYW5uZXIgY29uc2lk ZXJzIGJvdGggYSBkaXJlY3QgaW1wbGVtZW50YXRpb24KK2FuZCBhIHBsYW4gd2hlcmUgdGhlIG9u ZSBzaWRlIGlzIG1hZGUgdW5pcXVlIGFuZCB0aGVuIGFuIGlubmVyIGpvaW4gaXMKK3BlcmZvcm1l ZC4gV2UgZW1pdCBTRU1JSk9JTl9VTklRVUUoKSBhZHZpY2Ugd2hlbiB0aGlzIHRyYW5zZm9ybWF0 aW9uIG9jY3VycworYW5kIFNFTUlKT0lOX05PTl9VTklRVUUoKSBhZHZpY2Ugd2hlbiBpdCBkb2Vz bid0LiBUaGVzZSBpdGVtcyB3b3JrIGxpa2UKK2pvaW4gc3RyYXRlZ3kgYWR2aWNlOiB0aGUgaW5u ZXIgc2lkZSBvZiB0aGUgcmVsZXZhbnQgam9pbiBpcyBuYW1lZCwgYW5kIHRoZQorY2hvc2VuIGpv aW4gb3JkZXIgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGFkdmljZSBoYXZpbmcgc29tZSBl ZmZlY3QuCisKK1BhcnRpdGlvbndpc2UKKz09PT09PT09PT09PT0KKworUEFSVElUSU9OV0lTRSgp IGFkdmlzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGJvdGggdGhvc2UgcGFydGl0aW9ud2lzZSBq b2lucword2hpY2ggc2hvdWxkIGJlIHBlcmZvcm1lZCBhbmQgdGhvc2Ugd2hpY2ggc2hvdWxkIG5v dCBiZSBwZXJmb3JtZWQ7IHRoZSBpZGVhCitpcyB0aGF0IGVhY2ggYXJndW1lbnQgdG8gUEFSVElU SU9OV0lTRSBzcGVjaWZpZXMgYSBzZXQgb2YgcmVsYXRpb25zIHRoYXQKK3Nob3VsZCBiZSBzY2Fu bmVkIHBhcnRpdGlvbndpc2UgYWZ0ZXIgYmVpbmcgam9pbmVkIHRvIGVhY2ggb3RoZXIgYW5kIG5v dGhpbmcKK2Vsc2UuIEhlbmNlLCBmb3IgZXhhbXBsZSwgUEFSVElUSU9OV0lTRSgodDEgdDIpIHQz KSBzcGVjaWZpZXMgdGhhdCB0aGUKK3F1ZXJ5IHNob3VsZCBjb250YWluIGEgcGFydGl0aW9ud2lz ZSBqb2luIGJldHdlZW4gdDEgYW5kIHQyIGFuZCB0aGF0IHQzCitzaG91bGQgbm90IGJlIHBhcnQg b2YgYW55IHBhcnRpdGlvbndpc2Ugam9pbi4gSWYgdGhlcmUgYXJlIG5vIG90aGVyIHJlbHMKK2lu IHRoZSBxdWVyeSwgc3BlY2lmeWluZyBqdXN0IFBBUlRJVElPTldJU0UoKHQxIHQyKSkgd291bGQg aGF2ZSB0aGUgc2FtZQorZWZmZWN0LCBzaW5jZSB0aGVyZSB3b3VsZCBiZSBubyBvdGhlciByZWxz IHRvIHdoaWNoIHQzIGNvdWxkIGJlIGpvaW5lZCBpbgorYSBwYXJ0aXRpb253aXNlIGZhc2hpb24u CisKK1BhcmFsbGVsIFF1ZXJ5IChHYXRoZXIsIGV0Yy4pCis9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorCitFYWNoIGFyZ3VtZW50IHRvIEdBVEhFUigpIG9yIEdBVEhFUl9NRVJHRSgpIGlz IGEgc2luZ2xlIHJlbGF0aW9uIG9yIGFuCitleGFjdCBzZXQgb2YgcmVsYXRpb25zIG9uIHRvcCBv ZiB3aGljaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwKK3Jlc3BlY3RpdmVseSwgc2hv dWxkIGJlIHBsYWNlZC4gRWFjaCBhcmd1bWVudCB0byBOT19HQVRIRVIoKSBpcyBhIHNpbmdsZQor cmVsYXRpb24gdGhhdCBzaG91bGQgbm90IGFwcGVhciBiZW5lYXRoIGFueSBHYXRoZXIgb3IgR2F0 aGVyIE1lcmdlIG5vZGU7Cit0aGF0IGlzLCBwYXJhbGxlbGlzbSBzaG91bGQgbm90IGJlIHVzZWQu CisKK0ltcGxpY2l0IEpvaW4gT3JkZXIgQ29uc3RyYWludHMKKz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKworV2hlbiBKT0lOX09SREVSKCkgYWR2aWNlIGlzIG5vdCBwcm92aWRlZCBm b3IgYSBwYXJ0aWN1bGFyIGpvaW4gcHJvYmxlbSwKK290aGVyIHBpZWNlcyBvZiBhZHZpY2UgbWF5 IHN0aWxsIGluY2lkZW50YWxseSBjb25zdHJhaW50IHRoZSBqb2luIG9yZGVyLgorRm9yIGV4YW1w bGUsIGEgdXNlciB3aG8gc3BlY2lmaWVzIEhBU0hfSk9JTigoZm9vIGJhcikpIGlzIGV4cGxpY2l0 bHkgc2F5aW5nCit0aGF0IHRoZXJlIHNob3VsZCBiZSBhIGhhc2ggam9pbiB3aXRoIGV4YWN0bHkg Zm9vIGFuZCBiYXIgb24gdGhlIG91dGVyCitzaWRlIG9mIGl0LCBidXQgdGhhdCBhbHNvIGltcGxp ZXMgdGhhdCBmb28gYW5kIGJhciBtdXN0IGJlIGpvaW5lZCB0bworZWFjaCBvdGhlciBiZWZvcmUg ZWl0aGVyIG9mIHRoZW0gaXMgam9pbmVkIHRvIGFueXRoaW5nIGVsc2UuIE90aGVyd2lzZSwKK3Ro ZSBqb2luIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG8gY29uc3RyYWludCB3b24ndCBhY3R1YWxs eSBvY2N1ciBpbiB0aGUKK3F1ZXJ5LCB3aGljaCBlbmRzIHVwIGxvb2tpbmcgbGlrZSB0aGUgc3lz dGVtIGhhcyBqdXN0IGRlY2lkZWQgdG8gaWdub3JlCit0aGUgYWR2aWNlIGFsdG9nZXRoZXIuCisK K0Z1dHVyZSBXb3JrCis9PT09PT09PT09PQorCitXZSBkb24ndCBoYW5kbGUgY2hvaWNlIG9mIGFn Z3JlZ2F0aW9uOiBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gZm9yY2UKK3NvcnRlZCBv ciBncm91cGVkIGFnZ3JlZ2F0aW9uLiBJJ20gZ3Vlc3NpbmcgdGhpcyBjYW4gYmUgbGVmdCB0byBm dXR1cmUgd29yay4KKworTW9yZSBzZXJpb3VzbHksIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJv dXQgZWFnZXIgYWdncmVnYXRpb24sIHdoaWNoIGNvdWxkCitoYXZlIGEgbGFyZ2UgaW1wYWN0IG9u IHRoZSBzaGFwZSBvZiB0aGUgcGxhbiB0cmVlLiBYWFg6IFRoaXMgbmVlZHMgc29tZSBzdHVkeQor dG8gZGV0ZXJtaW5lIGhvdyBsYXJnZSBhIHByb2JsZW0gaXQgaXMsIGFuZCBtaWdodCBuZWVkIHRv IGJlIGZpeGVkIHNvb25lcgorcmF0aGVyIHRoYW4gbGF0ZXIuCisKK1dlIGRvbid0IG9mZmVyIGFu eSBjb250cm9sIG92ZXIgZXN0aW1hdGVzLCBvbmx5IG91dGNvbWVzLiBJdCBzZWVtcyBsaWtlIGEK K2dvb2QgaWRlYSB0byBpbmNvcnBvcmF0ZSB0aGF0IGFiaWxpdHkgYXQgc29tZSBmdXR1cmUgcG9p bnQsIGFzIHBnX2hpbnRfcGxhbgorZG9lcy4gSG93ZXZlciwgc2luY2UgcHJpbWFyeSBnb2FsIG9m IHRoZSBpbml0aWFsIGRldmVsb3BtZW50IHdvcmsgaXMgdG8gYmUKK2FibGUgdG8gaW5kdWNlIHRo ZSBwbGFubmVyIHRvIHJlY3JlYXRlIGEgZGVzaXJlZCBwbGFuIHRoYXQgd29ya2VkIHdlbGwgaW4K K3RoZSBwYXN0LCB0aGlzIGhhcyBub3QgYmVlbiBpbmNsdWRlZCBpbiB0aGUgaW5pdGlhbCBkZXZl bG9wbWVudCBlZmZvcnQuCisKK1hYWCBOZWVkIHRvIGludmVzdGlnYXRlIHdoZXRoZXIgYW5kIGhv dyB3ZWxsIHN1cHBseWluZyBhZHZpY2Ugd29ya3Mgd2l0aCBHRVFPCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjBjYzBkZWRmODU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0CkBAIC0wLDAgKzEsMzcxIEBACitMT0FEICdwZ19w bGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitT RVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7 CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVidWdfcGFyYWxs ZWxfcXVlcnkgPSBvZmY7CitDUkVBVEUgVEFCTEUgZ3RfZGltIChpZCBzZXJpYWwgcHJpbWFyeSBr ZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIGd0X2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9kaW07CitDUkVBVEUgVEFCTEUgZ3Rf ZmFjdCAoCisJaWQgaW50IG5vdCBudWxsLAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVy ZW5jZXMgZ3RfZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gZ3RfZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZmFjdDsKKy0tIEJ5IGRlZmF1bHQs IHdlIGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2ggam9pbi4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9J TiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVy Z2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5 OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0g ZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9K T0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTQgcm93 cykKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0 b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRo ZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4g IFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVs IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQor ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FU SEVSX01FUkdFKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAg IEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAg LT4gIEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgUGFy YWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQu aWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisg ICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAg R0FUSEVSKChmIGQpKQorKDE2IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGEgc2VwYXJhdGUg R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVsYXRpb24uCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYgZCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2Zh Y3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgor ICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAg ICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQ bGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGQu aWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGYpIC8qIG1hdGNoZWQgKi8KKyAg IEdBVEhFUl9NRVJHRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihm IGQpCisgICBHQVRIRVJfTUVSR0UoZiBkKQorKDIwIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0g ZC5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAg IC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAg ICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKGYpIC8qIG1h dGNoZWQgKi8KKyAgIEdBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFf U0NBTihmIGQpCisgICBHQVRIRVIoZiBkKQorKDIwIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChkIGQvZC5kKSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGlt X2lkID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5l ZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9p ZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIEdBVEhFUigoZCBkL2QuZCkpIC8qIHBhcnRpYWxseSBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9K T0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9k aW1fcGtleSkKKyAgIEdBVEhFUl9NRVJHRShmKQorICAgTk9fR0FUSEVSKGQpCisoMTcgcm93cykK KworQ09NTUlUOworLS0gRm9yY2UgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9uIG9uZSByZWxh dGlvbiBidXQgbm8gcGFyYWxsZWxpc20gb24gb3RoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYpIG5vX2dhdGhlcihkKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpP SU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJn ZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAg V29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29y dCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24g Z3RfZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0g ZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGYpIC8qIG1hdGNoZWQg Ki8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NB TihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIEdBVEhFUl9NRVJH RShmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAo Zi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9p ZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEdhdGhlciBNZXJn ZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEg U2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdF KGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlO KGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoZCkKKyAgIE5PX0dBVEhFUihm KQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVy KGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9S REVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyAgIC0+ICBTb3J0Cisg ICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAg ICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNl cSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKGYp IC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYp CisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAg IEdBVEhFUihmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAo Zi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9p ZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBX b3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBv biBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKGQpIC8qIG1hdGNo ZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFf U0NBTihmIGQpCisgICBHQVRIRVIoZCkKKyAgIE5PX0dBVEhFUihmKQorKDE5IHJvd3MpCisKK0NP TU1JVDsKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgdXNlIGF0IGFsbC4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdub19nYXRoZXIoZiBkKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFj dCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1l cmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBndF9k aW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRp bV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYp CisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihk IHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKworQ09N TUlUOworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdpdGhvdXQgdGhlIE9SREVSIEJZIGNs YXVzZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBHYXRoZXIKKyAgIERpc2FibGVkOiB0cnVlCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEK KyAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lk ID0gZC5pZCkKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAg ICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJH RSgoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAg IEdBVEhFUigoZiBkKSkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIK KyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAg ICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgLT4gIFBhcmFsbGVsIFNl cSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAg ICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FO KGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNCByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IGNv bmZsaWN0aW5nIGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdnYXRoZXIoKGYgZCkpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyIE1lcmdlCisgICBXb3JrZXJzIFBs YW5uZWQ6IDEKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAg ICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYu ZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBn dF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEdBVEhFUigoZiBkKSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxl ZCAqLworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9J TihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKChmIGQpKQorKDE3IHJvd3Mp CisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv am9pbl9vcmRlci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3Jk ZXIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYjBkY2VmNzAx MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9p bl9vcmRlci5vdXQKQEAgLTAsMCArMSw1MDkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NF VCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBqb19k aW0xIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2RpbTEgKGlkLCBk aW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykg KyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpv X2RpbTE7CitDUkVBVEUgVEFCTEUgam9fZGltMiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGlt MiB0ZXh0LCB2YWwyIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBqb19kaW0yIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgZmls bGVyIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMjsKK0NSRUFURSBUQUJMRSBqb19mYWN0ICgK KwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5j ZXMgam9fZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpv X2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQg SU5UTyBqb19mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsxIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZmFjdDsKKy0tIFdlIGV4 cGVjdCB0byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9u IG9uIGQyCistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQp CisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5p ZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIEhBU0hf Sk9JTihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZiBkMSBkMikK KygxNiByb3dzKQorCistLSBGb3JjZSBhIGZldyBkaWZmZXJlbnQgam9pbiBvcmRlcnMuIFNvbWUg b2YgdGhlc2UgYXJlIHZlcnkgaW5lZmZpY2llbnQsCistLSBidXQgdGhlIHBsYW5uZXIgY29uc2lk ZXJzIHRoZW0gYWxsIHZpYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQp CisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5p ZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKQorICAg SEFTSF9KT0lOKGQxIGQyKQorICAgU0VRX1NDQU4oZiBkMSBkMikKKyAgIE5PX0dBVEhFUihmIGQx IGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9p bl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQg PSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hF UkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIEhBU0hfSk9JTihk MiBkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEg ZiBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g am9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICBIYXNoIENvbmQ6IChkMS5pZCA9IGYuZGltMV9pZCkKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisg ICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihkMSBmIGQyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihkMSBmIGQyKQorICAgSEFTSF9KT0lOKGYgZDIpCisgICBTRVFfU0NBTihk MSBmIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgKGQxIGQyKSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBK T0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBk MiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoKGYuZGltMl9pZCA9IGQyLmlk KSBBTkQgKGYuZGltMV9pZCA9IGQxLmlkKSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtl eTogZi5kaW0yX2lkLCBmLmRpbTFfaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0 IGYKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZDIuaWQsIGQxLmlkCisgICAgICAg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0x IGQxCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAg ICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIChkMSBkMikpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQy KSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oKGQxIGQyKSkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFM SVpFKGQyKQorICAgU0VRX1NDQU4oZiBkMSBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDIx IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihm IHtkMSBkMn0pJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29u ZDogKChmLmRpbTJfaWQgPSBkMi5pZCkgQU5EIChmLmRpbTFfaWQgPSBkMS5pZCkpCisgICAtPiAg U29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltMl9pZCwgZi5kaW0xX2lkCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6 IGQyLmlkLCBkMS5pZAorICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiB7ZDEgZDJ9KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQyIGQxKSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oKGQx IGQyKSkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZiBkMiBk MSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDIxIHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNl IGEgam9pbiBvcmRlciBieSBtZW50aW9uaW5nIGp1c3QgYSBwcmVmaXggb2YgdGhlIGpvaW4gbGlz dC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVy KGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBq b19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxF RlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEg QU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGQyLmlkID0gZi5kaW0yX2lkKQorICAgLT4gIFNl cSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4g IEhhc2gKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KGYuZGltMV9pZCA9IGQxLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Zh Y3QgZgorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIChm IGQxKSkKKyAgIEhBU0hfSk9JTihkMSAoZiBkMSkpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAg Tk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBP TiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9 IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdl IEpvaW4KKyAgIE1lcmdlIENvbmQ6ICgoZDIuaWQgPSBmLmRpbTJfaWQpIEFORCAoZDEuaWQgPSBm LmRpbTFfaWQpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkMi5pZCwgZDEuaWQK KyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg ICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMSA9IDEpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltMl9pZCwgZi5k aW0xX2lkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBkMSBmKQorICAgTUVSR0VfSk9JTl9QTEFJ TihmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihkMiBkMSBm KQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMjEgcm93cykKKworQ09NTUlUOworLS0gam9fZmFj dCBpcyBub3QgcGFydGl0aW9uZWQsIGJ1dCBsZXQncyB0cnkgcHJldGVuZGluZyB0aGF0IGl0IGlz IGFuZAorLS0gdmVyaWZ5aW5nIHRoYXQgdGhlIGFkdmljZSBkb2VzIG5vdCBhcHBseS4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYvZDEgZDEg ZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpv X2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVG VCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBB TkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVl CisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIERpc2FibGVkOiB0cnVlCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBq b19kaW0xX3BrZXkgb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlk ID0gZi5kaW0xX2lkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAg SW5kZXggU2NhbiB1c2luZyBqb19kaW0yX3BrZXkgb24gam9fZGltMiBkMgorICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gZi5kaW0yX2lkKQorICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYvZDEgZDEgZDIpIC8qIHBhcnRp YWxseSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihm IGQxIGQyKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEgZDIpCisgICBTRVFfU0NBTihmKQorICAg SU5ERVhfU0NBTihkMSBwdWJsaWMuam9fZGltMV9wa2V5IGQyIHB1YmxpYy5qb19kaW0yX3BrZXkp CisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9kMSAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4g am9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9O IGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjog KChkMS5pZCA9IGYuZGltMV9pZCkgQU5EIChkMi5pZCA9IGYuZGltMl9pZCkpCisgICAtPiAgTmVz dGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmL2QxIChkMSBkMikpIC8qIHBhcnRpYWxs eSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBk MiBmKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpF KGQyKQorICAgU0VRX1NDQU4oZDEgZDIgZikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJv d3MpCisKK0NPTU1JVDsKKy0tIFRoZSB1bnVzdWFsIGZvcm11bGF0aW9uIG9mIHRoaXMgcXVlcnkg aXMgaW50ZW5kZWQgdG8gcHJldmVudCB0aGUgcXVlcnkKKy0tIHBsYW5uZXIgZnJvbSByZWR1Y2lu ZyB0aGUgRlVMTCBKT0lOIHRvIHNvbWUgb3RoZXIgam9pbiB0eXBlLCBzbyB0aGF0IHdlCistLSBj YW4gdGVzdCB3aGF0IGhhcHBlbnMgd2l0aCBhIGpvaW4gdHlwZSB0aGF0IGNhbm5vdCBiZSByZW9y ZGVyZWQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBq b19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9O IGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5k aW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVy OiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1l cmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYu ZGltMl9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtl eTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIg ZDIKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJf aWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lO X1BMQUlOKGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQy IGYgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygxOCByb3dzKQorCistLSBXZSBzaG91bGQg bm90IGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBi ZWNhdXNlCistLSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQg YmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0 aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVM TCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5p ZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0x X2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAg ICAgICAgRGlzYWJsZWQ6IHRydWUKKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkp ID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg U29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgo Zi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBm CisgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExB SU4oZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAg IE5PX0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFj dCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJ T04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5k aW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2Ug Q29uZDogKCgoZi5kaW0yX2lkICsgMCkpID0gKChkMi5pZCArIDApKSkKKyAgICAgICAgIC0+ICBT b3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAwKSkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBTb3J0CisgICAg ICAgICAgICAgICBTb3J0IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZiBkMiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZiBkMiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZDIpCisgICBORVNURURfTE9P UF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZDEg ZiBkMikKKygyMCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pv aW5fb3JkZXIoZDIgZiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4g am9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5k aW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisg ICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxM KSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlk ICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAg ICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBL ZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYg ZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShk MSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMCByb3dz KQorCitDT01NSVQ7CistLSBUd28gaW5jb21wYXRpYmxlIGpvaW4gb3JkZXJzIHNob3VsZCBjb25m bGljdC4gSW4gdGhlIHNlY29uZCBjYXNlLAorLS0gdGhlIGNvbmZsaWN0IGlzIGltcGxpY2l0OiBp ZiBkMSBpcyBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGpvaW4gb2YgYW55CistLSB0eXBlLCBpdCBj YW5ub3QgYWxzbyBiZSB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYpIGpvaW5fb3JkZXIoZDEpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJ Tk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsg MCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVM TDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBm LmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2lu CisgICAgICAgICBNZXJnZSBDb25kOiAoKChmLmRpbTJfaWQgKyAwKSkgPSAoKGQyLmlkICsgMCkp KQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9p ZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAg ICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSk9J Tl9PUkRFUihkMSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIE1FUkdFX0pPSU5fUExB SU4oZDIpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGYgZDIg ZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEpIGhhc2hfam9pbihkMSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlO TkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAw ID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxM OworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQg PSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgU2VxIFNjYW4gb24g am9fZGltMSBkMQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgTWVyZ2UgRnVsbCBK b2luCisgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0y X2lkICsgMCkpKQorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg ICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihkMSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyAgIEhBU0hfSk9JTihkMSkg LyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZDEgKGQyIGYpKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAg TkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoKGYgZDIpKQorICAgU0VRX1NDQU4oZDEgZDIgZikKKyAg IE5PX0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZjlkYjY5MjE5MAotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKQEAgLTAs MCArMSwzMzkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29y a2Vyc19wZXJfZ2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBqb2luX2RpbSAoaWQgc2VyaWFsIHBy aW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb2luX2RpbTsKK0NSRUFU RSBUQUJMRSBqb2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW1faWQgaW50ZWdl ciBub3QgbnVsbCByZWZlcmVuY2VzIGpvaW5fZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9mYWN0CisJU0VMRUNUIGcsIChnJTMp KzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggam9pbl9m YWN0X2RpbV9pZCBPTiBqb2luX2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0gQU5BTFlaRSBqb2luX2Zh Y3Q7CistLSBXZSBleHBlY3QgYSBoYXNoIGpvaW4gYnkgZGVmYXVsdC4KK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4K KyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2lu X2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBk CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pP SU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTAgcm93cykKKwor LS0gVHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9kaW0gYXMg dGhlIGlubmVyIHRhYmxlLgorLS0gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrIGV4Y2VwdCBmb3Ig TUVSR0VfSk9JTl9NQVRFUklBTElaRTsgdGhhdCB3aWxsCistLSBmYWlsLCBiZWNhdXNlIHRoZSBw bGFubmVyIGtub3dzIHRoYXQgam9pbl9kaW0gKGlkKSBpcyB1bmlxdWUsIGFuZCB3aWxsCistLSBy ZWZ1c2UgdG8gYWRkIG1hcmsvcmVzdG9yZSBvdmVyaGVhZC4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFj dCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTihkKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkK KyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGQpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE1lcmdlIEpvaW4KKyAgIERpc2FibGVkOiB0cnVlCisgICBNZXJnZSBDb25kOiAoZi5kaW1f aWQgPSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBq b2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2lu X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX01BVEVSSUFMSVpF KGQpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgSU5ERVhfU0NBTihmIHB1 YmxpYy5qb2luX2ZhY3RfZGltX2lkIGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRI RVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn TUVSR0VfSk9JTl9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5k aW1faWQgPSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBv biBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBq b2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX1BMQUlOKGQp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9m YWN0X2RpbV9pZCBkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygx MSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09Q X01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpv aW4gRmlsdGVyOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFj dCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2Rp bSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShk KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihm IGQpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkKQorICAgU0VRX1NDQU4oZiBkKQorICAg Tk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2ZhY3QgZgorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogZi5kaW1faWQK KyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9P UF9NRU1PSVpFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZCkKKyAgIFNFUV9TQ0FOKGYp CisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBk KQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVE X0xPT1BfUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRleCBDb25k OiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09Q X1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAg SU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygx MiByb3dzKQorCitDT01NSVQ7CistLSBOb3cgdHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1ldGhvZCBp biB0dXJuIHdpdGggam9pbl9mYWN0IGFzIHRoZSBpbm5lcgorLS0gdGFibGUuIEFsbCBvZiB0aGVz ZSBzaG91bGQgd29yay4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdIQVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChkLmlkID0g Zi5kaW1faWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIEhhc2gKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGQgZikKKyAgIEhBU0hfSk9JTihmKQorICAgU0VRX1NDQU4oZCBmKQor ICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAg TWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpv aW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1F UkdFX0pPSU5fTUFURVJJQUxJWkUoZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1f cGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExB SU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkK KyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9QTEFJTihmKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9K T0lOX1BMQUlOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkgZiBwdWJs aWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTEgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShm KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9p bl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGYu ZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgTWF0 ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZikgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTkVTVEVE X0xPT1BfTUFURVJJQUxJWkUoZikKKyAgIFNFUV9TQ0FOKGQgZikKKyAgIE5PX0dBVEhFUihmIGQp CisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURf TE9PUF9NRU1PSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2Rp bSBkCisgICAtPiAgTWVtb2l6ZQorICAgICAgICAgQ2FjaGUgS2V5OiBkLmlkCisgICAgICAgICBD YWNoZSBNb2RlOiBsb2dpY2FsCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2Zh Y3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoZGlt X2lkID0gZC5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01FTU9J WkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZCBmKQorICAgTkVTVEVEX0xPT1BfTUVNT0laRShmKQorICAgU0VRX1NDQU4oZCkKKyAgIElO REVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCiso MTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9P UF9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorICAgICAgICAgSW5k ZXggQ29uZDogKGRpbV9pZCA9IGQuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNU RURfTE9PUF9QTEFJTihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9QTEFJTihmKQorICAgU0VRX1NDQU4o ZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhF UihmIGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gTm9uLXdvcmtpbmcgY2FzZXMuIFdlIGNh bid0IGZvcmNlIGEgZm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFibGVzLAorLS0gYmVjYXVz ZSB0aGV5IGFyZW4ndCBmb3JlaWduIHRhYmxlcy4gV2UgYWxzbyBjYW4ndCB1c2UgdHdvIGRpZmZl cmVudAorLS0gc3RyYXRlZ2llcyBvbiB0aGUgc2FtZSB0YWJsZSwgbm9yIGNhbiB3ZSBwdXQgYm90 aCB0YWJsZXMgb24gdGhlIGlubmVyCistLSBzaWRlIG9mIHRoZSBzYW1lIGpvaW4uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9m YWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlz YWJsZWQ6IHRydWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRleCBD b25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEZPUkVJR05f Sk9JTigoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9QTEFJTihkKQorICAgU0VRX1ND QU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhF UihmIGQpCisoMTMgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdO RVNURURfTE9PUF9QTEFJTihmKSBORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1l cmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBm YWlsZWQgKi8KKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpIC8qIG1hdGNoZWQsIGNvbmZs aWN0aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9p bl9kaW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkK KygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9M T09QX1BMQUlOKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0 IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAor ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBORVNURURfTE9PUF9QTEFJTihmKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyAgIE5F U1RFRF9MT09QX1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NB TihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVS KGYgZCkKKygxNCByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmYyYWRlZjM5ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0CkBAIC0wLDAgKzEsNjcg QEAKK0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxf cXVlcnkgPSBvZmY7CistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0 ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19j bGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgCisoMSByb3cpCisKKy0tIFNldCBhIHNtYWxsIGFkdmljZSBjb2xsZWN0aW9uIGxp bWl0IHNvIHRoYXQgd2UnbGwgZXhjZWVkIGl0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2Nv bGxlY3Rpb25fbGltaXQgPSAyOworLS0gRW5hYmxlIHRoZSBjb2xsZWN0b3IuCitTRVQgcGdfcGxh bl9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CistLSBTZXQgdXAgYSBkdW1teSB0YWJsZS4K K0NSRUFURSBUQUJMRSBkdW1teV90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSwgcGFyYWxsZWxfd29ya2VycyA9IDApOwor LS0gVGVzdCBxdWVyaWVzLgorU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSBhLCBkdW1teV90YWJs ZSBiOworIGEgfCBiIHwgYSB8IGIgCistLS0rLS0tKy0tLSstLS0KKygwIHJvd3MpCisKK1NFTEVD VCAqIEZST00gZHVtbXlfdGFibGU7CisgYSB8IGIgCistLS0rLS0tCisoMCByb3dzKQorCistLSBT aG91bGQgcmV0dXJuIHRoZSBhZHZpY2UgZnJvbSB0aGUgc2Vjb25kIHRlc3QgcXVlcnkuCitTRUxF Q1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBp ZCBERVNDIExJTUlUIDE7CisgICAgICAgICBhZHZpY2UgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNFUV9TQ0FOKGR1bW15X3RhYmxlKSArCisgTk9fR0FUSEVSKGR1bW15X3Rh YmxlKQorKDEgcm93KQorCistLSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVD VCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVk X2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEg cm93KQorCistLSBSYWlzZSB0aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0 b3IgdXNlcyBtdWx0aXBsZSBjaHVua3MuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVj dGlvbl9saW1pdCA9IDIwMDA7CistLSBQdXNoIGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRo ZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhF Q1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOwor LS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9N IHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgY291bnQgCistLS0tLS0tCisgIDIw MDAKKygxIHJvdykKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0 IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1i ZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7 CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMmIzZDBhODI0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0CkBAIC0wLDAgKzEsNDI2IEBACitM T0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiA9IHRydWU7CitDUkVBVEUgVEFC TEUgcHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVBB UlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MWEgUEFSVElUSU9OIE9GIHB0 MSBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFiIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVF UyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAo MjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5T RVJUIElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRl eHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBn OworVkFDVVVNIEFOQUxZWkUgcHQxOworQ1JFQVRFIFRBQkxFIHB0MiAoaWQgaW50ZWdlciBwcmlt YXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsK K0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0 byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFC TEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmMg UEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIs IHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDUpICsgMQor CSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDIpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDI7 CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZh bDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFS VElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBw dDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBW QUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2Eg dGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CitDUkVBVEUgVEFCTEUgcHRt aXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQ QVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJ T04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hi IFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAo MzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBw dG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlTRUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQg JyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOwor VkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFO RCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMg PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMS5pZCA9IHB0M18xLmlkKQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo aWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNo IENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQor ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwz ID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0 MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18z LmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAx KQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJh IHB0My9wdWJsaWMucHQzYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJs aWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihw dDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RF RF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5w dDFjKQorICAgSEFTSF9KT0lOKHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1 YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBw dDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3Br ZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMg cHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5P X0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBw dDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ3IHJvd3MpCisK Ky0tIFN1cHByZXNzIHBhcnRpdGlvbndpc2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHku CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lT RShwdDEgcHQyIHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9 IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKHB0Mi5p ZCA9IHB0My5pZCkKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0g MSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMyA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNf MworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAtPiAg QXBwZW5kCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBw dDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBw dDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0g cHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAg SW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKHB0MSkgLyogbWF0 Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDIpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElP TldJU0UocHQzKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihwdDIgcHQzIHB0MSkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MSkKKyAgIEhBU0hf Sk9JTihwdDMpCisgICBTRVFfU0NBTihwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0 Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EKKyAgICBwdDMvcHVibGljLnB0M2IgcHQzL3B1 YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVibGljLnB0MWFfcGtl eSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9wdWJsaWMucHQxYyBw dWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDIgcHQzIHB0MSkKKyAgIE5PX0dB VEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIv cHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJs aWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQzIHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0Mikg cHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBw dDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisg ICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4K KyAgIEhhc2ggQ29uZDogKHB0MS5pZCA9IHB0My5pZCkKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0MV8xLmlkID0gcHQy XzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYSBwdDFfMQorICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQxXzIuaWQgPSBwdDJfMi5pZCkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMy5pZCA9IHB0Ml8zLmlkKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgQXBw ZW5kCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQ QVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShw dDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KHB0MS9wdWJsaWMucHQxYSBwdDIvcHVibGljLnB0MmEpCisgICBKT0lOX09SREVSKHB0MS9wdWJs aWMucHQxYiBwdDIvcHVibGljLnB0MmIpCisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYyBw dDIvcHVibGljLnB0MmMpCisgICBKT0lOX09SREVSKHtwdDEgcHQyfSBwdDMpCisgICBIQVNIX0pP SU4ocHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzKQor ICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0 MWIgcHQyL3B1YmxpYy5wdDJiCisgICAgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYyBw dDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQzL3B1YmxpYy5wdDNjKQorICAg UEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQx YSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0 Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMu cHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBjb25m bGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgKHB0MSBwdDMpKSc7CitFWFBMQUlOIChQTEFOX0FE VklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5p ZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIg PSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAg TmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHB0Ml8xLmlkID0gcHQzXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMg PSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQx XzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8xLmlkKQorICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8yLmlkID0gcHQzXzIu aWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChpZCA9IHB0Ml8yLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHB0Ml8zLmlkID0gcHQzXzMuaWQpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxY19wa2V5IG9u IHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8zLmlkKQor ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZh aWxlZCAqLworICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MykpIC8qIG1hdGNoZWQsIGNvbmZsaWN0 aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0 Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9P UkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAg IEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0 MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFi IHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDMvcHVibGljLnB0M2EgcHQzL3B1Ymxp Yy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0Mi9wdWJsaWMucHQyYSBwdDMv cHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJs aWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBw dWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQx L3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQy IHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEv cHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJs aWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykK Kyg1MSByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBmb3JjZSBhIHBhcnRpdGlvbndpc2Ugam9p biB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHRtaXNtYXRjaCkpJzsKK0VYUExBSU4g KFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHRtaXNtYXRjaCBX SEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBBcHBl bmQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0MV8xCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMK KyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0bWlzbWF0Y2hh X3BrZXkgb24gcHRtaXNtYXRjaGEgcHRtaXNtYXRjaF8xCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoaWQgPSBwdDEuaWQpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdG1pc21h dGNoYl9wa2V5IG9uIHB0bWlzbWF0Y2hiIHB0bWlzbWF0Y2hfMgorICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gcHQxLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElU SU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MSBwdG1pc21hdGNoKQorICAgTkVTVEVE X0xPT1BfUExBSU4ocHRtaXNtYXRjaCkKKyAgIFNFUV9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdDEv cHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSU5ERVhfU0NBTihwdG1pc21hdGNoL3B1 YmxpYy5wdG1pc21hdGNoYSBwdWJsaWMucHRtaXNtYXRjaGFfcGtleQorICAgIHB0bWlzbWF0Y2gv cHVibGljLnB0bWlzbWF0Y2hiIHB1YmxpYy5wdG1pc21hdGNoYl9wa2V5KQorICAgUEFSVElUSU9O V0lTRShwdDEgcHRtaXNtYXRjaCkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1 YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYworICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0 Y2hhIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiKQorKDIyIHJvd3MpCisKK0NPTU1JVDsK Ky0tIEZvcmNlIGpvaW4gb3JkZXIgZm9yIGEgcGFydGljdWxhciBicmFuY2ggb2YgdGhlIHBhcnRp dGlvbndpc2Ugam9pbiB3aXRoCistLSBhbmQgd2l0aG91dCBtZW50aW9uaW5nIHRoZSBzY2hlbWEg bmFtZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09S REVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKSc7CitF WFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0Miwg cHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFs MSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0 ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAocHQzXzEuaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQor ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0g MSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQx YyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzMuaWQpCisgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0 MWEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9J Tl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikK KyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGlj LnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5w dDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDIvcHVibGljLnB0MmEgcHQzL3B1 YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0My9wdWJsaWMucHQzYSBw dDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9w dWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQx YSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAg cHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEg cHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBw dDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9w dWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQz YykKKyg0OSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5f T1JERVIocHQzL3B0M2EgcHQyL3B0MmEgcHQxL3B0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNF LCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0g cHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEg QU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDNfMS5pZCA9IHB0Ml8x LmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAx KQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBv biBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5pZCkK KyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMy5p ZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMK KyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18z CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDMvcHQz YSBwdDIvcHQyYSBwdDEvcHQxYSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVi bGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2Ig cHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmMgcHQzL3B1Ymxp Yy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMu cHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSEFTSF9KT0lOKHB0Mi9w dWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4o cHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDIvcHVibGljLnB0MmIgcHQzL3B1Ymxp Yy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYykKKyAgIElOREVYX1ND QU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1Ymxp Yy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBB UlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEg cHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIv cHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0 M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ5IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcHJlcGFyZWQub3V0IGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjA3YTdjNjIzNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQKQEAgLTAsMCArMSw2NyBAQAorTE9B RCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIg PSAwOworQ1JFQVRFIFRBQkxFIHB0YWIgKGlkIGludGVnZXIsIHZhbCB0ZXh0KSBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3Jl X2FkdmljZV9kZXRhaWxzID0gZmFsc2U7CistLSBOb3QgcHJlcGFyZWQsIHNvIGFkdmljZSBzaG91 bGQgYmUgZ2VuZXJhdGVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgCitTRUxF Q1QgKiBGUk9NIHB0YWI7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVSKHB0YWIpCisoNCByb3dzKQorCistLSBQcmVw YXJlZCwgc28gYWR2aWNlIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkLgorUFJFUEFSRSBwdDEgQVMg U0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhF Q1VURSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBT Y2FuIG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9h ZHZpY2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZp Y2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGFkdmljZS4KK1BSRVBBUkUgcHQyIEFT IFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVY RUNVVEUgcHQyOworICAgICAgIFFVRVJZIFBMQU4gICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBwdGFiCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4ocHRhYikKKyAgIE5PX0dBVEhFUihwdGFiKQorKDQgcm93cykKKworLS0gTm90IHByZXBh cmVkLCBzbyBmZWVkYmFjayBzaG91bGQgYmUgZ2VuZXJhdGVkLgorU0VUIHBnX3BsYW5fYWR2aWNl LmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNlOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihwdGFiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIAorU0VMRUNU ICogRlJPTSBwdGFiOworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcHRhYgorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikgLyogbWF0Y2hlZCAqLworKDMgcm93cykKKwor LS0gUHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgbm90IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUg cHQzIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRikgRVhFQ1VURSBw dDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9u IHB0YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2Vf ZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0 YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGZlZWRiYWNrLgorUFJFUEFSRSBwdDQgQVMgU0VM RUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VU RSBwdDI7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB TihwdGFiKQorICAgTk9fR0FUSEVSKHB0YWIpCisoNCByb3dzKQorCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0IGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9zY2FuLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uZDA1ZWFkMzY5YjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL3NjYW4ub3V0CkBAIC0wLDAgKzEsNzU3IEBACitMT0FEICdwZ19wbGFuX2Fk dmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2Vx X3BhZ2VfY29zdCA9IDAuMTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90 dXBsZV9jb3N0ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CitDUkVBVEUgVEFC TEUgc2Nhbl90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzY2FuX3RhYmxlCisJU0VMRUNUIGcs ICdzb21lIHRleHQgJyB8fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwMCkgZzsKK0NS RUFURSBJTkRFWCBzY2FuX3RhYmxlX2IgT04gc2Nhbl90YWJsZSBVU0lORyBicmluIChiKTsKK1ZB Q1VVTSBBTkFMWVpFIHNjYW5fdGFibGU7CistLSBTZXF1ZW50aWFsIHNjYW4KK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICBR VUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBv biBzY2FuX3RhYmxlCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90 YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDQgcm93cykKKworLS0gSW5kZXggc2Nh bgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAg IEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9T Q0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDUgcm93cykKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlf U0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nh bl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIEJpdG1hcCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAn c29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Qml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3Nv bWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxl X2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIFRJRCBzY2FuCitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3Rp ZCA9ICcoMCwxKSc7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisg ICBUSUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUg cm93cykKKworLS0gVElEIHJhbmdlIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBj dGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90 YWJsZQorICAgVElEIENvbmQ6ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkgQU5EIChjdGlkIDwgJygy LDEpJzo6dGlkKSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3Rh YmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBUcnkgZm9yY2lu ZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0g d2FudGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOwor ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRI RVIoc2Nhbl90YWJsZSkKKyg2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQor ICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEg RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2Nh biB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEg PSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFi bGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJF IGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChi ID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2Fu X3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1ND QU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDkgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBv biBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5E IGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2Fu X3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAn KDIsMSknOjp0aWQpKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90 YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FO KHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1J VDsKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUg b3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdpbGwgZmFpbC4gQW4gaW5kZXggc2Nh biBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVudGlhbGx5CistLSBnZW5lcmF0ZSB0aGUg Y29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHRo ZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFjayBvZiBhIFdIRVJFIGNsYXVzZS4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQs IGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFi bGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNj YW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZh aWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBT Y2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVk OiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKSAv KiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB TihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01N SVQ7CistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5kZXggdXNlLiBUaGlzIHNob3VsZCBub3cgc3Vj Y2VlZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFuZCBCSVRNQVBfSEVBUF9TQ0FOLCBidXQgdGhl IElOREVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3JjZWQgYmVjYXVzZSB0aGUKKy0tIHF1ZXJ5IGZl dGNoZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhlIGluZGV4LgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID4gMCkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZ X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJs ZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBm YWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxl KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPiAwOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBI ZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYSA+IDApCisgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9wa2V5CisgICAgICAgICBJbmRleCBDb25k OiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNj YW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRN QVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJv d3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1 c2UgYSBzZXF1ZW50aWFsIHNjYW4sIGJ1dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFu IGluZGV4LW9ubHkgc2NhbiAoZHVlIHRvIHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNj YW4gKGR1ZSB0byB0aGUgYWJzZW5jZSBvZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUg YSA9IDE7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisg ICBGaWx0ZXI6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNj YW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFf U0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3Rh YmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxl CisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChh ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8q IG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRl IGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZv cmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBs aWNhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENv bmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNj YW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5f dGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElO REVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVS KHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyog bWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEg c2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0bWFwIGhlYXAgc2NhbiwKKy0tIGJ1dCBh IHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4IGlzIG5vdCBwb3NzaWJsZS4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxl KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjogKGIgPiAnc29tZSB0ZXh0IDgnOjp0 ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFi bGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBJbmRleCBDb25kOiAo YSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9iKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZv cmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBv cgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOwor ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVy OiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dz KQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CisgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoKGN0aWQgPiAnKDEsMSkn Ojp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHdp dGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNob3VsZCBzdGlsbCB3b3JrIGlmIHdlIG1lbnRp b24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf U0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nh bl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93 cykKKworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAu c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2Fu X3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFpbGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEl0J3Mg T0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSkgLyogbWF0Y2hlZCAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoOCByb3dzKQorCistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0 YXJnZXQgaXMgZXZlbiBub3Rpb25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2Fu X3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsK Ky0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4o bm90aGluZykgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB Tihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVf cGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3Vz KSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlcikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9P TkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNo ZWQsIGluYXBwbGljYWJsZSwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBvdXIgYWJp bGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgYWxpYXMuCitC RUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChn ZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEp IHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAtPiAgTmVzdGVkIExvb3AgTGVm dCBKb2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZwor ICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFi bGUgcworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzXzEKKyAgICAgICAgIElu ZGV4IENvbmQ6IChhID0gZy5nKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMgcyMyKQorICAgSU5ERVhfU0NBTihz IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkgcyMyIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBO T19HQVRIRVIocyBzIzIpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFi bGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5h OworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIEhhc2ggTGVmdCBKb2luCisg ICAgICAgICBIYXNoIENvbmQ6IChnLmcgPSBzLmEpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2Nh biBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNj YW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHNfMQorICAgICAgICAgSW5kZXggQ29uZDogKGEg PSBnLmcpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHMgcyMyKQorICAg TkVTVEVEX0xPT1BfUExBSU4ocyMyKQorICAgSEFTSF9KT0lOKHMpCisgICBTRVFfU0NBTihzKQor ICAgSU5ERVhfU0NBTihzIzIgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz IHMjMikKKygxNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NF UV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04g ZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzXzEuYSkKKyAg IC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9u IGdlbmVyYXRlX3NlcmllcyBnCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSA9 IGcuZykKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBz XzEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMjMikgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5F U1RFRF9MT09QX1BMQUlOKHMpCisgICBIQVNIX0pPSU4ocyMyKQorICAgU0VRX1NDQU4ocyMyKQor ICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBz IzIpCisoMTcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90 YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBz LmE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVm dCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzXzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9p bgorICAgICAgICAgSGFzaCBDb25kOiAoZy5nID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9u IFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihzKSAvKiBtYXRjaGVkICovCisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBI QVNIX0pPSU4ocyBzIzIpCisgICBTRVFfU0NBTihzIHMjMikKKyAgIE5PX0dBVEhFUihzIHMjMikK KygxNyByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIHNj YW5zIHdpdGhpbiBhIHN1YnF1ZXJ5LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9G RlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJ bmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzQHggcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHgpCisoNSByb3dz KQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRl eCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENv bmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAdW5u YW1lZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNAdW5u YW1lZF9zdWJxdWVyeSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRjaC4K K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp CisgICBOT19HQVRIRVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJF IGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkg b24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5IHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKwor LS0gU2hvdWxkIG1hdGNoIGZpcnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEg PSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAg RmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgp CisgICBOT19HQVRIRVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJF IGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkg b24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5f dGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHVubmFtZWRfc3VicXVlcnkpCisoNyByb3dzKQor CistLSBTaG91bGQgbWF0Y2ggc2Vjb25kIHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG5vdCBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHggcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVl cnkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihz QHVubmFtZWRfc3VicXVlcnkpCisgICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcg cm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9zZW1pam9pbi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlq b2luLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmYyMDNjNWE2 OGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3Nl bWlqb2luLm91dApAQCAtMCwwICsxLDM3NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VU IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIHNqX3dp ZGUgKAorCWlkIGludGVnZXIgcHJpbWFyeSBrZXksCisJdmFsMSBpbnRlZ2VyLAorCXBhZGRpbmcg dGV4dCBzdG9yYWdlIHBsYWluCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIHNqX3dpZGUKKwlTRUxFQ1QgZywgZyUxMCsxLCByZXBlYXQoJyAnLCAzMDAp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUgSU5ERVggT04gc2pfd2lk ZSAodmFsMSk7CitWQUNVVU0gQU5BTFlaRSBzal93aWRlOworQ1JFQVRFIFRBQkxFIHNqX25hcnJv dyAoCisJaWQgaW50ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIKKykgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2pfbmFycm93CisJU0VMRUNU IGcsIGclMTArMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworQ1JFQVRFIElOREVY IE9OIHNqX25hcnJvdyAodmFsMSk7CitWQUNVVU0gQU5BTFlaRSBzal9uYXJyb3c7CistLSBXZSBl eHBlY3QgdGhpcyB0byBtYWtlIHRoZSBWQUxVRVMgbGlzdCB1bmlxdWUgYW5kIHVzZSBpbmRleCBs b29rdXBzIHRvCistLSBmaW5kIHRoZSByb3dzIGluIHNqX3dpZGUsIHNvIGFzIHRvIGF2b2lkIGEg ZnVsbCBzY2FuIG9mIHNqX3dpZGUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAx KSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w CisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNv bHVtbjEsICIqVkFMVUVTKiIuY29sdW1uMgorICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIq VkFMVUVTKiIKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNqX3dpZGVfcGtleSBvbiBzal93aWRl CisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpCisgICAgICAg ICBGaWx0ZXI6ICh2YWwxID0gIipWQUxVRVMqIi5jb2x1bW4yKQorIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoIipWQUxVRVMqIiBzal93aWRlKQorICAgTkVTVEVEX0xPT1Bf UExBSU4oc2pfd2lkZSkKKyAgIElOREVYX1NDQU4oc2pfd2lkZSBwdWJsaWMuc2pfd2lkZV9wa2V5 KQorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSkK KygxMyByb3dzKQorCistLSBJZiB3ZSBhc2sgZm9yIGEgdW5pcXVlIHNlbWlqb2luLCB3ZSBzaG91 bGQgZ2V0IHRoZSBzYW1lIHBsYW4gYXMgd2l0aAorLS0gbm8gYWR2aWNlLiBJZiB3ZSBhc2sgZm9y IGEgbm9uLXVuaXF1ZSBzZW1pam9pbiwgd2Ugc2hvdWxkIHNlZSBhIFNlbWkKKy0tIEpvaW4gb3Bl cmF0aW9uIGluIHRoZSBwbGFuIHRyZWUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZh bDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91 cCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMSwgIipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAt PiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pf d2lkZV9wa2V5IG9uIHNqX3dpZGUKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9ICIqVkFMVUVT KiIuY29sdW1uMSkKKyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoIipW QUxVRVMqIiBzal93aWRlKQorICAgTkVTVEVEX0xPT1BfUExBSU4oc2pfd2lkZSkKKyAgIElOREVY X1NDQU4oc2pfd2lkZSBwdWJsaWMuc2pfd2lkZV9wa2V5KQorICAgU0VNSUpPSU5fVU5JUVVFKCIq VkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSkKKygxNSByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoIipWQUxVRVMqIikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfd2lk ZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAo NCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENv bmQ6ICgoc2pfd2lkZS5pZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkgQU5EIChzal93aWRlLnZhbDEg PSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX3dpZGUKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fTk9OX1VOSVFVRSgiKlZBTFVFUyoiKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal93aWRlICIq VkFMVUVTKiIpCisgICBIQVNIX0pPSU4oIipWQUxVRVMqIikKKyAgIFNFUV9TQ0FOKHNqX3dpZGUp CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lk ZSkKKygxMyByb3dzKQorCitDT01NSVQ7CistLSBCZWNhdXNlIHRoaXMgdGFibGUgaXMgbmFycm93 ZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lLCBhIHNlcXVlbnRpYWwgc2NhbgorLS0gaXMgbGVzcyBl eHBlbnNpdmUsIGFuZCB3ZSBjaG9vc2UgYSBzdHJhaWdodGZvcndhcmQgU2VtaSBKb2luIHBsYW4g YnkKKy0tIGRlZmF1bHQuIChOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIHZlcnkgc2Vuc2l0aXZlIHRv IHRoZSBsZW5ndGggb2YgdGhlIElOCistLSBsaXN0LCB3aGljaCBhZmZlY3RzIGhvdyBtYW55IGlu ZGV4IGxvb2t1cHMgdGhlIGFsdGVybmF0aXZlIHBsYW4gd2lsbCBuZWVkLikKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChp ZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1 KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDog KChzal9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEg PSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgIipWQUxVRVMqIikKKyAg IEhBU0hfSk9JTigiKlZBTFVFUyoiKQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpP SU5fTk9OX1VOSVFVRSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygxMSBy b3dzKQorCistLSBIZXJlLCB3ZSBleHBlY3QgYWR2aXNpbmcgYSB1bmlxdWUgc2VtaWpvaW4gdG8g c3dpdGggdG8gdGhlIHNhbWUgcGxhbiB0aGF0CistLSB3ZSBnb3Qgd2l0aCBzal93aWRlLCBhbmQg YWR2aXNpbmcgYSBub24tdW5pcXVlIHNlbWlqb2luIHNob3VsZCBub3QgY2hhbmdlCistLSB0aGUg cGxhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9p bl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgx LCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKChzal9uYXJyb3cuaWQgPSAiKlZBTFVFUyoi LmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAg LT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMSwg IipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipW QUxVRVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFM VUVTKiIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKHNqX25hcnJvdyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBT RVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikKKyAgIE5P X0dBVEhFUihzal9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChp ZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1 KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDog KChzal9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEg PSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJv dyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBTRVFfU0NBTihzal9u YXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIo c2pfbmFycm93KQorKDEzIHJvd3MpCisKK0NPTU1JVDsKKy0tIEluIHRoZSBhYm92ZSBleGFtcGxl LCB3ZSBtYWRlIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIHVuaXF1ZSwgYnV0IGhlcmUsCist LSB3ZSBzaG91bGQgbWFrZSB0aGUgaW5uZXIgc2lkZSB1bmlxdWUuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBn CisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNq X25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcK KyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg R3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHNqX25hcnJvdworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzal9u YXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4oc2pfbmFycm93KQor ICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCiso MTMgcm93cykKKworLS0gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgYSBwbGFuIHdpdGggb3Ig d2l0aG91dCB0aGUgbWFrZS11bmlxdWUgc3RyYXRlZ3ksCistLSB3aXRoIGVpdGhlciBzaWRlIGFz IHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAg ICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNq X25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcK KyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg R3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHNqX25hcnJvdworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKHNq X25hcnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4o c2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihz al9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAg IFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29u ZDogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJh dGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFy cm93CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNqX25h cnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4oc2pf bmFycm93KQorICAgU0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIo c2pfbmFycm93KQorKDEzIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnc2VtaWpvaW5fdW5pcXVlKHNqX25hcnJvdykgam9pbl9vcmRlcihzal9uYXJyb3cpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJv dyk7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9p bgorICAgSGFzaCBDb25kOiAoc2pfbmFycm93LnZhbDEgPSBnLmcpCisgICAtPiAgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBT Y2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1J Sk9JTl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgICBKT0lOX09SREVSKHNqX25h cnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoc2pfbmFycm93IGcpCisgICBIQVNIX0pPSU4oZykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykK KyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pfbmFycm93KQor KDE2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5f bm9uX3VuaXF1ZShzal9uYXJyb3cpIGpvaW5fb3JkZXIoc2pfbmFycm93KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIFJpZ2h0IFNlbWkg Sm9pbgorICAgSGFzaCBDb25kOiAoc2pfbmFycm93LnZhbDEgPSBnLmcpCisgICAtPiAgU2VxIFNj YW4gb24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4g b24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lO X05PTl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgICBKT0lOX09SREVSKHNqX25h cnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoc2pfbmFycm93IGcpCisgICBIQVNIX0pPSU4oZykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykK KyAgIFNFTUlKT0lOX05PTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKHNqX25hcnJv dykKKygxNCByb3dzKQorCitDT01NSVQ7CistLSBIb3dldmVyLCBtZW50aW9uaW5nIHRoZSB3cm9u ZyBzaWRlIG9mIHRoZSBqb2luIHNob3VsZCByZXN1bHQgaW4gYW4gYWR2aWNlCistLSBmYWlsdXJl LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3Vu aXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEg ZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKGcuZyA9IHNqX25h cnJvdy52YWwxKQorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3VwIEtleTogc2pf bmFycm93LnZhbDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBG dW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRU1JSk9JTl9VTklRVUUoZykgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgZykKKyAgIE5FU1RFRF9MT09Q X1BMQUlOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pf bmFycm93KQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygxNSByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoZyknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsK KyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AK KyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKGcuZyA9IHNqX25hcnJvdy52YWwx KQorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZh bDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBGdW5jdGlvbiBT Y2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1J Sk9JTl9OT05fVU5JUVVFKGcpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93IGcpCisgICBORVNURURfTE9PUF9QTEFJ TihnKQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJv dykKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCisoMTUgcm93cykKKworQ09NTUlUOworLS0gVGVz dCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKHNqX25hcnJvdykgc2VtaWpvaW5fbm9uX3VuaXF1ZShz al9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFs MSBmcm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9p bgorICAgSGFzaCBDb25kOiAoZy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgRnVuY3Rpb24g U2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkLCBjb25mbGljdGlu ZyAqLworICAgU0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQsIGNvbmZs aWN0aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGcgc2pfbmFycm93KQorICAgSEFTSF9KT0lOKHNqX25hcnJvdykKKyAgIFNFUV9TQ0FOKHNqX25h cnJvdykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pfbmFy cm93KQorKDE2IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSBhcHBseWluZyBTRU1JSk9JTl9VTklR VUUoKSB0byBhIG5vbi1zZW1pam9pbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZywgc2pfbmFy cm93IHMgV0hFUkUgZyA9IHMudmFsMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25k OiAocy52YWwxID0gZy5nKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfbmFycm93X3ZhbDFf aWR4IG9uIHNqX25hcnJvdyBzCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGcuZwor ICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRShnKSAvKiBtYXRjaGVkLCBpbmFwcGxp Y2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo cyBnKQorICAgTUVSR0VfSk9JTl9QTEFJTihnKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zal9u YXJyb3dfdmFsMV9pZHgpCisgICBOT19HQVRIRVIocykKKygxMyByb3dzKQorCitDT01NSVQ7CmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlNjE0MDJiNTY5Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0CkBAIC0wLDAgKzEsMTky IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CistLSBBbiBlbXB0eSBzdHJpbmcgaXMgYWxsb3dl ZC4gRW1wdHkgdGFyZ2V0IGxpc3RzIGFyZSBhbGxvd2VkIGZvciBtb3N0IGFkdmljZQorLS0gdGFn cywgYnV0IG5vdCBmb3IgSk9JTl9PUkRFUi4gIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiBzaG91bGQg YmUgb21pdHRlZCBpbgorLS0gdGV4dCBmb3JtYXQgd2hlbiB0aGVyZSBpcyBubyBhY3R1YWwgYWR2 aWNlLCBidXQgbm90IGluIG5vbi10ZXh0IGZvcm1hdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExBTiAKKy0t LS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVSWSBQ TEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIEZP Uk1BVCBKU09OKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsKKyAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICJQbGFuIjog eyAgICAgICAgICAgICAgICAgKworICAgICAgICJOb2RlIFR5cGUiOiAiUmVzdWx0IiwgICsKKyAg ICAgICAiUGFyYWxsZWwgQXdhcmUiOiBmYWxzZSwrCisgICAgICAgIkFzeW5jIENhcGFibGUiOiBm YWxzZSwgKworICAgICAgICJEaXNhYmxlZCI6IGZhbHNlICAgICAgICsKKyAgICAgfSwgICAgICAg ICAgICAgICAgICAgICAgICArCisgICAgICJTdXBwbGllZCBQbGFuIEFkdmljZSI6ICIiKworICAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyBdCisoMSByb3cpCisKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBm b3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiSk9JTl9PUkRFUigpIgorREVU QUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogSk9JTl9PUkRFUiBtdXN0IGhhdmUgYXQgbGVh c3Qgb25lIHRhcmdldCBhdCBvciBuZWFyICIpIgorLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25z IGluIGNhcGl0YWxpemF0aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRo ZSByZWxhdGlvbiBpZGVudGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3Jr LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitFWFBMQUlOIChD T1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFNFUV9TQ0FOKHgpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlcV9zY2FuKHhAeSknOworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeEB5KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykK KworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfc2Nhbih4IzIpJzsKK0VYUExBSU4g KENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHgjMikgLyogbm90IG1hdGNoZWQgKi8KKygzIHJv d3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeC95KSAvKiBub3QgbWF0Y2hlZCAqLwor KDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcgIFNFUV9TQ0FOICggeCAv IHkgLiB6ICkgICc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeC95 LnopIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKCJ4IiMyLyJ5Ii4ieiJAInQiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAxOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4IzIveS56QHQpIC8qIG5vdCBtYXRjaGVkICov CisoMyByb3dzKQorCistLSBTeW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFVRU5USUFMX1NDQU4oeCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJh bWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFVRU5USUFMX1NDQU4oeCkiCitERVRB SUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiU0VR VUVOVElBTF9TQ0FOIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTic7CitF UlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNl IjogIlNFUV9TQ0FOIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVy cm9yIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TignOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNl LmFkdmljZSI6ICJTRVFfU0NBTigiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBz eW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKCInOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3Bs YW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNl IGFkdmljZTogdW50ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIGF0IGVuZCBvZiBpbnB1dAor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiIiknOworRVJST1I6ICBpbnZh bGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NB TigiIikiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB6ZXJvLWxlbmd0aCBkZWxp bWl0ZWQgaWRlbnRpZmllciBhdCBvciBuZWFyICIiIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTigiYSInOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIg InBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiYSIiCitERVRBSUw6ICBDb3VsZCBu b3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCMnOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZv ciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigjIgorREVUQUlM OiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIiMiCitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJygpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBm b3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiKCkiCitERVRBSUw6ICBDb3Vs ZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKCIKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnMTIzJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFy YW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiMTIzIgorREVUQUlMOiAgQ291bGQgbm90 IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIjEyMyIKKy0tIFRhZ3MgbGlr ZSBTRVFfU0NBTiBhbmQgTk9fR0FUSEVSIGRvbid0IGFsbG93IHN1Ymxpc3RzIGF0IGFsbDsgb3Ro ZXIgdGFncywKKy0tIGV4Y2VwdCBmb3IgSk9JTl9PUkRFUiwgYWxsb3cgYXQgbW9zdCBvbmUgbGV2 ZWwgb2Ygc3VibGlzdC4gSGVuY2UsIHRoZXNlCistLSBleGFtcGxlcyBzaG91bGQgZXJyb3Igb3V0 LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigoeCkpJzsKK0VSUk9SOiAg aW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VR X1NDQU4oKHgpKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJv ciBhdCBvciBuZWFyICIoIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdHQVRIRVIoKCh4 KSkpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UiOiAiR0FUSEVSKCgoeCkpKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZp Y2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIoIgorLS0gTGVnYWwgY29tbWVudHMuCitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKF8pLyoqKi8nOworRVhQTEFJTiAo Q09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTihfKSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykK KworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTigv KngqL3kpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg UmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oeSkgLyogbm90IG1h dGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29t bWVudCAqLyBIQVNIX0pPSU4oeS8vKngqL3opJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNU IDE7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSEFTSF9KT0lOKHkveikgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKKy0tIFVudGVy bWluYXRlZCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyonOworRVJS T1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6 ICIvKiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBjb21t ZW50IGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09S REVSKCJmT08iKSAvKiBvb3BzJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVy ICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyIKK0RF VEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBjb21tZW50IGF0IGVu ZCBvZiBpbnB1dAorLS0gTmVzdGVkIGNvbW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGUg Zmlyc3Qgb2YgdGhlc2UgaXMgbGVnYWwgYW5kCistLSB0aGUgc2Vjb25kIGlzIG5vdC4KK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKK0VSUk9SOiAgaW52 YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiLyovKiBz dHVmZiAqLyovIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9y IGF0IG9yIG5lYXIgIioiCistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUgcmVsYXRp b24gaWRlbnRpZmllcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9J TihhKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZp Y2UuYWR2aWNlIjogIkZPUkVJR05fSk9JTihhKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBh ZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJl bGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnRk9SRUlHTl9KT0lOKChhKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJh bWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJGT1JFSUdOX0pPSU4oKGEpKSIKK0RFVEFJ TDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29u dGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5mNzIyOWRkZGNlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSw3OSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIt MjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfcGxhbl9hZHZp Y2Vfc291cmNlcyA9IGZpbGVzKAorICAncGdfcGxhbl9hZHZpY2UuYycsCisgICdwZ3BhX2FzdC5j JywKKyAgJ3BncGFfY29sbGVjdG9yLmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAorICAncGdw YV9qb2luLmMnLAorICAncGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycsCisgICdw Z3BhX3NjYW4uYycsCisgICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycsCispCisK K3BncGFfc2Nhbm5lciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlucHV0OiAn cGdwYV9zY2FubmVyLmwnLAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNvbW1hbmQ6 IGZsZXhfY21kLAorKQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitwZ19wbGFu X2FkdmljZV9zb3VyY2VzICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1c3RvbV90 YXJnZXQoJ3BncGFfcGFyc2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAga3dhcmdz OiBiaXNvbl9rdywKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRvX2xpc3Qo KQorcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0X3N5c3Rl bSA9PSAnd2luZG93cycKKyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJfZ2VuLnBy b2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3BnX3BsYW5f YWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBs YW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZpY2VfaW5j ID0gaW5jbHVkZV9kaXJlY3RvcmllcygnLicpCisKK3BnX3BsYW5fYWR2aWNlID0gc2hhcmVkX21v ZHVsZSgncGdfcGxhbl9hZHZpY2UnLAorICBwZ19wbGFuX2FkdmljZV9zb3VyY2VzLAorICBpbmNs dWRlX2RpcmVjdG9yaWVzOiBwZ19wbGFuX2FkdmljZV9pbmMsCisgIGt3YXJnczogY29udHJpYl9t b2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19wbGFuX2FkdmljZQorCitpbnN0YWxs X2RhdGEoCisgICdwZ19wbGFuX2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19wbGFuX2FkdmljZS5j b250cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKworaW5zdGFsbF9oZWFk ZXJzKAorICAncGdfcGxhbl9hZHZpY2UuaCcsCisgIGluc3RhbGxfZGlyOiBkaXJfaW5jbHVkZV9l eHRlbnNpb24gLyAncGdfcGxhbl9hZHZpY2UnLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzog J3BnX3BsYW5fYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisg ICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdz cWwnOiBbCisgICAgICAnZ2F0aGVyJywKKyAgICAgICdqb2luX29yZGVyJywKKyAgICAgICdqb2lu X3N0cmF0ZWd5JywKKyAgICAgICdsb2NhbF9jb2xsZWN0b3InLAorICAgICAgJ3BhcnRpdGlvbndp c2UnLAorICAgICAgJ3ByZXBhcmVkJywKKyAgICAgICdzY2FuJywKKyAgICAgICdzZW1pam9pbics CisgICAgICAnc3ludGF4JywKKyAgICBdLAorICB9LAorICAndGFwJzogeworICAgICd0ZXN0cyc6 IFsKKyAgICAgICd0LzAwMV9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ1MGM0MjA0MGZkCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbApAQCAtMCwwICsx LDQzIEBACisvKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3Fs ICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0 aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gcGdf cGxhbl9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04g cGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RV TEVfUEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdF IEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9h ZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2Nv bGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5D VElPTiBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgKKwlPVVQgaWQgYmlnaW50LAorCU9V VCB1c2VyaWQgb2lkLAorCU9VVCBkYmlkIG9pZCwKKwlPVVQgcXVlcnlpZCBiaWdpbnQsCisJT1VU IGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKwlPVVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2 aWNlIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywg J3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NS RUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoCisJT1VUIGlkIGJp Z2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmln aW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQs CisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9Q QVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UnCitMQU5HVUFHRSBDIFNU UklDVDsKKworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVk X2FkdmljZSgpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfY29s bGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdfcGxhbl9hZHZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u Y2NiODY3ZmM5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn X3BsYW5fYWR2aWNlLmMKQEAgLTAsMCArMSw1NjUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHBnX3BsYW5fYWR2aWNlLmMKKyAqCSAgbWFpbiBlbnRyeXBvaW50cyBmb3IgZ2VuZXJhdGlu ZyBhbmQgYXBwbHlpbmcgcGxhbm5lciBhZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNl LmgiCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgor I2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisj aW5jbHVkZSAicGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorI2luY2x1 ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNs dWRlICJjb21tYW5kcy9leHBsYWluLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9mb3Jt YXQuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAiZnVu Y2FwaS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKworUEdfTU9EVUxFX01B R0lDOworCitzdGF0aWMgcGdwYV9zaGFyZWRfc3RhdGUgKnBncGFfc3RhdGUgPSBOVUxMOworc3Rh dGljIGRzYV9hcmVhICpwZ3BhX2RzYV9hcmVhID0gTlVMTDsKK3N0YXRpYyBMaXN0ICphZHZpc29y X2hvb2tfbGlzdCA9IE5JTDsKKworLyogR1VDIHZhcmlhYmxlcyAqLworY2hhcgkgICAqcGdfcGxh bl9hZHZpY2VfYWR2aWNlID0gTlVMTDsKK2Jvb2wJCXBnX3BsYW5fYWR2aWNlX2Fsd2F5c19zdG9y ZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNlOworc3RhdGljIGJvb2wgcGdfcGxhbl9hZHZpY2VfYWx3 YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlID0gdHJ1ZTsKK2Jvb2wJCXBnX3BsYW5fYWR2aWNl X2xvY2FsX2NvbGxlY3RvciA9IGZhbHNlOworaW50CQkJcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29s bGVjdGlvbl9saW1pdCA9IDA7Citib29sCQlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdG9y ID0gZmFsc2U7CitpbnQJCQlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA9 IDA7Citib29sCQlwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrID0gZmFsc2U7CisKKy8qIFNhdmVk IGhvb2sgdmFsdWUgKi8KK3N0YXRpYyBleHBsYWluX3Blcl9wbGFuX2hvb2tfdHlwZSBwcmV2X2V4 cGxhaW5fcGVyX3BsYW4gPSBOVUxMOworCisvKiBPdGhlciBmaWxlLWxldmVsIGdsb2JhbHMgKi8K K3N0YXRpYyBpbnQJZXNfZXh0ZW5zaW9uX2lkOworc3RhdGljIE1lbW9yeUNvbnRleHQgcGdwYV9t ZW1vcnlfY29udGV4dCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHBncGFfaW5pdF9zaGFyZWRfc3Rh dGUodm9pZCAqcHRyLCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhw bGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUgKmVzLAorCQkJCQkJCQkJCQkJICBEZWZF bGVtICpvcHQsCisJCQkJCQkJCQkJCQkgIFBhcnNlU3RhdGUgKnBzdGF0ZSk7CitzdGF0aWMgdm9p ZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFuX2hvb2soUGxhbm5lZFN0bXQgKnBsYW5u ZWRzdG10LAorCQkJCQkJCQkJCQkJIEludG9DbGF1c2UgKmludG8sCisJCQkJCQkJCQkJCQkgRXhw bGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJ CQkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkJCQkJCSBRdWVyeUVudmly b25tZW50ICpxdWVyeUVudik7CitzdGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hl Y2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsCisJCQkJCQkJCQkJCSBHdWNTb3Vy Y2Ugc291cmNlKTsKK3N0YXRpYyBEZWZFbGVtICpmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0 ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1 bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFy aWFibGUoInBnX3BsYW5fYWR2aWNlLmFkdmljZSIsCisJCQkJCQkJICAgImFkdmljZSB0byBhcHBs eSBkdXJpbmcgcXVlcnkgcGxhbm5pbmciLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgJnBn X3BsYW5fYWR2aWNlX2FkdmljZSwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIFBHQ19VU0VS U0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNr X2hvb2ssCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKworCURlZmluZUN1c3Rv bUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2 aWNlIiwKKwkJCQkJCQkgIkVYUExBSU4gb3V0cHV0IGluY2x1ZGVzIHN1cHBsaWVkIGFkdmljZSBl dmVuIHdpdGhvdXQgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJ CQkgJnBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSwKKwkJCQkJ CQkgdHJ1ZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJCQkJIDAsCisJCQkJCQkJIE5VTEws CisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlh YmxlKCJwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMiLAorCQkJCQkJ CSAiR2VuZXJhdGUgYWR2aWNlIHN0cmluZ3MgZXZlbiB3aGVuIHNlZW1pbmdseSBub3QgcmVxdWly ZWQiLAorCQkJCQkJCSAiVXNlIHRoaXMgb3B0aW9uIHRvIHNlZSBnZW5lcmF0ZWQgYWR2aWNlIGZv ciBwcmVwYXJlZCBxdWVyaWVzLiIsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV9hbHdheXNfc3Rv cmVfYWR2aWNlX2RldGFpbHMsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfVVNFUlNFVCwK KwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCk7 CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxl Y3RvciIsCisJCQkJCQkJICJFbmFibGUgdGhlIGxvY2FsIGFkdmljZSBjb2xsZWN0b3IuIiwKKwkJ CQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvciwKKwkJ CQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBO VUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZh cmlhYmxlKCJwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQki IyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gcGVyLWJhY2tlbmQgbWVtb3J5IiwKKwkJ CQkJCQlOVUxMLAorCQkJCQkJCSZwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0NfVVNFUlNFVCwKKwkJ CQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCURl ZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvciIs CisJCQkJCQkJICJFbmFibGUgdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJ IE5VTEwsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdG9yLAorCQkJCQkJ CSBmYWxzZSwKKwkJCQkJCQkgUEdDX1NVU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAor CQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxl KCJwZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2Yg YWR2aWNlIGVudHJpZXMgdG8gcmV0YWluIGluIHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJCU5VTEws CisJCQkJCQkJJnBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJ CTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0NfU1VTRVQsCisJCQkJCQkJMCwKKwkJ CQkJCQlOVUxMLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCk7CisKKwlEZWZpbmVDdXN0b21C b29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2siLAorCQkJCQkJCSAiRW1pdCBk ZWJ1Z2dpbmcgbWVzc2FnZXMgc2hvd2luZyB0aGUgY29tcHV0ZWQgc3RyYXRlZ3kgbWFzayBmb3Ig ZWFjaCByZWxhdGlvbiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV90 cmFjZV9tYXNrLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJCQkJ IDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJTWFy a0dVQ1ByZWZpeFJlc2VydmVkKCJwZ19wbGFuX2FkdmljZSIpOworCisJLyogR2V0IGFuIElEIHRo YXQgd2UgY2FuIHVzZSB0byBjYWNoZSBkYXRhIGluIGFuIEV4cGxhaW5TdGF0ZS4gKi8KKwllc19l eHRlbnNpb25faWQgPSBHZXRFeHBsYWluRXh0ZW5zaW9uSWQoInBnX3BsYW5fYWR2aWNlIik7CisK KwkvKiBSZWdpc3RlciB0aGUgbmV3IEVYUExBSU4gb3B0aW9ucyBpbXBsZW1lbnRlZCBieSB0aGlz IG1vZHVsZS4gKi8KKwlSZWdpc3RlckV4dGVuc2lvbkV4cGxhaW5PcHRpb24oInBsYW5fYWR2aWNl IiwKKwkJCQkJCQkJICAgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcik7CisK KwkvKiBJbnN0YWxsIGhvb2tzICovCisJcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3MoKTsKKwlw cmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBleHBsYWluX3Blcl9wbGFuX2hvb2s7CisJZXhwbGFpbl9w ZXJfcGxhbl9ob29rID0gcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rOworfQor CisvKgorICogSW5pdGlhbGl6ZSBzaGFyZWQgc3RhdGUgd2hlbiBmaXJzdCBjcmVhdGVkLgorICov CitzdGF0aWMgdm9pZAorcGdwYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFy ZykKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSAocGdwYV9zaGFyZWRfc3RhdGUgKikg cHRyOworCisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdGUtPmxvY2ssIExXTG9ja05ld1RyYW5jaGVJ ZCgicGdfcGxhbl9hZHZpY2VfbG9jayIpKTsKKwlzdGF0ZS0+ZHNhX3RyYW5jaGUgPSBMV0xvY2tO ZXdUcmFuY2hlSWQoInBnX3BsYW5fYWR2aWNlX2RzYSIpOworCXN0YXRlLT5hcmVhID0gRFNBX0hB TkRMRV9JTlZBTElEOworCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0gSW52YWxpZERzYVBvaW50 ZXI7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbWVtb3J5IGNvbnRleHQgd2hl cmUgbG9uZy1saXZlZCBkYXRhIG1hbmFnZWQgYnkgdGhpcworICogbW9kdWxlIGNhbiBiZSBzdG9y ZWQuCisgKi8KK01lbW9yeUNvbnRleHQKK3BnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpCit7 CisJaWYgKHBncGFfbWVtb3J5X2NvbnRleHQgPT0gTlVMTCkKKwkJcGdwYV9tZW1vcnlfY29udGV4 dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJ CSJwZ19wbGFuX2FkdmljZSIsCisJCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7 CisKKwlyZXR1cm4gcGdwYV9tZW1vcnlfY29udGV4dDsKK30KKworLyoKKyAqIEdldCBhIHBvaW50 ZXIgdG8gb3VyIHNoYXJlZCBzdGF0ZS4KKyAqCisgKiBJZiBubyBzaGFyZWQgc3RhdGUgZXhpc3Rz LCBjcmVhdGUgYW5kIGluaXRpYWxpemUgaXQuIElmIGl0IGRvZXMgZXhpc3QgYnV0CisgKiB0aGlz IGJhY2tlbmQgaGFzIG5vdCB5ZXQgYWNjZXNzZWQgaXQsIGF0dGFjaCB0byBpdC4gT3RoZXJ3aXNl LCBqdXN0IHJldHVybgorICogb3VyIGNhY2hlZCBwb2ludGVyLgorICoKKyAqIEFsb25nIHRoZSB3 YXksIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgTFdMb2NrIHRyYW5jaGVzIGFyZSByZWdpc3RlcmVk LgorICovCitwZ3BhX3NoYXJlZF9zdGF0ZSAqCitwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCkK K3sKKwlpZiAocGdwYV9zdGF0ZSA9PSBOVUxMKQorCXsKKwkJYm9vbAkJZm91bmQ7CisKKwkJcGdw YV9zdGF0ZSA9CisJCQlHZXROYW1lZERTTVNlZ21lbnQoInBnX3BsYW5fYWR2aWNlIiwgc2l6ZW9m KHBncGFfc2hhcmVkX3N0YXRlKSwKKwkJCQkJCQkgICBwZ3BhX2luaXRfc2hhcmVkX3N0YXRlLCAm Zm91bmQsIE5VTEwpOworCX0KKworCXJldHVybiBwZ3BhX3N0YXRlOworfQorCisvKgorICogUmV0 dXJuIGEgcG9pbnRlciB0byBwZ19wbGFuX2FkdmljZSdzIERTQSBhcmVhLCBjcmVhdGluZyBpdCBp ZiBuZWVkZWQuCisgKi8KK2RzYV9hcmVhICoKK3BnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKHZvaWQp Cit7CisJaWYgKHBncGFfZHNhX2FyZWEgPT0gTlVMTCkKKwl7CisJCXBncGFfc2hhcmVkX3N0YXRl ICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCQlkc2FfaGFuZGxlCWFyZWFfaGFu ZGxlOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKworCQlMV0xvY2tB Y3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJYXJlYV9oYW5kbGUgPSBzdGF0 ZS0+YXJlYTsKKwkJaWYgKGFyZWFfaGFuZGxlID09IERTQV9IQU5ETEVfSU5WQUxJRCkKKwkJewor CQkJcGdwYV9kc2FfYXJlYSA9IGRzYV9jcmVhdGUoc3RhdGUtPmRzYV90cmFuY2hlKTsKKwkJCWRz YV9waW4ocGdwYV9kc2FfYXJlYSk7CisJCQlzdGF0ZS0+YXJlYSA9IGRzYV9nZXRfaGFuZGxlKHBn cGFfZHNhX2FyZWEpOworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQl9CisJCWVs c2UKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcGdwYV9kc2FfYXJl YSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9CisKKwkJZHNhX3Bpbl9tYXBwaW5nKHBn cGFfZHNhX2FyZWEpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9 CisKKwlyZXR1cm4gcGdwYV9kc2FfYXJlYTsKK30KKworLyoKKyAqIFdhcyB0aGUgUExBTl9BRFZJ Q0Ugb3B0aW9uIHNwZWNpZmllZCBhbmQgbm90IHNldCB0byBmYWxzZT8KKyAqLworYm9vbAorcGdf cGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oRXhwbGFpblN0YXRlICplcykKK3sKKwlib29sCSAg ICpwbGFuX2FkdmljZSA9IE5VTEw7CisKKwlpZiAoZXMgIT0gTlVMTCkKKwkJcGxhbl9hZHZpY2Ug PSBHZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCk7CisJcmV0dXJu IHBsYW5fYWR2aWNlICE9IE5VTEwgJiYgKnBsYW5fYWR2aWNlOworfQorCisvKgorICogR2V0IHRo ZSBhZHZpY2UgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGlsZSBwbGFubmluZyBhIHBhcnRpY3VsYXIg cXVlcnkuCisgKi8KK2NoYXIgKgorcGdfcGxhbl9hZHZpY2VfZ2V0X3N1cHBsaWVkX3F1ZXJ5X2Fk dmljZShQbGFubmVyR2xvYmFsICpnbG9iLAorCQkJCQkJCQkJCSBRdWVyeSAqcGFyc2UsCisJCQkJ CQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkgaW50IGN1cnNvck9w dGlvbnMsCisJCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJTGlzdENlbGwgICAqbGM7 CisKKwkvKgorCSAqIElmIGFueSBhZHZpc29ycyBhcmUgbG9hZGVkLCBjb25zdWx0IHRoZW0uIFRo ZSBmaXJzdCBvbmUgdGhhdCBwcm9kdWNlcyBhCisJICogbm9uLU5VTEwgc3RyaW5nIHdpbnMuCisJ ICovCisJZm9yZWFjaChsYywgYWR2aXNvcl9ob29rX2xpc3QpCisJeworCQlwZ19wbGFuX2Fkdmlj ZV9hZHZpc29yX2hvb2sgaG9vayA9IGxmaXJzdChsYyk7CisJCWNoYXIJICAgKmFkdmljZV9zdHJp bmc7CisKKwkJYWR2aWNlX3N0cmluZyA9ICgqaG9vaykgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJp bmcsIGN1cnNvck9wdGlvbnMsIGVzKTsKKwkJaWYgKGFkdmljZV9zdHJpbmcgIT0gTlVMTCkKKwkJ CXJldHVybiBhZHZpY2Vfc3RyaW5nOworCX0KKworCS8qIE90aGVyd2lzZSwganVzdCB1c2UgdGhl IHZhbHVlIG9mIHRoZSBHVUMuICovCisJcmV0dXJuIHBnX3BsYW5fYWR2aWNlX2FkdmljZTsKK30K KworLyoKKyAqIEFkZCBhbiBhZHZpc29yLCB3aGljaCBjYW4gc3VwcGx5IGFkdmljZSBzdHJpbmdz IHRvIGJlIHVzZWQgZHVyaW5nIGZ1dHVyZQorICogcXVlcnkgcGxhbm5pbmcgb3BlcmF0aW9ucy4K KyAqCisgKiBUaGUgYWR2aXNvciBzaG91bGQgcmV0dXJuIE5VTEwgaWYgaXQgaGFzIG5vIGFkdmlj ZSBzdHJpbmcgdG8gb2ZmZXIgZm9yIGEKKyAqIGdpdmVuIHF1ZXJ5LiBJZiBtdWx0aXBsZSBhZHZp c29ycyBhcmUgYWRkZWQsIHRoZXkgd2lsbCBiZSBjb25zdWx0ZWQgaW4gdGhlCisgKiBvcmRlciBh ZGRlZCB1bnRpbCBvbmUgb2YgdGhlbSByZXR1cm5zIGEgbm9uLU5VTEwgdmFsdWUuCisgKi8KK3Zv aWQKK3BnX3BsYW5fYWR2aWNlX2FkZF9hZHZpc29yKHBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9v ayBob29rKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCW9sZGNvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQoKSk7CisJYWR2aXNv cl9ob29rX2xpc3QgPSBsYXBwZW5kKGFkdmlzb3JfaG9va19saXN0LCBob29rKTsKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBSZW1vdmUgYW4gYWR2aXNv ci4KKyAqLwordm9pZAorcGdfcGxhbl9hZHZpY2VfcmVtb3ZlX2Fkdmlzb3IocGdfcGxhbl9hZHZp Y2VfYWR2aXNvcl9ob29rIGhvb2spCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJ b2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4 dCgpKTsKKwlhZHZpc29yX2hvb2tfbGlzdCA9IGxpc3RfZGVsZXRlX3B0cihhZHZpc29yX2hvb2tf bGlzdCwgaG9vayk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCisv KgorICogSGFuZGxlciBmb3IgRVhQTEFJTiAoUExBTl9BRFZJQ0UpLgorICovCitzdGF0aWMgdm9p ZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUgKmVz LCBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkgIFBhcnNlU3RhdGUgKnBzdGF0ZSkKK3sKKwlib29s CSAgICpwbGFuX2FkdmljZTsKKworCXBsYW5fYWR2aWNlID0gR2V0RXhwbGFpbkV4dGVuc2lvblN0 YXRlKGVzLCBlc19leHRlbnNpb25faWQpOworCisJaWYgKHBsYW5fYWR2aWNlID09IE5VTEwpCisJ eworCQlwbGFuX2FkdmljZSA9IHBhbGxvYzBfb2JqZWN0KGJvb2wpOworCQlTZXRFeHBsYWluRXh0 ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCwgcGxhbl9hZHZpY2UpOworCX0KKworCSpw bGFuX2FkdmljZSA9IGRlZkdldEJvb2xlYW4ob3B0KTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBz dHJpbmcgdGhhdCBpcyBsaWtlbHkgdG8gY29uc2lzdCBvZiBtdWx0aXBsZSBsaW5lcyBpbiBFWFBM QUlOCisgKiBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWlu X3RleHRfbXVsdGlsaW5lKEV4cGxhaW5TdGF0ZSAqZXMsIGNoYXIgKnFsYWJlbCwKKwkJCQkJCQkJ CSAgY2hhciAqdmFsdWUpCit7CisJY2hhcgkgICAqczsKKworCS8qIEZvciBub24tdGV4dCBmb3Jt YXRzLCBpdCdzIGJlc3Qgbm90IHRvIGFkZCBhbnkgc3BlY2lhbCBoYW5kbGluZy4gKi8KKwlpZiAo ZXMtPmZvcm1hdCAhPSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCXsKKwkJRXhwbGFpblByb3BlcnR5 VGV4dChxbGFiZWwsIHZhbHVlLCBlcyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbiB0ZXh0IGZv cm1hdCwgaWYgdGhlcmUgaXMgbm8gZGF0YSwgZGlzcGxheSBub3RoaW5nLiAqLworCWlmICgqdmFs dWUgPT0gJ1wwJykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJdCBsb29rcyBuaWNlc3QgdG8gaW5k ZW50IGVhY2ggbGluZSBvZiB0aGUgYWR2aWNlIHNlcGFyYXRlbHksIGJlZ2lubmluZworCSAqIG9u IHRoZSBsaW5lIGJlbG93IHRoZSBsYWJlbC4KKwkgKi8KKwlFeHBsYWluSW5kZW50VGV4dChlcyk7 CisJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiJXM6XG4iLCBxbGFiZWwpOworCWVzLT5pbmRl bnQrKzsKKwl3aGlsZSAoKHMgPSBzdHJjaHIodmFsdWUsICdcbicpKSAhPSBOVUxMKQorCXsKKwkJ RXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGVzLT5zdHIs IHZhbHVlLCAocyAtIHZhbHVlKSArIDEpOworCQl2YWx1ZSA9IHMgKyAxOworCX0KKworCS8qIERv bid0IGludGVycHJldCBhIHRlcm1pbmFsIG5ld2xpbmUgYXMgYSByZXF1ZXN0IGZvciBhbiBlbXB0 eSBsaW5lLiAqLworCWlmICgqdmFsdWUgIT0gJ1wwJykKKwl7CisJCUV4cGxhaW5JbmRlbnRUZXh0 KGVzKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiJXNcbiIsIHZhbHVlKTsKKwl9CisK Kwllcy0+aW5kZW50LS07Cit9CisKKy8qCisgKiBBZGQgYWR2aWNlIGZlZWRiYWNrIHRvIHRoZSBF WFBMQUlOIG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5f ZmVlZGJhY2soRXhwbGFpblN0YXRlICplcywgTGlzdCAqZmVlZGJhY2spCit7CisJU3RyaW5nSW5m b0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9yZWFjaF9ub2RlKERlZkVs ZW0sIGl0ZW0sIGZlZWRiYWNrKQorCXsKKwkJaW50CQkJZmxhZ3MgPSBkZWZHZXRJbnQzMihpdGVt KTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlcyAvKiAiLCBpdGVtLT5kZWZuYW1lKTsK KwkJaWYgKChmbGFncyAmIFBHUEFfVEVfTUFUQ0hfRlVMTCkgIT0gMCkKKwkJeworCQkJQXNzZXJ0 KChmbGFncyAmIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCkgIT0gMCk7CisJCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsICJtYXRjaGVkIik7CisJCX0KKwkJZWxzZSBpZiAoKGZsYWdzICYgUEdQQV9URV9N QVRDSF9QQVJUSUFMKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAicGFydGlhbGx5 IG1hdGNoZWQiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAibm90IG1hdGNo ZWQiKTsKKwkJaWYgKChmbGFncyAmIFBHUEFfVEVfSU5BUFBMSUNBQkxFKSAhPSAwKQorCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBpbmFwcGxpY2FibGUiKTsKKwkJaWYgKChmbGFncyAmIFBH UEFfVEVfQ09ORkxJQ1RJTkcpICE9IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIsIGNv bmZsaWN0aW5nIik7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0ZBSUxFRCkgIT0gMCkKKwkJCWFw cGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwgZmFpbGVkIik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIiAqL1xuIik7CisJfQorCisJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGlu ZShlcywgIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiwKKwkJCQkJCQkJCQkgIGJ1Zi5kYXRhKTsKK30K KworLyoKKyAqIEFkZCByZWxldmFudCBkZXRhaWxzLCBpZiBhbnksIHRvIHRoZSBFWFBMQUlOIG91 dHB1dCBmb3IgYSBzaW5nbGUgcGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNl X2V4cGxhaW5fcGVyX3BsYW5faG9vayhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJ CQkgSW50b0NsYXVzZSAqaW50bywKKwkJCQkJCQkJCSBFeHBsYWluU3RhdGUgKmVzLAorCQkJCQkJ CQkJIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkJCQkJIFBhcmFtTGlzdEluZm8gcGFy YW1zLAorCQkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQoreworCWJvb2wJCXNo b3VsZF9leHBsYWluOworCURlZkVsZW0gICAgKnBncGFfaXRlbTsKKwlMaXN0CSAgICpwZ3BhX2xp c3Q7CisKKwlpZiAocHJldl9leHBsYWluX3Blcl9wbGFuKQorCQlwcmV2X2V4cGxhaW5fcGVyX3Bs YW4ocGxhbm5lZHN0bXQsIGludG8sIGVzLCBxdWVyeVN0cmluZywgcGFyYW1zLAorCQkJCQkJCSAg cXVlcnlFbnYpOworCisJLyogU2hvdWxkIGFuIGFkdmljZSBzdHJpbmcgYmUgcGFydCBvZiB0aGUg RVhQTEFJTiBvdXRwdXQ/ICovCisJc2hvdWxkX2V4cGxhaW4gPSBwZ19wbGFuX2FkdmljZV9zaG91 bGRfZXhwbGFpbihlcyk7CisKKwkvKiBGaW5kIGFueSBkYXRhIHBncGFfcGxhbm5lcl9zaHV0ZG93 biBzdGFzaGVkIGluIHRoZSBQbGFubmVkU3RtdC4gKi8KKwlwZ3BhX2l0ZW0gPSBmaW5kX2RlZmVs ZW1fYnlfZGVmbmFtZShwbGFubmVkc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAorCQkJCQkJCQkJCSJw Z19wbGFuX2FkdmljZSIpOworCXBncGFfbGlzdCA9IHBncGFfaXRlbSA9PSBOVUxMID8gTlVMTCA6 IChMaXN0ICopIHBncGFfaXRlbS0+YXJnOworCisJLyoKKwkgKiBCeSBkZWZhdWx0LCBpZiB0aGVy ZSBpcyBhIHJlY29yZCBvZiBhdHRlbXB0aW5nIHRvIGFwcGx5IGFkdmljZSBkdXJpbmcKKwkgKiBx dWVyeSBwbGFubmluZywgd2UgYWx3YXlzIG91dHB1dCB0aGF0IGluZm9ybWF0aW9uLCBidXQgdGhl IHVzZXIgY2FuIHNldAorCSAqIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVk X2FkdmljZSA9IGZhbHNlIHRvIHN1cHByZXNzIHRoYXQKKwkgKiBiZWhhdmlvci4gSWYgdGhleSBk bywgd2UnbGwgb25seSBkaXNwbGF5IGl0IHdoZW4gdGhlIFBMQU5fQURWSUNFIG9wdGlvbgorCSAq IHdhcyBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8gZmFsc2UuCisJICoKKwkgKiBOQjogSWYgd2Un cmUgZXhwbGFpbmluZyBhIHF1ZXJ5IHBsYW5uZWQgYmVmb3JlaGFuZCAtLSBpLmUuIGEgcHJlcGFy ZWQKKwkgKiBzdGF0ZW1lbnQgLS0gdGhlIGFwcGxpY2F0aW9uIG9mIHF1ZXJ5IGFkdmljZSBtYXkg bm90IGhhdmUgYmVlbgorCSAqIHJlY29yZGVkLCBhbmQgdGhlcmVmb3JlIHRoaXMgd29uJ3QgYmUg YWJsZSB0byBzaG93IGFueXRoaW5nLiBVc2UKKwkgKiBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3Rv cmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlIHRvIHdvcmsgYXJvdW5kIHRoaXMuCisJICovCisJaWYg KHBncGFfbGlzdCAhPSBOVUxMICYmIChwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBw bGllZF9hZHZpY2UgfHwKKwkJCQkJCQkgIHNob3VsZF9leHBsYWluKSkKKwl7CisJCURlZkVsZW0g ICAgKmZlZWRiYWNrOworCisJCWZlZWRiYWNrID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGdw YV9saXN0LCAiZmVlZGJhY2siKTsKKwkJaWYgKGZlZWRiYWNrICE9IE5VTEwpCisJCQlwZ19wbGFu X2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKGVzLCAoTGlzdCAqKSBmZWVkYmFjay0+YXJnKTsKKwl9 CisKKwkvKgorCSAqIElmIHRoZSBQTEFOX0FEVklDRSBvcHRpb24gd2FzIHNwZWNpZmllZCAtLSBh bmQgbm90IHNlbnQgdG8gRkFMU0UgLS0KKwkgKiBzaG93IGdlbmVyYXRlZCBhZHZpY2UuCisJICov CisJaWYgKHNob3VsZF9leHBsYWluKQorCXsKKwkJRGVmRWxlbSAgICAqYWR2aWNlX3N0cmluZ19p dGVtOworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5nID0gTlVMTDsKKworCQlhZHZpY2Vfc3RyaW5n X2l0ZW0gPQorCQkJZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGdwYV9saXN0LCAiYWR2aWNlX3N0 cmluZyIpOworCQlpZiAoYWR2aWNlX3N0cmluZ19pdGVtICE9IE5VTEwpCisJCXsKKwkJCWFkdmlj ZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVtLT5hcmcpOworCQkJcGdfcGxhbl9h ZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIkdlbmVyYXRlZCBQbGFuIEFkdmljZSIs CisJCQkJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcpOworCQl9CisJfQorfQorCisvKgorICogQ2hl Y2sgaG9vayBmb3IgcGdfcGxhbl9hZHZpY2UuYWR2aWNlCisgKi8KK3N0YXRpYyBib29sCitwZ19w bGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEs IEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCU1lbW9y eUNvbnRleHQgdG1wY29udGV4dDsKKwljaGFyCSAgICplcnJvcjsKKworCWlmICgqbmV3dmFsID09 IE5VTEwpCisJCXJldHVybiB0cnVlOworCisJdG1wY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENy ZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgICJwZ19wbGFuX2FkdmljZS5h ZHZpY2UiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjb250ZXh0KTsKKworCS8qCisJICogSXQgd291 bGQgYmUgbmljZSB0byBzYXZlIHRoZSBwYXJzZSB0cmVlIHRoYXQgd2UgY29uc3RydWN0IGhlcmUg Zm9yCisJICogZXZlbnR1YWwgdXNlIHdoZW4gcGxhbm5pbmcgd2l0aCB0aGlzIGFkdmljZSwgYnV0 ICpleHRyYSBjYW4gb25seSBwb2ludAorCSAqIHRvIGEgc2luZ2xlIGd1Y19tYWxsb2MnZCBjaHVu aywgYW5kIG91ciBwYXJzZSB0cmVlIGludm9sdmVzIGFuCisJICogYXJiaXRyYXJ5IG51bWJlciBv ZiBtZW1vcnkgYWxsb2NhdGlvbnMuCisJICovCisJKHZvaWQpIHBncGFfcGFyc2UoKm5ld3ZhbCwg JmVycm9yKTsKKworCWlmIChlcnJvciAhPSBOVUxMKQorCXsKKwkJR1VDX2NoZWNrX2VycmRldGFp bCgiQ291bGQgbm90IHBhcnNlIGFkdmljZTogJXMiLCBlcnJvcik7CisJCXJldHVybiBmYWxzZTsK Kwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4 dERlbGV0ZSh0bXBjb250ZXh0KTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2VhcmNo IGEgbGlzdCBvZiBEZWZFbGVtIG9iamVjdHMgZm9yIGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3Rh dGljIERlZkVsZW0gKgorZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hh ciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7 CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVmbmFtZSwgZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBp dGVtOworCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z19wbGFuX2FkdmljZS5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5hYTZmZGM5ZTdiMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbApAQCAtMCwwICsxLDUgQEAKKyMgcGdfcGxhbl9hZHZp Y2UgZXh0ZW5zaW9uCitjb21tZW50ID0gJ2hlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBw bGFuJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGly L3BnX3BsYW5fYWR2aWNlJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjBkYzUyOTgzNjIxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z19wbGFuX2FkdmljZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHBnX3BsYW5fYWR2aWNlLmgKKyAqCSAgbWFpbiBoZWFkZXIgZmlsZSBmb3IgcGdfcGxhbl9h ZHZpY2UgY29udHJpYiBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aWZuZGVmIFBHX1BMQU5fQURWSUNFX0gKKyNkZWZpbmUgUEdfUExBTl9BRFZJQ0VfSAorCisjaW5j bHVkZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgorI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rl cy5oIgorI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHds b2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfc2hh cmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hlOworCWRzYV9o YW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFyZWRfY29sbGVjdG9yOworfSBwZ3BhX3NoYXJl ZF9zdGF0ZTsKKworLyogSG9vayBmb3Igb3RoZXIgcGx1Z2lucyB0byBzdXBwbHkgYWR2aWNlIHN0 cmluZ3MgKi8KK3R5cGVkZWYgY2hhciAqKCpwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2spIChQ bGFubmVyR2xvYmFsICpnbG9iLAorCQkJCQkJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJ CQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCSAgaW50IGN1cnNvck9w dGlvbnMsCisJCQkJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CisKKy8qIEdVQyB2YXJpYWJs ZXMgKi8KK2V4dGVybiBjaGFyICpwZ19wbGFuX2FkdmljZV9hZHZpY2U7CitleHRlcm4gYm9vbCBw Z19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHM7CitleHRlcm4gYm9vbCBw Z19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0b3I7CitleHRlcm4gaW50CXBnX3BsYW5fYWR2aWNl X2xvY2FsX2NvbGxlY3Rpb25fbGltaXQ7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9zaGFy ZWRfY29sbGVjdG9yOworZXh0ZXJuIGludAlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlv bl9saW1pdDsKK2V4dGVybiBib29sIHBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2s7CisKKy8qIEZ1 bmN0aW9uIHByb3RvdHlwZXMgKGZvciB1c2UgYnkgcGdfcGxhbl9hZHZpY2UgaXRzZWxmKSAqLwor ZXh0ZXJuIE1lbW9yeUNvbnRleHQgcGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQodm9pZCk7CitleHRl cm4gcGdwYV9zaGFyZWRfc3RhdGUgKnBnX3BsYW5fYWR2aWNlX2F0dGFjaCh2b2lkKTsKK2V4dGVy biBkc2FfYXJlYSAqcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEodm9pZCk7CitleHRlcm4gYm9vbCBw Z19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihFeHBsYWluU3RhdGUgKmVzKTsKK2V4dGVybiBj aGFyICpwZ19wbGFuX2FkdmljZV9nZXRfc3VwcGxpZWRfcXVlcnlfYWR2aWNlKFBsYW5uZXJHbG9i YWwgKmdsb2IsCisJCQkJCQkJCQkJCQkJICBRdWVyeSAqcGFyc2UsCisJCQkJCQkJCQkJCQkJICBj b25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9u cywKKwkJCQkJCQkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOworCisvKiBGdW5jdGlvbiBwcm90 b3R5cGVzIChmb3IgdXNlIGJ5IG90aGVyIHBsdWdpbnMpICovCitleHRlcm4gUEdETExFWFBPUlQg dm9pZCBwZ19wbGFuX2FkdmljZV9hZGRfYWR2aXNvcihwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hv b2sgaG9vayk7CitleHRlcm4gUEdETExFWFBPUlQgdm9pZCBwZ19wbGFuX2FkdmljZV9yZW1vdmVf YWR2aXNvcihwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vayk7CisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2FzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi44NWJkNzQ4NTlkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9hc3QuYwpAQCAtMCwwICsxLDM1MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdwYV9hc3QuYworICoJICBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgY29kZSByZWxhdGVkIHRv IHBsYW4gYWR2aWNlIHBhcnNpbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9hc3QuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2luY2x1ZGUgImZ1 bmNhcGkuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCisKK3N0YXRpYyBib29sIHBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KGludCBu cmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFy Z2V0ICp0YXJnZXQsCisJCQkJCQkJCQkJICBib29sICpyaWRzX3VzZWQpOworCisvKgorICogR2V0 IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIGFkdmljZSB0YWcu CisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5 cGUgYWR2aWNlX3RhZykKK3sKKwlzd2l0Y2ggKGFkdmljZV90YWcpCisJeworCQljYXNlIFBHUEFf VEFHX0JJVE1BUF9IRUFQX1NDQU46CisJCQlyZXR1cm4gIkJJVE1BUF9IRUFQX1NDQU4iOworCQlj YXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiAiRk9SRUlHTl9KT0lOIjsKKwkJ Y2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQV9U QUdfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRIRVJfTUVSR0UiOworCQljYXNlIFBHUEFf VEFHX0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwkJY2FzZSBQR1BBX1RBR19J TkRFWF9PTkxZX1NDQU46CisJCQlyZXR1cm4gIklOREVYX09OTFlfU0NBTiI7CisJCWNhc2UgUEdQ QV9UQUdfSU5ERVhfU0NBTjoKKwkJCXJldHVybiAiSU5ERVhfU0NBTiI7CisJCWNhc2UgUEdQQV9U QUdfSk9JTl9PUkRFUjoKKwkJCXJldHVybiAiSk9JTl9PUkRFUiI7CisJCWNhc2UgUEdQQV9UQUdf TUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9NQVRFUklBTEla RSI7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiAiTUVSR0Vf Sk9JTl9QTEFJTiI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJ CQlyZXR1cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNU RURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2Fz ZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExB SU4iOworCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoKKwkJCXJldHVybiAiTk9fR0FUSEVSIjsK KwkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuICJQQVJUSVRJT05XSVNF IjsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1J Sk9JTl9OT05fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisJCQly ZXR1cm4gIlNFTUlKT0lOX1VOSVFVRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQly ZXR1cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoKKwkJCXJldHVybiAi VElEX1NDQU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisK Ky8qCisgKiBDb252ZXJ0IGFuIGFkdmljZSB0YWcsIGZvcm1hdHRlZCBhcyBhIHN0cmluZyB0aGF0 IGhhcyBhbHJlYWR5IGJlZW4KKyAqIGRvd25jYXNlZCBhcyBhcHByb3ByaWF0ZSwgdG8gYSBwZ3Bh X2FkdmljZV90YWdfdHlwZS4KKyAqCisgKiBJZiB3ZSBzdWNjZWVkLCBzZXQgKmZhaWwgPSBmYWxz ZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQ7IGlmIHdlIGZhaWwsCisgKiBzZXQgKmZhaWwgPSB0cnVl IGFuZCByZXVybiBhbiBhcmJpdHJhcnkgdmFsdWUuCisgKi8KK3BncGFfYWR2aWNlX3RhZ190eXBl CitwZ3BhX3BhcnNlX2FkdmljZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWlsKQorewor CSpmYWlsID0gZmFsc2U7CisKKwlzd2l0Y2ggKHRhZ1swXSkKKwl7CisJCWNhc2UgJ2InOgorCQkJ aWYgKHN0cmNtcCh0YWcsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQ QV9UQUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChz dHJjbXAodGFnLCAiZm9yZWlnbl9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfRk9S RUlHTl9KT0lOOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJn YXRoZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVI7CisJCQlpZiAoc3RyY21w KHRhZywgImdhdGhlcl9tZXJnZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUl9N RVJHRTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiaGFzaF9q b2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSEFTSF9KT0lOOworCQkJYnJlYWs7CisJ CWNhc2UgJ2knOgorCQkJaWYgKHN0cmNtcCh0YWcsICJpbmRleF9zY2FuIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfSU5ERVhfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFnLCAiaW5kZXhfb25s eV9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJ YnJlYWs7CisJCWNhc2UgJ2onOgorCQkJaWYgKHN0cmNtcCh0YWcsICJqb2luX29yZGVyIikgPT0g MCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCWJyZWFrOworCQljYXNlICdt JzoKKwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9pbl9tYXRlcmlhbGl6ZSIpID09IDApCisJ CQkJcmV0dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21w KHRhZywgIm1lcmdlX2pvaW5fcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19NRVJH RV9KT0lOX1BMQUlOOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKHN0cmNtcCh0YWcs ICJuZXN0ZWRfbG9vcF9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05F U1RFRF9MT09QX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9t ZW1vaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRTsK KwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfcGxhaW4iKSA9PSAwKQorCQkJCXJldHVy biBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fZ2F0 aGVyIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fR0FUSEVSOworCQkJYnJlYWs7CisJ CWNhc2UgJ3AnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJwYXJ0aXRpb253aXNlIikgPT0gMCkKKwkJ CQlyZXR1cm4gUEdQQV9UQUdfUEFSVElUSU9OV0lTRTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoK KwkJCWlmIChzdHJjbXAodGFnLCAic2VtaWpvaW5fbm9uX3VuaXF1ZSIpID09IDApCisJCQkJcmV0 dXJuIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRhZywgInNl bWlqb2luX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFV RTsKKwkJCWlmIChzdHJjbXAodGFnLCAic2VxX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BB X1RBR19TRVFfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmIChzdHJjbXAodGFn LCAidGlkX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19USURfU0NBTjsKKwkJCWJy ZWFrOworCX0KKworCS8qIGRpZG4ndCB3b3JrIG91dCAqLworCSpmYWlsID0gdHJ1ZTsKKworCS8q IHJldHVybiBhbiBhcmJpdHJhcnkgdmFsdWUgdG8gdW53aW5kIHRoZSBjYWxsIHN0YWNrICovCisJ cmV0dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOworfQorCisvKgorICogRm9ybWF0IGEgcGdwYV9hZHZp Y2VfdGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEgU3RyaW5nSW5mby4K KyAqLwordm9pZAorcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0ciwgcGdw YV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9U QVJHRVRfSURFTlRJRklFUikKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwkJY2hhcgkgICAq ZGVsaW1zOworCisJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9M SVNUKQorCQkJZGVsaW1zID0gInt9IjsKKwkJZWxzZQorCQkJZGVsaW1zID0gIigpIjsKKworCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1swXSk7CisJCWZvcmVhY2hfcHRyKHBncGFf YWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlp ZiAoZmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KHN0ciwgY2hp bGRfdGFyZ2V0KTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1sxXSk7 CisJfQorCWVsc2UKKwl7CisJCWNvbnN0IGNoYXIgKnJ0X2lkZW50aWZpZXI7CisKKwkJcnRfaWRl bnRpZmllciA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnRhcmdldC0+cmlkKTsKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhzdHIsIHJ0X2lkZW50aWZpZXIpOworCX0KK30KKworLyoKKyAqIEZv cm1hdCBhIHBncGFfaW5kZXhfdGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRv IGEgU3RyaW5nSW5mby4KKyAqLwordm9pZAorcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KFN0cmlu Z0luZm8gc3RyLCBwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCkKK3sKKwlpZiAoaXRhcmdldC0+ aW5kbmFtZXNwYWNlICE9IE5VTEwpCisJCWFwcGVuZFN0cmluZ0luZm8oc3RyLCAiJXMuIiwKKwkJ CQkJCSBxdW90ZV9pZGVudGlmaWVyKGl0YXJnZXQtPmluZG5hbWVzcGFjZSkpOworCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoc3RyLCBxdW90ZV9pZGVudGlmaWVyKGl0YXJnZXQtPmluZG5hbWUpKTsK K30KKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIHR3byBwZ3BhX2luZGV4X3RhcmdldCBvYmpl Y3RzIGFyZSBleGFjdGx5IGlkZW50aWNhbC4KKyAqLworYm9vbAorcGdwYV9pbmRleF90YXJnZXRz X2VxdWFsKHBncGFfaW5kZXhfdGFyZ2V0ICppMSwgcGdwYV9pbmRleF90YXJnZXQgKmkyKQorewor CS8qIGluZG5hbWVzcGFjZSBjYW4gYmUgTlVMTCwgYW5kIHR3byBOVUxMIHZhbHVlcyBhcmUgZXF1 YWwgKi8KKwlpZiAoKGkxLT5pbmRuYW1lc3BhY2UgIT0gTlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNl ICE9IE5VTEwpICYmCisJCShpMS0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwgaTItPmluZG5hbWVz cGFjZSA9PSBOVUxMIHx8CisJCSBzdHJjbXAoaTEtPmluZG5hbWVzcGFjZSwgaTItPmluZG5hbWVz cGFjZSkgIT0gMCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3RyY21wKGkxLT5pbmRuYW1lLCBp Mi0+aW5kbmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisK Ky8qCisgKiBDaGVjayB3aGV0aGVyIGFuIGlkZW50aWZpZXIgbWF0Y2hlcyBhbiBhbnkgcGFydCBv ZiBhbiBhZHZpY2UgdGFyZ2V0LgorICovCitib29sCitwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190 YXJnZXQocGdwYV9pZGVudGlmaWVyICpyaWQsIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQor eworCS8qIEZvciBub24taWRlbnRpZmllcnMsIGNoZWNrIGFsbCBkZXNjZW5kZW50cy4gKi8KKwlp ZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFj aF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4p CisJCXsKKwkJCWlmIChwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocmlkLCBjaGlsZF90 YXJnZXQpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkv KiBTdHJhaWdodGZvcndhcmQgY29tcGFyaXNvbnMgb2YgYWxpYXMgbmFtZSBhbmQgb2NjY3VycmVu Y2UgbnVtYmVyLiAqLworCWlmIChzdHJjbXAocmlkLT5hbGlhc19uYW1lLCB0YXJnZXQtPnJpZC5h bGlhc19uYW1lKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHJpZC0+b2NjdXJyZW5jZSAh PSB0YXJnZXQtPnJpZC5vY2N1cnJlbmNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElm IGEgcmVsYXRpb24gaWRlbnRpZmVyIG1lbnRpb25zIGEgcGFydGl0aW9uIG5hbWUsIGl0IHNob3Vs ZCBhbHNvCisJICogc3BlY2lmeSBhIHBhcnRpdGlvbiBzY2hlbWEuIEJ1dCB0aGUgdGFyZ2V0IG1h eSBsZWF2ZSB0aGUgc2NoZW1hIE5VTEwgdG8KKwkgKiBtYXRjaCBhbnl0aGluZy4KKwkgKi8KKwlB c3NlcnQocmlkLT5wYXJ0bnNwICE9IE5VTEwgfHwgcmlkLT5wYXJ0cmVsID09IE5VTEwpOworCWlm IChyaWQtPnBhcnRuc3AgIT0gTlVMTCAmJiB0YXJnZXQtPnJpZC5wYXJ0bnNwICE9IE5VTEwgJiYK KwkJc3RyY21wKHJpZC0+cGFydG5zcCwgdGFyZ2V0LT5yaWQucGFydG5zcCkgIT0gMCkKKwkJcmV0 dXJuIGZhbHNlOworCisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgY2FuIGJlIE5VTEwgb24gZWl0aGVy IHNpZGUsIGJ1dCBOVUxMIG9ubHkgbWF0Y2hlcyBhbm90aGVyCisJICogTlVMTC4KKwkgKi8KKwlp ZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGFydHJlbCwgdGFyZ2V0LT5yaWQu cGFydHJlbCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9u dWxsKHJpZC0+cGxhbl9uYW1lLCB0YXJnZXQtPnJpZC5wbGFuX25hbWUpKQorCQlyZXR1cm4gZmFs c2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIE1hdGNoIGlkZW50aWZpZXJzIHRvIGFk dmljZSB0YXJnZXRzIGFuZCByZXR1cm4gYW4gZW51bSB2YWx1ZSBpbmRpY2F0aW5nCisgKiB0aGUg cmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHNldCBvZiBrZXlzIGFuZCB0aGUgc2V0IG9mIHRhcmdl dHMuCisgKgorICogU2VlIHRoZSBjb21tZW50cyBmb3IgcGdwYV9pdG1fdHlwZS4KKyAqLworcGdw YV9pdG1fdHlwZQorcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW50IG5yaWRzLCBwZ3Bh X2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkK K3sKKwlib29sCQlhbGxfcmlkc191c2VkID0gdHJ1ZTsKKwlib29sCQlhbnlfcmlkc191c2VkID0g ZmFsc2U7CisJYm9vbAkJYWxsX3RhcmdldHNfdXNlZDsKKwlib29sCSAgICpyaWRzX3VzZWQgPSBw YWxsb2MwX2FycmF5KGJvb2wsIG5yaWRzKTsKKworCWFsbF90YXJnZXRzX3VzZWQgPQorCQlwZ3Bh X2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlkcywgdGFyZ2V0LCByaWRzX3VzZWQp OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBucmlkczsgKytpKQorCXsKKwkJaWYgKHJpZHNfdXNl ZFtpXSkKKwkJCWFueV9yaWRzX3VzZWQgPSB0cnVlOworCQllbHNlCisJCQlhbGxfcmlkc191c2Vk ID0gZmFsc2U7CisJfQorCisJaWYgKGFsbF9yaWRzX3VzZWQpCisJeworCQlpZiAoYWxsX3Rhcmdl dHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9FUVVBTDsKKwkJZWxzZQorCQkJcmV0dXJuIFBH UEFfSVRNX0tFWVNfQVJFX1NVQlNFVDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGFsbF90YXJnZXRz X3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUOworCQllbHNlIGlm IChhbnlfcmlkc191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0lOVEVSU0VDVElORzsKKwkJZWxz ZQorCQkJcmV0dXJuIFBHUEFfSVRNX0RJU0pPSU5UOworCX0KK30KKworLyoKKyAqIFJldHVybnMg dHJ1ZSBpZiBldmVyeSB0YXJnZXQgb3Igc3ViLXRhcmdldCBpcyBtYXRjaGVkIGJ5IGF0IGxlYXN0 IG9uZQorICogaWRlbnRpZmllciwgYW5kIG90aGVyd2lzZSBmYWxzZS4KKyAqCisgKiBBbHNvIHNl dHMgcmlkc191c2VkW2ldID0gdHJ1ZSBmb3IgZWFjaCBpZGVuaWZpZXIgdGhhdCBtYXRjaGVzIGF0 IGxlYXN0IG9uZQorICogdGFyZ2V0LgorICovCitzdGF0aWMgYm9vbAorcGdwYV9pZGVudGlmaWVy c19jb3Zlcl90YXJnZXQoaW50IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJ ICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwgYm9vbCAqcmlkc191c2VkKQoreworCWJvb2wJ CXJlc3VsdCA9IGZhbHNlOworCisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURF TlRJRklFUikKKwl7CisJCXJlc3VsdCA9IHRydWU7CisKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZp Y2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmICgh cGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQobnJpZHMsIHJpZHMsIGNoaWxkX3RhcmdldCwK KwkJCQkJCQkJCQkJICAgcmlkc191c2VkKSkKKwkJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCX0K KwllbHNlCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJCXsKKwkJCWlm IChwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQoJnJpZHNbaV0sIHRhcmdldCkpCisJCQl7 CisJCQkJcmlkc191c2VkW2ldID0gdHJ1ZTsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJfQorCQl9 CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9hc3QuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWQzZjhkNThhNzEKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKQEAgLTAsMCArMSwx ODUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfYXN0LmgKKyAqCSAgYWJzdHJh Y3Qgc3ludGF4IHRyZWVzIGZvciBwbGFuIGFkdmljZSwgcGx1cyBwYXJzZXIvc2Nhbm5lciBzdXBw b3J0CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0 LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX0FTVF9ICisjZGVm aW5lIFBHUEFfQVNUX0gKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorCisjaW5jbHVk ZSAibm9kZXMvcGdfbGlzdC5oIgorCisvKgorICogQWR2aWNlIGl0ZW1zIGdlbmVyYWxseSB0YWtl IHRoZSBmb3JtIFNPTUVfVEFHKGl0ZW0gWy4uLl0pLCB3aGVyZSBhbiBpdGVtCisgKiBjYW4gdGFr ZSB2YXJpb3VzIGZvcm1zLiBUaGUgc2ltcGxlc3QgY2FzZSBpcyBhIHJlbGF0aW9uIGlkZW50aWZp ZXIsIGJ1dAorICogc29tZSB0YWdzIGFsbG93IHN1Ymxpc3RzLCBhbmQgSk9JTl9PUkRFUigpIGFs bG93cyBib3RoIG9yZGVyZWQgYW5kIHVub3JkZXJlZAorICogc3VibGlzdHMuCisgKi8KK3R5cGVk ZWYgZW51bQoreworCVBHUEFfVEFSR0VUX0lERU5USUZJRVIsCQkvKiByZWxhdGlvbiBpZGVudGlm aWVyICovCisJUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNULAkvKiAoaXRlbSAuLi4pICovCisJUEdQ QV9UQVJHRVRfVU5PUkRFUkVEX0xJU1QJLyoge2l0ZW0gLi4ufSAqLworfSBwZ3BhX3RhcmdldF90 eXBlOworCisvKgorICogQW4gaW5kZXggc3BlY2lmaWNhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgcGdwYV9pbmRleF90YXJnZXQKK3sKKwkvKiBJbmRleCBzY2hlbWEgYW5kIG5hbWUgKi8KKwlj aGFyCSAgICppbmRuYW1lc3BhY2U7CisJY2hhcgkgICAqaW5kbmFtZTsKK30gcGdwYV9pbmRleF90 YXJnZXQ7CisKKy8qCisgKiBBIHNpbmdsZSBpdGVtIGFib3V0IHdoaWNoIGFkdmljZSBpcyBiZWlu ZyBnaXZlbiwgd2hpY2ggY291bGQgYmUgZWl0aGVyCisgKiBhIHJlbGF0aW9uIGlkZW50aWZpZXIg dGhhdCB3ZSB3YW50IHRvIGJyZWFrIG91dCBpbnRvIGl0cyBjb25zdGl0dWVudCBmaWVsZHMsCisg KiBvciBhIHN1Ymxpc3Qgb2Ygc29tZSBraW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2Fk dmljZV90YXJnZXQKK3sKKwlwZ3BhX3RhcmdldF90eXBlIHR0eXBlOworCisJLyoKKwkgKiBUaGlz IGZpZWxkIGlzIG1lYW5pbmdmdWwgd2hlbiB0dHlwZSBpcyBQR1BBX1RBUkdFVF9JREVOVElGSUVS LgorCSAqCisJICogQWxsIGlkZW50aWZpZXJzIG11c3QgaGF2ZSBhbiBhbGlhcyBuYW1lIGFuZCBh biBvY2N1cnJlbmNlIG51bWJlcjsgdGhlCisJICogcmVtYWluaW5nIGZpZWxkcyBjYW4gYmUgTlVM TC4gTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgdG8gc3BlY2lmeSBhCisJICogcGFydGl0aW9uIG5h bWUgd2l0aG91dCBhIHBhcnRpdGlvbiBzY2hlbWEsIGJ1dCBub3QgdGhlIHJldmVyc2UuCisJICov CisJcGdwYV9pZGVudGlmaWVyIHJpZDsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBzZXQgd2hl biB0dHlwZSBpcyBQUEdBX1RBUkdFVF9JREVOVElGSUVSIGFuZCB0aGUgYWR2aWNlCisJICogdGFn IGlzIFBHUEFfVEFHX0lOREVYX1NDQU4gb3IgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOLgorCSAq LworCXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0OworCisJLyoKKwkgKiBXaGVuIHRoZSB0dHlw ZSBpcyBQR1BBX1RBUkdFVF88YW55dGhpbmc+X0xJU1QsIHRoaXMgZmllbGQgY29udGFpbnMgYQor CSAqIGxpc3Qgb2YgYWRkaXRpb25hbCBwZ3BhX2FkdmljZV90YXJnZXQgb2JqZWN0cy4gT3RoZXJ3 aXNlLCBpdCBpcyB1bnVzZWQuCisJICovCisJTGlzdAkgICAqY2hpbGRyZW47Cit9IHBncGFfYWR2 aWNlX3RhcmdldDsKKworLyoKKyAqIFRoZXNlIGFyZSBhbGwgdGhlIGtpbmRzIG9mIGFkdmljZSB0 aGF0IHdlIGtub3cgaG93IHRvIHBhcnNlLiBJZiBhIGtleXdvcmQKKyAqIGlzIGZvdW5kIGF0IHRo ZSB0b3AgbGV2ZWwsIGl0IG11c3QgYmUgaW4gdGhpcyBsaXN0LgorICoKKyAqIElmIHlvdSBjaGFu Z2UgYW55dGhpbmcgaGVyZSwgYWxzbyB1cGRhdGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFnIGFuZAor ICogcGdwYV9jc3RyaW5nX2FkdmljZV90YWcuCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX2Fkdmlj ZV90YWdfdHlwZQoreworCVBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4sCisJUEdQQV9UQUdfRk9S RUlHTl9KT0lOLAorCVBHUEFfVEFHX0dBVEhFUiwKKwlQR1BBX1RBR19HQVRIRVJfTUVSR0UsCisJ UEdQQV9UQUdfSEFTSF9KT0lOLAorCVBHUEFfVEFHX0lOREVYX09OTFlfU0NBTiwKKwlQR1BBX1RB R19JTkRFWF9TQ0FOLAorCVBHUEFfVEFHX0pPSU5fT1JERVIsCisJUEdQQV9UQUdfTUVSR0VfSk9J Tl9NQVRFUklBTElaRSwKKwlQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOLAorCVBHUEFfVEFHX05F U1RFRF9MT09QX01BVEVSSUFMSVpFLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkUsCisJ UEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU4sCisJUEdQQV9UQUdfTk9fR0FUSEVSLAorCVBHUEFf VEFHX1BBUlRJVElPTldJU0UsCisJUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwlQR1BB X1RBR19TRU1JSk9JTl9VTklRVUUsCisJUEdQQV9UQUdfU0VRX1NDQU4sCisJUEdQQV9UQUdfVElE X1NDQU4KK30gcGdwYV9hZHZpY2VfdGFnX3R5cGU7CisKKy8qCisgKiBBbiBpdGVtIG9mIGFkdmlj ZSwgbWVhbmluZyBhIHRhZyBhbmQgdGhlIGxpc3Qgb2YgYWxsIHRhcmdldHMgdG8gd2hpY2gKKyAq IGl0IGlzIGJlaW5nIGFwcGxpZWQuCisgKgorICogInRhcmdldHMiIGlzIGEgbGlzdCBvZiBwZ3Bh X2FkdmljZV90YXJnZXQgb2JqZWN0cy4KKyAqCisgKiBUaGUgTGlzdCByZXR1cm5lZCBmcm9tIHBn cGFfeXlwYXJzZSBpcyBsaXN0IG9mIHBncGFfYWR2aWNlX2l0ZW0gb2JqZWN0cy4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfaXRlbQoreworCXBncGFfYWR2aWNlX3RhZ190eXBlIHRh ZzsKKwlMaXN0CSAgICp0YXJnZXRzOworfSBwZ3BhX2FkdmljZV9pdGVtOworCisvKgorICogUmVz dWx0IG9mIGNvbXBhcmluZyBhbiBhcnJheSBvZiBwZ3BhX3JlbGF0aW9uX2lkZW50aWZpZXIgb2Jq ZWN0cyB0byBhCisgKiBwZ3BhX2FkdmljZV90YXJnZXQuCisgKgorICogUEdQQV9JVE1fRVFVQUwg bWVhbnMgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQgYnkgc29tZSBpZGVudGlmaWVyLCBhbmQKKyAq IGFsbCBpZGVudGlmaWVycyB3ZXJlIG1hdGNoZWQgdG8gYSB0YXJnZXQuCisgKgorICogUEdQQV9J VE1fS0VZU19BUkVfU1VCU0VUIG1lYW5zIHRoYXQgYWxsIGlkZW50aWZpZXJzIG1hdGNoZWQgdG8g YSB0YXJnZXQsCisgKiBidXQgdGhlcmUgd2VyZSBsZWZ0b3ZlciB0YXJnZXRzLiBHZW5lcmFsbHks IHRoaXMgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGlzCisgKiBsb29raW5nIHRvIGFwcGx5IHRvIGFs bCBvZiB0aGUgcmVscyB3ZSBoYXZlIHBsdXMgc29tZSBhZGRpdGlvbmFsIG9uZXMgdGhhdAorICog d2UgZG9uJ3QgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQgbWVhbnMg dGhhdCBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBieSBhbgorICogaWRlbnRpZmllcnMsIGJ1dCB0 aGVyZSB3ZXJlIGxlZnRvdmVyIGlkZW50aWZpZXJzLiBHZW5lcmFsbHksIHRoaXMgbWVhbnMKKyAq IHRoYXQgdGhlIGFkdmljZSBpcyBsb29raW5nIHRvIGFwcGx5IHRvIHNvbWUgYnV0IG5vdCBhbGwg b2YgdGhlIHJlbHMgd2UgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9JTlRFUlNFQ1RJTkcgbWVhbnMg dGhhdCBzb21lIGlkZW50aWZlaXJzIGFuZCB0YXJnZXRzIHdlcmUgbWF0Y2hlZCwKKyAqIGJ1dCBu ZWl0aGVyIGFsbCBpZGVudGlmaWVycyBub3IgYWxsIHRhcmdldHMgY291bGQgYmUgbWF0Y2hlZCB0 byBpdGVtcyBpbgorICogdGhlIG90aGVyIHNldC4KKyAqCisgKiBQR1BBX0lUTV9ESVNKT0lOVCBt ZWFucyB0aGF0IG5vIG1hdGNoZXMgYmV0d2VlbiBpZGVudGlmZWlycyBhbmQgdGFyZ2V0cyB3ZXJl CisgKiBmb3VuZC4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9JVE1fRVFVQUwsCisJUEdQ QV9JVE1fS0VZU19BUkVfU1VCU0VULAorCVBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwKKwlQ R1BBX0lUTV9JTlRFUlNFQ1RJTkcsCisJUEdQQV9JVE1fRElTSk9JTlQKK30gcGdwYV9pdG1fdHlw ZTsKKworLyogZm9yIHBncGFfc2Nhbm5lci5sIGFuZCBwZ3BhX3BhcnNlci55ICovCit1bmlvbiBZ WVNUWVBFOworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBF REVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkICp5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBp biBwZ3BhX3NjYW5uZXIubCAqLworZXh0ZXJuIGludAlwZ3BhX3l5bGV4KHVuaW9uIFlZU1RZUEUg Knl5bHZhbF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwKKwkJCQkJICAgY2hhciAqKnBhcnNlX2Vycm9y X21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIpOworZXh0ZXJuIHZvaWQgcGdwYV95eWVycm9yKExp c3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5fdCB5 eXNjYW5uZXIsCisJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBwZ3Bh X3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJwKTsKK2V4 dGVybiB2b2lkIHBncGFfc2Nhbm5lcl9maW5pc2goeXlzY2FuX3QgeXlzY2FubmVyKTsKKworLyog aW4gcGdwYV9wYXJzZXIueSAqLworZXh0ZXJuIGludAlwZ3BhX3l5cGFyc2UoTGlzdCAqKnJlc3Vs dCwgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLAorCQkJCQkJIHl5c2Nhbl90IHl5c2Nhbm5lcik7 CitleHRlcm4gTGlzdCAqcGdwYV9wYXJzZShjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLCBjaGFy ICoqZXJyb3JfcCk7CisKKy8qIGluIHBncGFfYXN0LmMgKi8KK2V4dGVybiBjaGFyICpwZ3BhX2Nz dHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBhZHZpY2VfdGFnKTsKK2V4dGVy biBib29sIHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50aWZpZXIgKnJp ZCwKKwkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gcGdw YV9pdG1fdHlwZSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJpZHMsCisJCQkJ CQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJCQkgICBwZ3BhX2Fk dmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gYm9vbCBwZ3BhX2luZGV4X3RhcmdldHNfZXF1 YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLAorCQkJCQkJCQkJIHBncGFfaW5kZXhfdGFyZ2V0ICpp Mik7CitleHRlcm4gcGdwYV9hZHZpY2VfdGFnX3R5cGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFnKGNv bnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9hZHZp Y2VfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLAorCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoU3RyaW5nSW5m byBzdHIsCisJCQkJCQkJCQkgcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQpOworCisjZW5kaWYK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYTBiMGQ3ZTE1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKQEAgLTAsMCArMSw2MzkgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfY29sbGVjdG9yLmMKKyAqCSAgY29sbGVjdCBh ZHZpY2UgaW50byBiYWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi cGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorCisjaW5jbHVk ZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRlICJ1dGls cy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3Rp bWVzdGFtcC5oIgorCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2NvbGxlY3RlZF9sb2Nh bF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVk X2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl KTsKKworI2RlZmluZSBBRFZJQ0VfQ0hVTktfU0laRQkJMTAyNAorI2RlZmluZSBBRFZJQ0VfQ0hV TktfQVJSQVlfU0laRQk2NAorCisjZGVmaW5lCVBHX0dFVF9BRFZJQ0VfQ09MVU1OUwk3CisKKy8q CisgKiBBZHZpY2UgZXh0cmFjdGVkIGZyb20gb25lIHF1ZXJ5IHBsYW4sIHRvZ2V0aGVyIHdpdGgg dGhlIHF1ZXJ5IHN0cmluZworICogYW5kIHZhcmlvdXMgb3RoZXIgaWRlbnRpZnlpbmcgZGV0YWls cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCit7CisJT2lkCQkJ dXNlcmlkOwkJCS8qIHVzZXIgT0lEICovCisJT2lkCQkJZGJpZDsJCQkvKiBkYXRhYmFzZSBPSUQg Ki8KKwl1aW50NjQJCXF1ZXJ5aWQ7CQkvKiBxdWVyeSBpZGVudGlmaWVyICovCisJVGltZXN0YW1w VHogdGltZXN0YW1wOwkJLyogcXVlcnkgdGltZXN0YW1wICovCisJaW50CQkJYWR2aWNlX29mZnNl dDsJLyogc3RhcnQgb2YgYWR2aWNlIGluIHRleHR1YWwgZGF0YSAqLworCWNoYXIJCXRleHR1YWxf ZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2U7CisK Ky8qCisgKiBBIGJ1bmNoIG9mIHBvaW50ZXJzIHRvIHBncGFfY29sbGVjdGVkX2FkdmljZSBvYmpl Y3RzLCBzdG9yZWQgaW4KKyAqIGJhY2tlbmQtbG9jYWwgbWVtb3J5LgorICovCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuaworeworCXBncGFfY29sbGVjdGVkX2FkdmljZSAq ZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBncGFfbG9jYWxfYWR2aWNlX2NodW5rOwor CisvKgorICogSW5mb3JtYXRpb24gYWJvdXQgYWxsIG9mIHRoZSBwZ3BhX2NvbGxlY3RlZF9hZHZp Y2Ugb2JqZWN0cyB0aGF0IHdlJ3JlCisgKiBzdG9yaW5nIGluIGxvY2FsIG1lbW9yeS4KKyAqCisg KiBXZSBhc3NpZ24gY29uc2VjdXRpdmUgSURzLCBzdGFydGluZyBmcm9tIDAsIHRvIGVhY2ggcGdw YV9jb2xsZWN0ZWRfYWR2aWNlCisgKiBvYmplY3QgdGhhdCB3ZSBzdG9yZS4gVGhlIGFjdHVhbCBz dG9yYWdlIGlzIGFuIGFycmF5IG9mIGNodW5rcywgd2hpY2gKKyAqIGhlbHBzIGtlZXAgbWVtY3B5 KCkgb3ZlcmhlYWQgbG93IHdoZW4gd2Ugc3RhcnQgZGlzY2FyZGluZyBvbGRlciBkYXRhLgorICov Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2FkdmljZQoreworCXVpbnQ2NAkJbmV4dF9pZDsK Kwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7CisJaW50CQkJY2h1bmtfYXJy YXlfYWxsb2NhdGVkX3NpemU7CisJcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKipjaHVua3M7Cit9 IHBncGFfbG9jYWxfYWR2aWNlOworCisvKgorICogSnVzdCBsaWtlIHBncGFfbG9jYWxfYWR2aWNl X2NodW5rLCBidXQgc3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQgYXJlYSwKKyAqIHNvIHdlIG11 c3QgdXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBl ZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsKK3sKKwlkc2FfcG9pbnRlciBlbnRy aWVzW0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rOworCisv KgorICogSnVzdCBsaWtlIHBncGFfbG9jYWxfYWR2aWNlLCBidXQgc3RvcmVkIGluIGEgZHluYW1p YyBzaGFyZWQgYXJlYSwgc28KKyAqIHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2Yg bmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9hZHZpY2UK K3sKKwl1aW50NjQJCW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0CQliYXNl X2lkOworCWludAkJCWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplOworCWRzYV9wb2ludGVyIGNo dW5rczsKK30gcGdwYV9zaGFyZWRfYWR2aWNlOworCisvKiBQb2ludGVycyB0byBsb2NhbCBhbmQg c2hhcmVkIGNvbGxlY3RvcnMgKi8KK3N0YXRpYyBwZ3BhX2xvY2FsX2FkdmljZSAqbG9jYWxfY29s bGVjdG9yID0gTlVMTDsKK3N0YXRpYyBwZ3BhX3NoYXJlZF9hZHZpY2UgKnNoYXJlZF9jb2xsZWN0 b3IgPSBOVUxMOworCisvKiBTdGF0aWMgZnVuY3Rpb25zICovCitzdGF0aWMgcGdwYV9jb2xsZWN0 ZWRfYWR2aWNlICpwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZShPaWQgdXNlcmlkLAorCQkJCQkJ CQkJCQkJCQkgT2lkIGRiaWQsCisJCQkJCQkJCQkJCQkJCSB1aW50NjQgcXVlcnlJZCwKKwkJCQkJ CQkJCQkJCQkJIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJCQkJCQkJCQkJCQkJIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmFkdmljZV9zdHJp bmcsCisJCQkJCQkJCQkJCQkJCSBkc2FfYXJlYSAqYXJlYSwKKwkJCQkJCQkJCQkJCQkJIGRzYV9w b2ludGVyICpyZXN1bHQpOworc3RhdGljIHZvaWQgcGdwYV9zdG9yZV9sb2NhbF9hZHZpY2UocGdw YV9jb2xsZWN0ZWRfYWR2aWNlICpjYSk7CitzdGF0aWMgdm9pZCBwZ3BhX3RyaW1fbG9jYWxfYWR2 aWNlKGludCBsaW1pdCk7CitzdGF0aWMgdm9pZCBwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoZHNh X3BvaW50ZXIgY2FfcG9pbnRlcik7CitzdGF0aWMgdm9pZCBwZ3BhX3RyaW1fc2hhcmVkX2Fkdmlj ZShkc2FfYXJlYSAqYXJlYSwgaW50IGxpbWl0KTsKKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4 dHJhY3QgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHBncGFfY29sbGVjdGVkX2FkdmljZSAqLworc3Rh dGljIGlubGluZSBjb25zdCBjaGFyICoKK3F1ZXJ5X3N0cmluZyhwZ3BhX2NvbGxlY3RlZF9hZHZp Y2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVhbF9kYXRhOworfQorCisvKiBIZWxwZXIgZnVu Y3Rpb24gdG8gZXh0cmFjdCB0aGUgYWR2aWNlIHN0cmluZyBmcm9tIHBncGFfY29sbGVjdGVkX2Fk dmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2FkdmljZV9zdHJpbmcocGdwYV9j b2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YSArIGNhLT5h ZHZpY2Vfb2Zmc2V0OworfQorCisvKgorICogU3RvcmUgY29sbGVjdGVkIHF1ZXJ5IGFkdmljZSBp bnRvIHRoZSBsb2NhbCBvciBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciwKKyAqIGFzIGFwcHJvcHJp YXRlLgorICovCit2b2lkCitwZ3BhX2NvbGxlY3RfYWR2aWNlKHVpbnQ2NCBxdWVyeUlkLCBjb25z dCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcpCit7 CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7CisJT2lkCQkJZGJpZCA9IE15RGF0YWJhc2VJ ZDsKKwlUaW1lc3RhbXBUeiBub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwlpZiAocGdf cGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdG9yICYmCisJCXBnX3BsYW5fYWR2aWNlX2xvY2FsX2Nv bGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQoKSk7CisJCWNhID0gcGdwYV9tYWtlX2Nv bGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJCQkJCQkJCQkJcXVl cnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCQlwZ3Bh X3N0b3JlX2xvY2FsX2FkdmljZShjYSk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKKwl9CisKKwlpZiAocGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciAmJgorCQlw Z19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlkc2FfYXJl YSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwkJZHNhX3BvaW50ZXIgY2Ff cG9pbnRlciA9IEludmFsaWREc2FQb2ludGVyOyAvKiBwbGFjYXRlIGNvbXBpbGVyICovCisKKwkJ cGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJ CQkJCQkJCSAgIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywgYXJlYSwKKwkJCQkJCQkJICAg JmNhX3BvaW50ZXIpOworCQlwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7CisJ fQorfQorCisvKgorICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdwYV9jb2xsZWN0ZWRfYWR2 aWNlIG9iamVjdC4KKyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxsb2Nh dGUgdGhlIG5ldyBvYmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBpcyBy ZXR1cm5lZCB2aWEgKnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcgb2Jq ZWN0IGlzIGFsbG9jYXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFuZCBy ZXN1bHQgaXMgbm90IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdwYV9jb2xs ZWN0ZWRfYWR2aWNlICoKK3BncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1c2VyaWQsIE9p ZCBkYmlkLCB1aW50NjQgcXVlcnlJZCwKKwkJCQkJCSAgIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwK KwkJCQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIGNvbnN0IGNoYXIg KmFkdmljZV9zdHJpbmcsCisJCQkJCQkgICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJl c3VsdCkKK3sKKwlzaXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3Ry aW5nKSArIDE7CisJc2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vf c3RyaW5nKSArIDE7CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdwYV9jb2xsZWN0ZWRfYWR2 aWNlICpjYTsKKworCXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBncGFfY29sbGVjdGVkX2Fkdmlj ZSwgdGV4dHVhbF9kYXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5n X2xlbmd0aDsKKworCWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0 aCk7CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5n dGgpOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+ dXNlcmlkID0gdXNlcmlkOworCWNhLT5kYmlkID0gZGJpZDsKKwljYS0+cXVlcnlpZCA9IHF1ZXJ5 SWQ7CisJY2EtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwljYS0+YWR2aWNlX29mZnNldCA9IHF1 ZXJ5X3N0cmluZ19sZW5ndGg7CisKKwltZW1jcHkoY2EtPnRleHR1YWxfZGF0YSwgcXVlcnlfc3Ry aW5nLCBxdWVyeV9zdHJpbmdfbGVuZ3RoKTsKKwltZW1jcHkoJmNhLT50ZXh0dWFsX2RhdGFbY2Et PmFkdmljZV9vZmZzZXRdLAorCQkgICBhZHZpY2Vfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nX2xlbmd0 aCk7CisKKwlyZXR1cm4gY2E7Cit9CisKKy8qCisgKiBBZGQgYSBwZ19jb2xsZWN0ZWRfYWR2aWNl IG9iamVjdCB0byBvdXIgYmFja2VuZC1sb2NhbCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiBD YWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHN3aXRjaGluZyB0byB0aGUgYXBwcm9wcmlhdGUgbWVt b3J5IGNvbnRleHQ7CisgKiB0aGUgcHJvdmlkZWQgb2JqZWN0IHNob3VsZCBoYXZlIGJlZW4gYWxs b2NhdGVkIGluIHRoYXQgc2FtZSBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9zdG9y ZV9sb2NhbF9hZHZpY2UocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwl1aW50NjQJCWNo dW5rX251bWJlcjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ3BhX2xvY2FsX2FkdmljZSAq bGEgPSBsb2NhbF9jb2xsZWN0b3I7CisKKwkvKiBJZiB0aGUgbG9jYWwgYWR2aWNlIGNvbGxlY3Rv ciBpc24ndCBpbml0aWFsaXplZCB5ZXQsIGRvIHRoYXQgbm93LiAqLworCWlmIChsYSA9PSBOVUxM KQorCXsKKwkJbGEgPSBwYWxsb2MwKHNpemVvZihwZ3BhX2xvY2FsX2FkdmljZSkpOworCQlsYS0+ Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJ bGEtPmNodW5rcyA9IHBhbGxvYzBfYXJyYXkocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJ CQkJCQkJICAgbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJbG9jYWxfY29sbGVj dG9yID0gbGE7CisJfQorCisJLyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRv IHN0b3JlIHRoaXMgYWR2aWNlLiAqLworCWNodW5rX251bWJlciA9IChsYS0+bmV4dF9pZCAtIGxh LT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChsYS0+bmV4 dF9pZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogRXh0ZW5kIGNo dW5rIGFycmF5LCBpZiBuZWVkZWQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBsYS0+Y2h1bmtf YXJyYXlfYWxsb2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKworCQluZXdfc2l6 ZSA9IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9T SVpFOworCQlsYS0+Y2h1bmtzID0gcmVwYWxsb2MwX2FycmF5KGxhLT5jaHVua3MsCisJCQkJCQkJ CQkgcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJCSBsYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUsCisJCQkJCQkJCQkgbmV3X3NpemUpOworCQlsYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgY2h1bmss IGlmIG5lZWRlZC4gKi8KKwlpZiAobGEtPmNodW5rc1tjaHVua19udW1iZXJdID09IE5VTEwpCisJ CWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXSA9IHBhbGxvYzBfb2JqZWN0KHBncGFfbG9jYWxfYWR2 aWNlX2NodW5rKTsKKworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIu ICovCisJQXNzZXJ0KGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZz ZXRdID09IE5VTEwpOworCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19v ZmZzZXRdID0gY2E7CisJKytsYS0+bmV4dF9pZDsKKworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRo ZSBzdG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXBncGFfdHJpbV9sb2NhbF9h ZHZpY2UocGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCk7Cit9CisKKy8qCisg KiBBZGQgYSBwZ19jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byB0aGUgc2hhcmVkIGFkdmljZSBj b2xsZWN0aW9uLgorICoKKyAqICdjYV9wb2ludGVyJyBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRl ZCBmcm9tIHRoZSBwZ19wbGFuX2FkdmljZSBEU0EgYXJlYQorICogYW5kIHNob3VsZCBwb2ludCB0 byBhbiBvYmplY3Qgb2YgdHlwZSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcikKK3sK Kwl1aW50NjQJCWNodW5rX251bWJlcjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ3BhX3No YXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAg ICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2Ug KnNhID0gc2hhcmVkX2NvbGxlY3RvcjsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdw YV9zaGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0 ZS4gKi8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8q CisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rv ciB5ZXQsIGZpeCB0aGF0IG5vdy4KKwkgKiBJZiB3ZSdyZSB0aGUgZmlyc3Qgb25lcyB0byBhdHRh Y2gsIHdlIG1heSBuZWVkIHRvIGNyZWF0ZSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChzYSA9PSBO VUxMKQorCXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2lu dGVyKQorCQkJc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPQorCQkJCWRzYV9hbGxvY2F0ZTAoYXJl YSwgc2l6ZW9mKHBncGFfc2hhcmVkX2FkdmljZSkpOworCQlzaGFyZWRfY29sbGVjdG9yID0gc2Eg PSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKwor CS8qCisJICogSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgYmFja2VuZCBtYXkgaGF2ZSBz dWNjZWVkZWQgaW4gY3JlYXRpbmcKKwkgKiB0aGUgbWFpbiBjb2xsZWN0b3Igb2JqZWN0IGJ1dCBm YWlsZWQgdG8gYWxsb2NhdGUgYW4gaW5pdGlhbCBjaHVuaworCSAqIGFycmF5LCBzbyB3ZSBtdXN0 IGJlIHByZXBhcmVkIHRvIGFsbG9jYXRlIHRoZSBjaHVuayBhcnJheSBoZXJlIHdoZXRoZXIKKwkg KiBvciBub3Qgd2UgY3JlYXRlZCB0aGUgY29sbGVjdG9yIG9iamVjdC4KKwkgKi8KKwlpZiAoc2hh cmVkX2NvbGxlY3Rvci0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPT0gMCkKKwl7CisJCXNh LT5jaHVua3MgPQorCQkJZHNhX2FsbG9jYXRlMChhcmVhLAorCQkJCQkJICBzaXplb2YoZHNhX3Bv aW50ZXIpICogQURWSUNFX0NIVU5LX0FSUkFZX1NJWkUpOworCQlzYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwl9CisKKwkvKiBDb21wdXRl IGNodW5rIGFuZCBvZmZzZXQgYXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJY2h1 bmtfbnVtYmVyID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJ WkU7CisJY2h1bmtfb2Zmc2V0ID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNF X0NIVU5LX1NJWkU7CisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGNodW5rIGFycmF5IGFu ZCwgaWYgbmVlZGVkLCBleHRlbmQgaXQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBzYS0+Y2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKwkJZHNhX3Bv aW50ZXIgbmV3X2NodW5rczsKKworCQkvKgorCQkgKiBEU0EgY2FuJ3QgZW5sYXJnZSBhbiBleGlz dGluZyBhbGxvY2F0aW9uLCBzbyB3ZSBtdXN0IG1ha2UgYSBuZXcKKwkJICogYWxsb2NhdGlvbiBh bmQgY29weSBkYXRhIG92ZXIuCisJCSAqLworCQluZXdfc2l6ZSA9IHNhLT5jaHVua19hcnJheV9h bGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQluZXdfY2h1bmtzID0g ZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YoZHNhX3BvaW50ZXIpICogbmV3X3NpemUpOworCQlj aHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBuZXdfY2h1bmtzKTsKKwkJbWVtY3B5 KGNodW5rX2FycmF5LCBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyksCisJCQkgICBz aXplb2YoZHNhX3BvaW50ZXIpICogc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJ ZHNhX2ZyZWUoYXJlYSwgc2EtPmNodW5rcyk7CisJCXNhLT5jaHVua3MgPSBuZXdfY2h1bmtzOwor CQlzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisJZWxzZQor CQljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8q IEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBjaHVuaywgYWxsb2NhdGluZyBpdCBpZiBu ZWVkZWQuICovCisJaWYgKGNodW5rX2FycmF5W2NodW5rX251bWJlcl0gPT0gSW52YWxpZERzYVBv aW50ZXIpCisJCWNodW5rX2FycmF5W2NodW5rX251bWJlcl0gPQorCQkJZHNhX2FsbG9jYXRlMChh cmVhLCBzaXplb2YocGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rKSk7CisJY2h1bmsgPSBkc2FfZ2V0 X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7CisKKwkvKiBTYXZlIHBv aW50ZXIgYW5kIGJ1bXAgbmV4dC1pZCBjb3VudGVyLiAqLworCUFzc2VydChjaHVuay0+ZW50cmll c1tjaHVua19vZmZzZXRdID09IEludmFsaWREc2FQb2ludGVyKTsKKwljaHVuay0+ZW50cmllc1tj aHVua19vZmZzZXRdID0gY2FfcG9pbnRlcjsKKwkrK3NhLT5uZXh0X2lkOworCisJLyogSWYgd2Un dmUgZXhjZWVkZWQgdGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQgb2xkIGRhdGEuICovCisJcGdw YV90cmltX3NoYXJlZF9hZHZpY2UoYXJlYSwgcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rp b25fbGltaXQpOworCisJLyogUmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xv Y2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNvbGxlY3RlZCBh ZHZpY2Ugc3RvcmVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5IGluIGV4Y2VzcyBvZiB0aGUKKyAq IHNwZWNpZmllZCBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJpbV9sb2NhbF9hZHZp Y2UoaW50IGxpbWl0KQoreworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3Rv cjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2 NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2 NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hl ZCB0aGUgbGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0g bGEtPm5leHRfaWQgLSBsYS0+b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0 KQorCQlyZXR1cm47CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRv d24gdG8gdGhlIGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7 CisJd2hpbGUgKHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJ CXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCisJCWNodW5rX251bWJlciA9IChsYS0+b2xkZXN0X2lk IC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChs YS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJQXNz ZXJ0KGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IE5V TEwpOworCQlwZnJlZShsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zm c2V0XSk7CisJCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRd ID0gTlVMTDsKKwkJKytsYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyog RnJlZSBhbnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9j aHVua19jb3VudCA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5L X1NJWkU7CisJZm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJ CXBmcmVlKGxhLT5jaHVua3Nbbl0pOworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50 ZXJzIGJhY2sgdG93YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19j b3VudCA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktf U0laRSAtIDEpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0g dG90YWxfY2h1bmtfY291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1 bmtfY291bnQgPiAwKQorCQltZW1tb3ZlKCZsYS0+Y2h1bmtzWzBdLCAmbGEtPmNodW5rc1t0cmlt X2NodW5rX2NvdW50XSwKKwkJCQlzaXplb2YocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikgKiBy ZW1haW5pbmdfY2h1bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMg YXJvdW5kLiAqLworCW1lbXNldCgmbGEtPmNodW5rc1tyZW1haW5pbmdfY2h1bmtfY291bnRdLCAw LAorCQkgICBzaXplb2YocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxf Y2h1bmtfY291bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNl IElEIHZhbHVlIGFjY29yZGluZ2x5LiAqLworCWxhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291 bnQgKiBBRFZJQ0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFk dmljZSBzdG9yZWQgaW4gc2hhcmVkIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZp ZWQgbGltaXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShkc2Ff YXJlYSAqYXJlYSwgaW50IGxpbWl0KQoreworCXBncGFfc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFy ZWRfY29sbGVjdG9yOworCXVpbnQ2NAkJY3VycmVudF9jb3VudDsKKwl1aW50NjQJCXRyaW1fY291 bnQ7CisJdWludDY0CQl0b3RhbF9jaHVua19jb3VudDsKKwl1aW50NjQJCXRyaW1fY2h1bmtfY291 bnQ7CisJdWludDY0CQlyZW1haW5pbmdfY2h1bmtfY291bnQ7CisJZHNhX3BvaW50ZXIgKmNodW5r X2FycmF5OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGltaXQsIHRoZXJl J3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gc2EtPm5leHRfaWQgLSBzYS0+ b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1cm47CisKKwkv KiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjaHVuayBhcnJheS4gKi8KKwljaHVua19hcnJheSA9IGRz YV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIEZyZWUgZW5vdWdoIGVudHJp ZXMgdG8gZ2V0IHVzIGJhY2sgZG93biB0byB0aGUgbGltaXQuICovCisJdHJpbV9jb3VudCA9IGN1 cnJlbnRfY291bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJeworCQl1aW50 NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVk X2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkJY2h1bmtfbnVtYmVyID0gKHNhLT5vbGRlc3RfaWQg LSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKHNh LT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVu ayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJ QXNzZXJ0KGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gIT0gSW52YWxpZERzYVBvaW50ZXIp OworCQlkc2FfZnJlZShhcmVhLCBjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJY2h1 bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9IEludmFsaWREc2FQb2ludGVyOworCQkrK3NhLT5v bGRlc3RfaWQ7CisJCS0tdHJpbV9jb3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhh dCBhcmUgbm93IGVudGlyZWx5IHVudXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKHNhLT5v bGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2 NCBuID0gMDsgbiA8IHRyaW1fY2h1bmtfY291bnQ7ICsrbikKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1 bmtfYXJyYXlbbl0pOworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJhY2sg dG93YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9IChz YS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEp IC8gQURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxfY2h1 bmtfY291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291bnQg PiAwKQorCQltZW1tb3ZlKCZjaHVua19hcnJheVswXSwgJmNodW5rX2FycmF5W3RyaW1fY2h1bmtf Y291bnRdLAorCQkJCXNpemVvZihkc2FfcG9pbnRlcikgKiByZW1haW5pbmdfY2h1bmtfY291bnQp OworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5kLiAqLworCW1lbXNldCgm Y2h1bmtfYXJyYXlbcmVtYWluaW5nX2NodW5rX2NvdW50XSwgMCwKKwkJICAgc2l6ZW9mKHBncGFf c2hhcmVkX2FkdmljZV9jaHVuayAqKQorCQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFp bmluZ19jaHVua19jb3VudCkpOworCisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5n bHkuICovCisJc2EtPmJhc2VfaWQgKz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19T SVpFOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQgYWR2aWNl IGNvbGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfY2xlYXJf Y29sbGVjdGVkX2xvY2FsX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChsb2NhbF9j b2xsZWN0b3IgIT0gTlVMTCkKKwkJcGdwYV90cmltX2xvY2FsX2FkdmljZSgwKTsKKworCVBHX1JF VFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZGlzY2Fy ZCBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitw Z19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCXBn cGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCWRzYV9h cmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCisJTFdMb2NrQWNxdWly ZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBh dHRhY2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7 CisJICogYnV0IGlmIHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0 dXJuIHdpdGhvdXQgZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzaGFyZWRf Y29sbGVjdG9yID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0g SW52YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsK KwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IGRzYV9nZXRf YWRkcmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogRG8gdGhl IHJlYWwgd29yayAqLworCXBncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIDApOworCisJTFdM b2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoK KyAqIFNRTC1jYWxsYWJsZSBTUkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2Vu ZC1sb2NhbCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNl KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNl dEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxv Y2FsX2NvbGxlY3RvcjsKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKworCUluaXRNYXRl cmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCWlmIChsYSA9PSBOVUxMKQorCQlyZXR1cm4gKERh dHVtKSAwOworCisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAodWludDY0IGlk ID0gbGEtPm9sZGVzdF9pZDsgaWQgPCBsYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJCXVpbnQ2NAkJ Y2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9jb2xsZWN0ZWRf YWR2aWNlICpjYTsKKwkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQli b29sCQludWxsc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJl ciA9IChpZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZz ZXQgPSAoaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljYSA9IGxh LT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdOworCisJCWlmICgh bWVtYmVyX2Nhbl9zZXRfcm9sZSh1c2VyaWQsIGNhLT51c2VyaWQpKQorCQkJY29udGludWU7CisK KwkJdmFsdWVzWzBdID0gVUludDY0R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBPYmplY3RJ ZEdldERhdHVtKGNhLT51c2VyaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGNh LT5kYmlkKTsKKwkJdmFsdWVzWzNdID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOworCQl2 YWx1ZXNbNF0gPSBUaW1lc3RhbXBHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVd ID0gQ1N0cmluZ0dldFRleHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0g Q1N0cmluZ0dldFRleHREYXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9w dXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFs dWVzLCBudWxscyk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1j YWxsYWJsZSBTUkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQor ICovCitEYXR1bQorcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZv LT5yZXN1bHRpbmZvOworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNl X2F0dGFjaCgpOworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgp OworCWRzYV9wb2ludGVyICpjaHVua19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0g c2hhcmVkX2NvbGxlY3RvcjsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKwor CS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9j aywgTFdfU0hBUkVEKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBz aGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhl IGNvbGxlY3RvciBkb2Vzbid0IGV2ZW4gZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2lu ZworCSAqIGFueXRoaW5nIGVsc2UuCisJICovCisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAo c3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxX TG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJ c2hhcmVkX2NvbGxlY3RvciA9IHNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFy ZWRfY29sbGVjdG9yKTsKKwl9CisKKwkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjaHVuayBhcnJh eS4gKi8KKwljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsK KworCS8qIExvb3Agb3ZlciBhbGwgZW50cmllcy4gKi8KKwlmb3IgKHVpbnQ2NCBpZCA9IHNhLT5v bGRlc3RfaWQ7IGlkIDwgc2EtPm5leHRfaWQ7ICsraWQpCisJeworCQl1aW50NjQJCWNodW5rX251 bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2FkdmljZV9jaHVu ayAqY2h1bms7CisJCXBncGFfY29sbGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNb UEdfR0VUX0FEVklDRV9DT0xVTU5TXTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xV TU5TXSA9IHswfTsKKworCQljaHVua19udW1iZXIgPSAoaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJ Q0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGlkIC0gc2EtPmJhc2VfaWQpICUgQURW SUNFX0NIVU5LX1NJWkU7CisKKwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtf YXJyYXlbY2h1bmtfbnVtYmVyXSk7CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5r LT5lbnRyaWVzW2NodW5rX29mZnNldF0pOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVt KGlkKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFs dWVzWzJdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2 NEdldERhdHVtKGNhLT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0o Y2EtPnRpbWVzdGFtcCk7CisJCXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlf c3RyaW5nKGNhKSk7CisJCXZhbHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0 cmluZyhjYSkpOworCisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCBy c2luZm8tPnNldERlc2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCS8qIFJlbGVh c2UgbG9jayBvbiBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2sp OworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9jb2xsZWN0b3IuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xs ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjZlNzQ2YTA2 ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVj dG9yLmgKQEAgLTAsMCArMSwxOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9j b2xsZWN0b3IuaAorICoJICBjb2xsZWN0IGFkdmljZSBpbnRvIGJhY2tlbmQtbG9jYWwgb3Igc2hh cmVkIG1lbW9yeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2NvbGxlY3Rvci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQ QV9DT0xMRUNUT1JfSAorI2RlZmluZSBQR1BBX0NPTExFQ1RPUl9ICisKK2V4dGVybiB2b2lkIHBn cGFfY29sbGVjdF9hZHZpY2UodWludDY0IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmlu ZywKKwkJCQkJCQkJY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZyk7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjUxYjRiMGM2MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwpAQCAtMCwwICsxLDQ3NiBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9pZGVudGlmaWVyLmMKKyAqCSAgY3JlYXRlIGFwcHJv cHJpYXRlIGlkZW50aWZpZXJzIGZvciByYW5nZSB0YWJsZSBlbnRyaWVzCisgKgorICogVGhlIGdv YWwgb2YgdGhpcyBtb2R1bGUgaXMgdG8gYmUgYWJsZSB0byBwcm9kdWNlIGlkZW50aWZpZXJzIGZv ciByYW5nZQorICogdGFibGUgZW50cmllcyB0aGF0IGFyZSB1bmlxdWUsIHVuZGVyc3RhbmRhYmxl IHRvIGh1bWFuIGJlaW5ncywgYW5kCisgKiBhYmxlIHRvIGJlIHJlY29uc3RydWN0ZWQgZHVyaW5n IGZ1dHVyZSBwbGFubmluZyBjeWNsZXMuIEFzIGFuCisgKiBleGNlcHRpb24sIHdlIGRvIG5vdCBj YXJlIGFib3V0LCBvciB3YW50IHRvIHByb2R1Y2UsIGlkZW50aWZpZXJzIGZvcgorICogUlRFX0pP SU4gZW50cmllcy4gVGhpcyBpcyBiZWNhdXNlICgxKSB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIHRv biBvZgorICogUlRFcyB3aXRoIHVuaGVscGZ1bCBuYW1lcyBsaWtlIHVubmFtZWRfam9pbl8xNzsg KDIpIG5vdCBhbGwgam9pbnMgaGF2ZQorICogUlRFczsgYW5kICgzKSB3ZSBpbnRlbmQgdG8gcmVm ZXIgdG8gam9pbnMgYnkgdGhlaXIgY29uc3RpdHVlbnQgbWVtYmVycworICogcmF0aGVyIHRoYW4g YnkgcmVmZXJlbmNlIHRvIHRoZSBqb2luIFJURS4KKyAqCisgKiBJbiBnZW5lcmFsLCB3ZSBjb25z dHJ1Y3QgaWRlbnRpZmllcnMgb2YgdGhlIGZvbGxvd2luZyBmb3JtOgorICoKKyAqIGFsaWFzX25h bWUjb2NjdXJyZW5jZV9udW1iZXIvY2hpbGRfdGFibGVfbmFtZUBzdWJxdWVyeV9uYW1lCisgKgor ICogSG93ZXZlciwgb2NjdXJyZW5jZV9udW1iZXIgaXMgb21pdHRlZCB3aGVuIGl0IGlzIHRoZSBm aXJzdCBvY2N1cnJlbmNlCisgKiB3aXRoaW4gdGhlIHNhbWUgc3VicXVlcnksIGNoaWxkX3RhYmxl X25hbWUgaXMgb21pdHRlZCBmb3IgcmVsYXRpb25zIHRoYXQKKyAqIGFyZSBub3QgY2hpbGQgdGFi bGVzLCBhbmQgc3VicXVlcnlfbmFtZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wbW9zdAorICogcXVl cnkgbGV2ZWwuIFdoZW5ldmVyIGFuIGl0ZW0gaXMgb21pdHRlZCwgdGhlIHByZWNlZGluZyBwdW5j dHVhdGlvbiBtYXJrCisgKiBpcyBhbHNvIG9taXR0ZWQuICBJZGVudGlmaWVyLXN0eWxlIGVzY2Fw aW5nIGlzIGFwcGxpZWQgdG8gYWxpYXNfbmFtZSBhbmQKKyAqIHN1YnF1ZXJ5X25hbWUuICBXaGVu ZXZlciB3ZSBpbmNsdWRlIGNoaWxkX3RhYmxlX25hbWUsIHdlIGFsd2F5cworICogc2NoZW1hLXF1 YWxpZmllZCBuYW1lLCBidXQgd3JpdGluZyB0aGVpciBvd24gcGxhbiBhZHZpY2UgYXJlIG5vdCBy ZXF1aXJlZAorICogdG8gZG8gc28uICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxp ZWQgdG8gdGhlIHNjaGVtYSBhbmQgdG8gdGhlCisgKiByZWxhdGlvbiBuYW1lcyBzZXBhcmF0ZWx5 LgorICoKKyAqIFRoZSB1cHNob3Qgb2YgYWxsIG9mIHRoZXNlIHJ1bGVzIGlzIHRoYXQgaW4gc2lt cGxlIGNhc2VzLCB0aGUgcmVsYXRpb24KKyAqIGlkZW50aWZpZXIgaXMgdGV4dHVhbGx5IGlkZW50 aWNhbCB0byB0aGUgYWxpYXMgbmFtZSwgbWFraW5nIGxpZmUgZWFzaWVyCisgKiBmb3IgdXNlcnMu IEhvd2V2ZXIsIGV2ZW4gaW4gY29tcGxleCBjYXNlcywgZXZlcnkgcmVsYXRpb24gaWRlbnRpZmll cgorICogZm9yIGEgZ2l2ZW4gcXVlcnkgd2lsbCBiZSB1bmlxdWUgKG9yIGF0IGxlYXN0IHdlIGhv cGUgc286IGlmIG5vdCwgdGhpcworICogY29kZSBpcyBidWdneSBhbmQgdGhlIGlkZW50aWZpZXIg Zm9ybWF0IG1pZ2h0IG5lZWQgdG8gYmUgcmV0aG91Z2h0KS4KKyAqCisgKiBBIGtleSBnb2FsIG9m IHRoaXMgc3lzdGVtIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY29uc3RydWN0IHRo ZQorICogc2FtZSBpZGVudGlmaWVycyBkdXJpbmcgYSBmdXR1cmUgcGxhbm5pbmcgY3ljbGUgZm9y IHRoZSBzYW1lIHF1ZXJ5LCBzbworICogdGhhdCBpZiBhIGNlcnRhaW4gYmVoYXZpb3IgaXMgc3Bl Y2lmaWVkIGZvciBhIGNlcnRhaW4gaWRlbnRpZmllciwgd2UgY2FuCisgKiBwcm9wZXJseSBpZGVu dGlmeSB0aGUgUlRJIGZvciB3aGljaCB0aGF0IGJlaGF2aW9yIGlzIG1hbmRhdGVkLiBJbiBvcmRl cgorICogZm9yIHRoaXMgdG8gd29yaywgc3VicXVlcnkgbmFtZXMgbXVzdCBiZSB1bmlxdWUgYW5k IGtub3duIGJlZm9yZSB0aGUKKyAqIHN1YnF1ZXJ5IGlzIHBsYW5uZWQsIGFuZCB0aGUgcmVtYWlu ZGVyIG9mIHRoZSBpZGVudGlmaWVyIG11c3Qgbm90IGRlcGVuZAorICogb24gYW55IHBhcnQgb2Yg dGhlIHF1ZXJ5IG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgc3VicXVlcnkgbGV2ZWwuIEluCisgKiBw YXJ0aWN1bGFyLCBvY2N1cnJlbmNlX251bWJlciBtdXN0IGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUg dG8gdGhlIHJhbmdlCisgKiB0YWJsZSBmb3IgdGhlIHJlbGV2YW50IHN1YnF1ZXJ5LCBub3QgdGhl IGZpbmFsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfaWRlbnRp Zmllci5oIgorCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0YXRpYyBJbmRl eCAqcGdwYV9jcmVhdGVfdG9wX3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRh YmxlLAorCQkJCQkJCQkJICBMaXN0ICphcHBpbmZvcyk7CitzdGF0aWMgaW50CXBncGFfb2NjdXJy ZW5jZV9udW1iZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJCQkJCSAg IFN1YlBsYW5SVEluZm8gKnJ0aW5mbywgSW5kZXggcnRpKTsKKworLyoKKyAqIENyZWF0ZSBhIHJh bmdlIHRhYmxlIGlkZW50aWZpZXIgZnJvbSBzY3JhdGNoLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g bGVhdmVzIHRoZSBjYWxsZXIgdG8gZG8gYWxsIHRoZSBoZWF2eSBsaWZ0aW5nLCBzbyBpdCdzCisg KiBnZW5lcmFsbHkgYmV0dGVyIHRvIHVzZSBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyBpbnN0 ZWFkLgorICoKKyAqIFNlZSB0aGUgZmlsZSBoZWFkZXIgY29tbWVudHMgZm9yIG1vcmUgZGV0YWls cyBvbiB0aGUgZm9ybWF0IG9mIGFuCisgKiBpZGVudGlmaWVyLgorICovCitjb25zdCBjaGFyICoK K3BncGFfaWRlbnRpZmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJ Y29uc3QgY2hhciAqcmVzdWx0OworCisJQXNzZXJ0KHJpZC0+YWxpYXNfbmFtZSAhPSBOVUxMKTsK KwlyZXN1bHQgPSBxdW90ZV9pZGVudGlmaWVyKHJpZC0+YWxpYXNfbmFtZSk7CisKKwlBc3NlcnQo cmlkLT5vY2N1cnJlbmNlID49IDApOworCWlmIChyaWQtPm9jY3VycmVuY2UgPiAxKQorCQlyZXN1 bHQgPSBwc3ByaW50ZigiJXMjJWQiLCByZXN1bHQsIHJpZC0+b2NjdXJyZW5jZSk7CisKKwlpZiAo cmlkLT5wYXJ0cmVsICE9IE5VTEwpCisJeworCQlpZiAocmlkLT5wYXJ0bnNwID09IE5VTEwpCisJ CQlyZXN1bHQgPSBwc3ByaW50ZigiJXMvJXMiLCByZXN1bHQsCisJCQkJCQkJICBxdW90ZV9pZGVu dGlmaWVyKHJpZC0+cGFydHJlbCkpOworCQllbHNlCisJCQlyZXN1bHQgPSBwc3ByaW50ZigiJXMv JXMuJXMiLCByZXN1bHQsCisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydG5zcCks CisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydHJlbCkpOworCX0KKworCWlmIChy aWQtPnBsYW5fbmFtZSAhPSBOVUxMKQorCQlyZXN1bHQgPSBwc3ByaW50ZigiJXNAJXMiLCByZXN1 bHQsIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wbGFuX25hbWUpKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBDb21wdXRlIGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1 bGFyIFJUSS4KKyAqCisgKiBUaGUgY2FsbGVyIHByb3ZpZGVzIHJvb3QgYW5kIHJ0aSwgYW5kIGdl dHMgdGhlIG5lY2Vzc2FyeSBkZXRhaWxzIGJhY2sgdmlhCisgKiB0aGUgcmVtYWluaW5nIHBhcmFt ZXRlcnMuCisgKi8KK3ZvaWQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShQbGFubmVy SW5mbyAqcm9vdCwgSW5kZXggcnRpLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkKQor eworCUluZGV4CQl0b3BfcnRpID0gcnRpOworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdl VGJsRW50cnkgKnJ0ZTsKKwlSYW5nZVRibEVudHJ5ICp0b3BfcnRlOworCWNoYXIJICAgKnBhcnRu c3AgPSBOVUxMOworCWNoYXIJICAgKnBhcnRyZWwgPSBOVUxMOworCisJLyoKKwkgKiBJZiB0aGlz IGlzIGEgY2hpbGQgUlRFLCBmaW5kIHRoZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlzIHN0aWxsIG9m IHR5cGUKKwkgKiBSVEVfUkVMQVRJT04uIFdlIGRvIHRoaXMgYmVjYXVzZSB3ZSBpZGVudGlmeSBj aGlsZHJlbiBvZiBwYXJ0aXRpb25lZAorCSAqIHRhYmxlcyBieSB0aGUgbmFtZSBvZiB0aGUgY2hp bGQgdGFibGUsIGJ1dCBzdWJxdWVyaWVzIGNhbiBhbHNvIGhhdmUKKwkgKiBjaGlsZCByZWxzIGFu ZCB3ZSBkb24ndCBjYXJlIGFib3V0IHRob3NlIGhlcmUuCisJICovCisJZm9yICg7OykKKwl7CisJ CUFwcGVuZFJlbEluZm8gKmFwcGluZm87CisJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9ydGU7CisK KwkJLyogYXBwZW5kX3JlbF9hcnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRy ZW4gKi8KKwkJaWYgKHJvb3QtPmFwcGVuZF9yZWxfYXJyYXkgPT0gTlVMTCB8fAorCQkJKGFwcGlu Zm8gPSByb290LT5hcHBlbmRfcmVsX2FycmF5W3RvcF9ydGldKSA9PSBOVUxMKQorCQkJYnJlYWs7 CisKKwkJcGFyZW50X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlk LCByb290KTsKKwkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJ YnJlYWs7CisKKwkJdG9wX3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwl9CisKKwkvKiBH ZXQgdGhlIHJhbmdlIHRhYmxlIGVudHJpZXMgZm9yIHRoZSBSVEkgYW5kIHRvcCBSVEkuICovCisJ cnRlID0gcGxhbm5lcl9ydF9mZXRjaChydGksIHJvb3QpOworCXRvcF9ydGUgPSBwbGFubmVyX3J0 X2ZldGNoKHRvcF9ydGksIHJvb3QpOworCUFzc2VydChydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4p OworCUFzc2VydCh0b3BfcnRlLT5ydGVraW5kICE9IFJURV9KT0lOKTsKKworCS8qIFdvcmsgb3V0 IHRoZSBjb3JyZWN0IG9jY3VycmVuY2UgbnVtYmVyLiAqLworCWZvciAoSW5kZXggcHJpb3JfcnRp ID0gMTsgcHJpb3JfcnRpIDwgdG9wX3J0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRibEVu dHJ5ICpwcmlvcl9ydGU7CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm87CisKKwkJLyoKKwkJICog SWYgdGhpcyBpcyBhIGNoaWxkIHJlbCBvZiBhIHBhcmVudCB0aGF0IGlzIGEgcmVsYXRpb24sIHNr aXAgaXQuCisJCSAqCisJCSAqIFN1Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBhcmUgZGlzYW1iaWd1 YXRlZCBieSBtZW50aW9uaW5nIHRoZSBzY2hlbWEKKwkJICogYW5kIG5hbWUgb2YgdGhlIHRhYmxl LCBub3QgYnkgY291bnRpbmcgdGhlbSBhcyBzZXBhcmF0ZSBvY2N1cnJlbmNlcworCQkgKiBvZiB0 aGUgc2FtZSB0YWJsZS4KKwkJICoKKwkJICogTkI6IGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5V TEwgaWYgdGhlcmUgYXJlIG5vIGNoaWxkcmVuCisJCSAqLworCQlpZiAocm9vdC0+YXBwZW5kX3Jl bF9hcnJheSAhPSBOVUxMICYmCisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlb cHJpb3JfcnRpXSkgIT0gTlVMTCkKKwkJeworCQkJUmFuZ2VUYmxFbnRyeSAqcGFyZW50X3J0ZTsK KworCQkJcGFyZW50X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlk LCByb290KTsKKwkJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTikKKwkJ CQljb250aW51ZTsKKwkJfQorCisJCS8qIFNraXAgTlVMTCBlbnRyaWVzIGFuZCBqb2lucy4gKi8K KwkJcHJpb3JfcnRlID0gcGxhbm5lcl9ydF9mZXRjaChwcmlvcl9ydGksIHJvb3QpOworCQlpZiAo cHJpb3JfcnRlID09IE5VTEwgfHwgcHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJ Y29udGludWU7CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLworCQlp ZiAoc3RyY21wKHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFzbmFt ZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxpY2F0 ZS4gKi8KKwkJKytvY2N1cnJlbmNlOworCX0KKworCS8qIElmIHRoaXMgaXMgYSBjaGlsZCB0YWJs ZSwgZ2V0IHRoZSBzY2hlbWEgYW5kIHJlbGF0aW9uIG5hbWVzLiAqLworCWlmIChydGkgIT0gdG9w X3J0aSkKKwl7CisJCXBhcnRuc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChnZXRfcmVs X25hbWVzcGFjZShydGUtPnJlbGlkKSk7CisJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRlLT5y ZWxpZCk7CisJfQorCisJLyogT0ssIHdlIGhhdmUgYWxsIHRoZSBhbnN3ZXJzIHdlIG5lZWQuIFJl dHVybiB0aGVtIHRvIHRoZSBjYWxsZXIuICovCisJcmlkLT5hbGlhc19uYW1lID0gdG9wX3J0ZS0+ ZXJlZi0+YWxpYXNuYW1lOworCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJcmlkLT5w YXJ0bnNwID0gcGFydG5zcDsKKwlyaWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCXJpZC0+cGxhbl9u YW1lID0gcm9vdC0+cGxhbl9uYW1lOworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlk ZW50aWZpZXIgZm9yIGEgc2V0IG9mIFJUSXMsIGV4Y2VwdCBmb3IgYW55IFJURV9KT0lOCisgKiBS VElzIHRoYXQgbWF5IGJlIHByZXNlbnQuCisgKgorICogUlRFX0pPSU4gZW50cmllcyBhcmUgZXhj bHVkZWQgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBtZW50aW9uZWQgYnkgcGxhbgorICogYWR2aWNl LgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQg dGhlIHRrZXlzIGFycmF5IGlzIGxhcmdlCisgKiBlbm91Z2ggdG8gc3RvcmUgdGhlIHJlc3VsdHMu CisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGlkZW50aWZpZXJzIGNv bXB1dGVkLgorICovCitpbnQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMoUGxh bm5lckluZm8gKnJvb3QsIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgICBwZ3BhX2lkZW50 aWZpZXIgKnJpZHMpCit7CisJaW50CQkJY291bnQgPSAwOworCWludAkJCXJ0aSA9IC0xOworCisJ d2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJ UmFuZ2VUYmxFbnRyeSAqcnRlID0gcGxhbm5lcl9ydF9mZXRjaChydGksIHJvb3QpOworCisJCWlm IChydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKwkJcGdwYV9jb21wdXRl X2lkZW50aWZpZXJfYnlfcnRpKHJvb3QsIHJ0aSwgJnJpZHNbY291bnQrK10pOworCX0KKworCUFz c2VydChjb3VudCA+IDApOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIENyZWF0ZSBhbiBh cnJheSBvZiByYW5nZSB0YWJsZSBpZGVudGlmaWVycyBmb3IgYWxsIHRoZSBub24tTlVMTCwKKyAq IG5vbi1SVEVfSk9JTiBlbnRyaWVzIGluIHRoZSBQbGFubmVkU3RtdCdzIHJhbmdlIHRhYmxlLgor ICovCitwZ3BhX2lkZW50aWZpZXIgKgorcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5u ZWRfc3RtdChQbGFubmVkU3RtdCAqcHN0bXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBs aXN0X2xlbmd0aChwc3RtdC0+cnRhYmxlKTsKKwlwZ3BhX2lkZW50aWZpZXIgKnJlc3VsdCA9IHBh bGxvYzBfYXJyYXkocGdwYV9pZGVudGlmaWVyLCBydGFibGVfbGVuZ3RoKTsKKwlJbmRleAkgICAq dG9wX3J0aV9tYXA7CisJaW50CQkJcnRpbmZvaW5kZXggPSAwOworCVN1YlBsYW5SVEluZm8gKnJ0 aW5mbyA9IE5VTEw7CisJU3ViUGxhblJUSW5mbyAqbmV4dHJ0aW5mbyA9IE5VTEw7CisKKwkvKgor CSAqIEFjY291bnQgZm9yIHJlbGF0aW9ucyBhZGRkZWQgYnkgaW5oZXJpdGFuY2UgZXhwYW5zaW9u IG9mIHBhcnRpdGlvbmVkCisJICogdGFibGVzLgorCSAqLworCXRvcF9ydGlfbWFwID0gcGdwYV9j cmVhdGVfdG9wX3J0aV9tYXAocnRhYmxlX2xlbmd0aCwgcHN0bXQtPnJ0YWJsZSwKKwkJCQkJCQkJ CQkgIHBzdG10LT5hcHBlbmRSZWxhdGlvbnMpOworCisJLyoKKwkgKiBXaGVuIHdlIGJlZ2luIGl0 ZXJhdGluZywgd2UncmUgcHJvY2Vzc2luZyB0aGUgcG9ydGlvbiBvZiB0aGUgcmFuZ2UKKwkgKiB0 YWJsZSB0aGF0IG9yaWdpbmF0ZWQgZnJvbSB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLCBzbyBz dWJydGluZm8gaXMKKwkgKiBOVUxMLiBMYXRlciwgc3VicnRpbmZvIHdpbGwgYmUgdGhlIFN1YlBs YW5SVEluZm8gZm9yIHRoZSBzdWJxdWVyeSB3aG9zZQorCSAqIHBvcnRpb24gb2YgdGhlIHJhbmdl IHRhYmxlIHdlIGFyZSBwcm9jZXNzaW5nLiBuZXh0cnRpbmZvIGlzIGFsd2F5cyB0aGUKKwkgKiBT dWJQbGFuUlRJbmZvIHRoYXQgZm9sbG93cyB0aGUgY3VycmVudCBvbmUsIGlmIGFueSwgc28gd2hl biB3ZSdyZQorCSAqIHByb2Nlc3NpbmcgdGhlIHRvcC1sZXZlbCBxdWVyeSdzIHBvcnRpb24gb2Yg dGhlIHJhbmdlIHRhYmxlLCB0aGUgbmV4dAorCSAqIFN1YlBsYW5SVEluZm8gaXMgdGhlIHZlcnkg Zmlyc3Qgb25lLgorCSAqLworCWlmIChwc3RtdC0+c3VicnRpbmZvcyAhPSBOVUxMKQorCQluZXh0 cnRpbmZvID0gbGluaXRpYWwocHN0bXQtPnN1YnJ0aW5mb3MpOworCisJLyogTWFpbiBsb29wIG92 ZXIgdGhlIHJhbmdlIHRhYmxlLiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJs ZV9sZW5ndGg7IHJ0aSsrKQorCXsKKwkJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCQlJbmRleAkJ dG9wX3J0aTsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlOworCQlSYW5nZVRibEVudHJ5ICp0b3BfcnRl OworCQljaGFyCSAgICpwYXJ0bnNwID0gTlVMTDsKKwkJY2hhcgkgICAqcGFydHJlbCA9IE5VTEw7 CisJCWludAkJCW9jY3VycmVuY2U7CisJCXBncGFfaWRlbnRpZmllciAqcmlkOworCisJCS8qCisJ CSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgU3ViUGxhblJUSW5mbywgaWYgaXQncyB0aW1lIHRvIGRv IHRoYXQuCisJCSAqCisJCSAqIFRoaXMgbG9vcCBwcm9iYWJseSBzaG91bGRuJ3QgZXZlciBpdGVy YXRlIG1vcmUgdGhhbiBvbmNlLCBiZWNhdXNlCisJCSAqIHRoYXQgd291bGQgaW1wbHkgdGhhdCBh IHN1YnF1ZXJ5IHdhcyBwbGFubmVkIGJ1dCBhZGRlZCBub3RoaW5nIHRvCisJCSAqIHRoZSByYW5n ZSB0YWJsZTsgYnV0IGxldCdzIGJlIGRlZmVuc2l2ZSBhbmQgYXNzdW1lIGl0IGNhbiBoYXBwZW4u CisJCSAqLworCQl3aGlsZSAobmV4dHJ0aW5mbyAhPSBOVUxMICYmIHJ0aSA+IG5leHRydGluZm8t PnJ0b2Zmc2V0KQorCQl7CisJCQlydGluZm8gPSBuZXh0cnRpbmZvOworCQkJaWYgKCsrcnRpbmZv aW5kZXggPj0gbGlzdF9sZW5ndGgocHN0bXQtPnN1YnJ0aW5mb3MpKQorCQkJCW5leHRydGluZm8g PSBOVUxMOworCQkJZWxzZQorCQkJCW5leHRydGluZm8gPSBsaXN0X250aChwc3RtdC0+c3VicnRp bmZvcywgcnRpbmZvaW5kZXgpOworCQl9CisKKwkJLyogRmV0Y2ggdGhlIHJhbmdlIHRhYmxlIGVu dHJ5LCBpZiBhbnkuICovCisJCXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcHN0bXQtPnJ0YWJsZSk7CisK KwkJLyoKKwkJICogV2UgY2FuJ3QgYW5kIGRvbid0IG5lZWQgdG8gaWRlbnRpZnkgbnVsbCBlbnRy aWVzLCBhbmQgd2UgZG9uJ3Qgd2FudAorCQkgKiB0byBpZGVudGlmeSBqb2luIGVudHJpZXMuCisJ CSAqLworCQlpZiAocnRlID09IE5VTEwgfHwgcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJ Y29udGludWU7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSByZWxhdGlvbiBhZGRlZCBi eSBwYXJ0aXRpb25lZCB0YWJsZSBleHBhbnNpb24sCisJCSAqIHRoZW4gdGhlIHRvcCBSVEkvUlRF IGFyZSBqdXN0IHRoZSBzYW1lIGFzIHRoaXMgUlRJL1JURS4gT3RoZXJ3aXNlLAorCQkgKiB3ZSBu ZWVkIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRvcCBSVEkvUlRFLCBhbmQgbXVzdCBhbHNvIGZl dGNoCisJCSAqIHRoZSBwYXJ0aXRpb24gc2NoZW1hIGFuZCBuYW1lLgorCQkgKi8KKwkJdG9wX3J0 aSA9IHRvcF9ydGlfbWFwW3J0aSAtIDFdOworCQlpZiAocnRpID09IHRvcF9ydGkpCisJCQl0b3Bf cnRlID0gcnRlOworCQllbHNlCisJCXsKKwkJCXRvcF9ydGUgPSBydF9mZXRjaCh0b3BfcnRpLCBw c3RtdC0+cnRhYmxlKTsKKwkJCXBhcnRuc3AgPQorCQkJCWdldF9uYW1lc3BhY2VfbmFtZV9vcl90 ZW1wKGdldF9yZWxfbmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKKwkJCXBhcnRyZWwgPSBnZXRfcmVs X25hbWUocnRlLT5yZWxpZCk7CisJCX0KKworCQkvKiBDb21wdXRlIHRoZSBjb3JyZWN0IG9jY3Vy cmVuY2UgbnVtYmVyLiAqLworCQlvY2N1cnJlbmNlID0gcGdwYV9vY2N1cnJlbmNlX251bWJlcihw c3RtdC0+cnRhYmxlLCB0b3BfcnRpX21hcCwKKwkJCQkJCQkJCQkJcnRpbmZvLCB0b3BfcnRpKTsK KworCQkvKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcGxhbiAoTlVMTCBmb3IgdG9wbGV2 ZWwgcXVlcnkpLiAqLworCQlwbGFuX25hbWUgPSBydGluZm8gPT0gTlVMTCA/IE5VTEwgOiBydGlu Zm8tPnBsYW5fbmFtZTsKKworCQkvKiBTYXZlIGFsbCB0aGUgZGV0YWlscyB3ZSd2ZSBkZXJpdmVk LiAqLworCQlyaWQgPSAmcmVzdWx0W3J0aSAtIDFdOworCQlyaWQtPmFsaWFzX25hbWUgPSB0b3Bf cnRlLT5lcmVmLT5hbGlhc25hbWU7CisJCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJ CXJpZC0+cGFydG5zcCA9IHBhcnRuc3A7CisJCXJpZC0+cGFydHJlbCA9IHBhcnRyZWw7CisJCXJp ZC0+cGxhbl9uYW1lID0gcGxhbl9uYW1lOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8q CisgKiBTZWFyY2ggZm9yIGEgcGdwYV9pZGVudGlmaWVyIGluIHRoZSBhcnJheSBvZiBpZGVudGlm aWVycyBjb21wdXRlZCBmb3IgdGhlCisgKiByYW5nZSB0YWJsZS4gSWYgZXhhY3RseSBvbmUgbWF0 Y2ggaXMgZm91bmQsIHJldHVybiB0aGUgbWF0Y2hpbmcgUlRJOyBlbHNlCisgKiByZXR1cm4gMC4K KyAqLworSW5kZXgKK3BncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFibGVf bGVuZ3RoLAorCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJ CQkJIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCUluZGV4CQlyZXN1bHQgPSAwOworCisJZm9y IChJbmRleCBydGkgPSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJeworCQlwZ3Bh X2lkZW50aWZpZXIgKnJ0aV9yaWQgPSAmcnRfaWRlbnRpZmllcnNbcnRpIC0gMV07CisKKwkJLyog SWYgdGhlcmUncyBubyBpZGVudGlmaWVyIGZvciB0aGlzIFJUSSwgc2tpcCBpdC4gKi8KKwkJaWYg KHJ0aV9yaWQtPmFsaWFzX25hbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAq IElmIGl0IG1hdGNoZXMsIHJldHVybiB0aGlzIFJUSS4gQXMgdXN1YWwsIGFuIG9taXR0ZWQgcGFy dGl0aW9uCisJCSAqIHNjaGVtYSBtYXRjaGVzIGFueXRoaW5nLCBidXQgcGFydGl0aW9uIGFuZCBw bGFuIG5hbWVzIG11c3QgZWl0aGVyCisJCSAqIG1hdGNoIGV4YWN0bHkgb3IgYmUgb21pdHRlZCBv biBib3RoIHNpZGVzLgorCQkgKi8KKwkJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHJ0aV9y aWQtPmFsaWFzX25hbWUpID09IDAgJiYKKwkJCXJpZC0+b2NjdXJyZW5jZSA9PSBydGlfcmlkLT5v Y2N1cnJlbmNlICYmCisJCQkocmlkLT5wYXJ0bnNwID09IE5VTEwgfHwgcnRpX3JpZC0+cGFydG5z cCA9PSBOVUxMIHx8CisJCQkgc3RyY21wKHJpZC0+cGFydG5zcCwgcnRpX3JpZC0+cGFydG5zcCkg PT0gMCkgJiYKKwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGFydHJlbCwgcnRp X3JpZC0+cGFydHJlbCkgJiYKKwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGxh bl9uYW1lLCBydGlfcmlkLT5wbGFuX25hbWUpKQorCQl7CisJCQlpZiAocmVzdWx0ICE9IDApCisJ CQl7CisJCQkJLyogTXVsdGlwbGUgbWF0Y2hlcyB3ZXJlIGZvdW5kLiAqLworCQkJCXJldHVybiAw OworCQkJfQorCQkJcmVzdWx0ID0gcnRpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoKKyAqIEJ1aWxkIGEgbWFwcGluZyBmcm9tIGVhY2ggUlRJIHRvIHRoZSBSVEkgd2hvc2Ug YWxpYXNfbmFtZSB3aWxsIGJlIHVzZWQgdG8KKyAqIGNvbnN0cnVjdCB0aGUgcmFuZ2UgdGFibGUg aWRlbnRpZmllci4KKyAqCisgKiBGb3IgY2hpbGQgcmVsYXRpb25zLCB0aGlzIGlzIHRoZSB0b3Bt b3N0IHBhcmVudCB0aGF0IGlzIHN0aWxsIG9mIHR5cGUKKyAqIFJURV9SRUxBVElPTi4gRm9yIG90 aGVyIHJlbGF0aW9ucywgaXQncyBqdXN0IHRoZSBvcmlnaW5hbCBSVEkuCisgKgorICogU2luY2Ug d2UncmUgZXZlbnR1YWxseSBnb2luZyB0byBuZWVkIHRoaXMgaW5mb3JtYXRpb24gZm9yIGV2ZXJ5 IFJUSSBpbgorICogdGhlIHJhbmdlIHRhYmxlLCBpdCdzIGJlc3QgdG8gY29tcHV0ZSBhbGwgdGhl IGFuc3dlcnMgaW4gYSBzaW5nbGUgcGFzcyBvdmVyCisgKiB0aGUgQXBwZW5kUmVsSW5mbyBsaXN0 LiBPdGhlcndpc2UsIHdlIG1pZ2h0IGVuZCB1cCBzZWFyY2hpbmcgdGhyb3VnaCB0aGF0CisgKiBs aXN0IHJlcGVhdGVkbHkgZm9yIGVudHJpZXMgb2YgaW50ZXJlc3QuCisgKgorICogTm90ZSB0aGF0 IHRoZSByZXR1cm5lZCBhcnJheSBpcyB1c2VzIHplcm8tYmFzZWQgaW5kZXhpbmcsIHdoaWxlIFJU SXMgdXNlCisgKiAxLWJhc2VkIGluZGV4aW5nLCBzbyBzdWJ0cmFjdCAxIGZyb20gdGhlIFJUSSBi ZWZvcmUgbG9va2luZyBpdCB1cCBpbiB0aGUKKyAqIGFycmF5LgorICovCitzdGF0aWMgSW5kZXgg KgorcGdwYV9jcmVhdGVfdG9wX3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRh YmxlLCBMaXN0ICphcHBpbmZvcykKK3sKKwlJbmRleAkgICAqdG9wX3J0aV9tYXAgPSBwYWxsb2Mw X2FycmF5KEluZGV4LCBydGFibGVfbGVuZ3RoKTsKKworCS8qIEluaXRpYWxseSwgbWFrZSBldmVy eSBSVEkgcG9pbnQgdG8gaXRzZWxmLiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0 YWJsZV9sZW5ndGg7ICsrcnRpKQorCQl0b3BfcnRpX21hcFtydGkgLSAxXSA9IHJ0aTsKKworCS8q IFVwZGF0ZSB0aGUgbWFwIGZvciBlYWNoIEFwcGVuZFJlbEluZm8gb2JqZWN0LiAqLworCWZvcmVh Y2hfbm9kZShBcHBlbmRSZWxJbmZvLCBhcHBpbmZvLCBhcHBpbmZvcykKKwl7CisJCUluZGV4CQlw YXJlbnRfcnRpID0gYXBwaW5mby0+cGFyZW50X3JlbGlkOworCQlSYW5nZVRibEVudHJ5ICpwYXJl bnRfcnRlID0gcnRfZmV0Y2gocGFyZW50X3J0aSwgcnRhYmxlKTsKKworCQkvKiBJZiB0aGUgcGFy ZW50IGlzIG5vdCBSVEVfUkVMQVRJT04sIGlnbm9yZSB0aGlzIGVudHJ5LiAqLworCQlpZiAocGFy ZW50X3J0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBNYXAgdGhlIGNoaWxkIHRvIHdoZXJldmVyIHdlIG1hcHBlZCB0aGUgcGFyZW50LiBQYXJl bnRzIGFsd2F5cworCQkgKiBwcmVjZWRlIHRoZWlyIGNoaWxkcmVuIGluIHRoZSBBcHBlbmRSZWxJ bmZvIGxpc3QsIHNvIHRoaXMgc2hvdWxkCisJCSAqIHdvcmsgb3V0LgorCQkgKi8KKwkJdG9wX3J0 aV9tYXBbYXBwaW5mby0+Y2hpbGRfcmVsaWQgLSAxXSA9IHRvcF9ydGlfbWFwW3BhcmVudF9ydGkg LSAxXTsKKwl9CisKKwlyZXR1cm4gdG9wX3J0aV9tYXA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBv Y2N1cmVuY2UgbnVtYmVyIG9mIGEgY2VydGFpbiByZWxhdGlvbiB3aXRoaW4gYSBjZXJ0YWluIHN1 YnF1ZXJ5LgorICoKKyAqIFRoZSBzYW1lIGFsaWFzIG5hbWUgY2FuIG9jY3VyIG11bHRpcGxlIHRp bWVzIHdpdGhpbiBhIHN1YnF1ZXJ5LCBidXQgd2Ugd2FudAorICogdG8gZGlzYW1iaWd1YXRlIGJ5 IGdpdmluZyBkaWZmZXJlbnQgb2NjdXJyZW5jZXMgZGlmZmVyZW50IGludGVnZXIgaW5kZXhlcy4K KyAqIEhvd2V2ZXIsIGNoaWxkIHRhYmxlcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBpbmNsdWRpbmcg dGhlIHRhYmxlIG5hbWUgcmF0aGVyCisgKiB0aGFuIGJ5IGluY3JlbWVudGluZyB0aGUgb2NjdXJy ZW5jZSBudW1iZXI7IGFuZCBqb2lucyBhcmUgbm90IG5hbWVkIGFuZCBzbworICogc2hvdWxkbid0 IGluY3JlbWVudCB0aGUgb2NjdXJlbmNlIG51bWJlciBlaXRoZXIuCisgKi8KK3N0YXRpYyBpbnQK K3BncGFfb2NjdXJyZW5jZV9udW1iZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAs CisJCQkJCSAgIFN1YlBsYW5SVEluZm8gKnJ0aW5mbywgSW5kZXggcnRpKQoreworCUluZGV4CQly dG9mZnNldCA9IChydGluZm8gPT0gTlVMTCkgPyAwIDogcnRpbmZvLT5ydG9mZnNldDsKKwlpbnQJ CQlvY2N1cnJlbmNlID0gMTsKKwlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0 YWJsZSk7CisKKwlmb3IgKEluZGV4IHByaW9yX3J0aSA9IHJ0b2Zmc2V0ICsgMTsgcHJpb3JfcnRp IDwgcnRpOyArK3ByaW9yX3J0aSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKwor CQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQgaXMgYSBy ZWxhdGlvbiwgc2tpcCBpdC4KKwkJICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRyaWVzIGFy ZSBkaXNhbWJpZ3VhdGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQgbmFtZSBv ZiB0aGUgdGFibGUsIG5vdCBieSBjb3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3VycmVuY2Vz CisJCSAqIG9mIHRoZSBzYW1lIHRhYmxlLgorCQkgKi8KKwkJaWYgKHRvcF9ydGlfbWFwW3ByaW9y X3J0aSAtIDFdICE9IHByaW9yX3J0aSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgam9pbnMu ICovCisJCXByaW9yX3J0ZSA9IHJ0X2ZldGNoKHByaW9yX3J0aSwgcnRhYmxlKTsKKwkJaWYgKHBy aW9yX3J0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAg aWYgdGhlIGFsaWFzIG5hbWUgZGlmZmVycy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVy ZWYtPmFsaWFzbmFtZSwgcnRlLT5lcmVmLT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsK KworCQkvKiBMb29rcyBsaWtlIGEgdHJ1ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsK Kwl9CisKKwlyZXR1cm4gb2NjdXJyZW5jZTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf aWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMDAw ZDJiNzA4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9p ZGVudGlmaWVyLmgKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog cGdwYV9pZGVudGlmaWVyLmgKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJzIGZv ciByYW5nZSB0YWJsZSBlbnRyaWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KworI2lmbmRlZiBQR1BBX0lERU5USUZJRVJfSAorI2RlZmluZSBQR1BBX0lERU5USUZJRVJfSAor CisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVz LmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfaWRlbnRpZmllcgoreworCWNvbnN0IGNoYXIgKmFs aWFzX25hbWU7CisJaW50CQkJb2NjdXJyZW5jZTsKKwljb25zdCBjaGFyICpwYXJ0bnNwOworCWNv bnN0IGNoYXIgKnBhcnRyZWw7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworfSBwZ3BhX2lkZW50 aWZpZXI7CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgcG9zc2libHkt TlVMTCBzdHJpbmdzLiAqLworc3RhdGljIGlubGluZSBib29sCitzdHJpbmdzX2VxdWFsX29yX2Jv dGhfbnVsbChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCWlmIChhID09IGIpCisJ CXJldHVybiB0cnVlOworCWVsc2UgaWYgKGEgPT0gTlVMTCB8fCBiID09IE5VTEwpCisJCXJldHVy biBmYWxzZTsKKwllbHNlCisJCXJldHVybiBzdHJjbXAoYSwgYikgPT0gMDsKK30KKworZXh0ZXJu IGNvbnN0IGNoYXIgKnBncGFfaWRlbnRpZmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVy ICpyaWQpOworZXh0ZXJuIHZvaWQgcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKFBsYW5u ZXJJbmZvICpyb290LCBJbmRleCBydGksCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpy aWQpOworZXh0ZXJuIGludAlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKFBsYW5u ZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJ CQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRzKTsKK2V4dGVybiBwZ3BhX2lkZW50aWZpZXIgKnBn cGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10 KTsKKworZXh0ZXJuIEluZGV4IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBy dGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworCisjZW5kaWYKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfam9pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5lYzhlMWE2NjZlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9qb2luLmMKQEAgLTAsMCArMSw2MjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHBncGFfam9pbi5jCisgKgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBn cGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJu b2Rlcy9wcmludC5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKworLyoKKyAqIFRl bXBvcmFyeSBvYmplY3QgdXNlZCB3aGVuIHVucm9sbGluZyBhIGpvaW4gdHJlZS4KKyAqLworc3Ry dWN0IHBncGFfam9pbl91bnJvbGxlcgoreworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7CisJdW5zaWdu ZWQJbnVzZWQ7CisJUGxhbgkgICAqb3V0ZXJfc3VicGxhbjsKKwlFbGlkZWROb2RlICpvdXRlcl9l bGlkZWRfbm9kZTsKKwlib29sCQlvdXRlcl9iZW5lYXRoX2FueV9nYXRoZXI7CisJcGdwYV9qb2lu X3N0cmF0ZWd5ICpzdHJhdGVneTsKKwlQbGFuCSAgKippbm5lcl9zdWJwbGFuczsKKwlFbGlkZWRO b2RlICoqaW5uZXJfZWxpZGVkX25vZGVzOworCXBncGFfam9pbl91bnJvbGxlciAqKmlubmVyX3Vu cm9sbGVyczsKKwlib29sCSAgICppbm5lcl9iZW5lYXRoX2FueV9nYXRoZXI7Cit9OworCitzdGF0 aWMgcGdwYV9qb2luX3N0cmF0ZWd5IHBncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtl cl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCSAgUGxhbiAqcGxhbiwKKwkJCQkJCQkJCQkJ ICBQbGFuICoqcmVhbG91dGVyLAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsaW5uZXIsCisJCQkJ CQkJCQkJCSAgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBFbGlk ZWROb2RlICoqZWxpZGVkcmVhbGlubmVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9v dXRlcl9nYXRoZXIsCisJCQkJCQkJCQkJCSAgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcik7 CitzdGF0aWMgRWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10 LCBQbGFuICoqcGxhbik7CitzdGF0aWMgRWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX2FueV9nYXRo ZXIoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJCQkgICBib29sICpm b3VuZF9hbnlfZ2F0aGVyKTsKK3N0YXRpYyBib29sIHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBs YW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJCQlFbGlkZWROb2RlICoqZWxp ZGVkX25vZGUpOworCitzdGF0aWMgYm9vbCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKFBsYW4g KnBsYW4pOworc3RhdGljIGJvb2wgaXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pOworCisvKgor ICogQ3JlYXRlIGFuIGluaXRpYWxseS1lbXB0eSBvYmplY3QgZm9yIHVucm9sbGluZyBqb2lucy4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBoZWxwZXIgb2JqZWN0IHRoYXQgY2FuIGxh dGVyIGJlIHVzZWQgdG8gY3JlYXRlIGEKKyAqIHBncGFfdW5yb2xsZWRfam9pbiwgYWZ0ZXIgZmly c3QgY2FsbGluZyBwZ3BhX3Vucm9sbF9qb2luIG9uZSBvciBtb3JlIHRpbWVzLgorICovCitwZ3Bh X2pvaW5fdW5yb2xsZXIgKgorcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKQoreworCXBn cGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcjsKKworCWpvaW5fdW5yb2xsZXIgPSBwYWxs b2MwX29iamVjdChwZ3BhX2pvaW5fdW5yb2xsZXIpOworCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0 ZWQgPSA0OworCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJcGFsbG9jX2FycmF5KHBncGFf am9pbl9zdHJhdGVneSwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxl ci0+aW5uZXJfc3VicGxhbnMgPQorCQlwYWxsb2NfYXJyYXkoUGxhbiAqLCBqb2luX3Vucm9sbGVy LT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMgPQorCQlw YWxsb2NfYXJyYXkoRWxpZGVkTm9kZSAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlq b2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMgPQorCQlwYWxsb2NfYXJyYXkocGdwYV9qb2lu X3Vucm9sbGVyICosIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXIt PmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciA9CisJCXBhbGxvY19hcnJheShib29sLCBqb2luX3Vu cm9sbGVyLT5uYWxsb2NhdGVkKTsKKworCXJldHVybiBqb2luX3Vucm9sbGVyOworfQorCisvKgor ICogVW5yb2xsIG9uZSBsZXZlbCBvZiBhbiB1bnJvbGxhYmxlIGpvaW4gdHJlZS4KKyAqCisgKiBP dXIgYmFzaWMgZ29hbCBoZXJlIGlzIHRvIHVucm9sbCBqb2luIHRyZWVzIGFzIHRoZXkgb2NjdXIg aW4gdGhlIFBsYW4KKyAqIHRyZWUgaW50byBhIHNpbXBsZXIgYW5kIG1vcmUgcmVndWxhciBzdHJ1 Y3R1cmUgdGhhdCB3ZSBjYW4gbW9yZSBlYXNpbHkKKyAqIHVzZSBmb3IgZnVydGhlciBwcm9jZXNz aW5nLiBVbnJvbGxpbmcgaXMgb3V0ZXItZGVlcCwgc28gaWYgdGhlIHBsYW4gdHJlZQorICogaGFz IEpvaW4xKEpvaW4yKEEsQiksSm9pbjMoQyxEKSksIHRoZSBzYW1lIGpvaW4gdW5yb2xsZXIgb2Jq ZWN0IHNob3VsZCBiZQorICogdXNlZCBmb3IgSm9pbjEgYW5kIEpvaW4yLCBidXQgYSBkaWZmZXJl bnQgb25lIHdpbGwgYmUgbmVlZGVkIGZvciBKb2luMywKKyAqIHNpbmNlIHRoYXQgaW52b2x2ZXMg YSBqb2luIHdpdGhpbiB0aGUgKmlubmVyKiBzaWRlIG9mIGFub3RoZXIgam9pbi4KKyAqCisgKiBw Z3BhX3BsYW5fd2Fsa2VyIGNyZWF0ZXMgYSAidG9wIGxldmVsIiBqb2luIHVucm9sbGVyIG9iamVj dCB3aGVuIGl0CisgKiBlbmNvdW50ZXJzIGEgam9pbiBpbiBhIHBvcnRpb24gb2YgdGhlIHBsYW4g dHJlZSBpbiB3aGljaCBubyBqb2luIHVucm9sbGVyCisgKiBpcyBhbHJlYWR5IGFjdGl2ZS4gRnJv bSB0aGVyZSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5nCisgKiB0 byB3aGF0IHBvcnRpb24gb2YgdGhlIHBsYW4gdHJlZSB0aGF0IGpvaW4gdW5yb2xsZXIgYXBwbGll cywgYW5kIGZvcgorICogY3JlYXRpbmcgYW55IHN1Ym9yZGluYXRlIGpvaW4gdW5yb2xsZXIgb2Jq ZWN0cyB0aGF0IGFyZSBuZWVkZWQgYXMgYSByZXN1bHQKKyAqIG9mIG5vbi1vdXRlci1kZWVwIGpv aW4gdHJlZXMuIFdlIGRvIHRoaXMgYnkgcmV0dXJuaW5nIHRoZSBqb2luIHVucm9sbGVyCisgKiBv YmplY3RzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGZ1cnRoZXIgdHJhdmVyc2FsIG9mIHRoZSBv dXRlciBhbmQgaW5uZXIKKyAqIHN1YnRyZWVzIG9mIHRoZSBjdXJyZW50IHBsYW4gbm9kZSB2aWEg Km91dGVyX2pvaW5fdW5yb2xsZXIgYW5kCisgKiAqaW5uZXJfam9pbl91bnJvbGxlciwgcmVzcGVj dGl2ZWx5LgorICovCit2b2lkCitwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCSBib29sIGJlbmVhdGhfYW55X2dhdGhlciwK KwkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5f dW5yb2xsZXIgKipvdXRlcl9qb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIg Kippbm5lcl9qb2luX3Vucm9sbGVyKQoreworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsK KwlQbGFuCSAgICpyZWFsaW5uZXIsCisJCQkgICAqcmVhbG91dGVyOworCUVsaWRlZE5vZGUgKmVs aWRlZGlubmVyLAorCQkJICAgKmVsaWRlZG91dGVyOworCWludAkJCW47CisJYm9vbAkJZm91bmRf YW55X291dGVyX2dhdGhlciA9IGZhbHNlOworCWJvb2wJCWZvdW5kX2FueV9pbm5lcl9nYXRoZXIg PSBmYWxzZTsKKworCUFzc2VydChqb2luX3Vucm9sbGVyICE9IE5VTEwpOworCisJLyoKKwkgKiBX ZSBuZWVkIHRvIHBhc3MgdGhlIGpvaW5fdW5yb2xsZXIgb2JqZWN0IGRvd24gdGhyb3VnaCBjZXJ0 YWluIHR5cGVzIG9mCisJICogcGxhbiBub2RlcyAtLSBhbnl0aGluZyB0aGF0J3MgY29uc2lkZXJl ZCBwYXJ0IG9mIHRoZSBqb2luIHN0cmF0ZWd5LCBhbmQKKwkgKiBhbnkgb3RoZXIgbm9kZXMgdGhh dCBjYW4gb2NjdXIgaW4gYSBqb2luIHRyZWUgZGVzcGl0ZSBub3QgYmVpbmcgc2NhbnMKKwkgKiBv ciBqb2lucy4KKwkgKgorCSAqIFRoaXMgaW5jbHVkZXM6CisJICoKKwkgKiAoMSkgTWF0ZXJpYWxp emUsIE1lbW9pemUsIGFuZCBIYXNoIG5vZGVzLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgam9pbgor CSAqIHN0cmF0ZWd5LAorCSAqCisJICogKDIpIEdhdGhlciBhbmQgR2F0aGVyIE1lcmdlIG5vZGVz LCB3aGljaCBjYW4gb2NjdXIgYXQgYW55IHBvaW50IGluIHRoZQorCSAqIGpvaW4gdHJlZSB3aGVy ZSB0aGUgcGxhbm5lciBkZWNpZGVkIHRvIGluaXRpYXRlIHBhcmFsbGVsaXNtLAorCSAqCisJICog KDMpIFNvcnQgYW5kIEluY3JlbWVudGFsU29ydCBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGJlbmVh dGggTWVyZ2VKb2luCisJICogb3IgR2F0aGVyTWVyZ2UsCisJICoKKwkgKiAoNCkgQWdnIGFuZCBV bmlxdWUgbm9kZXMsIHdoaWNoIGNhbiBvY2N1ciB3aGVuIHdlIGRlY2lkZSB0byBtYWtlIHRoZQor CSAqIG51bGxhYmxlIHNpZGUgb2YgYSBzZW1pam9pbiB1bmlxdWUgYW5kIHRoZW4gam9pbiB0aGUg cmVzdWx0LCBhbmQKKwkgKgorCSAqICg1KSBSZXN1bHQgbm9kZXMgd2l0aCBjaGlsZHJlbiwgd2hp Y2ggY2FuIGJlIGFkZGVkIGVpdGhlciB0byBwcm9qZWN0IHRvCisJICogZW5mb3JjZSBhIG9uZS10 aW1lIGZpbHRlciAoYnV0IFJlc3VsdCBub2RlcyB3aXRob3V0IGNoaWxkcmVuIGFyZQorCSAqIGRl Z2VuZXJhdGUgc2NhbnMgb3Igam9pbnMpLgorCSAqLworCWlmIChJc0EocGxhbiwgTWF0ZXJpYWwp IHx8IElzQShwbGFuLCBNZW1vaXplKSB8fCBJc0EocGxhbiwgSGFzaCkKKwkJfHwgSXNBKHBsYW4s IEdhdGhlcikgfHwgSXNBKHBsYW4sIEdhdGhlck1lcmdlKQorCQl8fCBpc19zb3J0aW5nX3BsYW4o cGxhbikgfHwgSXNBKHBsYW4sIEFnZykgfHwgSXNBKHBsYW4sIFVuaXF1ZSkKKwkJfHwgaXNfcmVz dWx0X25vZGVfd2l0aF9jaGlsZChwbGFuKSkKKwl7CisJCSpvdXRlcl9qb2luX3Vucm9sbGVyID0g am9pbl91bnJvbGxlcjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2luY2Ugd2UndmUgYWxy ZWFkeSBoYW5kbGVkIG5vZGVzIHRoYXQgcmVxdWlyZSBwYXNzLXRocm91Z2ggdHJlYXRtZW50LAor CSAqIHRoaXMgc2hvdWxkIGJlIGFuIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlzdHJhdGVneSA9 IHBncGFfZGVjb21wb3NlX2pvaW4od2Fsa2VyLCBwbGFuLAorCQkJCQkJCQkgICAmcmVhbG91dGVy LCAmcmVhbGlubmVyLAorCQkJCQkJCQkgICAmZWxpZGVkb3V0ZXIsICZlbGlkZWRpbm5lciwKKwkJ CQkJCQkJICAgJmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlf aW5uZXJfZ2F0aGVyKTsKKworCS8qIElmIG91ciB3b3Jrc3BhY2UgaXMgZnVsbCwgZXhwYW5kIGl0 LiAqLworCWlmIChqb2luX3Vucm9sbGVyLT5udXNlZCA+PSBqb2luX3Vucm9sbGVyLT5uYWxsb2Nh dGVkKQorCXsKKwkJam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCAqPSAyOworCQlqb2luX3Vucm9s bGVyLT5zdHJhdGVneSA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5zdHJhdGVn eSwKKwkJCQkJCSAgIHBncGFfam9pbl9zdHJhdGVneSwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXIt Pm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCQlyZXBh bGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucywKKwkJCQkJCSAgIFBsYW4g KiwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVy LT5pbm5lcl9lbGlkZWRfbm9kZXMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+ aW5uZXJfZWxpZGVkX25vZGVzLAorCQkJCQkJICAgRWxpZGVkTm9kZSAqLAorCQkJCQkJICAgam9p bl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhf YW55X2dhdGhlciA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5l YXRoX2FueV9nYXRoZXIsCisJCQkJCQkgICBib29sLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+ bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCQlyZXBh bGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMsCisJCQkJCQkgICBwZ3Bh X2pvaW5fdW5yb2xsZXIgKiwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOwor CX0KKworCS8qCisJICogU2luY2Ugd2UncmUgZmxhdHRlbmluZyBvdXRlci1kZWVwIGpvaW4gdHJl ZXMsIGl0IGZvbGxvd3MgdGhhdCBpZiB0aGUKKwkgKiBvdXRlciBzaWRlIGlzIHN0aWxsIGFuIHVu cm9sbGFibGUgam9pbiwgaXQgc2hvdWxkIGJlIHVucm9sbGVkIGludG8gdGhpcworCSAqIHNhbWUg b2JqZWN0LiBPdGhlcndpc2UsIHdlJ3ZlIHJlYWNoZWQgdGhlIGxpbWl0IG9mIHdoYXQgd2UgY2Fu IHVucm9sbAorCSAqIGludG8gdGhpcyBvYmplY3QgYW5kIG11c3QgcmVtZW1iZXIgdGhlIG91dGVy IHNpZGUgYXMgdGhlIGZpbmFsIG91dGVyCisJICogc3VicGxhbi4KKwkgKi8KKwlpZiAoZWxpZGVk b3V0ZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pvaW4ocmVhbG91dGVyKSkKKwkJKm91dGVyX2pvaW5f dW5yb2xsZXIgPSBqb2luX3Vucm9sbGVyOworCWVsc2UKKwl7CisJCWpvaW5fdW5yb2xsZXItPm91 dGVyX3N1YnBsYW4gPSByZWFsb3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9u b2RlID0gZWxpZGVkb3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2JlbmVhdGhfYW55X2dh dGhlciA9CisJCQliZW5lYXRoX2FueV9nYXRoZXIgfHwgZm91bmRfYW55X291dGVyX2dhdGhlcjsK Kwl9CisKKwkvKgorCSAqIFN0b3JlIHRoZSBpbm5lciBzdWJwbGFuLiBJZiBpdCdzIGFuIHVucm9s bGFibGUgam9pbiwgaXQgbmVlZHMgdG8gYmUKKwkgKiBmbGF0dGVuZWQgaW4gdHVybiwgYnV0IGlu dG8gYSBuZXcgdW5yb2xsZXIgb2JqZWN0LCBub3QgdGhpcyBvbmUuCisJICovCisJbiA9IGpvaW5f dW5yb2xsZXItPm51c2VkKys7CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3lbbl0gPSBzdHJhdGVn eTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFuc1tuXSA9IHJlYWxpbm5lcjsKKwlqb2lu X3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNbbl0gPSBlbGlkZWRpbm5lcjsKKwlqb2luX3Vu cm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXJbbl0gPQorCQliZW5lYXRoX2FueV9nYXRo ZXIgfHwgZm91bmRfYW55X2lubmVyX2dhdGhlcjsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAm JiBwZ3BhX2lzX2pvaW4ocmVhbGlubmVyKSkKKwkJKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBwZ3Bh X2NyZWF0ZV9qb2luX3Vucm9sbGVyKCk7CisJZWxzZQorCQkqaW5uZXJfam9pbl91bnJvbGxlciA9 IE5VTEw7CisJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW25dID0gKmlubmVyX2pvaW5f dW5yb2xsZXI7Cit9CisKKy8qCisgKiBVc2UgdGhlIGRhdGEgd2UndmUgYWNjdW11bGF0ZWQgaW4g YSBwZ3BhX2pvaW5fdW5yb2xsZXIgb2JqZWN0IHRvIGNvbnN0cnVjdAorICogYSBwZ3BhX3Vucm9s bGVkX2pvaW4uCisgKi8KK3BncGFfdW5yb2xsZWRfam9pbiAqCitwZ3BhX2J1aWxkX3Vucm9sbGVk X2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9qb2lu X3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKQoreworCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47 CisJaW50CQkJaTsKKworCS8qCisJICogV2Ugc2hvdWxkbid0IGhhdmUgZ29uZSBldmVuIHNvIGZh ciBhcyB0byBjcmVhdGUgYSBqb2luIHVucm9sbGVyIHVubGVzcworCSAqIHdlIGZvdW5kIGF0IGxl YXN0IG9uZSB1bnJvbGxhYmxlIGpvaW4uCisJICovCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXItPm51 c2VkID4gMCk7CisKKwkvKiBBbGxvY2F0ZSByZXN1bHQgc3RydWN0dXJlcy4gKi8KKwl1am9pbiA9 IHBhbGxvYzBfb2JqZWN0KHBncGFfdW5yb2xsZWRfam9pbik7CisJdWpvaW4tPm5pbm5lciA9IGpv aW5fdW5yb2xsZXItPm51c2VkOworCXVqb2luLT5zdHJhdGVneSA9IHBhbGxvYzBfYXJyYXkocGdw YV9qb2luX3N0cmF0ZWd5LCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisJdWpvaW4tPmlubmVyID0g cGFsbG9jMF9hcnJheShwZ3BhX2pvaW5fbWVtYmVyLCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisK KwkvKiBIYW5kbGUgdGhlIG91dGVybW9zdCBqb2luLiAqLworCXVqb2luLT5vdXRlci5wbGFuID0g am9pbl91bnJvbGxlci0+b3V0ZXJfc3VicGxhbjsKKwl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUg PSBqb2luX3Vucm9sbGVyLT5vdXRlcl9lbGlkZWRfbm9kZTsKKwl1am9pbi0+b3V0ZXIuc2NhbiA9 CisJCXBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5vdXRlci5wbGFuLAorCQkJCQkJdWpv aW4tPm91dGVyLmVsaWRlZF9ub2RlLAorCQkJCQkJam9pbl91bnJvbGxlci0+b3V0ZXJfYmVuZWF0 aF9hbnlfZ2F0aGVyLAorCQkJCQkJdHJ1ZSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdGhlIGpvaW5z IGZyb20gdGhlIGRlZXBlc3QgcGFydCBvZiB0aGUgcGxhbiB0cmVlIHRvIGFwcGVhcgorCSAqIGZp cnN0IGluIHRoZSByZXN1bHQgb2JqZWN0LCBidXQgdGhlIGpvaW4gdW5yb2xsZXIgYWRkcyB0aGVt IGluIGV4YWN0bHkKKwkgKiB0aGUgcmV2ZXJzZSBvZiB0aGF0IG9yZGVyLCBzbyB3ZSBuZWVkIHRv IGZsaXAgdGhlIG9yZGVyIG9mIHRoZSBhcnJheXMKKwkgKiB3aGVuIGNvbnN0cnVjdGluZyB0aGUg ZmluYWwgcmVzdWx0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBqb2luX3Vucm9sbGVyLT5udXNl ZDsgKytpKQorCXsKKwkJaW50CQkJayA9IGpvaW5fdW5yb2xsZXItPm51c2VkIC0gaSAtIDE7CisK KwkJLyogQ29weSBzdHJhdGVneSwgUGxhbiwgYW5kIEVsaWRlZE5vZGUuICovCisJCXVqb2luLT5z dHJhdGVneVtpXSA9IGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5W2tdOworCQl1am9pbi0+aW5uZXJb aV0ucGxhbiA9IGpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zW2tdOworCQl1am9pbi0+aW5u ZXJbaV0uZWxpZGVkX25vZGUgPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNba107 CisKKwkJLyoKKwkJICogRmlsbCBpbiByZW1haW5pbmcgZGV0YWlscywgdXNpbmcgZWl0aGVyIHRo ZSBuZXN0ZWQgam9pbiB1bnJvbGxlciwKKwkJICogb3IgYnkgZGVyaXZpbmcgdGhlbSBmcm9tIHRo ZSBwbGFuIGFuZCBlbGlkZWQgbm9kZXMuCisJCSAqLworCQlpZiAoam9pbl91bnJvbGxlci0+aW5u ZXJfdW5yb2xsZXJzW2tdICE9IE5VTEwpCisJCQl1am9pbi0+aW5uZXJbaV0udW5yb2xsZWRfam9p biA9CisJCQkJcGdwYV9idWlsZF91bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkgam9p bl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW2tdKTsKKwkJZWxzZQorCQkJdWpvaW4tPmlubmVy W2ldLnNjYW4gPQorCQkJCXBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5pbm5lcltpXS5w bGFuLAorCQkJCQkJCQl1am9pbi0+aW5uZXJbaV0uZWxpZGVkX25vZGUsCisJCQkJCQkJCWpvaW5f dW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlcltrXSwKKwkJCQkJCQkJdHJ1ZSk7CisJ fQorCisJcmV0dXJuIHVqb2luOworfQorCisvKgorICogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZv ciBwZ3BhX2pvaW5fdW5yb2xsZXIuCisgKi8KK3ZvaWQKK3BncGFfZGVzdHJveV9qb2luX3Vucm9s bGVyKHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZnJlZShqb2luX3Vu cm9sbGVyLT5zdHJhdGVneSk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMp OworCXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlcyk7CisJcGZyZWUoam9p bl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyKTsKK30K KworLyoKKyAqIElkZW50aWZ5IHRoZSBqb2luIHN0cmF0ZWd5IHVzZWQgYnkgYSBqb2luIGFuZCB0 aGUgInJlYWwiIGlubmVyIGFuZCBvdXRlcgorICogcGxhbnMuCisgKgorICogRm9yIGV4YW1wbGUs IGEgSGFzaCBKb2luIGFsd2F5cyBoYXMgYSBIYXNoIG5vZGUgb24gdGhlIGlubmVyIHNpZGUsIGJ1 dAorICogZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcyB0aGUgcmVhbCBpbm5lciBpbnB1dCBp cyB0aGUgSGFzaCBub2RlJ3MgY2hpbGQsCisgKiBub3QgdGhlIEhhc2ggbm9kZSBpdHNlbGYuCisg KgorICogTGlrZXdpc2UsIGEgTWVyZ2UgSm9pbiBtYXkgaGF2ZSBTb3J0IG5vdGUgb24gdGhlIGlu bmVyIG9yIG91dGVyIHNpZGU7IGlmCisgKiBpdCBkb2VzLCB0aGUgcmVhbCBpbnB1dCB0byB0aGUg am9pbiBpcyB0aGUgU29ydCBub2RlJ3MgY2hpbGQsIG5vdCB0aGUKKyAqIFNvcnQgbm9kZSBpdHNl bGYuCisgKgorICogSW4gYWRkaXRpb24sIHdpdGggYSBNZXJnZSBKb2luIG9yIGEgTmVzdGVkIExv b3AsIHRoZSBqb2luIHBsYW5uaW5nIGNvZGUKKyAqIG1heSBhZGQgYWRkaXRpb25hbCBub2RlcyBz dWNoIGFzIE1hdGVyaWFsaXplIG9yIE1lbW9pemUuIFdlIHJlZ2FyZCB0aGVzZQorICogYXMgYW4g YXNwZWN0IG9mIHRoZSBqb2luIHN0cmF0ZWd5LiBBcyBpbiB0aGUgcHJldmlvdXMgY2FzZXMsIHRo ZSB0cnVlIGlucHV0CisgKiB0byB0aGUgam9pbiBpcyB0aGUgdW5kZXJseWluZyBub2RlLgorICoK KyAqIEhvd2V2ZXIsIGlmIGFueSBpbnZvbHZlZCBjaGlsZCBub2RlIHByZXZpb3VzbHkgaGFkIGEg bm93LWVsaWRlZCBub2RlIHN0YWNrZWQKKyAqIG9uIHRvcCwgdGhlbiB3ZSBjYW4ndCAibG9vayB0 aHJvdWdoIiB0aGF0IG5vZGUgLS0gaW5kZWVkLCB3aGF0J3MgZ29pbmcgdG8gYmUKKyAqIHJlbGV2 YW50IGZvciBvdXIgcHVycG9zZXMgaXMgdGhlIEVsaWRlZE5vZGUgb24gdG9wIG9mIHRoYXQgcGxh biBub2RlLCByYXRoZXIKKyAqIHRoYW4gdGhlIHBsYW4gbm9kZSBpdHNlbGYuCisgKgorICogSWYg dGhlcmUgYXJlIG11bHRpcGxlIGVsaWRlZCBub2Rlcywgd2Ugd2FudCB0aGF0IG9uZSB0aGF0IHdv dWxkIGhhdmUgYmVlbgorICogdXBwZXJtb3N0IGluIHRoZSBwbGFuIHRyZWUgcHJpb3IgdG8gc2V0 cmVmcyBwcm9jZXNzaW5nOyB3ZSBleHBlY3QgdG8gZmluZAorICogdGhhdCBvbmUgbGFzdCBpbiB0 aGUgbGlzdCBvZiBlbGlkZWQgbm9kZXMuCisgKgorICogT24gcmV0dXJuICpyZWFsb3V0ZXIgYW5k ICpyZWFsaW5uZXIgd2lsbCBoYXZlIGJlZW4gc2V0IHRvIHRoZSByZWFsIGlubmVyCisgKiBhbmQg cmVhbCBvdXRlciBwbGFucyB0aGF0IHdlIGlkZW50aWZpZWQsIGFuZCAqZWxpZGVkcmVhbG91dGVy IGFuZAorICogKmVsaWRlZHJlYWxpbm5lciB0byB0aGUgbGFzdCBvZiBhbnkgY29ycmVzcG9kaW5n IGVsaWRlZCBub2Rlcy4KKyAqIEFkZGl0aW9uYWxseSwgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIg YW5kICpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyIHdpbGwKKyAqIGJlIHNldCB0byB0cnVlIGlmIHdl IGxvb2tlZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIG9uCisgKiB0aGF0 IHNpZGUgb2YgdGhlIGpvaW4sIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBwZ3Bh X2pvaW5fc3RyYXRlZ3kKK3BncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCVBsYW4gKipyZWFsb3V0ZXIsIFBsYW4gKipy ZWFsaW5uZXIsCisJCQkJCUVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsIEVsaWRlZE5vZGUg KiplbGlkZWRyZWFsaW5uZXIsCisJCQkJCWJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsIGJv b2wgKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10ID0gd2Fs a2VyLT5wc3RtdDsKKwlKb2luVHlwZQlqb2ludHlwZSA9ICgoSm9pbiAqKSBwbGFuKS0+am9pbnR5 cGU7CisJUGxhbgkgICAqb3V0ZXJwbGFuID0gcGxhbi0+bGVmdHRyZWU7CisJUGxhbgkgICAqaW5u ZXJwbGFuID0gcGxhbi0+cmlnaHR0cmVlOworCUVsaWRlZE5vZGUgKmVsaWRlZG91dGVyOworCUVs aWRlZE5vZGUgKmVsaWRlZGlubmVyOworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwli b29sCQl1bmlxdWVvdXRlcjsKKwlib29sCQl1bmlxdWVpbm5lcjsKKworCWVsaWRlZG91dGVyID0g cGdwYV9sYXN0X2VsaWRlZF9ub2RlKHBzdG10LCBvdXRlcnBsYW4pOworCWVsaWRlZGlubmVyID0g cGdwYV9sYXN0X2VsaWRlZF9ub2RlKHBzdG10LCBpbm5lcnBsYW4pOworCSpmb3VuZF9hbnlfb3V0 ZXJfZ2F0aGVyID0gZmFsc2U7CisJKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsKKwor CXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9NZXJnZUpvaW46CisKKwkJCS8q CisJCQkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxhY2UgYSBNYXRlcmlhbCBu b2RlIG9uIHRoZQorCQkJICogaW5uZXIgc2lkZSBvZiB0aGUgTWVyZ2VKb2luOyBpZiB0aGlzIGlz IHByZXNlbnQsIHdlIHJlY29yZCBpdAorCQkJICogYXMgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVn eS4KKwkJCSAqLworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwg TWF0ZXJpYWwpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0 bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJ QUxJWkU7CisJCQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVSR0VfSk9JTl9Q TEFJTjsKKworCQkJLyoKKwkJCSAqIEZvciBhIE1lcmdlSm9pbiwgZWl0aGVyIHRoZSBvdXRlciBv ciB0aGUgaW5uZXIgc3VicGxhbiwgb3IKKwkJCSAqIGJvdGgsIG1heSBoYXZlIG5lZWRlZCB0byBi ZSBzb3J0ZWQ7IHdlIG11c3QgZGlzcmVnYXJkIGFueSBTb3J0CisJCQkgKiBvciBJbmNyZW1lbnRh bFNvcnQgbm9kZSB0byBmaW5kIHRoZSByZWFsIGlubmVyIG9yIG91dGVyCisJCQkgKiBzdWJwbGFu LgorCQkJICovCisJCQlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4o b3V0ZXJwbGFuKSkKKwkJCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAm b3V0ZXJwbGFuKTsKKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxh bihpbm5lcnBsYW4pKQorCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQs ICZpbm5lcnBsYW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX05lc3RMb29wOgorCisJCQkvKgor CQkJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0ZXJpYWwgb3Ig TWVtb2l6ZSBub2RlCisJCQkgKiBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgTmVzdExvb3A7IGlm IHRoaXMgaXMgcHJlc2VudCwgd2UKKwkJCSAqIHJlY29yZCBpdCBhcyBwYXJ0IG9mIHRoZSBqb2lu IHN0cmF0ZWd5LgorCQkJICovCisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJc0EoaW5u ZXJwbGFuLCBNYXRlcmlhbCkpCisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRf bm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xP T1BfTUFURVJJQUxJWkU7CisJCQl9CisJCQllbHNlIGlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYm IElzQShpbm5lcnBsYW4sIE1lbW9pemUpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9k ZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05F U1RFRF9MT09QX01FTU9JWkU7CisJCQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRf TkVTVEVEX0xPT1BfUExBSU47CisJCQlicmVhazsKKworCQljYXNlIFRfSGFzaEpvaW46CisKKwkJ CS8qCisJCQkgKiBUaGUgaW5uZXIgc3VicGxhbiBvZiBhIEhhc2hKb2luIGlzIGFsd2F5cyBhIEhh c2ggbm9kZTsgdGhlIHJlYWwKKwkJCSAqIGlubmVyIHN1YnBsYW4gaXMgdGhlIEhhc2ggbm9kZSdz IGNoaWxkLgorCQkJICovCisJCQlBc3NlcnQoSXNBKGlubmVycGxhbiwgSGFzaCkpOworCQkJQXNz ZXJ0KGVsaWRlZGlubmVyID09IE5VTEwpOworCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRf bm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQlzdHJhdGVneSA9IEpTVFJBVF9IQVNIX0pPSU47 CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBu b2RlIHR5cGU6ICVkIiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisJfQorCisJLyoKKwkgKiBUaGUg cGxhbm5lciBtYXkgaGF2ZSBkZWNpZGVkIHRvIGltcGxlbWVudCBhIHNlbWlqb2luIGJ5IGZpcnN0 IG1ha2luZworCSAqIHRoZSBudWxsYWJsZSBzaWRlIG9mIHRoZSBwbGFuIHVuaXF1ZSwgYW5kIHRo ZW4gcGVyZm9ybWluZyBhIG5vcm1hbCBqb2luCisJICogYWdhaW5zdCB0aGUgcmVzdWx0LiBUaGVy ZWZvcmUsIHdlIG1pZ2h0IG5lZWQgdG8gZGVzY2VuZCB0aHJvdWdoIGEKKwkgKiB1bmlxdWUgbm9k ZSBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgcGxhbi4KKwkgKi8KKwl1bmlxdWVvdXRlciA9IHBncGFf ZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxpZGVkb3V0ZXIpOworCXVu aXF1ZWlubmVyID0gcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZl bGlkZWRpbm5lcik7CisKKwkvKgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8g cGFyYWxsZWxpemUgcGFydCBvZiB0aGUgam9pbiB0cmVlLCBzbworCSAqIHdlIGNvdWxkIGZpbmQg YSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUgaGVyZS4gTm90ZSB0aGF0LCBpZgorCSAqIHBy ZXNlbnQsIHRoaXMgd2lsbCBhcHBlYXIgYmVsb3cgbm9kZXMgd2UgY29uc2lkZXJlZCBhcyBwYXJ0 IG9mIHRoZSBqb2luCisJICogc3RyYXRlZ3ksIGJ1dCB3ZSBjb3VsZCBmaW5kIGFub3RoZXIgdW5p cXVlbmVzcy1lbmZvcmNpbmcgbm9kZSBiZWxvdyB0aGUKKwkgKiBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlLCBpZiBwcmVzZW50LgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMKQorCXsKKwkJ ZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJm91dGVycGxhbiwK KwkJCQkJCQkJCQkJICBmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2FueV9v dXRlcl9nYXRoZXIgJiYKKwkJCXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmb3V0ZXJw bGFuLCAmZWxpZGVkb3V0ZXIpKQorCQkJdW5pcXVlb3V0ZXIgPSB0cnVlOworCX0KKwlpZiAoZWxp ZGVkaW5uZXIgPT0gTlVMTCkKKwl7CisJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX2FueV9n YXRoZXIocHN0bXQsICZpbm5lcnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X2lubmVyX2dh dGhlcik7CisJCWlmIChmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRf YW55X3VuaXF1ZShwc3RtdCwgJmlubmVycGxhbiwgJmVsaWRlZGlubmVyKSkKKwkJCXVuaXF1ZWlu bmVyID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBSZXN1bHQgbm9k ZSBoYXMgYmVlbiBpbnNlcnRlZCBlaXRoZXIgdG8gcHJvamVjdCBhCisJICogdGFyZ2V0IGxpc3Qg b3IgdG8gaW1wbGVtZW50IGEgb25lLXRpbWUgZmlsdGVyLiBJZiBzbywgd2UgY2FuIGRlc2NlbmQK KwkgKiB0aHJvdWdodCBpdC4gTm90ZSB0aGF0IGEgcmVzdWx0IG5vZGUgd2l0aG91dCBhIGNoaWxk IHdvdWxkIGJlIGEKKwkgKiBkZWdlbmVyYXRlIHNjYW4gb3Igam9pbiwgYW5kIG5vdCBzb21ldGhp bmcgd2UgY291bGQgZGVzY2VuZCB0aHJvdWdoLgorCSAqCisJICogWFhYLiBJIHN1c3BlY3QgaXQn cyBwb3NzaWJsZSBmb3IgdGhpcyB0byBoYXBwZW4gYWJvdmUgdGhlIEdhdGhlciBvcgorCSAqIEdh dGhlciBNZXJnZSBub2RlLCB0b28sIGJ1dCBhcHBhcmVudGx5IHdlIGhhdmUgbm8gdGVzdCBjYXNl IGZvciB0aGF0CisJICogc2NlbmFyaW8uCisJICovCisJaWYgKGVsaWRlZG91dGVyID09IE5VTEwg JiYgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChvdXRlcnBsYW4pKQorCQllbGlkZWRvdXRlciA9 IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFuKTsKKwlpZiAoZWxpZGVkaW5uZXIg PT0gTlVMTCAmJiBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKGlubmVycGxhbikpCisJCWVsaWRl ZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCisJLyoKKwkg KiBJZiB0aGlzIGlzIGEgc2VtaWpvaW4gdGhhdCB3YXMgY29udmVydGVkIHRvIGFuIGlubmVyIGpv aW4gYnkgbWFraW5nIG9uZQorCSAqIHNpZGUgb3IgdGhlIG90aGVyIHVuaXF1ZSwgbWFrZSBhIG5v dGUgdGhhdCB0aGUgaW5uZXIgb3Igb3V0ZXIgc3VicGxhbiwKKwkgKiBhcyBhcHByb3ByaWF0ZSwg c2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBxdWVyeSBwbGFuIGZlYXR1cmUgd2hlbiB0aGUgbWFpbgor CSAqIHRyZWUgdHJhdmVyc2FsIHJlYWNoZXMgaXQuCisJICoKKwkgKiBDb252ZXJzZWx5LCBpZiB0 aGUgcGxhbm5lciBjb3VsZCBoYXZlIG1hZGUgb25lIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVlCisJ ICogYW5kIHRoZXJlYnkgY29udmVydGVkIGl0IHRvIGFuIGlubmVyIGpvaW4sIGFuZCBjaG9zZSBu b3QgdG8gZG8gc28sIHRoYXQKKwkgKiBpcyBhbHNvIHdvcnRoIG5vdGluZy4KKwkgKgorCSAqIE5C OiBUaGlzIGNvZGUgY291bGQgYXBwZWFyIHNsaWdodGx5IGhpZ2hlciB1cCBpbiBpbiB0aGlzIGZ1 bmN0aW9uLCBidXQKKwkgKiBub25lIG9mIHRoZSBub2RlcyB0aHJvdWdoIHdoaWNoIHdlIGp1c3Qg ZGVzY2VuZGVkIHNob3VsZCBoYXZlCisJICogYXNzb2NpYXRlZCBSVElzLgorCSAqCisJICogTkI6 IFRoaXMgc2VlbXMgbGlrZSBhIHNvbWV3aGF0IGhhY2t5IHdheSBvZiBwYXNzaW5nIGluZm9ybWF0 aW9uIHVwIHRvCisJICogdGhlIG1haW4gdHJlZSB3YWxrLCBidXQgSSBkb24ndCBjdXJyZW50bHkg aGF2ZSBhIGJldHRlciBpZGVhLgorCSAqLworCWlmICh1bmlxdWVvdXRlcikKKwkJcGdwYV9hZGRf ZnV0dXJlX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBvdXRlcnBsYW4p OworCWVsc2UgaWYgKGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VNSSkKKwkJcGdwYV9hZGRfZnV0 dXJlX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgb3V0ZXJwbGFu KTsKKwlpZiAodW5pcXVlaW5uZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwg UEdQQVFGX1NFTUlKT0lOX1VOSVFVRSwgaW5uZXJwbGFuKTsKKwllbHNlIGlmIChqb2ludHlwZSA9 PSBKT0lOX1NFTUkpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NF TUlKT0lOX05PTl9VTklRVUUsIGlubmVycGxhbik7CisKKwkvKiBTZXQgb3V0cHV0IHBhcmFtZXRl cnMuICovCisJKnJlYWxvdXRlciA9IG91dGVycGxhbjsKKwkqcmVhbGlubmVyID0gaW5uZXJwbGFu OworCSplbGlkZWRyZWFsb3V0ZXIgPSBlbGlkZWRvdXRlcjsKKwkqZWxpZGVkcmVhbGlubmVyID0g ZWxpZGVkaW5uZXI7CisJcmV0dXJuIHN0cmF0ZWd5OworfQorCisvKgorICogRGVzY2VuZCB0aHJv dWdoIGEgUGxhbiBub2RlIGluIGEgam9pbiB0cmVlIHRoYXQgdGhlIGNhbGxlciBoYXMgZGV0ZXJt aW5lZAorICogdG8gYmUgaXJyZWxldmFudC4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0 dXJucyB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBu ZXcgcGxhbiBub2RlLgorICovCitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfbm9k ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuKQoreworCSpwbGFuID0gKCpwbGFuKS0+ bGVmdHRyZWU7CisJcmV0dXJuIHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgKnBsYW4pOwor fQorCisvKgorICogRGVzY2VuZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2Rl LCBpZiBwcmVzZW50LCBhbmQgYW55IFNvcnQKKyAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIG9j Y3VycmluZyB1bmRlciBhIEdhdGhlciBNZXJnZS4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIGhhdmUg dmVyaWZpZWQgdGhhdCB0aGVyZSBpcyBubyBFbGlkZWROb2RlIHBlcnRhaW5pbmcgdG8KKyAqIHRo ZSBpbml0aWFsIHZhbHVlIG9mICpwbGFuLgorICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1 cm5zIHRoZSBsYXN0IG9mIGFueSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5l dyBwbGFuIG5vZGUuIFNldHMgKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlIGlmIGVpdGhlciBHYXRo ZXIgb3IKKyAqIEdhdGhlciBNZXJnZSB3YXMgZm91bmQsIGFuZCBvdGhlcndpc2UgbGVhdmVzIGl0 IHVuY2hhbmdlZC4KKyAqLworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX2FueV9n YXRoZXIoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCWJvb2wgKmZvdW5k X2FueV9nYXRoZXIpCit7CisJaWYgKElzQSgqcGxhbiwgR2F0aGVyKSkKKwl7CisJCSpmb3VuZF9h bnlfZ2F0aGVyID0gdHJ1ZTsKKwkJcmV0dXJuIHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFu KTsKKwl9CisKKwlpZiAoSXNBKCpwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlFbGlkZWROb2Rl ICplbGlkZWQgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJaWYgKGVsaWRl ZCA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbigqcGxhbikpCisJCQllbGlkZWQgPSBwZ3BhX2Rl c2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOwor CQlyZXR1cm4gZWxpZGVkOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogSWYgKnBs YW4gaXMgYW4gQWdnIG9yIFVuaXF1ZSBub2RlLCB3ZSB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBp dCwgdW5sZXNzCisgKiBpdCBoYXMgYSBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLiBJZiBpdHMg aW1tZWRpYXRlIGNoaWxkIGlzIGEgU29ydCBvcgorICogSW5jcmVtZW50YWxTb3J0LCB3ZSBhbHNv IHdhbnQgdG8gZGVzY2VuZCB0aHJvdWdoIHRoYXQsIHVubGVzcyBpdCBoYXMgYQorICogY29ycmVz cG9uZGluZyBlbGlkZWQgbm9kZS4KKyAqCisgKiBPbiBlbnRyeSwgKmVsaWRlZF9ub2RlIG11c3Qg YmUgdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBjb3JyZXNwb25kaW5nCisgKiB0byAqcGxh bjsgb24gZXhpdCwgdGhpcyB3aWxsIHN0aWxsIGJlIHRydWUsIGJ1dCAqcGxhbiBtYXkgaGF2ZSBi ZWVuIHVwZGF0ZWQuCisgKgorICogVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIGRlc2NlbmQg dGhyb3VnaCBlbGlkZWQgbm9kZXMgaXMgdGhhdCBhIHNpbmdsZQorICogam9pbiB0cmVlIGNhbid0 IGNyb3NzIHRocm91Z2ggYW55IHNvcnQgb2YgZWxpZGVkIG5vZGU6IHN1YnF1ZXJpZXMgYXJlCisg KiBwbGFubmVkIHNlcGFyYXRlbHksIGFuZCBwbGFubmluZyBpbnNpZGUgYW4gQXBwZW5kIG9yIE1l cmdlQXBwZW5kIGlzCisgKiBzZXBhcmF0ZSBmcm9tIHBsYW5uaW5nIG91dHNpZGUgb2YgaXQuCisg KgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0cnVlIGlmIHdlIGRlc2NlbmQgdGhyb3VnaCBhIG5v ZGUgdGhhdCB3ZSBiZWxpZXZlIGlzCisgKiBtYWtpbmcgb25lIHNpZGUgb2YgYSBzZW1pam9pbiB1 bmlxdWUsIGFuZCBvdGhlcndpc2UgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2Rlc2Nl bmRfYW55X3VuaXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJRWxp ZGVkTm9kZSAqKmVsaWRlZF9ub2RlKQoreworCWJvb2wJCWRlc2NlbmQgPSBmYWxzZTsKKwlib29s CQlzanVuaXF1ZSA9IGZhbHNlOworCisJaWYgKCplbGlkZWRfbm9kZSAhPSBOVUxMKQorCQlyZXR1 cm4gc2p1bmlxdWU7CisKKwlpZiAoSXNBKCpwbGFuLCBVbmlxdWUpKQorCXsKKwkJZGVzY2VuZCA9 IHRydWU7CisJCXNqdW5pcXVlID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNBKCpwbGFuLCBBZ2cp KQorCXsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIHNpbXBsZSBBZ2cgbm9kZSwgdGhlbiBhc3N1 bWUgaXQncyBoZXJlIHRvIGltcGxlbWVudAorCQkgKiBzZW1pam9pbiB1bmlxdWVuZXNzLiBPdGhl cndpc2UsIGFzc3VtZSBpdCdzIGNvbXBsZXRpbmcgYW4gZWFnZXIKKwkJICogYWdncmVnYXRpb24g b3IgcGFydGl0aW9ud2lzZSBhZ2dyZWdhdGlvbiBvcGVyYXRpb24gdGhhdCBiZWdhbiBhdCBhCisJ CSAqIGhpZ2hlciBsZXZlbCBvZiB0aGUgcGxhbiB0cmVlLgorCQkgKgorCQkgKiBYWFguIEkgc3Vz cGVjdCB0aGlzIGxvZ2ljIGRvZXMgbm90IGNvdmVyIGFsbCBjYXNlczogY291bGRuJ3QgU0oKKwkJ ICogdW5pcXVlbmVzcyBiZSBpbXBsZW1lbnRlZCBpbiB0d28gc3RlcHMgd2l0aCBhbiBpbnRlcm1l ZGlhdGUgR2F0aGVyPworCQkgKi8KKwkJZGVzY2VuZCA9IHRydWU7CisJCXNqdW5pcXVlID0gKCgo QWdnICopICpwbGFuKS0+YWdnc3BsaXQgPT0gQUdHU1BMSVRfU0lNUExFKTsKKwl9CisKKwlpZiAo ZGVzY2VuZCkKKwl7CisJCSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBw bGFuKTsKKworCQlpZiAoKmVsaWRlZF9ub2RlID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpw bGFuKSkKKwkJCSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsK Kwl9CisKKwlyZXR1cm4gc2p1bmlxdWU7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUmVzdWx0IG5v ZGUgdGhhdCBoYXMgYSBjaGlsZD8KKyAqLworc3RhdGljIGJvb2wKK2lzX3Jlc3VsdF9ub2RlX3dp dGhfY2hpbGQoUGxhbiAqcGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIFJlc3VsdCkgJiYgcGxh bi0+bGVmdHRyZWUgIT0gTlVMTDsKK30KKworLyoKKyAqIElzIHRoaXMgYSBQbGFuIG5vZGUgd2hv c2UgcHVycG9zZSBpcyBwdXQgdGhlIGRhdGEgaW4gYSBjZXJ0YWluIG9yZGVyPworICovCitzdGF0 aWMgYm9vbAoraXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFu LCBTb3J0KSB8fCBJc0EocGxhbiwgSW5jcmVtZW50YWxTb3J0KTsKK30KZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfam9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZGM3 Mjk4NmE3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9q b2luLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf am9pbi5oCisgKgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX0pPSU5fSAorI2RlZmluZSBQR1BBX0pPSU5f SAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFf cGxhbl93YWxrZXJfY29udGV4dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7Cit0eXBlZGVmIHN0 cnVjdCBwZ3BhX2pvaW5fdW5yb2xsZXIgcGdwYV9qb2luX3Vucm9sbGVyOwordHlwZWRlZiBzdHJ1 Y3QgcGdwYV91bnJvbGxlZF9qb2luIHBncGFfdW5yb2xsZWRfam9pbjsKKworLyoKKyAqIEFsdGhv dWdoIHRoZXJlIGFyZSB0aHJlZSBtYWluIGpvaW4gc3RyYXRlZ2llcywgd2UgdHJ5IHRvIGNsYXNz aWZ5IHRoaW5ncworICogbW9yZSBwcmVjaXNlbHkgaGVyZTogbWVyZ2Ugam9pbnMgaGF2ZSB0aGUg b3B0aW9uIG9mIHVzaW5nIG1hdGVyaWFsaXphdGlvbgorICogb24gdGhlIGlubmVyIHNpZGUsIGFu ZCBuZXN0ZWQgbG9vcHMgY2FuIHVzZSBlaXRoZXIgbWF0ZXJpYWxpemF0aW9uIG9yCisgKiBtZW1v aXphdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJSlNUUkFUX01FUkdFX0pPSU5fUExBSU4g PSAwLAorCUpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCUpTVFJBVF9ORVNURURfTE9P UF9QTEFJTiwKKwlKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJSlNUUkFUX05FU1RF RF9MT09QX01FTU9JWkUsCisJSlNUUkFUX0hBU0hfSk9JTgorCS8qIHVwZGF0ZSBOVU1fUEdQQV9K T0lOX1NUUkFURUdZIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX2pvaW5fc3Ry YXRlZ3k7CisKKyNkZWZpbmUgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWQkJKChpbnQpIEpTVFJBVF9I QVNIX0pPSU4gKyAxKQorCisvKgorICogSW4gYW4gb3V0ZXItZGVlcCBqb2luIHRyZWUsIGV2ZXJ5 IG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIHdpbGwgYmUgYSBzY2FuLAorICogYnV0IGpvaW4g dHJlZXMgd2l0aCBvdGhlciBzaGFwZXMgY2FuIGNvbnRhaW4gdW5yb2xsZWQgam9pbnMuCisgKgor ICogVGhlIHBsYW4gbm9kZSB3ZSBzdG9yZSBoZXJlIHdpbGwgYmUgdGhlIGlubmVyIG9yIG91dGVy IGNoaWxkIG9mIHRoZSBqb2luCisgKiBub2RlLCBhcyBhcHByb3ByaWF0ZSwgZXhjZXB0IHRoYXQg d2UgbG9vayB0aHJvdWdoIHN1Ym5vZGVzIHRoYXQgd2UgcmVnYXJkIGFzCisgKiBwYXJ0IG9mIHRo ZSBqb2luIG1ldGhvZCBpdHNlbGYuIEZvciBpbnN0YW5jZSwgZm9yIGEgTmVzdGVkIExvb3AgdGhh dAorICogbWF0ZXJpYWxpemVzIHRoZSBpbm5lciBpbnB1dCwgd2UnbGwgc3RvcmUgdGhlIGNoaWxk IG9mIHRoZSBNYXRlcmlhbGl6ZSBub2RlLAorICogbm90IHRoZSBNYXRlcmlhbGl6ZSBub2RlIGl0 c2VsZi4KKyAqCisgKiBJZiBzZXRyZWZzIHByb2Nlc3NpbmcgZWxpZGVkIG9uZSBvciBtb3JlIG5v ZGVzIGZyb20gdGhlIHBsYW4gdHJlZSwgdGhlbgorICogd2UnbGwgc3RvcmUgZGV0YWlscyBhYm91 dCB0aGUgdG9wbW9zdCBvZiB0aG9zZSBpbiBlbGlkZWRfbm9kZTsgb3RoZXJ3aXNlLAorICogaXQg d2lsbCBiZSBOVUxMLgorICoKKyAqIEV4YWN0bHkgb25lIG9mIHNjYW4gYW5kIHVucm9sbGVkX2pv aW4gd2lsbCBiZSBub24tTlVMTC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQbGFuCSAgICpw bGFuOworCUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlOworCXN0cnVjdCBwZ3BhX3NjYW4gKnNjYW47 CisJcGdwYV91bnJvbGxlZF9qb2luICp1bnJvbGxlZF9qb2luOworfSBwZ3BhX2pvaW5fbWVtYmVy OworCisvKgorICogV2UgY29udmVydCBvdXRlci1kZWVwIGpvaW4gdHJlZXMgdG8gYSBmbGF0IHN0 cnVjdHVyZTsgdGhhdCBpcywgKChBIEpPSU4gQikKKyAqIEpPSU4gQykgSk9JTiBEIGdldHMgY29u dmVydGVkIHRvIG91dGVyID0gQSwgaW5uZXIgPSA8QiBDIEQ+LiAgV2hlbiBqb2lucworICogYXJl bid0IG91dGVyLWRlZXAsIHN1YnN0cnVjdHVyZSBpcyByZXF1aXJlZCwgZS5nLiAoQSBKT0lOIEIp IEpPSU4gKEMgSk9JTiBEKQorICogaXMgcmVwcmVzZW50ZWQgYXMgb3V0ZXIgPSBBLCBpbm5lciA9 IDxCIFg+LCB3aGVyZSBYIGlzIGEgcGdwYV91bnJvbGxlZF9qb2luCisgKiBjb3ZlcmluZyBDLUQu CisgKi8KK3N0cnVjdCBwZ3BhX3Vucm9sbGVkX2pvaW4KK3sKKwkvKiBPdXRlcm1vc3QgbWVtYmVy OyBtdXN0IG5vdCBpdHNlbGYgYmUgYW4gdW5yb2xsZWQgam9pbi4gKi8KKwlwZ3BhX2pvaW5fbWVt YmVyIG91dGVyOworCisJLyogTnVtYmVyIG9mIGlubmVyIG1lbWJlcnMuIExlbmd0aCBvZiB0aGUg c3RyYXRlZ3kgYW5kIGlubmVyIGFycmF5cy4gKi8KKwl1bnNpZ25lZAluaW5uZXI7CisKKwkvKiBB cnJheSBvZiBzdHJhdGVnaWVzLCBvbmUgcGVyIG5vbi1vdXRlcm1vc3QgbWVtYmVyLiAqLworCXBn cGFfam9pbl9zdHJhdGVneSAqc3RyYXRlZ3k7CisKKwkvKiBBcnJheSBvZiBtZW1iZXJzLCBleGNs dWRpbmcgdGhlIG91dGVybW9zdC4gRGVlcGVzdCBmaXJzdC4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVy ICppbm5lcjsKK307CisKKy8qCisgKiBEb2VzIHRoaXMgcGxhbiBub2RlIGluaGVyaXQgZnJvbSBK b2luPworICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfaXNfam9pbihQbGFuICpwbGFuKQor eworCXJldHVybiBJc0EocGxhbiwgTmVzdExvb3ApIHx8IElzQShwbGFuLCBNZXJnZUpvaW4pIHx8 IElzQShwbGFuLCBIYXNoSm9pbik7Cit9CisKK2V4dGVybiBwZ3BhX2pvaW5fdW5yb2xsZXIgKnBn cGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIodm9pZCk7CitleHRlcm4gdm9pZCBwZ3BhX3Vucm9sbF9q b2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFuICpwbGFu LCBib29sIGJlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpq b2luX3Vucm9sbGVyLAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipvdXRlcl9qb2luX3Vu cm9sbGVyLAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2luX3Vucm9sbGVy KTsKK2V4dGVybiBwZ3BhX3Vucm9sbGVkX2pvaW4gKnBncGFfYnVpbGRfdW5yb2xsZWRfam9pbihw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJCQlwZ3BhX2pvaW5f dW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpOworZXh0ZXJuIHZvaWQgcGdwYV9kZXN0cm95X2pvaW5f dW5yb2xsZXIocGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKKworI2VuZGlmCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjY3NjQ3YWNkZjVhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCkBAIC0wLDAgKzEsNTcxIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBwZ3BhX291dHB1dC5jCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQg ZnJvbSB0aGUgcmVzdWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJ ICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfb3V0 cHV0LmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5v ZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qCisgKiBDb250ZXh0 IG9iamVjdCBmb3IgdGV4dHVhbCBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAqCisgKiBydF9pZGVudGlm aWVycyBpcyB0aGUgY2FsbGVyLXByb3ZpZGVkIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZp ZXJzLgorICogU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHBncGFfaWRlbnRpZmllci5j IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogYnVmIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgb3V0 cHV0IGJ1ZmZlci4KKyAqCisgKiB3cmFwX2NvbHVtbiBpcyB0aGUgd3JhcCBjb2x1bW4sIHNvIHRo YXQgd2UgZG9uJ3QgY3JlYXRlIG91dHB1dCB0aGF0IGlzCisgKiB0b28gd2lkZS4gU2VlIHBncGFf bWF5YmVfbGluZWJyZWFrKCkgYW5kIGNvbW1lbnRzIGluIHBncGFfb3V0cHV0X2FkdmljZS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9vdXRwdXRfY29udGV4dAoreworCWNvbnN0IGNoYXIgKipy aWRfc3RyaW5nczsKKwlTdHJpbmdJbmZvCWJ1ZjsKKwlpbnQJCQl3cmFwX2NvbHVtbjsKK30gcGdw YV9vdXRwdXRfY29udGV4dDsKKworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9p bihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3Vucm9sbGVk X2pvaW4gKmpvaW4pOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJl cik7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2Nv bnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwK KwkJCQkJCQkJCSAgTGlzdCAqc2NhbnMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRp b25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQpOworc3RhdGlj IHZvaWQgcGdwYV9vdXRwdXRfcXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250 ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCSAgTGlzdCAqcXVl cnlfZmVhdHVyZXMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KHBn cGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkJY2hhciAqc3RyYXRlZ3ksCisJ CQkJCQkJCQkJTGlzdCAqcmVsaWRfc2V0cyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9ub19n YXRoZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJICBCaXRtYXBzZXQg KnJlbGlkcyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9vdXRwdXRf Y29udGV4dCAqY29udGV4dCwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJCSAgQml0bWFwc2V0ICpy ZWxpZHMpOworCitzdGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocGdwYV9q b2luX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfc2Nhbl9z dHJhdGVneShwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBncGFf Y3N0cmluZ19xdWVyeV9mZWF0dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpOworCitzdGF0aWMg dm9pZCBwZ3BhX21heWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBfY29sdW1u KTsKKworLyoKKyAqIEFwcGVuZCBxdWVyeSBhZHZpY2UgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4K KyAqCisgKiBCZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCAnd2Fsa2VyJyBtdXN0IGJlIHVz ZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZQorICogbWFpbiBwbGFuIHRyZWUgYW5kIGFsbCBzdWJwbGFu cyBmcm9tIHRoZSBQbGFubmVkU3RtdC4KKyAqCisgKiAncnRfaWRlbnRpZmllcnMnIGlzIGEgdGFi bGUgb2YgdW5pcXVlIGlkZW50aWZpZXJzLCBvbmUgZm9yIGVhY2ggUlRJLgorICogU2VlIHBncGFf Y3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoKS4KKyAqCisgKiBSZXN1bHRzIHdp bGwgYmUgYXBwZW5kZWQgdG8gJ2J1ZicuCisgKi8KK3ZvaWQKK3BncGFfb3V0cHV0X2FkdmljZShT dHJpbmdJbmZvIGJ1ZiwgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJICAg cGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycykKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0 aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJTGlzdENlbGwgICAqbGM7 CisJcGdwYV9vdXRwdXRfY29udGV4dCBjb250ZXh0OworCisJLyogQmFzaWMgaW5pdGlhbGl6YXRp b24uICovCisJbWVtc2V0KCZjb250ZXh0LCAwLCBzaXplb2YocGdwYV9vdXRwdXRfY29udGV4dCkp OworCWNvbnRleHQuYnVmID0gYnVmOworCisJLyoKKwkgKiBDb252ZXJ0IGlkZW50aWZpZXJzIHRv IHN0cmluZyBmb3JtLiBOb3RlIHRoYXQgdGhlIGxvb3AgdmFyaWFibGUgaGVyZSBpcworCSAqIG5v dCBhbiBSVEksIGJlY2F1c2UgUlRJcyBhcmUgMS1iYXNlZC4gU29tZSBSVElzIHdpbGwgaGF2ZSBu bworCSAqIGlkZW50aWZpZXIsIGVpdGhlciBiZWNhdXNlIHRoZSByZWxvcHRraW5kIGlzIFJURV9K T0lOIG9yIGJlY2F1c2UgdGhhdAorCSAqIHBvcnRpb24gb2YgdGhlIHF1ZXJ5IGRpZG4ndCBtYWtl IGl0IGludG8gdGhlIGZpbmFsIHBsYW4uCisJICovCisJY29udGV4dC5yaWRfc3RyaW5ncyA9IHBh bGxvYzBfYXJyYXkoY29uc3QgY2hhciAqLCBydGFibGVfbGVuZ3RoKTsKKwlmb3IgKGludCBpID0g MDsgaSA8IHJ0YWJsZV9sZW5ndGg7ICsraSkKKwkJaWYgKHJ0X2lkZW50aWZpZXJzW2ldLmFsaWFz X25hbWUgIT0gTlVMTCkKKwkJCWNvbnRleHQucmlkX3N0cmluZ3NbaV0gPSBwZ3BhX2lkZW50aWZp ZXJfc3RyaW5nKCZydF9pZGVudGlmaWVyc1tpXSk7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIGNo b29zZXMgdG8gdXNlIEVYUExBSU4gKFBMQU5fQURWSUNFKSBpbiBhbiA4MC1jb2x1bW4gd2luZG93 CisJICogZnJvbSBhIHBzcWwgY2xpZW50IHdpdGggZGVmYXVsdCBzZXR0aW5ncywgcHNxbCB3aWxs IGFkZCBvbmUgc3BhY2UgdG8KKwkgKiB0aGUgbGVmdCBvZiB0aGUgb3V0cHV0IGFuZCBFWFBMQUlO IHdpbGwgYWRkIHR3byBtb3JlIHRvIHRoZSBsZWZ0IG9mIHRoZQorCSAqIGFkdmljZS4gVGh1cywg bGluZXMgb2YgbW9yZSB0aGFuIDc3IGNoYXJhY3RlcnMgd2lsbCB3cmFwLiBXZSBzZXQgdGhlCisJ ICogd3JhcCBsaW1pdCB0byA3NiBoZXJlIHNvIHRoYXQgdGhlIG91dHB1dCB3b24ndCByZWFjaCBh bGwgdGhlIHdheSB0byB0aGUKKwkgKiB2ZXJ5IGxhc3QgY29sdW1uIG9mIHRoZSB0ZXJtaW5hbC4K KwkgKgorCSAqIE9mIGNvdXJzZSwgdGhpcyBpcyBmYWlybHkgYXJiaXRyYXJ5IHNldCBvZiBhc3N1 bXB0aW9ucywgYW5kIG9uZSBjb3VsZAorCSAqIHdlbGwgbWFrZSBhbiBhcmd1bWVudCBmb3IgYSBk aWZmZXJlbnQgd3JhcCBsaW1pdCwgb3IgZm9yIGEgY29uZmlndXJhYmxlCisJICogb25lLgorCSAq LworCWNvbnRleHQud3JhcF9jb2x1bW4gPSA3NjsKKworCS8qCisJICogRWFjaCBwaWVjZSBvZiBK T0lOX09SREVSKCkgYWR2aWNlIGZ1bGx5IGRlc2NyaWJlcyB0aGUgam9pbiBvcmRlciBmb3IgYQor CSAqIGEgc2luZ2xlIHVucm9sbGVkIGpvaW4uIE1lcmdpbmcgaXMgbm90IHBlcm1pdHRlZCwgYmVj YXVzZSB0aGF0IHdvdWxkCisJICogY2hhbmdlIHRoZSBtZWFuaW5nLCBlLmcuIFNFUV9TQ0FOKGEg YiBjIGQpIG1lYW5zIHNpbXBseSB0aGF0IHNlcXVlbnRpYWwKKwkgKiBzY2FucyBzaG91bGQgYmUg dXNlZCBmb3IgYWxsIG9mIHRob3NlIHJlbGF0aW9ucywgYW5kIGlzIHRodXMgZXF1aXZhbGVudAor CSAqIHRvIFNFUV9TQ0FOKGEgYikgU0VRX1NDQU4oYyBkKSwgYnV0IEpPSU5fT1JERVIoYSBiIGMg ZCkgbWVhbnMgdGhhdCAiYSIKKwkgKiBpcyB0aGUgZHJpdmluZyB0YWJsZSB3aGljaCBpcyB0aGVu IGpvaW5lZCB0byAiYiIgdGhlbiAiYyIgdGhlbiAiZCIsCisJICogd2hpY2ggaXMgdG90YWxseSBk aWZmZXJlbnQgZnJvbSBKT0lOX09SREVSKGEgYikgYW5kIEpPSU5fT1JERVIoYyBkKS4KKwkgKi8K Kwlmb3JlYWNoKGxjLCB3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCXsKKwkJcGdw YV91bnJvbGxlZF9qb2luICp1am9pbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKGJ1Zi0+bGVuID4g MCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJ1xuJyk7CisJCWFwcGVuZFN0cmluZ0lu Zm8oY29udGV4dC5idWYsICJKT0lOX09SREVSKCIpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9q b2luKCZjb250ZXh0LCB1am9pbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQuYnVm LCAnKScpOworCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LmJ1ZiwgY29udGV4dC53cmFw X2NvbHVtbik7CisJfQorCisJLyogRW1pdCBqb2luIHN0cmF0ZWd5IGFkdmljZS4gKi8KKwlmb3Ig KGludCBzID0gMDsgcyA8IE5VTV9QR1BBX0pPSU5fU1RSQVRFR1k7ICsrcykKKwl7CisJCWNoYXIJ ICAgKnN0cmF0ZWd5ID0gcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocyk7CisKKwkJcGdwYV9v dXRwdXRfc2ltcGxlX3N0cmF0ZWd5KCZjb250ZXh0LAorCQkJCQkJCQkJc3RyYXRlZ3ksCisJCQkJ CQkJCQl3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1tzXSk7CisJfQorCisJLyoKKwkgKiBFbWl0IHNj YW4gc3RyYXRlZ3kgYWR2aWNlIChidXQgbm90IGZvciBvcmRpbmFyeSBzY2Fucywgd2hpY2ggYXJl CisJICogZGVmaW5pdGlvbmFsbHkgdW5pbnRlcmVzdGluZykuCisJICovCisJZm9yIChpbnQgYyA9 IDA7IGMgPCBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZOyArK2MpCisJCWlmIChjICE9IFBHUEFfU0NB Tl9PUkRJTkFSWSkKKwkJCXBncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3koJmNvbnRleHQsIGMsIHdh bGtlci0+c2NhbnNbY10pOworCisJLyogRW1pdCBxdWVyeSBmZWF0dXJlIGFkdmljZS4gKi8KKwlm b3IgKGludCB0ID0gMDsgdCA8IE5VTV9QR1BBX1FGX1RZUEVTOyArK3QpCisJCXBncGFfb3V0cHV0 X3F1ZXJ5X2ZlYXR1cmUoJmNvbnRleHQsIHQsIHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdF0pOwor CisJLyogRW1pdCBOT19HQVRIRVIgYWR2aWNlLiAqLworCXBncGFfb3V0cHV0X25vX2dhdGhlcigm Y29udGV4dCwgd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMpOworfQorCisvKgorICogT3V0cHV0IHRo ZSBtZW1iZXJzIG9mIGFuIHVucm9sbGVkIGpvaW4sIGZpcnN0IHRoZSBvdXRlcm1vc3QgbWVtYmVy LCBhbmQKKyAqIHRoZW4gdGhlIGlubmVyIG1lbWJlcnMgb25lIGJ5IG9uZSwgYXMgcGFydCBvZiBK T0lOX09SREVSKCkgYWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfdW5yb2xs ZWRfam9pbihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJICBwZ3BhX3Vucm9s bGVkX2pvaW4gKmpvaW4pCit7CisJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwgJmpv aW4tPm91dGVyKTsKKworCWZvciAoaW50IGsgPSAwOyBrIDwgam9pbi0+bmlubmVyOyArK2spCisJ eworCQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIgPSAmam9pbi0+aW5uZXJba107CisKKwkJcGdw YV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJcGdwYV9vdXRwdXRf am9pbl9tZW1iZXIoY29udGV4dCwgbWVtYmVyKTsKKwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYSBz aW5nbGUgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gYXMgcGFydCBvZiBKT0lOX09SREVSKCkg YWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcikK K3sKKwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCXBncGFfb3V0cHV0X3Vucm9sbGVkX2pv aW4oY29udGV4dCwgbWVtYmVyLT51bnJvbGxlZF9qb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0No YXIoY29udGV4dC0+YnVmLCAnKScpOworCX0KKwllbHNlCisJeworCQlwZ3BhX3NjYW4gICpzY2Fu ID0gbWVtYmVyLT5zY2FuOworCisJCUFzc2VydChzY2FuICE9IE5VTEwpOworCQlpZiAoYm1zX21l bWJlcnNoaXAoc2Nhbi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRf cmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQor CQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd7Jyk7CisJCQlwZ3Bh X291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOwor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnfScpOworCQl9CisJfQorfQor CisvKgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfc2NhbiBvYmplY3RzLgor ICoKKyAqIEFsbCB0aGUgc2NhbnMgbXVzdCB1c2UgdGhlIHN0cmF0ZWd5IHNwZWNpZmllZCBieSB0 aGUgInN0cmF0ZWd5IiBhcmd1bWVudC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3Nj YW5fc3RyYXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV9z Y2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJICBMaXN0ICpzY2FucykKK3sKKwlib29sCQlm aXJzdCA9IHRydWU7CisKKwlpZiAoc2NhbnMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29u dGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICdcbicpOworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJCQkJIHBn cGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHN0cmF0ZWd5KSk7CisKKwlmb3JlYWNoX3B0cihwZ3Bh X3NjYW4sIHNjYW4sIHNjYW5zKQorCXsKKwkJUGxhbgkgICAqcGxhbiA9IHNjYW4tPnBsYW47CisK KwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21h eWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCS8qIE91dHB1 dCB0aGUgcmVsYXRpb24gaWRlbnRpZmllcnMuICovCisJCWlmIChibXNfbWVtYmVyc2hpcChzY2Fu LT5yZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29u dGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0 aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKworCQkvKiBGb3IgaW5kZXggb3Ig aW5kZXgtb25seSBzY2Fucywgb3V0cHV0IGluZGV4IGluZm9ybWF0aW9uLiAqLworCQlpZiAoc3Ry YXRlZ3kgPT0gUEdQQV9TQ0FOX0lOREVYKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4 U2NhbikpOworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53 cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7 CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsICgoSW5kZXhTY2FuICopIHBs YW4pLT5pbmRleGlkKTsKKwkJfQorCQllbHNlIGlmIChzdHJhdGVneSA9PSBQR1BBX1NDQU5fSU5E RVhfT05MWSkKKwkJeworCQkJQXNzZXJ0KElzQShwbGFuLCBJbmRleE9ubHlTY2FuKSk7CisJCQlw Z3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0 cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwKKwkJCQkJCQkJCSAgKChJbmRleE9ubHlTY2FuICop IHBsYW4pLT5pbmRleGlkKTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRl eHQtPndyYXBfY29sdW1uKTsKK30KKworLyoKKyAqIE91dHB1dCBhIHNjaGVtYS1xdWFsaWZpZWQg cmVsYXRpb24gbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3JlbGF0aW9uX25h bWUocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKQoreworCU9pZAkJCW5z cG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKHJlbGlkKTsKKwljaGFyCSAgICpyZWxuYW1lc3BhY2Ug PSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChuc3BvaWQpOworCWNoYXIJICAgKnJlbG5hbWUg PSBnZXRfcmVsX25hbWUocmVsaWQpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0 LT5idWYsIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZXNwYWNlKSk7CisJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC0+YnVmLCAnLicpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4 dC0+YnVmLCBxdW90ZV9pZGVudGlmaWVyKHJlbG5hbWUpKTsKK30KKworLyoKKyAqIE91dHB1dCBh ZHZpY2UgZm9yIGEgTGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgb2JqZWN0cy4KKyAqCisgKiBB bGwgZmVhdHVyZXMgbXVzdCBiZSBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlICJ0eXBlIiBh cmd1bWVudC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUocGdw YV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkgIExp c3QgKnF1ZXJ5X2ZlYXR1cmVzKQoreworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChxdWVy eV9mZWF0dXJlcyA9PSBOSUwpCisJCXJldHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+ IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5k U3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIlcygiLAorCQkJCQkgcGdwYV9jc3RyaW5nX3F1ZXJ5 X2ZlYXR1cmVfdHlwZSh0eXBlKSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUs IHFmLCBxdWVyeV9mZWF0dXJlcykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7 CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250 ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICcgJyk7CisJCX0KKworCQlpZiAoYm1zX21lbWJlcnNoaXAocWYtPnJlbGlkcykgPT0gQk1TX1NJ TkdMRVRPTikKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYs IHFmLT5yZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0 LT5idWYsIHFmLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVm LCAnKScpOworCQl9CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn KScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9j b2x1bW4pOworfQorCisvKgorICogT3V0cHV0ICJzaW1wbGUiIGFkdmljZSBmb3IgYSBMaXN0IG9m IEJpdG1hcHNldCBvYmplY3RzIGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIG9uZSBvciBtb3Jl IFJUSXMuCisgKgorICogQnkgc2ltcGxlLCB3ZSBqdXN0IG1lYW4gdGhhdCB0aGUgYWR2aWNlIGVt aXR0ZWQgZm9sbG93cyB0aGUgbW9zdAorICogc3RyYWlnaHRmb3J3YXJkIHBhdHRlcm46IHRoZSBz dHJhdGVneSBuYW1lLCBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgaXRlbXMKKyAqIHNlcGFyYXRlZCBi eSBzcGFjZXMgYW5kIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMuIEluZGl2aWR1YWwgaXRlbXMg aW4KKyAqIHRoZSBsaXN0IGFyZSBhIHNpbmdsZSByZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIEJp dG1hcHNldCB0aGF0IGNvbnRhaW5zCisgKiBqdXN0IG9uZSBtZW1iZXIsIG9yIGEgc3ViLWxpc3Qg YWdhaW4gc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZAorICogYnkgcGFyZW50aGVz ZXMgZm9yIGEgQml0bWFwc2V0IHdpdGggbXVsdGlwbGUgbWVtYmVycy4gQml0bWFwc2V0cyB3aXRo CisgKiBubyBtZW1iZXJzIHByb2JhYmx5IHNob3VsZG4ndCBvY2N1ciBoZXJlLCBidXQgaWYgdGhl eSBkbyB0aGV5J2xsIGJlCisgKiByZW5kZXJlZCBhcyBhbiBlbXB0eSBzdWItbGlzdC4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3NpbXBsZV9zdHJhdGVneShwZ3BhX291dHB1dF9jb250 ZXh0ICpjb250ZXh0LCBjaGFyICpzdHJhdGVneSwKKwkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKQor eworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChyZWxpZF9zZXRzID09IE5JTCkKKwkJcmV0 dXJuOworCisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0No YXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1Ziwg IiVzKCIsIHN0cmF0ZWd5KTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIHJlbGlkcywgcmVs aWRfc2V0cykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJ eworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2Nv bHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0K KworCQlpZiAoYm1zX21lbWJlcnNoaXAocmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdw YV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwkJZWxz ZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlw Z3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisJfQorCisJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJy ZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0 cHV0IE5PX0dBVEhFUiBhZHZpY2UgZm9yIGFsbCByZWxhdGlvbnMgbm90IGFwcGVhcmluZyBiZW5l YXRoIGFueQorICogR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9vdXRwdXRfbm9fZ2F0aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIEJp dG1hcHNldCAqcmVsaWRzKQoreworCWlmIChyZWxpZHMgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlm IChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQt PmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsICJOT19H QVRIRVIoIik7CisJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwg cmVsaWRzKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7Cit9CisK Ky8qCisgKiBPdXRwdXQgdGhlIGlkZW50aWZpZXJzIGZvciBlYWNoIFJUSSBpbiB0aGUgcHJvdmlk ZWQgc2V0LgorICoKKyAqIElkZW50aWZpZXJzIGFyZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBhbmQg YSBsaW5lIGJyZWFrIGlzIHBvc3NpYmxlIGFmdGVyCisgKiBlYWNoIG9uZS4KKyAqLworc3RhdGlj IHZvaWQKK3BncGFfb3V0cHV0X3JlbGF0aW9ucyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0 LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlpbnQJCQly dGkgPSAtMTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0 X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQljb25zdCBjaGFyICpyaWRfc3RyaW5n ID0gY29udGV4dC0+cmlkX3N0cmluZ3NbcnRpIC0gMV07CisKKwkJaWYgKHJpZF9zdHJpbmcgPT0g TlVMTCkKKwkJCWVsb2coRVJST1IsICJubyBpZGVudGlmaWVyIGZvciBSVEkgJWQiLCBydGkpOwor CisJCWlmIChmaXJzdCkKKwkJeworCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCByaWRfc3RyaW5nKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBncGFfbWF5 YmVfbGluZWJyZWFrKGJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIgJXMiLCByaWRfc3RyaW5nKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEdldCBh IEMgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBqb2luIHN0cmF0ZWd5 LgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShwZ3BhX2pv aW5fc3RyYXRlZ3kgc3RyYXRlZ3kpCit7CisJc3dpdGNoIChzdHJhdGVneSkKKwl7CisJCWNhc2Ug SlNUUkFUX01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExBSU4iOwor CQljYXNlIEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9K T0lOX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfUExBSU46CisJCQly ZXR1cm4gIk5FU1RFRF9MT09QX1BMQUlOIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBK U1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUVNT0la RSI7CisJCWNhc2UgSlNUUkFUX0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwl9 CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogR2V0IGEg QyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIHNjYW4gc3RyYXRlZ3ku CisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHBncGFfc2Nh bl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlzd2l0Y2ggKHN0cmF0ZWd5KQorCXsKKwkJY2FzZSBQ R1BBX1NDQU5fT1JESU5BUlk6CisJCQlyZXR1cm4gIk9SRElOQVJZX1NDQU4iOworCQljYXNlIFBH UEFfU0NBTl9TRVE6CisJCQlyZXR1cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fQklU TUFQX0hFQVA6CisJCQlyZXR1cm4gIkJJVE1BUF9IRUFQX1NDQU4iOworCQljYXNlIFBHUEFfU0NB Tl9GT1JFSUdOOgorCQkJcmV0dXJuICJGT1JFSUdOX0pPSU4iOworCQljYXNlIFBHUEFfU0NBTl9J TkRFWDoKKwkJCXJldHVybiAiSU5ERVhfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYX09O TFk6CisJCQlyZXR1cm4gIklOREVYX09OTFlfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1BBUlRJ VElPTldJU0U6CisJCQlyZXR1cm4gIlBBUlRJVElPTldJU0UiOworCQljYXNlIFBHUEFfU0NBTl9U SUQ6CisJCQlyZXR1cm4gIlRJRF9TQ0FOIjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJl dHVybiBOVUxMOworfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0 byB0aGUgc3BlY2lmaWVkIHNjYW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFf Y3N0cmluZ19xdWVyeV9mZWF0dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpCit7CisJc3dpdGNo ICh0eXBlKQorCXsKKwkJY2FzZSBQR1BBUUZfR0FUSEVSOgorCQkJcmV0dXJuICJHQVRIRVIiOwor CQljYXNlIFBHUEFRRl9HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7CisJ CWNhc2UgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX05P Tl9VTklRVUUiOworCQljYXNlIFBHUEFRRl9TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4gIlNF TUlKT0lOX1VOSVFVRSI7CisJfQorCisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxM OworfQorCisvKgorICogSW5zZXJ0IGEgbGluZSBicmVhayBpbnRvIHRoZSBTdHJpbmdJbmZvRGF0 YSwgaWYgbmVlZGVkLgorICoKKyAqIElmIHdyYXBfY29sdW1uIGlzIHplcm8gb3IgbmVnYXRpdmUs IHRoaXMgZG9lcyBub3RoaW5nLiBPdGhlcndpc2UsIHdlCisgKiBjb25zaWRlciBpbnNlcnRpbmcg YSBuZXdsaW5lLiBXZSBvbmx5IGluc2VydCBhIG5ld2xpbmUgaWYgdGhlIGxlbmd0aCBvZgorICog dGhlIGxhc3QgbGluZSBpbiB0aGUgYnVmZmVyIGV4Y2VlZHMgd3JhcF9jb2x1bW4sIGFuZCBub3Qg aWYgd2UnZCBiZQorICogaW5zZXJ0aW5nIGEgbmV3bGluZSBhdCBvciBiZWZvcmUgdGhlIGJlZ2lu bmluZyBvZiB0aGUgY3VycmVudCBsaW5lLgorICoKKyAqIFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0 aGUgbmV3bGluZSBpcyBpbnNlcnRlZCBpcyBzaW1wbHkgd2hlcmV2ZXIgdGhlCisgKiBidWZmZXIg ZW5kZWQgdGhlIGxhc3QgdGltZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuIEluIG90aGVyIHdv cmRzLAorICogdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZXZl cnkgdGltZSB3ZSByZWFjaCBhIGdvb2QKKyAqIHBsYWNlIGZvciBhIGxpbmUgYnJlYWsuCisgKi8K K3N0YXRpYyB2b2lkCitwZ3BhX21heWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdy YXBfY29sdW1uKQoreworCWNoYXIJICAgKnRyYWlsaW5nX25sOworCWludAkJCWxpbmVfc3RhcnQ7 CisJaW50CQkJc2F2ZV9jdXJzb3I7CisKKwkvKiBJZiBsaW5lIHdyYXBwaW5nIGlzIGRpc2FibGVk LCBleGl0IHF1aWNrbHkuICovCisJaWYgKHdyYXBfY29sdW1uIDw9IDApCisJCXJldHVybjsKKwor CS8qCisJICogU2V0IGxpbmVfc3RhcnQgdG8gdGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiBidWYtPmRh dGEgb2YgdGhlIGZpcnN0CisJICogY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUsIHdoZXJl IHRoZSBjdXJyZW50IGxpbmUgbWVhbnMgdGhlIGxhc3QKKwkgKiBvbmUgaW4gdGhlIGJ1ZmZlci4g Tm90ZSB0aGF0IGxpbmVfc3RhcnQgY291bGQgYmUgdGhlIG9mZnNldCBvZiB0aGUKKwkgKiB0cmFp bGluZyAnXDAnIGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIGlzIGEgbGluZSBi cmVhay4KKwkgKi8KKwl0cmFpbGluZ19ubCA9IHN0cnJjaHIoYnVmLT5kYXRhLCAnXG4nKTsKKwlp ZiAodHJhaWxpbmdfbmwgPT0gTlVMTCkKKwkJbGluZV9zdGFydCA9IDA7CisJZWxzZQorCQlsaW5l X3N0YXJ0ID0gKHRyYWlsaW5nX25sIC0gYnVmLT5kYXRhKSArIDE7CisKKwkvKgorCSAqIFJlbWVt YmVyIHRoYXQgdGhlIGN1cnJlbnQgZW5kIG9mIHRoZSBidWZmZXIgaXMgYSBwb3RlbnRpYWwgbG9j YXRpb24gdG8KKwkgKiBpbnNlcnQgYSBsaW5lIGJyZWFrIG9uIGEgZnV0dXJlIGNhbGwgdG8gdGhp cyBmdW5jdGlvbi4KKwkgKi8KKwlzYXZlX2N1cnNvciA9IGJ1Zi0+Y3Vyc29yOworCWJ1Zi0+Y3Vy c29yID0gYnVmLT5sZW47CisKKwkvKiBJZiB3ZSBoYXZlbid0IHBhc3NlZCB0aGUgd3JhcCBjb2x1 bW4sIHdlIGRvbid0IG5lZWQgYSBuZXdsaW5lLiAqLworCWlmIChidWYtPmxlbiAtIGxpbmVfc3Rh cnQgPD0gd3JhcF9jb2x1bW4pCisJCXJldHVybjsKKworCS8qCisJICogSXQgb25seSBtYWtlcyBz ZW5zZSB0byBpbnNlcnQgYSBuZXdsaW5lIGF0IGEgcG9zaXRpb24gbGF0ZXIgdGhhbiB0aGUKKwkg KiBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbGluZS4KKwkgKi8KKwlpZiAoYnVmLT5jdXJzb3Ig PD0gbGluZV9zdGFydCkKKwkJcmV0dXJuOworCisJLyogSW5zZXJ0IGEgbmV3bGluZSBhdCB0aGUg cHJldmlvdXMgY3Vyc29yIGxvY2F0aW9uLiAqLworCWVubGFyZ2VTdHJpbmdJbmZvKGJ1ZiwgMSk7 CisJbWVtbW92ZSgmYnVmLT5kYXRhW3NhdmVfY3Vyc29yXSArIDEsICZidWYtPmRhdGFbc2F2ZV9j dXJzb3JdLAorCQkJYnVmLT5sZW4gLSBzYXZlX2N1cnNvcik7CisJKytidWYtPmN1cnNvcjsKKwli dWYtPmRhdGFbKytidWYtPmxlbl0gPSAnXDAnOworCWJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0gPSAn XG4nOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5o IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NzQ5NmQ3NmY1MgotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaApAQCAtMCwwICsxLDIyIEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX291dHB1dC5oCisgKgkgIHByb2R1Y2UgdGV4dHVh bCBvdXRwdXQgZnJvbSB0aGUgcmVzdWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX09VVFBVVF9ICisjZGVmaW5lIFBHUEFf T1VUUFVUX0gKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFf d2Fsa2VyLmgiCisKK2V4dGVybiB2b2lkIHBncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZvIGJ1 ZiwKKwkJCQkJCQkgICBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkg ICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzKTsKKworI2VuZGlmCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfcGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjRjM2EzZWQ2ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3BhcnNlci55CkBAIC0wLDAgKzEsMzAxIEBACisleworLyoKKyAqIFBhcnNlciBmb3Ig cGxhbiBhZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfcGFyc2VyLnkKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPGZs b2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUg Im5vZGVzL21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVk ZSAidXRpbHMvZmxvYXQuaCIKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdw YV9wYXJzZXIuaCIKKworLyoKKyAqIEJpc29uIGRvZXNuJ3QgYWxsb2NhdGUgYW55dGhpbmcgdGhh dCBuZWVkcyB0byBsaXZlIGFjcm9zcyBwYXJzZXIgY2FsbHMsCisgKiBzbyB3ZSBjYW4gZWFzaWx5 IGhhdmUgaXQgdXNlIHBhbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYy4gIFRoaXMgcHJldmVudHMKKyAq IG1lbW9yeSBsZWFrcyBpZiB3ZSBlcnJvciBvdXQgZHVyaW5nIHBhcnNpbmcuCisgKi8KKyNkZWZp bmUgWVlNQUxMT0MgcGFsbG9jCisjZGVmaW5lIFlZRlJFRSAgIHBmcmVlCislfQorCisvKiBCSVNP TiBEZWNsYXJhdGlvbnMgKi8KKyVwYXJzZS1wYXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVwYXJzZS1w YXJhbSB7Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19wfQorJXBhcnNlLXBhcmFtIHt5eXNjYW5fdCB5 eXNjYW5uZXJ9CislbGV4LXBhcmFtIHtMaXN0ICoqcmVzdWx0fQorJWxleC1wYXJhbSB7Y2hhciAq KnBhcnNlX2Vycm9yX21zZ19wfQorJWxleC1wYXJhbSB7eXlzY2FuX3QgeXlzY2FubmVyfQorJXB1 cmUtcGFyc2VyCislZXhwZWN0IDAKKyVuYW1lLXByZWZpeD0icGdwYV95eSIKKworJXVuaW9uCit7 CisJY2hhcgkgICAqc3RyOworCWludAkJCWludGVnZXI7CisJTGlzdAkgICAqbGlzdDsKKwlwZ3Bh X2FkdmljZV9pdGVtICppdGVtOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCXBncGFf aW5kZXhfdGFyZ2V0ICppdGFyZ2V0OworfQorJXRva2VuIDxzdHI+IFRPS19JREVOVCBUT0tfVEFH X0pPSU5fT1JERVIgVE9LX1RBR19JTkRFWAorJXRva2VuIDxzdHI+IFRPS19UQUdfU0lNUExFIFRP S19UQUdfR0VORVJJQworJXRva2VuIDxpbnRlZ2VyPiBUT0tfSU5URUdFUgorCisldHlwZSA8aW50 ZWdlcj4gb3B0X3JpX29jY3VycmVuY2UKKyV0eXBlIDxpdGVtPiBhZHZpY2VfaXRlbQorJXR5cGUg PGxpc3Q+IGFkdmljZV9pdGVtX2xpc3QgZ2VuZXJpY190YXJnZXRfbGlzdAorJXR5cGUgPGxpc3Q+ IGluZGV4X3RhcmdldF9saXN0IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QKKyV0eXBlIDxsaXN0PiBv cHRfcGFydGl0aW9uIHNpbXBsZV90YXJnZXRfbGlzdAorJXR5cGUgPHN0cj4gaWRlbnRpZmllciBv cHRfcGxhbl9uYW1lCisldHlwZSA8dGFyZ2V0PiBnZW5lcmljX3N1Ymxpc3Qgam9pbl9vcmRlcl9z dWJsaXN0CisldHlwZSA8dGFyZ2V0PiByZWxhdGlvbl9pZGVudGlmaWVyCisldHlwZSA8aXRhcmdl dD4gaW5kZXhfbmFtZQorCislc3RhcnQgcGFyc2VfdG9wbGV2ZWwKKworLyogR3JhbW1hciBmb2xs b3dzICovCislJQorCitwYXJzZV90b3BsZXZlbDogYWR2aWNlX2l0ZW1fbGlzdAorCQl7CisJCQko dm9pZCkgeXluZXJyczsJCQkJLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLworCQkJKnJl c3VsdCA9ICQxOworCQl9CisJOworCithZHZpY2VfaXRlbV9saXN0OiBhZHZpY2VfaXRlbV9saXN0 IGFkdmljZV9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBO SUw7IH0KKwk7CisKK2FkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIgJygnIGpvaW5fb3Jk ZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZp Y2VfaXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCSQkLT50YXJn ZXRzID0gJDM7CisJCQlpZiAoJDMgPT0gTklMKQorCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBh cnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJICJKT0lOX09SREVSIG11c3QgaGF2 ZSBhdCBsZWFzdCBvbmUgdGFyZ2V0Iik7CisJCX0KKwl8IFRPS19UQUdfSU5ERVggJygnIGluZGV4 X3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNl X2l0ZW0pOworCQkJaWYgKHN0cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJ JCQtPnRhZyA9IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgk MSwgImluZGV4X3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRFWF9TQ0FO OworCQkJZWxzZQorCQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEp OworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19TSU1QTEUgJygnIHNpbXBs ZV90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2Fkdmlj ZV9pdGVtKTsKKwkJCWlmIChzdHJjbXAoJDEsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJ CQkkJC0+dGFnID0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNt cCgkMSwgIm5vX2dhdGhlciIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX05PX0dBVEhF UjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgInNlcV9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFn ID0gUEdQQV9UQUdfU0VRX1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJ0aWRfc2NhbiIp ID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX1RJRF9TQ0FOOworCQkJZWxzZQorCQkJCWVs b2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRhcmdldHMg PSAkMzsKKwkJfQorCXwgVE9LX1RBR19HRU5FUklDICcoJyBnZW5lcmljX3RhcmdldF9saXN0ICcp JworCQl7CisJCQlib29sCWZhaWw7CisKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZp Y2VfaXRlbSk7CisJCQkkJC0+dGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKCQxLCAmZmFpbCk7 CisJCQlpZiAoZmFpbCkKKwkJCXsKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJv cl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCSAidW5yZWNvZ25pemVkIGFkdmljZSB0YWciKTsK KwkJCX0KKworCQkJaWYgKCQkLT50YWcgPT0gUEdQQV9UQUdfRk9SRUlHTl9KT0lOKQorCQkJewor CQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCAkMykKKwkJCQl7CisJ CQkJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIgfHwKKwkJCQkJ CWxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pID09IDEpCisJCQkJCQkJcGdwYV95eWVycm9y KHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCQkgIkZPUkVJ R05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50 aWZpZXIiKTsKKwkJCQl9CisJCQl9CisKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwk7CisK K3JlbGF0aW9uX2lkZW50aWZpZXI6IGlkZW50aWZpZXIgb3B0X3JpX29jY3VycmVuY2Ugb3B0X3Bh cnRpdGlvbiBvcHRfcGxhbl9uYW1lCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9h ZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX0lERU5USUZJRVI7CisJ CQkkJC0+cmlkLmFsaWFzX25hbWUgPSAkMTsKKwkJCSQkLT5yaWQub2NjdXJyZW5jZSA9ICQyOwor CQkJaWYgKGxpc3RfbGVuZ3RoKCQzKSA9PSAyKQorCQkJeworCQkJCSQkLT5yaWQucGFydG5zcCA9 IGxpbml0aWFsKCQzKTsKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsc2Vjb25kKCQzKTsKKwkJCX0K KwkJCWVsc2UgaWYgKCQzICE9IE5JTCkKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsaW5pdGlhbCgk Myk7CisJCQkkJC0+cmlkLnBsYW5fbmFtZSA9ICQ0OworCQl9CisJOworCitpbmRleF9uYW1lOiBp ZGVudGlmaWVyCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQp OworCQkJJCQtPmluZG5hbWUgPSAkMTsKKwkJfQorCXwgaWRlbnRpZmllciAnLicgaWRlbnRpZmll cgorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQk LT5pbmRuYW1lc3BhY2UgPSAkMTsKKwkJCSQkLT5pbmRuYW1lID0gJDM7CisJCX0KKwk7CisKK29w dF9yaV9vY2N1cnJlbmNlOgorCScjJyBUT0tfSU5URUdFUgorCQl7CisJCQlpZiAoJDIgPD0gMCkK KwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAor CQkJCQkJCSAib25seSBwb3NpdGl2ZSBvY2N1cnJlbmNlIG51bWJlcnMgYXJlIHBlcm1pdHRlZCIp OworCQkJJCQgPSAkMjsKKwkJfQorCXwKKwkJeworCQkJLyogVGhlIGRlZmF1bHQgb2NjdXJyZW5j ZSBudW1iZXIgaXMgMS4gKi8KKwkJCSQkID0gMTsKKwkJfQorCTsKKworaWRlbnRpZmllcjogVE9L X0lERU5UCisJfCBUT0tfVEFHX0pPSU5fT1JERVIKKwl8IFRPS19UQUdfSU5ERVgKKwl8IFRPS19U QUdfU0lNUExFCisJfCBUT0tfVEFHX0dFTkVSSUMKKwk7CisKKy8qCisgKiBXaGVuIGdlbmVyYXRp bmcgYWR2aWNlLCB3ZSBhbHdheXMgc2NoZW1hLXF1YWxpZnkgdGhlIHBhcnRpdGlvbiBuYW1lLCBi dXQKKyAqIHdoZW4gcGFyc2luZyBhZHZpY2UsIHdlIGFjY2VwdCBhIHNwZWNpZmljYXRpb24gdGhh dCBsYWNrcyBvbmUuCisgKi8KK29wdF9wYXJ0aXRpb246CisJJy8nIFRPS19JREVOVCAnLicgVE9L X0lERU5UCisJCXsgJCQgPSBsaXN0X21ha2UyKCQyLCAkNCk7IH0KKwl8ICcvJyBUT0tfSURFTlQK KwkJeyAkJCA9IGxpc3RfbWFrZTEoJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitv cHRfcGxhbl9uYW1lOgorCSdAJyBUT0tfSURFTlQKKwkJeyAkJCA9ICQyOyB9CisJfAorCQl7ICQk ID0gTlVMTDsgfQorCTsKKworZ2VuZXJpY190YXJnZXRfbGlzdDogZ2VuZXJpY190YXJnZXRfbGlz dCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8IGdl bmVyaWNfdGFyZ2V0X2xpc3QgZ2VuZXJpY19zdWJsaXN0CisJCXsgJCQgPSBsYXBwZW5kKCQxLCAk Mik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2dlbmVyaWNfc3VibGlzdDogJygnIHNp bXBsZV90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2Fk dmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOwor CQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwk7CisKK2luZGV4X3RhcmdldF9saXN0OgorCSAg aW5kZXhfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllciBpbmRleF9uYW1lCisJCXsKKwkJ CSQyLT5pdGFyZ2V0ID0gJDM7CisJCQkkJCA9IGxhcHBlbmQoJDEsICQyKTsKKwkJfQorCXwKKwkJ eyAkJCA9IE5JTDsgfQorCTsKKworam9pbl9vcmRlcl90YXJnZXRfbGlzdDogam9pbl9vcmRlcl90 YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7 IH0KKwl8IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl9zdWJsaXN0CisJCXsgJCQg PSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2pvaW5fb3Jk ZXJfc3VibGlzdDoKKwknKCcgam9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQg PSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQ QV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwl8ICd7 JyBzaW1wbGVfdGFyZ2V0X2xpc3QgJ30nCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdw YV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9M SVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwk7CisKK3NpbXBsZV90YXJnZXRfbGlz dDogc2ltcGxlX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBl bmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworJSUKKworLyoKKyAqIFBh cnNlIGFuIGFkdmljZV9zdHJpbmcgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgcGdw YV9hZHZpY2VfaXRlbQorICogb2JqZWN0cy4gSWYgYSBwYXJzZSBlcnJvciBvY2N1cnMsIGluc3Rl YWQgcmV0dXJuIE5VTEwuCisgKgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMLCAqZXJy b3JfcCB3aWxsIGJlIHNldCB0byB0aGUgZXJyb3IgbWVzc2FnZTsKKyAqIG90aGVyd2lzZSwgKmVy cm9yX3Agd2lsbCBiZSBzZXQgdG8gTlVMTC4KKyAqLworTGlzdCAqCitwZ3BhX3BhcnNlKGNvbnN0 IGNoYXIgKmFkdmljZV9zdHJpbmcsIGNoYXIgKiplcnJvcl9wKQoreworCXl5c2Nhbl90CXNjYW5u ZXI7CisJTGlzdAkgICAqcmVzdWx0OworCWNoYXIJICAgKmVycm9yID0gTlVMTDsKKworCXBncGFf c2Nhbm5lcl9pbml0KGFkdmljZV9zdHJpbmcsICZzY2FubmVyKTsKKwlwZ3BhX3l5cGFyc2UoJnJl c3VsdCwgJmVycm9yLCBzY2FubmVyKTsKKwlwZ3BhX3NjYW5uZXJfZmluaXNoKHNjYW5uZXIpOwor CisJaWYgKGVycm9yICE9IE5VTEwpCisJeworCQkqZXJyb3JfcCA9IGVycm9yOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwkqZXJyb3JfcCA9IE5VTEw7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi42ZWY1NjY5NWRkMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKQEAgLTAsMCArMSwyMDU5IEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBwZ3BhX3BsYW5uZXIuYworICoJICBwbGFubmVyIGhvb2tzCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorI2luY2x1 ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVk ZSAicGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorI2luY2x1ZGUgInBn cGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisjaW5j bHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2V4dGVuZHBsYW4u aCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIv cGF0aHMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1ZGUgIm9wdGlt aXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUg InV0aWxzL2xzeXNjYWNoZS5oIgorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCisvKgor ICogV2hlbiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCB3ZSB0cnkgZ2VuZXJhdGluZyByZWxhdGlv biBpZGVudGlmaWVycyBkdXJpbmcKKyAqIHBsYW5uaW5nLCBzYXZpbmcgdGhlbSBpbiBhIGhhc2gg dGFibGUsIGFuZCB0aGVuIGNyb3NzLWNoZWNraW5nIHRoZW0gYWdhaW5zdAorICogdGhlIG9uZXMg Z2VuZXJhdGVkIGFmdGVyIHBsYW5uaW5nIGlzIGNvbXBsZXRlLgorICovCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3JpX2NoZWNrZXJfa2V5Cit7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUluZGV4CQly dGk7Cit9IHBncGFfcmlfY2hlY2tlcl9rZXk7CisKK3R5cGVkZWYgc3RydWN0IHBncGFfcmlfY2hl Y2tlcgoreworCXBncGFfcmlfY2hlY2tlcl9rZXkga2V5OworCXVpbnQzMgkJc3RhdHVzOworCWNv bnN0IGNoYXIgKnJpZF9zdHJpbmc7Cit9IHBncGFfcmlfY2hlY2tlcjsKKworc3RhdGljIHVpbnQz MiBwZ3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBrZXkpOworCitz dGF0aWMgaW5saW5lIGJvb2wKK3BncGFfcmlfY2hlY2tlcl9jb21wYXJlX2tleShwZ3BhX3JpX2No ZWNrZXJfa2V5IGEsIHBncGFfcmlfY2hlY2tlcl9rZXkgYikKK3sKKwlpZiAoYS5ydGkgIT0gYi5y dGkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0dXJu IChiLnBsYW5fbmFtZSA9PSBOVUxMKTsKKwlpZiAoYi5wbGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0 dXJuIGZhbHNlOworCXJldHVybiBzdHJjbXAoYS5wbGFuX25hbWUsIGIucGxhbl9uYW1lKSA9PSAw OworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBncGFfcmlfY2hlY2sKKyNkZWZpbmUgU0hfRUxF TUVOVF9UWVBFCQlwZ3BhX3JpX2NoZWNrZXIKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3Jp X2NoZWNrZXJfa2V5CisjZGVmaW5lIFNIX0tFWQkJCQlrZXkKKyNkZWZpbmUgU0hfSEFTSF9LRVko dGIsIGtleSkJcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KGtleSkKKyNkZWZpbmUJU0hfRVFVQUwo dGIsIGEsIGIpCXBncGFfcmlfY2hlY2tlcl9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9T Q09QRQkJCXN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJ TkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1 Y3QgcGdwYV9wbGFubmVyX3N0YXRlCit7CisJRXhwbGFpblN0YXRlICpleHBsYWluX3N0YXRlOwor CWJvb2wJCWdlbmVyYXRlX2FkdmljZV9mZWVkYmFjazsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2Vf c3RyaW5nOworCXBncGFfdHJvdmUgKnRyb3ZlOworCU1lbW9yeUNvbnRleHQgdHJvdmVfY3h0Owor CUxpc3QJICAgKnNqX3VuaXF1ZV9yZWxzOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CXBncGFfcmlfY2hlY2tfaGFzaCAqcmlfY2hlY2tfaGFzaDsKKyNlbmRpZgorfSBwZ3BhX3BsYW5u ZXJfc3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IHBncGFfam9pbl9zdGF0ZQoreworCS8qIE1vc3Qt cmVjZW50bHktY29uc2lkZXJlZCBvdXRlciByZWwuICovCisJUmVsT3B0SW5mbyAqb3V0ZXJyZWw7 CisKKwkvKiBNb3N0LXJlY2VudGx5LWNvbnNpZGVyZWQgaW5uZXIgcmVsLiAqLworCVJlbE9wdElu Zm8gKmlubmVycmVsOworCisJLyoKKwkgKiBBcnJheSBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBm b3IgYWxsIG1lbWJlcnMgb2YgdGhpcyBqb2lucmVsLCB3aXRoCisJICogb3V0ZXJyZWwgaWRlbmlm aWVycyBiZWZvcmUgaW5uZXJyZWwgaWRlbnRpZmllcnMuCisJICovCisJcGdwYV9pZGVudGlmaWVy ICpyaWRzOworCisJLyogTnVtYmVyIG9mIG91dGVyIHJlbCBpZGVudGlmaWVycy4gKi8KKwlpbnQJ CQlvdXRlcl9jb3VudDsKKworCS8qIE51bWJlciBvZiBpbm5lciByZWwgaWRlbnRpZmllcnMuICov CisJaW50CQkJaW5uZXJfY291bnQ7CisKKwkvKgorCSAqIFRyb3ZlIGxvb2t1cCByZXN1bHRzLgor CSAqCisJICogam9pbl9lbnRyaWVzIGFuZCByZWxfZW50cmllcyBhcmUgYXJyYXlzIG9mIGVudHJp ZXMsIGFuZCBqb2luX2luZGV4ZXMKKwkgKiBhbmQgcmVsX2luZGV4ZXMgYXJlIHRoZSBpbnRlZ2Vy IG9mZnNldHMgd2l0aGluIHRob3NlIGFycmF5cyBvZiBlbnRyaWVzCisJICogcG90ZW50aWFsbHkg cmVsZXZhbnQgdG8gdXMuIFRoZSAiam9pbiIgZmllbGRzIGNvcnJlc3BvbmQgdG8gYSBsb29rdXAK KwkgKiB1c2luZyBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOIGFuZCB0aGUgInJlbCIgZmllbGRzIHRv IGEgbG9va3VwIHVzaW5nCisJICogUEdQQV9UUk9WRV9MT09LVVBfUkVMLgorCSAqLworCXBncGFf dHJvdmVfZW50cnkgKmpvaW5fZW50cmllczsKKwlCaXRtYXBzZXQgICpqb2luX2luZGV4ZXM7CisJ cGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXM7CisJQml0bWFwc2V0ICAqcmVsX2luZGV4ZXM7 Cit9IHBncGFfam9pbl9zdGF0ZTsKKworLyogU2F2ZWQgaG9vayB2YWx1ZXMgKi8KK3N0YXRpYyBn ZXRfcmVsYXRpb25faW5mb19ob29rX3R5cGUgcHJldl9nZXRfcmVsYXRpb25faW5mbyA9IE5VTEw7 CitzdGF0aWMgam9pbl9wYXRoX3NldHVwX2hvb2tfdHlwZSBwcmV2X2pvaW5fcGF0aF9zZXR1cCA9 IE5VTEw7CitzdGF0aWMgam9pbnJlbF9zZXR1cF9ob29rX3R5cGUgcHJldl9qb2lucmVsX3NldHVw ID0gTlVMTDsKK3N0YXRpYyBwbGFubmVyX3NldHVwX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfc2V0 dXAgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2h1dGRvd25faG9va190eXBlIHByZXZfcGxhbm5l cl9zaHV0ZG93biA9IE5VTEw7CisKKy8qIE90aGVyIGdsb2JhbCB2YXJpYWJlcyAqLworc3RhdGlj IGludAlwbGFubmVyX2V4dGVuc2lvbl9pZCA9IC0xOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVz LiAqLworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2Is IFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJ CQkJICAgaW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkJICAgZG91YmxlICp0dXBsZV9mcmFjdGlv biwKKwkJCQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5l cl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkJCSAg Y29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBQbGFubmVkU3RtdCAqcHN0bXQpOworc3RhdGljIHZv aWQgcGdwYV9nZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAg T2lkIHJlbGF0aW9uT2JqZWN0SWQsCisJCQkJCQkJCSAgIGJvb2wgaW5ocGFyZW50LAorCQkJCQkJ CQkgICBSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIHZvaWQgcGdwYV9qb2lucmVsX3NldHVwKFBs YW5uZXJJbmZvICpyb290LAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJ ICAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWws CisJCQkJCQkJICAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJICAgTGlzdCAqcmVz dHJpY3RsaXN0KTsKK3N0YXRpYyB2b2lkIHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJIFJlbE9wdElu Zm8gKm91dGVycmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCSBK b2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSk7Citz dGF0aWMgcGdwYV9qb2luX3N0YXRlICpwZ3BhX2dldF9qb2luX3N0YXRlKFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJCQlSZWxPcHRJ bmZvICpvdXRlcnJlbCwKKwkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqaW5uZXJyZWwpOworc3RhdGlj IHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlKHVpbnQ2NCAqcGdzX21hc2tf cCwKKwkJCQkJCQkJCQkJICBjaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCSAgcGdwYV9qb2lu X3N0YXRlICpwanMpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9h ZHZpY2UoSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCQkJCQl1aW50NjQgKnBnc19tYXNrX3As CisJCQkJCQkJCQkJCQljaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fc3Rh dGUgKnBqcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVs T3B0SW5mbyAqcmVsLAorCQkJCQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cmll cywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkJCQkgICBw Z3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50cmllcywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJl bF9pbmRleGVzKTsKK3N0YXRpYyB1aW50NjQgcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9h ZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZyk7CitzdGF0aWMgYm9vbCBwZ3BhX2pv aW5fb3JkZXJfcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAor CQkJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJIHBncGFfdHJvdmVf ZW50cnkgKmVudHJ5KTsKK3N0YXRpYyBib29sIHBncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2lu KGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAgcGdwYV9pZGVu dGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJ CQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpOworc3RhdGljIGJvb2wgcGdwYV9vcGFxdWVf am9pbl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJ CQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2Vu dHJ5ICplbnRyeSwKKwkJCQkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CitzdGF0aWMg Ym9vbCBwZ3BhX3NlbWlqb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5l cl9jb3VudCwKKwkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCSAg IHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJICAgYm9vbCBvdXRlcl9zaWRlX251 bGxhYmxlLAorCQkJCQkJCQkJICAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKTsKKworc3RhdGljIExp c3QgKnBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soTGlzdCAqbGlzdCwgcGdwYV90cm92ZSAq dHJvdmUsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCQkJ CQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCSAgcGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGdwYV9y aV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCisJCQkJCQkJCQkJUGxhbm5l ckluZm8gKnJvb3QsCisJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsKTsKK3N0YXRpYyB2b2lkIHBn cGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywKKwkJCQkJCQkJ CSBQbGFubmVkU3RtdCAqcHN0bXQpOworCitzdGF0aWMgY2hhciAqcGdwYV9ibXNfdG9fY3N0cmlu ZyhCaXRtYXBzZXQgKmJtcyk7CitzdGF0aWMgY29uc3QgY2hhciAqcGdwYV9qb2ludHlwZV90b19j c3RyaW5nKEpvaW5UeXBlIGpvaW50eXBlKTsKKworLyoKKyAqIEluc3RhbGwgcGxhbm5lci1yZWxh dGVkIGhvb2tzLgorICovCit2b2lkCitwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcyh2b2lkKQor eworCXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gR2V0UGxhbm5lckV4dGVuc2lvbklkKCJwZ19wbGFu X2FkdmljZSIpOworCXByZXZfcGxhbm5lcl9zZXR1cCA9IHBsYW5uZXJfc2V0dXBfaG9vazsKKwlw bGFubmVyX3NldHVwX2hvb2sgPSBwZ3BhX3BsYW5uZXJfc2V0dXA7CisJcHJldl9wbGFubmVyX3No dXRkb3duID0gcGxhbm5lcl9zaHV0ZG93bl9ob29rOworCXBsYW5uZXJfc2h1dGRvd25faG9vayA9 IHBncGFfcGxhbm5lcl9zaHV0ZG93bjsKKwlwcmV2X2dldF9yZWxhdGlvbl9pbmZvID0gZ2V0X3Jl bGF0aW9uX2luZm9faG9vazsKKwlnZXRfcmVsYXRpb25faW5mb19ob29rID0gcGdwYV9nZXRfcmVs YXRpb25faW5mbzsKKwlwcmV2X2pvaW5yZWxfc2V0dXAgPSBqb2lucmVsX3NldHVwX2hvb2s7CisJ am9pbnJlbF9zZXR1cF9ob29rID0gcGdwYV9qb2lucmVsX3NldHVwOworCXByZXZfam9pbl9wYXRo X3NldHVwID0gam9pbl9wYXRoX3NldHVwX2hvb2s7CisJam9pbl9wYXRoX3NldHVwX2hvb2sgPSBw Z3BhX2pvaW5fcGF0aF9zZXR1cDsKK30KKworLyoKKyAqIENhcnJ5IG91dCB3aGF0ZXZlciBzZXR1 cCB3b3JrIHdlIG5lZWQgdG8gZG8gYmVmb3JlIHBsYW5uaW5nLgorICovCitzdGF0aWMgdm9pZAor cGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwgY29u c3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCSAgIGludCBjdXJzb3JPcHRpb25zLCBkb3VibGUg KnR1cGxlX2ZyYWN0aW9uLAorCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJcGdwYV90cm92 ZSAqdHJvdmUgPSBOVUxMOworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCWNoYXIJICAgKnN1 cHBsaWVkX2FkdmljZTsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSBmYWxzZTsK Kwlib29sCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7CisJYm9vbAkJbmVlZHNfcHBz ID0gZmFsc2U7CisKKwkvKgorCSAqIERlY2lkZSB3aGV0aGVyIHdlIG5lZWQgdG8gZ2VuZXJhdGUg YW4gYWR2aWNlIHN0cmluZy4gV2UgbXVzdCBkbyB0aGlzIGlmCisJICogdGhlIHVzZXIgaGFzIHRv bGQgdXMgdG8gZG8gaXQgY2F0ZWdvcmljYWxseSwgb3IgaWYgYXQgbGVhc3Qgb25lCisJICogY29s bGVjdG9yIGlzIGVuYWJsZWQsIG9yIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgaXQgdXNpbmcg dGhlIEVYUExBSU4KKwkgKiAoUExBTl9BRFZJQ0UpIG9wdGlvbi4KKwkgKi8KKwlnZW5lcmF0ZV9h ZHZpY2Vfc3RyaW5nID0gKHBnX3BsYW5fYWR2aWNlX2Fsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWls cyB8fAorCQkJCQkJCSAgcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdG9yIHx8CisJCQkJCQkJ ICBwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdG9yIHx8CisJCQkJCQkJICBwZ19wbGFuX2Fk dmljZV9zaG91bGRfZXhwbGFpbihlcykpOworCWlmIChnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nKQor CQluZWVkc19wcHMgPSB0cnVlOworCisJLyoKKwkgKiBJZiBhbnkgYWR2aWNlIHdhcyBwcm92aWRl ZCwgYnVpbGQgYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHVzZSBkdXJpbmcKKwkgKiBwbGFubmluZy4K KwkgKi8KKwlzdXBwbGllZF9hZHZpY2UgPSBwZ19wbGFuX2FkdmljZV9nZXRfc3VwcGxpZWRfcXVl cnlfYWR2aWNlKGdsb2IsIHBhcnNlLAorCQkJCQkJCQkJCQkJCQkJICAgcXVlcnlfc3RyaW5nLAor CQkJCQkJCQkJCQkJCQkJICAgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCQkJCQkJCSAgIGVzKTsK KwlpZiAoc3VwcGxpZWRfYWR2aWNlICE9IE5VTEwgJiYgc3VwcGxpZWRfYWR2aWNlWzBdICE9ICdc MCcpCisJeworCQlMaXN0CSAgICphZHZpY2VfaXRlbXM7CisJCWNoYXIJICAgKmVycm9yOworCisJ CS8qCisJCSAqIElmIHRoZSBzdXBwbGllZCBhZHZpY2Ugc3RyaW5nIGNvbWVzIGZyb20gcGdfcGxh bl9hZHZpY2UuYWR2aWNlLAorCQkgKiBwYXJzaW5nIHNob3VsZG4ndCBmYWlsIGhlcmUsIGJlY2F1 c2Ugd2UgbXVzdCBoYXZlIHByZXZpb3VzbHkgcGFyc2VkCisJCSAqIHN1Y2Nlc3NmdWxseSBpbiBw Z19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vay4gSG93ZXZlciwgaXQgbWlnaHQKKwkJICog YWxzbyBiZSBjb21lIGZyb20gYSBob29rIHJlZ2lzdGVyZWQgdmlhIHBnX3BsYW5fYWR2aWNlX2Fk ZF9hZHZpc29yLAorCQkgKiBhbmQgd2UgY2FuJ3QgYmUgc3VyZSB3aGV0aGVyIHRoYXQncyB2YWxp ZC4gKFBsdXMsIGhhdmluZyBhbiBlcnJvcgorCQkgKiBjaGVjayBvZiBoZXJlIHNlZW1zIGxpa2Ug YSBnb29kIGlkZWEgYW55d2F5LCBqdXN0IGZvciBzYWZldHkuKQorCQkgKi8KKwkJYWR2aWNlX2l0 ZW1zID0gcGdwYV9wYXJzZShzdXBwbGllZF9hZHZpY2UsICZlcnJvcik7CisJCWlmIChlcnJvcikK KwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJZXJybXNnKCJjb3VsZCBub3QgcGFyc2Ugc3VwcGxp ZWQgYWR2aWNlOiAlcyIsIGVycm9yKSk7CisKKwkJLyoKKwkJICogSXQncyBwb3NzaWJsZSB0aGF0 IHRoZSBhZHZpY2Ugc3RyaW5nIHdhcyBub24tZW1wdHkgYnV0IGNvbnRhaW5lZCBubworCQkgKiBh Y3R1YWwgYWR2aWNlLCBlLmcuIGl0IHdhcyBhbGwgd2hpdGVzcGFjZS4KKwkJICovCisJCWlmIChh ZHZpY2VfaXRlbXMgIT0gTklMKQorCQl7CisJCQl0cm92ZSA9IHBncGFfYnVpbGRfdHJvdmUoYWR2 aWNlX2l0ZW1zKTsKKwkJCW5lZWRzX3BwcyA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBr bm93IHRoYXQgd2UncmUgcnVubmluZyB1bmRlciBFWFBMQUlOLCBvciBpZiB0aGUgdXNlciBoYXMK KwkJCSAqIHRvbGQgdXMgdG8gYWx3YXlzIGRvIHRoZSB3b3JrLCBnZW5lcmF0ZSBhZHZpY2UgZmVl ZGJhY2suCisJCQkgKi8KKwkJCWlmIChlcyAhPSBOVUxMIHx8IHBnX3BsYW5fYWR2aWNlX2Fsd2F5 c19zdG9yZV9hZHZpY2VfZGV0YWlscykKKwkJCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSB0 cnVlOworCQl9CisJfQorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCisJLyoKKwkgKiBJ ZiBhc3NlcnRzIGFyZSBlbmFibGVkLCBhbHdheXMgYnVpbGQgYSBwcml2YXRlIHN0YXRlIG9iamVj dCBmb3IKKwkgKiBjcm9zcy1jaGVja3MuCisJICovCisJbmVlZHNfcHBzID0gdHJ1ZTsKKyNlbmRp ZgorCisJLyoKKwkgKiBXZSBvbmx5IGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIHByaXZhdGUgc3Rh dGUgb2JqZWN0IGlmIGl0J3MgbmVlZGVkIGZvcgorCSAqIHNvbWUgcHVycG9zZS4gVGhhdCBjb3Vs ZCBiZSAoMSkgcmVjb3JkaW5nIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIGdlbmVyYXRlCisJICogYW4g YWR2aWNlIHN0cmluZywgKDIpIHN0b3JpbmcgYSB0cm92ZSBvZiBzdXBwbGllZCBhZHZpY2UsIG9y ICgzKQorCSAqIGZhY2lsaXRhdGluZyBkZWJ1Z2dpbmcgY3Jvc3MtY2hlY2tzIHdoZW4gYXNzZXJ0 cyBhcmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAobmVlZHNfcHBzKQorCXsKKwkJcHBzID0gcGFsbG9j MF9vYmplY3QocGdwYV9wbGFubmVyX3N0YXRlKTsKKwkJcHBzLT5leHBsYWluX3N0YXRlID0gZXM7 CisJCXBwcy0+Z2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrID0gZ2VuZXJhdGVfYWR2aWNlX2ZlZWRi YWNrOworCQlwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSBnZW5lcmF0ZV9hZHZpY2Vfc3Ry aW5nOworCQlwcHMtPnRyb3ZlID0gdHJvdmU7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CQlwcHMtPnJpX2NoZWNrX2hhc2ggPQorCQkJcGdwYV9yaV9jaGVja19jcmVhdGUoQ3VycmVudE1l bW9yeUNvbnRleHQsIDEwMjQsIE5VTEwpOworI2VuZGlmCisJCVNldFBsYW5uZXJHbG9iYWxFeHRl bnNpb25TdGF0ZShnbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCwgcHBzKTsKKwl9Cit9CisKKy8q CisgKiBDYXJyeSBvdXQgd2hhdGV2ZXIgd29yayB3ZSB3YW50IHRvIGRvIGFmdGVyIHBsYW5uaW5n IGlzIGNvbXBsZXRlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX3NodXRkb3duKFBs YW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJICBjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsIFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBw czsKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IE5VTEw7CisJcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 IHdhbGtlciA9IHswfTsJLyogcGxhY2F0ZSBjb21waWxlciAqLworCWJvb2wJCWdlbmVyYXRlX2Fk dmljZV9mZWVkYmFjayA9IGZhbHNlOworCWJvb2wJCWdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSBm YWxzZTsKKwlMaXN0CSAgICpwZ3BhX2l0ZW1zID0gTklMOworCXBncGFfaWRlbnRpZmllciAqcnRf aWRlbnRpZmllcnMgPSBOVUxMOworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1 cCBieSBwZ3BhX3BsYW5uZXJfc2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0 ZW5zaW9uU3RhdGUoZ2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMgIT0gTlVM TCkKKwl7CisJCXRyb3ZlID0gcHBzLT50cm92ZTsKKwkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNr ID0gcHBzLT5nZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2s7CisJCWdlbmVyYXRlX2FkdmljZV9zdHJp bmcgPSBwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdy ZSB0cnlpbmcgdG8gZ2VuZXJhdGUgYW4gYWR2aWNlIHN0cmluZyBvciBpZiB3ZSdyZSB0cnlpbmcg dG8KKwkgKiBwcm92aWRlIGFkdmljZSBmZWVkYmFjaywgdGhlbiB3ZSB3aWxsIG5lZWQgdG8gY3Jl YXRlIHJhbmdlIHRhYmxlCisJICogaWRlbnRpZmllcnMuCisJICovCisJaWYgKGdlbmVyYXRlX2Fk dmljZV9zdHJpbmcgfHwgZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJcGdwYV9wbGFu X3dhbGtlcigmd2Fsa2VyLCBwc3RtdCwgcHBzLT5zal91bmlxdWVfcmVscyk7CisJCXJ0X2lkZW50 aWZpZXJzID0gcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChwc3RtdCk7 CisJfQorCisJLyogR2VuZXJhdGUgdGhlIGFkdmljZSBzdHJpbmcsIGlmIHdlIG5lZWQgdG8gZG8g c28uICovCisJaWYgKGdlbmVyYXRlX2FkdmljZV9zdHJpbmcpCisJeworCQljaGFyCSAgICphZHZp Y2Vfc3RyaW5nOworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJLyogR2VuZXJhdGUgYSB0ZXh0 dWFsIGFkdmljZSBzdHJpbmcuICovCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwZ3BhX291 dHB1dF9hZHZpY2UoJmJ1ZiwgJndhbGtlciwgcnRfaWRlbnRpZmllcnMpOworCQlhZHZpY2Vfc3Ry aW5nID0gYnVmLmRhdGE7CisKKwkJLyogSWYgdGhlIGFkdmljZSBzdHJpbmcgaXMgZW1wdHksIGRv bid0IGJvdGhlciBjb2xsZWN0aW5nIGl0LiAqLworCQlpZiAoYWR2aWNlX3N0cmluZ1swXSAhPSAn XDAnKQorCQkJcGdwYV9jb2xsZWN0X2FkdmljZShwc3RtdC0+cXVlcnlJZCwgcXVlcnlfc3RyaW5n LCBhZHZpY2Vfc3RyaW5nKTsKKworCQkvKiBTYXZlIHRoZSBhZHZpY2Ugc3RyaW5nIGluIHRoZSBm aW5hbCBwbGFuLiAqLworCQlwZ3BhX2l0ZW1zID0gbGFwcGVuZChwZ3BhX2l0ZW1zLAorCQkJCQkJ CSBtYWtlRGVmRWxlbSgiYWR2aWNlX3N0cmluZyIsCisJCQkJCQkJCQkJIChOb2RlICopIG1ha2VT dHJpbmcoYWR2aWNlX3N0cmluZyksCisJCQkJCQkJCQkJIC0xKSk7CisJfQorCisJLyoKKwkgKiBJ ZiB3ZSdyZSB0cnlpbmcgdG8gcHJvdmlkZSBhZHZpY2UgZmVlZGJhY2ssIHRoZW4gd2Ugd2lsbCBu ZWVkIHRvCisJICogYW5hbHl6ZSBob3cgc3VjY2Vzc2Z1bCB0aGUgYWR2aWNlIHdhcy4KKwkgKi8K KwlpZiAoZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJTGlzdAkgICAqZmVlZGJhY2sg PSBOSUw7CisKKwkJLyoKKwkJICogSW5qZWN0IGEgTm9kZS10cmVlIHJlcHJlc2VudGF0aW9uIG9m IGFsbCB0aGUgdHJvdmUtZW50cnkgZmxhZ3MgaW50bworCQkgKiB0aGUgUGxhbm5lZFN0bXQuCisJ CSAqLworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ss CisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX1NDQU4s CisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisJCWZlZWRiYWNrID0gcGdw YV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAor CQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50 aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRi YWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RST1ZF X0xPT0tVUF9SRUwsCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisKKwkJ cGdwYV9pdGVtcyA9IGxhcHBlbmQocGdwYV9pdGVtcywgbWFrZURlZkVsZW0oImZlZWRiYWNrIiwK KwkJCQkJCQkJCQkJCQkgKE5vZGUgKikgZmVlZGJhY2ssCisJCQkJCQkJCQkJCQkJIC0xKSk7CisJ fQorCisJLyogUHVzaCB3aGF0ZXZlciBkYXRhIHdlJ3JlIHNhdmluZyBpbnRvIHRoZSBQbGFubmVk U3RtdC4gKi8KKwlpZiAocGdwYV9pdGVtcyAhPSBOSUwpCisJCXBzdG10LT5leHRlbnNpb25fc3Rh dGUgPQorCQkJbGFwcGVuZChwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAorCQkJCQltYWtlRGVmRWxl bSgicGdfcGxhbl9hZHZpY2UiLCAoTm9kZSAqKSBwZ3BhX2l0ZW1zLCAtMSkpOworCisJLyoKKwkg KiBJZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBjcm9zcy1jaGVjayB0aGUgZ2VuZXJhdGVkIHJh bmdlIHRhYmxlCisJICogaWRlbnRpZmllcnMuCisJICovCisJaWYgKHBwcyAhPSBOVUxMKQorCQlw Z3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocHBzLCBwc3RtdCk7Cit9CisKKy8qCisgKiBIb29rIGZ1 bmN0aW9uIGZvciBnZXRfcmVsYXRpb25faW5mbygpLgorICoKKyAqIFdlIGNhbiBhcHBseSBzY2Fu IGFkdmljZSBhdCB0aGlzIG9waW50LCBhbmQgd2UgYWxzbyB1c2VlIHRoaXMgYXMgYW4KKyAqIG9w cG9ydHVuaXR5IHRvIGRvIHJhbmdlLXRhYmxlIGlkZW50aWZpZXIgY3Jvc3MtY2hlY2tpbmcgaW4g YXNzZXJ0LWVuYWJsZWQKKyAqIGJ1aWxkcy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfZ2V0X3Jl bGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLAorCQkJ CQkgICBib29sIGluaHBhcmVudCwgUmVsT3B0SW5mbyAqcmVsKQoreworCXBncGFfcGxhbm5lcl9z dGF0ZSAqcHBzOworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3Bh X3BsYW5uZXJfc2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3Rh dGUocm9vdC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCisJLyogU2F2ZSBkZXRhaWxz IG5lZWRlZCBmb3IgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBjcm9zcy1jaGVja2luZy4gKi8KKwlp ZiAocHBzICE9IE5VTEwpCisJCXBncGFfcmlfY2hlY2tlcl9zYXZlKHBwcywgcm9vdCwgcmVsKTsK KworCS8qIElmIHF1ZXJ5IGFkdmljZSB3YXMgcHJvdmlkZWQsIHNlYXJjaCBmb3IgcmVsZXZhbnQg ZW50cmllcy4gKi8KKwlpZiAocHBzICE9IE5VTEwgJiYgcHBzLT50cm92ZSAhPSBOVUxMKQorCXsK KwkJcGdwYV9pZGVudGlmaWVyIHJpZDsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9zY2Fu OworCQlwZ3BhX3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0X3JlbDsKKworCQkvKiBTZWFyY2ggZm9yIHNj YW4gYWR2aWNlIGFuZCBnZW5lcmFsIHJlbCBhZHZpY2UuICovCisJCXBncGFfY29tcHV0ZV9pZGVu dGlmaWVyX2J5X3J0aShyb290LCByZWwtPnJlbGlkLCAmcmlkKTsKKwkJcGdwYV90cm92ZV9sb29r dXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfU0NBTiwgMSwgJnJpZCwKKwkJCQkJCSAg JnRyZXN1bHRfc2Nhbik7CisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJP VkVfTE9PS1VQX1JFTCwgMSwgJnJpZCwKKwkJCQkJCSAgJnRyZXN1bHRfcmVsKTsKKworCQkvKiBJ ZiByZWxldmFudCBlbnRyaWVzIHdlcmUgZm91bmQsIGFwcGx5IHRoZW0uICovCisJCWlmICh0cmVz dWx0X3NjYW4uaW5kZXhlcyAhPSBOVUxMIHx8IHRyZXN1bHRfcmVsLmluZGV4ZXMgIT0gTlVMTCkK KwkJeworCQkJdWludDY0CQlvcmlnaW5hbF9tYXNrID0gcmVsLT5wZ3NfbWFzazsKKworCQkJcGdw YV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKHJlbCwKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3Nj YW4uZW50cmllcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uaW5kZXhlcywKKwkJCQkJCQkJ CQkgICB0cmVzdWx0X3JlbC5lbnRyaWVzLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfcmVsLmluZGV4 ZXMpOworCisJCQkvKiBFbWl0IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBlbmFibGVkLiAqLworCQkJ aWYgKHBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2sgJiYgb3JpZ2luYWxfbWFzayAhPSByZWwtPnBn c19tYXNrKQorCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1h c2sgZm9yIFJUSSAldSBjaGFuZ2VkIGZyb20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwK KwkJCQkJCQkJcmVsLT5yZWxpZCwgb3JpZ2luYWxfbWFzaywgcmVsLT5wZ3NfbWFzaykpKTsKKwkJ fQorCX0KKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2dl dF9yZWxhdGlvbl9pbmZvKQorCQkoKnByZXZfZ2V0X3JlbGF0aW9uX2luZm8pIChyb290LCByZWxh dGlvbk9iamVjdElkLCBpbmhwYXJlbnQsIHJlbCk7Cit9CisKKy8qCisgKiBFbmZvcmNlIGFueSBw cm92aWRlZCBhZHZpY2UgdGhhdCBpcyByZWxldmFudCB0byBhbnkgbWV0aG9kIG9mIGltcGxlbWVu dGluZworICogdGhpcyBqb2luLgorICoKKyAqIEFsdGhvdWdoIHdlJ3JlIHBhc3NlZCB0aGUgb3V0 ZXJyZWwgYW5kIGlubmVycmVsIGhlcmUsIHRob3NlIGFyZSBqdXN0CisgKiB3aGF0ZXZlciB2YWx1 ZXMgaGFwcGVuZWQgdG8gcHJvbXB0IHRoZSBjcmVhdGlvbiBvZiB0aGlzIGpvaW5yZWw7IHRoZXkK KyAqIHNob3VsZG4ndCByZWFsbHkgaW5mbHVlbmNlIG91ciBjaG9pY2Ugb2Ygd2hhdCBhZHZpY2Ug dG8gYXBwbHkuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJy ZWwsIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZv LCBMaXN0ICpyZXN0cmljdGxpc3QpCit7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisKKwlBc3Nl cnQoYm1zX21lbWJlcnNoaXAoam9pbnJlbC0+cmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpOworCisJ LyogR2V0IG91ciBwcml2YXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGpvaW4uICovCisJ cGpzID0gcGdwYV9nZXRfam9pbl9zdGF0ZShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJy ZWwpOworCisJLyogSWYgdGhlcmUgaXMgcmVsZXZhbnQgYWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1 bmN0aW9uIHRvIGFwcGx5IGl0LiAqLworCWlmIChwanMgIT0gTlVMTCkKKwl7CisJCXVpbnQ2NAkJ b3JpZ2luYWxfbWFzayA9IGpvaW5yZWwtPnBnc19tYXNrOworCisJCXBncGFfcGxhbm5lcl9hcHBs eV9qb2lucmVsX2FkdmljZSgmam9pbnJlbC0+cGdzX21hc2ssCisJCQkJCQkJCQkJICByb290LT5w bGFuX25hbWUsCisJCQkJCQkJCQkJICBwanMpOworCisJCS8qIEVtaXQgZGVidWdnaW5nIG1lc3Nh Z2UsIGlmIGVuYWJsZWQuICovCisJCWlmIChwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrICYmIG9y aWdpbmFsX21hc2sgIT0gam9pbnJlbC0+cGdzX21hc2spCisJCQllcmVwb3J0KFdBUk5JTkcsCisJ CQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yIGpvaW4gb24gUlRJcyAlcyBjaGFuZ2VkIGZy b20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwKKwkJCQkJCQlwZ3BhX2Jtc190b19jc3Ry aW5nKGpvaW5yZWwtPnJlbGlkcyksCisJCQkJCQkJb3JpZ2luYWxfbWFzaywKKwkJCQkJCQlqb2lu cmVsLT5wZ3NfbWFzaykpKTsKKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4g Ki8KKwlpZiAocHJldl9qb2lucmVsX3NldHVwKQorCQkoKnByZXZfam9pbnJlbF9zZXR1cCkgKHJv b3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkgICBzamluZm8sIHJlc3Ry aWN0bGlzdCk7Cit9CisKKy8qCisgKiBFbmZvcmNlIGFueSBwcm92aWRlZCBhZHZpY2UgdGhhdCBp cyByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgbWV0aG9kIG9mCisgKiBpbXBsZW1lbnRpbmcg dGhpcyBwYXJ0aWN1bGFyIGpvaW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2pvaW5fcGF0aF9z ZXR1cChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJIFJlbE9w dEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJIEpvaW5UeXBlIGpv aW50eXBlLCBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpCit7CisJcGdwYV9qb2luX3N0YXRlICpw anM7CisKKwlBc3NlcnQoYm1zX21lbWJlcnNoaXAoam9pbnJlbC0+cmVsaWRzKSA9PSBCTVNfTVVM VElQTEUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBjb25zaWRlcmluZyBpbXBsZW1lbnRpbmcgYSBz ZW1pam9pbiBieSBtYWtpbmcgb25lIHNpZGUgdW5pcXVlLAorCSAqIG1ha2UgYSBub3RlIG9mIGl0 IGluIHRoZSBwZ3BhX3BsYW5uZXJfc3RhdGUuIFNlZSBjb21tZW50cyBmb3IKKwkgKiBwZ3BhX3Nq X3VuaXF1ZV9yZWwgZm9yIHdoeSB3ZSBkbyB0aGlzLgorCSAqLworCWlmIChqb2ludHlwZSA9PSBK T0lOX1VOSVFVRV9PVVRFUiB8fCBqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9JTk5FUikKKwl7CisJ CXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCQlSZWxPcHRJbmZvICp1bmlxdWVyZWw7CisKKwkJ dW5pcXVlcmVsID0gam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIgPyBvdXRlcnJlbCA6IGlu bmVycmVsOworCQlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+Z2xv YiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCQlpZiAocHBzICE9IE5VTEwgJiYKKwkJCShwcHMt PmdlbmVyYXRlX2FkdmljZV9zdHJpbmcgfHwgcHBzLT5nZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sp KQorCQl7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCQkvKiBBdm9pZCBhZGRpbmcgZHVw bGljYXRlcy4gKi8KKwkJCWZvcmVhY2hfcHRyKHBncGFfc2pfdW5pcXVlX3JlbCwgdXIsIHBwcy0+ c2pfdW5pcXVlX3JlbHMpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBzaG91bGQgYWx3YXlzIHVz ZSB0aGUgc2FtZSBwb2ludGVyIGZvciB0aGUgc2FtZSBwbGFuCisJCQkJICogbmFtZSwgc28gd2Ug bmVlZCBub3QgdXNlIHN0cmNtcCgpIGhlcmUuCisJCQkJICovCisJCQkJaWYgKHJvb3QtPnBsYW5f bmFtZSA9PSB1ci0+cGxhbl9uYW1lICYmCisJCQkJCWJtc19lcXVhbCh1bmlxdWVyZWwtPnJlbGlk cywgdXItPnJlbGlkcykpCisJCQkJeworCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCWJyZWFrOwor CQkJCX0KKwkJCX0KKworCQkJLyogSWYgbm90IGEgZHVwbGljYXRlLCBhcHBlbmQgdG8gdGhlIGxp c3QuICovCisJCQlpZiAoIWZvdW5kKQorCQkJeworCQkJCXBncGFfc2pfdW5pcXVlX3JlbCAqdXIg PSBwYWxsb2Nfb2JqZWN0KHBncGFfc2pfdW5pcXVlX3JlbCk7CisKKwkJCQl1ci0+cGxhbl9uYW1l ID0gcm9vdC0+cGxhbl9uYW1lOworCQkJCXVyLT5yZWxpZHMgPSB1bmlxdWVyZWwtPnJlbGlkczsK KwkJCQlwcHMtPnNqX3VuaXF1ZV9yZWxzID0gbGFwcGVuZChwcHMtPnNqX3VuaXF1ZV9yZWxzLCB1 cik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBHZXQgb3VyIHByaXZhdGUgc3RhdGUgaW5mb3JtYXRp b24gZm9yIHRoaXMgam9pbi4gKi8KKwlwanMgPSBwZ3BhX2dldF9qb2luX3N0YXRlKHJvb3QsIGpv aW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCk7CisKKwkvKiBJZiB0aGVyZSBpcyByZWxldmFudCBh ZHZpY2UsIGNhbGwgYSBoZWxwZXIgZnVuY3Rpb24gdG8gYXBwbHkgaXQuICovCisJaWYgKHBqcyAh PSBOVUxMKQorCXsKKwkJdWludDY0CQlvcmlnaW5hbF9tYXNrID0gZXh0cmEtPnBnc19tYXNrOwor CisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKGpvaW50eXBlLAorCQkJCQkJ CQkJCQkmZXh0cmEtPnBnc19tYXNrLAorCQkJCQkJCQkJCQlyb290LT5wbGFuX25hbWUsCisJCQkJ CQkJCQkJCXBqcyk7CisKKwkJLyogRW1pdCBkZWJ1Z2dpbmcgbWVzc2FnZSwgaWYgZW5hYmxlZC4g Ki8KKwkJaWYgKHBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2sgJiYgb3JpZ2luYWxfbWFzayAhPSBl eHRyYS0+cGdzX21hc2spCisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJtc2coInN0cmF0 ZWd5IG1hc2sgZm9yICVzIGpvaW4gb24gJXMgd2l0aCBvdXRlciAlcyBhbmQgaW5uZXIgJXMgY2hh bmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJCQkJcGdwYV9qb2lu dHlwZV90b19jc3RyaW5nKGpvaW50eXBlKSwKKwkJCQkJCQlwZ3BhX2Jtc190b19jc3RyaW5nKGpv aW5yZWwtPnJlbGlkcyksCisJCQkJCQkJcGdwYV9ibXNfdG9fY3N0cmluZyhvdXRlcnJlbC0+cmVs aWRzKSwKKwkJCQkJCQlwZ3BhX2Jtc190b19jc3RyaW5nKGlubmVycmVsLT5yZWxpZHMpLAorCQkJ CQkJCW9yaWdpbmFsX21hc2ssCisJCQkJCQkJZXh0cmEtPnBnc19tYXNrKSkpOworCX0KKworCS8q IFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2pvaW5fcGF0aF9zZXR1 cCkKKwkJKCpwcmV2X2pvaW5fcGF0aF9zZXR1cCkgKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBp bm5lcnJlbCwKKwkJCQkJCQkJIGpvaW50eXBlLCBleHRyYSk7Cit9CisKKy8qCisgKiBTZWFyY2gg Zm9yIGFkdmljZSBwZXJ0YWluaW5nIHRvIGEgcHJvcG9zZWQgam9pbi4KKyAqLworc3RhdGljIHBn cGFfam9pbl9zdGF0ZSAqCitwZ3BhX2dldF9qb2luX3N0YXRlKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQlSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5m byAqaW5uZXJyZWwpCit7CisJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisJcGdwYV9qb2luX3N0 YXRlICpwanM7CisJYm9vbAkJbmV3X3BqcyA9IGZhbHNlOworCisJLyogRmV0Y2ggb3VyIHByaXZh dGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJfc2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQ bGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25f aWQpOworCWlmIChwcHMgPT0gTlVMTCB8fCBwcHMtPnRyb3ZlID09IE5VTEwpCisJeworCQkvKiBO byBhZHZpY2UgYXBwbGllcyB0byB0aGlzIHF1ZXJ5LCBoZW5jZSBub25lIHRvIHRoaXMgam9pbnJl bC4gKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBTZWUgd2hldGhlciB3ZSd2ZSBw cmV2aW91c2x5IGFzc29jaWF0ZWQgYSBwZ3BhX2pvaW5fc3RhdGUgd2l0aCB0aGlzCisJICogam9p bnJlbC4gSWYgd2UgaGF2ZSBub3QsIHdlIG5lZWQgdG8gdHJ5IHRvIGNvbnN0cnVjdCBvbmUuIElm IHdlIGhhdmUsCisJICogdGhlbiB0aGVyZSBhcmUgdHdvIGNhc2VzOiAoYSkgaWYgaW5uZXJyZWwg YW5kIG91dGVycmVsIGFyZSB1bmNoYW5nZWQsCisJICogd2UgY2FuIHNpbXBseSB1c2UgaXQsIGFu ZCAoYikgaWYgdGhleSBoYXZlIGNoYW5nZWQsIHdlIG5lZWQgdG8gcmVqaWdnZXIKKwkgKiB0aGUg YXJyYXkgb2YgaWRlbnRpZmllcnMgYnV0IGNhbiBzdGlsbCBza2lwIHRoZSB0cm92ZSBsb29rdXAu CisJICovCisJcGpzID0gR2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5u ZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocGpzICE9IE5VTEwpCisJeworCQlpZiAocGpzLT5qb2lu X2luZGV4ZXMgPT0gTlVMTCAmJiBwanMtPnJlbF9pbmRleGVzID09IE5VTEwpCisJCXsKKwkJCS8q CisJCQkgKiBJZiB0aGVyZSdzIG5vIHBvdGVudGlhbGx5IHJlbGV2YW50IGFkdmljZSwgdGhlbiB0 aGUgcHJlc2VuY2Ugb2YKKwkJCSAqIHRoaXMgcGdwYV9qb2luX3N0YXRlIGFjdHMgbGlrZSBhIG5l Z2F0aXZlIGNhY2hlIGVudHJ5OiBpdCB0ZWxscworCQkJICogdXMgbm90IHRvIGJvdGhlciBzZWFy Y2hpbmcgdGhlIHRyb3ZlIGZvciBhZHZpY2UsIGJlY2F1c2Ugd2UKKwkJCSAqIHdpbGwgbm90IGZp bmQgYW55LgorCQkJICovCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChwanMtPm91dGVy cmVsID09IG91dGVycmVsICYmIHBqcy0+aW5uZXJyZWwgPT0gaW5uZXJyZWwpCisJCXsKKwkJCS8q IE5vIHVwZGF0ZXMgcmVxdWlyZWQsIHNvIGp1c3QgcmV0dXJuLiAqLworCQkJLyogWFhYLiBEb2Vz IHRoaXMgbmVlZCB0byBkbyBzb21ldGhpbmcgZGlmZmVyZW50IHVuZGVyIEdFUU8/ICovCisJCQly ZXR1cm4gcGpzOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIHBncGFfam9pbl9z dGF0ZSB5ZXQsIHdlIG5lZWQgdG8gYWxsb2NhdGUgb25lLiBUcm92ZSBrZXlzCisJICogd2lsbCBu b3QgZ2V0IGJ1aWx0IGZvciBSVEVfSk9JTiBSVEVzLCBzbyB0aGUgYXJyYXkgbWF5IGVuZCB1cCBi ZWluZworCSAqIGxhcmdlciB0aGFuIG5lZWRlZC4gSXQncyBub3Qgd29ydGggdHJ5aW5nIHRvIGNv bXB1dGUgYSBwZXJmZWN0bHkKKwkgKiBhY2N1cmF0ZSBjb3VudCBoZXJlLgorCSAqLworCWlmIChw anMgPT0gTlVMTCkKKwl7CisJCWludAkJCXBlc3NpbWlzdGljX2NvdW50ID0gYm1zX251bV9tZW1i ZXJzKGpvaW5yZWwtPnJlbGlkcyk7CisKKwkJcGpzID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2lu X3N0YXRlKTsKKwkJcGpzLT5yaWRzID0gcGFsbG9jX2FycmF5KHBncGFfaWRlbnRpZmllciwgcGVz c2ltaXN0aWNfY291bnQpOworCQluZXdfcGpzID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIEVpdGhl ciB3ZSBqdXN0IGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pvaW5fc3RhdGUsIG9yIHRoZSBleGlzdGlu ZyBvbmUKKwkgKiBuZWVkcyByZWNvbmZpZ3VyaW5nIGZvciBhIG5ldyBpbm5lcnJlbCBhbmQgb3V0 ZXJyZWwuIFRoZSByZXF1aXJlZCBhcnJheQorCSAqIHNpemUgY2FuJ3QgY2hhbmdlLCBzbyB3ZSBj YW4gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBvbmUuCisJICovCisJcGpzLT5vdXRlcnJlbCA9IG91 dGVycmVsOworCXBqcy0+aW5uZXJyZWwgPSBpbm5lcnJlbDsKKwlwanMtPm91dGVyX2NvdW50ID0K KwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlkcyhyb290LCBvdXRlcnJlbC0+cmVs aWRzLCBwanMtPnJpZHMpOworCXBqcy0+aW5uZXJfY291bnQgPQorCQlwZ3BhX2NvbXB1dGVfaWRl bnRpZmllcnNfYnlfcmVsaWRzKHJvb3QsIGlubmVycmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJICAg cGpzLT5yaWRzICsgcGpzLT5vdXRlcl9jb3VudCk7CisKKwkvKgorCSAqIElmIHdlIGFsbG9jYXRl ZCBhIG5ldyBwZ3BhX2pvaW5fc3RhdGUsIHNlYXJjaCBvdXIgdHJvdmUgb2YgYWR2aWNlIGZvcgor CSAqIHJlbGV2YW50IGVudHJpZXMuIFRoZSB0cm92ZSBsb29rdXAgd2lsbCByZXR1cm4gdGhlIHNh bWUgcmVzdWx0cyBmb3IKKwkgKiBldmVyeSBvdXRlcnJlbC9pbm5lcnJlbCBjb21iaW5hdGlvbiwg c28gd2UgZG9uJ3QgbmVlZCB0byByZXBlYXQgdGhhdAorCSAqIHdvcmsgZXZlcnkgdGltZS4KKwkg Ki8KKwlpZiAobmV3X3BqcykKKwl7CisJCXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHQ7CisKKwkJ LyogRmluZCBqb2luIGVudHJpZXMuICovCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUs IFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJCQkJCQkgIHBqcy0+b3V0ZXJfY291bnQgKyBwanMt PmlubmVyX2NvdW50LAorCQkJCQkJICBwanMtPnJpZHMsICZ0cmVzdWx0KTsKKwkJcGpzLT5qb2lu X2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7CisJCXBqcy0+am9pbl9pbmRleGVzID0gdHJlc3Vs dC5pbmRleGVzOworCisJCS8qIEZpbmQgcmVsIGVudHJpZXMuICovCisJCXBncGFfdHJvdmVfbG9v a3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1JFTCwKKwkJCQkJCSAgcGpzLT5vdXRl cl9jb3VudCArIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkgIHBqcy0+cmlkcywgJnRyZXN1bHQp OworCQlwanMtPnJlbF9lbnRyaWVzID0gdHJlc3VsdC5lbnRyaWVzOworCQlwanMtPnJlbF9pbmRl eGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIE5vdyB0aGF0IHRoZSBuZXcgcGdwYV9qb2lu X3N0YXRlIGlzIGZ1bGx5IHZhbGlkLCBzYXZlIGEgcG9pbnRlci4gKi8KKwkJU2V0UmVsT3B0SW5m b0V4dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwanMpOworCisJ CS8qCisJCSAqIElmIHRoZXJlIHdhcyBubyByZWxldmFudCBhZHZpY2UgZm91bmQsIGp1c3QgcmV0 dXJuIE5VTEwuIFRoaXMKKwkJICogcGdwYV9qb2luX3N0YXRlIHdpbGwgc3RpY2sgYXJvdW5kIGFz IGEgc29ydCBvZiBuZWdhdGl2ZSBjYWNoZQorCQkgKiBlbnRyeSwgc28gdGhhdCBmdXR1cmUgY2Fs bHMgZm9yIHRoaXMgc2FtZSBqb2lucmVsIHF1aWNrbHkgcmV0dXJuCisJCSAqIE5VTEwuCisJCSAq LworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVMTCAmJiBwanMtPnJlbF9pbmRleGVzID09 IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcGpzOworfQorCisvKgorICog RW5mb3JjZSBvdmVyYWxsIHJlc3RyaWN0aW9ucyBvbiBhIGpvaW4gcmVsYXRpb24gdGhhdCBhcHBs eSB1bmlmb3JtbHkKKyAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGNob2ljZSBvZiBpbm5lciBhbmQgb3V0 ZXIgcmVsLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2 aWNlKHVpbnQ2NCAqcGdzX21hc2tfcCwgY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkgIHBncGFf am9pbl9zdGF0ZSAqcGpzKQoreworCWludAkJCWkgPSAtMTsKKwlpbnQJCQlmbGFnczsKKwlib29s CQlnYXRoZXJfY29uZmxpY3QgPSBmYWxzZTsKKwl1aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwlC aXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFwc2V0ICAqZ2F0 aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWJvb2wJCXBhcnRpdGlvbndpc2VfY29uZmxpY3QgPSBm YWxzZTsKKwlpbnQJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgPSAwOworCUJpdG1hcHNldCAgKnBh cnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFwc2V0ICAqcGFydGl0aW9u d2lzZV9mdWxsX21hdGNoID0gTlVMTDsKKworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgcG9zc2libHkt cmVsZXZhbnQgYWR2aWNlLiAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwanMtPnJl bF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBq cy0+cmVsX2VudHJpZXNbaV07CisJCXBncGFfaXRtX3R5cGUgaXRtOworCQlib29sCQlmdWxsX21h dGNoID0gZmFsc2U7CisJCXVpbnQ2NAkJbXlfZ2F0aGVyX21hc2sgPSAwOworCQlpbnQJCQlteV9w YXJ0aXRpb253aXNlX291dGNvbWUgPSAwOwkvKiA+MCB5ZXMsIDwwIG5vICovCisKKwkJLyoKKwkJ ICogRm9yIEdBVEhFUiBhbmQgR0FUSEVSX01FUkdFLCBpZiB0aGUgc3BlY2lmaWVkIHJlbGF0aW9u cyBleGFjdGx5CisJCSAqIG1hdGNoIHRoaXMgam9pbnJlbCwgZG8gd2hhdGV2ZXIgdGhlIGFkdmlj ZSBzYXlzOyBvdGhlcndpc2UsIGRvbid0CisJCSAqIGFsbG93IEdhdGhlciBvciBHYXRoZXIgTWVy Z2UgYXQgdGhpcyBsZXZlbC4gRm9yIE5PX0dBVEhFUiwgdGhlcmUKKwkJICogbXVzdCBiZSBhIHNp bmdsZSB0YXJnZXQgcmVsYXRpb24gd2hpY2ggbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGlzCisJCSAq IGpvaW5yZWwsIHNvIGp1c3QgZG9uJ3QgYWxsb3cgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBoZXJl LCBmdWxsCisJCSAqIHN0b3AuCisJCSAqLworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19O T19HQVRIRVIpCisJCXsKKwkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJCQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWludAkJCXRv dGFsX2NvdW50OworCisJCQl0b3RhbF9jb3VudCA9IHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlu bmVyX2NvdW50OworCQkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQodG90YWxf Y291bnQsIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJCWVudHJ5LT50YXJnZXQpOworCQkJQXNzZXJ0 KGl0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFV QUwpCisJCQl7CisJCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCQkJaWYgKGVudHJ5LT50YWcgPT0g UEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0g MTsKKwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUikKKwkJCQkJbXlf Z2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSOworCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQ QV9UQUdfR0FUSEVSX01FUkdFKQorCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVJfTUVS R0U7CisJCQkJZWxzZQorCQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBhZHZpY2UgdGFnOiAl ZCIsCisJCQkJCQkgKGludCkgZW50cnktPnRhZyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ aWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCQl7CisJCQkJCW15 X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IC0xOworCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19D T05TSURFUl9OT05QQVJUSUFMOworCQkJCX0KKwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBH UEFfVEFHX0dBVEhFUiB8fAorCQkJCQkJIGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSX01F UkdFKQorCQkJCXsKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJCQkJCW15 X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQkJfQorCQkJCWVsc2UK KwkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYWR2aWNlIHRhZzogJWQiLAorCQkJCQkJIChp bnQpIGVudHJ5LT50YWcpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYgd2Ugc2V0IG15X2dh dGhlcl9tYXNrIHVwIGFib3ZlLCB0aGVuIHdlICgxKSBtYWtlIGEgbm90ZSBpZiB0aGUKKwkJICog YWR2aWNlIGNvbmZsaWN0ZWQsICgyKSByZW1lbWJlciB0aGUgbWFzayB2YWx1ZSwgYW5kICgzKSBy ZW1lbWJlcgorCQkgKiB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsIG1hdGNoLgor CQkgKi8KKwkJaWYgKG15X2dhdGhlcl9tYXNrICE9IDApCisJCXsKKwkJCWlmIChnYXRoZXJfbWFz ayAhPSAwICYmIGdhdGhlcl9tYXNrICE9IG15X2dhdGhlcl9tYXNrKQorCQkJCWdhdGhlcl9jb25m bGljdCA9IHRydWU7CisJCQlnYXRoZXJfbWFzayA9IG15X2dhdGhlcl9tYXNrOworCQkJaWYgKGZ1 bGxfbWF0Y2gpCisJCQkJZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJf ZnVsbF9tYXRjaCwgaSk7CisJCQllbHNlCisJCQkJZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBibXNf YWRkX21lbWJlcihnYXRoZXJfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKworCQkvKgorCQkgKiBM aWtld2lzZSwgaWYgd2Ugc2V0IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSB1cCBhYm92ZSwgdGhl biB3ZSAoMSkKKwkJICogbWFrZSBhIG5vdGUgaWYgdGhlIGFkdmljZSBjb25mbGljdGVkLCAoMikg cmVtZW1iZXIgd2hhdCB0aGUgZGVzaXJlZAorCQkgKiBvdXRjb21lIHdhcywgYW5kICgzKSByZW1l bWJlciB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsCisJCSAqIG1hdGNoLgorCQkg Ki8KKwkJaWYgKG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwKQorCQl7CisJCQlpZiAocGFy dGl0aW9ud2lzZV9vdXRjb21lICE9IDAgJiYKKwkJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgIT0g bXlfcGFydGl0aW9ud2lzZV9vdXRjb21lKQorCQkJCXBhcnRpdGlvbndpc2VfY29uZmxpY3QgPSB0 cnVlOworCQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0gbXlfcGFydGl0aW9ud2lzZV9vdXRjb21l OworCQkJaWYgKGZ1bGxfbWF0Y2gpCisJCQkJcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoID0KKwkJ CQkJYm1zX2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBpKTsKKwkJCWVsc2UK KwkJCQlwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPQorCQkJCQlibXNfYWRkX21lbWJlcihw YXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisJfQorCisJLyoKKwkgKiBNYXJr IGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBwYXJ0aWFsbHkgbWF0Y2hl ZCwgYW5kIGlmCisJICogdGhlIHNldCBvZiB0YXJnZXRzIGV4YWN0bHkgbWF0Y2hlZCB0aGlzIHJl bGF0aW9uLCBmdWxseSBtYXRjaGVkLiBJZgorCSAqIHRoZXJlIHdhcyBhIGNvbmZsaWN0LCBtYXJr IHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9Q QVJUSUFMOworCWlmIChnYXRoZXJfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJ Q1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVyX3Bh cnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdw YV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVyX2Z1bGxfbWF0Y2gsIGZs YWdzKTsKKworCS8qIExpa2V3aXNlIGZvciBwYXJ0aXRpb253aXNlIGFkdmljZS4gKi8KKwlmbGFn cyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAocGFydGl0aW9ud2lzZV9jb25mbGljdCkK KwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhw anMtPnJlbF9lbnRyaWVzLCBwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlm bGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5y ZWxfZW50cmllcywgcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKgorCSAq IEVuZm9yY2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBHYXRoZXIvR2F0aGVyIE1lcmdlLiAgT25seSBj bGVhciBiaXRzIGhlcmUsCisJICogc28gdGhhdCB3ZSBzdGlsbCByZXNwZWN0IHRoZSBlbmFibGVf KiBHVUNzLiBEbyBub3RoaW5nIGlmIHRoZSBhZHZpc2UKKwkgKiBjb25mbGljdHMuCisJICovCisJ LyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNpZmljYXRpb24sIGVu Zm9yY2UgaXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkK Kwl7CisJCXVpbnQ2NAkJYWxsX2dhdGhlcl9tYXNrOworCisJCWFsbF9nYXRoZXJfbWFzayA9CisJ CQlQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFM OworCQkqcGdzX21hc2tfcCAmPSB+KGFsbF9nYXRoZXJfbWFzayAmIH5nYXRoZXJfbWFzayk7CisJ fQorCisJLyoKKwkgKiBBcyBhYm92ZSwgYnV0IGZvciBwYXJ0aXRpb253aXNlIGFkdmljZS4KKwkg KgorCSAqIFRvIGluZHVjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiwgd2UgZGlzYWJsZSBhbGwgdGhl IG9yZGluYXJ5IG1lYW5zIG9mCisJICogcGVyZm9ybWluZyBhIGpvaW4sIHNvIHRoYXQgYW4gQXBw ZW5kIG9yIE1lcmdlQXBwZW5kIHBhdGggd2lsbCBob3BlZnVsbHkKKwkgKiBiZSBjaG9zZW4uCisJ ICoKKwkgKiBUbyBwcmV2ZW50IG9uZSwgd2UganVzdCBkaXNhYmxlIEFwcGVuZCBhbmQgTWVyZ2VB cHBlbmQuICBOb3RlIHRoYXQgd2UKKwkgKiBtdXN0IG5vdCB1bnNldCBQR1NfQ09OU0lERVJfUEFS VElUSU9OV0lTRSBldmVuIHdoZW4gd2UgZG9uJ3Qgd2FudCBhCisJICogcGFydGl0aW9ud2lzZSBq b2luIGhlcmUsIGJlY2F1c2Ugd2UgbWlnaHQgd2FudCBvbmUgYXQgYSBoaWdoZXIgbGV2ZWwKKwkg KiB0aGF0IGlzIGNvbnN0cnVjdGluZyB1c2luZyBwYXRocyBmcm9tIHRoaXMgbGV2ZWwuCisJICov CisJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwICYmICFwYXJ0aXRpb253aXNlX2NvbmZs aWN0KQorCXsKKwkJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSA+IDApCisJCQkqcGdzX21hc2tf cCA9ICgqcGdzX21hc2tfcCAmIH5QR1NfSk9JTl9BTlkpOworCQllbHNlCisJCQkqcGdzX21hc2tf cCAmPSB+KFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EKTsKKwl9Cit9CisKKy8qCisgKiBF bmZvcmNlIHJlc3RyaWN0aW9ucyBvbiB0aGUgam9pbiBvcmRlciBvciBqb2luIG1ldGhvZC4KKyAq Lworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpvaW5U eXBlIGpvaW50eXBlLCB1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQljaGFyICpwbGFuX25h bWUsCisJCQkJCQkJCQlwZ3BhX2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0gLTE7CisJ Qml0bWFwc2V0ICAqam9fcGVybWl0X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmpvX2Rl bnlfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqam9fZGVueV9yZWxfaW5kZXhlcyA9IE5V TEw7CisJQml0bWFwc2V0ICAqam1faW5kZXhlcyA9IE5VTEw7CisJYm9vbAkJam1fY29uZmxpY3Qg PSBmYWxzZTsKKwl1aW50MzIJCWpvaW5fbWFzayA9IDA7CisJQml0bWFwc2V0ICAqc2pfcGVybWl0 X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKnNqX2RlbnlfaW5kZXhlcyA9IE5VTEw7CisK KwkvKgorCSAqIFJlY29uc2lkZXIgUEFSVElUSU9OV0lTRSguLi4pIGFkdmljZS4KKwkgKgorCSAq IFdlIGFscmVhZHkgdGhvdWdodCBhYm91dCB0aGlzIGZvciB0aGUgam9pbnJlbCBhcyBhIHdob2xl LCBidXQgaW4gc29tZQorCSAqIGNhc2VzLCBwYXJ0aXRpb253aXNlIGFkdmljZSBjYW4gYWxzbyBj b25zdHJhaW4gdGhlIGpvaW4gb3JkZXIuIEZvcgorCSAqIGluc3RhbmNlLCBpZiB0aGUgYWR2aWNl IHNheXMgUEFSVElUSU9OV0lTRSgodDEgdDIpKSwgd2Ugc2hvdWxkbid0IGJ1aWxkCisJICogam9p biBwYXRocyBmb3IgYSBhbnkgam9pbnJlbCB0aGF0IGluY2x1ZGVzIHQxIG9yIHQyIHVubGVzcyBp dCBhbHNvCisJICogaW5jbHVkZXMgdGhlIG90aGVyLiBJbiBnZW5lcmFsLCB0aGUgcGFyaXRpb253 aXNlIG9wZXJhdGlvbiBtdXN0IGhhdmUKKwkgKiBhbHJlYWR5IGJlZW4gY29tcGxldGVkIHdpdGhp biBvbmUgc2lkZSBvZiB0aGUgY3VycmVudCBqb2luIG9yIHRoZQorCSAqIG90aGVyLCBlbHNlIHRo ZSBqb2luIG9yZGVyIGlzIGltcGVybWlzc2libGUuCisJICoKKwkgKiBOQjogSXQgbWlnaHQgc2Vl bSB0ZW1wdGluZyB0byB0cnkgdG8gZGVhbCB3aXRoIFBBUlRJVElPTldJU0UgYWR2aXNlCisJICog ZW50aXJlbHkgaW4gdGhpcyBmdW5jdGlvbiwgYnV0IHRoYXQgZG9lc24ndCB3b3JrLiBIZXJlLCB3 ZSBjYW4gb25seQorCSAqIGFmZmVjdCB0aGUgcGdzX21hc2sgd2l0aGluIGEgcGFydGljdWxhciBK b2luUGF0aEV4dHJhRGF0YSwgdGhhdCBpcywgZm9yCisJICogYSBwYXJ0aWN1bGFyIGNob2ljZSBv ZiBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFBhcnRpdGlvbndpc2UgcGF0aHMgYXJlCisJICogbm90 IGJ1aWx0IHRoYXQgd2F5LCBzbyB3ZSBtdXN0IHNldCBwZ3NfbWFzayBmb3IgdGhlIFJlbE9wdElu Zm8sIHdoaWNoCisJICogaXMgYmVzdCBkb25lIGluIHBncGFfcGxhbm5lcl9hcHBseV9qb2lucmVs X2FkdmljZS4KKwkgKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGpzLT5yZWxfaW5k ZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZwanMtPnJl bF9lbnRyaWVzW2ldOworCQlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsKKwkJcGdwYV9pdG1fdHlw ZSBvdXRlcl9pdG07CisKKwkJaWYgKGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfUEFSVElUSU9OV0lT RSkKKwkJCWNvbnRpbnVlOworCisJCW91dGVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hf dGFyZ2V0KHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkgIHBqcy0+cmlkcywgZW50cnkt PnRhcmdldCk7CisJCWlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwKKwkJCW91dGVy X2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCQljb250aW51ZTsKKworCQlp bm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChwanMtPmlubmVyX2NvdW50 LAorCQkJCQkJCQkJCQkJICBwanMtPnJpZHMgKyBwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJ CQkJICBlbnRyeS0+dGFyZ2V0KTsKKwkJaWYgKGlubmVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCB8 fAorCQkJaW5uZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJCWNvbnRp bnVlOworCisJCWpvX2RlbnlfcmVsX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X3Jl bF9pbmRleGVzLCBpKTsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgYWR2aWNlIHRoYXQgcGVydGFp bnMgdG8gdGhlIGpvaW4gb3JkZXIgYW5kIG1ldGhvZC4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChp ID0gYm1zX25leHRfbWVtYmVyKHBqcy0+am9pbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBn cGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBqcy0+am9pbl9lbnRyaWVzW2ldOworCQl1aW50MzIJ CW15X2pvaW5fbWFzazsKKworCQkvKiBIYW5kbGUgam9pbiBvcmRlciBhZHZpY2UuICovCisJCWlm IChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCXsKKwkJCWlmIChwZ3BhX2pv aW5fb3JkZXJfcGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSBwanMt PmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkgZW50cnkp KQorCQkJCWpvX3Blcm1pdF9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fcGVybWl0X2luZGV4 ZXMsIGkpOworCQkJZWxzZQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpv X2RlbnlfaW5kZXhlcywgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBqb2lu IG1ldGhvZCBhZHZpY2UuICovCisJCW15X2pvaW5fbWFzayA9IHBncGFfam9pbl9zdHJhdGVneV9t YXNrX2Zyb21fYWR2aWNlX3RhZyhlbnRyeS0+dGFnKTsKKwkJaWYgKG15X2pvaW5fbWFzayAhPSAw KQorCQl7CisJCQlib29sCQlwZXJtaXQ7CisJCQlib29sCQlyZXN0cmljdF9tZXRob2Q7CisKKwkJ CWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9JTikKKwkJCQlwZXJtaXQgPSBw Z3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJ CQkJCSAgIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5yaWRzLAorCQkJ CQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJCSAgICZyZXN0cmljdF9tZXRob2QpOwor CQkJZWxzZQorCQkJCXBlcm1pdCA9IHBncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luKHBqcy0+ b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJ CQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50cnksCisJCQkJCQkJCQkJCQkJ ICAgJnJlc3RyaWN0X21ldGhvZCk7CisJCQlpZiAoIXBlcm1pdCkKKwkJCQlqb19kZW55X2luZGV4 ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJZWxzZSBpZiAocmVz dHJpY3RfbWV0aG9kKQorCQkJeworCQkJCWptX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqbV9p bmRleGVzLCBpKTsKKwkJCQlpZiAoam9pbl9tYXNrICE9IDAgJiYgam9pbl9tYXNrICE9IG15X2pv aW5fbWFzaykKKwkJCQkJam1fY29uZmxpY3QgPSB0cnVlOworCQkJCWpvaW5fbWFzayA9IG15X2pv aW5fbWFzazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIHNlbWlqb2lu IHVuaXF1ZW5lc3MgYWR2aWNlLiAqLworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRU1J Sk9JTl9VTklRVUUgfHwKKwkJCWVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VO SVFVRSkKKwkJeworCQkJYm9vbAkJb3V0ZXJfc2lkZV9udWxsYWJsZTsKKwkJCWJvb2wJCXJlc3Ry aWN0X21ldGhvZDsKKworCQkJLyogUGxhbm5lciBoYXMgbnVsbGFibGUgc2lkZSBvZiB0aGUgc2Vt aWpvaW4gb24gdGhlIG91dGVyIHNpZGU/ICovCisJCQlvdXRlcl9zaWRlX251bGxhYmxlID0gKGpv aW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSIHx8CisJCQkJCQkJCSAgIGpvaW50eXBlID09IEpP SU5fUklHSFRfU0VNSSk7CisKKwkJCWlmICghcGdwYV9zZW1pam9pbl9wZXJtaXRzX2pvaW4ocGpz LT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJ cGpzLT5yaWRzLAorCQkJCQkJCQkJCQllbnRyeSwKKwkJCQkJCQkJCQkJb3V0ZXJfc2lkZV9udWxs YWJsZSwKKwkJCQkJCQkJCQkJJnJlc3RyaWN0X21ldGhvZCkpCisJCQkJam9fZGVueV9pbmRleGVz ID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWVsc2UgaWYgKHJlc3Ry aWN0X21ldGhvZCkKKwkJCXsKKwkJCQlib29sCQlhZHZpY2VfdW5pcXVlOworCQkJCWJvb2wJCWp0 X3VuaXF1ZTsKKwkJCQlib29sCQlqdF9ub25fdW5pcXVlOworCisJCQkJLyogQWR2aWNlIHdhbnRz IHRvIHVuaXF1ZS1pZnkgYW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCQlhZHZpY2VfdW5p cXVlID0gKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFKTsKKworCQkJCS8q IFBsYW5uZXIgaXMgdHJ5aW5nIHRvIHVuaXF1ZS1pZnkgYW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8g Ki8KKwkJCQlqdF91bmlxdWUgPSAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfSU5ORVIgfHwKKwkJ CQkJCQkgam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIpOworCisJCQkJLyogUGxhbm5lciBp cyB0cnlpbmcgYSBzZW1pLWpvaW4sIHdpdGhvdXQgdW5pcXVlLWlmeWluZz8gKi8KKwkJCQlqdF9u b25fdW5pcXVlID0gKGpvaW50eXBlID09IEpPSU5fU0VNSSB8fAorCQkJCQkJCQkgam9pbnR5cGUg PT0gSk9JTl9SSUdIVF9TRU1JKTsKKworCQkJCWlmICghanRfdW5pcXVlICYmICFqdF9ub25fdW5p cXVlKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgYSBz ZW1pam9pbiB0byB3aGljaCBTSl9VTklRVUUKKwkJCQkJICogb3IgU0pfTk9OX1VOSVFVRSBjYW4g YmUgYXBwbGllZC4KKwkJCQkJICovCisJCQkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX0lOQVBQ TElDQUJMRTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoYWR2aWNlX3VuaXF1ZSAhPSBqdF91bmlxdWUp CisJCQkJCXNqX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNqX2RlbnlfaW5kZXhlcywg aSk7CisJCQkJZWxzZQorCQkJCQlzal9wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNq X3Blcm1pdF9pbmRleGVzLCBpKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJLyoK KwkgKiBJZiB0aGUgYWR2aWNlIGluZGljYXRlcyBib3RoIHRoYXQgdGhpcyBqb2luIG9yZGVyIGlz IHBlcm1pc3NpYmxlIGFuZAorCSAqIGFsc28gdGhhdCBpdCBpc24ndCwgdGhlbiBtYXJrIGFkdmlj ZSByZWxhdGVkIHRvIHRoZSBqb2luIG9yZGVyIGFzCisJICogY29uZmxpY3RpbmcuCisJICovCisJ aWYgKGpvX3Blcm1pdF9pbmRleGVzICE9IE5VTEwgJiYKKwkJKGpvX2RlbnlfaW5kZXhlcyAhPSBO VUxMIHx8IGpvX2RlbnlfcmVsX2luZGV4ZXMgIT0gTlVMTCkpCisJeworCQlwZ3BhX3Ryb3ZlX3Nl dF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam9fcGVybWl0X2luZGV4ZXMsCisJCQkJCQkJIFBH UEFfVEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50 cmllcywgam9fZGVueV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwkJ cGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgam9fZGVueV9yZWxfaW5kZXhl cywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJfQorCisJLyoKKwkgKiBJZiBtb3Jl IHRoYW4gb25lIGpvaW4gbWV0aG9kIHNwZWNpZmljYXRpb24gaXMgcmVsZXZhbnQgaGVyZSBhbmQg dGhleQorCSAqIGRpZmZlciwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlp ZiAoam1fY29uZmxpY3QpCisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVz LCBqbV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKworCS8qIElmIHNl bWlqb2luIGFkdmljZSBzYXlzIGJvdGggeWVzIGFuZCBubywgbWFyayBpdCBhbGwgYXMgY29uZmxp Y3RpbmcuICovCisJaWYgKHNqX3Blcm1pdF9pbmRleGVzICE9IE5VTEwgJiYgc2pfZGVueV9pbmRl eGVzICE9IE5VTEwpCisJeworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmll cywgc2pfcGVybWl0X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCQlw Z3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgc2pfZGVueV9pbmRleGVzLAor CQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwl9CisKKwkvKgorCSAqIEVuZm9yY2UgcmVz dHJpY3Rpb25zIG9uIHRoZSBqb2luIG9yZGVyIGFuZCBqb2luIG1ldGhvZCwgYW5kIGFueQorCSAq IHNlbWlqb2luLXJlbGF0ZWQgcmVzdHJpY3Rpb25zLiBPbmx5IGNsZWFyIGJpdHMgaGVyZSwgc28g dGhhdCB3ZSBzdGlsbAorCSAqIHJlc3BlY3QgdGhlIGVuYWJsZV8qIEdVQ3MuIERvIG5vdGhpbmcg aW4gY2FzZXMgd2hlcmUgdGhlIGFkdmljZSBvbiBhCisJICogc2luZ2xlIHRvcGljIGNvbmZsaWN0 cy4KKwkgKi8KKwlpZiAoKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMIHx8IGpvX2RlbnlfcmVsX2lu ZGV4ZXMgIT0gTlVMTCkgJiYKKwkJam9fcGVybWl0X2luZGV4ZXMgPT0gTlVMTCkKKwkJKnBnc19t YXNrX3AgJj0gflBHU19KT0lOX0FOWTsKKwlpZiAoam9pbl9tYXNrICE9IDAgJiYgIWptX2NvbmZs aWN0KQorCQkqcGdzX21hc2tfcCAmPSB+KFBHU19KT0lOX0FOWSAmIH5qb2luX21hc2spOworCWlm IChzal9kZW55X2luZGV4ZXMgIT0gTlVMTCAmJiBzal9wZXJtaXRfaW5kZXhlcyA9PSBOVUxMKQor CQkqcGdzX21hc2tfcCAmPSB+UEdTX0pPSU5fQU5ZOworfQorCisvKgorICogVHJhbnNsYXRlIGFu IGFkdmljZSB0YWcgaW50byBhIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNrLgorICoKKyAq IFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIHRhZyB0eXBlcyB0aGF0IGRvbid0IHJl cHJlc2VudCBqb2luCisgKiBzdHJhdGVnaWVzLiBJbiBzdWNoIGNhc2VzLCB3ZSBqdXN0IHJldHVy biAwLCB3aGljaCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoCisgKiBhIHZhbGlkIG1hc2suCisgKi8K K3N0YXRpYyB1aW50NjQKK3BncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhw Z3BhX2FkdmljZV90YWdfdHlwZSB0YWcpCit7CisJc3dpdGNoICh0YWcpCisJeworCQljYXNlIFBH UEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBQR1NfRk9SRUlHTkpPSU47CisJCWNhc2Ug UEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiBQR1NfTUVSR0VKT0lOX1BMQUlO OworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdT X01FUkdFSk9JTl9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJ TjoKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfUExBSU47CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVE X0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX01BVEVSSUFMSVpFOwor CQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1cm4gUEdTX05FU1RM T09QX01FTU9JWkU7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJcmV0dXJuIFBHU19I QVNISk9JTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIERvZXMg YSBjZXJ0YWluIGl0ZW0gb2Ygam9pbiBvcmRlciBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2lu PworICovCitzdGF0aWMgYm9vbAorcGdwYV9qb2luX29yZGVyX3Blcm1pdHNfam9pbihpbnQgb3V0 ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpyaWRz LAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sKKwlib29sCQlsb29wID0gdHJ1 ZTsKKwlib29sCQlzdWJsaXN0ID0gZmFsc2U7CisJaW50CQkJbGVuZ3RoOworCWludAkJCW91dGVy X2xlbmd0aDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50YXJnZXQ7CisJ cGdwYV9hZHZpY2VfdGFyZ2V0ICpwcmVmaXhfdGFyZ2V0OworCisJLyogV2UgZGVmaW5pdGVseSBo YXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwll bnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJLyoKKwkgKiBGaW5kIHRo ZSBpbm5lcm1vc3Qgc3VibGlzdCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzOyBpZiBubyBzdWJsaXN0 IGRvZXMsCisJICogdGhlbiBjb250aW51ZSBwcm9jZXNzaW5nIHdpdGggdGhlIHRvcGxldmVsIGxp c3QuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFkdmljZSBzYXlzIEpPSU5fT1JERVIo dDEgdDIgKHQzIHQ0IHQ1KSksIHRoZW4gd2UKKwkgKiBzaG91bGQgZXZhbHVhdGUgam9pbnMgdGhh dCBvbmx5IGludm9sdmUgdDMsIHQ0LCBhbmQvb3IgdDUgYWdhaW5zdCB0aGUKKwkgKiAodDMgdDQg dDUpIHN1Ymxpc3QsIGFuZCBvdGhlcnMgYWdhaW5zdCB0aGUgZnVsbCBsaXN0LgorCSAqCisJICog Tm90ZSB0aGF0ICgxKSBvdXRlcm1vc3Qgc3VibGlzdCBpcyBhbHdheXMgb3JkZXJlZCBhbmQgKDIp IHdoZW5ldmVyIHdlCisJICogem9vbSBpbnRvIGFuIHVub3JkZXJlZCBzdWJsaXN0LCB3ZSBpbnN0 YW50bHkgYWNjZXB0IHRoZSBwcm9wb3NlZCBqb2luLgorCSAqIElmIHRoZSBhZHZpY2Ugc2F5cyBK T0lOX09SREVSKHQxIHQyIHt0MyB0NCB0NX0pLCBhbnkgYXBwcm9hY2ggdG8KKwkgKiBqb2luaW5n IHQzLCB0NCwgYW5kL29yIHQ1IGlzIGFjY2VwdGFibGUuCisJICovCisJd2hpbGUgKGxvb3ApCisJ eworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOwor CisJCWxvb3AgPSBmYWxzZTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGls ZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCXBncGFfaXRtX3R5cGUgaXRtOwor CisJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQor CQkJCWNvbnRpbnVlOworCisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChv dXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJcmlkcywgY2hpbGRfdGFyZ2V0 KTsKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwgaXRtID09IFBHUEFfSVRNX0tFWVNf QVJFX1NVQlNFVCkKKwkJCXsKKwkJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RB UkdFVF9PUkRFUkVEX0xJU1QpCisJCQkJeworCQkJCQl0YXJnZXQgPSBjaGlsZF90YXJnZXQ7CisJ CQkJCXN1Ymxpc3QgPSB0cnVlOworCQkJCQlsb29wID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBH UEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKTsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJ fQorCQl9CisJfQorCisJLyoKKwkgKiBUcnkgdG8gZmluZCBhIHByZWZpeCBvZiB0aGUgc2VsZWN0 ZWQgam9pbiBvcmRlciBsaXN0IHRoYXQgaXMgZXhhY3RseQorCSAqIGVxdWFsIHRvIHRoZSBvdXRl ciBzaWRlIG9mIHRoZSBwcm9wb3NlZCBqb2luLgorCSAqLworCWxlbmd0aCA9IGxpc3RfbGVuZ3Ro KHRhcmdldC0+Y2hpbGRyZW4pOworCXByZWZpeF90YXJnZXQgPSBwYWxsb2MwX29iamVjdChwZ3Bh X2FkdmljZV90YXJnZXQpOworCXByZWZpeF90YXJnZXQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JE RVJFRF9MSVNUOworCWZvciAob3V0ZXJfbGVuZ3RoID0gMTsgb3V0ZXJfbGVuZ3RoIDw9IGxlbmd0 aDsgKytvdXRlcl9sZW5ndGgpCisJeworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQkvKiBBdm9p ZCBsZWFraW5nIG1lbW9yeSBpbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4gKi8KKwkJaWYgKHByZWZp eF90YXJnZXQtPmNoaWxkcmVuICE9IE5VTEwpCisJCQlsaXN0X2ZyZWUocHJlZml4X3RhcmdldC0+ Y2hpbGRyZW4pOworCQlwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbiA9IGxpc3RfY29weV9oZWFkKHRh cmdldC0+Y2hpbGRyZW4sCisJCQkJCQkJCQkJCQkgb3V0ZXJfbGVuZ3RoKTsKKworCQkvKiBTZWFy Y2gsIGhvcGluZyB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiAqLworCQlpdG0gPSBwZ3BhX2lkZW50 aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwgcmlkcywgcHJlZml4X3RhcmdldCk7CisJ CWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiB0 aGUgcHJlZml4IG9mIHRoZSBqb2luIG9yZGVyIGxpc3QgdGhhdCB3ZSdyZSBjb25zaWRlcmluZwor CQkgKiBpbmNsdWRlcyBzb21lIGJ1dCBub3QgYWxsIG9mIHRoZSBvdXRlciByZWxzLCB3ZSBjYW4g bWFrZSB0aGUgcHJlZml4CisJCSAqIGxvbmdlciB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiBCdXQg dGhlIGFkdmljZSBoYXNuJ3QgbWVudGlvbmVkCisJCSAqIGV2ZXJ5dGhpbmcgdGhhdCdzIHBhcnQg b2Ygb3VyIG91dGVyIHJlbCB5ZXQsIGJ1dCBoYXMgbWVudGlvbmVkCisJCSAqIHRoaW5ncyB0aGF0 IGFyZSBub3QsIHRoZW4gdGhpcyBqb2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGpvaW4gb3JkZXIKKwkJ ICogbGlzdC4KKwkJICovCisJCWlmIChpdG0gIT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VU KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogSWYgdGhlIHByZXZpb3VzIGxvb3Bl ZCBzdG9wcGVkIGJlZm9yZSB0aGUgcHJlZml4X3RhcmdldCBpbmNsdWRlZCB0aGUKKwkgKiBlbnRp cmUgam9pbiBvcmRlciBsaXN0LCB0aGVuIHRoZSBuZXh0IG1lbWJlciBvZiB0aGUgam9pbiBvcmRl ciBsaXN0CisJICogbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBqb2lu LgorCSAqCisJICogRXhhbXBsZTogR2l2ZW4gSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwg aWYgdGhlIG91dGVyIHNpZGUgb2YgdGhlCisJICogY3VycmVudCBqb2luIGluY2x1ZGVzIG9ubHkg dDEsIHRoZW4gdGhlIGlubmVyIHNpZGUgbXVzdCBiZSBleGFjdGx5IHQyOworCSAqIGlmIHRoZSBv dXRlciBzaWRlIGluY2x1ZGVzIGJvdGggdDEgYW5kIHQyLCB0aGVuIHRoZSBpbm5lciBzaWRlIG11 c3QKKwkgKiBpbmNsdWRlIGV4YWN0bHkgdDMsIHQ0LCBhbmQgdDUuCisJICovCisJaWYgKG91dGVy X2xlbmd0aCA8IGxlbmd0aCkKKwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAqaW5uZXJfdGFyZ2V0 OworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQlpbm5lcl90YXJnZXQgPSBsaXN0X250aCh0YXJn ZXQtPmNoaWxkcmVuLCBvdXRlcl9sZW5ndGgpOworCisJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNf bWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50LCByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJ CWlubmVyX3RhcmdldCk7CisKKwkJLyoKKwkJICogQmVmb3JlIHJldHVybmluZywgY29uc2lkZXIg d2hldGhlciB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBlbnRyeSBhcworCQkgKiBmdWxseSBtYXRjaGVk LiBJZiB3ZSdyZSBjb25zaWRlcmluZyB0aGUgZnVsbCBsaXN0IHJhdGhlciB0aGFuIGEKKwkJICog c3VibGlzdCwgYW5kIGlmIHdlIGZvdW5kIGV2ZXJ5IGl0ZW0gYnV0IG9uZSBvbiB0aGUgb3V0ZXIg c2lkZSBvZgorCQkgKiB0aGUgam9pbiBhbmQgdGhlIGxhc3QgaXRlbSBvbiB0aGUgaW5uZXIgc2lk ZSBvZiB0aGUgam9pbiwgdGhlbiB0aGUKKwkJICogYW5zd2VyIGlzIHllcy4KKwkJICovCisJCWlm ICghc3VibGlzdCAmJiBvdXRlcl9sZW5ndGggKyAxID09IGxlbmd0aCAmJiBpdG0gPT0gUEdQQV9J VE1fRVFVQUwpCisJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCisJCXJl dHVybiAoaXRtID09IFBHUEFfSVRNX0VRVUFMKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdldCBo ZXJlLCB0aGVuIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIGluY2x1ZGVzIHRoZSBlbnRpcmV0 eQorCSAqIG9mIHRoZSBqb2luIG9yZGVyIGxpc3QuIEluIHRoaXMgY2FzZSwgd2UgYmVoYXZlIGRp ZmZlcmVudGx5IGRlcGVuZGluZworCSAqIG9uIHdoZXRoZXIgd2UncmUgbG9va2luZyBhdCB0aGUg dG9wLWxldmVsIGpvaW4gb3JkZXIgbGlzdCBvciBzdWJsaXN0LgorCSAqIEF0IHRoZSB0b3AtbGV2 ZWwsIHdlIHRyZWF0IHRoZSBzcGVjaWZpZWQgbGlzdCBhcyBtYW5kYXRpbmcgdGhhdCB0aGUKKwkg KiBhY3R1YWwgam9pbiBvcmRlciBoYXMgdGhlIGdpdmVuIGxpc3QgYXMgYSBwcmVmaXgsIGJ1dCBh IHN1Ymxpc3QKKwkgKiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaC4KKwkgKgorCSAqIEV4bWFwbGU6 IEdpdmVuIEpPSU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHdlIG11c3Qgc3RhcnQgYnkgam9p bmluZworCSAqIGFsbCBmaXZlIG9mIHRob3NlIHJlbGF0aW9ucyBhbmQgaW4gdGhhdCBzZXF1ZW5j ZSwgYnV0IG9uY2UgdGhhdCBpcworCSAqIGRvbmUsIGl0J3MgT0sgdG8gam9pbiBhbnkgb3RoZXIg cmVscyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBqb2luIHByb2JsZW0uCisJICogVGhpcyBhbGxvd3Mg YSB1c2VyIHRvIHNwZWNpZnkgdGhlIGRyaXZpbmcgdGFibGUgYW5kIHBlcmhhcHMgdGhlIGZpcnN0 CisJICogZmV3IHRoaW5ncyB0byB3aGljaCBpdCBzaG91bGQgYmUgam9pbmVkIHdoaWxlIGxlYXZp bmcgdGhlIHJlc3Qgb2YgdGhlCisJICogam9pbiBvcmRlciB1cCB0aGUgb3B0aW1pemVyLiBCdXQg aXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBiZSBzdXJwcmlzaW5nLAorCSAqIGdpdmVuIHRoYXQgc3Bl Y2lmaWNhdGlvbiwgaWYgdGhlIHVzZXIgY291bGQgYWRkIHQ2IHRvIHRoZSAodDMgdDQgdDUpCisJ ICogc3ViLWpvaW4sIHNvIHdlIGRvbid0IGFsbG93IHRoYXQuIElmIHdlIGRpZCB3YW50IHRvIGFs bG93IGl0LCB0aGUgbG9naWMKKwkgKiBlYXJsaWVyIGluIHRoaXMgZnVuY3Rpb24gd291bGQgcmVx dWlyZSBzdWJzdGFudGlhbCBhZGp1c3RtZW50OiB3ZSBjb3VsZAorCSAqIGFsbG93IHRoZSB0My10 NC10NS10NiBqb2luIHRvIGJlIGJ1aWx0IGhlcmUsIGJ1dCB0aGUgbmV4dCBzdGVwIG9mCisJICog am9pbmluZyB0MS10MiB0byB0aGUgcmVzdWx0IHdvdWxkIHN0aWxsIGJlIHJlamVjdGVkLgorCSAq LworCWlmICghc3VibGlzdCkKKwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsK KwlyZXR1cm4gIXN1Ymxpc3Q7Cit9CisKKy8qCisgKiBEb2VzIGEgY2VydGFpbiBpdGVtIG9mIGpv aW4gbWV0aG9kIGFkdmljZSBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKgorICogQWR2aWNlIHN1 Y2ggYXMgSEFTSF9KT0lOKCh4IHkpKSBtZWFucyB0aGF0IHRoZXJlIHNob3VsZCBiZSBhIGhhc2gg am9pbiB3aXRoCisgKiBleGFjdGx5IHggYW5kIHkgb24gdGhlIGlubmVyIHNpZGUuIE9idmlvdXNs eSwgdGhpcyBtZWFucyB0aGF0IGlmIHdlIGFyZQorICogY29uc2lkZXJpbmcgYSBqb2luIHdpdGgg ZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLCB3ZSBzaG91bGQgZW5mb3JjZQorICog dGhlIHVzZSBvZiBhIGhhc2ggam9pbi4gSG93ZXZlciwgaXQgYWxzbyBtZWFucyB0aGF0IHdlIG11 c3QgcmVqZWN0IHNvbWUKKyAqIGluY29tcGF0aWJsZSBqb2luIG9yZGVycyBlbnRpcmVseS4gIEZv ciBleGFtcGxlLCBhIGpvaW4gd2l0aCBleGFjdGx5IHgKKyAqIGFuZCB5IG9uIHRoZSBvdXRlciBz aWRlIHNob3VsZG4ndCBiZSBhbGxvd2VkLCBiZWNhdXNlIHN1Y2ggcGF0aHMgbWlnaHQgd2luCisg KiBvdmVyIHRoZSBhZHZpY2UtZHJpdmVuIHBhdGggb24gY29zdC4KKyAqCisgKiBUbyBhY2NvbW1v ZGF0ZSB0aGVzZSByZXF1aXJlbWVudHMsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRo ZSBqb2luCisgKiBzaG91bGQgYmUgYWxsb3dlZCBhbmQgZmFsc2UgaWYgaXQgc2hvdWxkIG5vdC4g RnVydGhlcm1vcmUsICpyZXN0cmljdF9tZXRob2QKKyAqIGlzIHNldCB0byB0cnVlIGlmIHRoZSBq b2luIG1ldGhvZCBzaG91bGQgYmUgZW5mb3JjZWQgYW5kIGZhbHNlIGlmIG5vdC4KKyAqLworc3Rh dGljIGJvb2wKK3BncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwg aW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJ CSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRo b2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBn cGFfaXRtX3R5cGUgaW5uZXJfaXRtOworCXBncGFfaXRtX3R5cGUgb3V0ZXJfaXRtOworCXBncGFf aXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBw YXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQ R1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFsc2U7CisKKwkv KgorCSAqIElmIG91ciBpbm5lciByZWwgbWVudGlvbnMgZXhhY3RseSB0aGUgc2FtZSByZWxhdGlv bnMgYXMgdGhlIGFkdmljZQorCSAqIHRhcmdldCwgYWxsb3cgdGhlIGpvaW4gYW5kIGVuZm9yY2Ug dGhlIGpvaW4gbWV0aG9kIHJlc3RyaWN0aW9uLgorCSAqCisJICogSWYgb3VyIGlubmVyIHJlbCBt ZW50aW9ucyBhIHN1cGVyc2V0IG9mIHRoZSB0YXJnZXQgcmVsYXRpb25zLCBhbGxvdyB0aGUKKwkg KiBqb2luLiBUaGUgam9pbiB3ZSBjYXJlIGFib3V0IGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlLCBh bmQgdGhpcyBhZHZpY2UKKwkgKiBpbXBvc2VzIG5vIGZ1cnRoZXIgcmVzdHJpY3Rpb25zLgorCSAq LworCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50 LAorCQkJCQkJCQkJCQkgIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICB0YXJnZXQp OworCWlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQllbnRyeS0+ZmxhZ3Mg fD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJcmV0 dXJuIHRydWU7CisJfQorCWVsc2UgaWYgKGlubmVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FS RV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBJZiBvdXIgb3V0ZXIgcmVsIG1l bnRpb25zIGEgc3Vwc2Vyc2V0IG9mIHRoZSByZWxhdGlvbnMgaW4gdGhlIGFkdmljZQorCSAqIHRh cmdldCwgbm8gcmVzdHJpY3Rpb25zIGFwcGx5LiBUaGUgam9pbiB3ZSBjYXJlIGhhcyBhbHJlYWR5 IHRha2VuCisJICogcGxhY2UsIGFuZCB0aGlzIGFkdmljZSBpbXBvc2VzIG5vIGZ1cnRoZXIgcmVz dHJpY3Rpb25zLgorCSAqCisJICogT24gdGhlIG90aGVyIGhhbmQsIGlmIG91ciBvdXRlciByZWwg bWVudGlvbnMgZXhhY3RseSB0aGUgcmVsYXRpb25zCisJICogbWVudGlvbmVkIGluIHRoZSBhZHZp Y2UgdGFyZ2V0LCB0aGUgcGxhbm5lciBpcyB0cnlpbmcgdG8gcmV2ZXJzZSB0aGUKKwkgKiBzaWRl cyBvZiB0aGUgam9pbiBhcyBjb21wYXJlZCB3aXRoIG91ciBkZXNpcmVkIG91dGNvbWUuIFJlamVj dCB0aGF0LgorCSAqLworCW91dGVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0 KG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMsIHRhcmdldCk7CisJaWYgKG91dGVyX2l0 bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCWVsc2Ug aWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK KwkgKiBJZiB0aGUgYWR2aWNlIHRhcmdldCBtZW50aW9ucyBvbmx5IGEgc2luZ2xlIHJlbGF0aW9u LCB0aGUgdGVzdCBiZWxvdworCSAqIGNhbm5vdCBldmVyIHBhc3MsIHNvIHNhdmUgc29tZSB3b3Jr IGJ5IGV4aXRpbmcgbm93LgorCSAqLworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VU X0lERU5USUZJRVIpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgZXZlcnl0aGluZyBp biB0aGUgam9pbnJlbCBhcHBlYXJzIGluIHRoZSBhZHZpY2UgdGFyZ2V0LCB3ZSdyZSBiZWxvdwor CSAqIHRoZSBsZXZlbCBvZiB0aGUgam9pbiB3ZSB3YW50IHRvIGNvbnRyb2wuCisJICoKKwkgKiBG b3IgZXhhbXBsZSwgSEFTSF9KT0lOKCh4IHkpKSBkb2Vzbid0IHJlc3RyaWN0IGhvdyB4IGFuZCB5 IGNhbiBiZQorCSAqIGpvaW5lZC4KKwkgKgorCSAqIFRoaXMgbG9va3VwIHNob3VsZG4ndCByZXR1 cm4gUEdQQV9JVE1fRElTSk9JTlQsIGJlY2F1c2UgYW55IHN1Y2ggYWR2aWNlCisJICogc2hvdWxk IG5vdCBoYXZlIGJlZW4gcmV0dXJuZWQgZnJvbSB0aGUgdHJvdmUgaW4gdGhlIGZpcnN0IHBsYWNl LgorCSAqLworCWpvaW5faXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJf Y291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHJpZHMsIHRhcmdldCk7CisJQXNzZXJ0 KGpvaW5faXRtICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9J VE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQly ZXR1cm4gdHJ1ZTsKKworCS8qCisJICogV2UndmUgYWxyZWFkeSBwZXJtaXR0ZWQgYWxsIGFsbG93 YWJsZSBjYXNlcywgc28gcmVqZWN0IHRoaXMuCisJICoKKwkgKiBJZiB3ZSByZWFjaCB0aGlzIHBv aW50LCB0aGVuIHRoZSBhZHZpY2Ugb3ZlcmxhcHMgd2l0aCB0aGlzIGpvaW4gYnV0CisJICogaXNu J3QgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBlaXRoZXIgc2lkZSwgYW5kIHRoZXJlJ3MgYWxz byBhdCBsZWFzdAorCSAqIG9uZSByZWxhdGlvbiBwcmVzZW50IGluIHRoZSBqb2luIHRoYXQgaXNu J3QgbWVudGlvbmVkIGJ5IHRoZSBhZHZpY2UuCisJICoKKwkgKiBGb3IgaW5zdGFuY2UsIGluIHRo ZSBIQVNIX0pPSU4oKHggeSkpIGV4YW1wbGUsIHdlIHdvdWxkIHJlYWNoIGhlcmUgaWYgeAorCSAq IHdlcmUgb24gb25lIHNpZGUgb2YgdGhlIGpvaW4sIHkgb24gdGhlIG90aGVyLCBhbmQgYXQgbGVh c3Qgb25lIG9mIHRoZQorCSAqIHR3byBzaWRlcyBhbHNvIGluY2x1ZGVkIHNvbWUgb3RoZXIgcmVs YXRpb24sIHNheSB0LiBJbiB0aGF0IGNhc2UsCisJICogYWNjZXB0aW5nIHRoaXMgam9pbiB3b3Vs ZCBhbGxvdyB0aGUgKHggeSB0KSBqb2lucmVsIHRvIGNvbnRhaW4KKwkgKiBub24tZGlzYWJsZWQg cGF0aHMgdGhhdCBkbyBub3QgcHV0ICh4IHkpIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaAor CSAqIGpvaW47IHdlIGNvdWxkIGluc3RlYWQgZW5kIHVwIHdpdGggc29tZXRoaW5nIGxpa2UgKHgg Sk9JTiB0KSBKT0lOIHkuCisJICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyBh ZHZpY2UgY29uY2VybmluZyBhbiBvcGFxdWUgam9pbiBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/Cisg KgorICogQnkgYW4gb3BhcXVlIGpvaW4sIHdlIG1lYW4gb25lIHdoZXJlIHRoZSBleGFjdCBtZWNo YW5pc20gYnkgd2hpY2ggdGhlCisgKiBqb2luIGlzIHBlcmZvcm1lZCBpcyBub3QgdmlzaWJsZSB0 byBQb3N0Z3JlU1FMLiBDdXJyZW50bHkgdGhpcyBpcyB0aGUKKyAqIGNhc2Ugb25seSBmb3IgZm9y ZWlnbiBqb2luczogRk9SRUlHTl9KT0lOKCh4IHkgeikpIG1lYW5zIHRoYXQgeCwgeSwgYW5kCisg KiB6IGFyZSBqb2luZWQgb24gdGhlIHJlbW90ZSBzaWRlLCBidXQgd2Uga25vdyBub3RoaW5nIGFi b3V0IHRoZSBqb2luIG9yZGVyCisgKiBvciBqb2luIG1ldGhvZHMgdXNlZCBvdmVyIHRoZXJlLgor ICoKKyAqIFRoZSBsb2dpYyBoZXJlIG5lZWRzIHRvIGRpZmZlciBmcm9tIHBncGFfam9pbl9tZXRo b2RfcGVybWl0c19qb2luIGJlY2F1c2UsCisgKiBmb3Igb3RoZXIgam9pbiB0eXBlcywgdGhlIGFk dmljZSB0YXJnZXQgaXMgdGhlIHNldCBvZiBpbm5lciByZWxzOyBoZXJlLCBpdAorICogaW5jbHVk ZXMgYm90aCBpbm5lciBhbmQgb3V0ZXIgcmVscy4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfb3Bh cXVlX2pvaW5fcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAor CQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRy eSAqZW50cnksCisJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZp Y2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBncGFfaXRtX3R5cGUgam9pbl9p dG07CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZv ciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BB UlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFsc2U7CisKKwlqb2luX2l0bSA9IHBncGFf aWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJ CQkJCQkJCSByaWRzLCB0YXJnZXQpOworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkK Kwl7CisJCS8qCisJCSAqIFdlIGhhdmUgYW4gZXhhY3QgbWF0Y2gsIGFuZCBzaG91bGQgdGhlcmVm b3JlIGFsbG93IHRoZSBqb2luIGFuZAorCQkgKiBlbmZvcmNlIHRoZSB1c2Ugb2YgdGhlIHJlbGV2 YW50IG9wYXF1ZSBqb2luIG1ldGhvZC4KKwkJICovCisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RF X01BVENIX0ZVTEw7CisJCSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpv aW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwl7CisJCS8qCisJCSAqIElm IGpvaW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwgdGhlbiB0aGUgam9pbiB3 ZSBjYXJlCisJCSAqIGFib3V0IGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGFuZCBubyBmdXJ0aGVy IHJlc3RyaWN0aW9ucyBhcHBseS4KKwkJICoKKwkJICogSWYgam9pbl9pdG0gPT0gUEdQQV9JVE1f S0VZU19BUkVfU1VCU0VULCB3ZSdyZSBzdGlsbCBidWlsZGluZyB1cCB0bworCQkgKiB0aGUgam9p biB3ZSBjYXJlIGFib3V0IGFuZCBoYXZlIG5vdCBpbnRyb2R1Y2VkIGFueSBleHRyYW5lb3VzCisJ CSAqIHJlbGF0aW9ucyBub3QgbmFtZWQgaW4gdGhlIGFkdmljZS4gTm90ZSB0aGF0IEZvcmVpZ25T Y2FuIHBhdGhzIGZvcgorCQkgKiBqb2lucyBhcmUgYnVpbHQgdXAgZnJvbSBGb3JlaWduU2NhbiBw YXRocyBmcm9tIHVuZGVybHlpbmcgam9pbnMgYW5kCisJCSAqIHNjYW5zLCBzbyB3ZSBtdXN0IG5v dCBkaXNhYmxlIHRoaXMgam9pbiB3aGVuIGNvbnNpZGVyaW5nIGEgc3Vic2V0CisJCSAqIG9mIHRo ZSByZWxhdGlvbnMgd2UgdWx0aW1hdGVseSB3YW50LgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyoKKwkgKiBUaGUgYWR2aWNlIG92ZXJsYXBzIHRoZSBqb2luLCBidXQgYXQgbGVhc3Qg b25lIHJlbGF0aW9uIGlzIHByZXNlbnQgaW4KKwkgKiB0aGUgam9pbiB0aGF0IGlzbid0IG1lbnRp b25lZCBieSB0aGUgYWR2aWNlLiBXZSB3YW50IHRvIGRpc2FibGUgc3VjaAorCSAqIHBhdGhzIHNv IHRoYXQgd2UgYWN0dWFsbHkgcHVzaCBkb3duIHRoZSBqb2luIGFzIGludGVuZGVkLgorCSAqLwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgYWR2aWNlIGNvbmNlcm5pbmcgYSBzZW1p am9pbiBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKgorICogVW5saWtlIGpvaW4gbWV0aG9kIGFk dmljZSwgd2hpY2ggbGlzdHMgdGhlIHJlbHMgb24gdGhlIGlubmVyIHNpZGUgb2YgdGhlCisgKiBq b2luLCBzZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZSBsaXN0cyB0aGUgcmVscyBvbiB0aGUgbnVs bGFibGUgc2lkZSBvZiB0aGUKKyAqIGpvaW4uIFRob3NlIGNhbiBiZSB0aGUgc2FtZSwgaWYgdGhl IGpvaW4gdHlwZSBpcyBKT0lOX1VOSVFVRV9JTk5FUiBvcgorICogSk9JTl9TRU1JLCBvciB0aGV5 IGNhbiBiZSBkaWZmZXJlbnQsIGluIGNhc2Ugb2YgSk9JTl9VTklRVUVfT1VURVIgb3IKKyAqIEpP SU5fUklHSFRfU0VNSS4KKyAqCisgKiBXZSBkb24ndCBrbm93IGhlcmUgd2hldGhlciB0aGUgY2Fs bGVyIHNwZWNpZmllZCBTRU1JSk9JTl9VTklRVUUgb3IKKyAqIFNFTUlKT0lOX05PTl9VTklRVUUu IFRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrIHRoZSBqb2luIHR5cGUgYWdhaW5zdCB0aGUKKyAqIGFk dmljZSB0eXBlIGlmIGFuZCBvbmx5IGlmIHdlIHNldCAqcmVzdHJpY3RfbWV0aG9kIHRvIHRydWUu CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3NlbWlqb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJf Y291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcywK KwkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJICAgYm9vbCBvdXRlcl9p c19udWxsYWJsZSwKKwkJCQkJCSAgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCkKK3sKKwlwZ3BhX2Fk dmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9pdG1fdHlwZSBqb2lu X2l0bTsKKwlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0 bTsKKworCSpyZXN0cmljdF9tZXRob2QgPSBmYWxzZTsKKworCS8qIFdlIGRlZmluaXRlbHkgaGF2 ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUgZW50cnkuICovCisJZW50 cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKworCS8qCisJICogSWYgb3V0ZXIg cmVsIGlzIHRoZSBudWxsYWJsZSBzaWRlIGFuZCBjb250YWlucyBleGFjdGx5IHRoZSBzYW1lCisJ ICogcmVsYXRpb25zIGFzIHRoZSBhZHZpY2UgdGFyZ2V0LCB0aGVuIHRoZSBqb2luIG9yZGVyIGlz IGFsbG93YWJsZSwgYnV0CisJICogdGhlIGNhbGxlciBtdXN0IGNoZWNrIHdoZXRoZXIgdGhlIGFk dmljZSB0YWcgKGVpdGhlciBTRU1JSk9JTl9VTklRVUUgb3IKKwkgKiBTRU1JSk9JTl9OT05fVU5J UVVFKSBtYXRjaGVzIHRoZSBqb2luIHR5cGUuCisJICoKKwkgKiBJZiB0aGUgb3V0ZXIgcmVsIGlz IGEgc3VwZXJzZXQgb2YgdGhlIHRhcmdldCByZWxhdGlvbnMsIHRoZSBqb2luIHdlCisJICogY2Fy ZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSwgc28gd2Ugc2hvdWxkIGltcG9zZSBubyBm dXRoZXIKKwkgKiByZXN0cml0aW9ucy4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZp ZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzLCB0YXJnZXQp OworCWlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQllbnRyeS0+ZmxhZ3Mg fD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQlpZiAob3V0ZXJfaXNfbnVsbGFibGUpCisJCXsKKwkJ CSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJZWxz ZSBpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJcmV0dXJu IHRydWU7CisKKwkvKiBBcyBhYm92ZSwgYnV0IGZvciB0aGUgaW5uZXIgcmVsLiAqLworCWlubmVy X2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50LAorCQkJCQkJ CQkJCQkgIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICB0YXJnZXQpOworCWlmIChp bm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9U RV9NQVRDSF9GVUxMOworCQlpZiAoIW91dGVyX2lzX251bGxhYmxlKQorCQl7CisJCQkqcmVzdHJp Y3RfbWV0aG9kID0gdHJ1ZTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCWVsc2UgaWYgKGlu bmVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOwor CisJLyoKKwkgKiBJZiBldmVyeXRoaW5nIGluIHRoZSBqb2lucmVsIGFwcGVhcnMgaW4gdGhlIGFk dmljZSB0YXJnZXQsIHdlJ3JlIGJlbG93CisJICogdGhlIGxldmVsIG9mIHRoZSBqb2luIHdlIHdh bnQgdG8gY29udHJvbC4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hf dGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJn ZXQpOworCUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisJaWYgKGpvaW5f aXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lU TV9FUVVBTCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIHRlc3RlZCBmb3IgYWxs IGFsbG93YWJsZSBwb3NzaWJpbGl0aWVzLCBhbmQgc28gbXVzdCByZWplY3QgdGhpcworCSAqIGpv aW4gb3JkZXIuIFRoaXMgY2FuIGhhcHBlbiBpbiB0d28gd2F5cy4KKwkgKgorCSAqIEZpcnN0LCB3 ZSBtaWdoIGJlIGNvbnNpZGVyaW5nIGEgc2VtaWpvaW4gdGhhdCBvdmVybGFwcyBpbmNvbXBsZXRl bHkKKwkgKiB3aXRoIG9uZSBvciBib3RoIHNpZGVzIG9mIHRoZSBqb2luLiBGb3IgZXhhbXBsZSwg aWYgdGhlIHVzZXIgaGFzCisJICogc3BlY2lmaWVkIFNFTUlKT0lOX1VOSVFVRSgodDEgdDIpKSBv ciBTRU1JSk9JTl9OT05fVU5JUVVFKCh0MSB0MikpLCB3ZQorCSAqIHNob3VsZCByZWplY3QgYSBw cm9wb3NlZCB0Mi10MyBqb2luLCBzaW5jZSB0aGF0IGNvdWxkIG5vdCByZXN1bHQgaW4gYQorCSAq IGZpbmFsIHBsYW4gY29tcGF0aWJsZSB3aXRoIHRoZSBhZHZpY2UuCisJICoKKwkgKiBTZWNvbmQs IHdlIG1pZ2h0IGJlIGNvbnNpZGVyaW5nIGEgc2VtaWpvaW4gd2hlcmUgdGhlIGFkdmljZSB0YXJn ZXQKKwkgKiBwZXJmZWN0bHkgbWF0Y2hlcyBvbmUgc2lkZSBvZiB0aGUgam9pbiwgYnV0IGl0J3Mg dGhlIHdyb25nIG9uZS4gRm9yCisJICogZXhhbXBsZSwgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdl IG1pZ2h0IHNlZSBhIDMtd2F5IGpvaW4gYmV0d2VlbiB0MSwKKwkgKiB0MiwgYW5kIHQzLCB3aXRo ICh0MSB0Mikgb24gdGhlIG5vbi1udWxsYWJsZSBzaWRlLiBUaGF0LCB0b28sIHdvdWxkIGJlCisJ ICogaW5jb21wYXRpYmxlIHdpdGggdGhlIGFkdmljZS4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qCisgKiBBcHBseSBzY2FuIGFkdmljZSB0byBhIFJlbE9wdEluZm8uCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAor CQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cmllcywKKwkJCQkJCQkgICBCaXRt YXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50 cmllcywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbF9pbmRleGVzKQoreworCWJvb2wJCWdhdGhl cl9jb25mbGljdCA9IGZhbHNlOworCUJpdG1hcHNldCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0g TlVMTDsKKwlCaXRtYXBzZXQgICpnYXRoZXJfZnVsbF9tYXRjaCA9IE5VTEw7CisJaW50CQkJaSA9 IC0xOworCXBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cnkgPSBOVUxMOworCWludAkJCWZsYWdz OworCWJvb2wJCXNjYW5fdHlwZV9jb25mbGljdCA9IGZhbHNlOworCUJpdG1hcHNldCAgKnNjYW5f dHlwZV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpzY2FuX3R5cGVfcmVsX2luZGV4ZXMg PSBOVUxMOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOworCXVpbnQ2NAkJc2Nhbl90eXBlID0g MDsKKworCS8qIFNjcnV0aW5pemUgYXZhaWxhYmxlIHNjYW4gYWR2aWNlLiAqLworCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihzY2FuX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90 cm92ZV9lbnRyeSAqbXlfZW50cnkgPSAmc2Nhbl9lbnRyaWVzW2ldOworCQl1aW50NjQJCW15X3Nj YW5fdHlwZSA9IDA7CisKKwkJLyogVHJhbnNsYXRlIG91ciBhZHZpY2UgdGFncyB0byBhIHNjYW4g c3RyYXRlZ3kgYWR2aWNlIHZhbHVlLiAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RB R19CSVRNQVBfSEVBUF9TQ0FOKQorCQl7CisJCQkvKgorCQkJICogQ2xlYXJseSBQR1NfQ09OU0lE RVJfSU5ERVhPTkxZIGNhbiBzdXBwcmVzcyBCaXRtYXAgSGVhcCBTY2FucywKKwkJCSAqIHNvIGRv bid0IGNsZWFyIGl0IHdoZW4gc3VjaCBhIHNjYW4gaXMgcmVxdWVzdGVkLiBUaGlzIGhhcHBlbnMK KwkJCSAqIGJlY2F1c2UgYnVpbGRfaW5kZXhfc2NhbigpIHRoaW5rcyB0aGF0IHRoZSBwb3NzaWJp bGl0eSBvZiBhbgorCQkJICogaW5kZXgtb25seSBzY2FuIGlzIGEgc3VmZmljaWVudCByZWFzb24g dG8gY29uc2lkZXIgdXNpbmcgYW4KKwkJCSAqIG90aGVyd2lzZS11c2VsZXNzIGluZGV4LCBhbmQg Z2V0X2luZGV4X3BhdGhzKCkgdGhpbmtzIHRoYXQgdGhlCisJCQkgKiBzYW1lIHBhdGhzIHRoYXQg YXJlIHVzZWZ1bCBmb3IgaW5kZXggb3IgaW5kZXgtb25seSBzY2FucyBzaG91bGQKKwkJCSAqIGFs c28gYmUgY29uc2lkZXJlZCBmb3IgYml0bWFwIHNjYW5zLiBQZXJoYXBzIHRoYXQgbG9naWMgc2hv dWxkCisJCQkgKiBiZSB0aWdodGVuZWQgdXAsIGJ1dCB1bnRpbCB0aGVuIHdlIG5lZWQgdG8gaW5j bHVkZQorCQkJICogUEdTX0NPTlNJREVSX0lOREVYT05MWSBpbiBteV9zY2FuX3R5cGUgaGVyZS4K KwkJCSAqLworCQkJbXlfc2Nhbl90eXBlID0gUEdTX0JJVE1BUFNDQU4gfCBQR1NfQ09OU0lERVJf SU5ERVhPTkxZOworCQl9CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5E RVhfT05MWV9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX0lOREVYT05MWVNDQU4gfCBQR1Nf Q09OU0lERVJfSU5ERVhPTkxZOworCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFH X0lOREVYX1NDQU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfSU5ERVhTQ0FOOworCQllbHNlIGlm IChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1NFUV9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0g UEdTX1NFUVNDQU47CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfVElEX1ND QU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfVElEU0NBTjsKKworCQkvKgorCQkgKiBJZiB0aGlz IGlzIHVuZGVyc3RhbmRhYmxlIHNjYW4gYWR2aWNlLCBoYW5nIG9uIHRvIHRoZSBlbnRyeSwgdGhl CisJCSAqIGluZmVycmVkIHNjYW4gdHlwZSB0eXBlLCBhbmQgdGhlIGluZGV4IGF0IHdoaWNoIHdl IGZvdW5kIGl0LgorCQkgKgorCQkgKiBBbHNvIG1ha2UgYSBub3RlIGlmIHdlIHNlZSBjb25mbGlj dGluZyBzY2FuIHR5cGUgYWR2aWNlLiBOb3RlIHRoYXQKKwkJICogd2UgcmVnYXJkIHR3byBpbmRl eCBzcGVjaWZpY2F0aW9ucyBhcyBjb25mbGljdGluZyB1bmxlc3MgdGhleSBtYXRjaAorCQkgKiBl eGFjdGx5LiBJbiB0aGVvcnksIHBlcmhhcHMgd2UgY291bGQgcmVnYXJkIElOREVYX1NDQU4oYSBj KSBhbmQKKwkJICogSU5ERVhfU0NBTihhIGIuYykgYXMgbm9uLWNvbmZsaWN0aW5nIGlmIGl0IGhh cHBlbnMgdGhhdCB0aGUgb25seQorCQkgKiBpbmRleCBuYW1lZCBjIGlzIGluIHNjaGVtYSBiLCBi dXQgaXQgZG9lc24ndCBzZWVtIHdvcnRoIHRoZSBjb2RlLgorCQkgKi8KKwkJaWYgKG15X3NjYW5f dHlwZSAhPSAwKQorCQl7CisJCQlpZiAoc2Nhbl90eXBlICE9IDAgJiYgc2Nhbl90eXBlICE9IG15 X3NjYW5fdHlwZSkKKwkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJaWYgKCFzY2Fu X3R5cGVfY29uZmxpY3QgJiYgc2Nhbl9lbnRyeSAhPSBOVUxMICYmCisJCQkJbXlfZW50cnktPnRh cmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0 ICE9IE5VTEwgJiYKKwkJCQkhcGdwYV9pbmRleF90YXJnZXRzX2VxdWFsKHNjYW5fZW50cnktPnRh cmdldC0+aXRhcmdldCwKKwkJCQkJCQkJCQkgIG15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQpKQor CQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CisJCQlzY2FuX2VudHJ5ID0gbXlfZW50cnk7 CisJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQlzY2FuX3R5cGVfaW5kZXhlcyA9IGJt c19hZGRfbWVtYmVyKHNjYW5fdHlwZV9pbmRleGVzLCBpKTsKKwkJfQorCX0KKworCS8qIFNjcnV0 aW5pemUgYXZhaWxhYmxlIGdhdGhlci1yZWxhdGVkIGFuZCBwYXJ0aXRpb253aXNlIGFkdmljZS4g Ki8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHJlbF9pbmRleGVzLCBp KSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKm15X2VudHJ5ID0gJnJlbF9lbnRyaWVz W2ldOworCQl1aW50NjQJCW15X2dhdGhlcl9tYXNrID0gMDsKKwkJYm9vbAkJanVzdF9vbmVfcmVs OworCisJCWp1c3Rfb25lX3JlbCA9IG15X2VudHJ5LT50YXJnZXQtPnR0eXBlID09IFBHUEFfVEFS R0VUX0lERU5USUZJRVIKKwkJCXx8IGxpc3RfbGVuZ3RoKG15X2VudHJ5LT50YXJnZXQtPmNoaWxk cmVuKSA9PSAxOworCisJCS8qCisJCSAqIFBBUlRJVElPTldJU0UgYmVoYXZlcyBsaWtlIGEgc2Nh biB0eXBlLCBleGNlcHQgdGhhdCBpZiB0aGVyZSdzIG1vcmUKKwkJICogdGhhbiBvbmUgcmVsYXRp b24gdGFyZ2V0ZWQsIGl0IGhhcyBubyBlZmZlY3QgYXQgdGhpcyBsZXZlbC4KKwkJICovCisJCWlm IChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCXsKKwkJCWlmIChq dXN0X29uZV9yZWwpCisJCQl7CisJCQkJY29uc3QgdWludDY0IG15X3NjYW5fdHlwZSA9IFBHU19B UFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EOworCisJCQkJaWYgKHNjYW5fdHlwZSAhPSAwICYmIHNj YW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7 CisJCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJCXNjYW5fdHlwZSA9IG15X3NjYW5fdHlw ZTsKKwkJCQlzY2FuX3R5cGVfcmVsX2luZGV4ZXMgPQorCQkJCQlibXNfYWRkX21lbWJlcihzY2Fu X3R5cGVfcmVsX2luZGV4ZXMsIGkpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKgor CQkgKiBHQVRIRVIgYW5kIEdBVEhFUl9NRVJHRSBhcHBsaWVkIHRvIGEgc2luZ2xlIHJlbCBtZWFu IHRoYXQgd2Ugc2hvdWxkCisJCSAqIHVzZSB0aGUgY29ycmVzcG9uZGluZ3Mgc3RyYXRlZ3kgaGVy ZSwgd2hpbGUgYXBwbHlpbmcgZWl0aGVyIHRvIG1vcmUKKwkJICogdGhhbiBvbmUgcmVsIG1lYW5z IHdlIHNob3VsZCBub3QgdXNlIHRob3NlIHN0cmF0ZWdpZXMgaGVyZSwgYnV0CisJCSAqIHJhdGhl ciBhdCB0aGUgbGV2ZWwgb2YgdGhlIGpvaW5yZWwgdGhhdCBjb3JyZXNwb25kcyB0byB3aGF0IHdh cworCQkgKiBzcGVjaWZpZWQuIE5PX0dBVEhFUiBjYW4gb25seSBiZSBhcHBsaWVkIHRvIHNpbmds ZSByZWxzLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgc2V0dGluZyBQR1NfQ09OU0lERVJfTk9OUEFS VElBTCBpbiBteV9nYXRoZXJfbWFzayBpcworCQkgKiBlcXVpdmFsZW50IHRvIGFsbG93aW5nIHRo ZSBub24tdXNlIG9mIGVpdGhlciBmb3JtIG9mIEdhdGhlciBoZXJlLgorCQkgKi8KKwkJaWYgKG15 X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSIHx8CisJCQlteV9lbnRyeS0+dGFnID09IFBH UEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJeworCQkJaWYgKCFqdXN0X29uZV9yZWwpCisJCQkJbXlf Z2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCWVsc2UgaWYgKG15X2Vu dHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dB VEhFUjsKKwkJCWVsc2UKKwkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVJfTUVSR0U7CisJ CX0KKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCXsK KwkJCUFzc2VydChqdXN0X29uZV9yZWwpOworCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlIHNldCBteV9nYXRoZXJfbWFz ayB1cCBhYm92ZSwgdGhlbiB3ZSAoMSkgbWFrZSBhIG5vdGUgaWYgdGhlCisJCSAqIGFkdmljZSBj b25mbGljdGVkLCAoMikgcmVtZW1iZXIgdGhlIG1hc2sgdmFsdWUsIGFuZCAoMykgcmVtZW1iZXIK KwkJICogd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlhbCBtYXRjaC4KKwkJICovCisJ CWlmIChteV9nYXRoZXJfbWFzayAhPSAwKQorCQl7CisJCQlpZiAoZ2F0aGVyX21hc2sgIT0gMCAm JiBnYXRoZXJfbWFzayAhPSBteV9nYXRoZXJfbWFzaykKKwkJCQlnYXRoZXJfY29uZmxpY3QgPSB0 cnVlOworCQkJZ2F0aGVyX21hc2sgPSBteV9nYXRoZXJfbWFzazsKKwkJCWlmIChqdXN0X29uZV9y ZWwpCisJCQkJZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfZnVsbF9t YXRjaCwgaSk7CisJCQllbHNlCisJCQkJZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBibXNfYWRkX21l bWJlcihnYXRoZXJfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKiBFbmZvcmNlIGNo b2ljZSBvZiBpbmRleC4gKi8KKwlpZiAoc2Nhbl9lbnRyeSAhPSBOVUxMICYmICFzY2FuX3R5cGVf Y29uZmxpY3QgJiYKKwkJKHNjYW5fZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOIHx8 CisJCSBzY2FuX2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKSkKKwl7CisJ CXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0ID0gc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0 OworCQlJbmRleE9wdEluZm8gKm1hdGNoZWRfaW5kZXggPSBOVUxMOworCisJCWZvcmVhY2hfbm9k ZShJbmRleE9wdEluZm8sIGluZGV4LCByZWwtPmluZGV4bGlzdCkKKwkJeworCQkJY2hhcgkgICAq cmVsbmFtZSA9IGdldF9yZWxfbmFtZShpbmRleC0+aW5kZXhvaWQpOworCQkJT2lkCQkJbnNwb2lk ID0gZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXgtPmluZGV4b2lkKTsKKwkJCWNoYXIJICAgKnJlbG5h bWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZShuc3BvaWQpOworCisJCQlpZiAoc3RyY21wKGl0 YXJnZXQtPmluZG5hbWUsIHJlbG5hbWUpID09IDAgJiYKKwkJCQkoaXRhcmdldC0+aW5kbmFtZXNw YWNlID09IE5VTEwgfHwKKwkJCQkgc3RyY21wKGl0YXJnZXQtPmluZG5hbWVzcGFjZSwgcmVsbmFt ZXNwYWNlKSA9PSAwKSkKKwkJCXsKKwkJCQltYXRjaGVkX2luZGV4ID0gaW5kZXg7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKworCQlpZiAobWF0Y2hlZF9pbmRleCA9PSBOVUxMKQorCQl7CisJCQkv KiBEb24ndCBmb3JjZSB0aGUgc2NhbiB0eXBlIGlmIHRoZSBpbmRleCBkb2Vzbid0IGV4aXN0LiAq LworCQkJc2Nhbl90eXBlID0gMDsKKworCQkJLyogTWFyayBhZHZpY2UgYXMgaW5hcHBsaWNhYmxl LiAqLworCQkJcGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5k ZXhlcywKKwkJCQkJCQkJIFBHUEFfVEVfSU5BUFBMSUNBQkxFKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCS8qIERpc2FibGUgZXZlcnkgb3RoZXIgaW5kZXguICovCisJCQlmb3JlYWNoX25vZGUoSW5k ZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRleGxpc3QpCisJCQl7CisJCQkJaWYgKGluZGV4ICE9 IG1hdGNoZWRfaW5kZXgpCisJCQkJCWluZGV4LT5kaXNhYmxlZCA9IHRydWU7CisJCQl9CisJCX0K Kwl9CisKKwkvKgorCSAqIE1hcmsgYWxsIHRoZSBzY2FuIG1ldGhvZCBlbnRyaWVzIGFzIGZ1bGx5 IG1hdGNoZWQ7IGFuZCBpZiB0aGV5IHNwZWNpZnkKKwkgKiBkaWZmZXJlbnQgdGhpbmdzLCBtYXJr IHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9Q QVJUSUFMIHwgUEdQQV9URV9NQVRDSF9GVUxMOworCWlmIChzY2FuX3R5cGVfY29uZmxpY3QpCisJ CWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nh bl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5kZXhlcywgZmxhZ3MpOworCXBncGFfdHJvdmVfc2V0X2Zs YWdzKHJlbF9lbnRyaWVzLCBzY2FuX3R5cGVfcmVsX2luZGV4ZXMsIGZsYWdzKTsKKworCS8qCisJ ICogTWFyayBldmVyeSBHYXRoZXItcmVsYXRlZCBwaWVjZSBvZiBhZHZpY2UgYXMgcGFydGlhbGx5 IG1hdGNoZWQuIE1hcmsKKwkgKiB0aGUgb25lcyB0aGF0IGluY2x1ZGVkIHRoaXMgcmVsYXRpb24g YXMgYSB0YXJnZXQgYnkgaXRzZWxmIGFzIGZ1bGx5CisJICogbWF0Y2hlZC4gSWYgdGhlcmUgd2Fz IGEgY29uZmxpY3QsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3Mg PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKGdhdGhlcl9jb25mbGljdCkKKwkJZmxhZ3Mg fD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmll cywgZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENI X0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIGdhdGhlcl9mdWxsX21h dGNoLCBmbGFncyk7CisKKwkvKgorCSAqIEVuZm9yY2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBzY2Fu IHR5cGUgYW5kIHVzZSBvZiBHYXRoZXIvR2F0aGVyIE1lcmdlLgorCSAqIE9ubHkgY2xlYXIgYml0 cyBoZXJlLCBzbyB0aGF0IHdlIHN0aWxsIHJlc3BlY3QgdGhlIGVuYWJsZV8qIEdVQ3MuIERvCisJ ICogbm90aGluZyBpbiBjYXNlcyB3aGVyZSB0aGUgYWR2aWNlIG9uIGEgc2luZ2xlIHRvcGljIGNv bmZsaWN0cy4KKwkgKi8KKwlpZiAoc2Nhbl90eXBlICE9IDAgJiYgIXNjYW5fdHlwZV9jb25mbGlj dCkKKwl7CisJCXVpbnQ2NAkJYWxsX3NjYW5fbWFzazsKKworCQlhbGxfc2Nhbl9tYXNrID0gUEdT X1NDQU5fQU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAorCQkJUEdTX0NPTlNJ REVSX0lOREVYT05MWTsKKwkJcmVsLT5wZ3NfbWFzayAmPSB+KGFsbF9zY2FuX21hc2sgJiB+c2Nh bl90eXBlKTsKKwl9CisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkK Kwl7CisJCXVpbnQ2NAkJYWxsX2dhdGhlcl9tYXNrOworCisJCWFsbF9nYXRoZXJfbWFzayA9CisJ CQlQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFM OworCQlyZWwtPnBnc19tYXNrICY9IH4oYWxsX2dhdGhlcl9tYXNrICYgfmdhdGhlcl9tYXNrKTsK Kwl9Cit9CisKKy8qCisgKiBBZGQgZmVlZGJhY2sgZW50cmllcyB0byBmb3Igb25lIHRyb3ZlIHNs aWNlIHRvIHRoZSBwcm92aWRlZCBsaXN0IGFuZAorICogcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlz dC4KKyAqCisgKiBGZWVkYmFjayBlbnRyaWVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgdHJvdmUg ZW50cnkncyBmbGFncy4gSXQncyBhc3N1bWVkCisgKiB0aGF0IHRoZSBjYWxsZXIgaGFzIGFscmVh ZHkgc2V0IGFsbCByZWxldmFudCBmbGFncyB3aXRoIHRoZSBleGNlcHRpb24gb2YKKyAqIFBHUEFf VEVfRkFJTEVELiBXZSBzZXQgdGhhdCBmbGFnIGhlcmUgaWYgYXBwcm9wcmlhdGUuCisgKi8KK3N0 YXRpYyBMaXN0ICoKK3BncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soTGlzdCAqbGlzdCwgcGdw YV90cm92ZSAqdHJvdmUsCisJCQkJCQkJIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJ CQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkgcGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpCit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cmllczsK KwlpbnQJCQluZW50cmllczsKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5m bygmYnVmKTsKKwlwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwodHJvdmUsIHR5cGUsICZlbnRyaWVzLCAm bmVudHJpZXMpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbmVudHJpZXM7ICsraSkKKwl7CisJCXBn cGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJmVudHJpZXNbaV07CisJCURlZkVsZW0gICAgKml0ZW07 CisKKwkJLyoKKwkJICogSWYgdGhpcyBlbnRyeSB3YXMgZnVsbHkgbWF0Y2hlZCwgY2hlY2sgd2hl dGhlciBnZW5lcmF0aW5nIGFkdmljZQorCQkgKiBmcm9tIHRoaXMgcGxhbiB3b3VsZCBwcm9kdWNl IHN1Y2ggYW4gZW50cnkuIElmIG5vdCwgbGFiZWwgdGhlIGVudHJ5CisJCSAqIGFzIGZhaWxlZC4K KwkJICovCisJCWlmICgoZW50cnktPmZsYWdzICYgUEdQQV9URV9NQVRDSF9GVUxMKSAhPSAwICYm CisJCQkhcGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHdhbGtlciwgcnRfaWRlbnRpZmllcnMsCisJ CQkJCQkJCQkgIGVudHJ5LT50YWcsIGVudHJ5LT50YXJnZXQpKQorCQkJZW50cnktPmZsYWdzIHw9 IFBHUEFfVEVfRkFJTEVEOworCisJCWl0ZW0gPSBtYWtlRGVmRWxlbShwZ3BhX2NzdHJpbmdfdHJv dmVfZW50cnkoZW50cnkpLAorCQkJCQkJICAgKE5vZGUgKikgbWFrZUludGVnZXIoZW50cnktPmZs YWdzKSwgLTEpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBpdGVtKTsKKwl9CisKKwlyZXR1cm4g bGlzdDsKK30KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworLyoKKyAqIEZhc3QgaGFz aCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lzdGluZyBvZiBhbiBSVEkgYW5kIHBsYW4gbmFtZS4K KyAqLworc3RhdGljIHVpbnQzMgorcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hl Y2tlcl9rZXkga2V5KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOworCWludAkJCXNwX2xlbjsKKwor CWZhc3RoYXNoX2luaXQoJmhzLCAwKTsKKworCWhzLmFjY3VtID0ga2V5LnJ0aTsKKwlmYXN0aGFz aF9jb21iaW5lKCZocyk7CisKKwkvKiBwbGFuX25hbWUgY2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5 LnBsYW5fbmFtZSA9PSBOVUxMKQorCQlzcF9sZW4gPSAwOworCWVsc2UKKwkJc3BfbGVuID0gZmFz dGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyogaGFzaGZuX3Vu c3RhYmxlLmggcmVjb21tZW5kcyB1c2luZyBzdHJpbmcgbGVuZ3RoIGFzIHR3ZWFrICovCisJcmV0 dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQorCisjZW5kaWYKKworLyoKKyAq IFNhdmUgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgZm9yIG9uZSByZWxhdGlvbiBmb3IgZnV0 dXJlIGNyb3NzLWNoZWNraW5nLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9yaV9jaGVja2VyX3Nh dmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkgUmVs T3B0SW5mbyAqcmVsKQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3JpX2No ZWNrZXJfa2V5IGtleTsKKwlwZ3BhX3JpX2NoZWNrZXIgKmNoZWNrOworCXBncGFfaWRlbnRpZmll ciByaWQ7CisJY29uc3QgY2hhciAqcmlkX3N0cmluZzsKKwlib29sCQlmb3VuZDsKKworCWtleS5y dGkgPSBibXNfc2luZ2xldG9uX21lbWJlcihyZWwtPnJlbGlkcyk7CisJa2V5LnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwg a2V5LnJ0aSwgJnJpZCk7CisJcmlkX3N0cmluZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJp ZCk7CisJY2hlY2sgPSBwZ3BhX3JpX2NoZWNrX2luc2VydChwcHMtPnJpX2NoZWNrX2hhc2gsIGtl eSwgJmZvdW5kKTsKKwlBc3NlcnQoIWZvdW5kIHx8IHN0cmNtcChjaGVjay0+cmlkX3N0cmluZywg cmlkX3N0cmluZykgPT0gMCk7CisJY2hlY2stPnJpZF9zdHJpbmcgPSByaWRfc3RyaW5nOworI2Vu ZGlmCit9CisKKy8qCisgKiBWYWxpZGF0ZSB0aGF0IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVy cyB3ZSB3ZXJlIGFibGUgdG8gZ2VuZXJhdGUgZHVyaW5nCisgKiBwbGFubmluZyBtYXRjaCB0aGUg b25lcyB3ZSBnZW5lcmF0ZWQgZnJvbSB0aGUgZmluYWwgcGxhbi4KKyAqLworc3RhdGljIHZvaWQK K3BncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5l ZFN0bXQgKnBzdG10KQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX2lkZW50 aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCXBncGFfcmlfY2hlY2tfaXRlcmF0b3IgaXQ7CisJcGdw YV9yaV9jaGVja2VyICpjaGVjazsKKworCS8qIENyZWF0ZSBpZGVudGlmaWVycyBmcm9tIHRoZSBw bGFubmVkIHN0YXRlbWVudC4gKi8KKwlydF9pZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50 aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQpOworCisJLyogSXRlcmF0ZSBvdmVyIGlkZW50 aWZpZXJzIGNyZWF0ZWQgZHVyaW5nIHBsYW5uaW5nLCBzbyB3ZSBjYW4gY29tcGFyZS4gKi8KKwlw Z3BhX3JpX2NoZWNrX3N0YXJ0X2l0ZXJhdGUocHBzLT5yaV9jaGVja19oYXNoLCAmaXQpOworCXdo aWxlICgoY2hlY2sgPSBwZ3BhX3JpX2NoZWNrX2l0ZXJhdGUocHBzLT5yaV9jaGVja19oYXNoLCAm aXQpKSAhPSBOVUxMKQorCXsKKwkJaW50CQkJcnRvZmZzZXQgPSAwOworCQljb25zdCBjaGFyICpy aWRfc3RyaW5nOworCQlJbmRleAkJZmxhdF9ydGk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUncyBu byBwbGFuIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZW50cnksIHRoZW4gdGhlCisJCSAqIHJ0 b2Zmc2V0IGlzIDAuIE90aGVyd2lzZSwgd2UgY2FuIHNlYXJjaCB0aGUgU3ViUGxhblJUSW5mbyBs aXN0IHRvCisJCSAqIGZpbmQgdGhlIHJ0b2Zmc2V0LgorCQkgKi8KKwkJaWYgKGNoZWNrLT5rZXku cGxhbl9uYW1lICE9IE5VTEwpCisJCXsKKwkJCWZvcmVhY2hfbm9kZShTdWJQbGFuUlRJbmZvLCBy dGluZm8sIHBzdG10LT5zdWJydGluZm9zKQorCQkJeworCQkJCS8qCisJCQkJICogSWYgcnRpbmZv LT5kdW1teSBpcyBzZXQsIHRoZW4gdGhlIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUKKwkJCQkgKiB3 aWxsIG9ubHkgaGF2ZSBiZWVuIHBhcnRpYWxseSBjb3BpZWQgdG8gdGhlIGZpbmFsIHJhbmdlCisJ CQkJICogdGFibGUuIFNwZWNpZmljYWxseSwgb25seSBSVEVfUkVMQVRJT04gZW50cmllcyBhbmQK KwkJCQkgKiBSVEVfU1VCUVVFUlkgZW50cmllcyB0aGF0IHdlcmUgb25jZSBSVEVfUkVMQVRJT04g ZW50cmllcworCQkJCSAqIHdpbGwgYmUgY29waWVkLCBhcyBwZXIgYWRkX3J0ZXNfdG9fZmxhdF9y dGFibGUuIFRoZXJlZm9yZSwKKwkJCQkgKiB0aGVyZSdzIG5vIGZpeGVkIHJ0b2Zmc2V0IHRoYXQg d2UgY2FuIGFwcGx5IHRvIHRoZSBSVElzCisJCQkJICogdXNlZCBkdXJpbmcgcGxhbm5pbmcgdG8g bG9jYXRlIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9ucworCQkJCSAqIGluIHRoZSBmaW5hbCBy dGFibGUuCisJCQkJICoKKwkJCQkgKiBXaXRoIG1vcmUgY29tcGxleCBsb2dpYywgd2UgY291bGQg d29yayBhcm91bmQgdGhhdCBwcm9ibGVtCisJCQkJICogYnkgcmVtZW1iZXJpbmcgdGhlIHdob2xl IGNvbnRlbnRzIG9mIHRoZSBzdWJxdWVyeSdzIHJ0YWJsZQorCQkJCSAqIGR1cmluZyBwbGFubmlu ZywgZGV0ZXJtaW5pbmcgd2hpY2ggb2YgdGhvc2Ugd291bGQgaGF2ZSBiZWVuCisJCQkJICogY29w aWVkIHRvIHRoZSBmaW5hbCBydGFibGUsIGFuZCBtYXRjaGluZyB0aGVtIHVwLiBCdXQgaXQKKwkJ CQkgKiBkb2Vzbid0IHNlZW0gbGlrZSBhIHdvcnRod2hpbGUgZW5kZWF2b3IgZm9yIHJpZ2h0IG5v dywKKwkJCQkgKiBiZWNhdXNlIFJUSXMgZnJvbSBzdWNoIHN1YnF1ZXJpZXMgd29uJ3QgYXBwZWFy IGluIHRoZSBwbGFuCisJCQkJICogdHJlZSBpdHNlbGYsIGp1c3QgaW4gdGhlIHJhbmdlIHRhYmxl LiBIZW5jZSwgd2UgY2FuIG5laXRoZXIKKwkJCQkgKiBnZW5lcmF0ZSBub3IgYWNjZXB0IGFkdmlj ZSBmb3IgdGhlbS4KKwkJCQkgKi8KKwkJCQlpZiAoc3RyY21wKGNoZWNrLT5rZXkucGxhbl9uYW1l LCBydGluZm8tPnBsYW5fbmFtZSkgPT0gMAorCQkJCQkmJiAhcnRpbmZvLT5kdW1teSkKKwkJCQl7 CisJCQkJCXJ0b2Zmc2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKKwkJCQkJQXNzZXJ0KHJ0b2Zmc2V0 ID4gMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAqIEl0J3Mgbm90 IGFuIGVycm9yIGlmIHdlIGRvbid0IGZpbmQgdGhlIHBsYW4gbmFtZTogdGhhdCBqdXN0CisJCQkg KiBtZWFucyB0aGF0IHdlIHBsYW5uZWQgYSBzdWJwbGFuIGJ5IHRoaXMgbmFtZSBidXQgaXQgZW5k ZWQgdXAKKwkJCSAqIGJlaW5nIGEgZHVtbXkgc3VicGxhbiBhbmQgc28gd2Fzbid0IGluY2x1ZGVk IGluIHRoZSBmaW5hbCBwbGFuCisJCQkgKiB0cmVlLgorCQkJICovCisJCQlpZiAocnRvZmZzZXQg PT0gMCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIGNoZWNrLT5rZXkucnRpIGlz IHRoZSBSVEkgdGhhdCB3ZSBzYXcgcHJpb3IgdG8gcmFuZ2UtdGFibGUKKwkJICogZmxhdHRlbmlu Zywgc28gd2UgbXVzdCBhZGQgdGhlIGFwcHJvcHJpYXRlIFJUIG9mZnNldCB0byBnZXQgdGhlCisJ CSAqIGZpbmFsIFJUSS4KKwkJICovCisJCWZsYXRfcnRpID0gY2hlY2stPmtleS5ydGkgKyBydG9m ZnNldDsKKwkJQXNzZXJ0KGZsYXRfcnRpIDw9IGxpc3RfbGVuZ3RoKHBzdG10LT5ydGFibGUpKTsK KworCQkvKiBBc3NlcnQgdGhhdCB0aGUgc3RyaW5nIHdlIGNvbXB1dGUgbm93IG1hdGNoZXMgdGhl IHByZXZpb3VzIG9uZS4gKi8KKwkJcmlkX3N0cmluZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmco JnJ0X2lkZW50aWZpZXJzW2ZsYXRfcnRpIC0gMV0pOworCQlBc3NlcnQoc3RyY21wKHJpZF9zdHJp bmcsIGNoZWNrLT5yaWRfc3RyaW5nKSA9PSAwKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIENv bnZlcnQgYSBiaXRtYXBzZXQgdG8gYSBDIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgaW50ZWdl cnMuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfYm1zX3RvX2NzdHJpbmcoQml0bWFwc2V0ICpi bXMpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWludAkJCXggPSAtMTsKKworCWlmIChibXNf aXNfZW1wdHkoYm1zKSkKKwkJcmV0dXJuICJub25lIjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYp OworCXdoaWxlICgoeCA9IGJtc19uZXh0X21lbWJlcihibXMsIHgpKSA+PSAwKQorCXsKKwkJaWYg KGJ1Zi5sZW4gPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAlZCIsIHgpOworCQll bHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCX0KKworCXJldHVybiBi dWYuZGF0YTsKK30KKworLyoKKyAqIENvbnZlcnQgYSBKb2luVHlwZSB0byBhIEMgc3RyaW5nLgor ICovCitzdGF0aWMgY29uc3QgY2hhciAqCitwZ3BhX2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5 cGUgam9pbnR5cGUpCit7CisJc3dpdGNoIChqb2ludHlwZSkKKwl7CisJCWNhc2UgSk9JTl9JTk5F UjoKKwkJCXJldHVybiAiaW5uZXIiOworCQljYXNlIEpPSU5fTEVGVDoKKwkJCXJldHVybiAibGVm dCI7CisJCWNhc2UgSk9JTl9GVUxMOgorCQkJcmV0dXJuICJmdWxsIjsKKwkJY2FzZSBKT0lOX1JJ R0hUOgorCQkJcmV0dXJuICJyaWdodCI7CisJCWNhc2UgSk9JTl9TRU1JOgorCQkJcmV0dXJuICJz ZW1pIjsKKwkJY2FzZSBKT0lOX0FOVEk6CisJCQlyZXR1cm4gImFudGkiOworCQljYXNlIEpPSU5f UklHSFRfU0VNSToKKwkJCXJldHVybiAicmlnaHQgc2VtaSI7CisJCWNhc2UgSk9JTl9SSUdIVF9B TlRJOgorCQkJcmV0dXJuICJyaWdodCBhbnRpIjsKKwkJY2FzZSBKT0lOX1VOSVFVRV9PVVRFUjoK KwkJCXJldHVybiAidW5pcXVlIG91dGVyIjsKKwkJY2FzZSBKT0lOX1VOSVFVRV9JTk5FUjoKKwkJ CXJldHVybiAidW5pcXVlIGlubmVyIjsKKwl9CisJcmV0dXJuICI/Pz8iOworfQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjdkNDBiOTEwYjAwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3BsYW5uZXIuaApAQCAtMCwwICsxLDE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBwZ3BhX3BsYW5uZXIuaAorICoJICBwbGFubmVyIGhvb2tzCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9QTEFOTkVSX0gKKyNkZWZpbmUgUEdQQV9Q TEFOTkVSX0gKKworZXh0ZXJuIHZvaWQgcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCk7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4u YyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEwNzU0NGI2ZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwpAQCAtMCwwICsxLDMwNiBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9zY2FuLmMKKyAqCSAgYW5hbHlzaXMgb2Ygc2NhbnMg aW4gUGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2Vy LmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3Bh cnNldHJlZS5oIgorCitzdGF0aWMgcGdwYV9zY2FuICpwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJIHBncGFfc2Nhbl9z dHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkg Ym9vbCBuZWVkc19ub19nYXRoZXIpOworCisKK3N0YXRpYyBSVEVLaW5kIHVuaXF1ZV9ub25qb2lu X3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKKy8qCisgKiBCdWls ZCBhIHBncGFfc2NhbiBvYmplY3QgZm9yIGEgUGxhbiBub2RlIGFuZCB1cGRhdGUgdGhlIHBsYW4g d2Fsa2VyCisgKiBjb250ZXh0IGFzIGFwcG9wcmlhdGUuICBJZiB0aGlzIGlzIGFuIEFwcGVuZCBv ciBNZXJnZUFwcGVuZCBzY2FuLCBhbHNvCisgKiBidWlsZCBwZ3BhX3NjYW4gZm9yIGFueSBzY2Fu cyB0aGF0IHdlcmUgY29uc29saWRhdGVkIGludG8gdGhpcyBvbmUgYnkKKyAqIEFwcGVuZC9NZXJn ZUFwcGVuZCBwdWxsLXVwLgorICoKKyAqIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBFbGlkZWRO b2RlIGZvciB0aGlzIHBsYW4gbm9kZSwgcGFzcyB0aGUgdXBwZXJtb3N0CisgKiBvbmUgYXMgZWxp ZGVkX25vZGUsIGVsc2UgcGFzcyBOVUxMLgorICoKKyAqIFNldCB0aGUgJ2JlbmVhdGhfYW55X2dh dGhlcicgbm9kZSBpZiB3ZSBhcmUgdW5kZXJuZWF0aCBhIEdhdGhlciBvcgorICogR2F0aGVyIE1l cmdlIG5vZGUuCisgKgorICogU2V0IHRoZSAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpZiB3 ZSdyZSBpbnNpZGUgb2YgYSBqb2luIHByb2JsZW0gYW5kCisgKiBub3Qgb3RoZXJ3aXNlLgorICov CitwZ3BhX3NjYW4gKgorcGdwYV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAq d2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCWJv b2wgYmVuZWF0aF9hbnlfZ2F0aGVyLCBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0pCit7CisJcGdw YV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCUJpdG1hcHNl dCAgKnJlbGlkcyA9IE5VTEw7CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJbmVlZHNfbm9fZ2F0 aGVyID0gIWJlbmVhdGhfYW55X2dhdGhlcjsKKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyA9IE5JTDsKKworCWlmIChlbGlkZWRfbm9kZSAhPSBOVUxMKQorCXsKKwkJTm9kZVRhZwkJ ZWxpZGVkX3R5cGUgPSBlbGlkZWRfbm9kZS0+ZWxpZGVkX3R5cGU7CisKKwkJLyoKKwkJICogSWYg c2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSB0 aGF0IGhhZAorCQkgKiBvbmx5IG9uZSBzdXJ2aXZpbmcgY2hpbGQsIGl0IG1pZ2h0IGJlIGEgcGFy dGl0aW9ud2lzZSBvcGVyYXRpb24sCisJCSAqIGJ1dCB0aGVuIHRoaXMgaXMgZWl0aGVyIGEgc2V0 b3Agb3ZlciBzdWJxdWVyaWVzLCBvciBhIHBhcnRpdGlvbndpc2UKKwkJICogb3BlcmF0aW9uICh3 aGljaCBtaWdodCBiZSBhIHNjYW4gb3IgYSBqb2luIGluIHJlYWxpdHksIGJ1dCBoZXJlIHdlCisJ CSAqIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGFuZCBjb25zaWRlciBpdCBzaW1w bHkgYSBzY2FuKS4KKwkJICoKKwkJICogQSBzZXRvcCBvdmVyIHN1YnF1ZXJpZXMsIG9yIGEgdHJp dmlhbCBTdWJRdWVyeVNjYW4gdGhhdCB3YXMgZWxpZGVkLAorCQkgKiBpcyBhbiAib3JkaW5hcnki IHNjYW4gaS5lLiBvbmUgZm9yIHdoaWNoIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYWR2aWNlCisJCSAq IGJlY2F1c2UgdGhlIHBsYW5uZXIgaGFzIG5vdCBtYWRlIGFueSBtZWFuaW5nZnVsIGNob2ljZS4K KwkJICovCisJCXJlbGlkcyA9IGVsaWRlZF9ub2RlLT5yZWxpZHM7CisJCWlmICgoZWxpZGVkX3R5 cGUgPT0gVF9BcHBlbmQgfHwgZWxpZGVkX3R5cGUgPT0gVF9NZXJnZUFwcGVuZCkgJiYKKwkJCXVu aXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLAorCQkJCQkJCQkgICB3YWxrZXItPnBzdG10LT5y dGFibGUpID09IFJURV9SRUxBVElPTikKKwkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElP TldJU0U7CisJCWVsc2UKKwkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCS8q CisJCSAqIElmIHRoaXMgaXMgYW4gZWxpZGVkIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlLCB3 ZSBkb24ndCBuZWVkIHRvCisJCSAqIGVtaXQgTk9fR0FUSEVSKCkgYmVjYXVzZSB3ZSdsbCBhbHNv IGVtaXQgaXQgZm9yIHRoZSB1bmRlcmx5aW5nCisJCSAqIHNjYW4sIHdoaWNoIGlzIGdvb2QgZW5v dWdoLgorCQkgKgorCQkgKiBJZiBpdCdzIGFuIGVsaWRlZCBTdWJxdWVyeVNjYW4sIHRoZSBzYW1l IGFyZ3VtZW50IGlzIGxpa2VseSB0bworCQkgKiBhcHBseSwgYmVjYXVzZSB0aGUgc3VicXVlcnkg cHJvYmFibHkgY29udGFpbnMgcmVmZXJlbmNlcyB0byB0YWJsZXMsCisJCSAqIGFuZCBpZiBpdCBk b2Vzbid0LCB0aGVuIHBsYW5uZXIgaXNuJ3QgbGlrZWx5IHRvIHdhbnQgdG8gZG8gaXQgaW4KKwkJ ICogcGFyYWxsZWwgYW55d2F5LiBCdXQgYWxzbywgd2UgY2FuJ3QgaW1wbGVtZW50IE5PX0dBVEhF UigpIGFkdmljZQorCQkgKiBmb3IgYSBub24tcmVsYXRpb24gUlRFS2luZCwgYmVjYXVzZSBnZXRf cmVsYXRpb25faW5mbygpIGlzbid0CisJCSAqIGNhbGxlZCBpbiBzdWNoIGNhc2VzLiBUaGF0IHNo b3VsZCBwcm9iYWJseSBiZSBmaXhlZCBhdCBzb21lIHBvaW50LAorCQkgKiBidXQgdW50aWwgdGhl biB3ZSBzaG91bGRuJ3QgZW1pdCBpdC4KKwkJICovCisJCW5lZWRzX25vX2dhdGhlciA9IGZhbHNl OworCisJCS8qIEpvaW4gUlRJcyBjYW4gYmUgcHJlc2VudCwgYnV0IGFkdmljZSBuZXZlciByZWZl cnMgdG8gdGhlbS4gKi8KKwkJcmVsaWRzID0gcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJl bGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwl9CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFf c2NhbnJlbGlkKHBsYW4pKSAhPSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlOworCisJCXJl bGlkcyA9IGJtc19tYWtlX3NpbmdsZXRvbihydGkpOworCisJCXN3aXRjaCAobm9kZVRhZyhwbGFu KSkKKwkJeworCQkJY2FzZSBUX1NlcVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fU0VR OworCQkJCWJyZWFrOworCQkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQkJCXN0cmF0ZWd5ID0g UEdQQV9TQ0FOX0JJVE1BUF9IRUFQOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4U2NhbjoK KwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9JTkRFWDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9J bmRleE9ubHlTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0lOREVYX09OTFk7CisJCQkJ YnJlYWs7CisJCQljYXNlIFRfVGlkU2NhbjoKKwkJCWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCQkJ c3RyYXRlZ3kgPSBQR1BBX1NDQU5fVElEOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKworCQkJ CS8qCisJCQkJICogVGhpcyBjYXNlIGluY2x1ZGVzIGEgRm9yZWlnblNjYW4gdGFyZ2V0aW5nIGEg c2luZ2xlCisJCQkJICogcmVsYXRpb247IG5vIG90aGVyIHN0cmF0ZWd5IGlzIHBvc3NpYmxlIGlu IHRoYXQgY2FzZSwgYnV0CisJCQkJICogc2VlIGJlbG93LCB3aGVyZSB0aGluZ3MgYXJlIGRpZmZl cmVudCBpbiBtdWx0aS1yZWxhdGlvbgorCQkJCSAqIGNhc2VzLgorCQkJCSAqLworCQkJCXN0cmF0 ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCQkJLyoKKwkJCQkgKiBXZSBjYW4ndCBoYW5k bGUgTk9fR0FUSEVSKCkgZm9yIG5vbi1yZWxhdGlvbiBSVEVzIGJlY2F1c2UKKwkJCQkgKiBnZXRf cmVsYXRpb25faW5mbyB3b24ndCBiZSBjYWxsZWQuCisJCQkJICovCisJCQkJcnRlID0gcnRfZmV0 Y2gocnRpLCB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0g UlRFX1JFTEFUSU9OKQorCQkJCQluZWVkc19ub19nYXRoZXIgPSBmYWxzZTsKKworCQkJCWJyZWFr OworCQl9CisJfQorCWVsc2UgaWYgKChyZWxpZHMgPSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVM TCkKKwl7CisJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwkJeworCQkJY2FzZSBUX0ZvcmVpZ25T Y2FuOgorCisJCQkJLyoKKwkJCQkgKiBJZiBtdWx0aXBsZSByZWxhdGlvbnMgYXJlIGJlaW5nIHRh cmdldGVkIGJ5IGEgc2luZ2xlCisJCQkJICogZm9yZWlnbiBzY2FuLCB0aGVuIHRoZSBmb3JlaWdu IGpvaW4gaGFzIGJlZW4gcHVzaGVkIHRvIHRoZQorCQkJCSAqIHJlbW90ZSBzaWRlLCBhbmQgd2Ug d2FudCB0aGF0IHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUKKwkJCQkgKiBnZW5lcmF0ZWQgYWR2aWNl LgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0ZPUkVJR047CisJCQkJYnJlYWs7 CisJCQljYXNlIFRfQXBwZW5kOgorCisJCQkJLyoKKwkJCQkgKiBBcHBlbmQgbm9kZXMgY2FuIHJl cHJlc2VudCBwYXJ0aXRpb253aXNlIHNjYW5zIG9mIGEgYQorCQkJCSAqIHJlbGF0aW9uLCBidXQg d2hlbiB0aGV5IGltcGxlbWVudCBhIHNldCBvcGVyYXRpb24sIHRoZXkgYXJlCisJCQkJICoganVz dCBvcmRpbmFyeSBzY2Fucy4KKwkJCQkgKi8KKwkJCQlpZiAodW5pcXVlX25vbmpvaW5fcnRla2lu ZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkKKwkJCQkJPT0gUlRFX1JFTEFUSU9OKQor CQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFOworCQkJCWVsc2UKKwkJCQkJ c3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisKKwkJCQkvKiBOT19HQVRIRVIoKSBzaG91 bGQgYmUgZW1pdHRlZCBmb3IgdW5kZXJseWluZyByZWxzIG9ubHkuICovCisJCQkJbmVlZHNfbm9f Z2F0aGVyID0gZmFsc2U7CisKKwkJCQkvKiBCZSBzdXJlIHRvIGFjY291bnQgZm9yIHB1bGxlZC11 cCBzY2Fucy4gKi8KKwkJCQljaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgoQXBwZW5k ICopIHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWNhc2Ug VF9NZXJnZUFwcGVuZDoKKwkJCQkvKiBTb21lIGxvZ2ljIGhlcmUgYXMgZm9yIEFwcGVuZCwgYWJv dmUuICovCisJCQkJaWYgKHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLCB3YWxrZXItPnBz dG10LT5ydGFibGUpCisJCQkJCT09IFJURV9SRUxBVElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQR1BB X1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJCQllbHNlCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FO X09SRElOQVJZOworCisJCQkJLyogTk9fR0FUSEVSKCkgc2hvdWxkIGJlIGVtaXR0ZWQgZm9yIHVu ZGVybHlpbmcgcmVscyBvbmx5LiAqLworCQkJCW5lZWRzX25vX2dhdGhlciA9IGZhbHNlOworCisJ CQkJLyogQmUgc3VyZSB0byBhY2NvdW50IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCisJCQkJY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCQkoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RyYXRl Z3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisKKwkJCQkvKgorCQkJCSAqIFdlIGNhbid0IGhhbmRs ZSBOT19HQVRIRVIoKSBmb3Igc2luZ2xlIG5vbi1yZWxhdGlvbiBSVEVzCisJCQkJICogYmVjYXVz ZSBnZXRfcmVsYXRpb25faW5mbyB3b24ndCBiZSBjYWxsZWQuCisJCQkJICovCisJCQkJaWYgKGJt c19tZW1iZXJzaGlwKHJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCQl7CisJCQkJCVJhbmdl VGJsRW50cnkgKnJ0ZTsKKworCQkJCQlydGUgPSBydF9mZXRjaChibXNfc2luZ2xldG9uX21lbWJl cihyZWxpZHMpLAorCQkJCQkJCQkgICB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCQkJCQlpZiAo cnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCQkJCW5lZWRzX25vX2dhdGhlciA9IGZh bHNlOworCQkJCX0KKworCQkJCWJyZWFrOworCQl9CisKKworCQkvKiBKb2luIFJUSXMgY2FuIGJl IHByZXNlbnQsIGJ1dCBhZHZpY2UgbmV2ZXIgcmVmZXJzIHRvIHRoZW0uICovCisJCXJlbGlkcyA9 IHBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJs ZSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBu b2RlIGludG8gd2hpY2ggc3Vib3JkaW5hdGUgQXBwZW5kCisJICogb3IgTWVyZ2VBcHBlbmQgcGF0 aHMgd2VyZSBtZXJnZWQsIGVhY2ggb2YgdGhvc2UgbWVyZ2VkIHBhdGhzIGlzCisJICogZWZmZWN0 aXZlbHkgYW5vdGhlciBzY2FuIGZvciB3aGljaCB3ZSBuZWVkIHRvIGFjY291bnQuCisJICovCisJ Zm9yZWFjaF9ub2RlKEJpdG1hcHNldCwgY2hpbGRfcmVsaWRzLCBjaGlsZF9hcHBlbmRfcmVsaWRf c2V0cykKKwl7CisJCUJpdG1hcHNldCAgKmNoaWxkX25vbmpvaW5fcmVsaWRzOworCisJCWNoaWxk X25vbmpvaW5fcmVsaWRzID0KKwkJCXBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhjaGlsZF9y ZWxpZHMsCisJCQkJCQkJCQkJd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwkJKHZvaWQpIHBncGFf bWFrZV9zY2FuKHdhbGtlciwgcGxhbiwgc3RyYXRlZ3ksCisJCQkJCQkJICBjaGlsZF9ub25qb2lu X3JlbGlkcywgZmFsc2UpOworCX0KKworCS8qCisJICogSWYgdGhpcyBwbGFuIG5vZGUgaGFzIG5v IGFzc29jaWF0ZWQgUlRJcywgaXQncyBub3QgYSBzY2FuLiBXaGVuIHRoZQorCSAqICd3aXRoaW5f am9pbl9wcm9ibGVtJyBmbGFnIGlzIHNldCwgdGhhdCdzIHVuZXhwZWN0ZWQsIHNvIHRocm93IGFu CisJICogZXJyb3IsIGVsc2UgcmV0dXJuIHF1aWV0bHkuCisJICovCisJaWYgKHJlbGlkcyA9PSBO VUxMKQorCXsKKwkJaWYgKHdpdGhpbl9qb2luX3Byb2JsZW0pCisJCQllbG9nKEVSUk9SLCAicGxh biBub2RlIGhhcyBubyBSVElzOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwlyZXR1cm4gcGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVn eSwgcmVsaWRzLCBuZWVkc19ub19nYXRoZXIpOworfQorCisvKgorICogQ3JlYXRlIGEgc2luZ2xl IHBncGFfc2NhbiBvYmplY3QgYW5kIHVwZGF0ZSB0aGUgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 LgorICovCitzdGF0aWMgcGdwYV9zY2FuICoKK3BncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJICAgcGdwYV9zY2FuX3N0cmF0ZWd5 IHN0cmF0ZWd5LCBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCSAgIGJvb2wgbmVlZHNfbm9fZ2F0aGVy KQoreworCXBncGFfc2NhbiAgKnNjYW47CisKKwkvKiBDcmVhdGUgdGhlIHNjYW4gb2JqZWN0LiAq LworCXNjYW4gPSBwYWxsb2Moc2l6ZW9mKHBncGFfc2NhbikpOworCXNjYW4tPnBsYW4gPSBwbGFu OworCXNjYW4tPnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisJc2Nhbi0+cmVsaWRzID0gcmVsaWRzOwor CisJLyogQWRkIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0LiAqLworCXdhbGtlci0+c2NhbnNb c2Nhbi0+c3RyYXRlZ3ldID0gbGFwcGVuZCh3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSwK KwkJCQkJCQkJCQkJc2Nhbik7CisKKwkvKiBDYWxsZXIgdGVsbHMgdXMgd2hldGhlciBOT19HQVRI RVIoKSBhZHZpY2UgZm9yIHRoaXMgc2NhbiBpcyBuZWVkZWQuICovCisJaWYgKG5lZWRzX25vX2dh dGhlcikKKwkJd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMgPSBibXNfYWRkX21lbWJlcnMod2Fsa2Vy LT5ub19nYXRoZXJfc2NhbnMsCisJCQkJCQkJCQkJCQkgIHNjYW4tPnJlbGlkcyk7CisKKwlyZXR1 cm4gc2NhbjsKK30KKworLyoKKyAqIERldGVybWluZSB0aGUgdW5pcXVlIHJ0ZWtpbmQgb2YgYSBz ZXQgb2YgcmVsaWRzLgorICovCitzdGF0aWMgUlRFS2luZAordW5pcXVlX25vbmpvaW5fcnRla2lu ZChCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKQoreworCWludAkJCXJ0aSA9IC0xOwor CWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlSVEVLaW5kCQlydGVraW5kOworCisJQXNzZXJ0KHJlbGlk cyAhPSBOVUxMKTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRp KSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcnRhYmxl KTsKKworCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisKKwkJ aWYgKGZpcnN0KQorCQl7CisJCQlydGVraW5kID0gcnRlLT5ydGVraW5kOworCQkJZmlyc3QgPSBm YWxzZTsKKwkJfQorCQllbHNlIGlmIChydGVraW5kICE9IHJ0ZS0+cnRla2luZCkKKwkJCWVsb2co RVJST1IsICJydGVraW5kIG1pc21hdGNoOiAlZCB2cy4gJWQiLAorCQkJCSBydGVraW5kLCBydGUt PnJ0ZWtpbmQpOworCX0KKworCWlmIChmaXJzdCkKKwkJZWxvZyhFUlJPUiwgIm5vIG5vbi1SVEVf Sk9JTiBSVEVzIGZvdW5kIik7CisKKwlyZXR1cm4gcnRla2luZDsKK30KZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYmI4 NzI2ZmYxZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9z Y2FuLmgKQEAgLTAsMCArMSw4NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9z Y2FuLmgKKyAqCSAgYW5hbHlzaXMgb2Ygc2NhbnMgaW4gUGxhbiB0cmVlcworICoKKyAqIEZvciBw dXJwb3NlcyBvZiB0aGlzIG1vZHVsZSwgYSAic2NhbiIgaW5jbHVkZXMgKDEpIHNpbmdsZSBwbGFu IG5vZGVzIHRoYXQKKyAqIHNjYW4gbXVsdGlwbGUgUlRJcywgc3VjaCBhcyBhIGRlZ2VuZXJhdGUg UmVzdWx0IG5vZGUgdGhhdCByZXBsYWNlcyB3aGF0CisgKiB3b3VsZCBvdGhlcndpc2UgaGF2ZSBi ZWVuIGEgam9pbiwgYW5kICgyKSBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIG5vZGVzCisgKiBpbXBs ZW1lbnRpbmcgYSBwYXJ0aXRpb253aXNlIHNjYW4gb3IgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNh aWQKKyAqIGRpZmZlcmVudGx5LCBzY2FucyBhcmUgdGhlIGxlYXZlcyBvZiB0aGUgam9pbiB0cmVl IGZvciBhIHNpbmdsZSBqb2luCisgKiBwcm9ibGVtLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAx Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIFBHUEFfU0NBTl9ICisjZGVmaW5lIFBHUEFfU0NBTl9ICisKKyNpbmNsdWRl ICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dDsKKworLyoKKyAqIFNjYW4gc3RyYXRlZ2ll cy4KKyAqCisgKiBQR1BBX1NDQU5fT1JESU5BUlkgaXMgYW55IHNjYW4gc3RyYXRlZ3kgdGhhdCBp c24ndCBpbnRlcmVzdGluZyB0byB1cworICogYmVjYXVzZSB0aGVyZSBpcyBubyBtZWFuaW5nZnVs IHBsYW5uZXIgZGVjaXNpb24gaW52b2x2ZWQuIEZvciBleGFtcGxlLAorICogdGhlIG9ubHkgd2F5 IHRvIHNjYW4gYSBzdWJxdWVyeSBpcyBhIFN1YnF1ZXJ5U2NhbiwgYW5kIHRoZSBvbmx5IHdheSB0 bworICogc2NhbiBhIFZBTFVFUyBjb25zdHJ1Y3QgaXMgYSBWYWx1ZXNTY2FuLiBXZSBuZWVkIG5v dCBjYXJlIGV4YWN0bHkgd2hpY2gKKyAqIHR5cGUgb2YgcGxhbm5lciBub2RlIHdhcyB1c2VkIGlu IHN1Y2ggY2FzZXMsIGJlY2F1c2UgdGhlIHNhbWUgdGhpbmcgd2lsbAorICogaGFwcGVuIHdoZW4g cmVwbGFubmluZy4KKyAqCisgKiBQR1BBX1NDQU5fT1JESU5BUlkgYWxzbyBpbmNsdWRlcyBSZXN1 bHQgbm9kZXMgdGhhdCBjb3JyZXNwb25kIHRvIHNjYW5zCisgKiBvciBldmVuIGpvaW5zIHRoYXQg YXJlIHByb3ZlZCBlbXB0eS4gV2UgZG9uJ3Qga25vdyB3aGV0aGVyIG9yIG5vdCB0aGUgc2Nhbgor ICogb3Igam9pbiB3aWxsIHN0aWxsIGJlIHByb3ZhYmx5IGVtcHR5IGF0IHJlcGxhbm5pbmcgdGlt ZSwgYnV0IGlmIGl0IGlzLAorICogdGhlbiBubyBzY2FuLXR5cGUgYWR2aWNlIGlzIG5lZWRlZCwg YW5kIGlmIGl0J3Mgbm90LCB3ZSBjYW4ndCByZWNvbW1lbmQKKyAqIGEgc2NhbiB0eXBlIGJhc2Vk IG9uIHRoZSBjdXJyZW50IHBsYW4uCisgKgorICogUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UgYWxz byBsdW1wcyB0b2dldGhlciBzY2FucyBhbmQgam9pbnM6IHRoaXMgY2FuCisgKiBiZSBlaXRoZXIg YSBwYXJ0aXRpb253aXNlIHNjYW4gb2YgYSBwYXJ0aXRpb25lZCB0YWJsZSBvciBhIHBhcnRpdGlv bndpc2UKKyAqIGpvaW4gYmV0d2VlbiBzZXZlcmFsIHBhcnRpdGlvbmVkIHRhYmxlcy4gTm90ZSB0 aGF0IGFsbCBkZWNpc2lvbnMgYWJvdXQKKyAqIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBwYXJ0aXRp b253aXNlIGpvaW4gYXJlIG1lYW5pbmdmdWw6IG5vIG1hdHRlciB3aGF0CisgKiB3ZSBkZWNpZGVk IHRoaXMgdGltZSwgd2UgY291bGQgZG8gbW9yZSBvciBmZXdlciB0aGluZ3MgcGFydGl0aW9ud2lz ZSB0aGUKKyAqIG5leHQgdGltZS4KKyAqCisgKiBQR1BBX1NDQU5fRk9SRUlHTiBpcyBvbmx5IHVz ZWQgd2hlbiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaW52b2x2ZWQ7CisgKiBhIHNp bmdsZS10YWJsZSBmb3JlaWduIHNjYW4gaXMgY2xhc3NpZmllZCBhcyBvcmRpbmFyeSwgc2luY2Ug dGhlcmUgaXMgbm8KKyAqIGRlY2lzaW9uIHRvIG1ha2UgaW4gdGhhdCBjYXNlLgorICoKKyAqIE90 aGVyIHNjYW4gc3RyYXRlZ2llcyBtYXAgb25lLXRvLW9uZSB0byBwbGFuIG5vZGVzLgorICovCit0 eXBlZGVmIGVudW0KK3sKKwlQR1BBX1NDQU5fT1JESU5BUlkgPSAwLAorCVBHUEFfU0NBTl9TRVEs CisJUEdQQV9TQ0FOX0JJVE1BUF9IRUFQLAorCVBHUEFfU0NBTl9GT1JFSUdOLAorCVBHUEFfU0NB Tl9JTkRFWCwKKwlQR1BBX1NDQU5fSU5ERVhfT05MWSwKKwlQR1BBX1NDQU5fUEFSVElUSU9OV0lT RSwKKwlQR1BBX1NDQU5fVElECisJLyogdXBkYXRlIE5VTV9QR1BBX1NDQU5fU1RSQVRFR1kgaWYg eW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9IHBncGFfc2Nhbl9zdHJhdGVneTsKKworI2RlZmlu ZSBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZCSgoaW50KSBQR1BBX1NDQU5fVElEICsgMSkKKworLyoK KyAqIEFsbCBvZiB0aGUgZGV0YWlscyB3ZSBuZWVkIHJlZ2FyZGluZyBhIHNjYW4uCisgKi8KK3R5 cGVkZWYgc3RydWN0IHBncGFfc2NhbgoreworCVBsYW4JICAgKnBsYW47CisJcGdwYV9zY2FuX3N0 cmF0ZWd5IHN0cmF0ZWd5OworCUJpdG1hcHNldCAgKnJlbGlkczsKK30gcGdwYV9zY2FuOworCitl eHRlcm4gcGdwYV9zY2FuICpwZ3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUs CisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkJCSAgYm9vbCB3aXRo aW5fam9pbl9wcm9ibGVtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfc2Nhbm5lci5sIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5u ZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTg4NzczNWYzMTQK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5s CkBAIC0wLDAgKzEsMjk3IEBACisldG9weworLyoKKyAqIFNjYW5uZXIgZm9yIHBsYW4gYWR2aWNl CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIu bAorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcu aCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvc2NhbnN1 cC5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgor CisvKgorICogRXh0cmEgZGF0YSB0aGF0IHdlIHBhc3MgYXJvdW5kIHdoZW4gZHVyaW5nIHNjYW5u aW5nLgorICoKKyAqICdsaXRidWYnIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSA8eGQ+IGV4Y2x1 c2l2ZSBzdGF0ZSwgd2hpY2ggaGFuZGxlcworICogZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycy4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV95eV9leHRyYV90eXBlCit7CisJU3RyaW5nSW5mb0Rh dGEJbGl0YnVmOworfSBwZ3BhX3l5X2V4dHJhX3R5cGU7CisKK30KKworJXsKKy8qIExDT1ZfRVhD TF9TVEFSVCAqLworCisjZGVmaW5lIFlZX0RFQ0wgXAorCWV4dGVybiBpbnQgcGdwYV95eWxleCh1 bmlvbiBZWVNUWVBFICp5eWx2YWxfcGFyYW0sIExpc3QgKipyZXN1bHQsIFwKKwkJCQkJCSAgY2hh ciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKKy8qIE5vIHJlYXNv biB0byBjb25zdHJhaW4gYW1vdW50IG9mIGRhdGEgc2x1cnBlZCAqLworI2RlZmluZSBZWV9SRUFE X0JVRl9TSVpFIDE2Nzc3MjE2CisKKy8qIEF2b2lkIGV4aXQoKSBvbiBmYXRhbCBzY2FubmVyIGVy cm9ycyAoYSBiaXQgdWdseSAtLSBzZWUgeXlfZmF0YWxfZXJyb3IpICovCisjdW5kZWYgZnByaW50 ZgorI2RlZmluZSBmcHJpbnRmKGZpbGUsIGZtdCwgbXNnKSAgZnByaW50Zl90b19lcmVwb3J0KGZt dCwgbXNnKQorCitzdGF0aWMgdm9pZAorZnByaW50Zl90b19lcmVwb3J0KGNvbnN0IGNoYXIgKmZt dCwgY29uc3QgY2hhciAqbXNnKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJtc2dfaW50ZXJuYWwo IiVzIiwgbXNnKSkpOworfQorJX0KKworJW9wdGlvbiByZWVudHJhbnQKKyVvcHRpb24gYmlzb24t YnJpZGdlCislb3B0aW9uIDhiaXQKKyVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24g bm9kZWZhdWx0Cislb3B0aW9uIG5vaW5wdXQKKyVvcHRpb24gbm91bnB1dAorJW9wdGlvbiBub3l5 d3JhcAorJW9wdGlvbiBub3l5YWxsb2MKKyVvcHRpb24gbm95eXJlYWxsb2MKKyVvcHRpb24gbm95 eWZyZWUKKyVvcHRpb24gd2FybgorJW9wdGlvbiBwcmVmaXg9InBncGFfeXkiCislb3B0aW9uIGV4 dHJhLXR5cGU9InBncGFfeXlfZXh0cmFfdHlwZSAqIgorCisvKgorICogV2hhdCBmb2xsb3dzIGlz IGEgc2V2ZXJlbHkgc3RyaXBwZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBjb3JlIHNjYW5uZXIuIFdl CisgKiBvbmx5IGNhcmUgYWJvdXQgcmVjb2duaXppbmcgaWRlbnRpZmllcnMgd2l0aCBvciB3aXRo b3V0IGlkZW50aWZpZXIgcXVvdGluZworICogKGkuZS4gZG91YmxlLXF1b3RpbmcpLCBkZWNpbWFs IGludGVnZXJzLCBhbmQgYSBzbWFsbCBoYW5kZnVsIG9mIG90aGVyCisgKiB0aGluZ3MuIEtlZXAg dGhlc2UgcnVsZXMgaW4gc3luYyB3aXRoIHNyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwuIEFzIGlu IHRoYXQKKyAqIGZpbGUsIHdlIHVzZSBhbiBleGNsdXNpdmUgc3RhdGUgY2FsbGVkICd4YycgZm9y IEMtc3R5bGUgY29tbWVudHMsIGFuZCBhbgorICogZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAneGQn IGZvciBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzLgorICovCisleCB4YworJXggeGQKKworaWRl bnRfc3RhcnQJCVtBLVphLXpcMjAwLVwzNzdfXQoraWRlbnRfY29udAkJW0EtWmEtelwyMDAtXDM3 N18wLTlcJF0KKworaWRlbnRpZmllcgkJe2lkZW50X3N0YXJ0fXtpZGVudF9jb250fSoKKworZGVj ZGlnaXQJCVswLTldCitkZWNpbnRlZ2VyCQl7ZGVjZGlnaXR9KF8/e2RlY2RpZ2l0fSkqCisKK3Nw YWNlCQkJWyBcdFxuXHJcZlx2XQord2hpdGVzcGFjZQkJe3NwYWNlfSsKKworZHF1b3RlCQkJXCIK K3hkc3RhcnQJCQl7ZHF1b3RlfQoreGRzdG9wCQkJe2RxdW90ZX0KK3hkZG91YmxlCQl7ZHF1b3Rl fXtkcXVvdGV9Cit4ZGluc2lkZQkJW14iXSsKKworeGNzdGFydAkJCVwvXCoKK3hjc3RvcAkJCVwq K1wvCit4Y2luc2lkZQkJW14qL10rCisKKyUlCisKK3t3aGl0ZXNwYWNlfQl7IC8qIGlnbm9yZSAq LyB9CisKK3tpZGVudGlmaWVyfQl7CisJCQkJCWNoYXIgICAqc3RyOworCQkJCQlib29sCWZhaWw7 CisJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlCXRhZzsKKworCQkJCQkvKgorCQkJCQkgKiBVbmxp a2UgdGhlIGNvcmUgc2Nhbm5lciwgd2UgZG9uJ3QgdHJ1bmNhdGUgaWRlbnRpZmllcnMKKwkJCQkJ ICogaGVyZS4gVGhlcmUgaXMgbm8gb2J2aW91cyByZWFzb24gdG8gZG8gc28uCisJCQkJCSAqLwor CQkJCQlzdHIgPSBkb3duY2FzZV9pZGVudGlmaWVyKHl5dGV4dCwgeXlsZW5nLCBmYWxzZSwgZmFs c2UpOworCQkJCQl5eWx2YWwtPnN0ciA9IHN0cjsKKworCQkJCQkvKgorCQkJCQkgKiBJZiBpdCdz IG5vdCBhIHRhZywganVzdCByZXR1cm4gVE9LX0lERU5UOyBlbHNlLCByZXR1cm4KKwkJCQkJICog YSB0b2tlbiB0eXBlIGJhc2VkIG9uIGhvdyBmdXJ0aGVyIHBhcnNpbmcgc2hvdWxkCisJCQkJCSAq IHByb2NlZWQuCisJCQkJCSAqLworCQkJCQl0YWcgPSBwZ3BhX3BhcnNlX2FkdmljZV90YWcoc3Ry LCAmZmFpbCk7CisJCQkJCWlmIChmYWlsKQorCQkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQkJ ZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCQkJCQlyZXR1cm4gVE9LX1RB R19KT0lOX09SREVSOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8 fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKQorCQkJCQkJcmV0dXJu IFRPS19UQUdfSU5ERVg7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19TRVFfU0NBTiB8 fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfVElEX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBH UEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX05PX0dB VEhFUikKKwkJCQkJCXJldHVybiBUT0tfVEFHX1NJTVBMRTsKKwkJCQkJZWxzZQorCQkJCQkJcmV0 dXJuIFRPS19UQUdfR0VORVJJQzsKKwkJCQl9CisKK3tkZWNpbnRlZ2VyfQl7CisJCQkJCWNoYXIg ICAqZW5kcHRyOworCisJCQkJCWVycm5vID0gMDsKKwkJCQkJeXlsdmFsLT5pbnRlZ2VyID0gc3Ry dG9pbnQoeXl0ZXh0LCAmZW5kcHRyLCAxMCk7CisJCQkJCWlmICgqZW5kcHRyICE9ICdcMCcgfHwg ZXJybm8gPT0gRVJBTkdFKQorCQkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3Jf bXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCSAiaW50ZWdlciBvdXQgb2YgcmFuZ2UiKTsKKwkJ CQkJcmV0dXJuIFRPS19JTlRFR0VSOworCQkJCX0KKwore3hjc3RhcnR9CQl7CisJCQkJCUJFR0lO KHhjKTsKKwkJCQl9CisKK3t4ZHN0YXJ0fQkJeworCQkJCQlCRUdJTih4ZCk7CisJCQkJCXJlc2V0 U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0YnVmKTsKKwkJCQl9CisKKy4JCQkJeyByZXR1cm4geXl0 ZXh0WzBdOyB9CisKKzx4Yz57eGNzdG9wfQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCX0K KworPHhjPnt4Y2luc2lkZX0JeworCQkJCQkvKiBkaXNjYXJkIG11bHRpcGxlIGNoYXJhY3RlcnMg d2l0aG91dCBzbGFzaCBvciBhc3RlcmlzayAqLworCQkJCX0KKworPHhjPi4JCQl7CisJCQkJCS8q CisJCQkJCSAqIERpc2NhcmQgYW55IHNpbmdsZSBjaGFyYWN0ZXIuIGZsZXggcHJlZmVycyBsb25n ZXIKKwkJCQkJICogbWF0Y2hlcywgc28gdGhpcyBydWxlIHdpbGwgbmV2ZXIgYmUgcGlja2VkIHdo ZW4gd2UgY291bGQKKwkJCQkJICogaGF2ZSBtYXRjaGVkIHhjc3RvcC4KKwkJCQkJICoKKwkJCQkJ ICogTkI6IEF0IHByZXNlbnQsIHdlIGRvbid0IGJvdGhlciB0byBzdXBwb3J0IG5lc3RlZAorCQkJ CQkgKiBDLXN0eWxlIGNvbW1lbnRzIGhlcmUsIGJ1dCB0aGlzIGxvZ2ljIGNvdWxkIGJlIGV4dGVu ZGVkCisJCQkJCSAqIGlmIHRoYXQgcmVzdHJpY3Rpb24gcG9zZXMgYSBwcm9ibGVtLgorCQkJCQkg Ki8KKwkJCQl9CisKKzx4Yz48PEVPRj4+CQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlw Z3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJ CQkgInVudGVybWluYXRlZCBjb21tZW50Iik7CisJCQkJfQorCis8eGQ+e3hkc3RvcH0JeworCQkJ CQlCRUdJTihJTklUSUFMKTsKKwkJCQkJaWYgKHl5ZXh0cmEtPmxpdGJ1Zi5sZW4gPT0gMCkKKwkJ CQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJ CQkJCQkJCQkgInplcm8tbGVuZ3RoIGRlbGltaXRlZCBpZGVudGlmaWVyIik7CisJCQkJCXl5bHZh bC0+c3RyID0gcHN0cmR1cCh5eWV4dHJhLT5saXRidWYuZGF0YSk7CisJCQkJCXJldHVybiBUT0tf SURFTlQ7CisJCQkJfQorCis8eGQ+e3hkZG91YmxlfQl7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZ5eWV4dHJhLT5saXRidWYsICciJyk7CisJCQkJfQorCis8eGQ+e3hkaW5zaWRlfQl7CisJ CQkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJnl5ZXh0cmEtPmxpdGJ1ZiwgeXl0ZXh0LCB5eWxl bmcpOworCQkJCX0KKworPHhkPjw8RU9GPj4JCXsKKwkJCQkJQkVHSU4oSU5JVElBTCk7CisJCQkJ CXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJ CQkJCSAidW50ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIik7CisJCQkJfQorCislJQorCisv KiBMQ09WX0VYQ0xfU1RPUCAqLworCisvKgorICogSGFuZGxlciBmb3IgZXJyb3JzIHdoaWxlIHNj YW5uaW5nIG9yIHBhcnNpbmcgYWR2aWNlLgorICoKKyAqIGJpc29uIHBhc3NlcyB0aGUgZXJyb3Ig bWVzc2FnZSB0byB1cyB2aWEgJ21lc3NhZ2UnLCBhbmQgdGhlIGNvbnRleHQgaXMKKyAqIGF2YWls YWJsZSB2aWEgdGhlICd5eXRleHQnIG1hY3JvLiBXZSBhc3NlbWJsZSB0aG9zZSB2YWx1ZXMgaW50 byBhIGZpbmFsCisgKiBlcnJvciB0ZXh0IGFuZCB0aGVuIGFycmFuZ2UgdG8gcGFzcyBpdCBiYWNr IHRvIHRoZSBjYWxsZXIgb2YgcGdwYV95eXBhcnNlKCkKKyAqIGJ5IHN0b3JpbmcgaXQgaW50byAq cGFyc2VfZXJyb3JfbXNnX3AuCisgKi8KK3ZvaWQKK3BncGFfeXllcnJvcihMaXN0ICoqcmVzdWx0 LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbl90IHl5c2Nhbm5lciwKKwkJCSBjb25z dCBjaGFyICptZXNzYWdlKQoreworCXN0cnVjdCB5eWd1dHNfdCAqeXlnID0gKHN0cnVjdCB5eWd1 dHNfdCAqKSB5eXNjYW5uZXI7CS8qIG5lZWRlZCBmb3IgeXl0ZXh0CisJCQkJCQkJCQkJCQkJCQkg KiBtYWNybyAqLworCisKKwkvKiByZXBvcnQgb25seSB0aGUgZmlyc3QgZXJyb3IgaW4gYSBwYXJz ZSBvcGVyYXRpb24gKi8KKwlpZiAoKnBhcnNlX2Vycm9yX21zZ19wKQorCQlyZXR1cm47CisKKwlp ZiAoeXl0ZXh0WzBdKQorCQkqcGFyc2VfZXJyb3JfbXNnX3AgPSBwc3ByaW50ZigiJXMgYXQgb3Ig bmVhciBcIiVzXCIiLCBtZXNzYWdlLCB5eXRleHQpOworCWVsc2UKKwkJKnBhcnNlX2Vycm9yX21z Z19wID0gcHNwcmludGYoIiVzIGF0IGVuZCBvZiBpbnB1dCIsIG1lc3NhZ2UpOworfQorCisvKgor ICogSW5pdGlhbGl6ZSB0aGUgYWR2aWNlIHNjYW5uZXIuCisgKgorICogVGhpcyBzaG91bGQgYmUg Y2FsbGVkIGJlZm9yZSBwYXJzaW5nIGJlZ2lucy4KKyAqLwordm9pZAorcGdwYV9zY2FubmVyX2lu aXQoY29uc3QgY2hhciAqc3RyLCB5eXNjYW5fdCAqeXlzY2FubmVycCkKK3sKKwl5eXNjYW5fdAl5 eXNjYW5uZXI7CisJcGdwYV95eV9leHRyYV90eXBlCSp5eWV4dCA9IHBhbGxvYzBfb2JqZWN0KHBn cGFfeXlfZXh0cmFfdHlwZSk7CisKKwlpZiAoeXlsZXhfaW5pdCh5eXNjYW5uZXJwKSAhPSAwKQor CQllbG9nKEVSUk9SLCAieXlsZXhfaW5pdCgpIGZhaWxlZDogJW0iKTsKKworCXl5c2Nhbm5lciA9 ICp5eXNjYW5uZXJwOworCisJaW5pdFN0cmluZ0luZm8oJnl5ZXh0LT5saXRidWYpOworCXBncGFf eXlzZXRfZXh0cmEoeXlleHQsIHl5c2Nhbm5lcik7CisKKwl5eV9zY2FuX3N0cmluZyhzdHIsIHl5 c2Nhbm5lcik7Cit9CisKKworLyoKKyAqIFNodXQgZG93biB0aGUgYWR2aWNlIHNjYW5uZXIuCisg KgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHBhcnNpbmcgaXMgY29tcGxldGUuCisg Ki8KK3ZvaWQKK3BncGFfc2Nhbm5lcl9maW5pc2goeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXl5 bGV4X2Rlc3Ryb3koeXlzY2FubmVyKTsKK30KKworLyoKKyAqIEludGVyZmFjZSBmdW5jdGlvbnMg dG8gbWFrZSBmbGV4IHVzZSBwYWxsb2MoKSBpbnN0ZWFkIG9mIG1hbGxvYygpLgorICogSXQnZCBi ZSBiZXR0ZXIgdG8gbWFrZSB0aGVzZSBzdGF0aWMsIGJ1dCBmbGV4IGluc2lzdHMgb3RoZXJ3aXNl LgorICovCisKK3ZvaWQgKgoreXlhbGxvYyh5eV9zaXplX3Qgc2l6ZSwgeXlzY2FuX3QgeXlzY2Fu bmVyKQoreworCXJldHVybiBwYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQgKgoreXlyZWFsbG9jKHZv aWQgKnB0ciwgeXlfc2l6ZV90IHNpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpZiAocHRy KQorCQlyZXR1cm4gcmVwYWxsb2MocHRyLCBzaXplKTsKKwllbHNlCisJCXJldHVybiBwYWxsb2Mo c2l6ZSk7Cit9CisKK3ZvaWQKK3l5ZnJlZSh2b2lkICpwdHIsIHl5c2Nhbl90IHl5c2Nhbm5lcikK K3sKKwlpZiAocHRyKQorCQlwZnJlZShwdHIpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJv dmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWRiMTA3N2Q0ODcK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwpA QCAtMCwwICsxLDQ5MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV90cm92ZS5j CisgKgkgIEFsbCBvZiB0aGUgYWR2aWNlIGdpdmVuIGZvciBhIHBhcnRpY3VsYXIgcXVlcnksIGFw cHJvcHJpYXRlbHkKKyAqICAgIG9yZ2FuaXplZCBmb3IgY29udmVuaWVudCBhY2Nlc3MuCisgKgor ICogVGhpcyBuYW1lIGNvbWVzIGZyb20gdGhlIEVuZ2xpc2ggZXhwcmVzc2lvbiAidHJvdmUgb2Yg YWR2aWNlIiwgd2hpY2gKKyAqIG1lYW5zIGEgY29sbGVjdGlvbiBvZiB3aXNkb20uIFRoaXMgc2xp Z2h0bHkgdW51c3VhbCB0ZXJtIGlzIGNob3NlbiB0bworICogYXZvaWQgbmFtaW5nIGNvbmZ1c2lv bjsgZm9yIGV4YW1wbGUsICJjb2xsZWN0aW9uIG9mIGFkdmljZSIgd291bGQKKyAqIGludml0ZSBj b25mdXNpb24gd2l0aCBwZ3BhX2NvbGxlY3Rvci5jLiBOb3RlIHRoYXQsIHdoaWxlIHdlIGRvbid0 IGtub3cKKyAqIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGFkdmljZSBpcyBhY3R1YWxseSB3aXNlLCBp dCdzIG5vdCBvdXIgam9iIHRvCisgKiBxdWVzdGlvbiB0aGUgdXNlcidzIGNob2ljZXMuCisgKgor ICogVGhlIGdvYWwgb2YgdGhpcyBtb2R1bGUgaXMgdG8gbWFrZSBpdCBlYXN5IHRvIGxvY2F0ZSB0 aGUgc3BlY2lmaWMKKyAqIGJpdHMgb2YgYWR2aWNlIHRoYXQgcGVydGFpbiB0byBhbnkgZ2l2ZW4g cGFydCBvZiBhIHF1ZXJ5LCBvciB0bworICogZGV0ZXJtaW5lIHRoYXQgdGhlcmUgYXJlIG5vbmUu CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFi bGUuaCIKKworLyoKKyAqIEFuIGFkdmljZSB0cm92ZSBpcyBvcmdhbml6ZWQgaW50byBhIHNlcmll cyBvZiAic2xpY2VzIiwgZWFjaCBvZiB3aGljaAorICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJv dXQgb25lIHRvcGljIGUuZy4gc2NhbiBtZXRob2RzLiBFYWNoIHNsaWNlIGNvbnNpc3RzCisgKiBv ZiBhbiBhcnJheSBvZiB0cm92ZSBlbnRyaWVzIHBsdXMgYSBoYXNoIHRhYmxlIHRoYXQgd2UgY2Fu IHVzZSB0byBkZXRlcm1pbmUKKyAqIHdoaWNoIG9uZXMgYXJlIHJlbGV2YW50IHRvIGEgcGFydGlj dWxhciBwYXJ0IG9mIHRoZSBxdWVyeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9z bGljZQoreworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7CisJdW5zaWduZWQJbnVzZWQ7CisJcGdwYV90 cm92ZV9lbnRyeSAqZW50cmllczsKKwlzdHJ1Y3QgcGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNo OworfSBwZ3BhX3Ryb3ZlX3NsaWNlOworCisvKgorICogU2NhbiBhZHZpY2UgaXMgc3RvcmVkIGlu dG8gJ3NjYW4nOyBqb2luIGFkdmljZSBpcyBzdG9yZWQgaW50byAnam9pbic7IGFuZAorICogYWR2 aWNlIHRoYXQgY2FuIGFwcGx5IHRvIGJvdGggY2FzZXMgaXMgc3RvcmVkIGludG8gJ3JlbCcuIFRo aXMgbGV0cyBjYWxsZXJzCisgKiBhc2sganVzdCBmb3Igd2hhdCdzIHJlbGV2YW50LiBUaGVzZSBz bGljZXMgY29ycmVzcG9uZCB0byB0aGUgcG9zc2libGUgdmFsdWVzCisgKiBvZiBwZ3BhX3Ryb3Zl X2xvb2t1cF90eXBlLgorICovCitzdHJ1Y3QgcGdwYV90cm92ZQoreworCXBncGFfdHJvdmVfc2xp Y2Ugam9pbjsKKwlwZ3BhX3Ryb3ZlX3NsaWNlIHJlbDsKKwlwZ3BhX3Ryb3ZlX3NsaWNlIHNjYW47 Cit9OworCisvKgorICogV2UncmUgZ29pbmcgdG8gYnVpbGQgYSBoYXNoIHRhYmxlIHRvIGFsbG93 IGNsaWVudHMgb2YgdGhpcyBtb2R1bGUgdG8gZmluZAorICogcmVsZXZhbnQgYWR2aWNlIGZvciBh IGdpdmVuIHBhcnQgb2YgdGhlIHF1ZXJ5IHF1aWNrbHkuIEhvd2V2ZXIsIHdlJ3JlIGdvaW5nCisg KiB0byB1c2Ugb25seSB0aHJlZSBvZiB0aGUgZml2ZSBrZXkgZmllbGRzIGFzIGhhc2gga2V5cy4g VGhlcmUgYXJlIHR3byByZWFzb25zCisgKiBmb3IgdGhpcy4KKyAqCisgKiBGaXJzdCwgaXQncyBh bGxvd2FibGUgdG8gc2V0IHBhcnRpdGlvbl9zY2hlbWEgdG8gTlVMTCB0byBtYXRjaCBhIHBhcnRp dGlvbgorICogd2l0aCB0aGUgY29ycmVjdCBuYW1lIGluIGFueSBzY2hlbWEuCisgKgorICogU2Vj b25kLCB3ZSBleHBlY3QgdGhlICJvY2N1cnJlbmNlIiBhbmQgInBhcnRpdGlvbl9zY2hlbWEiIHBv cnRpb25zIG9mIHRoZQorICogcmVsYXRpb24gaWRlbnRpZmllcnMgdG8gYmUgbW9zdGx5IHVuaW50 ZXJlc3RpbmcuIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZQorICogb2NjdXJyZW5jZSBmaWVsZCB3aWxs IGJlIDEgYW5kIHRoZSBwYXJ0aXRpb25fc2NoZW1hIHZhbHVlcyB3aWxsIGFsbCBiZSB0aGUKKyAq IHNhbWUuIEV2ZW4gd2hlbiB0aGVyZSBpcyBzb21lIHZhcmlhdGlvbiwgdGhlIGFic29sdXRlIG51 bWJlciBvZiBlbnRyaWVzCisgKiB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWVzIGZvciBhbGwgdGhy ZWUgb2YgdGhlc2Uga2V5IGZpZWxkcyBzaG91bGQgYmUKKyAqIHF1aXRlIHNtYWxsLgorICovCit0 eXBlZGVmIHN0cnVjdAoreworCWNvbnN0IGNoYXIgKmFsaWFzX25hbWU7CisJY29uc3QgY2hhciAq cGFydGl0aW9uX25hbWU7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworfSBwZ3BhX3Ryb3ZlX2Vu dHJ5X2tleTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7 CisJaW50CQkJc3RhdHVzOworCUJpdG1hcHNldCAgKmluZGV4ZXM7Cit9IHBncGFfdHJvdmVfZW50 cnlfZWxlbWVudDsKKworc3RhdGljIHVpbnQzMiBwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2hfa2V5KHBn cGFfdHJvdmVfZW50cnlfa2V5IGtleSk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdwYV90cm92 ZV9lbnRyeV9jb21wYXJlX2tleShwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBhLCBwZ3BhX3Ryb3ZlX2Vu dHJ5X2tleSBiKQoreworCWlmIChzdHJjbXAoYS5hbGlhc19uYW1lLCBiLmFsaWFzX25hbWUpICE9 IDApCisJCXJldHVybiBmYWxzZTsKKworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwo YS5wYXJ0aXRpb25fbmFtZSwgYi5wYXJ0aXRpb25fbmFtZSkpCisJCXJldHVybiBmYWxzZTsKKwor CWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwoYS5wbGFuX25hbWUsIGIucGxhbl9uYW1l KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKyNkZWZpbmUgU0hfUFJF RklYCQkJcGdwYV90cm92ZV9lbnRyeQorI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJCXBncGFfdHJv dmVfZW50cnlfZWxlbWVudAorI2RlZmluZSBTSF9LRVlfVFlQRQkJCXBncGFfdHJvdmVfZW50cnlf a2V5CisjZGVmaW5lIFNIX0tFWQkJCQlrZXkKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtleSkJ cGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShrZXkpCisjZGVmaW5lCVNIX0VRVUFMKHRiLCBhLCBi KQlwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5KGEsIGIpCisjZGVmaW5lIFNIX1NDT1BFCQkJ c3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNIX0RFRklORQorI2lu Y2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKK3N0YXRpYyB2b2lkIHBncGFfaW5pdF90cm92ZV9z bGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UpOworc3RhdGljIHZvaWQgcGdwYV90cm92ZV9h ZGRfdG9fc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJCQkJcGdwYV9hZHZp Y2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJCQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOwor c3RhdGljIHZvaWQgcGdwYV90cm92ZV9hZGRfdG9faGFzaChwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2gg Kmhhc2gsCisJCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkg ICBpbnQgaW5kZXgpOworc3RhdGljIEJpdG1hcHNldCAqcGdwYV90cm92ZV9zbGljZV9sb29rdXAo cGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpy aWQpOworCisvKgorICogQnVpbGQgYSB0cm92ZSBvZiBhZHZpY2UgZnJvbSBhIGxpc3Qgb2YgYWR2 aWNlIGl0ZW1zLgorICoKKyAqIENhbGxlciBjYW4gb2J0YWluIGEgbGlzdCBvZiBhZHZpY2UgaXRl bXMgdG8gcGFzcyB0byB0aGlzIGZ1bmN0aW9uIGJ5CisgKiBjYWxsaW5nIHBncGFfcGFyc2UoKS4K KyAqLworcGdwYV90cm92ZSAqCitwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmljZV9pdGVtcykK K3sKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IHBhbGxvY19vYmplY3QocGdwYV90cm92ZSk7CisKKwlw Z3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5qb2luKTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xp Y2UoJnRyb3ZlLT5yZWwpOworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPnNjYW4pOwor CisJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfaXRlbSwgaXRlbSwgYWR2aWNlX2l0ZW1zKQorCXsK KwkJc3dpdGNoIChpdGVtLT50YWcpCisJCXsKKwkJCWNhc2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoK KwkJCQl7CisJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCisJCQkJCS8qCisJCQkJ CSAqIEZvciBtb3N0IGFkdmljZSB0eXBlcywgZWFjaCBlbGVtZW50IGluIHRoZSB0b3AtbGV2ZWwK KwkJCQkJICogbGlzdCBpcyBhIHNlcGFyYXRlIHRhcmdldCwgYnV0IGl0J3MgbW9zdCBjb252ZW5p ZW50IHRvCisJCQkJCSAqIHJlZ2FyZCB0aGUgZW50aXJldHkgb2YgYSBKT0lOX09SREVSIHNwZWNp ZmljYXRpb24gYXMgYQorCQkJCQkgKiBzaW5nbGUgdGFyZ2V0LiBTaW5jZSBpdCB3YXNuJ3QgcmVw cmVzZW50ZWQgdGhhdCB3YXkKKwkJCQkJICogZHVyaW5nIHBhcnNpbmcsIGJ1aWxkIGEgc3Vycm9n YXRlIG9iamVjdCBub3cuCisJCQkJCSAqLworCQkJCQl0YXJnZXQgPSBwYWxsb2MwX29iamVjdChw Z3BhX2FkdmljZV90YXJnZXQpOworCQkJCQl0YXJnZXQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JE RVJFRF9MSVNUOworCQkJCQl0YXJnZXQtPmNoaWxkcmVuID0gaXRlbS0+dGFyZ2V0czsKKworCQkJ CQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPmpvaW4sCisJCQkJCQkJCQkJCWl0ZW0t PnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfQklU TUFQX0hFQVBfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgorCQkJY2Fz ZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoKKwkJCWNh c2UgUEdQQV9UQUdfVElEX1NDQU46CisKKwkJCQkvKgorCQkJCSAqIFNjYW4gYWR2aWNlLgorCQkJ CSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50 YXJnZXRzKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yIG5vdywgYWxsIG9mIG91ciBzY2Fu IHR5cGVzIHRhcmdldCBzaW5nbGUgcmVsYXRpb25zLAorCQkJCQkgKiBidXQgaW4gdGhlIGZ1dHVy ZSB0aGlzIG1pZ2h0IG5vdCBiZSB0cnVlLCBlLmcuIGEgY3VzdG9tCisJCQkJCSAqIHNjYW4gY291 bGQgcmVwbGFjZSBhIGpvaW4uCisJCQkJCSAqLworCQkJCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9 PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKTsKKwkJCQkJcGdwYV90cm92ZV9hZGRfdG9fc2xpY2Uo JnRyb3ZlLT5zY2FuLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7CisJCQkJfQorCQkJ CWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCWNhc2UgUEdQQV9U QUdfSEFTSF9KT0lOOgorCQkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgor CQkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19ORVNU RURfTE9PUF9NQVRFUklBTElaRToKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0la RToKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQljYXNlIFBHUEFfVEFH X1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToK KworCQkJCS8qCisJCQkJICogSm9pbiBzdHJhdGVneSBhZHZpY2UuCisJCQkJICovCisJCQkJZm9y ZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJ eworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPmpvaW4sCisJCQkJCQkJCQkJ CWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQQV9U QUdfUEFSVElUSU9OV0lTRToKKwkJCWNhc2UgUEdQQV9UQUdfR0FUSEVSOgorCQkJY2FzZSBQR1BB X1RBR19HQVRIRVJfTUVSR0U6CisJCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoKKworCQkJCS8q CisJCQkJICogQWR2aWNlIGFib3V0IGEgUmVsT3B0SW5mbyByZWxldmFudCB0byBib3RoIHNjYW5z IGFuZCBqb2lucy4KKwkJCQkgKi8KKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQs IHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3Ns aWNlKCZ0cm92ZS0+cmVsLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7CisJCQkJfQor CQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHRyb3ZlOworfQorCisvKgorICogU2VhcmNo IGEgdHJvdmUgb2YgYWR2aWNlIGZvciByZWxldmFudCBlbnRyaWVzLgorICoKKyAqIEFsbCBwYXJh bWV0ZXJzIGFyZSBpbnB1dCBwYXJhbWV0ZXJzIGV4Y2VwdCBmb3IgKnJlc3VsdCwgd2hpY2ggaXMg YW4gb3V0cHV0CisgKiBwYXJhbWV0ZXIgdXNlZCB0byByZXR1cm4gcmVzdWx0cyB0byB0aGUgY2Fs bGVyLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX2xvb2t1cChwZ3BhX3Ryb3ZlICp0cm92ZSwgcGdw YV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCSAgaW50IG5yaWRzLCBwZ3BhX2lkZW50aWZp ZXIgKnJpZHMsIHBncGFfdHJvdmVfcmVzdWx0ICpyZXN1bHQpCit7CisJcGdwYV90cm92ZV9zbGlj ZSAqdHNsaWNlOworCUJpdG1hcHNldCAgKmluZGV4ZXM7CisKKwlBc3NlcnQobnJpZHMgPiAwKTsK KworCWlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4pCisJCXRzbGljZSA9ICZ0cm92 ZS0+c2NhbjsKKwllbHNlIGlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4pCisJCXRz bGljZSA9ICZ0cm92ZS0+am9pbjsKKwllbHNlCisJCXRzbGljZSA9ICZ0cm92ZS0+cmVsOworCisJ aW5kZXhlcyA9IHBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHRzbGljZSwgJnJpZHNbMF0pOworCWZv ciAoaW50IGkgPSAxOyBpIDwgbnJpZHM7ICsraSkKKwl7CisJCUJpdG1hcHNldCAgKm90aGVyX2lu ZGV4ZXM7CisKKwkJLyoKKwkJICogSWYgdGhlIGNhbGxlciBpcyBhc2tpbmcgYWJvdXQgdHdvIHJl bGF0aW9ucyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZQorCQkgKiBzYW1lIHN1YnF1ZXJ5LCB0aGV5 J3ZlIG1lc3NlZCB1cC4KKwkJICovCisJCUFzc2VydChzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVs bChyaWRzWzBdLnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkgIHJpZHNbaV0ucGxhbl9uYW1lKSk7CisK KwkJb3RoZXJfaW5kZXhlcyA9IHBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHRzbGljZSwgJnJpZHNb aV0pOworCQlpbmRleGVzID0gYm1zX3VuaW9uKGluZGV4ZXMsIG90aGVyX2luZGV4ZXMpOworCX0K KworCXJlc3VsdC0+ZW50cmllcyA9IHRzbGljZS0+ZW50cmllczsKKwlyZXN1bHQtPmluZGV4ZXMg PSBpbmRleGVzOworfQorCisvKgorICogUmV0dXJuIGFsbCBlbnRyaWVzIGluIGEgdHJvdmUgc2xp Y2UgdG8gdGhlIGNhbGxlci4KKyAqCisgKiBUaGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBhcmUgaW5w dXQgYXJndW1lbnRzLCBhbmQgdGhlIHJlbWFpbmRlciBhcmUgb3V0cHV0CisgKiBhcmd1bWVudHMu CisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfbG9va3VwX2FsbChwZ3BhX3Ryb3ZlICp0cm92ZSwgcGdw YV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKiplbnRy aWVzLCBpbnQgKm5lbnRyaWVzKQoreworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGljZTsKKworCWlm ICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+c2Nh bjsKKwllbHNlIGlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4pCisJCXRzbGljZSA9 ICZ0cm92ZS0+am9pbjsKKwllbHNlCisJCXRzbGljZSA9ICZ0cm92ZS0+cmVsOworCisJKmVudHJp ZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJKm5lbnRyaWVzID0gdHNsaWNlLT5udXNlZDsKK30KKwor LyoKKyAqIENvbnZlcnQgYSB0cm92ZSBlbnRyeSB0byBhbiBpdGVtIG9mIHBsYW4gYWR2aWNlIHRo YXQgd291bGQgcHJvZHVjZSBpdC4KKyAqLworY2hhciAqCitwZ3BhX2NzdHJpbmdfdHJvdmVfZW50 cnkocGdwYV90cm92ZV9lbnRyeSAqZW50cnkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJ aW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJXMiLCBwZ3Bh X2NzdHJpbmdfYWR2aWNlX3RhZyhlbnRyeS0+dGFnKSk7CisKKwkvKiBKT0lOX09SREVSIHRhZ3Mg YXJlIHRyYW5zZm9ybWVkIGJ5IHBncGFfYnVpbGRfdHJvdmU7IHVuZG8gdGhhdCBoZXJlICovCisJ aWYgKGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoJmJ1ZiwgJygnKTsKKwllbHNlCisJCUFzc2VydChlbnRyeS0+dGFyZ2V0LT50dHlwZSA9 PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCisJcGdwYV9mb3JtYXRfYWR2aWNlX3Rhcmdl dCgmYnVmLCBlbnRyeS0+dGFyZ2V0KTsKKworCWlmIChlbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9 IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnICcpOworCQlwZ3BhX2Zv cm1hdF9pbmRleF90YXJnZXQoJmJ1ZiwgZW50cnktPnRhcmdldC0+aXRhcmdldCk7CisJfQorCisJ aWYgKGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoJmJ1ZiwgJyknKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KKworLyoKKyAqIFNldCBQ R1BBX1RFXyogZmxhZ3Mgb24gYSBzZXQgb2YgdHJvdmUgZW50cmllcy4KKyAqLwordm9pZAorcGdw YV90cm92ZV9zZXRfZmxhZ3MocGdwYV90cm92ZV9lbnRyeSAqZW50cmllcywgQml0bWFwc2V0ICpp bmRleGVzLCBpbnQgZmxhZ3MpCit7CisJaW50CQkJaSA9IC0xOworCisJd2hpbGUgKChpID0gYm1z X25leHRfbWVtYmVyKGluZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAq ZW50cnkgPSAmZW50cmllc1tpXTsKKworCQllbnRyeS0+ZmxhZ3MgfD0gZmxhZ3M7CisJfQorfQor CisvKgorICogQWRkIGEgbmV3IGFkdmljZSB0YXJnZXQgdG8gYW4gZXhpc3RpbmcgcGdwYV90cm92 ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19zbGlj ZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0 YWcsCisJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlwZ3BhX3Ryb3ZlX2Vu dHJ5ICplbnRyeTsKKworCWlmICh0c2xpY2UtPm51c2VkID49IHRzbGljZS0+bmFsbG9jYXRlZCkK Kwl7CisJCWludAkJCW5ld19hbGxvY2F0ZWQ7CisKKwkJbmV3X2FsbG9jYXRlZCA9IHRzbGljZS0+ bmFsbG9jYXRlZCAqIDI7CisJCXRzbGljZS0+ZW50cmllcyA9IHJlcGFsbG9jX2FycmF5KHRzbGlj ZS0+ZW50cmllcywgcGdwYV90cm92ZV9lbnRyeSwKKwkJCQkJCQkJCQkgbmV3X2FsbG9jYXRlZCk7 CisJCXRzbGljZS0+bmFsbG9jYXRlZCA9IG5ld19hbGxvY2F0ZWQ7CisJfQorCisJZW50cnkgPSAm dHNsaWNlLT5lbnRyaWVzW3RzbGljZS0+bnVzZWRdOworCWVudHJ5LT50YWcgPSB0YWc7CisJZW50 cnktPnRhcmdldCA9IHRhcmdldDsKKwllbnRyeS0+ZmxhZ3MgPSAwOworCisJcGdwYV90cm92ZV9h ZGRfdG9faGFzaCh0c2xpY2UtPmhhc2gsIHRhcmdldCwgdHNsaWNlLT5udXNlZCk7CisKKwl0c2xp Y2UtPm51c2VkKys7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIGhhc2ggdGFibGUgZm9yIGEgbmV3 bHktYWRkZWQgYWR2aWNlIHRhcmdldC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJvdmVfYWRk X3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLCBwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCwKKwkJCQkJICAgaW50IGluZGV4KQoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtl eTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJYm9vbAkJZm91bmQ7CisK KwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBhZGQgZW50cmllcyBmb3IgYWxsIGRlc2NlbmRlbnRz LiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJewor CQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5j aGlsZHJlbikKKwkJeworCQkJcGdwYV90cm92ZV9hZGRfdG9faGFzaChoYXNoLCBjaGlsZF90YXJn ZXQsIGluZGV4KTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyogU2FuaXR5IGNoZWNrcy4gKi8K KwlBc3NlcnQodGFyZ2V0LT5yaWQub2NjdXJyZW5jZSA+IDApOworCUFzc2VydCh0YXJnZXQtPnJp ZC5hbGlhc19uYW1lICE9IE5VTEwpOworCisJLyogQWRkIGFuIGVudHJ5IGZvciB0aGlzIHJlbGF0 aW9uIGlkZW50aWZpZXIuICovCisJa2V5LmFsaWFzX25hbWUgPSB0YXJnZXQtPnJpZC5hbGlhc19u YW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHRhcmdldC0+cmlkLnBhcnRyZWw7CisJa2V5LnBs YW5fbmFtZSA9IHRhcmdldC0+cmlkLnBsYW5fbmFtZTsKKwllbGVtZW50ID0gcGdwYV90cm92ZV9l bnRyeV9pbnNlcnQoaGFzaCwga2V5LCAmZm91bmQpOworCWlmICghZm91bmQpCisJCWVsZW1lbnQt PmluZGV4ZXMgPSBOVUxMOworCWVsZW1lbnQtPmluZGV4ZXMgPSBibXNfYWRkX21lbWJlcihlbGVt ZW50LT5pbmRleGVzLCBpbmRleCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUg YSBuZXcgcGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2lu aXRfdHJvdmVfc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlKQoreworCS8qCisJICogSW4g YW4gaWRlYWwgd29ybGQsIHdlJ2xsIG1ha2UgdHNsaWNlLT5uYWxsb2NhdGVkIGJpZyBlbm91Z2gg dGhhdCB0aGUKKwkgKiBhcnJheSBhbmQgaGFzaCB0YWJsZSB3aWxsIGJlIGxhcmdlIGVub3VnaCB0 byBjb250YWluIHRoZSBudW1iZXIgb2YKKwkgKiBhZHZpY2UgaXRlbXMgaW4gdGhpcyB0cm92ZSBz bGljZSwgYnV0IGEgZ2VuZXJvdXMgZGVmYXVsdCB2YWx1ZSBpcyBub3QKKwkgKiBnb29kIGZvciBw ZXJmb3JtYW5jZSwgYmVjYXVzZSBwZ3BhX2luaXRfdHJvdmVfc2xpY2UoKSBoYXMgdG8gemVybyBh bgorCSAqIGFtb3VudCBvZiBtZW1vcnkgcHJvcG9ydGlvbmFsIHRvIHRzbGljZS0+bmFsbG9jYXRl ZC4gSGVuY2UsIHdlIGtlZXAgdGhlCisJICogc3RhcnRpbmcgdmFsdWUgcXVpdGUgc21hbGwsIG9u IHRoZSB0aGVvcnkgdGhhdCBhZHZpY2Ugc3RyaW5ncyB3aWxsCisJICogb2Z0ZW4gYmUgcmVsYXRp dmVseSBzaG9ydC4KKwkgKi8KKwl0c2xpY2UtPm5hbGxvY2F0ZWQgPSAxNjsKKwl0c2xpY2UtPm51 c2VkID0gMDsKKwl0c2xpY2UtPmVudHJpZXMgPSBwYWxsb2NfYXJyYXkocGdwYV90cm92ZV9lbnRy eSwgdHNsaWNlLT5uYWxsb2NhdGVkKTsKKwl0c2xpY2UtPmhhc2ggPSBwZ3BhX3Ryb3ZlX2VudHJ5 X2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkgICB0c2xpY2UtPm5hbGxv Y2F0ZWQsIE5VTEwpOworfQorCisvKgorICogRmFzdCBoYXNoIGZ1bmN0aW9uIGZvciBhIGtleSBj b25zaXN0aW5nIG9mIGFsaWFzX25hbWUsIHBhcnRpdGlvbl9uYW1lLAorICogYW5kIHBsYW5fbmFt ZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ry b3ZlX2VudHJ5X2tleSBrZXkpCit7CisJZmFzdGhhc2hfc3RhdGUgaHM7CisJaW50CQkJc3BfbGVu OworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOworCisJLyogYWxpYXNfbmFtZSBtYXkgbm90IGJl IE5VTEwgKi8KKwlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LmFsaWFz X25hbWUpOworCisJLyogcGFydGl0aW9uX25hbWUgYW5kIHBsYW5fbmFtZSwgaG93ZXZlciwgY2Fu IGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBhcnRpdGlvbl9uYW1lICE9IE5VTEwpCisJCXNwX2xlbiAr PSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBhcnRpdGlvbl9uYW1lKTsKKwlpZiAo a2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4gKz0gZmFzdGhhc2hfYWNjdW1fY3N0cmlu ZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyoKKwkgKiBoYXNoZm5fdW5zdGFibGUuaCByZWNv bW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdlYWsuIEl0J3Mgbm90CisJICogY2xlYXIg dG8gbWUgd2hhdCB0byBkbyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RyaW5ncywgc28gZm9yIG5v dyBJJ20KKwkgKiBqdXN0IHVzaW5nIHRoZSB0b3RhbCBvZiBhbGwgb2YgdGhlIGxlbmd0aHMuCisJ ICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQorCisvKgorICog TG9vayBmb3IgbWF0Y2hpbmcgZW50cmllcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwZ3Bh X3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsIHBncGFfaWRlbnRp ZmllciAqcmlkKQoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlwZ3BhX3Ryb3ZlX2Vu dHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVMTDsKKworCUFz c2VydChyaWQtPm9jY3VycmVuY2UgPj0gMSk7CisKKwlrZXkuYWxpYXNfbmFtZSA9IHJpZC0+YWxp YXNfbmFtZTsKKwlrZXkucGFydGl0aW9uX25hbWUgPSByaWQtPnBhcnRyZWw7CisJa2V5LnBsYW5f bmFtZSA9IHJpZC0+cGxhbl9uYW1lOworCisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50cnlfbG9v a3VwKHRzbGljZS0+aGFzaCwga2V5KTsKKworCWlmIChlbGVtZW50ICE9IE5VTEwpCisJeworCQlp bnQJCQlpID0gLTE7CisKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGVsZW1lbnQtPmlu ZGV4ZXMsIGkpKSA+PSAwKQorCQl7CisJCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZ0c2xp Y2UtPmVudHJpZXNbaV07CisKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoYXQgdGhpcyB0YXJnZXQg b3Igb25lIG9mIGl0cyBkZXNjZW5kZW50cyBtYXRjaGVzIHRoZQorCQkJICogaWRlbnRpZmllciBv biB0aGUgdGhyZWUga2V5IGZpZWxkcyBhYm92ZSwgYnV0IHdlIGRvbid0IGtub3cKKwkJCSAqIHdo aWNoIGRlc2NlbmRlbnQgb3Igd2hldGhlciB0aGUgb2NjdXJlbmNlIGFuZCBzY2hlbWEgYWxzbwor CQkJICogbWF0Y2guCisJCQkgKi8KKwkJCWlmIChwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJn ZXQocmlkLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1 bHQsIGkpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3Ryb3ZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3OWMz Zjc1Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ry b3ZlLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf dHJvdmUuaAorICoJICBBbGwgb2YgdGhlIGFkdmljZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1 ZXJ5LCBhcHByb3ByaWF0ZWx5CisgKiAgICBvcmdhbml6ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNz LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3Zl LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1RST1ZFX0gKKyNk ZWZpbmUgUEdQQV9UUk9WRV9ICisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorCisjaW5jbHVkZSAi bm9kZXMvYml0bWFwc2V0LmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmUgcGdwYV90cm92 ZTsKKworLyoKKyAqIEZsYWdzIHRoYXQgY2FuIGJlIHNldCBvbiBhIHBncGFfdHJvdmVfZW50cnkg dG8gaW5kaWNhdGUgd2hhdCBoYXBwZW5lZCB3aGVuCisgKiB0cnlpbmcgdG8gcGxhbiB1c2luZyBh ZHZpY2UuCisgKgorICogUEdQQV9URV9NQVRDSF9QQVJUSUFMIG1lYW5zIHRoYXQgd2UgZm91bmQg c29tZSBwYXJ0IG9mIHRoZSBxdWVyeSB0aGF0IGF0CisgKiBsZWFzdCBwYXJ0aWFsbHkgbWF0Y2hl ZCB0aGUgdGFyZ2V0OyBlLmcuIGdpdmVuIEpPSU5fT1JERVIoYSBiKSwgdGhpcyB3b3VsZAorICog YmUgc2V0IGlmIHdlIGV2ZXIgc2F3IGFueSBqb2lucmVsIGluY2x1ZGluZyBlaXRoZXIgImEiIG9y ICJiIi4KKyAqCisgKiBQR1BBX1RFX01BVENIX0ZVTEwgbWVhbnMgdGhhdCB3ZSBmb3VuZCBhbiBl eGFjdCBtYXRjaCBmb3IgdGhlIHRhcmdldDsgZS5nLgorICogZ2l2ZW4gSk9JTl9PUkRFUihhIGIp LCB0aGlzIHdvdWxkIGJlIHNldCBpZiB3ZSBzYXcgYSBqb2lucmVsIGNvbnRhaW5pbmcKKyAqIGV4 YWN0bHkgImEiIGFuZCAiYiIgYW5kIG5vdGhpbmcgZWxzZS4KKyAqCisgKiBQR1BBX1RFX0lOQVBQ TElDQUJMRSBtZWFucyB0aGF0IHRoZSBhZHZpY2UgZG9lc24ndCBwcm9wZXJseSBhcHBseSB0byB0 aGUKKyAqIHRhcmdldDsgZS5nLiBJTkRFWF9TQ0FOKGZvbyBiYXJfaWR4KSB3b3VsZCBiZSBzbyBt YXJrZWQgaWYgYmFyX2lkeCBkb2VzIG5vdAorICogZXhpc3Qgb24gZm9vLiBUaGUgZmFjdCB0aGF0 IHRoaXMgYml0IGhhcyBiZWVuIHNldCBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlCisgKiBhZHZpY2Ug aGFkIG5vIGVmZmVjdC4KKyAqCisgKiBQR1BBX1RFX0NPTkZMSUNUSU5HIG1lYW5zIHRoYXQgYSBj b25mbGljdCB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiB3aGF0IHRoaXMKKyAqIGFkdmljZSB3YW50cyBh bmQgd2hhdCBzb21lIG90aGVyIHBsYW4gYWR2aWNlIHdhbnRzOyBlLmcuIEpPSU5fT1JERVIoYSBi KQorICogd291bGQgY29uZmxpY3Qgd2l0aCBIQVNIX0pPSU4oYSksIGJlY2F1c2UgdGhlIGZvcm1l ciByZXF1aXJlcyAiYSIgdG8gYmUgdGhlCisgKiBvdXRlciB0YWJsZSB3aGlsZSB0aGUgbGF0dGVy IHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBpbm5lciB0YWJsZS4KKyAqCisgKiBQR1BBX1RFX0ZBSUxF RCBtZWFucyB0aGF0IHRoZSByZXN1bHRpbmcgcGxhbiBkaWQgbm90IGNvbmZvcm0gdG8gdGhlIGFk dmljZS4KKyAqLworI2RlZmluZSBQR1BBX1RFX01BVENIX1BBUlRJQUwJCTB4MDAwMQorI2RlZmlu ZSBQR1BBX1RFX01BVENIX0ZVTEwJCQkweDAwMDIKKyNkZWZpbmUgUEdQQV9URV9JTkFQUExJQ0FC TEUJCTB4MDAwNAorI2RlZmluZSBQR1BBX1RFX0NPTkZMSUNUSU5HCQkJMHgwMDA4CisjZGVmaW5l IFBHUEFfVEVfRkFJTEVECQkJCTB4MDAxMAorCisvKgorICogRWFjaCBlbnRyeSBpbiBhIHRyb3Zl IG9mIGFkdmljZSByZXByZXNlbnRzIHRoZSBhcHBsaWNhdGlvbiBvZiBhIHRhZyB0bworICogYSBz aW5nbGUgdGFyZ2V0LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5Cit7CisJ cGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0Owor CWludAkJCWZsYWdzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5OworCisvKgorICogV2hhdCBraW5kIG9m IGluZm9ybWF0aW9uIGRvZXMgdGhlIGNhbGxlciB3YW50IHRvIGZpbmQgaW4gYSB0cm92ZT8KKyAq CisgKiBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIHNjYW4g YWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4gbWVhbnMgd2UncmUgbG9va2lu ZyBmb3Igam9pbi1yZWxhdGVkIGFkdmljZS4KKyAqIFRoaXMgaW5jbHVkZXMgam9pbiBvcmRlciBh ZHZpY2UsIGpvaW4gbWV0aG9kIGFkdmljZSwgYW5kIHNlbWlqb2luLXVuaXF1ZW5lc3MKKyAqIGFk dmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9SRUwgbWVhbnMgd2UncmUgbG9va2luZyBm b3IgZ2VuZXJhbCBhZHZpY2UgYWJvdXQgdGhpcworICogYSBSZWxPcHRJbmZvIHRoYXQgbWF5IGNv cnJlc3BvbmQgdG8gZWl0aGVyIGEgc2NhbiBvciBhIGpvaW4uIFRoaXMgaW5jbHVkZXMKKyAqIGdh dGhlci1yZWxhdGVkIGFkdmljZSBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuIE5vdGUgdGhhdCBw YXJ0aXRpb253aXNlCisgKiBhZHZpY2UgbWlnaHQgc2VlbSBsaWtlIGpvaW4gYWR2aWNlLCBidXQg dGhhdCdzIG5vdCBhIGhlbHBmdWwgd2F5IG9mIHZpZXdpbmcKKyAqIHRoZSBtYXR0ZXIgYmVjYXVz ZSAoMSkgcGFydGl0aW9ud2lzZSBhZHZpY2UgaXMgYWxzbyByZWxldmFudCBhdCB0aGUgc2Nhbgor ICogbGV2ZWwgYW5kICgyKSBvdGhlciB0eXBlcyBvZiBqb2luIGFkdmljZSBhZmZlY3Qgb25seSB3 aGF0IHRvIGRvIGZyb20KKyAqIGpvaW5fcGF0aF9zZXR1cF9ob29rLCBidXQgcGFydGl0aW9ud2lz ZSBhZHZpY2UgYWZmZWN0cyB3aGF0IHRvIGRvIGluCisgKiBqb2lucmVsX3NldHVwX2hvb2suCisg Ki8KK3R5cGVkZWYgZW51bSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCit7CisJUEdQQV9UUk9WRV9M T09LVVBfSk9JTiwKKwlQR1BBX1RST1ZFX0xPT0tVUF9SRUwsCisJUEdQQV9UUk9WRV9MT09LVVBf U0NBTgorfSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlOworCisvKgorICogVGhpcyBzdHJ1Y3QgaXMg dXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIGEgdHJvdmUgbG9va3VwLiBGb3IgZWFjaCBtZW1i ZXIKKyAqIG9mICJpbmRleGVzIiwgdGhlIGVudHJ5IGF0IHRoZSBjb3JyZXNwb25kaW5nIG9mZnNl dCB3aXRoaW4gImVudHJpZXMiIGlzIG9uZQorICogb2YgdGhlIHJlc3VsdHMuCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBncGFfdHJvdmVfcmVzdWx0Cit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cmll czsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX3Jlc3VsdDsKKworZXh0ZXJu IHBncGFfdHJvdmUgKnBncGFfYnVpbGRfdHJvdmUoTGlzdCAqYWR2aWNlX2l0ZW1zKTsKK2V4dGVy biB2b2lkIHBncGFfdHJvdmVfbG9va3VwKHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSAgcGdw YV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCSAgaW50IG5yaWRzLAorCQkJCQkJCSAg cGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9yZXN1bHQgKnJlc3Vs dCk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJvdmUs CisJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCQkgIHBncGFf dHJvdmVfZW50cnkgKiplbnRyaWVzLAorCQkJCQkJCQkgIGludCAqbmVudHJpZXMpOworZXh0ZXJu IGNoYXIgKnBncGFfY3N0cmluZ190cm92ZV9lbnRyeShwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSk7 CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRy aWVzLAorCQkJCQkJCQkgQml0bWFwc2V0ICppbmRleGVzLCBpbnQgZmxhZ3MpOworCisjZW5kaWYK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uMjEwZDMwODkxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKQEAgLTAsMCArMSwxMDA2IEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5jCisgKgkgIFBsYW4gdHJlZSBpdGVyYXRpb24K KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUg InBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRl ICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0 YXRpYyB2b2lkIHBncGFfd2Fsa19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0s CisJCQkJCQkJCSAgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkJCQkg IExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBib29sIGJlbmVhdGhfYW55 X2dhdGhlcik7CitzdGF0aWMgQml0bWFwc2V0ICpwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbihw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJIHBncGFfdW5yb2xs ZWRfam9pbiAqdWpvaW4pOworCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICpwZ3BhX2FkZF9m ZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQlwZ3Bh X3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkJUGxhbiAqcGxhbik7CisKK3N0YXRpYyB2b2lkIHBn cGFfcWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEluZGV4IHJ0aSk7Citz dGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywg Qml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIHZvaWQgcGdwYV9xZl9hZGRfcGxhbl9ydGlzKExp c3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxhbiAqcGxhbiwKKwkJCQkJCQkJICBMaXN0ICpy dGFibGUpOworCitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMocGdw YV91bnJvbGxlZF9qb2luICp1am9pbiwKKwkJCQkJCQkJCQkgICBJbmRleCBydGFibGVfbGVuZ3Ro LAorCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJ CQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCQkJICAgYm9vbCB0b3Bs ZXZlbCk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVy KHBncGFfam9pbl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCQkJCSAgSW5kZXggcnRhYmxlX2xl bmd0aCwKKwkJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJ CQkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworc3RhdGljIHBncGFfc2Nh biAqcGdwYV93YWxrZXJfZmluZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2Vy LAorCQkJCQkJCQkJCXBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCQlCaXRt YXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9pbmRleF90YXJnZXRfbWF0 Y2hlc19wbGFuKHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0LAorCQkJCQkJCQkJCQkJICBQbGFu ICpwbGFuKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJIHBncGFfcWZfdHlwZSB0eXBl LAorCQkJCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtl cl9jb250YWluc19qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJ CQkJICBwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkgIEJpdG1hcHNldCAq cmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJl bGlkcyk7CisKKy8qCisgKiBUb3AtbGV2ZWwgZW50cnlwb2ludCBmb3IgdGhlIHBsYW4gdHJlZSB3 YWxrLgorICoKKyAqIFBvcHVsYXRlcyB3YWxrZXIgYmFzZWQgb24gYSB0cmF2ZXJzYWwgb2YgdGhl IFBsYW4gdHJlZXMgaW4gcHN0bXQuCisgKgorICogc2pfdW5pcXVlX3JlbHMgaXMgYSBsaXN0IG9m IHBncGFfc2pfdW5pcXVlX3JlbCBvYmplY3RzLCBvbmUgZm9yIGVhY2gKKyAqIHJlbGF0aW9uIHdl IGNvbnNpZGVyZWQgbWFraW5nIHVuaXF1ZSBhcyBwYXJ0IG9mIHNlbWlqb2luIHBsYW5uaW5nLgor ICovCit2b2lkCitwZ3BhX3BsYW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLCBQbGFubmVkU3RtdCAqcHN0bXQsCisJCQkJIExpc3QgKnNqX3VuaXF1ZV9yZWxzKQorewor CUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKnNqX3VuaXF1ZV9ydGlzID0gTlVMTDsKKwlMaXN0 CSAgICpzal9ub251bmlxdWVfcWZzID0gTlVMTDsKKworCS8qIEluaXRpYWxpemF0aW9uLiAqLwor CW1lbXNldCh3YWxrZXIsIDAsIHNpemVvZihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQpKTsKKwl3 YWxrZXItPnBzdG10ID0gcHN0bXQ7CisKKwkvKiBXYWxrIHRoZSBtYWluIHBsYW4gdHJlZS4gKi8K KwlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwc3RtdC0+cGxhblRyZWUsIDAsIE5VTEws IE5JTCwgZmFsc2UpOworCisJLyogTWFpbiBwbGFuIHRyZWUgd2FsayB3b24ndCByZWFjaCBzdWJw bGFucywgc28gd2FsayB0aG9zZS4gKi8KKwlmb3JlYWNoKGxjLCBwc3RtdC0+c3VicGxhbnMpCisJ eworCQlQbGFuCSAgICpwbGFuID0gbGZpcnN0KGxjKTsKKworCQlpZiAocGxhbiAhPSBOVUxMKQor CQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcGxhbiwgMCwgTlVMTCwgTklMLCBmYWxz ZSk7CisJfQorCisJLyogQWRqdXN0IFJUSXMgZnJvbSBzal91bmlxdWVfcmVscyBmb3IgdGhlIGZs YXR0ZW5lZCByYW5nZSB0YWJsZS4gKi8KKwlmb3JlYWNoX3B0cihwZ3BhX3NqX3VuaXF1ZV9yZWws IHVyLCBzal91bmlxdWVfcmVscykKKwl7CisJCWludAkJCXJ0aW5kZXggPSAtMTsKKwkJaW50CQkJ cnRvZmZzZXQgPSAwOworCQlib29sCQlkdW1teSA9IGZhbHNlOworCQlCaXRtYXBzZXQgICpyZWxp ZHMgPSBOVUxMOworCisJCS8qIElmIHRoaXMgaXMgYSBzdWJwbGFuLCBmaW5kIHRoZSByYW5nZSB0 YWJsZSBvZmZzZXQuICovCisJCWlmICh1ci0+cGxhbl9uYW1lICE9IE5VTEwpCisJCXsKKwkJCWZv cmVhY2hfbm9kZShTdWJQbGFuUlRJbmZvLCBydGluZm8sIHBzdG10LT5zdWJydGluZm9zKQorCQkJ eworCQkJCWlmIChzdHJjbXAodXItPnBsYW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDAp CisJCQkJeworCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CisJCQkJCWR1bW15ID0g cnRpbmZvLT5kdW1teTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAocnRvZmZz ZXQgPT0gMCkKKwkJCQllbG9nKEVSUk9SLCAibm8gcnRvZmZzZXQgZm9yIHBsYW4gJXMiLCB1ci0+ cGxhbl9uYW1lKTsKKwkJfQorCisJCS8qIElmIHRoaXMgZW50cnkgcGVydGFpbnMgdG8gYSBkdW1t eSBzdWJxdWVyeSwgaWdub3JlIGl0LiAqLworCQlpZiAoZHVtbXkpCisJCQljb250aW51ZTsKKwor CQkvKiBPZmZzZXQgZWFjaCBlbnRyeSBmcm9tIHRoZSBvcmlnaW5hbCBzZXQuICovCisJCXdoaWxl ICgocnRpbmRleCA9IGJtc19uZXh0X21lbWJlcih1ci0+cmVsaWRzLCBydGluZGV4KSkgPj0gMCkK KwkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgcnRpbmRleCArIHJ0b2Zmc2V0KTsK KworCQkvKiBTdG9yZSB0aGUgcmVzdWx0aW5nIHNldC4gKi8KKwkJc2pfdW5pcXVlX3J0aXMgPSBs YXBwZW5kKHNqX3VuaXF1ZV9ydGlzLCByZWxpZHMpOworCX0KKworCS8qCisJICogUmVtb3ZlIGFu eSBub24tdW5pcXVlIHNlbWpvaW4gcXVlcnkgZmVhdHVyZXMgZm9yIHdoaWNoIG1ha2luZyB0aGUg cmVsCisJICogdW5pcXVlIHdhc24ndCBjb25zaWRlcmVkLgorCSAqLworCWZvcmVhY2hfcHRyKHBn cGFfcXVlcnlfZmVhdHVyZSwgcWYsCisJCQkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZf U0VNSUpPSU5fTk9OX1VOSVFVRV0pCisJeworCQlpZiAobGlzdF9tZW1iZXIoc2pfdW5pcXVlX3J0 aXMsIHFmLT5yZWxpZHMpKQorCQkJc2pfbm9udW5pcXVlX3FmcyA9IGxhcHBlbmQoc2pfbm9udW5p cXVlX3FmcywgcWYpOworCX0KKwl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9J Tl9OT05fVU5JUVVFXSA9IHNqX25vbnVuaXF1ZV9xZnM7CisKKwkvKgorCSAqIElmIHdlIGZpbmQg YW55IGNhc2VzIHdoZXJlIGFuYWx5c2lzIG9mIHRoZSBQbGFuIHRyZWUgc2hvd3MgdGhhdCB0aGUK KwkgKiBzZW1pam9pbiB3YXMgbWFkZSB1bmlxdWUgYnV0IHRoaXMgcG9zc2liaWxpdHkgd2FzIG5l dmVyIG9ic2VydmVkIHRvIGJlCisJICogY29uc2lkZXJlZCBkdXJpbmcgcGxhbm5pbmcsIHRoZW4g d2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUuCisJICovCisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9m ZWF0dXJlLCBxZiwKKwkJCQl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9V TklRVUVdKQorCXsKKwkJaWYgKCFsaXN0X21lbWJlcihzal91bmlxdWVfcnRpcywgcWYtPnJlbGlk cykpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkJaW5pdFN0cmluZ0luZm8oJmJ1 Zik7CisJCQlvdXRCaXRtYXBzZXQoJmJ1ZiwgcWYtPnJlbGlkcyk7CisJCQllbG9nKEVSUk9SLAor CQkJCSAidW5pcXVlIHNlbWlqb2luIGZvdW5kIGZvciByZWxpZHMgJXMgYnV0IG5vdCBvYnNlcnZl ZCBkdXJpbmcgcGxhbm5pbmciLAorCQkJCSBidWYuZGF0YSk7CisJCX0KKwl9Cit9CisKKy8qCisg KiBNYWluIHdvcmtob3JzZSBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIElmIHdpdGhp bl9qb2luX3Byb2JsZW0gaXMgdHJ1ZSwgd2UgZW5jb3VudGVyZWQgYSBqb2luIGF0IHNvbWUgaGln aGVyIGxldmVsCisgKiBvZiB0aGUgdHJlZSB3YWxrIGFuZCBoYXZlbid0IHlldCBkZXNjZW5kZWQg b3V0IG9mIHRoZSBwb3J0aW9uIG9mIHRoZSBwbGFuCisgKiB0cmVlIHRoYXQgaXMgcGFydCBvZiB0 aGF0IHNhbWUgam9pbiBwcm9ibGVtLiBXZSdyZSBubyBsb25nZXIgaW4gdGhlIHNhbWUKKyAqIGpv aW4gcHJvYmxlbSBpZiAoMSkgd2UgY3Jvc3MgaW50byBhIGRpZmZlcmVudCBzdWJxdWVyeSBvciAo Mikgd2UgZGVzY2VuZAorICogdGhyb3VnaCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSwg YmVsb3cgd2hpY2ggYW55IGZ1cnRoZXIgam9pbnMgd291bGQKKyAqIGJlIHBhcnRpdGlvbndpc2Ug am9pbnMgcGxhbm5lZCBzZXBhcmF0ZWx5IGZyb20gdGhlIG91dGVyIGpvaW4gcHJvYmxlbS4KKyAq CisgKiBJZiBqb2luX3Vucm9sbGVyICE9IE5VTEwsIHRoZSBqb2luIHVucm9sbGVyIGNvZGUgZXhw ZWN0cyB1cyB0byBmaW5kIGEgam9pbgorICogdGhhdCBzaG91bGQgYmUgdW5yb2xsZWQgaW50byB0 aGF0IG9iamVjdC4gVGhpcyBpbXBsaWVzIHRoYXQgd2UncmUgd2l0aGluIGEKKyAqIGpvaW4gcHJv YmxlbSwgYnV0IHRoZSByZXZlcnNlIGlzIG5vdCB0cnVlOiB3aGVuIHdlJ3ZlIHRyYXZlcnNlZCBh bGwgdGhlCisgKiBqb2lucyBidXQgYXJlIHN0aWxsIGxvb2tpbmcgZm9yIHRoZSBzY2FuIHRoYXQg aXMgdGhlIGxlYWYgb2YgdGhlIGpvaW4gdHJlZSwKKyAqIGpvaW5fdW5yb2xsZXIgd2lsbCBiZSBO VUxMIGJ1dCB3aXRoaW5fam9pbl9wcm9ibGVtIHdpbGwgYmUgdHJ1ZS4KKyAqCisgKiBFYWNoIGVs ZW1lbnQgb2YgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzIGNvcnJlc3BvbmRzIHRvIHNvbWUgaXRlbSBv ZiBhZHZpY2UKKyAqIHRoYXQgbmVlZHMgdG8gZW51bWVyYXRlIGFsbCB0aGUgcmVsYXRpb25zIGl0 IGFmZmVjdHMuIFdlIGFkZCBSVElzIHdlIGZpbmQKKyAqIGR1cmluZyB0cmVlIHRyYXZlcnNhbCB0 byBlYWNoIG9mIHRoZXNlIHF1ZXJ5IGZlYXR1cmVzLgorICoKKyAqIElmIGJlbmVhdGhfYW55X2dh dGhlciA9PSB0cnVlLCBzb21lIGhpZ2hlciBsZXZlbCBvZiB0aGUgdHJlZSB0cmF2ZXJzYWwgZm91 bmQKKyAqIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9pZAor cGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQ bGFuICpwbGFuLAorCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJICBwZ3Bh X2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5 X2ZlYXR1cmVzLAorCQkJCQkgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyKQoreworCXBncGFfam9p bl91bnJvbGxlciAqb3V0ZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJcGdwYV9qb2luX3Vucm9s bGVyICppbm5lcl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlib29sCQlqb2luX3Vucm9sbGVyX3Rv cGxldmVsID0gZmFsc2U7CisJTGlzdAkgICAqcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBOSUw7 CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqZXh0cmFwbGFucyA9IE5JTDsKKwlMaXN0CSAg ICplbGlkZWRfbm9kZXMgPSBOSUw7CisKKwlBc3NlcnQod2l0aGluX2pvaW5fcHJvYmxlbSB8fCBq b2luX3Vucm9sbGVyID09IE5VTEwpOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgR2F0aGVyIG9y IEdhdGhlciBNZXJnZSBub2RlLCBkaXJlY3RseSBhZGQgaXQgdG8gdGhlIGxpc3QKKwkgKiBvZiBj dXJyZW50bHktYWN0aXZlIHF1ZXJ5IGZlYXR1cmVzLiAoRXhjZXB0aW9uOiBEaXNyZWdhcmQgc2lu Z2xlX2NvcHkKKwkgKiBHYXRoZXIgbm9kZXMuIFRoZXNlIGFyZSBjcmVhdGVkIGJ5IGRlYnVnX3Bh cmFsbGVsX3F1ZXJ5LCBhbmQgaGF2aW5nCisJICogdGhlbSBhZmZlY3QgdGhlIHBsYW4gYWR2aWNl IGlzIGNvdW50ZXJwcm9kdWN0aXZlLCBhcyB0aGUgcmVzdWx0IHdpbGwgYmUKKwkgKiB0byBhZHZp c2UgdGhlIHVzZSBvZiBhIHJlYWwgR2F0aGVyIG5vZGUsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGNv cHkKKwkgKiBvbmUuKQorCSAqCisJICogT3RoZXJ3aXNlLCBjaGVjayB0aGUgZnV0dXJlX3F1ZXJ5 X2ZlYXR1cmVzIGxpc3QgdG8gc2VlIHdoZXRoZXIgdGhpcyB3YXMKKwkgKiBwcmV2aW91c2x5IGlk ZW50aWZpZWQgYXMgYSBwbGFuIG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmVhdGVkIGFzIGEKKwkg KiBxdWVyeSBmZWF0dXJlLgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBjYWxsZXIgYWxzbyBoYXMg YSBjb3B5IHRvIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgc28gd2UKKwkgKiBjYW4ndCBkZXN0cnVj dGl2ZWx5IG1vZGlmeSBpdCB3aXRob3V0IG1ha2luZyBhIGNvcHkuCisJICovCisJaWYgKElzQShw bGFuLCBHYXRoZXIpICYmICEoKEdhdGhlciAqKSBwbGFuKS0+c2luZ2xlX2NvcHkpCisJeworCQlh Y3RpdmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5 X2ZlYXR1cmVzKSwKKwkJCQkJcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9HQVRIRVIs IHBsYW4pKTsKKwkJYmVuZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNB KHBsYW4sIEdhdGhlck1lcmdlKSkKKwl7CisJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9CisJCQls YXBwZW5kKGxpc3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVyZXMpLAorCQkJCQlwZ3BhX2FkZF9m ZWF0dXJlKHdhbGtlciwgUEdQQVFGX0dBVEhFUl9NRVJHRSwgcGxhbikpOworCQliZW5lYXRoX2Fu eV9nYXRoZXIgPSB0cnVlOworCX0KKwllbHNlCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5 X2ZlYXR1cmUsIHFmLCB3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJlcykKKwkJeworCQkJaWYg KHFmLT5wbGFuID09IHBsYW4pCisJCQl7CisJCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gbGlz dF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyk7CisJCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz ID0gbGFwcGVuZChhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHFmKTsKKwkJCQl3YWxrZXItPmZ1dHVy ZV9xdWVyeV9mZWF0dXJlcyA9CisJCQkJCWxpc3RfZGVsZXRlX3B0cih3YWxrZXItPmZ1dHVyZV9x dWVyeV9mZWF0dXJlcywgcGxhbik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKgor CSAqIEZpbmQgYWxsIGVsaWRlZCBub2RlcyBmb3IgdGhpcyBQbGFuIG5vZGUuCisJICovCisJZm9y ZWFjaF9ub2RlKEVsaWRlZE5vZGUsIG4sIHdhbGtlci0+cHN0bXQtPmVsaWRlZE5vZGVzKQorCXsK KwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQllbGlkZWRf bm9kZXMgPSBsYXBwZW5kKGVsaWRlZF9ub2Rlcywgbik7CisJfQorCisJLyogSWYgd2UgZm91bmQg YW55IGVsaWRlZF9ub2RlcywgaGFuZGxlIHRoZW0uICovCisJaWYgKGVsaWRlZF9ub2RlcyAhPSBO SUwpCisJeworCQlpbnQJCQludW1fZWxpZGVkX25vZGVzID0gbGlzdF9sZW5ndGgoZWxpZGVkX25v ZGVzKTsKKwkJRWxpZGVkTm9kZSAqbGFzdF9lbGlkZWRfbm9kZTsKKworCQkvKgorCQkgKiBSVElz IGZvciB0aGUgZmluYWwgLS0gYW5kIHRodXMgbG9naWNhbGx5IHVwcGVybW9zdCAtLSBlbGlkZWQg bm9kZQorCQkgKiBzaG91bGQgYmUgY29sbGVjdGVkIGZvciBxdWVyeSBmZWF0dXJlcyBwYXNzZWQg ZG93biBieSB0aGUgY2FsbGVyLgorCQkgKiBIb3dldmVyLCBlbGlkZWQgbm9kZXMgYWN0IGFzIGJh cnJpZXJzIHRvIHF1ZXJ5IGZlYXR1cmVzLCB3aGljaAorCQkgKiBtZWFucyB0aGF0ICgxKSB0aGUg cmVtYWluaW5nIGVsaWRlZCBub2RlcywgaWYgYW55LCBzaG91bGQgYmUKKwkJICogaWdub3JlZCBm b3IgcHVycG9zZXMgb2YgcXVlcnkgZmVhdHVyZXMgYW5kICgyKSB0aGUgbGlzdCBvZiBhY3RpdmUK KwkJICogcXVlcnkgZmVhdHVyZXMgc2hvdWxkIGJlIHJlc2V0IHRvIGVtcHR5IHNvIHRoYXQgd2Ug ZG8gbm90IGFkZCBSVElzCisJCSAqIGZyb20gdGhlIHBsYW4gbm9kZSB0aGF0IGlzIGxvZ2ljYWxs eSBiZW5lYXRoIHRoZSBlbGlkZWQgbm9kZSB0byB0aGUKKwkJICogcXVlcnkgZmVhdHVyZXMgcGFz c2VkIGRvd24gZnJvbSB0aGUgY2FsbGVyLgorCQkgKi8KKwkJbGFzdF9lbGlkZWRfbm9kZSA9IGxp c3RfbnRoKGVsaWRlZF9ub2RlcywgbnVtX2VsaWRlZF9ub2RlcyAtIDEpOworCQlwZ3BhX3FmX2Fk ZF9ydGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCSBwZ3BhX2ZpbHRlcl9vdXRfam9p bl9yZWxpZHMobGFzdF9lbGlkZWRfbm9kZS0+cmVsaWRzLAorCQkJCQkJCQkJCQkJCSB3YWxrZXIt PnBzdG10LT5ydGFibGUpKTsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gTklMOworCisJCS8q CisJCSAqIElmIHdlJ3JlIHdpdGhpbiBhIGpvaW4gcHJvYmxlbSwgdGhlIGpvaW5fdW5yb2xsZXIg aXMgcmVzcG9uc2libGUKKwkJICogZm9yIGJ1aWxkaW5nIHRoZSBzY2FuIGZvciB0aGUgZmluYWwg ZWxpZGVkIG5vZGUsIHNvIHRocm93IGl0IG91dC4KKwkJICovCisJCWlmICh3aXRoaW5fam9pbl9w cm9ibGVtKQorCQkJZWxpZGVkX25vZGVzID0gbGlzdF90cnVuY2F0ZShlbGlkZWRfbm9kZXMsIG51 bV9lbGlkZWRfbm9kZXMgLSAxKTsKKworCQkvKiBCdWlsZCBzY2FucyBmb3IgYWxsIChvciB0aGUg cmVtYWluaW5nKSBlbGlkZWQgbm9kZXMuICovCisJCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBl bGlkZWRfbm9kZSwgZWxpZGVkX25vZGVzKQorCQl7CisJCQkodm9pZCkgcGdwYV9idWlsZF9zY2Fu KHdhbGtlciwgcGxhbiwgZWxpZGVkX25vZGUsCisJCQkJCQkJCSAgIGJlbmVhdGhfYW55X2dhdGhl ciwgd2l0aGluX2pvaW5fcHJvYmxlbSk7CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGVyZSB3ZXJl IGFueSBlbGlkZWQgbm9kZXMsIHRoZW4gZXZlcnl0aGluZyBiZW5lYXRoIHRob3NlIG5vZGVzCisJ CSAqIGlzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIGpvaW4gcHJvYmxlbS4KKwkJICoKKwkJICogSW4g bW9yZSBkZXRhaWwsIGlmIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCB3YXMgZWxpZGVkLCB0aGVu IGEKKwkJICogcGFydGl0aW9ud2lzZSBqb2luIHdhcyBjaG9zZW4gYW5kIG9ubHkgYSBzaW5nbGUg Y2hpbGQgc3Vydml2ZWQ7IGlmCisJCSAqIGEgU3VicXVlcnlTY2FuIHdhcyBlbGlkZWQsIHRoZSBz dWJxdWVyeSB3YXMgcGxhbm5lZCB3aXRob3V0CisJCSAqIGZsYXR0ZW5pbmcgaXQgaW50byB0aGUg cGFyZW50LgorCQkgKi8KKwkJd2l0aGluX2pvaW5fcHJvYmxlbSA9IGZhbHNlOworCQlqb2luX3Vu cm9sbGVyID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHdpdGhpbiBhIGpvaW4gcHJv YmxlbSwgdGhlIGpvaW4gdW5yb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yCisJICogYnVpbGRpbmcg YW55IHJlcXVpcmVkIHNjYW4gZm9yIHRoaXMgbm9kZS4gSWYgbm90LCB3ZSBkbyBpdCBoZXJlLgor CSAqLworCWlmICghd2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJKHZvaWQpIHBncGFfYnVpbGRfc2Nh bih3YWxrZXIsIHBsYW4sIE5VTEwsIGJlbmVhdGhfYW55X2dhdGhlciwgZmFsc2UpOworCisJLyoK KwkgKiBJZiB0aGlzIGpvaW4gbmVlZHMgdG8gdW5yb2xsZWQgYnV0IHRoZXJlJ3Mgbm8gam9pbiB1 bnJvbGxlciBhbHJlYWR5CisJICogYXZhaWxhYmxlLCBjcmVhdGUgb25lLgorCSAqLworCWlmIChq b2luX3Vucm9sbGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHBsYW4pKQorCXsKKwkJam9pbl91 bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwkJam9pbl91bnJvbGxlcl90 b3BsZXZlbCA9IHRydWU7CisJCXdpdGhpbl9qb2luX3Byb2JsZW0gPSB0cnVlOworCX0KKworCS8q CisJICogSWYgdGhpcyBqb2luIGlzIHRvIGJlIHVucm9sbGVkLCBwZ3BhX3Vucm9sbF9qb2luKCkg d2lsbCByZXR1cm4gdGhlIGpvaW4KKwkgKiB1bnJvbGxlciBvYmplY3QgdGhhdCBzaG91bGQgYmUg cGFzc2VkIGRvd24gd2hlbiB3ZSByZWN1cnNlIGludG8gdGhlCisJICogb3V0ZXIgYW5kIGlubmVy IHNpZGVzIG9mIHRoZSBwbGFuLgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyICE9IE5VTEwpCisJ CXBncGFfdW5yb2xsX2pvaW4od2Fsa2VyLCBwbGFuLCBiZW5lYXRoX2FueV9nYXRoZXIsIGpvaW5f dW5yb2xsZXIsCisJCQkJCQkgJm91dGVyX2pvaW5fdW5yb2xsZXIsICZpbm5lcl9qb2luX3Vucm9s bGVyKTsKKworCS8qIEFkZCBSVElzIGZyb20gdGhlIHBsYW4gbm9kZSB0byBhbGwgYWN0aXZlIHF1 ZXJ5IGZlYXR1cmVzLiAqLworCXBncGFfcWZfYWRkX3BsYW5fcnRpcyhhY3RpdmVfcXVlcnlfZmVh dHVyZXMsIHBsYW4sIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisKKwkvKgorCSAqIFJlY3Vyc2Ug aW50byB0aGUgb3V0ZXIgYW5kIGlubmVyIHN1YnRyZWVzLgorCSAqCisJICogQXMgYW4gZXhjZXB0 aW9uLCBpZiB0aGlzIGlzIGEgRm9yZWlnblNjYW4sIGRvbid0IHJlY3Vyc2UuIHBvc3RncmVzX2Zk dworCSAqIHNvbWV0aW1lcyBzdG9yZXMgYW4gRVBRIHJlY2hlY2sgcGxhbiBpbiBwbGFuLT5sZWZ0 cmVlLCBidXQgdGhhdCdzIGdvaW5nCisJICogdG8gbWVudGlvbiB0aGUgc2FtZSBzZXQgb2YgcmVs YXRpb25zIGFzIHRoZSBGb3JlaWduU2NhbiBpdHNlbGYsIGFuZCB3ZQorCSAqIGhhdmUgbm8gd2F5 IHRvIGVtaXQgYWR2aWNlIHRhcmdldGluZyB0aGUgRVBRIGNhc2UgdnMuIHRoZSBub24tRVBRIGNh c2UuCisJICogTW9yZW92ZXIsIGl0J3Mgbm90IGVudGlyZWx5IGNsZWFyIHdoYXQgb3RoZXIgRkRX cyBtaWdodCBkbyB3aXRoIHRoZQorCSAqIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzLiBNYXliZSBz b21lIGJldHRlciBoYW5kbGluZyBpcyBuZWVkZWQgaGVyZSwgYnV0CisJICogZm9yIG5vdywgd2Ug anVzdCBwdW50LgorCSAqLworCWlmICghSXNBKHBsYW4sIEZvcmVpZ25TY2FuKSkKKwl7CisJCWlm IChwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtl ciwgcGxhbi0+bGVmdHRyZWUsIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAgb3V0ZXJf am9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJlbmVhdGhf YW55X2dhdGhlcik7CisJCWlmIChwbGFuLT5yaWdodHRyZWUgIT0gTlVMTCkKKwkJCXBncGFfd2Fs a19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4tPnJpZ2h0dHJlZSwgd2l0aGluX2pvaW5fcHJvYmxl bSwKKwkJCQkJCQkJICBpbm5lcl9qb2luX3Vucm9sbGVyLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMs CisJCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGNy ZWF0ZWQgYSBqb2luIHVucm9sbGVyIHVwIGFib3ZlLCB0aGVuIGl0J3MgYWxzbyBvdXIgam9pbiB0 byB1c2UKKwkgKiBpdCB0byBidWlsZCB0aGUgZmluYWwgcGdwYV91bnJvbGxlZF9qb2luLCBhbmQg dG8gZGVzdHJveSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyX3RvcGxldmVs KQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2luICp1am9pbjsKKworCQl1am9pbiA9IHBncGFfYnVp bGRfdW5yb2xsZWRfam9pbih3YWxrZXIsIGpvaW5fdW5yb2xsZXIpOworCQl3YWxrZXItPnRvcGxl dmVsX3Vucm9sbGVkX2pvaW5zID0KKwkJCWxhcHBlbmQod2Fsa2VyLT50b3BsZXZlbF91bnJvbGxl ZF9qb2lucywgdWpvaW4pOworCQlwZ3BhX2Rlc3Ryb3lfam9pbl91bnJvbGxlcihqb2luX3Vucm9s bGVyKTsKKwkJKHZvaWQpIHBncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHdhbGtlciwgdWpvaW4p OworCX0KKworCS8qCisJICogU29tZSBwbGFuIHR5cGVzIGNhbiBoYXZlIGFkZGl0aW9uYWwgY2hp bGRyZW4uIE5vZGVzIGxpa2UgQXBwZW5kIHRoYXQKKwkgKiBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9m IGNoaWxkcmVuIHN0b3JlIHRoZW0gaW4gYSBMaXN0OyBhIFN1YnF1ZXJ5U2NhbgorCSAqIGp1c3Qg aGFzIGEgZmllbGQgZm9yIGEgc2luZ2xlIGFkZGl0aW9uYWwgUGxhbi4KKwkgKi8KKwlzd2l0Y2gg KG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJeworCQkJCUFwcGVuZAkg ICAqYXBsYW4gPSAoQXBwZW5kICopIHBsYW47CisKKwkJCQlleHRyYXBsYW5zID0gYXBsYW4tPmFw cGVuZHBsYW5zOworCQkJCWlmIChibXNfaXNfZW1wdHkoYXBsYW4tPmFwcHJlbGlkcykpCisJCQkJ CXB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzID0gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzOworCQkJfQor CQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCXsKKwkJCQlNZXJnZUFwcGVuZCAq bWFwbGFuID0gKE1lcmdlQXBwZW5kICopIHBsYW47CisKKwkJCQlleHRyYXBsYW5zID0gbWFwbGFu LT5tZXJnZXBsYW5zOworCQkJCWlmIChibXNfaXNfZW1wdHkobWFwbGFuLT5hcHByZWxpZHMpKQor CQkJCQlwdXNoZG93bl9xdWVyeV9mZWF0dXJlcyA9IGFjdGl2ZV9xdWVyeV9mZWF0dXJlczsKKwkJ CX0KKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwQW5kOgorCQkJZXh0cmFwbGFucyA9ICgoQml0 bWFwQW5kICopIHBsYW4pLT5iaXRtYXBwbGFuczsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFw T3I6CisJCQlleHRyYXBsYW5zID0gKChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJ CQlicmVhazsKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKworCQkJLyoKKwkJCSAqIFdlIGRvbid0 IHBhc3MgZG93biBhY3RpdmVfcXVlcnlfZmVhdHVyZXMgYWNyb3NzIGhlcmUsIGJlY2F1c2UKKwkJ CSAqIHRob3NlIGFyZSBzcGVjaWZpYyB0byBhIHN1YnF1ZXJ5IGxldmVsLgorCQkJICovCisJCQlw Z3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCAoKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuKS0+c3Vi cGxhbiwKKwkJCQkJCQkJICAwLCBOVUxMLCBOSUwsIGJlbmVhdGhfYW55X2dhdGhlcik7CisJCQli cmVhazsKKwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCQlleHRyYXBsYW5zID0gKChDdXN0b21TY2Fu ICopIHBsYW4pLT5jdXN0b21fcGxhbnM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFr OworCX0KKworCS8qIElmIHdlIGZvdW5kIGEgbGlzdCBvZiBleHRyYSBjaGlsZHJlbiwgaXRlcmF0 ZSBvdmVyIGl0LiAqLworCWZvcmVhY2gobGMsIGV4dHJhcGxhbnMpCisJeworCQlQbGFuCSAgICpz dWJwbGFuID0gbGZpcnN0KGxjKTsKKworCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBz dWJwbGFuLCAwLCBOVUxMLCBwdXNoZG93bl9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkgIGJlbmVh dGhfYW55X2dhdGhlcik7CisJfQorfQorCisvKgorICogUGVyZm9ybSBmaW5hbCBwcm9jZXNzaW5n IG9mIGEgbmV3bHktY29uc3RydWN0ZWQgcGdwYV91bnJvbGxlZF9qb2luLiBUaGlzCisgKiBvbmx5 IG5lZWRzIHRvIGJlIGNhbGxlZCBmb3IgdG9wbGV2ZWwgcGdwYV91bnJvbGxlZF9qb2luIG9iamVj dHMsIHNpbmNlIGl0CisgKiByZWN1cnNlcyB0byBzdWItam9pbnMgYXMgbmVlZGVkLgorICoKKyAq IE91ciBnb2FsIGlzIHRvIGFkZCB0aGUgc2V0IG9mIGlubmVyIHJlbGlkcyB0byB0aGUgcmVsZXZh bnQgam9pbl9zdHJhdGVnaWVzCisgKiBsaXN0LCBhbmQgdG8gZG8gdGhlIHNhbWUgZm9yIGFueSBz dWItam9pbnMuIFRvIHRoYXQgZW5kLCB0aGUgcmV0dXJuIHZhbHVlCisgKiBpcyB0aGUgc2V0IG9m IHJlbGlkcyBmb3VuZCBiZW5lYXRoIHRoZSB0aGUgam9pbiwgYnV0IGl0IGlzIGV4cGVjdGVkIHRo YXQKKyAqIHRoZSB0b3BsZXZlbCBjYWxsZXIgd2lsbCBpZ25vcmUgdGhpcy4KKyAqLworc3RhdGlj IEJpdG1hcHNldCAqCitwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSAgIHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4pCit7 CisJQml0bWFwc2V0ICAqYWxsX3JlbGlkcyA9IGJtc19jb3B5KHVqb2luLT5vdXRlci5zY2FuLT5y ZWxpZHMpOworCisJLyogSWYgdGhpcyBmYWlscywgd2UgZGlkbid0IHVucm9sbCBwcm9wZXJseS4g Ki8KKwlBc3NlcnQodWpvaW4tPm91dGVyLnVucm9sbGVkX2pvaW4gPT0gTlVMTCk7CisKKwlmb3Ig KGludCBrID0gMDsgayA8IHVqb2luLT5uaW5uZXI7ICsraykKKwl7CisJCXBncGFfam9pbl9tZW1i ZXIgKm1lbWJlciA9ICZ1am9pbi0+aW5uZXJba107CisJCUJpdG1hcHNldCAgKnJlbGlkczsKKwor CQlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJCQlyZWxpZHMgPSBwZ3BhX3By b2Nlc3NfdW5yb2xsZWRfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCQltZW1iZXItPnVucm9sbGVk X2pvaW4pOworCQllbHNlCisJCXsKKwkJCUFzc2VydChtZW1iZXItPnNjYW4gIT0gTlVMTCk7CisJ CQlyZWxpZHMgPSBtZW1iZXItPnNjYW4tPnJlbGlkczsKKwkJfQorCQl3YWxrZXItPmpvaW5fc3Ry YXRlZ2llc1t1am9pbi0+c3RyYXRlZ3lba11dID0KKwkJCWxhcHBlbmQod2Fsa2VyLT5qb2luX3N0 cmF0ZWdpZXNbdWpvaW4tPnN0cmF0ZWd5W2tdXSwgcmVsaWRzKTsKKwkJYWxsX3JlbGlkcyA9IGJt c19hZGRfbWVtYmVycyhhbGxfcmVsaWRzLCByZWxpZHMpOworCX0KKworCXJldHVybiBhbGxfcmVs aWRzOworfQorCisvKgorICogQXJyYW5nZSBmb3IgdGhlIGdpdmVuIHBsYW4gbm9kZSB0byBiZSB0 cmVhdGVkIGFzIGEgcXVlcnkgZmVhdHVyZSB3aGVuIHRoZQorICogdHJlZSB3YWxrIHJlYWNoZXMg aXQuCisgKgorICogTWFrZSBzdXJlIHRvIG9ubHkgdXNlIHRoaXMgZm9yIG5vZGVzIHRoYXQgdGhl IHRyZWUgd2FsayBjYW4ndCBoYXZlIHJlYWNoZWQKKyAqIHlldCEKKyAqLwordm9pZAorcGdwYV9h ZGRfZnV0dXJlX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQlwZ3BhX3FmX3R5cGUgdHlwZSwgUGxhbiAqcGxhbikKK3sKKwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUg KnFmID0gcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIHR5cGUsIHBsYW4pOworCisJd2Fsa2VyLT5m dXR1cmVfcXVlcnlfZmVhdHVyZXMgPQorCQlsYXBwZW5kKHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2Zl YXR1cmVzLCBxZik7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBu b2RlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwbGFuIG5vZGUgSUQuCisgKgorICogVGhlIGxhc3Qg ZWxpZGVkIG5vZGUgaXMgdGhlIG9uZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiB1cHBlcm1vc3QgaW4g dGhlIHBsYW4KKyAqIHRyZWUgaGFkIGl0IG5vdCBiZWVuIHJlbW92ZWQgZHVyaW5nIHNldHJlZnMg cHJvY2Vzc2lnLgorICovCitFbGlkZWROb2RlICoKK3BncGFfbGFzdF9lbGlkZWRfbm9kZShQbGFu bmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4pCit7CisJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUg PSBOVUxMOworCisJZm9yZWFjaF9ub2RlKEVsaWRlZE5vZGUsIG4sIHBzdG10LT5lbGlkZWROb2Rl cykKKwl7CisJCWlmIChuLT5wbGFuX25vZGVfaWQgPT0gcGxhbi0+cGxhbl9ub2RlX2lkKQorCQkJ ZWxpZGVkX25vZGUgPSBuOworCX0KKworCXJldHVybiBlbGlkZWRfbm9kZTsKK30KKworLyoKKyAq IENlcnRhaW4gcGxhbiBub2RlcyBjYW4gcmVmZXIgdG8gYSBzZXQgb2YgUlRJcy4gRXh0cmFjdCBh bmQgcmV0dXJuIHRoZSBzZXQuCisgKi8KK0JpdG1hcHNldCAqCitwZ3BhX3JlbGlkcyhQbGFuICpw bGFuKQoreworCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJcmV0dXJuICgoUmVzdWx0ICopIHBs YW4pLT5yZWxpZHM7CisJZWxzZSBpZiAoSXNBKHBsYW4sIEZvcmVpZ25TY2FuKSkKKwkJcmV0dXJu ICgoRm9yZWlnblNjYW4gKikgcGxhbiktPmZzX3JlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwg QXBwZW5kKSkKKwkJcmV0dXJuICgoQXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHM7CisJZWxzZSBp ZiAoSXNBKHBsYW4sIE1lcmdlQXBwZW5kKSkKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmQgKikgcGxh biktPmFwcHJlbGlkczsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICogRXh0cmFjdCB0aGUg c2Nhbm5lZCBSVEkgZnJvbSBhIHBsYW4gbm9kZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlcmUg aXNuJ3Qgb25lLgorICovCitJbmRleAorcGdwYV9zY2FucmVsaWQoUGxhbiAqcGxhbikKK3sKKwlz d2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfU2VxU2NhbjoKKwkJY2FzZSBUX1Nh bXBsZVNjYW46CisJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKKwkJY2FzZSBUX1RpZFNjYW46CisJ CWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCWNhc2UgVF9G dW5jdGlvblNjYW46CisJCWNhc2UgVF9UYWJsZUZ1bmNTY2FuOgorCQljYXNlIFRfVmFsdWVzU2Nh bjoKKwkJY2FzZSBUX0N0ZVNjYW46CisJCWNhc2UgVF9OYW1lZFR1cGxlc3RvcmVTY2FuOgorCQlj YXNlIFRfV29ya1RhYmxlU2NhbjoKKwkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCQljYXNlIFRfQ3Vz dG9tU2NhbjoKKwkJY2FzZSBUX0luZGV4U2NhbjoKKwkJY2FzZSBUX0luZGV4T25seVNjYW46CisJ CQlyZXR1cm4gKChTY2FuICopIHBsYW4pLT5zY2FucmVsaWQ7CisJCWRlZmF1bHQ6CisJCQlyZXR1 cm4gMDsKKwl9Cit9CisKKy8qCisgKiBDb25zdHJ1Y3QgYSBuZXcgQml0bWFwc2V0IGNvbnRhaW5p bmcgbm9uLVJURV9KT0lOIG1lbWJlcnMgb2YgJ3JlbGlkcycuCisgKi8KK0JpdG1hcHNldCAqCitw Z3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJs ZSkKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOworCisJ d2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJ UmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBydGFibGUpOworCisJCWlmIChydGUt PnJ0ZWtpbmQgIT0gUlRFX0pPSU4pCisJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQs IHJ0aSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENyZWF0ZSBhIHBncGFf cXVlcnlfZmVhdHVyZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIGFsbCBxdWVyeSBmZWF0dXJl cworICogZm9yIHRoaXMgcGxhbi4KKyAqLworc3RhdGljIHBncGFfcXVlcnlfZmVhdHVyZSAqCitw Z3BhX2FkZF9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCSBw Z3BhX3FmX3R5cGUgdHlwZSwgUGxhbiAqcGxhbikKK3sKKwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnFm ID0gcGFsbG9jMF9vYmplY3QocGdwYV9xdWVyeV9mZWF0dXJlKTsKKworCXFmLT50eXBlID0gdHlw ZTsKKwlxZi0+cGxhbiA9IHBsYW47CisKKwl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBl XSA9CisJCWxhcHBlbmQod2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1txZi0+dHlwZV0sIHFmKTsKKwor CXJldHVybiBxZjsKK30KKworLyoKKyAqIEFkZCBhIHNpbmdsZSBSVEkgdG8gZWFjaCBhY3RpdmUg cXVlcnkgZmVhdHVyZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3J0aShMaXN0ICph Y3RpdmVfcXVlcnlfZmVhdHVyZXMsIEluZGV4IHJ0aSkKK3sKKwlmb3JlYWNoX3B0cihwZ3BhX3F1 ZXJ5X2ZlYXR1cmUsIHFmLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMpCisJeworCQlxZi0+cmVsaWRz ID0gYm1zX2FkZF9tZW1iZXIocWYtPnJlbGlkcywgcnRpKTsKKwl9Cit9CisKKy8qCisgKiBBZGQg YSBzZXQgb2YgUlRJcyB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLgorICovCitzdGF0aWMg dm9pZAorcGdwYV9xZl9hZGRfcnRpcyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEJpdG1h cHNldCAqcmVsaWRzKQoreworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIGFj dGl2ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCXFmLT5yZWxpZHMgPSBibXNfYWRkX21lbWJlcnMo cWYtPnJlbGlkcywgcmVsaWRzKTsKKwl9Cit9CisKKy8qCisgKiBBZGQgUlRJcyBkaXJlY3RseSBj b250YWluZWQgaW4gYSBwbGFuIG5vZGUgdG8gZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZSwKKyAq IGJ1dCBmaWx0ZXIgb3V0IGFueSBqb2luIFJUSXMsIHNpbmNlIGFkdmljZSBkb2Vzbid0IG1lbnRp b24gdGhvc2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3FmX2FkZF9wbGFuX3J0aXMoTGlzdCAq YWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBQbGFuICpwbGFuLCBMaXN0ICpydGFibGUpCit7CisJQml0 bWFwc2V0ICAqcmVsaWRzOworCUluZGV4CQlydGk7CisKKwlpZiAoKHJlbGlkcyA9IHBncGFfcmVs aWRzKHBsYW4pKSAhPSBOVUxMKQorCXsKKwkJcmVsaWRzID0gcGdwYV9maWx0ZXJfb3V0X2pvaW5f cmVsaWRzKHJlbGlkcywgcnRhYmxlKTsKKwkJcGdwYV9xZl9hZGRfcnRpcyhhY3RpdmVfcXVlcnlf ZmVhdHVyZXMsIHJlbGlkcyk7CisJfQorCWVsc2UgaWYgKChydGkgPSBwZ3BhX3NjYW5yZWxpZChw bGFuKSkgIT0gMCkKKwkJcGdwYV9xZl9hZGRfcnRpKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcnRp KTsKK30KKworLyoKKyAqIElmIHdlIGdlbmVyYXRlZCBwbGFuIGFkdmljZSB1c2luZyB0aGUgcHJv dmlkZWQgd2Fsa2VyIG9iamVjdCBhbmQgYXJyYXkKKyAqIG9mIGlkZW50aWZpZXJzLCB3b3VsZCB3 ZSBnZW5lcmF0ZSB0aGUgc3BlY2lmaWVkIHRhZy90YXJnZXQgY29tYmluYXRpb24/CisgKgorICog SWYgeWVzLCB0aGUgcGxhbiBjb25mb3JtcyB0byB0aGUgYWR2aWNlOyBpZiBubywgaXQgZG9lcyBu b3QuIE5vdGUgdGhhdAorICogd2UgaGF2ZSBrbm93IHdheSBvZiBrbm93aW5nIHdoZXRoZXIgdGhl IHBsYW5uZXIgd2FzIGZvcmNlZCB0byBlbWl0IGEgcGxhbgorICogdGhhdCBjb25mb3JtZWQgdG8g dGhlIGFkdmljZSBvciBqdXN0IGhhcHBlbmVkIHRvIGRvIHNvLgorICovCitib29sCitwZ3BhX3dh bGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCSBwZ3BhX2FkdmljZV90 YWdfdHlwZSB0YWcsCisJCQkJCQkgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJSW5k ZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aCh3YWxrZXItPnBzdG10LT5ydGFibGUpOwor CUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisKKwlpZiAodGFnID09IFBHUEFfVEFHX0pPSU5f T1JERVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX3Vucm9sbGVkX2pvaW4sIHVqb2luLCB3YWxr ZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCQl7CisJCQlpZiAocGdwYV93YWxrZXJfam9p bl9vcmRlcl9tYXRjaGVzKHVqb2luLCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgICBydF9p ZGVudGlmaWVycywgdGFyZ2V0LCB0cnVlKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVO VElGSUVSKQorCXsKKwkJSW5kZXgJCXJ0aTsKKworCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zy b21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLCBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJ ICAgJnRhcmdldC0+cmlkKTsKKwkJaWYgKHJ0aSA9PSAwKQorCQkJcmV0dXJuIGZhbHNlOworCQly ZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0 KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKTsKKwkJZm9yZWFjaF9w dHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJ CXsKKwkJCUluZGV4CQlydGk7CisKKwkJCUFzc2VydChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBH UEFfVEFSR0VUX0lERU5USUZJRVIpOworCQkJcnRpID0gcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lk ZW50aWZpZXIocnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAor CQkJCQkJCQkJCQkJICAgJmNoaWxkX3RhcmdldC0+cmlkKTsKKwkJCWlmIChydGkgPT0gMCkKKwkJ CQlyZXR1cm4gZmFsc2U7CisJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aSk7 CisJCX0KKwl9CisKKwlzd2l0Y2ggKHRhZykKKwl7CisJCWNhc2UgUEdQQV9UQUdfSk9JTl9PUkRF UjoKKwkJCS8qIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBhYm92ZSAqLworCQkJcGdfdW5yZWFj aGFibGUoKTsKKwkJCWJyZWFrOworCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU46CisJ CQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQQV9T Q0FOX0JJVE1BUF9IRUFQLAorCQkJCQkJCQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQ QV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxr ZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NBTl9GT1JFSUdOLAorCQkJCQkJCQkJCSByZWxpZHMpICE9 IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgorCQkJeworCQkJCXBncGFf c2NhbiAgKnNjYW47CisKKwkJCQlzY2FuID0gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwg UEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQkJCWlmIChzY2Fu ID09IE5VTEwpCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCXJldHVybiBwZ3BhX3dhbGtlcl9p bmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHRhcmdldC0+aXRhcmdldCwgc2Nhbi0+cGxhbik7CisJ CQl9CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJCXsKKwkJCQlwZ3BhX3NjYW4gICpz Y2FuOworCisJCQkJc2NhbiA9IHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsIFBHUEFfU0NB Tl9JTkRFWCwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCQkJaWYgKHNjYW4gPT0gTlVMTCkKKwkJ CQkJcmV0dXJuIGZhbHNlOworCisJCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2luZGV4X3RhcmdldF9t YXRjaGVzX3BsYW4odGFyZ2V0LT5pdGFyZ2V0LCBzY2FuLT5wbGFuKTsKKwkJCX0KKwkJY2FzZSBQ R1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3 YWxrZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFLAorCQkJCQkJCQkJCSBy ZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQlyZXR1cm4gcGdw YV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQQV9TQ0FOX1NFUSwKKwkJ CQkJCQkJCQkgcmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBHUEFfVEFHX1RJRF9TQ0FOOgorCQkJ cmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NB Tl9USUQsCisJCQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJY2FzZSBQR1BBX1RBR19HQVRI RVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJ CQkJCQkJCQlQR1BBUUZfR0FUSEVSLAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BB X1RBR19HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVy ZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVSX01FUkdFLAorCQkJCQkJCQkJCQkJ cmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJu IHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFG X1NFTUlKT0lOX05PTl9VTklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFf VEFHX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0 dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9TRU1JSk9JTl9VTklRVUUsCisJCQkJCQkJ CQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCXJldHVybiBwZ3Bh X3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9IQVNIX0pP SU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFU RVJJQUxJWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJ CQkJCQkJCQkJCSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwkJCQkJCQkJCQkJIHJl bGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiBwZ3Bh X3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9K T0lOX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURf TE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdh bGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRSwKKwkJCQkJ CQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJ CXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpT VFJBVF9ORVNURURfTE9PUF9NRU1PSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQ R1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWlu c19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTiwKKwkJ CQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCQkJcmV0dXJu IHBncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcih3YWxrZXIsIHJlbGlkcyk7CisJfQorCisJ Lyogc2hvdWxkIG5vdCBnZXQgaGVyZSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERv ZXMgdGhlIGluZGV4IHRhcmdldCBtYXRjaCB0aGUgUGxhbj8KKyAqCisgKiBTaG91bGQgb25seSBi ZSBjYWxsZWQgd2hlbiB3ZSBrbm93IHRoYXQgaXRhcmdldCBtYW5kYXRlcyBhbiBJbmRleCBTY2Fu IG9yCisgKiBJbmRleCBPbmx5IFNjYW4gYW5kIHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIHR5cGUg b2YgUGxhbi4gSGVyZSwgb3VyIGpvYiBpcworICoganVzdCB0byBjaGVjayB3aGV0aGVyIGl0J3Mg dGhlIHNhbWUgaW5kZXguCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9pbmRleF90YXJn ZXRfbWF0Y2hlc19wbGFuKHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0LCBQbGFuICpwbGFuKQor eworCU9pZAkJCWluZGV4b2lkID0gSW52YWxpZE9pZDsKKworCS8qIFJldHJpZXZlIHRoZSBpbmRl eCBPSUQgZnJvbSB0aGUgcGxhbi4gKi8KKwlpZiAoSXNBKHBsYW4sIEluZGV4U2NhbikpCisJCWlu ZGV4b2lkID0gKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4aWQ7CisJZWxzZSBpZiAoSXNBKHBs YW4sIEluZGV4T25seVNjYW4pKQorCQlpbmRleG9pZCA9ICgoSW5kZXhPbmx5U2NhbiAqKSBwbGFu KS0+aW5kZXhpZDsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBl OiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCisJLyogQ2hlY2sgd2hldGhlciBzY2hlbWEg bmFtZSBtYXRjaGVzLCBpZiBzcGVjaWZpZWQgaW4gaW5kZXggdGFyZ2V0LiAqLworCWlmIChpdGFy Z2V0LT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkKKwl7CisJCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxf bmFtZXNwYWNlKGluZGV4b2lkKTsKKwkJY2hhcgkgICAqcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVz cGFjZV9uYW1lX29yX3RlbXAobnNwb2lkKTsKKworCQlpZiAoc3RyY21wKGl0YXJnZXQtPmluZG5h bWVzcGFjZSwgcmVsbmFtZXNwYWNlKSAhPSAwKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8q IENoZWNrIHdoZXRoZXIgcmVsYXRpb24gbmFtZSBtYXRjaGVzLiAqLworCXJldHVybiAoc3RyY21w KGl0YXJnZXQtPmluZG5hbWUsIGdldF9yZWxfbmFtZShpbmRleG9pZCkpID09IDApOworfQorCisv KgorICogRG9lcyBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIHRoZSBqb2luIG9yZGVyIHNwZWNpZmll ZCBieSBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfam9p bl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4sCisJCQkJCQkJICAgSW5k ZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZp ZXJzLAorCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCSAgIGJv b2wgdG9wbGV2ZWwpCit7CisJaW50CQkJbmNoaWxkcmVuID0gbGlzdF9sZW5ndGgodGFyZ2V0LT5j aGlsZHJlbik7CisKKwlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVE X0xJU1QpOworCisJLyogQXQgdG9wbGV2ZWwsIHdlIGFsbG93IGEgcHJlZml4IG1hdGNoLiAqLwor CWlmICh0b3BsZXZlbCkKKwl7CisJCWlmIChuY2hpbGRyZW4gPiB1am9pbi0+bmlubmVyICsgMSkK KwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG5jaGlsZHJlbiAhPSB1am9p bi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBPdXRlcm1vc3QgcmVs IG11c3QgbWF0Y2guICovCisJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVt YmVyKCZ1am9pbi0+b3V0ZXIsCisJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJ CQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICBsaW5pdGlhbCh0YXJnZXQtPmNo aWxkcmVuKSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEVhY2ggaW5uZXIgcmVsIG11c3QgbWF0 Y2guICovCisJZm9yIChpbnQgbiA9IDA7IG4gPCBuY2hpbGRyZW4gLSAxOyArK24pCisJeworCQlw Z3BhX2FkdmljZV90YXJnZXQgKmNoaWxkX3RhcmdldCA9IGxpc3RfbnRoKHRhcmdldC0+Y2hpbGRy ZW4sIG4gKyAxKTsKKworCQlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1i ZXIoJnVqb2luLT5pbm5lcltuXSwKKwkJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgsCisJCQkJ CQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgIGNoaWxkX3RhcmdldCkp CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBEb2Vz IG9uZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCBhbiBhZHZpY2UgdGFyZ2V0Pwor ICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJlcihw Z3BhX2pvaW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9sZW5ndGgs CisJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkg IHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5V TEw7CisKKwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlpZiAodGFy Z2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQlyZXR1cm4gZmFsc2U7 CisJCXJldHVybiBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMobWVtYmVyLT51bnJvbGxl ZF9qb2luLAorCQkJCQkJCQkJCQkgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgcnRfaWRl bnRpZmllcnMsCisJCQkJCQkJCQkJCSAgdGFyZ2V0LAorCQkJCQkJCQkJCQkgIGZhbHNlKTsKKwl9 CisKKwlBc3NlcnQobWVtYmVyLT5zY2FuICE9IE5VTEwpOworCXN3aXRjaCAodGFyZ2V0LT50dHlw ZSkKKwl7CisJCWNhc2UgUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOgorCQkJLyogQ291bGQgb25s eSBtYXRjaCBhbiB1bnJvbGxlZCBqb2luICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY2FzZSBQ R1BBX1RBUkdFVF9VTk9SREVSRURfTElTVDoKKwkJCXsKKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2Fk dmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJCQl7CisJCQkJ CUluZGV4CQlydGk7CisKKwkJCQkJcnRpID0gcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZp ZXIocnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkJCQkJCQkJCSAgICZjaGlsZF90YXJnZXQtPnJpZCk7CisJCQkJCWlmIChydGkgPT0gMCkKKwkJ CQkJCXJldHVybiBmYWxzZTsKKwkJCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBy dGkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQljYXNlIFBHUEFfVEFSR0VUX0lERU5U SUZJRVI6CisJCQl7CisJCQkJSW5kZXgJCXJ0aTsKKworCQkJCXJ0aSA9IHBncGFfY29tcHV0ZV9y dGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkJICAgcnRfaWRl bnRpZmllcnMsCisJCQkJCQkJCQkJCQkJICAgJnRhcmdldC0+cmlkKTsKKwkJCQlpZiAocnRpID09 IDApCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24o cnRpKTsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlyZXR1cm4gYm1zX2VxdWFsKG1lbWJlci0+ c2Nhbi0+cmVsaWRzLCByZWxpZHMpOworfQorCisvKgorICogRmluZCB0aGUgc2NhbiB3aGVyZSB0 aGUgd2Fsa2VyIHNheXMgdGhhdCB0aGUgZ2l2ZW4gc2NhbiBzdHJhdGVneSBzaG91bGQgYmUKKyAq IHVzZWQgZm9yIHRoZSBnaXZlbiByZWxpZCBzZXQsIGlmIG9uZSBleGlzdHMuCisgKgorICogUmV0 dXJucyB0aGUgcGdwYV9zY2FuIG9iamVjdCwgb3IgTlVMTCBpZiBub25lIHdhcyBmb3VuZC4KKyAq Lworc3RhdGljIHBncGFfc2NhbiAqCitwZ3BhX3dhbGtlcl9maW5kX3NjYW4ocGdwYV9wbGFuX3dh bGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5 LAorCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAgKnNjYW5zID0gd2Fsa2Vy LT5zY2Fuc1tzdHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5z KQorCXsKKwkJaWYgKGJtc19lcXVhbChzY2FuLT5yZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4g c2NhbjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERvZXMgdGhpcyB3YWxrZXIg c2F5IHRoYXQgdGhlIGdpdmVuIHF1ZXJ5IGZlYXR1cmUgYXBwbGllcyB0byB0aGUgZ2l2ZW4KKyAq IHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1 cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJIHBncGFfcWZfdHlw ZSB0eXBlLAorCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpxdWVyeV9m ZWF0dXJlcyA9IHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdHlwZV07CisKKwlmb3JlYWNoX3B0cihw Z3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBxdWVyeV9mZWF0dXJlcykKKwl7CisJCWlmIChibXNfZXF1 YWwocWYtPnJlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBm YWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gam9p biBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlCisgKiBnaXZlbiByZWxpZCBzZXQ/Cisg Ki8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3ks CisJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAgKmpvaW5fc3RyYXRlZ2ll cyA9IHdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3N0cmF0ZWd5XTsKKworCWZvcmVhY2hfcHRyKEJp dG1hcHNldCwganNyZWxpZHMsIGpvaW5fc3RyYXRlZ2llcykKKwl7CisJCWlmIChibXNfZXF1YWwo anNyZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHJlbGlkcyBz aG91bGQgYmUgbWFya2VkIGFzIE5PX0dBVEhFUj8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fs a2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlyZXR1cm4gYm1zX2lzX3N1YnNldChy ZWxpZHMsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV93YWxrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjkxYTM2 Y2EzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fs a2VyLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf d2Fsa2VyLmgKKyAqCSAgUGxhbiB0cmVlIGl0ZXJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykg MjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpZm5kZWYgUEdQQV9XQUxLRVJfSAorI2RlZmluZSBQR1BBX1dBTEtFUl9ICisK KyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUg InBncGFfc2Nhbi5oIgorCisvKgorICogV2hlbiBnZW5lcmF0aW5nIGFkdmljZSwgd2Ugc2hvdWxk IGVtaXQgZWl0aGVyIFNFTUlKT0lOX1VOSVFVRSBhZHZpY2Ugb3IKKyAqIFNFTUlKT0lOX05PTl9V TklRVUUgYWR2aWNlIGZvciBlYWNoIHNlbWlqb2luIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGNo b3NlCisgKiB0byBpbXBsZW1lbnQgaXQgYXMgYSBzZW1pam9pbiBvciB3aGV0aGVyIHdlIGluc3Rl YWQgY2hvc2UgdG8gbWFrZSB0aGUKKyAqIG51bGxhYmxlIHNpZGUgdW5pcXVlIGFuZCB0aGVuIHBl cmZvcm0gYW4gaW5uZXIgam9pbi4gV2hlbiB0aGUgbWFrZS11bmlxdWUKKyAqIHN0cmF0ZWd5IGlz IG5vdCBjaG9zZW4sIGl0J3Mgbm90IGVhc3kgdG8gdGVsbCBmcm9tIHRoZSBmaW5hbCBwbGFuIHRy ZWUKKyAqIHdoZXRoZXIgaXQgd2FzIGNvbnNpZGVyZWQuIFRoYXQncyBhd2t3YXJkLCBiZWNhdXNl IHdlIGRvbid0IHdhbnQgdG8gZW1pdAorICogdXNlbGVzcyBTRU1JSk9JTl9OT05fVU5JUVVFIGFk dmljZSB3aGVuIHRoZXJlIHdhcyBubyBkZWNpc2lvbiB0byBiZSBtYWRlLgorICoKKyAqIFRvIGF2 b2lkIHRoYXQsIGR1cmluZyBwbGFubmluZywgd2UgY3JlYXRlIGEgcGdwYV9zal91bmlxdWVfcmVs IGZvciBlYWNoCisgKiByZWxhdGlvbiB0aGF0IHdlIGNvbnNpZGVyZWQgbWFraW5nIHVuaXF1ZSBm b3IgcHVycG9zZXMgb2Ygc2VtaWpvaW4gcGxhbm5pbmcuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBn cGFfc2pfdW5pcXVlX3JlbAoreworCWNoYXIJICAgKnBsYW5fbmFtZTsKKwlCaXRtYXBzZXQgICpy ZWxpZHM7Cit9IHBncGFfc2pfdW5pcXVlX3JlbDsKKworLyoKKyAqIFdlIHVzZSB0aGUgdGVybSAi cXVlcnkgZmVhdHVyZSIgdG8gcmVmZXIgdG8gcGxhbiBub2RlcyB0aGF0IGFyZSBpbnRlcmVzdGlu ZworICogaW4gdGhlIGZvbGxvd2luZyB3YXk6IHRvIGdlbmVyYXRlIGFkdmljZSwgd2UnbGwgbmVl ZCB0byBrbm93IHRoZSBzZXQgb2YKKyAqIHNhbWUtc3VicXVlcnksIG5vbi1qb2luIFJUSXMgb2Nj dXJpbmcgYXQgb3IgYmVsb3cgdGhhdCBwbGFuIG5vZGUsIHdpdGhvdXQKKyAqIGFkbWl4dHVyZSBv ZiBwYXJlbnQgYW5kIGNoaWxkIFJUSXMuCisgKgorICogRm9yIGV4YW1wbGUsIEdhdGhlciBub2Rl cywgZGVzaWdpbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUiwgYW5kIEdhdGhlciBNZXJnZQorICogbm9k ZXMsIGRlc2lnbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUl9NRVJHRSwgYXJlIHF1ZXJ5IGZlYXR1cmVz LCBiZWNhdXNlIHdlJ2xsCisgKiB3YW50IHRvIGFkbWl0IHNvbWUga2luZCBvZiBhZHZpY2UgdGhh dCBkZXNjcmliZXMgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRyZWUgdGhhdCBhcHBlYXJz IGJlbmVhdGggdGhvc2Ugbm9kZXMuCisgKgorICogRWFjaCBzZW1pam9pbiBjYW4gYmUgaW1wbGVt ZW50ZWQgZWl0aGVyIGJ5IGRpcmVjdGx5IHBlcmZvcm1pbmcgYSBzZW1pam9pbiwKKyAqIG9yIGJ5 IG1ha2luZyBvbmUgc2lkZSB1bmlxdWUgYW5kIHRoZW4gcGVyZm9ybWluZyBhIG5vcm1hbCBqb2lu LiBFaXRoZXIgd2F5LAorICogd2UgdXNlIGEgcXVlcnkgZmVhdHVyZSB0byBub3RpY2Ugd2hhdCBk ZWNpc2lvbiB3YXMgbWFkZSwgc28gdGhhdCB3ZSBjYW4KKyAqIGRlc2NyaWJlIGl0IGJ5IGVudW1l cmF0aW5nIHRoZSBSVElzIG9uIHRoYXQgc2lkZSBvZiB0aGUgam9pbi4KKyAqCisgKiBUbyBlbGFi b3JhdGUgb24gdGhlICJubyBhZG1peHR1cmUgb2YgcGFyZW50IGFuZCBjaGlsZCBSVElzIiBydWxl LCBpbiBhbGwgb2YKKyAqIHRoZXNlIGNhc2VzLCBpZiB0aGUgZW50aXJldHkgb2YgYW4gaW5oZXJp dGFuY2UgaGllcmFyY2h5IGFwcGVhcnMgYmVuZWF0aAorICogdGhlIHF1ZXJ5IGZlYXR1cmUsIHdl IG9ubHkgd2FudCB0byBuYW1lIHRoZSBwYXJlbnQgdGFibGUuIEJ1dCBpdCdzIGFsc28KKyAqIHBv c3NpYmxlIHRvIGhhdmUgY2FzZXMgd2hlcmUgd2UgbXVzdCBuYW1lIGNoaWxkIHRhYmxlcy4gVGhp cyBpcyBwYXJ0aWN1bGFybHkKKyAqIGxpa2VseSB0byBoYXBwZW4gd2hlbiBwYXJ0aXRpb253aXNl IGpvaW4gaXMgaW4gdXNlLCBidXQgY291bGQgaGFwcGVuIGZvcgorICogR2F0aGVyIG9yIEdhdGhl ciBNZXJnZSBldmVuIHdpdGhvdXQgdGhhdCwgaWYgb25lIG9mIHRob3NlIGFwcGVhcnMgYmVsb3cK KyAqIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIGZvciBhIHNpbmdsZSB0YWJsZS4KKyAq LwordHlwZWRlZiBlbnVtIHBncGFfcWZfdHlwZQoreworCVBHUEFRRl9HQVRIRVIsCisJUEdQQVFG X0dBVEhFUl9NRVJHRSwKKwlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwlQR1BBUUZfU0VN SUpPSU5fVU5JUVVFCisJLyogdXBkYXRlIE5VTV9QR1BBX1FGX1RZUEVTIGlmIHlvdSBhZGQgYW55 dGhpbmcgaGVyZSAqLworfSBwZ3BhX3FmX3R5cGU7CisKKyNkZWZpbmUgTlVNX1BHUEFfUUZfVFlQ RVMgKChpbnQpIFBHUEFRRl9TRU1JSk9JTl9VTklRVUUgKyAxKQorCisvKgorICogRm9yIGVhY2gg cXVlcnkgZmVhdHVyZSwgd2Uga2VlcCB0cmFjayBvZiB0aGUgZmVhdHVyZSB0eXBlIGFuZCB0aGUg c2V0IG9mCisgKiByZWxpZHMgdGhhdCB3ZSBmb3VuZCB1bmRlcm5lYXRoIHRoZSByZWxldmFudCBw bGFuIG5vZGUuIFNlZSB0aGUgY29tbWVudHMKKyAqIG9uIHBncGFfcWZfdHlwZSwgYWJvdmUsIGZv ciBhZGRpdGlvbmFsIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcXVlcnlfZmVh dHVyZQoreworCXBncGFfcWZfdHlwZSB0eXBlOworCVBsYW4JICAgKnBsYW47CisJQml0bWFwc2V0 ICAqcmVsaWRzOworfSBwZ3BhX3F1ZXJ5X2ZlYXR1cmU7CisKKy8qCisgKiBDb250ZXh0IG9iamVj dCBmb3IgcGxhbiB0cmVlIHdhbGsuCisgKgorICogcHN0bXQgaXMgdGhlIFBsYW5uZWRTdG10IHdl J3JlIHN0dWR5aW5nLgorICoKKyAqIHNjYW5zIGlzIGFuIGFycmF5IG9mIGxpc3RzIG9mIHBncGFf c2NhbiBvYmplY3RzLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICogdGhlIHNjYW4ncyBwZ3Bh X3NjYW5fc3RyYXRlZ3kuCisgKgorICogbm9fZ2F0aGVyX3NjYW5zIGlzIHRoZSBzZXQgb2Ygc2Nh biBSVElzIHRoYXQgZG8gbm90IGFwcGVhciBiZW5lYXRoIGFueQorICogR2F0aGVyIG9yIEdhdGhl ciBNZXJnZSBub2RlLgorICoKKyAqIHRvcGxldmVsX3Vucm9sbGVkX2pvaW5zIGlzIGEgbGlzdCBv ZiBhbGwgcGdwYV91bnJvbGxlZF9qb2luIG9iamVjdHMgdGhhdAorICogYXJlIG5vdCBhIGNoaWxk IG9mIHNvbWUgb3RoZXIgcGdwYV91bnJvbGxlZF9qb2luLgorICoKKyAqIGpvaW5fc3RyYXRlZ3kg aXMgYW4gYXJyYXkgb2YgbGlzdHMgb2YgQml0bWFwc2V0IG9iamVjdHMuIEVhY2ggQml0bWFwc2V0 CisgKiBpcyB0aGUgc2V0IG9mIHJlbGlkcyB0aGF0IGFwcGVhcnMgb24gdGhlIGlubmVyIHNpZGUg b2Ygc29tZSBqb2luIChleGNsdWRpbmcKKyAqIFJUSXMgZnJvbSBwYXJ0aXRpb24gY2hpbGRyZW4g YW5kIHN1YnF1ZXJpZXMpLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICogcGdwYV9qb2luX3N0 cmF0ZWd5LgorICoKKyAqIHF1ZXJ5X2ZlYXR1cmVzIGlzIGFuIGFycmF5IGxpc3RzIG9mIHBncGFf cXVlcnlfZmVhdHVyZSBvYmplY3RzLCBpbmRleGVkCisgKiBieSBwZ3BhX3FmX3R5cGUuCisgKgor ICogZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGlzIG9ubHkgdXNlZCBkdXJpbmcgdGhlIHBsYW4gdHJl ZSB3YWxrIGFuZCBzaG91bGQKKyAqIGJlIGVtcHR5IHdoZW4gdGhlIHRyZWUgd2FsayBjb25jbHVk ZXMuIEl0IGlzIGEgbGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUKKyAqIG9iamVjdHMgZm9yIFBs YW4gbm9kZXMgdGhhdCB0aGUgcGxhbiB0cmVlIHdhbGsgaGFzIG5vdCB5ZXQgZW5jb3VudGVyZWQ7 CisgKiB3aGVuIGVuY291bnRlcmVkLCB0aGV5IHdpbGwgYmUgbW92ZWQgdG8gdGhlIGxpc3Qgb2Yg YWN0aXZlIHF1ZXJ5IGZlYXR1cmVzCisgKiB0aGF0IGlzIHByb3BhZ2F0ZWQgdmlhIHRoZSBjYWxs IHN0YWNrLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQKK3sK KwlQbGFubmVkU3RtdCAqcHN0bXQ7CisJTGlzdAkgICAqc2NhbnNbTlVNX1BHUEFfU0NBTl9TVFJB VEVHWV07CisJQml0bWFwc2V0ICAqbm9fZ2F0aGVyX3NjYW5zOworCUxpc3QJICAgKnRvcGxldmVs X3Vucm9sbGVkX2pvaW5zOworCUxpc3QJICAgKmpvaW5fc3RyYXRlZ2llc1tOVU1fUEdQQV9KT0lO X1NUUkFURUdZXTsKKwlMaXN0CSAgICpxdWVyeV9mZWF0dXJlc1tOVU1fUEdQQV9RRl9UWVBFU107 CisJTGlzdAkgICAqZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzOworfSBwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQ7CisKK2V4dGVybiB2b2lkIHBncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsCisJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCwKKwkJCQkJCQkgTGlz dCAqc2pfdW5pcXVlX3JlbHMpOworCitleHRlcm4gdm9pZCBwZ3BhX2FkZF9mdXR1cmVfZmVhdHVy ZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCXBncGFfcWZfdHlw ZSB0eXBlLAorCQkJCQkJCQkJUGxhbiAqcGxhbik7CisKK2V4dGVybiBFbGlkZWROb2RlICpwZ3Bh X2xhc3RfZWxpZGVkX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICpwbGFuKTsKK2V4dGVy biBCaXRtYXBzZXQgKnBncGFfcmVsaWRzKFBsYW4gKnBsYW4pOworZXh0ZXJuIEluZGV4IHBncGFf c2NhbnJlbGlkKFBsYW4gKnBsYW4pOworZXh0ZXJuIEJpdG1hcHNldCAqcGdwYV9maWx0ZXJfb3V0 X2pvaW5fcmVsaWRzKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0ICpydGFibGUpOworCitleHRlcm4g Ym9vbCBwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3 YWxrZXIsCisJCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJ CQkJCSBwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkJCQkgcGdwYV9hZHZpY2VfdGFy Z2V0ICp0YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL2dhdGhlci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43NzY2NjZiZjE5NgotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKQEAg LTAsMCArMSw4NiBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93 b3JrZXJzX3Blcl9nYXRoZXIgPSAxOworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworU0VU IHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3Np emUgPSAwOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworCitDUkVBVEUgVEFCTEUg Z3RfZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2RpbSAoZGltKSBTRUxFQ1QgcmFu ZG9tKCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFla RSBndF9kaW07CisKK0NSRUFURSBUQUJMRSBndF9mYWN0ICgKKwlpZCBpbnQgbm90IG51bGwsCisJ ZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBndF9kaW0gKGlkKQorKSBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9mYWN0CisJU0VMRUNU IGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5B TFlaRSBndF9mYWN0OworCistLSBCeSBkZWZhdWx0LCB3ZSBleHBlY3QgR2F0aGVyIE1lcmdlIHdp dGggYSBwYXJhbGxlbCBoYXNoIGpvaW4uCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkIE9SREVSIEJZIGQuaWQ7CisKKy0tIEZvcmNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb2Yg Ym90aCByZWxhdGlvbnMgdG9nZXRoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBhIHNlcGFyYXRlIEdhdGhlciBv ciBHYXRoZXIgTWVyZ2Ugb3BlcmF0aW9uIGZvciBlYWNoIHJlbGF0aW9uLgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmIGQpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9J TiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdnYXRoZXIoKGQgZC9kLmQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgR2F0aGVyIG9y IEdhdGhlciBNZXJnZSBvbiBvbmUgcmVsYXRpb24gYnV0IG5vIHBhcmFsbGVsaXNtIG9uIG90aGVy LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJn ZShmKSBub19nYXRoZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBP UkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJf bWVyZ2UoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0 aGVyKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhl cihkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBP UkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBubyBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlIHVzZSBhdCBhbGwuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnbm9fZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBP UkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0 aG91dCB0aGUgT1JERVIgQlkgY2xhdXNlLCBidXQganVzdCBHYXRoZXIgaXMgT0suCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFj dCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CitDT01NSVQ7CisKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSkgbm9f Z2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkg ZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pv aW5fb3JkZXIuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVlMTZlNTRlZmFkCi0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwK QEAgLTAsMCArMSwxNDUgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlkIGlu dGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZhbDEp CisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsKK0NS RUFURSBUQUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZh bDIgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IGpvX2RpbTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAn IHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitW QUNVVU0gQU5BTFlaRSBqb19kaW0yOworCitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQgaW50 IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2Rp bTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0yIChp ZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9f ZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CisKKy0tIFdlIGV4cGVjdCB0 byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9uIG9uIGQy CistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGlt MV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQK KwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIEZvcmNlIGEgZmV3IGRpZmZlcmVu dCBqb2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVudCwKKy0tIGJ1 dCB0aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlhYmxlLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVG VCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGlt MiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0 IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9J TiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZh bDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQx IGYgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJ TEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0g MSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQg PSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hF UkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdqb2luX29yZGVyKGYge2QxIGQyfSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04g Zi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBk Mi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK0NPTU1JVDsKKworLS0gRm9yY2Ug YSBqb2luIG9yZGVyIGJ5IG1lbnRpb25pbmcganVzdCBhIHByZWZpeCBvZiB0aGUgam9pbiBsaXN0 LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIo ZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpv X2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVG VCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBB TkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3Jk ZXIoZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CitDT01NSVQ7CisKKy0tIGpvX2ZhY3QgaXMgbm90IHBhcnRpdGlv bmVkLCBidXQgbGV0J3MgdHJ5IHByZXRlbmRpbmcgdGhhdCBpdCBpcyBhbmQKKy0tIHZlcmlmeWlu ZyB0aGF0IHRoZSBhZHZpY2UgZG9lcyBub3QgYXBwbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIGQxIGQyKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpP SU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQy IE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYvZDEgKGQxIGQyKSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFj dCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2 YWwyID0gMTsKK0NPTU1JVDsKKworLS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2YgdGhpcyBx dWVyeSBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBmcm9tIHJl ZHVjaW5nIHRoZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRoYXQgd2UK Ky0tIGNhbiB0ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fubm90IGJl IHJlb3JkZXJlZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBP UiBmLmRpbTFfaWQgSVMgTlVMTDsKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGZvcmNl IHRoZSBwbGFubmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQorLS0gdGhhdCBpcyBu b3QgYSB2YWxpZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgdGhl IHBsYW5uZXIKKy0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZpbmcgdGFibGUuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQx IGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBq b19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9O IGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5k aW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9f ZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0x X2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdqb2luX29yZGVyKGQyIGYgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVM TCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5p ZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK0NPTU1JVDsKKworLS0gVHdvIGlu Y29tcGF0aWJsZSBqb2luIG9yZGVycyBzaG91bGQgY29uZmxpY3QuIEluIHRoZSBzZWNvbmQgY2Fz ZSwKKy0tIHRoZSBjb25mbGljdCBpcyBpbXBsaWNpdDogaWYgZDEgaXMgb24gdGhlIGlubmVyIHNp ZGUgb2YgYSBqb2luIG9mIGFueQorLS0gdHlwZSwgaXQgY2Fubm90IGFsc28gYmUgdGhlIGRyaXZp bmcgdGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9p bl9vcmRlcihmKSBqb2luX29yZGVyKGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZV TEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEu aWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEpIGhhc2hfam9pbihkMSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVS IEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0g ZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOwor Q09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJh dGVneS5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWRkNWM0YzBlMTQKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNx bApAQCAtMCwwICsxLDg0IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFs bGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBqb2luX2RpbSAoaWQg c2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRl eHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb2luX2Rp bTsKKworQ1JFQVRFIFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRp bV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QKKwlTRUxF Q1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NSRUFURSBJ TkRFWCBqb2luX2ZhY3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFM WVpFIGpvaW5fZmFjdDsKKworLS0gV2UgZXhwZWN0IGEgaGFzaCBqb2luIGJ5IGRlZmF1bHQuCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0 IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKworLS0gVHJ5IGZvcmNpbmcg ZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9kaW0gYXMgdGhlIGlubmVyIHRhYmxl LgorLS0gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrIGV4Y2VwdCBmb3IgTUVSR0VfSk9JTl9NQVRF UklBTElaRTsgdGhhdCB3aWxsCistLSBmYWlsLCBiZWNhdXNlIHRoZSBwbGFubmVyIGtub3dzIHRo YXQgam9pbl9kaW0gKGlkKSBpcyB1bmlxdWUsIGFuZCB3aWxsCistLSByZWZ1c2UgdG8gYWRkIG1h cmsvcmVzdG9yZSBvdmVyaGVhZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdIQVNIX0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9 IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFU RVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQg T04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdO RVNURURfTE9PUF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKK0NPTU1JVDsKKworLS0gTm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4g dHVybiB3aXRoIGpvaW5fZmFjdCBhcyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwgb2YgdGhlc2Ug c2hvdWxkIHdvcmsuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn SEFTSF9KT0lOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpF KGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGYpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTkVTVEVEX0xPT1BfTUVNT0laRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xP T1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitD T01NSVQ7CisKKy0tIE5vbi13b3JraW5nIGNhc2VzLiBXZSBjYW4ndCBmb3JjZSBhIGZvcmVpZ24g am9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxlcywKKy0tIGJlY2F1c2UgdGhleSBhcmVuJ3QgZm9yZWln biB0YWJsZXMuIFdlIGFsc28gY2FuJ3QgdXNlIHR3byBkaWZmZXJlbnQKKy0tIHN0cmF0ZWdpZXMg b24gdGhlIHNhbWUgdGFibGUsIG5vciBjYW4gd2UgcHV0IGJvdGggdGFibGVzIG9uIHRoZSBpbm5l cgorLS0gc2lkZSBvZiB0aGUgc2FtZSBqb2luLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J05FU1RFRF9MT09QX1BMQUlOKGYpIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmRiMWUyMzQ4OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCwwICsxLDQ0IEBACitDUkVBVEUg RVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2Zm OworCistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0ZWQgYW55Lgor U0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gU2V0IGEgc21h bGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBleGNlZWQgaXQuCitTRVQg cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7CisKKy0tIEVuYWJsZSB0 aGUgY29sbGVjdG9yLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IG9uOwor CistLSBTZXQgdXAgYSBkdW1teSB0YWJsZS4KK0NSRUFURSBUQUJMRSBkdW1teV90YWJsZSAoYSBp bnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSwgcGFyYWxsZWxfd29ya2VycyA9IDApOworCistLSBUZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBG Uk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7CitTRUxFQ1QgKiBGUk9NIGR1bW15X3Rh YmxlOworCistLSBTaG91bGQgcmV0dXJuIHRoZSBhZHZpY2UgZnJvbSB0aGUgc2Vjb25kIHRlc3Qg cXVlcnkuCitTRUxFQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNl IGFnYWluLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0g UmFpc2UgdGhlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVs dGlwbGUgY2h1bmtzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQg PSAyMDAwOworCistLSBQdXNoIGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0 b3IuCitETyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VM RUNUICogRlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworCistLSBDaGVj ayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0 X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUs IHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0 aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRf bG9jYWxfYWR2aWNlKCk7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9w YXJ0aXRpb253aXNlLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndp c2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNTE0NTZkYmJi NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlv bndpc2Uuc3FsCkBAIC0wLDAgKzEsOTkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBt YXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9u d2lzZV9qb2luID0gdHJ1ZTsKKworQ1JFQVRFIFRBQkxFIHB0MSAoaWQgaW50ZWdlciBwcmltYXJ5 IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NS RUFURSBUQUJMRSBwdDFhIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAo MTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHQxYiBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWMgUEFS VElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MSAoaWQsIGRpbTEsIHZh bDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MTsKKwor Q1JFQVRFIFRBQkxFIHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwy IGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJ VElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQy IEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFM VUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZh bHNlKTsKK0lOU0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21l IG90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwzMDAwLDIpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDI7CisKK0NSRUFURSBUQUJMRSBwdDMgKGlk IGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTMgdGV4dCwgdmFsMyBpbnQpCisJUEFSVElUSU9OIEJZ IFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQzYSBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxV RVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworQ1JFQVRFIFRBQkxFIHB0M2IgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEw MDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFU RSBUQUJMRSBwdDNjIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAo MzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBw dDMgKGlkLCBkaW0zLCB2YWwzKQorCVNFTEVDVCBnLCAnYSB0aGlyZCByYW5kb20gdGV4dCAnIHx8 IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDAsMykgZzsKK1ZB Q1VVTSBBTkFMWVpFIHB0MzsKKworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2ggKGlkIGludGVnZXIg cHJpbWFyeSBrZXksIGRpbW0gdGV4dCwgdmFsbSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChp ZCk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGEgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAg ICBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxNTAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoYiBQQVJUSVRJT04gT0YgcHRtaXNt YXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMTUwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHRtaXNtYXRjaCAoaWQsIGRpbW0s IHZhbG0pCisJU0VMRUNUIGcsICd5ZXQgYW5vdGhlciB0ZXh0ICcgfHwgZywgKGcgJSAyKSArIDEK KwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0bWlz bWF0Y2g7CisKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQK KyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworCistLSBTdXBwcmVz cyBwYXJ0aXRpb253aXNlIGpvaW4sIG9yIGRvIGl0IGp1c3QgcGFydGlhbGx5LgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UocHQxIHB0MiBw dDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0 MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAg IEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHQyKSBwdDMpJzsKK0VYUExB SU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMg V0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0g MSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworQ09NTUlUOworCistLSBUZXN0IGNvbmZsaWN0 aW5nIGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQ QVJUSVRJT05XSVNFKChwdDEgcHQyKSAocHQxIHB0MykpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNF LCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0g cHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEg QU5EIHZhbDMgPSAxOworQ09NTUlUOworCistLSBDYW4ndCBmb3JjZSBhIHBhcnRpdGlvbndpc2Ug am9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHRtaXNtYXRjaCkpJzsKK0VYUExB SU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHRtaXNtYXRj aCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOworQ09NTUlUOworCistLSBGb3JjZSBqb2lu IG9yZGVyIGZvciBhIHBhcnRpY3VsYXIgYnJhbmNoIG9mIHRoZSBwYXJ0aXRpb253aXNlIGpvaW4g d2l0aAorLS0gYW5kIHdpdGhvdXQgbWVudGlvbmluZyB0aGUgc2NoZW1hIG5hbWUuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihwdDMvcHVibGlj LnB0M2EgcHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQxYSknOworRVhQTEFJTiAoUExBTl9B RFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEu aWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwy ID0gMSBBTkQgdmFsMyA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pP SU5fT1JERVIocHQzL3B0M2EgcHQyL3B0MmEgcHQxL3B0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURW SUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlk ID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9 IDEgQU5EIHZhbDMgPSAxOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvcHJlcGFyZWQuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcHJlcGFy ZWQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZWMzMGVlZGVl NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVk LnNxbApAQCAtMCwwICsxLDM3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBwdGFiIChpZCBp bnRlZ2VyLCB2YWwgdGV4dCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworCitT RVQgcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gZmFsc2U7CisK Ky0tIE5vdCBwcmVwYXJlZCwgc28gYWR2aWNlIHNob3VsZCBiZSBnZW5lcmF0ZWQuCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSAKK1NFTEVDVCAqIEZST00gcHRhYjsKKworLS0gUHJl cGFyZWQsIHNvIGFkdmljZSBzaG91bGQgbm90IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUgcHQxIEFT IFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVY RUNVVEUgcHQxOworCitTRVQgcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRh aWxzID0gdHJ1ZTsKKworLS0gUHJlcGFyZWQsIGJ1dCBhbHdheXNfc3RvcmVfYWR2aWNlX2RldGFp bHMgPSB0cnVlLCBzbyBzaG91bGQgc2hvdyBhZHZpY2UuCitQUkVQQVJFIHB0MiBBUyBTRUxFQ1Qg KiBGUk9NIHB0YWI7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBFWEVDVVRFIHB0 MjsKKworLS0gTm90IHByZXBhcmVkLCBzbyBmZWVkYmFjayBzaG91bGQgYmUgZ2VuZXJhdGVkLgor U0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNlOwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihwdGFiKSc7CitFWFBMQUlOIChD T1NUUyBPRkYpIAorU0VMRUNUICogRlJPTSBwdGFiOworCistLSBQcmVwYXJlZCwgc28gYWR2aWNl IHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkLgorUFJFUEFSRSBwdDMgQVMgU0VMRUNUICogRlJPTSBw dGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBFWEVDVVRFIHB0MTsKKworU0VUIHBnX3BsYW5fYWR2 aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CisKKy0tIFByZXBhcmVkLCBi dXQgYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZSwgc28gc2hvdWxkIHNob3cgZmVl ZGJhY2suCitQUkVQQVJFIHB0NCBBUyBTRUxFQ1QgKiBGUk9NIHB0YWI7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBFWEVDVVRFIHB0MjsKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9z Y2FuLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGZjNDk0Yzdk OGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNx bApAQCAtMCwwICsxLDE5NSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIHNlcV9wYWdlX2Nvc3QgPSAwLjE7CitT RVQgcmFuZG9tX3BhZ2VfY29zdCA9IDAuMTsKK1NFVCBjcHVfdHVwbGVfY29zdCA9IDA7CitTRVQg Y3B1X2luZGV4X3R1cGxlX2Nvc3QgPSAwOworCitDUkVBVEUgVEFCTEUgc2Nhbl90YWJsZSAoYSBp bnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBzY2FuX3RhYmxlCisJU0VMRUNUIGcsICdzb21lIHRleHQgJyB8fCBn IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBzY2FuX3Rh YmxlX2IgT04gc2Nhbl90YWJsZSBVU0lORyBicmluIChiKTsKK1ZBQ1VVTSBBTkFMWVpFIHNjYW5f dGFibGU7CisKKy0tIFNlcXVlbnRpYWwgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworCistLSBJbmRleCBzY2FuCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUg YSA9IDE7CisKKy0tIEluZGV4LW9ubHkgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBCaXRtYXAg aGVhcCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKworLS0gVElEIHNjYW4KK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBX SEVSRSBjdGlkID0gJygwLDEpJzsKKworLS0gVElEIHJhbmdlIHNjYW4KK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQg PiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBvZiBv dXIgdGVzdCBxdWVyaWVzIHRvIHVzZSB0aGUgc2NhbiB0eXBlIHRoZXkKKy0tIHdhbnRlZCB0byB1 c2UgYW55d2F5LiBUaGlzIHNob3VsZCBzdWNjZWVkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBh ID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NB TihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0 aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSkn OworQ09NTUlUOworCistLSBUcnkgdG8gZm9yY2UgYSBmdWxsIHNjYW4gb2YgdGhlIHRhYmxlIHRv IHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxsCistLSBvZiB0aGVzZSB3aWxsIGZhaWwuIEFu IGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2NhbiBjb3VsZCBwb3RlbnRpYWxseQorLS0gZ2Vu ZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQgdGhlIHBsYW5uZXIgZG9lcyBub3QgZXZlbiBj b25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGllcyBkdWUgdG8gdGhlIGxhY2sgb2YgYSBXSEVS RSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hF QVBfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK0NPTU1JVDsKKworLS0gVHJ5IGFnYWluIHRv IGZvcmNlIGluZGV4IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRoZSBJTkRFWF9T Q0FOCistLSBhbmQgQklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZX1NDQU4gY2Fu J3QgYmUgZm9yY2VkIGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVtbnMgbm90IGlu Y2x1ZGVkIGluIHRoZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUg YSA+IDA7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID4gMDsKK0NPTU1JVDsKKworLS0gV2UgY2FuIGZvcmNlIGEgcHJpbWFyeSBrZXkg bG9va3VwIHRvIHVzZSBhIHNlcXVlbnRpYWwgc2NhbiwgYnV0IHdlCistLSBjYW4ndCBmb3JjZSBp dCB0byB1c2UgYW4gaW5kZXgtb25seSBzY2FuIChkdWUgdG8gdGhlIGNvbHVtbiBsaXN0KQorLS0g b3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNlIG9mIGEgVElEIHF1YWwpLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsKKworLS0gV2UgY2FuIGZvcmNpYmx5IGRvd25ncmFk ZSBhbiBpbmRleC1vbmx5IHNjYW4gdG8gYW4gaW5kZXggc2NhbiwgYnV0IHdlIGNhbid0CistLSBm b3JjZSB0aGUgdXNlIG9mIGFuIGluZGV4IHRoYXQgdGhlIHBsYW5uZXIgdGhpbmtzIGlzIGluYXBw bGljYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKK0NPTU1JVDsKKworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1 ZW50aWFsIHNjYW4gaW4gcGxhY2Ugb2YgYSBiaXRtYXAgaGVhcCBzY2FuLAorLS0gYnV0IGEgcGxh aW4gaW5kZXggc2NhbiBvbiBhIEJSSU4gaW5kZXggaXMgbm90IHBvc3NpYmxlLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CitDT01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBz Y2FuIHJhdGhlciB0aGFuIGEgVElEIHNjYW4gb3IKKy0tIFRJRCByYW5nZSBzY2FuLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBj dGlkIDwgJygyLDEpJzsKK0NPTU1JVDsKKworLS0gVGVzdCBtb3JlIGNvbXBsZXggc2NlbmFyaW9z IHdpdGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNob3VsZCBzdGlsbCB3b3JrIGlmIHdlIG1l bnRpb24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKKy0tIEJ1dCBub3QgaWYgd2UgbWVudGlvbiB0aGUgd3Jvbmcgc2NoZW1hLgorU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgY2lsYnVwLnNj YW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0gSXQncyBPSyB0byByZXBlYXQgdGhl IHNhbWUgYWR2aWNlLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0 YXJnZXQgaXMgZXZlbiBub3Rpb25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2Fu X3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsK KworLS0gVGVzdCBhc3NvcnRlZCBpbmNvcnJlY3QgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKG5vdGhpbmcpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihub3RoaW5n IHdoYXRzb2V2ZXIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBh IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihub3RoaW5n IHdoYXRzb2V2ZXIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBh IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKK0NPTU1JVDsKKworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBp bnN0YW5jZXMgb2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJs ZSBzIE9OIGcgPSBzLmE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKHMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBz LmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBn IExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2Fu X3RhYmxlIHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4ocykgU0VRX1NDQU4ocyMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNj YW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBn ID0gcy5hOworQ09NTUlUOworCistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIHNjYW5z IHdpdGhpbiBhIHN1YnF1ZXJ5LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKSB4OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKK0JFR0lO OworLS0gU2hvdWxkIG5vdCBtYXRjaC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAw KSB4OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKy0tIFNob3Vs ZCBtYXRjaCBmaXJzdCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTihzQHgpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZT RVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CistLSBT aG91bGQgbWF0Y2ggc2Vjb25kIHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEg PSAxIE9GRlNFVCAwKTsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3NlbWlqb2luLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NlbWlqb2lu LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWE0YWU1MmQxZDkK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zZW1pam9pbi5z cWwKQEAgLTAsMCArMSwxMTggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIHNqX3dpZGUgKAor CWlkIGludGVnZXIgcHJpbWFyeSBrZXksCisJdmFsMSBpbnRlZ2VyLAorCXBhZGRpbmcgdGV4dCBz dG9yYWdlIHBsYWluCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIHNqX3dpZGUKKwlTRUxFQ1QgZywgZyUxMCsxLCByZXBlYXQoJyAnLCAzMDApIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUgSU5ERVggT04gc2pfd2lkZSAodmFs MSk7CitWQUNVVU0gQU5BTFlaRSBzal93aWRlOworCitDUkVBVEUgVEFCTEUgc2pfbmFycm93ICgK KwlpZCBpbnRlZ2VyIHByaW1hcnkga2V5LAorCXZhbDEgaW50ZWdlcgorKSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzal9uYXJyb3cKKwlTRUxFQ1QgZywg ZyUxMCsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUgSU5ERVggT04g c2pfbmFycm93ICh2YWwxKTsKK1ZBQ1VVTSBBTkFMWVpFIHNqX25hcnJvdzsKKworLS0gV2UgZXhw ZWN0IHRoaXMgdG8gbWFrZSB0aGUgVkFMVUVTIGxpc3QgdW5pcXVlIGFuZCB1c2UgaW5kZXggbG9v a3VwcyB0bworLS0gZmluZCB0aGUgcm93cyBpbiBzal93aWRlLCBzbyBhcyB0byBhdm9pZCBhIGZ1 bGwgc2NhbiBvZiBzal93aWRlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSks ICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisKKy0tIElmIHdlIGFzayBmb3IgYSB1 bmlxdWUgc2VtaWpvaW4sIHdlIHNob3VsZCBnZXQgdGhlIHNhbWUgcGxhbiBhcyB3aXRoCistLSBu byBhZHZpY2UuIElmIHdlIGFzayBmb3IgYSBub24tdW5pcXVlIHNlbWlqb2luLCB3ZSBzaG91bGQg c2VlIGEgU2VtaQorLS0gSm9pbiBvcGVyYXRpb24gaW4gdGhlIHBsYW4gdHJlZS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoIipWQUxV RVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g c2pfd2lkZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMs IDMpLCAoNCwgNCksICg1LCA1KSk7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J3NlbWlqb2luX25vbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChpZCwgdmFsMSkgSU4g KFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CitDT01NSVQ7 CisKKy0tIEJlY2F1c2UgdGhpcyB0YWJsZSBpcyBuYXJyb3dlciB0aGFuIHRoZSBwcmV2aW91cyBv bmUsIGEgc2VxdWVudGlhbCBzY2FuCistLSBpcyBsZXNzIGV4cGVuc2l2ZSwgYW5kIHdlIGNob29z ZSBhIHN0cmFpZ2h0Zm9yd2FyZCBTZW1pIEpvaW4gcGxhbiBieQorLS0gZGVmYXVsdC4gKE5vdGUg dGhhdCB0aGlzIGlzIGFsc28gdmVyeSBzZW5zaXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgSU4K Ky0tIGxpc3QsIHdoaWNoIGFmZmVjdHMgaG93IG1hbnkgaW5kZXggbG9va3VwcyB0aGUgYWx0ZXJu YXRpdmUgcGxhbiB3aWxsIG5lZWQuKQorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgx LCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKworLS0gSGVyZSwgd2UgZXhw ZWN0IGFkdmlzaW5nIGEgdW5pcXVlIHNlbWlqb2luIHRvIHN3aXRoIHRvIHRoZSBzYW1lIHBsYW4g dGhhdAorLS0gd2UgZ290IHdpdGggc2pfd2lkZSwgYW5kIGFkdmlzaW5nIGEgbm9uLXVuaXF1ZSBz ZW1pam9pbiBzaG91bGQgbm90IGNoYW5nZQorLS0gdGhlIHBsYW4uCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIqVkFMVUVTKiIpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJv dworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAo NCwgNCksICg1LCA1KSk7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlq b2luX25vbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFM VUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKK0NPTU1JVDsKKwor LS0gSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHdlIG1hZGUgdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpv aW4gdW5pcXVlLCBidXQgaGVyZSwKKy0tIHdlIHNob3VsZCBtYWtlIHRoZSBpbm5lciBzaWRlIHVu aXF1ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9t IHNqX25hcnJvdyk7CisKKy0tIFdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIGEgcGxhbiB3aXRo IG9yIHdpdGhvdXQgdGhlIG1ha2UtdW5pcXVlIHN0cmF0ZWd5LAorLS0gd2l0aCBlaXRoZXIgc2lk ZSBhcyB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBn CisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdykn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pf bmFycm93KTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5p cXVlKHNqX25hcnJvdykgam9pbl9vcmRlcihzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcK KyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSBq b2luX29yZGVyKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4g KHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKK0NPTU1JVDsKKworLS0gSG93ZXZlciwgbWVu dGlvbmluZyB0aGUgd3Jvbmcgc2lkZSBvZiB0aGUgam9pbiBzaG91bGQgcmVzdWx0IGluIGFuIGFk dmljZQorLS0gZmFpbHVyZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdzZW1pam9pbl91bmlxdWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcg aW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisg ICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworQ09NTUlUOworCist LSBUZXN0IGNvbmZsaWN0aW5nIGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFycm93KSBzZW1pam9pbl9ub25fdW5p cXVlKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVj dCB2YWwxIGZyb20gc2pfbmFycm93KTsKK0NPTU1JVDsKKworLS0gVHJ5IGFwcGx5aW5nIFNFTUlK T0lOX1VOSVFVRSgpIHRvIGEgbm9uLXNlbWlqb2luLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBn LCBzal9uYXJyb3cgcyBXSEVSRSBnID0gcy52YWwxOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3N5bnRheC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjU2YTVkNTRlMmI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvc3ludGF4LnNxbApAQCAtMCwwICsxLDY4IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CisK Ky0tIEFuIGVtcHR5IHN0cmluZyBpcyBhbGxvd2VkLiBFbXB0eSB0YXJnZXQgbGlzdHMgYXJlIGFs bG93ZWQgZm9yIG1vc3QgYWR2aWNlCistLSB0YWdzLCBidXQgbm90IGZvciBKT0lOX09SREVSLiAi U3VwcGxpZWQgUGxhbiBBZHZpY2UiIHNob3VsZCBiZSBvbWl0dGVkIGluCistLSB0ZXh0IGZvcm1h dCB3aGVuIHRoZXJlIGlzIG5vIGFjdHVhbCBhZHZpY2UsIGJ1dCBub3QgaW4gbm9uLXRleHQgZm9y bWF0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcnOworRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKSc7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdORVNURURfTE9PUF9QTEFJTigpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgRk9STUFUIEpTT04p IFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKCknOwor CistLSBUZXN0IGFzc29ydGVkIHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24sIHdoaXRlc3Bh Y2UsIGFuZCB3aGljaCBwYXJ0cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZpZXIgYXJlIGlu Y2x1ZGVkLiBUaGVzZSBzaG91bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHgpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlcV9zY2FuKHhAeSknOworRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX3NjYW4oeCMyKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTiAoeC95KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcgIFNFUV9TQ0FOICggeCAvIHkgLiB6ICkgICc7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTigieCIjMi8ieSIuInoiQCJ0IiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKKworLS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRVUVOVElBTF9TQ0FOKHgpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4nOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oIiIpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4oImEiJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIyc7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJygpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnMTIzJzsKKworLS0gVGFncyBsaWtlIFNFUV9TQ0FOIGFuZCBOT19HQVRIRVIgZG9uJ3QgYWxs b3cgc3VibGlzdHMgYXQgYWxsOyBvdGhlciB0YWdzLAorLS0gZXhjZXB0IGZvciBKT0lOX09SREVS LCBhbGxvdyBhdCBtb3N0IG9uZSBsZXZlbCBvZiBzdWJsaXN0LiBIZW5jZSwgdGhlc2UKKy0tIGV4 YW1wbGVzIHNob3VsZCBlcnJvciBvdXQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NF UV9TQ0FOKCh4KSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdHQVRIRVIoKCh4KSkp JzsKKworLS0gTGVnYWwgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8q Ki8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSEFTSF9KT0lOKF8pLyoqKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg MTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4o Lyp4Ki95KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTih5Ly8qeCoveiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKworLS0gVW50ZXJtaW5hdGVkIGNvbW1lbnRzLgorU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0pPSU5fT1JERVIoImZPTyIpIC8qIG9vcHMnOworCistLSBOZXN0ZWQgY29tbWVudHMgYXJl IG5vdCBzdXBwb3J0ZWQsIHNvIHRoZSBmaXJzdCBvZiB0aGVzZSBpcyBsZWdhbCBhbmQKKy0tIHRo ZSBzZWNvbmQgaXMgbm90LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKi8qLyc7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICcvKi8qIHN0dWZmICovKi8nOworCistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUg cmVsYXRpb24gaWRlbnRpZmllcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJ R05fSk9JTihhKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTigo YSkpJzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5w bCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjc1OTVjZGRmNzUKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKQEAgLTAsMCArMSwxNDgg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisKKyMgUnVuIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMgdW5kZXIgcGdfcGxh bl9hZHZpY2UgdG8gY2hlY2sgZm9yIHByb2JsZW1zLgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5n cyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIEN3ZCAgICAgICAgICAgIHF3KGFic19wYXRoKTsKK3Vz ZSBGaWxlOjpCYXNlbmFtZSBxdyhkaXJuYW1lKTsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKwor IyBJbml0aWFsaXplIHRoZSBwcmltYXJ5IG5vZGUKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7Ciskbm9kZS0+aW5pdCgpOworCisjIFNldCB1cCBvdXIg ZGVzaXJlZCBjb25maWd1cmF0aW9uLgorIworIyBXZSBydW4gd2l0aCBwZ19wbGFuX2FkdmljZS5z aGFyZWRfY29sbGVjdGlvbl9saW1pdCBzZXQgdG8gZW5zdXJlIHRoYXQgdGhlCisjIHBsYW4gdHJl ZSB3YWxrZXIgY29kZSBydW5zIGFnYWluc3QgZXZlcnkgcXVlcnkgaW4gdGhlIHJlZ3Jlc3Npb24g dGVzdHMuIElmCisjIHdlJ3JlIHVuYWJsZSB0byBwcm9wZXJseSBhbmFseXplIGFueSBvZiB0aG9z ZSBwbGFuIHRyZWVzLCB0aGlzIHRlc3Qgc2hvdWxkIGZhaWwuCisjCisjIFdlIHNldCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgdG8gYW4gYWR2aWNlIHN0cmluZyB0aGF0IHdpbGwgY2F1c2UgdGhlIGFk dmljZQorIyB0cm92ZSB0byBiZSBwb3B1bGF0ZWQgd2l0aCBhIGZldyBlbnRyaWVzIG9mIHZhcmlv dXMgc29ydHMsIGJ1dCB3aGljaCB3ZSBkbworIyBub3QgZXhwZWN0IHRvIG1hdGNoIGFueXRoaW5n IGluIHRoZSByZWdyZXNzaW9uIHRlc3QgcXVlcmllcy4gVGhpcyB3YXksIHRoZQorIyBwbGFubmVy IGhvb2tzIHdpbGwgYmUgY2FsbGVkLCBpbXByb3ZpbmcgY29kZSBjb3ZlcmFnZSwgYnV0IG5vIHBs YW5zIHNob3VsZAorIyBhY3R1YWxseSBjaGFuZ2UuCisjCisjIHBnX3BsYW5fYWR2aWNlLmFsd2F5 c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1mYWxzZSBpcyBuZWVkZWQgdG8gYXZvaWQgYnJlYWtp bmcKKyMgcmVncmVzc2lvbiB0ZXN0IHF1ZXJpZXMgdGhhdCB1c2UgRVhQTEFJTi4gSW4gdGhlIHJl YWwgd29ybGQsIGl0IHNlZW1zIGxpa2UKKyMgdXNlcnMgd2lsbCB3YW50IEVYUExBSU4gb3V0cHV0 IHRvIHNob3cgc3VwcGxpZWQgYWR2aWNlIHNvIHRoYXQgaXQncyBjbGVhcgorIyB3aGV0aGVyIG5v cm1hbCBwbGFubmVyIGJlaGF2aW9yIGhhcyBiZWVuIGFsdGVyZWQsIGJ1dCBoZXJlIHRoYXQncyB1 bmRlc2lyYWJsZS4KKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxFT00p OworcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ9MTAwMDAwMAorcGdfcGxh bl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rvcj10cnVlCitzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM9 cGdfcGxhbl9hZHZpY2UKK3BnX3BsYW5fYWR2aWNlLmFkdmljZT0nU0VRX1NDQU4oZW50aXJlbHlf ZmljdGl0aW91cykgSEFTSF9KT0lOKHRvdGFsX2ZhYnJpY2F0aW9uKSBHQVRIRVIoY29tcGxldGVs eV9pbWFnaW5hcnkpJworcGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2 aWNlPWZhbHNlCitFT00KKyRub2RlLT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRoKCIu Li8uLiIpOworCisjIC0tZGxwYXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIGxv Y2F0aW9uIG9mIHJlZ3Jlc3Muc28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJlZ3Jlc3Npb24g dGVzdHMgcmVxdWlyZS4KK215ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVTU19TSExJQn0p OworCisjIC0tb3V0cHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBwbGFjZSB0aGUg b3V0cHV0IGZpbGVzLgorbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6 dG1wX2NoZWNrOworCisjIC0taW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9mIHRoZSBpbnB1 dCBmaWxlcy4KK215ICRpbnB1dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MiOworCisj IFJ1biB0aGUgdGVzdHMuCitteSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdSRVNTfSAuICIg IgorCSAgLiAiLS1iaW5kaXI9ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwiICIKKwkgIC4g Ii0taG9zdD0iIC4gJG5vZGUtPmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4gJG5vZGUtPnBv cnQgLiAiICIKKwkgIC4gIi0tc2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzL3BhcmFs bGVsX3NjaGVkdWxlICIKKwkgIC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAgIgorCSAgLiAi LS1pbnB1dGRpcj1cIiRpbnB1dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1dGRp clwiIik7CisKKyMgRHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwgaWYgdGhlcmUg aXMgb25lCitpZiAoJHJjICE9IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRkaXIvcmVncmVz c2lvbi5kaWZmcyI7CisJaWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0gZHVtcGluZyAk ZGlmZnMgPT09XG4iOworCQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXByaW50ICI9PT0g RU9GID09PVxuIjsKKwl9Cit9CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywgMCwgJ3JlZ3Jl c3Npb24gdGVzdHMgcGFzcycpOworCisjIENyZWF0ZSB0aGUgZXh0ZW5zaW9uIHNvIHdlIGNhbiBh Y2Nlc3MgdGhlIGNvbGxlY3RvcgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRF IEVYVEVOU0lPTiBwZ19wbGFuX2FkdmljZScpOworCisjIFZlcmlmeSB0aGF0IGEgbGFyZ2UgYW1v dW50IG9mIGFkdmljZSB3YXMgY29sbGVjdGVkCitteSAkYWxsX3F1ZXJ5X2NvdW50ID0gJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19n ZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorY21wX29rKCRhbGxfcXVlcnlfY291 bnQsICc+JywgMjAwMDAsICJjb3Bpb3VzIGFkdmljZSBjb2xsZWN0ZWQiKTsKKworIyBWZXJpZnkg dGhhdCBsb3RzIG9mIGRpZmZlcmVudCBhZHZpY2Ugc3RyaW5ncyB3ZXJlIGNvbGxlY3RlZAorbXkg JGRpc3RpbmN0X3F1ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVP TSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTQorCShTRUxFQ1QgRElTVElOQ1QgYWR2aWNlIEZST00g cGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkpOworRU9NCitjbXBfb2soJGRpc3RpbmN0 X3F1ZXJ5X2NvdW50LCAnPicsIDMwMDAsICJkaXZlcnNlIGFkdmljZSBjb2xsZWN0ZWQiKTsKKwor IyBXZSB3YW50IHRvIHRlc3QgZm9yIHRoZSBwcmVzZW5jZSBvZiBvdXIga25vd24gdGFncyBpbiB0 aGUgY29sbGVjdGVkIGFkdmljZS4KKyMgUHV0IGFsbCB0YWdzIGludG8gdGhlIGhhc2ggdGhhdCBm b2xsb3dzOyBtYXAgYW55IHRhZ3MgdGhhdCBhcmVuJ3QgdGVzdGVkCisjIGJ5IHRoZSBjb3JlIHJl Z3Jlc3Npb24gdGVzdHMgdG8gMCwgYW5kIG90aGVycyB0byAxLgorbXkgJXRhZ19tYXAgPSAoCisJ QklUTUFQX0hFQVBfU0NBTiA9PiAxLAorCUZPUkVJR05fSk9JTiA9PiAwLAorCUdBVEhFUiA9PiAx LAorCUdBVEhFUl9NRVJHRSA9PiAxLAorCUhBU0hfSk9JTiA9PiAxLAorCUlOREVYX09OTFlfU0NB TiA9PiAxLAorCUlOREVYX1NDQU4gPT4gMSwKKwlKT0lOX09SREVSID0+IDEsCisJTUVSR0VfSk9J Tl9NQVRFUklBTElaRSA9PiAxLAorCU1FUkdFX0pPSU5fUExBSU4gPT4gMSwKKwlORVNURURfTE9P UF9NQVRFUklBTElaRSA9PiAxLAorCU5FU1RFRF9MT09QX01FTU9JWkUgPT4gMSwKKwlORVNURURf TE9PUF9QTEFJTiA9PiAxLAorCU5PX0dBVEhFUiA9PiAxLAorCVBBUlRJVElPTldJU0UgPT4gMSwK KwlTRU1JSk9JTl9OT05fVU5JUVVFID0+IDEsCisJU0VNSUpPSU5fVU5JUVVFID0+IDEsCisJU0VR X1NDQU4gPT4gMSwKKwlUSURfU0NBTiA9PiAxLAorKTsKK2ZvciBteSAkdGFnIChzb3J0IGtleXMg JXRhZ19tYXApCit7CisJbXkgJGNoZWNraXQgPSAkdGFnX21hcHskdGFnfTsKKworCSMgU2VhcmNo IGZvciB0aGUgZ2l2ZW4gdGFnLiBUaGlzIGlzIG5vdCBlbnRpcmVseSByb2J1c3Q6IGl0IGNvdWxk IGdldCB0aHJvd24KKwkjIG9mZiBieSBhIHRhYmxlIGFsaWFzIHN1Y2ggYXMgIkZPUkVJR05fSk9J TigiLCBidXQgdGhhdCBwcm9iYWJseSB3b24ndAorCSMgaGFwcGVuIGluIHRoZSBjb3JlIHJlZ3Jl c3Npb24gdGVzdHMuCisJbXkgJHRhZ19jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgPDxFT00pOworU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRf YWR2aWNlKCkKKwlXSEVSRSBhZHZpY2UgTElLRSAnJSR0YWcoJScKK0VPTQorCisJIyBDaGVjayB0 aGF0IHRoZSB0YWcgZ290IGEgbm9uLXRyaXZpYWwgYW1vdW50IG9mIHVzZSwgdW5sZXNzIHRvbGQg b3RoZXJ3aXNlLgorCWNtcF9vaygkdGFnX2NvdW50LCAnPicsIDEwLCAibXVsdGlwbGUgdXNlcyBv ZiAkdGFnIikgaWYgJGNoZWNraXQ7CisKKwkjIFJlZ2FyZGxlc3MsIG5vdGUgdGhlIGV4YWN0IGNv dW50IGluIHRoZSBsb2csIGZvciBodW1hbiBjb25zdW1wdGlvbi4KKwlub3RlKCJmb3VuZCAkdGFn X2NvdW50IGFkdmljZSBzdHJpbmdzIGNvbnRhaW5pbmcgJHRhZyIpOworfQorCisjIFRyaWdnZXIg YSBwYXJ0aWFsIGNsZWFudXAgb2YgdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLCBhbmQgdGhl biBhIGZ1bGwKKyMgY2xlYW51cC4KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00p OworU0VUIHBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTUwMDsKK1NFTEVD VCAqIEZST00gcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorCitkb25l X3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mv c3JjL3NnbWwvY29udHJpYi5zZ21sCmluZGV4IDI0YjcwNmIyOWFkLi5iZGQ0ODY1ZjUzZiAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29u dHJpYi5zZ21sCkBAIC0xNTYsNiArMTU2LDcgQEAgQ1JFQVRFIEVYVEVOU0lPTiA8cmVwbGFjZWFi bGU+ZXh0ZW5zaW9uX25hbWU8L3JlcGxhY2VhYmxlPjsKICAmcGdmcmVlc3BhY2VtYXA7CiAgJnBn bG9naWNhbGluc3BlY3Q7CiAgJnBnb3ZlcmV4cGxhaW47CisgJnBncGxhbmFkdmljZTsKICAmcGdw cmV3YXJtOwogICZwZ3Jvd2xvY2tzOwogICZwZ3N0YXRzdGF0ZW1lbnRzOwpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApp bmRleCBhYzY2ZmNiZGI1Ny4uZDkwYjQzMzhkMmEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9m aWxlbGlzdC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xNDksNiAr MTQ5LDcgQEAKIDwhRU5USVRZIHBnZnJlZXNwYWNlbWFwICBTWVNURU0gInBnZnJlZXNwYWNlbWFw LnNnbWwiPgogPCFFTlRJVFkgcGdsb2dpY2FsaW5zcGVjdCAgU1lTVEVNICJwZ2xvZ2ljYWxpbnNw ZWN0LnNnbWwiPgogPCFFTlRJVFkgcGdvdmVyZXhwbGFpbiAgIFNZU1RFTSAicGdvdmVyZXhwbGFp bi5zZ21sIj4KKzwhRU5USVRZIHBncGxhbmFkdmljZSAgICBTWVNURU0gInBncGxhbmFkdmljZS5z Z21sIj4KIDwhRU5USVRZIHBncHJld2FybSAgICAgICBTWVNURU0gInBncHJld2FybS5zZ21sIj4K IDwhRU5USVRZIHBncm93bG9ja3MgICAgICBTWVNURU0gInBncm93bG9ja3Muc2dtbCI+CiA8IUVO VElUWSBwZ3N0YXRzdGF0ZW1lbnRzIFNZU1RFTSAicGdzdGF0c3RhdGVtZW50cy5zZ21sIj4KZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9w Z3BsYW5hZHZpY2Uuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YjMxOWY5MGZlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNl LnNnbWwKQEAgLTAsMCArMSw5NTIgQEAKKzwhLS0gZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5z Z21sIC0tPgorCis8c2VjdDEgaWQ9InBncGxhbmFkdmljZSIgeHJlZmxhYmVsPSJwZ19wcmV3YXJt Ij4KKyA8dGl0bGU+cGdfcGxhbl9hZHZpY2UgJm1kYXNoOyBoZWxwIHRoZSBwbGFubmVyIGdldCB0 aGUgcmlnaHQgcGxhbjwvdGl0bGU+CisKKyA8aW5kZXh0ZXJtIHpvbmU9InBncGxhbmFkdmljZSI+ CisgIDxwcmltYXJ5PnBnX3BsYW5fYWR2aWNlPC9wcmltYXJ5PgorIDwvaW5kZXh0ZXJtPgorCisg PHBhcmE+CisgIFRoZSA8ZmlsZW5hbWU+cGdfcGxhbl9hZHZpY2U8L2ZpbGVuYW1lPiBhbGxvd3Mg a2V5IHBsYW5uZXIgZGVjaXNpb25zIHRvIGJlCisgIGRlc2NyaWJlZCwgcmVwcm9kdWNlZCwgYW5k IGFsdGVyZWQgdXNpbmcgYSBzcGVjaWFsLXB1cnBvc2UgInBsYW4gYWR2aWNlIgorICBtaW5pLWxh bmd1YWdlLiBJdCBpcyBpbnRlbmRlZCB0byBhbGxvdyBzdGFiaWxpemF0aW9uIG9mIHBsYW4gY2hv aWNlcyB0aGF0CisgIHRoZSB1c2VyIGJlbGlldmVzIHRvIGJlIGdvb2QsIGFzIHdlbGwgYXMgZXhw ZXJpbWVudGF0aW9uIHdpdGggcGxhbnMgdGhhdAorICB0aGUgcGxhbm5lciBiZWxpZXZlcyB0byBi ZSBub24tb3B0aW1hbC4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgTm90ZSB0aGF0LCBzaW5jZSB0 aGUgcGxhbm5lciBvZnRlbiBtYWtlcyBnb29kIGRlY2lzaW9ucywgb3ZlcnJpZGluZyBpdHMKKyAg anVkZ2VtZW50IGNhbiBlYXNpbHkgYmFja2ZpcmUuIEZvciBleGFtcGxlLCBpZiB0aGUgZGlzdHJp YnV0aW9uIG9mIHRoZQorICB1bmRlcmx5aW5nIGRhdGEgY2hhbmdlcywgdGhlIHBsYW5uZXIgbm9y bWFsbHkgaGFzIHRoZSBvcHRpb24gdG8gYWRqdXN0IHRoZQorICBwbGFuIGluIGFuIGF0dGVtcHQg dG8gcHJlc2VydmUgZ29vZCBwZXJmb3JtYW5jZS4gSWYgdGhlIHBsYW4gYWR2aWNlIHByZXZlbnRz CisgIHRoaXMsIGEgdmVyeSBwb29yIHBsYW4gbWF5IGJlIGNob3Nlbi4gSXQgaXMgaW1wb3J0YW50 IHRvIHVzZSBwbGFuIGFkdmljZQorICBvbmx5IHdoZW4gcmlza3Mgb2YgY29uc3RyYWluaW5nIHRo ZSBwbGFubmVyJ3MgY2hvaWNlcyBhcmUgb3V0d2VpZ2hlZCBieQorICB0aGUgYmVuZWZpdHMuCisg PC9wYXJhPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2UtZ2V0dGluZy1zdGFydGVkIj4KKyAg PHRpdGxlPkdldHRpbmcgU3RhcnRlZDwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBJbiBvcmRlciB0 byB1c2UgdGhpcyBtb2R1bGUsIHRoZSA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4g bW9kdWxlCisgICBtdXN0IGJlIGxvYWRlZC4gWW91IGNhbiBkbyB0aGlzIG9uIGEgc3lzdGVtLXdp ZGUgYmFzaXMgYnkgYWRkaW5nCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4g dG8KKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9hZC1saWJyYXJpZXMiLz4gYW5k IHJlc3RhcnRpbmcgdGhlCisgICBzZXJ2ZXIsIG9yIGJ5IGFkZGluZyBpdCB0bworICAgPHhyZWYg bGlua2VuZD0iZ3VjLXNlc3Npb24tcHJlbG9hZC1saWJyYXJpZXMiLz4gYW5kIHN0YXJ0aW5nIGEg bmV3IHNlc3Npb24sCisgICBvciBieSBsb2FkaW5nIGl0IGludG8gYW4gaW5kaXZpZHVhbCBzZXNz aW9uIHVzaW5nIHRoZQorICAgPGxpbmsgbGlua2VuZD0ic3FsLWxvYWQiPjxsaXRlcmFsPkxPQUQ8 L2xpdGVyYWw+PC9saW5rPiBjb21tYW5kLiBJZiB5b3UKKyAgIHdpc2ggdG8gdXNlIHRoZQorICAg PGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWNvbGxlY3RvciI+Y29sbGVjdG9yIGludGVyZmFj ZTwvbGluaz4sCisgICB5b3UgbXVzdCBhbHNvIHRoZSA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwv bGl0ZXJhbD4gZXh0ZW5zaW9uCisgICBpbiB0aGUgZGF0YWJhc2Ugd2hlcmUgeW91IHdpc2ggdG8g dXNlIHRoZSBjb2xsZWN0b3IuIFVzZSB0aGUgY29tbWFuZAorICAgPGxpdGVyYWw+Q1JFQVRFIEVY VEVOU0lPTiBwZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gdG8gZG8gdGhpcy4gSWYgeW91IGRvCisg ICBub3Qgd2lzaCB0byB1c2UgdGhlIGNvbGxlY3RvciBpbnRlcmZhY2UsIHRoaXMgc3RlcCBpcyBu b3QgcmVxdWlyZWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIE9uY2UgdGhlIDxsaXRlcmFs PnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBtb2R1bGUgaXMgbG9hZGVkLAorICAgPGxpbmsgbGlu a2VuZD0ic3FsLWV4cGxhaW4iPjxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+PC9saW5rPiB3aWxs IHN1cHBvcnQKKyAgIGEgPGxpdGVyYWw+UExBTl9BRFZJQ0U8L2xpdGVyYWw+IG9wdGlvbi4gWW91 IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc2VlCisgICBhIHBsYW4gYWR2aWNlIHN0cmluZyBmb3Ig dGhlIGNob3NlbiBwbGFuLiBGb3IgZXhhbXBsZToKKyAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rp bmc+CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorICAgICAgICBTRUxFQ1QgKiBG Uk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAg ICAgICAgICAgUVVFUlkgUExBTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2Vx IFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gam9pbl9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBk KQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQor PC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIHVz ZXIgaGFzIG5vdCBzcGVjaWZpZWQgYW55IGFkdmljZTsgaW5zdGVhZCwgdGhlCisgICBwbGFubmVy IGhhcyBiZWVuIHBlcm1pdHRlZCB0byBtYWtlIHdoYXRldmVyIGRlY2lzaW9ucyBpdCB0aGlua3Mg YmVzdCwgYW5kCisgICB0aG9zZSBkZWNpc2lvbnMgYXJlIG1lbW9yaWFsaXplZCBpbiB0aGUgZm9y bSBvZiBhbiBhZHZpY2Ugc3RyaW5nLgorICAgPGxpdGVyYWw+Sk9JTl9PUkRFUihmIGQpPC9saXRl cmFsPiBtZWFucyB0aGF0IDxsaXRlcmFsPmY8L2xpdGVyYWw+IHNob3VsZAorICAgYmUgdGhlIGRy aXZpbmcgdGFibGUsIGFuZCB0aGUgZmlyc3QgdGFibGUgdG8gd2hpY2ggaXQgc2hvdWxkIGJlIGpv aW5lZCBpcworICAgPGxpdGVyYWw+ZDwvbGl0ZXJhbD4uIDxsaXRlcmFsPkhBU0hfSk9JTihkKTwv bGl0ZXJhbD4gbWVhbnMgdGhhdAorICAgPGxpdGVyYWw+ZDwvbGl0ZXJhbD4gc2hvdWxkIGFwcGVh ciBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGhhc2ggam9pbi4KKyAgIDxsaXRlcmFsPlNFUV9TQ0FO KGYgZCk8L2xpdGVyYWw+IG1lYW5zIHRoYXQgYm90aCA8bGl0ZXJhbD5mPC9saXRlcmFsPgorICAg YW5kIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHNob3VsZCBiZSBhY2Nlc3NlZCB2aWEgYSBzZXF1ZW50 aWFsIHNjYW4uCisgICA8bGl0ZXJhbD5OT19HQVRIRVIoZiBkKTwvbGl0ZXJhbD4gbWVhbnMgdGhh dCBuZWl0aGVyIDxsaXRlcmFsPmY8L2xpdGVyYWw+CisgICBub3IgPGxpdGVyYWw+ZDwvbGl0ZXJh bD4gc2hvdWxkIGFwcGVhciBiZW5lYXRoIGEgPGxpdGVyYWw+R2F0aGVyPC9saXRlcmFsPgorICAg b3IgPGxpdGVyYWw+R2F0aGVyIE1lcmdlPC9saXRlcmFsPiBub2RlLiBGb3IgbW9yZSBkZXRhaWxz IG9uIHRoZSBwbGFuCisgICBhZHZpY2UgbWluaS1sYW5ndWFnZSwgc2VlIHRoZSBpbmZvcm1hdGlv biBvbgorICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLXRhcmdldHMiPmFkdmljZSB0YXJn ZXRzPC9saW5rPiBhbmQKKyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS10YWdzIj5hZHZp Y2UgdGFnczwvbGluaz4sIGJlbG93LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJZiB5b3Ug d2FudCB0byBzZWUgdGhlIGFkdmljZSBzdHJpbmdzIGZvciBhIGxhcmdlIG51bWJlciBvZiBxdWVy aWVzLCBvcgorICAgYW4gZW50aXJlIHdvcmtsb2FkLCBydW5uaW5nIDxsaXRlcmFsPkVYUExBSU4g KFBMQU5fQURWSUNFKTwvbGl0ZXJhbD4gZm9yCisgICBlYWNoIG9uZSBtYXkgbm90IGJlIGNvbnZl bmllbnQuIEluIHN1Y2ggc2l0dWF0aW9ucywgaXQgY2FuIGJlIG1vcmUKKyAgIGNvbnZlbmllbnQg dG8gdXNlIGFuCisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtY29sbGVjdG9yIj5hZHZp Y2UgY29sbGVjdG9yPC9saW5rPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgT25jZSB5b3Ug aGF2ZSBhbiBhZHZpY2Ugc3RyaW5nIGZvciBhIHF1ZXJ5LCB5b3UgY2FuIHVzZSBpdCB0byBjb250 cm9sIGhvdworICAgdGhhdCBxdWVyeSBpcyBwbGFubmVkLiBZb3UgY2FuIGRvIHRoaXMgYnkgc2V0 dGluZworICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2UuYWR2aWNlPC9saXRlcmFsPiB0byB0aGUg YWR2aWNlIHN0cmluZyB5b3UndmUKKyAgIGNob3Nlbi4gVGhpcyBjYW4gYmUgYW4gYWR2aWNlIHN0 cmluZyB0aGF0IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIHN5c3RlbSwKKyAgIG9yIG9uZSB5b3UndmUg d3JpdHRlbiB5b3Vyc2VsZi4gT25lIGdvb2Qgd2F5IG9mIGNyZWF0aW5nIHlvdXIgb3duIGFkdmlj ZQorICAgc3RyaW5nIGlzIHRvIHRha2UgdGhlIHN0cmluZyBnZW5lcmF0ZWQgYnkgdGhlIHN5c3Rl bSBhbmQgcGljayBvdXQganVzdAorICAgdGhvc2UgZWxlbWVudHMgdGhhdCB5b3Ugd2lzaCB0byBl bmZvcmNlLiBJbiB0aGUgZXhhbXBsZSBhYm92ZSwKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNl PC9saXRlcmFsPiBlbWl0cyBhZHZpY2UgZm9yIHRoZSBqb2luIG9yZGVyLCB0aGUKKyAgIGpvaW4g bWV0aG9kLCB0aGUgc2NhbiBtZXRob2QsIGFuZCB0aGUgdXNlIG9mIHBhcmFsbGVsaXNtLCBidXQg eW91IG1pZ2h0CisgICBvbmx5IHdhbnQgdG8gY29udHJvbCB0aGUgam9pbiBvcmRlcjoKKyAgPC9w YXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pP SU5fT1JERVIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpCisgICAgICAgIFNFTEVDVCAqIEZS T00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAg ICAgICAgICBRVUVSWSBQTEFOCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEg U2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkg LyogbWF0Y2hlZCAqLworPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIFNpbmNlIHRo ZSA8bGl0ZXJhbD5QTEFOX0FEVklDRTwvbGl0ZXJhbD4gb3B0aW9uIHRvCisgICA8bGl0ZXJhbD5F WFBMQUlOPC9saXRlcmFsPiB3YXMgbm90IHNwZWNpZmllZCwgbm8gYWR2aWNlIHN0cmluZyBpcyBn ZW5lcmF0ZWQKKyAgIGZvciB0aGUgcGxhbi4gSG93ZXZlciwgdGhlIHN1cHBsaWVkIHBsYW4gYWR2 aWNlIGlzIHN0aWxsIHNob3duIHNvIHRoYXQKKyAgIGFueW9uZSBsb29raW5nIGF0IHRoZSA8bGl0 ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiBvdXRwdXQga25vd3MgdGhhdCB0aGUKKyAgIGNob3NlbiBw bGFuIHdhcyBpbmZsdWVuY2VkIGJ5IHBsYW4gYWR2aWNlLiBJZiBpbmZvcm1hdGlvbiBhYm91dCBz dXBwbGllZAorICAgcGxhbiBhZHZpY2UgaXMgbm90IGRlc2lyZWQsIGl0IGNhbiBiZSBzdXBwcmVz c2VkIGJ5IGNvbmZpZ3VyaW5nCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5hbHdheXNfZXhw bGFpbl9zdXBwbGllZF9hZHZpY2UgPSBmYWxzZTwvbGl0ZXJhbD4uCisgICBGb3IgZWFjaCBwaWVj ZSBvZiBzdXBwbGllZCBhZHZpY2UsIHRoZSBvdXRwdXQgc2hvd3MKKyAgIDxsaW5rIGxpbmtlbmQ9 InBncGxhbmFkdmljZS1mZWVkYmFjayI+YWR2aWNlIGZlZWRiYWNrPC9saW5rPiBpbmRpY2F0aW5n CisgICB3aGV0aGVyIG9yIG5vdCB0aGUgYWR2aWNlIHdhcyBzdWNjZXNzZnVsbHkgYXBwbGllZCB0 byB0aGUgcXVlcnkuIEluIHRoaXMKKyAgIGNhc2UsIHRoZSBmZWVkYmFjayBzYXlzIDxsaXRlcmFs Pi8qIG1hdGNoZWQgKi88L2xpdGVyYWw+LCB3aGljaCBtZWFucyB0aGF0CisgICA8bGl0ZXJhbD5m PC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ZDwvbGl0ZXJhbD4gd2VyZSBmb3VuZCBpbiB0aGUgcXVl cnkgYW5kCisgICB0aGF0IHRoZSByZXN1bHRpbmcgcXVlcnkgcGxhbiBjb25mb3JtcyB0byB0aGUg c3BlY2lmaWVkIGFkdmljZS4KKyAgPC9wYXJhPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0i cGdwbGFuYWR2aWNlLWhvdy1pdC13b3JrcyI+CisgIDx0aXRsZT5Ib3cgSXQgV29ya3M8L3RpdGxl PgorCisgIDxwYXJhPgorICAgUGxhbiBhZHZpY2UgaXMgd3JpdHRlbiBpbXBlcmF0aXZlbHk7IHRo YXQgaXMsIGl0IHNwZWNpZmllcyB3aGF0IHNob3VsZCBiZQorICAgZG9uZS4gSG93ZXZlciwgYXQg YW4gaW1wbGVtZW50YXRpb24gbGV2ZWwsCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0 ZXJhbD4gd29ya3MgYnkgdGVsbGluZyB0aGUgY29yZSBwbGFubmVyIHdoYXQKKyAgIHNob3VsZCBu b3QgYmUgZG9uZS4gSW4gb3RoZXIgd29yZHMsIGl0IG9wZXJhdGVzIGJ5IGNvbnN0cmFpbmluZyB0 aGUKKyAgIHBsYW5uZXIncyBjaG9pY2VzLCBub3QgYnkgcmVwbGFjaW5nIGl0LiBUaGVyZWZvcmUs IG5vIG1hdHRlciB3aGF0IGFkdmljZQorICAgeW91IHByb3ZpZGUsIHlvdSB3aWxsIG9ubHkgZXZl ciBnZXQgYSBwbGFuIHRoYXQgdGhlIGNvcmUgcGxhbm5lciB3b3VsZCBoYXZlCisgICBjb25zaWRl cmVkIGZvciB0aGUgcXVlcnkgaW4gcXVlc3Rpb24uIElmIHlvdSBhdHRlbXB0IHRvIGZvcmNlIHdo YXQgeW91CisgICBiZWxpZXZlIHRvIGJlIHRoZSBjb3JyZWN0IHBsYW4gYnkgc3VwcGx5aW5nIGFu IGFkdmljZSBzdHJpbmcsIGFuZCB0aGUKKyAgIHBsYW5uZXIgc3RpbGwgZmFpbHMgdG8gcHJvZHVj ZSB0aGUgZGVzaXJlZCBwbGFuLCB0aGlzIG1lYW5zIHRoYXQgZWl0aGVyCisgICB0aGVyZSBpcyBh IGJ1ZyBpbiB5b3VyIGFkdmljZSBzdHJpbmcsIG9yIHRoZSBwbGFuIGluIHF1ZXN0aW9uIHdhcyBu b3QKKyAgIGNvbnNpZGVyZWQgdmlhYmxlIGJ5IHRoZSBjb3JlIHBsYW5uZXIuIFRoaXMgY29tbW9u bHkgaGFwcGVucyBmb3Igb25lIG9mIHR3bworICAgcmVhc29ucy4gRmlyc3QsIGl0IG1pZ2h0IGJl IHRoZSBwbGFubmVyIGJlbGlldmVzIHRoYXQgdGhlIHBsYW4geW91J3JlIHRyeWluZworICAgdG8g Zm9yY2Ugd291bGQgYmUgc2VtYW50aWNhbGx5IGluY29ycmVjdCAtLSB0aGF0IGlzLCBpdCB3b3Vs ZCBwcm9kdWNlIHRoZQorICAgd3JvbmcgcmVzdWx0cyAtLSBhbmQgZm9yIHRoYXQgcmVhc29uIGl0 IHdhc24ndCBjb25zaWRlcmVkLiBTZWNvbmQsIGl0IG1pZ2h0CisgICBiZSB0aGF0IHRoZSBwbGFu bmVyIHJlamVjdGVkIHRoZSBwbGFuIHlvdSB3ZXJlIGhvcGluZyB0byBnZW5lcmF0ZSBvbiBzb21l CisgICBncm91bmRzIG90aGVyIHRoYW4gY29zdC4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgdmVyeSBz aW1wbGUgcXVlcnkgc3VjaCBhcworICAgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBzb21lX3RhYmxl PC9saXRlcmFsPiwgdGhlIHF1ZXJ5IHBsYW5uZXIgd2lsbAorICAgZGVjaWRlIHRoYXQgdGhlIHVz ZSBvZiBhbiBpbmRleCBpcyB3b3J0aGxlc3MgaGVyZSBiZWZvcmUgaXQgcGVyZm9ybXMgYW55Cisg ICBjb3N0aW5nIGNhbGN1bGF0aW9ucy4gWW91IGNhbm5vdCBmb3JjZSBpdCB0byB1c2UgYW4gaW5k ZXggZm9yIHRoaXMgcXVlcnkKKyAgIGV2ZW4gaWYgeW91IHNldCA8bGl0ZXJhbD5lbmFibGVfc2Vx c2NhbiA9IGZhbHNlPC9saXRlcmFsPiwgYW5kIHlvdSBjYW4ndAorICAgZm9yY2UgaXQgdG8gdXNl IGFuIGluZGV4IHVzaW5nIHBsYW4gYWR2aWNlLCBlaXRoZXIuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFNwZWNpZnlpbmcgcGxhbiBhZHZpY2Ugc2hvdWxkIG5ldmVyIGNhdXNlIHBsYW5uZXIg ZmFpbHVyZS4gSG93ZXZlciwgaWYgeW91CisgICBzcGVjaWZ5IHBsYW4gYWR2aWNlIHRoYXQgYXNr cyBmb3Igc29tZXRoaW5nIGltcG9zc2libGUsIHlvdSBtYXkgZ2V0IGEgcGxhbgorICAgd2hlcmUg c29tZSBwbGFuIG5vZGVzIGFyZSBmbGFnZ2VkIGFzIDxsaXRlcmFsPkRpc2FibGVkOiB0cnVlPC9s aXRlcmFsPiBpbgorICAgdGhlIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IG91dHB1dC4gSW4g c29tZSBjYXNlcywgc3VjaCBwbGFucyB3aWxsIGJlCisgICBiYXNpY2FsbHkgdGhlIHNhbWUgcGxh biB5b3Ugd291bGQgaGF2ZSBnb3R0ZW4gd2l0aCBubyBzdXBwbGllZCBhZHZpY2UgYXQKKyAgIGFs bCwgYnV0IGluIG90aGVyIGNhc2VzLCB0aGV5IG1heSBiZSBtdWNoIHdvcnNlLiBGb3IgZXhhbXBs ZToKKyAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0pPSU5fT1JERVIoeCBmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRikKKyAgICAgICAg U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTgorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNh YmxlZDogdHJ1ZQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENv bmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF Uih4IGYgZCkgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAg PHBhcmE+CisgICBCZWNhdXNlIG5laXRoZXIgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gbm9yIDxsaXRl cmFsPmQ8L2xpdGVyYWw+IGlzIHRoZQorICAgZmlyc3QgdGFibGUgaW4gdGhlIDxsaXRlcmFsPkpP SU5fT1JERVIoKTwvbGl0ZXJhbD4gc3BlY2lmaWNhdGlvbiwgdGhlCisgICBwbGFubmVyIGRpc2Fi bGVzIGFsbCBkaXJlY3Qgam9pbnMgYmV0d2VlbiB0aGUgdHdvIG9mIHRoZW0sIHRoaW5raW5nIHRo YXQKKyAgIHRoZSBqb2luIHRvIDxsaXRlcmFsPng8L2xpdGVyYWw+IHNob3VsZCBoYXBwZW4gZmly c3QuIFNpbmNlIHBsYW5uaW5nIGlzbid0CisgICBhbGxvd2VkIHRvIGZhaWwsIGEgZGlzYWJsZWQg cGxhbiBiZXR3ZWVuIHRoZSB0d28gdGFibGVzIGlzIGV2ZW50dWFsbHkKKyAgIHNlbGVjdGVkIGFu eXdheSwgYnV0IGhlcmUgaXQncyBhIDxsaXRlcmFsPk5lc3RlZCBMb29wPC9saXRlcmFsPiByYXRo ZXIgdGhhbgorICAgdGhlIDxsaXRlcmFsPkhhc2ggSm9pbjwvbGl0ZXJhbD4gdGhhdCB3YXMgY2hv c2VuIGluIHRoZSBhYm92ZSBleGFtcGxlIHdoZXJlCisgICBubyBhZHZpY2Ugd2FzIHNwZWNpZmll ZC4gVGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IHdheXMgdGhhdCB0aGlzIGtpbmQKKyAgIG9m IHRoaW5nIGNhbiBoYXBwZW47IHdoZW4gaXQgZG9lcywgdGhlIHJlc3VsdGluZyBwbGFuIGlzIGdl bmVyYWxseSB3b3JzZQorICAgdGhhbiBpZiBubyBhZHZpY2UgaGFkIGJlZW4gc3BlY2lmaWVkIGF0 IGFsbC4gVGhlcmVmb3JlLCBpdCBpcyBhIGdvb2QgaWRlYQorICAgdG8gdmFsaWRhdGUgdGhhdCB0 aGUgYWR2aWNlIHlvdSBzcGVjaWZ5IGFwcGxpZXMgdG8gdGhlIHF1ZXJ5IHRvIHdoaWNoIGl0Cisg ICBpcyBhcHBsaWVkIGFuZCB0aGF0IHRoZSByZXN1bHRzIGFyZSBhcyBleHBlY3RlZC4KKyAgPC9w YXJhPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLXRhcmdldHMiPgor ICA8dGl0bGU+QWR2aWNlIFRhcmdldHM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQW4gPGZpcnN0 dGVybT5hZHZpY2UgdGFyZ2V0PC9maXJzdHRlcm0+IHVuaXF1ZWx5IGlkZW50aWZpZXMgYSBwYXJ0 aWN1bGFyCisgICBpbnN0YW5jZSBvZiBhIHBhcnRpY3VsYXIgdGFibGUgaW52b2x2ZWQgaW4gYSBw YXJ0aWN1bGFyIHF1ZXJ5LiBJbiBzaW1wbGUKKyAgIGNhc2VzLCBzdWNoIGFzIHRoZSBleGFtcGxl cyBzaG93biBhYm92ZSwgdGhlIGFkdmljZSB0YXJnZXQgaXMgc2ltcGx5IHRoZQorICAgcmVsYXRp b24gYWxpYXMuIEhvd2V2ZXIsIGEgbW9yZSBjb21wbGV4IHN5bnRheCBpcyByZXF1aXJlZCB3aGVu IHN1YnF1ZXJpZXMKKyAgIGFyZSB1c2VkLCB3aGVuIHRhYmxlcyBhcmUgcGFydGl0aW9uZWQsIG9y IHdoZW4gdGhlIHNhbWUgcmVsYXRpb24gYWxpYXMgaXMKKyAgIG1lbnRpb25lZCBtb3JlIHRoYW4g b25jZSBpbiB0aGUgc2FtZSBzdWJxdWVyeSAoZS5nLiA8bGl0ZXJhbD4oZm9vIEpPSU4gYmFyCisg ICBPTiBmb28uYSA9IGJhci5hKSB4IEpPSU4gZm9vIE9OIHguYiA9IGZvby5iPC9saXRlcmFsPi4g QW55IGNvbWJpbmF0aW9uIG9mCisgICB0aGVzZSB0aHJlZSB0aGluZ3MgY2FuIG9jY3VyIHNpbXVs dGFuZW91c2x5OiBhIHJlbGF0aW9uIGNvdWxkIGJlIG1lbnRpb25lZAorICAgbW9yZSB0aGFuIG9u Y2UsIGJlIHBhcnRpdGlvbmVkLCBhbmQgYmUgdXNlZCBpbnNpZGUgb2YgYSBzdWJxdWVyeS4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgZ2VuZXJhbCBzeW50 YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmllciBpczoKKyAgPC9wYXJhPgorCis8cHJvZ3JhbWxp c3Rpbmc+CithbGlhc19uYW1lI29jY3VycmVuY2VfbnVtYmVyL3BhcnRpdGlvbl9zY2hlbWEucGFy dGl0aW9uX25hbWVAcGxhbl9uYW1lCis8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAg QWxsIGNvbXBvbmVudHMgZXhjZXB0IGZvciB0aGUgPGxpdGVyYWw+YWxpYXNfbmFtZTwvbGl0ZXJh bD4gYXJlIG9wdGlvbmFsCisgICBhbmQgaW5jbHVkZWQgb25seSB3aGVuIHJlcXVpcmVkLiBXaGVu IGEgY29tcG9uZW50IGlzIG9taXR0ZWQsIHRoZSBhc3NvY2lhdGVkCisgICBwdW5jdHVhdGlvbiBt dXN0IGFsc28gYmUgb21pdHRlZC4gRm9yIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgdGFibGUK KyAgIHdpdGhpbiBhIGdpdmVuIHN1YnF1ZXJ5LCBnZW5lcmF0ZWQgYWR2aWNlIHdpbGwgb21pdCB0 aGUgb2NjdXJyZW5jZSBudW1iZXIsCisgICBidXQgaXQgaXMgbGVnYWwgdG8gd3JpdGUgPGxpdGVy YWw+IzE8L2xpdGVyYWw+LCBpZiBkZXNpcmVkLiBUaGUgcGFydGl0aW9uCisgICBzY2hlbWEgYW5k IHBhcnRpdGlvbiBuYW1lIGFyZSBpbmNsdWRlZCBvbmx5IGZvciBjaGlsZHJlbiBvZiBwYXJ0aXRp b25lZAorICAgdGFibGVzLiBJbiBnZW5lcmF0ZWQgYWR2aWNlLCB3ZSBhbHdheXMgaW5jdWRlIGJv dGgsIGJ1dCBpdCBpcyBsZWdhbCB0bworICAgb21pdCB0aGUgc2NoZW1hLiBUaGUgcGxhbiBuYW1l IGlzIG9taXR0ZWQgZm9yIHRoZSB0b3BsZXZlbCBwbGFuLCBhbmQgbXVzdAorICAgYmUgaW5jbHVk ZWQgZm9yIGFueSBzdWJwbGFuLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJdCBpcyBub3Qg YWx3YXlzIGVhc3kgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGFkdmljZSB0YXJnZXQgYnkgZXhh bWluaW5nCisgICB0aGUgcXVlcnk7IGZvciBpbnN0YW5jZSwgaWYgdGhlIHBsYW5uZXIgcHVsbHMg dXAgYSBzdWJxdWVyeSBpbnRvIHRoZSBwYXJlbnQKKyAgIHF1ZXJ5IGxldmVsLCBldmVyeXRoaW5n IGluc2lkZSBvZiBpdCBiZWNvbWVzIHBhcnQgb2YgdGhlIHBhcmVudCBxdWVyeSBsZXZlbCwKKyAg IGFuZCB1c2VzIHRoZSBwYXJlbnQgcXVlcnkncyBzdWJwbGFuIG5hbWUgKG9yIG5vIHN1YnBsYW4g bmFtZSwgaWYgcHVsbGVkIHVwCisgICB0byB0aGUgdG9wbGV2ZWwpLiBGdXJ0aGVybW9yZSwgdGhl IGNvcnJlY3Qgc3VicXVlcnkgbmFtZSBpcyBzb21ldGltZXMgbm90CisgICBvYnZpb3VzLiBGb3Ig ZXhhbXBsZSwgd2hlbiB0d28gcXVlcmllcyBhcmUgam9pbmVkIHVzaW5nIGFuIG9wZXJhdGlvbiBz dWNoIGFzCisgICA8bGl0ZXJhbD5VTklPTjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+SU5URVJTRUNU PC9saXRlcmFsPiwgbm8gbmFtZSBmb3IgdGhlCisgICBzdWJxdWVyaWVzIGlzIHByZXNlbnQgaW4g dGhlIFNRTCBzeW50YXg7IGluc3RlYWQsIGEgc3lzdGVtLWdlbmVyYXRlZCBuYW1lIGlzCisgICBh c3NpZ25lZCB0byBlYWNoIGJyYW5jaC4gVGhlIGVhc2llc3Qgd2F5IHRvIGRpc2NvdmVyIHRoZSBw cm9wZXIgYWR2aWNlCisgICB0YXJnZXRzIGlzIHRvIHVzZSA8bGl0ZXJhbD5FWFBMQUlOIChQTEFO X0FEVklDRSk8L2xpdGVyYWw+IGFuZCBleGFtaW5lIHRoZQorICAgZ2VuZXJhdGVkIGFkdmljZS4K KyAgPC9wYXJhPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLXRhZ3Mi PgorICA8dGl0bGU+QWR2aWNlIFRhZ3M8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQW4gPGZpcnN0 dGVybT5hZHZpY2UgdGFnPC9maXJzdHRlcm0+IHNwZWNpZmllcyBhIHBhcnRpY3VsYXIgYmVoYXZp b3IgdGhhdAorICAgc2hvdWxkIGJlIGVuZm9yY2VkIGZvciBzb21lIHBvcnRpb24gb2YgdGhlIHF1 ZXJ5LCBzdWNoIGFzIGEgcGFydGljdWxhcgorICAgam9pbiBvcmRlciBvciBqb2luIG1ldGhvZC4g QWxsIGFkdmljZSB0YWdzIHRha2UKKyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS10YXJn ZXRzIj5hZHZpY2UgdGFyZ2V0czwvbGluaz4gYXMgYXJndW1lbnRzLAorICAgYW5kIG1hbnkgYWxs b3cgbGlzdHMgb2YgYWR2aWNlIHRhcmdldHMsIHdoaWNoIGluIHNvbWUgY2FzZXMgY2FuIGJlIG5l c3RlZAorICAgbXVsdGlwbGUgbGV2ZWxzIGRlZXAuIFNldmVyYWwgZGlmZmVyZW50IGNsYXNzZXMg b2YgYWR2aWNlIHRhcmdldHMgZXhpc3QsCisgICBlYWNoIGNvbnRyb2xsaW5nIGEgZGlmZmVyZW50 IGFzcGVjdCBvZiBxdWVyeSBwbGFubmluZy4KKyAgPC9wYXJhPgorCisgIDxzZWN0MyBpZD0icGdw bGFuYWR2aWNlLXNjYW4tbWV0aG9kIj4KKyAgPHRpdGxlPlNjYW4gTWV0aG9kIEFkdmljZTwvdGl0 bGU+CisgICA8c3lub3BzaXM+CitTRVFfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNl YWJsZT4gWyAuLi4gXSkKK1RJRF9TQ0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxl PiBbIC4uLiBdKQorSU5ERVhfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPmluZGV4X25hbWU8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorSU5ERVhfT05M WV9TQ0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+aW5k ZXhfbmFtZTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitGT1JFSUdOX1NDQU4oKDxyZXBsYWNlYWJs ZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKSBbIC4uLiBdKQorQklUTUFQX0hFQVBfU0NB Tig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSk8L3N5bm9wc2lzPgor CisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5TRVFfU0NBTjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRo YXQgZWFjaCB0YXJnZXQgdGFibGUgc2hvdWxkIGJlCisgICAgc2Nhbm5lZCB1c2luZyBhIDxsaXRl cmFsPlNlcSBTY2FuPC9saXRlcmFsPi4gPGxpdGVyYWw+VElEX1NDQU48L2xpdGVyYWw+CisgICAg c3BlY2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQgdGFibGUgc2hvdWxkIGJlIHNjYW5uZWQgdXNpbmcg YQorICAgIDxsaXRlcmFsPlRJRCBTY2FuPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5USUQgUmFuZ2Ug U2NhbjwvbGl0ZXJhbD4uCisgICAgPGxpdGVyYWw+QklUTUFQX0hFQVBfU0NBTjwvbGl0ZXJhbD4g c3BlY2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQgdGFibGUKKyAgICBzaG91bGQgYmUgc2Nhbm5lZCB1 c2luZyBhIDxsaXRlcmFsPkJpdG1hcCBIZWFwIFNjYW48L2xpdGVyYWw+LgorICAgPC9wYXJhPgor CisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5JTkRFWF9TQ0FOPC9saXRlcmFsPiBzcGVjaWZpZXMg dGhhdCBlYWNoIHRhcmdldCB0YWJsZSBzaG91bGQKKyAgICBiZSBzY2FubmVkIHVzaW5nIGFuIDxs aXRlcmFsPkluZGV4IFNjYW48L2xpdGVyYWw+IG9uIHRoZSBnaXZlbiBpbmRleAorICAgIG5hbWUu IDxsaXRlcmFsPklOREVYX09OTFlfU0NBTjwvbGl0ZXJhbD4gaXMgc2ltaWxhciwgYnV0IHNwZWNp ZmllcyB0aGUKKyAgICB1c2Ugb2YgYW4gPGxpdGVyYWw+SW5kZXggT25seSBTY2FuPC9saXRlcmFs Pi4gSW4gZWl0aGVyIGNhc2UsIHRoZSBpbmRleAorICAgIG5hbWUgY2FuIGJlLCBidXQgZG9lcyBu b3QgaGF2ZSB0byBiZSwgc2NoZW1hLXF1YWxpZmllZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+ CisgICAgPGxpdGVyYWw+Rk9SRUlHTl9TQ0FOPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBhIGZv cmVpZ24gam9pbiBiZXR3ZWVuCisgICAgYSBzZXZlcmFsIGZvcmVpZ24gdGFibGVzIHNob3VsZCBi ZSBwdXNoZWQgZG93biB0byBhIHJlbW90ZSBzZXJ2ZXIgc28KKyAgICB0aGF0IGl0IGNhbiBiZSBp bXBsZW5lbnRlZCBhcyBhIHNpbmdsZSA8bGl0ZXJhbD5Gb3JlaWduIFNjYW48L2xpdGVyYWw+Lgor ICAgIFNwZWNpZnlpbmcgPGxpdGVyYWw+Rk9SRUlHTl9TQ0FOPC9saXRlcmFsPiBmb3IgYSBzaW5n bGUgZm9yZWlnbiB0YWJsZSBpcworICAgIG5laXRoZXIgbmVjZXNzYXJ5IG5vciBwZXJtaXNzaWJs ZTogYSA8bGl0ZXJhbD5Gb3JlaWduIFNjYW48L2xpdGVyYWw+IHdpbGwKKyAgICBuZWVkIHRvIGJl IHVzZWQgcmVnYXJkbGVzcy4gSWYgeW91IHdhbnQgdG8gcHJldmVudCBhIGpvaW4gZnJvbSBiZWlu ZworICAgIHB1c2hlZCBkb3duLCBjb25zaWRlciB1c2luZyB0aGUgPGxpdGVyYWw+Sk9JTl9PUkRF UjwvbGl0ZXJhbD4gdGFnIGZvcgorICAgIHRoYXQgcHVycG9zZS4KKyAgIDwvcGFyYT4KKworICAg PHBhcmE+CisgICAgVGhlIHBsYW5uZXIgc3VwcG9ydHMgbWFueSB0eXBlcyBvZiBzY2FucyBvdGhl ciB0aGFuIHRob3NlIGxpc3RlZCBoZXJlOworICAgIGhvd2V2ZXIsIGluIG1vc3Qgb2YgdGhvc2Ug Y2FzZXMsIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgZGVjaXNpb24gdG8gYmUKKyAgICBtYWRlLCBh bmQgaGVuY2Ugbm8gbmVlZCBmb3IgYWR2aWNlLiBGb3IgZXhhbXBsZSwgdGhlIG91dHB1dCBvZiBh CisgICAgc2V0LXJldHVybmluZyBmdW5jdGlvbiB0aGF0IGFwcGVhcnMgaW4gdGhlIDxsaXRlcmFs PkZST008L2xpdGVyYWw+IGNsYXVzZQorICAgIGNhbiBvbmx5IGV2ZXIgYmUgc2Nhbm5lZCB1c2lu ZyBhIDxsaXRlcmFsPkZ1bmN0aW9uIFNjYW48L2xpdGVyYWw+LCBzbworICAgIHRoZXJlIGlzIG5v IG9wcG9ydHVuaXR5IGZvciBhZHZpY2UgdG8gY2hhbmdlIGFueXRoaW5nLgorICAgPC9wYXJhPgor CisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJwZ3BsYW5hZHZpY2Utam9pbi1vcmRlciI+Cisg IDx0aXRsZT5Kb2luIE9yZGVyIEFkdmljZTwvdGl0bGU+CisgICA8c3lub3BzaXM+CitKT0lOX09S REVSKDxyZXBsYWNlYWJsZT5qb2luX29yZGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQor Cis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZT5qb2luX29yZGVyX2l0ZW08L3JlcGxhY2VhYmxl PiBpczo8L3BocmFzZT4KKworPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxl PiB8CisoIDxyZXBsYWNlYWJsZT5qb2luX29yZGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBd ICkgfAoreyA8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4g XSB9PC9zeW5vcHNpcz4KKworICAgPHBhcmE+CisgICAgV2hlbiA8bGl0ZXJhbD5KT0lOX09SREVS PC9saXRlcmFsPiBpcyB1c2VkIHdpdGhvdXQgYW55IHN1Ymxpc3RzLCBpdAorICAgIHNwZWNpZmll cyBhbiBvdXRlci1kZWVwIGpvaW4gd2l0aCB0aGUgZmlyc3QgYWR2aWNlIHRhcmdldCBhcyB0aGUg ZHJpdmluZworICAgIHRhYmxlLCBqb2luZWQgdG8gZWFjaCBzdWJzZXF1ZW50IGFkdmljZSB0YXJn ZXQgaW4gdHVybiBpbiB0aGUgb3JkZXIKKyAgICBzcGVjaWZpZWQuIEZvciBpbnN0YW5jZSwgPGxp dGVyYWw+Sk9JTl9PUkRFUihhIGIgYyk8L2xpdGVyYWw+IG1lYW5zIHRoYXQKKyAgICA8bGl0ZXJh bD5hPC9saXRlcmFsPiBzaG91bGQgYmUgdGhlIGRyaXZpbmcgdGFibGUsIGFuZCB0aGF0IGl0IHNo b3VsZCBiZQorICAgIGpvaW5lZCBmaXJzdCB0byA8bGl0ZXJhbD5iPC9saXRlcmFsPiBhbmQgdGhl biB0byA8bGl0ZXJhbD5jPC9saXRlcmFsPi4KKyAgICBJZiB0aGVyZSBhcmUgbW9yZSB0YWJsZXMg aW4gdGhlIHF1ZXJ5IHRoYW4gPGxpdGVyYWw+YTwvbGl0ZXJhbD4sCisgICAgPGxpdGVyYWw+Yjwv bGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5jPC9saXRlcmFsPiwgdGhlIHJlc3QgY2FuIGJlIGpvaW5l ZAorICAgIGFmdGVyd2FyZHMgaW4gYW55IG1hbm5lci4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+ CisgICAgSWYgYSA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBsaXN0IGNvbnRhaW5zIGEg cGFyZW50aGVzaXplZCBzdWJsaXN0LAorICAgIGl0IHNwZWNpZmllcyBhIG5vbi1vdXRlci1kZWVw IGpvaW4uIFRoZSB0YWJsZXMgaW4gdGhlIHN1Ymxpc3QgbXVzdCBmaXJzdAorICAgIGJlIGpvaW5l ZCB0byBlYWNoIG90aGVyIG11Y2ggYXMgaWYgdGhlIHN1Ymxpc3Qgd2VyZSBhIHRvcGxldmVsCisg ICAgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gbGlzdCwgYW5kIHRoZSByZXN1bHRpbmcg am9pbiBwcm9kdWN0IG11c3QKKyAgICB0aGVuIGFwcGVhciBvbiB0aGUgaW5uZXIgc2lkZSBvZiBh IGpvaW4gYXQgdGhlIGFwcHJvcHJpYXRlIHBvaW50IGluIHRoZQorICAgIGpvaW4gb3JkZXIuIEZv ciBleGFtcGxlLCA8bGl0ZXJhbD5KT0lOX09SREVSKGEgKGIgYykgZCk8L2xpdGVyYWw+IHJlcXVp cmVzCisgICAgYSBwbGFuIG9mIHRoaXMgZm9ybToKKyAgIDwvcGFyYT4KKworPHByb2dyYW1saXN0 aW5nPgorSm9pbgorICAtPiAgSm9pbgorICAgICAgICAtPiBTY2FuIG9uIGEKKyAgICAgICAgLT4g Sm9pbgorICAgICAgICAgICAgIC0+IFNjYW4gb24gYgorICAgICAgICAgICAgIC0+IFNjYW4gb24g YworICAtPiAgU2NhbiBvbiBkCis8L3Byb2dyYW1saXN0aW5nPgorCisgICA8cGFyYT4KKyAgICBJ ZiBhIDxsaXRlcmFsPkpPSU5fT1JERVI8L2xpdGVyYWw+IGxpc3QgY29udGFpbnMgYSBzdWJsaXN0 IHN1cnJvbmRlZCBieQorICAgIGN1cmx5IGJyYWNlcywgdGhpcyBhbHNvIHNwZWNpZmllcyBhIG5v bi1vdXRlci1kZWVwIGpvaW4uIEhvd2V2ZXIsIHRoZSBqb2luCisgICAgb3JkZXIgd2l0aGluIHRo ZSBzdWJsaXN0IGlzIG5vdCBjb25zdHJhaW5lZC4gRm9yIGV4YW1wbGUsIHNwZWNpZml5aW5nCisg ICAgPGxpdGVyYWw+Sk9JTl9PUkRFUihhIHtiIGN9IGQ8L2xpdGVyYWw+IHdvdWxkIGFsbG93IHRo ZSBzY2FucyBvZgorICAgIDxsaXRlcmFsPmI8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5jPC9saXRl cmFsPiB0byBiZSBzd2FwcGVkIGluIHRoZQorICAgIHByZXZpb3VzIGV4YW1wbGUsIHdoaWNoIGlz IG5vdCBhbGxvd2VkIHdoZW4gcGFyZW50aGVzZSBhcmUgdXNlZC4KKyAgIDwvcGFyYT4KKworICAg PHBhcmE+CisgICAgUGFyZW50aGVzaXplZCBzdWJsaXN0cyBjYW4gYmUgYXJiaXRyYXJpbHkgbmVz dGVkLCBidXQgc3VibGlzdHMgc3Vycm91bmRlZAorICAgIGJ5IGN1cmx5IGJyYWNlcyBjYW5ub3Qg dGhlbXNlbHZlcyBjb250YWluIHN1Ymxpc3RzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAg ICBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgPGxpdGVyYWw+Sk9JTl9PUkRFUigpPC9saXRlcmFsPiBj YW4gc29tZXRpbWVzIGJlCisgICAgbmVlZGVkIGluIG9yZGVyIHRvIGZ1bGx5IGNvbnN0cmFpbnQg dGhlIGpvaW4gb3JkZXIuIFRoaXMgb2NjdXJzIHdoZW4gdGhlcmUKKyAgICBhcmUgbXVsdGlwbGUg am9pbiBwcm9ibGVtcyB0aGF0IGFyZSBvcHRpbWl6ZWQgc2VwYXJhdGVseSBieSB0aGUgcGxhbm5l ci4KKyAgICBUaGlzIGNhbiBoYXBwZW4gZHVlIHRvIHRoZSBwcmVzZW5jZSBvZiBzdWJxdWVyaWVz LCBvciBiZWNhdXNlIHRoZXJlIGlzIGEKKyAgICBwYXJ0aXRpb253aXNlIGpvaW4uIEluIHRoZSBs YXR0ZXIgY2FzZSwgZWFjaCBicmFuY2ggb2YgdGhlIHBhcnRpdGlvbndpc2UKKyAgICBqb2luIGNh biBoYXZlIGl0cyBvd24gam9pbiBvcmRlciwgaW5kZXBlbmRlbnQgb2YgZXZlcnkgb3RoZXIgYnJh bmNoLgorICAgPC9wYXJhPgorCisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJwZ3BsYW5hZHZp Y2Utam9pbi1tZXRob2QiPgorICA8dGl0bGU+Sm9pbiBNZXRob2QgQWR2aWNlPC90aXRsZT4KKyAg IDxzeW5vcHNpcz4KK2pvaW5fbWV0aG9kX25hbWUoPHJlcGxhY2VhYmxlPmpvaW5fbWV0aG9kX2l0 ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZT5q b2luX21ldGhvZF9uYW1lPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKK3sgTUVSR0VfSk9J Tl9NQVRFUklBTElaRSB8IE1FUkdFX0pPSU5fUExBSU4gfCBORVNURURfTE9PUF9NQVRFUklBTEla RSB8IE5FU1RFRF9MT09QX1BMQUlOIHwgSEFTSF9KT0lOIH0KKworPHBocmFzZT5hbmQgPHJlcGxh Y2VhYmxlPmpvaW5fbWV0aG9kX2l0ZW08L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworPHJl cGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBsYWNlYWJsZT5h ZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIH08L3N5bm9wc2lzPgorCisgICA8 cGFyYT4KKyAgICBKb2luIG1ldGhvZCBhZHZpY2Ugc3BlY2lmaWVzIHRoZSB0YWJsZSwgb3Igc2V0 IG9mIHRhYmxlcywgdGhhdCBzaG91bGQKKyAgICBhcHBlYXIgb24gdGhlIGlubmVyIHNpZGUgb2Yg YSBqb2luIHVzaW5nIHRoZSBuYW1lZCBqb2luIG1ldGhvZC4gRm9yCisgICAgZXhhbXBsZSwgPGxp dGVyYWw+SEFTSF9KT0lOKGEgYik8L2xpdGVyYWw+IG1lYW5zIHRoYXQgZWFjaCBvZgorICAgIDxs aXRlcmFsPmE8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5iPC9saXRlcmFsPiBzaG91bGQgYXBwZWFy IG9uIHRoZSBpbm5lcgorICAgIHNpZGUgb2YgYSBoYXNoIGpvaW47IGEgY29uZmlybWluZyBwbGFu IG11c3QgY29udGFpbiBhdCBsZWFzdCB0d28gaGFzaAorICAgIGpvaW5zLCBvbmUgb2Ygd2hpY2gg aGFzIDxsaXRlcmFsPmE8L2xpdGVyYWw+IGFuZCBub3RoaW5nIGVsc2Ugb24gdGhlCisgICAgaW5u ZXIgc2lkZSwgYW5kIHRoZSBvdGhlciBvZiB3aGljaCBoYXMgPGxpdGVyYWw+YjwvbGl0ZXJhbD4g YW5kIG5vdGhpbmcKKyAgICBlbHNlIG9uIHRoZSBpbm5lciBzaWRlLiBPbiB0aGUgb3RoZXIgaGFu ZCwKKyAgICA8bGl0ZXJhbD5IQVNIX0pPSU4oKGEgYikpPC9saXRlcmFsPiBtZWFucyB0aGF0IHRo ZSBqb2luIHByb2R1Y3Qgb2YKKyAgICA8bGl0ZXJhbD5hPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ YjwvbGl0ZXJhbD4gc2hvdWxkIGFwcGVhciB0b2dldGhlcgorICAgIG9uIHRoZSBpbm5lciBzaWRl IG9mIGEgYSBzaW5nbGUgaGFzaCBqb2luLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBO b3RlIHRoYXQgam9pbiBtZXRob2QgYWR2aWNlIGltcGxpZXMgYSBuZWdhdGl2ZSBqb2luIG9yZGVy IGNvbnN0cmFpbnQuCisgICAgU2luY2UgdGhlIG5hbWVkIHRhYmxlIG9yIHRhYmxlcyBtdXN0IGJl IG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgam9pbiB1c2luZworICAgIHRoZSBzcGVjaWZpZWQgbWV0 aG9kLCBub25lIG9mIHRoZW0gY2FuIGJlIHRoZSBkcml2aW5nIHRhYmxlIGZvciB0aGUgZW50aXJl CisgICAgam9pbiBwcm9ibGVtLiBNb3Jlb3Zlciwgbm8gdGFibGUgaW5zaWRlIHRoZSBzZXQgc2hv dWxkIGJlIGpvaW5lZCB0byBhbnkKKyAgICB0YWJsZSBvdXRzaWRlIHRoZSBzZXQgdW50aWwgYWxs IHRhYmxlcyB3aXRoaW4gdGhlIHNldCBoYXZlIGJlZW4gam9pbmVkIHRvCisgICAgZWFjaCBvdGhl ci4gRm9yIGV4YW1wbGUsIGlmIHRoZSBhZHZpY2Ugc3BlY2lmaWVzCisgICAgPGxpdGVyYWw+SEFT SF9KT0lOKChhIGIpKTwvbGl0ZXJhbD4gYW5kIHRoZSBzeXN0ZW0gYmVnaW5zIGJ5IGpvaW5pbmcg ZWl0aGVyCisgICAgb2YgdGhvc2UgdGFibGVzIHRvIHNvbWUgdGhpcmQgdGFibGUgPGxpdGVyYWw+ YzwvbGl0ZXJhbD4sIHRoZSByZXN1bHRpbmcKKyAgICBwbGFuIGNvdWxkIG5ldmVyIGJlIGNvbXBs aWFudCB3aXRoIHRoZSByZXF1ZXN0IHRvIHB1dCBleGFjdGx5IHRob3NlIHR3bworICAgIHRhYmxl cyBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGhhc2ggam9pbi4gV2hlbiB1c2luZyBib3RoIGpvaW4g b3JkZXIgYWR2aWNlCisgICAgYW5kIGpvaW4gbWV0aG9kIGFkdmljZSBmb3IgdGhlIHNhbWUgcXVl cnksIGl0IGlzIGEgZ29vZCBpZGVhIHRvIG1ha2Ugc3VyZQorICAgIHRoYXQgdGhleSBkbyBub3Qg bWFuZGF0ZSBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMuCisgICA8L3BhcmE+CisKKyAgPC9zZWN0 Mz4KKworICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1wYXJ0aXRpb253aXNlIj4KKyAgPHRpdGxl PlBhcnRpdGlvbndpc2UgQWR2aWNlPC90aXRsZT4KKyAgIDxzeW5vcHNpcz4KK1BBUlRJVElPTldJ U0UoPHJlcGxhY2VhYmxlPnBhcnRpdGlvbndpc2VfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0p CisKKzxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlPnBhcnRpdGlvbndpc2VfaXRlbTwvcmVwbGFj ZWFibGU+IGlzOjwvcGhyYXNlPgorCis8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFj ZWFibGU+IHwKKyggPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4u LiBdICkgfTwvc3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIFdoZW4gYXBwbGllZCB0byBhIHNp bmdsZSB0YXJnZXQsIDxsaXRlcmFsPlBBUlRJVElPTldJU0U8L2xpdGVyYWw+CisgICAgc3BlY2lm aWVzIHRoYXQgdGhlIHNwZWNpZmllZCB0YWJsZSBzaG91bGQgbm90IGJlIHBhcnQgb2YgYW55IHBh cnRpdGlvbndpc2UKKyAgICBqb2luLiBXaGVuIGFwcGxpZWQgdG8gYSBsaXN0IG9mIHRhcmdldHMs IDxsaXRlcmFsPlBBUlRJVElPTldJU0U8L2xpdGVyYWw+CisgICAgc3BlY2lmaWVzIHRoYXQgZXhh Y3RseSB0aGF0IHNldCBvZiB0YWJsZXMgc2hvdWxkIGJlIGpvaW5lZCBpbgorICAgIHBhcnRpdGlv bndpc2UgZmFzaGlvbi4gTm90ZSB0aGF0LCByZWdhcmRsZXNzIG9mIHdoYXQgYWR2aWNlIGlzIHNw ZWNpZmllZCwKKyAgICBubyBwYXJ0aXRpb253aXNlIGpvaW5zIHdpbGwgYmUgcG9zc2libGUgaWYK KyAgICA8bGl0ZXJhbD5lbmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gb2ZmPC9saXRlcmFsPi4K KyAgIDwvcGFyYT4KKworICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLXNl bWlqb2luLXVuaXF1ZSI+CisgIDx0aXRsZT5TZW1pam9pbiBVbmlxdWVuZXNzIEFkdmljZTwvdGl0 bGU+CisgICA8c3lub3BzaXM+CitTRU1JSk9JTl9VTklRVUUoPHJlcGxhY2VhYmxlPnNqX3VuaXF1 ZV9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK1NFTUlKT0lOX05PTl9VTklRVUUoPHJlcGxh Y2VhYmxlPnNqX3VuaXF1ZV9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKKworPHBocmFzZT53 aGVyZSA8cmVwbGFjZWFibGU+c2pfdW5pcXVlX2l0ZW08L3JlcGxhY2VhYmxlPiBpczo8L3BocmFz ZT4KKworPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBs YWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIH08L3N5bm9wc2lz PgorCisgICA8cGFyYT4KKyAgICBUaGUgcGxhbm5lciBzb21ldGltZXMgaGFzIGEgY2hvaWNlIGJl dHdlZW4gaW1wbGVtZW50aW5nIGEgc2VtaWpvaW4KKyAgICBkaXJlY3RseSBhbmQgaW1wbGVtZW1u dGluZyBhIHNlbWlqb2luIGJ5IG1ha2luZyB0aGUgbnVsbGFibGUgc2lkZSB1bmlxdWUKKyAgICBh bmQgdGhlbiBwZXJmb3JtaW5nIGFuIGlubmVyIGpvaW4uIDxsaXRlcmFsPlNFTUlKT0lOX1VOSVFV RTwvbGl0ZXJhbD4KKyAgICBzcGVjaWZpZXMgdGhlIGxhdHRlciBzdHJhdGVneSwgd2hpbGUgPGxp dGVyYWw+U0VNSUpPSU5fTk9OX1VOSVFVRTwvbGl0ZXJhbD4KKyAgICBzcGVjaWZpZXMgdGhlIGZv cm1lciBzdHJhdGVneS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBhcmd1bWVudCBpcyB0aGUgc2luZ2xl CisgICAgdGFibGUgb3IgbGlzdCBvZiB0YWJsZXMgdGhhdCBhcHBlYXIgYmVuZWF0aCB0aGUgbnVs bGFibGUgc2lkZSBvZiB0aGUgam9pbi4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QzPgorCisgIDxz ZWN0MyBpZD0icGdwbGFuYWR2aWNlLXBhcmFsbGVsLXF1ZXJ5aiI+CisgIDx0aXRsZT5QYXJhbGxl bCBRdWVyeSBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorR0FUSEVSKDxyZXBsYWNlYWJs ZT5nYXRoZXJfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitHQVRIRVJfTUVSR0UoPHJlcGxh Y2VhYmxlPmdhdGhlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK05PX0dBVEhFUig8cmVw bGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisKKzxwaHJhc2U+ d2hlcmUgPHJlcGxhY2VhYmxlPmdhdGhlcl9pdGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+ CisKKzxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gfAorKCA8cmVwbGFj ZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gKSB9PC9zeW5vcHNpcz4K KworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+R0FUSEVSPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5H QVRIRVJfTUVSR0U8L2xpdGVyYWw+IHNwZWNpZmllcworICAgIHRoYXQgPGxpdGVyYWw+R2F0aGVy PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5HYXRoZXIgTWVyZ2U8L2xpdGVyYWw+LAorICAgIHJlc3Bl Y3RpdmVseSwgc2hvdWxkIGJlIHBsYWNlZCBvbiB0b3Agb2YgdGhlIHNpbmdsZSB0YWJsZSBzcGVj aWZpZWQgYXMKKyAgICBhIHRhcmdldCwgb3Igb24gdG9wIG9mIHRoZSBqb2luIGJldHdlZW4gdGhl IGxpc3Qgb2YgdGFibGVzIHNwZWNpZmllZCBhcworICAgIGEgdGFyZ2V0LiBUaGlzIG1lYW5zIHRo YXQgPGxpdGVyYWw+R0FUSEVSKGEgYiBjKTwvbGl0ZXJhbD4gaXMgYSByZXF1ZXN0CisgICAgZm9y IHRocmVlIGRpZmZlcmVudCA8bGl0ZXJhbD5HYXRoZXI8L2xpdGVyYWw+IG5vZGVzLCB3aGlsZQor ICAgIDxsaXRlcmFsPkdBVEhFUigoYSBiIGMpKTwvbGl0ZXJhbD4gaXMgYSByZXF1ZXN0IGZvciBh IHNpbmdsZQorICAgIDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4gbm9kZSBvbiB0b3Agb2YgYSAz LXdheSBqb2luLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5OT19HQVRI RVI8L2xpdGVyYWw+IHNwZWNpZmllcyB0aGF0IG5vbmUgb2YgdGhlIHRhYmxlcyBnaXZlbgorICAg IGFzIGFyZ3VtZW50cyBzaG91bGQgYXBwZWFyIGJlbmVhdGggYSA8bGl0ZXJhbD5HYXRoZXI8L2xp dGVyYWw+IG9yCisgICAgPGxpdGVyYWw+R2F0aGVyIE1lcmdlPC9saXRlcmFsPiBub2RlLgorICAg PC9wYXJhPgorCisgIDwvc2VjdDM+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5h ZHZpY2UtZmVlZGJhY2siPgorICA8dGl0bGU+QWR2aWNlIEZlZWRiYWNrPC90aXRsZT4KKworICA8 cGFyYT4KKyAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHByb3ZpZGVzIGZlZWRiYWNrIG9u IHdoZXRoZXIgc3VwcGxpZWQgYWR2aWNlIHdhcworICAgc3VjY2Vzc2Z1bGx5IGFwcGxpZWQgdG8g dGhlIHF1ZXJ5IGluIHRoZSBmb3JtIG9mIGEgY29tbWVudCBvbiBlYWNoIHBpZWNlCisgICBvZiBz dXBwbGllZCBhZHZpY2UuIEZvciBleGFtcGxlOgorICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGlu Zz4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnaGFzaF9qb2luKGYgZykgam9pbl9vcmRl cihmIGcpIGluZGV4X3NjYW4oZiBub19zdWNoX2luZGV4KSc7CitTRVQKK3JoYWFzPSMgRVhQTEFJ TiAoQ09TVFMgT0ZGKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKyAgICAgICAgTEVGVCBKT0lOIGpvX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKyAgICAgICAgTEVGVCBKT0lOIGpvX2RpbTIgZDIg T04gZi5kaW0yX2lkID0gZDIuaWQKKyAgICAgICAgV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAx OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4KKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKChkMS5pZCA9IGYuZGltMV9pZCkgQU5EIChkMi5pZCA9 IGYuZGltMl9pZCkpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEg ZDEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX1NDQU4oZiBub19zdWNoX2luZGV4KSAvKiBtYXRjaGVkLCBpbmFwcGxpY2Fi bGUsIGZhaWxlZCAqLworICAgSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQgKi8KKyAgIEhBU0hfSk9J TihnKSAvKiBub3QgbWF0Y2hlZCAqLworICAgSk9JTl9PUkRFUihmIGcpIC8qIHBhcnRpYWxseSBt YXRjaGVkICovCis8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgRm9yIHRoaXMgcXVl cnksIDxsaXRlcmFsPmY8L2xpdGVyYWw+IGlzIGEgdmFsaWQgYWR2aWNlIHRhcmdldCwgYnV0Cisg ICA8bGl0ZXJhbD5nPC9saXRlcmFsPiBpcyBub3QuIFRoZXJlZm9yZSwgdGhlIHJlcXVlc3QgdG8g cGxhY2UKKyAgIDxsaXRlcmFsPmY8L2xpdGVyYWw+IG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFz aCBqb2luIGlzIGxpc3RlZCBhcworICAgPGxpdGVyYWw+bWF0Y2hlZDwvbGl0ZXJhbD4sIGJ1dCB0 aGUgcmVxdWVzdCB0byBwbGFjZSA8bGl0ZXJhbD5nPC9saXRlcmFsPgorICAgb24gdGhlIGlubmVy IHNpZGUgb2YgYSBoYXNoIGpvaW4gaXMgbGlzdGVkIGFzCisgICA8bGl0ZXJhbD5ub3QgbWF0Y2hl ZDwvbGl0ZXJhbD4uIFRoZSA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBhZHZpY2UKKyAg IHRhZyBpbnZvbHZlcyBvbmUgdmFsaWQgdGFyZ2V0IGFuZCBvbmUgaW52YWxkIHRhcmdldCwgYW5k IHNvIGlzIGxpc3RlZCBhcworICAgPGxpdGVyYWw+cGFydGlhbGx5IG1hdGNoZWQ8L2xpdGVyYWw+ LiBOb3RlIHRoYXQKKyAgIDxsaXRlcmFsPkhBU0hfSk9JTihmIGcpPC9saXRlcmFsPiBpcyBhY3R1 YWxseSBhIHJlcXVlc3QgZm9yIHR3byBsb2dpY2FsbHkKKyAgIHNlcGFyYXRlIGJlaGF2aW9ycywg d2hlcmVhcyA8bGl0ZXJhbD5KT0lOX09SREVSKGYgZyk8L2xpdGVyYWw+IGlzIGEgc2luZ2xlCisg ICByZXF1ZXN0LiBXaGVuIHByb3ZpZGluZyBhZHZpY2UgZmVlZGJhY2ssIDxsaXRlcmFsPkVYUExB SU48L2xpdGVyYWw+IHNob3dzCisgICBlYWNoIGxvZ2ljYWwgcmVxdWVzdCBzZXBhcnRlbHksIHRv Z2V0aGVyIHdpdGggYWxsIHRoZSBmZWVkYmFjayBhcHBsaWNhYmxlCisgICB0byB0aGF0IHJlcXVl c3QgdHlwZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQWR2aWNlIGZlZWRiYWNrIGNhbiBp bmNsdWRlIGFueSBvZiB0aGUgZm9sbGxvd2luZzoKKyAgPC9wYXJhPgorCisgIDxpdGVtaXplZGxp c3Q+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgPGxpdGVyYWw+bWF0Y2hlZDwv bGl0ZXJhbD4gbWVhbnMgdGhhdCBhbGwgb2YgdGhlIHNwZWNpZmllZCBhZHZpY2UgdGFyZ2V0cwor ICAgICB3ZXJlIG9ic2VydmVkIGR1cmluZyBxdWVyeSBwbGFubmluZy4KKyAgICA8L3BhcmE+Cisg ICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFs PnBhcnRpYWxseSBtYXRjaGVkPC9saXRlcmFsPiBtZWFucyB0aGF0IHNvbWUgYnV0IG5vdCBhbGwg b2YgdGhlCisgICAgIHNwZWNpZmllZCBhZHZpY2UgdGFyZ2V0ZXMgd2VyZSBvYnNlcnZlZCBkdXJp bmcgcXVlcnkgcGxhbm5pbmcuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxp c3RpdGVtPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJhbD5ub3QgbWF0Y2hlZDwvbGl0ZXJhbD4g bWVhbnMgdGhhdCBub25lIG9mIHRoZQorICAgICBzcGVjaWZpZWQgYWR2aWNlIHRhcmdldHMgd2Vy ZSBvYnNlcnZlZCBkdXJpbmcgcXVlcnkgcGxhbm5pbmcuIFRoaXMgbWF5CisgICAgIGJlIGhhcHBl biBpZiB0aGUgYWR2aWNlIHNpbXBseSBkb2Vzbid0IG1hdGNoIHRoZSBxdWVyeSwgb3IgaXQgbWF5 CisgICAgIG9jY3VyIGlmIHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBxdWVyeSB3YXMgbm90 IHBsYW5uZWQsIHBlcmhhcHMKKyAgICAgYmVjYXVzZSBpdCB3YXMgZ2F0ZWQgYnkgYSBjb25kaXRp b24gdGhhdCB3YXMgc2ltcGxpZmllZCB0byBjb25zdGFudCBmYWxzZS4KKyAgICA8L3BhcmE+Cisg ICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFs PmluYXBwbGljYWJsZTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0aGUgYWR2aWNlIHRhZyBjb3VsZCBu b3QKKyAgICAgYmUgYXBwbGllZCB0byB0aGUgYWR2aWNlIHRhcmdldHMgZm9yIHNvbWUgcmVhc29u LiBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsCisgICAgIGhhcHBlbiBpZiB0aGUgdXNlIG9mIGEgbm9u ZXhpc3RlbnQgaW5kZXggaXMgcmVxdWVzdGVkLCBvciBpZiBhbiBhdHRlbXB0CisgICAgIGlzIG1h ZGUgdG8gY29udHJvbCBzZW1pam9pbiB1bmlxdW5lc3MgZm9yIGEgbm9uLXNlbWlqb2luLgorICAg IDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAg ICAgPGxpdGVyYWw+Y29uZmxpY3Rpbmc8L2xpdGVyYWw+IG1lYW5zIHRoYXQgdHdvIG9yIG1vcmUg cGllY2VzIG9mIGFkdmljZQorICAgICByZXF1ZXN0IGluY29tcGF0aWJsZSBiZWhhdmlvcnMuIEZv ciBleGFtcGxlLCBpZiB5b3UgYWR2aXNlIGEgc2VxdWVudGlhbAorICAgICBzY2FuIGFuZCBhbiBp bmRleCBzY2FuIGZvciB0aGUgc2FtZSB0YWJsZSwgYm90aCByZXF1ZXN0cyB3aWxsIGJlIGZsYWdn ZWQKKyAgICAgYXMgY29uZmxpY3RpbmcuIFRoaXMgYWxzbyBjb21tb25seSBoYXBwZW5zIGlmIGpv aW4gbWV0aG9kIGFkdmljZSBvcgorICAgICBzZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZSBpbXBs aWVzIGEgam9pbiBvcmRlciBpbmNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAgb25lIGV4cGxpY2l0 bHkgc3BlY2lmaWVkOyBzZWUKKyAgICAgPHhyZWYgbGlua2VuZD0icGdwbGFuYWR2aWNlLWpvaW4t bWV0aG9kIiAvPi4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+ CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFsPmZhaWxlZDwvbGl0ZXJhbD4gbWVhbnMgdGhhdCBx dWVyeSBwbGFuIGRvZXMgbm90IGNvbXBseSB3aXRoCisgICAgIHRoZSBhZHZpY2UuIFRoaXMgb25s eSBvY2N1cnMgZm9yIGVudHJpZXMgdGhhdCBhcmUgYWxzbyBzaG93biBhcworICAgICA8bGl0ZXJh bD5tYXRjaGVkPC9saXRlcmFsPi4gSXQgZnJlcXVlbnRseSBvY2N1cnMgZm9yIGVudHJpZXMgdGhh dCBhcmUKKyAgICAgYWxzbyBtYXJrZWQgYXMgPGxpdGVyYWw+Y29uZmxpY3Rpbmc8L2xpdGVyYWw+ IG9yCisgICAgIDxsaXRlcmFsPmluYXBwbGljYWJsZTwvbGl0ZXJhbD4uIEhvd2V2ZXIsIGl0IGNh biBhbHNvIG9jY3VyIHdoZW4gdGhlCisgICAgIGFkdmljZSBpcyB2YWxpZCBpbnNvZmFyIGFzIDxs aXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBpcyBhYmxlCisgICAgIHRvIGRldGVybWlu ZSwgYnV0IHRoZSBwbGFubmVyIGlzIG5vdCBhYmxlIHRvIGNvbnN0cnVjdCBhIGxlZ2FsCisgICAg IHBsYW4gdGhhdCBjYW4gY29tcGx5IHdpdGggdGhlIGFkdmljZS4gSXQgaXMgaW1wb3J0YW50IHRv IG5vdGUgdGhhdCB0aGUKKyAgICAgc2FuaXR5IGNoZWNrcyBwZXJmb3JtZWQgYnkgPGxpdGVyYWw+ cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGFyZSBmYWlybHkKKyAgICAgc3VwZXJmaWNpYWwgYW5k IGZvY3VzZWQgbW9zdGx5IG9uIGxvb2tpbmcgZm9yIGxvZ2ljYWwgaW5jb25zaXN0ZW5jaWVzIGlu CisgICAgIHRoZSBhZHZpY2Ugc3RyaW5nOyBvbmx5IHRoZSBwbGFubmVyIGtub3dzIHdoYXQgd2ls bCBhY3R1YWxseSB3b3JrLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgPC9pdGVt aXplZGxpc3Q+CisKKyAgPHBhcmE+CisgICBBbGwgYWR2aWNlIHNob3VsZCBiZSBtYXJrZWQgYXMg ZXhhY3RseSBvbmUgb2YgPGxpdGVyYWw+bWF0Y2hlZDwvbGl0ZXJhbD4sCisgICA8bGl0ZXJhbD5w YXJ0aWFsbHkgbWF0Y2hlZDwvbGl0ZXJhbD4sIG9yIDxsaXRlcmFsPm5vdCBtYXRjaGVkPC9saXRl cmFsPi4KKyAgPC9wYXJhPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNl LWNvbGxlY3RvciI+CisgIDx0aXRsZT5BZHZpY2UgQ29sbGVjdG9yczwvdGl0bGU+CisKKyAgPHBh cmE+CisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gY2FuIGJlIGNvbmZpZ3Vy ZWQgdG8gYXV0b21hdGljYWxseQorICAgZ2VuZXJhdGUgYWR2aWNlIGV2ZXJ5IHRpbWUgYSBxdWVy eSBpcyBwbGFubmVkIGFuZCBzdG9yZSB0aGUgcXVlcnkgYW5kCisgICB0aGUgZ2VuZXJhdGVkIGFk dmljZSBzdHJpbmcgZWl0aGVyIGluIGxvY2FsIG9yIHNoYXJlZCBtZW1vcnkuCisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIFRvIGVuYWJsZSBhIGNvbGxlY3RvciwgeW91IG11c3QgZmlyc3Qgc2V0 IGEgY29sbGVjdGlvbiBsaW1pdC4gV2hlbiB0aGUKKyAgIG51bWJlciBvZiBxdWVyaWVzIGZvciB3 aGljaCBhZHZpY2UgaGFzIGJlZW4gc3RvcmVkIGV4Y2VlZHMgdGhlIGNvbGxlY3Rpb24KKyAgIGxp bWl0LCB0aGUgb2xkZXN0IHF1ZXJpZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGFkdmljZSB3aWxs IGJlIGRpc2NhcmRlZC4KKyAgIFRoZW4sIHlvdSBtdXN0IGFkanVzdCBhIHNlcGFyYXRlIHNldHRp bmcgdG8gYWN0dWFsbHkgZW5hYmxlIGFkdmljZQorICAgY29sbGVjdGlvbi4gRm9yIHRoZSBsb2Nh bCBjb2xsZWN0b3IsIHNldCB0aGUgY29sbGVjdGlvbiBsaW1pdCBieSBjb25maWd1cmluZworICAg PGxpdGVyYWw+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdDwvbGl0ZXJhbD4g dG8gYSB2YWx1ZQorICAgZ3JlYXRlciB0aGFuIHplcm8sIGFuZCB0aGVuIGVuYWJsZSBhZHZpY2Ug Y29sbGVjdGlvbiBieSBzZXR0aW5nCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5sb2NhbF9j b2xsZWN0b3IgPSB0cnVlPC9saXRlcmFsPi4gRm9yIHRoZSBzaGFyZWQKKyAgIGNvbGxlY3Rvciwg dGhlIHByb2NlZHVyZSBpcyB0aGUgc2FtZSwgZXhjZXB0IHRoYXQgdGhlIG5hbWVzIG9mIHRoZSBz ZXR0aW5ncworICAgYXJlIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9u X2xpbWl0PC9saXRlcmFsPiBhbmQKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9j b2xsZWN0b3I8L2xpdGVyYWw+LiBOb3RlIHRoYXQgdGhlIGxvY2FsCisgICBjb2xsZWN0b3Igc3Rv cmVzIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBpbiBiYWNrZW5kLWxvY2FsIG1lbW9y eSwKKyAgIGFuZCB0aGUgc2hhcmVkIGNvbGxlY3RvciBkb2VzIHRoZSBzYW1lIGluIGR5bmFtaWMg c2hhcmVkIG1lbW9yeSwgc28KKyAgIGNvbmZpZ3VyaW5nIGxhcmdlIGxpbWl0cyBtYXkgcmVzdWx0 IGluIGNvbnNpZGVyYWJsZSBtZW1vcnkgY29uc3VtcHRpb24uCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIE9uY2UgdGhlIGNvbGxlY3RvciBpcyBlbmFibGVkLCB5b3UgY2FuIHJ1biBhbnkgcXVl cmllcyBmb3Igd2hpY2ggeW91IHdpc2gKKyAgIHRvIHNlZSB0aGUgZ2VuZXJhdGVkIHBsYW4gYWR2 aWNlLiBUaGVuLCB5b3UgY2FuIGV4YW1pbmUgd2hhdCBoYXMgYmVlbgorICAgY29sbGVjdGVkIHVz aW5nIHdoaWNoZXZlciBvZgorICAgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBwZ19nZXRfY29sbGVj dGVkX2xvY2FsX2FkdmljZSgpPC9saXRlcmFsPiBvcgorICAgPGxpdGVyYWw+U0VMRUNUICogRlJP TSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTwvbGl0ZXJhbD4KKyAgIGNvcnJlc3Bv bmRzIHRvIHRoZSBjb2xsZWN0b3IgeW91IGVuYWJsZWQuIFRvIGRpc2NhcmQgdGhlIGNvbGxlY3Rl ZCBhZHZpY2UKKyAgIGFuZCByZWxlYXNlIG1lbW9yeSwgeW91IGNhbiBjYWxsCisgICA8bGl0ZXJh bD5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk8L2xpdGVyYWw+CisgICBvciA8bGl0 ZXJhbD5wZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpPC9saXRlcmFsPi4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgSW4gYWRkaXRpb24gdG8gdGhlIHF1ZXJ5IHRleHRzIGFuIGFk dmljZSBzdHJpbmdzLCB0aGUgYWR2aWNlIGNvbGxlY3RvcnMKKyAgIHdpbGwgYWxzbyBzdG9yZSB0 aGUgT0lEIG9mIHRoZSByb2xlIHRoYXQgY2F1c2VkIHRoZSBxdWVyeSB0byBiZSBwbGFubmVkLAor ICAgdGhlIE9JRCBvZiB0aGUgZGF0YWJhc2UgaW4gd2hpY2ggdGhlIHF1ZXJ5IHdhcyBwbGFubmVk LCB0aGUgcXVlcnkgSUQsCisgICBhbmQgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGNvbGxlY3Rpb24g b2NjdXJyZWQuIFRoaXMgbW9kdWxlIGRvZXMgbm90CisgICBhdXRvbWF0aWNhbGx5IGVuYWJsZSBx dWVyeSBJRCBjb21wdXRhdGlvbjsgdGhlcmVmb3JlLCBpZiB5b3Ugd2FudCB0aGUKKyAgIHF1ZXJ5 IElEIHZhbHVlIHRvIGJlIHBvcHVsYXRlZCBpbiBjb2xsZWN0ZWQgYWR2aWNlLCBiZSBzdXJlIHRv IGNvbmZpZ3VyZQorICAgPGxpdGVyYWw+ZW5hYmxlX3F1ZXJ5X2lkID0gb248L2xpdGVyYWw+LiBP dGhlcndpc2UsIHRoZSBxdWVyeSBJRCBtYXkKKyAgIGFsd2F5cyBzaG93IGFzIDxsaXRlcmFsPjA8 L2xpdGVyYWw+LgorICA8L3BhcmE+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5h ZHZpY2UtZnVuY3Rpb25zIj4KKyAgPHRpdGxlPkZ1bmN0aW9uczwvdGl0bGU+CisKKyAgPHBhcmE+ CisgICBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYg dGhlCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gZXh0ZW5zaW9uIGhhcyBi ZWVuIGluc3RhbGxlZCBpbiB0aGUKKyAgIGN1cnJlbnQgZGF0YWJhc2UsIHdoaWNoIGlzIG5vdCBt YW5kYXRvcnksIHNpbmNlIG11Y2ggb2YgdGhlIGZ1bmN0aW9uYWxpdHkKKyAgIG9mIHRoaXMgbW9k dWxlIGNhbiBiZSB1c2VkIHdpdGhvdXQgaW5zdGFsbGluZyB0aGUgZXh0ZW5zaW9uLgorICA8L3Bh cmE+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4K KyAgICAgPGZ1bmN0aW9uPnBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSByZXR1cm5z IHZvaWQ8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfY2xl YXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZTwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+Cisg ICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJlbW92ZXMg YWxsIGNvbGxlY3RlZCBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3MgZnJvbSBiYWNrZW5k LWxvY2FsCisgICAgICBtZW1vcnkuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxm dW5jdGlvbj5wZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpIHJldHVybnMgc2V0b2YgKGlk IGJpZ2ludCwKKyAgICAgICAgdXNlcmlkIG9pZCwgZGJpZCBvaWQsIHF1ZXJ5aWQgYmlnaW50LCBj b2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisgICAgICAgIHF1ZXJ5IHRleHQsIGFkdmljZSB0 ZXh0KTwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19nZXRf Y29sbGVjdGVkX2xvY2FsX2FkdmljZTwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAg PC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgYWxs IHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBzdG9yZWQgaW4gdGhlIGxvY2FsCisgICAg ICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtY29sbGVjdG9yIj5hZHZpY2UgY29sbGVjdG9y PC9saW5rPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2Ns ZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAg ICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRf YWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8 bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmVtb3ZlcyBhbGwgY29sbGVjdGVkIHF1ZXJ5 IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBmcm9tIHNoYXJlZAorICAgICAgbWVtb3J5LgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFy bGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2NvbGxlY3RlZF9z aGFyZWRfYWR2aWNlKCkgcmV0dXJucyBzZXRvZiAoaWQgYmlnaW50LAorICAgICAgICB1c2VyaWQg b2lkLCBkYmlkIG9pZCwgcXVlcnlpZCBiaWdpbnQsIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0 eiwKKyAgICAgICAgcXVlcnkgdGV4dCwgYWR2aWNlIHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGlu ZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZTwv cHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVt PgorICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgYWxsIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ug c3RyaW5ncyBzdG9yZWQgaW4gdGhlIHNoYXJlZAorICAgICAgPGxpbmsgbGlua2VuZD0icGdwbGFu YWR2aWNlLWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+ CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2UtY29uZmlnLXBhcmFtcyI+ CisgIDx0aXRsZT5Db25maWd1cmF0aW9uIFBhcmFtZXRlcnM8L3RpdGxlPgorCisgIDx2YXJpYWJs ZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBn X3BsYW5fYWR2aWNlLmFkdmljZTwvdmFybmFtZT4gKDx0eXBlPnN0cmluZzwvdHlwZT4pCisgICAg IDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hZHZp Y2U8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2lu ZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWR2aWNlPC92YXJuYW1lPiBpcyBhbiBhZHZpY2Ug c3RyaW5nIHRvIGJlCisgICAgICB1c2VkIGR1cmluZyBxdWVyeSBwbGFubmluZy4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4 cGxhaW5fc3VwcGxpZWRfYWR2aWNlPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisg ICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19wbGFuX2FkdmljZS5h bHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAg PGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFs d2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZTwvdmFybmFtZT4gY2F1c2VzCisgICAgICA8bGl0 ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiB0byBhbHdheXMgc2hvdyBhbnkgc3VwcGxpZWQgYWR2aWNl IGFuZCB0aGUKKyAgICAgIGFzc29jaWF0ZWQKKyAgICAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFk dmljZS1mZWVkYmFjayI+YWR2aWNlIGZlZWRiYWNrPC9saW5rPi4KKyAgICAgIFRoZSBkZWZhdWx0 IHZhbHVlIGlzIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LiBJZiBzZXQgdG8KKyAgICAgIDxsaXRl cmFsPmZhbHNlPC9saXRlcmFsPiwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBv bmx5IHdoZW4KKyAgICAgIDxsaXRlcmFsPkVYUExBSU4gKFBMQU5fQURWSUNFKTwvbGl0ZXJhbD4g aXMgdXNlZC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxh bl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzPC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5w Z19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPC92YXJuYW1lPiBjb25m aWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90 ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBnX3Bs YW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlsczwvdmFybmFtZT4gYWxsb3dzCisg ICAgICA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiB0byBzaG93IGRldGFpbHMgcmVsYXRlZCB0 byBwbGFuIGFkdmljZSBldmVuCisgICAgICB3aGVuIHByZXBhcmVkIHF1ZXJpZXMgYXJlIHVzZWQu ICBUaGUgZGVmYXVsdCB2YWx1ZSBpcworICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LiAg V2hlbiBwbGFubmluZyBhIHByZXBhcmVkIHF1ZXJ5LCB3ZSBkbyBub3QKKyAgICAgIGtub3cgd2hl dGhlciA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiB3aWxsIGJlIHVzZWQsIHNvIGJ5IGRlZmF1 bHQsIHRvCisgICAgICByZWR1Y2Ugb3ZlcmhlYWQsIHdlIGRvIG5vdCBnZW5lcmF0ZSBwbGFuIGFk dmljZSwgYW5kIHdlIGRvIG5vdCBnZW5lcmF0ZQorICAgICAgZmVlZGJhY2sgb24gc3VwcGxpZWQg YWR2aWNlLiBUaGlzIG1lYW5zIHRoYXQgaWYKKyAgICAgIDxsaXRlcmFsPkVYUExBSU4gRVhFQ1VU RTwvbGl0ZXJhbD4gaXMgbGF0ZXIgdXNlZCBvbiB0aGUgcHJlcGFyZWQgcXVlcnksCisgICAgICBp dCB3aWxsIG5vdCBiZSBhYmxlIHRvIHNob3cgdGhpcyBpbmZvcm1hdGlvbi4gQ2hhbmdpbmcgdGhp cyBzZXR0aW5nIHRvCisgICAgICA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiBhdm9pZHMgdGhpcyBw cm9ibGVtLCBidXQgYWRkcyBhZGRpdGlvbmFsCisgICAgICBvdmVyaGVhZC4gSXQgaXMgcHJvYmFi bHkgYSBnb29kIGlkZWEgdG8gZW5hYmxlIHRoaXMgb3B0aW9uIG9ubHkgaW4KKyAgICAgIHNlc3Np b25zIHdoZXJlIGl0IGlzIG5lZWRlZCwgcmF0aGVyIHRoYW4gb24gYSBzeXN0ZW0td2lkZSBiYXNp cy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwor ICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZp Y2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAg IDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19wbGFuX2FkdmljZS5sb2Nh bF9jb2xsZWN0b3I8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5Pgor ICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJu YW1lPiBlbmFibGVzIHRoZQorICAgICAgbG9jYWwgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNl LWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisgICAgICBUaGUgZGVmYXVsdCB2 YWx1ZSBpcyA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8 L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAg IDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8 L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdDwvdmFybmFtZT4g c2V0cyB0aGUKKyAgICAgIG1heGltdW0gbnVtYmVyIG9mIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ug c3RyaW5ncyByZXRhaW5lZCBieSB0aGUKKyAgICAgIGxvY2FsIDxsaW5rIGxpbmtlbmQ9InBncGxh bmFkdmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICAgVGhlIGRl ZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I8L3Zh cm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxw cmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I8L3Zhcm5hbWU+ IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAg ICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+ cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvdmFybmFtZT4gZW5hYmxlcyB0aGUKKyAg ICAgIHNoYXJlZCA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtY29sbGVjdG9yIj5hZHZpY2Ug Y29sbGVjdG9yPC9saW5rPi4KKyAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPmZh bHNlPC9saXRlcmFsPi4gIE9ubHkgc3VwZXJ1c2VycyBhbmQgdXNlcnMKKyAgICAgIHdpdGggdGhl IGFwcHJvcHJpYXRlIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4gcHJpdmlsZWdlIGNhbiBjaGFuZ2Ug dGhpcworICAgICAgc2V0dGluZy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZh cm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+ICg8 dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAg PC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBn X3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiBzZXRzIHRoZQor ICAgICAgbWF4aW11bSBudW1iZXIgb2YgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIHJl dGFpbmVkIGJ5IHRoZQorICAgICAgc2hhcmVkIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1j b2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICAgVGhlIGRlZmF1bHQgdmFs dWUgaXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uICBPbmx5IHN1cGVydXNlcnMgYW5kIHVzZXJzCisg ICAgICB3aXRoIHRoZSBhcHByb3ByaWF0ZSA8bGl0ZXJhbD5TRVQ8L2xpdGVyYWw+IHByaXZpbGVn ZSBjYW4gY2hhbmdlIHRoaXMKKyAgICAgIHNldHRpbmcuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zhcm5hbWU+ICg8 dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgV2hlbiA8dmFybmFtZT5wZ19wbGFuX2Fk dmljZS50cmFjZV9tYXNrPC92YXJuYW1lPiBpcworICAgICAgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJh bD4sIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiB3aWxsIHByaW50CisgICAgICBt ZXNzYWdlcyBkdXJpbmcgcXVlcnkgcGxhbm5pbmcgZWFjaCB0aW1lIHRoYXQKKyAgICAgIDxsaXRl cmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBhbHRlcnMgdGhlIG1hc2sgb2YgYWxsb3dhYmxl IHF1ZXJ5CisgICAgICBwbGFuIHR5cGVzIGluIHJlc3BvbnNlIHRvIHN1cHBsaWVkIHBsYW4gYWR2 aWNlLiBUaGUgZGVmYXVsdCB2YWx1ZXMgaXMKKyAgICAgIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFs Pi4gVGhlIG1lc3NhZ2VzIHByaW50ZWQgYnkgdGhpcyBzZXR0aW5nIGFyZSBub3QKKyAgICAgIGV4 Y2VwdGVkIHRvIGJlIHVzZWZ1bCBleGNlcHQgZm9yIHB1cnBvc2VzIG9mIGRlYnVnZ2luZyB0aGlz IG1vZHVsZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxh bmFkdmljZS1hdXRob3IiPgorICA8dGl0bGU+QXV0aG9yPC90aXRsZT4KKworICA8cGFyYT4KKyAg IFJvYmVydCBIYWFzIDxlbWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+CisgIDwvcGFy YT4KKyA8L3NlY3QyPgorCis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAw MDIyYWRmNmJhZS4uOTk1ZDFjOTEzZWQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0z OTc4LDYgKzM5NzgsNDQgQEAgcGdfdXVpZF90CiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBwZ3Bf YXJtb3JfaGVhZGVyc19zdGF0ZQorcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ3BhX2FkdmljZV9p dGVtCitwZ3BhX2FkdmljZV90YWdfdHlwZQorcGdwYV9hZHZpY2VfdGFyZ2V0CitwZ3BhX2lkZW50 aWZpZXIKK3BncGFfaW5kZXhfdGFyZ2V0CitwZ3BhX2luZGV4X3R5cGUKK3BncGFfaXRtX3R5cGUK K3BncGFfam9pbl9jbGFzcworcGdwYV9qb2luX21lbWJlcgorcGdwYV9qb2luX3N0YXRlCitwZ3Bh X2pvaW5fc3RyYXRlZ3kKK3BncGFfam9pbl91bnJvbGxlcgorcGdwYV9sb2NhbF9hZHZpY2UKK3Bn cGFfbG9jYWxfYWR2aWNlX2NodW5rCitwZ3BhX291dHB1dF9jb250ZXh0CitwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQKK3BncGFfcGxhbm5lcl9zdGF0ZQorcGdwYV9xZl90eXBlCitwZ3BhX3F1ZXJ5 X2ZlYXR1cmUKK3BncGFfcmlfY2hlY2tlcgorcGdwYV9yaV9jaGVja2VyX2tleQorcGdwYV9zY2Fu CitwZ3BhX3NjYW5fc3RyYXRlZ3kKK3BncGFfc2hhcmVkX2FkdmljZQorcGdwYV9zaGFyZWRfYWR2 aWNlX2NodW5rCitwZ3BhX3NoYXJlZF9zdGF0ZQorcGdwYV9zal91bmlxdWVfcmVsCitwZ3BhX3Rh cmdldF90eXBlCitwZ3BhX3Ryb3ZlCitwZ3BhX3Ryb3ZlX2VudHJ5CitwZ3BhX3Ryb3ZlX2VudHJ5 X2VsZW1lbnQKK3BncGFfdHJvdmVfZW50cnlfaGFzaAorcGdwYV90cm92ZV9lbnRyeV9rZXkKK3Bn cGFfdHJvdmVfbG9va3VwX3R5cGUKK3BncGFfdHJvdmVfcmVzdWx0CitwZ3BhX3Ryb3ZlX3NsaWNl CitwZ3BhX3Vucm9sbGVkX2pvaW4KIHBnc29ja2V0CiBwZ3NxbF90aGluZ190CiBwZ3NzRW50cnkK LS0gCjIuNTEuMAoK --0000000000008b3f75064a3f5e84--