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.94.2) (envelope-from ) id 1tViV0-00Ap5Y-Df for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jan 2025 02:42:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tViUy-00AO9P-JL for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jan 2025 02:42:16 +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.94.2) (envelope-from ) id 1tViUx-00AO5U-RL for pgsql-hackers@lists.postgresql.org; Thu, 09 Jan 2025 02:42:15 +0000 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tViUu-000cyS-2Y for pgsql-hackers@postgresql.org; Thu, 09 Jan 2025 02:42:14 +0000 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-43618283d48so3532435e9.1 for ; Wed, 08 Jan 2025 18:42:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736390532; x=1736995332; darn=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=5C0Lc7AJ0stqzy7HqmVeOwFXrkAAoZgCZXZUKw6jtaY=; b=DmKgmt+0OJA8mDpHZ/sc8A2fO5SNv/PM1TWylSjoJMK5WNRyoEOyVXTjKS4Tm+ZTRI hUW+2F8CukokJzDNZRNOXa9UuudjB6hYhrS2NdLbJQVHUWj+8aVYsGFa96oLLyCv/1cz 8ENmBPnH82VlLvMjpw6Fa7SqZwQwj2g4bdOybdVpHU/cvEMYD+6pbhpRHcU2ZpqLm6Rn 6VbmzlBJo/iNPzqu7ZjnreawJCBhujdWonlsiImYV4bffkX3464pnMSTYTXHfqZnjcdy jx3DOrbv2xkMCdUWEgXn+16xw6aKscPeZsqTacFi13yObI3yRve6ZYTG3MMrAno8qvbB dkmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736390532; x=1736995332; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=5C0Lc7AJ0stqzy7HqmVeOwFXrkAAoZgCZXZUKw6jtaY=; b=skSJBy1acZHY9aX7SZ8szHY/G0R4Jcz0Ir4nmvCG1+JfOniHp5GlTAXAxtVmTjCi7U SN4I8AGzcxpffWeBRtjPbRqu8vhF6/2MlDQPU3Yr+/FXtmUgX7f2VWSflzqz+EkM8Xgr Lu6hbApr0LBsxvgU4L5y5p+obC+RYm9X0QsdN/X8NRwgRncO6MR3K3JZPM2t7AdF3zbZ mA9CCKO00k3UBNs1aqUxPbZOEgacYXtXhzDPjMA0rFTTAdcIoUU46s0XJ9GAzdaNEju4 mebAaUxe8MyuUTlwtENxWfHVCDgsCB6CxjWGgEg02LN93JUhLqCU+RuPNBXjaa/KV6JE 2zdQ== X-Forwarded-Encrypted: i=1; AJvYcCX6OQNE5MR4SVKXoa2CPmfWoF2gqNfdkAueZPXQmMwPRNTUNJZVZrQS/dUNGNM6+yk1+RGpLxEwDSlyH3TD@postgresql.org X-Gm-Message-State: AOJu0Yw+ArusR3iMPexNZGSg4tWkNekmwZ3cr6e6xrJRHtXw24T1vCb7 t3FdHVtvS6UJIEx2eLntp3OrhqeZ41MvF+fRYZyfVUoilPU5dzifGI/7DGh5Fkmv+dONyqRJG+p aR3KdpY9QrmcOOhV1FjfFNIzTdf8= X-Gm-Gg: ASbGncseRZ5V3kxv9DQKhFkZAtRZDH0BE+isI8iCZh7BDzMknpBxLsV7duH0nyr88NX G5Z+6otF0BV6W0uepG/3lZywm1cH48lpiDnqIXUB1YHq1Vx7wJQD9NGQOy44PhQBSQoEN/4RA X-Google-Smtp-Source: AGHT+IEWl73P5M/InffZIKleLOWA2FyNaVnBVBzebTKCCZvzc3RZZVY+4ONx4EiLtxmh9/d89Zo1n4NNA4LUmnNntGg= X-Received: by 2002:a05:600c:3543:b0:434:f767:68ea with SMTP id 5b1f17b1804b1-436e2677c7dmr41689135e9.5.1736390531568; Wed, 08 Jan 2025 18:42:11 -0800 (PST) MIME-Version: 1.0 References: <740696.1718036463@sss.pgh.pa.us> In-Reply-To: From: Mahendra Singh Thalor Date: Thu, 9 Jan 2025 08:11:59 +0530 X-Gm-Features: AbW1kvbK0q-iZbxrjxqKX4-45SMhJ_quI7KU9tJLfIILk2PGipYfkgTwUBcQh5M Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Guillaume Lelarge Cc: Nathan Bossart , Magnus Hagander , Tom Lane , Andrew Dunstan , PostgreSQL-development , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000d37318062b3cec2e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d37318062b3cec2e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 9 Jan 2025 at 02:30, Guillaume Lelarge wro= te: > > Hi, > > Le mer. 8 janv. 2025 =C3=A0 17:41, Mahendra Singh Thalor a =C3=A9crit : >> >> On Wed, 8 Jan 2025 at 20:07, Mahendra Singh Thalor = wrote: >> > >> > Hi all, >> > >> > On Wed, 8 Jan 2025 at 00:34, Mahendra Singh Thalor wrote: >> > > >> > > On Mon, 6 Jan 2025 at 23:05, Nathan Bossart wrote: >> > > > >> > > > On Thu, Jan 02, 2025 at 02:05:13AM +0530, Mahendra Singh Thalor wr= ote: >> > > > > Here, I am attaching an updated patch. I fixed some bugs of v01 = patch and >> > > > > did some code cleanup also. >> > > > >> > > > Thank you for picking this up! I started to review it, but the >> > > > documentation changes didn't build, and a few tests in check-world= are >> > > > failing. Would you mind resolving those issues? Also, if you hav= en't >> > > > already, please add an entry to the next commitfest [0] to ensure = that 1) >> > > > this feature is tracked and 2) the automated tests will run. >> > > >> > > Thanks Nathan for the quick response. >> > > >> > > I fixed bugs of documentation changes and check-world in the latest = patch. Now docs are building and check-world is passing. >> > > >> > > I added entry into commitfest for this patch.[0] >> > > >> > > > >> > > > + if (dbfile) >> > > > + { >> > > > + printfPQExpBuffer(&cmd, "\"%s\" %s %s", pg_dump_bi= n, >> > > > + dbfile, create_o= pts); >> > > > + appendPQExpBufferStr(&cmd, " -F d "); >> > > > + } >> > > > >> > > > Have you given any thought to allowing a directory of custom forma= t files, >> > > > as discussed upthread [1]? Perhaps that is better handled as a fo= llow-up >> > > > patch, but it'd be good to understand the plan, anyway. >> > > >> > > I will make these changes and will test. I will update my findings a= fter doing some testing. >> > >> > In the latest patch, I added dump and restoring for directory/custom/t= ar/plain formats. Please consider this patch for review and testing. >> > >> > Design: >> > When we give --format=3Dd|c|t then we are dumping all global sql comma= nds in global.dat in plain sql format and we are making a map.dat file with= dbname and dboid. For each database, we are making separate subdirectory w= ith dboid under databases directory and dumping as per archive format(d|c|t= ). >> > While restoring, first we are restoring all global sql commands from g= lobal.dat and then we are restoring one by one all databases. As we are su= pporting --exclude-database with pg_dumpall, the same we are supporting wit= h pg_restore also to skip restoring on some specified database patterns. >> > If we want to restore a single database, then we can specided particul= ar subdirectory from the databases folder. To get file name, we refer dbnam= e into map.file. >> > >> > TODO: Now I will work on test cases for these new added options to the= pg_dumpall and pg_restore. >> > >> > Here, I am attaching the v04 patch for testing and review. >> >> Sorry. My mistake. >> v04 was the delta patch on the top of v03. >> >> Here, I am attaching the v05 patch for testing and review. >> > > Just FWIW, I did a quick test tonight. It applies cleanly, compiles OK. I= did a dump: Thanks for testing and review. > > $ pg_dumpall -Fd -f dir > > and then a restore (after dropping the databases I had): > > $ pg_restore -Cd postgres -v dir > > It worked really well. That's great. > > Quick thing to fix: you've got this error message: > pg_restore: error: -d/--dbanme should be given when using archive dump o= f pg_dumpall > > I guess it is --dbname, rather than --dbanme. Fixed. > > Of course, it needs much more testing, but this feature would be great to= have. Thanks for working on this! > > Apart from above typo, I fixed some review comments those I received from Andrew in offline discussion. Thanks Andrew for the quick review. Here, I am attaching an updated patch for review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000d37318062b3cec2e Content-Type: application/octet-stream; name="v06_pg_dumpall-with-directory-tar-custom-format-08-jan.patch" Content-Disposition: attachment; filename="v06_pg_dumpall-with-directory-tar-custom-format-08-jan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5oq1jv80 RnJvbSA0ODYzYzRjMTkyMDI5MDc1MmZmZjllMjE3YmM2NWExZGZlYmViMmY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCA5IEphbiAyMDI1IDA4OjA0OjA1ICswNTMwClN1YmplY3Q6IFtQQVRD SF0gcGdfZHVtcGFsbCB3aXRoIGRpcmVjdG9yeXx0YXJ8Y3VzdG9tIGZvcm1hdCBhbmQgcmVzdG9y ZSAgaXQgCiBieSBwZ19yZXN0b3JlCgpuZXcgb3B0aW9uIHRvIHBnX2R1bXBhbGw6Ci1GLCAtLWZv cm1hdD1kfHR8Y3xwICBvdXRwdXQgZmlsZSBmb3JtYXQgKCBwbGFpbiB0ZXh0IChkZWZhdWx0KSkK CkV4OjEgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtLWZpbGU9ZHVtcERpck5hbWUK RXg6MiAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDozIC4v cGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20gLS1maWxlPWR1bXBEaXJOYW1lCkV4OjQgLi9wZ19k dW1wYWxsIC0tZm9ybWF0PXBsYWluIC0tZmlsZT1kdW1wRGlyTmFtZQoKZHVtcHMgYXJlIGFzOgpn bG9iYWwuZGF0IDo6OiBnbG9iYWwgc3FsIGNvbW1hbmRzIGluIHNpbXBsZSBwbGFpbiBmb3JtYXQK bWFwLmRhdC4gICA6OjogZGJvaWQgZGJuYW1lIC0tLWVudHJpZXMgZm9yIGFsbCBkYXRhYmFzZXMg aW4gc2ltcGxlIHRleHQgZm9ybQpkYXRhYmFzZXMuIDo6OgogICAgICBzdWJkaXIgICAgIGRib2lk MSAgLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAgICBzdWJk aXIgICAgIGRib2lkMi4gLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1h dAogICAgICAgICAgICAgIGV0YwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTk9URToKaWYgbmVlZGVkLCBy ZXN0b3JlIHNpbmdsZSBkYiBieSBwYXJ0aWN1bGFyIHN1YmRpcgoKRXg6IC4vcGdfcmVzdG9yZSAt LWZvcm1hdD1kaXJlY3RvcnkgLWQgcG9zdGdyZXMgZHVtcERpck5hbWUvZGF0YWJhc2VzLzUKICAg LS0gaGVyZSwgNSBpcyB0aGUgZGJvaWQgb2YgcG9zdGdyZXMgZGIKICAgLS0gdG8gZ2V0IGRib2lk LCByZWZlciBkYm5hbWUgaW4gbWFwLmZpbGUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5ldyBvcHRpb25z IHRvIHBnX3Jlc3RvcmU6Ci1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5 IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXMKLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4g ICBleGNsdWRlIGRhdGFiYXNlIHdob3NlIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuCgpXaGVuIHdlIGdp dmUgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uLCB0aGVuIG9ubHkgcmVzdG9yZSBnbG9iYWxzLCBu byBkYiByZXN0b3JpbmcuCgpEZXNpZ246CldoZW4gLS1mb3JtYXQ9ZHx0fGMgaXMgc3BlY2lmaWVk IGFuZCB0aGVyZSBpcyBubyB0b2MuZGF0IGluIG1haW4gZGlyZWN0b3J5LCB0aGVuIGNoZWNrCmZv ciBnbG9iYWwuZGF0IGFuZCBtYXAuZGF0IHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gSWYgYm90 aCBmaWxlcyBhcmUgZXhpc3RzIGluIGRpcmVjdG9yeSwKdGhlbiBmaXJzdCByZXN0b3JlIGFsbCBn bG9iYWxzIGZyb20gZ2xvYmFsLmRhdCBhbmQgdGhlbiByZXN0b3JlIGFsbCBkYXRhYmFzZXMgb25l IGJ5IG9uZQpmcm9tIG1hcC5kYXQgbGlzdC4KClRPRE8xOiB0ZXN0IGNhc2VzIGZvciBuZXcgYWRk ZWQgb3B0aW9ucy4KClRPRE8yOiBXZSBjYW4gZHVtcCBhbmQgcmVzdG9yZSBkYXRhYmFzZXMgaW4g cGFyYWxsZWwgbW9kZS4KVGhpcyBuZWVkcyBtb3JlIHN0dWR5LgotLS0KIGRvYy9zcmMvc2dtbC9y ZWYvcGdfZHVtcGFsbC5zZ21sICAgICB8ICA2NyArKwogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0 b3JlLnNnbWwgICAgIHwgIDMwICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCAgICAgICAg ICB8ICAgNCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgIDE1ICst CiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgfCAgIDIgKy0KIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXBhbGwuYyAgICAgICAgIHwgMTcxICsrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3Rv cmUuYyAgICAgICAgIHwgODc1ICsrKysrKysrKysrKysrKysrKysrKysrKysrLQogOCBmaWxlcyBj aGFuZ2VkLCAxMTI0IGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wYWxsLnNnbWwKaW5kZXggMDE0ZjI3OTI1OC4uNzdhOGQ2YTBjNSAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wYWxsLnNnbWwKQEAgLTEyNSw2ICsxMjUsNzMgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorPHZhcmxpc3RlbnRy eT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LUYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlv bj4tLWZvcm1hdD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNl YWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIFNwZWNpZnkgZm9ybWF0IG9mIGR1bXAgZmlsZXMuICBJZiB3ZSB3YW50IHRvIGR1bXAg YWxsIHRoZSBkYXRhYmFzZXMsCisgICAgICAgIHRoZW4gcGFzcyB0aGlzIGFzIGRpcmVjdG9yeSBz byB0aGF0IGR1bXAgb2YgYWxsIGRhdGFiYXNlcyBjYW4gYmUgdGFrZW4KKyAgICAgICAgaW4gc2Vw YXJhdGUgc3ViZGlyZWN0b3J5IGluIGFyY2hpdmUgZm9ybWF0LgorICAgICAgICBieSBkZWZhdWx0 LCB0aGlzIGlzIHBsYWluLgorCisgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJtPgorICAg ICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgZGlyZWN0 b3J5LWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRo aXMgd2lsbCBjcmVhdGUgYSBkaXJlY3RvcnkKKyAgICAgICAgICAgd2l0aCBvbmUgZmlsZSBmb3Ig ZWFjaCB0YWJsZSBhbmQgbGFyZ2Ugb2JqZWN0IGJlaW5nIGR1bXBlZCwgcGx1cyBhIHNvLWNhbGxl ZCBUYWJsZSBvZiBDb250ZW50cworICAgICAgICAgICBmaWxlIGRlc2NyaWJpbmcgdGhlIGR1bXBl ZCBvYmplY3RzIGluIGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgdGhhdCBwZ19yZXN0b3JlIGNh biByZWFkLiBBCisgICAgICAgICAgIGRpcmVjdG9yeSBmb3JtYXQgYXJjaGl2ZSBjYW4gYmUgbWFu aXB1bGF0ZWQgd2l0aCBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmlsZXMgaW4g YW4KKyAgICAgICAgICAgdW5jb21wcmVzc2VkIGFyY2hpdmUgY2FuIGJlIGNvbXByZXNzZWQgd2l0 aCB0aGUgZ3ppcCwgbHo0LCBvciB6c3RkIHRvb2xzLiBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2Vk CisgICAgICAgICAgIGJ5IGRlZmF1bHQgdXNpbmcgZ3ppcCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJh bGxlbCBkdW1wcy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJh bD5wbGFpbjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0 aGUgZGVmYXVsdCkuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+Y3VzdG9tPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIHN1aXRh YmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAg ICAgIGRpcmVjdG9yeSBvdXRwdXQgZm9ybWF0LCB0aGlzIGlzIHRoZSBtb3N0IGZsZXhpYmxlIG91 dHB1dCBmb3JtYXQgaW4gdGhhdCBpdCBhbGxvd3MgbWFudWFsCisgICAgICAgICAgIHNlbGVjdGlv biBhbmQgcmVvcmRlcmluZyBvZiBhcmNoaXZlZCBpdGVtcyBkdXJpbmcgcmVzdG9yZS4gVGhpcyBm b3JtYXQgaXMgYWxzbworICAgICAgICAgICBjb21wcmVzc2VkIGJ5IGRlZmF1bHQuCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rl cm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91 dHB1dCBhIHRhci1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0 b3JlLiBUaGUgdGFyIGZvcm1hdCBpcworICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGRp cmVjdG9yeSBmb3JtYXQ6IGV4dHJhY3RpbmcgYSB0YXItZm9ybWF0IGFyY2hpdmUgcHJvZHVjZXMg YSB2YWxpZAorICAgICAgICAgICBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmUuIEhvd2V2ZXIsIHRo ZSB0YXIgZm9ybWF0IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24uIEFsc28sCisgICAgICAg ICAgIHdoZW4gdXNpbmcgdGFyIGZvcm1hdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGFibGUgZGF0 YSBpdGVtcyBjYW5ub3QgYmUgY2hhbmdlZCBkdXJpbmcgcmVzdG9yZS4KKyAgICAgICAgICA8L3Bh cmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4K KyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJt PjxvcHRpb24+LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZpbGVuYW1l PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYv cGdfcmVzdG9yZS5zZ21sCmluZGV4IGI4YjI3ZTE3MTkuLmFiMmUwMzU2NzEgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYv cGdfcmVzdG9yZS5zZ21sCkBAIC0zMTUsNiArMzE1LDE2IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAg ICA8dGVybT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVj dHMgKHJvbGVzIGFuZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlz dGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxv cHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxh Y2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KQEAgLTkzMiw2ICs5NDIsMjYgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJh c2U9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwv b3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg RG8gbm90IHJlc3RvcmUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAg ICBNdWx0aXBsZSBwYXR0ZXJucyBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQor ICAgICAgICA8b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4gIFRo ZQorICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFj ZWFibGU+IHBhcmFtZXRlciBpcworICAgICAgICBpbnRlcnByZXRlZCBhcyBhIHBhdHRlcm4gYWNj b3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBz cWw8L2FwcGxpY2F0aW9uPidzIDxsaXRlcmFsPlxkPC9saXRlcmFsPgorICAgICAgICBjb21tYW5k cyAoc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIi8+KSwKKyAgICAgICAgc28g bXVsdGlwbGUgZGF0YWJhc2VzIGNhbiBhbHNvIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgd2lsZGNh cmQKKyAgICAgICAgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNh cmRzLCBiZSBjYXJlZnVsIHRvCisgICAgICAgIHF1b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0 byBwcmV2ZW50IHNoZWxsIHdpbGRjYXJkIGV4cGFuc2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAg ICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworCiAgICAgPC92YXJpYWJsZWxp c3Q+CiAgICA8L3BhcmE+CiAgPC9yZWZzZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAppbmRleCBmMGYxOWJi MGIyLi42NTAwMGU1YTA4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCkBAIC0zMDYsNyArMzA2LDcgQEAgZXh0 ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlvbnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0 LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAogZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3Jl T3B0aW9ucyhBcmNoaXZlICpBSFgpOwogCi1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNo aXZlICpBSFgpOworZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29s IGFwcGVuZF9kYXRhKTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZlICovCiBleHRlcm4g QXJjaGl2ZSAqT3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVG b3JtYXQgZm10KTsKQEAgLTMxOSw3ICszMTksNyBAQCBleHRlcm4gQXJjaGl2ZSAqQ3JlYXRlQXJj aGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJCQkJ CQkJICBEYXRhRGlyU3luY01ldGhvZCBzeW5jX21ldGhvZCk7CiAKIC8qIFRoZSAtLWxpc3Qgb3B0 aW9uICovCi1leHRlcm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKTsKK2V4dGVy biB2b2lkIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpOwog CiBleHRlcm4gUmVzdG9yZU9wdGlvbnMgKk5ld1Jlc3RvcmVPcHRpb25zKHZvaWQpOwogCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggNzA3YTNmYzg0NC4uNzE1M2Q0YTQwYiAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODIsNyArODIsNyBAQCBzdGF0 aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVt cF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2 b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0J CQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsK KwkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywgYm9v bCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFy Y2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0zMzMsNyArMzMz LDcgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpCiAKIC8qIFB1 YmxpYyAqLwogdm9pZAotUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hp dmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUgKkFI ID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1 YmxpYy5yb3B0OwpAQCAtNDUwLDcgKzQ1MCw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUgfHwg cm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkK LQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYyk7 CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMs IGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJh c2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTEyNjMsNyArMTI2Myw3IEBAIEFyY2hpdmVFbnRyeShB cmNoaXZlICpBSFgsIENhdGFsb2dJZCBjYXRhbG9nSWQsIER1bXBJZCBkdW1wSWQsCiAKIC8qIFB1 YmxpYyAqLwogdm9pZAotUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKK1ByaW50VE9DU3Vt bWFyeShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQXJjaGl2ZUhhbmRsZSAq QUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+ cHVibGljLnJvcHQ7CkBAIC0xMjc5LDcgKzEyNzksNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2 ZSAqQUhYKQogCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQot CQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7CisJ CVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjLCBhcHBl bmRfZGF0YSk7CiAKIAlpZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwg UEdEVU1QX1NUUkZUSU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09 IDApCkBAIC0xNjU4LDcgKzE2NTgsOCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBj aGFyICpmbXQsLi4uKQogCiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI LCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQ29tcHJlc3NG aWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE2NzgsNyArMTY3OSw3IEBA IFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJZWxz ZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBw ZW5kKQorCWlmIChhcHBlbmRfZGF0YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKIAkJ bW9kZSA9IFBHX0JJTkFSWV9BOwogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfdGFyLmMKaW5kZXggYjViYTNiNDZkZC4uZDk0ZDBkZTJhNSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFu ZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJQUgtPnB1Ymxp Yy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCk7CisJCVJl c3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlv bnMoKEFyY2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA4 ZjczYTVkZjk1Li5lYWU2MjZmNjIxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTExNDcsNyArMTE0Nyw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5vdy4KIAkgKi8KIAlpZiAo cGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9yZUFyY2hpdmUoZm91 dCwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRl eCAzOTZmNzk3ODFjLi5hMmIzNWUzYWZiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTE1LDYgKzE1 LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3RhdC5o PgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIApAQCAtMjksNiArMzAs NyBAQAogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5j bHVkZSAicGdfYmFja3VwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKIC8q IHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQ R0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIK QEAgLTY0LDkgKzY2LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNv bm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMg dm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBEYXRh YmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpj b25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1l c3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludCBydW5QZ0R1bXAo Y29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywKKwkJCQkJIGNoYXIg KmRiZmlsZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBidWls ZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19u YW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNo YXIgKm9iam5hbWUsCkBAIC04MSw2ICs4NCw3IEBAIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5k KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhwYW5kX2Ri bmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAog CQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMgdm9pZCByZWFkX2R1 bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0 dGVybik7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAq Zm9ybWF0KTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKIHN0YXRpYyBj b25zdCBjaGFyICpwcm9nbmFtZTsKQEAgLTE0Nyw2ICsxNTEsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJ eyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwg bm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhh dmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xODgsNiArMTkzLDggQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNo YXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxM OworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwljb25zdCBjaGFy ICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZB VUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZh bHNlOwpAQCAtMjM3LDcgKzI0NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAog CXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0 aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywg YXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0 aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjY1LDcgKzI3Miw5IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihw Z2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZp bGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0TmFtZSA9IHBn X3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19v bmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQxNCw2ICs0MjMsOCBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmljZWx5KDEpOwogCX0KIAorCWFyY2hEdW1wRm9ybWF0 ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCiAJLyoKIAkgKiBJZiBwYXNzd29yZCB2 YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJICog cGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8gaGF2 ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ5Nyw5ICs1MDgsMzIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCiAJLyoKLQkgKiBP cGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKKwkg KiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQu ICBJZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNyZWF0ZSBuZXcgZmlsZXMgd2l0aCBnbG9iYWwuZGF0 IGFuZCBtYXAuZGF0IG5hbWVzLgogCSAqLwotCWlmIChmaWxlbmFtZSkKKwlpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCXRvY19wYXRoW01BWFBHUEFUSF07CisKKwkJ LyoKKwkJICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVu IHdlIG11c3QgcHJvdmlkZSB0aGUKKwkJICogZmlsZSBuYW1lIHRvIGNyZWF0ZSBvbmUgbWFpbiBk aXJlY3RvcnkuCisJCSAqLworCQlpZiAoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIp ID09IDApCisJCQlwZ19mYXRhbCgibm8gb3V0cHV0IGRpcmVjdG9yeSBzcGVjaWZpZWQiKTsKKwor CQkvKiBUT0RPOiBhY2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJaWYg KG1rZGlyKGZpbGVuYW1lLCAwNzAwKSA8IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0 ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCSBmaWxlbmFtZSk7CisKKwkJc25wcmludGYo dG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2JhbC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJT1BG ID0gZm9wZW4odG9jX3BhdGgsICJ3Iik7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKwll bHNlIGlmIChmaWxlbmFtZSkKIAl7CiAJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllf Vyk7CiAJCWlmICghT1BGKQpAQCAtNjA3LDcgKzY0MSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAl9CiAKIAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFi bGVzcGFjZXNfb25seSkKLQkJZHVtcERhdGFiYXNlcyhjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhj b25uLCBhcmNoRHVtcEZvcm1hdCk7CiAKIAlQUWZpbmlzaChjb25uKTsKIApAQCAtNjIwLDcgKzY1 NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZmNsb3NlKE9QRik7CiAKIAkJ Lyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlm IChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkK IAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjM3LDYg KzY3MSw4IEBAIGhlbHAodm9pZCkKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpcbiIp KTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1dCBmaWxl IG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAgICAgICAgIG91 dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJCQkiICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxuIikpOwogCXByaW50 ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBtb2RlXG4iKSk7CiAJ cHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBp bmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1sb2NrLXdhaXQtdGlt ZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBmb3IgYSB0YWJsZSBsb2Nr XG4iKSk7CkBAIC0xNDg3LDEwICsxNTIzLDEzIEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdj b25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2 b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpj b25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBHcmVzdWx0ICAgKnJlczsK IAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNoYXIJCWRiZmlsZXBh dGhbTUFYUEdQQVRIXTsKKwlGSUxFICAgICAgICptYXBfZmlsZTsKIAogCS8qCiAJICogU2tpcCBk YXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRv IGNvbm5lY3QKQEAgLTE1MDQsNyArMTU0Myw3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25u KQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21lIGZhaWx1cmUgbW9kZSB3aXRoIC0tY2xlYW4uCiAJICov CiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSAiCisJ CQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwgb2lkICIKIAkJCQkJICAgIkZST00gcGdfZGF0YWJhc2Ug ZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAi CiAJCQkJCSAgICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAndGVtcGxhdGUxJyksIGRhdG5hbWUiKTsK QEAgLTE1MTIsOSArMTU1MSwzMCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAlpZiAo UFFudHVwbGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNcbi0t XG5cbiIpOwogCisJLyoKKwkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1c3RvbSBmb3JtYXQgaXMgc3Bl Y2lmaWVkIHRoZW4gY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJICogdW5kZXIgdGhlIG1haW4gZGly ZWN0b3J5IGFuZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBzdWJkaXJlY3RvcnkgYmUKKwkgKiBj cmVhdGVkIHVuZGVyIHRoZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2ZSBtb2RlIGFzIHBlciBzaW5n bGUgZGIgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJ eworCQljaGFyICAgIG1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlzbnByaW50ZihkYl9z dWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKwkJaWYgKG1rZGly KGRiX3N1YmRpciwgMDc1NSkgIT0gMCkKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0 ZSBzdWJkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkJLyogQ3JlYXRlIGEg bWFwIGZpbGUgKHRvIHN0b3JlIGRib2lkIGFuZCBkYm5hbWUpICovCisJCXNucHJpbnRmKG1hcF9m aWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBmaWxlbmFtZSk7CisJCW1hcF9maWxl ID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgInciKTsKKwkJaWYgKCFtYXBfZmlsZSkKKwkJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0K KwogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAq ZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAgICpvaWQgPSBQUWdldHZh bHVlKHJlcywgaSwgMSk7CiAJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwogCQlpbnQJCQlyZXQ7 CiAKQEAgLTE1MjIsNiArMTU4MiwxNCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJ aWYgKHN0cmNtcChkYm5hbWUsICJ0ZW1wbGF0ZTAiKSA9PSAwKQogCQkJY29udGludWU7CiAKKwkJ aWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlzbnByaW50ZihkYmZpbGVw YXRoLCBNQVhQR1BBVEgsICItZiAlcy8lcyIsIGRiX3N1YmRpciwgb2lkKTsKKworCQkJLyogYXBw ZW5kIGRib2lkIGFuZCBkYm5hbWUgaW4gbWFwIGZpbGUuICovCisJCQlmcHJpbnRmKG1hcF9maWxl LCAiJXMgJXNcbiIsIG9pZCwgZGJuYW1lKTsKKwkJfQorCiAJCS8qIFNraXAgYW55IGV4cGxpY2l0 bHkgZXhjbHVkZWQgZGF0YWJhc2UgKi8KIAkJaWYgKHNpbXBsZV9zdHJpbmdfbGlzdF9tZW1iZXIo JmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMsIGRibmFtZSkpCiAJCXsKQEAgLTE1MzEsNyArMTU5OSw4 IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCiAJCXBnX2xvZ19pbmZvKCJkdW1waW5n IGRhdGFiYXNlIFwiJXNcIiIsIGRibmFtZSk7CiAKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0 YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIGRibmFtZSk7CisJCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBk dW1wXG4tLVxuXG4iLCBkYm5hbWUpOwogCiAJCS8qCiAJCSAqIFdlIGFzc3VtZSB0aGF0ICJ0ZW1w bGF0ZTEiIGFuZCAicG9zdGdyZXMiIGFscmVhZHkgZXhpc3QgaW4gdGhlCkBAIC0xNTQ5LDIwICsx NjE4LDIxIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJewogCQkJCWNyZWF0ZV9v cHRzID0gIiI7CiAJCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29t bWFuZCwgd2UgbXVzdCAqLwotCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRi bmFtZSk7CisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCQlmcHJpbnRm KE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOwogCQkJfQogCQl9CiAJCWVsc2UKIAkJ CWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRlIjsKIAotCQlpZiAoZmlsZW5hbWUpCisJCWlmICgoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpICYmIGZpbGVuYW1lKQogCQkJZmNsb3NlKE9QRik7CiAK LQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMpOworCQlyZXQgPSBydW5QZ0R1 bXAoZGJuYW1lLCBjcmVhdGVfb3B0cywgZGJmaWxlcGF0aCwgYXJjaER1bXBGb3JtYXQpOwogCQlp ZiAocmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdfZHVtcCBmYWlsZWQgb24gZGF0YWJhc2UgXCIl c1wiLCBleGl0aW5nIiwgZGJuYW1lKTsKIAotCQlpZiAoZmlsZW5hbWUpCisJCWlmICgoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaE51bGwpICYmIGZpbGVuYW1lKQogCQl7CiAJCQlPUEYgPSBmb3Blbihm aWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJaWYgKCFPUEYpCkBAIC0xNTcxLDYgKzE2NDEsMTAg QEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCX0KIAl9CiAKKwkvKiBDbG9zZSBtYXAg ZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJZmNsb3NlKG1hcF9m aWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAtMTU4MCw3ICsxNjU0LDggQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdfZHVtcCBvbiBkYm5hbWUsIHdpdGggc3Bl Y2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBnRHVtcChjb25zdCBjaGFyICpk Ym5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQorcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRi bmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSwKKwkJQXJjaGl2ZUZv cm1hdCBhcmNoRHVtcEZvcm1hdCkKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29ubnN0cmJ1ZjsKIAlQ UUV4cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTU4OSwxNyArMTY2NCwzOCBAQCBydW5QZ0R1bXAoY29u c3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKIAlpbml0UFFFeHBCdWZm ZXIoJmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1ZmZlcigmY21kKTsKIAotCXByaW50ZlBRRXhw QnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKLQkJCQkJICBwZ2R1bXBv cHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkvKgotCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFt ZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKLQkgKiBmb3JtYXQu CisJICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUg YW5kIGR1bXAgZm9ybWF0IHRvCisJICogdGhlIHBnX2R1bXAgY29tbWFuZC4KIAkgKi8KLQlpZiAo ZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCWlmIChh cmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQs ICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgZGJmaWxlLCBjcmVhdGVfb3B0 cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3RvcnkpCisJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GIGQgIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hDdXN0b20pCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GIGMgIik7 CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cigmY21kLCAiIC1GIHQgIik7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGR1 bXAgZm9ybWF0ICVkLCBzcGVjaWZpZWQsIHBsZWFzZSB1c2UgZC9jL3Agb25seSIsIGFyY2hEdW1w Rm9ybWF0KTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAi KTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1w X2JpbiwKKwkJCQkJCXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKKworCQkvKgorCQkq IElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5k IHBnX2R1bXAKKwkJKiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2Ug bmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE5 OTQsMyArMjA5MCwzMCBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFt ZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwog fQorCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZv cm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0CWFyY2hEdW1wRm9ybWF0OworCisJaWYgKHBnX3N0cmNh c2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1c3RvbSIpID09IDApCisJCWFyY2hE dW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwg ImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1h dCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwIikg PT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNl Y21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9PSAwKQorCQlhcmNoRHVtcEZv cm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0YXIiKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZQorCQlwZ19mYXRhbCgiaW52 YWxpZCBkdW1wIGZvcm1hdCBcIiVzXCIgc3BlY2lmaWVkIiwgZm9ybWF0KTsKKworCXJldHVybiBh cmNoRHVtcEZvcm1hdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3Jl LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IDg4YWUzOWQ5MzguLjhhYzA1 ODdlNDkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtNDEsMjcgKzQxLDcwIEBACiAjaW5jbHVkZSAi cG9zdGdyZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQu aD4KICNpZmRlZiBIQVZFX1RFUk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgog CisjaW5jbHVkZSAiY29tbW9uL2Nvbm5lY3QuaCIKKyNpbmNsdWRlICJjb21wcmVzc19pby5oIgor I2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRp bHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0 ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCisj aW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxz LmgiCiAKK3R5cGVkZWYgc3RydWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwKK3sKKwlzdHJ1 Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqbmV4dDsKKwlPaWQJCQkJCQkJCQlkYl9vaWQ7 CisJY29uc3QgY2hhcgkJCQkJCQkqZGJfbmFtZTsKK30gU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2Vs bDsKKwordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Cit7CisJU2ltcGxlRGF0 YWJhc2VPaWRMaXN0Q2VsbCAqaGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICp0YWls OworfSBTaW1wbGVEYXRhYmFzZU9pZExpc3Q7CisKK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lk X2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgT2lkIGRiX29pZCwgY29u c3QgY2hhciAqZGJuYW1lKTsKKwogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25h bWUpOwogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5h bWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIElzRmlsZUV4aXN0c0luRGly ZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGJv b2wgcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsCisJCVJlc3Rv cmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSk7CitzdGF0 aWMgUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFy ICpjb25uX3N0cmluZywKKwkJY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBjaGFyICpwZ3BvcnQs IGNvbnN0IGNoYXIgKnBndXNlciwKKwkJdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZh aWxfb25fZXJyb3IpOworc3RhdGljIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpxdWVyeSk7CitzdGF0aWMgaW50IFJlYWRPbmVTdGF0ZW1lbnQoU3RyaW5n SW5mbyBpbkJ1ZiwgRklMRSAqZl9nbG8pOworc3RhdGljIGludCByZXN0b3JlQWxsRGF0YWJhc2Vz KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJU2ltcGxlU3RyaW5nTGlz dCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtl cnMpOworc3RhdGljIHZvaWQgZXhlY3V0ZV9nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCWNvbnN0IGNoYXIgKm91dGZpbGUpOworc3Rh dGljIGludCBmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCVNpbXBs ZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0LCBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4 Y2x1ZGVfcGF0dGVybnMpOworc3RhdGljIGludCBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZp bGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJu YW1lX29pZF9saXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLAorCQljb25zdCBjaGFyICpkYm5h bWUpOworc3RhdGljIGJvb2wgaXNfZnVsbF9wYXR0ZXJuKFBHY29ubiAqY29ubiwgY29uc3QgY2hh ciAqc3RyLCBjb25zdCBjaGFyICpwdHJuKTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9zdHJpbmdfZnVs bF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBs ZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QpOwor c3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9pZExp c3QgKmxpc3QsCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKmNlbGwsIFNpbXBsZURhdGFi YXNlT2lkTGlzdENlbGwgKnByZXYpOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9jb2Rl OwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJICAgKmlu cHV0RmlsZVNwZWM7CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0gMDsKIAlzdGF0aWMg aW50CWVuYWJsZV9yb3dfc2VjdXJpdHkgPSAwOwpAQCAtNzcsMTEgKzEyMCwxNCBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAlzdGF0aWMgaW50CXN0cmljdF9uYW1lcyA9IDA7CiAJYm9v bAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlTaW1w bGVTdHJpbmdMaXN0ICAgIGRiX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CisJYm9v bAkJCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKIAogCXN0cnVjdCBvcHRpb24gY21kb3B0c1tdID0g ewogCQl7ImNsZWFuIiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBOVUxMLCAnQyd9 LAogCQl7ImRhdGEtb25seSIsIDAsIE5VTEwsICdhJ30sCisJCXsiZ2xvYmFscy1vbmx5IiwgMCwg TlVMTCwgJ2cnfSwKIAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4aXQtb24tZXJy b3IiLCAwLCBOVUxMLCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVMTCwgJ04nfSwK QEAgLTEyOCw2ICsxNzQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJuby1z ZWN1cml0eS1sYWJlbHMiLCBub19hcmd1bWVudCwgJm5vX3NlY3VyaXR5X2xhYmVscywgMX0sCiAJ CXsibm8tc3Vic2NyaXB0aW9ucyIsIG5vX2FyZ3VtZW50LCAmbm9fc3Vic2NyaXB0aW9ucywgMX0s CiAJCXsiZmlsdGVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDR9LAorCQl7ImV4Y2x1ZGUt ZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCiAKIAkJe05VTEwsIDAsIE5V TEwsIDB9CiAJfTsKQEAgLTE1Niw3ICsyMDMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJfQogCX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0Nk OmVmOkY6aDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBn ZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYUFjQ2Q6ZWY6RjpnaDpJOmo6bEw6bjpOOk9wOlA6UnNT OnQ6VDpVOnZ3V3gxIiwKIAkJCQkJCQljbWRvcHRzLCBOVUxMKSkgIT0gLTEpCiAJewogCQlzd2l0 Y2ggKGMpCkBAIC0xODMsMTEgKzIzMCwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Zm9ybWF0TmFtZSA9IHBn X3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOworCQkJY2FzZSAnZyc6CisJCQkJLyogcmVzdG9y ZSBvbmx5IGdsb2JhbC5kYXQgZmlsZSBmcm9tIGRpcmVjdG9yeSAqLworCQkJCWdsb2JhbHNfb25s eSA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFy ZykgIT0gMCkKIAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsK IAkJCQlicmVhazsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAq LwogCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJ CQkJCQkJICBQR19NQVhfSk9CUywKQEAgLTMwMiw2ICszNTIsMTAgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCQkJCWV4aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9vbl9lcnJvciA9IHRy dWU7CiAJCQkJYnJlYWs7CisJCQljYXNlIDY6CisJCQkJLyogbGlzdCBvZiBkYXRhYmFzZXMgcGF0 dGVybnMgdGhvc2UgbmVlZHMgdG8gc2tpcCB3aGlsZSByZXN0b3JpbmcgKi8KKwkJCQlzaW1wbGVf c3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJCWJy ZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBh IGNvbXBsYWludCAqLwpAQCAtMzI5LDYgKzM4MywxNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAlpZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFtZSAmJiAh b3B0cy0+dG9jU3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBhbmQgLWYv LS1maWxlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5o ZWFkICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb24g LS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9i YWxzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBt b3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJ aWYgKGdsb2JhbHNfb25seSAmJiBvcHRzLT5jcGFyYW1zLmRibmFtZSA9PSBOVUxMKQorCQlwZ19m YXRhbCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IHJlcXVpcmVzIG9wdGlvbiAtZC8tLWRibmFt ZSIpOworCiAJLyogU2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNl ciBpcyBjb25mdXNlZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBAIC0zOTUs MTcgKzQ1OSw5MiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlvcHRzLT5mb3Jt YXQgPSBhcmNoRGlyZWN0b3J5OwogCQkJCWJyZWFrOwogCisJCQljYXNlICdwJzoKKwkJCWNhc2Ug J1AnOgorCQkJCWJyZWFrOyAvKiBkZWZhdWx0IGZvcm1hdCAqLworCiAJCQljYXNlICd0JzoKIAkJ CWNhc2UgJ1QnOgogCQkJCW9wdHMtPmZvcm1hdCA9IGFyY2hUYXI7CiAJCQkJYnJlYWs7CiAKIAkJ CWRlZmF1bHQ6Ci0JCQkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCBcIiVz XCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgb3IgXCJ0XCIiLAorCQkJCXBnX2ZhdGFs KCJ1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQgXCIlc1wiOyBwbGVhc2Ugc3BlY2lmeSBcImNc IiwgXCJkXCIsIFwicFwiLCBvciBcInRcIiIsCiAJCQkJCQkgb3B0cy0+Zm9ybWF0TmFtZSk7CiAJ CX0KIAl9CiAKKwkvKgorCSAqIElmIHRvYy5kYXQgZmlsZSBkb2VzIG5vdCBwcmVzZW50IGluIGN1 cnJlbnQgcGF0aCwgdGhlbiBjaGVjayBmb3IKKwkgKiBnbG9iYWwuZGF0IGFuZCBtYXAuZGF0IGZp bGVzLiAgSWYgYm90aCBmaWxlcyBhcmUgcHJlc2VudCwgdGhlbgorCSAqIHJlc3RvcmUgYWxsIHRo ZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0IGZpbGUgbGlzdCBhbmQgc2tpcCByZXN0b3JpbmcgZm9y CisJICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgorCSAqLworCWlmIChpbnB1dEZpbGVT cGVjICE9IE5VTEwgJiYKKwkJCSFJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShpbnB1dEZpbGVTcGVj LCAidG9jLmRhdCIpKQorCXsKKwkJLyogSWYgZ2xvYmFsLmRhdCBhbmQgbWFwLmRhdCBhcmUgZXhp c3QsIHRoZW4gcHJvY2VzIHRoZW0uICovCisJCWlmIChJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShw Z19zdHJkdXAoaW5wdXRGaWxlU3BlYyksICJnbG9iYWwuZGF0IikKKwkJCQkmJiBJc0ZpbGVFeGlz dHNJbkRpcmVjdG9yeShwZ19zdHJkdXAoaW5wdXRGaWxlU3BlYyksICJtYXAuZGF0IikpCisJCXsK KwkJCVBHY29ubgkqY29ubiA9IE5VTEw7IC8qIENvbm5lY3Rpb24gdG8gcmVzdG9yZSBnbG9iYWwg c3FsIGNvbW1hbmRzLiAqLworCQkJaW50CQlleGl0X2NvZGUgPSAwOworCisJCQkvKgorCQkJICog VG8gcmVzdG9yZSBtdWx0aXBsZSBkYXRhYmFzZXMsIGNyZWF0ZSBkYXRhYmFzZSBvcHRpb24gc2hv dWxkIGJlCisJCQkgKiBzcGVjaWZpZWQuCisJCQkgKi8KKwkJCWlmIChvcHRzLT5jcmVhdGVEQiAh PSAxKQorCQkJCXBnX2ZhdGFsKCJvcHRpb24gLUMvLS1jcmVhdGUgc2hvdWxkIGJlIHNwZWNpZmll ZCB3aGVuIHVzaW5nIGR1bXAgb2YgcGdfZHVtcGFsbCIpOworCisJCQkvKiBDb25uZWN0IHRvIGRh dGFiYXNlIHRvIGV4ZWN1dGUgZ2xvYmFsIHNxbCBjb21tYW5kcyBmcm9tIGdsb2JhbC5kYXQgZmls ZS4gKi8KKwkJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJCXsKKwkJCQljb25uID0gY29u bmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBn aG9zdCwKKwkJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1l LCBUUklfREVGQVVMVCwgZmFsc2UpOworCisJCQkJaWYgKCFjb25uKQorCQkJCQlwZ19mYXRhbCgi Y291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5h bWUpOworCQkJfQorCisJCQkvKiBPcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBl bmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJZXhlY3V0ZV9nbG9iYWxfc3Fs X2NvbW1hbmRzKGNvbm4sIGlucHV0RmlsZVNwZWMsIG9wdHMtPmZpbGVuYW1lKTsKKworCQkJLyog SWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUuICovCisJCQlpZiAoZ2xvYmFs c19vbmx5KQorCQkJeworCQkJCWlmIChjb25uKQorCQkJCQlQUWZpbmlzaChjb25uKTsKKwkJCX0K KwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9t IG1hcC5kYXQgZmlsZS4gKi8KKwkJCQlleGl0X2NvZGUgPSByZXN0b3JlQWxsRGF0YWJhc2VzKGNv bm4sIGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJCQlvcHRzLCBudW1X b3JrZXJzKTsKKwkJCX0KKworCQkJLyogRnJlZSBkYiBwYXR0ZXJuIGxpc3QuICovCisJCQlzaW1w bGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJCQly ZXR1cm4gZXhpdF9jb2RlOworCQl9LyogZW5kIGlmICovCisJfS8qIGVuZCBpZiAqLworCisJcmV0 dXJuIHJlc3RvcmVPbmVEYXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBm YWxzZSk7Cit9CisKKy8qCisgKiByZXN0b3JlT25lRGF0YWJhc2UKKyAqCisgKiBUaGlzIHdpbGwg cmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRhdCBmaWxlLgorICovCitzdGF0aWMgYm9v bAorcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVP cHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSkKK3sKKwlB cmNoaXZlCQkqQUg7CisJYm9vbAkJZXhpdF9jb2RlOworCiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1 dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEws IG9wdHMpOwpAQCAtNDMxLDExICs1NzAsMTEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJQUgtPm51bVdvcmtlcnMgPSBudW1Xb3JrZXJzOwogCiAJaWYgKG9wdHMtPnRvY1N1bW1hcnkp Ci0JCVByaW50VE9DU3VtbWFyeShBSCk7CisJCVByaW50VE9DU3VtbWFyeShBSCwgYXBwZW5kX2Rh dGEpOwogCWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgpOwotCQlS ZXN0b3JlQXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNoaXZlKEFILCBhcHBlbmRfZGF0YSk7CiAJ fQogCiAJLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICovCkBAIC00 NzEsNiArNjEwLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAg LWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkgZGF0YWJhc2Ugb2JqZWN0 cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1DLCAtLWNyZWF0ZSAgICAg ICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2VcbiIpKTsKIAlwcmludGYoXygi ICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQgb24gZXJyb3IsIGRlZmF1bHQgaXMg dG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAtZywgLS1nbG9iYWxzLW9ubHkgICAgICAg ICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzXG4iKSk7CiAJcHJp bnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIGluZGV4 XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0tam9icz1OVU0gICAgICAgICAgICAgICB1c2UgdGhp cyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC1MLCAt LXVzZS1saXN0PUZJTEVOQU1FICAgICAgdXNlIHRhYmxlIG9mIGNvbnRlbnRzIGZyb20gdGhpcyBm aWxlIGZvclxuIgpAQCAtNDgzLDYgKzYyMyw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1l KQogCXByaW50ZihfKCIgIC1TLCAtLXN1cGVydXNlcj1OQU1FICAgICAgICAgc3VwZXJ1c2VyIHVz ZXIgbmFtZSB0byB1c2UgZm9yIGRpc2FibGluZyB0cmlnZ2Vyc1xuIikpOwogCXByaW50ZihfKCIg IC10LCAtLXRhYmxlPU5BTUUgICAgICAgICAgICAgcmVzdG9yZSBuYW1lZCByZWxhdGlvbiAodGFi bGUsIHZpZXcsIGV0Yy4pXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVQsIC0tdHJpZ2dlcj1OQU1FICAg ICAgICAgICByZXN0b3JlIG5hbWVkIHRyaWdnZXJcbiIpKTsKKwlwcmludGYoXygiICAtLWV4Y2x1 ZGUtZGF0YWJhc2U9UEFUVEVSTiAgIGV4Y2x1ZGUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hl cyB3aXRoIHBhdHRlcm5cbiIpKTsKIAlwcmludGYoXygiICAteCwgLS1uby1wcml2aWxlZ2VzICAg ICAgICAgIHNraXAgcmVzdG9yYXRpb24gb2YgYWNjZXNzIHByaXZpbGVnZXMgKGdyYW50L3Jldm9r ZSlcbiIpKTsKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJhbnNhY3Rpb24gICAgIHJlc3Rv cmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmludGYoXygiICAtLWRpc2FibGUt dHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5nIGRhdGEtb25seSByZXN0 b3JlXG4iKSk7CkBAIC02MjEsMyArNzYyLDcyMyBAQCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25z dCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgm ZnN0YXRlKTsKIH0KKworLyoKKyAqIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5CisgKgorICogUmV0 dXJucyB0cnVlIGlmIGZpbGUgZXhpc3QgaW4gY3VycmVudCBkaXJlY3RvcnkuCisgKi8KK3N0YXRp YyBib29sCitJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNo YXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0CQkJc3Q7CisJY2hhcgkJCQlidWZbTUFYUEdQ QVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxl bmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6 IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JF RyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisgKiBjb25uZWN0RGF0YWJhc2UKKyAqCisgKiBNYWtl IGEgZGF0YWJhc2UgY29ubmVjdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KKyAq IGludGVyYWN0aXZlIHBhc3N3b3JkIHByb21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiBy ZXF1aXJlZC4KKyAqCisgKiBJZiBmYWlsX29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVM TCB3aXRob3V0IHByaW50aW5nIGFueSBtZXNzYWdlCisgKiBvbiBmYWlsdXJlLCBidXQgcHJlc2Vy dmUgYW55IHByb21wdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV4dCB0cnkuCisgKi8KK3N0YXRpYyBQ R2Nvbm4gKgorY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAq Y29ubmVjdGlvbl9zdHJpbmcsCisJCQkJY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBjaGFyICpw Z3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKKwkJCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQs IGJvb2wgZmFpbF9vbl9lcnJvcikKK3sKKwlQR2Nvbm4JCQkJKmNvbm47CisJYm9vbAkJCQluZXdf cGFzczsKKwljb25zdCBjaGFyCQkJKnJlbW90ZXZlcnNpb25fc3RyOworCWludAkJCQkJbXlfdmVy c2lvbjsKKwljb25zdCBjaGFyCQkJKiprZXl3b3JkcyA9IE5VTEw7CisJY29uc3QgY2hhcgkJCSoq dmFsdWVzID0gTlVMTDsKKwlQUWNvbm5pbmZvT3B0aW9uIAkqY29ubl9vcHRzID0gTlVMTDsKKwlz dGF0aWMgY2hhcgkJCSpwYXNzd29yZCA9IE5VTEw7CisJc3RhdGljIGludAkJCXNlcnZlcl92ZXJz aW9uOworCisJaWYgKHByb21wdF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKKwkJ cGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCisJLyoKKwkg KiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlm IHJlcXVlc3RlZCBieQorCSAqIGJhY2tlbmQuCisJICovCisJZG8KKwl7CisJCWludAkJCQkJYXJn Y291bnQgPSA2OworCQlQUWNvbm5pbmZvT3B0aW9uCSpjb25uX29wdDsKKwkJY2hhcgkJCQkqZXJy X21zZyA9IE5VTEw7CisJCWludAkJCQkJaSA9IDA7CisKKwkJZnJlZShrZXl3b3Jkcyk7CisJCWZy ZWUodmFsdWVzKTsKKwkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCQkvKgorCQkgKiBN ZXJnZSB0aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBnaXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rp b24gc3RyaW5nCisJCSAqIGFuZCBvdGhlciBvcHRpb25zLiAgRXhwbGljaXRseSBkaXNjYXJkIGFu eSBkYm5hbWUgdmFsdWUgaW4gdGhlCisJCSAqIGNvbm5lY3Rpb24gc3RyaW5nOyBvdGhlcndpc2Us IFBRY29ubmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJwcmV0CisJCSAqIHRoYXQgdmFsdWUgYXMg YmVpbmcgaXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcuCisJCSAqLworCQlpZiAoY29ubmVjdGlv bl9zdHJpbmcpCisJCXsKKwkJCWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJzZShjb25uZWN0aW9u X3N0cmluZywgJmVycl9tc2cpOworCQkJaWYgKGNvbm5fb3B0cyA9PSBOVUxMKQorCQkJCXBnX2Zh dGFsKCIlcyIsIGVycl9tc2cpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25u X29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJCWlmIChjb25uX29w dC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCisJCQkJCXN0cmNt cChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJCWFyZ2NvdW50Kys7CisJ CQl9CisKKwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigq a2V5d29yZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXpl b2YoKnZhbHVlcykpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+ a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJCWlmIChjb25uX29wdC0+dmFs ICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCisJCQkJCXN0cmNtcChjb25u X29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJeworCQkJCQlrZXl3b3Jkc1tpXSA9 IGNvbm5fb3B0LT5rZXl3b3JkOworCQkJCQl2YWx1ZXNbaV0gPSBjb25uX29wdC0+dmFsOworCQkJ CQlpKys7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJa2V5d29yZHMgPSBwZ19t YWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVzID0g cGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisJCX0KKworCQlp ZiAocGdob3N0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsKKwkJCXZhbHVlc1tpXSA9 IHBnaG9zdDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGdwb3J0KQorCQl7CisJCQlrZXl3b3Jkc1tp XSA9ICJwb3J0IjsKKwkJCXZhbHVlc1tpXSA9IHBncG9ydDsKKwkJCWkrKzsKKwkJfQorCQlpZiAo cGd1c2VyKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKKwkJCXZhbHVlc1tpXSA9IHBn dXNlcjsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGFzc3dvcmQpCisJCXsKKwkJCWtleXdvcmRzW2ld ID0gInBhc3N3b3JkIjsKKwkJCXZhbHVlc1tpXSA9IHBhc3N3b3JkOworCQkJaSsrOworCQl9CisJ CWlmIChkYm5hbWUpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImRibmFtZSI7CisJCQl2YWx1ZXNb aV0gPSBkYm5hbWU7CisJCQlpKys7CisJCX0KKwkJa2V5d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBw bGljYXRpb25fbmFtZSI7CisJCXZhbHVlc1tpXSA9IHByb2duYW1lOworCQlpKys7CisKKwkJbmV3 X3Bhc3MgPSBmYWxzZTsKKwkJY29ubiA9IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1 ZXMsIHRydWUpOworCisJCWlmICghY29ubikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVj dCB0byBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOworCisJCWlmIChQUXN0YXR1cyhjb25uKSA9 PSBDT05ORUNUSU9OX0JBRCAmJgorCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChjb25uKSAm JgorCQkJIXBhc3N3b3JkICYmCisJCQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJX05PKQorCQl7CisJ CQlQUWZpbmlzaChjb25uKTsKKwkJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6 ICIsIGZhbHNlKTsKKwkJCW5ld19wYXNzID0gdHJ1ZTsKKwkJfQorCX0gd2hpbGUgKG5ld19wYXNz KTsKKworCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1 Y2Nlc3NmdWxseSBtYWRlICovCisJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFE KQorCXsKKwkJaWYgKGZhaWxfb25fZXJyb3IpCisJCQlwZ19mYXRhbCgiJXMiLCBQUWVycm9yTWVz c2FnZShjb25uKSk7CisJCWVsc2UKKwkJeworCQkJUFFmaW5pc2goY29ubik7CisKKwkJCWZyZWUo a2V5d29yZHMpOworCQkJZnJlZSh2YWx1ZXMpOworCQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRz KTsKKworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlmcmVlKGtleXdvcmRzKTsKKwlmcmVl KHZhbHVlcyk7CisJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCS8qIENoZWNrIHZlcnNp b24gKi8KKwlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2 ZXJfdmVyc2lvbiIpOworCWlmICghcmVtb3RldmVyc2lvbl9zdHIpCisJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7CisJc2VydmVyX3ZlcnNpb24gPSBQUXNlcnZlclZl cnNpb24oY29ubik7CisJaWYgKHNlcnZlcl92ZXJzaW9uID09IDApCisJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIlc1wiIiwKKwkJCQkgcmVtb3RldmVyc2lvbl9z dHIpOworCisJbXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOworCisJLyoKKwkgKiBXZSBhbGxv dyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVh c2Ugb2YKKwkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVj ayBpbiBwZ19kdW1wLmMuKQorCSAqLworCWlmIChteV92ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9u CisJCSYmIChzZXJ2ZXJfdmVyc2lvbiA8IDkwMjAwIHx8CisJCQkoc2VydmVyX3ZlcnNpb24gLyAx MDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkKKwl7CisJCXBnX2xvZ19lcnJvcigiYWJvcnRpbmcg YmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOworCQlwZ19sb2dfZXJyb3JfZGV0 YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwKKwkJCQkJCQlyZW1vdGV2 ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOworCQlleGl0X25pY2VseSgxKTsKKwl9 CisKKwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRI X1NRTCkpOworCisJcmV0dXJuIGNvbm47Cit9CisKKy8qCisgKiBleGVjdXRlUXVlcnkKKyAqCisg KiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFpbHVy ZS4KKyAqLworc3RhdGljIFBHcmVzdWx0ICoKK2V4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKnF1ZXJ5KQoreworCVBHcmVzdWx0CSpyZXM7CisKKwlwZ19sb2dfaW5mbygiZXhl Y3V0aW5nICVzIiwgcXVlcnkpOworCisJcmVzID0gUFFleGVjKGNvbm4sIHF1ZXJ5KTsKKwlpZiAo IXJlcyB8fCBQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBn X2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJ cGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKKwkJUFFmaW5pc2go Y29ubik7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCXJldHVybiByZXM7Cit9CisKKy8qCisg KglSZWFkT25lU3RhdGVtZW50CisgKgorICogVGhpcyB3aWxsIHN0YXJ0IHJlYWRpbmcgZnJvbSBw YXNzZWQgZmlsZSBwb2ludGVyIHVzaW5nIGZnZXRjIGFuZCByZWFkIHRpbGwKKyAqIHNlbWljb2xv bihzcWwgc3RhdGVtZW50IHRlcm1pbmF0b3IgZm9yIGdsb2JhbC5zcWwgZmlsZSkKKyAqCisgKglF T0YgaXMgcmV0dXJuZWQgaWYgZW5kLW9mLWZpbGUgaW5wdXQgaXMgc2VlbjsgdGltZSB0byBzaHV0 IGRvd24uCisgKi8KKworc3RhdGljIGludAorUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGlu QnVmLCBGSUxFICpmX2dsbykKK3sKKwlpbnQJCQljOyAvKiBjaGFyYWN0ZXIgcmVhZCBmcm9tIGdl dGMoKSAqLworCisJcmVzZXRTdHJpbmdJbmZvKGluQnVmKTsKKworCS8qCisJICogUmVhZCBjaGFy YWN0ZXJzIHVudGlsIEVPRiBvciB0aGUgYXBwcm9wcmlhdGUgZGVsaW1pdGVyIGlzIHNlZW4uCisJ ICovCisJd2hpbGUgKChjID0gZmdldGMoZl9nbG8pKSAhPSBFT0YpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCisJCWlmIChjID09ICdcbicpCisJCXsKKwkJ CWlmKGluQnVmLT5sZW4gPiAxICYmCisJCQkJCWluQnVmLT5kYXRhW2luQnVmLT5sZW4gLSAyXSA9 PSAnOycpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKwl9CisKKwkv KiBObyBpbnB1dCBiZWZvcmUgRU9GIHNpZ25hbCBtZWFucyB0aW1lIHRvIHF1aXQuICovCisJaWYg KGMgPT0gRU9GICYmIGluQnVmLT5sZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsKKworCS8qIEFkZCAn XDAnIHRvIG1ha2UgaXQgbG9vayB0aGUgc2FtZSBhcyBtZXNzYWdlIGNhc2UuICovCisJYXBwZW5k U3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSAnXDAnKTsKKworCXJldHVybiAnUSc7Cit9CisK Ky8qCisgKiBmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZQorICoKKyAqIFRoaXMgd2lsbCByZW1v dmUgbmFtZXMgZnJvbSBhbGwgZGJsaXN0IHRoYXQgYXJlIGdpdmVuIHdpdGggZXhjbHVkZS1kYXRh YmFzZQorICogb3B0aW9uLgorICoKKyAqIHJldHVybnMgbnVtYmVyIG9mIGRibmFtZXMgdGhvc2Ug d2lsbCBiZSByZXN0b3JlZC4KKyAqLworc3RhdGljIGludAorZmlsdGVyX2RibmFtZXNfZm9yX3Jl c3RvcmUoUEdjb25uICpjb25uLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlz dCwKKwkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQoreworCVNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwJKmRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7CisJ U2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqZGJvaWRwcmVjZWxsID0gTlVMTDsKKwlpbnQJCQkJ CQkJY291bnRfZGIgPSAwOworCisJLyogUmV0dXJuIDAgaWYgdGhlcmUgaXMgbm8gZGIgdG8gcmVz dG9yZS4gKi8KKwlpZiAoZGJvaWRfY2VsbCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIFBy b2Nlc3Mgb25lIGJ5IG9uZSBhbGwgZGJuYW1lcyBhbmQgaWYgbmVlZHMgdG8gc2tpcCByZXN0b3Jp bmcuICovCisJd2hpbGUgKGRib2lkX2NlbGwgIT0gTlVMTCkKKwl7CisJCWJvb2wJCQkJCQlza2lw X2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqbmV4dCA9 IGRib2lkX2NlbGwtPm5leHQ7CisKKwkJLyogTm93IG1hdGNoIHRoaXMgZGJuYW1lIHdpdGggZXhj bHVkZS1kYXRhYmFzZSBsaXN0LiAqLworCQlmb3IgKFNpbXBsZVN0cmluZ0xpc3RDZWxsICpjZWxs ZGIgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IGNlbGxkYjsgY2VsbGRiID0gY2VsbGRiLT5u ZXh0KQorCQl7CisJCQlpZiAoKGNvbm4gJiYgaXNfZnVsbF9wYXR0ZXJuKGNvbm4sIGRib2lkX2Nl bGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKSkgfHwKKwkJCQkJKCFjb25uICYmIHBnX3N0cmNhc2Vj bXAoZGJvaWRfY2VsbC0+ZGJfbmFtZSwgY2VsbGRiLT52YWwpID09IDApKQorCQkJeworCQkJCS8q CisJCQkJICogQXMgd2UgbmVlZCB0byBza2lwIHRoaXMgZGJuYW1lIHNvIHNldCBmbGFnIHRvIHJl bW92ZSBpdCBmcm9tCisJCQkJICogbGlzdC4KKwkJCQkgKgorCQkJCSAqIE5vdGU6IHdlIGNhbid0 IHJlbW92ZSB0aGlzIHBhdHRlcm4gZnJvbSBza2lwIGxpc3QgYXMgd2UKKwkJCQkgKiBtaWdodCBo YXZlIG11bHRpcGxlIGRhdGFiYXNlIG5hbWUgd2l0aCB0aGlzIHNhbWUgcGF0dGVybi4KKwkJCQkg Ki8KKwkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisK KwkJLyogSW5jcmVtZW50IGNvdW50IGlmIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCQlp ZiAoc2tpcF9kYl9yZXN0b3JlKQorCQkJc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShkYm5hbWVf b2lkX2xpc3QsIGRib2lkX2NlbGwsIGRib2lkcHJlY2VsbCk7CisJCWVsc2UKKwkJeworCQkJY291 bnRfZGIrKzsgLyogSW5jcmVtZW50IGRiIGNvdXRlci4gKi8KKwkJCWRib2lkcHJlY2VsbCA9IGRi b2lkX2NlbGw7CisJCX0KKworCQkvKiBQcm9jZXNzIG5leHQgZGJuYW1lIGZyb20gZGJuYW1lIGxp c3QuICovCisJCWRib2lkX2NlbGwgPSBuZXh0OworCX0KKworCXJldHVybiBjb3VudF9kYjsKK30K KworLyoKKyAqIGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZQorICoKKyAqIE9wZW4gbWFw LmRhdCBmaWxlIGFuZCByZWFkIGxpbmUgYnkgbGluZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBv ZiBkYXRhYmFzZQorICogbmFtZXMgYW5kIGNvcnJlc3BvZGluZyBkYl9vaWQuCisgKgorICogUmV0 dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4KKyAq Lworc3RhdGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIg KmR1bXBkaXJwYXRoLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCkKK3sK KwlGSUxFICAgICpwZmlsZTsKKwljaGFyICAgIG1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlj aGFyICAgIGxpbmVbTUFYUEdQQVRIXTsKKwlpbnQgICAgIGNvdW50ID0gMDsKKworCXNucHJpbnRm KG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisK KwkvKiBPcGVuIG1hcC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgs ICJyIik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVu IG1hcC5kYXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCisJLyogQXBwZW5kIGFsbCB0 aGUgZGJuYW1lIGFuZCBkYl9vaWQgdG8gdGhlIGxpc3QuICovCisJd2hpbGUoKGZnZXRzKGxpbmUs IE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBOVUxMKQorCXsKKwkJT2lkICAgICAgICAgZGJfb2lkOwor CQljaGFyICAgICAgICBkYm5hbWVbTUFYUEdQQVRIICsgMV07CisKKwkJLyogRXh0cmFjdCBkYm5h bWUgYW5kIGRiX29pZCBmcm9tIGxpbmUgKi8KKwkJc3NjYW5mKGxpbmUsICIldSAlcyIgLCAmZGJf b2lkLCBkYm5hbWUpOworCisJCXBnX2xvZ19pbmZvKCJmb3VuZCBkYm5hbWUgYXMgOiVzIGFuZCBk Yl9vaWQ6JWQgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZyIsIGRibmFtZSwgZGJfb2lk KTsKKworCQkvKiBSZXBvcnQgZXJyb3IgaWYgZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAq LworCQlpZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBzdHJsZW4oZGJuYW1lKSA9PSAwKQorCQkJ cGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gbWFwLmRhdCBmaWxlIGF0IGxpbmUgOiAlZCIsIGNv dW50ICsgMSk7CisKKwkJLyoKKwkJICogWFhYIDogYmVmb3JlIGFkZGluZyBkYm5hbWUgaW50byBs aXN0LCB3ZSBjYW4gdmVyaWZ5IHRoYXQgdGhpcyBkYgorCQkgKiBuZWVkcyB0byBza2lwcGVkIGZv ciByZXN0b3JlIG9yIG5vdCBidXQgYXMgb2Ygbm93LCB3ZSBhcmUgbWFraW5nCisJCSAqIGEgbGlz dCBvZiBhbGwgdGhlIGRhdGFiYXNlcy4KKwkJICovCisJCXNpbXBsZV9kYl9vaWRfbGlzdF9hcHBl bmQoZGJuYW1lX29pZF9saXN0LCBkYl9vaWQsIGRibmFtZSk7CisJCWNvdW50Kys7CisJfQorCisJ LyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4gY291 bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlQWxsRGF0YWJhc2VzCisgKgorICogVGhpcyB3aWxsIHJl c3RvcmUgZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3Rvcnkg YmFzZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVz dG9yaW5nIGZvciBkYXRhYmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUt ZGF0YWJhc2Ugb3B0aW9uLgorICovCitzdGF0aWMgaW50CityZXN0b3JlQWxsRGF0YWJhc2VzKFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCVNpbXBsZVN0cmluZ0xpc3Qg ZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3Jr ZXJzKQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdAkJCWRibmFtZV9vaWRfbGlzdCA9IHtOVUxM LCBOVUxMfTsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCQkqZGJvaWRfY2VsbDsKKwlpbnQJ CQkJCQkJCWV4aXRfY29kZSA9IDA7CisJaW50CQkJCQkJCQludW1fZGJfcmVzdG9yZTsKKwlpbnQJ CQkJCQkJCW51bV90b3RhbF9kYjsKKworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xp c3RfZnJvbV9tZmlsZShkdW1wZGlycGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKiBJZiBt YXAuZGF0IGhhcyBubyBlbnRyeSwgcmV0dXJuIGZyb20gaGVyZS4gKi8KKwlpZiAoZGJuYW1lX29p ZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlwZ19sb2dfaW5mbygiZm91bmQg dG90YWwgJWQgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlIiwgbnVtX3RvdGFsX2RiKTsK KworCWlmICghY29ubikKKwl7CisJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCBwb3N0 Z3JlcyBkYXRhYmFzZSB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQljb25uID0gY29ubmVj dERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCW9w dHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwg ZmFsc2UpOworCisJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJaWYgKCFjb25uKQorCQl7 CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdGVtcGxhdGUxIGRhdGFiYXNlIGFz IGZhaWxlZCB0byBjb25uZWN0IHRvIHBvc3RncmVzIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOwor CisJCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFy YW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNl cm5hbWUsIFRSSV9ERUZBVUxULCBmYWxzZSk7CisKKwkJCWlmICghY29ubikKKwkJCQlwZ19sb2df aW5mbygidGhlcmUgaXMgbm8gZGF0YWJhc2UgY29ubmVjdGlvbiBzbyBjb25zaWRlciBwYXR0ZXJu IGFzIHNpbXBsZSBuYW1lIGZvciBleGNsdWRlLWRhdGFiYXNlIik7CisJCX0KKwl9CisKKwkvKgor CSAqIFNraXAgYW55IGV4cGxpY2l0bHkgZXhjbHVkZWQgZGF0YWJhc2UuICBJZiB0aGVyZSBpcyBu byBkYXRhYmFzZQorCSAqIGNvbm5lY3Rpb24sIHRoZW4ganVzdCBjb25zaWRlciBwYXR0ZXJuIGFz IHNpbXBsZSBuYW1lIHRvIGNvbXBhcmUuCisJICovCisJbnVtX2RiX3Jlc3RvcmUgPSBmaWx0ZXJf ZGJuYW1lc19mb3JfcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJZGJfZXhjbHVk ZV9wYXR0ZXJucyk7CisKKwkvKiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBhcmUgZG9u ZSBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7 CisKKwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5h bWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXBnX2xvZ19pbmZvKCJu ZWVkcyB0byByZXN0b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2Ri X3Jlc3RvcmUsIG51bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFhYWDogVE9ETyB0aWxsIG5vdywg d2UgbWFkZSBhIGxpc3Qgb2YgZGF0YWJhc2VzLCB0aG9zZSBuZWVkcyB0byBiZSByZXN0b3JlZAor CSAqIGFmdGVyIHNraXBwaW5nIG5hbWVzIG9mIGV4Y2x1ZGUtZGF0YWJhc2UuICBOb3cgd2UgY2Fu IGxhdW5jaCBwYXJhbGxlbAorCSAqIHdvcmtlcnMgdG8gcmVzdG9yZSB0aGVzZSBkYXRhYmFzZXMu CisJICovCisJZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC5oZWFkOworCisJd2hpbGUoZGJv aWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJY2hhcgkJc3ViZGlycGF0aFtNQVhQR1BBVEhdOworCQlp bnQJCQlkYmV4aXRfY29kZTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRl X2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkIGludG8KKwkJICogYWxyZWFk eSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJICov CisJCWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUob3B0 cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9k Ym5hbWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAi JXMvZGF0YWJhc2VzLyV1IiwgZHVtcGRpcnBhdGgsIGRib2lkX2NlbGwtPmRiX29pZCk7CisKKwkJ LyoKKwkJICogRGF0YWJhc2UgLWQvLS1kYm5hbWUgaXMgYWxyZWFkeSBjcmVhdGVkIHNvIHJlc2V0 IGNyZWF0ZURCIHRvIGlnbm9yZQorCQkgKiBkYXRhYmFzZSBjcmVhdGlvbiBlcnJvci4KKwkJICov CisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSAmJgorCQkJCXBnX3N0cmNhc2VjbXAoZGJvaWRf Y2VsbC0+ZGJfbmFtZSwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpID09IDApCisJCQlvcHRzLT5jcmVh dGVEQiA9IDA7CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBk Ym9pZF9jZWxsLT5kYl9uYW1lKTsKKworCQlkYmV4aXRfY29kZSA9IHJlc3RvcmVPbmVEYXRhYmFz ZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCB0cnVlKTsKKworCQkvKiBTdG9yZSBleGl0 X2NvZGUgdG8gcmVwb3J0IGl0IGJhY2suICovCisJCWlmIChleGl0X2NvZGUgPT0gMCAmJiBkYmV4 aXRfY29kZSAhPSAwKQorCQkJZXhpdF9jb2RlID0gZGJleGl0X2NvZGU7CisKKwkJLyogU2V0IGNy ZWF0ZURCIG9wdGlvbiB0byBjcmVhdGUgbmV3IGRhdGFiYXNlLiAqLworCQlpZiAob3B0cy0+Y3Bh cmFtcy5kYm5hbWUgJiYKKwkJCQlwZ19zdHJjYXNlY21wKGRib2lkX2NlbGwtPmRiX25hbWUsIG9w dHMtPmNwYXJhbXMuZGJuYW1lKSA9PSAwKQorCQkJb3B0cy0+Y3JlYXRlREIgPSAxOworCisJCWRi b2lkX2NlbGwgPSBkYm9pZF9jZWxsLT5uZXh0OworCX0gLyogZW5kIHdoaWxlICovCisKKwkvKiBM b2cgbnVtYmVyIG9mIHByb2Nlc3NlZCBkYXRhYmFzZXMuKi8KKwlwZ19sb2dfaW5mbygibnVtYmVy IG9mIHJlc3RvcmVkIGRhdGFiYXNlcyBhcmUgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisKKwkvKiBG cmVlIGRibmFtZSBhbmQgZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9k ZWxldGUoJmRibmFtZV9vaWRfbGlzdCk7CisKKwlyZXR1cm4gZXhpdF9jb2RlOworfQorCisvKgor ICogZXhlY3V0ZV9nbG9iYWxfc3FsX2NvbW1hbmRzCisgKgorICogVGhpcyB3aWxsIG9wZW4gZ2xv YmFsLmRhdCBmaWxlIGFuZCB3aWxsIGV4ZWN1dGUgYWxsIGdsb2JhbCBzcWwgY29tbWFuZHMgb25l CisgKiBieSBvbmUgc3RhdGVtZW50LgorICogU2VtaWNvbG9uIGlzIGNvbnNpZGVyZWQgYXMgc3Rh dGVtZW50IHRlcm1pbmF0b3IuICBJZiBvdXRmaWxlIGlzIHBhc3NlZCwgdGhlbgorICogdGhpcyB3 aWxsIGNvcHkgYWxsIHNxbCBjb21tYW5kcyBpbnRvIG91dGZpbGUgcmF0aGVyIHRoZW4gZXhlY3V0 aW5nIHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkCitleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMo UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgY29uc3QgY2hhciAqb3V0Zmls ZSkKK3sKKwljaGFyICAgICAgICAgICAgZ2xvYmFsX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCVBH cmVzdWx0CQkqcmVzdWx0OworCVN0cmluZ0luZm9EYXRhCXNxbHN0YXRlbWVudDsKKwlGSUxFCQkJ KnBmaWxlOworCisJc25wcmludGYoZ2xvYmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xv YmFsLmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8qIE5vdyBvcGVuIGdsb2JhbC5kYXQgZmlsZS4g Ki8KKwlwZmlsZSA9IGZvcGVuKGdsb2JhbF9maWxlX3BhdGgsICJyIik7CisKKwlpZiAocGZpbGUg PT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTogJXMi LCBzdHJlcnJvcihlcnJubykpOworCisJLyoKKwkgKiBJZiBvdXRmaWxlIGlzIGdpdmVuLCB0aGVu IGp1c3QgY29weSBhbGwgZ2xvYmFsLmRhdCBmaWxlIGRhdGEgaW50bworCSAqIG91dGZpbGUuCisJ ICovCisJaWYgKG91dGZpbGUpCisJeworCQljaGFyICAgICAgICAgICAgb3V0X2ZpbGVfcGF0aFtN QVhQR1BBVEhdOworCQlGSUxFICAgICAgICAgICAgKm9maWxlOworCQlpbnQJCQkJYzsKKworCQlz bnByaW50ZihvdXRfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIG91dGZpbGUpOworCisJCW9m aWxlID0gZm9wZW4ob3V0X2ZpbGVfcGF0aCwgInciKTsKKworCQlpZiAob2ZpbGUgPT0gTlVMTCkK KwkJeworCQkJZmNsb3NlKHBmaWxlKTsKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxl OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCX0KKworCQkvKiBOb3cgYXBwZW5kIGdsb2JhbC5k YXQgaW5vdCBvdXRmaWxlLiAqLworCQl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikK KwkJeworCQkJZnB1dGMoYywgb2ZpbGUpOworCQl9CisKKwkJZmNsb3NlKHBmaWxlKTsKKwkJZmNs b3NlKG9maWxlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEluaXQgc3Fsc3RhdGVtZW50IHRvIGFw cGVuZCBjb21tYW5kcyAqLworCWluaXRTdHJpbmdJbmZvKCZzcWxzdGF0ZW1lbnQpOworCisJLyog UHJvY2VzcyBmaWxlIHRpbGwgRU9GIGFuZCBleGVjdXRlIHNxbCBzdGF0ZW1lbnRzICovCisJd2hp bGUgKFJlYWRPbmVTdGF0ZW1lbnQoJnNxbHN0YXRlbWVudCwgcGZpbGUpICE9IEVPRikKKwl7CisJ CXJlc3VsdCA9IFBRZXhlYyhjb25uLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisKKwkJc3dpdGNoIChQ UXJlc3VsdFN0YXR1cyhyZXN1bHQpKQorCQl7CisJCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6CisJ CQljYXNlIFBHUkVTX1RVUExFU19PSzoKKwkJCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6CisJCQkJ YnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGV4ZWN1dGUg cXVlcnk6ICVzIFxuQ29tbWFuZCB3YXM6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHNxbHN0 YXRlbWVudC5kYXRhKTsKKwkJfQorCQlQUWNsZWFyKHJlc3VsdCk7CisJfQorCisJZmNsb3NlKHBm aWxlKTsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQKKyAqCisgKiBhcHBl bmRzIGEgbm9kZSB0byB0aGUgbGlzdCBpbiB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZAorc2lt cGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBk Yl9vaWQsIGNvbnN0IGNoYXIgKmRibmFtZSkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxs ICpjZWxsOworCisJY2VsbCA9IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbCk7CisKKwljZWxsLT5uZXh0ID0gTlVMTDsKKwljZWxsLT5kYl9vaWQgPSBkYl9vaWQ7CisJ Y2VsbC0+ZGJfbmFtZSA9IHBnX3N0cmR1cChkYm5hbWUpOworCisJaWYgKGxpc3QtPnRhaWwpCisJ CWxpc3QtPnRhaWwtPm5leHQgPSBjZWxsOworCWVsc2UKKwkJbGlzdC0+aGVhZCA9IGNlbGw7CisJ bGlzdC0+dGFpbCA9IGNlbGw7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9k ZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBkYm5hbWUgYW5kIGRib2lkIGxpc3Qu CisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxl RGF0YWJhc2VPaWRMaXN0ICpsaXN0KQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmNl bGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5leHRjZWxsID0g TlVMTDsKKworCXdoaWxlIChjZWxsKQorCXsKKwkJbmV4dGNlbGwgPSBjZWxsLT5uZXh0OworCQlw ZnJlZSAoY2VsbCk7CisJCWNlbGwgPSBuZXh0Y2VsbDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVM TDsKKwlsaXN0LT50YWlsID0gTlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9zdHJpbmdfZnVsbF9s aXN0X2RlbGV0ZQorICoKKyAqIGRlbGV0ZSBhbGwgY2VsbCBmcm9tIHN0cmluZyBsaXN0LgorICov CitzdGF0aWMgdm9pZAorc2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmlu Z0xpc3QgKmxpc3QpCit7CisJU2ltcGxlU3RyaW5nTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFk OworCVNpbXBsZVN0cmluZ0xpc3RDZWxsICAgICpjZWxsbmV4dCA9IE5VTEw7CisKKwl3aGlsZSAo Y2VsbCkKKwl7CisJCWNlbGxuZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJCWNl bGwgPSBjZWxsbmV4dDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0g TlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxl dGUgY2VsbCBmcm9tIGRhdGFiYXNlIGFuZCBvaWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3Np bXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsLAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxs ICpwcmV2KQoreworCWlmIChwcmV2ID09IE5VTEwpCisJeworCQlsaXN0LT5oZWFkID0gY2VsbC0+ bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJfQorCWVsc2UKKwl7CisJCXByZXYtPm5leHQgPSBjZWxs LT5uZXh0OworCQlwZnJlZShjZWxsKTsKKwl9Cit9CisKKy8qCisgKiBpc19mdWxsX3BhdHRlcm4K KyAqCisgKiBSZXR1cm5zIHRydWUgaWYgd2UgY2FuIGNvbnN0dWN0IDFzdCBzdHJpbmcgZnJvbSBn aXZlbiBwYXR0ZXJuLgorICoKKyAqLworc3RhdGljIGJvb2wKK2lzX2Z1bGxfcGF0dGVybihQR2Nv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHRybikKK3sKKwlQUUV4cEJ1 ZmZlcgkJcXVlcnk7CisJUEdyZXN1bHQJCSpyZXN1bHQ7CisKKwlxdWVyeSA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CisKKwlwcmludGZQUUV4cEJ1ZmZlcihxdWVyeSwKKwkJCSJTRUxFQ1Qgc3Vic3Ry aW5nICggIgorCQkJIiAnJXMnICwgIgorCQkJIiAnJXMnICkgIiwgc3RyLCBwdHJuKTsKKworICAg cmVzdWx0ID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsKKworCWlmIChQUXJlc3Vs dFN0YXR1cyhyZXN1bHQpID09IFBHUkVTX1RVUExFU19PSykKKwl7CisJCWlmIChQUW50dXBsZXMo cmVzdWx0KSA9PSAxKQorCQl7CisJCQljb25zdCBjaGFyCSpvdXRzdHI7CisKKwkJCW91dHN0ciA9 IFBRZ2V0dmFsdWUocmVzdWx0LCAwLCAwKTsKKworCQkJUFFjbGVhcihyZXN1bHQpOworCQkJZGVz dHJveVBRRXhwQnVmZmVyKHF1ZXJ5KTsKKworCQkJLyoKKwkJCSAqIElmIG91dHB1dCBzdHJpbmcg b2Ygc3Vic3RyaW5nIGZ1bmN0aW9uIGlzIG1hdGNoZXMgd2l0aCBzdHIsIHRoZW4KKwkJCSAqIHdl IGNhbiBjb25zdHJ1Y3Qgc3RyIGZyb20gcGF0dGVybi4KKwkJCSAqLworCQkJaWYgKG91dHN0ciAm JiBwZ19zdHJjYXNlY21wKG91dHN0ciwgc3RyKSA9PSAwKQorCQkJCXJldHVybiB0cnVlOworCQkJ ZWxzZQorCQkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwllbHNlCisJCXBnX2xvZ19lcnJvcigi Y291bGQgbm90IGV4ZWN1dGUgcXVlcnk6ICVzIFxuQ29tbWFuZCB3YXM6ICVzIiwgUFFlcnJvck1l c3NhZ2UoY29ubiksIHF1ZXJ5LT5kYXRhKTsKKworCVBRY2xlYXIocmVzdWx0KTsKKwlkZXN0cm95 UFFFeHBCdWZmZXIocXVlcnkpOworCisJcmV0dXJuIGZhbHNlOworfQotLSAKMi4zOS4zCgo= --000000000000d37318062b3cec2e--