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 1p2aF2-0006Ml-Nv for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Dec 2022 15:52:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p2aF1-0004fK-MI for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Dec 2022 15:52:19 +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 1p2aF0-0004XG-NP for pgsql-hackers@lists.postgresql.org; Tue, 06 Dec 2022 15:52:19 +0000 Received: from mail-4322.protonmail.ch ([185.70.43.22]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p2aEr-0007DY-TA for pgsql-hackers@lists.postgresql.org; Tue, 06 Dec 2022 15:52:17 +0000 Date: Tue, 06 Dec 2022 15:52:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1670341924; x=1670601124; bh=qAHuHQPEqoQQFkiOjgnaU6T8M7wWaMWfnwiDlP0GWbM=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=cj4X7EFmjs/dyjuHrK53OmaFDssmREEL6lmhEwcE6I6MdInG0sHBB7pqY5u3VkKc4 kdml1ddreRWlBsUfotTAdEzdgdkh+12anXMfc7wj6+A0km1t1UZgjWn0zMwcsQKT9I udZ4YXayEf/9E4WapZMmOZTGfcFuj4OD1H6Qh9hoX8gXL4IXAIA2OL6uYZOwKp+Yjy idTAQP6fcm1WY9rksOmirymPr4Oofa9COCwN4C4HBq9ACRAEc1eO6dC66dmergvzsD aNeD2ObBrdvQubA11lTdxIQfgURvTA0Cmx34q3A39AdFQCLAJEbXZBuSjXmNn9jGhc ryr883L32HI5g== To: Michael Paquier From: gkokolatos@pm.me Cc: Justin Pryzby , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: <4wfmZ9BuGbkM6JXggut4g_gPl1hLbVeUwPEQh5nGgzlKCgnbtRaw7-nPcyPelGdG8ttH9A7vgyX_Z2fwZxuqHt1xENg9mqDfP_94qoZ5WxQ=@pm.me> In-Reply-To: References: Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_SYi4uvFhqzbxbjsoeasreueLGXmmrrLQb2ygYpVzc" 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_SYi4uvFhqzbxbjsoeasreueLGXmmrrLQb2ygYpVzc Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Tuesday, December 6th, 2022 at 1:22 AM, Michael Paquier wrote: >=20 >=20 > On Mon, Dec 05, 2022 at 12:48:28PM +0000, gkokolatos@pm.me wrote: >=20 > This is where the fun is. What you are doing here is more complete, > and we would make sure that the custom and data directory would always > see their contents compressed by default. And it would have caught > the bug you mentioned upthread for the custom format. Thank you very much Michael. > I have kept things as you proposed at the end, added a few comments, > documented the new command_like and an extra command_like for > defaults_dir_format. Glad to see this addressed, thanks! Please find attached v17, which builds on top of what is already committed. I dare to think 0001 as ready to be reviewed. 0002 is also complete albeit with some documentation gaps. Cheers, //Georgios > -- > Michael --b1_SYi4uvFhqzbxbjsoeasreueLGXmmrrLQb2ygYpVzc Content-Type: text/x-patch; name=v17-0001-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v17-0001-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSA4NTlhOWNhNjVkZGFmYWY5ODg1NGI4MTYzOWQzMTBjMTFjNWNhZTljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgNiBEZWMgMjAyMiAxNTo0MjowMyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjE3 IDEvM10gUHJlcGFyZSBwZ19kdW1wIGludGVybmFscyBmb3IgYWRkaXRpb25hbCBjb21wcmVzc2lv bgogbWV0aG9kcy4KCkNvbW1pdCAgYmY5YWE0OTBkYiBpbnRyb2R1Y2VkIGNmcCBpbiBjb21wcmVz c19pby57YyxofSB3aXRoIHRoZSBpbnRlbnQgb2YKdW5pZnlpbmcgY29tcHJlc3Npb24gcmVsYXRl ZCBjb2RlIGFuZCBhbGxvdyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiBhZGRpdGlvbmFsCmFyY2hp dmUgZm9ybWF0cy4gSG93ZXZlciwgcGdfYmFja3VwX2FyY2hpdmVyLmMgd2FzIG5vdCB1c2luZyB0 aGF0IEFQSS4gVGhpcwpjb21taXQgdGVhY2hlcyBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBhYm91dCBp dCBhbmQgaXMgdXNpbmcgaXQgdGhyb3VnaG91dC4KLS0tCiBzcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfaW8uYyAgICAgICAgfCAzOTYgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgfCAxMjggKysrLS0tLS0tCiBzcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggfCAgMjcgKy0KIDMgZmlsZXMgY2hhbmdlZCwgMzIz IGluc2VydGlvbnMoKyksIDIyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfaW8uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCmluZGV4 IGE3ZGY2MDBjYzAuLmI4OTNhY2ExZWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21w cmVzc19pby5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Niw2ICs1 NiwxMCBAQAogI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0 aWxzLmgiCiAKKyNpZmRlZiBIQVZFX0xJQloKKyNpbmNsdWRlIDx6bGliLmg+CisjZW5kaWYKKwog LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDb21wcmVzc29yIEFQSQogICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tCkBAIC0xMDEsNyArMTA1LDcgQEAgQWxsb2NhdGVDb21wcmVzc29yKGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKIAogI2lmbmRlZiBI QVZFX0xJQloKIAlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJ T05fR1pJUCkKLQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOworCQlw Z19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMi LCAiZ3ppcCIpOwogI2VuZGlmCiAKIAljcyA9IChDb21wcmVzc29yU3RhdGUgKikgcGdfbWFsbG9j MChzaXplb2YoQ29tcHJlc3NvclN0YXRlKSk7CkBAIC0xMjgsMTUgKzEzMiwyNSBAQCBSZWFkRGF0 YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAogCQkJCQljb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCiAJCQkJCVJlYWRGdW5jIHJlYWRGKQogewot CWlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQot CQlSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBSCwgcmVhZEYpOwotCWlmIChjb21wcmVzc2lvbl9z cGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCXN3aXRjaCAoY29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0pCiAJeworCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlS ZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBSCwgcmVhZEYpOworCQkJYnJlYWs7CisJCWNhc2UgUEdf Q09NUFJFU1NJT05fR1pJUDoKICNpZmRlZiBIQVZFX0xJQloKLQkJUmVhZERhdGFGcm9tQXJjaGl2 ZVpsaWIoQUgsIHJlYWRGKTsKKwkJCVJlYWREYXRhRnJvbUFyY2hpdmVabGliKEFILCByZWFkRik7 CiAjZWxzZQotCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CisJCQlw Z19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMi LAorCQkJCQkiZ3ppcCIpOwogI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lP Tl9MWjQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBv cnRlZCIsICJMWjQiKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CisJ CQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJa U1REIik7CisJCQlicmVhazsKIAl9CiB9CiAKQEAgLTE0OSwyMCArMTYzLDIyIEBAIFdyaXRlRGF0 YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKIHsKIAlz d2l0Y2ggKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKIAl7CisJCWNhc2UgUEdfQ09N UFJFU1NJT05fTk9ORToKKwkJCVdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQUgsIGNzLCBkYXRhLCBk TGVuKTsKKwkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFW RV9MSUJaCiAJCQlXcml0ZURhdGFUb0FyY2hpdmVabGliKEFILCBjcywgZGF0YSwgZExlbik7CiAj ZWxzZQotCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOworCQkJcGdf ZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwK KwkJCQkJImd6aXAiKTsKICNlbmRpZgogCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05f Tk9ORToKLQkJCVdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQUgsIGNzLCBkYXRhLCBkTGVuKTsKLQkJ CWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKLQkJCS8qIGZhbGx0aHJvdWdoICov CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIs ICJMWjQiKTsKKwkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19m YXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKKwkJCXBnX2ZhdGFsKCJjb21wcmVz c2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsKIAkJCWJyZWFrOwog CX0KIH0KQEAgLTE3MywxMCArMTg5LDI2IEBAIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKIHZvaWQKIEVuZENvbXByZXNzb3IoQXJjaGl2 ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCiB7CisJc3dpdGNoIChjcy0+Y29tcHJl c3Npb25fc3BlYy5hbGdvcml0aG0pCisJeworCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CisJ CQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElCWgot CWlmIChjcy0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJ UCkKLQkJRW5kQ29tcHJlc3NvclpsaWIoQUgsIGNzKTsKKwkJCUVuZENvbXByZXNzb3JabGliKEFI LCBjcyk7CisjZWxzZQorCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBj b21wcmVzc2lvbiB3aXRoICVzIiwKKwkJCQkJImd6aXAiKTsKICNlbmRpZgorCQkJYnJlYWs7CisJ CWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGgg JXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7CisJCQlicmVhazsKKwkJY2FzZSBQR19D T01QUkVTU0lPTl9aU1REOgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90 IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOworCQkJYnJlYWs7CisJfQorCiAJZnJlZShjcyk7CiB9 CiAKQEAgLTM5MSwxMCArNDIzLDggQEAgV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKICAqLwogc3RydWN0IGNmcAogewotCUZJTEUJ ICAgKnVuY29tcHJlc3NlZGZwOwotI2lmZGVmIEhBVkVfTElCWgotCWd6RmlsZQkJY29tcHJlc3Nl ZGZwOwotI2VuZGlmCisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj OworCXZvaWQJICAgKmZwOwogfTsKIAogI2lmZGVmIEhBVkVfTElCWgpAQCAtNDkwLDEyNyArNTIw LDIwMyBAQCBjZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwK IH0KIAogLyoKLSAqIE9wZW5zIGZpbGUgJ3BhdGgnIGluICdtb2RlJy4gSWYgY29tcHJlc3Npb24g aXMgR1pJUCwgdGhlIGZpbGUKLSAqIGlzIG9wZW5lZCB3aXRoIGxpYnogZ3pvcGVuKCksIG90aGVy d2lzZSB3aXRoIHBsYWluIGZvcGVuKCkuCisgKiBUaGlzIGlzIHRoZSB3b3JraG9yc2UgZm9yIGNm b3BlbigpIG9yIGNmZG9wZW4oKS4gSXQgb3BlbnMgZmlsZSAncGF0aCcgb3IKKyAqIGFzc29jaWF0 ZXMgYSBzdHJlYW0gJ2ZkJywgaWYgJ2ZkJyBpcyBhIHZhbGlkIGRlc2NyaXB0b3IsIGluICdtb2Rl Jy4gVGhlCisgKiBkZXNjcmlwdG9yIGlzIG5vdCBkdXAnZWQgYW5kIGl0IGlzIHRoZSBjYWxsZXIn cyByZXNwb25zaWJpbGl0eSB0byBkbyBzby4KKyAqIFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhh dCB0aGUgJ2NvbXByZXNzX2FsZ29yaXRobScgaXMgc3VwcG9ydGVkIGJ5IHRoZQorICogY3VycmVu dCBidWlsZC4KICAqCiAgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNv ZGUgaW4gZXJybm8uCiAgKi8KLWNmcCAqCi1jZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qg Y2hhciAqbW9kZSwKLQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpCitzdGF0aWMgY2ZwICoKK2Nmb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRo LCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKQogewogCWNmcAkJICAgKmZwID0gcGdfbWFsbG9jKHNpemVvZihj ZnApKTsKIAotCWlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lP Tl9HWklQKQorCWZwLT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKKworCXN3 aXRjaCAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJewotI2lmZGVmIEhBVkVfTElCWgot CQlpZiAoY29tcHJlc3Npb25fc3BlYy5sZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pCi0J CXsKLQkJCS8qIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNvbXByZXNzaW9uIGxldmVsLCBzbyB0ZWxs IHpsaWIgdG8gdXNlIGl0ICovCi0JCQljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMyXTsKKwkJY2Fz ZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJaWYgKGZkID49IDApCisJCQkJZnAtPmZwID0gZmRv cGVuKGZkLCBtb2RlKTsKKwkJCWVsc2UKKwkJCQlmcC0+ZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsK KwkJCWlmIChmcC0+ZnAgPT0gTlVMTCkKKwkJCXsKKwkJCQlmcmVlX2tlZXBfZXJybm8oZnApOwor CQkJCWZwID0gTlVMTDsKKwkJCX0KIAotCQkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6 ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCi0JCQkJCSBtb2RlLCBjb21wcmVzc2lvbl9z cGVjLmxldmVsKTsKLQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21w cmVzc2lvbik7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWws IGp1c3QgdXNlIHRoZSB6bGliIGRlZmF1bHQgKi8KLQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9w ZW4ocGF0aCwgbW9kZSk7Ci0JCX0KKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0da SVA6CisjaWZkZWYgSEFWRV9MSUJaCisJCQlpZiAoY29tcHJlc3Npb25fc3BlYy5sZXZlbCAhPSBa X0RFRkFVTFRfQ09NUFJFU1NJT04pCisJCQl7CisJCQkJLyoKKwkJCQkgKiB1c2VyIGhhcyBzcGVj aWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZQorCQkJCSAqIGl0 CisJCQkJICovCisJCQkJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07CisKKwkJCQlzbnByaW50 Zihtb2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKKwkJ CQkJCSBtb2RlLCBjb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwkJCQlpZiAoZmQgPj0gMCkKKwkJ CQkJZnAtPmZwID0gZ3pkb3BlbihmZCwgbW9kZV9jb21wcmVzc2lvbik7CisJCQkJZWxzZQorCQkJ CQlmcC0+ZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJLyogZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBk ZWZhdWx0ICovCisJCQkJaWYgKGZkID49IDApCisJCQkJCWZwLT5mcCA9IGd6ZG9wZW4oZmQsIG1v ZGUpOworCQkJCWVsc2UKKwkJCQkJZnAtPmZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOworCQkJfQog Ci0JCWZwLT51bmNvbXByZXNzZWRmcCA9IE5VTEw7Ci0JCWlmIChmcC0+Y29tcHJlc3NlZGZwID09 IE5VTEwpCi0JCXsKLQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0K KwkJCWlmIChmcC0+ZnAgPT0gTlVMTCkKKwkJCXsKKwkJCQlmcmVlX2tlZXBfZXJybm8oZnApOwor CQkJCWZwID0gTlVMTDsKKwkJCX0KICNlbHNlCi0JCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6 bGliIHN1cHBvcnQiKTsKLSNlbmRpZgotCX0KLQllbHNlCi0JewotI2lmZGVmIEhBVkVfTElCWgot CQlmcC0+Y29tcHJlc3NlZGZwID0gTlVMTDsKKwkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMg bm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCisJCQkJCSJnemlwIik7CiAjZW5kaWYK LQkJZnAtPnVuY29tcHJlc3NlZGZwID0gZm9wZW4ocGF0aCwgbW9kZSk7Ci0JCWlmIChmcC0+dW5j b21wcmVzc2VkZnAgPT0gTlVMTCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZw ID0gTlVMTDsKLQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJ cGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0 Iik7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgorCQkJcGdfZmF0YWwo ImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOworCQkJ YnJlYWs7CiAJfQogCiAJcmV0dXJuIGZwOwogfQogCitjZnAgKgorY2ZvcGVuKGNvbnN0IGNoYXIg KnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXJldHVybiBjZm9wZW5faW50ZXJuYWwocGF0aCwg LTEsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOworfQorCitjZnAgKgorY2Zkb3BlbihpbnQgZmQs IGNvbnN0IGNoYXIgKm1vZGUsCisJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKE5VTEwsIGZkLCBtb2Rl LCBjb21wcmVzc2lvbl9zcGVjKTsKK30KIAogaW50CiBjZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6 ZSwgY2ZwICpmcCkKIHsKLQlpbnQJCQlyZXQ7CisJaW50CQkJcmV0ID0gMDsKIAogCWlmIChzaXpl ID09IDApCiAJCXJldHVybiAwOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVz c2VkZnApCisJc3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJewotCQly ZXQgPSBnenJlYWQoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQkJaWYgKHJldCAhPSBz aXplICYmICFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkKLQkJewotCQkJaW50CQkJZXJybnVtOwot CQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcihmcC0+Y29tcHJlc3NlZGZwLCAmZXJybnVt KTsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZnJlYWQocHRyLCAxLCBz aXplLCBmcC0+ZnApOworCQkJaWYgKHJldCAhPSBzaXplICYmICFmZW9mKGZwLT5mcCkpCisJCQkJ UkVBRF9FUlJPUl9FWElUKGZwLT5mcCk7CiAKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBm cm9tIGlucHV0IGZpbGU6ICVzIiwKLQkJCQkJIGVycm51bSA9PSBaX0VSUk5PID8gc3RyZXJyb3Io ZXJybm8pIDogZXJybXNnKTsKLQkJfQotCX0KLQllbHNlCisJCQlicmVhazsKKwkJY2FzZSBQR19D T01QUkVTU0lPTl9HWklQOgorI2lmZGVmIEhBVkVfTElCWgorCQkJcmV0ID0gZ3pyZWFkKGZwLT5m cCwgcHRyLCBzaXplKTsKKwkJCWlmIChyZXQgIT0gc2l6ZSAmJiAhZ3plb2YoZnAtPmZwKSkKKwkJ CXsKKwkJCQlpbnQJCQllcnJudW07CisJCQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcihm cC0+ZnAsICZlcnJudW0pOworCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5w dXQgZmlsZTogJXMiLAorCQkJCQkJIGVycm51bSA9PSBaX0VSUk5PID8gc3RyZXJyb3IoZXJybm8p IDogZXJybXNnKTsKKwkJCX0KKyNlbHNlCisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5v dCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAorCQkJCQkiZ3ppcCIpOwogI2VuZGlmCi0J ewotCQlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRmcCk7Ci0JCWlm IChyZXQgIT0gc2l6ZSAmJiAhZmVvZihmcC0+dW5jb21wcmVzc2VkZnApKQotCQkJUkVBRF9FUlJP Ul9FWElUKGZwLT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVT U0lPTl9MWjQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1 cHBvcnRlZCIsICJMWjQiKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6 CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIs ICJaU1REIik7CisJCQlicmVhazsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmd3Jp dGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKIHsKKwlpbnQJCQlyZXQgPSAw OworCisJc3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCisJeworCQljYXNl IFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlyZXQgPSBmd3JpdGUocHRyLCAxLCBzaXplLCBmcC0+ ZnApOworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKICNpZmRlZiBIQVZF X0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6d3JpdGUoZnAtPmNvbXBy ZXNzZWRmcCwgcHRyLCBzaXplKTsKLQllbHNlCisJCQlyZXQgPSBnendyaXRlKGZwLT5mcCwgcHRy LCBzaXplKTsKKyNlbHNlCisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0 IGNvbXByZXNzaW9uIHdpdGggJXMiLAorCQkJCQkiZ3ppcCIpOwogI2VuZGlmCi0JCXJldHVybiBm d3JpdGUocHRyLCAxLCBzaXplLCBmcC0+dW5jb21wcmVzc2VkZnApOworCQkJYnJlYWs7CisJCWNh c2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMg aXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01Q UkVTU0lPTl9aU1REOgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHll dCBzdXBwb3J0ZWQiLCAiWlNURCIpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKIH0K IAogaW50CiBjZmdldGMoY2ZwICpmcCkKIHsKLQlpbnQJCQlyZXQ7CisJaW50CQkJcmV0ID0gMDsK IAotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQorCXN3aXRjaCAoZnAt PmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQogCXsKLQkJcmV0ID0gZ3pnZXRjKGZwLT5jb21w cmVzc2VkZnApOwotCQlpZiAocmV0ID09IEVPRikKLQkJewotCQkJaWYgKCFnemVvZihmcC0+Y29t cHJlc3NlZGZwKSkKLQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxl OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQllbHNlCi0JCQkJcGdfZmF0YWwoImNvdWxkIG5v dCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKLQkJfQotCX0KLQllbHNlCisJ CWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZnZXRjKGZwLT5mcCk7CisJCQlp ZiAocmV0ID09IEVPRikKKwkJCQlSRUFEX0VSUk9SX0VYSVQoZnAtPmZwKTsKKworCQkJYnJlYWs7 CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9 IGd6Z2V0YygoZ3pGaWxlKSBmcC0+ZnApOworCQkJaWYgKHJldCA9PSBFT0YpCisJCQl7CisJCQkJ aWYgKCFnemVvZihmcC0+ZnApKQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBp bnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZWxzZQorCQkJCQlwZ19mYXRh bCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCQkJfQor I2Vsc2UKKwkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Np b24gd2l0aCAlcyIsCisJCQkJCSJnemlwIik7CiAjZW5kaWYKLQl7Ci0JCXJldCA9IGZnZXRjKGZw LT51bmNvbXByZXNzZWRmcCk7Ci0JCWlmIChyZXQgPT0gRU9GKQotCQkJUkVBRF9FUlJPUl9FWElU KGZwLT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9M WjQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRl ZCIsICJMWjQiKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CisJCQlw Z19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1RE Iik7CisJCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjE5LDY1ICs3MjUsMTE5IEBA IGNmZ2V0YyhjZnAgKmZwKQogY2hhciAqCiBjZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQg bGVuKQogeworCWNoYXIJICAgKnJldCA9IE5VTEw7CisKKwlzd2l0Y2ggKGZwLT5jb21wcmVzc2lv bl9zcGVjLmFsZ29yaXRobSkKKwl7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJl dCA9IGZnZXRzKGJ1ZiwgbGVuLCBmcC0+ZnApOworCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01Q UkVTU0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQot CQlyZXR1cm4gZ3pnZXRzKGZwLT5jb21wcmVzc2VkZnAsIGJ1ZiwgbGVuKTsKLQllbHNlCisJCQly ZXQgPSBnemdldHMoZnAtPmZwLCBidWYsIGxlbik7CisjZWxzZQorCQkJcGdfZmF0YWwoInRoaXMg YnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwKKwkJCQkJImd6aXAi KTsKICNlbmRpZgotCQlyZXR1cm4gZmdldHMoYnVmLCBsZW4sIGZwLT51bmNvbXByZXNzZWRmcCk7 CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CisJCQlwZ19mYXRhbCgiY29t cHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKKwkJCWJyZWFr OworCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24g d2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7CisJCQlicmVhazsKKwl9CisK KwlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmY2xvc2UoY2ZwICpmcCkKIHsKLQlpbnQJCQlyZXN1 bHQ7CisJaW50CQkJcmV0ID0gMDsKIAogCWlmIChmcCA9PSBOVUxMKQogCXsKIAkJZXJybm8gPSBF QkFERjsKIAkJcmV0dXJuIEVPRjsKIAl9Ci0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21w cmVzc2VkZnApCisKKwlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKIAl7 Ci0JCXJlc3VsdCA9IGd6Y2xvc2UoZnAtPmNvbXByZXNzZWRmcCk7Ci0JCWZwLT5jb21wcmVzc2Vk ZnAgPSBOVUxMOwotCX0KLQllbHNlCisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJl dCA9IGZjbG9zZShmcC0+ZnApOworCQkJZnAtPmZwID0gTlVMTDsKKworCQkJYnJlYWs7CisJCWNh c2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9IGd6Y2xv c2UoZnAtPmZwKTsKKwkJCWZwLT5mcCA9IE5VTEw7CisjZWxzZQorCQkJcGdfZmF0YWwoInRoaXMg YnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwKKwkJCQkJImd6aXAi KTsKICNlbmRpZgotCXsKLQkJcmVzdWx0ID0gZmNsb3NlKGZwLT51bmNvbXByZXNzZWRmcCk7Ci0J CWZwLT51bmNvbXByZXNzZWRmcCA9IE5VTEw7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVT U0lPTl9MWjQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1 cHBvcnRlZCIsICJMWjQiKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6 CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIs ICJaU1REIik7CisJCQlicmVhazsKIAl9CisKIAlmcmVlX2tlZXBfZXJybm8oZnApOwogCi0JcmV0 dXJuIHJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmZW9mKGNmcCAqZnApCiB7CisJ aW50CQkJcmV0ID0gMDsKKworCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht KQorCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZmVvZihmcC0+ZnAp OworCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lmZGVmIEhBVkVf TElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3plb2YoZnAtPmNvbXByZXNz ZWRmcCk7Ci0JZWxzZQorCQkJcmV0ID0gZ3plb2YoZnAtPmZwKTsKKyNlbHNlCisJCQlwZ19mYXRh bCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAorCQkJ CQkiZ3ppcCIpOwogI2VuZGlmCi0JCXJldHVybiBmZW9mKGZwLT51bmNvbXByZXNzZWRmcCk7CisJ CQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CisJCQlwZ19mYXRhbCgiY29tcHJl c3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKKwkJCWJyZWFrOwor CQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0 aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7CisJCQlicmVhazsKKwl9CisKKwly ZXR1cm4gcmV0OwogfQogCiBjb25zdCBjaGFyICoKIGdldF9jZnBfZXJyb3IoY2ZwICpmcCkKIHsK LSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKwlpZiAoZnAtPmNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJeworI2lmZGVm IEhBVkVfTElCWgogCQlpbnQJCQllcnJudW07Ci0JCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJy b3IoZnAtPmNvbXByZXNzZWRmcCwgJmVycm51bSk7CisJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6 ZXJyb3IoZnAtPmZwLCAmZXJybnVtKTsKIAogCQlpZiAoZXJybnVtICE9IFpfRVJSTk8pCiAJCQly ZXR1cm4gZXJybXNnOwotCX0KKyNlbHNlCisJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90 IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7CiAjZW5kaWYKKwl9CisKIAly ZXR1cm4gc3RyZXJyb3IoZXJybm8pOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMKaW5kZXggN2Y3YTBmMWNlNy4uZmI5NDMxN2FkOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYwpAQCAtMzEsNiArMzEsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24v c3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJkdW1wdXRpbHMu aCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJsaWIvc3Ry aW5naW5mby5oIgpAQCAtNDMsMTMgKzQ0LDYgQEAKICNkZWZpbmUgVEVYVF9EVU1QX0hFQURFUiAi LS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIgogI2RlZmluZSBURVhUX0RV TVBBTExfSEVBREVSICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0t XG5cbiIKIAotLyogc3RhdGUgbmVlZGVkIHRvIHNhdmUvcmVzdG9yZSBhbiBhcmNoaXZlJ3Mgb3V0 cHV0IHRhcmdldCAqLwotdHlwZWRlZiBzdHJ1Y3QgX291dHB1dENvbnRleHQKLXsKLQl2b2lkCSAg ICpPRjsKLQlpbnQJCQlnek91dDsKLX0gT3V0cHV0Q29udGV4dDsKLQogLyoKICAqIFN0YXRlIGZv ciB0cmFja2luZyBUb2NFbnRyeXMgdGhhdCBhcmUgcmVhZHkgdG8gcHJvY2VzcyBkdXJpbmcgYSBw YXJhbGxlbAogICogcmVzdG9yZS4gIChUaGlzIHVzZWQgdG8gYmUgYSBsaXN0LCBhbmQgd2Ugc3Rp bGwgY2FsbCBpdCB0aGF0LCB0aG91Z2ggbm93CkBAIC0xMDEsOCArOTUsOCBAQCBzdGF0aWMgdm9p ZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0 YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3Rh dGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFt ZSwKIAkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMpOwotc3RhdGljIE91dHB1dENvbnRleHQgU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7 Ci1zdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBPdXRwdXRDb250 ZXh0IHNhdmVkQ29udGV4dCk7CitzdGF0aWMgY2ZwICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUg KkFIKTsKK3N0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAq c2F2ZWRPdXRwdXQpOwogCiBzdGF0aWMgaW50CXJlc3RvcmVfdG9jX2VudHJ5KEFyY2hpdmVIYW5k bGUgKkFILCBUb2NFbnRyeSAqdGUsIGJvb2wgaXNfcGFyYWxsZWwpOwogc3RhdGljIHZvaWQgcmVz dG9yZV90b2NfZW50cmllc19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFILApAQCAtMjc3LDExICsy NzEsOCBAQCBDbG9zZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCUFILT5DbG9zZVB0cihBSCk7CiAK IAkvKiBDbG9zZSB0aGUgb3V0cHV0ICovCi0JZXJybm8gPSAwOwkJCQkJLyogaW4gY2FzZSBnemNs b3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQotCQlyZXMgPSBHWkNMT1NF KEFILT5PRik7Ci0JZWxzZSBpZiAoQUgtPk9GICE9IHN0ZG91dCkKLQkJcmVzID0gZmNsb3NlKEFI LT5PRik7CisJZXJybm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChyZXMg IT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAg LTM2Miw4ICszNTMsOSBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJQXJjaGl2ZUhh bmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQg PSBBSC0+cHVibGljLnJvcHQ7CiAJYm9vbAkJcGFyYWxsZWxfbW9kZTsKKwlib29sCQlzdXBwb3J0 c19jb21wcmVzc2lvbjsKIAlUb2NFbnRyeSAgICp0ZTsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwlj ZnAJCSAgICpzYXY7CiAKIAlBSC0+c3RhZ2UgPSBTVEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTM5 MSwxNyArMzgzLDI0IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkvKgogCSAqIE1h a2Ugc3VyZSB3ZSB3b24ndCBuZWVkIChkZSljb21wcmVzc2lvbiB3ZSBoYXZlbid0IGdvdAogCSAq LwotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht ID09IFBHX0NPTVBSRVNTSU9OX0daSVAgJiYKKwlzdXBwb3J0c19jb21wcmVzc2lvbiA9IHRydWU7 CisJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9O T05FICYmCisJCUFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lP Tl9HWklQICYmCiAJCUFILT5QcmludFRvY0RhdGFQdHIgIT0gTlVMTCkKIAl7CiAJCWZvciAodGUg PSBBSC0+dG9jLT5uZXh0OyB0ZSAhPSBBSC0+dG9jOyB0ZSA9IHRlLT5uZXh0KQogCQl7CiAJCQlp ZiAodGUtPmhhZER1bXBlciAmJiAodGUtPnJlcXMgJiBSRVFfREFUQSkgIT0gMCkKLQkJCQlwZ19m YXRhbCgiY2Fubm90IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9u IG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CisJCQl7CisjaWZuZGVmIEhB VkVfTElCWgorCQkJCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09N UFJFU1NJT05fR1pJUCkKKwkJCQkJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxzZTsKKyNlbmRp ZgorCQkJCWlmIChzdXBwb3J0c19jb21wcmVzc2lvbiA9PSBmYWxzZSkKKwkJCQkJcGdfZmF0YWwo ImNhbm5vdCByZXN0b3JlIGZyb20gY29tcHJlc3NlZCBhcmNoaXZlIChjb21wcmVzc2lvbiBub3Qg c3VwcG9ydGVkIGluIHRoaXMgaW5zdGFsbGF0aW9uKSIpOworCQkJfQogCQl9CiAJfQotI2VuZGlm CiAKIAkvKgogCSAqIFByZXBhcmUgaW5kZXggYXJyYXlzLCBzbyB3ZSBjYW4gYXNzdW1lIHdlIGhh dmUgdGhlbSB0aHJvdWdob3V0IHJlc3RvcmUuCkBAIC0xMTI4LDcgKzExMjcsNyBAQCBQcmludFRP Q1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCVRvY0VudHJ5ICAgKnRlOwogCXBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gb3V0X2NvbXByZXNzaW9uX3NwZWMgPSB7MH07CiAJdGVTZWN0aW9uCWN1clNl Y3Rpb247Ci0JT3V0cHV0Q29udGV4dCBzYXY7CisJY2ZwCQkgICAqc2F2OwogCWNvbnN0IGNoYXIg KmZtdE5hbWU7CiAJY2hhcgkJc3RhbXBfc3RyWzY0XTsKIApAQCAtMTUwMyw1OCArMTUwMiwzMiBA QCBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpm aWxlbmFtZSwKIAkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpCiB7Ci0JaW50CQkJZm47CisJY29uc3QgY2hhciAqbW9kZTsKKwlpbnQJCQlmbiA9IC0x OwogCiAJaWYgKGZpbGVuYW1lKQogCXsKIAkJaWYgKHN0cmNtcChmaWxlbmFtZSwgIi0iKSA9PSAw KQogCQkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKLQkJZWxzZQotCQkJZm4gPSAtMTsKIAl9CiAJZWxz ZSBpZiAoQUgtPkZIKQogCQlmbiA9IGZpbGVubyhBSC0+RkgpOwogCWVsc2UgaWYgKEFILT5mU3Bl YykKIAl7Ci0JCWZuID0gLTE7CiAJCWZpbGVuYW1lID0gQUgtPmZTcGVjOwogCX0KIAllbHNlCiAJ CWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQkvKiBJZiBjb21wcmVzc2lvbiBleHBsaWNpdGx5IHJl cXVlc3RlZCwgdXNlIGd6b3BlbiAqLwotI2lmZGVmIEhBVkVfTElCWgotCWlmIChjb21wcmVzc2lv bl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCXsKLQkJY2hhcgkJZm1v ZGVbMTRdOworCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKKwkJbW9kZSA9IFBHX0JJ TkFSWV9BOworCWVsc2UKKwkJbW9kZSA9IFBHX0JJTkFSWV9XOwogCi0JCS8qIERvbid0IHVzZSBQ R19CSU5BUllfeCBzaW5jZSB0aGlzIGlzIHpsaWIgKi8KLQkJc3ByaW50ZihmbW9kZSwgIndiJWQi LCBjb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKLQkJaWYgKGZuID49IDApCi0JCQlBSC0+T0YgPSBn emRvcGVuKGR1cChmbiksIGZtb2RlKTsKLQkJZWxzZQotCQkJQUgtPk9GID0gZ3pvcGVuKGZpbGVu YW1lLCBmbW9kZSk7Ci0JCUFILT5nek91dCA9IDE7Ci0JfQorCWlmIChmbiA+PSAwKQorCQlBSC0+ T0YgPSBjZmRvcGVuKGR1cChmbiksIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwogCWVsc2UKLSNl bmRpZgotCXsJCQkJCQkJLyogVXNlIGZvcGVuICovCi0JCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9k ZUFwcGVuZCkKLQkJewotCQkJaWYgKGZuID49IDApCi0JCQkJQUgtPk9GID0gZmRvcGVuKGR1cChm biksIFBHX0JJTkFSWV9BKTsKLQkJCWVsc2UKLQkJCQlBSC0+T0YgPSBmb3BlbihmaWxlbmFtZSwg UEdfQklOQVJZX0EpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYgKGZuID49IDApCi0JCQkJQUgt Pk9GID0gZmRvcGVuKGR1cChmbiksIFBHX0JJTkFSWV9XKTsKLQkJCWVsc2UKLQkJCQlBSC0+T0Yg PSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwotCQl9Ci0JCUFILT5nek91dCA9IDA7Ci0J fQorCQlBSC0+T0YgPSBjZm9wZW4oZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwog CiAJaWYgKCFBSC0+T0YpCiAJewpAQCAtMTU2NSwzMyArMTUzOCwyNCBAQCBTZXRPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCX0KIH0KIAotc3RhdGljIE91 dHB1dENvbnRleHQKK3N0YXRpYyBjZnAgKgogU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkK IHsKLQlPdXRwdXRDb250ZXh0IHNhdjsKLQotCXNhdi5PRiA9IEFILT5PRjsKLQlzYXYuZ3pPdXQg PSBBSC0+Z3pPdXQ7Ci0KLQlyZXR1cm4gc2F2OworCXJldHVybiAoY2ZwICopIEFILT5PRjsKIH0K IAogc3RhdGljIHZvaWQKLVJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIE91dHB1dENv bnRleHQgc2F2ZWRDb250ZXh0KQorUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2Zw ICpzYXZlZE91dHB1dCkKIHsKIAlpbnQJCQlyZXM7CiAKLQllcnJubyA9IDA7CQkJCQkvKiBpbiBj YXNlIGd6Y2xvc2UoKSBkb2Vzbid0IHNldCBpdCAqLwotCWlmIChBSC0+Z3pPdXQpCi0JCXJlcyA9 IEdaQ0xPU0UoQUgtPk9GKTsKLQllbHNlCi0JCXJlcyA9IGZjbG9zZShBSC0+T0YpOworCWVycm5v ID0gMDsKKwlyZXMgPSBjZmNsb3NlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2Zh dGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CiAKLQlBSC0+Z3pPdXQgPSBz YXZlZENvbnRleHQuZ3pPdXQ7Ci0JQUgtPk9GID0gc2F2ZWRDb250ZXh0Lk9GOworCUFILT5PRiA9 IHNhdmVkT3V0cHV0OwogfQogCiAKQEAgLTE3MTUsMjIgKzE2NzksMTcgQEAgYWh3cml0ZShjb25z dCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIEFyY2hpdmVIYW5kbGUgKkFI KQogCiAJCWJ5dGVzX3dyaXR0ZW4gPSBzaXplICogbm1lbWI7CiAJfQotCWVsc2UgaWYgKEFILT5n ek91dCkKLQkJYnl0ZXNfd3JpdHRlbiA9IEdaV1JJVEUocHRyLCBzaXplLCBubWVtYiwgQUgtPk9G KTsKIAllbHNlIGlmIChBSC0+Q3VzdG9tT3V0UHRyKQogCQlieXRlc193cml0dGVuID0gQUgtPkN1 c3RvbU91dFB0cihBSCwgcHRyLCBzaXplICogbm1lbWIpOwogCisJLyoKKwkgKiBJZiB3ZSdyZSBk b2luZyBhIHJlc3RvcmUsIGFuZCBpdCdzIGRpcmVjdCB0byBEQiwgYW5kIHdlJ3JlIGNvbm5lY3Rl ZAorCSAqIHRoZW4gc2VuZCBpdCB0byB0aGUgREIuCisJICovCisJZWxzZSBpZiAoUmVzdG9yaW5n VG9EQihBSCkpCisJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVjdXRlU3FsQ29tbWFuZEJ1ZigmQUgtPnB1 YmxpYywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXplICogbm1lbWIpOwogCWVsc2UKLQl7Ci0JCS8q Ci0JCSAqIElmIHdlJ3JlIGRvaW5nIGEgcmVzdG9yZSwgYW5kIGl0J3MgZGlyZWN0IHRvIERCLCBh bmQgd2UncmUKLQkJICogY29ubmVjdGVkIHRoZW4gc2VuZCBpdCB0byB0aGUgREIuCi0JCSAqLwot CQlpZiAoUmVzdG9yaW5nVG9EQihBSCkpCi0JCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNxbENv bW1hbmRCdWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1iKTsK LQkJZWxzZQotCQkJYnl0ZXNfd3JpdHRlbiA9IGZ3cml0ZShwdHIsIHNpemUsIG5tZW1iLCBBSC0+ T0YpICogc2l6ZTsKLQl9CisJCWJ5dGVzX3dyaXR0ZW4gPSBjZndyaXRlKHB0ciwgc2l6ZSAqIG5t ZW1iLCBBSC0+T0YpOwogCiAJaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQogCQlX UklURV9FUlJPUl9FWElUOwpAQCAtMjIxOSw2ICsyMTc4LDcgQEAgX2FsbG9jQUgoY29uc3QgY2hh ciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCQkgU2V0dXBXb3JrZXJQdHJU eXBlIHNldHVwV29ya2VyUHRyKQogewogCUFyY2hpdmVIYW5kbGUgKkFIOworCXBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNzX3NwZWMgPSB7MH07CiAKIAlwZ19sb2dfZGVidWco ImFsbG9jYXRpbmcgQUggZm9yICVzLCBmb3JtYXQgJWQiLAogCQkJCSBGaWxlU3BlYyA/IEZpbGVT cGVjIDogIihzdGRpbykiLCBmbXQpOwpAQCAtMjI3Miw4ICsyMjMyLDggQEAgX2FsbG9jQUgoY29u c3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCW1lbXNldCgmKEFI LT5zcWxwYXJzZSksIDAsIHNpemVvZihBSC0+c3FscGFyc2UpKTsKIAogCS8qIE9wZW4gc3Rkb3V0 IHdpdGggbm8gY29tcHJlc3Npb24gZm9yIEFIIG91dHB1dCBoYW5kbGUgKi8KLQlBSC0+Z3pPdXQg PSAwOwotCUFILT5PRiA9IHN0ZG91dDsKKwlvdXRfY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQ R19DT01QUkVTU0lPTl9OT05FOworCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZpbGVubyhzdGRvdXQp KSwgUEdfQklOQVJZX0EsIG91dF9jb21wcmVzc19zcGVjKTsKIAogCS8qCiAJICogT24gV2luZG93 cywgd2UgbmVlZCB0byB1c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24tdGV4dCBmaWxl cywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCBmNzI0NDZlZDViLi40NzI1 ZTQ5NzQ3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zMiwzMCArMzIs NiBAQAogCiAjZGVmaW5lIExPQkJVRlNJWkUgMTYzODQKIAotI2lmZGVmIEhBVkVfTElCWgotI2lu Y2x1ZGUgPHpsaWIuaD4KLSNkZWZpbmUgR1pDTE9TRShmaCkgZ3pjbG9zZShmaCkKLSNkZWZpbmUg R1pXUklURShwLCBzLCBuLCBmaCkgZ3p3cml0ZShmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBH WlJFQUQocCwgcywgbiwgZmgpIGd6cmVhZChmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBHWkVP RihmaCkJZ3plb2YoZmgpCi0jZWxzZQotI2RlZmluZSBHWkNMT1NFKGZoKSBmY2xvc2UoZmgpCi0j ZGVmaW5lIEdaV1JJVEUocCwgcywgbiwgZmgpIChmd3JpdGUocCwgcywgbiwgZmgpICogKHMpKQot I2RlZmluZSBHWlJFQUQocCwgcywgbiwgZmgpIGZyZWFkKHAsIHMsIG4sIGZoKQotI2RlZmluZSBH WkVPRihmaCkJZmVvZihmaCkKLS8qIHRoaXMgaXMganVzdCB0aGUgcmVkZWZpbml0aW9uIG9mIGEg bGlieiBjb25zdGFudCAqLwotI2RlZmluZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04gKC0xKQotCi10 eXBlZGVmIHN0cnVjdCBfel9zdHJlYW0KLXsKLQl2b2lkCSAgICpuZXh0X2luOwotCXZvaWQJICAg Km5leHRfb3V0OwotCXNpemVfdAkJYXZhaWxfaW47Ci0Jc2l6ZV90CQlhdmFpbF9vdXQ7Ci19IHpf c3RyZWFtOwotdHlwZWRlZiB6X3N0cmVhbSAqel9zdHJlYW1wOwotI2VuZGlmCi0KIC8qIERhdGEg YmxvY2sgdHlwZXMgKi8KICNkZWZpbmUgQkxLX0RBVEEgMQogI2RlZmluZSBCTEtfQkxPQlMgMwpA QCAtMzE5LDggKzI5NSw3IEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRsZQogCiAJY2hhcgkgICAqZlNw ZWM7CQkJLyogQXJjaGl2ZSBGaWxlIFNwZWMgKi8KIAlGSUxFCSAgICpGSDsJCQkJLyogR2VuZXJh bCBwdXJwb3NlIGZpbGUgaGFuZGxlICovCi0Jdm9pZAkgICAqT0Y7Ci0JaW50CQkJZ3pPdXQ7CQkJ LyogT3V0cHV0IGZpbGUgKi8KKwl2b2lkCSAgICpPRjsJCQkJLyogT3V0cHV0IGZpbGUgKi8KIAog CXN0cnVjdCBfdG9jRW50cnkgKnRvYzsJCS8qIEhlYWRlciBvZiBjaXJjdWxhciBsaXN0IG9mIFRP QyBlbnRyaWVzICovCiAJaW50CQkJdG9jQ291bnQ7CQkvKiBOdW1iZXIgb2YgVE9DIGVudHJpZXMg Ki8KLS0gCjIuMzQuMQoK --b1_SYi4uvFhqzbxbjsoeasreueLGXmmrrLQb2ygYpVzc Content-Type: text/x-patch; name=v17-0002-Introduce-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v17-0002-Introduce-Compressor-API-in-pg_dump.patch RnJvbSBmNzkxNWU1ZGNiYjQ0ZjMyM2YxM2QzMzIxMzcyMzQ5MDE3NGEzYzFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgNiBEZWMgMjAyMiAxNTo0MjoxMSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjE3 IDIvM10gSW50cm9kdWNlIENvbXByZXNzb3IgQVBJIGluIHBnX2R1bXAKClRoZSBwdXJwb3NlIG9m IHRoaXMgQVBJIGlzIHRvIGFsbG93IGZvciBlYXNpZXIgYWRkaXRpb24gb2YgbmV3IGNvbXByZXNz aW9uCm1ldGhvZHMuIENvbXByZXNzRmlsZUhhbmRsZSBpcyBzdWJzdGl0dXRpbmcgdGhlIGNmcCog ZmFtaWx5IG9mIGZ1bmN0aW9ucyB1bmRlciBhCnN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycyBm b3Igb3BlbmluZywgd3JpdGluZywgZXRjLiBUaGUgaW1wbGVtZW50b3Igb2YgYSBuZXcKY29tcHJl c3Npb24gbWV0aG9kIGlzIG5vdyBhYmxlIHRvICJzaW1wbHkiIGp1c3QgYWRkIHRob3NlIGRlZmlu aXRpb25zLgoKQ3VzdG9tIGNvbXByZXNzZWQgYXJjaGl2ZXMgbm93IG5lZWQgdG8gc3RvcmUgdGhl IGNvbXByZXNzaW9uIGFsZ29yaXRobSBpbiB0aGVpcgpoZWFkZXIuIFRoaXMgcmVxdWlyZXMgYSBi dW1wIGluIHRoZSB2ZXJzaW9uIG51bWJlci4gVGhlIGxldmVsIG9mIGNvbXByZXNzaW9uCmlzIG5v IGxvbmdlciBzdG9yZWQgaW4gdGhlIGR1bXAgYXMgaXQgaXMgaXJyZWxldmFudC4KLS0tCiBzcmMv YmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19nemlwLmMgICAgICAgfCAzOTQgKysrKysrKysrKysKIHNyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19nemlwLmggICAgICAgfCAgMjIgKwogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2lvLmMgICAgICAgICB8IDg5NyArKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmggICAgICAgICB8ICA3MSArLQogc3JjL2Jpbi9wZ19kdW1wL21l c29uLmJ1aWxkICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmMgIHwgMTAyICstLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o ICB8ICAgNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAgICB8ICAyMyAr LQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICA5NCArLS0KIHNyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgfCAgMTAgKy0KIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgfCAgIDIgKwogMTIgZmlsZXMgY2hhbmdlZCwgODIzIGlu c2VydGlvbnMoKyksIDc5OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2d6aXAuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmls ZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCA5ZGM1YTc4NGRkLi4yOWVhYjAyZDM3 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRv cF9idWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogCiBP QkpTID0gXAogCSQoV0lOMzJSRVMpIFwKKwljb21wcmVzc19nemlwLm8gXAogCWNvbXByZXNzX2lv Lm8gXAogCWR1bXB1dGlscy5vIFwKIAlwYXJhbGxlbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19nemlwLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZhODlkZWFhNGIKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCkBAIC0wLDAgKzEs Mzk0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19nemlwLmMKKyAqCSBS b3V0aW5lcyBmb3IgYXJjaGl2ZXJzIHRvIHdyaXRlIGFuIHVuY29tcHJlc3NlZCBvciBjb21wcmVz c2VkIGRhdGEKKyAqCSBzdHJlYW0uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf Z3ppcC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19m ZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgorCisjaW5jbHVkZSAiY29tcHJlc3Nf Z3ppcC5oIgorCisjaWZkZWYgSEFWRV9MSUJaCisjaW5jbHVkZSAiemxpYi5oIgorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzc29yIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KK3R5cGVkZWYgc3RydWN0IEd6aXBDb21wcmVzc29yU3RhdGUKK3sKKwl6X3N0cmVh bXAJenA7CisKKwl2b2lkCSAgICpvdXRidWY7CisJc2l6ZV90CQlvdXRzaXplOworfSBHemlwQ29t cHJlc3NvclN0YXRlOworCisvKiBQcml2YXRlIHJvdXRpbmVzIHRoYXQgc3VwcG9ydCBnemlwIGNv bXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lkCitEZWZsYXRlQ29tcHJlc3Nvckd6aXAo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsIGJvb2wgZmx1c2gpCit7CisJ R3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgY3Mt PnByaXZhdGU7CisJel9zdHJlYW1wCXpwID0gZ3ppcGNzLT56cDsKKwl2b2lkCSAgICpvdXQgPSBn emlwY3MtPm91dGJ1ZjsKKwlpbnQJCQlyZXMgPSBaX09LOworCisJd2hpbGUgKGd6aXBjcy0+enAt PmF2YWlsX2luICE9IDAgfHwgZmx1c2gpCisJeworCQlyZXMgPSBkZWZsYXRlKHpwLCBmbHVzaCA/ IFpfRklOSVNIIDogWl9OT19GTFVTSCk7CisJCWlmIChyZXMgPT0gWl9TVFJFQU1fRVJST1IpCisJ CQlwZ19mYXRhbCgiY291bGQgbm90IGNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisJCWlm ICgoZmx1c2ggJiYgKHpwLT5hdmFpbF9vdXQgPCBnemlwY3MtPm91dHNpemUpKQorCQkJfHwgKHpw LT5hdmFpbF9vdXQgPT0gMCkKKwkJCXx8ICh6cC0+YXZhaWxfaW4gIT0gMCkKKwkJCSkKKwkJewor CQkJLyoKKwkJCSAqIEV4dHJhIHBhcmFub2lhOiBhdm9pZCB6ZXJvLWxlbmd0aCBjaHVua3MsIHNp bmNlIGEgemVybyBsZW5ndGgKKwkJCSAqIGNodW5rIGlzIHRoZSBFT0YgbWFya2VyIGluIHRoZSBj dXN0b20gZm9ybWF0LiBUaGlzIHNob3VsZCBuZXZlcgorCQkJICogaGFwcGVuIGJ1dC4uLgorCQkJ ICovCisJCQlpZiAoenAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0c2l6ZSkKKwkJCXsKKwkJCQkv KgorCQkJCSAqIEFueSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgZG8gaXRzIG93biBlcnJvciBjaGVj a2luZyBidXQgdG8KKwkJCQkgKiBtYWtlIHN1cmUgd2UgZG8gYSBjaGVjayBoZXJlIGFzIHdlbGwu Li4KKwkJCQkgKi8KKwkJCQlzaXplX3QJCWxlbiA9IGd6aXBjcy0+b3V0c2l6ZSAtIHpwLT5hdmFp bF9vdXQ7CisKKwkJCQljcy0+d3JpdGVGKEFILCAoY2hhciAqKSBvdXQsIGxlbik7CisJCQl9CisJ CQl6cC0+bmV4dF9vdXQgPSBvdXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gZ3ppcGNzLT5vdXRzaXpl OworCQl9CisKKwkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQpCisJCQlicmVhazsKKwl9Cit9CisK K3N0YXRpYyB2b2lkCitFbmRDb21wcmVzc29yR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NvclN0YXRlICpjcykKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENv bXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZTsKKwl6X3N0cmVhbXAJenA7CisKKwlpZiAoZ3pp cGNzLT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cDsKKwkJenAtPm5leHRfaW4gPSBOVUxMOwor CQl6cC0+YXZhaWxfaW4gPSAwOworCisJCS8qIEZsdXNoIGFueSByZW1haW5pbmcgZGF0YSBmcm9t IHpsaWIgYnVmZmVyICovCisJCURlZmxhdGVDb21wcmVzc29yR3ppcChBSCwgY3MsIHRydWUpOwor CisJCWlmIChkZWZsYXRlRW5kKHpwKSAhPSBaX09LKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBj bG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVzIiwgenAtPm1zZyk7CisKKwkJcGdfZnJlZShnemlw Y3MtPm91dGJ1Zik7CisJCXBnX2ZyZWUoZ3ppcGNzLT56cCk7CisJfQorCisJcGdfZnJlZShnemlw Y3MpOworCWNzLT5wcml2YXRlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0YVRv QXJjaGl2ZUd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJ CSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUd6aXBDb21wcmVzc29yU3Rh dGUgKmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlOworCXpfc3Ry ZWFtcAl6cDsKKworCWlmICghZ3ppcGNzLT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cCA9ICh6 X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKKwkJenAtPnphbGxvYyA9IFpf TlVMTDsKKwkJenAtPnpmcmVlID0gWl9OVUxMOworCQl6cC0+b3BhcXVlID0gWl9OVUxMOworCisJ CS8qCisJCSAqIG91dHNpemUgaXMgdGhlIGJ1ZmZlciBzaXplIHdlIHRlbGwgemxpYiBpdCBjYW4g b3V0cHV0IHRvLiAgV2UKKwkJICogYWN0dWFsbHkgYWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUgYmVj YXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8KKwkJICogYXBwZW5kIGEgdHJhaWxpbmcgemVybyBi eXRlIHRvIHRoZSB6bGliIG91dHB1dC4KKwkJICovCisJCWd6aXBjcy0+b3V0YnVmID0gcGdfbWFs bG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKKwkJZ3ppcGNzLT5vdXRzaXplID0gWkxJQl9PVVRfU0la RTsKKworCQlpZiAoZGVmbGF0ZUluaXQoenAsIGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKSAh PSBaX09LKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxp YnJhcnk6ICVzIiwgenAtPm1zZyk7CisKKwkJLyogSnVzdCBiZSBwYXJhbm9pZCAtIG1heWJlIEVu ZCBpcyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8KKwkJenAtPm5leHRfb3V0 ID0gZ3ppcGNzLT5vdXRidWY7CisJCXpwLT5hdmFpbF9vdXQgPSBnemlwY3MtPm91dHNpemU7CisJ fQorCisJZ3ppcGNzLT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29uc3RpZnkodm9pZCAqLCBk YXRhKTsKKwlnemlwY3MtPnpwLT5hdmFpbF9pbiA9IGRMZW47CisJRGVmbGF0ZUNvbXByZXNzb3JH emlwKEFILCBjcywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2 ZUd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJel9zdHJl YW1wCXpwOworCWNoYXIJICAgKm91dDsKKwlpbnQJCQlyZXMgPSBaX09LOworCXNpemVfdAkJY250 OworCWNoYXIJICAgKmJ1ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKKworCXpwID0gKHpfc3RyZWFtcCkg cGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOworCXpwLT56YWxsb2MgPSBaX05VTEw7CisJenAt PnpmcmVlID0gWl9OVUxMOworCXpwLT5vcGFxdWUgPSBaX05VTEw7CisKKwlidWYgPSBwZ19tYWxs b2MoWkxJQl9JTl9TSVpFKTsKKwlidWZsZW4gPSBaTElCX0lOX1NJWkU7CisKKwlvdXQgPSBwZ19t YWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOworCisJaWYgKGluZmxhdGVJbml0KHpwKSAhPSBaX09L KQorCQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTog JXMiLAorCQkJCSB6cC0+bXNnKTsKKworCS8qIG5vIG1pbmltYWwgY2h1bmsgc2l6ZSBmb3Igemxp YiAqLworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJewor CQl6cC0+bmV4dF9pbiA9ICh2b2lkICopIGJ1ZjsKKwkJenAtPmF2YWlsX2luID0gY250OworCisJ CXdoaWxlICh6cC0+YXZhaWxfaW4gPiAwKQorCQl7CisJCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAq KSBvdXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKworCQkJcmVzID0gaW5m bGF0ZSh6cCwgMCk7CisJCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkK KwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsK KworCQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCQlhaHdy aXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKKwkJfQorCX0K KworCXpwLT5uZXh0X2luID0gTlVMTDsKKwl6cC0+YXZhaWxfaW4gPSAwOworCXdoaWxlIChyZXMg IT0gWl9TVFJFQU1fRU5EKQorCXsKKwkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OworCQl6 cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKwkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7CisJ CWlmIChyZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisKKwkJb3V0W1pMSUJfT1VU X1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCWFod3JpdGUob3V0LCAxLCBaTElCX09V VF9TSVpFIC0genAtPmF2YWlsX291dCwgQUgpOworCX0KKworCWlmIChpbmZsYXRlRW5kKHpwKSAh PSBaX09LKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6 ICVzIiwgenAtPm1zZyk7CisKKwlmcmVlKGJ1Zik7CisJZnJlZShvdXQpOworCWZyZWUoenApOwor fQorCisvKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAgY29tcHJlc3NlZCBkYXRh IEkvTyAqLwordm9pZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3MsIGNv bnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlHemlw Q29tcHJlc3NvclN0YXRlICpnemlwY3M7CisKKwljcy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21B cmNoaXZlR3ppcDsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVEYXRhVG9BcmNoaXZlR3ppcDsKKwlj cy0+ZW5kID0gRW5kQ29tcHJlc3Nvckd6aXA7CisKKwlnemlwY3MgPSAoR3ppcENvbXByZXNzb3JT dGF0ZSAqKSBwZ19tYWxsb2MwKHNpemVvZihHemlwQ29tcHJlc3NvclN0YXRlKSk7CisKKwljcy0+ cHJpdmF0ZSA9IGd6aXBjczsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENv bXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMg c2l6ZV90CitHemlwX3JlYWQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlOworCXNp emVfdAkJcmV0OworCisJcmV0ID0gZ3pyZWFkKGd6ZnAsIHB0ciwgc2l6ZSk7CisJaWYgKHJldCAh PSBzaXplICYmICFnemVvZihnemZwKSkKKwl7CisJCWludAkJCWVycm51bTsKKwkJY29uc3QgY2hh ciAqZXJybXNnID0gZ3plcnJvcihnemZwLCAmZXJybnVtKTsKKworCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIGVycm51bSA9PSBaX0VSUk5PID8g c3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgc2l6ZV90CitHemlwX3dyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJp dmF0ZTsKKworCXJldHVybiBnendyaXRlKGd6ZnAsIHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBp bnQKK0d6aXBfZ2V0YyhDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAg PSAoZ3pGaWxlKSBDRkgtPnByaXZhdGU7CisJaW50CQkJcmV0OworCisJZXJybm8gPSAwOworCXJl dCA9IGd6Z2V0YyhnemZwKTsKKwlpZiAocmV0ID09IEVPRikKKwl7CisJCWlmICghZ3plb2YoZ3pm cCkpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0 cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9t IGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGNoYXIgKgorR3ppcF9nZXRzKGNoYXIgKnB0ciwgaW50IHNpemUsIENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZTsKKwor CXJldHVybiBnemdldHMoZ3pmcCwgcHRyLCBzaXplKTsKK30KKworc3RhdGljIGludAorR3ppcF9j bG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxl KSBDRkgtPnByaXZhdGU7CisJaW50CQkJc2F2ZV9lcnJubzsKKwlpbnQJCQlyZXQ7CisKKwlDRkgt PnByaXZhdGUgPSBOVUxMOworCisJcmV0ID0gZ3pjbG9zZShnemZwKTsKKworCXNhdmVfZXJybm8g PSBlcnJubzsKKwllcnJubyA9IHNhdmVfZXJybm87CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50CitHemlwX2VvZihDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6 ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGU7CisKKwlyZXR1cm4gZ3plb2YoZ3pmcCk7Cit9CisK K3N0YXRpYyBjb25zdCBjaGFyICoKK0d6aXBfZ2V0X2Vycm9yKENvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZTsKKwljb25zdCBj aGFyICplcnJtc2c7CisJaW50CQkJZXJybnVtOworCisJZXJybXNnID0gZ3plcnJvcihnemZwLCAm ZXJybnVtKTsKKwlpZiAoZXJybnVtID09IFpfRVJSTk8pCisJCWVycm1zZyA9IHN0cmVycm9yKGVy cm5vKTsKKworCXJldHVybiBlcnJtc2c7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfb3Blbihjb25z dCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcDsKKwljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMyXTsK KworCWlmIChDRkgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwgIT0gWl9ERUZBVUxUX0NPTVBSRVNT SU9OKQorCXsKKwkJLyoKKwkJICogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24gbGV2 ZWwsIHNvIHRlbGwgemxpYiB0byB1c2UgaXQKKwkJICovCisJCXNucHJpbnRmKG1vZGVfY29tcHJl c3Npb24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAorCQkJCSBtb2RlLCBDRkgt PmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOworCX0KKwllbHNlCisJCXN0cmNweShtb2RlX2NvbXBy ZXNzaW9uLCBtb2RlKTsKKworCWlmIChmZCA+PSAwKQorCQlnemZwID0gZ3pkb3BlbihkdXAoZmQp LCBtb2RlX2NvbXByZXNzaW9uKTsKKwllbHNlCisJCWd6ZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9j b21wcmVzc2lvbik7CisKKwlpZiAoZ3pmcCA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCUNGSC0+ cHJpdmF0ZSA9IGd6ZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorR3ppcF9vcGVu X3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKwlpbnQJCQlzYXZl X2Vycm5vOworCisJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKKwlyZXQgPSBDRkgt Pm9wZW4oZm5hbWUsIC0xLCBtb2RlLCBDRkgpOworCisJc2F2ZV9lcnJubyA9IGVycm5vOworCXBn X2ZyZWUoZm5hbWUpOworCWVycm5vID0gc2F2ZV9lcnJubzsKKworCXJldHVybiByZXQ7Cit9CisK K3ZvaWQKK0luaXRDb21wcmVzc0d6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0IHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlDRkgtPm9wZW4g PSBHemlwX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlID0gR3ppcF9vcGVuX3dyaXRlOworCUNGSC0+ cmVhZCA9IEd6aXBfcmVhZDsKKwlDRkgtPndyaXRlID0gR3ppcF93cml0ZTsKKwlDRkgtPmdldHMg PSBHemlwX2dldHM7CisJQ0ZILT5nZXRjID0gR3ppcF9nZXRjOworCUNGSC0+Y2xvc2UgPSBHemlw X2Nsb3NlOworCUNGSC0+ZW9mID0gR3ppcF9lb2Y7CisJQ0ZILT5nZXRfZXJyb3IgPSBHemlwX2dl dF9lcnJvcjsKKworCUNGSC0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisK KwlDRkgtPnByaXZhdGUgPSBOVUxMOworfQorI2Vsc2UJCQkJCQkJLyogSEFWRV9MSUJaICovCit2 b2lkCitJbml0Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3NvclN0YXRlICpjcywgY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0aGlz IGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Cit9 CisKK3ZvaWQKK0luaXRDb21wcmVzc0d6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlwZ19mYXRh bCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3pp cCIpOworfQorI2VuZGlmCQkJCQkJCS8qIEhBVkVfTElCWiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlw LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmRmZDBlYjA0ZAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmgKQEAgLTAsMCAr MSwyMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3NfZ3ppcC5oCisgKgkg SW50ZXJmYWNlIHRvIGNvbXByZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19nemlwLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRl ZiBfQ09NUFJFU1NfR1pJUF9IXworI2RlZmluZSBfQ09NUFJFU1NfR1pJUF9IXworCisjaW5jbHVk ZSAiY29tcHJlc3NfaW8uaCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JHemlwKENvbXBy ZXNzb3JTdGF0ZSAqY3MsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYyk7CitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NHemlwKENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZILCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp OworCisjZW5kaWYJCQkJCQkJLyogX0NPTVBSRVNTX0daSVBfSF8gKi8KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lv LmMKaW5kZXggYjg5M2FjYTFlZC4uYzMzNzM2ZGQ0OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAg LTksMzAgKzksMzAgQEAKICAqCiAgKiBUaGlzIGZpbGUgaW5jbHVkZXMgdHdvIEFQSXMgZm9yIGRl YWxpbmcgd2l0aCBjb21wcmVzc2VkIGRhdGEuIFRoZSBmaXJzdAogICogcHJvdmlkZXMgbW9yZSBm bGV4aWJpbGl0eSwgdXNpbmcgY2FsbGJhY2tzIHRvIHJlYWQvd3JpdGUgZGF0YSBmcm9tIHRoZQot ICogdW5kZXJseWluZyBzdHJlYW0uIFRoZSBzZWNvbmQgQVBJIGlzIGEgd3JhcHBlciBhcm91bmQg Zm9wZW4vZ3pvcGVuIGFuZAorICogdW5kZXJseWluZyBzdHJlYW0uIFRoZSBzZWNvbmQgQVBJIGlz IGEgd3JhcHBlciBhcm91bmQgZm9wZW4gYW5kCiAgKiBmcmllbmRzLCBwcm92aWRpbmcgYW4gaW50 ZXJmYWNlIHNpbWlsYXIgdG8gdGhvc2UsIGJ1dCBhYnN0cmFjdHMgYXdheQotICogdGhlIHBvc3Np YmxlIGNvbXByZXNzaW9uLiBCb3RoIEFQSXMgdXNlIGxpYnogZm9yIHRoZSBjb21wcmVzc2lvbiwg YnV0Ci0gKiB0aGUgc2Vjb25kIEFQSSB1c2VzIGd6aXAgaGVhZGVycywgc28gdGhlIHJlc3VsdGlu ZyBmaWxlcyBjYW4gYmUgZWFzaWx5Ci0gKiBtYW5pcHVsYXRlZCB3aXRoIHRoZSBnemlwIHV0aWxp dHkuCisgKiB0aGUgcG9zc2libGUgY29tcHJlc3Npb24uIFRoZSBzZWNvbmQgQVBJIGlzIGFpbWVk IGZvciB0aGUgcmVzdWx0aW5nCisgKiBmaWxlcyBjYW4gYmUgZWFzaWx5IG1hbmlwdWxhdGVkIHdp dGggYW4gZXh0ZXJuYWwgY29tcHJlc3Npb24gdXRpbGl0eQorICogcHJvZ3JhbS4KICAqCiAgKiBD b21wcmVzc29yIEFQSQogICogLS0tLS0tLS0tLS0tLS0KICAqCiAgKglUaGUgaW50ZXJmYWNlIGZv ciB3cml0aW5nIHRvIGFuIGFyY2hpdmUgY29uc2lzdHMgb2YgdGhyZWUgZnVuY3Rpb25zOgotICoJ QWxsb2NhdGVDb21wcmVzc29yLCBXcml0ZURhdGFUb0FyY2hpdmUgYW5kIEVuZENvbXByZXNzb3Iu IEZpcnN0IHlvdSBjYWxsCi0gKglBbGxvY2F0ZUNvbXByZXNzb3IsIHRoZW4gd3JpdGUgYWxsIHRo ZSBkYXRhIGJ5IGNhbGxpbmcgV3JpdGVEYXRhVG9BcmNoaXZlCi0gKglhcyBtYW55IHRpbWVzIGFz IG5lZWRlZCwgYW5kIGZpbmFsbHkgRW5kQ29tcHJlc3Nvci4gV3JpdGVEYXRhVG9BcmNoaXZlCi0g KglhbmQgRW5kQ29tcHJlc3NvciB3aWxsIGNhbGwgdGhlIFdyaXRlRnVuYyB0aGF0IHdhcyBwcm92 aWRlZCB0bwotICoJQWxsb2NhdGVDb21wcmVzc29yIGZvciBlYWNoIGNodW5rIG9mIGNvbXByZXNz ZWQgZGF0YS4KKyAqCUFsbG9jYXRlQ29tcHJlc3Nvciwgd3JpdGVEYXRhLCBhbmQgRW5kQ29tcHJl c3Nvci4gRmlyc3QgeW91IGNhbGwKKyAqCUFsbG9jYXRlQ29tcHJlc3NvciwgdGhlbiB3cml0ZSBh bGwgdGhlIGRhdGEgYnkgY2FsbGluZyB3cml0ZURhdGEgYXMgbWFueQorICoJdGltZXMgYXMgbmVl ZGVkLCBhbmQgZmluYWxseSBFbmRDb21wcmVzc29yLiB3cml0ZURhdGEgd2lsbCBjYWxsIHRoZQor ICoJV3JpdGVGdW5jIHRoYXQgd2FzIHByb3ZpZGVkIHRvIEFsbG9jYXRlQ29tcHJlc3NvciBmb3Ig ZWFjaCBjaHVuayBvZgorICoJY29tcHJlc3NlZCBkYXRhLgogICoKLSAqCVRoZSBpbnRlcmZhY2Ug Zm9yIHJlYWRpbmcgYW4gYXJjaGl2ZSBjb25zaXN0cyBvZiBqdXN0IG9uZSBmdW5jdGlvbjoKLSAq CVJlYWREYXRhRnJvbUFyY2hpdmUuIFJlYWREYXRhRnJvbUFyY2hpdmUgcmVhZHMgdGhlIHdob2xl IGNvbXByZXNzZWQgaW5wdXQKLSAqCXN0cmVhbSwgYnkgcmVwZWF0ZWRseSBjYWxsaW5nIHRoZSBn aXZlbiBSZWFkRnVuYy4gUmVhZEZ1bmMgcmV0dXJucyB0aGUKLSAqCWNvbXByZXNzZWQgZGF0YSBj aHVuayBhdCBhIHRpbWUsIGFuZCBSZWFkRGF0YUZyb21BcmNoaXZlIGRlY29tcHJlc3NlcyBpdAot ICoJYW5kIHBhc3NlcyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgdG8gYWh3cml0ZSgpLCB1bnRpbCBS ZWFkRnVuYyByZXR1cm5zIDAKLSAqCXRvIHNpZ25hbCBFT0YuCi0gKgotICoJVGhlIGludGVyZmFj ZSBpcyB0aGUgc2FtZSBmb3IgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHN0cmVhbXMuCisg KglUaGUgaW50ZXJmYWNlIGZvciByZWFkaW5nIGFuIGFyY2hpdmUgY29uc2lzdHMgb2YgdGhlIHNh bWUgdGhyZWUgZnVuY3Rpb25zOgorICoJQWxsb2NhdGVDb21wcmVzc29yLCByZWFkRGF0YSwgYW5k IEVuZENvbXByZXNzb3IuIEZpcnN0IHlvdSBjYWxsCisgKglBbGxvY2F0ZUNvbXByZXNzb3IsIHRo ZW4gcmVhZCBhbGwgdGhlIGRhdGEgYnkgY2FsbGluZyByZWFkRGF0YSB0byByZWFkIHRoZQorICoJ d2hvbGUgY29tcHJlc3NlZCBzdHJlYW0gd2hpY2ggcmVwZWF0ZWRseSBjYWxscyB0aGUgZ2l2ZW4g UmVhZEZ1bmMuIFJlYWRGdW5jCisgKglyZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEgY2h1bmsg YXQgYSB0aW1lLCBhbmQgcmVhZERhdGEgIGRlY29tcHJlc3NlcyBpdAorICoJYW5kIHBhc3NlcyB0 aGUgZGVjb21wcmVzc2VkIGRhdGEgdG8gYWh3cml0ZSgpLCB1bnRpbCBSZWFkRnVuYyByZXR1cm5z IDAgdG8KKyAqCXNpZ25hbCBFT0YuIFRoZSBpbnRlcmZhY2UgaXMgdGhlIHNhbWUgZm9yIGNvbXBy ZXNzZWQgYW5kIHVuY29tcHJlc3NlZAorICoJc3RyZWFtcy4KICAqCiAgKiBDb21wcmVzc2VkIHN0 cmVhbSBBUEkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUxLDkgKzUxLDEyIEBACiAg KgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1 ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRlICJjb21w cmVzc19pby5oIgorI2luY2x1ZGUgImNvbXByZXNzX2d6aXAuaCIKICNpbmNsdWRlICJwZ19iYWNr dXBfdXRpbHMuaCIKIAogI2lmZGVmIEhBVkVfTElCWgpAQCAtNjUsODUgKzY4LDcwIEBACiAgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0vKiB0eXBlZGVmIGFwcGVhcnMgaW4gY29tcHJl c3NfaW8uaCAqLwotc3RydWN0IENvbXByZXNzb3JTdGF0ZQorLyogUHJpdmF0ZSByb3V0aW5lcyB0 aGF0IHN1cHBvcnQgdW5jb21wcmVzc2VkIGRhdGEgSS9PICovCitzdGF0aWMgdm9pZAorUmVhZERh dGFGcm9tQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3Mp CiB7Ci0JcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjOwotCVdyaXRl RnVuYwl3cml0ZUY7CisJc2l6ZV90CQljbnQ7CisJY2hhcgkgICAqYnVmOworCXNpemVfdAkJYnVm bGVuOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0Jel9zdHJlYW1wCXpwOwotCWNoYXIJICAgKnpsaWJP dXQ7Ci0Jc2l6ZV90CQl6bGliT3V0U2l6ZTsKLSNlbmRpZgotfTsKKwlidWYgPSBwZ19tYWxsb2Mo WkxJQl9PVVRfU0laRSk7CisJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKKworCXdoaWxlICgoY250 ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQlhaHdyaXRlKGJ1ZiwgMSwg Y250LCBBSCk7CisJfQorCisJZnJlZShidWYpOworfQogCi0vKiBSb3V0aW5lcyB0aGF0IHN1cHBv cnQgemxpYiBjb21wcmVzc2VkIGRhdGEgSS9PICovCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMg dm9pZCBJbml0Q29tcHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKTsK LXN0YXRpYyB2b2lkIERlZmxhdGVDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkJICBib29sIGZsdXNoKTsKLXN0YXRpYyB2b2lkIFJl YWREYXRhRnJvbUFyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7 Ci1zdGF0aWMgdm9pZCBXcml0ZURhdGFUb0FyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBD b21wcmVzc29yU3RhdGUgKmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qg ZExlbik7Ci1zdGF0aWMgdm9pZCBFbmRDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwg Q29tcHJlc3NvclN0YXRlICpjcyk7Ci0jZW5kaWYKIAotLyogUm91dGluZXMgdGhhdCBzdXBwb3J0 IHVuY29tcHJlc3NlZCBkYXRhIEkvTyAqLwotc3RhdGljIHZvaWQgUmVhZERhdGFGcm9tQXJjaGl2 ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsKLXN0YXRpYyB2b2lkIFdy aXRlRGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MsCi0JCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKTsKK3N0YXRpYyB2 b2lkCitXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29y U3RhdGUgKmNzLAorCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwlj cy0+d3JpdGVGKEFILCBkYXRhLCBkTGVuKTsKK30KKworc3RhdGljIHZvaWQKK0VuZENvbXByZXNz b3JOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCS8qIG5v IG9wICovCit9CisKK3N0YXRpYyB2b2lkCitJbml0Q29tcHJlc3Nvck5vbmUoQ29tcHJlc3NvclN0 YXRlICpjcywKKwkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpCit7CisJY3MtPnJlYWREYXRhID0gUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmU7CisJ Y3MtPndyaXRlRGF0YSA9IFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmU7CisJY3MtPmVuZCA9IEVuZENv bXByZXNzb3JOb25lOworCisJY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVj OworfQogCiAvKiBQdWJsaWMgaW50ZXJmYWNlIHJvdXRpbmVzICovCiAKIC8qIEFsbG9jYXRlIGEg bmV3IGNvbXByZXNzb3IgKi8KIENvbXByZXNzb3JTdGF0ZSAqCiBBbGxvY2F0ZUNvbXByZXNzb3Io Y29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAotCQkJCSAg IFdyaXRlRnVuYyB3cml0ZUYpCisJCQkJICAgUmVhZEZ1bmMgcmVhZEYsIFdyaXRlRnVuYyB3cml0 ZUYpCiB7CiAJQ29tcHJlc3NvclN0YXRlICpjczsKIAotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAo Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJcGdf ZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwg Imd6aXAiKTsKLSNlbmRpZgotCiAJY3MgPSAoQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAo c2l6ZW9mKENvbXByZXNzb3JTdGF0ZSkpOworCWNzLT5yZWFkRiA9IHJlYWRGOwogCWNzLT53cml0 ZUYgPSB3cml0ZUY7Ci0JY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOwot Ci0JLyoKLQkgKiBQZXJmb3JtIGNvbXByZXNzaW9uIGFsZ29yaXRobSBzcGVjaWZpYyBpbml0aWFs aXphdGlvbi4KLQkgKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCUluaXRDb21wcmVzc29yWmxp YihjcywgY3MtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotI2VuZGlmCi0KLQlyZXR1cm4gY3M7 Ci19CiAKLS8qCi0gKiBSZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEgZnJvbSB0aGUgaW5wdXQgc3Ry ZWFtICh2aWEgcmVhZEYpIGFuZCBwcmludCBpdAotICogb3V0IHdpdGggYWh3cml0ZSgpLgotICov Ci12b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQljb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCVJlYWRG dW5jIHJlYWRGKQotewogCXN3aXRjaCAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJewog CQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShB SCwgcmVhZEYpOworCQkJSW5pdENvbXByZXNzb3JOb25lKGNzLCBjb21wcmVzc2lvbl9zcGVjKTsK IAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJa Ci0JCQlSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBSCwgcmVhZEYpOwotI2Vsc2UKLQkJCXBnX2Zh dGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCi0J CQkJCSJnemlwIik7Ci0jZW5kaWYKKwkJCUluaXRDb21wcmVzc29yR3ppcChjcywgY29tcHJlc3Np b25fc3BlYyk7CiAJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CiAJCQlwZ19m YXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsK QEAgLTE1MiwzNSArMTQwLDggQEAgUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpB SCwKIAkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVk IiwgIlpTVEQiKTsKIAkJCWJyZWFrOwogCX0KLX0KIAotLyoKLSAqIENvbXByZXNzIGFuZCB3cml0 ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2aWEgd3JpdGVGKS4KLSAqLwotdm9pZAotV3Jp dGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAot CQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQotewotCXN3aXRjaCAoY3MtPmNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05F OgotCQkJV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBSCwgY3MsIGRhdGEsIGRMZW4pOwotCQkJYnJl YWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCVdy aXRlRGF0YVRvQXJjaGl2ZVpsaWIoQUgsIGNzLCBkYXRhLCBkTGVuKTsKLSNlbHNlCi0JCQlwZ19m YXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAot CQkJCQkiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9M WjQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRl ZCIsICJMWjQiKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlw Z19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1RE Iik7Ci0JCQlicmVhazsKLQl9CisJcmV0dXJuIGNzOwogfQogCiAvKgpAQCAtMTg5LDI0NyArMTUw LDI4IEBAIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcywKIHZvaWQKIEVuZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz b3JTdGF0ZSAqY3MpCiB7Ci0Jc3dpdGNoIChjcy0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0p Ci0JewotCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlicmVhazsKLQkJY2FzZSBQR19D T01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJRW5kQ29tcHJlc3NvclpsaWIo QUgsIGNzKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0 IGNvbXByZXNzaW9uIHdpdGggJXMiLAotCQkJCQkiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsK LQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0 aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJyZWFrOwotCQljYXNlIFBH X0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBu b3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7Ci0JCQlicmVhazsKLQl9Ci0KLQlmcmVlKGNzKTsK LX0KLQotLyogUHJpdmF0ZSByb3V0aW5lcywgc3BlY2lmaWMgdG8gZWFjaCBjb21wcmVzc2lvbiBt ZXRob2QuICovCi0KLSNpZmRlZiBIQVZFX0xJQloKLS8qCi0gKiBGdW5jdGlvbnMgZm9yIHpsaWIg Y29tcHJlc3NlZCBvdXRwdXQuCi0gKi8KLQotc3RhdGljIHZvaWQKLUluaXRDb21wcmVzc29yWmxp YihDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgbGV2ZWwpCi17Ci0Jel9zdHJlYW1wCXpwOwotCi0J enAgPSBjcy0+enAgPSAoel9zdHJlYW1wKSBwZ19tYWxsb2Moc2l6ZW9mKHpfc3RyZWFtKSk7Ci0J enAtPnphbGxvYyA9IFpfTlVMTDsKLQl6cC0+emZyZWUgPSBaX05VTEw7Ci0JenAtPm9wYXF1ZSA9 IFpfTlVMTDsKLQotCS8qCi0JICogemxpYk91dFNpemUgaXMgdGhlIGJ1ZmZlciBzaXplIHdlIHRl bGwgemxpYiBpdCBjYW4gb3V0cHV0IHRvLiAgV2UKLQkgKiBhY3R1YWxseSBhbGxvY2F0ZSBvbmUg ZXh0cmEgYnl0ZSBiZWNhdXNlIHNvbWUgcm91dGluZXMgd2FudCB0byBhcHBlbmQgYQotCSAqIHRy YWlsaW5nIHplcm8gYnl0ZSB0byB0aGUgemxpYiBvdXRwdXQuCi0JICovCi0JY3MtPnpsaWJPdXQg PSAoY2hhciAqKSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOwotCWNzLT56bGliT3V0U2l6 ZSA9IFpMSUJfT1VUX1NJWkU7Ci0KLQlpZiAoZGVmbGF0ZUluaXQoenAsIGxldmVsKSAhPSBaX09L KQotCQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTog JXMiLAotCQkJCSB6cC0+bXNnKTsKLQotCS8qIEp1c3QgYmUgcGFyYW5vaWQgLSBtYXliZSBFbmQg aXMgY2FsbGVkIGFmdGVyIFN0YXJ0LCB3aXRoIG5vIFdyaXRlICovCi0JenAtPm5leHRfb3V0ID0g KHZvaWQgKikgY3MtPnpsaWJPdXQ7Ci0JenAtPmF2YWlsX291dCA9IGNzLT56bGliT3V0U2l6ZTsK LX0KLQotc3RhdGljIHZvaWQKLUVuZENvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBD b21wcmVzc29yU3RhdGUgKmNzKQotewotCXpfc3RyZWFtcAl6cCA9IGNzLT56cDsKLQotCXpwLT5u ZXh0X2luID0gTlVMTDsKLQl6cC0+YXZhaWxfaW4gPSAwOwotCi0JLyogRmx1c2ggYW55IHJlbWFp bmluZyBkYXRhIGZyb20gemxpYiBidWZmZXIgKi8KLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgs IGNzLCB0cnVlKTsKLQotCWlmIChkZWZsYXRlRW5kKHpwKSAhPSBaX09LKQotCQlwZ19mYXRhbCgi Y291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIHN0cmVhbTogJXMiLCB6cC0+bXNnKTsKLQotCWZy ZWUoY3MtPnpsaWJPdXQpOwotCWZyZWUoY3MtPnpwKTsKLX0KLQotc3RhdGljIHZvaWQKLURlZmxh dGVDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywg Ym9vbCBmbHVzaCkKLXsKLQl6X3N0cmVhbXAJenAgPSBjcy0+enA7Ci0JY2hhcgkgICAqb3V0ID0g Y3MtPnpsaWJPdXQ7Ci0JaW50CQkJcmVzID0gWl9PSzsKLQotCXdoaWxlIChjcy0+enAtPmF2YWls X2luICE9IDAgfHwgZmx1c2gpCi0JewotCQlyZXMgPSBkZWZsYXRlKHpwLCBmbHVzaCA/IFpfRklO SVNIIDogWl9OT19GTFVTSCk7Ci0JCWlmIChyZXMgPT0gWl9TVFJFQU1fRVJST1IpCi0JCQlwZ19m YXRhbCgiY291bGQgbm90IGNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7Ci0JCWlmICgoZmx1 c2ggJiYgKHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNpemUpKQotCQkJfHwgKHpwLT5hdmFp bF9vdXQgPT0gMCkKLQkJCXx8ICh6cC0+YXZhaWxfaW4gIT0gMCkKLQkJCSkKLQkJewotCQkJLyoK LQkJCSAqIEV4dHJhIHBhcmFub2lhOiBhdm9pZCB6ZXJvLWxlbmd0aCBjaHVua3MsIHNpbmNlIGEg emVybyBsZW5ndGgKLQkJCSAqIGNodW5rIGlzIHRoZSBFT0YgbWFya2VyIGluIHRoZSBjdXN0b20g Zm9ybWF0LiBUaGlzIHNob3VsZCBuZXZlcgotCQkJICogaGFwcGVuIGJ1dC4uLgotCQkJICovCi0J CQlpZiAoenAtPmF2YWlsX291dCA8IGNzLT56bGliT3V0U2l6ZSkKLQkJCXsKLQkJCQkvKgotCQkJ CSAqIEFueSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgZG8gaXRzIG93biBlcnJvciBjaGVja2luZyBi dXQgdG8KLQkJCQkgKiBtYWtlIHN1cmUgd2UgZG8gYSBjaGVjayBoZXJlIGFzIHdlbGwuLi4KLQkJ CQkgKi8KLQkJCQlzaXplX3QJCWxlbiA9IGNzLT56bGliT3V0U2l6ZSAtIHpwLT5hdmFpbF9vdXQ7 Ci0KLQkJCQljcy0+d3JpdGVGKEFILCBvdXQsIGxlbik7Ci0JCQl9Ci0JCQl6cC0+bmV4dF9vdXQg PSAodm9pZCAqKSBvdXQ7Ci0JCQl6cC0+YXZhaWxfb3V0ID0gY3MtPnpsaWJPdXRTaXplOwotCQl9 Ci0KLQkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQpCi0JCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRp YyB2b2lkCi1Xcml0ZURhdGFUb0FyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzLAotCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExlbikKLXsK LQljcy0+enAtPm5leHRfaW4gPSAodm9pZCAqKSB1bmNvbnN0aWZ5KGNoYXIgKiwgZGF0YSk7Ci0J Y3MtPnpwLT5hdmFpbF9pbiA9IGRMZW47Ci0JRGVmbGF0ZUNvbXByZXNzb3JabGliKEFILCBjcywg ZmFsc2UpOwotfQotCi1zdGF0aWMgdm9pZAotUmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQXJjaGl2 ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKQotewotCXpfc3RyZWFtcAl6cDsKLQljaGFyCSAg ICpvdXQ7Ci0JaW50CQkJcmVzID0gWl9PSzsKLQlzaXplX3QJCWNudDsKLQljaGFyCSAgICpidWY7 Ci0Jc2l6ZV90CQlidWZsZW47Ci0KLQl6cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yo el9zdHJlYW0pKTsKLQl6cC0+emFsbG9jID0gWl9OVUxMOwotCXpwLT56ZnJlZSA9IFpfTlVMTDsK LQl6cC0+b3BhcXVlID0gWl9OVUxMOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJfSU5fU0laRSk7 Ci0JYnVmbGVuID0gWkxJQl9JTl9TSVpFOwotCi0Jb3V0ID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJ WkUgKyAxKTsKLQotCWlmIChpbmZsYXRlSW5pdCh6cCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNv dWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1z Zyk7Ci0KLQkvKiBubyBtaW5pbWFsIGNodW5rIHNpemUgZm9yIHpsaWIgKi8KLQl3aGlsZSAoKGNu dCA9IHJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQl6cC0+bmV4dF9pbiA9ICh2b2lk ICopIGJ1ZjsKLQkJenAtPmF2YWlsX2luID0gY250OwotCi0JCXdoaWxlICh6cC0+YXZhaWxfaW4g PiAwKQotCQl7Ci0JCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0JCQl6cC0+YXZhaWxf b3V0ID0gWkxJQl9PVVRfU0laRTsKLQotCQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7Ci0JCQlpZiAo cmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCQlwZ19mYXRhbCgiY291bGQg bm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKLQotCQkJb3V0W1pMSUJfT1VUX1NJ WkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7Ci0JCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRf U0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKLQkJfQotCX0KLQotCXpwLT5uZXh0X2luID0gTlVM TDsKLQl6cC0+YXZhaWxfaW4gPSAwOwotCXdoaWxlIChyZXMgIT0gWl9TVFJFQU1fRU5EKQotCXsK LQkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9P VVRfU0laRTsKLQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7Ci0JCWlmIChyZXMgIT0gWl9PSyAmJiBy ZXMgIT0gWl9TVFJFQU1fRU5EKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRh dGE6ICVzIiwgenAtPm1zZyk7Ci0KLQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0 XSA9ICdcMCc7Ci0JCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291 dCwgQUgpOwotCX0KLQotCWlmIChpbmZsYXRlRW5kKHpwKSAhPSBaX09LKQotCQlwZ19mYXRhbCgi Y291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwgenAtPm1zZyk7Ci0KLQlm cmVlKGJ1Zik7Ci0JZnJlZShvdXQpOwotCWZyZWUoenApOwotfQotI2VuZGlmCQkJCQkJCS8qIEhB VkVfTElCWiAqLwotCi0KLS8qCi0gKiBGdW5jdGlvbnMgZm9yIHVuY29tcHJlc3NlZCBvdXRwdXQu Ci0gKi8KLQotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFyY2hpdmVIYW5k bGUgKkFILCBSZWFkRnVuYyByZWFkRikKLXsKLQlzaXplX3QJCWNudDsKLQljaGFyCSAgICpidWY7 Ci0Jc2l6ZV90CQlidWZsZW47Ci0KLQlidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7Ci0J YnVmbGVuID0gWkxJQl9PVVRfU0laRTsKLQotCXdoaWxlICgoY250ID0gcmVhZEYoQUgsICZidWYs ICZidWZsZW4pKSkKLQl7Ci0JCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFIKTsKLQl9Ci0KLQlmcmVl KGJ1Zik7CisJY3MtPmVuZChBSCwgY3MpOworCXBnX2ZyZWUoY3MpOwogfQogCi1zdGF0aWMgdm9p ZAotV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcywKLQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pCi17Ci0JY3Mt PndyaXRlRihBSCwgZGF0YSwgZExlbik7Ci19Ci0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKiBDb21wcmVzc2VkIHN0cmVhbSBBUEkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICov CiAKLS8qCi0gKiBjZnAgcmVwcmVzZW50cyBhbiBvcGVuIHN0cmVhbSwgd3JhcHBpbmcgdGhlIHVu ZGVybHlpbmcgRklMRSBvciBnekZpbGUKLSAqIHBvaW50ZXIuIFRoaXMgaXMgb3BhcXVlIHRvIHRo ZSBjYWxsZXJzLgotICovCi1zdHJ1Y3QgY2ZwCitzdGF0aWMgaW50CitoYXNTdWZmaXgoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKIHsKLQlwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7Ci0Jdm9pZAkgICAqZnA7Ci19OworCWludAkJCWZp bGVuYW1lbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKKwlpbnQJCQlzdWZmaXhsZW4gPSBzdHJsZW4o c3VmZml4KTsKIAotI2lmZGVmIEhBVkVfTElCWgotc3RhdGljIGludAloYXNTdWZmaXgoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7Ci0jZW5kaWYKKwlpZiAoZmlsZW5h bWVsZW4gPCBzdWZmaXhsZW4pCisJCXJldHVybiAwOworCisJcmV0dXJuIG1lbWNtcCgmZmlsZW5h bWVbZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5dLAorCQkJCSAgc3VmZml4LAorCQkJCSAgc3VmZml4 bGVuKSA9PSAwOworfQogCiAvKiBmcmVlKCkgd2l0aG91dCBjaGFuZ2luZyBlcnJubzsgdXNlZnVs IGluIHNldmVyYWwgcGxhY2VzIGJlbG93ICovCiBzdGF0aWMgdm9pZApAQCAtNDQyLDQxOCArMTg0 LDIyMyBAQCBmcmVlX2tlZXBfZXJybm8odm9pZCAqcCkKIH0KIAogLyoKLSAqIE9wZW4gYSBmaWxl IGZvciByZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91 bGQKLSAqIGJlIGVpdGhlciAiciIgb3IgInJiIi4KLSAqCi0gKiBJZiB0aGUgZmlsZSBhdCAncGF0 aCcgZG9lcyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUgIi5neiIgc3VmZml4IChpZiAncGF0aCcK LSAqIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0KSBhbmQgdHJ5IGFnYWluLiBTbyBpZiB5b3UgcGFz cyAiZm9vIiBhcyAncGF0aCcsCi0gKiB0aGlzIHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IgImZv by5neiIuCi0gKgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2Rl IGluIGVycm5vLgorICogQ29tcHJlc3Npb24gTm9uZSBpbXBsZW1lbnRhdGlvbgogICovCi1jZnAg KgotY2ZvcGVuX3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK3N0YXRp YyBzaXplX3QKK19yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKQogewotCWNmcAkJICAgKmZwOwotCi0JcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjID0gezB9OwotCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGhhc1N1ZmZp eChwYXRoLCAiLmd6IikpCi0JewotCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NP TVBSRVNTSU9OX0daSVA7Ci0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXByZXNzaW9uX3Nw ZWMpOwotCX0KLQllbHNlCi0jZW5kaWYKLQl7Ci0JCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht ID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJl c3Npb25fc3BlYyk7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChmcCA9PSBOVUxMKQotCQl7Ci0J CQljaGFyCSAgICpmbmFtZTsKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZTsK KwlzaXplX3QJCXJldDsKIAotCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKLQkJ CWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKLQkJCWZw ID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLQkJCWZyZWVfa2VlcF9l cnJubyhmbmFtZSk7Ci0JCX0KLSNlbmRpZgotCX0KLQlyZXR1cm4gZnA7Ci19CisJaWYgKHNpemUg PT0gMCkKKwkJcmV0dXJuIDA7CiAKLS8qCi0gKiBPcGVuIGEgZmlsZSBmb3Igd3JpdGluZy4gJ3Bh dGgnIGluZGljYXRlcyB0aGUgcGF0aCBuYW1lLCBhbmQgJ21vZGUnIG11c3QKLSAqIGJlIGEgZmls ZW1vZGUgYXMgYWNjZXB0ZWQgYnkgZm9wZW4oKSBhbmQgZ3pvcGVuKCkgdGhhdCBpbmRpY2F0ZXMg d3JpdGluZwotICogKCJ3IiwgIndiIiwgImEiLCBvciAiYWIiKS4KLSAqCi0gKiBJZiAnY29tcHJl c3Npb25fc3BlYy5hbGdvcml0aG0nIGlzIEdaSVAsIGEgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbSBp cyBvcGVuZWQsCi0gKiBhbmQgJ2NvbXByZXNzaW9uX3NwZWMubGV2ZWwnIHVzZWQuIFRoZSAiLmd6 IiBzdWZmaXggaXMgYXV0b21hdGljYWxseSBhZGRlZCB0bwotICogJ3BhdGgnIGluIHRoYXQgY2Fz ZS4KLSAqCi0gKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4g ZXJybm8uCi0gKi8KLWNmcCAqCi1jZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qg Y2hhciAqbW9kZSwKLQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpCi17Ci0JY2ZwCQkgICAqZnA7CisJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXplLCBm cCk7CisJaWYgKHJldCAhPSBzaXplICYmICFmZW9mKGZwKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5v dCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAorCQkJCSBzdHJlcnJvcihlcnJubykpOwogCi0J aWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0J CWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotCWVsc2UKLQl7Ci0j aWZkZWYgSEFWRV9MSUJaCi0JCWNoYXIJICAgKmZuYW1lOwotCi0JCWZuYW1lID0gcHNwcmludGYo IiVzLmd6IiwgcGF0aCk7Ci0JCWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9z cGVjKTsKLQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKLSNlbHNlCi0JCXBnX2ZhdGFsKCJub3Qg YnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKLQkJZnAgPSBOVUxMOwkJCQkvKiBrZWVwIGNvbXBp bGVyIHF1aWV0ICovCi0jZW5kaWYKLQl9Ci0JcmV0dXJuIGZwOworCXJldHVybiByZXQ7CiB9CiAK LS8qCi0gKiBUaGlzIGlzIHRoZSB3b3JraG9yc2UgZm9yIGNmb3BlbigpIG9yIGNmZG9wZW4oKS4g SXQgb3BlbnMgZmlsZSAncGF0aCcgb3IKLSAqIGFzc29jaWF0ZXMgYSBzdHJlYW0gJ2ZkJywgaWYg J2ZkJyBpcyBhIHZhbGlkIGRlc2NyaXB0b3IsIGluICdtb2RlJy4gVGhlCi0gKiBkZXNjcmlwdG9y IGlzIG5vdCBkdXAnZWQgYW5kIGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBk byBzby4KLSAqIFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgJ2NvbXByZXNzX2FsZ29y aXRobScgaXMgc3VwcG9ydGVkIGJ5IHRoZQotICogY3VycmVudCBidWlsZC4KLSAqCi0gKiBPbiBm YWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCi0gKi8KLXN0 YXRpYyBjZnAgKgotY2ZvcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29u c3QgY2hhciAqbW9kZSwKLQkJCQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpCitzdGF0aWMgc2l6ZV90Citfd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6 ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCiB7Ci0JY2ZwCQkgICAqZnAgPSBwZ19tYWxsb2Mo c2l6ZW9mKGNmcCkpOwotCi0JZnAtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVj OwotCi0Jc3dpdGNoIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdf Q09NUFJFU1NJT05fTk9ORToKLQkJCWlmIChmZCA+PSAwKQotCQkJCWZwLT5mcCA9IGZkb3Blbihm ZCwgbW9kZSk7Ci0JCQllbHNlCi0JCQkJZnAtPmZwID0gZm9wZW4ocGF0aCwgbW9kZSk7Ci0JCQlp ZiAoZnAtPmZwID09IE5VTEwpCi0JCQl7Ci0JCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCQlm cCA9IE5VTEw7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6 Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlpZiAoY29tcHJlc3Npb25fc3BlYy5sZXZlbCAhPSBaX0RF RkFVTFRfQ09NUFJFU1NJT04pCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiB1c2VyIGhhcyBzcGVjaWZp ZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZQotCQkJCSAqIGl0Ci0J CQkJICovCi0JCQkJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07Ci0KLQkJCQlzbnByaW50Ziht b2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKLQkJCQkJ CSBtb2RlLCBjb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKLQkJCQlpZiAoZmQgPj0gMCkKLQkJCQkJ ZnAtPmZwID0gZ3pkb3BlbihmZCwgbW9kZV9jb21wcmVzc2lvbik7Ci0JCQkJZWxzZQotCQkJCQlm cC0+ZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7Ci0JCQl9Ci0JCQllbHNlCi0J CQl7Ci0JCQkJLyogZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBkZWZh dWx0ICovCi0JCQkJaWYgKGZkID49IDApCi0JCQkJCWZwLT5mcCA9IGd6ZG9wZW4oZmQsIG1vZGUp OwotCQkJCWVsc2UKLQkJCQkJZnAtPmZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOwotCQkJfQotCi0J CQlpZiAoZnAtPmZwID09IE5VTEwpCi0JCQl7Ci0JCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJ CQlmcCA9IE5VTEw7Ci0JCQl9Ci0jZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBu b3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKLSNlbmRpZgot CQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXBy ZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsK LQkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdp dGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwotCQkJYnJlYWs7Ci0JfQotCi0J cmV0dXJuIGZwOworCXJldHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCAoRklMRSAqKSBDRkgtPnBy aXZhdGUpOwogfQogCi1jZnAgKgotY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIg Km1vZGUsCi0JICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKQorc3RhdGljIGNvbnN0IGNoYXIgKgorX2dldF9lcnJvcihDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCkKIHsKLQlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKHBhdGgsIC0xLCBtb2RlLCBjb21wcmVz c2lvbl9zcGVjKTsKKwlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwogfQogCi1jZnAgKgotY2Zkb3Bl bihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYykKK3N0YXRpYyBjaGFyICoKK19nZXRzKGNoYXIgKnB0ciwg aW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQogewotCXJldHVybiBjZm9wZW5faW50 ZXJuYWwoTlVMTCwgZmQsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOworCXJldHVybiBmZ2V0cyhw dHIsIHNpemUsIChGSUxFICopIENGSC0+cHJpdmF0ZSk7CiB9CiAKLWludAotY2ZyZWFkKHZvaWQg KnB0ciwgaW50IHNpemUsIGNmcCAqZnApCitzdGF0aWMgaW50CitfZ2V0YyhDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKIHsKLQlpbnQJCQlyZXQgPSAwOwotCi0JaWYgKHNpemUgPT0gMCkKLQkJcmV0 dXJuIDA7CisJRklMRQkgICAqZnAgPSAoRklMRSAqKSBDRkgtPnByaXZhdGU7CisJaW50CQkJcmV0 OwogCi0Jc3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCisJcmV0ID0gZmdl dGMoZnApOworCWlmIChyZXQgPT0gRU9GKQogCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05F OgotCQkJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXplLCBmcC0+ZnApOwotCQkJaWYgKHJldCAhPSBz aXplICYmICFmZW9mKGZwLT5mcCkpCi0JCQkJUkVBRF9FUlJPUl9FWElUKGZwLT5mcCk7Ci0KLQkJ CWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0J CQlyZXQgPSBnenJlYWQoZnAtPmZwLCBwdHIsIHNpemUpOwotCQkJaWYgKHJldCAhPSBzaXplICYm ICFnemVvZihmcC0+ZnApKQotCQkJewotCQkJCWludAkJCWVycm51bTsKLQkJCQljb25zdCBjaGFy ICplcnJtc2cgPSBnemVycm9yKGZwLT5mcCwgJmVycm51bSk7Ci0KLQkJCQlwZ19mYXRhbCgiY291 bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCi0JCQkJCQkgZXJybnVtID09IFpfRVJS Tk8gPyBzdHJlcnJvcihlcnJubykgOiBlcnJtc2cpOwotCQkJfQotI2Vsc2UKLQkJCXBnX2ZhdGFs KCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCi0JCQkJ CSJnemlwIik7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoK LQkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwg IkxaNCIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fWlNURDoKLQkJCXBnX2Zh dGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsK LQkJCWJyZWFrOworCQlpZiAoIWZlb2YoZnApKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFk IGZyb20gaW5wdXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOwogCX0K IAogCXJldHVybiByZXQ7CiB9CiAKLWludAotY2Z3cml0ZShjb25zdCB2b2lkICpwdHIsIGludCBz aXplLCBjZnAgKmZwKQorc3RhdGljIGludAorX2Nsb3NlKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI KQogeworCUZJTEUJICAgKmZwID0gKEZJTEUgKikgQ0ZILT5wcml2YXRlOwogCWludAkJCXJldCA9 IDA7CiAKLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNh c2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZ3cml0ZShwdHIsIDEsIHNpemUsIGZw LT5mcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhB VkVfTElCWgotCQkJcmV0ID0gZ3p3cml0ZShmcC0+ZnAsIHB0ciwgc2l6ZSk7Ci0jZWxzZQotCQkJ cGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVz IiwKLQkJCQkJImd6aXAiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJ T05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBw b3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgot CQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAi WlNURCIpOwotCQkJYnJlYWs7Ci0JfQorCUNGSC0+cHJpdmF0ZSA9IE5VTEw7CisKKwlpZiAoZnAp CisJCXJldCA9IGZjbG9zZShmcCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQKLWNmZ2V0Yyhj ZnAgKmZwKQorCitzdGF0aWMgaW50CitfZW9mKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQogewot CWludAkJCXJldCA9IDA7CisJcmV0dXJuIGZlb2YoKEZJTEUgKikgQ0ZILT5wcml2YXRlKTsKK30K IAotCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQ R19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0ID0gZmdldGMoZnAtPmZwKTsKLQkJCWlmIChyZXQg PT0gRU9GKQotCQkJCVJFQURfRVJST1JfRVhJVChmcC0+ZnApOworc3RhdGljIGludAorX29wZW4o Y29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKK3sKKwlBc3NlcnQoQ0ZILT5wcml2YXRlID09IE5VTEwpOwogCi0JCQlicmVh azsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJcmV0 ID0gZ3pnZXRjKChnekZpbGUpIGZwLT5mcCk7Ci0JCQlpZiAocmV0ID09IEVPRikKLQkJCXsKLQkJ CQlpZiAoIWd6ZW9mKGZwLT5mcCkpCi0JCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9t IGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCQllbHNlCi0JCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7Ci0JCQl9 Ci0jZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVz c2lvbiB3aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWNhc2Ug UEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMg bm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVT U0lPTl9aU1REOgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBz dXBwb3J0ZWQiLCAiWlNURCIpOwotCQkJYnJlYWs7Ci0JfQorCWlmIChmZCA+PSAwKQorCQlDRkgt PnByaXZhdGUgPSBmZG9wZW4oZHVwKGZkKSwgbW9kZSk7CisJZWxzZQorCQlDRkgtPnByaXZhdGUg PSBmb3BlbihwYXRoLCBtb2RlKTsKIAotCXJldHVybiByZXQ7CisJaWYgKENGSC0+cHJpdmF0ZSA9 PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOwogfQogCi1jaGFyICoKLWNmZ2V0cyhj ZnAgKmZwLCBjaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50Citfb3Blbl93cml0ZShjb25z dCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkK IHsKLQljaGFyCSAgICpyZXQgPSBOVUxMOworCUFzc2VydChDRkgtPnByaXZhdGUgPT0gTlVMTCk7 CiAKLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNhc2Ug UEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZnZXRzKGJ1ZiwgbGVuLCBmcC0+ZnApOwor CUNGSC0+cHJpdmF0ZSA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlmIChDRkgtPnByaXZhdGUgPT0g TlVMTCkKKwkJcmV0dXJuIDE7CiAKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0da SVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBnemdldHMoZnAtPmZwLCBidWYsIGxlbik7 Ci0jZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVz c2lvbiB3aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWNhc2Ug UEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMg bm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVT U0lPTl9aU1REOgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBz dXBwb3J0ZWQiLCAiWlNURCIpOwotCQkJYnJlYWs7Ci0JfQorCXJldHVybiAwOworfQogCi0JcmV0 dXJuIHJldDsKK3N0YXRpYyB2b2lkCitJbml0Q29tcHJlc3NOb25lKENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZILAorCQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpCit7CisJQ0ZILT5vcGVuID0gX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlID0gX29wZW5f d3JpdGU7CisJQ0ZILT5yZWFkID0gX3JlYWQ7CisJQ0ZILT53cml0ZSA9IF93cml0ZTsKKwlDRkgt PmdldHMgPSBfZ2V0czsKKwlDRkgtPmdldGMgPSBfZ2V0YzsKKwlDRkgtPmNsb3NlID0gX2Nsb3Nl OworCUNGSC0+ZW9mID0gX2VvZjsKKwlDRkgtPmdldF9lcnJvciA9IF9nZXRfZXJyb3I7CisKKwlD RkgtPnByaXZhdGUgPSBOVUxMOwogfQogCi1pbnQKLWNmY2xvc2UoY2ZwICpmcCkKKy8qCisgKiBQ dWJsaWMgaW50ZXJmYWNlCisgKi8KK0NvbXByZXNzRmlsZUhhbmRsZSAqCitJbml0Q29tcHJlc3NG aWxlSGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl YykKIHsKLQlpbnQJCQlyZXQgPSAwOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCi0JaWYg KGZwID09IE5VTEwpCi0JewotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4gRU9GOwotCX0KKwlD RkggPSBwZ19tYWxsb2MwKHNpemVvZihDb21wcmVzc0ZpbGVIYW5kbGUpKTsKIAotCXN3aXRjaCAo ZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQorCXN3aXRjaCAoY29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0pCiAJewogCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlyZXQgPSBm Y2xvc2UoZnAtPmZwKTsKLQkJCWZwLT5mcCA9IE5VTEw7Ci0KKwkJCUluaXRDb21wcmVzc05vbmUo Q0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9O X0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBnemNsb3NlKGZwLT5mcCk7Ci0JCQlm cC0+ZnAgPSBOVUxMOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCi0JCQkJCSJnemlwIik7Ci0jZW5kaWYKKwkJCUlu aXRDb21wcmVzc0d6aXAoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKIAkJCWJyZWFrOwogCQljYXNl IFBHX0NPTVBSRVNTSU9OX0xaNDoKLQkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlz IG5vdCB5ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOwotCQkJYnJlYWs7CisJCQkvKiBmYWxsdGhyb3Vn aCAqLwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Np b24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7CisJCQlwZ19mYXRhbCgi aW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKIAkJCWJyZWFrOwogCX0KIAotCWZyZWVfa2Vl cF9lcnJubyhmcCk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBDRkg7CiB9CiAKLWludAotY2Zl b2YoY2ZwICpmcCkKKy8qCisgKiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRo ZSBmaWxlIHRvIG9wZW4sIGFuZCAnbW9kZScgc2hvdWxkCisgKiBiZSBlaXRoZXIgInIiIG9yICJy YiIuCisgKgorICogSWYgdGhlIGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBl bmQgdGhlICIuZ3oiIHN1ZmZpeCAoaWYKKyAqICdwYXRoJyBkb2Vzbid0IGFscmVhZHkgaGF2ZSBp dCkgYW5kIHRyeSBhZ2Fpbi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMKKyAqICdwYXRoJywgdGhp cyB3aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiLCB0cnlpbmcgaW4gdGhhdCBvcmRl ci4KKyAqCisgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4g ZXJybm8uCisgKgorICovCitDb21wcmVzc0ZpbGVIYW5kbGUgKgorSW5pdERpc2NvdmVyQ29tcHJl c3NGaWxlSGFuZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiB7Ci0JaW50 CQkJcmV0ID0gMDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IE5VTEw7CisJc3RydWN0IHN0 YXQgc3Q7CisJY2hhcgkgICAqZm5hbWU7CisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjID0gezB9OwogCi0Jc3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdv cml0aG0pCi0JewotCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlyZXQgPSBmZW9mKGZw LT5mcCk7CisJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05F OwogCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVf TElCWgotCQkJcmV0ID0gZ3plb2YoZnAtPmZwKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgidGhpcyBi dWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAotCQkJCQkiZ3ppcCIp OwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19m YXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsK LQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRhbCgiY29t cHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7Ci0JCQlicmVh azsKLQl9CisJQXNzZXJ0KHN0cmNtcChtb2RlLCAiciIpID09IDAgfHwgc3RyY21wKG1vZGUsICJy YiIpID09IDApOwogCi0JcmV0dXJuIHJldDsKLX0KKwlmbmFtZSA9IHN0cmR1cChwYXRoKTsKIAot Y29uc3QgY2hhciAqCi1nZXRfY2ZwX2Vycm9yKGNmcCAqZnApCi17Ci0JaWYgKGZwLT5jb21wcmVz c2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCWlmIChoYXNTdWZm aXgoZm5hbWUsICIuZ3oiKSkKKwkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01Q UkVTU0lPTl9HWklQOworCWVsc2UKIAl7CisJCWJvb2wJCWV4aXN0czsKKworCQlleGlzdHMgPSAo c3RhdChwYXRoLCAmc3QpID09IDApOworCQkvKiBhdm9pZCB1bnVzZWQgd2FybmluZyBpZiBpdCBp cyBub3QgYnVpbGQgd2l0aCBjb21wcmVzc2lvbiAqLworCQlpZiAoZXhpc3RzKQorCQkJY29tcHJl c3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwogI2lmZGVmIEhBVkVf TElCWgotCQlpbnQJCQllcnJudW07Ci0JCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAt PmZwLCAmZXJybnVtKTsKKwkJaWYgKCFleGlzdHMpCisJCXsKKwkJCWZyZWVfa2VlcF9lcnJubyhm bmFtZSk7CisJCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOworCQkJZXhpc3RzID0g KHN0YXQoZm5hbWUsICZzdCkgPT0gMCk7CiAKLQkJaWYgKGVycm51bSAhPSBaX0VSUk5PKQotCQkJ cmV0dXJuIGVycm1zZzsKLSNlbHNlCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7CisJCQlpZiAoZXhpc3RzKQorCQkJ CWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKKwkJfQog I2VuZGlmCiAJfQogCi0JcmV0dXJuIHN0cmVycm9yKGVycm5vKTsKKwlDRkggPSBJbml0Q29tcHJl c3NGaWxlSGFuZGxlKGNvbXByZXNzaW9uX3NwZWMpOworCWlmIChDRkgtPm9wZW4oZm5hbWUsIC0x LCBtb2RlLCBDRkgpKQorCXsKKwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNGSCA9IE5VTEw7 CisJfQorCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CisKKwlyZXR1cm4gQ0ZIOwogfQogCi0jaWZk ZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50Ci1oYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUs IGNvbnN0IGNoYXIgKnN1ZmZpeCkKK2ludAorRGVzdHJveUNvbXByZXNzRmlsZUhhbmRsZShDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCkKIHsKLQlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxl bmFtZSk7Ci0JaW50CQkJc3VmZml4bGVuID0gc3RybGVuKHN1ZmZpeCk7CisJaW50CQkJcmV0ID0g MDsKIAotCWlmIChmaWxlbmFtZWxlbiA8IHN1ZmZpeGxlbikKLQkJcmV0dXJuIDA7CisJaWYgKENG SC0+cHJpdmF0ZSkKKwkJcmV0ID0gQ0ZILT5jbG9zZShDRkgpOwogCi0JcmV0dXJuIG1lbWNtcCgm ZmlsZW5hbWVbZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5dLAotCQkJCSAgc3VmZml4LAotCQkJCSAg c3VmZml4bGVuKSA9PSAwOwotfQorCWZyZWVfa2VlcF9lcnJubyhDRkgpOwogCi0jZW5kaWYKKwly ZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgg Yi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAppbmRleCA2ZmFkNmMyY2Q1Li4zMDUzZGM0 M2RkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysgYi9zcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaApAQCAtMzcsMzQgKzM3LDYzIEBAIHR5cGVkZWYgdm9p ZCAoKldyaXRlRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpidWYsIHNpemVf dCBsZW4pOwogICovCiB0eXBlZGVmIHNpemVfdCAoKlJlYWRGdW5jKSAoQXJjaGl2ZUhhbmRsZSAq QUgsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKIAotLyogc3RydWN0IGRlZmluaXRpb24g YXBwZWFycyBpbiBjb21wcmVzc19pby5jICovCiB0eXBlZGVmIHN0cnVjdCBDb21wcmVzc29yU3Rh dGUgQ29tcHJlc3NvclN0YXRlOworc3RydWN0IENvbXByZXNzb3JTdGF0ZQoreworCS8qCisJICog UmVhZCBhbGwgY29tcHJlc3NlZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbSAodmlhIHJlYWRG KSBhbmQgcHJpbnQgaXQKKwkgKiBvdXQgd2l0aCBhaHdyaXRlKCkuCisJICovCisJdm9pZAkJKCpy ZWFkRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKKworCS8q CisJICogQ29tcHJlc3MgYW5kIHdyaXRlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0gKHZpYSB3 cml0ZUYpLgorCSAqLworCXZvaWQJCSgqd3JpdGVEYXRhKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIENv bXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExl bik7CisJdm9pZAkJKCplbmQpIChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cyk7CisKKwlSZWFkRnVuYwlyZWFkRjsKKwlXcml0ZUZ1bmMJd3JpdGVGOworCisJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjOworCXZvaWQJICAgKnByaXZhdGU7Cit9 OwogCiBleHRlcm4gQ29tcHJlc3NvclN0YXRlICpBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkJCQkJCQkJCSAgIFJl YWRGdW5jIHJlYWRGLAogCQkJCQkJCQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYpOwotZXh0ZXJuIHZv aWQgUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwKLQkJCQkJCQkJY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAotCQkJCQkJCQlSZWFk RnVuYyByZWFkRik7Ci1leHRlcm4gdm9pZCBXcml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGRMZW4pOwogZXh0ZXJuIHZvaWQgRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CiAKKy8qCisgKiBDb21wcmVzcyBGaWxlIEhhbmRsZQor ICovCit0eXBlZGVmIHN0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUgQ29tcHJlc3NGaWxlSGFuZGxl OworCitzdHJ1Y3QgQ29tcHJlc3NGaWxlSGFuZGxlCit7CisJaW50CQkJKCpvcGVuKSAoY29uc3Qg Y2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAorCQkJCQkJIENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKTsKKwlpbnQJCQkoKm9wZW5fd3JpdGUpIChjb25zdCBjaGFyICpwYXRoLCBj b25zdCBjaGFyICptb2RlLAorCQkJCQkJCSAgIENvbXByZXNzRmlsZUhhbmRsZSAqY3h0KTsKKwlz aXplX3QJCSgqcmVhZCkgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKTsKKwlzaXplX3QJCSgqd3JpdGUpIChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXpl LAorCQkJCQkJICBzdHJ1Y3QgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCWNoYXIJICAgKigq Z2V0cykgKGNoYXIgKnMsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisJaW50 CQkJKCpnZXRjKSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCWludAkJCSgqZW9mKSAoQ29t cHJlc3NGaWxlSGFuZGxlICpDRkgpOworCWludAkJCSgqY2xvc2UpIChDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCk7CisJY29uc3QgY2hhciAqKCpnZXRfZXJyb3IpIChDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCk7CisKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisJ dm9pZAkgICAqcHJpdmF0ZTsKK307CiAKLXR5cGVkZWYgc3RydWN0IGNmcCBjZnA7CitleHRlcm4g Q29tcHJlc3NGaWxlSGFuZGxlICpJbml0Q29tcHJlc3NGaWxlSGFuZGxlKAorCQkJCQkJCQkJCQkJ ICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwogCi1l eHRlcm4gY2ZwICpjZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJ CQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwot ZXh0ZXJuIGNmcCAqY2Zkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJCXBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1leHRlcm4gY2ZwICpjZm9w ZW5fcmVhZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKTsKLWV4dGVybiBjZnAg KmNmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCQkJCQkJ IGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1leHRl cm4gaW50CWNmcmVhZCh2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKTsKLWV4dGVybiBpbnQJ Y2Z3cml0ZShjb25zdCB2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKTsKLWV4dGVybiBpbnQJ Y2ZnZXRjKGNmcCAqZnApOwotZXh0ZXJuIGNoYXIgKmNmZ2V0cyhjZnAgKmZwLCBjaGFyICpidWYs IGludCBsZW4pOwotZXh0ZXJuIGludAljZmNsb3NlKGNmcCAqZnApOwotZXh0ZXJuIGludAljZmVv ZihjZnAgKmZwKTsKLWV4dGVybiBjb25zdCBjaGFyICpnZXRfY2ZwX2Vycm9yKGNmcCAqZnApOwor ZXh0ZXJuIENvbXByZXNzRmlsZUhhbmRsZSAqSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxl KGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbW9kZSk7CiAK K2V4dGVybiBpbnQJRGVzdHJveUNvbXByZXNzRmlsZUhhbmRsZShDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBi L3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCBkOTZlNTY2ODQ2Li4wYzczYTQ3MDdl IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL21lc29uLmJ1aWxkCkBAIC0xLDUgKzEsNiBAQAogcGdfZHVtcF9jb21tb25fc291cmNl cyA9IGZpbGVzKAogICAnY29tcHJlc3NfaW8uYycsCisgICdjb21wcmVzc19nemlwLmMnLAogICAn ZHVtcHV0aWxzLmMnLAogICAncGFyYWxsZWwuYycsCiAgICdwZ19iYWNrdXBfYXJjaGl2ZXIuYycs CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggZmI5NDMxN2FkOS4uMWEzYjMw OTQ4NCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtOTUsOCArOTUsOCBA QCBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9p ZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVf dCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBj aGFyICpmaWxlbmFtZSwKIAkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpOwotc3RhdGljIGNmcCAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpB SCk7Ci1zdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNh dmVkT3V0cHV0KTsKK3N0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBpbnQJcmVzdG9y ZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc19wYXJh bGxlbCk7CiBzdGF0aWMgdm9pZCByZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmsoQXJjaGl2ZUhh bmRsZSAqQUgsCkBAIC0yNzIsNyArMjcyLDcgQEAgQ2xvc2VBcmNoaXZlKEFyY2hpdmUgKkFIWCkK IAogCS8qIENsb3NlIHRoZSBvdXRwdXQgKi8KIAllcnJubyA9IDA7Ci0JcmVzID0gY2ZjbG9zZShB SC0+T0YpOworCXJlcyA9IERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPk9GKTsKIAogCWlm IChyZXMgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0i KTsKQEAgLTM1NSw3ICszNTUsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJYm9v bAkJcGFyYWxsZWxfbW9kZTsKIAlib29sCQlzdXBwb3J0c19jb21wcmVzc2lvbjsKIAlUb2NFbnRy eSAgICp0ZTsKLQljZnAJCSAgICpzYXY7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpzYXY7CiAKIAlB SC0+c3RhZ2UgPSBTVEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTExMjcsNyArMTEyNyw3IEBAIFBy aW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAJVG9jRW50cnkgICAqdGU7CiAJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAl0ZVNlY3Rpb24J Y3VyU2VjdGlvbjsKLQljZnAJCSAgICpzYXY7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpzYXY7CiAJ Y29uc3QgY2hhciAqZm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCkBAIC0xMTQzLDkg KzExNDMsMTAgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAkJc3RyY3B5KHN0YW1w X3N0ciwgIlt1bmtub3duXSIpOwogCiAJYWhwcmludGYoQUgsICI7XG47IEFyY2hpdmUgY3JlYXRl ZCBhdCAlc1xuIiwgc3RhbXBfc3RyKTsKLQlhaHByaW50ZihBSCwgIjsgICAgIGRibmFtZTogJXNc bjsgICAgIFRPQyBFbnRyaWVzOiAlZFxuOyAgICAgQ29tcHJlc3Npb246ICVkXG4iLAorCWFocHJp bnRmKEFILCAiOyAgICAgZGJuYW1lOiAlc1xuOyAgICAgVE9DIEVudHJpZXM6ICVkXG47ICAgICBD b21wcmVzc2lvbjogJXNcbiIsCiAJCQkgc2FuaXRpemVfbGluZShBSC0+YXJjaGRibmFtZSwgZmFs c2UpLAotCQkJIEFILT50b2NDb3VudCwgQUgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOworCQkJ IEFILT50b2NDb3VudCwKKwkJCSBnZXRfY29tcHJlc3NfYWxnb3JpdGhtX25hbWUoQUgtPmNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtKSk7CiAKIAlzd2l0Y2ggKEFILT5mb3JtYXQpCiAJewpAQCAt MTUwMiw2ICsxNTAzLDcgQEAgc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpB SCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjKQogeworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNv bnN0IGNoYXIgKm1vZGU7CiAJaW50CQkJZm4gPSAtMTsKIApAQCAtMTUyNCwzMyArMTUyNiwzMiBA QCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVs c2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9XOwogCi0JaWYgKGZuID49IDApCi0JCUFILT5PRiA9IGNm ZG9wZW4oZHVwKGZuKSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JZWxzZQotCQlBSC0+T0Yg PSBjZm9wZW4oZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOworCUNGSCA9IEluaXRD b21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Npb25fc3BlYyk7CiAKLQlpZiAoIUFILT5PRikKKwlp ZiAoQ0ZILT5vcGVuKGZpbGVuYW1lLCBmbiwgbW9kZSwgQ0ZIKSkKIAl7CiAJCWlmIChmaWxlbmFt ZSkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwg ZmlsZW5hbWUpOwogCQllbHNlCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZp bGU6ICVtIik7CiAJfQorCisJQUgtPk9GID0gQ0ZIOwogfQogCi1zdGF0aWMgY2ZwICoKK3N0YXRp YyBDb21wcmVzc0ZpbGVIYW5kbGUgKgogU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsK LQlyZXR1cm4gKGNmcCAqKSBBSC0+T0Y7CisJcmV0dXJuIChDb21wcmVzc0ZpbGVIYW5kbGUgKikg QUgtPk9GOwogfQogCiBzdGF0aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpB SCwgY2ZwICpzYXZlZE91dHB1dCkKK1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENv bXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCiAJZXJybm8g PSAwOwotCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKKwlyZXMgPSBEZXN0cm95Q29tcHJlc3NGaWxl SGFuZGxlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg Y2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0xNjg5LDcgKzE2OTAsMTEgQEAgYWh3cml0ZShj b25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIEFyY2hpdmVIYW5kbGUg KkFIKQogCWVsc2UgaWYgKFJlc3RvcmluZ1RvREIoQUgpKQogCQlieXRlc193cml0dGVuID0gRXhl Y3V0ZVNxbENvbW1hbmRCdWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAq IG5tZW1iKTsKIAllbHNlCi0JCWJ5dGVzX3dyaXR0ZW4gPSBjZndyaXRlKHB0ciwgc2l6ZSAqIG5t ZW1iLCBBSC0+T0YpOworCXsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSAoQ29tcHJlc3NG aWxlSGFuZGxlICopIEFILT5PRjsKKworCQlieXRlc193cml0dGVuID0gQ0ZILT53cml0ZShwdHIs IHNpemUgKiBubWVtYiwgQ0ZIKTsKKwl9CiAKIAlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBzaXplICog bm1lbWIpCiAJCVdSSVRFX0VSUk9SX0VYSVQ7CkBAIC0yMDMxLDYgKzIwMzYsMTggQEAgUmVhZFN0 cihBcmNoaXZlSGFuZGxlICpBSCkKIAlyZXR1cm4gYnVmOwogfQogCitzdGF0aWMgYm9vbAorX2Zp bGVFeGlzdHNJbkRpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1l KQoreworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNu cHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BB VEgpCisJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsK KworCXJldHVybiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsK K30KKwogc3RhdGljIGludAogX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpB SCkKIHsKQEAgLTIwNjEsMjYgKzIwNzgsMTIgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNo aXZlSGFuZGxlICpBSCkKIAkJICovCiAJCWlmIChzdGF0KEFILT5mU3BlYywgJnN0KSA9PSAwICYm IFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCXsKLQkJCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOwotCi0J CQlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy90b2MuZGF0IiwgQUgtPmZTcGVjKSA+ PSBNQVhQR1BBVEgpCi0JCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVz XCIiLAotCQkJCQkJIEFILT5mU3BlYyk7Ci0JCQlpZiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBT X0lTUkVHKHN0LnN0X21vZGUpKQotCQkJewotCQkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5 OworCQkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJCQlpZiAoX2ZpbGVFeGlzdHNJbkRp cmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0IikpCiAJCQkJcmV0dXJuIEFILT5mb3JtYXQ7Ci0J CQl9Ci0KICNpZmRlZiBIQVZFX0xJQloKLQkJCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwg IiVzL3RvYy5kYXQuZ3oiLCBBSC0+ZlNwZWMpID49IE1BWFBHUEFUSCkKLQkJCQlwZ19mYXRhbCgi ZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsCi0JCQkJCQkgQUgtPmZTcGVjKTsKLQkJ CWlmIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCi0JCQl7Ci0J CQkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJCQlpZiAoX2ZpbGVFeGlzdHNJbkRpcmVj dG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Lmd6IikpCiAJCQkJcmV0dXJuIEFILT5mb3JtYXQ7Ci0J CQl9CiAjZW5kaWYKIAkJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVh ciB0byBiZSBhIHZhbGlkIGFyY2hpdmUgKFwidG9jLmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJ CQkJCSBBSC0+ZlNwZWMpOwpAQCAtMjE3OCw2ICsyMTgxLDcgQEAgX2FsbG9jQUgoY29uc3QgY2hh ciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCQkgU2V0dXBXb3JrZXJQdHJU eXBlIHNldHVwV29ya2VyUHRyKQogewogCUFyY2hpdmVIYW5kbGUgKkFIOworCUNvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIOwogCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNzX3Nw ZWMgPSB7MH07CiAKIAlwZ19sb2dfZGVidWcoImFsbG9jYXRpbmcgQUggZm9yICVzLCBmb3JtYXQg JWQiLApAQCAtMjIzMyw3ICsyMjM3LDEwIEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVj LCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAogCS8qIE9wZW4gc3Rkb3V0IHdpdGggbm8gY29t cHJlc3Npb24gZm9yIEFIIG91dHB1dCBoYW5kbGUgKi8KIAlvdXRfY29tcHJlc3Nfc3BlYy5hbGdv cml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZpbGVu byhzdGRvdXQpKSwgUEdfQklOQVJZX0EsIG91dF9jb21wcmVzc19zcGVjKTsKKwlDRkggPSBJbml0 Q29tcHJlc3NGaWxlSGFuZGxlKG91dF9jb21wcmVzc19zcGVjKTsKKwlpZiAoQ0ZILT5vcGVuKE5V TEwsIGZpbGVubyhzdGRvdXQpLCBQR19CSU5BUllfQSwgQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIHN0ZG91dCBmb3IgYXBwZW5kaW5nOiAlbSIpOworCUFILT5PRiA9IENGSDsKIAog CS8qCiAJICogT24gV2luZG93cywgd2UgbmVlZCB0byB1c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93 cml0ZSBub24tdGV4dCBmaWxlcywKQEAgLTM2NDYsMTIgKzM2NTMsNyBAQCBXcml0ZUhlYWQoQXJj aGl2ZUhhbmRsZSAqQUgpCiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmludFNpemUpOwogCUFI LT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5vZmZTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBB SC0+Zm9ybWF0KTsKLQkvKgotCSAqIEZvciBub3cgdGhlIGNvbXByZXNzaW9uIHR5cGUgaXMgaW1w bGllZCBieSB0aGUgbGV2ZWwuICBUaGlzIHdpbGwgbmVlZAotCSAqIHRvIGNoYW5nZSBvbmNlIHN1 cHBvcnQgZm9yIG1vcmUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBpcyBhZGRlZCwKLQkgKiByZXF1 aXJpbmcgYSBmb3JtYXQgYnVtcC4KLQkgKi8KLQlXcml0ZUludChBSCwgQUgtPmNvbXByZXNzaW9u X3NwZWMubGV2ZWwpOworCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5jb21wcmVzc2lvbl9zcGVj LmFsZ29yaXRobSk7CiAJY3J0bSA9ICpsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKTsKIAlXcml0 ZUludChBSCwgY3J0bS50bV9zZWMpOwogCVdyaXRlSW50KEFILCBjcnRtLnRtX21pbik7CkBAIC0z NzIyLDEwICszNzI0LDExIEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlwZ19mYXRh bCgiZXhwZWN0ZWQgZm9ybWF0ICglZCkgZGlmZmVycyBmcm9tIGZvcm1hdCBmb3VuZCBpbiBmaWxl ICglZCkiLAogCQkJCSBBSC0+Zm9ybWF0LCBmbXQpOwogCi0JLyogR3Vlc3MgdGhlIGNvbXByZXNz aW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUgbGV2ZWwgKi8KLQlBSC0+Y29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZF UlNfMV8yKQorCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8xNSkKKwkJQUgtPmNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKKwllbHNlIGlmIChBSC0+ dmVyc2lvbiA+PSBLX1ZFUlNfMV8yKQogCXsKKwkJLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1l dGhvZCBiYXNlZCBvbiB0aGUgbGV2ZWwgKi8KIAkJaWYgKEFILT52ZXJzaW9uIDwgS19WRVJTXzFf NCkKIAkJCUFILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsK IAkJZWxzZQpAQCAtMzczNywxMCArMzc0MCwxNyBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpB SCkKIAllbHNlCiAJCUFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNT SU9OX0daSVA7CiAKKwlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NP TVBSRVNTSU9OX05PTkUpCisJeworCQlib29sCQl1bnN1cHBvcnRlZCA9IGZhbHNlOworCiAjaWZu ZGVmIEhBVkVfTElCWgotCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fR1pJUCkKLQkJcGdfZmF0YWwoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0 IHRoaXMgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24iKTsKKwkJaWYg KEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQor CQkJdW5zdXBwb3J0ZWQgPSB0cnVlOwogI2VuZGlmCisJCWlmICh1bnN1cHBvcnRlZCkKKwkJCXBn X2ZhdGFsKCJhcmNoaXZlIGlzIGNvbXByZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2Vz IG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIik7CisJfQogCiAJaWYgKEFILT52ZXJzaW9uID49IEtf VkVSU18xXzQpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IDQ3MjVl NDk3NDcuLjE4YjM4YzE3YWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAg LTY1LDEwICs2NSwxMyBAQAogI2RlZmluZSBLX1ZFUlNfMV8xMyBNQUtFX0FSQ0hJVkVfVkVSU0lP TigxLCAxMywgMCkJLyogY2hhbmdlIHNlYXJjaF9wYXRoCiAJCQkJCQkJCQkJCQkJICogYmVoYXZp b3IgKi8KICNkZWZpbmUgS19WRVJTXzFfMTQgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTQsIDAp CS8qIGFkZCB0YWJsZWFtICovCisjZGVmaW5lIEtfVkVSU18xXzE1IE1BS0VfQVJDSElWRV9WRVJT SU9OKDEsIDE1LCAwKQkvKiBhZGQKKwkJCQkJCQkJCQkJCQkgKiBjb21wcmVzc2lvbl9hbGdvcml0 aG0KKwkJCQkJCQkJCQkJCQkgKiBpbiBoZWFkZXIgKi8KIAogLyogQ3VycmVudCBhcmNoaXZlIHZl cnNpb24gbnVtYmVyICh0aGUgZm9ybWF0IHdlIGNhbiBvdXRwdXQpICovCiAjZGVmaW5lIEtfVkVS U19NQUpPUiAxCi0jZGVmaW5lIEtfVkVSU19NSU5PUiAxNAorI2RlZmluZSBLX1ZFUlNfTUlOT1Ig MTUKICNkZWZpbmUgS19WRVJTX1JFViAwCiAjZGVmaW5lIEtfVkVSU19TRUxGIE1BS0VfQVJDSElW RV9WRVJTSU9OKEtfVkVSU19NQUpPUiwgS19WRVJTX01JTk9SLCBLX1ZFUlNfUkVWKQogCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9jdXN0b20uYwppbmRleCBkMWU1NDY0NGE5Li41MTJhYjA0M2FmIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKQEAgLTI5OCw3ICsyOTgsOSBAQCBfU3RhcnREYXRh KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAJX1dyaXRlQnl0ZShBSCwgQkxLX0RB VEEpOwkvKiBCbG9jayB0eXBlICovCiAJV3JpdGVJbnQoQUgsIHRlLT5kdW1wSWQpOwkvKiBGb3Ig c2FuaXR5IGNoZWNrICovCiAKLQljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21w cmVzc2lvbl9zcGVjLCBfQ3VzdG9tV3JpdGVGdW5jKTsKKwljdHgtPmNzID0gQWxsb2NhdGVDb21w cmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLAorCQkJCQkJCQkgTlVMTCwKKwkJCQkJCQkJIF9D dXN0b21Xcml0ZUZ1bmMpOwogfQogCiAvKgpAQCAtMzE3LDE1ICszMTksMTUgQEAgX1dyaXRlRGF0 YShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCiAJQ29t cHJlc3NvclN0YXRlICpjcyA9IGN0eC0+Y3M7CiAKIAlpZiAoZExlbiA+IDApCi0JCS8qIFdyaXRl RGF0YVRvQXJjaGl2ZSgpIGludGVybmFsbHkgdGhyb3dzIHdyaXRlIGVycm9ycyAqLwotCQlXcml0 ZURhdGFUb0FyY2hpdmUoQUgsIGNzLCBkYXRhLCBkTGVuKTsKKwkJLyogd3JpdGVEYXRhKCkgaW50 ZXJuYWxseSB0aHJvd3Mgd3JpdGUgZXJyb3JzICovCisJCWNzLT53cml0ZURhdGEoQUgsIGNzLCBk YXRhLCBkTGVuKTsKIH0KIAogLyoKICAqIENhbGxlZCBieSB0aGUgYXJjaGl2ZXIgd2hlbiBhIGR1 bXBlcidzICdEYXRhRHVtcGVyJyByb3V0aW5lIGhhcwogICogZmluaXNoZWQuCiAgKgotICogT3B0 aW9uYWwuCisgKiBNYW5kYXRvcnkuCiAgKi8KIHN0YXRpYyB2b2lkCiBfRW5kRGF0YShBcmNoaXZl SGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQpAQCAtMzMzLDYgKzMzNSw4IEBAIF9FbmREYXRhKEFy Y2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENv bnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAKIAlFbmRDb21wcmVzc29yKEFILCBjdHgtPmNzKTsK KwljdHgtPmNzID0gTlVMTDsKKwogCS8qIFNlbmQgdGhlIGVuZCBtYXJrZXIgKi8KIAlXcml0ZUlu dChBSCwgMCk7CiB9CkBAIC0zNzcsNyArMzgxLDkgQEAgX1N0YXJ0TE8oQXJjaGl2ZUhhbmRsZSAq QUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIAogCVdyaXRlSW50KEFILCBvaWQpOwogCi0JY3R4 LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVdy aXRlRnVuYyk7CisJY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25f c3BlYywKKwkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAog LyoKQEAgLTU2Niw3ICs1NzIsMTIgQEAgX1ByaW50VG9jRGF0YShBcmNoaXZlSGFuZGxlICpBSCwg VG9jRW50cnkgKnRlKQogc3RhdGljIHZvaWQKIF9QcmludERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgp CiB7Ci0JUmVhZERhdGFGcm9tQXJjaGl2ZShBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMsIF9DdXN0 b21SZWFkRnVuYyk7CisJQ29tcHJlc3NvclN0YXRlICpjczsKKworCWNzID0gQWxsb2NhdGVDb21w cmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLAorCQkJCQkJCV9DdXN0b21SZWFkRnVuYywgTlVM TCk7CisJY3MtPnJlYWREYXRhKEFILCBjcyk7CisJRW5kQ29tcHJlc3NvcihBSCwgY3MpOwogfQog CiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJl Y3RvcnkuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKaW5kZXggZjZh ZWU3NzVlYi4uNDE4MjcxOGIwYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9kaXJlY3RvcnkuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5j CkBAIC01MCw5ICs1MCw4IEBAIHR5cGVkZWYgc3RydWN0CiAJICovCiAJY2hhcgkgICAqZGlyZWN0 b3J5OwogCi0JY2ZwCQkgICAqZGF0YUZIOwkJCS8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAq LwotCi0JY2ZwCQkgICAqTE9zVG9jRkg7CQkvKiBmaWxlIGhhbmRsZSBmb3IgYmxvYnMudG9jICov CisJQ29tcHJlc3NGaWxlSGFuZGxlICpkYXRhRkg7IC8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmls ZSAqLworCUNvbXByZXNzRmlsZUhhbmRsZSAqTE9zVG9jRkg7IC8qIGZpbGUgaGFuZGxlIGZvciBi bG9icy50b2MgKi8KIAlQYXJhbGxlbFN0YXRlICpwc3RhdGU7CQkvKiBmb3IgcGFyYWxsZWwgYmFj a3VwIC8gcmVzdG9yZSAqLwogfSBsY2xDb250ZXh0OwogCkBAIC0xOTgsMTEgKzE5NywxMSBAQCBJ bml0QXJjaGl2ZUZtdF9EaXJlY3RvcnkoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZQogCXsJCQkJ CQkJLyogUmVhZCBNb2RlICovCiAJCWNoYXIJCWZuYW1lW01BWFBHUEFUSF07Ci0JCWNmcAkJICAg KnRvY0ZIOworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKnRvY0ZIOwogCiAJCXNldEZpbGVQYXRoKEFI LCBmbmFtZSwgInRvYy5kYXQiKTsKIAotCQl0b2NGSCA9IGNmb3Blbl9yZWFkKGZuYW1lLCBQR19C SU5BUllfUik7CisJCXRvY0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGZuYW1l LCBQR19CSU5BUllfUik7CiAJCWlmICh0b2NGSCA9PSBOVUxMKQogCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIGlucHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIApAQCAtMjE4LDcgKzIx Nyw3IEBAIEluaXRBcmNoaXZlRm10X0RpcmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAkJUmVh ZFRvYyhBSCk7CiAKIAkJLyogTm90aGluZyBlbHNlIGluIHRoZSBmaWxlLCBzbyBjbG9zZSBpdCBh Z2Fpbi4uLiAqLwotCQlpZiAoY2ZjbG9zZSh0b2NGSCkgIT0gMCkKKwkJaWYgKERlc3Ryb3lDb21w cmVzc0ZpbGVIYW5kbGUodG9jRkgpICE9IDApCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3Nl IFRPQyBmaWxlOiAlbSIpOwogCQljdHgtPmRhdGFGSCA9IE5VTEw7CiAJfQpAQCAtMzI3LDkgKzMy Niw5IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAogCXNl dEZpbGVQYXRoKEFILCBmbmFtZSwgdGN0eC0+ZmlsZW5hbWUpOwogCi0JY3R4LT5kYXRhRkggPSBj Zm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLAotCQkJCQkJCSAgIEFILT5jb21wcmVzc2lv bl9zcGVjKTsKLQlpZiAoY3R4LT5kYXRhRkggPT0gTlVMTCkKKwljdHgtPmRhdGFGSCA9IEluaXRD b21wcmVzc0ZpbGVIYW5kbGUoQUgtPmNvbXByZXNzaW9uX3NwZWMpOworCisJaWYgKGN0eC0+ZGF0 YUZILT5vcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRhRkgpKQogCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0K IApAQCAtMzQ2LDE1ICszNDUsMTYgQEAgc3RhdGljIHZvaWQKIF9Xcml0ZURhdGEoQXJjaGl2ZUhh bmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQogewogCWxjbENvbnRleHQg KmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGRMZW4gPiAwICYmIGNm d3JpdGUoZGF0YSwgZExlbiwgY3R4LT5kYXRhRkgpICE9IGRMZW4pCisJaWYgKGRMZW4gPiAwICYm IENGSC0+d3JpdGUoZGF0YSwgZExlbiwgQ0ZIKSAhPSBkTGVuKQogCXsKIAkJLyogaWYgd3JpdGUg ZGlkbid0IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlp ZiAoZXJybm8gPT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90 IHdyaXRlIHRvIG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRh RkgpKTsKKwkJCQkgQ0ZILT5nZXRfZXJyb3IoQ0ZIKSk7CiAJfQogfQogCkBAIC0zNzAsNyArMzcw LDcgQEAgX0VuZERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlsY2xDb250 ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAogCS8qIENsb3NlIHRo ZSBmaWxlICovCi0JaWYgKGNmY2xvc2UoY3R4LT5kYXRhRkgpICE9IDApCisJaWYgKERlc3Ryb3lD b21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5kYXRhRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgY2xvc2UgZGF0YSBmaWxlOiAlbSIpOwogCiAJY3R4LT5kYXRhRkggPSBOVUxMOwpAQCAtMzg1 LDI2ICszODUsMjUgQEAgX1ByaW50RmlsZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIgKmZp bGVuYW1lKQogCXNpemVfdAkJY250OwogCWNoYXIJICAgKmJ1ZjsKIAlzaXplX3QJCWJ1ZmxlbjsK LQljZnAJCSAgICpjZnA7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAKIAlpZiAoIWZpbGVu YW1lKQogCQlyZXR1cm47CiAKLQljZnAgPSBjZm9wZW5fcmVhZChmaWxlbmFtZSwgUEdfQklOQVJZ X1IpOwotCi0JaWYgKCFjZnApCisJQ0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxl KGZpbGVuYW1lLCBQR19CSU5BUllfUik7CisJaWYgKCFDRkgpCiAJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBpbnB1dCBmaWxlIFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CiAKIAlidWYgPSBwZ19t YWxsb2MoWkxJQl9PVVRfU0laRSk7CiAJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKIAotCXdoaWxl ICgoY250ID0gY2ZyZWFkKGJ1ZiwgYnVmbGVuLCBjZnApKSkKKwl3aGlsZSAoKGNudCA9IENGSC0+ cmVhZChidWYsIGJ1ZmxlbiwgQ0ZIKSkpCiAJewogCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7 CiAJfQogCiAJZnJlZShidWYpOwotCWlmIChjZmNsb3NlKGNmcCkgIT0gMCkKKwlpZiAoRGVzdHJv eUNvbXByZXNzRmlsZUhhbmRsZShDRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xv c2UgZGF0YSBmaWxlIFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CiB9CiAKQEAgLTQzNSw2ICs0MzQs NyBAQCBfTG9hZExPcyhBcmNoaXZlSGFuZGxlICpBSCkKIHsKIAlPaWQJCQlvaWQ7CiAJbGNsQ29u dGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxl SGFuZGxlICpDRkg7CiAJY2hhcgkJdG9jZm5hbWVbTUFYUEdQQVRIXTsKIAljaGFyCQlsaW5lW01B WFBHUEFUSF07CiAKQEAgLTQ0MiwxNCArNDQyLDE0IEBAIF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUg KkFIKQogCiAJc2V0RmlsZVBhdGgoQUgsIHRvY2ZuYW1lLCAiYmxvYnMudG9jIik7CiAKLQljdHgt PkxPc1RvY0ZIID0gY2ZvcGVuX3JlYWQodG9jZm5hbWUsIFBHX0JJTkFSWV9SKTsKKwlDRkggPSBj dHgtPkxPc1RvY0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKHRvY2ZuYW1lLCBQ R19CSU5BUllfUik7CiAKIAlpZiAoY3R4LT5MT3NUb2NGSCA9PSBOVUxMKQogCQlwZ19mYXRhbCgi Y291bGQgbm90IG9wZW4gbGFyZ2Ugb2JqZWN0IFRPQyBmaWxlIFwiJXNcIiBmb3IgaW5wdXQ6ICVt IiwKIAkJCQkgdG9jZm5hbWUpOwogCiAJLyogUmVhZCB0aGUgTE9zIFRPQyBmaWxlIGxpbmUtYnkt bGluZSwgYW5kIHByb2Nlc3MgZWFjaCBMTyAqLwotCXdoaWxlICgoY2ZnZXRzKGN0eC0+TE9zVG9j RkgsIGxpbmUsIE1BWFBHUEFUSCkpICE9IE5VTEwpCisJd2hpbGUgKChDRkgtPmdldHMobGluZSwg TUFYUEdQQVRILCBDRkgpKSAhPSBOVUxMKQogCXsKIAkJY2hhcgkJbG9mbmFtZVtNQVhQR1BBVEgg KyAxXTsKIAkJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwpAQCAtNDY0LDExICs0NjQsMTEgQEAgX0xv YWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCV9QcmludEZpbGVEYXRhKEFILCBwYXRoKTsKIAkJ RW5kUmVzdG9yZUxPKEFILCBvaWQpOwogCX0KLQlpZiAoIWNmZW9mKGN0eC0+TE9zVG9jRkgpKQor CWlmICghQ0ZILT5lb2YoQ0ZIKSkKIAkJcGdfZmF0YWwoImVycm9yIHJlYWRpbmcgbGFyZ2Ugb2Jq ZWN0IFRPQyBmaWxlIFwiJXNcIiIsCiAJCQkJIHRvY2ZuYW1lKTsKIAotCWlmIChjZmNsb3NlKGN0 eC0+TE9zVG9jRkgpICE9IDApCisJaWYgKERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5M T3NUb2NGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBsYXJnZSBvYmplY3Qg VE9DIGZpbGUgXCIlc1wiOiAlbSIsCiAJCQkJIHRvY2ZuYW1lKTsKIApAQCAtNDg4LDE1ICs0ODgs MTYgQEAgX1dyaXRlQnl0ZShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgaW50IGkpCiB7CiAJdW5z aWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpIGk7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxj bENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBj dHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsKLQlpZiAoY2Z3cml0ZSgmYywgMSwgY3R4LT5kYXRh RkgpICE9IDEpCisJaWYgKENGSC0+d3JpdGUoJmMsIDEsIENGSCkgIT0gMSkKIAl7CiAJCS8qIGlm IHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2Ug Ki8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJubyA9IEVOT1NQQzsKIAkJcGdfZmF0YWwoImNv dWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMiLAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0 eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vycm9yKENGSCkpOwogCX0KIAogCXJldHVybiAx OwpAQCAtNTEyLDggKzUxMyw5IEBAIHN0YXRpYyBpbnQKIF9SZWFkQnl0ZShBcmNoaXZlSGFuZGxl ICpBSCkKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0 YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCi0JcmV0dXJuIGNm Z2V0YyhjdHgtPmRhdGFGSCk7CisJcmV0dXJuIENGSC0+Z2V0YyhDRkgpOwogfQogCiAvKgpAQCAt NTI0LDE1ICs1MjYsMTYgQEAgc3RhdGljIHZvaWQKIF9Xcml0ZUJ1ZihBcmNoaXZlSGFuZGxlICpB SCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewogCWxjbENvbnRleHQgKmN0eCA9IChs Y2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0g Y3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGNmd3JpdGUoYnVmLCBsZW4sIGN0eC0+ ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+d3JpdGUoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQog CXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8g ZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8gPT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlw Z19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9j ZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJCQkgQ0ZILT5nZXRfZXJyb3IoQ0ZIKSk7CiAJfQog fQogCkBAIC01NDUsMTIgKzU0OCwxMyBAQCBzdGF0aWMgdm9pZAogX1JlYWRCdWYoQXJjaGl2ZUhh bmRsZSAqQUgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAo bGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9 IGN0eC0+ZGF0YUZIOwogCiAJLyoKLQkgKiBJZiB0aGVyZSB3YXMgYW4gSS9PIGVycm9yLCB3ZSBh bHJlYWR5IGV4aXRlZCBpbiBjZnJlYWQoKSwgc28gaGVyZSB3ZQorCSAqIElmIHRoZXJlIHdhcyBh biBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhpdGVkIGluIHJlYWRGKCksIHNvIGhlcmUgd2UKIAkg KiBleGl0IG9uIHNob3J0IHJlYWRzLgogCSAqLwotCWlmIChjZnJlYWQoYnVmLCBsZW4sIGN0eC0+ ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+cmVhZChidWYsIGxlbiwgQ0ZIKSAhPSBsZW4pCiAJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7 CiB9CiAKQEAgLTU3Myw3ICs1NzcsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI KQogCiAJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlV3JpdGUpCiAJewotCQljZnAJCSAgICp0b2NG SDsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICp0b2NGSDsKIAkJcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9OwogCQljaGFyCQlmbmFtZVtNQVhQR1BBVEhdOwog CkBAIC01ODQsOCArNTg4LDggQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAog CQkvKiBUaGUgVE9DIGlzIGFsd2F5cyBjcmVhdGVkIHVuY29tcHJlc3NlZCAqLwogCQljb21wcmVz c2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JCXRvY0ZIID0gY2Zv cGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgY29tcHJlc3Npb25fc3BlYyk7Ci0JCWlmICh0 b2NGSCA9PSBOVUxMKQorCQl0b2NGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Np b25fc3BlYyk7CisJCWlmICh0b2NGSC0+b3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIHRv Y0ZIKSkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVt IiwgZm5hbWUpOwogCQljdHgtPmRhdGFGSCA9IHRvY0ZIOwogCkBAIC01OTgsNyArNjAyLDcgQEAg X0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJV3JpdGVIZWFkKEFIKTsKIAkJQUgt PmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CiAJCVdyaXRlVG9jKEFIKTsKLQkJaWYgKGNmY2xvc2Uo dG9jRkgpICE9IDApCisJCWlmIChEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKHRvY0ZIKSAhPSAw KQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0MgZmlsZTogJW0iKTsKIAkJV3JpdGVE YXRhQ2h1bmtzKEFILCBjdHgtPnBzdGF0ZSk7CiAKQEAgLTY0OSw4ICs2NTMsOCBAQCBfU3RhcnRM T3MoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAogCS8qIFRoZSBMTyBUT0MgZmls ZSBpcyBuZXZlciBjb21wcmVzc2VkICovCiAJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQ R19DT01QUkVTU0lPTl9OT05FOwotCWN0eC0+TE9zVG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUs ICJhYiIsIGNvbXByZXNzaW9uX3NwZWMpOwotCWlmIChjdHgtPkxPc1RvY0ZIID09IE5VTEwpCisJ Y3R4LT5MT3NUb2NGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Npb25fc3BlYyk7 CisJaWYgKGN0eC0+TE9zVG9jRkgtPm9wZW5fd3JpdGUoZm5hbWUsICJhYiIsIGN0eC0+TE9zVG9j RkgpKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIs IGZuYW1lKTsKIH0KIApAQCAtNjY3LDkgKzY3MSw4IEBAIF9TdGFydExPKEFyY2hpdmVIYW5kbGUg KkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlzbnByaW50ZihmbmFtZSwgTUFYUEdQQVRI LCAiJXMvYmxvYl8ldS5kYXQiLCBjdHgtPmRpcmVjdG9yeSwgb2lkKTsKIAotCWN0eC0+ZGF0YUZI ID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgQUgtPmNvbXByZXNzaW9uX3NwZWMp OwotCi0JaWYgKGN0eC0+ZGF0YUZIID09IE5VTEwpCisJY3R4LT5kYXRhRkggPSBJbml0Q29tcHJl c3NGaWxlSGFuZGxlKEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKwlpZiAoY3R4LT5kYXRhRkgtPm9w ZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBjdHgtPmRhdGFGSCkpCiAJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02 ODIsMTggKzY4NSwxOSBAQCBzdGF0aWMgdm9pZAogX0VuZExPKEFyY2hpdmVIYW5kbGUgKkFILCBU b2NFbnRyeSAqdGUsIE9pZCBvaWQpCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQg KikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPkxPc1Rv Y0ZIOwogCWNoYXIJCWJ1Zls1MF07CiAJaW50CQkJbGVuOwogCi0JLyogQ2xvc2UgdGhlIExPIGRh dGEgZmlsZSBpdHNlbGYgKi8KLQlpZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKLQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBMTyBkYXRhIGZpbGU6ICVtIik7CisJLyogQ2xvc2UgdGhl IEJMT0IgZGF0YSBmaWxlIGl0c2VsZiAqLworCWlmIChEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxl KGN0eC0+ZGF0YUZIKSAhPSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGJsb2IgZGF0 YSBmaWxlOiAlbSIpOwogCWN0eC0+ZGF0YUZIID0gTlVMTDsKIAogCS8qIHJlZ2lzdGVyIHRoZSBM TyBpbiBibG9icy50b2MgKi8KIAlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUg YmxvYl8ldS5kYXRcbiIsIG9pZCwgb2lkKTsKLQlpZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5M T3NUb2NGSCkgIT0gbGVuKQotCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIExPcyBUT0Mg ZmlsZSIpOworCWlmIChDRkgtPndyaXRlKGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKKwkJcGdfZmF0 YWwoImNvdWxkIG5vdCB3cml0ZSB0byBibG9icyBUT0MgZmlsZSIpOwogfQogCiAvKgpAQCAtNzA2 LDggKzcxMCw4IEBAIF9FbmRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHsK IAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAotCWlm IChjZmNsb3NlKGN0eC0+TE9zVG9jRkgpICE9IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xv c2UgTE9zIFRPQyBmaWxlOiAlbSIpOworCWlmIChEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKGN0 eC0+TE9zVG9jRkgpICE9IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYmxvYnMgVE9D IGZpbGU6ICVtIik7CiAJY3R4LT5MT3NUb2NGSCA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3Bn X2R1bXAucGwKaW5kZXggNjY1NjIyMjM2My4uMjJhN2M1YzM3YyAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3Bn X2R1bXAucGwKQEAgLTk0LDcgKzk0LDcgQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJY29tbWFu ZCA9PiBbCiAJCQkJJ3BnX3Jlc3RvcmUnLCAnLWwnLCAiJHRlbXBkaXIvY29tcHJlc3Npb25fZ3pp cF9jdXN0b20uZHVtcCIsCiAJCQldLAotCQkJZXhwZWN0ZWQgPT4gcXIvQ29tcHJlc3Npb246IDEv LAorCQkJZXhwZWN0ZWQgPT4gcXIvQ29tcHJlc3Npb246IGd6aXAvLAogCQkJbmFtZSAgICAgPT4g J2RhdGEgY29udGVudCBpcyBnemlwLWNvbXByZXNzZWQnCiAJCX0sCiAJfSwKQEAgLTIzOSw4ICsy MzksOCBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQljb21tYW5kID0+CiAJCQkgIFsgJ3BnX3Jl c3RvcmUnLCAnLWwnLCAiJHRlbXBkaXIvZGVmYXVsdHNfY3VzdG9tX2Zvcm1hdC5kdW1wIiwgXSwK IAkJCWV4cGVjdGVkID0+ICRzdXBwb3J0c19nemlwID8KLQkJCXFyL0NvbXByZXNzaW9uOiAtMS8g OgotCQkJcXIvQ29tcHJlc3Npb246IDAvLAorCQkJcXIvQ29tcHJlc3Npb246IGd6aXAvIDoKKwkJ CXFyL0NvbXByZXNzaW9uOiBub25lLywKIAkJCW5hbWUgPT4gJ2RhdGEgY29udGVudCBpcyBnemlw LWNvbXByZXNzZWQgYnkgZGVmYXVsdCBpZiBhdmFpbGFibGUnLAogCQl9LAogCX0sCkBAIC0yNjQs OCArMjY0LDggQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJY29tbWFuZCA9PgogCQkJICBbICdw Z19yZXN0b3JlJywgJy1sJywgIiR0ZW1wZGlyL2RlZmF1bHRzX2Rpcl9mb3JtYXQiLCBdLAogCQkJ ZXhwZWN0ZWQgPT4gJHN1cHBvcnRzX2d6aXAgPwotCQkJcXIvQ29tcHJlc3Npb246IC0xLyA6Ci0J CQlxci9Db21wcmVzc2lvbjogMC8sCisJCQlxci9Db21wcmVzc2lvbjogZ3ppcC8gOgorCQkJcXIv Q29tcHJlc3Npb246IG5vbmUvLAogCQkJbmFtZSA9PiAnZGF0YSBjb250ZW50IGlzIGd6aXAtY29t cHJlc3NlZCBieSBkZWZhdWx0JywKIAkJfSwKIAkJZ2xvYl9wYXR0ZXJucyA9PiBbCmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IDU4ZGFlY2E4MzEuLjI5MjY2YjVkZTkgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC00MjgsNiArNDI4LDcgQEAgQ29tcGlsZWRFeHByU3RhdGUKIENv bXBvc2l0ZUlPRGF0YQogQ29tcG9zaXRlVHlwZVN0bXQKIENvbXBvdW5kQWZmaXhGbGFnCitDb21w cmVzc0ZpbGVIYW5kbGUKIENvbXByZXNzaW9uTG9jYXRpb24KIENvbXByZXNzb3JTdGF0ZQogQ29t cHV0ZVhpZEhvcml6b25zUmVzdWx0CkBAIC0xMDMzLDYgKzEwMzQsNyBAQCBHdWNTdGFjawogR3Vj U3RhY2tTdGF0ZQogR3VjU3RyaW5nQXNzaWduSG9vawogR3VjU3RyaW5nQ2hlY2tIb29rCitHemlw Q29tcHJlc3NvclN0YXRlCiBIQU5ETEUKIEhBU0hBQ1RJT04KIEhBU0hCVUNLRVQKLS0gCjIuMzQu MQoK --b1_SYi4uvFhqzbxbjsoeasreueLGXmmrrLQb2ygYpVzc Content-Type: text/x-patch; name=v17-0003-Add-LZ4-compression-in-pg_-dump-restore.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v17-0003-Add-LZ4-compression-in-pg_-dump-restore.patch RnJvbSBmMjBiYTJjY2IxN2FiNWY4ZTc1ZjliNzNkZjAzZTMxODZmNGQ2MDI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgNiBEZWMgMjAyMiAxNTo0MjozMSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjE3 IDMvM10gQWRkIExaNCBjb21wcmVzc2lvbiBpbiBwZ197ZHVtcHxyZXN0b3JlfQoKV2l0aGluIGNv bXByZXNzX2x6NC57YyxofSB0aGUgc3RyZWFtaW5nIEFQSSBhbmQgYSBmaWxlIEFQSSBjb21wcmVz c2lvbiBpcwppbXBsZW1lbnRlZC4uIFRoZSBmaXJzdCBvbmUsIGlzIGFpbWVkIGF0IGlubGluZWQg dXNlIGNhc2VzIGFuZCB0aHVzIHNpbXBsZQpsejQuaCBjYWxscyBjYW4gYmUgdXNlZCBkaXJlY3Rs eS4gVGhlIHNlY29uZCBvbmUgaXMgZ2VuZXJhdGluZyBvdXRwdXQsIG9yIGlzCnBhcnNpbmcgaW5w dXQsIHdoaWNoIGNhbiBiZSByZWFkL2dlbmVyYXRlZCB2aWEgdGhlIGx6NCB1dGlsaXR5LgoKV2hl cmV2ZXIgdGhlIExaNEYgYXBpIGRvZXMgbm90IGltcGxlbWVudCBhbGwgdGhlIGZ1bmN0aW9uYWxp dHkgY29ycmVzcG9uZGluZwp0byBmcmVhZCgpLCBmd3JpdGUoKSwgZmdldHMoKSwgZmdldGMoKSwg ZmVvZigpLCBhbmQgZmNsb3NlKCksIGl0IGhhcyBiZWVuCmltcGxlbWVudGVkIGxvY2FseS4KLS0t CiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbCAgICAgICAgfCAgMTMgKy0KIHNyYy9iaW4v cGdfZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYyAgICAgICAgfCAgMzkgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQu YyAgICAgICB8IDYxOCArKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19sejQuaCAgICAgICB8ICAyMiArCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQgICAgICAgICAgfCAgIDggKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YyB8ICAxNCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICA1ICst CiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgfCAgODIgKysrLQogc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAxICsKIDEwIGZpbGVzIGNoYW5nZWQs IDc3NiBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfbHo0LmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn X2R1bXAuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCmluZGV4IDJjOTM4Y2Q3 ZTEuLjQ5ZDIxODkwNWYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCkBAIC0zMzAsOSArMzMwLDEwIEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIGZv cm1hdCB0aGF0IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4KICAgICAgICAg ICAgY2FuIHJlYWQuIEEgZGlyZWN0b3J5IGZvcm1hdCBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRl ZCB3aXRoCiAgICAgICAgICAgIHN0YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxl cyBpbiBhbiB1bmNvbXByZXNzZWQgYXJjaGl2ZQotICAgICAgICAgICBjYW4gYmUgY29tcHJlc3Nl ZCB3aXRoIHRoZSA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+IHRvb2wuCi0gICAgICAg ICAgIFRoaXMgZm9ybWF0IGlzIGNvbXByZXNzZWQgYnkgZGVmYXVsdCBhbmQgYWxzbyBzdXBwb3J0 cyBwYXJhbGxlbAotICAgICAgICAgICBkdW1wcy4KKyAgICAgICAgICAgY2FuIGJlIGNvbXByZXNz ZWQgd2l0aCB0aGUgPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICAg ICA8YXBwbGljYXRpb24+bHo0PC9hcHBsaWNhdGlvbj50b29sLgorICAgICAgICAgICBUaGlzIGZv cm1hdCBpcyBjb21wcmVzc2VkIGJ5IGRlZmF1bHQgdXNpbmcgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJh bD4KKyAgICAgICAgICAgYW5kIGFsc28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCiAgICAgICAg ICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgPC92YXJsaXN0ZW50cnk+ CkBAIC02NTQsNyArNjU1LDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBh cmE+CiAgICAgICAgIFNwZWNpZnkgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQvb3IgdGhlIGNv bXByZXNzaW9uIGxldmVsIHRvIHVzZS4KICAgICAgICAgVGhlIGNvbXByZXNzaW9uIG1ldGhvZCBj YW4gYmUgc2V0IHRvIDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+IG9yCi0gICAgICAgIDxsaXRlcmFs Pm5vbmU8L2xpdGVyYWw+IGZvciBubyBjb21wcmVzc2lvbi4KKyAgICAgICAgPGxpdGVyYWw+bHo0 PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24u CiAgICAgICAgIEEgY29tcHJlc3Npb24gZGV0YWlsIHN0cmluZyBjYW4gb3B0aW9uYWxseSBiZSBz cGVjaWZpZWQuICBJZiB0aGUKICAgICAgICAgZGV0YWlsIHN0cmluZyBpcyBhbiBpbnRlZ2VyLCBp dCBzcGVjaWZpZXMgdGhlIGNvbXByZXNzaW9uIGxldmVsLgogICAgICAgICBPdGhlcndpc2UsIGl0 IHNob3VsZCBiZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zLCBlYWNoIG9mIHRoZQpA QCAtNjc1LDggKzY3Niw4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBpbmRp dmlkdWFsIHRhYmxlLWRhdGEgc2VnbWVudHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVz cyB1c2luZwogICAgICAgICA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxl dmVsLiBGb3IgcGxhaW4gdGV4dCBvdXRwdXQsCiAgICAgICAgIHNldHRpbmcgYSBub256ZXJvIGNv bXByZXNzaW9uIGxldmVsIGNhdXNlcyB0aGUgZW50aXJlIG91dHB1dCBmaWxlIHRvIGJlIGNvbXBy ZXNzZWQsCi0gICAgICAgIGFzIHRob3VnaCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGlj YXRpb24+Z3ppcDwvYXBwbGljYXRpb24+OyBidXQgdGhlIGRlZmF1bHQKLSAgICAgICAgaXMgbm90 IHRvIGNvbXByZXNzLgorICAgICAgICBhcyB0aG91Z2ggaXQgaGFkIGJlZW4gZmVkIHRocm91Z2gg PGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICA8YXBwbGljYXRpb24+ bHo0PC9hcHBsaWNhdGlvbj47IGJ1dCB0aGUgZGVmYXVsdCBpcyBub3QgdG8gY29tcHJlc3MuCiAg ICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICBUaGUgdGFyIGFyY2hpdmUgZm9y bWF0IGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIGF0IGFsbC4KZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmls ZQppbmRleCAyOWVhYjAyZDM3Li4yOGMxZmMyN2NjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3 IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMv TWFrZWZpbGUuZ2xvYmFsCiAKIGV4cG9ydCBHWklQX1BST0dSQU09JChHWklQKQorZXhwb3J0IExa NAogZXhwb3J0IHdpdGhfaWN1CiAKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNk aXIpICQoQ1BQRkxBR1MpCkBAIC0yNSw2ICsyNiw3IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwk KHRvcF9idWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQog T0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCiAJY29tcHJlc3NfZ3ppcC5vIFwKKwljb21wcmVzc19s ejQubyBcCiAJY29tcHJlc3NfaW8ubyBcCiAJZHVtcHV0aWxzLm8gXAogCXBhcmFsbGVsLm8gXApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfaW8uYwppbmRleCBjMzM3MzZkZDQ5Li4zYzJhMjk3MzUwIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYwpAQCAtMzgsMTMgKzM4LDE1IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKgogICoJVGhlIGNvbXByZXNzZWQgc3RyZWFtIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIHRo ZSBDIHN0YW5kYXJkIGZvcGVuKCkgYW5kCi0gKglsaWJ6J3MgZ3pvcGVuKCkgQVBJcy4gSXQgYWxs b3dzIHlvdSB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvcgotICoJY29tcHJlc3NlZCBhbmQg dW5jb21wcmVzc2VkIHN0cmVhbXMuIGNmb3Blbl9yZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3Blbgot ICoJdGhlIGZpbGUgd2l0aCBnaXZlbiBuYW1lLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRv IG9wZW4gdGhlIHNhbWUKLSAqCWZpbGUgd2l0aCB0aGUgLmd6IHN1ZmZpeC4gY2ZvcGVuX3dyaXRl KCkgb3BlbnMgYSBmaWxlIGZvciB3cml0aW5nLCBhbgotICoJZXh0cmEgYXJndW1lbnQgc3BlY2lm aWVzIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBjb21wcmVzc2VkLCBhbmQgYWRkcyB0aGUKLSAqCS5n eiBzdWZmaXggdG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5 IGhhbmRsZSBib3RoCi0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMuCisgKgls aWJ6J3MgZ3pvcGVuKCkgQVBJcyBhbmQgY3VzdG9tIExaNCBjYWxscyB3aGljaCBwcm92aWRlIHNp bWlsYXIKKyAqCWZ1bmN0aW9uYWxpdHkuIEl0IGFsbG93cyB5b3UgdG8gdXNlIHRoZSBzYW1lIGZ1 bmN0aW9ucyBmb3IgY29tcHJlc3NlZCBhbmQKKyAqCXVuY29tcHJlc3NlZCBzdHJlYW1zLiBjZm9w ZW5fcmVhZCgpIGZpcnN0IHRyaWVzIHRvIG9wZW4gdGhlIGZpbGUgd2l0aCBnaXZlbgorICoJbmFt ZSwgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0aCB0 aGUgLmd6IHN1ZmZpeCwKKyAqCWZhaWxpbmcgdGhhdCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1l IGZpbGUgd2l0aCB0aGUgLmx6NCBzdWZmaXguCisgKgljZm9wZW5fd3JpdGUoKSBvcGVucyBhIGZp bGUgZm9yIHdyaXRpbmcsIGFuIGV4dHJhIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUKKyAqCW1ldGhv ZCB0byB1c2Ugc2hvdWxkIHRoZSBmaWxlIGJlIGNvbXByZXNzZWQsIGFuZCBhZGRzIHRoZSBhcHBy b3ByaWF0ZQorICoJc3VmZml4LCAuZ3ogb3IgLmx6NCwgdG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBU aGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhhbmRsZQorICoJYm90aCBjb21wcmVzc2VkIGFuZCB1 bmNvbXByZXNzZWQgZmlsZXMuCiAgKgogICogSURFTlRJRklDQVRJT04KICAqCSAgIHNyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Nyw2ICs1OSw3IEBACiAKICNpbmNsdWRlICJjb21w cmVzc19pby5oIgogI2luY2x1ZGUgImNvbXByZXNzX2d6aXAuaCIKKyNpbmNsdWRlICJjb21wcmVz c19sejQuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAogI2lmZGVmIEhBVkVfTElC WgpAQCAtMTM0LDcgKzEzNyw3IEBAIEFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCiAJCQlJbml0Q29tcHJlc3Nvckd6aXAo Y3MsIGNvbXByZXNzaW9uX3NwZWMpOwogCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05f TFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0 ZWQiLCAiTFo0Iik7CisJCQlJbml0Q29tcHJlc3NvckxaNChjcywgY29tcHJlc3Npb25fc3BlYyk7 CiAJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgogCQkJcGdfZmF0YWwoImNv bXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwpAQCAtMzI0 LDcgKzMyNyw4IEBAIEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogCQkJSW5pdENvbXByZXNzR3ppcChDRkgsIGNv bXByZXNzaW9uX3NwZWMpOwogCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0Ogot CQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCUluaXRDb21wcmVzc0xaNChDRkgsIGNvbXByZXNzaW9u X3NwZWMpOworCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fWlNURDoKIAkJCXBnX2Zh dGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOwogCQkJYnJlYWs7CkBAIC0zMzcsMTIg KzM0MSwxMiBAQCBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKICAqIE9wZW4gYSBmaWxlIGZvciByZWFkaW5nLiAn cGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQKICAqIGJlIGVpdGhl ciAiciIgb3IgInJiIi4KICAqCi0gKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9lcyBub3QgZXhp c3QsIHdlIGFwcGVuZCB0aGUgIi5neiIgc3VmZml4IChpZgorICogSWYgdGhlIGZpbGUgYXQgJ3Bh dGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBlbmQgdGhlICJ7Lmd6LC5sejR9IiBzdWZmaXggKGkK ICAqICdwYXRoJyBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCkgYW5kIHRyeSBhZ2Fpbi4gU28gaWYg eW91IHBhc3MgImZvbyIgYXMKLSAqICdwYXRoJywgdGhpcyB3aWxsIG9wZW4gZWl0aGVyICJmb28i IG9yICJmb28uZ3oiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4KKyAqICdwYXRoJywgdGhpcyB3aWxs IG9wZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiIG9yICJmb28ubHo0IiwgdHJ5aW5nIGluIHRo YXQKKyAqIG9yZGVyLgogICoKICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJy b3IgY29kZSBpbiBlcnJuby4KLSAqCiAgKi8KIENvbXByZXNzRmlsZUhhbmRsZSAqCiBJbml0RGlz Y292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9k ZSkKQEAgLTM3OCw2ICszODIsMTcgQEAgSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGNv bnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiAJCQlpZiAoZXhpc3RzKQogCQkJCWNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAkJfQorI2Vu ZGlmCisjaWZkZWYgVVNFX0xaNAorCQlpZiAoIWV4aXN0cykKKwkJeworCQkJZnJlZV9rZWVwX2Vy cm5vKGZuYW1lKTsKKwkJCWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOworCQkJZXhp c3RzID0gKHN0YXQoZm5hbWUsICZzdCkgPT0gMCk7CisKKwkJCWlmIChleGlzdHMpCisJCQkJY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9MWjQ7CisJCX0KICNlbmRp ZgogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jIGIvc3Jj L2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjI1YmM5MTA4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfbHo0LmMKQEAgLTAsMCArMSw2MTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIGNvbXByZXNzX2x6NC5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0byB3cml0ZSBh biB1bmNvbXByZXNzZWQgb3IgY29tcHJlc3NlZCBkYXRhCisgKgkgc3RyZWFtLgorICoKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAg c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5o IgorCisjaW5jbHVkZSAiY29tcHJlc3NfbHo0LmgiCisKKyNpZmRlZiBVU0VfTFo0CisjaW5jbHVk ZSA8bHo0Lmg+CisjaW5jbHVkZSA8bHo0ZnJhbWUuaD4KKworI2RlZmluZSBMWjRfT1VUX1NJWkUJ KDQgKiAxMDI0KQorI2RlZmluZSBMWjRfSU5fU0laRQkJKDE2ICogMTAyNCkKKworLyoKKyAqIExa NEZfSEVBREVSX1NJWkVfTUFYIGZpcnN0IGFwcGVhcmVkIGluIHYxLjcuNSBvZiB0aGUgbGlicmFy eS4KKyAqIFJlZGVmaW5lIGl0IGZvciBpbnN0YWxsYXRpb25zIHdpdGggYSBsZXNzZXIgdmVyc2lv bi4KKyAqLworI2lmbmRlZiBMWjRGX0hFQURFUl9TSVpFX01BWAorI2RlZmluZSBMWjRGX0hFQURF Ul9TSVpFX01BWAkzMgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29t cHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3R5cGVkZWYgc3Ry dWN0IExaNENvbXByZXNzb3JTdGF0ZQoreworCWNoYXIJICAgKm91dGJ1ZjsKKwlzaXplX3QJCW91 dHNpemU7Cit9IExaNENvbXByZXNzb3JTdGF0ZTsKKworLyogUHJpdmF0ZSByb3V0aW5lcyB0aGF0 IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lkIFJlYWREYXRh RnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOwor c3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVu KTsKK3N0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXBy ZXNzb3JTdGF0ZSAqY3MpOworCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZUxaNChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRfc3RyZWFtRGVj b2RlX3QgbHo0U3RyZWFtRGVjb2RlOworCWNoYXIJICAgKmJ1ZjsKKwljaGFyCSAgICpkZWNidWY7 CisJc2l6ZV90CQlidWZsZW47CisJc2l6ZV90CQljbnQ7CisKKwlidWZsZW4gPSBMWjRfSU5fU0la RTsKKwlidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKwlkZWNidWYgPSBwZ19tYWxsb2MoYnVmbGVu KTsKKworCUxaNF9zZXRTdHJlYW1EZWNvZGUoJmx6NFN0cmVhbURlY29kZSwgTlVMTCwgMCk7CisK Kwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQorCXsKKwkJaW50 CQkJZGVjQnl0ZXMgPSBMWjRfZGVjb21wcmVzc19zYWZlX2NvbnRpbnVlKCZsejRTdHJlYW1EZWNv ZGUsCisJCQkJCQkJCQkJCQkJCQlidWYsIGRlY2J1ZiwKKwkJCQkJCQkJCQkJCQkJCWNudCwgYnVm bGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVjQnl0ZXMsIEFIKTsKKwl9CisKKwlwZ19m cmVlKGJ1Zik7CisJcGdfZnJlZShkZWNidWYpOworfQorCitzdGF0aWMgdm9pZAorV3JpdGVEYXRh VG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJ CQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUxaNENvbXByZXNzb3JTdGF0 ZSAqTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlOworCXNpemVfdAkJ Y29tcHJlc3NlZDsKKwlzaXplX3QJCXJlcXVpcmVkc2l6ZSA9IExaNF9jb21wcmVzc0JvdW5kKGRM ZW4pOworCisJaWYgKHJlcXVpcmVkc2l6ZSA+IExaNGNzLT5vdXRzaXplKQorCXsKKwkJTFo0Y3Mt Pm91dGJ1ZiA9IHBnX3JlYWxsb2MoTFo0Y3MtPm91dGJ1ZiwgcmVxdWlyZWRzaXplKTsKKwkJTFo0 Y3MtPm91dHNpemUgPSByZXF1aXJlZHNpemU7CisJfQorCisJY29tcHJlc3NlZCA9IExaNF9jb21w cmVzc19kZWZhdWx0KGRhdGEsIExaNGNzLT5vdXRidWYsCisJCQkJCQkJCQkgIGRMZW4sIExaNGNz LT5vdXRzaXplKTsKKworCWlmIChjb21wcmVzc2VkIDw9IDApCisJCXBnX2ZhdGFsKCJmYWlsZWQg dG8gTFo0IGNvbXByZXNzIGRhdGEiKTsKKworCWNzLT53cml0ZUYoQUgsIExaNGNzLT5vdXRidWYs IGNvbXByZXNzZWQpOworfQorCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3NvckxaNChBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRDb21wcmVzc29yU3RhdGUg KkxaNGNzOworCisJTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlOwor CWlmIChMWjRjcykKKwl7CisJCXBnX2ZyZWUoTFo0Y3MtPm91dGJ1Zik7CisJCXBnX2ZyZWUoTFo0 Y3MpOworCQljcy0+cHJpdmF0ZSA9IE5VTEw7CisJfQorfQorCisKKy8qIFB1YmxpYyByb3V0aW5l cyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3ZvaWQKK0luaXRDb21w cmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwljcy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21B cmNoaXZlTFo0OworCWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVMWjQ7CisJY3Mt PmVuZCA9IEVuZENvbXByZXNzb3JMWjQ7CisKKwljcy0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXBy ZXNzaW9uX3NwZWM7CisKKwkvKiBXaWxsIGJlIGxhenkgaW5pdCdkICovCisJY3MtPnByaXZhdGUg PSBwZ19tYWxsb2MwKHNpemVvZihMWjRDb21wcmVzc29yU3RhdGUpKTsKK30KKworLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworLyoKKyAqIFN0YXRlIG5lZWRlZCBmb3IgTFo0IChkZSljb21wcmVzc2lv biB1c2luZyB0aGUgQ29tcHJlc3NGaWxlSGFuZGxlIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg TFo0RmlsZQoreworCUZJTEUJICAgKmZwOworCisJTFo0Rl9wcmVmZXJlbmNlc190IHByZWZzOwor CisJTFo0Rl9jb21wcmVzc2lvbkNvbnRleHRfdCBjdHg7CisJTFo0Rl9kZWNvbXByZXNzaW9uQ29u dGV4dF90IGR0eDsKKworCWJvb2wJCWluaXRlZDsKKwlib29sCQljb21wcmVzc2luZzsKKworCXNp emVfdAkJYnVmbGVuOworCWNoYXIJICAgKmJ1ZmZlcjsKKworCXNpemVfdAkJb3ZlcmZsb3dhbGxv Y2xlbjsKKwlzaXplX3QJCW92ZXJmbG93bGVuOworCWNoYXIJICAgKm92ZXJmbG93YnVmOworCisJ c2l6ZV90CQllcnJjb2RlOworfQkJCUxaNEZpbGU7CisKKy8qCisgKiBMWjQgZXF1aXZhbGVudCB0 byBmZW9mKCkgb3IgZ3plb2YoKS4gVGhlIGVuZCBvZiBmaWxlCisgKiBpcyByZWFjaGVkIGlmIHRo ZXJlIGlzIG5vIGRlY29tcHJlc3NlZCBvdXRwdXQgaW4gdGhlCisgKiBvdmVyZmxvdyBidWZmZXIg YW5kIHRoZSBlbmQgb2YgdGhlIGZpbGUgaXMgcmVhY2hlZC4KKyAqLworc3RhdGljIGludAorTFo0 RmlsZV9lb2YoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAo TFo0RmlsZSAqKSBDRkgtPnByaXZhdGU7CisKKwlyZXR1cm4gZnMtPm92ZXJmbG93bGVuID09IDAg JiYgZmVvZihmcy0+ZnApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitMWjRGaWxlX2dldF9l cnJvcihDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRG aWxlICopIENGSC0+cHJpdmF0ZTsKKwljb25zdCBjaGFyICplcnJtc2c7CisKKwlpZiAoTFo0Rl9p c0Vycm9yKGZzLT5lcnJjb2RlKSkKKwkJZXJybXNnID0gTFo0Rl9nZXRFcnJvck5hbWUoZnMtPmVy cmNvZGUpOworCWVsc2UKKwkJZXJybXNnID0gc3RyZXJyb3IoZXJybm8pOworCisJcmV0dXJuIGVy cm1zZzsKK30KKworLyoKKyAqIFByZXBhcmUgYW4gYWxyZWFkeSBhbGxvYydlZCBMWjRGaWxlIHN0 cnVjdCBmb3Igc3Vic2VxdWVudCBjYWxscy4KKyAqCisgKiBJdCBjcmVhdGVzIHRoZSBuZXNzYXJ5 IGNvbnRleHRzIGZvciB0aGUgb3BlcmF0aW9ucy4gV2hlbiBjb21wcmVzc2luZywKKyAqIGl0IGFk ZGl0aW9uYWxseSB3cml0ZXMgdGhlIExaNCBoZWFkZXIgaW4gdGhlIG91dHB1dCBzdHJlYW0uCisg Ki8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfaW5pdChMWjRGaWxlICogZnMsIGludCBzaXplLCBib29s IGNvbXByZXNzaW5nKQoreworCXNpemVfdAkJc3RhdHVzOworCisJaWYgKGZzLT5pbml0ZWQpCisJ CXJldHVybiAwOworCisJZnMtPmNvbXByZXNzaW5nID0gY29tcHJlc3Npbmc7CisJZnMtPmluaXRl ZCA9IHRydWU7CisKKwlpZiAoZnMtPmNvbXByZXNzaW5nKQorCXsKKwkJZnMtPmJ1ZmxlbiA9IExa NEZfY29tcHJlc3NCb3VuZChMWjRfSU5fU0laRSwgJmZzLT5wcmVmcyk7CisJCWlmIChmcy0+YnVm bGVuIDwgTFo0Rl9IRUFERVJfU0laRV9NQVgpCisJCQlmcy0+YnVmbGVuID0gTFo0Rl9IRUFERVJf U0laRV9NQVg7CisKKwkJc3RhdHVzID0gTFo0Rl9jcmVhdGVDb21wcmVzc2lvbkNvbnRleHQoJmZz LT5jdHgsIExaNEZfVkVSU0lPTik7CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJewor CQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZzLT5idWZm ZXIgPSBwZ19tYWxsb2MoZnMtPmJ1Zmxlbik7CisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NCZWdp bihmcy0+Y3R4LCBmcy0+YnVmZmVyLCBmcy0+YnVmbGVuLAorCQkJCQkJCQkJJmZzLT5wcmVmcyk7 CisKKwkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0 YXR1czsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBz dGF0dXMsIGZzLT5mcCkgIT0gc3RhdHVzKQorCQl7CisJCQllcnJubyA9IGVycm5vID8gOiBFTk9T UEM7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwllbHNlCisJeworCQlzdGF0dXMgPSBMWjRGX2Ny ZWF0ZURlY29tcHJlc3Npb25Db250ZXh0KCZmcy0+ZHR4LCBMWjRGX1ZFUlNJT04pOworCQlpZiAo TFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJ cmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVmbGVuID0gc2l6ZSA+IExaNF9PVVRfU0laRSA/IHNp emUgOiBMWjRfT1VUX1NJWkU7CisJCWZzLT5idWZmZXIgPSBwZ19tYWxsb2MoZnMtPmJ1Zmxlbik7 CisKKwkJZnMtPm92ZXJmbG93YWxsb2NsZW4gPSBmcy0+YnVmbGVuOworCQlmcy0+b3ZlcmZsb3di dWYgPSBwZ19tYWxsb2MoZnMtPm92ZXJmbG93YWxsb2NsZW4pOworCQlmcy0+b3ZlcmZsb3dsZW4g PSAwOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBhbHJlYWR5IGRlY29tcHJl c3NlZCBjb250ZW50IGZyb20gdGhlIG92ZXJmbG93IGJ1ZmZlciBpbnRvICdwdHInIHVwIHRvCisg KiAnc2l6ZScgYnl0ZXMsIGlmIGF2YWlsYWJsZS4gSWYgdGhlIGVvbF9mbGFnIGlzIHNldCwgdGhl biBzdG9wIGF0IHRoZSBmaXJzdAorICogb2NjdXJhbmNlIG9mIHRoZSBuZXcgbGluZSBjaGFyIHBy aW9yIHRvICdzaXplJyBieXRlcy4KKyAqCisgKiBBbnkgdW5yZWFkIGNvbnRlbnQgaW4gdGhlIG92 ZXJmbG93IGJ1ZmZlciwgaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZy4KKyAqLworc3RhdGljIGlu dAorTFo0RmlsZV9yZWFkX292ZXJmbG93KExaNEZpbGUgKiBmcywgdm9pZCAqcHRyLCBpbnQgc2l6 ZSwgYm9vbCBlb2xfZmxhZykKK3sKKwljaGFyCSAgICpwOworCWludAkJCXJlYWRsZW4gPSAwOwor CisJaWYgKGZzLT5vdmVyZmxvd2xlbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChmcy0+b3Zl cmZsb3dsZW4gPj0gc2l6ZSkKKwkJcmVhZGxlbiA9IHNpemU7CisJZWxzZQorCQlyZWFkbGVuID0g ZnMtPm92ZXJmbG93bGVuOworCisJaWYgKGVvbF9mbGFnICYmIChwID0gbWVtY2hyKGZzLT5vdmVy Zmxvd2J1ZiwgJ1xuJywgcmVhZGxlbikpKQorCQkvKiBJbmNsdWRlIHRoZSBsaW5lIHRlcm1pbmF0 aW5nIGNoYXIgKi8KKwkJcmVhZGxlbiA9IHAgLSBmcy0+b3ZlcmZsb3didWYgKyAxOworCisJbWVt Y3B5KHB0ciwgZnMtPm92ZXJmbG93YnVmLCByZWFkbGVuKTsKKwlmcy0+b3ZlcmZsb3dsZW4gLT0g cmVhZGxlbjsKKworCWlmIChmcy0+b3ZlcmZsb3dsZW4gPiAwKQorCQltZW1tb3ZlKGZzLT5vdmVy Zmxvd2J1ZiwgZnMtPm92ZXJmbG93YnVmICsgcmVhZGxlbiwgZnMtPm92ZXJmbG93bGVuKTsKKwor CXJldHVybiByZWFkbGVuOworfQorCisvKgorICogVGhlIHdvcmtob3JzZSBmb3IgcmVhZGluZyBk ZWNvbXByZXNzZWQgY29udGVudCBvdXQgb2YgYW4gTFo0IGNvbXByZXNzZWQKKyAqIHN0cmVhbS4K KyAqCisgKiBJdCB3aWxsIHJlYWQgdXAgdG8gJ3B0cnNpemUnIGRlY29tcHJlc3NlZCBjb250ZW50 LCBvciB1cCB0byB0aGUgbmV3IGxpbmUgY2hhcgorICogaWYgZm91bmQgZmlyc3Qgd2hlbiB0aGUg ZW9sX2ZsYWcgaXMgc2V0LiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBkZWNvbXByZXNzZWQKKyAq IG91dHB1dCBnZW5lcmF0ZWQgYnkgcmVhZGluZyBhbnkgY29tcHJlc3NlZCBpbnB1dCB2aWEgdGhl IExaNEYgQVBJLCBleGNlZWRzCisgKiAncHRyc2l6ZScuIEFueSBleGNlZWRpbmcgZGVjb21wcmVz c2VkIGNvbnRlbnQgaXMgc3RvcmVkIGF0IGFuIG92ZXJmbG93CisgKiBidWZmZXIgd2l0aGluIExa NEZpbGUuIE9mIGNvdXJzZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCB3aWxsIGZp cnN0CisgKiB0cnkgdG8gY29uc3VtZSBhbnkgZGVjb21wcmVzc2VkIGNvbnRlbnQgYWxyZWFkeSBw cmVzZW50IGluIHRoZSBvdmVyZmxvdworICogYnVmZmVyLCBiZWZvcmUgZGVjb21wcmVzc2luZyBu ZXcgY29udGVudC4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9yZWFkX2ludGVybmFsKExaNEZp bGUgKiBmcywgdm9pZCAqcHRyLCBpbnQgcHRyc2l6ZSwgYm9vbCBlb2xfZmxhZykKK3sKKwlzaXpl X3QJCWRzaXplID0gMDsKKwlzaXplX3QJCXJzaXplOworCXNpemVfdAkJc2l6ZSA9IHB0cnNpemU7 CisJYm9vbAkJZW9sX2ZvdW5kID0gZmFsc2U7CisKKwl2b2lkCSAgICpyZWFkYnVmOworCisJLyog TGF6eSBpbml0ICovCisJaWYgKCFmcy0+aW5pdGVkICYmIExaNEZpbGVfaW5pdChmcywgc2l6ZSwg ZmFsc2UgLyogZGVjb21wcmVzc2luZyAqLyApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBWZXJmaXkg dGhhdCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaW4gdGhlIG91dGJ1ZiAqLworCWlmIChzaXplID4g ZnMtPmJ1ZmxlbikKKwl7CisJCWZzLT5idWZsZW4gPSBzaXplOworCQlmcy0+YnVmZmVyID0gcGdf cmVhbGxvYyhmcy0+YnVmZmVyLCBzaXplKTsKKwl9CisKKwkvKiB1c2UgYWxyZWFkeSBkZWNvbXBy ZXNzZWQgY29udGVudCBpZiBhdmFpbGFibGUgKi8KKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9vdmVy ZmxvdyhmcywgcHRyLCBzaXplLCBlb2xfZmxhZyk7CisJaWYgKGRzaXplID09IHNpemUgfHwgKGVv bF9mbGFnICYmIG1lbWNocihwdHIsICdcbicsIGRzaXplKSkpCisJCXJldHVybiBkc2l6ZTsKKwor CXJlYWRidWYgPSBwZ19tYWxsb2Moc2l6ZSk7CisKKwlkbworCXsKKwkJY2hhcgkgICAqcnA7CisJ CWNoYXIJICAgKnJlbmQ7CisKKwkJcnNpemUgPSBmcmVhZChyZWFkYnVmLCAxLCBzaXplLCBmcy0+ ZnApOworCQlpZiAocnNpemUgPCBzaXplICYmICFmZW9mKGZzLT5mcCkpCisJCQlyZXR1cm4gLTE7 CisKKwkJcnAgPSAoY2hhciAqKSByZWFkYnVmOworCQlyZW5kID0gKGNoYXIgKikgcmVhZGJ1ZiAr IHJzaXplOworCisJCXdoaWxlIChycCA8IHJlbmQpCisJCXsKKwkJCXNpemVfdAkJc3RhdHVzOwor CQkJc2l6ZV90CQlvdXRsZW4gPSBmcy0+YnVmbGVuOworCQkJc2l6ZV90CQlyZWFkX3JlbWFpbiA9 IHJlbmQgLSBycDsKKworCQkJbWVtc2V0KGZzLT5idWZmZXIsIDAsIG91dGxlbik7CisJCQlzdGF0 dXMgPSBMWjRGX2RlY29tcHJlc3MoZnMtPmR0eCwgZnMtPmJ1ZmZlciwgJm91dGxlbiwKKwkJCQkJ CQkJCSBycCwgJnJlYWRfcmVtYWluLCBOVUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVz KSkKKwkJCXsKKwkJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCQlyZXR1cm4gLTE7CisJCQl9 CisKKwkJCXJwICs9IHJlYWRfcmVtYWluOworCisJCQkvKgorCQkJICogZmlsbCBpbiB3aGF0IHNw YWNlIGlzIGF2YWlsYWJsZSBpbiBwdHIgaWYgdGhlIGVvbCBmbGFnIGlzIHNldCwKKwkJCSAqIGVp dGhlciBza2lwIGlmIG9uZSBhbHJlYWR5IGZvdW5kIG9yIGZpbGwgdXAgdG8gRU9MIGlmIHByZXNl bnQKKwkJCSAqIGluIHRoZSBvdXRidWYKKwkJCSAqLworCQkJaWYgKG91dGxlbiA+IDAgJiYgZHNp emUgPCBzaXplICYmIGVvbF9mb3VuZCA9PSBmYWxzZSkKKwkJCXsKKwkJCQljaGFyCSAgICpwOwor CQkJCXNpemVfdAkJbGliID0gKGVvbF9mbGFnID09IDApID8gc2l6ZSAtIGRzaXplIDogc2l6ZSAt IDEgLSBkc2l6ZTsKKwkJCQlzaXplX3QJCWxlbiA9IG91dGxlbiA8IGxpYiA/IG91dGxlbiA6IGxp YjsKKworCQkJCWlmIChlb2xfZmxhZyA9PSB0cnVlICYmCisJCQkJCShwID0gbWVtY2hyKGZzLT5i dWZmZXIsICdcbicsIG91dGxlbikpICYmCisJCQkJCShzaXplX3QpIChwIC0gZnMtPmJ1ZmZlciAr IDEpIDw9IGxlbikKKwkJCQl7CisJCQkJCWxlbiA9IHAgLSBmcy0+YnVmZmVyICsgMTsKKwkJCQkJ ZW9sX2ZvdW5kID0gdHJ1ZTsKKwkJCQl9CisKKwkJCQltZW1jcHkoKGNoYXIgKikgcHRyICsgZHNp emUsIGZzLT5idWZmZXIsIGxlbik7CisJCQkJZHNpemUgKz0gbGVuOworCisJCQkJLyogbW92ZSB3 aGF0IGRpZCBub3QgZml0LCBpZiBhbnksIGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgYnVmICovCisJ CQkJaWYgKGxlbiA8IG91dGxlbikKKwkJCQkJbWVtbW92ZShmcy0+YnVmZmVyLCBmcy0+YnVmZmVy ICsgbGVuLCBvdXRsZW4gLSBsZW4pOworCQkJCW91dGxlbiAtPSBsZW47CisJCQl9CisKKwkJCS8q IGlmIHRoZXJlIGlzIGF2YWlsYWJsZSBvdXRwdXQsIHNhdmUgaXQgKi8KKwkJCWlmIChvdXRsZW4g PiAwKQorCQkJeworCQkJCXdoaWxlIChmcy0+b3ZlcmZsb3dsZW4gKyBvdXRsZW4gPiBmcy0+b3Zl cmZsb3dhbGxvY2xlbikKKwkJCQl7CisJCQkJCWZzLT5vdmVyZmxvd2FsbG9jbGVuICo9IDI7CisJ CQkJCWZzLT5vdmVyZmxvd2J1ZiA9IHBnX3JlYWxsb2MoZnMtPm92ZXJmbG93YnVmLAorCQkJCQkJ CQkJCQkJIGZzLT5vdmVyZmxvd2FsbG9jbGVuKTsKKwkJCQl9CisKKwkJCQltZW1jcHkoZnMtPm92 ZXJmbG93YnVmICsgZnMtPm92ZXJmbG93bGVuLCBmcy0+YnVmZmVyLCBvdXRsZW4pOworCQkJCWZz LT5vdmVyZmxvd2xlbiArPSBvdXRsZW47CisJCQl9CisJCX0KKwl9IHdoaWxlIChyc2l6ZSA9PSBz aXplICYmIGRzaXplIDwgc2l6ZSAmJiBlb2xfZm91bmQgPT0gMCk7CisKKwlwZ19mcmVlKHJlYWRi dWYpOworCisJcmV0dXJuIChpbnQpIGRzaXplOworfQorCisvKgorICogQ29tcHJlc3Mgc2l6ZSBi eXRlcyBmcm9tIHB0ciBhbmQgd3JpdGUgdGhlbSB0byB0aGUgc3RyZWFtLgorICovCitzdGF0aWMg c2l6ZV90CitMWjRGaWxlX3dyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZI LT5wcml2YXRlOworCXNpemVfdAkJc3RhdHVzOworCWludAkJCXJlbWFpbmluZyA9IHNpemU7CisK KwlpZiAoIWZzLT5pbml0ZWQgJiYgTFo0RmlsZV9pbml0KGZzLCBzaXplLCB0cnVlKSkKKwkJcmV0 dXJuIC0xOworCisJd2hpbGUgKHJlbWFpbmluZyA+IDApCisJeworCQlpbnQJCQljaHVuayA9IHJl bWFpbmluZyA8IExaNF9JTl9TSVpFID8gcmVtYWluaW5nIDogTFo0X0lOX1NJWkU7CisKKwkJcmVt YWluaW5nIC09IGNodW5rOworCisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NVcGRhdGUoZnMtPmN0 eCwgZnMtPmJ1ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSBwdHIsIGNodW5rLCBOVUxMKTsK KwkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1 czsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3Rh dHVzLCBmcy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSBlcnJubyA/IDogRU5PU1BD OworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIGZy ZWFkKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMu CisgKi8KK3N0YXRpYyBzaXplX3QKK0xaNEZpbGVfcmVhZCh2b2lkICpwdHIsIHNpemVfdCBzaXpl LCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxl ICopIENGSC0+cHJpdmF0ZTsKKwlpbnQJCQlyZXQ7CisKKwlyZXQgPSBMWjRGaWxlX3JlYWRfaW50 ZXJuYWwoZnMsIHB0ciwgc2l6ZSwgZmFsc2UpOworCWlmIChyZXQgIT0gc2l6ZSAmJiAhTFo0Rmls ZV9lb2YoQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTog JXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBmZ2V0YygpIGVxdWl2YWxlbnQgaW1wbGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVzc2VkIGZp bGVzLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2dldGMoQ29tcHJlc3NGaWxlSGFuZGxlICpD RkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGU7CisJdW5z aWduZWQgY2hhciBjOworCisJaWYgKExaNEZpbGVfcmVhZF9pbnRlcm5hbChmcywgJmMsIDEsIGZh bHNlKSAhPSAxKQorCXsKKwkJaWYgKCFMWjRGaWxlX2VvZihDRkgpKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgp KTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTog ZW5kIG9mIGZpbGUiKTsKKwl9CisKKwlyZXR1cm4gYzsKK30KKworLyoKKyAqIGZnZXRzKCkgZXF1 aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0 YXRpYyBjaGFyICoKK0xaNEZpbGVfZ2V0cyhjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJp dmF0ZTsKKwlzaXplX3QJCWRzaXplOworCisJZHNpemUgPSBMWjRGaWxlX3JlYWRfaW50ZXJuYWwo ZnMsIHB0ciwgc2l6ZSwgdHJ1ZSk7CisJaWYgKGRzaXplIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxk IG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsK KworCS8qIERvbmUgcmVhZGluZyAqLworCWlmIChkc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsK KworCXJldHVybiBwdHI7Cit9CisKKy8qCisgKiBGaW5hbGl6ZSAoZGUpY29tcHJlc3Npb24gb2Yg YSBzdHJlYW0uIFdoZW4gY29tcHJlc3NpbmcgaXQgd2lsbCB3cml0ZSBhbnkKKyAqIHJlbWFpbmlu ZyBjb250ZW50IGFuZC9vciBnZW5lcmF0ZWQgZm9vdGVyIGZyb20gdGhlIExaNCBBUEkuCisgKi8K K3N0YXRpYyBpbnQKK0xaNEZpbGVfY2xvc2UoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJ RklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGU7 CisJc2l6ZV90CQlzdGF0dXM7CisJaW50CQkJcmV0OworCisJZnAgPSBmcy0+ZnA7CisJaWYgKGZz LT5pbml0ZWQpCisJeworCQlpZiAoZnMtPmNvbXByZXNzaW5nKQorCQl7CisJCQlzdGF0dXMgPSBM WjRGX2NvbXByZXNzRW5kKGZzLT5jdHgsIGZzLT5idWZmZXIsIGZzLT5idWZsZW4sIE5VTEwpOwor CQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW5k IGNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJ CQllbHNlIGlmICgocmV0ID0gZndyaXRlKGZzLT5idWZmZXIsIDEsIHN0YXR1cywgZnMtPmZwKSkg IT0gc3RhdHVzKQorCQkJeworCQkJCWVycm5vID0gZXJybm8gPyA6IEVOT1NQQzsKKwkJCQlXUklU RV9FUlJPUl9FWElUOworCQkJfQorCisJCQlzdGF0dXMgPSBMWjRGX2ZyZWVDb21wcmVzc2lvbkNv bnRleHQoZnMtPmN0eCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQkJcGdfZmF0 YWwoImZhaWxlZCB0byBlbmQgY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVycm9y TmFtZShzdGF0dXMpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXN0YXR1cyA9IExaNEZfZnJlZURl Y29tcHJlc3Npb25Db250ZXh0KGZzLT5kdHgpOworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMp KQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGRlY29tcHJlc3Npb246ICVzIiwKKwkJCQkJ CSBMWjRGX2dldEVycm9yTmFtZShzdGF0dXMpKTsKKwkJCXBnX2ZyZWUoZnMtPm92ZXJmbG93YnVm KTsKKwkJfQorCisJCXBnX2ZyZWUoZnMtPmJ1ZmZlcik7CisJfQorCisJcGdfZnJlZShmcyk7CisK KwlyZXR1cm4gZmNsb3NlKGZwKTsKK30KKworc3RhdGljIGludAorTFo0RmlsZV9vcGVuKGNvbnN0 IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJCSBDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcDsKKwlMWjRGaWxlICAgICpsejRmcCA9IChMWjRG aWxlICopIENGSC0+cHJpdmF0ZTsKKworCWlmIChmZCA+PSAwKQorCQlmcCA9IGZkb3BlbihmZCwg bW9kZSk7CisJZWxzZQorCQlmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlmIChmcCA9PSBOVUxM KQorCXsKKwkJbHo0ZnAtPmVycmNvZGUgPSBlcnJubzsKKwkJcmV0dXJuIDE7CisJfQorCisJbHo0 ZnAtPmZwID0gZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorTFo0RmlsZV9vcGVu X3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKworCWZuYW1lID0g cHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOworCXJldCA9IENGSC0+b3BlbihmbmFtZSwgLTEsIG1v ZGUsIENGSCk7CisJcGdfZnJlZShmbmFtZSk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkCitJ bml0Q29tcHJlc3NMWjQoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0IHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlMWjRGaWxlICAgICpsejRmcDsK KworCUNGSC0+b3BlbiA9IExaNEZpbGVfb3BlbjsKKwlDRkgtPm9wZW5fd3JpdGUgPSBMWjRGaWxl X29wZW5fd3JpdGU7CisJQ0ZILT5yZWFkID0gTFo0RmlsZV9yZWFkOworCUNGSC0+d3JpdGUgPSBM WjRGaWxlX3dyaXRlOworCUNGSC0+Z2V0cyA9IExaNEZpbGVfZ2V0czsKKwlDRkgtPmdldGMgPSBM WjRGaWxlX2dldGM7CisJQ0ZILT5lb2YgPSBMWjRGaWxlX2VvZjsKKwlDRkgtPmNsb3NlID0gTFo0 RmlsZV9jbG9zZTsKKwlDRkgtPmdldF9lcnJvciA9IExaNEZpbGVfZ2V0X2Vycm9yOworCisJQ0ZI LT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKKwlsejRmcCA9IHBnX21hbGxv YzAoc2l6ZW9mKCpsejRmcCkpOworCWlmIChDRkgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwgPj0g MCkKKwkJbHo0ZnAtPnByZWZzLmNvbXByZXNzaW9uTGV2ZWwgPSBDRkgtPmNvbXByZXNzaW9uX3Nw ZWMubGV2ZWw7CisKKwlDRkgtPnByaXZhdGUgPSBsejRmcDsKK30KKyNlbHNlCQkJCQkJCS8qIFVT RV9MWjQgKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGNv bnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlwZ19m YXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAi TFo0Iik7Cit9CisKK3ZvaWQKK0luaXRDb21wcmVzc0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SCwgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorewor CXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAl cyIsICJMWjQiKTsKK30KKyNlbmRpZgkJCQkJCQkvKiBVU0VfTFo0ICovCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf bHo0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzQ1OTVkYjFiOQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaApAQCAtMCww ICsxLDIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19sejQuaAorICoJ IEludGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfbHo0LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRl ZiBfQ09NUFJFU1NfTFo0X0hfCisjZGVmaW5lIF9DT01QUkVTU19MWjRfSF8KKworI2luY2x1ZGUg ImNvbXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc29yTFo0KENvbXByZXNz b3JTdGF0ZSAqY3MsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYyk7CitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NMWjQoQ29tcHJlc3NGaWxlSGFuZGxlICpD RkgsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisK KyNlbmRpZgkJCQkJCQkvKiBfQ09NUFJFU1NfTFo0X0hfICovCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXgg MGM3M2E0NzA3ZS4uYjI3ZTkyZmZkMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29u LmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMSw2ICsxLDcgQEAK IHBnX2R1bXBfY29tbW9uX3NvdXJjZXMgPSBmaWxlcygKICAgJ2NvbXByZXNzX2lvLmMnLAogICAn Y29tcHJlc3NfZ3ppcC5jJywKKyAgJ2NvbXByZXNzX2x6NC5jJywKICAgJ2R1bXB1dGlscy5jJywK ICAgJ3BhcmFsbGVsLmMnLAogICAncGdfYmFja3VwX2FyY2hpdmVyLmMnLApAQCAtMTUsNyArMTYs NyBAQCBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiBwZ19kdW1wX2NvbW1vbiA9IHN0 YXRpY19saWJyYXJ5KCdsaWJwZ2R1bXBfY29tbW9uJywKICAgcGdfZHVtcF9jb21tb25fc291cmNl cywKICAgY19wY2g6IHBjaF9wb3N0Z3Jlc19mZV9oLAotICBkZXBlbmRlbmNpZXM6IFtmcm9udGVu ZF9jb2RlLCBsaWJwcSwgemxpYl0sCisgIGRlcGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGUsIGxp YnBxLCBsejQsIHpsaWJdLAogICBrd2FyZ3M6IGludGVybmFsX2xpYl9hcmdzLAogKQogCkBAIC04 Myw3ICs4NCwxMCBAQCB0ZXN0cyArPSB7CiAgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2Rp cigpLAogICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAogICAndGFwJzogewotICAg ICdlbnYnOiB7J0daSVBfUFJPR1JBTSc6IGd6aXAucGF0aCgpfSwKKyAgICAnZW52JzogeworICAg ICAgJ0daSVBfUFJPR1JBTSc6IGd6aXAucGF0aCgpLAorICAgICAgJ0xaNCc6IHByb2dyYW1fbHo0 LmZvdW5kKCkgPyBwcm9ncmFtX2x6NC5wYXRoKCkgOiAnJywKKyAgICB9LAogICAgICd0ZXN0cyc6 IFsKICAgICAgICd0LzAwMV9iYXNpYy5wbCcsCiAgICAgICAndC8wMDJfcGdfZHVtcC5wbCcsCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggMWEzYjMwOTQ4NC4uYzBmMDMxYjA1 MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtMzk1LDYgKzM5NSwxMCBA QCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAjaWZuZGVmIEhBVkVfTElCWgogCQkJCWlm IChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkK IAkJCQkJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxzZTsKKyNlbmRpZgorI2lmbmRlZiBVU0Vf TFo0CisJCQkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVT U0lPTl9MWjQpCisJCQkJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CiAjZW5kaWYKIAkJ CQlpZiAoc3VwcG9ydHNfY29tcHJlc3Npb24gPT0gZmFsc2UpCiAJCQkJCXBnX2ZhdGFsKCJjYW5u b3QgcmVzdG9yZSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBv cnRlZCBpbiB0aGlzIGluc3RhbGxhdGlvbikiKTsKQEAgLTIwNzQsNyArMjA3OCw3IEBAIF9kaXNj b3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJLyoKIAkJICogQ2hlY2sg aWYgdGhlIHNwZWNpZmllZCBhcmNoaXZlIGlzIGEgZGlyZWN0b3J5LiBJZiBzbywgY2hlY2sgaWYK LQkJICogdGhlcmUncyBhICJ0b2MuZGF0IiAob3IgInRvYy5kYXQuZ3oiKSBmaWxlIGluIGl0Lgor CQkgKiB0aGVyZSdzIGEgInRvYy5kYXQiIChvciAidG9jLmRhdC57Z3osbHo0fSIpIGZpbGUgaW4g aXQuCiAJCSAqLwogCQlpZiAoc3RhdChBSC0+ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0 LnN0X21vZGUpKQogCQl7CkBAIC0yMDg0LDYgKzIwODgsMTAgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZv cm1hdChBcmNoaXZlSGFuZGxlICpBSCkKICNpZmRlZiBIQVZFX0xJQloKIAkJCWlmIChfZmlsZUV4 aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQuZ3oiKSkKIAkJCQlyZXR1cm4gQUgt PmZvcm1hdDsKKyNlbmRpZgorI2lmZGVmIFVTRV9MWjQKKwkJCWlmIChfZmlsZUV4aXN0c0luRGly ZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQubHo0IikpCisJCQkJcmV0dXJuIEFILT5mb3JtYXQ7 CiAjZW5kaWYKIAkJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0 byBiZSBhIHZhbGlkIGFyY2hpdmUgKFwidG9jLmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJ CSBBSC0+ZlNwZWMpOwpAQCAtMzc0Nyw2ICszNzU1LDEwIEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5k bGUgKkFIKQogI2lmbmRlZiBIQVZFX0xJQloKIAkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCQkJdW5zdXBwb3J0ZWQgPSB0cnVlOwor I2VuZGlmCisjaWZuZGVmIFVTRV9MWjQKKwkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29y aXRobSA9PSBQR19DT01QUkVTU0lPTl9MWjQpCisJCQl1bnN1cHBvcnRlZCA9IHRydWU7CiAjZW5k aWYKIAkJaWYgKHVuc3VwcG9ydGVkKQogCQkJcGdfZmF0YWwoImFyY2hpdmUgaXMgY29tcHJlc3Nl ZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24iKTsK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jCmluZGV4IGFkNjY5M2MzNTguLjQwZjQ5NDlhOWYgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAt NzE1LDEzICs3MTUsMTIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNhc2UgUEdf Q09NUFJFU1NJT05fTk9ORToKIAkJCS8qIGZhbGx0aHJvdWdoICovCiAJCWNhc2UgUEdfQ09NUFJF U1NJT05fR1pJUDoKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgUEdfQ09NUFJFU1NJT05f TFo0OgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fWlNURDoKIAkJCXBnX2ZhdGFs KCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsKIAkJ CWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKLQkJCXBnX2ZhdGFsKCJjb21wcmVz c2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOwotCQkJYnJlYWs7CiAJ fQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIv c3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggMjJhN2M1YzM3Yy4uZDFhOWUx ZDQ1YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTEzOSw2ICsxMzksODAgQEAgbXkg JXBnZHVtcF9ydW5zID0gKAogCQkJYXJncyAgICA9PiBbICctZCcsICIkdGVtcGRpci9jb21wcmVz c2lvbl9nemlwX3BsYWluLnNxbC5neiIsIF0sCiAJCX0sCiAJfSwKKworCSMgRG8gbm90IHVzZSAt LW5vLXN5bmMgdG8gZ2l2ZSB0ZXN0IGNvdmVyYWdlIGZvciBkYXRhIHN5bmMuCisJY29tcHJlc3Np b25fbHo0X2N1c3RvbSA9PiB7CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lvbicsCisJ CWNvbXBpbGVfb3B0aW9uID0+ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJCQkncGdf ZHVtcCcsICAgICAgJy0tZm9ybWF0PWN1c3RvbScsCisJCQknLS1jb21wcmVzcz1sejQnLCAiLS1m aWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20uZHVtcCIsCisJCQkncG9zdGdyZXMn LAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsCisJCQkiLS1maWxl PSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20uc3FsIiwKKwkJCSIkdGVtcGRpci9jb21w cmVzc2lvbl9sejRfY3VzdG9tLmR1bXAiLAorCQldLAorCQljb21tYW5kX2xpa2UgPT4geworCQkJ Y29tbWFuZCA9PiBbCisJCQkJJ3BnX3Jlc3RvcmUnLAorCQkJCSctbCcsICIkdGVtcGRpci9jb21w cmVzc2lvbl9sejRfY3VzdG9tLmR1bXAiLAorCQkJXSwKKwkJCWV4cGVjdGVkID0+IHFyL0NvbXBy ZXNzaW9uOiBsejQvLAorCQkJbmFtZSA9PiAnZGF0YSBjb250ZW50IGlzIGx6NCBjb21wcmVzc2Vk JworCQl9LAorCX0sCisKKwkjIERvIG5vdCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBjb3Zl cmFnZSBmb3IgZGF0YSBzeW5jLgorCWNvbXByZXNzaW9uX2x6NF9kaXIgPT4geworCQl0ZXN0X2tl eSAgICAgICA9PiAnY29tcHJlc3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJ ZHVtcF9jbWQgICAgICAgPT4gWworCQkJJ3BnX2R1bXAnLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICctLWpvYnM9MicsCisJCQknLS1mb3JtYXQ9ZGlyZWN0b3J5JywgICAgICAgICAgICAg ICAgICAgJy0tY29tcHJlc3M9bHo0OjEnLAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lv bl9sejRfZGlyIiwgJ3Bvc3RncmVzJywKKwkJXSwKKwkJIyBHaXZlIGNvdmVyYWdlIGZvciBtYW51 YWxseSBjb21wcmVzc2VkIGJsb2IudG9jIGZpbGVzIGR1cmluZworCQkjIHJlc3RvcmUuCisJCWNv bXByZXNzX2NtZCA9PiB7CisJCQlwcm9ncmFtID0+ICRFTlZ7J0xaNCd9LAorCQkJYXJncyAgICA9 PiBbCisJCQkJJy16JywgJy1mJywgJy0tcm0nLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9s ejRfZGlyL2Jsb2JzLnRvYyIsCisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvYmxv YnMudG9jLmx6NCIsCisJCQldLAorCQl9LAorCQkjIFZlcmlmeSB0aGF0IGRhdGEgZmlsZXMgd2hl cmUgY29tcHJlc3NlZAorCQlnbG9iX3BhdHRlcm5zID0+IFsKKwkJCSIkdGVtcGRpci9jb21wcmVz c2lvbl9sejRfZGlyL3RvYy5kYXQiLAorCQkgICAgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9k aXIvKi5kYXQubHo0IiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUn LCAnLS1qb2JzPTInLAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyLnNx bCIsCisJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2RpciIsCisJCV0sCisJfSwKKworCWNv bXByZXNzaW9uX2x6NF9wbGFpbiA9PiB7CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lv bicsCisJCWNvbXBpbGVfb3B0aW9uID0+ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJ CQkncGdfZHVtcCcsICctLWZvcm1hdD1wbGFpbicsICctLWNvbXByZXNzPWx6NCcsCisJCQkiLS1m aWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9wbGFpbi5zcWwubHo0IiwgJ3Bvc3RncmVzJywK KwkJXSwKKwkJIyBEZWNvbXByZXNzIHRoZSBnZW5lcmF0ZWQgZmlsZSB0byBydW4gdGhyb3VnaCB0 aGUgdGVzdHMuCisJCWNvbXByZXNzX2NtZCA9PiB7CisJCQlwcm9ncmFtID0+ICRFTlZ7J0xaNCd9 LAorCQkJYXJncyAgICA9PiBbCisJCQkJJy1kJywgJy1mJywKKwkJCQkiJHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X3BsYWluLnNxbC5sejQiLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRf cGxhaW4uc3FsIiwKKwkJCV0sCisJCX0sCisJfSwKKwogCWNsZWFuID0+IHsKIAkJZHVtcF9jbWQg PT4gWwogCQkJJ3BnX2R1bXAnLApAQCAtNDE3NSwxMSArNDI0OSwxMSBAQCBmb3JlYWNoIG15ICRy dW4gKHNvcnQga2V5cyAlcGdkdW1wX3J1bnMpCiAJbXkgJHJ1bl9kYiAgID0gJ3Bvc3RncmVzJzsK IAogCSMgU2tpcCBjb21tYW5kLWxldmVsIHRlc3RzIGZvciBnemlwIGlmIHRoZXJlIGlzIG5vIHN1 cHBvcnQgZm9yIGl0LgotCWlmICggICBkZWZpbmVkKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBp bGVfb3B0aW9ufSkKLQkJJiYgJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVx ICdnemlwJwotCQkmJiAhJHN1cHBvcnRzX2d6aXApCisJaWYgKCRwZ2R1bXBfcnVuc3skcnVufS0+ e2NvbXBpbGVfb3B0aW9ufSAmJgorCQkoJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRp b259IGVxICdnemlwJyAmJiAhJHN1cHBvcnRzX2d6aXApIHx8CisJCSgkcGdkdW1wX3J1bnN7JHJ1 bn0tPntjb21waWxlX29wdGlvbn0gZXEgJ2x6NCcgJiYgISRzdXBwb3J0c19sejQpKQogCXsKLQkJ bm90ZSAiJHJ1bjogc2tpcHBlZCBkdWUgdG8gbm8gZ3ppcCBzdXBwb3J0IjsKKwkJbm90ZSAiJHJ1 bjogc2tpcHBlZCBkdWUgdG8gbm8gJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259 IHN1cHBvcnQiOwogCQluZXh0OwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAy OTI2NmI1ZGU5Li4wZTE0NGJjZWFmIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTM4 MCw2ICsxMzgwLDcgQEAgTFdMb2NrCiBMV0xvY2tIYW5kbGUKIExXTG9ja01vZGUKIExXTG9ja1Bh ZGRlZAorTFo0Q29tcHJlc3NvclN0YXRlCiBMWjRGX2NvbXByZXNzaW9uQ29udGV4dF90CiBMWjRG X2RlY29tcHJlc3NPcHRpb25zX3QKIExaNEZfZGVjb21wcmVzc2lvbkNvbnRleHRfdAotLSAKMi4z NC4xCgo= --b1_SYi4uvFhqzbxbjsoeasreueLGXmmrrLQb2ygYpVzc--