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 1vGsdB-006p7e-Ve for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 05:33:57 +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 1vGsdA-005dsB-Pb for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 05:33:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vGsdA-005ds2-9p for pgsql-hackers@lists.postgresql.org; Thu, 06 Nov 2025 05:33:55 +0000 Received: from mail-qt1-x82c.google.com ([2607:f8b0:4864:20::82c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vGsd6-006Fe9-1k for pgsql-hackers@lists.postgresql.org; Thu, 06 Nov 2025 05:33:55 +0000 Received: by mail-qt1-x82c.google.com with SMTP id d75a77b69052e-4e8850b09eeso4581811cf.0 for ; Wed, 05 Nov 2025 21:33:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762407230; x=1763012030; 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=iAx0FfhM13G3nBy6aEOz7wYwDGEj+dMihKRT/UQDvho=; b=Bp6PdCDcbUV4REOn+4kbbLQqUhz6nNqN3PdTpRm0d4f80Y5s0/QctwJO3DSB0WSsps YoN7qjQ5ggVWztnkdHQRXbkg5uaH1NnynsRHZ+As9hyhlfybLGfFy8dX5Kdc8dNt19ud 4BQHuIe+CeWYkN74bqp+D8TQz2C1Cr0Cmd2suC4d9NY0KUy9qQwvKJdAJSVzexNDatYW zvJuFtBVY+Od1Iuv1qHWz6m6U3mfq7lZISg5PXq9hDqhYzvDSu07NIKcAGS0mnkWyMMz 1fm42tWDfJlNq2/bqDUxnt68hgQRevbSj1mmXbG90O4Qw6w2SRAxKNDXr1kgmXfXLkv5 higw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762407230; x=1763012030; 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=iAx0FfhM13G3nBy6aEOz7wYwDGEj+dMihKRT/UQDvho=; b=MzTGQlYqtSif8xhJSvSxdJKmwtsHN6BKmxsaSRc7jxU8MgEQBmekzGBK2VSr2PoQ52 qFNZT+jmTYX4Yuwh2tZyyByRGcfmNXCbQ1Fm7BybCbzZhjKl0KMKvc+uW7wibCSlevNV zrHchBQzfKxFKyMC9Vu6k3J8bTDHNi9gvNV+SJJ4uQukb4oqSW0a1HKHWJwr/Um1gPz8 kGEixTtxjvZYQYBGxdAOVo6LBtyYfg1sIKqIp0HcRU8w7ni2kpVVqc7L4I+fer3G17rE /cMPBWyUmmtaKNlM5SSloSh2CDO2sGzBe7XUBAHAx9UjHHiqXOXZXZWbbwmpP1SVD4py wvsA== X-Gm-Message-State: AOJu0YxBkpy4g473RJ6g6+wUzMPfoP86cdxx30ZLnODOlItKpasi//Hl V4A64bnHYM5+GsEvfDHeputDDTFJIghFxb+Ode7MTPjmgEPvZgpDk49+7JBXOEBcaqXx7/IulBN XL50hXi9YDOC+zy0X4WtTXjXruLpdRDU= X-Gm-Gg: ASbGncvGR5D1Ldmu3QyUQAchI8syRkN878ALUZPhZZNBoihETWKlnHIgsw+qAzvCwmJ KhQVc9UHIQ2AUc0atb4GF7FO/F3MiI55QS4cV3ui0lozbL6Ye33vQYYxt+mOiRgS4L4R3c8rVvn e5d/NJ+tfhiv522WHpb+Jk2CHOnpi6ChhtT5ASGEBsJwNLYH5LfzlSkYQXRX1yzjOVZpRZrzSEi /kxPsDbdEa6qSdB95949lYs/LQJIzt4YgIMZGZli696fO/57NDmhZ9hjGMfwuQ= X-Google-Smtp-Source: AGHT+IHnNPWwEgC9XPLZmp0cUjYP9/jw5P/w0+JycSYCWCCjjYkYhMVMmHVl9gV8c1cuVYUigS3LBxXLs+1AfNzrk1E= X-Received: by 2002:ac8:5a49:0:b0:4ec:f18f:f7c7 with SMTP id d75a77b69052e-4ed7212a408mr84035441cf.12.1762407230344; Wed, 05 Nov 2025 21:33:50 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <20250722005339.ca.nmisch@google.com> <20250725162141.6f.nmisch@google.com> <2225040.1753477169@sss.pgh.pa.us> <20250727235628.e2.nmisch@google.com> <8f2ad50b-ebb7-4adc-997e-25e0ad96ff34@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Thu, 6 Nov 2025 11:03:38 +0530 X-Gm-Features: AWmQ_bkz2ce8_cTUDj1VtZHG6HI_9Wn5U11eKX8RSCkvr7LZj2WYB3Vf4ogr7x8 Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Vaibhav Dalvi Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000ea60e00642e66882" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ea60e00642e66882 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Vaibhav, Tushar and Andrew for the review and testing. On Mon, 3 Nov 2025 at 17:30, Vaibhav Dalvi wrote: > > Hi Mahendra, > > I have a few more review comments regarding the patch: > > 1. Is the following change in `src/bin/pg_dump/connectdb.c` intentional? > > ``` > --- a/src/bin/pg_dump/connectdb.c > +++ b/src/bin/pg_dump/connectdb.c Yes, we need this. If there is any error, then we were trying to disconnect the database in 2 places so we were getting a crash. I will try to reproduce crashe without this patch and will respond. On Tue, 4 Nov 2025 at 18:23, tushar wrote: > Thanks Mahendra, I am getting a segmentation fault against v05 patch. > > [edb@1a1c15437e7c bin]$ ./pg_dumpall -Ft --file a.3 -v > pg_dumpall: executing SELECT pg_catalog.set_config('search_path', '', fal= se); > Segmentation fault > > Issue is coming with all output file formats -F[t/c/d] except plain > > regards, Thanks for the report. Fixed, On Tue, 4 Nov 2025 at 22:25, Andrew Dunstan wrote: > Yeah, I don't think we need to dump the timestamp in non-text modes. This= fix worked for me: > > > diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c > index 601b9f9738e..f66cc26d9a2 100644 > --- a/src/bin/pg_dump/pg_dumpall.c > +++ b/src/bin/pg_dump/pg_dumpall.c > @@ -638,7 +638,7 @@ main(int argc, char *argv[]) > if (quote_all_identifiers) > executeCommand(conn, "SET quote_all_identifiers =3D true"); > > - if (verbose) > + if (verbose && archDumpFormat =3D=3D archNull) > dumpTimestamp("Started on"); Thanks Andrew. Yes, we should not dump timestamp in non-text modes. On Wed, 5 Nov 2025 at 18:47, Vaibhav Dalvi wrote: > > Hi Mahendra, > > Here are a few more comments following my review of the patch: > > ### 1\. Incorrect Comment for `-g` (globals-only) Option > > The comment for the `-g` case in the code states that it restores the > `global.dat` file. However, in the non-text dump output, I only see the > following files: `databases`, `map.dat`, and `toc.dat`. Fixed. > > ```c > + case 'g': > + /* restore only global.dat file from directory */ > + globals_only =3D true; > + break; Fixed. > ``` > > Please update this comment to accurately reflect the file being restored > (e.g., `toc.dat` or the global objects within the archive). Fixed. > > ### 2\. Incorrect Order of `case` Statements in `pg_restore.c` > > The new `case 7` statement in `pg_restore.c` appears to be > inserted before `case 6`, disrupting the numerical order. > > ```c > + case 7: /* database patterns to skip */ > + simple_string_list_append(&db_exclude_patterns, optarg); > + break; > > case 6: > opts->restrict_key =3D pg_strdup(optarg); > ``` > > Please re-order the `case` statements so they follow ascending > numerical order. Fixed. > > ### 3\. Missing Example in SGML Documentation > > The SGML documentation for `pg_dumpall` is missing an explicit > example demonstrating its use with non-text formats (e.g., directory form= at). > It would be beneficial to include a clear example for this new feature. I think we don't add such cases in doc. We already added test cases in code. If others also feel that we should add a test case in SGML, then I will update the doc with the test case. > > ### 4\. Cosmetic Issues > > Please address the following minor stylistic points: > > Please ensure the function signatures > adhere to standard coding style, particularly for line wrapping. > The following lines seem to have inconsistent indentation: > > ```c > static int restore_global_objects(const char *inputFileSpec, RestoreOptio= ns *opts, > int numWorkers, bool append_data, int num, bool globals_only); > static int restore_all_databases(const char *inputFileSpec, > SimpleStringList db_exclude_patterns, RestoreOptions *opts, int numWorker= s); > ``` > > Please fix instances where the 80-character line limit is > crossed, such as in the example below: Fixed. > > ```c > n_errors =3D restore_one_database(subdirpath, opts, numWorkers, true, 1, = false); > ``` > > I believe this concludes my formal review. > > Thanks, > Vaibhav Dalvi > > On Wed, Nov 5, 2025 at 12:29=E2=80=AFPM Vaibhav Dalvi wrote: >> >> Hi Mahendra, >> >> Thank you for the fix. Please find my further review comments below. >> >> ### Restrict-Key Option >> >> The `--restrict-key` option is currently being accepted by >> `pg_dumpall` even when non-plain formats are specified, >> which contradicts its intended use only with the plain format. >> >> For example: >> >> ``` >> $ ./db/bin/pg_dump --format=3Dd -f testdump_dir --restrict-key=3DRESTRIC= T_KEY >> pg_dump: error: option --restrict-key can only be used with --format=3Dp= lain >> $ ./db/bin/pg_dumpall --format=3Dd -f testdump_dir --restrict-key=3DREST= RICT_KEY >> pg_dumpall: error: invalid restrict key >> ``` >> >> I have attached a delta patch that addresses the issue with the >> `--restrict-key` option. It would be beneficial to include a dedicated >> test case for this check. We should dump restrict-key with all modes as we need to restore with the "-f file" option in text mode. Ex: pg_dumpall --format=3Dd -f testdump_dir and restore::: pg_restore testdump_dir -d dabasename -C -f testdumpfile (In testdumpfile, we will generate commands from archive dump) So I am not merging this delat patch. >> >> ### Use of Dump Options Structure (dopt) >> >> Please ensure consistency by utilizing the main dump options >> structure (`dopt`) instead of declaring and using individual variables >> where the structure already provides fields. For example, the >> `output_clean` variable seems redundant here: >> >> ```c >> case 'c': >> output_clean =3D true; >> dopt.outputClean =3D 1; >> break; output_clean is not added by this patch. I will analyse this comment and will respond in the next update. >> ``` >> >> In my attached delta file, I have replaced the unnecessary >> `restrict_key` variable with `dopt.restrict_key`. This is also not part of this patch. If you feel to add this in DOPT, please suggest in separate thread. >> >> ### Cosmetic Issues >> >> 1. Please review the spacing around the pointer: >> ```c >> + ((ArchiveHandle * )fout) ->connection =3D conn; >> + ((ArchiveHandle * ) fout) -> public.numWorkers =3D 1; Fixed. >> ``` >> 2. Please be consistent with the punctuation of single-line comments; >> some end with a full stop (`.`) and others do not. Based on nearby code comments, I made changes. I will try to fix these inconsistencies.. >> 3. In the SGML documentation changes, some new statements start >> with one space, and others start with two. Please adhere to a single >> standard for indentation across the patch. Okay. I will fix these. >> >> Regards, >> Vaibhav >> EnterpriseDB >> >> On Mon, Nov 3, 2025 at 5:24=E2=80=AFPM Mahendra Singh Thalor wrote: >>> >>> On Mon, 3 Nov 2025 at 12:06, Vaibhav Dalvi wrote: >>> > >>> > Hi Mahendra, >>> > >>> > Thank you for your work on this feature. >>> > I have just begun reviewing the latest patch and >>> > encountered the following errors during the initial setup: >>> > >>> > ``` >>> > $ ./db/bin/pg_restore testdump_dir -C -d postgres -F d -p 5556 >>> > pg_restore: error: could not execute query: ERROR: syntax error at or= near "\\" >>> > LINE 1: \restrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTCjCj.= .. >>> > ^ >>> > Command was: \restrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygT= CjCj9vg3Xxys1b3hb >>> > >>> > pg_restore: error: could not execute query: ERROR: syntax error at or= near "\\" >>> > LINE 1: \unrestrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTCj.= .. >>> > ^ >>> > Command was: \unrestrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDy= gTCjCj9vg3Xxys1b3hb >>> > >>> > pg_restore: error: could not execute query: ERROR: syntax error at or= near "\\" >>> > LINE 1: \connect template1 >>> > ^ >>> > Command was: \connect template1 >>> > >>> > pg_restore: error: could not execute query: ERROR: syntax error at or= near "\\" >>> > LINE 1: \connect postgres >>> > ^ >>> > Command was: \connect postgres >>> > ``` >>> > To cross-check tried with plain dump(with pg_dumpall) and >>> > restored(SQL file restore) without patch and didn't get above >>> > connection errors. >>> > >>> > It appears there might be an issue with the dump file itself. >>> > Please note that this is my first observation as I have just >>> > started the review. I will continue with my assessment. >>> > >>> > Regards, >>> > Vaibhav Dalvi >>> > EnterpriseDB >>> >>> Thanks Vaibhav for the review. >>> This change was added by me in v04. Only in the case of a file, we shou= ld restore these commands. Attached patch is fixing the same. >>> >>> If we dump and restore the same file with the same user, then we will g= et an error of ROLE CREATE as the same role is already created. I think, ei= ther we can ignore this error, or we can keep it as a restore can be done w= ith different users. >>>> >>>> mst@localhost bin]$ ./pg_restore d1 -C -d postgres >>>> pg_restore: error: could not execute query: ERROR: role "mst" already= exists >>>> Command was: CREATE ROLE mst; >>>> ALTER ROLE mst WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLIC= ATION BYPASSRLS; >>>> >>>> >>>> pg_restore: warning: errors ignored on restore: 1 >>> >>> >>> >>> > >>> > On Fri, Oct 31, 2025 at 2:51=E2=80=AFPM Mahendra Singh Thalor wrote: >>> >> >>> >> On Tue, 28 Oct 2025 at 11:32, Mahendra Singh Thalor wrote: >>> >> > >>> >> > On Thu, 16 Oct 2025 at 16:24, Mahendra Singh Thalor wrote: >>> >> > > >>> >> > > On Wed, 15 Oct 2025 at 23:05, Mahendra Singh Thalor wrote: >>> >> > > > >>> >> > > > On Sun, 24 Aug 2025 at 22:12, Andrew Dunstan wrote: >>> >> > > > > >>> >> > > > > >>> >> > > > > On 2025-08-23 Sa 9:08 PM, Noah Misch wrote: >>> >> > > > > >>> >> > > > > On Wed, Jul 30, 2025 at 02:51:59PM -0400, Andrew Dunstan wro= te: >>> >> > > > > >>> >> > > > > OK, now that's reverted we should discuss how to proceed. I = had two thoughts >>> >> > > > > - we could use invent a JSON format for the globals, or we c= ould just use >>> >> > > > > the existing archive format. I think the archive format is p= retty flexible, >>> >> > > > > and should be able to accommodate this. The downside is it's= not humanly >>> >> > > > > readable. The upside is that we don't need to do anything sp= ecial either to >>> >> > > > > write it or parse it. >>> >> > > > > >>> >> > > > > I would first try to use the existing archiver API, because = that makes it >>> >> > > > > harder to miss bugs. Any tension between that API and pg_du= mpall is likely to >>> >> > > > > have corresponding tension on the pg_restore side. Resolvin= g that tension >>> >> > > > > will reveal much of the project's scope that remained hidden= during the v18 >>> >> > > > > attempt. Perhaps more important than that, using the archiv= er API means >>> >> > > > > future pg_dump and pg_restore options are more likely to coo= perate properly >>> >> > > > > with $SUBJECT. In other words, I want it to be hard to add = pg_dump/pg_restore >>> >> > > > > features that malfunction only for $SUBJECT archives. The s= trength of the >>> >> > > > > archiver architecture shows in how rarely new features need = format-specific >>> >> > > > > logic and how rarely format-specific bugs get reported. We'= ve had little or >>> >> > > > > no trouble with e.g. bugs that appear in -Fd but not in -Fc. >>> >> > > > > >>> >> > > > > >>> >> > > > > Yeah, that's what we're going to try. >>> >> > > > > >>> >> > > > > >>> >> > > > > cheers >>> >> > > > > >>> >> > > > > >>> >> > > > > andrew >>> >> > > > > >>> >> > > > > -- >>> >> > > > > Andrew Dunstan >>> >> > > > > EDB: https://www.enterprisedb.com >>> >> > > > >>> >> > > > Thanks Andrew, Noah and all others for feedback. >>> >> > > > >>> >> > > > Based on the above suggestions and discussions, I removed sql = commands >>> >> > > > from the global.dat file. For global commands, now we are maki= ng >>> >> > > > toc.dat/toc.dmp/toc.tar file based on format specified and bas= ed on >>> >> > > > format specified, we are making archive entries for these glob= al >>> >> > > > commands. By this approach, we removed the hard-coded parsing = part of >>> >> > > > the global.dat file and we are able to skip DROP DATABASE with= the >>> >> > > > globals-only option. >>> >> > > > >>> >> > > > Here, I am attaching a patch for review, testing and feedback.= This is >>> >> > > > a WIP patch. I will do some more code cleanup and will add som= e more >>> >> > > > comments also. Please review this and let me know design level >>> >> > > > feedback. Thanks Tushar Ahuja for some internal testing and fe= edback. >>> >> > > > >>> >> > > >>> >> > > Hi, >>> >> > > Here, I am attaching an updated patch. In offline discussion, An= drew >>> >> > > reported some test-case failures(Thanks Andrew). I fixed those. >>> >> > > Please let me know feedback for the patch. >>> >> > > >>> >> > >>> >> > Hi, >>> >> > Here I am attaching a re-based patch as v02 was failing on head. >>> >> > Thanks Tushar for the testing. >>> >> > Please review this and let me know feedback. >>> >> > >>> >> >>> >> Hi all, >>> >> Here I am attaching an updated patch for review and testing. Based o= n >>> >> some offline comments by Andrew, I did some code cleanup. >>> >> Please consider this patch for feedback. >>> >> >>> >> -- >>> >> Thanks and Regards >>> >> Mahendra Singh Thalor >>> >> EnterpriseDB: http://www.enterprisedb.com >>> >>> >>> >>> -- >>> Thanks and Regards >>> Mahendra Singh Thalor >>> EnterpriseDB: http://www.enterprisedb.com Here, I am attaching an updated patch for the review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000ea60e00642e66882 Content-Type: application/octet-stream; name="v06_06112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v06_06112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhmzr04h0 RnJvbSAzNTJiN2FiZTY4MGFjNzY3NDk5ZWEzYmZjYTA3Zjg2YjlmMDYzN2ZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaGFsb3JNYWhlbmRyYSA8bWFoaTZydW5AZ21haWwuY29tPgpE YXRlOiBUaHUsIDYgTm92IDIwMjUgMTA6MzM6MTYgKzA1MzAKU3ViamVjdDogW1BBVENIXSBOb24g dGV4dCBtb2RlcyBmb3IgcGdfZHVtcGFsbCwgY29ycmVzcG9uZGluZ2x5IGNoYW5nZSAKIHBnX3Jl c3RvcmUKCiAgICBwZ19kdW1wYWxsIGFjcXVpcmVzIGEgbmV3IC1GLy0tZm9ybWF0IG9wdGlvbiwg d2l0aCB0aGUgc2FtZSBtZWFuaW5ncyBhcwogICAgcGdfZHVtcC4gVGhlIGRlZmF1bHQgaXMgcCwg bWVhbmluZyBwbGFpbiB0ZXh0LiBGb3IgYW55IG90aGVyIHZhbHVlLCBhCiAgICBkaXJlY3Rvcnkg aXMgY3JlYXRlZCBjb250YWluaW5nIHR3byBmaWxlcywgdG9jLmRhdC8uZG1wLy50YXIgYW5kIG1h cC5kYXQuIFRoZQogICAgZmlyc3QgY29udGFpbnMgY29tbWFuZHMgcmVzdG9yaW5nIHRoZSBnbG9i YWwgZGF0YSBiYXNlZCBvbiAtRiwgYW5kIHRoZSBzZWNvbmQKICAgIGNvbnRhaW5zIGEgbWFwIGZy b20gb2lkcyB0byBkYXRhYmFzZSBuYW1lcy4gSXQgd2lsbCBhbHNvIGNvbnRhaW4gYQogICAgc3Vi ZGlyZWN0b3J5IGNhbGxlZCBkYXRhYmFzZXMsIGluc2lkZSB3aGljaCBpdCB3aWxsIGNyZWF0ZSBh cmNoaXZlcyBpbgogICAgdGhlIHNwZWNpZmllZCBmb3JtYXQsIG5hbWVkIHVzaW5nIHRoZSBkYXRh YmFzZSBvaWRzLgoKICAgIEluIHRoZXNlIGNhc2VzcyB0aGUgLWYgYXJndW1lbnQgaXMgcmVxdWly ZWQuCgogICAgSWYgcGdfcmVzdG9yZSBlbmNvdW50ZXJzIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcg bWFwLmRhdCwKICAgIGl0IHJlc3RvcmVzIHRoZSBnbG9iYWwgc2V0dGluZ3MgZnJvbSB0b2MuZGF0 Ly5kbXAvLnRhciBpZiBleGlzdCwgYW5kIHRoZW4KICAgIHJlc3RvcmVzIGVhY2ggZGF0YWJhc2Uu CgogICAgcGdfcmVzdG9yZSBhY3F1aXJlcyB0d28gbmV3IG9wdGlvbnM6IC1nLy0tZ2xvYmFscy1v bmx5IHdoaWNoIHN1cHByZXNzZXMKICAgIHJlc3RvcmF0aW9uIG9mIGFueSBkYXRhYmFzZXMsIGFu ZCAtLWV4Y2x1ZGUtZGF0YWJhc2Ugd2hpY2ggaW5oaWJpdHMKICAgIHJlc3RvcmF0aW9uIG9mIHBh cnRpY3VhbHIgZGF0YWJhc2UocykgaW4gdGhlIHNhbWUgd2F5IHRoZSBzYW1lIG9wdGlvbgogICAg d29ya3MgaW4gcGdfZHVtcGFsbC4KCnYwNgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFs bC5zZ21sICAgICB8ICA4OSArKystCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCAg ICAgfCAgNjYgKystCiBzcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMgICAgICAgICAgfCAgIDEg LQogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4v cGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8ICAxMCArCiBzcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuYyB8ICAzMSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIHwg ICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8ICAgMiArLQogc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1 bXAvcGdfZHVtcGFsbC5jICAgICAgICAgfCA2MjEgKysrKysrKysrKysrKysrKysrKysrKy0tLS0t CiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgfCA1OTUgKysrKysrKysrKysr KysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgIDEw ICsKIHNyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsICB8IDM5NiArKysrKysrKysr KysrKysrKwogMTQgZmlsZXMgY2hhbmdlZCwgMTY4MCBpbnNlcnRpb25zKCspLCAxNDcgZGVsZXRp b25zKC0pCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9iaW4vcGdfZHVtcC90LzAw MV9iYXNpYy5wbAogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19k dW1wYWxsLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCA5ZjYzOWY2MWRiMC4uNDA2 M2U4OGQzODggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xNiw3ICsxNiwxMCBAQCBQ b3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5wZ19k dW1wYWxsPC9yZWZuYW1lPgotICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBzY3JpcHQgZmls ZTwvcmVmcHVycG9zZT4KKworICA8cmVmcHVycG9zZT4KKyAgIGV4cG9ydCBhIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2Ny aXB0IG9yIHRvIG90aGVyIGZvcm1hdHMKKyAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4K IAogIDxyZWZzeW5vcHNpc2Rpdj4KQEAgLTMzLDcgKzM2LDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVu dGF0aW9uCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9u PiBpcyBhIHV0aWxpdHkgZm9yIHdyaXRpbmcgb3V0CiAgICAoPHF1b3RlPmR1bXBpbmc8L3F1b3Rl PikgYWxsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzCi0g ICBvZiBhIGNsdXN0ZXIgaW50byBvbmUgc2NyaXB0IGZpbGUuICBUaGUgc2NyaXB0IGZpbGUgY29u dGFpbnMKKyAgIG9mIGEgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQgZmlsZSBvciBhbiBhcmNo aXZlLiAgVGhlIG91dHB1dCBjb250YWlucwogICAgPGFjcm9ueW0+U1FMPC9hY3JvbnltPiBjb21t YW5kcyB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IHRvIDx4cmVmCiAgICBsaW5rZW5kPSJhcHAt cHNxbCIvPiB0byByZXN0b3JlIHRoZSBkYXRhYmFzZXMuICBJdCBkb2VzIHRoaXMgYnkKICAgIGNh bGxpbmcgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZWFjaCBkYXRhYmFzZSBpbiB0 aGUgY2x1c3Rlci4KQEAgLTUyLDExICs1NSwxNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K ICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIFNRTCBzY3JpcHQgd2lsbCBiZSB3cml0dGVu IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBVc2UgdGhlCisgICBQbGFpbiB0ZXh0IFNRTCBzY3Jp cHRzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQogICAg PG9wdGlvbj4tZjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiBvcHRpb24gb3Igc2hl bGwgb3BlcmF0b3JzIHRvCiAgICByZWRpcmVjdCBpdCBpbnRvIGEgZmlsZS4KICAgPC9wYXJhPgog CisgIDxwYXJhPgorICAgQXJjaGl2ZXMgaW4gb3RoZXIgZm9ybWF0cyB3aWxsIGJlIHBsYWNlZCBp biBhIGRpcmVjdG9yeSBuYW1lZCB1c2luZyB0aGUKKyAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9w dGlvbj4tLWZpbGU8L29wdGlvbj4sIHdoaWNoIGlzIHJlcXVpcmVkIGluIHRoaXMgY2FzZS4KKyAg PC9wYXJhPgorCiAgIDxwYXJhPgogICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRp b24+IG5lZWRzIHRvIGNvbm5lY3Qgc2V2ZXJhbAogICB0aW1lcyB0byB0aGUgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBzZXJ2ZXIgKG9uY2UgcGVyCkBAIC0xMzEsMTAgKzEz OSw4NSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAgICAg U2VuZCBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0dGVkLCB0 aGUKICAgICAgICAgc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQuCisgICAgICAgIE5vdGU6IFRoaXMg b3B0aW9uIGNhbiBvbmx5IGJlIG9taXR0ZWQgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+ IGlzIHBsYWluCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJs aXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LUYg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRp b24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZnkgdGhlIGZvcm1hdCBv ZiBkdW1wIGZpbGVzLiAgSW4gcGxhaW4gZm9ybWF0LCBhbGwgdGhlIGR1bXAgZGF0YSBpcworICAg ICAgICBzZW50IGluIGEgc2luZ2xlIHRleHQgc3RyZWFtLiBUaGlzIGlzIHRoZSBkZWZhdWx0Lgor CisgICAgICAgIEluIGFsbCBvdGhlciBtb2RlcywgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2Fw cGxpY2F0aW9uPiBmaXJzdCBjcmVhdGVzIHR3byBmaWxlczoKKyAgICAgICAgPGZpbGVuYW1lPnRv Yy5kYXQvdG9jLmRtcC90b2MudGFyPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tYXAuZGF0PC9m aWxlbmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgc3BlY2lmaWVkIGJ5IDxvcHRpb24+ LS1maWxlPC9vcHRpb24+LgorICAgICAgICBUaGUgZmlyc3QgZmlsZSBjb250YWlucyBnbG9iYWwg ZGF0YSwgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMuIFRoZSBzZWNvbmQKKyAgICAgICAg Y29udGFpbnMgYSBtYXBwaW5nIGJldHdlZW4gZGF0YWJhc2Ugb2lkcyBhbmQgbmFtZXMuIFRoZXNl IGZpbGVzIGFyZSB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBs aWNhdGlvbj4uIERhdGEgZm9yIGluZGl2aWR1YWwgZGF0YWJhc2VzIGlzIHBsYWNlZCBpbgorICAg ICAgICA8ZmlsZW5hbWU+ZGF0YWJhc2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LCBuYW1lZCB1 c2luZyB0aGUgZGF0YWJhc2UncyA8dHlwZT5vaWQ8L3R5cGU+LgorCisgICAgICAgPHZhcmlhYmxl bGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRl cmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAg ICAgICAgT3V0cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9yIGVhY2ggZGF0YWJhc2Us CisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBkaXJl Y3RvcnkKKyAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBlPm9pZDwvdHlwZT4gYXMg aXRzIG5hbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAg ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0 ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxw YXJhPgorICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBzY3JpcHQgZmlsZSAodGhl IGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8 dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFs PmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBmb3IgZWFj aCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9y ZS4gVGhlIGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJvaWQu ZG1wPC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQorICAgICAgICAg ICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90ZXJt PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgdGFyLWZv cm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBmb3Ig aW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxsIGJlIG5h bWVkIDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5kYm9pZDwvdHlw ZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhlIGRhdGFiYXNlLgor ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAgICAgTm90ZTogc2VlIDx4 cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGRldGFpbHMKKyAgICAgICBvZiBob3cgdGhl IHZhcmlvdXMgbm9uIHBsYWluIHRleHQgYXJjaGl2ZXMgd29yay4KKworICAgICAgICA8L3BhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlz dGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0 ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVz dG9yZS5zZ21sCmluZGV4IGE0NjhhMzgzNjFhLi43NDk3YjUyN2FlNiAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19y ZXN0b3JlLnNnbWwKQEAgLTE4LDggKzE4LDkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAg IDxyZWZuYW1lPnBnX3Jlc3RvcmU8L3JlZm5hbWU+CiAKICAgPHJlZnB1cnBvc2U+Ci0gICByZXN0 b3JlIGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9t IGFuCi0gICBhcmNoaXZlIGZpbGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBw bGljYXRpb24+CisgICByZXN0b3JlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4gZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMKKyAgIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBn X2R1bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxp Y2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCkBAIC0zOCwxMyArMzks MTQgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICAgPHBhcmE+CiAgICA8YXBwbGljYXRp b24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3IgcmVzdG9yaW5nIGEK LSAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBh biBhcmNoaXZlCi0gICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gaW4g b25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3By b2R1Y3RuYW1lPiBkYXRhYmFzZSBvciBjbHVzdGVyIGZyb20gYW4gYXJjaGl2ZQorICAgY3JlYXRl ZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IG9yCisgICA8eHJlZiBsaW5rZW5kPSJh cHAtcGctZHVtcGFsbCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRz LiAgSXQgd2lsbCBpc3N1ZSB0aGUgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRo ZQotICAgZGF0YWJhc2UgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMg c2F2ZWQuICBUaGUKLSAgIGFyY2hpdmUgZmlsZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdf cmVzdG9yZTwvYXBwbGljYXRpb24+IHRvCisgICBkYXRhYmFzZSBvciBjbHVzdGVyIHRvIHRoZSBz dGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiBUaGUKKyAgIGFyY2hpdmVz IGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bwogICAg YmUgc2VsZWN0aXZlIGFib3V0IHdoYXQgaXMgcmVzdG9yZWQsIG9yIGV2ZW4gdG8gcmVvcmRlciB0 aGUgaXRlbXMKLSAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2ZSBmaWxlcyBh cmUgZGVzaWduZWQgdG8gYmUKKyAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2 ZSBmb3JtYXRzIGFyZSBkZXNpZ25lZCB0byBiZQogICAgcG9ydGFibGUgYWNyb3NzIGFyY2hpdGVj dHVyZXMuCiAgIDwvcGFyYT4KIApAQCAtNTIsMTAgKzU0LDE3IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBjYW4gb3Bl cmF0ZSBpbiB0d28gbW9kZXMuCiAgICBJZiBhIGRhdGFiYXNlIG5hbWUgaXMgc3BlY2lmaWVkLCA8 YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+CiAgICBjb25uZWN0cyB0byB0aGF0 IGRhdGFiYXNlIGFuZCByZXN0b3JlcyBhcmNoaXZlIGNvbnRlbnRzIGRpcmVjdGx5IGludG8KLSAg IHRoZSBkYXRhYmFzZS4gIE90aGVyd2lzZSwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUgU1FMCi0g ICBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCBh bmQgd3JpdHRlbgorICAgdGhlIGRhdGFiYXNlLgorICAgV2hlbiByZXN0b3JpbmcgZnJvbSBhIGR1 bXAgbWFkZSBieSA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LAorICAgZWFj aCBkYXRhYmFzZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZW4gdGhlIHJlc3RvcmF0aW9uIHdpbGwg YmUgcnVuIGluIHRoYXQKKyAgIGRhdGFiYXNlLgorCisgICBPdGhlcndpc2UsIHdoZW4gYSBkYXRh YmFzZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAor ICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIG9yIGNsdXN0ZXIg aXMgY3JlYXRlZCBhbmQgd3JpdHRlbgogICAgdG8gYSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1dC4g IFRoaXMgc2NyaXB0IG91dHB1dCBpcyBlcXVpdmFsZW50IHRvCi0gICB0aGUgcGxhaW4gdGV4dCBv dXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4uCisgICB0 aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBs aWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisK ICAgIFNvbWUgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG91dHB1dCBhcmUgdGhlcmVm b3JlIGFuYWxvZ291cyB0bwogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBv cHRpb25zLgogICA8L3BhcmE+CkBAIC0xNTIsNiArMTYxLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVu dGF0aW9uCiAgICAgICAgIGNvbW1hbmRzIHRoYXQgbWVudGlvbiB0aGlzIGRhdGFiYXNlLgogICAg ICAgICBBY2Nlc3MgcHJpdmlsZWdlcyBmb3IgdGhlIGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxzbyBy ZXN0b3JlZCwKICAgICAgICAgdW5sZXNzIDxvcHRpb24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3Bl Y2lmaWVkLgorICAgICAgICA8b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdo ZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcworICAgICAgICBmcm9tIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgogICAgICAg IDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtMjQ3LDYgKzI1OCwxOSBAQCBQb3N0Z3JlU1FM IGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5Pgog CisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90 ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGds b2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAg ICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJl bGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9s aXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAg ICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4 PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0taW5k ZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29w dGlvbj48L3Rlcm0+CkBAIC01OTEsNiArNjE1LDI4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlv bgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rl cm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIERvIG5vdCByZXN0 b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlwbGUg cGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAgPG9w dGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAgICAg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJh bWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0 aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNh dGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8eHJl ZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxlIGRh dGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAgICAg IGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUgY2Fy ZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVudCBz aGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgor ICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20g YW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlv bj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50 cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWx0ZXI9 PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48L29w dGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvY29ubmVjdGRiLmMgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKaW5kZXggZDU1ZDUz ZGJlZWEuLmY0NGE4YTQ1ZmNhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRi LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCkBAIC0yODcsNyArMjg3LDYgQEAg ZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCiAJewogCQlwZ19s b2dfZXJyb3IoInF1ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CiAJCXBn X2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7Ci0JCVBRZmluaXNoKGNv bm4pOwogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCBmM2M2Njlm NDg0ZS4uM2UyMWFhZjU3ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWls ZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEwMyw2ICsxMDMsNyBAQCB0 ZXN0cyArPSB7CiAgICAgICAndC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbCcsCiAgICAgICAndC8w MDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsJywKICAgICAgICd0LzAwNl9wZ19kdW1wX2NvbXByZXNz LnBsJywKKwkgICd0LzAwN19wZ19kdW1wYWxsLnBsJywKICAgICAgICd0LzAxMF9kdW1wX2Nvbm5z dHIucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxs ZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IDA4NmFkY2RjNTAyLi41OTc0 ZDY3MDZmZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMzMyw2ICszMzMsMTYgQEAgb25fZXhpdF9jbG9z ZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShhcmNoaXZlX2Nsb3NlX2Nv bm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKIH0KIAorLyoKKyAqIFdoZW4gcGdfcmVzdG9yZSBy ZXN0b3JlcyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gdXBkYXRlIGFscmVhZHkgYWRkZWQgZW50 cnkKKyAqIGludG8gYXJyYXkgZm9yIGNsZWFudXAuCisgKi8KK3ZvaWQKK3JlcGxhY2Vfb25fZXhp dF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFIWCA9IEFI WDsKK30KKwogLyoKICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9yIHNodXR0aW5nIGRvd24g ZGF0YWJhc2UgY29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vzc2VzIGNsZWFubHkuCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwLmgKaW5kZXggZDkwNDFkYWQ3MjAuLmY2MzFkOTQ1NDcyIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cC5oCkBAIC0zMTIsNyArMzEyLDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlvbnMoQXJj aGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAogZXh0ZXJu IHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpOwogCi1leHRl cm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgUmVzdG9y ZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhLCBib29sIGdsb2JhbHNfb25s eSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJuIEFyY2hpdmUgKk9w ZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCk7 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggNTllYWVjYjRlZDcuLmY1ZGY5 YWM1YzJiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC04Niw3ICs4Niw3 IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMg dm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGlt ZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwog c3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxl bmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpOworCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZl T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0z MzksOSArMzM5LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhY KQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJsaWMgKi8KKy8qCisgKiBS ZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBhcHBlbmQg ZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBk YXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQKLVJlc3Rv cmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9v bCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29ubHkpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUgg PSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+cHVi bGljLnJvcHQ7CkBAIC00NTgsNyArNDYzLDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhY KQogCSAqLwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSB8fCBy b3B0LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKQot CQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjKTsK KwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYywg YXBwZW5kX2RhdGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFz ZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtNzYxLDYgKzc2NiwxNyBAQCBSZXN0b3JlQXJjaGl2ZShB cmNoaXZlICpBSFgpCiAJCQlpZiAoKHRlLT5yZXFzICYgKFJFUV9TQ0hFTUEgfCBSRVFfREFUQSB8 IFJFUV9TVEFUUykpID09IDApCiAJCQkJY29udGludWU7CQkvKiBpZ25vcmUgaWYgbm90IHRvIGJl IGR1bXBlZCBhdCBhbGwgKi8KIAorCQkJLyogU2tpcCBEUk9QIERBVEFCQVNFIGlmIGdsb2JhbHNf b25seS4gKi8KKwkJCWlmIChnbG9iYWxzX29ubHkgJiYgdGUgJiYgdGUtPnRhZyAmJiAoc3RyY21w KHRlLT50YWcsICJEUk9QX0RBVEFCQVNFIikgPT0gMCkpCisJCQkJY29udGludWU7CisKKwkJCS8q IFNraXAgZm9yIFJFU1RSSUNULCBVTlJFU1RSSUNULCBDT05ORUNULiAqLworCQkJaWYgKCFyb3B0 LT5maWxlbmFtZSAmJiB0ZSAmJiB0ZS0+dGFnICYmCisJCQkJCSgoc3RyY21wKHRlLT50YWcsICJS RVNUUklDVCIpID09IDApIHx8CisJCQkJCSAoc3RyY21wKHRlLT50YWcsICJVTlJFU1RSSUNUIikg PT0gMCkgfHwKKwkJCQkJIChzdHJjbXAodGUtPnRhZywgIkNPTk5FQ1QiKSA9PSAwKSkpCisJCQkJ Y29udGludWU7CisKIAkJCXN3aXRjaCAoX3RvY0VudHJ5UmVzdG9yZVBhc3ModGUpKQogCQkJewog CQkJCWNhc2UgUkVTVE9SRV9QQVNTX01BSU46CkBAIC0xMzE2LDcgKzEzMzIsNyBAQCBQcmludFRP Q1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJv cHQtPmZpbGVuYW1lKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJl c3Npb25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVz c2lvbl9zcGVjLCBmYWxzZSk7CiAKIAlpZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3Rh bXBfc3RyKSwgUEdEVU1QX1NUUkZUSU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRl RGF0ZSkpID09IDApCkBAIC0xNjk1LDcgKzE3MTEsOCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFI LCBjb25zdCBjaGFyICpmbXQsLi4uKQogCiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJ Q29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE3MTUsNyAr MTczMiw3IEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5h bWUsCiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFy Y2hNb2RlQXBwZW5kKQorCWlmIChhcHBlbmRfZGF0YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFw cGVuZCkKIAkJbW9kZSA9IFBHX0JJTkFSWV9BOwogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9X OwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IDMyNWI1M2ZjOWJkLi4zNjUw NzNiM2VhZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtMzk0LDYgKzM5 NCw3IEBAIHN0cnVjdCBfdG9jRW50cnkKIAogZXh0ZXJuIGludAlwYXJhbGxlbF9yZXN0b3JlKEFy Y2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpOwogZXh0ZXJuIHZvaWQgb25fZXhpdF9jbG9z ZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCByZXBsYWNlX29uX2V4aXRfY2xv c2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpOwogCiBleHRlcm4gdm9pZCB3YXJuX29yX2V4aXRfaG9y cmlibHkoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0 ZV9wcmludGYoMiwgMyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf dGFyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGI1YmEzYjQ2ZGQ5 Li44MThiODBhOTM2OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcg QEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5w dWJsaWMudmVyYm9zZTsKIAkJQUgtPnB1YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJj aGl2ZSgoQXJjaGl2ZSAqKSBBSCk7CisJCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBm YWxzZSwgZmFsc2UpOwogCiAJCVNldEFyY2hpdmVPcHRpb25zKChBcmNoaXZlICopIEFILCBzYXZE b3B0LCBzYXZSb3B0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggYTAwOTE4YmFjYjQuLjEzZTE3NjRlYzcw IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMKQEAgLTEyOTIsNyArMTI5Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCSAqIHJpZ2h0IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3Jl QXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9yZUFyY2hpdmUoZm91dCwgZmFsc2UsIGZhbHNlKTsKIAog CUNsb3NlQXJjaGl2ZShmb3V0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggYmI0NTFjMWJhZTEu LjViOTE0NGFhMDAyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs dWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNs dWRlICJnZXRvcHRfbG9uZy5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogCiAv KiB2ZXJzaW9uIHN0cmluZyB3ZSBleHBlY3QgYmFjayBmcm9tIHBnX2R1bXAgKi8KICNkZWZpbmUg UEdEVU1QX1ZFUlNJT05TVFIgInBnX2R1bXAgKFBvc3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4i CkBAIC02NSw5ICs2NiwxMCBAQCBzdGF0aWMgdm9pZCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpj b25uKTsKIHN0YXRpYyB2b2lkIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGlj IHZvaWQgZHJvcERCcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFVzZXJDb25maWco UEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSk7Ci1zdGF0aWMgdm9pZCBkdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubik7CitzdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBkdW1wVGlt ZXN0YW1wKGNvbnN0IGNoYXIgKm1zZyk7Ci1zdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKTsKK3N0YXRpYyBpbnQJcnVuUGdEdW1w KGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsCisJCQkJCSAgY2hh ciAqZGJmaWxlLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lkIGJ1 aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJCQkJCSBjb25zdCBjaGFyICpjYXRhbG9n X25hbWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3Qg Y2hhciAqb2JqbmFtZSwKQEAgLTc2LDYgKzc4LDkgQEAgc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1h bmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRf ZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMs CiAJCQkJCQkJCSAgIFNpbXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRf ZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpw YXR0ZXJuKTsKK3N0YXRpYyBBcmNoaXZlRm9ybWF0IHBhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFy ICpmb3JtYXQpOworc3RhdGljIGludCBjcmVhdGVEdW1wSWQodm9pZCk7CitzdGF0aWMgdm9pZCBj cmVhdGVPbmVBcmNoaXZlRW50cnkoY29uc3QgY2hhciAqcXVlcnksIGNvbnN0IGNoYXIgKnRhZyk7 CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0aWMgUFFFeHBCdWZm ZXIgcGdkdW1wb3B0czsKQEAgLTEyMyw2ICsxMjgsMTMgQEAgc3RhdGljIFNpbXBsZVN0cmluZ0xp c3QgZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1w bGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKIHN0 YXRpYyBjaGFyICpyZXN0cmljdF9rZXk7CitzdGF0aWMgQXJjaGl2ZSAqZm91dCA9IE5VTEw7Citz dGF0aWMgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9Owor c3RhdGljIGludCBkdW1wSWRWYWwgPSAwOworc3RhdGljIGNvbnN0IENhdGFsb2dJZCBuaWxDYXRh bG9nSWQgPSB7MCwgMH07CitzdGF0aWMgQXJjaGl2ZU1vZGUgYXJjaGl2ZU1vZGUgPSBhcmNoTW9k ZVdyaXRlOworc3RhdGljIERhdGFEaXJTeW5jTWV0aG9kIHN5bmNfbWV0aG9kID0gREFUQV9ESVJf U1lOQ19NRVRIT0RfRlNZTkM7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCA9 IGFyY2hOdWxsOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKQEAgLTE0OCw2 ICsxNjAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBu b19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQs IE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsi Zm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhl IGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24g bGV0dGVyCkBAIC0xOTcsNiArMjEwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25z dCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZvcm1hdE5hbWUgPSAi cCI7CiAJdHJpdmFsdWUJcHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CiAJYm9vbAkJZGF0 YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CkBAIC0yMDgsNiAr MjIyLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWludAkJCWMsCiAJCQkJcmV0 OwogCWludAkJCW9wdGluZGV4OworCUR1bXBPcHRpb25zIGRvcHQ7CisJY2hhciAgICAgICAgZ2xv YmFsX3BhdGhbTUFYUEdQQVRIXTsKIAogCXBnX2xvZ2dpbmdfaW5pdChhcmd2WzBdKTsKIAlwZ19s b2dnaW5nX3NldF9sZXZlbChQR19MT0dfV0FSTklORyk7CkBAIC0yNDYsNyArMjYyLDkgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJcGdkdW1wb3B0cyA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6Zjpn aDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKKwlJ bml0RHVtcE9wdGlvbnMoJmRvcHQpOworCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywg YXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0 aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjU3LDYgKzI3NSw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAnYyc6CiAJCQkJb3V0cHV0 X2NsZWFuID0gdHJ1ZTsKKwkJCQlkb3B0Lm91dHB1dENsZWFuID0gMTsKIAkJCQlicmVhazsKIAog CQkJY2FzZSAnZCc6CkBAIC0yNzQsNyArMjkzLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLWYgIik7CiAJCQkJ YXBwZW5kU2hlbGxTdHJpbmcocGdkdW1wb3B0cywgZmlsZW5hbWUpOwogCQkJCWJyZWFrOwotCisJ CQljYXNlICdGJzoKKwkJCQlmb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJl YWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFrOwpA QCAtMzE0LDYgKzMzNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2Fz ZSAnVSc6CiAJCQkJcGd1c2VyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJZG9wdC5jcGFyYW1z LnVzZXJuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3Yn OgpAQCAtNDI5LDYgKzQ1MSwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWV4 aXRfbmljZWx5KDEpOwogCX0KIAorCS8qIEdldCBmb3JtYXQgZm9yIGR1bXAuICovCisJYXJjaER1 bXBGb3JtYXQgPSBwYXJzZUR1bXBGb3JtYXQoZm9ybWF0TmFtZSk7CisKKwkvKgorCSAqIElmIGEg bm9uLXBsYWluIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWly ZWQgYXMgdGhlCisJICogcGF0aCB0byB0aGUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmCisJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVu YW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtRi8tLWZvcm1hdD1k fGN8dCByZXF1aXJlcyBvcHRpb24gLWYvLS1maWxlIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJU cnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4 aXRfbmljZWx5KDEpOworCX0KKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3Qg cmVxdWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNo IGlzIGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVk CkBAIC00ODksNiArNTI2LDM1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAo c2VxdWVuY2VfZGF0YSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLXNl cXVlbmNlLWRhdGEiKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWly ZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVhdGUg bmV3IGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJ eworCQlBc3NlcnQoZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFj Y2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9k aXIoZmlsZW5hbWUpOworCisJCS8qIHNldCBmaWxlIHBhdGggZm9yIGdsb2JhbCBzcWwgY29tbWFu ZHMuICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJc25wcmludGYo Z2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy5kbXAiLCBmaWxlbmFtZSk7CisJCWVsc2Ug aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwg TUFYUEdQQVRILCAiJXMvdG9jLnRhciIsIGZpbGVuYW1lKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BB VEgsICIlcyIsIGZpbGVuYW1lKTsKKwl9CisJZWxzZSBpZiAoZmlsZW5hbWUpCisJeworCQlPUEYg PSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJIGZpbGVuYW1l KTsKKwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKIAkvKgogCSAqIElmIHlvdSBkb24ndCBw cm92aWRlIGEgcmVzdHJpY3Qga2V5LCBvbmUgd2lsbCBiZSBhcHBvaW50ZWQgZm9yIHlvdS4KIAkg Ki8KQEAgLTUzOCwxOSArNjA0LDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWV4 cGFuZF9kYm5hbWVfcGF0dGVybnMoY29ubiwgJmRhdGFiYXNlX2V4Y2x1ZGVfcGF0dGVybnMsCiAJ CQkJCQkgICAmZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyk7CiAKLQkvKgotCSAqIE9wZW4gdGhlIG91 dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dAotCSAqLwotCWlmIChm aWxlbmFtZSkKLQl7Ci0JCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7Ci0JCWlm ICghT1BGKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjog JW0iLAotCQkJCQkgZmlsZW5hbWUpOwotCX0KLQllbHNlCi0JCU9QRiA9IHN0ZG91dDsKLQogCS8q CiAJICogU2V0IHRoZSBjbGllbnQgZW5jb2RpbmcgaWYgcmVxdWVzdGVkLgogCSAqLwpAQCAtNTg1 LDM3ICs2MzgsMTE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAocXVvdGVf YWxsX2lkZW50aWZpZXJzKQogCQlleGVjdXRlQ29tbWFuZChjb25uLCAiU0VUIHF1b3RlX2FsbF9p ZGVudGlmaWVycyA9IHRydWUiKTsKIAotCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwg ZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iKTsKIAlpZiAodmVyYm9zZSkKIAkJZHVtcFRp bWVzdGFtcCgiU3RhcnRlZCBvbiIpOwogCi0JLyoKLQkgKiBFbnRlciByZXN0cmljdGVkIG1vZGUg dG8gYmxvY2sgYW55IHVuZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRzLiAgQQotCSAqIG1hbGlj aW91cyBzb3VyY2UgbWlnaHQgdHJ5IHRvIGluamVjdCBhIHZhcmlldHkgb2YgdGhpbmdzIHZpYSBi b2d1cwotCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQg c3VjaCBzb3VyY2VzIGZyb20KLQkgKiBhZmZlY3RpbmcgdGhlIGRlc3RpbmF0aW9uIGF0IHJlc3Rv cmUgdGltZSwgd2UgY2FuIGJsb2NrIHBzcWwKLQkgKiBtZXRhLWNvbW1hbmRzIHNvIHRoYXQgdGhl IGNsaWVudCBtYWNoaW5lIHRoYXQgcnVucyBwc3FsIHdpdGggdGhlIGR1bXAKLQkgKiBvdXRwdXQg cmVtYWlucyB1bmFmZmVjdGVkLgotCSAqLwotCWZwcmludGYoT1BGLCAiXFxyZXN0cmljdCAlc1xu XG4iLCByZXN0cmljdF9rZXkpOworCS8qIGNyZWF0ZSBhIGFyY2hpdmUgZmlsZSBmb3IgZ2xvYmFs IGNvbW1hbmRzLiAqLworCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVs bCkKKwl7CisJCS8qIE9wZW4gdGhlIG91dHB1dCBmaWxlICovCisJCWZvdXQgPSBDcmVhdGVBcmNo aXZlKGdsb2JhbF9wYXRoLCBhcmNoRHVtcEZvcm1hdCwgY29tcHJlc3Npb25fc3BlYywKKwkJCQlk b3N5bmMsIGFyY2hpdmVNb2RlLCBOVUxMLCBzeW5jX21ldGhvZCk7CiAKLQkvKgotCSAqIFdlIHVz ZWQgdG8gZW1pdCBcY29ubmVjdCBwb3N0Z3JlcyBoZXJlLCBidXQgdGhhdCBzZXJ2ZWQgbm8gcHVy cG9zZQotCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdp dGhvdXQgYSBwb3N0Z3JlcwotCSAqIGRhdGFiYXNlLiAgRXZlcnl0aGluZyB3ZSdyZSByZXN0b3Jp bmcgaGVyZSBpcyBhIGdsb2JhbCwgc28gd2hpY2hldmVyCi0JICogZGF0YWJhc2Ugd2UncmUgY29u bmVjdGVkIHRvIGF0IHRoZSBtb21lbnQgaXMgZmluZS4KLQkgKi8KKwkJLyogTWFrZSBkdW1wIG9w dGlvbnMgYWNjZXNzaWJsZSByaWdodCBhd2F5ICovCisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQs ICZkb3B0LCBOVUxMKTsKKwkJKChBcmNoaXZlSGFuZGxlKilmb3V0KS0+Y29ubmVjdGlvbiA9IGNv bm47CisJCSgoQXJjaGl2ZUhhbmRsZSopZm91dCktPnB1YmxpYy5udW1Xb3JrZXJzID0gMTsKKwor CQkvKiBSZWdpc3RlciB0aGUgY2xlYW51cCBob29rICovCisJCW9uX2V4aXRfY2xvc2VfYXJjaGl2 ZShmb3V0KTsKKworCQkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93IG5vaXN5IHRvIGJlICov CisJCWZvdXQtPnZlcmJvc2UgPSB2ZXJib3NlOworCisJCS8qCisJCSAqIFdlIGFsbG93IHRoZSBz ZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBvZgor CQkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbiBw Z19kdW1wYWxsLmMuKQorCQkgKi8KKwkJZm91dC0+bWluUmVtb3RlVmVyc2lvbiA9IDkwMjAwOwor CQlmb3V0LT5tYXhSZW1vdGVWZXJzaW9uID0gKFBHX1ZFUlNJT05fTlVNIC8gMTAwKSAqIDEwMCAr IDk5OworCQlmb3V0LT5udW1Xb3JrZXJzID0gMTsKIAotCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRv IHdyaXRlIHRvIHRoZSB0YXJnZXQgY2x1c3RlciAqLwotCWZwcmludGYoT1BGLCAiU0VUIGRlZmF1 bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsKKwkJY3JlYXRlT25lQXJjaGl2 ZUVudHJ5KCItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIs ICJDT01NRU5UIik7CiAKLQkvKiBSZXBsaWNhdGUgZW5jb2RpbmcgYW5kIHN0ZF9zdHJpbmdzIGlu IG91dHB1dCAqLwotCWZwcmludGYoT1BGLCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7XG4i LAotCQkJcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZykpOwotCWZwcmludGYoT1BGLCAiU0VU IHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICVzO1xuIiwgc3RkX3N0cmluZ3MpOwotCWlm IChzdHJjbXAoc3RkX3N0cmluZ3MsICJvZmYiKSA9PSAwKQotCQlmcHJpbnRmKE9QRiwgIlNFVCBl c2NhcGVfc3RyaW5nX3dhcm5pbmcgPSBvZmY7XG4iKTsKLQlmcHJpbnRmKE9QRiwgIlxuIik7CisJ CS8qIGNyZWF0ZSBlbnRyeSBmb3IgcmVzdHJpY3QgKi8KKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiXFxy ZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5 KHFyeS0+ZGF0YSwgIlJFU1RSSUNUIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJ fQorCisJCS8qIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmICovCisJCXsKKwkJ CVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCXBnX2xvZ19pbmZv KCJzYXZpbmcgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmYiKTsKKwkJCWFwcGVu ZFBRRXhwQnVmZmVyKHFyeSwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9m ZjtcbiIpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkRFRkFVTFRfVFJB TlNBQ1RJT05fUkVBRF9PTkxZIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQor CisJCS8qIGR1bXBFbmNvZGluZzogcHV0IHRoZSBjb3JyZWN0IGVuY29kaW5nIGludG8gdGhlIGFy Y2hpdmUgKi8KKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsK KwkJCWNvbnN0IGNoYXIgKmVuY25hbWUgPSBwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5nKTsK KworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICIp OworCQkJYXBwZW5kU3RyaW5nTGl0ZXJhbEFIKHFyeSwgZW5jbmFtZSwgZm91dCk7CisJCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cihxcnksICI7XG4iKTsKKworCQkJcGdfbG9nX2luZm8oInNhdmluZyBl bmNvZGluZyA9ICVzIiwgZW5jbmFtZSk7CisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5k YXRhLCAiRU5DT0RJTkciKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKKwkJ LyogZHVtcFN0ZFN0cmluZ3M6IHB1dCB0aGUgY29ycmVjdCBlc2NhcGUgc3RyaW5nIGJlaGF2aW9y IGludG8gdGhlIGFyY2hpdmUgKi8KKwkJeworCQkJY29uc3QgY2hhciAqc3Rkc3RyaW5ncyA9IHN0 ZF9zdHJpbmdzID8gIm9uIiA6ICJvZmYiOworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFF eHBCdWZmZXIoKTsKKworCQkJcGdfbG9nX2luZm8oInNhdmluZyBcInN0YW5kYXJkX2NvbmZvcm1p bmdfc3RyaW5ncyA9ICVzXCIiLCBzdGRzdHJpbmdzKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFy eSwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAnJXMnO1xuIiwKKwkJCQkJc3Rk c3RyaW5ncyk7CisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAiU1REU1RSSU5H UyIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJ ZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0t XG5cbiIpOworCisJCS8qCisJCSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkg dW5leHBlY3RlZCBwc3FsIG1ldGEtY29tbWFuZHMuICBBCisJCSAqIG1hbGljaW91cyBzb3VyY2Ug bWlnaHQgdHJ5IHRvIGluamVjdCBhIHZhcmlldHkgb2YgdGhpbmdzIHZpYSBib2d1cworCQkgKiBy ZXNwb25zZXMgdG8gcXVlcmllcy4gIFdoaWxlIHdlIGNhbm5vdCBwcmV2ZW50IHN1Y2ggc291cmNl cyBmcm9tCisJCSAqIGFmZmVjdGluZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3 ZSBjYW4gYmxvY2sgcHNxbAorCQkgKiBtZXRhLWNvbW1hbmRzIHNvIHRoYXQgdGhlIGNsaWVudCBt YWNoaW5lIHRoYXQgcnVucyBwc3FsIHdpdGggdGhlIGR1bXAKKwkJICogb3V0cHV0IHJlbWFpbnMg dW5hZmZlY3RlZC4KKwkJICovCisJCWZwcmludGYoT1BGLCAiXFxyZXN0cmljdCAlc1xuXG4iLCBy ZXN0cmljdF9rZXkpOworCisJCS8qCisJCSAqIFdlIHVzZWQgdG8gZW1pdCBcY29ubmVjdCBwb3N0 Z3JlcyBoZXJlLCBidXQgdGhhdCBzZXJ2ZWQgbm8gcHVycG9zZQorCQkgKiBvdGhlciB0aGFuIHRv IGJyZWFrIHRoaW5ncyBmb3IgaW5zdGFsbGF0aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMKKwkJICog ZGF0YWJhc2UuICBFdmVyeXRoaW5nIHdlJ3JlIHJlc3RvcmluZyBoZXJlIGlzIGEgZ2xvYmFsLCBz byB3aGljaGV2ZXIKKwkJICogZGF0YWJhc2Ugd2UncmUgY29ubmVjdGVkIHRvIGF0IHRoZSBtb21l bnQgaXMgZmluZS4KKwkJICovCisKKwkJLyogUmVzdG9yZSB3aWxsIG5lZWQgdG8gd3JpdGUgdG8g dGhlIHRhcmdldCBjbHVzdGVyICovCisJCWZwcmludGYoT1BGLCAiU0VUIGRlZmF1bHRfdHJhbnNh Y3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsKKworCQkvKiBSZXBsaWNhdGUgZW5jb2Rpbmcg YW5kIHN0ZF9zdHJpbmdzIGluIG91dHB1dCAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBjbGllbnRf ZW5jb2RpbmcgPSAnJXMnO1xuIiwKKwkJCQlwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5nKSk7 CisJCWZwcmludGYoT1BGLCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICVzO1xu Iiwgc3RkX3N0cmluZ3MpOworCQlpZiAoc3RyY21wKHN0ZF9zdHJpbmdzLCAib2ZmIikgPT0gMCkK KwkJCWZwcmludGYoT1BGLCAiU0VUIGVzY2FwZV9zdHJpbmdfd2FybmluZyA9IG9mZjtcbiIpOwor CQlmcHJpbnRmKE9QRiwgIlxuIik7CisJfQogCiAJaWYgKCFkYXRhX29ubHkgJiYgIXN0YXRpc3Rp Y3Nfb25seSAmJiAhbm9fc2NoZW1hKQogCXsKQEAgLTY1OSwyNyArNzg5LDUxIEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCWR1bXBUYWJsZXNwYWNlcyhjb25uKTsKIAl9CiAKLQkv KgotCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFi YXNlcy4gIHBnX2R1bXAgd2lsbAotCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUg YWdhaW4gYXMgYXBwcm9wcmlhdGUuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3Qg JXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJeworCQkvKgorCQkgKiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9yZSBkdW1waW5n IHRoZSBkYXRhYmFzZXMuICBwZ19kdW1wIHdpbGwKKwkJICogaGFuZGxlIGVudGVyaW5nIHJlc3Ry aWN0ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KKwkJICovCisJCWZwcmludGYoT1BGLCAi XFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJfQorCWVsc2UKKwl7CisJCS8q IGNyZWF0ZSBlbnRyeSBmb3IgdW5yZXN0cmljdCAqLworCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVh dGVQUUV4cEJ1ZmZlcigpOwogCi0JaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYg IXRhYmxlc3BhY2VzX29ubHkpCi0JCWR1bXBEYXRhYmFzZXMoY29ubik7CisJCWFwcGVuZFBRRXhw QnVmZmVyKHFyeSwgIlxcdW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCQljcmVh dGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAiVU5SRVNUUklDVCIpOworCQlkZXN0cm95UFFF eHBCdWZmZXIocXJ5KTsKKwl9CiAKLQlQUWZpbmlzaChjb25uKTsKKwlpZiAoIWdsb2JhbHNfb25s eSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25seSkKKwkJZHVtcERhdGFiYXNlcyhj b25uLCBhcmNoRHVtcEZvcm1hdCk7CiAKLQlpZiAodmVyYm9zZSkKKwlpZiAodmVyYm9zZSAmJiBh cmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZHVtcFRpbWVzdGFtcCgiQ29tcGxldGVkIG9u Iik7Ci0JZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1 bXAgY29tcGxldGVcbi0tXG5cbiIpOwogCi0JaWYgKGZpbGVuYW1lKQorCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRh YmFzZSBjbHVzdGVyIGR1bXAgY29tcGxldGVcbi0tXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9y bWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJUmVzdG9yZU9wdGlvbnMgKnJvcHQ7CisKKwkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXAg Y29tcGxldGVcbi0tXG5cbiIsICJDT01NRU5UIik7CisJCXJvcHQgPSBOZXdSZXN0b3JlT3B0aW9u cygpOworCQlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwgcm9wdCk7CisKKwkJLyogTWFy ayB3aGljaCBlbnRyaWVzIHNob3VsZCBiZSBvdXRwdXQgKi8KKwkJUHJvY2Vzc0FyY2hpdmVSZXN0 b3JlT3B0aW9ucyhmb3V0KTsKKwkJQ2xvc2VBcmNoaXZlKGZvdXQpOworCX0KKwllbHNlIGlmIChm aWxlbmFtZSkKIAl7CiAJCWZjbG9zZShPUEYpOwogCiAJCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBm aWxlLCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAqLwotCQlpZiAoZG9zeW5jKQorCQlpZiAoZG9zeW5j ICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJCQkodm9pZCkgZnN5bmNfZm5hbWUo ZmlsZW5hbWUsIGZhbHNlKTsKIAl9CiAKQEAgLTY5MCwxMiArODQ0LDE0IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIHN0YXRpYyB2b2lkCiBoZWxwKHZvaWQpCiB7Ci0JcHJpbnRmKF8o IiVzIGV4cG9ydHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNjcmlw dC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwg ZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0IG9yIHRvIG90aGVyIGZvcm1hdHMuXG5c biIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVz IFtPUFRJT05dLi4uXG4iKSwgcHJvZ25hbWUpOwogCiAJcHJpbnRmKF8oIlxuR2VuZXJhbCBvcHRp b25zOlxuIikpOwogCXByaW50ZihfKCIgIC1mLCAtLWZpbGU9RklMRU5BTUUgICAgICAgICAgb3V0 cHV0IGZpbGUgbmFtZVxuIikpOworCXByaW50ZihfKCIgIC1GLCAtLWZvcm1hdD1jfGR8dHxwICAg ICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0IChjdXN0b20sIGRpcmVjdG9yeSwgdGFyLFxuIgorCQkJ ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW4gdGV4dCAoZGVmYXVsdCkpXG4i KSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgICB2ZXJib3NlIG1v ZGVcbiIpKTsKIAlwcmludGYoXygiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgIG91dHB1 dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKIAlwcmludGYoXygiICAtLWxv Y2std2FpdC10aW1lb3V0PVRJTUVPVVQgIGZhaWwgYWZ0ZXIgd2FpdGluZyBUSU1FT1VUIGZvciBh IHRhYmxlIGxvY2tcbiIpKTsKQEAgLTc3MCw2ICs5MjYsNyBAQCBzdGF0aWMgdm9pZAogZHJvcFJv bGVzKFBHY29ubiAqY29ubikKIHsKIAlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOworCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUEdyZXN1 bHQgICAqcmVzOwogCWludAkJCWlfcm9sbmFtZTsKIAlpbnQJCQlpOwpAQCAtNzkxLDcgKzk0OCwx MiBAQCBkcm9wUm9sZXMoUEdjb25uICpjb25uKQogCWlfcm9sbmFtZSA9IFBRZm51bWJlcihyZXMs ICJyb2xuYW1lIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwg Ii0tXG4tLSBEcm9wIHJvbGVzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIp OworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEcm9wIHJvbGVzXG4t LVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVz KTsgaSsrKQogCXsKQEAgLTc5OSwxNSArOTYxLDIxIEBAIGRyb3BSb2xlcyhQR2Nvbm4gKmNvbm4p CiAKIAkJcm9sZW5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgaV9yb2xuYW1lKTsKIAotCQlmcHJp bnRmKE9QRiwgIkRST1AgUk9MRSAlcyVzO1xuIiwKKwkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5 LCAiRFJPUCBST0xFICVzJXM7XG4iLAogCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIi LAogCQkJCWZtdElkKHJvbGVuYW1lKSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCWVsc2UKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeShkZWxRcnktPmRhdGEsICJkcm9wUm9sZXMiKTsKIAl9CiAKIAlQ UWNsZWFyKHJlcyk7CiAJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAKLQlmcHJpbnRmKE9QRiwg IlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BG LCAiXG5cbiIpOwogfQogCiAvKgpAQCAtODg5LDcgKzEwNTcsMTIgQEAgZHVtcFJvbGVzKFBHY29u biAqY29ubikKIAlpX2lzX2N1cnJlbnRfdXNlciA9IFBRZm51bWJlcihyZXMsICJpc19jdXJyZW50 X3VzZXIiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1c bi0tIFJvbGVzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGVzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJ Y3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUm9sZXNcbi0tXG5cbiIsICJDT01NRU5UIik7 CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtOTkz LDcgKzExNjYsMTAgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkJCQkJCQkgIlJPTEUiLCBy b2xlbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRh KTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIl cyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRh dGEsICJkdW1wUm9sZXMiKTsKIAl9CiAKIAkvKgpAQCAtMTAwMSwxNSArMTE3NywxMyBAQCBkdW1w Um9sZXMoUEdjb25uICpjb25uKQogCSAqIFdlIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2UgY29uZmln IHNldHRpbmdzIGZvciByb2xlcyBjb3VsZCBtZW50aW9uIHRoZQogCSAqIG5hbWVzIG9mIG90aGVy IHJvbGVzLgogCSAqLwotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAi XG4tLVxuLS0gVXNlciBDb25maWd1cmF0aW9uc1xuLS1cbiIpOwotCiAJZm9yIChpID0gMDsgaSA8 IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJCWR1bXBVc2VyQ29uZmlnKGNvbm4sIFBRZ2V0dmFsdWUo cmVzLCBpLCBpX3JvbG5hbWUpKTsKIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAi XG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYs ICJcblxuIik7CiAKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIH0KQEAgLTEwODgsNyArMTI2 MiwxMiBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCWlfc2V0X29wdGlvbiA9 IFBRZm51bWJlcihyZXMsICJzZXRfb3B0aW9uIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAw KQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4iKTsKKwl7 CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1c bi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNo aXZlRW50cnkoIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOwor CX0KIAogCS8qCiAJICogV2UgY2FuJ3QgZHVtcCB0aGVzZSBHUkFOVCBjb21tYW5kcyBpbiBhcmJp dHJhcnkgb3JkZXIsIGJlY2F1c2UgYSByb2xlCkBAIC0xMTY3LDYgKzEzNDYsNyBAQCBkdW1wUm9s ZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCWNoYXIJICAgKmdyYW50b3I7CiAJCQkJY2hh cgkgICAqc2V0X29wdGlvbiA9ICJ0cnVlIjsKIAkJCQlib29sCQlmb3VuZDsKKwkJCQlQUUV4cEJ1 ZmZlciBjcmVhUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQkJCS8qIElmIHdlIGFscmVh ZHkgZGlkIHRoaXMgZ3JhbnQsIGRvbid0IGRvIGl0IGFnYWluLiAqLwogCQkJCWlmIChkb25lW2kg LSBzdGFydF0pCkBAIC0xMjIzLDggKzE0MDMsOCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25u ICpjb25uKQogCiAJCQkJLyogR2VuZXJhdGUgdGhlIGFjdHVhbCBHUkFOVCBzdGF0ZW1lbnQuICov CiAJCQkJcmVzZXRQUUV4cEJ1ZmZlcihvcHRidWYpOwotCQkJCWZwcmludGYoT1BGLCAiR1JBTlQg JXMiLCBmbXRJZChyb2xlKSk7Ci0JCQkJZnByaW50ZihPUEYsICIgVE8gJXMiLCBmbXRJZChtZW1i ZXIpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiR1JBTlQgJXMiLCBmbXRJZChy b2xlKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBUTyAlcyIsIGZtdElkKG1l bWJlcikpOwogCQkJCWlmICgqYWRtaW5fb3B0aW9uID09ICd0JykKIAkJCQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIob3B0YnVmLCAiQURNSU4gT1BUSU9OIik7CiAJCQkJaWYgKGR1bXBfZ3JhbnRfb3B0 aW9ucykKQEAgLTEyNDUsMTAgKzE0MjUsMTUgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAq Y29ubikKIAkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAiU0VUIEZBTFNFIik7CiAJ CQkJfQogCQkJCWlmIChvcHRidWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJCQkJZnByaW50ZihPUEYs ICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFR cnksICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CiAJCQkJaWYgKGR1bXBfZ3JhbnRvcnMpCi0J CQkJCWZwcmludGYoT1BGLCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7Ci0JCQkJ ZnByaW50ZihPUEYsICI7XG4iKTsKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBH UkFOVEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNy ZWFRcnksICI7XG4iKTsKKworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ CQkJZnByaW50ZihPUEYsICIlcyIsIGNyZWFRcnktPmRhdGEpOworCQkJCWVsc2UKKwkJCQkJY3Jl YXRlT25lQXJjaGl2ZUVudHJ5KGNyZWFRcnktPmRhdGEsICJkdW1wUm9sZU1lbWJlcnNoaXAiKTsK IAkJCX0KIAkJfQogCkBAIC0xMjYwLDcgKzE0NDUsOCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdj b25uICpjb25uKQogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAot CWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTI4OCw3ICsxNDc0LDEyIEBAIGR1 bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJCQkgICAiT1JERVIgQlkgMSIpOwogCiAJ aWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBwcml2 aWxlZ2VzIG9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIik7CisJeworCQlpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xl IHByaXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iKTsKKwkJZWxz ZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUm9sZSBwcml2aWxlZ2VzIG9uIGNv bmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3Ig KGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xMzEyLDE0ICsxNTAzLDE5 IEBAIGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJZXhpdF9uaWNlbHkoMSk7CiAJ CX0KIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVs c2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wUm9sZUdVQ1ByaXZz Iik7CiAKIAkJZnJlZShmcGFybmFtZSk7CiAJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCX0K IAogCVBRY2xlYXIocmVzKTsKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKworCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAt MTMzMSw2ICsxNTI3LDcgQEAgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIHsKIAlQR3Jl c3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQUUV4 cEJ1ZmZlcigpOwogCiAJLyoKIAkgKiBHZXQgYWxsIHRhYmxlc3BhY2VzIGV4Y2VwdCBidWlsdC1p biBvbmVzICh3aGljaCB3ZSBhc3N1bWUgYXJlIG5hbWVkCkBAIC0xMzQyLDIwICsxNTM5LDMxIEBA IGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJPUkRFUiBCWSAxIik7CiAK IAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIHRh Ymxlc3BhY2VzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0tXG5cbiIpOwor CQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEcm9wIHRhYmxlc3BhY2Vz XG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMo cmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqc3BjbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAw KTsKIAotCQlmcHJpbnRmKE9QRiwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKKwkJYXBwZW5k UFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBUQUJMRVNQQUNFICVzJXM7XG4iLAogCQkJCWlmX2V4 aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAogCQkJCWZtdElkKHNwY25hbWUpKTsKKworCQlpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5 LT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwg ImRyb3BUYWJsZXNwYWNlcyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BG LCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihP UEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC0xMzgyLDcgKzE1OTAsMTIgQEAgZHVtcFRhYmxlc3Bh Y2VzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIk9SREVSIEJZIDEiKTsKIAogCWlmIChQUW50dXBs ZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFRhYmxlc3BhY2VzXG4tLVxuXG4i KTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BG LCAiLS1cbi0tIFRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJj aGl2ZUVudHJ5KCItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQog CiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtMTQ1MSwxNCAr MTY2NCwxOSBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkJCSAiVEFCTEVT UEFDRSIsIHNwY25hbWUsCiAJCQkJCQkJIGJ1Zik7CiAKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1 Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYo T1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnko YnVmLT5kYXRhLCAiZHVtcFRhYmxlc3BhY2VzIik7CiAKIAkJZnJlZShmc3BjbmFtZSk7CiAJCWRl c3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKLQlmcHJpbnRmKE9Q RiwgIlxuXG4iKTsKKworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50 ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTQ4Miw3ICsxNzAwLDEyIEBAIGRyb3BEQnMoUEdj b25uICpjb25uKQogCQkJCQkgICAiT1JERVIgQlkgZGF0bmFtZSIpOwogCiAJaWYgKFBRbnR1cGxl cyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCBkYXRhYmFzZXMgKGV4Y2Vw dCBwb3N0Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIGRhdGFiYXNl cyAoZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJ Y3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRHJvcCBkYXRhYmFzZXMgKGV4Y2VwdCBwb3N0 Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkg PSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNDk3LDE1ICsxNzIwLDIzIEBA IGRyb3BEQnMoUEdjb25uICpjb25uKQogCQkJc3RyY21wKGRibmFtZSwgInRlbXBsYXRlMCIpICE9 IDAgJiYKIAkJCXN0cmNtcChkYm5hbWUsICJwb3N0Z3JlcyIpICE9IDApCiAJCXsKLQkJCWZwcmlu dGYoT1BGLCAiRFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKKwkJCVBRRXhwQnVmZmVyIGRlbFFyeSA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRS T1AgREFUQUJBU0UgJXMlcztcbiIsCiAJCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIi LAogCQkJCQlmbXRJZChkYm5hbWUpKTsKKworCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQkJCWZwcmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRhdGEpOworCQkJZWxzZQorCQkJ CWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShkZWxRcnktPmRhdGEsICJEUk9QX0RBVEFCQVNFIik7CiAJ CX0KIAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQog CiAKQEAgLTE1MzIsNyArMTc2MywxOCBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKnVzZXJuYW1lKQogCQljaGFyCSAgICpzYW5pdGl6ZWQ7CiAKIAkJc2FuaXRpemVk ID0gc2FuaXRpemVfbGluZSh1c2VybmFtZSwgdHJ1ZSk7Ci0JCWZwcmludGYoT1BGLCAiXG4tLVxu LS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCisJCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBD b25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQllbHNlCisJCXsKKwkJCVBRRXhw QnVmZmVyCXFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVy KHFyeSwgIlxuLS1cbi0tIFVzZXIgQ29uZmlnIFwiJXNcIlxuLS1cblxuIiwgc2FuaXRpemVkKTsK KwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJDT01NRU5UIik7CisJCQlkZXN0 cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCiAJCWZyZWUoc2FuaXRpemVkKTsKIAl9CiAKQEAg LTE1NDIsNyArMTc4NCwxMSBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnVzZXJuYW1lKQogCQltYWtlQWx0ZXJDb25maWdDb21tYW5kKGNvbm4sIFBRZ2V0dmFsdWUo cmVzLCBpLCAwKSwKIAkJCQkJCQkgICAiUk9MRSIsIHVzZXJuYW1lLCBOVUxMLCBOVUxMLAogCQkJ CQkJCSAgIGJ1Zik7Ci0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCisJCWlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRh dGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoYnVmLT5kYXRhLCAiZHVtcFVz ZXJDb25maWciKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7CkBAIC0xNjA4LDEwICsxODU0LDEzIEBA IGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBv ZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29u bikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9y bWF0KQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltN QVhQR1BBVEhdOworCWNoYXIJCWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFCSAgICptYXBf ZmlsZSA9IE5VTEw7CiAKIAkvKgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxs b3djb25uLCBzaW5jZSB3ZSdkIGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNjI1LDE5ICsxODc0 LDQ4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21l IGZhaWx1cmUgbW9kZSB3aXRoIC0tY2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNv bm4sCi0JCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwg b2lkICIKIAkJCQkJICAgIkZST00gcGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRh bGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBCWSAoZGF0 bmFtZSA8PiAndGVtcGxhdGUxJyksIGRhdG5hbWUiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+ IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CisJeworCQlp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBE YXRhYmFzZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0t XG4tLSBEYXRhYmFzZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQorCisJLyoKKwkgKiBJZiBk aXJlY3RvcnkvdGFyL2N1c3RvbSBmb3JtYXQgaXMgc3BlY2lmaWVkLCBjcmVhdGUgYSBzdWJkaXJl Y3RvcnkKKwkgKiB1bmRlciB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVt cCBmaWxlIG9yIHN1YmRpcmVjdG9yeQorCSAqIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGF0IHN1YmRp cmVjdG9yeSBieSBwZ19kdW1wLgorCSAqLworICAgaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hO dWxsKQorICAgeworCSAgIGNoYXIgICAgICAgIG1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwor CSAgIHNucHJpbnRmKGRiX3N1YmRpciwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzIiwgZmlsZW5h bWUpOworCisJICAgLyogQ3JlYXRlIGEgc3ViZGlyZWN0b3J5IHdpdGggJ2RhdGFiYXNlcycgbmFt ZSB1bmRlciBtYWluIGRpcmVjdG9yeS4gKi8KKwkgICBpZiAobWtkaXIoZGJfc3ViZGlyLCBwZ19k aXJfY3JlYXRlX21vZGUpICE9IDApCisJCSAgIHBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRp cmVjdG9yeSBcIiVzXCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCSAgIHNucHJpbnRmKG1hcF9maWxl X3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBmaWxlbmFtZSk7CisKKwkgICAvKiBDcmVh dGUgYSBtYXAgZmlsZSAodG8gc3RvcmUgZGJvaWQgYW5kIGRibmFtZSkgKi8KKwkgICBtYXBfZmls ZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKwkgICBpZiAoIW1hcF9maWxl KQorCQkgICBwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2Zp bGVfcGF0aCk7CisgICB9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykK IAl7CiAJCWNoYXIJICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKIAkJY2hhcgkg ICAqc2FuaXRpemVkOwotCQljb25zdCBjaGFyICpjcmVhdGVfb3B0czsKKwkJY2hhciAgICAgICAq b2lkID0gUFFnZXR2YWx1ZShyZXMsIGksIDEpOworCQljb25zdCBjaGFyICpjcmVhdGVfb3B0cyA9 ICIiOwogCQlpbnQJCQlyZXQ7CiAKIAkJLyogU2tpcCB0ZW1wbGF0ZTAsIGV2ZW4gaWYgaXQncyBu b3QgbWFya2VkICFkYXRhbGxvd2Nvbm4uICovCkBAIC0xNjU0LDcgKzE5MzIsMTggQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFiYXNlIFwi JXNcIiIsIGRibmFtZSk7CiAKIAkJc2FuaXRpemVkID0gc2FuaXRpemVfbGluZShkYm5hbWUsIHRy dWUpOwotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxu Iiwgc2FuaXRpemVkKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlm cHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRp emVkKTsKKwkJZWxzZQorCQl7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICItLVxuLS0gRGF0YWJhc2UgXCIlc1wi IGR1bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5 LT5kYXRhLCAiQ09NTUVOVCIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwog CQlmcmVlKHNhbml0aXplZCk7CiAKIAkJLyoKQEAgLTE2NjksMjQgKzE5NTgsNDYgQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCXsKIAkJCWlmIChvdXRwdXRfY2xlYW4pCiAJCQkJY3Jl YXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0ZSI7CisJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0 IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCisJCQllbHNlIGlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4i LCBkYm5hbWUpOwogCQkJZWxzZQogCQkJewotCQkJCWNyZWF0ZV9vcHRzID0gIiI7Ci0JCQkJLyog U2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLwot CQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJUFFFeHBC dWZmZXIJcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVy KHFyeSwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeShxcnktPmRhdGEsICJDT05ORUNUIik7CisJCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7 CiAJCQl9CiAJCX0KIAkJZWxzZQogCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOwogCi0JCWlm IChmaWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQogCQkJZmNsb3NlKE9QRik7CiAKLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29w dHMpOworCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZvcm1hdCBkdW1wLCB0aGVu IGFwcGVuZCBkYm9pZCBhbmQgZGJuYW1lIHRvCisJCSAqIHRoZSBtYXAuZGF0IGZpbGUuCisJCSAq LworCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCXsKKwkJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFU SCwgIlwiJXNcIi9cIiVzXCIuZG1wIiwgZGJfc3ViZGlyLCBvaWQpOworCQkJZWxzZSBpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BB VEgsICJcIiVzXCIvXCIlc1wiLnRhciIsIGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UKKwkJCQlz bnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJfc3ViZGly LCBvaWQpOworCisJCQkvKiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBkYm5hbWUg aW4gbWFwIGZpbGUuICovCisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgZGJu YW1lKTsKKwkJfQorCisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzLCBkYmZp bGVwYXRoLCBhcmNoRHVtcEZvcm1hdCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJw Z19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCi0J CWlmIChmaWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQogCQl7CiAJCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJaWYg KCFPUEYpCkBAIC0xNjk1LDYgKzIwMDYsMTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4p CiAJCX0KIAl9CiAKKwkvKiBDbG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAh PSBhcmNoTnVsbCkKKwkJZmNsb3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApA QCAtMTcwNCw3ICsyMDE5LDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4g cGdfZHVtcCBvbiBkYm5hbWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBp bnQKLXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRz KQorcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMs IGNoYXIgKmRiZmlsZSwKKwkJICBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBR RXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBjbWQ7CkBAIC0xNzEz LDE3ICsyMDI5LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIg KmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJaW5pdFBRRXhw QnVmZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIs IHBnX2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKLQog CS8qCi0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFp bi1hcHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWlu IGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBmb3JtYXQg dG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAqLwotCWlmIChm aWxlbmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwg IlwiJXNcIiAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUsIGNyZWF0ZV9v cHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKKwkJZWxzZSBp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PXRh ciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsK Kwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2Jp biwKKwkJCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOworCisJCS8qCisJCSAq IElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5k IHBnX2R1bXAKKwkJICogZm9ybWF0LgorCQkgKi8KKwkJaWYgKGZpbGVuYW1lKQorCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJCWVsc2UKKwkJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZjbWQsICIgLUZwICIpOworCX0KIAogCS8qCiAJICogQXBwZW5kIHRoZSBkYXRhYmFz ZSBuYW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0cnVjdGVkIHN0ZW0gb2YgY29ubmVjdGlvbgpAQCAt MTgwNyw3ICsyMTQyLDE4IEBAIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKQogCXRpbWVf dAkJbm93ID0gdGltZShOVUxMKTsKIAogCWlmIChzdHJmdGltZShidWYsIHNpemVvZihidWYpLCBQ R0RVTVBfU1RSRlRJTUVfRk1ULCBsb2NhbHRpbWUoJm5vdykpICE9IDApCi0JCWZwcmludGYoT1BG LCAiLS0gJXMgJXNcblxuIiwgbXNnLCBidWYpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLSAlcyAlc1xuXG4iLCBtc2csIGJ1Zik7CisJ CWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIJcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwor CQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiLS0gJXMgJXNcblxuIiwgbXNnLCBidWYpOworCQkJ Y3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihxcnkpOworCQl9CisJfQogfQogCiAvKgpAQCAtMTg2OCwzICsyMjE0LDY2IEBA IHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdM aXN0ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBwYXJz ZUR1bXBGb3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFsaWRhdGUgZHVtcCBmb3JtYXRzLgorICov CitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1h dCkKK3sKKwlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0OworCisJaWYgKHBnX3N0cmNhc2Vj bXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwll bHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1c3RvbSIpID09IDApCisJCWFyY2hEdW1w Rm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImQi KSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdf c3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9 IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwIikgPT0g MCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21w KGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwll bHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1h dCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0YXIiKSA9PSAw KQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZQorCQlwZ19mYXRhbCgidW5yZWNv Z25pemVkIG91dHB1dCBmb3JtYXQgXCIlc1wiOyBwbGVhc2Ugc3BlY2lmeSBcImNcIiwgXCJkXCIs IFwicFwiLCBvciBcInRcIiIsCisJCQkJIGZvcm1hdCk7CisKKwlyZXR1cm4gYXJjaER1bXBGb3Jt YXQ7Cit9CisKKy8qCisgKiBjcmVhdGVEdW1wSWQKKyAqCisgKiBUaGlzIHdpbGwgcmV0dXJuIG5l eHQgbGFzdCB1c2VkIG9pZC4KKyAqLworc3RhdGljIGludAorY3JlYXRlRHVtcElkKHZvaWQpCit7 CisJcmV0dXJuICsrZHVtcElkVmFsOworfQorCisvKgorICogY3JlYXRlT25lQXJjaGl2ZUVudHJ5 CisgKgorICogVGhpcyBjcmVhdGVzIG9uZSBhcmNoaXZlIGVudHJ5IGJhc2VkIG9uIGZvcm1hdC4K KyAqLworc3RhdGljIHZvaWQKK2NyZWF0ZU9uZUFyY2hpdmVFbnRyeShjb25zdCBjaGFyICpxdWVy eSwgY29uc3QgY2hhciAqdGFnKQoreworCUFzc2VydChmb3V0ICE9IE5VTEwpOworCisJQXJjaGl2 ZUVudHJ5KGZvdXQsCisJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8KKwkJCWNyZWF0 ZUR1bXBJZCgpLCAvKiBkdW1wIElEICovCisJCQlBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKKwkJ CQkuZGVzY3JpcHRpb24gPSB0YWcsCisJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAor CQkJCS5jcmVhdGVTdG10ID0gcXVlcnkpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IGM5Nzc2 MzA2YzVjLi45N2E2YmNiNmQzMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3Rv cmUuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCkBAIC0yLDcgKzIsNyBAQAog ICoKICAqIHBnX3Jlc3RvcmUuYwogICoJcGdfcmVzdG9yZSBpcyBhbiB1dGlsaXR5IGV4dHJhY3Rp bmcgcG9zdGdyZXMgZGF0YWJhc2UgZGVmaW5pdGlvbnMKLSAqCWZyb20gYSBiYWNrdXAgYXJjaGl2 ZSBjcmVhdGVkIGJ5IHBnX2R1bXAgdXNpbmcgdGhlIGFyY2hpdmVyCisgKglmcm9tIGEgYmFja3Vw IGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wL3BnX2R1bXBhbGwgdXNpbmcgdGhlIGFyY2hpdmVy CiAgKglpbnRlcmZhY2UuCiAgKgogICoJcGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhlIGJhY2t1cCBh cmNoaXZlIGFuZApAQCAtNDEsMzEgKzQxLDYxIEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK IAogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBIQVZF X1RFUk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29t bW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImR1bXB1dGls cy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0 aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9w dF9sb25nLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRp bHMuaCIKIAorCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSk7CiBzdGF0 aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9y ZU9wdGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wgZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNv bnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludAlyZXN0b3Jl X29uZV9kYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAq b3B0cywKKwkJCQkJCQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVt LAorCQkJCQkJCQkgYm9vbCBnbG9iYWxzX29ubHkpOworc3RhdGljIGludCByZXN0b3JlX2dsb2Jh bF9vYmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsCisJCVJlc3RvcmVPcHRpb25zICpv cHRzLCBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwKKwkJaW50IG51bSwgYm9vbCBn bG9iYWxzX29ubHkpOworc3RhdGljIGludAlyZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hh ciAqaW5wdXRGaWxlU3BlYywKKwkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5z LCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMpOworc3RhdGljIGludAlnZXRf ZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJCQkJCVNpbXBsZVB0 ckxpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4 Y2x1ZGVfcGF0dGVybnMpOworc3RhdGljIGludAlnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZp bGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJCQkJICAgU2ltcGxlUHRyTGlzdCAq ZGJuYW1lX29pZF9saXN0KTsKKworLyoKKyAqIFN0b3JlcyBhIGRhdGFiYXNlIE9JRCBhbmQgdGhl IGNvcnJlc3BvbmRpbmcgbmFtZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgRGJPaWROYW1lCit7CisJ T2lkCQkJb2lkOworCWNoYXIJCXN0cltGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBudWxsLXRl cm1pbmF0ZWQgc3RyaW5nIGhlcmUgKi8KK30gRGJPaWROYW1lOworCiAKIGludAogbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJYzsK LQlpbnQJCQlleGl0X2NvZGU7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAgICAq QUg7CiAJY2hhcgkgICAqaW5wdXRGaWxlU3BlYzsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsK IAlib29sCQlzY2hlbWFfb25seSA9IGZhbHNlOworCWludAkJCW5fZXJyb3JzID0gMDsKKwlib29s CQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKKwlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0 dGVybnMgPSB7TlVMTCwgTlVMTH07CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0gMDsK IAlzdGF0aWMgaW50CWVuYWJsZV9yb3dfc2VjdXJpdHkgPSAwOwogCXN0YXRpYyBpbnQJaWZfZXhp c3RzID0gMDsKQEAgLTg5LDYgKzExOSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQl7ImNsZWFuIiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBOVUxMLCAnQyd9LAog CQl7ImRhdGEtb25seSIsIDAsIE5VTEwsICdhJ30sCisJCXsiZ2xvYmFscy1vbmx5IiwgMCwgTlVM TCwgJ2cnfSwKIAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4aXQtb24tZXJyb3Ii LCAwLCBOVUxMLCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVMTCwgJ04nfSwKQEAg LTE0Miw2ICsxNzMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJzdGF0aXN0 aWNzLW9ubHkiLCBub19hcmd1bWVudCwgJnN0YXRpc3RpY3Nfb25seSwgMX0sCiAJCXsiZmlsdGVy IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDR9LAogCQl7InJlc3RyaWN0LWtleSIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCA2fSwKKwkJeyJleGNsdWRlLWRhdGFiYXNlIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsIDd9LAogCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07CkBAIC0xNzAs NyArMjAyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9CiAKLQl3aGls ZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNDZDplZjpGOmg6STpqOmxMOm46TjpP cDpQOlJzUzp0OlQ6VTp2d1d4MSIsCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJn diwgImFjQ2Q6ZWY6RjpnaDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKIAkJCQkJ CQljbWRvcHRzLCBOVUxMKSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCkBAIC0xOTcsMTEgKzIy OSwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlpZiAoc3RybGVuKG9wdGFy ZykgIT0gMCkKIAkJCQkJb3B0cy0+Zm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJ CWJyZWFrOworCQkJY2FzZSAnZyc6CisJCQkJLyogcmVzdG9yZSBvbmx5IGdsb2JhbCBzcWwgY29t bWFuZHMuICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJCWNhc2Ug J2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5jcGFyYW1zLnBn aG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwotCiAJCQljYXNlICdqJzoJCQkv KiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJaWYgKCFvcHRpb25fcGFyc2VfaW50KG9w dGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkgIFBHX01BWF9KT0JTLApAQCAtMzIxLDYg KzM1NiwxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlvcHRzLT5yZXN0cmlj dF9rZXkgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSA3OgkJCQkv KiBkYXRhYmFzZSBwYXR0ZXJucyB0byBza2lwICovCisJCQkJc2ltcGxlX3N0cmluZ19saXN0X2Fw cGVuZCgmZGJfZXhjbHVkZV9wYXR0ZXJucywgb3B0YXJnKTsKKwkJCQlicmVhazsKKwogCQkJZGVm YXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8K IAkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3Jt YXRpb24uIiwgcHJvZ25hbWUpOwpAQCAtMzQ3LDYgKzM4NiwxMyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAlpZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFt ZSAmJiAhb3B0cy0+dG9jU3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBh bmQgLWYvLS1maWxlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0 ZXJucy5oZWFkICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJv cHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcv LS1nbG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwi IGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJ fQorCiAJLyogU2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNlciBp cyBjb25mdXNlZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBAIC00NzIsNiAr NTE4LDEwNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1h dE5hbWUpOwogCX0KIAorCS8qCisJICogSWYgbWFwLmRhdCBmaWxlIGlzIHByZXNlbnQsIHRoZW4g cmVzdG9yZSBhbGwgdGhlCisJICogZGF0YWJhc2VzIGZyb20gbWFwLmRhdCAsIGJ1dCBza2lwIHJl c3RvcmluZyB0aG9zZSBtYXRjaGluZworCSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4K KwkgKi8KKwlpZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmCisJCQkoZmlsZV9leGlzdHNfaW5f ZGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJtYXAuZGF0IikgfHwKKwkJCSBmaWxlX2V4aXN0c19p bl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy50YXIiKSB8fAorCQkJIGZpbGVfZXhpc3Rz X2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLmRtcCIpKSkKKwl7CisJCWNoYXIgICAg ICAgIGdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisKKwkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVj dG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLnRhciIpKQorCQkJc25wcmludGYoZ2xvYmFsX3BhdGgs IE1BWFBHUEFUSCwgIiVzL3RvYy50YXIiLCBpbnB1dEZpbGVTcGVjKTsKKwkJZWxzZSBpZiAoZmls ZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZG1wIikpCisJCQlzbnBy aW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLmRtcCIsIGlucHV0RmlsZVNwZWMp OworCQllbHNlCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBpbnB1 dEZpbGVTcGVjKTsKKworCQkvKgorCQkgKiBDYW4gb25seSB1c2UgLS1saXN0IG9yIC0tdXNlLWxp c3Qgb3B0aW9ucyB3aXRoIGEgc2luZ2xlIGRhdGFiYXNlCisJCSAqIGR1bXAuCisJCSAqLworCQlp ZiAob3B0cy0+dG9jU3VtbWFyeSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLWwvLS1saXN0IGNhbm5v dCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxs Iik7CisJCWVsc2UgaWYgKG9wdHMtPnRvY0ZpbGUpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1MLy0t dXNlLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVk IGJ5IHBnX2R1bXBhbGwiKTsKKworCQkvKgorCQkgKiBUbyByZXN0b3JlIGZyb20gYSBwZ19kdW1w YWxsIGFyY2hpdmUsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbgorCQkgKiBtdXN0IGJlIHNw ZWNpZmllZCB1bmxlc3Mgd2UgYXJlIG9ubHkgcmVzdG9yaW5nIGdsb2JhbHMuCisJCSAqLworCQlp ZiAoIWdsb2JhbHNfb25seSAmJiBvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQl7CisJCQlwZ19sb2df ZXJyb3IoIm9wdGlvbiAtQy8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3Rvcmlu ZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIpOworCQkJcGdfbG9nX2Vycm9yX2hp bnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsK KwkJCXBnX2xvZ19lcnJvcl9oaW50KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVzdG9y ZWQgdXNpbmcgdGhlaXIgc3BlY2lmaWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgxKTsK KwkJfQorCisJCS8qIElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLwor CQlpZiAoZ2xvYmFsc19vbmx5KQorCQl7CisJCQluX2Vycm9ycyA9IHJlc3RvcmVfZ2xvYmFsX29i amVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBnbG9iYWxzX29u bHkpOworCisJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIHNraXBwZWQgYmVjYXVz ZSBvcHRpb24gLWcvLS1nbG9iYWxzLW9ubHkgd2FzIHNwZWNpZmllZCIpOworCQl9CisJCWVsc2UK KwkJeworCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0ICov CisJCQluX2Vycm9ycyA9IHJlc3RvcmVfYWxsX2RhdGFiYXNlcyhpbnB1dEZpbGVTcGVjLCBkYl9l eGNsdWRlX3BhdHRlcm5zLAorCQkJCQkJCQkJCQkgb3B0cywgbnVtV29ya2Vycyk7CisJCX0KKwor CQkvKiBGcmVlIGRiIHBhdHRlcm4gbGlzdC4gKi8KKwkJc2ltcGxlX3N0cmluZ19saXN0X2Rlc3Ry b3koJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCX0KKwllbHNlIC8qIHByb2Nlc3MgaWYgbWFwLmRh dCBmaWxlIGRvZXMgbm90IGV4aXN0LiAqLworCQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFi YXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsCisJCQkJbnVtV29ya2VycywgZmFsc2UsIDAsIGdsb2Jh bHNfb25seSk7CisKKwkvKiBEb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMg ZHVyaW5nIHJlc3RvcmUuICovCisJaWYgKG5fZXJyb3JzKQorCXsKKwkJcGdfbG9nX3dhcm5pbmco ImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgbl9lcnJvcnMpOworCQlyZXR1cm4gMTsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMKKyAq CisgKiBUaGlzIHJlc3RvcmUgYWxsIGdsb2JhbCBvYmplY3RzLgorICoKKyAqIElmIGdsb2JhbHNf b25seSBpcyBzZXQsIHRoZW4gc2tpcCBEUk9QIERBVEFCQVNFIGNvbW1hbmRzIGZyb20gcmVzdG9y ZS4KKyAqLworc3RhdGljIGludCByZXN0b3JlX2dsb2JhbF9vYmplY3RzKGNvbnN0IGNoYXIgKmlu cHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2VycywgYm9v bCBhcHBlbmRfZGF0YSwgaW50IG51bSwgYm9vbCBnbG9iYWxzX29ubHkpCit7CisJcmV0dXJuIHJl c3RvcmVfb25lX2RhdGFiYXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsCisJCQlh cHBlbmRfZGF0YSwgbnVtLCBnbG9iYWxzX29ubHkpOworfQorCisvKgorICogcmVzdG9yZV9vbmVf ZGF0YWJhc2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9j LmRhdCBmaWxlLgorICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9p bmcgcmVzdG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3Qg Y2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCSBpbnQgbnVt V29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSwgYm9vbCBnbG9iYWxzX29ubHkpCit7 CisJQXJjaGl2ZSAgICAqQUg7CisJaW50CQkJbl9lcnJvcnM7CisKIAlBSCA9IE9wZW5BcmNoaXZl KGlucHV0RmlsZVNwZWMsIG9wdHMtPmZvcm1hdCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwg TlVMTCwgb3B0cyk7CkBAIC00NzksOSArNjI0LDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCS8qCiAJICogV2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24geWV0IGJ1dCB0aGF0IGRv ZXNuJ3QgbWF0dGVyLiBUaGUgY29ubmVjdGlvbgogCSAqIGlzIGluaXRpYWxpemVkIHRvIE5VTEwg YW5kIGlmIHdlIHRlcm1pbmF0ZSB0aHJvdWdoIGV4aXRfbmljZWx5KCkgd2hpbGUKLQkgKiBpdCdz IHN0aWxsIE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9wLgor CSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEg bm8tb3AuIElmIHdlIGFyZQorCSAqIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4g b25seSB1cGRhdGUgQVggaGFuZGxlIGZvciBjbGVhbnVwIGFzCisJICogdGhlIHByZXZpb3VzIGVu dHJ5IHdhcyBhbHJlYWR5IGluIHRoZSBhcnJheSBhbmQgd2UgaGFkIGNsb3NlZCBwcmV2aW91cwor CSAqIGNvbm5lY3Rpb24sIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgYXJyYXkgc2xvdC4KIAkgKi8K LQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWlmICghYXBwZW5kX2RhdGEgfHwgbnVtID09 IDApCisJCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJZWxzZQorCQlyZXBsYWNlX29uX2V4 aXRfY2xvc2VfYXJjaGl2ZShBSCk7CiAKIAkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93IG5v aXN5IHRvIGJlICovCiAJQUgtPnZlcmJvc2UgPSBvcHRzLT52ZXJib3NlOwpAQCAtNTAxLDI1ICs2 NTIsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZWxzZQogCXsKIAkJUHJvY2Vz c0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJlc3RvcmVBcmNoaXZlKEFIKTsKKwkJUmVz dG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRhLCBnbG9iYWxzX29ubHkpOwogCX0KIAotCS8qIGRv bmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwotCWlmIChBSC0+bl9lcnJv cnMpCi0JCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3JlOiAlZCIsIEFI LT5uX2Vycm9ycyk7CisJbl9lcnJvcnMgPSBBSC0+bl9lcnJvcnM7CiAKIAkvKiBBSCBtYXkgYmUg ZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwotCWV4aXRfY29kZSA9IEFILT5uX2Vycm9ycyA/IDEg OiAwOwotCiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBleGl0X2NvZGU7CisJcmV0dXJu IG5fZXJyb3JzOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUp CiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBmcm9tIGFu IGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50Zihf KCIlcyByZXN0b3JlcyBQb3N0Z3JlU1FMIGRhdGFiYXNlcyBmcm9tIGFyY2hpdmVzIGNyZWF0ZWQg YnkgcGdfZHVtcCBvciBwZ19kdW1wYWxsLlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJV c2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLiBbRklMRV1cbiIpLCBwcm9n bmFtZSk7CiAKQEAgLTUzNyw2ICs2ODQsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkK IAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAgICAgICAgICAgICAgIGNsZWFuIChkcm9wKSBk YXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMs IC0tY3JlYXRlICAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikp OwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQtb24tZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJv ciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikpOworCXByaW50ZihfKCIgIC1nLCAtLWdsb2Jh bHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFz ZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1pbmRleD1OQU1FICAgICAgICAgICAgIHJlc3Rv cmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYoXygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAg ICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJp bnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5BTUUgICAgICB1c2UgdGFibGUgb2YgY29udGVu dHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC01NTMsNiArNzAxLDcgQEAgdXNhZ2UoY29uc3Qg Y2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLTEsIC0tc2luZ2xlLXRyYW5zYWN0aW9uICAg ICByZXN0b3JlIGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1k aXNhYmxlLXRyaWdnZXJzICAgICAgICAgICBkaXNhYmxlIHRyaWdnZXJzIGR1cmluZyBkYXRhLW9u bHkgcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC0tZW5hYmxlLXJvdy1zZWN1cml0eSAgICAg ICAgZW5hYmxlIHJvdyBzZWN1cml0eVxuIikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRh YmFzZT1QQVRURVJOICAgZG8gbm90IHJlc3RvcmUgdGhlIHNwZWNpZmllZCBkYXRhYmFzZShzKVxu IikpOwogCXByaW50ZihfKCIgIC0tZmlsdGVyPUZJTEVOQU1FICAgICAgICAgICAgcmVzdG9yZSBv ciBza2lwIG9iamVjdHMgYmFzZWQgb24gZXhwcmVzc2lvbnNcbiIKIAkJCSAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluIEZJTEVOQU1FXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1pZi1l eGlzdHMgICAgICAgICAgICAgICAgICB1c2UgSUYgRVhJU1RTIHdoZW4gZHJvcHBpbmcgb2JqZWN0 c1xuIikpOwpAQCAtNTg4LDggKzczNyw4IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQog CXByaW50ZihfKCIgIC0tcm9sZT1ST0xFTkFNRSAgICAgICAgICBkbyBTRVQgUk9MRSBiZWZvcmUg cmVzdG9yZVxuIikpOwogCiAJcHJpbnRmKF8oIlxuIgotCQkJICJUaGUgb3B0aW9ucyAtSSwgLW4s IC1OLCAtUCwgLXQsIC1ULCBhbmQgLS1zZWN0aW9uIGNhbiBiZSBjb21iaW5lZCBhbmQgc3BlY2lm aWVkXG4iCi0JCQkgIm11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxu IikpOworCQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1ULCAtLXNlY3Rpb24s IGFuZCAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlXG4iCisJCQkgImNvbWJpbmVkIGFuZCBzcGVj aWZpZWQgbXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMuXG4iKSk7CiAJ cHJpbnRmKF8oIlxuSWYgbm8gaW5wdXQgZmlsZSBuYW1lIGlzIHN1cHBsaWVkLCB0aGVuIHN0YW5k YXJkIGlucHV0IGlzIHVzZWQuXG5cbiIpKTsKIAlwcmludGYoXygiUmVwb3J0IGJ1Z3MgdG8gPCVz Pi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CiAJcHJpbnRmKF8oIiVzIGhvbWUgcGFnZTogPCVz PlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOwpAQCAtNjk0LDMgKzg0Myw0MTUgQEAg cmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25z ICpvcHRzKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBmaWxlX2V4aXN0 c19pbl9kaXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgZXhpc3RzIGlu IHRoZSBnaXZlbiBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBib29sCitmaWxlX2V4aXN0c19pbl9k aXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1 Y3Qgc3RhdCBzdDsKKwljaGFyCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYs IE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19m YXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4g KHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisg KiBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUKKyAqCisgKiBUaGlzIHdpbGwgbWFyayBmb3Ig c2tpcHBpbmcgYW55IGVudHJpZXMgZnJvbSBkYm5hbWVfb2lkX2xpc3QgdGhhdCBwYXR0ZXJuIG1h dGNoIGFuCisgKiBlbnRyeSBpbiB0aGUgZGJfZXhjbHVkZV9wYXR0ZXJucyBsaXN0LgorICoKKyAq IFJldHVybnMgdGhlIG51bWJlciBvZiBkYXRhYmFzZSB0byBiZSByZXN0b3JlZC4KKyAqCisgKi8K K3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJ CQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCVNpbXBsZVN0cmlu Z0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKK3sKKwlpbnQJCQljb3VudF9kYiA9IDA7CisJUFFF eHBCdWZmZXIgcXVlcnk7CisJUEdyZXN1bHQgICAqcmVzOworCisJcXVlcnkgPSBjcmVhdGVQUUV4 cEJ1ZmZlcigpOworCisJaWYgKCFjb25uICYmIGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBO VUxMKQorCQlwZ19sb2dfaW5mbygiY29uc2lkZXJpbmcgUEFUVEVSTiBhcyBOQU1FIGZvciAtLWV4 Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uIGFzIG5vIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2hpbGUgZG9p bmcgcGdfcmVzdG9yZSIpOworCisJLyoKKwkgKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRibmFt ZXMgYW5kIGlmIHNwZWNpZmllZCB0byBza2lwIHJlc3RvcmluZywgdGhlbgorCSAqIHJlbW92ZSBk Ym5hbWUgZnJvbSBsaXN0LgorCSAqLworCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2NlbGwg PSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+ bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxs LT5wdHI7CisJCWJvb2wJCXNraXBfZGJfcmVzdG9yZSA9IGZhbHNlOworCQlQUUV4cEJ1ZmZlciBk Yl9saXQgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25u KGRiX2xpdCwgZGJpZG5hbWUtPnN0ciwgY29ubik7CisKKwkJZm9yIChTaW1wbGVTdHJpbmdMaXN0 Q2VsbCAqcGF0X2NlbGwgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IHBhdF9jZWxsOyBwYXRf Y2VsbCA9IHBhdF9jZWxsLT5uZXh0KQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlcmUgaXMgYW4g ZXhhY3QgbWF0Y2ggdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHRyeSBhIHBhdHRlcm4KKwkJCSAqIG1h dGNoCisJCQkgKi8KKwkJCWlmIChwZ19zdHJjYXNlY21wKGRiaWRuYW1lLT5zdHIsIHBhdF9jZWxs LT52YWwpID09IDApCisJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCS8qIE90aGVyd2lz ZSwgdHJ5IGEgcGF0dGVybiBtYXRjaCBpZiB0aGVyZSBpcyBhIGNvbm5lY3Rpb24gKi8KKwkJCWVs c2UgaWYgKGNvbm4pCisJCQl7CisJCQkJaW50CQkJZG90Y250OworCisJCQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocXVlcnksICJTRUxFQ1QgMSAiKTsKKwkJCQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4o Y29ubiwgcXVlcnksIHBhdF9jZWxsLT52YWwsIGZhbHNlLAorCQkJCQkJCQkJICBmYWxzZSwgTlVM TCwgZGJfbGl0LT5kYXRhLAorCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsK KworCQkJCWlmIChkb3RjbnQgPiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3Bl ciBxdWFsaWZpZWQgbmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkg ZGJpZG5hbWUtPnN0cik7CisJCQkJCVBRZmluaXNoKGNvbm4pOworCQkJCQlleGl0X25pY2VseSgx KTsKKwkJCQl9CisKKwkJCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOwor CisJCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX1RVUExFU19PSykgJiYgUFFu dHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJCQlw Z19sb2dfaW5mbygiZGF0YWJhc2UgbmFtZSBcIiVzXCIgbWF0Y2hlcyBleGNsdWRlIHBhdHRlcm4g XCIlc1wiIiwgZGJpZG5hbWUtPnN0ciwgcGF0X2NlbGwtPnZhbCk7CisJCQkJfQorCisJCQkJUFFj bGVhcihyZXMpOworCQkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOworCQkJfQorCisJCQlpZiAo c2tpcF9kYl9yZXN0b3JlKQorCQkJCWJyZWFrOworCQl9CisKKwkJZGVzdHJveVBRRXhwQnVmZmVy KGRiX2xpdCk7CisKKwkJLyoKKwkJICogTWFyayBkYiB0byBiZSBza2lwcGVkIG9yIGluY3JlbWVu dCB0aGUgY291bnRlciBvZiBkYnMgdG8gYmUKKwkJICogcmVzdG9yZWQKKwkJICovCisJCWlmIChz a2lwX2RiX3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2Ug XCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7CisJCQlkYmlkbmFtZS0+b2lkID0gSW52YWxpZE9pZDsK KwkJfQorCQllbHNlCisJCXsKKwkJCWNvdW50X2RiKys7CisJCX0KKwl9CisKKwlkZXN0cm95UFFF eHBCdWZmZXIocXVlcnkpOworCisJcmV0dXJuIGNvdW50X2RiOworfQorCisvKgorICogZ2V0X2Ri bmFtZV9vaWRfbGlzdF9mcm9tX21maWxlCisgKgorICogT3BlbiBtYXAuZGF0IGZpbGUgYW5kIHJl YWQgbGluZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBsaXN0IG9mIGRhdGFiYXNlCisgKiBu YW1lcyBhbmQgY29ycmVzcG9uZGluZyBkYl9vaWQuCisgKgorICogUmV0dXJucywgdG90YWwgbnVt YmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4KKyAqLworc3RhdGljIGludAor Z2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBT aW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJU3RyaW5nSW5mb0RhdGEgbGluZWJ1 ZjsKKwlGSUxFCSAgICpwZmlsZTsKKwljaGFyCQltYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJ aW50CQkJY291bnQgPSAwOworCisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIG1hcC5kYXQgZmls ZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMKKwkgKiB0aGVyZSBpcyBubyBkYXRh YmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGR1 bXBkaXJwYXRoLCAibWFwLmRhdCIpKQorCXsKKwkJcGdfbG9nX2luZm8oImRhdGFiYXNlIHJlc3Rv cmluZyBpcyBza2lwcGVkIGJlY2F1c2UgZmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QgaW4gZGly ZWN0b3J5IFwiJXNcIiIsICJtYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCQlyZXR1cm4gMDsKKwl9 CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZHVt cGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3Blbiht YXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdf ZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxlX3BhdGgpOwor CisJaW5pdFN0cmluZ0luZm8oJmxpbmVidWYpOworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1l L2RiX29pZCBjb21iaW5hdGlvbnMgdG8gdGhlIGxpc3QuICovCisJd2hpbGUgKHBnX2dldF9saW5l X2J1ZihwZmlsZSwgJmxpbmVidWYpKQorCXsKKwkJT2lkCQkJZGJfb2lkID0gSW52YWxpZE9pZDsK KwkJY2hhcgkgICAqZGJuYW1lOworCQlEYk9pZE5hbWUgICpkYmlkbmFtZTsKKwkJaW50CQkJbmFt ZWxlbjsKKwkJY2hhcgkgICAqcCA9IGxpbmVidWYuZGF0YTsKKworCQkvKiBFeHRyYWN0IGRib2lk LiAqLworCQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnApKQorCQkJcCsrOworCQlp ZiAocCA+IGxpbmVidWYuZGF0YSAmJiAqcCA9PSAnICcpCisJCXsKKwkJCXNzY2FuZihsaW5lYnVm LmRhdGEsICIldSIsICZkYl9vaWQpOworCQkJcCsrOworCQl9CisKKwkJLyogZGJuYW1lIGlzIHRo ZSByZXN0IG9mIHRoZSBsaW5lICovCisJCWRibmFtZSA9IHA7CisJCW5hbWVsZW4gPSBzdHJsZW4o ZGJuYW1lKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4aXQgaWYgdGhlIGZpbGUgaGFzIGFu eSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlkKGRiX29pZCkgfHwgbmFtZWxl biA8PSAxKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gZmlsZSBcIiVzXCIgb24gbGlu ZSAlZCIsIG1hcF9maWxlX3BhdGgsCisJCQkJCSBjb3VudCArIDEpOworCisJCXBnX2xvZ19pbmZv KCJmb3VuZCBkYXRhYmFzZSBcIiVzXCIgKE9JRDogJXUpIGluIGZpbGUgXCIlc1wiIiwKKwkJCQkJ ZGJuYW1lLCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCWRiaWRuYW1lID0gcGdfbWFsbG9j KG9mZnNldG9mKERiT2lkTmFtZSwgc3RyKSArIG5hbWVsZW4gKyAxKTsKKwkJZGJpZG5hbWUtPm9p ZCA9IGRiX29pZDsKKwkJc3RybGNweShkYmlkbmFtZS0+c3RyLCBkYm5hbWUsIG5hbWVsZW4pOwor CisJCXNpbXBsZV9wdHJfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYmlkbmFtZSk7CisJ CWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmls ZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlX2FsbF9kYXRhYmFzZXMK KyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNl bnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisg KiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZp ZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJucywgbnVt YmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0 b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJICBTaW1w bGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAor CQkJCQkgIGludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZVB0ckxpc3QgZGJuYW1lX29pZF9saXN0 ID0ge05VTEwsIE5VTEx9OworCWludAkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJCQludW1f dG90YWxfZGI7CisJaW50CQkJbl9lcnJvcnNfdG90YWw7CisJaW50CQkJY291bnQgPSAwOworCWNo YXIJICAgKmNvbm5lY3RlZF9kYiA9IE5VTEw7CisJYm9vbAkJZHVtcERhdGEgPSBvcHRzLT5kdW1w RGF0YTsKKwlib29sCQlkdW1wU2NoZW1hID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlib29sCQlkdW1w U3RhdGlzdGljcyA9IG9wdHMtPmR1bXBTY2hlbWE7CisJUEdjb25uICpjb25uID0gTlVMTDsKKwlj aGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCisJLyogQmFzZWQgb24gZmlsZSwgc2V0IHBh dGguICovCisJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9j LnRhciIpKQorCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLnRhciIs IGlucHV0RmlsZVNwZWMpOworCWVsc2UgaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1 dEZpbGVTcGVjLCAidG9jLmRtcCIpKQorCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRI LCAiJXMvdG9jLmRtcCIsIGlucHV0RmlsZVNwZWMpOworCWVsc2UKKwkJc25wcmludGYoZ2xvYmFs X3BhdGgsIE1BWFBHUEFUSCwgIiVzIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkvKiBTYXZlIGRiIG5h bWUgdG8gcmV1c2UgaXQgZm9yIGFsbCB0aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMtPmNwYXJh bXMuZGJuYW1lKQorCQljb25uZWN0ZWRfZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsKKworCW51 bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShpbnB1dEZpbGVTcGVj LCAmZGJuYW1lX29pZF9saXN0KTsKKworCS8qIElmIG1hcC5kYXQgaGFzIG5vIGVudHJpZXMsIHJl dHVybiBhZnRlciBwcm9jZXNzaW5nIGdsb2JhbCBjb21tYW5kcy4gKi8KKwlpZiAoZGJuYW1lX29p ZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xv YmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBmYWxzZSk7CisKKwlwZ19sb2df aW5mbyhuZ2V0dGV4dCgiZm91bmQgJWQgZGF0YWJhc2UgbmFtZSBpbiBcIiVzXCIiLAorCQkJCQkJ ICJmb3VuZCAlZCBkYXRhYmFzZSBuYW1lcyBpbiBcIiVzXCIiLAorCQkJCQkJIG51bV90b3RhbF9k YiksCisJCQkJbnVtX3RvdGFsX2RiLCAibWFwLmRhdCIpOworCisJLyoKKwkgKiBJZiBleGNsdWRl LXBhdHRlcm5zIGlzIGdpdmVuLCB0aGVuIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlIHRvIHByb2Nl c3MKKwkgKiBpdC4KKwkgKi8KKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwp CisJeworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCWNvbm4gPSBDb25uZWN0 RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0 LAorCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJ X0RFRkFVTFQsCisJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7 CisKKwkJCWlmICghY29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0 YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJaWYgKCFjb25u KQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIl c1wiIiwgInBvc3RncmVzIik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInBvc3RncmVz IiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0 LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2du YW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJLyogVHJ5IHdpdGggdGVtcGxhdGUx LiAqLworCQkJaWYgKCFjb25uKQorCQkJeworCQkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29u bmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAidGVtcGxhdGUxIik7CisKKwkJCQljb25uID0gQ29u bmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJ CQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVG QVVMVCwKKwkJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJ CQl9CisJCX0KKwl9CisKKwkvKgorCSAqIGZpbHRlciB0aGUgZGIgbGlzdCBhY2NvcmRpbmcgdG8g dGhlIGV4Y2x1ZGUgcGF0dGVybnMKKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGdldF9kYm5hbWVz X2xpc3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCQkJIGRi X2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rpb24gYXMgd2Ug YXJlIGRvbmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAoY29ubikKKwkJUFFm aW5pc2goY29ubik7CisKKwkvKiBPcGVuIHRvYy5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQg YWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCW5fZXJyb3JzX3RvdGFsID0gIHJlc3Rv cmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAw LCBmYWxzZSk7CisKKwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLwor CWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMIHx8IG51bV9kYl9yZXN0b3JlID09IDAp CisJeworCQlwZ19sb2dfaW5mbyhuZ2V0dGV4dCgibm8gZGF0YWJhc2UgbmVlZHMgcmVzdG9yaW5n IG91dCBvZiAlZCBkYXRhYmFzZSIsCisJCQkJCQkJICJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jp bmcgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYiksCisJCQkJCW51bV90b3RhbF9k Yik7CisJCXJldHVybiBuX2Vycm9yc190b3RhbDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0 byByZXN0b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3Rv cmUsIG51bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFiYXNl cyB0byByZXN0b3JlIGFmdGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRhYmFzZSBz d2l0Y2goZXMpLiAgTm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkgKi8KKwlm b3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7CisJ CSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRi aWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWNoYXIJCXN1YmRpcnBhdGhb TUFYUEdQQVRIXTsKKwkJY2hhcgkJc3ViZGlyZGJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCWRi ZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9lcnJvcnM7CisKKwkJLyogaWdub3JlIGRi cyBtYXJrZWQgZm9yIHNraXBwaW5nICovCisJCWlmIChkYmlkbmFtZS0+b2lkID09IEludmFsaWRP aWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRl X2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkCisJCSAqIGludG8gYW4gYWxy ZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJ ICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUo b3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlk ZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlyZGJwYXRoLCBNQVhQR1BB VEgsICIlcy9kYXRhYmFzZXMiLCBpbnB1dEZpbGVTcGVjKTsKKworCQkvKgorCQkgKiBMb29rIGZv ciB0aGUgZGF0YWJhc2UgZHVtcCBmaWxlL2Rpci4gSWYgdGhlcmUgaXMgYW4ge29pZH0udGFyIG9y CisJCSAqIHtvaWR9LmRtcCBmaWxlLCB1c2UgaXQuIE90aGVyd2lzZSB0cnkgdG8gdXNlIGEgZGly ZWN0b3J5IGNhbGxlZAorCQkgKiB7b2lkfQorCQkgKi8KKwkJc25wcmludGYoZGJmaWxlbmFtZSwg TUFYUEdQQVRILCAiJXUudGFyIiwgZGJpZG5hbWUtPm9pZCk7CisJCWlmIChmaWxlX2V4aXN0c19p bl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCXNucHJpbnRmKHN1YmRp cnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS50YXIiLCBpbnB1dEZpbGVTcGVjLCBk YmlkbmFtZS0+b2lkKTsKKwkJZWxzZQorCQl7CisJCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQ R1BBVEgsICIldS5kbXAiLCBkYmlkbmFtZS0+b2lkKTsKKworCQkJaWYgKGZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJCXNucHJpbnRmKHN1YmRp cnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS5kbXAiLCBpbnB1dEZpbGVTcGVjLCBk YmlkbmFtZS0+b2lkKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BB VEgsICIlcy9kYXRhYmFzZXMvJXUiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJ fQorCisJCXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUt PnN0cik7CisKKwkJLyogSWYgZGF0YWJhc2UgaXMgYWxyZWFkeSBjcmVhdGVkLCB0aGVuIGRvbid0 IHNldCBjcmVhdGVEQiBmbGFnLiAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsK KwkJCVBHY29ubgkgICAqdGVzdF9jb25uOworCisJCQl0ZXN0X2Nvbm4gPSBDb25uZWN0RGF0YWJh c2UoZGJpZG5hbWUtPnN0ciwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkJ b3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxU LAorCQkJCQkJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJ CQlpZiAodGVzdF9jb25uKQorCQkJeworCQkJCVBRZmluaXNoKHRlc3RfY29ubik7CisKKwkJCQkv KiBVc2UgYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlIGZvciBjb25uZWN0aW9uLiAqLworCQkJCW9w dHMtPmNyZWF0ZURCID0gMDsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGRiaWRuYW1lLT5z dHI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogd2UnbGwgaGF2ZSB0byBjcmVhdGUgaXQg Ki8KKwkJCQlvcHRzLT5jcmVhdGVEQiA9IDE7CisJCQkJb3B0cy0+Y3BhcmFtcy5kYm5hbWUgPSBj b25uZWN0ZWRfZGI7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBSZXNldCBmbGFncyAtIG1pZ2h0 IGhhdmUgYmVlbiByZXNldCBpbiBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBieSB0aGUKKwkJICogcHJl dmlvdXMgcmVzdG9yZS4KKwkJICovCisJCW9wdHMtPmR1bXBEYXRhID0gZHVtcERhdGE7CisJCW9w dHMtPmR1bXBTY2hlbWEgPSBkdW1wU2NoZW1hOworCQlvcHRzLT5kdW1wU3RhdGlzdGljcyA9IGR1 bXBTdGF0aXN0aWNzOworCisJCS8qIFJlc3RvcmUgdGhlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJ bl9lcnJvcnMgPSByZXN0b3JlX29uZV9kYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3Jr ZXJzLCB0cnVlLCAxLCBmYWxzZSk7CisKKwkJLyogUHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQg ZXJyb3JzIGR1cmluZyBzaW5nbGUgZGF0YWJhc2UgcmVzdG9yZS4gKi8KKwkJaWYgKG5fZXJyb3Jz KQorCQl7CisJCQluX2Vycm9yc190b3RhbCArPSBuX2Vycm9yczsKKwkJCXBnX2xvZ193YXJuaW5n KCJlcnJvcnMgaWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYmlkbmFt ZS0+c3RyLCBuX2Vycm9ycyk7CisJCX0KKworCQljb3VudCsrOworCX0KKworCS8qIExvZyBudW1i ZXIgb2YgcHJvY2Vzc2VkIGRhdGFiYXNlcy4gKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJl c3RvcmVkIGRhdGFiYXNlcyBpcyAlZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJu YW1lIGFuZCBkYm9pZCBsaXN0LiAqLworCXNpbXBsZV9wdHJfbGlzdF9kZXN0cm95KCZkYm5hbWVf b2lkX2xpc3QpOworCisJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2lj LnBsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzdkODkzZDVlNmEuLjU2 ZTg5ZGExZTVlCi0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMv YmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKQEAgLTIzNyw2ICsyMzcsMTIgQEAgY29tbWFuZF9m YWlsc19saWtlKAogCSdwZ19yZXN0b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQgLTFcLy0t c2luZ2xlLXRyYW5zYWN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAorY29tbWFu ZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycs ICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJv cjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRo IC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1k YXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Jwor KTsKKwogIyBhbHNvIGZhaWxzIGZvciAtciBhbmQgLXQsIGJ1dCBpdCBzZWVtcyBwb2ludGxlc3Mg dG8gYWRkIG1vcmUgdGVzdHMgZm9yIHRob3NlLgogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3Bn X2R1bXBhbGwnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScgXSwK QEAgLTI0NCw0ICsyNTAsOCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9w dGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8t LWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxs JywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNvZ25p emVkIG91dHB1dCBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFsbDogdW5yZWNvZ25pemVkIG91 dHB1dCBmb3JtYXQnKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFs bC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMC4uM2M3ZDJhZDdjNTMK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbApA QCAtMCwwICsxLDM5NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRB TCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJHRlbXBkaXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcjsKK215ICRydW5fZGIgPSAncG9zdGdyZXMnOwor bXkgJHNlcCA9ICR3aW5kb3dzX29zID8gIlxcIiA6ICIvIjsKKworIyBUYWJsZXNwYWNlIGxvY2F0 aW9ucyB1c2VkIGJ5ICJyZXN0b3JlX3RhYmxlc3BhY2UiIHRlc3QgY2FzZS4KK215ICR0YWJsZXNw YWNlMSA9ICIke3RlbXBkaXJ9JHtzZXB9dGJsMSI7CitteSAkdGFibGVzcGFjZTIgPSAiJHt0ZW1w ZGlyfSR7c2VwfXRibDIiOworbWtkaXIoJHRhYmxlc3BhY2UxKSB8fCBkaWUgIm1rZGlyICR0YWJs ZXNwYWNlMSAkISI7Citta2RpcigkdGFibGVzcGFjZTIpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3Bh Y2UyICQhIjsKKworIyBTY2FwZSB0YWJsZXNwYWNlIGxvY2F0aW9ucyBvbiBXaW5kb3dzLgorJHRh Ymxlc3BhY2UxID0gJHdpbmRvd3Nfb3MgPyAoJHRhYmxlc3BhY2UxID1+IHMvXFwvXFxcXC9ncikg OiAkdGFibGVzcGFjZTE7CiskdGFibGVzcGFjZTIgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFj ZTIgPX4gcy9cXC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNlMjsKKworIyBXaGVyZSBwZ19kdW1wYWxs IHdpbGwgYmUgZXhlY3V0ZWQuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygnbm9kZScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKworIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IERlZmluaXRpb24gb2YgdGhlIHBnX2R1bXBhbGwgdGVzdCBjYXNlcyB0byBydW4uCisjCisjIEVh Y2ggb2YgdGhlc2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQgYW5kIHRob3NlIG5hbWVzIGFyZSB1c2Vk IGZvciBmYWlsCisjIHJlcG9ydGluZyBhbmQgYWxzbyB0byBzYXZlIHRoZSBkdW1wIGFuZCByZXN0 b3JlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisjIHRlc3QgdG8gYXNzZXJ0LgorIworIyBU aGUgInNldHVwX3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNjcmlwdCB0aGF0IGNvbnRhaW5zIFNRTCBj b21tYW5kcyB0byBleGVjdXRlCisjIGJlZm9yZSBvZiBhY3R1YWxseSBleGVjdXRlIHRoZSB0ZXN0 cy4gVGhlIHNldHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJlZm9yZSBvZgorIyBhbnkgdGVzdCBleGVj dXRpb24uCisjCisjIFRoZSAiZHVtcF9jbWQiIGFuZCAicmVzdG9yZV9jbWQiIGFyZSB0aGUgY29t bWFuZHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUKKyMgInJlc3RvcmVfY21kIiBtdXN0IGhh dmUgdGhlIC0tZmlsZSBmbGFnIHRvIHNhdmUgdGhlIHJlc3RvcmUgb3V0cHV0IHNvIHRoYXQgd2UK KyMgY2FuIGFzc2VydCBvbiBpdC4KKyMKKyMgVGhlICJsaWtlIiBhbmQgInVubGlrZSIgaXMgYSBy ZWdleHAgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHRoZSBwZ19yZXN0b3JlCisjIG91dHB1dC4gSXQg bXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVuIGZpbGxlZCBwZXIgdGVzdCBjYXNlcyBidXQg aXQgYWxzbworIyBjYW4gaGF2ZSBib3RoLiBTZWUgImV4Y2x1ZGluZ19kYXRhYmFzZXMiIHRlc3Qg Y2FzZSBmb3IgZXhhbXBsZS4KK215ICVwZ2R1bXBhbGxfcnVucyA9ICgKKwlyZXN0b3JlX3JvbGVz ID0+IHsKKwkJc2V0dXBfc3FsID0+ICcKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbCBXSVRIIEVOQ1JZ UFRFRCBQQVNTV09SRCBcJ2FkbWluXCcgU1VQRVJVU0VSOworCQlDUkVBVEUgUk9MRSBkdW1wYWxs MiBXSVRIIFJFUExJQ0FUSU9OIENPTk5FQ1RJT04gTElNSVQgMTA7JywKKwkJZHVtcF9jbWQgPT4g WworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSct LWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQg PT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5 JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzLnNxbCIsCisJCQkiJHRl bXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisJCQlccypcUUNSRUFU RSBST0xFIGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVtcGFsbDIgV0lUSCBOT1NV UEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5PTE9HSU4gUkVQTElDQVRJ T04gTk9CWVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQorCQkveG0KKwl9LAorCisJcmVz dG9yZV90YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JFQVRFIFJPTEUgdGFw OworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRhYmxlc3Bh Y2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJs ZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2VfY29zdD0xLjApOyIsCisJCWR1bXBfY21kID0+IFsKKwkJ CSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQg PT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5 JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2Uuc3FsIiwKKwkJ CSIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQkjIE1hdGNoICJFIiBhcyBv cHRpb25hbCBzaW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVuIHJ1bm5pbmcgb24KKwkJ IyBXaW5kb3dzLgorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0Ymwy IE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMic7XEUKKwkJCVxuXFFB TFRFUiBUQUJMRVNQQUNFIHRibDIgU0VUIChzZXFfcGFnZV9jb3N0PTEuMCk7XEUKKwkJL3htLAor CX0sCisKKwlyZXN0b3JlX2dyYW50cyA9PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNSRUFURSBE QVRBQkFTRSB0YXBncmFudHNkYjsKKwkJQ1JFQVRFIFNDSEVNQSBwcml2YXRlOworCQlDUkVBVEUg U0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEwMTsKKwkJQ1JFQVRFIEZVTkNUSU9OIGZuKCkgUkVUVVJO UyB2b2lkIEFTIFwkXCQKKwkJQkVHSU4KKwkJRU5EOworCQlcJFwkIExBTkdVQUdFIHBscGdzcWw7 CisJCUNSRUFURSBST0xFIHN1cGVyOworCQlDUkVBVEUgUk9MRSBncmFudDE7CisJCUNSRUFURSBS T0xFIGdyYW50MjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQzOworCQlDUkVBVEUgUk9MRSBncmFudDQ7 CisJCUNSRUFURSBST0xFIGdyYW50NTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ2OworCQlDUkVBVEUg Uk9MRSBncmFudDc7CisJCUNSRUFURSBST0xFIGdyYW50ODsKKworCQlDUkVBVEUgVEFCTEUgdCAo aWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJ CUdSQU5UIFNFTEVDVCBPTiBUQUJMRSB0IFRPIGdyYW50MTsKKwkJR1JBTlQgSU5TRVJUIE9OIFRB QkxFIHQgVE8gZ3JhbnQyOworCQlHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0IHRvIGdy YW50MzsKKwkJR1JBTlQgQ09OTkVDVCwgQ1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRP IGdyYW50NDsKKwkJR1JBTlQgVVNBR0UsIENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFu dDU7CisJCUdSQU5UIFVTQUdFLCBTRUxFQ1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJpYWwgVE8g Z3JhbnQ2OworCQlHUkFOVCBzdXBlciBUTyBncmFudDc7CisJCUdSQU5UIEVYRUNVVEUgT04gRlVO Q1RJT04gZm4oKSBUTyBncmFudDg7CisJCSIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1w YWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvcmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdf cmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9y ZV9ncmFudHMiLAorCQldLAorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFHUkFOVCBzdXBlciBUTyBn cmFudDcgV0lUSCBJTkhFUklUIFRSVUUgR1JBTlRFRCBCWVxFCisJCQkoLipcbikqCisJCQlcblxR R1JBTlQgQUxMIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTtcRQorCQkJKC4qXG4pKgorCQkJ XG5cUUdSQU5UIEFMTCBPTiBGVU5DVElPTiBwdWJsaWMuZm4oKSBUTyBncmFudDg7XEUKKwkJCSgu KlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwgT04gU0VRVUVOQ0UgcHVibGljLnNlcmlhbCBUTyBncmFu dDY7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBTRUxFQ1QgT04gVEFCTEUgcHVibGljLnQg VE8gZ3JhbnQxO1xFCisJCQlcblxRR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdy YW50MjtcRQorCQkJXG5cUUdSQU5UIEFMTCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDM7XEUK KwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBDUkVBVEUsQ09OTkVDVCBPTiBEQVRBQkFTRSB0YXBn cmFudHNkYiBUTyBncmFudDQ7XEUKKwkJL3htLAorCX0sCisKKwlleGNsdWRpbmdfZGF0YWJhc2Vz ID0+IHsKKwkJc2V0dXBfc3FsID0+ICdDUkVBVEUgREFUQUJBU0UgZGIxOworCQlcYyBkYjEKKwkJ Q1JFQVRFIFRBQkxFIHQxIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEpLCAo MiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDIgKGlkIGludCk7CisJCUlOU0VSVCBJTlRP IHQyIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiMjsK KwkJXGMgZGIyCisJCUNSRUFURSBUQUJMRSB0MyAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDMg VkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ0IChpZCBpbnQpOwor CQlJTlNFUlQgSU5UTyB0NCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBE QVRBQkFTRSBkYmV4MzsKKwkJXGMgZGJleDMKKwkJQ1JFQVRFIFRBQkxFIHQ1IChpZCBpbnQpOwor CQlJTlNFUlQgSU5UTyB0NSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFC TEUgdDYgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ2IFZBTFVFUyAoMSksICgyKSwgKDMpLCAo NCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiZXg0OworCQlcYyBkYmV4NAorCQlDUkVBVEUgVEFC TEUgdDcgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ3IFZBTFVFUyAoMSksICgyKSwgKDMpLCAo NCk7CisJCUNSRUFURSBUQUJMRSB0OCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDggVkFMVUVT ICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGI1OworCQlcYyBkYjUK KwkJQ1JFQVRFIFRBQkxFIHQ5IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0OSBWQUxVRVMgKDEp LCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDEwIChpZCBpbnQpOworCQlJTlNFUlQg SU5UTyB0MTAgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJJywKKwkJZHVtcF9jbWQgPT4g WworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSct LWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKKwkJCSctLWV4Y2x1ZGUt ZGF0YWJhc2UnID0+ICdkYmV4KicsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcy5zcWwiLAorCQkJJy0tZXhjbHVkZS1k YXRhYmFzZScgPT4gJ2RiNScsCisJCQkiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcyIsCisJ CV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjFcRQorCQkJKC4q XG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDEgKFxFCisJCQkoLipcbikqCisJCQlc blxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUg REFUQUJBU0UgZGIyXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQz IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDQgKC94bSwKKwkJ dW5saWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIzXEUKKwkJCSguKlxuKSoK KwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ1IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNS RUFURSBUQUJMRSBwdWJsaWMudDYgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIERBVEFC QVNFIGRiNFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NyAoXEUK KwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ4IChcRQorCQkJXG5cUUNS RUFURSBEQVRBQkFTRSBkYjVcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJs aWMudDkgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MTAgKFxF CisJCS94bSwKKwl9LAorCisJZm9ybWF0X2RpcmVjdG9yeSA9PiB7CisJCXNldHVwX3NxbCA9PiAi Q1JFQVRFIFRBQkxFIGZvcm1hdF9kaXJlY3RvcnkoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsK KwkJSU5TRVJUIElOVE8gZm9ybWF0X2RpcmVjdG9yeSBWQUxVRVMgKDEsIHRydWUsICduYW1lMScp LCAoMiwgZmFsc2UsICduYW1lMicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxs JywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBk aXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1h dF9kaXJlY3RvcnkiLAorCQldLAorCQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0 X2RpcmVjdG9yeSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0X3RhciA9 PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF90YXIoYSBpbnQsIGIgYm9v bGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X3RhciBWQUxVRVMgKDEsIGZhbHNl LCAnbmFtZTMnKSwgKDIsIHRydWUsICduYW1lNCcpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdw Z19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvZm9ybWF0X3RhciIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0 b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvZm9ybWF0X3Rhci5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAorCQldLAor CQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0X3RhciAoYSwgYiwgYykgRlJPTSBz dGRpbjsveG0KKwl9LAorCisJZm9ybWF0X2N1c3RvbSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JF QVRFIFRBQkxFIGZvcm1hdF9jdXN0b20oYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5T RVJUIElOVE8gZm9ybWF0X2N1c3RvbSBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwgKDIsIHRy dWUsICduYW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSct LWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1 c3RvbSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywK KwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9y bWF0X2N1c3RvbS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAorCQls aWtlID0+IHFyL14gXG5cUUNPUFkgcHVibGljLmZvcm1hdF9jdXN0b20gKGEsIGIsIGMpIEZST00g c3RkaW47L3htCisJfSwKKworCWR1bXBfZ2xvYmFsc19vbmx5ID0+IHsKKwkJc2V0dXBfc3FsID0+ ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcihhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJ TlNFUlQgSU5UTyBmb3JtYXRfZGlyIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1 ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0t Zm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWdsb2JhbHMtb25seScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9 PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsICctLWdsb2JhbHMtb25seScsCisJCQknLS1mb3Jt YXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFs c19vbmx5LnNxbCIsCisJCQkiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAorCQls aWtlID0+IHFyLworICAgICAgICAgICAgXlxzKlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDtcRVxzKlxu CisJCQkveG0KKwl9LCk7CisKKyMgRmlyc3QgZXhlY3V0ZSB0aGUgc2V0dXBfc3FsCitmb3JlYWNo IG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7CisJaWYgKCRwZ2R1bXBhbGxf cnVuc3skcnVufS0+e3NldHVwX3NxbH0pCisJeworCQkkbm9kZS0+c2FmZV9wc3FsKCRydW5fZGIs ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pOworCX0KK30KKworIyBFeGVjdXRl IHRoZSB0ZXN0cworZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9ydW5zKQor eworCSMgQ3JlYXRlIGEgbmV3IHRhcmdldCBjbHVzdGVyIHRvIHBnX3Jlc3RvcmUgZWFjaCB0ZXN0 IGNhc2UgcnVuIHNvIHRoYXQgd2UKKwkjIGRvbid0IG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBj bGVhbnVwIGZyb20gdGhlIHRhcmdldCBjbHVzdGVyIGFmdGVyIGVhY2gKKwkjIHJ1bi4KKwlteSAk dGFyZ2V0X25vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoInRhcmdldF8kcnVu Iik7CisJJHRhcmdldF9ub2RlLT5pbml0OworCSR0YXJnZXRfbm9kZS0+c3RhcnQ7CisKKwkjIER1 bXBhbGwgZnJvbSBub2RlIGNsdXN0ZXIuCisJJG5vZGUtPmNvbW1hbmRfb2soXEB7ICRwZ2R1bXBh bGxfcnVuc3skcnVufS0+e2R1bXBfY21kfSB9LAorCQkiJHJ1bjogcGdfZHVtcGFsbCBydW5zIik7 CisKKwkjIFJlc3RvcmUgdGhlIGR1bXAgb24gInRhcmdldF9ub2RlIiBjbHVzdGVyLgorCW15IEBy ZXN0b3JlX2NtZCA9ICgKKwkJQHsgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57cmVzdG9yZV9jbWR9 IH0sCisJCSctLWhvc3QnLCAkdGFyZ2V0X25vZGUtPmhvc3QsICctLXBvcnQnLCAkdGFyZ2V0X25v ZGUtPnBvcnQpOworCisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0gcnVuX2NvbW1hbmQoXEByZXN0 b3JlX2NtZCk7CisKKwkjIHBnX3Jlc3RvcmUgLS1maWxlIG91dHB1dCBmaWxlLgorCW15ICRvdXRw dXRfZmlsZSA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyLyR7cnVufS5zcWwiKTsKKworCWlmICggICAh KCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQorCQkmJiAhKCRwZ2R1bXBhbGxfcnVuc3sk cnVufS0+e3VubGlrZX0pKQorCXsKKwkJZGllICJtaXNzaW5nIFwibGlrZVwiIG9yIFwidW5saWtl XCIgaW4gdGVzdCBcIiRydW5cIiI7CisJfQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e2xpa2V9KQorCXsKKwkJbGlrZSgkb3V0cHV0X2ZpbGUsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e2xpa2V9LCAic2hvdWxkIGR1bXAgJHJ1biIpOworCX0KKworCWlmICgkcGdkdW1wYWxsX3J1bnN7 JHJ1bn0tPnt1bmxpa2V9KQorCXsKKwkJdW5saWtlKAorCQkJJG91dHB1dF9maWxlLAorCQkJJHBn ZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSwKKwkJCSJzaG91bGQgbm90IGR1bXAgJHJ1biIp OworCX0KK30KKworIyBTb21lIG5lZ2F0aXZlIHRlc3QgY2FzZSB3aXRoIGR1bXAgb2YgcGdfZHVt cGFsbCBhbmQgcmVzdG9yZSB1c2luZyBwZ19yZXN0b3JlCisjIHRlc3QgY2FzZSAxOiB3aGVuIC1D IGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2Rl LT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9m b3JtYXRfY3VzdG9tIiwKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZmlsZScgPT4g IiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6 IG9wdGlvbiAtQ1wvLS1jcmVhdGUgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgYW4g YXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLUMgaXMgbm90IHVzZWQg aW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3QgY2FzZSAy OiBXaGVuIC0tbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5v ZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGly L2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1s aXN0JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFy L1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtbFwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdo ZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVu IC0tbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsK KworIyB0ZXN0IGNhc2UgMzogV2hlbiBub24tZXhpc3QgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAt ZCBvcHRpb24KKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScs CisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3Vz dG9tJywKKwkJJy1kJyA9PiAnZGJwcScsCisJXSwKKwlxci9cUUZBVEFMOiAgZGF0YWJhc2UgImRi cHEiIGRvZXMgbm90IGV4aXN0XEUvLAorCSdXaGVuIG5vbi1leGlzdGVudCBkYXRhYmFzZSBpcyBn aXZlbiB3aXRoIC1kIG9wdGlvbiBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxs JworKTsKKworJG5vZGUtPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM5 LjMKCg== --000000000000ea60e00642e66882--