Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vOXA5-00Bg7g-19 for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Nov 2025 08:15:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vOXA2-004eJk-2f for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Nov 2025 08:15:31 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vOXA2-004eJb-1A for pgsql-hackers@lists.postgresql.org; Thu, 27 Nov 2025 08:15:30 +0000 Received: from mail-qt1-x829.google.com ([2607:f8b0:4864:20::829]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vOX9z-001kWo-1c for pgsql-hackers@lists.postgresql.org; Thu, 27 Nov 2025 08:15:30 +0000 Received: by mail-qt1-x829.google.com with SMTP id d75a77b69052e-4ed861eb98cso6824621cf.3 for ; Thu, 27 Nov 2025 00:15:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764231325; x=1764836125; 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=vAHiEyroIl4J/neLr0V+3y0UdY4OZiYInaT/zf4Oso4=; b=fMaae8W/tJUvrHFUxbkhsOenUkq9djAwa3/H6+0C1lHem143zZPtiHeDCoFHkEniG1 ikLeoR01pdbsMOo49ygDfmwsROrJpj9nzvTgMhWc3UfTKE1vxTlnkEA+UchXjOnYMAvd zqweeTuWaGRGmUvLCDeuVUOH8BSDId5fY+tZzLVEM+k03UzAztK0xT3OBCQqCZ9AVXAv yQP5UFaR6rxRDaBnL6meBePp8REuF5MtUkMkT7Kfop5dqVsFdd3XRzY2fu/Q1RnKBVlW N0aD2XhxnTnB1tU1EPfAio7bGosnxKJXoL0mOxgUx6ijRuMAsUx1pNTTVJFfyoCPBSCZ pokQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764231325; x=1764836125; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=vAHiEyroIl4J/neLr0V+3y0UdY4OZiYInaT/zf4Oso4=; b=c0bLY5a2UK+j2t1KXtwWlJuv1gsdOHDjAvPNjmwJVXHf6h50lOOgGw4dp1iFVMKb1W pJ87VdjTzasU6/o8T/vsijvwZZAR2ZNx2YrEnm+D4l+VNsjk6zrus9yz4wiFkEDG79W1 PwHzy7Mr7Bv2HEojVVSLnuceQiQc52u5iwNxR7Q/qk+hC05ISeLxsVpIzTBd1pVY2Aw/ 02eybK1tIcXxxFw2VdlJ5pO70o8uSBq1XvzVXTEqUujYTMduBCWrC5NBmgcz6BstiWdo uqXF4gZ6isr39zz0ncOvvqMmSlFZEIo2IcBr73/1YyaXLDoWPg8bYga3i6S67+aaSYXG EC4A== X-Gm-Message-State: AOJu0YztVFm3E76AQ/dePDQ9qLcbp3NiJvEvRO3/g0lZ3yl9rBEvlfR1 YHw1bqrP3Ft9FCTodgx/xpiQtT6TCZaQSL4/s97oRPX27EtQ67TCuuMK7Y7SkADz7PaMUdUcJRe jYQH8TsukYChlK5aVqdwVmJJV+bw2ULUXAjxo X-Gm-Gg: ASbGncvRTJuXUakRp4lBEbJR46NiGY4lEukgqqeHblm1mZVhtW1yevxMF7hTYdSAOGW NG8VptQJlxJRVXiFyWtglMBLtbeItEvx8nz1w+I/J1RnH4s8lyuoGn7vIdb63SLB1gaSmt4bq1d mx1p9TxUGpfR0W3rtivCTEC/IexPzxOqTIdwZmnO1JBh92TXNiOfFqk93cldtBIMLAB9kJmzoIX 86+26WlRpjpES3QPTkMyk6EBm9Jwtn/HMmBjC5VGfEuePgAsUkRxHDInTM8aDkmErBxek0fPWRI BXjTM7M= X-Google-Smtp-Source: AGHT+IFsCrRPSBY20gDl2wZVEqatxrKa4Zcf1Hdh56tikVUrturZGARyJABG4w+luYn5iOO+SPGuTGEnf64Bv3Rcn9k= X-Received: by 2002:ac8:7f47:0:b0:4ee:14c3:4e6e with SMTP id d75a77b69052e-4ee58a44b9cmr289666351cf.2.1764231324425; Thu, 27 Nov 2025 00:15:24 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Thu, 27 Nov 2025 13:45:12 +0530 X-Gm-Features: AWmQ_blpw_TElGeGXvKVGAdeXApsPt0v5qn2wYax2_qwY2l0dmL79DfmatWjIdM Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Vaibhav Dalvi Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000065298506448f1d92" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000065298506448f1d92 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Vaibhav for the review. On Tue, 18 Nov 2025 at 16:05, Vaibhav Dalvi wrote: > > Hi Mahendra, > > Thanks Mahendra for working on this. > > Looks like my previous comment below is not addressed: > 1. > >> ### 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; >> ``` > Fixed. output_clean was a global variable because it was used in 2 functions. Now I am passing dopt. output_clean as function argument for another function. > > I agree that the output_clean variable is not added by your patch > but the introduction of dopt by your patch makes it redundant because > dopt has dopt.outputClean. Please look at below code from pg_dump.c > for the reference: > > case 'c': /* clean (i.e., drop) schema prior to create */ > dopt.outputClean =3D 1; > break; > case 25: > dopt.restrict_key =3D pg_strdup(optarg); > break; > > 2. > >> ### 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 for= mat). >> It would be beneficial to include a clear example for this new feature. > > > I think pg_dumpall should have separate examples similar to pg_dump > rather than referencing the pg_dump example because pg_dumpall > doesn't have to mention the database name without -l or --database > in the command. > Fixed. Added some examples. > 3. >> >> > 1. Is the following change in `src/bin/pg_dump/connectdb.c` intentiona= l? >> >> > >> > ``` >> > --- 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. > > Have you added a test case in the regression suite which fails if we remo= ve > this particular change and works well with the change? or if possible cou= ld > you please demonstrate here at least. Fixed. With AH(archive), we should not free pointers by this exec call as we free this by exit_nicely hook. (we register AH by on_exit_close_archive). > > 4. The variable name append_data doesn't look meaningful to me. > Instead we can use append_database/append_databases? > because if this variable is set then we dump the databases along with > global objects. In case of pg_dump, append_data or data_only does make > sense to differentiate between schema and data but in case of pg_dumpall > if this variable is set then we're dumping schema as well as data i.e. in= -short > the databases. > As of now, I am keeping this append_data as this was from an already committed patch. > ------------------------------------ pg_dumpall.c -----------------------= ----------------- > > 5. The variable name formatName doesn't follow the naming convention of > variables available around it. I think use of format_name/formatname woul= d > be better. > >> char *use_role =3D NULL; >> const char *dumpencoding =3D NULL; >> + const char *formatName =3D "p"; >> trivalue prompt_password =3D TRI_DEFAULT; >> bool data_only =3D false; >> bool globals_only =3D false; > Fixed. > > ------------------------------------ pg_restore.c -----------------------= ----------------- > > 6. Fourth parameter (i.e. append_data) to function restore_global_objects= () is redundant. > All the time value provided by all callers to this parameter is false. > > I would suggest removing this parameter and in the definition of this fun= ction > call function restore_one_database() with false as 4th argument. Find dif= f below: > Fixed. > --- a/src/bin/pg_dump/pg_restore.c > +++ b/src/bin/pg_dump/pg_restore.c > @@ -64,8 +64,7 @@ static int restore_one_database(const char *inputFil= eSpec, RestoreOptions *opts, > int numW= orkers, bool append_data, int num, > bool glo= bals_only); > static int restore_global_objects(const char *inputFileSpec, > - RestoreOptions *opts, int numWorkers, bool append_data, > - int num, bool globals_only); > + RestoreOptions *opts, int numWorkers, int num, bool globa= ls_only); > static int restore_all_databases(const char *inputFileSpec, > SimpleStringList db_exclude_patterns, RestoreOptions *opt= s, int numWorkers); > static int get_dbnames_list_to_restore(PGconn *conn, > @@ -554,7 +553,7 @@ main(int argc, char **argv) > > /* Set path for toc.glo file. */ > snprintf(global_path, MAXPGPATH, "%s/toc.glo", in= putFileSpec); > - n_errors =3D restore_global_objects(global_path, = opts, numWorkers, false, 0, globals_only); > + n_errors =3D restore_global_objects(global_path, = opts, numWorkers, 0, globals_only); > > pg_log_info("database restoring skipped because o= ption -g/--globals-only was specified"); > } > @@ -602,7 +601,7 @@ main(int argc, char **argv) > * If globals_only is set, then skip DROP DATABASE commands from restore= . > */ > static int restore_global_objects(const char *inputFileSpec, RestoreOpti= ons *opts, > - int numWorkers, bool append_data, int num, bool globals_o= nly) > + int numWorkers, int num, bool globals_only) > { > int nerror; > int format =3D opts->format; > @@ -610,8 +609,8 @@ static int restore_global_objects(const char *inputFi= leSpec, RestoreOptions *opt > /* Set format as custom so that toc.glo file can be read. */ > opts->format =3D archCustom; > > - nerror =3D restore_one_database(inputFileSpec, opts, numWorkers, > - append_data, num, globals_only); > + nerror =3D restore_one_database(inputFileSpec, opts, numWorkers, = false, num, > + globals= _only); > > /* Reset format value. */ > opts->format =3D format; > @@ -1097,7 +1096,7 @@ restore_all_databases(const char *inputFileSpec, > > /* If map.dat has no entries, return after processing global comm= ands. */ > if (dbname_oid_list.head =3D=3D NULL) > - return restore_global_objects(global_path, opts, numWorke= rs, false, 0, false); > + return restore_global_objects(global_path, opts, numWorke= rs, 0, false); > > pg_log_info(ngettext("found %d database name in \"%s\"", > "found %d database names= in \"%s\"", > @@ -1151,7 +1150,7 @@ restore_all_databases(const char *inputFileSpec, > PQfinish(conn); > > /* Open toc.dat file and execute/append all the global sql comman= ds. */ > - n_errors_total =3D restore_global_objects(global_path, opts, num= Workers, false, 0, false); > + n_errors_total =3D restore_global_objects(global_path, opts, num= Workers, 0, false); > > Regression is successful with these changes. > > 7. Fix indentation: >> >> static int restore_global_objects(const char *inputFileSpec, >> RestoreOptions *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 numWorke= rs); Fixed some. > > > 8. Remove extra line: >> >> + >> static void usage(const char *progname); > Fixed. > > 9. Remove extra space after map.dat and before comma: >> >> + * databases from map.dat , but skip restoring those matching > Fixed. > > 10. Fix 80 char limits: > > + n_errors =3D restore_one_database(subdirpath, opts, numWorkers, true, 1= , false); > > + num_total_db =3D get_dbname_oid_list_from_mfile(inputFileSpec, &dbname_= oid_list); > > + return restore_global_objects(global_path, opts, numWorkers, false, 0, = false); > > + n_errors_total =3D restore_global_objects(global_path, opts, numWorker= s, false, 0, false); > > + pg_log_warning("errors ignored on database \"%s\" restore: %d", dbidnam= e->str, n_errors); > Fixed some. I will do some more cleanup in the coming versions. Here, I am attaching an updated patch for the review and testing. > > Regards, > Vaibhav > > On Mon, Nov 17, 2025 at 10:45=E2=80=AFPM Mahendra Singh Thalor wrote: >> >> Thanks Andrew for the review. >> On Tue, 11 Nov 2025 at 20:41, Andrew Dunstan wrote= : >> > >> > >> > On 2025-11-11 Tu 12:59 AM, Mahendra Singh Thalor wrote: >> > > >> > > Hi, >> > > Here, I am attaching an updated patch for the review and testing. >> > > >> > > FIX: as suggested by Vaibhav, added error for --restrict-key option >> > > with non-text format. >> > > >> > >> > >> > Regarding the name and format of the globals toc file, I'm inclined to >> > think we should always use custom format, regardless of whether the >> > individual databases will be in custom, tar or directory formats, and >> > that it should be called something distinguishable, e.g. toc.glo. >> > >> >> I also agree with your point. Fixed. >> >> On Mon, 17 Nov 2025 at 19:38, tushar wro= te: >> > >> > >> > >> > On Tue, Nov 11, 2025 at 11:29=E2=80=AFAM Mahendra Singh Thalor wrote: >> >> >> >> On Thu, 6 Nov 2025 at 11:03, Mahendra Singh Thalor wrote: >> >> > >> >> > Thanks Vaibhav, Tushar and Andrew for the review and testing. >> >> >> > >> > Thanks Mahendra, getting this error against v07 series patch >> > >> > [edb@1a1c15437e7c bin]$ ./pg_dumpall -Ft -f tar.dumpc -v >> > pg_dumpall: executing SELECT pg_catalog.set_config('search_path', '', = false); >> > pg_dumpall: pg_dumpall.c:2256: createOneArchiveEntry: Assertion `fout = !=3D ((void *)0)' failed. >> > Aborted >> > >> > regards, >> >> Thanks Tushar for the report. Fixed. >> >> Here, I am attaching an updated patch for the review and testing. >> >> -- >> Thanks and Regards >> Mahendra Singh Thalor >> EnterpriseDB: http://www.enterprisedb.com --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000065298506448f1d92 Content-Type: application/octet-stream; name="v09_27112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v09_27112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mih5ro2w0 RnJvbSA3MWI5YTIxM2U3YmIxYjY4ZTRkMDViMzczNTE2ZTBlY2E2MzM3ZjM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAyNyBOb3YgMjAyNSAxMzoyNTo0MCArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIE5vbiB0ZXh0IG1vZGVzIGZvciBwZ19kdW1wYWxsLCBjb3JyZXNwb25kaW5nbHkgY2hhbmdl IAogcGdfcmVzdG9yZQoKICAgIHBnX2R1bXBhbGwgYWNxdWlyZXMgYSBuZXcgLUYvLS1mb3JtYXQg b3B0aW9uLCB3aXRoIHRoZSBzYW1lIG1lYW5pbmdzIGFzCiAgICBwZ19kdW1wLiBUaGUgZGVmYXVs dCBpcyBwLCBtZWFuaW5nIHBsYWluIHRleHQuIEZvciBhbnkgb3RoZXIgdmFsdWUsIGEKICAgIGRp cmVjdG9yeSBpcyBjcmVhdGVkIGNvbnRhaW5pbmcgdHdvIGZpbGVzLCB0b2MuZ2xvIGFuZCBtYXAu ZGF0LiBUaGUKICAgIGZpcnN0IGNvbnRhaW5zIGNvbW1hbmRzIHJlc3RvcmluZyB0aGUgZ2xvYmFs IGRhdGEgaW4gY3VzdG9tIGZvcm1hdCwgYW5kIHRoZSBzZWNvbmQKICAgIGNvbnRhaW5zIGEgbWFw IGZyb20gb2lkcyB0byBkYXRhYmFzZSBuYW1lcyBpbiB0ZXh0IGZvcm1hdC4gSXQgd2lsbCBhbHNv IGNvbnRhaW4gYQogICAgc3ViZGlyZWN0b3J5IGNhbGxlZCBkYXRhYmFzZXMsIGluc2lkZSB3aGlj aCBpdCB3aWxsIGNyZWF0ZSBhcmNoaXZlcyBpbgogICAgdGhlIHNwZWNpZmllZCBmb3JtYXQsIG5h bWVkIHVzaW5nIHRoZSBkYXRhYmFzZSBvaWRzLgoKICAgIEluIHRoZXNlIGNhc2VzcyB0aGUgLWYg YXJndW1lbnQgaXMgcmVxdWlyZWQuCgogICAgSWYgcGdfcmVzdG9yZSBlbmNvdW50ZXJzIGEgZGly ZWN0b3J5IGNvbnRhaW5pbmcgbWFwLmRhdCBhbmQgdG9jLmdsbywKICAgIGl0IHJlc3RvcmVzIHRo ZSBnbG9iYWwgc2V0dGluZ3MgZnJvbSB0b2MuZ2xvIGlmIGV4aXN0LCBhbmQgdGhlbgogICAgcmVz dG9yZXMgZWFjaCBkYXRhYmFzZS4KCiAgICBwZ19yZXN0b3JlIGFjcXVpcmVzIHR3byBuZXcgb3B0 aW9uczogLWcvLS1nbG9iYWxzLW9ubHkgd2hpY2ggc3VwcHJlc3NlcwogICAgcmVzdG9yYXRpb24g b2YgYW55IGRhdGFiYXNlcywgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSB3aGljaCBpbmhpYml0cwog ICAgcmVzdG9yYXRpb24gb2YgcGFydGljdWFsciBkYXRhYmFzZShzKSBpbiB0aGUgc2FtZSB3YXkg dGhlIHNhbWUgb3B0aW9uCiAgICB3b3JrcyBpbiBwZ19kdW1wYWxsLgoKdjA5Ci0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgIHwgMTA0ICsrKystCiBkb2Mvc3JjL3NnbWwv cmVmL3BnX3Jlc3RvcmUuc2dtbCAgICAgfCAgNjYgKystCiBzcmMvYmluL3BnX2R1bXAvY29ubmVj dGRiLmMgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaCAgICAg ICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAx ICsKIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8ICAxMCArCiBzcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAyOSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8 ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICAyICstCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgfCA2MTcgKysrKysrKysrKysrKysr KysrKysrLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgfCA2MDUg KysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5w bCAgICAgICB8ICAyNyArKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgIHwg Mzk2ICsrKysrKysrKysrKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNzA1IGluc2VydGlvbnMo KyksIDE2NiBkZWxldGlvbnMoLSkKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2Jpbi9wZ19k dW1wL3QvMDA3X3BnX2R1bXBhbGwucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn X2R1bXBhbGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4IDg4 MzRiN2VjMTQxLi43NWRlMWZlZTMzMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wYWxsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKQEAgLTE2 LDcgKzE2LDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVkaXY+CiAg IDxyZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50 byBhIHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorCisgIDxyZWZwdXJwb3NlPgorICAgZXhwb3J0 IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVy IGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cworICA8L3JlZnB1cnBvc2U+CiAg PC9yZWZuYW1lZGl2PgogCiAgPHJlZnN5bm9wc2lzZGl2PgpAQCAtMzMsNyArMzYsNyBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdfZHVtcGFs bDwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3Igd3JpdGluZyBvdXQKICAgICg8cXVvdGU+ ZHVtcGluZzwvcXVvdGU+KSBhbGwgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1l PiBkYXRhYmFzZXMKLSAgIG9mIGEgY2x1c3RlciBpbnRvIG9uZSBzY3JpcHQgZmlsZS4gIFRoZSBz Y3JpcHQgZmlsZSBjb250YWlucworICAgb2YgYSBjbHVzdGVyIGludG8gYW4gU1FMIHNjcmlwdCBm aWxlIG9yIGFuIGFyY2hpdmUuICBUaGUgb3V0cHV0IGNvbnRhaW5zCiAgICA8YWNyb255bT5TUUw8 L2Fjcm9ueW0+IGNvbW1hbmRzIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gPHhyZWYKICAg IGxpbmtlbmQ9ImFwcC1wc3FsIi8+IHRvIHJlc3RvcmUgdGhlIGRhdGFiYXNlcy4gIEl0IGRvZXMg dGhpcyBieQogICAgY2FsbGluZyA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZvciBlYWNo IGRhdGFiYXNlIGluIHRoZSBjbHVzdGVyLgpAQCAtNTIsMTEgKzU1LDE2IEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgU1FMIHNjcmlwdCB3 aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0aGUKKyAgIFBsYWlu IHRleHQgU1FMIHNjcmlwdHMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQu ICBVc2UgdGhlCiAgICA8b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+ IG9wdGlvbiBvciBzaGVsbCBvcGVyYXRvcnMgdG8KICAgIHJlZGlyZWN0IGl0IGludG8gYSBmaWxl LgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBBcmNoaXZlcyBpbiBvdGhlciBmb3JtYXRzIHdp bGwgYmUgcGxhY2VkIGluIGEgZGlyZWN0b3J5IG5hbWVkIHVzaW5nIHRoZQorICAgPG9wdGlvbj4t Zjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiwgd2hpY2ggaXMgcmVxdWlyZWQgaW4g dGhpcyBjYXNlLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiAgIDxhcHBsaWNhdGlvbj5wZ19kdW1w YWxsPC9hcHBsaWNhdGlvbj4gbmVlZHMgdG8gY29ubmVjdCBzZXZlcmFsCiAgIHRpbWVzIHRvIHRo ZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHNlcnZlciAob25jZSBwZXIK QEAgLTEzMSwxMCArMTM5LDg1IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxw YXJhPgogICAgICAgICBTZW5kIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiB0aGlz IGlzIG9taXR0ZWQsIHRoZQogICAgICAgICBzdGFuZGFyZCBvdXRwdXQgaXMgdXNlZC4KKyAgICAg ICAgTm90ZTogVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgb21pdHRlZCB3aGVuIDxvcHRpb24+LS1m b3JtYXQ8L29wdGlvbj4gaXMgcGxhaW4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRl cm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBs YWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZm9ybWF0PTxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lm eSB0aGUgZm9ybWF0IG9mIGR1bXAgZmlsZXMuICBJbiBwbGFpbiBmb3JtYXQsIGFsbCB0aGUgZHVt cCBkYXRhIGlzCisgICAgICAgIHNlbnQgaW4gYSBzaW5nbGUgdGV4dCBzdHJlYW0uIFRoaXMgaXMg dGhlIGRlZmF1bHQuCisKKyAgICAgICAgSW4gYWxsIG90aGVyIG1vZGVzLCA8YXBwbGljYXRpb24+ cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+IGZpcnN0IGNyZWF0ZXMgdHdvIGZpbGVzOgorICAgICAg ICA8ZmlsZW5hbWU+dG9jLmRhdC90b2MuZG1wL3RvYy50YXI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVu YW1lPm1hcC5kYXQ8L2ZpbGVuYW1lPiwgaW4gdGhlIGRpcmVjdG9yeQorICAgICAgICBzcGVjaWZp ZWQgYnkgPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4uCisgICAgICAgIFRoZSBmaXJzdCBmaWxlIGNv bnRhaW5zIGdsb2JhbCBkYXRhLCBzdWNoIGFzIHJvbGVzIGFuZCB0YWJsZXNwYWNlcy4gVGhlIHNl Y29uZAorICAgICAgICBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiBkYXRhYmFzZSBvaWRzIGFu ZCBuYW1lcy4gVGhlc2UgZmlsZXMgYXJlIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBn X3Jlc3RvcmU8L2FwcGxpY2F0aW9uPi4gRGF0YSBmb3IgaW5kaXZpZHVhbCBkYXRhYmFzZXMgaXMg cGxhY2VkIGluCisgICAgICAgIDxmaWxlbmFtZT5kYXRhYmFzZXM8L2ZpbGVuYW1lPiBzdWJkaXJl Y3RvcnksIG5hbWVkIHVzaW5nIHRoZSBkYXRhYmFzZSdzIDx0eXBlPm9pZDwvdHlwZT4uCisKKyAg ICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRl cm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5k aXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgZGlyZWN0b3J5LWZvcm1hdCBhcmNoaXZlcyBmb3Ig ZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVz dG9yZS4gVGhlIGRpcmVjdG9yeQorICAgICAgICAgICB3aWxsIGhhdmUgZGF0YWJhc2UgPHR5cGU+ b2lkPC90eXBlPiBhcyBpdHMgbmFtZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8 dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNj cmlwdCBmaWxlICh0aGUgZGVmYXVsdCkuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBh cmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQg aW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxsIGJlIG5hbWVkIDxm aWxlbmFtZT5kYm9pZC5kbXA8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5kYm9pZDwvdHlwZT4gaXMg dGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhlIGRhdGFiYXNlLgorICAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dDwv bGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90 ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBP dXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAg IHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBhcmNoaXZlCisgICAgICAg ICAgIHdpbGwgYmUgbmFtZWQgPGZpbGVuYW1lPmRib2lkLnRhcjwvZmlsZW5hbWU+IHdoZXJlIDx0 eXBlPmRib2lkPC90eXBlPiBpcyB0aGUKKyAgICAgICAgICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0 aGUgZGF0YWJhc2UuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAg ICBOb3RlOiBzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZGV0YWlscworICAg ICAgIG9mIGhvdyB0aGUgdmFyaW91cyBub24gcGxhaW4gdGV4dCBhcmNoaXZlcyB3b3JrLgorCisg ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90 ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4K QEAgLTkzNyw5ICsxMDIwLDEzIEBAIGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPlBBVFRFUk48L3JlcGxhY2VhYmxlPgogICA8dGl0bGU+RXhhbXBsZXM8L3Rp dGxlPgogICA8cGFyYT4KICAgIFRvIGR1bXAgYWxsIGRhdGFiYXNlczoKLQorICAgSWYgZm9ybWF0 IGlzIGdpdmVuLCB0aGVuIGR1bXAgd2lsbCBiZSBiYXNlZCBvbiBmb3JtYXQsIGRlZmF1bHQgcGxh aW4uCiA8c2NyZWVuPgogPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAm Z3Q7IGRiLm91dDwvdXNlcmlucHV0PgorPC9zY3JlZW4+CisKKzxzY3JlZW4+Cis8cHJvbXB0PiQ8 L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PWQvYS9jL3AgLWYgZGIub3V0 PC91c2VyaW5wdXQ+CiA8L3NjcmVlbj4KICAgPC9wYXJhPgogCkBAIC05NTYsNiArMTA0MywxNSBA QCBleGNsdWRlIGRhdGFiYXNlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5QQVRURVJO PC9yZXBsYWNlYWJsZT4KICAgIHRoZSBzY3JpcHQgd2lsbCBhdHRlbXB0IHRvIGRyb3Agb3RoZXIg ZGF0YWJhc2VzIGltbWVkaWF0ZWx5LCBhbmQgdGhhdAogICAgd2lsbCBmYWlsIGZvciB0aGUgZGF0 YWJhc2UgeW91IGFyZSBjb25uZWN0ZWQgdG8uCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgICBJ ZiBkdW1wIHdhcyB0YWtlbiBpbiBub24tdGV4dCBmb3JtYXQsIHRoZW4gdXNlIHBnX3Jlc3RvcmUg dG8gcmVzdG9yZSBhbGwgZGF0YWJhc2VzLgorPHNjcmVlbj4KKzxwcm9tcHQ+JDwvcHJvbXB0PiA8 dXNlcmlucHV0PnBnX3Jlc3RvcmUgZGIub3V0IC1kIHBvc3RncmVzIC1DPC91c2VyaW5wdXQ+Cis8 L3NjcmVlbj4KKyAgIFRoaXMgd2lsbCByZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2VzLiBJZiB1c2Vy IGRvbid0IHdhbnQgdG8gcmVzdG9yZSBzb21lIGRhdGFiYXNlcywgdGhlbiB1c2UKKyAgIC0tZXhj bHVkZS1wYXR0ZXJuIHRvIHNraXAgdGhvc2UuCis8L3BhcmE+CiAgPC9yZWZzZWN0MT4KIAogIDxy ZWZzZWN0MT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggYTQ2OGEzODM2MWEuLjc0OTdi NTI3YWU2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTgsOCArMTgsOSBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHJlZm5hbWU+cGdfcmVzdG9yZTwvcmVmbmFtZT4KIAog ICA8cmVmcHVycG9zZT4KLSAgIHJlc3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJv ZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KLSAgIGFyY2hpdmUgZmlsZSBjcmVhdGVkIGJ5IDxh cHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4KKyAgIHJlc3RvcmUgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcworICAgY3Jl YXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8YXBwbGlj YXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+CiAgIDwvcmVmcHVycG9zZT4KICA8L3JlZm5h bWVkaXY+CiAKQEAgLTM4LDEzICszOSwxNCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAog ICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gaXMgYSB1 dGlsaXR5IGZvciByZXN0b3JpbmcgYQotICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1 Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUKLSAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlu a2VuZD0iYXBwLXBnZHVtcCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CisgICA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIG9yIGNsdXN0ZXIgZnJv bSBhbiBhcmNoaXZlCisgICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4g b3IKKyAgIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZy1kdW1wYWxsIi8+IGluIG9uZSBvZiB0aGUgbm9u LXBsYWluLXRleHQKICAgIGZvcm1hdHMuICBJdCB3aWxsIGlzc3VlIHRoZSBjb21tYW5kcyBuZWNl c3NhcnkgdG8gcmVjb25zdHJ1Y3QgdGhlCi0gICBkYXRhYmFzZSB0byB0aGUgc3RhdGUgaXQgd2Fz IGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gIFRoZQotICAgYXJjaGl2ZSBmaWxlcyBhbHNv IGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KKyAgIGRhdGFi YXNlIG9yIGNsdXN0ZXIgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMg c2F2ZWQuIFRoZQorICAgYXJjaGl2ZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9y ZTwvYXBwbGljYXRpb24+IHRvCiAgICBiZSBzZWxlY3RpdmUgYWJvdXQgd2hhdCBpcyByZXN0b3Jl ZCwgb3IgZXZlbiB0byByZW9yZGVyIHRoZSBpdGVtcwotICAgcHJpb3IgdG8gYmVpbmcgcmVzdG9y ZWQuIFRoZSBhcmNoaXZlIGZpbGVzIGFyZSBkZXNpZ25lZCB0byBiZQorICAgcHJpb3IgdG8gYmVp bmcgcmVzdG9yZWQuIFRoZSBhcmNoaXZlIGZvcm1hdHMgYXJlIGRlc2lnbmVkIHRvIGJlCiAgICBw b3J0YWJsZSBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4KICAgPC9wYXJhPgogCkBAIC01MiwxMCArNTQs MTcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9y ZTwvYXBwbGljYXRpb24+IGNhbiBvcGVyYXRlIGluIHR3byBtb2Rlcy4KICAgIElmIGEgZGF0YWJh c2UgbmFtZSBpcyBzcGVjaWZpZWQsIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlv bj4KICAgIGNvbm5lY3RzIHRvIHRoYXQgZGF0YWJhc2UgYW5kIHJlc3RvcmVzIGFyY2hpdmUgY29u dGVudHMgZGlyZWN0bHkgaW50bwotICAgdGhlIGRhdGFiYXNlLiAgT3RoZXJ3aXNlLCBhIHNjcmlw dCBjb250YWluaW5nIHRoZSBTUUwKLSAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1aWxkIHRo ZSBkYXRhYmFzZSBpcyBjcmVhdGVkIGFuZCB3cml0dGVuCisgICB0aGUgZGF0YWJhc2UuCisgICBX aGVuIHJlc3RvcmluZyBmcm9tIGEgZHVtcCBtYWRlIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxs PC9hcHBsaWNhdGlvbj4sCisgICBlYWNoIGRhdGFiYXNlIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhl biB0aGUgcmVzdG9yYXRpb24gd2lsbCBiZSBydW4gaW4gdGhhdAorICAgZGF0YWJhc2UuCisKKyAg IE90aGVyd2lzZSwgd2hlbiBhIGRhdGFiYXNlIG5hbWUgaXMgbm90IHNwZWNpZmllZCwgYSBzY3Jp cHQgY29udGFpbmluZyB0aGUgU1FMCisgICBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0 aGUgZGF0YWJhc2Ugb3IgY2x1c3RlciBpcyBjcmVhdGVkIGFuZCB3cml0dGVuCiAgICB0byBhIGZp bGUgb3Igc3RhbmRhcmQgb3V0cHV0LiAgVGhpcyBzY3JpcHQgb3V0cHV0IGlzIGVxdWl2YWxlbnQg dG8KLSAgIHRoZSBwbGFpbiB0ZXh0IG91dHB1dCBmb3JtYXQgb2YgPGFwcGxpY2F0aW9uPnBnX2R1 bXA8L2FwcGxpY2F0aW9uPi4KKyAgIHRoZSBwbGFpbiB0ZXh0IG91dHB1dCBmb3JtYXQgb2YgPGFw cGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1 bXBhbGw8L2FwcGxpY2F0aW9uPi4KKwogICAgU29tZSBvZiB0aGUgb3B0aW9ucyBjb250cm9sbGlu ZyB0aGUgb3V0cHV0IGFyZSB0aGVyZWZvcmUgYW5hbG9nb3VzIHRvCiAgICA8YXBwbGljYXRpb24+ cGdfZHVtcDwvYXBwbGljYXRpb24+IG9wdGlvbnMuCiAgIDwvcGFyYT4KQEAgLTE1Miw2ICsxNjEs OCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgY29tbWFuZHMgdGhhdCBtZW50 aW9uIHRoaXMgZGF0YWJhc2UuCiAgICAgICAgIEFjY2VzcyBwcml2aWxlZ2VzIGZvciB0aGUgZGF0 YWJhc2UgaXRzZWxmIGFyZSBhbHNvIHJlc3RvcmVkLAogICAgICAgICB1bmxlc3MgPG9wdGlvbj4t LW5vLWFjbDwvb3B0aW9uPiBpcyBzcGVjaWZpZWQuCisgICAgICAgIDxvcHRpb24+LS1jcmVhdGU8 L29wdGlvbj4gaXMgcmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzCisg ICAgICAgIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxs PC9hcHBsaWNhdGlvbj4uCiAgICAgICAgPC9wYXJhPgogCiAgICAgICAgPHBhcmE+CkBAIC0yNDcs NiArMjU4LDE5IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZ2xvYmFs cy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgor ICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMgKHJvbGVzIGFuZCB0YWJsZXNwYWNl cyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAg IFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiByZXN0b3JpbmcgZnJvbSBhbiBhcmNo aXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKyAg ICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAg ICAgIDx0ZXJtPjxvcHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KQEAgLTU5MSw2ICs2MTUsMjggQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxp c3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4 Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3Jl cGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgRG8gbm90IHJlc3RvcmUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcwor ICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFi bGU+LgorICAgICAgICBNdWx0aXBsZSBwYXR0ZXJucyBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGlu ZyBtdWx0aXBsZQorICAgICAgICA8b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBz d2l0Y2hlcy4gIFRoZQorICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0 dGVybjwvcmVwbGFjZWFibGU+IHBhcmFtZXRlciBpcworICAgICAgICBpbnRlcnByZXRlZCBhcyBh IHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIHVzZWQgYnkKKyAgICAgICAgPGFw cGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPidzIDxsaXRlcmFsPlxkPC9saXRlcmFsPgorICAg ICAgICBjb21tYW5kcyAoc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIi8+KSwK KyAgICAgICAgc28gbXVsdGlwbGUgZGF0YWJhc2VzIGNhbiBhbHNvIGJlIGV4Y2x1ZGVkIGJ5IHdy aXRpbmcgd2lsZGNhcmQKKyAgICAgICAgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4gIFdoZW4g dXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJlZnVsIHRvCisgICAgICAgIHF1b3RlIHRoZSBwYXR0ZXJu IGlmIG5lZWRlZCB0byBwcmV2ZW50IHNoZWxsIHdpbGRjYXJkIGV4cGFuc2lvbi4KKyAgICAgICA8 L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZh bnQgd2hlbiByZXN0b3JpbmcgZnJvbSBhbiBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9u PnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAg PHRlcm0+PG9wdGlvbj4tLWZpbHRlcj08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zmls ZW5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYyBiL3NyYy9iaW4vcGdfZHVtcC9j b25uZWN0ZGIuYwppbmRleCBkNTVkNTNkYmVlYS4uZDNlOWUyNzAwM2UgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRi LmMKQEAgLTIyNSw3ICsyMjUsNyBAQCBDb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQog Ci0JUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwgQUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9T UUwpKTsKKwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9Q QVRIX1NRTCwgZmFsc2UpKTsKIAogCXJldHVybiBjb25uOwogfQpAQCAtMjc1LDcgKzI3NSw3IEBA IGNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFs dWVzKQogICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0cywgZXhpdCBwcm9ncmFtIG9u IGZhaWx1cmUuCiAgKi8KIFBHcmVzdWx0ICoKLWV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKnF1ZXJ5KQorZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq cXVlcnksIGJvb2wgaXNfYXJjaGl2ZSkKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAKQEAgLTI4Nyw3 ICsyODcsOCBAQCBleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkK IAl7CiAJCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKIAkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQkJ UFFmaW5pc2goY29ubik7CisJCWlmICghaXNfYXJjaGl2ZSkKKwkJCVBRZmluaXNoKGNvbm4pOwog CQlleGl0X25pY2VseSgxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb25u ZWN0ZGIuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaAppbmRleCA2YzFlMTk1NDc2OS4u MGI3NDFiNjhjYjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaAorKysg Yi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmgKQEAgLTIyLDUgKzIyLDUgQEAgZXh0ZXJuIFBH Y29ubiAqQ29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29u bmVjdGlvbl9zdHJpbmcKIAkJCQkJCQkgICB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wg ZmFpbF9vbl9lcnJvciwKIAkJCQkJCQkgICBjb25zdCBjaGFyICpwcm9nbmFtZSwgY29uc3QgY2hh ciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3ZlcnNpb24sCiAJCQkJCQkJICAgY2hhciAqcGFzc3dv cmQsIGNoYXIgKm92ZXJyaWRlX2RibmFtZSk7Ci1leHRlcm4gUEdyZXN1bHQgKmV4ZWN1dGVRdWVy eShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKK2V4dGVybiBQR3Jlc3VsdCAqZXhl Y3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnksIGJvb2wgaXNfYXJjaGl2 ZSk7CiAjZW5kaWYJCQkJCQkJLyogQ09OTkVDVERCX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCBm M2M2NjlmNDg0ZS4uM2UyMWFhZjU3ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNv bi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEwMyw2ICsxMDMs NyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbCcsCiAgICAg ICAndC8wMDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsJywKICAgICAgICd0LzAwNl9wZ19kdW1wX2Nv bXByZXNzLnBsJywKKwkgICd0LzAwN19wZ19kdW1wYWxsLnBsJywKICAgICAgICd0LzAxMF9kdW1w X2Nvbm5zdHIucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGFyYWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IDA4NmFkY2RjNTAy Li41OTc0ZDY3MDZmZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMzMyw2ICszMzMsMTYgQEAgb25fZXhp dF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShhcmNoaXZlX2Ns b3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKIH0KIAorLyoKKyAqIFdoZW4gcGdfcmVz dG9yZSByZXN0b3JlcyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gdXBkYXRlIGFscmVhZHkgYWRk ZWQgZW50cnkKKyAqIGludG8gYXJyYXkgZm9yIGNsZWFudXAuCisgKi8KK3ZvaWQKK3JlcGxhY2Vf b25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFI WCA9IEFIWDsKK30KKwogLyoKICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9yIHNodXR0aW5n IGRvd24gZGF0YWJhc2UgY29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vzc2VzIGNsZWFu bHkuCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwLmgKaW5kZXggZDkwNDFkYWQ3MjAuLmY2MzFkOTQ1NDcyIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cC5oCkBAIC0zMTIsNyArMzEyLDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlv bnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAog ZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpOwog Ci1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQg UmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhLCBib29sIGdsb2Jh bHNfb25seSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJuIEFyY2hp dmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0 IGZtdCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggYzg0YjAxN2YyMWIu LjViOGRkMjk1MDcwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC04Niw3 ICs4Niw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBz dGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBk dW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0 aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpOworCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxl ICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRw dXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwog CkBAIC0zMzksOSArMzM5LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2 ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJsaWMgKi8KKy8q CisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBh cHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0 aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQK LVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCwgYm9vbCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29ubHkpCiB7CiAJQXJjaGl2ZUhhbmRs ZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBB SC0+cHVibGljLnJvcHQ7CkBAIC00NTgsNyArNDYzLDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2 ZSAqQUhYKQogCSAqLwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFt ZSB8fCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9O T05FKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9z cGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25f c3BlYywgYXBwZW5kX2RhdGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBk YXRhYmFzZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtNzYxLDYgKzc2NiwxNSBAQCBSZXN0b3JlQXJj aGl2ZShBcmNoaXZlICpBSFgpCiAJCQlpZiAoKHRlLT5yZXFzICYgKFJFUV9TQ0hFTUEgfCBSRVFf REFUQSB8IFJFUV9TVEFUUykpID09IDApCiAJCQkJY29udGludWU7CQkvKiBpZ25vcmUgaWYgbm90 IHRvIGJlIGR1bXBlZCBhdCBhbGwgKi8KIAorCQkJLyogU2tpcCBEUk9QIERBVEFCQVNFIGlmIGds b2JhbHNfb25seS4gKi8KKwkJCWlmIChnbG9iYWxzX29ubHkgJiYgdGUgJiYgdGUtPnRhZyAmJiAo c3RyY21wKHRlLT50YWcsICJEUk9QX0RBVEFCQVNFIikgPT0gMCkpCisJCQkJY29udGludWU7CisK KwkJCS8qIFNraXAgZm9yIENPTk5FQ1QgbWV0YSBjb21tYW5kLiAqLworCQkJaWYgKCFyb3B0LT5m aWxlbmFtZSAmJiB0ZSAmJiB0ZS0+dGFnICYmCisJCQkJCShzdHJjbXAodGUtPnRhZywgIkNPTk5F Q1QiKSA9PSAwKSkKKwkJCQljb250aW51ZTsKKwogCQkJc3dpdGNoIChfdG9jRW50cnlSZXN0b3Jl UGFzcyh0ZSkpCiAJCQl7CiAJCQkJY2FzZSBSRVNUT1JFX1BBU1NfTUFJTjoKQEAgLTEzMTYsNyAr MTMzMCw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0 cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+Zmls ZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxl bmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMsIGZhbHNlKTsKIAogCWlmIChzdHJmdGltZShzdGFt cF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1ULAogCQkJCSBsb2Nh bHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0gMCkKQEAgLTE2OTUsNyArMTcwOSw4IEBAIGFyY2hw cmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAKIHN0YXRpYyB2b2lkCiBT ZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNv bnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKKwkJICBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBh cHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICpt b2RlOwpAQCAtMTcxNSw3ICsxNzMwLDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBj b25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlp ZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRhIHx8IEFILT5t b2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQlt b2RlID0gUEdfQklOQVJZX1c7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXgg MzI1YjUzZmM5YmQuLjM2NTA3M2IzZWFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5oCkBAIC0zOTQsNiArMzk0LDcgQEAgc3RydWN0IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBh cmFsbGVsX3Jlc3RvcmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRlcm4g dm9pZCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJl cGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCk7CiAKIGV4dGVybiB2b2lk IHdhcm5fb3JfZXhpdF9ob3JyaWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10 LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK aW5kZXggYjViYTNiNDZkZDkuLjgxOGI4MGE5MzY5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK QEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlz YXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAw OwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUo KEFyY2hpdmUgKikgQUgsIGZhbHNlLCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFy Y2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBhMDA5MThi YWNiNC4uMTNlMTc2NGVjNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogcmlnaHQgbm93LgogCSAqLwogCWlmIChwbGFp blRleHQpCi0JCVJlc3RvcmVBcmNoaXZlKGZvdXQpOworCQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBm YWxzZSwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpp bmRleCBiYjQ1MWMxYmFlMS4uNzI1MzY1ZjY1MTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMzAs NiArMzAsNyBAQAogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUg ImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAicGdfYmFja3Vw X2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdf ZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkg IiBQR19WRVJTSU9OICJcbiIKQEAgLTY1LDkgKzY2LDkgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxl c3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25u ICpjb25uKTsKIHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lk IGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3Rh dGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGJvb2wgb3V0cHV0X2NsZWFuKTsKIHN0YXRpYyB2b2lkIGR1 bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludCBydW5Q Z0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAq ZGJmaWxlKTsKIHN0YXRpYyB2b2lkIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJ CQkJCSBjb25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29u c3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hhciAqb2JqbmFtZSwKQEAgLTc2LDExICs3NywxMyBA QCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1 ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBT aW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAq bmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmls ZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGljIEFyY2hpdmVGb3JtYXQg cGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CitzdGF0aWMgaW50IGNyZWF0ZUR1 bXBJZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNyZWF0ZU9uZUFyY2hpdmVFbnRyeShjb25zdCBjaGFy ICpxdWVyeSwgY29uc3QgY2hhciAqdGFnKTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFY UEdQQVRIXTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwogc3RhdGljIGNvbnN0IGNo YXIgKmNvbm5zdHIgPSAiIjsKLXN0YXRpYyBib29sIG91dHB1dF9jbGVhbiA9IGZhbHNlOwogc3Rh dGljIGJvb2wgc2tpcF9hY2xzID0gZmFsc2U7CiBzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7 CiBzdGF0aWMgYm9vbCBkb3N5bmMgPSB0cnVlOwpAQCAtMTIzLDYgKzEyNiwxMCBAQCBzdGF0aWMg U2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9 Owogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxM LCBOVUxMfTsKIAogc3RhdGljIGNoYXIgKnJlc3RyaWN0X2tleTsKK3N0YXRpYyBBcmNoaXZlICpm b3V0ID0gTlVMTDsKK3N0YXRpYyBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMgPSB7MH07CitzdGF0aWMgaW50IGR1bXBJZFZhbCA9IDA7CitzdGF0aWMgQXJjaGl2ZUZv cm1hdCBhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKQEAgLTE0OCw2ICsxNTUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2 aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1l bnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdG J30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1 aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xOTcsNiArMjA1LDcgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVz ZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCWNvbnN0 IGNoYXIgKmZvcm1hdF9uYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRS SV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25s eSA9IGZhbHNlOwpAQCAtMjA4LDYgKzIxNyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAlpbnQJCQljLAogCQkJCXJldDsKIAlpbnQJCQlvcHRpbmRleDsKKwlEdW1wT3B0aW9ucyBk b3B0OwogCiAJcGdfbG9nZ2luZ19pbml0KGFyZ3ZbMF0pOwogCXBnX2xvZ2dpbmdfc2V0X2xldmVs KFBHX0xPR19XQVJOSU5HKTsKQEAgLTI0Niw3ICsyNTYsOSBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAKIAlwZ2R1bXBvcHRzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCXdoaWxl ICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3 V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCUluaXREdW1wT3B0aW9ucygm ZG9wdCk7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpG OmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQog CXsKIAkJc3dpdGNoIChjKQogCQl7CkBAIC0yNTYsNyArMjY4LDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCQkJCWJyZWFrOwogCiAJCQljYXNlICdjJzoKLQkJCQlvdXRwdXRfY2xl YW4gPSB0cnVlOworCQkJCWRvcHQub3V0cHV0Q2xlYW4gPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJ CQljYXNlICdkJzoKQEAgLTI3NCw3ICsyODYsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJCQlh cHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0KKwkJ CWNhc2UgJ0YnOgorCQkJCWZvcm1hdF9uYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJl YWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFrOwpA QCAtMzE0LDYgKzMyOCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2Fz ZSAnVSc6CiAJCQkJcGd1c2VyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJZG9wdC5jcGFyYW1z LnVzZXJuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3Yn OgpAQCAtNDE5LDcgKzQzNCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhp dF9uaWNlbHkoMSk7CiAJfQogCi0JaWYgKGlmX2V4aXN0cyAmJiAhb3V0cHV0X2NsZWFuKQorCWlm IChpZl9leGlzdHMgJiYgIWRvcHQub3V0cHV0Q2xlYW4pCiAJCXBnX2ZhdGFsKCJvcHRpb24gLS1p Zi1leGlzdHMgcmVxdWlyZXMgb3B0aW9uIC1jLy0tY2xlYW4iKTsKIAogCWlmIChyb2xlc19vbmx5 ICYmIHRhYmxlc3BhY2VzX29ubHkpCkBAIC00MjksNiArNDQ0LDI1IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyogR2V0IGZvcm1hdCBm b3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1hdChmb3JtYXRfbmFt ZSk7CisKKwkvKgorCSAqIElmIGEgbm9uLXBsYWluIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGEgZmls ZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCisJICogcGF0aCB0byB0aGUgbWFpbiBkaXJl Y3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmCisJCSghZmls ZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3Io Im9wdGlvbiAtRi8tLWZvcm1hdD1kfGN8dCByZXF1aXJlcyBvcHRpb24gLWYvLS1maWxlIik7CisJ CXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCS8qIHJlc3RyaWN0LWtl eSBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIC0tZm9ybWF0PXBsYWluICovCisJaWYgKGFyY2hEdW1w Rm9ybWF0ICE9IGFyY2hOdWxsICYmIHJlc3RyaWN0X2tleSkKKwkJcGdfZmF0YWwoIm9wdGlvbiAt LXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1mb3JtYXQ9cGxhaW4iKTsKKwog CS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVxdWlyZWQgaW4gdGhlIGR1bXAs IHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlzIGVxdWFsbHkgdXNlZnVsLCBq dXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVkCkBAIC00ODksNiArNTIzLDI3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAoc2VxdWVuY2VfZGF0YSkKIAkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLXNlcXVlbmNlLWRhdGEiKTsKIAorCS8q CisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rk b3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeS4KKwkgKi8K KwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlBc3NlcnQoZmlsZW5hbWUp OworCisJCS8qIENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3Rp bmcgZGlyZWN0b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCX0KKwll bHNlIGlmIChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllf Vyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxl IFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9IHN0ZG91 dDsKKwogCS8qCiAJICogSWYgeW91IGRvbid0IHByb3ZpZGUgYSByZXN0cmljdCBrZXksIG9uZSB3 aWxsIGJlIGFwcG9pbnRlZCBmb3IgeW91LgogCSAqLwpAQCAtNTM4LDE5ICs1OTMsNiBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhjb25uLCAm ZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25h bWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVy d2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1lKQotCXsKLQkJT1BGID0gZm9wZW4o ZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYpCi0JCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQot CWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGlu ZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC01ODUsMzcgKzYyNywxMTAgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCWlmIChxdW90ZV9hbGxfaWRlbnRpZmllcnMpCiAJCWV4ZWN1dGVD b21tYW5kKGNvbm4sICJTRVQgcXVvdGVfYWxsX2lkZW50aWZpZXJzID0gdHJ1ZSIpOwogCi0JZnBy aW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5c biIpOwotCWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3NlICYmIGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQogCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7CiAKLQkvKgotCSAqIEVudGVy IHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3RlZCBwc3FsIG1ldGEtY29tbWFu ZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0 eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICogcmVzcG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3 ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJvbQotCSAqIGFmZmVjdGluZyB0aGUgZGVz dGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4gYmxvY2sgcHNxbAotCSAqIG1ldGEtY29t bWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUg ZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0ZWQuCi0JICovCi0JZnByaW50ZihPUEYs ICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJLyogY3JlYXRlIGEgYXJjaGl2 ZSBmaWxlIGZvciBnbG9iYWwgY29tbWFuZHMuICovCisJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1w Rm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcglnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOwog Ci0JLyoKLQkgKiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRo YXQgc2VydmVkIG5vIHB1cnBvc2UKLQkgKiBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3Ig aW5zdGFsbGF0aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMKLQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhp bmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgotCSAqIGRh dGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50IGlzIGZpbmUuCi0JICovCisJ CS8qIFNldCBmaWxlIHBhdGggZm9yIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJCXNucHJpbnRm KGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZ2xvIiwgZmlsZW5hbWUpOwogCi0JLyog UmVzdG9yZSB3aWxsIG5lZWQgdG8gd3JpdGUgdG8gdGhlIHRhcmdldCBjbHVzdGVyICovCi0JZnBy aW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIp OworCQkvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSAqLworCQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShn bG9iYWxfcGF0aCwgYXJjaEN1c3RvbSwgY29tcHJlc3Npb25fc3BlYywKKwkJCQlkb3N5bmMsIGFy Y2hNb2RlV3JpdGUsIE5VTEwsIERBVEFfRElSX1NZTkNfTUVUSE9EX0ZTWU5DKTsKKworCQkvKiBN YWtlIGR1bXAgb3B0aW9ucyBhY2Nlc3NpYmxlIHJpZ2h0IGF3YXkgKi8KKwkJU2V0QXJjaGl2ZU9w dGlvbnMoZm91dCwgJmRvcHQsIE5VTEwpOworCQkoKEFyY2hpdmVIYW5kbGUqKWZvdXQpLT5jb25u ZWN0aW9uID0gY29ubjsKKwkJKChBcmNoaXZlSGFuZGxlKilmb3V0KS0+cHVibGljLm51bVdvcmtl cnMgPSAxOworCisJCS8qIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGhvb2sgKi8KKwkJb25fZXhpdF9j bG9zZV9hcmNoaXZlKGZvdXQpOworCisJCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9p c3kgdG8gYmUgKi8KKwkJZm91dC0+dmVyYm9zZSA9IHZlcmJvc2U7CisKKwkJLyoKKwkJICogV2Ug YWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5vciBy ZWxlYXNlIG9mCisJCSAqIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9u IGNoZWNrIGluIHBnX2R1bXBhbGwuYy4pCisJCSAqLworCQlmb3V0LT5taW5SZW1vdGVWZXJzaW9u ID0gOTAyMDA7CisJCWZvdXQtPm1heFJlbW90ZVZlcnNpb24gPSAoUEdfVkVSU0lPTl9OVU0gLyAx MDApICogMTAwICsgOTk7CisJCWZvdXQtPm51bVdvcmtlcnMgPSAxOwogCi0JLyogUmVwbGljYXRl IGVuY29kaW5nIGFuZCBzdGRfc3RyaW5ncyBpbiBvdXRwdXQgKi8KLQlmcHJpbnRmKE9QRiwgIlNF VCBjbGllbnRfZW5jb2RpbmcgPSAnJXMnO1xuIiwKLQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5j b2RpbmcpKTsKLQlmcHJpbnRmKE9QRiwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3Mg PSAlcztcbiIsIHN0ZF9zdHJpbmdzKTsKLQlpZiAoc3RyY21wKHN0ZF9zdHJpbmdzLCAib2ZmIikg PT0gMCkKLQkJZnByaW50ZihPUEYsICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xu Iik7Ci0JZnByaW50ZihPUEYsICJcbiIpOworCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4t LSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIiwgIkNPTU1FTlQiKTsK KworCQkvKiBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZiAqLworCQl7CisJCQlQ UUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygi c2F2aW5nIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmIik7CisJCQlhcHBlbmRQ UUV4cEJ1ZmZlcihxcnksICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7 XG4iKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJERUZBVUxUX1RSQU5T QUNUSU9OX1JFQURfT05MWSIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwor CQkvKiBkdW1wRW5jb2Rpbmc6IHB1dCB0aGUgY29ycmVjdCBlbmNvZGluZyBpbnRvIHRoZSBhcmNo aXZlICovCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJ CQljb25zdCBjaGFyICplbmNuYW1lID0gcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZyk7CisK KwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIlNFVCBjbGllbnRfZW5jb2RpbmcgPSAiKTsK KwkJCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChxcnksIGVuY25hbWUsIGZvdXQpOworCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXJ5LCAiO1xuIik7CisKKwkJCXBnX2xvZ19pbmZvKCJzYXZpbmcgZW5j b2RpbmcgPSAlcyIsIGVuY25hbWUpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0 YSwgIkVOQ09ESU5HIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCisJCS8q IGR1bXBTdGRTdHJpbmdzOiBwdXQgdGhlIGNvcnJlY3QgZXNjYXBlIHN0cmluZyBiZWhhdmlvciBp bnRvIHRoZSBhcmNoaXZlICovCisJCXsKKwkJCWNvbnN0IGNoYXIgKnN0ZHN0cmluZ3MgPSBzdGRf c3RyaW5ncyA/ICJvbiIgOiAib2ZmIjsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CisKKwkJCXBnX2xvZ19pbmZvKCJzYXZpbmcgXCJzdGFuZGFyZF9jb25mb3JtaW5n X3N0cmluZ3MgPSAlc1wiIiwgc3Rkc3RyaW5ncyk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnks ICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJyVzJztcbiIsCisJCQkJCXN0ZHN0 cmluZ3MpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIlNURFNUUklOR1Mi KTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZw cmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxu XG4iKTsKKworCQkvKgorCQkgKiBFbnRlciByZXN0cmljdGVkIG1vZGUgdG8gYmxvY2sgYW55IHVu ZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRzLiAgQQorCQkgKiBtYWxpY2lvdXMgc291cmNlIG1p Z2h0IHRyeSB0byBpbmplY3QgYSB2YXJpZXR5IG9mIHRoaW5ncyB2aWEgYm9ndXMKKwkJICogcmVz cG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMg ZnJvbQorCQkgKiBhZmZlY3RpbmcgdGhlIGRlc3RpbmF0aW9uIGF0IHJlc3RvcmUgdGltZSwgd2Ug Y2FuIGJsb2NrIHBzcWwKKwkJICogbWV0YS1jb21tYW5kcyBzbyB0aGF0IHRoZSBjbGllbnQgbWFj aGluZSB0aGF0IHJ1bnMgcHNxbCB3aXRoIHRoZSBkdW1wCisJCSAqIG91dHB1dCByZW1haW5zIHVu YWZmZWN0ZWQuCisJCSAqLworCQlmcHJpbnRmKE9QRiwgIlxccmVzdHJpY3QgJXNcblxuIiwgcmVz dHJpY3Rfa2V5KTsKKworCQkvKgorCQkgKiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdy ZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5vIHB1cnBvc2UKKwkJICogb3RoZXIgdGhhbiB0byBi cmVhayB0aGluZ3MgZm9yIGluc3RhbGxhdGlvbnMgd2l0aG91dCBhIHBvc3RncmVzCisJCSAqIGRh dGFiYXNlLiAgRXZlcnl0aGluZyB3ZSdyZSByZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwgc28g d2hpY2hldmVyCisJCSAqIGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50 IGlzIGZpbmUuCisJCSAqLworCisJCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRlIHRvIHRo ZSB0YXJnZXQgY2x1c3RlciAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0 aW9uX3JlYWRfb25seSA9IG9mZjtcblxuIik7CisKKwkJLyogUmVwbGljYXRlIGVuY29kaW5nIGFu ZCBzdGRfc3RyaW5ncyBpbiBvdXRwdXQgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgY2xpZW50X2Vu Y29kaW5nID0gJyVzJztcbiIsCisJCQkJcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZykpOwor CQlmcHJpbnRmKE9QRiwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAlcztcbiIs IHN0ZF9zdHJpbmdzKTsKKwkJaWYgKHN0cmNtcChzdGRfc3RyaW5ncywgIm9mZiIpID09IDApCisJ CQlmcHJpbnRmKE9QRiwgIlNFVCBlc2NhcGVfc3RyaW5nX3dhcm5pbmcgPSBvZmY7XG4iKTsKKwkJ ZnByaW50ZihPUEYsICJcbiIpOworCX0KIAogCWlmICghZGF0YV9vbmx5ICYmICFzdGF0aXN0aWNz X29ubHkgJiYgIW5vX3NjaGVtYSkKIAl7CkBAIC02MjUsNyArNzQwLDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCQkgKiBhbmQgdGFibGVzcGFjZXMgbmV2ZXIgZGVwZW5kIG9uIGVh Y2ggb3RoZXIuICBSb2xlcyBjb3VsZCBoYXZlCiAJCSAqIGdyYW50cyB0byBlYWNoIG90aGVyLCBi dXQgRFJPUCBST0xFIHdpbGwgY2xlYW4gdGhvc2UgdXAgc2lsZW50bHkuCiAJCSAqLwotCQlpZiAo b3V0cHV0X2NsZWFuKQorCQlpZiAoZG9wdC5vdXRwdXRDbGVhbikKIAkJewogCQkJaWYgKCFnbG9i YWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCiAJCQkJZHJvcERC cyhjb25uKTsKQEAgLTY1OSwyNyArNzc0LDQyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJCWR1bXBUYWJsZXNwYWNlcyhjb25uKTsKIAl9CiAKLQkvKgotCSAqIEV4aXQgcmVzdHJp Y3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAgd2ls bAotCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUgYWdhaW4gYXMgYXBwcm9wcmlh dGUuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rf a2V5KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJeworCQkvKgorCQkgKiBF eGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9yZSBkdW1waW5nIHRoZSBkYXRhYmFzZXMuICBw Z19kdW1wIHdpbGwKKwkJICogaGFuZGxlIGVudGVyaW5nIHJlc3RyaWN0ZWQgbW9kZSBhZ2FpbiBh cyBhcHByb3ByaWF0ZS4KKwkJICovCisJCWZwcmludGYoT1BGLCAiXFx1bnJlc3RyaWN0ICVzXG5c biIsIHJlc3RyaWN0X2tleSk7CisJfQogCiAJaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29u bHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCi0JCWR1bXBEYXRhYmFzZXMoY29ubik7CisJCWR1bXBE YXRhYmFzZXMoY29ubiwgZG9wdC5vdXRwdXRDbGVhbik7CiAKLQlQUWZpbmlzaChjb25uKTsKLQot CWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3NlICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQogCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0ZWQgb24iKTsKLQlmcHJpbnRmKE9QRiwgIi0tXG4t LSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CiAK LQlpZiAoZmlsZW5hbWUpCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJp bnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0 ZVxuLS1cblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlS ZXN0b3JlT3B0aW9ucyAqcm9wdDsKKworCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBQ b3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIiwgIkNPTU1F TlQiKTsKKwkJcm9wdCA9IE5ld1Jlc3RvcmVPcHRpb25zKCk7CisJCVNldEFyY2hpdmVPcHRpb25z KGZvdXQsICZkb3B0LCByb3B0KTsKKworCQkvKiBNYXJrIHdoaWNoIGVudHJpZXMgc2hvdWxkIGJl IG91dHB1dCAqLworCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKGZvdXQpOworCQlDbG9z ZUFyY2hpdmUoZm91dCk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQogCXsKIAkJZmNsb3NlKE9Q Rik7CiAKIAkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFs ICovCi0JCWlmIChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKSkKIAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApA QCAtNjkwLDEyICs4MjAsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGlj IHZvaWQKIGhlbHAodm9pZCkKIHsKLQlwcmludGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwg ZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0LlxuXG4iKSwgcHJvZ25hbWUpOworCXBy aW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNR TCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cy5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYo XygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFt ZSk7CiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAg LWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJp bnRmKF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQg KGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12 ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1W LCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRo ZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAg ZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtNzcw LDYgKzkwMiw3IEBAIHN0YXRpYyB2b2lkCiBkcm9wUm9sZXMoUEdjb25uICpjb25uKQogewogCVBR RXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaV9yb2xu YW1lOwogCWludAkJCWk7CkBAIC03ODYsMTIgKzkxOSwxNyBAQCBkcm9wUm9sZXMoUEdjb25uICpj b25uKQogCQkJCQkJICAiRlJPTSAlcyAiCiAJCQkJCQkgICJPUkRFUiBCWSAxIiwgcm9sZV9jYXRh bG9nKTsKIAotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJlcyA9IGV4 ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaV9y b2xuYW1lID0gUFFmbnVtYmVyKHJlcywgInJvbG5hbWUiKTsKIAogCWlmIChQUW50dXBsZXMocmVz KSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOworCXsK KwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxu LS0gRHJvcCByb2xlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRy eSgiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChp ID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtNzk5LDE1ICs5MzcsMjEgQEAg ZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAogCQlyb2xlbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBp LCBpX3JvbG5hbWUpOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQlh cHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFJPTEUgJXMlcztcbiIsCiAJCQkJaWZfZXhp c3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJZm10SWQocm9sZW5hbWUpKTsKKworCQlpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5 LT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwg ImRyb3BSb2xlcyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIo YnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC04NzEsNyArMTAx NSw3IEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkgICJGUk9NICVzICIKIAkJCQkJ CSAgIk9SREVSIEJZIDIiLCByb2xlX2NhdGFsb2cpOwogCi0JcmVzID0gZXhlY3V0ZVF1ZXJ5KGNv bm4sIGJ1Zi0+ZGF0YSk7CisJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSwgZm91 dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlpX29pZCA9IFBRZm51bWJlcihyZXMsICJvaWQiKTsKIAlp X3JvbG5hbWUgPSBQUWZudW1iZXIocmVzLCAicm9sbmFtZSIpOwpAQCAtODg5LDcgKzEwMzMsMTIg QEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAlpX2lzX2N1cnJlbnRfdXNlciA9IFBRZm51bWJl cihyZXMsICJpc19jdXJyZW50X3VzZXIiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0J CWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGVzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGVzXG4tLVxu XG4iKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUm9sZXNcbi0t XG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMp OyBpKyspCiAJewpAQCAtOTkzLDcgKzExNDIsMTAgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikK IAkJCQkJCQkgIlJPTEUiLCByb2xlbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9Q RiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFy Y2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wUm9sZXMiKTsKIAl9CiAKIAkvKgpAQCAtMTAwMSwx NSArMTE1MywxMyBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCSAqIFdlIGRvIGl0IHRoaXMg d2F5IGJlY2F1c2UgY29uZmlnIHNldHRpbmdzIGZvciByb2xlcyBjb3VsZCBtZW50aW9uIHRoZQog CSAqIG5hbWVzIG9mIG90aGVyIHJvbGVzLgogCSAqLwotCWlmIChQUW50dXBsZXMocmVzKSA+IDAp Ci0JCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWd1cmF0aW9uc1xuLS1cbiIpOwot CiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJCWR1bXBVc2VyQ29uZmln KGNvbm4sIFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpKTsKIAogCVBRY2xlYXIocmVzKTsK IAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiAKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsK IH0KQEAgLTEwNzYsNyArMTIyNiw3IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4p CiAJCQkJCSAgIkxFRlQgSk9JTiAlcyB1ZyBvbiB1Zy5vaWQgPSBhLmdyYW50b3IgIgogCQkJCQkg ICJXSEVSRSBOT1QgKHVyLnJvbG5hbWUgfiAnXnBnXycgQU5EIHVtLnJvbG5hbWUgfiAnXnBnXycp IgogCQkJCQkgICJPUkRFUiBCWSAxLDIsMyIsIHJvbGVfY2F0YWxvZywgcm9sZV9jYXRhbG9nLCBy b2xlX2NhdGFsb2cpOwotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJl cyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwog CWlfcm9sZSA9IFBRZm51bWJlcihyZXMsICJyb2xlIik7CiAJaV9tZW1iZXIgPSBQUWZudW1iZXIo cmVzLCAibWVtYmVyIik7CiAJaV9ncmFudG9yID0gUFFmbnVtYmVyKHJlcywgImdyYW50b3IiKTsK QEAgLTEwODgsNyArMTIzOCwxMiBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQog CWlfc2V0X29wdGlvbiA9IFBRZm51bWJlcihyZXMsICJzZXRfb3B0aW9uIik7CiAKIAlpZiAoUFFu dHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBz XG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZw cmludGYoT1BGLCAiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIpOworCQllbHNlCisJ CQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4i LCAiQ09NTUVOVCIpOworCX0KIAogCS8qCiAJICogV2UgY2FuJ3QgZHVtcCB0aGVzZSBHUkFOVCBj b21tYW5kcyBpbiBhcmJpdHJhcnkgb3JkZXIsIGJlY2F1c2UgYSByb2xlCkBAIC0xMTY3LDYgKzEz MjIsNyBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCWNoYXIJICAgKmdy YW50b3I7CiAJCQkJY2hhcgkgICAqc2V0X29wdGlvbiA9ICJ0cnVlIjsKIAkJCQlib29sCQlmb3Vu ZDsKKwkJCQlQUUV4cEJ1ZmZlciBjcmVhUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQkJ CS8qIElmIHdlIGFscmVhZHkgZGlkIHRoaXMgZ3JhbnQsIGRvbid0IGRvIGl0IGFnYWluLiAqLwog CQkJCWlmIChkb25lW2kgLSBzdGFydF0pCkBAIC0xMjIzLDggKzEzNzksOCBAQCBkdW1wUm9sZU1l bWJlcnNoaXAoUEdjb25uICpjb25uKQogCiAJCQkJLyogR2VuZXJhdGUgdGhlIGFjdHVhbCBHUkFO VCBzdGF0ZW1lbnQuICovCiAJCQkJcmVzZXRQUUV4cEJ1ZmZlcihvcHRidWYpOwotCQkJCWZwcmlu dGYoT1BGLCAiR1JBTlQgJXMiLCBmbXRJZChyb2xlKSk7Ci0JCQkJZnByaW50ZihPUEYsICIgVE8g JXMiLCBmbXRJZChtZW1iZXIpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiR1JB TlQgJXMiLCBmbXRJZChyb2xlKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBU TyAlcyIsIGZtdElkKG1lbWJlcikpOwogCQkJCWlmICgqYWRtaW5fb3B0aW9uID09ICd0JykKIAkJ CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAiQURNSU4gT1BUSU9OIik7CiAJCQkJaWYg KGR1bXBfZ3JhbnRfb3B0aW9ucykKQEAgLTEyNDUsMTAgKzE0MDEsMTUgQEAgZHVtcFJvbGVNZW1i ZXJzaGlwKFBHY29ubiAqY29ubikKIAkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAi U0VUIEZBTFNFIik7CiAJCQkJfQogCQkJCWlmIChvcHRidWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJ CQkJZnByaW50ZihPUEYsICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CisJCQkJCWFwcGVuZFBR RXhwQnVmZmVyKGNyZWFRcnksICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CiAJCQkJaWYgKGR1 bXBfZ3JhbnRvcnMpCi0JCQkJCWZwcmludGYoT1BGLCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChn cmFudG9yKSk7Ci0JCQkJZnByaW50ZihPUEYsICI7XG4iKTsKKwkJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoY3JlYVFyeSwgIiBHUkFOVEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOworCQkJCWFwcGVu ZFBRRXhwQnVmZmVyKGNyZWFRcnksICI7XG4iKTsKKworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwkJCQkJZnByaW50ZihPUEYsICIlcyIsIGNyZWFRcnktPmRhdGEpOworCQkJ CWVsc2UKKwkJCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNyZWFRcnktPmRhdGEsICJkdW1wUm9s ZU1lbWJlcnNoaXAiKTsKIAkJCX0KIAkJfQogCkBAIC0xMjYwLDcgKzE0MjEsOCBAQCBkdW1wUm9s ZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBC dWZmZXIoYnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTI4NSwx MCArMTQ0NywxNSBAQCBkdW1wUm9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikKIAkJCQkJICAgInBh cmFjbCwgIgogCQkJCQkgICAicGdfY2F0YWxvZy5hY2xkZWZhdWx0KCdwJywgIiBDcHBBc1N0cmlu ZzIoQk9PVFNUUkFQX1NVUEVSVVNFUklEKSAiKSBBUyBhY2xkZWZhdWx0ICIKIAkJCQkJICAgIkZS T00gcGdfY2F0YWxvZy5wZ19wYXJhbWV0ZXJfYWNsICIKLQkJCQkJICAgIk9SREVSIEJZIDEiKTsK KwkJCQkJICAgIk9SREVSIEJZIDEiLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50 dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBv biBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBwcml2aWxl Z2VzIG9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsg aSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtMTMxMiwxNCArMTQ3OSwxOSBAQCBkdW1w Um9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikKIAkJCWV4aXRfbmljZWx5KDEpOwogCQl9CiAKLQkJ ZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQlj cmVhdGVPbmVBcmNoaXZlRW50cnkoYnVmLT5kYXRhLCAiZHVtcFJvbGVHVUNQcml2cyIpOwogCiAJ CWZyZWUoZnBhcm5hbWUpOwogCQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNs ZWFyKHJlcyk7Ci0JZnByaW50ZihPUEYsICJcblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTEzMzEsNiAr MTUwMyw3IEBAIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiB7CiAJUEdyZXN1bHQgICAq cmVzOwogCWludAkJCWk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKIAogCS8qCiAJICogR2V0IGFsbCB0YWJsZXNwYWNlcyBleGNlcHQgYnVpbHQtaW4gb25lcyAo d2hpY2ggd2UgYXNzdW1lIGFyZSBuYW1lZApAQCAtMTMzOSwyMyArMTUxMiwzNCBAQCBkcm9wVGFi bGVzcGFjZXMoUEdjb25uICpjb25uKQogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCAiU0VMRUNU IHNwY25hbWUgIgogCQkJCQkgICAiRlJPTSBwZ19jYXRhbG9nLnBnX3RhYmxlc3BhY2UgIgogCQkJ CQkgICAiV0hFUkUgc3BjbmFtZSAhfiAnXnBnXycgIgotCQkJCQkgICAiT1JERVIgQlkgMSIpOwor CQkJCQkgICAiT1JERVIgQlkgMSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1 cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xu LS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJp bnRmKE9QRiwgIi0tXG4tLSBEcm9wIHRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJ Y3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIiwg IkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykK IAl7CiAJCWNoYXIJICAgKnNwY25hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CiAKLQkJZnBy aW50ZihPUEYsICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCisJCWFwcGVuZFBRRXhwQnVmZmVy KGRlbFFyeSwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKIAkJCQlpZl9leGlzdHMgPyAiSUYg RVhJU1RTICIgOiAiIiwKIAkJCQlmbXRJZChzcGNuYW1lKSk7CisKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJ CWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShkZWxRcnktPmRhdGEsICJkcm9wVGFibGVz cGFjZXMiKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsK KwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIp OwogfQogCiAvKgpAQCAtMTM3OSwxMCArMTU2MywxNSBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25u ICpjb25uKQogCQkJCQkgICAicGdfY2F0YWxvZy5zaG9ial9kZXNjcmlwdGlvbihvaWQsICdwZ190 YWJsZXNwYWNlJykgIgogCQkJCQkgICAiRlJPTSBwZ19jYXRhbG9nLnBnX3RhYmxlc3BhY2UgIgog CQkJCQkgICAiV0hFUkUgc3BjbmFtZSAhfiAnXnBnXycgIgotCQkJCQkgICAiT1JERVIgQlkgMSIp OworCQkJCQkgICAiT1JERVIgQlkgMSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBR bnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0t XG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50 ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVP bmVBcmNoaXZlRW50cnkoIi0tXG4tLSBUYWJsZXNwYWNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsK Kwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNDUx LDE0ICsxNjQwLDE5IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJICJU QUJMRVNQQUNFIiwgc3BjbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVz IiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnBy aW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeShidWYtPmRhdGEsICJkdW1wVGFibGVzcGFjZXMiKTsKIAogCQlmcmVlKGZzcGNuYW1lKTsK IAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmlu dGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlm cHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNDc5LDEwICsxNjczLDE1IEBAIGRyb3BE QnMoUEdjb25uICpjb25uKQogCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUgIgogCQkJCQkgICAiRlJP TSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29u bmxpbWl0ICE9IC0yICIKLQkJCQkJICAgIk9SREVSIEJZIGRhdG5hbWUiKTsKKwkJCQkJICAgIk9S REVSIEJZIGRhdG5hbWUiLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMo cmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQg cG9zdGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCBkYXRhYmFzZXMg KGV4Y2VwdCBwb3N0Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIik7CisJCWVsc2UKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdy ZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0g MDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtMTQ5NywxNSArMTY5NiwyMyBAQCBk cm9wREJzKFBHY29ubiAqY29ubikKIAkJCXN0cmNtcChkYm5hbWUsICJ0ZW1wbGF0ZTAiKSAhPSAw ICYmCiAJCQlzdHJjbXAoZGJuYW1lLCAicG9zdGdyZXMiKSAhPSAwKQogCQl7Ci0JCQlmcHJpbnRm KE9QRiwgIkRST1AgREFUQUJBU0UgJXMlcztcbiIsCisJCQlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9Q IERBVEFCQVNFICVzJXM7XG4iLAogCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwK IAkJCQkJZm10SWQoZGJuYW1lKSk7CisKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJCWVsc2UKKwkJCQlj cmVhdGVPbmVBcmNoaXZlRW50cnkoZGVsUXJ5LT5kYXRhLCAiRFJPUF9EQVRBQkFTRSIpOwogCQl9 CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAog CkBAIC0xNTI1LDE0ICsxNzMyLDI1IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqdXNlcm5hbWUpCiAJYXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4oYnVmLCB1c2VybmFt ZSwgY29ubik7CiAJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyknKTsKIAotCXJlcyA9IGV4 ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBi dWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4g MCkKIAl7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9s aW5lKHVzZXJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZp ZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZyBcIiVzXCJc bi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIJcXJ5ID0g Y3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiXG4tLVxu LS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQkJY3JlYXRlT25l QXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZl cihxcnkpOworCQl9CisKIAkJZnJlZShzYW5pdGl6ZWQpOwogCX0KIApAQCAtMTU0Miw3ICsxNzYw LDExIEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUp CiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQoY29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIDApLAog CQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUsIE5VTEwsIE5VTEwsCiAJCQkJCQkJICAgYnVmKTsK LQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UK KwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wVXNlckNvbmZpZyIpOwog CX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE1OTEsNyArMTgxMyw3IEBAIGV4cGFuZF9kYm5hbWVf cGF0dGVybnMoUEdjb25uICpjb25uLAogCQkJZXhpdF9uaWNlbHkoMSk7CiAJCX0KIAotCQlyZXMg PSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOworCQlyZXMgPSBleGVjdXRlUXVlcnko Y29ubiwgcXVlcnktPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCQlmb3IgKGludCBpID0g MDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJCXsKIAkJCXNpbXBsZV9zdHJpbmdfbGlzdF9h cHBlbmQobmFtZXMsIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSk7CkBAIC0xNjA4LDEwICsxODMwLDEz IEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50 cyBvZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBib29sIG91dHB1dF9jbGVhbikKIHsK IAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwljaGFyCQlkYl9zdWJkaXJbTUFYUEdQQVRI XTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFUSF07CisJRklMRQkJKm1hcF9maWxlID0gTlVM TDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNp bmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE2MjUsMTkgKzE4NTAsNDkgQEAgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUgZmFpbHVyZSBt b2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJ ICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJ CQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBB TkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKLQkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0 ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOworCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3Rl bXBsYXRlMScpLCBkYXRuYW1lIiwKKwkJCQkJICAgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlp ZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNc bi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnBy aW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOwor CX0KKworCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmll ZCwgY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJICogdW5kZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFu ZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBvciBzdWJkaXJlY3RvcnkKKwkgKiB3aWxsIGJlIGNy ZWF0ZWQgaW4gdGhhdCBzdWJkaXJlY3RvcnkgYnkgcGdfZHVtcC4KKwkgKi8KKyAgIGlmIChhcmNo RHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKyAgIHsKKwkgICBjaGFyICAgICAgICBtYXBfZmlsZV9w YXRoW01BWFBHUEFUSF07CisKKwkgICBzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVz L2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKworCSAgIC8qIENyZWF0ZSBhIHN1YmRpcmVjdG9yeSB3 aXRoICdkYXRhYmFzZXMnIG5hbWUgdW5kZXIgbWFpbiBkaXJlY3RvcnkuICovCisJICAgaWYgKG1r ZGlyKGRiX3N1YmRpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSAhPSAwKQorCQkgICBwZ19mYXRhbCgi Y291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkg ICBzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5h bWUpOworCisJICAgLyogQ3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0b3JlIGRib2lkIGFuZCBkYm5h bWUpICovCisJICAgbWFwX2ZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7 CisJICAgaWYgKCFtYXBfZmlsZSkKKwkJICAgcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUg XCIlc1wiOiAlbSIsIG1hcF9maWxlX3BhdGgpOworICAgfQogCiAJZm9yIChpID0gMDsgaSA8IFBR bnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJl cywgaSwgMCk7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKLQkJY29uc3QgY2hhciAqY3JlYXRlX29w dHM7CisJCWNoYXIgICAgICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKKwkJY29uc3Qg Y2hhciAqY3JlYXRlX29wdHMgPSAiIjsKIAkJaW50CQkJcmV0OwogCiAJCS8qIFNraXAgdGVtcGxh dGUwLCBldmVuIGlmIGl0J3Mgbm90IG1hcmtlZCAhZGF0YWxsb3djb25uLiAqLwpAQCAtMTY1NCw3 ICsxOTA5LDE4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQlwZ19sb2dfaW5mbygi ZHVtcGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCiAJCXNhbml0aXplZCA9IHNhbml0 aXplX2xpbmUoZGJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2Ug XCIlc1wiIGR1bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1 bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiLS1c bi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1 ZmZlcihxcnkpOworCQl9CisKIAkJZnJlZShzYW5pdGl6ZWQpOwogCiAJCS8qCkBAIC0xNjY5LDI0 ICsxOTM1LDQ2IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl7CiAJCQlpZiAob3V0 cHV0X2NsZWFuKQogCQkJCWNyZWF0ZV9vcHRzID0gIi0tY2xlYW4gLS1jcmVhdGUiOworCQkJLyog U2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLwor CQkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJZnByaW50ZihPUEYs ICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKIAkJCWVsc2UKIAkJCXsKLQkJCQljcmVhdGVf b3B0cyA9ICIiOwotCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNv bW1hbmQsIHdlIG11c3QgKi8KLQkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBk Ym5hbWUpOworCQkJCVBRRXhwQnVmZmVyCXFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJ CQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAiQ09OTkVDVCIpOworCQkJCWRlc3Ry b3lQUUV4cEJ1ZmZlcihxcnkpOwogCQkJfQogCQl9CiAJCWVsc2UKIAkJCWNyZWF0ZV9vcHRzID0g Ii0tY3JlYXRlIjsKIAotCQlpZiAoZmlsZW5hbWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVt cChkYm5hbWUsIGNyZWF0ZV9vcHRzKTsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSBwbGFp biBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUg bWFwLmRhdCBmaWxlLgorCQkgKi8KKwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQor CQl7CisJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCQlzbnByaW50Zihk YmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiLmRtcCIsIGRiX3N1YmRpciwgb2lk KTsKKwkJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQkJc25wcmludGYo ZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIi50YXIiLCBkYl9zdWJkaXIsIG9p ZCk7CisJCQllbHNlCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wi L1wiJXNcIiIsIGRiX3N1YmRpciwgb2lkKTsKKworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZv ciBkYm9pZCBhbmQgZGJuYW1lIGluIG1hcCBmaWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwg IiVzICVzXG4iLCBvaWQsIGRibmFtZSk7CisJCX0KKworCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1l LCBjcmVhdGVfb3B0cywgZGJmaWxlcGF0aCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFs KCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwog Ci0JCWlmIChmaWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQogCQl7CiAJCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJ aWYgKCFPUEYpCkBAIC0xNjk1LDYgKzE5ODMsMTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNv bm4pCiAJCX0KIAl9CiAKKwkvKiBDbG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1h dCAhPSBhcmNoTnVsbCkKKwkJZmNsb3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0K IApAQCAtMTcwNCw3ICsxOTk2LDcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBS dW4gcGdfZHVtcCBvbiBkYm5hbWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRp YyBpbnQKLXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9v cHRzKQorcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29w dHMsIGNoYXIgKmRiZmlsZSkKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29ubnN0cmJ1ZjsKIAlQUUV4 cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTcxMywxNyArMjAwNSwzNiBAQCBydW5QZ0R1bXAoY29uc3Qg Y2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKIAlpbml0UFFFeHBCdWZmZXIo JmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1ZmZlcigmY21kKTsKIAotCXByaW50ZlBRRXhwQnVm ZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKLQkJCQkJICBwZ2R1bXBvcHRz LT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkvKgotCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwg dXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKLQkgKiBmb3JtYXQuCisJ ICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBu YW1lIGFuZCBkdW1wCisJICogZm9ybWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFy Y2hpdmUgZHVtcC4KIAkgKi8KLQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjbWQsICIgLUZhICIpOworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJ CXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwK KwkJCQkJCSAgZGJmaWxlLCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hEaXJlY3RvcnkpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1h dD1kaXJlY3RvcnkgIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20p CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJ CWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiICAtLWZvcm1hdD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAi XCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNy ZWF0ZV9vcHRzKTsKKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUg dW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCisJCSAqIGZvcm1hdC4KKwkJICovCisJ CWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOwor CQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkv KgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3Rl ZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE3NjYsNyArMjA3Nyw3IEBAIGJ1aWxkU2hTZWNMYWJl bHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwK IAlQR3Jlc3VsdCAgICpyZXM7CiAKIAlidWlsZFNoU2VjTGFiZWxRdWVyeShjYXRhbG9nX25hbWUs IG9iamVjdElkLCBzcWwpOwotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBzcWwtPmRhdGEpOwor CXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBzcWwtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2Up OwogCWVtaXRTaFNlY0xhYmVscyhjb25uLCByZXMsIGJ1ZmZlciwgb2JqdHlwZSwgb2JqbmFtZSk7 CiAKIAlQUWNsZWFyKHJlcyk7CkBAIC0xODY4LDMgKzIxNzksNjcgQEAgcmVhZF9kdW1wYWxsX2Zp bHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pCiAK IAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIHBhcnNlRHVtcEZvcm1hdAorICoK KyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisgKi8KK3N0YXRpYyBBcmNoaXZl Rm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCUFyY2hpdmVG b3JtYXQgYXJjaER1bXBGb3JtYXQ7CisKKwlpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjIikg PT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3Vz dG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZCIpID09IDApCisJCWFyY2hE dW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgImRpcmVjdG9yeSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInAiKSA9PSAwKQorCQlhcmNoRHVtcEZv cm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicGxhaW4i KSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwll bHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09IDApCisJCWFyY2hEdW1wRm9y bWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgb3V0cHV0IGZv cm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwi IiwKKwkJCQkgZm9ybWF0KTsKKworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30KKworLyoKKyAq IGNyZWF0ZUR1bXBJZAorICoKKyAqIFRoaXMgd2lsbCByZXR1cm4gbmV4dCBsYXN0IHVzZWQgb2lk LgorICovCitzdGF0aWMgaW50CitjcmVhdGVEdW1wSWQodm9pZCkKK3sKKwlyZXR1cm4gKytkdW1w SWRWYWw7Cit9CisKKy8qCisgKiBjcmVhdGVPbmVBcmNoaXZlRW50cnkKKyAqCisgKiBUaGlzIGNy ZWF0ZXMgb25lIGFyY2hpdmUgZW50cnkgYmFzZWQgb24gZm9ybWF0LgorICovCitzdGF0aWMgdm9p ZAorY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBjaGFyICp0 YWcpCit7CisJQ2F0YWxvZ0lkIG5pbENhdGFsb2dJZCA9IHswLCAwfTsKKwlBc3NlcnQoZm91dCAh PSBOVUxMKTsKKworCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJbmlsQ2F0YWxvZ0lkLCAvKiBjYXRh bG9nIElEICovCisJCQljcmVhdGVEdW1wSWQoKSwgLyogZHVtcCBJRCAqLworCQkJQVJDSElWRV9P UFRTKC50YWcgPSB0YWcsCisJCQkJLmRlc2NyaXB0aW9uID0gdGFnLAorCQkJCS5zZWN0aW9uID0g U0VDVElPTl9QUkVfREFUQSwKKwkJCQkuY3JlYXRlU3RtdCA9IHF1ZXJ5KSk7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jl c3RvcmUuYwppbmRleCBjOTc3NjMwNmM1Yy4uMThlYTg4NjlhOTcgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUu YwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMg YW4gdXRpbGl0eSBleHRyYWN0aW5nIHBvc3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25zCi0gKglm cm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNoaXZl cgorICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC9wZ19kdW1wYWxs IHVzaW5nIHRoZSBhcmNoaXZlcgogICoJaW50ZXJmYWNlLgogICoKICAqCXBnX3Jlc3RvcmUgd2ls bCByZWFkIHRoZSBiYWNrdXAgYXJjaGl2ZSBhbmQKQEAgLTQxLDEyICs0MSwxNiBAQAogI2luY2x1 ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CiAjaWZkZWYgSEFWRV9URVJNSU9TX0gKICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjZW5k aWYKIAorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb25uZWN0ZGIuaCIK ICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMu aCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIu aCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCkBAIC01 NCwxOCArNTgsNDMgQEAKIAogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUp Owogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUs IFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIGZpbGVfZXhpc3RzX2luX2RpcmVj dG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBpbnQJ cmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9w dGlvbnMgKm9wdHMsCisJCQkJCQkJCSBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwg aW50IG51bSwKKwkJCQkJCQkJIGJvb2wgZ2xvYmFsc19vbmx5KTsKK3N0YXRpYyBpbnQgcmVzdG9y ZV9nbG9iYWxfb2JqZWN0cyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQlSZXN0b3JlT3B0 aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMsCisJCWludCBudW0sIGJvb2wgZ2xvYmFsc19vbmx5 KTsKK3N0YXRpYyBpbnQJcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGNvbnN0IGNoYXIgKmlucHV0Rmls ZVNwZWMsCisJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9w dGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZXNfbGlz dF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5h bWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRl cm5zKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNo YXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgIFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRf bGlzdCk7CisKKy8qCisgKiBTdG9yZXMgYSBkYXRhYmFzZSBPSUQgYW5kIHRoZSBjb3JyZXNwb25k aW5nIG5hbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IERiT2lkTmFtZQoreworCU9pZAkJCW9pZDsK KwljaGFyCQlzdHJbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyogbnVsbC10ZXJtaW5hdGVkIHN0 cmluZyBoZXJlICovCit9IERiT2lkTmFtZTsKKwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhp dF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJ ICAgKmlucHV0RmlsZVNwZWM7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2No ZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQluX2Vycm9ycyA9IDA7CisJYm9vbAkJZ2xvYmFsc19v bmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zID0ge05V TEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlzYWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGlu dAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsKIAlzdGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBA IC04OSw2ICsxMTgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIs IDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRlIiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9u bHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imdsb2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJ CXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwg J2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIsIDEsIE5VTEwsICdOJ30sCkBAIC0xNDIsNiArMTcy LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwg bm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29ubHksIDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCA0fSwKIAkJeyJyZXN0cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgNn0sCisJCXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCA3fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMTcwLDcgKzIwMSw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0 b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpU OlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVm OkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCiAJCQkJCQkJY21kb3B0cywg TlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAtMTk3LDExICsyMjgsMTQgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJ CQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJ CWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25seSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLwor CQkJCWdsb2JhbHNfb25seSA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlp ZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19z dHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9m IHJlc3RvcmUgam9icyAqLwogCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8t LWpvYnMiLCAxLAogCQkJCQkJCQkJICBQR19NQVhfSk9CUywKQEAgLTMyMSw2ICszNTUsMTAgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJb3B0cy0+cmVzdHJpY3Rfa2V5ID0gcGdf c3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgNzoJCQkJLyogZGF0YWJhc2Ug cGF0dGVybnMgdG8gc2tpcCAqLworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4 Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJ LyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCiAJCQkJcGdfbG9n X2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHBy b2duYW1lKTsKQEAgLTM0Nyw2ICszODUsMTMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFtZSAmJiAhb3B0cy0+ZmlsZW5hbWUgJiYgIW9wdHMt PnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2YgLWQvLS1kYm5hbWUgYW5kIC1mLy0tZmls ZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAh PSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9uIC0tZXhj bHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1v bmx5Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBp bmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKwogCS8qIFNo b3VsZCBnZXQgYXQgbW9zdCBvbmUgb2YgLWQgYW5kIC1mLCBlbHNlIHVzZXIgaXMgY29uZnVzZWQg Ki8KIAlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCiAJewpAQCAtNDcyLDYgKzUxNywxMjEgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCSBvcHRzLT5mb3JtYXROYW1lKTsKIAl9 CiAKKwkvKgorCSAqIElmIHRvYy5nbG8gZmlsZSBpcyBwcmVzZW50LCB0aGVuIHJlc3RvcmUgYWxs IHRoZQorCSAqIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQsIGJ1dCBza2lwIHJlc3RvcmluZyB0aG9z ZSBtYXRjaGluZworCSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAo aW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmCisJCQkoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlu cHV0RmlsZVNwZWMsICJ0b2MuZ2xvIikpKQorCXsKKwkJLyoKKwkJICogQ2FuIG9ubHkgdXNlIC0t bGlzdCBvciAtLXVzZS1saXN0IG9wdGlvbnMgd2l0aCBhIHNpbmdsZSBkYXRhYmFzZQorCQkgKiBk dW1wLgorCQkgKi8KKwkJaWYgKG9wdHMtPnRvY1N1bW1hcnkpCisJCQlwZ19mYXRhbCgib3B0aW9u IC1sLy0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0 ZWQgYnkgcGdfZHVtcGFsbCIpOworCQllbHNlIGlmIChvcHRzLT50b2NGaWxlKQorCQkJcGdfZmF0 YWwoIm9wdGlvbiAtTC8tLXVzZS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFu IGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisKKwkJLyoKKwkJICogVG8gcmVzdG9y ZSBmcm9tIGEgcGdfZHVtcGFsbCBhcmNoaXZlLCAtQyAoY3JlYXRlIGRhdGFiYXNlKSBvcHRpb24K KwkJICogbXVzdCBiZSBzcGVjaWZpZWQgdW5sZXNzIHdlIGFyZSBvbmx5IHJlc3RvcmluZyBnbG9i YWxzLgorCQkgKi8KKwkJaWYgKCFnbG9iYWxzX29ubHkgJiYgb3B0cy0+Y3JlYXRlREIgIT0gMSkK KwkJeworCQkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLUMvLS1jcmVhdGUgbXVzdCBiZSBzcGVjaWZp ZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiKTsKKwkJ CXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iLCBwcm9nbmFtZSk7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiSW5kaXZpZHVhbCBkYXRhYmFz ZXMgY2FuIGJlIHJlc3RvcmVkIHVzaW5nIHRoZWlyIHNwZWNpZmljIGFyY2hpdmVzLiIpOworCQkJ ZXhpdF9uaWNlbHkoMSk7CisJCX0KKworCQkvKiBJZiBnbG9iYWxzLW9ubHksIHRoZW4gcmV0dXJu IGZyb20gaGVyZS4gKi8KKwkJaWYgKGdsb2JhbHNfb25seSkKKwkJeworCQkJY2hhcglnbG9iYWxf cGF0aFtNQVhQR1BBVEhdOworCisJCQkvKiBTZXQgcGF0aCBmb3IgdG9jLmdsbyBmaWxlLiAqLwor CQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy5nbG8iLCBpbnB1dEZp bGVTcGVjKTsKKwkJCW5fZXJyb3JzID0gcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0 aCwgb3B0cywgbnVtV29ya2VycywgMCwgZ2xvYmFsc19vbmx5KTsKKworCQkJcGdfbG9nX2luZm8o ImRhdGFiYXNlIHJlc3RvcmluZyBza2lwcGVkIGJlY2F1c2Ugb3B0aW9uIC1nLy0tZ2xvYmFscy1v bmx5IHdhcyBzcGVjaWZpZWQiKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE5vdyByZXN0b3Jl IGFsbCB0aGUgZGF0YWJhc2VzIGZyb20gbWFwLmRhdCAqLworCQkJbl9lcnJvcnMgPSByZXN0b3Jl X2FsbF9kYXRhYmFzZXMoaW5wdXRGaWxlU3BlYywgZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJ CQkJCQkJIG9wdHMsIG51bVdvcmtlcnMpOworCQl9CisKKwkJLyogRnJlZSBkYiBwYXR0ZXJuIGxp c3QuICovCisJCXNpbXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95KCZkYl9leGNsdWRlX3BhdHRlcm5z KTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxM KQorCQl7CisJCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJu cyk7CisJCQlwZ19mYXRhbCgib3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmUgdXNlZCBv bmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisJ CX0KKworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAtZy8tLWdsb2Jh bHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRl ZCBieSBwZ19kdW1wYWxsIik7CisKKwkJLyogUHJvY2VzcyBpZiB0b2MuZ2xvIGZpbGUgZG9lcyBu b3QgZXhpc3QuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRGaWxl U3BlYywgb3B0cywKKwkJCQludW1Xb3JrZXJzLCBmYWxzZSwgMCwgZ2xvYmFsc19vbmx5KTsKKwl9 CisKKwkvKiBEb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHJl c3RvcmUuICovCisJaWYgKG5fZXJyb3JzKQorCXsKKwkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBp Z25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgbl9lcnJvcnMpOworCQlyZXR1cm4gMTsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworLyoKKyAqIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMKKyAqCisgKiBUaGlz IHJlc3RvcmUgYWxsIGdsb2JhbCBvYmplY3RzLgorICoKKyAqIElmIGdsb2JhbHNfb25seSBpcyBz ZXQsIHRoZW4gc2tpcCBEUk9QIERBVEFCQVNFIGNvbW1hbmRzIGZyb20gcmVzdG9yZS4KKyAqLwor c3RhdGljIGludCByZXN0b3JlX2dsb2JhbF9vYmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNw ZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2VycywgaW50IG51bSwgYm9v bCBnbG9iYWxzX29ubHkpCit7CisJaW50CW5lcnJvcjsKKwlpbnQJZm9ybWF0ID0gb3B0cy0+Zm9y bWF0OworCisJLyogU2V0IGZvcm1hdCBhcyBjdXN0b20gc28gdGhhdCB0b2MuZ2xvIGZpbGUgY2Fu IGJlIHJlYWQuICovCisJb3B0cy0+Zm9ybWF0ID0gYXJjaEN1c3RvbTsKKworCW5lcnJvciA9IHJl c3RvcmVfb25lX2RhdGFiYXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsCisJCQlm YWxzZSwgbnVtLCBnbG9iYWxzX29ubHkpOworCisJLyogUmVzZXQgZm9ybWF0IHZhbHVlLiAqLwor CW9wdHMtPmZvcm1hdCA9IGZvcm1hdDsKKworCXJldHVybiBuZXJyb3I7Cit9CisKKy8qCisgKiBy ZXN0b3JlX29uZV9kYXRhYmFzZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRhYmFz ZSB1c2luZyB0b2MuZGF0IGZpbGUuCisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVycm9y cyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX29uZV9kYXRh YmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJ CQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLCBib29sIGdsb2Jh bHNfb25seSkKK3sKKwlBcmNoaXZlICAgICpBSDsKKwlpbnQJCQluX2Vycm9yczsKKwogCUFIID0g T3BlbkFyY2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVP cHRpb25zKEFILCBOVUxMLCBvcHRzKTsKQEAgLTQ3OSw5ICs2MzksMTUgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB5ZXQg YnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBjb25uZWN0aW9uCiAJICogaXMgaW5pdGlhbGl6 ZWQgdG8gTlVMTCBhbmQgaWYgd2UgdGVybWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHkoKSB3aGls ZQotCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJl IGEgbm8tb3AuCisJICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxs IGp1c3QgYmUgYSBuby1vcC4gSWYgd2UgYXJlCisJICogcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFi YXNlcywgdGhlbiBvbmx5IHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGNsZWFudXAgYXMKKwkgKiB0aGUg cHJldmlvdXMgZW50cnkgd2FzIGFscmVhZHkgaW4gdGhlIGFycmF5IGFuZCB3ZSBoYWQgY2xvc2Vk IHByZXZpb3VzCisJICogY29ubmVjdGlvbiwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBhcnJheSBz bG90LgogCSAqLwotCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJaWYgKCFhcHBlbmRfZGF0 YSB8fCBudW0gPT0gMCkKKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJl cGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIg a25vdyBob3cgbm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CkBA IC01MDEsMjUgKzY2NywyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAllbHNlCiAJ ewogCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUo QUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEsIGdsb2JhbHNfb25seSk7CiAJ fQogCi0JLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICovCi0JaWYg KEFILT5uX2Vycm9ycykKLQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3Rv cmU6ICVkIiwgQUgtPm5fZXJyb3JzKTsKKwluX2Vycm9ycyA9IEFILT5uX2Vycm9yczsKIAogCS8q IEFIIG1heSBiZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCi0JZXhpdF9jb2RlID0gQUgtPm5f ZXJyb3JzID8gMSA6IDA7Ci0KIAlDbG9zZUFyY2hpdmUoQUgpOwogCi0JcmV0dXJuIGV4aXRfY29k ZTsKKwlyZXR1cm4gbl9lcnJvcnM7CiB9CiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25zdCBjaGFy ICpwcm9nbmFtZSkKIHsKLQlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFi YXNlIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG5cbiIpLCBwcm9nbmFtZSk7 CisJcHJpbnRmKF8oIiVzIHJlc3RvcmVzIFBvc3RncmVTUUwgZGF0YWJhc2VzIGZyb20gYXJjaGl2 ZXMgY3JlYXRlZCBieSBwZ19kdW1wIG9yIHBnX2R1bXBhbGwuXG5cbiIpLCBwcm9nbmFtZSk7CiAJ cHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtGSUxF XVxuIiksIHByb2duYW1lKTsKIApAQCAtNTM3LDYgKzY5OSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIg KnByb2duYW1lKQogCXByaW50ZihfKCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xl YW4gKGRyb3ApIGRhdGFiYXNlIG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmlu dGYoXygiICAtQywgLS1jcmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRh dGFiYXNlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBl eGl0IG9uIGVycm9yLCBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAg LWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMs IG5vIGRhdGFiYXNlc1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAg ICAgICAgcmVzdG9yZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9 TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVc biIpKTsKIAlwcmludGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJs ZSBvZiBjb250ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTU1Myw2ICs3MTYsNyBAQCB1 c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJh bnNhY3Rpb24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmlu dGYoXygiICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVy aW5nIGRhdGEtb25seSByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1lbmFibGUtcm93LXNl Y3VyaXR5ICAgICAgICBlbmFibGUgcm93IHNlY3VyaXR5XG4iKSk7CisJcHJpbnRmKF8oIiAgLS1l eGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gICBkbyBub3QgcmVzdG9yZSB0aGUgc3BlY2lmaWVkIGRh dGFiYXNlKHMpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1maWx0ZXI9RklMRU5BTUUgICAgICAgICAg ICByZXN0b3JlIG9yIHNraXAgb2JqZWN0cyBiYXNlZCBvbiBleHByZXNzaW9uc1xuIgogCQkJICIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRklMRU5BTUVcbiIpKTsKIAlwcmludGYo XygiICAtLWlmLWV4aXN0cyAgICAgICAgICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9w cGluZyBvYmplY3RzXG4iKSk7CkBAIC01ODgsOCArNzUyLDggQEAgdXNhZ2UoY29uc3QgY2hhciAq cHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBS T0xFIGJlZm9yZSByZXN0b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRp b25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIGFuZCAtLXNlY3Rpb24gY2FuIGJlIGNvbWJpbmVk IGFuZCBzcGVjaWZpZWRcbiIKLQkJCSAibXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxl IG9iamVjdHMuXG4iKSk7CisJCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQs IC0tc2VjdGlvbiwgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmVcbiIKKwkJCSAiY29tYmlu ZWQgYW5kIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0 cy5cbiIpKTsKIAlwcmludGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3VwcGxpZWQs IHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC5cblxuIikpOwogCXByaW50ZihfKCJSZXBvcnQg YnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmludGYoXygiJXMgaG9t ZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CkBAIC02OTQsMyAr ODU4LDQxMCBAQCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVz dG9yZU9wdGlvbnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAq IGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmls ZSBleGlzdHMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK2ZpbGVf ZXhpc3RzX2luX2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1l KQoreworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNu cHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BB VEgpCisJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsK KworCXJldHVybiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsK K30KKworLyoKKyAqIGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZQorICoKKyAqIFRoaXMgd2ls bCBtYXJrIGZvciBza2lwcGluZyBhbnkgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlzdCB0aGF0 IHBhdHRlcm4gbWF0Y2ggYW4KKyAqIGVudHJ5IGluIHRoZSBkYl9leGNsdWRlX3BhdHRlcm5zIGxp c3QuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIHRvIGJlIHJlc3RvcmVk LgorICoKKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29u biAqY29ubiwKKwkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJ U2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQoreworCWludAkJCWNvdW50X2Ri ID0gMDsKKwlQUUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlxdWVyeSA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwlpZiAoIWNvbm4gJiYgZGJfZXhjbHVkZV9wYXR0ZXJu cy5oZWFkICE9IE5VTEwpCisJCXBnX2xvZ19pbmZvKCJjb25zaWRlcmluZyBQQVRURVJOIGFzIE5B TUUgZm9yIC0tZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24gYXMgbm8gZGF0YWJhc2UgY29ubmVjdGlv biB3aGlsZSBkb2luZyBwZ19yZXN0b3JlIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9u ZSBhbGwgZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJ ICogcmVtb3ZlIGRibmFtZSBmcm9tIGxpc3QuCisJICovCisJZm9yIChTaW1wbGVQdHJMaXN0Q2Vs bCAqZGJfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwg PSBkYl9jZWxsLT5uZXh0KQorCXsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWUgPSAoRGJPaWROYW1l ICopIGRiX2NlbGwtPnB0cjsKKwkJYm9vbAkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVBR RXhwQnVmZmVyIGRiX2xpdCA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJYXBwZW5kU3RyaW5n TGl0ZXJhbENvbm4oZGJfbGl0LCBkYmlkbmFtZS0+c3RyLCBjb25uKTsKKworCQlmb3IgKFNpbXBs ZVN0cmluZ0xpc3RDZWxsICpwYXRfY2VsbCA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgcGF0 X2NlbGw7IHBhdF9jZWxsID0gcGF0X2NlbGwtPm5leHQpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0 aGVyZSBpcyBhbiBleGFjdCBtYXRjaCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gdHJ5IGEgcGF0dGVy bgorCQkJICogbWF0Y2gKKwkJCSAqLworCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJpZG5hbWUtPnN0 ciwgcGF0X2NlbGwtPnZhbCkgPT0gMCkKKwkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJ LyogT3RoZXJ3aXNlLCB0cnkgYSBwYXR0ZXJuIG1hdGNoIGlmIHRoZXJlIGlzIGEgY29ubmVjdGlv biAqLworCQkJZWxzZSBpZiAoY29ubikKKwkJCXsKKwkJCQlpbnQJCQlkb3RjbnQ7CisKKwkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXByb2Nlc3NTUUxO YW1lUGF0dGVybihjb25uLCBxdWVyeSwgcGF0X2NlbGwtPnZhbCwgZmFsc2UsCisJCQkJCQkJCQkg IGZhbHNlLCBOVUxMLCBkYl9saXQtPmRhdGEsCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEws ICZkb3RjbnQpOworCisJCQkJaWYgKGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJy b3IoImltcHJvcGVyIHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIs CisJCQkJCQkJCSBkYmlkbmFtZS0+c3RyKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4 aXRfbmljZWx5KDEpOworCQkJCX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVy eS0+ZGF0YSwgZmFsc2UpOworCisJCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVT X1RVUExFU19PSykgJiYgUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lwX2RiX3Jlc3Rv cmUgPSB0cnVlOworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgbmFtZSBcIiVzXCIgbWF0Y2hl cyBleGNsdWRlIHBhdHRlcm4gXCIlc1wiIiwgZGJpZG5hbWUtPnN0ciwgcGF0X2NlbGwtPnZhbCk7 CisJCQkJfQorCisJCQkJUFFjbGVhcihyZXMpOworCQkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkp OworCQkJfQorCisJCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQkJCWJyZWFrOworCQl9CisKKwkJ ZGVzdHJveVBRRXhwQnVmZmVyKGRiX2xpdCk7CisKKwkJLyoKKwkJICogTWFyayBkYiB0byBiZSBz a2lwcGVkIG9yIGluY3JlbWVudCB0aGUgY291bnRlciBvZiBkYnMgdG8gYmUKKwkJICogcmVzdG9y ZWQKKwkJICovCisJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJl eGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7CisJCQlkYmlkbmFtZS0+ b2lkID0gSW52YWxpZE9pZDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNvdW50X2RiKys7CisJCX0K Kwl9CisKKwlkZXN0cm95UFFFeHBCdWZmZXIocXVlcnkpOworCisJcmV0dXJuIGNvdW50X2RiOwor fQorCisvKgorICogZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlCisgKgorICogT3BlbiBt YXAuZGF0IGZpbGUgYW5kIHJlYWQgbGluZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBsaXN0 IG9mIGRhdGFiYXNlCisgKiBuYW1lcyBhbmQgY29ycmVzcG9uZGluZyBkYl9vaWQuCisgKgorICog UmV0dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4K KyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNo YXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJU3Ry aW5nSW5mb0RhdGEgbGluZWJ1ZjsKKwlGSUxFCSAgICpwZmlsZTsKKwljaGFyCQltYXBfZmlsZV9w YXRoW01BWFBHUEFUSF07CisJaW50CQkJY291bnQgPSAwOworCisKKwkvKgorCSAqIElmIHRoZXJl IGlzIG5vIG1hcC5kYXQgZmlsZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMKKwkg KiB0aGVyZSBpcyBubyBkYXRhYmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghZmlsZV9leGlz dHNfaW5fZGlyZWN0b3J5KGR1bXBkaXJwYXRoLCAibWFwLmRhdCIpKQorCXsKKwkJcGdfbG9nX2lu Zm8oImRhdGFiYXNlIHJlc3RvcmluZyBpcyBza2lwcGVkIGJlY2F1c2UgZmlsZSBcIiVzXCIgZG9l cyBub3QgZXhpc3QgaW4gZGlyZWN0b3J5IFwiJXNcIiIsICJtYXAuZGF0IiwgZHVtcGRpcnBhdGgp OworCQlyZXR1cm4gMDsKKwl9CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgs ICIlcy9tYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICov CisJcGZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZp bGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIs IG1hcF9maWxlX3BhdGgpOworCisJaW5pdFN0cmluZ0luZm8oJmxpbmVidWYpOworCisJLyogQXBw ZW5kIGFsbCB0aGUgZGJuYW1lL2RiX29pZCBjb21iaW5hdGlvbnMgdG8gdGhlIGxpc3QuICovCisJ d2hpbGUgKHBnX2dldF9saW5lX2J1ZihwZmlsZSwgJmxpbmVidWYpKQorCXsKKwkJT2lkCQkJZGJf b2lkID0gSW52YWxpZE9pZDsKKwkJY2hhcgkgICAqZGJuYW1lOworCQlEYk9pZE5hbWUgICpkYmlk bmFtZTsKKwkJaW50CQkJbmFtZWxlbjsKKwkJY2hhcgkgICAqcCA9IGxpbmVidWYuZGF0YTsKKwor CQkvKiBFeHRyYWN0IGRib2lkLiAqLworCQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikg KnApKQorCQkJcCsrOworCQlpZiAocCA+IGxpbmVidWYuZGF0YSAmJiAqcCA9PSAnICcpCisJCXsK KwkJCXNzY2FuZihsaW5lYnVmLmRhdGEsICIldSIsICZkYl9vaWQpOworCQkJcCsrOworCQl9CisK KwkJLyogZGJuYW1lIGlzIHRoZSByZXN0IG9mIHRoZSBsaW5lICovCisJCWRibmFtZSA9IHA7CisJ CW5hbWVsZW4gPSBzdHJsZW4oZGJuYW1lKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4aXQg aWYgdGhlIGZpbGUgaGFzIGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlk KGRiX29pZCkgfHwgbmFtZWxlbiA8PSAxKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4g ZmlsZSBcIiVzXCIgb24gbGluZSAlZCIsIG1hcF9maWxlX3BhdGgsCisJCQkJCSBjb3VudCArIDEp OworCisJCXBnX2xvZ19pbmZvKCJmb3VuZCBkYXRhYmFzZSBcIiVzXCIgKE9JRDogJXUpIGluIGZp bGUgXCIlc1wiIiwKKwkJCQkJZGJuYW1lLCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCWRi aWRuYW1lID0gcGdfbWFsbG9jKG9mZnNldG9mKERiT2lkTmFtZSwgc3RyKSArIG5hbWVsZW4gKyAx KTsKKwkJZGJpZG5hbWUtPm9pZCA9IGRiX29pZDsKKwkJc3RybGNweShkYmlkbmFtZS0+c3RyLCBk Ym5hbWUsIG5hbWVsZW4pOworCisJCXNpbXBsZV9wdHJfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9s aXN0LCBkYmlkbmFtZSk7CisJCWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxl LiAqLworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0 b3JlX2FsbF9kYXRhYmFzZXMKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhv c2UgZHVtcHMgYXJlIHByZXNlbnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZp bGUgbWFwcGluZy4KKyAqCisgKiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNl cyB0aGF0IGFyZSBzcGVjaWZpZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisg KgorICogcmV0dXJucywgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICov CitzdGF0aWMgaW50CityZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxl U3BlYywKKwkJCQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3Rv cmVPcHRpb25zICpvcHRzLAorCQkJCQkgIGludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZVB0ckxp c3QgZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5VTEx9OworCWludAkJCW51bV9kYl9yZXN0b3Jl ID0gMDsKKwlpbnQJCQludW1fdG90YWxfZGI7CisJaW50CQkJbl9lcnJvcnNfdG90YWw7CisJaW50 CQkJY291bnQgPSAwOworCWNoYXIJICAgKmNvbm5lY3RlZF9kYiA9IE5VTEw7CisJYm9vbAkJZHVt cERhdGEgPSBvcHRzLT5kdW1wRGF0YTsKKwlib29sCQlkdW1wU2NoZW1hID0gb3B0cy0+ZHVtcFNj aGVtYTsKKwlib29sCQlkdW1wU3RhdGlzdGljcyA9IG9wdHMtPmR1bXBTY2hlbWE7CisJUEdjb25u ICpjb25uID0gTlVMTDsKKwljaGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCisJLyogU2V0 IHBhdGggZm9yIHRvYy5nbG8gZmlsZS4gKi8KKwlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQ QVRILCAiJXMvdG9jLmdsbyIsIGlucHV0RmlsZVNwZWMpOworCisJLyogU2F2ZSBkYiBuYW1lIHRv IHJldXNlIGl0IGZvciBhbGwgdGhlIGRhdGFiYXNlLiAqLworCWlmIChvcHRzLT5jcGFyYW1zLmRi bmFtZSkKKwkJY29ubmVjdGVkX2RiID0gb3B0cy0+Y3BhcmFtcy5kYm5hbWU7CisKKwludW1fdG90 YWxfZGIgPSBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoaW5wdXRGaWxlU3BlYywgJmRi bmFtZV9vaWRfbGlzdCk7CisKKwkvKiBJZiBtYXAuZGF0IGhhcyBubyBlbnRyaWVzLCByZXR1cm4g YWZ0ZXIgcHJvY2Vzc2luZyBnbG9iYWwgY29tbWFuZHMuICovCisJaWYgKGRibmFtZV9vaWRfbGlz dC5oZWFkID09IE5VTEwpCisJCXJldHVybiByZXN0b3JlX2dsb2JhbF9vYmplY3RzKGdsb2JhbF9w YXRoLCBvcHRzLCBudW1Xb3JrZXJzLCAwLCBmYWxzZSk7CisKKwlwZ19sb2dfaW5mbyhuZ2V0dGV4 dCgiZm91bmQgJWQgZGF0YWJhc2UgbmFtZSBpbiBcIiVzXCIiLAorCQkJCQkJICJmb3VuZCAlZCBk YXRhYmFzZSBuYW1lcyBpbiBcIiVzXCIiLAorCQkJCQkJIG51bV90b3RhbF9kYiksCisJCQkJbnVt X3RvdGFsX2RiLCAibWFwLmRhdCIpOworCisJLyoKKwkgKiBJZiBleGNsdWRlLXBhdHRlcm5zIGlz IGdpdmVuLCB0aGVuIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlIHRvIHByb2Nlc3MKKwkgKiBpdC4K KwkgKi8KKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwpCisJeworCQlpZiAo b3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2Uob3B0 cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQlvcHRz LT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJ CQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCWlmICgh Y29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wi Iiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJaWYgKCFjb25uKQorCQl7CisJCQlw Z19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgInBvc3Rn cmVzIik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInBvc3RncmVzIiwgTlVMTCwgb3B0 cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFy YW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKTsKKworCQkJLyogVHJ5IHdpdGggdGVtcGxhdGUxLiAqLworCQkJaWYg KCFjb25uKQorCQkJeworCQkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCB0byBkYXRh YmFzZSBcIiVzXCIiLCAidGVtcGxhdGUxIik7CisKKwkJCQljb25uID0gQ29ubmVjdERhdGFiYXNl KCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCW9wdHMtPmNw YXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJ CWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQl9CisJCX0KKwl9 CisKKwkvKgorCSAqIGZpbHRlciB0aGUgZGIgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIGV4Y2x1ZGUg cGF0dGVybnMKKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVz dG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCQkJIGRiX2V4Y2x1ZGVfcGF0 dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0 aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7 CisKKwkvKiBPcGVuIHRvYy5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9i YWwgc3FsIGNvbW1hbmRzLiAqLworCW5fZXJyb3JzX3RvdGFsID0gIHJlc3RvcmVfZ2xvYmFsX29i amVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIDAsIGZhbHNlKTsKKworCS8qIEV4 aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJaWYgKGRibmFtZV9vaWRfbGlz dC5oZWFkID09IE5VTEwgfHwgbnVtX2RiX3Jlc3RvcmUgPT0gMCkKKwl7CisJCXBnX2xvZ19pbmZv KG5nZXR0ZXh0KCJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jpbmcgb3V0IG9mICVkIGRhdGFiYXNl IiwKKwkJCQkJCQkgIm5vIGRhdGFiYXNlIG5lZWRzIHJlc3RvcmluZyBvdXQgb2YgJWQgZGF0YWJh c2VzIiwgbnVtX3RvdGFsX2RiKSwKKwkJCQkJbnVtX3RvdGFsX2RiKTsKKwkJcmV0dXJuIG5fZXJy b3JzX3RvdGFsOworCX0KKworCXBnX2xvZ19pbmZvKCJuZWVkIHRvIHJlc3RvcmUgJWQgZGF0YWJh c2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVzdG9yZSwgbnVtX3RvdGFsX2RiKTsK KworCS8qCisJICogV2UgaGF2ZSBhIGxpc3Qgb2YgZGF0YWJhc2VzIHRvIHJlc3RvcmUgYWZ0ZXIg cHJvY2Vzc2luZyB0aGUKKwkgKiBleGNsdWRlLWRhdGFiYXNlIHN3aXRjaChlcykuICBOb3cgd2Ug Y2FuIHJlc3RvcmUgdGhlbSBvbmUgYnkgb25lLgorCSAqLworCWZvciAoU2ltcGxlUHRyTGlzdENl bGwgKmRiX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwg PSBkYl9jZWxsLT5uZXh0KQorCXsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWUgPSAoRGJPaWROYW1l ICopIGRiX2NlbGwtPnB0cjsKKwkJY2hhcgkJc3ViZGlycGF0aFtNQVhQR1BBVEhdOworCQljaGFy CQlzdWJkaXJkYnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJZGJmaWxlbmFtZVtNQVhQR1BBVEhd OworCQlpbnQJCQluX2Vycm9yczsKKworCQkvKiBpZ25vcmUgZGJzIG1hcmtlZCBmb3Igc2tpcHBp bmcgKi8KKwkJaWYgKGRiaWRuYW1lLT5vaWQgPT0gSW52YWxpZE9pZCkKKwkJCWNvbnRpbnVlOwor CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVzZXQgb3ZlcnJpZGVfZGJuYW1lIHNvIHRoYXQgb2Jq ZWN0cyBjYW4gYmUgcmVzdG9yZWQKKwkJICogaW50byBhbiBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJh c2UuICh1c2VkIHdpdGggLWQvLS1kYm5hbWUgb3B0aW9uKQorCQkgKi8KKwkJaWYgKG9wdHMtPmNw YXJhbXMub3ZlcnJpZGVfZGJuYW1lKQorCQl7CisJCQlwZnJlZShvcHRzLT5jcGFyYW1zLm92ZXJy aWRlX2RibmFtZSk7CisJCQlvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSA9IE5VTEw7CisJ CX0KKworCQlzbnByaW50ZihzdWJkaXJkYnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIs IGlucHV0RmlsZVNwZWMpOworCisJCS8qCisJCSAqIExvb2sgZm9yIHRoZSBkYXRhYmFzZSBkdW1w IGZpbGUvZGlyLiBJZiB0aGVyZSBpcyBhbiB7b2lkfS50YXIgb3IKKwkJICoge29pZH0uZG1wIGZp bGUsIHVzZSBpdC4gT3RoZXJ3aXNlIHRyeSB0byB1c2UgYSBkaXJlY3RvcnkgY2FsbGVkCisJCSAq IHtvaWR9CisJCSAqLworCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQR1BBVEgsICIldS50YXIi LCBkYmlkbmFtZS0+b2lkKTsKKwkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShzdWJkaXJk YnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJc25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAi JXMvZGF0YWJhc2VzLyV1LnRhciIsIGlucHV0RmlsZVNwZWMsIGRiaWRuYW1lLT5vaWQpOworCQll bHNlCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZW5hbWUsIE1BWFBHUEFUSCwgIiV1LmRtcCIsIGRi aWRuYW1lLT5vaWQpOworCisJCQlpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KHN1YmRpcmRi cGF0aCwgZGJmaWxlbmFtZSkpCisJCQkJc25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAi JXMvZGF0YWJhc2VzLyV1LmRtcCIsIGlucHV0RmlsZVNwZWMsIGRiaWRuYW1lLT5vaWQpOworCQkJ ZWxzZQorCQkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8l dSIsIGlucHV0RmlsZVNwZWMsIGRiaWRuYW1lLT5vaWQpOworCQl9CisKKwkJcGdfbG9nX2luZm8o InJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKworCQkvKiBJZiBk YXRhYmFzZSBpcyBhbHJlYWR5IGNyZWF0ZWQsIHRoZW4gZG9uJ3Qgc2V0IGNyZWF0ZURCIGZsYWcu ICovCisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJeworCQkJUEdjb25uCSAgICp0ZXN0 X2Nvbm47CisKKwkJCXRlc3RfY29ubiA9IENvbm5lY3REYXRhYmFzZShkYmlkbmFtZS0+c3RyLCBO VUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9y dCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCQkJZmFsc2Us IHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCWlmICh0ZXN0X2Nvbm4pCisJ CQl7CisJCQkJUFFmaW5pc2godGVzdF9jb25uKTsKKworCQkJCS8qIFVzZSBhbHJlYWR5IGNyZWF0 ZWQgZGF0YWJhc2UgZm9yIGNvbm5lY3Rpb24uICovCisJCQkJb3B0cy0+Y3JlYXRlREIgPSAwOwor CQkJCW9wdHMtPmNwYXJhbXMuZGJuYW1lID0gZGJpZG5hbWUtPnN0cjsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKiB3ZSdsbCBoYXZlIHRvIGNyZWF0ZSBpdCAqLworCQkJCW9wdHMtPmNyZWF0 ZURCID0gMTsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGNvbm5lY3RlZF9kYjsKKwkJCX0K KwkJfQorCisJCS8qCisJCSAqIFJlc2V0IGZsYWdzIC0gbWlnaHQgaGF2ZSBiZWVuIHJlc2V0IGlu IHBnX2JhY2t1cF9hcmNoaXZlci5jIGJ5IHRoZQorCQkgKiBwcmV2aW91cyByZXN0b3JlLgorCQkg Ki8KKwkJb3B0cy0+ZHVtcERhdGEgPSBkdW1wRGF0YTsKKwkJb3B0cy0+ZHVtcFNjaGVtYSA9IGR1 bXBTY2hlbWE7CisJCW9wdHMtPmR1bXBTdGF0aXN0aWNzID0gZHVtcFN0YXRpc3RpY3M7CisKKwkJ LyogUmVzdG9yZSB0aGUgc2luZ2xlIGRhdGFiYXNlLiAqLworCQluX2Vycm9ycyA9IHJlc3RvcmVf b25lX2RhdGFiYXNlKHN1YmRpcnBhdGgsIG9wdHMsIG51bVdvcmtlcnMsIHRydWUsIDEsIGZhbHNl KTsKKworCQkvKiBQcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHNpbmds ZSBkYXRhYmFzZSByZXN0b3JlLiAqLworCQlpZiAobl9lcnJvcnMpCisJCXsKKwkJCW5fZXJyb3Jz X3RvdGFsICs9IG5fZXJyb3JzOworCQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9u IGRhdGFiYXNlIFwiJXNcIiByZXN0b3JlOiAlZCIsIGRiaWRuYW1lLT5zdHIsIG5fZXJyb3JzKTsK KwkJfQorCisJCWNvdW50Kys7CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0 YWJhc2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJhc2VzIGlz ICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5kIGRib2lkIGxpc3Qu ICovCisJc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9vaWRfbGlzdCk7CisKKwlyZXR1 cm4gbl9lcnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFf YmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKb2xkIG1vZGUgMTAwNjQ0 Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzN2Q4OTNkNWU2YS4uMDgzZjVjNWJmOWQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9i YXNpYy5wbApAQCAtMjQ0LDQgKzI0NCwzMSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1 bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIg d2l0aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdw Z19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjog dW5yZWNvZ25pemVkIG91dHB1dCBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFsbDogdW5yZWNv Z25pemVkIG91dHB1dCBmb3JtYXQnKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1 bXBhbGwnLCAnLS1mb3JtYXQnLCAnZCcsICctLXJlc3RyaWN0LWtleT11dScsICctZiBkdW1wZmls ZScgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiBvcHRpb24gLS1yZXN0cmljdC1rZXkgY2Fu IG9ubHkgYmUgdXNlZCB3aXRoIC0tZm9ybWF0PXBsYWluXEUvLAorCSdwZ19kdW1wYWxsOiAtLXJl c3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggcGxhaW4gZHVtcCBmb3JtYXQnKTsKKwor Y29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNl PWZvbycsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3Jl OiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhl ciB3aXRoIC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhj bHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1v bmx5JworKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNs dWRlLWRhdGFiYXNlPWZvbycsICctZCcsICd4eHgnLCAnZHVtcGRpcicgXSwKKwlxci9cUXBnX3Jl c3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZSB1c2VkIG9ubHkg d2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1do ZW4gb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBk dW1wIG9mIHBnX2R1bXAnCispOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9y ZScsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnLCAnZHVtcGRpcicgXSwKKwlxci9cUXBn X3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLWdcLy0tZ2xvYmFscy1vbmx5IGNhbiBiZSB1c2VkIG9u bHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJ J1doZW4gb3B0aW9uIC0tZ2xvYmFscy1vbmx5IGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0 aCBkdW1wIG9mIHBnX2R1bXAnCispOwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwN19w Z19kdW1wYWxsLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwLi4zYzdk MmFkN2M1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1w YWxsLnBsCkBAIC0wLDAgKzEsMzk2IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkdGVtcGRp ciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworbXkgJHJ1bl9kYiA9ICdwb3N0 Z3Jlcyc7CitteSAkc2VwID0gJHdpbmRvd3Nfb3MgPyAiXFwiIDogIi8iOworCisjIFRhYmxlc3Bh Y2UgbG9jYXRpb25zIHVzZWQgYnkgInJlc3RvcmVfdGFibGVzcGFjZSIgdGVzdCBjYXNlLgorbXkg JHRhYmxlc3BhY2UxID0gIiR7dGVtcGRpcn0ke3NlcH10YmwxIjsKK215ICR0YWJsZXNwYWNlMiA9 ICIke3RlbXBkaXJ9JHtzZXB9dGJsMiI7Citta2RpcigkdGFibGVzcGFjZTEpIHx8IGRpZSAibWtk aXIgJHRhYmxlc3BhY2UxICQhIjsKK21rZGlyKCR0YWJsZXNwYWNlMikgfHwgZGllICJta2RpciAk dGFibGVzcGFjZTIgJCEiOworCisjIFNjYXBlIHRhYmxlc3BhY2UgbG9jYXRpb25zIG9uIFdpbmRv d3MuCiskdGFibGVzcGFjZTEgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTEgPX4gcy9cXC9c XFxcL2dyKSA6ICR0YWJsZXNwYWNlMTsKKyR0YWJsZXNwYWNlMiA9ICR3aW5kb3dzX29zID8gKCR0 YWJsZXNwYWNlMiA9fiBzL1xcL1xcXFwvZ3IpIDogJHRhYmxlc3BhY2UyOworCisjIFdoZXJlIHBn X2R1bXBhbGwgd2lsbCBiZSBleGVjdXRlZC4KK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdub2RlJyk7Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKworCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMgRGVmaW5pdGlvbiBvZiB0aGUgcGdfZHVtcGFsbCB0ZXN0IGNhc2VzIHRvIHJ1bi4K KyMKKyMgRWFjaCBvZiB0aGVzZSB0ZXN0IGNhc2VzIGFyZSBuYW1lZCBhbmQgdGhvc2UgbmFtZXMg YXJlIHVzZWQgZm9yIGZhaWwKKyMgcmVwb3J0aW5nIGFuZCBhbHNvIHRvIHNhdmUgdGhlIGR1bXAg YW5kIHJlc3RvcmUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUKKyMgdGVzdCB0byBhc3NlcnQu CisjCisjIFRoZSAic2V0dXBfc3FsIiBpcyBhIHBzcWwgdmFsaWQgc2NyaXB0IHRoYXQgY29udGFp bnMgU1FMIGNvbW1hbmRzIHRvIGV4ZWN1dGUKKyMgYmVmb3JlIG9mIGFjdHVhbGx5IGV4ZWN1dGUg dGhlIHRlc3RzLiBUaGUgc2V0dXBzIGFyZSBhbGwgZXhlY3V0ZWQgYmVmb3JlIG9mCisjIGFueSB0 ZXN0IGV4ZWN1dGlvbi4KKyMKKyMgVGhlICJkdW1wX2NtZCIgYW5kICJyZXN0b3JlX2NtZCIgYXJl IHRoZSBjb21tYW5kcyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuIFRoZQorIyAicmVzdG9yZV9jbWQi IG11c3QgaGF2ZSB0aGUgLS1maWxlIGZsYWcgdG8gc2F2ZSB0aGUgcmVzdG9yZSBvdXRwdXQgc28g dGhhdCB3ZQorIyBjYW4gYXNzZXJ0IG9uIGl0LgorIworIyBUaGUgImxpa2UiIGFuZCAidW5saWtl IiBpcyBhIHJlZ2V4cCB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdGhlIHBnX3Jlc3RvcmUKKyMgb3V0 cHV0LiBJdCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZW4gZmlsbGVkIHBlciB0ZXN0IGNh c2VzIGJ1dCBpdCBhbHNvCisjIGNhbiBoYXZlIGJvdGguIFNlZSAiZXhjbHVkaW5nX2RhdGFiYXNl cyIgdGVzdCBjYXNlIGZvciBleGFtcGxlLgorbXkgJXBnZHVtcGFsbF9ydW5zID0gKAorCXJlc3Rv cmVfcm9sZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJworCQlDUkVBVEUgUk9MRSBkdW1wYWxsIFdJ VEggRU5DUllQVEVEIFBBU1NXT1JEIFwnYWRtaW5cJyBTVVBFUlVTRVI7CisJCUNSRUFURSBST0xF IGR1bXBhbGwyIFdJVEggUkVQTElDQVRJT04gQ09OTkVDVElPTiBMSU1JVCAxMDsnLAorCQlkdW1w X2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3Rvcnkn LAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMiLAorCQldLAorCQlyZXN0 b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdk aXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMuc3FsIiwK KwkJCSIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci8KKwkJCVxz KlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDI7XEUKKwkJCVxzKlxRQUxURVIgUk9MRSBkdW1wYWxsMiBX SVRIIE5PU1VQRVJVU0VSIElOSEVSSVQgTk9DUkVBVEVST0xFIE5PQ1JFQVRFREIgTk9MT0dJTiBS RVBMSUNBVElPTiBOT0JZUEFTU1JMUyBDT05ORUNUSU9OIExJTUlUIDEwO1xFCisJCS94bQorCX0s CisKKwlyZXN0b3JlX3RhYmxlc3BhY2UgPT4geworCQlzZXR1cF9zcWwgPT4gIgorCQlDUkVBVEUg Uk9MRSB0YXA7CisJCUNSRUFURSBUQUJMRVNQQUNFIHRibDEgT1dORVIgdGFwIExPQ0FUSU9OICck dGFibGVzcGFjZTEnOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVSIHRhcCBMT0NBVElP TiAnJHRhYmxlc3BhY2UyJyBXSVRIIChzZXFfcGFnZV9jb3N0PTEuMCk7IiwKKwkJZHVtcF9jbWQg PT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJ CSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQlyZXN0 b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdk aXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVzcGFjZS5z cWwiLAorCQkJIiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVzcGFjZSIsCisJCV0sCisJCSMgTWF0Y2gg IkUiIGFzIG9wdGlvbmFsIHNpbmNlIGl0IGlzIGFkZGVkIG9uIExPQ0FUSU9OIHdoZW4gcnVubmlu ZyBvbgorCQkjIFdpbmRvd3MuCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBUQUJMRVNQ QUNFIHRibDIgT1dORVIgdGFwIExPQ0FUSU9OIFxFKD86RSk/XFEnJHRhYmxlc3BhY2UyJztcRQor CQkJXG5cUUFMVEVSIFRBQkxFU1BBQ0UgdGJsMiBTRVQgKHNlcV9wYWdlX2Nvc3Q9MS4wKTtcRQor CQkveG0sCisJfSwKKworCXJlc3RvcmVfZ3JhbnRzID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJ Q1JFQVRFIERBVEFCQVNFIHRhcGdyYW50c2RiOworCQlDUkVBVEUgU0NIRU1BIHByaXZhdGU7CisJ CUNSRUFURSBTRVFVRU5DRSBzZXJpYWwgU1RBUlQgMTAxOworCQlDUkVBVEUgRlVOQ1RJT04gZm4o KSBSRVRVUk5TIHZvaWQgQVMgXCRcJAorCQlCRUdJTgorCQlFTkQ7CisJCVwkXCQgTEFOR1VBR0Ug cGxwZ3NxbDsKKwkJQ1JFQVRFIFJPTEUgc3VwZXI7CisJCUNSRUFURSBST0xFIGdyYW50MTsKKwkJ Q1JFQVRFIFJPTEUgZ3JhbnQyOworCQlDUkVBVEUgUk9MRSBncmFudDM7CisJCUNSRUFURSBST0xF IGdyYW50NDsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ1OworCQlDUkVBVEUgUk9MRSBncmFudDY7CisJ CUNSRUFURSBST0xFIGdyYW50NzsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ4OworCisJCUNSRUFURSBU QUJMRSB0IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSksICgyKSwgKDMpLCAo NCk7CisKKwkJR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHQgVE8gZ3JhbnQxOworCQlHUkFOVCBJTlNF UlQgT04gVEFCTEUgdCBUTyBncmFudDI7CisJCUdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIFRBQkxF IHQgdG8gZ3JhbnQzOworCQlHUkFOVCBDT05ORUNULCBDUkVBVEUgT04gREFUQUJBU0UgdGFwZ3Jh bnRzZGIgVE8gZ3JhbnQ0OworCQlHUkFOVCBVU0FHRSwgQ1JFQVRFIE9OIFNDSEVNQSBwcml2YXRl IFRPIGdyYW50NTsKKwkJR1JBTlQgVVNBR0UsIFNFTEVDVCwgVVBEQVRFIE9OIFNFUVVFTkNFIHNl cmlhbCBUTyBncmFudDY7CisJCUdSQU5UIHN1cGVyIFRPIGdyYW50NzsKKwkJR1JBTlQgRVhFQ1VU RSBPTiBGVU5DVElPTiBmbigpIFRPIGdyYW50ODsKKwkJIiwKKwkJZHVtcF9jbWQgPT4gWworCQkJ J3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsK KwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJ CQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMuc3FsIiwKKwkJCSIkdGVtcGRp ci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUdSQU5UIHN1 cGVyIFRPIGdyYW50NyBXSVRIIElOSEVSSVQgVFJVRSBHUkFOVEVEIEJZXEUKKwkJCSguKlxuKSoK KwkJCVxuXFFHUkFOVCBBTEwgT04gU0NIRU1BIHByaXZhdGUgVE8gZ3JhbnQ1O1xFCisJCQkoLipc bikqCisJCQlcblxRR1JBTlQgQUxMIE9OIEZVTkNUSU9OIHB1YmxpYy5mbigpIFRPIGdyYW50ODtc RQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBTRVFVRU5DRSBwdWJsaWMuc2VyaWFs IFRPIGdyYW50NjtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIFNFTEVDVCBPTiBUQUJMRSBw dWJsaWMudCBUTyBncmFudDE7XEUKKwkJCVxuXFFHUkFOVCBJTlNFUlQgT04gVEFCTEUgcHVibGlj LnQgVE8gZ3JhbnQyO1xFCisJCQlcblxRR1JBTlQgQUxMIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdy YW50MztcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIENSRUFURSxDT05ORUNUIE9OIERBVEFC QVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDtcRQorCQkveG0sCisJfSwKKworCWV4Y2x1ZGluZ19k YXRhYmFzZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJ0NSRUFURSBEQVRBQkFTRSBkYjE7CisJCVxj IGRiMQorCQlDUkVBVEUgVEFCTEUgdDEgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQxIFZBTFVF UyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0MiAoaWQgaW50KTsKKwkJSU5T RVJUIElOVE8gdDIgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJB U0UgZGIyOworCQlcYyBkYjIKKwkJQ1JFQVRFIFRBQkxFIHQzIChpZCBpbnQpOworCQlJTlNFUlQg SU5UTyB0MyBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDQgKGlk IGludCk7CisJCUlOU0VSVCBJTlRPIHQ0IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJ Q1JFQVRFIERBVEFCQVNFIGRiZXgzOworCQlcYyBkYmV4MworCQlDUkVBVEUgVEFCTEUgdDUgKGlk IGludCk7CisJCUlOU0VSVCBJTlRPIHQ1IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNS RUFURSBUQUJMRSB0NiAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDYgVkFMVUVTICgxKSwgKDIp LCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGJleDQ7CisJCVxjIGRiZXg0CisJCUNS RUFURSBUQUJMRSB0NyAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDcgVkFMVUVTICgxKSwgKDIp LCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ4IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0 OCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYjU7CisJ CVxjIGRiNQorCQlDUkVBVEUgVEFCTEUgdDkgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ5IFZB TFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0MTAgKGlkIGludCk7CisJ CUlOU0VSVCBJTlRPIHQxMCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQknLAorCQlkdW1w X2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3Rvcnkn LAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRhYmFzZXMiLAorCQkJJy0t ZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiZXgqJywKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWwor CQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJ CSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzLnNxbCIsCisJCQknLS1l eGNsdWRlLWRhdGFiYXNlJyA9PiAnZGI1JywKKwkJCSIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJh c2VzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiMVxF CisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MSAoXEUKKwkJCSguKlxu KSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQyIChcRQorCQkJKC4qXG4pKgorCQkJXG5c UUNSRUFURSBEQVRBQkFTRSBkYjJcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBw dWJsaWMudDMgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NCAo L3htLAorCQl1bmxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjNcRQorCQkJ KC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDUgKFxFCisJCQkoLipcbikqCisJ CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVB VEUgREFUQUJBU0UgZGI0XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGlj LnQ3IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDggKFxFCisJ CQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiNVxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRB QkxFIHB1YmxpYy50OSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGlj LnQxMCAoXEUKKwkJL3htLAorCX0sCisKKwlmb3JtYXRfZGlyZWN0b3J5ID0+IHsKKwkJc2V0dXBf c3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcmVjdG9yeShhIGludCwgYiBib29sZWFuLCBj IHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyZWN0b3J5IFZBTFVFUyAoMSwgdHJ1ZSwg J25hbWUxJyksICgyLCBmYWxzZSwgJ25hbWUyJyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3Bn X2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5IiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWwor CQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJ CSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5LnNxbCIsCisJCQkiJHRlbXBk aXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1Ymxp Yy5mb3JtYXRfZGlyZWN0b3J5IChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlmb3Jt YXRfdGFyID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X3RhcihhIGlu dCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfdGFyIFZBTFVFUyAo MSwgZmFsc2UsICduYW1lMycpLCAoMiwgdHJ1ZSwgJ25hbWU0Jyk7IiwKKwkJZHVtcF9jbWQgPT4g WworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFyJywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJ J3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFyJywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyLnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X3RhciIs CisJCV0sCisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfdGFyIChhLCBiLCBj KSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRfY3VzdG9tID0+IHsKKwkJc2V0dXBfc3Fs ID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2N1c3RvbShhIGludCwgYiBib29sZWFuLCBjIHRleHQp OworCQlJTlNFUlQgSU5UTyBmb3JtYXRfY3VzdG9tIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lNScp LCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwn LAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9m b3JtYXRfY3VzdG9tIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUn LCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJCSctLWZpbGUnID0+ICIkdGVt cGRpci9mb3JtYXRfY3VzdG9tLnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJ CV0sCisJCWxpa2UgPT4gcXIvXiBcblxRQ09QWSBwdWJsaWMuZm9ybWF0X2N1c3RvbSAoYSwgYiwg YykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZHVtcF9nbG9iYWxzX29ubHkgPT4geworCQlzZXR1 cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGlyKGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4 dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9kaXIgVkFMVUVTICgxLCBmYWxzZSwgJ25hbWU1Jyks ICgyLCB0cnVlLCAnbmFtZTYnKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcs CisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZ2xvYmFscy1vbmx5JywKKwkJ CSctLWZpbGUnID0+ICIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIsCisJCV0sCisJCXJlc3Rv cmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywgJy0tZ2xvYmFscy1vbmx5JywKKwkJ CSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZHVt cF9nbG9iYWxzX29ubHkuc3FsIiwKKwkJCSIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIsCisJ CV0sCisJCWxpa2UgPT4gcXIvCisgICAgICAgICAgICBeXHMqXFFDUkVBVEUgUk9MRSBkdW1wYWxs O1xFXHMqXG4KKwkJCS94bQorCX0sKTsKKworIyBGaXJzdCBleGVjdXRlIHRoZSBzZXR1cF9zcWwK K2ZvcmVhY2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBhbGxfcnVucykKK3sKKwlpZiAoJHBn ZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBfc3FsfSkKKwl7CisJCSRub2RlLT5zYWZlX3BzcWwo JHJ1bl9kYiwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBfc3FsfSk7CisJfQorfQorCisj IEV4ZWN1dGUgdGhlIHRlc3RzCitmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wYWxs X3J1bnMpCit7CisJIyBDcmVhdGUgYSBuZXcgdGFyZ2V0IGNsdXN0ZXIgdG8gcGdfcmVzdG9yZSBl YWNoIHRlc3QgY2FzZSBydW4gc28gdGhhdCB3ZQorCSMgZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUg b2YgdGhlIGNsZWFudXAgZnJvbSB0aGUgdGFyZ2V0IGNsdXN0ZXIgYWZ0ZXIgZWFjaAorCSMgcnVu LgorCW15ICR0YXJnZXRfbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygidGFy Z2V0XyRydW4iKTsKKwkkdGFyZ2V0X25vZGUtPmluaXQ7CisJJHRhcmdldF9ub2RlLT5zdGFydDsK KworCSMgRHVtcGFsbCBmcm9tIG5vZGUgY2x1c3Rlci4KKwkkbm9kZS0+Y29tbWFuZF9vayhcQHsg JHBnZHVtcGFsbF9ydW5zeyRydW59LT57ZHVtcF9jbWR9IH0sCisJCSIkcnVuOiBwZ19kdW1wYWxs IHJ1bnMiKTsKKworCSMgUmVzdG9yZSB0aGUgZHVtcCBvbiAidGFyZ2V0X25vZGUiIGNsdXN0ZXIu CisJbXkgQHJlc3RvcmVfY21kID0gKAorCQlAeyAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntyZXN0 b3JlX2NtZH0gfSwKKwkJJy0taG9zdCcsICR0YXJnZXRfbm9kZS0+aG9zdCwgJy0tcG9ydCcsICR0 YXJnZXRfbm9kZS0+cG9ydCk7CisKKwlteSAoJHN0ZG91dCwgJHN0ZGVycikgPSBydW5fY29tbWFu ZChcQHJlc3RvcmVfY21kKTsKKworCSMgcGdfcmVzdG9yZSAtLWZpbGUgb3V0cHV0IGZpbGUuCisJ bXkgJG91dHB1dF9maWxlID0gc2x1cnBfZmlsZSgiJHRlbXBkaXIvJHtydW59LnNxbCIpOworCisJ aWYgKCAgICEoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0pCisJCSYmICEoJHBnZHVtcGFs bF9ydW5zeyRydW59LT57dW5saWtlfSkpCisJeworCQlkaWUgIm1pc3NpbmcgXCJsaWtlXCIgb3Ig XCJ1bmxpa2VcIiBpbiB0ZXN0IFwiJHJ1blwiIjsKKwl9CisKKwlpZiAoJHBnZHVtcGFsbF9ydW5z eyRydW59LT57bGlrZX0pCisJeworCQlsaWtlKCRvdXRwdXRfZmlsZSwgJHBnZHVtcGFsbF9ydW5z eyRydW59LT57bGlrZX0sICJzaG91bGQgZHVtcCAkcnVuIik7CisJfQorCisJaWYgKCRwZ2R1bXBh bGxfcnVuc3skcnVufS0+e3VubGlrZX0pCisJeworCQl1bmxpa2UoCisJCQkkb3V0cHV0X2ZpbGUs CisJCQkkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9LAorCQkJInNob3VsZCBub3QgZHVt cCAkcnVuIik7CisJfQorfQorCisjIFNvbWUgbmVnYXRpdmUgdGVzdCBjYXNlIHdpdGggZHVtcCBv ZiBwZ19kdW1wYWxsIGFuZCByZXN0b3JlIHVzaW5nIHBnX3Jlc3RvcmUKKyMgdGVzdCBjYXNlIDE6 IHdoZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFs bAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0 ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1m aWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3Jl OiBlcnJvcjogb3B0aW9uIC1DXC8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3Rv cmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAtQyBpcyBu b3QgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMgdGVz dCBjYXNlIDI6IFdoZW4gLS1saXN0IG9wdGlvbiBpcyB1c2VkIHdpdGggZHVtcCBvZiBwZ19kdW1w YWxsCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQki JHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScs CisJCSctLWxpc3QnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAor CV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1sXC8tLWxpc3QgY2Fubm90IGJl IHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8s CisJJ1doZW4gLS1saXN0IGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVt cGFsbCcpOworCisjIHRlc3QgY2FzZSAzOiBXaGVuIG5vbi1leGlzdCBkYXRhYmFzZSBpcyBnaXZl biB3aXRoIC1kIG9wdGlvbgorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19y ZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQn ID0+ICdjdXN0b20nLAorCQknLWQnID0+ICdkYnBxJywKKwldLAorCXFyL1xRRkFUQUw6ICBkYXRh YmFzZSAiZGJwcSIgZG9lcyBub3QgZXhpc3RcRS8sCisJJ1doZW4gbm9uLWV4aXN0ZW50IGRhdGFi YXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9uIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBn X2R1bXBhbGwnCispOworCiskbm9kZS0+c3RvcCgnZmFzdCcpOworCitkb25lX3Rlc3RpbmcoKTsK LS0gCjIuNDcuMwoK --00000000000065298506448f1d92--