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 1tVZ7f-009bzI-Au for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jan 2025 16:41:36 +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 1tVZ7d-003Q8B-Pv for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jan 2025 16:41:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tVZ7d-003Q82-3i for pgsql-hackers@lists.postgresql.org; Wed, 08 Jan 2025 16:41:33 +0000 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tVZ7a-000Y7o-0l for pgsql-hackers@postgresql.org; Wed, 08 Jan 2025 16:41:31 +0000 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-436a39e4891so224405e9.1 for ; Wed, 08 Jan 2025 08:41:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736354489; x=1736959289; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=0Q/k1zCApzo+YQnpZlUR9MxfndxEgrw49xYtb4odT/0=; b=Au/WtXi0smZrsTrkUg1XPxoNp86tBoonXgL5BG6rOR9b3WbY7UM+8inzxoVXy7ivtO 5H3/773RFkbsXjQE1LXEQ7fTQSN9JNV2Xl8ktUTtu73j1vEtCi6EpOp6HK+27XxMg8PE Mt5kV7dw2kUzqkORjc3F9H6fs/0EX5wlt67Ai925DQjsLmsXM7CMsY+uRaY40APQajAn cOtPXXrxJ4F0X+5yVQn5l1mmqPwKNftvFjv//mIb4b02TSfi1zCCBcvs41csTZlTj4L3 Kim/jzm3oTvDfKNf6QuBTAkMJJJp9CaoQOk+CL1CXHX6DkziJJMsqKYBoBAVkDsDhRPV UmHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736354489; x=1736959289; 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=0Q/k1zCApzo+YQnpZlUR9MxfndxEgrw49xYtb4odT/0=; b=KmKYO9JjCIEeC7i0xnvLE6g7wPPrrTuLFIDyrE+Ndgy/WhIcN/BHojze7LfhJakTWK peRFsQAt5Q71huU19RHvYFjuBM6/NGm4yzl9M//HUkmNNv0xz/nMes//fL/mkMFWbYHc /T4+wPhVHes9p6ixqYLZRSAoLEm0eAxIGbRX46ppNOy189SLx+dV4mcerBc0njQhVi3Y Kb2NCXHZCwWJoeDQKu9M+LNaHlZnn4ogkS9N2OTzZ6YQnYleh2ANERVYKsN0fdU7+rce BpQxmF/eS5Xah7rCQVpQiLIZSPqg1xeCl0XsnpVsggQIp7EoMG2Lid6XmZG9OT3ksYoy RAVA== X-Forwarded-Encrypted: i=1; AJvYcCXp2ZJB/4QTRZAo0QjAb5XxKaarkIR8Qo2p5jIYSCvFsa+Fq35u495GZXDE4fZKS2nBo3JEX7LWRSWouL5m@postgresql.org X-Gm-Message-State: AOJu0Yy4LivnATTRuounddMuNys+QM52+mr6j2hBU8iXdm09Cxi5L0Pe 5TbvIXZJb9q54BTlzZ94jWXHHkxbOHG9psrwitlkxecJlUHaq4QSvk+ov30w/xDsAaeDT20XZ6z Erm4P03DIWxZ3TxgOjb711HGzCb8= X-Gm-Gg: ASbGncsfu1teZDjq2PlZkReg/25p0M64LZE7mc7tQ2w1G1DBTtBHlf6M8XXr5ioA50R oB2wrMAl1bWSQT/FLCr2R8cfm9nBicToH4lm2Z2s= X-Google-Smtp-Source: AGHT+IEGFw68j4n3FnvyizM6yil/j7YLzjdUlI6utD2yhDHTOJjGo9+wypWEv8uGuOxiRGZEIFcFVKTetfDbZC9Ntv0= X-Received: by 2002:a05:600c:a44:b0:434:a852:ba6d with SMTP id 5b1f17b1804b1-436e2692d98mr31372535e9.9.1736354488896; Wed, 08 Jan 2025 08:41:28 -0800 (PST) MIME-Version: 1.0 References: <740696.1718036463@sss.pgh.pa.us> In-Reply-To: From: Mahendra Singh Thalor Date: Wed, 8 Jan 2025 22:11:17 +0530 X-Gm-Features: AbW1kvZAD30IOlsJeGoh5GtxGwKIyWSKQ4zrwvzvGlPH8bop6NBxU1EDJ_T5Jdo Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Nathan Bossart Cc: Magnus Hagander , Tom Lane , Andrew Dunstan , PostgreSQL-development , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000083e67d062b3488cd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000083e67d062b3488cd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 8 Jan 2025 at 20:07, Mahendra Singh Thalor wro= te: > > Hi all, > > On Wed, 8 Jan 2025 at 00:34, Mahendra Singh Thalor w= rote: > > > > On Mon, 6 Jan 2025 at 23:05, Nathan Bossart = wrote: > > > > > > On Thu, Jan 02, 2025 at 02:05:13AM +0530, Mahendra Singh Thalor wrote= : > > > > Here, I am attaching an updated patch. I fixed some bugs of v01 pat= ch and > > > > did some code cleanup also. > > > > > > Thank you for picking this up! I started to review it, but the > > > documentation changes didn't build, and a few tests in check-world ar= e > > > failing. Would you mind resolving those issues? Also, if you haven'= t > > > already, please add an entry to the next commitfest [0] to ensure tha= t 1) > > > this feature is tracked and 2) the automated tests will run. > > > > Thanks Nathan for the quick response. > > > > I fixed bugs of documentation changes and check-world in the latest pat= ch. Now docs are building and check-world is passing. > > > > I added entry into commitfest for this patch.[0] > > > > > > > > + if (dbfile) > > > + { > > > + printfPQExpBuffer(&cmd, "\"%s\" %s %s", pg_dump_bin, > > > + dbfile, create_opts= ); > > > + appendPQExpBufferStr(&cmd, " -F d "); > > > + } > > > > > > Have you given any thought to allowing a directory of custom format f= iles, > > > as discussed upthread [1]? Perhaps that is better handled as a follo= w-up > > > patch, but it'd be good to understand the plan, anyway. > > > > I will make these changes and will test. I will update my findings afte= r doing some testing. > > In the latest patch, I added dump and restoring for directory/custom/tar/= plain formats. Please consider this patch for review and testing. > > Design: > When we give --format=3Dd|c|t then we are dumping all global sql commands= in global.dat in plain sql format and we are making a map.dat file with db= name and dboid. For each database, we are making separate subdirectory with= dboid under databases directory and dumping as per archive format(d|c|t). > While restoring, first we are restoring all global sql commands from glob= al.dat and then we are restoring one by one all databases. As we are suppo= rting --exclude-database with pg_dumpall, the same we are supporting with p= g_restore also to skip restoring on some specified database patterns. > If we want to restore a single database, then we can specided particular = subdirectory from the databases folder. To get file name, we refer dbname i= nto map.file. > > TODO: Now I will work on test cases for these new added options to the pg= _dumpall and pg_restore. > > Here, I am attaching the v04 patch for testing and review. Sorry. My mistake. v04 was the delta patch on the top of v03. Here, I am attaching the v05 patch for testing and review. > > > > > Apart from these bugs, I added code to handle --exclude-database=3D PAT= TERN. Earlier I was using NAME only to skip databases for restore. > > > > TODO: .pl test cases for new added options. > > > > Here, I am attaching an updated patch for review and feedback. > > > > > > > > [0] https://commitfest.postgresql.org > > > [1] https://postgr.es/m/CABUevExoQ26jo%2BaQ9QZq%2BUMA1aD6gfpm9xBnh_t5= e0DhaCeRYA%40mail.gmail.com > > > > > > -- > > > nathan > > > > -- > > Thanks and Regards > > Mahendra Singh Thalor > > EnterpriseDB: http://www.enterprisedb.com > > > > -- > Thanks and Regards > Mahendra Singh Thalor > EnterpriseDB: http://www.enterprisedb.com --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000083e67d062b3488cd Content-Type: application/octet-stream; name="v05_pg_dumpall-with-directory-tar-custom-format-08-jan.patch" Content-Disposition: attachment; filename="v05_pg_dumpall-with-directory-tar-custom-format-08-jan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5o4m5wq0 RnJvbSBhYzYwOGE3NTBmYTU1OTQ5MmI5NjFjN2RjZDJmNGIxZmU0N2E3ZDNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogV2VkLCA4IEphbiAyMDI1IDIyOjA1OjM3ICswNTMwClN1YmplY3Q6IFtQQVRD SF0gcGdfZHVtcGFsbCB3aXRoIGRpcmVjdG9yeXx0YXJ8Y3VzdG9tIGZvcm1hdCBhbmQgcmVzdG9y ZSAgaXQgCiBieSBwZ19yZXN0b3JlCgpuZXcgb3B0aW9uIHRvIHBnX2R1bXBhbGw6Ci1GLCAtLWZv cm1hdD1kfHR8Y3xwICBvdXRwdXQgZmlsZSBmb3JtYXQgKCBwbGFpbiB0ZXh0IChkZWZhdWx0KSkK CkV4OjEgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtLWZpbGU9ZHVtcERpck5hbWUK RXg6MiAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDozIC4v cGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20gLS1maWxlPWR1bXBEaXJOYW1lCkV4OjQgLi9wZ19k dW1wYWxsIC0tZm9ybWF0PXBsYWluIC0tZmlsZT1kdW1wRGlyTmFtZQoKZHVtcHMgYXJlIGFzOgpn bG9iYWwuZGF0IDo6OiBnbG9iYWwgc3FsIGNvbW1hbmRzIGluIHNpbXBsZSBwbGFpbiBmb3JtYXQK bWFwLmRhdC4gICA6OjogZGJvaWQgZGJuYW1lIC0tLWVudHJpZXMgZm9yIGFsbCBkYXRhYmFzZXMg aW4gc2ltcGxlIHRleHQgZm9ybQpkYXRhYmFzZXMuIDo6OgogICAgICBzdWJkaXIgICAgIGRib2lk MSAgLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAgICBzdWJk aXIgICAgIGRib2lkMi4gLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1h dAogICAgICAgICAgICAgIGV0YwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTk9URToKaWYgbmVlZGVkLCBy ZXN0b3JlIHNpbmdsZSBkYiBieSBwYXJ0aWN1bGFyIHN1YmRpcgoKRXg6IC4vcGdfcmVzdG9yZSAt LWZvcm1hdD1kaXJlY3RvcnkgLWQgcG9zdGdyZXMgZHVtcERpck5hbWUvZGF0YWJhc2VzLzUKICAg LS0gaGVyZSwgNSBpcyB0aGUgZGJvaWQgb2YgcG9zdGdyZXMgZGIKICAgLS0gdG8gZ2V0IGRib2lk LCByZWZlciBkYm5hbWUgaW4gbWFwLmZpbGUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5ldyBvcHRpb25z IHRvIHBnX3Jlc3RvcmU6Ci1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5 IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXMKLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4g ICBleGNsdWRlIGRhdGFiYXNlIHdob3NlIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuCgpXaGVuIHdlIGdp dmUgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uLCB0aGVuIG9ubHkgcmVzdG9yZSBnbG9iYWxzLCBu byBkYiByZXN0b3JpbmcuCgpEZXNpZ246CldoZW4gLS1mb3JtYXQ9ZHx0fGMgaXMgc3BlY2lmaWVk IGFuZCB0aGVyZSBpcyBubyB0b2MuZGF0IGluIG1haW4gZGlyZWN0b3J5LCB0aGVuIGNoZWNrCmZv ciBnbG9iYWwuZGF0IGFuZCBtYXAuZGF0IHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gSWYgYm90 aCBmaWxlcyBhcmUgZXhpc3RzIGluIGRpcmVjdG9yeSwKdGhlbiBmaXJzdCByZXN0b3JlIGFsbCBn bG9iYWxzIGZyb20gZ2xvYmFsLmRhdCBhbmQgdGhlbiByZXN0b3JlIGFsbCBkYXRhYmFzZXMgb25l IGJ5IG9uZQpmcm9tIG1hcC5kYXQgbGlzdC4KClRPRE8xOiB0ZXN0IGNhc2VzIGZvciBuZXcgYWRk ZWQgb3B0aW9ucy4KClRPRE8yOiBXZSBjYW4gZHVtcCBhbmQgcmVzdG9yZSBkYXRhYmFzZXMgaW4g cGFyYWxsZWwgbW9kZS4KVGhpcyBuZWVkcyBtb3JlIHN0dWR5LgotLS0KIGRvYy9zcmMvc2dtbC9y ZWYvcGdfZHVtcGFsbC5zZ21sIHwgIDY3ICsrKwogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3Jl LnNnbWwgfCAgMzAgKysKIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgIHwgMTcwICsr KysrKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgIHwgNzgxICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0KIDQgZmlsZXMgY2hhbmdlZCwgMTAyMCBpbnNlcnRpb25zKCsp LCAyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBh bGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4IDAxNGYyNzky NTguLjc3YThkNmEwYzUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xMjUsNiArMTI1 LDczIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAg PC92YXJsaXN0ZW50cnk+CiAKKzx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1G IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZvcm1hdCBvZiBk dW1wIGZpbGVzLiAgSWYgd2Ugd2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJhc2VzLAorICAgICAg ICB0aGVuIHBhc3MgdGhpcyBhcyBkaXJlY3Rvcnkgc28gdGhhdCBkdW1wIG9mIGFsbCBkYXRhYmFz ZXMgY2FuIGJlIHRha2VuCisgICAgICAgIGluIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiBhcmNo aXZlIGZvcm1hdC4KKyAgICAgICAgYnkgZGVmYXVsdCwgdGhpcyBpcyBwbGFpbi4KKworICAgICAg IDx2YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48 bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVj dG9yeTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBh cmE+CisgICAgICAgICAgIE91dHB1dCBhIGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJs ZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGlzIHdpbGwgY3JlYXRlIGEgZGlyZWN0b3J5 CisgICAgICAgICAgIHdpdGggb25lIGZpbGUgZm9yIGVhY2ggdGFibGUgYW5kIGxhcmdlIG9iamVj dCBiZWluZyBkdW1wZWQsIHBsdXMgYSBzby1jYWxsZWQgVGFibGUgb2YgQ29udGVudHMKKyAgICAg ICAgICAgZmlsZSBkZXNjcmliaW5nIHRoZSBkdW1wZWQgb2JqZWN0cyBpbiBhIG1hY2hpbmUtcmVh ZGFibGUgZm9ybWF0IHRoYXQgcGdfcmVzdG9yZSBjYW4gcmVhZC4gQQorICAgICAgICAgICBkaXJl Y3RvcnkgZm9ybWF0IGFyY2hpdmUgY2FuIGJlIG1hbmlwdWxhdGVkIHdpdGggc3RhbmRhcmQgVW5p eCB0b29sczsgZm9yIGV4YW1wbGUsIGZpbGVzIGluIGFuCisgICAgICAgICAgIHVuY29tcHJlc3Nl ZCBhcmNoaXZlIGNhbiBiZSBjb21wcmVzc2VkIHdpdGggdGhlIGd6aXAsIGx6NCwgb3IgenN0ZCB0 b29scy4gVGhpcyBmb3JtYXQgaXMgY29tcHJlc3NlZAorICAgICAgICAgICBieSBkZWZhdWx0IHVz aW5nIGd6aXAgYW5kIGFsc28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCisgICAgICAgICAgPC9w YXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAg ICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+ PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgor ICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQg YSBwbGFpbi10ZXh0IFNRTCBzY3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFs PjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+ CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1 dCBhIGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0 b3JlLiBUb2dldGhlciB3aXRoIHRoZQorICAgICAgICAgICBkaXJlY3Rvcnkgb3V0cHV0IGZvcm1h dCwgdGhpcyBpcyB0aGUgbW9zdCBmbGV4aWJsZSBvdXRwdXQgZm9ybWF0IGluIHRoYXQgaXQgYWxs b3dzIG1hbnVhbAorICAgICAgICAgICBzZWxlY3Rpb24gYW5kIHJlb3JkZXJpbmcgb2YgYXJjaGl2 ZWQgaXRlbXMgZHVyaW5nIHJlc3RvcmUuIFRoaXMgZm9ybWF0IGlzIGFsc28KKyAgICAgICAgICAg Y29tcHJlc3NlZCBieSBkZWZhdWx0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8 dGVybT48bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUg c3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIHRhciBmb3JtYXQgaXMKKyAg ICAgICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBkaXJlY3RvcnkgZm9ybWF0OiBleHRyYWN0aW5n IGEgdGFyLWZvcm1hdCBhcmNoaXZlIHByb2R1Y2VzIGEgdmFsaWQKKyAgICAgICAgICAgZGlyZWN0 b3J5LWZvcm1hdCBhcmNoaXZlLiBIb3dldmVyLCB0aGUgdGFyIGZvcm1hdCBkb2VzIG5vdCBzdXBw b3J0IGNvbXByZXNzaW9uLiBBbHNvLAorICAgICAgICAgICB3aGVuIHVzaW5nIHRhciBmb3JtYXQg dGhlIHJlbGF0aXZlIG9yZGVyIG9mIHRhYmxlIGRhdGEgaXRlbXMgY2Fubm90IGJlIGNoYW5nZWQg ZHVyaW5nIHJlc3RvcmUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4K KyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZmlsdGVyPTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5maWxlbmFtZTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90 ZXJtPgogICAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19y ZXN0b3JlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCBiOGIy N2UxNzE5Li5hYjJlMDM1NjcxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3Rv cmUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMzE1LDYg KzMxNSwxNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48 b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMt b25seTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgUmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMp LCBubyBkYXRhYmFzZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAg PC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRp b24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48 L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CkBA IC05MzIsNiArOTQyLDI2IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0 aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAg IDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3 aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJl IGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAgPG9wdGlvbj4tLWV4Y2x1ZGUt ZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJhbWV0ZXIgaXMKKyAgICAg ICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyB1 c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyA8bGl0ZXJh bD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAt cHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxlIGRhdGFiYXNlcyBjYW4gYWxz byBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAgICAgIGNoYXJhY3RlcnMgaW4g dGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUgY2FyZWZ1bCB0bworICAgICAg ICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVudCBzaGVsbCB3aWxkY2FyZCBl eHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJs aXN0ZW50cnk+CisKKwogICAgIDwvdmFyaWFibGVsaXN0PgogICAgPC9wYXJhPgogIDwvcmVmc2Vj dDE+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCAzOTZmNzk3ODFjLi5iMzBkYmQ4YzNiIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wYWxsLmMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgi CiAKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1 bmlzdGQuaD4KIApAQCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1 ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwLmgiCisjaW5jbHVkZSAicGdf YmFja3VwX2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZy b20gcGdfZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdy ZVNRTCkgIiBQR19WRVJTSU9OICJcbiIKQEAgLTY0LDkgKzY2LDEwIEBAIHN0YXRpYyB2b2lkIGRy b3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2Vz KFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0 aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1l KTsKLXN0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2b2lk IGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0 KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBp bnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMp Oworc3RhdGljIGludCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpj cmVhdGVfb3B0cywKKwkJCQkJIGNoYXIgKmRiZmlsZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZv cm1hdCk7CiBzdGF0aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJ CQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0 IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKm9iam5hbWUsCkBAIC04MSw2ICs4NCw3IEBAIHN0 YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkp Owogc3RhdGljIHZvaWQgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBs ZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAogCQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1l cyk7CiBzdGF0aWMgdm9pZCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFt ZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybik7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJz ZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9i aW5bTUFYUEdQQVRIXTsKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZTsKQEAgLTE0Nyw2ICsx NTEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19h cmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5V TEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9y bWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZv bGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0 dGVyCkBAIC0xODgsNiArMTkzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNo YXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBj aGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQg PSBhcmNoTnVsbDsKKwljb25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVlCXBy b21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwog CWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjM3LDcgKzI0NCw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpP cDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUg KChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2 d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykK IAkJewpAQCAtMjY1LDcgKzI3Miw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNo ZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAn Ric6CisJCQkJZm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJ Y2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQxNCw2 ICs0MjMsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmljZWx5KDEp OwogCX0KIAorCWFyY2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOwor CiAJLyoKIAkgKiBJZiBwYXNzd29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVt cCwgc3dpdGNoIHRvIHVzaW5nCiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWws IGp1c3QgbW9yZSBsaWtlbHkgdG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ5Nyw5ICs1MDgsMzEg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1 ZGVfbmFtZXMpOwogCiAJLyoKLQkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwg b3RoZXJ3aXNlIHVzZSBzdGRvdXQKKwkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJl ZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuCiAJICovCi0JaWYgKGZpbGVuYW1lKQorCWlmIChhcmNo RHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRIXTsK KworCQkvKgorCQkgKiBJZiBkaXJlY3RvcnkgZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIHdlIG11 c3QgcHJvdmlkZSB0aGUgZGlyZWN0b3J5CisJCSAqIG5hbWUuCisJCSAqLworCQlpZiAoIWZpbGVu YW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09IDApCisJCQlwZ19mYXRhbCgibm8gb3V0cHV0 IGRpcmVjdG9yeSBzcGVjaWZpZWQiKTsKKworCQkvKiBUT0RPOiBhY2NlcHQgdGhlIGVtcHR5IGV4 aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJaWYgKG1rZGlyKGZpbGVuYW1lLCAwNzAwKSA8IDApCisJ CQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJ CSBmaWxlbmFtZSk7CisKKwkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2Jh bC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJT1BGID0gZm9wZW4odG9jX3BhdGgsICJ3Iik7CisJCWlm ICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTogJXMi LCBzdHJlcnJvcihlcnJubykpOworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKIAl7CiAJCU9QRiA9 IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7CiAJCWlmICghT1BGKQpAQCAtNjA3LDcgKzY0 MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl9CiAKIAlpZiAoIWdsb2JhbHNf b25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25seSkKLQkJZHVtcERhdGFiYXNl cyhjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhjb25uLCBhcmNoRHVtcEZvcm1hdCk7CiAKIAlQUWZp bmlzaChjb25uKTsKIApAQCAtNjIwLDcgKzY1Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUsIGVy cm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFt ZSwgZmFsc2UpOwogCX0KIApAQCAtNjM3LDYgKzY3MCw4IEBAIGhlbHAodm9pZCkKIAogCXByaW50 ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJ TEVOQU1FICAgICAgICAgIG91dHB1dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwg LS1mb3JtYXQ9Y3xkfHR8cCAgICAgICAgIG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJl Y3RvcnksIHRhcixcbiIKKwkJCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRl eHQgKGRlZmF1bHQpKVxuIikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAg ICAgICAgdmVyYm9zZSBtb2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAg ICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJ cHJpbnRmKF8oIiAgLS1sb2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRp bmcgVElNRU9VVCBmb3IgYSB0YWJsZSBsb2NrXG4iKSk7CkBAIC0xNDg3LDEwICsxNTIyLDEzIEBA IGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBv ZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29u bikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9y bWF0KQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltN QVhQR1BBVEhdOworCWNoYXIJCWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFICAgICAgICpt YXBfZmlsZTsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nv bm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE1MDQsNyArMTU0Miw3IEBA IGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21lIGZhaWx1 cmUgbW9kZSB3aXRoIC0tY2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0J CQkJCSAgICJTRUxFQ1QgZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwgb2lkICIK IAkJCQkJICAgIkZST00gcGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nv bm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBCWSAoZGF0bmFtZSA8 PiAndGVtcGxhdGUxJyksIGRhdG5hbWUiKTsKQEAgLTE1MTIsOSArMTU1MCwzMCBAQCBkdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubikKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQogCQlmcHJpbnRm KE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNcbi0tXG5cbiIpOwogCisJLyoKKwkgKiBJZiBkaXJlY3Rv cnkgZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSB1bmRlciB0 aGUKKwkgKiBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUgd2lsbCBi ZSBjcmVhdGVkIHVuZGVyIHRoZQorCSAqIHN1YmRpcmVjdG9yeSBpbiBhcmNoaXZlIG1vZGUgYXMg cGVyIHNpbmdsZSBkYiBwZ19kdW1wLgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNo TnVsbCkKKwl7CisJCWNoYXIgICAgbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCisJCXNucHJp bnRmKGRiX3N1YmRpciwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzIiwgZmlsZW5hbWUpOworCQlp ZiAobWtkaXIoZGJfc3ViZGlyLCAwNzU1KSAhPSAwKQorCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBu b3QgY3JlYXRlIHN1YmRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCQkvKiBD cmVhdGUgYSBtYXAgZmlsZSAodG8gc3RvcmUgZGJvaWQgYW5kIGRibmFtZSkgKi8KKwkJc25wcmlu dGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsKKwkJ bWFwX2ZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCAidyIpOworCQlpZiAoIW1hcF9maWxlKQor CQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG1hcCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5v KSk7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQlj aGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CisJCWNoYXIJICAgKm9pZCA9 IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKIAkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CiAJCWlu dAkJCXJldDsKIApAQCAtMTUyMiw2ICsxNTgxLDE0IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpj b25uKQogCQlpZiAoc3RyY21wKGRibmFtZSwgInRlbXBsYXRlMCIpID09IDApCiAJCQljb250aW51 ZTsKIAorCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCXsKKwkJCXNucHJpbnRm KGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIi1mICVzLyVzIiwgZGJfc3ViZGlyLCBvaWQpOworCisJ CQkvKiBhcHBlbmQgZGJvaWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYo bWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lkLCBkYm5hbWUpOworCQl9CisKIAkJLyogU2tpcCBhbnkg ZXhwbGljaXRseSBleGNsdWRlZCBkYXRhYmFzZSAqLwogCQlpZiAoc2ltcGxlX3N0cmluZ19saXN0 X21lbWJlcigmZGF0YWJhc2VfZXhjbHVkZV9uYW1lcywgZGJuYW1lKSkKIAkJewpAQCAtMTUzMSw3 ICsxNTk4LDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAKIAkJcGdfbG9nX2luZm8o ImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKIAotCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgZGJuYW1lKTsKKwkJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2Ug XCIlc1wiIGR1bXBcbi0tXG5cbiIsIGRibmFtZSk7CiAKIAkJLyoKIAkJICogV2UgYXNzdW1lIHRo YXQgInRlbXBsYXRlMSIgYW5kICJwb3N0Z3JlcyIgYWxyZWFkeSBleGlzdCBpbiB0aGUKQEAgLTE1 NDksMjAgKzE2MTcsMjEgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCQl7CiAJCQkJ Y3JlYXRlX29wdHMgPSAiIjsKIAkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29u bmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNc blxuIiwgZGJuYW1lKTsKKwkJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJ CWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CiAJCQl9CiAJCX0KIAkJ ZWxzZQogCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOwogCi0JCWlmIChmaWxlbmFtZSkKKwkJ aWYgKChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkgJiYgZmlsZW5hbWUpCiAJCQlmY2xvc2Uo T1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cyk7CisJCXJldCA9 IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzLCBkYmZpbGVwYXRoLCBhcmNoRHVtcEZvcm1h dCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRh YmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCi0JCWlmIChmaWxlbmFtZSkKKwkJaWYg KChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkgJiYgZmlsZW5hbWUpCiAJCXsKIAkJCU9QRiA9 IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9QRikKQEAgLTE1NzEsNiAr MTY0MCwxMCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJfQogCX0KIAorCS8qIENs b3NlIG1hcCBmaWxlICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xv c2UobWFwX2ZpbGUpOworCiAJUFFjbGVhcihyZXMpOwogfQogCkBAIC0xNTgwLDcgKzE2NTMsOCBA QCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwg d2l0aCBzcGVjaWZpZWQgb3B0aW9ucy4KICAqLwogc3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3Qg Y2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlLAorCQlB cmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBRRXhwQnVmZmVyRGF0YSBjb25uc3Ry YnVmOwogCVBRRXhwQnVmZmVyRGF0YSBjbWQ7CkBAIC0xNTg5LDE3ICsxNjYzLDM4IEBAIHJ1blBn RHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQ UUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJaW5pdFBRRXhwQnVmZmVyKCZjbWQpOwogCi0JcHJp bnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAotCQkJCQkg IHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKLQogCS8qCi0JICogSWYgd2UgaGF2ZSBh IGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAotCSAq IGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWluIGR1bXAsIHRoZW4gYXBwZW5kIGZp bGUgbmFtZSBhbmQgZHVtcCBmb3JtYXQgdG8KKwkgKiB0aGUgcGdfZHVtcCBjb21tYW5kLgogCSAq LwotCWlmIChmaWxlbmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7 CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZm ZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUsIGNy ZWF0ZV9vcHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUYgZCAiKTsKKwkJZWxzZSBpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIg LUYgYyAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUYgdCAiKTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImlu dmFsaWQgZHVtcCBmb3JtYXQgJWQsIHNwZWNpZmllZCwgcGxlYXNlIHVzZSBkL2MvcCBvbmx5Iiwg YXJjaER1bXBGb3JtYXQpOworCX0KIAllbHNlCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQs ICIgLUZwICIpOworCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIs IHBnX2R1bXBfYmluLAorCQkJCQkJcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOworCisJ CS8qCisJCSogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFp bi1hcHBlbmQgcGdfZHVtcAorCQkqIGZvcm1hdC4KKwkJKi8KKwkJaWYgKGZpbGVuYW1lKQorCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJCWVsc2UKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCX0KIAogCS8qCiAJICogQXBwZW5kIHRoZSBk YXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0cnVjdGVkIHN0ZW0gb2YgY29ubmVjdGlv bgpAQCAtMTk5NCwzICsyMDg5LDMwIEBAIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIg KmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZz dGF0ZSk7CiB9CisKK3N0YXRpYyBBcmNoaXZlRm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29uc3Qg Y2hhciAqZm9ybWF0KQoreworCUFyY2hpdmVGb3JtYXQJYXJjaER1bXBGb3JtYXQ7CisKKwlpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJjIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNo Q3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAo Zm9ybWF0LCAiZCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwll bHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImRpcmVjdG9yeSIpID09IDApCisJCWFyY2hE dW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgInAiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBn X3N0cmNhc2VjbXAoZm9ybWF0LCAicGxhaW4iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFy Y2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwg InRhciIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBnX2Zh dGFsKCJpbnZhbGlkIGR1bXAgZm9ybWF0IFwiJXNcIiBzcGVjaWZpZWQiLCBmb3JtYXQpOworCisJ cmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKaW5kZXggODhhZTM5ZDkz OC4uZTZhNzBhZGVhOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCkBAIC00MSwyNyArNDEsNjkgQEAKICNp bmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxz eXMvc3RhdC5oPgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgog I2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbXByZXNz X2lvLmgiCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29w dGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1 ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGFyYWxs ZWwuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKICNpbmNsdWRlICJwZ19iYWNr dXBfdXRpbHMuaCIKIAordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAor eworCXN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0OworCU9pZAkJCQkJCQkJ CWRiX29pZDsKKwljb25zdCBjaGFyCQkJCQkJCSpkYl9uYW1lOworfSBTaW1wbGVEYXRhYmFzZU9p ZExpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3QKK3sKKwlT aW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpoZWFkOworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENl bGwgKnRhaWw7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdDsKKworc3RhdGljIHZvaWQKK3NpbXBs ZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJf b2lkLCBjb25zdCBjaGFyICpkYm5hbWUpOworCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFy ICpwcm9nbmFtZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFy ICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wgSXNGaWxlRXhp c3RzSW5EaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Citz dGF0aWMgYm9vbCByZXN0b3JlT25lRGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywK KwkJUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBQR2Nvbm4g KmNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5fc3Ry aW5nLAorCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hh ciAqcGd1c2VyLAorCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJv cik7CitzdGF0aWMgUEdyZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnF1ZXJ5KTsKK3N0YXRpYyBpbnQgUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVm LCBGSUxFICpmX2dsbyk7CitzdGF0aWMgaW50IHJlc3RvcmVBbGxEYXRhYmFzZXMoUEdjb25uICpj b25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1 ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7CitzdGF0 aWMgdm9pZCBleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICpkdW1wZGlycGF0aCk7CitzdGF0aWMgaW50IGZpbHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3Jl KFBHY29ubiAqY29ubiwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3Qs IFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50IGdldF9k Ym5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworc3RhdGljIHZvaWQgc2ltcGxl X2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9v aWQsCisJCWNvbnN0IGNoYXIgKmRibmFtZSk7CitzdGF0aWMgYm9vbCBpc19mdWxsX3BhdHRlcm4o UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnB0cm4pOworc3RhdGlj IHZvaWQgc2ltcGxlX3N0cmluZ19saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0LAor CQlTaW1wbGVTdHJpbmdMaXN0Q2VsbCAqY2VsbCwgU2ltcGxlU3RyaW5nTGlzdENlbGwgKnByZXYp Oworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9p ZExpc3QgKmxpc3QsCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKmNlbGwsIFNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwgKnByZXYpOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9j b2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJICAg KmlucHV0RmlsZVNwZWM7CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0gMDsKIAlzdGF0 aWMgaW50CWVuYWJsZV9yb3dfc2VjdXJpdHkgPSAwOwpAQCAtNzcsMTEgKzExOSwxNCBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAlzdGF0aWMgaW50CXN0cmljdF9uYW1lcyA9IDA7CiAJ Ym9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlT aW1wbGVTdHJpbmdMaXN0ICAgIGRiX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CisJ Ym9vbAkJCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKIAogCXN0cnVjdCBvcHRpb24gY21kb3B0c1td ID0gewogCQl7ImNsZWFuIiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBOVUxMLCAn Qyd9LAogCQl7ImRhdGEtb25seSIsIDAsIE5VTEwsICdhJ30sCisJCXsiZ2xvYmFscy1vbmx5Iiwg MCwgTlVMTCwgJ2cnfSwKIAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4aXQtb24t ZXJyb3IiLCAwLCBOVUxMLCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVMTCwgJ04n fSwKQEAgLTEyOCw2ICsxNzMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJu by1zZWN1cml0eS1sYWJlbHMiLCBub19hcmd1bWVudCwgJm5vX3NlY3VyaXR5X2xhYmVscywgMX0s CiAJCXsibm8tc3Vic2NyaXB0aW9ucyIsIG5vX2FyZ3VtZW50LCAmbm9fc3Vic2NyaXB0aW9ucywg MX0sCiAJCXsiZmlsdGVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDR9LAorCQl7ImV4Y2x1 ZGUtZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCiAKIAkJe05VTEwsIDAs IE5VTEwsIDB9CiAJfTsKQEAgLTE1Niw3ICsyMDIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJfQogCX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJh Y0NkOmVmOkY6aDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMg PSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYUFjQ2Q6ZWY6RjpnaDpJOmo6bEw6bjpOOk9wOlA6 UnNTOnQ6VDpVOnZ3V3gxIiwKIAkJCQkJCQljbWRvcHRzLCBOVUxMKSkgIT0gLTEpCiAJewogCQlz d2l0Y2ggKGMpCkBAIC0xODMsMTEgKzIyOSwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Zm9ybWF0TmFtZSA9 IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOworCQkJY2FzZSAnZyc6CisJCQkJLyogcmVz dG9yZSBvbmx5IGdsb2JhbC5kYXQgZmlsZSBmcm9tIGRpcmVjdG9yeSAqLworCQkJCWdsb2JhbHNf b25seSA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9w dGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJn KTsKIAkJCQlicmVhazsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9i cyAqLwogCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAog CQkJCQkJCQkJICBQR19NQVhfSk9CUywKQEAgLTMwMiw2ICszNTEsMTAgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJCQkJCWV4aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9vbl9lcnJvciA9 IHRydWU7CiAJCQkJYnJlYWs7CisJCQljYXNlIDY6CisJCQkJLyogbGlzdCBvZiBkYXRhYmFzZXMg cGF0dGVybnMgdGhvc2UgbmVlZHMgdG8gc2tpcCB3aGlsZSByZXN0b3JpbmcgKi8KKwkJCQlzaW1w bGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJ CWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRl ZCBhIGNvbXBsYWludCAqLwpAQCAtMzI5LDYgKzM4MiwxNiBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAlpZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFtZSAm JiAhb3B0cy0+dG9jU3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBhbmQg LWYvLS1maWxlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJu cy5oZWFkICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRp b24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1n bG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZv ciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQor CisJaWYgKGdsb2JhbHNfb25seSAmJiBvcHRzLT5jcGFyYW1zLmRibmFtZSA9PSBOVUxMKQorCQlw Z19mYXRhbCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IHJlcXVpcmVzIG9wdGlvbiAtZC8tLWRi bmFtZSIpOworCiAJLyogU2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2Ug dXNlciBpcyBjb25mdXNlZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBAIC00 MDYsNiArNDY5LDczIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCisJ LyoKKwkgKiBJZiB0b2MuZGF0IGZpbGUgZG9lcyBub3QgcHJlc2VudCBpbiBjdXJyZW50IHBhdGgs IHRoZW4gY2hlY2sgZm9yCisJICogZ2xvYmFsLmRhdCBhbmQgbWFwLmRhdCBmaWxlcy4gIElmIGJv dGggZmlsZXMgYXJlIHByZXNlbnQsIHRoZW4KKwkgKiByZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2Vz IGZyb20gbWFwLmRhdCBmaWxlIGxpc3QgYW5kIHNraXAgcmVzdG9yaW5nIGZvcgorCSAqIC0tZXhj bHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxM ICYmCisJCQkhSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5kYXQi KSkKKwl7CisJCS8qIElmIGdsb2JhbC5kYXQgYW5kIG1hcC5kYXQgYXJlIGV4aXN0LCB0aGVuIHBy b2NlcyB0aGVtLiAqLworCQlpZiAoSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkocGdfc3RyZHVwKGlu cHV0RmlsZVNwZWMpLCAiZ2xvYmFsLmRhdCIpCisJCQkJJiYgSXNGaWxlRXhpc3RzSW5EaXJlY3Rv cnkocGdfc3RyZHVwKGlucHV0RmlsZVNwZWMpLCAibWFwLmRhdCIpKQorCQl7CisJCQlQR2Nvbm4J KmNvbm4gPSBOVUxMOyAvKiBDb25uZWN0aW9uIHRvIHJlc3RvcmUgZ2xvYmFsIHNxbCBjb21tYW5k cy4gKi8KKworCQkJLyoKKwkJCSAqIElmIHdlIGFyZSByZXN0b3JpbmcgZHVtcCBvZiBtdWx0aXBs ZSBkYXRhYmFzZXMsIHRoZW4gY29ubmVjdGlvbgorCQkJICogc2hvdWxkIGJlIGdpdmVuLgorCQkJ ICovCisJCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUgPT0gTlVMTCkKKwkJCQlwZ19mYXRhbCgi IC1kLy0tZGJhbm1lIHNob3VsZCBiZSBnaXZlbiB3aGVuIHVzaW5nIGFyY2hpdmUgZHVtcCBvZiBw Z19kdW1wYWxsIik7CisKKwkJCS8qCisJCQkgKiBUbyByZXN0b3JlIG11bHRpcGxlIGRhdGFiYXNl cywgY3JlYXRlIGRhdGFiYXNlIG9wdGlvbiBzaG91bGQgYmUKKwkJCSAqIHNwZWNpZmllZC4KKwkJ CSAqLworCQkJaWYgKG9wdHMtPmNyZWF0ZURCICE9IDEpCisJCQkJcGdfZmF0YWwoIm9wdGlvbiAt Qy8tLWNyZWF0ZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gdXNpbmcgZHVtcCBvZiBwZ19kdW1w YWxsIik7CisKKwkJCS8qIENvbm5lY3QgdG8gZGF0YWJhc2UgdG8gZXhlY3V0ZSBnbG9iYWwgc3Fs IGNvbW1hbmRzIGZyb20gZ2xvYmFsLmRhdCBmaWxlLiAqLworCQkJY29ubiA9IGNvbm5lY3REYXRh YmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJ CQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVG QVVMVCwgZmFsc2UpOworCisJCQlpZiAoIWNvbm4pCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBj b25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMtPmNwYXJhbXMuZGJuYW1lKTsKKworCQkJ LyogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUgYWxsIHRoZSBzcWwgY29tbWFuZHMu ICovCisJCQlleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgaW5wdXRGaWxlU3BlYyk7 CisKKwkJCS8qIElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQkJ aWYgKGdsb2JhbHNfb25seSkKKwkJCXsKKwkJCQlQUWZpbmlzaChjb25uKTsKKwkJCQlyZXR1cm4g MDsKKwkJCX0KKworCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAu ZGF0IGZpbGUuICovCisJCQlyZXR1cm4gcmVzdG9yZUFsbERhdGFiYXNlcyhjb25uLCBpbnB1dEZp bGVTcGVjLCBkYl9leGNsdWRlX3BhdHRlcm5zLAorCQkJCQlvcHRzLCBudW1Xb3JrZXJzKTsKKwkJ fS8qIGVuZCBpZiAqLworCX0vKiBlbmQgaWYgKi8KKworCXJldHVybiByZXN0b3JlT25lRGF0YWJh c2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2Vycyk7Cit9CisKKy8qCisgKiByZXN0b3Jl T25lRGF0YWJhc2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcg dG9jLmRhdCBmaWxlLgorICovCitzdGF0aWMgYm9vbAorcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0 IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29y a2VycykKK3sKKwlBcmNoaXZlCQkqQUg7CisJYm9vbAkJZXhpdF9jb2RlOworCiAJQUggPSBPcGVu QXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlv bnMoQUgsIE5VTEwsIG9wdHMpOwpAQCAtNDcxLDYgKzYwMSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIg KnByb2duYW1lKQogCXByaW50ZihfKCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xl YW4gKGRyb3ApIGRhdGFiYXNlIG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmlu dGYoXygiICAtQywgLS1jcmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRh dGFiYXNlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBl eGl0IG9uIGVycm9yLCBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAg LWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMs IG5vIGRhdGFiYXNlc1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAg ICAgICAgcmVzdG9yZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9 TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVc biIpKTsKIAlwcmludGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJs ZSBvZiBjb250ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTQ4Myw2ICs2MTQsNyBAQCB1 c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtUywgLS1zdXBlcnVzZXI9 TkFNRSAgICAgICAgIHN1cGVydXNlciB1c2VyIG5hbWUgdG8gdXNlIGZvciBkaXNhYmxpbmcgdHJp Z2dlcnNcbiIpKTsKIAlwcmludGYoXygiICAtdCwgLS10YWJsZT1OQU1FICAgICAgICAgICAgIHJl c3RvcmUgbmFtZWQgcmVsYXRpb24gKHRhYmxlLCB2aWV3LCBldGMuKVxuIikpOwogCXByaW50Zihf KCIgIC1ULCAtLXRyaWdnZXI9TkFNRSAgICAgICAgICAgcmVzdG9yZSBuYW1lZCB0cmlnZ2VyXG4i KSk7CisJcHJpbnRmKF8oIiAgLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gICBleGNsdWRlIGRh dGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMgd2l0aCBwYXR0ZXJuXG4iKSk7CiAJcHJpbnRmKF8o IiAgLXgsIC0tbm8tcHJpdmlsZWdlcyAgICAgICAgICBza2lwIHJlc3RvcmF0aW9uIG9mIGFjY2Vz cyBwcml2aWxlZ2VzIChncmFudC9yZXZva2UpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLTEsIC0tc2lu Z2xlLXRyYW5zYWN0aW9uICAgICByZXN0b3JlIGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4iKSk7 CiAJcHJpbnRmKF8oIiAgLS1kaXNhYmxlLXRyaWdnZXJzICAgICAgICAgICBkaXNhYmxlIHRyaWdn ZXJzIGR1cmluZyBkYXRhLW9ubHkgcmVzdG9yZVxuIikpOwpAQCAtNjIxLDMgKzc1Myw2NDQgQEAg cmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25z ICpvcHRzKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBJc0ZpbGVFeGlz dHNJbkRpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBmaWxlIGV4aXN0IGluIGN1cnJl bnQgZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorSXNGaWxlRXhpc3RzSW5EaXJlY3Rvcnko Y29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdAkJ CXN0OworCWNoYXIJCQkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQ R1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwo ImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0 KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCisvKgorICogY29u bmVjdERhdGFiYXNlCisgKgorICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2l0aCB0aGUg Z2l2ZW4gcGFyYW1ldGVycy4gIEFuCisgKiBpbnRlcmFjdGl2ZSBwYXNzd29yZCBwcm9tcHQgaXMg YXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCisgKgorICogSWYgZmFpbF9vbl9lcnJv ciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBwcmludGluZyBhbnkgbWVzc2FnZQor ICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9tcHRlZCBwYXNzd29yZCBmb3IgdGhl IG5leHQgdHJ5LgorICovCitzdGF0aWMgUEdjb25uICoKK2Nvbm5lY3REYXRhYmFzZShjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAorCQkJCWNvbnN0IGNo YXIgKnBnaG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCisJCQkJ dHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpCit7CisJUEdjb25u CQkJCSpjb25uOworCWJvb2wJCQkJbmV3X3Bhc3M7CisJY29uc3QgY2hhcgkJCSpyZW1vdGV2ZXJz aW9uX3N0cjsKKwlpbnQJCQkJCW15X3ZlcnNpb247CisJY29uc3QgY2hhcgkJCSoqa2V5d29yZHMg PSBOVUxMOworCWNvbnN0IGNoYXIJCQkqKnZhbHVlcyA9IE5VTEw7CisJUFFjb25uaW5mb09wdGlv biAJKmNvbm5fb3B0cyA9IE5VTEw7CisJc3RhdGljIGNoYXIJCQkqcGFzc3dvcmQgPSBOVUxMOwor CXN0YXRpYyBpbnQJCQlzZXJ2ZXJfdmVyc2lvbjsKKworCWlmIChwcm9tcHRfcGFzc3dvcmQgPT0g VFJJX1lFUyAmJiAhcGFzc3dvcmQpCisJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dv cmQ6ICIsIGZhbHNlKTsKKworCS8qCisJICogU3RhcnQgdGhlIGNvbm5lY3Rpb24uICBMb29wIHVu dGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkKKwkgKiBiYWNrZW5kLgorCSAq LworCWRvCisJeworCQlpbnQJCQkJCWFyZ2NvdW50ID0gNjsKKwkJUFFjb25uaW5mb09wdGlvbgkq Y29ubl9vcHQ7CisJCWNoYXIJCQkJKmVycl9tc2cgPSBOVUxMOworCQlpbnQJCQkJCWkgPSAwOwor CisJCWZyZWUoa2V5d29yZHMpOworCQlmcmVlKHZhbHVlcyk7CisJCVBRY29ubmluZm9GcmVlKGNv bm5fb3B0cyk7CisKKwkJLyoKKwkJICogTWVyZ2UgdGhlIGNvbm5lY3Rpb24gaW5mbyBpbnB1dHMg Z2l2ZW4gaW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZworCQkgKiBhbmQgb3RoZXIgb3B0aW9u cy4gIEV4cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGluIHRoZQorCQkgKiBjb25u ZWN0aW9uIHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFtcygpIHdvdWxkIGludGVy cHJldAorCQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNvbm5lY3Rpb24gc3RyaW5n LgorCQkgKi8KKwkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQorCQl7CisJCQljb25uX29wdHMgPSBQ UWNvbm5pbmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJfbXNnKTsKKwkJCWlmIChjb25u X29wdHMgPT0gTlVMTCkKKwkJCQlwZ19mYXRhbCgiJXMiLCBlcnJfbXNnKTsKKworCQkJZm9yIChj b25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9vcHQr KykKKwkJCXsKKwkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52YWxb MF0gIT0gJ1wwJyAmJgorCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSAh PSAwKQorCQkJCQlhcmdjb3VudCsrOworCQkJfQorCisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAo KGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxs b2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKKworCQkJZm9yIChjb25uX29w dCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9vcHQrKykKKwkJ CXsKKwkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52YWxbMF0gIT0g J1wwJyAmJgorCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSAhPSAwKQor CQkJCXsKKwkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29yZDsKKwkJCQkJdmFsdWVz W2ldID0gY29ubl9vcHQtPnZhbDsKKwkJCQkJaSsrOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNl CisJCXsKKwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigq a2V5d29yZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXpl b2YoKnZhbHVlcykpOworCQl9CisKKwkJaWYgKHBnaG9zdCkKKwkJeworCQkJa2V5d29yZHNbaV0g PSAiaG9zdCI7CisJCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7CisJCQlpKys7CisJCX0KKwkJaWYgKHBn cG9ydCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7CisJCQl2YWx1ZXNbaV0gPSBwZ3Bv cnQ7CisJCQlpKys7CisJCX0KKwkJaWYgKHBndXNlcikKKwkJeworCQkJa2V5d29yZHNbaV0gPSAi dXNlciI7CisJCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7CisJCQlpKys7CisJCX0KKwkJaWYgKHBhc3N3 b3JkKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJwYXNzd29yZCI7CisJCQl2YWx1ZXNbaV0gPSBw YXNzd29yZDsKKwkJCWkrKzsKKwkJfQorCQlpZiAoZGJuYW1lKQorCQl7CisJCQlrZXl3b3Jkc1tp XSA9ICJkYm5hbWUiOworCQkJdmFsdWVzW2ldID0gZGJuYW1lOworCQkJaSsrOworCQl9CisJCWtl eXdvcmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOworCQl2YWx1ZXNbaV0gPSBw cm9nbmFtZTsKKwkJaSsrOworCisJCW5ld19wYXNzID0gZmFsc2U7CisJCWNvbm4gPSBQUWNvbm5l Y3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKKworCQlpZiAoIWNvbm4pCisJCQlw Z19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsK KworCQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQgJiYKKwkJCVBRY29ubmVj dGlvbk5lZWRzUGFzc3dvcmQoY29ubikgJiYKKwkJCSFwYXNzd29yZCAmJgorCQkJcHJvbXB0X3Bh c3N3b3JkICE9IFRSSV9OTykKKwkJeworCQkJUFFmaW5pc2goY29ubik7CisJCQlwYXNzd29yZCA9 IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7CisJCQluZXdfcGFzcyA9IHRydWU7 CisJCX0KKwl9IHdoaWxlIChuZXdfcGFzcyk7CisKKwkvKiBjaGVjayB0byBzZWUgdGhhdCB0aGUg YmFja2VuZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLworCWlmIChQUXN0YXR1 cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwl7CisJCWlmIChmYWlsX29uX2Vycm9yKQorCQkJ cGdfZmF0YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQllbHNlCisJCXsKKwkJCVBR ZmluaXNoKGNvbm4pOworCisJCQlmcmVlKGtleXdvcmRzKTsKKwkJCWZyZWUodmFsdWVzKTsKKwkJ CVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7CisKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQor CisJZnJlZShrZXl3b3Jkcyk7CisJZnJlZSh2YWx1ZXMpOworCVBRY29ubmluZm9GcmVlKGNvbm5f b3B0cyk7CisKKwkvKiBDaGVjayB2ZXJzaW9uICovCisJcmVtb3RldmVyc2lvbl9zdHIgPSBQUXBh cmFtZXRlclN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKKwlpZiAoIXJlbW90ZXZlcnNp b25fc3RyKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIpOworCXNl cnZlcl92ZXJzaW9uID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOworCWlmIChzZXJ2ZXJfdmVyc2lv biA9PSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHBhcnNlIHNlcnZlciB2ZXJzaW9uIFwiJXNc IiIsCisJCQkJIHJlbW90ZXZlcnNpb25fc3RyKTsKKworCW15X3ZlcnNpb24gPSBQR19WRVJTSU9O X05VTTsKKworCS8qCisJICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwg YW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9mCisJICogb3VyIG93biBtYWpvciB2ZXJzaW9u LiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcC5jLikKKwkgKi8KKwlpZiAobXlf dmVyc2lvbiAhPSBzZXJ2ZXJfdmVyc2lvbgorCQkmJiAoc2VydmVyX3ZlcnNpb24gPCA5MDIwMCB8 fAorCQkJKHNlcnZlcl92ZXJzaW9uIC8gMTAwKSA+IChteV92ZXJzaW9uIC8gMTAwKSkpCisJewor CQlwZ19sb2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2VydmVyIHZlcnNpb24gbWlzbWF0 Y2giKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZlcnNpb246ICVzOyAlcyB2ZXJz aW9uOiAlcyIsCisJCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHByb2duYW1lLCBQR19WRVJTSU9O KTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwg QUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKKworCXJldHVybiBjb25uOworfQorCisv KgorICogZXhlY3V0ZVF1ZXJ5CisgKgorICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0 cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBQR3Jlc3VsdCAqCitleGVj dXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKK3sKKwlQR3Jlc3VsdAkq cmVzOworCisJcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5KTsKKworCXJlcyA9IFBR ZXhlYyhjb25uLCBxdWVyeSk7CisJaWYgKCFyZXMgfHwgUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQ R1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxlZDogJXMiLCBQ UWVycm9yTWVzc2FnZShjb25uKSk7CisJCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5IHdhczog JXMiLCBxdWVyeSk7CisJCVBRZmluaXNoKGNvbm4pOworCQlleGl0X25pY2VseSgxKTsKKwl9CisK KwlyZXR1cm4gcmVzOworfQorCisvKgorICoJUmVhZE9uZVN0YXRlbWVudAorICoKKyAqIFRoaXMg d2lsbCBzdGFydCByZWFkaW5nIGZyb20gcGFzc2VkIGZpbGUgcG9pbnRlciB1c2luZyBmZ2V0YyBh bmQgcmVhZCB0aWxsCisgKiBzZW1pY29sb24oc3FsIHN0YXRlbWVudCB0ZXJtaW5hdG9yIGZvciBn bG9iYWwuc3FsIGZpbGUpCisgKgorICoJRU9GIGlzIHJldHVybmVkIGlmIGVuZC1vZi1maWxlIGlu cHV0IGlzIHNlZW47IHRpbWUgdG8gc2h1dCBkb3duLgorICovCisKK3N0YXRpYyBpbnQKK1JlYWRP bmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAqZl9nbG8pCit7CisJaW50CQkJYzsg LyogY2hhcmFjdGVyIHJlYWQgZnJvbSBnZXRjKCkgKi8KKworCXJlc2V0U3RyaW5nSW5mbyhpbkJ1 Zik7CisKKwkvKgorCSAqIFJlYWQgY2hhcmFjdGVycyB1bnRpbCBFT0Ygb3IgdGhlIGFwcHJvcHJp YXRlIGRlbGltaXRlciBpcyBzZWVuLgorCSAqLworCXdoaWxlICgoYyA9IGZnZXRjKGZfZ2xvKSkg IT0gRU9GKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSBjKTsKKwor CQlpZiAoYyA9PSAnXG4nKQorCQl7CisJCQlpZihpbkJ1Zi0+bGVuID4gMSAmJgorCQkJCQlpbkJ1 Zi0+ZGF0YVtpbkJ1Zi0+bGVuIC0gMl0gPT0gJzsnKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJ CWNvbnRpbnVlOworCQl9CisJfQorCisJLyogTm8gaW5wdXQgYmVmb3JlIEVPRiBzaWduYWwgbWVh bnMgdGltZSB0byBxdWl0LiAqLworCWlmIChjID09IEVPRiAmJiBpbkJ1Zi0+bGVuID09IDApCisJ CXJldHVybiBFT0Y7CisKKwkvKiBBZGQgJ1wwJyB0byBtYWtlIGl0IGxvb2sgdGhlIHNhbWUgYXMg bWVzc2FnZSBjYXNlLiAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgJ1ww Jyk7CisKKwlyZXR1cm4gJ1EnOworfQorCisvKgorICogZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3Rv cmUKKyAqCisgKiBUaGlzIHdpbGwgcmVtb3ZlIG5hbWVzIGZyb20gYWxsIGRibGlzdCB0aGF0IGFy ZSBnaXZlbiB3aXRoIGV4Y2x1ZGUtZGF0YWJhc2UKKyAqIG9wdGlvbi4KKyAqCisgKiByZXR1cm5z IG51bWJlciBvZiBkYm5hbWVzIHRob3NlIHdpbGwgYmUgcmVzdG9yZWQuCisgKi8KK3N0YXRpYyBp bnQKK2ZpbHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlKFBHY29ubiAqY29ubiwgU2ltcGxlRGF0YWJh c2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVk ZV9wYXR0ZXJucykKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpkYm9pZF9jZWxsID0g ZGJuYW1lX29pZF9saXN0LT5oZWFkOworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmRib2lk cHJlY2VsbCA9IE5VTEw7CisJaW50CQkJCQkJCWNvdW50X2RiID0gMDsKKworCS8qIFJldHVybiAw IGlmIHRoZXJlIGlzIG5vIGRiIHRvIHJlc3RvcmUuICovCisJaWYgKGRib2lkX2NlbGwgPT0gTlVM TCkKKwkJcmV0dXJuIDA7CisKKwkvKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRibmFtZXMgYW5k IGlmIG5lZWRzIHRvIHNraXAgcmVzdG9yaW5nLiAqLworCXdoaWxlIChkYm9pZF9jZWxsICE9IE5V TEwpCisJeworCQlib29sCQkJCQkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVNpbXBsZVN0 cmluZ0xpc3RDZWxsCQkqcHJldiA9IE5VTEw7CisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJ Km5leHQgPSBkYm9pZF9jZWxsLT5uZXh0OworCisJCS8qIE5vdyBtYXRjaCB0aGlzIGRibmFtZSB3 aXRoIGV4Y2x1ZGUtZGF0YWJhc2UgbGlzdC4gKi8KKwkJZm9yIChTaW1wbGVTdHJpbmdMaXN0Q2Vs bCAqY2VsbGRiID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBjZWxsZGI7IGNlbGxkYiA9IGNl bGxkYi0+bmV4dCkKKwkJeworCQkJaWYgKGlzX2Z1bGxfcGF0dGVybihjb25uLCBkYm9pZF9jZWxs LT5kYl9uYW1lLCBjZWxsZGItPnZhbCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBBcyB3ZSBuZWVk IHRvIHNraXAgdGhpcyBkYm5hbWUgc28gc2V0IGZsYWcgdG8gcmVtb3ZlIGl0IGZyb20KKwkJCQkg KiBsaXN0LgorCQkJCSAqLworCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisKKwkJCQkvKgor CQkJCSAqIEFzIHRoaXMgcGF0dGVybiBpcyBza2lwcGVkLCBub3cgZGVsZXRlIGVudHJ5IGZyb20g bGlzdCB0bworCQkJCSAqIGF2b2lkIG11bHRpcGxlIGxvb3BpbmcuCisJCQkJICovCisJCQkJc2lt cGxlX3N0cmluZ19saXN0X2RlbGV0ZSgmZGJfZXhjbHVkZV9wYXR0ZXJucywgY2VsbGRiLCBwcmV2 KTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcHJldiA9IGNlbGxkYjsKKwkJfQorCisJCS8qIElu Y3JlbWVudCBjb3VudCBpZiBkYiBuZWVkcyB0byBiZSByZXN0b3JlZC4gKi8KKwkJaWYgKHNraXBf ZGJfcmVzdG9yZSkKKwkJCXNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoZGJuYW1lX29pZF9saXN0 LCBkYm9pZF9jZWxsLCBkYm9pZHByZWNlbGwpOworCQllbHNlCisJCXsKKwkJCWNvdW50X2RiKys7 IC8qIEluY3JlbWVudCBkYiBjb3V0ZXIuICovCisJCQlkYm9pZHByZWNlbGwgPSBkYm9pZF9jZWxs OworCQl9CisKKwkJLyogUHJvY2VzcyBuZXh0IGRibmFtZSBmcm9tIGRibmFtZSBsaXN0LiAqLwor CQlkYm9pZF9jZWxsID0gbmV4dDsKKwl9CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisg KiBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmls ZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJh c2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNwb2RpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRv dGFsIG51bWJlciBvZiBkYXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRp YyBpbnQKK2dldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGly cGF0aCwgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJRklMRSAg ICAqcGZpbGU7CisJY2hhciAgICBtYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJY2hhciAgICBs aW5lW01BWFBHUEFUSF07CisJaW50ICAgICBjb3VudCA9IDA7CisKKwlzbnByaW50ZihtYXBfZmls ZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3Bl biBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCAiciIpOwor CisJaWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAuZGF0 IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKworCS8qIEFwcGVuZCBhbGwgdGhlIGRibmFt ZSBhbmQgZGJfb2lkIHRvIHRoZSBsaXN0LiAqLworCXdoaWxlKChmZ2V0cyhsaW5lLCBNQVhQR1BB VEgsIHBmaWxlKSkgIT0gTlVMTCkKKwl7CisJCU9pZCAgICAgICAgIGRiX29pZDsKKwkJY2hhciAg ICAgICAgZGJuYW1lW01BWFBHUEFUSCArIDFdOworCisJCS8qIEV4dHJhY3QgZGJuYW1lIGFuZCBk Yl9vaWQgZnJvbSBsaW5lICovCisJCXNzY2FuZihsaW5lLCAiJXUgJXMiICwgJmRiX29pZCwgZGJu YW1lKTsKKworCQlwZ19sb2dfaW5mbygiZm91bmQgZGJuYW1lIGFzIDolcyBhbmQgZGJfb2lkOiVk IGluIG1hcC5kYXQgZmlsZSB3aGlsZSByZXN0b3JpbmciLCBkYm5hbWUsIGRiX29pZCk7CisKKwkJ LyogUmVwb3J0IGVycm9yIGlmIGZpbGUgaGFzIGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYg KCFPaWRJc1ZhbGlkKGRiX29pZCkgfHwgc3RybGVuKGRibmFtZSkgPT0gMCkKKwkJCXBnX2ZhdGFs KCJpbnZhbGlkIGVudHJ5IGluIG1hcC5kYXQgZmlsZSBhdCBsaW5lIDogJWQiLCBjb3VudCArIDEp OworCisJCS8qCisJCSAqIFhYWCA6IGJlZm9yZSBhZGRpbmcgZGJhbm1lIGludG8gbGlzdCwgd2Ug Y2FuIHZlcmlmeSB0aGF0IHRoaXMgZGIKKwkJICogbmVlZHMgdG8gc2tpcHBlZCBmb3IgcmVzdG9y ZSBvciBub3QgYnV0IGFzIG9mIG5vdywgd2UgYXJlIG1ha2luZworCQkgKiBhIGxpc3Qgb2YgYWxs IHRoZSBkYXRhYmFzZXMuCisJCSAqLworCQlzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKGRibmFt ZV9vaWRfbGlzdCwgZGJfb2lkLCBkYm5hbWUpOworCQljb3VudCsrOworCX0KKworCS8qIENsb3Nl IG1hcC5kYXQgZmlsZS4gKi8KKwlmY2xvc2UocGZpbGUpOworCisJcmV0dXJuIGNvdW50OworfQor CisvKgorICogcmVzdG9yZUFsbERhdGFiYXNlcworICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRh dGFiYXNlcyB0aG9zZSBkdW1wcyBhcmUgcHJlc2VudCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9u IG1hcC5kYXQgZmlsZSBtYXBwaW5nLgorICoKKyAqIFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBm b3IgZGF0YWJhc2VzIHRoYXQgYXJlIHNwZWNpZmllZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNl IG9wdGlvbi4KKyAqLworc3RhdGljIGludAorcmVzdG9yZUFsbERhdGFiYXNlcyhQR2Nvbm4gKmNv bm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1 ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2VycykKK3sK KwlTaW1wbGVEYXRhYmFzZU9pZExpc3QJCQlkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07 CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkJKmRib2lkX2NlbGw7CisJaW50CQkJCQkJCQll eGl0X2NvZGUgPSAwOworCWludAkJCQkJCQkJbnVtX2RiX3Jlc3RvcmU7CisJaW50CQkJCQkJCQlu dW1fdG90YWxfZGI7CisKKwludW1fdG90YWxfZGIgPSBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21f bWZpbGUoZHVtcGRpcnBhdGgsICZkYm5hbWVfb2lkX2xpc3QpOworCisJLyogSWYgbWFwLmRhdCBo YXMgbm8gZW50cnksIHJldHVybiBmcm9tIGhlcmUuICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5o ZWFkID09IE5VTEwpCisJCXJldHVybiAwOworCisJcGdfbG9nX2luZm8oImZvdW5kIHRvdGFsICVk IGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZSIsIG51bV90b3RhbF9kYik7CisKKwkvKiBT a2lwIGFueSBleHBsaWNpdGx5IGV4Y2x1ZGVkIGRhdGFiYXNlLiAqLworCW51bV9kYl9yZXN0b3Jl ID0gZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoY29ubiwgJmRibmFtZV9vaWRfbGlzdCwKKwkJ CWRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rpb24gYXMg d2UgYXJlIGRvbmUgZ2xvYmFscyBhbmQgcGF0dGVybnMuICovCisJUFFmaW5pc2goY29ubik7CisK KwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5hbWVf b2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXBnX2xvZ19pbmZvKCJuZWVk cyB0byByZXN0b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jl c3RvcmUsIG51bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFhYWDogVE9ETyB0aWxsIG5vdywgd2Ug bWFkZSBhIGxpc3Qgb2YgZGF0YWJhc2VzLCB0aG9zZSBuZWVkcyB0byBiZSByZXN0b3JlZAorCSAq IGFmdGVyIHNraXBwaW5nIG5hbWVzIG9mIGV4Y2x1ZGUtZGF0YWJhc2UuICBOb3cgd2UgY2FuIGxh dW5jaCBwYXJhbGxlbAorCSAqIHdvcmtlcnMgdG8gcmVzdG9yZSB0aGVzZSBkYXRhYmFzZXMuCisJ ICovCisJZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC5oZWFkOworCisJd2hpbGUoZGJvaWRf Y2VsbCAhPSBOVUxMKQorCXsKKwkJY2hhcgkJc3ViZGlycGF0aFtNQVhQR1BBVEhdOworCQlpbnQJ CQlkYmV4aXRfY29kZTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRlX2Ri bmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkIGludG8KKwkJICogYWxyZWFkeSBj cmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJICovCisJ CWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUob3B0cy0+ Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5h bWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMv ZGF0YWJhc2VzLyV1IiwgZHVtcGRpcnBhdGgsIGRib2lkX2NlbGwtPmRiX29pZCk7CisKKwkJLyoK KwkJICogRGF0YWJhc2UgLWQvLS1kYm5hbWUgaXMgYWxyZWFkeSBjcmVhdGVkIHNvIHJlc2V0IGNy ZWF0ZURCIHRvIGlnbm9yZQorCQkgKiBkYXRhYmFzZSBjcmVhdGlvbiBlcnJvci4KKwkJICovCisJ CWlmIChwZ19zdHJjYXNlY21wKGRib2lkX2NlbGwtPmRiX25hbWUsIG9wdHMtPmNwYXJhbXMuZGJu YW1lKSA9PSAwKQorCQkJb3B0cy0+Y3JlYXRlREIgPSAwOworCisJCXBnX2xvZ19pbmZvKCJyZXN0 b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisKKwkJZGJleGl0 X2NvZGUgPSByZXN0b3JlT25lRGF0YWJhc2Uoc3ViZGlycGF0aCwgb3B0cywgbnVtV29ya2Vycyk7 CisKKwkJLyogU3RvcmUgZXhpdF9jb2RlIHRvIHJlcG9ydCBpdCBiYWNrLiAqLworCQlpZiAoZXhp dF9jb2RlID09IDAgJiYgZGJleGl0X2NvZGUgIT0gMCkKKwkJCWV4aXRfY29kZSA9IGRiZXhpdF9j b2RlOworCisJCS8qIFNldCBjcmVhdGVEQiBvcHRpb24gdG8gY3JlYXRlIG5ldyBkYXRhYmFzZS4g Ki8KKwkJaWYgKHBnX3N0cmNhc2VjbXAoZGJvaWRfY2VsbC0+ZGJfbmFtZSwgb3B0cy0+Y3BhcmFt cy5kYm5hbWUpID09IDApCisJCQlvcHRzLT5jcmVhdGVEQiA9IDE7CisKKwkJZGJvaWRfY2VsbCA9 IGRib2lkX2NlbGwtPm5leHQ7CisJfSAvKiBlbmQgd2hpbGUgKi8KKworCS8qIExvZyBudW1iZXIg b2YgcHJvY2Vzc2VkIGRhdGFiYXNlcy4qLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9y ZWQgZGF0YWJhc2VzIGFyZSAlZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCXJldHVybiBleGl0X2Nv ZGU7Cit9CisKKy8qCisgKiBleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMKKyAqCisgKiBUaGlz IHdpbGwgb3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIHdpbGwgZXhlY3V0ZSBhbGwgZ2xvYmFsIHNx bCBjb21tYW5kcyBvbmUKKyAqIGJ5IG9uZSBzdGF0ZW1lbnQuCisgKiBTZW1pY29sb24gaXMgY29u c2lkZXJlZCBhcyBzdGF0ZW1lbnQgdGVybWluYXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4ZWN1 dGVfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJw YXRoKQoreworCWNoYXIgICAgICAgICAgICBnbG9iYWxfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJ UEdyZXN1bHQJCSpyZXN1bHQ7CisJU3RyaW5nSW5mb0RhdGEJc3Fsc3RhdGVtZW50OworCUZJTEUJ CQkqcGZpbGU7CisKKwlzbnByaW50ZihnbG9iYWxfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9n bG9iYWwuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogbm93IG9wZW4gZ2xvYmFsLmRhdCBmaWxl ICovCisJcGZpbGUgPSBmb3BlbihnbG9iYWxfZmlsZV9wYXRoLCAiciIpOworCisJaWYgKHBmaWxl ID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0IGZpbGU6ICVz Iiwgc3RyZXJyb3IoZXJybm8pKTsKKworCS8qIEluaXQgc3Fsc3RhdGVtZW50IHRvIGFwcGVuZCBj b21tYW5kcyAqLworCWluaXRTdHJpbmdJbmZvKCZzcWxzdGF0ZW1lbnQpOworCisJLyogUHJvY2Vz cyBmaWxlIHRpbGwgRU9GIGFuZCBleGVjdXRlIHNxbCBzdGF0ZW1lbnRzICovCisJd2hpbGUgKFJl YWRPbmVTdGF0ZW1lbnQoJnNxbHN0YXRlbWVudCwgcGZpbGUpICE9IEVPRikKKwl7CisJCXJlc3Vs dCA9IFBRZXhlYyhjb25uLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisKKwkJc3dpdGNoIChQUXJlc3Vs dFN0YXR1cyhyZXN1bHQpKQorCQl7CisJCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6CisJCQljYXNl IFBHUkVTX1RVUExFU19PSzoKKwkJCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6CisJCQkJYnJlYWs7 CisJCQlkZWZhdWx0OgorCQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGV4ZWN1dGUgcXVlcnk6 ICVzIFxuQ29tbWFuZCB3YXM6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHNxbHN0YXRlbWVu dC5kYXRhKTsKKwkJfQorCQlQUWNsZWFyKHJlc3VsdCk7CisJfQorCisJZmNsb3NlKHBmaWxlKTsK K30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQKKyAqCisgKiBhcHBlbmRzIGEg bm9kZSB0byB0aGUgbGlzdCBpbiB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX2Ri X29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQs IGNvbnN0IGNoYXIgKmRibmFtZSkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxs OworCisJY2VsbCA9IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCk7 CisKKwljZWxsLT5uZXh0ID0gTlVMTDsKKwljZWxsLT5kYl9vaWQgPSBkYl9vaWQ7CisJY2VsbC0+ ZGJfbmFtZSA9IHBnX3N0cmR1cChkYm5hbWUpOworCisJaWYgKGxpc3QtPnRhaWwpCisJCWxpc3Qt PnRhaWwtPm5leHQgPSBjZWxsOworCWVsc2UKKwkJbGlzdC0+aGVhZCA9IGNlbGw7CisJbGlzdC0+ dGFpbCA9IGNlbGw7Cit9CisKKy8qCisgKiBzaW1wbGVfc3RyaW5nX2xpc3RfZGVsZXRlCisgKgor ICogZGVsZXRlIGNlbGwgZnJvbSBzdHJpbmcgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBs ZV9zdHJpbmdfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCwgU2ltcGxlU3RyaW5n TGlzdENlbGwgKmNlbGwsCisJCVNpbXBsZVN0cmluZ0xpc3RDZWxsICpwcmV2KQoreworCWlmIChw cmV2ID09IE5VTEwpCisJeworCQlsaXN0LT5oZWFkID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2Vs bCk7CisJfQorCWVsc2UKKwl7CisJCXByZXYtPm5leHQgPSBjZWxsLT5uZXh0OworCQlwZnJlZShj ZWxsKTsKKwl9Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlCisgKgorICog ZGVsZXRlIGNlbGwgZnJvbSBkYXRhYmFzZSBhbmQgb2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lk CitzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwg U2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbCAqcHJldikKK3sKKwlpZiAocHJldiA9PSBOVUxMKQorCXsKKwkJbGlzdC0+aGVhZCA9IGNl bGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCX0KKwllbHNlCisJeworCQlwcmV2LT5uZXh0ID0g Y2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJfQorfQorCisvKgorICogaXNfZnVsbF9wYXR0 ZXJuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHdlIGNhbiBjb25zdHVjdCAxc3Qgc3RyaW5nIGZy b20gZ2l2ZW4gcGF0dGVybi4KKyAqCisgKi8KK3N0YXRpYyBib29sCitpc19mdWxsX3BhdHRlcm4o UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnB0cm4pCit7CisJUFFF eHBCdWZmZXIJCXF1ZXJ5OworCVBHcmVzdWx0CQkqcmVzdWx0OworCisJcXVlcnkgPSBjcmVhdGVQ UUV4cEJ1ZmZlcigpOworCisJcHJpbnRmUFFFeHBCdWZmZXIocXVlcnksCisJCQkiU0VMRUNUIHN1 YnN0cmluZyAoICIKKwkJCSIgJyVzJyAsICIKKwkJCSIgJyVzJyApICIsIHN0ciwgcHRybik7CisK KyAgIHJlc3VsdCA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwlpZiAoUFFy ZXN1bHRTdGF0dXMocmVzdWx0KSA9PSBQR1JFU19UVVBMRVNfT0spCisJeworCQlpZiAoUFFudHVw bGVzKHJlc3VsdCkgPT0gMSkKKwkJeworCQkJY29uc3QgY2hhcgkqb3V0c3RyOworCisJCQlvdXRz dHIgPSBQUWdldHZhbHVlKHJlc3VsdCwgMCwgMCk7CisKKwkJCVBRY2xlYXIocmVzdWx0KTsKKwkJ CWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7CisKKwkJCS8qCisJCQkgKiBJZiBvdXRwdXQgc3Ry aW5nIG9mIHN1YnN0cmluZyBmdW5jdGlvbiBpcyBtYXRjaGVzIHdpdGggc3RyLCB0aGVuCisJCQkg KiB3ZSBjYW4gY29uc3RydWN0IHN0ciBmcm9tIHBhdHRlcm4uCisJCQkgKi8KKwkJCWlmIChwZ19z dHJjYXNlY21wKG91dHN0ciwgc3RyKSA9PSAwKQorCQkJCXJldHVybiB0cnVlOworCQkJZWxzZQor CQkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwllbHNlCisJCXBnX2xvZ19lcnJvcigiY291bGQg bm90IGV4ZWN1dGUgcXVlcnk6ICVzIFxuQ29tbWFuZCB3YXM6ICVzIiwgUFFlcnJvck1lc3NhZ2Uo Y29ubiksIHF1ZXJ5LT5kYXRhKTsKKworCVBRY2xlYXIocmVzdWx0KTsKKwlkZXN0cm95UFFFeHBC dWZmZXIocXVlcnkpOworCisJcmV0dXJuIGZhbHNlOworfQotLSAKMi4zOS4zCgo= --00000000000083e67d062b3488cd--