Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vSgIB-003TkZ-0p for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 18:49:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vSgI9-0015bK-2w for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 18:49:02 +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.96) (envelope-from ) id 1vSgI9-0015b4-0H for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 18:49:01 +0000 Received: from mail-qv1-xf32.google.com ([2607:f8b0:4864:20::f32]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vSgI6-003nmP-1K for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 18:49:00 +0000 Received: by mail-qv1-xf32.google.com with SMTP id 6a1803df08f44-8826b83e405so73608846d6.0 for ; Mon, 08 Dec 2025 10:48:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765219738; x=1765824538; 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=ZRTwYV2sGUxJDcylIqN/y7W+lzDZuDWfOAoFRWRrcZY=; b=YdOR1QcWqJGusjIc7v823UZlQQ2h5lS+N+8Mtd1rN3i51O2UhY782FDOoe08kJqXMF IW7rHRGqoxLj37+MmlqT3Wu6JsdIicsZqipYfk5hlo4lZahNlOp9Qw5i4GKO6yrKRK0/ zYKfghy9XnLNx91evgvR+xPqlaNb8k3jV6C5aSalmx3hjNvWKvfX1ckVGsbc1hTL7k5n AFbBeEMJsoNWaa7HNdYC4Ecx8FwwesoPRSGe3IS4Rh0oO1UofekWFUGRsryxeDSsDQ9J FLUPZC6hD8WOFgt1n+2BYsG4b6qDSkNnX1izyBfyyTJlIkuu344Mu3CGkVDAdwCCWADh U/1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765219738; x=1765824538; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ZRTwYV2sGUxJDcylIqN/y7W+lzDZuDWfOAoFRWRrcZY=; b=oVPC6aI7/ZfU49ZRNJf6a695bzf5YTKQWKtoEgwLg/WtGjNzFCfv+Liw7xTq8sm3b/ JqSWRoSdSdGJwZ7vNmRWoV6/9oY6fZq5tlv2dwpXMbtysxft6p97Pk3AERdXNsBag6mY 1ezucBKXjoO/FVcOga8t9mUvMNuB4zninTnpSzvPi7J5zr6fZStCYvutn6BaLDR69bzF P4WoODuJi/OiL+Duny5IcXMzvcXRK5IxGNCayWAqxmi8+ySgAlx7CrUnttOYu48aKwFW QJosZHwbXnFMXjU9YIhovPTr3dubOX//3pgxXT2GNC6V68GoqTmbhYf8YMhUbC2/fNh5 ofpQ== X-Forwarded-Encrypted: i=1; AJvYcCUcnPXyl33guZ6LFTiv1B6kBaWFl4rKla6hrK+liOxMc47yGbOSya4nWgRPM4TdCTeam4XwEcKqrAhqlQU+@lists.postgresql.org X-Gm-Message-State: AOJu0YyMVfvejQPajZAlL7DA48IYpGDRnWUMxIeYDccJ0ErdYkbGVttS cCkN81Ym2yQhnpg+nWoy3PLGlVXn9tEHUTP3WMjv7rACtV7dfUPqWrEp+Bn9ofU+hX8FdgESMrl 5zWo9r3EqCbzSRmCNizsppIARNvukKO8= X-Gm-Gg: ASbGncveZmKLMsdjByOiJvIApeJoed0oYiZ1vIBfQmH7/5fR4Rm/BXSVtmMLjIq2qfZ mjjWCNeXcCUh8k3F2UhqrS9ba1FrQaxaDmby5Xn9rOjr2jw53nj1asOs2mr/thnCMEKFM8GtKhp O4kYFccg1b4q4o5Ufg/mr15tLytytNDkT8pjaJAOGNbGt+HDNGa+rYlujiC+NUmOpniNg14pcD4 yYDLwIif+qOKM/Kb/tTCvU2yDKXt6N3/E7yGgs9P0rp11fkVzcZu1RmYFSKyBmHDYqxHnf15A== X-Google-Smtp-Source: AGHT+IGVIdPfwdQt1z6oPmYyQacloCWg+tzSYvkx48Em3b5s3W/j5bLuoNvgTWxvYubVN6xnLahfGZma6R0efeK8RwQ= X-Received: by 2002:a05:622a:580d:b0:4ee:4128:beb7 with SMTP id d75a77b69052e-4f03fef2283mr119808661cf.69.1765219738214; Mon, 08 Dec 2025 10:48:58 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Tue, 9 Dec 2025 00:18:46 +0530 X-Gm-Features: AQt7F2p1B1n1T8gpvdKrPdwZA-rv7d8CqYCx4282Y4bxkRwp5uJvYi-Tu9gxcfE Message-ID: Subject: Re: Non-text mode for pg_dumpall To: tushar Cc: Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000731ae10645753ff5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000731ae10645753ff5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 8 Dec 2025 at 22:39, tushar wrote: > > > > On Mon, Dec 8, 2025 at 12:14=E2=80=AFPM Mahendra Singh Thalor wrote: >> >> >> I tried to fix these issues in the attached patch. >> >> Here, I am attaching an updated patch for the review and testing. > > > Thanks Mahendra, I am not able to apply the patche against the latest sou= rces, seems like you need to rebase it > > [edb@1a1c15437e7c pg]$ git apply /tmp/v11_08122025-Non-text-modes-for-pg_= dumpall-correspondingly-change.patch > error: patch failed: src/bin/pg_dump/pg_dumpall.c:419 > error: src/bin/pg_dump/pg_dumpall.c: patch does not apply > error: patch failed: src/bin/pg_dump/pg_restore.c:409 > error: src/bin/pg_dump/pg_restore.c: patch does not apply > [edb@1a1c15437e7c pg]$ > > regards, Thanks Tushar for the report. In the last commit, there were some changes for error messages so this was not applying cleanly. > I have observed that when combining the --globals-only option with certai= n other switches during a pg_restore - operation fails silently. > The attempted restore does not execute, but no error message or warning i= s displayed unless the --verbose option is also used. > > --this will just run without any message but objects also not going to cr= eate > ./pg_restore -Fc ok31. -C -d postgres -t mytable --globals-only > ./pg_restore -Fc ok31. -C -d postgres -no-tablespace --globals-only > ./pg_restore -Fc ok31. -C -d postgres -no-data --globals-only > > with --verbose > [edb@1a1c15437e7c bin]$ ./pg_restore -Fc ok31. -C -d postgres -t myable = --globals-only -v > pg_restore: connecting to database for restore > pg_restore: executing SELECT pg_catalog.set_config('search_path', '', fal= se); > pg_restore: implied no-schema restore > pg_restore: database restoring skipped because option -g/--globals-only w= as specified > > we should probably add some message there. All these are good to me. In a successful case, we don't receive any error message.(expected) Here, I am attaching an updated patch for the review and testing. This can be applied on commit d0d0ba6cf66c4043501f6f7. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000731ae10645753ff5 Content-Type: application/octet-stream; name="v12_09122025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v12_09122025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mixi8bg10 RnJvbSAyNTNiYWE5Y2NhN2VkOTcxOWUyNDhkODkyYzliOTY2NWNjODMyYzQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCA5IERlYyAyMDI1IDAwOjA4OjE4ICswNTMwClN1YmplY3Q6IFtQQVRD SF0gTm9uIHRleHQgbW9kZXMgZm9yIHBnX2R1bXBhbGwsIGNvcnJlc3BvbmRpbmdseSBjaGFuZ2Ug CiBwZ19yZXN0b3JlCgogICAgcGdfZHVtcGFsbCBhY3F1aXJlcyBhIG5ldyAtRi8tLWZvcm1hdCBv cHRpb24sIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMKICAgIHBnX2R1bXAuIFRoZSBkZWZhdWx0 IGlzIHAsIG1lYW5pbmcgcGxhaW4gdGV4dC4gRm9yIGFueSBvdGhlciB2YWx1ZSwgYQogICAgZGly ZWN0b3J5IGlzIGNyZWF0ZWQgY29udGFpbmluZyB0d28gZmlsZXMsIHRvYy5nbG8gYW5kIG1hcC5k YXQuIFRoZQogICAgZmlyc3QgY29udGFpbnMgY29tbWFuZHMgcmVzdG9yaW5nIHRoZSBnbG9iYWwg ZGF0YSBpbiBjdXN0b20gZm9ybWF0LCBhbmQgdGhlIHNlY29uZAogICAgY29udGFpbnMgYSBtYXAg ZnJvbSBvaWRzIHRvIGRhdGFiYXNlIG5hbWVzIGluIHRleHQgZm9ybWF0LiBJdCB3aWxsIGFsc28g Y29udGFpbiBhCiAgICBzdWJkaXJlY3RvcnkgY2FsbGVkIGRhdGFiYXNlcywgaW5zaWRlIHdoaWNo IGl0IHdpbGwgY3JlYXRlIGFyY2hpdmVzIGluCiAgICB0aGUgc3BlY2lmaWVkIGZvcm1hdCwgbmFt ZWQgdXNpbmcgdGhlIGRhdGFiYXNlIG9pZHMuCgogICAgSW4gdGhlc2UgY2FzZXNzIHRoZSAtZiBh cmd1bWVudCBpcyByZXF1aXJlZC4KCiAgICBJZiBwZ19yZXN0b3JlIGVuY291bnRlcnMgYSBkaXJl Y3RvcnkgY29udGFpbmluZyBtYXAuZGF0IGFuZCB0b2MuZ2xvLAogICAgaXQgcmVzdG9yZXMgdGhl IGdsb2JhbCBzZXR0aW5ncyBmcm9tIHRvYy5nbG8gaWYgZXhpc3QsIGFuZCB0aGVuCiAgICByZXN0 b3JlcyBlYWNoIGRhdGFiYXNlLgoKICAgIHBnX3Jlc3RvcmUgYWNxdWlyZXMgdHdvIG5ldyBvcHRp b25zOiAtZy8tLWdsb2JhbHMtb25seSB3aGljaCBzdXBwcmVzc2VzCiAgICByZXN0b3JhdGlvbiBv ZiBhbnkgZGF0YWJhc2VzLCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIHdoaWNoIGluaGliaXRzCiAg ICByZXN0b3JhdGlvbiBvZiBwYXJ0aWN1YWxyIGRhdGFiYXNlKHMpIGluIHRoZSBzYW1lIHdheSB0 aGUgc2FtZSBvcHRpb24KICAgIHdvcmtzIGluIHBnX2R1bXBhbGwuCgp2MTIKLS0tCiBkb2Mvc3Jj L3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgfCAxMDQgKysrKy0KIGRvYy9zcmMvc2dtbC9y ZWYvcGdfcmVzdG9yZS5zZ21sICAgICB8ICA2NiArKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0 ZGIuYyAgICAgICAgICB8ICAgNyArLQogc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oICAgICAg ICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEg Kwogc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMgICAgICAgICAgIHwgIDEwICsKIHNyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXAuaCAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jIHwgIDM0ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmggfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAgIHwg ICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgICAgICB8IDYxOCArKysrKysrKysrKysrKysr KysrKystLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDYxNyAr KysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBs ICAgICAgIHwgIDI3ICsrCiBzcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCAgfCAz OTYgKysrKysrKysrKysrKysrKysKIDE1IGZpbGVzIGNoYW5nZWQsIDE3MjIgaW5zZXJ0aW9ucygr KSwgMTY3IGRlbGV0aW9ucygtKQogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMvYmlu L3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmluL3BnX2R1 bXAvdC8wMDdfcGdfZHVtcGFsbC5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcGFsbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggODgz NGI3ZWMxNDEuLjc1ZGUxZmVlMzMwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1 bXBhbGwuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYs NyArMTYsMTAgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAg PHJlZm5hbWU+cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxw cm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBpbnRv IGEgc2NyaXB0IGZpbGU8L3JlZnB1cnBvc2U+CisKKyAgPHJlZnB1cnBvc2U+CisgICBleHBvcnQg YSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIg YXMgYW4gU1FMIHNjcmlwdCBvciB0byBvdGhlciBmb3JtYXRzCisgIDwvcmVmcHVycG9zZT4KICA8 L3JlZm5hbWVkaXY+CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0zMyw3ICszNiw3IEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxs PC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciB3cml0aW5nIG91dAogICAgKDxxdW90ZT5k dW1waW5nPC9xdW90ZT4pIGFsbCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ IGRhdGFiYXNlcwotICAgb2YgYSBjbHVzdGVyIGludG8gb25lIHNjcmlwdCBmaWxlLiAgVGhlIHNj cmlwdCBmaWxlIGNvbnRhaW5zCisgICBvZiBhIGNsdXN0ZXIgaW50byBhbiBTUUwgc2NyaXB0IGZp bGUgb3IgYW4gYXJjaGl2ZS4gIFRoZSBvdXRwdXQgY29udGFpbnMKICAgIDxhY3JvbnltPlNRTDwv YWNyb255bT4gY29tbWFuZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgogICAg bGlua2VuZD0iYXBwLXBzcWwiLz4gdG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0 aGlzIGJ5CiAgICBjYWxsaW5nIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2gg ZGF0YWJhc2UgaW4gdGhlIGNsdXN0ZXIuCkBAIC01MiwxMSArNTUsMTYgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBTUUwgc2NyaXB0IHdp bGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAgUGxhaW4g dGV4dCBTUUwgc2NyaXB0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4g IFVzZSB0aGUKICAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4g b3B0aW9uIG9yIHNoZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3QgaXQgaW50byBhIGZpbGUu CiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEFyY2hpdmVzIGluIG90aGVyIGZvcm1hdHMgd2ls bCBiZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcgdGhlCisgICA8b3B0aW9uPi1m PC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+LCB3aGljaCBpcyByZXF1aXJlZCBpbiB0 aGlzIGNhc2UuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBh bGw8L2FwcGxpY2F0aW9uPiBuZWVkcyB0byBjb25uZWN0IHNldmVyYWwKICAgdGltZXMgdG8gdGhl IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gc2VydmVyIChvbmNlIHBlcgpA QCAtMTMxLDEwICsxMzksODUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBh cmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRoaXMg aXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2VkLgorICAgICAg ICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSBvbWl0dGVkIHdoZW4gPG9wdGlvbj4tLWZv cm1hdDwvb3B0aW9uPiBpcyBwbGFpbgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+ CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVy bT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxh Y2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5 IHRoZSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIEluIHBsYWluIGZvcm1hdCwgYWxsIHRoZSBkdW1w IGRhdGEgaXMKKyAgICAgICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0IHN0cmVhbS4gVGhpcyBpcyB0 aGUgZGVmYXVsdC4KKworICAgICAgICBJbiBhbGwgb3RoZXIgbW9kZXMsIDxhcHBsaWNhdGlvbj5w Z19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gZmlyc3QgY3JlYXRlcyB0d28gZmlsZXM6CisgICAgICAg IDxmaWxlbmFtZT50b2MuZGF0L3RvYy5kbXAvdG9jLnRhcjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5h bWU+bWFwLmRhdDwvZmlsZW5hbWU+LCBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIHNwZWNpZmll ZCBieSA8b3B0aW9uPi0tZmlsZTwvb3B0aW9uPi4KKyAgICAgICAgVGhlIGZpcnN0IGZpbGUgY29u dGFpbnMgZ2xvYmFsIGRhdGEsIHN1Y2ggYXMgcm9sZXMgYW5kIHRhYmxlc3BhY2VzLiBUaGUgc2Vj b25kCisgICAgICAgIGNvbnRhaW5zIGEgbWFwcGluZyBiZXR3ZWVuIGRhdGFiYXNlIG9pZHMgYW5k IG5hbWVzLiBUaGVzZSBmaWxlcyBhcmUgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cGdf cmVzdG9yZTwvYXBwbGljYXRpb24+LiBEYXRhIGZvciBpbmRpdmlkdWFsIGRhdGFiYXNlcyBpcyBw bGFjZWQgaW4KKyAgICAgICAgPGZpbGVuYW1lPmRhdGFiYXNlczwvZmlsZW5hbWU+IHN1YmRpcmVj dG9yeSwgbmFtZWQgdXNpbmcgdGhlIGRhdGFiYXNlJ3MgPHR5cGU+b2lkPC90eXBlPi4KKworICAg ICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRp cmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgIE91dHB1dCBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmVzIGZvciBl YWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0 b3JlLiBUaGUgZGlyZWN0b3J5CisgICAgICAgICAgIHdpbGwgaGF2ZSBkYXRhYmFzZSA8dHlwZT5v aWQ8L3R5cGU+IGFzIGl0cyBuYW1lLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0 ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgcGxhaW4tdGV4dCBTUUwgc2Ny aXB0IGZpbGUgKHRoZSBkZWZhdWx0KS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+YzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8 dGVybT48bGl0ZXJhbD5jdXN0b208L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFy Y2hpdmUgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBp bnRvIHBnX3Jlc3RvcmUuIFRoZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUgbmFtZWQgPGZp bGVuYW1lPmRib2lkLmRtcDwvZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBlPiBpcyB0 aGUKKyAgICAgICAgICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rl cm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91 dHB1dCBhIHRhci1mb3JtYXQgYXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAg c3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hpdmUKKyAgICAgICAg ICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJvaWQudGFyPC9maWxlbmFtZT4gd2hlcmUgPHR5 cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQorICAgICAgICAgICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRo ZSBkYXRhYmFzZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKworICAgICAg IE5vdGU6IHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZvciBkZXRhaWxzCisgICAg ICAgb2YgaG93IHRoZSB2YXJpb3VzIG5vbiBwbGFpbiB0ZXh0IGFyY2hpdmVzIHdvcmsuCisKKyAg ICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rl cm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgpA QCAtOTM3LDkgKzEwMjAsMTMgQEAgZXhjbHVkZSBkYXRhYmFzZSA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+UEFUVEVSTjwvcmVwbGFjZWFibGU+CiAgIDx0aXRsZT5FeGFtcGxlczwvdGl0 bGU+CiAgIDxwYXJhPgogICAgVG8gZHVtcCBhbGwgZGF0YWJhc2VzOgotCisgICBJZiBmb3JtYXQg aXMgZ2l2ZW4sIHRoZW4gZHVtcCB3aWxsIGJlIGJhc2VkIG9uIGZvcm1hdCwgZGVmYXVsdCBwbGFp bi4KIDxzY3JlZW4+CiA8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsICZn dDsgZGIub3V0PC91c2VyaW5wdXQ+Cis8L3NjcmVlbj4KKworPHNjcmVlbj4KKzxwcm9tcHQ+JDwv cHJvbXB0PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwgLS1mb3JtYXQ9ZC9hL2MvcCAtZiBkYi5vdXQ8 L3VzZXJpbnB1dD4KIDwvc2NyZWVuPgogICA8L3BhcmE+CiAKQEAgLTk1Niw2ICsxMDQzLDE1IEBA IGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPlBBVFRFUk48 L3JlcGxhY2VhYmxlPgogICAgdGhlIHNjcmlwdCB3aWxsIGF0dGVtcHQgdG8gZHJvcCBvdGhlciBk YXRhYmFzZXMgaW1tZWRpYXRlbHksIGFuZCB0aGF0CiAgICB3aWxsIGZhaWwgZm9yIHRoZSBkYXRh YmFzZSB5b3UgYXJlIGNvbm5lY3RlZCB0by4KICAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIElm IGR1bXAgd2FzIHRha2VuIGluIG5vbi10ZXh0IGZvcm1hdCwgdGhlbiB1c2UgcGdfcmVzdG9yZSB0 byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuCis8c2NyZWVuPgorPHByb21wdD4kPC9wcm9tcHQ+IDx1 c2VyaW5wdXQ+cGdfcmVzdG9yZSBkYi5vdXQgLWQgcG9zdGdyZXMgLUM8L3VzZXJpbnB1dD4KKzwv c2NyZWVuPgorICAgVGhpcyB3aWxsIHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMuIElmIHVzZXIg ZG9uJ3Qgd2FudCB0byByZXN0b3JlIHNvbWUgZGF0YWJhc2VzLCB0aGVuIHVzZQorICAgLS1leGNs dWRlLXBhdHRlcm4gdG8gc2tpcCB0aG9zZS4KKzwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJl ZnNlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9k b2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCBhNDY4YTM4MzYxYS4uNzQ5N2I1 MjdhZTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsxOCw5IEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9yZWZuYW1lPgogCiAg IDxyZWZwdXJwb3NlPgotICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9k dWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgotICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFw cGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9yZSA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcyBmcm9tIGFyY2hpdmVzCisgICBjcmVh dGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFt ZWRpdj4KIApAQCAtMzgsMTMgKzM5LDE0IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAg IDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0 aWxpdHkgZm9yIHJlc3RvcmluZyBhCi0gICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVj dG5hbWU+IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5r ZW5kPSJhcHAtcGdkdW1wIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIDxwcm9k dWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2Ugb3IgY2x1c3RlciBmcm9t IGFuIGFyY2hpdmUKKyAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBv cgorICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnLWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24t cGxhaW4tdGV4dAogICAgZm9ybWF0cy4gIEl0IHdpbGwgaXNzdWUgdGhlIGNvbW1hbmRzIG5lY2Vz c2FyeSB0byByZWNvbnN0cnVjdCB0aGUKLSAgIGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMg aW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCi0gICBhcmNoaXZlIGZpbGVzIGFsc28g YWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bworICAgZGF0YWJh c2Ugb3IgY2x1c3RlciB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBz YXZlZC4gVGhlCisgICBhcmNoaXZlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3Jl PC9hcHBsaWNhdGlvbj4gdG8KICAgIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGF0IGlzIHJlc3RvcmVk LCBvciBldmVuIHRvIHJlb3JkZXIgdGhlIGl0ZW1zCi0gICBwcmlvciB0byBiZWluZyByZXN0b3Jl ZC4gVGhlIGFyY2hpdmUgZmlsZXMgYXJlIGRlc2lnbmVkIHRvIGJlCisgICBwcmlvciB0byBiZWlu ZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZm9ybWF0cyBhcmUgZGVzaWduZWQgdG8gYmUKICAgIHBv cnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgogICA8L3BhcmE+CiAKQEAgLTUyLDEwICs1NCwx NyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3Jl PC9hcHBsaWNhdGlvbj4gY2FuIG9wZXJhdGUgaW4gdHdvIG1vZGVzLgogICAgSWYgYSBkYXRhYmFz ZSBuYW1lIGlzIHNwZWNpZmllZCwgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9u PgogICAgY29ubmVjdHMgdG8gdGhhdCBkYXRhYmFzZSBhbmQgcmVzdG9yZXMgYXJjaGl2ZSBjb250 ZW50cyBkaXJlY3RseSBpbnRvCi0gICB0aGUgZGF0YWJhc2UuICBPdGhlcndpc2UsIGEgc2NyaXB0 IGNvbnRhaW5pbmcgdGhlIFNRTAotICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhl IGRhdGFiYXNlIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KKyAgIHRoZSBkYXRhYmFzZS4KKyAgIFdo ZW4gcmVzdG9yaW5nIGZyb20gYSBkdW1wIG1hZGUgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8 L2FwcGxpY2F0aW9uPiwKKyAgIGVhY2ggZGF0YWJhc2Ugd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGVu IHRoZSByZXN0b3JhdGlvbiB3aWxsIGJlIHJ1biBpbiB0aGF0CisgICBkYXRhYmFzZS4KKworICAg T3RoZXJ3aXNlLCB3aGVuIGEgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBhIHNjcmlw dCBjb250YWluaW5nIHRoZSBTUUwKKyAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1aWxkIHRo ZSBkYXRhYmFzZSBvciBjbHVzdGVyIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KICAgIHRvIGEgZmls ZSBvciBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIHNjcmlwdCBvdXRwdXQgaXMgZXF1aXZhbGVudCB0 bwotICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVt cDwvYXBwbGljYXRpb24+LgorICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBw bGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8YXBwbGljYXRpb24+cGdfZHVt cGFsbDwvYXBwbGljYXRpb24+LgorCiAgICBTb21lIG9mIHRoZSBvcHRpb25zIGNvbnRyb2xsaW5n IHRoZSBvdXRwdXQgYXJlIHRoZXJlZm9yZSBhbmFsb2dvdXMgdG8KICAgIDxhcHBsaWNhdGlvbj5w Z19kdW1wPC9hcHBsaWNhdGlvbj4gb3B0aW9ucy4KICAgPC9wYXJhPgpAQCAtMTUyLDYgKzE2MSw4 IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBjb21tYW5kcyB0aGF0IG1lbnRp b24gdGhpcyBkYXRhYmFzZS4KICAgICAgICAgQWNjZXNzIHByaXZpbGVnZXMgZm9yIHRoZSBkYXRh YmFzZSBpdHNlbGYgYXJlIGFsc28gcmVzdG9yZWQsCiAgICAgICAgIHVubGVzcyA8b3B0aW9uPi0t bm8tYWNsPC9vcHRpb24+IGlzIHNwZWNpZmllZC4KKyAgICAgICAgPG9wdGlvbj4tLWNyZWF0ZTwv b3B0aW9uPiBpcyByZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAg ICAgICAgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8 L2FwcGxpY2F0aW9uPi4KICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFyYT4KQEAgLTI0Nyw2 ICsyNTgsMTkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgog ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+ PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxz LW9ubHk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2Vz KSwgbm8gZGF0YWJhc2VzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg VGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGFuIGFyY2hp dmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1JIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAg ICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5p bmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgpAQCAtNTkxLDYgKzYxNSwyOCBAQCBQ b3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlz dGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tZXhj bHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVw bGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBEbyBub3QgcmVzdG9yZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisg ICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJs ZT4uCisgICAgICAgIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5n IG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3 aXRjaGVzLiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0 ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFzIGEg cGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8YXBw bGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+CisgICAg ICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4pLAor ICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQgYnkgd3Jp dGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2hlbiB1 c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAgcXVvdGUgdGhlIHBhdHRlcm4g aWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQgZXhwYW5zaW9uLgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFu dCB3aGVuIHJlc3RvcmluZyBmcm9tIGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+ cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0 ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8 dGVybT48b3B0aW9uPi0tZmlsdGVyPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5maWxl bmFtZTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bm5lY3RkYi5jCmluZGV4IGQ1NWQ1M2RiZWVhLi5kM2U5ZTI3MDAzZSAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIu YwpAQCAtMjI1LDcgKzIyNSw3IEBAIENvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUs IGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAogCQlleGl0X25pY2VseSgxKTsKIAl9CiAK LQlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NR TCkpOworCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BB VEhfU1FMLCBmYWxzZSkpOwogCiAJcmV0dXJuIGNvbm47CiB9CkBAIC0yNzUsNyArMjc1LDcgQEAg Y29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNoYXIgKip2YWx1 ZXMpCiAgKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24g ZmFpbHVyZS4KICAqLwogUEdyZXN1bHQgKgotZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqcXVlcnkpCitleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpx dWVyeSwgYm9vbCBpc19hcmNoaXZlKQogewogCVBHcmVzdWx0ICAgKnJlczsKIApAQCAtMjg3LDcg KzI4Nyw4IEBAIGV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQog CXsKIAkJcGdfbG9nX2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29u bikpOwogCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOwotCQlQ UWZpbmlzaChjb25uKTsKKwkJaWYgKCFpc19hcmNoaXZlKQorCQkJUFFmaW5pc2goY29ubik7CiAJ CWV4aXRfbmljZWx5KDEpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5l Y3RkYi5oIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oCmluZGV4IDZjMWUxOTU0NzY5Li4w Yjc0MWI2OGNiMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaApAQCAtMjIsNSArMjIsNSBAQCBleHRlcm4gUEdj b25uICpDb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25u ZWN0aW9uX3N0cmluZwogCQkJCQkJCSAgIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBm YWlsX29uX2Vycm9yLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByb2duYW1lLCBjb25zdCBjaGFy ICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lvbiwKIAkJCQkJCQkgICBjaGFyICpwYXNzd29y ZCwgY2hhciAqb3ZlcnJpZGVfZGJuYW1lKTsKLWV4dGVybiBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5 KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOworZXh0ZXJuIFBHcmVzdWx0ICpleGVj dXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSwgYm9vbCBpc19hcmNoaXZl KTsKICNlbmRpZgkJCQkJCQkvKiBDT05ORUNUREJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IGYz YzY2OWY0ODRlLi4zZTIxYWFmNTc4MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29u LmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMTAzLDYgKzEwMyw3 IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBsJywKICAgICAg ICd0LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUucGwnLAogICAgICAgJ3QvMDA2X3BnX2R1bXBfY29t cHJlc3MucGwnLAorCSAgJ3QvMDA3X3BnX2R1bXBhbGwucGwnLAogICAgICAgJ3QvMDEwX2R1bXBf Y29ubnN0ci5wbCcsCiAgICAgXSwKICAgfSwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w YXJhbGxlbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKaW5kZXggMDg2YWRjZGM1MDIu LjU5NzRkNjcwNmZkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYworKysg Yi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwpAQCAtMzMzLDYgKzMzMywxNiBAQCBvbl9leGl0 X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCW9uX2V4aXRfbmljZWx5KGFyY2hpdmVfY2xv c2VfY29ubmVjdGlvbiwgJnNodXRkb3duX2luZm8pOwogfQogCisvKgorICogV2hlbiBwZ19yZXN0 b3JlIHJlc3RvcmVzIG11bHRpcGxlIGRhdGFiYXNlcywgdGhlbiB1cGRhdGUgYWxyZWFkeSBhZGRl ZCBlbnRyeQorICogaW50byBhcnJheSBmb3IgY2xlYW51cC4KKyAqLwordm9pZAorcmVwbGFjZV9v bl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKQoreworCXNodXRkb3duX2luZm8uQUhY ID0gQUhYOworfQorCiAvKgogICogb25fZXhpdF9uaWNlbHkgaGFuZGxlciBmb3Igc2h1dHRpbmcg ZG93biBkYXRhYmFzZSBjb25uZWN0aW9ucyBhbmQKICAqIHdvcmtlciBwcm9jZXNzZXMgY2xlYW5s eS4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXAuaAppbmRleCBkOTA0MWRhZDcyMC4uZjYzMWQ5NDU0NzIgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwLmgKQEAgLTMxMiw3ICszMTIsNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9u cyhBcmNoaXZlICpBSCwgRHVtcE9wdGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBl eHRlcm4gdm9pZCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAK LWV4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBS ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEsIGJvb2wgZ2xvYmFs c19vbmx5KTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZlICovCiBleHRlcm4gQXJjaGl2 ZSAqT3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQg Zm10KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCBjODRiMDE3ZjIxYi4u ZDM1MjMyY2QwMzggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTg2LDcg Kzg2LDcgQEAgc3RhdGljIGludAlSZXN0b3JpbmdUb0RCKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0 YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1 bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRp bSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLAotCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYyk7CisJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjLCBib29sIGFwcGVuZF9kYXRhKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUg KlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAK QEAgLTMzOSw5ICszMzksMTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZl ICpBSFgpCiAJCVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8qIFB1YmxpYyAqLworLyoK KyAqIFJlc3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5kX2RhdGEgaXMgc2V0LCB0aGVuIGFw cGVuZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5nIGR1bXAKKyAqIG9mIG11bHRp cGxlIGRhdGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVtcGFsbC4KKyAqLwogdm9pZAot UmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhY LCBib29sIGFwcGVuZF9kYXRhLCBib29sIGdsb2JhbHNfb25seSkKIHsKIAlBcmNoaXZlSGFuZGxl ICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFI LT5wdWJsaWMucm9wdDsKQEAgLTQ1OCw3ICs0NjMsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZl ICpBSFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1l IHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05P TkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3Nw ZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9z cGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRh dGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC03NjEsNiArNzY2LDIwIEBAIFJlc3RvcmVBcmNo aXZlKEFyY2hpdmUgKkFIWCkKIAkJCWlmICgodGUtPnJlcXMgJiAoUkVRX1NDSEVNQSB8IFJFUV9E QVRBIHwgUkVRX1NUQVRTKSkgPT0gMCkKIAkJCQljb250aW51ZTsJCS8qIGlnbm9yZSBpZiBub3Qg dG8gYmUgZHVtcGVkIGF0IGFsbCAqLwogCisJCQkvKiBTa2lwIERST1AgREFUQUJBU0UgaWYgZ2xv YmFsc19vbmx5LiAqLworCQkJaWYgKGdsb2JhbHNfb25seSAmJiB0ZSAmJiB0ZS0+dGFnICYmIChz dHJjbXAodGUtPnRhZywgIkRST1BfREFUQUJBU0UiKSA9PSAwKSkKKwkJCQljb250aW51ZTsKKwor CQkJLyogU2tpcCBmb3IgQ09OTkVDVCBtZXRhIGNvbW1hbmQuICovCisJCQlpZiAoIXJvcHQtPmZp bGVuYW1lICYmIHRlICYmIHRlLT50YWcgJiYKKwkJCQkJKHN0cmNtcCh0ZS0+dGFnLCAiQ09OTkVD VCIpID09IDApKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBTa2lwIGlmIG5vLXRhYmxlc3BhY2Ug aXMgZ2l2ZW4uICovCisJCQlpZiAocm9wdC0+bm9UYWJsZXNwYWNlICYmIHRlICYmIHRlLT50YWcg JiYgKChzdHJjbXAodGUtPnRhZywgImR1bXBUYWJsZXNwYWNlcyIpID09IDApIHx8CisJCQkJCShz dHJjbXAodGUtPnRhZywgImRyb3BUYWJsZXNwYWNlcyIpID09IDApKSkKKwkJCQljb250aW51ZTsK KwogCQkJc3dpdGNoIChfdG9jRW50cnlSZXN0b3JlUGFzcyh0ZSkpCiAJCQl7CiAJCQkJY2FzZSBS RVNUT1JFX1BBU1NfTUFJTjoKQEAgLTEzMTYsNyArMTMzNSw3IEBAIFByaW50VE9DU3VtbWFyeShB cmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5h bWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVj KTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMs IGZhbHNlKTsKIAogCWlmIChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQ R0RVTVBfU1RSRlRJTUVfRk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0g MCkKQEAgLTE2OTUsNyArMTcxNCw4IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNo YXIgKmZtdCwuLi4pCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgs IGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTcxNSw3ICsxNzM1LDcgQEAg U2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNl CiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBl bmQpCisJaWYgKGFwcGVuZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQlt b2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMzI1YjUzZmM5YmQuLjM2NTA3M2IzZWFlIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zOTQsNiArMzk0LDcgQEAgc3Ry dWN0IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBhcmFsbGVsX3Jlc3RvcmUoQXJjaGl2ZUhhbmRs ZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRlcm4gdm9pZCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUo QXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZl KEFyY2hpdmUgKkFIWCk7CiAKIGV4dGVybiB2b2lkIHdhcm5fb3JfZXhpdF9ob3JyaWJseShBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50Zigy LCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYjViYTNiNDZkZDkuLjgxOGI4MGE5 MzY5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VB cmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlzYXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJi b3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAwOwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNo aXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgsIGZhbHNlLCBmYWxz ZSk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJv cHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYwppbmRleCAyNGFkMjAxYWYyZi4uZjQ0ZDVlOWQwMzcgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYwpAQCAtMTMwNiw3ICsxMzA2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ ICogcmlnaHQgbm93LgogCSAqLwogCWlmIChwbGFpblRleHQpCi0JCVJlc3RvcmVBcmNoaXZlKGZv dXQpOworCQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBmYWxzZSwgZmFsc2UpOwogCiAJQ2xvc2VBcmNo aXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCA4ZmEwNDkzMDM5OS4uOGQ0YWFjMTU3 YWMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImZlX3V0 aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9w dF9sb25nLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24g c3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVS U0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIKQEAgLTY1LDkg KzY2LDkgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0 aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGRyb3BE QnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGJvb2wg b3V0cHV0X2NsZWFuKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNn KTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAq Y3JlYXRlX29wdHMpOworc3RhdGljIGludCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBj b25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlKTsKIHN0YXRpYyB2b2lkIGJ1aWxk U2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJCQkJCSBjb25zdCBjaGFyICpjYXRhbG9nX25h bWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hh ciAqb2JqbmFtZSwKQEAgLTc2LDExICs3NywxMyBAQCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFu ZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9k Ym5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywK IAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9k dW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBh dHRlcm4pOworc3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIg KmZvcm1hdCk7CitzdGF0aWMgaW50IGNyZWF0ZUR1bXBJZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNy ZWF0ZU9uZUFyY2hpdmVFbnRyeShjb25zdCBjaGFyICpxdWVyeSwgY29uc3QgY2hhciAqdGFnKTsK IAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKIHN0YXRpYyBQUUV4cEJ1ZmZl ciBwZ2R1bXBvcHRzOwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5zdHIgPSAiIjsKLXN0YXRpYyBi b29sIG91dHB1dF9jbGVhbiA9IGZhbHNlOwogc3RhdGljIGJvb2wgc2tpcF9hY2xzID0gZmFsc2U7 CiBzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBkb3N5bmMgPSB0cnVl OwpAQCAtMTIzLDYgKzEyNiwxMCBAQCBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9l eGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3Qg ZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAogc3RhdGljIGNoYXIgKnJl c3RyaWN0X2tleTsKK3N0YXRpYyBBcmNoaXZlICpmb3V0ID0gTlVMTDsKK3N0YXRpYyBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CitzdGF0aWMgaW50IGR1 bXBJZFZhbCA9IDA7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCA9IGFyY2hO dWxsOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKQEAgLTE0OCw2ICsxNTUs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1 bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEws ICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0 IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxv d2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVy CkBAIC0xOTcsNiArMjA1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJ ICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFy ICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZvcm1hdF9uYW1lID0gInAiOwog CXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25s eSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjA4LDYgKzIxNyw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpbnQJCQljLAogCQkJCXJldDsKIAlp bnQJCQlvcHRpbmRleDsKKwlEdW1wT3B0aW9ucyBkb3B0OwogCiAJcGdfbG9nZ2luZ19pbml0KGFy Z3ZbMF0pOwogCXBnX2xvZ2dpbmdfc2V0X2xldmVsKFBHX0xPR19XQVJOSU5HKTsKQEAgLTI0NSw4 ICsyNTUsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJfQogCiAJcGdkdW1wb3B0 cyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJSW5pdER1bXBPcHRpb25zKCZkb3B0KTsKIAotCXdo aWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRV OnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCXdoaWxlICgoYyA9IGdl dG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOkY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxv bmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAg LTI1Niw3ICsyNjcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYnJlYWs7 CiAKIAkJCWNhc2UgJ2MnOgotCQkJCW91dHB1dF9jbGVhbiA9IHRydWU7CisJCQkJZG9wdC5vdXRw dXRDbGVhbiA9IHRydWU7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2QnOgpAQCAtMjc0LDcgKzI4 NSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9w dHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0X25h bWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2cnOgogCQkJCWds b2JhbHNfb25seSA9IHRydWU7CiAJCQkJYnJlYWs7CkBAIC0zMTQsNiArMzI3LDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdVJzoKIAkJCQlwZ3VzZXIgPSBwZ19z dHJkdXAob3B0YXJnKTsKKwkJCQlkb3B0LmNwYXJhbXMudXNlcm5hbWUgPSBwZ19zdHJkdXAob3B0 YXJnKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAndic6CkBAIC00MjMsNyArNDM3LDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKLQlpZiAo aWZfZXhpc3RzICYmICFvdXRwdXRfY2xlYW4pCisJaWYgKGlmX2V4aXN0cyAmJiAhZG9wdC5vdXRw dXRDbGVhbikKIAkJcGdfZmF0YWwoIm9wdGlvbiAlcyByZXF1aXJlcyBvcHRpb24gJXMiLAogCQkJ CSAiLS1pZi1leGlzdHMiLCAiLWMvLS1jbGVhbiIpOwogCkBAIC00MzUsNiArNDQ5LDI3IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyog R2V0IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1h dChmb3JtYXRfbmFtZSk7CisKKwkvKgorCSAqIElmIGEgbm9uLXBsYWluIGZvcm1hdCBpcyBzcGVj aWZpZWQsIGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCisJICogcGF0aCB0byB0 aGUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxs ICYmCisJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkpCisJeworCQlw Z19sb2dfZXJyb3IoIm9wdGlvbiAlcz1kfGN8dCByZXF1aXJlcyBvcHRpb24gJXMiLAorCQkJCSIt Ri8tLWZvcm1hdCIsICItZi8tLWZpbGUiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVz IC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNl bHkoMSk7CisJfQorCisJLyogcmVzdHJpY3Qta2V5IGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggLS1m b3JtYXQ9cGxhaW4gKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYgcmVzdHJp Y3Rfa2V5KQorCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAlcz1w bGFpbiIsCisJCQkJIi0tcmVzdHJpY3Qta2V5IiwgIi0tZm9ybWF0Iik7CisKIAkvKgogCSAqIElm IHBhc3N3b3JkIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVkIGluIHRoZSBkdW1wLCBzd2l0Y2ggdG8g dXNpbmcKIAkgKiBwZ19yb2xlcyB3aGljaCBpcyBlcXVhbGx5IHVzZWZ1bCwganVzdCBtb3JlIGxp a2VseSB0byBoYXZlIHVucmVzdHJpY3RlZApAQCAtNDk1LDYgKzUzMCwyNyBAQCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHNlcXVlbmNlX2RhdGEpCiAJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKHBnZHVtcG9wdHMsICIgLS1zZXF1ZW5jZS1kYXRhIik7CiAKKwkvKgorCSAqIE9wZW4g dGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dC4gIElmIHJl cXVpcmVkLAorCSAqIHRoZW4gY3JlYXRlIG5ldyBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hE dW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJQXNzZXJ0KGZpbGVuYW1lKTsKKworCQkvKiBD cmVhdGUgbmV3IGRpcmVjdG9yeSBvciBhY2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9y eS4gKi8KKwkJY3JlYXRlX29yX29wZW5fZGlyKGZpbGVuYW1lKTsKKwl9CisJZWxzZSBpZiAoZmls ZW5hbWUpCisJeworCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAo IU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVt IiwKKwkJCQkJIGZpbGVuYW1lKTsKKwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKIAkvKgog CSAqIElmIHlvdSBkb24ndCBwcm92aWRlIGEgcmVzdHJpY3Qga2V5LCBvbmUgd2lsbCBiZSBhcHBv aW50ZWQgZm9yIHlvdS4KIAkgKi8KQEAgLTU0NCwxOSArNjAwLDYgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCWV4cGFuZF9kYm5hbWVfcGF0dGVybnMoY29ubiwgJmRhdGFiYXNlX2V4 Y2x1ZGVfcGF0dGVybnMsCiAJCQkJCQkgICAmZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyk7CiAKLQkv KgotCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0 ZG91dAotCSAqLwotCWlmIChmaWxlbmFtZSkKLQl7Ci0JCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQ R19CSU5BUllfVyk7Ci0JCWlmICghT1BGKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91 dHB1dCBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkgZmlsZW5hbWUpOwotCX0KLQllbHNlCi0JCU9Q RiA9IHN0ZG91dDsKLQogCS8qCiAJICogU2V0IHRoZSBjbGllbnQgZW5jb2RpbmcgaWYgcmVxdWVz dGVkLgogCSAqLwpAQCAtNTkxLDM3ICs2MzQsMTEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAlpZiAocXVvdGVfYWxsX2lkZW50aWZpZXJzKQogCQlleGVjdXRlQ29tbWFuZChjb25u LCAiU0VUIHF1b3RlX2FsbF9pZGVudGlmaWVycyA9IHRydWUiKTsKIAotCWZwcmludGYoT1BGLCAi LS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iKTsKLQlpZiAo dmVyYm9zZSkKKwlpZiAodmVyYm9zZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJ ZHVtcFRpbWVzdGFtcCgiU3RhcnRlZCBvbiIpOwogCi0JLyoKLQkgKiBFbnRlciByZXN0cmljdGVk IG1vZGUgdG8gYmxvY2sgYW55IHVuZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRzLiAgQQotCSAq IG1hbGljaW91cyBzb3VyY2UgbWlnaHQgdHJ5IHRvIGluamVjdCBhIHZhcmlldHkgb2YgdGhpbmdz IHZpYSBib2d1cwotCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHBy ZXZlbnQgc3VjaCBzb3VyY2VzIGZyb20KLQkgKiBhZmZlY3RpbmcgdGhlIGRlc3RpbmF0aW9uIGF0 IHJlc3RvcmUgdGltZSwgd2UgY2FuIGJsb2NrIHBzcWwKLQkgKiBtZXRhLWNvbW1hbmRzIHNvIHRo YXQgdGhlIGNsaWVudCBtYWNoaW5lIHRoYXQgcnVucyBwc3FsIHdpdGggdGhlIGR1bXAKLQkgKiBv dXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgotCSAqLwotCWZwcmludGYoT1BGLCAiXFxyZXN0cmlj dCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCS8qIGNyZWF0ZSBhIGFyY2hpdmUgZmlsZSBmb3Ig Z2xvYmFsIGNvbW1hbmRzLiAqLworCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCAhPSBh cmNoTnVsbCkKKwl7CisJCWNoYXIJZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKIAotCS8qCi0JICog V2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBu byBwdXJwb3NlCi0JICogb3RoZXIgdGhhbiB0byBicmVhayB0aGluZ3MgZm9yIGluc3RhbGxhdGlv bnMgd2l0aG91dCBhIHBvc3RncmVzCi0JICogZGF0YWJhc2UuICBFdmVyeXRoaW5nIHdlJ3JlIHJl c3RvcmluZyBoZXJlIGlzIGEgZ2xvYmFsLCBzbyB3aGljaGV2ZXIKLQkgKiBkYXRhYmFzZSB3ZSdy ZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgotCSAqLworCQkvKiBTZXQgZmls ZSBwYXRoIGZvciBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQlzbnByaW50ZihnbG9iYWxfcGF0 aCwgTUFYUEdQQVRILCAiJXMvdG9jLmdsbyIsIGZpbGVuYW1lKTsKKworCQkvKiBPcGVuIHRoZSBv dXRwdXQgZmlsZSAqLworCQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShnbG9iYWxfcGF0aCwgYXJjaEN1 c3RvbSwgY29tcHJlc3Npb25fc3BlYywKKwkJCQlkb3N5bmMsIGFyY2hNb2RlV3JpdGUsIE5VTEws IERBVEFfRElSX1NZTkNfTUVUSE9EX0ZTWU5DKTsKIAotCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRv IHdyaXRlIHRvIHRoZSB0YXJnZXQgY2x1c3RlciAqLwotCWZwcmludGYoT1BGLCAiU0VUIGRlZmF1 bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsKKwkJLyogTWFrZSBkdW1wIG9w dGlvbnMgYWNjZXNzaWJsZSByaWdodCBhd2F5ICovCisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQs ICZkb3B0LCBOVUxMKTsKKwkJKChBcmNoaXZlSGFuZGxlKilmb3V0KS0+Y29ubmVjdGlvbiA9IGNv bm47CisJCSgoQXJjaGl2ZUhhbmRsZSopZm91dCktPnB1YmxpYy5udW1Xb3JrZXJzID0gMTsKIAot CS8qIFJlcGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RkX3N0cmluZ3MgaW4gb3V0cHV0ICovCi0JZnBy aW50ZihPUEYsICJTRVQgY2xpZW50X2VuY29kaW5nID0gJyVzJztcbiIsCi0JCQlwZ19lbmNvZGlu Z190b19jaGFyKGVuY29kaW5nKSk7Ci0JZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9y bWluZ19zdHJpbmdzID0gJXM7XG4iLCBzdGRfc3RyaW5ncyk7Ci0JaWYgKHN0cmNtcChzdGRfc3Ry aW5ncywgIm9mZiIpID09IDApCi0JCWZwcmludGYoT1BGLCAiU0VUIGVzY2FwZV9zdHJpbmdfd2Fy bmluZyA9IG9mZjtcbiIpOwotCWZwcmludGYoT1BGLCAiXG4iKTsKKwkJLyogUmVnaXN0ZXIgdGhl IGNsZWFudXAgaG9vayAqLworCQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoZm91dCk7CisKKwkJLyog TGV0IHRoZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0byBiZSAqLworCQlmb3V0LT52ZXJib3Nl ID0gdmVyYm9zZTsKKworCQkvKgorCQkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sg dG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2Ugb2YKKwkJICogb3VyIG93biBtYWpv ciB2ZXJzaW9uLiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcGFsbC5jLikKKwkJ ICovCisJCWZvdXQtPm1pblJlbW90ZVZlcnNpb24gPSA5MDIwMDsKKwkJZm91dC0+bWF4UmVtb3Rl VmVyc2lvbiA9IChQR19WRVJTSU9OX05VTSAvIDEwMCkgKiAxMDAgKyA5OTsKKwkJZm91dC0+bnVt V29ya2VycyA9IDE7CisKKwkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUG9zdGdyZVNR TCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIsICJDT01NRU5UIik7CisKKwkJLyogZGVm YXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmYgKi8KKwkJeworCQkJUFFFeHBCdWZmZXIg cXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJcGdfbG9nX2luZm8oInNhdmluZyBkZWZh dWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZiIpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIo cXJ5LCAiU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuIik7CisJCQlj cmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAiREVGQVVMVF9UUkFOU0FDVElPTl9SRUFE X09OTFkiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKKwkJLyogZHVtcEVu Y29kaW5nOiBwdXQgdGhlIGNvcnJlY3QgZW5jb2RpbmcgaW50byB0aGUgYXJjaGl2ZSAqLworCQl7 CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCQkJY29uc3QgY2hh ciAqZW5jbmFtZSA9IHBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpOworCisJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cihxcnksICJTRVQgY2xpZW50X2VuY29kaW5nID0gIik7CisJCQlhcHBlbmRT dHJpbmdMaXRlcmFsQUgocXJ5LCBlbmNuYW1lLCBmb3V0KTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHFyeSwgIjtcbiIpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIGVuY29kaW5nID0gJXMi LCBlbmNuYW1lKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJFTkNPRElO RyIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKworCQkvKiBkdW1wU3RkU3Ry aW5nczogcHV0IHRoZSBjb3JyZWN0IGVzY2FwZSBzdHJpbmcgYmVoYXZpb3IgaW50byB0aGUgYXJj aGl2ZSAqLworCQl7CisJCQljb25zdCBjaGFyICpzdGRzdHJpbmdzID0gc3RkX3N0cmluZ3MgPyAi b24iIDogIm9mZiI7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwor CisJCQlwZ19sb2dfaW5mbygic2F2aW5nIFwic3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0g JXNcIiIsIHN0ZHN0cmluZ3MpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiU0VUIHN0YW5k YXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICclcyc7XG4iLAorCQkJCQlzdGRzdHJpbmdzKTsKKwkJ CWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJTVERTVFJJTkdTIik7CisJCQlkZXN0 cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCX0KKwllbHNlCisJeworCQlmcHJpbnRmKE9QRiwg Ii0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIik7CisKKwkJ LyoKKwkJICogRW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRvIGJsb2NrIGFueSB1bmV4cGVjdGVkIHBz cWwgbWV0YS1jb21tYW5kcy4gIEEKKwkJICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8g aW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJCSAqIHJlc3BvbnNlcyB0byBx dWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3VjaCBzb3VyY2VzIGZyb20KKwkJICog YWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUsIHdlIGNhbiBibG9jayBw c3FsCisJCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBy dW5zIHBzcWwgd2l0aCB0aGUgZHVtcAorCQkgKiBvdXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgor CQkgKi8KKwkJZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7 CisKKwkJLyoKKwkJICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1 dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCisJCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdz IGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcworCQkgKiBkYXRhYmFzZS4gIEV2 ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgor CQkgKiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgor CQkgKi8KKworCQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNs dXN0ZXIgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29u bHkgPSBvZmY7XG5cbiIpOworCisJCS8qIFJlcGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RkX3N0cmlu Z3MgaW4gb3V0cHV0ICovCisJCWZwcmludGYoT1BGLCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICcl cyc7XG4iLAorCQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpKTsKKwkJZnByaW50ZihP UEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXM7XG4iLCBzdGRfc3RyaW5n cyk7CisJCWlmIChzdHJjbXAoc3RkX3N0cmluZ3MsICJvZmYiKSA9PSAwKQorCQkJZnByaW50ZihP UEYsICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xuIik7CisJCWZwcmludGYoT1BG LCAiXG4iKTsKKwl9CiAKIAlpZiAoIWRhdGFfb25seSAmJiAhc3RhdGlzdGljc19vbmx5ICYmICFu b19zY2hlbWEpCiAJewpAQCAtNjMxLDcgKzc0Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAkJICogYW5kIHRhYmxlc3BhY2VzIG5ldmVyIGRlcGVuZCBvbiBlYWNoIG90aGVyLiAg Um9sZXMgY291bGQgaGF2ZQogCQkgKiBncmFudHMgdG8gZWFjaCBvdGhlciwgYnV0IERST1AgUk9M RSB3aWxsIGNsZWFuIHRob3NlIHVwIHNpbGVudGx5LgogCQkgKi8KLQkJaWYgKG91dHB1dF9jbGVh bikKKwkJaWYgKGRvcHQub3V0cHV0Q2xlYW4pCiAJCXsKIAkJCWlmICghZ2xvYmFsc19vbmx5ICYm ICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQogCQkJCWRyb3BEQnMoY29ubik7CkBA IC02NjUsMjcgKzc4MSw0MiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQlkdW1w VGFibGVzcGFjZXMoY29ubik7CiAJfQogCi0JLyoKLQkgKiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBq dXN0IGJlZm9yZSBkdW1waW5nIHRoZSBkYXRhYmFzZXMuICBwZ19kdW1wIHdpbGwKLQkgKiBoYW5k bGUgZW50ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRlLgotCSAqLwot CWZwcmludGYoT1BGLCAiXFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCXsKKwkJLyoKKwkJICogRXhpdCByZXN0cmlj dGVkIG1vZGUganVzdCBiZWZvcmUgZHVtcGluZyB0aGUgZGF0YWJhc2VzLiAgcGdfZHVtcCB3aWxs CisJCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUgYWdhaW4gYXMgYXBwcm9wcmlh dGUuCisJCSAqLworCQlmcHJpbnRmKE9QRiwgIlxcdW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmlj dF9rZXkpOworCX0KIAogCWlmICghZ2xvYmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJs ZXNwYWNlc19vbmx5KQotCQlkdW1wRGF0YWJhc2VzKGNvbm4pOwotCi0JUFFmaW5pc2goY29ubik7 CisJCWR1bXBEYXRhYmFzZXMoY29ubiwgZG9wdC5vdXRwdXRDbGVhbik7CiAKLQlpZiAodmVyYm9z ZSkKKwlpZiAodmVyYm9zZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZHVtcFRp bWVzdGFtcCgiQ29tcGxldGVkIG9uIik7Ci0JZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNR TCBkYXRhYmFzZSBjbHVzdGVyIGR1bXAgY29tcGxldGVcbi0tXG5cbiIpOwogCi0JaWYgKGZpbGVu YW1lKQorCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICIt LVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXAgY29tcGxldGVcbi0tXG5cbiIp OworCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJUmVzdG9yZU9wdGlv bnMgKnJvcHQ7CisKKwkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUG9zdGdyZVNRTCBk YXRhYmFzZSBjbHVzdGVyIGR1bXAgY29tcGxldGVcbi0tXG5cbiIsICJDT01NRU5UIik7CisJCXJv cHQgPSBOZXdSZXN0b3JlT3B0aW9ucygpOworCQlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9w dCwgcm9wdCk7CisKKwkJLyogTWFyayB3aGljaCBlbnRyaWVzIHNob3VsZCBiZSBvdXRwdXQgKi8K KwkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhmb3V0KTsKKwkJQ2xvc2VBcmNoaXZlKGZv dXQpOworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKIAl7CiAJCWZjbG9zZShPUEYpOwogCiAJCS8q IHN5bmMgdGhlIHJlc3VsdGluZyBmaWxlLCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAqLwotCQlpZiAo ZG9zeW5jKQorCQlpZiAoZG9zeW5jICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJ CQkodm9pZCkgZnN5bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKIAl9CiAKQEAgLTY5NiwxMiAr ODI3LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHN0YXRpYyB2b2lkCiBoZWxw KHZvaWQpCiB7Ci0JcHJpbnRmKF8oIiVzIGV4cG9ydHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNs dXN0ZXIgYXMgYW4gU1FMIHNjcmlwdC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMg ZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0IG9y IHRvIG90aGVyIGZvcm1hdHMuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdlOlxu IikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uXG4iKSwgcHJvZ25hbWUpOwogCiAJcHJp bnRmKF8oIlxuR2VuZXJhbCBvcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgIC1mLCAtLWZpbGU9 RklMRU5BTUUgICAgICAgICAgb3V0cHV0IGZpbGUgbmFtZVxuIikpOworCXByaW50ZihfKCIgIC1G LCAtLWZvcm1hdD1jfGR8dHxwICAgICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0IChjdXN0b20sIGRp cmVjdG9yeSwgdGFyLFxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxh aW4gdGV4dCAoZGVmYXVsdCkpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9zZSAgICAg ICAgICAgICAgICB2ZXJib3NlIG1vZGVcbiIpKTsKIAlwcmludGYoXygiICAtViwgLS12ZXJzaW9u ICAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIp KTsKIAlwcmludGYoXygiICAtLWxvY2std2FpdC10aW1lb3V0PVRJTUVPVVQgIGZhaWwgYWZ0ZXIg d2FpdGluZyBUSU1FT1VUIGZvciBhIHRhYmxlIGxvY2tcbiIpKTsKQEAgLTc3Niw2ICs5MDksNyBA QCBzdGF0aWMgdm9pZAogZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIHsKIAlQUUV4cEJ1ZmZlciBi dWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWlfcm9sbmFtZTsKIAlpbnQJ CQlpOwpAQCAtNzkyLDEyICs5MjYsMTcgQEAgZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAkJCQkJ CSAgIkZST00gJXMgIgogCQkJCQkJICAiT1JERVIgQlkgMSIsIHJvbGVfY2F0YWxvZyk7CiAKLQly ZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5kYXRhKTsKKwlyZXMgPSBleGVjdXRlUXVlcnko Y29ubiwgYnVmLT5kYXRhLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlfcm9sbmFtZSA9IFBR Zm51bWJlcihyZXMsICJyb2xuYW1lIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlm cHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIHJvbGVzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9s ZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBE cm9wIHJvbGVzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQ UW50dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTgwNSwxNSArOTQ0LDIxIEBAIGRyb3BSb2xlcyhQ R2Nvbm4gKmNvbm4pCiAKIAkJcm9sZW5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgaV9yb2xuYW1l KTsKIAotCQlmcHJpbnRmKE9QRiwgIkRST1AgUk9MRSAlcyVzO1xuIiwKKwkJYXBwZW5kUFFFeHBC dWZmZXIoZGVsUXJ5LCAiRFJPUCBST0xFICVzJXM7XG4iLAogCQkJCWlmX2V4aXN0cyA/ICJJRiBF WElTVFMgIiA6ICIiLAogCQkJCWZtdElkKHJvbGVuYW1lKSk7CisKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJ CWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShkZWxRcnktPmRhdGEsICJkcm9wUm9sZXMi KTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAKLQlm cHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJ CWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAvKgpAQCAtODc3LDcgKzEwMjIsNyBAQCBkdW1w Um9sZXMoUEdjb25uICpjb25uKQogCQkJCQkJICAiRlJPTSAlcyAiCiAJCQkJCQkgICJPUkRFUiBC WSAyIiwgcm9sZV9jYXRhbG9nKTsKIAotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRh dGEpOworCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDog ZmFsc2UpOwogCiAJaV9vaWQgPSBQUWZudW1iZXIocmVzLCAib2lkIik7CiAJaV9yb2xuYW1lID0g UFFmbnVtYmVyKHJlcywgInJvbG5hbWUiKTsKQEAgLTg5NSw3ICsxMDQwLDEyIEBAIGR1bXBSb2xl cyhQR2Nvbm4gKmNvbm4pCiAJaV9pc19jdXJyZW50X3VzZXIgPSBQUWZudW1iZXIocmVzLCAiaXNf Y3VycmVudF91c2VyIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9Q RiwgIi0tXG4tLSBSb2xlc1xuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlc1xuLS1cblxuIik7CisJCWVs c2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFJvbGVzXG4tLVxuXG4iLCAiQ09N TUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsK QEAgLTk5OSw3ICsxMTQ5LDEwIEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJICJS T0xFIiwgcm9sZW5hbWUsCiAJCQkJCQkJIGJ1Zik7CiAKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1 Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYo T1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnko YnVmLT5kYXRhLCAiZHVtcFJvbGVzIik7CiAJfQogCiAJLyoKQEAgLTEwMDcsMTUgKzExNjAsMTMg QEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkgKiBXZSBkbyBpdCB0aGlzIHdheSBiZWNhdXNl IGNvbmZpZyBzZXR0aW5ncyBmb3Igcm9sZXMgY291bGQgbWVudGlvbiB0aGUKIAkgKiBuYW1lcyBv ZiBvdGhlciByb2xlcy4KIAkgKi8KLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRm KE9QRiwgIlxuLS1cbi0tIFVzZXIgQ29uZmlndXJhdGlvbnNcbi0tXG4iKTsKLQogCWZvciAoaSA9 IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCQlkdW1wVXNlckNvbmZpZyhjb25uLCBQUWdl dHZhbHVlKHJlcywgaSwgaV9yb2xuYW1lKSk7CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRm KE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmlu dGYoT1BGLCAiXG5cbiIpOwogCiAJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiB9CkBAIC0xMDgy LDcgKzEyMzMsNyBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCQkgICJM RUZUIEpPSU4gJXMgdWcgb24gdWcub2lkID0gYS5ncmFudG9yICIKIAkJCQkJICAiV0hFUkUgTk9U ICh1ci5yb2xuYW1lIH4gJ15wZ18nIEFORCB1bS5yb2xuYW1lIH4gJ15wZ18nKSIKIAkJCQkJICAi T1JERVIgQlkgMSwyLDMiLCByb2xlX2NhdGFsb2csIHJvbGVfY2F0YWxvZywgcm9sZV9jYXRhbG9n KTsKLQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5kYXRhKTsKKwlyZXMgPSBleGVjdXRl UXVlcnkoY29ubiwgYnVmLT5kYXRhLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAlpX3JvbGUgPSBQ UWZudW1iZXIocmVzLCAicm9sZSIpOwogCWlfbWVtYmVyID0gUFFmbnVtYmVyKHJlcywgIm1lbWJl ciIpOwogCWlfZ3JhbnRvciA9IFBRZm51bWJlcihyZXMsICJncmFudG9yIik7CkBAIC0xMDk0LDcg KzEyNDUsMTIgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAlpX3NldF9vcHRp b24gPSBQUWZudW1iZXIocmVzLCAic2V0X29wdGlvbiIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMp ID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBtZW1iZXJzaGlwc1xuLS1cblxuIik7 CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwg Ii0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRlT25l QXJjaGl2ZUVudHJ5KCItLVxuLS0gUm9sZSBtZW1iZXJzaGlwc1xuLS1cblxuIiwgIkNPTU1FTlQi KTsKKwl9CiAKIAkvKgogCSAqIFdlIGNhbid0IGR1bXAgdGhlc2UgR1JBTlQgY29tbWFuZHMgaW4g YXJiaXRyYXJ5IG9yZGVyLCBiZWNhdXNlIGEgcm9sZQpAQCAtMTE3Myw2ICsxMzI5LDcgQEAgZHVt cFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAkJCQljaGFyCSAgICpncmFudG9yOwogCQkJ CWNoYXIJICAgKnNldF9vcHRpb24gPSAidHJ1ZSI7CiAJCQkJYm9vbAkJZm91bmQ7CisJCQkJUFFF eHBCdWZmZXIgY3JlYVFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkJCQkvKiBJZiB3ZSBh bHJlYWR5IGRpZCB0aGlzIGdyYW50LCBkb24ndCBkbyBpdCBhZ2Fpbi4gKi8KIAkJCQlpZiAoZG9u ZVtpIC0gc3RhcnRdKQpAQCAtMTIyOSw4ICsxMzg2LDggQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBH Y29ubiAqY29ubikKIAogCQkJCS8qIEdlbmVyYXRlIHRoZSBhY3R1YWwgR1JBTlQgc3RhdGVtZW50 LiAqLwogCQkJCXJlc2V0UFFFeHBCdWZmZXIob3B0YnVmKTsKLQkJCQlmcHJpbnRmKE9QRiwgIkdS QU5UICVzIiwgZm10SWQocm9sZSkpOwotCQkJCWZwcmludGYoT1BGLCAiIFRPICVzIiwgZm10SWQo bWVtYmVyKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIkdSQU5UICVzIiwgZm10 SWQocm9sZSkpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICIgVE8gJXMiLCBmbXRJ ZChtZW1iZXIpKTsKIAkJCQlpZiAoKmFkbWluX29wdGlvbiA9PSAndCcpCiAJCQkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKG9wdGJ1ZiwgIkFETUlOIE9QVElPTiIpOwogCQkJCWlmIChkdW1wX2dyYW50 X29wdGlvbnMpCkBAIC0xMjUxLDEwICsxNDA4LDE1IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nv bm4gKmNvbm4pCiAJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKG9wdGJ1ZiwgIlNFVCBGQUxTRSIp OwogCQkJCX0KIAkJCQlpZiAob3B0YnVmLT5kYXRhWzBdICE9ICdcMCcpCi0JCQkJCWZwcmludGYo T1BGLCAiIFdJVEggJXMiLCBvcHRidWYtPmRhdGEpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihj cmVhUXJ5LCAiIFdJVEggJXMiLCBvcHRidWYtPmRhdGEpOwogCQkJCWlmIChkdW1wX2dyYW50b3Jz KQotCQkJCQlmcHJpbnRmKE9QRiwgIiBHUkFOVEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOwot CQkJCWZwcmludGYoT1BGLCAiO1xuIik7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnks ICIgR1JBTlRFRCBCWSAlcyIsIGZtdElkKGdyYW50b3IpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZl cihjcmVhUXJ5LCAiO1xuIik7CisKKwkJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJCQkJCWZwcmludGYoT1BGLCAiJXMiLCBjcmVhUXJ5LT5kYXRhKTsKKwkJCQllbHNlCisJCQkJ CWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShjcmVhUXJ5LT5kYXRhLCAiZHVtcFJvbGVNZW1iZXJzaGlw Iik7CiAJCQl9CiAJCX0KIApAQCAtMTI2Niw3ICsxNDI4LDggQEAgZHVtcFJvbGVNZW1iZXJzaGlw KFBHY29ubiAqY29ubikKIAlQUWNsZWFyKHJlcyk7CiAJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7 CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51 bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTEyOTEsMTAgKzE0NTQsMTUg QEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJwYXJhY2wsICIKIAkJ CQkJICAgInBnX2NhdGFsb2cuYWNsZGVmYXVsdCgncCcsICIgQ3BwQXNTdHJpbmcyKEJPT1RTVFJB UF9TVVBFUlVTRVJJRCkgIikgQVMgYWNsZGVmYXVsdCAiCiAJCQkJCSAgICJGUk9NIHBnX2NhdGFs b2cucGdfcGFyYW1ldGVyX2FjbCAiCi0JCQkJCSAgICJPUkRFUiBCWSAxIik7CisJCQkJCSAgICJP UkRFUiBCWSAxIiwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykg PiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIHByaXZpbGVnZXMgb24gY29uZmlndXJh dGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25m aWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNo aXZlRW50cnkoIi0tXG4tLSBSb2xlIHByaXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXJzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBs ZXMocmVzKTsgaSsrKQogCXsKQEAgLTEzMTgsMTQgKzE0ODYsMTkgQEAgZHVtcFJvbGVHVUNQcml2 cyhQR2Nvbm4gKmNvbm4pCiAJCQlleGl0X25pY2VseSgxKTsKIAkJfQogCi0JCWZwcmludGYoT1BG LCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJ CQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJj aGl2ZUVudHJ5KGJ1Zi0+ZGF0YSwgImR1bXBSb2xlR1VDUHJpdnMiKTsKIAogCQlmcmVlKGZwYXJu YW1lKTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwot CWZwcmludGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMzM3LDYgKzE1MTAsNyBAQCBk cm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJ CQlpOworCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkvKgog CSAqIEdldCBhbGwgdGFibGVzcGFjZXMgZXhjZXB0IGJ1aWx0LWluIG9uZXMgKHdoaWNoIHdlIGFz c3VtZSBhcmUgbmFtZWQKQEAgLTEzNDUsMjMgKzE1MTksMzQgQEAgZHJvcFRhYmxlc3BhY2VzKFBH Y29ubiAqY29ubikKIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgIlNFTEVDVCBzcGNuYW1lICIK IAkJCQkJICAgIkZST00gcGdfY2F0YWxvZy5wZ190YWJsZXNwYWNlICIKIAkJCQkJICAgIldIRVJF IHNwY25hbWUgIX4gJ15wZ18nICIKLQkJCQkJICAgIk9SREVSIEJZIDEiKTsKKwkJCQkJICAgIk9S REVSIEJZIDEiLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+ IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0tXG5cbiIpOwor CXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIt LVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFy Y2hpdmVFbnRyeSgiLS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0tXG5cbiIsICJDT01NRU5UIik7 CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFy CSAgICpzcGNuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwogCi0JCWZwcmludGYoT1BGLCAi RFJPUCBUQUJMRVNQQUNFICVzJXM7XG4iLAorCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJE Uk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCiAJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDog IiIsCiAJCQkJZm10SWQoc3BjbmFtZSkpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRhdGEpOworCQllbHNlCisJCQlj cmVhdGVPbmVBcmNoaXZlRW50cnkoZGVsUXJ5LT5kYXRhLCAiZHJvcFRhYmxlc3BhY2VzIik7CiAJ fQogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogLyoK QEAgLTEzODUsMTAgKzE1NzAsMTUgQEAgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIAkJ CQkJICAgInBnX2NhdGFsb2cuc2hvYmpfZGVzY3JpcHRpb24ob2lkLCAncGdfdGFibGVzcGFjZScp ICIKIAkJCQkJICAgIkZST00gcGdfY2F0YWxvZy5wZ190YWJsZXNwYWNlICIKIAkJCQkJICAgIldI RVJFIHNwY25hbWUgIX4gJ15wZ18nICIKLQkJCQkJICAgIk9SREVSIEJZIDEiKTsKKwkJCQkJICAg Ik9SREVSIEJZIDEiLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMocmVz KSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKKwl7 CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1c bi0tIFRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVu dHJ5KCItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9y IChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtMTQ1NywxNCArMTY0Nywx OSBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkJCSAiVEFCTEVTUEFDRSIs IHNwY25hbWUsCiAJCQkJCQkJIGJ1Zik7CiAKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0 YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAi JXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoYnVmLT5k YXRhLCAiZHVtcFRhYmxlc3BhY2VzIik7CiAKIAkJZnJlZShmc3BjbmFtZSk7CiAJCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihidWYpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKLQlmcHJpbnRmKE9QRiwgIlxu XG4iKTsKKworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYs ICJcblxuIik7CiB9CiAKIApAQCAtMTQ4NSwxMCArMTY4MCwxNSBAQCBkcm9wREJzKFBHY29ubiAq Y29ubikKIAkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKIAkJCQkJICAgIkZST00gcGdfZGF0YWJh c2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAt MiAiCi0JCQkJCSAgICJPUkRFUiBCWSBkYXRuYW1lIik7CisJCQkJCSAgICJPUkRFUiBCWSBkYXRu YW1lIiwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQot CQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIGRhdGFiYXNlcyAoZXhjZXB0IHBvc3RncmVzIGFu ZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9z dGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNo aXZlRW50cnkoIi0tXG4tLSBEcm9wIGRhdGFiYXNlcyAoZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1w bGF0ZTEpXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50 dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTE1MDMsMTUgKzE3MDMsMjMgQEAgZHJvcERCcyhQR2Nv bm4gKmNvbm4pCiAJCQlzdHJjbXAoZGJuYW1lLCAidGVtcGxhdGUwIikgIT0gMCAmJgogCQkJc3Ry Y21wKGRibmFtZSwgInBvc3RncmVzIikgIT0gMCkKIAkJewotCQkJZnByaW50ZihPUEYsICJEUk9Q IERBVEFCQVNFICVzJXM7XG4iLAorCQkJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBC dWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBEQVRBQkFTRSAl cyVzO1xuIiwKIAkJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJCWZtdElk KGRibmFtZSkpOworCisJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJZnBy aW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCQllbHNlCisJCQkJY3JlYXRlT25lQXJj aGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgIkRST1BfREFUQUJBU0UiKTsKIAkJfQogCX0KIAogCVBR Y2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTUzMSwx NCArMTczOSwyNSBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVz ZXJuYW1lKQogCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGJ1ZiwgdXNlcm5hbWUsIGNvbm4pOwog CWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcpJyk7CiAKLQlyZXMgPSBleGVjdXRlUXVlcnko Y29ubiwgYnVmLT5kYXRhKTsKKwlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5kYXRhLCBm b3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCiAJewogCQlj aGFyCSAgICpzYW5pdGl6ZWQ7CiAKIAkJc2FuaXRpemVkID0gc2FuaXRpemVfbGluZSh1c2VybmFt ZSwgdHJ1ZSk7Ci0JCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIlc1wiXG4t LVxuXG4iLCBzYW5pdGl6ZWQpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBz YW5pdGl6ZWQpOworCQllbHNlCisJCXsKKwkJCVBRRXhwQnVmZmVyCXFyeSA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIlxuLS1cbi0tIFVzZXIgQ29u ZmlnIFwiJXNcIlxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRy eShxcnktPmRhdGEsICJDT01NRU5UIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJ fQorCiAJCWZyZWUoc2FuaXRpemVkKTsKIAl9CiAKQEAgLTE1NDgsNyArMTc2NywxMSBAQCBkdW1w VXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCQltYWtlQWx0 ZXJDb25maWdDb21tYW5kKGNvbm4sIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSwKIAkJCQkJCQkgICAi Uk9MRSIsIHVzZXJuYW1lLCBOVUxMLCBOVUxMLAogCQkJCQkJCSAgIGJ1Zik7Ci0JCWZwcmludGYo T1BGLCAiJXMiLCBidWYtPmRhdGEpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQljcmVhdGVP bmVBcmNoaXZlRW50cnkoYnVmLT5kYXRhLCAiZHVtcFVzZXJDb25maWciKTsKIAl9CiAKIAlQUWNs ZWFyKHJlcyk7CkBAIC0xNTk3LDcgKzE4MjAsNyBAQCBleHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBH Y29ubiAqY29ubiwKIAkJCWV4aXRfbmljZWx5KDEpOwogCQl9CiAKLQkJcmVzID0gZXhlY3V0ZVF1 ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsKKwkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5 LT5kYXRhLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBQUW50 dXBsZXMocmVzKTsgaSsrKQogCQl7CiAJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKG5hbWVz LCBQUWdldHZhbHVlKHJlcywgaSwgMCkpOwpAQCAtMTYxNCwxMCArMTgzNywxMyBAQCBleHBhbmRf ZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwKICAqIER1bXAgY29udGVudHMgb2YgZGF0YWJh c2VzLgogICovCiBzdGF0aWMgdm9pZAotZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCitkdW1w RGF0YWJhc2VzKFBHY29ubiAqY29ubiwgYm9vbCBvdXRwdXRfY2xlYW4pCiB7CiAJUEdyZXN1bHQg ICAqcmVzOwogCWludAkJCWk7CisJY2hhcgkJZGJfc3ViZGlyW01BWFBHUEFUSF07CisJY2hhcgkJ ZGJmaWxlcGF0aFtNQVhQR1BBVEhdOworCUZJTEUJCSptYXBfZmlsZSA9IE5VTEw7CiAKIAkvKgog CSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3ZSdkIGJl IHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNjMxLDE5ICsxODU3LDQ5IEBAIGR1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uKQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21lIGZhaWx1cmUgbW9kZSB3aXRoIC0t Y2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAgICJTRUxFQ1Qg ZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwgb2lkICIKIAkJCQkJICAgIkZST00g cGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5s aW1pdCAhPSAtMiAiCi0JCQkJCSAgICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAndGVtcGxhdGUxJyks IGRhdG5hbWUiKTsKKwkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwg ZGF0bmFtZSIsCisJCQkJCSAgIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1cGxl cyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsK Kwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAi LS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeSgiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CisKKwkvKgor CSAqIElmIGRpcmVjdG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGNyZWF0ZSBh IHN1YmRpcmVjdG9yeQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRh YmFzZSBkdW1wIGZpbGUgb3Igc3ViZGlyZWN0b3J5CisJICogd2lsbCBiZSBjcmVhdGVkIGluIHRo YXQgc3ViZGlyZWN0b3J5IGJ5IHBnX2R1bXAuCisJICovCisgICBpZiAoYXJjaER1bXBGb3JtYXQg IT0gYXJjaE51bGwpCisgICB7CisJICAgY2hhciAgICAgICAgbWFwX2ZpbGVfcGF0aFtNQVhQR1BB VEhdOworCisJICAgc25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMi LCBmaWxlbmFtZSk7CisKKwkgICAvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJh c2VzJyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCSAgIGlmIChta2RpcihkYl9zdWJk aXIsIHBnX2Rpcl9jcmVhdGVfbW9kZSkgIT0gMCkKKwkJICAgcGdfZmF0YWwoImNvdWxkIG5vdCBj cmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYl9zdWJkaXIpOworCisJICAgc25wcmludGYo bWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsKKworCSAg IC8qIENyZWF0ZSBhIG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCSAg IG1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1cpOworCSAgIGlmICgh bWFwX2ZpbGUpCisJCSAgIHBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0i LCBtYXBfZmlsZV9wYXRoKTsKKyAgIH0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVz KTsgaSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwog CQljaGFyCSAgICpzYW5pdGl6ZWQ7Ci0JCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOworCQljaGFy ICAgICAgICpvaWQgPSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CisJCWNvbnN0IGNoYXIgKmNyZWF0 ZV9vcHRzID0gIiI7CiAJCWludAkJCXJldDsKIAogCQkvKiBTa2lwIHRlbXBsYXRlMCwgZXZlbiBp ZiBpdCdzIG5vdCBtYXJrZWQgIWRhdGFsbG93Y29ubi4gKi8KQEAgLTE2NjAsNyArMTkxNiwxOCBA QCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0 YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKGRi bmFtZSwgdHJ1ZSk7Ci0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1w XG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4i LCBzYW5pdGl6ZWQpOworCQllbHNlCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIi0tXG4tLSBEYXRhYmFz ZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeShxcnktPmRhdGEsICJDT01NRU5UIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsK KwkJfQorCiAJCWZyZWUoc2FuaXRpemVkKTsKIAogCQkvKgpAQCAtMTY3NSwyNCArMTk0Miw0NiBA QCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJewogCQkJaWYgKG91dHB1dF9jbGVhbikK IAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKKwkJCS8qIFNpbmNlIHBnX2R1 bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJCWVsc2UgaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0 ICVzXG5cbiIsIGRibmFtZSk7CiAJCQllbHNlCiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsK LQkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBt dXN0ICovCi0JCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJ CQlQUUV4cEJ1ZmZlcglxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQkJYXBwZW5kUFFF eHBCdWZmZXIocXJ5LCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJY3JlYXRlT25l QXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTk5FQ1QiKTsKKwkJCQlkZXN0cm95UFFFeHBCdWZm ZXIocXJ5KTsKIAkJCX0KIAkJfQogCQllbHNlCiAJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7 CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBj cmVhdGVfb3B0cyk7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1 bXAsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5kYXQgZmls ZS4KKwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJeworCQkJaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwg TUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIi5kbXAiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQllbHNl IGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgs IE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIudGFyIiwgZGJfc3ViZGlyLCBvaWQpOworCQkJZWxz ZQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIiLCBk Yl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJvaWQgYW5k IGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwg b2lkLCBkYm5hbWUpOworCQl9CisKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29w dHMsIGRiZmlsZXBhdGgpOwogCQlpZiAocmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdfZHVtcCBm YWlsZWQgb24gZGF0YWJhc2UgXCIlc1wiLCBleGl0aW5nIiwgZGJuYW1lKTsKIAotCQlpZiAoZmls ZW5hbWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJ ewogCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQpA QCAtMTcwMSw2ICsxOTkwLDEwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl9CiAJ fQogCisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51 bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAgLTE3MTAs NyArMjAwMyw3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogICogUnVuIHBnX2R1bXAg b24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgogICovCiBzdGF0aWMgaW50Ci1ydW5Q Z0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKK3J1blBn RHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFyICpk YmZpbGUpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRh IGNtZDsKQEAgLTE3MTksMTcgKzIwMTIsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFt ZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVm KTsKIAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAi XCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3Jl YXRlX29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5k b2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMg aXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZpbGUgbmFtZSBhbmQgZHVt cAorCSAqIGZvcm1hdCB0byB0aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdldCBhcmNoaXZlIGR1bXAu CiAJICovCi0JaWYgKGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1G YSAiKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlwcmludGZQUUV4 cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzIC1mICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJcGdk dW1wb3B0cy0+ZGF0YSwgZGJmaWxlLCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hEaXJlY3RvcnkpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAt LWZvcm1hdD1kaXJlY3RvcnkgIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hD dXN0b20pCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20g Iik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigm Y21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIHBnZHVtcG9wdHMtPmRh dGEsIGNyZWF0ZV9vcHRzKTsKKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVz ZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCisJCSAqIGZvcm1hdC4KKwkJ ICovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZh ICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9 CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25z dHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE3NzIsNyArMjA4NCw3IEBAIGJ1aWxkU2hT ZWNMYWJlbHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmpl Y3RJZCwKIAlQR3Jlc3VsdCAgICpyZXM7CiAKIAlidWlsZFNoU2VjTGFiZWxRdWVyeShjYXRhbG9n X25hbWUsIG9iamVjdElkLCBzcWwpOwotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBzcWwtPmRh dGEpOworCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBzcWwtPmRhdGEsIGZvdXQgPyB0cnVlIDog ZmFsc2UpOwogCWVtaXRTaFNlY0xhYmVscyhjb25uLCByZXMsIGJ1ZmZlciwgb2JqdHlwZSwgb2Jq bmFtZSk7CiAKIAlQUWNsZWFyKHJlcyk7CkBAIC0xODc0LDMgKzIxODYsNjcgQEAgcmVhZF9kdW1w YWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRl cm4pCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIHBhcnNlRHVtcEZvcm1h dAorICoKKyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisgKi8KK3N0YXRpYyBB cmNoaXZlRm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCUFy Y2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQ7CisKKwlpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQs ICJjIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBn X3N0cmNhc2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBh cmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZCIpID09IDApCisJ CWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21w KGZvcm1hdCwgImRpcmVjdG9yeSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVj dG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInAiKSA9PSAwKQorCQlhcmNo RHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAi cGxhaW4iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBn X3N0cmNhc2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRh cjsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09IDApCisJCWFyY2hE dW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgb3V0 cHV0IGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9y IFwidFwiIiwKKwkJCQkgZm9ybWF0KTsKKworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30KKwor LyoKKyAqIGNyZWF0ZUR1bXBJZAorICoKKyAqIFRoaXMgd2lsbCByZXR1cm4gbmV4dCBsYXN0IHVz ZWQgb2lkLgorICovCitzdGF0aWMgaW50CitjcmVhdGVEdW1wSWQodm9pZCkKK3sKKwlyZXR1cm4g KytkdW1wSWRWYWw7Cit9CisKKy8qCisgKiBjcmVhdGVPbmVBcmNoaXZlRW50cnkKKyAqCisgKiBU aGlzIGNyZWF0ZXMgb25lIGFyY2hpdmUgZW50cnkgYmFzZWQgb24gZm9ybWF0LgorICovCitzdGF0 aWMgdm9pZAorY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBj aGFyICp0YWcpCit7CisJQ2F0YWxvZ0lkIG5pbENhdGFsb2dJZCA9IHswLCAwfTsKKwlBc3NlcnQo Zm91dCAhPSBOVUxMKTsKKworCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJbmlsQ2F0YWxvZ0lkLCAv KiBjYXRhbG9nIElEICovCisJCQljcmVhdGVEdW1wSWQoKSwgLyogZHVtcCBJRCAqLworCQkJQVJD SElWRV9PUFRTKC50YWcgPSB0YWcsCisJCQkJLmRlc2NyaXB0aW9uID0gdGFnLAorCQkJCS5zZWN0 aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkuY3JlYXRlU3RtdCA9IHF1ZXJ5KSk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX3Jlc3RvcmUuYwppbmRleCA4NGI4ZDQxMGM5ZS4uZjU5ODEzOTY1YmMgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jl c3RvcmUuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3Rv cmUgaXMgYW4gdXRpbGl0eSBleHRyYWN0aW5nIHBvc3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25z Ci0gKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wIHVzaW5nIHRoZSBh cmNoaXZlcgorICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC9wZ19k dW1wYWxsIHVzaW5nIHRoZSBhcmNoaXZlcgogICoJaW50ZXJmYWNlLgogICoKICAqCXBnX3Jlc3Rv cmUgd2lsbCByZWFkIHRoZSBiYWNrdXAgYXJjaGl2ZSBhbmQKQEAgLTQxLDEyICs0MSwxNiBAQAog I2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUg PHN5cy9zdGF0Lmg+CiAjaWZkZWYgSEFWRV9URVJNSU9TX0gKICNpbmNsdWRlIDx0ZXJtaW9zLmg+ CiAjZW5kaWYKIAorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb25uZWN0 ZGIuaCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25f dXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJm aWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgi CkBAIC01NCwxOCArNTgsNDQgQEAKIAogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJv Z25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmls ZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIGZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRp YyBpbnQJcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVz dG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCQkJCSBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRf ZGF0YSwgaW50IG51bSwKKwkJCQkJCQkJIGJvb2wgZ2xvYmFsc19vbmx5KTsKK3N0YXRpYyBpbnQg cmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQlSZXN0 b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMsCisJCWludCBudW0sIGJvb2wgZ2xvYmFs c19vbmx5KTsKK3N0YXRpYyBpbnQJcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGNvbnN0IGNoYXIgKmlu cHV0RmlsZVNwZWMsCisJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVz dG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFt ZXNfbGlzdF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQlTaW1wbGVQdHJMaXN0 ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRl X3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNv bnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgIFNpbXBsZVB0ckxpc3QgKmRibmFt ZV9vaWRfbGlzdCk7CisKK3N0YXRpYyBib29sIGRhdGFfb25seSA9IGZhbHNlOworCisvKgorICog U3RvcmVzIGEgZGF0YWJhc2UgT0lEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLgorICovCit0 eXBlZGVmIHN0cnVjdCBEYk9pZE5hbWUKK3sKKwlPaWQJCQlvaWQ7CisJY2hhcgkJc3RyW0ZMRVhJ QkxFX0FSUkFZX01FTUJFUl07IC8qIG51bGwtdGVybWluYXRlZCBzdHJpbmcgaGVyZSAqLworfSBE Yk9pZE5hbWU7CisKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0 b3JlT3B0aW9ucyAqb3B0czsKIAlpbnQJCQljOwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQlu dW1Xb3JrZXJzID0gMTsKLQlBcmNoaXZlICAgICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVj OwotCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7 CisJaW50CQkJbl9lcnJvcnMgPSAwOworCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNp bXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0 aWMgaW50CWRpc2FibGVfdHJpZ2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1 cml0eSA9IDA7CiAJc3RhdGljIGludAlpZl9leGlzdHMgPSAwOwpAQCAtODksNiArMTE5LDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAog CQl7ImNyZWF0ZSIsIDAsIE5VTEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2En fSwKKwkJeyJnbG9iYWxzLW9ubHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5V TEwsICdkJ30sCiAJCXsiZXhpdC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVk ZS1zY2hlbWEiLCAxLCBOVUxMLCAnTid9LApAQCAtMTQyLDYgKzE3Myw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCQl7InN0YXRpc3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3Rh dGlzdGljc19vbmx5LCAxfSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwg NH0sCiAJCXsicmVzdHJpY3Qta2V5IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAorCQl7 ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgN30sCiAKIAkJe05V TEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE3MCw3ICsyMDIsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJfQogCX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFy Z3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGls ZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46 T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7 CiAJCXN3aXRjaCAoYykKQEAgLTE5NywxMSArMjI5LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXRO YW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkv KiByZXN0b3JlIG9ubHkgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJCQlnbG9iYWxzX29ubHkg PSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcp ICE9IDApCiAJCQkJCW9wdHMtPmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJ CQkJYnJlYWs7Ci0KIAkJCWNhc2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMgKi8K IAkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJ CQkJCSAgUEdfTUFYX0pPQlMsCkBAIC0zMjEsNiArMzU2LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCW9wdHMtPnJlc3RyaWN0X2tleSA9IHBnX3N0cmR1cChvcHRhcmcpOwog CQkJCWJyZWFrOwogCisJCQljYXNlIDc6CQkJCS8qIGRhdGFiYXNlIHBhdHRlcm5zIHRvIHNraXAg Ki8KKwkJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBv cHRhcmcpOworCQkJCWJyZWFrOworCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFs cmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLwogCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkg XCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CkBAIC0zNDcs NiArMzg2LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3Bh cmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVuYW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlw Z19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZp ZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxz X29ubHkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlciB3aXRoICVzIiwKKwkJCQkiLS1leGNsdWRlLWRhdGFiYXNlIiwgIi1nLy0tZ2xvYmFscy1v bmx5Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBp bmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKwogCS8qIFNo b3VsZCBnZXQgYXQgbW9zdCBvbmUgb2YgLWQgYW5kIC1mLCBlbHNlIHVzZXIgaXMgY29uZnVzZWQg Ki8KIAlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCiAJewpAQCAtNDIwLDYgKzQ2NywxMCBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVz IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKIAkJCQkgIi0xLy0tc2luZ2xlLXRyYW5zYWN0aW9u IiwgIi0tdHJhbnNhY3Rpb24tc2l6ZSIpOwogCisJaWYgKGRhdGFfb25seSAmJiBnbG9iYWxzX29u bHkpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhl ciIsCisJCQkJIi1hLy0tZGF0YS1vbmx5IiwgIi1nLy0tZ2xvYmFscy1vbmx5Iik7CisKIAkvKgog CSAqIC1DIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggLTEsIGJlY2F1c2Ugd2UgY2FuJ3QgY3JlYXRl IGEgZGF0YWJhc2UgaW5zaWRlCiAJICogYSB0cmFuc2FjdGlvbiBibG9jay4KQEAgLTQ4NSw2ICs1 MzYsMTI4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9ybWF0 TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJZiB0b2MuZ2xvIGZpbGUgaXMgcHJlc2VudCwgdGhlbiBy ZXN0b3JlIGFsbCB0aGUKKwkgKiBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0LCBidXQgc2tpcCByZXN0 b3JpbmcgdGhvc2UgbWF0Y2hpbmcKKwkgKiAtLWV4Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybnMuCisJ ICovCisJaWYgKGlucHV0RmlsZVNwZWMgIT0gTlVMTCAmJgorCQkJKGZpbGVfZXhpc3RzX2luX2Rp cmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLmdsbyIpKSkKKwl7CisJCS8qCisJCSAqIENhbiBv bmx5IHVzZSAtLWxpc3Qgb3IgLS11c2UtbGlzdCBvcHRpb25zIHdpdGggYSBzaW5nbGUgZGF0YWJh c2UKKwkJICogZHVtcC4KKwkJICovCisJCWlmIChvcHRzLT50b2NTdW1tYXJ5KQorCQkJcGdfZmF0 YWwoIm9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNy ZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJCSItbC8tLWxpc3QiKTsKKwkJZWxzZSBpZiAob3B0 cy0+dG9jRmlsZSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hlbiBy ZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkiLUwvLS11 c2UtbGlzdCIpOworCisJCS8qCisJCSAqIFRvIHJlc3RvcmUgZnJvbSBhIHBnX2R1bXBhbGwgYXJj aGl2ZSwgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0aW9uCisJCSAqIG11c3QgYmUgc3BlY2lmaWVk IHVubGVzcyB3ZSBhcmUgb25seSByZXN0b3JpbmcgZ2xvYmFscy4KKwkJICovCisJCWlmICghZ2xv YmFsc19vbmx5ICYmIG9wdHMtPmNyZWF0ZURCICE9IDEpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigi b3B0aW9uICVzIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3Jl YXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJIi1DLy0tY3JlYXRlIik7CisJCQlwZ19sb2dfZXJy b3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25h bWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIkluZGl2aWR1YWwgZGF0YWJhc2VzIGNhbiBiZSBy ZXN0b3JlZCB1c2luZyB0aGVpciBzcGVjaWZpYyBhcmNoaXZlcy4iKTsKKwkJCWV4aXRfbmljZWx5 KDEpOworCQl9CisKKwkJLyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUu ICovCisJCWlmIChnbG9iYWxzX29ubHkpCisJCXsKKwkJCWNoYXIJZ2xvYmFsX3BhdGhbTUFYUEdQ QVRIXTsKKworCQkJLyogU2V0IHBhdGggZm9yIHRvYy5nbG8gZmlsZS4gKi8KKwkJCXNucHJpbnRm KGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZ2xvIiwgaW5wdXRGaWxlU3BlYyk7CisJ CQluX2Vycm9ycyA9IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51 bVdvcmtlcnMsIDAsIGdsb2JhbHNfb25seSk7CisKKwkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBy ZXN0b3Jpbmcgc2tpcHBlZCBiZWNhdXNlIG9wdGlvbiAlcyB3YXMgc3BlY2lmaWVkIiwKKwkJCQkJ Ii1nLy0tZ2xvYmFscy1vbmx5Iik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBOb3cgcmVzdG9y ZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQgKi8KKwkJCW5fZXJyb3JzID0gcmVzdG9y ZV9hbGxfZGF0YWJhc2VzKGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJ CQkJCQkJCSBvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVybiBs aXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJu cyk7CisJfQorCWVsc2UKKwl7CisJCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVM TCkKKwkJeworCQkJc2ltcGxlX3N0cmluZ19saXN0X2Rlc3Ryb3koJmRiX2V4Y2x1ZGVfcGF0dGVy bnMpOworCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9y aW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJIi0tZXhjbHVkZS1k YXRhYmFzZSIpOworCQl9CisKKwkJaWYgKGdsb2JhbHNfb25seSkKKwkJCXBnX2ZhdGFsKCJvcHRp b24gJXMgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQg YnkgcGdfZHVtcGFsbCIsCisJCQkJCSItZy8tLWdsb2JhbHMtb25seSIpOworCisJCS8qIFByb2Nl c3MgaWYgdG9jLmdsbyBmaWxlIGRvZXMgbm90IGV4aXN0LiAqLworCQluX2Vycm9ycyA9IHJlc3Rv cmVfb25lX2RhdGFiYXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsCisJCQkJbnVtV29ya2VycywgZmFs c2UsIDAsIGdsb2JhbHNfb25seSk7CisJfQorCisJLyogRG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9m IGlnbm9yZWQgZXJyb3JzIGR1cmluZyByZXN0b3JlLiAqLworCWlmIChuX2Vycm9ycykKKwl7CisJ CXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3JlOiAlZCIsIG5fZXJyb3Jz KTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXN0b3JlX2ds b2JhbF9vYmplY3RzCisgKgorICogVGhpcyByZXN0b3JlIGFsbCBnbG9iYWwgb2JqZWN0cy4KKyAq CisgKiBJZiBnbG9iYWxzX29ubHkgaXMgc2V0LCB0aGVuIHNraXAgRFJPUCBEQVRBQkFTRSBjb21t YW5kcyBmcm9tIHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQgcmVzdG9yZV9nbG9iYWxfb2JqZWN0 cyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJaW50 IG51bVdvcmtlcnMsIGludCBudW0sIGJvb2wgZ2xvYmFsc19vbmx5KQoreworCWludAluZXJyb3Ig PSAwOworCWludAlmb3JtYXQgPSBvcHRzLT5mb3JtYXQ7CisKKwkvKiBTZXQgZm9ybWF0IGFzIGN1 c3RvbSBzbyB0aGF0IHRvYy5nbG8gZmlsZSBjYW4gYmUgcmVhZC4gKi8KKwlvcHRzLT5mb3JtYXQg PSBhcmNoQ3VzdG9tOworCisJaWYgKCFkYXRhX29ubHkpCisJCW5lcnJvciA9IHJlc3RvcmVfb25l X2RhdGFiYXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsCisJCQkJZmFsc2UsIG51 bSwgZ2xvYmFsc19vbmx5KTsKKworCS8qIFJlc2V0IGZvcm1hdCB2YWx1ZS4gKi8KKwlvcHRzLT5m b3JtYXQgPSBmb3JtYXQ7CisKKwlyZXR1cm4gbmVycm9yOworfQorCisvKgorICogcmVzdG9yZV9v bmVfZGF0YWJhc2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcg dG9jLmRhdCBmaWxlLgorICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUg ZG9pbmcgcmVzdG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29u c3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCSBpbnQg bnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSwgYm9vbCBnbG9iYWxzX29ubHkp Cit7CisJQXJjaGl2ZSAgICAqQUg7CisJaW50CQkJbl9lcnJvcnM7CisKIAlBSCA9IE9wZW5BcmNo aXZlKGlucHV0RmlsZVNwZWMsIG9wdHMtPmZvcm1hdCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhB SCwgTlVMTCwgb3B0cyk7CkBAIC00OTIsOSArNjY1LDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCS8qCiAJICogV2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24geWV0IGJ1dCB0aGF0 IGRvZXNuJ3QgbWF0dGVyLiBUaGUgY29ubmVjdGlvbgogCSAqIGlzIGluaXRpYWxpemVkIHRvIE5V TEwgYW5kIGlmIHdlIHRlcm1pbmF0ZSB0aHJvdWdoIGV4aXRfbmljZWx5KCkgd2hpbGUKLQkgKiBp dCdzIHN0aWxsIE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9w LgorCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJl IGEgbm8tb3AuIElmIHdlIGFyZQorCSAqIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRo ZW4gb25seSB1cGRhdGUgQVggaGFuZGxlIGZvciBjbGVhbnVwIGFzCisJICogdGhlIHByZXZpb3Vz IGVudHJ5IHdhcyBhbHJlYWR5IGluIHRoZSBhcnJheSBhbmQgd2UgaGFkIGNsb3NlZCBwcmV2aW91 cworCSAqIGNvbm5lY3Rpb24sIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgYXJyYXkgc2xvdC4KIAkg Ki8KLQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWlmICghYXBwZW5kX2RhdGEgfHwgbnVt ID09IDApCisJCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJZWxzZQorCQlyZXBsYWNlX29u X2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CiAKIAkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93 IG5vaXN5IHRvIGJlICovCiAJQUgtPnZlcmJvc2UgPSBvcHRzLT52ZXJib3NlOwpAQCAtNTE0LDI1 ICs2OTMsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZWxzZQogCXsKIAkJUHJv Y2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJlc3RvcmVBcmNoaXZlKEFIKTsKKwkJ UmVzdG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRhLCBnbG9iYWxzX29ubHkpOwogCX0KIAotCS8q IGRvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwotCWlmIChBSC0+bl9l cnJvcnMpCi0JCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3JlOiAlZCIs IEFILT5uX2Vycm9ycyk7CisJbl9lcnJvcnMgPSBBSC0+bl9lcnJvcnM7CiAKIAkvKiBBSCBtYXkg YmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwotCWV4aXRfY29kZSA9IEFILT5uX2Vycm9ycyA/ IDEgOiAwOwotCiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBleGl0X2NvZGU7CisJcmV0 dXJuIG5fZXJyb3JzOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25h bWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBmcm9t IGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50 ZihfKCIlcyByZXN0b3JlcyBQb3N0Z3JlU1FMIGRhdGFiYXNlcyBmcm9tIGFyY2hpdmVzIGNyZWF0 ZWQgYnkgcGdfZHVtcCBvciBwZ19kdW1wYWxsLlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50Zihf KCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLiBbRklMRV1cbiIpLCBw cm9nbmFtZSk7CiAKQEAgLTU1MCw2ICs3MjUsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFt ZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAgICAgICAgICAgICAgIGNsZWFuIChkcm9w KSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAg LUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIHRhcmdldCBkYXRhYmFzZVxu IikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQtb24tZXJyb3IgICAgICAgICAgZXhpdCBvbiBl cnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikpOworCXByaW50ZihfKCIgIC1nLCAtLWds b2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRh YmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1pbmRleD1OQU1FICAgICAgICAgICAgIHJl c3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYoXygiICAtaiwgLS1qb2JzPU5VTSAgICAg ICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9icyB0byByZXN0b3JlXG4iKSk7CiAJ cHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5BTUUgICAgICB1c2UgdGFibGUgb2YgY29u dGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC01NjYsNiArNzQyLDcgQEAgdXNhZ2UoY29u c3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLTEsIC0tc2luZ2xlLXRyYW5zYWN0aW9u ICAgICByZXN0b3JlIGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4iKSk7CiAJcHJpbnRmKF8oIiAg LS1kaXNhYmxlLXRyaWdnZXJzICAgICAgICAgICBkaXNhYmxlIHRyaWdnZXJzIGR1cmluZyBkYXRh LW9ubHkgcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC0tZW5hYmxlLXJvdy1zZWN1cml0eSAg ICAgICAgZW5hYmxlIHJvdyBzZWN1cml0eVxuIikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1k YXRhYmFzZT1QQVRURVJOICAgZG8gbm90IHJlc3RvcmUgdGhlIHNwZWNpZmllZCBkYXRhYmFzZShz KVxuIikpOwogCXByaW50ZihfKCIgIC0tZmlsdGVyPUZJTEVOQU1FICAgICAgICAgICAgcmVzdG9y ZSBvciBza2lwIG9iamVjdHMgYmFzZWQgb24gZXhwcmVzc2lvbnNcbiIKIAkJCSAiICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGluIEZJTEVOQU1FXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1p Zi1leGlzdHMgICAgICAgICAgICAgICAgICB1c2UgSUYgRVhJU1RTIHdoZW4gZHJvcHBpbmcgb2Jq ZWN0c1xuIikpOwpAQCAtNjAxLDggKzc3OCw4IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1l KQogCXByaW50ZihfKCIgIC0tcm9sZT1ST0xFTkFNRSAgICAgICAgICBkbyBTRVQgUk9MRSBiZWZv cmUgcmVzdG9yZVxuIikpOwogCiAJcHJpbnRmKF8oIlxuIgotCQkJICJUaGUgb3B0aW9ucyAtSSwg LW4sIC1OLCAtUCwgLXQsIC1ULCBhbmQgLS1zZWN0aW9uIGNhbiBiZSBjb21iaW5lZCBhbmQgc3Bl Y2lmaWVkXG4iCi0JCQkgIm11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3Rz LlxuIikpOworCQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1ULCAtLXNlY3Rp b24sIGFuZCAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlXG4iCisJCQkgImNvbWJpbmVkIGFuZCBz cGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMuXG4iKSk7 CiAJcHJpbnRmKF8oIlxuSWYgbm8gaW5wdXQgZmlsZSBuYW1lIGlzIHN1cHBsaWVkLCB0aGVuIHN0 YW5kYXJkIGlucHV0IGlzIHVzZWQuXG5cbiIpKTsKIAlwcmludGYoXygiUmVwb3J0IGJ1Z3MgdG8g PCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CiAJcHJpbnRmKF8oIiVzIGhvbWUgcGFnZTog PCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOwpAQCAtNzA3LDMgKzg4NCw0MDcg QEAgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRp b25zICpvcHRzKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBmaWxlX2V4 aXN0c19pbl9kaXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgZXhpc3Rz IGluIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBib29sCitmaWxlX2V4aXN0c19p bl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlz dHJ1Y3Qgc3RhdCBzdDsKKwljaGFyCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50Zihi dWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlw Z19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1 cm4gKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8q CisgKiBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUKKyAqCisgKiBUaGlzIHdpbGwgbWFyayBm b3Igc2tpcHBpbmcgYW55IGVudHJpZXMgZnJvbSBkYm5hbWVfb2lkX2xpc3QgdGhhdCBwYXR0ZXJu IG1hdGNoIGFuCisgKiBlbnRyeSBpbiB0aGUgZGJfZXhjbHVkZV9wYXR0ZXJucyBsaXN0LgorICoK KyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXRhYmFzZSB0byBiZSByZXN0b3JlZC4KKyAqCisg Ki8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4s CisJCQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCVNpbXBsZVN0 cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKK3sKKwlpbnQJCQljb3VudF9kYiA9IDA7CisJ UFFFeHBCdWZmZXIgcXVlcnk7CisJUEdyZXN1bHQgICAqcmVzOworCisJcXVlcnkgPSBjcmVhdGVQ UUV4cEJ1ZmZlcigpOworCisJaWYgKCFjb25uICYmIGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAh PSBOVUxMKQorCQlwZ19sb2dfaW5mbygiY29uc2lkZXJpbmcgUEFUVEVSTiBhcyBOQU1FIGZvciAt LWV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uIGFzIG5vIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2hpbGUg ZG9pbmcgcGdfcmVzdG9yZSIpOworCisJLyoKKwkgKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRi bmFtZXMgYW5kIGlmIHNwZWNpZmllZCB0byBza2lwIHJlc3RvcmluZywgdGhlbgorCSAqIHJlbW92 ZSBkYm5hbWUgZnJvbSBsaXN0LgorCSAqLworCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2Nl bGwgPSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2Vs bC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9j ZWxsLT5wdHI7CisJCWJvb2wJCXNraXBfZGJfcmVzdG9yZSA9IGZhbHNlOworCQlQUUV4cEJ1ZmZl ciBkYl9saXQgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCWFwcGVuZFN0cmluZ0xpdGVyYWxD b25uKGRiX2xpdCwgZGJpZG5hbWUtPnN0ciwgY29ubik7CisKKwkJZm9yIChTaW1wbGVTdHJpbmdM aXN0Q2VsbCAqcGF0X2NlbGwgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IHBhdF9jZWxsOyBw YXRfY2VsbCA9IHBhdF9jZWxsLT5uZXh0KQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlcmUgaXMg YW4gZXhhY3QgbWF0Y2ggdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHRyeSBhIHBhdHRlcm4KKwkJCSAq IG1hdGNoCisJCQkgKi8KKwkJCWlmIChwZ19zdHJjYXNlY21wKGRiaWRuYW1lLT5zdHIsIHBhdF9j ZWxsLT52YWwpID09IDApCisJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCS8qIE90aGVy d2lzZSwgdHJ5IGEgcGF0dGVybiBtYXRjaCBpZiB0aGVyZSBpcyBhIGNvbm5lY3Rpb24gKi8KKwkJ CWVsc2UgaWYgKGNvbm4pCisJCQl7CisJCQkJaW50CQkJZG90Y250OworCisJCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIocXVlcnksICJTRUxFQ1QgMSAiKTsKKwkJCQlwcm9jZXNzU1FMTmFtZVBhdHRl cm4oY29ubiwgcXVlcnksIHBhdF9jZWxsLT52YWwsIGZhbHNlLAorCQkJCQkJCQkJICBmYWxzZSwg TlVMTCwgZGJfbGl0LT5kYXRhLAorCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250 KTsKKworCQkJCWlmIChkb3RjbnQgPiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXBy b3BlciBxdWFsaWZpZWQgbmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJ CQkgZGJpZG5hbWUtPnN0cik7CisJCQkJCVBRZmluaXNoKGNvbm4pOworCQkJCQlleGl0X25pY2Vs eSgxKTsKKwkJCQl9CisKKwkJCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEs IGZhbHNlKTsKKworCQkJCWlmICgoUFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19UVVBMRVNf T0spICYmIFBRbnR1cGxlcyhyZXMpKQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1 ZTsKKwkJCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIG5hbWUgXCIlc1wiIG1hdGNoZXMgZXhjbHVk ZSBwYXR0ZXJuIFwiJXNcIiIsIGRiaWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwpOworCQkJCX0K KworCQkJCVBRY2xlYXIocmVzKTsKKwkJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCX0K KworCQkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJCQlicmVhazsKKwkJfQorCisJCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihkYl9saXQpOworCisJCS8qCisJCSAqIE1hcmsgZGIgdG8gYmUgc2tpcHBlZCBv ciBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgb2YgZGJzIHRvIGJlCisJCSAqIHJlc3RvcmVkCisJCSAq LworCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQl7CisJCQlwZ19sb2dfaW5mbygiZXhjbHVkaW5n IGRhdGFiYXNlIFwiJXNcIiIsIGRiaWRuYW1lLT5zdHIpOworCQkJZGJpZG5hbWUtPm9pZCA9IElu dmFsaWRPaWQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQljb3VudF9kYisrOworCQl9CisJfQorCisJ ZGVzdHJveVBRRXhwQnVmZmVyKHF1ZXJ5KTsKKworCXJldHVybiBjb3VudF9kYjsKK30KKworLyoK KyAqIGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBm aWxlIGFuZCByZWFkIGxpbmUgYnkgbGluZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRh YmFzZQorICogbmFtZXMgYW5kIGNvcnJlc3BvbmRpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMs IHRvdGFsIG51bWJlciBvZiBkYXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0 YXRpYyBpbnQKK2dldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1w ZGlycGF0aCwgU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0KQoreworCVN0cmluZ0luZm9E YXRhIGxpbmVidWY7CisJRklMRQkgICAqcGZpbGU7CisJY2hhcgkJbWFwX2ZpbGVfcGF0aFtNQVhQ R1BBVEhdOworCWludAkJCWNvdW50ID0gMDsKKworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBubyBt YXAuZGF0IGZpbGUgaW4gZHVtcCwgdGhlbiByZXR1cm4gZnJvbSBoZXJlIGFzCisJICogdGhlcmUg aXMgbm8gZGF0YWJhc2UgdG8gcmVzdG9yZS4KKwkgKi8KKwlpZiAoIWZpbGVfZXhpc3RzX2luX2Rp cmVjdG9yeShkdW1wZGlycGF0aCwgIm1hcC5kYXQiKSkKKwl7CisJCXBnX2xvZ19pbmZvKCJkYXRh YmFzZSByZXN0b3JpbmcgaXMgc2tpcHBlZCBiZWNhdXNlIGZpbGUgXCIlc1wiIGRvZXMgbm90IGV4 aXN0IGluIGRpcmVjdG9yeSBcIiVzXCIiLCAibWFwLmRhdCIsIGR1bXBkaXJwYXRoKTsKKwkJcmV0 dXJuIDA7CisJfQorCisJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFw LmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8qIE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxl ID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09IE5V TEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBtYXBfZmls ZV9wYXRoKTsKKworCWluaXRTdHJpbmdJbmZvKCZsaW5lYnVmKTsKKworCS8qIEFwcGVuZCBhbGwg dGhlIGRibmFtZS9kYl9vaWQgY29tYmluYXRpb25zIHRvIHRoZSBsaXN0LiAqLworCXdoaWxlIChw Z19nZXRfbGluZV9idWYocGZpbGUsICZsaW5lYnVmKSkKKwl7CisJCU9pZAkJCWRiX29pZCA9IElu dmFsaWRPaWQ7CisJCWNoYXIJICAgKmRibmFtZTsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWU7CisJ CWludAkJCW5hbWVsZW47CisJCWNoYXIJICAgKnAgPSBsaW5lYnVmLmRhdGE7CisKKwkJLyogRXh0 cmFjdCBkYm9pZC4gKi8KKwkJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpICpwKSkKKwkJ CXArKzsKKwkJaWYgKHAgPiBsaW5lYnVmLmRhdGEgJiYgKnAgPT0gJyAnKQorCQl7CisJCQlzc2Nh bmYobGluZWJ1Zi5kYXRhLCAiJXUiLCAmZGJfb2lkKTsKKwkJCXArKzsKKwkJfQorCisJCS8qIGRi bmFtZSBpcyB0aGUgcmVzdCBvZiB0aGUgbGluZSAqLworCQlkYm5hbWUgPSBwOworCQluYW1lbGVu ID0gc3RybGVuKGRibmFtZSk7CisKKwkJLyogUmVwb3J0IGVycm9yIGFuZCBleGl0IGlmIHRoZSBm aWxlIGhhcyBhbnkgY29ycnVwdGVkIGRhdGEuICovCisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQp IHx8IG5hbWVsZW4gPD0gMSkKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGVudHJ5IGluIGZpbGUgXCIl c1wiIG9uIGxpbmUgJWQiLCBtYXBfZmlsZV9wYXRoLAorCQkJCQkgY291bnQgKyAxKTsKKworCQlw Z19sb2dfaW5mbygiZm91bmQgZGF0YWJhc2UgXCIlc1wiIChPSUQ6ICV1KSBpbiBmaWxlIFwiJXNc IiIsCisJCQkJCWRibmFtZSwgZGJfb2lkLCBtYXBfZmlsZV9wYXRoKTsKKworCQlkYmlkbmFtZSA9 IHBnX21hbGxvYyhvZmZzZXRvZihEYk9pZE5hbWUsIHN0cikgKyBuYW1lbGVuICsgMSk7CisJCWRi aWRuYW1lLT5vaWQgPSBkYl9vaWQ7CisJCXN0cmxjcHkoZGJpZG5hbWUtPnN0ciwgZGJuYW1lLCBu YW1lbGVuKTsKKworCQlzaW1wbGVfcHRyX2xpc3RfYXBwZW5kKGRibmFtZV9vaWRfbGlzdCwgZGJp ZG5hbWUpOworCQljb3VudCsrOworCX0KKworCS8qIENsb3NlIG1hcC5kYXQgZmlsZS4gKi8KKwlm Y2xvc2UocGZpbGUpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogcmVzdG9yZV9hbGxf ZGF0YWJhc2VzCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgZGF0YWJhc2VzIHRob3NlIGR1bXBz IGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFzZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBp bmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVzdG9yaW5nIGZvciBkYXRhYmFzZXMgdGhhdCBh cmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uLgorICoKKyAqIHJl dHVybnMsIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVzdG9yZS4KKyAqLworc3RhdGlj IGludAorcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsCisJ CQkJCSAgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9u cyAqb3B0cywKKwkJCQkJICBpbnQgbnVtV29ya2VycykKK3sKKwlTaW1wbGVQdHJMaXN0IGRibmFt ZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxMfTsKKwlpbnQJCQludW1fZGJfcmVzdG9yZSA9IDA7CisJ aW50CQkJbnVtX3RvdGFsX2RiOworCWludAkJCW5fZXJyb3JzX3RvdGFsOworCWNoYXIJICAgKmNv bm5lY3RlZF9kYiA9IE5VTEw7CisJYm9vbAkJZHVtcERhdGEgPSBvcHRzLT5kdW1wRGF0YTsKKwli b29sCQlkdW1wU2NoZW1hID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlib29sCQlkdW1wU3RhdGlzdGlj cyA9IG9wdHMtPmR1bXBTY2hlbWE7CisJUEdjb25uICpjb25uID0gTlVMTDsKKwljaGFyCQlnbG9i YWxfcGF0aFtNQVhQR1BBVEhdOworCisJLyogU2V0IHBhdGggZm9yIHRvYy5nbG8gZmlsZS4gKi8K KwlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLmdsbyIsIGlucHV0Rmls ZVNwZWMpOworCisJLyogU2F2ZSBkYiBuYW1lIHRvIHJldXNlIGl0IGZvciBhbGwgdGhlIGRhdGFi YXNlLiAqLworCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJY29ubmVjdGVkX2RiID0gb3B0 cy0+Y3BhcmFtcy5kYm5hbWU7CisKKwludW1fdG90YWxfZGIgPSBnZXRfZGJuYW1lX29pZF9saXN0 X2Zyb21fbWZpbGUoaW5wdXRGaWxlU3BlYywgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKiBJZiBt YXAuZGF0IGhhcyBubyBlbnRyaWVzLCByZXR1cm4gYWZ0ZXIgcHJvY2Vzc2luZyBnbG9iYWwgY29t bWFuZHMuICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwpCisJCXJldHVybiBy ZXN0b3JlX2dsb2JhbF9vYmplY3RzKGdsb2JhbF9wYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCAwLCBm YWxzZSk7CisKKwlwZ19sb2dfaW5mbyhuZ2V0dGV4dCgiZm91bmQgJWQgZGF0YWJhc2UgbmFtZSBp biBcIiVzXCIiLAorCQkJCQkJICJmb3VuZCAlZCBkYXRhYmFzZSBuYW1lcyBpbiBcIiVzXCIiLAor CQkJCQkJIG51bV90b3RhbF9kYiksCisJCQkJbnVtX3RvdGFsX2RiLCAibWFwLmRhdCIpOworCisJ LyoKKwkgKiBJZiBleGNsdWRlLXBhdHRlcm5zIGlzIGdpdmVuLCB0aGVuIGNvbm5lY3QgdG8gdGhl IGRhdGFiYXNlIHRvIHByb2Nlc3MKKwkgKiBpdC4KKwkgKi8KKwlpZiAoZGJfZXhjbHVkZV9wYXR0 ZXJucy5oZWFkICE9IE5VTEwpCisJeworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsK KwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9w dHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3Bh cmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCWlmICghY29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQg bm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOwor CQl9CisKKwkJaWYgKCFjb25uKQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5l Y3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgInBvc3RncmVzIik7CisKKwkJCWNvbm4gPSBDb25uZWN0 RGF0YWJhc2UoInBvc3RncmVzIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCW9w dHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwK KwkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJLyog VHJ5IHdpdGggdGVtcGxhdGUxLiAqLworCQkJaWYgKCFjb25uKQorCQkJeworCQkJCXBnX2xvZ19p bmZvKCJ0cnlpbmcgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAidGVtcGxhdGUxIik7 CisKKwkJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5j cGFyYW1zLnBnaG9zdCwKKwkJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1z LnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIGZpbHRlciB0aGUgZGIg bGlzdCBhY2NvcmRpbmcgdG8gdGhlIGV4Y2x1ZGUgcGF0dGVybnMKKwkgKi8KKwludW1fZGJfcmVz dG9yZSA9IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0 LAorCQkJCQkJCQkJCQkJIGRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRi IGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8K KwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7CisKKwkvKiBPcGVuIHRvYy5kYXQgZmlsZSBh bmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCW5fZXJy b3JzX3RvdGFsID0gIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51 bVdvcmtlcnMsIDAsIGZhbHNlKTsKKworCS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVz dG9yZWQuICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwgfHwgbnVtX2RiX3Jl c3RvcmUgPT0gMCkKKwl7CisJCXBnX2xvZ19pbmZvKG5nZXR0ZXh0KCJubyBkYXRhYmFzZSBuZWVk cyByZXN0b3Jpbmcgb3V0IG9mICVkIGRhdGFiYXNlIiwKKwkJCQkJCQkgIm5vIGRhdGFiYXNlIG5l ZWRzIHJlc3RvcmluZyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX3RvdGFsX2RiKSwKKwkJCQkJ bnVtX3RvdGFsX2RiKTsKKwkJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworCX0KKworCXBnX2xvZ19p bmZvKCJuZWVkIHRvIHJlc3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBu dW1fZGJfcmVzdG9yZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qCisJICogV2UgaGF2ZSBhIGxpc3Qg b2YgZGF0YWJhc2VzIHRvIHJlc3RvcmUgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUKKwkgKiBleGNsdWRl LWRhdGFiYXNlIHN3aXRjaChlcykuICBOb3cgd2UgY2FuIHJlc3RvcmUgdGhlbSBvbmUgYnkgb25l LgorCSAqLworCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2NlbGwgPSBkYm5hbWVfb2lkX2xp c3QuaGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwgPSBkYl9jZWxsLT5uZXh0KQorCXsKKwkJRGJP aWROYW1lICAqZGJpZG5hbWUgPSAoRGJPaWROYW1lICopIGRiX2NlbGwtPnB0cjsKKwkJY2hhcgkJ c3ViZGlycGF0aFtNQVhQR1BBVEhdOworCQljaGFyCQlzdWJkaXJkYnBhdGhbTUFYUEdQQVRIXTsK KwkJY2hhcgkJZGJmaWxlbmFtZVtNQVhQR1BBVEhdOworCQlpbnQJCQluX2Vycm9yczsKKworCQkv KiBpZ25vcmUgZGJzIG1hcmtlZCBmb3Igc2tpcHBpbmcgKi8KKwkJaWYgKGRiaWRuYW1lLT5vaWQg PT0gSW52YWxpZE9pZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVz ZXQgb3ZlcnJpZGVfZGJuYW1lIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcmVzdG9yZWQKKwkJICog aW50byBhbiBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UuICh1c2VkIHdpdGggLWQvLS1kYm5hbWUg b3B0aW9uKQorCQkgKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKQorCQl7 CisJCQlwZnJlZShvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSk7CisJCQlvcHRzLT5jcGFy YW1zLm92ZXJyaWRlX2RibmFtZSA9IE5VTEw7CisJCX0KKworCQlzbnByaW50ZihzdWJkaXJkYnBh dGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGlucHV0RmlsZVNwZWMpOworCisJCS8qCisJ CSAqIExvb2sgZm9yIHRoZSBkYXRhYmFzZSBkdW1wIGZpbGUvZGlyLiBJZiB0aGVyZSBpcyBhbiB7 b2lkfS50YXIgb3IKKwkJICoge29pZH0uZG1wIGZpbGUsIHVzZSBpdC4gT3RoZXJ3aXNlIHRyeSB0 byB1c2UgYSBkaXJlY3RvcnkgY2FsbGVkCisJCSAqIHtvaWR9CisJCSAqLworCQlzbnByaW50Zihk YmZpbGVuYW1lLCBNQVhQR1BBVEgsICIldS50YXIiLCBkYmlkbmFtZS0+b2lkKTsKKwkJaWYgKGZp bGVfZXhpc3RzX2luX2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJc25w cmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LnRhciIsIGlucHV0 RmlsZVNwZWMsIGRiaWRuYW1lLT5vaWQpOworCQllbHNlCisJCXsKKwkJCXNucHJpbnRmKGRiZmls ZW5hbWUsIE1BWFBHUEFUSCwgIiV1LmRtcCIsIGRiaWRuYW1lLT5vaWQpOworCisJCQlpZiAoZmls ZV9leGlzdHNfaW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQkJc25w cmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LmRtcCIsIGlucHV0 RmlsZVNwZWMsIGRiaWRuYW1lLT5vaWQpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHN1YmRpcnBh dGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldSIsIGlucHV0RmlsZVNwZWMsIGRiaWRuYW1l LT5vaWQpOworCQl9CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIi LCBkYmlkbmFtZS0+c3RyKTsKKworCQkvKiBJZiBkYXRhYmFzZSBpcyBhbHJlYWR5IGNyZWF0ZWQs IHRoZW4gZG9uJ3Qgc2V0IGNyZWF0ZURCIGZsYWcuICovCisJCWlmIChvcHRzLT5jcGFyYW1zLmRi bmFtZSkKKwkJeworCQkJUEdjb25uCSAgICp0ZXN0X2Nvbm47CisKKwkJCXRlc3RfY29ubiA9IENv bm5lY3REYXRhYmFzZShkYmlkbmFtZS0+c3RyLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwK KwkJCQkJCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwg VFJJX0RFRkFVTFQsCisJCQkJCQkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMKTsKKwkJCWlmICh0ZXN0X2Nvbm4pCisJCQl7CisJCQkJUFFmaW5pc2godGVzdF9jb25u KTsKKworCQkJCS8qIFVzZSBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UgZm9yIGNvbm5lY3Rpb24u ICovCisJCQkJb3B0cy0+Y3JlYXRlREIgPSAwOworCQkJCW9wdHMtPmNwYXJhbXMuZGJuYW1lID0g ZGJpZG5hbWUtPnN0cjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiB3ZSdsbCBoYXZlIHRv IGNyZWF0ZSBpdCAqLworCQkJCW9wdHMtPmNyZWF0ZURCID0gMTsKKwkJCQlvcHRzLT5jcGFyYW1z LmRibmFtZSA9IGNvbm5lY3RlZF9kYjsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFJlc2V0IGZs YWdzIC0gbWlnaHQgaGF2ZSBiZWVuIHJlc2V0IGluIHBnX2JhY2t1cF9hcmNoaXZlci5jIGJ5IHRo ZQorCQkgKiBwcmV2aW91cyByZXN0b3JlLgorCQkgKi8KKwkJb3B0cy0+ZHVtcERhdGEgPSBkdW1w RGF0YTsKKwkJb3B0cy0+ZHVtcFNjaGVtYSA9IGR1bXBTY2hlbWE7CisJCW9wdHMtPmR1bXBTdGF0 aXN0aWNzID0gZHVtcFN0YXRpc3RpY3M7CisKKwkJLyogUmVzdG9yZSB0aGUgc2luZ2xlIGRhdGFi YXNlLiAqLworCQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKHN1YmRpcnBhdGgsIG9w dHMsIG51bVdvcmtlcnMsIHRydWUsIDEsIGZhbHNlKTsKKworCQkvKiBQcmludCBhIHN1bW1hcnkg b2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHNpbmdsZSBkYXRhYmFzZSByZXN0b3JlLiAqLworCQlp ZiAobl9lcnJvcnMpCisJCXsKKwkJCW5fZXJyb3JzX3RvdGFsICs9IG5fZXJyb3JzOworCQkJcGdf bG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIGRhdGFiYXNlIFwiJXNcIiByZXN0b3JlOiAl ZCIsIGRiaWRuYW1lLT5zdHIsIG5fZXJyb3JzKTsKKwkJfQorCX0KKworCS8qIExvZyBudW1iZXIg b2YgcHJvY2Vzc2VkIGRhdGFiYXNlcy4gKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3Rv cmVkIGRhdGFiYXNlcyBpcyAlZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJuYW1l IGFuZCBkYm9pZCBsaXN0LiAqLworCXNpbXBsZV9wdHJfbGlzdF9kZXN0cm95KCZkYm5hbWVfb2lk X2xpc3QpOworCisJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBs Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzdkODkzZDVlNmEuLjA4M2Y1 YzViZjlkCi0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmlu L3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKQEAgLTI0NCw0ICsyNDQsMzEgQEAgY29tbWFuZF9mYWls c19saWtlKAogCSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBi ZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCiApOwogCitjb21tYW5kX2Zh aWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICd4JyBdLAorCXFyL1xRcGdf ZHVtcGFsbDogZXJyb3I6IHVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0ICJ4IjtcRS8sCisJJ3Bn X2R1bXBhbGw6IHVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0Jyk7CisKK2NvbW1hbmRfZmFpbHNf bGlrZSgKKwlbICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ2QnLCAnLS1yZXN0cmljdC1rZXk9 dXUnLCAnLWYgZHVtcGZpbGUnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogb3B0aW9uIC0t cmVzdHJpY3Qta2V5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLWZvcm1hdD1wbGFpblxFLywKKwkn cGdfZHVtcGFsbDogLS1yZXN0cmljdC1rZXkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHBsYWluIGR1 bXAgZm9ybWF0Jyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0t ZXhjbHVkZS1kYXRhYmFzZT1mb28nLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JyBdLAor CXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZ1wvLS1nbG9iYWxzLW9ubHlcRS8sCisJJ3BnX3Jlc3Rv cmU6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0 aCAtZy8tLWdsb2JhbHMtb25seScKKyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19y ZXN0b3JlJywgJy0tZXhjbHVkZS1kYXRhYmFzZT1mb28nLCAnLWQnLCAneHh4JywgJ2R1bXBkaXIn IF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBj YW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19k dW1wYWxsXEUvLAorCSdXaGVuIG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgaXMgdXNlZCBpbiBw Z19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wJworKTsKKworY29tbWFuZF9mYWlsc19saWtl KAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JywgJ2R1bXBk aXInIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1nXC8tLWdsb2JhbHMtb25s eSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBw Z19kdW1wYWxsXEUvLAorCSdXaGVuIG9wdGlvbiAtLWdsb2JhbHMtb25seSBpcyBub3QgdXNlZCBp biBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wJworKTsKIGRvbmVfdGVzdGluZygpOwpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgYi9zcmMvYmlu L3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw MDAwMDAwMDAwMC4uM2M3ZDJhZDdjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1 bXAvdC8wMDdfcGdfZHVtcGFsbC5wbApAQCAtMCwwICsxLDM5NiBAQAorIyBDb3B5cmlnaHQgKGMp IDIwMjEtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0 cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9y ZTsKKworbXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcjsKK215 ICRydW5fZGIgPSAncG9zdGdyZXMnOworbXkgJHNlcCA9ICR3aW5kb3dzX29zID8gIlxcIiA6ICIv IjsKKworIyBUYWJsZXNwYWNlIGxvY2F0aW9ucyB1c2VkIGJ5ICJyZXN0b3JlX3RhYmxlc3BhY2Ui IHRlc3QgY2FzZS4KK215ICR0YWJsZXNwYWNlMSA9ICIke3RlbXBkaXJ9JHtzZXB9dGJsMSI7Citt eSAkdGFibGVzcGFjZTIgPSAiJHt0ZW1wZGlyfSR7c2VwfXRibDIiOworbWtkaXIoJHRhYmxlc3Bh Y2UxKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNlMSAkISI7Citta2RpcigkdGFibGVzcGFjZTIp IHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UyICQhIjsKKworIyBTY2FwZSB0YWJsZXNwYWNlIGxv Y2F0aW9ucyBvbiBXaW5kb3dzLgorJHRhYmxlc3BhY2UxID0gJHdpbmRvd3Nfb3MgPyAoJHRhYmxl c3BhY2UxID1+IHMvXFwvXFxcXC9ncikgOiAkdGFibGVzcGFjZTE7CiskdGFibGVzcGFjZTIgPSAk d2luZG93c19vcyA/ICgkdGFibGVzcGFjZTIgPX4gcy9cXC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNl MjsKKworIyBXaGVyZSBwZ19kdW1wYWxsIHdpbGwgYmUgZXhlY3V0ZWQuCitteSAkbm9kZSA9IFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZScpOworJG5vZGUtPmluaXQ7Ciskbm9k ZS0+c3RhcnQ7CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmluaXRpb24gb2YgdGhlIHBnX2R1bXBhbGwgdGVz dCBjYXNlcyB0byBydW4uCisjCisjIEVhY2ggb2YgdGhlc2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQg YW5kIHRob3NlIG5hbWVzIGFyZSB1c2VkIGZvciBmYWlsCisjIHJlcG9ydGluZyBhbmQgYWxzbyB0 byBzYXZlIHRoZSBkdW1wIGFuZCByZXN0b3JlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisj IHRlc3QgdG8gYXNzZXJ0LgorIworIyBUaGUgInNldHVwX3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNj cmlwdCB0aGF0IGNvbnRhaW5zIFNRTCBjb21tYW5kcyB0byBleGVjdXRlCisjIGJlZm9yZSBvZiBh Y3R1YWxseSBleGVjdXRlIHRoZSB0ZXN0cy4gVGhlIHNldHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJl Zm9yZSBvZgorIyBhbnkgdGVzdCBleGVjdXRpb24uCisjCisjIFRoZSAiZHVtcF9jbWQiIGFuZCAi cmVzdG9yZV9jbWQiIGFyZSB0aGUgY29tbWFuZHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUK KyMgInJlc3RvcmVfY21kIiBtdXN0IGhhdmUgdGhlIC0tZmlsZSBmbGFnIHRvIHNhdmUgdGhlIHJl c3RvcmUgb3V0cHV0IHNvIHRoYXQgd2UKKyMgY2FuIGFzc2VydCBvbiBpdC4KKyMKKyMgVGhlICJs aWtlIiBhbmQgInVubGlrZSIgaXMgYSByZWdleHAgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHRoZSBw Z19yZXN0b3JlCisjIG91dHB1dC4gSXQgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVuIGZp bGxlZCBwZXIgdGVzdCBjYXNlcyBidXQgaXQgYWxzbworIyBjYW4gaGF2ZSBib3RoLiBTZWUgImV4 Y2x1ZGluZ19kYXRhYmFzZXMiIHRlc3QgY2FzZSBmb3IgZXhhbXBsZS4KK215ICVwZ2R1bXBhbGxf cnVucyA9ICgKKwlyZXN0b3JlX3JvbGVzID0+IHsKKwkJc2V0dXBfc3FsID0+ICcKKwkJQ1JFQVRF IFJPTEUgZHVtcGFsbCBXSVRIIEVOQ1JZUFRFRCBQQVNTV09SRCBcJ2FkbWluXCcgU1VQRVJVU0VS OworCQlDUkVBVEUgUk9MRSBkdW1wYWxsMiBXSVRIIFJFUExJQ0FUSU9OIENPTk5FQ1RJT04gTElN SVQgMTA7JywKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0 JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVz IiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJ Jy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0 b3JlX3JvbGVzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCWxp a2UgPT4gcXIvCisJCQlccypcUUNSRUFURSBST0xFIGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVS IFJPTEUgZHVtcGFsbDIgV0lUSCBOT1NVUEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NS RUFURURCIE5PTE9HSU4gUkVQTElDQVRJT04gTk9CWVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAx MDtcRQorCQkveG0KKwl9LAorCisJcmVzdG9yZV90YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3Fs ID0+ICIKKwkJQ1JFQVRFIFJPTEUgdGFwOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVS IHRhcCBMT0NBVElPTiAnJHRhYmxlc3BhY2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBP V05FUiB0YXAgTE9DQVRJT04gJyR0YWJsZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2VfY29zdD0xLjAp OyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNl IiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJ Jy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0 b3JlX3RhYmxlc3BhY2Uuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAor CQldLAorCQkjIE1hdGNoICJFIiBhcyBvcHRpb25hbCBzaW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NB VElPTiB3aGVuIHJ1bm5pbmcgb24KKwkJIyBXaW5kb3dzLgorCQlsaWtlID0+IHFyL14KKwkJCVxu XFFDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0 YWJsZXNwYWNlMic7XEUKKwkJCVxuXFFBTFRFUiBUQUJMRVNQQUNFIHRibDIgU0VUIChzZXFfcGFn ZV9jb3N0PTEuMCk7XEUKKwkJL3htLAorCX0sCisKKwlyZXN0b3JlX2dyYW50cyA9PiB7CisJCXNl dHVwX3NxbCA9PiAiCisJCUNSRUFURSBEQVRBQkFTRSB0YXBncmFudHNkYjsKKwkJQ1JFQVRFIFND SEVNQSBwcml2YXRlOworCQlDUkVBVEUgU0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEwMTsKKwkJQ1JF QVRFIEZVTkNUSU9OIGZuKCkgUkVUVVJOUyB2b2lkIEFTIFwkXCQKKwkJQkVHSU4KKwkJRU5EOwor CQlcJFwkIExBTkdVQUdFIHBscGdzcWw7CisJCUNSRUFURSBST0xFIHN1cGVyOworCQlDUkVBVEUg Uk9MRSBncmFudDE7CisJCUNSRUFURSBST0xFIGdyYW50MjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQz OworCQlDUkVBVEUgUk9MRSBncmFudDQ7CisJCUNSRUFURSBST0xFIGdyYW50NTsKKwkJQ1JFQVRF IFJPTEUgZ3JhbnQ2OworCQlDUkVBVEUgUk9MRSBncmFudDc7CisJCUNSRUFURSBST0xFIGdyYW50 ODsKKworCQlDUkVBVEUgVEFCTEUgdCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdCBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOworCisJCUdSQU5UIFNFTEVDVCBPTiBUQUJMRSB0IFRPIGdyYW50 MTsKKwkJR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHQgVE8gZ3JhbnQyOworCQlHUkFOVCBBTEwgUFJJ VklMRUdFUyBPTiBUQUJMRSB0IHRvIGdyYW50MzsKKwkJR1JBTlQgQ09OTkVDVCwgQ1JFQVRFIE9O IERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDsKKwkJR1JBTlQgVVNBR0UsIENSRUFURSBP TiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7CisJCUdSQU5UIFVTQUdFLCBTRUxFQ1QsIFVQREFU RSBPTiBTRVFVRU5DRSBzZXJpYWwgVE8gZ3JhbnQ2OworCQlHUkFOVCBzdXBlciBUTyBncmFudDc7 CisJCUdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gZm4oKSBUTyBncmFudDg7CisJCSIsCisJCWR1 bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9y eScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAorCQldLAorCQly ZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNx bCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlsaWtlID0+IHFyL14K KwkJCVxuXFFHUkFOVCBzdXBlciBUTyBncmFudDcgV0lUSCBJTkhFUklUIFRSVUUgR1JBTlRFRCBC WVxFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdy YW50NTtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBGVU5DVElPTiBwdWJsaWMu Zm4oKSBUTyBncmFudDg7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwgT04gU0VRVUVO Q0UgcHVibGljLnNlcmlhbCBUTyBncmFudDY7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBT RUxFQ1QgT04gVEFCTEUgcHVibGljLnQgVE8gZ3JhbnQxO1xFCisJCQlcblxRR1JBTlQgSU5TRVJU IE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MjtcRQorCQkJXG5cUUdSQU5UIEFMTCBPTiBUQUJM RSBwdWJsaWMudCBUTyBncmFudDM7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBDUkVBVEUs Q09OTkVDVCBPTiBEQVRBQkFTRSB0YXBncmFudHNkYiBUTyBncmFudDQ7XEUKKwkJL3htLAorCX0s CisKKwlleGNsdWRpbmdfZGF0YWJhc2VzID0+IHsKKwkJc2V0dXBfc3FsID0+ICdDUkVBVEUgREFU QUJBU0UgZGIxOworCQlcYyBkYjEKKwkJQ1JFQVRFIFRBQkxFIHQxIChpZCBpbnQpOworCQlJTlNF UlQgSU5UTyB0MSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDIg KGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQyIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisK KwkJQ1JFQVRFIERBVEFCQVNFIGRiMjsKKwkJXGMgZGIyCisJCUNSRUFURSBUQUJMRSB0MyAoaWQg aW50KTsKKwkJSU5TRVJUIElOVE8gdDMgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JF QVRFIFRBQkxFIHQ0IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NCBWQUxVRVMgKDEpLCAoMiks ICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYmV4MzsKKwkJXGMgZGJleDMKKwkJQ1JF QVRFIFRBQkxFIHQ1IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NSBWQUxVRVMgKDEpLCAoMiks ICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDYgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ2 IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiZXg0Owor CQlcYyBkYmV4NAorCQlDUkVBVEUgVEFCTEUgdDcgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ3 IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0OCAoaWQgaW50KTsK KwkJSU5TRVJUIElOVE8gdDggVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUg REFUQUJBU0UgZGI1OworCQlcYyBkYjUKKwkJQ1JFQVRFIFRBQkxFIHQ5IChpZCBpbnQpOworCQlJ TlNFUlQgSU5UTyB0OSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUg dDEwIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MTAgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0 KTsKKwkJJywKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0 JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0 YWJhc2VzIiwKKwkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdkYmV4KicsCisJCV0sCisJCXJl c3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNl cy5zcWwiLAorCQkJJy0tZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiNScsCisJCQkiJHRlbXBkaXIv ZXhjbHVkaW5nX2RhdGFiYXNlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFU RSBEQVRBQkFTRSBkYjFcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMu dDEgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MiAoXEUKKwkJ CSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIyXEUKKwkJCSguKlxuKSoKKwkJCVxu XFFDUkVBVEUgVEFCTEUgcHVibGljLnQzIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBU QUJMRSBwdWJsaWMudDQgKC94bSwKKwkJdW5saWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgREFU QUJBU0UgZGIzXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ1IChc RQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDYgKFxFCisJCQkoLipc bikqCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiNFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JF QVRFIFRBQkxFIHB1YmxpYy50NyAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUg cHVibGljLnQ4IChcRQorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjVcRQorCQkJKC4qXG4pKgor CQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDkgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JF QVRFIFRBQkxFIHB1YmxpYy50MTAgKFxFCisJCS94bSwKKwl9LAorCisJZm9ybWF0X2RpcmVjdG9y eSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9kaXJlY3RvcnkoYSBp bnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2RpcmVjdG9yeSBW QUxVRVMgKDEsIHRydWUsICduYW1lMScpLCAoMiwgZmFsc2UsICduYW1lMicpOyIsCisJCWR1bXBf Y21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScs CisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCXJl c3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeS5z cWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF9kaXJlY3RvcnkiLAorCQldLAorCQlsaWtlID0+IHFy L15cblxRQ09QWSBwdWJsaWMuZm9ybWF0X2RpcmVjdG9yeSAoYSwgYiwgYykgRlJPTSBzdGRpbjsv eG0KKwl9LAorCisJZm9ybWF0X3RhciA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxF IGZvcm1hdF90YXIoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9y bWF0X3RhciBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTMnKSwgKDIsIHRydWUsICduYW1lNCcpOyIs CisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ3Rh cicsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3RhciIsCisJCV0sCisJCXJlc3Rv cmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ3Rh cicsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3Rhci5zcWwiLAorCQkJIiR0ZW1w ZGlyL2Zvcm1hdF90YXIiLAorCQldLAorCQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9y bWF0X3RhciAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0X2N1c3RvbSA9 PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9jdXN0b20oYSBpbnQsIGIg Ym9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2N1c3RvbSBWQUxVRVMgKDEs IGZhbHNlLCAnbmFtZTUnKSwgKDIsIHRydWUsICduYW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsK KwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsK KwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zv cm1hdF9jdXN0b20iLAorCQldLAorCQlsaWtlID0+IHFyL14gXG5cUUNPUFkgcHVibGljLmZvcm1h dF9jdXN0b20gKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWR1bXBfZ2xvYmFsc19v bmx5ID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcihhIGludCwg YiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyIFZBTFVFUyAoMSwg ZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWwor CQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWds b2JhbHMtb25seScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHki LAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsICctLWds b2JhbHMtb25seScsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScg PT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5LnNxbCIsCisJCQkiJHRlbXBkaXIvZHVtcF9n bG9iYWxzX29ubHkiLAorCQldLAorCQlsaWtlID0+IHFyLworICAgICAgICAgICAgXlxzKlxRQ1JF QVRFIFJPTEUgZHVtcGFsbDtcRVxzKlxuCisJCQkveG0KKwl9LCk7CisKKyMgRmlyc3QgZXhlY3V0 ZSB0aGUgc2V0dXBfc3FsCitmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1 bnMpCit7CisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pCisJeworCQkk bm9kZS0+c2FmZV9wc3FsKCRydW5fZGIsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3Nx bH0pOworCX0KK30KKworIyBFeGVjdXRlIHRoZSB0ZXN0cworZm9yZWFjaCBteSAkcnVuIChzb3J0 IGtleXMgJXBnZHVtcGFsbF9ydW5zKQoreworCSMgQ3JlYXRlIGEgbmV3IHRhcmdldCBjbHVzdGVy IHRvIHBnX3Jlc3RvcmUgZWFjaCB0ZXN0IGNhc2UgcnVuIHNvIHRoYXQgd2UKKwkjIGRvbid0IG5l ZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBjbGVhbnVwIGZyb20gdGhlIHRhcmdldCBjbHVzdGVyIGFm dGVyIGVhY2gKKwkjIHJ1bi4KKwlteSAkdGFyZ2V0X25vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoInRhcmdldF8kcnVuIik7CisJJHRhcmdldF9ub2RlLT5pbml0OworCSR0YXJn ZXRfbm9kZS0+c3RhcnQ7CisKKwkjIER1bXBhbGwgZnJvbSBub2RlIGNsdXN0ZXIuCisJJG5vZGUt PmNvbW1hbmRfb2soXEB7ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2R1bXBfY21kfSB9LAorCQki JHJ1bjogcGdfZHVtcGFsbCBydW5zIik7CisKKwkjIFJlc3RvcmUgdGhlIGR1bXAgb24gInRhcmdl dF9ub2RlIiBjbHVzdGVyLgorCW15IEByZXN0b3JlX2NtZCA9ICgKKwkJQHsgJHBnZHVtcGFsbF9y dW5zeyRydW59LT57cmVzdG9yZV9jbWR9IH0sCisJCSctLWhvc3QnLCAkdGFyZ2V0X25vZGUtPmhv c3QsICctLXBvcnQnLCAkdGFyZ2V0X25vZGUtPnBvcnQpOworCisJbXkgKCRzdGRvdXQsICRzdGRl cnIpID0gcnVuX2NvbW1hbmQoXEByZXN0b3JlX2NtZCk7CisKKwkjIHBnX3Jlc3RvcmUgLS1maWxl IG91dHB1dCBmaWxlLgorCW15ICRvdXRwdXRfZmlsZSA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyLyR7 cnVufS5zcWwiKTsKKworCWlmICggICAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQor CQkmJiAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0pKQorCXsKKwkJZGllICJtaXNz aW5nIFwibGlrZVwiIG9yIFwidW5saWtlXCIgaW4gdGVzdCBcIiRydW5cIiI7CisJfQorCisJaWYg KCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQorCXsKKwkJbGlrZSgkb3V0cHV0X2ZpbGUs ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9LCAic2hvdWxkIGR1bXAgJHJ1biIpOworCX0K KworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9KQorCXsKKwkJdW5saWtlKAor CQkJJG91dHB1dF9maWxlLAorCQkJJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSwKKwkJ CSJzaG91bGQgbm90IGR1bXAgJHJ1biIpOworCX0KK30KKworIyBTb21lIG5lZ2F0aXZlIHRlc3Qg Y2FzZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCBhbmQgcmVzdG9yZSB1c2luZyBwZ19yZXN0b3Jl CisjIHRlc3QgY2FzZSAxOiB3aGVuIC1DIGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBk dW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdf cmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJJy0tZm9ybWF0JyA9PiAn Y3VzdG9tJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAor CXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtQ1wvLS1jcmVhdGUgbXVzdCBiZSBzcGVj aWZpZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8s CisJJ1doZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVt cGFsbCcpOworCisjIHRlc3QgY2FzZSAyOiBXaGVuIC0tbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRo IGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdw Z19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3Jt YXQnID0+ICdjdXN0b20nLAorCQknLS1saXN0JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vy cm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtbFwv LS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBi eSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC0tbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0 aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyB0ZXN0IGNhc2UgMzogV2hlbiBub24tZXhpc3Qg ZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAtZCBvcHRpb24KKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xp a2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1D JywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy1kJyA9PiAnZGJwcScsCisJXSwKKwlx ci9cUUZBVEFMOiAgZGF0YWJhc2UgImRicHEiIGRvZXMgbm90IGV4aXN0XEUvLAorCSdXaGVuIG5v bi1leGlzdGVudCBkYXRhYmFzZSBpcyBnaXZlbiB3aXRoIC1kIG9wdGlvbiBpbiBwZ19yZXN0b3Jl IHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJworKTsKKworJG5vZGUtPnN0b3AoJ2Zhc3QnKTsKKwor ZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQ3LjMKCg== --000000000000731ae10645753ff5--