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 1vfLUK-001CGs-0F for pgsql-hackers@arkaria.postgresql.org; Mon, 12 Jan 2026 17:13:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vfLUI-001Fvc-0i for pgsql-hackers@arkaria.postgresql.org; Mon, 12 Jan 2026 17:13:54 +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 1vfLUG-001FvR-2c for pgsql-hackers@lists.postgresql.org; Mon, 12 Jan 2026 17:13:53 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vfLUC-0003Uh-12 for pgsql-hackers@lists.postgresql.org; Mon, 12 Jan 2026 17:13:52 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b872de50c91so101557966b.2 for ; Mon, 12 Jan 2026 09:13:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768238026; x=1768842826; 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=JXQkepp+7v0Cki+scji6/nRiJPBZgzN+kJnoKvrAsxo=; b=gQgNyFbwCpwXZeFGlhWd1MaFfyD+PN8Uhq7XjbU/7woxb4Rhc9x/XaHa98+YxVXYZ0 C9HoBnRouOR/14q5WA6hPZ9/XW/ozk22oySIj2PTKKd35pgG+x3Q6W4j8peVCEiL1zJO qTYVjiHKutxTHNc+eOXdaM8cMYal0GWieudQ8GmC59SbuoclxqERgremvVVoIe0OXfwM fqR/1kqrxNknmnEh1o98HIk2unFU9gmB1CzrWQi30WFVfeN8820Sb346M5lbrFreB5kJ F+eexdzpqgK/EO4Bt3/S5861PInoarNGZbZkY6GxMcLl7/nir9mzfdoPPgrHaPWEQVZL licQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768238026; x=1768842826; 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=JXQkepp+7v0Cki+scji6/nRiJPBZgzN+kJnoKvrAsxo=; b=JDjeXnbo3IX5QBURffNKdWWFKK2Ca/zSRBen3ETs2cF6pBXN9nc0m3EhfdZaJXSue8 VhZFbk6uMek71QRh6X74KPgpd3dgjAeYqYKovXfJbVKuVe36pl94x7c1L7wIArSdnFxr ZaWgDdOg8x5g7gkRdpGIxKoehvDtt+g8oucmgLTUXfFkpAxoDgOQ3D2+KolXIrHd+l7T 8IHs8iDlsVw3IPkT3Ezso3YtvEIjuVWGoKO0biayKAzxRnB95yRmc0e/ZmNeD5EDuD09 3OYi63C7qOhMKcTsS04UU5DfJy7VemzzVTrhuf7O5GGJ9f8eo+89e7GuATIVT5Y07rsO OEOg== X-Forwarded-Encrypted: i=1; AJvYcCVBogz/KV2LhJpIPRq+iYfUO/P33bAmILGbOpJ/MRC0KzPu+p47RXl04fmBxw6EGtlChVY/k/IGhLRb0Ixp@lists.postgresql.org X-Gm-Message-State: AOJu0YwrMy0VH7cwe6fQSaZs4QwAUCOYHLfeBUc2sesMVHJgYD+QuinB pi4ATtFSenkpUEgU/zX+AgnlxEEd0qrlov5qQsQDMKhF6fa2ElSpDY3lkLrpenlwNlDxJqZfeBJ UyFYiMnoFtF4U6Qfg/IUfmmbo+rx7ziY= X-Gm-Gg: AY/fxX6YKAHmj0NiiEfOHrvDx8xgZ/0bnmBdzgdvpS9ueWjR6/g2N60R8rmwa3gRWZY In6IN9ctI1wRXYlsYzKa8x2Qy3gjA4+myqP++KXtIF3yRnQHS04icDezOWb1ydVtOl+0LW1fCP4 doxjh0ccvW6vS7pvxPz8YvPgZK4heGRM4n+6Vq0OaFW2GSGgbWBGKX3BSg2rLMWibbsC0jXsq3q vRYY0JUvrCl4LBwHD1akxDjO5FEyDrfojJ+2JilSAObAsQo/WIqtuPYpUD7Q6bxdKVpbDKtsKnZ EkwH7a+mD0XITNU2rt/2gebe2N8rp7Uy6lRmog== X-Google-Smtp-Source: AGHT+IGft6JVKPqgoROahfuyCKmeGg1V23pu8gcGL4r/jCOkgnKaFINnF9nFoZZa6/+HYe1P4G3yPuyW+jiUZWqka0U= X-Received: by 2002:a17:907:3d46:b0:b83:84b0:9419 with SMTP id a640c23a62f3a-b84453eb2dcmr1924395866b.46.1768238026070; Mon, 12 Jan 2026 09:13:46 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Mon, 12 Jan 2026 12:13:32 -0500 X-Gm-Features: AZwV_Qgz9-KkkrMfNuCXyx8gUnUchH0AGHCAaiPmCGn21qtQpi6qW0xmlOvQ8v8 Message-ID: Subject: Re: pg_plan_advice To: Lukas Fittl Cc: Jacob Champion , Dian Fay , Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000006c6cda064833ff55" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006c6cda064833ff55 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Jan 11, 2026 at 3:21=E2=80=AFPM Lukas Fittl wrote= : > I wonder a bit if we shouldn't instead focus on this being about the > inputs to create_append_path (and the 4 different variants of calling > it in add_paths_to_append_rel), and make sure we group some of them > together in a struct, but still pass the individual fields of that > struct to accumulate_append_subpaths. > > I've sketched out what I mean in the attached This is a good idea, IMHO. It didn't compile and I made some other cosmetic fixes, but I like the direction. Here's v9. Changes: * Updated all patches with reviewers to date and discussion link. I have listed the same reviewers for all of 0001-0004, but the list for 0005 is different, based on my reading of the emails on this thread. If someone feels that I've made the wrong choices about listing them, please let me know. * Incorporated Lukas's idea into 0003 and listed him as a co-author. * Some comment improvements to 0004. In 0005: * Disallow JOIN_ORDER() without targets, per feedback from Ajay Pal. * pgindent * Incorporate the fix to pgpa_process_unrolled_join() that I previously posted separately, and update the associated comments. I now feel that I've had enough substantial feedback on 0003 and 0004 that it wouldn't be crazy to think about committing those, unless further review turns up problems or something. I think I need more substantial review on 0001 and 0002 before I could consider moving forward with those. And 0005 needs a lot more review, and also a lot more work from my side. Given that, where do I go from here? I don't think it makes sense to commit 0002 or 0003 without 0001, but 0004 is mostly independent of 0001-0003. So, I think that if more feedback on 0001 and 0002 is forthcoming soon, I'll probably just wait a bit and hope to commit 0001-0004 in the current order. If not, I'll rearrange the series to move 0004 to the front, and plan to commit that first. --=20 Robert Haas EDB: http://www.enterprisedb.com --0000000000006c6cda064833ff55 Content-Type: application/octet-stream; name="v9-0003-Store-information-about-Append-node-consolidation.patch" Content-Disposition: attachment; filename="v9-0003-Store-information-about-Append-node-consolidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkbf681c2 RnJvbSBjZTkzYWExZmI0MWJiYmJlODI0OGRjMzdmZjJmMjkyZTJmZWIxNTJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6MTI6MjUgLTA1MDAKU3ViamVjdDogW1BBVENIIHY5IDMv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbiBpbgog dGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFuZCB3 aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMKb2Yg cGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4gQXBw ZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBhIHN1 Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0aGUg c3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtpbmcg dGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlzLCBw cm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4gdGhl ICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZpbmcg QXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQg aXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBhcHBl bmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9uZSwg aWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBpdCB3 YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVyZQpw YXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGxv c2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBpbiB0 aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19vdmVy ZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhlIHNh dmVkIFJUSSBzZXRzLgoKQ28tYXV0aG9yZWQtYnk6IFJvYmVydCBIYWFzIDxyaGFhc0Bwb3N0Z3Jl c3FsLm9yZz4KQ28tYXV0aG9yZWQtYnk6IEx1a2FzIEZpdHRsIDxsdWthc0BmaXR0bC5jb20+ClJl dmlld2VkLWJ5OiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpSZXZpZXdlZC1ieTogSmFr dWIgV2FydGFrIDxqYWt1Yi53YXJ0YWtAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEdy ZWcgQnVyZCA8Z3JlZ0BidXJkLm1lPgpSZXZpZXdlZC1ieTogSmFjb2IgQ2hhbXBpb24gPGphY29i LmNoYW1waW9uQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBBbWl0IExhbmdvdGUgPGFt aXRsYW5nb3RlMDlAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSGFpYm8gWWFuIDx0cmlzdGFuLnlp bUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHA6Ly9wb3N0Z3IuZXMvbS9DQStUZ21vWi1KaDFU NlF5V29DT0RNVlFkaFRVUFlrYVpqV3p0elAxRW40PVpIb0tQendAbWFpbC5nbWFpbC5jb20KLS0t CiAuLi4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0ICAgICAgICAgICAgICAgfCAgIDQgKy0K IGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8ICA1NiArKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8IDE4NiAr KysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMg ICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5j ICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAg ICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgICAg ICAgIHwgIDQzICsrLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAg ICAgICB8ICAyNiArLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAg ICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgMTEgKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oICAgICAgICAgICAg ICB8ICAxOCArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAg IHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDI1NyBpbnNlcnRpb25zKCspLCAxMTAgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19v dmVyZXhwbGFpbi5vdXQgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJl eHBsYWluLm91dAppbmRleCBjYTlhMjNlYTYxZi4uYTM3N2ZiMjU3MWQgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0CisrKyBiL2Nv bnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0CkBAIC0xMDQs NiArMTA0LDcgQEAgJCQpOwogICAgICAgICAgICAgICAgUGFyYWxsZWwgU2FmZTogdHJ1ZQogICAg ICAgICAgICAgICAgUGxhbiBOb2RlIElEOiAyCiAgICAgICAgICAgICAgICBBcHBlbmQgUlRJczog MQorICAgICAgICAgICAgICAgQ2hpbGQgQXBwZW5kIFJUSXM6IG5vbmUKICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBicmFzc2ljYSB2ZWdldGFibGVzXzEKICAgICAgICAgICAgICAgICAg ICAgIERpc2FibGVkIE5vZGVzOiAwCiAgICAgICAgICAgICAgICAgICAgICBQYXJhbGxlbCBTYWZl OiB0cnVlCkBAIC0xNDIsNyArMTQzLDcgQEAgJCQpOwogICAgUmVsYXRpb24gS2luZDogcmVsYXRp b24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVMb2NrCiAgVW5wcnVuYWJsZSBS VElzOiAxIDMgNAotKDUzIHJvd3MpCisoNTQgcm93cykKIAogLS0gVGVzdCBhIGRpZmZlcmVudCBv dXRwdXQgZm9ybWF0LgogU0VMRUNUIGV4cGxhaW5fZmlsdGVyKCQkCkBAIC0xOTcsNiArMTk4LDcg QEAgJCQpOwogICAgICAgICAgICAgICAgPGV4dFBhcmFtPm5vbmU8L2V4dFBhcmFtPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8YWxsUGFyYW0+bm9uZTwvYWxs UGFyYW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgICAgIDxBcHBl bmQtUlRJcz4xPC9BcHBlbmQtUlRJcz4gICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAg ICAgICAgICAgPENoaWxkLUFwcGVuZC1SVElzPm5vbmU8L0NoaWxkLUFwcGVuZC1SVElzPiAgICAg ICAgICArCiAgICAgICAgICAgICAgICA8U3VicGxhbnMtUmVtb3ZlZD4wPC9TdWJwbGFucy1SZW1v dmVkPiAgICAgICAgICAgICAgICsKICAgICAgICAgICAgICAgIDxQbGFucz4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgICA8UGxh bj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgYi9jb250cmliL3Bn X292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggZTAxODRiYTMxNGEuLjM2ZTZhYWMw ZTJjIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMK KysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCkBAIC01NCw2ICs1 NCw4IEBAIHN0YXRpYyB2b2lkIG92ZXJleHBsYWluX2FsaWFzKGNvbnN0IGNoYXIgKnFsYWJlbCwg QWxpYXMgKmFsaWFzLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBv dmVyZXhwbGFpbl9iaXRtYXBzZXQoY29uc3QgY2hhciAqcWxhYmVsLCBCaXRtYXBzZXQgKmJtcywK IAkJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIG92ZXJleHBsYWluX2Jp dG1hcHNldF9saXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqYm1zX2xpc3QsCisJCQkJCQkJ CQkgICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIG92ZXJleHBsYWluX2ludGxpc3Qo Y29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpsaXN0LAogCQkJCQkJCQlFeHBsYWluU3RhdGUgKmVz KTsKIApAQCAtMjMyLDExICsyMzQsMTcgQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9vayhQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCW92ZXJleHBsYWluX2JpdG1h cHNldCgiQXBwZW5kIFJUSXMiLAogCQkJCQkJCQkJICAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwcmVs aWRzLAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xpc3QoIkNo aWxkIEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKEFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRf YXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJCQkJICAgZXMpOwogCQkJCWJyZWFrOwogCQkJY2Fz ZSBUX01lcmdlQXBwZW5kOgogCQkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiQXBwZW5kIFJUSXMi LAogCQkJCQkJCQkJICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHMsCiAJCQkJCQkJ CQkgIGVzKTsKKwkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXRfbGlzdCgiQ2hpbGQgQXBwZW5kIFJU SXMiLAorCQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVF9SZXN1 bHQ6CiAKQEAgLTgxNSw2ICs4MjMsNTQgQEAgb3ZlcmV4cGxhaW5fYml0bWFwc2V0KGNvbnN0IGNo YXIgKnFsYWJlbCwgQml0bWFwc2V0ICpibXMsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJcGZyZWUoYnVm LmRhdGEpOwogfQogCisvKgorICogRW1pdCBhIHRleHQgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUg Y29udGVudHMgb2YgYSBsaXN0IG9mIGJpdG1hcHNldHMuCisgKiBJZiBhIGJpdG1hcHNldCBjb250 YWlucyBleGFjdGx5IDEgbWVtYmVyLCB3ZSBqdXN0IHByaW50IGFuIGludGVnZXI7CisgKiBvdGhl cndpc2UsIHdlIHN1cnJvdW5kIHRoZSBsaXN0IG9mIG1lbWJlcnMgYnkgcGFyZW50aGVzZXMuCisg KgorICogSWYgdGhlcmUgYXJlIG5vIGJpdG1hcHNldHMgaW4gdGhlIGxpc3QsIHdlIHByaW50IHRo ZSB3b3JkICJub25lIi4KKyAqLworc3RhdGljIHZvaWQKK292ZXJleHBsYWluX2JpdG1hcHNldF9s aXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqYm1zX2xpc3QsCisJCQkJCQkgICBFeHBsYWlu U3RhdGUgKmVzKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZi dWYpOworCisJZm9yZWFjaF9ub2RlKEJpdG1hcHNldCwgYm1zLCBibXNfbGlzdCkKKwl7CisJCWlm IChibXNfbWVtYmVyc2hpcChibXMpID09IEJNU19TSU5HTEVUT04pCisJCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsICIgJWQiLCBibXNfc2luZ2xldG9uX21lbWJlcihibXMpKTsKKwkJZWxzZQorCQl7 CisJCQlpbnQJCQl4ID0gLTE7CisJCQlib29sCQlmaXJzdCA9IHRydWU7CisKKwkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIiAoIik7CisJCQl3aGlsZSAoKHggPSBibXNfbmV4dF9tZW1i ZXIoYm1zLCB4KSkgPj0gMCkKKwkJCXsKKwkJCQlpZiAoZmlyc3QpCisJCQkJCWZpcnN0ID0gZmFs c2U7CisJCQkJZWxzZQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnICcpOworCQkJ CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVkIiwgeCk7CisJCQl9CisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcigmYnVmLCAnKScpOworCQl9CisJfQorCisJaWYgKGJ1Zi5sZW4gPT0gMCkKKwl7CisJ CUV4cGxhaW5Qcm9wZXJ0eVRleHQocWxhYmVsLCAibm9uZSIsIGVzKTsKKwkJcmV0dXJuOworCX0K KworCUFzc2VydChidWYuZGF0YVswXSA9PSAnICcpOworCUV4cGxhaW5Qcm9wZXJ0eVRleHQocWxh YmVsLCBidWYuZGF0YSArIDEsIGVzKTsKKwlwZnJlZShidWYuZGF0YSk7Cit9CisKIC8qCiAgKiBF bWl0IGEgdGV4dCBwcm9wZXJ0eSBkZXNjcmliaW5nIHRoZSBjb250ZW50cyBvZiBhIGxpc3Qgb2Yg aW50ZWdlcnMsIE9JRHMsCiAgKiBvciBYSURzIC0tIGVpdGhlciBhIHNwYWNlLXNlcGFyYXRlZCBs aXN0IG9mIGludGVnZXIgbWVtYmVycywgb3IgdGhlIHdvcmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jCmluZGV4IDZlNjQxYzE0NmEzLi4zMjZhNmMxOWVhZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0xMjgsOCArMTI4LDEwIEBAIHN0YXRpYyBQYXRo ICpnZXRfY2hlYXBlc3RfcGFyYW1ldGVyaXplZF9jaGlsZF9wYXRoKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCQkJICAgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKIHN0YXRpYyB2b2lkIGFj Y3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwKIAkJCQkJCQkJCSAgTGlzdCAqKnN1 YnBhdGhzLAotCQkJCQkJCQkJICBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocyk7Ci1zdGF0aWMgUGF0 aCAqZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoKTsKKwkJCQkJCQkJCSAg TGlzdCAqKnNwZWNpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyk7CitzdGF0aWMgUGF0aCAqZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChQ YXRoICpwYXRoLAorCQkJCQkJCQkJCSAgTGlzdCAqKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsK IHN0YXRpYyB2b2lkIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKTsKIHN0 YXRpYyB2b2lkIHNldF9zdWJxdWVyeV9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCQkJCQkJCQkgIEluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKQEAg LTE0MDQsMjIgKzE0MDYsMjEgQEAgdm9pZAogYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCUxpc3QgKmxpdmVfY2hpbGRyZWxz KQogewotCUxpc3QJICAgKnN1YnBhdGhzID0gTklMOwotCWJvb2wJCXN1YnBhdGhzX3ZhbGlkID0g dHJ1ZTsKLQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0gTklMOwotCWJvb2wJCXN0YXJ0dXBf c3VicGF0aHNfdmFsaWQgPSB0cnVlOwotCUxpc3QJICAgKnBhcnRpYWxfc3VicGF0aHMgPSBOSUw7 Ci0JTGlzdAkgICAqcGFfcGFydGlhbF9zdWJwYXRocyA9IE5JTDsKLQlMaXN0CSAgICpwYV9ub25w YXJ0aWFsX3N1YnBhdGhzID0gTklMOwotCWJvb2wJCXBhcnRpYWxfc3VicGF0aHNfdmFsaWQgPSB0 cnVlOwotCWJvb2wJCXBhX3N1YnBhdGhzX3ZhbGlkOworCUFwcGVuZFBhdGhJbnB1dCB1bnBhcmFt ZXRlcml6ZWQgPSB7MH07CisJQXBwZW5kUGF0aElucHV0IHN0YXJ0dXAgPSB7MH07CisJQXBwZW5k UGF0aElucHV0IHBhcnRpYWxfb25seSA9IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQgcGFyYWxsZWxf YXBwZW5kID0gezB9OworCWJvb2wJCXVucGFyYW1ldGVyaXplZF92YWxpZCA9IHRydWU7CisJYm9v bAkJc3RhcnR1cF92YWxpZCA9IHRydWU7CisJYm9vbAkJcGFydGlhbF9vbmx5X3ZhbGlkID0gdHJ1 ZTsKKwlib29sCQlwYXJhbGxlbF9hcHBlbmRfdmFsaWQgPSB0cnVlOwogCUxpc3QJICAgKmFsbF9j aGlsZF9wYXRoa2V5cyA9IE5JTDsKIAlMaXN0CSAgICphbGxfY2hpbGRfb3V0ZXJzID0gTklMOwog CUxpc3RDZWxsICAgKmw7CiAJZG91YmxlCQlwYXJ0aWFsX3Jvd3MgPSAtMTsKIAogCS8qIElmIGFw cHJvcHJpYXRlLCBjb25zaWRlciBwYXJhbGxlbCBhcHBlbmQgKi8KLQlwYV9zdWJwYXRoc192YWxp ZCA9IGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQgJiYgcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsKKwlw YXJhbGxlbF9hcHBlbmRfdmFsaWQgPSBlbmFibGVfcGFyYWxsZWxfYXBwZW5kICYmIHJlbC0+Y29u c2lkZXJfcGFyYWxsZWw7CiAKIAkvKgogCSAqIEZvciBldmVyeSBub24tZHVtbXkgY2hpbGQsIHJl bWVtYmVyIHRoZSBjaGVhcGVzdCBwYXRoLiAgQWxzbywgaWRlbnRpZnkKQEAgLTE0NDMsOSArMTQ0 NCw5IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCWlmIChjaGlsZHJlbC0+cGF0aGxpc3QgIT0gTklMICYmCiAJCQljaGlsZHJl bC0+Y2hlYXBlc3RfdG90YWxfcGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKQogCQkJYWNjdW11bGF0 ZV9hcHBlbmRfc3VicGF0aChjaGlsZHJlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aCwKLQkJCQkJCQkJ CSAgJnN1YnBhdGhzLCBOVUxMKTsKKwkJCQkJCQkJCSAgJnVucGFyYW1ldGVyaXplZC5zdWJwYXRo cywgTlVMTCwgJnVucGFyYW1ldGVyaXplZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCWVs c2UKLQkJCXN1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CisJCQl1bnBhcmFtZXRlcml6ZWRfdmFsaWQg PSBmYWxzZTsKIAogCQkvKgogCQkgKiBXaGVuIHRoZSBwbGFubmVyIGlzIGNvbnNpZGVyaW5nIGNo ZWFwIHN0YXJ0dXAgcGxhbnMsIHdlJ2xsIGFsc28KQEAgLTE0NzEsMTEgKzE0NzIsMTIgQEAgYWRk X3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCS8qIGNoZWFwZXN0X3N0YXJ0dXBfcGF0aCBtdXN0IG5vdCBiZSBhIHBhcmFtZXRlcml6ZWQg cGF0aC4gKi8KIAkJCUFzc2VydChjaGVhcGVzdF9wYXRoLT5wYXJhbV9pbmZvID09IE5VTEwpOwog CQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9wYXRoLAotCQkJCQkJCQkJICAm c3RhcnR1cF9zdWJwYXRocywKLQkJCQkJCQkJCSAgTlVMTCk7CisJCQkJCQkJCQkgICZzdGFydHVw LnN1YnBhdGhzLAorCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJICAmc3RhcnR1cC5jaGlsZF9h cHBlbmRfcmVsaWRfc2V0cyk7CiAJCX0KIAkJZWxzZQotCQkJc3RhcnR1cF9zdWJwYXRoc192YWxp ZCA9IGZhbHNlOworCQkJc3RhcnR1cF92YWxpZCA9IGZhbHNlOwogCiAKIAkJLyogU2FtZSBpZGVh LCBidXQgZm9yIGEgcGFydGlhbCBwbGFuLiAqLwpAQCAtMTQ4MywxNiArMTQ4NSwxNyBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQl7CiAJCQljaGVhcGVzdF9wYXJ0aWFsX3BhdGggPSBsaW5pdGlhbChjaGlsZHJlbC0+cGFydGlh bF9wYXRobGlzdCk7CiAJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhcnRp YWxfcGF0aCwKLQkJCQkJCQkJCSAgJnBhcnRpYWxfc3VicGF0aHMsIE5VTEwpOworCQkJCQkJCQkJ ICAmcGFydGlhbF9vbmx5LnBhcnRpYWxfc3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkgICZwYXJ0 aWFsX29ubHkuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQl9CiAJCWVsc2UKLQkJCXBhcnRp YWxfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCXBhcnRpYWxfb25seV92YWxpZCA9IGZhbHNl OwogCiAJCS8qCiAJCSAqIFNhbWUgaWRlYSwgYnV0IGZvciBhIHBhcmFsbGVsIGFwcGVuZCBtaXhp bmcgcGFydGlhbCBhbmQgbm9uLXBhcnRpYWwKIAkJICogcGF0aHMuCiAJCSAqLwotCQlpZiAocGFf c3VicGF0aHNfdmFsaWQpCisJCWlmIChwYXJhbGxlbF9hcHBlbmRfdmFsaWQpCiAJCXsKIAkJCVBh dGgJICAgKm5wcGF0aCA9IE5VTEw7CiAKQEAgLTE1MDIsNyArMTUwNSw3IEBAIGFkZF9wYXRoc190 b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlpZiAo Y2hlYXBlc3RfcGFydGlhbF9wYXRoID09IE5VTEwgJiYgbnBwYXRoID09IE5VTEwpCiAJCQl7CiAJ CQkJLyogTmVpdGhlciBhIHBhcnRpYWwgbm9yIGEgcGFyYWxsZWwtc2FmZSBwYXRoPyAgRm9yZ2V0 IGl0LiAqLwotCQkJCXBhX3N1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CisJCQkJcGFyYWxsZWxfYXBw ZW5kX3ZhbGlkID0gZmFsc2U7CiAJCQl9CiAJCQllbHNlIGlmIChucHBhdGggPT0gTlVMTCB8fAog CQkJCQkgKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMICYmCkBAIC0xNTExLDggKzE1MTQs OSBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogCQkJCS8qIFBhcnRpYWwgcGF0aCBpcyBjaGVhcGVyIG9yIHRoZSBvbmx5IG9wdGlv bi4gKi8KIAkJCQlBc3NlcnQoY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpOwogCQkJCWFj Y3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAotCQkJCQkJCQkJ CSAgJnBhX3BhcnRpYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJICAmcGFfbm9ucGFydGlhbF9zdWJw YXRocyk7CisJCQkJCQkJCQkJICAmcGFyYWxsZWxfYXBwZW5kLnBhcnRpYWxfc3VicGF0aHMsCisJ CQkJCQkJCQkJICAmcGFyYWxsZWxfYXBwZW5kLnN1YnBhdGhzLAorCQkJCQkJCQkJCSAgJnBhcmFs bGVsX2FwcGVuZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJCQllbHNlCiAJCQl7 CkBAIC0xNTMwLDggKzE1MzQsOSBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCSAqIGZpZ3VyZSB0aGF0IG91dC4KIAkJCQkg Ki8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKG5wcGF0aCwKLQkJCQkJCQkJCQkgICZw YV9ub25wYXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCSAgTlVMTCk7CisJCQkJCQkJCQkJICAm cGFyYWxsZWxfYXBwZW5kLnN1YnBhdGhzLAorCQkJCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkg ICZwYXJhbGxlbF9hcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQkJfQogCQl9CiAK QEAgLTE2MDUsMjggKzE2MTAsMjggQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiB1bnBhcmFtZXRlcml6ZWQgQXBwZW5kIHBh dGggZm9yIHRoZSByZWwuICAoTm90ZTogdGhpcyBpcyBjb3JyZWN0IGV2ZW4KIAkgKiBpZiB3ZSBo YXZlIHplcm8gb3Igb25lIGxpdmUgc3VicGF0aCBkdWUgdG8gY29uc3RyYWludCBleGNsdXNpb24u KQogCSAqLwotCWlmIChzdWJwYXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBj cmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCWlmICh1bnBhcmFt ZXRlcml6ZWRfdmFsaWQpCisJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9w YXRoKHJvb3QsIHJlbCwgdW5wYXJhbWV0ZXJpemVkLAogCQkJCQkJCQkJCQkJICBOSUwsIE5VTEws IDAsIGZhbHNlLAogCQkJCQkJCQkJCQkJICAtMSkpOwogCiAJLyogYnVpbGQgYW4gQXBwZW5kUGF0 aCBmb3IgdGhlIGNoZWFwIHN0YXJ0dXAgcGF0aHMsIGlmIHZhbGlkICovCi0JaWYgKHN0YXJ0dXBf c3VicGF0aHNfdmFsaWQpCi0JCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9w YXRoKHJvb3QsIHJlbCwgc3RhcnR1cF9zdWJwYXRocywKLQkJCQkJCQkJCQkJCSAgTklMLCBOSUws IE5VTEwsIDAsIGZhbHNlLCAtMSkpOworCWlmIChzdGFydHVwX3ZhbGlkKQorCQlhZGRfcGF0aChy ZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN0YXJ0dXAsCisJCQkJ CQkJCQkJCQkgIE5JTCwgTlVMTCwgMCwgZmFsc2UsIC0xKSk7CiAKIAkvKgogCSAqIENvbnNpZGVy IGFuIGFwcGVuZCBvZiB1bm9yZGVyZWQsIHVucGFyYW1ldGVyaXplZCBwYXJ0aWFsIHBhdGhzLiAg TWFrZQogCSAqIGl0IHBhcmFsbGVsLWF3YXJlIGlmIHBvc3NpYmxlLgogCSAqLwotCWlmIChwYXJ0 aWFsX3N1YnBhdGhzX3ZhbGlkICYmIHBhcnRpYWxfc3VicGF0aHMgIT0gTklMKQorCWlmIChwYXJ0 aWFsX29ubHlfdmFsaWQgJiYgcGFydGlhbF9vbmx5LnBhcnRpYWxfc3VicGF0aHMgIT0gTklMKQog CXsKIAkJQXBwZW5kUGF0aCAqYXBwZW5kcGF0aDsKIAkJTGlzdENlbGwgICAqbGM7CiAJCWludAkJ CXBhcmFsbGVsX3dvcmtlcnMgPSAwOwogCiAJCS8qIEZpbmQgdGhlIGhpZ2hlc3QgbnVtYmVyIG9m IHdvcmtlcnMgcmVxdWVzdGVkIGZvciBhbnkgc3VicGF0aC4gKi8KLQkJZm9yZWFjaChsYywgcGFy dGlhbF9zdWJwYXRocykKKwkJZm9yZWFjaChsYywgcGFydGlhbF9vbmx5LnBhcnRpYWxfc3VicGF0 aHMpCiAJCXsKIAkJCVBhdGgJICAgKnBhdGggPSBsZmlyc3QobGMpOwogCkBAIC0xNjUzLDcgKzE2 NTgsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCQlBc3NlcnQocGFyYWxsZWxfd29ya2VycyA+IDApOwogCiAJCS8qIEdlbmVy YXRlIGEgcGFydGlhbCBhcHBlbmQgcGF0aC4gKi8KLQkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBl bmRfcGF0aChyb290LCByZWwsIE5JTCwgcGFydGlhbF9zdWJwYXRocywKKwkJYXBwZW5kcGF0aCA9 IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHBhcnRpYWxfb25seSwKIAkJCQkJCQkJCQlO SUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCQkJZW5hYmxlX3BhcmFsbGVsX2Fw cGVuZCwKIAkJCQkJCQkJCQktMSk7CkBAIC0xNjc0LDcgKzE2NzksNyBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIGEgbm9u LXBhcnRpYWwgcGF0aCB0aGF0IGlzIHN1YnN0YW50aWFsbHkgY2hlYXBlciB0aGFuIGFueSBwYXJ0 aWFsIHBhdGg7CiAJICogb3RoZXJ3aXNlLCB3ZSBzaG91bGQgdXNlIHRoZSBhcHBlbmQgcGF0aCBh ZGRlZCBpbiB0aGUgcHJldmlvdXMgc3RlcC4pCiAJICovCi0JaWYgKHBhX3N1YnBhdGhzX3ZhbGlk ICYmIHBhX25vbnBhcnRpYWxfc3VicGF0aHMgIT0gTklMKQorCWlmIChwYXJhbGxlbF9hcHBlbmRf dmFsaWQgJiYgcGFyYWxsZWxfYXBwZW5kLnN1YnBhdGhzICE9IE5JTCkKIAl7CiAJCUFwcGVuZFBh dGggKmFwcGVuZHBhdGg7CiAJCUxpc3RDZWxsICAgKmxjOwpAQCAtMTY4NCw3ICsxNjg5LDcgQEAg YWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJICogRmluZCB0aGUgaGlnaGVzdCBudW1iZXIgb2Ygd29ya2VycyByZXF1ZXN0ZWQgZm9y IGFueSBwYXJ0aWFsCiAJCSAqIHN1YnBhdGguCiAJCSAqLwotCQlmb3JlYWNoKGxjLCBwYV9wYXJ0 aWFsX3N1YnBhdGhzKQorCQlmb3JlYWNoKGxjLCBwYXJhbGxlbF9hcHBlbmQucGFydGlhbF9zdWJw YXRocykKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTE3MDIsOCAr MTcwNyw3IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsCiAJCQkJCQkJICAgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcik7 CiAJCUFzc2VydChwYXJhbGxlbF93b3JrZXJzID4gMCk7CiAKLQkJYXBwZW5kcGF0aCA9IGNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHBhX25vbnBhcnRpYWxfc3VicGF0aHMsCi0JCQkJCQkJ CQkJcGFfcGFydGlhbF9zdWJwYXRocywKKwkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0 aChyb290LCByZWwsIHBhcmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQlOSUwsIE5VTEwsIHBhcmFs bGVsX3dvcmtlcnMsIHRydWUsCiAJCQkJCQkJCQkJcGFydGlhbF9yb3dzKTsKIAkJYWRkX3BhcnRp YWxfcGF0aChyZWwsIChQYXRoICopIGFwcGVuZHBhdGgpOwpAQCAtMTcxMyw3ICsxNzE3LDcgQEAg YWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkgKiBBbHNvIGJ1aWxkIHVucGFyYW1ldGVyaXplZCBvcmRlcmVkIGFwcGVuZCBwYXRocyBi YXNlZCBvbiB0aGUgY29sbGVjdGVkCiAJICogbGlzdCBvZiBjaGlsZCBwYXRoa2V5cy4KIAkgKi8K LQlpZiAoc3VicGF0aHNfdmFsaWQpCisJaWYgKHVucGFyYW1ldGVyaXplZF92YWxpZCkKIAkJZ2Vu ZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhyb290LCByZWwsIGxpdmVfY2hpbGRyZWxzLAogCQkJ CQkJCQkJIGFsbF9jaGlsZF9wYXRoa2V5cyk7CiAKQEAgLTE3MzQsMTAgKzE3MzgsMTAgQEAgYWRk X3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAl7CiAJCVJlbGlkcwkJcmVxdWlyZWRfb3V0ZXIgPSAoUmVsaWRzKSBsZmlyc3QobCk7CiAJCUxp c3RDZWxsICAgKmxjcjsKKwkJQXBwZW5kUGF0aElucHV0IHBhcmFtZXRlcml6ZWQgPSB7MH07CisJ CWJvb2wJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSB0cnVlOwogCiAJCS8qIFNlbGVjdCB0aGUgY2hp bGQgcGF0aHMgZm9yIGFuIEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXphdGlvbiAqLwotCQlz dWJwYXRocyA9IE5JTDsKLQkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOwogCQlmb3JlYWNoKGxjciwg bGl2ZV9jaGlsZHJlbHMpCiAJCXsKIAkJCVJlbE9wdEluZm8gKmNoaWxkcmVsID0gKFJlbE9wdElu Zm8gKikgbGZpcnN0KGxjcik7CkBAIC0xNzQ2LDcgKzE3NTAsNyBAQCBhZGRfcGF0aHNfdG9fYXBw ZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKGNoaWxk cmVsLT5wYXRobGlzdCA9PSBOSUwpCiAJCQl7CiAJCQkJLyogZmFpbGVkIHRvIG1ha2UgYSBzdWl0 YWJsZSBwYXRoIGZvciB0aGlzIGNoaWxkICovCi0JCQkJc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsK KwkJCQlwYXJhbWV0ZXJpemVkX3ZhbGlkID0gZmFsc2U7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAg LTE3NTYsMTUgKzE3NjAsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlmIChzdWJwYXRoID09IE5VTEwpCiAJCQl7CiAJ CQkJLyogZmFpbGVkIHRvIG1ha2UgYSBzdWl0YWJsZSBwYXRoIGZvciB0aGlzIGNoaWxkICovCi0J CQkJc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCQlwYXJhbWV0ZXJpemVkX3ZhbGlkID0gZmFs c2U7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBh dGgsICZzdWJwYXRocywgTlVMTCk7CisJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBh dGgsICZwYXJhbWV0ZXJpemVkLnN1YnBhdGhzLCBOVUxMLAorCQkJCQkJCQkJICAmcGFyYW1ldGVy aXplZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCX0KIAotCQlpZiAoc3VicGF0aHNfdmFs aWQpCisJCWlmIChwYXJhbWV0ZXJpemVkX3ZhbGlkKQogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAq KQotCQkJCQkgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgc3VicGF0aHMsIE5JTCwKKwkJ CQkJIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHBhcmFtZXRlcml6ZWQsCiAJCQkJCQkJ CQkJTklMLCByZXF1aXJlZF9vdXRlciwgMCwgZmFsc2UsCiAJCQkJCQkJCQkJLTEpKTsKIAl9CkBA IC0xNzg1LDEzICsxNzkwLDE2IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCVBhdGgJICAgKnBhdGggPSAoUGF0aCAq KSBsZmlyc3QobCk7CiAJCQlBcHBlbmRQYXRoICphcHBlbmRwYXRoOworCQkJQXBwZW5kUGF0aElu cHV0IGFwcGVuZCA9IHswfTsKKworCQkJYXBwZW5kLnBhcnRpYWxfc3VicGF0aHMgPSBsaXN0X21h a2UxKHBhdGgpOworCQkJYXBwZW5kLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gbGlzdF9tYWtl MShyZWwtPnJlbGlkcyk7CiAKIAkJCS8qIHNraXAgcGF0aHMgd2l0aCBubyBwYXRoa2V5cy4gKi8K IAkJCWlmIChwYXRoLT5wYXRoa2V5cyA9PSBOSUwpCiAJCQkJY29udGludWU7CiAKLQkJCWFwcGVu ZHBhdGggPSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBOSUwsIGxpc3RfbWFrZTEocGF0 aCksCi0JCQkJCQkJCQkJCU5JTCwgTlVMTCwKKwkJCWFwcGVuZHBhdGggPSBjcmVhdGVfYXBwZW5k X3BhdGgocm9vdCwgcmVsLCBhcHBlbmQsIE5JTCwgTlVMTCwKIAkJCQkJCQkJCQkJcGF0aC0+cGFy YWxsZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQkJcGFydGlhbF9yb3dzKTsKIAkJCWFkZF9w YXJ0aWFsX3BhdGgocmVsLCAoUGF0aCAqKSBhcHBlbmRwYXRoKTsKQEAgLTE4NzMsOSArMTg4MSw5 IEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAlmb3JlYWNoKGxjcCwgYWxsX2NoaWxkX3BhdGhrZXlzKQogCXsKIAkJTGlz dAkgICAqcGF0aGtleXMgPSAoTGlzdCAqKSBsZmlyc3QobGNwKTsKLQkJTGlzdAkgICAqc3RhcnR1 cF9zdWJwYXRocyA9IE5JTDsKLQkJTGlzdAkgICAqdG90YWxfc3VicGF0aHMgPSBOSUw7Ci0JCUxp c3QJICAgKmZyYWN0aW9uYWxfc3VicGF0aHMgPSBOSUw7CisJCUFwcGVuZFBhdGhJbnB1dCBzdGFy dHVwID0gezB9OworCQlBcHBlbmRQYXRoSW5wdXQgdG90YWwgPSB7MH07CisJCUFwcGVuZFBhdGhJ bnB1dCBmcmFjdGlvbmFsID0gezB9OwogCQlib29sCQlzdGFydHVwX25lcV90b3RhbCA9IGZhbHNl OwogCQlib29sCQlmcmFjdGlvbl9uZXFfdG90YWwgPSBmYWxzZTsKIAkJYm9vbAkJbWF0Y2hfcGFy dGl0aW9uX29yZGVyOwpAQCAtMjAzOCwxNiArMjA0NiwyMyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBw ZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICoganVz dCBhIHNpbmdsZSBzdWJwYXRoIChhbmQgaGVuY2UgYXJlbid0IGRvaW5nIGFueXRoaW5nCiAJCQkJ ICogdXNlZnVsKS4KIAkJCQkgKi8KLQkJCQljaGVhcGVzdF9zdGFydHVwID0gZ2V0X3NpbmdsZXRv bl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9zdGFydHVwKTsKLQkJCQljaGVhcGVzdF90b3RhbCA9 IGdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfdG90YWwpOworCQkJCWNoZWFw ZXN0X3N0YXJ0dXAgPQorCQkJCQlnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0 X3N0YXJ0dXAsCisJCQkJCQkJCQkJCQkgJnN0YXJ0dXAuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMp OworCQkJCWNoZWFwZXN0X3RvdGFsID0KKwkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0 aChjaGVhcGVzdF90b3RhbCwKKwkJCQkJCQkJCQkJCSAmdG90YWwuY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMpOwogCi0JCQkJc3RhcnR1cF9zdWJwYXRocyA9IGxhcHBlbmQoc3RhcnR1cF9zdWJwYXRo cywgY2hlYXBlc3Rfc3RhcnR1cCk7Ci0JCQkJdG90YWxfc3VicGF0aHMgPSBsYXBwZW5kKHRvdGFs X3N1YnBhdGhzLCBjaGVhcGVzdF90b3RhbCk7CisJCQkJc3RhcnR1cC5zdWJwYXRocyA9IGxhcHBl bmQoc3RhcnR1cC5zdWJwYXRocywgY2hlYXBlc3Rfc3RhcnR1cCk7CisJCQkJdG90YWwuc3VicGF0 aHMgPSBsYXBwZW5kKHRvdGFsLnN1YnBhdGhzLCBjaGVhcGVzdF90b3RhbCk7CiAKIAkJCQlpZiAo Y2hlYXBlc3RfZnJhY3Rpb25hbCkKIAkJCQl7Ci0JCQkJCWNoZWFwZXN0X2ZyYWN0aW9uYWwgPSBn ZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X2ZyYWN0aW9uYWwpOwotCQkJCQlm cmFjdGlvbmFsX3N1YnBhdGhzID0gbGFwcGVuZChmcmFjdGlvbmFsX3N1YnBhdGhzLCBjaGVhcGVz dF9mcmFjdGlvbmFsKTsKKwkJCQkJY2hlYXBlc3RfZnJhY3Rpb25hbCA9CisJCQkJCQlnZXRfc2lu Z2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X2ZyYWN0aW9uYWwsCisJCQkJCQkJCQkJCQkJ ICZmcmFjdGlvbmFsLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKKwkJCQkJZnJhY3Rpb25hbC5z dWJwYXRocyA9CisJCQkJCQlsYXBwZW5kKGZyYWN0aW9uYWwuc3VicGF0aHMsIGNoZWFwZXN0X2Zy YWN0aW9uYWwpOwogCQkJCX0KIAkJCX0KIAkJCWVsc2UKQEAgLTIwNTcsMTMgKzIwNzIsMTYgQEAg Z2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogCQkJCSAqIGNoaWxkIHBhdGhzIGZvciB0aGUgTWVyZ2VBcHBlbmQuCiAJCQkJICov CiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9zdGFydHVwLAotCQkJCQkJ CQkJCSAgJnN0YXJ0dXBfc3VicGF0aHMsIE5VTEwpOworCQkJCQkJCQkJCSAgJnN0YXJ0dXAuc3Vi cGF0aHMsIE5VTEwsCisJCQkJCQkJCQkJICAmc3RhcnR1cC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0 cyk7CiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCwKLQkJCQkJ CQkJCQkgICZ0b3RhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmdG90YWwuc3VicGF0 aHMsIE5VTEwsCisJCQkJCQkJCQkJICAmdG90YWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwog CiAJCQkJaWYgKGNoZWFwZXN0X2ZyYWN0aW9uYWwpCiAJCQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1 YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCwKLQkJCQkJCQkJCQkJICAmZnJhY3Rpb25hbF9zdWJw YXRocywgTlVMTCk7CisJCQkJCQkJCQkJCSAgJmZyYWN0aW9uYWwuc3VicGF0aHMsIE5VTEwsCisJ CQkJCQkJCQkJCSAgJmZyYWN0aW9uYWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQkJfQog CQl9CiAKQEAgLTIwNzMsOCArMjA5MSw3IEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCS8qIFdlIG9ubHkgbmVlZCBB cHBlbmQgKi8KIAkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJv b3QsCiAJCQkJCQkJCQkJCQkJICByZWwsCi0JCQkJCQkJCQkJCQkJICBzdGFydHVwX3N1YnBhdGhz LAotCQkJCQkJCQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCSAgc3RhcnR1cCwKIAkJCQkJCQkJ CQkJCQkgIHBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJCQkgIDAs CkBAIC0yMDgzLDE5ICsyMTAwLDE3IEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlmIChzdGFydHVwX25lcV90b3Rh bCkKIAkJCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LAog CQkJCQkJCQkJCQkJCQkgIHJlbCwKLQkJCQkJCQkJCQkJCQkJICB0b3RhbF9zdWJwYXRocywKLQkJ CQkJCQkJCQkJCQkJICBOSUwsCisJCQkJCQkJCQkJCQkJCSAgdG90YWwsCiAJCQkJCQkJCQkJCQkJ CSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJCQkJICAwLAog CQkJCQkJCQkJCQkJCQkgIGZhbHNlLAogCQkJCQkJCQkJCQkJCQkgIC0xKSk7CiAKLQkJCWlmIChm cmFjdGlvbmFsX3N1YnBhdGhzICYmIGZyYWN0aW9uX25lcV90b3RhbCkKKwkJCWlmIChmcmFjdGlv bmFsLnN1YnBhdGhzICYmIGZyYWN0aW9uX25lcV90b3RhbCkKIAkJCQlhZGRfcGF0aChyZWwsIChQ YXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJCQkgIHJlbCwKLQkJ CQkJCQkJCQkJCQkJICBmcmFjdGlvbmFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJCQkgIE5JTCwK KwkJCQkJCQkJCQkJCQkJICBmcmFjdGlvbmFsLAogCQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAog CQkJCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJCQkJCQkJCSAgMCwKQEAgLTIxMDcsMjAgKzIx MjIsMjMgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsLAogCQkJLyogV2UgbmVlZCBNZXJnZUFwcGVuZCAqLwogCQkJYWRkX3Bh dGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJ CQkJCQkJCXJlbCwKLQkJCQkJCQkJCQkJCQkJCXN0YXJ0dXBfc3VicGF0aHMsCisJCQkJCQkJCQkJ CQkJCQlzdGFydHVwLnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJc3RhcnR1cC5jaGlsZF9hcHBl bmRfcmVsaWRfc2V0cywKIAkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkJ TlVMTCkpOwogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkJCQkJcmVs LAotCQkJCQkJCQkJCQkJCQkJCXRvdGFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJCXRvdGFs LnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJCXRvdGFsLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz LAogCQkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkJCU5VTEwpKTsKIAot CQkJaWYgKGZyYWN0aW9uYWxfc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQorCQkJaWYg KGZyYWN0aW9uYWwuc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRo KHJlbCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJ CQkJCQkJcmVsLAotCQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWxfc3VicGF0aHMsCisJCQkJCQkJ CQkJCQkJCQkJZnJhY3Rpb25hbC5zdWJwYXRocywKKwkJCQkJCQkJCQkJCQkJCQlmcmFjdGlvbmFs LmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJ CQkJCQkJCQkJCQkJCU5VTEwpKTsKIAkJfQpAQCAtMjIyMyw3ICsyMjQxLDggQEAgZ2V0X2NoZWFw ZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogICogcGF0aHMpLgogICovCiBzdGF0aWMgdm9pZAotYWNjdW11bGF0ZV9hcHBlbmRf c3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBh dGhzKQorYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0 aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJICBMaXN0ICoqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMpCiB7CiAJaWYgKElzQShwYXRoLCBBcHBlbmRQYXRoKSkKIAl7CkBAIC0yMjMy LDYgKzIyNTEsOCBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3Qg KipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlmICghYXBhdGgtPnBhdGgu cGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aCA9PSAwKQogCQl7CiAJ CQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRoLT5zdWJwYXRocyk7CisJ CQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZWxz ZSBpZiAoc3BlY2lhbF9zdWJwYXRocyAhPSBOVUxMKQpAQCAtMjI0Niw2ICsyMjY3LDggQEAgYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3Qg KipzcGVjaWFsX3N1YnBhdGhzKQogCQkJCQkJCQkJCQkJICBhcGF0aC0+Zmlyc3RfcGFydGlhbF9w YXRoKTsKIAkJCSpzcGVjaWFsX3N1YnBhdGhzID0gbGlzdF9jb25jYXQoKnNwZWNpYWxfc3VicGF0 aHMsCiAJCQkJCQkJCQkJCW5ld19zcGVjaWFsX3N1YnBhdGhzKTsKKwkJCSpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgt PnBhcmVudC0+cmVsaWRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTIyNTQsNiArMjI3Nyw4 IEBAIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhz LCBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocykKIAkJTWVyZ2VBcHBlbmRQYXRoICptcGF0aCA9IChN ZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3Vi cGF0aHMsIG1wYXRoLT5zdWJwYXRocyk7CisJCSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJ CQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+cGFyZW50LT5yZWxpZHMp OwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjY1LDEwICsyMjkwLDE1IEBAIGFjY3VtdWxhdGVfYXBw ZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhzLCBMaXN0ICoqc3BlY2lhbF9z dWJwYXRocykKICAqCQlSZXR1cm5zIHRoZSBzaW5nbGUgc3VicGF0aCBvZiBhbiBBcHBlbmQvTWVy Z2VBcHBlbmQsIG9yIGp1c3QKICAqCQlyZXR1cm4gJ3BhdGgnIGlmIGl0J3Mgbm90IGEgc2luZ2xl IHN1Yi1wYXRoIEFwcGVuZC9NZXJnZUFwcGVuZC4KICAqCisgKiBBcyBhIHNpZGUgZWZmZWN0LCB3 aGVuZXZlciB3ZSByZXR1cm4gYSBzaW5nbGUgc3VicGF0aCByYXRoZXIgdGhhbiB0aGUKKyAqIG9y aWdpbmFsIHBhdGgsIGFkZCB0aGUgcmVsaWQgc2V0IGZvciB0aGUgb3JpZ2luYWwgcGF0aCB0bwor ICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHNvIHRoYXQgdGhvc2UgcmVsaWRzIGRvbid0IGVu dGlyZWx5IGRpc2FwcGVhcgorICogZnJvbSB0aGUgZmluYWwgcGxhbi4KKyAqCiAgKiBOb3RlOiAn cGF0aCcgbXVzdCBub3QgYmUgYSBwYXJhbGxlbC1hd2FyZSBwYXRoLgogICovCiBzdGF0aWMgUGF0 aCAqCi1nZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgpCitnZXRfc2luZ2xl dG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipjaGlsZF9hcHBlbmRfcmVsaWRf c2V0cykKIHsKIAlBc3NlcnQoIXBhdGgtPnBhcmFsbGVsX2F3YXJlKTsKIApAQCAtMjI3NywxNCAr MjMwNywyMiBAQCBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgpCiAJCUFw cGVuZFBhdGggKmFwYXRoID0gKEFwcGVuZFBhdGggKikgcGF0aDsKIAogCQlpZiAobGlzdF9sZW5n dGgoYXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQt PnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwoYXBhdGgtPnN1YnBhdGhzKTsK KwkJfQogCX0KIAllbHNlIGlmIChJc0EocGF0aCwgTWVyZ2VBcHBlbmRQYXRoKSkKIAl7CiAJCU1l cmdlQXBwZW5kUGF0aCAqbXBhdGggPSAoTWVyZ2VBcHBlbmRQYXRoICopIHBhdGg7CiAKIAkJaWYg KGxpc3RfbGVuZ3RoKG1wYXRoLT5zdWJwYXRocykgPT0gMSkKKwkJeworCQkJKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0 aC0+cGFyZW50LT5yZWxpZHMpOwogCQkJcmV0dXJuIChQYXRoICopIGxpbml0aWFsKG1wYXRoLT5z dWJwYXRocyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gcGF0aDsKQEAgLTIzMDQsNiArMjM0Miw4IEBA IGdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKIHN0YXRpYyB2b2lkCiBz ZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJlbE9wdEluZm8gKnJlbCkKIHsKKwlBcHBlbmRQYXRoSW5w dXQgaW4gPSB7MH07CisKIAkvKiBTZXQgZHVtbXkgc2l6ZSBlc3RpbWF0ZXMgLS0tIHdlIGxlYXZl IGF0dHJfd2lkdGhzW10gYXMgemVyb2VzICovCiAJcmVsLT5yb3dzID0gMDsKIAlyZWwtPnJlbHRh cmdldC0+d2lkdGggPSAwOwpAQCAtMjMxMyw3ICsyMzUzLDcgQEAgc2V0X2R1bW15X3JlbF9wYXRo bGlzdChSZWxPcHRJbmZvICpyZWwpCiAJcmVsLT5wYXJ0aWFsX3BhdGhsaXN0ID0gTklMOwogCiAJ LyogU2V0IHVwIHRoZSBkdW1teSBwYXRoICovCi0JYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVh dGVfYXBwZW5kX3BhdGgoTlVMTCwgcmVsLCBOSUwsIE5JTCwKKwlhZGRfcGF0aChyZWwsIChQYXRo ICopIGNyZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIGluLAogCQkJCQkJCQkJCQkgIE5JTCwg cmVsLT5sYXRlcmFsX3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBmYWxzZSwgLTEpKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKaW5kZXggMjYxNTY1MWMwNzMuLjQ0M2UyZGNh N2MwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTE1MTMsNiArMTUx Myw3IEBAIHZvaWQKIG1hcmtfZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCkKIHsKIAlNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQ7CisJQXBwZW5kUGF0aElucHV0IGluID0gezB9OwogCiAJLyogQWxy ZWFkeSBtYXJrZWQ/ICovCiAJaWYgKGlzX2R1bW15X3JlbChyZWwpKQpAQCAtMTUyOSw3ICsxNTMw LDcgQEAgbWFya19kdW1teV9yZWwoUmVsT3B0SW5mbyAqcmVsKQogCXJlbC0+cGFydGlhbF9wYXRo bGlzdCA9IE5JTDsKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0aCAqLwotCWFkZF9wYXRoKHJl bCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwgTklMLCBOSUwsCisJYWRk X3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgoTlVMTCwgcmVsLCBpbiwKIAkJ CQkJCQkJCQkJICBOSUwsIHJlbC0+bGF0ZXJhbF9yZWxpZHMsCiAJCQkJCQkJCQkJCSAgMCwgZmFs c2UsIC0xKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0 ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCBh ZjQxY2E2OTkyOS4uNGFjMWZiMWU4ZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVh dGVwbGFuLmMKQEAgLTEyNjUsNiArMTI2NSw3IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVy SW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJcGxhbi0+cGxh bi5sZWZ0dHJlZSA9IE5VTEw7CiAJcGxhbi0+cGxhbi5yaWdodHRyZWUgPSBOVUxMOwogCXBsYW4t PmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRzOworCXBsYW4tPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz ID0gYmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCWlmIChwYXRoa2V5cyAh PSBOSUwpCiAJewpAQCAtMTQ3Nyw2ICsxNDc4LDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFu KFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlwbGFuLT5s ZWZ0dHJlZSA9IE5VTEw7CiAJcGxhbi0+cmlnaHR0cmVlID0gTlVMTDsKIAlub2RlLT5hcHByZWxp ZHMgPSByZWwtPnJlbGlkczsKKwlub2RlLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3Rf cGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAKIAkvKgogCSAqIENvbXB1dGUgc29ydCBj b2x1bW4gaW5mbywgYW5kIGFkanVzdCBNZXJnZUFwcGVuZCdzIHRsaXN0IGFzIG5lZWRlZC4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCAxMjRiNTZiNTIxYS4uNWI3OGJkNGZm MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTQwMTIsNyArNDAxMiw3 IEBAIGNyZWF0ZV9kZWdlbmVyYXRlX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCSAqIG1pZ2h0IGdldCBiZXR3ZWVuIDAgYW5kIE4gb3V0 cHV0IHJvd3MuIE9mZmhhbmQgSSB0aGluayB0aGF0J3MKIAkJICogZGVzaXJlZC4pCiAJCSAqLwot CQlMaXN0CSAgICpwYXRocyA9IE5JTDsKKwkJQXBwZW5kUGF0aElucHV0IGFwcGVuZCA9IHswfTsK IAogCQl3aGlsZSAoLS1ucm93cyA+PSAwKQogCQl7CkBAIC00MDIwLDEzICs0MDIwLDEyIEBAIGNy ZWF0ZV9kZWdlbmVyYXRlX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICppbnB1dF9yZWwsCiAJCQkJY3JlYXRlX2dyb3VwX3Jlc3VsdF9wYXRoKHJvb3QsIGdyb3Vw ZWRfcmVsLAogCQkJCQkJCQkJCSBncm91cGVkX3JlbC0+cmVsdGFyZ2V0LAogCQkJCQkJCQkJCSAo TGlzdCAqKSBwYXJzZS0+aGF2aW5nUXVhbCk7Ci0JCQlwYXRocyA9IGxhcHBlbmQocGF0aHMsIHBh dGgpOworCQkJYXBwZW5kLnN1YnBhdGhzID0gbGFwcGVuZChhcHBlbmQuc3VicGF0aHMsIHBhdGgp OwogCQl9CiAJCXBhdGggPSAoUGF0aCAqKQogCQkJY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJ CQkJCQkJICAgZ3JvdXBlZF9yZWwsCi0JCQkJCQkJICAgcGF0aHMsCi0JCQkJCQkJICAgTklMLAor CQkJCQkJCSAgIGFwcGVuZCwKIAkJCQkJCQkgICBOSUwsCiAJCQkJCQkJICAgTlVMTCwKIAkJCQkJ CQkgICAwLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9u LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwppbmRleCA3OGM5NWMz NmRkNS4uZjUwYzI5NmUzZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5j CkBAIC02OTYsOSArNjk2LDkgQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3Rt dCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCUxpc3RDZWxsICAgKmxjOwogCUxpc3RDZWxsICAg KmxjMjsKIAlMaXN0Q2VsbCAgICpsYzM7Ci0JTGlzdAkgICAqY2hlYXBlc3RfcGF0aGxpc3QgPSBO SUw7Ci0JTGlzdAkgICAqb3JkZXJlZF9wYXRobGlzdCA9IE5JTDsKLQlMaXN0CSAgICpwYXJ0aWFs X3BhdGhsaXN0ID0gTklMOworCUFwcGVuZFBhdGhJbnB1dCBjaGVhcGVzdCA9IHswfTsKKwlBcHBl bmRQYXRoSW5wdXQgb3JkZXJlZCA9IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQgcGFydGlhbCA9IHsw fTsKIAlib29sCQlwYXJ0aWFsX3BhdGhzX3ZhbGlkID0gdHJ1ZTsKIAlib29sCQljb25zaWRlcl9w YXJhbGxlbCA9IHRydWU7CiAJTGlzdAkgICAqcmVsbGlzdDsKQEAgLTc4Myw3ICs3ODMsNyBAQCBn ZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJv b3QsCiAJCWlmIChpc19kdW1teV9yZWwocmVsKSkKIAkJCWNvbnRpbnVlOwogCi0JCWNoZWFwZXN0 X3BhdGhsaXN0ID0gbGFwcGVuZChjaGVhcGVzdF9wYXRobGlzdCwKKwkJY2hlYXBlc3Quc3VicGF0 aHMgPSBsYXBwZW5kKGNoZWFwZXN0LnN1YnBhdGhzLAogCQkJCQkJCQkJcmVsLT5jaGVhcGVzdF90 b3RhbF9wYXRoKTsKIAogCQlpZiAodHJ5X3NvcnRlZCkKQEAgLTc5NSw3ICs3OTUsNyBAQCBnZW5l cmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCQkJCSAgZmFsc2UpOwogCiAJCQlpZiAob3JkZXJlZF9wYXRoICE9IE5VTEwp Ci0JCQkJb3JkZXJlZF9wYXRobGlzdCA9IGxhcHBlbmQob3JkZXJlZF9wYXRobGlzdCwgb3JkZXJl ZF9wYXRoKTsKKwkJCQlvcmRlcmVkLnN1YnBhdGhzID0gbGFwcGVuZChvcmRlcmVkLnN1YnBhdGhz LCBvcmRlcmVkX3BhdGgpOwogCQkJZWxzZQogCQkJewogCQkJCS8qCkBAIC04MTgsMjAgKzgxOCwy MCBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQllbHNlIGlmIChyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPT0gTklMKQogCQkJ CXBhcnRpYWxfcGF0aHNfdmFsaWQgPSBmYWxzZTsKIAkJCWVsc2UKLQkJCQlwYXJ0aWFsX3BhdGhs aXN0ID0gbGFwcGVuZChwYXJ0aWFsX3BhdGhsaXN0LAotCQkJCQkJCQkJCSAgIGxpbml0aWFsKHJl bC0+cGFydGlhbF9wYXRobGlzdCkpOworCQkJCXBhcnRpYWwucGFydGlhbF9zdWJwYXRocyA9IGxh cHBlbmQocGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJICAgbGluaXRpYWwo cmVsLT5wYXJ0aWFsX3BhdGhsaXN0KSk7CiAJCX0KIAl9CiAKIAkvKiBCdWlsZCByZXN1bHQgcmVs YXRpb24uICovCiAJcmVzdWx0X3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LCBVUFBFUlJFTF9T RVRPUCwgcmVsaWRzKTsKIAlyZXN1bHRfcmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVfc2V0b3BfcGF0 aHRhcmdldChyb290LCB0bGlzdCwKLQkJCQkJCQkJCQkJCQljaGVhcGVzdF9wYXRobGlzdCk7CisJ CQkJCQkJCQkJCQkJY2hlYXBlc3Quc3VicGF0aHMpOwogCXJlc3VsdF9yZWwtPmNvbnNpZGVyX3Bh cmFsbGVsID0gY29uc2lkZXJfcGFyYWxsZWw7CiAJcmVzdWx0X3JlbC0+Y29uc2lkZXJfc3RhcnR1 cCA9IChyb290LT50dXBsZV9mcmFjdGlvbiA+IDApOwogCiAJLyogSWYgYWxsIFVOSU9OIGNoaWxk cmVuIHdlcmUgZHVtbXkgcmVscywgbWFrZSB0aGUgcmVzdWx0aW5nIHJlbCBkdW1teSAqLwotCWlm IChjaGVhcGVzdF9wYXRobGlzdCA9PSBOSUwpCisJaWYgKGNoZWFwZXN0LnN1YnBhdGhzID09IE5J TCkKIAl7CiAJCW1hcmtfZHVtbXlfcmVsKHJlc3VsdF9yZWwpOwogCkBAIC04NDIsOCArODQyLDgg QEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZv ICpyb290LAogCSAqIEFwcGVuZCB0aGUgY2hpbGQgcmVzdWx0cyB0b2dldGhlciB1c2luZyB0aGUg Y2hlYXBlc3QgcGF0aHMgZnJvbSBlYWNoCiAJICogdW5pb24gY2hpbGQuCiAJICovCi0JYXBhdGgg PSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgY2hlYXBlc3Rf cGF0aGxpc3QsCi0JCQkJCQkJCQkJTklMLCBOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CisJYXBh dGggPSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgY2hlYXBl c3QsCisJCQkJCQkJCQkJTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpOwogCiAJLyoKIAkgKiBFc3Rp bWF0ZSBudW1iZXIgb2YgZ3JvdXBzLiAgRm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSB0aGUgb3V0cHV0 IGlzIHVuaXF1ZQpAQCAtODYyLDcgKzg2Miw3IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9w ZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJaW50CQkJcGFyYWxsZWxfd29y a2VycyA9IDA7CiAKIAkJLyogRmluZCB0aGUgaGlnaGVzdCBudW1iZXIgb2Ygd29ya2VycyByZXF1 ZXN0ZWQgZm9yIGFueSBzdWJwYXRoLiAqLwotCQlmb3JlYWNoKGxjLCBwYXJ0aWFsX3BhdGhsaXN0 KQorCQlmb3JlYWNoKGxjLCBwYXJ0aWFsLnBhcnRpYWxfc3VicGF0aHMpCiAJCXsKIAkJCVBhdGgJ ICAgKnN1YnBhdGggPSBsZmlyc3QobGMpOwogCkBAIC04ODEsMTQgKzg4MSwxNCBAQCBnZW5lcmF0 ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJ CWlmIChlbmFibGVfcGFyYWxsZWxfYXBwZW5kKQogCQl7CiAJCQlwYXJhbGxlbF93b3JrZXJzID0g TWF4KHBhcmFsbGVsX3dvcmtlcnMsCi0JCQkJCQkJCSAgIHBnX2xlZnRtb3N0X29uZV9wb3MzMihs aXN0X2xlbmd0aChwYXJ0aWFsX3BhdGhsaXN0KSkgKyAxKTsKKwkJCQkJCQkJICAgcGdfbGVmdG1v c3Rfb25lX3BvczMyKGxpc3RfbGVuZ3RoKHBhcnRpYWwucGFydGlhbF9zdWJwYXRocykpICsgMSk7 CiAJCQlwYXJhbGxlbF93b3JrZXJzID0gTWluKHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCSAg IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIpOwogCQl9CiAJCUFzc2VydChwYXJhbGxl bF93b3JrZXJzID4gMCk7CiAKIAkJcGFwYXRoID0gKFBhdGggKikKLQkJCWNyZWF0ZV9hcHBlbmRf cGF0aChyb290LCByZXN1bHRfcmVsLCBOSUwsIHBhcnRpYWxfcGF0aGxpc3QsCisJCQljcmVhdGVf YXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgcGFydGlhbCwKIAkJCQkJCQkgICBOSUwsIE5V TEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJICAgZW5hYmxlX3BhcmFsbGVsX2FwcGVuZCwg LTEpOwogCQlncGF0aCA9IChQYXRoICopCkBAIC05MDEsNyArOTAxLDcgQEAgZ2VuZXJhdGVfdW5p b25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQlkb3Vi bGUJCWROdW1Hcm91cHM7CiAJCWJvb2wJCWNhbl9zb3J0ID0gZ3JvdXBpbmdfaXNfc29ydGFibGUo Z3JvdXBMaXN0KTsKIAkJYm9vbAkJY2FuX2hhc2ggPSBncm91cGluZ19pc19oYXNoYWJsZShncm91 cExpc3QpOwotCQlQYXRoCSAgICpmaXJzdF9wYXRoID0gbGluaXRpYWwoY2hlYXBlc3RfcGF0aGxp c3QpOworCQlQYXRoCSAgICpmaXJzdF9wYXRoID0gbGluaXRpYWwoY2hlYXBlc3Quc3VicGF0aHMp OwogCiAJCS8qCiAJCSAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgVU5JT04gb3V0cHV0IHJvd3Mu ICBJbiB0aGUgY2FzZSB3aGVuIG9ubHkgYQpAQCAtOTExLDcgKzkxMSw3IEBAIGdlbmVyYXRlX3Vu aW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJICog Y29udGFpbiBWYXJzIHdpdGggdmFybm89PTAsIHdoaWNoIGVzdGltYXRlX251bV9ncm91cHMoKSB3 b3VsZG4ndAogCQkgKiBsaWtlLgogCQkgKi8KLQkJaWYgKGxpc3RfbGVuZ3RoKGNoZWFwZXN0X3Bh dGhsaXN0KSA9PSAxICYmCisJCWlmIChsaXN0X2xlbmd0aChjaGVhcGVzdC5zdWJwYXRocykgPT0g MSAmJgogCQkJZmlyc3RfcGF0aC0+cGFyZW50LT5yZWxvcHRraW5kICE9IFJFTE9QVF9VUFBFUl9S RUwpCiAJCXsKIAkJCWROdW1Hcm91cHMgPSBlc3RpbWF0ZV9udW1fZ3JvdXBzKHJvb3QsCkBAIC0x MDE3LDcgKzEwMTcsOCBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpv cCwgUGxhbm5lckluZm8gKnJvb3QsCiAKIAkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbCwKLQkJCQkJCQkJCQkJ CQkgb3JkZXJlZF9wYXRobGlzdCwKKwkJCQkJCQkJCQkJCQkgb3JkZXJlZC5zdWJwYXRocywKKwkJ CQkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCQkJCSB1bmlvbl9wYXRoa2V5cywKIAkJCQkJCQkJ CQkJCQkgTlVMTCk7CiAKQEAgLTEyMTYsNiArMTIxNyw5IEBAIGdlbmVyYXRlX25vbnVuaW9uX3Bh dGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCWlmIChvcC0+ YWxsKQogCQkJewogCQkJCVBhdGgJICAgKmFwYXRoOworCQkJCUFwcGVuZFBhdGhJbnB1dCBhcHBl bmQgPSB7MH07CisKKwkJCQlhcHBlbmQuc3VicGF0aHMgPSBsaXN0X21ha2UxKGxwYXRoKTsKIAog CQkJCS8qCiAJCQkJICogRVhDRVBUIEFMTDogSWYgdGhlIHJpZ2h0LWhhbmQgaW5wdXQgaXMgZHVt bXkgdGhlbiB3ZSBjYW4KQEAgLTEyMjQsOCArMTIyOCw5IEBAIGdlbmVyYXRlX25vbnVuaW9uX3Bh dGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkgKiBiZXR3 ZWVuIHRoZSBzZXQgb3AgdGFyZ2V0bGlzdCBhbmQgdGhlIHRhcmdldGxpc3Qgb2YgdGhlCiAJCQkJ ICogbGVmdCBpbnB1dC4gIFRoZSBBcHBlbmQgd2lsbCBiZSByZW1vdmVkIGluIHNldHJlZnMuYy4K IAkJCQkgKi8KLQkJCQlhcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCBy ZXN1bHRfcmVsLCBsaXN0X21ha2UxKGxwYXRoKSwKLQkJCQkJCQkJCQkJCQlOSUwsIE5JTCwgTlVM TCwgMCwgZmFsc2UsIC0xKTsKKwkJCQlhcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0 aChyb290LCByZXN1bHRfcmVsLAorCQkJCQkJCQkJCQkJCWFwcGVuZCwgTklMLCBOVUxMLCAwLAor CQkJCQkJCQkJCQkJCWZhbHNlLCAtMSk7CiAKIAkJCQlhZGRfcGF0aChyZXN1bHRfcmVsLCBhcGF0 aCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDJlOWJlY2YzMTE2 Li5kYTMwNmNkMzllYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0 aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC0x MzAwLDcgKzEzMDAsNyBAQCBjcmVhdGVfdGlkcmFuZ2VzY2FuX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIEFwcGVuZFBhdGggKgogY3JlYXRlX2FwcGVuZF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCQkJCSAgIFJlbE9wdEluZm8gKnJlbCwKLQkJCQkgICBMaXN0ICpz dWJwYXRocywgTGlzdCAqcGFydGlhbF9zdWJwYXRocywKKwkJCQkgICBBcHBlbmRQYXRoSW5wdXQg aW5wdXQsCiAJCQkJICAgTGlzdCAqcGF0aGtleXMsIFJlbGlkcyByZXF1aXJlZF9vdXRlciwKIAkJ CQkgICBpbnQgcGFyYWxsZWxfd29ya2VycywgYm9vbCBwYXJhbGxlbF9hd2FyZSwKIAkJCQkgICBk b3VibGUgcm93cykKQEAgLTEzMTAsNiArMTMxMCw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAogCUFzc2VydCghcGFyYWxsZWxfYXdhcmUgfHwgcGFyYWxsZWxfd29y a2VycyA+IDApOwogCisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gaW5wdXQu Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0Fw cGVuZDsKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0 aHRhcmdldCA9IHJlbC0+cmVsdGFyZ2V0OwpAQCAtMTMyNSw3ICsxMzI2LDcgQEAgY3JlYXRlX2Fw cGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG9uIHRoZSBzaW1wbGVyIGdldF9hcHBl bmRyZWxfcGFyYW1wYXRoaW5mby4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gZG9pbmcKIAkgKiB0aGUg bW9yZSBleHBlbnNpdmUgdGhpbmcgZm9yIGEgZHVtbXkgcGF0aCwgZWl0aGVyLgogCSAqLwotCWlm IChyZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0JBU0VSRUwgJiYgcm9vdCAmJiBzdWJwYXRocyAh PSBOSUwpCisJaWYgKHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCAmJiByb290ICYm IGlucHV0LnN1YnBhdGhzICE9IE5JTCkKIAkJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IGdl dF9iYXNlcmVsX3BhcmFtcGF0aGluZm8ocm9vdCwKIAkJCQkJCQkJCQkJCQkJCSAgcmVsLAogCQkJ CQkJCQkJCQkJCQkJICByZXF1aXJlZF9vdXRlcik7CkBAIC0xMzU2LDExICsxMzU3LDExIEBAIGNy ZWF0ZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJICovCiAJCUFzc2VydChwYXRo a2V5cyA9PSBOSUwpOwogCi0JCWxpc3Rfc29ydChzdWJwYXRocywgYXBwZW5kX3RvdGFsX2Nvc3Rf Y29tcGFyZSk7Ci0JCWxpc3Rfc29ydChwYXJ0aWFsX3N1YnBhdGhzLCBhcHBlbmRfc3RhcnR1cF9j b3N0X2NvbXBhcmUpOworCQlsaXN0X3NvcnQoaW5wdXQuc3VicGF0aHMsIGFwcGVuZF90b3RhbF9j b3N0X2NvbXBhcmUpOworCQlsaXN0X3NvcnQoaW5wdXQucGFydGlhbF9zdWJwYXRocywgYXBwZW5k X3N0YXJ0dXBfY29zdF9jb21wYXJlKTsKIAl9Ci0JcGF0aG5vZGUtPmZpcnN0X3BhcnRpYWxfcGF0 aCA9IGxpc3RfbGVuZ3RoKHN1YnBhdGhzKTsKLQlwYXRobm9kZS0+c3VicGF0aHMgPSBsaXN0X2Nv bmNhdChzdWJwYXRocywgcGFydGlhbF9zdWJwYXRocyk7CisJcGF0aG5vZGUtPmZpcnN0X3BhcnRp YWxfcGF0aCA9IGxpc3RfbGVuZ3RoKGlucHV0LnN1YnBhdGhzKTsKKwlwYXRobm9kZS0+c3VicGF0 aHMgPSBsaXN0X2NvbmNhdChpbnB1dC5zdWJwYXRocywgaW5wdXQucGFydGlhbF9zdWJwYXRocyk7 CiAKIAkvKgogCSAqIEFwcGx5IHF1ZXJ5LXdpZGUgTElNSVQgaWYga25vd24gYW5kIHBhdGggaXMg Zm9yIHNvbGUgYmFzZSByZWxhdGlvbi4KQEAgLTE0NzIsNiArMTQ3Myw3IEBAIE1lcmdlQXBwZW5k UGF0aCAqCiBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJIExpc3QgKnN1YnBhdGhzLAorCQkJCQkJIExpc3Qg KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJIExpc3QgKnBhdGhrZXlzLAogCQkJCQkJ IFJlbGlkcyByZXF1aXJlZF9vdXRlcikKIHsKQEAgLTE0ODcsNiArMTQ4OSw3IEBAIGNyZWF0ZV9t ZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlBc3NlcnQoYm1zX2lz X2VtcHR5KHJlbC0+bGF0ZXJhbF9yZWxpZHMpICYmIGJtc19pc19lbXB0eShyZXF1aXJlZF9vdXRl cikpOwogCisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gY2hpbGRfYXBwZW5k X3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX01lcmdlQXBwZW5kOwog CXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5wYXRodGFyZ2V0 ID0gcmVsLT5yZWx0YXJnZXQ7CkBAIC0zOTI2LDExICszOTI5LDEyIEBAIHJlcGFyYW1ldGVyaXpl X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCWNhc2UgVF9BcHBlbmQ6CiAJ CQl7CiAJCQkJQXBwZW5kUGF0aCAqYXBhdGggPSAoQXBwZW5kUGF0aCAqKSBwYXRoOwotCQkJCUxp c3QJICAgKmNoaWxkcGF0aHMgPSBOSUw7Ci0JCQkJTGlzdAkgICAqcGFydGlhbHBhdGhzID0gTklM OworCQkJCUFwcGVuZFBhdGhJbnB1dCBuZXdfYXBwZW5kID0gezB9OwogCQkJCWludAkJCWk7CiAJ CQkJTGlzdENlbGwgICAqbGM7CiAKKwkJCQluZXdfYXBwZW5kLmNoaWxkX2FwcGVuZF9yZWxpZF9z ZXRzID0gYXBhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCiAJCQkJLyogUmVwYXJhbWV0 ZXJpemUgdGhlIGNoaWxkcmVuICovCiAJCQkJaSA9IDA7CiAJCQkJZm9yZWFjaChsYywgYXBhdGgt PnN1YnBhdGhzKQpAQCAtMzk0NCwxMyArMzk0OCwxMyBAQCByZXBhcmFtZXRlcml6ZV9wYXRoKFBs YW5uZXJJbmZvICpyb290LCBQYXRoICpwYXRoLAogCQkJCQkJcmV0dXJuIE5VTEw7CiAJCQkJCS8q IFdlIGhhdmUgdG8gcmUtc3BsaXQgdGhlIHJlZ3VsYXIgYW5kIHBhcnRpYWwgcGF0aHMgKi8KIAkJ CQkJaWYgKGkgPCBhcGF0aC0+Zmlyc3RfcGFydGlhbF9wYXRoKQotCQkJCQkJY2hpbGRwYXRocyA9 IGxhcHBlbmQoY2hpbGRwYXRocywgc3BhdGgpOworCQkJCQkJbmV3X2FwcGVuZC5zdWJwYXRocyA9 IGxhcHBlbmQobmV3X2FwcGVuZC5zdWJwYXRocywgc3BhdGgpOwogCQkJCQllbHNlCi0JCQkJCQlw YXJ0aWFscGF0aHMgPSBsYXBwZW5kKHBhcnRpYWxwYXRocywgc3BhdGgpOworCQkJCQkJbmV3X2Fw cGVuZC5wYXJ0aWFsX3N1YnBhdGhzID0gbGFwcGVuZChuZXdfYXBwZW5kLnBhcnRpYWxfc3VicGF0 aHMsIHNwYXRoKTsKIAkJCQkJaSsrOwogCQkJCX0KIAkJCQlyZXR1cm4gKFBhdGggKikKLQkJCQkJ Y3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgY2hpbGRwYXRocywgcGFydGlhbHBhdGhzLAor CQkJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBuZXdfYXBwZW5kLAogCQkJCQkJCQkJ ICAgYXBhdGgtPnBhdGgucGF0aGtleXMsIHJlcXVpcmVkX291dGVyLAogCQkJCQkJCQkJICAgYXBh dGgtPnBhdGgucGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJCSAgIGFwYXRoLT5wYXRoLnBhcmFs bGVsX2F3YXJlLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA1MmJlNTFmNWI4OC4uYTVmOTUzNTg4 NjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0yMTcyLDYgKzIxNzIsMTIgQEAgdHlwZWRlZiBz dHJ1Y3QgQ3VzdG9tUGF0aAogICogRm9yIHBhcnRpYWwgQXBwZW5kLCAnc3VicGF0aHMnIGNvbnRh aW5zIG5vbi1wYXJ0aWFsIHN1YnBhdGhzIGZvbGxvd2VkIGJ5CiAgKiBwYXJ0aWFsIHN1YnBhdGhz LgogICoKKyAqIFdoZW5ldmVyIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoKSBhbGxvd3MgdXMg dG8gY29uc29saWRhdGUgbXVsdGlwbGUKKyAqIGxldmVscyBvZiBBcHBlbmQgcGF0aHMgZG93biB0 byBvbmUsIHdlIHN0b3JlIHRoZSBSVEkgc2V0cyBmb3IgdGhlIG9taXR0ZWQKKyAqIHBhdGhzIGlu IGNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLiBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHBsYW5u aW5nIG9yCisgKiBleGVjdXRpb247IHdlIGRvIGl0IGZvciB0aGUgYmVuZWZpdCBvZiBjb2RlIHRo YXQgd2FudHMgdG8gaW5zcGVjdCB0aGUKKyAqIGZpbmFsIHBsYW4gYW5kIHVuZGVyc3RhbmQgaG93 IGl0IGNhbWUgdG8gYmUuCisgKgogICogTm90ZTogaXQgaXMgcG9zc2libGUgZm9yICJzdWJwYXRo cyIgdG8gY29udGFpbiBvbmx5IG9uZSwgb3IgZXZlbiBubywKICAqIGVsZW1lbnRzLiAgVGhlc2Ug Y2FzZXMgYXJlIG9wdGltaXplZCBkdXJpbmcgY3JlYXRlX2FwcGVuZF9wbGFuLgogICogSW4gcGFy dGljdWxhciwgYW4gQXBwZW5kUGF0aCB3aXRoIG5vIHN1YnBhdGhzIGlzIGEgImR1bW15IiBwYXRo IHRoYXQKQEAgLTIxODcsNiArMjE5Myw3IEBAIHR5cGVkZWYgc3RydWN0IEFwcGVuZFBhdGgKIAkv KiBJbmRleCBvZiBmaXJzdCBwYXJ0aWFsIHBhdGggaW4gc3VicGF0aHM7IGxpc3RfbGVuZ3RoKHN1 YnBhdGhzKSBpZiBub25lICovCiAJaW50CQkJZmlyc3RfcGFydGlhbF9wYXRoOwogCUNhcmRpbmFs aXR5IGxpbWl0X3R1cGxlczsJLyogaGFyZCBsaW1pdCBvbiBvdXRwdXQgdHVwbGVzLCBvciAtMSAq LworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogfSBBcHBlbmRQYXRoOwogCiAj ZGVmaW5lIElTX0RVTU1ZX0FQUEVORChwKSBcCkBAIC0yMjAzLDEyICsyMjEwLDE1IEBAIGV4dGVy biBib29sIGlzX2R1bW15X3JlbChSZWxPcHRJbmZvICpyZWwpOwogLyoKICAqIE1lcmdlQXBwZW5k UGF0aCByZXByZXNlbnRzIGEgTWVyZ2VBcHBlbmQgcGxhbiwgaWUsIHRoZSBtZXJnaW5nIG9mIHNv cnRlZAogICogcmVzdWx0cyBmcm9tIHNldmVyYWwgbWVtYmVyIHBsYW5zIHRvIHByb2R1Y2Ugc2lt aWxhcmx5LXNvcnRlZCBvdXRwdXQuCisgKgorICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgaGFz IHRoZSBzYW1lIG1lYW5pbmcgaGVyZSBhcyBmb3IgQXBwZW5kUGF0aC4KICAqLwogdHlwZWRlZiBz dHJ1Y3QgTWVyZ2VBcHBlbmRQYXRoCiB7CiAJUGF0aAkJcGF0aDsKIAlMaXN0CSAgICpzdWJwYXRo czsJCS8qIGxpc3Qgb2YgY29tcG9uZW50IFBhdGhzICovCiAJQ2FyZGluYWxpdHkgbGltaXRfdHVw bGVzOwkvKiBoYXJkIGxpbWl0IG9uIG91dHB1dCB0dXBsZXMsIG9yIC0xICovCisJTGlzdAkgICAq Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiB9IE1lcmdlQXBwZW5kUGF0aDsKIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv cGxhbm5vZGVzLmgKaW5kZXggMGFkMGZmNDA0YzkuLjQ4NWJlYzVhYWJkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaApAQCAtMzk0LDkgKzM5NCwxNiBAQCBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZvOwkJ LyogZm9yd2FyZCByZWZlcmVuY2UgdG8gc3RydWN0IGJlbG93ICovCiB0eXBlZGVmIHN0cnVjdCBB cHBlbmQKIHsKIAlQbGFuCQlwbGFuOworCiAJLyogUlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVk IGJ5IHRoaXMgbm9kZSAqLwogCUJpdG1hcHNldCAgKmFwcHJlbGlkczsKKworCS8qIHNldHMgb2Yg UlRJcyBvZiBhcHBlbmRyZWxzIGNvbnNvbGlkYXRlZCBpbnRvIHRoaXMgbm9kZSAqLworCUxpc3QJ ICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCisJLyogcGxhbnMgdG8gcnVuICovCiAJTGlz dAkgICAqYXBwZW5kcGxhbnM7CisKIAkvKiAjIG9mIGFzeW5jaHJvbm91cyBwbGFucyAqLwogCWlu dAkJCW5hc3luY3BsYW5zOwogCkBAIC00MjYsNiArNDMzLDEwIEBAIHR5cGVkZWYgc3RydWN0IE1l cmdlQXBwZW5kCiAJLyogUlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMgbm9kZSAq LwogCUJpdG1hcHNldCAgKmFwcHJlbGlkczsKIAorCS8qIHNldHMgb2YgUlRJcyBvZiBhcHBlbmRy ZWxzIGNvbnNvbGlkYXRlZCBpbnRvIHRoaXMgbm9kZSAqLworCUxpc3QJICAgKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzOworCisJLyogcGxhbnMgdG8gcnVuICovCiAJTGlzdAkgICAqbWVyZ2VwbGFu czsKIAogCS8qIHRoZXNlIGZpZWxkcyBhcmUganVzdCBsaWtlIHRoZSBzb3J0LWtleSBpbmZvIGlu IHN0cnVjdCBTb3J0OiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCA5YjJjNGIzZTdl Zi4uN2QzZTdiMzJjNTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9k ZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC0xNyw2ICsxNywy MCBAQAogI2luY2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgogI2luY2x1ZGUgIm5vZGVzL3BhdGhu b2Rlcy5oIgogCisvKgorICogRXZlcnl0aGluZyBpbiBzdWJwYXRocyBvciBwYXJ0aWFsX3N1YnBh dGhzIHdpbGwgYmVjb21lIHBhcnQgb2YgdGhlCisgKiBBcHBlbmQgbm9kZSdzIHN1YnBhdGhzIGxp c3QuIFBhcnRpYWwgYW5kIG5vbi1wYXJ0aWFsIHN1YnBhdGhzIGNhbiBiZQorICogbWl4ZWQgaW4g dGhlIHNhbWUgQXBwZW5kIG5vZGUgb25seSBpZiBpdCBpcyBwYXJhbGxlbC1hd2FyZS4KKyAqCisg KiBTZWUgdGhlIGNvbW1lbnRzIGZvciBBcHBlbmRQYXRoIGZvciB0aGUgbWVhbmluZyBhbmQgcHVy cG9zZSBvZiB0aGUKKyAqIGNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzIGZpZWxkLgorICovCit0eXBl ZGVmIHN0cnVjdCBBcHBlbmRQYXRoSW5wdXQKK3sKKwlMaXN0CSAgICpzdWJwYXRoczsKKwlMaXN0 CSAgICpwYXJ0aWFsX3N1YnBhdGhzOworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz OworfSBBcHBlbmRQYXRoSW5wdXQ7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBwYXRobm9kZS5j CkBAIC02OSwxNCArODMsMTYgQEAgZXh0ZXJuIFRpZFJhbmdlUGF0aCAqY3JlYXRlX3RpZHJhbmdl c2Nhbl9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkgIExpc3QgKnRpZHJhbmdl cXVhbHMsCiAJCQkJCQkJCQkJCSAgUmVsaWRzIHJlcXVpcmVkX291dGVyLAogCQkJCQkJCQkJCQkg IGludCBwYXJhbGxlbF93b3JrZXJzKTsKKwogZXh0ZXJuIEFwcGVuZFBhdGggKmNyZWF0ZV9hcHBl bmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAotCQkJCQkJCQkJICBM aXN0ICpzdWJwYXRocywgTGlzdCAqcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgQXBwZW5k UGF0aElucHV0IGlucHV0LAogCQkJCQkJCQkJICBMaXN0ICpwYXRoa2V5cywgUmVsaWRzIHJlcXVp cmVkX291dGVyLAogCQkJCQkJCQkJICBpbnQgcGFyYWxsZWxfd29ya2VycywgYm9vbCBwYXJhbGxl bF9hd2FyZSwKIAkJCQkJCQkJCSAgZG91YmxlIHJvd3MpOwogZXh0ZXJuIE1lcmdlQXBwZW5kUGF0 aCAqY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJ CQkJIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJCSBMaXN0ICpzdWJwYXRocywKKwkJCQkJ CQkJCQkJCSBMaXN0ICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJCQkJCQkJCQkJCSBMaXN0 ICpwYXRoa2V5cywKIAkJCQkJCQkJCQkJCSBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogZXh0ZXJu IEdyb3VwUmVzdWx0UGF0aCAqY3JlYXRlX2dyb3VwX3Jlc3VsdF9wYXRoKFBsYW5uZXJJbmZvICpy b290LApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1YjAwYjFkYTNmOS4uMjg2ZDk0YjA3 NzkgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMjUsNiArMTI1LDcgQEAgQW5sSW5k ZXhEYXRhCiBBbnlBcnJheVR5cGUKIEFwcGVuZAogQXBwZW5kUGF0aAorQXBwZW5kUGF0aElucHV0 CiBBcHBlbmRSZWxJbmZvCiBBcHBlbmRTdGF0ZQogQXBwbHlFcnJvckNhbGxiYWNrQXJnCi0tIAoy LjUxLjAKCg== --0000000000006c6cda064833ff55 Content-Type: application/octet-stream; name="v9-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Disposition: attachment; filename="v9-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkbf68191 RnJvbSAwZDBlYjkwYmY4OGI4ZmIxZmExMjhkNDdmMjgzY2E2M2Q0OGIwYzI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY5IDIv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWxpZGVkIG5vZGVzIGluIHRoZSBmaW5hbAogcGxh bi4KCkFuIGV4dGVuc2lvbiAob3IgY29yZSBjb2RlKSBtaWdodCB3YW50IHRvIHJlY29uc3RydWN0 IHRoZSBwbGFubmVyJ3MKY2hvaWNlIG9mIGpvaW4gb3JkZXIgZnJvbSB0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUKdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMgdGhh dCB3ZXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbSBpbiB0aGF0IHBsYW4uClRoZSBwcmV2aW91 cyBjb21taXQsIHRvZ2V0aGVyIHdpdGggdGhlIGVhcmxpZXIgd29yayBpbgo4YzQ5YTQ4NGU4ZWJi MDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQwLCBpcyBlbm91Z2ggdG8gbGV0IHVzIG1hdGNoIHVw ClJUSXMgd2Ugc2VlIGluIHRoZSBmaW5hbCBwbGFuIHdpdGggUlRJcyB0aGF0IHdlIHNlZSBkdXJp bmcgdGhlIHBsYW5uaW5nCmN5Y2xlLCBidXQgd2Ugc3RpbGwgaGF2ZSBhIHByb2JsZW0gaWYgdGhl IHBsYW5uZXIgZGVjaWRlcyB0byBkcm9wIHNvbWUKUlRJcyBvdXQgb2YgdGhlIGZpbmFsIHBsYW4g YWx0b2dldGhlci4KClRvIGZpeCB0aGF0LCB3aGVuIHNldHJlZnMuYyByZW1vdmVzIGEgU3VicXVl cnlTY2FuLCBzaW5nbGUtY2hpbGQgQXBwZW5kLApvciBzaW5nbGUtY2hpbGQgTWVyZ2VBcHBlbmQg ZnJvbSB0aGUgZmluYWwgUGxhbiB0cmVlLCByZWNvcmQgdGhlIHR5cGUgb2YKdGhlIHJlbW92ZWQg bm9kZSBhbmQgdGhlIFJUSXMgdGhhdCB0aGUgcmVtb3ZlZCBub2RlIHdvdWxkIGhhdmUgc2Nhbm5l ZAppbiB0aGUgZmluYWwgcGxhbiB0cmVlLiBJdCB3b3VsZCBiZSBuYXR1cmFsIHRvIHJlY29yZCB0 aGlzIGluZm9ybWF0aW9uCm9uIHRoZSBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBwbGFuIG5vZGUsIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nCmFuIGFkZGl0aW9uYWwgcG9pbnRlciBmaWVsZCB0 byB0eXBlIFBsYW4sIHdoaWNoIHNlZW1zIHVuZGVzaXJhYmxlLgpTbywgaW5zdGVhZCwgc3RvcmUg dGhlIGluZm9ybWF0aW9uIGluIGEgc2VwYXJhdGUgbGlzdCB0aGF0IHRoZQpleGVjdXRvciBuZWVk IG5ldmVyIGNvbnN1bHQsIGFuZCB1c2UgdGhlIHBsYW5fbm9kZV9pZCB0byBpZGVudGlmeQp0aGUg cGxhbiBub2RlIHdpdGggd2hpY2ggdGhlIHJlbW92ZWQgbm9kZSBpcyBsb2dpY2FsbHkgYXNzb2Np YXRlZC4KCkFsc28sIHVwZGF0ZSBwZ19vdmVyZXhwbGFpbiB0byBkaXNwbGF5IHRoZXNlIGRldGFp bHMuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQt Ynk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2Vk LWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1waW9u IDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW1pdCBMYW5n b3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJp c3Rhbi55aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdt b1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwu Y29tCi0tLQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwg IDQgKy0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8IDM5 ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAg ICAgfCA1MiArKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCAgICAgICAgICAgICAgICAgfCAgMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMjAgKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICAgICAgIHwgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCAxMTcgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWlu L2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhw ZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0CmluZGV4IDU1ZDM0NjY2ZDg3Li5jYTlhMjNlYTYxZiAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFp bi5vdXQKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFp bi5vdXQKQEAgLTQ1Miw2ICs0NTIsOCBAQCBTRUxFQ1QgKiBGUk9NIHZlZ2V0YWJsZXMgV0hFUkUg Z2VudXMgPSAnZGF1Y3VzJzsKICBTZXEgU2NhbiBvbiBkYXVjdXMgdmVnZXRhYmxlcwogICAgRmls dGVyOiAoZ2VudXMgPSAnZGF1Y3VzJzo6dGV4dCkKICAgIFNjYW4gUlRJOiAyCisgICBFbGlkZWQg Tm9kZSBUeXBlOiBBcHBlbmQKKyAgIEVsaWRlZCBOb2RlIFJUSXM6IDEKICBSVEkgMSAocmVsYXRp b24sIGluaGVyaXRlZCwgaW4tZnJvbS1jbGF1c2UpOgogICAgRXJlZjogdmVnZXRhYmxlcyAoaWQs IG5hbWUsIGdlbnVzKQogICAgUmVsYXRpb246IHZlZ2V0YWJsZXMKQEAgLTQ2NSw3ICs0NjcsNyBA QCBTRUxFQ1QgKiBGUk9NIHZlZ2V0YWJsZXMgV0hFUkUgZ2VudXMgPSAnZGF1Y3VzJzsKICAgIFJl bGF0aW9uIEtpbmQ6IHJlbGF0aW9uCiAgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJl TG9jawogIFVucHJ1bmFibGUgUlRJczogMSAyCi0oMTYgcm93cykKKygxOCByb3dzKQogCiAtLSBB bHNvIHRlc3QgYSBjYXNlIHRoYXQgaW52b2x2ZXMgYSB3cml0ZS4KIEVYUExBSU4gKFJBTkdFX1RB QkxFLCBDT1NUUyBPRkYpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5k ZXggYmY4Yzc2OGVkNDcuLmUwMTg0YmEzMTRhIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJl eHBsYWluL3BnX292ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jCkBAIC0xOTEsNiArMTkxLDggQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9v ayhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCSAqLwogCWlmIChvcHRp b25zLT5yYW5nZV90YWJsZSkKIAl7CisJCWJvb2wJCW9wZW5lZF9lbGlkZWRfbm9kZXMgPSBmYWxz ZTsKKwogCQlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCiAJCXsKIAkJCWNhc2UgVF9TZXFTY2FuOgpA QCAtMjUxLDYgKzI1Myw0MyBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29rKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlkZWZhdWx0OgogCQkJCWJyZWFrOwogCQl9 CisKKwkJZm9yZWFjaF9ub2RlKEVsaWRlZE5vZGUsIG4sIGVzLT5wc3RtdC0+ZWxpZGVkTm9kZXMp CisJCXsKKwkJCWNoYXIJICAgKmVsaWRlZG5vZGV0YWc7CisKKwkJCWlmIChuLT5wbGFuX25vZGVf aWQgIT0gcGxhbi0+cGxhbl9ub2RlX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIW9wZW5l ZF9lbGlkZWRfbm9kZXMpCisJCQl7CisJCQkJRXhwbGFpbk9wZW5Hcm91cCgiRWxpZGVkIE5vZGVz IiwgIkVsaWRlZCBOb2RlcyIsIGZhbHNlLCBlcyk7CisJCQkJb3BlbmVkX2VsaWRlZF9ub2RlcyA9 IHRydWU7CisJCQl9CisKKwkJCXN3aXRjaCAobi0+ZWxpZGVkX3R5cGUpCisJCQl7CisJCQkJY2Fz ZSBUX0FwcGVuZDoKKwkJCQkJZWxpZGVkbm9kZXRhZyA9ICJBcHBlbmQiOworCQkJCQlicmVhazsK KwkJCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQkJCWVsaWRlZG5vZGV0YWcgPSAiTWVyZ2VBcHBl bmQiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQkJCQllbGlkZWRu b2RldGFnID0gIlN1YnF1ZXJ5U2NhbiI7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJ CWVsaWRlZG5vZGV0YWcgPSBwc3ByaW50ZigiJWQiLCBuLT5lbGlkZWRfdHlwZSk7CisJCQkJCWJy ZWFrOworCQkJfQorCisJCQlFeHBsYWluT3Blbkdyb3VwKCJFbGlkZWQgTm9kZSIsIE5VTEwsIHRy dWUsIGVzKTsKKwkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIkVsaWRlZCBOb2RlIFR5cGUiLCBlbGlk ZWRub2RldGFnLCBlcyk7CisJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkVsaWRlZCBOb2RlIFJU SXMiLCBuLT5yZWxpZHMsIGVzKTsKKwkJCUV4cGxhaW5DbG9zZUdyb3VwKCJFbGlkZWQgTm9kZSIs IE5VTEwsIHRydWUsIGVzKTsKKwkJfQorCQlpZiAob3BlbmVkX2VsaWRlZF9ub2RlcykKKwkJCUV4 cGxhaW5DbG9zZUdyb3VwKCJFbGlkZWQgTm9kZXMiLCAiRWxpZGVkIE5vZGVzIiwgZmFsc2UsIGVz KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCAzMTJkNTk0 NjUyNy4uMTI0YjU2YjUyMWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTYxOCw2ICs2MTgsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnBhcmFtRXhlY1R5 cGVzID0gZ2xvYi0+cGFyYW1FeGVjVHlwZXM7CiAJLyogdXRpbGl0eVN0bXQgc2hvdWxkIGJlIG51 bGwsIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGNvcHkgaXQgKi8KIAlyZXN1bHQtPnV0aWxpdHlTdG10 ID0gcGFyc2UtPnV0aWxpdHlTdG10OworCXJlc3VsdC0+ZWxpZGVkTm9kZXMgPSBnbG9iLT5lbGlk ZWROb2RlczsKIAlyZXN1bHQtPnN0bXRfbG9jYXRpb24gPSBwYXJzZS0+c3RtdF9sb2NhdGlvbjsK IAlyZXN1bHQtPnN0bXRfbGVuID0gcGFyc2UtPnN0bXRfbGVuOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9zZXRyZWZzLmMKaW5kZXggYTViMjMxNGVmMmEuLjVhZDZjMTM4MzBiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0yMTEsNiArMjExLDkgQEAgc3RhdGljIExpc3Qg KnNldF93aW5kb3dhZ2dfcnVuY29uZGl0aW9uX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCQkgICBMaXN0ICpydW5jb25kaXRpb24sCiAJCQkJCQkJCQkJCQkgICBQbGFu ICpwbGFuKTsKIAorc3RhdGljIHZvaWQgcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwg Kmdsb2IsIGludCBwbGFuX25vZGVfaWQsCisJCQkJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwg Qml0bWFwc2V0ICpyZWxpZHMpOworCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE0 NjAsMTAgKzE0NjMsMTcgQEAgc2V0X3N1YnF1ZXJ5c2Nhbl9yZWZlcmVuY2VzKFBsYW5uZXJJbmZv ICpyb290LAogCiAJaWYgKHRyaXZpYWxfc3VicXVlcnlzY2FuKHBsYW4pKQogCXsKKwkJSW5kZXgJ CXNjYW5yZWxpZDsKKwogCQkvKgogCQkgKiBXZSBjYW4gb21pdCB0aGUgU3VicXVlcnlTY2FuIG5v ZGUgYW5kIGp1c3QgcHVsbCB1cCB0aGUgc3VicGxhbi4KIAkJICovCiAJCXJlc3VsdCA9IGNsZWFu X3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBwbGFuLCBwbGFuLT5zdWJwbGFuKTsKKwor CQkvKiBSZW1lbWJlciB0aGF0IHdlIHJlbW92ZWQgYSBTdWJxdWVyeVNjYW4gKi8KKwkJc2NhbnJl bGlkID0gcGxhbi0+c2Nhbi5zY2FucmVsaWQgKyBydG9mZnNldDsKKwkJcmVjb3JkX2VsaWRlZF9u b2RlKHJvb3QtPmdsb2IsIHBsYW4tPnN1YnBsYW4tPnBsYW5fbm9kZV9pZCwKKwkJCQkJCSAgIFRf U3VicXVlcnlTY2FuLCBibXNfbWFrZV9zaW5nbGV0b24oc2NhbnJlbGlkKSk7CiAJfQogCWVsc2UK IAl7CkBAIC0xODkxLDcgKzE5MDEsMTcgQEAgc2V0X2FwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJ bmZvICpyb290LAogCQlQbGFuCSAgICpwID0gKFBsYW4gKikgbGluaXRpYWwoYXBsYW4tPmFwcGVu ZHBsYW5zKTsKIAogCQlpZiAocC0+cGFyYWxsZWxfYXdhcmUgPT0gYXBsYW4tPnBsYW4ucGFyYWxs ZWxfYXdhcmUpCi0JCQlyZXR1cm4gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICop IGFwbGFuLCBwKTsKKwkJeworCQkJUGxhbgkgICAqcmVzdWx0OworCisJCQlyZXN1bHQgPSBjbGVh bl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikgYXBsYW4sIHApOworCisJCQkvKiBSZW1l bWJlciB0aGF0IHdlIHJlbW92ZWQgYW4gQXBwZW5kICovCisJCQlyZWNvcmRfZWxpZGVkX25vZGUo cm9vdC0+Z2xvYiwgcC0+cGxhbl9ub2RlX2lkLCBUX0FwcGVuZCwKKwkJCQkJCQkgICBvZmZzZXRf cmVsaWRfc2V0KGFwbGFuLT5hcHByZWxpZHMsIHJ0b2Zmc2V0KSk7CisKKwkJCXJldHVybiByZXN1 bHQ7CisJCX0KIAl9CiAKIAkvKgpAQCAtMTk1OSw3ICsxOTc5LDE3IEBAIHNldF9tZXJnZWFwcGVu ZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCQlQbGFuCSAgICpwID0gKFBsYW4gKikg bGluaXRpYWwobXBsYW4tPm1lcmdlcGxhbnMpOwogCiAJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9 PSBtcGxhbi0+cGxhbi5wYXJhbGxlbF9hd2FyZSkKLQkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVk X3BsYW5fbGV2ZWwoKFBsYW4gKikgbXBsYW4sIHApOworCQl7CisJCQlQbGFuCSAgICpyZXN1bHQ7 CisKKwkJCXJlc3VsdCA9IGNsZWFuX3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBtcGxh biwgcCk7CisKKwkJCS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIE1lcmdlQXBwZW5kICov CisJCQlyZWNvcmRfZWxpZGVkX25vZGUocm9vdC0+Z2xvYiwgcC0+cGxhbl9ub2RlX2lkLCBUX01l cmdlQXBwZW5kLAorCQkJCQkJCSAgIG9mZnNldF9yZWxpZF9zZXQobXBsYW4tPmFwcHJlbGlkcywg cnRvZmZzZXQpKTsKKworCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQogCX0KIAogCS8qCkBAIC0zNzc0 LDMgKzM4MDQsMjEgQEAgZXh0cmFjdF9xdWVyeV9kZXBlbmRlbmNpZXNfd2Fsa2VyKE5vZGUgKm5v ZGUsIFBsYW5uZXJJbmZvICpjb250ZXh0KQogCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2Vy KG5vZGUsIGV4dHJhY3RfcXVlcnlfZGVwZW5kZW5jaWVzX3dhbGtlciwKIAkJCQkJCQkJICBjb250 ZXh0KTsKIH0KKworLyoKKyAqIFJlY29yZCBzb21lIGRldGFpbHMgYWJvdXQgYSBub2RlIHJlbW92 ZWQgZnJvbSB0aGUgcGxhbiBkdXJpbmcgc2V0cmVmcworICogcHJvY2Vzc2luZywgZm9yIHRoZSBi ZW5lZml0IG9mIGNvZGUgdHJ5aW5nIHRvIHJlY29uc3RydWN0IHBsYW5uZXIgZGVjaXNpb25zCisg KiBmcm9tIGV4YW1pbmF0aW9uIG9mIHRoZSBmaW5hbCBwbGFuIHRyZWUuCisgKi8KK3N0YXRpYyB2 b2lkCityZWNvcmRfZWxpZGVkX25vZGUoUGxhbm5lckdsb2JhbCAqZ2xvYiwgaW50IHBsYW5fbm9k ZV9pZCwKKwkJCQkgICBOb2RlVGFnIGVsaWRlZF90eXBlLCBCaXRtYXBzZXQgKnJlbGlkcykKK3sK KwlFbGlkZWROb2RlICpuID0gbWFrZU5vZGUoRWxpZGVkTm9kZSk7CisKKwluLT5wbGFuX25vZGVf aWQgPSBwbGFuX25vZGVfaWQ7CisJbi0+ZWxpZGVkX3R5cGUgPSBlbGlkZWRfdHlwZTsKKwluLT5y ZWxpZHMgPSByZWxpZHM7CisKKwlnbG9iLT5lbGlkZWROb2RlcyA9IGxhcHBlbmQoZ2xvYi0+ZWxp ZGVkTm9kZXMsIG4pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAyNDc1OTczMWM4Ny4uNTJi ZTUxZjViODggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xNTksNiArMTU5LDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCS8qIHR5cGUgT0lEcyBmb3IgUEFSQU1fRVhFQyBQYXJh bXMgKi8KIAlMaXN0CSAgICpwYXJhbUV4ZWNUeXBlczsKIAorCS8qIGluZm8gYWJvdXQgbm9kZXMg ZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLworCUxpc3QJ ICAgKmVsaWRlZE5vZGVzOworCiAJLyogaGlnaGVzdCBQbGFjZUhvbGRlclZhciBJRCBhc3NpZ25l ZCAqLwogCUluZGV4CQlsYXN0UEhJZDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCA5YWU3MmE2 MDdlMi4uMGFkMGZmNDA0YzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rl cy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xNTIsNiArMTUyLDkg QEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkvKiBub24tbnVsbCBpZiB0aGlzIGlzIHV0 aWxpdHkgc3RtdCAqLwogCU5vZGUJICAgKnV0aWxpdHlTdG10OwogCisJLyogaW5mbyBhYm91dCBu b2RlcyBlbGlkZWQgZnJvbSB0aGUgcGxhbiBkdXJpbmcgc2V0cmVmcyBwcm9jZXNzaW5nICovCisJ TGlzdAkgICAqZWxpZGVkTm9kZXM7CisKIAkvKgogCSAqIERlZkVsZW0gb2JqZWN0cyBhZGRlZCBi eSBleHRlbnNpb25zLCBlLmcuIHVzaW5nIHBsYW5uZXJfc2h1dGRvd25faG9vawogCSAqCkBAIC0x ODM4LDQgKzE4NDEsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbwogCWJvb2wJCWR1 bW15OwogfSBTdWJQbGFuUlRJbmZvOwogCisvKgorICogRWxpZGVkTm9kZQorICoKKyAqIEluZm9y bWF0aW9uIGFib3V0IG5vZGVzIGVsaWRlZCBmcm9tIHRoZSBmaW5hbCBwbGFuIHRyZWU6IHRyaXZp YWwgc3VicXVlcnkKKyAqIHNjYW5zLCBhbmQgc2luZ2xlLWNoaWxkIEFwcGVuZCBhbmQgTWVyZ2VB cHBlbmQgbm9kZXMuCisgKgorICogcGxhbl9ub2RlX2lkIGlzIHRoYXQgb2YgdGhlIHN1cnZpdmlu ZyBwbGFuIG5vZGUsIHRoZSBzb2xlIGNoaWxkIG9mIHRoZQorICogb25lIHdoaWNoIHdhcyBlbGlk ZWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IEVsaWRlZE5vZGUKK3sKKwlOb2RlVGFnCQl0eXBlOwor CWludAkJCXBsYW5fbm9kZV9pZDsKKwlOb2RlVGFnCQllbGlkZWRfdHlwZTsKKwlCaXRtYXBzZXQg ICpyZWxpZHM7Cit9IEVsaWRlZE5vZGU7CisKICNlbmRpZgkJCQkJCQkvKiBQTEFOTk9ERVNfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1MjEwM2E2MzU3MC4uNWIwMGIxZGEzZjkg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC03MDgsNiArNzA4LDcgQEAgRWFjaFN0YXRl CiBFZGdlCiBFZGl0YWJsZU9iamVjdFR5cGUKIEVsZW1lbnRzU3RhdGUKK0VsaWRlZE5vZGUKIEVu YWJsZVRpbWVvdXRQYXJhbXMKIEVuZERhdGFQdHJUeXBlCiBFbmREaXJlY3RNb2RpZnlfZnVuY3Rp b24KLS0gCjIuNTEuMAoK --0000000000006c6cda064833ff55 Content-Type: application/octet-stream; name="v9-0001-Store-information-about-range-table-flattening-in.patch" Content-Disposition: attachment; filename="v9-0001-Store-information-about-range-table-flattening-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkbf68100 RnJvbSBhMGU4YmRlYjg5YjEyNzFlZWQ2ZTdkNzk3YmI3YTZhMWVmODM4MzQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHY5IDEv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgcmFuZ2UtdGFibGUgZmxhdHRlbmluZyBpbiB0aGUK IGZpbmFsIHBsYW4uCgpTdXBwb3NlIHRoYXQgd2UncmUgY3VycmVudGx5IHBsYW5uaW5nIGEgcXVl cnkgYW5kLCB3aGVuIHRoYXQgc2FtZQpxdWVyeSB3YXMgcHJldmlvdXNseSBwbGFubmVkIGFuZCBl eGVjdXRlZCwgd2UgbGVhcm5lZCBzb21ldGhpbmcgYWJvdXQKaG93IGEgY2VydGFpbiB0YWJsZSB3 aXRoaW4gdGhhdCBxdWVyeSBzaG91bGQgYmUgcGxhbm5lZC4gV2Ugd2FudCB0bwp0YWtlIG5vdGUg d2hlbiB0aGF0IHNhbWUgdGFibGUgaXMgYmVpbmcgcGxhbm5lZCBkdXJpbmcgdGhlIGN1cnJlbnQK cGxhbm5pbmcgY3ljbGUsIGJ1dCB0aGlzIGlzIGRpZmZpY3VsdCB0byBkbywgYmVjYXVzZSB0aGUg UlRJIG9mIHRoZQp0YWJsZSBmcm9tIHRoZSBwcmV2aW91cyBwbGFuIHdvbid0IG5lY2Vzc2FyaWx5 IGJlIGVxdWFsIHRvIHRoZSBSVEkKdGhhdCB3ZSBzZWUgZHVyaW5nIHRoZSBjdXJyZW50IHBsYW5u aW5nIGN5Y2xlLiBUaGlzIGlzIGJlY2F1c2UgZWFjaApzdWJxdWVyeSBoYXMgYSBzZXBhcmF0ZSBy YW5nZSB0YWJsZSBkdXJpbmcgcGxhbm5pbmcsIGJ1dCB0aGVzZSBhcmUKZmxhdHRlbmVkIGludG8g b25lIHJhbmdlIHRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBwbGFuLApjaGFuZ2lu ZyBSVElzLgoKQ29tbWl0IDhjNDlhNDg0ZThlYmIwMTk5ZmJhNGJkNjhlYWFlZGFmNDliNDhlZDAg YWxsb3dzIHVzIHRvIG1hdGNoIHVwCnN1YnF1ZXJpZXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgcGxh bm5pbmcgY3ljbGVzIHdpdGggdGhlIHN1YnF1ZXJpZXMKY3VycmVudGx5IGJlaW5nIHBsYW5uZWQg anVzdCBieSBjb21wYXJpbmcgdGV4dHVhbCBuYW1lcywgYnV0IHRoYXQncwpub3QgcXVpdGUgZW5v dWdoIHRvIGxldCB1cyBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgaW5kaXZpZHVhbCB0YWJsZXMsCmJl Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBlYWNoIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUgYXBw ZWFycyBpbgp0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KClRvIGZpeCB0aGF0LCBz dG9yZSBhIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBvYmplY3RzIGluIHRoZSBmaW5hbApwbGFubmVk IHN0YXRlbWVudCwgZWFjaCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHN1YnBsYW4sIHRoZSBv ZmZzZXQKYXQgd2hpY2ggaXQgYmVnaW5zIGluIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUsIGFu ZCB3aGV0aGVyIG9yIG5vdAppdCB3YXMgYSBkdW1teSBzdWJwbGFuIC0tIGlmIGl0IHdhcywgc29t ZSBSVElzIG1heSBoYXZlIGJlZW4gZHJvcHBlZApmcm9tIHRoZSBmaW5hbCByYW5nZSB0YWJsZSwg YnV0IGFsc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbnRyb2wgaG93CmEgZHVtbXkgc3VicXVlcnkg Z2V0cyBwbGFubmVkLiBUaGUgdG9wbGV2ZWwgc3VicXVlcnkgaGFzIG5vIG5hbWUgYW5kCmFsd2F5 cyBiZWdpbnMgYXQgcnRvZmZzZXQgMCwgc28gd2UgbWFrZSBubyBlbnRyeSBmb3IgaXQuCgpUaGlz IGNvbW1pdCB0ZWFjaGVzIHBnX292ZXJleHBsYWluJ3MgUkFOR0VfVEFCTEUgb3B0aW9uIHRvIG1h a2UgdXNlCm9mIHRoaXMgbmV3IGRhdGEgdG8gZGlzcGxheSB0aGUgc3VicXVlcnkgbmFtZSBmb3Ig ZWFjaCByYW5nZSB0YWJsZQplbnRyeS4KClJldmlld2VkLWJ5OiBMdWthcyBGaXR0bCA8bHVrYXNA Zml0dGwuY29tPgpSZXZpZXdlZC1ieTogSmFrdWIgV2FydGFrIDxqYWt1Yi53YXJ0YWtAZW50ZXJw cmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEdyZWcgQnVyZCA8Z3JlZ0BidXJkLm1lPgpSZXZpZXdl ZC1ieTogSmFjb2IgQ2hhbXBpb24gPGphY29iLmNoYW1waW9uQGVudGVycHJpc2VkYi5jb20+ClJl dmlld2VkLWJ5OiBBbWl0IExhbmdvdGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpSZXZpZXdl ZC1ieTogSGFpYm8gWWFuIDx0cmlzdGFuLnlpbUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHA6 Ly9wb3N0Z3IuZXMvbS9DQStUZ21vWi1KaDFUNlF5V29DT0RNVlFkaFRVUFlrYVpqV3p0elAxRW40 PVpIb0tQendAbWFpbC5nbWFpbC5jb20KLS0tCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMgfCAzNiArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9zZXRyZWZzLmMgICAgfCAyMCArKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmggICAgICAgICAgIHwgIDMgKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaCAgICAgICAgICAgfCAxNyArKysrKysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgICB8ICAxICsKIDYgZmlsZXMgY2hhbmdlZCwgNzggaW5zZXJ0aW9ucygr KQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyBi L2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRleCAzMTZmZmQxYzg3 Zi4uYmY4Yzc2OGVkNDcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMK QEAgLTM5NSw2ICszOTUsOCBAQCBzdGF0aWMgdm9pZAogb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUo UGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBsYWluU3RhdGUgKmVzKQogewogCUluZGV4CQly dGk7CisJTGlzdENlbGwgICAqbGNfc3VicnRpbmZvID0gbGlzdF9oZWFkKHBsYW5uZWRzdG10LT5z dWJydGluZm9zKTsKKwlTdWJQbGFuUlRJbmZvICpydGluZm8gPSBOVUxMOwogCiAJLyogT3BlbiBn cm91cCwgb25lIGVudHJ5IHBlciBSYW5nZVRibEVudHJ5ICovCiAJRXhwbGFpbk9wZW5Hcm91cCgi UmFuZ2UgVGFibGUiLCAiUmFuZ2UgVGFibGUiLCBmYWxzZSwgZXMpOwpAQCAtNDA1LDYgKzQwNywx OCBAQCBvdmVyZXhwbGFpbl9yYW5nZV90YWJsZShQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEV4 cGxhaW5TdGF0ZSAqZXMpCiAJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcGxh bm5lZHN0bXQtPnJ0YWJsZSk7CiAJCWNoYXIJICAgKmtpbmQgPSBOVUxMOwogCQljaGFyCSAgICpy ZWxraW5kOworCQlTdWJQbGFuUlRJbmZvICpuZXh0X3J0aW5mbzsKKworCQkvKiBBZHZhbmNlIHRv IG5leHQgU3ViUlRJbmZvLCBpZiBpdCdzIHRpbWUuICovCisJCWlmIChsY19zdWJydGluZm8gIT0g TlVMTCkKKwkJeworCQkJbmV4dF9ydGluZm8gPSBsZmlyc3QobGNfc3VicnRpbmZvKTsKKwkJCWlm IChydGkgPiBuZXh0X3J0aW5mby0+cnRvZmZzZXQpCisJCQl7CisJCQkJcnRpbmZvID0gbmV4dF9y dGluZm87CisJCQkJbGNfc3VicnRpbmZvID0gbG5leHQocGxhbm5lZHN0bXQtPnN1YnJ0aW5mb3Ms IGxjX3N1YnJ0aW5mbyk7CisJCQl9CisJCX0KIAogCQkvKiBOVUxMIGVudHJpZXMgYXJlIHBvc3Np YmxlOyBza2lwIHRoZW0gKi8KIAkJaWYgKHJ0ZSA9PSBOVUxMKQpAQCAtNDY5LDYgKzQ4MywyOCBA QCBvdmVyZXhwbGFpbl9yYW5nZV90YWJsZShQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEV4cGxh aW5TdGF0ZSAqZXMpCiAJCQlFeHBsYWluUHJvcGVydHlCb29sKCJJbiBGcm9tIENsYXVzZSIsIHJ0 ZS0+aW5Gcm9tQ2wsIGVzKTsKIAkJfQogCisJCS8qCisJCSAqIEluZGljYXRlIHdoaWNoIHN1YnBs YW4gaXMgdGhlIG9yaWdpbiBvZiB3aGljaCBSVEUuIE5vdGUgZHVtbXkKKwkJICogc3VicGxhbnMu IEhlcmUgYWdhaW4sIHdlIGNydW5jaCBtb3JlIG9udG8gb25lIGxpbmUgaW4gdGV4dCBmb3JtYXQu CisJCSAqLworCQlpZiAocnRpbmZvICE9IE5VTEwpCisJCXsKKwkJCWlmIChlcy0+Zm9ybWF0ID09 IEVYUExBSU5fRk9STUFUX1RFWFQpCisJCQl7CisJCQkJaWYgKCFydGluZm8tPmR1bW15KQorCQkJ CQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwgcnRpbmZvLT5wbGFuX25hbWUsIGVzKTsK KwkJCQllbHNlCisJCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIlN1YnBsYW4iLAorCQkJCQkJCQkJ CXBzcHJpbnRmKCIlcyAoZHVtbXkpIiwKKwkJCQkJCQkJCQkJCSBydGluZm8tPnBsYW5fbmFtZSks IGVzKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJw bGFuIiwgcnRpbmZvLT5wbGFuX25hbWUsIGVzKTsKKwkJCQlFeHBsYWluUHJvcGVydHlCb29sKCJT dWJwbGFuIElzIER1bW15IiwgcnRpbmZvLT5kdW1teSwgZXMpOworCQkJfQorCQl9CisKIAkJLyog cnRlLT5hbGlhcyBpcyBvcHRpb25hbDsgcnRlLT5lcmVmIGlzIHJlcXVlc3RlZCAqLwogCQlpZiAo cnRlLT5hbGlhcyAhPSBOVUxMKQogCQkJb3ZlcmV4cGxhaW5fYWxpYXMoIkFsaWFzIiwgcnRlLT5h bGlhcywgZXMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDdhNmI4Yjc0 OWYyLi4zMTJkNTk0NjUyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAt NjA3LDYgKzYwNyw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+dW5wcnVuYWJsZVJl bGlkcyA9IGJtc19kaWZmZXJlbmNlKGdsb2ItPmFsbFJlbGlkcywKIAkJCQkJCQkJCQkJICBnbG9i LT5wcnVuYWJsZVJlbGlkcyk7CiAJcmVzdWx0LT5wZXJtSW5mb3MgPSBnbG9iLT5maW5hbHJ0ZXBl cm1pbmZvczsKKwlyZXN1bHQtPnN1YnJ0aW5mb3MgPSBnbG9iLT5zdWJydGluZm9zOwogCXJlc3Vs dC0+cmVzdWx0UmVsYXRpb25zID0gZ2xvYi0+cmVzdWx0UmVsYXRpb25zOwogCXJlc3VsdC0+YXBw ZW5kUmVsYXRpb25zID0gZ2xvYi0+YXBwZW5kUmVsYXRpb25zOwogCXJlc3VsdC0+c3VicGxhbnMg PSBnbG9iLT5zdWJwbGFuczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCAx NmQyMDBjZmI0Ni4uYTViMjMxNGVmMmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMKQEAgLTM5OSw2ICszOTksMjYgQEAgYWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUoUGxhbm5lcklu Zm8gKnJvb3QsIGJvb2wgcmVjdXJzaW5nKQogCUluZGV4CQlydGk7CiAJTGlzdENlbGwgICAqbGM7 CiAKKwkvKgorCSAqIFJlY29yZCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gbWFrZSBpdCBwb3NzaWJs ZSBmb3IgY29kZSB0aGF0IGxvb2tzIGF0CisJICogdGhlIGZpbmFsIHJhbmdlIHRhYmxlIHRvIHVu ZGVyc3RhbmQgaG93IGl0IHdhcyBjb25zdHJ1Y3RlZC4gKElmCisJICogZmluYWxydGFibGUgaXMg c3RpbGwgTklMLCB0aGVuIHRoaXMgaXMgdGhlIHZlcnkgdG9wbW9zdCBQbGFubmVySW5mbywKKwkg KiB3aGljaCB3aWxsIGFsd2F5cyBoYXZlIHBsYW5fbmFtZSA9PSBOVUxMIGFuZCBydG9mZnNldCA9 PSAwOyB3ZSBvbWl0IHRoZQorCSAqIGRlZ2VuZXJhdGUgbGlzdCBlbnRyeS4pCisJICovCisJaWYg KHJvb3QtPmdsb2ItPmZpbmFscnRhYmxlICE9IE5JTCkKKwl7CisJCVN1YlBsYW5SVEluZm8gKnJ0 aW5mbyA9IG1ha2VOb2RlKFN1YlBsYW5SVEluZm8pOworCisJCXJ0aW5mby0+cGxhbl9uYW1lID0g cm9vdC0+cGxhbl9uYW1lOworCQlydGluZm8tPnJ0b2Zmc2V0ID0gbGlzdF9sZW5ndGgocm9vdC0+ Z2xvYi0+ZmluYWxydGFibGUpOworCisJCS8qIFdoZW4gcmVjdXJzaW5nID0gdHJ1ZSwgaXQncyBh biB1bnBsYW5uZWQgb3IgZHVtbXkgc3VicXVlcnkuICovCisJCXJ0aW5mby0+ZHVtbXkgPSByZWN1 cnNpbmc7CisKKwkJcm9vdC0+Z2xvYi0+c3VicnRpbmZvcyA9IGxhcHBlbmQocm9vdC0+Z2xvYi0+ c3VicnRpbmZvcywgcnRpbmZvKTsKKwl9CisKIAkvKgogCSAqIEFkZCB0aGUgcXVlcnkncyBvd24g UlRFcyB0byB0aGUgZmxhdHRlbmVkIHJhbmdldGFibGUuCiAJICoKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK aW5kZXggNDQ5ODg1YjkzMTkuLjI0NzU5NzMxYzg3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAt MTM1LDYgKzEzNSw5IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiAiZmxhdCIg bGlzdCBvZiBSVEVQZXJtaXNzaW9uSW5mb3MgKi8KIAlMaXN0CSAgICpmaW5hbHJ0ZXBlcm1pbmZv czsKIAorCS8qIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBub2RlcyAqLworCUxpc3QJICAgKnN1YnJ0 aW5mb3M7CisKIAkvKiAiZmxhdCIgbGlzdCBvZiBQbGFuUm93TWFya3MgKi8KIAlMaXN0CSAgICpm aW5hbHJvd21hcmtzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDRiYzZmYjU2NzBlLi45YWU3 MmE2MDdlMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTEzMSw2ICsxMzEsOSBAQCB0eXBlZGVm IHN0cnVjdCBQbGFubmVkU3RtdAogCSAqLwogCUxpc3QJICAgKnN1YnBsYW5zOwogCisJLyogYSBs aXN0IG9mIFN1YlBsYW5SVEluZm8gb2JqZWN0cyAqLworCUxpc3QJICAgKnN1YnJ0aW5mb3M7CisK IAkvKiBpbmRpY2VzIG9mIHN1YnBsYW5zIHRoYXQgcmVxdWlyZSBSRVdJTkQgKi8KIAlCaXRtYXBz ZXQgICpyZXdpbmRQbGFuSURzOwogCkBAIC0xODIxLDQgKzE4MjQsMTggQEAgdHlwZWRlZiBlbnVt IE1vbm90b25pY0Z1bmN0aW9uCiAJTU9OT1RPTklDRlVOQ19CT1RIID0gTU9OT1RPTklDRlVOQ19J TkNSRUFTSU5HIHwgTU9OT1RPTklDRlVOQ19ERUNSRUFTSU5HLAogfSBNb25vdG9uaWNGdW5jdGlv bjsKIAorLyoKKyAqIFN1YlBsYW5SVEluZm8KKyAqCisgKiBJbmZvcm1hdGlvbiBhYm91dCB3aGlj aCByYW5nZSB0YWJsZSBlbnRyaWVzIGNhbWUgZnJvbSB3aGljaCBzdWJxdWVyeQorICogcGxhbm5p bmcgY3ljbGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBTdWJQbGFuUlRJbmZvCit7CisJTm9kZVRh ZwkJdHlwZTsKKwljaGFyCSAgICpwbGFuX25hbWU7CisJSW5kZXgJCXJ0b2Zmc2V0OworCWJvb2wJ CWR1bW15OworfSBTdWJQbGFuUlRJbmZvOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5PREVTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMDllN2YxZDQyMGUuLjUyMTAzYTYzNTcw IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjkxOSw2ICsyOTE5LDcgQEAgU3ViTGlu awogU3ViTGlua1R5cGUKIFN1Yk9wdHMKIFN1YlBsYW4KK1N1YlBsYW5SVEluZm8KIFN1YlBsYW5T dGF0ZQogU3ViUmVsSW5mbwogU3ViUmVtb3ZlUmVscwotLSAKMi41MS4wCgo= --0000000000006c6cda064833ff55 Content-Type: application/octet-stream; name="v9-0004-Allow-for-plugin-control-over-path-generation-str.patch" Content-Disposition: attachment; filename="v9-0004-Allow-for-plugin-control-over-path-generation-str.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkbf681e3 RnJvbSA2OTE1OGVmOTkzZjdhM2VhZDEwM2YxYTMyMDQzMTZiMmQ1MWY5ODlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6Mzc6MjEgLTA1MDAKU3ViamVjdDogW1BBVENIIHY5IDQv NV0gQWxsb3cgZm9yIHBsdWdpbiBjb250cm9sIG92ZXIgcGF0aCBnZW5lcmF0aW9uCiBzdHJhdGVn aWVzLgoKRWFjaCBSZWxPcHRJbmZvIG5vdyBoYXMgYSBwZ3NfbWFzayBtZW1iZXIgd2hpY2ggaXMg YSBtYXNrIG9mIGFjY2VwdGFibGUKc3RyYXRlZ2llcy4gRm9yIG1vc3QgcmVscywgdGhpcyBpcyBw b3B1bGF0ZWQgZnJvbSBQbGFubmVyR2xvYmFsJ3MKZGVmYXVsdF9wZ3NfbWFzaywgd2hpY2ggaXMg Y29tcHV0ZWQgZnJvbSB0aGUgdmFsdWVzIG9mIHRoZSBlbmFibGVfKgpHVUNzIGF0IHRoZSBzdGFy dCBvZiBwbGFubmluZy4KCkZvciBiYXNlcmVscywgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBjYW4g YmUgdXNlZCB0byBhZGp1c3QgcGdzX21hc2sgZm9yCmVhY2ggbmV3IFJlbE9wdEluZm8sIGF0IGxl YXN0IGZvciByZWxzIG9mIHR5cGUgUlRFX1JFTEFUSU9OLiBBZGp1c3RpbmcKcGdzX21hc2sgaXMg bGVzcyB1c2VmdWwgZm9yIG90aGVyIHR5cGVzIG9mIHJlbHMsIGJ1dCBpZiBpdCBwcm92ZXMgdG8K YmUgbmVjZXNzYXJ5LCB3ZSBjYW4gcmV2aXNpdCB0aGUgd2F5IHRoaXMgaG9vayB3b3JrcyBvciBh ZGQgYSBuZXcgb25lLgoKRm9yIGpvaW5yZWxzLCB0d28gbmV3IGhvb2tzIGFyZSBhZGRlZC4gam9p bnJlbF9zZXR1cF9ob29rIGlzIGNhbGxlZCBlYWNoCnRpbWUgYSBqb2lucmVsIGlzIGNyZWF0ZWQs IGFuZCBvbmUgdGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHRoYXQgaG9vawppcyB0byBtYW5p cHVsYXRlIHBnc19tYXNrIGZvciB0aGUgbmV3IGpvaW5yZWwuIGpvaW5fcGF0aF9zZXR1cF9ob29r IGlzCmNhbGxlZCBlYWNoIHRpbWUgd2UncmUgYWJvdXQgdG8gYWRkIHBhdGhzIHRvIGEgam9pbnJl bCBieSBjb25zaWRlcmluZwpzb21lIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgYW4gb3V0ZXIg cmVsLCBhbiBpbm5lciByZWwsIGFuZCBhIGpvaW4KdHlwZS4gSXQgY2FuIG1vZGlmeSB0aGUgcGdz X21hc2sgcHJvcGFnYXRlZCBpbnRvIEpvaW5QYXRoRXh0cmFEYXRhIHRvCnJlc3RyaWN0IHN0cmF0 ZWd5IGNob2ljZSBmb3IgdGhhdCBwYXJpY3VsYXIgY29tYmluYXRpb24gb2YgcmVscy4KClRvIG1h a2Ugam9pbnJlbF9zZXR1cF9ob29rIHdvcmsgYXMgaW50ZW5kZWQsIHRoZSBleGlzdGluZyBjYWxs cyB0bwpidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvIGFyZSBtb3ZlZCBsYXRlciBpbiB0aGUg Y2FsbGluZyBmdW5jdGlvbnM7CnRoaXMgaXMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGNoZWNrcyB3 aGV0aGVyIHRoZSByZWwncyBwZ3NfbWFzayBpbmNsdWRlcwpQR1NfQ09OU0lERVJfUEFSVElUSU9O V0lTRSwgc28gd2Ugd2FudCBpdCB0byBvbmx5IGJlIGNhbGxlZCBhZnRlcgpwbHVnaW5zIGhhdmUg aGFkIGEgY2hhbmNlIHRvIGFsdGVyIHBnc19tYXNrLgoKVXBwZXIgcmVscyBjdXJyZW50bHkgaW5o ZXJpdCBwZ3NfbWFzayBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gSXQncwp1bmNsZWFyIHRoYXQg dGhpcyBpcyB0aGUgbW9zdCB1c2VmdWwgYmVoYXZpb3IsIGJ1dCBhdCB0aGUgbW9tZW50IHRoZXJl CmFyZSBubyBob29rcyB0byBhbGxvdyB0aGUgbWFzayB0byBiZSBzZXQgaW4gYW55IG90aGVyIHdh eS4KClJldmlld2VkLWJ5OiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpSZXZpZXdlZC1i eTogSmFrdWIgV2FydGFrIDxqYWt1Yi53YXJ0YWtAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQt Ynk6IEdyZWcgQnVyZCA8Z3JlZ0BidXJkLm1lPgpSZXZpZXdlZC1ieTogSmFjb2IgQ2hhbXBpb24g PGphY29iLmNoYW1waW9uQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBBbWl0IExhbmdv dGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSGFpYm8gWWFuIDx0cmlz dGFuLnlpbUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHA6Ly9wb3N0Z3IuZXMvbS9DQStUZ21v Wi1KaDFUNlF5V29DT0RNVlFkaFRVUFlrYVpqV3p0elAxRW40PVpIb0tQendAbWFpbC5nbWFpbC5j b20KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICB8IDIyMiArKysrKysrKysr KysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgIHwgIDg5ICsr KysrKystLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYyAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgICA0ICstCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgNTQgKysrKysrCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgfCAgMTkgKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYyAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9yZWxub2RlLmMgICAgfCAgNDQgKysrKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICAgICB8ICA4MiArKysrKysrKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0 LmggICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAg fCAgIDkgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDQ1NyBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCAzMjZhNmMxOWVh ZC4uMDc4NmYxM2JmOWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Fs bHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAt OTU0LDcgKzk1NCw3IEBAIHNldF90YWJsZXNhbXBsZV9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUmFuZ2VUYmxFbnRyeSAqCiAJCSBibXNfbWVtYmVyc2hp cChyb290LT5hbGxfcXVlcnlfcmVscykgIT0gQk1TX1NJTkdMRVRPTikgJiYKIAkJIShHZXRUc21S b3V0aW5lKHJ0ZS0+dGFibGVzYW1wbGUtPnRzbWhhbmRsZXIpLT5yZXBlYXRhYmxlX2Fjcm9zc19z Y2FucykpCiAJewotCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBw YXRoKTsKKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgcGF0aCwg dHJ1ZSk7CiAJfQogCiAJYWRkX3BhdGgocmVsLCBwYXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCmluZGV4IDE2YmYxZjYxYTBmLi4yZDVmNzMwMDEzNSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0yNzUsNiArMjc1LDcgQEAgY29zdF9zZXFzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nv c3Q7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50 NjQJCWVuYWJsZV9tYXNrID0gUEdTX1NFUVNDQU47CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBs aWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBA IC0zMjcsOCArMzI4LDExIEBAIGNvc3Rfc2Vxc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJICovCiAJCXBhdGgtPnJvd3MgPSBjbGFtcF9yb3dfZXN0KHBhdGgtPnJvd3MgLyBw YXJhbGxlbF9kaXZpc29yKTsKIAl9CisJZWxzZQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxlX3NlcXNjYW4g PyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgY3B1 X3J1bl9jb3N0ICsgZGlza19ydW5fY29zdDsKIH0KQEAgLTM1NCw2ICszNTgsNyBAQCBjb3N0X3Nh bXBsZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJc3BjX3BhZ2VfY29z dDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2 NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNl IHJlbGF0aW9ucyB3aXRoIHRhYmxlc2FtcGxlIGNsYXVzZXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+ cmVsaWQgPiAwKTsKQEAgLTQwMSw3ICs0MDYsMTEgQEAgY29zdF9zYW1wbGVzY2FuKFBhdGggKnBh dGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0 LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJf dHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChw YXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOworCisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdz X21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRoLT5zdGFy dHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29z dCArIHJ1bl9jb3N0OwogfQpAQCAtNDQwLDcgKzQ0OSw4IEBAIGNvc3RfZ2F0aGVyKEdhdGhlclBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXJhbGxlbF9z ZXR1cF9jb3N0OwogCXJ1bl9jb3N0ICs9IHBhcmFsbGVsX3R1cGxlX2Nvc3QgKiBwYXRoLT5wYXRo LnJvd3M7CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlz YWJsZWRfbm9kZXM7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgt PmRpc2FibGVkX25vZGVzCisJCSsgKChyZWwtPnBnc19tYXNrICYgUEdTX0dBVEhFUikgIT0gMCA/ IDAgOiAxKTsKIAlwYXRoLT5wYXRoLnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT5wYXRoLnRvdGFsX2Nvc3QgPSAoc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3QpOwogfQpAQCAtNTA2 LDggKzUxNiw4IEBAIGNvc3RfZ2F0aGVyX21lcmdlKEdhdGhlck1lcmdlUGF0aCAqcGF0aCwgUGxh bm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhcmFsbGVsX3NldHVwX2Nvc3Q7CiAJ cnVuX2Nvc3QgKz0gcGFyYWxsZWxfdHVwbGVfY29zdCAqIHBhdGgtPnBhdGgucm93cyAqIDEuMDU7 CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMKLQkJ KyAoZW5hYmxlX2dhdGhlcm1lcmdlID8gMCA6IDEpOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9k ZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNhYmxlZF9ub2RlcworCQkrICgocmVsLT5wZ3NfbWFzayAm IFBHU19HQVRIRVJfTUVSR0UpICE9IDAgPyAwIDogMSk7CiAJcGF0aC0+cGF0aC5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBpbnB1dF9zdGFydHVwX2Nvc3Q7CiAJcGF0aC0+cGF0aC50b3Rh bF9jb3N0ID0gKHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0ICsgaW5wdXRfdG90YWxfY29zdCk7CiB9 CkBAIC01NTcsNiArNTY3LDcgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJ bmZvICpyb290LCBkb3VibGUgbG9vcF9jb3VudCwKIAlkb3VibGUJCXBhZ2VzX2ZldGNoZWQ7CiAJ ZG91YmxlCQlyYW5kX2hlYXBfcGFnZXM7CiAJZG91YmxlCQlpbmRleF9wYWdlczsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0 aW9ucyAqLwogCUFzc2VydChJc0EoYmFzZXJlbCwgUmVsT3B0SW5mbykgJiYKQEAgLTU4OCw4ICs1 OTksMTEgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBk b3VibGUgbG9vcF9jb3VudCwKIAkJCQkJCQkJCQkJICBwYXRoLT5pbmRleGNsYXVzZXMpOwogCX0K IAotCS8qIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZW5hYmxlX2luZGV4b25seXNjYW47IGluZHhw YXRoLmMgZG9lcyB0aGF0ICovCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9p bmRleHNjYW4gPyAwIDogMTsKKwkvKiBpcyB0aGlzIHNjYW4gdHlwZSBkaXNhYmxlZD8gKi8KKwll bmFibGVfbWFzayA9IChpbmRleG9ubHkgPyBQR1NfSU5ERVhPTkxZU0NBTiA6IFBHU19JTkRFWFND QU4pCisJCXwgKHBhcnRpYWxfcGF0aCA/IDAgOiBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCk7CisJ cGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJs ZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCiAJLyoKIAkgKiBDYWxsIGluZGV4LWFj Y2Vzcy1tZXRob2Qtc3BlY2lmaWMgY29kZSB0byBlc3RpbWF0ZSB0aGUgcHJvY2Vzc2luZyBjb3N0 CkBAIC0xMDEwLDYgKzEwMjQsNyBAQCBjb3N0X2JpdG1hcF9oZWFwX3NjYW4oUGF0aCAqcGF0aCwg UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAJZG91YmxlCQlzcGNfc2Vx X3BhZ2VfY29zdCwKIAkJCQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKIAlkb3VibGUJCVQ7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19CSVRNQVBTQ0FOOwogCiAJLyogU2hvdWxkIG9ubHkgYmUg YXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChJc0EoYmFzZXJlbCwgUmVsT3B0 SW5mbykpOwpAQCAtMTA3NSw2ICsxMDkwLDggQEAgY29zdF9iaXRtYXBfaGVhcF9zY2FuKFBhdGgg KnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAogCiAJCXBhdGgt PnJvd3MgPSBjbGFtcF9yb3dfZXN0KHBhdGgtPnJvd3MgLyBwYXJhbGxlbF9kaXZpc29yKTsKIAl9 CisJZWxzZQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAogCiAJ cnVuX2Nvc3QgKz0gY3B1X3J1bl9jb3N0OwpAQCAtMTA4Myw3ICsxMTAwLDggQEAgY29zdF9iaXRt YXBfaGVhcF9zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpi YXNlcmVsLAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7 CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5y b3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfYml0bWFwc2NhbiA/IDAgOiAx OworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxl X21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3Rh cnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsK IH0KQEAgLTEyNDAsNiArMTI1OCw3IEBAIGNvc3RfdGlkc2NhbihQYXRoICpwYXRoLCBQbGFubmVy SW5mbyAqcm9vdCwKIAlkb3VibGUJCW50dXBsZXM7CiAJTGlzdENlbGwgICAqbDsKIAlkb3VibGUJ CXNwY19yYW5kb21fcGFnZV9jb3N0OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyog U2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNl cmVsLT5yZWxpZCA+IDApOwpAQCAtMTI2MSwxMCArMTI4MCwxMCBAQCBjb3N0X3RpZHNjYW4oUGF0 aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAKIAkJLyoKIAkJICogV2UgbXVzdCB1c2UgYSBU SUQgc2NhbiBmb3IgQ3VycmVudE9mRXhwcjsgaW4gYW55IG90aGVyIGNhc2UsIHdlCi0JCSAqIHNo b3VsZCBiZSBnZW5lcmF0aW5nIGEgVElEIHNjYW4gb25seSBpZiBlbmFibGVfdGlkc2Nhbj10cnVl LiBBbHNvLAotCQkgKiBpZiBDdXJyZW50T2ZFeHByIGlzIHRoZSBxdWFsLCB0aGVyZSBzaG91bGQg YmUgb25seSBvbmUuCisJCSAqIHNob3VsZCBiZSBnZW5lcmF0aW5nIGEgVElEIHNjYW4gb25seSBp ZiBUSUQgc2NhbnMgYXJlIGFsbG93ZWQuCisJCSAqIEFsc28sIGlmIEN1cnJlbnRPZkV4cHIgaXMg dGhlIHF1YWwsIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZS4KIAkJICovCi0JCUFzc2VydChlbmFi bGVfdGlkc2NhbiB8fCBJc0EocXVhbCwgQ3VycmVudE9mRXhwcikpOworCQlBc3NlcnQoKGJhc2Vy ZWwtPnBnc19tYXNrICYgUEdTX1RJRFNDQU4pICE9IDAgfHwgSXNBKHF1YWwsIEN1cnJlbnRPZkV4 cHIpKTsKIAkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHRpZHF1YWxzKSA9PSAxIHx8ICFJc0EocXVhbCwg Q3VycmVudE9mRXhwcikpOwogCiAJCWlmIChJc0EocXVhbCwgU2NhbGFyQXJyYXlPcEV4cHIpKQpA QCAtMTMxNiwxMCArMTMzNSwxNCBAQCBjb3N0X3RpZHNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAKIAkvKgogCSAqIFRoZXJlIGFyZSBhc3NlcnRpb25zIGFib3ZlIHZlcmlmeWlu ZyB0aGF0IHdlIG9ubHkgcmVhY2ggdGhpcyBmdW5jdGlvbgotCSAqIGVpdGhlciB3aGVuIGVuYWJs ZV90aWRzY2FuPXRydWUgb3Igd2hlbiB0aGUgVElEIHNjYW4gaXMgdGhlIG9ubHkgbGVnYWwKLQkg KiBwYXRoLCBzbyBpdCdzIHNhZmUgdG8gc2V0IGRpc2FibGVkX25vZGVzIHRvIHplcm8gaGVyZS4K KwkgKiBlaXRoZXIgd2hlbiBiYXNlcmVsLT5wZ3NfbWFzayBpbmNsdWRlcyBQR1NfVElEU0NBTiBv ciB3aGVuIHRoZSBUSUQgc2NhbgorCSAqIGlzIHRoZSBvbmx5IGxlZ2FsIHBhdGgsIHNvIHdlIG9u bHkgbmVlZCB0byBjb25zaWRlciB0aGUgZWZmZWN0cyBvZgorCSAqIFBHU19DT05TSURFUl9OT05Q QVJUSUFMIGhlcmUuCiAJICovCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChwYXRo LT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9O T05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNr ICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBy dW5fY29zdDsKIH0KQEAgLTEzNTAsNiArMTM3Myw3IEBAIGNvc3RfdGlkcmFuZ2VzY2FuKFBhdGgg KnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJbnNlcXBhZ2VzOwogCWRvdWJsZQkJ c3BjX3JhbmRvbV9wYWdlX2Nvc3Q7CiAJZG91YmxlCQlzcGNfc2VxX3BhZ2VfY29zdDsKKwl1aW50 NjQJCWVuYWJsZV9tYXNrID0gUEdTX1RJRFNDQU47CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBs aWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBA IC0xNDI4LDggKzE0NTIsMTUgQEAgY29zdF90aWRyYW5nZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJCXBhdGgtPnJvd3MgPSBjbGFtcF9yb3dfZXN0KHBhdGgtPnJvd3MgLyBw YXJhbGxlbF9kaXZpc29yKTsKIAl9CiAKLQkvKiB3ZSBzaG91bGQgbm90IGdlbmVyYXRlIHRoaXMg cGF0aCB0eXBlIHdoZW4gZW5hYmxlX3RpZHNjYW49ZmFsc2UgKi8KLQlBc3NlcnQoZW5hYmxlX3Rp ZHNjYW4pOworCS8qCisJICogV2Ugc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGlzIHBhdGggdHlwZSB3 aGVuIFBHU19USURTQ0FOIGlzIHVuc2V0LCBidXQgd2UKKwkgKiBtaWdodCBuZWVkIHRvIGRpc2Fi bGUgdGhpcyBwYXRoIGR1ZSB0byBQR1NfQ09OU0lERVJfTk9OUEFSVElBTC4KKwkgKi8KKwlBc3Nl cnQoKGJhc2VyZWwtPnBnc19tYXNrICYgUEdTX1RJRFNDQU4pICE9IDApOworCWlmIChwYXRoLT5w YXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05Q QVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYg ZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0aC0+ZGlzYWJsZWRfbm9k ZXMgPSAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3Rh bF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgY3B1X3J1bl9jb3N0ICsgZGlza19ydW5fY29zdDsKQEAg LTE0NTMsNiArMTQ4NCw3IEBAIGNvc3Rfc3VicXVlcnlzY2FuKFN1YnF1ZXJ5U2NhblBhdGggKnBh dGgsIFBsYW5uZXJJbmZvICpyb290LAogCUxpc3QJICAgKnFwcXVhbHM7CiAJUXVhbENvc3QJcXBx dWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0g MDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBh cmUgc3VicXVlcmllcyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTQ4Myw3 ICsxNTE1LDEwIEBAIGNvc3Rfc3VicXVlcnlzY2FuKFN1YnF1ZXJ5U2NhblBhdGggKnBhdGgsIFBs YW5uZXJJbmZvICpyb290LAogCSAqIFN1YnF1ZXJ5U2NhbiBub2RlLCBwbHVzIGNwdV90dXBsZV9j b3N0IHRvIGFjY291bnQgZm9yIHNlbGVjdGlvbiBhbmQKIAkgKiBwcm9qZWN0aW9uIG92ZXJoZWFk LgogCSAqLwotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNh YmxlZF9ub2RlczsKKwlpZiAocGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVu YWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPnBhdGguZGlzYWJs ZWRfbm9kZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNhYmxlZF9ub2RlcworCQkrICgoKGJhc2VyZWwt PnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrKSA/IDEgOiAwKTsKIAlwYXRo LT5wYXRoLnN0YXJ0dXBfY29zdCA9IHBhdGgtPnN1YnBhdGgtPnN0YXJ0dXBfY29zdDsKIAlwYXRo LT5wYXRoLnRvdGFsX2Nvc3QgPSBwYXRoLT5zdWJwYXRoLT50b3RhbF9jb3N0OwogCkBAIC0xNTM0 LDYgKzE1NjksNyBAQCBjb3N0X2Z1bmN0aW9uc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAlDb3N0CQljcHVfcGVyX3R1cGxlOwogCVJhbmdlVGJsRW50cnkgKnJ0ZTsKIAlRdWFs Q29zdAlleHByY29zdDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBv bmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBhcmUgZnVuY3Rpb25zICovCiAJ QXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xNTc0LDcgKzE2MTAsMTAgQEAgY29zdF9m dW5jdGlvbnNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0 ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5w YXRodGFyZ2V0LT5jb3N0LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxl X21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMg PQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAx IDogMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxf Y29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTU5Niw2ICsxNjM1LDcgQEAg Y29zdF90YWJsZWZ1bmNzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJ CWNwdV9wZXJfdHVwbGU7CiAJUmFuZ2VUYmxFbnRyeSAqcnRlOwogCVF1YWxDb3N0CWV4cHJjb3N0 OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGll ZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBmdW5jdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJl bC0+cmVsaWQgPiAwKTsKQEAgLTE2MzEsNyArMTY3MSwxMCBAQCBjb3N0X3RhYmxlZnVuY3NjYW4o UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBh dGh0YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5j b3N0LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7 CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdT X0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJl bC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRo LT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0 dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTY1MSw2ICsxNjk0LDcgQEAgY29zdF92YWx1ZXNz Y2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsK IAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJ ZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJl bGF0aW9ucyB0aGF0IGFyZSB2YWx1ZXMgbGlzdHMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQg PiAwKTsKQEAgLTE2NzksNyArMTcyMywxMCBAQCBjb3N0X3ZhbHVlc3NjYW4oUGF0aCAqcGF0aCwg UGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNv c3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnBlcl90dXBs ZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgt PnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05P TlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sg JiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1 bl9jb3N0OwogfQpAQCAtMTcwMiw2ICsxNzQ5LDcgQEAgY29zdF9jdGVzY2FuKFBhdGggKnBhdGgs IFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29zdAlxcHF1 YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAw OwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFy ZSBDVEVzICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xNzI3LDcgKzE3NzUs MTAgQEAgY29zdF9jdGVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0 dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0g cGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJ CWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVk X25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9t YXNrID8gMSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgt PnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE3NDQsNiArMTc5 NSw3IEBAIGNvc3RfbmFtZWR0dXBsZXN0b3Jlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29z dAkJY3B1X3Blcl90dXBsZTsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3Vs ZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBhcmUgVHVwbGVzdG9yZXMg Ki8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE3NjUsNyArMTgxNywxMCBAQCBj b3N0X25hbWVkdHVwbGVzdG9yZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJ Y3B1X3Blcl90dXBsZSArPSBjcHVfdHVwbGVfY29zdCArIHFwcXVhbF9jb3N0LnBlcl90dXBsZTsK IAlydW5fY29zdCArPSBjcHVfcGVyX3R1cGxlICogYmFzZXJlbC0+dHVwbGVzOwogCi0JcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJ CWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVk X25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9t YXNrID8gMSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgt PnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE3ODIsNiArMTgz Nyw3IEBAIGNvc3RfcmVzdWx0c2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlD b3N0CQlydW5fY29zdCA9IDA7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Bl cl90dXBsZTsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJl IGFwcGxpZWQgdG8gUlRFX1JFU1VMVCBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNlcmVs LT5yZWxpZCA+IDApOwpAQCAtMTgwMCw3ICsxODU2LDEwIEBAIGNvc3RfcmVzdWx0c2NhbihQYXRo ICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAljcHVfcGVyX3R1cGxlID0gY3B1X3R1cGxlX2Nv c3QgKyBxcHF1YWxfY29zdC5wZXJfdHVwbGU7CiAJcnVuX2Nvc3QgKz0gY3B1X3Blcl90dXBsZSAq IGJhc2VyZWwtPnR1cGxlczsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0 aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFz ayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBf Y29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsg cnVuX2Nvc3Q7CiB9CkBAIC0xODE4LDYgKzE4NzcsNyBAQCBjb3N0X3JlY3Vyc2l2ZV91bmlvbihQ YXRoICpydW5pb24sIFBhdGggKm5ydGVybSwgUGF0aCAqcnRlcm0pCiAJQ29zdAkJc3RhcnR1cF9j b3N0OwogCUNvc3QJCXRvdGFsX2Nvc3Q7CiAJZG91YmxlCQl0b3RhbF9yb3dzOworCXVpbnQ2NAkJ ZW5hYmxlX21hc2sgPSAwOwogCiAJLyogV2UgcHJvYmFibHkgaGF2ZSBkZWNlbnQgZXN0aW1hdGVz IGZvciB0aGUgbm9uLXJlY3Vyc2l2ZSB0ZXJtICovCiAJc3RhcnR1cF9jb3N0ID0gbnJ0ZXJtLT5z dGFydHVwX2Nvc3Q7CkBAIC0xODQwLDcgKzE5MDAsMTAgQEAgY29zdF9yZWN1cnNpdmVfdW5pb24o UGF0aCAqcnVuaW9uLCBQYXRoICpucnRlcm0sIFBhdGggKnJ0ZXJtKQogCSAqLwogCXRvdGFsX2Nv c3QgKz0gY3B1X3R1cGxlX2Nvc3QgKiB0b3RhbF9yb3dzOwogCi0JcnVuaW9uLT5kaXNhYmxlZF9u b2RlcyA9IG5ydGVybS0+ZGlzYWJsZWRfbm9kZXMgKyBydGVybS0+ZGlzYWJsZWRfbm9kZXM7CisJ aWYgKHJ1bmlvbi0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1Nf Q09OU0lERVJfTk9OUEFSVElBTDsKKwlydW5pb24tPmRpc2FibGVkX25vZGVzID0KKwkJKHJ1bmlv bi0+cGFyZW50LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAw OwogCXJ1bmlvbi0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXJ1bmlvbi0+dG90YWxf Y29zdCA9IHRvdGFsX2Nvc3Q7CiAJcnVuaW9uLT5yb3dzID0gdG90YWxfcm93czsKQEAgLTIxMTAs NyArMjE3MywxMSBAQCBjb3N0X2luY3JlbWVudGFsX3NvcnQoUGF0aCAqcGF0aCwKIAogCXBhdGgt PnJvd3MgPSBpbnB1dF90dXBsZXM7CiAKLQkvKiBzaG91bGQgbm90IGdlbmVyYXRlIHRoZXNlIHBh dGhzIHdoZW4gZW5hYmxlX2luY3JlbWVudGFsX3NvcnQ9ZmFsc2UgKi8KKwkvKgorCSAqIFdlIHNo b3VsZCBub3QgZ2VuZXJhdGUgdGhlc2UgcGF0aHMgd2hlbiBlbmFibGVfaW5jcmVtZW50YWxfc29y dD1mYWxzZS4KKwkgKiBXZSBjYW4gaWdub3JlIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGhlcmUs IGJlY2F1c2UgaWYgaXQncyByZWxldmFudCwKKwkgKiBpdCB3aWxsIGhhdmUgYWxyZWFkeSBhZmZl Y3RlZCB0aGUgaW5wdXQgcGF0aC4KKwkgKi8KIAlBc3NlcnQoZW5hYmxlX2luY3JlbWVudGFsX3Nv cnQpOwogCXBhdGgtPmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXM7CiAKQEAg LTIxNDgsNiArMjIxNSwxMCBAQCBjb3N0X3NvcnQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJv b3QsCiAKIAlzdGFydHVwX2Nvc3QgKz0gaW5wdXRfY29zdDsKIAorCS8qCisJICogV2UgY2FuIGln bm9yZSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBoZXJlLCBiZWNhdXNlIGlmIGl0J3MgcmVsZXZh bnQsCisJICogaXQgd2lsbCBoYXZlIGFscmVhZHkgYWZmZWN0ZWQgdGhlIGlucHV0IHBhdGguCisJ ICovCiAJcGF0aC0+cm93cyA9IHR1cGxlczsKIAlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0 X2Rpc2FibGVkX25vZGVzICsgKGVuYWJsZV9zb3J0ID8gMCA6IDEpOwogCXBhdGgtPnN0YXJ0dXBf Y29zdCA9IHN0YXJ0dXBfY29zdDsKQEAgLTIyMzksOSArMjMxMCwxNSBAQCBhcHBlbmRfbm9ucGFy dGlhbF9jb3N0KExpc3QgKnN1YnBhdGhzLCBpbnQgbnVtcGF0aHMsIGludCBwYXJhbGxlbF93b3Jr ZXJzKQogdm9pZAogY29zdF9hcHBlbmQoQXBwZW5kUGF0aCAqYXBhdGgsIFBsYW5uZXJJbmZvICpy b290KQogeworCVJlbE9wdEluZm8gKnJlbCA9IGFwYXRoLT5wYXRoLnBhcmVudDsKIAlMaXN0Q2Vs bCAgICpsOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfQVBQRU5EOworCisJaWYgKGFwYXRo LT5wYXRoLnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJ REVSX05PTlBBUlRJQUw7CiAKLQlhcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IDA7CisJYXBh dGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPQorCQkocmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNr KSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCWFwYXRoLT5wYXRoLnN0YXJ0dXBfY29zdCA9IDA7 CiAJYXBhdGgtPnBhdGgudG90YWxfY29zdCA9IDA7CiAJYXBhdGgtPnBhdGgucm93cyA9IDA7CkBA IC0yNDUxLDExICsyNTI4LDE2IEBAIGNvc3RfbWVyZ2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5u ZXJJbmZvICpyb290LAogCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRf dG90YWxfY29zdCwKIAkJCQkgIGRvdWJsZSB0dXBsZXMpCiB7CisJUmVsT3B0SW5mbyAqcmVsID0g cGF0aC0+cGFyZW50OwogCUNvc3QJCXN0YXJ0dXBfY29zdCA9IDA7CiAJQ29zdAkJcnVuX2Nvc3Qg PSAwOwogCUNvc3QJCWNvbXBhcmlzb25fY29zdDsKIAlkb3VibGUJCU47CiAJZG91YmxlCQlsb2dO OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfTUVSR0VfQVBQRU5EOworCisJaWYgKHBhdGgt PnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05P TlBBUlRJQUw7CiAKIAkvKgogCSAqIEF2b2lkIGxvZygwKS4uLgpAQCAtMjQ3OCw3ICsyNTYwLDkg QEAgY29zdF9tZXJnZV9hcHBlbmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICov CiAJcnVuX2Nvc3QgKz0gY3B1X3R1cGxlX2Nvc3QgKiBBUFBFTkRfQ1BVX0NPU1RfTVVMVElQTElF UiAqIHR1cGxlczsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9k ZXM7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkocmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9t YXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOworCXBhdGgtPmRpc2FibGVkX25vZGVzICs9IGlu cHV0X2Rpc2FibGVkX25vZGVzOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdCAr IGlucHV0X3N0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsg cnVuX2Nvc3QgKyBpbnB1dF90b3RhbF9jb3N0OwogfQpAQCAtMjQ5Nyw3ICsyNTgxLDcgQEAgY29z dF9tZXJnZV9hcHBlbmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAgKi8KIHZvaWQK IGNvc3RfbWF0ZXJpYWwoUGF0aCAqcGF0aCwKLQkJCSAgaW50IGlucHV0X2Rpc2FibGVkX25vZGVz LAorCQkJICBib29sIGVuYWJsZWQsIGludCBpbnB1dF9kaXNhYmxlZF9ub2RlcywKIAkJCSAgQ29z dCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRfdG90YWxfY29zdCwKIAkJCSAgZG91Ymxl IHR1cGxlcywgaW50IHdpZHRoKQogewpAQCAtMjUwNiw2ICsyNTkwLDExIEBAIGNvc3RfbWF0ZXJp YWwoUGF0aCAqcGF0aCwKIAlkb3VibGUJCW5ieXRlcyA9IHJlbGF0aW9uX2J5dGVfc2l6ZSh0dXBs ZXMsIHdpZHRoKTsKIAlkb3VibGUJCXdvcmtfbWVtX2J5dGVzID0gd29ya19tZW0gKiAoU2l6ZSkg MTAyNDsKIAorCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDAgJiYKKwkJcGF0aC0+cGFy ZW50ICE9IE5VTEwgJiYKKwkJKHBhdGgtPnBhcmVudC0+cGdzX21hc2sgJiBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTCkgPT0gMCkKKwkJZW5hYmxlZCA9IGZhbHNlOworCiAJcGF0aC0+cm93cyA9IHR1 cGxlczsKIAogCS8qCkBAIC0yNTM1LDcgKzI2MjQsNyBAQCBjb3N0X21hdGVyaWFsKFBhdGggKnBh dGgsCiAJCXJ1bl9jb3N0ICs9IHNlcV9wYWdlX2Nvc3QgKiBucGFnZXM7CiAJfQogCi0JcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlcyArIChlbmFibGVfbWF0ZXJpYWwg PyAwIDogMSk7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlcyAr IChlbmFibGVkID8gMCA6IDEpOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsK IAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0zMjg3 LDcgKzMzNzYsNyBAQCBjb3N0X2dyb3VwKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAog ICovCiB2b2lkCiBpbml0aWFsX2Nvc3RfbmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3QsIEpvaW5D b3N0V29ya3NwYWNlICp3b3Jrc3BhY2UsCi0JCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJ CSAgSm9pblR5cGUgam9pbnR5cGUsIHVpbnQ2NCBlbmFibGVfbWFzaywKIAkJCQkJICBQYXRoICpv dXRlcl9wYXRoLCBQYXRoICppbm5lcl9wYXRoLAogCQkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpl eHRyYSkKIHsKQEAgLTMzMDEsNyArMzM5MCw3IEBAIGluaXRpYWxfY29zdF9uZXN0bG9vcChQbGFu bmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3BhY2UgKndvcmtzcGFjZSwKIAlDb3N0CQlpbm5l cl9yZXNjYW5fcnVuX2Nvc3Q7CiAKIAkvKiBDb3VudCB1cCBkaXNhYmxlZCBub2Rlcy4gKi8KLQlk aXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9uZXN0bG9vcCA/IDAgOiAxOworCWRpc2FibGVkX25vZGVz ID0gKGV4dHJhLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAx OwogCWRpc2FibGVkX25vZGVzICs9IGlubmVyX3BhdGgtPmRpc2FibGVkX25vZGVzOwogCWRpc2Fi bGVkX25vZGVzICs9IG91dGVyX3BhdGgtPmRpc2FibGVkX25vZGVzOwogCkBAIC0zNzAxLDcgKzM3 OTAsMTkgQEAgaW5pdGlhbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwgSm9pbkNv c3RXb3Jrc3BhY2UgKndvcmtzcGFjZSwKIAlBc3NlcnQob3V0ZXJzdGFydHNlbCA8PSBvdXRlcmVu ZHNlbCk7CiAJQXNzZXJ0KGlubmVyc3RhcnRzZWwgPD0gaW5uZXJlbmRzZWwpOwogCi0JZGlzYWJs ZWRfbm9kZXMgPSBlbmFibGVfbWVyZ2Vqb2luID8gMCA6IDE7CisJLyoKKwkgKiBXZSBkb24ndCBk ZWNpZGUgd2hldGhlciB0byBtYXRlcmlhbGl6ZSB0aGUgaW5uZXIgcGF0aCB1bnRpbCB3ZSBnZXQg dG8KKwkgKiBmaW5hbF9jb3N0X21lcmdlam9pbigpLCBzbyB3ZSBkb24ndCBrbm93IHdoZXRoZXIg dG8gY2hlY2sgdGhlIHBnc19tYXNrCisJICogYWdhaW4gUEdTX01FUkdFSk9JTl9QTEFJTiBvciBQ R1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFLiBJbnN0ZWFkLCB3ZQorCSAqIGp1c3QgYWNjb3VudCBm b3IgYW55IGNoaWxkIG5vZGVzIGhlcmUgYW5kIGFzc3VtZSB0aGF0IHRoaXMgbm9kZSBpcyBub3QK KwkgKiBpdHNsZWYgZGlzYWJsZWQ7IHdlIGNhbiBzb3J0IG91dCB0aGUgZGV0YWlscyBpbiBmaW5h bF9jb3N0X21lcmdlam9pbigpLgorCSAqCisJICogKFdlIGNvdWxkIGJlIG1vcmUgcHJlY2lzZSBo ZXJlIGJ5IHNldHRpbmcgZGlzYWJsZWRfbm9kZXMgdG8gMSBhdCB0aGlzCisJICogc3RhZ2UgaWYg Ym90aCBQR1NfTUVSR0VKT0lOX1BMQUlOIGFuZCBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFIGFy ZQorCSAqIGRpc2FibGVkLCBidXQgdGhhdCBzZWVtcyB0byBhZ2FpbnN0IHRoZSBpZGVhIG9mIG1h a2luZyB0aGlzIGZ1bmN0aW9uCisJICogcHJvZHVjZSBhIHF1aWNrLCBvcHRpbWlzdGljIGFwcHJv eGltYXRpb24gb2YgdGhlIGZpbmFsIGNvc3QuKQorCSAqLworCWRpc2FibGVkX25vZGVzID0gMDsK IAogCS8qIGNvc3Qgb2Ygc291cmNlIGRhdGEgKi8KIApAQCAtMzg4MCw5ICszOTgxLDcgQEAgZmlu YWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAlk b3VibGUJCW1lcmdlam9pbnR1cGxlcywKIAkJCQlyZXNjYW5uZWR0dXBsZXM7CiAJZG91YmxlCQly ZXNjYW5yYXRpbzsKLQotCS8qIFNldCB0aGUgbnVtYmVyIG9mIGRpc2FibGVkIG5vZGVzLiAqLwot CXBhdGgtPmpwYXRoLnBhdGguZGlzYWJsZWRfbm9kZXMgPSB3b3Jrc3BhY2UtPmRpc2FibGVkX25v ZGVzOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogUHJvdGVjdCBzb21lIGFzc3Vt cHRpb25zIGJlbG93IHRoYXQgcm93Y291bnRzIGFyZW4ndCB6ZXJvICovCiAJaWYgKGlubmVyX3Bh dGhfcm93cyA8PSAwKQpAQCAtNDAxMiwxNiArNDExMSwyMCBAQCBmaW5hbF9jb3N0X21lcmdlam9p bihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VQYXRoICpwYXRoLAogCQlwYXRoLT5tYXRlcmlhbGl6 ZV9pbm5lciA9IGZhbHNlOwogCiAJLyoKLQkgKiBQcmVmZXIgbWF0ZXJpYWxpemluZyBpZiBpdCBs b29rcyBjaGVhcGVyLCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFza2VkIHRvCi0JICogc3VwcHJlc3Mg bWF0ZXJpYWxpemF0aW9uLgorCSAqIElmIG1lcmdlIGpvaW5zIHdpdGggbWF0ZXJpYWxpemF0aW9u IGFyZSBlbmFibGVkLCB0aGVuIGNob29zZQorCSAqIG1hdGVyaWFsaXphdGlvbiBpZiBlaXRoZXIg KGEpIGl0IGxvb2tzIGNoZWFwZXIgb3IgKGIpIG1lcmdlIGpvaW5zCisJICogd2l0aG91dCBtYXRl cmlhbGl6YXRpb24gYXJlIGRpc2FibGVkLgogCSAqLwotCWVsc2UgaWYgKGVuYWJsZV9tYXRlcmlh bCAmJiBtYXRfaW5uZXJfY29zdCA8IGJhcmVfaW5uZXJfY29zdCkKKwllbHNlIGlmICgoZXh0cmEt PnBnc19tYXNrICYgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJIChtYXRf aW5uZXJfY29zdCA8IGJhcmVfaW5uZXJfY29zdCB8fAorCQkJICAoZXh0cmEtPnBnc19tYXNrICYg UEdTX01FUkdFSk9JTl9QTEFJTikgPT0gMCkpCiAJCXBhdGgtPm1hdGVyaWFsaXplX2lubmVyID0g dHJ1ZTsKIAogCS8qCi0JICogRXZlbiBpZiBtYXRlcmlhbGl6aW5nIGRvZXNuJ3QgbG9vayBjaGVh cGVyLCB3ZSAqbXVzdCogZG8gaXQgaWYgdGhlCi0JICogaW5uZXIgcGF0aCBpcyB0byBiZSB1c2Vk IGRpcmVjdGx5ICh3aXRob3V0IHNvcnRpbmcpIGFuZCBpdCBkb2Vzbid0Ci0JICogc3VwcG9ydCBt YXJrL3Jlc3RvcmUuCisJICogUmVnYXJkbGVzcyBvZiB3aGF0IHBsYW4gc2hhcGVzIGFyZSBlbmFi bGVkIGFuZCB3aGF0IHRoZSBjb3N0cyBzZWVtIHRvCisJICogYmUsIHdlICptdXN0KiBtYXRlcmlh bGl6ZSBpdCBpZiB0aGUgaW5uZXIgcGF0aCBpcyB0byBiZSB1c2VkIGRpcmVjdGx5CisJICogKHdp dGhvdXQgc29ydGluZykgYW5kIGl0IGRvZXNuJ3Qgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuIFBsYW5u ZXIgZmFpbHVyZQorCSAqIGlzIG5vdCBhbiBvcHRpb24hCiAJICoKIAkgKiBTaW5jZSB0aGUgaW5u ZXIgc2lkZSBtdXN0IGJlIG9yZGVyZWQsIGFuZCBvbmx5IFNvcnRzIGFuZCBJbmRleFNjYW5zIGNh bgogCSAqIGNyZWF0ZSBvcmRlciB0byBiZWdpbiB3aXRoLCBhbmQgdGhleSBib3RoIHN1cHBvcnQg bWFyay9yZXN0b3JlLCB5b3UKQEAgLTQwMjksMTAgKzQxMzIsNiBAQCBmaW5hbF9jb3N0X21lcmdl am9pbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VQYXRoICpwYXRoLAogCSAqIG1lcmdlIGpvaW5z IGNhbiAqcHJlc2VydmUqIHRoZSBvcmRlciBvZiB0aGVpciBpbnB1dHMsIHNvIHRoZXkgY2FuIGJl CiAJICogc2VsZWN0ZWQgYXMgdGhlIGlucHV0IG9mIGEgbWVyZ2Vqb2luLCBhbmQgdGhleSBkb24n dCBzdXBwb3J0CiAJICogbWFyay9yZXN0b3JlIGF0IHByZXNlbnQuCi0JICoKLQkgKiBXZSBkb24n dCB0ZXN0IHRoZSB2YWx1ZSBvZiBlbmFibGVfbWF0ZXJpYWwgaGVyZSwgYmVjYXVzZQotCSAqIG1h dGVyaWFsaXphdGlvbiBpcyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBh bmQgdHVybmluZwotCSAqIGl0IG9mZiBkb2VzIG5vdCBlbnRpdGxlIHVzIHRvIGRlbGl2ZXIgYW4g aW52YWxpZCBwbGFuLgogCSAqLwogCWVsc2UgaWYgKGlubmVyc29ydGtleXMgPT0gTklMICYmCiAJ CQkgIUV4ZWNTdXBwb3J0c01hcmtSZXN0b3JlKGlubmVyX3BhdGgpKQpAQCAtNDA0NiwxMCArNDE0 NSwxMSBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VQYXRo ICpwYXRoLAogCSAqIHRob3VnaC4KIAkgKgogCSAqIFNpbmNlIG1hdGVyaWFsaXphdGlvbiBpcyBh IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBpbiB0aGlzIGNhc2UsCi0JICogcmF0aGVyIHRoYW4g bmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywgd2Ugc2tpcCBpdCBpZiBlbmFibGVfbWF0ZXJpYWwg aXMKLQkgKiBvZmYuCisJICogcmF0aGVyIHRoYW4gbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywg d2Ugc2tpcCBpdCBpZiBtYXRlcmlhbGl6YXRpb24gaXMKKwkgKiBzd2l0Y2hlZCBvZmYuCiAJICov Ci0JZWxzZSBpZiAoZW5hYmxlX21hdGVyaWFsICYmIGlubmVyc29ydGtleXMgIT0gTklMICYmCisJ ZWxzZSBpZiAoKGV4dHJhLT5wZ3NfbWFzayAmIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUpICE9 IDAgJiYKKwkJCSBpbm5lcnNvcnRrZXlzICE9IE5JTCAmJgogCQkJIHJlbGF0aW9uX2J5dGVfc2l6 ZShpbm5lcl9wYXRoX3Jvd3MsCiAJCQkJCQkJCWlubmVyX3BhdGgtPnBhdGh0YXJnZXQtPndpZHRo KSA+CiAJCQkgd29ya19tZW0gKiAoU2l6ZSkgMTAyNCkKQEAgLTQwNTcsMTEgKzQxNTcsMjkgQEAg ZmluYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwK IAllbHNlCiAJCXBhdGgtPm1hdGVyaWFsaXplX2lubmVyID0gZmFsc2U7CiAKLQkvKiBDaGFyZ2Ug dGhlIHJpZ2h0IGluY3JlbWVudGFsIGNvc3QgZm9yIHRoZSBjaG9zZW4gY2FzZSAqLworCS8qIEdl dCB0aGUgbnVtYmVyIG9mIGRpc2FibGVkIG5vZGVzLCBub3QgeWV0IGluY2x1ZGluZyB0aGlzIG9u ZS4gKi8KKwlwYXRoLT5qcGF0aC5wYXRoLmRpc2FibGVkX25vZGVzID0gd29ya3NwYWNlLT5kaXNh YmxlZF9ub2RlczsKKworCS8qCisJICogQ2hhcmdlIHRoZSByaWdodCBpbmNyZW1lbnRhbCBjb3N0 IGZvciB0aGUgY2hvc2VuIGNhc2UsIGFuZCB1cGRhdGUKKwkgKiBlbmFibGVfbWFzayBhcyBhcHBy b3ByaWF0ZS4KKwkgKi8KIAlpZiAocGF0aC0+bWF0ZXJpYWxpemVfaW5uZXIpCisJewogCQlydW5f Y29zdCArPSBtYXRfaW5uZXJfY29zdDsKKwkJZW5hYmxlX21hc2sgfD0gUEdTX01FUkdFSk9JTl9N QVRFUklBTElaRTsKKwl9CiAJZWxzZQorCXsKIAkJcnVuX2Nvc3QgKz0gYmFyZV9pbm5lcl9jb3N0 OworCQllbmFibGVfbWFzayB8PSBQR1NfTUVSR0VKT0lOX1BMQUlOOworCX0KKworCS8qIEluY3Jl bWVudGFsIGNvdW50IG9mIGRpc2FibGVkIG5vZGVzIGlmIHRoaXMgbm9kZSBpcyBkaXNhYmxlZC4g Ki8KKwlpZiAocGF0aC0+anBhdGgucGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJs ZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCWlmICgoZXh0cmEtPnBnc19tYXNr ICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrKQorCQkrK3BhdGgtPmpwYXRoLnBhdGguZGlz YWJsZWRfbm9kZXM7CiAKIAkvKiBDUFUgY29zdHMgKi8KIApAQCAtNDE5OSw5ICs0MzE3LDEzIEBA IGluaXRpYWxfY29zdF9oYXNoam9pbihQbGFubmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3Bh Y2UgKndvcmtzcGFjZSwKIAlpbnQJCQludW1iYXRjaGVzOwogCWludAkJCW51bV9za2V3X21jdnM7 CiAJc2l6ZV90CQlzcGFjZV9hbGxvd2VkOwkvKiB1bnVzZWQgKi8KKwl1aW50NjQJCWVuYWJsZV9t YXNrID0gUEdTX0hBU0hKT0lOOworCisJaWYgKG91dGVyX3BhdGgtPnBhcmFsbGVsX3dvcmtlcnMg PT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CiAKIAkvKiBD b3VudCB1cCBkaXNhYmxlZCBub2Rlcy4gKi8KLQlkaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9oYXNo am9pbiA/IDAgOiAxOworCWRpc2FibGVkX25vZGVzID0gKGV4dHJhLT5wZ3NfbWFzayAmIGVuYWJs ZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCWRpc2FibGVkX25vZGVzICs9IGlubmVy X3BhdGgtPmRpc2FibGVkX25vZGVzOwogCWRpc2FibGVkX25vZGVzICs9IG91dGVyX3BhdGgtPmRp c2FibGVkX25vZGVzOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9p bmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCA1 MWI5ZDY2NzdkMy4uNjU1NTY1MTZiNmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBh dGguYwpAQCAtMjIzNCw4ICsyMjM0LDggQEAgY2hlY2tfaW5kZXhfb25seShSZWxPcHRJbmZvICpy ZWwsIEluZGV4T3B0SW5mbyAqaW5kZXgpCiAJTGlzdENlbGwgICAqbGM7CiAJaW50CQkJaTsKIAot CS8qIEluZGV4LW9ubHkgc2NhbnMgbXVzdCBiZSBlbmFibGVkICovCi0JaWYgKCFlbmFibGVfaW5k ZXhvbmx5c2NhbikKKwkvKiBJZiB3ZSdyZSBub3QgYWxsb3dlZCB0byBjb25zaWRlciBpbmRleC1v bmx5IHNjYW5zLCBnaXZlIHVwIG5vdyAqLworCWlmICgocmVsLT5wZ3NfbWFzayAmIFBHU19DT05T SURFUl9JTkRFWE9OTFkpID09IDApCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvam9pbnBhdGguYwppbmRleCA3YTI0NzQ5M2EzOS4uNjQ5ZWQ1ZjE3MDAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYwpAQCAtMjksOCArMjksOSBAQAogI2lu Y2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAK LS8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gYWRkX3BhdGhzX3RvX2pvaW5y ZWwoKSAqLworLyogSG9va3MgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gYWRkX3BhdGhz X3RvX2pvaW5yZWwoKSAqLwogc2V0X2pvaW5fcGF0aGxpc3RfaG9va190eXBlIHNldF9qb2luX3Bh dGhsaXN0X2hvb2sgPSBOVUxMOworam9pbl9wYXRoX3NldHVwX2hvb2tfdHlwZSBqb2luX3BhdGhf c2V0dXBfaG9vayA9IE5VTEw7CiAKIC8qCiAgKiBQYXRocyBwYXJhbWV0ZXJpemVkIGJ5IGEgcGFy ZW50IHJlbCBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSBwYXJhbWV0ZXJpemVkCkBAIC0xNTEsNiAr MTUyLDMzIEBAIGFkZF9wYXRoc190b19qb2lucmVsKFBsYW5uZXJJbmZvICpyb290LAogCWV4dHJh Lm1lcmdlY2xhdXNlX2xpc3QgPSBOSUw7CiAJZXh0cmEuc2ppbmZvID0gc2ppbmZvOwogCWV4dHJh LnBhcmFtX3NvdXJjZV9yZWxzID0gTlVMTDsKKwlleHRyYS5wZ3NfbWFzayA9IGpvaW5yZWwtPnBn c19tYXNrOworCisJLyoKKwkgKiBHaXZlIGV4dGVuc2lvbnMgYSBjaGFuY2UgdG8gdGFrZSBjb250 cm9sLiBJbiBwYXJ0aWN1bGFyLCBhbiBleHRlbnNpb24KKwkgKiBtaWdodCB3YW50IHRvIG1vZGlm eSBleHRyYS5wZ3NfbWFzay4gSXQncyBwb3NzaWJsZSB0byBvdmVycmlkZSBwZ3NfbWFzaworCSAq IG9uIGEgcXVlcnktd2lkZSBiYXNpcyB1c2luZyBqb2luX3NlYXJjaF9ob29rLCBvciBmb3IgYSBw YXJ0aWN1bGFyCisJICogcmVsYXRpb24gdXNpbmcgam9pbnJlbF9zZXR1cF9ob29rLCBidXQgZXh0 ZW5zaW9ucyB0aGF0IHdhbnQgdG8gcHJvdmlkZQorCSAqIGRpZmZlcmVudCBhZHZpY2UgZm9yIHRo ZSBzYW1lIGpvaW5yZWwgYmFzZWQgb24gdGhlIGNob2ljZSBvZiBpbm5lcnJlbAorCSAqIGFuZCBv dXRlcnJlbCB3aWxsIG5lZWQgdG8gdXNlIHRoaXMgaG9vay4KKwkgKgorCSAqIEEgdmVyeSBzaW1w bGUgd2F5IGZvciBhbiBleHRlbnNpb24gdG8gdXNlIHRoaXMgaG9vayBpcyB0byBzZXQKKwkgKiBl eHRyYS5wZ3NfbWFzayAmPSB+UEdTX0pPSU5fQU5ZLCBpZiBpdCBzaW1wbHkgZG9lc24ndCB3YW50 IGFueSBvZiB0aGUKKwkgKiBwYXRocyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxsIHRvIGFkZF9wYXRo c190b19qb2lucmVsKCkgdG8gYmUgc2VsZWN0ZWQuCisJICogQW4gZXh0ZW5zaW9uIGNvdWxkIHVz ZSB0aGlzIHRlY2huaXF1ZSB0byBjb25zdHJhaW4gdGhlIGpvaW4gb3JkZXIsCisJICogc2luY2Ug aXQgY291bGQgdGhlcmVieSBhcnJhbmdlIHRvIHJlamVjdCBhbGwgcGF0aHMgZnJvbSBqb2luIG9y ZGVycworCSAqIHRoYXQgaXQgZG9lcyBub3QgbGlrZS4gQW4gZXh0ZW5zaW9uIGNhbiBhbHNvIHNl bGVjdGl2ZWx5IGNsZWFyIGJpdHMKKwkgKiBmcm9tIGV4dHJhLnBnc19tYXNrIHRvIHJ1bGUgb3V0 IHNwZWNpZmljIHRlY2huaXF1ZXMgZm9yIHNwZWNpZmljIGpvaW5zLAorCSAqIG9yIGNvdWxkIGV2 ZW4gc2V0IGFkZGl0aW9uYWwgYml0cyB0byByZS1hbGxvdyBtZXRob2RzIGRpc2FibGVkIGF0IHNv bWUKKwkgKiBoaWdoZXIgbGV2ZWwuCisJICoKKwkgKiBOQjogQmVsb3cgdGhpcyBwb2ludCwgdGhp cyBmdW5jdGlvbiBzaG91bGQgYmUgY2FyZWZ1bCB0byByZWZlcmVuY2UKKwkgKiBleHRyYS5wZ3Nf bWFzayByYXRoZXIgdGhhbiByZWwtPnBnc19tYXNrIHRvIGF2b2lkIGRpc3JlZ2FyZGluZyBhbnkK KwkgKiBjaGFuZ2VzIG1hZGUgYnkgdGhlIGhvb2sgd2UncmUgYWJvdXQgdG8gY2FsbC4KKwkgKi8K KwlpZiAoam9pbl9wYXRoX3NldHVwX2hvb2spCisJCWpvaW5fcGF0aF9zZXR1cF9ob29rKHJvb3Qs IGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkgam9pbnR5cGUsICZleHRyYSk7 CiAKIAkvKgogCSAqIFNlZSBpZiB0aGUgaW5uZXIgcmVsYXRpb24gaXMgcHJvdmFibHkgdW5pcXVl IGZvciB0aGlzIG91dGVyIHJlbC4KQEAgLTIxMCwxMCArMjM4LDEwIEBAIGFkZF9wYXRoc190b19q b2lucmVsKFBsYW5uZXJJbmZvICpyb290LAogCS8qCiAJICogRmluZCBwb3RlbnRpYWwgbWVyZ2Vq b2luIGNsYXVzZXMuICBXZSBjYW4gc2tpcCB0aGlzIGlmIHdlIGFyZSBub3QKIAkgKiBpbnRlcmVz dGVkIGluIGRvaW5nIGEgbWVyZ2Vqb2luLiAgSG93ZXZlciwgbWVyZ2Vqb2luIG1heSBiZSBvdXIg b25seQotCSAqIHdheSBvZiBpbXBsZW1lbnRpbmcgYSBmdWxsIG91dGVyIGpvaW4sIHNvIG92ZXJy aWRlIGVuYWJsZV9tZXJnZWpvaW4gaWYKLQkgKiBpdCdzIGEgZnVsbCBqb2luLgorCSAqIHdheSBv ZiBpbXBsZW1lbnRpbmcgYSBmdWxsIG91dGVyIGpvaW4sIHNvIGluIHRoYXQgY2FzZSB3ZSBkb24n dCBjYXJlCisJICogd2hldGhlciBtZXJnZWpvaW5zIGFyZSBkaXNhYmxlZC4KIAkgKi8KLQlpZiAo ZW5hYmxlX21lcmdlam9pbiB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCisJaWYgKChleHRyYS5w Z3NfbWFzayAmIFBHU19NRVJHRUpPSU5fQU5ZKSAhPSAwIHx8IGpvaW50eXBlID09IEpPSU5fRlVM TCkKIAkJZXh0cmEubWVyZ2VjbGF1c2VfbGlzdCA9IHNlbGVjdF9tZXJnZWpvaW5fY2xhdXNlcyhy b290LAogCQkJCQkJCQkJCQkJCQkgIGpvaW5yZWwsCiAJCQkJCQkJCQkJCQkJCSAgb3V0ZXJyZWws CkBAIC0zMjEsMTAgKzM0OSwxMCBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5mbyAq cm9vdCwKIAogCS8qCiAJICogNC4gQ29uc2lkZXIgcGF0aHMgd2hlcmUgYm90aCBvdXRlciBhbmQg aW5uZXIgcmVsYXRpb25zIG11c3QgYmUgaGFzaGVkCi0JICogYmVmb3JlIGJlaW5nIGpvaW5lZC4g IEFzIGFib3ZlLCBkaXNyZWdhcmQgZW5hYmxlX2hhc2hqb2luIGZvciBmdWxsCi0JICogam9pbnMs IGJlY2F1c2UgdGhlcmUgbWF5IGJlIG5vIG90aGVyIGFsdGVybmF0aXZlLgorCSAqIGJlZm9yZSBi ZWluZyBqb2luZWQuICBBcyBhYm92ZSwgd2hlbiBpdCdzIGEgZnVsbCBqb2luLCB3ZSBtdXN0IHRy eSB0aGlzCisJICogZXZlbiB3aGVuIHRoZSBwYXRoIHR5cGUgaXMgZGlzYWJsZWQsIGJlY2F1c2Ug aXQgbWF5IGJlIG91ciBvbmx5IG9wdGlvbi4KIAkgKi8KLQlpZiAoZW5hYmxlX2hhc2hqb2luIHx8 IGpvaW50eXBlID09IEpPSU5fRlVMTCkKKwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX0hBU0hK T0lOKSAhPSAwIHx8IGpvaW50eXBlID09IEpPSU5fRlVMTCkKIAkJaGFzaF9pbm5lcl9hbmRfb3V0 ZXIocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLAogCQkJCQkJCSBqb2ludHlwZSwg JmV4dHJhKTsKIApAQCAtMzMzLDcgKzM2MSw3IEBAIGFkZF9wYXRoc190b19qb2lucmVsKFBsYW5u ZXJJbmZvICpyb290LAogCSAqIHRvIHRoZSBzYW1lIHNlcnZlciBhbmQgYXNzaWduZWQgdG8gdGhl IHNhbWUgdXNlciB0byBjaGVjayBhY2Nlc3MKIAkgKiBwZXJtaXNzaW9ucyBhcywgZ2l2ZSB0aGUg RkRXIGEgY2hhbmNlIHRvIHB1c2ggZG93biBqb2lucy4KIAkgKi8KLQlpZiAoam9pbnJlbC0+ZmR3 cm91dGluZSAmJgorCWlmICgoZXh0cmEucGdzX21hc2sgJiBQR1NfRk9SRUlHTkpPSU4pICE9IDAg JiYgam9pbnJlbC0+ZmR3cm91dGluZSAmJgogCQlqb2lucmVsLT5mZHdyb3V0aW5lLT5HZXRGb3Jl aWduSm9pblBhdGhzKQogCQlqb2lucmVsLT5mZHdyb3V0aW5lLT5HZXRGb3JlaWduSm9pblBhdGhz KHJvb3QsIGpvaW5yZWwsCiAJCQkJCQkJCQkJCQkgb3V0ZXJyZWwsIGlubmVycmVsLApAQCAtMzQy LDggKzM3MCwxMyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5mbyAqcm9vdCwKIAkv KgogCSAqIDYuIEZpbmFsbHksIGdpdmUgZXh0ZW5zaW9ucyBhIGNoYW5jZSB0byBtYW5pcHVsYXRl IHRoZSBwYXRoIGxpc3QuICBUaGV5CiAJICogY291bGQgYWRkIG5ldyBwYXRocyAoc3VjaCBhcyBD dXN0b21QYXRocykgYnkgY2FsbGluZyBhZGRfcGF0aCgpLCBvcgotCSAqIGFkZF9wYXJ0aWFsX3Bh dGgoKSBpZiBwYXJhbGxlbCBhd2FyZS4gIFRoZXkgY291bGQgYWxzbyBkZWxldGUgb3IgbW9kaWZ5 Ci0JICogcGF0aHMgYWRkZWQgYnkgdGhlIGNvcmUgY29kZS4KKwkgKiBhZGRfcGFydGlhbF9wYXRo KCkgaWYgcGFyYWxsZWwgYXdhcmUuCisJICoKKwkgKiBJbiB0aGVvcnksIGV4dGVuc2lvbnMgY291 bGQgYWxzbyB1c2UgdGhpcyBob29rIHRvIGRlbGV0ZSBvciBtb2RpZnkKKwkgKiBwYXRocyBhZGRl ZCBieSB0aGUgY29yZSBjb2RlLCBidXQgaW4gcHJhY3RpY2UgdGhpcyBpcyBkaWZmaWN1bHQgdG8g bWFrZQorCSAqIHdvcmssIHNpbmNlIGl0J3MgdG9vIGxhdGUgdG8gZ2V0IGJhY2sgYW55IHBhdGhz IHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4KKwkgKiBkaXNjYXJkZWQgYnkgYWRkX3BhdGgoKSBvciBh ZGRfcGFydGlhbF9wYXRoKCkuIElmIHlvdSdyZSB0cnlpbmcgdG8KKwkgKiBzdXBwcmVzcyBwYXRo cywgY29uc2lkZXIgdXNpbmcgam9pbl9wYXRoX3NldHVwX2hvb2sgaW5zdGVhZC4KIAkgKi8KIAlp ZiAoc2V0X2pvaW5fcGF0aGxpc3RfaG9vaykKIAkJc2V0X2pvaW5fcGF0aGxpc3RfaG9vayhyb290 LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCkBAIC02OTAsNyArNzIzLDcgQEAgZ2V0X21l bW9pemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCiAJTGlz dAkgICAqcGhfbGF0ZXJhbF92YXJzOwogCiAJLyogT2J2aW91c2x5IG5vdCBpZiBpdCdzIGRpc2Fi bGVkICovCi0JaWYgKCFlbmFibGVfbWVtb2l6ZSkKKwlpZiAoKGV4dHJhLT5wZ3NfbWFzayAmIFBH U19ORVNUTE9PUF9NRU1PSVpFKSA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCkBAIC04NDUs NiArODc4LDcgQEAgdHJ5X25lc3Rsb29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICBQ YXRoICppbm5lcl9wYXRoLAogCQkJCSAgTGlzdCAqcGF0aGtleXMsCiAJCQkJICBKb2luVHlwZSBq b2ludHlwZSwKKwkJCQkgIHVpbnQ2NCBuZXN0bG9vcF9zdWJ0eXBlLAogCQkJCSAgSm9pblBhdGhF eHRyYURhdGEgKmV4dHJhKQogewogCVJlbGlkcwkJcmVxdWlyZWRfb3V0ZXI7CkBAIC05MjcsNiAr OTYxLDcgQEAgdHJ5X25lc3Rsb29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogbWV0aG9k b2xvZ3kgd29ydGh3aGlsZS4KIAkgKi8KIAlpbml0aWFsX2Nvc3RfbmVzdGxvb3Aocm9vdCwgJndv cmtzcGFjZSwgam9pbnR5cGUsCisJCQkJCQkgIG5lc3Rsb29wX3N1YnR5cGUgfCBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTCwKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5uZXJfcGF0aCwgZXh0cmEpOwog CiAJaWYgKGFkZF9wYXRoX3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFjZS5kaXNhYmxlZF9ub2Rl cywKQEAgLTk2NCw2ICs5OTksNyBAQCB0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJICBQYXRoICppbm5lcl9wYXRoLAogCQkJCQkJICBMaXN0ICpwYXRo a2V5cywKIAkJCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkgIHVpbnQ2NCBuZXN0bG9v cF9zdWJ0eXBlLAogCQkJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpCiB7CiAJSm9pbkNv c3RXb3Jrc3BhY2Ugd29ya3NwYWNlOwpAQCAtMTAxMSw3ICsxMDQ3LDcgQEAgdHJ5X3BhcnRpYWxf bmVzdGxvb3BfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBCZWZvcmUgY3JlYXRpbmcgYSBw YXRoLCBnZXQgYSBxdWljayBsb3dlciBib3VuZCBvbiB3aGF0IGl0IGlzIGxpa2VseSB0bwogCSAq IGNvc3QuICBCYWlsIG91dCByaWdodCBhd2F5IGlmIGl0IGxvb2tzIHRlcnJpYmxlLgogCSAqLwot CWluaXRpYWxfY29zdF9uZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBqb2ludHlwZSwKKwlpbml0 aWFsX2Nvc3RfbmVzdGxvb3Aocm9vdCwgJndvcmtzcGFjZSwgam9pbnR5cGUsIG5lc3Rsb29wX3N1 YnR5cGUsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlubmVyX3BhdGgsIGV4dHJhKTsKIAlpZiAoIWFk ZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2soam9pbnJlbCwgd29ya3NwYWNlLmRpc2FibGVkX25vZGVz LAogCQkJCQkJCQkgICB3b3Jrc3BhY2UudG90YWxfY29zdCwgcGF0aGtleXMpKQpAQCAtMTg1OSwx NCArMTg5NSwxNCBAQCBtYXRjaF91bnNvcnRlZF9vdXRlcihQbGFubmVySW5mbyAqcm9vdCwKIAlp ZiAobmVzdGpvaW5PSykKIAl7CiAJCS8qCi0JCSAqIENvbnNpZGVyIG1hdGVyaWFsaXppbmcgdGhl IGNoZWFwZXN0IGlubmVyIHBhdGgsIHVubGVzcwotCQkgKiBlbmFibGVfbWF0ZXJpYWwgaXMgb2Zm IG9yIHRoZSBwYXRoIGluIHF1ZXN0aW9uIG1hdGVyaWFsaXplcyBpdHMKLQkJICogb3V0cHV0IGFu eXdheS4KKwkJICogQ29uc2lkZXIgbWF0ZXJpYWxpemluZyB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0 aCwgdW5sZXNzIHRoYXQgaXMKKwkJICogZGlzYWJsZWQgb3IgdGhlIHBhdGggaW4gcXVlc3Rpb24g bWF0ZXJpYWxpemVzIGl0cyBvdXRwdXQgYW55d2F5LgogCQkgKi8KLQkJaWYgKGVuYWJsZV9tYXRl cmlhbCAmJiBpbm5lcl9jaGVhcGVzdF90b3RhbCAhPSBOVUxMICYmCisJCWlmICgoZXh0cmEtPnBn c19tYXNrICYgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFKSAhPSAwICYmCisJCQlpbm5lcl9jaGVh cGVzdF90b3RhbCAhPSBOVUxMICYmCiAJCQkhRXhlY01hdGVyaWFsaXplc091dHB1dChpbm5lcl9j aGVhcGVzdF90b3RhbC0+cGF0aHR5cGUpKQogCQkJbWF0cGF0aCA9IChQYXRoICopCi0JCQkJY3Jl YXRlX21hdGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFwZXN0X3RvdGFsKTsKKwkJCQlj cmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBlc3RfdG90YWwsIHRydWUp OwogCX0KIAogCWZvcmVhY2gobGMxLCBvdXRlcnJlbC0+cGF0aGxpc3QpCkBAIC0xOTA5LDYgKzE5 NDUsNyBAQCBtYXRjaF91bnNvcnRlZF9vdXRlcihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJ ICBpbm5lcnBhdGgsCiAJCQkJCQkJCSAgbWVyZ2VfcGF0aGtleXMsCiAJCQkJCQkJCSAgam9pbnR5 cGUsCisJCQkJCQkJCSAgUEdTX05FU1RMT09QX1BMQUlOLAogCQkJCQkJCQkgIGV4dHJhKTsKIAog CQkJCS8qCkBAIC0xOTI1LDYgKzE5NjIsNyBAQCBtYXRjaF91bnNvcnRlZF9vdXRlcihQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCSAgbXBhdGgsCiAJCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlz LAogCQkJCQkJCQkJICBqb2ludHlwZSwKKwkJCQkJCQkJCSAgUEdTX05FU1RMT09QX01FTU9JWkUs CiAJCQkJCQkJCQkgIGV4dHJhKTsKIAkJCX0KIApAQCAtMTkzNiw2ICsxOTc0LDcgQEAgbWF0Y2hf dW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgbWF0cGF0aCwKIAkJ CQkJCQkJICBtZXJnZV9wYXRoa2V5cywKIAkJCQkJCQkJICBqb2ludHlwZSwKKwkJCQkJCQkJICBQ R1NfTkVTVExPT1BfTUFURVJJQUxJWkUsCiAJCQkJCQkJCSAgZXh0cmEpOwogCQl9CiAKQEAgLTIw NTIsMTYgKzIwOTEsMTcgQEAgY29uc2lkZXJfcGFyYWxsZWxfbmVzdGxvb3AoUGxhbm5lckluZm8g KnJvb3QsCiAKIAkvKgogCSAqIENvbnNpZGVyIG1hdGVyaWFsaXppbmcgdGhlIGNoZWFwZXN0IGlu bmVyIHBhdGgsIHVubGVzczogMSkKLQkgKiBlbmFibGVfbWF0ZXJpYWwgaXMgb2ZmLCAyKSB0aGUg Y2hlYXBlc3QgaW5uZXIgcGF0aCBpcyBub3QKKwkgKiBtYXRlcmlhbGl6YXRpb24gaXMgZGlzYWJs ZWQgaGVyZSwgMikgdGhlIGNoZWFwZXN0IGlubmVyIHBhdGggaXMgbm90CiAJICogcGFyYWxsZWwt c2FmZSwgMykgdGhlIGNoZWFwZXN0IGlubmVyIHBhdGggaXMgcGFyYW1ldGVyaXplZCBieSB0aGUg b3V0ZXIKIAkgKiByZWwsIG9yIDQpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIG1hdGVyaWFsaXpl cyBpdHMgb3V0cHV0IGFueXdheS4KIAkgKi8KLQlpZiAoZW5hYmxlX21hdGVyaWFsICYmIGlubmVy X2NoZWFwZXN0X3RvdGFsLT5wYXJhbGxlbF9zYWZlICYmCisJaWYgKChleHRyYS0+cGdzX21hc2sg JiBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkUpICE9IDAgJiYKKwkJaW5uZXJfY2hlYXBlc3RfdG90 YWwtPnBhcmFsbGVsX3NhZmUgJiYKIAkJIVBBVEhfUEFSQU1fQllfUkVMKGlubmVyX2NoZWFwZXN0 X3RvdGFsLCBvdXRlcnJlbCkgJiYKIAkJIUV4ZWNNYXRlcmlhbGl6ZXNPdXRwdXQoaW5uZXJfY2hl YXBlc3RfdG90YWwtPnBhdGh0eXBlKSkKIAl7CiAJCW1hdHBhdGggPSAoUGF0aCAqKQotCQkJY3Jl YXRlX21hdGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFwZXN0X3RvdGFsKTsKKwkJCWNy ZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCwgdHJ1ZSk7 CiAJCUFzc2VydChtYXRwYXRoLT5wYXJhbGxlbF9zYWZlKTsKIAl9CiAKQEAgLTIwOTEsNyArMjEz MSw4IEBAIGNvbnNpZGVyX3BhcmFsbGVsX25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CWNvbnRpbnVlOwogCiAJCQl0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKHJvb3QsIGpvaW5yZWws IG91dGVycGF0aCwgaW5uZXJwYXRoLAotCQkJCQkJCQkJICBwYXRoa2V5cywgam9pbnR5cGUsIGV4 dHJhKTsKKwkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLAorCQkJCQkJCQkJICBQR1NfTkVT VExPT1BfUExBSU4sIGV4dHJhKTsKIAogCQkJLyoKIAkJCSAqIFRyeSBnZW5lcmF0aW5nIGEgbWVt b2l6ZSBwYXRoIGFuZCBzZWUgaWYgdGhhdCBtYWtlcyB0aGUgbmVzdGVkCkBAIC0yMTAyLDEzICsy MTQzLDE1IEBAIGNvbnNpZGVyX3BhcmFsbGVsX25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJCQkJIGV4dHJhKTsKIAkJCWlmIChtcGF0aCAhPSBOVUxMKQogCQkJCXRyeV9wYXJ0aWFs X25lc3Rsb29wX3BhdGgocm9vdCwgam9pbnJlbCwgb3V0ZXJwYXRoLCBtcGF0aCwKLQkJCQkJCQkJ CQkgIHBhdGhrZXlzLCBqb2ludHlwZSwgZXh0cmEpOworCQkJCQkJCQkJCSAgcGF0aGtleXMsIGpv aW50eXBlLAorCQkJCQkJCQkJCSAgUEdTX05FU1RMT09QX01FTU9JWkUsIGV4dHJhKTsKIAkJfQog CiAJCS8qIEFsc28gY29uc2lkZXIgbWF0ZXJpYWxpemVkIGZvcm0gb2YgdGhlIGNoZWFwZXN0IGlu bmVyIHBhdGggKi8KIAkJaWYgKG1hdHBhdGggIT0gTlVMTCkKIAkJCXRyeV9wYXJ0aWFsX25lc3Rs b29wX3BhdGgocm9vdCwgam9pbnJlbCwgb3V0ZXJwYXRoLCBtYXRwYXRoLAotCQkJCQkJCQkJICBw YXRoa2V5cywgam9pbnR5cGUsIGV4dHJhKTsKKwkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBl LAorCQkJCQkJCQkJICBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkUsIGV4dHJhKTsKIAl9CiB9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYwppbmRleCA1NDczZDk3NTEyYS4uMThhMzY1 NDcyMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMKQEAgLTQ5OSwxOCArNDk5 LDE5IEBAIGNyZWF0ZV90aWRzY2FuX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwpCiAJTGlzdAkgICAqdGlkcXVhbHM7CiAJTGlzdAkgICAqdGlkcmFuZ2VxdWFsczsKIAli b29sCQlpc0N1cnJlbnRPZjsKKwlib29sCQllbmFibGVkID0gKHJlbC0+cGdzX21hc2sgJiBQR1Nf VElEU0NBTikgIT0gMDsKIAogCS8qCiAJICogSWYgYW55IHN1aXRhYmxlIHF1YWxzIGV4aXN0IGlu IHRoZSByZWwncyBiYXNlcmVzdHJpY3QgbGlzdCwgZ2VuZXJhdGUgYQogCSAqIHBsYWluICh1bnBh cmFtZXRlcml6ZWQpIFRpZFBhdGggd2l0aCB0aGVtLgogCSAqCi0JICogV2Ugc2tpcCB0aGlzIHdo ZW4gZW5hYmxlX3RpZHNjYW4gPSBmYWxzZSwgZXhjZXB0IHdoZW4gdGhlIHF1YWwgaXMKKwkgKiBX ZSBza2lwIHRoaXMgd2hlbiBUSUQgc2NhbnMgYXJlIGRpc2FibGVkLCBleGNlcHQgd2hlbiB0aGUg cXVhbCBpcwogCSAqIEN1cnJlbnRPZkV4cHIuIEluIHRoYXQgY2FzZSwgYSBUSUQgc2NhbiBpcyB0 aGUgb25seSBjb3JyZWN0IHBhdGguCiAJICovCiAJdGlkcXVhbHMgPSBUaWRRdWFsRnJvbVJlc3Ry aWN0SW5mb0xpc3Qocm9vdCwgcmVsLT5iYXNlcmVzdHJpY3RpbmZvLCByZWwsCiAJCQkJCQkJCQkJ ICAgJmlzQ3VycmVudE9mKTsKIAotCWlmICh0aWRxdWFscyAhPSBOSUwgJiYgKGVuYWJsZV90aWRz Y2FuIHx8IGlzQ3VycmVudE9mKSkKKwlpZiAodGlkcXVhbHMgIT0gTklMICYmIChlbmFibGVkIHx8 IGlzQ3VycmVudE9mKSkKIAl7CiAJCS8qCiAJCSAqIFRoaXMgcGF0aCB1c2VzIG5vIGpvaW4gY2xh dXNlcywgYnV0IGl0IGNvdWxkIHN0aWxsIGhhdmUgcmVxdWlyZWQKQEAgLTUzMiw3ICs1MzMsNyBA QCBjcmVhdGVfdGlkc2Nhbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs KQogCX0KIAogCS8qIFNraXAgdGhlIHJlc3QgaWYgVElEIHNjYW5zIGFyZSBkaXNhYmxlZC4gKi8K LQlpZiAoIWVuYWJsZV90aWRzY2FuKQorCWlmICghZW5hYmxlZCkKIAkJcmV0dXJuIGZhbHNlOwog CiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4u YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCA0YWMxZmIx ZThmMS4uMDBkZjdkZGE4M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMKQEAgLTY1MDksNyArNjUwOSw3IEBAIFBsYW4gKgogbWF0ZXJpYWxpemVfZmluaXNoZWRfcGxh bihQbGFuICpzdWJwbGFuKQogewogCVBsYW4JICAgKm1hdHBsYW47Ci0JUGF0aAkJbWF0cGF0aDsJ CS8qIGR1bW15IGZvciByZXN1bHQgb2YgY29zdF9tYXRlcmlhbCAqLworCVBhdGgJCW1hdHBhdGg7 CQkvKiBkdW1teSBmb3IgY29zdF9tYXRlcmlhbCAqLwogCUNvc3QJCWluaXRwbGFuX2Nvc3Q7CiAJ Ym9vbAkJdW5zYWZlX2luaXRwbGFuczsKIApAQCAtNjUzMSw3ICs2NTMxLDkgQEAgbWF0ZXJpYWxp emVfZmluaXNoZWRfcGxhbihQbGFuICpzdWJwbGFuKQogCXN1YnBsYW4tPnRvdGFsX2Nvc3QgLT0g aW5pdHBsYW5fY29zdDsKIAogCS8qIFNldCBjb3N0IGRhdGEgKi8KKwltYXRwYXRoLnBhcmVudCA9 IE5VTEw7CiAJY29zdF9tYXRlcmlhbCgmbWF0cGF0aCwKKwkJCQkgIGVuYWJsZV9tYXRlcmlhbCwK IAkJCQkgIHN1YnBsYW4tPmRpc2FibGVkX25vZGVzLAogCQkJCSAgc3VicGxhbi0+c3RhcnR1cF9j b3N0LAogCQkJCSAgc3VicGxhbi0+dG90YWxfY29zdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYwppbmRleCA1Yjc4YmQ0ZmYzNS4uZDRiZjhhOTU1ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTQ2Miw2ICs0NjIsNTMgQEAgc3RhbmRhcmRfcGxhbm5lcihR dWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMs CiAJCXR1cGxlX2ZyYWN0aW9uID0gMC4wOwogCX0KIAorCS8qCisJICogQ29tcHV0ZSB0aGUgaW5p dGlhbCBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzay4KKwkgKgorCSAqIFNvbWUgc3RyYXRl Z2llcywgc3VjaCBhcyBQR1NfRk9SRUlHTkpPSU4sIGhhdmUgbm8gY29ycmVzcG9uZGluZyBlbmFi bGVfKgorCSAqIEdVQywgYW5kIHNvIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgYXJlIGFsd2F5cyBz ZXQgaW4gdGhlIGRlZmF1bHQKKwkgKiBzdHJhdGVneSBtYXNrLgorCSAqCisJICogSXQgbWF5IHNl ZW0gc3VycHJpc2luZyB0aGF0IGVuYWJsZV9pbmRleHNjYW4gc2V0cyBib3RoIFBHU19JTkRFWFND QU4KKwkgKiBhbmQgUEdTX0lOREVYT05MWVNDQU4uIEhvd2V2ZXIsIHRoZSBoaXN0b3JpY2FsIGJl aGF2aW9yIG9mIHRoaXMgR1VDCisJICogY29ycmVzcG9uZHMgdG8gdGhpcyBleGFjdGx5OiBlbmFi bGVfaW5kZXhzY2FuPW9mZiBkaXNhYmxlcyBib3RoCisJICogaW5kZXgtc2NhbiBhbmQgaW5kZXgt b25seSBzY2FuIHBhdGhzLCB3aGVyZWFzIGVuYWJsZV9pbmRleG9ubHlzY2FuPW9mZgorCSAqIGNv bnZlcnRzIHRoZSBpbmRleC1vbmx5IHNjYW4gcGF0aHMgdGhhdCB3ZSB3b3VsZCBoYXZlIGNvbnNp ZGVyZWQgaW50bworCSAqIGluZGV4IHNjYW4gcGF0aHMuCisJICovCisJZ2xvYi0+ZGVmYXVsdF9w Z3NfbWFzayA9IFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EIHwgUEdTX0ZPUkVJR05KT0lO IHwKKwkJUEdTX0dBVEhFUiB8IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCWlmIChlbmFibGVf dGlkc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfVElEU0NBTjsKKwlpZiAo ZW5hYmxlX3NlcXNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX1NFUVNDQU47 CisJaWYgKGVuYWJsZV9pbmRleHNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdT X0lOREVYU0NBTiB8IFBHU19JTkRFWE9OTFlTQ0FOOworCWlmIChlbmFibGVfaW5kZXhvbmx5c2Nh bikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfQ09OU0lERVJfSU5ERVhPTkxZOwor CWlmIChlbmFibGVfYml0bWFwc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1Nf QklUTUFQU0NBTjsKKwlpZiAoZW5hYmxlX21lcmdlam9pbikKKwl7CisJCWdsb2ItPmRlZmF1bHRf cGdzX21hc2sgfD0gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwkJaWYgKGVuYWJsZV9tYXRlcmlhbCkK KwkJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRTsK Kwl9CisJaWYgKGVuYWJsZV9uZXN0bG9vcCkKKwl7CisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sg fD0gUEdTX05FU1RMT09QX1BMQUlOOworCQlpZiAoZW5hYmxlX21hdGVyaWFsKQorCQkJZ2xvYi0+ ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkU7CisJCWlmIChlbmFi bGVfbWVtb2l6ZSkKKwkJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX05FU1RMT09QX01F TU9JWkU7CisJfQorCWlmIChlbmFibGVfaGFzaGpvaW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21h c2sgfD0gUEdTX0hBU0hKT0lOOworCWlmIChlbmFibGVfZ2F0aGVybWVyZ2UpCisJCWdsb2ItPmRl ZmF1bHRfcGdzX21hc2sgfD0gUEdTX0dBVEhFUl9NRVJHRTsKKwlpZiAoZW5hYmxlX3BhcnRpdGlv bndpc2Vfam9pbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfQ09OU0lERVJfUEFS VElUSU9OV0lTRTsKKwogCS8qIEFsbG93IHBsdWdpbnMgdG8gdGFrZSBjb250cm9sIGFmdGVyIHdl J3ZlIGluaXRpYWxpemVkICJnbG9iIiAqLwogCWlmIChwbGFubmVyX3NldHVwX2hvb2spCiAJCSgq cGxhbm5lcl9zZXR1cF9ob29rKSAoZ2xvYiwgcGFyc2UsIHF1ZXJ5X3N0cmluZywgJnR1cGxlX2Zy YWN0aW9uLCBlcyk7CkBAIC0zOTU1LDYgKzQwMDIsOSBAQCBtYWtlX2dyb3VwaW5nX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQlpc19wYXJhbGxlbF9zYWZl KHJvb3QsIGhhdmluZ1F1YWwpKQogCQlncm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0 cnVlOwogCisJLyogQXNzdW1lIHRoYXQgdGhlIHNhbWUgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWdp ZXMgYXJlIGFsbG93ZWQgKi8KKwlncm91cGVkX3JlbC0+cGdzX21hc2sgPSBpbnB1dF9yZWwtPnBn c19tYXNrOworCiAJLyoKIAkgKiBJZiB0aGUgaW5wdXQgcmVsIGJlbG9uZ3MgdG8gYSBzaW5nbGUg RkRXLCBzbyBkb2VzIHRoZSBncm91cGVkIHJlbC4KIAkgKi8KQEAgLTUzNDcsNiArNTM5Nyw5IEBA IGNyZWF0ZV9vcmRlcmVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCWlmIChpbnB1dF9yZWwt PmNvbnNpZGVyX3BhcmFsbGVsICYmIHRhcmdldF9wYXJhbGxlbF9zYWZlKQogCQlvcmRlcmVkX3Jl bC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJLyogQXNzdW1lIHRoYXQgdGhlIHNhbWUg cGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMgYXJlIGFsbG93ZWQuICovCisJb3JkZXJlZF9yZWwt PnBnc19tYXNrID0gaW5wdXRfcmVsLT5wZ3NfbWFzazsKKwogCS8qCiAJICogSWYgdGhlIGlucHV0 IHJlbCBiZWxvbmdzIHRvIGEgc2luZ2xlIEZEVywgc28gZG9lcyB0aGUgb3JkZXJlZF9yZWwuCiAJ ICovCkBAIC03NDI3LDYgKzc0ODAsNyBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJZ3JvdXBlZF9yZWwtPnJlbGlkcyk7CiAJcGFy dGlhbGx5X2dyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9CiAJCWdyb3VwZWRfcmVsLT5j b25zaWRlcl9wYXJhbGxlbDsKKwlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBnc19tYXNrID0gZ3Jv dXBlZF9yZWwtPnBnc19tYXNrOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+cmVsb3B0a2luZCA9 IGdyb3VwZWRfcmVsLT5yZWxvcHRraW5kOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+c2VydmVy aWQgPSBncm91cGVkX3JlbC0+c2VydmVyaWQ7CiAJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT51c2Vy aWQgPSBncm91cGVkX3JlbC0+dXNlcmlkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMKaW5kZXggZGEzMDZjZDM5ZWIuLmRjYTU0NTlhZWFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BhdGhub2RlLmMKQEAgLTE2NTgsNyArMTY1OCw3IEBAIGNyZWF0ZV9ncm91cF9yZXN1bHRf cGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogICoJICBwYXRobm9kZS4K ICAqLwogTWF0ZXJpYWxQYXRoICoKLWNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJl bCwgUGF0aCAqc3VicGF0aCkKK2NyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwg UGF0aCAqc3VicGF0aCwgYm9vbCBlbmFibGVkKQogewogCU1hdGVyaWFsUGF0aCAqcGF0aG5vZGUg PSBtYWtlTm9kZShNYXRlcmlhbFBhdGgpOwogCkBAIC0xNjc3LDYgKzE2NzcsNyBAQCBjcmVhdGVf bWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgpCiAJcGF0aG5vZGUt PnN1YnBhdGggPSBzdWJwYXRoOwogCiAJY29zdF9tYXRlcmlhbCgmcGF0aG5vZGUtPnBhdGgsCisJ CQkJICBlbmFibGVkLAogCQkJCSAgc3VicGF0aC0+ZGlzYWJsZWRfbm9kZXMsCiAJCQkJICBzdWJw YXRoLT5zdGFydHVwX2Nvc3QsCiAJCQkJICBzdWJwYXRoLT50b3RhbF9jb3N0LApAQCAtMTcyOSw4 ICsxNzMwLDE1IEBAIGNyZWF0ZV9tZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwgUGF0aCAqc3VicGF0aCwKIAlwYXRobm9kZS0+ZXN0X3VuaXF1ZV9rZXlzID0g MC4wOwogCXBhdGhub2RlLT5lc3RfaGl0X3JhdGlvID0gMC4wOwogCi0JLyogd2Ugc2hvdWxkIG5v dCBnZW5lcmF0ZSB0aGlzIHBhdGggdHlwZSB3aGVuIGVuYWJsZV9tZW1vaXplPWZhbHNlICovCi0J QXNzZXJ0KGVuYWJsZV9tZW1vaXplKTsKKwkvKgorCSAqIFdlIHNob3VsZCBub3QgYmUgYXNrZWQg dG8gZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBtZW1vaXphdGlvbiBpcworCSAqIGRpc2Fi bGVkLCBzbyBzZXQgb3VyIGNvdW50IG9mIGRpc2FibGVkIG5vZGVzIGVxdWFsIHRvIHRoZSBzdWJw YXRoJ3MKKwkgKiBjb3VudC4KKwkgKgorCSAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gYWxzbyBBc3Nl cnQgdGhhdCBtZW1vaXphdGlvbiBpcyBlbmFibGVkLCBidXQgdGhlCisJICogdmFsdWUgb2YgZW5h YmxlX21lbW9pemUgaXMgbm90IGNvbnRyb2xsaW5nOiB3aGF0IHdlIHdvdWxkIG5lZWQgdG8gY2hl Y2sKKwkgKiBpcyB0aGF0IHRoZSBKb2luUGF0aEV4dHJhRGF0YSdzIHBnc19tYXNrIGluY2x1ZGVk IFBHU19ORVNUTE9PUF9NRU1PSVpFLgorCSAqLwogCXBhdGhub2RlLT5wYXRoLmRpc2FibGVkX25v ZGVzID0gc3VicGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAKIAkvKgpAQCAtMzk2NCwxMyArMzk3Miwx NiBAQCByZXBhcmFtZXRlcml6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpwYXRoLAog CQkJewogCQkJCU1hdGVyaWFsUGF0aCAqbXBhdGggPSAoTWF0ZXJpYWxQYXRoICopIHBhdGg7CiAJ CQkJUGF0aAkgICAqc3BhdGggPSBtcGF0aC0+c3VicGF0aDsKKwkJCQlib29sCQllbmFibGVkOwog CiAJCQkJc3BhdGggPSByZXBhcmFtZXRlcml6ZV9wYXRoKHJvb3QsIHNwYXRoLAogCQkJCQkJCQkJ CQlyZXF1aXJlZF9vdXRlciwKIAkJCQkJCQkJCQkJbG9vcF9jb3VudCk7CisJCQkJZW5hYmxlZCA9 CisJCQkJCShtcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA8PSBzcGF0aC0+ZGlzYWJsZWRfbm9k ZXMpOwogCQkJCWlmIChzcGF0aCA9PSBOVUxMKQogCQkJCQlyZXR1cm4gTlVMTDsKLQkJCQlyZXR1 cm4gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBzcGF0aCk7CisJCQkJcmV0dXJu IChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgc3BhdGgsIGVuYWJsZWQpOwogCQkJ fQogCQljYXNlIFRfTWVtb2l6ZToKIAkJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQu YwppbmRleCBhOTBlMWM5ZWU2Yi4uMWIyMGJjODA1ZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wbGFuY2F0LmMKQEAgLTU3Niw2ICs1NzYsOSBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVy SW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCSAqIEFs bG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBvbiB0aGUgaW5mbyB3ZSBvYnRhaW5lZCBmcm9t IHRoZQogCSAqIGNhdGFsb2dzLiAgQWN0aW9ucyBtaWdodCBpbmNsdWRlIGFsdGVyaW5nIHRoZSBh c3N1bWVkIHJlbGF0aW9uIHNpemUsCiAJICogcmVtb3ZpbmcgYW4gaW5kZXgsIG9yIGFkZGluZyBh IGh5cG90aGV0aWNhbCBpbmRleCB0byB0aGUgaW5kZXhsaXN0LgorCSAqCisJICogQW4gZXh0ZW5z aW9uIGNhbiBhbHNvIG1vZGlmeSByZWwtPnBnc19tYXNrIGhlcmUgdG8gY29udHJvbCBwYXRoCisJ ICogZ2VuZXJhdGlvbi4KIAkgKi8KIAlpZiAoZ2V0X3JlbGF0aW9uX2luZm9faG9vaykKIAkJKCpn ZXRfcmVsYXRpb25faW5mb19ob29rKSAocm9vdCwgcmVsYXRpb25PYmplY3RJZCwgaW5ocGFyZW50 LCByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCmluZGV4IGY1NzYzMWU4NzZm Li5hNzE0YzgzZjFiYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVs bm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtNDcs NiArNDcsOSBAQCB0eXBlZGVmIHN0cnVjdCBKb2luSGFzaEVudHJ5CiAJUmVsT3B0SW5mbyAqam9p bl9yZWw7CiB9IEpvaW5IYXNoRW50cnk7CiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNv bnRyb2wgZHVyaW5nIGpvaW5yZWwgc2V0dXAgKi8KK2pvaW5yZWxfc2V0dXBfaG9va190eXBlIGpv aW5yZWxfc2V0dXBfaG9vayA9IE5VTEw7CisKIHN0YXRpYyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxp c3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCVJlbE9w dEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkJU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCkBAIC0y MjUsNiArMjI4LDcgQEAgYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJl bGlkLCBSZWxPcHRJbmZvICpwYXJlbnQpCiAJcmVsLT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3Qt PnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAJcmVsLT5jb25zaWRlcl9wYXJhbV9zdGFydHVwID0gZmFs c2U7CS8qIG1pZ2h0IGdldCBjaGFuZ2VkIGxhdGVyICovCiAJcmVsLT5jb25zaWRlcl9wYXJhbGxl bCA9IGZhbHNlOyAvKiBtaWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLworCXJlbC0+cGdzX21hc2sg PSByb290LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwogCXJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRl X2VtcHR5X3BhdGh0YXJnZXQoKTsKIAlyZWwtPnBhdGhsaXN0ID0gTklMOwogCXJlbC0+cHBpbGlz dCA9IE5JTDsKQEAgLTgyMiw2ICs4MjYsNyBAQCBidWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAq cm9vdCwKIAlqb2lucmVsLT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9u ID4gMCk7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFyYW1fc3RhcnR1cCA9IGZhbHNlOwogCWpvaW5y ZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gZmFsc2U7CisJam9pbnJlbC0+cGdzX21hc2sgPSByb290 LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwogCWpvaW5yZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9l bXB0eV9wYXRodGFyZ2V0KCk7CiAJam9pbnJlbC0+cGF0aGxpc3QgPSBOSUw7CiAJam9pbnJlbC0+ cHBpbGlzdCA9IE5JTDsKQEAgLTkzNCwxMCArOTM5LDYgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5l ckluZm8gKnJvb3QsCiAJICovCiAJam9pbnJlbC0+aGFzX2VjbGFzc19qb2lucyA9IGhhc19yZWxl dmFudF9lY2xhc3Nfam9pbmNsYXVzZShyb290LCBqb2lucmVsKTsKIAotCS8qIFN0b3JlIHRoZSBw YXJ0aXRpb24gaW5mb3JtYXRpb24uICovCi0JYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhy b290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAotCQkJCQkJCQkgcmVz dHJpY3RsaXN0KTsKLQogCS8qCiAJICogU2V0IGVzdGltYXRlcyBvZiB0aGUgam9pbnJlbCdzIHNp emUuCiAJICovCkBAIC05NjMsNiArOTY0LDE5IEBAIGJ1aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZv ICpyb290LAogCQlpc19wYXJhbGxlbF9zYWZlKHJvb3QsIChOb2RlICopIGpvaW5yZWwtPnJlbHRh cmdldC0+ZXhwcnMpKQogCQlqb2lucmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiAKKwkv KgorCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBvbiB0aGUgbmV3IGpvaW5yZWwn cyBwcm9wZXJ0aWVzLiBBY3Rpb25zCisJICogbWlnaHQgaW5jbHVkZSBhbHRlcmluZyB0aGUgc2l6 ZSBlc3RpbWF0ZSwgY2xlYXJpbmcgY29uc2lkZXJfcGFyYWxsZWwsCisJICogb3IgYWRqdXN0aW5n IHBnc19tYXNrLgorCSAqLworCWlmIChqb2lucmVsX3NldHVwX2hvb2spCisJCSgqam9pbnJlbF9z ZXR1cF9ob29rKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywK KwkJCQkJCQkgICByZXN0cmljdGxpc3QpOworCisJLyogU3RvcmUgdGhlIHBhcnRpdGlvbiBpbmZv cm1hdGlvbi4gKi8KKwlidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWws IG91dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCisJCQkJCQkJCSByZXN0cmljdGxpc3QpOwor CiAJLyogQWRkIHRoZSBqb2lucmVsIHRvIHRoZSBQbGFubmVySW5mby4gKi8KIAlhZGRfam9pbl9y ZWwocm9vdCwgam9pbnJlbCk7CiAKQEAgLTEwMTksNiArMTAzMyw3IEBAIGJ1aWxkX2NoaWxkX2pv aW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJam9pbnJl bC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlvbiA+IDApOwogCWpvaW5y ZWwtPmNvbnNpZGVyX3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsKIAlqb2lucmVsLT5jb25zaWRlcl9w YXJhbGxlbCA9IGZhbHNlOworCWpvaW5yZWwtPnBnc19tYXNrID0gcm9vdC0+Z2xvYi0+ZGVmYXVs dF9wZ3NfbWFzazsKIAlqb2lucmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0aHRhcmdl dCgpOwogCWpvaW5yZWwtPnBhdGhsaXN0ID0gTklMOwogCWpvaW5yZWwtPnBwaWxpc3QgPSBOSUw7 CkBAIC0xMTAyLDEwICsxMTE3LDYgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAkgKi8KIAlqb2lucmVsLT5oYXNfZWNsYXNz X2pvaW5zID0gcGFyZW50X2pvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnM7CiAKLQkvKiBJcyB0aGUg am9pbiBiZXR3ZWVuIHBhcnRpdGlvbnMgaXRzZWxmIHBhcnRpdGlvbmVkPyAqLwotCWJ1aWxkX2pv aW5yZWxfcGFydGl0aW9uX2luZm8ocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWws IHNqaW5mbywKLQkJCQkJCQkJIHJlc3RyaWN0bGlzdCk7Ci0KIAkvKiBDaGlsZCBqb2lucmVsIGlz IHBhcmFsbGVsIHNhZmUgaWYgcGFyZW50IGlzIHBhcmFsbGVsIHNhZmUuICovCiAJam9pbnJlbC0+ Y29uc2lkZXJfcGFyYWxsZWwgPSBwYXJlbnRfam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWw7CiAK QEAgLTExMTMsNiArMTEyNCwyMCBAQCBidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCXNldF9qb2lucmVsX3NpemVfZXN0aW1hdGVz KHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLAogCQkJCQkJCSAgIHNqaW5mbywg cmVzdHJpY3RsaXN0KTsKIAorCS8qCisJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9yaWFsaXpl IG9uIHRoZSBuZXcgam9pbnJlbCdzIHByb3BlcnRpZXMuIEFjdGlvbnMKKwkgKiBtaWdodCBpbmNs dWRlIGFsdGVyaW5nIHRoZSBzaXplIGVzdGltYXRlLCBjbGVhcmluZyBjb25zaWRlcl9wYXJhbGxl bCwKKwkgKiBvciBhZGp1c3RpbmcgcGdzX21hc2suIChIb3dldmVyLCBub3RlIHRoYXQgY2xlYXJp bmcgY29uc2lkZXJfcGFyYWxsZWwKKwkgKiB3b3VsZCBiZSBiZXR0ZXIgZG9uZSBpbiB0aGUgcGFy ZW50IGpvaW5yZWwgcmF0aGVyIHRoYW4gaGVyZS4pCisJICovCisJaWYgKGpvaW5yZWxfc2V0dXBf aG9vaykKKwkJKCpqb2lucmVsX3NldHVwX2hvb2spIChyb290LCBqb2lucmVsLCBvdXRlcl9yZWws IGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCSAgIHJlc3RyaWN0bGlzdCk7CisKKwkvKiBJcyB0 aGUgam9pbiBiZXR3ZWVuIHBhcnRpdGlvbnMgaXRzZWxmIHBhcnRpdGlvbmVkPyAqLworCWJ1aWxk X2pvaW5yZWxfcGFydGl0aW9uX2luZm8ocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9y ZWwsIHNqaW5mbywKKwkJCQkJCQkJIHJlc3RyaWN0bGlzdCk7CisKIAkvKiBXZSBidWlsZCB0aGUg am9pbiBvbmx5IG9uY2UuICovCiAJQXNzZXJ0KCFmaW5kX2pvaW5fcmVsKHJvb3QsIGpvaW5yZWwt PnJlbGlkcykpOwogCkBAIC0xNjAyLDYgKzE2MjcsNyBAQCBmZXRjaF91cHBlcl9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIFVwcGVyUmVsYXRpb25LaW5kIGtpbmQsIFJlbGlkcyByZWxpZHMpCiAJdXBw ZXJyZWwgPSBtYWtlTm9kZShSZWxPcHRJbmZvKTsKIAl1cHBlcnJlbC0+cmVsb3B0a2luZCA9IFJF TE9QVF9VUFBFUl9SRUw7CiAJdXBwZXJyZWwtPnJlbGlkcyA9IGJtc19jb3B5KHJlbGlkcyk7CisJ dXBwZXJyZWwtPnBnc19tYXNrID0gcm9vdC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsKIAogCS8q IGNoZWFwIHN0YXJ0dXAgY29zdCBpcyBpbnRlcmVzdGluZyBpZmYgbm90IGFsbCB0dXBsZXMgdG8g YmUgcmV0cmlldmVkICovCiAJdXBwZXJyZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVw bGVfZnJhY3Rpb24gPiAwKTsKQEAgLTIxMTgsNyArMjE0NCw3IEBAIGJ1aWxkX2pvaW5yZWxfcGFy dGl0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsCiAJUGFydGl0aW9uU2NoZW1lIHBhcnRfc2No ZW1lOwogCiAJLyogTm90aGluZyB0byBkbyBpZiBwYXJ0aXRpb253aXNlIGpvaW4gdGVjaG5pcXVl IGlzIGRpc2FibGVkLiAqLwotCWlmICghZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbikKKwlpZiAo KGpvaW5yZWwtPnBnc19tYXNrICYgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UpID09IDApCiAJ ewogCQlBc3NlcnQoIUlTX1BBUlRJVElPTkVEX1JFTChqb2lucmVsKSk7CiAJCXJldHVybjsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGF0aG5vZGVzLmgKaW5kZXggYTVmOTUzNTg4NjcuLmMxNzVlZTk1YjY4IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaApAQCAtMjIsNiArMjIsNzkgQEAKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVz LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgogCisvKgorICogUGF0aCBnZW5lcmF0aW9u IHN0cmF0ZWdpZXMuCisgKgorICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIHRvIHNwZWNpZnkg dGhlIHNldCBvZiBzdHJhdGVnaWVzIHRoYXQgdGhlIHBsYW5uZXIKKyAqIHNob3VsZCB1c2UsIGVp dGhlciBmb3IgdGhlIHF1ZXJ5IGFzIGEgd2hvbGUgb3IgZm9yIGEgc3BlY2lmaWMgYmFzZXJlbCBv cgorICogam9pbnJlbC4gVGhlIHZhcmlvdXMgcGxhbm5lci1yZWxhdGVkIGVuYWJsZV8qIEdVQ3Mg YXJlIHVzZWQgdG8gc2V0IHRoZQorICogUGxhbm5lckdsb2JhbCdzIGRlZmF1bHRfcGdzX21hc2ss IGFuZCB0aGF0IGluIHR1cm4gaXMgdXNlZCB0byBzZXQgZWFjaAorICogUmVsT3B0SW5mbydzIHBn c19tYXNrLiBJbiBib3RoIGNhc2VzLCBleHRlbnNpb25zIGNhbiB1c2UgaG9va3MgdG8gbW9kaWZ5 IHRoZQorICogZGVmYXVsdCB2YWx1ZS4gIE5vdCBldmVyeSBzdHJhdGVneSBsaXN0ZWQgaGVyZSBo YXMgYSBjb3JyZXNwb25kaW5nIGVuYWJsZV8qCisgKiBHVUM7IHRob3NlIHRoYXQgZG9uJ3QgYXJl IGFsd2F5cyBhbGxvd2VkIHVubGVzcyBkaXNhYmxlZCBieSBhbiBleHRlbnNpb24uCisgKiBOb3Qg YWxsIHN0cmF0ZWdpZXMgYXJlIHJlbGV2YW50IGZvciBldmVyeSBSZWxPcHRJbmZvOyBlLmcuIFBH U19TRVFTQ0FOCisgKiBkb2Vzbid0IGFmZmVjdCBqb2lucmVscyBvbmUgd2F5IG9yIHRoZSBvdGhl ci4KKyAqCisgKiBJbiBtb3N0IGNhc2VzLCBkaXNhYmxpbmcgYSBwYXRoIGdlbmVyYXRpb24gc3Ry YXRlZ3kgbWVyZWx5IG1lYW5zIHRoYXQgYW55CisgKiBwYXRocyBnZW5lcmF0ZWQgdXNpbmcgdGhh dCBzdHJhdGVneSBhcmUgbWFya2VkIGFzIGRpc2FibGVkLCBidXQgaW4gc29tZQorICogY2FzZXMs IHBhdGggZ2VuZXJhdGlvbiBpcyBza2lwcGVkIGFsdG9nZXRoZXIuIFRoZSBsYXR0ZXIgc3RyYXRl Z3kgaXMgb25seQorICogcGVybWlzc2libGUgd2hlbiBpdCBjYW4ndCByZXN1bHQgaW4gcGxhbm5l ciBmYWlsdXJlIC0tIGZvciBpbnN0YW5jZSwgd2UKKyAqIGNvdWxkbid0IGRvIHRoaXMgZm9yIHNl cXVlbnRpYWwgc2NhbnMgb24gYSBwbGFpbiByZWwsIGJlY2F1c2UgdGhlcmUgbWlnaHQKKyAqIG5v dCBiZSBhbnkgb3RoZXIgcG9zc2libGUgcGF0aC4gTmV2ZXJ0aGVsZXNzLCB0aGUgYmVoYXZpb3Jz IGluIGVhY2gKKyAqIGluZGl2aWR1YWwgY2FzZSBhcmUgdG8gc29tZSBleHRlbnQgdGhlIHJlc3Vs dCBvZiBoaXN0b3JpY2FsIGFjY2lkZW50LAorICogY2hvc2VuIHRvIG1hdGNoIHRoZSBwcmVleGlz dGluZyBiZWhhdmlvcnMgb2YgdGhlIGVuYWJsZV8qIEdVQ3MuCisgKgorICogSW4gYSBmZXcgY2Fz ZXMsIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBiaXQgZm9yIHRoZSBzYW1lIHN0cmF0ZWd5LCBjb250 cm9sbGluZworICogZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIHBsYW5uZXIgYmVoYXZpb3IuIFdo ZW4gUEdTX0NPTlNJREVSX0lOREVYT05MWSBpcworICogdW5zZXQsIHdlIGRvbid0IGV2ZW4gY29u c2lkZXIgaW5kZXgtb25seSBzY2FucywgYW5kIGFueSBzdWNoIHNjYW5zIHRoYXQKKyAqIHdvdWxk IGhhdmUgYmVlbiBnZW5lcmF0ZWQgYmVjb21lIGluZGV4IHNjYW5zIGluc3RlYWQuIE9uIHRoZSBv dGhlciBoYW5kLAorICogdW5zZXR0aW5nIFBHU19JTkRFWFNDQU4gb3IgUEdTX0lOREVYT05MWVND QU4gY2F1c2VzIGdlbmVyYXRlZCBwYXRocyBvZiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgdHlwZXMg dG8gYmUgbWFya2VkIGFzIGRpc2FibGVkLiBTaW1pbGFybHksIHVuc2V0dGluZworICogUEdTX0NP TlNJREVSX1BBUlRJVElPTldJU0UgcHJldmVudHMgYW55IHNvcnQgb2YgdGhpbmtpbmcgYWJvdXQg cGFydGl0aW9ud2lzZQorICogam9pbnMgZm9yIHRoZSBjdXJyZW50IHJlbCwgd2hpY2ggaW5jaWRl bnRhbGx5IHdpbGwgcHJlY2x1ZGUgaGlnaGVyLWxldmVsCisgKiBqb2lucmVscyBmcm9tIGJ1aWxk aW5nIHBhcnRpdGlvbndpc2UgcGF0aHMgdXNpbmcgcGF0aHMgdGFrZW4gZnJvbSB0aGUKKyAqIGN1 cnJlbnQgcmVsJ3MgY2hpbGRyZW4uIE9uIHRoZSBvdGhlciBoYW5kLCB1bnNldHRpbmcgUEdTX0FQ UEVORCBvcgorICogUEdTX01FUkdFX0FQUEVORCB3aWxsIG9ubHkgYXJyYW5nZSB0byBkaXNhYmxl IHBhdGhzIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKiB0eXBlcyBpZiB0aGV5IGFyZSBnZW5lcmF0 ZWQgYXQgdGhlIGxldmVsIG9mIHRoZSBjdXJyZW50IHJlbC4KKyAqCisgKiBGaW5hbGx5LCB1bnNl dHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgZGlzYWJsZXMgYWxsIG5vbi1wYXJ0aWFsIHBh dGhzCisgKiBleGNlcHQgdGhvc2UgdGhhdCB1c2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZS4gSW4g bW9zdCBvdGhlciBjYXNlcywgYQorICogcGx1Z2luIGNhbiBudWRnZSB0aGUgcGxhbm5lciB0b3dh cmQgYSBwYXJ0aWN1bGFyIHN0cmF0ZWd5IGJ5IGRpc2FibGluZworICogYWxsIG9mIHRoZSBvdGhl cnMsIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBoZXJlOiB1bnNldHRpbmcgUEdTX1NFUVNDQU4sCisg KiBmb3IgaW5zdGFuY2UsIHdvdWxkIGRpc2FibGUgYm90aCBwYXJ0aWFsIGFuZCBub24tcGFydGlh bCBzZXF1ZW50aWFsIHNjYW5zLgorICovCisjZGVmaW5lIFBHU19TRVFTQ0FOCQkJCQkweDAwMDAw MDAxCisjZGVmaW5lIFBHU19JTkRFWFNDQU4JCQkJMHgwMDAwMDAwMgorI2RlZmluZSBQR1NfSU5E RVhPTkxZU0NBTgkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgUEdTX0JJVE1BUFNDQU4JCQkJMHgwMDAw MDAwOAorI2RlZmluZSBQR1NfVElEU0NBTgkJCQkJMHgwMDAwMDAxMAorI2RlZmluZSBQR1NfRk9S RUlHTkpPSU4JCQkJMHgwMDAwMDAyMAorI2RlZmluZSBQR1NfTUVSR0VKT0lOX1BMQUlOCQkJMHgw MDAwMDA0MAorI2RlZmluZSBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFCTB4MDAwMDAwODAKKyNk ZWZpbmUgUEdTX05FU1RMT09QX1BMQUlOCQkJMHgwMDAwMDEwMAorI2RlZmluZSBQR1NfTkVTVExP T1BfTUFURVJJQUxJWkUJMHgwMDAwMDIwMAorI2RlZmluZSBQR1NfTkVTVExPT1BfTUVNT0laRQkJ MHgwMDAwMDQwMAorI2RlZmluZSBQR1NfSEFTSEpPSU4JCQkJMHgwMDAwMDgwMAorI2RlZmluZSBQ R1NfQVBQRU5ECQkJCQkweDAwMDAxMDAwCisjZGVmaW5lIFBHU19NRVJHRV9BUFBFTkQJCQkweDAw MDAyMDAwCisjZGVmaW5lIFBHU19HQVRIRVIJCQkJCTB4MDAwMDQwMDAKKyNkZWZpbmUgUEdTX0dB VEhFUl9NRVJHRQkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgUEdTX0NPTlNJREVSX0lOREVYT05MWQkJ MHgwMDAxMDAwMAorI2RlZmluZSBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRQkweDAwMDIwMDAw CisjZGVmaW5lIFBHU19DT05TSURFUl9OT05QQVJUSUFMCQkweDAwMDQwMDAwCisKKy8qCisgKiBD b252ZW5pZW5jZSBtYWNyb3MgZm9yIHVzZWZ1bCBjb21iaW5hdGlvbiBvZiB0aGUgYml0cyBkZWZp bmVkIGFib3ZlLgorICovCisjZGVmaW5lIFBHU19TQ0FOX0FOWQkJXAorCShQR1NfU0VRU0NBTiB8 IFBHU19JTkRFWFNDQU4gfCBQR1NfSU5ERVhPTkxZU0NBTiB8IFBHU19CSVRNQVBTQ0FOIHwgXAor CSBQR1NfVElEU0NBTikKKyNkZWZpbmUgUEdTX01FUkdFSk9JTl9BTlkJXAorCShQR1NfTUVSR0VK T0lOX1BMQUlOIHwgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRSkKKyNkZWZpbmUgUEdTX05FU1RM T09QX0FOWQlcCisJKFBHU19ORVNUTE9PUF9QTEFJTiB8IFBHU19ORVNUTE9PUF9NQVRFUklBTEla RSB8IFBHU19ORVNUTE9PUF9NRU1PSVpFKQorI2RlZmluZSBQR1NfSk9JTl9BTlkJCVwKKwkoUEdT X0ZPUkVJR05KT0lOIHwgUEdTX01FUkdFSk9JTl9BTlkgfCBQR1NfTkVTVExPT1BfQU5ZIHwgUEdT X0hBU0hKT0lOKQogCiAvKgogICogUmVsaWRzCkBAIC0xODYsNiArMjU5LDkgQEAgdHlwZWRlZiBz dHJ1Y3QgUGxhbm5lckdsb2JhbAogCS8qIHdvcnN0IFBST1BBUkFMTEVMIGhhemFyZCBsZXZlbCAq LwogCWNoYXIJCW1heFBhcmFsbGVsSGF6YXJkOwogCisJLyogbWFzayBvZiBhbGxvd2VkIHBhdGgg Z2VuZXJhdGlvbiBzdHJhdGVnaWVzICovCisJdWludDY0CQlkZWZhdWx0X3Bnc19tYXNrOworCiAJ LyogcGFydGl0aW9uIGRlc2NyaXB0b3JzICovCiAJUGFydGl0aW9uRGlyZWN0b3J5IHBhcnRpdGlv bl9kaXJlY3RvcnkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIApAQCAtOTM5LDcg KzEwMTUsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJQ2FyZGluYWxpdHkgcm93czsK IAogCS8qCi0JICogcGVyLXJlbGF0aW9uIHBsYW5uZXIgY29udHJvbCBmbGFncworCSAqIHBlci1y ZWxhdGlvbiBwbGFubmVyIGNvbnRyb2wKIAkgKi8KIAkvKiBrZWVwIGNoZWFwLXN0YXJ0dXAtY29z dCBwYXRocz8gKi8KIAlib29sCQljb25zaWRlcl9zdGFydHVwOwpAQCAtOTQ3LDYgKzEwMjMsOCBA QCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJYm9vbAkJY29uc2lkZXJfcGFyYW1fc3RhcnR1 cDsKIAkvKiBjb25zaWRlciBwYXJhbGxlbCBwYXRocz8gKi8KIAlib29sCQljb25zaWRlcl9wYXJh bGxlbDsKKwkvKiBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzayAqLworCXVpbnQ2NAkJcGdz X21hc2s7CiAKIAkvKgogCSAqIGRlZmF1bHQgcmVzdWx0IHRhcmdldGxpc3QgZm9yIFBhdGhzIHNj YW5uaW5nIHRoaXMgcmVsYXRpb247IGxpc3Qgb2YKQEAgLTM1MDYsNiArMzU4NCw3IEBAIHR5cGVk ZWYgc3RydWN0IFNlbWlBbnRpSm9pbkZhY3RvcnMKICAqIHNqaW5mbyBpcyBleHRyYSBpbmZvIGFi b3V0IHNwZWNpYWwgam9pbnMgZm9yIHNlbGVjdGl2aXR5IGVzdGltYXRpb24KICAqIHNlbWlmYWN0 b3JzIGlzIGFzIHNob3duIGFib3ZlIChvbmx5IHZhbGlkIGZvciBTRU1JL0FOVEkvaW5uZXJfdW5p cXVlIGpvaW5zKQogICogcGFyYW1fc291cmNlX3JlbHMgYXJlIE9LIHRhcmdldHMgZm9yIHBhcmFt ZXRlcml6YXRpb24gb2YgcmVzdWx0IHBhdGhzCisgKiBwZ3NfbWFzayBpcyBhIGJpdG1hc2sgb2Yg UEdTXyogY29uc3RhbnRzIHRvIGxpbWl0IHRoZSBqb2luIHN0cmF0ZWd5CiAgKi8KIHR5cGVkZWYg c3RydWN0IEpvaW5QYXRoRXh0cmFEYXRhCiB7CkBAIC0zNTE1LDYgKzM1OTQsNyBAQCB0eXBlZGVm IHN0cnVjdCBKb2luUGF0aEV4dHJhRGF0YQogCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvOwogCVNl bWlBbnRpSm9pbkZhY3RvcnMgc2VtaWZhY3RvcnM7CiAJUmVsaWRzCQlwYXJhbV9zb3VyY2VfcmVs czsKKwl1aW50NjQJCXBnc19tYXNrOwogfSBKb2luUGF0aEV4dHJhRGF0YTsKIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvY29zdC5oCmluZGV4IDA3YjhiZmE2Mzc3Li5mMmZkNWQzMTUwNyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29z dC5oCkBAIC0xMjUsNyArMTI1LDcgQEAgZXh0ZXJuIHZvaWQgY29zdF9tZXJnZV9hcHBlbmQoUGF0 aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBf Y29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJCQkJCSAgZG91YmxlIHR1cGxlcyk7CiBl eHRlcm4gdm9pZCBjb3N0X21hdGVyaWFsKFBhdGggKnBhdGgsCi0JCQkJCQkgIGludCBpbnB1dF9k aXNhYmxlZF9ub2RlcywKKwkJCQkJCSAgYm9vbCBlbmFibGVkLCBpbnQgaW5wdXRfZGlzYWJsZWRf bm9kZXMsCiAJCQkJCQkgIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFs X2Nvc3QsCiAJCQkJCQkgIGRvdWJsZSB0dXBsZXMsIGludCB3aWR0aCk7CiBleHRlcm4gdm9pZCBj b3N0X2FnZyhQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKQEAgLTE0OCw3ICsxNDgsNyBA QCBleHRlcm4gdm9pZCBjb3N0X2dyb3VwKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkgICBkb3VibGUgaW5wdXRfdHVwbGVzKTsKIGV4dGVybiB2b2lkIGluaXRpYWxfY29zdF9u ZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJICBKb2luQ29zdFdvcmtzcGFjZSAq d29ya3NwYWNlLAotCQkJCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkgIEpvaW5U eXBlIGpvaW50eXBlLCB1aW50NjQgZW5hYmxlX21hc2ssCiAJCQkJCQkJCSAgUGF0aCAqb3V0ZXJf cGF0aCwgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAqZXh0 cmEpOwogZXh0ZXJuIHZvaWQgZmluYWxfY29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwg TmVzdFBhdGggKnBhdGgsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDdkM2U3YjMyYzU2 Li5jZjhhNjU0ZmE1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2Rl LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTMyLDYgKzMyLDE1 IEBAIHR5cGVkZWYgc3RydWN0IEFwcGVuZFBhdGhJbnB1dAogCUxpc3QJICAgKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzOwogfSBBcHBlbmRQYXRoSW5wdXQ7CiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMg dG8gZ2V0IGNvbnRyb2wgZHVyaW5nIGpvaW5yZWwgc2V0dXAgKi8KK3R5cGVkZWYgdm9pZCAoKmpv aW5yZWxfc2V0dXBfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJIFJl bE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCQkJIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKKwkJ CQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJfcmVsLAorCQkJCQkJCQkJCSBTcGVjaWFsSm9pbklu Zm8gKnNqaW5mbywKKwkJCQkJCQkJCQkgTGlzdCAqcmVzdHJpY3RsaXN0KTsKK2V4dGVybiBQR0RM TElNUE9SVCBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBqb2lucmVsX3NldHVwX2hvb2s7CisKIC8q CiAgKiBwcm90b3R5cGVzIGZvciBwYXRobm9kZS5jCiAgKi8KQEAgLTk5LDcgKzEwOCw4IEBAIGV4 dGVybiBHcm91cFJlc3VsdFBhdGggKmNyZWF0ZV9ncm91cF9yZXN1bHRfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAkJCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCQkgUGF0 aFRhcmdldCAqdGFyZ2V0LAogCQkJCQkJCQkJCQkJIExpc3QgKmhhdmluZ3F1YWwpOwotZXh0ZXJu IE1hdGVyaWFsUGF0aCAqY3JlYXRlX21hdGVyaWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRo ICpzdWJwYXRoKTsKK2V4dGVybiBNYXRlcmlhbFBhdGggKmNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJl bE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0aCwKKwkJCQkJCQkJCQkgIGJvb2wgZW5hYmxlZCk7 CiBleHRlcm4gTWVtb2l6ZVBhdGggKmNyZWF0ZV9tZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCVBhdGggKnN1YnBhdGgs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRl L29wdGltaXplci9wYXRocy5oCmluZGV4IDQ3MWU0OWMwNTU4Li44NzUxYWQ3MzgxYyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhzLmgKQEAgLTI4LDcgKzI4LDE0IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQg bWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWlu X3BhcmFsbGVsX2luZGV4X3NjYW5fc2l6ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJs ZV9ncm91cF9ieV9yZW9yZGVyaW5nOwogCi0vKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250 cm9sIGluIHNldF9yZWxfcGF0aGxpc3QoKSAqLworLyogSG9va3MgZm9yIHBsdWdpbnMgdG8gZ2V0 IGNvbnRyb2wgaW4gc2V0X3JlbF9wYXRobGlzdCgpICovCit0eXBlZGVmIHZvaWQgKCpqb2luX3Bh dGhfc2V0dXBfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJICAgUmVs T3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJ CQkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkJCQkgICBKb2luVHlwZSBq b2ludHlwZSwKKwkJCQkJCQkJCQkgICBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpOworZXh0ZXJu IFBHRExMSU1QT1JUIGpvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUgam9pbl9wYXRoX3NldHVwX2hv b2s7CiB0eXBlZGVmIHZvaWQgKCpzZXRfcmVsX3BhdGhsaXN0X2hvb2tfdHlwZSkgKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCUluZGV4 IHJ0aSwKLS0gCjIuNTEuMAoK --0000000000006c6cda064833ff55 Content-Type: application/octet-stream; name="v9-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v9-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkbf681h4 RnJvbSA3NzNhMzhmY2Y3MDBmYWQ0OWJjZDcwOWM0OTU1ZTMwYTg1OTYxYjI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTE6MTM6NTkgLTA1MDAKU3ViamVjdDogW1BBVENIIHY5IDUv NV0gV0lQOiBBZGQgcGdfcGxhbl9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpQcm92aWRlIGEgZmFj aWxpdHkgdGhhdCAoMSkgY2FuIGJlIHVzZWQgdG8gc3RhYmlsaXplIGNlcnRhaW4gcGxhbiBjaG9p Y2VzCnNvIHRoYXQgdGhlIHBsYW5uZXIgY2Fubm90IHJldmVyc2UgY291cnNlIHdpdGhvdXQgYXV0 aG9yaXphdGlvbiBhbmQKKDIpIGNhbiBiZSB1c2VkIGJ5IGtub3dsZWRnZWFibGUgdXNlcnMgdG8g aW5zaXN0IG9uIHBsYW4gY2hvaWNlcyBjb250cmFyeQp0byB3aGF0IHRoZSBwbGFubmVyIGJlbGll dmVzIGJlc3QuIEluIGJvdGggY2FzZXMsIHRlcnJpYmxlIG91dGNvbWVzIGFyZQpwb3NzaWJsZTog dXNlcnMgc2hvdWxkIHRoaW5rIHR3aWNlIGFuZCBwZXJoYXBzIHRocmVlIHRpbWVzIGJlZm9yZQpj b25zdHJhaW5pbmcgdGhlIHBsYW5uZXIncyBhYmlsaXR5IHRvIGRvIGFzIGl0IHRoaW5rcyBiZXN0 OyBuZXZlcnRoZWxlc3MsCnRoZXJlIGFyZSBwcm9ibGVtcyB0aGF0IGFyZSBtdWNoIG1vcmUgZWFz aWx5IHNvbHZlZCB3aXRoIHRoZXNlIGZhY2lsaXRpZXMKdGhhbiB3aXRob3V0IHRoZW0uCgpUaGlz IHBhdGNoIHRha2VzIHRoZSBhcHByb2FjaCBvZiBhbmFseXppbmcgYSBmaW5pc2hlZCBwbGFuIHRv IHByb2R1Y2UKdGV4dHVhbCBvdXRwdXQsIHdoaWNoIHdlIGNhbGwgInBsYW4gYWR2aWNlIiwgdGhh dCBkZXNjcmliZXMga2V5CmRlY2lzaW9ucyBtYWRlIGR1cmluZyBwbGFuOyBpZiB0aGF0IHBsYW4g YWR2aWNlIGlzIHByb3ZpZGVkIGR1cmluZwpmdXR1cmUgcGxhbm5pbmcgY3ljbGVzLCBpdCB3aWxs IGZvcmNlIHRob3NlIGtleSBkZWNpc2lvbnMgdG8gYmUgbWFkZSBpbgp0aGUgc2FtZSB3YXkuICBO b3QgYWxsIHBsYW5uZXIgZGVjaXNpb25zIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIGFkdmljZTsK Zm9yIGV4YW1wbGUsIGRlY2lzaW9ucyBhYm91dCBob3cgdG8gcGVyZm9ybSBhZ2dyZWdhdGlvbiBh cmUgY3VycmVudGx5Cm91dCBvZiBzY29wZSwgYXMgaXMgY2hvaWNlIG9mIHNvcnQgb3JkZXIuIFBs YW4gYWR2aWNlIGNhbiBhbHNvIGJlIGVkaXRlZApieSB0aGUgdXNlciwgb3IgZXZlbiB3cml0dGVu IGZyb20gc2NyYXRjaCBpbiBzaW1wbGUgY2FzZXMsIG1ha2luZyBpdApwb3NzaWJsZSB0byBnZW5l cmF0ZSBvdXRjb21lcyB0aGF0IHRoZSBwbGFubmVyIHdvdWxkIG5vdCBoYXZlIHByb2R1Y2VkLgpQ YXJ0aWFsIGFkdmljZSBjYW4gYmUgcHJvdmlkZWQgdG8gY29udHJvbCBzb21lIHBsYW5uZXIgb3V0 Y29tZXMgYnV0IG5vdApvdGhlcnMuCgpDdXJyZW50bHksIHBsYW4gYWR2aWNlIGlzIGZvY3VzZWQg b25seSBvbiBzcGVjaWZpYyBvdXRjb21lcywgc3VjaCBhcwp0aGUgY2hvaWNlIHRvIHVzZSBhIHNl cXVlbnRpYWwgc2NhbiBmb3IgYSBwYXJ0aWN1bGFyIHJlbGF0aW9uLCBhbmQgbm90Cm9uIGVzdGlt YXRlcyB0aGF0IG1pZ2h0IGNvbnRyaWJ1dGUgdG8gdGhvc2Ugb3V0Y29tZXMsIHN1Y2ggYXMgYQpw b3NzaWJseS1pbmNvcnJlY3Qgc2VsZWN0aXZpdHkgZXN0aW1hdGUuIFdoaWxlIGl0IHdvdWxkIGJl IHVzZWZ1bCB0bwp1c2VycyB0byBiZSBhYmxlIHRvIHByb3ZpZGUgcGxhbiBhZHZpY2UgdGhhdCBh ZmZlY3RzIHNlbGVjdGl2aXR5CmVzdGltYXRlcyBvciBvdGhlciBhc3BlY3RzIG9mIGNvc3Rpbmcs IHRoYXQgaXMgb3V0IG9mIHNjb3BlIGZvciB0aGlzCmNvbW1pdC4KCkZvciBtb3JlIGRldGFpbHMs IHNlZSBjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRS4KCk5PVEU6IFRoaXMgY29kZSBpcyBq dXN0IGEgcHJvb2Ygb2YgY29uY2VwdC4gQSBidW5jaCBvZiB0aGluZ3MgZG9uJ3QKd29yayBhbmQg YSBsb3Qgb2YgdGhlIGNvZGUgbmVlZHMgY2xlYW51cC4gSXQgaGFzIG5vIFNHTUwgZG9jdW1lbnRh dGlvbgphbmQgbm90IGVub3VnaCB0ZXN0IGNhc2VzLCBhbmQgc29tZSBvZiB0aGUgZXhpc3Rpbmcg dGVzdCBjYXNlcyBkb24ndApkbyBhcyB3ZSB3b3VsZCBob3BlLiBLbm93biBwcm9ibGVtcyBhcmUg Y2FsbGVkIG91dCBieSBYWFguCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRs LmNvbT4KUmV2aWV3ZWQtYnk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2Vk Yi5jb20+ClJldmlld2VkLWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6 IEphY29iIENoYW1waW9uIDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdl ZC1ieTogSGFpYm8gWWFuIDx0cmlzdGFuLnlpbUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBEaWFu IEZheSA8ZGlAbm1mYXkuY29tPgpSZXZpd2VlZC1ieTogQWpheSBQYWwgPGFqYXkucGFsLmtAZ21h aWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdtb1otSmgxVDZReVdv Q09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwuY29tCi0tLQogY29u dHJpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBjb250 cmliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZSAgICAgICAgICAgICB8ICAgIDMgKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICA1MCArCiBjb250cmli L3BnX3BsYW5fYWR2aWNlL1JFQURNRSAgICAgICAgICAgICAgICAgfCAgMjczICsrKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0ICAgIHwgIDM0NCArKysKIC4uLi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dCAgICB8ICAyOTUgKysrCiAuLi4v cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQgfCAgMjk3ICsrKwogLi4u L2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgICAgICAgICAgICAgIHwgICA2NSArCiAuLi4v cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQgfCAgMzY0ICsrKysKIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgICAgICB8ICA3NTcgKysrKysr KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0ICAgIHwgIDE3NCAr KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgICA3MCAr CiAuLi4vcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgICAgfCAgIDQyICsK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyAgICAgICB8ICA0NjggKysr KysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbCB8ICAgIDUg KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oICAgICAgIHwgICA0MCAr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgICAgICAgICAgICAgfCAgMzk0ICsr KysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCAgICAgICAgICAgICB8ICAyMDQg KysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYyAgICAgICB8ICA2Mzcg KysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmggICAgICAgfCAg IDE4ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMgICAgICB8ICA0 NzYgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmggICAgICB8 ICAgNTIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYyAgICAgICAgICAgIHwg IDYyOSArKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmggICAgICAgICAg ICB8ICAxMDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jICAgICAgICAg IHwgIDYyOCArKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaCAgICAg ICAgICB8ICAgMjIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55ICAgICAg ICAgIHwgIDM0MCArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgICAg ICAgICB8IDE4NjggKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wbGFubmVyLmggICAgICAgICB8ICAgMTcgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3NjYW4uYyAgICAgICAgICAgIHwgIDMwMyArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9zY2FuLmggICAgICAgICAgICB8ICAgODUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3NjYW5uZXIubCAgICAgICAgIHwgIDMwMiArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV90cm92ZS5jICAgICAgICAgICB8ICA0OTIgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV90cm92ZS5oICAgICAgICAgICB8ICAxMTMgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3dhbGtlci5jICAgICAgICAgIHwgIDk2OCArKysrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV93YWxrZXIuaCAgICAgICAgICB8ICAxNDEgKysKIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL2dhdGhlci5zcWwgICAgICAgICB8ICAgNzkgKwogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvam9pbl9vcmRlci5zcWwgICAgIHwgICA5NiArCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbCAgfCAgIDc2ICsKIC4uLi9wZ19wbGFuX2FkdmljZS9z cWwvbG9jYWxfY29sbGVjdG9yLnNxbCAgICB8ICAgNDEgKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgIHwgICA5MSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9zY2FuLnNxbCAgICAgICAgICAgfCAgMTk1ICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9zeW50YXguc3FsICAgICAgICAgfCAgIDYxICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv dC8wMDFfcmVncmVzcy5wbCAgICAgICB8ICAxNDcgKysKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMzggKwogNDYgZmlsZXMgY2hhbmdlZCwgMTE4Njcg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv LmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFr ZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVy Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv am9pbl9vcmRlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0CiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5 bnRheC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL21lc29u LmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFu X2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdfcGxhbl9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253 aXNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3Nj YW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3lu dGF4LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFf cmVncmVzcy5wbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2Vm aWxlCmluZGV4IDJmMGE4OGQzZjc3Li5kZDA0YzIwYWNkMiAxMDA2NDQKLS0tIGEvY29udHJpYi9N YWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zNCw2ICszNCw3IEBAIFNVQkRJUlMg PSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJCXBnX2xvZ2ljYWxpbnNwZWN0IFwKIAkJcGdfb3Zl cmV4cGxhaW4gXAorCQlwZ19wbGFuX2FkdmljZSBcCiAJCXBnX3ByZXdhcm0JXAogCQlwZ19zdGF0 X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbWVzb24u YnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGRlZjEzMjU3Y2JlLi41YTc1MmVhYzM0 NyAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysgYi9jb250cmliL21lc29uLmJ1 aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigncGdjcnlwdG8nKQogc3ViZGlyKCdwZ19mcmVl c3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2FsaW5zcGVjdCcpCiBzdWJkaXIoJ3BnX292ZXJl eHBsYWluJykKK3N1YmRpcigncGdfcGxhbl9hZHZpY2UnKQogc3ViZGlyKCdwZ19wcmV3YXJtJykK IHN1YmRpcigncGdyb3dsb2NrcycpCiBzdWJkaXIoJ3BnX3N0YXRfc3RhdGVtZW50cycpCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjE5YTE0MjUzMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3BncGFfcGFyc2VyLmgKKy9wZ3BhX3BhcnNl ci5jCisvcGdwYV9zY2FubmVyLmMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv TWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZDRjNTU5YWVkOAotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSw1MCBAQAorIyBjb250 cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBwZ19wbGFuX2Fkdmlj ZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJcGdfcGxhbl9hZHZpY2UubyBcCisJcGdwYV9h c3QubyBcCisJcGdwYV9jb2xsZWN0b3IubyBcCisJcGdwYV9pZGVudGlmaWVyLm8gXAorCXBncGFf am9pbi5vIFwKKwlwZ3BhX291dHB1dC5vIFwKKwlwZ3BhX3BhcnNlci5vIFwKKwlwZ3BhX3BsYW5u ZXIubyBcCisJcGdwYV9zY2FuLm8gXAorCXBncGFfc2Nhbm5lci5vIFwKKwlwZ3BhX3Ryb3ZlLm8g XAorCXBncGFfd2Fsa2VyLm8KKworRVhURU5TSU9OID0gcGdfcGxhbl9hZHZpY2UKK0RBVEEgPSBw Z19wbGFuX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJwZ19wbGFuX2FkdmljZSAtIGhl bHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuIgorCitSRUdSRVNTID0gZ2F0aGVyIGpv aW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNlIHNjYW4KK1RBUF9URVNUUyA9IDEK KworRVhUUkFfQ0xFQU4gPSBwZ3BhX3BhcnNlci5oIHBncGFfcGFyc2VyLmMgcGdwYV9zY2FubmVy LmMKKworIyByZXF1aXJlZCBmb3IgMDAxX3JlZ3Jlc3MucGwKK1JFR1JFU1NfU0hMSUI9JChhYnNf dG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MkKERMU1VGRklYKQorZXhwb3J0 IFJFR1JFU1NfU0hMSUIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZwor UEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vs c2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3RvcF9idWlsZGRpciA9IC4uLy4u CitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQo dG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKworIyBTZWUgbm90 ZXMgaW4gc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGFib3V0IHRoZSBmb2xsb3dpbmcgdHdv IHJ1bGVzCitwZ3BhX3BhcnNlci5oOiBwZ3BhX3BhcnNlci5jCisJdG91Y2ggJEAKKworcGdwYV9w YXJzZXIuYzogQklTT05GTEFHUyArPSAtZAorCisjIEZvcmNlIHRoZXNlIGRlcGVuZGVuY2llcyB0 byBiZSBrbm93biBldmVuIHdpdGhvdXQgZGVwZW5kZW5jeSBpbmZvIGJ1aWx0OgorcGdwYV9wYXJz ZXIubyBwZ3BhX3NjYW5uZXIubzogcGdwYV9wYXJzZXIuaApkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9SRUFETUUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTkwMTdmMzk4M2IKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQpAQCAtMCwwICsxLDI3MyBA QAorY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKKworUGxhbiBBZHZpY2UKKz09PT09PT09 PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtaW5pLWxhbmd1YWdlIGZvciAicGxhbiBh ZHZpY2UiIHRoYXQgYWxsb3dzIGZvcgorY29udHJvbCBvZiBjZXJ0YWluIGtleSBwbGFubmVyIGRl Y2lzaW9ucy4gR29hbHMgaW5jbHVkZSAoMSkgZW5mb3JjaW5nIHBsYW4KK3N0YWJpbGl0eSAobXkg cHJldmlvdXMgcGxhbiB3YXMgZ29vZCBhbmQgSSB3b3VsZCBsaWtlIHRvIGtlZXAgZ2V0dGluZyBh CitzaW1pbGFyIG9uZSkgYW5kICgyKSBhbGxvd2luZyB1c2VycyB0byBleHBlcmltZW50IHdpdGgg cGxhbnMgb3RoZXIgdGhhbgordGhlIG9uZSBwcmVmZXJyZWQgYnkgdGhlIG9wdGltaXplci4gTm9u LWdvYWxzIGluY2x1ZGUgKDEpIGNvbnRyb2xsaW5nCitldmVyeSBwb3NzaWJsZSBwbGFubmVyIGRl Y2lzaW9uIGFuZCAoMikgZm9yY2luZyBjb25zaWRlcmF0aW9uIG9mIHBsYW5zCit0aGF0IHRoZSBv cHRpbWl6ZXIgcmVqZWN0cyBmb3IgcmVhc29ucyBvdGhlciB0aGFuIGNvc3QuIChUaGVyZSBpcyBz b21lCityb29tIGZvciBiaWtlc2hlZGRpbmcgYWJvdXQgd2hhdCBleGFjdGx5IHRoaXMgbm9uLWdv YWwgbWVhbnM6IHdoYXQgaWYKK3dlIHNraXAgcGF0aCBnZW5lcmF0aW9uIGVudGlyZWx5IGZvciBh IGNlcnRhaW4gY2FzZSBvbiB0aGUgdGhlb3J5IHRoYXQKK3dlIGtub3cgaXQgY2Fubm90IHdpbiBv biBjb3N0PyBEb2VzIHRoYXQgY291bnQgYXMgYSBjb3N0LWJhc2VkIHJlamVjdGlvbgorZXZlbiB0 aG91Z2ggbm8gY29zdCB3YXMgZXZlciBjb21wdXRlZD8pCisKK0dlbmVyYWxseSwgcGxhbiBhZHZp Y2UgaXMgYSBzZXJpZXMgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQgYWR2aWNlIGl0ZW1zLAorZWFj aCBvZiB3aGljaCBhcHBsaWVzIGFuIGFkdmljZSB0YWcgdG8gYSBsaXN0IG9mIGFkdmljZSB0YXJn ZXRzLiBGb3IKK2V4YW1wbGUsICJTRVFfU0NBTihmb28pIEhBU0hfSk9JTihiYXJAc3MpIiBjb250 YWlucyB0d28gaXRlbXMgb2YgYWR2aWNlLAordGhlIGZpcnN0IG9mIHdoaWNoIGFwcGxpZXMgdGhl IFNFUV9TQ0FOIHRhZyB0byAiZm9vIiBhbmQgdGhlIHNlY29uZCBvZgord2hpY2ggYXBwbGllcyB0 aGUgSEFTSF9KT0lOIHRhZyB0byAiYmFyQHNzIi4gSW4gdGhpcyBzaW1wbGUgZXhhbXBsZSwgZWFj aAordGFyZ2V0IGlkZW50aWZpZXMgYSBzaW5nbGUgcmVsYXRpb247IHNlZSAiUmVsYXRpb24gSWRl bnRpZmllcnMiLCBiZWxvdy4KK0FkdmljZSB0YWdzIGNhbiBhbHNvIGJlIGFwcGxpZWQgdG8gZ3Jv dXBzIG9mIHJlbGF0aW9uczsgZm9yIGV4YW1wbGUsCisiSEFTSF9KT0lOKGJheiAoYmxldGNoIHF1 dXgpKSIgYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byB0aGUgc2luZ2xlCityZWxhdGlvbiBp ZGVudGlmaWVyICJiYXoiIGFzIHdlbGwgYXMgdG8gdGhlIDItaXRlbSBsaXN0IGNvbnRhaW5pbmcK KyJibGV0Y2giIGFuZCAicXV1eCIuCisKK0NyaXRpY2FsbHksIHRoaXMgbW9kdWxlIGtub3dzIGJv dGggaG93IHRvIGdlbmVyYXRlIHBsYW4gYWR2aWNlIGZyb20gYW4KK2FscmVhZHktZXhpc3Rpbmcg cGxhbiwgYW5kIGFsc28gaG93IHRvIGVuZm9yY2UgaXQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZwor Y3ljbGVzLiBFdmVyeXRoaW5nIGl0IGRvZXMgaXMgaW50ZW5kZWQgdG8gYmUgInJvdW5kLXRyaXAg c2FmZSI6IGlmIHlvdQorZ2VuZXJhdGUgYWR2aWNlIGZyb20gYSBwbGFuIGFuZCB0aGVuIGZlZWQg dGhhdCBiYWNrIGludG8gYSBmdXR1cmUgcGxhbmluZworY3ljbGUsIGVhY2ggcGllY2Ugb2YgYWR2 aWNlIHNob3VsZCBiZSBndWFyYW50ZWVkIHRvIGFwcGx5IHRvIHRoZSBleGFjdGx5IHRoZQorc2Ft ZSBwYXJ0IG9mIHRoZSBxdWVyeSBmcm9tIHdoaWNoIGl0IHdhcyBnZW5lcmF0ZWQgd2l0aG91dCBh bWJpZ3VpdHkgb3IKK2d1ZXNzd29yaywgYW5kIGl0IHNob3VsZCBzdWNjZXNmdWxseSBlbmZvcmNl IHRoZSBzYW1lIHBsYW5uaW5nIGRlY2lzaW9uIHRoYXQKK2xlZCB0byBpdCBiZWluZyBnZW5lcmF0 ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8KK2ludGVudGlvbiB0 aGF0IHRoZXNlIGd1YXJhbnRlZXMgaG9sZCBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJ2ZW5pbmcg RERMOworZS5nLiBpZiB5b3UgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIG9mIGEgZnVuY3Rpb24gc28g dGhhdCBhIHN1YnF1ZXJ5IGlzIG5vCitsb25nZXIgaW5saW5lZCwgb3IgaWYgeW91IGRyb3AgYW4g aW5kZXggbmFtZWQgaW4gdGhlIHBsYW4gYWR2aWNlLCB0aGUgYWR2aWNlCitpc24ndCBnb2luZyB0 byB3b3JrIGFueSBtb3JlLiBUaGF0J3MgZXhwZWN0ZWQuCisKK1RoaXMgbW9kdWxlIGFpbXMgdG8g Zm9yY2UgdGhlIHBsYW5uZXIgdG8gZm9sbG93IGFueSBwcm92aWRlZCBhZHZpY2Ugd2l0aG91dAor cmVnYXJkIHRvIHdoZXRoZXIgaXQgaXMgYXBwZWFycyB0byBiZSBnb29kIGFkdmljZSBvciBiYWQg YWR2aWNlLiAgSWYgdGhlCit1c2VyIHByb3ZpZGVzIGJhZCBhZHZpY2UsIHdoZXRoZXIgZGVyaXZl ZCBmcm9tIGEgcHJldmlvdXNseS1nZW5lcmF0ZWQgcGxhbgorb3IgbWFudWFsbHkgd3JpdHRlbiwg dGhleSBtYXkgZ2V0IGEgYmFkIHBsYW4uIFdlIHJlZ2FyZCB0aGlzIGFzIHVzZXIgZXJyb3IsCitu b3QgYSBkZWZlY3QgaW4gdGhpcyBtb2R1bGUuIEl0IHNlZW1zIGxpa2VseSB0aGF0IGFwcGx5aW5n IGFkdmljZQoranVkaWNpb3VzbHkgYW5kIG9ubHkgd2hlbiB0cnVseSByZXF1aXJlZCB0byBhdm9p ZCBwcm9ibGVtcyB3aWxsIGJlIGEgbW9yZQorc3VjY2Vzc2Z1bCBzdHJhdGVneSB0aGFuIGFwcGx5 aW5nIGl0IHdpdGggYSBicm9hZCBicnVzaCwgYnV0IHVzZXJzIGFyZSBmcmVlCit0byBleHBlcmlt ZW50IHdpdGggd2hhdGV2ZXIgc3RyYXRlZ2llcyB0aGV5IHRoaW5rIGJlc3QuCisKK1JlbGF0aW9u IElkZW50aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitVbmlxdWVseSBpZGVudGlmeWlu ZyB0aGUgcGFydCBvZiBhIHF1ZXJ5IHRvIHdoaWNoIGEgY2VydGFpbiBwaWVjZSBvZgorYWR2aWNl IGFwcGxpZXMgaXMgaGFyZGVyIHRoYW4gaXQgc291bmRzLiBPdXIgYmFzaWMgYXBwcm9hY2ggaXMg dG8gdXNlCityZWxhdGlvbiBhbGlhc2VzIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCB0aGVuIGRp c2FtYmlndWF0ZS4gVGhlcmUgYXJlCit0aHJlZSB3YXlzIHRoYXQgc2FtZSByZWxhdGlvbiBhbGlh cyBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXM6CisKKzEuIEl0IGNhbiBhcHBlYXIgaW4gbW9yZSB0 aGFuIG9uZSBzdWJxdWVyeS4KKworMi4gSXQgY2FuIGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiB0 aGUgc2FtZSBzdWJxdWVyeSwKKyAgIGUuZy4gKGZvbyBKT0lOIGJhcikgeCBKT0lOIGZvby4KKwor My4gVGhlIHRhYmxlIGNhbiBiZSBwYXJ0aXRpb25lZC4KKworQW55IGNvbWJpbmF0aW9uIG9mIHRo ZXNlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHkuICBUaGVyZWZvcmUsIG91cgorZ2Vu ZXJhbCBzeW50YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmllciBpczoKKworYWxpYXNfbmFtZSNv Y2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRpdGlvbl9uYW1lQHBsYW5fbmFt ZQorCitBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSBhbGlhc19uYW1lIGFyZSBvcHRpb25h bCBhbmQgaW5jbHVkZWQgb25seQord2hlbiByZXF1aXJlZC4gV2hlbiBhIGNvbXBvbmVudCBpcyBv bWl0dGVkLCB0aGUgYXNzb2NpYXRlZCBwdW5jdHVhdGlvbgorbXVzdCBhbHNvIGJlIG9taXR0ZWQu IE9jY3VycmVuY2UgbnVtYmVycyBhcmUgY291bnRlZCBpZ25vcmluZyBjaGlsZHJlbiBvZgorcGFy dGl0aW9uZWQgdGFibGVzLiAgV2hlbiB0aGUgZ2VuZXJhdGVkIG9jY3VycmVuY2UgbnVtYmVyIGlz IDEsIHdlIG9taXQKK3RoZSBvY2N1cnJlbmNlIG51bWJlci4gVGhlIHBhcnRpdGlvbiBzY2hlbWEg YW5kIHBhcnRpdGlvbiBuYW1lIGFyZSBpbmNsdWRlZAorb25seSBmb3IgY2hpbGRyZW4gb2YgcGFy dGl0aW9uZWQgdGFibGVzLiBJbiBnZW5lcmF0ZWQgYWR2aWNlLCB0aGUKK3BhcnRpdGlvbl9zY2hl bWEgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW5ldmVyIHRoZXJlIGlzIGEgcGFydGl0aW9uX25hbWUs CitidXQgdXNlci13cml0dGVuIGFkdmljZSBtYXkgbWVudGlvbiB0aGUgbmFtZSBhbmQgb21pdCB0 aGUgc2NoZW1hLiBUaGUKK3BsYW5fbmFtZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wLWxldmVsIFBs YW5uZXJJbmZvLgorCitTY2FuIEFkdmljZQorPT09PT09PT09PT0KKworRm9yIG1hbnkgdHlwZXMg b2Ygc2Nhbiwgbm8gYWR2aWNlIGlzIGdlbmVyYXRlZCBvciBwb3NzaWJsZTsgZm9yIGluc3RhbmNl LAorYSBzdWJxdWVyeSBpcyBhbHdheXMgc2Nhbm5lZCB1c2luZyBhIHN1YnF1ZXJ5IHNjYW4uIFdo aWxlIHRoYXQgc2NhbiBtYXkgYmUKK2VsaWRlZCB2aWEgc2V0cmVmcyBwcm9jZXNzaW5nLCB0aGlz IGRvZXNuJ3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQgb25seSBvbmUKK2Jhc2ljIGFwcHJvYWNoIGV4 aXN0cy4gSGVuY2UsIHNjYW4gYWR2aWNlIGFwcGxpZXMgbW9zdGx5IHRvIHJlbGF0aW9ucywgd2hp Y2gKK2NhbiBiZSBzY2FubmVkIGluIG11bHRpcGxlIHdheXMuCisKK1dlIHRlbmQgdG8gdGhpbmsg b2YgYSBzY2FuIGFzIHRhcmdldGluZyBhIHNpbmdsZSByZWxhdGlvbiwgYW5kIHRoYXQncworbm9y bWFsbHkgdGhlIGNhc2UsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuIEZvciBpbnN0YW5jZSwg aWYgYSBqb2luIGlzCitwcm92ZW4gZW1wdHksIHRoZSB3aG9sZSB0aGluZyBtYXkgYmUgcmVwbGFj ZWQgd2l0aCBhIHNpbmdsZSBSZXN1bHQgbm9kZQord2hpY2gsIGluIGVmZmVjdCwgaXMgYSBkZWdl bmVyYXRlIHNjYW4gb2YgZXZlcnkgcmVsYXRpb24gaW4gdGhlIGNvbGxhcHNlZAorcG9ydGlvbiBv ZiB0aGUgam9pbiB0cmVlLiBTaW1pbGFybHksIGl0J3MgcG9zc2libGUgdG8gaW5qZWN0IGEgY3Vz dG9tIHNjYW4KK2luIHN1Y2ggYSB3YXkgdGhhdCBpdCByZXBsYWNlcyBhbiBlbnRpcmUgam9pbi4g SWYgd2UgZXZlciBlbWl0IGFkdmljZQorZm9yIHRoZXNlIGNhc2VzLCBpdCB3b3VsZCB0YXJnZXQg c2V0cyBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBzdXJyb3VuZGVkCitieSBjdXJseSBicmFuY2Vz LCBlLmcuIFNPTUVfU09SVF9PRl9TQ0FOKGZvbyAoYmFyIGJheikpIHdvdWxkIG1lYW4gdGhhdCB0 aGUKK3RoZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBmb3IgZm9vIGFzIGEgc2luZ2xl IHJlbGF0aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2YgYmFyIGFuZCBiYXogYXMgYSBq b2luIHByb2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAorcHJlc2VudC4KKworRm9yIGlu ZGV4IGFuZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxhdGlvbiBiZWluZyBzY2FubmVk IGFuZCB0aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBtdXN0IGJlIHNwZWNpZmllZC4g Rm9yIGV4YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHggYmFyIGJhcl9iX2lkeCkgaW5k aWNhdGVzIHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4LW9ubHkKK3NjYW4pIHNob3Vs ZCBiZSB1c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZvbywgYW5kIHRoYXQgYW4gaW5k ZXggc2Nhbgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdoZW4gc2Nhbm5pbmcgYmFyLgor CitCaXRtYXAgaGVhcCBzY2FucyBhbGxvdyBmb3IgYSBtb3JlIGNvbXBsaWNhdGVkIGluZGV4IHNw ZWNpZmljYXRpb24uIEZvcgorZXhhbXBsZSwgQklUTUFQX0hFQVBfU0NBTihmb28gJiYoZm9vX2Ff aWR4IHx8KGZvb19iX2lkeCBmb29fY19pZHgpKSkgc2F5cwordGhhdCBmb28gc2hvdWxkIGJlIHNj YW5uZWQgdXNpbmcgYSBCaXRtYXBIZWFwU2NhbiBvdmVyIGEgQml0bWFwQW5kIGJldHdlZW4KK2Zv b19hX2lkeCBhbmQgdGhlIHJlc3VsdCBvZiBhIEJpdG1hcE9yIGJldHdlZW4gZm9vX2JfaWR4IGFu ZCBmb29fY19pZHguCisKK1hYWDogQ3VycmVudGx5LCBCSVRNQVBfSEVBUF9TQ0FOIGRvZXMgbm90 IGVuZm9yY2UgdGhlIGluZGV4IHNwZWNpZmljYXRpb24sCitiZWNhdXNlIHRoZSBhdmFpbGFibGUg aG9va3MgYXJlIGluc3VmZmljaWVudCB0byBkbyBzby4gSXQncyBwb3NzaWJsZSB0aGF0Cit0aGlz IHNob3VsZCBiZSBjaGFuZ2VkIHRvIGV4Y2x1ZGUgdGhlIGluZGV4IHNwZWNpZmljYXRpb24gYWx0 b2dldGhlciBhbmQKK3NpbXBseSBpbnNpc3QgdGhhdCBzb21lIHNvcnQgb2YgYml0bWFwIGhlYXAg c2NhbiBpcyB1c2VkOyBhbHRlcm5hdGl2ZWx5LAord2UgbmVlZCBiZXR0ZXIgaG9va3MuCisKK0pv aW4gT3JkZXIgQWR2aWNlCis9PT09PT09PT09PT09PT09PQorCitUaGUgSk9JTl9PUkRFUiB0YWcg c3BlY2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCBzZXZlcmFsIHRhYmxlcyB0aGF0IGFyZQorcGFy dCBvZiB0aGUgc2FtZSBqb2luIHByb2JsZW0gc2hvdWxkIGJlIGpvaW5lZC4gRWFjaCBzdWJxdWVy eSAoZXhjZXB0IGZvcgordGhvc2UgdGhhdCBhcmUgaW5saW5lZCkgaXMgYSBzZXBhcmF0ZSBqb2lu IHByb2JsZW0uIFdpdGhpbiBhIHN1YnF1ZXJ5LAorcGFydGl0aW9ud2lzZSBqb2lucyBjYW4gY3Jl YXRlIGFkZGl0aW9uYWwsIHNlcGFyYXRlIGpvaW4gcHJvYmxlbXMuIEhlbmNlLAorcXVlcmllcyBp bnZvbHZpbmcgcGFydGl0aW9ud2lzZSBqb2lucyBtYXkgdXNlIEpPSU5fT1JERVIoKSBtYW55IHRp bWVzLgorCitXZSB0YWtlIHRoZSBjYW5vbmljYWwgam9pbiBzdHJ1Y3R1cmUgdG8gYmUgYW4gb3V0 ZXItZGVlcCB0cmVlLCBzbworSk9JTl9PUkRFUih0MSB0MiB0Mykgc2F5cyB0aGF0IHQxIGlzIHRo ZSBkcml2aW5nIHRhYmxlIGFuZCBzaG91bGQgYmUgam9pbmVkCitmaXJzdCB0byB0MiBhbmQgdGhl biB0byB0My4gSWYgdGhlIGpvaW4gcHJvYmxlbSBpbnZvbHZlcyBhZGRpdGlvbmFsIHRhYmxlcywK K3RoZXkgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIgYWZ0ZXIgdGhlIGpvaW4gYmV0d2VlbiB0 MSwgdDIsIGFuZCB0MyBoYXMKK2JlZW4gY29uc3RydWN0dXJlZC4gR2VuZXJhdGVkIGpvaW4gYWR2 aWNlIGFsd2F5cyBtZW50aW9ucyBhbGwgdGFibGVzCitpbiB0aGUgam9pbiBwcm9ibGVtLCBidXQg bWFudWFsbHkgd3JpdHRlbiBqb2luIGFkdmljZSBuZWVkIG5vdCBkbyBzby4KKworRm9yIHRyZWVz IHdoaWNoIGFyZSBub3Qgb3V0ZXItZGVlcCwgcGFyZW50aGVzZXMgY2FuIGJlIHVzZWQuIEZvciBl eGFtcGxlLAorSk9JTl9PUkRFUih0MSAodDIgdDMpKSBzYXlzIHRoYXQgdGhlIHRvcC1sZXZlbCBq b2luIHNob3VsZCBoYXZlIHQxIG9uIHRoZQorb3V0ZXIgc2lkZSBhbmQgYSBqb2luIGJldHdlZW4g dDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLiBUaGF0IGpvaW4gc2hvdWxkCitiZSBjb25zdHJ1 Y3RlZCBzbyB0aGF0IHQyIGlzIG9uIHRoZSBvdXRlciBzaWRlIGFuZCB0MyBpcyBvbiB0aGUgaW5u ZXIgc2lkZS4KKworSW4gc29tZSBjYXNlcywgaXQncyBub3QgcG9zc2libGUgdG8gZnVsbHkgc3Bl Y2lmeSB0aGUgam9pbiBvcmRlciBpbiB0aGlzIHdheS4KK0ZvciBleGFtcGxlLCBpZiB0MiBhbmQg dDMgYXJlIGJlaW5nIHNjYW5uZWQgYnkgYSBzaW5nbGUgY3VzdG9tIHNjYW4gb3IgZm9yZWlnbgor c2Nhbiwgb3IgaWYgYSBwYXJ0aXRpb253aXNlIGpvaW4gaXMgYmVpbmcgcGVyZm9ybWVkIGJldHdl ZW4gdGhvc2UgdGFibGVzLCB0aGVuCitpdCdzIGltcG9zc2libGUgdG8gc2F5IHRoYXQgdDIgaXMg dGhlIG91dGVyIHRhYmxlIGFuZCB0MyBpcyB0aGUgaW5uZXIgdGFibGUsCitvciB0aGUgb3RoZXIg d2F5IGFyb3VuZDsgaXQncyBqdXN0IHVuZGVmaW5lZC4gSW4gc3VjaCBjYXNlcywgd2UgZ2VuZXJh dGUKK2pvaW4gYWR2aWNlIHRoYXQgdXNlcyBjdXJseSBicmFjZXMsIGludGVuZGluZyB0byBpbmRp Y2F0ZSBhIGxhY2sgb2Ygb3JkZXJpbmc6CitKT0lOX09SREVSKHQxIHt0MiB0M30pIHNheXMgdGhh dCB0aGUgdXBwZXJtb3N0IGpvaW4gc2hvdWxkIGhhdmUgdDEgb24gdGhlIG91dGVyCitzaWRlIGFu ZCBzb21lIGtpbmQgb2Ygam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBvbiB0aGUgaW5uZXIgc2lkZSwg YnV0IHdpdGhvdXQKK3NheWluZyBob3cgdGhhdCBqb2luIG11c3QgYmUgcGVyZm9ybWVkIG9yIGFu eXRoaW5nIGFib3V0IHdoaWNoIHJlbGF0aW9uIHNob3VsZAorYXBwZWFyIG9uIHdoaWNoIHNpZGUg b2YgdGhlIGpvaW4sIG9yIGV2ZW4gd2hldGhlciB0aGlzIGtpbmQgb2Ygam9pbiBoYXMgc2lkZXMu CisKK0pvaW4gU3RyYXRlZ3kgQWR2aWNlCis9PT09PT09PT09PT09PT09PT09PQorCitUYWdzIHN1 Y2ggYXMgTkVTVEVEX0xPT1BfUExBSU4gc3BlY2lmeSB0aGUgbWV0aG9kIHRoYXQgc2hvdWxkIGJl IHVzZWQgdG8KK3BlcmZvcm0gYSBjZXJ0YWluIGpvaW4uIE1vcmUgc3BlY2lmaWNhbGx5LCBORVNU RURfTE9PUF9QTEFJTih4ICh5IHopKSBzYXlzCit0aGF0IHRoZSBwbGFuIHNob3VsZCBwdXQgdGhl IHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgIngiIG9uIHRoZSBpbm5lcgorc2lkZSBvZiBh IHBsYWluIG5lc3RlZCBsb29wIChvbmUgd2l0aG91dCBtYXRlcmlhbGl6YXRpb24gb3IgbWVtb2l6 YXRpb24pCithbmQgdGhhdCBpdCBzaG91bGQgYWxzbyBwdXQgYSBqb2luIGJldHdlZW4gdGhlIHJl bGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMKKyJ5IiBhbmQgdGhlIHJlbGF0aW9uIHdob3NlIGlk ZW50aWZpZXIgaXMgInoiIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbmVzdGVkCitsb29wLiBIZW5j ZSwgZm9yIGFuIE4tdGFibGUgam9pbiBwcm9ibGVtLCB0aGVyZSB3aWxsIGJlIE4tMSBwaWVjZXMg b2Ygam9pbgorc3RyYXRlZ3kgYWR2aWNlOyBubyBqb2luIHN0cmF0ZWd5IGFkdmljZSBpcyByZXF1 aXJlZCBmb3IgdGhlIG91dGVybW9zdAordGFibGUgaW4gdGhlIGpvaW4gcHJvYmxlbS4KKworQ29u c2lkZXJpbmcgdGhhdCB3ZSBoYXZlIGJvdGggam9pbiBvcmRlciBhZHZpY2UgYW5kIGpvaW4gc3Ry YXRlZ3kgYWR2aWNlLAoraXQgbWlnaHQgc2VlbSBuYXR1cmFsIHRvIHNheSB0aGF0IE5FU1RFRF9M T09QX1BMQUlOKHgpIHNob3VsZCBiZSByZWRlZmluZWQKK3RvIG1lYW4gdGhhdCB4IHNob3VsZCBh cHBlYXIgYnkgaXRzZWxmIG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhlciBvZiBhIG5lc3RlZAorbG9v cCwgcmF0aGVyIHRoYW4gc3BlY2lmaWNhbGx5IG9uIHRoZSBpbm5lciBzaWRlLCBidXQgdGhpcyBk ZWZpbml0aW9uIGFwcGVhcnMKK3VzZWxlc3MgaW4gcHJhY3RpY2UuIEl0IGdpdmVzIHRoZSBwbGFu bmVyIHRvbyBtdWNoIGZyZWVkb20gdG8gZG8gdGhpbmdzIHRoYXQKK2JlYXIgbGl0dGxlIHJlc2Vt YmxhbmNlIHRvIHdoYXQgdGhlIHVzZXIgcHJvYmFibHkgaGFkIGluIG1pbmQuIFRoaXMgbWFrZXMK K29ubHkgYSBsaW1pdGVkIGFtb3VudCBvZiBwcmFjdGljYWwgZGlmZmVyZW5jZSBpbiB0aGUgY2Fz ZSBvZiBhIG1lcmdlIGpvaW4gb3IKK3VucGFyYW1ldGVyaXplZCBuZXN0ZWQgbG9vcCwgYnV0IGZv ciBhIHBhcmFtZXRlcml6ZWQgbmVzdGVkIGxvb3Agb3IgYSBoYXNoCitqb2luLCB0aGUgdHdvIHNp ZGVzIGFyZSB0cmVhdGVkIHZlcnkgZGlmZmVyZW50bHkgYW5kIHNheWluZyB0aGF0IGEgY2VydGFp bgorcmVsYXRpb24gc2hvdWxkIGJlIGludm9sdmVkIGluIG9uZSBvZiB0aG9zZSBvcGVyYXRpb25z IHdpdGhvdXQgc2F5aW5nIHdoaWNoCityb2xlIGl0IHNob3VsZCB0YWtlIGlzbid0IHNheWluZyBt dWNoLgorCitUaGlzIGNob2ljZSBvZiBkZWZpbml0aW9uIGltcGxpZXMgdGhhdCBqb2luIHN0cmF0 ZWd5IGFkdmljZSBhbHNvIGltcG9zZXMgc29tZQoram9pbiBvcmRlciBjb25zdHJhaW50cy4gRm9y IGV4YW1wbGUsIGdpdmVuIGEgam9pbiBiZXR3ZWVuIGZvbyBhbmQgYmFyLAorSEFTSF9KT0lOKGJh cikgaW1wbGllcyB0aGF0IGZvbyBpcyB0aGUgZHJpdmluZyB0YWJsZS4gT3RoZXJ3aXNlLCBpdCB3 b3VsZAorYmUgaW1wb3NzaWJsZSB0byBwdXQgYmFyIGJlbmVhdGggdGhlIGlubmVyIHNpZGUgb2Yg YSBIYXNoIEpvaW4uCisKK05vdGUgdGhhdCwgZ2l2ZW4gdGhpcyBkZWZpbml0aW9uLCBpdCdzIHJl YXNvbmFibGUgdG8gY29uc2lkZXIgZGVsZXRpbmcgdGhlCitqb2luIG9yZGVyIGFkdmljZSBidXQg YXBwbHlpbmcgdGhlIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiBGb3IgZXhhbXBsZSwKK2NvbnNpZGVy IGEgc3RhciBzY2hlbWEgd2l0aCB0YWJsZXMgZmFjdCwgZGltMSwgZGltMiwgZGltMywgZGltNCwg YW5kIGRpbTUuCitUaGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYWR2aWNlIG1pZ2h0IHNwZWNp ZnkgSk9JTl9PUkRFUihmYWN0IGRpbTEgZGltMworZGltNCBkaW0yIGRpbTUpIEhBU0hfSk9JTihk aW0yIGRpbTQpIE5FU1RFRF9MT09QX1BMQUlOKGRpbTEgZGltMyBkaW01KS4KK0RlbGV0aW5nIHRo ZSBKT0lOX09SREVSIGFkdmljZSBhbGxvd3MgdGhlIHBsYW5uZXIgdG8gcmVvcmRlciB0aGUgam9p bnMKK2hvd2V2ZXIgaXQgbGlrZXMgd2hpbGUgc3RpbGwgZm9yY2luZyB0aGUgc2FtZSBjaG9pY2Ug b2Ygam9pbiBtZXRob2QuIFRoaXMKK3NlZW1zIHBvdGVudGlhbGx5IHVzZWZ1bCwgYW5kIGlzIG9u ZSByZWFzb24gd2h5IGEgdW5pZmllZCBzeW50YXggdGhhdCBjb250cm9scworYm90aCBqb2luIG9y ZGVyIGFuZCBqb2luIG1ldGhvZCBpbiBhIHNpbmdsZSBsb2N1dGlvbiB3YXMgbm90IGNob3Nlbi4K KworQWR2aWNlIENvbXBsZXRlbmVzcworPT09PT09PT09PT09PT09PT09PQorCitBbiBlc3NlbnRp YWwgZ3VpZGluZyBwcmluY2lwbGUgaXMgdGhhdCBubyBpbmZlcmVuY2UgbWF5IG1hZGUgb24gdGhl IGJhc2lzCitvZiB0aGUgYWJzZW5jZSBvZiBhZHZpY2UuIFRoZSB1c2VyIGlzIGVudGl0bGVkIHRv IHJlbW92ZSBhbnkgcG9ydGlvbiBvZiB0aGUKK2dlbmVyYXRlZCBhZHZpY2Ugd2hpY2ggdGhleSBk ZWVtIHVuc3VpdGFibGUgb3IgY291bnRlcnByb2R1Y3RpdmUgYW5kIHRoZQorcmVzdWx0IHNob3Vs ZCBvbmx5IGJlIHRvIGluY3JlYXNlIHRoZSBmbGV4aWJpbGl0eSBhZmZvcmRlZCB0byB0aGUgcGxh bm5lci4KK1RoaXMgbWVhbnMgdGhhdCBpZiBhZHZpY2UgY2FuIHNheSB0aGF0IGEgY2VydGFpbiBv cHRpbWl6YXRpb24gb3IgdGVjaG5pcXVlCitzaG91bGQgYmUgdXNlZCwgaXQgc2hvdWxkIGFsc28g YmUgYWJsZSB0byBzYXkgdGhhdCB0aGUgb3B0aW1pemF0aW9uIG9yCit0ZWNobmlxdWUgc2hvdWxk IG5vdCBiZSB1c2VkLiBXZSBzaG91bGQgbmV2ZXIgYXNzdW1lIHRoYXQgdGhlIGFic2VuY2Ugb2Yg YW4KK2luc3RydWN0aW9uIHRvIGRvIGEgY2VydGFpbiB0aGluZyBtZWFucyB0aGF0IGl0IHNob3Vs ZCBub3QgYmUgZG9uZTsgYWxsCitpbnN0cnVjdGlvbnMgbXVzdCBiZSBleHBsaWNpdC4KKworU2Vt aWpvaW4gVW5pcXVlbmVzcworPT09PT09PT09PT09PT09PT09PQorCitGYWNlZCB3aXRoIGEgc2Vt aWpvaW4sIHRoZSBwbGFubmVyIGNvbnNpZGVycyBib3RoIGEgZGlyZWN0IGltcGxlbWVudGF0aW9u CithbmQgYSBwbGFuIHdoZXJlIHRoZSBvbmUgc2lkZSBpcyBtYWRlIHVuaXF1ZSBhbmQgdGhlbiBh biBpbm5lciBqb2luIGlzCitwZXJmb3JtZWQuIFdlIGVtaXQgU0VNSUpPSU5fVU5JUVVFKCkgYWR2 aWNlIHdoZW4gdGhpcyB0cmFuc2Zvcm1hdGlvbiBvY2N1cnMKK2FuZCBTRU1JSk9JTl9OT05fVU5J UVVFKCkgYWR2aWNlIHdoZW4gaXQgZG9lc24ndC4gVGhlc2UgaXRlbXMgd29yayBsaWtlCitqb2lu IHN0cmF0ZWd5IGFkdmljZTogdGhlIGlubmVyIHNpZGUgb2YgdGhlIHJlbGV2YW50IGpvaW4gaXMg bmFtZWQsIGFuZCB0aGUKK2Nob3NlbiBqb2luIG9yZGVyIG11c3QgYmUgY29tcGF0aWJsZSB3aXRo IHRoZSBhZHZpY2UgaGF2aW5nIHNvbWUgZWZmZWN0LgorCitYWFg6IFJpZ2h0IHNlbWlqb2lucyBo YXZlbid0IGJlZW4gcHJvcGVybHkgdGhvdWdodCB0aHJvdWdoLiBUaGUgYXNzb2NpYXRlZAorY29k ZSBwcm9iYWJseSBqdXN0IGRvZXNuJ3Qgd29yay4KKworWFhYOiBTZW1pam9pbiB1bmlxdWVuZXNz IGFkdmljZSBoYXMgbm8gYXV0b21hdGVkIHRlc3RzIGFuZCBuZWVkIHN1YnN0YW50aWFsbHkKK21v cmUgbWFudWFsIHRlc3RpbmcuCisKK1BhcnRpdGlvbndpc2UKKz09PT09PT09PT09PT0KKworUEFS VElUSU9OV0lTRSgpIGFkdmlzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGJvdGggdGhvc2UgcGFy dGl0aW9ud2lzZSBqb2lucword2hpY2ggc2hvdWxkIGJlIHBlcmZvcm1lZCBhbmQgdGhvc2Ugd2hp Y2ggc2hvdWxkIG5vdCBiZSBwZXJmb3JtZWQ7IHRoZSBpZGVhCitpcyB0aGF0IGVhY2ggYXJndW1l bnQgdG8gUEFSVElUSU9OV0lTRSBzcGVjaWZpZXMgYSBzZXQgb2YgcmVsYXRpb25zIHRoYXQKK3No b3VsZCBiZSBzY2FubmVkIHBhcnRpdGlvbndpc2UgYWZ0ZXIgYmVpbmcgam9pbmVkIHRvIGVhY2gg b3RoZXIgYW5kIG5vdGhpbmcKK2Vsc2UuIEhlbmNlLCBmb3IgZXhhbXBsZSwgUEFSVElUSU9OV0lT RSgodDEgdDIpIHQzKSBzcGVjaWZpZXMgdGhhdCB0aGUKK3F1ZXJ5IHNob3VsZCBjb250YWluIGEg cGFydGl0aW9ud2lzZSBqb2luIGJldHdlZW4gdDEgYW5kIHQyIGFuZCB0aGF0IHQzCitzaG91bGQg bm90IGJlIHBhcnQgb2YgYW55IHBhcnRpdGlvbndpc2Ugam9pbi4gSWYgdGhlcmUgYXJlIG5vIG90 aGVyIHJlbHMKK2luIHRoZSBxdWVyeSwgc3BlY2lmeWluZyBqdXN0IFBBUlRJVElPTldJU0UoKHQx IHQyKSkgd291bGQgaGF2ZSB0aGUgc2FtZQorZWZmZWN0LCBzaW5jZSB0aGVyZSB3b3VsZCBiZSBu byBvdGhlciByZWxzIHRvIHdoaWNoIHQzIGNvdWxkIGJlIGpvaW5lZCBpbgorYSBwYXJ0aXRpb253 aXNlIGZhc2hpb24uCisKK1BhcmFsbGVsIFF1ZXJ5IChHYXRoZXIsIGV0Yy4pCis9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorCitFYWNoIGFyZ3VtZW50IHRvIEdBVEhFUigpIG9yIEdBVEhF Ul9NRVJHRSgpIGlzIGEgc2luZ2xlIHJlbGF0aW9uIG9yIGFuCitleGFjdCBzZXQgb2YgcmVsYXRp b25zIG9uIHRvcCBvZiB3aGljaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwKK3Jlc3Bl Y3RpdmVseSwgc2hvdWxkIGJlIHBsYWNlZC4gRWFjaCBhcmd1bWVudCB0byBOT19HQVRIRVIoKSBp cyBhIHNpbmdsZQorcmVsYXRpb24gdGhhdCBzaG91bGQgbm90IGFwcGVhciBiZW5lYXRoIGFueSBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGU7Cit0aGF0IGlzLCBwYXJhbGxlbGlzbSBzaG91bGQg bm90IGJlIHVzZWQuCisKK0ltcGxpY2l0IEpvaW4gT3JkZXIgQ29uc3RyYWludHMKKz09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBKT0lOX09SREVSKCkgYWR2aWNlIGlzIG5v dCBwcm92aWRlZCBmb3IgYSBwYXJ0aWN1bGFyIGpvaW4gcHJvYmxlbSwKK290aGVyIHBpZWNlcyBv ZiBhZHZpY2UgbWF5IHN0aWxsIGluY2lkZW50YWxseSBjb25zdHJhaW50IHRoZSBqb2luIG9yZGVy LgorRm9yIGV4YW1wbGUsIGEgdXNlciB3aG8gc3BlY2lmaWVzIEhBU0hfSk9JTigoZm9vIGJhcikp IGlzIGV4cGxpY2l0bHkgc2F5aW5nCit0aGF0IHRoZXJlIHNob3VsZCBiZSBhIGhhc2ggam9pbiB3 aXRoIGV4YWN0bHkgZm9vIGFuZCBiYXIgb24gdGhlIG91dGVyCitzaWRlIG9mIGl0LCBidXQgdGhh dCBhbHNvIGltcGxpZXMgdGhhdCBmb28gYW5kIGJhciBtdXN0IGJlIGpvaW5lZCB0bworZWFjaCBv dGhlciBiZWZvcmUgZWl0aGVyIG9mIHRoZW0gaXMgam9pbmVkIHRvIGFueXRoaW5nIGVsc2UuIE90 aGVyd2lzZSwKK3RoZSBqb2luIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG8gY29uc3RyYWludCB3 b24ndCBhY3R1YWxseSBvY2N1ciBpbiB0aGUKK3F1ZXJ5LCB3aGljaCBlbmRzIHVwIGxvb2tpbmcg bGlrZSB0aGUgc3lzdGVtIGhhcyBqdXN0IGRlY2lkZWQgdG8gaWdub3JlCit0aGUgYWR2aWNlIGFs dG9nZXRoZXIuCisKK0Z1dHVyZSBXb3JrCis9PT09PT09PT09PQorCitXZSBkb24ndCBoYW5kbGUg Y2hvaWNlIG9mIGFnZ3JlZ2F0aW9uOiBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gZm9y Y2UKK3NvcnRlZCBvciBncm91cGVkIGFnZ3JlZ2F0aW9uLiBJJ20gZ3Vlc3NpbmcgdGhpcyBjYW4g YmUgbGVmdCB0byBmdXR1cmUgd29yay4KKworTW9yZSBzZXJpb3VzbHksIHdlIGRvbid0IGtub3cg YW55dGhpbmcgYWJvdXQgZWFnZXIgYWdncmVnYXRpb24sIHdoaWNoIGNvdWxkCitoYXZlIGEgbGFy Z2UgaW1wYWN0IG9uIHRoZSBzaGFwZSBvZiB0aGUgcGxhbiB0cmVlLiBYWFg6IFRoaXMgbmVlZHMg c29tZSBzdHVkeQordG8gZGV0ZXJtaW5lIGhvdyBsYXJnZSBhIHByb2JsZW0gaXQgaXMsIGFuZCBt aWdodCBuZWVkIHRvIGJlIGZpeGVkIHNvb25lcgorcmF0aGVyIHRoYW4gbGF0ZXIuCisKK1dlIGRv bid0IG9mZmVyIGFueSBjb250cm9sIG92ZXIgZXN0aW1hdGVzLCBvbmx5IG91dGNvbWVzLiBJdCBz ZWVtcyBsaWtlIGEKK2dvb2QgaWRlYSB0byBpbmNvcnBvcmF0ZSB0aGF0IGFiaWxpdHkgYXQgc29t ZSBmdXR1cmUgcG9pbnQsIGFzIHBnX2hpbnRfcGxhbgorZG9lcy4gSG93ZXZlciwgc2luY2UgcHJp bWFyeSBnb2FsIG9mIHRoZSBpbml0aWFsIGRldmVsb3BtZW50IHdvcmsgaXMgdG8gYmUKK2FibGUg dG8gaW5kdWNlIHRoZSBwbGFubmVyIHRvIHJlY3JlYXRlIGEgZGVzaXJlZCBwbGFuIHRoYXQgd29y a2VkIHdlbGwgaW4KK3RoZSBwYXN0LCB0aGlzIGhhcyBub3QgYmVlbiBpbmNsdWRlZCBpbiB0aGUg aW5pdGlhbCBkZXZlbG9wbWVudCBlZmZvcnQuCisKK1hYWCBOZWVkIHRvIGludmVzdGlnYXRlIHdo ZXRoZXIgYW5kIGhvdyB3ZWxsIHN1cHBseWluZyBhZHZpY2Ugd29ya3Mgd2l0aCBHRVFPCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJkNGY0YzI0ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0CkBAIC0wLDAgKzEsMzQ0IEBA CitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVw bGVfY29zdCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQg ZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CitDUkVBVEUgVEFCTEUgZ3RfZGltIChpZCBzZXJp YWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZh bHNlKTsKK0lOU0VSVCBJTlRPIGd0X2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9kaW07CitDUkVB VEUgVEFCTEUgZ3RfZmFjdCAoCisJaWQgaW50IG5vdCBudWxsLAorCWRpbV9pZCBpbnRlZ2VyIG5v dCBudWxsIHJlZmVyZW5jZXMgZ3RfZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZmFjdDsKKy0t IEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2gg am9pbi4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsK KyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBk KQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYg ZCkpCisoMTQgcm93cykKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvZiBib3Ro IHJlbGF0aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5l ZDogMQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAg LT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1f aWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2Zh Y3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgR0FUSEVSX01FUkdFKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9T Q0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNiByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIFNvcnQgS2V5OiBm LmRpbV9pZAorICAgLT4gIEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAg ICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChm LmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24g Z3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1ND QU4oZiBkKQorICAgR0FUSEVSKChmIGQpKQorKDE2IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNl IGEgc2VwYXJhdGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVs YXRpb24uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVy X21lcmdlKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBC WSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBHYXRo ZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgICAgICAgLT4gIFBh cmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAg ICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg U29ydCBLZXk6IGQuaWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBn dF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGYpIC8qIG1h dGNoZWQgKi8KKyAgIEdBVEhFUl9NRVJHRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisg ICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoZiBkKQorKDIwIHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDog KGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1f aWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDog MQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAg LT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVyCisg ICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FU SEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIEdBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlO KGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoZiBkKQorKDIwIHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChkIGQvZC5kKSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lO IGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2Ug Q29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdv cmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQg S2V5OiBmLmRpbV9pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0 X2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUigoZCBkL2QuZCkpIC8qIHBhcnRpYWxs eSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQp CisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihk IHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIEdBVEhFUl9NRVJHRShmKQorICAgTk9fR0FUSEVSKGQp CisoMTcgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdl IG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxsZWxpc20gb24gb3RoZXIuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYpIG5vX2dhdGhl cihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g Z3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7 CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBK b2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJn ZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwg U2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtl eSBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGYp IC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQp CisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAg IEdBVEhFUl9NRVJHRShmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkgbm9fZ2F0aGVyKGYpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0 IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBN ZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQg S2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4g IEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgICAgICAgIC0+ICBQ YXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg R0FUSEVSX01FUkdFKGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJH RV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoZCkKKyAg IE5PX0dBVEhFUihmKQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnZ2F0aGVyKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGlt X2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyAg IC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBHYXRo ZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9K T0lOX1BMQUlOKGYpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9k aW1fcGtleSkKKyAgIEdBVEhFUihmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9fZ2F0aGVyKGYpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0 IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBN ZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQg S2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4g IFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAg ICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxl bCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVS KGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlO KGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoZCkKKyAgIE5PX0dBVEhFUihmKQorKDE5 IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgdXNl IGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdub19n YXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZ IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdl IEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5P X0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFfU0NBTihmKQorICAg SU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUg cm93cykKKworQ09NTUlUOworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdpdGhvdXQgdGhl IE9SREVSIEJZIGNsYXVzZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lO IGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIKKyAgIERpc2FibGVkOiB0cnVlCisgICBXb3JrZXJz IFBsYW5uZWQ6IDEKKyAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29u ZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBn dF9mYWN0IGYKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEdBVEhFUl9NRVJHRSgoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9T Q0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBHYXRoZXIKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBhcmFsbGVsIEhhc2gg Sm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgLT4g IFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4gIFBhcmFsbGVsIEhh c2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkK KyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNCByb3dzKQorCitDT01NSVQ7 CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIu b3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjNkZDc4MTA0ODQKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0 CkBAIC0wLDAgKzEsMjk1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFs bGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgam9fZGltMSAoaWQgaW50 ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0xIChpZCwgZGltMSwgdmFsMSkK KwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0xOworQ1JF QVRFIFRBQkxFIGpvX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFs MiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8g am9fZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcg fHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIGpvX2RpbTI7CitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQgaW50IHBy aW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTEg KGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0yIChpZCkK KykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZmFj dAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CistLSBXZSBleHBlY3QgdG8gam9p biB0byBkMiBmaXJzdCBhbmQgdGhlbiBkMSwgc2luY2UgdGhlIGNvbmRpdGlvbiBvbiBkMgorLS0g aXMgbW9yZSBzZWxlY3RpdmUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQg PSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hF UkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4oZDIgZDEp CisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTYgcm93cykK KworLS0gRm9yY2UgYSBmZXcgZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21lIG9mIHRoZXNlIGFy ZSB2ZXJ5IGluZWZmaWNpZW50LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNpZGVycyB0aGVtIGFs bCB2aWFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9p bl9vcmRlcihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQg PSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hF UkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikKKyAgIEhBU0hfSk9JTihk MSBkMikKKyAgIFNFUV9TQ0FOKGYgZDEgZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBk MiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g am9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2lu CisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwy ID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQor ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4oZDIgZDEpCisgICBT RVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxIGYgZDIpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgor CUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9 IDE7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29u ZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBD b25kOiAoZDEuaWQgPSBmLmRpbTFfaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIEhhc2gK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDEg ZiBkMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZDEgZiBkMikKKyAgIEhBU0hfSk9JTihmIGQyKQorICAgU0VRX1NDQU4oZDEgZiBkMikKKyAg IE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0x IGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0y X2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKChmLmRpbTJfaWQgPSBkMi5pZCkgQU5EIChmLmRp bTFfaWQgPSBkMS5pZCkpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltMl9p ZCwgZi5kaW0xX2lkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAg U29ydAorICAgICAgICAgU29ydCBLZXk6IGQyLmlkLCBkMS5pZAorICAgICAgICAgLT4gIE5lc3Rl ZCBMb29wCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgTWF0 ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQy CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIChkMSBkMikpCisgICBNRVJH RV9KT0lOX1BMQUlOKChkMSBkMikpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMikKKyAg IFNFUV9TQ0FOKGYgZDEgZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygyMSByb3dzKQorCitD T01NSVQ7CistLSBUaGUgdW51c3VhbCBmb3JtdWxhdGlvbiBvZiB0aGlzIHF1ZXJ5IGlzIGludGVu ZGVkIHRvIHByZXZlbnQgdGhlIHF1ZXJ5CistLSBwbGFubmVyIGZyb20gcmVkdWNpbmcgdGhlIEZV TEwgSk9JTiB0byBzb21lIG90aGVyIGpvaW4gdHlwZSwgc28gdGhhdCB3ZQorLS0gY2FuIHRlc3Qg d2hhdCBoYXBwZW5zIHdpdGggYSBqb2luIHR5cGUgdGhhdCBjYW5ub3QgYmUgcmVvcmRlcmVkLgor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBk MQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJf aWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJ UyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5p ZCA9IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxs IEpvaW4KKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQg KyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIu aWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAg ICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihm KQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQor ICAgTk9fR0FUSEVSKGQxIGYgZDIpCisoMTggcm93cykKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBh YmxlIHRvIGZvcmNlIHRoZSBwbGFubmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQor LS0gdGhhdCBpcyBub3QgYSB2YWxpZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUg dG8gZm9yY2UgdGhlIHBsYW5uZXIKKy0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZp bmcgdGFibGUuCitCRUdJTjsKKy0tIFhYWDogVGhlIGFkdmljZSBmZWVkYmFjayBzYXlzICdwYXJ0 aWFsbHkgbWF0Y2hlZCcgaGVyZSB3aGljaCBpc24ndCBleGFjdGx5CistLSB3cm9uZyBnaXZlbiB0 aGUgd2F5IHRoYXQgZmxhZyBpcyBoYW5kbGVkIGluIHRoZSBjb2RlLCBidXQgaXQncyBhdCB0aGUg dmVyeQorLS0gbGVhc3QgY29uZnVzaW5nLiBTb21ldGhpbmcgc2hvdWxkIHByb2JhYmx5IGJlIGlt cHJvdmVkIGhlcmUuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3Jk ZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGlt MiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lk IE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNh YmxlZDogdHJ1ZQorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRp bTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBEaXNhYmxl ZDogdHJ1ZQorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYuZGltMl9p ZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChk Mi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAg ICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAw KSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBTZXEg U2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZDEgZDIpIC8qIHBhcnRpYWxseSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgTkVT VEVEX0xPT1BfUExBSU4oZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9fR0FUSEVSKGQx IGYgZDIpCisoMjEgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdq b2luX29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lO IGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYu ZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAor ICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVM TCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChmLmRp bTJfaWQgKyAwKSkgPSAoKGQyLmlkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAg ICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNv cnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMiBkMgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQy IGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihkMikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpF KGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIwIHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMiBm IGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBq b19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9O IGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5k aW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVy OiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1l cmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYu ZGltMl9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtl eTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIg ZDIKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJf aWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdF X0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1ND QU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIwIHJvd3MpCisKK0NPTU1JVDsK Ky0tIFhYWDogYWRkIHRlc3RzIGZvciBqb2luIG9yZGVyIHByZWZpeCBtYXRjaGluZworLS0gWFhY OiBqb2luX29yZGVyKGp1c3RvbmVyZWwpIHNob3VsZG4ndCByZXBvcnQgcGFydGlhbGx5IG1hdGNo ZWQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJh dGVneS5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3ku b3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MWVlMjZhMzM3YQot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9z dHJhdGVneS5vdXQKQEAgLTAsMCArMSwyOTcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NF VCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBqb2lu X2RpbSAoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFu ZG9tKCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFla RSBqb2luX2RpbTsKK0NSRUFURSBUQUJMRSBqb2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtl eSwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvaW5fZGltIChpZCkKKykg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9mYWN0 CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitD UkVBVEUgSU5ERVggam9pbl9mYWN0X2RpbV9pZCBPTiBqb2luX2ZhY3QgKGRpbV9pZCk7CitWQUNV VU0gQU5BTFlaRSBqb2luX2ZhY3Q7CistLSBXZSBleHBlY3QgYSBoYXNoIGpvaW4gYnkgZGVmYXVs dC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2lu X2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBqb2luX2RpbSBkCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTAgcm93cykKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJu IHdpdGggam9pbl9kaW0gYXMgdGhlIGlubmVyIHRhYmxlLgorLS0gQWxsIG9mIHRoZXNlIHNob3Vs ZCB3b3JrIGV4Y2VwdCBmb3IgTUVSR0VfSk9JTl9NQVRFUklBTElaRTsgdGhhdCB3aWxsCistLSBm YWlsLCBiZWNhdXNlIHRoZSBwbGFubmVyIGtub3dzIHRoYXQgam9pbl9kaW0gKGlkKSBpcyB1bmlx dWUsIGFuZCB3aWxsCistLSByZWZ1c2UgdG8gYWRkIG1hcmsvcmVzdG9yZSBvdmVyaGVhZC4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNl cSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTihkKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQp CisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCiso MTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lO X01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIERpc2FibGVkOiB0cnVlCisgICBN ZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9p bl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9p bl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJH RV9KT0lOX01BVEVSSUFMSVpFKGQpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQor ICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkIGQgcHVibGljLmpvaW5fZGlt X3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisg ICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg am9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg am9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBN RVJHRV9KT0lOX1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIElOREVYX1ND QU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCBkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAg Tk9fR0FUSEVSKGYgZCkKKygxMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQg T04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNl cSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURf TE9PUF9NQVRFUklBTElaRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkKQorICAg U0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZCknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpP SU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAg IC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENh Y2hlIEtleTogZi5kaW1faWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBORVNURURfTE9PUF9NRU1PSVpFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUo ZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkp CisgICBOT19HQVRIRVIoZiBkKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3Qg ZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisg ICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAg Tk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitDT01NSVQ7CistLSBOb3cgdHJ5IGZvcmNpbmcg ZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9mYWN0IGFzIHRoZSBpbm5lcgorLS0g dGFibGUuIEFsbCBvZiB0aGVzZSBzaG91bGQgd29yay4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0g ZAorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIEhBU0hfSk9JTihmKQor ICAgU0VRX1NDQU4oZCBmKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgLT4gIE1hdGVy aWFsaXplCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9u IGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX01BVEVS SUFMSVpFKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZikKKyAgIElOREVYX1NDQU4o ZCBwdWJsaWMuam9pbl9kaW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9f R0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ01FUkdFX0pPSU5fUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDog KGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkg b24gam9pbl9kaW0gZAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBv biBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9QTEFJ TihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpv aW5fZGltX3BrZXkgZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQp CisoMTEgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURf TE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisg ICBKb2luIEZpbHRlcjogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2lu X2RpbSBkCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2lu X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZCBmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZikKKyAgIFNFUV9TQ0FOKGQgZikK KyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQg T04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBT ZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgTWVtb2l6ZQorICAgICAgICAgQ2FjaGUgS2V5 OiBkLmlkCisgICAgICAgICBDYWNoZSBNb2RlOiBsb2dpY2FsCisgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoZGltX2lkID0gZC5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IE5FU1RFRF9MT09QX01FTU9JWkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTkVTVEVEX0xPT1BfTUVNT0laRShmKQorICAg U0VRX1NDQU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAg IE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9k aW0gZAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2Zh Y3QgZgorICAgICAgICAgSW5kZXggQ29uZDogKGRpbV9pZCA9IGQuaWQpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9QTEFJ TihmKQorICAgU0VRX1NDQU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2Rp bV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gV2UgY2Fu J3QgZm9yY2UgYSBmb3JlaWduIGpvaW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsIGJlY2F1c2UgdGhl eQorLS0gYXJlbid0IGZvcmVpZ24gdGFibGVzLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAg U2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGlt X3BrZXkgb24gam9pbl9kaW0gZAorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBGT1JFSUdOX0pPSU4oKGYgZCkpIC8qIG1hdGNo ZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBk KQorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FO KGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEzIHJvd3MpCisK K0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvbG9j YWxfY29sbGVjdG9yLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxf Y29sbGVjdG9yLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTZm NTU0YmYyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKQEAgLTAsMCArMSw2NSBAQAorQ1JFQVRFIEVYVEVOU0lP TiBwZ19wbGFuX2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsKKy0tIFRy eSBjbGVhcmluZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBhbnkuCitTRUxFQ1QgcGdf Y2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2Nh bF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworLS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBl eGNlZWQgaXQuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7 CistLSBTZXQgdXAgYSBkdW1teSB0YWJsZS4KK0NSRUFURSBUQUJMRSBkdW1teV90YWJsZSAoYSBp bnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSwgcGFyYWxsZWxfd29ya2VycyA9IDApOworLS0gVGVzdCBxdWVyaWVzLgorU0VMRUNUICogRlJP TSBkdW1teV90YWJsZSBhLCBkdW1teV90YWJsZSBiOworIGEgfCBiIHwgYSB8IGIgCistLS0rLS0t Ky0tLSstLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGU7CisgYSB8IGIg CistLS0rLS0tCisoMCByb3dzKQorCistLSBTaG91bGQgcmV0dXJuIHRoZSBhZHZpY2UgZnJvbSB0 aGUgc2Vjb25kIHRlc3QgcXVlcnkuCitTRUxFQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDE7CisgICAgICAgICBhZHZp Y2UgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNFUV9TQ0FOKGR1bW15X3Rh YmxlKSArCisgTk9fR0FUSEVSKGR1bW15X3RhYmxlKQorKDEgcm93KQorCistLSBOb3cgdHJ5IGNs ZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBSYWlzZSB0aGUgY29sbGVjdGlv biBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3IgdXNlcyBtdWx0aXBsZSBjaHVua3MuCitTRVQg cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDIwMDA7CistLSBQdXNoIGEg YnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlG T1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJs ZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdv cmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNl KCk7CisgY291bnQgCistLS0tLS0tCisgIDIwMDAKKygxIHJvdykKKworLS0gQW5kIGNsZWFyIG9u ZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0K Ky0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fk dmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uu b3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWE3MDRlMzFlYWMKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndp c2Uub3V0CkBAIC0wLDAgKzEsMzY0IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndp c2Vfam9pbiA9IHRydWU7CitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5 LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRF IFRBQkxFIHB0MWEgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAx KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFi IFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJ T04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkK KwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQxOworQ1JFQVRF IFRBQkxFIHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkK KwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBP RiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBW QUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZS T00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVy IHRleHQgJyB8fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAw LDIpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDI7CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2Vy IHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00g KDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFU RSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAo MjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwg ZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAl IDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5B TFlaRSBwdDM7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtl eSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFU RSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxV RVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAg Rk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlT RUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKK0VY UExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBw dDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwx ID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3Rl ZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6 IChwdDJfMS5pZCA9IHB0M18xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0 MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkK KyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisg ICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAg LT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBI YXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAx KQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFj IHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDEvcHVibGljLnB0 MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1 YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNj IHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBw dDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSEFTSF9KT0lOKHB0My9wdWJsaWMu cHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQyL3B1 YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNi CisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQx L3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFi X3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElP TldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1 YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGlj LnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQz L3B1YmxpYy5wdDNjKQorKDQ3IHJvd3MpCisKKy0tIFN1cHByZXNzIHBhcnRpdGlvbndpc2Ugam9p biwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQTEFJTiAoUExB Tl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBw dDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2 YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgIEhhc2ggQ29uZDogKHB0Mi5pZCA9IHB0My5pZCkKKyAgICAgICAgIC0+ICBBcHBl bmQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQz YSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMyA9IDEpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAg ICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24g cHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBQQVJUSVRJT05XSVNFKHB0MSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDIp IC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDIgcHQzIHB0MSkKKyAgIE5FU1RF RF9MT09QX1BMQUlOKHB0MSkKKyAgIEhBU0hfSk9JTihwdDMpCisgICBTRVFfU0NBTihwdDIvcHVi bGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EK KyAgICBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEv cHVibGljLnB0MWEgcHVibGljLnB0MWFfcGtleSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJf cGtleQorICAgIHB0MS9wdWJsaWMucHQxYyBwdWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9O V0lTRShwdDIgcHQzIHB0MSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1Ymxp Yy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0 MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1 YmxpYy5wdDNjKQorKDQzIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwg Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0 Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFO RCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKHB0MS5pZCA9IHB0My5p ZCkKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IEhhc2ggQ29uZDogKHB0MV8xLmlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9 IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAocHQxXzIuaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9 IDEpCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChw dDFfMy5pZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMg cHQxXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJj IHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQzYSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0 Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYSBwdDIvcHVibGljLnB0 MmEpCisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYiBwdDIvcHVibGljLnB0MmIpCisgICBK T0lOX09SREVSKHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmMpCisgICBKT0lOX09SREVS KHtwdDEgcHQyfSBwdDMpCisgICBIQVNIX0pPSU4ocHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMu cHQyYiBwdDIvcHVibGljLnB0MmMgcHQzKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0 Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWIgcHQyL3B1YmxpYy5wdDJiCisgICAgcHQxL3B1 YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNi CisgICAgcHQzL3B1YmxpYy5wdDNjKQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKQor ICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5w dDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMg cHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDcgcm93 cykKKworQ09NTUlUOworLS0gQ2FuJ3QgZm9yY2UgYSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aCBh IG1pc21hdGNoZWQgdGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSc7CitFWFBMQUlOIChQTEFOX0FE VklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0bWlzbWF0Y2ggV0hFUkUgcHQx LmlkID0gcHRtaXNtYXRjaC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgQXBwZW5kCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYSBwdDFfMQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB0MWIgcHQxXzIKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFjIHB0MV8zCisgICAtPiAg QXBwZW5kCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYV9wa2V5IG9u IHB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2hfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlk ID0gcHQxLmlkKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHRtaXNtYXRjaGJfcGtl eSBvbiBwdG1pc21hdGNoYiBwdG1pc21hdGNoXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IHB0MS5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFBBUlRJVElPTldJU0Uo KHB0MSBwdG1pc21hdGNoKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDEgcHRtaXNtYXRjaCkKKyAgIE5FU1RFRF9MT09QX1BM QUlOKHB0bWlzbWF0Y2gpCisgICBTRVFfU0NBTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5w dDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIElOREVYX1NDQU4ocHRtaXNtYXRjaC9wdWJsaWMucHRt aXNtYXRjaGEgcHVibGljLnB0bWlzbWF0Y2hhX3BrZXkKKyAgICBwdG1pc21hdGNoL3B1YmxpYy5w dG1pc21hdGNoYiBwdWJsaWMucHRtaXNtYXRjaGJfcGtleSkKKyAgIFBBUlRJVElPTldJU0UocHQx IHB0bWlzbWF0Y2gpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQx YiBwdDEvcHVibGljLnB0MWMKKyAgICBwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdG1p c21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYikKKygyMiByb3dzKQorCitDT01NSVQ7CistLSBGb3Jj ZSBqb2luIG9yZGVyIGZvciBhIHBhcnRpY3VsYXIgYnJhbmNoIG9mIHRoZSBwYXJ0aXRpb253aXNl IGpvaW4gd2l0aAorLS0gYW5kIHdpdGhvdXQgbWVudGlvbmluZyB0aGUgc2NoZW1hIG5hbWUuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihwdDMv cHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQxYSknOworRVhQTEFJTiAo UExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVS RSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFO RCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgTmVzdGVkIExvb3AK KyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0M18x LmlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNf MQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQy XzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8yLmlkID0gcHQzXzIuaWQpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg cHQxYl9wa2V5IG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9 IHB0Ml8yLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVz dGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHB0Ml8zLmlkID0gcHQzXzMuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHQyYyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAx KQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMK KyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDMvcHVi bGljLnB0M2EgcHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQxYSkKKyAgIEpPSU5fT1JERVIo cHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYiBwdDEvcHVibGljLnB0MWIpCisgICBKT0lO X09SREVSKHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MgcHQxL3B1YmxpYy5wdDFjKQor ICAgTkVTVEVEX0xPT1BfUExBSU4ocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEv cHVibGljLnB0MWMpCisgICBIQVNIX0pPSU4ocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQz YiBwdDMvcHVibGljLnB0M2MpCisgICBTRVFfU0NBTihwdDMvcHVibGljLnB0M2EgcHQyL3B1Ymxp Yy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IKKyAgICBwdDIvcHVibGljLnB0 MmMgcHQzL3B1YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVibGlj LnB0MWFfcGtleSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9wdWJs aWMucHQxYyBwdWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MiBwdDMp KQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1Ymxp Yy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0 MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDkg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0 My9wdDNhIHB0Mi9wdDJhIHB0MS9wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBB TkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwz ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQzXzEuaWQgPSBwdDJfMS5pZCkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFz aCBDb25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBw dDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNf My5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0g MSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B0M2EgcHQyL3B0 MmEgcHQxL3B0MWEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFh KQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJs aWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBw dDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQx L3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDIvcHVibGljLnB0 MmEgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0My9wdWJs aWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgor ICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9w dWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9w a2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05X SVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJs aWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5w dDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9w dWJsaWMucHQzYykKKyg0OSByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9l eHBlY3RlZC9zY2FuLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YTgwZGU3OGQ4MjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL3NjYW4ub3V0CkBAIC0wLDAgKzEsNzU3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7 CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2Vf Y29zdCA9IDAuMTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9j b3N0ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CitDUkVBVEUgVEFCTEUgc2Nh bl90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzY2FuX3RhYmxlCisJU0VMRUNUIGcsICdzb21l IHRleHQgJyB8fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwMCkgZzsKK0NSRUFURSBJ TkRFWCBzY2FuX3RhYmxlX2IgT04gc2Nhbl90YWJsZSBVU0lORyBicmluIChiKTsKK1ZBQ1VVTSBB TkFMWVpFIHNjYW5fdGFibGU7CistLSBTZXF1ZW50aWFsIHNjYW4KK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICBRVUVSWSBQ TEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2Fu X3RhYmxlCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDQgcm93cykKKworLS0gSW5kZXggc2NhbgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4 IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDUgcm93cykKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9u bHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29u ZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihz Y2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg1IHJvd3MpCisKKy0tIEJpdG1hcCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0 ZXh0IDgnOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEJpdG1hcCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYiA+ ICdzb21lIHRleHQgOCc6OnRleHQpCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90 YWJsZV9iCisgICAgICAgICBJbmRleCBDb25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX2IpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK Ky0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBU aWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQp CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVElEIHJhbmdlIHNjYW4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdI RVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg VGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6ICgoY3RpZCA+ICcoMSwx KSc6OnRpZCkgQU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso NSByb3dzKQorCistLSBUcnkgZm9yY2luZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNl IHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2FudGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxk IHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2Nhbl90YWJsZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90 YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg2IHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nh bl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09O TFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsK KyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25k OiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24g c2Nhbl90YWJsZV9iCisgICAgICAgICBJbmRleCBDb25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRl eHQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFi bGUgc2Nhbl90YWJsZV9iKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX2IpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSkn OworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlkIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElE IENvbmQ6IChjdGlkID0gJygwLDEpJzo6dGlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg VElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgVGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6 ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkgQU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBUcnkgdG8gZm9yY2Ug YSBmdWxsIHNjYW4gb2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxs CistLSBvZiB0aGVzZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2Nh biBjb3VsZCBwb3RlbnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQg dGhlIHBsYW5uZXIgZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGll cyBkdWUgdG8gdGhlIGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAg IERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxl ZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJ VE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxl ZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdU SURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZh aWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSBh Z2FpbiB0byBmb3JjZSBpbmRleCB1c2UuIFRoaXMgc2hvdWxkIG5vdyBzdWNjZWVkIGZvciB0aGUg SU5ERVhfU0NBTgorLS0gYW5kIEJJVE1BUF9IRUFQX1NDQU4sIGJ1dCB0aGUgSU5ERVhfT05MWV9T Q0FOIGNhbid0IGJlIGZvcmNlZCBiZWNhdXNlIHRoZQorLS0gcXVlcnkgZmV0Y2hlcyBjb2x1bW5z IG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5kZXguCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nh bl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMu c2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3Rh YmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAg RmlsdGVyOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRI RVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxl CisgICBSZWNoZWNrIENvbmQ6IChhID4gMCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBz Y2FuX3RhYmxlX3BrZXkKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID4gMCkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVB UF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDkgcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIGEgcHJpbWFy eSBrZXkgbG9va3VwIHRvIHVzZSBhIHNlcXVlbnRpYWwgc2NhbiwgYnV0IHdlCistLSBjYW4ndCBm b3JjZSBpdCB0byB1c2UgYW4gaW5kZXgtb25seSBzY2FuIChkdWUgdG8gdGhlIGNvbHVtbiBsaXN0 KQorLS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNlIG9mIGEgVElEIHF1YWwpLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5f dGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf T05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBJbmRleCBDb25kOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2Fu IHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQor ICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgVElEX1ND QU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBm b3JjaWJseSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRvIGFuIGluZGV4IHNjYW4sIGJ1 dCB3ZSBjYW4ndAorLS0gZm9yY2UgdGhlIHVzZSBvZiBhbiBpbmRleCB0aGF0IHRoZSBwbGFubmVy IHRoaW5rcyBpcyBpbmFwcGxpY2FibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENv bmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90 YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAg IERpc2FibGVkOiB0cnVlCisgICBGaWx0ZXI6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpIC8qIG1hdGNoZWQsIGZh aWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNh biBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0bWFw IGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4IGlz IG5vdCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjog KGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBT Y2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBGaWx0ZXI6IChhID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX2IpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3Mp CisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2Fu IHJhdGhlciB0aGFuIGEgVElEIHNjYW4gb3IKKy0tIFRJRCByYW5nZSBzY2FuLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5E IGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAg IEZpbHRlcjogKChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQp KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3Qg bW9yZSBjb21wbGV4IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNjYW5zLgorQkVHSU47CistLSBTaG91 bGQgc3RpbGwgd29yayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNp bmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMu c2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEJ1dCBub3QgaWYgd2UgbWVudGlvbiB0 aGUgd3Jvbmcgc2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9TQ0FOKHNjYW5fdGFibGUgY2lsYnVwLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2Nh biB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEg PSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNp bGJ1cC5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCistLSBJdCdz IE9LIHRvIHJlcGVhdCB0aGUgc2FtZSBhZHZpY2UuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcg c2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkpIC8qIG1hdGNoZWQgKi8KKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9T Q0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDggcm93cykKKworLS0gQnV0IGl0IGRvZXNuJ3Qgd29yayBpZiB0aGUgaW5kZXgg dGFyZ2V0IGlzIGV2ZW4gbm90aW9uYWxseSBkaWZmZXJlbnQuCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nh bl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2Fu X3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7 CistLSBUZXN0IGFzc29ydGVkIGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAg IEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KG5vdGhpbmcpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAg IEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4obm90aGluZyB3aGF0c29ldmVyKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4g dXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0g MSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBib2d1 cykgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVf cGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSAvKiBub3Qg bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihz Y2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf T05MWV9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJs ZSAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3Rh YmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gbXVsdGlw bGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGFsaWFzLgorQkVHSU47CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcg TEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5f dGFibGUgcyBPTiBnID0gcy5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w IExlZnQgSm9pbgorICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgLT4gIEZ1 bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChhID0gZy5nKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUgc18xCisgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURf TE9PUF9QTEFJTihzIHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 IHMjMiBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHMgcyMyKQorKDEyIHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRl X3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAg IExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBM ZWZ0IEpvaW4KKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZy5n ID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcK KyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90 YWJsZSBzCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMjMikK KyAgIEhBU0hfSk9JTihzKQorICAgU0VRX1NDQU4ocykKKyAgIElOREVYX1NDQU4ocyMyIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTcgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMo MSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpP SU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9p bgorICAgSGFzaCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBK b2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUg cworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSGFzaAorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzKQorICAg SEFTSF9KT0lOKHMjMikKKyAgIFNFUV9TQ0FOKHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMu c2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHMgcyMyKQorKDE3IHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocykgU0VRX1NDQU4ocyMyKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJh dGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4Cisg ICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAgSGFzaCBDb25kOiAo Zy5nID0gc18xLmEpCisgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDog KGcuZyA9IHMuYSkKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3Nlcmll cyBnCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNj YW5fdGFibGUgcworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzY2FuX3Rh YmxlIHNfMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyogbWF0Y2hl ZCAqLworICAgU0VRX1NDQU4ocyMyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihnIHMgcyMyKQorICAgSEFTSF9KT0lOKHMgcyMyKQorICAgU0VR X1NDQU4ocyBzIzIpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTcgcm93cykKKworQ09NTUlUOwor LS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBzY2FucyB3aXRoaW4gYSBzdWJxdWVyeS4K K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nh bl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoc0B4KQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBz IFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHVubmFtZWRfc3VicXVlcnkpCisoNSByb3dz KQorCitCRUdJTjsKKy0tIFNob3VsZCBub3QgbWF0Y2guCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0g MSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcwor ICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1ND QU4ocykgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNAeCkKKyg3 IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CisgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykg Lyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNAdW5uYW1lZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVS KHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBx dWVyeSBvbmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz QHgpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B4KSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B4KQorICAgTk9fR0FUSEVSKHNAeCkKKyg3 IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CisgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B4 KSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4oc0B1bm5hbWVkX3N1YnF1ZXJ5IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRI RVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworLS0gU2hvdWxkIG1hdGNoIHNlY29u ZCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TihzQHVubmFtZWRfc3VicXVlcnkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBP RkZTRVQgMCkgeDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4o c0B1bm5hbWVkX3N1YnF1ZXJ5KSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9G RlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBzY2FuX3RhYmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KQorICAg Tk9fR0FUSEVSKHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dCBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uY2M3NjBkNTU3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKQEAgLTAsMCArMSwxNzQgQEAK K0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKKy0tIEFuIGVtcHR5IHN0cmluZyBpcyBhbGxvd2VkLiBF bXB0eSB0YXJnZXQgbGlzdHMgYXJlIGFsbG93ZWQgZm9yIG1vc3QgYWR2aWNlCistLSB0YWdzLCBi dXQgbm90IGZvciBKT0lOX09SREVSLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcnOwor RVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0 ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0aD00KQorKDEgcm93KQorCitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCknOworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9 MSB3aWR0aD00KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorKDIgcm93cykKKworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTigpJzsKK0VYUExBSU4gU0VMRUNU IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdCAgKGNvc3Q9MC4wMC4u MC4wMSByb3dzPTEgd2lkdGg9NCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKygyIHJvd3MpCisK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigpJzsKK0VSUk9SOiAgaW52 YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiSk9JTl9P UkRFUigpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogSk9JTl9PUkRFUiBtdXN0 IGhhdmUgYXQgbGVhc3Qgb25lIHRhcmdldCBhdCBvciBuZWFyICIpIgorLS0gVGVzdCBhc3NvcnRl ZCB2YXJpYXRpb25zIGluIGNhcGl0YWxpemF0aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFy dHMgb2YKKy0tIHRoZSByZWxhdGlvbiBpZGVudGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hv dWxkIGFsbCB3b3JrLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7 CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1 bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTih4KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZXFfc2Nhbih4QHkpJzsKK0VYUExBSU4gU0VMRUNUIDE7 CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdCAgKGNvc3Q9MC4wMC4uMC4w MSByb3dzPTEgd2lkdGg9NCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHhA eSkgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX3NjYW4oeCMyKSc7CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4IzIpIC8qIG5vdCBtYXRjaGVk ICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOICh4 L3kpJzsKK0VYUExBSU4gU0VMRUNUIDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFJlc3VsdCAgKGNvc3Q9MC4wMC4uMC4wMSByb3dzPTEgd2lkdGg9NCkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFNFUV9TQ0FOKHgveSkgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnICBTRVFfU0NBTiAoIHggLyB5IC4geiApICAn OworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVz dWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0aD00KQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oeC95LnopIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJ4IiMyLyJ5Ii4ieiJAInQiKSc7 CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1 bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTih4IzIveS56QHQpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQor CistLSBTeW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFVRU5U SUFMX1NDQU4oeCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3Bs YW5fYWR2aWNlLmFkdmljZSI6ICJTRVFVRU5USUFMX1NDQU4oeCkiCitERVRBSUw6ICBDb3VsZCBu b3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiU0VRVUVOVElBTF9TQ0FO IgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTic7CitFUlJPUjogIGludmFs aWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FO IgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IGVuZCBv ZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworRVJST1I6 ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJT RVFfU0NBTigiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3Ig YXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCIn OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICJTRVFfU0NBTigiIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogdW50 ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiIiknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZv ciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiIikiCitERVRB SUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB6ZXJvLWxlbmd0aCBkZWxpbWl0ZWQgaWRlbnRp ZmllciBhdCBvciBuZWFyICIiIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TigiYSInOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2 aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiYSIiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2 aWNlOiBzeW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKCMnOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIg InBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigjIgorREVUQUlMOiAgQ291bGQgbm90 IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIiMiCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJygpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVy ICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiKCkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2Ug YWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKCIKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnMTIzJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19w bGFuX2FkdmljZS5hZHZpY2UiOiAiMTIzIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmlj ZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIjEyMyIKKy0tIExlZ2FsIGNvbW1lbnRzLgorU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiovJzsKK0VYUExBSU4gU0VMRUNUIDE7CisgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdCAgKGNvc3Q9MC4wMC4uMC4wMSByb3dz PTEgd2lkdGg9NCkKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNI X0pPSU4oXykvKioqLyc7CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oXykgLyogbm90IG1hdGNoZWQgKi8KKygz IHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNI X0pPSU4oLyp4Ki95KSc7CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oeSkgLyogbm90IG1hdGNoZWQgKi8KKygz IHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNI X0pPSU4oeS8vKngqL3opJzsKK0VYUExBSU4gU0VMRUNUIDE7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFJlc3VsdCAgKGNvc3Q9MC4wMC4uMC4wMSByb3dzPTEgd2lkdGg9NCkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTih5L3opIC8qIG5vdCBtYXRjaGVkICov CisoMyByb3dzKQorCistLSBVbnRlcm1pbmF0ZWQgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJy8qJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJw Z19wbGFuX2FkdmljZS5hZHZpY2UiOiAiLyoiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2 aWNlOiB1bnRlcm1pbmF0ZWQgY29tbWVudCBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CitFUlJPUjogIGludmFs aWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkpPSU5fT1JE RVIoImZPTyIpIC8qIG9vcHMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRl cm1pbmF0ZWQgY29tbWVudCBhdCBlbmQgb2YgaW5wdXQKKy0tIE5lc3RlZCBjb21tZW50cyBhcmUg bm90IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2FsIGFuZAorLS0gdGhl IHNlY29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyovJzsKK0VY UExBSU4gU0VMRUNUIDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdCAg KGNvc3Q9MC4wMC4uMC4wMSByb3dzPTEgd2lkdGg9NCkKKygxIHJvdykKKworU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICcvKi8qIHN0dWZmICovKi8nOworRVJST1I6ICBpbnZhbGlkIHZhbHVl IGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICIvKi8qIHN0dWZmICovKi8i CitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVh ciAiKiIKKy0tIEZvcmVpZ24gam9pbiByZXF1aXJlcyBtdWx0aXBsZSByZWxhdGlvbiBpZGVudGlm aWVycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKGEpJzsKK0VS Uk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2Ui OiAiRk9SRUlHTl9KT0lOKGEpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogRk9S RUlHTl9KT0lOIHRhcmdldHMgbXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaWRl bnRpZmllciBhdCBvciBuZWFyICIpIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JF SUdOX0pPSU4oKGEpKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdf cGxhbl9hZHZpY2UuYWR2aWNlIjogIkZPUkVJR05fSk9JTigoYSkpIgorREVUQUlMOiAgQ291bGQg bm90IHBhcnNlIGFkdmljZTogRk9SRUlHTl9KT0lOIHRhcmdldHMgbXVzdCBjb250YWluIG1vcmUg dGhhbiBvbmUgcmVsYXRpb24gaWRlbnRpZmllciBhdCBvciBuZWFyICIpIgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM0 NTJlNWFkNDhlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNv bi5idWlsZApAQCAtMCwwICsxLDcwIEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI0LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitwZ19wbGFuX2FkdmljZV9zb3VyY2Vz ID0gZmlsZXMoCisgICdwZ19wbGFuX2FkdmljZS5jJywKKyAgJ3BncGFfYXN0LmMnLAorICAncGdw YV9jb2xsZWN0b3IuYycsCisgICdwZ3BhX2lkZW50aWZpZXIuYycsCisgICdwZ3BhX2pvaW4uYycs CisgICdwZ3BhX291dHB1dC5jJywKKyAgJ3BncGFfcGxhbm5lci5jJywKKyAgJ3BncGFfc2Nhbi5j JywKKyAgJ3BncGFfdHJvdmUuYycsCisgICdwZ3BhX3dhbGtlci5jJywKKykKKworcGdwYV9zY2Fu bmVyID0gY3VzdG9tX3RhcmdldCgncGdwYV9zY2FubmVyJywKKyAgaW5wdXQ6ICdwZ3BhX3NjYW5u ZXIubCcsCisgIG91dHB1dDogJ3BncGFfc2Nhbm5lci5jJywKKyAgY29tbWFuZDogZmxleF9jbWQs CispCitnZW5lcmF0ZWRfc291cmNlcyArPSBwZ3BhX3NjYW5uZXIKK3BnX3BsYW5fYWR2aWNlX3Nv dXJjZXMgKz0gcGdwYV9zY2FubmVyCisKK3BncGFfcGFyc2VyID0gY3VzdG9tX3RhcmdldCgncGdw YV9wYXJzZXInLAorICBpbnB1dDogJ3BncGFfcGFyc2VyLnknLAorICBrd2FyZ3M6IGJpc29uX2t3 LAorKQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9wYXJzZXIudG9fbGlzdCgpCitwZ19wbGFu X2FkdmljZV9zb3VyY2VzICs9IHBncGFfcGFyc2VyCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5k b3dzJworICBwZ19wbGFuX2FkdmljZV9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4z MnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAncGdfcGxhbl9hZHZpY2UnLAor ICAgICctLUZJTEVERVNDJywgJ3BnX3BsYW5fYWR2aWNlIC0gaGVscCB0aGUgcGxhbm5lciBnZXQg dGhlIHJpZ2h0IHBsYW4nLF0pCitlbmRpZgorCitwZ19wbGFuX2FkdmljZSA9IHNoYXJlZF9tb2R1 bGUoJ3BnX3BsYW5fYWR2aWNlJywKKyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcywKKyAgaW5jbHVk ZV9kaXJlY3RvcmllczogaW5jbHVkZV9kaXJlY3RvcmllcygnLicpLAorICBrd2FyZ3M6IGNvbnRy aWJfbW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0gcGdfcGxhbl9hZHZpY2UKKworaW5z dGFsbF9kYXRhKAorICAncGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwnLAorICAncGdfcGxhbl9hZHZp Y2UuY29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCisKK3Rlc3RzICs9 IHsKKyAgJ25hbWUnOiAncGdfcGxhbl9hZHZpY2UnLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3Nv dXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3JlZ3Jl c3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICdnYXRoZXInLAorICAgICAgJ2pvaW5fb3JkZXIn LAorICAgICAgJ2pvaW5fc3RyYXRlZ3knLAorICAgICAgJ2xvY2FsX2NvbGxlY3RvcicsCisgICAg ICAncGFydGl0aW9ud2lzZScsCisgICAgICAnc2NhbicsCisgICAgICAnc3ludGF4JywKKyAgICBd LAorICB9LAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsKKyAgICAgICd0LzAwMV9yZWdyZXNz LnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxh bl9hZHZpY2UtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjI5ZjRmMjI0ODY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z19wbGFuX2FkdmljZS0tMS4wLnNxbApAQCAtMCwwICsxLDQyIEBACisvKiBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNj cmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9O CitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2UiIHRvIGxvYWQgdGhp cyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX2xvY2Fs X2FkdmljZSgpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY2xlYXJf Y29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVO Q1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitB UyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJwor TEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX2xv Y2FsX2FkdmljZSgKKwlPVVQgaWQgYmlnaW50LAorCU9VVCB1c2VyaWQgb2lkLAorCU9VVCBkYmlk IG9pZCwKKwlPVVQgcXVlcnlpZCBiaWdpbnQsCisJT1VUIGNvbGxlY3Rpb25fdGltZSB0aW1lc3Rh bXB0eiwKKwlPVVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2aWNlIHRleHQKKykKK1JFVFVSTlMgU0VU T0YgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29s bGVjdGVkX3NoYXJlZF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwK KwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3Rp bWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitS RVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVj dGVkX3NoYXJlZF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworUkVWT0tFIEFMTCBPTiBG VU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJQzsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uY2I3MjUzZTFhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKQEAgLTAsMCArMSw0NjggQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2aWNlLmMKKyAqCSAgbWFpbiBlbnRyeXBv aW50cyBmb3IgZ2VuZXJhdGluZyBhbmQgYXBwbHlpbmcgcGxhbm5lciBhZHZpY2UKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJw Z3BhX2NvbGxlY3Rvci5oIgorI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUg InBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAicGdw YV90cm92ZS5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21tYW5k cy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCisjaW5jbHVkZSAiY29t bWFuZHMvZXhwbGFpbl9mb3JtYXQuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRl LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgi CisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMu aCIKKworUEdfTU9EVUxFX01BR0lDOworCitzdGF0aWMgcGdwYV9zaGFyZWRfc3RhdGUgKnBncGFf c3RhdGUgPSBOVUxMOworc3RhdGljIGRzYV9hcmVhICpwZ3BhX2RzYV9hcmVhID0gTlVMTDsKKwor LyogR1VDIHZhcmlhYmxlcyAqLworY2hhcgkgICAqcGdfcGxhbl9hZHZpY2VfYWR2aWNlID0gTlVM TDsKK3N0YXRpYyBib29sIHBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1cHBsaWVkX2Fk dmljZSA9IHRydWU7Citib29sCQlwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrID0gZmFsc2U7Citp bnQJCQlwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKK2ludAkJCXBn X3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKKworLyogU2F2ZWQgaG9v ayB2YWx1ZSAqLworc3RhdGljIGV4cGxhaW5fcGVyX3BsYW5faG9va190eXBlIHByZXZfZXhwbGFp bl9wZXJfcGxhbiA9IE5VTEw7CisKKy8qIE90aGVyIGZpbGUtbGV2ZWwgZ2xvYmFscyAqLworc3Rh dGljIGludAllc19leHRlbnNpb25faWQ7CitzdGF0aWMgTWVtb3J5Q29udGV4dCBwZ3BhX21lbW9y eV9jb250ZXh0ID0gTlVMTDsKKworc3RhdGljIHZvaWQgcGdwYV9pbml0X3NoYXJlZF9zdGF0ZSh2 b2lkICpwdHIsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBwZ19wbGFuX2FkdmljZV9leHBsYWlu X29wdGlvbl9oYW5kbGVyKEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkJCQkgIERlZkVsZW0g Km9wdCwKKwkJCQkJCQkJCQkJCSAgUGFyc2VTdGF0ZSAqcHN0YXRlKTsKK3N0YXRpYyB2b2lkIHBn X3BsYW5fYWR2aWNlX2V4cGxhaW5fcGVyX3BsYW5faG9vayhQbGFubmVkU3RtdCAqcGxhbm5lZHN0 bXQsCisJCQkJCQkJCQkJCQkgSW50b0NsYXVzZSAqaW50bywKKwkJCQkJCQkJCQkJCSBFeHBsYWlu U3RhdGUgKmVzLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkJ CQkJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1l bnQgKnF1ZXJ5RW52KTsKK3N0YXRpYyBib29sIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19o b29rKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwKKwkJCQkJCQkJCQkJIEd1Y1NvdXJjZSBz b3VyY2UpOworc3RhdGljIERlZkVsZW0gKmZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRl Zmxpc3QsIGNoYXIgKmRlZm5hbWUpOworCisvKgorICogSW5pdGlhbGl6ZSB0aGlzIG1vZHVsZS4K KyAqLwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJs ZSgicGdfcGxhbl9hZHZpY2UuYWR2aWNlIiwKKwkJCQkJCQkgICAiYWR2aWNlIHRvIGFwcGx5IGR1 cmluZyBxdWVyeSBwbGFubmluZyIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAmcGdfcGxh bl9hZHZpY2VfYWR2aWNlLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgUEdDX1VTRVJTRVQs CisJCQkJCQkJICAgMCwKKwkJCQkJCQkgICBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9v aywKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIE5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9v bFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2Ui LAorCQkJCQkJCSAiRVhQTEFJTiBvdXRwdXQgaW5jbHVkZXMgc3VwcGxpZWQgYWR2aWNlIGV2ZW4g d2l0aG91dCBFWFBMQUlOIChQTEFOX0FEVklDRSkiLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAm cGdfcGxhbl9hZHZpY2VfYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlLAorCQkJCQkJCSB0 cnVlLAorCQkJCQkJCSBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJ CQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCk7CisKKwlEZWZpbmVDdXN0b21JbnRWYXJpYWJsZSgi cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2 aWNlIGVudHJpZXMgdG8gcmV0YWluIGluIHBlci1iYWNrZW5kIG1lbW9yeSIsCisJCQkJCQkJTlVM TCwKKwkJCQkJCQkmcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCwKKwkJCQkJ CQkwLAorCQkJCQkJCTAsIElOVF9NQVgsCisJCQkJCQkJUEdDX1VTRVJTRVQsCisJCQkJCQkJMCwK KwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCk7CisKKwlEZWZpbmVDdXN0 b21JbnRWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQiLAor CQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBzaGFyZWQgbWVtb3J5IiwK KwkJCQkJCQlOVUxMLAorCQkJCQkJCSZwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9s aW1pdCwKKwkJCQkJCQkwLAorCQkJCQkJCTAsIElOVF9NQVgsCisJCQkJCQkJUEdDX1NVU0VULAor CQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwpOworCisJ RGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS50cmFjZV9tYXNrIiwKKwkJ CQkJCQkgIkVtaXQgZGVidWdnaW5nIG1lc3NhZ2VzIHNob3dpbmcgdGhlIGNvbXB1dGVkIHN0cmF0 ZWd5IG1hc2sgZm9yIGVhY2ggcmVsYXRpb24iLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmcGdf cGxhbl9hZHZpY2VfdHJhY2VfbWFzaywKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19VU0VS U0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBO VUxMKTsKKworCU1hcmtHVUNQcmVmaXhSZXNlcnZlZCgicGdfcGxhbl9hZHZpY2UiKTsKKworCS8q IEdldCBhbiBJRCB0aGF0IHdlIGNhbiB1c2UgdG8gY2FjaGUgZGF0YSBpbiBhbiBFeHBsYWluU3Rh dGUuICovCisJZXNfZXh0ZW5zaW9uX2lkID0gR2V0RXhwbGFpbkV4dGVuc2lvbklkKCJwZ19wbGFu X2FkdmljZSIpOworCisJLyogUmVnaXN0ZXIgdGhlIG5ldyBFWFBMQUlOIG9wdGlvbnMgaW1wbGVt ZW50ZWQgYnkgdGhpcyBtb2R1bGUuICovCisJUmVnaXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9u KCJwbGFuX2FkdmljZSIsCisJCQkJCQkJCSAgIHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9u X2hhbmRsZXIpOworCisJLyogSW5zdGFsbCBob29rcyAqLworCXBncGFfcGxhbm5lcl9pbnN0YWxs X2hvb2tzKCk7CisJcHJldl9leHBsYWluX3Blcl9wbGFuID0gZXhwbGFpbl9wZXJfcGxhbl9ob29r OworCWV4cGxhaW5fcGVyX3BsYW5faG9vayA9IHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fcGVyX3Bs YW5faG9vazsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIHN0YXRlIHdoZW4gZmlyc3Qg Y3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfaW5pdF9zaGFyZWRfc3RhdGUodm9pZCAq cHRyLCB2b2lkICphcmcpCit7CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gKHBncGFfc2hh cmVkX3N0YXRlICopIHB0cjsKKworCUxXTG9ja0luaXRpYWxpemUoJnN0YXRlLT5sb2NrLCBMV0xv Y2tOZXdUcmFuY2hlSWQoInBnX3BsYW5fYWR2aWNlX2xvY2siKSk7CisJc3RhdGUtPmRzYV90cmFu Y2hlID0gTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19wbGFuX2FkdmljZV9kc2EiKTsKKwlzdGF0ZS0+ YXJlYSA9IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9IElu dmFsaWREc2FQb2ludGVyOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byBhIG1lbW9y eSBjb250ZXh0IHdoZXJlIGxvbmctbGl2ZWQgZGF0YSBtYW5hZ2VkIGJ5IHRoaXMKKyAqIG1vZHVs ZSBjYW4gYmUgc3RvcmVkLgorICovCitNZW1vcnlDb250ZXh0CitwZ19wbGFuX2FkdmljZV9nZXRf bWN4dCh2b2lkKQoreworCWlmIChwZ3BhX21lbW9yeV9jb250ZXh0ID09IE5VTEwpCisJCXBncGFf bWVtb3J5X2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwK KwkJCQkJCQkJCQkJCQkicGdfcGxhbl9hZHZpY2UiLAorCQkJCQkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOworCisJcmV0dXJuIHBncGFfbWVtb3J5X2NvbnRleHQ7Cit9CisKKy8qCisg KiBHZXQgYSBwb2ludGVyIHRvIG91ciBzaGFyZWQgc3RhdGUuCisgKgorICogSWYgbm8gc2hhcmVk IHN0YXRlIGV4aXN0cywgY3JlYXRlIGFuZCBpbml0aWFsaXplIGl0LiBJZiBpdCBkb2VzIGV4aXN0 IGJ1dAorICogdGhpcyBiYWNrZW5kIGhhcyBub3QgeWV0IGFjY2Vzc2VkIGl0LCBhdHRhY2ggdG8g aXQuIE90aGVyd2lzZSwganVzdCByZXR1cm4KKyAqIG91ciBjYWNoZWQgcG9pbnRlci4KKyAqCisg KiBBbG9uZyB0aGUgd2F5LCBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IExXTG9jayB0cmFuY2hlcyBh cmUgcmVnaXN0ZXJlZC4KKyAqLworcGdwYV9zaGFyZWRfc3RhdGUgKgorcGdfcGxhbl9hZHZpY2Vf YXR0YWNoKHZvaWQpCit7CisJaWYgKHBncGFfc3RhdGUgPT0gTlVMTCkKKwl7CisJCWJvb2wJCWZv dW5kOworCisJCXBncGFfc3RhdGUgPQorCQkJR2V0TmFtZWREU01TZWdtZW50KCJwZ19wbGFuX2Fk dmljZSIsIHNpemVvZihwZ3BhX3NoYXJlZF9zdGF0ZSksCisJCQkJCQkJICAgcGdwYV9pbml0X3No YXJlZF9zdGF0ZSwgJmZvdW5kLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gcGdwYV9zdGF0ZTsKK30K KworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gcGdfcGxhbl9hZHZpY2UncyBEU0EgYXJlYSwg Y3JlYXRpbmcgaXQgaWYgbmVlZGVkLgorICovCitkc2FfYXJlYSAqCitwZ19wbGFuX2FkdmljZV9k c2FfYXJlYSh2b2lkKQoreworCWlmIChwZ3BhX2RzYV9hcmVhID09IE5VTEwpCisJeworCQlwZ3Bh X3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwkJZHNhX2hh bmRsZQlhcmVhX2hhbmRsZTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCW9sZGNv bnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQoKSk7 CisKKwkJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWFyZWFf aGFuZGxlID0gc3RhdGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lO VkFMSUQpCisJCXsKKwkJCXBncGFfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHN0YXRlLT5kc2FfdHJh bmNoZSk7CisJCQlkc2FfcGluKHBncGFfZHNhX2FyZWEpOworCQkJc3RhdGUtPmFyZWEgPSBkc2Ff Z2V0X2hhbmRsZShwZ3BhX2RzYV9hcmVhKTsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2Nr KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJ CXBncGFfZHNhX2FyZWEgPSBkc2FfYXR0YWNoKGFyZWFfaGFuZGxlKTsKKwkJfQorCisJCWRzYV9w aW5fbWFwcGluZyhwZ3BhX2RzYV9hcmVhKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7CisJfQorCisJcmV0dXJuIHBncGFfZHNhX2FyZWE7Cit9CisKKy8qCisgKiBXYXMg dGhlIFBMQU5fQURWSUNFIG9wdGlvbiBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8gZmFsc2U/Cisg Ki8KK2Jvb2wKK3BnX3BsYW5fYWR2aWNlX3Nob3VsZF9leHBsYWluKEV4cGxhaW5TdGF0ZSAqZXMp Cit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2UgPSBOVUxMOworCisJaWYgKGVzICE9IE5VTEwpCisJ CXBsYW5fYWR2aWNlID0gR2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBlc19leHRlbnNpb25f aWQpOworCXJldHVybiBwbGFuX2FkdmljZSAhPSBOVUxMICYmICpwbGFuX2FkdmljZTsKK30KKwor LyoKKyAqIEhhbmRsZXIgZm9yIEVYUExBSU4gKFBMQU5fQURWSUNFKS4KKyAqLworc3RhdGljIHZv aWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRlICpl cywgRGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJICBQYXJzZVN0YXRlICpwc3RhdGUpCit7CisJYm9v bAkgICAqcGxhbl9hZHZpY2U7CisKKwlwbGFuX2FkdmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25T dGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lkKTsKKworCWlmIChwbGFuX2FkdmljZSA9PSBOVUxMKQor CXsKKwkJcGxhbl9hZHZpY2UgPSBwYWxsb2MwX29iamVjdChib29sKTsKKwkJU2V0RXhwbGFpbkV4 dGVuc2lvblN0YXRlKGVzLCBlc19leHRlbnNpb25faWQsIHBsYW5fYWR2aWNlKTsKKwl9CisKKwkq cGxhbl9hZHZpY2UgPSBkZWZHZXRCb29sZWFuKG9wdCk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEg c3RyaW5nIHRoYXQgaXMgbGlrZWx5IHRvIGNvbnNpc3Qgb2YgbXVsdGlwbGUgbGluZXMgaW4gRVhQ TEFJTgorICogb3V0cHV0LgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFp bl90ZXh0X211bHRpbGluZShFeHBsYWluU3RhdGUgKmVzLCBjaGFyICpxbGFiZWwsCisJCQkJCQkJ CQkgIGNoYXIgKnZhbHVlKQoreworCWNoYXIJICAgKnM7CisKKwkvKiBGb3Igbm9uLXRleHQgZm9y bWF0cywgaXQncyBiZXN0IG5vdCB0byBhZGQgYW55IHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYg KGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0 eVRleHQocWxhYmVsLCB2YWx1ZSwgZXMpOworCQlyZXR1cm47CisJfQorCisJLyogSW4gdGV4dCBm b3JtYXQsIGlmIHRoZXJlIGlzIG5vIGRhdGEsIGRpc3BsYXkgbm90aGluZy4gKi8KKwlpZiAoKnFs YWJlbCA9PSAnXDAnKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEl0IGxvb2tzIG5pY2VzdCB0byBp bmRlbnQgZWFjaCBsaW5lIG9mIHRoZSBhZHZpY2Ugc2VwYXJhdGVseSwgYmVnaW5uaW5nCisJICog b24gdGhlIGxpbmUgYmVsb3cgdGhlIGxhYmVsLgorCSAqLworCUV4cGxhaW5JbmRlbnRUZXh0KGVz KTsKKwlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIlczpcbiIsIHFsYWJlbCk7CisJZXMtPmlu ZGVudCsrOworCXdoaWxlICgocyA9IHN0cmNocih2YWx1ZSwgJ1xuJykpICE9IE5VTEwpCisJewor CQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oZXMtPnN0 ciwgdmFsdWUsIChzIC0gdmFsdWUpICsgMSk7CisJCXZhbHVlID0gcyArIDE7CisJfQorCisJLyog RG9uJ3QgaW50ZXJwcmV0IGEgdGVybWluYWwgbmV3bGluZSBhcyBhIHJlcXVlc3QgZm9yIGFuIGVt cHR5IGxpbmUuICovCisJaWYgKCp2YWx1ZSAhPSAnXDAnKQorCXsKKwkJRXhwbGFpbkluZGVudFRl eHQoZXMpOworCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIlc1xuIiwgdmFsdWUpOworCX0K KworCWVzLT5pbmRlbnQtLTsKK30KKworLyoKKyAqIEFkZCBhZHZpY2UgZmVlZGJhY2sgdG8gdGhl IEVYUExBSU4gb3V0cHV0LgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFp bl9mZWVkYmFjayhFeHBsYWluU3RhdGUgKmVzLCBMaXN0ICpmZWVkYmFjaykKK3sKKwlTdHJpbmdJ bmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlmb3JlYWNoX25vZGUoRGVm RWxlbSwgaXRlbSwgZmVlZGJhY2spCisJeworCQlpbnQJCQlmbGFncyA9IGRlZkdldEludDMyKGl0 ZW0pOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIC8qICIsIGl0ZW0tPmRlZm5hbWUp OworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9GVUxMKSAhPSAwKQorCQl7CisJCQlBc3Nl cnQoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJUSUFMKSAhPSAwKTsKKwkJCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIm1hdGNoZWQiKTsKKwkJfQorCQllbHNlIGlmICgoZmxhZ3MgJiBQR1BBX1RF X01BVENIX1BBUlRJQUwpICE9IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJwYXJ0aWFs bHkgbWF0Y2hlZCIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJub3QgbWF0 Y2hlZCIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9JTkFQUExJQ0FCTEUpICE9IDApCisJCQlh cHBlbmRTdHJpbmdJbmZvKCZidWYsICIsIGluYXBwbGljYWJsZSIpOworCQlpZiAoKGZsYWdzICYg UEdQQV9URV9DT05GTElDVElORykgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwg Y29uZmxpY3RpbmciKTsKKwkJaWYgKChmbGFncyAmIFBHUEFfVEVfRkFJTEVEKSAhPSAwKQorCQkJ YXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBmYWlsZWQiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygm YnVmLCAiICovXG4iKTsKKwl9CisKKwlwZ19wbGFuX2FkdmljZV9leHBsYWluX3RleHRfbXVsdGls aW5lKGVzLCAiU3VwcGxpZWQgUGxhbiBBZHZpY2UiLAorCQkJCQkJCQkJCSAgYnVmLmRhdGEpOwor fQorCisvKgorICogQWRkIHJlbGV2YW50IGRldGFpbHMsIGlmIGFueSwgdG8gdGhlIEVYUExBSU4g b3V0cHV0IGZvciBhIHNpbmdsZSBwbGFuLgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZp Y2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJ CQkJCSBJbnRvQ2xhdXNlICppbnRvLAorCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJ CQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCisJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBw YXJhbXMsCisJCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCit7CisJYm9vbAkJ c2hvdWxkX2V4cGxhaW47CisJRGVmRWxlbSAgICAqcGdwYV9pdGVtOworCUxpc3QJICAgKnBncGFf bGlzdDsKKworCWlmIChwcmV2X2V4cGxhaW5fcGVyX3BsYW4pCisJCXByZXZfZXhwbGFpbl9wZXJf cGxhbihwbGFubmVkc3RtdCwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsCisJCQkJCQkJ ICBxdWVyeUVudik7CisKKwkvKiBTaG91bGQgYW4gYWR2aWNlIHN0cmluZyBiZSBwYXJ0IG9mIHRo ZSBFWFBMQUlOIG91dHB1dD8gKi8KKwlzaG91bGRfZXhwbGFpbiA9IHBnX3BsYW5fYWR2aWNlX3No b3VsZF9leHBsYWluKGVzKTsKKworCS8qIEZpbmQgYW55IGRhdGEgcGdwYV9wbGFubmVyX3NodXRk b3duIHN0YXNoZWQgaW4gdGhlIFBsYW5uZWRTdG10LiAqLworCXBncGFfaXRlbSA9IGZpbmRfZGVm ZWxlbV9ieV9kZWZuYW1lKHBsYW5uZWRzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCQkJCQkJ InBnX3BsYW5fYWR2aWNlIik7CisJcGdwYV9saXN0ID0gcGdwYV9pdGVtID09IE5VTEwgPyBOVUxM IDogKExpc3QgKikgcGdwYV9pdGVtLT5hcmc7CisKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIGlmIHRo ZXJlIGlzIGEgcmVjb3JkIG9mIGF0dGVtcHRpbmcgdG8gYXBwbHkgYWR2aWNlIGR1cmluZworCSAq IHF1ZXJ5IHBsYW5uaW5nLCB3ZSBhbHdheXMgb3V0cHV0IHRoYXQgaW5mb3JtYXRpb24sIGJ1dCB0 aGUgdXNlciBjYW4gc2V0CisJICogcGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxp ZWRfYWR2aWNlID0gZmFsc2UgdG8gc3VwcHJlc3MgdGhhdAorCSAqIGJlaGF2aW9yLiBJZiB0aGV5 IGRvLCB3ZSdsbCBvbmx5IGRpc3BsYXkgaXQgd2hlbiB0aGUgUExBTl9BRFZJQ0Ugb3B0aW9uCisJ ICogd2FzIHNwZWNpZmllZCBhbmQgbm90IHNldCB0byBmYWxzZS4KKwkgKgorCSAqIE5COiBJZiB3 ZSdyZSBleHBsYWluaW5nIGEgcXVlcnkgcGxhbm5lZCBiZWZvcmVoYW5kIC0tIGkuZS4gYSBwcmVw YXJlZAorCSAqIHN0YXRlbWVudCAtLSB0aGUgYXBwbGljYXRpb24gb2YgcXVlcnkgYWR2aWNlIG1h eSBub3QgaGF2ZSBiZWVuCisJICogcmVjb3JkZWQsIGFuZCB0aGVyZWZvcmUgdGhpcyB3b24ndCBi ZSBhYmxlIHRvIHNob3cgYW55dGhpbmcuCisJICovCisJaWYgKHBncGFfbGlzdCAhPSBOVUxMICYm IChwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgfHwKKwkJCQkJ CQkgIHNob3VsZF9leHBsYWluKSkKKwl7CisJCURlZkVsZW0gICAgKmZlZWRiYWNrOworCisJCWZl ZWRiYWNrID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGdwYV9saXN0LCAiZmVlZGJhY2siKTsK KwkJaWYgKGZlZWRiYWNrICE9IE5VTEwpCisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWluX2ZlZWRi YWNrKGVzLCAoTGlzdCAqKSBmZWVkYmFjay0+YXJnKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBQ TEFOX0FEVklDRSBvcHRpb24gd2FzIHNwZWNpZmllZCAtLSBhbmQgbm90IHNlbnQgdG8gRkFMU0Ug LS0KKwkgKiBzaG93IGdlbmVyYXRlZCBhZHZpY2UuCisJICovCisJaWYgKHNob3VsZF9leHBsYWlu KQorCXsKKwkJRGVmRWxlbSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCQljaGFyCSAgICphZHZp Y2Vfc3RyaW5nID0gTlVMTDsKKworCQlhZHZpY2Vfc3RyaW5nX2l0ZW0gPQorCQkJZmluZF9kZWZl bGVtX2J5X2RlZm5hbWUocGdwYV9saXN0LCAiYWR2aWNlX3N0cmluZyIpOworCQlpZiAoYWR2aWNl X3N0cmluZ19pdGVtICE9IE5VTEwpCisJCXsKKwkJCS8qIEFkdmljZSBoYXMgYWxyZWFkeSBiZWVu IGdlbmVyYXRlZDsgd2UgY2FuIHJldXNlIGl0LiAqLworCQkJYWR2aWNlX3N0cmluZyA9IHN0clZh bChhZHZpY2Vfc3RyaW5nX2l0ZW0tPmFyZyk7CisJCX0KKwkJaWYgKGFkdmljZV9zdHJpbmcgIT0g TlVMTCAmJiBhZHZpY2Vfc3RyaW5nWzBdICE9ICdcMCcpCisJCQlwZ19wbGFuX2FkdmljZV9leHBs YWluX3RleHRfbXVsdGlsaW5lKGVzLCAiR2VuZXJhdGVkIFBsYW4gQWR2aWNlIiwKKwkJCQkJCQkJ CQkJCSAgYWR2aWNlX3N0cmluZyk7CisJfQorfQorCisvKgorICogQ2hlY2sgaG9vayBmb3IgcGdf cGxhbl9hZHZpY2UuYWR2aWNlCisgKi8KK3N0YXRpYyBib29sCitwZ19wbGFuX2FkdmljZV9hZHZp Y2VfY2hlY2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3Vy Y2UpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQgdG1wY29u dGV4dDsKKwljaGFyCSAgICplcnJvcjsKKworCWlmICgqbmV3dmFsID09IE5VTEwpCisJCXJldHVy biB0cnVlOworCisJdG1wY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJ CQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyh0bXBjb250ZXh0KTsKKworCS8qCisJICogSXQgd291bGQgYmUgbmljZSB0byBz YXZlIHRoZSBwYXJzZSB0cmVlIHRoYXQgd2UgY29uc3RydWN0IGhlcmUgZm9yCisJICogZXZlbnR1 YWwgdXNlIHdoZW4gcGxhbm5pbmcgd2l0aCB0aGlzIGFkdmljZSwgYnV0ICpleHRyYSBjYW4gb25s eSBwb2ludAorCSAqIHRvIGEgc2luZ2xlIGd1Y19tYWxsb2MnZCBjaHVuaywgYW5kIG91ciBwYXJz ZSB0cmVlIGludm9sdmVzIGFuCisJICogYXJiaXRyYXJ5IG51bWJlciBvZiBtZW1vcnkgYWxsb2Nh dGlvbnMuCisJICovCisJKHZvaWQpIHBncGFfcGFyc2UoKm5ld3ZhbCwgJmVycm9yKTsKKworCWlm IChlcnJvciAhPSBOVUxMKQorCXsKKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiQ291bGQgbm90IHBh cnNlIGFkdmljZTogJXMiLCBlcnJvcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjb250 ZXh0KTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZF bGVtIG9iamVjdHMgZm9yIGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgor ZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sK Kwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAo aXRlbS0+ZGVmbmFtZSwgZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJl dHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFu X2FkdmljZS5jb250cm9sIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5j b250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYTZmZGM5ZTdi MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZp Y2UuY29udHJvbApAQCAtMCwwICsxLDUgQEAKKyMgcGdfcGxhbl9hZHZpY2UgZXh0ZW5zaW9uCitj b21tZW50ID0gJ2hlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJworZGVmYXVsdF92 ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3BnX3BsYW5fYWR2aWNl JworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVjMzUzZjFhNDg2Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5o CkBAIC0wLDAgKzEsNDAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2 aWNlLmgKKyAqCSAgbWFpbiBoZWFkZXIgZmlsZSBmb3IgcGdfcGxhbl9hZHZpY2UgY29udHJpYiBt b2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxh bl9hZHZpY2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1BMQU5f QURWSUNFX0gKKyNkZWZpbmUgUEdfUExBTl9BRFZJQ0VfSAorCisjaW5jbHVkZSAiY29tbWFuZHMv ZXhwbGFpbl9zdGF0ZS5oIgorI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2luY2x1ZGUg InN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCisKK3R5cGVkZWYgc3Ry dWN0IHBncGFfc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFu Y2hlOworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFyZWRfY29sbGVjdG9yOwor fSBwZ3BhX3NoYXJlZF9zdGF0ZTsKKworLyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJuIGNoYXIg KnBnX3BsYW5fYWR2aWNlX2FkdmljZTsKK2V4dGVybiBpbnQJcGdfcGxhbl9hZHZpY2VfbG9jYWxf Y29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBpbnQJcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxl Y3Rpb25fbGltaXQ7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrOworCisv KiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitleHRlcm4gTWVtb3J5Q29udGV4dCBwZ19wbGFuX2Fk dmljZV9nZXRfbWN4dCh2b2lkKTsKK2V4dGVybiBwZ3BhX3NoYXJlZF9zdGF0ZSAqcGdfcGxhbl9h ZHZpY2VfYXR0YWNoKHZvaWQpOworZXh0ZXJuIGRzYV9hcmVhICpwZ19wbGFuX2FkdmljZV9kc2Ff YXJlYSh2b2lkKTsKK2V4dGVybiBib29sIHBnX3BsYW5fYWR2aWNlX3Nob3VsZF9leHBsYWluKEV4 cGxhaW5TdGF0ZSAqZXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9hc3QuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGQ2MDEwYzQ3ZTcKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKQEAgLTAsMCArMSwz OTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfYXN0LmMKKyAqCSAgYWRkaXRp b25hbCBzdXBwb3J0aW5nIGNvZGUgcmVsYXRlZCB0byBwbGFuIGFkdmljZSBwYXJzaW5nCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgInBncGFfYXN0LmgiCisKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAidXRpbHMv YXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorCitzdGF0aWMgYm9vbCBwZ3Bh X2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlk cywKKwkJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkJCSAg Ym9vbCAqcmlkc191c2VkKTsKKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29ycmVzcG9u ZHMgdG8gdGhlIHNwZWNpZmllZCBhZHZpY2UgdGFnLgorICovCitjaGFyICoKK3BncGFfY3N0cmlu Z19hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIGFkdmljZV90YWcpCit7CisJc3dpdGNo IChhZHZpY2VfdGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJ cmV0dXJuICJCSVRNQVBfSEVBUF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46 CisJCQlyZXR1cm4gIkZPUkVJR05fSk9JTiI7CisJCWNhc2UgUEdQQV9UQUdfR0FUSEVSOgorCQkJ cmV0dXJuICJHQVRIRVIiOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCXJldHVy biAiR0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQlyZXR1cm4g IkhBU0hfSk9JTiI7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgorCQkJcmV0dXJu ICJJTkRFWF9PTkxZX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQlyZXR1 cm4gIklOREVYX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQlyZXR1cm4g IkpPSU5fT1JERVIiOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJ CQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIFBHUEFfVEFHX01FUkdF X0pPSU5fUExBSU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExBSU4iOworCQljYXNlIFBHUEFf VEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NQVRF UklBTElaRSI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVy biAiTkVTVEVEX0xPT1BfTUVNT0laRSI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExB SU46CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX1BMQUlOIjsKKwkJY2FzZSBQR1BBX1RBR19OT19H QVRIRVI6CisJCQlyZXR1cm4gIk5PX0dBVEhFUiI7CisJCWNhc2UgUEdQQV9UQUdfUEFSVElUSU9O V0lTRToKKwkJCXJldHVybiAiUEFSVElUSU9OV0lTRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpP SU5fTk9OX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJCWNhc2Ug UEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9VTklRVUUiOwor CQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJcmV0dXJuICJTRVFfU0NBTiI7CisJCWNhc2Ug UEdQQV9UQUdfVElEX1NDQU46CisJCQlyZXR1cm4gIlRJRF9TQ0FOIjsKKwl9CisKKwlwZ191bnJl YWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogQ29udmVydCBhbiBhZHZpY2Ug dGFnLCBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCisgKiBkb3du Y2FzZWQgYXMgYXBwcm9wcmlhdGUsIHRvIGEgcGdwYV9hZHZpY2VfdGFnX3R5cGUuCisgKgorICog SWYgd2Ugc3VjY2VlZCwgc2V0ICpmYWlsID0gZmFsc2UgYW5kIHJldHVybiB0aGUgcmVzdWx0OyBp ZiB3ZSBmYWlsLAorICogc2V0ICpmYWlsID0gdHJ1ZSBhbmQgcmV1cm4gYW4gYXJiaXRyYXJ5IHZh bHVlLgorICovCitwZ3BhX2FkdmljZV90YWdfdHlwZQorcGdwYV9wYXJzZV9hZHZpY2VfdGFnKGNv bnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCkKK3sKKwkqZmFpbCA9IGZhbHNlOworCisJc3dpdGNo ICh0YWdbMF0pCisJeworCQljYXNlICdiJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiYml0bWFwX2hl YXBfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU47CisJ CQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlpZiAoc3RyY21wKHRhZywgImZvcmVpZ25fam9pbiIp ID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjsKKwkJCWJyZWFrOworCQlj YXNlICdnJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiZ2F0aGVyIikgPT0gMCkKKwkJCQlyZXR1cm4g UEdQQV9UQUdfR0FUSEVSOworCQkJaWYgKHN0cmNtcCh0YWcsICJnYXRoZXJfbWVyZ2UiKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVJfTUVSR0U7CisJCQlicmVhazsKKwkJY2FzZSAn aCc6CisJCQlpZiAoc3RyY21wKHRhZywgImhhc2hfam9pbiIpID09IDApCisJCQkJcmV0dXJuIFBH UEFfVEFHX0hBU0hfSk9JTjsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWlmIChzdHJjbXAo dGFnLCAiaW5kZXhfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0lOREVYX1NDQU47 CisJCQlpZiAoc3RyY21wKHRhZywgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJcmV0dXJu IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdqJzoKKwkJCWlm IChzdHJjbXAodGFnLCAiam9pbl9vcmRlciIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0pP SU5fT1JERVI7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAoc3RyY21wKHRhZywgIm1l cmdlX2pvaW5fbWF0ZXJpYWxpemUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19NRVJHRV9K T0lOX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJtZXJnZV9qb2luX3BsYWluIikg PT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjsKKwkJCWJyZWFrOwor CQljYXNlICduJzoKKwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfbWF0ZXJpYWxpemUi KSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRTsKKwkJ CWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfbWVtb2l6ZSIpID09IDApCisJCQkJcmV0dXJu IFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU7CisJCQlpZiAoc3RyY21wKHRhZywgIm5lc3Rl ZF9sb29wX3BsYWluIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExB SU47CisJCQlpZiAoc3RyY21wKHRhZywgIm5vX2dhdGhlciIpID09IDApCisJCQkJcmV0dXJuIFBH UEFfVEFHX05PX0dBVEhFUjsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCWlmIChzdHJjbXAo dGFnLCAicGFydGl0aW9ud2lzZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1BBUlRJVElP TldJU0U7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlpZiAoc3RyY21wKHRhZywgInNlbWlq b2luX25vbl91bmlxdWUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19TRU1JSk9JTl9OT05f VU5JUVVFOworCQkJaWYgKHN0cmNtcCh0YWcsICJzZW1pam9pbl91bmlxdWUiKSA9PSAwKQorCQkJ CXJldHVybiBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRhZywgInNl cV9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VRX1NDQU47CisJCQlicmVhazsK KwkJY2FzZSAndCc6CisJCQlpZiAoc3RyY21wKHRhZywgInRpZF9zY2FuIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfVElEX1NDQU47CisJCQlicmVhazsKKwl9CisKKwkvKiBkaWRuJ3Qgd29y ayBvdXQgKi8KKwkqZmFpbCA9IHRydWU7CisKKwkvKiByZXR1cm4gYW4gYXJiaXRyYXJ5IHZhbHVl IHRvIHVud2luZCB0aGUgY2FsbCBzdGFjayAqLworCXJldHVybiBQR1BBX1RBR19TRVFfU0NBTjsK K30KKworLyoKKyAqIEZvcm1hdCBhIHBncGFfYWR2aWNlX3RhcmdldCBhcyBhIHN0cmluZyBhbmQg YXBwZW5kIHJlc3VsdCB0byBhIFN0cmluZ0luZm8uCisgKi8KK3ZvaWQKK3BncGFfZm9ybWF0X2Fk dmljZV90YXJnZXQoU3RyaW5nSW5mbyBzdHIsIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQor eworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQli b29sCQlmaXJzdCA9IHRydWU7CisJCWNoYXIJICAgKmRlbGltczsKKworCQlpZiAodGFyZ2V0LT50 dHlwZSA9PSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVCkKKwkJCWRlbGltcyA9ICJ7fSI7CisJ CWVsc2UKKwkJCWRlbGltcyA9ICIoKSI7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCBk ZWxpbXNbMF0pOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3Rhcmdl dCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKGZpcnN0KQorCQkJCWZpcnN0ID0gZmFs c2U7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAnICcpOworCQkJcGdw YV9mb3JtYXRfYWR2aWNlX3RhcmdldChzdHIsIGNoaWxkX3RhcmdldCk7CisJCX0KKwkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoc3RyLCBkZWxpbXNbMV0pOworCX0KKwllbHNlCisJeworCQljb25zdCBj aGFyICpydF9pZGVudGlmaWVyOworCisJCXJ0X2lkZW50aWZpZXIgPSBwZ3BhX2lkZW50aWZpZXJf c3RyaW5nKCZ0YXJnZXQtPnJpZCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCBydF9p ZGVudGlmaWVyKTsKKwl9Cit9CisKKy8qCisgKiBGb3JtYXQgYSBwZ3BhX2luZGV4X3RhcmdldCBh cyBhIHN0cmluZyBhbmQgYXBwZW5kIHJlc3VsdCB0byBhIFN0cmluZ0luZm8uCisgKi8KK3ZvaWQK K3BncGFfZm9ybWF0X2luZGV4X3RhcmdldChTdHJpbmdJbmZvIHN0ciwgcGdwYV9pbmRleF90YXJn ZXQgKml0YXJnZXQpCit7CisJaWYgKGl0YXJnZXQtPml0eXBlICE9IFBHUEFfSU5ERVhfTkFNRSkK Kwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQlpZiAoaXRhcmdldC0+aXR5cGUgPT0gUEdQ QV9JTkRFWF9BTkQpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgIiYmKCIpOworCQll bHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgInx8KCIpOworCisJCWZvcmVhY2hf cHRyKHBncGFfaW5kZXhfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIGl0YXJnZXQtPmNoaWxkcmVuKQor CQl7CisJCQlpZiAoZmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQo c3RyLCBjaGlsZF90YXJnZXQpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgJykn KTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGl0YXJnZXQtPmluZG5hbWVzcGFjZSAhPSBOVUxMKQor CQkJYXBwZW5kU3RyaW5nSW5mbyhzdHIsICIlcy4iLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVy KGl0YXJnZXQtPmluZG5hbWVzcGFjZSkpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwg cXVvdGVfaWRlbnRpZmllcihpdGFyZ2V0LT5pbmRuYW1lKSk7CisJfQorfQorCisvKgorICogRGV0 ZXJtaW5lIHdoZXRoZXIgdHdvIHBncGFfaW5kZXhfdGFyZ2V0IG9iamVjdHMgYXJlIGV4YWN0bHkg aWRlbnRpY2FsLgorICovCitib29sCitwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRl eF90YXJnZXQgKmkxLCBwZ3BhX2luZGV4X3RhcmdldCAqaTIpCit7CisJaWYgKGkxLT5pdHlwZSAh PSBpMi0+aXR5cGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpMS0+aXR5cGUgPT0gUEdQQV9J TkRFWF9OQU1FKQorCXsKKwkJLyogaW5kbmFtZXNwYWNlIGNhbiBiZSBOVUxMLCBhbmQgdHdvIE5V TEwgdmFsdWVzIGFyZSBlcXVhbCAqLworCQlpZiAoKGkxLT5pbmRuYW1lc3BhY2UgIT0gTlVMTCB8 fCBpMi0+aW5kbmFtZXNwYWNlICE9IE5VTEwpICYmCisJCQkoaTEtPmluZG5hbWVzcGFjZSA9PSBO VUxMIHx8IGkyLT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8fAorCQkJIHN0cmNtcChpMS0+aW5kbmFt ZXNwYWNlLCBpMi0+aW5kbmFtZXNwYWNlKSAhPSAwKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYg KHN0cmNtcChpMS0+aW5kbmFtZSwgaTItPmluZG5hbWUpICE9IDApCisJCQlyZXR1cm4gZmFsc2U7 CisJfQorCWVsc2UKKwl7CisJCWludAkJCWkxX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKGkxLT5jaGls ZHJlbik7CisKKwkJaWYgKGkxX2xlbmd0aCAhPSBsaXN0X2xlbmd0aChpMi0+Y2hpbGRyZW4pKQor CQkJcmV0dXJuIGZhbHNlOworCQlmb3IgKGludCBuID0gMDsgbiA8IGkxX2xlbmd0aDsgKytuKQor CQl7CisJCQlwZ3BhX2luZGV4X3RhcmdldCAqYzEgPSBsaXN0X250aChpMS0+Y2hpbGRyZW4sIG4p OworCQkJcGdwYV9pbmRleF90YXJnZXQgKmMyID0gbGlzdF9udGgoaTItPmNoaWxkcmVuLCBuKTsK KworCQkJaWYgKCFwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwoYzEsIGMyKSkKKwkJCQlyZXR1cm4g ZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRo ZXIgYW4gaWRlbnRpZmllciBtYXRjaGVzIGFuIGFueSBwYXJ0IG9mIGFuIGFkdmljZSB0YXJnZXQu CisgKi8KK2Jvb2wKK3BncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50aWZp ZXIgKnJpZCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJLyogRm9yIG5vbi1pZGVu dGlmaWVycywgY2hlY2sgYWxsIGRlc2NlbmRlbnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9 IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90 YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKHBncGFf aWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGNoaWxkX3RhcmdldCkpCisJCQkJcmV0dXJu IHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFN0cmFpZ2h0Zm9yd2FyZCBj b21wYXJpc29ucyBvZiBhbGlhcyBuYW1lIGFuZCBvY2NjdXJyZW5jZSBudW1iZXIuICovCisJaWYg KHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHRhcmdldC0+cmlkLmFsaWFzX25hbWUpICE9IDApCisJ CXJldHVybiBmYWxzZTsKKwlpZiAocmlkLT5vY2N1cnJlbmNlICE9IHRhcmdldC0+cmlkLm9jY3Vy cmVuY2UpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgYSByZWxhdGlvbiBpZGVudGlm ZXIgbWVudGlvbnMgYSBwYXJ0aXRpb24gbmFtZSwgaXQgc2hvdWxkIGFsc28KKwkgKiBzcGVjaWZ5 IGEgcGFydGl0aW9uIHNjaGVtYS4gQnV0IHRoZSB0YXJnZXQgbWF5IGxlYXZlIHRoZSBzY2hlbWEg TlVMTCB0bworCSAqIG1hdGNoIGFueXRoaW5nLgorCSAqLworCUFzc2VydChyaWQtPnBhcnRuc3Ag IT0gTlVMTCB8fCByaWQtPnBhcnRyZWwgPT0gTlVMTCk7CisJaWYgKHJpZC0+cGFydG5zcCAhPSBO VUxMICYmIHRhcmdldC0+cmlkLnBhcnRuc3AgIT0gTlVMTCAmJgorCQlzdHJjbXAocmlkLT5wYXJ0 bnNwLCB0YXJnZXQtPnJpZC5wYXJ0bnNwKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgor CSAqIFRoZXNlIGZpZWxkcyBjYW4gYmUgTlVMTCBvbiBlaXRoZXIgc2lkZSwgYnV0IE5VTEwgb25s eSBtYXRjaGVzIGFub3RoZXIKKwkgKiBOVUxMLgorCSAqLworCWlmICghc3RyaW5nc19lcXVhbF9v cl9ib3RoX251bGwocmlkLT5wYXJ0cmVsLCB0YXJnZXQtPnJpZC5wYXJ0cmVsKSkKKwkJcmV0dXJu IGZhbHNlOworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wbGFuX25hbWUs IHRhcmdldC0+cmlkLnBsYW5fbmFtZSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVl OworfQorCisvKgorICogTWF0Y2ggaWRlbnRpZmllcnMgdG8gYWR2aWNlIHRhcmdldHMgYW5kIHJl dHVybiBhbiBlbnVtIHZhbHVlIGluZGljYXRpbmcKKyAqIHRoZSByZWxhdGlvbnNoaXAgYmV0d2Vl biB0aGUgc2V0IG9mIGtleXMgYW5kIHRoZSBzZXQgb2YgdGFyZ2V0cy4KKyAqCisgKiBTZWUgdGhl IGNvbW1lbnRzIGZvciBwZ3BhX2l0bV90eXBlLgorICovCitwZ3BhX2l0bV90eXBlCitwZ3BhX2lk ZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywK KwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCWJvb2wJCWFsbF9yaWRz X3VzZWQgPSB0cnVlOworCWJvb2wJCWFueV9yaWRzX3VzZWQgPSBmYWxzZTsKKwlib29sCQlhbGxf dGFyZ2V0c191c2VkOworCWJvb2wJICAgKnJpZHNfdXNlZCA9IHBhbGxvYzBfYXJyYXkoYm9vbCwg bnJpZHMpOworCisJYWxsX3RhcmdldHNfdXNlZCA9CisJCXBncGFfaWRlbnRpZmllcnNfY292ZXJf dGFyZ2V0KG5yaWRzLCByaWRzLCB0YXJnZXQsIHJpZHNfdXNlZCk7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IG5yaWRzOyArK2kpCisJeworCQlpZiAocmlkc191c2VkW2ldKQorCQkJYW55X3JpZHNf dXNlZCA9IHRydWU7CisJCWVsc2UKKwkJCWFsbF9yaWRzX3VzZWQgPSBmYWxzZTsKKwl9CisKKwlp ZiAoYWxsX3JpZHNfdXNlZCkKKwl7CisJCWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJcmV0dXJu IFBHUEFfSVRNX0VRVUFMOworCQllbHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fS0VZU19BUkVfU1VC U0VUOworCX0KKwllbHNlCisJeworCQlpZiAoYWxsX3RhcmdldHNfdXNlZCkKKwkJCXJldHVybiBQ R1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQ7CisJCWVsc2UgaWYgKGFueV9yaWRzX3VzZWQpCisJ CQlyZXR1cm4gUEdQQV9JVE1fSU5URVJTRUNUSU5HOworCQllbHNlCisJCQlyZXR1cm4gUEdQQV9J VE1fRElTSk9JTlQ7CisJfQorfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IHRhcmdl dCBvciBzdWItdGFyZ2V0IGlzIG1hdGNoZWQgYnkgYXQgbGVhc3Qgb25lCisgKiBpZGVudGlmaWVy LCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgorICoKKyAqIEFsc28gc2V0cyByaWRzX3VzZWRbaV0gPSB0 cnVlIGZvciBlYWNoIGlkZW5pZmllciB0aGF0IG1hdGNoZXMgYXQgbGVhc3Qgb25lCisgKiB0YXJn ZXQuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQg bnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3Rhcmdl dCAqdGFyZ2V0LCBib29sICpyaWRzX3VzZWQpCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisK KwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJcmVz dWx0ID0gdHJ1ZTsKKworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3Rh cmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKCFwZ3BhX2lkZW50aWZpZXJzX2Nv dmVyX3RhcmdldChucmlkcywgcmlkcywgY2hpbGRfdGFyZ2V0LAorCQkJCQkJCQkJCQkgICByaWRz X3VzZWQpKQorCQkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZvciAo aW50IGkgPSAwOyBpIDwgbnJpZHM7ICsraSkKKwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9t YXRjaGVzX3RhcmdldCgmcmlkc1tpXSwgdGFyZ2V0KSkKKwkJCXsKKwkJCQlyaWRzX3VzZWRbaV0g PSB0cnVlOworCQkJCXJlc3VsdCA9IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmVz dWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5mNmZlNzMwYTRkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaApAQCAtMCwwICsxLDIwNCBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogcGdwYV9hc3QuaAorICoJICBhYnN0cmFjdCBzeW50YXggdHJlZXMgZm9y IHBsYW4gYWR2aWNlLCBwbHVzIHBhcnNlci9zY2FubmVyIHN1cHBvcnQKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAorICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfQVNUX0gKKyNkZWZpbmUgUEdQQV9BU1RfSAorCisj aW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0Lmgi CisKKy8qCisgKiBBZHZpY2UgaXRlbXMgZ2VuZXJhbGx5IHRha2UgdGhlIGZvcm0gU09NRV9UQUco aXRlbSBbLi4uXSksIHdoZXJlIGFuIGl0ZW0KKyAqIGNhbiB0YWtlIHZhcmlvdXMgZm9ybXMuIFRo ZSBzaW1wbGVzdCBjYXNlIGlzIGEgcmVsYXRpb24gaWRlbnRpZmllciwgYnV0CisgKiBzb21lIHRh Z3MgYWxsb3cgc3VibGlzdHMsIGFuZCBKT0lOX09SREVSKCkgYWxsb3dzIGJvdGggb3JkZXJlZCBh bmQgdW5vcmRlcmVkCisgKiBzdWJsaXN0cy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9U QVJHRVRfSURFTlRJRklFUiwJCS8qIHJlbGF0aW9uIGlkZW50aWZpZXIgKi8KKwlQR1BBX1RBUkdF VF9PUkRFUkVEX0xJU1QsCS8qIChpdGVtIC4uLikgKi8KKwlQR1BBX1RBUkdFVF9VTk9SREVSRURf TElTVAkvKiB7aXRlbSAuLi59ICovCit9IHBncGFfdGFyZ2V0X3R5cGU7CisKKy8qCisgKiBXaGVu IGFuIGFkdmljZSBpdGVtIGRlc2NyaWJlcyBhIGJpdG1hcCBpbmRleCBzY2FuLCBpdCBtYXkgbmVl ZCB0byBkZXNjcmliZQorICogdGhlIHVzZSBvZiBtdWx0aXBsZSBpbmRleGVzLgorICovCit0eXBl ZGVmIGVudW0KK3sKKwlQR1BBX0lOREVYX05BTUUsCQkJLyogaW5kZXggc2NoZW1hICsgbmFtZSAq LworCVBHUEFfSU5ERVhfQU5ELAkJCQkvKiAmJihpdGVtIC4uLikgKi8KKwlQR1BBX0lOREVYX09S CQkJCS8qIHx8KGl0ZW0gLi4uKSAqLworfSBwZ3BhX2luZGV4X3R5cGU7CisKKy8qCisgKiBBbiBp bmRleCBzcGVjaWZpY2F0aW9uLiBXZSB1c2UgdGhpcyBmb3IgSU5ERVhfU0NBTiwgSU5ERVhfT05M WV9TQ0FOLAorICogYW5kIEJJVE1BUF9IRUFQX1NDQU4gYWR2aWNlLCBidXQgaW4gdGhlIGZvcm1l ciB0d28gY2FzZXMsIHRoZSB0YXJnZXQgbXVzdAorICogYmUgb2YgdHlwZSBQR1BBX0lOREVYX05B TUUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfaW5kZXhfdGFyZ2V0Cit7CisJcGdwYV9pbmRl eF90eXBlIGl0eXBlOworCisJLyogSW5kZXggc2NoZW0gYW5kIG5hbWUsIHdoZW4gaXR5cGUgPT0g UEdQQV9JTkRFWF9OQU1FICovCisJY2hhcgkgICAqaW5kbmFtZXNwYWNlOworCWNoYXIJICAgKmlu ZG5hbWU7CisKKwkvKiBMaXN0IG9mIHBncGFfaW5kZXhfdGFyZ2V0IG9iamVjdHMsIHdoZW4gaXR5 cGUgIT0gUEdQQV9JTkRFWF9OQU1FICovCisJTGlzdAkgICAqY2hpbGRyZW47Cit9IHBncGFfaW5k ZXhfdGFyZ2V0OworCisvKgorICogQSBzaW5nbGUgaXRlbSBhYm91dCB3aGljaCBhZHZpY2UgaXMg YmVpbmcgZ2l2ZW4sIHdoaWNoIGNvdWxkIGJlIGVpdGhlcgorICogYSByZWxhdGlvbiBpZGVudGlm aWVyIHRoYXQgd2Ugd2FudCB0byBicmVhayBvdXQgaW50byBpdHMgY29uc3RpdHVlbnQgZmllbGRz LAorICogb3IgYSBzdWJsaXN0IG9mIHNvbWUga2luZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdw YV9hZHZpY2VfdGFyZ2V0Cit7CisJcGdwYV90YXJnZXRfdHlwZSB0dHlwZTsKKworCS8qCisJICog VGhpcyBmaWVsZCBpcyBtZWFuaW5nZnVsIHdoZW4gdHR5cGUgaXMgUEdQQV9UQVJHRVRfSURFTlRJ RklFUi4KKwkgKgorCSAqIEFsbCBpZGVudGlmaWVycyBtdXN0IGhhdmUgYW4gYWxpYXMgbmFtZSBh bmQgYW4gb2NjdXJyZW5jZSBudW1iZXI7IHRoZQorCSAqIHJlbWFpbmluZyBmaWVsZHMgY2FuIGJl IE5VTEwuIE5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIHNwZWNpZnkgYQorCSAqIHBhcnRpdGlv biBuYW1lIHdpdGhvdXQgYSBwYXJ0aXRpb24gc2NoZW1hLCBidXQgbm90IHRoZSByZXZlcnNlLgor CSAqLworCXBncGFfaWRlbnRpZmllciByaWQ7CisKKwkvKgorCSAqIFRoaXMgZmllbGQgaXMgc2V0 IHdoZW4gdHR5cGUgaXMgUFBHQV9UQVJHRVRfSURFTlRJRklFUiBhbmQgdGhlIGFkdmljZQorCSAq IHRhZyBpcyBQR1BBX1RBR19JTkRFWF9TQ0FOLCBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4sIG9y CisJICogUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTi4KKwkgKi8KKwlwZ3BhX2luZGV4X3Rhcmdl dCAqaXRhcmdldDsKKworCS8qCisJICogV2hlbiB0aGUgdHR5cGUgaXMgUEdQQV9UQVJHRVRfPGFu eXRoaW5nPl9MSVNULCB0aGlzIGZpZWxkIGNvbnRhaW5zIGEKKwkgKiBsaXN0IG9mIGFkZGl0aW9u YWwgcGdwYV9hZHZpY2VfdGFyZ2V0IG9iamVjdHMuIE90aGVyd2lzZSwgaXQgaXMgdW51c2VkLgor CSAqLworCUxpc3QJICAgKmNoaWxkcmVuOworfSBwZ3BhX2FkdmljZV90YXJnZXQ7CisKKy8qCisg KiBUaGVzZSBhcmUgYWxsIHRoZSBraW5kcyBvZiBhZHZpY2UgdGhhdCB3ZSBrbm93IGhvdyB0byBw YXJzZS4gSWYgYSBrZXl3b3JkCisgKiBpcyBmb3VuZCBhdCB0aGUgdG9wIGxldmVsLCBpdCBtdXN0 IGJlIGluIHRoaXMgbGlzdC4KKyAqCisgKiBJZiB5b3UgY2hhbmdlIGFueXRoaW5nIGhlcmUsIGFs c28gdXBkYXRlIHBncGFfcGFyc2VfYWR2aWNlX3RhZyBhbmQKKyAqIHBncGFfY3N0cmluZ19hZHZp Y2VfdGFnLgorICovCit0eXBlZGVmIGVudW0gcGdwYV9hZHZpY2VfdGFnX3R5cGUKK3sKKwlQR1BB X1RBR19CSVRNQVBfSEVBUF9TQ0FOLAorCVBHUEFfVEFHX0ZPUkVJR05fSk9JTiwKKwlQR1BBX1RB R19HQVRIRVIsCisJUEdQQV9UQUdfR0FUSEVSX01FUkdFLAorCVBHUEFfVEFHX0hBU0hfSk9JTiwK KwlQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4sCisJUEdQQV9UQUdfSU5ERVhfU0NBTiwKKwlQR1BB X1RBR19KT0lOX09SREVSLAorCVBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkUsCisJUEdQ QV9UQUdfTUVSR0VfSk9JTl9QTEFJTiwKKwlQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTEla RSwKKwlQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFLAorCVBHUEFfVEFHX05FU1RFRF9MT09Q X1BMQUlOLAorCVBHUEFfVEFHX05PX0dBVEhFUiwKKwlQR1BBX1RBR19QQVJUSVRJT05XSVNFLAor CVBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUsCisJUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVF LAorCVBHUEFfVEFHX1NFUV9TQ0FOLAorCVBHUEFfVEFHX1RJRF9TQ0FOCit9IHBncGFfYWR2aWNl X3RhZ190eXBlOworCisvKgorICogQW4gaXRlbSBvZiBhZHZpY2UsIG1lYW5pbmcgYSB0YWcgYW5k IHRoZSBsaXN0IG9mIGFsbCB0YXJnZXRzIHRvIHdoaWNoCisgKiBpdCBpcyBiZWluZyBhcHBsaWVk LgorICoKKyAqICJ0YXJnZXRzIiBpcyBhIGxpc3Qgb2YgcGdwYV9hZHZpY2VfdGFyZ2V0IG9iamVj dHMuCisgKgorICogVGhlIExpc3QgcmV0dXJuZWQgZnJvbSBwZ3BhX3l5cGFyc2UgaXMgbGlzdCBv ZiBwZ3BhX2FkdmljZV9pdGVtIG9iamVjdHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfYWR2 aWNlX2l0ZW0KK3sKKwlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWc7CisJTGlzdAkgICAqdGFyZ2V0 czsKK30gcGdwYV9hZHZpY2VfaXRlbTsKKworLyoKKyAqIFJlc3VsdCBvZiBjb21wYXJpbmcgYW4g YXJyYXkgb2YgcGdwYV9yZWxhdGlvbl9pZGVudGlmaWVyIG9iamVjdHMgdG8gYQorICogcGdwYV9h ZHZpY2VfdGFyZ2V0LgorICoKKyAqIFBHUEFfSVRNX0VRVUFMIG1lYW5zIGFsbCB0YXJnZXRzIGFy ZSBtYXRjaGVkIGJ5IHNvbWUgaWRlbnRpZmllciwgYW5kCisgKiBhbGwgaWRlbnRpZmllcnMgd2Vy ZSBtYXRjaGVkIHRvIGEgdGFyZ2V0LgorICoKKyAqIFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCBt ZWFucyB0aGF0IGFsbCBpZGVudGlmaWVycyBtYXRjaGVkIHRvIGEgdGFyZ2V0LAorICogYnV0IHRo ZXJlIHdlcmUgbGVmdG92ZXIgdGFyZ2V0cy4gR2VuZXJhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhl IGFkdmljZSBpcworICogbG9va2luZyB0byBhcHBseSB0byBhbGwgb2YgdGhlIHJlbHMgd2UgaGF2 ZSBwbHVzIHNvbWUgYWRkaXRpb25hbCBvbmVzIHRoYXQKKyAqIHdlIGRvbid0IGhhdmUuCisgKgor ICogUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUIG1lYW5zIHRoYXQgYWxsIHRhcmdldHMgYXJl IG1hdGNoZWQgYnkgYW4KKyAqIGlkZW50aWZpZXJzLCBidXQgdGhlcmUgd2VyZSBsZWZ0b3ZlciBp ZGVudGlmaWVycy4gR2VuZXJhbGx5LCB0aGlzIG1lYW5zCisgKiB0aGF0IHRoZSBhZHZpY2UgaXMg bG9va2luZyB0byBhcHBseSB0byBzb21lIGJ1dCBub3QgYWxsIG9mIHRoZSByZWxzIHdlIGhhdmUu CisgKgorICogUEdQQV9JVE1fSU5URVJTRUNUSU5HIG1lYW5zIHRoYXQgc29tZSBpZGVudGlmZWly cyBhbmQgdGFyZ2V0cyB3ZXJlIG1hdGNoZWQsCisgKiBidXQgbmVpdGhlciBhbGwgaWRlbnRpZmll cnMgbm9yIGFsbCB0YXJnZXRzIGNvdWxkIGJlIG1hdGNoZWQgdG8gaXRlbXMgaW4KKyAqIHRoZSBv dGhlciBzZXQuCisgKgorICogUEdQQV9JVE1fRElTSk9JTlQgbWVhbnMgdGhhdCBubyBtYXRjaGVz IGJldHdlZW4gaWRlbnRpZmVpcnMgYW5kIHRhcmdldHMgd2VyZQorICogZm91bmQuCisgKi8KK3R5 cGVkZWYgZW51bQoreworCVBHUEFfSVRNX0VRVUFMLAorCVBHUEFfSVRNX0tFWVNfQVJFX1NVQlNF VCwKKwlQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQsCisJUEdQQV9JVE1fSU5URVJTRUNUSU5H LAorCVBHUEFfSVRNX0RJU0pPSU5UCit9IHBncGFfaXRtX3R5cGU7CisKKy8qIGZvciBwZ3BhX3Nj YW5uZXIubCBhbmQgcGdwYV9wYXJzZXIueSAqLwordW5pb24gWVlTVFlQRTsKKyNpZm5kZWYgWVlf VFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5 cGVkZWYgdm9pZCAqeXlzY2FuX3Q7CisjZW5kaWYKKworLyogaW4gcGdwYV9zY2FubmVyLmwgKi8K K2V4dGVybiBpbnQJcGdwYV95eWxleCh1bmlvbiBZWVNUWVBFICp5eWx2YWxfcGFyYW0sIExpc3Qg KipyZXN1bHQsCisJCQkJCSAgIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlz Y2FubmVyKTsKK2V4dGVybiB2b2lkIHBncGFfeXllcnJvcihMaXN0ICoqcmVzdWx0LCBjaGFyICoq cGFyc2VfZXJyb3JfbXNnX3AsCisJCQkJCQkgeXlzY2FuX3QgeXlzY2FubmVyLAorCQkJCQkJIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgcGdwYV9zY2FubmVyX2luaXQoY29uc3Qg Y2hhciAqc3RyLCB5eXNjYW5fdCAqeXlzY2FubmVycCk7CitleHRlcm4gdm9pZCBwZ3BhX3NjYW5u ZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nhbm5lcik7CisKKy8qIGluIHBncGFfcGFyc2VyLnkgKi8K K2V4dGVybiBpbnQJcGdwYV95eXBhcnNlKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJv cl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5fdCB5eXNjYW5uZXIpOworZXh0ZXJuIExpc3QgKnBncGFf cGFyc2UoY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywgY2hhciAqKmVycm9yX3ApOworCisvKiBp biBwZ3BhX2FzdC5jICovCitleHRlcm4gY2hhciAqcGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdw YV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3RhZyk7CitleHRlcm4gYm9vbCBwZ3BhX2lkZW50aWZp ZXJfbWF0Y2hlc190YXJnZXQocGdwYV9pZGVudGlmaWVyICpyaWQsCisJCQkJCQkJCQkJICAgcGdw YV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHBncGFfaXRtX3R5cGUgcGdwYV9pZGVu dGlmaWVyc19tYXRjaF90YXJnZXQoaW50IG5yaWRzLAorCQkJCQkJCQkJCQkJICAgcGdwYV9pZGVu dGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQp OworZXh0ZXJuIGJvb2wgcGdwYV9pbmRleF90YXJnZXRzX2VxdWFsKHBncGFfaW5kZXhfdGFyZ2V0 ICppMSwKKwkJCQkJCQkJCSBwZ3BhX2luZGV4X3RhcmdldCAqaTIpOworZXh0ZXJuIHBncGFfYWR2 aWNlX3RhZ190eXBlIHBncGFfcGFyc2VfYWR2aWNlX3RhZyhjb25zdCBjaGFyICp0YWcsIGJvb2wg KmZhaWwpOworZXh0ZXJuIHZvaWQgcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChTdHJpbmdJbmZv IHN0ciwKKwkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHZv aWQgcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLAorCQkJCQkJCQkJIHBn cGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfY29sbGVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjdhNDViNTAzMWZlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2NvbGxlY3Rvci5jCkBAIC0wLDAgKzEsNjM3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBwZ3BhX2NvbGxlY3Rvci5jCisgKgkgIGNvbGxlY3QgYWR2aWNlIGludG8gYmFja2VuZC1s b2NhbCBvciBzaGFyZWQgbWVtb3J5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisj aW5jbHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKworI2luY2x1ZGUgImRhdGF0eXBlL3RpbWVzdGFt cC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNs dWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKworUEdfRlVO Q1RJT05fSU5GT19WMShwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZVTkNU SU9OX0lORk9fVjEocGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UpOworUEdfRlVOQ1RJ T05fSU5GT19WMShwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSk7CitQR19GVU5DVElPTl9J TkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSk7CisKKyNkZWZpbmUgQURWSUNF X0NIVU5LX1NJWkUJCTEwMjQKKyNkZWZpbmUgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkUJNjQKKwor I2RlZmluZQlQR19HRVRfQURWSUNFX0NPTFVNTlMJNworCisvKgorICogQWR2aWNlIGV4dHJhY3Rl ZCBmcm9tIG9uZSBxdWVyeSBwbGFuLCB0b2dldGhlciB3aXRoIHRoZSBxdWVyeSBzdHJpbmcKKyAq IGFuZCB2YXJpb3VzIG90aGVyIGlkZW50aWZ5aW5nIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IHBncGFfY29sbGVjdGVkX2FkdmljZQoreworCU9pZAkJCXVzZXJpZDsJCQkvKiB1c2VyIE9J RCAqLworCU9pZAkJCWRiaWQ7CQkJLyogZGF0YWJhc2UgT0lEICovCisJdWludDY0CQlxdWVyeWlk OwkJLyogcXVlcnkgaWRlbnRpZmllciAqLworCVRpbWVzdGFtcFR6IHRpbWVzdGFtcDsJCS8qIHF1 ZXJ5IHRpbWVzdGFtcCAqLworCWludAkJCWFkdmljZV9vZmZzZXQ7CS8qIHN0YXJ0IG9mIGFkdmlj ZSBpbiB0ZXh0dWFsIGRhdGEgKi8KKwljaGFyCQl0ZXh0dWFsX2RhdGFbRkxFWElCTEVfQVJSQVlf TUVNQkVSXTsKK30gcGdwYV9jb2xsZWN0ZWRfYWR2aWNlOworCisvKgorICogQSBidW5jaCBvZiBw b2ludGVycyB0byBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0cywgc3RvcmVkIGluCisgKiBi YWNrZW5kLWxvY2FsIG1lbW9yeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9sb2NhbF9hZHZp Y2VfY2h1bmsKK3sKKwlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmVudHJpZXNbQURWSUNFX0NIVU5L X1NJWkVdOworfSBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuazsKKworLyoKKyAqIEluZm9ybWF0aW9u IGFib3V0IGFsbCBvZiB0aGUgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdHMgdGhhdCB3ZSdy ZQorICogc3RvcmluZyBpbiBsb2NhbCBtZW1vcnkuCisgKgorICogV2UgYXNzaWduIGNvbnNlY3V0 aXZlIElEcywgc3RhcnRpbmcgZnJvbSAwLCB0byBlYWNoIHBncGFfY29sbGVjdGVkX2FkdmljZQor ICogb2JqZWN0IHRoYXQgd2Ugc3RvcmUuIFRoZSBhY3R1YWwgc3RvcmFnZSBpcyBhbiBhcnJheSBv ZiBjaHVua3MsIHdoaWNoCisgKiBoZWxwcyBrZWVwIG1lbWNweSgpIG92ZXJoZWFkIGxvdyB3aGVu IHdlIHN0YXJ0IGRpc2NhcmRpbmcgb2xkZXIgZGF0YS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdw YV9sb2NhbF9hZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7 CisJdWludDY0CQliYXNlX2lkOworCWludAkJCWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplOwor CXBncGFfbG9jYWxfYWR2aWNlX2NodW5rICoqY2h1bmtzOworfSBwZ3BhX2xvY2FsX2FkdmljZTsK KworLyoKKyAqIEp1c3QgbGlrZSBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuaywgYnV0IHN0b3JlZCBp biBhIGR5bmFtaWMgc2hhcmVkIGFyZWEsCisgKiBzbyB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRlciBp bnN0ZWFkIG9mIG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFy ZWRfYWR2aWNlX2NodW5rCit7CisJZHNhX3BvaW50ZXIgZW50cmllc1tBRFZJQ0VfQ0hVTktfU0la RV07Cit9IHBncGFfc2hhcmVkX2FkdmljZV9jaHVuazsKKworLyoKKyAqIEp1c3QgbGlrZSBwZ3Bh X2xvY2FsX2FkdmljZSwgYnV0IHN0b3JlZCBpbiBhIGR5bmFtaWMgc2hhcmVkIGFyZWEsIHNvCisg KiB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9mIG5hdGl2ZSBwb2ludGVycy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfYWR2aWNlCit7CisJdWludDY0CQluZXh0X2lk OworCXVpbnQ2NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFzZV9pZDsKKwlpbnQJCQljaHVua19h cnJheV9hbGxvY2F0ZWRfc2l6ZTsKKwlkc2FfcG9pbnRlciBjaHVua3M7Cit9IHBncGFfc2hhcmVk X2FkdmljZTsKKworLyogUG9pbnRlcnMgdG8gbG9jYWwgYW5kIHNoYXJlZCBjb2xsZWN0b3JzICov CitzdGF0aWMgcGdwYV9sb2NhbF9hZHZpY2UgKmxvY2FsX2NvbGxlY3RvciA9IE5VTEw7CitzdGF0 aWMgcGdwYV9zaGFyZWRfYWR2aWNlICpzaGFyZWRfY29sbGVjdG9yID0gTlVMTDsKKworLyogU3Rh dGljIGZ1bmN0aW9ucyAqLworc3RhdGljIHBncGFfY29sbGVjdGVkX2FkdmljZSAqcGdwYV9tYWtl X2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVzZXJpZCwKKwkJCQkJCQkJCQkJCQkJIE9pZCBkYmlkLAor CQkJCQkJCQkJCQkJCQkgdWludDY0IHF1ZXJ5SWQsCisJCQkJCQkJCQkJCQkJCSBUaW1lc3RhbXBU eiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJ CQkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkJCQkJCQkg ZHNhX2FyZWEgKmFyZWEsCisJCQkJCQkJCQkJCQkJCSBkc2FfcG9pbnRlciAqcmVzdWx0KTsKK3N0 YXRpYyB2b2lkIHBncGFfc3RvcmVfbG9jYWxfYWR2aWNlKHBncGFfY29sbGVjdGVkX2FkdmljZSAq Y2EpOworc3RhdGljIHZvaWQgcGdwYV90cmltX2xvY2FsX2FkdmljZShpbnQgbGltaXQpOworc3Rh dGljIHZvaWQgcGdwYV9zdG9yZV9zaGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIp Oworc3RhdGljIHZvaWQgcGdwYV90cmltX3NoYXJlZF9hZHZpY2UoZHNhX2FyZWEgKmFyZWEsIGlu dCBsaW1pdCk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBxdWVyeSBzdHJp bmcgZnJvbSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hh ciAqCitxdWVyeV9zdHJpbmcocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwlyZXR1cm4g Y2EtPnRleHR1YWxfZGF0YTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhl IGFkdmljZSBzdHJpbmcgZnJvbSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKi8KK3N0YXRpYyBpbmxp bmUgY29uc3QgY2hhciAqCithZHZpY2Vfc3RyaW5nKHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2Ep Cit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGEgKyBjYS0+YWR2aWNlX29mZnNldDsKK30KKwor LyoKKyAqIFN0b3JlIGNvbGxlY3RlZCBxdWVyeSBhZHZpY2UgaW50byB0aGUgbG9jYWwgb3Igc2hh cmVkIGFkdmljZSBjb2xsZWN0b3IsCisgKiBhcyBhcHByb3ByaWF0ZS4KKyAqLwordm9pZAorcGdw YV9jb2xsZWN0X2FkdmljZSh1aW50NjQgcXVlcnlJZCwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5n LAorCQkJCQljb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKQoreworCU9pZAkJCXVzZXJpZCA9IEdl dFVzZXJJZCgpOworCU9pZAkJCWRiaWQgPSBNeURhdGFiYXNlSWQ7CisJVGltZXN0YW1wVHogbm93 ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJaWYgKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2Nv bGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQoKSk7CisJCWNhID0gcGdwYV9tYWtlX2Nv bGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJCQkJCQkJCQkJcXVl cnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCQlwZ3Bh X3N0b3JlX2xvY2FsX2FkdmljZShjYSk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKKwl9CisKKwlpZiAocGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQg PiAwKQorCXsKKwkJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7 CisJCWRzYV9wb2ludGVyIGNhX3BvaW50ZXIgPSBJbnZhbGlkRHNhUG9pbnRlcjsgLyogcGxhY2F0 ZSBjb21waWxlciAqLworCisJCXBncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKHVzZXJpZCwgZGJp ZCwgcXVlcnlJZCwgbm93LAorCQkJCQkJCQkgICBxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJpbmcs IGFyZWEsCisJCQkJCQkJCSAgICZjYV9wb2ludGVyKTsKKwkJcGdwYV9zdG9yZV9zaGFyZWRfYWR2 aWNlKGNhX3BvaW50ZXIpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmaWxsIGEgbmV3 IHBncGFfY29sbGVjdGVkX2FkdmljZSBvYmplY3QuCisgKgorICogSWYgYXJlYSAhPSBOVUxMLCBp dCBpcyB1c2VkIHRvIGFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0LCBhbmQgdGhlIHJlc3VsdGluZwor ICogZHNhX3BvaW50ZXIgaXMgcmV0dXJuZWQgdmlhICpyZXN1bHQuCisgKgorICogSWYgYXJlYSA9 PSBOVUxMLCB0aGUgbmV3IG9iamVjdCBpcyBhbGxvY2F0ZWQgaW4gdGhlIGN1cnJlbnQgbWVtb3J5 IGNvbnRleHQsCisgKiBhbmQgcmVzdWx0IGlzIG5vdCBleGFtaW5lZCBvciBtb2RpZmllZC4KKyAq Lworc3RhdGljIHBncGFfY29sbGVjdGVkX2FkdmljZSAqCitwZ3BhX21ha2VfY29sbGVjdGVkX2Fk dmljZShPaWQgdXNlcmlkLCBPaWQgZGJpZCwgdWludDY0IHF1ZXJ5SWQsCisJCQkJCQkgICBUaW1l c3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkgICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJ CQkJCQkgICBjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLAorCQkJCQkJICAgZHNhX2FyZWEgKmFy ZWEsIGRzYV9wb2ludGVyICpyZXN1bHQpCit7CisJc2l6ZV90CQlxdWVyeV9zdHJpbmdfbGVuZ3Ro ID0gc3RybGVuKHF1ZXJ5X3N0cmluZykgKyAxOworCXNpemVfdAkJYWR2aWNlX3N0cmluZ19sZW5n dGggPSBzdHJsZW4oYWR2aWNlX3N0cmluZykgKyAxOworCXNpemVfdAkJdG90YWxfbGVuZ3RoOwor CXBncGFfY29sbGVjdGVkX2FkdmljZSAqY2E7CisKKwl0b3RhbF9sZW5ndGggPSBvZmZzZXRvZihw Z3BhX2NvbGxlY3RlZF9hZHZpY2UsIHRleHR1YWxfZGF0YSkKKwkJKyBxdWVyeV9zdHJpbmdfbGVu Z3RoICsgYWR2aWNlX3N0cmluZ19sZW5ndGg7CisKKwlpZiAoYXJlYSA9PSBOVUxMKQorCQljYSA9 IHBhbGxvYyh0b3RhbF9sZW5ndGgpOworCWVsc2UKKwl7CisJCSpyZXN1bHQgPSBkc2FfYWxsb2Nh dGUoYXJlYSwgdG90YWxfbGVuZ3RoKTsKKwkJY2EgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgKnJl c3VsdCk7CisJfQorCisJY2EtPnVzZXJpZCA9IEdldFVzZXJJZCgpOworCWNhLT5kYmlkID0gTXlE YXRhYmFzZUlkOworCWNhLT5xdWVyeWlkID0gcXVlcnlJZDsKKwljYS0+dGltZXN0YW1wID0gdGlt ZXN0YW1wOworCWNhLT5hZHZpY2Vfb2Zmc2V0ID0gcXVlcnlfc3RyaW5nX2xlbmd0aDsKKworCW1l bWNweShjYS0+dGV4dHVhbF9kYXRhLCBxdWVyeV9zdHJpbmcsIHF1ZXJ5X3N0cmluZ19sZW5ndGgp OworCW1lbWNweSgmY2EtPnRleHR1YWxfZGF0YVtjYS0+YWR2aWNlX29mZnNldF0sCisJCSAgIGFk dmljZV9zdHJpbmcsIGFkdmljZV9zdHJpbmdfbGVuZ3RoKTsKKworCXJldHVybiBjYTsKK30KKwor LyoKKyAqIEFkZCBhIHBnX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0IHRvIG91ciBiYWNrZW5kLWxv Y2FsIGFkdmljZSBjb2xsZWN0aW9uLgorICoKKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Ig c3dpdGNoaW5nIHRvIHRoZSBhcHByb3ByaWF0ZSBtZW1vcnkgY29udGV4dDsKKyAqIHRoZSBwcm92 aWRlZCBvYmplY3Qgc2hvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gdGhhdCBzYW1lIGNvbnRl eHQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3N0b3JlX2xvY2FsX2FkdmljZShwZ3BhX2NvbGxl Y3RlZF9hZHZpY2UgKmNhKQoreworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCXVpbnQ2NAkJY2h1 bmtfb2Zmc2V0OworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwor CS8qIElmIHRoZSBsb2NhbCBhZHZpY2UgY29sbGVjdG9yIGlzbid0IGluaXRpYWxpemVkIHlldCwg ZG8gdGhhdCBub3cuICovCisJaWYgKGxhID09IE5VTEwpCisJeworCQlsYSA9IHBhbGxvYzAoc2l6 ZW9mKHBncGFfbG9jYWxfYWR2aWNlKSk7CisJCWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6 ZSA9IEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQlsYS0+Y2h1bmtzID0gcGFsbG9jMF9hcnJh eShwZ3BhX2xvY2FsX2FkdmljZV9jaHVuayAqLAorCQkJCQkJCQkgICBsYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUpOworCQlsb2NhbF9jb2xsZWN0b3IgPSBsYTsKKwl9CisKKwkvKiBDb21w dXRlIGNodW5rIGFuZCBvZmZzZXQgYXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJ Y2h1bmtfbnVtYmVyID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5L X1NJWkU7CisJY2h1bmtfb2Zmc2V0ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURW SUNFX0NIVU5LX1NJWkU7CisKKwkvKiBFeHRlbmQgY2h1bmsgYXJyYXksIGlmIG5lZWRlZC4gKi8K KwlpZiAoY2h1bmtfbnVtYmVyID49IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7 CisJCWludAkJCW5ld19zaXplOworCisJCW5ld19zaXplID0gbGEtPmNodW5rX2FycmF5X2FsbG9j YXRlZF9zaXplICsgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJCWxhLT5jaHVua3MgPSByZXBh bGxvYzBfYXJyYXkobGEtPmNodW5rcywKKwkJCQkJCQkJCSBwZ3BhX2xvY2FsX2FkdmljZV9jaHVu ayAqLAorCQkJCQkJCQkJIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSwKKwkJCQkJCQkJ CSBuZXdfc2l6ZSk7CisJCWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IG5ld19zaXpl OworCX0KKworCS8qIEFsbG9jYXRlIG5ldyBjaHVuaywgaWYgbmVlZGVkLiAqLworCWlmIChsYS0+ Y2h1bmtzW2NodW5rX251bWJlcl0gPT0gTlVMTCkKKwkJbGEtPmNodW5rc1tjaHVua19udW1iZXJd ID0gcGFsbG9jMF9vYmplY3QocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmspOworCisJLyogU2F2ZSBw b2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQobGEtPmNodW5rc1tj aHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPT0gTlVMTCk7CisJbGEtPmNodW5r c1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYTsKKwkrK2xhLT5uZXh0 X2lkOworCisJLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQg b2xkIGRhdGEuICovCisJcGdwYV90cmltX2xvY2FsX2FkdmljZShwZ19wbGFuX2FkdmljZV9sb2Nh bF9jb2xsZWN0aW9uX2xpbWl0KTsKK30KKworLyoKKyAqIEFkZCBhIHBnX2NvbGxlY3RlZF9hZHZp Y2Ugb2JqZWN0IHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rpb24uCisgKgorICogJ2NhX3Bv aW50ZXInIHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gdGhlIHBnX3BsYW5fYWR2aWNl IERTQSBhcmVhCisgKiBhbmQgc2hvdWxkIHBvaW50IHRvIGFuIG9iamVjdCBvZiB0eXBlIHBncGFf Y29sbGVjdGVkX2FkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfc3RvcmVfc2hhcmVkX2Fk dmljZShkc2FfcG9pbnRlciBjYV9wb2ludGVyKQoreworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOwor CXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3Bs YW5fYWR2aWNlX2F0dGFjaCgpOworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9k c2FfYXJlYSgpOworCXBncGFfc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOwor CWRzYV9wb2ludGVyICpjaHVua19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNo dW5rOworCisJLyogTG9jayB0aGUgc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja0FjcXVpcmUoJnN0 YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNo ZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93LgorCSAq IElmIHdlJ3JlIHRoZSBmaXJzdCBvbmVzIHRvIGF0dGFjaCwgd2UgbWF5IG5lZWQgdG8gY3JlYXRl IHRoZSBvYmplY3QuCisJICovCisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNo YXJlZF9jb2xsZWN0b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCQlzdGF0ZS0+c2hhcmVkX2Nv bGxlY3RvciA9CisJCQkJZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdwYV9zaGFyZWRfYWR2 aWNlKSk7CisJCXNoYXJlZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBz dGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRo YXQgc29tZSBvdGhlciBiYWNrZW5kIG1heSBoYXZlIHN1Y2NlZWRlZCBpbiBjcmVhdGluZworCSAq IHRoZSBtYWluIGNvbGxlY3RvciBvYmplY3QgYnV0IGZhaWxlZCB0byBhbGxvY2F0ZSBhbiBpbml0 aWFsIGNodW5rCisJICogYXJyYXksIHNvIHdlIG11c3QgYmUgcHJlcGFyZWQgdG8gYWxsb2NhdGUg dGhlIGNodW5rIGFycmF5IGhlcmUgd2hldGhlcgorCSAqIG9yIG5vdCB3ZSBjcmVhdGVkIHRoZSBj b2xsZWN0b3Igb2JqZWN0LgorCSAqLworCWlmIChzaGFyZWRfY29sbGVjdG9yLT5jaHVua19hcnJh eV9hbGxvY2F0ZWRfc2l6ZSA9PSAwKQorCXsKKwkJc2EtPmNodW5rcyA9CisJCQlkc2FfYWxsb2Nh dGUwKGFyZWEsCisJCQkJCQkgIHNpemVvZihkc2FfcG9pbnRlcikgKiBBRFZJQ0VfQ0hVTktfQVJS QVlfU0laRSk7CisJCXNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IEFEVklDRV9DSFVO S19BUlJBWV9TSVpFOworCX0KKworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNldCBhdCB3aGlj aCB0byBzdG9yZSB0aGlzIGFkdmljZS4gKi8KKwljaHVua19udW1iZXIgPSAoc2EtPm5leHRfaWQg LSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZzZXQgPSAoc2Et Pm5leHRfaWQgLSBzYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCS8qIEdldCB0 aGUgYWRkcmVzcyBvZiB0aGUgY2h1bmsgYXJyYXkgYW5kLCBpZiBuZWVkZWQsIGV4dGVuZCBpdC4g Ki8KKwlpZiAoY2h1bmtfbnVtYmVyID49IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkK Kwl7CisJCWludAkJCW5ld19zaXplOworCQlkc2FfcG9pbnRlciBuZXdfY2h1bmtzOworCisJCS8q CisJCSAqIERTQSBjYW4ndCBlbmxhcmdlIGFuIGV4aXN0aW5nIGFsbG9jYXRpb24sIHNvIHdlIG11 c3QgbWFrZSBhIG5ldworCQkgKiBhbGxvY2F0aW9uIGFuZCBjb3B5IGRhdGEgb3Zlci4KKwkJICov CisJCW5ld19zaXplID0gc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplICsgQURWSUNFX0NI VU5LX0FSUkFZX1NJWkU7CisJCW5ld19jaHVua3MgPSBkc2FfYWxsb2NhdGUwKGFyZWEsIHNpemVv Zihkc2FfcG9pbnRlcikgKiBuZXdfc2l6ZSk7CisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRy ZXNzKGFyZWEsIG5ld19jaHVua3MpOworCQltZW1jcHkoY2h1bmtfYXJyYXksIGRzYV9nZXRfYWRk cmVzcyhhcmVhLCBzYS0+Y2h1bmtzKSwKKwkJCSAgIHNpemVvZihkc2FfcG9pbnRlcikgKiBzYS0+ Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUpOworCQlkc2FfZnJlZShhcmVhLCBzYS0+Y2h1bmtz KTsKKwkJc2EtPmNodW5rcyA9IG5ld19jaHVua3M7CisJCXNhLT5jaHVua19hcnJheV9hbGxvY2F0 ZWRfc2l6ZSA9IG5ld19zaXplOworCX0KKwllbHNlCisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9h ZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBk ZXNpcmVkIGNodW5rLCBhbGxvY2F0aW5nIGl0IGlmIG5lZWRlZC4gKi8KKwlpZiAoY2h1bmtfYXJy YXlbY2h1bmtfbnVtYmVyXSA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJY2h1bmtfYXJyYXlbY2h1 bmtfbnVtYmVyXSA9CisJCQlkc2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihwZ3BhX3NoYXJlZF9h ZHZpY2VfY2h1bmspKTsKKwljaHVuayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJh eVtjaHVua19udW1iZXJdKTsKKworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNv dW50ZXIuICovCisJQXNzZXJ0KGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPT0gSW52YWxp ZERzYVBvaW50ZXIpOworCWNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYV9wb2ludGVy OworCSsrc2EtPm5leHRfaWQ7CisKKwkvKiBJZiB3ZSd2ZSBleGNlZWRlZCB0aGUgc3RvcmFnZSBs aW1pdCwgZGlzY2FyZCBvbGQgZGF0YS4gKi8KKwlwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShhcmVh LCBwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCk7CisKKwkvKiBSZWxlYXNl IGxvY2sgb24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsK K30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFkdmljZSBzdG9yZWQgaW4gYmFja2VuZC1s b2NhbCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQorICogc3BlY2lmaWVkIGxpbWl0LgorICovCitz dGF0aWMgdm9pZAorcGdwYV90cmltX2xvY2FsX2FkdmljZShpbnQgbGltaXQpCit7CisJcGdwYV9s b2NhbF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCXVpbnQ2NAkJY3VycmVudF9jb3Vu dDsKKwl1aW50NjQJCXRyaW1fY291bnQ7CisJdWludDY0CQl0b3RhbF9jaHVua19jb3VudDsKKwl1 aW50NjQJCXRyaW1fY2h1bmtfY291bnQ7CisJdWludDY0CQlyZW1haW5pbmdfY2h1bmtfY291bnQ7 CisKKwkvKiBJZiB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRoZSBsaW1pdCwgdGhlcmUncyBub3Ro aW5nIHRvIGRvLiAqLworCWN1cnJlbnRfY291bnQgPSBsYS0+bmV4dF9pZCAtIGxhLT5vbGRlc3Rf aWQ7CisJaWYgKGN1cnJlbnRfY291bnQgPD0gbGltaXQpCisJCXJldHVybjsKKworCS8qIEZyZWUg ZW5vdWdoIGVudHJpZXMgdG8gZ2V0IHVzIGJhY2sgZG93biB0byB0aGUgbGltaXQuICovCisJdHJp bV9jb3VudCA9IGN1cnJlbnRfY291bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDAp CisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisK KwkJY2h1bmtfbnVtYmVyID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0Vf Q0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9p ZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQlBc3NlcnQobGEtPmNodW5rc1tjaHVua19udW1i ZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gIT0gTlVMTCk7CisJCXBmcmVlKGxhLT5jaHVua3Nb Y2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJbGEtPmNodW5rc1tjaHVu a19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBOVUxMOworCQkrK2xhLT5vbGRlc3Rf aWQ7CisJCS0tdHJpbV9jb3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUg bm93IGVudGlyZWx5IHVudXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKGxhLT5vbGRlc3Rf aWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0g MDsgbiA8IHRyaW1fY2h1bmtfY291bnQ7ICsrbikKKwkJcGZyZWUobGEtPmNodW5rc1tuXSk7CisK KwkvKiBTbGlkZSByZW1haW5pbmcgY2h1bmsgcG9pbnRlcnMgYmFjayB0b3dhcmQgdGhlIGJhc2Ug b2YgdGhlIGFycmF5LiAqLworCXRvdGFsX2NodW5rX2NvdW50ID0gKGxhLT5uZXh0X2lkIC0gbGEt PmJhc2VfaWQgKworCQkJCQkJIEFEVklDRV9DSFVOS19TSVpFIC0gMSkgLyBBRFZJQ0VfQ0hVTktf U0laRTsKKwlyZW1haW5pbmdfY2h1bmtfY291bnQgPSB0b3RhbF9jaHVua19jb3VudCAtIHRyaW1f Y2h1bmtfY291bnQ7CisJaWYgKHJlbWFpbmluZ19jaHVua19jb3VudCA+IDApCisJCW1lbW1vdmUo JmxhLT5jaHVua3NbMF0sICZsYS0+Y2h1bmtzW3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVv ZihwZ3BhX2xvY2FsX2FkdmljZV9jaHVuayAqKSAqIHJlbWFpbmluZ19jaHVua19jb3VudCk7CisK KwkvKiBEb24ndCBsZWF2ZSBzdGFsZSBwb2ludGVycyBhcm91bmQuICovCisJbWVtc2V0KCZsYS0+ Y2h1bmtzW3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAgIHNpemVvZihwZ3BhX2xvY2Fs X2FkdmljZV9jaHVuayAqKQorCQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFpbmluZ19j aHVua19jb3VudCkpOworCisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5nbHkuICov CisJbGEtPmJhc2VfaWQgKz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19TSVpFOwor fQorCisvKgorICogRGlzY2FyZCBjb2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBzaGFyZWQgbWVt b3J5IGluIGV4Y2VzcyBvZiB0aGUKKyAqIHNwZWNpZmllZCBsaW1pdC4KKyAqLworc3RhdGljIHZv aWQKK3BncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGRzYV9hcmVhICphcmVhLCBpbnQgbGltaXQpCit7 CisJcGdwYV9zaGFyZWRfYWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJdWludDY0CQlj dXJyZW50X2NvdW50OworCXVpbnQ2NAkJdHJpbV9jb3VudDsKKwl1aW50NjQJCXRvdGFsX2NodW5r X2NvdW50OworCXVpbnQ2NAkJdHJpbV9jaHVua19jb3VudDsKKwl1aW50NjQJCXJlbWFpbmluZ19j aHVua19jb3VudDsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisKKwkvKiBJZiB3ZSBoYXZl bid0IHlldCByZWFjaGVkIHRoZSBsaW1pdCwgdGhlcmUncyBub3RoaW5nIHRvIGRvLiAqLworCWN1 cnJlbnRfY291bnQgPSBzYS0+bmV4dF9pZCAtIHNhLT5vbGRlc3RfaWQ7CisJaWYgKGN1cnJlbnRf Y291bnQgPD0gbGltaXQpCisJCXJldHVybjsKKworCS8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIGNo dW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5j aHVua3MpOworCisJLyogRnJlZSBlbm91Z2ggZW50cmllcyB0byBnZXQgdXMgYmFjayBkb3duIHRv IHRoZSBsaW1pdC4gKi8KKwl0cmltX2NvdW50ID0gY3VycmVudF9jb3VudCAtIGxpbWl0OworCXdo aWxlICh0cmltX2NvdW50ID4gMCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50 NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKwor CQljaHVua19udW1iZXIgPSAoc2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9D SFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoc2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lk KSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEs IGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCQlBc3NlcnQoY2h1bmstPmVudHJpZXNbY2h1 bmtfb2Zmc2V0XSAhPSBJbnZhbGlkRHNhUG9pbnRlcik7CisJCWRzYV9mcmVlKGFyZWEsIGNodW5r LT5lbnRyaWVzW2NodW5rX29mZnNldF0pOworCQljaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRd ID0gSW52YWxpZERzYVBvaW50ZXI7CisJCSsrc2EtPm9sZGVzdF9pZDsKKwkJLS10cmltX2NvdW50 OworCX0KKworCS8qIEZyZWUgYW55IGNodW5rcyB0aGF0IGFyZSBub3cgZW50aXJlbHkgdW51c2Vk LiAqLworCXRyaW1fY2h1bmtfY291bnQgPSAoc2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAv IEFEVklDRV9DSFVOS19TSVpFOworCWZvciAodWludDY0IG4gPSAwOyBuIDwgdHJpbV9jaHVua19j b3VudDsgKytuKQorCQlkc2FfZnJlZShhcmVhLCBjaHVua19hcnJheVtuXSk7CisKKwkvKiBTbGlk ZSByZW1haW5pbmcgY2h1bmsgcG9pbnRlcnMgYmFjayB0b3dhcmQgdGhlIGJhc2Ugb2YgdGhlIGFy cmF5LiAqLworCXRvdGFsX2NodW5rX2NvdW50ID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQg KworCQkJCQkJIEFEVklDRV9DSFVOS19TSVpFIC0gMSkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwly ZW1haW5pbmdfY2h1bmtfY291bnQgPSB0b3RhbF9jaHVua19jb3VudCAtIHRyaW1fY2h1bmtfY291 bnQ7CisJaWYgKHJlbWFpbmluZ19jaHVua19jb3VudCA+IDApCisJCW1lbW1vdmUoJmNodW5rX2Fy cmF5WzBdLCAmY2h1bmtfYXJyYXlbdHJpbV9jaHVua19jb3VudF0sCisJCQkJc2l6ZW9mKGRzYV9w b2ludGVyKSAqIHJlbWFpbmluZ19jaHVua19jb3VudCk7CisKKwkvKiBEb24ndCBsZWF2ZSBzdGFs ZSBwb2ludGVycyBhcm91bmQuICovCisJbWVtc2V0KCZjaHVua19hcnJheVtyZW1haW5pbmdfY2h1 bmtfY291bnRdLCAwLAorCQkgICBzaXplb2YocGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rICopCisJ CSAgICogKHRvdGFsX2NodW5rX2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50KSk7CisKKwkv KiBBZGp1c3QgYmFzZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlzYS0+YmFzZV9pZCArPSB0 cmltX2NodW5rX2NvdW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBTUUwtY2Fs bGFibGUgZnVuY3Rpb24gdG8gZGlzY2FyZCBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tlbmQtbG9j YWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKFBH X0ZVTkNUSU9OX0FSR1MpCit7CisJaWYgKGxvY2FsX2NvbGxlY3RvciAhPSBOVUxMKQorCQlwZ3Bh X3RyaW1fbG9jYWxfYWR2aWNlKDApOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAq IFNRTC1jYWxsYWJsZSBmdW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFj a2VuZC1sb2NhbCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRf YWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0g cGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2 aWNlX2RzYV9hcmVhKCk7CisKKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVT SVZFKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2 aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3Rv ciBkb2Vzbid0IGV2ZW4gZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFu eXRoaW5nIGVsc2UuCisJICovCisJaWYgKHNoYXJlZF9jb2xsZWN0b3IgPT0gTlVMTCkKKwl7CisJ CWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJewor CQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJ fQorCQlzaGFyZWRfY29sbGVjdG9yID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFy ZWRfY29sbGVjdG9yKTsKKwl9CisKKwkvKiBEbyB0aGUgcmVhbCB3b3JrICovCisJcGdwYV90cmlt X3NoYXJlZF9hZHZpY2UoYXJlYSwgMCk7CisKKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7 CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byBy ZXR1cm4gYWR2aWNlIGNvbGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1 bQorcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlS ZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGlu Zm87CisJcGdwYV9sb2NhbF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCU9pZAkJCXVz ZXJpZCA9IEdldFVzZXJJZCgpOworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOwor CisJaWYgKGxhID09IE5VTEwpCisJCXJldHVybiAoRGF0dW0pIDA7CisKKwkvKiBMb29wIG92ZXIg YWxsIGVudHJpZXMuICovCisJZm9yICh1aW50NjQgaWQgPSBsYS0+b2xkZXN0X2lkOyBpZCA8IGxh LT5uZXh0X2lkOyArK2lkKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJ Y2h1bmtfb2Zmc2V0OworCQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFs dWVzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0Vf Q09MVU1OU10gPSB7MH07CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gbGEtPmJhc2VfaWQpIC8g QURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIGxhLT5iYXNlX2lkKSAl IEFEVklDRV9DSFVOS19TSVpFOworCisJCWNhID0gbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5l bnRyaWVzW2NodW5rX29mZnNldF07CisKKwkJaWYgKCFtZW1iZXJfY2FuX3NldF9yb2xlKHVzZXJp ZCwgY2EtPnVzZXJpZCkpCisJCQljb250aW51ZTsKKworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXRE YXR1bShpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJ CXZhbHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBV SW50NjRHZXREYXR1bShjYS0+cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcEdldERh dHVtKGNhLT50aW1lc3RhbXApOworCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHF1 ZXJ5X3N0cmluZyhjYSkpOworCQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGFkdmlj ZV9zdHJpbmcoY2EpKTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3Vs dCwgcnNpbmZvLT5zZXREZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwlyZXR1 cm4gKERhdHVtKSAwOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2 aWNlIGNvbGxlY3RlZCBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVj dGVkX3NoYXJlZF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpy c2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdwYV9zaGFy ZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAq YXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7CisJZHNhX3BvaW50ZXIgKmNodW5rX2Fy cmF5OworCXBncGFfc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCisJSW5p dE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJLyogTG9jayB0aGUgc2hhcmVkIHN0YXRl LiAqLworCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19TSEFSRUQpOworCisJLyoKKwkg KiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHll dCwgZml4IHRoYXQgbm93OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZlbiBl eGlzdCwgd2UgY2FuIHJldHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4KKwkg Ki8KKwlpZiAoc2EgPT0gTlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9 PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2sp OworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQorCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBk c2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8q IEdldCBhIHBvaW50ZXIgdG8gdGhlIGNodW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0gZHNh X2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpOworCisJLyogTG9vcCBvdmVyIGFsbCBlbnRy aWVzLiAqLworCWZvciAodWludDY0IGlkID0gc2EtPm9sZGVzdF9pZDsgaWQgPCBzYS0+bmV4dF9p ZDsgKytpZCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29m ZnNldDsKKwkJcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKwkJcGdwYV9jb2xsZWN0 ZWRfYWR2aWNlICpjYTsKKwkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOwor CQlib29sCQludWxsc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251 bWJlciA9IChpZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19v ZmZzZXQgPSAoaWQgLSBzYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVu ayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJ Y2EgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7 CisKKwkJdmFsdWVzWzBdID0gVUludDY0R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBPYmpl Y3RJZEdldERhdHVtKGNhLT51c2VyaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVt KGNhLT5kYmlkKTsKKwkJdmFsdWVzWzNdID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOwor CQl2YWx1ZXNbNF0gPSBUaW1lc3RhbXBHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVz WzVdID0gQ1N0cmluZ0dldFRleHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZd ID0gQ1N0cmluZ0dldFRleHREYXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9y ZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkg dmFsdWVzLCBudWxscyk7CisJfQorCisJLyogUmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4g Ki8KKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisKKwlyZXR1cm4gKERhdHVtKSAwOwor fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNmU3NDZhMDZkNwotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaApAQCAtMCwwICsxLDE4IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2NvbGxlY3Rvci5oCisgKgkgIGNvbGxlY3Qg YWR2aWNlIGludG8gYmFja2VuZC1sb2NhbCBvciBzaGFyZWQgbWVtb3J5CisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX0NPTExFQ1RPUl9ICisjZGVmaW5lIFBH UEFfQ09MTEVDVE9SX0gKKworZXh0ZXJuIHZvaWQgcGdwYV9jb2xsZWN0X2FkdmljZSh1aW50NjQg cXVlcnlJZCwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQljb25zdCBjaGFyICph ZHZpY2Vfc3RyaW5nKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfaWRlbnRpZmllci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50 aWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTVmYTc3ZTA4 M2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRp Zmllci5jCkBAIC0wLDAgKzEsNDc2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3Bh X2lkZW50aWZpZXIuYworICoJICBjcmVhdGUgYXBwcm9wcmlhdGUgaWRlbnRpZmllcnMgZm9yIHJh bmdlIHRhYmxlIGVudHJpZXMKKyAqCisgKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVsZSBpcyB0byBi ZSBhYmxlIHRvIHByb2R1Y2UgaWRlbnRpZmllcnMgZm9yIHJhbmdlCisgKiB0YWJsZSBlbnRyaWVz IHRoYXQgYXJlIHVuaXF1ZSwgdW5kZXJzdGFuZGFibGUgdG8gaHVtYW4gYmVpbmdzLCBhbmQKKyAq IGFibGUgdG8gYmUgcmVjb25zdHJ1Y3RlZCBkdXJpbmcgZnV0dXJlIHBsYW5uaW5nIGN5Y2xlcy4g QXMgYW4KKyAqIGV4Y2VwdGlvbiwgd2UgZG8gbm90IGNhcmUgYWJvdXQsIG9yIHdhbnQgdG8gcHJv ZHVjZSwgaWRlbnRpZmllcnMgZm9yCisgKiBSVEVfSk9JTiBlbnRyaWVzLiBUaGlzIGlzIGJlY2F1 c2UgKDEpIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGEgdG9uIG9mCisgKiBSVEVzIHdpdGggdW5oZWxw ZnVsIG5hbWVzIGxpa2UgdW5uYW1lZF9qb2luXzE3OyAoMikgbm90IGFsbCBqb2lucyBoYXZlCisg KiBSVEVzOyBhbmQgKDMpIHdlIGludGVuZCB0byByZWZlciB0byBqb2lucyBieSB0aGVpciBjb25z dGl0dWVudCBtZW1iZXJzCisgKiByYXRoZXIgdGhhbiBieSByZWZlcmVuY2UgdG8gdGhlIGpvaW4g UlRFLgorICoKKyAqIEluIGdlbmVyYWwsIHdlIGNvbnN0cnVjdCBpZGVudGlmaWVycyBvZiB0aGUg Zm9sbG93aW5nIGZvcm06CisgKgorICogYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9jaGls ZF90YWJsZV9uYW1lQHN1YnF1ZXJ5X25hbWUKKyAqCisgKiBIb3dldmVyLCBvY2N1cnJlbmNlX251 bWJlciBpcyBvbWl0dGVkIHdoZW4gaXQgaXMgdGhlIGZpcnN0IG9jY3VycmVuY2UKKyAqIHdpdGhp biB0aGUgc2FtZSBzdWJxdWVyeSwgY2hpbGRfdGFibGVfbmFtZSBpcyBvbWl0dGVkIGZvciByZWxh dGlvbnMgdGhhdAorICogYXJlIG5vdCBjaGlsZCB0YWJsZXMsIGFuZCBzdWJxdWVyeV9uYW1lIGlz IG9taXR0ZWQgZm9yIHRoZSB0b3Btb3N0CisgKiBxdWVyeSBsZXZlbC4gV2hlbmV2ZXIgYW4gaXRl bSBpcyBvbWl0dGVkLCB0aGUgcHJlY2VkaW5nIHB1bmN0dWF0aW9uIG1hcmsKKyAqIGlzIGFsc28g b21pdHRlZC4gIElkZW50aWZpZXItc3R5bGUgZXNjYXBpbmcgaXMgYXBwbGllZCB0byBhbGlhc19u YW1lIGFuZAorICogc3VicXVlcnlfbmFtZS4gIFdoZW5ldmVyIHdlIGluY2x1ZGUgY2hpbGRfdGFi bGVfbmFtZSwgd2UgYWx3YXlzCisgKiBzY2hlbWEtcXVhbGlmaWVkIG5hbWUsIGJ1dCB3cml0aW5n IHRoZWlyIG93biBwbGFuIGFkdmljZSBhcmUgbm90IHJlcXVpcmVkCisgKiB0byBkbyBzby4gIElk ZW50aWZpZXItc3R5bGUgZXNjYXBpbmcgaXMgYXBwbGllZCB0byB0aGUgc2NoZW1hIGFuZCB0byB0 aGUKKyAqIHJlbGF0aW9uIG5hbWVzIHNlcGFyYXRlbHkuCisgKgorICogVGhlIHVwc2hvdCBvZiBh bGwgb2YgdGhlc2UgcnVsZXMgaXMgdGhhdCBpbiBzaW1wbGUgY2FzZXMsIHRoZSByZWxhdGlvbgor ICogaWRlbnRpZmllciBpcyB0ZXh0dWFsbHkgaWRlbnRpY2FsIHRvIHRoZSBhbGlhcyBuYW1lLCBt YWtpbmcgbGlmZSBlYXNpZXIKKyAqIGZvciB1c2Vycy4gSG93ZXZlciwgZXZlbiBpbiBjb21wbGV4 IGNhc2VzLCBldmVyeSByZWxhdGlvbiBpZGVudGlmaWVyCisgKiBmb3IgYSBnaXZlbiBxdWVyeSB3 aWxsIGJlIHVuaXF1ZSAob3IgYXQgbGVhc3Qgd2UgaG9wZSBzbzogaWYgbm90LCB0aGlzCisgKiBj b2RlIGlzIGJ1Z2d5IGFuZCB0aGUgaWRlbnRpZmllciBmb3JtYXQgbWlnaHQgbmVlZCB0byBiZSBy ZXRob3VnaHQpLgorICoKKyAqIEEga2V5IGdvYWwgb2YgdGhpcyBzeXN0ZW0gaXMgdGhhdCB3ZSB3 YW50IHRvIGJlIGFibGUgdG8gcmVjb25zdHJ1Y3QgdGhlCisgKiBzYW1lIGlkZW50aWZpZXJzIGR1 cmluZyBhIGZ1dHVyZSBwbGFubmluZyBjeWNsZSBmb3IgdGhlIHNhbWUgcXVlcnksIHNvCisgKiB0 aGF0IGlmIGEgY2VydGFpbiBiZWhhdmlvciBpcyBzcGVjaWZpZWQgZm9yIGEgY2VydGFpbiBpZGVu dGlmaWVyLCB3ZSBjYW4KKyAqIHByb3Blcmx5IGlkZW50aWZ5IHRoZSBSVEkgZm9yIHdoaWNoIHRo YXQgYmVoYXZpb3IgaXMgbWFuZGF0ZWQuIEluIG9yZGVyCisgKiBmb3IgdGhpcyB0byB3b3JrLCBz dWJxdWVyeSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSBhbmQga25vd24gYmVmb3JlIHRoZQorICogc3Vi cXVlcnkgaXMgcGxhbm5lZCwgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGlkZW50aWZpZXIgbXVz dCBub3QgZGVwZW5kCisgKiBvbiBhbnkgcGFydCBvZiB0aGUgcXVlcnkgb3V0c2lkZSBvZiB0aGUg Y3VycmVudCBzdWJxdWVyeSBsZXZlbC4gSW4KKyAqIHBhcnRpY3VsYXIsIG9jY3VycmVuY2VfbnVt YmVyIG11c3QgYmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byB0aGUgcmFuZ2UKKyAqIHRhYmxlIGZv ciB0aGUgcmVsZXZhbnQgc3VicXVlcnksIG5vdCB0aGUgZmluYWwgZmxhdHRlbmVkIHJhbmdlIHRh YmxlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lk ZW50aWZpZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJwYXJz ZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1 dGlscy9sc3lzY2FjaGUuaCIKKworc3RhdGljIEluZGV4ICpwZ3BhX2NyZWF0ZV90b3BfcnRpX21h cChJbmRleCBydGFibGVfbGVuZ3RoLCBMaXN0ICpydGFibGUsCisJCQkJCQkJCQkgIExpc3QgKmFw cGluZm9zKTsKK3N0YXRpYyBpbnQJcGdwYV9vY2N1cnJlbmNlX251bWJlcihMaXN0ICpydGFibGUs IEluZGV4ICp0b3BfcnRpX21hcCwKKwkJCQkJCQkJICAgU3ViUGxhblJUSW5mbyAqcnRpbmZvLCBJ bmRleCBydGkpOworCisvKgorICogQ3JlYXRlIGEgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBmcm9t IHNjcmF0Y2guCisgKgorICogVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGNhbGxlciB0byBkbyBh bGwgdGhlIGhlYXZ5IGxpZnRpbmcsIHNvIGl0J3MKKyAqIGdlbmVyYWxseSBiZXR0ZXIgdG8gdXNl IG9uZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGluc3RlYWQuCisgKgorICogU2VlIHRoZSBmaWxl IGhlYWRlciBjb21tZW50cyBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBmb3JtYXQgb2YgYW4KKyAq IGlkZW50aWZpZXIuCisgKi8KK2NvbnN0IGNoYXIgKgorcGdwYV9pZGVudGlmaWVyX3N0cmluZyhj b25zdCBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwljb25zdCBjaGFyICpyZXN1bHQ7CisKKwlB c3NlcnQocmlkLT5hbGlhc19uYW1lICE9IE5VTEwpOworCXJlc3VsdCA9IHF1b3RlX2lkZW50aWZp ZXIocmlkLT5hbGlhc19uYW1lKTsKKworCUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMCk7CisJ aWYgKHJpZC0+b2NjdXJyZW5jZSA+IDEpCisJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcyMlZCIsIHJl c3VsdCwgcmlkLT5vY2N1cnJlbmNlKTsKKworCWlmIChyaWQtPnBhcnRyZWwgIT0gTlVMTCkKKwl7 CisJCWlmIChyaWQtPnBhcnRuc3AgPT0gTlVMTCkKKwkJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcy8l cyIsIHJlc3VsdCwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0cmVsKSk7CisJ CWVsc2UKKwkJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcy8lcy4lcyIsIHJlc3VsdCwKKwkJCQkJCQkg IHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0bnNwKSwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZp ZXIocmlkLT5wYXJ0cmVsKSk7CisJfQorCisJaWYgKHJpZC0+cGxhbl9uYW1lICE9IE5VTEwpCisJ CXJlc3VsdCA9IHBzcHJpbnRmKCIlc0AlcyIsIHJlc3VsdCwgcXVvdGVfaWRlbnRpZmllcihyaWQt PnBsYW5fbmFtZSkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENvbXB1dGUgYSBy ZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIHBhcnRpY3VsYXIgUlRJLgorICoKKyAqIFRoZSBjYWxs ZXIgcHJvdmlkZXMgcm9vdCBhbmQgcnRpLCBhbmQgZ2V0cyB0aGUgbmVjZXNzYXJ5IGRldGFpbHMg YmFjayB2aWEKKyAqIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycy4KKyAqLwordm9pZAorcGdwYV9j b21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBydGksCisJ CQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXRvcF9ydGkgPSBydGk7 CisJaW50CQkJb2NjdXJyZW5jZSA9IDE7CisJUmFuZ2VUYmxFbnRyeSAqcnRlOworCVJhbmdlVGJs RW50cnkgKnRvcF9ydGU7CisJY2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJY2hhcgkgICAqcGFy dHJlbCA9IE5VTEw7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBjaGlsZCBSVEUsIGZpbmQgdGhl IHRvcG1vc3QgcGFyZW50IHRoYXQgaXMgc3RpbGwgb2YgdHlwZQorCSAqIFJURV9SRUxBVElPTi4g V2UgZG8gdGhpcyBiZWNhdXNlIHdlIGlkZW50aWZ5IGNoaWxkcmVuIG9mIHBhcnRpdGlvbmVkCisJ ICogdGFibGVzIGJ5IHRoZSBuYW1lIG9mIHRoZSBjaGlsZCB0YWJsZSwgYnV0IHN1YnF1ZXJpZXMg Y2FuIGFsc28gaGF2ZQorCSAqIGNoaWxkIHJlbHMgYW5kIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhv c2UgaGVyZS4KKwkgKi8KKwlmb3IgKDs7KQorCXsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbzsK KwkJUmFuZ2VUYmxFbnRyeSAqcGFyZW50X3J0ZTsKKworCQkvKiBhcHBlbmRfcmVsX2FycmF5IGNh biBiZSBOVUxMIGlmIHRoZXJlIGFyZSBubyBjaGlsZHJlbiAqLworCQlpZiAocm9vdC0+YXBwZW5k X3JlbF9hcnJheSA9PSBOVUxMIHx8CisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJy YXlbdG9wX3J0aV0pID09IE5VTEwpCisJCQlicmVhazsKKworCQlwYXJlbnRfcnRlID0gcGxhbm5l cl9ydF9mZXRjaChhcHBpbmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QpOworCQlpZiAocGFyZW50X3J0 ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQlicmVhazsKKworCQl0b3BfcnRpID0gYXBw aW5mby0+cGFyZW50X3JlbGlkOworCX0KKworCS8qIEdldCB0aGUgcmFuZ2UgdGFibGUgZW50cmll cyBmb3IgdGhlIFJUSSBhbmQgdG9wIFJUSS4gKi8KKwlydGUgPSBwbGFubmVyX3J0X2ZldGNoKHJ0 aSwgcm9vdCk7CisJdG9wX3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2godG9wX3J0aSwgcm9vdCk7CisJ QXNzZXJ0KHJ0ZS0+cnRla2luZCAhPSBSVEVfSk9JTik7CisJQXNzZXJ0KHRvcF9ydGUtPnJ0ZWtp bmQgIT0gUlRFX0pPSU4pOworCisJLyogV29yayBvdXQgdGhlIGNvcnJlY3Qgb2NjdXJyZW5jZSBu dW1iZXIuICovCisJZm9yIChJbmRleCBwcmlvcl9ydGkgPSAxOyBwcmlvcl9ydGkgPCB0b3BfcnRp OyArK3ByaW9yX3J0aSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKwkJQXBwZW5k UmVsSW5mbyAqYXBwaW5mbzsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9m IGEgcGFyZW50IHRoYXQgaXMgYSByZWxhdGlvbiwgc2tpcCBpdC4KKwkJICoKKwkJICogU3VjaCBy YW5nZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNhbWJpZ3VhdGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNj aGVtYQorCQkgKiBhbmQgbmFtZSBvZiB0aGUgdGFibGUsIG5vdCBieSBjb3VudGluZyB0aGVtIGFz IHNlcGFyYXRlIG9jY3VycmVuY2VzCisJCSAqIG9mIHRoZSBzYW1lIHRhYmxlLgorCQkgKgorCQkg KiBOQjogYXBwZW5kX3JlbF9hcnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRy ZW4KKwkJICovCisJCWlmIChyb290LT5hcHBlbmRfcmVsX2FycmF5ICE9IE5VTEwgJiYKKwkJCShh cHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJheVtwcmlvcl9ydGldKSAhPSBOVUxMKQorCQl7 CisJCQlSYW5nZVRibEVudHJ5ICpwYXJlbnRfcnRlOworCisJCQlwYXJlbnRfcnRlID0gcGxhbm5l cl9ydF9mZXRjaChhcHBpbmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QpOworCQkJaWYgKHBhcmVudF9y dGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyog U2tpcCBOVUxMIGVudHJpZXMgYW5kIGpvaW5zLiAqLworCQlwcmlvcl9ydGUgPSBwbGFubmVyX3J0 X2ZldGNoKHByaW9yX3J0aSwgcm9vdCk7CisJCWlmIChwcmlvcl9ydGUgPT0gTlVMTCB8fCBwcmlv cl9ydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkvKiBTa2lwIGlm IHRoZSBhbGlhcyBuYW1lIGRpZmZlcnMuICovCisJCWlmIChzdHJjbXAocHJpb3JfcnRlLT5lcmVm LT5hbGlhc25hbWUsIHJ0ZS0+ZXJlZi0+YWxpYXNuYW1lKSAhPSAwKQorCQkJY29udGludWU7CisK KwkJLyogTG9va3MgbGlrZSBhIHRydWUgZHVwbGljYXRlLiAqLworCQkrK29jY3VycmVuY2U7CisJ fQorCisJLyogSWYgdGhpcyBpcyBhIGNoaWxkIHRhYmxlLCBnZXQgdGhlIHNjaGVtYSBhbmQgcmVs YXRpb24gbmFtZXMuICovCisJaWYgKHJ0aSAhPSB0b3BfcnRpKQorCXsKKwkJcGFydG5zcCA9IGdl dF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKGdldF9yZWxfbmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsK KwkJcGFydHJlbCA9IGdldF9yZWxfbmFtZShydGUtPnJlbGlkKTsKKwl9CisKKwkvKiBPSywgd2Ug aGF2ZSBhbGwgdGhlIGFuc3dlcnMgd2UgbmVlZC4gUmV0dXJuIHRoZW0gdG8gdGhlIGNhbGxlci4g Ki8KKwlyaWQtPmFsaWFzX25hbWUgPSB0b3BfcnRlLT5lcmVmLT5hbGlhc25hbWU7CisJcmlkLT5v Y2N1cnJlbmNlID0gb2NjdXJyZW5jZTsKKwlyaWQtPnBhcnRuc3AgPSBwYXJ0bnNwOworCXJpZC0+ cGFydHJlbCA9IHBhcnRyZWw7CisJcmlkLT5wbGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7Cit9 CisKKy8qCisgKiBDb21wdXRlIGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBzZXQgb2YgUlRJ cywgZXhjZXB0IGZvciBhbnkgUlRFX0pPSU4KKyAqIFJUSXMgdGhhdCBtYXkgYmUgcHJlc2VudC4K KyAqCisgKiBSVEVfSk9JTiBlbnRyaWVzIGFyZSBleGNsdWRlZCBiZWNhdXNlIHRoZXkgY2Fubm90 IGJlIG1lbnRpb25lZCBieSBwbGFuCisgKiBhZHZpY2UuCisgKgorICogVGhlIGNhbGxlciBpcyBy ZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhhdCB0aGUgdGtleXMgYXJyYXkgaXMgbGFyZ2UK KyAqIGVub3VnaCB0byBzdG9yZSB0aGUgcmVzdWx0cy4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVl IGlzIHRoZSBudW1iZXIgb2YgaWRlbnRpZmllcnMgY29tcHV0ZWQuCisgKi8KK2ludAorcGdwYV9j b21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwgQml0bWFwc2V0 ICpyZWxpZHMsCisJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcykKK3sKKwlpbnQJCQlj b3VudCA9IDA7CisJaW50CQkJcnRpID0gLTE7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21l bWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBwbGFu bmVyX3J0X2ZldGNoKHJ0aSwgcm9vdCk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfSk9J TikKKwkJCWNvbnRpbnVlOworCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwg cnRpLCAmcmlkc1tjb3VudCsrXSk7CisJfQorCisJQXNzZXJ0KGNvdW50ID4gMCk7CisJcmV0dXJu IGNvdW50OworfQorCisvKgorICogQ3JlYXRlIGFuIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50 aWZpZXJzIGZvciBhbGwgdGhlIG5vbi1OVUxMLAorICogbm9uLVJURV9KT0lOIGVudHJpZXMgaW4g dGhlIFBsYW5uZWRTdG10J3MgcmFuZ2UgdGFibGUuCisgKi8KK3BncGFfaWRlbnRpZmllciAqCitw Z3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KFBsYW5uZWRTdG10ICpwc3Rt dCkKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHBzdG10LT5ydGFibGUp OworCXBncGFfaWRlbnRpZmllciAqcmVzdWx0ID0gcGFsbG9jMF9hcnJheShwZ3BhX2lkZW50aWZp ZXIsIHJ0YWJsZV9sZW5ndGgpOworCUluZGV4CSAgICp0b3BfcnRpX21hcDsKKwlpbnQJCQlydGlu Zm9pbmRleCA9IDA7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKKwlTdWJQbGFuUlRJ bmZvICpuZXh0cnRpbmZvID0gTlVMTDsKKworCS8qCisJICogQWNjb3VudCBmb3IgcmVsYXRpb25z IGFkZGRlZCBieSBpbmhlcml0YW5jZSBleHBhbnNpb24gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJs ZXMuCisJICovCisJdG9wX3J0aV9tYXAgPSBwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChydGFibGVf bGVuZ3RoLCBwc3RtdC0+cnRhYmxlLAorCQkJCQkJCQkJCSAgcHN0bXQtPmFwcGVuZFJlbGF0aW9u cyk7CisKKwkvKgorCSAqIFdoZW4gd2UgYmVnaW4gaXRlcmF0aW5nLCB3ZSdyZSBwcm9jZXNzaW5n IHRoZSBwb3J0aW9uIG9mIHRoZSByYW5nZQorCSAqIHRhYmxlIHRoYXQgb3JpZ2luYXRlZCBmcm9t IHRoZSB0b3AtbGV2ZWwgUGxhbm5lckluZm8sIHNvIHN1YnJ0aW5mbyBpcworCSAqIE5VTEwuIExh dGVyLCBzdWJydGluZm8gd2lsbCBiZSB0aGUgU3ViUGxhblJUSW5mbyBmb3IgdGhlIHN1YnF1ZXJ5 IHdob3NlCisJICogcG9ydGlvbiBvZiB0aGUgcmFuZ2UgdGFibGUgd2UgYXJlIHByb2Nlc3Npbmcu IG5leHRydGluZm8gaXMgYWx3YXlzIHRoZQorCSAqIFN1YlBsYW5SVEluZm8gdGhhdCBmb2xsb3dz IHRoZSBjdXJyZW50IG9uZSwgaWYgYW55LCBzbyB3aGVuIHdlJ3JlCisJICogcHJvY2Vzc2luZyB0 aGUgdG9wLWxldmVsIHF1ZXJ5J3MgcG9ydGlvbiBvZiB0aGUgcmFuZ2UgdGFibGUsIHRoZSBuZXh0 CisJICogU3ViUGxhblJUSW5mbyBpcyB0aGUgdmVyeSBmaXJzdCBvbmUuCisJICovCisJaWYgKHBz dG10LT5zdWJydGluZm9zICE9IE5VTEwpCisJCW5leHRydGluZm8gPSBsaW5pdGlhbChwc3RtdC0+ c3VicnRpbmZvcyk7CisKKwkvKiBNYWluIGxvb3Agb3ZlciB0aGUgcmFuZ2UgdGFibGUuICovCisJ Zm9yIChJbmRleCBydGkgPSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgcnRpKyspCisJeworCQlj b25zdCBjaGFyICpwbGFuX25hbWU7CisJCUluZGV4CQl0b3BfcnRpOworCQlSYW5nZVRibEVudHJ5 ICpydGU7CisJCVJhbmdlVGJsRW50cnkgKnRvcF9ydGU7CisJCWNoYXIJICAgKnBhcnRuc3AgPSBO VUxMOworCQljaGFyCSAgICpwYXJ0cmVsID0gTlVMTDsKKwkJaW50CQkJb2NjdXJyZW5jZTsKKwkJ cGdwYV9pZGVudGlmaWVyICpyaWQ7CisKKwkJLyoKKwkJICogQWR2YW5jZSB0byB0aGUgbmV4dCBT dWJQbGFuUlRJbmZvLCBpZiBpdCdzIHRpbWUgdG8gZG8gdGhhdC4KKwkJICoKKwkJICogVGhpcyBs b29wIHByb2JhYmx5IHNob3VsZG4ndCBldmVyIGl0ZXJhdGUgbW9yZSB0aGFuIG9uY2UsIGJlY2F1 c2UKKwkJICogdGhhdCB3b3VsZCBpbXBseSB0aGF0IGEgc3VicXVlcnkgd2FzIHBsYW5uZWQgYnV0 IGFkZGVkIG5vdGhpbmcgdG8KKwkJICogdGhlIHJhbmdlIHRhYmxlOyBidXQgbGV0J3MgYmUgZGVm ZW5zaXZlIGFuZCBhc3N1bWUgaXQgY2FuIGhhcHBlbi4KKwkJICovCisJCXdoaWxlIChuZXh0cnRp bmZvICE9IE5VTEwgJiYgcnRpID4gbmV4dHJ0aW5mby0+cnRvZmZzZXQpCisJCXsKKwkJCXJ0aW5m byA9IG5leHRydGluZm87CisJCQlpZiAoKytydGluZm9pbmRleCA+PSBsaXN0X2xlbmd0aChwc3Rt dC0+c3VicnRpbmZvcykpCisJCQkJbmV4dHJ0aW5mbyA9IE5VTEw7CisJCQllbHNlCisJCQkJbmV4 dHJ0aW5mbyA9IGxpc3RfbnRoKHBzdG10LT5zdWJydGluZm9zLCBydGluZm9pbmRleCk7CisJCX0K KworCQkvKiBGZXRjaCB0aGUgcmFuZ2UgdGFibGUgZW50cnksIGlmIGFueS4gKi8KKwkJcnRlID0g cnRfZmV0Y2gocnRpLCBwc3RtdC0+cnRhYmxlKTsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBhbmQg ZG9uJ3QgbmVlZCB0byBpZGVudGlmeSBudWxsIGVudHJpZXMsIGFuZCB3ZSBkb24ndCB3YW50CisJ CSAqIHRvIGlkZW50aWZ5IGpvaW4gZW50cmllcy4KKwkJICovCisJCWlmIChydGUgPT0gTlVMTCB8 fCBydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJ ZiB0aGlzIGlzIG5vdCBhIHJlbGF0aW9uIGFkZGVkIGJ5IHBhcnRpdGlvbmVkIHRhYmxlIGV4cGFu c2lvbiwKKwkJICogdGhlbiB0aGUgdG9wIFJUSS9SVEUgYXJlIGp1c3QgdGhlIHNhbWUgYXMgdGhp cyBSVEkvUlRFLiBPdGhlcndpc2UsCisJCSAqIHdlIG5lZWQgdGhlIGluZm9ybWF0aW9uIGZvciB0 aGUgdG9wIFJUSS9SVEUsIGFuZCBtdXN0IGFsc28gZmV0Y2gKKwkJICogdGhlIHBhcnRpdGlvbiBz Y2hlbWEgYW5kIG5hbWUuCisJCSAqLworCQl0b3BfcnRpID0gdG9wX3J0aV9tYXBbcnRpIC0gMV07 CisJCWlmIChydGkgPT0gdG9wX3J0aSkKKwkJCXRvcF9ydGUgPSBydGU7CisJCWVsc2UKKwkJewor CQkJdG9wX3J0ZSA9IHJ0X2ZldGNoKHRvcF9ydGksIHBzdG10LT5ydGFibGUpOworCQkJcGFydG5z cCA9CisJCQkJZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAoZ2V0X3JlbF9uYW1lc3BhY2UocnRl LT5yZWxpZCkpOworCQkJcGFydHJlbCA9IGdldF9yZWxfbmFtZShydGUtPnJlbGlkKTsKKwkJfQor CisJCS8qIENvbXB1dGUgdGhlIGNvcnJlY3Qgb2NjdXJyZW5jZSBudW1iZXIuICovCisJCW9jY3Vy cmVuY2UgPSBwZ3BhX29jY3VycmVuY2VfbnVtYmVyKHBzdG10LT5ydGFibGUsIHRvcF9ydGlfbWFw LAorCQkJCQkJCQkJCQlydGluZm8sIHRvcF9ydGkpOworCisJCS8qIEdldCB0aGUgbmFtZSBvZiB0 aGUgY3VycmVudCBwbGFuIChOVUxMIGZvciB0b3BsZXZlbCBxdWVyeSkuICovCisJCXBsYW5fbmFt ZSA9IHJ0aW5mbyA9PSBOVUxMID8gTlVMTCA6IHJ0aW5mby0+cGxhbl9uYW1lOworCisJCS8qIFNh dmUgYWxsIHRoZSBkZXRhaWxzIHdlJ3ZlIGRlcml2ZWQuICovCisJCXJpZCA9ICZyZXN1bHRbcnRp IC0gMV07CisJCXJpZC0+YWxpYXNfbmFtZSA9IHRvcF9ydGUtPmVyZWYtPmFsaWFzbmFtZTsKKwkJ cmlkLT5vY2N1cnJlbmNlID0gb2NjdXJyZW5jZTsKKwkJcmlkLT5wYXJ0bnNwID0gcGFydG5zcDsK KwkJcmlkLT5wYXJ0cmVsID0gcGFydHJlbDsKKwkJcmlkLT5wbGFuX25hbWUgPSBwbGFuX25hbWU7 CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYSBwZ3BhX2lk ZW50aWZpZXIgaW4gdGhlIGFycmF5IG9mIGlkZW50aWZpZXJzIGNvbXB1dGVkIGZvciB0aGUKKyAq IHJhbmdlIHRhYmxlLiBJZiBleGFjdGx5IG9uZSBtYXRjaCBpcyBmb3VuZCwgcmV0dXJuIHRoZSBt YXRjaGluZyBSVEk7IGVsc2UKKyAqIHJldHVybiAwLgorICovCitJbmRleAorcGdwYV9jb21wdXRl X3J0aV9mcm9tX2lkZW50aWZpZXIoaW50IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCSBwZ3BhX2lk ZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpyaWQp Cit7CisJSW5kZXgJCXJlc3VsdCA9IDA7CisKKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0aSA8PSBy dGFibGVfbGVuZ3RoOyArK3J0aSkKKwl7CisJCXBncGFfaWRlbnRpZmllciAqcnRpX3JpZCA9ICZy dF9pZGVudGlmaWVyc1tydGkgLSAxXTsKKworCQkvKiBJZiB0aGVyZSdzIG5vIGlkZW50aWZpZXIg Zm9yIHRoaXMgUlRJLCBza2lwIGl0LiAqLworCQlpZiAocnRpX3JpZC0+YWxpYXNfbmFtZSA9PSBO VUxMKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWYgaXQgbWF0Y2hlcywgcmV0dXJuIHRo aXMgUlRJLiBBcyB1c3VhbCwgYW4gb21pdHRlZCBwYXJ0aXRpb24KKwkJICogc2NoZW1hIG1hdGNo ZXMgYW55dGhpbmcsIGJ1dCBwYXJ0aXRpb24gYW5kIHBsYW4gbmFtZXMgbXVzdCBlaXRoZXIKKwkJ ICogbWF0Y2ggZXhhY3RseSBvciBiZSBvbWl0dGVkIG9uIGJvdGggc2lkZXMuCisJCSAqLworCQlp ZiAoc3RyY21wKHJpZC0+YWxpYXNfbmFtZSwgcnRpX3JpZC0+YWxpYXNfbmFtZSkgPT0gMCAmJgor CQkJcmlkLT5vY2N1cnJlbmNlID09IHJ0aV9yaWQtPm9jY3VycmVuY2UgJiYKKwkJCShyaWQtPnBh cnRuc3AgPT0gTlVMTCB8fCBydGlfcmlkLT5wYXJ0bnNwID09IE5VTEwgfHwKKwkJCSBzdHJjbXAo cmlkLT5wYXJ0bnNwLCBydGlfcmlkLT5wYXJ0bnNwKSA9PSAwKSAmJgorCQkJc3RyaW5nc19lcXVh bF9vcl9ib3RoX251bGwocmlkLT5wYXJ0cmVsLCBydGlfcmlkLT5wYXJ0cmVsKSAmJgorCQkJc3Ry aW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wbGFuX25hbWUsIHJ0aV9yaWQtPnBsYW5fbmFt ZSkpCisJCXsKKwkJCWlmIChyZXN1bHQgIT0gMCkKKwkJCXsKKwkJCQkvKiBNdWx0aXBsZSBtYXRj aGVzIHdlcmUgZm91bmQuICovCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXN1bHQgPSBydGk7 CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQnVpbGQgYSBtYXBwaW5n IGZyb20gZWFjaCBSVEkgdG8gdGhlIFJUSSB3aG9zZSBhbGlhc19uYW1lIHdpbGwgYmUgdXNlZCB0 bworICogY29uc3RydWN0IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyLgorICoKKyAqIEZvciBj aGlsZCByZWxhdGlvbnMsIHRoaXMgaXMgdGhlIHRvcG1vc3QgcGFyZW50IHRoYXQgaXMgc3RpbGwg b2YgdHlwZQorICogUlRFX1JFTEFUSU9OLiBGb3Igb3RoZXIgcmVsYXRpb25zLCBpdCdzIGp1c3Qg dGhlIG9yaWdpbmFsIFJUSS4KKyAqCisgKiBTaW5jZSB3ZSdyZSBldmVudHVhbGx5IGdvaW5nIHRv IG5lZWQgdGhpcyBpbmZvcm1hdGlvbiBmb3IgZXZlcnkgUlRJIGluCisgKiB0aGUgcmFuZ2UgdGFi bGUsIGl0J3MgYmVzdCB0byBjb21wdXRlIGFsbCB0aGUgYW5zd2VycyBpbiBhIHNpbmdsZSBwYXNz IG92ZXIKKyAqIHRoZSBBcHBlbmRSZWxJbmZvIGxpc3QuIE90aGVyd2lzZSwgd2UgbWlnaHQgZW5k IHVwIHNlYXJjaGluZyB0aHJvdWdoIHRoYXQKKyAqIGxpc3QgcmVwZWF0ZWRseSBmb3IgZW50cmll cyBvZiBpbnRlcmVzdC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IGlzIHVz ZXMgemVyby1iYXNlZCBpbmRleGluZywgd2hpbGUgUlRJcyB1c2UKKyAqIDEtYmFzZWQgaW5kZXhp bmcsIHNvIHN1YnRyYWN0IDEgZnJvbSB0aGUgUlRJIGJlZm9yZSBsb29raW5nIGl0IHVwIGluIHRo ZQorICogYXJyYXkuCisgKi8KK3N0YXRpYyBJbmRleCAqCitwZ3BhX2NyZWF0ZV90b3BfcnRpX21h cChJbmRleCBydGFibGVfbGVuZ3RoLCBMaXN0ICpydGFibGUsIExpc3QgKmFwcGluZm9zKQorewor CUluZGV4CSAgICp0b3BfcnRpX21hcCA9IHBhbGxvYzBfYXJyYXkoSW5kZXgsIHJ0YWJsZV9sZW5n dGgpOworCisJLyogSW5pdGlhbGx5LCBtYWtlIGV2ZXJ5IFJUSSBwb2ludCB0byBpdHNlbGYuICov CisJZm9yIChJbmRleCBydGkgPSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJCXRv cF9ydGlfbWFwW3J0aSAtIDFdID0gcnRpOworCisJLyogVXBkYXRlIHRoZSBtYXAgZm9yIGVhY2gg QXBwZW5kUmVsSW5mbyBvYmplY3QuICovCisJZm9yZWFjaF9ub2RlKEFwcGVuZFJlbEluZm8sIGFw cGluZm8sIGFwcGluZm9zKQorCXsKKwkJSW5kZXgJCXBhcmVudF9ydGkgPSBhcHBpbmZvLT5wYXJl bnRfcmVsaWQ7CisJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9ydGUgPSBydF9mZXRjaChwYXJlbnRf cnRpLCBydGFibGUpOworCisJCS8qIElmIHRoZSBwYXJlbnQgaXMgbm90IFJURV9SRUxBVElPTiwg aWdub3JlIHRoaXMgZW50cnkuICovCisJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kICE9IFJURV9S RUxBVElPTikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE1hcCB0aGUgY2hpbGQgdG8gd2hl cmV2ZXIgd2UgbWFwcGVkIHRoZSBwYXJlbnQuIFBhcmVudHMgYWx3YXlzCisJCSAqIHByZWNlZGUg dGhlaXIgY2hpbGRyZW4gaW4gdGhlIEFwcGVuZFJlbEluZm8gbGlzdCwgc28gdGhpcyBzaG91bGQK KwkJICogd29yayBvdXQuCisJCSAqLworCQl0b3BfcnRpX21hcFthcHBpbmZvLT5jaGlsZF9yZWxp ZCAtIDFdID0gdG9wX3J0aV9tYXBbcGFyZW50X3J0aSAtIDFdOworCX0KKworCXJldHVybiB0b3Bf cnRpX21hcDsKK30KKworLyoKKyAqIEZpbmQgdGhlIG9jY3VyZW5jZSBudW1iZXIgb2YgYSBjZXJ0 YWluIHJlbGF0aW9uIHdpdGhpbiBhIGNlcnRhaW4gc3VicXVlcnkuCisgKgorICogVGhlIHNhbWUg YWxpYXMgbmFtZSBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXMgd2l0aGluIGEgc3VicXVlcnksIGJ1 dCB3ZSB3YW50CisgKiB0byBkaXNhbWJpZ3VhdGUgYnkgZ2l2aW5nIGRpZmZlcmVudCBvY2N1cnJl bmNlcyBkaWZmZXJlbnQgaW50ZWdlciBpbmRleGVzLgorICogSG93ZXZlciwgY2hpbGQgdGFibGVz IGFyZSBkaXNhbWJpZ3VhdGVkIGJ5IGluY2x1ZGluZyB0aGUgdGFibGUgbmFtZSByYXRoZXIKKyAq IHRoYW4gYnkgaW5jcmVtZW50aW5nIHRoZSBvY2N1cnJlbmNlIG51bWJlcjsgYW5kIGpvaW5zIGFy ZSBub3QgbmFtZWQgYW5kIHNvCisgKiBzaG91bGRuJ3QgaW5jcmVtZW50IHRoZSBvY2N1cmVuY2Ug bnVtYmVyIGVpdGhlci4KKyAqLworc3RhdGljIGludAorcGdwYV9vY2N1cnJlbmNlX251bWJlcihM aXN0ICpydGFibGUsIEluZGV4ICp0b3BfcnRpX21hcCwKKwkJCQkJICAgU3ViUGxhblJUSW5mbyAq cnRpbmZvLCBJbmRleCBydGkpCit7CisJSW5kZXgJCXJ0b2Zmc2V0ID0gKHJ0aW5mbyA9PSBOVUxM KSA/IDAgOiBydGluZm8tPnJ0b2Zmc2V0OworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdl VGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCWZvciAoSW5kZXggcHJp b3JfcnRpID0gcnRvZmZzZXQgKyAxOyBwcmlvcl9ydGkgPCBydGk7ICsrcHJpb3JfcnRpKQorCXsK KwkJUmFuZ2VUYmxFbnRyeSAqcHJpb3JfcnRlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBj aGlsZCByZWwgb2YgYSBwYXJlbnQgdGhhdCBpcyBhIHJlbGF0aW9uLCBza2lwIGl0LgorCQkgKgor CQkgKiBTdWNoIHJhbmdlIHRhYmxlIGVudHJpZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkgbWVudGlv bmluZyB0aGUgc2NoZW1hCisJCSAqIGFuZCBuYW1lIG9mIHRoZSB0YWJsZSwgbm90IGJ5IGNvdW50 aW5nIHRoZW0gYXMgc2VwYXJhdGUgb2NjdXJyZW5jZXMKKwkJICogb2YgdGhlIHNhbWUgdGFibGUu CisJCSAqLworCQlpZiAodG9wX3J0aV9tYXBbcHJpb3JfcnRpIC0gMV0gIT0gcHJpb3JfcnRpKQor CQkJYnJlYWs7CisKKwkJLyogU2tpcCBqb2lucy4gKi8KKwkJcHJpb3JfcnRlID0gcnRfZmV0Y2go cHJpb3JfcnRpLCBydGFibGUpOworCQlpZiAocHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lO KQorCQkJY29udGludWU7CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAq LworCQlpZiAoc3RyY21wKHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFs aWFzbmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1 cGxpY2F0ZS4gKi8KKwkJKytvY2N1cnJlbmNlOworCX0KKworCXJldHVybiBvY2N1cnJlbmNlOwor fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIwMDBkMmI3MDgxCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaApAQCAtMCwwICsxLDUyIEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2lkZW50aWZpZXIuaAorICoJICBjcmVh dGUgYXBwcm9wcmlhdGUgaWRlbnRpZmllcnMgZm9yIHJhbmdlIHRhYmxlIGVudHJpZXMKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIFBHUEFfSURFTlRJRklFUl9I CisjZGVmaW5lIFBHUEFfSURFTlRJRklFUl9ICisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMu aCIKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9p ZGVudGlmaWVyCit7CisJY29uc3QgY2hhciAqYWxpYXNfbmFtZTsKKwlpbnQJCQlvY2N1cnJlbmNl OworCWNvbnN0IGNoYXIgKnBhcnRuc3A7CisJY29uc3QgY2hhciAqcGFydHJlbDsKKwljb25zdCBj aGFyICpwbGFuX25hbWU7Cit9IHBncGFfaWRlbnRpZmllcjsKKworLyogQ29udmVuaWVuY2UgZnVu Y3Rpb24gZm9yIGNvbXBhcmluZyBwb3NzaWJseS1OVUxMIHN0cmluZ3MuICovCitzdGF0aWMgaW5s aW5lIGJvb2wKK3N0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGNvbnN0IGNoYXIgKmEsIGNvbnN0 IGNoYXIgKmIpCit7CisJaWYgKGEgPT0gYikKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAoYSA9 PSBOVUxMIHx8IGIgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCWVsc2UKKwkJcmV0dXJuIHN0 cmNtcChhLCBiKSA9PSAwOworfQorCitleHRlcm4gY29uc3QgY2hhciAqcGdwYV9pZGVudGlmaWVy X3N0cmluZyhjb25zdCBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gdm9pZCBwZ3BhX2Nv bXB1dGVfaWRlbnRpZmllcl9ieV9ydGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJ CQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gaW50CXBncGFfY29tcHV0 ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCSAg IEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMp OworZXh0ZXJuIHBncGFfaWRlbnRpZmllciAqcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3Bs YW5uZWRfc3RtdChQbGFubmVkU3RtdCAqcHN0bXQpOworCitleHRlcm4gSW5kZXggcGdwYV9jb21w dXRlX3J0aV9mcm9tX2lkZW50aWZpZXIoaW50IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAg cGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50 aWZpZXIgKnJpZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2pvaW4uYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVjOGUxYTY2NmVjCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpAQCAtMCwwICsxLDYy OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9qb2luLmMKKyAqCSAgYW5hbHlz aXMgb2Ygam9pbnMgaW4gUGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVk ZSAicGdwYV9zY2FuLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5v ZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3ByaW50LmgiCisjaW5jbHVkZSAicGFy c2VyL3BhcnNldHJlZS5oIgorCisvKgorICogVGVtcG9yYXJ5IG9iamVjdCB1c2VkIHdoZW4gdW5y b2xsaW5nIGEgam9pbiB0cmVlLgorICovCitzdHJ1Y3QgcGdwYV9qb2luX3Vucm9sbGVyCit7CisJ dW5zaWduZWQJbmFsbG9jYXRlZDsKKwl1bnNpZ25lZAludXNlZDsKKwlQbGFuCSAgICpvdXRlcl9z dWJwbGFuOworCUVsaWRlZE5vZGUgKm91dGVyX2VsaWRlZF9ub2RlOworCWJvb2wJCW91dGVyX2Jl bmVhdGhfYW55X2dhdGhlcjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCVBsYW4J ICAqKmlubmVyX3N1YnBsYW5zOworCUVsaWRlZE5vZGUgKippbm5lcl9lbGlkZWRfbm9kZXM7CisJ cGdwYV9qb2luX3Vucm9sbGVyICoqaW5uZXJfdW5yb2xsZXJzOworCWJvb2wJICAgKmlubmVyX2Jl bmVhdGhfYW55X2dhdGhlcjsKK307CisKK3N0YXRpYyBwZ3BhX2pvaW5fc3RyYXRlZ3kgcGdwYV9k ZWNvbXBvc2Vfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJ CQkJICBQbGFuICpwbGFuLAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsb3V0ZXIsCisJCQkJCQkJ CQkJCSAgUGxhbiAqKnJlYWxpbm5lciwKKwkJCQkJCQkJCQkJICBFbGlkZWROb2RlICoqZWxpZGVk cmVhbG91dGVyLAorCQkJCQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsaW5uZXIsCisJ CQkJCQkJCQkJCSAgYm9vbCAqZm91bmRfYW55X291dGVyX2dhdGhlciwKKwkJCQkJCQkJCQkJICBi b29sICpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKTsKK3N0YXRpYyBFbGlkZWROb2RlICpwZ3BhX2Rl c2NlbmRfbm9kZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuKTsKK3N0YXRpYyBFbGlk ZWROb2RlICpwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4g KipwbGFuLAorCQkJCQkJCQkJCSAgIGJvb2wgKmZvdW5kX2FueV9nYXRoZXIpOworc3RhdGljIGJv b2wgcGdwYV9kZXNjZW5kX2FueV91bmlxdWUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxh biwKKwkJCQkJCQkJCUVsaWRlZE5vZGUgKiplbGlkZWRfbm9kZSk7CisKK3N0YXRpYyBib29sIGlz X3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQoUGxhbiAqcGxhbik7CitzdGF0aWMgYm9vbCBpc19zb3J0 aW5nX3BsYW4oUGxhbiAqcGxhbik7CisKKy8qCisgKiBDcmVhdGUgYW4gaW5pdGlhbGx5LWVtcHR5 IG9iamVjdCBmb3IgdW5yb2xsaW5nIGpvaW5zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRl cyBhIGhlbHBlciBvYmplY3QgdGhhdCBjYW4gbGF0ZXIgYmUgdXNlZCB0byBjcmVhdGUgYQorICog cGdwYV91bnJvbGxlZF9qb2luLCBhZnRlciBmaXJzdCBjYWxsaW5nIHBncGFfdW5yb2xsX2pvaW4g b25lIG9yIG1vcmUgdGltZXMuCisgKi8KK3BncGFfam9pbl91bnJvbGxlciAqCitwZ3BhX2NyZWF0 ZV9qb2luX3Vucm9sbGVyKHZvaWQpCit7CisJcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9s bGVyOworCisJam9pbl91bnJvbGxlciA9IHBhbGxvYzBfb2JqZWN0KHBncGFfam9pbl91bnJvbGxl cik7CisJam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCA9IDQ7CisJam9pbl91bnJvbGxlci0+c3Ry YXRlZ3kgPQorCQlwYWxsb2NfYXJyYXkocGdwYV9qb2luX3N0cmF0ZWd5LCBqb2luX3Vucm9sbGVy LT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCXBhbGxv Y19hcnJheShQbGFuICosIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xs ZXItPmlubmVyX2VsaWRlZF9ub2RlcyA9CisJCXBhbGxvY19hcnJheShFbGlkZWROb2RlICosIGpv aW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVy cyA9CisJCXBhbGxvY19hcnJheShwZ3BhX2pvaW5fdW5yb2xsZXIgKiwgam9pbl91bnJvbGxlci0+ bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0K KwkJcGFsbG9jX2FycmF5KGJvb2wsIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCisJcmV0 dXJuIGpvaW5fdW5yb2xsZXI7Cit9CisKKy8qCisgKiBVbnJvbGwgb25lIGxldmVsIG9mIGFuIHVu cm9sbGFibGUgam9pbiB0cmVlLgorICoKKyAqIE91ciBiYXNpYyBnb2FsIGhlcmUgaXMgdG8gdW5y b2xsIGpvaW4gdHJlZXMgYXMgdGhleSBvY2N1ciBpbiB0aGUgUGxhbgorICogdHJlZSBpbnRvIGEg c2ltcGxlciBhbmQgbW9yZSByZWd1bGFyIHN0cnVjdHVyZSB0aGF0IHdlIGNhbiBtb3JlIGVhc2ls eQorICogdXNlIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFVucm9sbGluZyBpcyBvdXRlci1kZWVw LCBzbyBpZiB0aGUgcGxhbiB0cmVlCisgKiBoYXMgSm9pbjEoSm9pbjIoQSxCKSxKb2luMyhDLEQp KSwgdGhlIHNhbWUgam9pbiB1bnJvbGxlciBvYmplY3Qgc2hvdWxkIGJlCisgKiB1c2VkIGZvciBK b2luMSBhbmQgSm9pbjIsIGJ1dCBhIGRpZmZlcmVudCBvbmUgd2lsbCBiZSBuZWVkZWQgZm9yIEpv aW4zLAorICogc2luY2UgdGhhdCBpbnZvbHZlcyBhIGpvaW4gd2l0aGluIHRoZSAqaW5uZXIqIHNp ZGUgb2YgYW5vdGhlciBqb2luLgorICoKKyAqIHBncGFfcGxhbl93YWxrZXIgY3JlYXRlcyBhICJ0 b3AgbGV2ZWwiIGpvaW4gdW5yb2xsZXIgb2JqZWN0IHdoZW4gaXQKKyAqIGVuY291bnRlcnMgYSBq b2luIGluIGEgcG9ydGlvbiBvZiB0aGUgcGxhbiB0cmVlIGluIHdoaWNoIG5vIGpvaW4gdW5yb2xs ZXIKKyAqIGlzIGFscmVhZHkgYWN0aXZlLiBGcm9tIHRoZXJlLCB0aGlzIGZ1bmN0aW9uIGlzIHJl c3BvbnNpYmxlIGZvciBkZXRlcm1pbmcKKyAqIHRvIHdoYXQgcG9ydGlvbiBvZiB0aGUgcGxhbiB0 cmVlIHRoYXQgam9pbiB1bnJvbGxlciBhcHBsaWVzLCBhbmQgZm9yCisgKiBjcmVhdGluZyBhbnkg c3Vib3JkaW5hdGUgam9pbiB1bnJvbGxlciBvYmplY3RzIHRoYXQgYXJlIG5lZWRlZCBhcyBhIHJl c3VsdAorICogb2Ygbm9uLW91dGVyLWRlZXAgam9pbiB0cmVlcy4gV2UgZG8gdGhpcyBieSByZXR1 cm5pbmcgdGhlIGpvaW4gdW5yb2xsZXIKKyAqIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdXNlZCBm b3IgZnVydGhlciB0cmF2ZXJzYWwgb2YgdGhlIG91dGVyIGFuZCBpbm5lcgorICogc3VidHJlZXMg b2YgdGhlIGN1cnJlbnQgcGxhbiBub2RlIHZpYSAqb3V0ZXJfam9pbl91bnJvbGxlciBhbmQKKyAq ICppbm5lcl9qb2luX3Vucm9sbGVyLCByZXNwZWN0aXZlbHkuCisgKi8KK3ZvaWQKK3BncGFfdW5y b2xsX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJ CQkJIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpv aW5fdW5yb2xsZXIsCisJCQkJIHBncGFfam9pbl91bnJvbGxlciAqKm91dGVyX2pvaW5fdW5yb2xs ZXIsCisJCQkJIHBncGFfam9pbl91bnJvbGxlciAqKmlubmVyX2pvaW5fdW5yb2xsZXIpCit7CisJ cGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5OworCVBsYW4JICAgKnJlYWxpbm5lciwKKwkJCSAg ICpyZWFsb3V0ZXI7CisJRWxpZGVkTm9kZSAqZWxpZGVkaW5uZXIsCisJCQkgICAqZWxpZGVkb3V0 ZXI7CisJaW50CQkJbjsKKwlib29sCQlmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyID0gZmFsc2U7CisJ Ym9vbAkJZm91bmRfYW55X2lubmVyX2dhdGhlciA9IGZhbHNlOworCisJQXNzZXJ0KGpvaW5fdW5y b2xsZXIgIT0gTlVMTCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gcGFzcyB0aGUgam9pbl91bnJv bGxlciBvYmplY3QgZG93biB0aHJvdWdoIGNlcnRhaW4gdHlwZXMgb2YKKwkgKiBwbGFuIG5vZGVz IC0tIGFueXRoaW5nIHRoYXQncyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3ks IGFuZAorCSAqIGFueSBvdGhlciBub2RlcyB0aGF0IGNhbiBvY2N1ciBpbiBhIGpvaW4gdHJlZSBk ZXNwaXRlIG5vdCBiZWluZyBzY2FucworCSAqIG9yIGpvaW5zLgorCSAqCisJICogVGhpcyBpbmNs dWRlczoKKwkgKgorCSAqICgxKSBNYXRlcmlhbGl6ZSwgTWVtb2l6ZSwgYW5kIEhhc2ggbm9kZXMs IHdoaWNoIGFyZSBwYXJ0IG9mIHRoZSBqb2luCisJICogc3RyYXRlZ3ksCisJICoKKwkgKiAoMikg R2F0aGVyIGFuZCBHYXRoZXIgTWVyZ2Ugbm9kZXMsIHdoaWNoIGNhbiBvY2N1ciBhdCBhbnkgcG9p bnQgaW4gdGhlCisJICogam9pbiB0cmVlIHdoZXJlIHRoZSBwbGFubmVyIGRlY2lkZWQgdG8gaW5p dGlhdGUgcGFyYWxsZWxpc20sCisJICoKKwkgKiAoMykgU29ydCBhbmQgSW5jcmVtZW50YWxTb3J0 IG5vZGVzLCB3aGljaCBjYW4gb2NjdXIgYmVuZWF0aCBNZXJnZUpvaW4KKwkgKiBvciBHYXRoZXJN ZXJnZSwKKwkgKgorCSAqICg0KSBBZ2cgYW5kIFVuaXF1ZSBub2Rlcywgd2hpY2ggY2FuIG9jY3Vy IHdoZW4gd2UgZGVjaWRlIHRvIG1ha2UgdGhlCisJICogbnVsbGFibGUgc2lkZSBvZiBhIHNlbWlq b2luIHVuaXF1ZSBhbmQgdGhlbiBqb2luIHRoZSByZXN1bHQsIGFuZAorCSAqCisJICogKDUpIFJl c3VsdCBub2RlcyB3aXRoIGNoaWxkcmVuLCB3aGljaCBjYW4gYmUgYWRkZWQgZWl0aGVyIHRvIHBy b2plY3QgdG8KKwkgKiBlbmZvcmNlIGEgb25lLXRpbWUgZmlsdGVyIChidXQgUmVzdWx0IG5vZGVz IHdpdGhvdXQgY2hpbGRyZW4gYXJlCisJICogZGVnZW5lcmF0ZSBzY2FucyBvciBqb2lucykuCisJ ICovCisJaWYgKElzQShwbGFuLCBNYXRlcmlhbCkgfHwgSXNBKHBsYW4sIE1lbW9pemUpIHx8IElz QShwbGFuLCBIYXNoKQorCQl8fCBJc0EocGxhbiwgR2F0aGVyKSB8fCBJc0EocGxhbiwgR2F0aGVy TWVyZ2UpCisJCXx8IGlzX3NvcnRpbmdfcGxhbihwbGFuKSB8fCBJc0EocGxhbiwgQWdnKSB8fCBJ c0EocGxhbiwgVW5pcXVlKQorCQl8fCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKHBsYW4pKQor CXsKKwkJKm91dGVyX2pvaW5fdW5yb2xsZXIgPSBqb2luX3Vucm9sbGVyOworCQlyZXR1cm47CisJ fQorCisJLyoKKwkgKiBTaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgbm9kZXMgdGhhdCByZXF1 aXJlIHBhc3MtdGhyb3VnaCB0cmVhdG1lbnQsCisJICogdGhpcyBzaG91bGQgYmUgYW4gdW5yb2xs YWJsZSBqb2luLgorCSAqLworCXN0cmF0ZWd5ID0gcGdwYV9kZWNvbXBvc2Vfam9pbih3YWxrZXIs IHBsYW4sCisJCQkJCQkJCSAgICZyZWFsb3V0ZXIsICZyZWFsaW5uZXIsCisJCQkJCQkJCSAgICZl bGlkZWRvdXRlciwgJmVsaWRlZGlubmVyLAorCQkJCQkJCQkgICAmZm91bmRfYW55X291dGVyX2dh dGhlciwKKwkJCQkJCQkJICAgJmZvdW5kX2FueV9pbm5lcl9nYXRoZXIpOworCisJLyogSWYgb3Vy IHdvcmtzcGFjZSBpcyBmdWxsLCBleHBhbmQgaXQuICovCisJaWYgKGpvaW5fdW5yb2xsZXItPm51 c2VkID49IGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpCisJeworCQlqb2luX3Vucm9sbGVyLT5u YWxsb2NhdGVkICo9IDI7CisJCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJCXJlcGFsbG9j X2FycmF5KGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5LAorCQkJCQkJICAgcGdwYV9qb2luX3N0cmF0 ZWd5LAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xs ZXItPmlubmVyX3N1YnBsYW5zID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlu bmVyX3N1YnBsYW5zLAorCQkJCQkJICAgUGxhbiAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+ bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcyA9CisJCQly ZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMsCisJCQkJCQkg ICBFbGlkZWROb2RlICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJ am9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCXJlcGFsbG9jX2Fy cmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCSAgIGJv b2wsCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxl ci0+aW5uZXJfdW5yb2xsZXJzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlu bmVyX3Vucm9sbGVycywKKwkJCQkJCSAgIHBncGFfam9pbl91bnJvbGxlciAqLAorCQkJCQkJICAg am9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJfQorCisJLyoKKwkgKiBTaW5jZSB3ZSdyZSBm bGF0dGVuaW5nIG91dGVyLWRlZXAgam9pbiB0cmVlcywgaXQgZm9sbG93cyB0aGF0IGlmIHRoZQor CSAqIG91dGVyIHNpZGUgaXMgc3RpbGwgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBzaG91bGQgYmUg dW5yb2xsZWQgaW50byB0aGlzCisJICogc2FtZSBvYmplY3QuIE90aGVyd2lzZSwgd2UndmUgcmVh Y2hlZCB0aGUgbGltaXQgb2Ygd2hhdCB3ZSBjYW4gdW5yb2xsCisJICogaW50byB0aGlzIG9iamVj dCBhbmQgbXVzdCByZW1lbWJlciB0aGUgb3V0ZXIgc2lkZSBhcyB0aGUgZmluYWwgb3V0ZXIKKwkg KiBzdWJwbGFuLgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYmIHBncGFfaXNfam9p bihyZWFsb3V0ZXIpKQorCQkqb3V0ZXJfam9pbl91bnJvbGxlciA9IGpvaW5fdW5yb2xsZXI7CisJ ZWxzZQorCXsKKwkJam9pbl91bnJvbGxlci0+b3V0ZXJfc3VicGxhbiA9IHJlYWxvdXRlcjsKKwkJ am9pbl91bnJvbGxlci0+b3V0ZXJfZWxpZGVkX25vZGUgPSBlbGlkZWRvdXRlcjsKKwkJam9pbl91 bnJvbGxlci0+b3V0ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCWJlbmVhdGhfYW55X2dhdGhl ciB8fCBmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIGlu bmVyIHN1YnBsYW4uIElmIGl0J3MgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBuZWVkcyB0byBiZQor CSAqIGZsYXR0ZW5lZCBpbiB0dXJuLCBidXQgaW50byBhIG5ldyB1bnJvbGxlciBvYmplY3QsIG5v dCB0aGlzIG9uZS4KKwkgKi8KKwluID0gam9pbl91bnJvbGxlci0+bnVzZWQrKzsKKwlqb2luX3Vu cm9sbGVyLT5zdHJhdGVneVtuXSA9IHN0cmF0ZWd5OworCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1 YnBsYW5zW25dID0gcmVhbGlubmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rl c1tuXSA9IGVsaWRlZGlubmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dh dGhlcltuXSA9CisJCWJlbmVhdGhfYW55X2dhdGhlciB8fCBmb3VuZF9hbnlfaW5uZXJfZ2F0aGVy OworCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihyZWFsaW5uZXIpKQor CQkqaW5uZXJfam9pbl91bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwll bHNlCisJCSppbm5lcl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlqb2luX3Vucm9sbGVyLT5pbm5l cl91bnJvbGxlcnNbbl0gPSAqaW5uZXJfam9pbl91bnJvbGxlcjsKK30KKworLyoKKyAqIFVzZSB0 aGUgZGF0YSB3ZSd2ZSBhY2N1bXVsYXRlZCBpbiBhIHBncGFfam9pbl91bnJvbGxlciBvYmplY3Qg dG8gY29uc3RydWN0CisgKiBhIHBncGFfdW5yb2xsZWRfam9pbi4KKyAqLworcGdwYV91bnJvbGxl ZF9qb2luICoKK3BncGFfYnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlciwKKwkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7 CisJcGdwYV91bnJvbGxlZF9qb2luICp1am9pbjsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBXZSBz aG91bGRuJ3QgaGF2ZSBnb25lIGV2ZW4gc28gZmFyIGFzIHRvIGNyZWF0ZSBhIGpvaW4gdW5yb2xs ZXIgdW5sZXNzCisJICogd2UgZm91bmQgYXQgbGVhc3Qgb25lIHVucm9sbGFibGUgam9pbi4KKwkg Ki8KKwlBc3NlcnQoam9pbl91bnJvbGxlci0+bnVzZWQgPiAwKTsKKworCS8qIEFsbG9jYXRlIHJl c3VsdCBzdHJ1Y3R1cmVzLiAqLworCXVqb2luID0gcGFsbG9jMF9vYmplY3QocGdwYV91bnJvbGxl ZF9qb2luKTsKKwl1am9pbi0+bmlubmVyID0gam9pbl91bnJvbGxlci0+bnVzZWQ7CisJdWpvaW4t PnN0cmF0ZWd5ID0gcGFsbG9jMF9hcnJheShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xs ZXItPm51c2VkKTsKKwl1am9pbi0+aW5uZXIgPSBwYWxsb2MwX2FycmF5KHBncGFfam9pbl9tZW1i ZXIsIGpvaW5fdW5yb2xsZXItPm51c2VkKTsKKworCS8qIEhhbmRsZSB0aGUgb3V0ZXJtb3N0IGpv aW4uICovCisJdWpvaW4tPm91dGVyLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5vdXRlcl9zdWJwbGFu OworCXVqb2luLT5vdXRlci5lbGlkZWRfbm9kZSA9IGpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRl ZF9ub2RlOworCXVqb2luLT5vdXRlci5zY2FuID0KKwkJcGdwYV9idWlsZF9zY2FuKHdhbGtlciwg dWpvaW4tPm91dGVyLnBsYW4sCisJCQkJCQl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUsCisJCQkJ CQlqb2luX3Vucm9sbGVyLT5vdXRlcl9iZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQl0cnVlKTsK KworCS8qCisJICogV2Ugd2FudCB0aGUgam9pbnMgZnJvbSB0aGUgZGVlcGVzdCBwYXJ0IG9mIHRo ZSBwbGFuIHRyZWUgdG8gYXBwZWFyCisJICogZmlyc3QgaW4gdGhlIHJlc3VsdCBvYmplY3QsIGJ1 dCB0aGUgam9pbiB1bnJvbGxlciBhZGRzIHRoZW0gaW4gZXhhY3RseQorCSAqIHRoZSByZXZlcnNl IG9mIHRoYXQgb3JkZXIsIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgb3JkZXIgb2YgdGhlIGFycmF5 cworCSAqIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCByZXN1bHQuCisJICovCisJZm9yIChp ID0gMDsgaSA8IGpvaW5fdW5yb2xsZXItPm51c2VkOyArK2kpCisJeworCQlpbnQJCQlrID0gam9p bl91bnJvbGxlci0+bnVzZWQgLSBpIC0gMTsKKworCQkvKiBDb3B5IHN0cmF0ZWd5LCBQbGFuLCBh bmQgRWxpZGVkTm9kZS4gKi8KKwkJdWpvaW4tPnN0cmF0ZWd5W2ldID0gam9pbl91bnJvbGxlci0+ c3RyYXRlZ3lba107CisJCXVqb2luLT5pbm5lcltpXS5wbGFuID0gam9pbl91bnJvbGxlci0+aW5u ZXJfc3VicGxhbnNba107CisJCXVqb2luLT5pbm5lcltpXS5lbGlkZWRfbm9kZSA9IGpvaW5fdW5y b2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlc1trXTsKKworCQkvKgorCQkgKiBGaWxsIGluIHJlbWFp bmluZyBkZXRhaWxzLCB1c2luZyBlaXRoZXIgdGhlIG5lc3RlZCBqb2luIHVucm9sbGVyLAorCQkg KiBvciBieSBkZXJpdmluZyB0aGVtIGZyb20gdGhlIHBsYW4gYW5kIGVsaWRlZCBub2Rlcy4KKwkJ ICovCisJCWlmIChqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNba10gIT0gTlVMTCkKKwkJ CXVqb2luLT5pbm5lcltpXS51bnJvbGxlZF9qb2luID0KKwkJCQlwZ3BhX2J1aWxkX3Vucm9sbGVk X2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCSBqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNb a10pOworCQllbHNlCisJCQl1am9pbi0+aW5uZXJbaV0uc2NhbiA9CisJCQkJcGdwYV9idWlsZF9z Y2FuKHdhbGtlciwgdWpvaW4tPmlubmVyW2ldLnBsYW4sCisJCQkJCQkJCXVqb2luLT5pbm5lcltp XS5lbGlkZWRfbm9kZSwKKwkJCQkJCQkJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlf Z2F0aGVyW2tdLAorCQkJCQkJCQl0cnVlKTsKKwl9CisKKwlyZXR1cm4gdWpvaW47Cit9CisKKy8q CisgKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHBncGFfam9pbl91bnJvbGxlci4KKyAqLwor dm9pZAorcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIocGdwYV9qb2luX3Vucm9sbGVyICpqb2lu X3Vucm9sbGVyKQoreworCXBmcmVlKGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5KTsKKwlwZnJlZShq b2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5u ZXJfZWxpZGVkX25vZGVzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMp OworCXBmcmVlKGpvaW5fdW5yb2xsZXIpOworfQorCisvKgorICogSWRlbnRpZnkgdGhlIGpvaW4g c3RyYXRlZ3kgdXNlZCBieSBhIGpvaW4gYW5kIHRoZSAicmVhbCIgaW5uZXIgYW5kIG91dGVyCisg KiBwbGFucy4KKyAqCisgKiBGb3IgZXhhbXBsZSwgYSBIYXNoIEpvaW4gYWx3YXlzIGhhcyBhIEhh c2ggbm9kZSBvbiB0aGUgaW5uZXIgc2lkZSwgYnV0CisgKiBmb3IgYWxsIGludGVudHMgYW5kIHB1 cnBvc2VzIHRoZSByZWFsIGlubmVyIGlucHV0IGlzIHRoZSBIYXNoIG5vZGUncyBjaGlsZCwKKyAq IG5vdCB0aGUgSGFzaCBub2RlIGl0c2VsZi4KKyAqCisgKiBMaWtld2lzZSwgYSBNZXJnZSBKb2lu IG1heSBoYXZlIFNvcnQgbm90ZSBvbiB0aGUgaW5uZXIgb3Igb3V0ZXIgc2lkZTsgaWYKKyAqIGl0 IGRvZXMsIHRoZSByZWFsIGlucHV0IHRvIHRoZSBqb2luIGlzIHRoZSBTb3J0IG5vZGUncyBjaGls ZCwgbm90IHRoZQorICogU29ydCBub2RlIGl0c2VsZi4KKyAqCisgKiBJbiBhZGRpdGlvbiwgd2l0 aCBhIE1lcmdlIEpvaW4gb3IgYSBOZXN0ZWQgTG9vcCwgdGhlIGpvaW4gcGxhbm5pbmcgY29kZQor ICogbWF5IGFkZCBhZGRpdGlvbmFsIG5vZGVzIHN1Y2ggYXMgTWF0ZXJpYWxpemUgb3IgTWVtb2l6 ZS4gV2UgcmVnYXJkIHRoZXNlCisgKiBhcyBhbiBhc3BlY3Qgb2YgdGhlIGpvaW4gc3RyYXRlZ3ku IEFzIGluIHRoZSBwcmV2aW91cyBjYXNlcywgdGhlIHRydWUgaW5wdXQKKyAqIHRvIHRoZSBqb2lu IGlzIHRoZSB1bmRlcmx5aW5nIG5vZGUuCisgKgorICogSG93ZXZlciwgaWYgYW55IGludm9sdmVk IGNoaWxkIG5vZGUgcHJldmlvdXNseSBoYWQgYSBub3ctZWxpZGVkIG5vZGUgc3RhY2tlZAorICog b24gdG9wLCB0aGVuIHdlIGNhbid0ICJsb29rIHRocm91Z2giIHRoYXQgbm9kZSAtLSBpbmRlZWQs IHdoYXQncyBnb2luZyB0byBiZQorICogcmVsZXZhbnQgZm9yIG91ciBwdXJwb3NlcyBpcyB0aGUg RWxpZGVkTm9kZSBvbiB0b3Agb2YgdGhhdCBwbGFuIG5vZGUsIHJhdGhlcgorICogdGhhbiB0aGUg cGxhbiBub2RlIGl0c2VsZi4KKyAqCisgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxpZGVkIG5v ZGVzLCB3ZSB3YW50IHRoYXQgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuCisgKiB1cHBlcm1vc3Qg aW4gdGhlIHBsYW4gdHJlZSBwcmlvciB0byBzZXRyZWZzIHByb2Nlc3Npbmc7IHdlIGV4cGVjdCB0 byBmaW5kCisgKiB0aGF0IG9uZSBsYXN0IGluIHRoZSBsaXN0IG9mIGVsaWRlZCBub2Rlcy4KKyAq CisgKiBPbiByZXR1cm4gKnJlYWxvdXRlciBhbmQgKnJlYWxpbm5lciB3aWxsIGhhdmUgYmVlbiBz ZXQgdG8gdGhlIHJlYWwgaW5uZXIKKyAqIGFuZCByZWFsIG91dGVyIHBsYW5zIHRoYXQgd2UgaWRl bnRpZmllZCwgYW5kICplbGlkZWRyZWFsb3V0ZXIgYW5kCisgKiAqZWxpZGVkcmVhbGlubmVyIHRv IHRoZSBsYXN0IG9mIGFueSBjb3JyZXNwb2RpbmcgZWxpZGVkIG5vZGVzLgorICogQWRkaXRpb25h bGx5LCAqZm91bmRfYW55X291dGVyX2dhdGhlciBhbmQgKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIg d2lsbAorICogYmUgc2V0IHRvIHRydWUgaWYgd2UgbG9va2VkIHRocm91Z2ggYSBHYXRoZXIgb3Ig R2F0aGVyIE1lcmdlIG5vZGUgb24KKyAqIHRoYXQgc2lkZSBvZiB0aGUgam9pbiwgYW5kIGZhbHNl IG90aGVyd2lzZS4KKyAqLworc3RhdGljIHBncGFfam9pbl9zdHJhdGVneQorcGdwYV9kZWNvbXBv c2Vfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJ CQkJUGxhbiAqKnJlYWxvdXRlciwgUGxhbiAqKnJlYWxpbm5lciwKKwkJCQkJRWxpZGVkTm9kZSAq KmVsaWRlZHJlYWxvdXRlciwgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJYm9v bCAqZm91bmRfYW55X291dGVyX2dhdGhlciwgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcikK K3sKKwlQbGFubmVkU3RtdCAqcHN0bXQgPSB3YWxrZXItPnBzdG10OworCUpvaW5UeXBlCWpvaW50 eXBlID0gKChKb2luICopIHBsYW4pLT5qb2ludHlwZTsKKwlQbGFuCSAgICpvdXRlcnBsYW4gPSBw bGFuLT5sZWZ0dHJlZTsKKwlQbGFuCSAgICppbm5lcnBsYW4gPSBwbGFuLT5yaWdodHRyZWU7CisJ RWxpZGVkTm9kZSAqZWxpZGVkb3V0ZXI7CisJRWxpZGVkTm9kZSAqZWxpZGVkaW5uZXI7CisJcGdw YV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5OworCWJvb2wJCXVuaXF1ZW91dGVyOworCWJvb2wJCXVu aXF1ZWlubmVyOworCisJZWxpZGVkb3V0ZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQs IG91dGVycGxhbik7CisJZWxpZGVkaW5uZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQs IGlubmVycGxhbik7CisJKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwkqZm91bmRf YW55X2lubmVyX2dhdGhlciA9IGZhbHNlOworCisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsK KwkJY2FzZSBUX01lcmdlSm9pbjoKKworCQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZl IGNob3NlbiB0byBwbGFjZSBhIE1hdGVyaWFsIG5vZGUgb24gdGhlCisJCQkgKiBpbm5lciBzaWRl IG9mIHRoZSBNZXJnZUpvaW47IGlmIHRoaXMgaXMgcHJlc2VudCwgd2UgcmVjb3JkIGl0CisJCQkg KiBhcyBwYXJ0IG9mIHRoZSBqb2luIHN0cmF0ZWd5LgorCQkJICovCisJCQlpZiAoZWxpZGVkaW5u ZXIgPT0gTlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBNYXRlcmlhbCkpCisJCQl7CisJCQkJZWxpZGVk aW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRl Z3kgPSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlz dHJhdGVneSA9IEpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOOworCisJCQkvKgorCQkJICogRm9yIGEg TWVyZ2VKb2luLCBlaXRoZXIgdGhlIG91dGVyIG9yIHRoZSBpbm5lciBzdWJwbGFuLCBvcgorCQkJ ICogYm90aCwgbWF5IGhhdmUgbmVlZGVkIHRvIGJlIHNvcnRlZDsgd2UgbXVzdCBkaXNyZWdhcmQg YW55IFNvcnQKKwkJCSAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIHRvIGZpbmQgdGhlIHJlYWwg aW5uZXIgb3Igb3V0ZXIKKwkJCSAqIHN1YnBsYW4uCisJCQkgKi8KKwkJCWlmIChlbGlkZWRvdXRl ciA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbihvdXRlcnBsYW4pKQorCQkJCWVsaWRlZG91dGVy ID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZvdXRlcnBsYW4pOworCQkJaWYgKGVsaWRlZGlu bmVyID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKGlubmVycGxhbikpCisJCQkJZWxpZGVkaW5u ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQlicmVhazsKKwor CQljYXNlIFRfTmVzdExvb3A6CisKKwkJCS8qCisJCQkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBj aG9zZW4gdG8gcGxhY2UgYSBNYXRlcmlhbCBvciBNZW1vaXplIG5vZGUKKwkJCSAqIG9uIHRoZSBp bm5lciBzaWRlIG9mIHRoZSBOZXN0TG9vcDsgaWYgdGhpcyBpcyBwcmVzZW50LCB3ZQorCQkJICog cmVjb3JkIGl0IGFzIHBhcnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChl bGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShpbm5lcnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJ CQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJ CQlzdHJhdGVneSA9IEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVs c2UgaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWVtb2l6ZSkpCisJ CQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxh bik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJCX0KKwkJ CWVsc2UKKwkJCQlzdHJhdGVneSA9IEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTjsKKwkJCWJyZWFr OworCisJCWNhc2UgVF9IYXNoSm9pbjoKKworCQkJLyoKKwkJCSAqIFRoZSBpbm5lciBzdWJwbGFu IG9mIGEgSGFzaEpvaW4gaXMgYWx3YXlzIGEgSGFzaCBub2RlOyB0aGUgcmVhbAorCQkJICogaW5u ZXIgc3VicGxhbiBpcyB0aGUgSGFzaCBub2RlJ3MgY2hpbGQuCisJCQkgKi8KKwkJCUFzc2VydChJ c0EoaW5uZXJwbGFuLCBIYXNoKSk7CisJCQlBc3NlcnQoZWxpZGVkaW5uZXIgPT0gTlVMTCk7CisJ CQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJ CXN0cmF0ZWd5ID0gSlNUUkFUX0hBU0hfSk9JTjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJ CQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFn KHBsYW4pKTsKKwl9CisKKwkvKgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8g aW1wbGVtZW50IGEgc2VtaWpvaW4gYnkgZmlyc3QgbWFraW5nCisJICogdGhlIG51bGxhYmxlIHNp ZGUgb2YgdGhlIHBsYW4gdW5pcXVlLCBhbmQgdGhlbiBwZXJmb3JtaW5nIGEgbm9ybWFsIGpvaW4K KwkgKiBhZ2FpbnN0IHRoZSByZXN1bHQuIFRoZXJlZm9yZSwgd2UgbWlnaHQgbmVlZCB0byBkZXNj ZW5kIHRocm91Z2ggYQorCSAqIHVuaXF1ZSBub2RlIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBwbGFu LgorCSAqLworCXVuaXF1ZW91dGVyID0gcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZv dXRlcnBsYW4sICZlbGlkZWRvdXRlcik7CisJdW5pcXVlaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfYW55 X3VuaXF1ZShwc3RtdCwgJmlubmVycGxhbiwgJmVsaWRlZGlubmVyKTsKKworCS8qCisJICogVGhl IHBsYW5uZXIgbWF5IGhhdmUgZGVjaWRlZCB0byBwYXJhbGxlbGl6ZSBwYXJ0IG9mIHRoZSBqb2lu IHRyZWUsIHNvCisJICogd2UgY291bGQgZmluZCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9k ZSBoZXJlLiBOb3RlIHRoYXQsIGlmCisJICogcHJlc2VudCwgdGhpcyB3aWxsIGFwcGVhciBiZWxv dyBub2RlcyB3ZSBjb25zaWRlcmVkIGFzIHBhcnQgb2YgdGhlIGpvaW4KKwkgKiBzdHJhdGVneSwg YnV0IHdlIGNvdWxkIGZpbmQgYW5vdGhlciB1bmlxdWVuZXNzLWVuZm9yY2luZyBub2RlIGJlbG93 IHRoZQorCSAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UsIGlmIHByZXNlbnQuCisJICovCisJaWYg KGVsaWRlZG91dGVyID09IE5VTEwpCisJeworCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9h bnlfZ2F0aGVyKHBzdG10LCAmb3V0ZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZvdW5kX2FueV9vdXRl cl9nYXRoZXIpOworCQlpZiAoZm91bmRfYW55X291dGVyX2dhdGhlciAmJgorCQkJcGdwYV9kZXNj ZW5kX2FueV91bmlxdWUocHN0bXQsICZvdXRlcnBsYW4sICZlbGlkZWRvdXRlcikpCisJCQl1bmlx dWVvdXRlciA9IHRydWU7CisJfQorCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMKQorCXsKKwkJZWxp ZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJmlubmVycGxhbiwKKwkJ CQkJCQkJCQkJICBmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2FueV9pbm5l cl9nYXRoZXIgJiYKKwkJCXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmaW5uZXJwbGFu LCAmZWxpZGVkaW5uZXIpKQorCQkJdW5pcXVlaW5uZXIgPSB0cnVlOworCX0KKworCS8qCisJICog SXQncyBwb3NzaWJsZSB0aGF0IFJlc3VsdCBub2RlIGhhcyBiZWVuIGluc2VydGVkIGVpdGhlciB0 byBwcm9qZWN0IGEKKwkgKiB0YXJnZXQgbGlzdCBvciB0byBpbXBsZW1lbnQgYSBvbmUtdGltZSBm aWx0ZXIuIElmIHNvLCB3ZSBjYW4gZGVzY2VuZAorCSAqIHRocm91Z2h0IGl0LiBOb3RlIHRoYXQg YSByZXN1bHQgbm9kZSB3aXRob3V0IGEgY2hpbGQgd291bGQgYmUgYQorCSAqIGRlZ2VuZXJhdGUg c2NhbiBvciBqb2luLCBhbmQgbm90IHNvbWV0aGluZyB3ZSBjb3VsZCBkZXNjZW5kIHRocm91Z2gu CisJICoKKwkgKiBYWFguIEkgc3VzcGVjdCBpdCdzIHBvc3NpYmxlIGZvciB0aGlzIHRvIGhhcHBl biBhYm92ZSB0aGUgR2F0aGVyIG9yCisJICogR2F0aGVyIE1lcmdlIG5vZGUsIHRvbywgYnV0IGFw cGFyZW50bHkgd2UgaGF2ZSBubyB0ZXN0IGNhc2UgZm9yIHRoYXQKKwkgKiBzY2VuYXJpby4KKwkg Ki8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxk KG91dGVycGxhbikpCisJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZv dXRlcnBsYW4pOworCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3Jlc3VsdF9ub2RlX3dp dGhfY2hpbGQoaW5uZXJwbGFuKSkKKwkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShw c3RtdCwgJmlubmVycGxhbik7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBzZW1pam9pbiB0aGF0 IHdhcyBjb252ZXJ0ZWQgdG8gYW4gaW5uZXIgam9pbiBieSBtYWtpbmcgb25lCisJICogc2lkZSBv ciB0aGUgb3RoZXIgdW5pcXVlLCBtYWtlIGEgbm90ZSB0aGF0IHRoZSBpbm5lciBvciBvdXRlciBz dWJwbGFuLAorCSAqIGFzIGFwcHJvcHJpYXRlLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHF1ZXJ5 IHBsYW4gZmVhdHVyZSB3aGVuIHRoZSBtYWluCisJICogdHJlZSB0cmF2ZXJzYWwgcmVhY2hlcyBp dC4KKwkgKgorCSAqIENvbnZlcnNlbHksIGlmIHRoZSBwbGFubmVyIGNvdWxkIGhhdmUgbWFkZSBv bmUgc2lkZSBvZiB0aGUgam9pbiB1bmlxdWUKKwkgKiBhbmQgdGhlcmVieSBjb252ZXJ0ZWQgaXQg dG8gYW4gaW5uZXIgam9pbiwgYW5kIGNob3NlIG5vdCB0byBkbyBzbywgdGhhdAorCSAqIGlzIGFs c28gd29ydGggbm90aW5nLgorCSAqCisJICogTkI6IFRoaXMgY29kZSBjb3VsZCBhcHBlYXIgc2xp Z2h0bHkgaGlnaGVyIHVwIGluIGluIHRoaXMgZnVuY3Rpb24sIGJ1dAorCSAqIG5vbmUgb2YgdGhl IG5vZGVzIHRocm91Z2ggd2hpY2ggd2UganVzdCBkZXNjZW5kZWQgc2hvdWxkIGhhdmUKKwkgKiBh c3NvY2lhdGVkIFJUSXMuCisJICoKKwkgKiBOQjogVGhpcyBzZWVtcyBsaWtlIGEgc29tZXdoYXQg aGFja3kgd2F5IG9mIHBhc3NpbmcgaW5mb3JtYXRpb24gdXAgdG8KKwkgKiB0aGUgbWFpbiB0cmVl IHdhbGssIGJ1dCBJIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgYmV0dGVyIGlkZWEuCisJICovCisJ aWYgKHVuaXF1ZW91dGVyKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFR Rl9TRU1JSk9JTl9VTklRVUUsIG91dGVycGxhbik7CisJZWxzZSBpZiAoam9pbnR5cGUgPT0gSk9J Tl9SSUdIVF9TRU1JKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9T RU1JSk9JTl9OT05fVU5JUVVFLCBvdXRlcnBsYW4pOworCWlmICh1bmlxdWVpbm5lcikKKwkJcGdw YV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBpbm5l cnBsYW4pOworCWVsc2UgaWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSkKKwkJcGdwYV9hZGRfZnV0 dXJlX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgaW5uZXJwbGFu KTsKKworCS8qIFNldCBvdXRwdXQgcGFyYW1ldGVycy4gKi8KKwkqcmVhbG91dGVyID0gb3V0ZXJw bGFuOworCSpyZWFsaW5uZXIgPSBpbm5lcnBsYW47CisJKmVsaWRlZHJlYWxvdXRlciA9IGVsaWRl ZG91dGVyOworCSplbGlkZWRyZWFsaW5uZXIgPSBlbGlkZWRpbm5lcjsKKwlyZXR1cm4gc3RyYXRl Z3k7Cit9CisKKy8qCisgKiBEZXNjZW5kIHRocm91Z2ggYSBQbGFuIG5vZGUgaW4gYSBqb2luIHRy ZWUgdGhhdCB0aGUgY2FsbGVyIGhhcyBkZXRlcm1pbmVkCisgKiB0byBiZSBpcnJlbGV2YW50Lgor ICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0IG9mIGFueSBlbGlkZWQg bm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUuCisgKi8KK3N0YXRpYyBF bGlkZWROb2RlICoKK3BncGFfZGVzY2VuZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAq KnBsYW4pCit7CisJKnBsYW4gPSAoKnBsYW4pLT5sZWZ0dHJlZTsKKwlyZXR1cm4gcGdwYV9sYXN0 X2VsaWRlZF9ub2RlKHBzdG10LCAqcGxhbik7Cit9CisKKy8qCisgKiBEZXNjZW5kIHRocm91Z2gg YSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUsIGlmIHByZXNlbnQsIGFuZCBhbnkgU29ydAor ICogb3IgSW5jcmVtZW50YWxTb3J0IG5vZGUgb2NjdXJyaW5nIHVuZGVyIGEgR2F0aGVyIE1lcmdl LgorICoKKyAqIENhbGxlciBzaG91bGQgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZXJlIGlzIG5vIEVs aWRlZE5vZGUgcGVydGFpbmluZyB0bworICogdGhlIGluaXRpYWwgdmFsdWUgb2YgKnBsYW4uCisg KgorICogVXBkYXRlcyAqcGxhbiwgYW5kIHJldHVybnMgdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBu b2RlcyBwZXJ0YWluaW5nIHRvIHRoZQorICogbmV3IHBsYW4gbm9kZS4gU2V0cyAqZm91bmRfYW55 X2dhdGhlciA9IHRydWUgaWYgZWl0aGVyIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIHdhcyBm b3VuZCwgYW5kIG90aGVyd2lzZSBsZWF2ZXMgaXQgdW5jaGFuZ2VkLgorICovCitzdGF0aWMgRWxp ZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBs YW4gKipwbGFuLAorCQkJCQkJYm9vbCAqZm91bmRfYW55X2dhdGhlcikKK3sKKwlpZiAoSXNBKCpw bGFuLCBHYXRoZXIpKQorCXsKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4g cGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOworCX0KKworCWlmIChJc0EoKnBsYW4sIEdh dGhlck1lcmdlKSkKKwl7CisJCUVsaWRlZE5vZGUgKmVsaWRlZCA9IHBncGFfZGVzY2VuZF9ub2Rl KHBzdG10LCBwbGFuKTsKKworCQlpZiAoZWxpZGVkID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFu KCpwbGFuKSkKKwkJCWVsaWRlZCA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwor CQkqZm91bmRfYW55X2dhdGhlciA9IHRydWU7CisJCXJldHVybiBlbGlkZWQ7CisJfQorCisJcmV0 dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJZiAqcGxhbiBpcyBhbiBBZ2cgb3IgVW5pcXVlIG5vZGUs IHdlIHdhbnQgdG8gZGVzY2VuZCB0aHJvdWdoIGl0LCB1bmxlc3MKKyAqIGl0IGhhcyBhIGNvcnJl c3BvbmRpbmcgZWxpZGVkIG5vZGUuIElmIGl0cyBpbW1lZGlhdGUgY2hpbGQgaXMgYSBTb3J0IG9y CisgKiBJbmNyZW1lbnRhbFNvcnQsIHdlIGFsc28gd2FudCB0byBkZXNjZW5kIHRocm91Z2ggdGhh dCwgdW5sZXNzIGl0IGhhcyBhCisgKiBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLgorICoKKyAq IE9uIGVudHJ5LCAqZWxpZGVkX25vZGUgbXVzdCBiZSB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5v ZGVzIGNvcnJlc3BvbmRpbmcKKyAqIHRvICpwbGFuOyBvbiBleGl0LCB0aGlzIHdpbGwgc3RpbGwg YmUgdHJ1ZSwgYnV0ICpwbGFuIG1heSBoYXZlIGJlZW4gdXBkYXRlZC4KKyAqCisgKiBUaGUgcmVh c29uIHdlIGRvbid0IHdhbnQgdG8gZGVzY2VuZCB0aHJvdWdoIGVsaWRlZCBub2RlcyBpcyB0aGF0 IGEgc2luZ2xlCisgKiBqb2luIHRyZWUgY2FuJ3QgY3Jvc3MgdGhyb3VnaCBhbnkgc29ydCBvZiBl bGlkZWQgbm9kZTogc3VicXVlcmllcyBhcmUKKyAqIHBsYW5uZWQgc2VwYXJhdGVseSwgYW5kIHBs YW5uaW5nIGluc2lkZSBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgaXMKKyAqIHNlcGFyYXRlIGZy b20gcGxhbm5pbmcgb3V0c2lkZSBvZiBpdC4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRy dWUgaWYgd2UgZGVzY2VuZCB0aHJvdWdoIGEgbm9kZSB0aGF0IHdlIGJlbGlldmUgaXMKKyAqIG1h a2luZyBvbmUgc2lkZSBvZiBhIHNlbWlqb2luIHVuaXF1ZSwgYW5kIG90aGVyd2lzZSBmYWxzZS4K KyAqLworc3RhdGljIGJvb2wKK3BncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5uZWRTdG10ICpw c3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkX25vZGUpCit7CisJ Ym9vbAkJZGVzY2VuZCA9IGZhbHNlOworCWJvb2wJCXNqdW5pcXVlID0gZmFsc2U7CisKKwlpZiAo KmVsaWRlZF9ub2RlICE9IE5VTEwpCisJCXJldHVybiBzanVuaXF1ZTsKKworCWlmIChJc0EoKnBs YW4sIFVuaXF1ZSkpCisJeworCQlkZXNjZW5kID0gdHJ1ZTsKKwkJc2p1bmlxdWUgPSB0cnVlOwor CX0KKwllbHNlIGlmIChJc0EoKnBsYW4sIEFnZykpCisJeworCQkvKgorCQkgKiBJZiB0aGlzIGlz IGEgc2ltcGxlIEFnZyBub2RlLCB0aGVuIGFzc3VtZSBpdCdzIGhlcmUgdG8gaW1wbGVtZW50CisJ CSAqIHNlbWlqb2luIHVuaXF1ZW5lc3MuIE90aGVyd2lzZSwgYXNzdW1lIGl0J3MgY29tcGxldGlu ZyBhbiBlYWdlcgorCQkgKiBhZ2dyZWdhdGlvbiBvciBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0aW9u IG9wZXJhdGlvbiB0aGF0IGJlZ2FuIGF0IGEKKwkJICogaGlnaGVyIGxldmVsIG9mIHRoZSBwbGFu IHRyZWUuCisJCSAqCisJCSAqIFhYWC4gSSBzdXNwZWN0IHRoaXMgbG9naWMgZG9lcyBub3QgY292 ZXIgYWxsIGNhc2VzOiBjb3VsZG4ndCBTSgorCQkgKiB1bmlxdWVuZXNzIGJlIGltcGxlbWVudGVk IGluIHR3byBzdGVwcyB3aXRoIGFuIGludGVybWVkaWF0ZSBHYXRoZXI/CisJCSAqLworCQlkZXNj ZW5kID0gdHJ1ZTsKKwkJc2p1bmlxdWUgPSAoKChBZ2cgKikgKnBsYW4pLT5hZ2dzcGxpdCA9PSBB R0dTUExJVF9TSU1QTEUpOworCX0KKworCWlmIChkZXNjZW5kKQorCXsKKwkJKmVsaWRlZF9ub2Rl ID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOworCisJCWlmICgqZWxpZGVkX25vZGUg PT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4oKnBsYW4pKQorCQkJKmVsaWRlZF9ub2RlID0gcGdw YV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOworCX0KKworCXJldHVybiBzanVuaXF1ZTsKK30K KworLyoKKyAqIElzIHRoaXMgYSBSZXN1bHQgbm9kZSB0aGF0IGhhcyBhIGNoaWxkPworICovCitz dGF0aWMgYm9vbAoraXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChQbGFuICpwbGFuKQoreworCXJl dHVybiBJc0EocGxhbiwgUmVzdWx0KSAmJiBwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMOworfQorCisv KgorICogSXMgdGhpcyBhIFBsYW4gbm9kZSB3aG9zZSBwdXJwb3NlIGlzIHB1dCB0aGUgZGF0YSBp biBhIGNlcnRhaW4gb3JkZXI/CisgKi8KK3N0YXRpYyBib29sCitpc19zb3J0aW5nX3BsYW4oUGxh biAqcGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIFNvcnQpIHx8IElzQShwbGFuLCBJbmNyZW1l bnRhbFNvcnQpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pv aW4uaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRkYzcyOTg2YTcwCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaApAQCAtMCwwICsxLDEwNSBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9qb2luLmgKKyAqCSAgYW5hbHlzaXMgb2Ygam9p bnMgaW4gUGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2pvaW4uaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBH UEFfSk9JTl9ICisjZGVmaW5lIFBHUEFfSk9JTl9ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9k ZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHBncGFfcGxh bl93YWxrZXJfY29udGV4dDsKK3R5cGVkZWYgc3RydWN0IHBncGFfam9pbl91bnJvbGxlciBwZ3Bh X2pvaW5fdW5yb2xsZXI7Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Vucm9sbGVkX2pvaW4gcGdwYV91 bnJvbGxlZF9qb2luOworCisvKgorICogQWx0aG91Z2ggdGhlcmUgYXJlIHRocmVlIG1haW4gam9p biBzdHJhdGVnaWVzLCB3ZSB0cnkgdG8gY2xhc3NpZnkgdGhpbmdzCisgKiBtb3JlIHByZWNpc2Vs eSBoZXJlOiBtZXJnZSBqb2lucyBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgbWF0ZXJpYWxpemF0 aW9uCisgKiBvbiB0aGUgaW5uZXIgc2lkZSwgYW5kIG5lc3RlZCBsb29wcyBjYW4gdXNlIGVpdGhl ciBtYXRlcmlhbGl6YXRpb24gb3IKKyAqIG1lbW9pemF0aW9uLgorICovCit0eXBlZGVmIGVudW0K K3sKKwlKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTiA9IDAsCisJSlNUUkFUX01FUkdFX0pPSU5fTUFU RVJJQUxJWkUsCisJSlNUUkFUX05FU1RFRF9MT09QX1BMQUlOLAorCUpTVFJBVF9ORVNURURfTE9P UF9NQVRFUklBTElaRSwKKwlKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRSwKKwlKU1RSQVRfSEFT SF9KT0lOCisJLyogdXBkYXRlIE5VTV9QR1BBX0pPSU5fU1RSQVRFR1kgaWYgeW91IGFkZCBhbnl0 aGluZyBoZXJlICovCit9IHBncGFfam9pbl9zdHJhdGVneTsKKworI2RlZmluZSBOVU1fUEdQQV9K T0lOX1NUUkFURUdZCQkoKGludCkgSlNUUkFUX0hBU0hfSk9JTiArIDEpCisKKy8qCisgKiBJbiBh biBvdXRlci1kZWVwIGpvaW4gdHJlZSwgZXZlcnkgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4g d2lsbCBiZSBhIHNjYW4sCisgKiBidXQgam9pbiB0cmVlcyB3aXRoIG90aGVyIHNoYXBlcyBjYW4g Y29udGFpbiB1bnJvbGxlZCBqb2lucy4KKyAqCisgKiBUaGUgcGxhbiBub2RlIHdlIHN0b3JlIGhl cmUgd2lsbCBiZSB0aGUgaW5uZXIgb3Igb3V0ZXIgY2hpbGQgb2YgdGhlIGpvaW4KKyAqIG5vZGUs IGFzIGFwcHJvcHJpYXRlLCBleGNlcHQgdGhhdCB3ZSBsb29rIHRocm91Z2ggc3Vibm9kZXMgdGhh dCB3ZSByZWdhcmQgYXMKKyAqIHBhcnQgb2YgdGhlIGpvaW4gbWV0aG9kIGl0c2VsZi4gRm9yIGlu c3RhbmNlLCBmb3IgYSBOZXN0ZWQgTG9vcCB0aGF0CisgKiBtYXRlcmlhbGl6ZXMgdGhlIGlubmVy IGlucHV0LCB3ZSdsbCBzdG9yZSB0aGUgY2hpbGQgb2YgdGhlIE1hdGVyaWFsaXplIG5vZGUsCisg KiBub3QgdGhlIE1hdGVyaWFsaXplIG5vZGUgaXRzZWxmLgorICoKKyAqIElmIHNldHJlZnMgcHJv Y2Vzc2luZyBlbGlkZWQgb25lIG9yIG1vcmUgbm9kZXMgZnJvbSB0aGUgcGxhbiB0cmVlLCB0aGVu CisgKiB3ZSdsbCBzdG9yZSBkZXRhaWxzIGFib3V0IHRoZSB0b3Btb3N0IG9mIHRob3NlIGluIGVs aWRlZF9ub2RlOyBvdGhlcndpc2UsCisgKiBpdCB3aWxsIGJlIE5VTEwuCisgKgorICogRXhhY3Rs eSBvbmUgb2Ygc2NhbiBhbmQgdW5yb2xsZWRfam9pbiB3aWxsIGJlIG5vbi1OVUxMLgorICovCit0 eXBlZGVmIHN0cnVjdAoreworCVBsYW4JICAgKnBsYW47CisJRWxpZGVkTm9kZSAqZWxpZGVkX25v ZGU7CisJc3RydWN0IHBncGFfc2NhbiAqc2NhbjsKKwlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVucm9s bGVkX2pvaW47Cit9IHBncGFfam9pbl9tZW1iZXI7CisKKy8qCisgKiBXZSBjb252ZXJ0IG91dGVy LWRlZXAgam9pbiB0cmVlcyB0byBhIGZsYXQgc3RydWN0dXJlOyB0aGF0IGlzLCAoKEEgSk9JTiBC KQorICogSk9JTiBDKSBKT0lOIEQgZ2V0cyBjb252ZXJ0ZWQgdG8gb3V0ZXIgPSBBLCBpbm5lciA9 IDxCIEMgRD4uICBXaGVuIGpvaW5zCisgKiBhcmVuJ3Qgb3V0ZXItZGVlcCwgc3Vic3RydWN0dXJl IGlzIHJlcXVpcmVkLCBlLmcuIChBIEpPSU4gQikgSk9JTiAoQyBKT0lOIEQpCisgKiBpcyByZXBy ZXNlbnRlZCBhcyBvdXRlciA9IEEsIGlubmVyID0gPEIgWD4sIHdoZXJlIFggaXMgYSBwZ3BhX3Vu cm9sbGVkX2pvaW4KKyAqIGNvdmVyaW5nIEMtRC4KKyAqLworc3RydWN0IHBncGFfdW5yb2xsZWRf am9pbgoreworCS8qIE91dGVybW9zdCBtZW1iZXI7IG11c3Qgbm90IGl0c2VsZiBiZSBhbiB1bnJv bGxlZCBqb2luLiAqLworCXBncGFfam9pbl9tZW1iZXIgb3V0ZXI7CisKKwkvKiBOdW1iZXIgb2Yg aW5uZXIgbWVtYmVycy4gTGVuZ3RoIG9mIHRoZSBzdHJhdGVneSBhbmQgaW5uZXIgYXJyYXlzLiAq LworCXVuc2lnbmVkCW5pbm5lcjsKKworCS8qIEFycmF5IG9mIHN0cmF0ZWdpZXMsIG9uZSBwZXIg bm9uLW91dGVybW9zdCBtZW1iZXIuICovCisJcGdwYV9qb2luX3N0cmF0ZWd5ICpzdHJhdGVneTsK KworCS8qIEFycmF5IG9mIG1lbWJlcnMsIGV4Y2x1ZGluZyB0aGUgb3V0ZXJtb3N0LiBEZWVwZXN0 IGZpcnN0LiAqLworCXBncGFfam9pbl9tZW1iZXIgKmlubmVyOworfTsKKworLyoKKyAqIERvZXMg dGhpcyBwbGFuIG5vZGUgaW5oZXJpdCBmcm9tIEpvaW4/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9v bAorcGdwYV9pc19qb2luKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBOZXN0TG9v cCkgfHwgSXNBKHBsYW4sIE1lcmdlSm9pbikgfHwgSXNBKHBsYW4sIEhhc2hKb2luKTsKK30KKwor ZXh0ZXJuIHBncGFfam9pbl91bnJvbGxlciAqcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lk KTsKK2V4dGVybiB2b2lkIHBncGFfdW5yb2xsX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCisJCQkJCQkJIFBsYW4gKnBsYW4sIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAor CQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFf am9pbl91bnJvbGxlciAqKm91dGVyX2pvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFfam9pbl91 bnJvbGxlciAqKmlubmVyX2pvaW5fdW5yb2xsZXIpOworZXh0ZXJuIHBncGFfdW5yb2xsZWRfam9p biAqcGdwYV9idWlsZF91bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLAorCQkJCQkJCQkJCQkJCXBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcik7Citl eHRlcm4gdm9pZCBwZ3BhX2Rlc3Ryb3lfam9pbl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIg KmpvaW5fdW5yb2xsZXIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9vdXRwdXQuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODlhNjc1ZmY5M2UKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKQEAg LTAsMCArMSw2MjggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0cHV0LmMK KyAqCSAgcHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcGxhbiB0 cmVlIHdhbGsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9vdXRwdXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4u aCIKKworI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFy c2V0cmVlLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9s c3lzY2FjaGUuaCIKKworLyoKKyAqIENvbnRleHQgb2JqZWN0IGZvciB0ZXh0dWFsIGFkdmljZSBn ZW5lcmF0aW9uLgorICoKKyAqIHJ0X2lkZW50aWZpZXJzIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQg YXJyYXkgb2YgcmFuZ2UgdGFibGUgaWRlbnRpZmllcnMuCisgKiBTZWUgdGhlIGNvbW1lbnRzIGF0 IHRoZSB0b3Agb2YgcGdwYV9pZGVudGlmaWVyLmMgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBi dWYgaXMgdGhlIGNhbGxlci1wcm92aWRlZCBvdXRwdXQgYnVmZmVyLgorICoKKyAqIHdyYXBfY29s dW1uIGlzIHRoZSB3cmFwIGNvbHVtbiwgc28gdGhhdCB3ZSBkb24ndCBjcmVhdGUgb3V0cHV0IHRo YXQgaXMKKyAqIHRvbyB3aWRlLiBTZWUgcGdwYV9tYXliZV9saW5lYnJlYWsoKSBhbmQgY29tbWVu dHMgaW4gcGdwYV9vdXRwdXRfYWR2aWNlLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX291dHB1 dF9jb250ZXh0Cit7CisJY29uc3QgY2hhciAqKnJpZF9zdHJpbmdzOworCVN0cmluZ0luZm8JYnVm OworCWludAkJCXdyYXBfY29sdW1uOworfSBwZ3BhX291dHB1dF9jb250ZXh0OworCitzdGF0aWMg dm9pZCBwZ3BhX291dHB1dF91bnJvbGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRl eHQsCisJCQkJCQkJCQkgIHBncGFfdW5yb2xsZWRfam9pbiAqam9pbik7CitzdGF0aWMgdm9pZCBw Z3BhX291dHB1dF9qb2luX21lbWJlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJ CQkJCQkJcGdwYV9qb2luX21lbWJlciAqbWVtYmVyKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0 X3NjYW5fc3RyYXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCSAg cGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJICBMaXN0ICpzY2Fucyk7Citz dGF0aWMgdm9pZCBwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhwZ3BhX291dHB1dF9j b250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJCQkgUGxhbiAqcGxhbik7CitzdGF0aWMgdm9pZCBw Z3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIE9p ZCByZWxpZCk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9xdWVyeV9mZWF0dXJlKHBncGFfb3V0 cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJ CQkJCQkJICBMaXN0ICpxdWVyeV9mZWF0dXJlcyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9z aW1wbGVfc3RyYXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCQlj aGFyICpzdHJhdGVneSwKKwkJCQkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKTsKK3N0YXRpYyB2b2lk IHBncGFfb3V0cHV0X25vX2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJ CQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3JlbGF0 aW9ucyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJ CQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CisKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfam9p bl9zdHJhdGVneShwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBn cGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSk7Citz dGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShwZ3BhX3FmX3R5cGUg dHlwZSk7CisKK3N0YXRpYyB2b2lkIHBncGFfbWF5YmVfbGluZWJyZWFrKFN0cmluZ0luZm8gYnVm LCBpbnQgd3JhcF9jb2x1bW4pOworCisvKgorICogQXBwZW5kIHF1ZXJ5IGFkdmljZSB0byB0aGUg cHJvdmlkZWQgYnVmZmVyLgorICoKKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sICd3 YWxrZXInIG11c3QgYmUgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlCisgKiBtYWluIHBsYW4gdHJl ZSBhbmQgYWxsIHN1YnBsYW5zIGZyb20gdGhlIFBsYW5uZWRTdG10LgorICoKKyAqICdydF9pZGVu dGlmaWVycycgaXMgYSB0YWJsZSBvZiB1bmlxdWUgaWRlbnRpZmllcnMsIG9uZSBmb3IgZWFjaCBS VEkuCisgKiBTZWUgcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdCgpLgor ICoKKyAqIFJlc3VsdHMgd2lsbCBiZSBhcHBlbmRlZCB0byAnYnVmJy4KKyAqLwordm9pZAorcGdw YV9vdXRwdXRfYWR2aWNlKFN0cmluZ0luZm8gYnVmLCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwKKwkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzKQoreworCUlu ZGV4CQlydGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgod2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsK KwlMaXN0Q2VsbCAgICpsYzsKKwlwZ3BhX291dHB1dF9jb250ZXh0IGNvbnRleHQ7CisKKwkvKiBC YXNpYyBpbml0aWFsaXphdGlvbi4gKi8KKwltZW1zZXQoJmNvbnRleHQsIDAsIHNpemVvZihwZ3Bh X291dHB1dF9jb250ZXh0KSk7CisJY29udGV4dC5idWYgPSBidWY7CisKKwkvKgorCSAqIENvbnZl cnQgaWRlbnRpZmllcnMgdG8gc3RyaW5nIGZvcm0uIE5vdGUgdGhhdCB0aGUgbG9vcCB2YXJpYWJs ZSBoZXJlIGlzCisJICogbm90IGFuIFJUSSwgYmVjYXVzZSBSVElzIGFyZSAxLWJhc2VkLiBTb21l IFJUSXMgd2lsbCBoYXZlIG5vCisJICogaWRlbnRpZmllciwgZWl0aGVyIGJlY2F1c2UgdGhlIHJl bG9wdGtpbmQgaXMgUlRFX0pPSU4gb3IgYmVjYXVzZSB0aGF0CisJICogcG9ydGlvbiBvZiB0aGUg cXVlcnkgZGlkbid0IG1ha2UgaXQgaW50byB0aGUgZmluYWwgcGxhbi4KKwkgKi8KKwljb250ZXh0 LnJpZF9zdHJpbmdzID0gcGFsbG9jMF9hcnJheShjb25zdCBjaGFyICosIHJ0YWJsZV9sZW5ndGgp OworCWZvciAoaW50IGkgPSAwOyBpIDwgcnRhYmxlX2xlbmd0aDsgKytpKQorCQlpZiAocnRfaWRl bnRpZmllcnNbaV0uYWxpYXNfbmFtZSAhPSBOVUxMKQorCQkJY29udGV4dC5yaWRfc3RyaW5nc1tp XSA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJ0X2lkZW50aWZpZXJzW2ldKTsKKworCS8qCisJ ICogSWYgdGhlIHVzZXIgY2hvb3NlcyB0byB1c2UgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIGluIGFu IDgwLWNvbHVtbiB3aW5kb3cKKwkgKiBmcm9tIGEgcHNxbCBjbGllbnQgd2l0aCBkZWZhdWx0IHNl dHRpbmdzLCBwc3FsIHdpbGwgYWRkIG9uZSBzcGFjZSB0bworCSAqIHRoZSBsZWZ0IG9mIHRoZSBv dXRwdXQgYW5kIEVYUExBSU4gd2lsbCBhZGQgdHdvIG1vcmUgdG8gdGhlIGxlZnQgb2YgdGhlCisJ ICogYWR2aWNlLiBUaHVzLCBsaW5lcyBvZiBtb3JlIHRoYW4gNzcgY2hhcmFjdGVycyB3aWxsIHdy YXAuIFdlIHNldCB0aGUKKwkgKiB3cmFwIGxpbWl0IHRvIDc2IGhlcmUgc28gdGhhdCB0aGUgb3V0 cHV0IHdvbid0IHJlYWNoIGFsbCB0aGUgd2F5IHRvIHRoZQorCSAqIHZlcnkgbGFzdCBjb2x1bW4g b2YgdGhlIHRlcm1pbmFsLgorCSAqCisJICogT2YgY291cnNlLCB0aGlzIGlzIGZhaXJseSBhcmJp dHJhcnkgc2V0IG9mIGFzc3VtcHRpb25zLCBhbmQgb25lIGNvdWxkCisJICogd2VsbCBtYWtlIGFu IGFyZ3VtZW50IGZvciBhIGRpZmZlcmVudCB3cmFwIGxpbWl0LCBvciBmb3IgYSBjb25maWd1cmFi bGUKKwkgKiBvbmUuCisJICovCisJY29udGV4dC53cmFwX2NvbHVtbiA9IDc2OworCisJLyoKKwkg KiBFYWNoIHBpZWNlIG9mIEpPSU5fT1JERVIoKSBhZHZpY2UgZnVsbHkgZGVzY3JpYmVzIHRoZSBq b2luIG9yZGVyIGZvciBhCisJICogYSBzaW5nbGUgdW5yb2xsZWQgam9pbi4gTWVyZ2luZyBpcyBu b3QgcGVybWl0dGVkLCBiZWNhdXNlIHRoYXQgd291bGQKKwkgKiBjaGFuZ2UgdGhlIG1lYW5pbmcs IGUuZy4gU0VRX1NDQU4oYSBiIGMgZCkgbWVhbnMgc2ltcGx5IHRoYXQgc2VxdWVudGlhbAorCSAq IHNjYW5zIHNob3VsZCBiZSB1c2VkIGZvciBhbGwgb2YgdGhvc2UgcmVsYXRpb25zLCBhbmQgaXMg dGh1cyBlcXVpdmFsZW50CisJICogdG8gU0VRX1NDQU4oYSBiKSBTRVFfU0NBTihjIGQpLCBidXQg Sk9JTl9PUkRFUihhIGIgYyBkKSBtZWFucyB0aGF0ICJhIgorCSAqIGlzIHRoZSBkcml2aW5nIHRh YmxlIHdoaWNoIGlzIHRoZW4gam9pbmVkIHRvICJiIiB0aGVuICJjIiB0aGVuICJkIiwKKwkgKiB3 aGljaCBpcyB0b3RhbGx5IGRpZmZlcmVudCBmcm9tIEpPSU5fT1JERVIoYSBiKSBhbmQgSk9JTl9P UkRFUihjIGQpLgorCSAqLworCWZvcmVhY2gobGMsIHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRf am9pbnMpCisJeworCQlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luID0gbGZpcnN0KGxjKTsKKwor CQlpZiAoYnVmLT5sZW4gPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsK KwkJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LmJ1ZiwgIkpPSU5fT1JERVIoIik7CisJCXBncGFf b3V0cHV0X3Vucm9sbGVkX2pvaW4oJmNvbnRleHQsIHVqb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC5idWYsICcpJyk7CisJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQu YnVmLCBjb250ZXh0LndyYXBfY29sdW1uKTsKKwl9CisKKwkvKiBFbWl0IGpvaW4gc3RyYXRlZ3kg YWR2aWNlLiAqLworCWZvciAoaW50IHMgPSAwOyBzIDwgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWTsg KytzKQorCXsKKwkJY2hhcgkgICAqc3RyYXRlZ3kgPSBwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVn eShzKTsKKworCQlwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3koJmNvbnRleHQsCisJCQkJCQkJ CQlzdHJhdGVneSwKKwkJCQkJCQkJCXdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3NdKTsKKwl9CisK KwkvKgorCSAqIEVtaXQgc2NhbiBzdHJhdGVneSBhZHZpY2UgKGJ1dCBub3QgZm9yIG9yZGluYXJ5 IHNjYW5zLCB3aGljaCBhcmUKKwkgKiBkZWZpbml0aW9uYWxseSB1bmludGVyZXN0aW5nKS4KKwkg Ki8KKwlmb3IgKGludCBjID0gMDsgYyA8IE5VTV9QR1BBX1NDQU5fU1RSQVRFR1k7ICsrYykKKwkJ aWYgKGMgIT0gUEdQQV9TQ0FOX09SRElOQVJZKQorCQkJcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVn eSgmY29udGV4dCwgYywgd2Fsa2VyLT5zY2Fuc1tjXSk7CisKKwkvKiBFbWl0IHF1ZXJ5IGZlYXR1 cmUgYWR2aWNlLiAqLworCWZvciAoaW50IHQgPSAwOyB0IDwgTlVNX1BHUEFfUUZfVFlQRVM7ICsr dCkKKwkJcGdwYV9vdXRwdXRfcXVlcnlfZmVhdHVyZSgmY29udGV4dCwgdCwgd2Fsa2VyLT5xdWVy eV9mZWF0dXJlc1t0XSk7CisKKwkvKiBFbWl0IE5PX0dBVEhFUiBhZHZpY2UuICovCisJcGdwYV9v dXRwdXRfbm9fZ2F0aGVyKCZjb250ZXh0LCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CisK Ky8qCisgKiBPdXRwdXQgdGhlIG1lbWJlcnMgb2YgYW4gdW5yb2xsZWQgam9pbiwgZmlyc3QgdGhl IG91dGVybW9zdCBtZW1iZXIsIGFuZAorICogdGhlbiB0aGUgaW5uZXIgbWVtYmVycyBvbmUgYnkg b25lLCBhcyBwYXJ0IG9mIEpPSU5fT1JERVIoKSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitw Z3BhX291dHB1dF91bnJvbGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJ CQkJCQkgIHBncGFfdW5yb2xsZWRfam9pbiAqam9pbikKK3sKKwlwZ3BhX291dHB1dF9qb2luX21l bWJlcihjb250ZXh0LCAmam9pbi0+b3V0ZXIpOworCisJZm9yIChpbnQgayA9IDA7IGsgPCBqb2lu LT5uaW5uZXI7ICsraykKKwl7CisJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlciA9ICZqb2luLT5p bm5lcltrXTsKKworCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQt PndyYXBfY29sdW1uKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcp OworCQlwZ3BhX291dHB1dF9qb2luX21lbWJlcihjb250ZXh0LCBtZW1iZXIpOworCX0KK30KKwor LyoKKyAqIE91dHB1dCBhIHNpbmdsZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBhcyBwYXJ0 IG9mIEpPSU5fT1JERVIoKSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9q b2luX21lbWJlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJcGdwYV9qb2lu X21lbWJlciAqbWVtYmVyKQoreworCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkK Kwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJcGdwYV9v dXRwdXRfdW5yb2xsZWRfam9pbihjb250ZXh0LCBtZW1iZXItPnVucm9sbGVkX2pvaW4pOworCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJfQorCWVsc2UKKwl7CisJ CXBncGFfc2NhbiAgKnNjYW4gPSBtZW1iZXItPnNjYW47CisKKwkJQXNzZXJ0KHNjYW4gIT0gTlVM TCk7CisJCWlmIChibXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09IEJNU19TSU5HTEVUT04p CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5y ZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJ3snKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYs IHNjYW4tPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd9 Jyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYWR2aWNlIGZvciBhIExpc3Qgb2YgcGdw YV9zY2FuIG9iamVjdHMuCisgKgorICogQWxsIHRoZSBzY2FucyBtdXN0IHVzZSB0aGUgc3RyYXRl Z3kgc3BlY2lmaWVkIGJ5IHRoZSAic3RyYXRlZ3kiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0 LAorCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIExpc3QgKnNj YW5zKQoreworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChzY2FucyA9PSBOSUwpCisJCXJl dHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYs ICIlcygiLAorCQkJCQkgcGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3koc3RyYXRlZ3kpKTsKKwor CWZvcmVhY2hfcHRyKHBncGFfc2Nhbiwgc2Nhbiwgc2NhbnMpCisJeworCQlQbGFuCSAgICpwbGFu ID0gc2Nhbi0+cGxhbjsKKworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNl CisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3Jh cF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOwor CQl9CisKKwkJLyogT3V0cHV0IHRoZSByZWxhdGlvbiBpZGVudGlmaWVycy4gKi8KKwkJaWYgKGJt c19tZW1iZXJzaGlwKHNjYW4tPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0 cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCWVs c2UKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJ cGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRz KTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJfQorCisJ CS8qIEZvciBzY2FucyBpbnZvbHZpbmcgaW5kZXhlcywgb3V0cHV0IGluZGV4IGluZm9ybWF0aW9u LiAqLworCQlpZiAoc3RyYXRlZ3kgPT0gUEdQQV9TQ0FOX0lOREVYKQorCQl7CisJCQlBc3NlcnQo SXNBKHBsYW4sIEluZGV4U2NhbikpOworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+ YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250 ZXh0LT5idWYsICcgJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsICgo SW5kZXhTY2FuICopIHBsYW4pLT5pbmRleGlkKTsKKwkJfQorCQllbHNlIGlmIChzdHJhdGVneSA9 PSBQR1BBX1NDQU5fSU5ERVhfT05MWSkKKwkJeworCQkJQXNzZXJ0KElzQShwbGFuLCBJbmRleE9u bHlTY2FuKSk7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQt PndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAn KTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwKKwkJCQkJCQkJCSAgKChJ bmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRleGlkKTsKKwkJfQorCQllbHNlIGlmIChzdHJhdGVn eSA9PSBQR1BBX1NDQU5fQklUTUFQX0hFQVApCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFr KGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2Rl dGFpbHMoY29udGV4dCwgcGxhbi0+bGVmdHRyZWUpOworCQl9CisJfQorCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRl eHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0IGluZm9y bWF0aW9uIGFib3V0IHdoaWNoIGluZGV4IG9yIGluZGV4ZXMgcG93ZXIgYSBCaXRtYXBIZWFwU2Nh bi4KKyAqCisgKiBXZSBlbWl0ICYmKGkxIGkyIGkzKSBmb3IgYSBCaXRtYXBBbmQgYmV0d2VlbiBp bmRleGVzIGkxLCBpMiwgYW5kIGkzOworICogYW5kIGxpa2V3aXNlIHx8KGkxIGkyIGkzKSBmb3Ig YSBzaW1pbGFyIEJpdG1hcE9yIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0 cHV0X2JpdG1hcF9pbmRleF9kZXRhaWxzKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIFBs YW4gKnBsYW4pCit7CisJY2hhcgkgICAqb3BlcmF0b3I7CisJTGlzdAkgICAqYml0bWFwcGxhbnM7 CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKElzQShwbGFuLCBCaXRtYXBJbmRleFNjYW4p KQorCXsKKwkJQml0bWFwSW5kZXhTY2FuICpiaXRtYXBpbmRleHNjYW4gPSAoQml0bWFwSW5kZXhT Y2FuICopIHBsYW47CisKKwkJcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShjb250ZXh0LCBiaXRt YXBpbmRleHNjYW4tPmluZGV4aWQpOworCQlyZXR1cm47CisJfQorCisJaWYgKElzQShwbGFuLCBC aXRtYXBPcikpCisJeworCQlvcGVyYXRvciA9ICJ8fCI7CisJCWJpdG1hcHBsYW5zID0gKChCaXRt YXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJfQorCWVsc2UgaWYgKElzQShwbGFuLCBCaXRt YXBBbmQpKQorCXsKKwkJb3BlcmF0b3IgPSAiJiYiOworCQliaXRtYXBwbGFucyA9ICgoQml0bWFw QW5kICopIHBsYW4pLT5iaXRtYXBwbGFuczsKKwl9CisJZWxzZQorCQllbG9nKEVSUk9SLCAidW5l eHBlY3RlZCBub2RlIHR5cGU6ICVkIiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisKKwlhcHBlbmRT dHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsIG9wZXJhdG9yKTsKKwlmb3JlYWNoX3B0cihQ bGFuLCBjaGlsZF9wbGFuLCBiaXRtYXBwbGFucykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0 ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+ YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250 ZXh0LT5idWYsICcgJyk7CisJCX0KKwkJcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2RldGFpbHMo Y29udGV4dCwgY2hpbGRfcGxhbik7CisJfQorCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQt PmJ1ZiwgJyknKTsKK30KKworLyoKKyAqIE91dHB1dCBhIHNjaGVtYS1xdWFsaWZpZWQgcmVsYXRp b24gbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUocGdw YV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKQoreworCU9pZAkJCW5zcG9pZCA9 IGdldF9yZWxfbmFtZXNwYWNlKHJlbGlkKTsKKwljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRf bmFtZXNwYWNlX25hbWVfb3JfdGVtcChuc3BvaWQpOworCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRf cmVsX25hbWUocmVsaWQpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYs IHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZXNwYWNlKSk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnLicpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVm LCBxdW90ZV9pZGVudGlmaWVyKHJlbG5hbWUpKTsKK30KKworLyoKKyAqIE91dHB1dCBhZHZpY2Ug Zm9yIGEgTGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgb2JqZWN0cy4KKyAqCisgKiBBbGwgZmVh dHVyZXMgbXVzdCBiZSBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlICJ0eXBlIiBhcmd1bWVu dC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUocGdwYV9vdXRw dXRfY29udGV4dCAqY29udGV4dCwgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkgIExpc3QgKnF1 ZXJ5X2ZlYXR1cmVzKQoreworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChxdWVyeV9mZWF0 dXJlcyA9PSBOSUwpCisJCXJldHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5n SW5mbyhjb250ZXh0LT5idWYsICIlcygiLAorCQkJCQkgcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1 cmVfdHlwZSh0eXBlKSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBx dWVyeV9mZWF0dXJlcykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVs c2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53 cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7 CisJCX0KKworCQlpZiAoYm1zX21lbWJlcnNoaXAocWYtPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRP TikKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHFmLT5y ZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYs IHFmLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScp OworCQl9CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOwor CXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4p OworfQorCisvKgorICogT3V0cHV0ICJzaW1wbGUiIGFkdmljZSBmb3IgYSBMaXN0IG9mIEJpdG1h cHNldCBvYmplY3RzIGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIG9uZSBvciBtb3JlIFJUSXMu CisgKgorICogQnkgc2ltcGxlLCB3ZSBqdXN0IG1lYW4gdGhhdCB0aGUgYWR2aWNlIGVtaXR0ZWQg Zm9sbG93cyB0aGUgbW9zdAorICogc3RyYWlnaHRmb3J3YXJkIHBhdHRlcm46IHRoZSBzdHJhdGVn eSBuYW1lLCBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgaXRlbXMKKyAqIHNlcGFyYXRlZCBieSBzcGFj ZXMgYW5kIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMuIEluZGl2aWR1YWwgaXRlbXMgaW4KKyAq IHRoZSBsaXN0IGFyZSBhIHNpbmdsZSByZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIEJpdG1hcHNl dCB0aGF0IGNvbnRhaW5zCisgKiBqdXN0IG9uZSBtZW1iZXIsIG9yIGEgc3ViLWxpc3QgYWdhaW4g c2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZAorICogYnkgcGFyZW50aGVzZXMgZm9y IGEgQml0bWFwc2V0IHdpdGggbXVsdGlwbGUgbWVtYmVycy4gQml0bWFwc2V0cyB3aXRoCisgKiBu byBtZW1iZXJzIHByb2JhYmx5IHNob3VsZG4ndCBvY2N1ciBoZXJlLCBidXQgaWYgdGhleSBkbyB0 aGV5J2xsIGJlCisgKiByZW5kZXJlZCBhcyBhbiBlbXB0eSBzdWItbGlzdC4KKyAqLworc3RhdGlj IHZvaWQKK3BncGFfb3V0cHV0X3NpbXBsZV9zdHJhdGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpj b250ZXh0LCBjaGFyICpzdHJhdGVneSwKKwkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKQoreworCWJv b2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChyZWxpZF9zZXRzID09IE5JTCkKKwkJcmV0dXJuOwor CisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29u dGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIs IHN0cmF0ZWd5KTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIHJlbGlkcywgcmVsaWRfc2V0 cykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJ cGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7 CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQlp ZiAoYm1zX21lbWJlcnNoaXAocmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRw dXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwkJZWxzZQorCQl7 CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291 dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisJfQorCisJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNv bnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0IE5P X0dBVEhFUiBhZHZpY2UgZm9yIGFsbCByZWxhdGlvbnMgbm90IGFwcGVhcmluZyBiZW5lYXRoIGFu eQorICogR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9pZAorcGdw YV9vdXRwdXRfbm9fZ2F0aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIEJpdG1hcHNl dCAqcmVsaWRzKQoreworCWlmIChyZWxpZHMgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChjb250 ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1Ziwg J1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsICJOT19HQVRIRVIo Iik7CisJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRz KTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7Cit9CisKKy8qCisg KiBPdXRwdXQgdGhlIGlkZW50aWZpZXJzIGZvciBlYWNoIFJUSSBpbiB0aGUgcHJvdmlkZWQgc2V0 LgorICoKKyAqIElkZW50aWZpZXJzIGFyZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBhbmQgYSBsaW5l IGJyZWFrIGlzIHBvc3NpYmxlIGFmdGVyCisgKiBlYWNoIG9uZS4KKyAqLworc3RhdGljIHZvaWQK K3BncGFfb3V0cHV0X3JlbGF0aW9ucyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBTdHJp bmdJbmZvIGJ1ZiwKKwkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlpbnQJCQlydGkgPSAt MTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJl cihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQljb25zdCBjaGFyICpyaWRfc3RyaW5nID0gY29u dGV4dC0+cmlkX3N0cmluZ3NbcnRpIC0gMV07CisKKwkJaWYgKHJpZF9zdHJpbmcgPT0gTlVMTCkK KwkJCWVsb2coRVJST1IsICJubyBpZGVudGlmaWVyIGZvciBSVEkgJWQiLCBydGkpOworCisJCWlm IChmaXJzdCkKKwkJeworCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoYnVmLCByaWRfc3RyaW5nKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGlu ZWJyZWFrKGJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIgJXMiLCByaWRfc3RyaW5nKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEdldCBhIEMgc3Ry aW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBqb2luIHN0cmF0ZWd5LgorICov CitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShwZ3BhX2pvaW5fc3Ry YXRlZ3kgc3RyYXRlZ3kpCit7CisJc3dpdGNoIChzdHJhdGVneSkKKwl7CisJCWNhc2UgSlNUUkFU X01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExBSU4iOworCQljYXNl IEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX01B VEVSSUFMSVpFIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4g Ik5FU1RFRF9MT09QX1BMQUlOIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBKU1RSQVRf TkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUVNT0laRSI7CisJ CWNhc2UgSlNUUkFUX0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwl9CisKKwlw Z191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogR2V0IGEgQyBzdHJp bmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIHNjYW4gc3RyYXRlZ3kuCisgKi8K K3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHBncGFfc2Nhbl9zdHJh dGVneSBzdHJhdGVneSkKK3sKKwlzd2l0Y2ggKHN0cmF0ZWd5KQorCXsKKwkJY2FzZSBQR1BBX1ND QU5fT1JESU5BUlk6CisJCQlyZXR1cm4gIk9SRElOQVJZX1NDQU4iOworCQljYXNlIFBHUEFfU0NB Tl9TRVE6CisJCQlyZXR1cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fQklUTUFQX0hF QVA6CisJCQlyZXR1cm4gIkJJVE1BUF9IRUFQX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9GT1JF SUdOOgorCQkJcmV0dXJuICJGT1JFSUdOX0pPSU4iOworCQljYXNlIFBHUEFfU0NBTl9JTkRFWDoK KwkJCXJldHVybiAiSU5ERVhfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYX09OTFk6CisJ CQlyZXR1cm4gIklOREVYX09OTFlfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1BBUlRJVElPTldJ U0U6CisJCQlyZXR1cm4gIlBBUlRJVElPTldJU0UiOworCQljYXNlIFBHUEFfU0NBTl9USUQ6CisJ CQlyZXR1cm4gIlRJRF9TQ0FOIjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBO VUxMOworfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUg c3BlY2lmaWVkIHNjYW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmlu Z19xdWVyeV9mZWF0dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBl KQorCXsKKwkJY2FzZSBQR1BBUUZfR0FUSEVSOgorCQkJcmV0dXJuICJHQVRIRVIiOworCQljYXNl IFBHUEFRRl9HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7CisJCWNhc2Ug UEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX05PTl9VTklR VUUiOworCQljYXNlIFBHUEFRRl9TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lO X1VOSVFVRSI7CisJfQorCisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQor CisvKgorICogSW5zZXJ0IGEgbGluZSBicmVhayBpbnRvIHRoZSBTdHJpbmdJbmZvRGF0YSwgaWYg bmVlZGVkLgorICoKKyAqIElmIHdyYXBfY29sdW1uIGlzIHplcm8gb3IgbmVnYXRpdmUsIHRoaXMg ZG9lcyBub3RoaW5nLiBPdGhlcndpc2UsIHdlCisgKiBjb25zaWRlciBpbnNlcnRpbmcgYSBuZXds aW5lLiBXZSBvbmx5IGluc2VydCBhIG5ld2xpbmUgaWYgdGhlIGxlbmd0aCBvZgorICogdGhlIGxh c3QgbGluZSBpbiB0aGUgYnVmZmVyIGV4Y2VlZHMgd3JhcF9jb2x1bW4sIGFuZCBub3QgaWYgd2Un ZCBiZQorICogaW5zZXJ0aW5nIGEgbmV3bGluZSBhdCBvciBiZWZvcmUgdGhlIGJlZ2lubmluZyBv ZiB0aGUgY3VycmVudCBsaW5lLgorICoKKyAqIFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0aGUgbmV3 bGluZSBpcyBpbnNlcnRlZCBpcyBzaW1wbHkgd2hlcmV2ZXIgdGhlCisgKiBidWZmZXIgZW5kZWQg dGhlIGxhc3QgdGltZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuIEluIG90aGVyIHdvcmRzLAor ICogdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZXZlcnkgdGlt ZSB3ZSByZWFjaCBhIGdvb2QKKyAqIHBsYWNlIGZvciBhIGxpbmUgYnJlYWsuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX21heWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBfY29s dW1uKQoreworCWNoYXIJICAgKnRyYWlsaW5nX25sOworCWludAkJCWxpbmVfc3RhcnQ7CisJaW50 CQkJc2F2ZV9jdXJzb3I7CisKKwkvKiBJZiBsaW5lIHdyYXBwaW5nIGlzIGRpc2FibGVkLCBleGl0 IHF1aWNrbHkuICovCisJaWYgKHdyYXBfY29sdW1uIDw9IDApCisJCXJldHVybjsKKworCS8qCisJ ICogU2V0IGxpbmVfc3RhcnQgdG8gdGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiBidWYtPmRhdGEgb2Yg dGhlIGZpcnN0CisJICogY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUsIHdoZXJlIHRoZSBj dXJyZW50IGxpbmUgbWVhbnMgdGhlIGxhc3QKKwkgKiBvbmUgaW4gdGhlIGJ1ZmZlci4gTm90ZSB0 aGF0IGxpbmVfc3RhcnQgY291bGQgYmUgdGhlIG9mZnNldCBvZiB0aGUKKwkgKiB0cmFpbGluZyAn XDAnIGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIGlzIGEgbGluZSBicmVhay4K KwkgKi8KKwl0cmFpbGluZ19ubCA9IHN0cnJjaHIoYnVmLT5kYXRhLCAnXG4nKTsKKwlpZiAodHJh aWxpbmdfbmwgPT0gTlVMTCkKKwkJbGluZV9zdGFydCA9IDA7CisJZWxzZQorCQlsaW5lX3N0YXJ0 ID0gKHRyYWlsaW5nX25sIC0gYnVmLT5kYXRhKSArIDE7CisKKwkvKgorCSAqIFJlbWVtYmVyIHRo YXQgdGhlIGN1cnJlbnQgZW5kIG9mIHRoZSBidWZmZXIgaXMgYSBwb3RlbnRpYWwgbG9jYXRpb24g dG8KKwkgKiBpbnNlcnQgYSBsaW5lIGJyZWFrIG9uIGEgZnV0dXJlIGNhbGwgdG8gdGhpcyBmdW5j dGlvbi4KKwkgKi8KKwlzYXZlX2N1cnNvciA9IGJ1Zi0+Y3Vyc29yOworCWJ1Zi0+Y3Vyc29yID0g YnVmLT5sZW47CisKKwkvKiBJZiB3ZSBoYXZlbid0IHBhc3NlZCB0aGUgd3JhcCBjb2x1bW4sIHdl IGRvbid0IG5lZWQgYSBuZXdsaW5lLiAqLworCWlmIChidWYtPmxlbiAtIGxpbmVfc3RhcnQgPD0g d3JhcF9jb2x1bW4pCisJCXJldHVybjsKKworCS8qCisJICogSXQgb25seSBtYWtlcyBzZW5zZSB0 byBpbnNlcnQgYSBuZXdsaW5lIGF0IGEgcG9zaXRpb24gbGF0ZXIgdGhhbiB0aGUKKwkgKiBiZWdp bm5pbmcgb2YgdGhlIGN1cnJlbnQgbGluZS4KKwkgKi8KKwlpZiAoYnVmLT5jdXJzb3IgPD0gbGlu ZV9zdGFydCkKKwkJcmV0dXJuOworCisJLyogSW5zZXJ0IGEgbmV3bGluZSBhdCB0aGUgcHJldmlv dXMgY3Vyc29yIGxvY2F0aW9uLiAqLworCWVubGFyZ2VTdHJpbmdJbmZvKGJ1ZiwgMSk7CisJbWVt bW92ZSgmYnVmLT5kYXRhW3NhdmVfY3Vyc29yXSArIDEsICZidWYtPmRhdGFbc2F2ZV9jdXJzb3Jd LAorCQkJYnVmLT5sZW4gLSBzYXZlX2N1cnNvcik7CisJKytidWYtPmN1cnNvcjsKKwlidWYtPmRh dGFbKytidWYtPmxlbl0gPSAnXDAnOworCWJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0gPSAnXG4nOwor fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi40NzQ5NmQ3NmY1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ3BhX291dHB1dC5oCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRw dXQgZnJvbSB0aGUgcmVzdWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX09VVFBVVF9ICisjZGVmaW5lIFBHUEFfT1VUUFVU X0gKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2Vy LmgiCisKK2V4dGVybiB2b2lkIHBncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZvIGJ1ZiwKKwkJ CQkJCQkgICBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgICBwZ3Bh X2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfcGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYx OTdkMTc3M2M5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3BhcnNlci55CkBAIC0wLDAgKzEsMzQwIEBACisleworLyoKKyAqIFBhcnNlciBmb3IgcGxhbiBh ZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFy c2VyLnkKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPGZsb2F0Lmg+ CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgIm5vZGVz L21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRp bHMvZmxvYXQuaCIKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9wYXJz ZXIuaCIKKworLyoKKyAqIEJpc29uIGRvZXNuJ3QgYWxsb2NhdGUgYW55dGhpbmcgdGhhdCBuZWVk cyB0byBsaXZlIGFjcm9zcyBwYXJzZXIgY2FsbHMsCisgKiBzbyB3ZSBjYW4gZWFzaWx5IGhhdmUg aXQgdXNlIHBhbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYy4gIFRoaXMgcHJldmVudHMKKyAqIG1lbW9y eSBsZWFrcyBpZiB3ZSBlcnJvciBvdXQgZHVyaW5nIHBhcnNpbmcuCisgKi8KKyNkZWZpbmUgWVlN QUxMT0MgcGFsbG9jCisjZGVmaW5lIFlZRlJFRSAgIHBmcmVlCislfQorCisvKiBCSVNPTiBEZWNs YXJhdGlvbnMgKi8KKyVwYXJzZS1wYXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVwYXJzZS1wYXJhbSB7 Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19wfQorJXBhcnNlLXBhcmFtIHt5eXNjYW5fdCB5eXNjYW5u ZXJ9CislbGV4LXBhcmFtIHtMaXN0ICoqcmVzdWx0fQorJWxleC1wYXJhbSB7Y2hhciAqKnBhcnNl X2Vycm9yX21zZ19wfQorJWxleC1wYXJhbSB7eXlzY2FuX3QgeXlzY2FubmVyfQorJXB1cmUtcGFy c2VyCislZXhwZWN0IDAKKyVuYW1lLXByZWZpeD0icGdwYV95eSIKKworJXVuaW9uCit7CisJY2hh cgkgICAqc3RyOworCWludAkJCWludGVnZXI7CisJTGlzdAkgICAqbGlzdDsKKwlwZ3BhX2Fkdmlj ZV9pdGVtICppdGVtOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCXBncGFfaW5kZXhf dGFyZ2V0ICppdGFyZ2V0OworfQorJXRva2VuIDxzdHI+IFRPS19JREVOVCBUT0tfVEFHX0pPSU5f T1JERVIgVE9LX1RBR19CSVRNQVAgVE9LX1RBR19JTkRFWAorJXRva2VuIDxzdHI+IFRPS19UQUdf U0lNUExFIFRPS19UQUdfR0VORVJJQworJXRva2VuIDxpbnRlZ2VyPiBUT0tfSU5URUdFUgorJXRv a2VuIFRPS19PUiBUT0tfQU5ECisKKyV0eXBlIDxpbnRlZ2VyPiBvcHRfcmlfb2NjdXJyZW5jZQor JXR5cGUgPGl0ZW0+IGFkdmljZV9pdGVtCisldHlwZSA8bGlzdD4gYWR2aWNlX2l0ZW1fbGlzdCBi aXRtYXBfc3VibGlzdCBiaXRtYXBfdGFyZ2V0X2xpc3QgZ2VuZXJpY190YXJnZXRfbGlzdAorJXR5 cGUgPGxpc3Q+IGluZGV4X3RhcmdldF9saXN0IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QKKyV0eXBl IDxsaXN0PiBvcHRfcGFydGl0aW9uIHNpbXBsZV90YXJnZXRfbGlzdAorJXR5cGUgPHN0cj4gaWRl bnRpZmllciBvcHRfcGxhbl9uYW1lCisldHlwZSA8dGFyZ2V0PiBnZW5lcmljX3N1Ymxpc3Qgam9p bl9vcmRlcl9zdWJsaXN0CisldHlwZSA8dGFyZ2V0PiByZWxhdGlvbl9pZGVudGlmaWVyCisldHlw ZSA8aXRhcmdldD4gYml0bWFwX3RhcmdldF9pdGVtIGluZGV4X25hbWUKKworJXN0YXJ0IHBhcnNl X3RvcGxldmVsCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKKworcGFyc2VfdG9wbGV2ZWw6 IGFkdmljZV9pdGVtX2xpc3QKKwkJeworCQkJKHZvaWQpIHl5bmVycnM7CQkJCS8qIHN1cHByZXNz IGNvbXBpbGVyIHdhcm5pbmcgKi8KKwkJCSpyZXN1bHQgPSAkMTsKKwkJfQorCTsKKworYWR2aWNl X2l0ZW1fbGlzdDogYWR2aWNlX2l0ZW1fbGlzdCBhZHZpY2VfaXRlbQorCQl7ICQkID0gbGFwcGVu ZCgkMSwgJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCithZHZpY2VfaXRlbTogVE9L X1RBR19KT0lOX09SREVSICcoJyBqb2luX29yZGVyX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkk JCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJJCQtPnRhZyA9IFBHUEFf VEFHX0pPSU5fT1JERVI7CisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQkJaWYgKCQzID09IE5JTCkK KwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAor CQkJCQkJCSAiSk9JTl9PUkRFUiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHRhcmdldCIpOworCQl9 CisJfCBUT0tfVEFHX0lOREVYICcoJyBpbmRleF90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQg PSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCWlmIChzdHJjbXAoJDEsICJp bmRleF9vbmx5X3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRFWF9PTkxZ X1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJpbmRleF9zY2FuIikgPT0gMCkKKwkJCQkk JC0+dGFnID0gUEdQQV9UQUdfSU5ERVhfU0NBTjsKKwkJCWVsc2UKKwkJCQllbG9nKEVSUk9SLCAi dGFnIHBhcnNpbmcgZmFpbGVkOiAlcyIsICQxKTsKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0K Kwl8IFRPS19UQUdfQklUTUFQICcoJyBiaXRtYXBfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQk ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9U QUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwl8IFRPS19U QUdfU0lNUExFICcoJyBzaW1wbGVfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9j MF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQlpZiAoc3RyY21wKCQxLCAibm9fZ2F0aGVy IikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfTk9fR0FUSEVSOworCQkJZWxzZSBpZiAo c3RyY21wKCQxLCAic2VxX3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19TRVFf U0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgInRpZF9zY2FuIikgPT0gMCkKKwkJCQkkJC0+ dGFnID0gUEdQQV9UQUdfVElEX1NDQU47CisJCQllbHNlCisJCQkJZWxvZyhFUlJPUiwgInRhZyBw YXJzaW5nIGZhaWxlZDogJXMiLCAkMSk7CisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJfCBU T0tfVEFHX0dFTkVSSUMgJygnIGdlbmVyaWNfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCWJvb2wJ ZmFpbDsKKworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCSQk LT50YWcgPSBwZ3BhX3BhcnNlX2FkdmljZV90YWcoJDEsICZmYWlsKTsKKwkJCWlmIChmYWlsKQor CQkJeworCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5u ZXIsCisJCQkJCQkJICJ1bnJlY29nbml6ZWQgYWR2aWNlIHRhZyIpOworCQkJfQorCisJCQlpZiAo JCQtPnRhZyA9PSBQR1BBX1RBR19GT1JFSUdOX0pPSU4pCisJCQl7CisJCQkJZm9yZWFjaF9wdHIo cGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsICQzKQorCQkJCXsKKwkJCQkJaWYgKHRhcmdldC0+ dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUiB8fAorCQkJCQkJbGlzdF9sZW5ndGgodGFy Z2V0LT5jaGlsZHJlbikgPT0gMSkKKwkJCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9l cnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkJCSAiRk9SRUlHTl9KT0lOIHRhcmdldHMg bXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaWRlbnRpZmllciIpOworCQkJCX0K KwkJCX0KKworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCTsKKworcmVsYXRpb25faWRlbnRp ZmllcjogaWRlbnRpZmllciBvcHRfcmlfb2NjdXJyZW5jZSBvcHRfcGFydGl0aW9uIG9wdF9wbGFu X25hbWUKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOwor CQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfSURFTlRJRklFUjsKKwkJCSQkLT5yaWQuYWxpYXNf bmFtZSA9ICQxOworCQkJJCQtPnJpZC5vY2N1cnJlbmNlID0gJDI7CisJCQlpZiAobGlzdF9sZW5n dGgoJDMpID09IDIpCisJCQl7CisJCQkJJCQtPnJpZC5wYXJ0bnNwID0gbGluaXRpYWwoJDMpOwor CQkJCSQkLT5yaWQucGFydHJlbCA9IGxzZWNvbmQoJDMpOworCQkJfQorCQkJZWxzZSBpZiAoJDMg IT0gTklMKQorCQkJCSQkLT5yaWQucGFydHJlbCA9IGxpbml0aWFsKCQzKTsKKwkJCSQkLT5yaWQu cGxhbl9uYW1lID0gJDQ7CisJCX0KKwk7CisKK2luZGV4X25hbWU6IGlkZW50aWZpZXIKKwkJewor CQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUg PSBQR1BBX0lOREVYX05BTUU7CisJCQkkJC0+aW5kbmFtZSA9ICQxOworCQl9CisJfCBpZGVudGlm aWVyICcuJyBpZGVudGlmaWVyCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRl eF90YXJnZXQpOworCQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9OQU1FOworCQkJJCQtPmluZG5h bWVzcGFjZSA9ICQxOworCQkJJCQtPmluZG5hbWUgPSAkMzsKKwkJfQorCTsKKworb3B0X3JpX29j Y3VycmVuY2U6CisJJyMnIFRPS19JTlRFR0VSCisJCXsKKwkJCWlmICgkMiA8PSAwKQorCQkJCXBn cGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJ ICJvbmx5IHBvc2l0aXZlIG9jY3VycmVuY2UgbnVtYmVycyBhcmUgcGVybWl0dGVkIik7CisJCQkk JCA9ICQyOworCQl9CisJfAorCQl7CisJCQkvKiBUaGUgZGVmYXVsdCBvY2N1cnJlbmNlIG51bWJl ciBpcyAxLiAqLworCQkJJCQgPSAxOworCQl9CisJOworCitpZGVudGlmaWVyOiBUT0tfSURFTlQK Kwl8IFRPS19UQUdfSk9JTl9PUkRFUgorCXwgVE9LX1RBR19JTkRFWAorCXwgVE9LX1RBR19CSVRN QVAKKwl8IFRPS19UQUdfU0lNUExFCisJfCBUT0tfVEFHX0dFTkVSSUMKKwk7CisKKy8qCisgKiBX aGVuIGdlbmVyYXRpbmcgYWR2aWNlLCB3ZSBhbHdheXMgc2NoZW1hLXF1YWxpZnkgdGhlIHBhcnRp dGlvbiBuYW1lLCBidXQKKyAqIHdoZW4gcGFyc2luZyBhZHZpY2UsIHdlIGFjY2VwdCBhIHNwZWNp ZmljYXRpb24gdGhhdCBsYWNrcyBvbmUuCisgKi8KK29wdF9wYXJ0aXRpb246CisJJy8nIFRPS19J REVOVCAnLicgVE9LX0lERU5UCisJCXsgJCQgPSBsaXN0X21ha2UyKCQyLCAkNCk7IH0KKwl8ICcv JyBUT0tfSURFTlQKKwkJeyAkJCA9IGxpc3RfbWFrZTEoJDIpOyB9CisJfAorCQl7ICQkID0gTklM OyB9CisJOworCitvcHRfcGxhbl9uYW1lOgorCSdAJyBUT0tfSURFTlQKKwkJeyAkJCA9ICQyOyB9 CisJfAorCQl7ICQkID0gTlVMTDsgfQorCTsKKworYml0bWFwX3RhcmdldF9saXN0OiBiaXRtYXBf dGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllciBiaXRtYXBfdGFyZ2V0X2l0ZW0KKwkJewor CQkJJDItPml0YXJnZXQgPSAkMzsKKwkJCSQkID0gbGFwcGVuZCgkMSwgJDIpOworCQl9CisJfAor CQl7ICQkID0gTklMOyB9CisJOworCitiaXRtYXBfdGFyZ2V0X2l0ZW06IGluZGV4X25hbWUKKwkJ eyAkJCA9ICQxOyB9CisJfCBUT0tfT1IgJygnIGJpdG1hcF9zdWJsaXN0ICcpJworCQl7CisJCQkk JCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQkLT5pdHlwZSA9IFBH UEFfSU5ERVhfT1I7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMzsKKwkJfQorCXwgVE9LX0FORCAnKCcg Yml0bWFwX3N1Ymxpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRl eF90YXJnZXQpOworCQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9BTkQ7CisJCQkkJC0+Y2hpbGRy ZW4gPSAkMzsKKwkJfQorCTsKKworYml0bWFwX3N1Ymxpc3Q6IGJpdG1hcF9zdWJsaXN0IGJpdG1h cF90YXJnZXRfaXRlbQorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfCBiaXRtYXBfdGFy Z2V0X2l0ZW0KKwkJeyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJOworCitnZW5lcmljX3Rhcmdl dF9saXN0OiBnZW5lcmljX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9 IGxhcHBlbmQoJDEsICQyKTsgfQorCXwgZ2VuZXJpY190YXJnZXRfbGlzdCBnZW5lcmljX3N1Ymxp c3QKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsK KworZ2VuZXJpY19zdWJsaXN0OiAnKCcgZ2VuZXJpY190YXJnZXRfbGlzdCAnKScKKwkJeworCQkJ JCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0g UEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwk7 CisKK2luZGV4X3RhcmdldF9saXN0OgorCSAgaW5kZXhfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRl bnRpZmllciBpbmRleF9uYW1lCisJCXsKKwkJCSQyLT5pdGFyZ2V0ID0gJDM7CisJCQkkJCA9IGxh cHBlbmQoJDEsICQyKTsKKwkJfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworam9pbl9vcmRl cl90YXJnZXRfbGlzdDogam9pbl9vcmRlcl90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVy CisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3Qg am9pbl9vcmRlcl9zdWJsaXN0CisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsg JCQgPSBOSUw7IH0KKwk7CisKK2pvaW5fb3JkZXJfc3VibGlzdDoKKwknKCcgam9pbl9vcmRlcl90 YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90 YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJJCQt PmNoaWxkcmVuID0gJDI7CisJCX0KKwl8ICd7JyBzaW1wbGVfdGFyZ2V0X2xpc3QgJ30nCisJCXsK KwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlw ZSA9IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJ CX0KKwk7CisKK3NpbXBsZV90YXJnZXRfbGlzdDogc2ltcGxlX3RhcmdldF9saXN0IHJlbGF0aW9u X2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5J TDsgfQorCTsKKworJSUKKworLyoKKyAqIFBhcnNlIGFuIGFkdmljZV9zdHJpbmcgYW5kIHJldHVy biB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgcGdwYV9hZHZpY2VfaXRlbQorICogb2JqZWN0cy4gSWYg YSBwYXJzZSBlcnJvciBvY2N1cnMsIGluc3RlYWQgcmV0dXJuIE5VTEwuCisgKgorICogSWYgdGhl IHJldHVybiB2YWx1ZSBpcyBOVUxMLCAqZXJyb3JfcCB3aWxsIGJlIHNldCB0byB0aGUgZXJyb3Ig bWVzc2FnZTsKKyAqIG90aGVyd2lzZSwgKmVycm9yX3Agd2lsbCBiZSBzZXQgdG8gTlVMTC4KKyAq LworTGlzdCAqCitwZ3BhX3BhcnNlKGNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsIGNoYXIgKipl cnJvcl9wKQoreworCXl5c2Nhbl90CXNjYW5uZXI7CisJTGlzdAkgICAqcmVzdWx0OworCWNoYXIJ ICAgKmVycm9yID0gTlVMTDsKKworCXBncGFfc2Nhbm5lcl9pbml0KGFkdmljZV9zdHJpbmcsICZz Y2FubmVyKTsKKwlwZ3BhX3l5cGFyc2UoJnJlc3VsdCwgJmVycm9yLCBzY2FubmVyKTsKKwlwZ3Bh X3NjYW5uZXJfZmluaXNoKHNjYW5uZXIpOworCisJaWYgKGVycm9yICE9IE5VTEwpCisJeworCQkq ZXJyb3JfcCA9IGVycm9yOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkqZXJyb3JfcCA9IE5VTEw7 CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9wbGFubmVyLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZGM1M2RhOTc0MgotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKQEAgLTAs MCArMSwxODY4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3BsYW5uZXIuYwor ICoJICBwbGFubmVyIGhvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfcGxhbm5lci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRl ICJwZ3BhX2NvbGxlY3Rvci5oIgorI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1 ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAi cGdwYV90cm92ZS5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21t b24vaGFzaGZuX3Vuc3RhYmxlLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5j bHVkZSAib3B0aW1pemVyL2V4dGVuZHBsYW4uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5v ZGUuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIv cGxhbmNhdC5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAicGFy c2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCisjaWZkZWYg VVNFX0FTU0VSVF9DSEVDS0lORworCisvKgorICogV2hlbiBhc3NlcnRpb25zIGFyZSBlbmFibGVk LCB3ZSB0cnkgZ2VuZXJhdGluZyByZWxhdGlvbiBpZGVudGlmaWVycyBkdXJpbmcKKyAqIHBsYW5u aW5nLCBzYXZpbmcgdGhlbSBpbiBhIGhhc2ggdGFibGUsIGFuZCB0aGVuIGNyb3NzLWNoZWNraW5n IHRoZW0gYWdhaW5zdAorICogdGhlIG9uZXMgZ2VuZXJhdGVkIGFmdGVyIHBsYW5uaW5nIGlzIGNv bXBsZXRlLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3JpX2NoZWNrZXJfa2V5Cit7CisJY2hh cgkgICAqcGxhbl9uYW1lOworCUluZGV4CQlydGk7Cit9IHBncGFfcmlfY2hlY2tlcl9rZXk7CisK K3R5cGVkZWYgc3RydWN0IHBncGFfcmlfY2hlY2tlcgoreworCXBncGFfcmlfY2hlY2tlcl9rZXkg a2V5OworCXVpbnQzMgkJc3RhdHVzOworCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7Cit9IHBncGFf cmlfY2hlY2tlcjsKKworc3RhdGljIHVpbnQzMiBwZ3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkocGdw YV9yaV9jaGVja2VyX2tleSBrZXkpOworCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfcmlfY2hl Y2tlcl9jb21wYXJlX2tleShwZ3BhX3JpX2NoZWNrZXJfa2V5IGEsIHBncGFfcmlfY2hlY2tlcl9r ZXkgYikKK3sKKwlpZiAoYS5ydGkgIT0gYi5ydGkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYS5w bGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIChiLnBsYW5fbmFtZSA9PSBOVUxMKTsKKwlpZiAo Yi5wbGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiBzdHJjbXAoYS5w bGFuX25hbWUsIGIucGxhbl9uYW1lKSA9PSAwOworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBn cGFfcmlfY2hlY2sKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQlwZ3BhX3JpX2NoZWNrZXIKKyNk ZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3JpX2NoZWNrZXJfa2V5CisjZGVmaW5lIFNIX0tFWQkJ CQlrZXkKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtleSkJcGdwYV9yaV9jaGVja2VyX2hhc2hf a2V5KGtleSkKKyNkZWZpbmUJU0hfRVFVQUwodGIsIGEsIGIpCXBncGFfcmlfY2hlY2tlcl9jb21w YXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBpbmxpbmUKKyNkZWZpbmUg U0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5o IgorCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFubmVyX3N0YXRlCit7CisJRXhw bGFpblN0YXRlICpleHBsYWluX3N0YXRlOworCWJvb2wJCWdlbmVyYXRlX2FkdmljZV9zdHJpbmc7 CisJcGdwYV90cm92ZSAqdHJvdmU7CisJTWVtb3J5Q29udGV4dCB0cm92ZV9jeHQ7CisJTGlzdAkg ICAqc2pfdW5pcXVlX3JlbHM7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdwYV9y aV9jaGVja19oYXNoICpyaV9jaGVja19oYXNoOworI2VuZGlmCit9IHBncGFfcGxhbm5lcl9zdGF0 ZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9qb2luX3N0YXRlCit7CisJLyogTW9zdC1yZWNlbnRs eS1jb25zaWRlcmVkIG91dGVyIHJlbC4gKi8KKwlSZWxPcHRJbmZvICpvdXRlcnJlbDsKKworCS8q IE1vc3QtcmVjZW50bHktY29uc2lkZXJlZCBpbm5lciByZWwuICovCisJUmVsT3B0SW5mbyAqaW5u ZXJyZWw7CisKKwkvKgorCSAqIEFycmF5IG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzIGZvciBhbGwg bWVtYmVycyBvZiB0aGlzIGpvaW5yZWwsIHdpdGgKKwkgKiBvdXRlcnJlbCBpZGVuaWZpZXJzIGJl Zm9yZSBpbm5lcnJlbCBpZGVudGlmaWVycy4KKwkgKi8KKwlwZ3BhX2lkZW50aWZpZXIgKnJpZHM7 CisKKwkvKiBOdW1iZXIgb2Ygb3V0ZXIgcmVsIGlkZW50aWZpZXJzLiAqLworCWludAkJCW91dGVy X2NvdW50OworCisJLyogTnVtYmVyIG9mIGlubmVyIHJlbCBpZGVudGlmaWVycy4gKi8KKwlpbnQJ CQlpbm5lcl9jb3VudDsKKworCS8qCisJICogVHJvdmUgbG9va3VwIHJlc3VsdHMuCisJICoKKwkg KiBqb2luX2VudHJpZXMgYW5kIHJlbF9lbnRyaWVzIGFyZSBhcnJheXMgb2YgZW50cmllcywgYW5k IGpvaW5faW5kZXhlcworCSAqIGFuZCByZWxfaW5kZXhlcyBhcmUgdGhlIGludGVnZXIgb2Zmc2V0 cyB3aXRoaW4gdGhvc2UgYXJyYXlzIG9mIGVudHJpZXMKKwkgKiBwb3RlbnRpYWxseSByZWxldmFu dCB0byB1cy4gVGhlICJqb2luIiBmaWVsZHMgY29ycmVzcG9uZCB0byBhIGxvb2t1cAorCSAqIHVz aW5nIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4gYW5kIHRoZSAicmVsIiBmaWVsZHMgdG8gYSBsb29r dXAgdXNpbmcKKwkgKiBQR1BBX1RST1ZFX0xPT0tVUF9SRUwuCisJICovCisJcGdwYV90cm92ZV9l bnRyeSAqam9pbl9lbnRyaWVzOworCUJpdG1hcHNldCAgKmpvaW5faW5kZXhlczsKKwlwZ3BhX3Ry b3ZlX2VudHJ5ICpyZWxfZW50cmllczsKKwlCaXRtYXBzZXQgICpyZWxfaW5kZXhlczsKK30gcGdw YV9qb2luX3N0YXRlOworCisvKiBTYXZlZCBob29rIHZhbHVlcyAqLworc3RhdGljIGdldF9yZWxh dGlvbl9pbmZvX2hvb2tfdHlwZSBwcmV2X2dldF9yZWxhdGlvbl9pbmZvID0gTlVMTDsKK3N0YXRp YyBqb2luX3BhdGhfc2V0dXBfaG9va190eXBlIHByZXZfam9pbl9wYXRoX3NldHVwID0gTlVMTDsK K3N0YXRpYyBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBwcmV2X2pvaW5yZWxfc2V0dXAgPSBOVUxM Oworc3RhdGljIHBsYW5uZXJfc2V0dXBfaG9va190eXBlIHByZXZfcGxhbm5lcl9zZXR1cCA9IE5V TEw7CitzdGF0aWMgcGxhbm5lcl9zaHV0ZG93bl9ob29rX3R5cGUgcHJldl9wbGFubmVyX3NodXRk b3duID0gTlVMTDsKKworLyogT3RoZXIgZ2xvYmFsIHZhcmlhYmVzICovCitzdGF0aWMgaW50CXBs YW5uZXJfZXh0ZW5zaW9uX2lkID0gLTE7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMuICovCitz dGF0aWMgdm9pZCBwZ3BhX2dldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkgICBPaWQgcmVsYXRpb25PYmplY3RJZCwKKwkJCQkJCQkJICAgYm9vbCBpbmhwYXJlbnQs CisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgdm9pZCBwZ3BhX2pvaW5yZWxf c2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqam9pbnJlbCwK KwkJCQkJCQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJCQkgICBSZWxPcHRJbmZvICpp bm5lcnJlbCwKKwkJCQkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJCQkJCQkgICBM aXN0ICpyZXN0cmljdGxpc3QpOworc3RhdGljIHZvaWQgcGdwYV9qb2luX3BhdGhfc2V0dXAoUGxh bm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkg UmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJCSBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJ CQkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkgSm9pblBhdGhFeHRyYURhdGEgKmV4 dHJhKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9zZXR1cChQbGFubmVyR2xvYmFsICpnbG9i LCBRdWVyeSAqcGFyc2UsCisJCQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJ CQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJhY3Rpb24sCisJCQkJCQkJICAgRXhwbGFpblN0YXRlICpl cyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xv YiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxh bm5lZFN0bXQgKnBzdG10KTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9qb2lucmVs X2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQkJCSAgY2hhciAqcGxhbl9uYW1l LAorCQkJCQkJCQkJCQkgIHBncGFfam9pbl9zdGF0ZSAqcGpzKTsKK3N0YXRpYyB2b2lkIHBncGFf cGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJ CQkJCQkJdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJCQkJY2hhciAqcGxhbl9uYW1lLAor CQkJCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMpOworc3RhdGljIHZvaWQgcGdwYV9wbGFu bmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkJCQkgICBwZ3Bh X3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpzY2Fu X2luZGV4ZXMsCisJCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMsCisJ CQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcyk7CitzdGF0aWMgdWludDY0IHBncGFf am9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSB0 YWcpOworc3RhdGljIGJvb2wgcGdwYV9qb2luX29yZGVyX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJf Y291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpyaWRz LAorCQkJCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSk7CitzdGF0aWMgYm9vbCBwZ3Bh X2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3Vu dCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkgIHBncGFf dHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKTsK K3N0YXRpYyBib29sIHBncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2luKGludCBvdXRlcl9jb3Vu dCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAor CQkJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJCQkJICBib29sICpy ZXN0cmljdF9tZXRob2QpOworCitzdGF0aWMgTGlzdCAqcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVk YmFjayhMaXN0ICpsaXN0LCBwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkJCQkgIHBncGFfdHJv dmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRl bnRpZmllcnMsCisJCQkJCQkJCQkJICBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlcik7 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJf c3RhdGUgKnBwcywKKwkJCQkJCQkJCQlQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlSZWxP cHRJbmZvICpyZWwpOworc3RhdGljIHZvaWQgcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBncGFf cGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCk7CisKK3N0 YXRpYyBjaGFyICpwZ3BhX2Jtc190b19jc3RyaW5nKEJpdG1hcHNldCAqYm1zKTsKKworLyoKKyAq IEluc3RhbGwgcGxhbm5lci1yZWxhdGVkIGhvb2tzLgorICovCit2b2lkCitwZ3BhX3BsYW5uZXJf aW5zdGFsbF9ob29rcyh2b2lkKQoreworCXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gR2V0UGxhbm5l ckV4dGVuc2lvbklkKCJwZ19wbGFuX2FkdmljZSIpOworCXByZXZfZ2V0X3JlbGF0aW9uX2luZm8g PSBnZXRfcmVsYXRpb25faW5mb19ob29rOworCWdldF9yZWxhdGlvbl9pbmZvX2hvb2sgPSBwZ3Bh X2dldF9yZWxhdGlvbl9pbmZvOworCXByZXZfam9pbnJlbF9zZXR1cCA9IGpvaW5yZWxfc2V0dXBf aG9vazsKKwlqb2lucmVsX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5yZWxfc2V0dXA7CisJcHJldl9q b2luX3BhdGhfc2V0dXAgPSBqb2luX3BhdGhfc2V0dXBfaG9vazsKKwlqb2luX3BhdGhfc2V0dXBf aG9vayA9IHBncGFfam9pbl9wYXRoX3NldHVwOworCXByZXZfcGxhbm5lcl9zZXR1cCA9IHBsYW5u ZXJfc2V0dXBfaG9vazsKKwlwbGFubmVyX3NldHVwX2hvb2sgPSBwZ3BhX3BsYW5uZXJfc2V0dXA7 CisJcHJldl9wbGFubmVyX3NodXRkb3duID0gcGxhbm5lcl9zaHV0ZG93bl9ob29rOworCXBsYW5u ZXJfc2h1dGRvd25faG9vayA9IHBncGFfcGxhbm5lcl9zaHV0ZG93bjsKK30KKworLyoKKyAqIEhv b2sgZnVuY3Rpb24gZm9yIGdldF9yZWxhdGlvbl9pbmZvKCkuCisgKgorICogV2UgY2FuIGFwcGx5 IHNjYW4gYWR2aWNlIGF0IHRoaXMgb3BpbnQsIGFuZCB3ZSBhbHNvIHVzZWUgdGhpcyBhcyBhbgor ICogb3Bwb3J0dW5pdHkgdG8gZG8gcmFuZ2UtdGFibGUgaWRlbnRpZmllciBjcm9zcy1jaGVja2lu ZyBpbiBhc3NlcnQtZW5hYmxlZAorICogYnVpbGRzLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9n ZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQs CisJCQkJCSAgIGJvb2wgaW5ocGFyZW50LCBSZWxPcHRJbmZvICpyZWwpCit7CisJcGdwYV9wbGFu bmVyX3N0YXRlICpwcHM7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5 IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNp b25TdGF0ZShyb290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisKKwkvKiBTYXZlIGRl dGFpbHMgbmVlZGVkIGZvciByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGNyb3NzLWNoZWNraW5nLiAq LworCWlmIChwcHMgIT0gTlVMTCkKKwkJcGdwYV9yaV9jaGVja2VyX3NhdmUocHBzLCByb290LCBy ZWwpOworCisJLyogSWYgcXVlcnkgYWR2aWNlIHdhcyBwcm92aWRlZCwgc2VhcmNoIGZvciByZWxl dmFudCBlbnRyaWVzLiAqLworCWlmIChwcHMgIT0gTlVMTCAmJiBwcHMtPnRyb3ZlICE9IE5VTEwp CisJeworCQlwZ3BhX2lkZW50aWZpZXIgcmlkOworCQlwZ3BhX3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0 X3NjYW47CisJCXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHRfcmVsOworCisJCS8qIFNlYXJjaCBm b3Igc2NhbiBhZHZpY2UgYW5kIGdlbmVyYWwgcmVsIGFkdmljZS4gKi8KKwkJcGdwYV9jb21wdXRl X2lkZW50aWZpZXJfYnlfcnRpKHJvb3QsIHJlbC0+cmVsaWQsICZyaWQpOworCQlwZ3BhX3Ryb3Zl X2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOLCAxLCAmcmlkLAorCQkJ CQkJICAmdHJlc3VsdF9zY2FuKTsKKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQ QV9UUk9WRV9MT09LVVBfUkVMLCAxLCAmcmlkLAorCQkJCQkJICAmdHJlc3VsdF9yZWwpOworCisJ CS8qIElmIHJlbGV2YW50IGVudHJpZXMgd2VyZSBmb3VuZCwgYXBwbHkgdGhlbS4gKi8KKwkJaWYg KHRyZXN1bHRfc2Nhbi5pbmRleGVzICE9IE5VTEwgfHwgdHJlc3VsdF9yZWwuaW5kZXhlcyAhPSBO VUxMKQorCQl7CisJCQl1aW50NjQJCW9yaWdpbmFsX21hc2sgPSByZWwtPnBnc19tYXNrOworCisJ CQlwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UocmVsLAorCQkJCQkJCQkJCSAgIHRyZXN1 bHRfc2Nhbi5lbnRyaWVzLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfc2Nhbi5pbmRleGVzLAorCQkJ CQkJCQkJCSAgIHRyZXN1bHRfcmVsLmVudHJpZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9yZWwu aW5kZXhlcyk7CisKKwkJCS8qIEVtaXQgZGVidWdnaW5nIG1lc3NhZ2UsIGlmIGVuYWJsZWQuICov CisJCQlpZiAocGdfcGxhbl9hZHZpY2VfdHJhY2VfbWFzayAmJiBvcmlnaW5hbF9tYXNrICE9IHJl bC0+cGdzX21hc2spCisJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJKGVycm1zZygic3RyYXRl Z3kgbWFzayBmb3IgUlRJICV1IGNoYW5nZWQgZnJvbSAweCUiIFBSSXg2NCAiIHRvIDB4JSIgUFJJ eDY0LAorCQkJCQkJCQlyZWwtPnJlbGlkLCBvcmlnaW5hbF9tYXNrLCByZWwtPnBnc19tYXNrKSkp OworCQl9CisJfQorCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHBy ZXZfZ2V0X3JlbGF0aW9uX2luZm8pCisJCSgqcHJldl9nZXRfcmVsYXRpb25faW5mbykgKHJvb3Qs IHJlbGF0aW9uT2JqZWN0SWQsIGluaHBhcmVudCwgcmVsKTsKK30KKworLyoKKyAqIFNlYXJjaCBm b3IgYWR2aWNlIHBlcnRhaW5pbmcgdG8gYSBwcm9wb3NlZCBqb2luLgorICovCitzdGF0aWMgcGdw YV9qb2luX3N0YXRlICoKK3BncGFfZ2V0X2pvaW5fc3RhdGUoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCVJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZv ICppbm5lcnJlbCkKK3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwlwZ3BhX2pvaW5fc3Rh dGUgKnBqczsKKwlib29sCQluZXdfcGpzID0gZmFsc2U7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0 ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBs YW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShyb290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9p ZCk7CisJaWYgKHBwcyA9PSBOVUxMIHx8IHBwcy0+dHJvdmUgPT0gTlVMTCkKKwl7CisJCS8qIE5v IGFkdmljZSBhcHBsaWVzIHRvIHRoaXMgcXVlcnksIGhlbmNlIG5vbmUgdG8gdGhpcyBqb2lucmVs LiAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFNlZSB3aGV0aGVyIHdlJ3ZlIHBy ZXZpb3VzbHkgYXNzb2NpYXRlZCBhIHBncGFfam9pbl9zdGF0ZSB3aXRoIHRoaXMKKwkgKiBqb2lu cmVsLiBJZiB3ZSBoYXZlIG5vdCwgd2UgbmVlZCB0byB0cnkgdG8gY29uc3RydWN0IG9uZS4gSWYg d2UgaGF2ZSwKKwkgKiB0aGVuIHRoZXJlIGFyZSB0d28gY2FzZXM6IChhKSBpZiBpbm5lcnJlbCBh bmQgb3V0ZXJyZWwgYXJlIHVuY2hhbmdlZCwKKwkgKiB3ZSBjYW4gc2ltcGx5IHVzZSBpdCwgYW5k IChiKSBpZiB0aGV5IGhhdmUgY2hhbmdlZCwgd2UgbmVlZCB0byByZWppZ2dlcgorCSAqIHRoZSBh cnJheSBvZiBpZGVudGlmaWVycyBidXQgY2FuIHN0aWxsIHNraXAgdGhlIHRyb3ZlIGxvb2t1cC4K KwkgKi8KKwlwanMgPSBHZXRSZWxPcHRJbmZvRXh0ZW5zaW9uU3RhdGUoam9pbnJlbCwgcGxhbm5l cl9leHRlbnNpb25faWQpOworCWlmIChwanMgIT0gTlVMTCkKKwl7CisJCWlmIChwanMtPmpvaW5f aW5kZXhlcyA9PSBOVUxMICYmIHBqcy0+cmVsX2luZGV4ZXMgPT0gTlVMTCkKKwkJeworCQkJLyoK KwkJCSAqIElmIHRoZXJlJ3Mgbm8gcG90ZW50aWFsbHkgcmVsZXZhbnQgYWR2aWNlLCB0aGVuIHRo ZSBwcmVzZW5jZSBvZgorCQkJICogdGhpcyBwZ3BhX2pvaW5fc3RhdGUgYWN0cyBsaWtlIGEgbmVn YXRpdmUgY2FjaGUgZW50cnk6IGl0IHRlbGxzCisJCQkgKiB1cyBub3QgdG8gYm90aGVyIHNlYXJj aGluZyB0aGUgdHJvdmUgZm9yIGFkdmljZSwgYmVjYXVzZSB3ZQorCQkJICogd2lsbCBub3QgZmlu ZCBhbnkuCisJCQkgKi8KKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKHBqcy0+b3V0ZXJy ZWwgPT0gb3V0ZXJyZWwgJiYgcGpzLT5pbm5lcnJlbCA9PSBpbm5lcnJlbCkKKwkJeworCQkJLyog Tm8gdXBkYXRlcyByZXF1aXJlZCwgc28ganVzdCByZXR1cm4uICovCisJCQkvKiBYWFguIERvZXMg dGhpcyBuZWVkIHRvIGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdW5kZXIgR0VRTz8gKi8KKwkJCXJl dHVybiBwanM7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gcGdwYV9qb2luX3N0 YXRlIHlldCwgd2UgbmVlZCB0byBhbGxvY2F0ZSBvbmUuIFRyb3ZlIGtleXMKKwkgKiB3aWxsIG5v dCBnZXQgYnVpbHQgZm9yIFJURV9KT0lOIFJURXMsIHNvIHRoZSBhcnJheSBtYXkgZW5kIHVwIGJl aW5nCisJICogbGFyZ2VyIHRoYW4gbmVlZGVkLiBJdCdzIG5vdCB3b3J0aCB0cnlpbmcgdG8gY29t cHV0ZSBhIHBlcmZlY3RseQorCSAqIGFjY3VyYXRlIGNvdW50IGhlcmUuCisJICovCisJaWYgKHBq cyA9PSBOVUxMKQorCXsKKwkJaW50CQkJcGVzc2ltaXN0aWNfY291bnQgPSBibXNfbnVtX21lbWJl cnMoam9pbnJlbC0+cmVsaWRzKTsKKworCQlwanMgPSBwYWxsb2MwX29iamVjdChwZ3BhX2pvaW5f c3RhdGUpOworCQlwanMtPnJpZHMgPSBwYWxsb2NfYXJyYXkocGdwYV9pZGVudGlmaWVyLCBwZXNz aW1pc3RpY19jb3VudCk7CisJCW5ld19wanMgPSB0cnVlOworCX0KKworCS8qCisJICogRWl0aGVy IHdlIGp1c3QgYWxsb2NhdGVkIGEgbmV3IHBncGFfam9pbl9zdGF0ZSwgb3IgdGhlIGV4aXN0aW5n IG9uZQorCSAqIG5lZWRzIHJlY29uZmlndXJpbmcgZm9yIGEgbmV3IGlubmVycmVsIGFuZCBvdXRl cnJlbC4gVGhlIHJlcXVpcmVkIGFycmF5CisJICogc2l6ZSBjYW4ndCBjaGFuZ2UsIHNvIHdlIGNh biBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIG9uZS4KKwkgKi8KKwlwanMtPm91dGVycmVsID0gb3V0 ZXJyZWw7CisJcGpzLT5pbm5lcnJlbCA9IGlubmVycmVsOworCXBqcy0+b3V0ZXJfY291bnQgPQor CQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJvb3QsIG91dGVycmVsLT5yZWxp ZHMsIHBqcy0+cmlkcyk7CisJcGpzLT5pbm5lcl9jb3VudCA9CisJCXBncGFfY29tcHV0ZV9pZGVu dGlmaWVyc19ieV9yZWxpZHMocm9vdCwgaW5uZXJyZWwtPnJlbGlkcywKKwkJCQkJCQkJCQkgICBw anMtPnJpZHMgKyBwanMtPm91dGVyX2NvdW50KTsKKworCS8qCisJICogSWYgd2UgYWxsb2NhdGVk IGEgbmV3IHBncGFfam9pbl9zdGF0ZSwgc2VhcmNoIG91ciB0cm92ZSBvZiBhZHZpY2UgZm9yCisJ ICogcmVsZXZhbnQgZW50cmllcy4gVGhlIHRyb3ZlIGxvb2t1cCB3aWxsIHJldHVybiB0aGUgc2Ft ZSByZXN1bHRzIGZvcgorCSAqIGV2ZXJ5IG91dGVycmVsL2lubmVycmVsIGNvbWJpbmF0aW9uLCBz byB3ZSBkb24ndCBuZWVkIHRvIHJlcGVhdCB0aGF0CisJICogd29yayBldmVyeSB0aW1lLgorCSAq LworCWlmIChuZXdfcGpzKQorCXsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdDsKKworCQkv KiBGaW5kIGpvaW4gZW50cmllcy4gKi8KKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwg UEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+ aW5uZXJfY291bnQsCisJCQkJCQkgIHBqcy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPmpvaW5f ZW50cmllcyA9IHRyZXN1bHQuZW50cmllczsKKwkJcGpzLT5qb2luX2luZGV4ZXMgPSB0cmVzdWx0 LmluZGV4ZXM7CisKKwkJLyogRmluZCByZWwgZW50cmllcy4gKi8KKwkJcGdwYV90cm92ZV9sb29r dXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfUkVMLAorCQkJCQkJICBwanMtPm91dGVy X2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCSAgcGpzLT5yaWRzLCAmdHJlc3VsdCk7 CisJCXBqcy0+cmVsX2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7CisJCXBqcy0+cmVsX2luZGV4 ZXMgPSB0cmVzdWx0LmluZGV4ZXM7CisKKwkJLyogTm93IHRoYXQgdGhlIG5ldyBwZ3BhX2pvaW5f c3RhdGUgaXMgZnVsbHkgdmFsaWQsIHNhdmUgYSBwb2ludGVyLiAqLworCQlTZXRSZWxPcHRJbmZv RXh0ZW5zaW9uU3RhdGUoam9pbnJlbCwgcGxhbm5lcl9leHRlbnNpb25faWQsIHBqcyk7CisKKwkJ LyoKKwkJICogSWYgdGhlcmUgd2FzIG5vIHJlbGV2YW50IGFkdmljZSBmb3VuZCwganVzdCByZXR1 cm4gTlVMTC4gVGhpcworCQkgKiBwZ3BhX2pvaW5fc3RhdGUgd2lsbCBzdGljayBhcm91bmQgYXMg YSBzb3J0IG9mIG5lZ2F0aXZlIGNhY2hlCisJCSAqIGVudHJ5LCBzbyB0aGF0IGZ1dHVyZSBjYWxs cyBmb3IgdGhpcyBzYW1lIGpvaW5yZWwgcXVpY2tseSByZXR1cm4KKwkJICogTlVMTC4KKwkJICov CisJCWlmIChwanMtPmpvaW5faW5kZXhlcyA9PSBOVUxMICYmIHBqcy0+cmVsX2luZGV4ZXMgPT0g TlVMTCkKKwkJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBwanM7Cit9CisKKy8qCisgKiBF bmZvcmNlIGFueSBwcm92aWRlZCBhZHZpY2UgdGhhdCBpcyByZWxldmFudCB0byBhbnkgbWV0aG9k IG9mIGltcGxlbWVudGluZworICogdGhpcyBqb2luLgorICoKKyAqIEFsdGhvdWdoIHdlJ3JlIHBh c3NlZCB0aGUgb3V0ZXJyZWwgYW5kIGlubmVycmVsIGhlcmUsIHRob3NlIGFyZSBqdXN0CisgKiB3 aGF0ZXZlciB2YWx1ZXMgaGFwcGVuZWQgdG8gcHJvbXB0IHRoZSBjcmVhdGlvbiBvZiB0aGlzIGpv aW5yZWw7IHRoZXkKKyAqIHNob3VsZG4ndCByZWFsbHkgaW5mbHVlbmNlIG91ciBjaG9pY2Ugb2Yg d2hhdCBhZHZpY2UgdG8gYXBwbHkuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2pvaW5yZWxfc2V0 dXAoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJICAgUmVsT3B0 SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCSAgIFNwZWNpYWxKb2lu SW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmljdGxpc3QpCit7CisJcGdwYV9qb2luX3N0YXRlICpw anM7CisKKwlBc3NlcnQoYm1zX21lbWJlcnNoaXAoam9pbnJlbC0+cmVsaWRzKSA9PSBCTVNfTVVM VElQTEUpOworCisJLyogR2V0IG91ciBwcml2YXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGlz IGpvaW4uICovCisJcGpzID0gcGdwYV9nZXRfam9pbl9zdGF0ZShyb290LCBqb2lucmVsLCBvdXRl cnJlbCwgaW5uZXJyZWwpOworCisJLyogSWYgdGhlcmUgaXMgcmVsZXZhbnQgYWR2aWNlLCBjYWxs IGEgaGVscGVyIGZ1bmN0aW9uIHRvIGFwcGx5IGl0LiAqLworCWlmIChwanMgIT0gTlVMTCkKKwl7 CisJCXVpbnQ2NAkJb3JpZ2luYWxfbWFzayA9IGpvaW5yZWwtPnBnc19tYXNrOworCisJCXBncGFf cGxhbm5lcl9hcHBseV9qb2lucmVsX2FkdmljZSgmam9pbnJlbC0+cGdzX21hc2ssCisJCQkJCQkJ CQkJICByb290LT5wbGFuX25hbWUsCisJCQkJCQkJCQkJICBwanMpOworCisJCS8qIEVtaXQgZGVi dWdnaW5nIG1lc3NhZ2UsIGlmIGVuYWJsZWQuICovCisJCWlmIChwZ19wbGFuX2FkdmljZV90cmFj ZV9tYXNrICYmIG9yaWdpbmFsX21hc2sgIT0gam9pbnJlbC0+cGdzX21hc2spCisJCQllcmVwb3J0 KFdBUk5JTkcsCisJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yIGpvaW4gb24gUlRJcyAl cyBjaGFuZ2VkIGZyb20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwKKwkJCQkJCQlwZ3Bh X2Jtc190b19jc3RyaW5nKGpvaW5yZWwtPnJlbGlkcyksCisJCQkJCQkJb3JpZ2luYWxfbWFzaywK KwkJCQkJCQlqb2lucmVsLT5wZ3NfbWFzaykpKTsKKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJl dmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9qb2lucmVsX3NldHVwKQorCQkoKnByZXZfam9pbnJl bF9zZXR1cCkgKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkgICBz amluZm8sIHJlc3RyaWN0bGlzdCk7Cit9CisKKy8qCisgKiBFbmZvcmNlIGFueSBwcm92aWRlZCBh ZHZpY2UgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgbWV0aG9kIG9mCisgKiBp bXBsZW1lbnRpbmcgdGhpcyBwYXJ0aWN1bGFyIGpvaW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X2pvaW5fcGF0aF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwK KwkJCQkJIFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJ IEpvaW5UeXBlIGpvaW50eXBlLCBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpCit7CisJcGdwYV9q b2luX3N0YXRlICpwanM7CisKKwlBc3NlcnQoYm1zX21lbWJlcnNoaXAoam9pbnJlbC0+cmVsaWRz KSA9PSBCTVNfTVVMVElQTEUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBjb25zaWRlcmluZyBpbXBs ZW1lbnRpbmcgYSBzZW1pam9pbiBieSBtYWtpbmcgb25lIHNpZGUgdW5pcXVlLAorCSAqIG1ha2Ug YSBub3RlIG9mIGl0IGluIHRoZSBwZ3BhX3BsYW5uZXJfc3RhdGUuIFNlZSBjb21tZW50cyBmb3IK KwkgKiBwZ3BhX3NqX3VuaXF1ZV9yZWwgZm9yIHdoeSB3ZSBkbyB0aGlzLgorCSAqLworCWlmIChq b2ludHlwZSA9PSBKT0lOX1VOSVFVRV9PVVRFUiB8fCBqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9J Tk5FUikKKwl7CisJCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCQlSZWxPcHRJbmZvICp1bmlx dWVyZWw7CisKKwkJdW5pcXVlcmVsID0gam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIgPyBv dXRlcnJlbCA6IGlubmVycmVsOworCQlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3Rh dGUocm9vdC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCQlpZiAocHBzLT5nZW5lcmF0 ZV9hZHZpY2Vfc3RyaW5nKQorCQl7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCQkvKiBB dm9pZCBhZGRpbmcgZHVwbGljYXRlcy4gKi8KKwkJCWZvcmVhY2hfcHRyKHBncGFfc2pfdW5pcXVl X3JlbCwgdXIsIHBwcy0+c2pfdW5pcXVlX3JlbHMpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBz aG91bGQgYWx3YXlzIHVzZSB0aGUgc2FtZSBwb2ludGVyIGZvciB0aGUgc2FtZSBwbGFuCisJCQkJ ICogbmFtZSwgc28gd2UgbmVlZCBub3QgdXNlIHN0cmNtcCgpIGhlcmUuCisJCQkJICovCisJCQkJ aWYgKHJvb3QtPnBsYW5fbmFtZSA9PSB1ci0+cGxhbl9uYW1lICYmCisJCQkJCWJtc19lcXVhbCh1 bmlxdWVyZWwtPnJlbGlkcywgdXItPnJlbGlkcykpCisJCQkJeworCQkJCQlmb3VuZCA9IHRydWU7 CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogSWYgbm90IGEgZHVwbGljYXRlLCBh cHBlbmQgdG8gdGhlIGxpc3QuICovCisJCQlpZiAoIWZvdW5kKQorCQkJeworCQkJCXBncGFfc2pf dW5pcXVlX3JlbCAqdXIgPSBwYWxsb2Nfb2JqZWN0KHBncGFfc2pfdW5pcXVlX3JlbCk7CisKKwkJ CQl1ci0+cGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworCQkJCXVyLT5yZWxpZHMgPSB1bmlx dWVyZWwtPnJlbGlkczsKKwkJCQlwcHMtPnNqX3VuaXF1ZV9yZWxzID0gbGFwcGVuZChwcHMtPnNq X3VuaXF1ZV9yZWxzLCB1cik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBHZXQgb3VyIHByaXZhdGUg c3RhdGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgam9pbi4gKi8KKwlwanMgPSBwZ3BhX2dldF9qb2lu X3N0YXRlKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCk7CisKKwkvKiBJZiB0aGVy ZSBpcyByZWxldmFudCBhZHZpY2UsIGNhbGwgYSBoZWxwZXIgZnVuY3Rpb24gdG8gYXBwbHkgaXQu ICovCisJaWYgKHBqcyAhPSBOVUxMKQorCXsKKwkJdWludDY0CQlvcmlnaW5hbF9tYXNrID0gZXh0 cmEtPnBnc19tYXNrOworCisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKGpv aW50eXBlLAorCQkJCQkJCQkJCQkmZXh0cmEtPnBnc19tYXNrLAorCQkJCQkJCQkJCQlyb290LT5w bGFuX25hbWUsCisJCQkJCQkJCQkJCXBqcyk7CisKKwkJLyogRW1pdCBkZWJ1Z2dpbmcgbWVzc2Fn ZSwgaWYgZW5hYmxlZC4gKi8KKwkJaWYgKHBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2sgJiYgb3Jp Z2luYWxfbWFzayAhPSBleHRyYS0+cGdzX21hc2spCisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJ CShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yIGpvaW4gb24gJXMgd2l0aCBvdXRlciAlcyBhbmQg aW5uZXIgJXMgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJ CQkJcGdwYV9ibXNfdG9fY3N0cmluZyhqb2lucmVsLT5yZWxpZHMpLAorCQkJCQkJCXBncGFfYm1z X3RvX2NzdHJpbmcob3V0ZXJyZWwtPnJlbGlkcyksCisJCQkJCQkJcGdwYV9ibXNfdG9fY3N0cmlu Zyhpbm5lcnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlvcmlnaW5hbF9tYXNrLAorCQkJCQkJCWV4dHJh LT5wZ3NfbWFzaykpKTsKKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8K KwlpZiAocHJldl9qb2luX3BhdGhfc2V0dXApCisJCSgqcHJldl9qb2luX3BhdGhfc2V0dXApIChy b290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJCSBqb2ludHlwZSwgZXh0 cmEpOworfQorCisvKgorICogQ2Fycnkgb3V0IHdoYXRldmVyIHNldHVwIHdvcmsgd2UgbmVlZCB0 byBkbyBiZWZvcmUgcGxhbm5pbmcuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2V0 dXAoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsCisJCQkJICAgZG91YmxlICp0dXBsZV9mcmFjdGlvbiwgRXhwbGFpblN0YXRlICplcykK K3sKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IE5VTEw7CisJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7 CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IGZhbHNlOworCWJvb2wJCW5lZWRzX3Bw cyA9IGZhbHNlOworCisJLyoKKwkgKiBEZWNpZGUgd2hldGhlciB3ZSBuZWVkIHRvIGdlbmVyYXRl IGFuIGFkdmljZSBzdHJpbmcuIFdlIG11c3QgZG8gdGhpcyBpZgorCSAqIGF0IGxlYXN0IG9uZSBj b2xsZWN0b3IgaXMgZW5hYmxlZCBvciBpZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGl0IHVzaW5n CisJICogdGhlIEVYUExBSU4gKFBMQU5fQURWSUNFKSBvcHRpb24uCisJICovCisJZ2VuZXJhdGVf YWR2aWNlX3N0cmluZyA9IChwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID4g MCB8fAorCQkJCQkJCSAgcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQgPiAw IHx8CisJCQkJCQkJICBwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihlcykpOworCWlmIChn ZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nKQorCQluZWVkc19wcHMgPSB0cnVlOworCisJLyoKKwkgKiBJ ZiBhbnkgYWR2aWNlIHdhcyBwcm92aWRlZCwgYnVpbGQgYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHVz ZSBkdXJpbmcKKwkgKiBwbGFubmluZy4KKwkgKi8KKwlpZiAocGdfcGxhbl9hZHZpY2VfYWR2aWNl ICE9IE5VTEwgJiYgcGdfcGxhbl9hZHZpY2VfYWR2aWNlWzBdICE9ICdcMCcpCisJeworCQlMaXN0 CSAgICphZHZpY2VfaXRlbXM7CisJCWNoYXIJICAgKmVycm9yOworCisJCS8qCisJCSAqIFBhcnNp bmcgc2hvdWxkbid0IGZhaWwgaGVyZSwgYmVjYXVzZSB3ZSBtdXN0IGhhdmUgcHJldmlvdXNseSBw YXJzZWQKKwkJICogc3VjY2Vzc2Z1bGx5IGluIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19o b29rLCBidXQgaWYgaXQgZG9lcywKKwkJICogZW1pdCBhIHdhcm5pbmcuCisJCSAqLworCQlhZHZp Y2VfaXRlbXMgPSBwZ3BhX3BhcnNlKHBnX3BsYW5fYWR2aWNlX2FkdmljZSwgJmVycm9yKTsKKwkJ aWYgKGVycm9yKQorCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IHBhcnNlIGFkdmljZTogJXMi LCBlcnJvcik7CisKKwkJLyoKKwkJICogSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBhZHZpY2Ugc3Ry aW5nIHdhcyBub24tZW1wdHkgYnV0IGNvbnRhaW5lZCBubworCQkgKiBhY3R1YWwgYWR2aWNlLCBl LmcuIGl0IHdhcyBhbGwgd2hpdGVzcGFjZS4KKwkJICovCisJCWlmIChhZHZpY2VfaXRlbXMgIT0g TklMKQorCQl7CisJCQl0cm92ZSA9IHBncGFfYnVpbGRfdHJvdmUoYWR2aWNlX2l0ZW1zKTsKKwkJ CW5lZWRzX3BwcyA9IHRydWU7CisJCX0KKwl9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisKKwkvKgorCSAqIElmIGFzc2VydHMgYXJlIGVuYWJsZWQsIGFsd2F5cyBidWlsZCBhIHByaXZh dGUgc3RhdGUgb2JqZWN0IGZvcgorCSAqIGNyb3NzLWNoZWNrcy4KKwkgKi8KKwluZWVkc19wcHMg PSB0cnVlOworI2VuZGlmCisKKwkvKgorCSAqIFdlIG9ubHkgY3JlYXRlIGFuZCBpbml0aWFsaXpl IGEgcHJpdmF0ZSBzdGF0ZSBvYmplY3QgaWYgaXQncyBuZWVkZWQgZm9yCisJICogc29tZSBwdXJw b3NlLiBUaGF0IGNvdWxkIGJlICgxKSByZWNvcmRpbmcgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gZ2Vu ZXJhdGUKKwkgKiBhbiBhZHZpY2Ugc3RyaW5nLCAoMikgc3RvcmluZyBhIHRyb3ZlIG9mIHN1cHBs aWVkIGFkdmljZSwgb3IgKDMpCisJICogZmFjaWxpdGF0aW5nIGRlYnVnZ2luZyBjcm9zcy1jaGVj a3Mgd2hlbiBhc3NlcnRzIGFyZSBlbmFibGVkLgorCSAqLworCWlmIChuZWVkc19wcHMpCisJewor CQlwcHMgPSBwYWxsb2MwX29iamVjdChwZ3BhX3BsYW5uZXJfc3RhdGUpOworCQlwcHMtPmV4cGxh aW5fc3RhdGUgPSBlczsKKwkJcHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gZ2VuZXJhdGVf YWR2aWNlX3N0cmluZzsKKwkJcHBzLT50cm92ZSA9IHRyb3ZlOworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKwkJcHBzLT5yaV9jaGVja19oYXNoID0KKwkJCXBncGFfcmlfY2hlY2tfY3JlYXRl KEN1cnJlbnRNZW1vcnlDb250ZXh0LCAxMDI0LCBOVUxMKTsKKyNlbmRpZgorCQlTZXRQbGFubmVy R2xvYmFsRXh0ZW5zaW9uU3RhdGUoZ2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQsIHBwcyk7CisJ fQorfQorCisvKgorICogQ2Fycnkgb3V0IHdoYXRldmVyIHdvcmsgd2Ugd2FudCB0byBkbyBhZnRl ciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9z aHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCSAgY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7CisJcGdwYV9wbGFubmVy X3N0YXRlICpwcHM7CisJcGdwYV90cm92ZSAqdHJvdmUgPSBOVUxMOworCUV4cGxhaW5TdGF0ZSAq ZXMgPSBOVUxMOworCXBncGFfcGxhbl93YWxrZXJfY29udGV4dCB3YWxrZXIgPSB7MH07CS8qIHBs YWNhdGUgY29tcGlsZXIgKi8KKwlib29sCQlkb19hZHZpY2VfZmVlZGJhY2s7CisJYm9vbAkJZ2Vu ZXJhdGVfYWR2aWNlX3N0cmluZyA9IGZhbHNlOworCUxpc3QJICAgKnBncGFfaXRlbXMgPSBOSUw7 CisJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycyA9IE5VTEw7CisKKwkvKiBGZXRjaCBv dXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBw cyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShnbG9iLCBwbGFubmVyX2V4dGVuc2lv bl9pZCk7CisJaWYgKHBwcyAhPSBOVUxMKQorCXsKKwkJdHJvdmUgPSBwcHMtPnRyb3ZlOworCQll cyA9IHBwcy0+ZXhwbGFpbl9zdGF0ZTsKKwkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IHBwcy0+ Z2VuZXJhdGVfYWR2aWNlX3N0cmluZzsKKwl9CisKKwkvKgorCSAqIElmIGFueSBhZHZpY2Ugd2Fz IHNwZWNpZmllZCwgYW5kIGlmIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgRVhQTEFJTiwgdGhlbgorCSAq IHdlIHNob3VsZCB0cnkgdHJ5IHRvIHByb3ZpZGUgYWR2aWNlIGZlZWRiYWNrLgorCSAqCisJICog SWYgd2UncmUgdHJ5aW5nIHRvIGdlbmVyYXRlIGFuIGFkdmljZSBzdHJpbmcgb3IgaWYgd2UncmUg dHJ5aW5nIHRvCisJICogcHJvdmlkZSBhZHZpY2UgZmVlZGJhY2ssIHRoZW4gd2Ugd2lsbCBuZWVk IHRvIGNyZWF0ZSByYW5nZSB0YWJsZQorCSAqIGlkZW50aWZpZXJzLgorCSAqLworCWRvX2Fkdmlj ZV9mZWVkYmFjayA9ICh0cm92ZSAhPSBOVUxMICYmIGVzICE9IE5VTEwpOworCWlmIChnZW5lcmF0 ZV9hZHZpY2Vfc3RyaW5nIHx8IGRvX2FkdmljZV9mZWVkYmFjaykKKwl7CisJCXBncGFfcGxhbl93 YWxrZXIoJndhbGtlciwgcHN0bXQsIHBwcy0+c2pfdW5pcXVlX3JlbHMpOworCQlydF9pZGVudGlm aWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQpOwor CX0KKworCS8qIEdlbmVyYXRlIHRoZSBhZHZpY2Ugc3RyaW5nLCBpZiB3ZSBuZWVkIHRvIGRvIHNv LiAqLworCWlmIChnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nKQorCXsKKwkJY2hhcgkgICAqYWR2aWNl X3N0cmluZzsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCS8qIEdlbmVyYXRlIGEgdGV4dHVh bCBhZHZpY2Ugc3RyaW5nLiAqLworCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJcGdwYV9vdXRw dXRfYWR2aWNlKCZidWYsICZ3YWxrZXIsIHJ0X2lkZW50aWZpZXJzKTsKKwkJYWR2aWNlX3N0cmlu ZyA9IGJ1Zi5kYXRhOworCisJCS8qIElmIHRoZSBhZHZpY2Ugc3RyaW5nIGlzIGVtcHR5LCBkb24n dCBib3RoZXIgY29sbGVjdGluZyBpdC4gKi8KKwkJaWYgKGFkdmljZV9zdHJpbmdbMF0gIT0gJ1ww JykKKwkJCXBncGFfY29sbGVjdF9hZHZpY2UocHN0bXQtPnF1ZXJ5SWQsIHF1ZXJ5X3N0cmluZywg YWR2aWNlX3N0cmluZyk7CisKKwkJLyoKKwkJICogSWYgd2UndmUgZ29uZSB0byB0aGUgdHJvdWJs ZSBvZiBnZW5lcmF0aW5nIGFuIGFkdmljZSBzdHJpbmcsIGFuZCBpZgorCQkgKiB3ZSdyZSBpbnNp ZGUgRVhQTEFJTiwgc2F2ZSB0aGUgc3RyaW5nIHNvIHdlIGRvbid0IG5lZWQgdG8KKwkJICogcmVn ZW5lcmF0ZSBpdC4KKwkJICovCisJCWlmIChlcyAhPSBOVUxMKQorCQkJcGdwYV9pdGVtcyA9IGxh cHBlbmQocGdwYV9pdGVtcywKKwkJCQkJCQkJIG1ha2VEZWZFbGVtKCJhZHZpY2Vfc3RyaW5nIiwK KwkJCQkJCQkJCQkJIChOb2RlICopIG1ha2VTdHJpbmcoYWR2aWNlX3N0cmluZyksCisJCQkJCQkJ CQkJCSAtMSkpOworCX0KKworCS8qCisJICogSWYgd2UgYXJlIHBsYW5uaW5nIHdpdGhpbiBFWFBM QUlOLCBtYWtlIGFycmFuZ2VtZW50cyB0byBhbGxvdyBFWFBMQUlOCisJICogdG8gdGVsbCB0aGUg dXNlciB3aGF0IGhhcyBoYXBwZW5lZCB3aXRoIHRoZSBwcm92aWRlZCBhZHZpY2UuCisJICoKKwkg KiBOQjogSWYgRVhQTEFJTiBpcyB1c2VkIG9uIGEgcHJlcGFyZWQgaXMgYSBwcmVwYXJlZCBzdGF0 ZW1lbnQsIHBsYW5uaW5nCisJICogd2lsbCBoYXZlIGFscmVhZHkgaGFwcGVuZWQgaGFwcGVuZWQg d2l0aG91dCByZWNvcmRpbmcgdGhlc2UgZGV0YWlscy4gV2UKKwkgKiBjb3VsZCBjb25zaWRlciBh ZGRpbmcgYSBHVUMgdG8gY2F0ZXIgdG8gdGhhdCBzY2VuYXJpbzsgb3Igd2UgY291bGQgZG8KKwkg KiB0aGlzIHdvcmsgYWxsIHRoZSB0aW1lLCBidXQgdGhhdCBzZWVtcyBsaWtlIHRvbyBtdWNoIG92 ZXJoZWFkLgorCSAqLworCWlmIChkb19hZHZpY2VfZmVlZGJhY2spCisJeworCQlMaXN0CSAgICpm ZWVkYmFjayA9IE5JTDsKKworCQkvKgorCQkgKiBJbmplY3QgYSBOb2RlLXRyZWUgcmVwcmVzZW50 YXRpb24gb2YgYWxsIHRoZSB0cm92ZS1lbnRyeSBmbGFncyBpbnRvCisJCSAqIHRoZSBQbGFubmVk U3RtdC4KKwkJICovCisJCWZlZWRiYWNrID0gcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhm ZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09L VVBfU0NBTiwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJh Y2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJ dHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJCQkJCQkJCQkJ cnRfaWRlbnRpZmllcnMsICZ3YWxrZXIpOworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBl bmRfZmVlZGJhY2soZmVlZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBH UEFfVFJPVkVfTE9PS1VQX1JFTCwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2Vy KTsKKworCQlwZ3BhX2l0ZW1zID0gbGFwcGVuZChwZ3BhX2l0ZW1zLCBtYWtlRGVmRWxlbSgiZmVl ZGJhY2siLAorCQkJCQkJCQkJCQkJCSAoTm9kZSAqKSBmZWVkYmFjaywKKwkJCQkJCQkJCQkJCQkg LTEpKTsKKwl9CisKKwkvKiBQdXNoIHdoYXRldmVyIGRhdGEgd2UncmUgc2F2aW5nIGludG8gdGhl IFBsYW5uZWRTdG10LiAqLworCWlmIChwZ3BhX2l0ZW1zICE9IE5JTCkKKwkJcHN0bXQtPmV4dGVu c2lvbl9zdGF0ZSA9CisJCQlsYXBwZW5kKHBzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCW1h a2VEZWZFbGVtKCJwZ19wbGFuX2FkdmljZSIsIChOb2RlICopIHBncGFfaXRlbXMsIC0xKSk7CisK KwkvKgorCSAqIElmIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQsIGNyb3NzLWNoZWNrIHRoZSBnZW5l cmF0ZWQgcmFuZ2UgdGFibGUKKwkgKiBpZGVudGlmaWVycy4KKwkgKi8KKwlpZiAocHBzICE9IE5V TEwpCisJCXBncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwcHMsIHBzdG10KTsKK30KKworLyoKKyAq IEVuZm9yY2Ugb3ZlcmFsbCByZXN0cmljdGlvbnMgb24gYSBqb2luIHJlbGF0aW9uIHRoYXQgYXBw bHkgdW5pZm9ybWx5CisgKiByZWdhcmRsZXNzIG9mIHRoZSBjaG9pY2Ugb2YgaW5uZXIgYW5kIG91 dGVyIHJlbC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2Fk dmljZSh1aW50NjQgKnBnc19tYXNrX3AsIGNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJICBwZ3Bh X2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0gLTE7CisJaW50CQkJZmxhZ3M7CisJYm9v bAkJZ2F0aGVyX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDY0CQlnYXRoZXJfbWFzayA9IDA7CisJ Qml0bWFwc2V0ICAqZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOworCUJpdG1hcHNldCAgKmdh dGhlcl9mdWxsX21hdGNoID0gTlVMTDsKKwlib29sCQlwYXJ0aXRpb253aXNlX2NvbmZsaWN0ID0g ZmFsc2U7CisJaW50CQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMDsKKwlCaXRtYXBzZXQgICpw YXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOworCUJpdG1hcHNldCAgKnBhcnRpdGlv bndpc2VfZnVsbF9tYXRjaCA9IE5VTEw7CisKKwkvKiBJdGVyYXRlIG92ZXIgYWxsIHBvc3NpYmx5 LXJlbGV2YW50IGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGpzLT5y ZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZw anMtPnJlbF9lbnRyaWVzW2ldOworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKwkJYm9vbAkJZnVsbF9t YXRjaCA9IGZhbHNlOworCQl1aW50NjQJCW15X2dhdGhlcl9tYXNrID0gMDsKKwkJaW50CQkJbXlf cGFydGl0aW9ud2lzZV9vdXRjb21lID0gMDsJLyogPjAgeWVzLCA8MCBubyAqLworCisJCS8qCisJ CSAqIEZvciBHQVRIRVIgYW5kIEdBVEhFUl9NRVJHRSwgaWYgdGhlIHNwZWNpZmllZCByZWxhdGlv bnMgZXhhY3RseQorCQkgKiBtYXRjaCB0aGlzIGpvaW5yZWwsIGRvIHdoYXRldmVyIHRoZSBhZHZp Y2Ugc2F5czsgb3RoZXJ3aXNlLCBkb24ndAorCQkgKiBhbGxvdyBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlIGF0IHRoaXMgbGV2ZWwuIEZvciBOT19HQVRIRVIsIHRoZXJlCisJCSAqIG11c3QgYmUgYSBz aW5nbGUgdGFyZ2V0IHJlbGF0aW9uIHdoaWNoIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhpcworCQkg KiBqb2lucmVsLCBzbyBqdXN0IGRvbid0IGFsbG93IEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgaGVy ZSwgZnVsbAorCQkgKiBzdG9wLgorCQkgKi8KKwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdf Tk9fR0FUSEVSKQorCQl7CisJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURFUl9OT05QQVJU SUFMOworCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpbnQJCQl0 b3RhbF9jb3VudDsKKworCQkJdG90YWxfY291bnQgPSBwanMtPm91dGVyX2NvdW50ICsgcGpzLT5p bm5lcl9jb3VudDsKKwkJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KHRvdGFs X2NvdW50LCBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQllbnRyeS0+dGFyZ2V0KTsKKwkJCUFzc2Vy dChpdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCisJCQlpZiAoaXRtID09IFBHUEFfSVRNX0VR VUFMKQorCQkJeworCQkJCWZ1bGxfbWF0Y2ggPSB0cnVlOworCQkJCWlmIChlbnRyeS0+dGFnID09 IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJCW15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSA9 IDE7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIpCisJCQkJCW15 X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBH UEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSX01F UkdFOworCQkJCWVsc2UKKwkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYWR2aWNlIHRhZzog JWQiLAorCQkJCQkJIChpbnQpIGVudHJ5LT50YWcpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJeworCQkJCQlt eV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1Nf Q09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQ R1BBX1RBR19HQVRIRVIgfHwKKwkJCQkJCSBlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9N RVJHRSkKKwkJCQl7CisJCQkJCW15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IC0xOworCQkJCQlt eV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQkJCX0KKwkJCQllbHNl CisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0YWc6ICVkIiwKKwkJCQkJCSAo aW50KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIElmIHdlIHNldCBteV9n YXRoZXJfbWFzayB1cCBhYm92ZSwgdGhlbiB3ZSAoMSkgbWFrZSBhIG5vdGUgaWYgdGhlCisJCSAq IGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVtZW1iZXIgdGhlIG1hc2sgdmFsdWUsIGFuZCAoMykg cmVtZW1iZXIKKwkJICogd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlhbCBtYXRjaC4K KwkJICovCisJCWlmIChteV9nYXRoZXJfbWFzayAhPSAwKQorCQl7CisJCQlpZiAoZ2F0aGVyX21h c2sgIT0gMCAmJiBnYXRoZXJfbWFzayAhPSBteV9nYXRoZXJfbWFzaykKKwkJCQlnYXRoZXJfY29u ZmxpY3QgPSB0cnVlOworCQkJZ2F0aGVyX21hc2sgPSBteV9nYXRoZXJfbWFzazsKKwkJCWlmIChm dWxsX21hdGNoKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVy X2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhlcl9wYXJ0aWFsX21hdGNoID0gYm1z X2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisKKwkJLyoKKwkJICog TGlrZXdpc2UsIGlmIHdlIHNldCBteV9wYXJ0aXRpb253aXNlX291dGNvbWUgdXAgYWJvdmUsIHRo ZW4gd2UgKDEpCisJCSAqIG1ha2UgYSBub3RlIGlmIHRoZSBhZHZpY2UgY29uZmxpY3RlZCwgKDIp IHJlbWVtYmVyIHdoYXQgdGhlIGRlc2lyZWQKKwkJICogb3V0Y29tZSB3YXMsIGFuZCAoMykgcmVt ZW1iZXIgd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlhbAorCQkgKiBtYXRjaC4KKwkJ ICovCisJCWlmIChteV9wYXJ0aXRpb253aXNlX291dGNvbWUgIT0gMCkKKwkJeworCQkJaWYgKHBh cnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwICYmCisJCQkJcGFydGl0aW9ud2lzZV9vdXRjb21lICE9 IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSkKKwkJCQlwYXJ0aXRpb253aXNlX2NvbmZsaWN0ID0g dHJ1ZTsKKwkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29t ZTsKKwkJCWlmIChmdWxsX21hdGNoKQorCQkJCXBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCA9CisJ CQkJCWJtc19hZGRfbWVtYmVyKHBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNl CisJCQkJcGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIo cGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCX0KKworCS8qCisJICogTWFy ayBldmVyeSBHYXRoZXItcmVsYXRlZCBwaWVjZSBvZiBhZHZpY2UgYXMgcGFydGlhbGx5IG1hdGNo ZWQsIGFuZCBpZgorCSAqIHRoZSBzZXQgb2YgdGFyZ2V0cyBleGFjdGx5IG1hdGNoZWQgdGhpcyBy ZWxhdGlvbiwgZnVsbHkgbWF0Y2hlZC4gSWYKKwkgKiB0aGVyZSB3YXMgYSBjb25mbGljdCwgbWFy ayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hf UEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZM SUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIGdhdGhlcl9w YXJ0aWFsX21hdGNoLCBmbGFncyk7CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBn cGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIGdhdGhlcl9mdWxsX21hdGNoLCBm bGFncyk7CisKKwkvKiBMaWtld2lzZSBmb3IgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJZmxh Z3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKHBhcnRpdGlvbndpc2VfY29uZmxpY3Qp CisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3Mo cGpzLT5yZWxfZW50cmllcywgcGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoLCBmbGFncyk7CisJ ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+ cmVsX2VudHJpZXMsIHBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCwgZmxhZ3MpOworCisJLyogSWYg dGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNpZmljYXRpb24sIGVuZm9yY2Ug aXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkKKwl7CisJ CSpwZ3NfbWFza19wICY9CisJCQl+KFBHU19HQVRIRVIgfCBQR1NfR0FUSEVSX01FUkdFIHwgUEdT X0NPTlNJREVSX05PTlBBUlRJQUwpOworCQkqcGdzX21hc2tfcCB8PSBnYXRoZXJfbWFzazsKKwl9 CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5nIHBhcnRpdGlvbndpc2Ug c3BlY2lmaWNhdGlvbiwgZW5mb3JjZS4KKwkgKgorCSAqIFRvIGZvcmNlIGEgcGFydGl0aW9ud2lz ZSBqb2luLCB3ZSBkaXNhYmxlIGFsbCB0aGUgb3JkaW5hcnkgbWVhbnMgb2YKKwkgKiBwZXJmb3Jt aW5nIGEgam9pbiwgYW5kIGluc3RlYWQgb25seSBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIHBhdGhz IGhlcmUuCisJICogVG8gcHJldmVudCBvbmUsIHdlIGp1c3QgZGlzYWJsZSBBcHBlbmQgYW5kIE1l cmdlQXBwZW5kLiAgTm90ZSB0aGF0IHdlCisJICogbXVzdCBub3QgdW5zZXQgUEdTX0NPTlNJREVS X1BBUlRJVElPTldJU0UgZXZlbiB3aGVuIHdlIGRvbid0IHdhbnQgYQorCSAqIHBhcnRpdGlvbndp c2Ugam9pbiBoZXJlLCBiZWNhdXNlIHdlIG1pZ2h0IHdhbnQgb25lIGF0IGEgaGlnaGVyIGxldmVs CisJICogdGhhdCBpcyBjb25zdHJ1Y3RpbmcgdXNpbmcgcGF0aHMgZnJvbSB0aGlzIGxldmVsLgor CSAqLworCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUgIT0gMCAmJiAhcGFydGl0aW9ud2lzZV9j b25mbGljdCkKKwl7CisJCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUgPiAwKQorCQkJKnBnc19t YXNrX3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5fQU5ZKSB8CisJCQkJUEdTX0FQUEVORCB8 IFBHU19NRVJHRV9BUFBFTkQgfCBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRTsKKwkJZWxzZQor CQkJKnBnc19tYXNrX3AgJj0gfihQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCk7CisJfQor fQorCisvKgorICogRW5mb3JjZSByZXN0cmljdGlvbnMgb24gdGhlIGpvaW4gb3JkZXIgb3Igam9p biBtZXRob2QuCisgKgorICogTm90ZSB0aGF0LCBhbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byB2 aWV3IFBBUlRJVElPTldJU0UgYWR2aWNlIGFzCisgKiBjb250cm9sbGluZyB0aGUgam9pbiBtZXRo b2QsIHdlIGNhbid0IGVuZm9yY2UgaXQgaGVyZSwgYmVjYXVzZSB0aGUgY29kZQorICogcGF0aCB3 aGVyZSB0aGlzIGV4ZWN1dGVzIG9ubHkgZGVhbHMgd2l0aCBqb2luIHBhdGhzIHRoYXQgYXJlIGJ1 aWx0IGRpcmVjdGx5CisgKiBmcm9tIGEgc2luZ2xlIG91dGVyIHBhdGggYW5kIGEgc2luZ2xlIGlu bmVyIHBhdGguCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRo X2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJ Y2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMpCit7CisJaW50 CQkJaSA9IC0xOworCUJpdG1hcHNldCAgKmpvX3Blcm1pdF9pbmRleGVzID0gTlVMTDsKKwlCaXRt YXBzZXQgICpqb19kZW55X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmpvX2RlbnlfcmVs X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmptX2luZGV4ZXMgPSBOVUxMOworCWJvb2wJ CWptX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDMyCQlqb2luX21hc2sgPSAwOworCisJLyoKKwkg KiBSZWNvbnNpZGVyIFBBUlRJVElPTldJU0UoLi4uKSBhZHZpY2UuCisJICoKKwkgKiBXZSBhbHJl YWR5IHRob3VnaHQgYWJvdXQgdGhpcyBmb3IgdGhlIGpvaW5yZWwgYXMgYSB3aG9sZSwgYnV0IGlu IHNvbWUKKwkgKiBjYXNlcywgcGFydGl0aW9ud2lzZSBhZHZpY2UgY2FuIGFsc28gY29uc3RyYWlu IHRoZSBqb2luIG9yZGVyLiBGb3IKKwkgKiBpbnN0YW5jZSwgaWYgdGhlIGFkdmljZSBzYXlzIFBB UlRJVElPTldJU0UoKHQxIHQyKSksIHdlIHNob3VsZG4ndCBidWlsZAorCSAqIGpvaW4gcGF0aHMg Zm9yIGEgYW55IGpvaW5yZWwgdGhhdCBpbmNsdWRlcyB0MSBvciB0MiB1bmxlc3MgaXQgYWxzbwor CSAqIGluY2x1ZGVzIHRoZSBvdGhlci4gSW4gZ2VuZXJhbCwgdGhlIHBhcml0aW9ud2lzZSBvcGVy YXRpb24gbXVzdCBoYXZlCisJICogYWxyZWFkeSBiZWVuIGNvbXBsZXRlZCB3aXRoaW4gb25lIHNp ZGUgb2YgdGhlIGN1cnJlbnQgam9pbiBvciB0aGUKKwkgKiBvdGhlciwgZWxzZSB0aGUgam9pbiBv cmRlciBpcyBpbXBlcm1pc3NpYmxlLgorCSAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJl cihwanMtPnJlbF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVu dHJ5ID0gJnBqcy0+cmVsX2VudHJpZXNbaV07CisJCXBncGFfaXRtX3R5cGUgaW5uZXJfaXRtOwor CQlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKworCQlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RB R19QQVJUSVRJT05XSVNFKQorCQkJY29udGludWU7CisKKwkJb3V0ZXJfaXRtID0gcGdwYV9pZGVu dGlmaWVyc19tYXRjaF90YXJnZXQocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCSAgcGpz LT5yaWRzLCBlbnRyeS0+dGFyZ2V0KTsKKwkJaWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9FUVVB TCB8fAorCQkJb3V0ZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJCWNv bnRpbnVlOworCisJCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KHBq cy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkgIHBqcy0+cmlkcyArIHBqcy0+b3V0ZXJfY291 bnQsCisJCQkJCQkJCQkJCQkgIGVudHJ5LT50YXJnZXQpOworCQlpZiAoaW5uZXJfaXRtID09IFBH UEFfSVRNX0VRVUFMIHx8CisJCQlpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VC U0VUKQorCQkJY29udGludWU7CisKKwkJam9fZGVueV9yZWxfaW5kZXhlcyA9IGJtc19hZGRfbWVt YmVyKGpvX2RlbnlfcmVsX2luZGV4ZXMsIGkpOworCX0KKworCS8qIEl0ZXJhdGUgb3ZlciBhZHZp Y2UgdGhhdCBwZXJ0YWlucyB0byB0aGUgam9pbiBvcmRlciBhbmQgbWV0aG9kLiAqLworCWkgPSAt MTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGpzLT5qb2luX2luZGV4ZXMsIGkpKSA+ PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpzLT5qb2luX2VudHJpZXNb aV07CisJCXVpbnQzMgkJbXlfam9pbl9tYXNrOworCisJCS8qIEhhbmRsZSBqb2luIG9yZGVyIGFk dmljZS4gKi8KKwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJewor CQkJaWYgKHBncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJ CQkJCQkJCQkJIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSBwanMtPnJpZHMsCisJCQkJ CQkJCQkJCSBlbnRyeSkpCisJCQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihq b19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQllbHNlCisJCQkJam9fZGVueV9pbmRleGVzID0gYm1z X2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ LyogSGFuZGxlIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiAqLworCQlteV9qb2luX21hc2sgPSBwZ3Bh X2pvaW5fc3RyYXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWcoZW50cnktPnRhZyk7CisJCWlmICht eV9qb2luX21hc2sgIT0gMCkKKwkJeworCQkJYm9vbAkJcGVybWl0OworCQkJYm9vbAkJcmVzdHJp Y3RfbWV0aG9kOworCisJCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19GT1JFSUdOX0pPSU4p CisJCQkJcGVybWl0ID0gcGdwYV9vcGFxdWVfam9pbl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9j b3VudCwKKwkJCQkJCQkJCQkJCQkgICBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAg IHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJCQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVz dHJpY3RfbWV0aG9kKTsKKwkJCWVsc2UKKwkJCQlwZXJtaXQgPSBwZ3BhX2pvaW5fbWV0aG9kX3Bl cm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJf Y291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5 LAorCQkJCQkJCQkJCQkJCSAgICZyZXN0cmljdF9tZXRob2QpOworCQkJaWYgKCFwZXJtaXQpCisJ CQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsK KwkJCWVsc2UgaWYgKHJlc3RyaWN0X21ldGhvZCkKKwkJCXsKKwkJCQlqb19wZXJtaXRfaW5kZXhl cyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVzLCBpKTsKKwkJCQlqbV9pbmRleGVz ID0gYm1zX2FkZF9tZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJCWlmIChqb2luX21h c2sgIT0gMCAmJiBqb2luX21hc2sgIT0gbXlfam9pbl9tYXNrKQorCQkJCQlqbV9jb25mbGljdCA9 IHRydWU7CisJCQkJam9pbl9tYXNrID0gbXlfam9pbl9tYXNrOworCQkJfQorCQkJY29udGludWU7 CisJCX0KKworCQkvKiBIYW5kbGUgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UuICovCisJCWlm IChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSB8fAorCQkJZW50cnktPnRh ZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFKQorCQl7CisJCQlib29sCQlhZHZpY2Vf dW5pcXVlOworCQkJYm9vbAkJanRfdW5pcXVlOworCQkJYm9vbAkJanRfbm9uX3VuaXF1ZTsKKwkJ CWJvb2wJCXJlc3RyaWN0X21ldGhvZDsKKworCQkJLyogQWR2aWNlIHdhbnRzIHRvIHVuaXF1ZS1p ZnkgYW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCWFkdmljZV91bmlxdWUgPSAoZW50cnkt PnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUpOworCisJCQkvKiBQbGFubmVyIGlzIHRy eWluZyB0byB1bmlxdWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQlqdF91bmlx dWUgPSAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfSU5ORVIgfHwKKwkJCQkJCSBqb2ludHlwZSA9 PSBKT0lOX1VOSVFVRV9PVVRFUik7CisKKwkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5nIGEgc2VtaS1q b2luLCB3aXRob3V0IHVuaXF1ZS1pZnlpbmc/ICovCisJCQlqdF9ub25fdW5pcXVlID0gKGpvaW50 eXBlID09IEpPSU5fU0VNSSB8fAorCQkJCQkJCSBqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkp OworCisJCQkvKgorCQkJICogVGhlc2UgYWR2aWNlIHRhZ3MgYmVoYXZlIHZlcnkgbXVjaCBsaWtl IGpvaW4gbWV0aG9kIGFkdmljZSwgaW4KKwkJCSAqIHRoYXQgdGhleSB3YW50IHRoZSBpbm5lciBz aWRlIG9mIHRoZSBzZW1pam9pbiB0byBtYXRjaCB0aGUKKwkJCSAqIHJlbGF0aW9ucyBsaXN0ZWQg aW4gdGhlIGFkdmljZS4gSGVuY2UsIHdlIHRlc3Qgd2hldGhlciBqb2luCisJCQkgKiBtZXRob2Qg YWR2aWNlIHdvdWxkIGVuZm9yY2UgYSBqb2luIG9yZGVyIHJlc3RyaWN0aW9uIGhlcmUsIGFuZAor CQkJICogZGlzYWxsb3cgdGhlIGpvaW4gaWYgbm90LgorCQkJICoKKwkJCSAqIFhYWC4gVGhpbmsg aGFyZGVyIGFib3V0IHJpZ2h0IHNlbWlqb2lucy4KKwkJCSAqLworCQkJaWYgKCFwZ3BhX2pvaW5f bWV0aG9kX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgICBwanMt PmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCSAgIGVu dHJ5LAorCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKSkKKwkJCQlqb19kZW55X2luZGV4 ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJZWxzZSBpZiAocmVz dHJpY3RfbWV0aG9kKQorCQkJeworCQkJCWlmICghanRfdW5pcXVlICYmICFqdF9ub25fdW5pcXVl KQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzZW1p am9pbiB0byB3aGljaCBTSl9VTklRVUUKKwkJCQkJICogb3IgU0pfTk9OX1VOSVFVRSBjYW4gYmUg YXBwbGllZC4KKwkJCQkJICovCisJCQkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX0lOQVBQTElD QUJMRTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoYWR2aWNlX3VuaXF1ZSAhPSBqdF91bmlxdWUpCisJ CQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7 CisJCQkJZWxzZQorCQkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Bl cm1pdF9pbmRleGVzLCBpKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJLyoKKwkg KiBJZiB0aGUgYWR2aWNlIGluZGljYXRlcyBib3RoIHRoYXQgdGhpcyBqb2luIG9yZGVyIGlzIHBl cm1pc3NpYmxlIGFuZAorCSAqIGFsc28gdGhhdCBpdCBpc24ndCwgdGhlbiBtYXJrIGFkdmljZSBy ZWxhdGVkIHRvIHRoZSBqb2luIG9yZGVyIGFzCisJICogY29uZmxpY3RpbmcuCisJICovCisJaWYg KGpvX3Blcm1pdF9pbmRleGVzICE9IE5VTEwgJiYKKwkJKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxM IHx8IGpvX2RlbnlfcmVsX2luZGV4ZXMgIT0gTlVMTCkpCisJeworCQlwZ3BhX3Ryb3ZlX3NldF9m bGFncyhwanMtPmpvaW5fZW50cmllcywgam9fcGVybWl0X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFf VEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmll cywgam9fZGVueV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwkJcGdw YV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgam9fZGVueV9yZWxfaW5kZXhlcywK KwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJfQorCisJLyoKKwkgKiBJZiBtb3JlIHRo YW4gb25lIGpvaW4gbWV0aG9kIHNwZWNpZmljYXRpb24gaXMgcmVsZXZhbnQgaGVyZSBhbmQgdGhl eQorCSAqIGRpZmZlciwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlpZiAo am1fY29uZmxpY3QpCisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBq bV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKworCS8qCisJICogSWYg d2Ugd2VyZSBhZHZpc2VkIHRvIGRlbnkgdGhpcyBqb2luIG9yZGVyLCB0aGVuIGRvIHNvLiBIb3dl dmVyLCBpZiB3ZQorCSAqIHdlcmUgYWxzbyBhZHZpc2VkIHRvIHBlcm1pdCBpdCwgdGhlbiBkbyBu b3RoaW5nLCBzaW5jZSB0aGUgYWR2aWNlCisJICogY29uZmxpY3RzLgorCSAqLworCWlmICgoam9f ZGVueV9pbmRleGVzICE9IE5VTEwgfHwgam9fZGVueV9yZWxfaW5kZXhlcyAhPSBOVUxMKSAmJgor CQlqb19wZXJtaXRfaW5kZXhlcyA9PSBOVUxMKQorCQkqcGdzX21hc2tfcCA9IDA7CisKKwkvKgor CSAqIElmIHdlIHdlcmUgYWR2aXNlZCB0byByZXN0cmljdCB0aGUgam9pbiBtZXRob2QsIHRoZW4g ZG8gc28uIEhvd2V2ZXIsIGlmCisJICogd2UgZ290IGNvbmZsaWN0aW5nIGpvaW4gbWV0aG9kIGFk dmljZSBvciB3ZXJlIGFsc28gYWR2aXNlZCB0byByZWplY3QKKwkgKiB0aGlzIGpvaW4gb3JkZXIg Y29tcGxldGVseSwgdGhlbiBpbnN0ZWFkIGRvIG5vdGhpbmcuCisJICovCisJaWYgKGpvaW5fbWFz ayAhPSAwICYmICFqbV9jb25mbGljdCAmJiBqb19kZW55X2luZGV4ZXMgPT0gTlVMTCkKKwkJKnBn c19tYXNrX3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5fQU5ZKSB8IGpvaW5fbWFzazsKK30K KworLyoKKyAqIFRyYW5zbGF0ZSBhbiBhZHZpY2UgdGFnIGludG8gYSBwYXRoIGdlbmVyYXRpb24g c3RyYXRlZ3kgbWFzay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCB0 YWcgdHlwZXMgdGhhdCBkb24ndCByZXByZXNlbnQgam9pbgorICogc3RyYXRlZ2llcy4gSW4gc3Vj aCBjYXNlcywgd2UganVzdCByZXR1cm4gMCwgd2hpY2ggY2FuJ3QgYmUgY29uZnVzZWQgd2l0aAor ICogYSB2YWxpZCBtYXNrLgorICovCitzdGF0aWMgdWludDY0CitwZ3BhX2pvaW5fc3RyYXRlZ3lf bWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKQoreworCXN3aXRj aCAodGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQlyZXR1cm4gUEdT X0ZPUkVJR05KT0lOOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1 cm4gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVS SUFMSVpFOgorCQkJcmV0dXJuIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkU7CisJCWNhc2UgUEdQ QV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX1BMQUlOOwor CQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIFBHU19O RVNUTE9PUF9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpF OgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9NRU1PSVpFOworCQljYXNlIFBHUEFfVEFHX0hBU0hf Sk9JTjoKKwkJCXJldHVybiBQR1NfSEFTSEpPSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsK Kwl9Cit9CisKKy8qCisgKiBEb2VzIGEgY2VydGFpbiBpdGVtIG9mIGpvaW4gb3JkZXIgYWR2aWNl IHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfam9pbl9vcmRl cl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJ IHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgcGdwYV90cm92ZV9lbnRyeSAqZW50cnkp Cit7CisJYm9vbAkJbG9vcCA9IHRydWU7CisJYm9vbAkJc3VibGlzdCA9IGZhbHNlOworCWludAkJ CWxlbmd0aDsKKwlpbnQJCQlvdXRlcl9sZW5ndGg7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJn ZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBncGFfYWR2aWNlX3RhcmdldCAqcHJlZml4X3RhcmdldDsK KworCS8qIFdlIGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRo aXMgdHJvdmUgZW50cnkuICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElB TDsKKworCS8qCisJICogRmluZCB0aGUgaW5uZXJtb3N0IHN1Ymxpc3QgdGhhdCBjb250YWlucyBh bGwga2V5czsgaWYgbm8gc3VibGlzdCBkb2VzLAorCSAqIHRoZW4gY29udGludWUgcHJvY2Vzc2lu ZyB3aXRoIHRoZSB0b3BsZXZlbCBsaXN0LgorCSAqCisJICogRm9yIGV4YW1wbGUsIGlmIHRoZSBh ZHZpY2Ugc2F5cyBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0NSkpLCB0aGVuIHdlCisJICogc2hv dWxkIGV2YWx1YXRlIGpvaW5zIHRoYXQgb25seSBpbnZvbHZlIHQzLCB0NCwgYW5kL29yIHQ1IGFn YWluc3QgdGhlCisJICogKHQzIHQ0IHQ1KSBzdWJsaXN0LCBhbmQgb3RoZXJzIGFnYWluc3QgdGhl IGZ1bGwgbGlzdC4KKwkgKgorCSAqIE5vdGUgdGhhdCAoMSkgb3V0ZXJtb3N0IHN1Ymxpc3QgaXMg YWx3YXlzIG9yZGVyZWQgYW5kICgyKSB3aGVuZXZlciB3ZQorCSAqIHpvb20gaW50byBhbiB1bm9y ZGVyZWQgc3VibGlzdCwgd2UgaW5zdGFudGx5IGFjY2VwdCB0aGUgcHJvcG9zZWQgam9pbi4KKwkg KiBJZiB0aGUgYWR2aWNlIHNheXMgSk9JTl9PUkRFUih0MSB0MiB7dDMgdDQgdDV9KSwgYW55IGFw cHJvYWNoIHRvCisJICogam9pbmluZyB0MywgdDQsIGFuZC9vciB0NSBpcyBhY2NlcHRhYmxlLgor CSAqLworCXdoaWxlIChsb29wKQorCXsKKwkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfT1JERVJFRF9MSVNUKTsKKworCQlsb29wID0gZmFsc2U7CisJCWZvcmVhY2hfcHRyKHBn cGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJ CQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQkJaWYgKGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQ QV9UQVJHRVRfSURFTlRJRklFUikKKwkJCQljb250aW51ZTsKKworCQkJaXRtID0gcGdwYV9pZGVu dGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJ CQkJCXJpZHMsIGNoaWxkX3RhcmdldCk7CisJCQlpZiAoaXRtID09IFBHUEFfSVRNX0VRVUFMIHx8 IGl0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQpCisJCQl7CisJCQkJaWYgKGNoaWxkX3Rh cmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKQorCQkJCXsKKwkJCQkJdGFy Z2V0ID0gY2hpbGRfdGFyZ2V0OworCQkJCQlzdWJsaXN0ID0gdHJ1ZTsKKwkJCQkJbG9vcCA9IHRy dWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBc3NlcnQoY2hp bGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVCk7CisJCQkJCXJl dHVybiB0cnVlOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogVHJ5IHRvIGZpbmQg YSBwcmVmaXggb2YgdGhlIHNlbGVjdGVkIGpvaW4gb3JkZXIgbGlzdCB0aGF0IGlzIGV4YWN0bHkK KwkgKiBlcXVhbCB0byB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUgcHJvcG9zZWQgam9pbi4KKwkgKi8K KwlsZW5ndGggPSBsaXN0X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKTsKKwlwcmVmaXhfdGFyZ2V0 ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwlwcmVmaXhfdGFyZ2V0LT50 dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsKKwlmb3IgKG91dGVyX2xlbmd0aCA9IDE7 IG91dGVyX2xlbmd0aCA8PSBsZW5ndGg7ICsrb3V0ZXJfbGVuZ3RoKQorCXsKKwkJcGdwYV9pdG1f dHlwZSBpdG07CisKKwkJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgaW4gZXZlcnkgbG9vcCBpdGVy YXRpb24uICovCisJCWlmIChwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbiAhPSBOVUxMKQorCQkJbGlz dF9mcmVlKHByZWZpeF90YXJnZXQtPmNoaWxkcmVuKTsKKwkJcHJlZml4X3RhcmdldC0+Y2hpbGRy ZW4gPSBsaXN0X2NvcHlfaGVhZCh0YXJnZXQtPmNoaWxkcmVuLAorCQkJCQkJCQkJCQkJIG91dGVy X2xlbmd0aCk7CisKKwkJLyogU2VhcmNoLCBob3BpbmcgdG8gZmluZCBhbiBleGFjdCBtYXRjaC4g Ki8KKwkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQsIHJp ZHMsIHByZWZpeF90YXJnZXQpOworCQlpZiAoaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQkJYnJl YWs7CisKKwkJLyoKKwkJICogSWYgdGhlIHByZWZpeCBvZiB0aGUgam9pbiBvcmRlciBsaXN0IHRo YXQgd2UncmUgY29uc2lkZXJpbmcKKwkJICogaW5jbHVkZXMgc29tZSBidXQgbm90IGFsbCBvZiB0 aGUgb3V0ZXIgcmVscywgd2UgY2FuIG1ha2UgdGhlIHByZWZpeAorCQkgKiBsb25nZXIgdG8gZmlu ZCBhbiBleGFjdCBtYXRjaC4gQnV0IHRoZSBhZHZpY2UgaGFzbid0IG1lbnRpb25lZAorCQkgKiBl dmVyeXRoaW5nIHRoYXQncyBwYXJ0IG9mIG91ciBvdXRlciByZWwgeWV0LCBidXQgaGFzIG1lbnRp b25lZAorCQkgKiB0aGluZ3MgdGhhdCBhcmUgbm90LCB0aGVuIHRoaXMgam9pbiBkb2Vzbid0IG1h dGNoIHRoZSBqb2luIG9yZGVyCisJCSAqIGxpc3QuCisJCSAqLworCQlpZiAoaXRtICE9IFBHUEFf SVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAq IElmIHRoZSBwcmV2aW91cyBsb29wZWQgc3RvcHBlZCBiZWZvcmUgdGhlIHByZWZpeF90YXJnZXQg aW5jbHVkZWQgdGhlCisJICogZW50aXJlIGpvaW4gb3JkZXIgbGlzdCwgdGhlbiB0aGUgbmV4dCBt ZW1iZXIgb2YgdGhlIGpvaW4gb3JkZXIgbGlzdAorCSAqIG11c3QgZXhhY3RseSBtYXRjaCB0aGUg aW5uZXIgc2lkZSBvZiB0aGUgam9pbi4KKwkgKgorCSAqIEV4YW1wbGU6IEdpdmVuIEpPSU5fT1JE RVIodDEgdDIgKHQzIHQ0IHQ1KSksIGlmIHRoZSBvdXRlciBzaWRlIG9mIHRoZQorCSAqIGN1cnJl bnQgam9pbiBpbmNsdWRlcyBvbmx5IHQxLCB0aGVuIHRoZSBpbm5lciBzaWRlIG11c3QgYmUgZXhh Y3RseSB0MjsKKwkgKiBpZiB0aGUgb3V0ZXIgc2lkZSBpbmNsdWRlcyBib3RoIHQxIGFuZCB0Miwg dGhlbiB0aGUgaW5uZXIgc2lkZSBtdXN0CisJICogaW5jbHVkZSBleGFjdGx5IHQzLCB0NCwgYW5k IHQ1LgorCSAqLworCWlmIChvdXRlcl9sZW5ndGggPCBsZW5ndGgpCisJeworCQlwZ3BhX2Fkdmlj ZV90YXJnZXQgKmlubmVyX3RhcmdldDsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisKKwkJaW5uZXJf dGFyZ2V0ID0gbGlzdF9udGgodGFyZ2V0LT5jaGlsZHJlbiwgb3V0ZXJfbGVuZ3RoKTsKKworCQlp dG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwgcmlkcyArIG91 dGVyX2NvdW50LAorCQkJCQkJCQkJCQlpbm5lcl90YXJnZXQpOworCisJCS8qCisJCSAqIEJlZm9y ZSByZXR1cm5pbmcsIGNvbnNpZGVyIHdoZXRoZXIgd2UgbmVlZCB0byBtYXJrIHRoaXMgZW50cnkg YXMKKwkJICogZnVsbHkgbWF0Y2hlZC4gSWYgd2UgZm91bmQgZXZlcnkgaXRlbSBidXQgb25lIG9u IHRoZSBsZWZ0aGFuZCBzaWRlCisJCSAqIG9mIHRoZSBqb2luIGFuZCB0aGUgbGFzdCBpdGVtIG9u IHRoZSByaWdodGhhbmQgc2lkZSBvZiB0aGUgam9pbiwKKwkJICogdGhlbiB0aGUgYW5zd2VyIGlz IHllcy4KKwkJICovCisJCWlmIChvdXRlcl9sZW5ndGggKyAxID09IGxlbmd0aCAmJiBpdG0gPT0g UEdQQV9JVE1fRVFVQUwpCisJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOwor CisJCXJldHVybiAoaXRtID09IFBHUEFfSVRNX0VRVUFMKTsKKwl9CisKKwkvKgorCSAqIElmIHdl IGdldCBoZXJlLCB0aGVuIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIGluY2x1ZGVzIHRoZSBl bnRpcmV0eQorCSAqIG9mIHRoZSBqb2luIG9yZGVyIGxpc3QuIEluIHRoaXMgY2FzZSwgd2UgYmVo YXZlIGRpZmZlcmVudGx5IGRlcGVuZGluZworCSAqIG9uIHdoZXRoZXIgd2UncmUgbG9va2luZyBh dCB0aGUgdG9wLWxldmVsIGpvaW4gb3JkZXIgbGlzdCBvciBzdWJsaXN0LgorCSAqIEF0IHRoZSB0 b3AtbGV2ZWwsIHdlIHRyZWF0IHRoZSBzcGVjaWZpZWQgbGlzdCBhcyBtYW5kYXRpbmcgdGhhdCB0 aGUKKwkgKiBhY3R1YWwgam9pbiBvcmRlciBoYXMgdGhlIGdpdmVuIGxpc3QgYXMgYSBwcmVmaXgs IGJ1dCBhIHN1Ymxpc3QKKwkgKiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaC4KKwkgKgorCSAqIEV4 bWFwbGU6IEdpdmVuIEpPSU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHdlIG11c3Qgc3RhcnQg Ynkgam9pbmluZworCSAqIGFsbCBmaXZlIG9mIHRob3NlIHJlbGF0aW9ucyBhbmQgaW4gdGhhdCBz ZXF1ZW5jZSwgYnV0IG9uY2UgdGhhdCBpcworCSAqIGRvbmUsIGl0J3MgT0sgdG8gam9pbiBhbnkg b3RoZXIgcmVscyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBqb2luIHByb2JsZW0uCisJICogVGhpcyBh bGxvd3MgYSB1c2VyIHRvIHNwZWNpZnkgdGhlIGRyaXZpbmcgdGFibGUgYW5kIHBlcmhhcHMgdGhl IGZpcnN0CisJICogZmV3IHRoaW5ncyB0byB3aGljaCBpdCBzaG91bGQgYmUgam9pbmVkIHdoaWxl IGxlYXZpbmcgdGhlIHJlc3Qgb2YgdGhlCisJICogam9pbiBvcmRlciB1cCB0aGUgb3B0aW1pemVy LiBCdXQgaXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBiZSBzdXJwcmlzaW5nLAorCSAqIGdpdmVuIHRo YXQgc3BlY2lmaWNhdGlvbiwgaWYgdGhlIHVzZXIgY291bGQgYWRkIHQ2IHRvIHRoZSAodDMgdDQg dDUpCisJICogc3ViLWpvaW4sIHNvIHdlIGRvbid0IGFsbG93IHRoYXQuIElmIHdlIGRpZCB3YW50 IHRvIGFsbG93IGl0LCB0aGUgbG9naWMKKwkgKiBlYXJsaWVyIGluIHRoaXMgZnVuY3Rpb24gd291 bGQgcmVxdWlyZSBzdWJzdGFudGlhbCBhZGp1c3RtZW50OiB3ZSBjb3VsZAorCSAqIGFsbG93IHRo ZSB0My10NC10NS10NiBqb2luIHRvIGJlIGJ1aWx0IGhlcmUsIGJ1dCB0aGUgbmV4dCBzdGVwIG9m CisJICogam9pbmluZyB0MS10MiB0byB0aGUgcmVzdWx0IHdvdWxkIHN0aWxsIGJlIHJlamVjdGVk LgorCSAqLworCXJldHVybiAhc3VibGlzdDsKK30KKworLyoKKyAqIERvZXMgYSBjZXJ0YWluIGl0 ZW0gb2Ygam9pbiBtZXRob2QgYWR2aWNlIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqCisgKiBB ZHZpY2Ugc3VjaCBhcyBIQVNIX0pPSU4oKHggeSkpIG1lYW5zIHRoYXQgdGhlcmUgc2hvdWxkIGJl IGEgaGFzaCBqb2luIHdpdGgKKyAqIGV4YWN0bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZS4g T2J2aW91c2x5LCB0aGlzIG1lYW5zIHRoYXQgaWYgd2UgYXJlCisgKiBjb25zaWRlcmluZyBhIGpv aW4gd2l0aCBleGFjdGx5IHggYW5kIHkgb24gdGhlIGlubmVyIHNpZGUsIHdlIHNob3VsZCBlbmZv cmNlCisgKiB0aGUgdXNlIG9mIGEgaGFzaCBqb2luLiBIb3dldmVyLCBpdCBhbHNvIG1lYW5zIHRo YXQgd2UgbXVzdCByZWplY3Qgc29tZQorICogaW5jb21wYXRpYmxlIGpvaW4gb3JkZXJzIGVudGly ZWx5LiAgRm9yIGV4YW1wbGUsIGEgam9pbiB3aXRoIGV4YWN0bHkgeAorICogYW5kIHkgb24gdGhl IG91dGVyIHNpZGUgc2hvdWxkbid0IGJlIGFsbG93ZWQsIGJlY2F1c2Ugc3VjaCBwYXRocyBtaWdo dCB3aW4KKyAqIG92ZXIgdGhlIGFkdmljZS1kcml2ZW4gcGF0aCBvbiBjb3N0LgorICoKKyAqIFRv IGFjY29tbW9kYXRlIHRoZXNlIHJlcXVpcmVtZW50cywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRy dWUgaWYgdGhlIGpvaW4KKyAqIHNob3VsZCBiZSBhbGxvd2VkIGFuZCBmYWxzZSBpZiBpdCBzaG91 bGQgbm90LiBGdXJ0aGVybW9yZSwgKnJlc3RyaWN0X21ldGhvZAorICogaXMgc2V0IHRvIHRydWUg aWYgdGhlIGpvaW4gbWV0aG9kIHNob3VsZCBiZSBlbmZvcmNlZCBhbmQgZmFsc2UgaWYgbm90Lgor ICovCitzdGF0aWMgYm9vbAorcGdwYV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4oaW50IG91dGVy X2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMs CisJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkgIGJvb2wgKnJlc3Ry aWN0X21ldGhvZCkKK3sKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50YXJn ZXQ7CisJcGdwYV9pdG1fdHlwZSBpbm5lcl9pdG07CisJcGdwYV9pdG1fdHlwZSBvdXRlcl9pdG07 CisJcGdwYV9pdG1fdHlwZSBqb2luX2l0bTsKKworCS8qIFdlIGRlZmluaXRlbHkgaGF2ZSBhdCBs ZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUgZW50cnkuICovCisJZW50cnktPmZs YWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKworCSpyZXN0cmljdF9tZXRob2QgPSBmYWxz ZTsKKworCS8qCisJICogSWYgb3VyIGlubmVyIHJlbCBtZW50aW9ucyBleGFjdGx5IHRoZSBzYW1l IHJlbGF0aW9ucyBhcyB0aGUgYWR2aWNlCisJICogdGFyZ2V0LCBhbGxvdyB0aGUgam9pbiBhbmQg ZW5mb3JjZSB0aGUgam9pbiBtZXRob2QgcmVzdHJpY3Rpb24uCisJICoKKwkgKiBJZiBvdXIgaW5u ZXIgcmVsIG1lbnRpb25zIGEgc3VwZXJzZXQgb2YgdGhlIHRhcmdldCByZWxhdGlvbnMsIGFsbG93 IHRoZQorCSAqIGpvaW4uIFRoZSBqb2luIHdlIGNhcmUgYWJvdXQgaGFzIGFscmVhZHkgdGFrZW4g cGxhY2UsIGFuZCB0aGlzIGFkdmljZQorCSAqIGltcG9zZXMgbm8gZnVydGhlciByZXN0cmljdGlv bnMuCisJICovCisJaW5uZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW5u ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgcmlkcyArIG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkg IHRhcmdldCk7CisJaWYgKGlubmVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCWVudHJ5 LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJCSpyZXN0cmljdF9tZXRob2QgPSB0cnVl OworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX1RB UkdFVFNfQVJFX1NVQlNFVCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIElmIG91ciBvdXRl ciByZWwgbWVudGlvbnMgYSBzdXBzZXJzZXQgb2YgdGhlIHJlbGF0aW9ucyBpbiB0aGUgYWR2aWNl CisJICogdGFyZ2V0LCBubyByZXN0cmljdGlvbnMgYXBwbHkuIFRoZSBqb2luIHdlIGNhcmUgaGFz IGFscmVhZHkgdGFrZW4KKwkgKiBwbGFjZSwgYW5kIHRoaXMgYWR2aWNlIGltcG9zZXMgbm8gZnVy dGhlciByZXN0cmljdGlvbnMuCisJICoKKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgb3VyIG91 dGVyIHJlbCBtZW50aW9ucyBleGFjdGx5IHRoZSByZWxhdGlvbnMKKwkgKiBtZW50aW9uZWQgaW4g dGhlIGFkdmljZSB0YXJnZXQsIHRoZSBwbGFubmVyIGlzIHRyeWluZyB0byByZXZlcnNlIHRoZQor CSAqIHNpZGVzIG9mIHRoZSBqb2luIGFzIGNvbXBhcmVkIHdpdGggb3VyIGRlc2lyZWQgb3V0Y29t ZS4gUmVqZWN0IHRoYXQuCisJICovCisJb3V0ZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRj aF90YXJnZXQob3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgcmlkcywgdGFyZ2V0KTsKKwlpZiAo b3V0ZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJcmV0dXJuIHRydWU7 CisJZWxzZSBpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKgorCSAqIElmIHRoZSBhZHZpY2UgdGFyZ2V0IG1lbnRpb25zIG9ubHkgYSBzaW5nbGUg cmVsYXRpb24sIHRoZSB0ZXN0IGJlbG93CisJICogY2Fubm90IGV2ZXIgcGFzcywgc28gc2F2ZSBz b21lIHdvcmsgYnkgZXhpdGluZyBub3cuCisJICovCisJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQ QV9UQVJHRVRfSURFTlRJRklFUikKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiBldmVy eXRoaW5nIGluIHRoZSBqb2lucmVsIGlzIGFwcGVhcnMgaW4gdGhlIGFkdmljZSB0YXJnZXQsIHdl J3JlCisJICogYmVsb3cgdGhlIGxldmVsIG9mIHRoZSBqb2luIHdlIHdhbnQgdG8gY29udHJvbC4K KwkgKgorCSAqIEZvciBleGFtcGxlLCBIQVNIX0pPSU4oKHggeSkpIGRvZXNuJ3QgcmVzdHJpY3Qg aG93IHggYW5kIHkgY2FuIGJlCisJICogam9pbmVkLgorCSAqCisJICogVGhpcyBsb29rdXAgc2hv dWxkbid0IHJldHVybiBQR1BBX0lUTV9ESVNKT0lOVCwgYmVjYXVzZSBhbnkgc3VjaCBhZHZpY2UK KwkgKiBzaG91bGQgbm90IGhhdmUgYmVlbiByZXR1cm5lZCBmcm9tIHRoZSB0cm92ZSBpbiB0aGUg Zmlyc3QgcGxhY2UuCisJICovCisJam9pbl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rh cmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0 KTsKKwlBc3NlcnQoam9pbl9pdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCWlmIChqb2luX2l0 bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQgfHwKKwkJam9pbl9pdG0gPT0gUEdQQV9JVE1f RVFVQUwpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBXZSd2ZSBhbHJlYWR5IHBlcm1pdHRl ZCBhbGwgYWxsb3dhYmxlIGNhc2VzLCBzbyByZWplY3QgdGhpcy4KKwkgKgorCSAqIElmIHdlIHJl YWNoIHRoaXMgcG9pbnQsIHRoZW4gdGhlIGFkdmljZSBvdmVybGFwcyB3aXRoIHRoaXMgam9pbiBi dXQKKwkgKiBpc24ndCBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIGVpdGhlciBzaWRlLCBhbmQg dGhlcmUncyBhbHNvIGF0IGxlYXN0CisJICogb25lIHJlbGF0aW9uIHByZXNlbnQgaW4gdGhlIGpv aW4gdGhhdCBpc24ndCBtZW50aW9uZWQgYnkgdGhlIGFkdmljZS4KKwkgKgorCSAqIEZvciBpbnN0 YW5jZSwgaW4gdGhlIEhBU0hfSk9JTigoeCB5KSkgZXhhbXBsZSwgd2Ugd291bGQgcmVhY2ggaGVy ZSBpZiB4CisJICogd2VyZSBvbiBvbmUgc2lkZSBvZiB0aGUgam9pbiwgeSBvbiB0aGUgb3RoZXIs IGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlCisJICogdHdvIHNpZGVzIGFsc28gaW5jbHVkZWQgc29t ZSBvdGhlciByZWxhdGlvbiwgc2F5IHQuIEluIHRoYXQgY2FzZSwKKwkgKiBhY2NlcHRpbmcgdGhp cyBqb2luIHdvdWxkIGFsbG93IHRoZSAoeCB5IHQpIGpvaW5yZWwgdG8gY29udGFpbgorCSAqIG5v bi1kaXNhYmxlZCBwYXRocyB0aGF0IGRvIG5vdCBwdXQgKHggeSkgb24gdGhlIGlubmVyIHNpZGUg b2YgYSBoYXNoCisJICogam9pbjsgd2UgY291bGQgaW5zdGVhZCBlbmQgdXAgd2l0aCBzb21ldGhp bmcgbGlrZSAoeCBKT0lOIHQpIEpPSU4geS4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8q CisgKiBEb2VzIGFkdmljZSBjb25jZXJuaW5nIGFuIG9wYXF1ZSBqb2luIHBlcm1pdCBhIGNlcnRh aW4gam9pbj8KKyAqCisgKiBCeSBhbiBvcGFxdWUgam9pbiwgd2UgbWVhbiBvbmUgd2hlcmUgdGhl IGV4YWN0IG1lY2hhbmlzbSBieSB3aGljaCB0aGUKKyAqIGpvaW4gaXMgcGVyZm9ybWVkIGlzIG5v dCB2aXNpYmxlIHRvIFBvc3RncmVTUUwuIEN1cnJlbnRseSB0aGlzIGlzIHRoZQorICogY2FzZSBv bmx5IGZvciBmb3JlaWduIGpvaW5zOiBGT1JFSUdOX0pPSU4oKHggeSB6KSkgbWVhbnMgdGhhdCB4 LCB5LCBhbmQKKyAqIHogYXJlIGpvaW5lZCBvbiB0aGUgcmVtb3RlIHNpZGUsIGJ1dCB3ZSBrbm93 IG5vdGhpbmcgYWJvdXQgdGhlIGpvaW4gb3JkZXIKKyAqIG9yIGpvaW4gbWV0aG9kcyB1c2VkIG92 ZXIgdGhlcmUuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9p bihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRp ZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAg Ym9vbCAqcmVzdHJpY3RfbWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0g ZW50cnktPnRhcmdldDsKKwlwZ3BhX2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5p dGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4g Ki8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0 X21ldGhvZCA9IGZhbHNlOworCisJam9pbl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rh cmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0 KTsKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQkvKgorCQkgKiBXZSBo YXZlIGFuIGV4YWN0IG1hdGNoLCBhbmQgc2hvdWxkIHRoZXJlZm9yZSBhbGxvdyB0aGUgam9pbiBh bmQKKwkJICogZW5mb3JjZSB0aGUgdXNlIG9mIHRoZSByZWxldmFudCBvcGFxdWUgam9pbiBtZXRo b2QuCisJCSAqLworCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVz dHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKGpvaW5faXRt ID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9U QVJHRVRTX0FSRV9TVUJTRVQpCisJeworCQkvKgorCQkgKiBJZiBqb2luX2l0bSA9PSBQR1BBX0lU TV9UQVJHRVRTX0FSRV9TVUJTRVQsIHRoZW4gdGhlIGpvaW4gd2UgY2FyZQorCQkgKiBhYm91dCBo YXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBhbmQgbm8gZnVydGhlciByZXN0cmljdGlvbnMgYXBwbHku CisJCSAqCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwgd2Un cmUgc3RpbGwgYnVpbGRpbmcgdXAgdG8KKwkJICogdGhlIGpvaW4gd2UgY2FyZSBhYm91dCBhbmQg aGF2ZSBub3QgaW50cm9kdWNlZCBhbnkgZXh0cmFuZW91cworCQkgKiByZWxhdGlvbnMgbm90IG5h bWVkIGluIHRoZSBhZHZpY2UuIE5vdGUgdGhhdCBGb3JlaWduU2NhbiBwYXRocyBmb3IKKwkJICog am9pbnMgYXJlIGJ1aWx0IHVwIGZyb20gRm9yZWlnblNjYW4gcGF0aHMgZnJvbSB1bmRlcmx5aW5n IGpvaW5zIGFuZAorCQkgKiBzY2Fucywgc28gd2UgbXVzdCBub3QgZGlzYWJsZSB0aGlzIGpvaW4g d2hlbiBjb25zaWRlcmluZyBhIHN1YnNldAorCQkgKiBvZiB0aGUgcmVsYXRpb25zIHdlIHVsdGlt YXRlbHkgd2FudC4KKwkJICovCisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogVGhlIGFk dmljZSBvdmVybGFwcyB0aGUgam9pbiwgYnV0IGF0IGxlYXN0IG9uZSByZWxhdGlvbiBpcyBwcmVz ZW50IGluCisJICogdGhlIGpvaW4gdGhhdCBpc24ndCBtZW50aW9uZWQgYnkgdGhlIGFkdmljZS4g V2Ugd2FudCB0byBkaXNhYmxlIHN1Y2gKKwkgKiBwYXRocyBzbyB0aGF0IHdlIGFjdHVhbGx5IHB1 c2ggZG93biB0aGUgam9pbiBhcyBpbnRlbmRlZC4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisK Ky8qCisgKiBBcHBseSBzY2FuIGFkdmljZSB0byBhIFJlbE9wdEluZm8uCisgKgorICogWFhYLiBG b3IgYml0bWFwIGhlYXAgc2NhbnMsIHdlJ3JlIGp1c3QgaWdub3JpbmcgdGhlIGluZGV4IGluZm9y bWF0aW9uIGZyb20KKyAqIHRoZSBhZHZpY2UuIFRoYXQncyBub3QgY29vbC4KKyAqLworc3RhdGlj IHZvaWQKK3BncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCisJ CQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqc2Nhbl9lbnRyaWVzLAorCQkJCQkJCSAgIEJpdG1h cHNldCAqc2Nhbl9pbmRleGVzLAorCQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnJlbF9lbnRy aWVzLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsX2luZGV4ZXMpCit7CisJYm9vbAkJZ2F0aGVy X2NvbmZsaWN0ID0gZmFsc2U7CisJQml0bWFwc2V0ICAqZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBO VUxMOworCUJpdG1hcHNldCAgKmdhdGhlcl9mdWxsX21hdGNoID0gTlVMTDsKKwlpbnQJCQlpID0g LTE7CisJcGdwYV90cm92ZV9lbnRyeSAqc2Nhbl9lbnRyeSA9IE5VTEw7CisJaW50CQkJZmxhZ3M7 CisJYm9vbAkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gZmFsc2U7CisJQml0bWFwc2V0ICAqc2Nhbl90 eXBlX2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKnNjYW5fdHlwZV9yZWxfaW5kZXhlcyA9 IE5VTEw7CisJdWludDY0CQlnYXRoZXJfbWFzayA9IDA7CisJdWludDY0CQlzY2FuX3R5cGUgPSAw OworCisJLyogU2NydXRpbml6ZSBhdmFpbGFibGUgc2NhbiBhZHZpY2UuICovCisJd2hpbGUgKChp ID0gYm1zX25leHRfbWVtYmVyKHNjYW5faW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ry b3ZlX2VudHJ5ICpteV9lbnRyeSA9ICZzY2FuX2VudHJpZXNbaV07CisJCXVpbnQ2NAkJbXlfc2Nh bl90eXBlID0gMDsKKworCQkvKiBUcmFuc2xhdGUgb3VyIGFkdmljZSB0YWdzIHRvIGEgc2NhbiBz dHJhdGVneSBhZHZpY2UgdmFsdWUuICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFH X0JJVE1BUF9IRUFQX1NDQU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfQklUTUFQU0NBTjsKKwkJ ZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4pCisJCQlt eV9zY2FuX3R5cGUgPSBQR1NfSU5ERVhPTkxZU0NBTiB8IFBHU19DT05TSURFUl9JTkRFWE9OTFk7 CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTikKKwkJCW15 X3NjYW5fdHlwZSA9IFBHU19JTkRFWFNDQU47CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0g UEdQQV9UQUdfU0VRX1NDQU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfU0VRU0NBTjsKKwkJZWxz ZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19USURfU0NBTikKKwkJCW15X3NjYW5fdHlw ZSA9IFBHU19USURTQ0FOOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgdW5kZXJzdGFuZGFibGUg c2NhbiBhZHZpY2UsIGhhbmcgb24gdG8gdGhlIGVudHJ5LCB0aGUKKwkJICogaW5mZXJyZWQgc2Nh biB0eXBlIHR5cGUsIGFuZCB0aGUgaW5kZXggYXQgd2hpY2ggd2UgZm91bmQgaXQuCisJCSAqCisJ CSAqIEFsc28gbWFrZSBhIG5vdGUgaWYgd2Ugc2VlIGNvbmZsaWN0aW5nIHNjYW4gdHlwZSBhZHZp Y2UuIE5vdGUgdGhhdAorCQkgKiB3ZSByZWdhcmQgdHdvIGluZGV4IHNwZWNpZmljYXRpb25zIGFz IGNvbmZsaWN0aW5nIHVubGVzcyB0aGV5IG1hdGNoCisJCSAqIGV4YWN0bHkuIEluIHRoZW9yeSwg cGVyaGFwcyB3ZSBjb3VsZCByZWdhcmQgSU5ERVhfU0NBTihhIGMpIGFuZAorCQkgKiBJTkRFWF9T Q0FOKGEgYi5jKSBhcyBub24tY29uZmxpY3RpbmcgaWYgaXQgaGFwcGVucyB0aGF0IHRoZSBvbmx5 CisJCSAqIGluZGV4IG5hbWVkIGMgaXMgaW4gc2NoZW1hIGIsIGJ1dCBpdCBkb2Vzbid0IHNlZW0g d29ydGggdGhlIGNvZGUuCisJCSAqLworCQlpZiAobXlfc2Nhbl90eXBlICE9IDApCisJCXsKKwkJ CWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90eXBlKQorCQkJCXNj YW5fdHlwZV9jb25mbGljdCA9IHRydWU7CisJCQlpZiAoIXNjYW5fdHlwZV9jb25mbGljdCAmJiBz Y2FuX2VudHJ5ICE9IE5VTEwgJiYKKwkJCQlteV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5V TEwgJiYKKwkJCQlzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCAmJgorCQkJCSFw Z3BhX2luZGV4X3RhcmdldHNfZXF1YWwoc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0LAorCQkJ CQkJCQkJCSAgbXlfZW50cnktPnRhcmdldC0+aXRhcmdldCkpCisJCQkJc2Nhbl90eXBlX2NvbmZs aWN0ID0gdHJ1ZTsKKwkJCXNjYW5fZW50cnkgPSBteV9lbnRyeTsKKwkJCXNjYW5fdHlwZSA9IG15 X3NjYW5fdHlwZTsKKwkJCXNjYW5fdHlwZV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoc2Nhbl90 eXBlX2luZGV4ZXMsIGkpOworCQl9CisJfQorCisJLyogU2NydXRpbml6ZSBhdmFpbGFibGUgZ2F0 aGVyLXJlbGF0ZWQgYW5kIHBhcnRpdGlvbndpc2UgYWR2aWNlLiAqLworCWkgPSAtMTsKKwl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocmVsX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdw YV90cm92ZV9lbnRyeSAqbXlfZW50cnkgPSAmcmVsX2VudHJpZXNbaV07CisJCXVpbnQ2NAkJbXlf Z2F0aGVyX21hc2sgPSAwOworCQlib29sCQlqdXN0X29uZV9yZWw7CisKKwkJanVzdF9vbmVfcmVs ID0gbXlfZW50cnktPnRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUgorCQkJ fHwgbGlzdF9sZW5ndGgobXlfZW50cnktPnRhcmdldC0+Y2hpbGRyZW4pID09IDE7CisKKwkJLyoK KwkJICogUEFSVElUSU9OV0lTRSBiZWhhdmVzIGxpa2UgYSBzY2FuIHR5cGUsIGV4Y2VwdCB0aGF0 IGlmIHRoZXJlJ3MgbW9yZQorCQkgKiB0aGFuIG9uZSByZWxhdGlvbiB0YXJnZXRlZCwgaXQgaGFz IG5vIGVmZmVjdCBhdCB0aGlzIGxldmVsLgorCQkgKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0g UEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJeworCQkJaWYgKGp1c3Rfb25lX3JlbCkKKwkJCXsK KwkJCQljb25zdCB1aW50NjQgbXlfc2Nhbl90eXBlID0gUEdTX0FQUEVORCB8IFBHU19NRVJHRV9B UFBFTkQ7CisKKwkJCQlpZiAoc2Nhbl90eXBlICE9IDAgJiYgc2Nhbl90eXBlICE9IG15X3NjYW5f dHlwZSkKKwkJCQkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQlzY2FuX2VudHJ5ID0g bXlfZW50cnk7CisJCQkJc2Nhbl90eXBlID0gbXlfc2Nhbl90eXBlOworCQkJCXNjYW5fdHlwZV9y ZWxfaW5kZXhlcyA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHNjYW5fdHlwZV9yZWxfaW5kZXhlcywg aSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIEdBVEhFUiBhbmQgR0FU SEVSX01FUkdFIGFwcGxpZWQgdG8gYSBzaW5nbGUgcmVsIG1lYW4gdGhhdCB3ZSBzaG91bGQKKwkJ ICogdXNlIHRoZSBjb3JyZXNwb25kaW5ncyBzdHJhdGVneSBoZXJlLCB3aGlsZSBhcHBseWluZyBl aXRoZXIgdG8gbW9yZQorCQkgKiB0aGFuIG9uZSByZWwgbWVhbnMgd2Ugc2hvdWxkIG5vdCB1c2Ug dGhvc2Ugc3RyYXRlZ2llcyBoZXJlLCBidXQKKwkJICogcmF0aGVyIGF0IHRoZSBsZXZlbCBvZiB0 aGUgam9pbnJlbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHdoYXQgd2FzCisJCSAqIHNwZWNpZmllZC4g Tk9fR0FUSEVSIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gc2luZ2xlIHJlbHMuCisJCSAqCisJCSAq IE5vdGUgdGhhdCBzZXR0aW5nIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGluIG15X2dhdGhlcl9t YXNrIGlzCisJCSAqIGVxdWl2YWxlbnQgdG8gYWxsb3dpbmcgdGhlIG5vbi11c2Ugb2YgZWl0aGVy IGZvcm0gb2YgR2F0aGVyIGhlcmUuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BB X1RBR19HQVRIRVIgfHwKKwkJCW15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSX01FUkdF KQorCQl7CisJCQlpZiAoIWp1c3Rfb25lX3JlbCkKKwkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19D T05TSURFUl9OT05QQVJUSUFMOworCQkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RB R19HQVRIRVIpCisJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSOworCQkJZWxzZQorCQkJ CW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUl9NRVJHRTsKKwkJfQorCQllbHNlIGlmIChteV9l bnRyeS0+dGFnID09IFBHUEFfVEFHX05PX0dBVEhFUikKKwkJeworCQkJQXNzZXJ0KGp1c3Rfb25l X3JlbCk7CisJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQl9 CisKKwkJLyoKKwkJICogSWYgd2Ugc2V0IG15X2dhdGhlcl9tYXNrIHVwIGFib3ZlLCB0aGVuIHdl ICgxKSBtYWtlIGEgbm90ZSBpZiB0aGUKKwkJICogYWR2aWNlIGNvbmZsaWN0ZWQsICgyKSByZW1l bWJlciB0aGUgbWFzayB2YWx1ZSwgYW5kICgzKSByZW1lbWJlcgorCQkgKiB3aGV0aGVyIHRoaXMg d2FzIGEgZnVsbCBvciBwYXJ0aWFsIG1hdGNoLgorCQkgKi8KKwkJaWYgKG15X2dhdGhlcl9tYXNr ICE9IDApCisJCXsKKwkJCWlmIChnYXRoZXJfbWFzayAhPSAwICYmIGdhdGhlcl9tYXNrICE9IG15 X2dhdGhlcl9tYXNrKQorCQkJCWdhdGhlcl9jb25mbGljdCA9IHRydWU7CisJCQlnYXRoZXJfbWFz ayA9IG15X2dhdGhlcl9tYXNrOworCQkJaWYgKGp1c3Rfb25lX3JlbCkKKwkJCQlnYXRoZXJfZnVs bF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9mdWxsX21hdGNoLCBpKTsKKwkJCWVsc2UK KwkJCQlnYXRoZXJfcGFydGlhbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9wYXJ0aWFs X21hdGNoLCBpKTsKKwkJfQorCX0KKworCS8qIEVuZm9yY2UgY2hvaWNlIG9mIGluZGV4LiAqLwor CWlmIChzY2FuX2VudHJ5ICE9IE5VTEwgJiYgIXNjYW5fdHlwZV9jb25mbGljdCAmJgorCQkoc2Nh bl9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX1NDQU4gfHwKKwkJIHNjYW5fZW50cnktPnRh ZyA9PSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4pKQorCXsKKwkJcGdwYV9pbmRleF90YXJnZXQg Kml0YXJnZXQgPSBzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQ7CisJCUluZGV4T3B0SW5mbyAq bWF0Y2hlZF9pbmRleCA9IE5VTEw7CisKKwkJQXNzZXJ0KGl0YXJnZXQtPml0eXBlID09IFBHUEFf SU5ERVhfTkFNRSk7CisKKwkJZm9yZWFjaF9ub2RlKEluZGV4T3B0SW5mbywgaW5kZXgsIHJlbC0+ aW5kZXhsaXN0KQorCQl7CisJCQljaGFyCSAgICpyZWxuYW1lID0gZ2V0X3JlbF9uYW1lKGluZGV4 LT5pbmRleG9pZCk7CisJCQlPaWQJCQluc3BvaWQgPSBnZXRfcmVsX25hbWVzcGFjZShpbmRleC0+ aW5kZXhvaWQpOworCQkJY2hhcgkgICAqcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1l KG5zcG9pZCk7CisKKwkJCWlmIChzdHJjbXAoaXRhcmdldC0+aW5kbmFtZSwgcmVsbmFtZSkgPT0g MCAmJgorCQkJCShpdGFyZ2V0LT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8fAorCQkJCSBzdHJjbXAo aXRhcmdldC0+aW5kbmFtZXNwYWNlLCByZWxuYW1lc3BhY2UpID09IDApKQorCQkJeworCQkJCW1h dGNoZWRfaW5kZXggPSBpbmRleDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChtYXRj aGVkX2luZGV4ID09IE5VTEwpCisJCXsKKwkJCS8qIERvbid0IGZvcmNlIHRoZSBzY2FuIHR5cGUg aWYgdGhlIGluZGV4IGRvZXNuJ3QgZXhpc3QuICovCisJCQlzY2FuX3R5cGUgPSAwOworCisJCQkv KiBNYXJrIGFkdmljZSBhcyBpbmFwcGxpY2FibGUuICovCisJCQlwZ3BhX3Ryb3ZlX3NldF9mbGFn cyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLAorCQkJCQkJCQkgUEdQQV9URV9JTkFQ UExJQ0FCTEUpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogUmV0YWluIHRoaXMgaW5kZXggYW5k IGRpc2NhcmQgdGhlIHJlc3QuICovCisJCQlyZWwtPmluZGV4bGlzdCA9IGxpc3RfbWFrZTEobWF0 Y2hlZF9pbmRleCk7CisJCX0KKwl9CisKKwkvKgorCSAqIE1hcmsgYWxsIHRoZSBzY2FuIG1ldGhv ZCBlbnRyaWVzIGFzIGZ1bGx5IG1hdGNoZWQ7IGFuZCBpZiB0aGV5IHNwZWNpZnkKKwkgKiBkaWZm ZXJlbnQgdGhpbmdzLCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdz ID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMIHwgUEdQQV9URV9NQVRDSF9GVUxMOworCWlmIChzY2Fu X3R5cGVfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90 cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5kZXhlcywgZmxhZ3MpOwor CXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9lbnRyaWVzLCBzY2FuX3R5cGVfcmVsX2luZGV4ZXMs IGZsYWdzKTsKKworCS8qCisJICogTWFyayBldmVyeSBHYXRoZXItcmVsYXRlZCBwaWVjZSBvZiBh ZHZpY2UgYXMgcGFydGlhbGx5IG1hdGNoZWQuIE1hcmsKKwkgKiB0aGUgb25lcyB0aGF0IGluY2x1 ZGVkIHRoaXMgcmVsYXRpb24gYXMgYSB0YXJnZXQgYnkgaXRzZWxmIGFzIGZ1bGx5CisJICogbWF0 Y2hlZC4gSWYgdGhlcmUgd2FzIGEgY29uZmxpY3QsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3Rp bmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKGdhdGhlcl9j b25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3Nl dF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFn cyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJp ZXMsIGdhdGhlcl9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKiBJZiB0aGVyZSBpcyBhIG5vbi1j b25mbGljdGluZyBzY2FuIHNwZWNpZmljYXRpb24sIGVuZm9yY2UgaXQuICovCisJaWYgKHNjYW5f dHlwZSAhPSAwICYmICFzY2FuX3R5cGVfY29uZmxpY3QpCisJeworCQlyZWwtPnBnc19tYXNrICY9 CisJCQl+KFBHU19TQ0FOX0FOWSB8IFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EIHwKKwkJ CSAgUEdTX0NPTlNJREVSX0lOREVYT05MWSk7CisJCXJlbC0+cGdzX21hc2sgfD0gc2Nhbl90eXBl OworCX0KKworCS8qIElmIHRoZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5nIGdhdGhlciBzcGVjaWZp Y2F0aW9uLCBlbmZvcmNlIGl0LiAqLworCWlmIChnYXRoZXJfbWFzayAhPSAwICYmICFnYXRoZXJf Y29uZmxpY3QpCisJeworCQlyZWwtPnBnc19tYXNrICY9CisJCQl+KFBHU19HQVRIRVIgfCBQR1Nf R0FUSEVSX01FUkdFIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwpOworCQlyZWwtPnBnc19tYXNr IHw9IGdhdGhlcl9tYXNrOworCX0KK30KKworLyoKKyAqIEFkZCBmZWVkYmFjayBlbnRyaWVzIHRv IGZvciBvbmUgdHJvdmUgc2xpY2UgdG8gdGhlIHByb3ZpZGVkIGxpc3QgYW5kCisgKiByZXR1cm4g dGhlIHJlc3VsdGluZyBsaXN0LgorICoKKyAqIEZlZWRiYWNrIGVudHJpZXMgYXJlIGdlbmVyYXRl ZCBmcm9tIHRoZSB0cm92ZSBlbnRyeSdzIGZsYWdzLiBJdCdzIGFzc3VtZWQKKyAqIHRoYXQgdGhl IGNhbGxlciBoYXMgYWxyZWFkeSBzZXQgYWxsIHJlbGV2YW50IGZsYWdzIHdpdGggdGhlIGV4Y2Vw dGlvbiBvZgorICogUEdQQV9URV9GQUlMRUQuIFdlIHNldCB0aGF0IGZsYWcgaGVyZSBpZiBhcHBy b3ByaWF0ZS4KKyAqLworc3RhdGljIExpc3QgKgorcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFj ayhMaXN0ICpsaXN0LCBwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkgcGdwYV90cm92ZV9sb29r dXBfdHlwZSB0eXBlLAorCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAor CQkJCQkJCSBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlcikKK3sKKwlwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyaWVzOworCWludAkJCW5lbnRyaWVzOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsK KworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXBncGFfdHJvdmVfbG9va3VwX2FsbCh0cm92ZSwg dHlwZSwgJmVudHJpZXMsICZuZW50cmllcyk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBuZW50cmll czsgKytpKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmZW50cmllc1tpXTsKKwkJ RGVmRWxlbSAgICAqaXRlbTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGVudHJ5IHdhcyBmdWxseSBt YXRjaGVkLCBjaGVjayB3aGV0aGVyIGdlbmVyYXRpbmcgYWR2aWNlCisJCSAqIGZyb20gdGhpcyBw bGFuIHdvdWxkIHByb2R1Y2Ugc3VjaCBhbiBlbnRyeS4gSWYgbm90LCBsYWJlbCB0aGUgZW50cnkK KwkJICogYXMgZmFpbGVkLgorCQkgKi8KKwkJaWYgKChlbnRyeS0+ZmxhZ3MgJiBQR1BBX1RFX01B VENIX0ZVTEwpICE9IDAgJiYKKwkJCSFwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2Uod2Fsa2VyLCBy dF9pZGVudGlmaWVycywKKwkJCQkJCQkJCSAgZW50cnktPnRhZywgZW50cnktPnRhcmdldCkpCisJ CQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9GQUlMRUQ7CisKKwkJaXRlbSA9IG1ha2VEZWZFbGVt KHBncGFfY3N0cmluZ190cm92ZV9lbnRyeShlbnRyeSksCisJCQkJCQkgICAoTm9kZSAqKSBtYWtl SW50ZWdlcihlbnRyeS0+ZmxhZ3MpLCAtMSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIGl0ZW0p OworCX0KKworCXJldHVybiBsaXN0OworfQorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CisvKgorICogRmFzdCBoYXNoIGZ1bmN0aW9uIGZvciBhIGtleSBjb25zaXN0aW5nIG9mIGFuIFJU SSBhbmQgcGxhbiBuYW1lLgorICovCitzdGF0aWMgdWludDMyCitwZ3BhX3JpX2NoZWNrZXJfaGFz aF9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBrZXkpCit7CisJZmFzdGhhc2hfc3RhdGUgaHM7CisJ aW50CQkJc3BfbGVuOworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOworCisJaHMuYWNjdW0gPSBr ZXkucnRpOworCWZhc3RoYXNoX2NvbWJpbmUoJmhzKTsKKworCS8qIHBsYW5fbmFtZSBjYW4gYmUg TlVMTCAqLworCWlmIChrZXkucGxhbl9uYW1lID09IE5VTEwpCisJCXNwX2xlbiA9IDA7CisJZWxz ZQorCQlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBsYW5fbmFtZSk7 CisKKwkvKiBoYXNoZm5fdW5zdGFibGUuaCByZWNvbW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGgg YXMgdHdlYWsgKi8KKwlyZXR1cm4gZmFzdGhhc2hfZmluYWwzMigmaHMsIHNwX2xlbik7Cit9CisK KyNlbmRpZgorCisvKgorICogU2F2ZSB0aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBmb3Igb25l IHJlbGF0aW9uIGZvciBmdXR1cmUgY3Jvc3MtY2hlY2tpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitw Z3BhX3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lckluZm8g KnJvb3QsCisJCQkJCSBSZWxPcHRJbmZvICpyZWwpCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCXBncGFfcmlfY2hlY2tlcl9rZXkga2V5OworCXBncGFfcmlfY2hlY2tlciAqY2hlY2s7 CisJcGdwYV9pZGVudGlmaWVyIHJpZDsKKwljb25zdCBjaGFyICpyaWRfc3RyaW5nOworCWJvb2wJ CWZvdW5kOworCisJa2V5LnJ0aSA9IGJtc19zaW5nbGV0b25fbWVtYmVyKHJlbC0+cmVsaWRzKTsK KwlrZXkucGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworCXBncGFfY29tcHV0ZV9pZGVudGlm aWVyX2J5X3J0aShyb290LCBrZXkucnRpLCAmcmlkKTsKKwlyaWRfc3RyaW5nID0gcGdwYV9pZGVu dGlmaWVyX3N0cmluZygmcmlkKTsKKwljaGVjayA9IHBncGFfcmlfY2hlY2tfaW5zZXJ0KHBwcy0+ cmlfY2hlY2tfaGFzaCwga2V5LCAmZm91bmQpOworCUFzc2VydCghZm91bmQgfHwgc3RyY21wKGNo ZWNrLT5yaWRfc3RyaW5nLCByaWRfc3RyaW5nKSA9PSAwKTsKKwljaGVjay0+cmlkX3N0cmluZyA9 IHJpZF9zdHJpbmc7CisjZW5kaWYKK30KKworLyoKKyAqIFZhbGlkYXRlIHRoYXQgdGhlIHJhbmdl IHRhYmxlIGlkZW50aWZpZXJzIHdlIHdlcmUgYWJsZSB0byBnZW5lcmF0ZSBkdXJpbmcKKyAqIHBs YW5uaW5nIG1hdGNoIHRoZSBvbmVzIHdlIGdlbmVyYXRlZCBmcm9tIHRoZSBmaW5hbCBwbGFuLgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9z dGF0ZSAqcHBzLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnM7CisJcGdwYV9yaV9jaGVja19p dGVyYXRvciBpdDsKKwlwZ3BhX3JpX2NoZWNrZXIgKmNoZWNrOworCisJLyogQ3JlYXRlIGlkZW50 aWZpZXJzIGZyb20gdGhlIHBsYW5uZWQgc3RhdGVtZW50LiAqLworCXJ0X2lkZW50aWZpZXJzID0g cGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChwc3RtdCk7CisKKwkvKiBJ dGVyYXRlIG92ZXIgaWRlbnRpZmllcnMgY3JlYXRlZCBkdXJpbmcgcGxhbm5pbmcsIHNvIHdlIGNh biBjb21wYXJlLiAqLworCXBncGFfcmlfY2hlY2tfc3RhcnRfaXRlcmF0ZShwcHMtPnJpX2NoZWNr X2hhc2gsICZpdCk7CisJd2hpbGUgKChjaGVjayA9IHBncGFfcmlfY2hlY2tfaXRlcmF0ZShwcHMt PnJpX2NoZWNrX2hhc2gsICZpdCkpICE9IE5VTEwpCisJeworCQlpbnQJCQlydG9mZnNldCA9IDA7 CisJCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJCUluZGV4CQlmbGF0X3J0aTsKKworCQkvKgor CQkgKiBJZiB0aGVyZSdzIG5vIHBsYW4gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbnRyeSwg dGhlbiB0aGUKKwkJICogcnRvZmZzZXQgaXMgMC4gT3RoZXJ3aXNlLCB3ZSBjYW4gc2VhcmNoIHRo ZSBTdWJQbGFuUlRJbmZvIGxpc3QgdG8KKwkJICogZmluZCB0aGUgcnRvZmZzZXQuCisJCSAqLwor CQlpZiAoY2hlY2stPmtleS5wbGFuX25hbWUgIT0gTlVMTCkKKwkJeworCQkJZm9yZWFjaF9ub2Rl KFN1YlBsYW5SVEluZm8sIHJ0aW5mbywgcHN0bXQtPnN1YnJ0aW5mb3MpCisJCQl7CisJCQkJLyoK KwkJCQkgKiBJZiBydGluZm8tPmR1bW15IGlzIHNldCwgdGhlbiB0aGUgc3VicXVlcnkncyByYW5n ZSB0YWJsZQorCQkJCSAqIHdpbGwgb25seSBoYXZlIGJlZW4gcGFydGlhbGx5IGNvcGllZCB0byB0 aGUgZmluYWwgcmFuZ2UKKwkJCQkgKiB0YWJsZS4gU3BlY2lmaWNhbGx5LCBvbmx5IFJURV9SRUxB VElPTiBlbnRyaWVzIGFuZAorCQkJCSAqIFJURV9TVUJRVUVSWSBlbnRyaWVzIHRoYXQgd2VyZSBv bmNlIFJURV9SRUxBVElPTiBlbnRyaWVzCisJCQkJICogd2lsbCBiZSBjb3BpZWQsIGFzIHBlciBh ZGRfcnRlc190b19mbGF0X3J0YWJsZS4gVGhlcmVmb3JlLAorCQkJCSAqIHRoZXJlJ3Mgbm8gZml4 ZWQgcnRvZmZzZXQgdGhhdCB3ZSBjYW4gYXBwbHkgdG8gdGhlIFJUSXMKKwkJCQkgKiB1c2VkIGR1 cmluZyBwbGFubmluZyB0byBsb2NhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRpb25zCisJCQkJ ICogaW4gdGhlIGZpbmFsIHJ0YWJsZS4KKwkJCQkgKgorCQkJCSAqIFdpdGggbW9yZSBjb21wbGV4 IGxvZ2ljLCB3ZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGF0IHByb2JsZW0KKwkJCQkgKiBieSByZW1l bWJlcmluZyB0aGUgd2hvbGUgY29udGVudHMgb2YgdGhlIHN1YnF1ZXJ5J3MgcnRhYmxlCisJCQkJ ICogZHVyaW5nIHBsYW5uaW5nLCBkZXRlcm1pbmluZyB3aGljaCBvZiB0aG9zZSB3b3VsZCBoYXZl IGJlZW4KKwkJCQkgKiBjb3BpZWQgdG8gdGhlIGZpbmFsIHJ0YWJsZSwgYW5kIG1hdGNoaW5nIHRo ZW0gdXAuIEJ1dCBpdAorCQkJCSAqIGRvZXNuJ3Qgc2VlbSBsaWtlIGEgd29ydGh3aGlsZSBlbmRl YXZvciBmb3IgcmlnaHQgbm93LAorCQkJCSAqIGJlY2F1c2UgUlRJcyBmcm9tIHN1Y2ggc3VicXVl cmllcyB3b24ndCBhcHBlYXIgaW4gdGhlIHBsYW4KKwkJCQkgKiB0cmVlIGl0c2VsZiwganVzdCBp biB0aGUgcmFuZ2UgdGFibGUuIEhlbmNlLCB3ZSBjYW4gbmVpdGhlcgorCQkJCSAqIGdlbmVyYXRl IG5vciBhY2NlcHQgYWR2aWNlIGZvciB0aGVtLgorCQkJCSAqLworCQkJCWlmIChzdHJjbXAoY2hl Y2stPmtleS5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9uYW1lKSA9PSAwCisJCQkJCSYmICFydGlu Zm8tPmR1bW15KQorCQkJCXsKKwkJCQkJcnRvZmZzZXQgPSBydGluZm8tPnJ0b2Zmc2V0OworCQkJ CQlBc3NlcnQocnRvZmZzZXQgPiAwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQkv KgorCQkJICogSXQncyBub3QgYW4gZXJyb3IgaWYgd2UgZG9uJ3QgZmluZCB0aGUgcGxhbiBuYW1l OiB0aGF0IGp1c3QKKwkJCSAqIG1lYW5zIHRoYXQgd2UgcGxhbm5lZCBhIHN1YnBsYW4gYnkgdGhp cyBuYW1lIGJ1dCBpdCBlbmRlZCB1cAorCQkJICogYmVpbmcgYSBkdW1teSBzdWJwbGFuIGFuZCBz byB3YXNuJ3QgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHBsYW4KKwkJCSAqIHRyZWUuCisJCQkgKi8K KwkJCWlmIChydG9mZnNldCA9PSAwKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICog Y2hlY2stPmtleS5ydGkgaXMgdGhlIFJUSSB0aGF0IHdlIHNhdyBwcmlvciB0byByYW5nZS10YWJs ZQorCQkgKiBmbGF0dGVuaW5nLCBzbyB3ZSBtdXN0IGFkZCB0aGUgYXBwcm9wcmlhdGUgUlQgb2Zm c2V0IHRvIGdldCB0aGUKKwkJICogZmluYWwgUlRJLgorCQkgKi8KKwkJZmxhdF9ydGkgPSBjaGVj ay0+a2V5LnJ0aSArIHJ0b2Zmc2V0OworCQlBc3NlcnQoZmxhdF9ydGkgPD0gbGlzdF9sZW5ndGgo cHN0bXQtPnJ0YWJsZSkpOworCisJCS8qIEFzc2VydCB0aGF0IHRoZSBzdHJpbmcgd2UgY29tcHV0 ZSBub3cgbWF0Y2hlcyB0aGUgcHJldmlvdXMgb25lLiAqLworCQlyaWRfc3RyaW5nID0gcGdwYV9p ZGVudGlmaWVyX3N0cmluZygmcnRfaWRlbnRpZmllcnNbZmxhdF9ydGkgLSAxXSk7CisJCUFzc2Vy dChzdHJjbXAocmlkX3N0cmluZywgY2hlY2stPnJpZF9zdHJpbmcpID09IDApOworCX0KKyNlbmRp ZgorfQorCisvKgorICogQ29udmVydCBhIGJpdG1hcHNldCB0byBhIEMgc3RyaW5nIG9mIGNvbW1h LXNlcGFyYXRlZCBpbnRlZ2Vycy4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9ibXNfdG9fY3N0 cmluZyhCaXRtYXBzZXQgKmJtcykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJaW50CQkJeCA9 IC0xOworCisJaWYgKGJtc19pc19lbXB0eShibXMpKQorCQlyZXR1cm4gIm5vbmUiOworCisJaW5p dFN0cmluZ0luZm8oJmJ1Zik7CisJd2hpbGUgKCh4ID0gYm1zX25leHRfbWVtYmVyKGJtcywgeCkp ID49IDApCisJeworCQlpZiAoYnVmLmxlbiA+IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYs ICIsICVkIiwgeCk7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVkIiwgeCk7 CisJfQorCisJcmV0dXJuIGJ1Zi5kYXRhOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3BsYW5uZXIuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFu bmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdkNDBiOTEwYjAw Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIu aApAQCAtMCwwICsxLDE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3BsYW5u ZXIuaAorICoJICBwbGFubmVyIGhvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgUEdQQV9QTEFOTkVSX0gKKyNkZWZpbmUgUEdQQV9QTEFOTkVSX0gKKworZXh0ZXJu IHZvaWQgcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCk7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjQxNTZmNTIwOWEwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uYwpAQCAtMCwwICsxLDMwMyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdwYV9zY2FuLmMKKyAqCSAgYW5hbHlzaXMgb2Ygc2NhbnMgaW4gUGxhbiB0cmVlcworICoK KyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJu b2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorCitzdGF0 aWMgcGdwYV9zY2FuICpwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwK KwkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgYm9vbCBuZWVkc19ub19nYXRo ZXIpOworCisKK3N0YXRpYyBSVEVLaW5kIHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0 ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKKy8qCisgKiBCdWlsZCBhIHBncGFfc2NhbiBvYmpl Y3QgZm9yIGEgUGxhbiBub2RlIGFuZCB1cGRhdGUgdGhlIHBsYW4gd2Fsa2VyCisgKiBjb250ZXh0 IGFzIGFwcG9wcmlhdGUuICBJZiB0aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBzY2Fu LCBhbHNvCisgKiBidWlsZCBwZ3BhX3NjYW4gZm9yIGFueSBzY2FucyB0aGF0IHdlcmUgY29uc29s aWRhdGVkIGludG8gdGhpcyBvbmUgYnkKKyAqIEFwcGVuZC9NZXJnZUFwcGVuZCBwdWxsLXVwLgor ICoKKyAqIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBFbGlkZWROb2RlIGZvciB0aGlzIHBsYW4g bm9kZSwgcGFzcyB0aGUgdXBwZXJtb3N0CisgKiBvbmUgYXMgZWxpZGVkX25vZGUsIGVsc2UgcGFz cyBOVUxMLgorICoKKyAqIFNldCB0aGUgJ2JlbmVhdGhfYW55X2dhdGhlcicgbm9kZSBpZiB3ZSBh cmUgdW5kZXJuZWF0aCBhIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICog U2V0IHRoZSAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpZiB3ZSdyZSBpbnNpZGUgb2YgYSBq b2luIHByb2JsZW0gYW5kCisgKiBub3Qgb3RoZXJ3aXNlLgorICovCitwZ3BhX3NjYW4gKgorcGdw YV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFu LAorCQkJCUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCWJvb2wgYmVuZWF0aF9hbnlfZ2F0 aGVyLCBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0pCit7CisJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0 cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7 CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJbmVlZHNfbm9fZ2F0aGVyID0gIWJlbmVhdGhfYW55 X2dhdGhlcjsKKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IE5JTDsKKworCWlm IChlbGlkZWRfbm9kZSAhPSBOVUxMKQorCXsKKwkJTm9kZVRhZwkJZWxpZGVkX3R5cGUgPSBlbGlk ZWRfbm9kZS0+ZWxpZGVkX3R5cGU7CisKKwkJLyoKKwkJICogSWYgc2V0cmVmcyBwcm9jZXNzaW5n IGVsaWRlZCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSB0aGF0IGhhZAorCQkgKiBvbmx5 IG9uZSBzdXJ2aXZpbmcgY2hpbGQsIHRoZW4gdGhpcyBpcyBhIHBhcnRpdGlvbndpc2UgInNjYW4i IC0tCisJCSAqIHdoaWNoIG1heSByZWFsbHkgYmUgYSBwYXJ0aXRpb253aXNlIGpvaW4sIGJ1dCB0 aGVyZSdzIG5vIG5lZWQgdG8KKwkJICogZGlzdGluZ3Vpc2guCisJCSAqCisJCSAqIElmIGl0J3Mg YSB0cml2aWFsIFN1YnF1ZXJ5U2NhbiB0aGF0IHdhcyBlbGlkZWQsIHRoZW4gdGhpcyBpcyBhbgor CQkgKiAib3JkaW5hcnkiIHNjYW4gaS5lLiBvbmUgZm9yIHdoaWNoIHdlIG5lZWQgdG8gZ2VuZXJh dGUgYWR2aWNlCisJCSAqIGJlY2F1c2UgdGhlIHBsYW5uZXIgaGFzIG5vdCBtYWRlIGFueSBtZWFu aW5nZnVsIGNob2ljZS4KKwkJICovCisJCXJlbGlkcyA9IGVsaWRlZF9ub2RlLT5yZWxpZHM7CisJ CWlmIChlbGlkZWRfdHlwZSA9PSBUX0FwcGVuZCB8fCBlbGlkZWRfdHlwZSA9PSBUX01lcmdlQXBw ZW5kKQorCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJZWxzZQorCQkJ c3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBh biBlbGlkZWQgQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUsIHdlIGRvbid0IG5lZWQgdG8KKwkJ ICogZW1pdCBOT19HQVRIRVIoKSBiZWNhdXNlIHdlJ2xsIGFsc28gZW1pdCBpdCBmb3IgdGhlIHVu ZGVybHlpbmcKKwkJICogc2Nhbiwgd2hpY2ggaXMgZ29vZCBlbm91Z2guCisJCSAqCisJCSAqIElm IGl0J3MgYW4gZWxpZGVkIFN1YnF1ZXJ5U2NhbiwgdGhlIHNhbWUgYXJndW1lbnQgaXMgbGlrZWx5 IHRvCisJCSAqIGFwcGx5LCBiZWNhdXNlIHRoZSBzdWJxdWVyeSBwcm9iYWJseSBjb250YWlucyBy ZWZlcmVuY2VzIHRvIHRhYmxlcywKKwkJICogYW5kIGlmIGl0IGRvZXNuJ3QsIHRoZW4gcGxhbm5l ciBpc24ndCBsaWtlbHkgdG8gd2FudCB0byBkbyBpdCBpbgorCQkgKiBwYXJhbGxlbCBhbnl3YXku IEJ1dCBhbHNvLCB3ZSBjYW4ndCBpbXBsZW1lbnQgTk9fR0FUSEVSKCkgYWR2aWNlCisJCSAqIGZv ciBhIG5vbi1yZWxhdGlvbiBSVEVLaW5kLCBiZWNhdXNlIGdldF9yZWxhdGlvbl9pbmZvKCkgaXNu J3QKKwkJICogY2FsbGVkIGluIHN1Y2ggY2FzZXMuIFRoYXQgc2hvdWxkIHByb2JhYmx5IGJlIGZp eGVkIGF0IHNvbWUgcG9pbnQsCisJCSAqIGJ1dCB1bnRpbCB0aGVuIHdlIHNob3VsZG4ndCBlbWl0 IGl0LgorCQkgKi8KKwkJbmVlZHNfbm9fZ2F0aGVyID0gZmFsc2U7CisKKwkJLyogSm9pbiBSVElz IGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVyIHJlZmVycyB0byB0aGVtLiAqLworCQly ZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMocmVsaWRzLCB3YWxrZXItPnBzdG10 LT5ydGFibGUpOworCX0KKwllbHNlIGlmICgocnRpID0gcGdwYV9zY2FucmVsaWQocGxhbikpICE9 IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJcmVsaWRzID0gYm1zX21ha2Vfc2lu Z2xldG9uKHJ0aSk7CisKKwkJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCQl7CisJCQljYXNlIFRf U2VxU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9TRVE7CisJCQkJYnJlYWs7CisJCQlj YXNlIFRfQml0bWFwSGVhcFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fQklUTUFQX0hF QVA7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSW5kZXhTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX0lOREVYOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4T25seVNjYW46CisJCQkJ c3RyYXRlZ3kgPSBQR1BBX1NDQU5fSU5ERVhfT05MWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9U aWRTY2FuOgorCQkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NB Tl9USUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCisJCQkJLyoKKwkJCQkgKiBUaGlzIGNh c2UgaW5jbHVkZXMgYSBGb3JlaWduU2NhbiB0YXJnZXRpbmcgYSBzaW5nbGUKKwkJCQkgKiByZWxh dGlvbjsgbm8gb3RoZXIgc3RyYXRlZ3kgaXMgcG9zc2libGUgaW4gdGhhdCBjYXNlLCBidXQKKwkJ CQkgKiBzZWUgYmVsb3csIHdoZXJlIHRoaW5ncyBhcmUgZGlmZmVyZW50IGluIG11bHRpLXJlbGF0 aW9uCisJCQkJICogY2FzZXMuCisJCQkJICovCisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JE SU5BUlk7CisKKwkJCQkvKgorCQkJCSAqIFdlIGNhbid0IGhhbmRsZSBOT19HQVRIRVIoKSBmb3Ig bm9uLXJlbGF0aW9uIFJURXMgYmVjYXVzZQorCQkJCSAqIGdldF9yZWxhdGlvbl9pbmZvIHdvbid0 IGJlIGNhbGxlZC4KKwkJCQkgKi8KKwkJCQlydGUgPSBydF9mZXRjaChydGksIHdhbGtlci0+cHN0 bXQtPnJ0YWJsZSk7CisJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQkJ CW5lZWRzX25vX2dhdGhlciA9IGZhbHNlOworCisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBp ZiAoKHJlbGlkcyA9IHBncGFfcmVsaWRzKHBsYW4pKSAhPSBOVUxMKQorCXsKKwkJc3dpdGNoIChu b2RlVGFnKHBsYW4pKQorCQl7CisJCQljYXNlIFRfRm9yZWlnblNjYW46CisKKwkJCQkvKgorCQkJ CSAqIElmIG11bHRpcGxlIHJlbGF0aW9ucyBhcmUgYmVpbmcgdGFyZ2V0ZWQgYnkgYSBzaW5nbGUK KwkJCQkgKiBmb3JlaWduIHNjYW4sIHRoZW4gdGhlIGZvcmVpZ24gam9pbiBoYXMgYmVlbiBwdXNo ZWQgdG8gdGhlCisJCQkJICogcmVtb3RlIHNpZGUsIGFuZCB3ZSB3YW50IHRoYXQgdG8gYmUgcmVm bGVjdGVkIGluIHRoZQorCQkJCSAqIGdlbmVyYXRlZCBhZHZpY2UuCisJCQkJICovCisJCQkJc3Ry YXRlZ3kgPSBQR1BBX1NDQU5fRk9SRUlHTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9BcHBlbmQ6 CisKKwkJCQkvKgorCQkJCSAqIEFwcGVuZCBub2RlcyBjYW4gcmVwcmVzZW50IHBhcnRpdGlvbndp c2Ugc2NhbnMgb2YgYSBhCisJCQkJICogcmVsYXRpb24sIGJ1dCB3aGVuIHRoZXkgaW1wbGVtZW50 IGEgc2V0IG9wZXJhdGlvbiwgdGhleSBhcmUKKwkJCQkgKiBqdXN0IG9yZGluYXJ5IHNjYW5zLgor CQkJCSAqLworCQkJCWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywgd2Fsa2VyLT5w c3RtdC0+cnRhYmxlKQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NB Tl9PUkRJTkFSWTsKKworCQkJCS8qIE5PX0dBVEhFUigpIHNob3VsZCBiZSBlbWl0dGVkIGZvciB1 bmRlcmx5aW5nIHJlbHMgb25seS4gKi8KKwkJCQluZWVkc19ub19nYXRoZXIgPSBmYWxzZTsKKwor CQkJCS8qIEJlIHN1cmUgdG8gYWNjb3VudCBmb3IgcHVsbGVkLXVwIHNjYW5zLiAqLworCQkJCWNo aWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQkJKChBcHBlbmQgKikgcGxhbiktPmNoaWxkX2Fw cGVuZF9yZWxpZF9zZXRzOworCQkJCWJyZWFrOworCQkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJ CS8qIFNvbWUgbG9naWMgaGVyZSBhcyBmb3IgQXBwZW5kLCBhYm92ZS4gKi8KKwkJCQlpZiAodW5p cXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkKKwkJCQkJ PT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNF OworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisKKwkJCQkv KiBOT19HQVRIRVIoKSBzaG91bGQgYmUgZW1pdHRlZCBmb3IgdW5kZXJseWluZyByZWxzIG9ubHku ICovCisJCQkJbmVlZHNfbm9fZ2F0aGVyID0gZmFsc2U7CisKKwkJCQkvKiBCZSBzdXJlIHRvIGFj Y291bnQgZm9yIHB1bGxlZC11cCBzY2Fucy4gKi8KKwkJCQljaGlsZF9hcHBlbmRfcmVsaWRfc2V0 cyA9CisJCQkJCSgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJ TkFSWTsKKworCQkJCS8qCisJCQkJICogV2UgY2FuJ3QgaGFuZGxlIE5PX0dBVEhFUigpIGZvciBz aW5nbGUgbm9uLXJlbGF0aW9uIFJURXMKKwkJCQkgKiBiZWNhdXNlIGdldF9yZWxhdGlvbl9pbmZv IHdvbid0IGJlIGNhbGxlZC4KKwkJCQkgKi8KKwkJCQlpZiAoYm1zX21lbWJlcnNoaXAocmVsaWRz KSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJCXsKKwkJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlOworCisJ CQkJCXJ0ZSA9IHJ0X2ZldGNoKGJtc19zaW5nbGV0b25fbWVtYmVyKHJlbGlkcyksCisJCQkJCQkJ CSAgIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJCQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRF X1JFTEFUSU9OKQorCQkJCQkJbmVlZHNfbm9fZ2F0aGVyID0gZmFsc2U7CisJCQkJfQorCisJCQkJ YnJlYWs7CisJCX0KKworCisJCS8qIEpvaW4gUlRJcyBjYW4gYmUgcHJlc2VudCwgYnV0IGFkdmlj ZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJcmVsaWRzID0gcGdwYV9maWx0ZXJfb3V0X2pv aW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwl9CisKKwkvKgorCSAq IElmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgaW50byB3aGljaCBzdWJv cmRpbmF0ZSBBcHBlbmQKKwkgKiBvciBNZXJnZUFwcGVuZCBwYXRocyB3ZXJlIG1lcmdlZCwgZWFj aCBvZiB0aG9zZSBtZXJnZWQgcGF0aHMgaXMKKwkgKiBlZmZlY3RpdmVseSBhbm90aGVyIHNjYW4g Zm9yIHdoaWNoIHdlIG5lZWQgdG8gYWNjb3VudC4KKwkgKi8KKwlmb3JlYWNoX25vZGUoQml0bWFw c2V0LCBjaGlsZF9yZWxpZHMsIGNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKQorCXsKKwkJQml0bWFw c2V0ICAqY2hpbGRfbm9uam9pbl9yZWxpZHM7CisKKwkJY2hpbGRfbm9uam9pbl9yZWxpZHMgPQor CQkJcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKGNoaWxkX3JlbGlkcywKKwkJCQkJCQkJCQl3 YWxrZXItPnBzdG10LT5ydGFibGUpOworCQkodm9pZCkgcGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBw bGFuLCBzdHJhdGVneSwKKwkJCQkJCQkgIGNoaWxkX25vbmpvaW5fcmVsaWRzLCBmYWxzZSk7CisJ fQorCisJLyoKKwkgKiBJZiB0aGlzIHBsYW4gbm9kZSBoYXMgbm8gYXNzb2NpYXRlZCBSVElzLCBp dCdzIG5vdCBhIHNjYW4uIFdoZW4gdGhlCisJICogJ3dpdGhpbl9qb2luX3Byb2JsZW0nIGZsYWcg aXMgc2V0LCB0aGF0J3MgdW5leHBlY3RlZCwgc28gdGhyb3cgYW4KKwkgKiBlcnJvciwgZWxzZSBy ZXR1cm4gcXVpZXRseS4KKwkgKi8KKwlpZiAocmVsaWRzID09IE5VTEwpCisJeworCQlpZiAod2l0 aGluX2pvaW5fcHJvYmxlbSkKKwkJCWVsb2coRVJST1IsICJwbGFuIG5vZGUgaGFzIG5vIFJUSXM6 ICVkIiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVy biBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4sIHN0cmF0ZWd5LCByZWxpZHMsIG5lZWRzX25v X2dhdGhlcik7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBzaW5nbGUgcGdwYV9zY2FuIG9iamVjdCBh bmQgdXBkYXRlIHRoZSBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQuCisgKi8KK3N0YXRpYyBwZ3Bh X3NjYW4gKgorcGdwYV9tYWtlX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs IFBsYW4gKnBsYW4sCisJCQkgICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksIEJpdG1hcHNl dCAqcmVsaWRzLAorCQkJICAgYm9vbCBuZWVkc19ub19nYXRoZXIpCit7CisJcGdwYV9zY2FuICAq c2NhbjsKKworCS8qIENyZWF0ZSB0aGUgc2NhbiBvYmplY3QuICovCisJc2NhbiA9IHBhbGxvYyhz aXplb2YocGdwYV9zY2FuKSk7CisJc2Nhbi0+cGxhbiA9IHBsYW47CisJc2Nhbi0+c3RyYXRlZ3kg PSBzdHJhdGVneTsKKwlzY2FuLT5yZWxpZHMgPSByZWxpZHM7CisKKwkvKiBBZGQgaXQgdG8gdGhl IGFwcHJvcHJpYXRlIGxpc3QuICovCisJd2Fsa2VyLT5zY2Fuc1tzY2FuLT5zdHJhdGVneV0gPSBs YXBwZW5kKHdhbGtlci0+c2NhbnNbc2Nhbi0+c3RyYXRlZ3ldLAorCQkJCQkJCQkJCQlzY2FuKTsK KworCS8qIENhbGxlciB0ZWxscyB1cyB3aGV0aGVyIE5PX0dBVEhFUigpIGFkdmljZSBmb3IgdGhp cyBzY2FuIGlzIG5lZWRlZC4gKi8KKwlpZiAobmVlZHNfbm9fZ2F0aGVyKQorCQl3YWxrZXItPm5v X2dhdGhlcl9zY2FucyA9IGJtc19hZGRfbWVtYmVycyh3YWxrZXItPm5vX2dhdGhlcl9zY2FucywK KwkJCQkJCQkJCQkJCSAgc2Nhbi0+cmVsaWRzKTsKKworCXJldHVybiBzY2FuOworfQorCisvKgor ICogRGV0ZXJtaW5lIHRoZSB1bmlxdWUgcnRla2luZCBvZiBhIHNldCBvZiByZWxpZHMuCisgKi8K K3N0YXRpYyBSVEVLaW5kCit1bmlxdWVfbm9uam9pbl9ydGVraW5kKEJpdG1hcHNldCAqcmVsaWRz LCBMaXN0ICpydGFibGUpCit7CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJZmlyc3QgPSB0cnVl OworCVJURUtpbmQJCXJ0ZWtpbmQ7CisKKwlBc3NlcnQocmVsaWRzICE9IE5VTEwpOworCisJd2hp bGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFu Z2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBydGFibGUpOworCisJCWlmIChydGUtPnJ0 ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQlpZiAoZmlyc3QpCisJCXsKKwkJ CXJ0ZWtpbmQgPSBydGUtPnJ0ZWtpbmQ7CisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisJCWVsc2Ug aWYgKHJ0ZWtpbmQgIT0gcnRlLT5ydGVraW5kKQorCQkJZWxvZyhFUlJPUiwgInJ0ZWtpbmQgbWlz bWF0Y2g6ICVkIHZzLiAlZCIsCisJCQkJIHJ0ZWtpbmQsIHJ0ZS0+cnRla2luZCk7CisJfQorCisJ aWYgKGZpcnN0KQorCQllbG9nKEVSUk9SLCAibm8gbm9uLVJURV9KT0lOIFJURXMgZm91bmQiKTsK KworCXJldHVybiBydGVraW5kOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNiYjg3MjZmZjFlCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApAQCAtMCwwICsxLDg1 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uaAorICoJICBhbmFseXNp cyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisgKgorICogRm9yIHB1cnBvc2VzIG9mIHRoaXMgbW9k dWxlLCBhICJzY2FuIiBpbmNsdWRlcyAoMSkgc2luZ2xlIHBsYW4gbm9kZXMgdGhhdAorICogc2Nh biBtdWx0aXBsZSBSVElzLCBzdWNoIGFzIGEgZGVnZW5lcmF0ZSBSZXN1bHQgbm9kZSB0aGF0IHJl cGxhY2VzIHdoYXQKKyAqIHdvdWxkIG90aGVyd2lzZSBoYXZlIGJlZW4gYSBqb2luLCBhbmQgKDIp IEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgbm9kZXMKKyAqIGltcGxlbWVudGluZyBhIHBhcnRpdGlv bndpc2Ugc2NhbiBvciBhIHBhcnRpdGlvbndpc2Ugam9pbi4gU2FpZAorICogZGlmZmVyZW50bHks IHNjYW5zIGFyZSB0aGUgbGVhdmVzIG9mIHRoZSBqb2luIHRyZWUgZm9yIGEgc2luZ2xlIGpvaW4K KyAqIHByb2JsZW0uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9T Q0FOX0gKKyNkZWZpbmUgUEdQQV9TQ0FOX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5o IgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dh bGtlcl9jb250ZXh0OworCisvKgorICogU2NhbiBzdHJhdGVnaWVzLgorICoKKyAqIFBHUEFfU0NB Tl9PUkRJTkFSWSBpcyBhbnkgc2NhbiBzdHJhdGVneSB0aGF0IGlzbid0IGludGVyZXN0aW5nIHRv IHVzCisgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgcGxhbm5lciBkZWNpc2lvbiBp bnZvbHZlZC4gRm9yIGV4YW1wbGUsCisgKiB0aGUgb25seSB3YXkgdG8gc2NhbiBhIHN1YnF1ZXJ5 IGlzIGEgU3VicXVlcnlTY2FuLCBhbmQgdGhlIG9ubHkgd2F5IHRvCisgKiBzY2FuIGEgVkFMVUVT IGNvbnN0cnVjdCBpcyBhIFZhbHVlc1NjYW4uIFdlIG5lZWQgbm90IGNhcmUgZXhhY3RseSB3aGlj aAorICogdHlwZSBvZiBwbGFubmVyIG5vZGUgd2FzIHVzZWQgaW4gc3VjaCBjYXNlcywgYmVjYXVz ZSB0aGUgc2FtZSB0aGluZyB3aWxsCisgKiBoYXBwZW4gd2hlbiByZXBsYW5uaW5nLgorICoKKyAq IFBHUEFfU0NBTl9PUkRJTkFSWSBhbHNvIGluY2x1ZGVzIFJlc3VsdCBub2RlcyB0aGF0IGNvcnJl c3BvbmQgdG8gc2NhbnMKKyAqIG9yIGV2ZW4gam9pbnMgdGhhdCBhcmUgcHJvdmVkIGVtcHR5LiBX ZSBkb24ndCBrbm93IHdoZXRoZXIgb3Igbm90IHRoZSBzY2FuCisgKiBvciBqb2luIHdpbGwgc3Rp bGwgYmUgcHJvdmFibHkgZW1wdHkgYXQgcmVwbGFubmluZyB0aW1lLCBidXQgaWYgaXQgaXMsCisg KiB0aGVuIG5vIHNjYW4tdHlwZSBhZHZpY2UgaXMgbmVlZGVkLCBhbmQgaWYgaXQncyBub3QsIHdl IGNhbid0IHJlY29tbWVuZAorICogYSBzY2FuIHR5cGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGxh bi4KKyAqCisgKiBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSBhbHNvIGx1bXBzIHRvZ2V0aGVyIHNj YW5zIGFuZCBqb2luczogdGhpcyBjYW4KKyAqIGJlIGVpdGhlciBhIHBhcnRpdGlvbndpc2Ugc2Nh biBvZiBhIHBhcnRpdGlvbmVkIHRhYmxlIG9yIGEgcGFydGl0aW9ud2lzZQorICogam9pbiBiZXR3 ZWVuIHNldmVyYWwgcGFydGl0aW9uZWQgdGFibGVzLiBOb3RlIHRoYXQgYWxsIGRlY2lzaW9ucyBh Ym91dAorICogd2hldGhlciBvciBub3QgdG8gdXNlIHBhcnRpdGlvbndpc2Ugam9pbiBhcmUgbWVh bmluZ2Z1bDogbm8gbWF0dGVyIHdoYXQKKyAqIHdlIGRlY2lkZWQgdGhpcyB0aW1lLCB3ZSBjb3Vs ZCBkbyBtb3JlIG9yIGZld2VyIHRoaW5ncyBwYXJ0aXRpb253aXNlIHRoZQorICogbmV4dCB0aW1l LgorICoKKyAqIFBHUEFfU0NBTl9GT1JFSUdOIGlzIG9ubHkgdXNlZCB3aGVuIHRoZXJlJ3MgbW9y ZSB0aGFuIG9uZSByZWxhdGlvbiBpbnZvbHZlZDsKKyAqIGEgc2luZ2xlLXRhYmxlIGZvcmVpZ24g c2NhbiBpcyBjbGFzc2lmaWVkIGFzIG9yZGluYXJ5LCBzaW5jZSB0aGVyZSBpcyBubworICogZGVj aXNpb24gdG8gbWFrZSBpbiB0aGF0IGNhc2UuCisgKgorICogT3RoZXIgc2NhbiBzdHJhdGVnaWVz IG1hcCBvbmUtdG8tb25lIHRvIHBsYW4gbm9kZXMuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBH UEFfU0NBTl9PUkRJTkFSWSA9IDAsCisJUEdQQV9TQ0FOX1NFUSwKKwlQR1BBX1NDQU5fQklUTUFQ X0hFQVAsCisJUEdQQV9TQ0FOX0ZPUkVJR04sCisJUEdQQV9TQ0FOX0lOREVYLAorCVBHUEFfU0NB Tl9JTkRFWF9PTkxZLAorCVBHUEFfU0NBTl9QQVJUSVRJT05XSVNFLAorCVBHUEFfU0NBTl9USUQK KwkvKiB1cGRhdGUgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhl cmUgKi8KK30gcGdwYV9zY2FuX3N0cmF0ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX1NDQU5fU1RS QVRFR1kJKChpbnQpIFBHUEFfU0NBTl9USUQgKyAxKQorCisvKgorICogQWxsIG9mIHRoZSBkZXRh aWxzIHdlIG5lZWQgcmVnYXJkaW5nIGEgc2Nhbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9z Y2FuCit7CisJUGxhbgkgICAqcGxhbjsKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3k7CisJ Qml0bWFwc2V0ICAqcmVsaWRzOworfSBwZ3BhX3NjYW47CisKK2V4dGVybiBwZ3BhX3NjYW4gKnBn cGFfYnVpbGRfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxh biwKKwkJCQkJCQkJICBFbGlkZWROb2RlICplbGlkZWRfbm9kZSwKKwkJCQkJCQkJICBib29sIGJl bmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0pOwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVy LmwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNDliMjlkOTA2ZAotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKQEAgLTAsMCArMSwzMDIgQEAK KyV0b3B7CisvKgorICogU2Nhbm5lciBmb3IgcGxhbiBhZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMDAtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgIm5vZGVz L21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNlci9zY2Fuc3VwLmgiCisKKyNpbmNsdWRlICJw Z3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfcGFyc2VyLmgiCisKKy8qCisgKiBFeHRyYSBkYXRh IHRoYXQgd2UgcGFzcyBhcm91bmQgd2hlbiBkdXJpbmcgc2Nhbm5pbmcuCisgKgorICogJ2xpdGJ1 ZicgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIDx4ZD4gZXhjbHVzaXZlIHN0YXRlLCB3aGljaCBo YW5kbGVzCisgKiBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzLgorICovCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3l5X2V4dHJhX3R5cGUKK3sKKwlTdHJpbmdJbmZvRGF0YQlsaXRidWY7Cit9IHBncGFf eXlfZXh0cmFfdHlwZTsKKworfQorCisleworLyogTENPVl9FWENMX1NUQVJUICovCisKKyNkZWZp bmUgWVlfREVDTCBcCisJZXh0ZXJuIGludCBwZ3BhX3l5bGV4KHVuaW9uIFlZU1RZUEUgKnl5bHZh bF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwgXAorCQkJCQkJICBjaGFyICoqcGFyc2VfZXJyb3JfbXNn X3AsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKworLyogTm8gcmVhc29uIHRvIGNvbnN0cmFpbiBhbW91 bnQgb2YgZGF0YSBzbHVycGVkICovCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgMTY3NzcyMTYK KworLyogQXZvaWQgZXhpdCgpIG9uIGZhdGFsIHNjYW5uZXIgZXJyb3JzIChhIGJpdCB1Z2x5IC0t IHNlZSB5eV9mYXRhbF9lcnJvcikgKi8KKyN1bmRlZiBmcHJpbnRmCisjZGVmaW5lIGZwcmludGYo ZmlsZSwgZm10LCBtc2cpICBmcHJpbnRmX3RvX2VyZXBvcnQoZm10LCBtc2cpCisKK3N0YXRpYyB2 b2lkCitmcHJpbnRmX3RvX2VyZXBvcnQoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICptc2cp Cit7CisJZXJlcG9ydChFUlJPUiwgKGVycm1zZ19pbnRlcm5hbCgiJXMiLCBtc2cpKSk7Cit9Cisl fQorCislb3B0aW9uIHJlZW50cmFudAorJW9wdGlvbiBiaXNvbi1icmlkZ2UKKyVvcHRpb24gOGJp dAorJW9wdGlvbiBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiBub2RlZmF1bHQKKyVvcHRpb24g bm9pbnB1dAorJW9wdGlvbiBub3VucHV0Cislb3B0aW9uIG5veXl3cmFwCislb3B0aW9uIG5veXlh bGxvYworJW9wdGlvbiBub3l5cmVhbGxvYworJW9wdGlvbiBub3l5ZnJlZQorJW9wdGlvbiB3YXJu Cislb3B0aW9uIHByZWZpeD0icGdwYV95eSIKKyVvcHRpb24gZXh0cmEtdHlwZT0icGdwYV95eV9l eHRyYV90eXBlICoiCisKKy8qCisgKiBXaGF0IGZvbGxvd3MgaXMgYSBzZXZlcmVseSBzdHJpcHBl ZC1kb3duIHZlcnNpb24gb2YgdGhlIGNvcmUgc2Nhbm5lci4gV2UKKyAqIG9ubHkgY2FyZSBhYm91 dCByZWNvZ25pemluZyBpZGVudGlmaWVycyB3aXRoIG9yIHdpdGhvdXQgaWRlbnRpZmllciBxdW90 aW5nCisgKiAoaS5lLiBkb3VibGUtcXVvdGluZyksIGRlY2ltYWwgaW50ZWdlcnMsIGFuZCBhIHNt YWxsIGhhbmRmdWwgb2Ygb3RoZXIKKyAqIHRoaW5ncy4gS2VlcCB0aGVzZSBydWxlcyBpbiBzeW5j IHdpdGggc3JjL2JhY2tlbmQvcGFyc2VyL3NjYW4ubC4gQXMgaW4gdGhhdAorICogZmlsZSwgd2Ug dXNlIGFuIGV4Y2x1c2l2ZSBzdGF0ZSBjYWxsZWQgJ3hjJyBmb3IgQy1zdHlsZSBjb21tZW50cywg YW5kIGFuCisgKiBleGNsdXNpdmUgc3RhdGUgY2FsbGVkICd4ZCcgZm9yIGRvdWJsZS1xdW90ZWQg aWRlbnRpZmllcnMuCisgKi8KKyV4IHhjCisleCB4ZAorCitpZGVudF9zdGFydAkJW0EtWmEtelwy MDAtXDM3N19dCitpZGVudF9jb250CQlbQS1aYS16XDIwMC1cMzc3XzAtOVwkXQorCitpZGVudGlm aWVyCQl7aWRlbnRfc3RhcnR9e2lkZW50X2NvbnR9KgorCitkZWNkaWdpdAkJWzAtOV0KK2RlY2lu dGVnZXIJCXtkZWNkaWdpdH0oXz97ZGVjZGlnaXR9KSoKKworc3BhY2UJCQlbIFx0XG5cclxmXHZd Cit3aGl0ZXNwYWNlCQl7c3BhY2V9KworCitkcXVvdGUJCQlcIgoreGRzdGFydAkJCXtkcXVvdGV9 Cit4ZHN0b3AJCQl7ZHF1b3RlfQoreGRkb3VibGUJCXtkcXVvdGV9e2RxdW90ZX0KK3hkaW5zaWRl CQlbXiJdKworCit4Y3N0YXJ0CQkJXC9cKgoreGNzdG9wCQkJXCorXC8KK3hjaW5zaWRlCQlbXiov XSsKKworJSUKKwore3doaXRlc3BhY2V9CXsgLyogaWdub3JlICovIH0KKwore2lkZW50aWZpZXJ9 CXsKKwkJCQkJY2hhciAgICpzdHI7CisJCQkJCWJvb2wJZmFpbDsKKwkJCQkJcGdwYV9hZHZpY2Vf dGFnX3R5cGUJdGFnOworCisJCQkJCS8qCisJCQkJCSAqIFVubGlrZSB0aGUgY29yZSBzY2FubmVy LCB3ZSBkb24ndCB0cnVuY2F0ZSBpZGVudGlmaWVycworCQkJCQkgKiBoZXJlLiBUaGVyZSBpcyBu byBvYnZpb3VzIHJlYXNvbiB0byBkbyBzby4KKwkJCQkJICovCisJCQkJCXN0ciA9IGRvd25jYXNl X2lkZW50aWZpZXIoeXl0ZXh0LCB5eWxlbmcsIGZhbHNlLCBmYWxzZSk7CisJCQkJCXl5bHZhbC0+ c3RyID0gc3RyOworCisJCQkJCS8qCisJCQkJCSAqIElmIGl0J3Mgbm90IGEgdGFnLCBqdXN0IHJl dHVybiBUT0tfSURFTlQ7IGVsc2UsIHJldHVybgorCQkJCQkgKiBhIHRva2VuIHR5cGUgYmFzZWQg b24gaG93IGZ1cnRoZXIgcGFyc2luZyBzaG91bGQKKwkJCQkJICogcHJvY2VlZC4KKwkJCQkJICov CisJCQkJCXRhZyA9IHBncGFfcGFyc2VfYWR2aWNlX3RhZyhzdHIsICZmYWlsKTsKKwkJCQkJaWYg KGZhaWwpCisJCQkJCQlyZXR1cm4gVE9LX0lERU5UOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQ QV9UQUdfSk9JTl9PUkRFUikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0pPSU5fT1JERVI7CisJCQkJ CWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQ R1BBX1RBR19JTkRFWF9PTkxZX1NDQU4pCisJCQkJCQlyZXR1cm4gVE9LX1RBR19JTkRFWDsKKwkJ CQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4pCisJCQkJCQlyZXR1 cm4gVE9LX1RBR19CSVRNQVA7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19TRVFfU0NB TiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfVElEX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09 IFBHUEFfVEFHX05PX0dBVEhFUikKKwkJCQkJCXJldHVybiBUT0tfVEFHX1NJTVBMRTsKKwkJCQkJ ZWxzZQorCQkJCQkJcmV0dXJuIFRPS19UQUdfR0VORVJJQzsKKwkJCQl9CisKK3tkZWNpbnRlZ2Vy fQl7CisJCQkJCWNoYXIgICAqZW5kcHRyOworCisJCQkJCWVycm5vID0gMDsKKwkJCQkJeXlsdmFs LT5pbnRlZ2VyID0gc3RydG9pbnQoeXl0ZXh0LCAmZW5kcHRyLCAxMCk7CisJCQkJCWlmICgqZW5k cHRyICE9ICdcMCcgfHwgZXJybm8gPT0gRVJBTkdFKQorCQkJCQkJcGdwYV95eWVycm9yKHJlc3Vs dCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCSAiaW50ZWdlciBvdXQg b2YgcmFuZ2UiKTsKKwkJCQkJcmV0dXJuIFRPS19JTlRFR0VSOworCQkJCX0KKwore3hjc3RhcnR9 CQl7CisJCQkJCUJFR0lOKHhjKTsKKwkJCQl9CisKK3t4ZHN0YXJ0fQkJeworCQkJCQlCRUdJTih4 ZCk7CisJCQkJCXJlc2V0U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0YnVmKTsKKwkJCQl9CisKKyJ8 fCIJCQl7IHJldHVybiBUT0tfT1I7IH0KKworIiYmIgkJCXsgcmV0dXJuIFRPS19BTkQ7IH0KKwor LgkJCQl7IHJldHVybiB5eXRleHRbMF07IH0KKworPHhjPnt4Y3N0b3B9CXsKKwkJCQkJQkVHSU4o SU5JVElBTCk7CisJCQkJfQorCis8eGM+e3hjaW5zaWRlfQl7CisJCQkJCS8qIGRpc2NhcmQgbXVs dGlwbGUgY2hhcmFjdGVycyB3aXRob3V0IHNsYXNoIG9yIGFzdGVyaXNrICovCisJCQkJfQorCis8 eGM+LgkJCXsKKwkJCQkJLyoKKwkJCQkJICogRGlzY2FyZCBhbnkgc2luZ2xlIGNoYXJhY3Rlci4g ZmxleCBwcmVmZXJzIGxvbmdlcgorCQkJCQkgKiBtYXRjaGVzLCBzbyB0aGlzIHJ1bGUgd2lsbCBu ZXZlciBiZSBwaWNrZWQgd2hlbiB3ZSBjb3VsZAorCQkJCQkgKiBoYXZlIG1hdGNoZWQgeGNzdG9w LgorCQkJCQkgKgorCQkJCQkgKiBOQjogQXQgcHJlc2VudCwgd2UgZG9uJ3QgYm90aGVyIHRvIHN1 cHBvcnQgbmVzdGVkCisJCQkJCSAqIEMtc3R5bGUgY29tbWVudHMgaGVyZSwgYnV0IHRoaXMgbG9n aWMgY291bGQgYmUgZXh0ZW5kZWQKKwkJCQkJICogaWYgdGhhdCByZXN0cmljdGlvbiBwb3NlcyBh IHByb2JsZW0uCisJCQkJCSAqLworCQkJCX0KKworPHhjPjw8RU9GPj4JCXsKKwkJCQkJQkVHSU4o SU5JVElBTCk7CisJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5 eXNjYW5uZXIsCisJCQkJCQkJCSAidW50ZXJtaW5hdGVkIGNvbW1lbnQiKTsKKwkJCQl9CisKKzx4 ZD57eGRzdG9wfQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlpZiAoeXlleHRyYS0+bGl0 YnVmLmxlbiA9PSAwKQorCQkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNn X3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCSAiemVyby1sZW5ndGggZGVsaW1pdGVkIGlkZW50aWZp ZXIiKTsKKwkJCQkJeXlsdmFsLT5zdHIgPSBwc3RyZHVwKHl5ZXh0cmEtPmxpdGJ1Zi5kYXRhKTsK KwkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQl9CisKKzx4ZD57eGRkb3VibGV9CXsKKwkJCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoJnl5ZXh0cmEtPmxpdGJ1ZiwgJyInKTsKKwkJCQl9CisKKzx4 ZD57eGRpbnNpZGV9CXsKKwkJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0 YnVmLCB5eXRleHQsIHl5bGVuZyk7CisJCQkJfQorCis8eGQ+PDxFT0Y+PgkJeworCQkJCQlCRUdJ TihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3As IHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0ZWQgcXVvdGVkIGlkZW50aWZpZXIiKTsK KwkJCQl9CisKKyUlCisKKy8qIExDT1ZfRVhDTF9TVE9QICovCisKKy8qCisgKiBIYW5kbGVyIGZv ciBlcnJvcnMgd2hpbGUgc2Nhbm5pbmcgb3IgcGFyc2luZyBhZHZpY2UuCisgKgorICogYmlzb24g cGFzc2VzIHRoZSBlcnJvciBtZXNzYWdlIHRvIHVzIHZpYSAnbWVzc2FnZScsIGFuZCB0aGUgY29u dGV4dCBpcworICogYXZhaWxhYmxlIHZpYSB0aGUgJ3l5dGV4dCcgbWFjcm8uIFdlIGFzc2VtYmxl IHRob3NlIHZhbHVlcyBpbnRvIGEgZmluYWwKKyAqIGVycm9yIHRleHQgYW5kIHRoZW4gYXJyYW5n ZSB0byBwYXNzIGl0IGJhY2sgdG8gdGhlIGNhbGxlciBvZiBwZ3BhX3l5cGFyc2UoKQorICogYnkg c3RvcmluZyBpdCBpbnRvICpwYXJzZV9lcnJvcl9tc2dfcC4KKyAqLwordm9pZAorcGdwYV95eWVy cm9yKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlz Y2FubmVyLAorCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJc3RydWN0IHl5Z3V0c190ICp5 eWcgPSAoc3RydWN0IHl5Z3V0c190ICopIHl5c2Nhbm5lcjsJLyogbmVlZGVkIGZvciB5eXRleHQK KwkJCQkJCQkJCQkJCQkJCSAqIG1hY3JvICovCisKKworCS8qIHJlcG9ydCBvbmx5IHRoZSBmaXJz dCBlcnJvciBpbiBhIHBhcnNlIG9wZXJhdGlvbiAqLworCWlmICgqcGFyc2VfZXJyb3JfbXNnX3Ap CisJCXJldHVybjsKKworCWlmICh5eXRleHRbMF0pCisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBz cHJpbnRmKCIlcyBhdCBvciBuZWFyIFwiJXNcIiIsIG1lc3NhZ2UsIHl5dGV4dCk7CisJZWxzZQor CQkqcGFyc2VfZXJyb3JfbXNnX3AgPSBwc3ByaW50ZigiJXMgYXQgZW5kIG9mIGlucHV0IiwgbWVz c2FnZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBhZHZpY2Ugc2Nhbm5lci4KKyAqCisg KiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHBhcnNpbmcgYmVnaW5zLgorICovCit2b2lk CitwZ3BhX3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJw KQoreworCXl5c2Nhbl90CXl5c2Nhbm5lcjsKKwlwZ3BhX3l5X2V4dHJhX3R5cGUJKnl5ZXh0ID0g cGFsbG9jMF9vYmplY3QocGdwYV95eV9leHRyYV90eXBlKTsKKworCWlmICh5eWxleF9pbml0KHl5 c2Nhbm5lcnApICE9IDApCisJCWVsb2coRVJST1IsICJ5eWxleF9pbml0KCkgZmFpbGVkOiAlbSIp OworCisJeXlzY2FubmVyID0gKnl5c2Nhbm5lcnA7CisKKwlpbml0U3RyaW5nSW5mbygmeXlleHQt PmxpdGJ1Zik7CisJcGdwYV95eXNldF9leHRyYSh5eWV4dCwgeXlzY2FubmVyKTsKKworCXl5X3Nj YW5fc3RyaW5nKHN0ciwgeXlzY2FubmVyKTsKK30KKworCisvKgorICogU2h1dCBkb3duIHRoZSBh ZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcGFyc2lu ZyBpcyBjb21wbGV0ZS4KKyAqLwordm9pZAorcGdwYV9zY2FubmVyX2ZpbmlzaCh5eXNjYW5fdCB5 eXNjYW5uZXIpCit7CisJeXlsZXhfZGVzdHJveSh5eXNjYW5uZXIpOworfQorCisvKgorICogSW50 ZXJmYWNlIGZ1bmN0aW9ucyB0byBtYWtlIGZsZXggdXNlIHBhbGxvYygpIGluc3RlYWQgb2YgbWFs bG9jKCkuCisgKiBJdCdkIGJlIGJldHRlciB0byBtYWtlIHRoZXNlIHN0YXRpYywgYnV0IGZsZXgg aW5zaXN0cyBvdGhlcndpc2UuCisgKi8KKwordm9pZCAqCit5eWFsbG9jKHl5X3NpemVfdCBzaXpl LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuIHBhbGxvYyhzaXplKTsKK30KKwordm9p ZCAqCit5eXJlYWxsb2Modm9pZCAqcHRyLCB5eV9zaXplX3Qgc2l6ZSwgeXlzY2FuX3QgeXlzY2Fu bmVyKQoreworCWlmIChwdHIpCisJCXJldHVybiByZXBhbGxvYyhwdHIsIHNpemUpOworCWVsc2UK KwkJcmV0dXJuIHBhbGxvYyhzaXplKTsKK30KKwordm9pZAoreXlmcmVlKHZvaWQgKnB0ciwgeXlz Y2FuX3QgeXlzY2FubmVyKQoreworCWlmIChwdHIpCisJCXBmcmVlKHB0cik7Cit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV90cm92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi45ZGIxMDc3ZDQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5jCkBAIC0wLDAgKzEsNDkyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBwZ3BhX3Ryb3ZlLmMKKyAqCSAgQWxsIG9mIHRoZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFy dGljdWxhciBxdWVyeSwgYXBwcm9wcmlhdGVseQorICogICAgb3JnYW5pemVkIGZvciBjb252ZW5p ZW50IGFjY2Vzcy4KKyAqCisgKiBUaGlzIG5hbWUgY29tZXMgZnJvbSB0aGUgRW5nbGlzaCBleHBy ZXNzaW9uICJ0cm92ZSBvZiBhZHZpY2UiLCB3aGljaAorICogbWVhbnMgYSBjb2xsZWN0aW9uIG9m IHdpc2RvbS4gVGhpcyBzbGlnaHRseSB1bnVzdWFsIHRlcm0gaXMgY2hvc2VuIHRvCisgKiBhdm9p ZCBuYW1pbmcgY29uZnVzaW9uOyBmb3IgZXhhbXBsZSwgImNvbGxlY3Rpb24gb2YgYWR2aWNlIiB3 b3VsZAorICogaW52aXRlIGNvbmZ1c2lvbiB3aXRoIHBncGFfY29sbGVjdG9yLmMuIE5vdGUgdGhh dCwgd2hpbGUgd2UgZG9uJ3Qga25vdworICogd2hldGhlciB0aGUgcHJvdmlkZWQgYWR2aWNlIGlz IGFjdHVhbGx5IHdpc2UsIGl0J3Mgbm90IG91ciBqb2IgdG8KKyAqIHF1ZXN0aW9uIHRoZSB1c2Vy J3MgY2hvaWNlcy4KKyAqCisgKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVsZSBpcyB0byBtYWtlIGl0 IGVhc3kgdG8gbG9jYXRlIHRoZSBzcGVjaWZpYworICogYml0cyBvZiBhZHZpY2UgdGhhdCBwZXJ0 YWluIHRvIGFueSBnaXZlbiBwYXJ0IG9mIGEgcXVlcnksIG9yIHRvCisgKiBkZXRlcm1pbmUgdGhh dCB0aGVyZSBhcmUgbm9uZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV90cm92ZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorCisjaW5jbHVkZSAiY29t bW9uL2hhc2hmbl91bnN0YWJsZS5oIgorCisvKgorICogQW4gYWR2aWNlIHRyb3ZlIGlzIG9yZ2Fu aXplZCBpbnRvIGEgc2VyaWVzIG9mICJzbGljZXMiLCBlYWNoIG9mIHdoaWNoCisgKiBjb250YWlu cyBpbmZvcm1hdGlvbiBhYm91dCBvbmUgdG9waWMgZS5nLiBzY2FuIG1ldGhvZHMuIEVhY2ggc2xp Y2UgY29uc2lzdHMKKyAqIG9mIGFuIGFycmF5IG9mIHRyb3ZlIGVudHJpZXMgcGx1cyBhIGhhc2gg dGFibGUgdGhhdCB3ZSBjYW4gdXNlIHRvIGRldGVybWluZQorICogd2hpY2ggb25lcyBhcmUgcmVs ZXZhbnQgdG8gYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHF1ZXJ5LgorICovCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX3Ryb3ZlX3NsaWNlCit7CisJdW5zaWduZWQJbmFsbG9jYXRlZDsKKwl1bnNpZ25l ZAludXNlZDsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCXN0cnVjdCBwZ3BhX3Ryb3Zl X2VudHJ5X2hhc2ggKmhhc2g7Cit9IHBncGFfdHJvdmVfc2xpY2U7CisKKy8qCisgKiBTY2FuIGFk dmljZSBpcyBzdG9yZWQgaW50byAnc2Nhbic7IGpvaW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdq b2luJzsgYW5kCisgKiBhZHZpY2UgdGhhdCBjYW4gYXBwbHkgdG8gYm90aCBjYXNlcyBpcyBzdG9y ZWQgaW50byAncmVsJy4gVGhpcyBsZXRzIGNhbGxlcnMKKyAqIGFzayBqdXN0IGZvciB3aGF0J3Mg cmVsZXZhbnQuIFRoZXNlIHNsaWNlcyBjb3JyZXNwb25kIHRvIHRoZSBwb3NzaWJsZSB2YWx1ZXMK KyAqIG9mIHBncGFfdHJvdmVfbG9va3VwX3R5cGUuCisgKi8KK3N0cnVjdCBwZ3BhX3Ryb3ZlCit7 CisJcGdwYV90cm92ZV9zbGljZSBqb2luOworCXBncGFfdHJvdmVfc2xpY2UgcmVsOworCXBncGFf dHJvdmVfc2xpY2Ugc2NhbjsKK307CisKKy8qCisgKiBXZSdyZSBnb2luZyB0byBidWlsZCBhIGhh c2ggdGFibGUgdG8gYWxsb3cgY2xpZW50cyBvZiB0aGlzIG1vZHVsZSB0byBmaW5kCisgKiByZWxl dmFudCBhZHZpY2UgZm9yIGEgZ2l2ZW4gcGFydCBvZiB0aGUgcXVlcnkgcXVpY2tseS4gSG93ZXZl ciwgd2UncmUgZ29pbmcKKyAqIHRvIHVzZSBvbmx5IHRocmVlIG9mIHRoZSBmaXZlIGtleSBmaWVs ZHMgYXMgaGFzaCBrZXlzLiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMKKyAqIGZvciB0aGlzLgorICoK KyAqIEZpcnN0LCBpdCdzIGFsbG93YWJsZSB0byBzZXQgcGFydGl0aW9uX3NjaGVtYSB0byBOVUxM IHRvIG1hdGNoIGEgcGFydGl0aW9uCisgKiB3aXRoIHRoZSBjb3JyZWN0IG5hbWUgaW4gYW55IHNj aGVtYS4KKyAqCisgKiBTZWNvbmQsIHdlIGV4cGVjdCB0aGUgIm9jY3VycmVuY2UiIGFuZCAicGFy dGl0aW9uX3NjaGVtYSIgcG9ydGlvbnMgb2YgdGhlCisgKiByZWxhdGlvbiBpZGVudGlmaWVycyB0 byBiZSBtb3N0bHkgdW5pbnRlcmVzdGluZy4gTW9zdCBvZiB0aGUgdGltZSwgdGhlCisgKiBvY2N1 cnJlbmNlIGZpZWxkIHdpbGwgYmUgMSBhbmQgdGhlIHBhcnRpdGlvbl9zY2hlbWEgdmFsdWVzIHdp bGwgYWxsIGJlIHRoZQorICogc2FtZS4gRXZlbiB3aGVuIHRoZXJlIGlzIHNvbWUgdmFyaWF0aW9u LCB0aGUgYWJzb2x1dGUgbnVtYmVyIG9mIGVudHJpZXMKKyAqIHRoYXQgaGF2ZSB0aGUgc2FtZSB2 YWx1ZXMgZm9yIGFsbCB0aHJlZSBvZiB0aGVzZSBrZXkgZmllbGRzIHNob3VsZCBiZQorICogcXVp dGUgc21hbGwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY29uc3QgY2hhciAqYWxpYXNfbmFt ZTsKKwljb25zdCBjaGFyICpwYXJ0aXRpb25fbmFtZTsKKwljb25zdCBjaGFyICpwbGFuX25hbWU7 Cit9IHBncGFfdHJvdmVfZW50cnlfa2V5OworCit0eXBlZGVmIHN0cnVjdAoreworCXBncGFfdHJv dmVfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGF0dXM7CisJQml0bWFwc2V0ICAqaW5kZXhlczsK K30gcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50OworCitzdGF0aWMgdWludDMyIHBncGFfdHJvdmVf ZW50cnlfaGFzaF9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkga2V5KTsKKworc3RhdGljIGlubGlu ZSBib29sCitwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5KHBncGFfdHJvdmVfZW50cnlfa2V5 IGEsIHBncGFfdHJvdmVfZW50cnlfa2V5IGIpCit7CisJaWYgKHN0cmNtcChhLmFsaWFzX25hbWUs IGIuYWxpYXNfbmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFzdHJpbmdzX2Vx dWFsX29yX2JvdGhfbnVsbChhLnBhcnRpdGlvbl9uYW1lLCBiLnBhcnRpdGlvbl9uYW1lKSkKKwkJ cmV0dXJuIGZhbHNlOworCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChhLnBsYW5f bmFtZSwgYi5wbGFuX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30K KworI2RlZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3Ryb3ZlX2VudHJ5CisjZGVmaW5lIFNIX0VMRU1F TlRfVFlQRQkJcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50CisjZGVmaW5lIFNIX0tFWV9UWVBFCQkJ cGdwYV90cm92ZV9lbnRyeV9rZXkKKyNkZWZpbmUgU0hfS0VZCQkJCWtleQorI2RlZmluZSBTSF9I QVNIX0tFWSh0Yiwga2V5KQlwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2hfa2V5KGtleSkKKyNkZWZpbmUJ U0hfRVFVQUwodGIsIGEsIGIpCXBncGFfdHJvdmVfZW50cnlfY29tcGFyZV9rZXkoYSwgYikKKyNk ZWZpbmUgU0hfU0NPUEUJCQlzdGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNkZWZp bmUgU0hfREVGSU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworc3RhdGljIHZvaWQg cGdwYV9pbml0X3Ryb3ZlX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSk7CitzdGF0aWMg dm9pZCBwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJ CQkJCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkJCQlwZ3BhX2FkdmljZV90 YXJnZXQgKnRhcmdldCk7CitzdGF0aWMgdm9pZCBwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKHBncGFf dHJvdmVfZW50cnlfaGFzaCAqaGFzaCwKKwkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0 YXJnZXQsCisJCQkJCQkJCSAgIGludCBpbmRleCk7CitzdGF0aWMgQml0bWFwc2V0ICpwZ3BhX3Ry b3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQkJCQkJICBw Z3BhX2lkZW50aWZpZXIgKnJpZCk7CisKKy8qCisgKiBCdWlsZCBhIHRyb3ZlIG9mIGFkdmljZSBm cm9tIGEgbGlzdCBvZiBhZHZpY2UgaXRlbXMuCisgKgorICogQ2FsbGVyIGNhbiBvYnRhaW4gYSBs aXN0IG9mIGFkdmljZSBpdGVtcyB0byBwYXNzIHRvIHRoaXMgZnVuY3Rpb24gYnkKKyAqIGNhbGxp bmcgcGdwYV9wYXJzZSgpLgorICovCitwZ3BhX3Ryb3ZlICoKK3BncGFfYnVpbGRfdHJvdmUoTGlz dCAqYWR2aWNlX2l0ZW1zKQoreworCXBncGFfdHJvdmUgKnRyb3ZlID0gcGFsbG9jX29iamVjdChw Z3BhX3Ryb3ZlKTsKKworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPmpvaW4pOworCXBn cGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPnJlbCk7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNl KCZ0cm92ZS0+c2Nhbik7CisKKwlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV9pdGVtLCBpdGVtLCBh ZHZpY2VfaXRlbXMpCisJeworCQlzd2l0Y2ggKGl0ZW0tPnRhZykKKwkJeworCQkJY2FzZSBQR1BB X1RBR19KT0lOX09SREVSOgorCQkJCXsKKwkJCQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7 CisKKwkJCQkJLyoKKwkJCQkJICogRm9yIG1vc3QgYWR2aWNlIHR5cGVzLCBlYWNoIGVsZW1lbnQg aW4gdGhlIHRvcC1sZXZlbAorCQkJCQkgKiBsaXN0IGlzIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQg aXQncyBtb3N0IGNvbnZlbmllbnQgdG8KKwkJCQkJICogcmVnYXJkIHRoZSBlbnRpcmV0eSBvZiBh IEpPSU5fT1JERVIgc3BlY2lmaWNhdGlvbiBhcyBhCisJCQkJCSAqIHNpbmdsZSB0YXJnZXQuIFNp bmNlIGl0IHdhc24ndCByZXByZXNlbnRlZCB0aGF0IHdheQorCQkJCQkgKiBkdXJpbmcgcGFyc2lu ZywgYnVpbGQgYSBzdXJyb2dhdGUgb2JqZWN0IG5vdy4KKwkJCQkJICovCisJCQkJCXRhcmdldCA9 IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkJCXRhcmdldC0+dHR5cGUg PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkJCXRhcmdldC0+Y2hpbGRyZW4gPSBpdGVt LT50YXJnZXRzOworCisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+am9pbiwK KwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJ Y2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19JTkRFWF9P TkxZX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQljYXNlIFBHUEFfVEFH X1NFUV9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoKKworCQkJCS8qCisJCQkJICog U2NhbiBhZHZpY2UuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0 LCB0YXJnZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3Igbm93 LCBhbGwgb2Ygb3VyIHNjYW4gdHlwZXMgdGFyZ2V0IHNpbmdsZSByZWxhdGlvbnMsCisJCQkJCSAq IGJ1dCBpbiB0aGUgZnV0dXJlIHRoaXMgbWlnaHQgbm90IGJlIHRydWUsIGUuZy4gYSBjdXN0b20K KwkJCQkJICogc2NhbiBjb3VsZCByZXBsYWNlIGEgam9pbi4KKwkJCQkJICovCisJCQkJCUFzc2Vy dCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpOworCQkJCQlwZ3BhX3Ry b3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPnNjYW4sCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFy Z2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lO OgorCQkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX01FUkdFX0pP SU5fTUFURVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJCQlj YXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJY2FzZSBQR1BBX1RBR19O RVNURURfTE9PUF9NRU1PSVpFOgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoK KwkJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJCWNhc2UgUEdQQV9UQUdf U0VNSUpPSU5fVU5JUVVFOgorCisJCQkJLyoKKwkJCQkgKiBKb2luIHN0cmF0ZWd5IGFkdmljZS4K KwkJCQkgKi8KKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRl bS0+dGFyZ2V0cykKKwkJCQl7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+ am9pbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsK KworCQkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJY2FzZSBQR1BBX1RBR19HQVRI RVI6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCWNhc2UgUEdQQV9UQUdfTk9f R0FUSEVSOgorCisJCQkJLyoKKwkJCQkgKiBBZHZpY2UgYWJvdXQgYSBSZWxPcHRJbmZvIHJlbGV2 YW50IHRvIGJvdGggc2NhbnMgYW5kIGpvaW5zLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBn cGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJcGdw YV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5yZWwsCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywg dGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJvdmU7Cit9 CisKKy8qCisgKiBTZWFyY2ggYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHJlbGV2YW50IGVudHJpZXMu CisgKgorICogQWxsIHBhcmFtZXRlcnMgYXJlIGlucHV0IHBhcmFtZXRlcnMgZXhjZXB0IGZvciAq cmVzdWx0LCB3aGljaCBpcyBhbiBvdXRwdXQKKyAqIHBhcmFtZXRlciB1c2VkIHRvIHJldHVybiBy ZXN1bHRzIHRvIHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfbG9va3VwKHBncGFf dHJvdmUgKnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJICBpbnQgbnJp ZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywgcGdwYV90cm92ZV9yZXN1bHQgKnJlc3VsdCkKK3sK KwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisJQml0bWFwc2V0ICAqaW5kZXhlczsKKworCUFz c2VydChucmlkcyA+IDApOworCisJaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfU0NBTikK KwkJdHNsaWNlID0gJnRyb3ZlLT5zY2FuOworCWVsc2UgaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9M T09LVVBfSk9JTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5qb2luOworCWVsc2UKKwkJdHNsaWNlID0g JnRyb3ZlLT5yZWw7CisKKwlpbmRleGVzID0gcGdwYV90cm92ZV9zbGljZV9sb29rdXAodHNsaWNl LCAmcmlkc1swXSk7CisJZm9yIChpbnQgaSA9IDE7IGkgPCBucmlkczsgKytpKQorCXsKKwkJQml0 bWFwc2V0ICAqb3RoZXJfaW5kZXhlczsKKworCQkvKgorCQkgKiBJZiB0aGUgY2FsbGVyIGlzIGFz a2luZyBhYm91dCB0d28gcmVsYXRpb25zIHRoYXQgYXJlbid0IHBhcnQgb2YgdGhlCisJCSAqIHNh bWUgc3VicXVlcnksIHRoZXkndmUgbWVzc2VkIHVwLgorCQkgKi8KKwkJQXNzZXJ0KHN0cmluZ3Nf ZXF1YWxfb3JfYm90aF9udWxsKHJpZHNbMF0ucGxhbl9uYW1lLAorCQkJCQkJCQkJCSAgcmlkc1tp XS5wbGFuX25hbWUpKTsKKworCQlvdGhlcl9pbmRleGVzID0gcGdwYV90cm92ZV9zbGljZV9sb29r dXAodHNsaWNlLCAmcmlkc1tpXSk7CisJCWluZGV4ZXMgPSBibXNfdW5pb24oaW5kZXhlcywgb3Ro ZXJfaW5kZXhlcyk7CisJfQorCisJcmVzdWx0LT5lbnRyaWVzID0gdHNsaWNlLT5lbnRyaWVzOwor CXJlc3VsdC0+aW5kZXhlcyA9IGluZGV4ZXM7Cit9CisKKy8qCisgKiBSZXR1cm4gYWxsIGVudHJp ZXMgaW4gYSB0cm92ZSBzbGljZSB0byB0aGUgY2FsbGVyLgorICoKKyAqIFRoZSBmaXJzdCB0d28g YXJndW1lbnRzIGFyZSBpbnB1dCBhcmd1bWVudHMsIGFuZCB0aGUgcmVtYWluZGVyIGFyZSBvdXRw dXQKKyAqIGFyZ3VtZW50cy4KKyAqLwordm9pZAorcGdwYV90cm92ZV9sb29rdXBfYWxsKHBncGFf dHJvdmUgKnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCSAgcGdwYV90 cm92ZV9lbnRyeSAqKmVudHJpZXMsIGludCAqbmVudHJpZXMpCit7CisJcGdwYV90cm92ZV9zbGlj ZSAqdHNsaWNlOworCisJaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfU0NBTikKKwkJdHNs aWNlID0gJnRyb3ZlLT5zY2FuOworCWVsc2UgaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBf Sk9JTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5qb2luOworCWVsc2UKKwkJdHNsaWNlID0gJnRyb3Zl LT5yZWw7CisKKwkqZW50cmllcyA9IHRzbGljZS0+ZW50cmllczsKKwkqbmVudHJpZXMgPSB0c2xp Y2UtPm51c2VkOworfQorCisvKgorICogQ29udmVydCBhIHRyb3ZlIGVudHJ5IHRvIGFuIGl0ZW0g b2YgcGxhbiBhZHZpY2UgdGhhdCB3b3VsZCBwcm9kdWNlIGl0LgorICovCitjaGFyICoKK3BncGFf Y3N0cmluZ190cm92ZV9lbnRyeShwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sKKwlTdHJpbmdJ bmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZv KCZidWYsICIlcyIsIHBncGFfY3N0cmluZ19hZHZpY2VfdGFnKGVudHJ5LT50YWcpKTsKKworCS8q IEpPSU5fT1JERVIgdGFncyBhcmUgdHJhbnNmb3JtZWQgYnkgcGdwYV9idWlsZF90cm92ZTsgdW5k byB0aGF0IGhlcmUgKi8KKwlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19KT0lOX09SREVSKQor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnKCcpOworCWVsc2UKKwkJQXNzZXJ0KGVudHJ5 LT50YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisKKwlwZ3BhX2Zv cm1hdF9hZHZpY2VfdGFyZ2V0KCZidWYsIGVudHJ5LT50YXJnZXQpOworCisJaWYgKGVudHJ5LT50 YXJnZXQtPml0YXJnZXQgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYs ICcgJyk7CisJCXBncGFfZm9ybWF0X2luZGV4X3RhcmdldCgmYnVmLCBlbnRyeS0+dGFyZ2V0LT5p dGFyZ2V0KTsKKwl9CisKKwlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19KT0lOX09SREVSKQor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnKScpOworCisJcmV0dXJuIGJ1Zi5kYXRhOwor fQorCisvKgorICogU2V0IFBHUEFfVEVfKiBmbGFncyBvbiBhIHNldCBvZiB0cm92ZSBlbnRyaWVz LgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRy aWVzLCBCaXRtYXBzZXQgKmluZGV4ZXMsIGludCBmbGFncykKK3sKKwlpbnQJCQlpID0gLTE7CisK Kwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoaW5kZXhlcywgaSkpID49IDApCisJeworCQlw Z3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCisJCWVudHJ5LT5mbGFncyB8 PSBmbGFnczsKKwl9Cit9CisKKy8qCisgKiBBZGQgYSBuZXcgYWR2aWNlIHRhcmdldCB0byBhbiBl eGlzdGluZyBwZ3BhX3Ryb3ZlX3NsaWNlIG9iamVjdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf dHJvdmVfYWRkX3RvX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCXBncGFf YWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQor eworCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5OworCisJaWYgKHRzbGljZS0+bnVzZWQgPj0gdHNs aWNlLT5uYWxsb2NhdGVkKQorCXsKKwkJaW50CQkJbmV3X2FsbG9jYXRlZDsKKworCQluZXdfYWxs b2NhdGVkID0gdHNsaWNlLT5uYWxsb2NhdGVkICogMjsKKwkJdHNsaWNlLT5lbnRyaWVzID0gcmVw YWxsb2NfYXJyYXkodHNsaWNlLT5lbnRyaWVzLCBwZ3BhX3Ryb3ZlX2VudHJ5LAorCQkJCQkJCQkJ CSBuZXdfYWxsb2NhdGVkKTsKKwkJdHNsaWNlLT5uYWxsb2NhdGVkID0gbmV3X2FsbG9jYXRlZDsK Kwl9CisKKwllbnRyeSA9ICZ0c2xpY2UtPmVudHJpZXNbdHNsaWNlLT5udXNlZF07CisJZW50cnkt PnRhZyA9IHRhZzsKKwllbnRyeS0+dGFyZ2V0ID0gdGFyZ2V0OworCWVudHJ5LT5mbGFncyA9IDA7 CisKKwlwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKHRzbGljZS0+aGFzaCwgdGFyZ2V0LCB0c2xpY2Ut Pm51c2VkKTsKKworCXRzbGljZS0+bnVzZWQrKzsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgaGFz aCB0YWJsZSBmb3IgYSBuZXdseS1hZGRlZCBhZHZpY2UgdGFyZ2V0LgorICovCitzdGF0aWMgdm9p ZAorcGdwYV90cm92ZV9hZGRfdG9faGFzaChwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2gsIHBn cGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkgICBpbnQgaW5kZXgpCit7CisJcGdwYV90 cm92ZV9lbnRyeV9rZXkga2V5OworCXBncGFfdHJvdmVfZW50cnlfZWxlbWVudCAqZWxlbWVudDsK Kwlib29sCQlmb3VuZDsKKworCS8qIEZvciBub24taWRlbnRpZmllcnMsIGFkZCBlbnRyaWVzIGZv ciBhbGwgZGVzY2VuZGVudHMuICovCisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRf SURFTlRJRklFUikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRf dGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlwZ3BhX3Ryb3ZlX2FkZF90b19oYXNo KGhhc2gsIGNoaWxkX3RhcmdldCwgaW5kZXgpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKiBT YW5pdHkgY2hlY2tzLiAqLworCUFzc2VydCh0YXJnZXQtPnJpZC5vY2N1cnJlbmNlID4gMCk7CisJ QXNzZXJ0KHRhcmdldC0+cmlkLmFsaWFzX25hbWUgIT0gTlVMTCk7CisKKwkvKiBBZGQgYW4gZW50 cnkgZm9yIHRoaXMgcmVsYXRpb24gaWRlbnRpZmllci4gKi8KKwlrZXkuYWxpYXNfbmFtZSA9IHRh cmdldC0+cmlkLmFsaWFzX25hbWU7CisJa2V5LnBhcnRpdGlvbl9uYW1lID0gdGFyZ2V0LT5yaWQu cGFydHJlbDsKKwlrZXkucGxhbl9uYW1lID0gdGFyZ2V0LT5yaWQucGxhbl9uYW1lOworCWVsZW1l bnQgPSBwZ3BhX3Ryb3ZlX2VudHJ5X2luc2VydChoYXNoLCBrZXksICZmb3VuZCk7CisJaWYgKCFm b3VuZCkKKwkJZWxlbWVudC0+aW5kZXhlcyA9IE5VTEw7CisJZWxlbWVudC0+aW5kZXhlcyA9IGJt c19hZGRfbWVtYmVyKGVsZW1lbnQtPmluZGV4ZXMsIGluZGV4KTsKK30KKworLyoKKyAqIENyZWF0 ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBwZ3BhX3Ryb3ZlX3NsaWNlIG9iamVjdC4KKyAqLworc3Rh dGljIHZvaWQKK3BncGFfaW5pdF90cm92ZV9zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2Up Cit7CisJLyoKKwkgKiBJbiBhbiBpZGVhbCB3b3JsZCwgd2UnbGwgbWFrZSB0c2xpY2UtPm5hbGxv Y2F0ZWQgYmlnIGVub3VnaCB0aGF0IHRoZQorCSAqIGFycmF5IGFuZCBoYXNoIHRhYmxlIHdpbGwg YmUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIG51bWJlciBvZgorCSAqIGFkdmljZSBpdGVt cyBpbiB0aGlzIHRyb3ZlIHNsaWNlLCBidXQgYSBnZW5lcm91cyBkZWZhdWx0IHZhbHVlIGlzIG5v dAorCSAqIGdvb2QgZm9yIHBlcmZvcm1hbmNlLCBiZWNhdXNlIHBncGFfaW5pdF90cm92ZV9zbGlj ZSgpIGhhcyB0byB6ZXJvIGFuCisJICogYW1vdW50IG9mIG1lbW9yeSBwcm9wb3J0aW9uYWwgdG8g dHNsaWNlLT5uYWxsb2NhdGVkLiBIZW5jZSwgd2Uga2VlcCB0aGUKKwkgKiBzdGFydGluZyB2YWx1 ZSBxdWl0ZSBzbWFsbCwgb24gdGhlIHRoZW9yeSB0aGF0IGFkdmljZSBzdHJpbmdzIHdpbGwKKwkg KiBvZnRlbiBiZSByZWxhdGl2ZWx5IHNob3J0LgorCSAqLworCXRzbGljZS0+bmFsbG9jYXRlZCA9 IDE2OworCXRzbGljZS0+bnVzZWQgPSAwOworCXRzbGljZS0+ZW50cmllcyA9IHBhbGxvY19hcnJh eShwZ3BhX3Ryb3ZlX2VudHJ5LCB0c2xpY2UtPm5hbGxvY2F0ZWQpOworCXRzbGljZS0+aGFzaCA9 IHBncGFfdHJvdmVfZW50cnlfY3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJ CSAgIHRzbGljZS0+bmFsbG9jYXRlZCwgTlVMTCk7Cit9CisKKy8qCisgKiBGYXN0IGhhc2ggZnVu Y3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYWxpYXNfbmFtZSwgcGFydGl0aW9uX25hbWUs CisgKiBhbmQgcGxhbl9uYW1lLgorICovCitzdGF0aWMgdWludDMyCitwZ3BhX3Ryb3ZlX2VudHJ5 X2hhc2hfa2V5KHBncGFfdHJvdmVfZW50cnlfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9zdGF0ZSBo czsKKwlpbnQJCQlzcF9sZW47CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwkvKiBhbGlh c19uYW1lIG1heSBub3QgYmUgTlVMTCAqLworCXNwX2xlbiA9IGZhc3RoYXNoX2FjY3VtX2NzdHJp bmcoJmhzLCBrZXkuYWxpYXNfbmFtZSk7CisKKwkvKiBwYXJ0aXRpb25fbmFtZSBhbmQgcGxhbl9u YW1lLCBob3dldmVyLCBjYW4gYmUgTlVMTCAqLworCWlmIChrZXkucGFydGl0aW9uX25hbWUgIT0g TlVMTCkKKwkJc3BfbGVuICs9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGFydGl0 aW9uX25hbWUpOworCWlmIChrZXkucGxhbl9uYW1lICE9IE5VTEwpCisJCXNwX2xlbiArPSBmYXN0 aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBsYW5fbmFtZSk7CisKKwkvKgorCSAqIGhhc2hm bl91bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBhcyB0d2Vhay4gSXQn cyBub3QKKwkgKiBjbGVhciB0byBtZSB3aGF0IHRvIGRvIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBz dHJpbmdzLCBzbyBmb3Igbm93IEknbQorCSAqIGp1c3QgdXNpbmcgdGhlIHRvdGFsIG9mIGFsbCBv ZiB0aGUgbGVuZ3Rocy4KKwkgKi8KKwlyZXR1cm4gZmFzdGhhc2hfZmluYWwzMigmaHMsIHNwX2xl bik7Cit9CisKKy8qCisgKiBMb29rIGZvciBtYXRjaGluZyBlbnRyaWVzLgorICovCitzdGF0aWMg Qml0bWFwc2V0ICoKK3BncGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJvdmVfc2xpY2UgKnRz bGljZSwgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJcGdwYV90cm92ZV9lbnRyeV9rZXkga2V5 OworCXBncGFfdHJvdmVfZW50cnlfZWxlbWVudCAqZWxlbWVudDsKKwlCaXRtYXBzZXQgICpyZXN1 bHQgPSBOVUxMOworCisJQXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAxKTsKKworCWtleS5hbGlh c19uYW1lID0gcmlkLT5hbGlhc19uYW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHJpZC0+cGFy dHJlbDsKKwlrZXkucGxhbl9uYW1lID0gcmlkLT5wbGFuX25hbWU7CisKKwllbGVtZW50ID0gcGdw YV90cm92ZV9lbnRyeV9sb29rdXAodHNsaWNlLT5oYXNoLCBrZXkpOworCisJaWYgKGVsZW1lbnQg IT0gTlVMTCkKKwl7CisJCWludAkJCWkgPSAtMTsKKworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9t ZW1iZXIoZWxlbWVudC0+aW5kZXhlcywgaSkpID49IDApCisJCXsKKwkJCXBncGFfdHJvdmVfZW50 cnkgKmVudHJ5ID0gJnRzbGljZS0+ZW50cmllc1tpXTsKKworCQkJLyoKKwkJCSAqIFdlIGtub3cg dGhhdCB0aGlzIHRhcmdldCBvciBvbmUgb2YgaXRzIGRlc2NlbmRlbnRzIG1hdGNoZXMgdGhlCisJ CQkgKiBpZGVudGlmaWVyIG9uIHRoZSB0aHJlZSBrZXkgZmllbGRzIGFib3ZlLCBidXQgd2UgZG9u J3Qga25vdworCQkJICogd2hpY2ggZGVzY2VuZGVudCBvciB3aGV0aGVyIHRoZSBvY2N1cmVuY2Ug YW5kIHNjaGVtYSBhbHNvCisJCQkgKiBtYXRjaC4KKwkJCSAqLworCQkJaWYgKHBncGFfaWRlbnRp Zmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGVudHJ5LT50YXJnZXQpKQorCQkJCXJlc3VsdCA9IGJt c19hZGRfbWVtYmVyKHJlc3VsdCwgaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmggYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uNDc5YzNmNzU3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfdHJvdmUuaApAQCAtMCwwICsxLDExMyBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogcGdwYV90cm92ZS5oCisgKgkgIEFsbCBvZiB0aGUgYWR2aWNlIGdpdmVuIGZv ciBhIHBhcnRpY3VsYXIgcXVlcnksIGFwcHJvcHJpYXRlbHkKKyAqICAgIG9yZ2FuaXplZCBmb3Ig Y29udmVuaWVudCBhY2Nlc3MuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfdHJvdmUuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IFBHUEFfVFJPVkVfSAorI2RlZmluZSBQR1BBX1RST1ZFX0gKKworI2luY2x1ZGUgInBncGFfYXN0 LmgiCisKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdw YV90cm92ZSBwZ3BhX3Ryb3ZlOworCisvKgorICogRmxhZ3MgdGhhdCBjYW4gYmUgc2V0IG9uIGEg cGdwYV90cm92ZV9lbnRyeSB0byBpbmRpY2F0ZSB3aGF0IGhhcHBlbmVkIHdoZW4KKyAqIHRyeWlu ZyB0byBwbGFuIHVzaW5nIGFkdmljZS4KKyAqCisgKiBQR1BBX1RFX01BVENIX1BBUlRJQUwgbWVh bnMgdGhhdCB3ZSBmb3VuZCBzb21lIHBhcnQgb2YgdGhlIHF1ZXJ5IHRoYXQgYXQKKyAqIGxlYXN0 IHBhcnRpYWxseSBtYXRjaGVkIHRoZSB0YXJnZXQ7IGUuZy4gZ2l2ZW4gSk9JTl9PUkRFUihhIGIp LCB0aGlzIHdvdWxkCisgKiBiZSBzZXQgaWYgd2UgZXZlciBzYXcgYW55IGpvaW5yZWwgaW5jbHVk aW5nIGVpdGhlciAiYSIgb3IgImIiLgorICoKKyAqIFBHUEFfVEVfTUFUQ0hfRlVMTCBtZWFucyB0 aGF0IHdlIGZvdW5kIGFuIGV4YWN0IG1hdGNoIGZvciB0aGUgdGFyZ2V0OyBlLmcuCisgKiBnaXZl biBKT0lOX09SREVSKGEgYiksIHRoaXMgd291bGQgYmUgc2V0IGlmIHdlIHNhdyBhIGpvaW5yZWwg Y29udGFpbmluZworICogZXhhY3RseSAiYSIgYW5kICJiIiBhbmQgbm90aGluZyBlbHNlLgorICoK KyAqIFBHUEFfVEVfSU5BUFBMSUNBQkxFIG1lYW5zIHRoYXQgdGhlIGFkdmljZSBkb2Vzbid0IHBy b3Blcmx5IGFwcGx5IHRvIHRoZQorICogdGFyZ2V0OyBlLmcuIElOREVYX1NDQU4oZm9vIGJhcl9p ZHgpIHdvdWxkIGJlIHNvIG1hcmtlZCBpZiBiYXJfaWR4IGRvZXMgbm90CisgKiBleGlzdCBvbiBm b28uIFRoZSBmYWN0IHRoYXQgdGhpcyBiaXQgaGFzIGJlZW4gc2V0IGRvZXMgbm90IG1lYW4gdGhh dCB0aGUKKyAqIGFkdmljZSBoYWQgbm8gZWZmZWN0LgorICoKKyAqIFBHUEFfVEVfQ09ORkxJQ1RJ TkcgbWVhbnMgdGhhdCBhIGNvbmZsaWN0IHdhcyBkZXRlY3RlZCBiZXR3ZWVuIHdoYXQgdGhpcwor ICogYWR2aWNlIHdhbnRzIGFuZCB3aGF0IHNvbWUgb3RoZXIgcGxhbiBhZHZpY2Ugd2FudHM7IGUu Zy4gSk9JTl9PUkRFUihhIGIpCisgKiB3b3VsZCBjb25mbGljdCB3aXRoIEhBU0hfSk9JTihhKSwg YmVjYXVzZSB0aGUgZm9ybWVyIHJlcXVpcmVzICJhIiB0byBiZSB0aGUKKyAqIG91dGVyIHRhYmxl IHdoaWxlIHRoZSBsYXR0ZXIgcmVxdWlyZXMgaXQgdG8gYmUgdGhlIGlubmVyIHRhYmxlLgorICoK KyAqIFBHUEFfVEVfRkFJTEVEIG1lYW5zIHRoYXQgdGhlIHJlc3VsdGluZyBwbGFuIGRpZCBub3Qg Y29uZm9ybSB0byB0aGUgYWR2aWNlLgorICovCisjZGVmaW5lIFBHUEFfVEVfTUFUQ0hfUEFSVElB TAkJMHgwMDAxCisjZGVmaW5lIFBHUEFfVEVfTUFUQ0hfRlVMTAkJCTB4MDAwMgorI2RlZmluZSBQ R1BBX1RFX0lOQVBQTElDQUJMRQkJMHgwMDA0CisjZGVmaW5lIFBHUEFfVEVfQ09ORkxJQ1RJTkcJ CQkweDAwMDgKKyNkZWZpbmUgUEdQQV9URV9GQUlMRUQJCQkJMHgwMDEwCisKKy8qCisgKiBFYWNo IGVudHJ5IGluIGEgdHJvdmUgb2YgYWR2aWNlIHJlcHJlc2VudHMgdGhlIGFwcGxpY2F0aW9uIG9m IGEgdGFnIHRvCisgKiBhIHNpbmdsZSB0YXJnZXQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFf dHJvdmVfZW50cnkKK3sKKwlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWc7CisJcGdwYV9hZHZpY2Vf dGFyZ2V0ICp0YXJnZXQ7CisJaW50CQkJZmxhZ3M7Cit9IHBncGFfdHJvdmVfZW50cnk7CisKKy8q CisgKiBXaGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gZG9lcyB0aGUgY2FsbGVyIHdhbnQgdG8gZmlu ZCBpbiBhIHRyb3ZlPworICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4gbWVhbnMgd2UncmUg bG9va2luZyBmb3Igc2NhbiBhZHZpY2UuCisgKgorICogUEdQQV9UUk9WRV9MT09LVVBfSk9JTiBt ZWFucyB3ZSdyZSBsb29raW5nIGZvciBqb2luLXJlbGF0ZWQgYWR2aWNlLgorICogVGhpcyBpbmNs dWRlcyBqb2luIG9yZGVyIGFkdmljZSwgam9pbiBtZXRob2QgYWR2aWNlLCBhbmQgc2VtaWpvaW4t dW5pcXVlbmVzcworICogYWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX1JFTCBtZWFu cyB3ZSdyZSBsb29raW5nIGZvciBnZW5lcmFsIGFkdmljZSBhYm91dCB0aGlzCisgKiBhIFJlbE9w dEluZm8gdGhhdCBtYXkgY29ycmVzcG9uZCB0byBlaXRoZXIgYSBzY2FuIG9yIGEgam9pbi4gVGhp cyBpbmNsdWRlcworICogZ2F0aGVyLXJlbGF0ZWQgYWR2aWNlIGFuZCBwYXJ0aXRpb253aXNlIGFk dmljZS4gTm90ZSB0aGF0IHBhcnRpdGlvbndpc2UKKyAqIGFkdmljZSBtaWdodCBzZWVtIGxpa2Ug am9pbiBhZHZpY2UsIGJ1dCB0aGF0J3Mgbm90IGEgaGVscGZ1bCB3YXkgb2Ygdmlld2luZworICog dGhlIG1hdHRlciBiZWNhdXNlICgxKSBwYXJ0aXRpb253aXNlIGFkdmljZSBpcyBhbHNvIHJlbGV2 YW50IGF0IHRoZSBzY2FuCisgKiBsZXZlbCBhbmQgKDIpIG90aGVyIHR5cGVzIG9mIGpvaW4gYWR2 aWNlIGFmZmVjdCBvbmx5IHdoYXQgdG8gZG8gZnJvbQorICogam9pbl9wYXRoX3NldHVwX2hvb2ss IGJ1dCBwYXJ0aXRpb253aXNlIGFkdmljZSBhZmZlY3RzIHdoYXQgdG8gZG8gaW4KKyAqIGpvaW5y ZWxfc2V0dXBfaG9vay4KKyAqLwordHlwZWRlZiBlbnVtIHBncGFfdHJvdmVfbG9va3VwX3R5cGUK K3sKKwlQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCVBHUEFfVFJPVkVfTE9PS1VQX1JFTCwKKwlQ R1BBX1RST1ZFX0xPT0tVUF9TQ0FOCit9IHBncGFfdHJvdmVfbG9va3VwX3R5cGU7CisKKy8qCisg KiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgYSB0cm92ZSBsb29r dXAuIEZvciBlYWNoIG1lbWJlcgorICogb2YgImluZGV4ZXMiLCB0aGUgZW50cnkgYXQgdGhlIGNv cnJlc3BvbmRpbmcgb2Zmc2V0IHdpdGhpbiAiZW50cmllcyIgaXMgb25lCisgKiBvZiB0aGUgcmVz dWx0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9yZXN1bHQKK3sKKwlwZ3BhX3Ry b3ZlX2VudHJ5ICplbnRyaWVzOworCUJpdG1hcHNldCAgKmluZGV4ZXM7Cit9IHBncGFfdHJvdmVf cmVzdWx0OworCitleHRlcm4gcGdwYV90cm92ZSAqcGdwYV9idWlsZF90cm92ZShMaXN0ICphZHZp Y2VfaXRlbXMpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9sb29rdXAocGdwYV90cm92ZSAqdHJv dmUsCisJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCQkJICBpbnQg bnJpZHMsCisJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX3Ry b3ZlX3Jlc3VsdCAqcmVzdWx0KTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfbG9va3VwX2FsbChw Z3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUs CisJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqKmVudHJpZXMsCisJCQkJCQkJCSAgaW50ICpu ZW50cmllcyk7CitleHRlcm4gY2hhciAqcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBncGFfdHJv dmVfZW50cnkgKmVudHJ5KTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfc2V0X2ZsYWdzKHBncGFf dHJvdmVfZW50cnkgKmVudHJpZXMsCisJCQkJCQkJCSBCaXRtYXBzZXQgKmluZGV4ZXMsIGludCBm bGFncyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3dhbGtlci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yOTk3M2M5M2IwYgotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAtMCwwICsxLDk2 OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV93YWxrZXIuYworICoJICBQbGFu IHRyZWUgaXRlcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfd2Fsa2VyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3Nj YW4uaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5v ZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorCitzdGF0aWMgdm9pZCBwZ3Bh X3dhbGtfcmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4g KnBsYW4sCisJCQkJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJCQkgIHBn cGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJCQkJICBMaXN0ICphY3RpdmVf cXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIpOworc3Rh dGljIEJpdG1hcHNldCAqcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4ocGdwYV9wbGFuX3dhbGtl cl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCSBwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2lu KTsKKworc3RhdGljIHBncGFfcXVlcnlfZmVhdHVyZSAqcGdwYV9hZGRfZmVhdHVyZShwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUs CisJCQkJCQkJCQkJCVBsYW4gKnBsYW4pOworCitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9ydGko TGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBJbmRleCBydGkpOworc3RhdGljIHZvaWQgcGdw YV9xZl9hZGRfcnRpcyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEJpdG1hcHNldCAqcmVs aWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3BsYW5fcnRpcyhMaXN0ICphY3RpdmVfcXVl cnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgTGlzdCAqcnRhYmxlKTsKKworc3Rh dGljIGJvb2wgcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9p biAqdWpvaW4sCisJCQkJCQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkg ICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCSAgIHBncGFfYWR2 aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwpOworc3RhdGlj IGJvb2wgcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJlcihwZ3BhX2pvaW5fbWVt YmVyICptZW1iZXIsCisJCQkJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJ CQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkgIHBn cGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2NvbnRh aW5zX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkgIHBn cGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMp Oworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJ CQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2NvbnRh aW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkgIHBn cGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMp Oworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsaWRzKTsK K3N0YXRpYyBJbmRleCBwZ3BhX3dhbGtlcl9nZXRfcnRpKEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJ CQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkgcGdwYV9p ZGVudGlmaWVyICpyaWQpOworCisvKgorICogVG9wLWxldmVsIGVudHJ5cG9pbnQgZm9yIHRoZSBw bGFuIHRyZWUgd2Fsay4KKyAqCisgKiBQb3B1bGF0ZXMgd2Fsa2VyIGJhc2VkIG9uIGEgdHJhdmVy c2FsIG9mIHRoZSBQbGFuIHRyZWVzIGluIHBzdG10LgorICoKKyAqIHNqX3VuaXF1ZV9yZWxzIGlz IGEgbGlzdCBvZiBwZ3BhX3NqX3VuaXF1ZV9yZWwgb2JqZWN0cywgb25lIGZvciBlYWNoCisgKiBy ZWxhdGlvbiB3ZSBjb25zaWRlcmVkIG1ha2luZyB1bmlxdWUgYXMgcGFydCBvZiBzZW1pam9pbiBw bGFubmluZy4KKyAqLwordm9pZAorcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwgUGxhbm5lZFN0bXQgKnBzdG10LAorCQkJCSBMaXN0ICpzal91bmlxdWVf cmVscykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpzal91bmlxdWVfcnRpcyA9IE5V TEw7CisJTGlzdAkgICAqc2pfbm9udW5pcXVlX3FmcyA9IE5VTEw7CisKKwkvKiBJbml0aWFsaXph dGlvbi4gKi8KKwltZW1zZXQod2Fsa2VyLCAwLCBzaXplb2YocGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0KSk7CisJd2Fsa2VyLT5wc3RtdCA9IHBzdG10OworCisJLyogV2FsayB0aGUgbWFpbiBwbGFu IHRyZWUuICovCisJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcHN0bXQtPnBsYW5UcmVl LCAwLCBOVUxMLCBOSUwsIGZhbHNlKTsKKworCS8qIE1haW4gcGxhbiB0cmVlIHdhbGsgd29uJ3Qg cmVhY2ggc3VicGxhbnMsIHNvIHdhbGsgdGhvc2UuICovCisJZm9yZWFjaChsYywgcHN0bXQtPnN1 YnBsYW5zKQorCXsKKwkJUGxhbgkgICAqcGxhbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKHBsYW4g IT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4sIDAsIE5VTEws IE5JTCwgZmFsc2UpOworCX0KKworCS8qIEFkanVzdCBSVElzIGZyb20gc2pfdW5pcXVlX3JlbHMg Zm9yIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuICovCisJZm9yZWFjaF9wdHIocGdwYV9zal91 bmlxdWVfcmVsLCB1ciwgc2pfdW5pcXVlX3JlbHMpCisJeworCQlpbnQJCQlydGluZGV4ID0gLTE7 CisJCWludAkJCXJ0b2Zmc2V0ID0gMDsKKwkJYm9vbAkJZHVtbXkgPSBmYWxzZTsKKwkJQml0bWFw c2V0ICAqcmVsaWRzID0gTlVMTDsKKworCQkvKiBJZiB0aGlzIGlzIGEgc3VicGxhbiwgZmluZCB0 aGUgcmFuZ2UgdGFibGUgb2Zmc2V0LiAqLworCQlpZiAodXItPnBsYW5fbmFtZSAhPSBOVUxMKQor CQl7CisJCQlmb3JlYWNoX25vZGUoU3ViUGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRp bmZvcykKKwkJCXsKKwkJCQlpZiAoc3RyY21wKHVyLT5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9u YW1lKSA9PSAwKQorCQkJCXsKKwkJCQkJcnRvZmZzZXQgPSBydGluZm8tPnJ0b2Zmc2V0OworCQkJ CQlkdW1teSA9IHJ0aW5mby0+ZHVtbXk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJ aWYgKHJ0b2Zmc2V0ID09IDApCisJCQkJZWxvZyhFUlJPUiwgIm5vIHJ0b2Zmc2V0IGZvciBwbGFu ICVzIiwgdXItPnBsYW5fbmFtZSk7CisJCX0KKworCQkvKiBJZiB0aGlzIGVudHJ5IHBlcnRhaW5z IHRvIGEgZHVtbXkgc3VicXVlcnksIGlnbm9yZSBpdC4gKi8KKwkJaWYgKGR1bW15KQorCQkJY29u dGludWU7CisKKwkJLyogT2Zmc2V0IGVhY2ggZW50cnkgZnJvbSB0aGUgb3JpZ2luYWwgc2V0LiAq LworCQl3aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIodXItPnJlbGlkcywgcnRpbmRl eCkpID49IDApCisJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aW5kZXggKyBy dG9mZnNldCk7CisKKwkJLyogU3RvcmUgdGhlIHJlc3VsdGluZyBzZXQuICovCisJCXNqX3VuaXF1 ZV9ydGlzID0gbGFwcGVuZChzal91bmlxdWVfcnRpcywgcmVsaWRzKTsKKwl9CisKKwkvKgorCSAq IFJlbW92ZSBhbnkgbm9uLXVuaXF1ZSBzZW1qb2luIHF1ZXJ5IGZlYXR1cmVzIGZvciB3aGljaCBt YWtpbmcgdGhlIHJlbAorCSAqIHVuaXF1ZSB3YXNuJ3QgY29uc2lkZXJlZC4KKwkgKi8KKwlmb3Jl YWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLAorCQkJCXdhbGtlci0+cXVlcnlfZmVhdHVy ZXNbUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUVdKQorCXsKKwkJaWYgKGxpc3RfbWVtYmVyKHNq X3VuaXF1ZV9ydGlzLCBxZi0+cmVsaWRzKSkKKwkJCXNqX25vbnVuaXF1ZV9xZnMgPSBsYXBwZW5k KHNqX25vbnVuaXF1ZV9xZnMsIHFmKTsKKwl9CisJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BB UUZfU0VNSUpPSU5fTk9OX1VOSVFVRV0gPSBzal9ub251bmlxdWVfcWZzOworCisJLyoKKwkgKiBJ ZiB3ZSBmaW5kIGFueSBjYXNlcyB3aGVyZSBhbmFseXNpcyBvZiB0aGUgUGxhbiB0cmVlIHNob3dz IHRoYXQgdGhlCisJICogc2VtaWpvaW4gd2FzIG1hZGUgdW5pcXVlIGJ1dCB0aGlzIHBvc3NpYmls aXR5IHdhcyBuZXZlciBvYnNlcnZlZCB0byBiZQorCSAqIGNvbnNpZGVyZWQgZHVyaW5nIHBsYW5u aW5nLCB0aGVuIHdlIGhhdmUgYSBidWcgc29tZXdoZXJlLgorCSAqLworCWZvcmVhY2hfcHRyKHBn cGFfcXVlcnlfZmVhdHVyZSwgcWYsCisJCQkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZf U0VNSUpPSU5fVU5JUVVFXSkKKwl7CisJCWlmICghbGlzdF9tZW1iZXIoc2pfdW5pcXVlX3J0aXMs IHFmLT5yZWxpZHMpKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJCWluaXRTdHJp bmdJbmZvKCZidWYpOworCQkJb3V0Qml0bWFwc2V0KCZidWYsIHFmLT5yZWxpZHMpOworCQkJZWxv ZyhFUlJPUiwKKwkJCQkgInVuaXF1ZSBzZW1pam9pbiBmb3VuZCBmb3IgcmVsaWRzICVzIGJ1dCBu b3Qgb2JzZXJ2ZWQgZHVyaW5nIHBsYW5uaW5nIiwKKwkJCQkgYnVmLmRhdGEpOworCQl9CisJfQor fQorCisvKgorICogTWFpbiB3b3JraG9yc2UgZm9yIHRoZSBwbGFuIHRyZWUgd2Fsay4KKyAqCisg KiBJZiB3aXRoaW5fam9pbl9wcm9ibGVtIGlzIHRydWUsIHdlIGVuY291bnRlcmVkIGEgam9pbiBh dCBzb21lIGhpZ2hlciBsZXZlbAorICogb2YgdGhlIHRyZWUgd2FsayBhbmQgaGF2ZW4ndCB5ZXQg ZGVzY2VuZGVkIG91dCBvZiB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJlZSB0aGF0IGlz IHBhcnQgb2YgdGhhdCBzYW1lIGpvaW4gcHJvYmxlbS4gV2UncmUgbm8gbG9uZ2VyIGluIHRoZSBz YW1lCisgKiBqb2luIHByb2JsZW0gaWYgKDEpIHdlIGNyb3NzIGludG8gYSBkaWZmZXJlbnQgc3Vi cXVlcnkgb3IgKDIpIHdlIGRlc2NlbmQKKyAqIHRocm91Z2ggYW4gQXBwZW5kIG9yIE1lcmdlQXBw ZW5kIG5vZGUsIGJlbG93IHdoaWNoIGFueSBmdXJ0aGVyIGpvaW5zIHdvdWxkCisgKiBiZSBwYXJ0 aXRpb253aXNlIGpvaW5zIHBsYW5uZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBvdXRlciBqb2luIHBy b2JsZW0uCisgKgorICogSWYgam9pbl91bnJvbGxlciAhPSBOVUxMLCB0aGUgam9pbiB1bnJvbGxl ciBjb2RlIGV4cGVjdHMgdXMgdG8gZmluZCBhIGpvaW4KKyAqIHRoYXQgc2hvdWxkIGJlIHVucm9s bGVkIGludG8gdGhhdCBvYmplY3QuIFRoaXMgaW1wbGllcyB0aGF0IHdlJ3JlIHdpdGhpbiBhCisg KiBqb2luIHByb2JsZW0sIGJ1dCB0aGUgcmV2ZXJzZSBpcyBub3QgdHJ1ZTogd2hlbiB3ZSd2ZSB0 cmF2ZXJzZWQgYWxsIHRoZQorICogam9pbnMgYnV0IGFyZSBzdGlsbCBsb29raW5nIGZvciB0aGUg c2NhbiB0aGF0IGlzIHRoZSBsZWFmIG9mIHRoZSBqb2luIHRyZWUsCisgKiBqb2luX3Vucm9sbGVy IHdpbGwgYmUgTlVMTCBidXQgd2l0aGluX2pvaW5fcHJvYmxlbSB3aWxsIGJlIHRydWUuCisgKgor ICogRWFjaCBlbGVtZW50IG9mIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBjb3JyZXNwb25kcyB0byBz b21lIGl0ZW0gb2YgYWR2aWNlCisgKiB0aGF0IG5lZWRzIHRvIGVudW1lcmF0ZSBhbGwgdGhlIHJl bGF0aW9ucyBpdCBhZmZlY3RzLiBXZSBhZGQgUlRJcyB3ZSBmaW5kCisgKiBkdXJpbmcgdHJlZSB0 cmF2ZXJzYWwgdG8gZWFjaCBvZiB0aGVzZSBxdWVyeSBmZWF0dXJlcy4KKyAqCisgKiBJZiBiZW5l YXRoX2FueV9nYXRoZXIgPT0gdHJ1ZSwgc29tZSBoaWdoZXIgbGV2ZWwgb2YgdGhlIHRyZWUgdHJh dmVyc2FsIGZvdW5kCisgKiBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqLworc3Rh dGljIHZvaWQKK3BncGFfd2Fsa19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJ CQkJCSAgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkgIExpc3QgKmFj dGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJICBib29sIGJlbmVhdGhfYW55X2dhdGhlcikKK3sK KwlwZ3BhX2pvaW5fdW5yb2xsZXIgKm91dGVyX2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCXBncGFf am9pbl91bnJvbGxlciAqaW5uZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJYm9vbAkJam9pbl91 bnJvbGxlcl90b3BsZXZlbCA9IGZhbHNlOworCUxpc3QJICAgKnB1c2hkb3duX3F1ZXJ5X2ZlYXR1 cmVzID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKmV4dHJhcGxhbnMgPSBOSUw7 CisJTGlzdAkgICAqZWxpZGVkX25vZGVzID0gTklMOworCisJQXNzZXJ0KHdpdGhpbl9qb2luX3By b2JsZW0gfHwgam9pbl91bnJvbGxlciA9PSBOVUxMKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBh IEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwgZGlyZWN0bHkgYWRkIGl0IHRvIHRoZSBsaXN0 CisJICogb2YgY3VycmVudGx5LWFjdGl2ZSBxdWVyeSBmZWF0dXJlcy4KKwkgKgorCSAqIE90aGVy d2lzZSwgY2hlY2sgdGhlIGZ1dHVyZV9xdWVyeV9mZWF0dXJlcyBsaXN0IHRvIHNlZSB3aGV0aGVy IHRoaXMgd2FzCisJICogcHJldmlvdXNseSBpZGVudGlmaWVkIGFzIGEgcGxhbiBub2RlIHRoYXQg bmVlZHMgdG8gYmUgdHJlYXRlZCBhcyBhCisJICogcXVlcnkgZmVhdHVyZS4KKwkgKgorCSAqIE5v dGUgdGhhdCB0aGUgY2FsbGVyIGFsc28gaGFzIGEgY29weSB0byBhY3RpdmVfcXVlcnlfZmVhdHVy ZXMsIHNvIHdlCisJICogY2FuJ3QgZGVzdHJ1Y3RpdmVseSBtb2RpZnkgaXQgd2l0aG91dCBtYWtp bmcgYSBjb3B5LgorCSAqLworCWlmIChJc0EocGxhbiwgR2F0aGVyKSkKKwl7CisJCWFjdGl2ZV9x dWVyeV9mZWF0dXJlcyA9CisJCQlsYXBwZW5kKGxpc3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVy ZXMpLAorCQkJCQlwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX0dBVEhFUiwgcGxhbikp OworCQliZW5lYXRoX2FueV9nYXRoZXIgPSB0cnVlOworCX0KKwllbHNlIGlmIChJc0EocGxhbiwg R2F0aGVyTWVyZ2UpKQorCXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCWxhcHBlbmQo bGlzdF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBncGFfYWRkX2ZlYXR1cmUo d2Fsa2VyLCBQR1BBUUZfR0FUSEVSX01FUkdFLCBwbGFuKSk7CisJCWJlbmVhdGhfYW55X2dhdGhl ciA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVy ZSwgcWYsIHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzKQorCQl7CisJCQlpZiAocWYtPnBs YW4gPT0gcGxhbikKKwkJCXsKKwkJCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBsaXN0X2NvcHko YWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKTsKKwkJCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBsYXBw ZW5kKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcWYpOworCQkJCXdhbGtlci0+ZnV0dXJlX3F1ZXJ5 X2ZlYXR1cmVzID0KKwkJCQkJbGlzdF9kZWxldGVfcHRyKHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2Zl YXR1cmVzLCBwbGFuKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogRmlu ZCBhbGwgZWxpZGVkIG5vZGVzIGZvciB0aGlzIFBsYW4gbm9kZS4KKwkgKi8KKwlmb3JlYWNoX25v ZGUoRWxpZGVkTm9kZSwgbiwgd2Fsa2VyLT5wc3RtdC0+ZWxpZGVkTm9kZXMpCisJeworCQlpZiAo bi0+cGxhbl9ub2RlX2lkID09IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCWVsaWRlZF9ub2RlcyA9 IGxhcHBlbmQoZWxpZGVkX25vZGVzLCBuKTsKKwl9CisKKwkvKiBJZiB3ZSBmb3VuZCBhbnkgZWxp ZGVkX25vZGVzLCBoYW5kbGUgdGhlbS4gKi8KKwlpZiAoZWxpZGVkX25vZGVzICE9IE5JTCkKKwl7 CisJCWludAkJCW51bV9lbGlkZWRfbm9kZXMgPSBsaXN0X2xlbmd0aChlbGlkZWRfbm9kZXMpOwor CQlFbGlkZWROb2RlICpsYXN0X2VsaWRlZF9ub2RlOworCisJCS8qCisJCSAqIFJUSXMgZm9yIHRo ZSBmaW5hbCAtLSBhbmQgdGh1cyBsb2dpY2FsbHkgdXBwZXJtb3N0IC0tIGVsaWRlZCBub2RlCisJ CSAqIHNob3VsZCBiZSBjb2xsZWN0ZWQgZm9yIHF1ZXJ5IGZlYXR1cmVzIHBhc3NlZCBkb3duIGJ5 IHRoZSBjYWxsZXIuCisJCSAqIEhvd2V2ZXIsIGVsaWRlZCBub2RlcyBhY3QgYXMgYmFycmllcnMg dG8gcXVlcnkgZmVhdHVyZXMsIHdoaWNoCisJCSAqIG1lYW5zIHRoYXQgKDEpIHRoZSByZW1haW5p bmcgZWxpZGVkIG5vZGVzLCBpZiBhbnksIHNob3VsZCBiZQorCQkgKiBpZ25vcmVkIGZvciBwdXJw b3NlcyBvZiBxdWVyeSBmZWF0dXJlcyBhbmQgKDIpIHRoZSBsaXN0IG9mIGFjdGl2ZQorCQkgKiBx dWVyeSBmZWF0dXJlcyBzaG91bGQgYmUgcmVzZXQgdG8gZW1wdHkgc28gdGhhdCB3ZSBkbyBub3Qg YWRkIFJUSXMKKwkJICogZnJvbSB0aGUgcGxhbiBub2RlIHRoYXQgaXMgbG9naWNhbGx5IGJlbmVh dGggdGhlIGVsaWRlZCBub2RlIHRvIHRoZQorCQkgKiBxdWVyeSBmZWF0dXJlcyBwYXNzZWQgZG93 biBmcm9tIHRoZSBjYWxsZXIuCisJCSAqLworCQlsYXN0X2VsaWRlZF9ub2RlID0gbGlzdF9udGgo ZWxpZGVkX25vZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7CisJCXBncGFfcWZfYWRkX3J0aXMo YWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJIHBncGFfZmlsdGVyX291dF9qb2luX3JlbGlk cyhsYXN0X2VsaWRlZF9ub2RlLT5yZWxpZHMsCisJCQkJCQkJCQkJCQkJIHdhbGtlci0+cHN0bXQt PnJ0YWJsZSkpOworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisKKwkJLyoKKwkJICog SWYgd2UncmUgd2l0aGluIGEgam9pbiBwcm9ibGVtLCB0aGUgam9pbl91bnJvbGxlciBpcyByZXNw b25zaWJsZQorCQkgKiBmb3IgYnVpbGRpbmcgdGhlIHNjYW4gZm9yIHRoZSBmaW5hbCBlbGlkZWQg bm9kZSwgc28gdGhyb3cgaXQgb3V0LgorCQkgKi8KKwkJaWYgKHdpdGhpbl9qb2luX3Byb2JsZW0p CisJCQllbGlkZWRfbm9kZXMgPSBsaXN0X3RydW5jYXRlKGVsaWRlZF9ub2RlcywgbnVtX2VsaWRl ZF9ub2RlcyAtIDEpOworCisJCS8qIEJ1aWxkIHNjYW5zIGZvciBhbGwgKG9yIHRoZSByZW1haW5p bmcpIGVsaWRlZCBub2Rlcy4gKi8KKwkJZm9yZWFjaF9ub2RlKEVsaWRlZE5vZGUsIGVsaWRlZF9u b2RlLCBlbGlkZWRfbm9kZXMpCisJCXsKKwkJCSh2b2lkKSBwZ3BhX2J1aWxkX3NjYW4od2Fsa2Vy LCBwbGFuLCBlbGlkZWRfbm9kZSwKKwkJCQkJCQkJICAgYmVuZWF0aF9hbnlfZ2F0aGVyLCB3aXRo aW5fam9pbl9wcm9ibGVtKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZXJlIHdlcmUgYW55IGVs aWRlZCBub2RlcywgdGhlbiBldmVyeXRoaW5nIGJlbmVhdGggdGhvc2Ugbm9kZXMKKwkJICogaXMg bm90IHBhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVtLgorCQkgKgorCQkgKiBJbiBtb3JlIGRl dGFpbCwgaWYgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHdhcyBlbGlkZWQsIHRoZW4gYQorCQkg KiBwYXJ0aXRpb253aXNlIGpvaW4gd2FzIGNob3NlbiBhbmQgb25seSBhIHNpbmdsZSBjaGlsZCBz dXJ2aXZlZDsgaWYKKwkJICogYSBTdWJxdWVyeVNjYW4gd2FzIGVsaWRlZCwgdGhlIHN1YnF1ZXJ5 IHdhcyBwbGFubmVkIHdpdGhvdXQKKwkJICogZmxhdHRlbmluZyBpdCBpbnRvIHRoZSBwYXJlbnQu CisJCSAqLworCQl3aXRoaW5fam9pbl9wcm9ibGVtID0gZmFsc2U7CisJCWpvaW5fdW5yb2xsZXIg PSBOVUxMOworCX0KKworCS8qCisJICogSWYgd2UncmUgd2l0aGluIGEgam9pbiBwcm9ibGVtLCB0 aGUgam9pbiB1bnJvbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKwkgKiBidWlsZGluZyBhbnkgcmVx dWlyZWQgc2NhbiBmb3IgdGhpcyBub2RlLiBJZiBub3QsIHdlIGRvIGl0IGhlcmUuCisJICovCisJ aWYgKCF3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkodm9pZCkgcGdwYV9idWlsZF9zY2FuKHdhbGtl ciwgcGxhbiwgTlVMTCwgYmVuZWF0aF9hbnlfZ2F0aGVyLCBmYWxzZSk7CisKKwkvKgorCSAqIElm IHRoaXMgam9pbiBuZWVkcyB0byB1bnJvbGxlZCBidXQgdGhlcmUncyBubyBqb2luIHVucm9sbGVy IGFscmVhZHkKKwkgKiBhdmFpbGFibGUsIGNyZWF0ZSBvbmUuCisJICovCisJaWYgKGpvaW5fdW5y b2xsZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pvaW4ocGxhbikpCisJeworCQlqb2luX3Vucm9sbGVy ID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcigpOworCQlqb2luX3Vucm9sbGVyX3RvcGxldmVs ID0gdHJ1ZTsKKwkJd2l0aGluX2pvaW5fcHJvYmxlbSA9IHRydWU7CisJfQorCisJLyoKKwkgKiBJ ZiB0aGlzIGpvaW4gaXMgdG8gYmUgdW5yb2xsZWQsIHBncGFfdW5yb2xsX2pvaW4oKSB3aWxsIHJl dHVybiB0aGUgam9pbgorCSAqIHVucm9sbGVyIG9iamVjdCB0aGF0IHNob3VsZCBiZSBwYXNzZWQg ZG93biB3aGVuIHdlIHJlY3Vyc2UgaW50byB0aGUKKwkgKiBvdXRlciBhbmQgaW5uZXIgc2lkZXMg b2YgdGhlIHBsYW4uCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXIgIT0gTlVMTCkKKwkJcGdwYV91 bnJvbGxfam9pbih3YWxrZXIsIHBsYW4sIGJlbmVhdGhfYW55X2dhdGhlciwgam9pbl91bnJvbGxl ciwKKwkJCQkJCSAmb3V0ZXJfam9pbl91bnJvbGxlciwgJmlubmVyX2pvaW5fdW5yb2xsZXIpOwor CisJLyogQWRkIFJUSXMgZnJvbSB0aGUgcGxhbiBub2RlIHRvIGFsbCBhY3RpdmUgcXVlcnkgZmVh dHVyZXMuICovCisJcGdwYV9xZl9hZGRfcGxhbl9ydGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywg cGxhbiwgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKworCS8qCisJICogUmVjdXJzZSBpbnRvIHRo ZSBvdXRlciBhbmQgaW5uZXIgc3VidHJlZXMuCisJICoKKwkgKiBBcyBhbiBleGNlcHRpb24sIGlm IHRoaXMgaXMgYSBGb3JlaWduU2NhbiwgZG9uJ3QgcmVjdXJzZS4gcG9zdGdyZXNfZmR3CisJICog c29tZXRpbWVzIHN0b3JlcyBhbiBFUFEgcmVjaGVjayBwbGFuIGluIHBsYW4tPmxlZnRyZWUsIGJ1 dCB0aGF0J3MgZ29pbmcKKwkgKiB0byBtZW50aW9uIHRoZSBzYW1lIHNldCBvZiByZWxhdGlvbnMg YXMgdGhlIEZvcmVpZ25TY2FuIGl0c2VsZiwgYW5kIHdlCisJICogaGF2ZSBubyB3YXkgdG8gZW1p dCBhZHZpY2UgdGFyZ2V0aW5nIHRoZSBFUFEgY2FzZSB2cy4gdGhlIG5vbi1FUFEgY2FzZS4KKwkg KiBNb3Jlb3ZlciwgaXQncyBub3QgZW50aXJlbHkgY2xlYXIgd2hhdCBvdGhlciBGRFdzIG1pZ2h0 IGRvIHdpdGggdGhlCisJICogbGVmdCBhbmQgcmlnaHQgc3VidHJlZXMuIE1heWJlIHNvbWUgYmV0 dGVyIGhhbmRsaW5nIGlzIG5lZWRlZCBoZXJlLCBidXQKKwkgKiBmb3Igbm93LCB3ZSBqdXN0IHB1 bnQuCisJICovCisJaWYgKCFJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCXsKKwkJaWYgKHBsYW4t PmxlZnR0cmVlICE9IE5VTEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFu LT5sZWZ0dHJlZSwgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJCQkJICBvdXRlcl9qb2luX3Vu cm9sbGVyLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0 aGVyKTsKKwkJaWYgKHBsYW4tPnJpZ2h0dHJlZSAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3JlY3Vy c2l2ZWx5KHdhbGtlciwgcGxhbi0+cmlnaHR0cmVlLCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJ CQkJCQkgIGlubmVyX2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJ CQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0KKworCS8qCisJICogSWYgd2UgY3JlYXRlZCBh IGpvaW4gdW5yb2xsZXIgdXAgYWJvdmUsIHRoZW4gaXQncyBhbHNvIG91ciBqb2luIHRvIHVzZQor CSAqIGl0IHRvIGJ1aWxkIHRoZSBmaW5hbCBwZ3BhX3Vucm9sbGVkX2pvaW4sIGFuZCB0byBkZXN0 cm95IHRoZSBvYmplY3QuCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXJfdG9wbGV2ZWwpCisJewor CQlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luOworCisJCXVqb2luID0gcGdwYV9idWlsZF91bnJv bGxlZF9qb2luKHdhbGtlciwgam9pbl91bnJvbGxlcik7CisJCXdhbGtlci0+dG9wbGV2ZWxfdW5y b2xsZWRfam9pbnMgPQorCQkJbGFwcGVuZCh3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5z LCB1am9pbik7CisJCXBncGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKGpvaW5fdW5yb2xsZXIpOwor CQkodm9pZCkgcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCB1am9pbik7CisJfQor CisJLyoKKwkgKiBTb21lIHBsYW4gdHlwZXMgY2FuIGhhdmUgYWRkaXRpb25hbCBjaGlsZHJlbi4g Tm9kZXMgbGlrZSBBcHBlbmQgdGhhdAorCSAqIGNhbiBoYXZlIGFueSBudW1iZXIgb2YgY2hpbGRy ZW4gc3RvcmUgdGhlbSBpbiBhIExpc3Q7IGEgU3VicXVlcnlTY2FuCisJICoganVzdCBoYXMgYSBm aWVsZCBmb3IgYSBzaW5nbGUgYWRkaXRpb25hbCBQbGFuLgorCSAqLworCXN3aXRjaCAobm9kZVRh ZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9BcHBlbmQ6CisJCQl7CisJCQkJQXBwZW5kCSAgICphcGxh biA9IChBcHBlbmQgKikgcGxhbjsKKworCQkJCWV4dHJhcGxhbnMgPSBhcGxhbi0+YXBwZW5kcGxh bnM7CisJCQkJaWYgKGJtc19pc19lbXB0eShhcGxhbi0+YXBwcmVsaWRzKSkKKwkJCQkJcHVzaGRv d25fcXVlcnlfZmVhdHVyZXMgPSBhY3RpdmVfcXVlcnlfZmVhdHVyZXM7CisJCQl9CisJCQlicmVh azsKKwkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJeworCQkJCU1lcmdlQXBwZW5kICptYXBsYW4g PSAoTWVyZ2VBcHBlbmQgKikgcGxhbjsKKworCQkJCWV4dHJhcGxhbnMgPSBtYXBsYW4tPm1lcmdl cGxhbnM7CisJCQkJaWYgKGJtc19pc19lbXB0eShtYXBsYW4tPmFwcHJlbGlkcykpCisJCQkJCXB1 c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzID0gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzOworCQkJfQorCQkJ YnJlYWs7CisJCWNhc2UgVF9CaXRtYXBBbmQ6CisJCQlleHRyYXBsYW5zID0gKChCaXRtYXBBbmQg KikgcGxhbiktPmJpdG1hcHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBPcjoKKwkJ CWV4dHJhcGxhbnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBwbGFuczsKKwkJCWJyZWFr OworCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCisJCQkvKgorCQkJICogV2UgZG9uJ3QgcGFzcyBk b3duIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBhY3Jvc3MgaGVyZSwgYmVjYXVzZQorCQkJICogdGhv c2UgYXJlIHNwZWNpZmljIHRvIGEgc3VicXVlcnkgbGV2ZWwuCisJCQkgKi8KKwkJCXBncGFfd2Fs a19yZWN1cnNpdmVseSh3YWxrZXIsICgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5zdWJwbGFuLAor CQkJCQkJCQkgIDAsIE5VTEwsIE5JTCwgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwkJCWJyZWFrOwor CQljYXNlIFRfQ3VzdG9tU2NhbjoKKwkJCWV4dHJhcGxhbnMgPSAoKEN1c3RvbVNjYW4gKikgcGxh biktPmN1c3RvbV9wbGFuczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQor CisJLyogSWYgd2UgZm91bmQgYSBsaXN0IG9mIGV4dHJhIGNoaWxkcmVuLCBpdGVyYXRlIG92ZXIg aXQuICovCisJZm9yZWFjaChsYywgZXh0cmFwbGFucykKKwl7CisJCVBsYW4JICAgKnN1YnBsYW4g PSBsZmlyc3QobGMpOworCisJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHN1YnBsYW4s IDAsIE5VTEwsIHB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCSAgYmVuZWF0aF9hbnlf Z2F0aGVyKTsKKwl9Cit9CisKKy8qCisgKiBQZXJmb3JtIGZpbmFsIHByb2Nlc3Npbmcgb2YgYSBu ZXdseS1jb25zdHJ1Y3RlZCBwZ3BhX3Vucm9sbGVkX2pvaW4uIFRoaXMKKyAqIG9ubHkgbmVlZHMg dG8gYmUgY2FsbGVkIGZvciB0b3BsZXZlbCBwZ3BhX3Vucm9sbGVkX2pvaW4gb2JqZWN0cywgc2lu Y2UgaXQKKyAqIHJlY3Vyc2VzIHRvIHN1Yi1qb2lucyBhcyBuZWVkZWQuCisgKgorICogT3VyIGdv YWwgaXMgdG8gYWRkIHRoZSBzZXQgb2YgaW5uZXIgcmVsaWRzIHRvIHRoZSByZWxldmFudCBqb2lu X3N0cmF0ZWdpZXMKKyAqIGxpc3QsIGFuZCB0byBkbyB0aGUgc2FtZSBmb3IgYW55IHN1Yi1qb2lu cy4gVG8gdGhhdCBlbmQsIHRoZSByZXR1cm4gdmFsdWUKKyAqIGlzIHRoZSBzZXQgb2YgcmVsaWRz IGZvdW5kIGJlbmVhdGggdGhlIHRoZSBqb2luLCBidXQgaXQgaXMgZXhwZWN0ZWQgdGhhdAorICog dGhlIHRvcGxldmVsIGNhbGxlciB3aWxsIGlnbm9yZSB0aGlzLgorICovCitzdGF0aWMgQml0bWFw c2V0ICoKK3BncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLAorCQkJCQkJICAgcGdwYV91bnJvbGxlZF9qb2luICp1am9pbikKK3sKKwlCaXRt YXBzZXQgICphbGxfcmVsaWRzID0gYm1zX2NvcHkodWpvaW4tPm91dGVyLnNjYW4tPnJlbGlkcyk7 CisKKwkvKiBJZiB0aGlzIGZhaWxzLCB3ZSBkaWRuJ3QgdW5yb2xsIHByb3Blcmx5LiAqLworCUFz c2VydCh1am9pbi0+b3V0ZXIudW5yb2xsZWRfam9pbiA9PSBOVUxMKTsKKworCWZvciAoaW50IGsg PSAwOyBrIDwgdWpvaW4tPm5pbm5lcjsgKytrKQorCXsKKwkJcGdwYV9qb2luX21lbWJlciAqbWVt YmVyID0gJnVqb2luLT5pbm5lcltrXTsKKwkJQml0bWFwc2V0ICAqcmVsaWRzOworCisJCWlmICht ZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwkJCXJlbGlkcyA9IHBncGFfcHJvY2Vzc191 bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJCW1lbWJlci0+dW5yb2xsZWRfam9pbik7 CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsKKwkJCXJlbGlk cyA9IG1lbWJlci0+c2Nhbi0+cmVsaWRzOworCQl9CisJCXdhbGtlci0+am9pbl9zdHJhdGVnaWVz W3Vqb2luLT5zdHJhdGVneVtrXV0gPQorCQkJbGFwcGVuZCh3YWxrZXItPmpvaW5fc3RyYXRlZ2ll c1t1am9pbi0+c3RyYXRlZ3lba11dLCByZWxpZHMpOworCQlhbGxfcmVsaWRzID0gYm1zX2FkZF9t ZW1iZXJzKGFsbF9yZWxpZHMsIHJlbGlkcyk7CisJfQorCisJcmV0dXJuIGFsbF9yZWxpZHM7Cit9 CisKKy8qCisgKiBBcnJhbmdlIGZvciB0aGUgZ2l2ZW4gcGxhbiBub2RlIHRvIGJlIHRyZWF0ZWQg YXMgYSBxdWVyeSBmZWF0dXJlIHdoZW4gdGhlCisgKiB0cmVlIHdhbGsgcmVhY2hlcyBpdC4KKyAq CisgKiBNYWtlIHN1cmUgdG8gb25seSB1c2UgdGhpcyBmb3Igbm9kZXMgdGhhdCB0aGUgdHJlZSB3 YWxrIGNhbid0IGhhdmUgcmVhY2hlZAorICogeWV0IQorICovCit2b2lkCitwZ3BhX2FkZF9mdXR1 cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCXBncGFf cWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAqcWYgPSBw Z3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgdHlwZSwgcGxhbik7CisKKwl3YWxrZXItPmZ1dHVyZV9x dWVyeV9mZWF0dXJlcyA9CisJCWxhcHBlbmQod2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMs IHFmKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIGFz c29jaWF0ZWQgd2l0aCB0aGlzIHBsYW4gbm9kZSBJRC4KKyAqCisgKiBUaGUgbGFzdCBlbGlkZWQg bm9kZSBpcyB0aGUgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuIHVwcGVybW9zdCBpbiB0aGUgcGxh bgorICogdHJlZSBoYWQgaXQgbm90IGJlZW4gcmVtb3ZlZCBkdXJpbmcgc2V0cmVmcyBwcm9jZXNz aWcuCisgKi8KK0VsaWRlZE5vZGUgKgorcGdwYV9sYXN0X2VsaWRlZF9ub2RlKFBsYW5uZWRTdG10 ICpwc3RtdCwgUGxhbiAqcGxhbikKK3sKKwlFbGlkZWROb2RlICplbGlkZWRfbm9kZSA9IE5VTEw7 CisKKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgcHN0bXQtPmVsaWRlZE5vZGVzKQorCXsK KwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQllbGlkZWRf bm9kZSA9IG47CisJfQorCisJcmV0dXJuIGVsaWRlZF9ub2RlOworfQorCisvKgorICogQ2VydGFp biBwbGFuIG5vZGVzIGNhbiByZWZlciB0byBhIHNldCBvZiBSVElzLiBFeHRyYWN0IGFuZCByZXR1 cm4gdGhlIHNldC4KKyAqLworQml0bWFwc2V0ICoKK3BncGFfcmVsaWRzKFBsYW4gKnBsYW4pCit7 CisJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQlyZXR1cm4gKChSZXN1bHQgKikgcGxhbiktPnJl bGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCQlyZXR1cm4gKChGb3Jl aWduU2NhbiAqKSBwbGFuKS0+ZnNfcmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBBcHBlbmQp KQorCQlyZXR1cm4gKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsKKwllbHNlIGlmIChJc0Eo cGxhbiwgTWVyZ2VBcHBlbmQpKQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBw cmVsaWRzOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFeHRyYWN0IHRoZSBzY2FubmVk IFJUSSBmcm9tIGEgcGxhbiBub2RlLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGVyZSBpc24ndCBv bmUuCisgKi8KK0luZGV4CitwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFuKQoreworCXN3aXRjaCAo bm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9TZXFTY2FuOgorCQljYXNlIFRfU2FtcGxlU2Nh bjoKKwkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlkU2NhbjoKKwkJY2FzZSBU X1RpZFJhbmdlU2NhbjoKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJY2FzZSBUX0Z1bmN0aW9u U2NhbjoKKwkJY2FzZSBUX1RhYmxlRnVuY1NjYW46CisJCWNhc2UgVF9WYWx1ZXNTY2FuOgorCQlj YXNlIFRfQ3RlU2NhbjoKKwkJY2FzZSBUX05hbWVkVHVwbGVzdG9yZVNjYW46CisJCWNhc2UgVF9X b3JrVGFibGVTY2FuOgorCQljYXNlIFRfRm9yZWlnblNjYW46CisJCWNhc2UgVF9DdXN0b21TY2Fu OgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJCXJldHVy biAoKFNjYW4gKikgcGxhbiktPnNjYW5yZWxpZDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOwor CX0KK30KKworLyoKKyAqIENvbnN0cnVjdCBhIG5ldyBCaXRtYXBzZXQgY29udGFpbmluZyBub24t UlRFX0pPSU4gbWVtYmVycyBvZiAncmVsaWRzJy4KKyAqLworQml0bWFwc2V0ICoKK3BncGFfZmls dGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKQorewor CWludAkJCXJ0aSA9IC0xOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisKKwl3aGlsZSAo KHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQlSYW5nZVRi bEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0ZS0+cnRla2lu ZCAhPSBSVEVfSk9JTikKKwkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwgcnRpKTsK Kwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ3JlYXRlIGEgcGdwYV9xdWVyeV9m ZWF0dXJlIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsIHF1ZXJ5IGZlYXR1cmVzCisgKiBm b3IgdGhpcyBwbGFuLgorICovCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICoKK3BncGFfYWRk X2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJIHBncGFfcWZf dHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAqcWYgPSBwYWxs b2MwX29iamVjdChwZ3BhX3F1ZXJ5X2ZlYXR1cmUpOworCisJcWYtPnR5cGUgPSB0eXBlOworCXFm LT5wbGFuID0gcGxhbjsKKworCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5cGVdID0KKwkJ bGFwcGVuZCh3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSwgcWYpOworCisJcmV0dXJu IHFmOworfQorCisvKgorICogQWRkIGEgc2luZ2xlIFJUSSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBm ZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRpKExpc3QgKmFjdGl2ZV9x dWVyeV9mZWF0dXJlcywgSW5kZXggcnRpKQoreworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVh dHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCXFmLT5yZWxpZHMgPSBibXNf YWRkX21lbWJlcihxZi0+cmVsaWRzLCBydGkpOworCX0KK30KKworLyoKKyAqIEFkZCBhIHNldCBv ZiBSVElzIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitw Z3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0bWFwc2V0ICpy ZWxpZHMpCit7CisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgYWN0aXZlX3F1 ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJcWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVycyhxZi0+cmVs aWRzLCByZWxpZHMpOworCX0KK30KKworLyoKKyAqIEFkZCBSVElzIGRpcmVjdGx5IGNvbnRhaW5l ZCBpbiBhIHBsYW4gbm9kZSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLAorICogYnV0IGZp bHRlciBvdXQgYW55IGpvaW4gUlRJcywgc2luY2UgYWR2aWNlIGRvZXNuJ3QgbWVudGlvbiB0aG9z ZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3BsYW5fcnRpcyhMaXN0ICphY3RpdmVf cXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sIExpc3QgKnJ0YWJsZSkKK3sKKwlCaXRtYXBzZXQg ICpyZWxpZHM7CisJSW5kZXgJCXJ0aTsKKworCWlmICgocmVsaWRzID0gcGdwYV9yZWxpZHMocGxh bikpICE9IE5VTEwpCisJeworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMo cmVsaWRzLCBydGFibGUpOworCQlwZ3BhX3FmX2FkZF9ydGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJl cywgcmVsaWRzKTsKKwl9CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlkKHBsYW4pKSAh PSAwKQorCQlwZ3BhX3FmX2FkZF9ydGkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBydGkpOworfQor CisvKgorICogSWYgd2UgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlIHVzaW5nIHRoZSBwcm92aWRlZCB3 YWxrZXIgb2JqZWN0IGFuZCBhcnJheQorICogb2YgaWRlbnRpZmllcnMsIHdvdWxkIHdlIGdlbmVy YXRlIHRoZSBzcGVjaWZpZWQgdGFnL3RhcmdldCBjb21iaW5hdGlvbj8KKyAqCisgKiBJZiB5ZXMs IHRoZSBwbGFuIGNvbmZvcm1zIHRvIHRoZSBhZHZpY2U7IGlmIG5vLCBpdCBkb2VzIG5vdC4gTm90 ZSB0aGF0CisgKiB3ZSBoYXZlIGtub3cgd2F5IG9mIGtub3dpbmcgd2hldGhlciB0aGUgcGxhbm5l ciB3YXMgZm9yY2VkIHRvIGVtaXQgYSBwbGFuCisgKiB0aGF0IGNvbmZvcm1lZCB0byB0aGUgYWR2 aWNlIG9yIGp1c3QgaGFwcGVuZWQgdG8gZG8gc28uCisgKi8KK2Jvb2wKK3BncGFfd2Fsa2VyX3dv dWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSBwZ3Bh X2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJIHBncGFfYWR2aWNlX3RhZ190eXBl IHRhZywKKwkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlJbmRleAkJcnRh YmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJQml0bWFw c2V0ICAqcmVsaWRzID0gTlVMTDsKKworCWlmICh0YWcgPT0gUEdQQV9UQUdfSk9JTl9PUkRFUikK Kwl7CisJCWZvcmVhY2hfcHRyKHBncGFfdW5yb2xsZWRfam9pbiwgdWpvaW4sIHdhbGtlci0+dG9w bGV2ZWxfdW5yb2xsZWRfam9pbnMpCisJCXsKKwkJCWlmIChwZ3BhX3dhbGtlcl9qb2luX29yZGVy X21hdGNoZXModWpvaW4sIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZp ZXJzLCB0YXJnZXQsIHRydWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIp CisJeworCQlJbmRleAkJcnRpOworCisJCXJ0aSA9IHBncGFfd2Fsa2VyX2dldF9ydGkocnRhYmxl X2xlbmd0aCwgcnRfaWRlbnRpZmllcnMsICZ0YXJnZXQtPnJpZCk7CisJCXJlbGlkcyA9IGJtc19t YWtlX3NpbmdsZXRvbihydGkpOworCX0KKwllbHNlCisJeworCQlBc3NlcnQodGFyZ2V0LT50dHlw ZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCQlmb3JlYWNoX3B0cihwZ3BhX2Fkdmlj ZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJSW5kZXgJ CXJ0aTsKKworCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURF TlRJRklFUik7CisJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihydGFi bGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkg ICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJaWYgKHJ0aSA9PSAwKQorCQkJCWVsb2coRVJST1Is ICJjYW5ub3QgZGV0ZXJtaW5lIFJUSSBmb3IgYWR2aWNlIHRhcmdldCIpOworCQkJcmVsaWRzID0g Ym1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGkpOworCQl9CisJfQorCisJc3dpdGNoICh0YWcpCisJ eworCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkvKiBzaG91bGQgaGF2ZSBiZWVuIGhh bmRsZWQgYWJvdmUgKi8KKwkJCXBnX3VucmVhY2hhYmxlKCk7CisJCQlicmVhazsKKwkJY2FzZSBQ R1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5z X3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0JJVE1BUF9IRUFQLAorCQkJCQkJ CQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQlyZXR1cm4g cGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5f Rk9SRUlHTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05M WV9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJ CQkJCQkJCQkgUEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQlj YXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNf c2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fSU5ERVgsCisJCQkJCQkJCQkJCSBy ZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4gcGdwYV93 YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fUEFSVElU SU9OV0lTRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46 CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJ CSBQR1BBX1NDQU5fU0VRLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19U SURfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdhbGtlciwKKwkJ CQkJCQkJCQkJIFBHUEFfU0NBTl9USUQsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBH UEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdh bGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVIsCisJCQkJCQkJCQkJCQlyZWxpZHMpOwor CQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250 YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVJfTUVSR0UsCisJ CQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6 CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJ CQkJCQlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJ CWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2Nv bnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX1NFTUlKT0lOX1VOSVFV RSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJ cmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNU UkFUX0hBU0hfSk9JTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTUVS R0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2lu KHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCQkJ CQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJ cmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNU UkFUX01FUkdFX0pPSU5fUExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFf VEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRh aW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFM SVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9N RU1PSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJ CQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkUsCisJCQkJCQkJCQkJCSByZWxpZHMp OworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuIHBncGFfd2Fs a2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09Q X1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6 CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHdhbGtlciwgcmVsaWRz KTsKKwl9CisKKwkvKiBzaG91bGQgbm90IGdldCBoZXJlICovCisJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogRG9lcyBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIHRoZSBqb2luIG9yZGVyIHNwZWNp ZmllZCBieSBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJf am9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4sCisJCQkJCQkJICAg SW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50 aWZpZXJzLAorCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCSAg IGJvb2wgdG9wbGV2ZWwpCit7CisJaW50CQkJbmNoaWxkcmVuID0gbGlzdF9sZW5ndGgodGFyZ2V0 LT5jaGlsZHJlbik7CisKKwlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRF UkVEX0xJU1QpOworCisJLyogQXQgdG9wbGV2ZWwsIHdlIGFsbG93IGEgcHJlZml4IG1hdGNoLiAq LworCWlmICh0b3BsZXZlbCkKKwl7CisJCWlmIChuY2hpbGRyZW4gPiB1am9pbi0+bmlubmVyICsg MSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG5jaGlsZHJlbiAhPSB1 am9pbi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBPdXRlcm1vc3Qg cmVsIG11c3QgbWF0Y2guICovCisJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNf bWVtYmVyKCZ1am9pbi0+b3V0ZXIsCisJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgsCisJCQkJ CQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICBsaW5pdGlhbCh0YXJnZXQt PmNoaWxkcmVuKSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEVhY2ggaW5uZXIgcmVsIG11c3Qg bWF0Y2guICovCisJZm9yIChpbnQgbiA9IDA7IG4gPCBuY2hpbGRyZW4gLSAxOyArK24pCisJewor CQlwZ3BhX2FkdmljZV90YXJnZXQgKmNoaWxkX3RhcmdldCA9IGxpc3RfbnRoKHRhcmdldC0+Y2hp bGRyZW4sIG4gKyAxKTsKKworCQlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19t ZW1iZXIoJnVqb2luLT5pbm5lcltuXSwKKwkJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgsCisJ CQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgIGNoaWxkX3Rhcmdl dCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBE b2VzIG9uZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCBhbiBhZHZpY2UgdGFyZ2V0 PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJl cihwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9sZW5n dGgsCisJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJ CQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCUJpdG1hcHNldCAgKnJlbGlkcyA9 IE5VTEw7CisKKwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlpZiAo dGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQlyZXR1cm4gZmFs c2U7CisJCXJldHVybiBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMobWVtYmVyLT51bnJv bGxlZF9qb2luLAorCQkJCQkJCQkJCQkgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgcnRf aWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgdGFyZ2V0LAorCQkJCQkJCQkJCQkgIGZhbHNlKTsK Kwl9CisKKwlBc3NlcnQobWVtYmVyLT5zY2FuICE9IE5VTEwpOworCXN3aXRjaCAodGFyZ2V0LT50 dHlwZSkKKwl7CisJCWNhc2UgUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOgorCQkJLyogQ291bGQg b25seSBtYXRjaCBhbiB1bnJvbGxlZCBqb2luICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY2Fz ZSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVDoKKwkJCXsKKwkJCQlmb3JlYWNoX3B0cihwZ3Bh X2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJCQl7CisJ CQkJCUluZGV4CQlydGk7CisKKwkJCQkJcnRpID0gcGdwYV93YWxrZXJfZ2V0X3J0aShydGFibGVf bGVuZ3RoLCBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICAmY2hpbGRfdGFyZ2V0LT5yaWQp OworCQkJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aSk7CisJCQkJfQorCQkJ CWJyZWFrOworCQkJfQorCisJCWNhc2UgUEdQQV9UQVJHRVRfSURFTlRJRklFUjoKKwkJCXsKKwkJ CQlJbmRleAkJcnRpOworCisJCQkJcnRpID0gcGdwYV93YWxrZXJfZ2V0X3J0aShydGFibGVfbGVu Z3RoLCBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgICZ0YXJnZXQtPnJpZCk7CisJCQkJcmVs aWRzID0gYm1zX21ha2Vfc2luZ2xldG9uKHJ0aSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJ cmV0dXJuIGJtc19lcXVhbChtZW1iZXItPnNjYW4tPnJlbGlkcywgcmVsaWRzKTsKK30KKworLyoK KyAqIERvZXMgdGhpcyB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHNjYW4gc3RyYXRlZ3kgc2hv dWxkIGJlIHVzZWQgZm9yIHRoZQorICogZ2l2ZW4gcmVsaWQgc2V0PworICovCitzdGF0aWMgYm9v bAorcGdwYV93YWxrZXJfY29udGFpbnNfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwKKwkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJICBCaXRt YXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpzY2FucyA9IHdhbGtlci0+c2NhbnNbc3RyYXRl Z3ldOworCisJZm9yZWFjaF9wdHIocGdwYV9zY2FuLCBzY2FuLCBzY2FucykKKwl7CisJCS8qCisJ CSAqIFhYWC4gSWYgdGhpcyBpcyBpbmRleC1yZWxhdGVkIGFkdmljZSwgd2Ugc2hvdWxkIGFsc28g dmFsaWRhdGUgdGhhdAorCQkgKiB0aGUgYWR2aWNlIHRhcmdldCdzIGluZGV4IHRhcmdldCBtYXRj aGVzIHRoZSBQbGFuIHRyZWUuCisJCSAqLworCQlpZiAoYm1zX2VxdWFsKHNjYW4tPnJlbGlkcywg cmVsaWRzKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoK KyAqIERvZXMgdGhpcyB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHF1ZXJ5IGZlYXR1cmUgYXBw bGllcyB0byB0aGUgZ2l2ZW4KKyAqIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFf d2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs CisJCQkJCQkJIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlkcykK K3sKKwlMaXN0CSAgICpxdWVyeV9mZWF0dXJlcyA9IHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdHlw ZV07CisKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBxdWVyeV9mZWF0dXJl cykKKwl7CisJCWlmIChibXNfZXF1YWwocWYtPnJlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVybiB0 cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtlciBz YXkgdGhhdCB0aGUgZ2l2ZW4gam9pbiBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlCisg KiBnaXZlbiByZWxpZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWlu c19qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3BhX2pv aW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxp c3QJICAgKmpvaW5fc3RyYXRlZ2llcyA9IHdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3N0cmF0ZWd5 XTsKKworCWZvcmVhY2hfcHRyKEJpdG1hcHNldCwganNyZWxpZHMsIGpvaW5fc3RyYXRlZ2llcykK Kwl7CisJCWlmIChibXNfZXF1YWwoanNyZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRo YXQgdGhlIGdpdmVuIHJlbGlkcyBzaG91bGQgYmUgbWFya2VkIGFzIE5PX0dBVEhFUj8KKyAqLwor c3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwly ZXR1cm4gYm1zX2lzX3N1YnNldChyZWxpZHMsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30K KworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSByZWxhdGlvbiBpZGVu dGlmaWVyIHRvIGFuIFJUSS4KKyAqCisgKiBXZSB0aHJvdyBhbiBlcnJvciBoZXJlIGJlY2F1c2Ug d2UgZXhwZWN0IHRoaXMgdG8gYmUgdXNlZCBvbiBzeXN0ZW0tZ2VuZXJhdGVkCisgKiBhZHZpY2Uu IEhlbmNlLCBmYWlsdXJlIGhlcmUgaW5kaWNhdGVzIGFuIGFkdmljZSBnZW5lcmF0aW9uIGJ1Zy4K KyAqLworc3RhdGljIEluZGV4CitwZ3BhX3dhbGtlcl9nZXRfcnRpKEluZGV4IHJ0YWJsZV9sZW5n dGgsCisJCQkJCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCXBncGFfaWRl bnRpZmllciAqcmlkKQoreworCUluZGV4CQlydGk7CisKKwlydGkgPSBwZ3BhX2NvbXB1dGVfcnRp X2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZp ZXJzLAorCQkJCQkJCQkJCSAgIHJpZCk7CisJaWYgKHJ0aSA9PSAwKQorCQllbG9nKEVSUk9SLCAi Y2Fubm90IGRldGVybWluZSBSVEkgZm9yIGFkdmljZSB0YXJnZXQiKTsKKwlyZXR1cm4gcnRpOwor fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5iOTFhMzZjYTNkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaApAQCAtMCwwICsxLDE0MSBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogcGdwYV93YWxrZXIuaAorICoJICBQbGFuIHRyZWUgaXRlcmF0aW9u CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2Vy LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1dBTEtFUl9ICisj ZGVmaW5lIFBHUEFfV0FMS0VSX0gKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAi cGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKy8qCisgKiBXaGVuIGdlbmVy YXRpbmcgYWR2aWNlLCB3ZSBzaG91bGQgZW1pdCBlaXRoZXIgU0VNSUpPSU5fVU5JUVVFIGFkdmlj ZSBvcgorICogU0VNSUpPSU5fTk9OX1VOSVFVRSBhZHZpY2UgZm9yIGVhY2ggc2VtaWpvaW4gZGVw ZW5kaW5nIG9uIHdoZXRoZXIgd2UgY2hvc2UKKyAqIHRvIGltcGxlbWVudCBpdCBhcyBhIHNlbWlq b2luIG9yIHdoZXRoZXIgd2UgaW5zdGVhZCBjaG9zZSB0byBtYWtlIHRoZQorICogbnVsbGFibGUg c2lkZSB1bmlxdWUgYW5kIHRoZW4gcGVyZm9ybSBhbiBpbm5lciBqb2luLiBXaGVuIHRoZSBtYWtl LXVuaXF1ZQorICogc3RyYXRlZ3kgaXMgbm90IGNob3NlbiwgaXQncyBub3QgZWFzeSB0byB0ZWxs IGZyb20gdGhlIGZpbmFsIHBsYW4gdHJlZQorICogd2hldGhlciBpdCB3YXMgY29uc2lkZXJlZC4g VGhhdCdzIGF3a3dhcmQsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBlbWl0CisgKiB1c2VsZXNz IFNFTUlKT0lOX05PTl9VTklRVUUgYWR2aWNlIHdoZW4gdGhlcmUgd2FzIG5vIGRlY2lzaW9uIHRv IGJlIG1hZGUuCisgKgorICogVG8gYXZvaWQgdGhhdCwgZHVyaW5nIHBsYW5uaW5nLCB3ZSBjcmVh dGUgYSBwZ3BhX3NqX3VuaXF1ZV9yZWwgZm9yIGVhY2gKKyAqIHJlbGF0aW9uIHRoYXQgd2UgY29u c2lkZXJlZCBtYWtpbmcgdW5pcXVlIGZvciBwdXJwb3NlcyBvZiBzZW1pam9pbiBwbGFubmluZy4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zal91bmlxdWVfcmVsCit7CisJY2hhcgkgICAqcGxh bl9uYW1lOworCUJpdG1hcHNldCAgKnJlbGlkczsKK30gcGdwYV9zal91bmlxdWVfcmVsOworCisv KgorICogV2UgdXNlIHRoZSB0ZXJtICJxdWVyeSBmZWF0dXJlIiB0byByZWZlciB0byBwbGFuIG5v ZGVzIHRoYXQgYXJlIGludGVyZXN0aW5nCisgKiBpbiB0aGUgZm9sbG93aW5nIHdheTogdG8gZ2Vu ZXJhdGUgYWR2aWNlLCB3ZSdsbCBuZWVkIHRvIGtub3cgdGhlIHNldCBvZgorICogc2FtZS1zdWJx dWVyeSwgbm9uLWpvaW4gUlRJcyBvY2N1cmluZyBhdCBvciBiZWxvdyB0aGF0IHBsYW4gbm9kZSwg d2l0aG91dAorICogYWRtaXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQgUlRJcy4KKyAqCisgKiBG b3IgZXhhbXBsZSwgR2F0aGVyIG5vZGVzLCBkZXNpZ2luYXRlZCBieSBQR1BBUUZfR0FUSEVSLCBh bmQgR2F0aGVyIE1lcmdlCisgKiBub2RlcywgZGVzaWduYXRlZCBieSBQR1BBUUZfR0FUSEVSX01F UkdFLCBhcmUgcXVlcnkgZmVhdHVyZXMsIGJlY2F1c2Ugd2UnbGwKKyAqIHdhbnQgdG8gYWRtaXQg c29tZSBraW5kIG9mIGFkdmljZSB0aGF0IGRlc2NyaWJlcyB0aGUgcG9ydGlvbiBvZiB0aGUgcGxh bgorICogdHJlZSB0aGF0IGFwcGVhcnMgYmVuZWF0aCB0aG9zZSBub2Rlcy4KKyAqCisgKiBFYWNo IHNlbWlqb2luIGNhbiBiZSBpbXBsZW1lbnRlZCBlaXRoZXIgYnkgZGlyZWN0bHkgcGVyZm9ybWlu ZyBhIHNlbWlqb2luLAorICogb3IgYnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSBhbmQgdGhlbiBw ZXJmb3JtaW5nIGEgbm9ybWFsIGpvaW4uIEVpdGhlciB3YXksCisgKiB3ZSB1c2UgYSBxdWVyeSBm ZWF0dXJlIHRvIG5vdGljZSB3aGF0IGRlY2lzaW9uIHdhcyBtYWRlLCBzbyB0aGF0IHdlIGNhbgor ICogZGVzY3JpYmUgaXQgYnkgZW51bWVyYXRpbmcgdGhlIFJUSXMgb24gdGhhdCBzaWRlIG9mIHRo ZSBqb2luLgorICoKKyAqIFRvIGVsYWJvcmF0ZSBvbiB0aGUgIm5vIGFkbWl4dHVyZSBvZiBwYXJl bnQgYW5kIGNoaWxkIFJUSXMiIHJ1bGUsIGluIGFsbCBvZgorICogdGhlc2UgY2FzZXMsIGlmIHRo ZSBlbnRpcmV0eSBvZiBhbiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgYXBwZWFycyBiZW5lYXRoCisg KiB0aGUgcXVlcnkgZmVhdHVyZSwgd2Ugb25seSB3YW50IHRvIG5hbWUgdGhlIHBhcmVudCB0YWJs ZS4gQnV0IGl0J3MgYWxzbworICogcG9zc2libGUgdG8gaGF2ZSBjYXNlcyB3aGVyZSB3ZSBtdXN0 IG5hbWUgY2hpbGQgdGFibGVzLiBUaGlzIGlzIHBhcnRpY3VsYXJseQorICogbGlrZWx5IHRvIGhh cHBlbiB3aGVuIHBhcnRpdGlvbndpc2Ugam9pbiBpcyBpbiB1c2UsIGJ1dCBjb3VsZCBoYXBwZW4g Zm9yCisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGV2ZW4gd2l0aG91dCB0aGF0LCBpZiBvbmUg b2YgdGhvc2UgYXBwZWFycyBiZWxvdworICogYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUg Zm9yIGEgc2luZ2xlIHRhYmxlLgorICovCit0eXBlZGVmIGVudW0gcGdwYV9xZl90eXBlCit7CisJ UEdQQVFGX0dBVEhFUiwKKwlQR1BBUUZfR0FUSEVSX01FUkdFLAorCVBHUEFRRl9TRU1JSk9JTl9O T05fVU5JUVVFLAorCVBHUEFRRl9TRU1JSk9JTl9VTklRVUUKKwkvKiB1cGRhdGUgTlVNX1BHUEFf UUZfVFlQRVMgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9IHBncGFfcWZfdHlwZTsKKwor I2RlZmluZSBOVU1fUEdQQV9RRl9UWVBFUyAoKGludCkgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSAr IDEpCisKKy8qCisgKiBGb3IgZWFjaCBxdWVyeSBmZWF0dXJlLCB3ZSBrZWVwIHRyYWNrIG9mIHRo ZSBmZWF0dXJlIHR5cGUgYW5kIHRoZSBzZXQgb2YKKyAqIHJlbGlkcyB0aGF0IHdlIGZvdW5kIHVu ZGVybmVhdGggdGhlIHJlbGV2YW50IHBsYW4gbm9kZS4gU2VlIHRoZSBjb21tZW50cworICogb24g cGdwYV9xZl90eXBlLCBhYm92ZSwgZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV9xdWVyeV9mZWF0dXJlCit7CisJcGdwYV9xZl90eXBlIHR5cGU7CisJUGxh bgkgICAqcGxhbjsKKwlCaXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFfcXVlcnlfZmVhdHVyZTsK KworLyoKKyAqIENvbnRleHQgb2JqZWN0IGZvciBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBwc3Rt dCBpcyB0aGUgUGxhbm5lZFN0bXQgd2UncmUgc3R1ZHlpbmcuCisgKgorICogc2NhbnMgaXMgYW4g YXJyYXkgb2YgbGlzdHMgb2YgcGdwYV9zY2FuIG9iamVjdHMuIFRoZSBhcnJheSBpcyBpbmRleGVk IGJ5CisgKiB0aGUgc2NhbidzIHBncGFfc2Nhbl9zdHJhdGVneS4KKyAqCisgKiBub19nYXRoZXJf c2NhbnMgaXMgdGhlIHNldCBvZiBzY2FuIFJUSXMgdGhhdCBkbyBub3QgYXBwZWFyIGJlbmVhdGgg YW55CisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICogdG9wbGV2ZWxfdW5y b2xsZWRfam9pbnMgaXMgYSBsaXN0IG9mIGFsbCBwZ3BhX3Vucm9sbGVkX2pvaW4gb2JqZWN0cyB0 aGF0CisgKiBhcmUgbm90IGEgY2hpbGQgb2Ygc29tZSBvdGhlciBwZ3BhX3Vucm9sbGVkX2pvaW4u CisgKgorICogam9pbl9zdHJhdGVneSBpcyBhbiBhcnJheSBvZiBsaXN0cyBvZiBCaXRtYXBzZXQg b2JqZWN0cy4gRWFjaCBCaXRtYXBzZXQKKyAqIGlzIHRoZSBzZXQgb2YgcmVsaWRzIHRoYXQgYXBw ZWFycyBvbiB0aGUgaW5uZXIgc2lkZSBvZiBzb21lIGpvaW4gKGV4Y2x1ZGluZworICogUlRJcyBm cm9tIHBhcnRpdGlvbiBjaGlsZHJlbiBhbmQgc3VicXVlcmllcykuIFRoZSBhcnJheSBpcyBpbmRl eGVkIGJ5CisgKiBwZ3BhX2pvaW5fc3RyYXRlZ3kuCisgKgorICogcXVlcnlfZmVhdHVyZXMgaXMg YW4gYXJyYXkgbGlzdHMgb2YgcGdwYV9xdWVyeV9mZWF0dXJlIG9iamVjdHMsIGluZGV4ZWQKKyAq IGJ5IHBncGFfcWZfdHlwZS4KKyAqCisgKiBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgaXMgb25seSB1 c2VkIGR1cmluZyB0aGUgcGxhbiB0cmVlIHdhbGsgYW5kIHNob3VsZAorICogYmUgZW1wdHkgd2hl biB0aGUgdHJlZSB3YWxrIGNvbmNsdWRlcy4gSXQgaXMgYSBsaXN0IG9mIHBncGFfcXVlcnlfZmVh dHVyZQorICogb2JqZWN0cyBmb3IgUGxhbiBub2RlcyB0aGF0IHRoZSBwbGFuIHRyZWUgd2FsayBo YXMgbm90IHlldCBlbmNvdW50ZXJlZDsKKyAqIHdoZW4gZW5jb3VudGVyZWQsIHRoZXkgd2lsbCBi ZSBtb3ZlZCB0byB0aGUgbGlzdCBvZiBhY3RpdmUgcXVlcnkgZmVhdHVyZXMKKyAqIHRoYXQgaXMg cHJvcGFnYXRlZCB2aWEgdGhlIGNhbGwgc3RhY2suCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFf cGxhbl93YWxrZXJfY29udGV4dAoreworCVBsYW5uZWRTdG10ICpwc3RtdDsKKwlMaXN0CSAgICpz Y2Fuc1tOVU1fUEdQQV9TQ0FOX1NUUkFURUdZXTsKKwlCaXRtYXBzZXQgICpub19nYXRoZXJfc2Nh bnM7CisJTGlzdAkgICAqdG9wbGV2ZWxfdW5yb2xsZWRfam9pbnM7CisJTGlzdAkgICAqam9pbl9z dHJhdGVnaWVzW05VTV9QR1BBX0pPSU5fU1RSQVRFR1ldOworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1 cmVzW05VTV9QR1BBX1FGX1RZUEVTXTsKKwlMaXN0CSAgICpmdXR1cmVfcXVlcnlfZmVhdHVyZXM7 Cit9IHBncGFfcGxhbl93YWxrZXJfY29udGV4dDsKKworZXh0ZXJuIHZvaWQgcGdwYV9wbGFuX3dh bGtlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgUGxhbm5lZFN0 bXQgKnBzdG10LAorCQkJCQkJCSBMaXN0ICpzal91bmlxdWVfcmVscyk7CisKK2V4dGVybiB2b2lk IHBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2Vy LAorCQkJCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQlQbGFuICpwbGFuKTsKKwor ZXh0ZXJuIEVsaWRlZE5vZGUgKnBncGFfbGFzdF9lbGlkZWRfbm9kZShQbGFubmVkU3RtdCAqcHN0 bXQsIFBsYW4gKnBsYW4pOworZXh0ZXJuIEJpdG1hcHNldCAqcGdwYV9yZWxpZHMoUGxhbiAqcGxh bik7CitleHRlcm4gSW5kZXggcGdwYV9zY2FucmVsaWQoUGxhbiAqcGxhbik7CitleHRlcm4gQml0 bWFwc2V0ICpwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoQml0bWFwc2V0ICpyZWxpZHMsIExp c3QgKnJ0YWJsZSk7CisKK2V4dGVybiBib29sIHBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIg KnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJIHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJ CQkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmNiMDRlZDVjZjMwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvZ2F0aGVyLnNxbApAQCAtMCwwICsxLDc5IEBACitMT0FEICdwZ19wbGFuX2Fkdmlj ZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitTRVQgcGFyYWxs ZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitTRVQgbWlu X3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkg PSBvZmY7CisKK0NSRUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGlt IHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8g Z3RfZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsKKworQ1JFQVRFIFRBQkxFIGd0X2ZhY3Qg KAorCWlkIGludCBub3QgbnVsbCwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2Vz IGd0X2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIGd0X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7CisKKy0tIEJ5IGRlZmF1bHQsIHdl IGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2ggam9pbi4KK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKworLS0gRm9yY2UgR2F0 aGVyIG9yIEdhdGhlciBNZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0b2dldGhlci4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0 IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3Rf ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZv cmNlIGEgc2VwYXJhdGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2gg cmVsYXRpb24uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0 aGVyX21lcmdlKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRF UiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBk KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3Rf ZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZCBkL2QuZCkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYg Sk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsK KworLS0gRm9yY2UgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9uIG9uZSByZWxhdGlvbiBidXQg bm8gcGFyYWxsZWxpc20gb24gb3RoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0 X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNl IG5vIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgdXNlIGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdub19nYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIENhbid0 IGZvcmNlIEdhdGhlciBNZXJnZSB3aXRob3V0IHRoZSBPUkRFUiBCWSBjbGF1c2UsIGJ1dCBqdXN0 IEdhdGhlciBpcyBPSy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3Qg ZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjVhYTJmYzYyZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwKQEAgLTAsMCArMSw5NiBAQAorTE9BRCAncGdf cGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOwor CitDUkVBVEUgVEFCTEUgam9fZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0 LCB2YWwxIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQg SU5UTyBqb19kaW0xIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRl eHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7 CitWQUNVVU0gQU5BTFlaRSBqb19kaW0xOworQ1JFQVRFIFRBQkxFIGpvX2RpbTIgKGlkIGludGVn ZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJ U0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTI7CisKK0NS RUFURSBUQUJMRSBqb19mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRl Z2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBu b3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwg KGclMTAwKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgam9fZmFjdDsKKworLS0gV2UgZXhwZWN0IHRvIGpvaW4gdG8gZDIgZmlyc3QgYW5kIHRoZW4g ZDEsIHNpbmNlIHRoZSBjb25kaXRpb24gb24gZDIKKy0tIGlzIG1vcmUgc2VsZWN0aXZlLgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJ TEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9f ZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0g MTsKKworLS0gRm9yY2UgYSBmZXcgZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21lIG9mIHRoZXNl IGFyZSB2ZXJ5IGluZWZmaWNpZW50LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNpZGVycyB0aGVt IGFsbCB2aWFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn am9pbl9vcmRlcihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdqb2luX29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEgZiBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitD T01NSVQ7CisKKy0tIFRoZSB1bnVzdWFsIGZvcm11bGF0aW9uIG9mIHRoaXMgcXVlcnkgaXMgaW50 ZW5kZWQgdG8gcHJldmVudCB0aGUgcXVlcnkKKy0tIHBsYW5uZXIgZnJvbSByZWR1Y2luZyB0aGUg RlVMTCBKT0lOIHRvIHNvbWUgb3RoZXIgam9pbiB0eXBlLCBzbyB0aGF0IHdlCistLSBjYW4gdGVz dCB3aGF0IGhhcHBlbnMgd2l0aCBhIGpvaW4gdHlwZSB0aGF0IGNhbm5vdCBiZSByZW9yZGVyZWQu CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0x IGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGlt Ml9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lk IElTIE5VTEw7CisKKy0tIFdlIHNob3VsZCBub3QgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5l ciB0byBqb2luIGYgdG8gZDEgZmlyc3QsIGJlY2F1c2UKKy0tIHRoYXQgaXMgbm90IGEgdmFsaWQg am9pbiBvcmRlciwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIHRoZSBwbGFubmVyCist LSB0byBtYWtlIGVpdGhlciBkMiBvciBmIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CistLSBY WFg6IFRoZSBhZHZpY2UgZmVlZGJhY2sgc2F5cyAncGFydGlhbGx5IG1hdGNoZWQnIGhlcmUgd2hp Y2ggaXNuJ3QgZXhhY3RseQorLS0gd3JvbmcgZ2l2ZW4gdGhlIHdheSB0aGF0IGZsYWcgaXMgaGFu ZGxlZCBpbiB0aGUgY29kZSwgYnV0IGl0J3MgYXQgdGhlIHZlcnkKKy0tIGxlYXN0IGNvbmZ1c2lu Zy4gU29tZXRoaW5nIHNob3VsZCBwcm9iYWJseSBiZSBpbXByb3ZlZCBoZXJlLgorU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5F UiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9 IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0x IGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGlt Ml9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lk IElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIo ZDIgZiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBk MiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9S IGYuZGltMV9pZCBJUyBOVUxMOworQ09NTUlUOworCistLSBYWFg6IGFkZCB0ZXN0cyBmb3Igam9p biBvcmRlciBwcmVmaXggbWF0Y2hpbmcKKy0tIFhYWDogam9pbl9vcmRlcihqdXN0b25lcmVsKSBz aG91bGRuJ3QgcmVwb3J0IHBhcnRpYWxseSBtYXRjaGVkCmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi44ZWI4MjNmMWMwZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsCkBAIC0wLDAgKzEsNzYgQEAKK0xPQUQgJ3BnX3Bs YW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKwor Q1JFQVRFIFRBQkxFIGpvaW5fZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQor CVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZGlt IChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkg ZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZGltOworCitDUkVBVEUgVEFCTEUgam9pbl9mYWN0ICgK KwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNl cyBqb2luX2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIGpvaW5fZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIGpvaW5fZmFjdF9kaW1faWQgT04gam9pbl9m YWN0IChkaW1faWQpOworVkFDVVVNIEFOQUxZWkUgam9pbl9mYWN0OworCistLSBXZSBleHBlY3Qg YSBoYXNoIGpvaW4gYnkgZGVmYXVsdC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQg PSBkLmlkOworCistLSBUcnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBq b2luX2RpbSBhcyB0aGUgaW5uZXIgdGFibGUuCistLSBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsg ZXhjZXB0IGZvciBNRVJHRV9KT0lOX01BVEVSSUFMSVpFOyB0aGF0IHdpbGwKKy0tIGZhaWwsIGJl Y2F1c2UgdGhlIHBsYW5uZXIga25vd3MgdGhhdCBqb2luX2RpbSAoaWQpIGlzIHVuaXF1ZSwgYW5k IHdpbGwKKy0tIHJlZnVzZSB0byBhZGQgbWFyay9yZXN0b3JlIG92ZXJoZWFkLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTUVSR0VfSk9JTl9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUo ZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpv aW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBOb3cgdHJ5IGZv cmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9mYWN0IGFzIHRoZSBpbm5l cgorLS0gdGFibGUuIEFsbCBvZiB0aGVzZSBzaG91bGQgd29yay4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdF X0pPSU5fUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFM SVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGYpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gV2UgY2FuJ3QgZm9yY2UgYSBm b3JlaWduIGpvaW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsIGJlY2F1c2UgdGhleQorLS0gYXJlbid0 IGZvcmVpZ24gdGFibGVzLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0ZPUkVJR05fSk9JTigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9sb2NhbF9jb2xsZWN0b3Iuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxf Y29sbGVjdG9yLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmM4 MzhiMjIwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9s b2NhbF9jb2xsZWN0b3Iuc3FsCkBAIC0wLDAgKzEsNDEgQEAKK0NSRUFURSBFWFRFTlNJT04gcGdf cGxhbl9hZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKKy0tIFRyeSBj bGVhcmluZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBhbnkuCitTRUxFQ1QgcGdfY2xl YXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworCistLSBTZXQgYSBzbWFsbCBhZHZpY2UgY29s bGVjdGlvbiBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2VlZCBpdC4KK1NFVCBwZ19wbGFuX2Fkdmlj ZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKworLS0gU2V0IHVwIGEgZHVtbXkgdGFibGUu CitDUkVBVEUgVEFCTEUgZHVtbXlfdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UsIHBhcmFsbGVsX3dvcmtlcnMgPSAwKTsK KworLS0gVGVzdCBxdWVyaWVzLgorU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSBhLCBkdW1teV90 YWJsZSBiOworU0VMRUNUICogRlJPTSBkdW1teV90YWJsZTsKKworLS0gU2hvdWxkIHJldHVybiB0 aGUgYWR2aWNlIGZyb20gdGhlIHNlY29uZCB0ZXN0IHF1ZXJ5LgorU0VMRUNUIGFkdmljZSBGUk9N IHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAx OworCistLSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0 IHNvIHRoYXQgdGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19wbGFu X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKKworLS0gUHVzaCBhIGJ1bmNo IG9mIHF1ZXJpZXMgdGhyb3VnaCB0aGUgY29sbGVjdG9yLgorRE8gJCQKK0JFR0lOCisJRk9SIHgg SU4gMS4uMjAwMCBMT09QCisJCUVYRUNVVEUgJ1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGUnOwor CUVORCBMT09QOworRU5ECiskJDsKKworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtl ZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7 CisKKy0tIEFuZCBjbGVhciBvbmUgbW9yZSB0aW1lLCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNu J3QgY2F1c2UgYSBwcm9ibGVtCistLSBldmVuIHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIGVudHJp ZXMuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOwpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZGVhMzQ1YjNhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbApAQCAtMCwwICsxLDkxIEBA CitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiA9IHRydWU7CisKK0NSRUFU RSBUQUJMRSBwdDEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQp CisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQxYSBQQVJUSVRJT04g T0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWIgUEFSVElUSU9OIE9GIHB0MSBGT1Ig VkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFjIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBG Uk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitJTlNFUlQgSU5UTyBwdDEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxs ZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMw MDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDE7CisKK0NSRUFURSBUQUJMRSBwdDIgKGlkIGludGVn ZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdF IChpZCk7CitDUkVBVEUgVEFCTEUgcHQyYSBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJP TSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JF QVRFIFRBQkxFIHB0MmIgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRv ICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJM RSBwdDJjIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDIgKGlk LCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBvdGhlciB0ZXh0ICcgfHwgZywgKGcgJSA1 KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCwyKSBnOworVkFDVVVNIEFOQUxZ WkUgcHQyOworCitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0z IHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxF IHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBBUlRJ VElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04gT0Yg cHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlTRUxF Q1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CisKK0NSRUFU RSBUQUJMRSBwdG1pc21hdGNoIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW1tIHRleHQsIHZh bG0gaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0 Y2hhIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAo MTUwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHRtaXNtYXRjaGIgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00g KDE1MDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIHB0bWlzbWF0Y2ggKGlkLCBkaW1tLCB2YWxtKQorCVNFTEVDVCBnLCAneWV0IGFu b3RoZXIgdGV4dCAnIHx8IGcsIChnICUgMikgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdG1pc21hdGNoOworCitFWFBMQUlOIChQTEFOX0FE VklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5p ZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIg PSAxIEFORCB2YWwzID0gMTsKKworLS0gU3VwcHJlc3MgcGFydGl0aW9ud2lzZSBqb2luLCBvciBk byBpdCBqdXN0IHBhcnRpYWxseS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdQQVJUSVRJT05XSVNFKHB0MSBwdDIgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklD RSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9 IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAx IEFORCB2YWwzID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElU SU9OV0lTRSgocHQxIHB0MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQg cHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0g MTsKK0NPTU1JVDsKKworLS0gQ2FuJ3QgZm9yY2UgYSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aCBh IG1pc21hdGNoZWQgdGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSc7CitFWFBMQUlOIChQTEFOX0FE VklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0bWlzbWF0Y2ggV0hFUkUgcHQx LmlkID0gcHRtaXNtYXRjaC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2Ugam9pbiBvcmRlciBmb3Ig YSBwYXJ0aWN1bGFyIGJyYW5jaCBvZiB0aGUgcGFydGl0aW9ud2lzZSBqb2luIHdpdGgKKy0tIGFu ZCB3aXRob3V0IG1lbnRpb25pbmcgdGhlIHNjaGVtYSBuYW1lLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9w dWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlk IEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZh bDMgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0 My9wdDNhIHB0Mi9wdDJhIHB0MS9wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBB TkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwz ID0gMTsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3Nj YW4uc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI1NDE2YTc1ZjQ2Ci0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKQEAgLTAsMCArMSwxOTUgQEAK K0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0 aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0gMC4xOworU0VUIHJhbmRvbV9wYWdlX2Nvc3Qg PSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3QgPSAwOworU0VUIGNwdV9pbmRleF90dXBsZV9jb3N0 ID0gMDsKKworQ1JFQVRFIFRBQkxFIHNjYW5fdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRl eHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2Nh bl90YWJsZQorCVNFTEVDVCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggc2Nhbl90YWJsZV9iIE9OIHNjYW5fdGFibGUg VVNJTkcgYnJpbiAoYik7CitWQUNVVU0gQU5BTFlaRSBzY2FuX3RhYmxlOworCistLSBTZXF1ZW50 aWFsIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZTsKKworLS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBJbmRleC1v bmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUg YiA+ICdzb21lIHRleHQgOCc7CisKKy0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7 CisKKy0tIFRJRCByYW5nZSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8 ICcoMiwxKSc7CisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1 c2UgdGhlIHNjYW4gdHlwZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91 bGQgc3VjY2VlZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdT RVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICco MCwxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitDT01N SVQ7CisKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0aGUgdGFibGUgdG8gdXNlIHNv bWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdpbGwgZmFpbC4gQW4gaW5kZXgg c2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVudGlhbGx5CistLSBnZW5lcmF0ZSB0 aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2VzIG5vdCBldmVuIGNvbnNpZGVy IHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFjayBvZiBhIFdIRVJFIGNsYXVz ZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK0NPTU1JVDsKKworLS0gVHJ5 IGFnYWluIHRvIGZvcmNlIGluZGV4IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRo ZSBJTkRFWF9TQ0FOCistLSBhbmQgQklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZ X1NDQU4gY2FuJ3QgYmUgZm9yY2VkIGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVt bnMgbm90IGluY2x1ZGVkIGluIHRoZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA+IDA7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitDT01NSVQ7CisKKy0tIFdl IGNhbiBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFsIHNjYW4s IGJ1dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2NhbiAoZHVl IHRvIHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUgYWJzZW5j ZSBvZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFi bGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0t IFdlIGNhbiBmb3JjaWJseSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRvIGFuIGluZGV4 IHNjYW4sIGJ1dCB3ZSBjYW4ndAorLS0gZm9yY2UgdGhlIHVzZSBvZiBhbiBpbmRleCB0aGF0IHRo ZSBwbGFubmVyIHRoaW5rcyBpcyBpbmFwcGxpY2FibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFdlIGNh biBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0bWFw IGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4IGlz IG5vdCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNj YW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2Ug dGhlIHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiByYXRoZXIgdGhhbiBhIFRJRCBzY2FuIG9yCist LSBUSUQgcmFuZ2Ugc2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlX SEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitDT01NSVQ7CisKKy0tIFRl c3QgbW9yZSBjb21wbGV4IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNjYW5zLgorQkVHSU47CistLSBT aG91bGQgc3RpbGwgd29yayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hlbWEuCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBCdXQgbm90IGlmIHdlIG1lbnRpb24gdGhl IHdyb25nIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf U0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK Ky0tIEl0J3MgT0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBz Y2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0gQnV0IGl0IGRv ZXNuJ3Qgd29yayBpZiB0aGUgaW5kZXggdGFyZ2V0IGlzIGV2ZW4gbm90aW9uYWxseSBkaWZmZXJl bnQuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFk dmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB Tihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBi b2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9PTkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3Rh YmxlIGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxp dHkgdG8gcmVmZXIgdG8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGFsaWFzLgorQkVH SU47CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2Vu ZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4 CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBK T0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUg cyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBz LmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpIFNFUV9TQ0FOKHMjMiknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3Nl cmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExF RlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK0NPTU1JVDsKKworLS0gVGVzdCBvdXIg YWJpbGl0eSB0byByZWZlciB0byBzY2FucyB3aXRoaW4gYSBzdWJxdWVyeS4KK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVS RSBhID0gMSBPRkZTRVQgMCk7CitCRUdJTjsKKy0tIFNob3VsZCBub3QgbWF0Y2guCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBh ID0gMSBPRkZTRVQgMCk7CistLSBTaG91bGQgbWF0Y2ggZmlyc3QgcXVlcnkgb25seS4KK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B4KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hF UkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxkIG1hdGNoIHNlY29uZCBxdWVyeSBvbmx5Lgor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHVubmFtZWRfc3Vi cXVlcnkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CitDT01NSVQ7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNDI5ZjQ2Nzk4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9zeW50YXguc3FsCkBAIC0wLDAgKzEsNjEgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2 aWNlJzsKKworLS0gQW4gZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQuIEVtcHR5IHRhcmdldCBsaXN0 cyBhcmUgYWxsb3dlZCBmb3IgbW9zdCBhZHZpY2UKKy0tIHRhZ3MsIGJ1dCBub3QgZm9yIEpPSU5f T1JERVIuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyc7CitFWFBMQUlOIFNFTEVDVCAx OworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigpJzsKK0VYUExBSU4gU0VM RUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKCkn OworRVhQTEFJTiBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9P UkRFUigpJzsKKworLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25zIGluIGNhcGl0YWxpemF0aW9u LCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRoZSByZWxhdGlvbiBpZGVudGlm aWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgorU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitFWFBMQUlOIFNFTEVDVCAxOworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdzZXFfc2Nhbih4QHkpJzsKK0VYUExBSU4gU0VMRUNUIDE7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiBTRUxF Q1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOworRVhQ TEFJTiBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnICBTRVFfU0NBTiAo IHggLyB5IC4geiApICAnOworRVhQTEFJTiBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6IkAidCIpJzsKK0VYUExBSU4gU0VMRUNUIDE7 CisKKy0tIFN5bnRheCBlcnJvcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUVVF TlRJQUxfU0NBTih4KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOJzsK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oJzsKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKCIiKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJh Iic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCMnOworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICcoKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJzEy Myc7CisKKy0tIExlZ2FsIGNvbW1lbnRzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcv KiovJzsKK0VYUExBSU4gU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hB U0hfSk9JTihfKS8qKiovJzsKK0VYUExBSU4gU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiBTRUxF Q1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pP SU4oeS8vKngqL3opJzsKK0VYUExBSU4gU0VMRUNUIDE7CisKKy0tIFVudGVybWluYXRlZCBjb21t ZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyonOworU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKCJmT08iKSAvKiBvb3BzJzsKKworLS0gTmVzdGVkIGNv bW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGUgZmlyc3Qgb2YgdGhlc2UgaXMgbGVnYWwg YW5kCistLSB0aGUgc2Vjb25kIGlzIG5vdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn LyovKi8nOworRVhQTEFJTiBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn LyovKiBzdHVmZiAqLyovJzsKKworLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRpcGxlIHJl bGF0aW9uIGlkZW50aWZpZXJzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdO X0pPSU4oYSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEp KSc7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVmNzU4NGMzYTAyCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTQ3IEBA CisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorCisjIFJ1biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5f YWR2aWNlIHRvIGNoZWNrIGZvciBwcm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3Mg RkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2Ug RmlsZTo6QmFzZW5hbWUgcXcoZGlybmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMg SW5pdGlhbGl6ZSB0aGUgcHJpbWFyeSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRl c2lyZWQgY29uZmlndXJhdGlvbi4KKyMKKyMgV2UgcnVuIHdpdGggcGdfcGxhbl9hZHZpY2Uuc2hh cmVkX2NvbGxlY3Rpb25fbGltaXQgc2V0IHRvIGVuc3VyZSB0aGF0IHRoZQorIyBwbGFuIHRyZWUg d2Fsa2VyIGNvZGUgcnVucyBhZ2FpbnN0IGV2ZXJ5IHF1ZXJ5IGluIHRoZSByZWdyZXNzaW9uIHRl c3RzLiBJZgorIyB3ZSdyZSB1bmFibGUgdG8gcHJvcGVybHkgYW5hbHl6ZSBhbnkgb2YgdGhvc2Ug cGxhbiB0cmVlcywgdGhpcyB0ZXN0IHNob3VsZCBmYWlsLgorIworIyBXZSBzZXQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlIHRvIGFuIGFkdmljZSBzdHJpbmcgdGhhdCB3aWxsIGNhdXNlIHRoZSBhZHZp Y2UKKyMgdHJvdmUgdG8gYmUgcG9wdWxhdGVkIHdpdGggYSBmZXcgZW50cmllcyBvZiB2YXJpb3Vz IHNvcnRzLCBidXQgd2hpY2ggd2UgZG8KKyMgbm90IGV4cGVjdCB0byBtYXRjaCBhbnl0aGluZyBp biB0aGUgcmVncmVzc2lvbiB0ZXN0IHF1ZXJpZXMuIFRoaXMgd2F5LCB0aGUKKyMgcGxhbm5lciBo b29rcyB3aWxsIGJlIGNhbGxlZCwgaW1wcm92aW5nIGNvZGUgY292ZXJhZ2UsIGJ1dCBubyBwbGFu cyBzaG91bGQKKyMgYWN0dWFsbHkgY2hhbmdlLgorIworIyBwZ19wbGFuX2FkdmljZS5hbHdheXNf ZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U9ZmFsc2UgaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5n CisjIHJlZ3Jlc3Npb24gdGVzdCBxdWVyaWVzIHRoYXQgdXNlIEVYUExBSU4uIEluIHRoZSByZWFs IHdvcmxkLCBpdCBzZWVtcyBsaWtlCisjIHVzZXJzIHdpbGwgd2FudCBFWFBMQUlOIG91dHB1dCB0 byBzaG93IHN1cHBsaWVkIGFkdmljZSBzbyB0aGF0IGl0J3MgY2xlYXIKKyMgd2hldGhlciBub3Jt YWwgcGxhbm5lciBiZWhhdmlvciBoYXMgYmVlbiBhbHRlcmVkLCBidXQgaGVyZSB0aGF0J3MgdW5k ZXNpcmFibGUuCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIDw8RU9NKTsK K3BnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTEwMDAwMDAKK3NoYXJlZF9w cmVsb2FkX2xpYnJhcmllcz1wZ19wbGFuX2FkdmljZQorcGdfcGxhbl9hZHZpY2UuYWR2aWNlPSdT RVFfU0NBTihlbnRpcmVseV9maWN0aXRpb3VzKSBIQVNIX0pPSU4odG90YWxfZmFicmljYXRpb24p IEdBVEhFUihjb21wbGV0ZWx5X2ltYWdpbmFyeSknCitwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhw bGFpbl9zdXBwbGllZF9hZHZpY2U9ZmFsc2UKK0VPTQorJG5vZGUtPnN0YXJ0OworCitteSAkc3Jj ZGlyID0gYWJzX3BhdGgoIi4uLy4uIik7CisKKyMgLS1kbHBhdGggaXMgbmVlZGVkIHRvIGJlIGFi bGUgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgcmVncmVzcy5zbworIyBhbmQgYW55IGxpYnJhcmll cyB0aGUgcmVncmVzc2lvbiB0ZXN0cyByZXF1aXJlLgorbXkgJGRscGF0aCA9IGRpcm5hbWUoJEVO VntSRUdSRVNTX1NITElCfSk7CisKKyMgLS1vdXRwdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIHdo ZXJlIHRvIHBsYWNlIHRoZSBvdXRwdXQgZmlsZXMuCitteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisKKyMgLS1pbnB1dGRpciBwb2ludHMgdG8gdGhl IHBhdGggb2YgdGhlIGlucHV0IGZpbGVzLgorbXkgJGlucHV0ZGlyID0gIiRzcmNkaXIvc3JjL3Rl c3QvcmVncmVzcyI7CisKKyMgUnVuIHRoZSB0ZXN0cy4KK215ICRyYyA9CisgIHN5c3RlbSgkRU5W e1BHX1JFR1JFU1N9IC4gIiAiCisJICAuICItLWJpbmRpcj0gIgorCSAgLiAiLS1kbHBhdGg9XCIk ZGxwYXRoXCIgIgorCSAgLiAiLS1ob3N0PSIgLiAkbm9kZS0+aG9zdCAuICIgIgorCSAgLiAiLS1w b3J0PSIgLiAkbm9kZS0+cG9ydCAuICIgIgorCSAgLiAiLS1zY2hlZHVsZT0kc3JjZGlyL3NyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgIgorCSAgLiAiLS1tYXgtY29uY3VycmVudC10 ZXN0cz0yMCAiCisJICAuICItLWlucHV0ZGlyPVwiJGlucHV0ZGlyXCIgIgorCSAgLiAiLS1vdXRw dXRkaXI9XCIkb3V0cHV0ZGlyXCIiKTsKKworIyBEdW1wIG91dCB0aGUgcmVncmVzc2lvbiBkaWZm cyBmaWxlLCBpZiB0aGVyZSBpcyBvbmUKK2lmICgkcmMgIT0gMCkKK3sKKwlteSAkZGlmZnMgPSAi JG91dHB1dGRpci9yZWdyZXNzaW9uLmRpZmZzIjsKKwlpZiAoLWUgJGRpZmZzKQorCXsKKwkJcHJp bnQgIj09PSBkdW1waW5nICRkaWZmcyA9PT1cbiI7CisJCXByaW50IHNsdXJwX2ZpbGUoJGRpZmZz KTsKKwkJcHJpbnQgIj09PSBFT0YgPT09XG4iOworCX0KK30KKworIyBSZXBvcnQgcmVzdWx0cwor aXMoJHJjLCAwLCAncmVncmVzc2lvbiB0ZXN0cyBwYXNzJyk7CisKKyMgQ3JlYXRlIHRoZSBleHRl bnNpb24gc28gd2UgY2FuIGFjY2VzcyB0aGUgY29sbGVjdG9yCiskbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlJyk7CisKKyMgVmVyaWZ5 IHRoYXQgYSBsYXJnZSBhbW91bnQgb2YgYWR2aWNlIHdhcyBjb2xsZWN0ZWQKK215ICRhbGxfcXVl cnlfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBD T1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9NCitjbXBf b2soJGFsbF9xdWVyeV9jb3VudCwgJz4nLCAyMDAwMCwgImNvcGlvdXMgYWR2aWNlIGNvbGxlY3Rl ZCIpOworCisjIFZlcmlmeSB0aGF0IGxvdHMgb2YgZGlmZmVyZW50IGFkdmljZSBzdHJpbmdzIHdl cmUgY29sbGVjdGVkCitteSAkZGlzdGluY3RfcXVlcnlfY291bnQgPSAkbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NCisJKFNFTEVDVCBESVNU SU5DVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSk7CitFT00K K2NtcF9vaygkZGlzdGluY3RfcXVlcnlfY291bnQsICc+JywgMzAwMCwgImRpdmVyc2UgYWR2aWNl IGNvbGxlY3RlZCIpOworCisjIFdlIHdhbnQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIG91 ciBrbm93biB0YWdzIGluIHRoZSBjb2xsZWN0ZWQgYWR2aWNlLgorIyBQdXQgYWxsIHRhZ3MgaW50 byB0aGUgaGFzaCB0aGF0IGZvbGxvd3M7IG1hcCBhbnkgdGFncyB0aGF0IGFyZW4ndCB0ZXN0ZWQK KyMgYnkgdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyB0byAwLCBhbmQgb3RoZXJzIHRvIDEuCitt eSAldGFnX21hcCA9ICgKKwlCSVRNQVBfSEVBUF9TQ0FOID0+IDEsCisJRk9SRUlHTl9KT0lOID0+ IDAsCisJR0FUSEVSID0+IDEsCisJR0FUSEVSX01FUkdFID0+IDEsCisJSEFTSF9KT0lOID0+IDEs CisJSU5ERVhfT05MWV9TQ0FOID0+IDEsCisJSU5ERVhfU0NBTiA9PiAxLAorCUpPSU5fT1JERVIg PT4gMSwKKwlNRVJHRV9KT0lOX01BVEVSSUFMSVpFID0+IDEsCisJTUVSR0VfSk9JTl9QTEFJTiA9 PiAxLAorCU5FU1RFRF9MT09QX01BVEVSSUFMSVpFID0+IDEsCisJTkVTVEVEX0xPT1BfTUVNT0la RSA9PiAxLAorCU5FU1RFRF9MT09QX1BMQUlOID0+IDEsCisJTk9fR0FUSEVSID0+IDEsCisJUEFS VElUSU9OV0lTRSA9PiAxLAorCVNFTUlKT0lOX05PTl9VTklRVUUgPT4gMSwKKwlTRU1JSk9JTl9V TklRVUUgPT4gMSwKKwlTRVFfU0NBTiA9PiAxLAorCVRJRF9TQ0FOID0+IDEsCispOworZm9yIG15 ICR0YWcgKHNvcnQga2V5cyAldGFnX21hcCkKK3sKKwlteSAkY2hlY2tpdCA9ICR0YWdfbWFweyR0 YWd9OworCisJIyBTZWFyY2ggZm9yIHRoZSBnaXZlbiB0YWcuIFRoaXMgaXMgbm90IGVudGlyZWx5 IHJvYnVzdDogaXQgY291bGQgZ2V0IHRocm93bgorCSMgb2ZmIGJ5IGEgdGFibGUgYWxpYXMgc3Vj aCBhcyAiRk9SRUlHTl9KT0lOKCIsIGJ1dCB0aGF0IHByb2JhYmx5IHdvbid0CisJIyBoYXBwZW4g aW4gdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cy4KKwlteSAkdGFnX2NvdW50ID0gJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRf Y29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKQorCVdIRVJFIGFkdmljZSBMSUtFICclJHRhZyglJwor RU9NCisKKwkjIENoZWNrIHRoYXQgdGhlIHRhZyBnb3QgYSBub24tdHJpdmlhbCBhbW91bnQgb2Yg dXNlLCB1bmxlc3MgdG9sZCBvdGhlcndpc2UuCisJY21wX29rKCR0YWdfY291bnQsICc+JywgMTAs ICJtdWx0aXBsZSB1c2VzIG9mICR0YWciKSBpZiAkY2hlY2tpdDsKKworCSMgUmVnYXJkbGVzcywg bm90ZSB0aGUgZXhhY3QgY291bnQgaW4gdGhlIGxvZywgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLgor CW5vdGUoImZvdW5kICR0YWdfY291bnQgYWR2aWNlIHN0cmluZ3MgY29udGFpbmluZyAkdGFnIik7 Cit9CisKKyMgVHJpZ2dlciBhIHBhcnRpYWwgY2xlYW51cCBvZiB0aGUgc2hhcmVkIGFkdmljZSBj b2xsZWN0b3IsIGFuZCB0aGVuIGEgZnVsbAorIyBjbGVhbnVwLgorJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCA8PEVPTSk7CitTRVQgcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25f bGltaXQ9NTAwOworU0VMRUNUICogRlJPTSBwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZSgpOworRU9NCisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCAyODZkOTRiMDc3OS4uMzgzODJiNGM5MWQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBA IC0zOTY3LDYgKzM5NjcsNDQgQEAgcGdfdXVpZF90CiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBw Z3BfYXJtb3JfaGVhZGVyc19zdGF0ZQorcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ3BhX2Fkdmlj ZV9pdGVtCitwZ3BhX2FkdmljZV90YWdfdHlwZQorcGdwYV9hZHZpY2VfdGFyZ2V0CitwZ3BhX2lk ZW50aWZpZXIKK3BncGFfaW5kZXhfdGFyZ2V0CitwZ3BhX2luZGV4X3R5cGUKK3BncGFfaXRtX3R5 cGUKK3BncGFfam9pbl9jbGFzcworcGdwYV9qb2luX21lbWJlcgorcGdwYV9qb2luX3N0YXRlCitw Z3BhX2pvaW5fc3RyYXRlZ3kKK3BncGFfam9pbl91bnJvbGxlcgorcGdwYV9sb2NhbF9hZHZpY2UK K3BncGFfbG9jYWxfYWR2aWNlX2NodW5rCitwZ3BhX291dHB1dF9jb250ZXh0CitwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQKK3BncGFfcGxhbm5lcl9zdGF0ZQorcGdwYV9xZl90eXBlCitwZ3BhX3F1 ZXJ5X2ZlYXR1cmUKK3BncGFfcmlfY2hlY2tlcgorcGdwYV9yaV9jaGVja2VyX2tleQorcGdwYV9z Y2FuCitwZ3BhX3NjYW5fc3RyYXRlZ3kKK3BncGFfc2hhcmVkX2FkdmljZQorcGdwYV9zaGFyZWRf YWR2aWNlX2NodW5rCitwZ3BhX3NoYXJlZF9zdGF0ZQorcGdwYV9zal91bmlxdWVfcmVsCitwZ3Bh X3RhcmdldF90eXBlCitwZ3BhX3Ryb3ZlCitwZ3BhX3Ryb3ZlX2VudHJ5CitwZ3BhX3Ryb3ZlX2Vu dHJ5X2VsZW1lbnQKK3BncGFfdHJvdmVfZW50cnlfaGFzaAorcGdwYV90cm92ZV9lbnRyeV9rZXkK K3BncGFfdHJvdmVfbG9va3VwX3R5cGUKK3BncGFfdHJvdmVfcmVzdWx0CitwZ3BhX3Ryb3ZlX3Ns aWNlCitwZ3BhX3Vucm9sbGVkX2pvaW4KIHBnc29ja2V0CiBwZ3NxbF90aGluZ190CiBwZ3NzRW50 cnkKLS0gCjIuNTEuMAoK --0000000000006c6cda064833ff55--