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 1vElJr-00HWbc-Tq for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Oct 2025 09:21:15 +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 1vElJp-00DMnk-O2 for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Oct 2025 09:21:12 +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 1vElJo-00DMmf-TP for pgsql-hackers@lists.postgresql.org; Fri, 31 Oct 2025 09:21:12 +0000 Received: from mail-qk1-x72d.google.com ([2607:f8b0:4864:20::72d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vElJh-004i5y-1R for pgsql-hackers@lists.postgresql.org; Fri, 31 Oct 2025 09:21:11 +0000 Received: by mail-qk1-x72d.google.com with SMTP id af79cd13be357-88f2aebce7fso209638985a.3 for ; Fri, 31 Oct 2025 02:21:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761902465; x=1762507265; 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=beA2n5Y57ttwUHVevAKbh3J00Ghq6LthWK8xwLIQgC8=; b=ZQ7w1OszZAl1AlWVbV0FBPbcHZR2UgD9wSWLaF16wXJ3nKEuP18clMInrZ5VbMikNS RugQbBbx4wy6HYKsTM3ze2Vxy48Zk2Anocef8TGYKbvUBjAtrTBzVQtql/aT+3Sdo0La 4XTgwCV/o/cBMxXIMwi94zqUkxlU7K/Xn7y5zmNhHSmjxrUyaiAUp91C4uiz3u9SaZPe Pp8BouVO3Rsep77ERn/d4XAXy+gnP36fp/bX8BlPeNvABiVe1qMCeu3IZ04/psPgIES/ HpNis1rdZY0xVR5TXbpzWUPm8p87cGWMbdA8VHAJWnEiz+bX4vGePo0Ju9jD9++LTnHB tJ8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761902465; x=1762507265; 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=beA2n5Y57ttwUHVevAKbh3J00Ghq6LthWK8xwLIQgC8=; b=UM4QDoCpgYQ+e4JZ30JnaqbBln931vnmp6DeqL1wK2uxGU3ZK560Vefo/XYCbvH9Ql EHbCDWO70RAK5lLgOjM0jpr6PRY28qqBrZPKHmosTajgynHhp1e4O/tQzkZ+cGgoTC8G Sjoor49MhKKDLO5rG3DhHNTWb0FlUMA/PwtPZEacHeTf3+3ZVaDab+pdiMjdJVF6Fot/ SgWgYopOh8imA9eMtyE6qDuoAv8TthlNhNpLfS+GAVJpfzIoGvIbwCMhuGeTFRz+Tvw0 wka9IYXKRfhlWU+xWeZk7Cf4O3jMKOWTa5pMhAvEdInvimqNrj9yL3vL+1ALei/Z6HC6 GbTg== X-Forwarded-Encrypted: i=1; AJvYcCX3PfUxqroolAMQL0+1Y6uSTWWTfhAbusQACpUOgGXDgF1GILePyp8RE4IO3mn8vRiwBIOHCel/yDijjHXY@lists.postgresql.org X-Gm-Message-State: AOJu0Yzz2fX+8OG3LqbRXtAEgoXZFm/k2EnqdIo1ue6T4n9w9kVTeP1Q MG6jRT7XcyIk3ajwQK/wruzTviCBjzTrxxBBvZuwbmgqPe1Wxhy4jDG1WU/YSb/bwHauCnxf2Ou 4fmHo1plIJmJ2yqgJB8QD1bKICKQv8MQ= X-Gm-Gg: ASbGncsbzcN+plHp0CwL89BbzY3h+2cXBh/mW5TJZ0dEmqQ11dX6XtU2i7crBdi6R6z 5Ti3anyaW4VwfX1QVeTo/4HzLGy18VN8StgCWdSxVw8xpqWeXgShkMKMCGwd89ycYoN5iW86P3p VK89ouELIMXTOnJnPQ4r+rKwCo8EfQ52kavEv+HVCe6OHG0j4eqkbYJwGJyua337BToUhA6Ogk/ 3FwybOWqcFrVDcknr82zyCTkg+gXqIld/LIR52wqOOveNfuDuV3KMQUSkFndeU= X-Google-Smtp-Source: AGHT+IH8P3ZtsF5uBaSIwNnTKNv7jXtEnecm6Mo/MQBU2UgMqyxnxIUVlR/YzqTKc1uznTDkx/HOn9KgEBuNbNlvgMA= X-Received: by 2002:a05:622a:15c6:b0:4eb:a439:5fe8 with SMTP id d75a77b69052e-4ed30c13241mr25933451cf.0.1761902464556; Fri, 31 Oct 2025 02:21:04 -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: Fri, 31 Oct 2025 14:50:52 +0530 X-Gm-Features: AWmQ_blCLBDyGldZeWHvKiJ8rS8pnQnt9gHbAaf-Byu-ttHAtz69d-B18zDtLGY 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="00000000000087abfe064270e204" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000087abfe064270e204 Content-Type: text/plain; charset="UTF-8" On Tue, 28 Oct 2025 at 11:32, Mahendra Singh Thalor wrote: > > On Thu, 16 Oct 2025 at 16:24, Mahendra Singh Thalor wrote: > > > > On Wed, 15 Oct 2025 at 23:05, Mahendra Singh Thalor wrote: > > > > > > On Sun, 24 Aug 2025 at 22:12, Andrew Dunstan wrote: > > > > > > > > > > > > On 2025-08-23 Sa 9:08 PM, Noah Misch wrote: > > > > > > > > On Wed, Jul 30, 2025 at 02:51:59PM -0400, Andrew Dunstan 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. > > > > Hi, > Here I am attaching a re-based patch as v02 was failing on head. > Thanks Tushar for the testing. > Please review this and let me know feedback. > Hi all, Here I am attaching an updated patch for review and testing. Based on some offline comments by Andrew, I did some code cleanup. Please consider this patch for feedback. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000087abfe064270e204 Content-Type: application/octet-stream; name="v04-31102025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v04-31102025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhen6q4n0 RnJvbSBhMjk5NTdlNzZiOThmNmI1NDRjYTk4OWQ0ZDgwOThhNTk2ODUzNGZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaGFsb3JNYWhlbmRyYSA8bWFoaTZydW5AZ21haWwuY29tPgpE YXRlOiBGcmksIDMxIE9jdCAyMDI1IDE0OjQ1OjQ4ICswNTMwClN1YmplY3Q6IFtQQVRDSF0gTm9u 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 Z19kdW1wYWxsLmMgICAgICAgICB8IDYwOCArKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIHNy Yy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDU5MyArKysrKysrKysrKysrKysr KysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgIDEwICsK IHNyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsICB8IDM5NiArKysrKysrKysrKysr KysrKwogMTQgZmlsZXMgY2hhbmdlZCwgMTY1OCBpbnNlcnRpb25zKCspLCAxNDYgZGVsZXRpb25z KC0pCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9iaW4vcGdfZHVtcC90LzAwMV9i YXNpYy5wbAogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1w YWxsLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9k b2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCA5ZjYzOWY2MWRiMC4uNDA2M2U4 OGQzODggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xNiw3ICsxNiwxMCBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5wZ19kdW1w YWxsPC9yZWZuYW1lPgotICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBzY3JpcHQgZmlsZTwv cmVmcHVycG9zZT4KKworICA8cmVmcHVycG9zZT4KKyAgIGV4cG9ydCBhIDxwcm9kdWN0bmFtZT5Q b3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0 IG9yIHRvIG90aGVyIGZvcm1hdHMKKyAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIAog IDxyZWZzeW5vcHNpc2Rpdj4KQEAgLTMzLDcgKzM2LDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0 aW9uCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBp cyBhIHV0aWxpdHkgZm9yIHdyaXRpbmcgb3V0CiAgICAoPHF1b3RlPmR1bXBpbmc8L3F1b3RlPikg YWxsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzCi0gICBv ZiBhIGNsdXN0ZXIgaW50byBvbmUgc2NyaXB0IGZpbGUuICBUaGUgc2NyaXB0IGZpbGUgY29udGFp bnMKKyAgIG9mIGEgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQgZmlsZSBvciBhbiBhcmNoaXZl LiAgVGhlIG91dHB1dCBjb250YWlucwogICAgPGFjcm9ueW0+U1FMPC9hY3JvbnltPiBjb21tYW5k cyB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IHRvIDx4cmVmCiAgICBsaW5rZW5kPSJhcHAtcHNx bCIvPiB0byByZXN0b3JlIHRoZSBkYXRhYmFzZXMuICBJdCBkb2VzIHRoaXMgYnkKICAgIGNhbGxp bmcgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZWFjaCBkYXRhYmFzZSBpbiB0aGUg Y2x1c3Rlci4KQEAgLTUyLDExICs1NSwxNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAg PC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIFNRTCBzY3JpcHQgd2lsbCBiZSB3cml0dGVuIHRv IHRoZSBzdGFuZGFyZCBvdXRwdXQuICBVc2UgdGhlCisgICBQbGFpbiB0ZXh0IFNRTCBzY3JpcHRz IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQogICAgPG9w dGlvbj4tZjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiBvcHRpb24gb3Igc2hlbGwg b3BlcmF0b3JzIHRvCiAgICByZWRpcmVjdCBpdCBpbnRvIGEgZmlsZS4KICAgPC9wYXJhPgogCisg IDxwYXJhPgorICAgQXJjaGl2ZXMgaW4gb3RoZXIgZm9ybWF0cyB3aWxsIGJlIHBsYWNlZCBpbiBh IGRpcmVjdG9yeSBuYW1lZCB1c2luZyB0aGUKKyAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlv bj4tLWZpbGU8L29wdGlvbj4sIHdoaWNoIGlzIHJlcXVpcmVkIGluIHRoaXMgY2FzZS4KKyAgPC9w YXJhPgorCiAgIDxwYXJhPgogICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+ IG5lZWRzIHRvIGNvbm5lY3Qgc2V2ZXJhbAogICB0aW1lcyB0byB0aGUgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBzZXJ2ZXIgKG9uY2UgcGVyCkBAIC0xMzEsMTAgKzEzOSw4 NSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAgICAgU2Vu ZCBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0dGVkLCB0aGUK ICAgICAgICAgc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQuCisgICAgICAgIE5vdGU6IFRoaXMgb3B0 aW9uIGNhbiBvbmx5IGJlIG9taXR0ZWQgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlz IHBsYWluCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0 ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LUYgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZnkgdGhlIGZvcm1hdCBvZiBk dW1wIGZpbGVzLiAgSW4gcGxhaW4gZm9ybWF0LCBhbGwgdGhlIGR1bXAgZGF0YSBpcworICAgICAg ICBzZW50IGluIGEgc2luZ2xlIHRleHQgc3RyZWFtLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisg ICAgICAgIEluIGFsbCBvdGhlciBtb2RlcywgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxp Y2F0aW9uPiBmaXJzdCBjcmVhdGVzIHR3byBmaWxlczoKKyAgICAgICAgPGZpbGVuYW1lPnRvYy5k YXQvdG9jLmRtcC90b2MudGFyPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tYXAuZGF0PC9maWxl bmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgc3BlY2lmaWVkIGJ5IDxvcHRpb24+LS1m aWxlPC9vcHRpb24+LgorICAgICAgICBUaGUgZmlyc3QgZmlsZSBjb250YWlucyBnbG9iYWwgZGF0 YSwgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMuIFRoZSBzZWNvbmQKKyAgICAgICAgY29u dGFpbnMgYSBtYXBwaW5nIGJldHdlZW4gZGF0YWJhc2Ugb2lkcyBhbmQgbmFtZXMuIFRoZXNlIGZp bGVzIGFyZSB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNh dGlvbj4uIERhdGEgZm9yIGluZGl2aWR1YWwgZGF0YWJhc2VzIGlzIHBsYWNlZCBpbgorICAgICAg ICA8ZmlsZW5hbWU+ZGF0YWJhc2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LCBuYW1lZCB1c2lu ZyB0aGUgZGF0YWJhc2UncyA8dHlwZT5vaWQ8L3R5cGU+LgorCisgICAgICAgPHZhcmlhYmxlbGlz dD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8L2xp dGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRlcmFs PjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAg ICAgT3V0cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9yIGVhY2ggZGF0YWJhc2UsCisg ICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBkaXJlY3Rv cnkKKyAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBlPm9pZDwvdHlwZT4gYXMgaXRz IG5hbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAg PC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJt PjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cGxh aW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJh PgorICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBzY3JpcHQgZmlsZSAodGhlIGRl ZmF1bHQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAg IDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmN1 c3RvbTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBh cmE+CisgICAgICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBmb3IgZWFjaCBk YXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4g VGhlIGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJvaWQuZG1w PC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQorICAgICAgICAgICA8 dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAg ICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90ZXJtPgor ICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgdGFyLWZvcm1h dCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5w dXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxsIGJlIG5hbWVk IDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5kYm9pZDwvdHlwZT4g aXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhlIGRhdGFiYXNlLgorICAg ICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVu dHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAgICAgTm90ZTogc2VlIDx4cmVm IGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGRldGFpbHMKKyAgICAgICBvZiBob3cgdGhlIHZh cmlvdXMgbm9uIHBsYWluIHRleHQgYXJjaGl2ZXMgd29yay4KKworICAgICAgICA8L3BhcmE+Cisg ICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVu dHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJt PjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9y ZS5zZ21sCmluZGV4IGE0NjhhMzgzNjFhLi43NDk3YjUyN2FlNiAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0 b3JlLnNnbWwKQEAgLTE4LDggKzE4LDkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDxy ZWZuYW1lPnBnX3Jlc3RvcmU8L3JlZm5hbWU+CiAKICAgPHJlZnB1cnBvc2U+Ci0gICByZXN0b3Jl IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFu Ci0gICBhcmNoaXZlIGZpbGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGlj YXRpb24+CisgICByZXN0b3JlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g ZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMKKyAgIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1 bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0 aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCkBAIC0zOCwxMyArMzksMTQg QEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+ cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3IgcmVzdG9yaW5nIGEKLSAg IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbiBh cmNoaXZlCi0gICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gaW4gb25l IG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1 Y3RuYW1lPiBkYXRhYmFzZSBvciBjbHVzdGVyIGZyb20gYW4gYXJjaGl2ZQorICAgY3JlYXRlZCBi eSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IG9yCisgICA8eHJlZiBsaW5rZW5kPSJhcHAt cGctZHVtcGFsbCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRzLiAg SXQgd2lsbCBpc3N1ZSB0aGUgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRoZQot ICAgZGF0YWJhc2UgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMgc2F2 ZWQuICBUaGUKLSAgIGFyY2hpdmUgZmlsZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVz dG9yZTwvYXBwbGljYXRpb24+IHRvCisgICBkYXRhYmFzZSBvciBjbHVzdGVyIHRvIHRoZSBzdGF0 ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiBUaGUKKyAgIGFyY2hpdmVzIGFs c28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bwogICAgYmUg c2VsZWN0aXZlIGFib3V0IHdoYXQgaXMgcmVzdG9yZWQsIG9yIGV2ZW4gdG8gcmVvcmRlciB0aGUg aXRlbXMKLSAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2ZSBmaWxlcyBhcmUg ZGVzaWduZWQgdG8gYmUKKyAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2ZSBm b3JtYXRzIGFyZSBkZXNpZ25lZCB0byBiZQogICAgcG9ydGFibGUgYWNyb3NzIGFyY2hpdGVjdHVy ZXMuCiAgIDwvcGFyYT4KIApAQCAtNTIsMTAgKzU0LDE3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBjYW4gb3BlcmF0 ZSBpbiB0d28gbW9kZXMuCiAgICBJZiBhIGRhdGFiYXNlIG5hbWUgaXMgc3BlY2lmaWVkLCA8YXBw bGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+CiAgICBjb25uZWN0cyB0byB0aGF0IGRh dGFiYXNlIGFuZCByZXN0b3JlcyBhcmNoaXZlIGNvbnRlbnRzIGRpcmVjdGx5IGludG8KLSAgIHRo ZSBkYXRhYmFzZS4gIE90aGVyd2lzZSwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUgU1FMCi0gICBj b21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCBhbmQg d3JpdHRlbgorICAgdGhlIGRhdGFiYXNlLgorICAgV2hlbiByZXN0b3JpbmcgZnJvbSBhIGR1bXAg bWFkZSBieSA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LAorICAgZWFjaCBk YXRhYmFzZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZW4gdGhlIHJlc3RvcmF0aW9uIHdpbGwgYmUg cnVuIGluIHRoYXQKKyAgIGRhdGFiYXNlLgorCisgICBPdGhlcndpc2UsIHdoZW4gYSBkYXRhYmFz ZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAorICAg Y29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIG9yIGNsdXN0ZXIgaXMg Y3JlYXRlZCBhbmQgd3JpdHRlbgogICAgdG8gYSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1dC4gIFRo aXMgc2NyaXB0IG91dHB1dCBpcyBlcXVpdmFsZW50IHRvCi0gICB0aGUgcGxhaW4gdGV4dCBvdXRw dXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4uCisgICB0aGUg cGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNh dGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisKICAg IFNvbWUgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG91dHB1dCBhcmUgdGhlcmVmb3Jl IGFuYWxvZ291cyB0bwogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcHRp b25zLgogICA8L3BhcmE+CkBAIC0xNTIsNiArMTYxLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0 aW9uCiAgICAgICAgIGNvbW1hbmRzIHRoYXQgbWVudGlvbiB0aGlzIGRhdGFiYXNlLgogICAgICAg ICBBY2Nlc3MgcHJpdmlsZWdlcyBmb3IgdGhlIGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxzbyByZXN0 b3JlZCwKICAgICAgICAgdW5sZXNzIDxvcHRpb24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3BlY2lm aWVkLgorICAgICAgICA8b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdoZW4g cmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcworICAgICAgICBmcm9tIGFuIGFyY2hpdmUgY3Jl YXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgogICAgICAgIDwv cGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtMjQ3LDYgKzI1OCwxOSBAQCBQb3N0Z3JlU1FMIGRv Y3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJt PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KKyAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2Jh bCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2 YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlv bj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0 aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAg IDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0taW5kZXg9 PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlv bj48L3Rlcm0+CkBAIC01OTEsNiArNjE1LDI4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgog ICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3Rl bnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+ CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIERvIG5vdCByZXN0b3Jl IGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlwbGUgcGF0 dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAgPG9wdGlv bj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAgICAgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJhbWV0 ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0aGUg c2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlv bj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8eHJlZiBs aW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxlIGRhdGFi YXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAgICAgIGNo YXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUgY2FyZWZ1 bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVudCBzaGVs bCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAg ICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4g YXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4u CisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+ CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWx0ZXI9PHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlv bj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv Y29ubmVjdGRiLmMgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKaW5kZXggZDU1ZDUzZGJl ZWEuLmY0NGE4YTQ1ZmNhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCkBAIC0yODcsNyArMjg3LDYgQEAgZXhl Y3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCiAJewogCQlwZ19sb2df ZXJyb3IoInF1ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CiAJCXBnX2xv Z19lcnJvcl9kZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7Ci0JCVBRZmluaXNoKGNvbm4p OwogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9t ZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCBmM2M2NjlmNDg0 ZS4uM2UyMWFhZjU3ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAor KysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEwMyw2ICsxMDMsNyBAQCB0ZXN0 cyArPSB7CiAgICAgICAndC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbCcsCiAgICAgICAndC8wMDVf cGdfZHVtcF9maWx0ZXJmaWxlLnBsJywKICAgICAgICd0LzAwNl9wZ19kdW1wX2NvbXByZXNzLnBs JywKKwkgICd0LzAwN19wZ19kdW1wYWxsLnBsJywKICAgICAgICd0LzAxMF9kdW1wX2Nvbm5zdHIu cGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwu YyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IDA4NmFkY2RjNTAyLi41OTc0ZDY3 MDZmZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMzMyw2ICszMzMsMTYgQEAgb25fZXhpdF9jbG9zZV9h cmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShhcmNoaXZlX2Nsb3NlX2Nvbm5l Y3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKIH0KIAorLyoKKyAqIFdoZW4gcGdfcmVzdG9yZSByZXN0 b3JlcyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gdXBkYXRlIGFscmVhZHkgYWRkZWQgZW50cnkK KyAqIGludG8gYXJyYXkgZm9yIGNsZWFudXAuCisgKi8KK3ZvaWQKK3JlcGxhY2Vfb25fZXhpdF9j bG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsK K30KKwogLyoKICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9yIHNodXR0aW5nIGRvd24gZGF0 YWJhc2UgY29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vzc2VzIGNsZWFubHkuCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwLmgKaW5kZXggZDkwNDFkYWQ3MjAuLmY2MzFkOTQ1NDcyIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5o CkBAIC0zMTIsNyArMzEyLDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlvbnMoQXJjaGl2 ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAogZXh0ZXJuIHZv aWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpOwogCi1leHRlcm4g dm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgUmVzdG9yZUFy Y2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhLCBib29sIGdsb2JhbHNfb25seSk7 CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJuIEFyY2hpdmUgKk9wZW5B cmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCk7CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggNTllYWVjYjRlZDcuLmQzNzhjN2I2 MDFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC04Niw3ICs4Niw3IEBA IHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9p ZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0 YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3Rh dGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFt ZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMpOworCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZl T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0z MzksOSArMzM5LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhY KQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJsaWMgKi8KKy8qCisgKiBS ZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBhcHBlbmQg ZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBk YXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQKLVJlc3Rv cmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9v bCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29ubHkpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUgg PSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+cHVi bGljLnJvcHQ7CkBAIC00NTgsNyArNDYzLDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhY KQogCSAqLwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSB8fCBy b3B0LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKQot CQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjKTsK KwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYywg YXBwZW5kX2RhdGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFz ZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtNzYxLDYgKzc2Niw5IEBAIFJlc3RvcmVBcmNoaXZlKEFy Y2hpdmUgKkFIWCkKIAkJCWlmICgodGUtPnJlcXMgJiAoUkVRX1NDSEVNQSB8IFJFUV9EQVRBIHwg UkVRX1NUQVRTKSkgPT0gMCkKIAkJCQljb250aW51ZTsJCS8qIGlnbm9yZSBpZiBub3QgdG8gYmUg ZHVtcGVkIGF0IGFsbCAqLwogCisJCQlpZiAoZ2xvYmFsc19vbmx5ICYmIHRlICYmIHRlLT50YWcg JiYgKHN0cmNtcCh0ZS0+dGFnLCAiRFJPUF9EQVRBQkFTRSIpID09IDApKQorCQkJCWNvbnRpbnVl OworCiAJCQlzd2l0Y2ggKF90b2NFbnRyeVJlc3RvcmVQYXNzKHRlKSkKIAkJCXsKIAkJCQljYXNl IFJFU1RPUkVfUEFTU19NQUlOOgpAQCAtMTMxNiw3ICsxMzI0LDcgQEAgUHJpbnRUT0NTdW1tYXJ5 KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxl bmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3Nw ZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3Bl YywgZmFsc2UpOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9mKHN0YW1wX3N0ciks IFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUpKSA9 PSAwKQpAQCAtMTY5NSw3ICsxNzAzLDggQEAgYXJjaHByaW50ZihBcmNoaXZlICpBSCwgY29uc3Qg Y2hhciAqZm10LC4uLikKIAogc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpB SCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYywKKwkJICBib29sIGFwcGVuZF9kYXRhKQogewogCUNvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CkBAIC0xNzE1LDcgKzE3MjQsNyBA QCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVs c2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZUFw cGVuZCkKKwlpZiAoYXBwZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCiAJ CW1vZGUgPSBQR19CSU5BUllfQTsKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5BUllfVzsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCAzMjViNTNmYzliZC4uMzY1MDczYjNlYWUg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTM5NCw2ICszOTQsNyBAQCBz dHJ1Y3QgX3RvY0VudHJ5CiAKIGV4dGVybiBpbnQJcGFyYWxsZWxfcmVzdG9yZShBcmNoaXZlSGFu ZGxlICpBSCwgVG9jRW50cnkgKnRlKTsKIGV4dGVybiB2b2lkIG9uX2V4aXRfY2xvc2VfYXJjaGl2 ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2FyY2hp dmUoQXJjaGl2ZSAqQUhYKTsKIAogZXh0ZXJuIHZvaWQgd2Fybl9vcl9leGl0X2hvcnJpYmx5KEFy Y2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRm KDIsIDMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBiNWJhM2I0NmRkOS4uODE4Yjgw YTkzNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2LDcgKzgyNiw3IEBAIF9DbG9z ZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJvc2UgPSBBSC0+cHVibGljLnZl cmJvc2U7CiAJCUFILT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJUmVzdG9yZUFyY2hpdmUoKEFy Y2hpdmUgKikgQUgpOworCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCwgZmFsc2UsIGZh bHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJjaGl2ZSAqKSBBSCwgc2F2RG9wdCwgc2F2 Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDQ3OTEzMTc4YTkzLi4wMGNlOTQ2YWFiMSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jCkBAIC0xMjkyLDcgKzEyOTIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkgKiByaWdodCBub3cuCiAJICovCiAJaWYgKHBsYWluVGV4dCkKLQkJUmVzdG9yZUFyY2hpdmUo Zm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQsIGZhbHNlLCBmYWxzZSk7CiAKIAlDbG9zZUFy Y2hpdmUoZm91dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMg Yi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCmluZGV4IGJiNDUxYzFiYWUxLi42MDFiOWY5 NzM4ZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiZmVf dXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0 b3B0X2xvbmcuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKIAogLyogdmVyc2lv biBzdHJpbmcgd2UgZXhwZWN0IGJhY2sgZnJvbSBwZ19kdW1wICovCiAjZGVmaW5lIFBHRFVNUF9W RVJTSU9OU1RSICJwZ19kdW1wIChQb3N0Z3JlU1FMKSAiIFBHX1ZFUlNJT04gIlxuIgpAQCAtNjUs OSArNjYsMTAgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBz dGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGRy b3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQ R2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFy Y2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChj b25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7CitzdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLAorCQkJCQkgIGNoYXIgKmRiZmls ZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBidWlsZFNoU2Vj TGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBP aWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKm9i am5hbWUsCkBAIC03Niw2ICs3OCw5IEBAIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5kKFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhwYW5kX2RibmFtZV9w YXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAogCQkJCQkJ CQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMgdm9pZCByZWFkX2R1bXBhbGxf ZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybik7 CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0 KTsKK3N0YXRpYyBpbnQgY3JlYXRlRHVtcElkKHZvaWQpOworc3RhdGljIHZvaWQgY3JlYXRlT25l QXJjaGl2ZUVudHJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBjaGFyICp0YWcpOwogCiBzdGF0 aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIFBRRXhwQnVmZmVyIHBnZHVt cG9wdHM7CkBAIC0xMjMsNiArMTI4LDEzIEBAIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFi YXNlX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0aWMgU2ltcGxlU3RyaW5n TGlzdCBkYXRhYmFzZV9leGNsdWRlX25hbWVzID0ge05VTEwsIE5VTEx9OwogCiBzdGF0aWMgY2hh ciAqcmVzdHJpY3Rfa2V5Oworc3RhdGljIEFyY2hpdmUgKmZvdXQgPSBOVUxMOworc3RhdGljIHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKK3N0YXRpYyBp bnQgZHVtcElkVmFsID0gMDsKK3N0YXRpYyBjb25zdCBDYXRhbG9nSWQgbmlsQ2F0YWxvZ0lkID0g ezAsIDB9Oworc3RhdGljIEFyY2hpdmVNb2RlIGFyY2hpdmVNb2RlID0gYXJjaE1vZGVXcml0ZTsK K3N0YXRpYyBEYXRhRGlyU3luY01ldGhvZCBzeW5jX21ldGhvZCA9IERBVEFfRElSX1NZTkNfTUVU SE9EX0ZTWU5DOworc3RhdGljIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVs bDsKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0xNDgsNiArMTYwLDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7InBhc3N3b3JkIiwgbm9fYXJndW1l bnQsIE5VTEwsICdXJ30sCiAJCXsibm8tcHJpdmlsZWdlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAn eCd9LAogCQl7Im5vLWFjbCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAorCQl7ImZvcm1hdCIs IHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnRid9LAogCiAJCS8qCiAJCSAqIHRoZSBmb2xsb3dp bmcgb3B0aW9ucyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGxldHRlcgpA QCAtMTk3LDYgKzIxMCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAljaGFyCSAg ICpwZ2RiID0gTlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJY29uc3QgY2hhciAq ZHVtcGVuY29kaW5nID0gTlVMTDsKKwljb25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwogCXRy aXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9 IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjA4LDYgKzIyMiw4IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpbnQJCQljLAogCQkJCXJldDsKIAlpbnQJ CQlvcHRpbmRleDsKKwlEdW1wT3B0aW9ucyBkb3B0OworCWNoYXIgICAgICAgIGdsb2JhbF9wYXRo W01BWFBHUEFUSF07CiAKIAlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7CiAJcGdfbG9nZ2luZ19z ZXRfbGV2ZWwoUEdfTE9HX1dBUk5JTkcpOwpAQCAtMjQ2LDcgKzI2Miw5IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwog Ci0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpy c1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJSW5pdER1bXBP cHRpb25zKCZkb3B0KTsKKworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJh Y2Q6RTpmOkY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkg IT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTI1Nyw2ICsyNzUsNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ2MnOgogCQkJCW91dHB1dF9jbGVhbiA9 IHRydWU7CisJCQkJZG9wdC5vdXRwdXRDbGVhbiA9IDE7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2Ug J2QnOgpAQCAtMjc0LDcgKzI5Myw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNo ZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAn Ric6CisJCQkJZm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJ Y2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTMxNCw2 ICszMzUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ1UnOgog CQkJCXBndXNlciA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWRvcHQuY3BhcmFtcy51c2VybmFt ZSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICd2JzoKQEAgLTQy OSw2ICs0NTEsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2Vs eSgxKTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0 ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCisJLyoKKwkgKiBJZiBhIG5vbi1wbGFp biBmb3JtYXQgaXMgc3BlY2lmaWVkLCBhIGZpbGUgbmFtZSBpcyBhbHNvIHJlcXVpcmVkIGFzIHRo ZQorCSAqIHBhdGggdG8gdGhlIG1haW4gZGlyZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZv cm1hdCAhPSBhcmNoTnVsbCAmJgorCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIp ID09IDApKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLUYvLS1mb3JtYXQ9ZHxjfHQgcmVx dWlyZXMgb3B0aW9uIC1mLy0tZmlsZSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMg LS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2Vs eSgxKTsKKwl9CisKIAkvKgogCSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVk IGluIHRoZSBkdW1wLCBzd2l0Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xlcyB3aGljaCBpcyBlcXVh bGx5IHVzZWZ1bCwganVzdCBtb3JlIGxpa2VseSB0byBoYXZlIHVucmVzdHJpY3RlZApAQCAtNDg5 LDYgKzUyNiwzNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHNlcXVlbmNl X2RhdGEpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLS1zZXF1ZW5jZS1k YXRhIik7CiAKKwkvKgorCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhl cndpc2UgdXNlIHN0ZG91dC4gIElmIHJlcXVpcmVkLAorCSAqIHRoZW4gY3JlYXRlIG5ldyBkaXJl Y3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJQXNz ZXJ0KGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBvciBhY2NlcHQgdGhl IGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29wZW5fZGlyKGZpbGVu YW1lKTsKKworCQkvKiBzZXQgZmlsZSBwYXRoIGZvciBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLwor CQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCXNucHJpbnRmKGdsb2JhbF9w YXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZG1wIiwgZmlsZW5hbWUpOworCQllbHNlIGlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFU SCwgIiVzL3RvYy50YXIiLCBmaWxlbmFtZSk7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hEaXJlY3RvcnkpCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMi LCBmaWxlbmFtZSk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQorCXsKKwkJT1BGID0gZm9wZW4o ZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCSBmaWxlbmFtZSk7CisJfQor CWVsc2UKKwkJT1BGID0gc3Rkb3V0OworCiAJLyoKIAkgKiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBh IHJlc3RyaWN0IGtleSwgb25lIHdpbGwgYmUgYXBwb2ludGVkIGZvciB5b3UuCiAJICovCkBAIC01 MzgsMTkgKzYwNCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlleHBhbmRfZGJu YW1lX3BhdHRlcm5zKGNvbm4sICZkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zLAogCQkJCQkJICAg JmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCi0JLyoKLQkgKiBPcGVuIHRoZSBvdXRwdXQgZmls ZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKLQkgKi8KLQlpZiAoZmlsZW5hbWUp Ci0JewotCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwotCQlpZiAoIU9QRikK LQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJ CQkJIGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYgPSBzdGRvdXQ7Ci0KIAkvKgogCSAqIFNl dCB0aGUgY2xpZW50IGVuY29kaW5nIGlmIHJlcXVlc3RlZC4KIAkgKi8KQEAgLTU4NSwzNyArNjM4 LDExNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHF1b3RlX2FsbF9pZGVu dGlmaWVycykKIAkJZXhlY3V0ZUNvbW1hbmQoY29ubiwgIlNFVCBxdW90ZV9hbGxfaWRlbnRpZmll cnMgPSB0cnVlIik7CiAKLQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNl IGNsdXN0ZXIgZHVtcFxuLS1cblxuIik7CiAJaWYgKHZlcmJvc2UpCiAJCWR1bXBUaW1lc3RhbXAo IlN0YXJ0ZWQgb24iKTsKIAotCS8qCi0JICogRW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRvIGJsb2Nr IGFueSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1jb21tYW5kcy4gIEEKLQkgKiBtYWxpY2lvdXMgc291 cmNlIG1pZ2h0IHRyeSB0byBpbmplY3QgYSB2YXJpZXR5IG9mIHRoaW5ncyB2aWEgYm9ndXMKLQkg KiByZXNwb25zZXMgdG8gcXVlcmllcy4gIFdoaWxlIHdlIGNhbm5vdCBwcmV2ZW50IHN1Y2ggc291 cmNlcyBmcm9tCi0JICogYWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUs IHdlIGNhbiBibG9jayBwc3FsCi0JICogbWV0YS1jb21tYW5kcyBzbyB0aGF0IHRoZSBjbGllbnQg bWFjaGluZSB0aGF0IHJ1bnMgcHNxbCB3aXRoIHRoZSBkdW1wCi0JICogb3V0cHV0IHJlbWFpbnMg dW5hZmZlY3RlZC4KLQkgKi8KLQlmcHJpbnRmKE9QRiwgIlxccmVzdHJpY3QgJXNcblxuIiwgcmVz dHJpY3Rfa2V5KTsKKwkvKiBjcmVhdGUgYSBhcmNoaXZlIGZpbGUgZm9yIGdsb2JhbCBjb21tYW5k cy4gKi8KKwlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJewor CQkvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSAqLworCQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShnbG9i YWxfcGF0aCwgYXJjaER1bXBGb3JtYXQsIGNvbXByZXNzaW9uX3NwZWMsCisJCQkJZG9zeW5jLCBh cmNoaXZlTW9kZSwgTlVMTCwgc3luY19tZXRob2QpOwogCi0JLyoKLQkgKiBXZSB1c2VkIHRvIGVt aXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5vIHB1cnBvc2UKLQkg KiBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3IgaW5zdGFsbGF0aW9ucyB3aXRob3V0IGEg cG9zdGdyZXMKLQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUg aXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgotCSAqIGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0 byBhdCB0aGUgbW9tZW50IGlzIGZpbmUuCi0JICovCisJCS8qIE1ha2UgZHVtcCBvcHRpb25zIGFj Y2Vzc2libGUgcmlnaHQgYXdheSAqLworCQlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwg TlVMTCk7CisKKwkJKChBcmNoaXZlSGFuZGxlICogKWZvdXQpIC0+Y29ubmVjdGlvbiA9IGNvbm47 CisJCSgoQXJjaGl2ZUhhbmRsZSAqICkgZm91dCkgLT4gcHVibGljLm51bVdvcmtlcnMgPSAxOwor CisJCS8qIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGhvb2sgKi8KKwkJb25fZXhpdF9jbG9zZV9hcmNo aXZlKGZvdXQpOworCisJCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kgdG8gYmUg Ki8KKwkJZm91dC0+dmVyYm9zZSA9IHZlcmJvc2U7CisKKwkJLyoKKwkJICogV2UgYWxsb3cgdGhl IHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9m CisJCSAqIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGlu IHBnX2R1bXBhbGwuYy4pCisJCSAqLworCQlmb3V0LT5taW5SZW1vdGVWZXJzaW9uID0gOTAyMDA7 CisJCWZvdXQtPm1heFJlbW90ZVZlcnNpb24gPSAoUEdfVkVSU0lPTl9OVU0gLyAxMDApICogMTAw ICsgOTk7CisJCWZvdXQtPm51bVdvcmtlcnMgPSAxOworCisJCWNyZWF0ZU9uZUFyY2hpdmVFbnRy eSgiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iLCAiQ09N TUVOVCIpOworCisJCS8qIGNyZWF0ZSBlbnRyeSBmb3IgcmVzdHJpY3QgKi8KKwkJeworCQkJUFFF eHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCS8qIFJlc3RvcmUgd2lsbCBu ZWVkIHRvIHdyaXRlIHRvIHRoZSB0YXJnZXQgY2x1c3RlciAqLwotCWZwcmludGYoT1BGLCAiU0VU IGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsKKwkJCWFwcGVuZFBR RXhwQnVmZmVyKHFyeSwgIlxccmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJSRVNUUklDVCIpOworCQkJZGVzdHJveVBR RXhwQnVmZmVyKHFyeSk7CisJCX0KKworCQkvKiBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25s eSA9IG9mZiAqLworCQl7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5 ID0gb2ZmIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICJTRVQgZGVmYXVsdF90cmFuc2Fj dGlvbl9yZWFkX29ubHkgPSBvZmY7XG4iKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnkt PmRhdGEsICJERUZBVUxUX1RSQU5TQUNUSU9OX1JFQURfT05MWSIpOworCQkJZGVzdHJveVBRRXhw QnVmZmVyKHFyeSk7CisJCX0KKworCQkvKiBkdW1wRW5jb2Rpbmc6IHB1dCB0aGUgY29ycmVjdCBl bmNvZGluZyBpbnRvIHRoZSBhcmNoaXZlICovCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNy ZWF0ZVBRRXhwQnVmZmVyKCk7CisJCQljb25zdCBjaGFyICplbmNuYW1lID0gcGdfZW5jb2Rpbmdf dG9fY2hhcihlbmNvZGluZyk7CiAKLQkvKiBSZXBsaWNhdGUgZW5jb2RpbmcgYW5kIHN0ZF9zdHJp bmdzIGluIG91dHB1dCAqLwotCWZwcmludGYoT1BGLCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICcl cyc7XG4iLAotCQkJcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZykpOwotCWZwcmludGYoT1BG LCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICVzO1xuIiwgc3RkX3N0cmluZ3Mp OwotCWlmIChzdHJjbXAoc3RkX3N0cmluZ3MsICJvZmYiKSA9PSAwKQotCQlmcHJpbnRmKE9QRiwg IlNFVCBlc2NhcGVfc3RyaW5nX3dhcm5pbmcgPSBvZmY7XG4iKTsKLQlmcHJpbnRmKE9QRiwgIlxu Iik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxcnksICJTRVQgY2xpZW50X2VuY29kaW5nID0g Iik7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFsQUgocXJ5LCBlbmNuYW1lLCBmb3V0KTsKKwkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIjtcbiIpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5n IGVuY29kaW5nID0gJXMiLCBlbmNuYW1lKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnkt PmRhdGEsICJFTkNPRElORyIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwor CQkvKiBkdW1wU3RkU3RyaW5nczogcHV0IHRoZSBjb3JyZWN0IGVzY2FwZSBzdHJpbmcgYmVoYXZp b3IgaW50byB0aGUgYXJjaGl2ZSAqLworCQl7CisJCQljb25zdCBjaGFyICpzdGRzdHJpbmdzID0g c3RkX3N0cmluZ3MgPyAib24iIDogIm9mZiI7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQ UUV4cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIFwic3RhbmRhcmRfY29uZm9y bWluZ19zdHJpbmdzID0gJXNcIiIsIHN0ZHN0cmluZ3MpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIo cXJ5LCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICclcyc7XG4iLAorCQkJCQlz dGRzdHJpbmdzKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJTVERTVFJJ TkdTIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCX0KKwllbHNlCisJewor CQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxu LS1cblxuIik7CisKKwkJLyoKKwkJICogRW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRvIGJsb2NrIGFu eSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1jb21tYW5kcy4gIEEKKwkJICogbWFsaWNpb3VzIHNvdXJj ZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJCSAq IHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3VjaCBzb3Vy Y2VzIGZyb20KKwkJICogYWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUs IHdlIGNhbiBibG9jayBwc3FsCisJCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50 IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUgZHVtcAorCQkgKiBvdXRwdXQgcmVtYWlu cyB1bmFmZmVjdGVkLgorCQkgKi8KKwkJZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIs IHJlc3RyaWN0X2tleSk7CisKKwkJLyoKKwkJICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBv c3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCisJCSAqIG90aGVyIHRoYW4g dG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcworCQkg KiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWws IHNvIHdoaWNoZXZlcgorCQkgKiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1v bWVudCBpcyBmaW5lLgorCQkgKi8KKworCQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0 byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFu c2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCisJCS8qIFJlcGxpY2F0ZSBlbmNvZGlu ZyBhbmQgc3RkX3N0cmluZ3MgaW4gb3V0cHV0ICovCisJCWZwcmludGYoT1BGLCAiU0VUIGNsaWVu dF9lbmNvZGluZyA9ICclcyc7XG4iLAorCQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2Rpbmcp KTsKKwkJZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXM7 XG4iLCBzdGRfc3RyaW5ncyk7CisJCWlmIChzdHJjbXAoc3RkX3N0cmluZ3MsICJvZmYiKSA9PSAw KQorCQkJZnByaW50ZihPUEYsICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xuIik7 CisJCWZwcmludGYoT1BGLCAiXG4iKTsKKwl9CiAKIAlpZiAoIWRhdGFfb25seSAmJiAhc3RhdGlz dGljc19vbmx5ICYmICFub19zY2hlbWEpCiAJewpAQCAtNjU5LDI3ICs3OTAsNTEgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJZHVtcFRhYmxlc3BhY2VzKGNvbm4pOwogCX0KIAot CS8qCi0JICogRXhpdCByZXN0cmljdGVkIG1vZGUganVzdCBiZWZvcmUgZHVtcGluZyB0aGUgZGF0 YWJhc2VzLiAgcGdfZHVtcCB3aWxsCi0JICogaGFuZGxlIGVudGVyaW5nIHJlc3RyaWN0ZWQgbW9k ZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KLQkgKi8KLQlmcHJpbnRmKE9QRiwgIlxcdW5yZXN0cmlj dCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwl7CisJCS8qCisJCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBp bmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAgd2lsbAorCQkgKiBoYW5kbGUgZW50ZXJpbmcgcmVz dHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRlLgorCQkgKi8KKwkJZnByaW50ZihPUEYs ICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwl9CisJZWxzZQorCXsKKwkJ LyogY3JlYXRlIGVudHJ5IGZvciB1bnJlc3RyaWN0ICovCisJCVBRRXhwQnVmZmVyIHFyeSA9IGNy ZWF0ZVBRRXhwQnVmZmVyKCk7CiAKLQlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAm JiAhdGFibGVzcGFjZXNfb25seSkKLQkJZHVtcERhdGFiYXNlcyhjb25uKTsKKwkJYXBwZW5kUFFF eHBCdWZmZXIocXJ5LCAiXFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJVTlJFU1RSSUNUIik7CisJCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihxcnkpOworCX0KIAotCVBRZmluaXNoKGNvbm4pOworCWlmICghZ2xvYmFsc19v bmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQorCQlkdW1wRGF0YWJhc2Vz KGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsKIAogCWlmICh2ZXJib3NlKQogCQlkdW1wVGltZXN0YW1w KCJDb21wbGV0ZWQgb24iKTsKLQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFi YXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CiAKLQlpZiAoZmlsZW5hbWUpCisJ aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQ b3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CisKKwlp ZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlSZXN0b3JlT3B0aW9ucyAqcm9w dDsKKworCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNl IGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwkJcm9wdCA9IE5l d1Jlc3RvcmVPcHRpb25zKCk7CisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCByb3B0 KTsKKworCQkvKiBNYXJrIHdoaWNoIGVudHJpZXMgc2hvdWxkIGJlIG91dHB1dCAqLworCQlQcm9j ZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKGZvdXQpOworCQlDbG9zZUFyY2hpdmUoZm91dCk7CisJ fQorCWVsc2UgaWYgKGZpbGVuYW1lKQogCXsKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0 aGUgcmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMp CisJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lk KSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjkwLDEyICs4NDUsMTQg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGljIHZvaWQKIGhlbHAodm9pZCkK IHsKLQlwcmludGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBh cyBhbiBTUUwgc2NyaXB0LlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyBleHBvcnRz IGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3Ro ZXIgZm9ybWF0cy5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJ cHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAKIAlwcmludGYoXygi XG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFN RSAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0tZm9y bWF0PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5 LCB0YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0 IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAg ICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAg ICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwogCXBy aW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5n IFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtNzcwLDYgKzkyNyw3IEBAIHN0YXRp YyB2b2lkCiBkcm9wUm9sZXMoUEdjb25uICpjb25uKQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNy ZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaV9yb2xuYW1lOwogCWludAkJCWk7CkBA IC03OTEsNyArOTQ5LDEyIEBAIGRyb3BSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJaV9yb2xuYW1lID0g UFFmbnVtYmVyKHJlcywgInJvbG5hbWUiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0J CWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCBy b2xlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0t IERyb3Agcm9sZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8 IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtNzk5LDE1ICs5NjIsMjEgQEAgZHJvcFJvbGVz KFBHY29ubiAqY29ubikKIAogCQlyb2xlbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5h bWUpOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQlhcHBlbmRQUUV4 cEJ1ZmZlcihkZWxRcnksICJEUk9QIFJPTEUgJXMlcztcbiIsCiAJCQkJaWZfZXhpc3RzID8gIklG IEVYSVNUUyAiIDogIiIsCiAJCQkJZm10SWQocm9sZW5hbWUpKTsKKworCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsK KwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgImRyb3BSb2xl cyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAot CWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC04ODksNyArMTA1OCwxMiBAQCBk dW1wUm9sZXMoUEdjb25uICpjb25uKQogCWlfaXNfY3VycmVudF91c2VyID0gUFFmbnVtYmVyKHJl cywgImlzX2N1cnJlbnRfdXNlciIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnBy aW50ZihPUEYsICItLVxuLS0gUm9sZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZXNcbi0tXG5cbiIp OworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlc1xuLS1cblxu IiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkr KykKIAl7CkBAIC05OTMsNyArMTE2NywxMCBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCQkJ CQkJCSAiUk9MRSIsIHJvbGVuYW1lLAogCQkJCQkJCSBidWYpOwogCi0JCWZwcmludGYoT1BGLCAi JXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlm cHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2 ZUVudHJ5KGJ1Zi0+ZGF0YSwgImR1bXBSb2xlcyIpOwogCX0KIAogCS8qCkBAIC0xMDAxLDE1ICsx MTc4LDEzIEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJICogV2UgZG8gaXQgdGhpcyB3YXkg YmVjYXVzZSBjb25maWcgc2V0dGluZ3MgZm9yIHJvbGVzIGNvdWxkIG1lbnRpb24gdGhlCiAJICog bmFtZXMgb2Ygb3RoZXIgcm9sZXMuCiAJICovCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJ ZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZ3VyYXRpb25zXG4tLVxuIik7Ci0KIAlm b3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAkJZHVtcFVzZXJDb25maWcoY29u biwgUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9sbmFtZSkpOwogCiAJUFFjbGVhcihyZXMpOwogCi0J ZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogfQpA QCAtMTA4OCw3ICsxMjYzLDEyIEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJ aV9zZXRfb3B0aW9uID0gUFFmbnVtYmVyKHJlcywgInNldF9vcHRpb24iKTsKIAogCWlmIChQUW50 dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNc bi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnBy aW50ZihPUEYsICItLVxuLS0gUm9sZSBtZW1iZXJzaGlwc1xuLS1cblxuIik7CisJCWVsc2UKKwkJ CWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIs ICJDT01NRU5UIik7CisJfQogCiAJLyoKIAkgKiBXZSBjYW4ndCBkdW1wIHRoZXNlIEdSQU5UIGNv bW1hbmRzIGluIGFyYml0cmFyeSBvcmRlciwgYmVjYXVzZSBhIHJvbGUKQEAgLTExNjcsNiArMTM0 Nyw3IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJY2hhcgkgICAqZ3Jh bnRvcjsKIAkJCQljaGFyCSAgICpzZXRfb3B0aW9uID0gInRydWUiOwogCQkJCWJvb2wJCWZvdW5k OworCQkJCVBRRXhwQnVmZmVyIGNyZWFRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJCQkJ LyogSWYgd2UgYWxyZWFkeSBkaWQgdGhpcyBncmFudCwgZG9uJ3QgZG8gaXQgYWdhaW4uICovCiAJ CQkJaWYgKGRvbmVbaSAtIHN0YXJ0XSkKQEAgLTEyMjMsOCArMTQwNCw4IEBAIGR1bXBSb2xlTWVt YmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAKIAkJCQkvKiBHZW5lcmF0ZSB0aGUgYWN0dWFsIEdSQU5U IHN0YXRlbWVudC4gKi8KIAkJCQlyZXNldFBRRXhwQnVmZmVyKG9wdGJ1Zik7Ci0JCQkJZnByaW50 ZihPUEYsICJHUkFOVCAlcyIsIGZtdElkKHJvbGUpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIiBUTyAl cyIsIGZtdElkKG1lbWJlcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICJHUkFO VCAlcyIsIGZtdElkKHJvbGUpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiIFRP ICVzIiwgZm10SWQobWVtYmVyKSk7CiAJCQkJaWYgKCphZG1pbl9vcHRpb24gPT0gJ3QnKQogCQkJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJBRE1JTiBPUFRJT04iKTsKIAkJCQlpZiAo ZHVtcF9ncmFudF9vcHRpb25zKQpAQCAtMTI0NSwxMCArMTQyNiwxNSBAQCBkdW1wUm9sZU1lbWJl cnNoaXAoUEdjb25uICpjb25uKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJT RVQgRkFMU0UiKTsKIAkJCQl9CiAJCQkJaWYgKG9wdGJ1Zi0+ZGF0YVswXSAhPSAnXDAnKQotCQkJ CQlmcHJpbnRmKE9QRiwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKKwkJCQkJYXBwZW5kUFFF eHBCdWZmZXIoY3JlYVFyeSwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKIAkJCQlpZiAoZHVt cF9ncmFudG9ycykKLQkJCQkJZnByaW50ZihPUEYsICIgR1JBTlRFRCBCWSAlcyIsIGZtdElkKGdy YW50b3IpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIjtcbiIpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZl cihjcmVhUXJ5LCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7CisJCQkJYXBwZW5k UFFFeHBCdWZmZXIoY3JlYVFyeSwgIjtcbiIpOworCisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgY3JlYVFyeS0+ZGF0YSk7CisJCQkJ ZWxzZQorCQkJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoY3JlYVFyeS0+ZGF0YSwgImR1bXBSb2xl TWVtYmVyc2hpcCIpOwogCQkJfQogCQl9CiAKQEAgLTEyNjAsNyArMTQ0Niw4IEBAIGR1bXBSb2xl TWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1 ZmZlcihidWYpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMjg4LDcg KzE0NzUsMTIgQEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJPUkRF UiBCWSAxIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBSb2xlIHByaXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4i KTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BG LCAiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0t XG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlIHBy aXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iLCAiQ09NTUVOVCIp OworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTEz MTIsMTQgKzE1MDQsMTkgQEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQlleGl0 X25pY2VseSgxKTsKIAkJfQogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVm LT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGJ1Zi0+ZGF0YSwgImR1 bXBSb2xlR1VDUHJpdnMiKTsKIAogCQlmcmVlKGZwYXJuYW1lKTsKIAkJZGVzdHJveVBRRXhwQnVm ZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmludGYoT1BGLCAiXG5cbiIpOwor CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4i KTsKIH0KIAogCkBAIC0xMzMxLDYgKzE1MjgsNyBAQCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpj b25uKQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpOworCVBRRXhwQnVmZmVyIGRlbFFy eSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkvKgogCSAqIEdldCBhbGwgdGFibGVzcGFjZXMg ZXhjZXB0IGJ1aWx0LWluIG9uZXMgKHdoaWNoIHdlIGFzc3VtZSBhcmUgbmFtZWQKQEAgLTEzNDIs MjAgKzE1NDAsMzEgQEAgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIk9S REVSIEJZIDEiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAi LS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCB0YWJsZXNwYWNl c1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERy b3AgdGFibGVzcGFjZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsg aSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpzcGNuYW1lID0gUFFnZXR2 YWx1ZShyZXMsIGksIDApOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBUQUJMRVNQQUNFICVzJXM7 XG4iLAorCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztc biIsCiAJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJZm10SWQoc3BjbmFt ZSkpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BG LCAiJXMiLCBkZWxRcnktPmRhdGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnko ZGVsUXJ5LT5kYXRhLCAiZHJvcFRhYmxlc3BhY2VzIik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwog Ci0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogLyoKQEAgLTEzODIsNyArMTU5MSwxMiBA QCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkgICAiT1JERVIgQlkgMSIpOwog CiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gVGFibGVz cGFjZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJZnByaW50ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOworCQllbHNlCisJ CQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBUYWJsZXNwYWNlc1xuLS1cblxuIiwgIkNP TU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7 CkBAIC0xNDUxLDE0ICsxNjY1LDE5IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJ CQkJCQkJICJUQUJMRVNQQUNFIiwgc3BjbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRm KE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9u ZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wVGFibGVzcGFjZXMiKTsKIAogCQlmcmVlKGZz cGNuYW1lKTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMp OwotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNDgyLDcgKzE3MDEsMTIg QEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJPUkRFUiBCWSBkYXRuYW1lIik7CiAK IAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIGRh dGFiYXNlcyAoZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iKTsKKwl7CisJ CWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0t IERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIp OworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEcm9wIGRhdGFiYXNl cyAoZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iLCAiQ09NTUVOVCIpOwor CX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTE0OTcs MTUgKzE3MjEsMjMgQEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJCQlzdHJjbXAoZGJuYW1lLCAi dGVtcGxhdGUwIikgIT0gMCAmJgogCQkJc3RyY21wKGRibmFtZSwgInBvc3RncmVzIikgIT0gMCkK IAkJewotCQkJZnByaW50ZihPUEYsICJEUk9QIERBVEFCQVNFICVzJXM7XG4iLAorCQkJUFFFeHBC dWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZm ZXIoZGVsUXJ5LCAiRFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKIAkJCQkJaWZfZXhpc3RzID8gIklG IEVYSVNUUyAiIDogIiIsCiAJCQkJCWZtdElkKGRibmFtZSkpOworCisJCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCisJCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7 CisJCQllbHNlCisJCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgIkRST1Bf REFUQUJBU0UiKTsKIAkJfQogCX0KIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAi XG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYs ICJcblxuIik7CiB9CiAKIApAQCAtMTUzMiw3ICsxNzY0LDE4IEBAIGR1bXBVc2VyQ29uZmlnKFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCWNoYXIJICAgKnNhbml0aXplZDsK IAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKHVzZXJuYW1lLCB0cnVlKTsKLQkJZnByaW50 ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7 CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICJc bi0tXG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVsc2UK KwkJeworCQkJUFFFeHBCdWZmZXIJcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBw ZW5kUFFFeHBCdWZmZXIocXJ5LCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4i LCBzYW5pdGl6ZWQpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1F TlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKIAkJZnJlZShzYW5pdGl6 ZWQpOwogCX0KIApAQCAtMTU0Miw3ICsxNzg1LDExIEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQoY29u biwgUFFnZXR2YWx1ZShyZXMsIGksIDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUsIE5V TEwsIE5VTEwsCiAJCQkJCQkJICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0 YSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYs ICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYt PmRhdGEsICJkdW1wVXNlckNvbmZpZyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE2MDgs MTAgKzE4NTUsMTMgQEAgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sCiAgKiBE dW1wIGNvbnRlbnRzIG9mIGRhdGFiYXNlcy4KICAqLwogc3RhdGljIHZvaWQKLWR1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uKQorZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3Jt YXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJY2hh cgkJZGJfc3ViZGlyW01BWFBHUEFUSF07CisJY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOwor CUZJTEUJICAgKm1hcF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFy a2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAg LTE2MjUsMTkgKzE4NzUsNDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9l c24ndCBoYXZlIHNvbWUgZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBl eGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNF TEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJ ICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAg Ik9SREVSIEJZIChkYXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOwogCiAJaWYgKFBR bnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxu XG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYo T1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFy Y2hpdmVFbnRyeSgiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CisK KwkvKgorCSAqIElmIGRpcmVjdG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGNy ZWF0ZSBhIHN1YmRpcmVjdG9yeQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFj aCBkYXRhYmFzZSBkdW1wIGZpbGUgb3Igc3ViZGlyZWN0b3J5CisJICogd2lsbCBiZSBjcmVhdGVk IGluIHRoYXQgc3ViZGlyZWN0b3J5IGJ5IHBnX2R1bXAuCisJICovCisgICBpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwpCisgICB7CisJICAgY2hhciAgICAgICAgbWFwX2ZpbGVfcGF0aFtN QVhQR1BBVEhdOworCisJICAgc25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BBVEgsICIlcy9kYXRh YmFzZXMiLCBmaWxlbmFtZSk7CisKKwkgICAvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAn ZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCSAgIGlmIChta2Rpcihk Yl9zdWJkaXIsIHBnX2Rpcl9jcmVhdGVfbW9kZSkgIT0gMCkKKwkJICAgcGdfZmF0YWwoImNvdWxk IG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYl9zdWJkaXIpOworCisJICAgc25w cmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsK KworCSAgIC8qIENyZWF0ZSBhIG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAq LworCSAgIG1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1cpOworCSAg IGlmICghbWFwX2ZpbGUpCisJCSAgIHBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNc IjogJW0iLCBtYXBfZmlsZV9wYXRoKTsKKyAgIH0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBs ZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGks IDApOwogCQljaGFyCSAgICpzYW5pdGl6ZWQ7Ci0JCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwor CQljaGFyICAgICAgICpvaWQgPSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CisJCWNvbnN0IGNoYXIg KmNyZWF0ZV9vcHRzID0gIiI7CiAJCWludAkJCXJldDsKIAogCQkvKiBTa2lwIHRlbXBsYXRlMCwg ZXZlbiBpZiBpdCdzIG5vdCBtYXJrZWQgIWRhdGFsbG93Y29ubi4gKi8KQEAgLTE2NTQsNyArMTkz MywxOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJcGdfbG9nX2luZm8oImR1bXBp bmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9s aW5lKGRibmFtZSwgdHJ1ZSk7Ci0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNc IiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4t LVxuXG4iLCBzYW5pdGl6ZWQpOworCQllbHNlCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNy ZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIi0tXG4tLSBE YXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwkJCWNyZWF0ZU9uZUFy Y2hpdmVFbnRyeShxcnktPmRhdGEsICJDT01NRU5UIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIo cXJ5KTsKKwkJfQorCiAJCWZyZWUoc2FuaXRpemVkKTsKIAogCQkvKgpAQCAtMTY2OSwyNCArMTk1 OSw0NiBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJewogCQkJaWYgKG91dHB1dF9j bGVhbikKIAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKKwkJCS8qIFNpbmNl IHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJCWVs c2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCWZwcmludGYoT1BGLCAiXFxj b25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CiAJCQllbHNlCiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMg PSAiIjsKLQkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5k LCB3ZSBtdXN0ICovCi0JCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1l KTsKKwkJCQlQUUV4cEJ1ZmZlcglxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQkJYXBw ZW5kUFFFeHBCdWZmZXIocXJ5LCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJY3Jl YXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTk5FQ1QiKTsKKwkJCQlkZXN0cm95UFFF eHBCdWZmZXIocXJ5KTsKIAkJCX0KIAkJfQogCQllbHNlCiAJCQljcmVhdGVfb3B0cyA9ICItLWNy ZWF0ZSI7CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3Jt YXQgPT0gYXJjaE51bGwpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJu YW1lLCBjcmVhdGVfb3B0cyk7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9y bWF0IGR1bXAsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5k YXQgZmlsZS4KKwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJewor CQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQkJc25wcmludGYoZGJmaWxl cGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIi5kbXAiLCBkYl9zdWJkaXIsIG9pZCk7CisJ CQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJCXNucHJpbnRmKGRiZmls ZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIudGFyIiwgZGJfc3ViZGlyLCBvaWQpOwor CQkJZWxzZQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVz XCIiLCBkYl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJv aWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAl c1xuIiwgb2lkLCBkYm5hbWUpOworCQl9CisKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3Jl YXRlX29wdHMsIGRiZmlsZXBhdGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQog CQkJcGdfZmF0YWwoInBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIs IGRibmFtZSk7CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCiAJCXsKIAkJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5B UllfQSk7CiAJCQlpZiAoIU9QRikKQEAgLTE2OTUsNiArMjAwNywxMCBAQCBkdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubikKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxlICovCisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUpOworCiAJUFFjbGVh cihyZXMpOwogfQogCkBAIC0xNzA0LDcgKzIwMjAsOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubikKICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQgb3B0aW9ucy4K ICAqLwogc3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hh ciAqY3JlYXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFy ICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlLAorCQkgIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBG b3JtYXQpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRh IGNtZDsKQEAgLTE3MTMsMTcgKzIwMzAsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFt ZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVm KTsKIAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAi XCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3Jl YXRlX29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5k b2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMg aXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZpbGUgbmFtZSBhbmQgZHVt cAorCSAqIGZvcm1hdCB0byB0aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdldCBhcmNoaXZlIGR1bXAu CiAJICovCi0JaWYgKGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1G YSAiKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlwcmludGZQUUV4 cEJ1ZmZlcigmY21kLCAiXCIlc1wiIC1mICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIGRi ZmlsZSwgY3JlYXRlX29wdHMpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoRGlyZWN0 b3J5KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9ZGlyZWN0b3J5 ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9Y3VzdG9tICIpOworCQllbHNlIGlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwg IiAgLS1mb3JtYXQ9dGFyICIpOworCX0KIAllbHNlCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZj bWQsICIgLUZwICIpOworCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAl cyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7 CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRl ZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAorCQkgKiBmb3JtYXQuCisJCSAqLworCQlpZiAoZmlsZW5h bWUpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBl bmQgdGhlIGRhdGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBvZiBj b25uZWN0aW9uCkBAIC0xODA3LDcgKzIxNDMsMTggQEAgZHVtcFRpbWVzdGFtcChjb25zdCBjaGFy ICptc2cpCiAJdGltZV90CQlub3cgPSB0aW1lKE5VTEwpOwogCiAJaWYgKHN0cmZ0aW1lKGJ1Ziwg c2l6ZW9mKGJ1ZiksIFBHRFVNUF9TVFJGVElNRV9GTVQsIGxvY2FsdGltZSgmbm93KSkgIT0gMCkK LQkJZnByaW50ZihPUEYsICItLSAlcyAlc1xuXG4iLCBtc2csIGJ1Zik7CisJeworCQlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tICVzICVzXG5cbiIs IG1zZywgYnVmKTsKKwkJZWxzZQorCQl7CisJCQlQUUV4cEJ1ZmZlcglxcnkgPSBjcmVhdGVQUUV4 cEJ1ZmZlcigpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICItLSAlcyAlc1xuXG4iLCBt c2csIGJ1Zik7CisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAiQ09NTUVOVCIp OworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwl9CiB9CiAKIC8qCkBAIC0xODY4 LDMgKzIyMTUsNTQgQEAgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUs IFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0K KworLyoKKyAqIHBhcnNlRHVtcEZvcm1hdAorICoKKyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1w IGZvcm1hdHMuCisgKi8KK3N0YXRpYyBBcmNoaXZlRm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29u c3QgY2hhciAqZm9ybWF0KQoreworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQ7CisKKwlp ZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBh cmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0g MCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2Vj bXAoZm9ybWF0LCAiZCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImRpcmVjdG9yeSIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZv cm1hdCwgInAiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicGxhaW4iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9 IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJ CWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgInRhciIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBn X2ZhdGFsKCJ1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5 IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwiIiwKKwkJCQkgZm9ybWF0KTsKKworCXJldHVy biBhcmNoRHVtcEZvcm1hdDsKK30KKworc3RhdGljIGludAorY3JlYXRlRHVtcElkKHZvaWQpCit7 CisJcmV0dXJuICsrZHVtcElkVmFsOworfQorCitzdGF0aWMgdm9pZAorY3JlYXRlT25lQXJjaGl2 ZUVudHJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBjaGFyICp0YWcpCit7CisJQXJjaGl2ZUVu dHJ5KGZvdXQsCisJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8KKwkJCWNyZWF0ZUR1 bXBJZCgpLCAvKiBkdW1wIElEICovCisJCQlBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKKwkJCQku ZGVzY3JpcHRpb24gPSB0YWcsCisJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJ CS5jcmVhdGVTdG10ID0gcXVlcnkpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IGM5Nzc2MzA2 YzVjLi4wMjE3NmE3N2JkNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoK ICAqIHBnX3Jlc3RvcmUuYwogICoJcGdfcmVzdG9yZSBpcyBhbiB1dGlsaXR5IGV4dHJhY3Rpbmcg cG9zdGdyZXMgZGF0YWJhc2UgZGVmaW5pdGlvbnMKLSAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBj cmVhdGVkIGJ5IHBnX2R1bXAgdXNpbmcgdGhlIGFyY2hpdmVyCisgKglmcm9tIGEgYmFja3VwIGFy Y2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wL3BnX2R1bXBhbGwgdXNpbmcgdGhlIGFyY2hpdmVyCiAg KglpbnRlcmZhY2UuCiAgKgogICoJcGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhlIGJhY2t1cCBhcmNo aXZlIGFuZApAQCAtNDEsMzEgKzQxLDYwIEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAog I2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBIQVZFX1RF Uk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29tbW9u L3N0cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5o IgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxz L3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9s b25nLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMu aCIKIAorCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSk7CiBzdGF0aWMg dm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9w dGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wgZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNvbnN0 IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludAlyZXN0b3JlX29u ZV9kYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0 cywKKwkJCQkJCQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLAor CQkJCQkJCQkgYm9vbCBnbG9iYWxzX29ubHkpOworc3RhdGljIGludCByZXN0b3JlX2dsb2JhbF9v YmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAor CQlpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSwgYm9vbCBnbG9iYWxz X29ubHkpOworc3RhdGljIGludAlyZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5w dXRGaWxlU3BlYywKKwkJCQkJCQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVy bnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7CitzdGF0aWMgaW50CWdl dF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJU2ltcGxl UHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJf ZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9t ZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgICBTaW1wbGVQdHJMaXN0 ICpkYm5hbWVfb2lkX2xpc3QpOworCisvKgorICogU3RvcmVzIGEgZGF0YWJhc2UgT0lEIGFuZCB0 aGUgY29ycmVzcG9uZGluZyBuYW1lLgorICovCit0eXBlZGVmIHN0cnVjdCBEYk9pZE5hbWUKK3sK KwlPaWQJCQlvaWQ7CisJY2hhcgkJc3RyW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG51bGwt dGVybWluYXRlZCBzdHJpbmcgaGVyZSAqLworfSBEYk9pZE5hbWU7CisKIAogaW50CiBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAqb3B0czsKIAlpbnQJCQlj OwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsKLQlBcmNoaXZlICAg ICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVjOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNl OwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9lcnJvcnMgPSAwOworCWJv b2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9w YXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJpZ2dlcnMgPSAw OwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CiAJc3RhdGljIGludAlpZl9l eGlzdHMgPSAwOwpAQCAtODksNiArMTE4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAsIE5VTEwsICdDJ30s CiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxzLW9ubHkiLCAwLCBO VUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsiZXhpdC1vbi1lcnJv ciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBOVUxMLCAnTid9LApA QCAtMTQyLDYgKzE3Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7InN0YXRp c3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3RhdGlzdGljc19vbmx5LCAxfSwKIAkJeyJmaWx0 ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCiAJCXsicmVzdHJpY3Qta2V5IiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAorCQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgN30sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE3 MCw3ICsyMDEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAotCXdo aWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpO Ok9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBh cmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJ CQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTE5NywxMSAr MjI4LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0 YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJ CQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xvYmFsLmRhdCBm aWxlIGZyb20gZGlyZWN0b3J5ICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKKwkJCQlicmVh azsKIAkJCWNhc2UgJ2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRz LT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwotCiAJCQlj YXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJaWYgKCFvcHRpb25f cGFyc2VfaW50KG9wdGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkgIFBHX01BWF9KT0JT LApAQCAtMzE2LDYgKzM1MCw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQll eGl0KDEpOwogCQkJCW9wdHMtPmV4aXRfb25fZXJyb3IgPSB0cnVlOwogCQkJCWJyZWFrOworCQkJ Y2FzZSA3OgkJCQkvKiBkYXRhYmFzZSBwYXR0ZXJucyB0byBza2lwICovCisJCQkJc2ltcGxlX3N0 cmluZ19saXN0X2FwcGVuZCgmZGJfZXhjbHVkZV9wYXR0ZXJucywgb3B0YXJnKTsKKwkJCQlicmVh azsKIAogCQkJY2FzZSA2OgogCQkJCW9wdHMtPnJlc3RyaWN0X2tleSA9IHBnX3N0cmR1cChvcHRh cmcpOwpAQCAtMzQ3LDYgKzM4NCwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlp ZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFtZSAmJiAhb3B0cy0+dG9j U3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBhbmQgLWYvLS1maWxlIG11 c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5V TEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLS1leGNsdWRl LWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHki KTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9y bWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyogU2hvdWxk IGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNlciBpcyBjb25mdXNlZCAqLwog CWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBAIC00NzIsNiArNTE2LDEwNSBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1hdE5hbWUpOwogCX0KIAor CS8qCisJICogSWYgbWFwLmRhdCBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhl CisJICogZGF0YWJhc2VzIGZyb20gbWFwLmRhdCAsIGJ1dCBza2lwIHJlc3RvcmluZyB0aG9zZSBt YXRjaGluZworCSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAoaW5w dXRGaWxlU3BlYyAhPSBOVUxMICYmCisJCQkoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlucHV0 RmlsZVNwZWMsICJtYXAuZGF0IikgfHwKKwkJCSBmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoaW5w dXRGaWxlU3BlYywgInRvYy50YXIiKSB8fAorCQkJIGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShp bnB1dEZpbGVTcGVjLCAidG9jLmRtcCIpKSkKKwl7CisJCWNoYXIgICAgICAgIGdsb2JhbF9wYXRo W01BWFBHUEFUSF07CisKKwkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVT cGVjLCAidG9jLnRhciIpKQorCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVz L3RvYy50YXIiLCBpbnB1dEZpbGVTcGVjKTsKKwkJZWxzZSBpZiAoZmlsZV9leGlzdHNfaW5fZGly ZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZG1wIikpCisJCQlzbnByaW50ZihnbG9iYWxfcGF0 aCwgTUFYUEdQQVRILCAiJXMvdG9jLmRtcCIsIGlucHV0RmlsZVNwZWMpOworCQllbHNlCisJCQlz bnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBpbnB1dEZpbGVTcGVjKTsKKwor CQkvKgorCQkgKiBDYW4gb25seSB1c2UgLS1saXN0IG9yIC0tdXNlLWxpc3Qgb3B0aW9ucyB3aXRo IGEgc2luZ2xlIGRhdGFiYXNlCisJCSAqIGR1bXAuCisJCSAqLworCQlpZiAob3B0cy0+dG9jU3Vt bWFyeSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLWwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4g cmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisJCWVsc2UgaWYg KG9wdHMtPnRvY0ZpbGUpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1MLy0tdXNlLWxpc3QgY2Fubm90 IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwi KTsKKworCQkvKgorCQkgKiBUbyByZXN0b3JlIGZyb20gYSBwZ19kdW1wYWxsIGFyY2hpdmUsIC1D IChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbgorCQkgKiBtdXN0IGJlIHNwZWNpZmllZCB1bmxlc3Mg d2UgYXJlIG9ubHkgcmVzdG9yaW5nIGdsb2JhbHMuCisJCSAqLworCQlpZiAoIWdsb2JhbHNfb25s eSAmJiBvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAt Qy8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNy ZWF0ZWQgYnkgcGdfZHVtcGFsbCIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0t aGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJCXBnX2xvZ19lcnJv cl9oaW50KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVzdG9yZWQgdXNpbmcgdGhlaXIg c3BlY2lmaWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCisJCS8qIElm IGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQlpZiAoZ2xvYmFsc19v bmx5KQorCQl7CisJCQluX2Vycm9ycyA9IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3Bh dGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBnbG9iYWxzX29ubHkpOworCisJCQlwZ19s b2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIHNraXBwZWQgYmVjYXVzZSBvcHRpb24gLWcvLS1n bG9iYWxzLW9ubHkgd2FzIHNwZWNpZmllZCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTm93 IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0ICovCisJCQluX2Vycm9ycyA9 IHJlc3RvcmVfYWxsX2RhdGFiYXNlcyhpbnB1dEZpbGVTcGVjLCBkYl9leGNsdWRlX3BhdHRlcm5z LAorCQkJCQkJCQkJCQkgb3B0cywgbnVtV29ya2Vycyk7CisJCX0KKworCQkvKiBGcmVlIGRiIHBh dHRlcm4gbGlzdC4gKi8KKwkJc2ltcGxlX3N0cmluZ19saXN0X2Rlc3Ryb3koJmRiX2V4Y2x1ZGVf cGF0dGVybnMpOworCX0KKwllbHNlCQkJCQkJLyogcHJvY2VzcyBpZiBtYXAuZGF0IGZpbGUgZG9l cyBub3QgZXhpc3QuICovCisJeworCQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKGlu cHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBnbG9iYWxzX29ubHkpOwor CX0KKworCS8qIERvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcg cmVzdG9yZS4gKi8KKwlpZiAobl9lcnJvcnMpCisJeworCQlwZ19sb2dfd2FybmluZygiZXJyb3Jz IGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisJCXJldHVybiAxOworCX0KKwor CXJldHVybiAwOworfQorCisvKgorICogcmVzdG9yZV9nbG9iYWxfb2JqZWN0cworICoKKyAqIFRo aXMgcmVzdG9yZSBhbGwgZ2xvYmFsIG9iamVjdHMuCisgKgorICogSWYgZ2xvYmFsc19vbmx5IGlz IHNldCwgdGhlbiBza2lwIERST1AgREFUQUJBU0UgY29tbWFuZHMgZnJvbSByZXN0b3JlLgorICov CitzdGF0aWMgaW50IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxl U3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3JrZXJzLCBib29sIGFwcGVu ZF9kYXRhLCBpbnQgbnVtLCBib29sIGdsb2JhbHNfb25seSkKK3sKKwlyZXR1cm4gcmVzdG9yZV9v bmVfZGF0YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgYXBwZW5kX2RhdGEs IG51bSwgZ2xvYmFsc19vbmx5KTsKK30KKworLyoKKyAqIHJlc3RvcmVfb25lX2RhdGFiYXNlCisg KgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRvYy5kYXQgZmlsZS4K KyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3RvcmUu CisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0 RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkgaW50IG51bVdvcmtlcnMsIGJv b2wgYXBwZW5kX2RhdGEsIGludCBudW0sIGJvb2wgZ2xvYmFsc19vbmx5KQoreworCUFyY2hpdmUg ICAgKkFIOworCWludAkJCW5fZXJyb3JzOworCiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVT cGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMp OwpAQCAtNDc5LDkgKzYyMiwxNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkvKgog CSAqIFdlIGRvbid0IGhhdmUgYSBjb25uZWN0aW9uIHlldCBidXQgdGhhdCBkb2Vzbid0IG1hdHRl ci4gVGhlIGNvbm5lY3Rpb24KIAkgKiBpcyBpbml0aWFsaXplZCB0byBOVUxMIGFuZCBpZiB3ZSB0 ZXJtaW5hdGUgdGhyb3VnaCBleGl0X25pY2VseSgpIHdoaWxlCi0JICogaXQncyBzdGlsbCBOVUxM LCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBuby1vcC4KKwkgKiBpdCdzIHN0 aWxsIE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9wLiBJZiB3 ZSBhcmUKKwkgKiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVuIG9ubHkgdXBkYXRl IEFYIGhhbmRsZSBmb3IgY2xlYW51cCBhcworCSAqIHRoZSBwcmV2aW91cyBlbnRyeSB3YXMgYWxy ZWFkeSBpbiB0aGUgYXJyYXkgYW5kIHdlIGhhZCBjbG9zZWQgcHJldmlvdXMKKwkgKiBjb25uZWN0 aW9uLCBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIGFycmF5IHNsb3QuCiAJICovCi0Jb25fZXhpdF9j bG9zZV9hcmNoaXZlKEFIKTsKKwlpZiAoIWFwcGVuZF9kYXRhIHx8IG51bSA9PSAwKQorCQlvbl9l eGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWVsc2UKKwkJcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2Fy Y2hpdmUoQUgpOwogCiAJLyogTGV0IHRoZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0byBiZSAq LwogCUFILT52ZXJib3NlID0gb3B0cy0+dmVyYm9zZTsKQEAgLTUwMSwyNSArNjUwLDIxIEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZlUmVz dG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0b3JlQXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNoaXZl KEFILCBhcHBlbmRfZGF0YSwgZ2xvYmFsc19vbmx5KTsKIAl9CiAKLQkvKiBkb25lLCBwcmludCBh IHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgKi8KLQlpZiAoQUgtPm5fZXJyb3JzKQotCQlwZ19s b2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBBSC0+bl9lcnJvcnMp OworCW5fZXJyb3JzID0gQUgtPm5fZXJyb3JzOwogCiAJLyogQUggbWF5IGJlIGZyZWVkIGluIENs b3NlQXJjaGl2ZT8gKi8KLQlleGl0X2NvZGUgPSBBSC0+bl9lcnJvcnMgPyAxIDogMDsKLQogCUNs b3NlQXJjaGl2ZShBSCk7CiAKLQlyZXR1cm4gZXhpdF9jb2RlOworCXJldHVybiBuX2Vycm9yczsK IH0KIAogc3RhdGljIHZvaWQKIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogewotCXByaW50 ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlIGNy ZWF0ZWQgYnkgcGdfZHVtcC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgcmVzdG9y ZXMgUG9zdGdyZVNRTCBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcyBjcmVhdGVkIGJ5IHBnX2R1bXAg b3IgcGdfZHVtcGFsbC5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7 CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4gW0ZJTEVdXG4iKSwgcHJvZ25hbWUpOwogCkBA IC01MzcsNiArNjgyLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8o IiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkgZGF0YWJhc2Ugb2Jq ZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1DLCAtLWNyZWF0ZSAg ICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2VcbiIpKTsKIAlwcmludGYo XygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQgb24gZXJyb3IsIGRlZmF1bHQg aXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAtZywgLS1nbG9iYWxzLW9ubHkgICAg ICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzXG4iKSk7CiAJ cHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIGlu ZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0tam9icz1OVU0gICAgICAgICAgICAgICB1c2Ug dGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC1M LCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAgdXNlIHRhYmxlIG9mIGNvbnRlbnRzIGZyb20gdGhp cyBmaWxlIGZvclxuIgpAQCAtNTUzLDYgKzY5OSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2du YW1lKQogCXByaW50ZihfKCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBh cyBhIHNpbmdsZSB0cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmln Z2VycyAgICAgICAgICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVc biIpKTsKIAlwcmludGYoXygiICAtLWVuYWJsZS1yb3ctc2VjdXJpdHkgICAgICAgIGVuYWJsZSBy b3cgc2VjdXJpdHlcbiIpKTsKKwlwcmludGYoXygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVS TiAgIGRvIG5vdCByZXN0b3JlIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UocylcbiIpKTsKIAlwcmlu dGYoXygiICAtLWZpbHRlcj1GSUxFTkFNRSAgICAgICAgICAgIHJlc3RvcmUgb3Igc2tpcCBvYmpl Y3RzIGJhc2VkIG9uIGV4cHJlc3Npb25zXG4iCiAJCQkgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbiBGSUxFTkFNRVxuIikpOwogCXByaW50ZihfKCIgIC0taWYtZXhpc3RzICAgICAg ICAgICAgICAgICAgdXNlIElGIEVYSVNUUyB3aGVuIGRyb3BwaW5nIG9iamVjdHNcbiIpKTsKQEAg LTU4OCw4ICs3MzUsOCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygi ICAtLXJvbGU9Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJPTEUgYmVmb3JlIHJlc3RvcmVcbiIp KTsKIAogCXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10 LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNwZWNpZmllZFxuIgotCQkJ ICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAi VGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQgLS1leGNs dWRlLWRhdGFiYXNlIGNhbiBiZVxuIgorCQkJICJjb21iaW5lZCBhbmQgc3BlY2lmaWVkIG11bHRp cGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwogCXByaW50ZihfKCJc bklmIG5vIGlucHV0IGZpbGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBzdGFuZGFyZCBpbnB1dCBp cyB1c2VkLlxuXG4iKSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFD S0FHRV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNL QUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTY5NCwzICs4NDEsNDE1IEBAIHJlYWRfcmVzdG9y ZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAog CWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogZmlsZV9leGlzdHNfaW5fZGlyZWN0 b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUgZ2l2ZW4g ZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNv bnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7 CisJY2hhcgkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgs ICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVj dG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1Ziwg JnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCisvKgorICogZ2V0X2RibmFt ZXNfbGlzdF90b19yZXN0b3JlCisgKgorICogVGhpcyB3aWxsIG1hcmsgZm9yIHNraXBwaW5nIGFu eSBlbnRyaWVzIGZyb20gZGJuYW1lX29pZF9saXN0IHRoYXQgcGF0dGVybiBtYXRjaCBhbgorICog ZW50cnkgaW4gdGhlIGRiX2V4Y2x1ZGVfcGF0dGVybnMgbGlzdC4KKyAqCisgKiBSZXR1cm5zIHRo ZSBudW1iZXIgb2YgZGF0YWJhc2UgdG8gYmUgcmVzdG9yZWQuCisgKgorICovCitzdGF0aWMgaW50 CitnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJCVNpbXBs ZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4 Y2x1ZGVfcGF0dGVybnMpCit7CisJaW50CQkJY291bnRfZGIgPSAwOworCVBRRXhwQnVmZmVyIHF1 ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsK KworCWlmICghY29ubiAmJiBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwkJcGdf bG9nX2luZm8oImNvbnNpZGVyaW5nIFBBVFRFUk4gYXMgTkFNRSBmb3IgLS1leGNsdWRlLWRhdGFi YXNlIG9wdGlvbiBhcyBubyBkYXRhYmFzZSBjb25uZWN0aW9uIHdoaWxlIGRvaW5nIHBnX3Jlc3Rv cmUiKTsKKworCS8qCisJICogUHJvY2VzcyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFuZCBpZiBz cGVjaWZpZWQgdG8gc2tpcCByZXN0b3JpbmcsIHRoZW4KKwkgKiByZW1vdmUgZGJuYW1lIGZyb20g bGlzdC4KKwkgKi8KKwlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29p ZF9saXN0LT5oZWFkOworCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJewor CQlEYk9pZE5hbWUgICpkYmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOworCQli b29sCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwkJUFFFeHBCdWZmZXIgZGJfbGl0ID0gY3Jl YXRlUFFFeHBCdWZmZXIoKTsKKworCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubihkYl9saXQsIGRi aWRuYW1lLT5zdHIsIGNvbm4pOworCisJCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKnBhdF9j ZWxsID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBwYXRfY2VsbDsgcGF0X2NlbGwgPSBwYXRf Y2VsbC0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNo IHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB0cnkgYSBwYXR0ZXJuCisJCQkgKiBtYXRjaAorCQkJICov CisJCQlpZiAocGdfc3RyY2FzZWNtcChkYmlkbmFtZS0+c3RyLCBwYXRfY2VsbC0+dmFsKSA9PSAw KQorCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkvKiBPdGhlcndpc2UsIHRyeSBhIHBh dHRlcm4gbWF0Y2ggaWYgdGhlcmUgaXMgYSBjb25uZWN0aW9uICovCisJCQllbHNlIGlmIChjb25u KQorCQkJeworCQkJCWludAkJCWRvdGNudDsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1 ZXJ5LCAiU0VMRUNUIDEgIik7CisJCQkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKGNvbm4sIHF1ZXJ5 LCBwYXRfY2VsbC0+dmFsLCBmYWxzZSwKKwkJCQkJCQkJCSAgZmFsc2UsIE5VTEwsIGRiX2xpdC0+ ZGF0YSwKKwkJCQkJCQkJCSAgTlVMTCwgTlVMTCwgTlVMTCwgJmRvdGNudCk7CisKKwkJCQlpZiAo ZG90Y250ID4gMCkKKwkJCQl7CisJCQkJCXBnX2xvZ19lcnJvcigiaW1wcm9wZXIgcXVhbGlmaWVk IG5hbWUgKHRvbyBtYW55IGRvdHRlZCBuYW1lcyk6ICVzIiwKKwkJCQkJCQkJIGRiaWRuYW1lLT5z dHIpOworCQkJCQlQUWZpbmlzaChjb25uKTsKKwkJCQkJZXhpdF9uaWNlbHkoMSk7CisJCQkJfQor CisJCQkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsKKworCQkJCWlmICgo UFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19UVVBMRVNfT0spICYmIFBRbnR1cGxlcyhyZXMp KQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCQkJcGdfbG9nX2luZm8o ImRhdGFiYXNlIG5hbWUgXCIlc1wiIG1hdGNoZXMgZXhjbHVkZSBwYXR0ZXJuIFwiJXNcIiIsIGRi aWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwpOworCQkJCX0KKworCQkJCVBRY2xlYXIocmVzKTsK KwkJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCX0KKworCQkJaWYgKHNraXBfZGJfcmVz dG9yZSkKKwkJCQlicmVhazsKKwkJfQorCisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkYl9saXQpOwor CisJCS8qCisJCSAqIE1hcmsgZGIgdG8gYmUgc2tpcHBlZCBvciBpbmNyZW1lbnQgdGhlIGNvdW50 ZXIgb2YgZGJzIHRvIGJlCisJCSAqIHJlc3RvcmVkCisJCSAqLworCQlpZiAoc2tpcF9kYl9yZXN0 b3JlKQorCQl7CisJCQlwZ19sb2dfaW5mbygiZXhjbHVkaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRi aWRuYW1lLT5zdHIpOworCQkJZGJpZG5hbWUtPm9pZCA9IEludmFsaWRPaWQ7CisJCX0KKwkJZWxz ZQorCQl7CisJCQljb3VudF9kYisrOworCQl9CisJfQorCisJZGVzdHJveVBRRXhwQnVmZmVyKHF1 ZXJ5KTsKKworCXJldHVybiBjb3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5hbWVfb2lkX2xp c3RfZnJvbV9tZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFkIGxpbmUgYnkg bGluZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFtZXMgYW5kIGNv cnJlc3BvbmRpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBkYXRh YmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVf b2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlUHRyTGlz dCAqZGJuYW1lX29pZF9saXN0KQoreworCVN0cmluZ0luZm9EYXRhIGxpbmVidWY7CisJRklMRQkg ICAqcGZpbGU7CisJY2hhcgkJbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWludAkJCWNvdW50 ID0gMDsKKworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBvbmx5IGdsb2JhbC5kYXQgZmlsZSBpbiBk dW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMKKwkgKiB0aGVyZSBpcyBubyBkYXRhYmFzZSB0 byByZXN0b3JlLgorCSAqLworCWlmICghZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGR1bXBkaXJw YXRoLCAibWFwLmRhdCIpKQorCXsKKwkJcGdfbG9nX2luZm8oImRhdGFiYXNlIHJlc3RvcmluZyBp cyBza2lwcGVkIGJlY2F1c2UgZmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QgaW4gZGlyZWN0b3J5 IFwiJXNcIiIsICJtYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlz bnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZHVtcGRpcnBh dGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3BlbihtYXBfZmls ZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwo ImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxlX3BhdGgpOworCisJaW5p dFN0cmluZ0luZm8oJmxpbmVidWYpOworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1lL2RiX29p ZCBjb21iaW5hdGlvbnMgdG8gdGhlIGxpc3QuICovCisJd2hpbGUgKHBnX2dldF9saW5lX2J1Zihw ZmlsZSwgJmxpbmVidWYpKQorCXsKKwkJT2lkCQkJZGJfb2lkID0gSW52YWxpZE9pZDsKKwkJY2hh cgkgICAqZGJuYW1lOworCQlEYk9pZE5hbWUgICpkYmlkbmFtZTsKKwkJaW50CQkJbmFtZWxlbjsK KwkJY2hhcgkgICAqcCA9IGxpbmVidWYuZGF0YTsKKworCQkvKiBFeHRyYWN0IGRib2lkLiAqLwor CQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnApKQorCQkJcCsrOworCQlpZiAocCA+ IGxpbmVidWYuZGF0YSAmJiAqcCA9PSAnICcpCisJCXsKKwkJCXNzY2FuZihsaW5lYnVmLmRhdGEs ICIldSIsICZkYl9vaWQpOworCQkJcCsrOworCQl9CisKKwkJLyogZGJuYW1lIGlzIHRoZSByZXN0 IG9mIHRoZSBsaW5lICovCisJCWRibmFtZSA9IHA7CisJCW5hbWVsZW4gPSBzdHJsZW4oZGJuYW1l KTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4aXQgaWYgdGhlIGZpbGUgaGFzIGFueSBjb3Jy dXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlkKGRiX29pZCkgfHwgbmFtZWxlbiA8PSAx KQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gZmlsZSBcIiVzXCIgb24gbGluZSAlZCIs IG1hcF9maWxlX3BhdGgsCisJCQkJCSBjb3VudCArIDEpOworCisJCXBnX2xvZ19pbmZvKCJmb3Vu ZCBkYXRhYmFzZSBcIiVzXCIgKE9JRDogJXUpIGluIGZpbGUgXCIlc1wiIiwKKwkJCQkJZGJuYW1l LCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCWRiaWRuYW1lID0gcGdfbWFsbG9jKG9mZnNl dG9mKERiT2lkTmFtZSwgc3RyKSArIG5hbWVsZW4gKyAxKTsKKwkJZGJpZG5hbWUtPm9pZCA9IGRi X29pZDsKKwkJc3RybGNweShkYmlkbmFtZS0+c3RyLCBkYm5hbWUsIG5hbWVsZW4pOworCisJCXNp bXBsZV9wdHJfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYmlkbmFtZSk7CisJCWNvdW50 Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmlsZSk7CisK KwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlX2FsbF9kYXRhYmFzZXMKKyAqCisg KiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNlbnQgaW4K KyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisgKiBUaGlz IHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZpZWQgd2l0 aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJucywgbnVtYmVyIG9m IGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX2Fs bF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJICBTaW1wbGVTdHJp bmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkg IGludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZVB0ckxpc3QgZGJuYW1lX29pZF9saXN0ID0ge05V TEwsIE5VTEx9OworCWludAkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJCQludW1fdG90YWxf ZGI7CisJaW50CQkJbl9lcnJvcnNfdG90YWw7CisJaW50CQkJY291bnQgPSAwOworCWNoYXIJICAg KmNvbm5lY3RlZF9kYiA9IE5VTEw7CisJYm9vbAkJZHVtcERhdGEgPSBvcHRzLT5kdW1wRGF0YTsK Kwlib29sCQlkdW1wU2NoZW1hID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlib29sCQlkdW1wU3RhdGlz dGljcyA9IG9wdHMtPmR1bXBTY2hlbWE7CisJUEdjb25uICpjb25uID0gTlVMTDsKKwljaGFyCQln bG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCisJLyogQmFzZWQgb24gZmlsZSwgc2V0IHBhdGguICov CisJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLnRhciIp KQorCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLnRhciIsIGlucHV0 RmlsZVNwZWMpOworCWVsc2UgaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVT cGVjLCAidG9jLmRtcCIpKQorCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMv dG9jLmRtcCIsIGlucHV0RmlsZVNwZWMpOworCWVsc2UKKwkJc25wcmludGYoZ2xvYmFsX3BhdGgs IE1BWFBHUEFUSCwgIiVzIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkvKiBTYXZlIGRiIG5hbWUgdG8g cmV1c2UgaXQgZm9yIGFsbCB0aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMtPmNwYXJhbXMuZGJu YW1lKQorCQljb25uZWN0ZWRfZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsKKworCW51bV90b3Rh bF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShpbnB1dEZpbGVTcGVjLCAmZGJu YW1lX29pZF9saXN0KTsKKworCS8qIElmIG1hcC5kYXQgaGFzIG5vIGVudHJpZXMsIHJldHVybiBh ZnRlciBwcm9jZXNzaW5nIGdsb2JhbCBjb21tYW5kcy4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0 LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3Bh dGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBmYWxzZSk7CisKKwlwZ19sb2dfaW5mbyhu Z2V0dGV4dCgiZm91bmQgJWQgZGF0YWJhc2UgbmFtZSBpbiBcIiVzXCIiLAorCQkJCQkJICJmb3Vu ZCAlZCBkYXRhYmFzZSBuYW1lcyBpbiBcIiVzXCIiLAorCQkJCQkJIG51bV90b3RhbF9kYiksCisJ CQkJbnVtX3RvdGFsX2RiLCAibWFwLmRhdCIpOworCisJLyoKKwkgKiBJZiBleGNsdWRlLXBhdHRl cm5zIGlzIGdpdmVuLCB0aGVuIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlIHRvIHByb2Nlc3MKKwkg KiBpdC4KKwkgKi8KKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwpCisJewor CQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJh c2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJ CQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFV TFQsCisJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJ CWlmICghY29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2Ug XCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJaWYgKCFjb25uKQorCQl7 CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwg InBvc3RncmVzIik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInBvc3RncmVzIiwgTlVM TCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRz LT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2duYW1lLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJLyogVHJ5IHdpdGggdGVtcGxhdGUxLiAqLwor CQkJaWYgKCFjb25uKQorCQkJeworCQkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCB0 byBkYXRhYmFzZSBcIiVzXCIiLCAidGVtcGxhdGUxIik7CisKKwkJCQljb25uID0gQ29ubmVjdERh dGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCW9w dHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwK KwkJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQl9CisJ CX0KKwl9CisKKwkvKgorCSAqIGZpbHRlciB0aGUgZGIgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIGV4 Y2x1ZGUgcGF0dGVybnMKKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGdldF9kYm5hbWVzX2xpc3Rf dG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCQkJIGRiX2V4Y2x1 ZGVfcGF0dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRv bmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAoY29ubikKKwkJUFFmaW5pc2go Y29ubik7CisKKwkvKiBPcGVuIHRvYy5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRo ZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCW5fZXJyb3JzX3RvdGFsID0gIHJlc3RvcmVfZ2xv YmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBmYWxz ZSk7CisKKwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChk Ym5hbWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMIHx8IG51bV9kYl9yZXN0b3JlID09IDApCisJewor CQlwZ19sb2dfaW5mbyhuZ2V0dGV4dCgibm8gZGF0YWJhc2UgbmVlZHMgcmVzdG9yaW5nIG91dCBv ZiAlZCBkYXRhYmFzZSIsCisJCQkJCQkJICJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jpbmcgb3V0 IG9mICVkIGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYiksCisJCQkJCW51bV90b3RhbF9kYik7CisJ CXJldHVybiBuX2Vycm9yc190b3RhbDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0byByZXN0 b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51 bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFiYXNlcyB0byBy ZXN0b3JlIGFmdGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRhYmFzZSBzd2l0Y2go ZXMpLiAgTm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkgKi8KKwlmb3IgKFNp bXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7CisJCSBkYl9j ZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1l ID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQ QVRIXTsKKwkJY2hhcgkJc3ViZGlyZGJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCWRiZmlsZW5h bWVbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9lcnJvcnM7CisKKwkJLyogaWdub3JlIGRicyBtYXJr ZWQgZm9yIHNraXBwaW5nICovCisJCWlmIChkYmlkbmFtZS0+b2lkID09IEludmFsaWRPaWQpCisJ CQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRlX2RibmFt ZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkCisJCSAqIGludG8gYW4gYWxyZWFkeSBj cmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJICovCisJ CWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUob3B0cy0+ Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5h bWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlyZGJwYXRoLCBNQVhQR1BBVEgsICIl cy9kYXRhYmFzZXMiLCBpbnB1dEZpbGVTcGVjKTsKKworCQkvKgorCQkgKiBMb29rIGZvciB0aGUg ZGF0YWJhc2UgZHVtcCBmaWxlL2Rpci4gSWYgdGhlcmUgaXMgYW4ge29pZH0udGFyIG9yCisJCSAq IHtvaWR9LmRtcCBmaWxlLCB1c2UgaXQuIE90aGVyd2lzZSB0cnkgdG8gdXNlIGEgZGlyZWN0b3J5 IGNhbGxlZAorCQkgKiB7b2lkfQorCQkgKi8KKwkJc25wcmludGYoZGJmaWxlbmFtZSwgTUFYUEdQ QVRILCAiJXUudGFyIiwgZGJpZG5hbWUtPm9pZCk7CisJCWlmIChmaWxlX2V4aXN0c19pbl9kaXJl Y3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCXNucHJpbnRmKHN1YmRpcnBhdGgs IE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS50YXIiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFt ZS0+b2lkKTsKKwkJZWxzZQorCQl7CisJCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQR1BBVEgs ICIldS5kbXAiLCBkYmlkbmFtZS0+b2lkKTsKKworCQkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVj dG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJCXNucHJpbnRmKHN1YmRpcnBhdGgs IE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS5kbXAiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFt ZS0+b2lkKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIl cy9kYXRhYmFzZXMvJXUiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJfQorCisJ CXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7 CisKKwkJLyogSWYgZGF0YWJhc2UgaXMgYWxyZWFkeSBjcmVhdGVkLCB0aGVuIGRvbid0IHNldCBj cmVhdGVEQiBmbGFnLiAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCVBH Y29ubgkgICAqdGVzdF9jb25uOworCisJCQl0ZXN0X2Nvbm4gPSBDb25uZWN0RGF0YWJhc2UoZGJp ZG5hbWUtPnN0ciwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkJb3B0cy0+ Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJ CQkJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQlpZiAo dGVzdF9jb25uKQorCQkJeworCQkJCVBRZmluaXNoKHRlc3RfY29ubik7CisKKwkJCQkvKiBVc2Ug YWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlIGZvciBjb25uZWN0aW9uLiAqLworCQkJCW9wdHMtPmNy ZWF0ZURCID0gMDsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGRiaWRuYW1lLT5zdHI7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogd2UnbGwgaGF2ZSB0byBjcmVhdGUgaXQgKi8KKwkJ CQlvcHRzLT5jcmVhdGVEQiA9IDE7CisJCQkJb3B0cy0+Y3BhcmFtcy5kYm5hbWUgPSBjb25uZWN0 ZWRfZGI7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBSZXNldCBmbGFncyAtIG1pZ2h0IGhhdmUg YmVlbiByZXNldCBpbiBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBieSB0aGUKKwkJICogcHJldmlvdXMg cmVzdG9yZS4KKwkJICovCisJCW9wdHMtPmR1bXBEYXRhID0gZHVtcERhdGE7CisJCW9wdHMtPmR1 bXBTY2hlbWEgPSBkdW1wU2NoZW1hOworCQlvcHRzLT5kdW1wU3RhdGlzdGljcyA9IGR1bXBTdGF0 aXN0aWNzOworCisJCS8qIFJlc3RvcmUgdGhlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJbl9lcnJv cnMgPSByZXN0b3JlX29uZV9kYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCB0 cnVlLCAxLCBmYWxzZSk7CisKKwkJLyogUHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3Jz IGR1cmluZyBzaW5nbGUgZGF0YWJhc2UgcmVzdG9yZS4gKi8KKwkJaWYgKG5fZXJyb3JzKQorCQl7 CisJCQluX2Vycm9yc190b3RhbCArPSBuX2Vycm9yczsKKwkJCXBnX2xvZ193YXJuaW5nKCJlcnJv cnMgaWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYmlkbmFtZS0+c3Ry LCBuX2Vycm9ycyk7CisJCX0KKworCQljb3VudCsrOworCX0KKworCS8qIExvZyBudW1iZXIgb2Yg cHJvY2Vzc2VkIGRhdGFiYXNlcy4gKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3RvcmVk IGRhdGFiYXNlcyBpcyAlZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJuYW1lIGFu ZCBkYm9pZCBsaXN0LiAqLworCXNpbXBsZV9wdHJfbGlzdF9kZXN0cm95KCZkYm5hbWVfb2lkX2xp c3QpOworCisJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCm9s ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzdkODkzZDVlNmEuLjU2ZTg5ZGEx ZTVlCi0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3Bn X2R1bXAvdC8wMDFfYmFzaWMucGwKQEAgLTIzNyw2ICsyMzcsMTIgQEAgY29tbWFuZF9mYWlsc19s aWtlKAogCSdwZ19yZXN0b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQgLTFcLy0tc2luZ2xl LXRyYW5zYWN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAorY29tbWFuZF9mYWls c19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWds b2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0 aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8t LWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFz ZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5JworKTsKKwog IyBhbHNvIGZhaWxzIGZvciAtciBhbmQgLXQsIGJ1dCBpdCBzZWVtcyBwb2ludGxlc3MgdG8gYWRk IG1vcmUgdGVzdHMgZm9yIHRob3NlLgogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX2R1bXBh bGwnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScgXSwKQEAgLTI0 NCw0ICsyNTAsOCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAt LWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2Jh bHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxsJywgJy0t Zm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNvZ25pemVkIG91 dHB1dCBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFsbDogdW5yZWNvZ25pemVkIG91dHB1dCBm b3JtYXQnKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Qv MDA3X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbApu ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMC4uM2M3ZDJhZDdjNTMKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbApAQCAtMCww ICsxLDM5NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAn YWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczo6dGVtcGRpcjsKK215ICRydW5fZGIgPSAncG9zdGdyZXMnOworbXkgJHNl cCA9ICR3aW5kb3dzX29zID8gIlxcIiA6ICIvIjsKKworIyBUYWJsZXNwYWNlIGxvY2F0aW9ucyB1 c2VkIGJ5ICJyZXN0b3JlX3RhYmxlc3BhY2UiIHRlc3QgY2FzZS4KK215ICR0YWJsZXNwYWNlMSA9 ICIke3RlbXBkaXJ9JHtzZXB9dGJsMSI7CitteSAkdGFibGVzcGFjZTIgPSAiJHt0ZW1wZGlyfSR7 c2VwfXRibDIiOworbWtkaXIoJHRhYmxlc3BhY2UxKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNl MSAkISI7Citta2RpcigkdGFibGVzcGFjZTIpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UyICQh IjsKKworIyBTY2FwZSB0YWJsZXNwYWNlIGxvY2F0aW9ucyBvbiBXaW5kb3dzLgorJHRhYmxlc3Bh Y2UxID0gJHdpbmRvd3Nfb3MgPyAoJHRhYmxlc3BhY2UxID1+IHMvXFwvXFxcXC9ncikgOiAkdGFi bGVzcGFjZTE7CiskdGFibGVzcGFjZTIgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTIgPX4g cy9cXC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNlMjsKKworIyBXaGVyZSBwZ19kdW1wYWxsIHdpbGwg YmUgZXhlY3V0ZWQuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn bm9kZScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmlu aXRpb24gb2YgdGhlIHBnX2R1bXBhbGwgdGVzdCBjYXNlcyB0byBydW4uCisjCisjIEVhY2ggb2Yg dGhlc2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQgYW5kIHRob3NlIG5hbWVzIGFyZSB1c2VkIGZvciBm YWlsCisjIHJlcG9ydGluZyBhbmQgYWxzbyB0byBzYXZlIHRoZSBkdW1wIGFuZCByZXN0b3JlIGlu Zm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisjIHRlc3QgdG8gYXNzZXJ0LgorIworIyBUaGUgInNl dHVwX3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNjcmlwdCB0aGF0IGNvbnRhaW5zIFNRTCBjb21tYW5k cyB0byBleGVjdXRlCisjIGJlZm9yZSBvZiBhY3R1YWxseSBleGVjdXRlIHRoZSB0ZXN0cy4gVGhl IHNldHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJlZm9yZSBvZgorIyBhbnkgdGVzdCBleGVjdXRpb24u CisjCisjIFRoZSAiZHVtcF9jbWQiIGFuZCAicmVzdG9yZV9jbWQiIGFyZSB0aGUgY29tbWFuZHMg dGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUKKyMgInJlc3RvcmVfY21kIiBtdXN0IGhhdmUgdGhl IC0tZmlsZSBmbGFnIHRvIHNhdmUgdGhlIHJlc3RvcmUgb3V0cHV0IHNvIHRoYXQgd2UKKyMgY2Fu IGFzc2VydCBvbiBpdC4KKyMKKyMgVGhlICJsaWtlIiBhbmQgInVubGlrZSIgaXMgYSByZWdleHAg dGhhdCBpcyB1c2VkIHRvIG1hdGNoIHRoZSBwZ19yZXN0b3JlCisjIG91dHB1dC4gSXQgbXVzdCBo YXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVuIGZpbGxlZCBwZXIgdGVzdCBjYXNlcyBidXQgaXQgYWxz bworIyBjYW4gaGF2ZSBib3RoLiBTZWUgImV4Y2x1ZGluZ19kYXRhYmFzZXMiIHRlc3QgY2FzZSBm b3IgZXhhbXBsZS4KK215ICVwZ2R1bXBhbGxfcnVucyA9ICgKKwlyZXN0b3JlX3JvbGVzID0+IHsK KwkJc2V0dXBfc3FsID0+ICcKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbCBXSVRIIEVOQ1JZUFRFRCBQ QVNTV09SRCBcJ2FkbWluXCcgU1VQRVJVU0VSOworCQlDUkVBVEUgUk9MRSBkdW1wYWxsMiBXSVRI IFJFUExJQ0FUSU9OIENPTk5FQ1RJT04gTElNSVQgMTA7JywKKwkJZHVtcF9jbWQgPT4gWworCQkJ J3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWwor CQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJ CSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzLnNxbCIsCisJCQkiJHRlbXBkaXIv cmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisJCQlccypcUUNSRUFURSBST0xF IGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVtcGFsbDIgV0lUSCBOT1NVUEVSVVNF UiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5PTE9HSU4gUkVQTElDQVRJT04gTk9C WVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQorCQkveG0KKwl9LAorCisJcmVzdG9yZV90 YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JFQVRFIFJPTEUgdGFwOworCQlD UkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRhYmxlc3BhY2UxJzsK KwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJsZXNwYWNl MicgV0lUSCAoc2VxX3BhZ2VfY29zdD0xLjApOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19k dW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAi JHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWwor CQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJ CSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2Uuc3FsIiwKKwkJCSIkdGVt cGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQkjIE1hdGNoICJFIiBhcyBvcHRpb25h bCBzaW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVuIHJ1bm5pbmcgb24KKwkJIyBXaW5k b3dzLgorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVS IHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMic7XEUKKwkJCVxuXFFBTFRFUiBU QUJMRVNQQUNFIHRibDIgU0VUIChzZXFfcGFnZV9jb3N0PTEuMCk7XEUKKwkJL3htLAorCX0sCisK KwlyZXN0b3JlX2dyYW50cyA9PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNSRUFURSBEQVRBQkFT RSB0YXBncmFudHNkYjsKKwkJQ1JFQVRFIFNDSEVNQSBwcml2YXRlOworCQlDUkVBVEUgU0VRVUVO Q0Ugc2VyaWFsIFNUQVJUIDEwMTsKKwkJQ1JFQVRFIEZVTkNUSU9OIGZuKCkgUkVUVVJOUyB2b2lk IEFTIFwkXCQKKwkJQkVHSU4KKwkJRU5EOworCQlcJFwkIExBTkdVQUdFIHBscGdzcWw7CisJCUNS RUFURSBST0xFIHN1cGVyOworCQlDUkVBVEUgUk9MRSBncmFudDE7CisJCUNSRUFURSBST0xFIGdy YW50MjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQzOworCQlDUkVBVEUgUk9MRSBncmFudDQ7CisJCUNS RUFURSBST0xFIGdyYW50NTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ2OworCQlDUkVBVEUgUk9MRSBn cmFudDc7CisJCUNSRUFURSBST0xFIGdyYW50ODsKKworCQlDUkVBVEUgVEFCTEUgdCAoaWQgaW50 KTsKKwkJSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUdSQU5U IFNFTEVDVCBPTiBUQUJMRSB0IFRPIGdyYW50MTsKKwkJR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHQg VE8gZ3JhbnQyOworCQlHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0IHRvIGdyYW50MzsK KwkJR1JBTlQgQ09OTkVDVCwgQ1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50 NDsKKwkJR1JBTlQgVVNBR0UsIENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7CisJ CUdSQU5UIFVTQUdFLCBTRUxFQ1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJpYWwgVE8gZ3JhbnQ2 OworCQlHUkFOVCBzdXBlciBUTyBncmFudDc7CisJCUdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04g Zm4oKSBUTyBncmFudDg7CisJCSIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywK KwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIv cmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9y ZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4g IiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV9ncmFu dHMiLAorCQldLAorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFHUkFOVCBzdXBlciBUTyBncmFudDcg V0lUSCBJTkhFUklUIFRSVUUgR1JBTlRFRCBCWVxFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQg QUxMIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdS QU5UIEFMTCBPTiBGVU5DVElPTiBwdWJsaWMuZm4oKSBUTyBncmFudDg7XEUKKwkJCSguKlxuKSoK KwkJCVxuXFFHUkFOVCBBTEwgT04gU0VRVUVOQ0UgcHVibGljLnNlcmlhbCBUTyBncmFudDY7XEUK KwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBTRUxFQ1QgT04gVEFCTEUgcHVibGljLnQgVE8gZ3Jh bnQxO1xFCisJCQlcblxRR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50Mjtc RQorCQkJXG5cUUdSQU5UIEFMTCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDM7XEUKKwkJCSgu KlxuKSoKKwkJCVxuXFFHUkFOVCBDUkVBVEUsQ09OTkVDVCBPTiBEQVRBQkFTRSB0YXBncmFudHNk YiBUTyBncmFudDQ7XEUKKwkJL3htLAorCX0sCisKKwlleGNsdWRpbmdfZGF0YWJhc2VzID0+IHsK KwkJc2V0dXBfc3FsID0+ICdDUkVBVEUgREFUQUJBU0UgZGIxOworCQlcYyBkYjEKKwkJQ1JFQVRF IFRBQkxFIHQxIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEpLCAoMiksICgz KSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDIgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQyIFZB TFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiMjsKKwkJXGMg ZGIyCisJCUNSRUFURSBUQUJMRSB0MyAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDMgVkFMVUVT ICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ0IChpZCBpbnQpOworCQlJTlNF UlQgSU5UTyB0NCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFT RSBkYmV4MzsKKwkJXGMgZGJleDMKKwkJQ1JFQVRFIFRBQkxFIHQ1IChpZCBpbnQpOworCQlJTlNF UlQgSU5UTyB0NSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDYg KGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ2IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisK KwkJQ1JFQVRFIERBVEFCQVNFIGRiZXg0OworCQlcYyBkYmV4NAorCQlDUkVBVEUgVEFCTEUgdDcg KGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ3IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJ CUNSRUFURSBUQUJMRSB0OCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDggVkFMVUVTICgxKSwg KDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGI1OworCQlcYyBkYjUKKwkJQ1JF QVRFIFRBQkxFIHQ5IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0OSBWQUxVRVMgKDEpLCAoMiks ICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDEwIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0 MTAgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJJywKKwkJZHVtcF9jbWQgPT4gWworCQkJ J3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKKwkJCSctLWV4Y2x1ZGUtZGF0YWJh c2UnID0+ICdkYmV4KicsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3Jl JywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAi JHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcy5zcWwiLAorCQkJJy0tZXhjbHVkZS1kYXRhYmFz ZScgPT4gJ2RiNScsCisJCQkiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcyIsCisJCV0sCisJ CWxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjFcRQorCQkJKC4qXG4pKgor CQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDEgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JF QVRFIFRBQkxFIHB1YmxpYy50MiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgREFUQUJB U0UgZGIyXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQzIChcRQor CQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDQgKC94bSwKKwkJdW5saWtl ID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIzXEUKKwkJCSguKlxuKSoKKwkJCVxu XFFDUkVBVEUgVEFCTEUgcHVibGljLnQ1IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBU QUJMRSBwdWJsaWMudDYgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRi NFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NyAoXEUKKwkJCSgu KlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ4IChcRQorCQkJXG5cUUNSRUFURSBE QVRBQkFTRSBkYjVcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDkg KFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MTAgKFxFCisJCS94 bSwKKwl9LAorCisJZm9ybWF0X2RpcmVjdG9yeSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRF IFRBQkxFIGZvcm1hdF9kaXJlY3RvcnkoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5T RVJUIElOVE8gZm9ybWF0X2RpcmVjdG9yeSBWQUxVRVMgKDEsIHRydWUsICduYW1lMScpLCAoMiwg ZmFsc2UsICduYW1lMicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJ CSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9y bWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3Jl JywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAi JHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF9kaXJl Y3RvcnkiLAorCQldLAorCQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0X2RpcmVj dG9yeSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0X3RhciA9PiB7CisJ CXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF90YXIoYSBpbnQsIGIgYm9vbGVhbiwg YyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X3RhciBWQUxVRVMgKDEsIGZhbHNlLCAnbmFt ZTMnKSwgKDIsIHRydWUsICduYW1lNCcpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1w YWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIv Zm9ybWF0X3RhciIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywg Jy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIv Zm9ybWF0X3Rhci5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAorCQldLAorCQlsaWtl ID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0X3RhciAoYSwgYiwgYykgRlJPTSBzdGRpbjsv eG0KKwl9LAorCisJZm9ybWF0X2N1c3RvbSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRB QkxFIGZvcm1hdF9jdXN0b20oYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElO VE8gZm9ybWF0X2N1c3RvbSBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwgKDIsIHRydWUsICdu YW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1h dCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIs CisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSct LWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1 c3RvbS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAorCQlsaWtlID0+ IHFyL14gXG5cUUNPUFkgcHVibGljLmZvcm1hdF9jdXN0b20gKGEsIGIsIGMpIEZST00gc3RkaW47 L3htCisJfSwKKworCWR1bXBfZ2xvYmFsc19vbmx5ID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVB VEUgVEFCTEUgZm9ybWF0X2RpcihhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQg SU5UTyBmb3JtYXRfZGlyIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1ZSwgJ25h bWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0 JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWdsb2JhbHMtb25seScsCisJCQknLS1maWxlJyA9PiAi JHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJ CQkncGdfcmVzdG9yZScsICctQycsICctLWdsb2JhbHMtb25seScsCisJCQknLS1mb3JtYXQnID0+ ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5 LnNxbCIsCisJCQkiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAorCQlsaWtlID0+ IHFyLworICAgICAgICAgICAgXlxzKlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDtcRVxzKlxuCisJCQkv eG0KKwl9LCk7CisKKyMgRmlyc3QgZXhlY3V0ZSB0aGUgc2V0dXBfc3FsCitmb3JlYWNoIG15ICRy dW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7CisJaWYgKCRwZ2R1bXBhbGxfcnVuc3sk cnVufS0+e3NldHVwX3NxbH0pCisJeworCQkkbm9kZS0+c2FmZV9wc3FsKCRydW5fZGIsICRwZ2R1 bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pOworCX0KK30KKworIyBFeGVjdXRlIHRoZSB0 ZXN0cworZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9ydW5zKQoreworCSMg Q3JlYXRlIGEgbmV3IHRhcmdldCBjbHVzdGVyIHRvIHBnX3Jlc3RvcmUgZWFjaCB0ZXN0IGNhc2Ug cnVuIHNvIHRoYXQgd2UKKwkjIGRvbid0IG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBjbGVhbnVw IGZyb20gdGhlIHRhcmdldCBjbHVzdGVyIGFmdGVyIGVhY2gKKwkjIHJ1bi4KKwlteSAkdGFyZ2V0 X25vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoInRhcmdldF8kcnVuIik7CisJ JHRhcmdldF9ub2RlLT5pbml0OworCSR0YXJnZXRfbm9kZS0+c3RhcnQ7CisKKwkjIER1bXBhbGwg ZnJvbSBub2RlIGNsdXN0ZXIuCisJJG5vZGUtPmNvbW1hbmRfb2soXEB7ICRwZ2R1bXBhbGxfcnVu c3skcnVufS0+e2R1bXBfY21kfSB9LAorCQkiJHJ1bjogcGdfZHVtcGFsbCBydW5zIik7CisKKwkj IFJlc3RvcmUgdGhlIGR1bXAgb24gInRhcmdldF9ub2RlIiBjbHVzdGVyLgorCW15IEByZXN0b3Jl X2NtZCA9ICgKKwkJQHsgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57cmVzdG9yZV9jbWR9IH0sCisJ CSctLWhvc3QnLCAkdGFyZ2V0X25vZGUtPmhvc3QsICctLXBvcnQnLCAkdGFyZ2V0X25vZGUtPnBv cnQpOworCisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0gcnVuX2NvbW1hbmQoXEByZXN0b3JlX2Nt ZCk7CisKKwkjIHBnX3Jlc3RvcmUgLS1maWxlIG91dHB1dCBmaWxlLgorCW15ICRvdXRwdXRfZmls ZSA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyLyR7cnVufS5zcWwiKTsKKworCWlmICggICAhKCRwZ2R1 bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQorCQkmJiAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e3VubGlrZX0pKQorCXsKKwkJZGllICJtaXNzaW5nIFwibGlrZVwiIG9yIFwidW5saWtlXCIgaW4g dGVzdCBcIiRydW5cIiI7CisJfQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9 KQorCXsKKwkJbGlrZSgkb3V0cHV0X2ZpbGUsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9 LCAic2hvdWxkIGR1bXAgJHJ1biIpOworCX0KKworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0t Pnt1bmxpa2V9KQorCXsKKwkJdW5saWtlKAorCQkJJG91dHB1dF9maWxlLAorCQkJJHBnZHVtcGFs bF9ydW5zeyRydW59LT57dW5saWtlfSwKKwkJCSJzaG91bGQgbm90IGR1bXAgJHJ1biIpOworCX0K K30KKworIyBTb21lIG5lZ2F0aXZlIHRlc3QgY2FzZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCBh bmQgcmVzdG9yZSB1c2luZyBwZ19yZXN0b3JlCisjIHRlc3QgY2FzZSAxOiB3aGVuIC1DIGlzIG5v dCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21t YW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRf Y3VzdG9tIiwKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1w ZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlv biAtQ1wvLS1jcmVhdGUgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2 ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdf cmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3QgY2FzZSAyOiBXaGVu IC0tbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNv bW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1h dF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1saXN0JywK KwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtbFwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVz dG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC0tbGlz dCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyB0 ZXN0IGNhc2UgMzogV2hlbiBub24tZXhpc3QgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAtZCBvcHRp b24KKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIk dGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywK KwkJJy1kJyA9PiAnZGJwcScsCisJXSwKKwlxci9cUUZBVEFMOiAgZGF0YWJhc2UgImRicHEiIGRv ZXMgbm90IGV4aXN0XEUvLAorCSdXaGVuIG5vbi1leGlzdGVudCBkYXRhYmFzZSBpcyBnaXZlbiB3 aXRoIC1kIG9wdGlvbiBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJworKTsK KworJG5vZGUtPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM5LjMKCg== --00000000000087abfe064270e204--