Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nZ8R5-0002kM-2R for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Mar 2022 09:46:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nZ8R3-0006oj-Ls for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Mar 2022 09:46:45 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nZ8R2-0006oa-Nj for pgsql-hackers@lists.postgresql.org; Tue, 29 Mar 2022 09:46:45 +0000 Received: from mail-4316.protonmail.ch ([185.70.43.16]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nZ8Qu-0003T4-SE for pgsql-hackers@lists.postgresql.org; Tue, 29 Mar 2022 09:46:43 +0000 Date: Tue, 29 Mar 2022 09:46:27 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail2; t=1648547188; bh=wecuNe9urhJhrafldripgm26I5Qn6/ebrLaM6/h+aIg=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID; b=JcXPDnQCx1JJP6dtbIOTXLGZXPEVMqTGBElg2rJ7HGhCTPUiFIhKtIAcPHB01RBTh Kw70ii78hyumTVQLxm6UtxQy9AWMLekSlijiR5QTX636tId0al5wHodyfoalvQP9uG 4wSqlmipgagoEPub+Qwv1Kse59czpWMO4qzd45JQgl8r27CaxumDrGGBvhvv1UTnTb 45ev7ldnOV08sDcG1JRkbrs9/8cfEIJtnOGa2D4j7OyIwAcYxG+Yj6YQlUlRg7CyHs H25yiAlnH9uGV2wPWVE/Jv8rBUbtQtZj9rVXjEZQxZjRSk1VZS+Fs6yVRkwhoxjDnm cKvNpdbOUYh/A== To: Michael Paquier From: gkokolatos@pm.me Cc: Justin Pryzby , Rachel Heaton , Greg Stark , pgsql-hackers@lists.postgresql.org Reply-To: gkokolatos@pm.me Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: References: <20220304161039.GL27651@telsasoft.com> <20220325132253.GD28503@telsasoft.com> <20220326061441.GH28503@telsasoft.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_u2X9lop6Yk7scHMVWcGTtJ3U566CpC4hbBKtChwprw" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --b1_u2X9lop6Yk7scHMVWcGTtJ3U566CpC4hbBKtChwprw Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Tuesday, March 29th, 2022 at 9:27 AM, Michael Paquier wrote: > On Sat, Mar 26, 2022 at 01:14:41AM -0500, Justin Pryzby wrote: > > See 0001 and the manpage. > > + 'pg_dump: compression is not supported by tar archive format'); > > When I submitted a patch to support zstd, I spent awhile trying to make > > compression work with tar, but it's a significant effort and better don= e > > separately. > > Wow. This stuff is old enough to vote (c3e18804), dead since its > introduction. There is indeed an argument for removing that, it is > not good to keep around that that has never been stressed and/or > used. Upon review, the cleanup done looks correct, as we have never > been able to generate .dat.gz files in for a dump in the tar format. Correct. My driving force behind it was to ease up the cleanup/refactoring work that follows, by eliminating the callers of the GZ*() macros. > + command_fails_like( > > + [ 'pg_dump', '--compress', '1', '--format', 'tar' ], > This addition depending on HAVE_LIBZ is a good thing as a reminder of > any work that could be done in 0002. Now that's waiting for 20 years > so I would not hold my breath on this support. I think that this > could be just applied first, with 0002 on top of it, as a first > improvement. Excellent, thank you. > + compress_cmd =3D> [ > + $ENV{'GZIP_PROGRAM'}, > Patch 0001 is missing and update of pg_dump's Makefile to pass down > this environment variable to the test scripts, no? Agreed. It was not properly moved forward. Fixed. > + compress_cmd =3D> [ > + $ENV{'GZIP_PROGRAM'}, > + '-f', > [...] > + $ENV{'GZIP_PROGRAM'}, > + '-k', '-d', > -f and -d are available everywhere I looked at, but is -k/--keep a > portable choice with a gzip command? I don't see this option in > OpenBSD, for one. So this test is going to cause problems on those > buildfarm machines, at least. Couldn't this part be replaced by a > simple --test to check that what has been compressed is in correct > shape? We know that this works, based on our recent experiences with > the other tests. I would argue that the simple '--test' will not do in this case, as the TAP tests do need a file named .sql to compare the contents with. This file is generated either directly by pg_dump itself, or by running pg_restore on pg_dump's output. In the case of compression pg_dump will generate a .sql. which can not be used in the comparison tests. So the intention of this block, is not to simply test for validity, but to also decompress pg_dump's output for it to be able to be used. I updated the patch to simply remove the '-k' flag. Please find v3 attached. (only 0001 and 0002 are relevant, 0003 and 0004 are only for reference and are currently under active modification). Cheers, //Georgios --b1_u2X9lop6Yk7scHMVWcGTtJ3U566CpC4hbBKtChwprw Content-Type: text/x-patch; name=v3-0004-Add-LZ4-compression-in-pg_-dump-restore.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0004-Add-LZ4-compression-in-pg_-dump-restore.patch RnJvbSBlZjM3MzQzOWFjM2M1ZWM3NjYzZmYxOTFiMjhmNzQ0Y2RjNTI5ZTg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjkgTWFyIDIwMjIgMDg6MzE6NDcgKzAwMDAKU3ViamVjdDogW1BBVENIIHYz IDQvNF0gQWRkIExaNCBjb21wcmVzc2lvbiBpbiBwZ197ZHVtcHxyZXN0b3JlfQoKV2l0aGluIGNv bXByZXNzX2lvLntjLGh9IHRoZXJlIGFyZSB0d28gZGlzdGluY3QgQVBJcyBleHBvc2VkLCB0aGUg c3RyZWFtaW5nIEFQSQphbmQgYSBmaWxlIEFQSS4gVGhlIGZpcnN0IG9uZSwgaXMgYWltZWQgYXQg aW5saW5lZCB1c2UgY2FzZXMgYW5kIHRodXMgc2ltcGxlCmx6NC5oIGNhbGxzIGNhbiBiZSB1c2Vk IGRpcmVjdGx5LiBUaGUgc2Vjb25kIG9uZSBpcyBnZW5lcmF0aW5nIG91dHB1dCwgb3IgaXMKcGFy c2luZyBpbnB1dCwgd2hpY2ggY2FuIGJlIHJlYWQvZ2VuZXJhdGVkIHZpYSB0aGUgbHo0IHV0aWxp dHkuCgpJbiB0aGUgbGF0ZXIgY2FzZSwgdGhlIEFQSSBpcyB1c2luZyBhbiBvcGFxdWUgd3JhcHBl ciBhcm91bmQgYSBmaWxlIHN0cmVhbSwKd2hpY2ggYXF1aXJlZCB2aWEgZm9wZW4oKSBvciBnem9w ZW4oKSByZXNwZWN0aXZlbHkuIEl0IHdvdWxkIHRoZW4gcHJvdmlkZQp3cmFwcGVycyBhcm91bmQg ZnJlYWQoKSwgZndyaXRlKCksIGZnZXRzKCksIGZnZXRjKCksIGZlb2YoKSwgYW5kIGZjbG9zZSgp OyBvcgp0aGVpciBneiBlcXVpdmFsbGVudHMuIEhvd2V2ZXIgdGhlIExaNEYgYXBpIGRvZXMgbm90 IHByb3ZpZGUgdGhpcyBmdW5jdGlvbmFsaXR5LgpTbyB0aGlzIGhhcyBiZWVuIGltcGxlbWVudGVk IGxvY2FseS4KCkluIG9yZGVyIHRvIG1haW50YWluIHRoZSBBUEkgY29tcGF0aWJpbGl0eSBhIG5l dyBzdHJ1Y3R1cmUgTFo0RmlsZSBpcwppbnRyb2R1Y2VkLiBJdCBpcyByZXNwb25zaWJsZSBmb3Ig a2VlcGluZyBzdGF0ZSBhbmQgYW55IHlldCB1bnVzZWQgZ2VuZXJhdGVkCmNvbnRlbnQuIFRoZSBs YXRlciBpcyByZXF1aXJlZCB3aGVuIHRoZSBnZW5lcmF0ZWQgZGVjb21wcmVzc2VkIG91dHB1dCwg ZXhjZWVkcwp0aGUgY2FsbGVyJ3MgYnVmZmVyIGNhcGFjaXR5LgoKQ3VzdG9tIGNvbXByZXNzZWQg YXJjaGl2ZXMgbmVlZCB0byBub3cgc3RvcmUgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBpbiB0aGVp cgpoZWFkZXIuIFRoaXMgcmVxdWlyZXMgYSBidW1wIGluIHRoZSB2ZXJzaW9uIG51bWJlci4gVGhl IGxldmVsIG9mIGNvbXByZXNzaW9uIGlzCnN0aWxsIHN0b3JlZCBpbiB0aGUgZHVtcCwgdGhvdWdo IGFkbWl0dGVkbHkgaXMgb2Ygbm8gYXBwYXJlbnQgdXNlLgotLS0KIGRvYy9zcmMvc2dtbC9yZWYv cGdfZHVtcC5zZ21sICAgICAgICB8ICAyMyArLQogc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jICAgICAgICB8 IDczOCArKysrKysrKysrKysrKysrKysrKysrKystLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaCAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMgfCAgNzEgKystCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggfCAgIDMg Ky0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAxMiArLQogc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgICA0ICstCiBzcmMvYmluL3BnX2R1bXAv dC8wMDJfcGdfZHVtcC5wbCAgICAgfCAyMDcgKysrKysrLS0KIDkgZmlsZXMgY2hhbmdlZCwgOTEx IGluc2VydGlvbnMoKyksIDE0OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvcmVmL3BnX2R1bXAuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCmluZGV4 IDk5MmI3MzEyZGYuLjY4YTdjNmEzYmYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCkBAIC0zMjgsOSAr MzI4LDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICAgICBtYWNoaW5lLXJl YWRhYmxlIGZvcm1hdCB0aGF0IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4K ICAgICAgICAgICAgY2FuIHJlYWQuIEEgZGlyZWN0b3J5IGZvcm1hdCBhcmNoaXZlIGNhbiBiZSBt YW5pcHVsYXRlZCB3aXRoCiAgICAgICAgICAgIHN0YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFt cGxlLCBmaWxlcyBpbiBhbiB1bmNvbXByZXNzZWQgYXJjaGl2ZQotICAgICAgICAgICBjYW4gYmUg Y29tcHJlc3NlZCB3aXRoIHRoZSA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+IHRvb2wu Ci0gICAgICAgICAgIFRoaXMgZm9ybWF0IGlzIGNvbXByZXNzZWQgYnkgZGVmYXVsdCBhbmQgYWxz byBzdXBwb3J0cyBwYXJhbGxlbAotICAgICAgICAgICBkdW1wcy4KKyAgICAgICAgICAgY2FuIGJl IGNvbXByZXNzZWQgd2l0aCB0aGUgPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiBvcgor ICAgICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9hcHBsaWNhdGlvbj50b29sLgorICAgICAgICAg ICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5IGRlZmF1bHQgdXNpbmcgPGxpdGVyYWw+Z3pp cDwvbGl0ZXJhbD4KKyAgICAgICAgICAgYW5kIGFsc28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMu CiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgPC92YXJs aXN0ZW50cnk+CkBAIC02NTIsMTIgKzY1MywxMiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K ICAgICAgICA8cGFyYT4KICAgICAgICAgU3BlY2lmeSB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGFu ZC9vciB0aGUgY29tcHJlc3Npb24gbGV2ZWwgdG8gdXNlLgogICAgICAgICBUaGUgY29tcHJlc3Np b24gbWV0aG9kIGNhbiBiZSBzZXQgdG8gPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4gb3IKLSAgICAg ICAgPGxpdGVyYWw+bm9uZTwvbGl0ZXJhbD4gZm9yIG5vIGNvbXByZXNzaW9uLiBBIGNvbXByZXNz aW9uIGxldmVsIGNhbgotICAgICAgICBiZSBvcHRpb25hbGx5IHNwZWNpZmllZCwgYnkgYXBwZW5k aW5nIHRoZSBsZXZlbCBudW1iZXIgYWZ0ZXIgYSBjb2xvbgotICAgICAgICAoPGxpdGVyYWw+Ojwv bGl0ZXJhbD4pLiBJZiBubyBsZXZlbCBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGNvbXByZXNz aW9uCi0gICAgICAgIGxldmVsIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHNwZWNpZmllZCBtZXRob2Qu IElmIG9ubHkgYSBsZXZlbCBpcwotICAgICAgICBzcGVjaWZpZWQgd2l0aG91dCBtZW50aW9uaW5n IGEgbWV0aG9kLCA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBjb21wcmVzc2lvbgotICAgICAgICB3 aWxsIGJlIHVzZWQuCisgICAgICAgIDxsaXRlcmFsPmx6NDwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+ bm9uZTwvbGl0ZXJhbD4gZm9yIG5vIGNvbXByZXNzaW9uLiBBCisgICAgICAgIGNvbXByZXNzaW9u IGxldmVsIGNhbiBiZSBvcHRpb25hbGx5IHNwZWNpZmllZCwgYnkgYXBwZW5kaW5nIHRoZSBsZXZl bAorICAgICAgICBudW1iZXIgYWZ0ZXIgYSBjb2xvbiAoPGxpdGVyYWw+OjwvbGl0ZXJhbD4pLiBJ ZiBubyBsZXZlbCBpcyBzcGVjaWZpZWQsCisgICAgICAgIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9u IGxldmVsIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHNwZWNpZmllZCBtZXRob2QuIElmCisgICAgICAg IG9ubHkgYSBsZXZlbCBpcyBzcGVjaWZpZWQgd2l0aG91dCBtZW50aW9uaW5nIGEgbWV0aG9kLAor ICAgICAgICA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBjb21wcmVzc2lvbiB3aWxsYmUgdXNlZC4K ICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFyYT4KQEAgLTY2NSw4ICs2NjYsOCBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgaW5kaXZpZHVhbCB0YWJsZS1kYXRhIHNlZ21l bnRzLCBhbmQgdGhlIGRlZmF1bHQgaXMgdG8gY29tcHJlc3MgdXNpbmcKICAgICAgICAgPGxpdGVy YWw+Z3ppcDwvbGl0ZXJhbD4gYXQgYSBtb2RlcmF0ZSBsZXZlbC4gRm9yIHBsYWluIHRleHQgb3V0 cHV0LAogICAgICAgICBzZXR0aW5nIGEgbm9uemVybyBjb21wcmVzc2lvbiBsZXZlbCBjYXVzZXMg dGhlIGVudGlyZSBvdXRwdXQgZmlsZSB0byBiZSBjb21wcmVzc2VkLAotICAgICAgICBhcyB0aG91 Z2ggaXQgaGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9u PjsgYnV0IHRoZSBkZWZhdWx0Ci0gICAgICAgIGlzIG5vdCB0byBjb21wcmVzcy4KKyAgICAgICAg YXMgdGhvdWdoIGl0IGhhZCBiZWVuIGZlZCB0aHJvdWdoIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBs aWNhdGlvbj4gb3IKKyAgICAgICAgPGFwcGxpY2F0aW9uPmx6NDwvYXBwbGljYXRpb24+OyBidXQg dGhlIGRlZmF1bHQgaXMgbm90IHRvIGNvbXByZXNzLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8 cGFyYT4KICAgICAgICAgVGhlIHRhciBhcmNoaXZlIGZvcm1hdCBjdXJyZW50bHkgZG9lcyBub3Qg c3VwcG9ydCBjb21wcmVzc2lvbiBhdCBhbGwuCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv TWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggMmY1MjRiMDliZi4uMjg2 NGNjYWJiOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBAQCB0b3BfYnVpbGRkaXIgPSAuLi8u Li8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCiBleHBv cnQgR1pJUF9QUk9HUkFNPSQoR1pJUCkKK2V4cG9ydCBMWjQKIAogb3ZlcnJpZGUgQ1BQRkxBR1Mg Oj0gLUkkKGxpYnBxX3NyY2RpcikgJChDUFBGTEFHUykKIExERkxBR1NfSU5URVJOQUwgKz0gLUwk KHRvcF9idWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfaW8uYwppbmRleCA2MzBmOWU0YjE4Li43OTBmMjI1ZWM0IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYwpAQCAtMzgsMTMgKzM4LDE1IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKgogICoJVGhlIGNvbXByZXNzZWQgc3RyZWFtIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIHRo ZSBDIHN0YW5kYXJkIGZvcGVuKCkgYW5kCi0gKglsaWJ6J3MgZ3pvcGVuKCkgQVBJcy4gSXQgYWxs b3dzIHlvdSB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvcgotICoJY29tcHJlc3NlZCBhbmQg dW5jb21wcmVzc2VkIHN0cmVhbXMuIGNmb3Blbl9yZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3Blbgot ICoJdGhlIGZpbGUgd2l0aCBnaXZlbiBuYW1lLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRv IG9wZW4gdGhlIHNhbWUKLSAqCWZpbGUgd2l0aCB0aGUgLmd6IHN1ZmZpeC4gY2ZvcGVuX3dyaXRl KCkgb3BlbnMgYSBmaWxlIGZvciB3cml0aW5nLCBhbgotICoJZXh0cmEgYXJndW1lbnQgc3BlY2lm aWVzIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBjb21wcmVzc2VkLCBhbmQgYWRkcyB0aGUKLSAqCS5n eiBzdWZmaXggdG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5 IGhhbmRsZSBib3RoCi0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMuCisgKgls aWJ6J3MgZ3pvcGVuKCkgQVBJcyBhbmQgY3VzdG9tIExaNCBjYWxscyB3aGljaCBwcm92aWRlIHNp bWlsYXIKKyAqCWZ1bmN0aW9uYWxpdHkuIEl0IGFsbG93cyB5b3UgdG8gdXNlIHRoZSBzYW1lIGZ1 bmN0aW9ucyBmb3IgY29tcHJlc3NlZCBhbmQKKyAqCXVuY29tcHJlc3NlZCBzdHJlYW1zLiBjZm9w ZW5fcmVhZCgpIGZpcnN0IHRyaWVzIHRvIG9wZW4gdGhlIGZpbGUgd2l0aCBnaXZlbgorICoJbmFt ZSwgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0aCB0 aGUgLmd6IHN1ZmZpeCwKKyAqCWZhaWxpbmcgdGhhdCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1l IGZpbGUgd2l0aCB0aGUgLmx6NCBzdWZmaXguCisgKgljZm9wZW5fd3JpdGUoKSBvcGVucyBhIGZp bGUgZm9yIHdyaXRpbmcsIGFuIGV4dHJhIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUKKyAqCW1ldGhv ZCB0byB1c2Ugc2hvdWxkIHRoZSBmaWxlIGJlIGNvbXByZXNzZWQsIGFuZCBhZGRzIHRoZSBhcHBy b3ByaWF0ZQorICoJc3VmZml4LCAuZ3ogb3IgLmx6NCwgdG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBU aGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhhbmRsZQorICoJYm90aCBjb21wcmVzc2VkIGFuZCB1 bmNvbXByZXNzZWQgZmlsZXMuCiAgKgogICogSURFTlRJRklDQVRJT04KICAqCSAgIHNyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Niw2ICs1OCwxNCBAQAogI2luY2x1ZGUgImNvbXBy ZXNzX2lvLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKKyNpZmRlZiBIQVZFX0xJ QkxaNAorI2luY2x1ZGUgImx6NC5oIgorI2luY2x1ZGUgImx6NGZyYW1lLmgiCisKKyNkZWZpbmUg TFo0X09VVF9TSVpFCSg0ICogMTAyNCkKKyNkZWZpbmUgTFo0X0lOX1NJWkUJCSgxNiAqIDEwMjQp CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDb21wcmVzc29yIEFQSQog ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02OSw5ICs3OSw5IEBAIHN0cnVjdCBDb21wcmVz c29yU3RhdGUKIAogI2lmZGVmIEhBVkVfTElCWgogCXpfc3RyZWFtcAl6cDsKLQljaGFyCSAgICp6 bGliT3V0OwotCXNpemVfdAkJemxpYk91dFNpemU7CiAjZW5kaWYKKwl2b2lkCSAgICpvdXRidWY7 CisJc2l6ZV90CQlvdXRzaXplOwogfTsKIAogLyogUm91dGluZXMgdGhhdCBzdXBwb3J0IHpsaWIg Y29tcHJlc3NlZCBkYXRhIEkvTyAqLwpAQCAtODUsNiArOTUsMTUgQEAgc3RhdGljIHZvaWQgV3Jp dGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cywKIHN0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzKTsKICNlbmRpZgogCisvKiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQgTFo0 IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KKyNpZmRlZiBIQVZFX0xJQkxaNAorc3RhdGljIHZvaWQg SW5pdENvbXByZXNzb3JMWjQoQ29tcHJlc3NvclN0YXRlICpjcyk7CitzdGF0aWMgdm9pZCBSZWFk RGF0YUZyb21BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7Citz dGF0aWMgdm9pZCBXcml0ZURhdGFUb0FyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXBy ZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJCSAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4p Oworc3RhdGljIHZvaWQgRW5kQ29tcHJlc3NvckxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NvclN0YXRlICpjcyk7CisjZW5kaWYKKwogLyogUm91dGluZXMgdGhhdCBzdXBwb3J0IHVuY29t cHJlc3NlZCBkYXRhIEkvTyAqLwogc3RhdGljIHZvaWQgUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUo QXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsKIHN0YXRpYyB2b2lkIFdyaXRlRGF0 YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCkBA IC0xMDMsNiArMTIyLDExIEBAIEFsbG9jYXRlQ29tcHJlc3NvcihDb21wcmVzc2lvbk1ldGhvZCBj b21wcmVzc2lvbk1ldGhvZCwKIAlpZiAoY29tcHJlc3Npb25NZXRob2QgPT0gQ09NUFJFU1NJT05f R1pJUCkKIAkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCisj aWZuZGVmIEhBVkVfTElCTFo0CisJaWYgKGNvbXByZXNzaW9uTWV0aG9kID09IENPTVBSRVNTSU9O X0xaNCkKKwkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIExaNCBzdXBwb3J0Iik7CisjZW5kaWYKKwog CiAJY3MgPSAoQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAoc2l6ZW9mKENvbXByZXNzb3JT dGF0ZSkpOwogCWNzLT53cml0ZUYgPSB3cml0ZUY7CkBAIC0xMTUsNiArMTM5LDEwIEBAIEFsbG9j YXRlQ29tcHJlc3NvcihDb21wcmVzc2lvbk1ldGhvZCBjb21wcmVzc2lvbk1ldGhvZCwKIAlpZiAo Y29tcHJlc3Npb25NZXRob2QgPT0gQ09NUFJFU1NJT05fR1pJUCkKIAkJSW5pdENvbXByZXNzb3Ja bGliKGNzLCBjb21wcmVzc2lvbkxldmVsKTsKICNlbmRpZgorI2lmZGVmIEhBVkVfTElCTFo0CisJ aWYgKGNvbXByZXNzaW9uTWV0aG9kID09IENPTVBSRVNTSU9OX0xaNCkKKwkJSW5pdENvbXByZXNz b3JMWjQoY3MpOworI2VuZGlmCiAKIAlyZXR1cm4gY3M7CiB9CkBAIC0xMzcsNiArMTY1LDEzIEBA IFJlYWREYXRhRnJvbUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzaW9uTWV0aG9k IGNvbXByZXNzaW9uTWV0aG9kLAogCQkJUmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQUgsIHJlYWRG KTsKICNlbHNlCiAJCQlmYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CisjZW5k aWYKKwkJCWJyZWFrOworCQljYXNlIENPTVBSRVNTSU9OX0xaNDoKKyNpZmRlZiBIQVZFX0xJQkxa NAorCQkJUmVhZERhdGFGcm9tQXJjaGl2ZUxaNChBSCwgcmVhZEYpOworI2Vsc2UKKwkJCWZhdGFs KCJub3QgYnVpbHQgd2l0aCBsejQgc3VwcG9ydCIpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJZGVm YXVsdDoKQEAgLTE1OSw2ICsxOTQsMTMgQEAgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5k bGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAogCQkJV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihB SCwgY3MsIGRhdGEsIGRMZW4pOwogI2Vsc2UKIAkJCWZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGli IHN1cHBvcnQiKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgQ09NUFJFU1NJT05fTFo0Ogor I2lmZGVmIEhBVkVfTElCTFo0CisJCQlXcml0ZURhdGFUb0FyY2hpdmVMWjQoQUgsIGNzLCBkYXRh LCBkTGVuKTsKKyNlbHNlCisJCQlmYXRhbCgibm90IGJ1aWx0IHdpdGggbHo0IHN1cHBvcnQiKTsK ICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgQ09NUFJFU1NJT05fTk9ORToKQEAgLTE4Myw2ICsy MjUsMTMgQEAgRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcykKIAkJCUVuZENvbXByZXNzb3JabGliKEFILCBjcyk7CiAjZWxzZQogCQkJZmF0YWwoIm5v dCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOworI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBD T01QUkVTU0lPTl9MWjQ6CisjaWZkZWYgSEFWRV9MSUJMWjQKKwkJCUVuZENvbXByZXNzb3JMWjQo QUgsIGNzKTsKKyNlbHNlCisJCQlmYXRhbCgibm90IGJ1aWx0IHdpdGggbHo0IHN1cHBvcnQiKTsK ICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgQ09NUFJFU1NJT05fTk9ORToKQEAgLTIxMywyMCAr MjYyLDIwIEBAIEluaXRDb21wcmVzc29yWmxpYihDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgbGV2 ZWwpCiAJenAtPm9wYXF1ZSA9IFpfTlVMTDsKIAogCS8qCi0JICogemxpYk91dFNpemUgaXMgdGhl IGJ1ZmZlciBzaXplIHdlIHRlbGwgemxpYiBpdCBjYW4gb3V0cHV0IHRvLiAgV2UKKwkgKiBvdXRz aXplIGlzIHRoZSBidWZmZXIgc2l6ZSB3ZSB0ZWxsIHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdl CiAJICogYWN0dWFsbHkgYWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUgYmVjYXVzZSBzb21lIHJvdXRp bmVzIHdhbnQgdG8gYXBwZW5kIGEKIAkgKiB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIg b3V0cHV0LgogCSAqLwotCWNzLT56bGliT3V0ID0gKGNoYXIgKikgcGdfbWFsbG9jKFpMSUJfT1VU X1NJWkUgKyAxKTsKLQljcy0+emxpYk91dFNpemUgPSBaTElCX09VVF9TSVpFOworCWNzLT5vdXRi dWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOworCWNzLT5vdXRzaXplID0gWkxJQl9P VVRfU0laRTsKIAogCWlmIChkZWZsYXRlSW5pdCh6cCwgbGV2ZWwpICE9IFpfT0spCiAJCWZhdGFs KCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsCiAJCQkgIHpw LT5tc2cpOwogCiAJLyogSnVzdCBiZSBwYXJhbm9pZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0 ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8KLQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBjcy0+ emxpYk91dDsKLQl6cC0+YXZhaWxfb3V0ID0gY3MtPnpsaWJPdXRTaXplOworCXpwLT5uZXh0X291 dCA9IGNzLT5vdXRidWY7CisJenAtPmF2YWlsX291dCA9IGNzLT5vdXRzaXplOwogfQogCiBzdGF0 aWMgdm9pZApAQCAtMjQzLDcgKzI5Miw3IEBAIEVuZENvbXByZXNzb3JabGliKEFyY2hpdmVIYW5k bGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQogCWlmIChkZWZsYXRlRW5kKHpwKSAhPSBaX09L KQogCQlmYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIHN0cmVhbTogJXMiLCB6cC0+ bXNnKTsKIAotCWZyZWUoY3MtPnpsaWJPdXQpOworCWZyZWUoY3MtPm91dGJ1Zik7CiAJZnJlZShj cy0+enApOwogfQogCkBAIC0yNTEsNyArMzAwLDcgQEAgc3RhdGljIHZvaWQKIERlZmxhdGVDb21w cmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywgYm9vbCBm bHVzaCkKIHsKIAl6X3N0cmVhbXAJenAgPSBjcy0+enA7Ci0JY2hhcgkgICAqb3V0ID0gY3MtPnps aWJPdXQ7CisJdm9pZAkgICAqb3V0ID0gY3MtPm91dGJ1ZjsKIAlpbnQJCQlyZXMgPSBaX09LOwog CiAJd2hpbGUgKGNzLT56cC0+YXZhaWxfaW4gIT0gMCB8fCBmbHVzaCkKQEAgLTI1OSw3ICszMDgs NyBAQCBEZWZsYXRlQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsIGJvb2wgZmx1c2gpCiAJCXJlcyA9IGRlZmxhdGUoenAsIGZsdXNoID8gWl9GSU5J U0ggOiBaX05PX0ZMVVNIKTsKIAkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FUlJPUikKIAkJCWZhdGFs KCJjb3VsZCBub3QgY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKLQkJaWYgKChmbHVzaCAm JiAoenAtPmF2YWlsX291dCA8IGNzLT56bGliT3V0U2l6ZSkpCisJCWlmICgoZmx1c2ggJiYgKHpw LT5hdmFpbF9vdXQgPCBjcy0+b3V0c2l6ZSkpCiAJCQl8fCAoenAtPmF2YWlsX291dCA9PSAwKQog CQkJfHwgKHpwLT5hdmFpbF9pbiAhPSAwKQogCQkJKQpAQCAtMjY5LDE4ICszMTgsMTggQEAgRGVm bGF0ZUNvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz LCBib29sIGZsdXNoKQogCQkJICogY2h1bmsgaXMgdGhlIEVPRiBtYXJrZXIgaW4gdGhlIGN1c3Rv bSBmb3JtYXQuIFRoaXMgc2hvdWxkIG5ldmVyCiAJCQkgKiBoYXBwZW4gYnV0Li4uCiAJCQkgKi8K LQkJCWlmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRTaXplKQorCQkJaWYgKHpwLT5hdmFp bF9vdXQgPCBjcy0+b3V0c2l6ZSkKIAkJCXsKIAkJCQkvKgogCQkJCSAqIEFueSB3cml0ZSBmdW5j dGlvbiBzaG91bGQgZG8gaXRzIG93biBlcnJvciBjaGVja2luZyBidXQgdG8KIAkJCQkgKiBtYWtl IHN1cmUgd2UgZG8gYSBjaGVjayBoZXJlIGFzIHdlbGwuLi4KIAkJCQkgKi8KLQkJCQlzaXplX3QJ CWxlbiA9IGNzLT56bGliT3V0U2l6ZSAtIHpwLT5hdmFpbF9vdXQ7CisJCQkJc2l6ZV90CQlsZW4g PSBjcy0+b3V0c2l6ZSAtIHpwLT5hdmFpbF9vdXQ7CiAKLQkJCQljcy0+d3JpdGVGKEFILCBvdXQs IGxlbik7CisJCQkJY3MtPndyaXRlRihBSCwgKGNoYXIgKilvdXQsIGxlbik7CiAJCQl9Ci0JCQl6 cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0JCQl6cC0+YXZhaWxfb3V0ID0gY3MtPnpsaWJP dXRTaXplOworCQkJenAtPm5leHRfb3V0ID0gb3V0OworCQkJenAtPmF2YWlsX291dCA9IGNzLT5v dXRzaXplOwogCQl9CiAKIAkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQpCkBAIC0zNjQsNiArNDEz LDcxIEBAIFJlYWREYXRhRnJvbUFyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVu YyByZWFkRikKIH0KICNlbmRpZgkJCQkJCQkvKiBIQVZFX0xJQlogKi8KIAorI2lmZGVmIEhBVkVf TElCTFo0CitzdGF0aWMgdm9pZAorSW5pdENvbXByZXNzb3JMWjQoQ29tcHJlc3NvclN0YXRlICpj cykKK3sKKwkvKiBXaWxsIGJlIGxhenkgaW5pdCdkICovCisJY3MtPm91dGJ1ZiA9IE5VTEw7CisJ Y3MtPm91dHNpemUgPSAwOworfQorCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3NvckxaNChBcmNo aXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlwZ19mcmVlKGNzLT5vdXRi dWYpOworCisJY3MtPm91dGJ1ZiA9IE5VTEw7CisJY3MtPm91dHNpemUgPSAwOworfQorCitzdGF0 aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1 bmMgcmVhZEYpCit7CisJTFo0X3N0cmVhbURlY29kZV90IGx6NFN0cmVhbURlY29kZTsKKwljaGFy CSAgICpidWY7CisJY2hhcgkgICAqZGVjYnVmOworCXNpemVfdAkJYnVmbGVuOworCXNpemVfdAkJ Y250OworCisJYnVmbGVuID0gKDQgKiAxMDI0KSArIDE7CisJYnVmID0gcGdfbWFsbG9jKGJ1Zmxl bik7CisJZGVjYnVmID0gcGdfbWFsbG9jKGJ1Zmxlbik7CisKKwlMWjRfc2V0U3RyZWFtRGVjb2Rl KCZsejRTdHJlYW1EZWNvZGUsIE5VTEwsIDApOworCisJd2hpbGUgKChjbnQgPSByZWFkRihBSCwg JmJ1ZiwgJmJ1ZmxlbikpKQorCXsKKwkJaW50CQlkZWNCeXRlcyA9IExaNF9kZWNvbXByZXNzX3Nh ZmVfY29udGludWUoJmx6NFN0cmVhbURlY29kZSwKKwkJCQkJCQkJCQkJCQkJYnVmLCBkZWNidWYs CisJCQkJCQkJCQkJCQkJCWNudCwgYnVmbGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVj Qnl0ZXMsIEFIKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitXcml0ZURhdGFUb0FyY2hpdmVMWjQo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCSAgY29uc3QgY2hh ciAqZGF0YSwgc2l6ZV90IGRMZW4pCit7CisJc2l6ZV90CQljb21wcmVzc2VkOworCXNpemVfdAkJ cmVxdWlyZWRzaXplID0gTFo0X2NvbXByZXNzQm91bmQoZExlbik7CisKKwlpZiAocmVxdWlyZWRz aXplID4gY3MtPm91dHNpemUpCisJeworCQljcy0+b3V0YnVmID0gcGdfcmVhbGxvYyhjcy0+b3V0 YnVmLCByZXF1aXJlZHNpemUpOworCQljcy0+b3V0c2l6ZSA9IHJlcXVpcmVkc2l6ZTsKKwl9CisK Kwljb21wcmVzc2VkID0gTFo0X2NvbXByZXNzX2RlZmF1bHQoZGF0YSwgY3MtPm91dGJ1ZiwKKwkJ CQkJCQkJCSAgZExlbiwgY3MtPm91dHNpemUpOworCisJaWYgKGNvbXByZXNzZWQgPD0gMCkKKwkJ ZmF0YWwoImZhaWxlZCB0byBMWjQgY29tcHJlc3MgZGF0YSIpOworCisJY3MtPndyaXRlRihBSCwg Y3MtPm91dGJ1ZiwgY29tcHJlc3NlZCk7Cit9CisjZW5kaWYJCQkJCQkJLyogSEFWRV9MSUJMWjQg Ki8KIAogLyoKICAqIEZ1bmN0aW9ucyBmb3IgdW5jb21wcmVzc2VkIG91dHB1dC4KQEAgLTQwMCw5 ICs1MTQsMzYgQEAgV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcywKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKyNpZmRl ZiBIQVZFX0xJQkxaNAogLyoKLSAqIGNmcCByZXByZXNlbnRzIGFuIG9wZW4gc3RyZWFtLCB3cmFw cGluZyB0aGUgdW5kZXJseWluZyBGSUxFIG9yIGd6RmlsZQotICogcG9pbnRlci4gVGhpcyBpcyBv cGFxdWUgdG8gdGhlIGNhbGxlcnMuCisgKiBTdGF0ZSBuZWVkZWQgZm9yIExaNCAoZGUpY29tcHJl c3Npb24gdXNpbmcgdGhlIGNmcCBBUEkuCisgKi8KK3R5cGVkZWYgc3RydWN0IExaNEZpbGUKK3sK KwlGSUxFCSpmcDsKKworCUxaNEZfcHJlZmVyZW5jZXNfdAkJCXByZWZzOworCisJTFo0Rl9jb21w cmVzc2lvbkNvbnRleHRfdAljdHg7CisJTFo0Rl9kZWNvbXByZXNzaW9uQ29udGV4dF90CWR0eDsK KworCWJvb2wJaW5pdGVkOworCWJvb2wJY29tcHJlc3Npbmc7CisKKwlzaXplX3QJYnVmbGVuOwor CWNoYXIgICAqYnVmZmVyOworCisJc2l6ZV90ICBvdmVyZmxvd2FsbG9jbGVuOworCXNpemVfdAlv dmVyZmxvd2xlbjsKKwljaGFyICAgKm92ZXJmbG93YnVmOworCisJc2l6ZV90CWVycmNvZGU7Cit9 IExaNEZpbGU7CisjZW5kaWYKKworLyoKKyAqIGNmcCByZXByZXNlbnRzIGFuIG9wZW4gc3RyZWFt LCB3cmFwcGluZyB0aGUgdW5kZXJseWluZyBGSUxFLCBnekZpbGUKKyAqIHBvaW50ZXIsIG9yIExa NEZpbGUgcG9pbnRlci4gVGhpcyBpcyBvcGFxdWUgdG8gdGhlIGNhbGxlcnMuCiAgKi8KIHN0cnVj dCBjZnAKIHsKQEAgLTQxMCw5ICs1NTEsNyBAQCBzdHJ1Y3QgY2ZwCiAJdm9pZAkgICAqZnA7CiB9 OwogCi0jaWZkZWYgSEFWRV9MSUJaCiBzdGF0aWMgaW50CWhhc1N1ZmZpeChjb25zdCBjaGFyICpm aWxlbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KTsKLSNlbmRpZgogCiAvKiBmcmVlKCkgd2l0aG91 dCBjaGFuZ2luZyBlcnJubzsgdXNlZnVsIGluIHNldmVyYWwgcGxhY2VzIGJlbG93ICovCiBzdGF0 aWMgdm9pZApAQCAtNDI0LDI2ICs1NjMsMzgwIEBAIGZyZWVfa2VlcF9lcnJubyh2b2lkICpwKQog CWVycm5vID0gc2F2ZV9lcnJubzsKIH0KIAorI2lmZGVmIEhBVkVfTElCTFo0CisvKgorICogTFo0 IGVxdWl2YWxlbnQgdG8gZmVvZigpIG9yIGd6ZW9mKCkuIFRoZSBlbmQgb2YgZmlsZQorICogaXMg cmVhY2hlZCBpZiB0aGVyZSBpcyBubyBkZWNvbXByZXNzZWQgb3V0cHV0IGluIHRoZQorICogb3Zl cmZsb3cgYnVmZmVyIGFuZCB0aGUgZW5kIG9mIHRoZSBmaWxlIGlzIHJlYWNoZWQuCisgKi8KK3N0 YXRpYyBpbnQKK0xaNEZpbGVfZW9mKExaNEZpbGUgKmZzKQoreworCXJldHVybiBmcy0+b3ZlcmZs b3dsZW4gPT0gMCAmJiBmZW9mKGZzLT5mcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK0xa NEZpbGVfZXJyb3IoTFo0RmlsZSAqZnMpCit7CisJY29uc3QgY2hhciAqZXJybXNnOworCisJaWYg KExaNEZfaXNFcnJvcihmcy0+ZXJyY29kZSkpCisJCWVycm1zZyA9IExaNEZfZ2V0RXJyb3JOYW1l KGZzLT5lcnJjb2RlKTsKKwllbHNlCisJCWVycm1zZyA9IHN0cmVycm9yKGVycm5vKTsKKworCXJl dHVybiBlcnJtc2c7Cit9CisKKy8qCisgKiBQcmVwYXJlIGFuIGFscmVhZHkgYWxsb2MnZWQgTFo0 RmlsZSBzdHJ1Y3QgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCisgKgorICogSXQgY3JlYXRlcyB0aGUg bmVzc2FyeSBjb250ZXh0cyBmb3IgdGhlIG9wZXJhdGlvbnMuIFdoZW4gY29tcHJlc3NpbmcsCisg KiBpdCBhZGRpdGlvbmFsbHkgd3JpdGVzIHRoZSBMWjQgaGVhZGVyIGluIHRoZSBvdXRwdXQgc3Ry ZWFtLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2luaXQoTFo0RmlsZSAqZnMsIGludCBzaXpl LCBib29sIGNvbXByZXNzaW5nKQoreworCXNpemVfdAlzdGF0dXM7CisKKwlpZiAoZnMtPmluaXRl ZCkKKwkJcmV0dXJuIDA7CisKKwlmcy0+Y29tcHJlc3NpbmcgPSBjb21wcmVzc2luZzsKKwlmcy0+ aW5pdGVkID0gdHJ1ZTsKKworCWlmIChmcy0+Y29tcHJlc3NpbmcpCisJeworCQlmcy0+YnVmbGVu ID0gTFo0Rl9jb21wcmVzc0JvdW5kKExaNF9JTl9TSVpFLCAmZnMtPnByZWZzKTsKKwkJaWYgKGZz LT5idWZsZW4gPCBMWjRGX0hFQURFUl9TSVpFX01BWCkKKwkJCWZzLT5idWZsZW4gPSBMWjRGX0hF QURFUl9TSVpFX01BWDsKKworCQlzdGF0dXMgPSBMWjRGX2NyZWF0ZUNvbXByZXNzaW9uQ29udGV4 dCgmZnMtPmN0eCwgTFo0Rl9WRVJTSU9OKTsKKwkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQor CQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJldHVybiAxOworCQl9CisKKwkJZnMt PmJ1ZmZlciA9IHBnX21hbGxvYyhmcy0+YnVmbGVuKTsKKwkJc3RhdHVzID0gTFo0Rl9jb21wcmVz c0JlZ2luKGZzLT5jdHgsIGZzLT5idWZmZXIsIGZzLT5idWZsZW4sICZmcy0+cHJlZnMpOworCisJ CWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7 CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVz LCBmcy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSBlcnJubyA/IDogRU5PU1BDOwor CQkJcmV0dXJuIDE7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJc3RhdHVzID0gTFo0Rl9jcmVhdGVE ZWNvbXByZXNzaW9uQ29udGV4dCgmZnMtPmR0eCwgTFo0Rl9WRVJTSU9OKTsKKwkJaWYgKExaNEZf aXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJldHVy biAxOworCQl9CisKKwkJZnMtPmJ1ZmxlbiA9IHNpemUgPiBMWjRfT1VUX1NJWkUgPyBzaXplIDog TFo0X09VVF9TSVpFOworCQlmcy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5idWZsZW4pOworCisJ CWZzLT5vdmVyZmxvd2FsbG9jbGVuID0gZnMtPmJ1ZmxlbjsKKwkJZnMtPm92ZXJmbG93YnVmID0g cGdfbWFsbG9jKGZzLT5vdmVyZmxvd2FsbG9jbGVuKTsKKwkJZnMtPm92ZXJmbG93bGVuID0gMDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgYWxyZWFkeSBkZWNvbXByZXNzZWQg Y29udGVudCBmcm9tIHRoZSBvdmVyZmxvdyBidWZmZXIgaW50byAncHRyJyB1cCB0bworICogJ3Np emUnIGJ5dGVzLCBpZiBhdmFpbGFibGUuIElmIHRoZSBlb2xfZmxhZyBpcyBzZXQsIHRoZW4gc3Rv cCBhdCB0aGUgZmlyc3QKKyAqIG9jY3VyYW5jZSBvZiB0aGUgbmV3IGxpbmUgY2hhciBwcmlvciB0 byAnc2l6ZScgYnl0ZXMuCisgKgorICogQW55IHVucmVhZCBjb250ZW50IGluIHRoZSBvdmVyZmxv dyBidWZmZXIsIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcuCisgKi8KK3N0YXRpYyBpbnQKK0xa NEZpbGVfcmVhZF9vdmVyZmxvdyhMWjRGaWxlICpmcywgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgYm9v bCBlb2xfZmxhZykKK3sKKwljaGFyICAgKnA7CisJaW50CQlyZWFkbGVuID0gMDsKKworCWlmIChm cy0+b3ZlcmZsb3dsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnMtPm92ZXJmbG93bGVu ID49IHNpemUpCisJCXJlYWRsZW4gPSBzaXplOworCWVsc2UKKwkJcmVhZGxlbiA9IGZzLT5vdmVy Zmxvd2xlbjsKKworCWlmIChlb2xfZmxhZyAmJiAocCA9IG1lbWNocihmcy0+b3ZlcmZsb3didWYs ICdcbicsIHJlYWRsZW4pKSkKKwkJcmVhZGxlbiA9IHAgLSBmcy0+b3ZlcmZsb3didWYgKyAxOyAv KiBJbmNsdWRlIHRoZSBsaW5lIHRlcm1pbmF0aW5nIGNoYXIgKi8KKworCW1lbWNweShwdHIsIGZz LT5vdmVyZmxvd2J1ZiwgcmVhZGxlbik7CisJZnMtPm92ZXJmbG93bGVuIC09IHJlYWRsZW47CisK KwlpZiAoZnMtPm92ZXJmbG93bGVuID4gMCkKKwkJbWVtbW92ZShmcy0+b3ZlcmZsb3didWYsIGZz LT5vdmVyZmxvd2J1ZiArIHJlYWRsZW4sIGZzLT5vdmVyZmxvd2xlbik7CisKKwlyZXR1cm4gcmVh ZGxlbjsKK30KKworLyoKKyAqIFRoZSB3b3JraG9yc2UgZm9yIHJlYWRpbmcgZGVjb21wcmVzc2Vk IGNvbnRlbnQgb3V0IG9mIGFuIExaNCBjb21wcmVzc2VkCisgKiBzdHJlYW0uCisgKgorICogSXQg d2lsbCByZWFkIHVwIHRvICdwdHJzaXplJyBkZWNvbXByZXNzZWQgY29udGVudCwgb3IgdXAgdG8g dGhlIG5ldyBsaW5lIGNoYXIKKyAqIGlmIGZvdW5kIGZpcnN0IHdoZW4gdGhlIGVvbF9mbGFnIGlz IHNldC4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZGVjb21wcmVzc2VkCisgKiBvdXRwdXQgZ2Vu ZXJhdGVkIGJ5IHJlYWRpbmcgYW55IGNvbXByZXNzZWQgaW5wdXQgdmlhIHRoZSBMWjRGIEFQSSwg ZXhjZWVkcworICogJ3B0cnNpemUnLiBBbnkgZXhjZWVkaW5nIGRlY29tcHJlc3NlZCBjb250ZW50 IGlzIHN0b3JlZCBhdCBhbiBvdmVyZmxvdworICogYnVmZmVyIHdpdGhpbiBMWjRGaWxlLiBPZiBj b3Vyc2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgd2lsbCBmaXJzdAorICogdHJ5 IHRvIGNvbnN1bWUgYW55IGRlY29tcHJlc3NlZCBjb250ZW50IGFscmVhZHkgcHJlc2VudCBpbiB0 aGUgb3ZlcmZsb3cKKyAqIGJ1ZmZlciwgYmVmb3JlIGRlY29tcHJlc3NpbmcgbmV3IGNvbnRlbnQu CisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVhZChMWjRGaWxlICpmcywgdm9pZCAqcHRyLCBp bnQgcHRyc2l6ZSwgYm9vbCBlb2xfZmxhZykKK3sKKwlzaXplX3QJZHNpemUgPSAwOworCXNpemVf dCAgcnNpemU7CisJc2l6ZV90CXNpemUgPSBwdHJzaXplOworCWJvb2wJZW9sX2ZvdW5kID0gZmFs c2U7CisKKwl2b2lkICpyZWFkYnVmOworCisJLyogTGF6eSBpbml0ICovCisJaWYgKCFmcy0+aW5p dGVkICYmIExaNEZpbGVfaW5pdChmcywgc2l6ZSwgZmFsc2UgLyogZGVjb21wcmVzc2luZyAqLykp CisJCXJldHVybiAtMTsKKworCS8qIFZlcmZpeSB0aGF0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBp biB0aGUgb3V0YnVmICovCisJaWYgKHNpemUgPiBmcy0+YnVmbGVuKQorCXsKKwkJZnMtPmJ1Zmxl biA9IHNpemU7CisJCWZzLT5idWZmZXIgPSBwZ19yZWFsbG9jKGZzLT5idWZmZXIsIHNpemUpOwor CX0KKworCS8qIHVzZSBhbHJlYWR5IGRlY29tcHJlc3NlZCBjb250ZW50IGlmIGF2YWlsYWJsZSAq LworCWRzaXplID0gTFo0RmlsZV9yZWFkX292ZXJmbG93KGZzLCBwdHIsIHNpemUsIGVvbF9mbGFn KTsKKwlpZiAoZHNpemUgPT0gc2l6ZSB8fCAoZW9sX2ZsYWcgJiYgbWVtY2hyKHB0ciwgJ1xuJywg ZHNpemUpKSkKKwkJcmV0dXJuIGRzaXplOworCisJcmVhZGJ1ZiA9IHBnX21hbGxvYyhzaXplKTsK KworCWRvCisJeworCQljaGFyICAgKnJwOworCQljaGFyICAgKnJlbmQ7CisKKwkJcnNpemUgPSBm cmVhZChyZWFkYnVmLCAxLCBzaXplLCBmcy0+ZnApOworCQlpZiAocnNpemUgPCBzaXplICYmICFm ZW9mKGZzLT5mcCkpCisJCQlyZXR1cm4gLTE7CisKKwkJcnAgPSAoY2hhciAqKXJlYWRidWY7CisJ CXJlbmQgPSAoY2hhciAqKXJlYWRidWYgKyByc2l6ZTsKKworCQl3aGlsZSAocnAgPCByZW5kKQor CQl7CisJCQlzaXplX3QJc3RhdHVzOworCQkJc2l6ZV90CW91dGxlbiA9IGZzLT5idWZsZW47CisJ CQlzaXplX3QJcmVhZF9yZW1haW4gPSByZW5kIC0gcnA7CisKKwkJCW1lbXNldChmcy0+YnVmZmVy LCAwLCBvdXRsZW4pOworCQkJc3RhdHVzID0gTFo0Rl9kZWNvbXByZXNzKGZzLT5kdHgsIGZzLT5i dWZmZXIsICZvdXRsZW4sCisJCQkJCQkJCQkgcnAsICZyZWFkX3JlbWFpbiwgTlVMTCk7CisJCQlp ZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQl7CisJCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7 CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlycCArPSByZWFkX3JlbWFpbjsKKworCQkJLyoK KwkJCSAqIGZpbGwgaW4gd2hhdCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gcHRyCisJCQkgKiBpZiB0 aGUgZW9sIGZsYWcgaXMgc2V0LCBlaXRoZXIgc2tpcCBpZiBvbmUgYWxyZWFkeSBmb3VuZCBvciBm aWxsIHVwIHRvIEVPTAorCQkJICogaWYgcHJlc2VudCBpbiB0aGUgb3V0YnVmCisJCQkgKi8KKwkJ CWlmIChvdXRsZW4gPiAwICYmIGRzaXplIDwgc2l6ZSAmJiBlb2xfZm91bmQgPT0gZmFsc2UpCisJ CQl7CisJCQkJY2hhciAgICpwOworCQkJCXNpemVfdAlsaWIgPSAoZW9sX2ZsYWcgPT0gMCkgPyBz aXplIC0gZHNpemUgOiBzaXplIC0xIC1kc2l6ZTsKKwkJCQlzaXplX3QJbGVuID0gb3V0bGVuIDwg bGliID8gb3V0bGVuIDogbGliOworCisJCQkJaWYgKGVvbF9mbGFnID09IHRydWUgJiYgKHAgPSBt ZW1jaHIoZnMtPmJ1ZmZlciwgJ1xuJywgb3V0bGVuKSkgJiYKKwkJCQkJKHNpemVfdCkocCAtIGZz LT5idWZmZXIgKyAxKSA8PSBsZW4pCisJCQkJeworCQkJCQlsZW4gPSBwIC0gZnMtPmJ1ZmZlciAr IDE7CisJCQkJCWVvbF9mb3VuZCA9IHRydWU7CisJCQkJfQorCisJCQkJbWVtY3B5KChjaGFyICop cHRyICsgZHNpemUsIGZzLT5idWZmZXIsIGxlbik7CisJCQkJZHNpemUgKz0gbGVuOworCisJCQkJ LyogbW92ZSB3aGF0IGRpZCBub3QgZml0LCBpZiBhbnksIGF0IHRoZSBiZWdpbmluZyBvZiB0aGUg YnVmICovCisJCQkJaWYgKGxlbiA8IG91dGxlbikKKwkJCQkJbWVtbW92ZShmcy0+YnVmZmVyLCBm cy0+YnVmZmVyICsgbGVuLCBvdXRsZW4gLSBsZW4pOworCQkJCW91dGxlbiAtPSBsZW47CisJCQl9 CisKKwkJCS8qIGlmIHRoZXJlIGlzIGF2YWlsYWJsZSBvdXRwdXQsIHNhdmUgaXQgKi8KKwkJCWlm IChvdXRsZW4gPiAwKQorCQkJeworCQkJCXdoaWxlIChmcy0+b3ZlcmZsb3dsZW4gKyBvdXRsZW4g PiBmcy0+b3ZlcmZsb3dhbGxvY2xlbikKKwkJCQl7CisJCQkJCWZzLT5vdmVyZmxvd2FsbG9jbGVu ICo9IDI7CisJCQkJCWZzLT5vdmVyZmxvd2J1ZiA9IHBnX3JlYWxsb2MoZnMtPm92ZXJmbG93YnVm LCBmcy0+b3ZlcmZsb3dhbGxvY2xlbik7CisJCQkJfQorCisJCQkJbWVtY3B5KGZzLT5vdmVyZmxv d2J1ZiArIGZzLT5vdmVyZmxvd2xlbiwgZnMtPmJ1ZmZlciwgb3V0bGVuKTsKKwkJCQlmcy0+b3Zl cmZsb3dsZW4gKz0gb3V0bGVuOworCQkJfQorCQl9CisJfSB3aGlsZSAocnNpemUgPT0gc2l6ZSAm JiBkc2l6ZSA8IHNpemUgJiYgZW9sX2ZvdW5kID09IDApOworCisJcGdfZnJlZShyZWFkYnVmKTsK KworCXJldHVybiAoaW50KWRzaXplOworfQorCisvKgorICogQ29tcHJlc3Mgc2l6ZSBieXRlcyBm cm9tIHB0ciBhbmQgd3JpdGUgdGhlbSB0byB0aGUgc3RyZWFtLgorICovCitzdGF0aWMgaW50CitM WjRGaWxlX3dyaXRlKExaNEZpbGUgKmZzLCBjb25zdCB2b2lkICpwdHIsIGludCBzaXplKQorewor CXNpemVfdAlzdGF0dXM7CisJaW50CQlyZW1haW5pbmcgPSBzaXplOworCisJaWYgKCFmcy0+aW5p dGVkICYmIExaNEZpbGVfaW5pdChmcywgc2l6ZSwgdHJ1ZSkpCisJCXJldHVybiAtMTsKKworCXdo aWxlIChyZW1haW5pbmcgPiAwKQorCXsKKwkJaW50CQljaHVuayA9IHJlbWFpbmluZyA8IExaNF9J Tl9TSVpFID8gcmVtYWluaW5nIDogTFo0X0lOX1NJWkU7CisJCXJlbWFpbmluZyAtPSBjaHVuazsK KworCQlzdGF0dXMgPSBMWjRGX2NvbXByZXNzVXBkYXRlKGZzLT5jdHgsIGZzLT5idWZmZXIsIGZz LT5idWZsZW4sCisJCQkJCQkJCQkgcHRyLCBjaHVuaywgTlVMTCk7CisJCWlmIChMWjRGX2lzRXJy b3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gLTE7 CisJCX0KKworCQlpZiAoZndyaXRlKGZzLT5idWZmZXIsIDEsIHN0YXR1cywgZnMtPmZwKSAhPSBz dGF0dXMpCisJCXsKKwkJCWVycm5vID0gZXJybm8gPyA6IEVOT1NQQzsKKwkJCXJldHVybiAxOwor CQl9CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisKKy8qCisgKiBmZ2V0YygpIGFuZCBnemdldGMo KSBlcXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAq Lworc3RhdGljIGludAorTFo0RmlsZV9nZXRjKExaNEZpbGUgKmZzKQoreworCXVuc2lnbmVkIGNo YXIgYzsKKworCWlmIChMWjRGaWxlX3JlYWQoZnMsICZjLCAxLCBmYWxzZSkgIT0gMSkKKwkJcmV0 dXJuIEVPRjsKKworCXJldHVybiBjOworfQorCisvKgorICogZmdldHMoKSBhbmQgZ3pnZXRzKCkg ZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8K K3N0YXRpYyBjaGFyICoKK0xaNEZpbGVfZ2V0cyhMWjRGaWxlICpmcywgY2hhciAqYnVmLCBpbnQg bGVuKQoreworCXNpemVfdAlkc2l6ZTsKKworCWRzaXplID0gTFo0RmlsZV9yZWFkKGZzLCBidWYs IGxlbiwgdHJ1ZSk7CisJaWYgKGRzaXplIDwgMCkKKwkJZmF0YWwoImZhaWxlZCB0byByZWFkIGZy b20gYXJjaGl2ZSAlcyIsIExaNEZpbGVfZXJyb3IoZnMpKTsKKworCS8qIERvbmUgcmVhZGluZyAq LworCWlmIChkc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBidWY7Cit9CisK Ky8qCisgKiBGaW5hbGl6ZSAoZGUpY29tcHJlc3Npb24gb2YgYSBzdHJlYW0uIFdoZW4gY29tcHJl c3NpbmcgaXQgd2lsbCB3cml0ZSBhbnkKKyAqIHJlbWFpbmluZyBjb250ZW50IGFuZC9vciBnZW5l cmF0ZWQgZm9vdGVyIGZyb20gdGhlIExaNCBBUEkuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVf Y2xvc2UoTFo0RmlsZSAqZnMpCit7CisJRklMRQkqZnA7CisJc2l6ZV90CXN0YXR1czsKKwlpbnQJ CXJldDsKKworCWZwID0gZnMtPmZwOworCWlmIChmcy0+aW5pdGVkKQorCXsKKwkJaWYgKGZzLT5j b21wcmVzc2luZykKKwkJeworCQkJc3RhdHVzID0gTFo0Rl9jb21wcmVzc0VuZChmcy0+Y3R4LCBm cy0+YnVmZmVyLCBmcy0+YnVmbGVuLCBOVUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVz KSkKKwkJCQlmYXRhbCgiZmFpbGVkIHRvIGVuZCBjb21wcmVzc2lvbjogJXMiLCBMWjRGX2dldEVy cm9yTmFtZShzdGF0dXMpKTsKKwkJCWVsc2UgaWYgKChyZXQgPSBmd3JpdGUoZnMtPmJ1ZmZlciwg MSwgc3RhdHVzLCBmcy0+ZnApKSAhPSBzdGF0dXMpCisJCQl7CisJCQkJZXJybm8gPSBlcnJubyA/ IDogRU5PU1BDOworCQkJCVdSSVRFX0VSUk9SX0VYSVQ7CisJCQl9CisKKwkJCXN0YXR1cyA9IExa NEZfZnJlZUNvbXByZXNzaW9uQ29udGV4dChmcy0+Y3R4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Io c3RhdHVzKSkKKwkJCQlmYXRhbCgiZmFpbGVkIHRvIGVuZCBjb21wcmVzc2lvbjogJXMiLCBMWjRG X2dldEVycm9yTmFtZShzdGF0dXMpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXN0YXR1cyA9IExa NEZfZnJlZURlY29tcHJlc3Npb25Db250ZXh0KGZzLT5kdHgpOworCQkJaWYgKExaNEZfaXNFcnJv cihzdGF0dXMpKQorCQkJCWZhdGFsKCJmYWlsZWQgdG8gZW5kIGRlY29tcHJlc3Npb246ICVzIiwg TFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCQlwZ19mcmVlKGZzLT5vdmVyZmxvd2J1Zik7 CisJCX0KKworCQlwZ19mcmVlKGZzLT5idWZmZXIpOworCX0KKworCXBnX2ZyZWUoZnMpOworCisJ cmV0dXJuIGZjbG9zZShmcCk7Cit9CisjZW5kaWYKKwogLyoKICAqIE9wZW4gYSBmaWxlIGZvciBy ZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQKICAq IGJlIGVpdGhlciAiciIgb3IgInJiIi4KICAqCi0gKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9l cyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUgIi5neiIgc3VmZml4IChpZiAncGF0aCcKLSAqIGRv ZXNuJ3QgYWxyZWFkeSBoYXZlIGl0KSBhbmQgdHJ5IGFnYWluLiBTbyBpZiB5b3UgcGFzcyAiZm9v IiBhcyAncGF0aCcsCi0gKiB0aGlzIHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IgImZvby5neiIu CisgKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9lcyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUg InsuZ3osLmx6NH0iIHN1ZmZpeCAoaWYKKyAqICdwYXRoJyBkb2Vzbid0IGFscmVhZHkgaGF2ZSBp dCkgYW5kIHRyeSBhZ2Fpbi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLAorICogdGhp cyB3aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiIG9yICJmb28ubHo0IiwgdHJ5aW5n IGluIHRoYXQgb3JkZXIuCiAgKgogICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBl cnJvciBjb2RlIGluIGVycm5vLgorICoKICAqLwogY2ZwICoKIGNmb3Blbl9yZWFkKGNvbnN0IGNo YXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiB7Ci0JY2ZwCQkgICAqZnA7CisJY2ZwCQkgICAq ZnAgPSBOVUxMOwogCi0jaWZkZWYgSEFWRV9MSUJaCiAJaWYgKGhhc1N1ZmZpeChwYXRoLCAiLmd6 IikpCiAJCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIENPTVBSRVNTSU9OX0daSVAsIDApOworCWVs c2UgaWYgKGhhc1N1ZmZpeChwYXRoLCAiLmx6NCIpKQorCQlmcCA9IGNmb3BlbihwYXRoLCBtb2Rl LCBDT01QUkVTU0lPTl9MWjQsIDApOwogCWVsc2UKLSNlbmRpZgogCXsKIAkJZnAgPSBjZm9wZW4o cGF0aCwgbW9kZSwgQ09NUFJFU1NJT05fTk9ORSwgMCk7CiAjaWZkZWYgSEFWRV9MSUJaCkBAIC00 NTUsOCArOTQ4LDE5IEBAIGNmb3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIg Km1vZGUpCiAJCQlmcCA9IGNmb3BlbihmbmFtZSwgbW9kZSwgQ09NUFJFU1NJT05fR1pJUCwgMCk7 CiAJCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwogCQl9CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xJ QkxaNAorCQlpZiAoZnAgPT0gTlVMTCkKKwkJeworCQkJY2hhcgkgICAqZm5hbWU7CisKKwkJCWZu YW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOworCQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1v ZGUsIENPTVBSRVNTSU9OX0xaNCwgMCk7CisJCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOworCQl9 CiAjZW5kaWYKIAl9CisKIAlyZXR1cm4gZnA7CiB9CiAKQEAgLTQ2NSw5ICs5NjksMTMgQEAgY2Zv cGVuX3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKICAqIGJlIGEgZmls ZW1vZGUgYXMgYWNjZXB0ZWQgYnkgZm9wZW4oKSBhbmQgZ3pvcGVuKCkgdGhhdCBpbmRpY2F0ZXMg d3JpdGluZwogICogKCJ3IiwgIndiIiwgImEiLCBvciAiYWIiKS4KICAqCi0gKiBJZiAnY29tcHJl c3Npb24nIGlzIG5vbi16ZXJvLCBhIGd6aXAgY29tcHJlc3NlZCBzdHJlYW0gaXMgb3BlbmVkLCBh bmQKLSAqICdjb21wcmVzc2lvbicgaW5kaWNhdGVzIHRoZSBjb21wcmVzc2lvbiBsZXZlbCB1c2Vk LiBUaGUgIi5neiIgc3VmZml4Ci0gKiBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvICdwYXRoJyBp biB0aGF0IGNhc2UuCisgKiBXaGVuICdjb21wcmVzc2lvbk1ldGhvZCcgaW5kaWNhdGVzIGd6aXAs IGEgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbSBpcyBvcGVuZWQsCisgKiBhbmQgJ2NvbXByZXNzaW9u TGV2ZWwnIGlzIHVzZWQuIFRoZSAiLmd6IiBzdWZmaXggaXMgYXV0b21hdGljYWxseSBhZGRlZCB0 bworICogJ3BhdGgnIGluIHRoYXQgY2FzZS4gVGhlIHNhbWUgYXBwbGllcyB3aGVuICdjb21wcmVz c2lvbk1ldGhvZCcgaW5kaWNhdGVzIGx6NCwKKyAqIGJ1dCB0aGVuIHRoZSAiLmx6NCIgc3VmZml4 IGlzIGFkZGVkIGluc3RlYWQuCisgKgorICogSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmls aXR5IHRvIHZlcmlmeSB0aGF0IHRoZSByZXF1ZXN0ZWQKKyAqICdjb21wcmVzc2lvbk1ldGhvZCcg aXMgc3VwcG9ydGVkIGJ5IHRoZSBidWlsZC4KICAqCiAgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVM TCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCiAgKi8KQEAgLTQ3NiwyMyArOTg0LDQ0IEBA IGNmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCQkJIENv bXByZXNzaW9uTWV0aG9kIGNvbXByZXNzaW9uTWV0aG9kLAogCQkJIGludCBjb21wcmVzc2lvbkxl dmVsKQogewotCWNmcAkJICAgKmZwOworCWNmcAkJICAgKmZwID0gTlVMTDsKIAotCWlmIChjb21w cmVzc2lvbk1ldGhvZCA9PSBDT01QUkVTU0lPTl9OT05FKQotCQlmcCA9IGNmb3BlbihwYXRoLCBt b2RlLCBjb21wcmVzc2lvbk1ldGhvZCwgMCk7Ci0JZWxzZQorCXN3aXRjaCAoY29tcHJlc3Npb25N ZXRob2QpCiAJeworCQljYXNlIENPTVBSRVNTSU9OX05PTkU6CisJCQlmcCA9IGNmb3BlbihwYXRo LCBtb2RlLCBjb21wcmVzc2lvbk1ldGhvZCwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBDT01QUkVT U0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElCWgotCQljaGFyCSAgICpmbmFtZTsKKwkJCXsKKwkJ CQljaGFyCSAgICpmbmFtZTsKIAotCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwot CQlmcCA9IGNmb3BlbihmbmFtZSwgbW9kZSwgY29tcHJlc3Npb25NZXRob2QsIGNvbXByZXNzaW9u TGV2ZWwpOwotCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOworCQkJCWZuYW1lID0gcHNwcmludGYo IiVzLmd6IiwgcGF0aCk7CisJCQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzaW9u TWV0aG9kLCBjb21wcmVzc2lvbkxldmVsKTsKKwkJCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwor CQkJfQogI2Vsc2UKLQkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwotCQlm cCA9IE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCWZhdGFsKCJub3QgYnVp bHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgQ09NUFJF U1NJT05fTFo0OgorI2lmZGVmIEhBVkVfTElCTFo0CisJCQl7CisJCQkJY2hhcgkgICAqZm5hbWU7 CisKKwkJCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5sejQiLCBwYXRoKTsKKwkJCQlmcCA9IGNmb3Bl bihmbmFtZSwgbW9kZSwgY29tcHJlc3Npb25NZXRob2QsIGNvbXByZXNzaW9uTGV2ZWwpOworCQkJ CWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CisJCQl9CisjZWxzZQorCQkJZmF0YWwoIm5vdCBidWls dCB3aXRoIExaNCBzdXBwb3J0Iik7CisjZW5kaWYKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ ZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CisKIAly ZXR1cm4gZnA7CiB9CiAKQEAgLTUwOSw3ICsxMDM4LDcgQEAgc3RhdGljIGNmcCAqCiBjZm9wZW5f aW50ZXJuYWwoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAogCQkJ CUNvbXByZXNzaW9uTWV0aG9kIGNvbXByZXNzaW9uTWV0aG9kLCBpbnQgY29tcHJlc3Npb25MZXZl bCkKIHsKLQljZnAJCSAgICpmcCA9IHBnX21hbGxvYyhzaXplb2YoY2ZwKSk7CisJY2ZwCQkgICAq ZnAgPSBwZ19tYWxsb2MwKHNpemVvZihjZnApKTsKIAogCWZwLT5jb21wcmVzc2lvbk1ldGhvZCA9 IGNvbXByZXNzaW9uTWV0aG9kOwogCkBAIC01NjAsNiArMTA4OSwyNyBAQCBjZm9wZW5faW50ZXJu YWwoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAogCQkJfQogI2Vs c2UKIAkJCWZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKKyNlbmRpZgorCQkJ YnJlYWs7CisJCWNhc2UgQ09NUFJFU1NJT05fTFo0OgorI2lmZGVmIEhBVkVfTElCTFo0CisJCQl7 CisJCQkJTFo0RmlsZSAqbHo0ZnAgPSBwZ19tYWxsb2MwKHNpemVvZigqbHo0ZnApKTsKKwkJCQlp ZiAoZmQgPj0gMCkKKwkJCQkJbHo0ZnAtPmZwID0gZmRvcGVuKGZkLCBtb2RlKTsKKwkJCQllbHNl CisJCQkJCWx6NGZwLT5mcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCQkJCWlmIChsejRmcC0+ZnAg PT0gTlVMTCkKKwkJCQl7CisJCQkJCWZyZWVfa2VlcF9lcnJubyhsejRmcCk7CisJCQkJCWZwID0g TlVMTDsKKwkJCQl9CisJCQkJaWYgKGNvbXByZXNzaW9uTGV2ZWwgPj0gMCkKKwkJCQkJbHo0ZnAt PnByZWZzLmNvbXByZXNzaW9uTGV2ZWwgPSBjb21wcmVzc2lvbkxldmVsOworCQkJCWZwLT5mcCA9 IGx6NGZwOworCQkJfQorI2Vsc2UKKwkJCWZhdGFsKCJub3QgYnVpbHQgd2l0aCBMWjQgc3VwcG9y dCIpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTU4MCw4ICsxMTMwLDggQEAg Y2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAKIGNmcCAqCiBjZmRv cGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKLQkgICBDb21wcmVzc2lvbk1ldGhvZCBjb21w cmVzc2lvbk1ldGhvZCwKLQkgICBpbnQgY29tcHJlc3Npb25MZXZlbCkKKwkJQ29tcHJlc3Npb25N ZXRob2QgY29tcHJlc3Npb25NZXRob2QsCisJCWludCBjb21wcmVzc2lvbkxldmVsKQogewogCXJl dHVybiBjZm9wZW5faW50ZXJuYWwoTlVMTCwgZmQsIG1vZGUsIGNvbXByZXNzaW9uTWV0aG9kLCBj b21wcmVzc2lvbkxldmVsKTsKIH0KQEAgLTYxNyw3ICsxMTY3LDE2IEBAIGNmcmVhZCh2b2lkICpw dHIsIGludCBzaXplLCBjZnAgKmZwKQogCQkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3Vw cG9ydCIpOwogI2VuZGlmCiAJCQlicmVhazsKLQorCQljYXNlIENPTVBSRVNTSU9OX0xaNDoKKyNp ZmRlZiBIQVZFX0xJQkxaNAorCQkJcmV0ID0gTFo0RmlsZV9yZWFkKGZwLT5mcCwgcHRyLCBzaXpl LCBmYWxzZSk7CisJCQlpZiAocmV0ICE9IHNpemUgJiYgIUxaNEZpbGVfZW9mKGZwLT5mcCkpCisJ CQkJZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAorCQkJCQkgIExa NEZpbGVfZXJyb3IoZnAtPmZwKSk7CisjZWxzZQorCQkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIExa NCBzdXBwb3J0Iik7CisjZW5kaWYKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZmF0YWwoImlu dmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CiAJCQlicmVhazsKQEAgLTY0MSw2ICsxMjAwLDEz IEBAIGNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKIAkJCXJldCA9 IGd6d3JpdGUoZnAtPmZwLCBwdHIsIHNpemUpOwogI2Vsc2UKIAkJCWZhdGFsKCJub3QgYnVpbHQg d2l0aCB6bGliIHN1cHBvcnQiKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgQ09NUFJFU1NJ T05fTFo0OgorI2lmZGVmIEhBVkVfTElCTFo0CisJCQlyZXQgPSBMWjRGaWxlX3dyaXRlKGZwLT5m cCwgcHRyLCBzaXplKTsKKyNlbHNlCisJCQlmYXRhbCgibm90IGJ1aWx0IHdpdGggTFo0IHN1cHBv cnQiKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC02NzYsNiArMTI0MiwyMCBA QCBjZmdldGMoY2ZwICpmcCkKIAkJCX0KICNlbHNlCiAJCQlmYXRhbCgibm90IGJ1aWx0IHdpdGgg emxpYiBzdXBwb3J0Iik7CisjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIENPTVBSRVNTSU9OX0xa NDoKKyNpZmRlZiBIQVZFX0xJQkxaNAorCQkJcmV0ID0gTFo0RmlsZV9nZXRjKGZwLT5mcCk7CisJ CQlpZiAocmV0ID09IEVPRikKKwkJCXsKKwkJCQlpZiAoIUxaNEZpbGVfZW9mKGZwLT5mcCkpCisJ CQkJCWZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3Io ZXJybm8pKTsKKwkJCQllbHNlCisJCQkJCWZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0 IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJCQl9CisjZWxzZQorCQkJZmF0YWwoIm5vdCBidWlsdCB3 aXRoIExaNCBzdXBwb3J0Iik7CiAjZW5kaWYKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNjk1 LDEzICsxMjc1LDE5IEBAIGNmZ2V0cyhjZnAgKmZwLCBjaGFyICpidWYsIGludCBsZW4pCiAJewog CQljYXNlIENPTVBSRVNTSU9OX05PTkU6CiAJCQlyZXQgPSBmZ2V0cyhidWYsIGxlbiwgZnAtPmZw KTsKLQogCQkJYnJlYWs7CiAJCWNhc2UgQ09NUFJFU1NJT05fR1pJUDoKICNpZmRlZiBIQVZFX0xJ QloKIAkJCXJldCA9IGd6Z2V0cyhmcC0+ZnAsIGJ1ZiwgbGVuKTsKICNlbHNlCiAJCQlmYXRhbCgi bm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CisjZW5kaWYKKwkJCWJyZWFrOworCQljYXNl IENPTVBSRVNTSU9OX0xaNDoKKyNpZmRlZiBIQVZFX0xJQkxaNAorCQkJcmV0ID0gTFo0RmlsZV9n ZXRzKGZwLT5mcCwgYnVmLCBsZW4pOworI2Vsc2UKKwkJCWZhdGFsKCJub3QgYnVpbHQgd2l0aCBM WjQgc3VwcG9ydCIpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTczNiw2ICsx MzIyLDE0IEBAIGNmY2xvc2UoY2ZwICpmcCkKIAkJCWZwLT5mcCA9IE5VTEw7CiAjZWxzZQogCQkJ ZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOworI2VuZGlmCisJCQlicmVhazsK KwkJY2FzZSBDT01QUkVTU0lPTl9MWjQ6CisjaWZkZWYgSEFWRV9MSUJMWjQKKwkJCXJldCA9IExa NEZpbGVfY2xvc2UoZnAtPmZwKTsKKwkJCWZwLT5mcCA9IE5VTEw7CisjZWxzZQorCQkJZmF0YWwo Im5vdCBidWlsdCB3aXRoIExaNCBzdXBwb3J0Iik7CiAjZW5kaWYKIAkJCWJyZWFrOwogCQlkZWZh dWx0OgpAQCAtNzY0LDYgKzEzNTgsMTMgQEAgY2Zlb2YoY2ZwICpmcCkKIAkJCXJldCA9IGd6ZW9m KGZwLT5mcCk7CiAjZWxzZQogCQkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIp OworI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBDT01QUkVTU0lPTl9MWjQ6CisjaWZkZWYgSEFW RV9MSUJMWjQKKwkJCXJldCA9IExaNEZpbGVfZW9mKGZwLT5mcCk7CisjZWxzZQorCQkJZmF0YWwo Im5vdCBidWlsdCB3aXRoIExaNCBzdXBwb3J0Iik7CiAjZW5kaWYKIAkJCWJyZWFrOwogCQlkZWZh dWx0OgpAQCAtNzc3LDIzICsxMzc4LDQyIEBAIGNmZW9mKGNmcCAqZnApCiBjb25zdCBjaGFyICoK IGdldF9jZnBfZXJyb3IoY2ZwICpmcCkKIHsKLQlpZiAoZnAtPmNvbXByZXNzaW9uTWV0aG9kID09 IENPTVBSRVNTSU9OX0daSVApCisJY29uc3QgY2hhciAqZXJybXNnID0gTlVMTDsKKworCXN3aXRj aChmcC0+Y29tcHJlc3Npb25NZXRob2QpCiAJeworCQljYXNlIENPTVBSRVNTSU9OX05PTkU6CisJ CQllcnJtc2cgPSBzdHJlcnJvcihlcnJubyk7CisKKwkJCWJyZWFrOworCQljYXNlIENPTVBSRVNT SU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JCWludAkJCWVycm51bTsKLQkJY29uc3QgY2hh ciAqZXJybXNnID0gZ3plcnJvcihmcC0+ZnAsICZlcnJudW0pOworCQkJeworCQkJCWludAkJCWVy cm51bTsKKwkJCQllcnJtc2cgPSBnemVycm9yKGZwLT5mcCwgJmVycm51bSk7CiAKLQkJaWYgKGVy cm51bSAhPSBaX0VSUk5PKQotCQkJcmV0dXJuIGVycm1zZzsKKwkJCQlpZiAoZXJybnVtID09IFpf RVJSTk8pCisJCQkJCWVycm1zZyA9IHN0cmVycm9yKGVycm5vKTsKKwkJCX0KICNlbHNlCi0JCWZh dGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKKwkJCWZhdGFsKCJub3QgYnVpbHQg d2l0aCB6bGliIHN1cHBvcnQiKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgQ09NUFJFU1NJ T05fTFo0OgorI2lmZGVmIEhBVkVfTElCTFo0CisJCQllcnJtc2cgPSBMWjRGaWxlX2Vycm9yKGZw LT5mcCk7CisjZWxzZQorCQkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIExaNCBzdXBwb3J0Iik7CiAj ZW5kaWYKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmF0YWwoImludmFsaWQgY29tcHJlc3Np b24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwor CXJldHVybiBlcnJtc2c7CiB9CiAKLSNpZmRlZiBIQVZFX0xJQloKIHN0YXRpYyBpbnQKIGhhc1N1 ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KQogewpAQCAtODA3 LDUgKzE0MjcsMyBAQCBoYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIg KnN1ZmZpeCkKIAkJCQkgIHN1ZmZpeCwKIAkJCQkgIHN1ZmZpeGxlbikgPT0gMDsKIH0KLQotI2Vu ZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwLmgKaW5kZXggZDlmNmM5YTA4Ny4uYzQ0M2U2OThmOSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXAuaApAQCAtNzgsNiArNzgsNyBAQCBlbnVtIF9kdW1wUHJlcGFyZWRRdWVyaWVzCiB0eXBl ZGVmIGVudW0gX2NvbXByZXNzaW9uTWV0aG9kCiB7CiAJQ09NUFJFU1NJT05fR1pJUCwKKwlDT01Q UkVTU0lPTl9MWjQsCiAJQ09NUFJFU1NJT05fTk9ORSwKIAlDT01QUkVTU0lPTl9JTlZBTElECiB9 IENvbXByZXNzaW9uTWV0aG9kOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4 IDdkOTY0NDZmMWEuLmU2ZjcyNzUzNGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMKQEAgLTM1Myw2ICszNTMsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJQXJj aGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMg KnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CiAJYm9vbAkJcGFyYWxsZWxfbW9kZTsKKwlib29sCQlz dXBwb3J0c19jb21wcmVzc2lvbjsKIAlUb2NFbnRyeSAgICp0ZTsKIAljZnAJCSAgICpzYXY7CiAK QEAgLTM4MiwxNyArMzgzLDI3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkvKgog CSAqIE1ha2Ugc3VyZSB3ZSB3b24ndCBuZWVkIChkZSljb21wcmVzc2lvbiB3ZSBoYXZlbid0IGdv dAogCSAqLwotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoQUgtPmNvbXByZXNzaW9uTWV0aG9kID09 IENPTVBSRVNTSU9OX0daSVAgJiYKKwlzdXBwb3J0c19jb21wcmVzc2lvbiA9IHRydWU7CisJaWYg KEFILT5jb21wcmVzc2lvbk1ldGhvZCAhPSBDT01QUkVTU0lPTl9OT05FICYmCiAJCUFILT5Qcmlu dFRvY0RhdGFQdHIgIT0gTlVMTCkKIAl7CiAJCWZvciAodGUgPSBBSC0+dG9jLT5uZXh0OyB0ZSAh PSBBSC0+dG9jOyB0ZSA9IHRlLT5uZXh0KQogCQl7CiAJCQlpZiAodGUtPmhhZER1bXBlciAmJiAo dGUtPnJlcXMgJiBSRVFfREFUQSkgIT0gMCkKLQkJCQlmYXRhbCgiY2Fubm90IHJlc3RvcmUgZnJv bSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9uIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBp bnN0YWxsYXRpb24pIik7CisJCQl7CisjaWZuZGVmIEhBVkVfTElCWgorCQkJCWlmIChBSC0+Y29t cHJlc3Npb25NZXRob2QgPT0gQ09NUFJFU1NJT05fR1pJUCkKKwkJCQkJc3VwcG9ydHNfY29tcHJl c3Npb24gPSBmYWxzZTsKKyNlbmRpZgorI2lmbmRlZiBIQVZFX0xJQkxaNAorCQkJCWlmIChBSC0+ Y29tcHJlc3Npb25NZXRob2QgPT0gQ09NUFJFU1NJT05fTFo0KQorCQkJCQlzdXBwb3J0c19jb21w cmVzc2lvbiA9IGZhbHNlOworI2VuZGlmCisJCQkJaWYgKHN1cHBvcnRzX2NvbXByZXNzaW9uID09 IGZhbHNlKQorCQkJCQlmYXRhbCgiY2Fubm90IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hp dmUgKGNvbXByZXNzaW9uIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CisJ CQl9CiAJCX0KIAl9Ci0jZW5kaWYKIAogCS8qCiAJICogUHJlcGFyZSBpbmRleCBhcnJheXMsIHNv IHdlIGNhbiBhc3N1bWUgd2UgaGF2ZSB0aGVtIHRocm91Z2hvdXQgcmVzdG9yZS4KQEAgLTIwMTks NiArMjAzMCwxOCBAQCBSZWFkU3RyKEFyY2hpdmVIYW5kbGUgKkFIKQogCXJldHVybiBidWY7CiB9 CiAKK3N0YXRpYyBib29sCitfZmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwg Y29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01B WFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwg ZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25n OiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNS RUcoc3Quc3RfbW9kZSkpOworfQorCiBzdGF0aWMgaW50CiBfZGlzY292ZXJBcmNoaXZlRm9ybWF0 KEFyY2hpdmVIYW5kbGUgKkFIKQogewpAQCAtMjA0NiwzMCArMjA2OSwyMSBAQCBfZGlzY292ZXJB cmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qCiAJCSAqIENoZWNrIGlmIHRo ZSBzcGVjaWZpZWQgYXJjaGl2ZSBpcyBhIGRpcmVjdG9yeS4gSWYgc28sIGNoZWNrIGlmCi0JCSAq IHRoZXJlJ3MgYSAidG9jLmRhdCIgKG9yICJ0b2MuZGF0Lmd6IikgZmlsZSBpbiBpdC4KKwkJICog dGhlcmUncyBhICJ0b2MuZGF0IiAob3IgInRvYy5kYXQue2d6LGx6NH0iKSBmaWxlIGluIGl0Lgog CQkgKi8KIAkJaWYgKHN0YXQoQUgtPmZTcGVjLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9t b2RlKSkKIAkJewotCQkJY2hhcgkJYnVmW01BWFBHUEFUSF07CiAKLQkJCWlmIChzbnByaW50Zihi dWYsIE1BWFBHUEFUSCwgIiVzL3RvYy5kYXQiLCBBSC0+ZlNwZWMpID49IE1BWFBHUEFUSCkKLQkJ CQlmYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsCi0JCQkJCSAgQUgtPmZT cGVjKTsKLQkJCWlmIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkp Ci0JCQl7Ci0JCQkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJCQlBSC0+Zm9ybWF0ID0g YXJjaERpcmVjdG9yeTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywg InRvYy5kYXQiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKLQkJCX0KLQogI2lmZGVmIEhBVkVf TElCWgotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvdG9jLmRhdC5neiIsIEFI LT5mU3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCWZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9u ZzogXCIlc1wiIiwKLQkJCQkJICBBSC0+ZlNwZWMpOwotCQkJaWYgKHN0YXQoYnVmLCAmc3QpID09 IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCXsKLQkJCQlBSC0+Zm9ybWF0ID0gYXJjaERp cmVjdG9yeTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5k YXQuZ3oiKSkKKwkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElC TFo0CisJCQlpZiAoX2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Lmx6 NCIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQogI2VuZGlmCiAJCQlmYXRhbCgiZGly ZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBhcmNoaXZlIChcInRv Yy5kYXRcIiBkb2VzIG5vdCBleGlzdCkiLAogCQkJCSAgQUgtPmZTcGVjKTsKQEAgLTM2ODEsNiAr MzY5NSw3IEBAIFdyaXRlSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAlBSC0+V3JpdGVCeXRlUHRy KEFILCBBSC0+b2ZmU2l6ZSk7CiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmZvcm1hdCk7CiAJ V3JpdGVJbnQoQUgsIEFILT5jb21wcmVzc2lvbkxldmVsKTsKKwlBSC0+V3JpdGVCeXRlUHRyKEFI LCBBSC0+Y29tcHJlc3Npb25NZXRob2QpOwogCWNydG0gPSAqbG9jYWx0aW1lKCZBSC0+Y3JlYXRl RGF0ZSk7CiAJV3JpdGVJbnQoQUgsIGNydG0udG1fc2VjKTsKIAlXcml0ZUludChBSCwgY3J0bS50 bV9taW4pOwpAQCAtMzc2MSwxNCArMzc3NiwyMCBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpB SCkKIAllbHNlCiAJCUFILT5jb21wcmVzc2lvbkxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9O OwogCi0JaWYgKEFILT5jb21wcmVzc2lvbkxldmVsICE9IElOVF9NSU4pCisJaWYgKEFILT52ZXJz aW9uID49IEtfVkVSU18xXzE1KQorCQlBSC0+Y29tcHJlc3Npb25NZXRob2QgPSBBSC0+UmVhZEJ5 dGVQdHIoQUgpOworCWVsc2UgaWYgKEFILT5jb21wcmVzc2lvbkxldmVsICE9IDApCisJCUFILT5j b21wcmVzc2lvbk1ldGhvZCA9IENPTVBSRVNTSU9OX0daSVA7CisKICNpZm5kZWYgSEFWRV9MSUJa CisJaWYgKEFILT5jb21wcmVzc2lvbk1ldGhvZCA9PSBDT01QUkVTU0lPTl9HWklQKQorCXsKIAkJ cGdfbG9nX3dhcm5pbmcoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0 aW9uIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gLS0gbm8gZGF0YSB3aWxsIGJlIGF2YWls YWJsZSIpOwotI2Vsc2UKLQkJQUgtPmNvbXByZXNzaW9uTWV0aG9kID0gQ09NUFJFU1NJT05fR1pJ UDsKKwkJQUgtPmNvbXByZXNzaW9uTWV0aG9kID0gQ09NUFJFU1NJT05fTk9ORTsKKwkJQUgtPmNv bXByZXNzaW9uTGV2ZWwgPSAwOworCX0KICNlbmRpZgogCi0KIAlpZiAoQUgtPnZlcnNpb24gPj0g S19WRVJTXzFfNCkKIAl7CiAJCXN0cnVjdCB0bQljcnRtOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oCmluZGV4IDgzN2U5ZDczZjUuLjAzN2JmY2Y5MTMgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmgKQEAgLTY1LDEwICs2NSwxMSBAQAogI2RlZmluZSBLX1ZFUlNfMV8x MyBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxMywgMCkJLyogY2hhbmdlIHNlYXJjaF9wYXRoCiAJ CQkJCQkJCQkJCQkJICogYmVoYXZpb3IgKi8KICNkZWZpbmUgS19WRVJTXzFfMTQgTUFLRV9BUkNI SVZFX1ZFUlNJT04oMSwgMTQsIDApCS8qIGFkZCB0YWJsZWFtICovCisjZGVmaW5lIEtfVkVSU18x XzE1IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE1LCAwKQkvKiBhZGQgY29tcHJlc3Npb25NZXRo b2QgaW4gaGVhZGVyICovCiAKIC8qIEN1cnJlbnQgYXJjaGl2ZSB2ZXJzaW9uIG51bWJlciAodGhl IGZvcm1hdCB3ZSBjYW4gb3V0cHV0KSAqLwogI2RlZmluZSBLX1ZFUlNfTUFKT1IgMQotI2RlZmlu ZSBLX1ZFUlNfTUlOT1IgMTQKKyNkZWZpbmUgS19WRVJTX01JTk9SIDE1CiAjZGVmaW5lIEtfVkVS U19SRVYgMAogI2RlZmluZSBLX1ZFUlNfU0VMRiBNQUtFX0FSQ0hJVkVfVkVSU0lPTihLX1ZFUlNf TUFKT1IsIEtfVkVSU19NSU5PUiwgS19WRVJTX1JFVikKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggOTdhYzE3 ZWJmZi4uNTM1MWM3MWQyYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMDAyLDcgKzEwMDIsNyBAQCBoZWxw KGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAgICAg ICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIGR1bXBcbiIpKTsKIAlwcmlu dGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwog CXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24g aW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwotCXByaW50ZihfKCIgIC1aLCAtLWNvbXByZXNz PVtnemlwLG5vbmVdWzpMRVZFTF0gb3IgW0xFVkVMXVxuIgorCXByaW50ZihfKCIgIC1aLCAtLWNv bXByZXNzPVtnemlwLGx6NCxub25lXVs6TEVWRUxdIG9yIFtMRVZFTF1cbiIKIAkJCSAiICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzIG91dHB1dCB3aXRoIGdpdmVuIG1ldGhv ZCBvciBsZXZlbFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9V VCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwogCXBy aW50ZihfKCIgIC0tbm8tc3luYyAgICAgICAgICAgICAgICAgICAgZG8gbm90IHdhaXQgZm9yIGNo YW5nZXMgdG8gYmUgd3JpdHRlbiBzYWZlbHkgdG8gZGlza1xuIikpOwpAQCAtMTI3MSwxMSArMTI3 MSwxMyBAQCBwYXJzZV9jb21wcmVzc2lvbl9tZXRob2QoY29uc3QgY2hhciAqbWV0aG9kLAogCiAJ aWYgKHBnX3N0cmNhc2VjbXAobWV0aG9kLCAiZ3ppcCIpID09IDApCiAJCSpjb21wcmVzc2lvbk1l dGhvZCA9IENPTVBSRVNTSU9OX0daSVA7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChtZXRob2Qs ICJsejQiKSA9PSAwKQorCQkqY29tcHJlc3Npb25NZXRob2QgPSBDT01QUkVTU0lPTl9MWjQ7CiAJ ZWxzZSBpZiAocGdfc3RyY2FzZWNtcChtZXRob2QsICJub25lIikgPT0gMCkKIAkJKmNvbXByZXNz aW9uTWV0aG9kID0gQ09NUFJFU1NJT05fTk9ORTsKIAllbHNlCiAJewotCQlwZ19sb2dfZXJyb3Io ImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIFwiJXNcIiAoZ3ppcCwgbm9uZSkiLCBtZXRob2Qp OworCQlwZ19sb2dfZXJyb3IoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIFwiJXNcIiAoZ3pp cCwgbHo0LCBub25lKSIsIG1ldGhvZCk7CiAJCXJlcyA9IGZhbHNlOwogCX0KIApAQCAtMTM0Niwx MCArMTM0OCwxMCBAQCBwYXJzZV9jb21wcmVzc2lvbl9vcHRpb24oY29uc3QgY2hhciAqb3B0LCBD b21wcmVzc2lvbk1ldGhvZCAqY29tcHJlc3Npb25NZXRob2QsCiAJaWYgKCFyZXMpCiAJCXJldHVy biByZXM7CiAKLQkvKiBvbmUgY2FuIHNldCBsZXZlbCB3aGVuIG1ldGhvZCBpcyBnemlwICovCi0J aWYgKCpjb21wcmVzc2lvbk1ldGhvZCAhPSBDT01QUkVTU0lPTl9HWklQICYmICpjb21wcmVzc0xl dmVsICE9IElOVF9NSU4pCisJLyogb25lIGNhbiBzZXQgbGV2ZWwgd2hlbiBhIGNvbXByZXNzaW9u IG1ldGhvZCBpcyBzZXQgKi8KKwlpZiAoKmNvbXByZXNzaW9uTWV0aG9kID09IENPTVBSRVNTSU9O X05PTkUgJiYgKmNvbXByZXNzTGV2ZWwgIT0gSU5UX01JTikKIAl7Ci0JCXBnX2xvZ19lcnJvcigi Y2FuIG9ubHkgc3BlY2lmeSAtWi8tLWNvbXByZXNzIFtMRVZFTF0gd2hlbiBtZXRob2QgaXMgZ3pp cCIpOworCQlwZ19sb2dfZXJyb3IoImNhbiBvbmx5IHNwZWNpZnkgLVovLS1jb21wcmVzcyBbTEVW RUxdIHdoZW4gbWV0aG9kIGlzIHNldCIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8w MDFfYmFzaWMucGwKaW5kZXggNDcxM2QwYzhkNC4uZThkNzkyZTA4YSAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9i YXNpYy5wbApAQCAtMTIyLDEyICsxMjIsMTIgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCiBjb21t YW5kX2ZhaWxzX2xpa2UoCiAJWyAncGdfZHVtcCcsICctLWNvbXByZXNzJywgJ2dhcmJhZ2UnIF0s Ci0JcXIvXFFwZ19kdW1wOiBlcnJvcjogaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgImdhcmJh Z2UiIChnemlwLCBub25lKVxFLywKKwlxci9cUXBnX2R1bXA6IGVycm9yOiBpbnZhbGlkIGNvbXBy ZXNzaW9uIG1ldGhvZCAiZ2FyYmFnZSIgKGd6aXAsIGx6NCwgbm9uZSlcRS8sCiAJJ3BnX2R1bXA6 IGludmFsaWQgLS1jb21wcmVzcycpOwogCiBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJWyAncGdfZHVt cCcsICctLWNvbXByZXNzJywgJ25vbmU6MScgXSwKLQlxci9cUXBnX2R1bXA6IGVycm9yOiBjYW4g b25seSBzcGVjaWZ5IC1aXC8tLWNvbXByZXNzIFtMRVZFTF0gd2hlbiBtZXRob2QgaXMgZ3ppcFxF LywKKwlxci9cUXBnX2R1bXA6IGVycm9yOiBjYW4gb25seSBzcGVjaWZ5IC1aXC8tLWNvbXByZXNz IFtMRVZFTF0gd2hlbiBtZXRob2QgaXMgc2V0XEUvLAogCSdwZ19kdW1wOiBjYW4gb25seSBzcGVj aWZ5IC1aLy0tY29tcHJlc3MgW0xFVkVMXSB3aGVuIG1ldGhvZCBpcyBnemlwJyk7CiAKIGNvbW1h bmRfZmFpbHNfbGlrZSgKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1w LnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggMTUyZDU1NjRlYi4u MDMyYWE5NDc2MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTgxLDExICs4MSwxNCBA QCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQkncG9zdGdyZXMnLAogCQldLAogCQkjIEdpdmUgY292 ZXJhZ2UgZm9yIG1hbnVhbGx5IGNvbXByZXNzZWQgYmxvYi50b2MgZmlsZXMgZHVyaW5nIHJlc3Rv cmUuCi0JCWNvbXByZXNzX2NtZCA9PiBbCi0JCQkkRU5WeydHWklQX1BST0dSQU0nfSwKLQkJCSct ZicsCi0JCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9kaXJlY3RvcnlfZm9ybWF0L2Jsb2Jz LnRvYyIsCi0JCV0sCisJCWNvbXByZXNzaW9uID0+IHsKKwkJCW1ldGhvZCA9PiAnZ3ppcCcsCisJ CQljbWQgPT4gWworCQkJCSRFTlZ7J0daSVBfUFJPR1JBTSd9LAorCQkJCSctZicsCisJCQkJIiR0 ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfZGlyZWN0b3J5X2Zvcm1hdC9ibG9icy50b2MiLAorCQkJ XSwKKwkJfSwKIAkJcmVzdG9yZV9jbWQgPT4gWwogCQkJJ3BnX3Jlc3RvcmUnLAogCQkJIi0tZmls ZT0kdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX2RpcmVjdG9yeV9mb3JtYXQuc3FsIiwKQEAgLTEw MSwxMiArMTA0LDE1IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCSItLWZpbGU9JHRlbXBkaXIv Y29tcHJlc3Npb25fZ3ppcF9kaXJlY3RvcnlfZm9ybWF0X3BhcmFsbGVsIiwKIAkJCSdwb3N0Z3Jl cycsCiAJCV0sCi0JCSMgR2l2ZSBjb3ZlcmFnZSBmb3IgbWFudWFsbHkgY29tcHJlc3NlZCBibG9i LnRvYyBmaWxlcyBkdXJpbmcgcmVzdG9yZS4KLQkJY29tcHJlc3NfY21kID0+IFsKLQkJCSRFTlZ7 J0daSVBfUFJPR1JBTSd9LAotCQkJJy1mJywKLQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9nemlw X2RpcmVjdG9yeV9mb3JtYXRfcGFyYWxsZWwvYmxvYnMudG9jIiwKLQkJXSwKKwkJIyBHaXZlIGNv dmVyYWdlIGZvciBtYW51YWxseSBjb21wcmVzc2VkIHRvYy5kYXQgZmlsZXMgZHVyaW5nIHJlc3Rv cmUuCisJCWNvbXByZXNzaW9uID0+IHsKKwkJCW1ldGhvZCA9PiAnZ3ppcCcsCisJCQljbWQgPT4g WworCQkJCSRFTlZ7J0daSVBfUFJPR1JBTSd9LAorCQkJCSctZicsCisJCQkJIiR0ZW1wZGlyL2Nv bXByZXNzaW9uX2d6aXBfZGlyZWN0b3J5X2Zvcm1hdF9wYXJhbGxlbC90b2MuZGF0IiwKKwkJCV0s CisJCX0sCiAJCXJlc3RvcmVfY21kID0+IFsKIAkJCSdwZ19yZXN0b3JlJywKIAkJCSctLWpvYnM9 MycsCkBAIC0xMjMsMTIgKzEyOSw5NyBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQkiLS1maWxl PSR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfcGxhaW5fZm9ybWF0LnNxbC5neiIsCiAJCQkncG9z dGdyZXMnLAogCQldLAotCQljb21wcmVzc19jbWQgPT4gWwotCQkJJEVOVnsnR1pJUF9QUk9HUkFN J30sCi0JCQknLWQnLAotCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfcGxhaW5fZm9ybWF0 LnNxbC5neiIsCisJCWNvbXByZXNzaW9uID0+IHsKKwkJCW1ldGhvZCA9PiAnZ3ppcCcsCisJCQlj bWQgPT4gWworCQkJCSRFTlZ7J0daSVBfUFJPR1JBTSd9LAorCQkJCSctZCcsCisJCQkJIiR0ZW1w ZGlyL2NvbXByZXNzaW9uX2d6aXBfcGxhaW5fZm9ybWF0LnNxbC5neiIsCisJCQldLAorCQl9LAor CX0sCisJY29tcHJlc3Npb25fbHo0X2N1c3RvbV9mb3JtYXQgPT4geworCQl0ZXN0X2tleSA9PiAn Y29tcHJlc3Npb24nLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcCcsICctLW5vLXN5bmMn LAorCQkJJy0tZm9ybWF0PWN1c3RvbScsICctLWNvbXByZXNzPWx6NDo5JywKKwkJCSItLWZpbGU9 JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbV9mb3JtYXQuZHVtcCIsCisJCQkncG9zdGdy ZXMnLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsCisJCQkiLS1m aWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b21fZm9ybWF0LnNxbCIsCisJCQkiJHRl bXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbV9mb3JtYXQuZHVtcCIsCisJCV0sCisJfSwKKwlj b21wcmVzc2lvbl9sejRfZGlyZWN0b3J5X2Zvcm1hdCA9PiB7CisJCXRlc3Rfa2V5ID0+ICdjb21w cmVzc2lvbicsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wJywgJy0tbm8tc3luYycsCisJ CQknLS1mb3JtYXQ9ZGlyZWN0b3J5JywgJy0tY29tcHJlc3M9bHo0JywKKwkJCSItLWZpbGU9JHRl bXBkaXIvY29tcHJlc3Npb25fbHo0X2RpcmVjdG9yeV9mb3JtYXQiLAorCQkJJ3Bvc3RncmVzJywK KwkJXSwKKwkJIyBHaXZlIGNvdmVyYWdlIGZvciBtYW51YWxseSBjb21wcmVzc2VkIHRvYy5kYXQg ZmlsZXMgZHVyaW5nIHJlc3RvcmUuCisJCWNvbXByZXNzaW9uID0+IHsKKwkJCW1ldGhvZCA9PiAn bHo0JywKKwkJCWNtZCA9PiBbCisJCQkJJEVOVnsnTFo0J30sCisJCQkJJy16JywgJy1mJywgJy0t cm0nLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyZWN0b3J5X2Zvcm1hdC90b2Mu ZGF0IiwKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2RpcmVjdG9yeV9mb3JtYXQvdG9j LmRhdC5sejQiLAorCQkJXSwKKwkJfSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3Rv cmUnLAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyZWN0b3J5X2Zvcm1h dC5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXJlY3RvcnlfZm9ybWF0IiwK Kz4+Pj4+Pj4gZjYzODVhMWRjZSAoQWRkIExaNCBjb21wcmVzc2lvbiBpbiBwZ197ZHVtcHxyZXN0 b3JlfSkKIAkJXSwKIAl9LAorCWNvbXByZXNzaW9uX2x6NF9kaXJlY3RvcnlfZm9ybWF0X3BhcmFs bGVsID0+IHsKKwkJdGVzdF9rZXkgPT4gJ2NvbXByZXNzaW9uJywKKwkJZHVtcF9jbWQgPT4gWwor CQkJJ3BnX2R1bXAnLCAnLS1uby1zeW5jJywgJy0tam9icz0yJywKKwkJCSctLWZvcm1hdD1kaXJl Y3RvcnknLCAnLS1jb21wcmVzcz1sejQ6OScsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNz aW9uX2x6NF9kaXJlY3RvcnlfZm9ybWF0X3BhcmFsbGVsIiwKKwkJCSdwb3N0Z3JlcycsCisJCV0s CisJCSMgR2l2ZSBjb3ZlcmFnZSBmb3IgbWFudWFsbHkgY29tcHJlc3NlZCBibG9iLnRvYyBmaWxl cyBkdXJpbmcgcmVzdG9yZS4KKwkJY29tcHJlc3Npb24gPT4geworCQkJbWV0aG9kID0+ICdsejQn LAorCQkJY21kID0+IFsKKwkJCQkkRU5WeydMWjQnfSwKKwkJCQknLXonLCAnLWYnLCAnLS1ybScs CisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXJlY3RvcnlfZm9ybWF0X3BhcmFsbGVs L2Jsb2JzLnRvYyIsCisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXJlY3RvcnlfZm9y bWF0X3BhcmFsbGVsL2Jsb2JzLnRvYy5sejQiLAorCQkJXSwKKwkJfSwKKwkJcmVzdG9yZV9jbWQg PT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLS1qb2JzPTInLAorCQkJIi0tZmlsZT0kdGVtcGRpci9j b21wcmVzc2lvbl9sejRfZGlyZWN0b3J5X2Zvcm1hdF9wYXJhbGxlbC5zcWwiLAorCQkJIiR0ZW1w ZGlyL2NvbXByZXNzaW9uX2x6NF9kaXJlY3RvcnlfZm9ybWF0X3BhcmFsbGVsIiwKKwkJXSwKKwl9 LAorCSMgQ2hlY2sgdGhhdCB0aGUgb3V0cHV0IGlzIHZhbGlkIGx6NAorCWNvbXByZXNzaW9uX2x6 NF9wbGFpbl9mb3JtYXQgPT4geworCQl0ZXN0X2tleSA9PiAnY29tcHJlc3Npb24nLAorCQlkdW1w X2NtZCA9PiBbCisJCQkncGdfZHVtcCcsCisJCQknLS1uby1zeW5jJywKKwkJCSctLWZvcm1hdD1w bGFpbicsICctLWNvbXByZXNzPWx6NDoxJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Np b25fbHo0X3BsYWluX2Zvcm1hdC5zcWwubHo0IiwKKwkJCSdwb3N0Z3JlcycsCisJCV0sCisJCWNv bXByZXNzaW9uID0+IHsKKwkJCW1ldGhvZCA9PiAnbHo0JywKKwkJCWNtZCA9PiBbCisJCQkJJEVO VntMWjR9LCAnLWQnLCAnLWYnLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW5f Zm9ybWF0LnNxbC5sejQiLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW5fZm9y bWF0LnNxbCIsCisJCQldLAorCQl9CisJfSwKIAljb21wcmVzc2lvbl9ub25lX2Rpcl9mb3JtYXQg PT4gewogCQl0ZXN0X2tleSA9PiAnY29tcHJlc3Npb24nLAogCQlkdW1wX2NtZCA9PiBbCkBAIC0x MzcsMTAgKzIyOCwxMyBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQkiLS1maWxlPSR0ZW1wZGly L2NvbXByZXNzaW9uX25vbmVfZGlyX2Zvcm1hdCIsCiAJCQkncG9zdGdyZXMnLAogCQldLAotCQln bG9iX21hdGNoID0+IHsKLQkJCW5vX21hdGNoID0+ICIkdGVtcGRpci9jb21wcmVzc2lvbl9ub25l X2Rpcl9mb3JtYXQvKi5kYXQuZ3oiLAotCQkJbWF0Y2ggPT4gIiR0ZW1wZGlyL2NvbXByZXNzaW9u X25vbmVfZGlyX2Zvcm1hdC8qLmRhdCIsCi0JCQltYXRjaF9jb3VudCA9PiAyLCAjIHRvYy5kYXQg YW5kIG1vcmUKKwkJY29tcHJlc3Npb24gPT4geworCQkJbWV0aG9kID0+ICdnemlwJywKKwkJCWds b2JfbWF0Y2ggPT4geworCQkJCW5vX21hdGNoID0+ICIkdGVtcGRpci9jb21wcmVzc2lvbl9ub25l X2Rpcl9mb3JtYXQvKi5kYXQuZ3oiLAorCQkJCW1hdGNoID0+ICIkdGVtcGRpci9jb21wcmVzc2lv bl9ub25lX2Rpcl9mb3JtYXQvKi5kYXQiLAorCQkJCW1hdGNoX2NvdW50ID0+IDIsICMgdG9jLmRh dCBhbmQgbW9yZQorCQkJfSwKIAkJfSwKIAkJcmVzdG9yZV9jbWQgPT4gWwogCQkJJ3BnX3Jlc3Rv cmUnLCAnLUZkJywKQEAgLTE0OCw2ICsyNDIsMjYgQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJ IiR0ZW1wZGlyL2NvbXByZXNzaW9uX25vbmVfZGlyX2Zvcm1hdCIsCiAJCV0sCiAJfSwKKwljb21w cmVzc2lvbl9kZWZhdWx0X2Rpcl9mb3JtYXQgPT4geworCQl0ZXN0X2tleSA9PiAnY29tcHJlc3Np b24nLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcCcsICctRmQnLAorCQkJIi0tZmlsZT0k dGVtcGRpci9jb21wcmVzc2lvbl9kZWZhdWx0X2Rpcl9mb3JtYXQiLAorCQkJJ3Bvc3RncmVzJywK KwkJXSwKKwkJY29tcHJlc3Npb24gPT4geworCQkJbWV0aG9kID0+ICdnemlwJywKKwkJCWdsb2Jf bWF0Y2ggPT4geworCQkJCW1hdGNoID0+ICIkdGVtcGRpci9jb21wcmVzc2lvbl9kZWZhdWx0X2Rp cl9mb3JtYXQvKi5kYXQuZ3oiLAorCQkJCW1hdGNoX2NvdW50ID0+IDEsICMgZGF0YQorCQkJfSwK KwkJfSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUZkJywKKwkJCSIt LWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fZGVmYXVsdF9kaXJfZm9ybWF0LnNxbCIsCisJCQki JHRlbXBkaXIvY29tcHJlc3Npb25fZGVmYXVsdF9kaXJfZm9ybWF0IiwKKwkJXSwKKwl9LAogCWNs ZWFuID0+IHsKIAkJZHVtcF9jbWQgPT4gWwogCQkJJ3BnX2R1bXAnLApAQCAtNDA0NCw0NSArNDE1 OCw0OCBAQCBmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wX3J1bnMpCiAJbXkgJHRl c3Rfa2V5ID0gJHJ1bjsKIAlteSAkcnVuX2RiICAgPSAncG9zdGdyZXMnOwogCi0JbXkgJHN1cHBv cnRzX2NvbXByZXNzaW9uID0gY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5lIEhBVkVfTElCWiAxIik7 Ci0JbXkgJGNvbXByZXNzX3Byb2dyYW0gPSAkRU5We0daSVBfUFJPR1JBTX07CisJbXkgJGd6aXBf cHJvZ3JhbSA9IGRlZmluZWQoJEVOVntHWklQX1BST0dSQU19KSAmJiAkRU5We0daSVBfUFJPR1JB TX0gbmUgJyc7CisJbXkgJGx6NF9wcm9ncmFtID0gZGVmaW5lZCgkRU5We0xaNH0pICYmICRFTlZ7 TFo0fSBuZSAnJzsKKwlteSAkc3VwcG9ydHNfZ3ppcCA9IGNoZWNrX3BnX2NvbmZpZygiI2RlZmlu ZSBIQVZFX0xJQlogMSIpOworCW15ICRzdXBwb3J0c19jb21wcmVzc2lvbiA9ICRzdXBwb3J0c19n emlwIHx8ICRzdXBwb3J0c19sejQ7CiAKIAkkbm9kZS0+Y29tbWFuZF9vayhcQHsgJHBnZHVtcF9y dW5zeyRydW59LT57ZHVtcF9jbWR9IH0sCiAJCSIkcnVuOiBwZ19kdW1wIHJ1bnMiKTsKIAotCWlm IChkZWZpbmVkKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXByZXNzX2NtZH0pKQotCXsKLQkJIyBT a2lwIGNvbXByZXNzaW9uX2NtZCB0ZXN0cyB3aGVuIGNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0 ZWQsCi0JCSMgYXMgdGhlIHJlc3VsdCBpcyB1bmNvbXByZXNzZWQgb3IgdGhlIHV0aWxpdHkgcHJv Z3JhbSBkb2VzIG5vdAotCQkjIGV4aXN0Ci0JCW5leHQgaWYgISRzdXBwb3J0c19jb21wcmVzc2lv biB8fCAhZGVmaW5lZCgkY29tcHJlc3NfcHJvZ3JhbSkKLQkJCQl8fCAkY29tcHJlc3NfcHJvZ3Jh bSBlcSAnJzsKLQkJY29tbWFuZF9vayggXEB7ICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXByZXNz X2NtZH0gfSwKLQkJCSIkcnVuOiBjb21wcmVzc2lvbiBjb21tYW5kcyIpOwotCX0KLQlpZiAoZGVm aW5lZCgkcGdkdW1wX3J1bnN7JHJ1bn0tPntnbG9iX21hdGNofSkpCisJaWYgKGRlZmluZWQoJHBn ZHVtcF9ydW5zeyRydW59LT57J2NvbXByZXNzaW9uJ30pKQogCXsKIAkJIyBTa2lwIGNvbXByZXNz aW9uX2NtZCB0ZXN0cyB3aGVuIGNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQsCiAJCSMgYXMg dGhlIHJlc3VsdCBpcyB1bmNvbXByZXNzZWQgb3IgdGhlIHV0aWxpdHkgcHJvZ3JhbSBkb2VzIG5v dAogCQkjIGV4aXN0Ci0JCW5leHQgaWYgISRzdXBwb3J0c19jb21wcmVzc2lvbiB8fCAhZGVmaW5l ZCgkY29tcHJlc3NfcHJvZ3JhbSkKLQkJCQl8fCAkY29tcHJlc3NfcHJvZ3JhbSBlcSAnJzsKKwkJ bmV4dCBpZiAhJHN1cHBvcnRzX2NvbXByZXNzaW9uOwogCi0JCW15ICRtYXRjaCA9ICRwZ2R1bXBf cnVuc3skcnVufS0+e2dsb2JfbWF0Y2h9LT57bWF0Y2h9OwotCQlteSAkbWF0Y2hfY291bnQgPSBk ZWZpbmVkKCRwZ2R1bXBfcnVuc3skcnVufS0+e2dsb2JfbWF0Y2h9LT57bWF0Y2hfY291bnR9KSA/ Ci0JCQkJCQkJJHBnZHVtcF9ydW5zeyRydW59LT57Z2xvYl9tYXRjaH0tPnttYXRjaF9jb3VudH0g OiAxOwotCQlteSBAZ2xvYl9tYXRjaGVkID0gZ2xvYiAkbWF0Y2g7CisJCW15ICgkY29tcHJlc3Np b24pID0gJHBnZHVtcF9ydW5zeyRydW59LT57J2NvbXByZXNzaW9uJ307CiAKLQkJY21wX29rKHNj YWxhcihAZ2xvYl9tYXRjaGVkKSwgJz49JywgJG1hdGNoX2NvdW50LAotCQkJIkV4cGVjdGVkIGF0 IGxlYXN0ICRtYXRjaF9jb3VudCBmaWxlKHMpIG1hdGNoaW5nICRtYXRjaCIpOworCQluZXh0IGlm ICR7Y29tcHJlc3Npb259LT57bWV0aG9kfSBlcSAnZ3ppcCcgJiYgKCEkZ3ppcF9wcm9ncmFtIHx8 ICEkc3VwcG9ydHNfZ3ppcCk7CisJCW5leHQgaWYgJHtjb21wcmVzc2lvbn0tPnttZXRob2R9IGVx ICdsejQnICAmJiAoISRsejRfcHJvZ3JhbSB8fCAhJHN1cHBvcnRzX2x6NCk7CiAKLQkJaWYgKGRl ZmluZWQoJHBnZHVtcF9ydW5zeyRydW59LT57Z2xvYl9tYXRjaH0tPntub19tYXRjaH0pKQorCQlp ZiAoZGVmaW5lZCgkY29tcHJlc3Npb24tPntjbWR9KSkKIAkJewotCQkJbXkgJG5vX21hdGNoID0g JHBnZHVtcF9ydW5zeyRydW59LT57Z2xvYl9tYXRjaH0tPntub19tYXRjaH07Ci0JCQlteSBAZ2xv Yl9tYXRjaGVkID0gZ2xvYiAkbm9fbWF0Y2g7CisJCQljb21tYW5kX29rKCBcQHsgJGNvbXByZXNz aW9uLT57Y21kfSB9LCAiJHJ1bjogY29tcHJlc3Npb24gY29tbWFuZHMiKTsKKwkJfQorCisJCWlm IChkZWZpbmVkKCRjb21wcmVzc2lvbi0+e2dsb2JfbWF0Y2h9KSkKKwkJeworCQkJbXkgJG1hdGNo ID0gJGNvbXByZXNzaW9uLT57Z2xvYl9tYXRjaH0tPnttYXRjaH07CisJCQlteSAkbWF0Y2hfY291 bnQgPSAkY29tcHJlc3Npb24tPntnbG9iX21hdGNofS0+e21hdGNoX2NvdW50fTsKKwkJCW15IEBn bG9iX21hdGNoZWQgPSBnbG9iICRtYXRjaDsKKworCQkJY21wX29rKHNjYWxhcihAZ2xvYl9tYXRj aGVkKSwgJz49JywgJG1hdGNoX2NvdW50LAorCQkJCSJFeHBlY3RlZCBhdCBsZWFzdCAkbWF0Y2hf Y291bnQgZmlsZShzKSBtYXRjaGluZyAkbWF0Y2giKTsKIAotCQkJY21wX29rKHNjYWxhcihAZ2xv Yl9tYXRjaGVkKSwgJz09JywgMCwKLQkJCQkiRXhwZWN0ZWQgbm8gZmlsZShzKSBtYXRjaGluZyAk bm9fbWF0Y2giKTsKKwkJCWlmIChkZWZpbmVkKCRwZ2R1bXBfcnVuc3skcnVufS0+e2dsb2JfbWF0 Y2h9LT57bm9fbWF0Y2h9KSkKKwkJCXsKKwkJCQlteSAkbm9fbWF0Y2ggPSAkcGdkdW1wX3J1bnN7 JHJ1bn0tPntnbG9iX21hdGNofS0+e25vX21hdGNofTsKKwkJCQlteSBAZ2xvYl9ub3RfbWF0Y2hl ZCA9IGdsb2IgJG5vX21hdGNoOworCisJCQkJY21wX29rKHNjYWxhcihAZ2xvYl9ub3RfbWF0Y2hl ZCksICc9PScsIDAsCisJCQkJCSJFeHBlY3RlZCBubyBmaWxlKHMpIG1hdGNoaW5nICRub19tYXRj aCIpOworCQkJfQogCQl9CiAJfQogCi0tIAoyLjMyLjAKCg== --b1_u2X9lop6Yk7scHMVWcGTtJ3U566CpC4hbBKtChwprw Content-Type: text/x-patch; name=v3-0003-Prepare-pg_dump-for-additional-compression-method.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0003-Prepare-pg_dump-for-additional-compression-method.patch RnJvbSBkNzBmMmJmNjI5MDBmMGUzZmVhZTk3ZmI5ZWM0MDQzYzFhY2EzNWU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjkgTWFyIDIwMjIgMDg6MzA6MTUgKzAwMDAKU3ViamVjdDogW1BBVENIIHYz IDMvNF0gUHJlcGFyZSBwZ19kdW1wIGZvciBhZGRpdGlvbmFsIGNvbXByZXNzaW9uIG1ldGhvZHMK ClRoaXMgY29tbW1pdCBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nIHJlcXVpcmVkIGZvciBhZGRpdGlv bmFsIGNvbXByZXNzaW9uIG1ldGhvZHMuCkNvbW1pdCAgYmY5YWE0OTBkYiBpbnRyb2R1Y2VkIGNm cCBpbiBjb21wcmVzc19pby57YyxofSB3aXRoIHRoZSBpbnRlbnQgb2YKdW5pZnlpbmcgY29tcHJl c3Npb24gcmVsYXRlZCBjb2RlIGFuZCBhbGxvdyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiBhZGRp dGlvbmFsCmFyY2hpdmUgZm9ybWF0cy4gSG93ZXZlciwgcGdfYmFja3VwX2FyY2hpdmVyLmMgd2Fz IG5vdCB1c2luZyB0aGF0IEFQSS4gVGhpcwpjb21taXQgdGVhY2hlcyBwZ19iYWNrdXBfYXJjaGl2 ZXIuYyBhYm91dCBjZnAgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2ggb3V0LgoKRnVydGhlcm1vcmUs IGNvbXByZXNzaW9uIHdhcyBjaG9zZW4gYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBsZXZlbCBw YXNzZWQKYXMgYW4gYXJndW1lbnQgZHVyaW5nIHRoZSBpbnZvY2F0aW9uIG9mIHBnX2R1bXAgb3Ig c29tZSBoYXJkY29kZWQgZGVmYXVsdHMuIFRoaXMKZG9lcyBub3Qgc2NhbGUgZm9yIG1vcmUgdGhh biBvbmUgY29tcHJlc3Npb24gbWV0aG9kcy4gTm93IHRoZSBtZXRob2QgdXNlZCBmb3IKY29tcHJl c3Npb24gY2FuIGJlIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGR1cmluZyBjb21tYW5kIGludm9jYXRp b24sIG9yIHNldCBkdXJpbmcKaGFyZGNvZGVkIGRlZmF1bHRzLiBUaGVuIGl0IGlzIHN0b3JlZCBp biB0aGUgcmVsZXZhbnQgc3RydWN0cyBhbmQgcGFzc2VkIGluIHRoZQpyZWxldmFudCBmdW5jdGlv bnMsIGFsb25nIHNpZGUgY29tcHJlc3Npb24gbGV2ZWwgd2hpY2ggaGFzIGxvc3QgaXQncyBzcGVj aWFsCm1lYW5pbmcuIFRoZSBtZXRob2QgZm9yIGNvbXByZXNzaW9uIGlzIG5vdCB5ZXQgc3RvcmVk IGluIHRoZSBhY3R1YWwgYXJjaGl2ZS4KVGhpcyBpcyBkb25lIGluIHRoZSBuZXh0IGNvbW1pdCB3 aGljaCBkb2VzIGludHJvZHVjZSBhIG5ldyBtZXRob2QuCgpUaGUgcHJldmlvdXNseSBuYW1lZCBD b21wcmVzc2lvbkFsZ29yaXRobSBlbnVtIGlzIGNoYW5nZWQgZm9yCkNvbXByZXNzaW9uTWV0aG9k IHNvIHRoYXQgaXQgbWF0Y2hlcyBiZXR0ZXIgc2ltaWxhciB2YXJpYWJsZXMgZm91bmQgdGhyb3Vn aCBvdXQKdGhlIGNvZGUgYmFzZS4KCkluIGEgZmFzaGlvbiBzaW1pbGFyIHRvIHRoZSBiaW5hcnkg Zm9yIHBnX2Jhc2ViYWNrdXAsIHRoZSBtZXRob2QgZm9yIGNvbXByZXNzaW9uCmlzIHBhc3NlZCB1 c2luZyB0aGUgYWxyZWFkeSBleGlzdGluZyAtWi8tLWNvbXByZXNzIHBhcmFtZXRlciBvZiBwZ19k dW1wLiBUaGUKbGVnYWN5IGZvcm1hdCBhbmQgYmVoYXZpb3VyIGlzIG1haW50YWluZWQuIEFkZGl0 aW9uYWxseSwgdGhlIHVzZXIgY2FuIGV4cGxpY2l0bHkKcGFzcyBhIHJlcXVlc3RlZCBtZXRob2Qg YW5kIG9wdGlvbmFseSB0aGUgbGV2ZWwgdG8gYmUgdXNlZCBhZnRlciBhIHNlbWljb2xvbiwKZS5n LiAtLWNvbXByZXNzPWd6aXA6NgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sICAg ICAgICAgfCAgMzAgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jICAgICAgICAgfCA0 MTYgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19p by5oICAgICAgICAgfCAgMzIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCAgICAgICAg ICAgfCAgMTQgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyAgfCAxNzEg KysrKystLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCAgfCAgNDYg Ky0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jICAgIHwgIDExICstCiBzcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jIHwgIDEyICstCiBzcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jICAgICAgIHwgIDEyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jICAgICAgICAgICAgIHwgMTU1ICsrKysrKysrLS0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMV9i YXNpYy5wbCAgICAgICAgfCAgMTQgKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs ICAgICAgfCAgNTAgKysrLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICB8 ICAgMiArLQogMTMgZmlsZXMgY2hhbmdlZCwgNjA4IGluc2VydGlvbnMoKyksIDM1NyBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbCBiL2RvYy9z cmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCmluZGV4IDJmMDA0MmZkOTYuLjk5MmI3MzEyZGYgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvcGdfZHVtcC5zZ21sCkBAIC02NDQsMTcgKzY0NCwzMSBAQCBQb3N0Z3JlU1FMIGRvY3Vt ZW50YXRpb24KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgPHZhcmxpc3RlbnRyeT4KLSAg ICAgIDx0ZXJtPjxvcHRpb24+LVogPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPjAuLjk8 L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KLSAgICAgIDx0ZXJtPjxvcHRpb24+LS1jb21w cmVzcz08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+MC4uOTwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tWiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bGV2ZWw8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LVogPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm1ldGhvZDwvcmVw bGFjZWFibGU+PC9vcHRpb24+Wzo8cmVwbGFjZWFibGU+bGV2ZWw8L3JlcGxhY2VhYmxlPl08L3Rl cm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tY29tcHJlc3M9PHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmxldmVsPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVy bT48b3B0aW9uPi0tY29tcHJlc3M9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm1ldGhv ZDwvcmVwbGFjZWFibGU+PC9vcHRpb24+Wzo8cmVwbGFjZWFibGU+bGV2ZWw8L3JlcGxhY2VhYmxl Pl08L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+Ci0gICAgICAgIFNwZWNp ZnkgdGhlIGNvbXByZXNzaW9uIGxldmVsIHRvIHVzZS4gIFplcm8gbWVhbnMgbm8gY29tcHJlc3Np b24uCisgICAgICAgIFNwZWNpZnkgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQvb3IgdGhlIGNv bXByZXNzaW9uIGxldmVsIHRvIHVzZS4KKyAgICAgICAgVGhlIGNvbXByZXNzaW9uIG1ldGhvZCBj YW4gYmUgc2V0IHRvIDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+IG9yCisgICAgICAgIDxsaXRlcmFs Pm5vbmU8L2xpdGVyYWw+IGZvciBubyBjb21wcmVzc2lvbi4gQSBjb21wcmVzc2lvbiBsZXZlbCBj YW4KKyAgICAgICAgYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQsIGJ5IGFwcGVuZGluZyB0aGUgbGV2 ZWwgbnVtYmVyIGFmdGVyIGEgY29sb24KKyAgICAgICAgKDxsaXRlcmFsPjo8L2xpdGVyYWw+KS4g SWYgbm8gbGV2ZWwgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbgorICAgICAg ICBsZXZlbCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kLiBJZiBvbmx5IGEg bGV2ZWwgaXMKKyAgICAgICAgc3BlY2lmaWVkIHdpdGhvdXQgbWVudGlvbmluZyBhIG1ldGhvZCwg PGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4gY29tcHJlc3Npb24KKyAgICAgICAgd2lsbCBiZSB1c2Vk LgorICAgICAgIDwvcGFyYT4KKworICAgICAgIDxwYXJhPgogICAgICAgICBGb3IgdGhlIGN1c3Rv bSBhbmQgZGlyZWN0b3J5IGFyY2hpdmUgZm9ybWF0cywgdGhpcyBzcGVjaWZpZXMgY29tcHJlc3Np b24gb2YKLSAgICAgICAgaW5kaXZpZHVhbCB0YWJsZS1kYXRhIHNlZ21lbnRzLCBhbmQgdGhlIGRl ZmF1bHQgaXMgdG8gY29tcHJlc3MKLSAgICAgICAgYXQgYSBtb2RlcmF0ZSBsZXZlbC4KLSAgICAg ICAgRm9yIHBsYWluIHRleHQgb3V0cHV0LCBzZXR0aW5nIGEgbm9uemVybyBjb21wcmVzc2lvbiBs ZXZlbCBjYXVzZXMKLSAgICAgICAgdGhlIGVudGlyZSBvdXRwdXQgZmlsZSB0byBiZSBjb21wcmVz c2VkLCBhcyB0aG91Z2ggaXQgaGFkIGJlZW4KLSAgICAgICAgZmVkIHRocm91Z2ggPGFwcGxpY2F0 aW9uPmd6aXA8L2FwcGxpY2F0aW9uPjsgYnV0IHRoZSBkZWZhdWx0IGlzIG5vdCB0byBjb21wcmVz cy4KKyAgICAgICAgaW5kaXZpZHVhbCB0YWJsZS1kYXRhIHNlZ21lbnRzLCBhbmQgdGhlIGRlZmF1 bHQgaXMgdG8gY29tcHJlc3MgdXNpbmcKKyAgICAgICAgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4g YXQgYSBtb2RlcmF0ZSBsZXZlbC4gRm9yIHBsYWluIHRleHQgb3V0cHV0LAorICAgICAgICBzZXR0 aW5nIGEgbm9uemVybyBjb21wcmVzc2lvbiBsZXZlbCBjYXVzZXMgdGhlIGVudGlyZSBvdXRwdXQg ZmlsZSB0byBiZSBjb21wcmVzc2VkLAorICAgICAgICBhcyB0aG91Z2ggaXQgaGFkIGJlZW4gZmVk IHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPjsgYnV0IHRoZSBkZWZhdWx0 CisgICAgICAgIGlzIG5vdCB0byBjb21wcmVzcy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBh cmE+CiAgICAgICAgIFRoZSB0YXIgYXJjaGl2ZSBmb3JtYXQgY3VycmVudGx5IGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24gYXQgYWxsLgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0 ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYyBiL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5jCmluZGV4IDkwNzdmZGI3NGQuLjYzMGY5ZTRiMTggMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19pby5jCkBAIC02NCw3ICs2NCw3IEBACiAvKiB0eXBlZGVmIGFwcGVhcnMgaW4g Y29tcHJlc3NfaW8uaCAqLwogc3RydWN0IENvbXByZXNzb3JTdGF0ZQogewotCUNvbXByZXNzaW9u QWxnb3JpdGhtIGNvbXByQWxnOworCUNvbXByZXNzaW9uTWV0aG9kIGNvbXByZXNzaW9uTWV0aG9k OwogCVdyaXRlRnVuYwl3cml0ZUY7CiAKICNpZmRlZiBIQVZFX0xJQloKQEAgLTc0LDkgKzc0LDYg QEAgc3RydWN0IENvbXByZXNzb3JTdGF0ZQogI2VuZGlmCiB9OwogCi1zdGF0aWMgdm9pZCBQYXJz ZUNvbXByZXNzaW9uT3B0aW9uKGludCBjb21wcmVzc2lvbiwgQ29tcHJlc3Npb25BbGdvcml0aG0g KmFsZywKLQkJCQkJCQkJICAgaW50ICpsZXZlbCk7Ci0KIC8qIFJvdXRpbmVzIHRoYXQgc3VwcG9y dCB6bGliIGNvbXByZXNzZWQgZGF0YSBJL08gKi8KICNpZmRlZiBIQVZFX0xJQloKIHN0YXRpYyB2 b2lkIEluaXRDb21wcmVzc29yWmxpYihDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgbGV2ZWwpOwpA QCAtOTMsNTcgKzkwLDMwIEBAIHN0YXRpYyB2b2lkIFJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFy Y2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7CiBzdGF0aWMgdm9pZCBXcml0ZURhdGFU b0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAogCQkJ CQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExlbik7CiAKLS8qCi0gKiBJbnRlcnBy ZXRzIGEgbnVtZXJpYyAnY29tcHJlc3Npb24nIHZhbHVlLiBUaGUgYWxnb3JpdGhtIGltcGxpZWQg YnkgdGhlCi0gKiB2YWx1ZSAoemxpYiBvciBub25lIGF0IHRoZSBtb21lbnQpLCBpcyByZXR1cm5l ZCBpbiAqYWxnLCBhbmQgdGhlCi0gKiB6bGliIGNvbXByZXNzaW9uIGxldmVsIGluICpsZXZlbC4K LSAqLwotc3RhdGljIHZvaWQKLVBhcnNlQ29tcHJlc3Npb25PcHRpb24oaW50IGNvbXByZXNzaW9u LCBDb21wcmVzc2lvbkFsZ29yaXRobSAqYWxnLCBpbnQgKmxldmVsKQotewotCWlmIChjb21wcmVz c2lvbiA9PSBaX0RFRkFVTFRfQ09NUFJFU1NJT04gfHwKLQkJKGNvbXByZXNzaW9uID4gMCAmJiBj b21wcmVzc2lvbiA8PSA5KSkKLQkJKmFsZyA9IENPTVBSX0FMR19MSUJaOwotCWVsc2UgaWYgKGNv bXByZXNzaW9uID09IDApCi0JCSphbGcgPSBDT01QUl9BTEdfTk9ORTsKLQllbHNlCi0JewotCQlm YXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBjb2RlOiAlZCIsIGNvbXByZXNzaW9uKTsKLQkJKmFs ZyA9IENPTVBSX0FMR19OT05FOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JfQotCi0JLyog VGhlIGxldmVsIGlzIGp1c3QgdGhlIHBhc3NlZC1pbiB2YWx1ZS4gKi8KLQlpZiAobGV2ZWwpCi0J CSpsZXZlbCA9IGNvbXByZXNzaW9uOwotfQotCiAvKiBQdWJsaWMgaW50ZXJmYWNlIHJvdXRpbmVz ICovCiAKIC8qIEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IgKi8KIENvbXByZXNzb3JTdGF0ZSAq Ci1BbGxvY2F0ZUNvbXByZXNzb3IoaW50IGNvbXByZXNzaW9uLCBXcml0ZUZ1bmMgd3JpdGVGKQor QWxsb2NhdGVDb21wcmVzc29yKENvbXByZXNzaW9uTWV0aG9kIGNvbXByZXNzaW9uTWV0aG9kLAor CQkJCSAgIGludCBjb21wcmVzc2lvbkxldmVsLCBXcml0ZUZ1bmMgd3JpdGVGKQogewogCUNvbXBy ZXNzb3JTdGF0ZSAqY3M7Ci0JQ29tcHJlc3Npb25BbGdvcml0aG0gYWxnOwotCWludAkJCWxldmVs OwotCi0JUGFyc2VDb21wcmVzc2lvbk9wdGlvbihjb21wcmVzc2lvbiwgJmFsZywgJmxldmVsKTsK IAogI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoYWxnID09IENPTVBSX0FMR19MSUJaKQorCWlmIChj b21wcmVzc2lvbk1ldGhvZCA9PSBDT01QUkVTU0lPTl9HWklQKQogCQlmYXRhbCgibm90IGJ1aWx0 IHdpdGggemxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKIAogCWNzID0gKENvbXByZXNzb3JTdGF0ZSAq KSBwZ19tYWxsb2MwKHNpemVvZihDb21wcmVzc29yU3RhdGUpKTsKIAljcy0+d3JpdGVGID0gd3Jp dGVGOwotCWNzLT5jb21wckFsZyA9IGFsZzsKKwljcy0+Y29tcHJlc3Npb25NZXRob2QgPSBjb21w cmVzc2lvbk1ldGhvZDsKIAogCS8qCiAJICogUGVyZm9ybSBjb21wcmVzc2lvbiBhbGdvcml0aG0g c3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAJICovCiAjaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGFs ZyA9PSBDT01QUl9BTEdfTElCWikKLQkJSW5pdENvbXByZXNzb3JabGliKGNzLCBsZXZlbCk7CisJ aWYgKGNvbXByZXNzaW9uTWV0aG9kID09IENPTVBSRVNTSU9OX0daSVApCisJCUluaXRDb21wcmVz c29yWmxpYihjcywgY29tcHJlc3Npb25MZXZlbCk7CiAjZW5kaWYKIAogCXJldHVybiBjczsKQEAg LTE1NCwyMSArMTI0LDI0IEBAIEFsbG9jYXRlQ29tcHJlc3NvcihpbnQgY29tcHJlc3Npb24sIFdy aXRlRnVuYyB3cml0ZUYpCiAgKiBvdXQgd2l0aCBhaHdyaXRlKCkuCiAgKi8KIHZvaWQKLVJlYWRE YXRhRnJvbUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIGludCBjb21wcmVzc2lvbiwgUmVhZEZ1 bmMgcmVhZEYpCitSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c2lvbk1ldGhvZCBjb21wcmVzc2lvbk1ldGhvZCwKKwkJCQkJaW50IGNvbXByZXNzaW9uTGV2ZWws IFJlYWRGdW5jIHJlYWRGKQogewotCUNvbXByZXNzaW9uQWxnb3JpdGhtIGFsZzsKLQotCVBhcnNl Q29tcHJlc3Npb25PcHRpb24oY29tcHJlc3Npb24sICZhbGcsIE5VTEwpOwotCi0JaWYgKGFsZyA9 PSBDT01QUl9BTEdfTk9ORSkKLQkJUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQUgsIHJlYWRGKTsK LQlpZiAoYWxnID09IENPTVBSX0FMR19MSUJaKQorCXN3aXRjaCAoY29tcHJlc3Npb25NZXRob2Qp CiAJeworCQljYXNlIENPTVBSRVNTSU9OX05PTkU6CisJCQlSZWFkRGF0YUZyb21BcmNoaXZlTm9u ZShBSCwgcmVhZEYpOworCQkJYnJlYWs7CisJCWNhc2UgQ09NUFJFU1NJT05fR1pJUDoKICNpZmRl ZiBIQVZFX0xJQloKLQkJUmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQUgsIHJlYWRGKTsKKwkJCVJl YWREYXRhRnJvbUFyY2hpdmVabGliKEFILCByZWFkRik7CiAjZWxzZQotCQlmYXRhbCgibm90IGJ1 aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CisJCQlmYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBz dXBwb3J0Iik7CiAjZW5kaWYKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmF0YWwoImludmFs aWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CiB9CiAKQEAgLTE3OSwxOCAr MTUyLDIxIEBAIHZvaWQKIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcywKIAkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikK IHsKLQlzd2l0Y2ggKGNzLT5jb21wckFsZykKKwlzd2l0Y2ggKGNzLT5jb21wcmVzc2lvbk1ldGhv ZCkKIAl7Ci0JCWNhc2UgQ09NUFJfQUxHX0xJQlo6CisJCWNhc2UgQ09NUFJFU1NJT05fR1pJUDoK ICNpZmRlZiBIQVZFX0xJQloKIAkJCVdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQUgsIGNzLCBkYXRh LCBkTGVuKTsKICNlbHNlCiAJCQlmYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7 CiAjZW5kaWYKIAkJCWJyZWFrOwotCQljYXNlIENPTVBSX0FMR19OT05FOgorCQljYXNlIENPTVBS RVNTSU9OX05PTkU6CiAJCQlXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFILCBjcywgZGF0YSwgZExl bik7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9u IG1ldGhvZCIpOworCQkJYnJlYWs7CiAJfQogfQogCkBAIC0yMDAsMTEgKzE3NiwyMyBAQCBXcml0 ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiB2 b2lkCiBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz KQogeworCXN3aXRjaCAoY3MtPmNvbXByZXNzaW9uTWV0aG9kKQorCXsKKwkJY2FzZSBDT01QUkVT U0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElCWgotCWlmIChjcy0+Y29tcHJBbGcgPT0gQ09NUFJf QUxHX0xJQlopCi0JCUVuZENvbXByZXNzb3JabGliKEFILCBjcyk7CisJCQlFbmRDb21wcmVzc29y WmxpYihBSCwgY3MpOworI2Vsc2UKKwkJCWZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBv cnQiKTsKICNlbmRpZgotCWZyZWUoY3MpOworCQkJYnJlYWs7CisJCWNhc2UgQ09NUFJFU1NJT05f Tk9ORToKKwkJCWZyZWUoY3MpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWZhdGFsKCJp bnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOworCQkJYnJlYWs7CisJfQogfQogCiAvKiBQcml2 YXRlIHJvdXRpbmVzLCBzcGVjaWZpYyB0byBlYWNoIGNvbXByZXNzaW9uIG1ldGhvZC4gKi8KQEAg LTQxOCwxMCArNDA2LDggQEAgV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcywKICAqLwogc3RydWN0IGNmcAogewotCUZJTEUJICAgKnVu Y29tcHJlc3NlZGZwOwotI2lmZGVmIEhBVkVfTElCWgotCWd6RmlsZQkJY29tcHJlc3NlZGZwOwot I2VuZGlmCisJQ29tcHJlc3Npb25NZXRob2QgY29tcHJlc3Npb25NZXRob2Q7CisJdm9pZAkgICAq ZnA7CiB9OwogCiAjaWZkZWYgSEFWRV9MSUJaCkBAIC00NTUsMTggKzQ0MSwxOCBAQCBjZm9wZW5f cmVhZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogCiAjaWZkZWYgSEFWRV9M SUJaCiAJaWYgKGhhc1N1ZmZpeChwYXRoLCAiLmd6IikpCi0JCWZwID0gY2ZvcGVuKHBhdGgsIG1v ZGUsIDEpOworCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBDT01QUkVTU0lPTl9HWklQLCAwKTsK IAllbHNlCiAjZW5kaWYKIAl7Ci0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIDApOworCQlmcCA9 IGNmb3BlbihwYXRoLCBtb2RlLCBDT01QUkVTU0lPTl9OT05FLCAwKTsKICNpZmRlZiBIQVZFX0xJ QloKIAkJaWYgKGZwID09IE5VTEwpCiAJCXsKIAkJCWNoYXIJICAgKmZuYW1lOwogCiAJCQlmbmFt ZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwotCQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUs IDEpOworCQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIENPTVBSRVNTSU9OX0daSVAsIDApOwog CQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKIAkJfQogI2VuZGlmCkBAIC00ODYsMTkgKzQ3Miwy MSBAQCBjZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogICog T24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgogICov CiBjZnAgKgotY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUs IGludCBjb21wcmVzc2lvbikKK2Nmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBj aGFyICptb2RlLAorCQkJIENvbXByZXNzaW9uTWV0aG9kIGNvbXByZXNzaW9uTWV0aG9kLAorCQkJ IGludCBjb21wcmVzc2lvbkxldmVsKQogewogCWNmcAkJICAgKmZwOwogCi0JaWYgKGNvbXByZXNz aW9uID09IDApCi0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIDApOworCWlmIChjb21wcmVzc2lv bk1ldGhvZCA9PSBDT01QUkVTU0lPTl9OT05FKQorCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBj b21wcmVzc2lvbk1ldGhvZCwgMCk7CiAJZWxzZQogCXsKICNpZmRlZiBIQVZFX0xJQloKIAkJY2hh cgkgICAqZm5hbWU7CiAKIAkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKLQkJZnAg PSBjZm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzaW9uKTsKKwkJZnAgPSBjZm9wZW4oZm5hbWUs IG1vZGUsIGNvbXByZXNzaW9uTWV0aG9kLCBjb21wcmVzc2lvbkxldmVsKTsKIAkJZnJlZV9rZWVw X2Vycm5vKGZuYW1lKTsKICNlbHNlCiAJCWZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBv cnQiKTsKQEAgLTUwOSw2MCArNDk3LDk0IEBAIGNmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRo LCBjb25zdCBjaGFyICptb2RlLCBpbnQgY29tcHJlc3Npb24pCiB9CiAKIC8qCi0gKiBPcGVucyBm aWxlICdwYXRoJyBpbiAnbW9kZScuIElmICdjb21wcmVzc2lvbicgaXMgbm9uLXplcm8sIHRoZSBm aWxlCi0gKiBpcyBvcGVuZWQgd2l0aCBsaWJ6IGd6b3BlbigpLCBvdGhlcndpc2Ugd2l0aCBwbGFp biBmb3BlbigpLgorICogVGhpcyBpcyB0aGUgd29ya2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRv cGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9yCisgKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdm ZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScuIFRoZQorICogZGVz Y3JpcHRvciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxp dHkgdG8gZG8gc28uCisgKiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVz c2lvbk1ldGhvZCcgaXMgc3VwcG9ydGVkIGJ5IHRoZQorICogY3VycmVudCBidWlsZC4KICAqCiAg KiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCiAg Ki8KLWNmcCAqCi1jZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50 IGNvbXByZXNzaW9uKQorc3RhdGljIGNmcCAqCitjZm9wZW5faW50ZXJuYWwoY29uc3QgY2hhciAq cGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAorCQkJCUNvbXByZXNzaW9uTWV0aG9kIGNv bXByZXNzaW9uTWV0aG9kLCBpbnQgY29tcHJlc3Npb25MZXZlbCkKIHsKIAljZnAJCSAgICpmcCA9 IHBnX21hbGxvYyhzaXplb2YoY2ZwKSk7CiAKLQlpZiAoY29tcHJlc3Npb24gIT0gMCkKKwlmcC0+ Y29tcHJlc3Npb25NZXRob2QgPSBjb21wcmVzc2lvbk1ldGhvZDsKKworCXN3aXRjaCAoY29tcHJl c3Npb25NZXRob2QpCiAJewotI2lmZGVmIEhBVkVfTElCWgotCQlpZiAoY29tcHJlc3Npb24gIT0g Wl9ERUZBVUxUX0NPTVBSRVNTSU9OKQotCQl7Ci0JCQkvKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBj b21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZSBpdCAqLwotCQkJY2hhcgkJbW9k ZV9jb21wcmVzc2lvblszMl07CisJCWNhc2UgQ09NUFJFU1NJT05fTk9ORToKKwkJCWlmIChmZCA+ PSAwKQorCQkJCWZwLT5mcCA9IGZkb3BlbihmZCwgbW9kZSk7CisJCQllbHNlCisJCQkJZnAtPmZw ID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJCQlpZiAoZnAtPmZwID09IE5VTEwpCisJCQl7CisJCQkJ ZnJlZV9rZWVwX2Vycm5vKGZwKTsKKwkJCQlmcCA9IE5VTEw7CisJCQl9CiAKLQkJCXNucHJpbnRm KG1vZGVfY29tcHJlc3Npb24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAotCQkJ CQkgbW9kZSwgY29tcHJlc3Npb24pOwotCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRo LCBtb2RlX2NvbXByZXNzaW9uKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qIGRvbid0IHNwZWNp ZnkgYSBsZXZlbCwganVzdCB1c2UgdGhlIHpsaWIgZGVmYXVsdCAqLwotCQkJZnAtPmNvbXByZXNz ZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlKTsKLQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ09NUFJF U1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCWlmIChjb21wcmVzc2lvbkxldmVsICE9 IFpfREVGQVVMVF9DT01QUkVTU0lPTikKKwkJCXsKKwkJCQkvKgorCQkJCSAqIHVzZXIgaGFzIHNw ZWNpZmllZCBhIGNvbXByZXNzaW9uIGxldmVsLCBzbyB0ZWxsIHpsaWIgdG8gdXNlCisJCQkJICog aXQKKwkJCQkgKi8KKwkJCQljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMyXTsKKworCQkJCXNucHJp bnRmKG1vZGVfY29tcHJlc3Npb24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAor CQkJCQkJIG1vZGUsIGNvbXByZXNzaW9uTGV2ZWwpOworCQkJCWlmIChmZCA+PSAwKQorCQkJCQlm cC0+ZnAgPSBnemRvcGVuKGZkLCBtb2RlX2NvbXByZXNzaW9uKTsKKwkJCQllbHNlCisJCQkJCWZw LT5mcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQkvKiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNlIHRoZSB6bGliIGRlZmF1 bHQgKi8KKwkJCQlpZiAoZmQgPj0gMCkKKwkJCQkJZnAtPmZwID0gZ3pkb3BlbihmZCwgbW9kZSk7 CisJCQkJZWxzZQorCQkJCQlmcC0+ZnAgPSBnem9wZW4ocGF0aCwgbW9kZSk7CisJCQl9CiAKLQkJ ZnAtPnVuY29tcHJlc3NlZGZwID0gTlVMTDsKLQkJaWYgKGZwLT5jb21wcmVzc2VkZnAgPT0gTlVM TCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVMTDsKLQkJfQorCQkJ aWYgKGZwLT5mcCA9PSBOVUxMKQorCQkJeworCQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7CisJCQkJ ZnAgPSBOVUxMOworCQkJfQogI2Vsc2UKLQkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3Vw cG9ydCIpOwotI2VuZGlmCi0JfQotCWVsc2UKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWZwLT5j b21wcmVzc2VkZnAgPSBOVUxMOworCQkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9y dCIpOwogI2VuZGlmCi0JCWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOwot CQlpZiAoZnAtPnVuY29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJCWZyZWVfa2VlcF9lcnJu byhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmF0 YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CiAKIAlyZXR1 cm4gZnA7CiB9CiAKK2NmcCAqCitjZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq bW9kZSwKKwkgICBDb21wcmVzc2lvbk1ldGhvZCBjb21wcmVzc2lvbk1ldGhvZCwKKwkgICBpbnQg Y29tcHJlc3Npb25MZXZlbCkKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKHBhdGgsIC0xLCBt b2RlLCBjb21wcmVzc2lvbk1ldGhvZCwgY29tcHJlc3Npb25MZXZlbCk7Cit9CisKK2NmcCAqCitj ZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkgICBDb21wcmVzc2lvbk1ldGhvZCBj b21wcmVzc2lvbk1ldGhvZCwKKwkgICBpbnQgY29tcHJlc3Npb25MZXZlbCkKK3sKKwlyZXR1cm4g Y2ZvcGVuX2ludGVybmFsKE5VTEwsIGZkLCBtb2RlLCBjb21wcmVzc2lvbk1ldGhvZCwgY29tcHJl c3Npb25MZXZlbCk7Cit9CiAKIGludAogY2ZyZWFkKHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAq ZnApCkBAIC01NzIsMzggKzU5NCw2MSBAQCBjZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2Zw ICpmcCkKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm4gMDsKIAotI2lmZGVmIEhBVkVfTElCWgot CWlmIChmcC0+Y29tcHJlc3NlZGZwKQorCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9uTWV0aG9kKQog CXsKLQkJcmV0ID0gZ3pyZWFkKGZwLT5jb21wcmVzc2VkZnAsIHB0ciwgc2l6ZSk7Ci0JCWlmIChy ZXQgIT0gc2l6ZSAmJiAhZ3plb2YoZnAtPmNvbXByZXNzZWRmcCkpCi0JCXsKLQkJCWludAkJCWVy cm51bTsKLQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmNvbXByZXNzZWRmcCwg JmVycm51bSk7CisJCWNhc2UgQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZyZWFkKHB0ciwg MSwgc2l6ZSwgZnAtPmZwKTsKKwkJCWlmIChyZXQgIT0gc2l6ZSAmJiAhZmVvZihmcC0+ZnApKQor CQkJCVJFQURfRVJST1JfRVhJVChmcC0+ZnApOwogCi0JCQlmYXRhbCgiY291bGQgbm90IHJlYWQg ZnJvbSBpbnB1dCBmaWxlOiAlcyIsCi0JCQkJICBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9y KGVycm5vKSA6IGVycm1zZyk7Ci0JCX0KLQl9Ci0JZWxzZQorCQkJYnJlYWs7CisJCWNhc2UgQ09N UFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9IGd6cmVhZChmcC0+ZnAs IHB0ciwgc2l6ZSk7CisJCQlpZiAocmV0ICE9IHNpemUgJiYgIWd6ZW9mKGZwLT5mcCkpCisJCQl7 CisJCQkJaW50CQkJZXJybnVtOworCQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAt PmZwLCAmZXJybnVtKTsKKworCQkJCWZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZp bGU6ICVzIiwKKwkJCQkJICBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVy cm1zZyk7CisJCQl9CisjZWxzZQorCQkJZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9y dCIpOwogI2VuZGlmCi0JewotCQlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZwLT51bmNvbXBy ZXNzZWRmcCk7Ci0JCWlmIChyZXQgIT0gc2l6ZSAmJiAhZmVvZihmcC0+dW5jb21wcmVzc2VkZnAp KQotCQkJUkVBRF9FUlJPUl9FWElUKGZwLT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKwor CQlkZWZhdWx0OgorCQkJZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQli cmVhazsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmd3JpdGUoY29uc3Qgdm9pZCAq cHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKIHsKKwlpbnQJCQlyZXQgPSAwOworCisJc3dpdGNoIChm cC0+Y29tcHJlc3Npb25NZXRob2QpCisJeworCQljYXNlIENPTVBSRVNTSU9OX05PTkU6CisJCQly ZXQgPSBmd3JpdGUocHRyLCAxLCBzaXplLCBmcC0+ZnApOworCQkJYnJlYWs7CisJCWNhc2UgQ09N UFJFU1NJT05fR1pJUDoKICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkK LQkJcmV0dXJuIGd6d3JpdGUoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQllbHNlCisJ CQlyZXQgPSBnendyaXRlKGZwLT5mcCwgcHRyLCBzaXplKTsKKyNlbHNlCisJCQlmYXRhbCgibm90 IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKLQkJcmV0dXJuIGZ3cml0ZShwdHIs IDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOworCQkJYnJlYWs7CisJfQorCisJ cmV0dXJuIHJldDsKIH0KIAogaW50CkBAIC02MTEsMjQgKzY1NiwzMSBAQCBjZmdldGMoY2ZwICpm cCkKIHsKIAlpbnQJCQlyZXQ7CiAKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNz ZWRmcCkKKwlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbk1ldGhvZCkKIAl7Ci0JCXJldCA9IGd6Z2V0 YyhmcC0+Y29tcHJlc3NlZGZwKTsKLQkJaWYgKHJldCA9PSBFT0YpCi0JCXsKLQkJCWlmICghZ3pl b2YoZnAtPmNvbXByZXNzZWRmcCkpCi0JCQkJZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5w dXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwotCQkJZWxzZQotCQkJCWZhdGFsKCJjb3Vs ZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7Ci0JCX0KLQl9Ci0JZWxz ZQorCQljYXNlIENPTVBSRVNTSU9OX05PTkU6CisJCQlyZXQgPSBmZ2V0YyhmcC0+ZnApOworCQkJ aWYgKHJldCA9PSBFT0YpCisJCQkJUkVBRF9FUlJPUl9FWElUKGZwLT5mcCk7CisKKwkJCWJyZWFr OworCQljYXNlIENPTVBSRVNTSU9OX0daSVA6CisjaWZkZWYgSEFWRV9MSUJaCisJCQlyZXQgPSBn emdldGMoKGd6RmlsZSlmcC0+ZnApOworCQkJaWYgKHJldCA9PSBFT0YpCisJCQl7CisJCQkJaWYg KCFnemVvZihmcC0+ZnApKQorCQkJCQlmYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBm aWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZWxzZQorCQkJCQlmYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCQkJfQorI2Vsc2UKKwkJ CWZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNlbmRpZgotCXsKLQkJcmV0 ID0gZmdldGMoZnAtPnVuY29tcHJlc3NlZGZwKTsKLQkJaWYgKHJldCA9PSBFT0YpCi0JCQlSRUFE X0VSUk9SX0VYSVQoZnAtPnVuY29tcHJlc3NlZGZwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CiAK IAlyZXR1cm4gcmV0OwpAQCAtNjM3LDY1ICs2ODksMTA3IEBAIGNmZ2V0YyhjZnAgKmZwKQogY2hh ciAqCiBjZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKQogeworCWNoYXIJICAgKnJl dDsKKworCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9uTWV0aG9kKQorCXsKKwkJY2FzZSBDT01QUkVT U0lPTl9OT05FOgorCQkJcmV0ID0gZmdldHMoYnVmLCBsZW4sIGZwLT5mcCk7CisKKwkJCWJyZWFr OworCQljYXNlIENPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5j b21wcmVzc2VkZnApCi0JCXJldHVybiBnemdldHMoZnAtPmNvbXByZXNzZWRmcCwgYnVmLCBsZW4p OwotCWVsc2UKKwkJCXJldCA9IGd6Z2V0cyhmcC0+ZnAsIGJ1ZiwgbGVuKTsKKyNlbHNlCisJCQlm YXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKLQkJcmV0dXJuIGZn ZXRzKGJ1ZiwgbGVuLCBmcC0+dW5jb21wcmVzc2VkZnApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQlmYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKKwkJCWJyZWFrOworCX0K KworCXJldHVybiByZXQ7CiB9CiAKIGludAogY2ZjbG9zZShjZnAgKmZwKQogewotCWludAkJCXJl c3VsdDsKKwlpbnQJCQlyZXQ7CiAKIAlpZiAoZnAgPT0gTlVMTCkKIAl7CiAJCWVycm5vID0gRUJB REY7CiAJCXJldHVybiBFT0Y7CiAJfQotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJl c3NlZGZwKQorCisJc3dpdGNoIChmcC0+Y29tcHJlc3Npb25NZXRob2QpCiAJewotCQlyZXN1bHQg PSBnemNsb3NlKGZwLT5jb21wcmVzc2VkZnApOwotCQlmcC0+Y29tcHJlc3NlZGZwID0gTlVMTDsK LQl9Ci0JZWxzZQorCQljYXNlIENPTVBSRVNTSU9OX05PTkU6CisJCQlyZXQgPSBmY2xvc2UoZnAt PmZwKTsKKwkJCWZwLT5mcCA9IE5VTEw7CisKKwkJCWJyZWFrOworCQljYXNlIENPTVBSRVNTSU9O X0daSVA6CisjaWZkZWYgSEFWRV9MSUJaCisJCQlyZXQgPSBnemNsb3NlKGZwLT5mcCk7CisJCQlm cC0+ZnAgPSBOVUxMOworI2Vsc2UKKwkJCWZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBv cnQiKTsKICNlbmRpZgotCXsKLQkJcmVzdWx0ID0gZmNsb3NlKGZwLT51bmNvbXByZXNzZWRmcCk7 Ci0JCWZwLT51bmNvbXByZXNzZWRmcCA9IE5VTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOworCQkJYnJlYWs7CiAJfQorCiAJ ZnJlZV9rZWVwX2Vycm5vKGZwKTsKIAotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIHJldDsKIH0K IAogaW50CiBjZmVvZihjZnAgKmZwKQogeworCWludAkJCXJldDsKKworCXN3aXRjaCAoZnAtPmNv bXByZXNzaW9uTWV0aG9kKQorCXsKKwkJY2FzZSBDT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0g ZmVvZihmcC0+ZnApOworCisJCQlicmVhazsKKwkJY2FzZSBDT01QUkVTU0lPTl9HWklQOgogI2lm ZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3plb2YoZnAt PmNvbXByZXNzZWRmcCk7Ci0JZWxzZQorCQkJcmV0ID0gZ3plb2YoZnAtPmZwKTsKKyNlbHNlCisJ CQlmYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKLQkJcmV0dXJu IGZlb2YoZnAtPnVuY29tcHJlc3NlZGZwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmF0 YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKKwl9CisKKwlyZXR1 cm4gcmV0OwogfQogCiBjb25zdCBjaGFyICoKIGdldF9jZnBfZXJyb3IoY2ZwICpmcCkKIHsKLSNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKwlpZiAoZnAtPmNvbXByZXNz aW9uTWV0aG9kID09IENPTVBSRVNTSU9OX0daSVApCiAJeworI2lmZGVmIEhBVkVfTElCWgogCQlp bnQJCQllcnJudW07Ci0JCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmNvbXByZXNz ZWRmcCwgJmVycm51bSk7CisJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmZwLCAm ZXJybnVtKTsKIAogCQlpZiAoZXJybnVtICE9IFpfRVJSTk8pCiAJCQlyZXR1cm4gZXJybXNnOwot CX0KKyNlbHNlCisJCWZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNlbmRp ZgorCX0KKwogCXJldHVybiBzdHJlcnJvcihlcnJubyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19pby5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgK aW5kZXggZjYzNTc4NzY5Mi4uYjhiMzY2NjE2YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2lvLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKQEAgLTE3 LDE2ICsxNywxNyBAQAogCiAjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKKyNpZmRl ZiBIQVZFX0xJQloKKyNpbmNsdWRlIDx6bGliLmg+CisjZWxzZQorLyogdGhpcyBpcyBqdXN0IHRo ZSByZWRlZmluaXRpb24gb2YgYSBsaWJ6IGNvbnN0YW50ICovCisjZGVmaW5lIFpfREVGQVVMVF9D T01QUkVTU0lPTiAoLTEpCisjZW5kaWYKKwogLyogSW5pdGlhbCBidWZmZXIgc2l6ZXMgdXNlZCBp biB6bGliIGNvbXByZXNzaW9uLiAqLwogI2RlZmluZSBaTElCX09VVF9TSVpFCTQwOTYKICNkZWZp bmUgWkxJQl9JTl9TSVpFCTQwOTYKIAotdHlwZWRlZiBlbnVtCi17Ci0JQ09NUFJfQUxHX05PTkUs Ci0JQ09NUFJfQUxHX0xJQloKLX0gQ29tcHJlc3Npb25BbGdvcml0aG07Ci0KIC8qIFByb3RvdHlw ZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gV3JpdGVEYXRhVG9BcmNoaXZlKCkgKi8KIHR5cGVk ZWYgdm9pZCAoKldyaXRlRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpidWYs IHNpemVfdCBsZW4pOwogCkBAIC00Niw4ICs0NywxMiBAQCB0eXBlZGVmIHNpemVfdCAoKlJlYWRG dW5jKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKIC8q IHN0cnVjdCBkZWZpbml0aW9uIGFwcGVhcnMgaW4gY29tcHJlc3NfaW8uYyAqLwogdHlwZWRlZiBz dHJ1Y3QgQ29tcHJlc3NvclN0YXRlIENvbXByZXNzb3JTdGF0ZTsKIAotZXh0ZXJuIENvbXByZXNz b3JTdGF0ZSAqQWxsb2NhdGVDb21wcmVzc29yKGludCBjb21wcmVzc2lvbiwgV3JpdGVGdW5jIHdy aXRlRik7Ci1leHRlcm4gdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI LCBpbnQgY29tcHJlc3Npb24sCitleHRlcm4gQ29tcHJlc3NvclN0YXRlICpBbGxvY2F0ZUNvbXBy ZXNzb3IoQ29tcHJlc3Npb25NZXRob2QgY29tcHJlc3Npb25NZXRob2QsCisJCQkJCQkJCQkJICAg aW50IGNvbXByZXNzaW9uTGV2ZWwsCisJCQkJCQkJCQkJICAgV3JpdGVGdW5jIHdyaXRlRik7Citl eHRlcm4gdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAorCQkJCQkJ CQlDb21wcmVzc2lvbk1ldGhvZCBjb21wcmVzc2lvbk1ldGhvZCwKKwkJCQkJCQkJaW50IGNvbXBy ZXNzaW9uTGV2ZWwsCiAJCQkJCQkJCVJlYWRGdW5jIHJlYWRGKTsKIGV4dGVybiB2b2lkIFdyaXRl RGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKIAkJ CQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CkBAIC01Niw5ICs2MSwxNiBA QCBleHRlcm4gdm9pZCBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29y U3RhdGUgKmNzKTsKIAogdHlwZWRlZiBzdHJ1Y3QgY2ZwIGNmcDsKIAotZXh0ZXJuIGNmcCAqY2Zv cGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBjb21wcmVzc2lvbik7 CitleHRlcm4gY2ZwICpjZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwK KwkJCQkgICBDb21wcmVzc2lvbk1ldGhvZCBjb21wcmVzc2lvbk1ldGhvZCwKKwkJCQkgICBpbnQg Y29tcHJlc3Npb25MZXZlbCk7CitleHRlcm4gY2ZwICpjZmRvcGVuKGludCBmZCwgY29uc3QgY2hh ciAqbW9kZSwKKwkJCQkgICBDb21wcmVzc2lvbk1ldGhvZCBjb21wcmVzc2lvbk1ldGhvZCwKKwkJ CQkgICBpbnQgY29tcHJlc3Npb25MZXZlbCk7CiBleHRlcm4gY2ZwICpjZm9wZW5fcmVhZChjb25z dCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKTsKLWV4dGVybiBjZnAgKmNmb3Blbl93cml0 ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBpbnQgY29tcHJlc3Npb24pOwor ZXh0ZXJuIGNmcCAqY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1v ZGUsCisJCQkJCQkgQ29tcHJlc3Npb25NZXRob2QgY29tcHJlc3Npb25NZXRob2QsCisJCQkJCQkg aW50IGNvbXByZXNzaW9uTGV2ZWwpOwogZXh0ZXJuIGludAljZnJlYWQodm9pZCAqcHRyLCBpbnQg c2l6ZSwgY2ZwICpmcCk7CiBleHRlcm4gaW50CWNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQg c2l6ZSwgY2ZwICpmcCk7CiBleHRlcm4gaW50CWNmZ2V0YyhjZnAgKmZwKTsKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAu aAppbmRleCBmY2M1ZjZiZDA1Li5kOWY2YzlhMDg3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCkBAIC03NSw2 ICs3NSwxMyBAQCBlbnVtIF9kdW1wUHJlcGFyZWRRdWVyaWVzCiAJTlVNX1BSRVBfUVVFUklFUwkJ CS8qIG11c3QgYmUgbGFzdCAqLwogfTsKIAordHlwZWRlZiBlbnVtIF9jb21wcmVzc2lvbk1ldGhv ZAoreworCUNPTVBSRVNTSU9OX0daSVAsCisJQ09NUFJFU1NJT05fTk9ORSwKKwlDT01QUkVTU0lP Tl9JTlZBTElECit9IENvbXByZXNzaW9uTWV0aG9kOworCiAvKiBQYXJhbWV0ZXJzIG5lZWRlZCBi eSBDb25uZWN0RGF0YWJhc2U7IHNhbWUgZm9yIGR1bXAgYW5kIHJlc3RvcmUgKi8KIHR5cGVkZWYg c3RydWN0IF9jb25uUGFyYW1zCiB7CkBAIC0xNDMsNyArMTUwLDggQEAgdHlwZWRlZiBzdHJ1Y3Qg X3Jlc3RvcmVPcHRpb25zCiAKIAlpbnQJCQlub0RhdGFGb3JGYWlsZWRUYWJsZXM7CiAJaW50CQkJ ZXhpdF9vbl9lcnJvcjsKLQlpbnQJCQljb21wcmVzc2lvbjsKKwlDb21wcmVzc2lvbk1ldGhvZCBj b21wcmVzc2lvbk1ldGhvZDsKKwlpbnQJCQljb21wcmVzc2lvbkxldmVsOwogCWludAkJCXN1cHBy ZXNzRHVtcFdhcm5pbmdzOwkvKiBTdXBwcmVzcyBvdXRwdXQgb2YgV0FSTklORyBlbnRyaWVzCiAJ CQkJCQkJCQkJICogdG8gc3RkZXJyICovCiAJYm9vbAkJc2luZ2xlX3R4bjsKQEAgLTMwMyw3ICsz MTEsOSBAQCBleHRlcm4gQXJjaGl2ZSAqT3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMs IGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10KTsKIAogLyogQ3JlYXRlIGEgbmV3IGFyY2hpdmUgKi8K IGV4dGVybiBBcmNoaXZlICpDcmVhdGVBcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25z dCBBcmNoaXZlRm9ybWF0IGZtdCwKLQkJCQkJCQkgIGNvbnN0IGludCBjb21wcmVzc2lvbiwgYm9v bCBkb3N5bmMsIEFyY2hpdmVNb2RlIG1vZGUsCisJCQkJCQkJICBjb25zdCBDb21wcmVzc2lvbk1l dGhvZCBjb21wcmVzc2lvbk1ldGhvZCwKKwkJCQkJCQkgIGNvbnN0IGludCBjb21wcmVzc2lvbiwK KwkJCQkJCQkgIGJvb2wgZG9zeW5jLCBBcmNoaXZlTW9kZSBtb2RlLAogCQkJCQkJCSAgU2V0dXBX b3JrZXJQdHJUeXBlIHNldHVwRHVtcFdvcmtlcik7CiAKIC8qIFRoZSAtLWxpc3Qgb3B0aW9uICov CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggZDQxYTk5ZDZlYS4uN2Q5NjQ0 NmYxYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtMzEsNiArMzEsNyBA QAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcHJl c3NfaW8uaCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJp bmdfdXRpbHMuaCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgpAQCAtNDMsMTMgKzQ0LDYg QEAKICNkZWZpbmUgVEVYVF9EVU1QX0hFQURFUiAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2Ug ZHVtcFxuLS1cblxuIgogI2RlZmluZSBURVhUX0RVTVBBTExfSEVBREVSICItLVxuLS0gUG9zdGdy ZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIKIAotLyogc3RhdGUgbmVlZGVkIHRv IHNhdmUvcmVzdG9yZSBhbiBhcmNoaXZlJ3Mgb3V0cHV0IHRhcmdldCAqLwotdHlwZWRlZiBzdHJ1 Y3QgX291dHB1dENvbnRleHQKLXsKLQl2b2lkCSAgICpPRjsKLQlpbnQJCQlnek91dDsKLX0gT3V0 cHV0Q29udGV4dDsKLQogLyoKICAqIFN0YXRlIGZvciB0cmFja2luZyBUb2NFbnRyeXMgdGhhdCBh cmUgcmVhZHkgdG8gcHJvY2VzcyBkdXJpbmcgYSBwYXJhbGxlbAogICogcmVzdG9yZS4gIChUaGlz IHVzZWQgdG8gYmUgYSBsaXN0LCBhbmQgd2Ugc3RpbGwgY2FsbCBpdCB0aGF0LCB0aG91Z2ggbm93 CkBAIC03MCw3ICs2NCw5IEBAIHR5cGVkZWYgc3RydWN0IF9wYXJhbGxlbFJlYWR5TGlzdAogCiAK IHN0YXRpYyBBcmNoaXZlSGFuZGxlICpfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29u c3QgQXJjaGl2ZUZvcm1hdCBmbXQsCi0JCQkJCQkJICAgY29uc3QgaW50IGNvbXByZXNzaW9uLCBi b29sIGRvc3luYywgQXJjaGl2ZU1vZGUgbW9kZSwKKwkJCQkJCQkgICBjb25zdCBDb21wcmVzc2lv bk1ldGhvZCBjb21wcmVzc2lvbk1ldGhvZCwKKwkJCQkJCQkgICBjb25zdCBpbnQgY29tcHJlc3Np b25MZXZlbCwKKwkJCQkJCQkgICBib29sIGRvc3luYywgQXJjaGl2ZU1vZGUgbW9kZSwKIAkJCQkJ CQkgICBTZXR1cFdvcmtlclB0clR5cGUgc2V0dXBXb3JrZXJQdHIpOwogc3RhdGljIHZvaWQgX2dl dE9iamVjdERlc2NyaXB0aW9uKFBRRXhwQnVmZmVyIGJ1ZiwgVG9jRW50cnkgKnRlKTsKIHN0YXRp YyB2b2lkIF9wcmludFRvY0VudHJ5KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIGJv b2wgaXNEYXRhKTsKQEAgLTk4LDkgKzk0LDExIEBAIHN0YXRpYyBpbnQJX2Rpc2NvdmVyQXJjaGl2 ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJj aGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAq QUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqbXNnLCB0aW1lX3QgdGltKTsKLXN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjb21wcmVzc2lvbik7Ci1zdGF0aWMg T3V0cHV0Q29udGV4dCBTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRpYyB2b2lk IFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIE91dHB1dENvbnRleHQgc2F2ZWRDb250 ZXh0KTsKK3N0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsCisJCQkJCSAgQ29tcHJlc3Npb25NZXRob2QgY29tcHJlc3Npb25NZXRob2Qs CisJCQkJCSAgaW50IGNvbXByZXNzaW9uTGV2ZWwpOworc3RhdGljIGNmcCAqU2F2ZU91dHB1dChB cmNoaXZlSGFuZGxlICpBSCk7CitzdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5k bGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0KTsKIAogc3RhdGljIGludAlyZXN0b3JlX3RvY19lbnRy eShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBib29sIGlzX3BhcmFsbGVsKTsKIHN0 YXRpYyB2b2lkIHJlc3RvcmVfdG9jX2VudHJpZXNfcHJlZm9yayhBcmNoaXZlSGFuZGxlICpBSCwK QEAgLTIzOSwxMiArMjM3LDE1IEBAIHNldHVwUmVzdG9yZVdvcmtlcihBcmNoaXZlICpBSFgpCiAv KiBQdWJsaWMgKi8KIEFyY2hpdmUgKgogQ3JlYXRlQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3Bl YywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCi0JCQkgIGNvbnN0IGludCBjb21wcmVzc2lvbiwg Ym9vbCBkb3N5bmMsIEFyY2hpdmVNb2RlIG1vZGUsCisJCQkgIGNvbnN0IENvbXByZXNzaW9uTWV0 aG9kIGNvbXByZXNzaW9uTWV0aG9kLAorCQkJICBjb25zdCBpbnQgY29tcHJlc3Npb25MZXZlbCwK KwkJCSAgYm9vbCBkb3N5bmMsIEFyY2hpdmVNb2RlIG1vZGUsCiAJCQkgIFNldHVwV29ya2VyUHRy VHlwZSBzZXR1cER1bXBXb3JrZXIpCiAKIHsKLQlBcmNoaXZlSGFuZGxlICpBSCA9IF9hbGxvY0FI KEZpbGVTcGVjLCBmbXQsIGNvbXByZXNzaW9uLCBkb3N5bmMsCi0JCQkJCQkJCSBtb2RlLCBzZXR1 cER1bXBXb3JrZXIpOworCUFyY2hpdmVIYW5kbGUgKkFIID0gX2FsbG9jQUgoRmlsZVNwZWMsIGZt dCwKKwkJCQkJCQkJIGNvbXByZXNzaW9uTWV0aG9kLCBjb21wcmVzc2lvbkxldmVsLAorCQkJCQkJ CQkgZG9zeW5jLCBtb2RlLCBzZXR1cER1bXBXb3JrZXIpOwogCiAJcmV0dXJuIChBcmNoaXZlICop IEFIOwogfQpAQCAtMjU0LDcgKzI1NSw4IEBAIENyZWF0ZUFyY2hpdmUoY29uc3QgY2hhciAqRmls ZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogQXJjaGl2ZSAqCiBPcGVuQXJjaGl2ZShj b25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQpCiB7Ci0JQXJjaGl2 ZUhhbmRsZSAqQUggPSBfYWxsb2NBSChGaWxlU3BlYywgZm10LCAwLCB0cnVlLCBhcmNoTW9kZVJl YWQsIHNldHVwUmVzdG9yZVdvcmtlcik7CisJQXJjaGl2ZUhhbmRsZSAqQUggPSBfYWxsb2NBSChG aWxlU3BlYywgZm10LCBDT01QUkVTU0lPTl9OT05FLCAwLCB0cnVlLAorCQkJCQkJCQkgYXJjaE1v ZGVSZWFkLCBzZXR1cFJlc3RvcmVXb3JrZXIpOwogCiAJcmV0dXJuIChBcmNoaXZlICopIEFIOwog fQpAQCAtMjY5LDExICsyNzEsOCBAQCBDbG9zZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCUFILT5D bG9zZVB0cihBSCk7CiAKIAkvKiBDbG9zZSB0aGUgb3V0cHV0ICovCi0JZXJybm8gPSAwOwkJCQkJ LyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQot CQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0JZWxzZSBpZiAoQUgtPk9GICE9IHN0ZG91dCkKLQkJ cmVzID0gZmNsb3NlKEFILT5PRik7CisJZXJybm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9G KTsKIAogCWlmIChyZXMgIT0gMCkKIAkJZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmls ZTogJW0iKTsKQEAgLTM1NSw3ICszNTQsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgp CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CiAJYm9vbAkJcGFyYWxs ZWxfbW9kZTsKIAlUb2NFbnRyeSAgICp0ZTsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAg ICpzYXY7CiAKIAlBSC0+c3RhZ2UgPSBTVEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTM4NCw3ICsz ODMsOCBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICogTWFrZSBzdXJlIHdlIHdv bid0IG5lZWQgKGRlKWNvbXByZXNzaW9uIHdlIGhhdmVuJ3QgZ290CiAJICovCiAjaWZuZGVmIEhB VkVfTElCWgotCWlmIChBSC0+Y29tcHJlc3Npb24gIT0gMCAmJiBBSC0+UHJpbnRUb2NEYXRhUHRy ICE9IE5VTEwpCisJaWYgKEFILT5jb21wcmVzc2lvbk1ldGhvZCA9PSBDT01QUkVTU0lPTl9HWklQ ICYmCisJCUFILT5QcmludFRvY0RhdGFQdHIgIT0gTlVMTCkKIAl7CiAJCWZvciAodGUgPSBBSC0+ dG9jLT5uZXh0OyB0ZSAhPSBBSC0+dG9jOyB0ZSA9IHRlLT5uZXh0KQogCQl7CkBAIC00NTksOCAr NDU5LDkgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCSAqIFNldHVwIHRoZSBvdXRw dXQgZmlsZSBpZiBuZWNlc3NhcnkuCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7Ci0JaWYg KHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uKQotCQlTZXRPdXRwdXQoQUgsIHJv cHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbik7CisJaWYgKHJvcHQtPmZpbGVuYW1lIHx8 IHJvcHQtPmNvbXByZXNzaW9uTWV0aG9kICE9IENPTVBSRVNTSU9OX05PTkUpCisJCVNldE91dHB1 dChBSCwgcm9wdC0+ZmlsZW5hbWUsCisJCQkJICByb3B0LT5jb21wcmVzc2lvbk1ldGhvZCwgcm9w dC0+Y29tcHJlc3Npb25MZXZlbCk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FM IGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC03NDAsNyArNzQxLDcgQEAgUmVzdG9yZUFy Y2hpdmUoQXJjaGl2ZSAqQUhYKQogCSAqLwogCUFILT5zdGFnZSA9IFNUQUdFX0ZJTkFMSVpJTkc7 CiAKLQlpZiAocm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29tcHJlc3Npb24pCisJaWYgKHJvcHQt PmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uTWV0aG9kICE9IENPTVBSRVNTSU9OX05PTkUp CiAJCVJlc3RvcmVPdXRwdXQoQUgsIHNhdik7CiAKIAlpZiAocm9wdC0+dXNlREIpCkBAIC05NzAs NiArOTcxLDcgQEAgTmV3UmVzdG9yZU9wdGlvbnModm9pZCkKIAlvcHRzLT5mb3JtYXQgPSBhcmNo VW5rbm93bjsKIAlvcHRzLT5jcGFyYW1zLnByb21wdFBhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CiAJ b3B0cy0+ZHVtcFNlY3Rpb25zID0gRFVNUF9VTlNFQ1RJT05FRDsKKwlvcHRzLT5jb21wcmVzc2lv bk1ldGhvZCA9IENPTVBSRVNTSU9OX05PTkU7CiAKIAlyZXR1cm4gb3B0czsKIH0KQEAgLTExMTcs MTMgKzExMTksMTMgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlSZXN0b3JlT3B0 aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKIAlUb2NFbnRyeSAgICp0ZTsKIAl0ZVNlY3Rp b24JY3VyU2VjdGlvbjsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAgICpzYXY7CiAJY29u c3QgY2hhciAqZm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCiAJc2F2ID0gU2F2ZU91 dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZp bGVuYW1lLCAwIC8qIG5vIGNvbXByZXNzaW9uICovICk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ ZmlsZW5hbWUsIENPTVBSRVNTSU9OX05PTkUsIDApOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0 ciwgc2l6ZW9mKHN0YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGlt ZSgmQUgtPmNyZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTEzMiw3ICsxMTM0LDcgQEAgUHJpbnRUT0NT dW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlhaHByaW50ZihBSCwgIjtcbjsgQXJjaGl2ZSBjcmVhdGVk IGF0ICVzXG4iLCBzdGFtcF9zdHIpOwogCWFocHJpbnRmKEFILCAiOyAgICAgZGJuYW1lOiAlc1xu OyAgICAgVE9DIEVudHJpZXM6ICVkXG47ICAgICBDb21wcmVzc2lvbjogJWRcbiIsCiAJCQkgc2Fu aXRpemVfbGluZShBSC0+YXJjaGRibmFtZSwgZmFsc2UpLAotCQkJIEFILT50b2NDb3VudCwgQUgt PmNvbXByZXNzaW9uKTsKKwkJCSBBSC0+dG9jQ291bnQsIEFILT5jb21wcmVzc2lvbkxldmVsKTsK IAogCXN3aXRjaCAoQUgtPmZvcm1hdCkKIAl7CkBAIC0xNDg2LDYwICsxNDg4LDM1IEBAIGFyY2hw cmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQKLVNldE91dHB1dChBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjb21wcmVzc2lvbikKK1NldE91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCSAgQ29tcHJlc3Npb25N ZXRob2QgY29tcHJlc3Npb25NZXRob2QsIGludCBjb21wcmVzc2lvbkxldmVsKQogewotCWludAkJ CWZuOworCWNvbnN0IGNoYXIgKm1vZGU7CisJaW50CQkJZm4gPSAtMTsKIAogCWlmIChmaWxlbmFt ZSkKIAl7CiAJCWlmIChzdHJjbXAoZmlsZW5hbWUsICItIikgPT0gMCkKIAkJCWZuID0gZmlsZW5v KHN0ZG91dCk7Ci0JCWVsc2UKLQkJCWZuID0gLTE7CiAJfQogCWVsc2UgaWYgKEFILT5GSCkKIAkJ Zm4gPSBmaWxlbm8oQUgtPkZIKTsKIAllbHNlIGlmIChBSC0+ZlNwZWMpCiAJewotCQlmbiA9IC0x OwogCQlmaWxlbmFtZSA9IEFILT5mU3BlYzsKIAl9CiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRv dXQpOwogCi0JLyogSWYgY29tcHJlc3Npb24gZXhwbGljaXRseSByZXF1ZXN0ZWQsIHVzZSBnem9w ZW4gKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Npb24gIT0gMCkKLQl7Ci0JCWNo YXIJCWZtb2RlWzE0XTsKKwlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJCW1vZGUg PSBQR19CSU5BUllfQTsKKwllbHNlCisJCW1vZGUgPSBQR19CSU5BUllfVzsKIAotCQkvKiBEb24n dCB1c2UgUEdfQklOQVJZX3ggc2luY2UgdGhpcyBpcyB6bGliICovCi0JCXNwcmludGYoZm1vZGUs ICJ3YiVkIiwgY29tcHJlc3Npb24pOwotCQlpZiAoZm4gPj0gMCkKLQkJCUFILT5PRiA9IGd6ZG9w ZW4oZHVwKGZuKSwgZm1vZGUpOwotCQllbHNlCi0JCQlBSC0+T0YgPSBnem9wZW4oZmlsZW5hbWUs IGZtb2RlKTsKLQkJQUgtPmd6T3V0ID0gMTsKLQl9CisJaWYgKGZuID49IDApCisJCUFILT5PRiA9 IGNmZG9wZW4oZHVwKGZuKSwgbW9kZSwgY29tcHJlc3Npb25NZXRob2QsIGNvbXByZXNzaW9uTGV2 ZWwpOwogCWVsc2UKLSNlbmRpZgotCXsJCQkJCQkJLyogVXNlIGZvcGVuICovCi0JCWlmIChBSC0+ bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKLQkJewotCQkJaWYgKGZuID49IDApCi0JCQkJQUgtPk9G ID0gZmRvcGVuKGR1cChmbiksIFBHX0JJTkFSWV9BKTsKLQkJCWVsc2UKLQkJCQlBSC0+T0YgPSBm b3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYgKGZu ID49IDApCi0JCQkJQUgtPk9GID0gZmRvcGVuKGR1cChmbiksIFBHX0JJTkFSWV9XKTsKLQkJCWVs c2UKLQkJCQlBSC0+T0YgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwotCQl9Ci0JCUFI LT5nek91dCA9IDA7Ci0JfQorCQlBSC0+T0YgPSBjZm9wZW4oZmlsZW5hbWUsIG1vZGUsIGNvbXBy ZXNzaW9uTWV0aG9kLCBjb21wcmVzc2lvbkxldmVsKTsKIAogCWlmICghQUgtPk9GKQogCXsKQEAg LTE1NTAsMzMgKzE1MjcsMjQgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBj aGFyICpmaWxlbmFtZSwgaW50IGNvbXByZXNzaW9uKQogCX0KIH0KIAotc3RhdGljIE91dHB1dENv bnRleHQKK3N0YXRpYyBjZnAgKgogU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlP dXRwdXRDb250ZXh0IHNhdjsKLQotCXNhdi5PRiA9IEFILT5PRjsKLQlzYXYuZ3pPdXQgPSBBSC0+ Z3pPdXQ7Ci0KLQlyZXR1cm4gc2F2OworCXJldHVybiAoY2ZwICopQUgtPk9GOwogfQogCiBzdGF0 aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgT3V0cHV0Q29udGV4dCBz YXZlZENvbnRleHQpCitSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNhdmVk T3V0cHV0KQogewogCWludAkJCXJlczsKIAotCWVycm5vID0gMDsJCQkJCS8qIGluIGNhc2UgZ3pj bG9zZSgpIGRvZXNuJ3Qgc2V0IGl0ICovCi0JaWYgKEFILT5nek91dCkKLQkJcmVzID0gR1pDTE9T RShBSC0+T0YpOwotCWVsc2UKLQkJcmVzID0gZmNsb3NlKEFILT5PRik7CisJZXJybm8gPSAwOwor CXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkKIAkJZmF0YWwoImNvdWxk IG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKIAotCUFILT5nek91dCA9IHNhdmVkQ29udGV4 dC5nek91dDsKLQlBSC0+T0YgPSBzYXZlZENvbnRleHQuT0Y7CisJQUgtPk9GID0gc2F2ZWRPdXRw dXQ7CiB9CiAKIApAQCAtMTcwMCwyMiArMTY2OCwxNiBAQCBhaHdyaXRlKGNvbnN0IHZvaWQgKnB0 ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJYnl0 ZXNfd3JpdHRlbiA9IHNpemUgKiBubWVtYjsKIAl9Ci0JZWxzZSBpZiAoQUgtPmd6T3V0KQotCQli eXRlc193cml0dGVuID0gR1pXUklURShwdHIsIHNpemUsIG5tZW1iLCBBSC0+T0YpOwogCWVsc2Ug aWYgKEFILT5DdXN0b21PdXRQdHIpCiAJCWJ5dGVzX3dyaXR0ZW4gPSBBSC0+Q3VzdG9tT3V0UHRy KEFILCBwdHIsIHNpemUgKiBubWVtYik7Ci0KLQllbHNlCi0JewotCQkvKgotCQkgKiBJZiB3ZSdy ZSBkb2luZyBhIHJlc3RvcmUsIGFuZCBpdCdzIGRpcmVjdCB0byBEQiwgYW5kIHdlJ3JlCi0JCSAq IGNvbm5lY3RlZCB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgotCQkgKi8KLQkJaWYgKFJlc3Rvcmlu Z1RvREIoQUgpKQorCS8qCisJICogSWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBk aXJlY3QgdG8gREIsIGFuZCB3ZSdyZQorCSAqIGNvbm5lY3RlZCB0aGVuIHNlbmQgaXQgdG8gdGhl IERCLgorCSAqLworCWVsc2UgaWYgKFJlc3RvcmluZ1RvREIoQUgpKQogCQkJYnl0ZXNfd3JpdHRl biA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIs IHNpemUgKiBubWVtYik7Ci0JCWVsc2UKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBmd3JpdGUocHRyLCBz aXplLCBubWVtYiwgQUgtPk9GKSAqIHNpemU7Ci0JfQorCWVsc2UKKwkJYnl0ZXNfd3JpdHRlbiA9 IGNmd3JpdGUocHRyLCBzaXplICogbm1lbWIsIEFILT5PRik7CiAKIAlpZiAoYnl0ZXNfd3JpdHRl biAhPSBzaXplICogbm1lbWIpCiAJCVdSSVRFX0VSUk9SX0VYSVQ7CkBAIC0yMjAwLDcgKzIxNjIs OSBAQCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogICovCiBzdGF0 aWMgQXJjaGl2ZUhhbmRsZSAqCiBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3Qg QXJjaGl2ZUZvcm1hdCBmbXQsCi0JCSBjb25zdCBpbnQgY29tcHJlc3Npb24sIGJvb2wgZG9zeW5j LCBBcmNoaXZlTW9kZSBtb2RlLAorCQkgY29uc3QgQ29tcHJlc3Npb25NZXRob2QgY29tcHJlc3Np b25NZXRob2QsCisJCSBjb25zdCBpbnQgY29tcHJlc3Npb25MZXZlbCwKKwkJIGJvb2wgZG9zeW5j LCBBcmNoaXZlTW9kZSBtb2RlLAogCQkgU2V0dXBXb3JrZXJQdHJUeXBlIHNldHVwV29ya2VyUHRy KQogewogCUFyY2hpdmVIYW5kbGUgKkFIOwpAQCAtMjI1MSwxNCArMjIxNSwxNCBAQCBfYWxsb2NB SChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJQUgtPnRv Yy0+cHJldiA9IEFILT50b2M7CiAKIAlBSC0+bW9kZSA9IG1vZGU7Ci0JQUgtPmNvbXByZXNzaW9u ID0gY29tcHJlc3Npb247CisJQUgtPmNvbXByZXNzaW9uTWV0aG9kID0gY29tcHJlc3Npb25NZXRo b2Q7CisJQUgtPmNvbXByZXNzaW9uTGV2ZWwgPSBjb21wcmVzc2lvbkxldmVsOwogCUFILT5kb3N5 bmMgPSBkb3N5bmM7CiAKIAltZW1zZXQoJihBSC0+c3FscGFyc2UpLCAwLCBzaXplb2YoQUgtPnNx bHBhcnNlKSk7CiAKIAkvKiBPcGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBv dXRwdXQgaGFuZGxlICovCi0JQUgtPmd6T3V0ID0gMDsKLQlBSC0+T0YgPSBzdGRvdXQ7CisJQUgt Pk9GID0gY2Zkb3BlbihkdXAoZmlsZW5vKHN0ZG91dCkpLCBQR19CSU5BUllfQSwgQ09NUFJFU1NJ T05fTk9ORSwgMCk7CiAKIAkvKgogCSAqIE9uIFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJpbmFy eSBtb2RlIHRvIHJlYWQvd3JpdGUgbm9uLXRleHQgZmlsZXMsCkBAIC0yMjY2LDcgKzIyMzAsNyBA QCBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQs CiAJICogRm9yY2Ugc3RkaW4vc3Rkb3V0IGludG8gYmluYXJ5IG1vZGUgaWYgdGhhdCBpcyB3aGF0 IHdlIGFyZSB1c2luZy4KIAkgKi8KICNpZmRlZiBXSU4zMgotCWlmICgoZm10ICE9IGFyY2hOdWxs IHx8IGNvbXByZXNzaW9uICE9IDApICYmCisJaWYgKChmbXQgIT0gYXJjaE51bGwgfHwgY29tcHJl c3Npb25NZXRob2QgIT0gQ09NUFJFU1NJT05fTk9ORSkgJiYKIAkJKEFILT5mU3BlYyA9PSBOVUxM IHx8IHN0cmNtcChBSC0+ZlNwZWMsICIiKSA9PSAwKSkKIAl7CiAJCWlmIChtb2RlID09IGFyY2hN b2RlV3JpdGUpCkBAIC0zNzE2LDcgKzM2ODAsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRsZSAq QUgpCiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmludFNpemUpOwogCUFILT5Xcml0ZUJ5dGVQ dHIoQUgsIEFILT5vZmZTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Zm9ybWF0KTsK LQlXcml0ZUludChBSCwgQUgtPmNvbXByZXNzaW9uKTsKKwlXcml0ZUludChBSCwgQUgtPmNvbXBy ZXNzaW9uTGV2ZWwpOwogCWNydG0gPSAqbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSk7CiAJV3Jp dGVJbnQoQUgsIGNydG0udG1fc2VjKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9taW4pOwpAQCAt Mzc5MCwxOCArMzc1NCwyMSBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAlpZiAoQUgt PnZlcnNpb24gPj0gS19WRVJTXzFfMikKIAl7CiAJCWlmIChBSC0+dmVyc2lvbiA8IEtfVkVSU18x XzQpCi0JCQlBSC0+Y29tcHJlc3Npb24gPSBBSC0+UmVhZEJ5dGVQdHIoQUgpOworCQkJQUgtPmNv bXByZXNzaW9uTGV2ZWwgPSBBSC0+UmVhZEJ5dGVQdHIoQUgpOwogCQllbHNlCi0JCQlBSC0+Y29t cHJlc3Npb24gPSBSZWFkSW50KEFIKTsKKwkJCUFILT5jb21wcmVzc2lvbkxldmVsID0gUmVhZElu dChBSCk7CiAJfQogCWVsc2UKLQkJQUgtPmNvbXByZXNzaW9uID0gWl9ERUZBVUxUX0NPTVBSRVNT SU9OOworCQlBSC0+Y29tcHJlc3Npb25MZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKIAor CWlmIChBSC0+Y29tcHJlc3Npb25MZXZlbCAhPSBJTlRfTUlOKQogI2lmbmRlZiBIQVZFX0xJQloK LQlpZiAoQUgtPmNvbXByZXNzaW9uICE9IDApCiAJCXBnX2xvZ193YXJuaW5nKCJhcmNoaXZlIGlz IGNvbXByZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXBy ZXNzaW9uIC0tIG5vIGRhdGEgd2lsbCBiZSBhdmFpbGFibGUiKTsKKyNlbHNlCisJCUFILT5jb21w cmVzc2lvbk1ldGhvZCA9IENPTVBSRVNTSU9OX0daSVA7CiAjZW5kaWYKIAorCiAJaWYgKEFILT52 ZXJzaW9uID49IEtfVkVSU18xXzQpCiAJewogCQlzdHJ1Y3QgdG0JY3J0bTsKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCA1NDBkNGY2YTgzLi44MzdlOWQ3M2Y1IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zMiwzMCArMzIsNiBAQAogCiAjZGVmaW5l IExPQkJVRlNJWkUgMTYzODQKIAotI2lmZGVmIEhBVkVfTElCWgotI2luY2x1ZGUgPHpsaWIuaD4K LSNkZWZpbmUgR1pDTE9TRShmaCkgZ3pjbG9zZShmaCkKLSNkZWZpbmUgR1pXUklURShwLCBzLCBu LCBmaCkgZ3p3cml0ZShmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBHWlJFQUQocCwgcywgbiwg ZmgpIGd6cmVhZChmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBHWkVPRihmaCkJZ3plb2YoZmgp Ci0jZWxzZQotI2RlZmluZSBHWkNMT1NFKGZoKSBmY2xvc2UoZmgpCi0jZGVmaW5lIEdaV1JJVEUo cCwgcywgbiwgZmgpIChmd3JpdGUocCwgcywgbiwgZmgpICogKHMpKQotI2RlZmluZSBHWlJFQUQo cCwgcywgbiwgZmgpIGZyZWFkKHAsIHMsIG4sIGZoKQotI2RlZmluZSBHWkVPRihmaCkJZmVvZihm aCkKLS8qIHRoaXMgaXMganVzdCB0aGUgcmVkZWZpbml0aW9uIG9mIGEgbGlieiBjb25zdGFudCAq LwotI2RlZmluZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04gKC0xKQotCi10eXBlZGVmIHN0cnVjdCBf el9zdHJlYW0KLXsKLQl2b2lkCSAgICpuZXh0X2luOwotCXZvaWQJICAgKm5leHRfb3V0OwotCXNp emVfdAkJYXZhaWxfaW47Ci0Jc2l6ZV90CQlhdmFpbF9vdXQ7Ci19IHpfc3RyZWFtOwotdHlwZWRl ZiB6X3N0cmVhbSAqel9zdHJlYW1wOwotI2VuZGlmCi0KIC8qIERhdGEgYmxvY2sgdHlwZXMgKi8K ICNkZWZpbmUgQkxLX0RBVEEgMQogI2RlZmluZSBCTEtfQkxPQlMgMwpAQCAtMzE5LDggKzI5NSw3 IEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRsZQogCiAJY2hhcgkgICAqZlNwZWM7CQkJLyogQXJjaGl2 ZSBGaWxlIFNwZWMgKi8KIAlGSUxFCSAgICpGSDsJCQkJLyogR2VuZXJhbCBwdXJwb3NlIGZpbGUg aGFuZGxlICovCi0Jdm9pZAkgICAqT0Y7Ci0JaW50CQkJZ3pPdXQ7CQkJLyogT3V0cHV0IGZpbGUg Ki8KKwl2b2lkCSAgICpPRjsJCQkJLyogT3V0cHV0IGZpbGUgKi8KIAogCXN0cnVjdCBfdG9jRW50 cnkgKnRvYzsJCS8qIEhlYWRlciBvZiBjaXJjdWxhciBsaXN0IG9mIFRPQyBlbnRyaWVzICovCiAJ aW50CQkJdG9jQ291bnQ7CQkvKiBOdW1iZXIgb2YgVE9DIGVudHJpZXMgKi8KQEAgLTMzMSwxNCAr MzA2LDE3IEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRsZQogCUR1bXBJZAkgICAqdGFibGVEYXRhSWQ7 CS8qIFRBQkxFIERBVEEgaWRzLCBpbmRleGVkIGJ5IHRhYmxlIGR1bXBJZCAqLwogCiAJc3RydWN0 IF90b2NFbnRyeSAqY3VyclRvYzsJLyogVXNlZCB3aGVuIGR1bXBpbmcgZGF0YSAqLwotCWludAkJ CWNvbXByZXNzaW9uOwkvKi0tLS0tLS0tLQotCQkJCQkJCQkgKiBDb21wcmVzc2lvbiByZXF1ZXN0 ZWQgb24gb3BlbigpLgotCQkJCQkJCQkgKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIGNvbXByZXNzaW9u OgotCQkJCQkJCQkgKiAtMQlaX0RFRkFVTFRfQ09NUFJFU1NJT04KLQkJCQkJCQkJICogIDAJQ09N UFJFU1NJT05fTk9ORQotCQkJCQkJCQkgKiAxLTkgbGV2ZWxzIGZvciBnemlwIGNvbXByZXNzaW9u Ci0JCQkJCQkJCSAqLS0tLS0tLS0tCi0JCQkJCQkJCSAqLworCUNvbXByZXNzaW9uTWV0aG9kIGNv bXByZXNzaW9uTWV0aG9kOyAvKiBSZXF1ZXN0ZWQgbWV0aG9kIGZvciBjb21wcmVzc2lvbiAqLwor CWludAkJCWNvbXByZXNzaW9uTGV2ZWw7IC8qLS0tLS0tLS0tCisJCQkJCQkJCSAgICogUmVxdWVz dGVkIGxldmVsIG9mIGNvbXByZXNzaW9uIGZvciBtZXRob2QuCisJCQkJCQkJCSAgICogUG9zc2li bGUgdmFsdWVzIGZvciBjb21wcmVzc2lvbjoKKwkJCQkJCQkJICAgKiBJTlRfTUlOIHdoZW4gbm8g Y29tcHJlc3Npb24gbWV0aG9kIGlzCisJCQkJCQkJCSAgICogcmVxdWVzdGVkLgorCQkJCQkJCQkg ICAqIC0xCVpfREVGQVVMVF9DT01QUkVTU0lPTiBmb3IgZ3ppcAorCQkJCQkJCQkgICAqIGNvbXBy ZXNzaW9uLgorCQkJCQkJCQkgICAqIDEtOSBsZXZlbHMgZm9yIGd6aXAgY29tcHJlc3Npb24uCisJ CQkJCQkJCSAgICotLS0tLS0tLS0KKwkJCQkJCQkJICAgKi8KIAlib29sCQlkb3N5bmM7CQkJLyog ZGF0YSByZXF1ZXN0ZWQgdG8gYmUgc3luY2VkIG9uIHNpZ2h0ICovCiAJQXJjaGl2ZU1vZGUgbW9k ZTsJCQkvKiBGaWxlIG1vZGUgLSByIG9yIHcgKi8KIAl2b2lkCSAgICpmb3JtYXREYXRhOwkJLyog SGVhZGVyIGRhdGEgc3BlY2lmaWMgdG8gZmlsZSBmb3JtYXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2N1c3RvbS5jCmluZGV4IDc3ZDQwMmMzMjMuLjdmMzhlYTljZDUgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9jdXN0b20uYwpAQCAtMjk4LDcgKzI5OCw5IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhhbmRs ZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlfV3JpdGVCeXRlKEFILCBCTEtfREFUQSk7CS8qIEJsb2Nr IHR5cGUgKi8KIAlXcml0ZUludChBSCwgdGUtPmR1bXBJZCk7CS8qIEZvciBzYW5pdHkgY2hlY2sg Ki8KIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzaW9uLCBfQ3Vz dG9tV3JpdGVGdW5jKTsKKwljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVz c2lvbk1ldGhvZCwKKwkJCQkJCQkJIEFILT5jb21wcmVzc2lvbkxldmVsLAorCQkJCQkJCQkgX0N1 c3RvbVdyaXRlRnVuYyk7CiB9CiAKIC8qCkBAIC0zNzcsNyArMzc5LDkgQEAgX1N0YXJ0QmxvYihB cmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogCiAJV3JpdGVJbnQoQUgs IG9pZCk7CiAKLQljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbiwg X0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29t cHJlc3Npb25NZXRob2QsCisJCQkJCQkJCSBBSC0+Y29tcHJlc3Npb25MZXZlbCwKKwkJCQkJCQkJ IF9DdXN0b21Xcml0ZUZ1bmMpOwogfQogCiAvKgpAQCAtNTY2LDcgKzU3MCw4IEBAIF9QcmludFRv Y0RhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHN0YXRpYyB2b2lkCiBfUHJp bnREYXRhKEFyY2hpdmVIYW5kbGUgKkFIKQogewotCVJlYWREYXRhRnJvbUFyY2hpdmUoQUgsIEFI LT5jb21wcmVzc2lvbiwgX0N1c3RvbVJlYWRGdW5jKTsKKwlSZWFkRGF0YUZyb21BcmNoaXZlKEFI LCBBSC0+Y29tcHJlc3Npb25NZXRob2QsIEFILT5jb21wcmVzc2lvbkxldmVsLAorCQkJCQkJX0N1 c3RvbVJlYWRGdW5jKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Rp cmVjdG9yeS5jCmluZGV4IDdmNGUzNDBkZWEuLjBlNjBiNDQ3ZGUgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9kaXJlY3RvcnkuYwpAQCAtMzI3LDcgKzMyNyw5IEBAIF9TdGFydERhdGEoQXJjaGl2 ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAogCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgdGN0 eC0+ZmlsZW5hbWUpOwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJ TkFSWV9XLCBBSC0+Y29tcHJlc3Npb24pOworCWN0eC0+ZGF0YUZIID0gY2ZvcGVuX3dyaXRlKGZu YW1lLCBQR19CSU5BUllfVywKKwkJCQkJCQkgICBBSC0+Y29tcHJlc3Npb25NZXRob2QsCisJCQkJ CQkJICAgQUgtPmNvbXByZXNzaW9uTGV2ZWwpOwogCWlmIChjdHgtPmRhdGFGSCA9PSBOVUxMKQog CQlmYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsK IH0KQEAgLTU4MSw3ICs1ODMsOCBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQog CQljdHgtPnBzdGF0ZSA9IFBhcmFsbGVsQmFja3VwU3RhcnQoQUgpOwogCiAJCS8qIFRoZSBUT0Mg aXMgYWx3YXlzIGNyZWF0ZWQgdW5jb21wcmVzc2VkICovCi0JCXRvY0ZIID0gY2ZvcGVuX3dyaXRl KGZuYW1lLCBQR19CSU5BUllfVywgMCk7CisJCXRvY0ZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQ R19CSU5BUllfVywKKwkJCQkJCQkgQ09NUFJFU1NJT05fTk9ORSwgMCk7CiAJCWlmICh0b2NGSCA9 PSBOVUxMKQogCQkJZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0i LCBmbmFtZSk7CiAJCWN0eC0+ZGF0YUZIID0gdG9jRkg7CkBAIC02NDQsNyArNjQ3LDcgQEAgX1N0 YXJ0QmxvYnMoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlzZXRGaWxlUGF0aChB SCwgZm5hbWUsICJibG9icy50b2MiKTsKIAogCS8qIFRoZSBibG9iIFRPQyBmaWxlIGlzIG5ldmVy IGNvbXByZXNzZWQgKi8KLQljdHgtPmJsb2JzVG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsICJh YiIsIDApOworCWN0eC0+YmxvYnNUb2NGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgImFiIiwgQ09N UFJFU1NJT05fTk9ORSwgMCk7CiAJaWYgKGN0eC0+YmxvYnNUb2NGSCA9PSBOVUxMKQogCQlmYXRh bCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0KQEAg LTY2Miw3ICs2NjUsOCBAQCBfU3RhcnRCbG9iKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAq dGUsIE9pZCBvaWQpCiAKIAlzbnByaW50ZihmbmFtZSwgTUFYUEdQQVRILCAiJXMvYmxvYl8ldS5k YXQiLCBjdHgtPmRpcmVjdG9yeSwgb2lkKTsKIAotCWN0eC0+ZGF0YUZIID0gY2ZvcGVuX3dyaXRl KGZuYW1lLCBQR19CSU5BUllfVywgQUgtPmNvbXByZXNzaW9uKTsKKwljdHgtPmRhdGFGSCA9IGNm b3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csCisJCQkJCQkJICAgQUgtPmNvbXByZXNzaW9u TWV0aG9kLCBBSC0+Y29tcHJlc3Npb25MZXZlbCk7CiAKIAlpZiAoY3R4LT5kYXRhRkggPT0gTlVM TCkKIAkJZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFt ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCA2MjBlNjA5MDU1Li4zZTYwYWZkMzlkIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx1bmlz dGQuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9maWxlX3V0aWxzLmgiCisjaW5jbHVkZSAiY29tcHJl c3NfaW8uaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJw Z19iYWNrdXBfYXJjaGl2ZXIuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdGFyLmgiCkBAIC0xOTQs NyArMTk1LDcgQEAgSW5pdEFyY2hpdmVGbXRfVGFyKEFyY2hpdmVIYW5kbGUgKkFIKQogCQkgKiBw b3NzaWJsZSBzaW5jZSBnemRvcGVuIHVzZXMgYnVmZmVyZWQgSU8gd2hpY2ggdG90YWxseSBzY3Jl d3MgZmlsZQogCQkgKiBwb3NpdGlvbmluZy4KIAkJICovCi0JCWlmIChBSC0+Y29tcHJlc3Npb24g IT0gMCkKKwkJaWYgKEFILT5jb21wcmVzc2lvbk1ldGhvZCAhPSBDT01QUkVTU0lPTl9OT05FKQog CQkJZmF0YWwoImNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyIGFyY2hpdmUgZm9y bWF0Iik7CiAJfQogCWVsc2UKQEAgLTMyOCw3ICszMjksNyBAQCB0YXJPcGVuKEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciBtb2RlKQogCQkJfQogCQl9CiAKLQkJ aWYgKEFILT5jb21wcmVzc2lvbiA9PSAwKQorCQlpZiAoQUgtPmNvbXByZXNzaW9uTWV0aG9kID09 IENPTVBSRVNTSU9OX05PTkUpCiAJCQl0bS0+bkZIID0gY3R4LT50YXJGSDsKIAkJZWxzZQogCQkJ ZmF0YWwoImNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyIGFyY2hpdmUgZm9ybWF0 Iik7CkBAIC0zODMsNyArMzg0LDcgQEAgdGFyT3BlbihBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsIGNoYXIgbW9kZSkKIAogCQl1bWFzayhvbGRfdW1hc2spOwogCi0JCWlm IChBSC0+Y29tcHJlc3Npb24gPT0gMCkKKwkJaWYgKEFILT5jb21wcmVzc2lvbk1ldGhvZCA9PSBD T01QUkVTU0lPTl9OT05FKQogCQkJdG0tPm5GSCA9IHRtLT50bXBGSDsKIAkJZWxzZQogCQkJZmF0 YWwoImNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyIGFyY2hpdmUgZm9ybWF0Iik7 CkBAIC00MDEsNyArNDAyLDcgQEAgdGFyT3BlbihBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsIGNoYXIgbW9kZSkKIHN0YXRpYyB2b2lkCiB0YXJDbG9zZShBcmNoaXZlSGFu ZGxlICpBSCwgVEFSX01FTUJFUiAqdGgpCiB7Ci0JaWYgKEFILT5jb21wcmVzc2lvbiAhPSAwKQor CWlmIChBSC0+Y29tcHJlc3Npb25NZXRob2QgIT0gQ09NUFJFU1NJT05fTk9ORSkKIAkJZmF0YWwo ImNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyIGFyY2hpdmUgZm9ybWF0Iik7CiAK IAlpZiAodGgtPm1vZGUgPT0gJ3cnKQpAQCAtODAxLDcgKzgwMiw2IEBAIF9DbG9zZUFyY2hpdmUo QXJjaGl2ZUhhbmRsZSAqQUgpCiAJCW1lbWNweShyb3B0LCBBSC0+cHVibGljLnJvcHQsIHNpemVv ZihSZXN0b3JlT3B0aW9ucykpOwogCQlyb3B0LT5maWxlbmFtZSA9IE5VTEw7CiAJCXJvcHQtPmRy b3BTY2hlbWEgPSAxOwotCQlyb3B0LT5jb21wcmVzc2lvbiA9IDA7CiAJCXJvcHQtPnN1cGVydXNl ciA9IE5VTEw7CiAJCXJvcHQtPnN1cHByZXNzRHVtcFdhcm5pbmdzID0gdHJ1ZTsKIApAQCAtODkw LDcgKzg5MCw3IEBAIF9TdGFydEJsb2IoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwg T2lkIG9pZCkKIAlpZiAob2lkID09IDApCiAJCWZhdGFsKCJpbnZhbGlkIE9JRCBmb3IgbGFyZ2Ug b2JqZWN0ICgldSkiLCBvaWQpOwogCi0JaWYgKEFILT5jb21wcmVzc2lvbiAhPSAwKQorCWlmIChB SC0+Y29tcHJlc3Npb25NZXRob2QgIT0gQ09NUFJFU1NJT05fTk9ORSkKIAkJc2Z4ID0gIi5neiI7 CiAJZWxzZQogCQlzZnggPSAiIjsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDUzNWIxNjAxNjUuLjk3YWMxN2Vi ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdf dHJpZ2dlcl9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlX2QuaCIKICNpbmNsdWRlICJj b21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAiZHVt cHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgiCiAjaW5jbHVkZSAi ZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCkBAIC0xNjMsNiArMTY0LDkgQEAgc3RhdGljIHZvaWQg c2V0dXBfY29ubmVjdGlvbihBcmNoaXZlICpBSCwKIAkJCQkJCQkgY29uc3QgY2hhciAqZHVtcGVu Y29kaW5nLCBjb25zdCBjaGFyICpkdW1wc25hcHNob3QsCiAJCQkJCQkJIGNoYXIgKnVzZV9yb2xl KTsKIHN0YXRpYyBBcmNoaXZlRm9ybWF0IHBhcnNlQXJjaGl2ZUZvcm1hdChjb25zdCBjaGFyICpm b3JtYXQsIEFyY2hpdmVNb2RlICptb2RlKTsKK3N0YXRpYyBib29sIHBhcnNlX2NvbXByZXNzaW9u X29wdGlvbihjb25zdCBjaGFyICpvcHQsCisJCQkJCQkJCQkgQ29tcHJlc3Npb25NZXRob2QgKmNv bXByZXNzaW9uTWV0aG9kLAorCQkJCQkJCQkJIGludCAqY29tcHJlc3NMZXZlbCk7CiBzdGF0aWMg dm9pZCBleHBhbmRfc2NoZW1hX25hbWVfcGF0dGVybnMoQXJjaGl2ZSAqZm91dCwKIAkJCQkJCQkJ CQlTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJCQlTaW1wbGVPaWRMaXN0ICpv aWRzLApAQCAtMzM2LDggKzM0MCw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWNv bnN0IGNoYXIgKmR1bXBzbmFwc2hvdCA9IE5VTEw7CiAJY2hhcgkgICAqdXNlX3JvbGUgPSBOVUxM OwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCWludAkJCWNvbXByZXNzTGV2ZWwgPSAtMTsKIAlp bnQJCQlwbGFpblRleHQgPSAwOworCWludAkJCWNvbXByZXNzTGV2ZWwgPSBJTlRfTUlOOworCUNv bXByZXNzaW9uTWV0aG9kIGNvbXByZXNzaW9uTWV0aG9kID0gQ09NUFJFU1NJT05fSU5WQUxJRDsK IAlBcmNoaXZlRm9ybWF0IGFyY2hpdmVGb3JtYXQgPSBhcmNoVW5rbm93bjsKIAlBcmNoaXZlTW9k ZSBhcmNoaXZlTW9kZTsKIApAQCAtNTU3LDkgKzU2Miw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQkJCWRvcHQuYWNsc1NraXAgPSB0cnVlOwogCQkJCWJyZWFrOwogCi0JCQljYXNl ICdaJzoJCQkvKiBDb21wcmVzc2lvbiBMZXZlbCAqLwotCQkJCWlmICghb3B0aW9uX3BhcnNlX2lu dChvcHRhcmcsICItWi8tLWNvbXByZXNzIiwgMCwgOSwKLQkJCQkJCQkJCSAgJmNvbXByZXNzTGV2 ZWwpKQorCQkJY2FzZSAnWic6CQkJLyogQ29tcHJlc3Npb24gKi8KKwkJCQlpZiAoIXBhcnNlX2Nv bXByZXNzaW9uX29wdGlvbihvcHRhcmcsICZjb21wcmVzc2lvbk1ldGhvZCwKKwkJCQkJCQkJCQkJ ICAmY29tcHJlc3NMZXZlbCkpCiAJCQkJCWV4aXRfbmljZWx5KDEpOwogCQkJCWJyZWFrOwogCkBA IC02ODksMjMgKzY5NCwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoYXJj aGl2ZUZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJcGxhaW5UZXh0ID0gMTsKIAotCS8qIEN1c3RvbSBh bmQgZGlyZWN0b3J5IGZvcm1hdHMgYXJlIGNvbXByZXNzZWQgYnkgZGVmYXVsdCwgb3RoZXJzIG5v dCAqLwotCWlmIChjb21wcmVzc0xldmVsID09IC0xKQorCS8qIFNldCBkZWZhdWx0IGNvbXByZXNz aW9uTWV0aG9kIHVubGVzcyBvbmUgYWxyZWFkeSBzZXQgYnkgdGhlIHVzZXIgKi8KKwlpZiAoY29t cHJlc3Npb25NZXRob2QgPT0gQ09NUFJFU1NJT05fSU5WQUxJRCkKIAl7CisJCWNvbXByZXNzaW9u TWV0aG9kID0gQ09NUFJFU1NJT05fTk9ORTsKKwogI2lmZGVmIEhBVkVfTElCWgorCQkvKiBDdXN0 b20gYW5kIGRpcmVjdG9yeSBmb3JtYXRzIGFyZSBjb21wcmVzc2VkIGJ5IGRlZmF1bHQgKHpsaWIp ICovCiAJCWlmIChhcmNoaXZlRm9ybWF0ID09IGFyY2hDdXN0b20gfHwgYXJjaGl2ZUZvcm1hdCA9 PSBhcmNoRGlyZWN0b3J5KQorCQl7CisJCQljb21wcmVzc2lvbk1ldGhvZCA9IENPTVBSRVNTSU9O X0daSVA7CiAJCQljb21wcmVzc0xldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwotCQllbHNl CisJCX0KICNlbmRpZgotCQkJY29tcHJlc3NMZXZlbCA9IDA7CiAJfQogCi0jaWZuZGVmIEhBVkVf TElCWgotCWlmIChjb21wcmVzc0xldmVsICE9IDApCi0JCXBnX2xvZ193YXJuaW5nKCJyZXF1ZXN0 ZWQgY29tcHJlc3Npb24gbm90IGF2YWlsYWJsZSBpbiB0aGlzIGluc3RhbGxhdGlvbiAtLSBhcmNo aXZlIHdpbGwgYmUgdW5jb21wcmVzc2VkIik7Ci0JY29tcHJlc3NMZXZlbCA9IDA7Ci0jZW5kaWYK LQogCS8qCiAJICogSWYgZW1pdHRpbmcgYW4gYXJjaGl2ZSBmb3JtYXQsIHdlIGFsd2F5cyB3YW50 IHRvIGVtaXQgYSBEQVRBQkFTRSBpdGVtLAogCSAqIGluIGNhc2UgLS1jcmVhdGUgaXMgc3BlY2lm aWVkIGF0IHBnX3Jlc3RvcmUgdGltZS4KQEAgLTcxOCw4ICs3MjEsOSBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkJZmF0YWwoInBhcmFsbGVsIGJhY2t1cCBvbmx5IHN1cHBvcnRlZCBi eSB0aGUgZGlyZWN0b3J5IGZvcm1hdCIpOwogCiAJLyogT3BlbiB0aGUgb3V0cHV0IGZpbGUgKi8K LQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShmaWxlbmFtZSwgYXJjaGl2ZUZvcm1hdCwgY29tcHJlc3NM ZXZlbCwgZG9zeW5jLAotCQkJCQkJIGFyY2hpdmVNb2RlLCBzZXR1cER1bXBXb3JrZXIpOworCWZv dXQgPSBDcmVhdGVBcmNoaXZlKGZpbGVuYW1lLCBhcmNoaXZlRm9ybWF0LAorCQkJCQkJIGNvbXBy ZXNzaW9uTWV0aG9kLCBjb21wcmVzc0xldmVsLAorCQkJCQkJIGRvc3luYywgYXJjaGl2ZU1vZGUs IHNldHVwRHVtcFdvcmtlcik7CiAKIAkvKiBNYWtlIGR1bXAgb3B0aW9ucyBhY2Nlc3NpYmxlIHJp Z2h0IGF3YXkgKi8KIAlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwgTlVMTCk7CkBAIC05 NTAsMTAgKzk1NCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXJvcHQtPnNlcXVl bmNlX2RhdGEgPSBkb3B0LnNlcXVlbmNlX2RhdGE7CiAJcm9wdC0+YmluYXJ5X3VwZ3JhZGUgPSBk b3B0LmJpbmFyeV91cGdyYWRlOwogCi0JaWYgKGNvbXByZXNzTGV2ZWwgPT0gLTEpCi0JCXJvcHQt PmNvbXByZXNzaW9uID0gMDsKLQllbHNlCi0JCXJvcHQtPmNvbXByZXNzaW9uID0gY29tcHJlc3NM ZXZlbDsKKwlyb3B0LT5jb21wcmVzc2lvbkxldmVsID0gY29tcHJlc3NMZXZlbDsKKwlyb3B0LT5j b21wcmVzc2lvbk1ldGhvZCA9IGNvbXByZXNzaW9uTWV0aG9kOwogCiAJcm9wdC0+c3VwcHJlc3NE dW1wV2FybmluZ3MgPSB0cnVlOwkvKiBXZSd2ZSBhbHJlYWR5IHNob3duIHRoZW0gKi8KIApAQCAt MTAwMCw3ICsxMDAyLDggQEAgaGVscChjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygi ICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9i cyB0byBkdW1wXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAg ICB2ZXJib3NlIG1vZGVcbiIpKTsKIAlwcmludGYoXygiICAtViwgLS12ZXJzaW9uICAgICAgICAg ICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKLQlwcmlu dGYoXygiICAtWiwgLS1jb21wcmVzcz0wLTkgICAgICAgICAgIGNvbXByZXNzaW9uIGxldmVsIGZv ciBjb21wcmVzc2VkIGZvcm1hdHNcbiIpKTsKKwlwcmludGYoXygiICAtWiwgLS1jb21wcmVzcz1b Z3ppcCxub25lXVs6TEVWRUxdIG9yIFtMRVZFTF1cbiIKKwkJCSAiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbXByZXNzIG91dHB1dCB3aXRoIGdpdmVuIG1ldGhvZCBvciBsZXZlbFxu IikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRl ciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwogCXByaW50ZihfKCIgIC0t bm8tc3luYyAgICAgICAgICAgICAgICAgICAgZG8gbm90IHdhaXQgZm9yIGNoYW5nZXMgdG8gYmUg d3JpdHRlbiBzYWZlbHkgdG8gZGlza1xuIikpOwogCXByaW50ZihfKCIgIC0/LCAtLWhlbHAgICAg ICAgICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAsIHRoZW4gZXhpdFxuIikpOwpAQCAtMTI2MCw2 ICsxMjYzLDExNiBAQCBnZXRfc3luY2hyb25pemVkX3NuYXBzaG90KEFyY2hpdmUgKmZvdXQpCiAJ cmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGJvb2wKK3BhcnNlX2NvbXByZXNzaW9uX21ldGhv ZChjb25zdCBjaGFyICptZXRob2QsCisJCQkJCQkgQ29tcHJlc3Npb25NZXRob2QgKmNvbXByZXNz aW9uTWV0aG9kKQoreworCWJvb2wgcmVzID0gdHJ1ZTsKKworCWlmIChwZ19zdHJjYXNlY21wKG1l dGhvZCwgImd6aXAiKSA9PSAwKQorCQkqY29tcHJlc3Npb25NZXRob2QgPSBDT01QUkVTU0lPTl9H WklQOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAobWV0aG9kLCAibm9uZSIpID09IDApCisJCSpj b21wcmVzc2lvbk1ldGhvZCA9IENPTVBSRVNTSU9OX05PTkU7CisJZWxzZQorCXsKKwkJcGdfbG9n X2Vycm9yKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIgKGd6aXAsIG5vbmUpIiwg bWV0aG9kKTsKKwkJcmVzID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAq IEludGVycHJldHMgYSBjb21wcmVzc2lvbiBvcHRpb24gb2YgdGhlIGZvcm1hdCAnbWV0aG9kWzpM RVZFTF0nIG9mIGxlZ2FjeSBqdXN0CisgKiAnW0xFVkVMXScuIEluIHRoZSBsYXRlciBmb3JtYXQs IGd6aXAgaXMgaW1wbGllZC4gVGhlIHBhcnNlZCBtZXRob2QgYW5kIGxldmVsCisgKiBhcmUgcmV0 dXJuZWQgaW4gKmNvbXByZXNzaW9uTWV0aG9kIGFuZCAqY29tcHJlc3Npb25MZXZlbC4gSW4gY2Fz ZSBvZiBlcnJvciwKKyAqIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGFuZCB0aGVuIHRoZSB2 YWx1ZXMgb2YgKmNvbXByZXNzaW9ue01ldGhvZCxMZXZlbH0KKyAqIGFyZSBub3QgdG8gYmUgdHJ1 c3RlZC4KKyAqLworc3RhdGljIGJvb2wKK3BhcnNlX2NvbXByZXNzaW9uX29wdGlvbihjb25zdCBj aGFyICpvcHQsIENvbXByZXNzaW9uTWV0aG9kICpjb21wcmVzc2lvbk1ldGhvZCwKKwkJCQkJCSBp bnQgKmNvbXByZXNzTGV2ZWwpCit7CisJY2hhcgkgICAqbWV0aG9kOworCWNvbnN0IGNoYXIgKnNl cDsKKwlpbnQJCQltZXRob2RsZW47CisJYm9vbAkJc3VwcG9ydHNfY29tcHJlc3Npb24gPSB0cnVl OworCWJvb2wJCXJlcyA9IHRydWU7CisKKwkvKiBmaW5kIHRoZSBzZXBhcmF0b3IgaWYgZXhpc3Rz ICovCisJc2VwID0gc3RyY2hyKG9wdCwgJzonKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8g c2VwYXJhdG9yLCB0aGVuIGl0IGlzIGVpdGhlciBhIGxlZ2FjeSBmb3JtYXQsIG9yIG9ubHkgdGhl CisJICogbWV0aG9kIGhhcyBiZWVuIHBhc3NlZC4KKwkgKi8KKwlpZiAoIXNlcCkKKwl7CisJCWlm IChzdHJzcG4ob3B0LCAiLTAxMjM0NTY3ODkiKSA9PSBzdHJsZW4ob3B0KSkKKwkJeworCQkJcmVz ID0gb3B0aW9uX3BhcnNlX2ludChvcHQsICItWi8tLWNvbXByZXNzIiwgMCwgOSwgY29tcHJlc3NM ZXZlbCk7CisJCQkqY29tcHJlc3Npb25NZXRob2QgPSAoKmNvbXByZXNzTGV2ZWwgPiAwKSA/IENP TVBSRVNTSU9OX0daSVAgOgorCQkJCQkJCQkJCQkJCQlDT01QUkVTU0lPTl9OT05FOworCQl9CisJ CWVsc2UKKwkJCXJlcyA9IHBhcnNlX2NvbXByZXNzaW9uX21ldGhvZChvcHQsIGNvbXByZXNzaW9u TWV0aG9kKTsKKwl9CisJZWxzZQorCXsKKwkJLyogb3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgbWV0 aG9kOkxFVkVMICovCisJCW1ldGhvZGxlbiA9IHNlcCAtIG9wdCArIDE7CisJCW1ldGhvZCA9IHBn X21hbGxvYzAobWV0aG9kbGVuKTsKKwkJc25wcmludGYobWV0aG9kLCBtZXRob2RsZW4sICIlLipz IiwgbWV0aG9kbGVuIC0gMSwgb3B0KTsKKworCQlyZXMgPSBwYXJzZV9jb21wcmVzc2lvbl9tZXRo b2QobWV0aG9kLCBjb21wcmVzc2lvbk1ldGhvZCk7CisJCWlmIChyZXMpCisJCXsKKwkJCXNlcCsr OworCQkJaWYgKCpzZXAgPT0gJ1wwJykKKwkJCXsKKwkJCQlwZ19sb2dfZXJyb3IoIm5vIGxldmVs IGRlZmluZWQgZm9yIGNvbXByZXNzaW9uIFwiJXNcIiIsIG1ldGhvZCk7CisJCQkJcGdfZnJlZSht ZXRob2QpOworCQkJCXJlcyA9IGZhbHNlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJlcyA9 IG9wdGlvbl9wYXJzZV9pbnQoc2VwLCAiLVovLS1jb21wcmVzcyBbTEVWRUxdIiwgMSwgOSwKKwkJ CQkJCQkJCSAgIGNvbXByZXNzTGV2ZWwpOworCQkJfQorCQl9CisJfQorCisJLyogaWYgdGhlcmUg aXMgYW4gZXJyb3IsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciAqLworCWlmICgh cmVzKQorCQlyZXR1cm4gcmVzOworCisJLyogb25lIGNhbiBzZXQgbGV2ZWwgd2hlbiBtZXRob2Qg aXMgZ3ppcCAqLworCWlmICgqY29tcHJlc3Npb25NZXRob2QgIT0gQ09NUFJFU1NJT05fR1pJUCAm JiAqY29tcHJlc3NMZXZlbCAhPSBJTlRfTUlOKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjYW4gb25s eSBzcGVjaWZ5IC1aLy0tY29tcHJlc3MgW0xFVkVMXSB3aGVuIG1ldGhvZCBpcyBnemlwIik7CisJ CXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVxdWVzdGVkIGNvbXBy ZXNzaW9uIGlzIHN1cHBvcnRlZCAqLworI2lmbmRlZiBIQVZFX0xJQloKKwlpZiAoKmNvbXByZXNz aW9uTWV0aG9kID09IENPTVBSRVNTSU9OX0daSVApCisJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0g ZmFsc2U7CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9MSUJMWjQKKwlpZiAoKmNvbXByZXNzaW9uTWV0 aG9kID09IENPTVBSRVNTSU9OX0xaNCkKKwkJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxzZTsK KyNlbmRpZgorCisJaWYgKCFzdXBwb3J0c19jb21wcmVzc2lvbikKKwl7CisJCXBnX2xvZ193YXJu aW5nKCJyZXF1ZXN0ZWQgY29tcHJlc3Npb24gbm90IGF2YWlsYWJsZSBpbiB0aGlzIGluc3RhbGxh dGlvbiAtLSBhcmNoaXZlIHdpbGwgYmUgdW5jb21wcmVzc2VkIik7CisJCSpjb21wcmVzc2lvbk1l dGhvZCA9IENPTVBSRVNTSU9OX05PTkU7CisJCSpjb21wcmVzc0xldmVsID0gSU5UX01JTjsKKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIEFyY2hpdmVGb3JtYXQKIHBhcnNlQXJjaGl2 ZUZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIEFyY2hpdmVNb2RlICptb2RlKQogewpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3Qv MDAxX2Jhc2ljLnBsCmluZGV4IDljMTIzODE4MWEuLjQ3MTNkMGM4ZDQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFf YmFzaWMucGwKQEAgLTEyMCw2ICsxMjAsMTYgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCXFyL1xR cGdfcmVzdG9yZTogZXJyb3I6IGNhbm5vdCBzcGVjaWZ5IGJvdGggLS1zaW5nbGUtdHJhbnNhY3Rp b24gYW5kIG11bHRpcGxlIGpvYnNcRS8sCiAJJ3BnX3Jlc3RvcmU6IGNhbm5vdCBzcGVjaWZ5IGJv dGggLS1zaW5nbGUtdHJhbnNhY3Rpb24gYW5kIG11bHRpcGxlIGpvYnMnKTsKIAorY29tbWFuZF9m YWlsc19saWtlKAorCVsgJ3BnX2R1bXAnLCAnLS1jb21wcmVzcycsICdnYXJiYWdlJyBdLAorCXFy L1xRcGdfZHVtcDogZXJyb3I6IGludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICJnYXJiYWdlIiAo Z3ppcCwgbm9uZSlcRS8sCisJJ3BnX2R1bXA6IGludmFsaWQgLS1jb21wcmVzcycpOworCitjb21t YW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcCcsICctLWNvbXByZXNzJywgJ25vbmU6MScgXSwK Kwlxci9cUXBnX2R1bXA6IGVycm9yOiBjYW4gb25seSBzcGVjaWZ5IC1aXC8tLWNvbXByZXNzIFtM RVZFTF0gd2hlbiBtZXRob2QgaXMgZ3ppcFxFLywKKwkncGdfZHVtcDogY2FuIG9ubHkgc3BlY2lm eSAtWi8tLWNvbXByZXNzIFtMRVZFTF0gd2hlbiBtZXRob2QgaXMgZ3ppcCcpOworCiBjb21tYW5k X2ZhaWxzX2xpa2UoCiAJWyAncGdfZHVtcCcsICctWicsICctMScgXSwKIAlxci9cUXBnX2R1bXA6 IGVycm9yOiAtWlwvLS1jb21wcmVzcyBtdXN0IGJlIGluIHJhbmdlIDAuLjlcRS8sCkBAIC0xMjgs MTQgKzEzOCwxNCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiBpZiAoY2hlY2tfcGdfY29uZmlnKCIj ZGVmaW5lIEhBVkVfTElCWiAxIikpCiB7CiAJY29tbWFuZF9mYWlsc19saWtlKAotCQlbICdwZ19k dW1wJywgJy0tY29tcHJlc3MnLCAnMScsICctLWZvcm1hdCcsICd0YXInIF0sCisJCVsgJ3BnX2R1 bXAnLCAnLS1jb21wcmVzcycsICdnemlwOjEnLCAnLS1mb3JtYXQnLCAndGFyJyBdLAogCQlxci9c UXBnX2R1bXA6IGVycm9yOiBjb21wcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRhciBhcmNo aXZlIGZvcm1hdFxFLywKIAkJJ3BnX2R1bXA6IGNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQg YnkgdGFyIGFyY2hpdmUgZm9ybWF0Jyk7CiB9CiBlbHNlCiB7CiAJY29tbWFuZF9mYWlsc19saWtl KAotCQlbICdwZ19kdW1wJywgJy0tY29tcHJlc3MnLCAnMScsICctLWZvcm1hdCcsICd0YXInIF0s CisJCVsgJ3BnX2R1bXAnLCAnLS1jb21wcmVzcycsICdnemlwOjEnLCAnLS1mb3JtYXQnLCAndGFy JyBdLAogCQlxci9cUXBnX2R1bXA6IHdhcm5pbmc6IHJlcXVlc3RlZCBjb21wcmVzc2lvbiBub3Qg YXZhaWxhYmxlIGluIHRoaXMgaW5zdGFsbGF0aW9uIC0tIGFyY2hpdmUgd2lsbCBiZSB1bmNvbXBy ZXNzZWRcRS8sCiAJCSdwZ19kdW1wOiB3YXJuaW5nOiByZXF1ZXN0ZWQgY29tcHJlc3Npb24gbm90 IGF2YWlsYWJsZSBpbiB0aGlzIGluc3RhbGxhdGlvbiAtLSBhcmNoaXZlIHdpbGwgYmUgdW5jb21w cmVzc2VkJyk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5w bCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGI5ZjZkY2NlYzQuLjE1 MmQ1NTY0ZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisr KyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC03Niw3ICs3Niw3IEBAIG15 ICVwZ2R1bXBfcnVucyA9ICgKIAkJdGVzdF9rZXkgPT4gJ2NvbXByZXNzaW9uJywKIAkJZHVtcF9j bWQgPT4gWwogCQkJJ3BnX2R1bXAnLAotCQkJJy0tZm9ybWF0PWRpcmVjdG9yeScsICctLWNvbXBy ZXNzPTEnLAorCQkJJy0tZm9ybWF0PWRpcmVjdG9yeScsICctLWNvbXByZXNzPWd6aXA6MScsCiAJ CQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfZGlyZWN0b3J5X2Zvcm1hdCIsCiAJ CQkncG9zdGdyZXMnLAogCQldLApAQCAtOTcsNyArOTcsNyBAQCBteSAlcGdkdW1wX3J1bnMgPSAo CiAJCXRlc3Rfa2V5ID0+ICdjb21wcmVzc2lvbicsCiAJCWR1bXBfY21kID0+IFsKIAkJCSdwZ19k dW1wJywgJy0tam9icz0yJywKLQkJCSctLWZvcm1hdD1kaXJlY3RvcnknLCAnLS1jb21wcmVzcz02 JywKKwkJCSctLWZvcm1hdD1kaXJlY3RvcnknLCAnLS1jb21wcmVzcz1nemlwOjYnLAogCQkJIi0t ZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX2RpcmVjdG9yeV9mb3JtYXRfcGFyYWxsZWwi LAogCQkJJ3Bvc3RncmVzJywKIAkJXSwKQEAgLTEyOSw2ICsxMjksMjUgQEAgbXkgJXBnZHVtcF9y dW5zID0gKAogCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfcGxhaW5fZm9ybWF0LnNxbC5n eiIsCiAJCV0sCiAJfSwKKwljb21wcmVzc2lvbl9ub25lX2Rpcl9mb3JtYXQgPT4geworCQl0ZXN0 X2tleSA9PiAnY29tcHJlc3Npb24nLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcCcsICct RmQnLAorCQkJJy0tY29tcHJlc3M9bm9uZScsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNz aW9uX25vbmVfZGlyX2Zvcm1hdCIsCisJCQkncG9zdGdyZXMnLAorCQldLAorCQlnbG9iX21hdGNo ID0+IHsKKwkJCW5vX21hdGNoID0+ICIkdGVtcGRpci9jb21wcmVzc2lvbl9ub25lX2Rpcl9mb3Jt YXQvKi5kYXQuZ3oiLAorCQkJbWF0Y2ggPT4gIiR0ZW1wZGlyL2NvbXByZXNzaW9uX25vbmVfZGly X2Zvcm1hdC8qLmRhdCIsCisJCQltYXRjaF9jb3VudCA9PiAyLCAjIHRvYy5kYXQgYW5kIG1vcmUK KwkJfSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUZkJywKKwkJCSIt LWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbm9uZV9kaXJfZm9ybWF0LnNxbCIsCisJCQkiJHRl bXBkaXIvY29tcHJlc3Npb25fbm9uZV9kaXJfZm9ybWF0IiwKKwkJXSwKKwl9LAogCWNsZWFuID0+ IHsKIAkJZHVtcF9jbWQgPT4gWwogCQkJJ3BnX2R1bXAnLApAQCAtMjI4LDcgKzI0Nyw3IEBAIG15 ICVwZ2R1bXBfcnVucyA9ICgKIAlkZWZhdWx0c19kaXJfZm9ybWF0ID0+IHsKIAkJdGVzdF9rZXkg PT4gJ2RlZmF1bHRzJywKIAkJZHVtcF9jbWQgPT4gWwotCQkJJ3BnX2R1bXAnLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJy1GZCcsCisJCQkncGdfZHVtcCcsICctRmQnLAogCQkJIi0tZmls ZT0kdGVtcGRpci9kZWZhdWx0c19kaXJfZm9ybWF0IiwgJ3Bvc3RncmVzJywKIAkJXSwKIAkJcmVz dG9yZV9jbWQgPT4gWwpAQCAtNDA0MSw2ICs0MDYwLDMxIEBAIGZvcmVhY2ggbXkgJHJ1biAoc29y dCBrZXlzICVwZ2R1bXBfcnVucykKIAkJY29tbWFuZF9vayggXEB7ICRwZ2R1bXBfcnVuc3skcnVu fS0+e2NvbXByZXNzX2NtZH0gfSwKIAkJCSIkcnVuOiBjb21wcmVzc2lvbiBjb21tYW5kcyIpOwog CX0KKwlpZiAoZGVmaW5lZCgkcGdkdW1wX3J1bnN7JHJ1bn0tPntnbG9iX21hdGNofSkpCisJewor CQkjIFNraXAgY29tcHJlc3Npb25fY21kIHRlc3RzIHdoZW4gY29tcHJlc3Npb24gaXMgbm90IHN1 cHBvcnRlZCwKKwkJIyBhcyB0aGUgcmVzdWx0IGlzIHVuY29tcHJlc3NlZCBvciB0aGUgdXRpbGl0 eSBwcm9ncmFtIGRvZXMgbm90CisJCSMgZXhpc3QKKwkJbmV4dCBpZiAhJHN1cHBvcnRzX2NvbXBy ZXNzaW9uIHx8ICFkZWZpbmVkKCRjb21wcmVzc19wcm9ncmFtKQorCQkJCXx8ICRjb21wcmVzc19w cm9ncmFtIGVxICcnOworCisJCW15ICRtYXRjaCA9ICRwZ2R1bXBfcnVuc3skcnVufS0+e2dsb2Jf bWF0Y2h9LT57bWF0Y2h9OworCQlteSAkbWF0Y2hfY291bnQgPSBkZWZpbmVkKCRwZ2R1bXBfcnVu c3skcnVufS0+e2dsb2JfbWF0Y2h9LT57bWF0Y2hfY291bnR9KSA/CisJCQkJCQkJJHBnZHVtcF9y dW5zeyRydW59LT57Z2xvYl9tYXRjaH0tPnttYXRjaF9jb3VudH0gOiAxOworCQlteSBAZ2xvYl9t YXRjaGVkID0gZ2xvYiAkbWF0Y2g7CisKKwkJY21wX29rKHNjYWxhcihAZ2xvYl9tYXRjaGVkKSwg Jz49JywgJG1hdGNoX2NvdW50LAorCQkJIkV4cGVjdGVkIGF0IGxlYXN0ICRtYXRjaF9jb3VudCBm aWxlKHMpIG1hdGNoaW5nICRtYXRjaCIpOworCisJCWlmIChkZWZpbmVkKCRwZ2R1bXBfcnVuc3sk cnVufS0+e2dsb2JfbWF0Y2h9LT57bm9fbWF0Y2h9KSkKKwkJeworCQkJbXkgJG5vX21hdGNoID0g JHBnZHVtcF9ydW5zeyRydW59LT57Z2xvYl9tYXRjaH0tPntub19tYXRjaH07CisJCQlteSBAZ2xv Yl9tYXRjaGVkID0gZ2xvYiAkbm9fbWF0Y2g7CisKKwkJCWNtcF9vayhzY2FsYXIoQGdsb2JfbWF0 Y2hlZCksICc9PScsIDAsCisJCQkJIkV4cGVjdGVkIG5vIGZpbGUocykgbWF0Y2hpbmcgJG5vX21h dGNoIik7CisJCX0KKwl9CiAKIAlpZiAoJHBnZHVtcF9ydW5zeyRydW59LT57cmVzdG9yZV9jbWR9 KQogCXsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMTgyYjIzM2I0Yy4uMDBjNmFkOTUx NiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQxMiw3ICs0MTIsNyBAQCBDb21waWxl ZEV4cHJTdGF0ZQogQ29tcG9zaXRlSU9EYXRhCiBDb21wb3NpdGVUeXBlU3RtdAogQ29tcG91bmRB ZmZpeEZsYWcKLUNvbXByZXNzaW9uQWxnb3JpdGhtCitDb21wcmVzc2lvbk1ldGhvZAogQ29tcHJl c3NvclN0YXRlCiBDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQKIENvbmRpdGlvblZhcmlhYmxlCi0t IAoyLjMyLjAKCg== --b1_u2X9lop6Yk7scHMVWcGTtJ3U566CpC4hbBKtChwprw Content-Type: text/x-patch; name=v3-0001-Extend-compression-coverage-for-pg_dump-pg_restor.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0001-Extend-compression-coverage-for-pg_dump-pg_restor.patch RnJvbSA2NTIzMmExZWQ4ZmRmYjU3Nzc1YmVmODU2YTkwNzk2NWRmY2RhMTRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjkgTWFyIDIwMjIgMDg6Mjk6MTUgKzAwMDAKU3ViamVjdDogW1BBVENIIHYz IDEvNF0gRXh0ZW5kIGNvbXByZXNzaW9uIGNvdmVyYWdlIGZvciBwZ19kdW1wLCBwZ19yZXN0b3Jl CgotLS0KIHNyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSAgICAgICAgIHwgIDIgKwogc3JjL2Jpbi9w Z19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgfCAxNSArKysrKysKIHNyYy9iaW4vcGdfZHVtcC90LzAw Ml9wZ19kdW1wLnBsIHwgOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmls ZXMgY2hhbmdlZCwgMTA5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggMzAyZjdlMDJkNi4u MmY1MjRiMDliZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsOCBAQCBzdWJkaXIgPSBzcmMvYmlu L3BnX2R1bXAKIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGly KS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKK2V4cG9ydCBHWklQX1BST0dSQU09JChHWklQKQorCiBv dmVycmlkZSBDUFBGTEFHUyA6PSAtSSQobGlicHFfc3JjZGlyKSAkKENQUEZMQUdTKQogTERGTEFH U19JTlRFUk5BTCArPSAtTCQodG9wX2J1aWxkZGlyKS9zcmMvZmVfdXRpbHMgLWxwZ2ZldXRpbHMg JChsaWJwcV9wZ3BvcnQpCiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNp Yy5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAppbmRleCBlMGJmM2ViMDMyLi45 YzEyMzgxODFhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0xMjUsNiArMTI1LDIxIEBAIGNv bW1hbmRfZmFpbHNfbGlrZSgKIAlxci9cUXBnX2R1bXA6IGVycm9yOiAtWlwvLS1jb21wcmVzcyBt dXN0IGJlIGluIHJhbmdlIDAuLjlcRS8sCiAJJ3BnX2R1bXA6IC1aLy0tY29tcHJlc3MgbXVzdCBi ZSBpbiByYW5nZScpOwogCitpZiAoY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5lIEhBVkVfTElCWiAx IikpCit7CisJY29tbWFuZF9mYWlsc19saWtlKAorCQlbICdwZ19kdW1wJywgJy0tY29tcHJlc3Mn LCAnMScsICctLWZvcm1hdCcsICd0YXInIF0sCisJCXFyL1xRcGdfZHVtcDogZXJyb3I6IGNvbXBy ZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyIGFyY2hpdmUgZm9ybWF0XEUvLAorCQkncGdf ZHVtcDogY29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBieSB0YXIgYXJjaGl2ZSBmb3JtYXQn KTsKK30KK2Vsc2UKK3sKKwljb21tYW5kX2ZhaWxzX2xpa2UoCisJCVsgJ3BnX2R1bXAnLCAnLS1j b21wcmVzcycsICcxJywgJy0tZm9ybWF0JywgJ3RhcicgXSwKKwkJcXIvXFFwZ19kdW1wOiB3YXJu aW5nOiByZXF1ZXN0ZWQgY29tcHJlc3Npb24gbm90IGF2YWlsYWJsZSBpbiB0aGlzIGluc3RhbGxh dGlvbiAtLSBhcmNoaXZlIHdpbGwgYmUgdW5jb21wcmVzc2VkXEUvLAorCQkncGdfZHVtcDogd2Fy bmluZzogcmVxdWVzdGVkIGNvbXByZXNzaW9uIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBpbnN0YWxs YXRpb24gLS0gYXJjaGl2ZSB3aWxsIGJlIHVuY29tcHJlc3NlZCcpOworfQorCiBjb21tYW5kX2Zh aWxzX2xpa2UoCiAJWyAncGdfZHVtcCcsICctLWV4dHJhLWZsb2F0LWRpZ2l0cycsICctMTYnIF0s CiAJcXIvXFFwZ19kdW1wOiBlcnJvcjogLS1leHRyYS1mbG9hdC1kaWdpdHMgbXVzdCBiZSBpbiBy YW5nZVxFLywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIv c3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggYWY1ZDZmYTVhMy4uYjlmNmRj Y2VjNCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTU0LDYgKzU0LDgxIEBAIG15ICVw Z2R1bXBfcnVucyA9ICgKIAkJCSIkdGVtcGRpci9iaW5hcnlfdXBncmFkZS5kdW1wIiwKIAkJXSwK IAl9LAorCisJIyBEbyBub3QgdXNlIC0tbm8tc3luYyB0byBnaXZlIHRlc3QgY292ZXJhZ2UgZm9y IGRhdGEgc3luYy4KKwljb21wcmVzc2lvbl9nemlwX2N1c3RvbV9mb3JtYXQgPT4geworCQl0ZXN0 X2tleSA9PiAnY29tcHJlc3Npb24nLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcCcsCisJ CQknLS1mb3JtYXQ9Y3VzdG9tJywgJy0tY29tcHJlc3M9MScsCisJCQkiLS1maWxlPSR0ZW1wZGly L2NvbXByZXNzaW9uX2d6aXBfY3VzdG9tX2Zvcm1hdC5kdW1wIiwKKwkJCSdwb3N0Z3JlcycsCisJ CV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywKKwkJCSItLWZpbGU9JHRl bXBkaXIvY29tcHJlc3Npb25fZ3ppcF9jdXN0b21fZm9ybWF0LnNxbCIsCisJCQkiJHRlbXBkaXIv Y29tcHJlc3Npb25fZ3ppcF9jdXN0b21fZm9ybWF0LmR1bXAiLAorCQldLAorCX0sCisKKwkjIERv IG5vdCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBjb3ZlcmFnZSBmb3IgZGF0YSBzeW5jLgor CWNvbXByZXNzaW9uX2d6aXBfZGlyZWN0b3J5X2Zvcm1hdCA9PiB7CisJCXRlc3Rfa2V5ID0+ICdj b21wcmVzc2lvbicsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wJywKKwkJCSctLWZvcm1h dD1kaXJlY3RvcnknLCAnLS1jb21wcmVzcz0xJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJl c3Npb25fZ3ppcF9kaXJlY3RvcnlfZm9ybWF0IiwKKwkJCSdwb3N0Z3JlcycsCisJCV0sCisJCSMg R2l2ZSBjb3ZlcmFnZSBmb3IgbWFudWFsbHkgY29tcHJlc3NlZCBibG9iLnRvYyBmaWxlcyBkdXJp bmcgcmVzdG9yZS4KKwkJY29tcHJlc3NfY21kID0+IFsKKwkJCSRFTlZ7J0daSVBfUFJPR1JBTSd9 LAorCQkJJy1mJywKKwkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX2RpcmVjdG9yeV9mb3Jt YXQvYmxvYnMudG9jIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUn LAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX2RpcmVjdG9yeV9mb3JtYXQu c3FsIiwKKwkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX2RpcmVjdG9yeV9mb3JtYXQiLAor CQldLAorCX0sCisKKwljb21wcmVzc2lvbl9nemlwX2RpcmVjdG9yeV9mb3JtYXRfcGFyYWxsZWwg PT4geworCQl0ZXN0X2tleSA9PiAnY29tcHJlc3Npb24nLAorCQlkdW1wX2NtZCA9PiBbCisJCQkn cGdfZHVtcCcsICctLWpvYnM9MicsCisJCQknLS1mb3JtYXQ9ZGlyZWN0b3J5JywgJy0tY29tcHJl c3M9NicsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfZGlyZWN0b3J5X2Zv cm1hdF9wYXJhbGxlbCIsCisJCQkncG9zdGdyZXMnLAorCQldLAorCQkjIEdpdmUgY292ZXJhZ2Ug Zm9yIG1hbnVhbGx5IGNvbXByZXNzZWQgYmxvYi50b2MgZmlsZXMgZHVyaW5nIHJlc3RvcmUuCisJ CWNvbXByZXNzX2NtZCA9PiBbCisJCQkkRU5WeydHWklQX1BST0dSQU0nfSwKKwkJCSctZicsCisJ CQkiJHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9kaXJlY3RvcnlfZm9ybWF0X3BhcmFsbGVsL2Js b2JzLnRvYyIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywKKwkJ CSctLWpvYnM9MycsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfZGlyZWN0 b3J5X2Zvcm1hdF9wYXJhbGxlbC5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBf ZGlyZWN0b3J5X2Zvcm1hdF9wYXJhbGxlbCIsCisJCV0sCisJfSwKKworCSMgQ2hlY2sgdGhhdCB0 aGUgb3V0cHV0IGlzIHZhbGlkIGd6aXAKKwljb21wcmVzc2lvbl9nemlwX3BsYWluX2Zvcm1hdCA9 PiB7CisJCXRlc3Rfa2V5ID0+ICdjb21wcmVzc2lvbicsCisJCWR1bXBfY21kID0+IFsKKwkJCSdw Z19kdW1wJywgJy0tZm9ybWF0PXBsYWluJywgJy1aMScsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2Nv bXByZXNzaW9uX2d6aXBfcGxhaW5fZm9ybWF0LnNxbC5neiIsCisJCQkncG9zdGdyZXMnLAorCQld LAorCQljb21wcmVzc19jbWQgPT4gWworCQkJJEVOVnsnR1pJUF9QUk9HUkFNJ30sCisJCQknLWQn LAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfcGxhaW5fZm9ybWF0LnNxbC5neiIsCisJ CV0sCisJfSwKIAljbGVhbiA9PiB7CiAJCWR1bXBfY21kID0+IFsKIAkJCSdwZ19kdW1wJywKQEAg LTQyNCw2ICs0OTksNyBAQCBteSAlZnVsbF9ydW5zID0gKAogCWJpbmFyeV91cGdyYWRlICAgICAg ICAgICA9PiAxLAogCWNsZWFuICAgICAgICAgICAgICAgICAgICA9PiAxLAogCWNsZWFuX2lmX2V4 aXN0cyAgICAgICAgICA9PiAxLAorCWNvbXByZXNzaW9uICAgICAgICAgICAgICA9PiAxLAogCWNy ZWF0ZWRiICAgICAgICAgICAgICAgICA9PiAxLAogCWRlZmF1bHRzICAgICAgICAgICAgICAgICA9 PiAxLAogCWV4Y2x1ZGVfZHVtcF90ZXN0X3NjaGVtYSA9PiAxLApAQCAtMzA5OCw2ICszMTc0LDcg QEAgbXkgJXRlc3RzID0gKAogCQkJYmluYXJ5X3VwZ3JhZGUgICAgICAgICAgPT4gMSwKIAkJCWNs ZWFuICAgICAgICAgICAgICAgICAgID0+IDEsCiAJCQljbGVhbl9pZl9leGlzdHMgICAgICAgICA9 PiAxLAorCQkJY29tcHJlc3Npb24gICAgICAgICAgICAgPT4gMSwKIAkJCWNyZWF0ZWRiICAgICAg ICAgICAgICAgID0+IDEsCiAJCQlkZWZhdWx0cyAgICAgICAgICAgICAgICA9PiAxLAogCQkJZXhj bHVkZV90ZXN0X3RhYmxlICAgICAgPT4gMSwKQEAgLTMxNzEsNiArMzI0OCw3IEBAIG15ICV0ZXN0 cyA9ICgKIAkJCWJpbmFyeV91cGdyYWRlICAgICAgICAgICA9PiAxLAogCQkJY2xlYW4gICAgICAg ICAgICAgICAgICAgID0+IDEsCiAJCQljbGVhbl9pZl9leGlzdHMgICAgICAgICAgPT4gMSwKKwkJ CWNvbXByZXNzaW9uICAgICAgICAgICAgICA9PiAxLAogCQkJY3JlYXRlZGIgICAgICAgICAgICAg ICAgID0+IDEsCiAJCQlkZWZhdWx0cyAgICAgICAgICAgICAgICAgPT4gMSwKIAkJCWV4Y2x1ZGVf ZHVtcF90ZXN0X3NjaGVtYSA9PiAxLApAQCAtMzk0Nyw5ICs0MDI1LDIzIEBAIGZvcmVhY2ggbXkg JHJ1biAoc29ydCBrZXlzICVwZ2R1bXBfcnVucykKIAlteSAkdGVzdF9rZXkgPSAkcnVuOwogCW15 ICRydW5fZGIgICA9ICdwb3N0Z3Jlcyc7CiAKKwlteSAkc3VwcG9ydHNfY29tcHJlc3Npb24gPSBj aGVja19wZ19jb25maWcoIiNkZWZpbmUgSEFWRV9MSUJaIDEiKTsKKwlteSAkY29tcHJlc3NfcHJv Z3JhbSA9ICRFTlZ7R1pJUF9QUk9HUkFNfTsKKwogCSRub2RlLT5jb21tYW5kX29rKFxAeyAkcGdk dW1wX3J1bnN7JHJ1bn0tPntkdW1wX2NtZH0gfSwKIAkJIiRydW46IHBnX2R1bXAgcnVucyIpOwog CisJaWYgKGRlZmluZWQoJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcHJlc3NfY21kfSkpCisJewor CQkjIFNraXAgY29tcHJlc3Npb25fY21kIHRlc3RzIHdoZW4gY29tcHJlc3Npb24gaXMgbm90IHN1 cHBvcnRlZCwKKwkJIyBhcyB0aGUgcmVzdWx0IGlzIHVuY29tcHJlc3NlZCBvciB0aGUgdXRpbGl0 eSBwcm9ncmFtIGRvZXMgbm90CisJCSMgZXhpc3QKKwkJbmV4dCBpZiAhJHN1cHBvcnRzX2NvbXBy ZXNzaW9uIHx8ICFkZWZpbmVkKCRjb21wcmVzc19wcm9ncmFtKQorCQkJCXx8ICRjb21wcmVzc19w cm9ncmFtIGVxICcnOworCQljb21tYW5kX29rKCBcQHsgJHBnZHVtcF9ydW5zeyRydW59LT57Y29t cHJlc3NfY21kfSB9LAorCQkJIiRydW46IGNvbXByZXNzaW9uIGNvbW1hbmRzIik7CisJfQorCiAJ aWYgKCRwZ2R1bXBfcnVuc3skcnVufS0+e3Jlc3RvcmVfY21kfSkKIAl7CiAJCSRub2RlLT5jb21t YW5kX29rKFxAeyAkcGdkdW1wX3J1bnN7JHJ1bn0tPntyZXN0b3JlX2NtZH0gfSwKLS0gCjIuMzIu MAoK --b1_u2X9lop6Yk7scHMVWcGTtJ3U566CpC4hbBKtChwprw Content-Type: text/x-patch; name=v3-0002-Remove-unsupported-bitrot-compression-from-pg_dum.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0002-Remove-unsupported-bitrot-compression-from-pg_dum.patch RnJvbSAyODQyZjNmMDlkMjA5MzE5YWJmMDJhZDJhNjBlZmQ3MTM5OWU3NWI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjkgTWFyIDIwMjIgMDg6Mjk6MjUgKzAwMDAKU3ViamVjdDogW1BBVENIIHYz IDIvNF0gUmVtb3ZlIHVuc3VwcG9ydGVkL2JpdHJvdCBjb21wcmVzc2lvbiBmcm9tIHBnX2R1bXAg dGFyCgotLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgfCA4MiArKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyks IDczIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf dGFyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGNjZmJlMzQ2YmUu LjYyMGU2MDkwNTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtNjUsMTEgKzY1LDYgQEAg c3RhdGljIHZvaWQgX0VuZEJsb2JzKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpOwog CiB0eXBlZGVmIHN0cnVjdAogewotI2lmZGVmIEhBVkVfTElCWgotCWd6RmlsZQkJekZIOwotI2Vs c2UKLQlGSUxFCSAgICp6Rkg7Ci0jZW5kaWYKIAlGSUxFCSAgICpuRkg7CiAJRklMRQkgICAqdGFy Rkg7CiAJRklMRQkgICAqdG1wRkg7CkBAIC0yNDgsMTQgKzI0Myw3IEBAIF9BcmNoaXZlRW50cnko QXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAljdHggPSAobGNsVG9jRW50cnkgKikg cGdfbWFsbG9jMChzaXplb2YobGNsVG9jRW50cnkpKTsKIAlpZiAodGUtPmRhdGFEdW1wZXIgIT0g TlVMTCkKIAl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChBSC0+Y29tcHJlc3Npb24gPT0gMCkK LQkJCXNwcmludGYoZm4sICIlZC5kYXQiLCB0ZS0+ZHVtcElkKTsKLQkJZWxzZQotCQkJc3ByaW50 ZihmbiwgIiVkLmRhdC5neiIsIHRlLT5kdW1wSWQpOwotI2Vsc2UKLQkJc3ByaW50ZihmbiwgIiVk LmRhdCIsIHRlLT5kdW1wSWQpOwotI2VuZGlmCisJCXNucHJpbnRmKGZuLCBzaXplb2YoZm4pLCAi JWQuZGF0IiwgdGUtPmR1bXBJZCk7CiAJCWN0eC0+ZmlsZW5hbWUgPSBwZ19zdHJkdXAoZm4pOwog CX0KIAllbHNlCkBAIC0zMjAsMTAgKzMwOCw2IEBAIHRhck9wZW4oQXJjaGl2ZUhhbmRsZSAqQUgs IGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyIG1vZGUpCiAJbGNsQ29udGV4dCAqY3R4ID0gKGxj bENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAJVEFSX01FTUJFUiAqdG07CiAKLSNpZmRlZiBI QVZFX0xJQloKLQljaGFyCQlmbW9kZVsxNF07Ci0jZW5kaWYKLQogCWlmIChtb2RlID09ICdyJykK IAl7CiAJCXRtID0gX3RhclBvc2l0aW9uVG8oQUgsIGZpbGVuYW1lKTsKQEAgLTM0NCwxNiArMzI4 LDEwIEBAIHRhck9wZW4oQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBj aGFyIG1vZGUpCiAJCQl9CiAJCX0KIAotI2lmZGVmIEhBVkVfTElCWgotCiAJCWlmIChBSC0+Y29t cHJlc3Npb24gPT0gMCkKIAkJCXRtLT5uRkggPSBjdHgtPnRhckZIOwogCQllbHNlCiAJCQlmYXRh bCgiY29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBieSB0YXIgYXJjaGl2ZSBmb3JtYXQiKTsK LQkJLyogdG0tPnpGSCA9IGd6ZG9wZW4oZHVwKGZpbGVubyhjdHgtPnRhckZIKSksICJyYiIpOyAq LwotI2Vsc2UKLQkJdG0tPm5GSCA9IGN0eC0+dGFyRkg7Ci0jZW5kaWYKIAl9CiAJZWxzZQogCXsK QEAgLTQwNSwyMSArMzgzLDEwIEBAIHRhck9wZW4oQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBjaGFyIG1vZGUpCiAKIAkJdW1hc2sob2xkX3VtYXNrKTsKIAotI2lmZGVm IEhBVkVfTElCWgotCi0JCWlmIChBSC0+Y29tcHJlc3Npb24gIT0gMCkKLQkJewotCQkJc3ByaW50 ZihmbW9kZSwgIndiJWQiLCBBSC0+Y29tcHJlc3Npb24pOwotCQkJdG0tPnpGSCA9IGd6ZG9wZW4o ZHVwKGZpbGVubyh0bS0+dG1wRkgpKSwgZm1vZGUpOwotCQkJaWYgKHRtLT56RkggPT0gTlVMTCkK LQkJCQlmYXRhbCgiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiKTsKLQkJfQotCQllbHNl CisJCWlmIChBSC0+Y29tcHJlc3Npb24gPT0gMCkKIAkJCXRtLT5uRkggPSB0bS0+dG1wRkg7Ci0j ZWxzZQotCi0JCXRtLT5uRkggPSB0bS0+dG1wRkg7Ci0jZW5kaWYKKwkJZWxzZQorCQkJZmF0YWwo ImNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyIGFyY2hpdmUgZm9ybWF0Iik7CiAK IAkJdG0tPkFIID0gQUg7CiAJCXRtLT50YXJnZXRGaWxlID0gcGdfc3RyZHVwKGZpbGVuYW1lKTsK QEAgLTQzNCwxNSArNDAxLDggQEAgdGFyT3BlbihBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsIGNoYXIgbW9kZSkKIHN0YXRpYyB2b2lkCiB0YXJDbG9zZShBcmNoaXZlSGFu ZGxlICpBSCwgVEFSX01FTUJFUiAqdGgpCiB7Ci0JLyoKLQkgKiBDbG9zZSB0aGUgR1ogZmlsZSBz aW5jZSB3ZSBkdXAnZC4gVGhpcyB3aWxsIGZsdXNoIHRoZSBidWZmZXJzLgotCSAqLwogCWlmIChB SC0+Y29tcHJlc3Npb24gIT0gMCkKLQl7Ci0JCWVycm5vID0gMDsJCQkJLyogaW4gY2FzZSBnemNs b3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQkJaWYgKEdaQ0xPU0UodGgtPnpGSCkgIT0gMCkKLQkJ CWZhdGFsKCJjb3VsZCBub3QgY2xvc2UgdGFyIG1lbWJlcjogJW0iKTsKLQl9CisJCWZhdGFsKCJj b21wcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRhciBhcmNoaXZlIGZvcm1hdCIpOwogCiAJ aWYgKHRoLT5tb2RlID09ICd3JykKIAkJX3RhckFkZEZpbGUoQUgsIHRoKTsJLyogVGhpcyB3aWxs IGNsb3NlIHRoZSB0ZW1wIGZpbGUgKi8KQEAgLTQ1Niw3ICs0MTYsNiBAQCB0YXJDbG9zZShBcmNo aXZlSGFuZGxlICpBSCwgVEFSX01FTUJFUiAqdGgpCiAJCWZyZWUodGgtPnRhcmdldEZpbGUpOwog CiAJdGgtPm5GSCA9IE5VTEw7Ci0JdGgtPnpGSCA9IE5VTEw7CiB9CiAKICNpZmRlZiBfX05PVF9V U0VEX18KQEAgLTU0MiwyOSArNTAxLDkgQEAgX3RhclJlYWRSYXcoQXJjaGl2ZUhhbmRsZSAqQUgs IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgVEFSX01FTUJFUiAqdGgsIEZJTEUgKmZoKQogCQl9CiAJ CWVsc2UgaWYgKHRoKQogCQl7Ci0JCQlpZiAodGgtPnpGSCkKLQkJCXsKLQkJCQlyZXMgPSBHWlJF QUQoJigoY2hhciAqKSBidWYpW3VzZWRdLCAxLCBsZW4sIHRoLT56RkgpOwotCQkJCWlmIChyZXMg IT0gbGVuICYmICFHWkVPRih0aC0+ekZIKSkKLQkJCQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQkJ CWludAkJCWVycm51bTsKLQkJCQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcih0aC0+ekZI LCAmZXJybnVtKTsKLQotCQkJCQlmYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxl OiAlcyIsCi0JCQkJCQkgIGVycm51bSA9PSBaX0VSUk5PID8gc3RyZXJyb3IoZXJybm8pIDogZXJy bXNnKTsKLSNlbHNlCi0JCQkJCWZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6 ICVzIiwKLQkJCQkJCSAgc3RyZXJyb3IoZXJybm8pKTsKLSNlbmRpZgotCQkJCX0KLQkJCX0KLQkJ CWVsc2UKLQkJCXsKLQkJCQlyZXMgPSBmcmVhZCgmKChjaGFyICopIGJ1ZilbdXNlZF0sIDEsIGxl biwgdGgtPm5GSCk7Ci0JCQkJaWYgKHJlcyAhPSBsZW4gJiYgIWZlb2YodGgtPm5GSCkpCi0JCQkJ CVJFQURfRVJST1JfRVhJVCh0aC0+bkZIKTsKLQkJCX0KKwkJCXJlcyA9IGZyZWFkKCYoKGNoYXIg KikgYnVmKVt1c2VkXSwgMSwgbGVuLCB0aC0+bkZIKTsKKwkJCWlmIChyZXMgIT0gbGVuICYmICFm ZW9mKHRoLT5uRkgpKQorCQkJCVJFQURfRVJST1JfRVhJVCh0aC0+bkZIKTsKIAkJfQogCX0KIApA QCAtNTk2LDEwICs1MzUsNyBAQCB0YXJXcml0ZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4s IFRBUl9NRU1CRVIgKnRoKQogewogCXNpemVfdAkJcmVzOwogCi0JaWYgKHRoLT56RkggIT0gTlVM TCkKLQkJcmVzID0gR1pXUklURShidWYsIDEsIGxlbiwgdGgtPnpGSCk7Ci0JZWxzZQotCQlyZXMg PSBmd3JpdGUoYnVmLCAxLCBsZW4sIHRoLT5uRkgpOworCXJlcyA9IGZ3cml0ZShidWYsIDEsIGxl biwgdGgtPm5GSCk7CiAKIAl0aC0+cG9zICs9IHJlczsKIAlyZXR1cm4gcmVzOwotLSAKMi4zMi4w Cgo= --b1_u2X9lop6Yk7scHMVWcGTtJ3U566CpC4hbBKtChwprw--