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 1v9LdN-00GKwl-38 for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Oct 2025 10:55:00 +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 1v9LdL-00Bj0x-RN for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Oct 2025 10:54:58 +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 1v9LdL-00Bj0p-0l for pgsql-hackers@lists.postgresql.org; Thu, 16 Oct 2025 10:54:58 +0000 Received: from mail-qv1-xf31.google.com ([2607:f8b0:4864:20::f31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v9LdH-002523-39 for pgsql-hackers@lists.postgresql.org; Thu, 16 Oct 2025 10:54:57 +0000 Received: by mail-qv1-xf31.google.com with SMTP id 6a1803df08f44-87c1f607e72so388766d6.0 for ; Thu, 16 Oct 2025 03:54:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760612094; x=1761216894; 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=0lw2Z5Xdr0TpTivjnKopQnoEhQFFFdwBZFWLx7B4pNY=; b=SvoJf+RFu6UXxjb9BtxMDyijDrbJkyIKr5kCtbGJS/a7M2936tgmt/mIJczEVj2PwV aAfsYqoHJUoPhtD94UDVFjmgdsnK2KTorIO2MhdVP41pAASB9SYbAccxmkLT6LbvqUxi rnnpQyWFX/neKXo0B/lr8DPxoSOPDkmhJt+SOz1p8poxsCOwz75Mbgg6HbOlYywodiWp 2cxNC7qIPZFD7cljeF50Ou+lw2x5Sn5Vb1YKCa8iBykkGAlNWoze88B5+X967jL1h2lX 1W/Ez3wt6LK7+jSVPt2UrzhZfnO7BHcF1MD/VgAFFqk+Q4PYe9lBRYH1VfpMtEu5cI9v 93Cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760612094; x=1761216894; 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=0lw2Z5Xdr0TpTivjnKopQnoEhQFFFdwBZFWLx7B4pNY=; b=KUIk5S7Ox6Pj3xtjKnqUxWbj784Jjfka0fXmm2MwYKiTSu3bm0lyXogql6jMjTTvX0 Xkqg41v0CRGhjJ1rQA4Pr+l4Jpto5sM7UcpAoe3/nSEpLNLXVEprxcMIe5mi/shiQXN2 kvaisV9w+1wKXd+p/o75L1zmd825u2kSMr+wOtGp1X7rjLGjs0xk6SlmWgYf57LNdFaY 9p5y+RDlg0EU6qowGjfl2fHvBJEedRFihZOrOgIhsChnLSGIf3GCe4+XLCY+IdQuB1r3 0J5Mmic3koWjoWD2LvLtp3xGDORSQAMB4gvzp2cRctq7UudpVdyzfNHSsKvVZH1HqyW8 r75w== X-Forwarded-Encrypted: i=1; AJvYcCUU6RWLgTXhjYYir2JjDga9xruxw6V4Xq62o4rvzLZyTkYfBrPJ9YSP71UlNGfrfph3cTHTI6z04tXeU0Kw@lists.postgresql.org X-Gm-Message-State: AOJu0YwNmRr8oGGwP4STGgAG+yRjl+q5B0gq8q9N9KPHcVQUaaccmlC6 1XdIVN+xdjmU/wbRrUFgGsAkKuTHzxcqCT1sSZ2CJCMcdbraJxEkCDrlZr6/nYC6kLPdkiA4u1A n7iONCk5Vf6hdmNlRNivxxOu7KhFdq4E= X-Gm-Gg: ASbGncu45HHu0/xD6gMJ8XDvIeNrFLBq29F7ZnaQu8pY+XE/iqj2iZsyD6pHpagxww2 4iam02Ozv2dTRYsXg3zCqjknPWtsFhEnj1GOt+AhuK0oY7ZRxmyeXKzV3XBy4WVayghZ6/Nb37G Ex5t2eTPSyW1fQ0LfcoBGFz4Il4E3ZH2H8SBfFmrak/DDawuv9tU2j7DhKkdy9KePMLKHS6rDZq 6r9IDF0ZA4vPzQ0MJ8KM8uSyJwsb+ghxO2wfM0fkEsqep2Hi7vfj423co1B6g== X-Google-Smtp-Source: AGHT+IFN7jxHOYGzP3HgBMo5282Bxawz3tRUXarhScwPeCenjI6cQZOMWuifsnS5SNQb3BGXDdViMqz/Ah1rAmwwwnQ= X-Received: by 2002:ad4:5c62:0:b0:70f:abbb:609a with SMTP id 6a1803df08f44-87c0cb587acmr44038306d6.19.1760612094388; Thu, 16 Oct 2025 03:54:54 -0700 (PDT) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <20250722005339.ca.nmisch@google.com> <20250725162141.6f.nmisch@google.com> <2225040.1753477169@sss.pgh.pa.us> <20250727235628.e2.nmisch@google.com> <8f2ad50b-ebb7-4adc-997e-25e0ad96ff34@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Thu, 16 Oct 2025 16:24:42 +0530 X-Gm-Features: AS18NWDYyYvaT9EiTErtwcG2d1v3FepdLQO66Ygy3z3fbUzGbO8Gt2a-se9iA_M Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Andrew Dunstan , tushar Cc: Noah Misch , Tom Lane , =?UTF-8?Q?=C3=81lvaro_Herrera?= , jian he , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000007974640641447256" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007974640641447256 Content-Type: text/plain; charset="UTF-8" On Wed, 15 Oct 2025 at 23:05, Mahendra Singh Thalor wrote: > > On Sun, 24 Aug 2025 at 22:12, Andrew Dunstan wrote: > > > > > > On 2025-08-23 Sa 9:08 PM, Noah Misch wrote: > > > > On Wed, Jul 30, 2025 at 02:51:59PM -0400, Andrew Dunstan wrote: > > > > OK, now that's reverted we should discuss how to proceed. I had two thoughts > > - we could use invent a JSON format for the globals, or we could just use > > the existing archive format. I think the archive format is pretty flexible, > > and should be able to accommodate this. The downside is it's not humanly > > readable. The upside is that we don't need to do anything special either to > > write it or parse it. > > > > I would first try to use the existing archiver API, because that makes it > > harder to miss bugs. Any tension between that API and pg_dumpall is likely to > > have corresponding tension on the pg_restore side. Resolving that tension > > will reveal much of the project's scope that remained hidden during the v18 > > attempt. Perhaps more important than that, using the archiver API means > > future pg_dump and pg_restore options are more likely to cooperate properly > > with $SUBJECT. In other words, I want it to be hard to add pg_dump/pg_restore > > features that malfunction only for $SUBJECT archives. The strength of the > > archiver architecture shows in how rarely new features need format-specific > > logic and how rarely format-specific bugs get reported. We've had little or > > no trouble with e.g. bugs that appear in -Fd but not in -Fc. > > > > > > Yeah, that's what we're going to try. > > > > > > cheers > > > > > > andrew > > > > -- > > Andrew Dunstan > > EDB: https://www.enterprisedb.com > > Thanks Andrew, Noah and all others for feedback. > > Based on the above suggestions and discussions, I removed sql commands > from the global.dat file. For global commands, now we are making > toc.dat/toc.dmp/toc.tar file based on format specified and based on > format specified, we are making archive entries for these global > commands. By this approach, we removed the hard-coded parsing part of > the global.dat file and we are able to skip DROP DATABASE with the > globals-only option. > > Here, I am attaching a patch for review, testing and feedback. This is > a WIP patch. I will do some more code cleanup and will add some more > comments also. Please review this and let me know design level > feedback. Thanks Tushar Ahuja for some internal testing and feedback. > Hi, Here, I am attaching an updated patch. In offline discussion, Andrew reported some test-case failures(Thanks Andrew). I fixed those. Please let me know feedback for the patch. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --0000000000007974640641447256 Content-Type: application/octet-stream; name="v02-16102025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v02-16102025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgtasykz0 RnJvbSBmZWVlYjU2ZDdjM2U5NDNjZGEyZTYwOGE1Y2I4NWNjYThkYzMyZWRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaGFsb3JNYWhlbmRyYSA8bWFoaTZydW5AZ21haWwuY29tPgpE YXRlOiBUaHUsIDE2IE9jdCAyMDI1IDE2OjEzOjUwICswNTMwClN1YmplY3Q6IFtQQVRDSF0gTm9u IHRleHQgbW9kZXMgZm9yIHBnX2R1bXBhbGwsIGNvcnJlc3BvbmRpbmdseSBjaGFuZ2UgCiBwZ19y ZXN0b3JlCgogICAgcGdfZHVtcGFsbCBhY3F1aXJlcyBhIG5ldyAtRi8tLWZvcm1hdCBvcHRpb24s IHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMKICAgIHBnX2R1bXAuIFRoZSBkZWZhdWx0IGlzIHAs IG1lYW5pbmcgcGxhaW4gdGV4dC4gRm9yIGFueSBvdGhlciB2YWx1ZSwgYQogICAgZGlyZWN0b3J5 IGlzIGNyZWF0ZWQgY29udGFpbmluZyB0d28gZmlsZXMsIHRvYy5kYXQvLmRtcC8udGFyIGFuZCBt YXAuZGF0LiBUaGUKICAgIGZpcnN0IGNvbnRhaW5zIGNvbW1hbmRzIHJlc3RvcmluZyB0aGUgZ2xv YmFsIGRhdGEgYmFzZWQgb24gLUYsIGFuZCB0aGUgc2Vjb25kCiAgICBjb250YWlucyBhIG1hcCBm cm9tIG9pZHMgdG8gZGF0YWJhc2UgbmFtZXMuIEl0IHdpbGwgYWxzbyBjb250YWluIGEKICAgIHN1 YmRpcmVjdG9yeSBjYWxsZWQgZGF0YWJhc2VzLCBpbnNpZGUgd2hpY2ggaXQgd2lsbCBjcmVhdGUg YXJjaGl2ZXMgaW4KICAgIHRoZSBzcGVjaWZpZWQgZm9ybWF0LCBuYW1lZCB1c2luZyB0aGUgZGF0 YWJhc2Ugb2lkcy4KCiAgICBJbiB0aGVzZSBjYXNlc3MgdGhlIC1mIGFyZ3VtZW50IGlzIHJlcXVp cmVkLgoKICAgIElmIHBnX3Jlc3RvcmUgZW5jb3VudGVycyBhIGRpcmVjdG9yeSBjb250YWluaW5n IG1hcC5kYXQsCiAgICBpdCByZXN0b3JlcyB0aGUgZ2xvYmFsIHNldHRpbmdzIGZyb20gdG9jLmRh dC8uZG1wLy50YXIgaWYgZXhpc3QsIGFuZCB0aGVuCiAgICByZXN0b3JlcyBlYWNoIGRhdGFiYXNl LgoKICAgIHBnX3Jlc3RvcmUgYWNxdWlyZXMgdHdvIG5ldyBvcHRpb25zOiAtZy8tLWdsb2JhbHMt b25seSB3aGljaCBzdXBwcmVzc2VzCiAgICByZXN0b3JhdGlvbiBvZiBhbnkgZGF0YWJhc2VzLCBh bmQgLS1leGNsdWRlLWRhdGFiYXNlIHdoaWNoIGluaGliaXRzCiAgICByZXN0b3JhdGlvbiBvZiBw YXJ0aWN1YWxyIGRhdGFiYXNlKHMpIGluIHRoZSBzYW1lIHdheSB0aGUgc2FtZSBvcHRpb24KICAg IHdvcmtzIGluIHBnX2R1bXBhbGwuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNn bWwgICAgIHwgIDg5ICsrKy0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICB8 ICA2NiArKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYyAgICAgICAgICB8ICAgMSAtCiBz cmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19k dW1wL3BhcmFsbGVsLmMgICAgICAgICAgIHwgIDEwICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaCAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5jIHwgIDIzICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggfCAgIDEg Kwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAgIHwgICAyICstCiBzcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9w Z19kdW1wYWxsLmMgICAgICAgICB8IDYwMCArKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIHNy Yy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDU5MyArKysrKysrKysrKysrKysr KysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgIDEwICsK IHNyYy9iaW4vcGdfZHVtcC90LzAwNl9wZ19kdW1wYWxsLnBsICB8IDM5NiArKysrKysrKysrKysr KysrKysKIDE0IGZpbGVzIGNoYW5nZWQsIDE2NTAgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9u cygtKQogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMvYmluL3BnX2R1bXAvdC8wMDFf YmFzaWMucGwKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmluL3BnX2R1bXAvdC8wMDZfcGdfZHVt cGFsbC5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggOWY2MzlmNjFkYjAuLjQwNjNl ODhkMzg4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYsNyArMTYsMTAgQEAgUG9z dGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAgPHJlZm5hbWU+cGdfZHVt cGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBpbnRvIGEgc2NyaXB0IGZpbGU8 L3JlZnB1cnBvc2U+CisKKyAgPHJlZnB1cnBvc2U+CisgICBleHBvcnQgYSA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNjcmlw dCBvciB0byBvdGhlciBmb3JtYXRzCisgIDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+CiAK ICA8cmVmc3lub3BzaXNkaXY+CkBAIC0zMyw3ICszNiw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4g aXMgYSB1dGlsaXR5IGZvciB3cml0aW5nIG91dAogICAgKDxxdW90ZT5kdW1waW5nPC9xdW90ZT4p IGFsbCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcwotICAg b2YgYSBjbHVzdGVyIGludG8gb25lIHNjcmlwdCBmaWxlLiAgVGhlIHNjcmlwdCBmaWxlIGNvbnRh aW5zCisgICBvZiBhIGNsdXN0ZXIgaW50byBhbiBTUUwgc2NyaXB0IGZpbGUgb3IgYW4gYXJjaGl2 ZS4gIFRoZSBvdXRwdXQgY29udGFpbnMKICAgIDxhY3JvbnltPlNRTDwvYWNyb255bT4gY29tbWFu ZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgogICAgbGlua2VuZD0iYXBwLXBz cWwiLz4gdG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0aGlzIGJ5CiAgICBjYWxs aW5nIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2ggZGF0YWJhc2UgaW4gdGhl IGNsdXN0ZXIuCkBAIC01MiwxMSArNTUsMTYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBTUUwgc2NyaXB0IHdpbGwgYmUgd3JpdHRlbiB0 byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAgUGxhaW4gdGV4dCBTUUwgc2NyaXB0 cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0aGUKICAgIDxv cHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4gb3B0aW9uIG9yIHNoZWxs IG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3QgaXQgaW50byBhIGZpbGUuCiAgIDwvcGFyYT4KIAor ICA8cGFyYT4KKyAgIEFyY2hpdmVzIGluIG90aGVyIGZvcm1hdHMgd2lsbCBiZSBwbGFjZWQgaW4g YSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcgdGhlCisgICA8b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRp b24+LS1maWxlPC9vcHRpb24+LCB3aGljaCBpcyByZXF1aXJlZCBpbiB0aGlzIGNhc2UuCisgIDwv cGFyYT4KKwogICA8cGFyYT4KICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9u PiBuZWVkcyB0byBjb25uZWN0IHNldmVyYWwKICAgdGltZXMgdG8gdGhlIDxwcm9kdWN0bmFtZT5Q b3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gc2VydmVyIChvbmNlIHBlcgpAQCAtMTMxLDEwICsxMzks ODUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNl bmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwgdGhl CiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2VkLgorICAgICAgICBOb3RlOiBUaGlzIG9w dGlvbiBjYW4gb25seSBiZSBvbWl0dGVkIHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBp cyBwbGFpbgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlz dGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IHRoZSBmb3JtYXQgb2Yg ZHVtcCBmaWxlcy4gIEluIHBsYWluIGZvcm1hdCwgYWxsIHRoZSBkdW1wIGRhdGEgaXMKKyAgICAg ICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0IHN0cmVhbS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKwor ICAgICAgICBJbiBhbGwgb3RoZXIgbW9kZXMsIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBs aWNhdGlvbj4gZmlyc3QgY3JlYXRlcyB0d28gZmlsZXM6CisgICAgICAgIDxmaWxlbmFtZT50b2Mu ZGF0L3RvYy5kbXAvdG9jLnRhcjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWFwLmRhdDwvZmls ZW5hbWU+LCBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIHNwZWNpZmllZCBieSA8b3B0aW9uPi0t ZmlsZTwvb3B0aW9uPi4KKyAgICAgICAgVGhlIGZpcnN0IGZpbGUgY29udGFpbnMgZ2xvYmFsIGRh dGEsIHN1Y2ggYXMgcm9sZXMgYW5kIHRhYmxlc3BhY2VzLiBUaGUgc2Vjb25kCisgICAgICAgIGNv bnRhaW5zIGEgbWFwcGluZyBiZXR3ZWVuIGRhdGFiYXNlIG9pZHMgYW5kIG5hbWVzLiBUaGVzZSBm aWxlcyBhcmUgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGlj YXRpb24+LiBEYXRhIGZvciBpbmRpdmlkdWFsIGRhdGFiYXNlcyBpcyBwbGFjZWQgaW4KKyAgICAg ICAgPGZpbGVuYW1lPmRhdGFiYXNlczwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSwgbmFtZWQgdXNp bmcgdGhlIGRhdGFiYXNlJ3MgPHR5cGU+b2lkPC90eXBlPi4KKworICAgICAgIDx2YXJpYWJsZWxp c3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJh bD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAg ICAgIE91dHB1dCBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmVzIGZvciBlYWNoIGRhdGFiYXNlLAor ICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgZGlyZWN0 b3J5CisgICAgICAgICAgIHdpbGwgaGF2ZSBkYXRhYmFzZSA8dHlwZT5vaWQ8L3R5cGU+IGFzIGl0 cyBuYW1lLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAg IDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD5wPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnBs YWluPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFy YT4KKyAgICAgICAgICAgT3V0cHV0IGEgcGxhaW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUgKHRoZSBk ZWZhdWx0KS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRl cm0+PGxpdGVyYWw+YzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5j dXN0b208L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxw YXJhPgorICAgICAgICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgZm9yIGVhY2gg ZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUu IFRoZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUgbmFtZWQgPGZpbGVuYW1lPmRib2lkLmRt cDwvZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBlPiBpcyB0aGUKKyAgICAgICAgICAg PHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgPC9wYXJhPgorICAg ICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFsPjwvdGVybT4K KyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHRhci1mb3Jt YXQgYXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlu cHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1l ZCA8ZmlsZW5hbWU+ZGJvaWQudGFyPC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+ IGlzIHRoZQorICAgICAgICAgICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAg ICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKworICAgICAgIE5vdGU6IHNlZSA8eHJl ZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZvciBkZXRhaWxzCisgICAgICAgb2YgaG93IHRoZSB2 YXJpb3VzIG5vbiBwbGFpbiB0ZXh0IGFyY2hpdmVzIHdvcmsuCisKKyAgICAgICAgPC9wYXJhPgor ICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3Rl bnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVy bT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3Rv cmUuc2dtbAppbmRleCBhNDY4YTM4MzYxYS4uNzQ5N2I1MjdhZTYgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVz dG9yZS5zZ21sCkBAIC0xOCw4ICsxOCw5IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8 cmVmbmFtZT5wZ19yZXN0b3JlPC9yZWZuYW1lPgogCiAgIDxyZWZwdXJwb3NlPgotICAgcmVzdG9y ZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBh bgotICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxp Y2F0aW9uPgorICAgcmVzdG9yZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ IGRhdGFiYXNlcyBmcm9tIGFyY2hpdmVzCisgICBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19k dW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNh dGlvbj4KICAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIApAQCAtMzgsMTMgKzM5LDE0 IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9u PnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZyBhCi0g ICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4g YXJjaGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGluIG9u ZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9k dWN0bmFtZT4gZGF0YWJhc2Ugb3IgY2x1c3RlciBmcm9tIGFuIGFyY2hpdmUKKyAgIGNyZWF0ZWQg YnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlua2VuZD0iYXBw LXBnLWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAogICAgZm9ybWF0cy4g IEl0IHdpbGwgaXNzdWUgdGhlIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWNvbnN0cnVjdCB0aGUK LSAgIGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNh dmVkLiAgVGhlCi0gICBhcmNoaXZlIGZpbGVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jl c3RvcmU8L2FwcGxpY2F0aW9uPiB0bworICAgZGF0YWJhc2Ugb3IgY2x1c3RlciB0byB0aGUgc3Rh dGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gVGhlCisgICBhcmNoaXZlcyBh bHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KICAgIGJl IHNlbGVjdGl2ZSBhYm91dCB3aGF0IGlzIHJlc3RvcmVkLCBvciBldmVuIHRvIHJlb3JkZXIgdGhl IGl0ZW1zCi0gICBwcmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZmlsZXMgYXJl IGRlc2lnbmVkIHRvIGJlCisgICBwcmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUg Zm9ybWF0cyBhcmUgZGVzaWduZWQgdG8gYmUKICAgIHBvcnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1 cmVzLgogICA8L3BhcmE+CiAKQEAgLTUyLDEwICs1NCwxNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50 YXRpb24KICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gY2FuIG9wZXJh dGUgaW4gdHdvIG1vZGVzLgogICAgSWYgYSBkYXRhYmFzZSBuYW1lIGlzIHNwZWNpZmllZCwgPGFw cGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPgogICAgY29ubmVjdHMgdG8gdGhhdCBk YXRhYmFzZSBhbmQgcmVzdG9yZXMgYXJjaGl2ZSBjb250ZW50cyBkaXJlY3RseSBpbnRvCi0gICB0 aGUgZGF0YWJhc2UuICBPdGhlcndpc2UsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAotICAg Y29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIGlzIGNyZWF0ZWQgYW5k IHdyaXR0ZW4KKyAgIHRoZSBkYXRhYmFzZS4KKyAgIFdoZW4gcmVzdG9yaW5nIGZyb20gYSBkdW1w IG1hZGUgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiwKKyAgIGVhY2gg ZGF0YWJhc2Ugd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGVuIHRoZSByZXN0b3JhdGlvbiB3aWxsIGJl IHJ1biBpbiB0aGF0CisgICBkYXRhYmFzZS4KKworICAgT3RoZXJ3aXNlLCB3aGVuIGEgZGF0YWJh c2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBhIHNjcmlwdCBjb250YWluaW5nIHRoZSBTUUwKKyAg IGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1aWxkIHRoZSBkYXRhYmFzZSBvciBjbHVzdGVyIGlz IGNyZWF0ZWQgYW5kIHdyaXR0ZW4KICAgIHRvIGEgZmlsZSBvciBzdGFuZGFyZCBvdXRwdXQuICBU aGlzIHNjcmlwdCBvdXRwdXQgaXMgZXF1aXZhbGVudCB0bwotICAgdGhlIHBsYWluIHRleHQgb3V0 cHV0IGZvcm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+LgorICAgdGhl IHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGlj YXRpb24+IG9yCisgICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorCiAg ICBTb21lIG9mIHRoZSBvcHRpb25zIGNvbnRyb2xsaW5nIHRoZSBvdXRwdXQgYXJlIHRoZXJlZm9y ZSBhbmFsb2dvdXMgdG8KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3B0 aW9ucy4KICAgPC9wYXJhPgpAQCAtMTUyLDYgKzE2MSw4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICAgICAgICBjb21tYW5kcyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4KICAgICAg ICAgQWNjZXNzIHByaXZpbGVnZXMgZm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFsc28gcmVz dG9yZWQsCiAgICAgICAgIHVubGVzcyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlzIHNwZWNp ZmllZC4KKyAgICAgICAgPG9wdGlvbj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1aXJlZCB3aGVu IHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAgICAgICAgZnJvbSBhbiBhcmNoaXZlIGNy ZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KICAgICAgICA8 L3BhcmE+CiAKICAgICAgICA8cGFyYT4KQEAgLTI0Nyw2ICsyNTgsMTkgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVy bT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+Cisg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJlc3RvcmUgb25seSBnbG9i YWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAgICAg IDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxl dmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRp b24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlz dGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAg ICA8dGVybT48b3B0aW9uPi1JIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwv cmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4 PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRp b24+PC90ZXJtPgpAQCAtNTkxLDYgKzYxNSwyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K ICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0 ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9y ZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBh dHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRp b24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAgIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1l dGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhl IHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRp b24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYg bGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRh YmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBj aGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVm dWwgdG8KKyAgICAgICAgcXVvdGUgdGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hl bGwgd2lsZGNhcmQgZXhwYW5zaW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGFu IGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+ LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5 PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZmlsdGVyPTxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5maWxlbmFtZTwvcmVwbGFjZWFibGU+PC9vcHRp b24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L2Nvbm5lY3RkYi5jIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCmluZGV4IGQ1NWQ1M2Ri ZWVhLi5mNDRhOGE0NWZjYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYwpAQCAtMjg3LDcgKzI4Nyw2IEBAIGV4 ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQogCXsKIAkJcGdfbG9n X2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwogCQlwZ19s b2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOwotCQlQUWZpbmlzaChjb25u KTsKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv bWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggYTIyMzNiMGEx YjQuLjRhNGViYmQ4ZWM5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC0xMDIsNiArMTAyLDcgQEAgdGVz dHMgKz0gewogICAgICAgJ3QvMDAzX3BnX2R1bXBfd2l0aF9zZXJ2ZXIucGwnLAogICAgICAgJ3Qv MDA0X3BnX2R1bXBfcGFyYWxsZWwucGwnLAogICAgICAgJ3QvMDA1X3BnX2R1bXBfZmlsdGVyZmls ZS5wbCcsCisgICAgICAndC8wMDZfcGdfZHVtcGFsbC5wbCcsCiAgICAgICAndC8wMTBfZHVtcF9j b25uc3RyLnBsJywKICAgICBdLAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bh cmFsbGVsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwppbmRleCAwODZhZGNkYzUwMi4u NTk3NGQ2NzA2ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC0zMzMsNiArMzMzLDE2IEBAIG9uX2V4aXRf Y2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJb25fZXhpdF9uaWNlbHkoYXJjaGl2ZV9jbG9z ZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7CiB9CiAKKy8qCisgKiBXaGVuIHBnX3Jlc3Rv cmUgcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVuIHVwZGF0ZSBhbHJlYWR5IGFkZGVk IGVudHJ5CisgKiBpbnRvIGFycmF5IGZvciBjbGVhbnVwLgorICovCit2b2lkCityZXBsYWNlX29u X2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCit7CisJc2h1dGRvd25faW5mby5BSFgg PSBBSFg7Cit9CisKIC8qCiAgKiBvbl9leGl0X25pY2VseSBoYW5kbGVyIGZvciBzaHV0dGluZyBk b3duIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGFuZAogICogd29ya2VyIHByb2Nlc3NlcyBjbGVhbmx5 LgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cC5oCmluZGV4IGQ5MDQxZGFkNzIwLi5mNjMxZDk0NTQ3MiAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXAuaApAQCAtMzEyLDcgKzMxMiw3IEBAIGV4dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25z KEFyY2hpdmUgKkFILCBEdW1wT3B0aW9ucyAqZG9wdCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4 dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAot ZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJl c3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxz X29ubHkpOwogCiAvKiBPcGVuIGFuIGV4aXN0aW5nIGFyY2hpdmUgKi8KIGV4dGVybiBBcmNoaXZl ICpPcGVuQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBm bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDU5ZWFlY2I0ZWQ3Li5k Mzc4YzdiNjAxZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODYsNyAr ODYsNyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3Rh dGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVt cFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGlt KTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAq ZmlsZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKTsKKwkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMsIGJvb2wgYXBwZW5kX2RhdGEpOwogc3RhdGljIENvbXByZXNzRmlsZUhhbmRs ZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBSZXN0b3JlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0KTsK IApAQCAtMzM5LDkgKzMzOSwxNCBAQCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hp dmUgKkFIWCkKIAkJU3RyaWN0TmFtZXNDaGVjayhyb3B0KTsKIH0KIAotLyogUHVibGljICovCisv KgorICogUmVzdG9yZUFyY2hpdmUKKyAqCisgKiBJZiBhcHBlbmRfZGF0YSBpcyBzZXQsIHRoZW4g YXBwZW5kIGRhdGEgaW50byBmaWxlIGFzIHdlIGFyZSByZXN0b3JpbmcgZHVtcAorICogb2YgbXVs dGlwbGUgZGF0YWJhc2VzIHdoaWNoIHdhcyB0YWtlbiBieSBwZ19kdW1wYWxsLgorICovCiB2b2lk Ci1SZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCitSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpB SFgsIGJvb2wgYXBwZW5kX2RhdGEsIGJvb2wgZ2xvYmFsc19vbmx5KQogewogCUFyY2hpdmVIYW5k bGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0g QUgtPnB1YmxpYy5yb3B0OwpAQCAtNDU4LDcgKzQ2Myw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hp dmUgKkFIWCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5h bWUgfHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05f Tk9ORSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25f c3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9u X3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwg ZGF0YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTc2MSw2ICs3NjYsOSBAQCBSZXN0b3JlQXJj aGl2ZShBcmNoaXZlICpBSFgpCiAJCQlpZiAoKHRlLT5yZXFzICYgKFJFUV9TQ0hFTUEgfCBSRVFf REFUQSB8IFJFUV9TVEFUUykpID09IDApCiAJCQkJY29udGludWU7CQkvKiBpZ25vcmUgaWYgbm90 IHRvIGJlIGR1bXBlZCBhdCBhbGwgKi8KIAorCQkJaWYgKGdsb2JhbHNfb25seSAmJiB0ZSAmJiB0 ZS0+dGFnICYmIChzdHJjbXAodGUtPnRhZywgIkRST1BfREFUQUJBU0UiKSA9PSAwKSkKKwkJCQlj b250aW51ZTsKKwogCQkJc3dpdGNoIChfdG9jRW50cnlSZXN0b3JlUGFzcyh0ZSkpCiAJCQl7CiAJ CQkJY2FzZSBSRVNUT1JFX1BBU1NfTUFJTjoKQEAgLTEzMTYsNyArMTMyNCw3IEBAIFByaW50VE9D U3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9w dC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVz c2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNz aW9uX3NwZWMsIGZhbHNlKTsKIAogCWlmIChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFt cF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVE YXRlKSkgPT0gMCkKQEAgLTE2OTUsNyArMTcwMyw4IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgs IGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTcxNSw3ICsx NzI0LDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFt ZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJj aE1vZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBw ZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMzI1YjUzZmM5YmQuLjM2NTA3 M2IzZWFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zOTQsNiArMzk0 LDcgQEAgc3RydWN0IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBhcmFsbGVsX3Jlc3RvcmUoQXJj aGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRlcm4gdm9pZCBvbl9leGl0X2Nsb3Nl X2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vfb25fZXhpdF9jbG9z ZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCk7CiAKIGV4dGVybiB2b2lkIHdhcm5fb3JfZXhpdF9ob3Jy aWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRl X3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90 YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYjViYTNiNDZkZDku LjgxOGI4MGE5MzY5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAgLTgyNiw3ICs4MjYsNyBA QCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlzYXZWZXJib3NlID0gQUgtPnB1 YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAwOwogCi0JCVJlc3RvcmVBcmNo aXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgsIGZh bHNlLCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRv cHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA4OTBkYjdiMDhjMi4uNDUwMTgwMmQ4MDUg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuYwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJICogcmlnaHQgbm93LgogCSAqLwogCWlmIChwbGFpblRleHQpCi0JCVJlc3RvcmVB cmNoaXZlKGZvdXQpOworCQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBmYWxzZSwgZmFsc2UpOwogCiAJ Q2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCBiYjQ1MWMxYmFlMS4u NjY4ZTU1ZTQxNWMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1 ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1 ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKIC8q IHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQ R0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIK QEAgLTY1LDkgKzY2LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNv bm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMg dm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBEYXRh YmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpj b25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1l c3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludAlydW5QZ0R1bXAo Y29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywKKwkJCQkJICBjaGFy ICpkYmZpbGUsIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgYnVp bGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2df bmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBj aGFyICpvYmpuYW1lLApAQCAtNzYsNiArNzgsOCBAQCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFu ZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9k Ym5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywK IAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9k dW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBh dHRlcm4pOworc3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIg KmZvcm1hdCk7CitzdGF0aWMgaW50IGNyZWF0ZUR1bXBJZExvY2FsKHZvaWQpOwogCiBzdGF0aWMg Y2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIFBRRXhwQnVmZmVyIHBnZHVtcG9w dHM7CkBAIC0xMjMsNiArMTI3LDEzIEBAIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNl X2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0aWMgU2ltcGxlU3RyaW5nTGlz dCBkYXRhYmFzZV9leGNsdWRlX25hbWVzID0ge05VTEwsIE5VTEx9OwogCiBzdGF0aWMgY2hhciAq cmVzdHJpY3Rfa2V5Oworc3RhdGljIEFyY2hpdmUgKmZvdXQgPSBOVUxMOworc3RhdGljIHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKK3N0YXRpYyBpbnQg ZHVtcElkVmFsID0gMDsKK3N0YXRpYyBjb25zdCBDYXRhbG9nSWQgbmlsQ2F0YWxvZ0lkID0gezAs IDB9Oworc3RhdGljIEFyY2hpdmVNb2RlIGFyY2hpdmVNb2RlID0gYXJjaE1vZGVXcml0ZTsKK3N0 YXRpYyBEYXRhRGlyU3luY01ldGhvZCBzeW5jX21ldGhvZCA9IERBVEFfRElSX1NZTkNfTUVUSE9E X0ZTWU5DOworc3RhdGljIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsK IAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0xNDgsNiArMTU5LDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7InBhc3N3b3JkIiwgbm9fYXJndW1lbnQs IE5VTEwsICdXJ30sCiAJCXsibm8tcHJpdmlsZWdlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9 LAogCQl7Im5vLWFjbCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAorCQl7ImZvcm1hdCIsIHJl cXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnRid9LAogCiAJCS8qCiAJCSAqIHRoZSBmb2xsb3dpbmcg b3B0aW9ucyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGxldHRlcgpAQCAt MTk3LDYgKzIwOSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAljaGFyCSAgICpw Z2RiID0gTlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqZHVt cGVuY29kaW5nID0gTlVMTDsKKwljb25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZh bHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZh bHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjA4LDYgKzIyMSw4IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpbnQJCQljLAogCQkJCXJldDsKIAlpbnQJCQlv cHRpbmRleDsKKwlEdW1wT3B0aW9ucyBkb3B0OworCWNoYXIgICAgICAgIGdsb2JhbF9wYXRoW01B WFBHUEFUSF07CiAKIAlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7CiAJcGdfbG9nZ2luZ19zZXRf bGV2ZWwoUEdfTE9HX1dBUk5JTkcpOwpAQCAtMjQ2LDcgKzI2MSw5IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0J d2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6 dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJSW5pdER1bXBPcHRp b25zKCZkb3B0KTsKKworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6 RTpmOkY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0g LTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTI1Nyw2ICsyNzQsNyBAQCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ2MnOgogCQkJCW91dHB1dF9jbGVhbiA9IHRy dWU7CisJCQkJZG9wdC5vdXRwdXRDbGVhbiA9IDE7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2Qn OgpAQCAtMjc0LDcgKzI5Miw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxs U3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6 CisJCQkJZm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2Fz ZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTMxNCw2ICsz MzQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ1UnOgogCQkJ CXBndXNlciA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWRvcHQuY3BhcmFtcy51c2VybmFtZSA9 IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICd2JzoKQEAgLTQyOSw2 ICs0NTAsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgx KTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0ID0g cGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCisJLyoKKwkgKiBJZiBhIG5vbi1wbGFpbiBm b3JtYXQgaXMgc3BlY2lmaWVkLCBhIGZpbGUgbmFtZSBpcyBhbHNvIHJlcXVpcmVkIGFzIHRoZQor CSAqIHBhdGggdG8gdGhlIG1haW4gZGlyZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1h dCAhPSBhcmNoTnVsbCAmJgorCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09 IDApKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLUYvLS1mb3JtYXQ9ZHxjfHQgcmVxdWly ZXMgb3B0aW9uIC1mLy0tZmlsZSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1o ZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgx KTsKKwl9CisKIAkvKgogCSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVkIGlu IHRoZSBkdW1wLCBzd2l0Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xlcyB3aGljaCBpcyBlcXVhbGx5 IHVzZWZ1bCwganVzdCBtb3JlIGxpa2VseSB0byBoYXZlIHVucmVzdHJpY3RlZApAQCAtNDg5LDYg KzUyNSwzMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHNlcXVlbmNlX2Rh dGEpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLS1zZXF1ZW5jZS1kYXRh Iik7CiAKKwkvKgorCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndp c2UgdXNlIHN0ZG91dC4gIElmIHJlcXVpcmVkLAorCSAqIHRoZW4gY3JlYXRlIG5ldyBkaXJlY3Rv cnkuCisJICovCisJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQor CXsKKwkJLyogQ3JlYXRlIG5ldyBkaXJlY3Rvcnkgb3IgYWNjZXB0IHRoZSBlbXB0eSBleGlzdGlu ZyBkaXJlY3RvcnkuICovCisJCWNyZWF0ZV9vcl9vcGVuX2RpcihmaWxlbmFtZSk7CisKKwkJLyog c2V0IGZpbGUgcGF0aCBmb3IgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRI LCAiJXMvdG9jLmRtcCIsIGZpbGVuYW1lKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaFRhcikKKwkJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MudGFy IiwgZmlsZW5hbWUpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoRGlyZWN0b3J5 KQorCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzIiwgZmlsZW5hbWUpOwor CX0KKwllbHNlIGlmIChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19C SU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1 dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9 IHN0ZG91dDsKKwogCS8qCiAJICogSWYgeW91IGRvbid0IHByb3ZpZGUgYSByZXN0cmljdCBrZXks IG9uZSB3aWxsIGJlIGFwcG9pbnRlZCBmb3IgeW91LgogCSAqLwpAQCAtNTM4LDE5ICs2MDEsNiBA QCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhj b25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRhYmFzZV9leGNs dWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQs IG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1lKQotCXsKLQkJT1BGID0g Zm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYpCi0JCQlwZ19mYXRhbCgi Y291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCSBmaWxlbmFtZSk7 Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkgKiBTZXQgdGhlIGNsaWVudCBl bmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC01ODUsMzcgKzYzNSwxMjMgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChxdW90ZV9hbGxfaWRlbnRpZmllcnMpCiAJCWV4 ZWN1dGVDb21tYW5kKGNvbm4sICJTRVQgcXVvdGVfYWxsX2lkZW50aWZpZXJzID0gdHJ1ZSIpOwog Ci0JZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBc bi0tXG5cbiIpOwogCWlmICh2ZXJib3NlKQogCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7 CiAKLQkvKgotCSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3Rl ZCBwc3FsIG1ldGEtY29tbWFuZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkg dG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICogcmVzcG9uc2VzIHRv IHF1ZXJpZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJvbQotCSAq IGFmZmVjdGluZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4gYmxvY2sg cHNxbAotCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBy dW5zIHBzcWwgd2l0aCB0aGUgZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0ZWQuCi0J ICovCi0JZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJ LyogY3JlYXRlIGEgYXJjaGl2ZSBmaWxlIGZvciBnbG9iYWwgY29tbWFuZHMuICovCisJaWYgKGZp bGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJLyogT3BlbiB0aGUg b3V0cHV0IGZpbGUgKi8KKwkJZm91dCA9IENyZWF0ZUFyY2hpdmUoZ2xvYmFsX3BhdGgsIGFyY2hE dW1wRm9ybWF0LCBjb21wcmVzc2lvbl9zcGVjLAorCQkJCWRvc3luYywgYXJjaGl2ZU1vZGUsIE5V TEwsIHN5bmNfbWV0aG9kKTsKIAotCS8qCi0JICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBv c3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCi0JICogb3RoZXIgdGhhbiB0 byBicmVhayB0aGluZ3MgZm9yIGluc3RhbGxhdGlvbnMgd2l0aG91dCBhIHBvc3RncmVzCi0JICog ZGF0YWJhc2UuICBFdmVyeXRoaW5nIHdlJ3JlIHJlc3RvcmluZyBoZXJlIGlzIGEgZ2xvYmFsLCBz byB3aGljaGV2ZXIKLQkgKiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVu dCBpcyBmaW5lLgotCSAqLworCQkvKiBNYWtlIGR1bXAgb3B0aW9ucyBhY2Nlc3NpYmxlIHJpZ2h0 IGF3YXkgKi8KKwkJU2V0QXJjaGl2ZU9wdGlvbnMoZm91dCwgJmRvcHQsIE5VTEwpOwogCi0JLyog UmVzdG9yZSB3aWxsIG5lZWQgdG8gd3JpdGUgdG8gdGhlIHRhcmdldCBjbHVzdGVyICovCi0JZnBy aW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIp OworCQkoKEFyY2hpdmVIYW5kbGUgKiApZm91dCkgLT5jb25uZWN0aW9uID0gY29ubjsKKwkJKChB cmNoaXZlSGFuZGxlICogKSBmb3V0KSAtPiBwdWJsaWMubnVtV29ya2VycyA9IDE7CiAKLQkvKiBS ZXBsaWNhdGUgZW5jb2RpbmcgYW5kIHN0ZF9zdHJpbmdzIGluIG91dHB1dCAqLwotCWZwcmludGYo T1BGLCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7XG4iLAotCQkJcGdfZW5jb2RpbmdfdG9f Y2hhcihlbmNvZGluZykpOwotCWZwcmludGYoT1BGLCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdf c3RyaW5ncyA9ICVzO1xuIiwgc3RkX3N0cmluZ3MpOwotCWlmIChzdHJjbXAoc3RkX3N0cmluZ3Ms ICJvZmYiKSA9PSAwKQotCQlmcHJpbnRmKE9QRiwgIlNFVCBlc2NhcGVfc3RyaW5nX3dhcm5pbmcg PSBvZmY7XG4iKTsKLQlmcHJpbnRmKE9QRiwgIlxuIik7CisJCS8qIFJlZ2lzdGVyIHRoZSBjbGVh bnVwIGhvb2sgKi8KKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKGZvdXQpOworCisJCS8qIExldCB0 aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kgdG8gYmUgKi8KKwkJZm91dC0+dmVyYm9zZSA9IHZl cmJvc2U7CisKKwkJLyoKKwkJICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDku MiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9mCisJCSAqIG91ciBvd24gbWFqb3IgdmVy c2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluIHBnX2R1bXBhbGwuYy4pCisJCSAqLwor CQlmb3V0LT5taW5SZW1vdGVWZXJzaW9uID0gOTAyMDA7CisJCWZvdXQtPm1heFJlbW90ZVZlcnNp b24gPSAoUEdfVkVSU0lPTl9OVU0gLyAxMDApICogMTAwICsgOTk7CisJCWZvdXQtPm51bVdvcmtl cnMgPSAxOworCisJCS8qIGR1bXBFbmNvZGluZzogcHV0IHRoZSBjb3JyZWN0IGVuY29kaW5nIGlu dG8gdGhlIGFyY2hpdmUgKi8KKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBC dWZmZXIoKTsKKwkJCWNvbnN0IGNoYXIgKmVuY25hbWUgPSBwZ19lbmNvZGluZ190b19jaGFyKGVu Y29kaW5nKTsKKworCQkJcGdfbG9nX2luZm8oInNhdmluZyBlbmNvZGluZyA9ICVzIiwgZW5jbmFt ZSk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIlNFVCBjbGllbnRfZW5jb2Rpbmcg PSAiKTsKKwkJCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChxcnksIGVuY25hbWUsIGZvdXQpOworCisJ CQlBcmNoaXZlRW50cnkoZm91dCwgbmlsQ2F0YWxvZ0lkLCBjcmVhdGVEdW1wSWRMb2NhbCgpLAor CQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJFTkNPRElORyIsCisJCQkJCQkuZGVzY3JpcHRpb24g PSAiRU5DT0RJTkciLAorCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJ LmNyZWF0ZVN0bXQgPSBxcnktPmRhdGEpKTsKKworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7 CisJCX0KKworCQkvKiBkdW1wU3RkU3RyaW5nczogcHV0IHRoZSBjb3JyZWN0IGVzY2FwZSBzdHJp bmcgYmVoYXZpb3IgaW50byB0aGUgYXJjaGl2ZSAqLworCQl7CisJCQljb25zdCBjaGFyICpzdGRz dHJpbmdzID0gc3RkX3N0cmluZ3MgPyAib24iIDogIm9mZiI7CisJCQlQUUV4cEJ1ZmZlciBxcnkg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIFwic3RhbmRh cmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXNcIiIsIHN0ZHN0cmluZ3MpOworCisJCQlhcHBlbmRQ UUV4cEJ1ZmZlcihxcnksICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJyVzJztc biIsCisJCQkJCXN0ZHN0cmluZ3MpOworCisJCQlBcmNoaXZlRW50cnkoZm91dCwgbmlsQ2F0YWxv Z0lkLCBjcmVhdGVEdW1wSWRMb2NhbCgpLAorCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJTVERT VFJJTkdTIiwKKwkJCQkJCS5kZXNjcmlwdGlvbiA9ICJTVERTVFJJTkdTIiwKKwkJCQkJCS5zZWN0 aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCS5jcmVhdGVTdG10ID0gcXJ5LT5kYXRhKSk7 CisKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKKwkJLyogZGVmYXVsdF90cmFu c2FjdGlvbl9yZWFkX29ubHkgPSBvZmYgKi8KKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3Jl YXRlUFFFeHBCdWZmZXIoKTsKKworCQkJcGdfbG9nX2luZm8oInNhdmluZyBkZWZhdWx0X3RyYW5z YWN0aW9uX3JlYWRfb25seSA9IG9mZiIpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICJT RVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG4iKTsKKworCQkJQXJjaGl2 ZUVudHJ5KGZvdXQsIG5pbENhdGFsb2dJZCwgY3JlYXRlRHVtcElkTG9jYWwoKSwKKwkJCQkJQVJD SElWRV9PUFRTKC50YWcgPSAiREVGQVVMVF9UUkFOU0FDVElPTl9SRUFEX09OTFkiLAorCQkJCQkJ LmRlc2NyaXB0aW9uID0gIkRFRkFVTFRfVFJBTlNBQ1RJT05fUkVBRF9PTkxZIiwKKwkJCQkJCS5z ZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCS5jcmVhdGVTdG10ID0gcXJ5LT5kYXRh KSk7CisKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisJfQorCWVsc2UKKwl7CisJ CWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4t LVxuXG4iKTsKKworCQkvKgorCQkgKiBFbnRlciByZXN0cmljdGVkIG1vZGUgdG8gYmxvY2sgYW55 IHVuZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRzLiAgQQorCQkgKiBtYWxpY2lvdXMgc291cmNl IG1pZ2h0IHRyeSB0byBpbmplY3QgYSB2YXJpZXR5IG9mIHRoaW5ncyB2aWEgYm9ndXMKKwkJICog cmVzcG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJj ZXMgZnJvbQorCQkgKiBhZmZlY3RpbmcgdGhlIGRlc3RpbmF0aW9uIGF0IHJlc3RvcmUgdGltZSwg d2UgY2FuIGJsb2NrIHBzcWwKKwkJICogbWV0YS1jb21tYW5kcyBzbyB0aGF0IHRoZSBjbGllbnQg bWFjaGluZSB0aGF0IHJ1bnMgcHNxbCB3aXRoIHRoZSBkdW1wCisJCSAqIG91dHB1dCByZW1haW5z IHVuYWZmZWN0ZWQuCisJCSAqLworCQlmcHJpbnRmKE9QRiwgIlxccmVzdHJpY3QgJXNcblxuIiwg cmVzdHJpY3Rfa2V5KTsKKworCQkvKgorCQkgKiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9z dGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5vIHB1cnBvc2UKKwkJICogb3RoZXIgdGhhbiB0 byBicmVhayB0aGluZ3MgZm9yIGluc3RhbGxhdGlvbnMgd2l0aG91dCBhIHBvc3RncmVzCisJCSAq IGRhdGFiYXNlLiAgRXZlcnl0aGluZyB3ZSdyZSByZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwg c28gd2hpY2hldmVyCisJCSAqIGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9t ZW50IGlzIGZpbmUuCisJCSAqLworCisJCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRlIHRv IHRoZSB0YXJnZXQgY2x1c3RlciAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBkZWZhdWx0X3RyYW5z YWN0aW9uX3JlYWRfb25seSA9IG9mZjtcblxuIik7CisKKwkJLyogUmVwbGljYXRlIGVuY29kaW5n IGFuZCBzdGRfc3RyaW5ncyBpbiBvdXRwdXQgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgY2xpZW50 X2VuY29kaW5nID0gJyVzJztcbiIsCisJCQkJcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZykp OworCQlmcHJpbnRmKE9QRiwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAlcztc biIsIHN0ZF9zdHJpbmdzKTsKKwkJaWYgKHN0cmNtcChzdGRfc3RyaW5ncywgIm9mZiIpID09IDAp CisJCQlmcHJpbnRmKE9QRiwgIlNFVCBlc2NhcGVfc3RyaW5nX3dhcm5pbmcgPSBvZmY7XG4iKTsK KwkJZnByaW50ZihPUEYsICJcbiIpOworCX0KIAogCWlmICghZGF0YV9vbmx5ICYmICFzdGF0aXN0 aWNzX29ubHkgJiYgIW5vX3NjaGVtYSkKIAl7CkBAIC02NTksMjcgKzc5NSw0MSBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQlkdW1wVGFibGVzcGFjZXMoY29ubik7CiAJfQogCi0J LyoKLQkgKiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9yZSBkdW1waW5nIHRoZSBkYXRh YmFzZXMuICBwZ19kdW1wIHdpbGwKLQkgKiBoYW5kbGUgZW50ZXJpbmcgcmVzdHJpY3RlZCBtb2Rl IGFnYWluIGFzIGFwcHJvcHJpYXRlLgotCSAqLwotCWZwcmludGYoT1BGLCAiXFx1bnJlc3RyaWN0 ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQorCXsKKwkJLyoKKwkJICogRXhpdCByZXN0cmljdGVkIG1vZGUganVzdCBiZWZvcmUgZHVtcGlu ZyB0aGUgZGF0YWJhc2VzLiAgcGdfZHVtcCB3aWxsCisJCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0 cmljdGVkIG1vZGUgYWdhaW4gYXMgYXBwcm9wcmlhdGUuCisJCSAqLworCQlmcHJpbnRmKE9QRiwg IlxcdW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCX0KIAogCWlmICghZ2xvYmFs c19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQotCQlkdW1wRGF0YWJh c2VzKGNvbm4pOwotCi0JUFFmaW5pc2goY29ubik7CisJCWR1bXBEYXRhYmFzZXMoY29ubiwgYXJj aER1bXBGb3JtYXQpOwogCiAJaWYgKHZlcmJvc2UpCiAJCWR1bXBUaW1lc3RhbXAoIkNvbXBsZXRl ZCBvbiIpOwotCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3Rl ciBkdW1wIGNvbXBsZXRlXG4tLVxuXG4iKTsKIAotCWlmIChmaWxlbmFtZSkKKwlpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwg ZGF0YWJhc2UgY2x1c3RlciBkdW1wIGNvbXBsZXRlXG4tLVxuXG4iKTsKKworCWlmIChmaWxlbmFt ZSAmJiBhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCVJlc3RvcmVPcHRpb25zICpy b3B0OworCisJCXJvcHQgPSBOZXdSZXN0b3JlT3B0aW9ucygpOworCQlTZXRBcmNoaXZlT3B0aW9u cyhmb3V0LCAmZG9wdCwgcm9wdCk7CisKKwkJLyogTWFyayB3aGljaCBlbnRyaWVzIHNob3VsZCBi ZSBvdXRwdXQgKi8KKwkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhmb3V0KTsKKwkJQ2xv c2VBcmNoaXZlKGZvdXQpOworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKIAl7CiAJCWZjbG9zZShP UEYpOwogCiAJCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBmaWxlLCBlcnJvcnMgYXJlIG5vdCBmYXRh bCAqLwotCQlpZiAoZG9zeW5jKQorCQlpZiAoZG9zeW5jICYmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkpCiAJCQkodm9pZCkgZnN5bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKIAl9CiAK QEAgLTY5MCwxMiArODQwLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHN0YXRp YyB2b2lkCiBoZWxwKHZvaWQpCiB7Ci0JcHJpbnRmKF8oIiVzIGV4cG9ydHMgYSBQb3N0Z3JlU1FM IGRhdGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNjcmlwdC5cblxuIiksIHByb2duYW1lKTsKKwlw cmludGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBT UUwgc2NyaXB0IG9yIHRvIG90aGVyIGZvcm1hdHMuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRm KF8oIlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uXG4iKSwgcHJvZ25h bWUpOwogCiAJcHJpbnRmKF8oIlxuR2VuZXJhbCBvcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIg IC1mLCAtLWZpbGU9RklMRU5BTUUgICAgICAgICAgb3V0cHV0IGZpbGUgbmFtZVxuIikpOworCXBy aW50ZihfKCIgIC1GLCAtLWZvcm1hdD1jfGR8dHxwICAgICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0 IChjdXN0b20sIGRpcmVjdG9yeSwgdGFyLFxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGxhaW4gdGV4dCAoZGVmYXVsdCkpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0t dmVyYm9zZSAgICAgICAgICAgICAgICB2ZXJib3NlIG1vZGVcbiIpKTsKIAlwcmludGYoXygiICAt ViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0 aGVuIGV4aXRcbiIpKTsKIAlwcmludGYoXygiICAtLWxvY2std2FpdC10aW1lb3V0PVRJTUVPVVQg IGZhaWwgYWZ0ZXIgd2FpdGluZyBUSU1FT1VUIGZvciBhIHRhYmxlIGxvY2tcbiIpKTsKQEAgLTc3 MCw2ICs5MjIsNyBAQCBzdGF0aWMgdm9pZAogZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIHsKIAlQ UUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBRRXhwQnVmZmVyIGRlbFFy eSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWlfcm9s bmFtZTsKIAlpbnQJCQlpOwpAQCAtNzkwLDcgKzk0Myw3IEBAIGRyb3BSb2xlcyhQR2Nvbm4gKmNv bm4pCiAKIAlpX3JvbG5hbWUgPSBQUWZudW1iZXIocmVzLCAicm9sbmFtZSIpOwogCi0JaWYgKFBR bnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9sZXNcbi0t XG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCkBAIC03OTks MTUgKzk1MiwzMSBAQCBkcm9wUm9sZXMoUEdjb25uICpjb25uKQogCiAJCXJvbGVuYW1lID0gUFFn ZXR2YWx1ZShyZXMsIGksIGlfcm9sbmFtZSk7CiAKLQkJZnByaW50ZihPUEYsICJEUk9QIFJPTEUg JXMlcztcbiIsCisJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgUk9MRSAlcyVzO1xu IiwKIAkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKIAkJCQlmbXRJZChyb2xlbmFt ZSkpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BG LCAiJXMiLCBkZWxRcnktPmRhdGEpOworCQllbHNlCisJCXsKKwkJCUFyY2hpdmVFbnRyeShmb3V0 LAorCQkJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJY3JlYXRlRHVtcElk TG9jYWwoKSwgLyogZHVtcCBJRCAqLworCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJkcm9wUm9s ZXMiLAorCQkJCQkJLy8ub3duZXIgPSBkYmEsCisJCQkJCQkuZGVzY3JpcHRpb24gPSAiZHJvcFJv bGVzX2RlcyIsCisJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkuY3Jl YXRlU3RtdCA9IGRlbFFyeS0+ZGF0YSkpOworCQkJLy8uZHJvcFN0bXQgPSBkZWxRcnktPmRhdGEp KTsKKwkJfQogCX0KIAogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsK IAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC04ODgsNyArMTA1Nyw3IEBA IGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJaV9yb2xjb21tZW50ID0gUFFmbnVtYmVyKHJlcywg InJvbGNvbW1lbnQiKTsKIAlpX2lzX2N1cnJlbnRfdXNlciA9IFBRZm51bWJlcihyZXMsICJpc19j dXJyZW50X3VzZXIiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxl cyhyZXMpID4gMCAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQlmcHJpbnRmKE9Q RiwgIi0tXG4tLSBSb2xlc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVz KHJlcyk7IGkrKykKQEAgLTk5Myw3ICsxMTYyLDI1IEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4p CiAJCQkJCQkJICJST0xFIiwgcm9sZW5hbWUsCiAJCQkJCQkJIGJ1Zik7CiAKLQkJZnByaW50ZihP UEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCXsKKwkJCVBRRXhw QnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVm ZmVyKGRlbFFyeSwgIkRST1AgUk9MRSAlcyVzO1xuIiwKKwkJCQkJaWZfZXhpc3RzID8gIklGIEVY SVNUUyAiIDogIiIsIGZtdElkKHJvbGVuYW1lKSk7CisKKwkJCUFyY2hpdmVFbnRyeShmb3V0LAor CQkJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJY3JlYXRlRHVtcElkTG9j YWwoKSwgLyogZHVtcCBJRCAqLworCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJkdW1wUm9sZXMi LAorCQkJCQkJLy8ub3duZXIgPSBkYmEsCisJCQkJCQkuZGVzY3JpcHRpb24gPSAiZHVtcFJvbGVz X2RlcyIsCisJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkuY3JlYXRl U3RtdCA9IGJ1Zi0+ZGF0YSkpOworCQkJLy8uZHJvcFN0bXQgPSBkZWxRcnktPmRhdGEpKTsKKwkJ fQogCX0KIAogCS8qCkBAIC0xMDAxLDE1ICsxMTg4LDEzIEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNv bm4pCiAJICogV2UgZG8gaXQgdGhpcyB3YXkgYmVjYXVzZSBjb25maWcgc2V0dGluZ3MgZm9yIHJv bGVzIGNvdWxkIG1lbnRpb24gdGhlCiAJICogbmFtZXMgb2Ygb3RoZXIgcm9sZXMuCiAJICovCi0J aWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENv bmZpZ3VyYXRpb25zXG4tLVxuIik7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7 IGkrKykKIAkJZHVtcFVzZXJDb25maWcoY29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9sbmFt ZSkpOwogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIAogCWRl c3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogfQpAQCAtMTA4Nyw3ICsxMjcyLDcgQEAgZHVtcFJvbGVN ZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAlpX2luaGVyaXRfb3B0aW9uID0gUFFmbnVtYmVyKHJl cywgImluaGVyaXRfb3B0aW9uIik7CiAJaV9zZXRfb3B0aW9uID0gUFFmbnVtYmVyKHJlcywgInNl dF9vcHRpb24iKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhy ZXMpID4gMCAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQlmcHJpbnRmKE9QRiwg Ii0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4iKTsKIAogCS8qCkBAIC0xMTY3LDYgKzEz NTIsNyBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCWNoYXIJICAgKmdy YW50b3I7CiAJCQkJY2hhcgkgICAqc2V0X29wdGlvbiA9ICJ0cnVlIjsKIAkJCQlib29sCQlmb3Vu ZDsKKwkJCQlQUUV4cEJ1ZmZlciBjcmVhUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQkJ CS8qIElmIHdlIGFscmVhZHkgZGlkIHRoaXMgZ3JhbnQsIGRvbid0IGRvIGl0IGFnYWluLiAqLwog CQkJCWlmIChkb25lW2kgLSBzdGFydF0pCkBAIC0xMjIzLDggKzE0MDksOCBAQCBkdW1wUm9sZU1l bWJlcnNoaXAoUEdjb25uICpjb25uKQogCiAJCQkJLyogR2VuZXJhdGUgdGhlIGFjdHVhbCBHUkFO VCBzdGF0ZW1lbnQuICovCiAJCQkJcmVzZXRQUUV4cEJ1ZmZlcihvcHRidWYpOwotCQkJCWZwcmlu dGYoT1BGLCAiR1JBTlQgJXMiLCBmbXRJZChyb2xlKSk7Ci0JCQkJZnByaW50ZihPUEYsICIgVE8g JXMiLCBmbXRJZChtZW1iZXIpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiR1JB TlQgJXMiLCBmbXRJZChyb2xlKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBU TyAlcyIsIGZtdElkKG1lbWJlcikpOwogCQkJCWlmICgqYWRtaW5fb3B0aW9uID09ICd0JykKIAkJ CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAiQURNSU4gT1BUSU9OIik7CiAJCQkJaWYg KGR1bXBfZ3JhbnRfb3B0aW9ucykKQEAgLTEyNDUsMTAgKzE0MzEsMjQgQEAgZHVtcFJvbGVNZW1i ZXJzaGlwKFBHY29ubiAqY29ubikKIAkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAi U0VUIEZBTFNFIik7CiAJCQkJfQogCQkJCWlmIChvcHRidWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJ CQkJZnByaW50ZihPUEYsICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CisJCQkJCWFwcGVuZFBR RXhwQnVmZmVyKGNyZWFRcnksICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CiAJCQkJaWYgKGR1 bXBfZ3JhbnRvcnMpCi0JCQkJCWZwcmludGYoT1BGLCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChn cmFudG9yKSk7Ci0JCQkJZnByaW50ZihPUEYsICI7XG4iKTsKKwkJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoY3JlYVFyeSwgIiBHUkFOVEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOworCQkJCWFwcGVu ZFBRRXhwQnVmZmVyKGNyZWFRcnksICI7XG4iKTsKKworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwkJCQkJZnByaW50ZihPUEYsICIlcyIsIGNyZWFRcnktPmRhdGEpOworCQkJ CWVsc2UKKwkJCQl7CisJCQkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJCW5pbENhdGFsb2dJ ZCwgLyogY2F0YWxvZyBJRCAqLworCQkJCQkJCWNyZWF0ZUR1bXBJZExvY2FsKCksIC8qIGR1bXAg SUQgKi8KKwkJCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJkdW1wUm9sZU1lbWJlcnNoaXAiLAor CQkJCQkJCQkvLy5vd25lciA9IGRiYSwKKwkJCQkJCQkJLmRlc2NyaXB0aW9uID0gImR1bXBSb2xl TWVtYmVyc2hpcF9kZXMiLAorCQkJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJ CQkJCQkJCS5jcmVhdGVTdG10ID0gY3JlYVFyeS0+ZGF0YSkpOworCQkJCX0KIAkJCX0KIAkJfQog CkBAIC0xMjYwLDcgKzE0NjAsOCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQog CVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAotCWZwcmludGYoT1BG LCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihP UEYsICJcblxuIik7CiB9CiAKIApAQCAtMTI4Nyw3ICsxNDg4LDcgQEAgZHVtcFJvbGVHVUNQcml2 cyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJGUk9NIHBnX2NhdGFsb2cucGdfcGFyYW1ldGVyX2Fj bCAiCiAJCQkJCSAgICJPUkRFUiBCWSAxIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQor CWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkK IAkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBwcml2aWxlZ2VzIG9uIGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVyc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7 IGkrKykKQEAgLTEzMTIsMTQgKzE1MTMsMjggQEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNv bm4pCiAJCQlleGl0X25pY2VseSgxKTsKIAkJfQogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYt PmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9Q RiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQl7CisJCQlBcmNoaXZlRW50cnkoZm91dCwK KwkJCQkJbmlsQ2F0YWxvZ0lkLCAvKiBjYXRhbG9nIElEICovCisJCQkJCWNyZWF0ZUR1bXBJZExv Y2FsKCksIC8qIGR1bXAgSUQgKi8KKwkJCQkJQVJDSElWRV9PUFRTKC50YWcgPSAiZHVtcFJvbGVH VUNQcml2cyIsCisJCQkJCQkvLy5vd25lciA9IGRiYSwKKwkJCQkJCS5kZXNjcmlwdGlvbiA9ICJk dW1wUm9sZUdVQ1ByaXZzX2RlcyIsCisJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEs CisJCQkJCQkuY3JlYXRlU3RtdCA9IGJ1Zi0+ZGF0YSkpOworCQl9CiAKIAkJZnJlZShmcGFybmFt ZSk7CiAJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKLQlm cHJpbnRmKE9QRiwgIlxuXG4iKTsKKworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTMzMSw2ICsxNTQ2LDcgQEAgZHJv cFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJ aTsKKwlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJLyoKIAkg KiBHZXQgYWxsIHRhYmxlc3BhY2VzIGV4Y2VwdCBidWlsdC1pbiBvbmVzICh3aGljaCB3ZSBhc3N1 bWUgYXJlIG5hbWVkCkBAIC0xMzQxLDIxICsxNTU3LDM3IEBAIGRyb3BUYWJsZXNwYWNlcyhQR2Nv bm4gKmNvbm4pCiAJCQkJCSAgICJXSEVSRSBzcGNuYW1lICF+ICdecGdfJyAiCiAJCQkJCSAgICJP UkRFUiBCWSAxIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMo cmVzKSA+IDAgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJZnByaW50ZihPUEYs ICItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwg UFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKnNwY25hbWUgPSBQUWdldHZhbHVl KHJlcywgaSwgMCk7CiAKLQkJZnByaW50ZihPUEYsICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIs CisJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwK IAkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKIAkJCQlmbXRJZChzcGNuYW1lKSk7 CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIl cyIsIGRlbFFyeS0+ZGF0YSk7CisJCWVsc2UKKwkJeworCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJ CQkJCW5pbENhdGFsb2dJZCwgLyogY2F0YWxvZyBJRCAqLworCQkJCQljcmVhdGVEdW1wSWRMb2Nh bCgpLCAvKiBkdW1wIElEICovCisJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gImRyb3BUYWJsZXNw YWNlcyIsCisJCQkJCQkvLy5vd25lciA9IGRiYSwKKwkJCQkJCS5kZXNjcmlwdGlvbiA9ICJkcm9w VGFibGVzcGFjZXNfZGVzIiwKKwkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJ CQkJCS5jcmVhdGVTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJCQkvLyAuZHJvcFN0bXQgPSBkZWxR cnktPmRhdGEpKTsKKwkJfQogCX0KIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAi XG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYs ICJcblxuIik7CiB9CiAKIC8qCkBAIC0xMzgxLDcgKzE2MTMsNyBAQCBkdW1wVGFibGVzcGFjZXMo UEdjb25uICpjb25uKQogCQkJCQkgICAiV0hFUkUgc3BjbmFtZSAhfiAnXnBnXycgIgogCQkJCQkg ICAiT1JERVIgQlkgMSIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVw bGVzKHJlcykgPiAwICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJCWZwcmludGYo T1BGLCAiLS1cbi0tIFRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQ UW50dXBsZXMocmVzKTsgaSsrKQpAQCAtMTQ1MSw3ICsxNjgzLDI1IEBAIGR1bXBUYWJsZXNwYWNl cyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJICJUQUJMRVNQQUNFIiwgc3BjbmFtZSwKIAkJCQkJCQkg YnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJ CWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsK KworCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBUQUJMRVNQQUNFICVzJXM7XG4i LAorCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwgZm10SWQoZnNwY25hbWUpKTsK KworCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCW5pbENhdGFsb2dJZCwgLyogY2F0YWxvZyBJ RCAqLworCQkJCQljcmVhdGVEdW1wSWRMb2NhbCgpLCAvKiBkdW1wIElEICovCisJCQkJCUFSQ0hJ VkVfT1BUUygudGFnID0gImR1bXBUYWJsZXNwYWNlcyIsCisJCQkJCQkvLy5vd25lciA9IGRiYSwK KwkJCQkJCS5kZXNjcmlwdGlvbiA9ICJkdW1wVGFibGVzcGFjZXNfZGVzIiwKKwkJCQkJCS5zZWN0 aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCS5jcmVhdGVTdG10ID0gYnVmLT5kYXRhKSk7 CisJCQkJCS8vLmRyb3BTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJCX0KIAogCQlmcmVlKGZzcGNu YW1lKTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CkBAIC0xNDgxLDcgKzE3MzEsNyBAQCBk cm9wREJzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0 Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9SREVSIEJZIGRhdG5hbWUiKTsKIAotCWlmIChQ UW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCBkYXRhYmFzZXMg KGV4Y2VwdCBwb3N0Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAw OyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKQEAgLTE0OTcsOSArMTc0NywyNiBAQCBkcm9wREJz KFBHY29ubiAqY29ubikKIAkJCXN0cmNtcChkYm5hbWUsICJ0ZW1wbGF0ZTAiKSAhPSAwICYmCiAJ CQlzdHJjbXAoZGJuYW1lLCAicG9zdGdyZXMiKSAhPSAwKQogCQl7Ci0JCQlmcHJpbnRmKE9QRiwg IkRST1AgREFUQUJBU0UgJXMlcztcbiIsCisJCQlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQ UUV4cEJ1ZmZlcigpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIERBVEFC QVNFICVzJXM7XG4iLAogCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKIAkJCQkJ Zm10SWQoZGJuYW1lKSk7CisKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ CQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlB cmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCW5pbENhdGFsb2dJZCwgLyogY2F0YWxvZyBJRCAqLwor CQkJCQkJY3JlYXRlRHVtcElkTG9jYWwoKSwKKwkJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gIkRS T1BfREFUQUJBU0UiLAorCQkJCQkJCS8vLm93bmVyID0gZGJhLAorCQkJCQkJCS5kZXNjcmlwdGlv biA9ICJEUk9QX0RBVEFCQVNFX0NPTU1BTkRTIiwKKwkJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05f UFJFX0RBVEEsCisJCQkJCQkJLmNyZWF0ZVN0bXQgPSBkZWxRcnktPmRhdGEpKTsKKwkJCQkvLy5k cm9wU3RtdCA9IGRlbFFyeS0+ZGF0YSkpOworCQkJfQogCQl9CiAJfQogCkBAIC0xNTE3LDYgKzE3 ODQsNyBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1l KQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUEdyZXN1bHQg ICAqcmVzOworCXN0YXRpYyBib29sIGhlYWRlcl9kb25lID0gZmFsc2U7CiAKIAlwcmludGZQUUV4 cEJ1ZmZlcihidWYsICJTRUxFQ1QgdW5uZXN0KHNldGNvbmZpZykgRlJPTSBwZ19kYl9yb2xlX3Nl dHRpbmcgIgogCQkJCQkgICJXSEVSRSBzZXRkYXRhYmFzZSA9IDAgQU5EIHNldHJvbGUgPSAiCkBA IC0xNTMyLDcgKzE4MDAsOSBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnVzZXJuYW1lKQogCQljaGFyCSAgICpzYW5pdGl6ZWQ7CiAKIAkJc2FuaXRpemVkID0gc2Fu aXRpemVfbGluZSh1c2VybmFtZSwgdHJ1ZSk7Ci0JCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNl ciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQlpZiAoIWhlYWRlcl9kb25l ICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCisJCQlmcHJpbnRmKE9QRiwgIlxuLS1c bi0tIFVzZXIgQ29uZmlnIFwiJXNcIlxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwkJaGVhZGVyX2Rv bmUgPSB0cnVlOwogCQlmcmVlKHNhbml0aXplZCk7CiAJfQogCkBAIC0xNTQyLDcgKzE4MTIsMTkg QEAgZHVtcFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSkKIAkJ bWFrZUFsdGVyQ29uZmlnQ29tbWFuZChjb25uLCBQUWdldHZhbHVlKHJlcywgaSwgMCksCiAJCQkJ CQkJICAgIlJPTEUiLCB1c2VybmFtZSwgTlVMTCwgTlVMTCwKIAkJCQkJCQkgICBidWYpOwotCQlm cHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJewor CQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCW5pbENhdGFsb2dJZCwgLyogY2F0YWxvZyBJRCAq LworCQkJCQljcmVhdGVEdW1wSWRMb2NhbCgpLCAvKiBkdW1wIElEICovCisJCQkJCUFSQ0hJVkVf T1BUUygudGFnID0gImR1bXBVc2VyQ29uZmlnIiwKKwkJCQkJCS8vLm93bmVyID0gZGJhLAorCQkJ CQkJLmRlc2NyaXB0aW9uID0gImR1bXBVc2VyQ29uZmlnX2RlcyIsCisJCQkJCQkuc2VjdGlvbiA9 IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkuY3JlYXRlU3RtdCA9IGJ1Zi0+ZGF0YSkpOworCQl9 CiAJfQogCiAJUFFjbGVhcihyZXMpOwpAQCAtMTYwOCwxMCArMTg5MCwxMyBAQCBleHBhbmRfZGJu YW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwKICAqIER1bXAgY29udGVudHMgb2YgZGF0YWJhc2Vz LgogICovCiBzdGF0aWMgdm9pZAotZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCitkdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKIHsKIAlQ R3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwljaGFyCQlkYl9zdWJkaXJbTUFYUEdQQVRIXTsK KwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFUSF07CisJRklMRQkgICAqbWFwX2ZpbGUgPSBOVUxM OwogCiAJLyoKIAkgKiBTa2lwIGRhdGFiYXNlcyBtYXJrZWQgbm90IGRhdGFsbG93Y29ubiwgc2lu Y2Ugd2UnZCBiZSB1bmFibGUgdG8gY29ubmVjdApAQCAtMTYyNSwxOSArMTkxMCw0MyBAQCBkdW1w RGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1v ZGUgd2l0aCAtLWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkg ICAiU0VMRUNUIGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJ CSAgICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFO RCBkYXRjb25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3Rl bXBsYXRlMScpLCBkYXRuYW1lIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCAmJiBQUW50dXBsZXMocmVzKSA+IDApCiAJCWZwcmlu dGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CiAKKwkvKgorCSAqIElmIGRpcmVj dG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGNyZWF0ZSBhIHN1YmRpcmVjdG9y eQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZp bGUgb3Igc3ViZGlyZWN0b3J5CisJICogd2lsbCBiZSBjcmVhdGVkIGluIHRoYXQgc3ViZGlyZWN0 b3J5IGJ5IHBnX2R1bXAuCisJICovCisgICBpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwp CisgICB7CisJICAgY2hhciAgICAgICAgbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCisJICAg c25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMiLCBmaWxlbmFtZSk7 CisKKwkgICAvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVu ZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCSAgIGlmIChta2RpcihkYl9zdWJkaXIsIHBnX2Rpcl9j cmVhdGVfbW9kZSkgIT0gMCkKKwkJICAgcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0 b3J5IFwiJXNcIjogJW0iLCBkYl9zdWJkaXIpOworCisJICAgc25wcmludGYobWFwX2ZpbGVfcGF0 aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsKKworCSAgIC8qIENyZWF0ZSBh IG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCSAgIG1hcF9maWxlID0g Zm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1cpOworCSAgIGlmICghbWFwX2ZpbGUpCisJ CSAgIHBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBtYXBfZmlsZV9w YXRoKTsKKyAgIH0KKwogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsK IAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwogCQljaGFyCSAgICpz YW5pdGl6ZWQ7Ci0JCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOworCQljaGFyICAgICAgICpvaWQg PSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CisJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzID0gIiI7 CiAJCWludAkJCXJldDsKIAogCQkvKiBTa2lwIHRlbXBsYXRlMCwgZXZlbiBpZiBpdCdzIG5vdCBt YXJrZWQgIWRhdGFsbG93Y29ubi4gKi8KQEAgLTE2NTEsMTAgKzE5NjAsMTQgQEAgZHVtcERhdGFi YXNlcyhQR2Nvbm4gKmNvbm4pCiAJCQljb250aW51ZTsKIAkJfQogCi0JCXBnX2xvZ19pbmZvKCJk dW1waW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFtZSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwkJCXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRi bmFtZSk7CiAKIAkJc2FuaXRpemVkID0gc2FuaXRpemVfbGluZShkYm5hbWUsIHRydWUpOwotCQlm cHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRp emVkKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9Q RiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwog CQlmcmVlKHNhbml0aXplZCk7CiAKIAkJLyoKQEAgLTE2NjksMjQgKzE5ODIsMzggQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCXsKIAkJCWlmIChvdXRwdXRfY2xlYW4pCiAJCQkJY3Jl YXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0ZSI7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJY3JlYXRl X29wdHMgPSAiIjsKLQkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBj b21tYW5kLCB3ZSBtdXN0ICovCisJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29u bmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCisJCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKIAkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOwot CQkJfQogCQl9CiAJCWVsc2UKIAkJCWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRlIjsKIAotCQlpZiAo ZmlsZW5hbWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK IAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRz KTsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBh cHBlbmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUgbWFwLmRhdCBmaWxlLgorCQkgKi8K KwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgs ICJcIiVzXCIvXCIlc1wiLmRtcCIsIGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UgaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRI LCAiXCIlc1wiL1wiJXNcIi50YXIiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQllbHNlCisJCQkJc25w cmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1YmRpciwg b2lkKTsKKworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJuYW1lIGlu IG1hcCBmaWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQsIGRibmFt ZSk7CisJCX0KKworCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cywgZGJmaWxl cGF0aCwgYXJjaER1bXBGb3JtYXQpOwogCQlpZiAocmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdf ZHVtcCBmYWlsZWQgb24gZGF0YWJhc2UgXCIlc1wiLCBleGl0aW5nIiwgZGJuYW1lKTsKIAotCQlp ZiAoZmlsZW5hbWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKIAkJewogCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICgh T1BGKQpAQCAtMTY5NSw2ICsyMDIyLDEwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQog CQl9CiAJfQogCisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0g YXJjaE51bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAg LTE3MDQsNyArMjAzNSw4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogICogUnVuIHBn X2R1bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgogICovCiBzdGF0aWMgaW50 Ci1ydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykK K3J1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBj aGFyICpkYmZpbGUsCisJCSAgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKIHsKIAlQUUV4 cEJ1ZmZlckRhdGEgY29ubnN0cmJ1ZjsKIAlQUUV4cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTcxMywx NyArMjA0NSwzNiBAQCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpj cmVhdGVfb3B0cykKIAlpbml0UFFFeHBCdWZmZXIoJmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1 ZmZlcigmY21kKTsKIAotCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBw Z19kdW1wX2JpbiwKLQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkv KgotCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4t YXBwZW5kIHBnX2R1bXAKLQkgKiBmb3JtYXQuCisJICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBm b3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBkdW1wCisJICogZm9ybWF0IHRv IHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVtcC4KIAkgKi8KLQlpZiAoZmls ZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCWlmIChhcmNo RHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJc IiVzXCIgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgZGJmaWxlLCBjcmVhdGVfb3B0 cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3RvcnkpCisJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJlY3RvcnkgIik7CisJCWVsc2UgaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD10YXIg Iik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJ eworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4s CisJCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKKworCQkvKgorCQkgKiBJ ZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBw Z19kdW1wCisJCSAqIGZvcm1hdC4KKwkJICovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2Ug bmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE4 NjgsMyArMjIxOSw0MiBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFt ZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwog fQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICogVGhpcyB3aWxsIHZhbGlkYXRlIGR1 bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVGb3JtYXQKK3BhcnNlRHVtcEZvcm1hdChj b25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdDsKKwor CWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImMiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9 IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjdXN0b20iKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5 OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZGlyZWN0b3J5IikgPT0gMCkKKwkJ YXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAo Zm9ybWF0LCAicCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBp ZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwbGFpbiIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0 ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0IikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9y bWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UKKwkJ cGdfZmF0YWwoInVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0IFwiJXNcIjsgcGxlYXNlIHNwZWNp ZnkgXCJjXCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJCSBmb3JtYXQpOworCisJcmV0 dXJuIGFyY2hEdW1wRm9ybWF0OworfQorCitzdGF0aWMgaW50CitjcmVhdGVEdW1wSWRMb2NhbCh2 b2lkKQoreworCXJldHVybiArK2R1bXBJZFZhbDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IGM5 Nzc2MzA2YzVjLi4wMjE3NmE3N2JkNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jl c3RvcmUuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCkBAIC0yLDcgKzIsNyBA QAogICoKICAqIHBnX3Jlc3RvcmUuYwogICoJcGdfcmVzdG9yZSBpcyBhbiB1dGlsaXR5IGV4dHJh Y3RpbmcgcG9zdGdyZXMgZGF0YWJhc2UgZGVmaW5pdGlvbnMKLSAqCWZyb20gYSBiYWNrdXAgYXJj aGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAgdXNpbmcgdGhlIGFyY2hpdmVyCisgKglmcm9tIGEgYmFj a3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wL3BnX2R1bXBhbGwgdXNpbmcgdGhlIGFyY2hp dmVyCiAgKglpbnRlcmZhY2UuCiAgKgogICoJcGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhlIGJhY2t1 cCBhcmNoaXZlIGFuZApAQCAtNDEsMzEgKzQxLDYwIEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUu aCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBI QVZFX1RFUk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5jbHVkZSAi Y29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImR1bXB1 dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZl X3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdl dG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBf dXRpbHMuaCIKIAorCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSk7CiBz dGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVz dG9yZU9wdGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wgZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5 KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludAlyZXN0 b3JlX29uZV9kYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9u cyAqb3B0cywKKwkJCQkJCQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQg bnVtLAorCQkJCQkJCQkgYm9vbCBnbG9iYWxzX29ubHkpOworc3RhdGljIGludCByZXN0b3JlX2ds b2JhbF9vYmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpv cHRzLAorCQlpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSwgYm9vbCBn bG9iYWxzX29ubHkpOworc3RhdGljIGludAlyZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hh ciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJCQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVf cGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7CitzdGF0aWMg aW50CWdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJ U2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCVNpbXBsZVN0cmluZ0xp c3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVfb2lkX2xpc3Rf ZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgICBTaW1wbGVQ dHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworCisvKgorICogU3RvcmVzIGEgZGF0YWJhc2UgT0lE IGFuZCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLgorICovCit0eXBlZGVmIHN0cnVjdCBEYk9pZE5h bWUKK3sKKwlPaWQJCQlvaWQ7CisJY2hhcgkJc3RyW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8q IG51bGwtdGVybWluYXRlZCBzdHJpbmcgaGVyZSAqLworfSBEYk9pZE5hbWU7CisKIAogaW50CiBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAqb3B0czsKIAlp bnQJCQljOwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsKLQlBcmNo aXZlICAgICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVjOwogCWJvb2wJCWRhdGFfb25seSA9 IGZhbHNlOwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9lcnJvcnMgPSAw OworCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhj bHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJpZ2dl cnMgPSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CiAJc3RhdGljIGlu dAlpZl9leGlzdHMgPSAwOwpAQCAtODksNiArMTE4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAsIE5VTEws ICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxzLW9ubHki LCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsiZXhpdC1v bi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBOVUxMLCAn Tid9LApAQCAtMTQyLDYgKzE3Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7 InN0YXRpc3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3RhdGlzdGljc19vbmx5LCAxfSwKIAkJ eyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCiAJCXsicmVzdHJpY3Qta2V5 IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAorCQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgN30sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsK QEAgLTE3MCw3ICsyMDEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0K IAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJOmo6 bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhh cmdjLCBhcmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEi LAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTE5 NywxMSArMjI4LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChzdHJs ZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFy Zyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xvYmFs LmRhdCBmaWxlIGZyb20gZGlyZWN0b3J5ICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKKwkJ CQlicmVhazsKIAkJCWNhc2UgJ2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJ CQlvcHRzLT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwot CiAJCQljYXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJaWYgKCFv cHRpb25fcGFyc2VfaW50KG9wdGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkgIFBHX01B WF9KT0JTLApAQCAtMzE2LDYgKzM1MCw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQkJCQlleGl0KDEpOwogCQkJCW9wdHMtPmV4aXRfb25fZXJyb3IgPSB0cnVlOwogCQkJCWJyZWFr OworCQkJY2FzZSA3OgkJCQkvKiBkYXRhYmFzZSBwYXR0ZXJucyB0byBza2lwICovCisJCQkJc2lt cGxlX3N0cmluZ19saXN0X2FwcGVuZCgmZGJfZXhjbHVkZV9wYXR0ZXJucywgb3B0YXJnKTsKKwkJ CQlicmVhazsKIAogCQkJY2FzZSA2OgogCQkJCW9wdHMtPnJlc3RyaWN0X2tleSA9IHBnX3N0cmR1 cChvcHRhcmcpOwpAQCAtMzQ3LDYgKzM4NCwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAlpZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFtZSAmJiAhb3B0 cy0+dG9jU3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBhbmQgLWYvLS1m aWxlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFk ICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLS1l eGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxz LW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3Jl IGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyog U2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNlciBpcyBjb25mdXNl ZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBAIC00NzIsNiArNTE2LDEwNSBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1hdE5hbWUpOwog CX0KIAorCS8qCisJICogSWYgbWFwLmRhdCBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBh bGwgdGhlCisJICogZGF0YWJhc2VzIGZyb20gbWFwLmRhdCAsIGJ1dCBza2lwIHJlc3RvcmluZyB0 aG9zZSBtYXRjaGluZworCSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlp ZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmCisJCQkoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5 KGlucHV0RmlsZVNwZWMsICJtYXAuZGF0IikgfHwKKwkJCSBmaWxlX2V4aXN0c19pbl9kaXJlY3Rv cnkoaW5wdXRGaWxlU3BlYywgInRvYy50YXIiKSB8fAorCQkJIGZpbGVfZXhpc3RzX2luX2RpcmVj dG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLmRtcCIpKSkKKwl7CisJCWNoYXIgICAgICAgIGdsb2Jh bF9wYXRoW01BWFBHUEFUSF07CisKKwkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1 dEZpbGVTcGVjLCAidG9jLnRhciIpKQorCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFU SCwgIiVzL3RvYy50YXIiLCBpbnB1dEZpbGVTcGVjKTsKKwkJZWxzZSBpZiAoZmlsZV9leGlzdHNf aW5fZGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZG1wIikpCisJCQlzbnByaW50ZihnbG9i YWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLmRtcCIsIGlucHV0RmlsZVNwZWMpOworCQllbHNl CisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBpbnB1dEZpbGVTcGVj KTsKKworCQkvKgorCQkgKiBDYW4gb25seSB1c2UgLS1saXN0IG9yIC0tdXNlLWxpc3Qgb3B0aW9u cyB3aXRoIGEgc2luZ2xlIGRhdGFiYXNlCisJCSAqIGR1bXAuCisJCSAqLworCQlpZiAob3B0cy0+ dG9jU3VtbWFyeSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLWwvLS1saXN0IGNhbm5vdCBiZSB1c2Vk IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisJCWVs c2UgaWYgKG9wdHMtPnRvY0ZpbGUpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1MLy0tdXNlLWxpc3Qg Y2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1 bXBhbGwiKTsKKworCQkvKgorCQkgKiBUbyByZXN0b3JlIGZyb20gYSBwZ19kdW1wYWxsIGFyY2hp dmUsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbgorCQkgKiBtdXN0IGJlIHNwZWNpZmllZCB1 bmxlc3Mgd2UgYXJlIG9ubHkgcmVzdG9yaW5nIGdsb2JhbHMuCisJCSAqLworCQlpZiAoIWdsb2Jh bHNfb25seSAmJiBvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIm9w dGlvbiAtQy8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNo aXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBc IiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJCXBnX2xv Z19lcnJvcl9oaW50KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVzdG9yZWQgdXNpbmcg dGhlaXIgc3BlY2lmaWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCisJ CS8qIElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQlpZiAoZ2xv YmFsc19vbmx5KQorCQl7CisJCQluX2Vycm9ycyA9IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xv YmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBnbG9iYWxzX29ubHkpOworCisJ CQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIHNraXBwZWQgYmVjYXVzZSBvcHRpb24g LWcvLS1nbG9iYWxzLW9ubHkgd2FzIHNwZWNpZmllZCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJ LyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0ICovCisJCQluX2Vy cm9ycyA9IHJlc3RvcmVfYWxsX2RhdGFiYXNlcyhpbnB1dEZpbGVTcGVjLCBkYl9leGNsdWRlX3Bh dHRlcm5zLAorCQkJCQkJCQkJCQkgb3B0cywgbnVtV29ya2Vycyk7CisJCX0KKworCQkvKiBGcmVl IGRiIHBhdHRlcm4gbGlzdC4gKi8KKwkJc2ltcGxlX3N0cmluZ19saXN0X2Rlc3Ryb3koJmRiX2V4 Y2x1ZGVfcGF0dGVybnMpOworCX0KKwllbHNlCQkJCQkJLyogcHJvY2VzcyBpZiBtYXAuZGF0IGZp bGUgZG9lcyBub3QgZXhpc3QuICovCisJeworCQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFi YXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBnbG9iYWxzX29u bHkpOworCX0KKworCS8qIERvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBk dXJpbmcgcmVzdG9yZS4gKi8KKwlpZiAobl9lcnJvcnMpCisJeworCQlwZ19sb2dfd2FybmluZygi ZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisJCXJldHVybiAxOwor CX0KKworCXJldHVybiAwOworfQorCisvKgorICogcmVzdG9yZV9nbG9iYWxfb2JqZWN0cworICoK KyAqIFRoaXMgcmVzdG9yZSBhbGwgZ2xvYmFsIG9iamVjdHMuCisgKgorICogSWYgZ2xvYmFsc19v bmx5IGlzIHNldCwgdGhlbiBza2lwIERST1AgREFUQUJBU0UgY29tbWFuZHMgZnJvbSByZXN0b3Jl LgorICovCitzdGF0aWMgaW50IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5w dXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3JrZXJzLCBib29s IGFwcGVuZF9kYXRhLCBpbnQgbnVtLCBib29sIGdsb2JhbHNfb25seSkKK3sKKwlyZXR1cm4gcmVz dG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgYXBwZW5k X2RhdGEsIG51bSwgZ2xvYmFsc19vbmx5KTsKK30KKworLyoKKyAqIHJlc3RvcmVfb25lX2RhdGFi YXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRvYy5kYXQg ZmlsZS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJl c3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIg KmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkgaW50IG51bVdvcmtl cnMsIGJvb2wgYXBwZW5kX2RhdGEsIGludCBudW0sIGJvb2wgZ2xvYmFsc19vbmx5KQoreworCUFy Y2hpdmUgICAgKkFIOworCWludAkJCW5fZXJyb3JzOworCiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1 dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEws IG9wdHMpOwpAQCAtNDc5LDkgKzYyMiwxNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkvKgogCSAqIFdlIGRvbid0IGhhdmUgYSBjb25uZWN0aW9uIHlldCBidXQgdGhhdCBkb2Vzbid0 IG1hdHRlci4gVGhlIGNvbm5lY3Rpb24KIAkgKiBpcyBpbml0aWFsaXplZCB0byBOVUxMIGFuZCBp ZiB3ZSB0ZXJtaW5hdGUgdGhyb3VnaCBleGl0X25pY2VseSgpIHdoaWxlCi0JICogaXQncyBzdGls bCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBuby1vcC4KKwkgKiBp dCdzIHN0aWxsIE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9w LiBJZiB3ZSBhcmUKKwkgKiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVuIG9ubHkg dXBkYXRlIEFYIGhhbmRsZSBmb3IgY2xlYW51cCBhcworCSAqIHRoZSBwcmV2aW91cyBlbnRyeSB3 YXMgYWxyZWFkeSBpbiB0aGUgYXJyYXkgYW5kIHdlIGhhZCBjbG9zZWQgcHJldmlvdXMKKwkgKiBj b25uZWN0aW9uLCBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIGFycmF5IHNsb3QuCiAJICovCi0Jb25f ZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwlpZiAoIWFwcGVuZF9kYXRhIHx8IG51bSA9PSAwKQor CQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWVsc2UKKwkJcmVwbGFjZV9vbl9leGl0X2Ns b3NlX2FyY2hpdmUoQUgpOwogCiAJLyogTGV0IHRoZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0 byBiZSAqLwogCUFILT52ZXJib3NlID0gb3B0cy0+dmVyYm9zZTsKQEAgLTUwMSwyNSArNjUwLDIx IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNo aXZlUmVzdG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0b3JlQXJjaGl2ZShBSCk7CisJCVJlc3RvcmVB cmNoaXZlKEFILCBhcHBlbmRfZGF0YSwgZ2xvYmFsc19vbmx5KTsKIAl9CiAKLQkvKiBkb25lLCBw cmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgKi8KLQlpZiAoQUgtPm5fZXJyb3JzKQot CQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBBSC0+bl9l cnJvcnMpOworCW5fZXJyb3JzID0gQUgtPm5fZXJyb3JzOwogCiAJLyogQUggbWF5IGJlIGZyZWVk IGluIENsb3NlQXJjaGl2ZT8gKi8KLQlleGl0X2NvZGUgPSBBSC0+bl9lcnJvcnMgPyAxIDogMDsK LQogCUNsb3NlQXJjaGl2ZShBSCk7CiAKLQlyZXR1cm4gZXhpdF9jb2RlOworCXJldHVybiBuX2Vy cm9yczsKIH0KIAogc3RhdGljIHZvaWQKIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogewot CXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNo aXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMg cmVzdG9yZXMgUG9zdGdyZVNRTCBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcyBjcmVhdGVkIGJ5IHBn X2R1bXAgb3IgcGdfZHVtcGFsbC5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6 XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4gW0ZJTEVdXG4iKSwgcHJvZ25hbWUp OwogCkBAIC01MzcsNiArNjgyLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJp bnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkgZGF0YWJh c2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1DLCAtLWNy ZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2VcbiIpKTsKIAlw cmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQgb24gZXJyb3IsIGRl ZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAtZywgLS1nbG9iYWxzLW9u bHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzXG4i KSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAgICAgICByZXN0b3JlIG5h bWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0tam9icz1OVU0gICAgICAgICAgICAg ICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVzdG9yZVxuIikpOwogCXByaW50Zihf KCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAgdXNlIHRhYmxlIG9mIGNvbnRlbnRzIGZy b20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNTUzLDYgKzY5OSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIg KnByb2duYW1lKQogCXByaW50ZihfKCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVz dG9yZSBhcyBhIHNpbmdsZSB0cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJs ZS10cmlnZ2VycyAgICAgICAgICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJl c3RvcmVcbiIpKTsKIAlwcmludGYoXygiICAtLWVuYWJsZS1yb3ctc2VjdXJpdHkgICAgICAgIGVu YWJsZSByb3cgc2VjdXJpdHlcbiIpKTsKKwlwcmludGYoXygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9 UEFUVEVSTiAgIGRvIG5vdCByZXN0b3JlIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UocylcbiIpKTsK IAlwcmludGYoXygiICAtLWZpbHRlcj1GSUxFTkFNRSAgICAgICAgICAgIHJlc3RvcmUgb3Igc2tp cCBvYmplY3RzIGJhc2VkIG9uIGV4cHJlc3Npb25zXG4iCiAJCQkgIiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbiBGSUxFTkFNRVxuIikpOwogCXByaW50ZihfKCIgIC0taWYtZXhpc3Rz ICAgICAgICAgICAgICAgICAgdXNlIElGIEVYSVNUUyB3aGVuIGRyb3BwaW5nIG9iamVjdHNcbiIp KTsKQEAgLTU4OCw4ICs3MzUsOCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmlu dGYoXygiICAtLXJvbGU9Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJPTEUgYmVmb3JlIHJlc3Rv cmVcbiIpKTsKIAogCXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwg LVAsIC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNwZWNpZmllZFxu IgotCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsK KwkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQg LS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZVxuIgorCQkJICJjb21iaW5lZCBhbmQgc3BlY2lmaWVk IG11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwogCXByaW50 ZihfKCJcbklmIG5vIGlucHV0IGZpbGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBzdGFuZGFyZCBp bnB1dCBpcyB1c2VkLlxuXG4iKSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4i KSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIp LCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTY5NCwzICs4NDEsNDE1IEBAIHJlYWRf cmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0 cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogZmlsZV9leGlzdHNfaW5f ZGlyZWN0b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUg Z2l2ZW4gZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorZmlsZV9leGlzdHNfaW5fZGlyZWN0 b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0 YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQ R1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwo ImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0 KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCisvKgorICogZ2V0 X2RibmFtZXNfbGlzdF90b19yZXN0b3JlCisgKgorICogVGhpcyB3aWxsIG1hcmsgZm9yIHNraXBw aW5nIGFueSBlbnRyaWVzIGZyb20gZGJuYW1lX29pZF9saXN0IHRoYXQgcGF0dGVybiBtYXRjaCBh bgorICogZW50cnkgaW4gdGhlIGRiX2V4Y2x1ZGVfcGF0dGVybnMgbGlzdC4KKyAqCisgKiBSZXR1 cm5zIHRoZSBudW1iZXIgb2YgZGF0YWJhc2UgdG8gYmUgcmVzdG9yZWQuCisgKgorICovCitzdGF0 aWMgaW50CitnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJ CVNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0 IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJaW50CQkJY291bnRfZGIgPSAwOworCVBRRXhwQnVm ZmVyIHF1ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKKworCWlmICghY29ubiAmJiBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkK KwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5nIFBBVFRFUk4gYXMgTkFNRSBmb3IgLS1leGNsdWRl LWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYXRhYmFzZSBjb25uZWN0aW9uIHdoaWxlIGRvaW5nIHBn X3Jlc3RvcmUiKTsKKworCS8qCisJICogUHJvY2VzcyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFu ZCBpZiBzcGVjaWZpZWQgdG8gc2tpcCByZXN0b3JpbmcsIHRoZW4KKwkgKiByZW1vdmUgZGJuYW1l IGZyb20gbGlzdC4KKwkgKi8KKwlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJu YW1lX29pZF9saXN0LT5oZWFkOworCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQp CisJeworCQlEYk9pZE5hbWUgICpkYmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRy OworCQlib29sCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwkJUFFFeHBCdWZmZXIgZGJfbGl0 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubihkYl9s aXQsIGRiaWRuYW1lLT5zdHIsIGNvbm4pOworCisJCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwg KnBhdF9jZWxsID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBwYXRfY2VsbDsgcGF0X2NlbGwg PSBwYXRfY2VsbC0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzIGFuIGV4YWN0 IG1hdGNoIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB0cnkgYSBwYXR0ZXJuCisJCQkgKiBtYXRjaAor CQkJICovCisJCQlpZiAocGdfc3RyY2FzZWNtcChkYmlkbmFtZS0+c3RyLCBwYXRfY2VsbC0+dmFs KSA9PSAwKQorCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkvKiBPdGhlcndpc2UsIHRy eSBhIHBhdHRlcm4gbWF0Y2ggaWYgdGhlcmUgaXMgYSBjb25uZWN0aW9uICovCisJCQllbHNlIGlm IChjb25uKQorCQkJeworCQkJCWludAkJCWRvdGNudDsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LCAiU0VMRUNUIDEgIik7CisJCQkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKGNvbm4s IHF1ZXJ5LCBwYXRfY2VsbC0+dmFsLCBmYWxzZSwKKwkJCQkJCQkJCSAgZmFsc2UsIE5VTEwsIGRi X2xpdC0+ZGF0YSwKKwkJCQkJCQkJCSAgTlVMTCwgTlVMTCwgTlVMTCwgJmRvdGNudCk7CisKKwkJ CQlpZiAoZG90Y250ID4gMCkKKwkJCQl7CisJCQkJCXBnX2xvZ19lcnJvcigiaW1wcm9wZXIgcXVh bGlmaWVkIG5hbWUgKHRvbyBtYW55IGRvdHRlZCBuYW1lcyk6ICVzIiwKKwkJCQkJCQkJIGRiaWRu YW1lLT5zdHIpOworCQkJCQlQUWZpbmlzaChjb25uKTsKKwkJCQkJZXhpdF9uaWNlbHkoMSk7CisJ CQkJfQorCisJCQkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsKKworCQkJ CWlmICgoUFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19UVVBMRVNfT0spICYmIFBRbnR1cGxl cyhyZXMpKQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCQkJcGdfbG9n X2luZm8oImRhdGFiYXNlIG5hbWUgXCIlc1wiIG1hdGNoZXMgZXhjbHVkZSBwYXR0ZXJuIFwiJXNc IiIsIGRiaWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwpOworCQkJCX0KKworCQkJCVBRY2xlYXIo cmVzKTsKKwkJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCX0KKworCQkJaWYgKHNraXBf ZGJfcmVzdG9yZSkKKwkJCQlicmVhazsKKwkJfQorCisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkYl9s aXQpOworCisJCS8qCisJCSAqIE1hcmsgZGIgdG8gYmUgc2tpcHBlZCBvciBpbmNyZW1lbnQgdGhl IGNvdW50ZXIgb2YgZGJzIHRvIGJlCisJCSAqIHJlc3RvcmVkCisJCSAqLworCQlpZiAoc2tpcF9k Yl9yZXN0b3JlKQorCQl7CisJCQlwZ19sb2dfaW5mbygiZXhjbHVkaW5nIGRhdGFiYXNlIFwiJXNc IiIsIGRiaWRuYW1lLT5zdHIpOworCQkJZGJpZG5hbWUtPm9pZCA9IEludmFsaWRPaWQ7CisJCX0K KwkJZWxzZQorCQl7CisJCQljb3VudF9kYisrOworCQl9CisJfQorCisJZGVzdHJveVBRRXhwQnVm ZmVyKHF1ZXJ5KTsKKworCXJldHVybiBjb3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5hbWVf b2lkX2xpc3RfZnJvbV9tZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFkIGxp bmUgYnkgbGluZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFtZXMg YW5kIGNvcnJlc3BvbmRpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBv ZiBkYXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9k Ym5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxl UHRyTGlzdCAqZGJuYW1lX29pZF9saXN0KQoreworCVN0cmluZ0luZm9EYXRhIGxpbmVidWY7CisJ RklMRQkgICAqcGZpbGU7CisJY2hhcgkJbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWludAkJ CWNvdW50ID0gMDsKKworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBvbmx5IGdsb2JhbC5kYXQgZmls ZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMKKwkgKiB0aGVyZSBpcyBubyBkYXRh YmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGR1 bXBkaXJwYXRoLCAibWFwLmRhdCIpKQorCXsKKwkJcGdfbG9nX2luZm8oImRhdGFiYXNlIHJlc3Rv cmluZyBpcyBza2lwcGVkIGJlY2F1c2UgZmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QgaW4gZGly ZWN0b3J5IFwiJXNcIiIsICJtYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCQlyZXR1cm4gMDsKKwl9 CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZHVt cGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3Blbiht YXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdf ZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxlX3BhdGgpOwor CisJaW5pdFN0cmluZ0luZm8oJmxpbmVidWYpOworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1l L2RiX29pZCBjb21iaW5hdGlvbnMgdG8gdGhlIGxpc3QuICovCisJd2hpbGUgKHBnX2dldF9saW5l X2J1ZihwZmlsZSwgJmxpbmVidWYpKQorCXsKKwkJT2lkCQkJZGJfb2lkID0gSW52YWxpZE9pZDsK KwkJY2hhcgkgICAqZGJuYW1lOworCQlEYk9pZE5hbWUgICpkYmlkbmFtZTsKKwkJaW50CQkJbmFt ZWxlbjsKKwkJY2hhcgkgICAqcCA9IGxpbmVidWYuZGF0YTsKKworCQkvKiBFeHRyYWN0IGRib2lk LiAqLworCQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnApKQorCQkJcCsrOworCQlp ZiAocCA+IGxpbmVidWYuZGF0YSAmJiAqcCA9PSAnICcpCisJCXsKKwkJCXNzY2FuZihsaW5lYnVm LmRhdGEsICIldSIsICZkYl9vaWQpOworCQkJcCsrOworCQl9CisKKwkJLyogZGJuYW1lIGlzIHRo ZSByZXN0IG9mIHRoZSBsaW5lICovCisJCWRibmFtZSA9IHA7CisJCW5hbWVsZW4gPSBzdHJsZW4o ZGJuYW1lKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4aXQgaWYgdGhlIGZpbGUgaGFzIGFu eSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlkKGRiX29pZCkgfHwgbmFtZWxl biA8PSAxKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gZmlsZSBcIiVzXCIgb24gbGlu ZSAlZCIsIG1hcF9maWxlX3BhdGgsCisJCQkJCSBjb3VudCArIDEpOworCisJCXBnX2xvZ19pbmZv KCJmb3VuZCBkYXRhYmFzZSBcIiVzXCIgKE9JRDogJXUpIGluIGZpbGUgXCIlc1wiIiwKKwkJCQkJ ZGJuYW1lLCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCWRiaWRuYW1lID0gcGdfbWFsbG9j KG9mZnNldG9mKERiT2lkTmFtZSwgc3RyKSArIG5hbWVsZW4gKyAxKTsKKwkJZGJpZG5hbWUtPm9p ZCA9IGRiX29pZDsKKwkJc3RybGNweShkYmlkbmFtZS0+c3RyLCBkYm5hbWUsIG5hbWVsZW4pOwor CisJCXNpbXBsZV9wdHJfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYmlkbmFtZSk7CisJ CWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmls ZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlX2FsbF9kYXRhYmFzZXMK KyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNl bnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisg KiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZp ZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJucywgbnVt YmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0 b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJICBTaW1w bGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAor CQkJCQkgIGludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZVB0ckxpc3QgZGJuYW1lX29pZF9saXN0 ID0ge05VTEwsIE5VTEx9OworCWludAkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJCQludW1f dG90YWxfZGI7CisJaW50CQkJbl9lcnJvcnNfdG90YWw7CisJaW50CQkJY291bnQgPSAwOworCWNo YXIJICAgKmNvbm5lY3RlZF9kYiA9IE5VTEw7CisJYm9vbAkJZHVtcERhdGEgPSBvcHRzLT5kdW1w RGF0YTsKKwlib29sCQlkdW1wU2NoZW1hID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlib29sCQlkdW1w U3RhdGlzdGljcyA9IG9wdHMtPmR1bXBTY2hlbWE7CisJUEdjb25uICpjb25uID0gTlVMTDsKKwlj aGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCisJLyogQmFzZWQgb24gZmlsZSwgc2V0IHBh dGguICovCisJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9j LnRhciIpKQorCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLnRhciIs IGlucHV0RmlsZVNwZWMpOworCWVsc2UgaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1 dEZpbGVTcGVjLCAidG9jLmRtcCIpKQorCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRI LCAiJXMvdG9jLmRtcCIsIGlucHV0RmlsZVNwZWMpOworCWVsc2UKKwkJc25wcmludGYoZ2xvYmFs X3BhdGgsIE1BWFBHUEFUSCwgIiVzIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkvKiBTYXZlIGRiIG5h bWUgdG8gcmV1c2UgaXQgZm9yIGFsbCB0aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMtPmNwYXJh bXMuZGJuYW1lKQorCQljb25uZWN0ZWRfZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsKKworCW51 bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShpbnB1dEZpbGVTcGVj LCAmZGJuYW1lX29pZF9saXN0KTsKKworCS8qIElmIG1hcC5kYXQgaGFzIG5vIGVudHJpZXMsIHJl dHVybiBhZnRlciBwcm9jZXNzaW5nIGdsb2JhbCBjb21tYW5kcy4gKi8KKwlpZiAoZGJuYW1lX29p ZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xv YmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBmYWxzZSk7CisKKwlwZ19sb2df aW5mbyhuZ2V0dGV4dCgiZm91bmQgJWQgZGF0YWJhc2UgbmFtZSBpbiBcIiVzXCIiLAorCQkJCQkJ ICJmb3VuZCAlZCBkYXRhYmFzZSBuYW1lcyBpbiBcIiVzXCIiLAorCQkJCQkJIG51bV90b3RhbF9k YiksCisJCQkJbnVtX3RvdGFsX2RiLCAibWFwLmRhdCIpOworCisJLyoKKwkgKiBJZiBleGNsdWRl LXBhdHRlcm5zIGlzIGdpdmVuLCB0aGVuIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlIHRvIHByb2Nl c3MKKwkgKiBpdC4KKwkgKi8KKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwp CisJeworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCWNvbm4gPSBDb25uZWN0 RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0 LAorCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJ X0RFRkFVTFQsCisJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7 CisKKwkJCWlmICghY29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0 YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJaWYgKCFjb25u KQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIl c1wiIiwgInBvc3RncmVzIik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInBvc3RncmVz IiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0 LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2du YW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJLyogVHJ5IHdpdGggdGVtcGxhdGUx LiAqLworCQkJaWYgKCFjb25uKQorCQkJeworCQkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29u bmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAidGVtcGxhdGUxIik7CisKKwkJCQljb25uID0gQ29u bmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJ CQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVG QVVMVCwKKwkJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJ CQl9CisJCX0KKwl9CisKKwkvKgorCSAqIGZpbHRlciB0aGUgZGIgbGlzdCBhY2NvcmRpbmcgdG8g dGhlIGV4Y2x1ZGUgcGF0dGVybnMKKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGdldF9kYm5hbWVz X2xpc3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCQkJIGRi X2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rpb24gYXMgd2Ug YXJlIGRvbmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAoY29ubikKKwkJUFFm aW5pc2goY29ubik7CisKKwkvKiBPcGVuIHRvYy5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQg YWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCW5fZXJyb3JzX3RvdGFsID0gIHJlc3Rv cmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAw LCBmYWxzZSk7CisKKwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLwor CWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMIHx8IG51bV9kYl9yZXN0b3JlID09IDAp CisJeworCQlwZ19sb2dfaW5mbyhuZ2V0dGV4dCgibm8gZGF0YWJhc2UgbmVlZHMgcmVzdG9yaW5n IG91dCBvZiAlZCBkYXRhYmFzZSIsCisJCQkJCQkJICJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jp bmcgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYiksCisJCQkJCW51bV90b3RhbF9k Yik7CisJCXJldHVybiBuX2Vycm9yc190b3RhbDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0 byByZXN0b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3Rv cmUsIG51bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFiYXNl cyB0byByZXN0b3JlIGFmdGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRhYmFzZSBz d2l0Y2goZXMpLiAgTm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkgKi8KKwlm b3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7CisJ CSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRi aWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWNoYXIJCXN1YmRpcnBhdGhb TUFYUEdQQVRIXTsKKwkJY2hhcgkJc3ViZGlyZGJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCWRi ZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9lcnJvcnM7CisKKwkJLyogaWdub3JlIGRi cyBtYXJrZWQgZm9yIHNraXBwaW5nICovCisJCWlmIChkYmlkbmFtZS0+b2lkID09IEludmFsaWRP aWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRl X2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkCisJCSAqIGludG8gYW4gYWxy ZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJ ICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUo b3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlk ZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlyZGJwYXRoLCBNQVhQR1BB VEgsICIlcy9kYXRhYmFzZXMiLCBpbnB1dEZpbGVTcGVjKTsKKworCQkvKgorCQkgKiBMb29rIGZv ciB0aGUgZGF0YWJhc2UgZHVtcCBmaWxlL2Rpci4gSWYgdGhlcmUgaXMgYW4ge29pZH0udGFyIG9y CisJCSAqIHtvaWR9LmRtcCBmaWxlLCB1c2UgaXQuIE90aGVyd2lzZSB0cnkgdG8gdXNlIGEgZGly ZWN0b3J5IGNhbGxlZAorCQkgKiB7b2lkfQorCQkgKi8KKwkJc25wcmludGYoZGJmaWxlbmFtZSwg TUFYUEdQQVRILCAiJXUudGFyIiwgZGJpZG5hbWUtPm9pZCk7CisJCWlmIChmaWxlX2V4aXN0c19p bl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCXNucHJpbnRmKHN1YmRp cnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS50YXIiLCBpbnB1dEZpbGVTcGVjLCBk YmlkbmFtZS0+b2lkKTsKKwkJZWxzZQorCQl7CisJCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQ R1BBVEgsICIldS5kbXAiLCBkYmlkbmFtZS0+b2lkKTsKKworCQkJaWYgKGZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJCXNucHJpbnRmKHN1YmRp cnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS5kbXAiLCBpbnB1dEZpbGVTcGVjLCBk YmlkbmFtZS0+b2lkKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BB VEgsICIlcy9kYXRhYmFzZXMvJXUiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJ fQorCisJCXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUt PnN0cik7CisKKwkJLyogSWYgZGF0YWJhc2UgaXMgYWxyZWFkeSBjcmVhdGVkLCB0aGVuIGRvbid0 IHNldCBjcmVhdGVEQiBmbGFnLiAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsK KwkJCVBHY29ubgkgICAqdGVzdF9jb25uOworCisJCQl0ZXN0X2Nvbm4gPSBDb25uZWN0RGF0YWJh c2UoZGJpZG5hbWUtPnN0ciwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkJ b3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxU LAorCQkJCQkJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJ CQlpZiAodGVzdF9jb25uKQorCQkJeworCQkJCVBRZmluaXNoKHRlc3RfY29ubik7CisKKwkJCQkv KiBVc2UgYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlIGZvciBjb25uZWN0aW9uLiAqLworCQkJCW9w dHMtPmNyZWF0ZURCID0gMDsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGRiaWRuYW1lLT5z dHI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogd2UnbGwgaGF2ZSB0byBjcmVhdGUgaXQg Ki8KKwkJCQlvcHRzLT5jcmVhdGVEQiA9IDE7CisJCQkJb3B0cy0+Y3BhcmFtcy5kYm5hbWUgPSBj b25uZWN0ZWRfZGI7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBSZXNldCBmbGFncyAtIG1pZ2h0 IGhhdmUgYmVlbiByZXNldCBpbiBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBieSB0aGUKKwkJICogcHJl dmlvdXMgcmVzdG9yZS4KKwkJICovCisJCW9wdHMtPmR1bXBEYXRhID0gZHVtcERhdGE7CisJCW9w dHMtPmR1bXBTY2hlbWEgPSBkdW1wU2NoZW1hOworCQlvcHRzLT5kdW1wU3RhdGlzdGljcyA9IGR1 bXBTdGF0aXN0aWNzOworCisJCS8qIFJlc3RvcmUgdGhlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJ bl9lcnJvcnMgPSByZXN0b3JlX29uZV9kYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3Jr ZXJzLCB0cnVlLCAxLCBmYWxzZSk7CisKKwkJLyogUHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQg ZXJyb3JzIGR1cmluZyBzaW5nbGUgZGF0YWJhc2UgcmVzdG9yZS4gKi8KKwkJaWYgKG5fZXJyb3Jz KQorCQl7CisJCQluX2Vycm9yc190b3RhbCArPSBuX2Vycm9yczsKKwkJCXBnX2xvZ193YXJuaW5n KCJlcnJvcnMgaWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYmlkbmFt ZS0+c3RyLCBuX2Vycm9ycyk7CisJCX0KKworCQljb3VudCsrOworCX0KKworCS8qIExvZyBudW1i ZXIgb2YgcHJvY2Vzc2VkIGRhdGFiYXNlcy4gKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJl c3RvcmVkIGRhdGFiYXNlcyBpcyAlZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJu YW1lIGFuZCBkYm9pZCBsaXN0LiAqLworCXNpbXBsZV9wdHJfbGlzdF9kZXN0cm95KCZkYm5hbWVf b2lkX2xpc3QpOworCisJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2lj LnBsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzdkODkzZDVlNmEuLjU2 ZTg5ZGExZTVlCi0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMv YmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKQEAgLTIzNyw2ICsyMzcsMTIgQEAgY29tbWFuZF9m YWlsc19saWtlKAogCSdwZ19yZXN0b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQgLTFcLy0t c2luZ2xlLXRyYW5zYWN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAorY29tbWFu ZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycs ICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJv cjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRo IC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1k YXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Jwor KTsKKwogIyBhbHNvIGZhaWxzIGZvciAtciBhbmQgLXQsIGJ1dCBpdCBzZWVtcyBwb2ludGxlc3Mg dG8gYWRkIG1vcmUgdGVzdHMgZm9yIHRob3NlLgogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3Bn X2R1bXBhbGwnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScgXSwK QEAgLTI0NCw0ICsyNTAsOCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9w dGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8t LWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxs JywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNvZ25p emVkIG91dHB1dCBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFsbDogdW5yZWNvZ25pemVkIG91 dHB1dCBmb3JtYXQnKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3QvMDA2X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDZfcGdfZHVtcGFs bC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMC4uM2M3ZDJhZDdjNTMK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDZfcGdfZHVtcGFsbC5wbApA QCAtMCwwICsxLDM5NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRB TCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJHRlbXBkaXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcjsKK215ICRydW5fZGIgPSAncG9zdGdyZXMnOwor bXkgJHNlcCA9ICR3aW5kb3dzX29zID8gIlxcIiA6ICIvIjsKKworIyBUYWJsZXNwYWNlIGxvY2F0 aW9ucyB1c2VkIGJ5ICJyZXN0b3JlX3RhYmxlc3BhY2UiIHRlc3QgY2FzZS4KK215ICR0YWJsZXNw YWNlMSA9ICIke3RlbXBkaXJ9JHtzZXB9dGJsMSI7CitteSAkdGFibGVzcGFjZTIgPSAiJHt0ZW1w ZGlyfSR7c2VwfXRibDIiOworbWtkaXIoJHRhYmxlc3BhY2UxKSB8fCBkaWUgIm1rZGlyICR0YWJs ZXNwYWNlMSAkISI7Citta2RpcigkdGFibGVzcGFjZTIpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3Bh Y2UyICQhIjsKKworIyBTY2FwZSB0YWJsZXNwYWNlIGxvY2F0aW9ucyBvbiBXaW5kb3dzLgorJHRh Ymxlc3BhY2UxID0gJHdpbmRvd3Nfb3MgPyAoJHRhYmxlc3BhY2UxID1+IHMvXFwvXFxcXC9ncikg OiAkdGFibGVzcGFjZTE7CiskdGFibGVzcGFjZTIgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFj ZTIgPX4gcy9cXC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNlMjsKKworIyBXaGVyZSBwZ19kdW1wYWxs IHdpbGwgYmUgZXhlY3V0ZWQuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygnbm9kZScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKworIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IERlZmluaXRpb24gb2YgdGhlIHBnX2R1bXBhbGwgdGVzdCBjYXNlcyB0byBydW4uCisjCisjIEVh Y2ggb2YgdGhlc2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQgYW5kIHRob3NlIG5hbWVzIGFyZSB1c2Vk IGZvciBmYWlsCisjIHJlcG9ydGluZyBhbmQgYWxzbyB0byBzYXZlIHRoZSBkdW1wIGFuZCByZXN0 b3JlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisjIHRlc3QgdG8gYXNzZXJ0LgorIworIyBU aGUgInNldHVwX3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNjcmlwdCB0aGF0IGNvbnRhaW5zIFNRTCBj b21tYW5kcyB0byBleGVjdXRlCisjIGJlZm9yZSBvZiBhY3R1YWxseSBleGVjdXRlIHRoZSB0ZXN0 cy4gVGhlIHNldHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJlZm9yZSBvZgorIyBhbnkgdGVzdCBleGVj dXRpb24uCisjCisjIFRoZSAiZHVtcF9jbWQiIGFuZCAicmVzdG9yZV9jbWQiIGFyZSB0aGUgY29t bWFuZHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUKKyMgInJlc3RvcmVfY21kIiBtdXN0IGhh dmUgdGhlIC0tZmlsZSBmbGFnIHRvIHNhdmUgdGhlIHJlc3RvcmUgb3V0cHV0IHNvIHRoYXQgd2UK KyMgY2FuIGFzc2VydCBvbiBpdC4KKyMKKyMgVGhlICJsaWtlIiBhbmQgInVubGlrZSIgaXMgYSBy ZWdleHAgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHRoZSBwZ19yZXN0b3JlCisjIG91dHB1dC4gSXQg bXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVuIGZpbGxlZCBwZXIgdGVzdCBjYXNlcyBidXQg aXQgYWxzbworIyBjYW4gaGF2ZSBib3RoLiBTZWUgImV4Y2x1ZGluZ19kYXRhYmFzZXMiIHRlc3Qg Y2FzZSBmb3IgZXhhbXBsZS4KK215ICVwZ2R1bXBhbGxfcnVucyA9ICgKKwlyZXN0b3JlX3JvbGVz ID0+IHsKKwkJc2V0dXBfc3FsID0+ICcKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbCBXSVRIIEVOQ1JZ UFRFRCBQQVNTV09SRCBcJ2FkbWluXCcgU1VQRVJVU0VSOworCQlDUkVBVEUgUk9MRSBkdW1wYWxs MiBXSVRIIFJFUExJQ0FUSU9OIENPTk5FQ1RJT04gTElNSVQgMTA7JywKKwkJZHVtcF9jbWQgPT4g WworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSct LWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQg PT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5 JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzLnNxbCIsCisJCQkiJHRl bXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisJCQlccypcUUNSRUFU RSBST0xFIGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVtcGFsbDIgV0lUSCBOT1NV UEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5PTE9HSU4gUkVQTElDQVRJ T04gTk9CWVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQorCQkveG0KKwl9LAorCisJcmVz dG9yZV90YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JFQVRFIFJPTEUgdGFw OworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRhYmxlc3Bh Y2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJs ZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2VfY29zdD0xLjApOyIsCisJCWR1bXBfY21kID0+IFsKKwkJ CSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQg PT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5 JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2Uuc3FsIiwKKwkJ CSIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQkjIE1hdGNoICJFIiBhcyBv cHRpb25hbCBzaW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVuIHJ1bm5pbmcgb24KKwkJ IyBXaW5kb3dzLgorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0Ymwy IE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMic7XEUKKwkJCVxuXFFB TFRFUiBUQUJMRVNQQUNFIHRibDIgU0VUIChzZXFfcGFnZV9jb3N0PTEuMCk7XEUKKwkJL3htLAor CX0sCisKKwlyZXN0b3JlX2dyYW50cyA9PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNSRUFURSBE QVRBQkFTRSB0YXBncmFudHNkYjsKKwkJQ1JFQVRFIFNDSEVNQSBwcml2YXRlOworCQlDUkVBVEUg U0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEwMTsKKwkJQ1JFQVRFIEZVTkNUSU9OIGZuKCkgUkVUVVJO UyB2b2lkIEFTIFwkXCQKKwkJQkVHSU4KKwkJRU5EOworCQlcJFwkIExBTkdVQUdFIHBscGdzcWw7 CisJCUNSRUFURSBST0xFIHN1cGVyOworCQlDUkVBVEUgUk9MRSBncmFudDE7CisJCUNSRUFURSBS T0xFIGdyYW50MjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQzOworCQlDUkVBVEUgUk9MRSBncmFudDQ7 CisJCUNSRUFURSBST0xFIGdyYW50NTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ2OworCQlDUkVBVEUg Uk9MRSBncmFudDc7CisJCUNSRUFURSBST0xFIGdyYW50ODsKKworCQlDUkVBVEUgVEFCTEUgdCAo aWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJ CUdSQU5UIFNFTEVDVCBPTiBUQUJMRSB0IFRPIGdyYW50MTsKKwkJR1JBTlQgSU5TRVJUIE9OIFRB QkxFIHQgVE8gZ3JhbnQyOworCQlHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0IHRvIGdy YW50MzsKKwkJR1JBTlQgQ09OTkVDVCwgQ1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRP IGdyYW50NDsKKwkJR1JBTlQgVVNBR0UsIENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFu dDU7CisJCUdSQU5UIFVTQUdFLCBTRUxFQ1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJpYWwgVE8g Z3JhbnQ2OworCQlHUkFOVCBzdXBlciBUTyBncmFudDc7CisJCUdSQU5UIEVYRUNVVEUgT04gRlVO Q1RJT04gZm4oKSBUTyBncmFudDg7CisJCSIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1w YWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvcmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdf cmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9y ZV9ncmFudHMiLAorCQldLAorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFHUkFOVCBzdXBlciBUTyBn cmFudDcgV0lUSCBJTkhFUklUIFRSVUUgR1JBTlRFRCBCWVxFCisJCQkoLipcbikqCisJCQlcblxR R1JBTlQgQUxMIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTtcRQorCQkJKC4qXG4pKgorCQkJ XG5cUUdSQU5UIEFMTCBPTiBGVU5DVElPTiBwdWJsaWMuZm4oKSBUTyBncmFudDg7XEUKKwkJCSgu KlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwgT04gU0VRVUVOQ0UgcHVibGljLnNlcmlhbCBUTyBncmFu dDY7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBTRUxFQ1QgT04gVEFCTEUgcHVibGljLnQg VE8gZ3JhbnQxO1xFCisJCQlcblxRR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdy YW50MjtcRQorCQkJXG5cUUdSQU5UIEFMTCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDM7XEUK KwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBDUkVBVEUsQ09OTkVDVCBPTiBEQVRBQkFTRSB0YXBn cmFudHNkYiBUTyBncmFudDQ7XEUKKwkJL3htLAorCX0sCisKKwlleGNsdWRpbmdfZGF0YWJhc2Vz ID0+IHsKKwkJc2V0dXBfc3FsID0+ICdDUkVBVEUgREFUQUJBU0UgZGIxOworCQlcYyBkYjEKKwkJ Q1JFQVRFIFRBQkxFIHQxIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEpLCAo MiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDIgKGlkIGludCk7CisJCUlOU0VSVCBJTlRP IHQyIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiMjsK KwkJXGMgZGIyCisJCUNSRUFURSBUQUJMRSB0MyAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDMg VkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ0IChpZCBpbnQpOwor CQlJTlNFUlQgSU5UTyB0NCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBE QVRBQkFTRSBkYmV4MzsKKwkJXGMgZGJleDMKKwkJQ1JFQVRFIFRBQkxFIHQ1IChpZCBpbnQpOwor CQlJTlNFUlQgSU5UTyB0NSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFC TEUgdDYgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ2IFZBTFVFUyAoMSksICgyKSwgKDMpLCAo NCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiZXg0OworCQlcYyBkYmV4NAorCQlDUkVBVEUgVEFC TEUgdDcgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ3IFZBTFVFUyAoMSksICgyKSwgKDMpLCAo NCk7CisJCUNSRUFURSBUQUJMRSB0OCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDggVkFMVUVT ICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGI1OworCQlcYyBkYjUK KwkJQ1JFQVRFIFRBQkxFIHQ5IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0OSBWQUxVRVMgKDEp LCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDEwIChpZCBpbnQpOworCQlJTlNFUlQg SU5UTyB0MTAgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJJywKKwkJZHVtcF9jbWQgPT4g WworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSct LWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKKwkJCSctLWV4Y2x1ZGUt ZGF0YWJhc2UnID0+ICdkYmV4KicsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcy5zcWwiLAorCQkJJy0tZXhjbHVkZS1k YXRhYmFzZScgPT4gJ2RiNScsCisJCQkiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcyIsCisJ CV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjFcRQorCQkJKC4q XG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDEgKFxFCisJCQkoLipcbikqCisJCQlc blxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUg REFUQUJBU0UgZGIyXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQz IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDQgKC94bSwKKwkJ dW5saWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIzXEUKKwkJCSguKlxuKSoK KwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ1IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNS RUFURSBUQUJMRSBwdWJsaWMudDYgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIERBVEFC QVNFIGRiNFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NyAoXEUK KwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ4IChcRQorCQkJXG5cUUNS RUFURSBEQVRBQkFTRSBkYjVcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJs aWMudDkgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MTAgKFxF CisJCS94bSwKKwl9LAorCisJZm9ybWF0X2RpcmVjdG9yeSA9PiB7CisJCXNldHVwX3NxbCA9PiAi Q1JFQVRFIFRBQkxFIGZvcm1hdF9kaXJlY3RvcnkoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsK KwkJSU5TRVJUIElOVE8gZm9ybWF0X2RpcmVjdG9yeSBWQUxVRVMgKDEsIHRydWUsICduYW1lMScp LCAoMiwgZmFsc2UsICduYW1lMicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxs JywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBk aXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1h dF9kaXJlY3RvcnkiLAorCQldLAorCQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0 X2RpcmVjdG9yeSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0X3RhciA9 PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF90YXIoYSBpbnQsIGIgYm9v bGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X3RhciBWQUxVRVMgKDEsIGZhbHNl LCAnbmFtZTMnKSwgKDIsIHRydWUsICduYW1lNCcpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdw Z19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvZm9ybWF0X3RhciIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0 b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvZm9ybWF0X3Rhci5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAorCQldLAor CQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0X3RhciAoYSwgYiwgYykgRlJPTSBz dGRpbjsveG0KKwl9LAorCisJZm9ybWF0X2N1c3RvbSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JF QVRFIFRBQkxFIGZvcm1hdF9jdXN0b20oYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5T RVJUIElOVE8gZm9ybWF0X2N1c3RvbSBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwgKDIsIHRy dWUsICduYW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSct LWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1 c3RvbSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywK KwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9y bWF0X2N1c3RvbS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAorCQls aWtlID0+IHFyL14gXG5cUUNPUFkgcHVibGljLmZvcm1hdF9jdXN0b20gKGEsIGIsIGMpIEZST00g c3RkaW47L3htCisJfSwKKworCWR1bXBfZ2xvYmFsc19vbmx5ID0+IHsKKwkJc2V0dXBfc3FsID0+ ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcihhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJ TlNFUlQgSU5UTyBmb3JtYXRfZGlyIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1 ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0t Zm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWdsb2JhbHMtb25seScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9 PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsICctLWdsb2JhbHMtb25seScsCisJCQknLS1mb3Jt YXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFs c19vbmx5LnNxbCIsCisJCQkiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAorCQls aWtlID0+IHFyLworICAgICAgICAgICAgXlxzKlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDtcRVxzKlxu CisJCQkveG0KKwl9LCk7CisKKyMgRmlyc3QgZXhlY3V0ZSB0aGUgc2V0dXBfc3FsCitmb3JlYWNo IG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7CisJaWYgKCRwZ2R1bXBhbGxf cnVuc3skcnVufS0+e3NldHVwX3NxbH0pCisJeworCQkkbm9kZS0+c2FmZV9wc3FsKCRydW5fZGIs ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pOworCX0KK30KKworIyBFeGVjdXRl IHRoZSB0ZXN0cworZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9ydW5zKQor eworCSMgQ3JlYXRlIGEgbmV3IHRhcmdldCBjbHVzdGVyIHRvIHBnX3Jlc3RvcmUgZWFjaCB0ZXN0 IGNhc2UgcnVuIHNvIHRoYXQgd2UKKwkjIGRvbid0IG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBj bGVhbnVwIGZyb20gdGhlIHRhcmdldCBjbHVzdGVyIGFmdGVyIGVhY2gKKwkjIHJ1bi4KKwlteSAk dGFyZ2V0X25vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoInRhcmdldF8kcnVu Iik7CisJJHRhcmdldF9ub2RlLT5pbml0OworCSR0YXJnZXRfbm9kZS0+c3RhcnQ7CisKKwkjIER1 bXBhbGwgZnJvbSBub2RlIGNsdXN0ZXIuCisJJG5vZGUtPmNvbW1hbmRfb2soXEB7ICRwZ2R1bXBh bGxfcnVuc3skcnVufS0+e2R1bXBfY21kfSB9LAorCQkiJHJ1bjogcGdfZHVtcGFsbCBydW5zIik7 CisKKwkjIFJlc3RvcmUgdGhlIGR1bXAgb24gInRhcmdldF9ub2RlIiBjbHVzdGVyLgorCW15IEBy ZXN0b3JlX2NtZCA9ICgKKwkJQHsgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57cmVzdG9yZV9jbWR9 IH0sCisJCSctLWhvc3QnLCAkdGFyZ2V0X25vZGUtPmhvc3QsICctLXBvcnQnLCAkdGFyZ2V0X25v ZGUtPnBvcnQpOworCisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0gcnVuX2NvbW1hbmQoXEByZXN0 b3JlX2NtZCk7CisKKwkjIHBnX3Jlc3RvcmUgLS1maWxlIG91dHB1dCBmaWxlLgorCW15ICRvdXRw dXRfZmlsZSA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyLyR7cnVufS5zcWwiKTsKKworCWlmICggICAh KCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQorCQkmJiAhKCRwZ2R1bXBhbGxfcnVuc3sk cnVufS0+e3VubGlrZX0pKQorCXsKKwkJZGllICJtaXNzaW5nIFwibGlrZVwiIG9yIFwidW5saWtl XCIgaW4gdGVzdCBcIiRydW5cIiI7CisJfQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e2xpa2V9KQorCXsKKwkJbGlrZSgkb3V0cHV0X2ZpbGUsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e2xpa2V9LCAic2hvdWxkIGR1bXAgJHJ1biIpOworCX0KKworCWlmICgkcGdkdW1wYWxsX3J1bnN7 JHJ1bn0tPnt1bmxpa2V9KQorCXsKKwkJdW5saWtlKAorCQkJJG91dHB1dF9maWxlLAorCQkJJHBn ZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSwKKwkJCSJzaG91bGQgbm90IGR1bXAgJHJ1biIp OworCX0KK30KKworIyBTb21lIG5lZ2F0aXZlIHRlc3QgY2FzZSB3aXRoIGR1bXAgb2YgcGdfZHVt cGFsbCBhbmQgcmVzdG9yZSB1c2luZyBwZ19yZXN0b3JlCisjIHRlc3QgY2FzZSAxOiB3aGVuIC1D IGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2Rl LT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9m b3JtYXRfY3VzdG9tIiwKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZmlsZScgPT4g IiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6 IG9wdGlvbiAtQ1wvLS1jcmVhdGUgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgYW4g YXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLUMgaXMgbm90IHVzZWQg aW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3QgY2FzZSAy OiBXaGVuIC0tbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5v ZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGly L2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1s aXN0JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFy L1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtbFwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdo ZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVu IC0tbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsK KworIyB0ZXN0IGNhc2UgMzogV2hlbiBub24tZXhpc3QgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAt ZCBvcHRpb24KKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScs CisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3Vz dG9tJywKKwkJJy1kJyA9PiAnZGJwcScsCisJXSwKKwlxci9cUUZBVEFMOiAgZGF0YWJhc2UgImRi cHEiIGRvZXMgbm90IGV4aXN0XEUvLAorCSdXaGVuIG5vbi1leGlzdGVudCBkYXRhYmFzZSBpcyBn aXZlbiB3aXRoIC1kIG9wdGlvbiBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxs JworKTsKKworJG5vZGUtPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM5 LjMKCg== --0000000000007974640641447256--