Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tf0ob-00GwOO-En for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Feb 2025 18:04:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tf0oa-00Flge-8b for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Feb 2025 18:04:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tf0oZ-00FlgW-O7 for pgsql-hackers@lists.postgresql.org; Mon, 03 Feb 2025 18:04:55 +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 1tf0oV-0034qc-2t for pgsql-hackers@lists.postgresql.org; Mon, 03 Feb 2025 18:04:55 +0000 Received: by mail-qt1-x829.google.com with SMTP id d75a77b69052e-467b955e288so50848811cf.1 for ; Mon, 03 Feb 2025 10:04:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738605891; x=1739210691; 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=iLKG8ov2UjeZSPf9Z7Osii2o0YzlPqQkz2GQLhNI8Ws=; b=aaT1IKV5ukHpZ5Kd4oA16saujY+aMRB32L6FZykMGq7JkZhwC4znyUFrIdGgu5eXdk hhyJaO6Pawn2m9rs7B+3O0Howte2/ky3Zfu7SQZgCEyEwaNAzakjdRqKxc0rHtsrB6SW ts5jd4ZkTYf+5h4fvNolrZW52d/adGOQj3FpEGsm/gIS+9FDPulL0VCKhOZXojZ19xgK n8uKlZ+6yT3nFEpzuoTqa4N2HDddum2zYBQm++rJ6tnx5WGtSp53Y/mpWcmEkBC5qCEO LOWGi5MfUmNeEf/862he/+bgeksK9T9a7r6zI1rxYgh1kNTM9ivdiE83U/Dpwq5RDlk8 Iqlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738605891; x=1739210691; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=iLKG8ov2UjeZSPf9Z7Osii2o0YzlPqQkz2GQLhNI8Ws=; b=UWvZ9RA0uvMCxQitbs0u/7aAGgdHBt1MJq9G7TRwe/p8FzHaVy7NyMTYhwdm5dP65O YbEX/GRy8W4QEBGxN55q0B+M9FpiH+++el1K1i39isoQ7KAB1R7og5GQHTUHdXbHTba8 LSFi/LMDE7DaWoQUqjZQ83Y82XR1QDaDjJ4CJQo3qtSbefRJfktwqk0lwa8ywNQBrOmy K3qPDDVt+rwKzzNRQ9C+xp/PEhO4VCTIyg2DAXsbr1NulEmdFwm+8lxRDU6RusyZl/l4 BuOCCF/cAaJV7CFv/KjDwnWeV67U0pDdeuhaBeR4B+U3l1gF9cXlwTAOaEDabX9xWkAI FyNA== X-Forwarded-Encrypted: i=1; AJvYcCW7WuwEDwSpGzp3KC/Xhpqo1PfvRftFnC+RaeJF6mDp8v3Kpj+uIplYHdFVWaTzTr4V+hyTbETvHGPldgfD@lists.postgresql.org X-Gm-Message-State: AOJu0YzEpi5MWgrrA4BxQuN6ofpDYx05VxbTse2gh/AeNgpPwaUrbDt8 gFsQzVQph3eaOypXX2kpdJjDzipQdzEmQr3Wjx8wnnGJpNO8DGAZWh0aM2Vl5rhZhdEvMEgUP/H /4sSXQzHkZ5pCAqB+v7xEL/qmwNM= X-Gm-Gg: ASbGncsY7W6n/y+uyLouuKLwS5FvhwjNj28GwWdQXvpyFtvqY0ja08TlLoySIju6kse 9iJrtX8HAdUYcWs85AqZkRnqE6A4kPKaYA7Ly/OIuiLj6ys06R6jYlU5ZL7zMshvLE1S8iUgpdQ == X-Google-Smtp-Source: AGHT+IHMEFlYOF5CgbRMhrjrzFvuXbEds2WrnkALUOQ/iJaiTpUTnWN1VWiD3ru9U0SpE18g2G5tkqNtG6Vk4BUaxpc= X-Received: by 2002:a05:622a:1c16:b0:45f:788:b1ad with SMTP id d75a77b69052e-46fd0ace3f5mr381787291cf.27.1738605890817; Mon, 03 Feb 2025 10:04:50 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Mon, 3 Feb 2025 23:34:39 +0530 X-Gm-Features: AWEUYZkSJ2lONiXKP9sPT7T8mb-E5eQ2RJXKbXs-GvMVQauOT4OsBH9a60DOHtg Message-ID: Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000008713c5062d40ba57" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008713c5062d40ba57 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 3 Feb 2025 at 14:23, Srinath Reddy wrote: > > Hi, > I found a bug ,while using "./pg_restore pdd -f -" actually it has to cop= y everything(global sql commands + remaining dump ) into stdout as per the = "-f, --file=3DFILENAME output file name (- for stdout)" but it is copy= ing global sql commands to a file literally naming it as "-" and remaining = dump is written to stdout without those global sql commands."-" is not a ou= tput file it signifies stdout in terminal cmds.so we have to handle this ca= se. > because of above reason "./pg_restore pdd -g -f -" also does the same c= reates a file "-" and writes globals to that file instead of stdout. I also tested this but in my testing, I can see that all globals are printed into the console also. Patch was creating a "-" file that was wrong. Yes, we should consider "-" as a stdout. In the latest patch, I have fixed this issue. On Mon, 3 Feb 2025 at 14:44, jian he wrote: > > hi. > > git clean -fdx && $BIN10/pg_dumpall --format=3Ddirectory --file=3Ddir10 > $BIN10/pg_restore --format=3Ddirectory --file=3D1.sql --verbose dir10 > > dir_format 2>&1 > > there is no "\connect dbname" command. > pipe 1.sql to psql will execute all the database dump into a single > database, which is not good. > we need "\connect dbname" in file 1.sql We can't add this command directly to the dump file. We need to add some TOC entry for this command. I will try to make a TOC entry for this command. > > > --------<<<<<<<>>>>>>>>>>>>>>>------------------ > $BIN10/pg_dumpall --format=3Ddirectory --exclude-database=3Dsrc10 --file= =3Ddir12_temp > drop table t from database x > $BIN10/pg_restore --format=3Ddirectory --dbname=3Dx --verbose dir12_temp = > > dir_format 2>&1 > --------log info------------------ > pg_restore: found database "template1" (OID: 1) in map.dat file while res= toring. > pg_restore: found database "x" (OID: 19554) in map.dat file while restori= ng. > pg_restore: found total 2 database names in map.dat file > pg_restore: needs to restore 2 databases out of 2 databases > pg_restore: restoring dump of pg_dumpall without -C option, there > might be multiple databases in directory. > pg_restore: restoring database "template1" > pg_restore: connecting to database for restore > pg_restore: implied data-only restore > pg_restore: restoring database "x" > pg_restore: connecting to database for restore > pg_restore: processing data for table "public.t" > pg_restore: while PROCESSING TOC: > pg_restore: from TOC entry 3374; 0 19555 TABLE DATA t jian > pg_restore: error: could not execute query: ERROR: relation > "public.t" does not exist > Command was: COPY public.t (a) FROM stdin; > pg_restore: warning: errors ignored on restore: 1 > pg_restore: number of restored databases are 2 > ________________________ > $BIN10/pg_restore --format=3Ddirectory --list dir12_temp > selected output: > > ; Selected TOC Entries: > ; > 217; 1259 19555 TABLE public t jian > 3374; 0 19555 TABLE DATA public t jian > 3228; 2606 19560 CONSTRAINT public t t_pkey jian > > As you can see, dir12_temp has TABLE and TABLE DATA. > so the above log message: "pg_restore: implied data-only restore" is > not what we expected. I will do some tests with pg_dump and -t option. > > BTW, add --create option, it works as i expected. > like > $BIN10/pg_restore --format=3Ddirectory --create --dbname=3Dx --verbose > dir12_temp > dir_format 2>&1 > output is what i expected. > > --------<<<<<<<>>>>>>>>>>>>>>>------------------ > with the changes in filter_dbnames_for_restore. > so > will behave differently when you specify the --file option or not. > > * --file option specified > -exclude-database=3Dpattern not allow any special wildcard character. > it does not behave the same as the doc mentioned. > * --file option not specified, it behaves the same as the doc mentioned. > > That's kind of tricky, either more words in the doc explain the > scarenio where --file option is specified > or disallow --file option when --exclude-database is specified. We will do some more doc changes for this in next versions. > > we need to update pg_restore.sgml about MAX_ON_EXIT_NICELY 100? Temporary, we increased this size. Based on other opinions, we will do more changes for this. > > there is some corner like num_db_restore =3D=3D 0, num_db_restore >=3D 1= 00 > in that scarenio, the execute_global_sql_commands already executed, > which is not ideal, since you have pg_fatal and some sql commands > already executed. > maybe we can be if 0 < num_db_restore < 100 then > call execute_global_sql_commands and restoreAllDatabases. Got it. Fixed it as per delta patch and added some extra condition to the IF clause. Here, I am attaching an updated patch for review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --0000000000008713c5062d40ba57 Content-Type: application/octet-stream; name="v15_pg_dumpall-with-non-text_format-4th_feb.patch" Content-Disposition: attachment; filename="v15_pg_dumpall-with-non-text_format-4th_feb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6pcyw5g0 RnJvbSBjZmEyOTAyZmQ4MzVmOWFmZThjN2FlNTcxNjE1YjVkMjQ5MDBmYTNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogTW9uLCAzIEZlYiAyMDI1IDIzOjE4OjQ3ICswNTMwClN1YmplY3Q6IFtQQVRD SF0gcGdfZHVtcGFsbCB3aXRoIGRpcmVjdG9yeXx0YXJ8Y3VzdG9tIGZvcm1hdCBhbmQgcmVzdG9y ZSAgaXQgCiBieSBwZ19yZXN0b3JlCgpuZXcgb3B0aW9uIHRvIHBnX2R1bXBhbGw6Ci1GLCAtLWZv cm1hdD1kfHR8Y3xwICBvdXRwdXQgZmlsZSBmb3JtYXQgKCBwbGFpbiB0ZXh0IChkZWZhdWx0KSkK CkV4OjEgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtLWZpbGU9ZHVtcERpck5hbWUK RXg6MiAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDozIC4v cGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20gLS1maWxlPWR1bXBEaXJOYW1lCkV4OjQgLi9wZ19k dW1wYWxsIC0tZm9ybWF0PXBsYWluIC0tZmlsZT1kdW1wRGlyTmFtZQoKZHVtcHMgYXJlIGFzOgpn bG9iYWwuZGF0IDo6OiBnbG9iYWwgc3FsIGNvbW1hbmRzIGluIHNpbXBsZSBwbGFpbiBmb3JtYXQK bWFwLmRhdC4gICA6OjogZGJvaWQgZGJuYW1lIC0tLWVudHJpZXMgZm9yIGFsbCBkYXRhYmFzZXMg aW4gc2ltcGxlIHRleHQgZm9ybQpkYXRhYmFzZXMuIDo6OgogICAgICBzdWJkaXIgICAgIGRib2lk MSAgLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAgICBzdWJk aXIgICAgIGRib2lkMi4gLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1h dAogICAgICAgICAgICAgIGV0YwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTk9URToKaWYgbmVlZGVkLCBy ZXN0b3JlIHNpbmdsZSBkYiBieSBwYXJ0aWN1bGFyIHN1YmRpcgoKRXg6IC4vcGdfcmVzdG9yZSAt LWZvcm1hdD1kaXJlY3RvcnkgLWQgcG9zdGdyZXMgZHVtcERpck5hbWUvZGF0YWJhc2VzLzUKICAg LS0gaGVyZSwgNSBpcyB0aGUgZGJvaWQgb2YgcG9zdGdyZXMgZGIKICAgLS0gdG8gZ2V0IGRib2lk LCByZWZlciBkYm5hbWUgaW4gbWFwLmZpbGUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5ldyBvcHRpb25z IHRvIHBnX3Jlc3RvcmU6Ci1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5 IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXMKLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4g ICBleGNsdWRlIGRhdGFiYXNlIHdob3NlIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuCgpXaGVuIHdlIGdp dmUgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uLCB0aGVuIG9ubHkgcmVzdG9yZSBnbG9iYWxzLCBu byBkYiByZXN0b3JpbmcuCgpEZXNpZ246CldoZW4gLS1mb3JtYXQ9ZHx0fGMgaXMgc3BlY2lmaWVk IGFuZCB0aGVyZSBpcyBubyB0b2MuZGF0IGluIG1haW4gZGlyZWN0b3J5LCB0aGVuIGNoZWNrCmZv ciBnbG9iYWwuZGF0IHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gSWYgZ2xvYmFsLmRhdCBmaWxl IGlzIGV4aXN0IGluIGRpcmVjdG9yeSwKdGhlbiBmaXJzdCByZXN0b3JlIGFsbCBnbG9iYWxzIGZy b20gZ2xvYmFsLmRhdCBhbmQgdGhlbiByZXN0b3JlIGFsbCBkYXRhYmFzZXMgb25lIGJ5IG9uZQpm cm9tIG1hcC5kYXQgbGlzdCAoaWYgZXhpc3QpCgpUT0RPMTogV2UgbmVlZCB0byB0aGluayBmb3Ig LS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gZm9yIHBnX3Jlc3RvcmUuCmFzIG9mIG5vdywgU0VM RUNUIDEgV0hFUkUgWFhYIE9QRVJBVE9SKHBnX2NhdGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xM QVRFIHBnX2NhdGFsb2cuZGVmYXVsdAppZiBkYiBjb25uZWN0aW9uLAppZiBubyBkYiBjb25uZWN0 aW9uLCB0aGVuIFBBVFRFUk49TkFNRSBtYXRjaGluZyBvbmx5CgpUT0RPMjogV2UgbmVlZCB0byBt YWtlIGNoYW5nZXMgZm9yIGV4aXRfbmljZWx5IGFzIHdlIGFyZSBvbmUgZW50cnkgZm9yIGVhY2gg ZGF0YWJhc2Ugd2hpbGUKcmVzdG9yaW5nLiBNQVhfT05fRVhJVF9OSUNFTFkKClRPRE8zOiBzb21l IG1vcmUgdGVzdCBjYXNlcyBmb3IgbmV3IGFkZGVkIG9wdGlvbnMuCgpUT0RPNDogV2UgY2FuIGR1 bXAgYW5kIHJlc3RvcmUgZGF0YWJhc2VzIGluIHBhcmFsbGVsIG1vZGUuClRoaXMgbmVlZHMgbW9y ZSBzdHVkeQoKdGhyZWFkOgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2Zs YXQvQ0FLWXROQXA5dk90eWRYTDNfcG5HSiUyQlRldFp0TiUzREZZU25aU01DcVhjZVUzbWtIUHhQ ZyU0MG1haWwuZ21haWwuY29tIzA2NjQzM2NiNWFlMDA3Y2JlMzVmZWZkZGY3OTZkNTJmCi0tLQog ZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgICAgICB8ICA4MCArKy0KIGRvYy9z cmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICAgICAgfCAgMzEgKwogc3JjL2Jpbi9wZ19k dW1wL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2Jpbi9wZ19kdW1wL2Nv bW1vbl9kdW1wYWxsX3Jlc3RvcmUuYyB8IDI4NiArKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL2Nv bW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCB8ICAyNiArCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCAgICAg ICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyAg ICAgfCAgMjIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICAgICAgfCAg IDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYyAgICAgICAgfCAgIDMgKy0K IHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9i aW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgICAgICAgICAgfCA1NTIgKysrKysrKystLS0tLS0t LQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyAgICAgICAgICAgICB8IDc5MSArKysrKysr KysrKysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgICAg ICB8ICAgOSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgIHwgICAy ICsKIDE1IGZpbGVzIGNoYW5nZWQsIDE0OTQgaW5zZXJ0aW9ucygrKSwgMzI2IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0 b3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxf cmVzdG9yZS5oCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9iaW4vcGdfZHVtcC90 LzAwMV9iYXNpYy5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggMzlkOTNjMmMwZTMu LjZlMTk3NWY1ZmYwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYsNyArMTYsNyBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5w Z19kdW1wYWxsPC9yZWZuYW1lPgotICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBzY3JpcHQg ZmlsZTwvcmVmcHVycG9zZT4KKyAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9kdWN0bmFtZT5Q b3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBiYXNlZCBvbiBzcGVjaWZp ZWQgZHVtcCBmb3JtYXQgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIAogIDxyZWZzeW5v cHNpc2Rpdj4KQEAgLTEyMSw3ICsxMjEsODMgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAg ICAgICAgPHBhcmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4g IElmIHRoaXMgaXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2Vk LgotICAgICAgIDwvcGFyYT4KKyAgICAgICAgTm90ZTogVGhpcyBvcHRpb24gY2FuIGJlIG9taXR0 ZWQgb25seSB3aGVuIDxvcHRpb24+LS1mb3JtYXQ8L29wdGlvbj4gaXMgcGxhaW4KKyAgICAgICA8 L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8 dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8 dGVybT48b3B0aW9uPi0tZm9ybWF0PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3Jt YXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgU3BlY2lmeSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIElmIHdlIHdh bnQgdG8gZHVtcCBhbGwgdGhlIGRhdGFiYXNlcywKKyAgICAgICAgdGhlbiBwYXNzIHRoaXMgYXMg bm9uLXBsYWluIHNvIHRoYXQgZHVtcCBvZiBhbGwgZGF0YWJhc2VzIGNhbiBiZSB0YWtlbgorICAg ICAgICBpbiBzZXBhcmF0ZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2ZSBmb3JtYXQuCisgICAgICAg IGJ5IGRlZmF1bHQsIHRoaXMgaXMgcGxhaW4gZm9ybWF0LgorCisgICAgICAgIElmIG5vbi1wbGFp biBtb2RlIGlzIHBhc3NlZCwgdGhlbiBnbG9iYWwuZGF0IChnbG9iYWwgc3FsIGNvbW1hbmRzKSBh bmQKKyAgICAgICAgbWFwLmRhdChkYm9pZCBhbmQgZGJuYW1lcyBsaXN0IG9mIGFsbCB0aGUgZGF0 YWJhc2VzKSBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQuCisgICAgICAgIEFwYXJ0IGZyb20gdGhlc2Ug ZmlsZXMsIG9uZSBzdWJkaXJlY3Rvcnkgd2l0aCBkYXRhYmFzZXMgbmFtZSB3aWxsIGJlIGNyZWF0 ZWQuCisgICAgICAgIFVuZGVyIHRoaXMgZGF0YWJhc2VzIHN1YmRpcmVjdG9yeSwgdGhlcmUgd2ls bCBiZSBmaWxlcyB3aXRoIGRib2lkIG5hbWUgZm9yIGVhY2gKKyAgICAgICAgZGF0YWJhc2UgYW5k IGlmIDxvcHRpb24+LS1mb3JtYXQ8L29wdGlvbj4gaXMgZGlyZWN0b3J5LCB0aGVuIHRvYy5kYXQg YW5kIG90aGVyCisgICAgICAgIGR1bXAgZmlsZXMgd2lsbCBiZSB1bmRlciBkYm9pZCBzdWJkaXJl Y3RvcnkuCisKKyAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD5kaXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBkaXJlY3RvcnktZm9ybWF0 IGFyY2hpdmUgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVW5kZXIgZGJvaWQK KyAgICAgICAgICAgc3ViZGlyZWN0b3J5LCB0aGlzIHdpbGwgY3JlYXRlIGEgZGlyZWN0b3J5IHdp dGggb25lIGZpbGUgZm9yIGVhY2ggdGFibGUgYW5kIGxhcmdlCisgICAgICAgICAgIG9iamVjdCBi ZWluZyBkdW1wZWQsIHBsdXMgYSBzby1jYWxsZWQgVGFibGUgb2YgQ29udGVudHMgZmlsZSBkZXNj cmliaW5nIHRoZSBkdW1wZWQKKyAgICAgICAgICAgb2JqZWN0cyBpbiBhIG1hY2hpbmUtcmVhZGFi bGUgZm9ybWF0IHRoYXQgcGdfcmVzdG9yZSBjYW4gcmVhZC4gQSBkaXJlY3RvcnkgZm9ybWF0Cisg ICAgICAgICAgIGFyY2hpdmUgY2FuIGJlIG1hbmlwdWxhdGVkIHdpdGggc3RhbmRhcmQgVW5peCB0 b29sczsgZm9yIGV4YW1wbGUsIGZpbGVzIGluIGFuCisgICAgICAgICAgIHVuY29tcHJlc3NlZCBh cmNoaXZlIGNhbiBiZSBjb21wcmVzc2VkIHdpdGggdGhlIGd6aXAsIGx6NCwgb3IgenN0ZCB0b29s cy4gVGhpcworICAgICAgICAgICBmb3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0IHVzaW5n IGd6aXAgYW5kIGFsc28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCisgICAgICAgICAgPC9wYXJh PgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAg ICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90 ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAg ICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBw bGFpbi10ZXh0IFNRTCBzY3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFy YT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+Cisg ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBh IGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3Jl LiBUb2dldGhlciB3aXRoIHRoZQorICAgICAgICAgICBkaXJlY3Rvcnkgb3V0cHV0IGZvcm1hdCwg dGhpcyBpcyB0aGUgbW9zdCBmbGV4aWJsZSBvdXRwdXQgZm9ybWF0IGluIHRoYXQgaXQgYWxsb3dz IG1hbnVhbAorICAgICAgICAgICBzZWxlY3Rpb24gYW5kIHJlb3JkZXJpbmcgb2YgYXJjaGl2ZWQg aXRlbXMgZHVyaW5nIHJlc3RvcmUuIFRoaXMgZm9ybWF0IGlzIGFsc28KKyAgICAgICAgICAgY29t cHJlc3NlZCBieSBkZWZhdWx0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0 ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAg ICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUgc3Vp dGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIHRhciBmb3JtYXQgaXMKKyAgICAg ICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBkaXJlY3RvcnkgZm9ybWF0OiBleHRyYWN0aW5nIGEg dGFyLWZvcm1hdCBhcmNoaXZlIHByb2R1Y2VzIGEgdmFsaWQKKyAgICAgICAgICAgZGlyZWN0b3J5 LWZvcm1hdCBhcmNoaXZlLiBIb3dldmVyLCB0aGUgdGFyIGZvcm1hdCBkb2VzIG5vdCBzdXBwb3J0 IGNvbXByZXNzaW9uLiBBbHNvLAorICAgICAgICAgICB3aGVuIHVzaW5nIHRhciBmb3JtYXQgdGhl IHJlbGF0aXZlIG9yZGVyIG9mIHRhYmxlIGRhdGEgaXRlbXMgY2Fubm90IGJlIGNoYW5nZWQgZHVy aW5nIHJlc3RvcmUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAg IDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4IGI4YjI3ZTE3MTllLi4wNjA5YjdlYjUzNCAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L3JlZi9wZ19yZXN0b3JlLnNnbWwKQEAgLTIwLDYgKzIwLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVu dGF0aW9uCiAgIDxyZWZwdXJwb3NlPgogICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3Jl U1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgogICAgYXJjaGl2ZSBmaWxlIGNyZWF0 ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgb3IgcmVzdG9yZSBt dWx0aXBsZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZy b20gYW4KKyAgIGFyY2hpdmUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBn X2R1bXBhbGw8L2FwcGxpY2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2Pgog CkBAIC0xNjYsNiArMTY4LDI1IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9s aXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNl cyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlwbGUgcGF0dGVybnMgY2Fu IGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAgPG9wdGlvbj4tLWV4Y2x1 ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAgICAgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJhbWV0ZXIgaXMKKyAg ICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxl cyB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyA8bGl0 ZXJhbD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8eHJlZiBsaW5rZW5kPSJh cHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxlIGRhdGFiYXNlcyBjYW4g YWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAgICAgIGNoYXJhY3RlcnMg aW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUgY2FyZWZ1bCB0bworICAg ICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVudCBzaGVsbCB3aWxkY2Fy ZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+ LWU8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZXhpdC1vbi1lcnJvcjwv b3B0aW9uPjwvdGVybT4KQEAgLTMxNSw2ICszMzYsMTYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0 aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0 cyAocm9sZXMgYW5kIHRhYmxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAgICAgIDwvcGFyYT4K KyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0 ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1JIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9w dGlvbj4tLWluZGV4PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFj ZWFibGU+PC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL01ha2Vm aWxlIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IDIzM2FkMTVjYTc1Li5hNGU1NTdk NjJjNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9NYWtlZmlsZQpAQCAtNDcsMTEgKzQ3LDExIEBAIGFsbDogcGdfZHVtcCBwZ19yZXN0 b3JlIHBnX2R1bXBhbGwKIHBnX2R1bXA6IHBnX2R1bXAubyBjb21tb24ubyBwZ19kdW1wX3NvcnQu byAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBn ZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wLm8gY29tbW9uLm8gcGdfZHVtcF9zb3J0 Lm8gJChPQkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAot cGdfcmVzdG9yZTogcGdfcmVzdG9yZS5vICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2Ut bGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCi0JJChDQykgJChDRkxBR1MpIHBnX3Jlc3Rv cmUubyAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQor cGdfcmVzdG9yZTogcGdfcmVzdG9yZS5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUubyAkKE9CSlMp IHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwor CSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0b3JlLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQo T0JKUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKLXBnX2R1 bXBhbGw6IHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyAkKFdJTjMyUkVTKSB8IHN1 Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKLQkkKEND KSAkKENGTEFHUykgcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMp ICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQorcGdfZHVtcGFsbDog cGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUu byAkKFdJTjMyUkVTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1s aWJwZ2ZldXRpbHMKKwkkKENDKSAkKENGTEFHUykgcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZp bHRlci5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUubyAkKFdJTjMyUkVTKSAkKExERkxBR1MpICQo TERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAogaW5zdGFsbDogYWxsIGluc3RhbGxkaXJz CiAJJChJTlNUQUxMX1BST0dSQU0pIHBnX2R1bXAkKFgpICckKERFU1RESVIpJChiaW5kaXIpJy9w Z19kdW1wJChYKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jl c3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIxNjJjZjY5NDEyCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwpAQCAtMCww ICsxLDI4NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIFRoaXMg aXMgYSBjb21tb24gZmlsZSBmb3IgcGdfZHVtcGFsbCBhbmQgcGdfcmVzdG9yZS4KKyAqIHNyYy9i aW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgImNvbW1vbi9j b25uZWN0LmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJjb21tb24v c3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIgorI2luY2x1ZGUg ImR1bXB1dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgorCitzdGF0 aWMgY2hhciAqY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNo YXIgKip2YWx1ZXMpOworI2RlZmluZSBleGl0X25pY2VseShjb2RlKSBleGl0KGNvZGUpCisKKy8q CisgKiBjb25uZWN0RGF0YWJhc2UKKyAqCisgKiBNYWtlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB3 aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KKyAqIGludGVyYWN0aXZlIHBhc3N3b3JkIHBy b21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiByZXF1aXJlZC4KKyAqCisgKiBJZiBmYWls X29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVMTCB3aXRob3V0IHByaW50aW5nIGFueSBt ZXNzYWdlCisgKiBvbiBmYWlsdXJlLCBidXQgcHJlc2VydmUgYW55IHByb21wdGVkIHBhc3N3b3Jk IGZvciB0aGUgbmV4dCB0cnkuCisgKgorICogT24gc3VjY2VzcywgdGhlIGdsb2JhbCB2YXJpYWJs ZSAnY29ubnN0cicgaXMgc2V0IHRvIGEgY29ubmVjdGlvbiBzdHJpbmcKKyAqIGNvbnRhaW5pbmcg dGhlIG9wdGlvbnMgdXNlZC4KKyAqLworUEdjb25uICoKK2Nvbm5lY3REYXRhYmFzZShjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAorCQkJCWNvbnN0IGNo YXIgKnBnaG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCisJCQkJ dHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IsIGNvbnN0IGNoYXIg KnByb2duYW1lLAorCQkJCWNvbnN0IGNoYXIgKipjb25uc3RyLCBpbnQgKnNlcnZlcl92ZXJzaW9u KQoreworCVBHY29ubgkgICAqY29ubjsKKwlib29sCQluZXdfcGFzczsKKwljb25zdCBjaGFyICpy ZW1vdGV2ZXJzaW9uX3N0cjsKKwlpbnQJCQlteV92ZXJzaW9uOworCWNvbnN0IGNoYXIgKiprZXl3 b3JkcyA9IE5VTEw7CisJY29uc3QgY2hhciAqKnZhbHVlcyA9IE5VTEw7CisJUFFjb25uaW5mb09w dGlvbiAqY29ubl9vcHRzID0gTlVMTDsKKwlzdGF0aWMgY2hhciAqcGFzc3dvcmQgPSBOVUxMOwor CWludAkJCXNlcnZlcl92ZXJzaW9uX3RlbXA7CisKKwlpZiAocHJvbXB0X3Bhc3N3b3JkID09IFRS SV9ZRVMgJiYgIXBhc3N3b3JkKQorCQlwYXNzd29yZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3Jk OiAiLCBmYWxzZSk7CisKKwkvKgorCSAqIFN0YXJ0IHRoZSBjb25uZWN0aW9uLiAgTG9vcCB1bnRp bCB3ZSBoYXZlIGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5CisJICogYmFja2VuZC4KKwkgKi8K KwlkbworCXsKKwkJaW50CQkJYXJnY291bnQgPSA2OworCQlQUWNvbm5pbmZvT3B0aW9uICpjb25u X29wdDsKKwkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7CisJCWludAkJCWkgPSAwOworCisJCWZy ZWUoa2V5d29yZHMpOworCQlmcmVlKHZhbHVlcyk7CisJCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0 cyk7CisKKwkJLyoKKwkJICogTWVyZ2UgdGhlIGNvbm5lY3Rpb24gaW5mbyBpbnB1dHMgZ2l2ZW4g aW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZworCQkgKiBhbmQgb3RoZXIgb3B0aW9ucy4gIEV4 cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGluIHRoZQorCQkgKiBjb25uZWN0aW9u IHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFtcygpIHdvdWxkIGludGVycHJldAor CQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNvbm5lY3Rpb24gc3RyaW5nLgorCQkg Ki8KKwkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQorCQl7CisJCQljb25uX29wdHMgPSBQUWNvbm5p bmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJfbXNnKTsKKwkJCWlmIChjb25uX29wdHMg PT0gTlVMTCkKKwkJCQlwZ19mYXRhbCgiJXMiLCBlcnJfbXNnKTsKKworCQkJZm9yIChjb25uX29w dCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9vcHQrKykKKwkJ CXsKKwkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52YWxbMF0gIT0g J1wwJyAmJgorCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSAhPSAwKQor CQkJCQlhcmdjb3VudCsrOworCQkJfQorCisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2Nv dW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChh cmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKKworCQkJZm9yIChjb25uX29wdCA9IGNv bm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9vcHQrKykKKwkJCXsKKwkJ CQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52YWxbMF0gIT0gJ1wwJyAm JgorCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSAhPSAwKQorCQkJCXsK KwkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29yZDsKKwkJCQkJdmFsdWVzW2ldID0g Y29ubl9vcHQtPnZhbDsKKwkJCQkJaSsrOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsK KwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29y ZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZh bHVlcykpOworCQl9CisKKwkJaWYgKHBnaG9zdCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAiaG9z dCI7CisJCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7CisJCQlpKys7CisJCX0KKwkJaWYgKHBncG9ydCkK KwkJeworCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7CisJCQl2YWx1ZXNbaV0gPSBwZ3BvcnQ7CisJ CQlpKys7CisJCX0KKwkJaWYgKHBndXNlcikKKwkJeworCQkJa2V5d29yZHNbaV0gPSAidXNlciI7 CisJCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7CisJCQlpKys7CisJCX0KKwkJaWYgKHBhc3N3b3JkKQor CQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJwYXNzd29yZCI7CisJCQl2YWx1ZXNbaV0gPSBwYXNzd29y ZDsKKwkJCWkrKzsKKwkJfQorCQlpZiAoZGJuYW1lKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJk Ym5hbWUiOworCQkJdmFsdWVzW2ldID0gZGJuYW1lOworCQkJaSsrOworCQl9CisJCWtleXdvcmRz W2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOworCQl2YWx1ZXNbaV0gPSBwcm9nbmFt ZTsKKwkJaSsrOworCisJCW5ld19wYXNzID0gZmFsc2U7CisJCWNvbm4gPSBQUWNvbm5lY3RkYlBh cmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKKworCQlpZiAoIWNvbm4pCisJCQlwZ19mYXRh bCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKKworCQlp ZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQgJiYKKwkJCVBRY29ubmVjdGlvbk5l ZWRzUGFzc3dvcmQoY29ubikgJiYKKwkJCSFwYXNzd29yZCAmJgorCQkJcHJvbXB0X3Bhc3N3b3Jk ICE9IFRSSV9OTykKKwkJeworCQkJUFFmaW5pc2goY29ubik7CisJCQlwYXNzd29yZCA9IHNpbXBs ZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7CisJCQluZXdfcGFzcyA9IHRydWU7CisJCX0K Kwl9IHdoaWxlIChuZXdfcGFzcyk7CisKKwkvKiBjaGVjayB0byBzZWUgdGhhdCB0aGUgYmFja2Vu ZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLworCWlmIChQUXN0YXR1cyhjb25u KSA9PSBDT05ORUNUSU9OX0JBRCkKKwl7CisJCWlmIChmYWlsX29uX2Vycm9yKQorCQkJcGdfZmF0 YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQllbHNlCisJCXsKKwkJCVBRZmluaXNo KGNvbm4pOworCisJCQlmcmVlKGtleXdvcmRzKTsKKwkJCWZyZWUodmFsdWVzKTsKKwkJCVBRY29u bmluZm9GcmVlKGNvbm5fb3B0cyk7CisKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJLyoK KwkgKiBPaywgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gUmVtZW1iZXIgdGhlIG9wdGlvbnMgdXNl ZCwgaW4gdGhlIGZvcm0gb2YgYQorCSAqIGNvbm5lY3Rpb24gc3RyaW5nLgorCSAqLworCWlmIChj b25uc3RyKQorCQkqY29ubnN0ciA9IGNvbnN0cnVjdENvbm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7 CisKKwlmcmVlKGtleXdvcmRzKTsKKwlmcmVlKHZhbHVlcyk7CisJUFFjb25uaW5mb0ZyZWUoY29u bl9vcHRzKTsKKworCS8qIENoZWNrIHZlcnNpb24gKi8KKwlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBR cGFyYW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2ZXJfdmVyc2lvbiIpOworCWlmICghcmVtb3RldmVy c2lvbl9zdHIpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7CisJ c2VydmVyX3ZlcnNpb25fdGVtcCA9IFBRc2VydmVyVmVyc2lvbihjb25uKTsKKwlpZiAoc2VydmVy X3ZlcnNpb25fdGVtcCA9PSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHBhcnNlIHNlcnZlciB2 ZXJzaW9uIFwiJXNcIiIsCisJCQkJIHJlbW90ZXZlcnNpb25fc3RyKTsKKworCS8qIElmIG5lZWRl ZCwgdGhlbiBjb3B5IHNlcnZlciB2ZXJzaW9uIHRvIG91dGVyIGZ1bmN0aW9uLiAqLworCWlmIChz ZXJ2ZXJfdmVyc2lvbikKKwkJKnNlcnZlcl92ZXJzaW9uID0gc2VydmVyX3ZlcnNpb25fdGVtcDsK KworCW15X3ZlcnNpb24gPSBQR19WRVJTSU9OX05VTTsKKworCS8qCisJICogV2UgYWxsb3cgdGhl IHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9m CisJICogb3VyIG93biBtYWpvciB2ZXJzaW9uLiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4g cGdfZHVtcC5jLikKKwkgKi8KKwlpZiAobXlfdmVyc2lvbiAhPSBzZXJ2ZXJfdmVyc2lvbl90ZW1w CisJCSYmIChzZXJ2ZXJfdmVyc2lvbl90ZW1wIDwgOTAyMDAgfHwKKwkJCShzZXJ2ZXJfdmVyc2lv bl90ZW1wIC8gMTAwKSA+IChteV92ZXJzaW9uIC8gMTAwKSkpCisJeworCQlwZ19sb2dfZXJyb3Io ImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2VydmVyIHZlcnNpb24gbWlzbWF0Y2giKTsKKwkJcGdfbG9n X2Vycm9yX2RldGFpbCgic2VydmVyIHZlcnNpb246ICVzOyAlcyB2ZXJzaW9uOiAlcyIsCisJCQkJ CQkJcmVtb3RldmVyc2lvbl9zdHIsIHByb2duYW1lLCBQR19WRVJTSU9OKTsKKwkJZXhpdF9uaWNl bHkoMSk7CisJfQorCisJUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwgQUxXQVlTX1NFQ1VSRV9T RUFSQ0hfUEFUSF9TUUwpKTsKKworCXJldHVybiBjb25uOworfQorCisvKgorICogY29uc3RydWN0 Q29ublN0cgorICoKKyAqIENvbnN0cnVjdCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhlIGdp dmVuIGtleXdvcmQvdmFsdWUgcGFpcnMuIEl0IGlzCisgKiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5l Y3Rpb24gb3B0aW9ucyB0byB0aGUgcGdfZHVtcCBzdWJwcm9jZXNzLgorICoKKyAqIFRoZSBmb2xs b3dpbmcgcGFyYW1ldGVycyBhcmUgZXhjbHVkZWQ6CisgKglkYm5hbWUJCS0gdmFyaWVzIGluIGVh Y2ggcGdfZHVtcCBpbnZvY2F0aW9uCisgKglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0byBw YXNzIGEgcGFzc3dvcmQgb24gdGhlIGNvbW1hbmQgbGluZQorICoJZmFsbGJhY2tfYXBwbGljYXRp b25fbmFtZSAtIHdlJ2xsIGxldCBwZ19kdW1wIHNldCBpdAorICovCitzdGF0aWMgY2hhciAqCitj b25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVl cykKK3sKKwlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCWNoYXIJICAg KmNvbm5zdHI7CisJaW50CQkJaTsKKwlib29sCQlmaXJzdGtleXdvcmQgPSB0cnVlOworCisJLyog Q29uc3RydWN0IGEgbmV3IGNvbm5lY3Rpb24gc3RyaW5nIGluIGtleT0ndmFsdWUnIGZvcm1hdC4g Ki8KKwlmb3IgKGkgPSAwOyBrZXl3b3Jkc1tpXSAhPSBOVUxMOyBpKyspCisJeworCQlpZiAoc3Ry Y21wKGtleXdvcmRzW2ldLCAiZGJuYW1lIikgPT0gMCB8fAorCQkJc3RyY21wKGtleXdvcmRzW2ld LCAicGFzc3dvcmQiKSA9PSAwIHx8CisJCQlzdHJjbXAoa2V5d29yZHNbaV0sICJmYWxsYmFja19h cHBsaWNhdGlvbl9uYW1lIikgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3RrZXl3 b3JkKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyAnKTsKKwkJZmlyc3RrZXl3b3Jk ID0gZmFsc2U7CisJCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsK KwkJYXBwZW5kQ29ublN0clZhbChidWYsIHZhbHVlc1tpXSk7CisJfQorCisJY29ubnN0ciA9IHBn X3N0cmR1cChidWYtPmRhdGEpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOworCXJldHVybiBj b25uc3RyOworfQorCisvKgorICogZXhlY3V0ZVF1ZXJ5CisgKgorICogUnVuIGEgcXVlcnksIHJl dHVybiB0aGUgcmVzdWx0cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1cmUuCisgKi8KK1BHcmVzdWx0 ICoKK2V4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQoreworCVBH cmVzdWx0ICAgKnJlczsKKworCXBnX2xvZ19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVyeSk7CisK KwlyZXMgPSBQUWV4ZWMoY29ubiwgcXVlcnkpOworCWlmICghcmVzIHx8CisJCVBRcmVzdWx0U3Rh dHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJxdWVyeSBm YWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQlwZ19sb2dfZXJyb3JfZGV0YWls KCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOworCQlQUWZpbmlzaChjb25uKTsKKwkJZXhpdF9uaWNl bHkoMSk7CisJfQorCisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmggYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBh bGxfcmVzdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMGRj ZGJlMDgwNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFs bF9yZXN0b3JlLmgKQEAgLTAsMCArMSwyNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog Y29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oCisgKiAgICAgIENvbW1vbiBoZWFkZXIgZmlsZSBmb3Ig cGdfZHVtcGFsbCBhbmQgcGdfcmVzdG9yZQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICogICAgc3JjL2Jpbi9wZ19kdW1wL2NvbW1v bl9kdW1wYWxsX3Jlc3RvcmUuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IENPTU1PTl9EVU1QQUxMX1JFU1RPUkVfSAorI2RlZmluZSBDT01NT05fRFVNUEFMTF9SRVNUT1JF X0gKKworI2luY2x1ZGUgInBnX2JhY2t1cC5oIgorCisvKiBUT0RPOiBpbmNyZWFzaW5nIHRoaXMg dG8ga2VlcCAxMDAgZGIgcmVzdG9yaW5nIGJ5IHNpbmdsZSBwZ19yZXN0b3JlIGNvbW1hbmQuICov CisjZGVmaW5lIE1BWF9PTl9FWElUX05JQ0VMWQkJCQkxMDAKK2V4dGVybiBQR2Nvbm4gKmNvbm5l Y3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3Ry aW5nLCBjb25zdCBjaGFyICpwZ2hvc3QsCisJCQkJCQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBj b25zdCBjaGFyICpwZ3VzZXIsCisJCQkJCQkJICAgdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBi b29sIGZhaWxfb25fZXJyb3IsCisJCQkJCQkJICAgY29uc3QgY2hhciAqcHJvZ25hbWUsIGNvbnN0 IGNoYXIgKipjb25uc3RyLCBpbnQgKnNlcnZlcl92ZXJzaW9uKTsKK2V4dGVybiAgUEdyZXN1bHQg KmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKKyNlbmRpZiAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09NTU9OX0RVTVBBTExfUkVTVE9SRV9IICovCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAv bWVzb24uYnVpbGQKaW5kZXggNjAzYmE2Y2ZiZjAuLmRkZWNhYzVjZjA5IDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkCkBAIC00OSw2ICs0OSw3IEBAIGJpbl90YXJnZXRzICs9IHBnX2R1bXAKIAogcGdfZHVtcGFs bF9zb3VyY2VzID0gZmlsZXMoCiAgICdwZ19kdW1wYWxsLmMnLAorICAnY29tbW9uX2R1bXBhbGxf cmVzdG9yZS5jJywKICkKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCkBAIC02OCw2ICs2 OSw3IEBAIGJpbl90YXJnZXRzICs9IHBnX2R1bXBhbGwKIAogcGdfcmVzdG9yZV9zb3VyY2VzID0g ZmlsZXMoCiAgICdwZ19yZXN0b3JlLmMnLAorICAnY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jJywK ICkKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKaW5kZXggZjBm MTliYjBiMjkuLjY1MDAwZTVhMDgzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCkBAIC0zMDYsNyArMzA2LDcg QEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlvbnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25z ICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAogZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVS ZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpOwogCi1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2 ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhY LCBib29sIGFwcGVuZF9kYXRhKTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZlICovCiBl eHRlcm4gQXJjaGl2ZSAqT3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFy Y2hpdmVGb3JtYXQgZm10KTsKQEAgLTMxOSw3ICszMTksNyBAQCBleHRlcm4gQXJjaGl2ZSAqQ3Jl YXRlQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQs CiAJCQkJCQkJICBEYXRhRGlyU3luY01ldGhvZCBzeW5jX21ldGhvZCk7CiAKIC8qIFRoZSAtLWxp c3Qgb3B0aW9uICovCi1leHRlcm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKTsK K2V4dGVybiB2b2lkIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2Rh dGEpOwogCiBleHRlcm4gUmVzdG9yZU9wdGlvbnMgKk5ld1Jlc3RvcmVPcHRpb25zKHZvaWQpOwog CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggNzA3YTNmYzg0NGMuLmU5MWY0 YjgzNmY2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC04Miw3ICs4Miw3 IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMg dm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGlt ZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwog c3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxl bmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpOworCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjLCBib29sIGFwcGVuZF9kYXRhKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVP dXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNo aXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAKQEAgLTMz MSw5ICszMzEsMTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgp CiAJCVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8qIFB1YmxpYyAqLworLyoKKyAqIFJl c3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5kX2RhdGEgaXMgc2V0LCB0aGVuIGFwcGVuZCBk YXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5nIGR1bXAKKyAqIG9mIG11bHRpcGxlIGRh dGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVtcGFsbC4KKyAqLwogdm9pZAotUmVzdG9y ZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29s IGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikg QUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwpAQCAtNDUwLDcg KzQ1NSw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkgKi8KIAlzYXYgPSBTYXZl T3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJU2V0T3V0cHV0KEFILCByb3B0 LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9w dC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFo cHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIik7CiAK QEAgLTEyNjMsNyArMTI2OCw3IEBAIEFyY2hpdmVFbnRyeShBcmNoaXZlICpBSFgsIENhdGFsb2dJ ZCBjYXRhbG9nSWQsIER1bXBJZCBkdW1wSWQsCiAKIC8qIFB1YmxpYyAqLwogdm9pZAotUHJpbnRU T0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKK1ByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgsIGJv b2wgYXBwZW5kX2RhdGEpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAq KSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CkBAIC0xMjc5 LDcgKzEyODQsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCiAJc2F2ID0gU2F2 ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQt PmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlpZiAoc3Ry ZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1QX1NUUkZUSU1FX0ZNVCwK IAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDApCkBAIC0xNjU4LDcgKzE2NjMs OCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKQogCiBzdGF0 aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFt ZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp CisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAor CQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY29u c3QgY2hhciAqbW9kZTsKQEAgLTE2NzgsNyArMTY4NCw3IEBAIFNldE91dHB1dChBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRv dXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCWlmIChhcHBlbmRfZGF0 YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKIAkJbW9kZSA9IFBHX0JJTkFSWV9BOwog CWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXgg YjViYTNiNDZkZDkuLmQ5NGQwZGUyYTVkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAgLTgy Niw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlzYXZWZXJi b3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAwOwogCi0J CVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoKEFyY2hp dmUgKikgQUgsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJjaGl2ZSAqKSBBSCwg c2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfdXRpbHMuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYwppbmRleCA3OWFl YzVmNTE1OC4uNDc1ODljY2E5MGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfdXRpbHMuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMKQEAgLTEz LDYgKzEzLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlICJj b21tb25fZHVtcGFsbF9yZXN0b3JlLmgiCiAjaWZkZWYgV0lOMzIKICNpbmNsdWRlICJwYXJhbGxl bC5oIgogI2VuZGlmCkBAIC0yMSw4ICsyMiw2IEBACiAvKiBHbG9iYWxzIGV4cG9ydGVkIGJ5IHRo aXMgZmlsZSAqLwogY29uc3QgY2hhciAqcHJvZ25hbWUgPSBOVUxMOwogCi0jZGVmaW5lIE1BWF9P Tl9FWElUX05JQ0VMWQkJCQkyMAotCiBzdGF0aWMgc3RydWN0CiB7CiAJb25fZXhpdF9uaWNlbHlf Y2FsbGJhY2sgZnVuY3Rpb247CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAwMmUxZmRmOGY3OC4uNjEwNjdlMTU0 MmUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJICogcmlnaHQgbm93LgogCSAqLwogCWlmIChwbGFpblRleHQpCi0JCVJlc3Rv cmVBcmNoaXZlKGZvdXQpOworCQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBmYWxzZSk7CiAKIAlDbG9z ZUFyY2hpdmUoZm91dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxs LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCmluZGV4IDM5NmY3OTc4MWM1Li44MDM0 MWRiMzI0ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRl ICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx0aW1l Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKQEAgLTI0LDE0ICsyNSwxNyBAQAogI2luY2x1ZGUg ImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKICNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgog I2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21tb25fZHVtcGFsbF9yZXN0 b3JlLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5n X3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIK ICNpbmNsdWRlICJwZ19iYWNrdXAuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIK IAogLyogdmVyc2lvbiBzdHJpbmcgd2UgZXhwZWN0IGJhY2sgZnJvbSBwZ19kdW1wICovCiAjZGVm aW5lIFBHRFVNUF9WRVJTSU9OU1RSICJwZ19kdW1wIChQb3N0Z3JlU1FMKSAiIFBHX1ZFUlNJT04g IlxuIgorI2RlZmluZSBleGl0X25pY2VseShjb2RlKSBleGl0KGNvZGUpCiAKIHR5cGVkZWYgc3Ry dWN0CiB7CkBAIC02NCwyOCArNjgsMjUgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBH Y29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsK IHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2Vy Q29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3RhdGljIHZvaWQg ZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQ R2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQg ZHVtcFRpbWVzdGFtcChjb25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAlydW5QZ0R1bXAoY29u c3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7CitzdGF0aWMgaW50IHJ1 blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLAorCQkJ CQkgY2hhciAqZGJmaWxlLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2 b2lkIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJCQkJCSBjb25zdCBjaGFyICpj YXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29uc3QgY2hhciAqb2JqdHlwZSwg Y29uc3QgY2hhciAqb2JqbmFtZSwKIAkJCQkJCQkgUFFFeHBCdWZmZXIgYnVmZmVyKTsKLXN0YXRp YyBQR2Nvbm4gKmNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUsCi0JCQkJCQkJICAg Y29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsIGNvbnN0IGNoYXIgKnBnaG9zdCwKLQkJCQkJ CQkgICBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKLQkJCQkJCQkgICB0 cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcik7Ci1zdGF0aWMgY2hh ciAqY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNoYXIgKip2 YWx1ZXMpOwotc3RhdGljIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25z dCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMo UEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2lt cGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMo Y29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGlj IHZvaWQgY3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpOworc3RhdGljIEFy Y2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CiAKIHN0YXRp YyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25h bWU7CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0czsKLXN0YXRpYyBjaGFyICpjb25uc3Ry ID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAqY29ubnN0ciA9ICIiOwogc3RhdGljIGJvb2wgb3V0 cHV0X2NsZWFuID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBza2lwX2FjbHMgPSBmYWxzZTsKIHN0YXRp YyBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTEwNyw3ICsxMDgsNyBAQCBzdGF0aWMgaW50CW5v X3N1YnNjcmlwdGlvbnMgPSAwOwogc3RhdGljIGludAlub190b2FzdF9jb21wcmVzc2lvbiA9IDA7 CiBzdGF0aWMgaW50CW5vX3VubG9nZ2VkX3RhYmxlX2RhdGEgPSAwOwogc3RhdGljIGludAlub19y b2xlX3Bhc3N3b3JkcyA9IDA7Ci1zdGF0aWMgaW50CXNlcnZlcl92ZXJzaW9uOworc3RhdGljIGlu dCBzZXJ2ZXJfdmVyc2lvbjsKIHN0YXRpYyBpbnQJbG9hZF92aWFfcGFydGl0aW9uX3Jvb3QgPSAw Owogc3RhdGljIGludAlvbl9jb25mbGljdF9kb19ub3RoaW5nID0gMDsKIApAQCAtMTIxLDggKzEy Miw2IEBAIHN0YXRpYyBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CiBzdGF0aWMgU2ltcGxlU3RyaW5n TGlzdCBkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNp bXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAot I2RlZmluZSBleGl0X25pY2VseShjb2RlKSBleGl0KGNvZGUpCi0KIGludAogbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogewpAQCAtMTQ3LDYgKzE0Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAkJeyJwYXNzd29yZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7 Im5vLXByaXZpbGVnZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBu b19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKKwkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgJ0YnfSwKIAogCQkvKgogCQkgKiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2 ZSBhbiBlcXVpdmFsZW50IHNob3J0IG9wdGlvbiBsZXR0ZXIKQEAgLTE4OCw2ICsxODgsOCBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hh cgkgICAqdXNlX3JvbGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5VTEw7 CisJQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWNvbnN0IGNoYXIg KmZvcm1hdE5hbWUgPSAicCI7CiAJdHJpdmFsdWUJcHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFV TFQ7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFs c2U7CkBAIC0yMzcsNyArMjM5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJ cGdkdW1wb3B0cyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRf bG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRp b25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBh cmd2LCAiYWNkOkU6ZjpGOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRp bmRleCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQogCQl7CkBAIC0yNjUsNyArMjY3LDkgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBn ZHVtcG9wdHMsICIgLWYgIik7CiAJCQkJYXBwZW5kU2hlbGxTdHJpbmcocGdkdW1wb3B0cywgZmls ZW5hbWUpOwogCQkJCWJyZWFrOwotCisJCQljYXNlICdGJzoKKwkJCQlmb3JtYXROYW1lID0gcGdf c3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29u bHkgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtNDE0LDYgKzQxOCwyMSBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmljZWx5KDEpOwogCX0KIAorCS8qIEdldCBmb3JtYXQg Zm9yIGR1bXAuICovCisJYXJjaER1bXBGb3JtYXQgPSBwYXJzZUR1bXBGb3JtYXQoZm9ybWF0TmFt ZSk7CisKKwkvKgorCSAqIElmIG5vbi1wbGFpbiBmb3JtYXQgaXMgc3BlY2lmaWVkIHRoZW4gd2Ug bXVzdCBwcm92aWRlIHRoZQorCSAqIGZpbGUgbmFtZSB0byBjcmVhdGUgb25lIG1haW4gZGlyZWN0 b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCAmJgorCQkJKCFmaWxl bmFtZSB8fCBzdHJjbXAoZmlsZW5hbWUsICIiKSA9PSAwKSkKKwl7CisJCXBnX2xvZ19lcnJvcigi b3B0aW9ucyAtRi8tLWZvcm1hdD1kfGN8dCByZXF1aXJlcyBvcHRpb24gLWYvLS1maWxlIHdpdGgg bm9uLWVtcHR5IHN0cmluZyIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxw XCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsK Kwl9CisKIAkvKgogCSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVkIGluIHRo ZSBkdW1wLCBzd2l0Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xlcyB3aGljaCBpcyBlcXVhbGx5IHVz ZWZ1bCwganVzdCBtb3JlIGxpa2VseSB0byBoYXZlIHVucmVzdHJpY3RlZApAQCAtNDYwLDYgKzQ3 OSwzMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKG9uX2NvbmZsaWN0X2Rv X25vdGhpbmcpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLS1vbi1jb25m bGljdC1kby1ub3RoaW5nIik7CiAKKwkvKgorCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJl cXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dC4gIElmIHJlcXVpcmVkLAorCSAqIHRoZW4gY3Jl YXRlIG5ldyBkaXJlY3RvcnkgYW5kIGdsb2JhbC5kYXQgZmlsZS4KKwkgKi8KKwlpZiAoYXJjaER1 bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCXRvY19wYXRoW01BWFBHUEFUSF07CisK KwkJLyogQ3JlYXRlIG5ldyBkaXJlY3Rvcnkgb3IgYWNjZXB0IHRoZSBlbXB0eSBleGlzdGluZyBk aXJlY3RvcnkuICovCisJCWNyZWF0ZV9vcl9vcGVuX2RpcihmaWxlbmFtZSk7CisKKwkJc25wcmlu dGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2JhbC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJ T1BGID0gZm9wZW4odG9jX3BhdGgsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5v KSk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQorCXsKKwkJT1BGID0gZm9wZW4oZmlsZW5hbWUs IFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4g b3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCSBmaWxlbmFtZSk7CisJfQorCWVsc2UKKwkJ T1BGID0gc3Rkb3V0OworCiAJLyoKIAkgKiBJZiB0aGVyZSB3YXMgYSBkYXRhYmFzZSBzcGVjaWZp ZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgdXNlIHRoYXQsCiAJICogb3RoZXJ3aXNlIHRyeSB0byBj b25uZWN0IHRvIGRhdGFiYXNlICJwb3N0Z3JlcyIsIGFuZCBmYWlsaW5nIHRoYXQKQEAgLTQ2OCw3 ICs1MTQsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHBnZGIpCiAJewog CQljb25uID0gY29ubmVjdERhdGFiYXNlKHBnZGIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBw Z3VzZXIsCi0JCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSk7CisJCQkJCQkJICAgcHJv bXB0X3Bhc3N3b3JkLCBmYWxzZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2 ZXJfdmVyc2lvbik7CiAKIAkJaWYgKCFjb25uKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25u ZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIHBnZGIpOwpAQCAtNDc2LDEwICs1MjMsMTIgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWVsc2UKIAl7CiAJCWNvbm4gPSBjb25uZWN0RGF0 YWJhc2UoInBvc3RncmVzIiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJ CQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlKTsKKwkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQs IGZhbHNlLAorCQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0ciwgJnNlcnZlcl92ZXJzaW9uKTsK IAkJaWYgKCFjb25uKQogCQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgidGVtcGxhdGUxIiwgY29u bnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3Jk LCB0cnVlKTsKKwkJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCB0cnVlLAorCQkJCQkJCQkgICBw cm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbik7CiAKIAkJaWYgKCFjb25uKQogCQl7 CkBAIC00OTYsMTkgKzU0NSw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlleHBh bmRfZGJuYW1lX3BhdHRlcm5zKGNvbm4sICZkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zLAogCQkJ CQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCi0JLyoKLQkgKiBPcGVuIHRoZSBvdXRw dXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKLQkgKi8KLQlpZiAoZmls ZW5hbWUpCi0JewotCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwotCQlpZiAo IU9QRikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVt IiwKLQkJCQkJIGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYgPSBzdGRvdXQ7Ci0KIAkvKgog CSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nIGlmIHJlcXVlc3RlZC4KIAkgKi8KQEAgLTYwNyw3 ICs2NDMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJfQogCiAJaWYgKCFnbG9i YWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCi0JCWR1bXBEYXRh YmFzZXMoY29ubik7CisJCWR1bXBEYXRhYmFzZXMoY29ubiwgYXJjaER1bXBGb3JtYXQpOwogCiAJ UFFmaW5pc2goY29ubik7CiAKQEAgLTYyMCw3ICs2NTYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCWZjbG9zZShPUEYpOwogCiAJCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBmaWxl LCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAqLwotCQlpZiAoZG9zeW5jKQorCQlpZiAoZG9zeW5jICYm IChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJCQkodm9pZCkgZnN5bmNfZm5hbWUoZmls ZW5hbWUsIGZhbHNlKTsKIAl9CiAKQEAgLTYzMSwxMiArNjY3LDE0IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIHN0YXRpYyB2b2lkCiBoZWxwKHZvaWQpCiB7Ci0JcHJpbnRmKF8oIiVz IGV4dHJhY3RzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGludG8gYW4gU1FMIHNjcmlw dCBmaWxlLlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyBleHRyYWN0cyBhIFBvc3Rn cmVTUUwgZGF0YWJhc2UgY2x1c3RlciBiYXNlZCBvbiBzcGVjaWZpZWQgZHVtcCBmb3JtYXQuXG5c biIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVz IFtPUFRJT05dLi4uXG4iKSwgcHJvZ25hbWUpOwogCiAJcHJpbnRmKF8oIlxuR2VuZXJhbCBvcHRp b25zOlxuIikpOwogCXByaW50ZihfKCIgIC1mLCAtLWZpbGU9RklMRU5BTUUgICAgICAgICAgb3V0 cHV0IGZpbGUgbmFtZVxuIikpOworCXByaW50ZihfKCIgIC1GLCAtLWZvcm1hdD1jfGR8dHxwICAg ICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0IChjdXN0b20sIGRpcmVjdG9yeSwgdGFyLFxuIgorCQkJ ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW4gdGV4dCAoZGVmYXVsdCkpXG4i KSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgICB2ZXJib3NlIG1v ZGVcbiIpKTsKIAlwcmludGYoXygiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgIG91dHB1 dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKIAlwcmludGYoXygiICAtLWxv Y2std2FpdC10aW1lb3V0PVRJTUVPVVQgIGZhaWwgYWZ0ZXIgd2FpdGluZyBUSU1FT1VUIGZvciBh IHRhYmxlIGxvY2tcbiIpKTsKQEAgLTE0ODcsMTAgKzE1MjUsMTMgQEAgZXhwYW5kX2RibmFtZV9w YXR0ZXJucyhQR2Nvbm4gKmNvbm4sCiAgKiBEdW1wIGNvbnRlbnRzIG9mIGRhdGFiYXNlcy4KICAq Lwogc3RhdGljIHZvaWQKLWR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQorZHVtcERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJUEdyZXN1 bHQgICAqcmVzOwogCWludAkJCWk7CisJY2hhcgkJZGJfc3ViZGlyW01BWFBHUEFUSF07CisJY2hh cgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOworCUZJTEUgICAgICAgKm1hcF9maWxlID0gTlVMTDsK IAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNl IHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE1MDQsNyArMTU0NSw3IEBAIGR1bXBEYXRh YmFzZXMoUEdjb25uICpjb25uKQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21lIGZhaWx1cmUgbW9kZSB3 aXRoIC0tY2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAgICJT RUxFQ1QgZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwgb2lkICIKIAkJCQkJICAg IkZST00gcGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRh dGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAndGVtcGxh dGUxJyksIGRhdG5hbWUiKTsKQEAgLTE1MTIsOSArMTU1MywzMyBAQCBkdW1wRGF0YWJhc2VzKFBH Y29ubiAqY29ubikKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBEYXRhYmFzZXNcbi0tXG5cbiIpOwogCisJLyoKKwkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1 c3RvbSBmb3JtYXQgaXMgc3BlY2lmaWVkIHRoZW4gY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJICog dW5kZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFuZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBzdWJk aXJlY3Rvcnkgd2lsbAorCSAqIGJlIGNyZWF0ZWQgdW5kZXIgdGhlIHN1YmRpcmVjdG9yeSBpbiBh cmNoaXZlIG1vZGUgYXMgcGVyIHNpbmdsZSBkYiBwZ19kdW1wLgorCSAqLworCWlmIChhcmNoRHVt cEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhd OworCisJCXNucHJpbnRmKGRiX3N1YmRpciwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzIiwgZmls ZW5hbWUpOworCisJCS8qIENyZWF0ZSBhIHN1YmRpcmVjdG9yeSB3aXRoICdkYXRhYmFzZXMnIG5h bWUgdW5kZXIgbWFpbiBkaXJlY3RvcnkuICovCisJCWlmIChta2RpcihkYl9zdWJkaXIsIDA3NTUp ICE9IDApCisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgc3ViZGlyZWN0b3J5IFwi JXNcIjogJW0iLCBkYl9zdWJkaXIpOworCisJCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBH UEFUSCwgIiVzL21hcC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgbWFwIGZpbGUg KHRvIHN0b3JlIGRib2lkIGFuZCBkYm5hbWUpICovCisJCW1hcF9maWxlID0gZm9wZW4obWFwX2Zp bGVfcGF0aCwgUEdfQklOQVJZX1cpOworCQlpZiAoIW1hcF9maWxlKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIG1hcCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCiAJZm9y IChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUg PSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CisJCWNoYXIJICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVz LCBpLCAxKTsKIAkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CiAJCWludAkJCXJldDsKIApAQCAt MTUyOSw2ICsxNTk0LDE4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJY29udGlu dWU7CiAJCX0KIAorCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vbi1wbGFpbiBkdW1wIGZvcm1hdCwg dGhlbiBhcHBlbmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUgbWFwLmRhdCBmaWxlLgor CQkgKi8KKwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlzbnByaW50 ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJfc3ViZGlyLCBvaWQp OworCisJCQkvKiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBkYm5hbWUgaW4gbWFw IGZpbGUuICovCisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgcGdfc3RyZHVw KGRibmFtZSkpOworCQl9CisKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wi IiwgZGJuYW1lKTsKIAogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVt cFxuLS1cblxuIiwgZGJuYW1lKTsKQEAgLTE1NDcsOSArMTYyNCwxNyBAQCBkdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubikKIAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKIAkJ CWVsc2UKIAkJCXsKLQkJCQljcmVhdGVfb3B0cyA9ICIiOwogCQkJCS8qIFNpbmNlIHBnX2R1bXAg d29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KLQkJCQlmcHJpbnRmKE9Q RiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwkJCQl7CisJCQkJCWNyZWF0ZV9vcHRzID0gIiI7CisJCQkJCWZwcmludGYo T1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7 CisJCQkJCS8qIER1bXBpbmcgYWxsIGRhdGFiYXNlcyBzbyBhZGQgLS1jcmVhdGUgb3B0aW9uLiAq LworCQkJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CisJCQkJfQogCQkJfQogCQl9CiAJCWVs c2UKQEAgLTE1NTgsMTkgKzE2NDMsMzAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJ CWlmIChmaWxlbmFtZSkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5h bWUsIGNyZWF0ZV9vcHRzKTsKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMs IGRiZmlsZXBhdGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0 YWwoInBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7 CiAKIAkJaWYgKGZpbGVuYW1lKQogCQl7Ci0JCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklO QVJZX0EpOworCQkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOworCisJCQlpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwpCisJCQkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVz L2dsb2JhbC5kYXQiLCBmaWxlbmFtZSk7CisJCQllbHNlCisJCQkJc25wcmludGYodG9jX3BhdGgs IE1BWFBHUEFUSCwgIiVzIiwgZmlsZW5hbWUpOworCisJCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwg UEdfQklOQVJZX0EpOwogCQkJaWYgKCFPUEYpCiAJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZS1v cGVuIHRoZSBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCSBmaWxlbmFtZSk7CisJCQkJ CQkgdG9jX3BhdGgpOwogCQl9CiAJfQogCisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJj aER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFy KHJlcyk7CiB9CiAKQEAgLTE1ODAsNyArMTY3Niw4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpj b25uKQogICogUnVuIHBnX2R1bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgog ICovCiBzdGF0aWMgaW50Ci1ydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFy ICpjcmVhdGVfb3B0cykKK3J1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIg KmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUsCisJCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3Jt YXQpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRhIGNt ZDsKQEAgLTE1ODksMTcgKzE2ODYsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwg Y29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsK IAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIl c1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRl X29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1 bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMgaXMg bm9uLXBsYWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkg KiBmb3JtYXQgdG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAq LwotCWlmIChmaWxlbmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7 CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZm ZXIoJmNtZCwgIlwiJXNcIiAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUs IGNyZWF0ZV9vcHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkK KwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsK KwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0t Zm9ybWF0PXRhciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAi IC1GcCAiKTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBw Z19kdW1wX2JpbiwKKwkJCQkJCXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKKworCQkv KgorCQkqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4t YXBwZW5kIHBnX2R1bXAKKwkJKiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0 YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24K QEAgLTE2NDksMjU2ICsxNzY1LDYgQEAgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCWRlc3Ryb3lQUUV4cEJ1ZmZl cihzcWwpOwogfQogCi0vKgotICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2l0aCB0aGUg Z2l2ZW4gcGFyYW1ldGVycy4gIEFuCi0gKiBpbnRlcmFjdGl2ZSBwYXNzd29yZCBwcm9tcHQgaXMg YXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCi0gKgotICogSWYgZmFpbF9vbl9lcnJv ciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBwcmludGluZyBhbnkgbWVzc2FnZQot ICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9tcHRlZCBwYXNzd29yZCBmb3IgdGhl IG5leHQgdHJ5LgotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBnbG9iYWwgdmFyaWFibGUgJ2Nvbm5z dHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3RyaW5nCi0gKiBjb250YWluaW5nIHRoZSBvcHRp b25zIHVzZWQuCi0gKi8KLXN0YXRpYyBQR2Nvbm4gKgotY29ubmVjdERhdGFiYXNlKGNvbnN0IGNo YXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCi0JCQkJY29uc3QgY2hh ciAqcGdob3N0LCBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKLQkJCQl0 cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcikKLXsKLQlQR2Nvbm4J ICAgKmNvbm47Ci0JYm9vbAkJbmV3X3Bhc3M7Ci0JY29uc3QgY2hhciAqcmVtb3RldmVyc2lvbl9z dHI7Ci0JaW50CQkJbXlfdmVyc2lvbjsKLQljb25zdCBjaGFyICoqa2V5d29yZHMgPSBOVUxMOwot CWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxMOwotCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0 cyA9IE5VTEw7Ci0Jc3RhdGljIGNoYXIgKnBhc3N3b3JkID0gTlVMTDsKLQotCWlmIChwcm9tcHRf cGFzc3dvcmQgPT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQpCi0JCXBhc3N3b3JkID0gc2ltcGxlX3By b21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQotCS8qCi0JICogU3RhcnQgdGhlIGNvbm5lY3Rp b24uICBMb29wIHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkKLQkgKiBi YWNrZW5kLgotCSAqLwotCWRvCi0JewotCQlpbnQJCQlhcmdjb3VudCA9IDY7Ci0JCVBRY29ubmlu Zm9PcHRpb24gKmNvbm5fb3B0OwotCQljaGFyCSAgICplcnJfbXNnID0gTlVMTDsKLQkJaW50CQkJ aSA9IDA7Ci0KLQkJZnJlZShrZXl3b3Jkcyk7Ci0JCWZyZWUodmFsdWVzKTsKLQkJUFFjb25uaW5m b0ZyZWUoY29ubl9vcHRzKTsKLQotCQkvKgotCQkgKiBNZXJnZSB0aGUgY29ubmVjdGlvbiBpbmZv IGlucHV0cyBnaXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rpb24gc3RyaW5nCi0JCSAqIGFuZCBvdGhl ciBvcHRpb25zLiAgRXhwbGljaXRseSBkaXNjYXJkIGFueSBkYm5hbWUgdmFsdWUgaW4gdGhlCi0J CSAqIGNvbm5lY3Rpb24gc3RyaW5nOyBvdGhlcndpc2UsIFBRY29ubmVjdGRiUGFyYW1zKCkgd291 bGQgaW50ZXJwcmV0Ci0JCSAqIHRoYXQgdmFsdWUgYXMgYmVpbmcgaXRzZWxmIGEgY29ubmVjdGlv biBzdHJpbmcuCi0JCSAqLwotCQlpZiAoY29ubmVjdGlvbl9zdHJpbmcpCi0JCXsKLQkJCWNvbm5f b3B0cyA9IFBRY29ubmluZm9QYXJzZShjb25uZWN0aW9uX3N0cmluZywgJmVycl9tc2cpOwotCQkJ aWYgKGNvbm5fb3B0cyA9PSBOVUxMKQotCQkJCXBnX2ZhdGFsKCIlcyIsIGVycl9tc2cpOwotCi0J CQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBj b25uX29wdCsrKQotCQkJewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9v cHQtPnZhbFswXSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRi bmFtZSIpICE9IDApCi0JCQkJCWFyZ2NvdW50Kys7Ci0JCQl9Ci0KLQkJCWtleXdvcmRzID0gcGdf bWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9 IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOwotCi0JCQlmb3Ig KGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29w dCsrKQotCQkJewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZh bFswXSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIp ICE9IDApCi0JCQkJewotCQkJCQlrZXl3b3Jkc1tpXSA9IGNvbm5fb3B0LT5rZXl3b3JkOwotCQkJ CQl2YWx1ZXNbaV0gPSBjb25uX29wdC0+dmFsOwotCQkJCQlpKys7Ci0JCQkJfQotCQkJfQotCQl9 Ci0JCWVsc2UKLQkJewotCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICog c2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAx KSAqIHNpemVvZigqdmFsdWVzKSk7Ci0JCX0KLQotCQlpZiAocGdob3N0KQotCQl7Ci0JCQlrZXl3 b3Jkc1tpXSA9ICJob3N0IjsKLQkJCXZhbHVlc1tpXSA9IHBnaG9zdDsKLQkJCWkrKzsKLQkJfQot CQlpZiAocGdwb3J0KQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsKLQkJCXZhbHVlc1tp XSA9IHBncG9ydDsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGd1c2VyKQotCQl7Ci0JCQlrZXl3b3Jk c1tpXSA9ICJ1c2VyIjsKLQkJCXZhbHVlc1tpXSA9IHBndXNlcjsKLQkJCWkrKzsKLQkJfQotCQlp ZiAocGFzc3dvcmQpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInBhc3N3b3JkIjsKLQkJCXZhbHVl c1tpXSA9IHBhc3N3b3JkOwotCQkJaSsrOwotCQl9Ci0JCWlmIChkYm5hbWUpCi0JCXsKLQkJCWtl eXdvcmRzW2ldID0gImRibmFtZSI7Ci0JCQl2YWx1ZXNbaV0gPSBkYm5hbWU7Ci0JCQlpKys7Ci0J CX0KLQkJa2V5d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7Ci0JCXZhbHVl c1tpXSA9IHByb2duYW1lOwotCQlpKys7Ci0KLQkJbmV3X3Bhc3MgPSBmYWxzZTsKLQkJY29ubiA9 IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOwotCi0JCWlmICghY29u bikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBk Ym5hbWUpOwotCi0JCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgotCQkJ UFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChjb25uKSAmJgotCQkJIXBhc3N3b3JkICYmCi0JCQlw cm9tcHRfcGFzc3dvcmQgIT0gVFJJX05PKQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsKLQkJCXBh c3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQkJCW5ld19wYXNz ID0gdHJ1ZTsKLQkJfQotCX0gd2hpbGUgKG5ld19wYXNzKTsKLQotCS8qIGNoZWNrIHRvIHNlZSB0 aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCi0JaWYg KFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQotCXsKLQkJaWYgKGZhaWxfb25fZXJy b3IpCi0JCQlwZ19mYXRhbCgiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7Ci0JCWVsc2UKLQkJ ewotCQkJUFFmaW5pc2goY29ubik7Ci0KLQkJCWZyZWUoa2V5d29yZHMpOwotCQkJZnJlZSh2YWx1 ZXMpOwotCQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCQkJcmV0dXJuIE5VTEw7Ci0J CX0KLQl9Ci0KLQkvKgotCSAqIE9rLCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5LiBSZW1lbWJlciB0 aGUgb3B0aW9ucyB1c2VkLCBpbiB0aGUgZm9ybSBvZiBhCi0JICogY29ubmVjdGlvbiBzdHJpbmcu Ci0JICovCi0JY29ubnN0ciA9IGNvbnN0cnVjdENvbm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7Ci0K LQlmcmVlKGtleXdvcmRzKTsKLQlmcmVlKHZhbHVlcyk7Ci0JUFFjb25uaW5mb0ZyZWUoY29ubl9v cHRzKTsKLQotCS8qIENoZWNrIHZlcnNpb24gKi8KLQlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFy YW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2ZXJfdmVyc2lvbiIpOwotCWlmICghcmVtb3RldmVyc2lv bl9zdHIpCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7Ci0Jc2Vy dmVyX3ZlcnNpb24gPSBQUXNlcnZlclZlcnNpb24oY29ubik7Ci0JaWYgKHNlcnZlcl92ZXJzaW9u ID09IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIlc1wi IiwKLQkJCQkgcmVtb3RldmVyc2lvbl9zdHIpOwotCi0JbXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05f TlVNOwotCi0JLyoKLQkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBh bmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2Ugb2YKLQkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24u ICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wLmMuKQotCSAqLwotCWlmIChteV92 ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9uCi0JCSYmIChzZXJ2ZXJfdmVyc2lvbiA8IDkwMjAwIHx8 Ci0JCQkoc2VydmVyX3ZlcnNpb24gLyAxMDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkKLQl7Ci0J CXBnX2xvZ19lcnJvcigiYWJvcnRpbmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRj aCIpOwotCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNp b246ICVzIiwKLQkJCQkJCQlyZW1vdGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04p OwotCQlleGl0X25pY2VseSgxKTsKLQl9Ci0KLQlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBB TFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NRTCkpOwotCi0JcmV0dXJuIGNvbm47Ci19Ci0KLS8q IC0tLS0tLS0tLS0KLSAqIENvbnN0cnVjdCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhlIGdp dmVuIGtleXdvcmQvdmFsdWUgcGFpcnMuIEl0IGlzCi0gKiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5l Y3Rpb24gb3B0aW9ucyB0byB0aGUgcGdfZHVtcCBzdWJwcm9jZXNzLgotICoKLSAqIFRoZSBmb2xs b3dpbmcgcGFyYW1ldGVycyBhcmUgZXhjbHVkZWQ6Ci0gKglkYm5hbWUJCS0gdmFyaWVzIGluIGVh Y2ggcGdfZHVtcCBpbnZvY2F0aW9uCi0gKglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0byBw YXNzIGEgcGFzc3dvcmQgb24gdGhlIGNvbW1hbmQgbGluZQotICoJZmFsbGJhY2tfYXBwbGljYXRp b25fbmFtZSAtIHdlJ2xsIGxldCBwZ19kdW1wIHNldCBpdAotICogLS0tLS0tLS0tLQotICovCi1z dGF0aWMgY2hhciAqCi1jb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29u c3QgY2hhciAqKnZhbHVlcykKLXsKLQlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOwotCWNoYXIJICAgKmNvbm5zdHI7Ci0JaW50CQkJaTsKLQlib29sCQlmaXJzdGtleXdvcmQg PSB0cnVlOwotCi0JLyogQ29uc3RydWN0IGEgbmV3IGNvbm5lY3Rpb24gc3RyaW5nIGluIGtleT0n dmFsdWUnIGZvcm1hdC4gKi8KLQlmb3IgKGkgPSAwOyBrZXl3b3Jkc1tpXSAhPSBOVUxMOyBpKysp Ci0JewotCQlpZiAoc3RyY21wKGtleXdvcmRzW2ldLCAiZGJuYW1lIikgPT0gMCB8fAotCQkJc3Ry Y21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQiKSA9PSAwIHx8Ci0JCQlzdHJjbXAoa2V5d29yZHNb aV0sICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIikgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0J CWlmICghZmlyc3RrZXl3b3JkKQotCQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyAnKTsK LQkJZmlyc3RrZXl3b3JkID0gZmFsc2U7Ci0JCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiVzPSIs IGtleXdvcmRzW2ldKTsKLQkJYXBwZW5kQ29ublN0clZhbChidWYsIHZhbHVlc1tpXSk7Ci0JfQot Ci0JY29ubnN0ciA9IHBnX3N0cmR1cChidWYtPmRhdGEpOwotCWRlc3Ryb3lQUUV4cEJ1ZmZlcihi dWYpOwotCXJldHVybiBjb25uc3RyOwotfQotCi0vKgotICogUnVuIGEgcXVlcnksIHJldHVybiB0 aGUgcmVzdWx0cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBQR3Jlc3Vs dCAqCi1leGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKLXsKLQlQ R3Jlc3VsdCAgICpyZXM7Ci0KLQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkpOwot Ci0JcmVzID0gUFFleGVjKGNvbm4sIHF1ZXJ5KTsKLQlpZiAoIXJlcyB8fAotCQlQUXJlc3VsdFN0 YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKLQl7Ci0JCXBnX2xvZ19lcnJvcigicXVlcnkg ZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJcGdfbG9nX2Vycm9yX2RldGFp bCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQkJUFFmaW5pc2goY29ubik7Ci0JCWV4aXRfbmlj ZWx5KDEpOwotCX0KLQotCXJldHVybiByZXM7Ci19Ci0KIC8qCiAgKiBBcyBhYm92ZSBmb3IgYSBT UUwgY29tbWFuZCAod2hpY2ggcmV0dXJucyBub3RoaW5nKS4KICAqLwpAQCAtMTk5NCwzICsxODYw LDkxIEBAIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVT dHJpbmdMaXN0ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisg KiBjcmVhdGVfb3Jfb3Blbl9kaXIKKyAqCisgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGRpcmVj dG9yeSB3aXRoIGdpdmVuIG5hbWUuICBJZiB0aGVyZSBpcyBhbHJlYWR5IHNhbWUKKyAqIGVtcHR5 IGRpcmVjdG9yeSBleGlzdCwgdGhlbiB1c2UgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVf b3Jfb3Blbl9kaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdAkJc3Q7CisJ Ym9vbAkJCWlzX2VtcHR5ID0gZmFsc2U7CisKKwkvKiB3ZSBhY2NlcHQgYW4gZW1wdHkgZXhpc3Rp bmcgZGlyZWN0b3J5ICovCisJaWYgKHN0YXQoZGlybmFtZSwgJnN0KSA9PSAwICYmIFNfSVNESVIo c3Quc3RfbW9kZSkpCisJeworCQlESVIJCSpkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCisJCWlm IChkaXIpCisJCXsKKwkJCXN0cnVjdCBkaXJlbnQJKmQ7CisKKwkJCWlzX2VtcHR5ID0gdHJ1ZTsK KworCQkJd2hpbGUgKGVycm5vID0gMCwgKGQgPSByZWFkZGlyKGRpcikpKQorCQkJeworCQkJCWlm IChzdHJjbXAoZC0+ZF9uYW1lLCAiLiIpICE9IDAgJiYgc3RyY21wKGQtPmRfbmFtZSwgIi4uIikg IT0gMCkKKwkJCQl7CisJCQkJCWlzX2VtcHR5ID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0K KwkJCX0KKworCQkJaWYgKGVycm5vKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBkaXJl Y3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCQlkaXJuYW1lKTsKKworCQkJaWYgKGNsb3NlZGlyKGRp cikpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIs CisJCQkJCQlkaXJuYW1lKTsKKwkJfQorCisJCWlmKCFpc19lbXB0eSkKKwkJeworCQkJcGdfbG9n X2Vycm9yKCJkaXJlY3RvcnkgXCIlc1wiIGV4aXN0cyBidXQgaXMgbm90IGVtcHR5IiwgZGlybmFt ZSk7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiSWYgeW91IHdhbnQgdG8gZHVtcCBkYXRhIG9uIHRo aXMgZGlyZWN0b3J5LCBlaXRoZXIgcmVtb3ZlIG9yIGVtcHR5ICIKKwkJCQkJCQkgICJ0aGlzIGRp cmVjdG9yeSBcIiVzXCIgb3IgcnVuICVzICIKKwkJCQkJCQkgICJ3aXRoIGFuIGFyZ3VtZW50IG90 aGVyIHRoYW4gXCIlc1wiLiIsCisJCQkJCQkJICBkaXJuYW1lLCBwcm9nbmFtZSwgZGlybmFtZSk7 CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCX0KKwllbHNlIGlmIChta2RpcihkaXJuYW1lLCAw NzAwKSA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6 ICVtIiwgZGlybmFtZSk7Cit9CisKKy8qCisgKiBwYXJzZUR1bXBGb3JtYXQKKyAqCisgKiBUaGlz IHdpbGwgdmFsaWRhdGUgZHVtcCBmb3JtYXRzLgorICovCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAor cGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0CWFy Y2hEdW1wRm9ybWF0OworCisJaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJ CWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZv cm1hdCwgImN1c3RvbSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwll bHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1h dCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJl Y3RvcnkiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBp ZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBh cmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZv cm1hdCwgInQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0YXIiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFy Y2hUYXI7CisJZWxzZQorCQlwZ19mYXRhbCgidW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0IFwi JXNcIjsgcGxlYXNlIHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJ CWZvcm1hdCk7CisKKwlyZXR1cm4gYXJjaER1bXBGb3JtYXQ7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpp bmRleCBjNjAyMjcyZDdkYi4uNDQ0NDE1ZDJlZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtMiw3 ICsyLDcgQEAKICAqCiAgKiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMgYW4gdXRpbGl0 eSBleHRyYWN0aW5nIHBvc3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25zCi0gKglmcm9tIGEgYmFj a3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNoaXZlcgorICoJZnJv bSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC9wZ19kdW1wYWxsIHVzaW5nIHRo ZSBhcmNoaXZlcgogICoJaW50ZXJmYWNlLgogICoKICAqCXBnX3Jlc3RvcmUgd2lsbCByZWFkIHRo ZSBiYWNrdXAgYXJjaGl2ZSBhbmQKQEAgLTQxLDI3ICs0MSw3MCBAQAogI2luY2x1ZGUgInBvc3Rn cmVzX2ZlLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAj aWZkZWYgSEFWRV9URVJNSU9TX0gKICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjZW5kaWYKIAorI2lu Y2x1ZGUgImNvbW1vbi9jb25uZWN0LmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKyNpbmNs dWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5o IgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxz L3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9s b25nLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2 ZXIuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAordHlwZWRlZiBzdHJ1Y3QgU2lt cGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAoreworCXN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RD ZWxsCSpuZXh0OworCU9pZAkJCQkJCQkJCWRiX29pZDsKKwljb25zdCBjaGFyCQkJCQkJCSpkYl9u YW1lOworfSBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBTaW1w bGVEYXRhYmFzZU9pZExpc3QKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpoZWFkOwor CVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKnRhaWw7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlz dDsKKwogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZv aWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRp b25zICpvcHRzKTsKK3N0YXRpYyBib29sIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNo YXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCByZXN0b3JlT25lRGF0 YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJ CQkJCQkJICBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSk7CitzdGF0aWMgaW50IFJl YWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAqcGZpbGUpOworc3RhdGljIGlu dCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBh dGgsCisJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0 b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMpOworc3RhdGljIHZvaWQgcHJvY2Vzc19n bG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgs CisJCQkJCQkJCQkJY29uc3QgY2hhciAqb3V0ZmlsZSk7CitzdGF0aWMgdm9pZCBjb3B5X2dsb2Jh bF9maWxlX3RvX291dF9maWxlKGNvbnN0IGNoYXIgKm91dGZpbGUsIEZJTEUgKnBmaWxlKTsKK3N0 YXRpYyBpbnQgZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJ CQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQkJCSAg U2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQgZ2V0X2Ri bmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJ CQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworc3RhdGljIHZv aWQgc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3Qs IE9pZCBkYl9vaWQsCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmRibmFtZSk7CitzdGF0aWMgdm9p ZCBzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCk7 CitzdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJh c2VPaWRMaXN0ICpsaXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUo U2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9p ZExpc3RDZWxsICpjZWxsLAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpw cmV2KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJh c2VPaWRMaXN0ICpsaXN0LAorCQlPaWQgZGJfb2lkLCBjb25zdCBjaGFyICpkYm5hbWUpOworc3Rh dGljIHNpemVfdCBxdW90ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRzdCwgY29uc3QgY2hhciAq c3JjLCBzaXplX3QgbGVuKTsKK3N0YXRpYyBjaGFyICpxdW90ZV9saXRlcmFsX2NzdHIoY29uc3Qg Y2hhciAqcmF3c3RyKTsKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlS ZXN0b3JlT3B0aW9ucyAqb3B0czsKIAlpbnQJCQljOwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJ CQludW1Xb3JrZXJzID0gMTsKLQlBcmNoaXZlICAgICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVT cGVjOwogCXN0YXRpYyBpbnQJZGlzYWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFi bGVfcm93X3NlY3VyaXR5ID0gMDsKQEAgLTc3LDExICsxMjAsMTQgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJc3RhdGljIGludAlzdHJpY3RfbmFtZXMgPSAwOwogCWJvb2wJCWRhdGFf b25seSA9IGZhbHNlOwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJYm9vbAkJCQlnbG9i YWxzX29ubHkgPSBmYWxzZTsKKwlTaW1wbGVTdHJpbmdMaXN0CWRiX2V4Y2x1ZGVfcGF0dGVybnMg PSB7TlVMTCwgTlVMTH07CiAKIAlzdHJ1Y3Qgb3B0aW9uIGNtZG9wdHNbXSA9IHsKIAkJeyJjbGVh biIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRlIiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRh LW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imdsb2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30s CiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVM TCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIsIDEsIE5VTEwsICdOJ30sCkBAIC0xMjgsNiAr MTc0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsibm8tc2VjdXJpdHktbGFi ZWxzIiwgbm9fYXJndW1lbnQsICZub19zZWN1cml0eV9sYWJlbHMsIDF9LAogCQl7Im5vLXN1YnNj cmlwdGlvbnMiLCBub19hcmd1bWVudCwgJm5vX3N1YnNjcmlwdGlvbnMsIDF9LAogCQl7ImZpbHRl ciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKKwkJeyJleGNsdWRlLWRhdGFiYXNlIiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAogCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07 CkBAIC0xNTYsNyArMjAzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9 CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNDZDplZjpGOmg6STpq OmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmco YXJnYywgYXJndiwgImFBY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4 MSIsCiAJCQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAt MTgzLDExICsyMzAsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYgKHN0 cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0 YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25seSBnbG9i YWwuZGF0IGZpbGUgZnJvbSBkaXJlY3RvcnkgKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwor CQkJCWJyZWFrOwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJ CQkJCW9wdHMtPmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7 Ci0KIAkJCWNhc2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMgKi8KIAkJCQlpZiAo IW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJCQkJCSAgUEdf TUFYX0pPQlMsCkBAIC0zMDIsNiArMzUyLDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQkJCQlleGl0KDEpOwogCQkJCW9wdHMtPmV4aXRfb25fZXJyb3IgPSB0cnVlOwogCQkJCWJy ZWFrOworCQkJY2FzZSA2OgorCQkJCS8qIGxpc3Qgb2YgZGF0YWJhc2VzIHBhdHRlcm5zIHRob3Nl IG5lZWRzIHRvIHNraXAgd2hpbGUgcmVzdG9yaW5nICovCisJCQkJc2ltcGxlX3N0cmluZ19saXN0 X2FwcGVuZCgmZGJfZXhjbHVkZV9wYXR0ZXJucywgb3B0YXJnKTsKKwkJCQlicmVhazsKIAogCQkJ ZGVmYXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQgYSBjb21wbGFpbnQg Ki8KQEAgLTMyOSw2ICszODMsMTMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYg KCFvcHRzLT5jcGFyYW1zLmRibmFtZSAmJiAhb3B0cy0+ZmlsZW5hbWUgJiYgIW9wdHMtPnRvY1N1 bW1hcnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2YgLWQvLS1kYm5hbWUgYW5kIC1mLy0tZmlsZSBtdXN0 IGJlIHNwZWNpZmllZCIpOwogCisJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxM ICYmIGdsb2JhbHNfb25seSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9uIC0tZXhjbHVkZS1k YXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Iik7 CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1h dGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKwogCS8qIFNob3VsZCBn ZXQgYXQgbW9zdCBvbmUgb2YgLWQgYW5kIC1mLCBlbHNlIHVzZXIgaXMgY29uZnVzZWQgKi8KIAlp ZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCiAJewpAQCAtNDA0LDYgKzQ2NSw4MCBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1hdE5hbWUpOwogCX0KIAorCS8q CisJICogSWYgdG9jLmRhdCBmaWxlIGRvZXMgbm90IHByZXNlbnQgaW4gY3VycmVudCBwYXRoLCB0 aGVuIGNoZWNrIGZvcgorCSAqIGdsb2JhbC5kYXQuICBJZiBnbG9iYWwuZGF0IGZpbGUgaXMgcHJl c2VudCwgdGhlbiByZXN0b3JlIGFsbCB0aGUKKwkgKiBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0KGlm IGV4aXN0KSBmaWxlIGxpc3QgYW5kIHNraXAgcmVzdG9yaW5nIGZvcgorCSAqIC0tZXhjbHVkZS1k YXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmCisJ CSFJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLmRhdCIpKQorCXsK KwkJLyogSWYgZ2xvYmFsLmRhdCBpcyBleGlzdCwgdGhlbiBwcm9jZXNzIGl0LiAqLworCQlpZiAo SXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkocGdfc3RyZHVwKGlucHV0RmlsZVNwZWMpLCAiZ2xvYmFs LmRhdCIpKQorCQl7CisJCQlQR2Nvbm4gICpjb25uID0gTlVMTDsgLyogQ29ubmVjdGlvbiB0byBy ZXN0b3JlIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJCQlpbnQgICAgIGV4aXRfY29kZSA9IDA7 CisKKwkJCS8qCisJCQkgKiBDb25uZWN0IHRvIGRhdGFiYXNlIHRvIGV4ZWN1dGUgZ2xvYmFsIHNx bCBjb21tYW5kcyBmcm9tCisJCQkgKiBnbG9iYWwuZGF0IGZpbGUuCisJCQkgKi8KKwkJCWlmIChv cHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJCXsKKwkJCQljb25uID0gY29ubmVjdERhdGFiYXNlKG9w dHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJ CSAgIG9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVG QVVMVCwKKwkJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCk7CisKKwkJCQlp ZiAoIWNvbm4pCisJCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBc IiVzXCIiLCBvcHRzLT5jcGFyYW1zLmRibmFtZSk7CisJCQl9CisKKwkJCS8qIElmIGdsb2JhbHMt b25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQkJaWYgKGdsb2JhbHNfb25seSkKKwkJ CXsKKwkJCQkvKgorCQkJCSAqIE9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCBleGVjdXRlL2FwcGVu ZCBhbGwgdGhlIGdsb2JhbCBzcWwKKwkJCQkgKiBjb21tYW5kcy4KKwkJCQkgKi8KKwkJCQlpZiAo IW9wdHMtPnRvY1N1bW1hcnkgfHwgb3B0cy0+ZmlsZW5hbWUpCisJCQkJCXByb2Nlc3NfZ2xvYmFs X3NxbF9jb21tYW5kcyhjb25uLCBpbnB1dEZpbGVTcGVjLCBvcHRzLT5maWxlbmFtZSk7CisKKwkJ CQlpZiAoY29ubikKKwkJCQkJUFFmaW5pc2goY29ubik7CisKKwkJCQlwZ19sb2dfaW5mbygiZGF0 YWJhc2VzIHJlc3RvcmluZyBpcyBza2lwcGVkIGFzIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiBp cyBzcGVjaWZpZWQiKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBOb3cgcmVzdG9yZSBh bGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQgZmlsZS4gKi8KKwkJCQlleGl0X2NvZGUgPSBy ZXN0b3JlQWxsRGF0YWJhc2VzKGNvbm4sIGlucHV0RmlsZVNwZWMsCisJCQkJCQkJCQkJCQlkYl9l eGNsdWRlX3BhdHRlcm5zLAorCQkJCQkJCQkJCQkJb3B0cywKKwkJCQkJCQkJCQkJCW51bVdvcmtl cnMpOworCQkJfQorCisJCQkvKiBGcmVlIGRiIHBhdHRlcm4gbGlzdC4gKi8KKwkJCXNpbXBsZV9z dHJpbmdfZnVsbF9saXN0X2RlbGV0ZSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkJCXJldHVy biBleGl0X2NvZGU7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdG9yZU9uZURhdGFiYXNlKGlucHV0 RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlKTsKK30KKy8qCisgKiByZXN0b3JlT25l RGF0YWJhc2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9j LmRhdCBmaWxlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlT25lRGF0YWJhc2UoY29uc3QgY2hh ciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJICAgaW50IG51bVdv cmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpCit7CisJQXJjaGl2ZQkJKkFIOworCWludAkJCWV4aXRf Y29kZTsKKwogCUFIID0gT3BlbkFyY2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsK IAogCVNldEFyY2hpdmVPcHRpb25zKEFILCBOVUxMLCBvcHRzKTsKQEAgLTQyOSwxMSArNTY0LDEx IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCUFILT5udW1Xb3JrZXJzID0gbnVtV29y a2VyczsKIAogCWlmIChvcHRzLT50b2NTdW1tYXJ5KQotCQlQcmludFRPQ1N1bW1hcnkoQUgpOwor CQlQcmludFRPQ1N1bW1hcnkoQUgsIGFwcGVuZF9kYXRhKTsKIAllbHNlCiAJewogCQlQcm9jZXNz QXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUoQUgpOworCQlSZXN0 b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEpOwogCX0KIAogCS8qIGRvbmUsIHByaW50IGEgc3Vt bWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwpAQCAtNDY5LDYgKzYwNCw3IEBAIHVzYWdlKGNvbnN0 IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAg ICAgY2xlYW4gKGRyb3ApIGRhdGFiYXNlIG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsK IAlwcmludGYoXygiICAtQywgLS1jcmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFy Z2V0IGRhdGFiYXNlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAg ICAgICBleGl0IG9uIGVycm9yLCBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRm KF8oIiAgLWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9i amVjdHMsIG5vIGRhdGFiYXNlc1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUg ICAgICAgICAgICAgcmVzdG9yZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAt LWpvYnM9TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJl c3RvcmVcbiIpKTsKIAlwcmludGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVz ZSB0YWJsZSBvZiBjb250ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTQ4MSw2ICs2MTcs NyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtUywgLS1zdXBl cnVzZXI9TkFNRSAgICAgICAgIHN1cGVydXNlciB1c2VyIG5hbWUgdG8gdXNlIGZvciBkaXNhYmxp bmcgdHJpZ2dlcnNcbiIpKTsKIAlwcmludGYoXygiICAtdCwgLS10YWJsZT1OQU1FICAgICAgICAg ICAgIHJlc3RvcmUgbmFtZWQgcmVsYXRpb24gKHRhYmxlLCB2aWV3LCBldGMuKVxuIikpOwogCXBy aW50ZihfKCIgIC1ULCAtLXRyaWdnZXI9TkFNRSAgICAgICAgICAgcmVzdG9yZSBuYW1lZCB0cmln Z2VyXG4iKSk7CisJcHJpbnRmKF8oIiAgLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gICBleGNs dWRlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMgd2l0aCBwYXR0ZXJuXG4iKSk7CiAJcHJp bnRmKF8oIiAgLXgsIC0tbm8tcHJpdmlsZWdlcyAgICAgICAgICBza2lwIHJlc3RvcmF0aW9uIG9m IGFjY2VzcyBwcml2aWxlZ2VzIChncmFudC9yZXZva2UpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLTEs IC0tc2luZ2xlLXRyYW5zYWN0aW9uICAgICByZXN0b3JlIGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9u XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1kaXNhYmxlLXRyaWdnZXJzICAgICAgICAgICBkaXNhYmxl IHRyaWdnZXJzIGR1cmluZyBkYXRhLW9ubHkgcmVzdG9yZVxuIikpOwpAQCAtNjE5LDMgKzc1Niw2 NDMgQEAgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVP cHRpb25zICpvcHRzKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBJc0Zp bGVFeGlzdHNJbkRpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBmaWxlIGV4aXN0IGlu IGN1cnJlbnQgZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorSXNGaWxlRXhpc3RzSW5EaXJl Y3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qg c3RhdAkJCXN0OworCWNoYXIJCQkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVm LCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJcGdf ZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJu IChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCisvKgor ICogUmVhZE9uZVN0YXRlbWVudAorICoKKyAqIFRoaXMgd2lsbCBzdGFydCByZWFkaW5nIGZyb20g cGFzc2VkIGZpbGUgcG9pbnRlciB1c2luZyBmZ2V0YyBhbmQgcmVhZCB0aWxsCisgKiBzZW1pY29s b24oc3FsIHN0YXRlbWVudCB0ZXJtaW5hdG9yIGZvciBnbG9iYWwuc3FsIGZpbGUpCisgKgorICog RU9GIGlzIHJldHVybmVkIGlmIGVuZC1vZi1maWxlIGlucHV0IGlzIHNlZW47IHRpbWUgdG8gc2h1 dCBkb3duLgorICovCisKK3N0YXRpYyBpbnQKK1JlYWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBp bkJ1ZiwgRklMRSAqcGZpbGUpCit7CisJaW50CQkJYzsgLyogY2hhcmFjdGVyIHJlYWQgZnJvbSBn ZXRjKCkgKi8KKwlpbnQJCQltOworCisJU3RyaW5nSW5mb0RhdGEJcTsKKwlpbml0U3RyaW5nSW5m bygmcSk7CisKKwlyZXNldFN0cmluZ0luZm8oaW5CdWYpOworCisJLyoKKwkgKiBSZWFkIGNoYXJh Y3RlcnMgdW50aWwgRU9GIG9yIHRoZSBhcHByb3ByaWF0ZSBkZWxpbWl0ZXIgaXMgc2Vlbi4KKwkg Ki8KKwl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwl7CisJCWlmIChjICE9ICdc JycgJiYgYyAhPSAnIicgJiYgYyAhPSAnXG4nICYmIGMgIT0gJzsnKQorCQl7CisJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCQkJd2hpbGUgKChjID0gZmdldGMocGZp bGUpKSAhPSBFT0YpCisJCQl7CisJCQkJaWYgKGMgIT0gJ1wnJyAmJiBjICE9ICciJyAmJiBjICE9 ICc7JyAmJiBjICE9ICdcbicpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hh cikgYyk7CisJCQkJZWxzZQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjID09ICdc JycgfHwgYyA9PSAnIicpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZxLCAoY2hhcikg Yyk7CisJCQltID0gYzsKKworCQkJd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJ CQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnEsIChjaGFyKSBjKTsKKworCQkJCWlmKGMg PT0gbSkKKwkJCQl7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoaW5CdWYsIHEuZGF0YSk7 CisJCQkJCXJlc2V0U3RyaW5nSW5mbygmcSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJ fQorCisJCWlmIChjID09ICc7JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYs IChjaGFyKSAnOycpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYyA9PSAnXG4nKQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSAnXG4nKTsKKwl9CisKKwkvKiBObyBpbnB1 dCBiZWZvcmUgRU9GIHNpZ25hbCBtZWFucyB0aW1lIHRvIHF1aXQuICovCisJaWYgKGMgPT0gRU9G ICYmIGluQnVmLT5sZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsKKworCS8qIEFkZCAnXDAnIHRvIG1h a2UgaXQgbG9vayB0aGUgc2FtZSBhcyBtZXNzYWdlIGNhc2UuICovCisJYXBwZW5kU3RyaW5nSW5m b0NoYXIoaW5CdWYsIChjaGFyKSAnXDAnKTsKKworCXJldHVybiAnUSc7Cit9CisKKy8qCisgKiBm aWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZQorICoKKyAqIFRoaXMgd2lsbCByZW1vdmUgbmFtZXMg ZnJvbSBhbGwgZGJsaXN0IHRob3NlIGNhbgorICogYmUgY29uc3RydWN0ZWQgZnJvbSBkYXRhYmFz ZV9leGNsdWRlX3BhdHRlcm4gbGlzdC4KKyAqCisgKiByZXR1cm5zIG51bWJlciBvZiBkYm5hbWVz IHRob3NlIHdpbGwgYmUgcmVzdG9yZWQuCisgKi8KK3N0YXRpYyBpbnQKK2ZpbHRlcl9kYm5hbWVz X2Zvcl9yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCSAgIFNpbXBsZURhdGFiYXNlT2lkTGlz dCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRl X3BhdHRlcm5zKQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmRib2lkX2NlbGwgPSBk Ym5hbWVfb2lkX2xpc3QtPmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqZGJvaWRw cmVjZWxsID0gTlVMTDsKKwlpbnQJCQkJCQkJY291bnRfZGIgPSAwOworCVBRRXhwQnVmZmVyIHF1 ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsKKworCS8qIFJldHVybiAwIGlmIHRoZXJlIGlzIG5vIGRi IHRvIHJlc3RvcmUuICovCisJaWYgKGRib2lkX2NlbGwgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisK KwlxdWVyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwlpZiAoIWNvbm4pCisJCXBnX2xvZ19p bmZvKCJjb25zaWRlcmluZyBQQVRURVJOIGFzIE5BTUUgZm9yIC0tZXhjbHVkZS1kYXRhYmFzZSBv cHRpb24gYXMgbm8gZGIgY29ubmVjdGlvbiB3aGlsZSBkb2luZyBwZ19yZXN0b3JlLiIpOworCisJ LyoKKwkgKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRibmFtZXMgYW5kIGlmIHNwZWNpZmllZCB0 byBza2lwIHJlc3RvcmluZywgdGhlbgorCSAqIHJlbW92ZSBkYm5hbWUgZnJvbSBsaXN0LgorCSAq LworCXdoaWxlIChkYm9pZF9jZWxsICE9IE5VTEwpCisJeworCQlib29sCQkJCQkJc2tpcF9kYl9y ZXN0b3JlID0gZmFsc2U7CisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5leHQgPSBkYm9p ZF9jZWxsLT5uZXh0OworCisJCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNlbGxkYiA9IGRi X2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgY2VsbGRiOyBjZWxsZGIgPSBjZWxsZGItPm5leHQpCisJ CXsKKwkJCS8qCisJCQkgKiB0aGUgY29uc3RydWN0IHBhdHRlcm4gbWF0Y2hpbmcgcXVlcnk6CisJ CQkgKiBTRUxFQ1QgMSBXSEVSRSBYWFggT1BFUkFUT1IocGdfY2F0YWxvZy5+KSAnXihQQVRURVJO KSQnIENPTExBVEUKKwkJCSAqIHBnX2NhdGFsb2cuZGVmYXVsdAorCQkJICoKKwkJCSAqIFhYWCBy ZXByZXNlbnRzIHRoZSBzdHJpbmcgbGl0ZXJhbCBkYXRhYmFzZSBuYW1lIGRlcml2ZWQgZnJvbSB0 aGUKKwkJCSAqIGRib2lkX2xpc3QgdmFyaWFibGUsIHdoaWNoIGlzIGluaXRpYWxseSBleHRyYWN0 ZWQgZnJvbSB0aGUKKwkJCSAqIG1hcC5kYXQgZmlsZSBsb2NhdGVkIGluIHRoZSBiYWNrdXAgZGly ZWN0b3J5LiAgdGhhdCdzIHdoeSB3ZQorCQkJICogbmVlZCBxdW90ZV9saXRlcmFsX2NzdHIuCisJ CQkgKgorCQkJICogSWYgd2UgZG9uJ3QgaGF2ZSBkYiBjb25uZWN0aW9uLCB0aGVuIGNvbnNpZGVy IHBhdHRlcm5zIGFzIE5BTUUKKwkJCSAqIG9ubHkuCisJCQkgKi8KKwkJCWlmIChwZ19zdHJjYXNl Y21wKGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKSA9PSAwKQorCQkJICAgc2tpcF9k Yl9yZXN0b3JlID0gdHJ1ZTsKKwkJCWVsc2UgaWYgKGNvbm4pCisJCQl7CisJCQkJaW50CWRvdGNu dDsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiU0VMRUNUIDEgIik7CisJCQkJ cHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKGNvbm4sIHF1ZXJ5LCBjZWxsZGItPnZhbCwgZmFsc2UsCisJ CQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBxdW90ZV9saXRlcmFsX2NzdHIoZGJvaWRfY2VsbC0+ZGJf bmFtZSksCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwsICZkb3RjbnQpOworCisJCQkJaWYg KGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImltcHJvcGVyIHF1YWxpZmll ZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIsCisJCQkJCQkJCSAgY2VsbGRiLT52 YWwpOworCQkJCQlQUWZpbmlzaChjb25uKTsKKwkJCQkJZXhpdF9uaWNlbHkoMSk7CisJCQkJfQor CisJCQkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsKKworCQkJCWlmICgo UFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19UVVBMRVNfT0spICYmIFBRbnR1cGxlcyhyZXMp KQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCQkJcGdfbG9nX2luZm8o ImRhdGFiYXNlIFwiJXNcIiBpcyBtYXRjaGluZyB3aXRoIGV4Y2x1ZGUgcGF0dGVybjogXCIlc1wi IiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSwgY2VsbGRiLT52YWwpOworCQkJCX0KKworCQkJCVBRY2xl YXIocmVzKTsKKwkJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCX0KKworCQkJaWYgKHNr aXBfZGJfcmVzdG9yZSkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIEluY3JlbWVudCBjb3VudCBp ZiBkYiBuZWVkcyB0byBiZSByZXN0b3JlZC4gKi8KKwkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJ eworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm9pZF9jZWxs LT5kYl9uYW1lKTsKKwkJCXNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoZGJuYW1lX29pZF9saXN0 LCBkYm9pZF9jZWxsLCBkYm9pZHByZWNlbGwpOworCQl9CisJCWVsc2UKKwkJeworCQkJY291bnRf ZGIrKzsgLyogSW5jcmVtZW50IGRiIGNvdW50ZXIuICovCisJCQlkYm9pZHByZWNlbGwgPSBkYm9p ZF9jZWxsOworCQl9CisKKwkJLyogUHJvY2VzcyBuZXh0IGRibmFtZSBmcm9tIGRibmFtZSBsaXN0 LiAqLworCQlkYm9pZF9jZWxsID0gbmV4dDsKKwl9CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisK Ky8qCisgKiBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5k YXQgZmlsZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2Yg ZGF0YWJhc2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNwb25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1 cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICov CitzdGF0aWMgaW50CitnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAq ZHVtcGRpcnBhdGgsIFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0KQorewor CUZJTEUgICAgKnBmaWxlOworCWNoYXIgICAgbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWNo YXIgICAgbGluZVtNQVhQR1BBVEhdOworCWludCAgICAgY291bnQgPSAwOworCisJaWYgKCFJc0Zp bGVFeGlzdHNJbkRpcmVjdG9yeShwZ19zdHJkdXAoZHVtcGRpcnBhdGgpLCAibWFwLmRhdCIpKQor CXsKKwkJcGdfbG9nX2luZm8oImRhdGFiYXNlcyByZXN0b3JpbmcgaXMgc2tpcHBlZCBhcyBtYXAu ZGF0IGZpbGUgaXMgbm90IHByZXNlbnQgaW4gXCIlc1wiIiwgZHVtcGRpcnBhdGgpOworCQlyZXR1 cm4gMDsKKwl9CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAu ZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUg PSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVM TCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG1hcC5kYXQgZmlsZTogXCIlc1wiIiwgbWFw X2ZpbGVfcGF0aCk7CisKKwkvKiBBcHBlbmQgYWxsIHRoZSBkYm5hbWUgYW5kIGRiX29pZCB0byB0 aGUgbGlzdC4gKi8KKwl3aGlsZSgoZmdldHMobGluZSwgTUFYUEdQQVRILCBwZmlsZSkpICE9IE5V TEwpCisJeworCQlPaWQgICAgICAgICBkYl9vaWQgPSBJbnZhbGlkT2lkOworCQljaGFyCQlkYl9v aWRfc3RyW01BWFBHUEFUSCArIDFdID0geydcMCd9OworCQljaGFyICAgICAgICBkYm5hbWVbTUFY UEdQQVRIICsgMV0gPSB7J1wwJ307CisKKwkJLyogRXh0cmFjdCBkYm9pZC4gKi8KKwkJc3NjYW5m KGxpbmUsICIldSIgLCAmZGJfb2lkKTsKKwkJc3NjYW5mKGxpbmUsICIlcyIgLCBkYl9vaWRfc3Ry KTsKKworCQkvKiBOb3cgY29weSBkYm5hbWUuICovCisJCXN0cmNweShkYm5hbWUsIGxpbmUgKyBz dHJsZW4oZGJfb2lkX3N0cikgKyAxKTsKKworCQkvKiBSZW1vdmUgXG4gZnJvbSBkYmFubWUuICov CisJCWRibmFtZVtzdHJsZW4oZGJuYW1lKSAtIDFdID0gJ1wwJzsKKworCQlwZ19sb2dfaW5mbygi Zm91bmQgZGF0YWJhc2UgXCIlc1wiIChPSUQ6ICV1KSBpbiBtYXAuZGF0IGZpbGUgd2hpbGUgcmVz dG9yaW5nLiIsIGRibmFtZSwgZGJfb2lkKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgaWYgZmlsZSBo YXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlpZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBz dHJsZW4oZGJuYW1lKSA9PSAwKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gbWFwLmRh dCBmaWxlIGF0IGxpbmUgOiAlZCIsIGNvdW50ICsgMSk7CisKKwkJLyoKKwkJICogWFhYIDogYmVm b3JlIGFkZGluZyBkYm5hbWUgaW50byBsaXN0LCB3ZSBjYW4gdmVyaWZ5IHRoYXQgdGhpcyBkYgor CQkgKiBuZWVkcyB0byBza2lwcGVkIGZvciByZXN0b3JlIG9yIG5vdCBidXQgYXMgb2Ygbm93LCB3 ZSBhcmUgbWFraW5nCisJCSAqIGEgbGlzdCBvZiBhbGwgdGhlIGRhdGFiYXNlcy4KKwkJICovCisJ CXNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYl9vaWQsIGRibmFt ZSk7CisJCWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9z ZShwZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlQWxsRGF0YWJh c2VzCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFyZSBw cmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFzZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBpbmcuCisg KgorICogVGhpcyB3aWxsIHNraXAgcmVzdG9yaW5nIGZvciBkYXRhYmFzZXMgdGhhdCBhcmUgc3Bl Y2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uLgorICovCitzdGF0aWMgaW50 CityZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBh dGgsCisJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9w dGlvbnMgKm9wdHMsCisJCQkJCWludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZURhdGFiYXNlT2lk TGlzdAkJCWRibmFtZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxMfTsKKwlTaW1wbGVEYXRhYmFzZU9p ZExpc3RDZWxsCQkqZGJvaWRfY2VsbDsKKwlpbnQJCQkJCQkJCWV4aXRfY29kZSA9IDA7CisJaW50 CQkJCQkJCQludW1fZGJfcmVzdG9yZSA9IDA7CisJaW50CQkJCQkJCQludW1fdG90YWxfZGI7CisK KwludW1fdG90YWxfZGIgPSBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoZHVtcGRpcnBh dGgsICZkYm5hbWVfb2lkX2xpc3QpOworCisJLyogSWYgbWFwLmRhdCBoYXMgbm8gZW50cnksIHJl dHVybiBmcm9tIGhlcmUuICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwpCisJ CXJldHVybiAwOworCisJcGdfbG9nX2luZm8oImZvdW5kIHRvdGFsICVkIGRhdGFiYXNlIG5hbWVz IGluIG1hcC5kYXQgZmlsZSIsIG51bV90b3RhbF9kYik7CisKKwlpZiAoIWNvbm4pCisJeworCQlw Z19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJwb3N0Z3Jlc1wiICB0byBk dW1wIGludG8gb3V0IGZpbGUiKTsKKworCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJwb3N0Z3Jl cyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCSAgIG9wdHMtPmNwYXJhbXMu cGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJCQkgICBm YWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCisJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4g Ki8KKwkJaWYgKCFjb25uKQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3Qg ZGF0YWJhc2UgXCJ0ZW1wbGF0ZTFcIiBhcyBmYWlsZWQgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBc InBvc3RncmVzXCIgdG8gZHVtcCBpbnRvIG91dCBmaWxlIik7CisKKwkJCWNvbm4gPSBjb25uZWN0 RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJ CQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RF RkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCk7CisKKwkJCWlm ICghY29ubikKKwkJCQlwZ19sb2dfaW5mbygidGhlcmUgaXMgbm8gZGF0YWJhc2UgY29ubmVjdGlv biBzbyBjb25zaWRlciBwYXR0ZXJuIGFzIHNpbXBsZSBuYW1lIGZvciAtLWV4Y2x1ZGUtZGF0YWJh c2UiKTsKKwkJfQorCX0KKworCS8qCisJICogcHJvY2Vzc2luZyBwZ19yZXRzb3JlIC0tZXhjbHVk ZS1kYXRhYmFzZT1QQVRURVJOL05BTUUgaWYgbm8gY29ubmVjdGlvbi4KKwkgKi8KKwludW1fZGJf cmVzdG9yZSA9IGZpbHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlKGNvbm4sICZkYm5hbWVfb2lkX2xp c3QsCisJCQkJCQkJCQkJCQlkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCS8qCisJICogVG8gcmVz dG9yZSBtdWx0aXBsZSBkYXRhYmFzZXMsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbiBzaG91 bGQgYmUgc3BlY2lmaWVkCisJICogb3IgYWxsIGRhdGFiYXNlcyBzaG91bGQgYmUgY3JlYXRlZCBi ZWZvcmUgcGdfcmVzdG9yZS4KKwkgKi8KKwlpZiAob3B0cy0+Y3JlYXRlREIgIT0gMSkKKwkJcGdf bG9nX2luZm8oInJlc3RvcmluZyBkdW1wIG9mIHBnX2R1bXBhbGwgd2l0aG91dCAtQyBvcHRpb24s IHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIGRhdGFiYXNlcyBpbiBkaXJlY3RvcnkuIik7CisKKwkv KiBUT0RPOiBNQVhfT05fRVhJVF9OSUNFTFkgaXMgMTAwIG5vdy4uLiBtYXggQUggaGFuZGxlIHJl Z2lzdGVyIG9uIGV4aXQgLiovCisJaWYgKG51bV9kYl9yZXN0b3JlID4gTUFYX09OX0VYSVRfTklD RUxZKQorCXsKKwkJc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKCZkYm5hbWVfb2lkX2xp c3QpOworCQlwZ19mYXRhbCgiY291bmQgbm90IHJlc3RvcmUgbW9yZSB0aGFuICVkIGRhdGFiYXNl cyBieSBzaW5nbGUgcGdfcmVzdG9yZSwgaGVyZSB0b3RhbCBkYXRhYmFzZTolZCIsCisJCQkJICBN QVhfT05fRVhJVF9OSUNFTFksCisJCQkJICBudW1fZGJfcmVzdG9yZSk7CisJfQorCisJLyogT3Bl biBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFsIHNxbCBj b21tYW5kcy4gKi8KKwlpZiAoIW9wdHMtPnRvY1N1bW1hcnkgfHwgb3B0cy0+ZmlsZW5hbWUpCisJ CXByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhjb25uLCBkdW1wZGlycGF0aCwgb3B0cy0+Zmls ZW5hbWUpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0 aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7 CisKKwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5h bWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCXsKKwkJcGdfbG9nX2luZm8oIm5vIGRhdGFiYXNl IG5lZWRzIHRvIHJlc3RvcmUgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYik7CisJ CXJldHVybiAwOworCX0KKworCXBnX2xvZ19pbmZvKCJuZWVkcyB0byByZXN0b3JlICVkIGRhdGFi YXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51bV90b3RhbF9kYik7 CisKKwkvKgorCSAqIFhYWDogVE9ETyB0aWxsIG5vdywgd2UgbWFkZSBhIGxpc3Qgb2YgZGF0YWJh c2VzLCB0aG9zZSBuZWVkcyB0byBiZSByZXN0b3JlZAorCSAqIGFmdGVyIHNraXBwaW5nIG5hbWVz IG9mIGV4Y2x1ZGUtZGF0YWJhc2UuICBOb3cgd2UgY2FuIGxhdW5jaCBwYXJhbGxlbAorCSAqIHdv cmtlcnMgdG8gcmVzdG9yZSB0aGVzZSBkYXRhYmFzZXMuCisJICovCisJZGJvaWRfY2VsbCA9IGRi bmFtZV9vaWRfbGlzdC5oZWFkOworCisJd2hpbGUoZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJ Y2hhcgkJc3ViZGlycGF0aFtNQVhQR1BBVEhdOworCQlpbnQJCQlkYmV4aXRfY29kZTsKKworCQkv KgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRlX2RibmFtZSBzbyB0aGF0IG9iamVjdHMg Y2FuIGJlIHJlc3RvcmVkIGludG8KKwkJICogYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNl ZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92 ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5h bWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJ c25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgZHVtcGRp cnBhdGgsIGRib2lkX2NlbGwtPmRiX29pZCk7CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBk YXRhYmFzZSBcIiVzXCIiLCBkYm9pZF9jZWxsLT5kYl9uYW1lKTsKKworCQlkYmV4aXRfY29kZSA9 IHJlc3RvcmVPbmVEYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCB0cnVlKTsK KworCQkvKiBTdG9yZSBleGl0X2NvZGUgdG8gcmVwb3J0IGl0IGJhY2suICovCisJCWlmIChleGl0 X2NvZGUgPT0gMCAmJiBkYmV4aXRfY29kZSAhPSAwKQorCQkJZXhpdF9jb2RlID0gZGJleGl0X2Nv ZGU7CisKKwkJZGJvaWRfY2VsbCA9IGRib2lkX2NlbGwtPm5leHQ7CisJfQorCisJLyogTG9nIG51 bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiovCisJcGdfbG9nX2luZm8oIm51bWJlciBvZiBy ZXN0b3JlZCBkYXRhYmFzZXMgYXJlICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBk Ym5hbWUgYW5kIGRib2lkIGxpc3QuICovCisJc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRl KCZkYm5hbWVfb2lkX2xpc3QpOworCisJcmV0dXJuIGV4aXRfY29kZTsKK30KKworLyoKKyAqIHBy b2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcworICoKKyAqIFRoaXMgd2lsbCBvcGVuIGdsb2JhbC5k YXQgZmlsZSBhbmQgd2lsbCBleGVjdXRlIGFsbCBnbG9iYWwgc3FsIGNvbW1hbmRzIG9uZQorICog Ynkgb25lIHN0YXRlbWVudC4KKyAqIFNlbWljb2xvbiBpcyBjb25zaWRlcmVkIGFzIHN0YXRlbWVu dCB0ZXJtaW5hdG9yLiAgSWYgb3V0ZmlsZSBpcyBwYXNzZWQsIHRoZW4KKyAqIHRoaXMgd2lsbCBj b3B5IGFsbCBzcWwgY29tbWFuZHMgaW50byBvdXRmaWxlIHJhdGhlciB0aGVuIGV4ZWN1dGluZyB0 aGVtLgorICovCitzdGF0aWMgdm9pZAorcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIGNvbnN0IGNoYXIgKm91dGZpbGUpCit7 CisJY2hhciAgICAgICAgICAgIGdsb2JhbF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlQR3Jlc3Vs dAkJKnJlc3VsdDsKKwlTdHJpbmdJbmZvRGF0YQlzcWxzdGF0ZW1lbnQ7CisJRklMRQkJCSpwZmls ZTsKKworCXNucHJpbnRmKGdsb2JhbF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2JhbC5k YXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBOb3cgb3BlbiBnbG9iYWwuZGF0IGZpbGUuICovCisJ cGZpbGUgPSBmb3BlbihnbG9iYWxfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZp bGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTog XCIlc1wiIiwgZ2xvYmFsX2ZpbGVfcGF0aCk7CisKKwkvKgorCSAqIElmIG91dGZpbGUgaXMgZ2l2 ZW4sIHRoZW4ganVzdCBjb3B5IGFsbCBnbG9iYWwuZGF0IGZpbGUgZGF0YSBpbnRvCisJICogb3V0 ZmlsZS4KKwkgKi8KKwlpZiAob3V0ZmlsZSkKKwl7CisJCWNvcHlfZ2xvYmFsX2ZpbGVfdG9fb3V0 X2ZpbGUob3V0ZmlsZSwgcGZpbGUpOworCQlyZXR1cm47CisJfQorCisJLyogSW5pdCBzcWxzdGF0 ZW1lbnQgdG8gYXBwZW5kIGNvbW1hbmRzLiAqLworCWluaXRTdHJpbmdJbmZvKCZzcWxzdGF0ZW1l bnQpOworCisJLyogUHJvY2VzcyBmaWxlIHRpbGwgRU9GIGFuZCBleGVjdXRlIHNxbCBzdGF0ZW1l bnRzLiAqLworCXdoaWxlIChSZWFkT25lU3RhdGVtZW50KCZzcWxzdGF0ZW1lbnQsIHBmaWxlKSAh PSBFT0YpCisJeworCQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgc3Fsc3RhdGVtZW50LmRh dGEpOworCQlyZXN1bHQgPSBQUWV4ZWMoY29ubiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCisJCXN3 aXRjaCAoUFFyZXN1bHRTdGF0dXMocmVzdWx0KSkKKwkJeworCQkJY2FzZSBQR1JFU19DT01NQU5E X09LOgorCQkJY2FzZSBQR1JFU19UVVBMRVNfT0s6CisJCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZ OgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBl eGVjdXRlIHF1ZXJ5OiBcIiVzXCIgXG5Db21tYW5kIHdhczogXCIlc1wiIiwgUFFlcnJvck1lc3Nh Z2UoY29ubiksIHNxbHN0YXRlbWVudC5kYXRhKTsKKwkJfQorCQlQUWNsZWFyKHJlc3VsdCk7CisJ fQorCisJZmNsb3NlKHBmaWxlKTsKK30KKworLyoKKyAqIGNvcHlfZ2xvYmFsX2ZpbGVfdG9fb3V0 X2ZpbGUKKyAqCisgKiBUaGlzIHdpbGwgY29weSBnbG9iYWwuZGF0IGZpbGUgaW50byBvdXQgZmls ZS4gIElmICItIiBpcyB1c2VkIGFzIG91dGZpbGUsCisgKiB0aGVuIGl0IHdpbGwgdXNlIGludG8g c3Rkb3V0LgorICovCitzdGF0aWMgdm9pZAorY29weV9nbG9iYWxfZmlsZV90b19vdXRfZmlsZShj b25zdCBjaGFyICpvdXRmaWxlLCBGSUxFICpwZmlsZSkKK3sKKwljaGFyCW91dF9maWxlX3BhdGhb TUFYUEdQQVRIXTsKKwlGSUxFCSpPUEY7CisJaW50CQljOworCisJLyogIi0iIGlzIHVzZWQgZm9y IHN0ZG91dC4gKi8KKwlpZiAoc3RyY21wKG91dGZpbGUsICItIikgPT0gMCkKKwkJT1BGID0gc3Rk b3V0OworCWVsc2UKKwl7CisJCXNucHJpbnRmKG91dF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVz Iiwgb3V0ZmlsZSk7CisJCU9QRiA9IGZvcGVuKG91dF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsK KworCQlpZiAoT1BGID09IE5VTEwpCisJCXsKKwkJCWZjbG9zZShwZmlsZSk7CisJCQlwZ19mYXRh bCgiY291bGQgbm90IG9wZW4gZmlsZTogXCIlc1wiIiwgb3V0ZmlsZSk7CisJCX0KKwl9CisKKwkv KiBOb3cgYXBwZW5kIGdsb2JhbC5kYXQgaW50byBvdXQgZmlsZS4gKi8KKwl3aGlsZSAoKGMgPSBm Z2V0YyhwZmlsZSkpICE9IEVPRikKKwkJZnB1dGMoYywgT1BGKTsKKworCWZjbG9zZShwZmlsZSk7 CisKKwkvKiBDbG9zZSBvdXQgZmlsZS4gKi8KKwlpZiAoc3RyY21wKG91dGZpbGUsICItIikgIT0g MCkKKwkJZmNsb3NlKE9QRik7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5k CisgKgorICogYXBwZW5kcyBhIG5vZGUgdG8gdGhlIGxpc3QgaW4gdGhlIGVuZC4KKyAqLworc3Rh dGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0 ICpsaXN0LCBPaWQgZGJfb2lkLAorCQljb25zdCBjaGFyICpkYm5hbWUpCit7CisJU2ltcGxlRGF0 YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbDsKKworCWNlbGwgPSBwZ19tYWxsb2Nfb2JqZWN0KFNpbXBs ZURhdGFiYXNlT2lkTGlzdENlbGwpOworCisJY2VsbC0+bmV4dCA9IE5VTEw7CisJY2VsbC0+ZGJf b2lkID0gZGJfb2lkOworCWNlbGwtPmRiX25hbWUgPSBwZ19zdHJkdXAoZGJuYW1lKTsKKworCWlm IChsaXN0LT50YWlsKQorCQlsaXN0LT50YWlsLT5uZXh0ID0gY2VsbDsKKwllbHNlCisJCWxpc3Qt PmhlYWQgPSBjZWxsOworCWxpc3QtPnRhaWwgPSBjZWxsOworfQorCisvKgorICogc2ltcGxlX2Ri X29pZF9mdWxsX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGFsbCBjZWxsIGZyb20gZGJuYW1l IGFuZCBkYm9pZCBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9mdWxsX2xp c3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCkKK3sKKwlTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RD ZWxsCSpuZXh0Y2VsbCA9IE5VTEw7CisKKwl3aGlsZSAoY2VsbCkKKwl7CisJCW5leHRjZWxsID0g Y2VsbC0+bmV4dDsKKwkJcGZyZWUgKGNlbGwpOworCQljZWxsID0gbmV4dGNlbGw7CisJfQorCisJ bGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1w bGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBz dHJpbmcgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2Rl bGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0KQoreworCVNpbXBsZVN0cmluZ0xpc3RDZWxsCSpj ZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1wbGVTdHJpbmdMaXN0Q2VsbCAgICAqY2VsbG5leHQgPSBO VUxMOworCisJd2hpbGUgKGNlbGwpCisJeworCQljZWxsbmV4dCA9IGNlbGwtPm5leHQ7CisJCXBm cmVlKGNlbGwpOworCQljZWxsID0gY2VsbG5leHQ7CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7 CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfZGVs ZXRlCisgKgorICogZGVsZXRlIGNlbGwgZnJvbSBkYXRhYmFzZSBhbmQgb2lkIGxpc3QuCisgKi8K K3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lk TGlzdCAqbGlzdCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJU2ltcGxl RGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldikKK3sKKwlpZiAocHJldiA9PSBOVUxMKQorCXsKKwkJ bGlzdC0+aGVhZCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCX0KKwllbHNlCisJewor CQlwcmV2LT5uZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJfQorfQorCisvKgor ICogcXVvdGVfbGl0ZXJhbF9pbnRlcm5hbAorICovCitzdGF0aWMgc2l6ZV90CitxdW90ZV9saXRl cmFsX2ludGVybmFsKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuKQorewor CWNvbnN0IGNoYXIgKnM7CisJY2hhcgkgICAqc2F2ZWRzdCA9IGRzdDsKKworCWZvciAocyA9IHNy YzsgcyA8IHNyYyArIGxlbjsgcysrKQorCXsKKwkJaWYgKCpzID09ICdcXCcpCisJCXsKKwkJCSpk c3QrKyA9IEVTQ0FQRV9TVFJJTkdfU1lOVEFYOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkqZHN0 KysgPSAnXCcnOworCXdoaWxlIChsZW4tLSA+IDApCisJeworCQlpZiAoU1FMX1NUUl9ET1VCTEUo KnNyYywgdHJ1ZSkpCisJCQkqZHN0KysgPSAqc3JjOworCQkqZHN0KysgPSAqc3JjKys7CisJfQor CSpkc3QrKyA9ICdcJyc7CisKKwlyZXR1cm4gZHN0IC0gc2F2ZWRzdDsKK30KKworLyoKKyAqIHF1 b3RlX2xpdGVyYWxfY3N0cgorICoKKyAqCSAgcmV0dXJucyBhIHByb3Blcmx5IHF1b3RlZCBsaXRl cmFsCisgKiBjb3BpZWQgZnJvbSBzcmMvYmFja2VuZC91dGlscy9hZHQvcXVvdGUuYworICovCitz dGF0aWMgY2hhciAqCitxdW90ZV9saXRlcmFsX2NzdHIoY29uc3QgY2hhciAqcmF3c3RyKQorewor CWNoYXIJICAgKnJlc3VsdDsKKwlpbnQJCQlsZW47CisJaW50CQkJbmV3bGVuOworCisJbGVuID0g c3RybGVuKHJhd3N0cik7CisKKwkvKiBXZSBtYWtlIGEgd29yc3QtY2FzZSByZXN1bHQgYXJlYTsg d2FzdGluZyBhIGxpdHRsZSBzcGFjZSBpcyBPSyAqLworCXJlc3VsdCA9IHBnX21hbGxvYyhsZW4g KiAyICsgMyArIDEpOworCisJbmV3bGVuID0gcXVvdGVfbGl0ZXJhbF9pbnRlcm5hbChyZXN1bHQs IHJhd3N0ciwgbGVuKTsKKwlyZXN1bHRbbmV3bGVuXSA9ICdcMCc7CisKKwlyZXR1cm4gcmVzdWx0 OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUK aW5kZXggMjE0MjQwZjFhZTUuLmRlNDFlYzA2ZDg2Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAw MV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKQEAgLTIxOSw2 ICsyMTksMTEgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdwZ19yZXN0b3JlOiBvcHRpb25zIC1D XC8tLWNyZWF0ZSBhbmQgLTFcLy0tc2luZ2xlLXRyYW5zYWN0aW9uIGNhbm5vdCBiZSB1c2VkIHRv Z2V0aGVyJwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1l eGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJ cXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3Qg YmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9y ZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRo IC1nLy0tZ2xvYmFscy1vbmx5Jyk7CisKICMgYWxzbyBmYWlscyBmb3IgLXIgYW5kIC10LCBidXQg aXQgc2VlbXMgcG9pbnRsZXNzIHRvIGFkZCBtb3JlIHRlc3RzIGZvciB0aG9zZS4KIGNvbW1hbmRf ZmFpbHNfbGlrZSgKIAlbICdwZ19kdW1wYWxsJywgJy0tZXhjbHVkZS1kYXRhYmFzZT1mb28nLCAn LS1nbG9iYWxzLW9ubHknIF0sCkBAIC0yMjYsNCArMjMxLDggQEAgY29tbWFuZF9mYWlsc19saWtl KAogCSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2Vk IHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCiApOwogCitjb21tYW5kX2ZhaWxzX2xp a2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICd4JyBdLAorCXFyL1xRcGdfZHVtcGFs bDogZXJyb3I6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1w YWxsOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQnKTsKIGRvbmVfdGVzdGluZygpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA5YTNiZWU5M2RlYy4uY2RhZjFhZDM0M2MgMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNjczLDYgKzI2NzMsOCBAQCBTaHV0ZG93bk1vZGUK IFNpZ25UU1ZlY3RvcgogU2ltcGxlQWN0aW9uTGlzdAogU2ltcGxlQWN0aW9uTGlzdENlbGwKK1Np bXBsZURhdGFiYXNlT2lkTGlzdAorU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAogU2ltcGxlRWNv bnRleHRTdGFja0VudHJ5CiBTaW1wbGVPaWRMaXN0CiBTaW1wbGVPaWRMaXN0Q2VsbAotLSAKMi4z OS4zCgo= --0000000000008713c5062d40ba57--