Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wh0dF-006c6G-24 for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Jul 2026 07:54:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wh0dE-005Kj4-1Q for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Jul 2026 07:54:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wh0dD-005Kiw-2v for pgsql-hackers@lists.postgresql.org; Tue, 07 Jul 2026 07:54:16 +0000 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wh0dA-00000002DiN-3258 for pgsql-hackers@lists.postgresql.org; Tue, 07 Jul 2026 07:54:15 +0000 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-c0c15bd6b8fso375687766b.0 for ; Tue, 07 Jul 2026 00:54:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1783410851; x=1784015651; darn=lists.postgresql.org; h=in-reply-to:references:from:to:subject:cc:message-id:date :mime-version:content-type:from:to:cc:subject:date:message-id :reply-to:content-type; bh=N8I7f4oxM5gmtyDPBhO9VOVgsiYZd27Y7n/T0xsysnU=; b=rwf9deEAoBCgWiHUxuEFoQRUMk721BEGivpd+2ZcE8AL/iUxuS0AsB1/omJco1o8L4 161BE+Yl7I4YmucnRmQzZFr9n0PkY8vwUC1/LAAIkOAoCBbS7aT88sTM4RPqJLKJaL4D opY5urBWbB3OpHHL/6919ZiYLH60clQTlvu5WKiArTcy9bFqPM9uxuV1B77cOXs476m1 RaMOw2ud9B4MCqANlR1EfpeScaPe1hEV0YQWK4fA5fKzfubOOAvDJyNTjzNXQGww1CSY ZJ2P6TpSRR/LwEe6gpkSw1TtZAIAdYfEXvFQrCwBBQimNq21nDpXYXTLawuf8KKQC/aN HoYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783410851; x=1784015651; h=in-reply-to:references:from:to:subject:cc:message-id:date :mime-version:content-type:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=N8I7f4oxM5gmtyDPBhO9VOVgsiYZd27Y7n/T0xsysnU=; b=jlsu5ftZ0IVlPBfBRRv3GaEpA+RdDVMwSJIkWrJo5C07qTu31no+2aJwSx/+dEW9Qf 0HYakYVZ9IjqmuiCP7KpdN79tpKwfW92xEMRfkOREbBMNfnbvd9hjcWv3FHa+yVP4IsB nBzXJuFlkfRoFssVLACJYieIeXG41bl88ZKi1L6VM6vZV9GRvXVjPJbUlZa8fd0bb1jJ ujcJBYwjvb4856sOVzr6B9/htEL1CvMhAzKOELvuO/NLGyM+ZSKRILAGVD8ibb5wTDBM y7krdq0boRlM5v0ZZ9JB38uE3wqTOzuXzzhSSyF3MpHdgm3zAwd/RewEdLOUHnFFsru+ Nm4Q== X-Gm-Message-State: AOJu0YwBwMymvtxBA8JEUaOWEdAnH41SxVMU2bIexcy3cJ/Lm14WeGhK lm1FtbamoXZETbCcJiSYkotIMo+nYec9BQqgHl+CfF9sxAAoJIaBmmMT2LpPbqi3JOY= X-Gm-Gg: AfdE7cnQwfDjXEVamaDR0DHcFJju2gWEBisFrlmNRX3d1RMpHEG01mfmNxE1a6bb/ht BWEvpoJ7PmD5RWjRWTp61iXCYDavln4daXmq/LbBJEjMSNNemxR/t+KyjLG9e3CUfrBkJKwWA5r /B7rILPDGqmgr4Z/+2eiwtp5oAhFEN3+61ZNyPBohnQHEIyr8fNMxb8eDANCP94qo3lvGLvbWRk MuveaVcfOfZ9g7qeWfFwTxKFVjiMT447lPwT2wCqK06QZCQfyR5tNrngf68qGofYTyuPPFkU3O6 I8tClgvoUNCaCV6QZpyUfXisjwOJAA+JKxl3F4e7rVMUXNtNdZAFE3iyldWVk0210A6pZRQweUe TnHccAsD4+UMsdoJpR63vFKG2dLxxFtM0mutiiDHXCHnVIP45cR02U/sLf05FzuSg60/AJmhmtu u5t+FIDTdaZ1gSzewxCkdzfCHuci5FjcmXWYIfFA== X-Received: by 2002:a17:907:3cc2:b0:c15:b48d:caa4 with SMTP id a640c23a62f3a-c15b48dfd33mr52447466b.39.1783410851012; Tue, 07 Jul 2026 00:54:11 -0700 (PDT) Received: from localhost (145-53-221-196.fixed.kpn.net. [145.53.221.196]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c15ad9bca25sm74130666b.35.2026.07.07.00.54.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 07 Jul 2026 00:54:10 -0700 (PDT) Content-Type: multipart/mixed; boundary=126885df0b67bb59e3c3231088c472cca7a1dc10a8f799be92df1cfb7043 Mime-Version: 1.0 Date: Tue, 07 Jul 2026 09:54:09 +0200 Message-Id: Cc: "PostgreSQL Hackers" , "Alvaro Herrera" , "Jacob Champion" Subject: Re: Don't use the deprecated and insecure PQcancel in our frontend tools anymore To: "Heikki Linnakangas" From: "Jelte Fennema-Nio" X-Mailer: aerc 0.20.1-31-gf6db7c329ce0 References: <88dfe280-ba29-4943-95b8-63abc9f3f771@iki.fi> <9d7ba3ac-d660-483e-8f68-9096a2464e90@iki.fi> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --126885df0b67bb59e3c3231088c472cca7a1dc10a8f799be92df1cfb7043 Content-Type: multipart/alternative; boundary=dd3c66de6d9524e56cf0e60818cd198e2af9996f124fd7f262d1556d7ce9 --dd3c66de6d9524e56cf0e60818cd198e2af9996f124fd7f262d1556d7ce9 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed On Tue Jul 7, 2026 at 12:12 AM CEST, Heikki Linnakangas wrote: > This relies on the signal to interrupt select(), but I'm afraid that's=20 > not guaranteed on all platforms. Also, there's a race condition if the=20 > signal arrives *just* before you call select(). That's what the=20 > "self-pipe hack" is for, see comments at waiteventset.c. Ugh yes you're right. The comment above that block told me otherwise and I didn't question it. Attached is a new version that improves the comment and starts using the same 1 second poll on all platforms. --dd3c66de6d9524e56cf0e60818cd198e2af9996f124fd7f262d1556d7ce9-- --126885df0b67bb59e3c3231088c472cca7a1dc10a8f799be92df1cfb7043 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0001-psql-Replace-cancel_pressed-with-CancelRequested.patch Content-Type: text/x-patch; charset=utf-8; name=v9-0001-psql-Replace-cancel_pressed-with-CancelRequested.patch RnJvbSAyZjNkOTIwNTBhNzc0YjQ1YzcyZmNlZDM3MDkxZDNlNDgwZjA0ODg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBUdWUsIDcgQXByIDIwMjYgMTg6MjQ6MDEgKzAyMDAKU3ViamVjdDogW1BBVENIIHY5 IDEvN10gcHNxbDogUmVwbGFjZSBjYW5jZWxfcHJlc3NlZCB3aXRoIENhbmNlbFJlcXVlc3RlZAoK SW4gYTRmZDNhYTcgc3JjL2ZlX3V0aWxzL2NhbmNlbC5jIHdhcyBpbnRyb2R1Y2VkIHdoaWNoIGFk ZGVkCnRoZSBDYW5jZWxSZXF1ZXN0ZWQgdmFyaWFibGUuIFRoaXMgbmV3IHZhcmlhYmxlIHdhcyB1 c2VkIGluIHBzcWwgdG8KcmVwbGFjZSB0aGUgY2FuY2VsX3ByZXNzZWQgdmFyaWFibGUsIGJ1dCB0 aGF0IHF1aWNrbHkgZ290IHJldmVydGVkIGluCjVkNDNjM2M1NC4gVGhlIHJlYXNvbiB3YXMgdGhh dCBjYW5jZWxfcHJlc3NlZCBoYWQgbm90IGZ1bGx5IHJlcGxhY2VkIGJ5CkNhbmNlbFJlcXVlc3Rl ZCBldmVyeXdoZXJlIGluIHRoZSBjb2RlLCBhbmQgdGhlIG1peGVkIHVzYWdlIGNhdXNlZAppc3N1 ZXMgKGUuZy4gd2l0aCBcd2F0Y2gpLgoKVGhpcyBub3cgZG9lcyB0aGF0IG9yaWdpbmFsIHJlZmFj dG9yIGNvcnJlY3RseSBieSB1c2luZyBDYW5jZWxSZXF1ZXN0ZWQKZXZlcnl3aGVyZSBhbmQgY29t cGxldGVseSBnZXR0aW5nIHJpZCBvZiBjYW5jZWxfcHJlc3NlZC4KCjVkNDNjM2M1NCBtZW50aW9u cyB0aGUgLS1zaW5nbGUtc3RlcCBmbGFnIGFzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVkCmZ1cnRo ZXIgYW5hbHlzaXMuIEkgdHJpZWQgLS1zaW5nbGUtc3RlcCB3aXRoIGFuZCB3aXRob3V0IHRoaXMg Y29tbWl0LAphbmQgQ3RybCtDIGJlaGF2ZXMgdGhlIHNhbWUgaW4gYm90aC4gSSBhbHNvIGNhbm5v dCB0aGluayBvZiBhIHJlYXNvbiB3aHkKaXQgd291bGQgYmVoYXZlIGFueSBkaWZmZXJlbnRseS4K ClRoZSBvbmx5IHNsaWdodCBiZWhhdmlvcmFsIGNoYW5nZSBJIGNvdWxkIHRoaW5rIG9mIHdhcyB0 aGF0CmNhbmNlbF9wcmVzc2VkIHdhcyBzZXQgYWZ0ZXIgcHNxbCdzIGxvbmdqdW1wLCBhbmQgQ2Fu Y2VsUmVxdWVzdGVkIGlzIHNldApiZWZvcmUuIEJ1dCBzaW5jZSBDYW5jZWxSZXF1ZXN0ZWQgaXMg bm93IHNldCB0byBmYWxzZSBhZnRlciB0aGUgbG9uZ2p1bXAKdGhlcmUncyBubyBwcmFjdGljYWwg ZGlmZmVyZW5jZSBjYXVzZWQgYnkgdGhhdC4KLS0tCiBzcmMvYmluL3BzcWwvY29tbWFuZC5jICAg ICAgIHwgIDEwICsrLS0KIHNyYy9iaW4vcHNxbC9jb21tb24uYyAgICAgICAgfCAgMjEgKysrKy0t LS0KIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgfCAgIDkgKystLQogc3JjL2Jpbi9wc3Fs L21haW5sb29wLmMgICAgICB8ICAgNyArLS0KIHNyYy9iaW4vcHNxbC92YXJpYWJsZXMuYyAgICAg fCAgIDMgKy0KIHNyYy9mZV91dGlscy9wcmludC5jICAgICAgICAgfCAxMDEgKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2ZlX3V0aWxzL3ByaW50LmggfCAg IDIgLQogNyBmaWxlcyBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbWFuZC5jIGIvc3JjL2Jpbi9wc3FsL2NvbW1h bmQuYwppbmRleCA3ZmRkNDUxMWEzNi4uNzM3ZWU1YWI5OTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cHNxbC9jb21tYW5kLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYwpAQCAtNDM5Miw3ICs0 MzkyLDcgQEAgd2FpdF91bnRpbF9jb25uZWN0ZWQoUEdjb25uICpjb25uKQogCQkgKiBPbiBldmVy eSBpdGVyYXRpb24gb2YgdGhlIGNvbm5lY3Rpb24gc2VxdWVuY2UsIGxldCdzIGNoZWNrIGlmIHRo ZQogCQkgKiB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBjYW5jZWxsYXRpb24uCiAJCSAqLwotCQlpZiAo Y2FuY2VsX3ByZXNzZWQpCisJCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlicmVhazsKIAogCQkv KgpAQCAtNDQwNCw3ICs0NDA0LDcgQEAgd2FpdF91bnRpbF9jb25uZWN0ZWQoUEdjb25uICpjb25u KQogCQkJYnJlYWs7CiAKIAkJLyoKLQkJICogSWYgdGhlIHVzZXIgc2VuZHMgU0lHSU5UIGJldHdl ZW4gdGhlIGNhbmNlbF9wcmVzc2VkIGNoZWNrLCBhbmQKKwkJICogSWYgdGhlIHVzZXIgc2VuZHMg U0lHSU5UIGJldHdlZW4gdGhlIENhbmNlbFJlcXVlc3RlZCBjaGVjaywgYW5kCiAJCSAqIHBvbGxp bmcgb2YgdGhlIHNvY2tldCwgaXQgd2lsbCBub3QgYmUgcmVjb2duaXplZC4gSW5zdGVhZCwgd2Ug d2lsbAogCQkgKiBqdXN0IHdhaXQgdW50aWwgdGhlIG5leHQgc3RlcCBpbiB0aGUgY29ubmVjdGlv biBzZXF1ZW5jZSBvcgogCQkgKiBmb3JldmVyLCB3aGljaCBtaWdodCByZXF1aXJlIHVzZXJzIHRv IHNlbmQgU0lHVEVSTSBvciBTSUdRVUlULgpAQCAtNDQxNSw3ICs0NDE1LDcgQEAgd2FpdF91bnRp bF9jb25uZWN0ZWQoUEdjb25uICpjb25uKQogCQkgKiBUaGUgc2VsZi1waXBlIHRyaWNrIHJlcXVp cmVzIGEgYml0IG9mIGNvZGUgdG8gc2V0dXAuIHBzZWxlY3QoMikgYW5kCiAJCSAqIHBwb2xsKDIp IGFyZSBub3Qgb24gYWxsIHRoZSBwbGF0Zm9ybXMgd2Ugc3VwcG9ydC4gVGhlIHNpbXBsZXN0CiAJ CSAqIHNvbHV0aW9uIGhhcHBlbnMgdG8ganVzdCBiZSBhZGRpbmcgYSB0aW1lb3V0LCBzbyBsZXQn cyB3YWl0IGZvciAxCi0JCSAqIHNlY29uZCBhbmQgY2hlY2sgY2FuY2VsX3ByZXNzZWQgYWdhaW4u CisJCSAqIHNlY29uZCBhbmQgY2hlY2sgQ2FuY2VsUmVxdWVzdGVkIGFnYWluLgogCQkgKi8KIAkJ ZW5kX3RpbWUgPSBQUWdldEN1cnJlbnRUaW1lVVNlYygpICsgMTAwMDAwMDsKIAkJcmMgPSBQUXNv Y2tldFBvbGwoc29jaywgZm9yUmVhZCwgIWZvclJlYWQsIGVuZF90aW1lKTsKQEAgLTYwODIsNyAr NjA4Miw3IEBAIGRvX3dhdGNoKFBRRXhwQnVmZmVyIHF1ZXJ5X2J1ZiwgZG91YmxlIHNsZWVwLCBp bnQgaXRlciwgaW50IG1pbl9yb3dzKQogCQkJbG9uZwkJcyA9IE1pbihpLCAxMDAwTCk7CiAKIAkJ CXBnX3VzbGVlcChzICogMTAwMEwpOwotCQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQkJaWYgKENh bmNlbFJlcXVlc3RlZCkKIAkJCXsKIAkJCQlkb25lID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTYw OTIsNyArNjA5Miw3IEBAIGRvX3dhdGNoKFBRRXhwQnVmZmVyIHF1ZXJ5X2J1ZiwgZG91YmxlIHNs ZWVwLCBpbnQgaXRlciwgaW50IG1pbl9yb3dzKQogI2Vsc2UKIAkJLyogc2lnd2FpdCgpIHdpbGwg aGFuZGxlIFNJR0lOVC4gKi8KIAkJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmc2lnaW50LCBOVUxM KTsKLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQkJZG9u ZSA9IHRydWU7CiAKIAkJLyogV2FpdCBmb3IgU0lHSU5ULCBTSUdDSExEIG9yIFNJR0FMUk0uICov CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3BzcWwvY29tbW9u LmMKaW5kZXggN2RiODAyNWQyNGMuLjcyMWY4NzMzYTUzIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bz cWwvY29tbW9uLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCkBAIC0yOTIsNyArMjkyLDcg QEAgTm90aWNlUHJvY2Vzc29yKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbWVzc2FnZSkKICAqCiAg KiBTSUdJTlQgaXMgc3VwcG9zZWQgdG8gYWJvcnQgYWxsIGxvbmctcnVubmluZyBwc3FsIG9wZXJh dGlvbnMsIG5vdCBvbmx5CiAgKiBkYXRhYmFzZSBxdWVyaWVzLiAgSW4gbW9zdCBwbGFjZXMsIHRo aXMgaXMgYWNjb21wbGlzaGVkIGJ5IGNoZWNraW5nCi0gKiBjYW5jZWxfcHJlc3NlZCBkdXJpbmcg bG9uZy1ydW5uaW5nIGxvb3BzLiAgSG93ZXZlciwgdGhhdCB3b24ndCB3b3JrIHdoZW4KKyAqIENh bmNlbFJlcXVlc3RlZCBkdXJpbmcgbG9uZy1ydW5uaW5nIGxvb3BzLiAgSG93ZXZlciwgdGhhdCB3 b24ndCB3b3JrIHdoZW4KICAqIGJsb2NrZWQgb24gdXNlciBpbnB1dCAoaW4gcmVhZGxpbmUoKSBv ciBmZ2V0cygpKS4gIEluIHRob3NlIHBsYWNlcywgd2UKICAqIHNldCBzaWdpbnRfaW50ZXJydXB0 X2VuYWJsZWQgdHJ1ZSB3aGlsZSBibG9ja2VkLCBpbnN0cnVjdGluZyB0aGUgc2lnbmFsCiAgKiBj YXRjaGVyIHRvIGxvbmdqbXAgdGhyb3VnaCBzaWdpbnRfaW50ZXJydXB0X2ptcC4gIFdlIGFzc3Vt ZSByZWFkbGluZSBhbmQKQEAgLTMxNiw5ICszMTYsNiBAQCBwc3FsX2NhbmNlbF9jYWxsYmFjayh2 b2lkKQogCQlzaWdsb25nam1wKHNpZ2ludF9pbnRlcnJ1cHRfam1wLCAxKTsKIAl9CiAjZW5kaWYK LQotCS8qIGVsc2UsIHNldCBjYW5jZWwgZmxhZyB0byBzdG9wIGFueSBsb25nLXJ1bm5pbmcgbG9v cHMgKi8KLQljYW5jZWxfcHJlc3NlZCA9IHRydWU7CiB9CiAKIHZvaWQKQEAgLTg4MSw4ICs4Nzgs OCBAQCBFeGVjUXVlcnlUdXBsZXMoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCkKIAkJCXsKIAkJCQlj b25zdCBjaGFyICpxdWVyeSA9IFBRZ2V0dmFsdWUocmVzdWx0LCByLCBjKTsKIAotCQkJCS8qIEFi YW5kb24gZXhlY3V0aW9uIGlmIGNhbmNlbF9wcmVzc2VkICovCi0JCQkJaWYgKGNhbmNlbF9wcmVz c2VkKQorCQkJCS8qIEFiYW5kb24gZXhlY3V0aW9uIGlmIENhbmNlbFJlcXVlc3RlZCAqLworCQkJ CWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQkJCWdvdG8gbG9vcF9leGl0OwogCiAJCQkJLyoKQEAg LTExNDYsNyArMTE0Myw3IEBAIFNlbmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkKIAkJaWYgKGZn ZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSAhPSBOVUxMKQogCQkJaWYgKGJ1ZlswXSA9PSAn eCcpCiAJCQkJZ290byBzZW5kcXVlcnlfY2xlYW51cDsKLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQor CQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQkJZ290byBzZW5kcXVlcnlfY2xlYW51cDsKIAl9CiAJ ZWxzZSBpZiAocHNldC5lY2hvID09IFBTUUxfRUNIT19RVUVSSUVTKQpAQCAtMTc2OCw3ICsxNzY1 LDcgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksCiAJICog Y29uc3VtZWQuICBUaGUgdXNlcidzIGludGVudGlvbiwgdGhvdWdoLCBpcyB0byBjYW5jZWwgdGhl IGVudGlyZSB3YXRjaAogCSAqIHByb2Nlc3MsIHNvIGRldGVjdCBhIHNlbnQgY2FuY2VsbGF0aW9u IHJlcXVlc3QgYW5kIGV4aXQgaW4gdGhpcyBjYXNlLgogCSAqLwotCWlmIChpc193YXRjaCAmJiBj YW5jZWxfcHJlc3NlZCkKKwlpZiAoaXNfd2F0Y2ggJiYgQ2FuY2VsUmVxdWVzdGVkKQogCXsKIAkJ Q2xlYXJPclNhdmVBbGxSZXN1bHRzKCk7CiAJCXJldHVybiAwOwpAQCAtMTk4Niw3ICsxOTgzLDcg QEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksCiAJCQkJICog dXNlIG9mIGNodW5raW5nIGZvciBhbGwgY2FzZXMgaW4gd2hpY2ggUHJpbnRRdWVyeVJlc3VsdAog CQkJCSAqIHdvdWxkIHNlbmQgdGhlIHJlc3VsdCB0byBzb21lcGxhY2Ugb3RoZXIgdGhhbiBwcmlu dFF1ZXJ5LgogCQkJCSAqLwotCQkJCWlmIChzdWNjZXNzICYmICFmbHVzaF9lcnJvciAmJiAhY2Fu Y2VsX3ByZXNzZWQpCisJCQkJaWYgKHN1Y2Nlc3MgJiYgIWZsdXNoX2Vycm9yICYmICFDYW5jZWxS ZXF1ZXN0ZWQpCiAJCQkJewogCQkJCQlwcmludFF1ZXJ5KHJlc3VsdCwgJm15X3BvcHQsIHR1cGxl c19mb3V0LCBpc19wYWdlciwgcHNldC5sb2dmaWxlKTsKIAkJCQkJZmx1c2hfZXJyb3IgPSBmZmx1 c2godHVwbGVzX2ZvdXQpOwpAQCAtMjAxMyw3ICsyMDEwLDcgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vz c1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksCiAJCQkJQXNzZXJ0KFBRbnR1cGxlcyhyZXN1bHQp ID09IDApOwogCiAJCQkJLyogRGlzcGxheSB0aGUgZm9vdGVyIHVzaW5nIHRoZSBlbXB0eSByZXN1 bHQgKi8KLQkJCQlpZiAoc3VjY2VzcyAmJiAhZmx1c2hfZXJyb3IgJiYgIWNhbmNlbF9wcmVzc2Vk KQorCQkJCWlmIChzdWNjZXNzICYmICFmbHVzaF9lcnJvciAmJiAhQ2FuY2VsUmVxdWVzdGVkKQog CQkJCXsKIAkJCQkJbXlfcG9wdC50b3B0LnN0b3BfdGFibGUgPSB0cnVlOwogCQkJCQlwcmludFF1 ZXJ5KHJlc3VsdCwgJm15X3BvcHQsIHR1cGxlc19mb3V0LCBpc19wYWdlciwgcHNldC5sb2dmaWxl KTsKQEAgLTIxNzIsNyArMjE2OSw3IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0 IGNoYXIgKnF1ZXJ5LAogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOwogCQlyZXN1bHQgPSBu ZXh0X3Jlc3VsdDsKIAotCQlpZiAoY2FuY2VsX3ByZXNzZWQgJiYgUFFwaXBlbGluZVN0YXR1cyhw c2V0LmRiKSA9PSBQUV9QSVBFTElORV9PRkYpCisJCWlmIChDYW5jZWxSZXF1ZXN0ZWQgJiYgUFFw aXBlbGluZVN0YXR1cyhwc2V0LmRiKSA9PSBQUV9QSVBFTElORV9PRkYpCiAJCXsKIAkJCS8qCiAJ CQkgKiBPdXRzaWRlIG9mIGEgcGlwZWxpbmUsIGRyb3AgdGhlIG5leHQgcmVzdWx0LCBhcyB3ZWxs IGFzIGFueQpAQCAtMjIyOSw3ICsyMjI2LDcgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMo Y29uc3QgY2hhciAqcXVlcnksCiAJaWYgKCFDaGVja0Nvbm5lY3Rpb24oKSkKIAkJcmV0dXJuIC0x OwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkIHx8IHJldHVybl9lYXJseSkKKwlpZiAoQ2FuY2VsUmVx dWVzdGVkIHx8IHJldHVybl9lYXJseSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gc3VjY2VzcyA/ IDEgOiAtMTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKaW5kZXggZmVmODZiNGNjYTMuLmVmZjczNDAwNGE1IDEwMDY0NAotLS0g YS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpA QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImNvbW1vbi9s b2dnaW5nLmgiCiAjaW5jbHVkZSAiZGVzY3JpYmUuaCIKKyNpbmNsdWRlICJmZV91dGlscy9jYW5j ZWwuaCIKICNpbmNsdWRlICJmZV91dGlscy9tYnByaW50LmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMv cHJpbnQuaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKQEAgLTE1MTIsNyAr MTUxMyw3IEBAIGRlc2NyaWJlVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wg dmVyYm9zZSwgYm9vbCBzaG93U3lzdGVtKQogCQkJUFFjbGVhcihyZXMpOwogCQkJcmV0dXJuIGZh bHNlOwogCQl9Ci0JCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKENhbmNlbFJlcXVlc3RlZCkK IAkJewogCQkJUFFjbGVhcihyZXMpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAtNTQ5OCw3ICs1NDk5 LDcgQEAgbGlzdFRTUGFyc2Vyc1ZlcmJvc2UoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXJldHVy biBmYWxzZTsKIAkJfQogCi0JCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKENhbmNlbFJlcXVl c3RlZCkKIAkJewogCQkJUFFjbGVhcihyZXMpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAtNTg4OCw3 ICs1ODg5LDcgQEAgbGlzdFRTQ29uZmlnc1ZlcmJvc2UoY29uc3QgY2hhciAqcGF0dGVybikKIAkJ CXJldHVybiBmYWxzZTsKIAkJfQogCi0JCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKENhbmNl bFJlcXVlc3RlZCkKIAkJewogCQkJUFFjbGVhcihyZXMpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAt NjM2Nyw3ICs2MzY4LDcgQEAgbGlzdEV4dGVuc2lvbkNvbnRlbnRzKGNvbnN0IGNoYXIgKnBhdHRl cm4pCiAJCQlQUWNsZWFyKHJlcyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KLQkJaWYgKGNhbmNl bF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQl7CiAJCQlQUWNsZWFyKHJlcyk7 CiAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvbWFpbmxvb3AuYyBi L3NyYy9iaW4vcHNxbC9tYWlubG9vcC5jCmluZGV4IDFmNDA5YTU3M2I3Li5lMzBlYjYxMzYxOCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL21haW5sb29wLmMKKysrIGIvc3JjL2Jpbi9wc3FsL21h aW5sb29wLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJjb21tYW5kLmgiCiAjaW5jbHVk ZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJmZV91 dGlscy9jYW5jZWwuaCIKICNpbmNsdWRlICJpbnB1dC5oIgogI2luY2x1ZGUgIm1haW5sb29wLmgi CiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKQEAgLTg1LDcgKzg2LDcgQEAgTWFpbkxvb3AoRklM RSAqc291cmNlKQogCQkvKgogCQkgKiBDbGVhbiB1cCBhZnRlciBhIHByZXZpb3VzIENvbnRyb2wt QwogCQkgKi8KLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQog CQl7CiAJCQlpZiAoIXBzZXQuY3VyX2NtZF9pbnRlcmFjdGl2ZSkKIAkJCXsKQEAgLTk2LDcgKzk3 LDcgQEAgTWFpbkxvb3AoRklMRSAqc291cmNlKQogCQkJCWJyZWFrOwogCQkJfQogCi0JCQljYW5j ZWxfcHJlc3NlZCA9IGZhbHNlOworCQkJQ2FuY2VsUmVxdWVzdGVkID0gZmFsc2U7CiAJCX0KIAog CQkvKgpAQCAtMTE4LDcgKzExOSw3IEBAIE1haW5Mb29wKEZJTEUgKnNvdXJjZSkKIAkJCXByb21w dF9zdGF0dXMgPSBQUk9NUFRfUkVBRFk7CiAJCQluZWVkX3JlZGlzcGxheSA9IGZhbHNlOwogCQkJ cHNldC5zdG10X2xpbmVubyA9IDE7Ci0JCQljYW5jZWxfcHJlc3NlZCA9IGZhbHNlOworCQkJQ2Fu Y2VsUmVxdWVzdGVkID0gZmFsc2U7CiAKIAkJCWlmIChwc2V0LmN1cl9jbWRfaW50ZXJhY3RpdmUp CiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdmFyaWFibGVzLmMgYi9zcmMvYmluL3Bz cWwvdmFyaWFibGVzLmMKaW5kZXggODA2MGYyOTU5Y2MuLjcxZWVhZmQwMzlmIDEwMDY0NAotLS0g YS9zcmMvYmluL3BzcWwvdmFyaWFibGVzLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3ZhcmlhYmxlcy5j CkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJjb21t b24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL2NhbmNlbC5oIgogI2luY2x1ZGUgInZh cmlhYmxlcy5oIgogCiAvKgpAQCAtMjY1LDcgKzI2Niw3IEBAIFByaW50VmFyaWFibGVzKFZhcmlh YmxlU3BhY2Ugc3BhY2UpCiAJewogCQlpZiAocHRyLT52YWx1ZSkKIAkJCXByaW50ZigiJXMgPSAn JXMnXG4iLCBwdHItPm5hbWUsIHB0ci0+dmFsdWUpOwotCQlpZiAoY2FuY2VsX3ByZXNzZWQpCisJ CWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMv ZmVfdXRpbHMvcHJpbnQuYyBiL3NyYy9mZV91dGlscy9wcmludC5jCmluZGV4IGFjZjIwY2I0OThi Li45NGQwMDg2NWMxNyAxMDA2NDQKLS0tIGEvc3JjL2ZlX3V0aWxzL3ByaW50LmMKKysrIGIvc3Jj L2ZlX3V0aWxzL3ByaW50LmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogVGhpcyBmaWxlIHVzZWQg dG8gYmUgcGFydCBvZiBwc3FsLCBidXQgbm93IGl0J3Mgc2VwYXJhdGVkIG91dCB0byBhbGxvdwog ICogb3RoZXIgZnJvbnRlbmQgcHJvZ3JhbXMgdG8gdXNlIGl0LiAgQmVjYXVzZSB0aGUgcHJpbnRp bmcgY29kZSBuZWVkcwotICogYWNjZXNzIHRvIHRoZSBjYW5jZWxfcHJlc3NlZCBmbGFnIGFzIHdl bGwgYXMgU0lHUElQRSB0cmFwcGluZyBhbmQKKyAqIGFjY2VzcyB0byB0aGUgQ2FuY2VsUmVxdWVz dGVkIGZsYWcgYXMgd2VsbCBhcyBTSUdQSVBFIHRyYXBwaW5nIGFuZAogICogcGFnZXIgb3Blbi9j bG9zZSBmdW5jdGlvbnMsIGFsbCB0aGF0IHN0dWZmIGNhbWUgd2l0aCBpdC4KICAqCiAgKgpAQCAt MzAsNiArMzAsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGVfZC5oIgor I2luY2x1ZGUgImZlX3V0aWxzL2NhbmNlbC5oIgogI2luY2x1ZGUgImZlX3V0aWxzL21icHJpbnQu aCIKICNpbmNsdWRlICJmZV91dGlscy9wcmludC5oIgogCkBAIC0zOSwxMyArNDAsOSBAQAogI2Vu ZGlmCiAKIC8qCi0gKiBJZiB0aGUgY2FsbGluZyBwcm9ncmFtIGRvZXNuJ3QgaGF2ZSBhbnkgbWVj aGFuaXNtIGZvciBzZXR0aW5nCi0gKiBjYW5jZWxfcHJlc3NlZCwgaXQgd2lsbCBoYXZlIG5vIGVm ZmVjdC4KLSAqCi0gKiBOb3RlOiBwcmludC5jJ3MgZ2VuZXJhbCBzdHJhdGVneSBmb3Igd2hlbiB0 byBjaGVjayBjYW5jZWxfcHJlc3NlZCBpcyB0byBkbworICogTm90ZTogcHJpbnQuYydzIGdlbmVy YWwgc3RyYXRlZ3kgZm9yIHdoZW4gdG8gY2hlY2sgQ2FuY2VsUmVxdWVzdGVkIGlzIHRvIGRvCiAg KiBzbyBhdCBjb21wbGV0aW9uIG9mIGVhY2ggcm93IG9mIG91dHB1dC4KICAqLwotdm9sYXRpbGUg c2lnX2F0b21pY190IGNhbmNlbF9wcmVzc2VkID0gZmFsc2U7CiAKIHN0YXRpYyBib29sIGFsd2F5 c19pZ25vcmVfc2lncGlwZSA9IGZhbHNlOwogCkBAIC00NDIsNyArNDM5LDcgQEAgcHJpbnRfdW5h bGlnbmVkX3RleHQoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJ Y29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAlib29sCQluZWVkX3JlY29yZHNlcCA9IGZhbHNlOwog Ci0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsK IAogCWlmIChjb250LT5vcHQtPnN0YXJ0X3RhYmxlKQpAQCAtNDc3LDcgKzQ3NCw3IEBAIHByaW50 X3VuYWxpZ25lZF90ZXh0KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0 KQogCQl7CiAJCQlwcmludF9zZXBhcmF0b3IoY29udC0+b3B0LT5yZWNvcmRTZXAsIGZvdXQpOwog CQkJbmVlZF9yZWNvcmRzZXAgPSBmYWxzZTsKLQkJCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJCWlm IChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQkJYnJlYWs7CiAJCX0KIAkJZnB1dHMoKnB0ciwgZm91dCk7 CkBAIC00OTMsNyArNDkwLDcgQEAgcHJpbnRfdW5hbGlnbmVkX3RleHQoY29uc3QgcHJpbnRUYWJs ZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJewogCQlwcmludFRhYmxlRm9vdGVyICpmb290 ZXJzID0gZm9vdGVyc193aXRoX2RlZmF1bHQoY29udCk7CiAKLQkJaWYgKCFvcHRfdHVwbGVzX29u bHkgJiYgZm9vdGVycyAhPSBOVUxMICYmICFjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKCFvcHRfdHVw bGVzX29ubHkgJiYgZm9vdGVycyAhPSBOVUxMICYmICFDYW5jZWxSZXF1ZXN0ZWQpCiAJCXsKIAkJ CXByaW50VGFibGVGb290ZXIgKmY7CiAKQEAgLTUzMyw3ICs1MzAsNyBAQCBwcmludF91bmFsaWdu ZWRfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJ Y29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAlib29sCQluZWVkX3JlY29yZHNlcCA9IGZhbHNlOwog Ci0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsK IAogCWlmIChjb250LT5vcHQtPnN0YXJ0X3RhYmxlKQpAQCAtNTU4LDcgKzU1NSw3IEBAIHByaW50 X3VuYWxpZ25lZF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAq Zm91dCkKIAkJCXByaW50X3NlcGFyYXRvcihjb250LT5vcHQtPnJlY29yZFNlcCwgZm91dCk7CiAJ CQlwcmludF9zZXBhcmF0b3IoY29udC0+b3B0LT5yZWNvcmRTZXAsIGZvdXQpOwogCQkJbmVlZF9y ZWNvcmRzZXAgPSBmYWxzZTsKLQkJCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJCWlmIChDYW5jZWxS ZXF1ZXN0ZWQpCiAJCQkJYnJlYWs7CiAJCX0KIApAQCAtNTc1LDcgKzU3Miw3IEBAIHByaW50X3Vu YWxpZ25lZF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91 dCkKIAlpZiAoY29udC0+b3B0LT5zdG9wX3RhYmxlKQogCXsKIAkJLyogcHJpbnQgZm9vdGVycyAq LwotCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJzICE9IE5VTEwgJiYgIWNh bmNlbF9wcmVzc2VkKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJzICE9 IE5VTEwgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAqZjsK IApAQCAtNjgzLDcgKzY4MCw3IEBAIHByaW50X2FsaWduZWRfdGV4dChjb25zdCBwcmludFRhYmxl Q29udGVudCAqY29udCwgRklMRSAqZm91dCwgYm9vbCBpc19wYWdlcikKIAlpbnQJCQlvdXRwdXRf Y29sdW1ucyA9IDA7IC8qIFdpZHRoIG9mIGludGVyYWN0aXZlIGNvbnNvbGUgKi8KIAlib29sCQlp c19sb2NhbF9wYWdlciA9IGZhbHNlOwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5j ZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsKIAogCWlmIChvcHRfYm9yZGVyID4gMikKQEAgLTEwMDQs NyArMTAwMSw3IEBAIHByaW50X2FsaWduZWRfdGV4dChjb25zdCBwcmludFRhYmxlQ29udGVudCAq Y29udCwgRklMRSAqZm91dCwgYm9vbCBpc19wYWdlcikKIAl7CiAJCWJvb2wJCW1vcmVfbGluZXM7 CiAKLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQkJYnJl YWs7CiAKIAkJLyoKQEAgLTExNjAsMTIgKzExNTcsMTIgQEAgcHJpbnRfYWxpZ25lZF90ZXh0KGNv bnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0LCBib29sIGlzX3BhZ2VyKQog CXsKIAkJcHJpbnRUYWJsZUZvb3RlciAqZm9vdGVycyA9IGZvb3RlcnNfd2l0aF9kZWZhdWx0KGNv bnQpOwogCi0JCWlmIChvcHRfYm9yZGVyID09IDIgJiYgIWNhbmNlbF9wcmVzc2VkKQorCQlpZiAo b3B0X2JvcmRlciA9PSAyICYmICFDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlfcHJpbnRfaG9yaXpvbnRh bF9saW5lKGNvbF9jb3VudCwgd2lkdGhfd3JhcCwgb3B0X2JvcmRlciwKIAkJCQkJCQkJICAgUFJJ TlRfUlVMRV9CT1RUT00sIGZvcm1hdCwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVycyAqLwot CQlpZiAoZm9vdGVycyAmJiAhb3B0X3R1cGxlc19vbmx5ICYmICFjYW5jZWxfcHJlc3NlZCkKKwkJ aWYgKGZvb3RlcnMgJiYgIW9wdF90dXBsZXNfb25seSAmJiAhQ2FuY2VsUmVxdWVzdGVkKQogCQl7 CiAJCQlwcmludFRhYmxlRm9vdGVyICpmOwogCkBAIC0xMzI1LDcgKzEzMjIsNyBAQCBwcmludF9h bGlnbmVkX3ZlcnRpY2FsKGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LAogCQkJCWRtdWx0 aWxpbmUgPSBmYWxzZTsKIAlpbnQJCQlvdXRwdXRfY29sdW1ucyA9IDA7IC8qIFdpZHRoIG9mIGlu dGVyYWN0aXZlIGNvbnNvbGUgKi8KIAotCWlmIChjYW5jZWxfcHJlc3NlZCkKKwlpZiAoQ2FuY2Vs UmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlpZiAob3B0X2JvcmRlciA+IDIpCkBAIC0xMzQxLDcg KzEzMzgsNyBAQCBwcmludF9hbGlnbmVkX3ZlcnRpY2FsKGNvbnN0IHByaW50VGFibGVDb250ZW50 ICpjb250LAogCXsKIAkJcHJpbnRUYWJsZUZvb3RlciAqZm9vdGVycyA9IGZvb3RlcnNfd2l0aF9k ZWZhdWx0KGNvbnQpOwogCi0JCWlmICghb3B0X3R1cGxlc19vbmx5ICYmICFjYW5jZWxfcHJlc3Nl ZCAmJiBmb290ZXJzKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiAhQ2FuY2VsUmVxdWVzdGVk ICYmIGZvb3RlcnMpCiAJCXsKIAkJCXByaW50VGFibGVGb290ZXIgKmY7CiAKQEAgLTE1OTcsNyAr MTU5NCw3IEBAIHByaW50X2FsaWduZWRfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQg KmNvbnQsCiAJCQkJCW9mZnNldCwKIAkJCQkJY2hhcnNfdG9fb3V0cHV0OwogCi0JCWlmIChjYW5j ZWxfcHJlc3NlZCkKKwkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJCWJyZWFrOwogCiAJCWlmIChp ID09IDApCkBAIC0xODA2LDEyICsxODAzLDEyIEBAIHByaW50X2FsaWduZWRfdmVydGljYWwoY29u c3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsCiAKIAlpZiAoY29udC0+b3B0LT5zdG9wX3RhYmxl KQogCXsKLQkJaWYgKG9wdF9ib3JkZXIgPT0gMiAmJiAhY2FuY2VsX3ByZXNzZWQpCisJCWlmIChv cHRfYm9yZGVyID09IDIgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJCXByaW50X2FsaWduZWRfdmVy dGljYWxfbGluZShjb250LT5vcHQsIDAsIGh3aWR0aCwgZHdpZHRoLAogCQkJCQkJCQkJCW91dHB1 dF9jb2x1bW5zLCBQUklOVF9SVUxFX0JPVFRPTSwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVy cyAqLwotCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJzICE9IE5VTEwgJiYg IWNhbmNlbF9wcmVzc2VkKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJz ICE9IE5VTEwgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAq ZjsKIApAQCAtMTg4NSw3ICsxODgyLDcgQEAgcHJpbnRfY3N2X3RleHQoY29uc3QgcHJpbnRUYWJs ZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAlp bnQJCQlpOwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJ CXJldHVybjsKIAogCS8qCkBAIC0xOTI4LDcgKzE5MjUsNyBAQCBwcmludF9jc3ZfdmVydGljYWwo Y29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJLyogcHJpbnQgcmVj b3JkcyAqLwogCWZvciAoaSA9IDAsIHB0ciA9IGNvbnQtPmNlbGxzOyAqcHRyOyBpKyssIHB0cisr KQogCXsKLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQkJ cmV0dXJuOwogCiAJCS8qIHByaW50IG5hbWUgb2YgY29sdW1uICovCkBAIC0yMDAxLDcgKzE5OTgs NyBAQCBwcmludF9odG1sX3RleHQoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUg KmZvdXQpCiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAotCWlm IChjYW5jZWxfcHJlc3NlZCkKKwlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlp ZiAoY29udC0+b3B0LT5zdGFydF90YWJsZSkKQEAgLTIwMzgsNyArMjAzNSw3IEBAIHByaW50X2h0 bWxfdGV4dChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAl7CiAJ CWlmIChpICUgY29udC0+bmNvbHVtbnMgPT0gMCkKIAkJewotCQkJaWYgKGNhbmNlbF9wcmVzc2Vk KQorCQkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJCQlicmVhazsKIAkJCWZwdXRzKCIgIDx0ciB2 YWxpZ249XCJ0b3BcIj5cbiIsIGZvdXQpOwogCQl9CkBAIC0yMDYzLDcgKzIwNjAsNyBAQCBwcmlu dF9odG1sX3RleHQoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJ CWZwdXRzKCI8L3RhYmxlPlxuIiwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVycyAqLwotCQlp ZiAoIW9wdF90dXBsZXNfb25seSAmJiBmb290ZXJzICE9IE5VTEwgJiYgIWNhbmNlbF9wcmVzc2Vk KQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBmb290ZXJzICE9IE5VTEwgJiYgIUNhbmNlbFJl cXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAqZjsKIApAQCAtMjA5MSw3ICsyMDg4 LDcgQEAgcHJpbnRfaHRtbF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwg RklMRSAqZm91dCkKIAl1bnNpZ25lZCBpbnQgaTsKIAljb25zdCBjaGFyICpjb25zdCAqcHRyOwog Ci0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsK IAogCWlmIChjb250LT5vcHQtPnN0YXJ0X3RhYmxlKQpAQCAtMjExNSw3ICsyMTEyLDcgQEAgcHJp bnRfaHRtbF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91 dCkKIAl7CiAJCWlmIChpICUgY29udC0+bmNvbHVtbnMgPT0gMCkKIAkJewotCQkJaWYgKGNhbmNl bF9wcmVzc2VkKQorCQkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJCQlicmVhazsKIAkJCWlmICgh b3B0X3R1cGxlc19vbmx5KQogCQkJCWZwcmludGYoZm91dCwKQEAgLTIxNDQsNyArMjE0MSw3IEBA IHByaW50X2h0bWxfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUg KmZvdXQpCiAJCWZwdXRzKCI8L3RhYmxlPlxuIiwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVy cyAqLwotCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJzICE9IE5VTEwgJiYg IWNhbmNlbF9wcmVzc2VkKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJz ICE9IE5VTEwgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAq ZjsKIApAQCAtMjE5Myw3ICsyMTkwLDcgQEAgcHJpbnRfYXNjaWlkb2NfdGV4dChjb25zdCBwcmlu dFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAl1bnNpZ25lZCBpbnQgaTsKIAljb25z dCBjaGFyICpjb25zdCAqcHRyOwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxS ZXF1ZXN0ZWQpCiAJCXJldHVybjsKIAogCWlmIChjb250LT5vcHQtPnN0YXJ0X3RhYmxlKQpAQCAt MjI1Miw3ICsyMjQ5LDcgQEAgcHJpbnRfYXNjaWlkb2NfdGV4dChjb25zdCBwcmludFRhYmxlQ29u dGVudCAqY29udCwgRklMRSAqZm91dCkKIAl7CiAJCWlmIChpICUgY29udC0+bmNvbHVtbnMgPT0g MCkKIAkJewotCQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQkJaWYgKENhbmNlbFJlcXVlc3RlZCkK IAkJCQlicmVhazsKIAkJfQogCkBAIC0yMjgwLDcgKzIyNzcsNyBAQCBwcmludF9hc2NpaWRvY190 ZXh0KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCQlwcmludFRh YmxlRm9vdGVyICpmb290ZXJzID0gZm9vdGVyc193aXRoX2RlZmF1bHQoY29udCk7CiAKIAkJLyog cHJpbnQgZm9vdGVycyAqLwotCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBmb290ZXJzICE9IE5V TEwgJiYgIWNhbmNlbF9wcmVzc2VkKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBmb290ZXJz ICE9IE5VTEwgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAq ZjsKIApAQCAtMjMwNCw3ICsyMzAxLDcgQEAgcHJpbnRfYXNjaWlkb2NfdmVydGljYWwoY29uc3Qg cHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJdW5zaWduZWQgaW50IGk7CiAJ Y29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAotCWlmIChjYW5jZWxfcHJlc3NlZCkKKwlpZiAoQ2Fu Y2VsUmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlpZiAoY29udC0+b3B0LT5zdGFydF90YWJsZSkK QEAgLTIzNDMsNyArMjM0MCw3IEBAIHByaW50X2FzY2lpZG9jX3ZlcnRpY2FsKGNvbnN0IHByaW50 VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCXsKIAkJaWYgKGkgJSBjb250LT5uY29s dW1ucyA9PSAwKQogCQl7Ci0JCQlpZiAoY2FuY2VsX3ByZXNzZWQpCisJCQlpZiAoQ2FuY2VsUmVx dWVzdGVkKQogCQkJCWJyZWFrOwogCQkJaWYgKCFvcHRfdHVwbGVzX29ubHkpCiAJCQkJZnByaW50 Zihmb3V0LApAQCAtMjM3MCw3ICsyMzY3LDcgQEAgcHJpbnRfYXNjaWlkb2NfdmVydGljYWwoY29u c3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJaWYgKGNvbnQtPm9wdC0+ c3RvcF90YWJsZSkKIAl7CiAJCS8qIHByaW50IGZvb3RlcnMgKi8KLQkJaWYgKCFvcHRfdHVwbGVz X29ubHkgJiYgY29udC0+Zm9vdGVycyAhPSBOVUxMICYmICFjYW5jZWxfcHJlc3NlZCkKKwkJaWYg KCFvcHRfdHVwbGVzX29ubHkgJiYgY29udC0+Zm9vdGVycyAhPSBOVUxMICYmICFDYW5jZWxSZXF1 ZXN0ZWQpCiAJCXsKIAkJCXByaW50VGFibGVGb290ZXIgKmY7CiAKQEAgLTI0NjEsNyArMjQ1OCw3 IEBAIHByaW50X2xhdGV4X3RleHQoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUg KmZvdXQpCiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAotCWlm IChjYW5jZWxfcHJlc3NlZCkKKwlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlp ZiAob3B0X2JvcmRlciA+IDMpCkBAIC0yNTIyLDcgKzI1MTksNyBAQCBwcmludF9sYXRleF90ZXh0 KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCQkJZnB1dHMoIiBc XFxcXG4iLCBmb3V0KTsKIAkJCWlmIChvcHRfYm9yZGVyID09IDMpCiAJCQkJZnB1dHMoIlxcaGxp bmVcbiIsIGZvdXQpOwotCQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQkJaWYgKENhbmNlbFJlcXVl c3RlZCkKIAkJCQlicmVhazsKIAkJfQogCQllbHNlCkBAIC0yNTM5LDcgKzI1MzYsNyBAQCBwcmlu dF9sYXRleF90ZXh0KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQog CQlmcHV0cygiXFxlbmR7dGFidWxhcn1cblxuXFxub2luZGVudCAiLCBmb3V0KTsKIAogCQkvKiBw cmludCBmb290ZXJzICovCi0JCWlmIChmb290ZXJzICYmICFvcHRfdHVwbGVzX29ubHkgJiYgIWNh bmNlbF9wcmVzc2VkKQorCQlpZiAoZm9vdGVycyAmJiAhb3B0X3R1cGxlc19vbmx5ICYmICFDYW5j ZWxSZXF1ZXN0ZWQpCiAJCXsKIAkJCXByaW50VGFibGVGb290ZXIgKmY7CiAKQEAgLTI1NzEsNyAr MjU2OCw3IEBAIHByaW50X2xhdGV4X2xvbmd0YWJsZV90ZXh0KGNvbnN0IHByaW50VGFibGVDb250 ZW50ICpjb250LCBGSUxFICpmb3V0KQogCWNvbnN0IGNoYXIgKmxhc3Rfb3B0X3RhYmxlX2F0dHJf Y2hhciA9IE5VTEw7CiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAotCWlmIChjYW5jZWxfcHJl c3NlZCkKKwlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlpZiAob3B0X2JvcmRl ciA+IDMpCkBAIC0yNzA3LDcgKzI3MDQsNyBAQCBwcmludF9sYXRleF9sb25ndGFibGVfdGV4dChj b25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAkJCWlmIChvcHRfYm9y ZGVyID09IDMpCiAJCQkJZnB1dHMoIiBcXGhsaW5lXG4iLCBmb3V0KTsKIAkJfQotCQlpZiAoY2Fu Y2VsX3ByZXNzZWQpCisJCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlicmVhazsKIAl9CiAKQEAg LTI3MjUsNyArMjcyMiw3IEBAIHByaW50X2xhdGV4X3ZlcnRpY2FsKGNvbnN0IHByaW50VGFibGVD b250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCXVuc2lnbmVkIGludCBpOwogCWNvbnN0IGNoYXIg KmNvbnN0ICpwdHI7CiAKLQlpZiAoY2FuY2VsX3ByZXNzZWQpCisJaWYgKENhbmNlbFJlcXVlc3Rl ZCkKIAkJcmV0dXJuOwogCiAJaWYgKG9wdF9ib3JkZXIgPiAyKQpAQCAtMjc1OCw3ICsyNzU1LDcg QEAgcHJpbnRfbGF0ZXhfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJ TEUgKmZvdXQpCiAJCS8qIG5ldyByZWNvcmQgKi8KIAkJaWYgKGkgJSBjb250LT5uY29sdW1ucyA9 PSAwKQogCQl7Ci0JCQlpZiAoY2FuY2VsX3ByZXNzZWQpCisJCQlpZiAoQ2FuY2VsUmVxdWVzdGVk KQogCQkJCWJyZWFrOwogCQkJaWYgKCFvcHRfdHVwbGVzX29ubHkpCiAJCQl7CkBAIC0yNzg4LDcg KzI3ODUsNyBAQCBwcmludF9sYXRleF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAq Y29udCwgRklMRSAqZm91dCkKIAkJZnB1dHMoIlxcZW5ke3RhYnVsYXJ9XG5cblxcbm9pbmRlbnQg IiwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVycyAqLwotCQlpZiAoY29udC0+Zm9vdGVycyAm JiAhb3B0X3R1cGxlc19vbmx5ICYmICFjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKGNvbnQtPmZvb3Rl cnMgJiYgIW9wdF90dXBsZXNfb25seSAmJiAhQ2FuY2VsUmVxdWVzdGVkKQogCQl7CiAJCQlwcmlu dFRhYmxlRm9vdGVyICpmOwogCkBAIC0yODM0LDcgKzI4MzEsNyBAQCBwcmludF90cm9mZl9tc190 ZXh0KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCXVuc2lnbmVk IGludCBpOwogCWNvbnN0IGNoYXIgKmNvbnN0ICpwdHI7CiAKLQlpZiAoY2FuY2VsX3ByZXNzZWQp CisJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJcmV0dXJuOwogCiAJaWYgKG9wdF9ib3JkZXIgPiAy KQpAQCAtMjg4OCw3ICsyODg1LDcgQEAgcHJpbnRfdHJvZmZfbXNfdGV4dChjb25zdCBwcmludFRh YmxlQ29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAkJaWYgKChpICsgMSkgJSBjb250LT5uY29s dW1ucyA9PSAwKQogCQl7CiAJCQlmcHV0YygnXG4nLCBmb3V0KTsKLQkJCWlmIChjYW5jZWxfcHJl c3NlZCkKKwkJCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQkJYnJlYWs7CiAJCX0KIAkJZWxzZQpA QCAtMjkwMiw3ICsyODk5LDcgQEAgcHJpbnRfdHJvZmZfbXNfdGV4dChjb25zdCBwcmludFRhYmxl Q29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAkJZnB1dHMoIi5URVxuLkRTIExcbiIsIGZvdXQp OwogCiAJCS8qIHByaW50IGZvb3RlcnMgKi8KLQkJaWYgKGZvb3RlcnMgJiYgIW9wdF90dXBsZXNf b25seSAmJiAhY2FuY2VsX3ByZXNzZWQpCisJCWlmIChmb290ZXJzICYmICFvcHRfdHVwbGVzX29u bHkgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAqZjsKIApA QCAtMjkyOCw3ICsyOTI1LDcgQEAgcHJpbnRfdHJvZmZfbXNfdmVydGljYWwoY29uc3QgcHJpbnRU YWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsK IAl1bnNpZ25lZCBzaG9ydCBjdXJyZW50X2Zvcm1hdCA9IDA7CS8qIDA9bm9uZSwgMT1oZWFkZXIs IDI9Ym9keSAqLwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQp CiAJCXJldHVybjsKIAogCWlmIChvcHRfYm9yZGVyID4gMikKQEAgLTI5NjQsNyArMjk2MSw3IEBA IHByaW50X3Ryb2ZmX21zX3ZlcnRpY2FsKGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBG SUxFICpmb3V0KQogCQkvKiBuZXcgcmVjb3JkICovCiAJCWlmIChpICUgY29udC0+bmNvbHVtbnMg PT0gMCkKIAkJewotCQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQkJaWYgKENhbmNlbFJlcXVlc3Rl ZCkKIAkJCQlicmVhazsKIAkJCWlmICghb3B0X3R1cGxlc19vbmx5KQogCQkJewpAQCAtMzAwOSw3 ICszMDA2LDcgQEAgcHJpbnRfdHJvZmZfbXNfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRl bnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJCWZwdXRzKCIuVEVcbi5EUyBMXG4iLCBmb3V0KTsKIAog CQkvKiBwcmludCBmb290ZXJzICovCi0JCWlmIChjb250LT5mb290ZXJzICYmICFvcHRfdHVwbGVz X29ubHkgJiYgIWNhbmNlbF9wcmVzc2VkKQorCQlpZiAoY29udC0+Zm9vdGVycyAmJiAhb3B0X3R1 cGxlc19vbmx5ICYmICFDYW5jZWxSZXF1ZXN0ZWQpCiAJCXsKIAkJCXByaW50VGFibGVGb290ZXIg KmY7CiAKQEAgLTMxODcsNyArMzE4NCw3IEBAIENsb3NlUGFnZXIoRklMRSAqcGFnZXJwaXBlKQog CQkgKiBwYWdlciBxdWl0IGFzIGEgcmVzdWx0IG9mIHRoZSBTSUdJTlQsIHRoaXMgbWVzc2FnZSB3 b24ndCBnbwogCQkgKiBhbnl3aGVyZSAuLi4KIAkJICovCi0JCWlmIChjYW5jZWxfcHJlc3NlZCkK KwkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJCWZwcmludGYocGFnZXJwaXBlLCBfKCJJbnRlcnJ1 cHRlZFxuIikpOwogCiAJCXBjbG9zZShwYWdlcnBpcGUpOwpAQCAtMzY1Niw3ICszNjUzLDcgQEAg cHJpbnRUYWJsZShjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwKIHsKIAlib29sCQlpc19s b2NhbF9wYWdlciA9IGZhbHNlOwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxS ZXF1ZXN0ZWQpCiAJCXJldHVybjsKIAogCWlmIChjb250LT5vcHQtPmZvcm1hdCA9PSBQUklOVF9O T1RISU5HKQpAQCAtMzc2NSw3ICszNzYyLDcgQEAgcHJpbnRRdWVyeShjb25zdCBQR3Jlc3VsdCAq cmVzdWx0LCBjb25zdCBwcmludFF1ZXJ5T3B0ICpvcHQsCiAJCQkJciwKIAkJCQljOwogCi0JaWYg KGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsKIAogCXBy aW50VGFibGVJbml0KCZjb250LCAmb3B0LT50b3B0LCBvcHQtPnRpdGxlLApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvZmVfdXRpbHMvcHJpbnQuaCBiL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL3ByaW50 LmgKaW5kZXggOTRmNmE1OTM2MTkuLjIzMDk3YmE4NTNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9mZV91dGlscy9wcmludC5oCisrKyBiL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL3ByaW50LmgKQEAg LTE5NSw4ICsxOTUsNiBAQCB0eXBlZGVmIHN0cnVjdCBwcmludFF1ZXJ5T3B0CiB9IHByaW50UXVl cnlPcHQ7CiAKIAotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBjYW5j ZWxfcHJlc3NlZDsKLQogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IHByaW50VGV4dEZvcm1hdCBw Z19hc2NpaWZvcm1hdDsKIGV4dGVybiBQR0RMTElNUE9SVCBjb25zdCBwcmludFRleHRGb3JtYXQg cGdfYXNjaWlmb3JtYXRfb2xkOwogZXh0ZXJuIFBHRExMSU1QT1JUIHByaW50VGV4dEZvcm1hdCBw Z191dGY4Zm9ybWF0OwkvKiBpZGVhbGx5IHdvdWxkIGJlIGNvbnN0LAoKYmFzZS1jb21taXQ6IDRj ODQ1NDUwNjc4MjJiY2M4Njk3YjdkOGYzMDgyYzVjZjE5MzdkMWIKLS0gCjIuNTQuMAoK --126885df0b67bb59e3c3231088c472cca7a1dc10a8f799be92df1cfb7043 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0002-fe_utils-Simplify-cancel-logic-in-wait_on_slots.patch Content-Type: text/x-patch; charset=utf-8; name=v9-0002-fe_utils-Simplify-cancel-logic-in-wait_on_slots.patch RnJvbSA4ZDA0ZDFmY2E3NzljNWIxZjJjZmUwMmEzMGEyMTZkN2FmMGE1YTFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBUdWUsIDcgQXByIDIwMjYgMTk6NTQ6MTMgKzAyMDAKU3ViamVjdDogW1BBVENIIHY5 IDIvN10gZmVfdXRpbHM6IFNpbXBsaWZ5IGNhbmNlbCBsb2dpYyBpbiB3YWl0X29uX3Nsb3RzCgpU aGlzIHJlbW92ZXMgdGhlIFNldENhbmNlbENvbm4gY2FsbCBpbiB3YWl0X29uX3Nsb3RzLiBUaGlz IGNhbGwgd2FzCmNvbmZ1c2luZyBiZWNhdXNlIGl0IHdhcyBvbmx5IGNhbGxlZCBmb3IgYSBzaW5n bGUgY29ubmVjdGlvbiBvZiBhbGwgdGhlCmNvbm5lY3Rpb25zIHRoYXQgdGhlIHNlbGVjdF9sb29w IHdvdWxkIHdhaXQgb24uIFR1cm5zIG91dCB0aGF0IGl0IGNhbiBiZQpiZSBtYWRlIGNvbXBsZXRl bHkgcmVkdW5kYW50IGJ5IG1vdmluZyB0aGUgY2hlY2sgZm9yIENhbmNlbFJlcXVlc3RlZApiZWZv cmUgdGhlIGNoZWNrIGZvciBFSU5UUi4KLS0tCiBzcmMvZmVfdXRpbHMvcGFyYWxsZWxfc2xvdC5j IHwgMzMgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwg MTQgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2ZlX3V0 aWxzL3BhcmFsbGVsX3Nsb3QuYyBiL3NyYy9mZV91dGlscy9wYXJhbGxlbF9zbG90LmMKaW5kZXgg ZmI5ZTZjYzRlYzEuLjY3NTM2YTg1MWNmIDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvcGFyYWxs ZWxfc2xvdC5jCisrKyBiL3NyYy9mZV91dGlscy9wYXJhbGxlbF9zbG90LmMKQEAgLTg5LDIwICs4 OSwyMiBAQCBzZWxlY3RfbG9vcChpbnQgbWF4RmQsIGZkX3NldCAqd29ya2Vyc2V0KQogCXsKIAkJ LyoKIAkJICogT24gV2luZG93cywgd2UgbmVlZCB0byBjaGVjayBvbmNlIGluIGEgd2hpbGUgZm9y IGNhbmNlbCByZXF1ZXN0czsKLQkJICogb24gb3RoZXIgcGxhdGZvcm1zIHdlIHJlbHkgb24gc2Vs ZWN0KCkgcmV0dXJuaW5nIHdoZW4gaW50ZXJydXB0ZWQuCisJCSAqIG9uIG90aGVyIHBsYXRmb3Jt cyB3ZSBjYW4gZ2VuZXJhbGx5IHJlbHkgb24gc2VsZWN0KCkgcmV0dXJuaW5nIHdoZW4KKwkJICog aW50ZXJydXB0ZWQsIGJ1dCBldmVuIG9uIHRob3NlIHBsYXRmb3JtcyBpdHMgcG9zc2libGUgZm9y IGFub3RoZXIKKwkJICogc2lnbmFsIHRvIGludGVycnVwdCB0aGUgc2VsZWN0IGFuZCB0aGVuIGZv ciBTSUdJTlQgdG8gYXJyaXZlIGFuZAorCQkgKiByYWNlIGJldHdlZW4gb3VyIENhbmNlbFJlcXVl c3RlZCBjaGVjayBhbmQgdXMgcmUtYXJtaW5nIHRoZQorCQkgKiBzZWxlY3QoKS4gU28gd2UgYWxz byBhZGQgYSB0aW1lb3V0IG9mIDEgc2Vjb25kIHRvIHRoZSBzZWxlY3QsIHNvIHdlCisJCSAqIGNh biBtYW51YWxseSBwb2xsIENhbmNlbFJlcXVlc3RlZCBhcyBhIGZhbGxiYWNrLgogCQkgKi8KLQkJ c3RydWN0IHRpbWV2YWwgKnR2cDsKLSNpZmRlZiBXSU4zMgogCQlzdHJ1Y3QgdGltZXZhbCB0diA9 IHswLCAxMDAwMDAwfTsKLQotCQl0dnAgPSAmdHY7Ci0jZWxzZQotCQl0dnAgPSBOVUxMOwotI2Vu ZGlmCisJCXN0cnVjdCB0aW1ldmFsICp0dnAgPSAmdHY7CiAKIAkJKndvcmtlcnNldCA9IHNhdmVT ZXQ7CiAJCWkgPSBzZWxlY3QobWF4RmQgKyAxLCB3b3JrZXJzZXQsIE5VTEwsIE5VTEwsIHR2cCk7 CiAKKwkJaWYgKENhbmNlbFJlcXVlc3RlZCkKKwkJCXJldHVybiAtMTsKKwogI2lmZGVmIFdJTjMy CiAJCWlmIChpID09IFNPQ0tFVF9FUlJPUikKIAkJewpAQCAtMTE1LDEwICsxMTcsMTAgQEAgc2Vs ZWN0X2xvb3AoaW50IG1heEZkLCBmZF9zZXQgKndvcmtlcnNldCkKIAogCQlpZiAoaSA8IDAgJiYg ZXJybm8gPT0gRUlOVFIpCiAJCQljb250aW51ZTsJCQkvKiBpZ25vcmUgdGhpcyAqLwotCQlpZiAo aSA8IDAgfHwgQ2FuY2VsUmVxdWVzdGVkKQorCQlpZiAoaSA8IDApCiAJCQlyZXR1cm4gLTE7CQkJ LyogYnV0IG5vdCB0aGlzICovCiAJCWlmIChpID09IDApCi0JCQljb250aW51ZTsJCQkvKiB0aW1l b3V0IChXaW4zMiBvbmx5KSAqLworCQkJY29udGludWU7CQkJLyogdGltZW91dCAqLwogCQlicmVh azsKIAl9CiAKQEAgLTE5Nyw4ICsxOTksNyBAQCB3YWl0X29uX3Nsb3RzKFBhcmFsbGVsU2xvdEFy cmF5ICpzYSkKIHsKIAlpbnQJCQlpOwogCWZkX3NldAkJc2xvdHNldDsKLQlpbnQJCQltYXhGZCA9 IDA7Ci0JUEdjb25uCSAgICpjYW5jZWxjb25uID0gTlVMTDsKKwlpbnQJCQltYXhGZCA9IC0xOwog CiAJLyogV2UgbXVzdCByZWNvbnN0cnVjdCB0aGUgZmRfc2V0IGZvciBlYWNoIGNhbGwgdG8gc2Vs ZWN0X2xvb3AgKi8KIAlGRF9aRVJPKCZzbG90c2V0KTsKQEAgLTIxOSwxMCArMjIwLDYgQEAgd2Fp dF9vbl9zbG90cyhQYXJhbGxlbFNsb3RBcnJheSAqc2EpCiAJCWlmIChzb2NrIDwgMCkKIAkJCWNv bnRpbnVlOwogCi0JCS8qIEtlZXAgdHJhY2sgb2YgdGhlIGZpcnN0IHZhbGlkIGNvbm5lY3Rpb24g d2Ugc2VlLiAqLwotCQlpZiAoY2FuY2VsY29ubiA9PSBOVUxMKQotCQkJY2FuY2VsY29ubiA9IHNh LT5zbG90c1tpXS5jb25uZWN0aW9uOwotCiAJCUZEX1NFVChzb2NrLCAmc2xvdHNldCk7CiAJCWlm IChzb2NrID4gbWF4RmQpCiAJCQltYXhGZCA9IHNvY2s7CkBAIC0yMzIsMTIgKzIyOSwxMCBAQCB3 YWl0X29uX3Nsb3RzKFBhcmFsbGVsU2xvdEFycmF5ICpzYSkKIAkgKiBJZiB3ZSBnZXQgdGhpcyBm YXIgd2l0aCBubyB2YWxpZCBjb25uZWN0aW9ucywgcHJvY2Vzc2luZyBjYW5ub3QKIAkgKiBjb250 aW51ZS4KIAkgKi8KLQlpZiAoY2FuY2VsY29ubiA9PSBOVUxMKQorCWlmIChtYXhGZCA8IDApCiAJ CXJldHVybiBmYWxzZTsKIAotCVNldENhbmNlbENvbm4oY2FuY2VsY29ubik7CiAJaSA9IHNlbGVj dF9sb29wKG1heEZkLCAmc2xvdHNldCk7Ci0JUmVzZXRDYW5jZWxDb25uKCk7CiAKIAkvKiBmYWls dXJlPyAqLwogCWlmIChpIDwgMCkKLS0gCjIuNTQuMAoK --126885df0b67bb59e3c3231088c472cca7a1dc10a8f799be92df1cfb7043 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0003-Move-Windows-pthread-compatibility-functions-to-s.patch Content-Type: text/x-patch; charset=utf-8; name=v9-0003-Move-Windows-pthread-compatibility-functions-to-s.patch RnJvbSA0NTdiN2YxNDdkYzkxMjA4Y2YzZDQ3NWZlMTBkYzY1MDg5NjkyYWFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDE4OjE4OjEzICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 OSAzLzddIE1vdmUgV2luZG93cyBwdGhyZWFkIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIHRvCiBz cmMvcG9ydAoKVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBvZiBhIGZvbGxvdy11cCBjb21taXQgd2hp Y2ggd2lsbCBzdGFydCB0byB1c2UKdGhlc2UgZnVuY3Rpb25zIGluIG1vcmUgcGxhY2VzIHRoYW4g anVzdCBsaWJwcS4KLS0tCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgMSArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgIHwgMSAtCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZCAgICAgICAgICAgICAg IHwgMiArLQogc3JjL3BvcnQvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IDEgKwogc3JjL3tpbnRlcmZhY2VzL2xpYnBxID0+IHBvcnR9L3B0aHJlYWQtd2luMzIuYyB8IDQg KystLQogNSBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBy ZW5hbWUgc3JjL3tpbnRlcmZhY2VzL2xpYnBxID0+IHBvcnR9L3B0aHJlYWQtd2luMzIuYyAoOTQl KQoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCAwZTYyNGZl MzZiOS4uMDg0ZDk5ZTk5ZjEgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1 cmUuYWMKQEAgLTE5NjEsNiArMTk2MSw3IEBAIGlmIHRlc3QgIiRQT1JUTkFNRSIgPSAid2luMzIi OyB0aGVuCiAgIEFDX0xJQk9CSihkaXJtb2QpCiAgIEFDX0xJQk9CSihraWxsKQogICBBQ19MSUJP Qkoob3BlbikKKyAgQUNfTElCT0JKKHB0aHJlYWQtd2luMzIpCiAgIEFDX0xJQk9CSihzeXN0ZW0p CiAgIEFDX0xJQk9CSih3aW4zMmNvbW1vbikKICAgQUNfTElCT0JKKHdpbjMyZGxvcGVuKQpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9NYWtlZmlsZQppbmRleCAwOTYzOTk1ZWVkNC4uZDZjZmIwMGQ2NTUgMTAwNjQ0Ci0tLSBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L01ha2VmaWxlCkBAIC03NSw3ICs3NSw2IEBAIGVuZGlmCiAKIGlmZXEgKCQoUE9SVE5BTUUpLCB3 aW4zMikKIE9CSlMgKz0gXAotCXB0aHJlYWQtd2luMzIubyBcCiAJd2luMzIubwogZW5kaWYKIApk aWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9tZXNvbi5idWlsZAppbmRleCBiMGFlNzIxNjdhMS4uYjk0OTc4MGI4NWIgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCkBAIC0yMCw3ICsyMCw3IEBAIGxpYnBxX3NvdXJjZXMg PSBmaWxlcygKIGxpYnBxX3NvX3NvdXJjZXMgPSBbXSAjIGZvciBzaGFyZWQgbGliLCBpbiBhZGRp dGlvbiB0byB0aGUgYWJvdmUKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCi0gIGxpYnBx X3NvdXJjZXMgKz0gZmlsZXMoJ3B0aHJlYWQtd2luMzIuYycsICd3aW4zMi5jJykKKyAgbGlicHFf c291cmNlcyArPSBmaWxlcygnd2luMzIuYycpCiAgIGxpYnBxX3NvX3NvdXJjZXMgKz0gcmNfbGli X2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCiAgICAgJy0tTkFNRScsICds aWJwcScsCiAgICAgJy0tRklMRURFU0MnLCAnUG9zdGdyZVNRTCBBY2Nlc3MgTGlicmFyeScsXSkK ZGlmZiAtLWdpdCBhL3NyYy9wb3J0L21lc29uLmJ1aWxkIGIvc3JjL3BvcnQvbWVzb24uYnVpbGQK aW5kZXggOTIyYjNmNjQ2NzYuLjEwODMzYjEzODQyIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9tZXNv bi5idWlsZAorKysgYi9zcmMvcG9ydC9tZXNvbi5idWlsZApAQCAtMzMsNiArMzMsNyBAQCBpZiBo b3N0X3N5c3RlbSA9PSAnd2luZG93cycKICAgICAnZGlybW9kLmMnLAogICAgICdraWxsLmMnLAog ICAgICdvcGVuLmMnLAorICAgICdwdGhyZWFkLXdpbjMyLmMnLAogICAgICdzeXN0ZW0uYycsCiAg ICAgJ3dpbjMyY29tbW9uLmMnLAogICAgICd3aW4zMmRsb3Blbi5jJywKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL3B0aHJlYWQtd2luMzIuYyBiL3NyYy9wb3J0L3B0aHJlYWQtd2lu MzIuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBzcmMvaW50ZXJmYWNlcy9saWJw cS9wdGhyZWFkLXdpbjMyLmMKcmVuYW1lIHRvIHNyYy9wb3J0L3B0aHJlYWQtd2luMzIuYwppbmRl eCBjZjY2Mjg0ZjAwNy4uNDhkNjhiNjkzYTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL3B0aHJlYWQtd2luMzIuYworKysgYi9zcmMvcG9ydC9wdGhyZWFkLXdpbjMyLmMKQEAgLTUs MTIgKzUsMTIgQEAKICoKICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCiAqIElERU5USUZJQ0FUSU9OCi0qCXNyYy9pbnRlcmZhY2Vz L2xpYnBxL3B0aHJlYWQtd2luMzIuYworKglzcmMvcG9ydC9wdGhyZWFkLXdpbjMyLmMKICoKICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAqLwogCi0jaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRl ICJjLmgiCiAKICNpbmNsdWRlICJwdGhyZWFkLXdpbjMyLmgiCiAKLS0gCjIuNTQuMAoK --126885df0b67bb59e3c3231088c472cca7a1dc10a8f799be92df1cfb7043 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0004-Don-t-use-deprecated-and-insecure-PQcancel-psql-a.patch Content-Type: text/x-patch; charset=utf-8; name=v9-0004-Don-t-use-deprecated-and-insecure-PQcancel-psql-a.patch RnJvbSA1NDAyMTkwNDQxMzYyNzQ1ZGRkOWEyZTBlNDUzNGQyMmI0NDMyMWEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDEzOjA1OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 OSA0LzddIERvbid0IHVzZSBkZXByZWNhdGVkIGFuZCBpbnNlY3VyZSBQUWNhbmNlbCBwc3FsIGFu ZAogb3RoZXIgdG9vbHMgYW55bW9yZQoKQWxsIG9mIG91ciBmcm9udGVuZCB0b29scyB0aGF0IHVz ZWQgb3VyIGZlX3V0aWxzIHRvIGNhbmNlbCBxdWVyaWVzLAppbmNsdWRpbmcgcHNxbCwgc3RpbGwg dXNlZCBQUWNhbmNlbCB0byBzZW5kIGNhbmNlbCByZXF1ZXN0cyB0byB0aGUKc2VydmVyLiBUaGF0 IGZ1bmN0aW9uIGlzIGluc2VjdXJlLCBiZWNhdXNlIGl0IGRvZXMgbm90IHVzZSBlbmNyeXB0aW9u IHRvCnNlbmQgdGhlIGNhbmNlbCByZXF1ZXN0LiBUaGlzIHN0YXJ0cyB1c2luZyB0aGUgbmV3IGNh bmNlbGxhdGlvbiBBUElzCihpbnRyb2R1Y2VkIGluIDYxNDYxYTMwMCkgZm9yIGFsbCB0aGVzZSBm cm9udGVuZCB0b29scy4gVGhlc2UgQVBJcyB1c2UKdGhlIHNhbWUgZW5jcnlwdGlvbiBzZXR0aW5n cyBhcyB0aGUgY29ubmVjdGlvbiB0aGF0J3MgYmVpbmcgY2FuY2VsbGVkLgpTaW5jZSB0aGVzZSBB UElzIGFyZSBub3Qgc2lnbmFsLXNhZmUgdGhpcyByZXF1aXJlZCBhIHJlZmFjdG9yIHRvIG5vdApz ZW5kIHRoZSBjYW5jZWwgcmVxdWVzdCBpbiBhIHNpZ25hbCBoYW5kbGVyIGFueW1vcmUsIGJ1dCBp bnN0ZWFkIHVzaW5nIGEKZGVkaWNhdGVkIHRocmVhZC4KClNpbWlsYXIgbG9naWMgd2FzIGFscmVh ZHkgdXNlZCBmb3IgV2luZG93cyBhbnl3YXksIHNvIHRoaXMgaGFzIHRoZQpiZW5lZml0IHRoYXQg aXQgbWFrZXMgdGhlIGNhbmNlbCBsb2dpYyBtb3JlIHVuaWZvcm0gYWNyb3NzIG91ciBzdXBwb3J0 ZWQKcGxhdGZvcm1zLiBJbiB0aGUgcGdfZHVtcCBjb2RlIHRoZXJlJ3Mgc3RpbGwgcXVpdGUgYSBi aXQgb2YgYmVoYXZpb3VyYWwKZGlmZmVyZW5jZSB0aG91Z2gsIGJlY2F1c2UgcGdfZHVtcCBpcyB1 c2luZyB0aHJlYWRzIGZvciBwYXJhbGxlbGlzbSBvbgpXaW5kb3dzLCBidXQgcHJvY2Vzc2VzIG9u IFVuaXhlcy4KLS0tCiBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iaW4vcGdfYW1jaGVjay9wZ19hbWNoZWNrLmMgICAgICB8ICAgMiArLQogc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAv bWVzb24uYnVpbGQgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMg ICAgICAgICAgIHwgMzQzICsrKysrKysrLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmggfCAgIDggKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGIuYyAgICAgICB8 ICAgNyArLQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyAgICAgICAgICAgIHwgICAyICstCiBz cmMvYmluL3BzcWwvY29tbW9uLmMgICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iaW4vc2Ny aXB0cy9jbHVzdGVyZGIuYyAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9zY3JpcHRzL3JlaW5k ZXhkYi5jICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmMgICAg ICAgICAgfCAgIDIgKy0KIHNyYy9mZV91dGlscy9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAg MiArLQogc3JjL2ZlX3V0aWxzL2NhbmNlbC5jICAgICAgICAgICAgICAgIHwgNDM5ICsrKysrKysr KysrKysrKysrKystLS0tLS0tLQogc3JjL2luY2x1ZGUvZmVfdXRpbHMvY2FuY2VsLmggICAgICAg IHwgIDE1ICstCiAxNiBmaWxlcyBjaGFuZ2VkLCA0ODYgaW5zZXJ0aW9ucygrKSwgMzU2IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL21lc29uLmJ1aWxkIGIvbWVzb24uYnVpbGQKaW5kZXggZDg4 YTdhNzAzMDguLjJlYzE3NmM1NzRhIDEwMDY0NAotLS0gYS9tZXNvbi5idWlsZAorKysgYi9tZXNv bi5idWlsZApAQCAtMzY1MCw3ICszNjUwLDcgQEAgZnJvbnRlbmRfY29kZSA9IGRlY2xhcmVfZGVw ZW5kZW5jeSgKICAgaW5jbHVkZV9kaXJlY3RvcmllczogW3Bvc3RncmVzX2luY10sCiAgIGxpbmtf d2l0aDogW2ZlX3V0aWxzLCBjb21tb25fc3RhdGljLCBwZ3BvcnRfc3RhdGljXSwKICAgc291cmNl czogZ2VuZXJhdGVkX2hlYWRlcnNfc3RhbXAsCi0gIGRlcGVuZGVuY2llczogW29zX2RlcHMsIGxp YmludGxdLAorICBkZXBlbmRlbmNpZXM6IFtvc19kZXBzLCBsaWJpbnRsLCB0aHJlYWRfZGVwXSwK ICkKIAogYmFja2VuZF9ib3RoX2RlcHMgKz0gWwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19hbWNo ZWNrL3BnX2FtY2hlY2suYyBiL3NyYy9iaW4vcGdfYW1jaGVjay9wZ19hbWNoZWNrLmMKaW5kZXgg MDliYTA1OTY0MDAuLjI3MjhiY2RiMWFhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2FtY2hlY2sv cGdfYW1jaGVjay5jCisrKyBiL3NyYy9iaW4vcGdfYW1jaGVjay9wZ19hbWNoZWNrLmMKQEAgLTQ3 OCw3ICs0NzgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJY3BhcmFtcy5kYm5h bWUgPSBOVUxMOwogCWNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0gTlVMTDsKIAotCXNldHVwX2Nh bmNlbF9oYW5kbGVyKE5VTEwpOworCXNldHVwX2NhbmNlbF9oYW5kbGVyKE5VTEwsIE5VTEwpOwog CiAJLyogY2hvb3NlIHRoZSBkYXRhYmFzZSBmb3Igb3VyIGluaXRpYWwgY29ubmVjdGlvbiAqLwog CWlmIChvcHRzLmFsbGRiKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlIGIv c3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IDc5MDczYjBhMGVhLi5mNzYzNDZjNGY2YyAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9NYWtlZmlsZQpAQCAtMjEsNyArMjEsNyBAQCBleHBvcnQgTFo0CiBleHBvcnQgWlNURAogZXhw b3J0IHdpdGhfaWN1CiAKLW92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpICQo Q1BQRkxBR1MpCitvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQobGlicHFfc3JjZGlyKSAtSSQodG9w X3NyY2Rpcikvc3JjL3BvcnQgJChDUFBGTEFHUykKIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRv cF9idWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogCiBP QkpTID0gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jp bi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IDc5YmQ1MDM2ODQxLi5lYjU1ZDdhNTBjZiAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9tZXNvbi5idWlsZApAQCAtMjIsNiArMjIsOCBAQCBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0g ZmlsZXMoCiBwZ19kdW1wX2NvbW1vbiA9IHN0YXRpY19saWJyYXJ5KCdsaWJwZ2R1bXBfY29tbW9u JywKICAgcGdfZHVtcF9jb21tb25fc291cmNlcywKICAgY19wY2g6IHBjaF9wb3N0Z3Jlc19mZV9o LAorICAjIHBvcnQgbmVlZHMgdG8gYmUgaW4gaW5jbHVkZSBwYXRoIGR1ZSB0byBwdGhyZWFkLXdp bjMyLmgKKyAgaW5jbHVkZV9kaXJlY3RvcmllczogWycuLi8uLi9wb3J0J10sCiAgIGRlcGVuZGVu Y2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCBsejQsIHpsaWIsIHpzdGRdLAogICBrd2FyZ3M6 IGludGVybmFsX2xpYl9hcmdzLAogKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFs bGVsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwppbmRleCAzZTg0Yjg4MWNhMy4uNDRj Yjc4MTM4MTggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC02MCw2ICs2MCw4IEBACiAjaW5jbHVkZSA8ZmNu dGwuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJm ZV91dGlscy9jYW5jZWwuaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNp bmNsdWRlICJwYXJhbGxlbC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgpAQCAtMTc0 LDEwICsxNzYsNiBAQCB0eXBlZGVmIHN0cnVjdCBEdW1wU2lnbmFsSW5mb3JtYXRpb24KIAogc3Rh dGljIHZvbGF0aWxlIER1bXBTaWduYWxJbmZvcm1hdGlvbiBzaWduYWxfaW5mbzsKIAotI2lmZGVm IFdJTjMyCi1zdGF0aWMgQ1JJVElDQUxfU0VDVElPTiBzaWduYWxfaW5mb19sb2NrOwotI2VuZGlm Ci0KIC8qCiAgKiBXcml0ZSBhIHNpbXBsZSBzdHJpbmcgdG8gc3RkZXJyIC0tLSBtdXN0IGJlIHNh ZmUgaW4gYSBzaWduYWwgaGFuZGxlci4KICAqIFdlIGlnbm9yZSB0aGUgd3JpdGUoKSByZXN1bHQg c2luY2UgdGhlcmUncyBub3QgbXVjaCB3ZSBjb3VsZCBkbyBhYm91dCBpdC4KQEAgLTIwOSw2ICsy MDcsNyBAQCBzdGF0aWMgdm9pZCBXYWl0Rm9yVGVybWluYXRpbmdXb3JrZXJzKFBhcmFsbGVsU3Rh dGUgKnBzdGF0ZSk7CiBzdGF0aWMgdm9pZCBzZXRfY2FuY2VsX2hhbmRsZXIodm9pZCk7CiBzdGF0 aWMgdm9pZCBzZXRfY2FuY2VsX3BzdGF0ZShQYXJhbGxlbFN0YXRlICpwc3RhdGUpOwogc3RhdGlj IHZvaWQgc2V0X2NhbmNlbF9zbG90X2FyY2hpdmUoUGFyYWxsZWxTbG90ICpzbG90LCBBcmNoaXZl SGFuZGxlICpBSCk7CitzdGF0aWMgdm9pZCBTdG9wV29ya2Vycyh2b2lkKTsKIHN0YXRpYyB2b2lk IFJ1bldvcmtlcihBcmNoaXZlSGFuZGxlICpBSCwgUGFyYWxsZWxTbG90ICpzbG90KTsKIHN0YXRp YyBpbnQJR2V0SWRsZVdvcmtlcihQYXJhbGxlbFN0YXRlICpwc3RhdGUpOwogc3RhdGljIGJvb2wg SGFzRXZlcnlXb3JrZXJUZXJtaW5hdGVkKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7CkBAIC00MTAs MzIgKzQwOSw5IEBAIFNodXRkb3duV29ya2Vyc0hhcmQoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQog CS8qCiAJICogRm9yY2UgZWFybHkgdGVybWluYXRpb24gb2YgYW55IGNvbW1hbmRzIGN1cnJlbnRs eSBpbiBwcm9ncmVzcy4KIAkgKi8KLSNpZm5kZWYgV0lOMzIKLQkvKiBPbiBub24tV2luZG93cywg c2VuZCBTSUdURVJNIHRvIGVhY2ggd29ya2VyIHByb2Nlc3MuICovCi0JZm9yIChpID0gMDsgaSA8 IHBzdGF0ZS0+bnVtV29ya2VyczsgaSsrKQotCXsKLQkJcGlkX3QJCXBpZCA9IHBzdGF0ZS0+cGFy YWxsZWxTbG90W2ldLnBpZDsKLQotCQlpZiAocGlkICE9IDApCi0JCQlraWxsKHBpZCwgU0lHVEVS TSk7Ci0JfQotI2Vsc2UKLQotCS8qCi0JICogT24gV2luZG93cywgc2VuZCBxdWVyeSBjYW5jZWxz IGRpcmVjdGx5IHRvIHRoZSB3b3JrZXJzJyBiYWNrZW5kcy4gIFVzZQotCSAqIGEgY3JpdGljYWwg c2VjdGlvbiB0byBlbnN1cmUgd29ya2VyIHRocmVhZHMgZG9uJ3QgY2hhbmdlIHN0YXRlLgotCSAq LwotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLQlmb3IgKGkgPSAw OyBpIDwgcHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCi0JewotCQlBcmNoaXZlSGFuZGxlICpBSCA9 IHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLkFIOwotCQljaGFyCQllcnJidWZbMV07Ci0KLQkJaWYg KEFIICE9IE5VTEwgJiYgQUgtPmNvbm5DYW5jZWwgIT0gTlVMTCkKLQkJCSh2b2lkKSBQUWNhbmNl bChBSC0+Y29ubkNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7Ci0JfQotCUxlYXZlQ3Jp dGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgorCUxvY2tDYW5jZWxUaHJl YWQoKTsKKwlTdG9wV29ya2VycygpOworCVVubG9ja0NhbmNlbFRocmVhZCgpOwogCiAJLyogTm93 IHdhaXQgZm9yIHRoZW0gdG8gdGVybWluYXRlLiAqLwogCVdhaXRGb3JUZXJtaW5hdGluZ1dvcmtl cnMocHN0YXRlKTsKQEAgLTUxOSw3NCArNDk1LDgwIEBAIFdhaXRGb3JUZXJtaW5hdGluZ1dvcmtl cnMoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQogICogY291bGQgbGVhdmUgYSBTUUwgY29tbWFuZCAo ZS5nLiwgQ1JFQVRFIElOREVYIG9uIGEgbGFyZ2UgdGFibGUpIHJ1bm5pbmcKICAqIGZvciBhIGxv bmcgdGltZS4gIEluc3RlYWQsIHdlIHRyeSB0byBzZW5kIGEgY2FuY2VsIHJlcXVlc3QgYW5kIHRo ZW4gZGllLgogICogcGdfZHVtcCBwcm9iYWJseSBkb2Vzbid0IHJlYWxseSBuZWVkIHRoaXMsIGJ1 dCB3ZSBtaWdodCBhcyB3ZWxsIHVzZSBpdAotICogdGhlcmUgdG9vLiAgTm90ZSB0aGF0IHNlbmRp bmcgdGhlIGNhbmNlbCBkaXJlY3RseSBmcm9tIHRoZSBzaWduYWwgaGFuZGxlcgotICogaXMgc2Fm ZSBiZWNhdXNlIFBRY2FuY2VsKCkgaXMgd3JpdHRlbiB0byBtYWtlIGl0IHNvLgorICogdGhlcmUg dG9vLgogICoKLSAqIEluIHBhcmFsbGVsIG9wZXJhdGlvbiBvbiBVbml4LCBlYWNoIHByb2Nlc3Mg aXMgcmVzcG9uc2libGUgZm9yIGNhbmNlbGluZwotICogaXRzIG93biBjb25uZWN0aW9uICh0aGlz IG11c3QgYmUgc28gYmVjYXVzZSBub2JvZHkgZWxzZSBoYXMgYWNjZXNzIHRvIGl0KS4KLSAqIEZ1 cnRoZXJtb3JlLCB0aGUgbGVhZGVyIHByb2Nlc3Mgc2hvdWxkIGF0dGVtcHQgdG8gZm9yd2FyZCBp dHMgc2lnbmFsIHRvCi0gKiBlYWNoIGNoaWxkLiAgSW4gc2ltcGxlIG1hbnVhbCB1c2Ugb2YgcGdf ZHVtcC9wZ19yZXN0b3JlLCBmb3J3YXJkaW5nIGlzbid0Ci0gKiBuZWVkZWQgYmVjYXVzZSB0eXBp bmcgY29udHJvbC1DIGF0IHRoZSBjb25zb2xlIHdvdWxkIGRlbGl2ZXIgU0lHSU5UIHRvCi0gKiBl dmVyeSBtZW1iZXIgb2YgdGhlIHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAgLS0tIGJ1dCBpbiBvdGhl ciBzY2VuYXJpb3MgaXQKLSAqIG1pZ2h0IGJlIHRoYXQgb25seSB0aGUgbGVhZGVyIGdldHMgc2ln bmFsZWQuCisgKiBPbiBVbml4LCB0aGUgc2lnbmFsIGhhbmRsZXIgd2FrZXMgdXAgYSBkZWRpY2F0 ZWQgY2FuY2VsIHRocmVhZCB2aWEgYQorICogc2VsZi1waXBlLCB3aGljaCB0aGVuIHNlbmRzIHRo ZSBjYW5jZWwgYW5kIGNhbGxzIF9leGl0KCkuICBUaGlzIHRocmVhZCBhbHNvCisgKiBmb3J3YXJk cyB0aGUgc2lnbmFsIHRvIGVhY2ggY2hpbGQgc28gdGhleSBjYW4gYWxzbyBjYW5jZWwgdGhlaXIg cXVlcmllcy4gSW4KKyAqIHNpbXBsZSBtYW51YWwgdXNlIG9mIHBnX2R1bXAvcGdfcmVzdG9yZSwg Zm9yd2FyZGluZyBpc24ndCBuZWVkZWQgYmVjYXVzZQorICogdHlwaW5nIGNvbnRyb2wtQyBhdCB0 aGUgY29uc29sZSB3b3VsZCBkZWxpdmVyIFNJR0lOVCB0byBldmVyeSBtZW1iZXIgb2YgdGhlCisg KiB0ZXJtaW5hbCBwcm9jZXNzIGdyb3VwIC0tLSBidXQgaW4gb3RoZXIgc2NlbmFyaW9zIGl0IG1p Z2h0IGJlIHRoYXQgb25seSB0aGUKKyAqIGxlYWRlciBnZXRzIHNpZ25hbGVkLgogICoKICAqIE9u IFdpbmRvd3MsIHRoZSBjYW5jZWwgaGFuZGxlciBydW5zIGluIGEgc2VwYXJhdGUgdGhyZWFkLCBi ZWNhdXNlIHRoYXQncwotICogaG93IFNldENvbnNvbGVDdHJsSGFuZGxlciB3b3Jrcy4gIFdlIG1h a2UgaXQgc3RvcCB3b3JrZXIgdGhyZWFkcywgc2VuZAotICogY2FuY2VscyBvbiBhbGwgYWN0aXZl IGNvbm5lY3Rpb25zLCBhbmQgdGhlbiByZXR1cm4gRkFMU0UsIHdoaWNoIHdpbGwgYWxsb3cKLSAq IHRoZSBwcm9jZXNzIHRvIGRpZS4gIEZvciBzYWZldHkncyBzYWtlLCB3ZSB1c2UgYSBjcml0aWNh bCBzZWN0aW9uIHRvCi0gKiBwcm90ZWN0IHRoZSBQR2NhbmNlbCBzdHJ1Y3R1cmVzIGFnYWluc3Qg YmVpbmcgY2hhbmdlZCB3aGlsZSB0aGUgc2lnbmFsCi0gKiB0aHJlYWQgcnVucy4KKyAqIGhvdyBT ZXRDb25zb2xlQ3RybEhhbmRsZXIgd29ya3MuICBXZSBtYWtlIGl0IGZvcmNpYmx5IHRlcm1pbmF0 ZSB0aGUgd29ya2VyCisgKiB0aHJlYWRzIChzbyB0aGV5IGNhbid0IHJlcG9ydCB0aGUgcXVlcnkg Y2FuY2VsbGF0aW9ucyBhcyBlcnJvcnMpLCBzZW5kCisgKiBjYW5jZWxzIG9uIGFsbCBhY3RpdmUg Y29ubmVjdGlvbnMsIGFuZCB0aGVuIGNhbGwgX2V4aXQoKSB0byB0ZXJtaW5hdGUgdGhlCisgKiBw cm9jZXNzLiAgQWNjZXNzIHRvIHRoZSBzaGFyZWQgUEdjYW5jZWxDb25uIHN0cnVjdHVyZXMgaXMg c2VyaWFsaXplZCBhZ2FpbnN0CisgKiB0aGUgbWFpbiB0aHJlYWQgYnkgdGhlIGNhbmNlbCB0aHJl YWQgbG9jayBoZWxkIGFyb3VuZCB0aGUgY2FsbGJhY2suCiAgKi8KIAotI2lmbmRlZiBXSU4zMgot CiAvKgotICogU2lnbmFsIGhhbmRsZXIgKFVuaXggb25seSkKKyAqIENhbmNlbCBhbGwgYWN0aXZl IHF1ZXJpZXMsIHByaW50IGEgdGVybWluYXRpb24gbWVzc2FnZSwgYW5kIGV4aXQuCisgKgorICog SW52b2tlZCBmcm9tIHRoZSBjYW5jZWwgdGhyZWFkIChVbml4KSBvciB0aGUgV2luZG93cyBjb25z b2xlIGhhbmRsZXIgdGhyZWFkLgorICogSXQgbmV2ZXIgcmV0dXJuczogYWZ0ZXIgc2VuZGluZyB0 aGUgY2FuY2VscyBpdCBjYWxscyBfZXhpdCgpIHNvIHRoYXQgdGhlCisgKiBwcm9jZXNzIHRlcm1p bmF0ZXMgb24gY2FuY2VsLiAgV2UgdXNlIF9leGl0KCkgcmF0aGVyIHRoYW4gZXhpdCgpIGJlY2F1 c2UgdGhlCisgKiBsYXR0ZXIgd291bGQgaW52b2tlIGF0ZXhpdCBoYW5kbGVycyB0aGF0IGNhbiBm YWlsIGlmIHdlIGludGVycnVwdGVkIHJlbGF0ZWQKKyAqIGNvZGUuCiAgKi8KLXN0YXRpYyB2b2lk Ci1zaWdUZXJtSGFuZGxlcihTSUdOQUxfQVJHUykKK3BnX25vcmV0dXJuIHN0YXRpYyB2b2lkCitD YW5jZWxCYWNrZW5kc0FuZEV4aXQodm9pZCkKIHsKKyNpZmRlZiBXSU4zMgogCWludAkJCWk7Ci0J Y2hhcgkJZXJyYnVmWzFdOwogCiAJLyoKLQkgKiBTb21lIHBsYXRmb3JtcyBhbGxvdyBkZWxpdmVy eSBvZiBuZXcgc2lnbmFscyB0byBpbnRlcnJ1cHQgYW4gYWN0aXZlCi0JICogc2lnbmFsIGhhbmRs ZXIuICBUaGF0IGNvdWxkIG11Y2sgdXAgb3VyIGF0dGVtcHQgdG8gc2VuZCBQUWNhbmNlbCwgc28K LQkgKiBkaXNhYmxlIHRoZSBzaWduYWxzIHRoYXQgc2V0X2NhbmNlbF9oYW5kbGVyIGVuYWJsZWQu Ci0JICovCi0JcHFzaWduYWwoU0lHSU5ULCBQR19TSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdURVJN LCBQR19TSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdRVUlULCBQR19TSUdfSUdOKTsKLQotCS8qCi0J ICogSWYgd2UncmUgaW4gdGhlIGxlYWRlciwgZm9yd2FyZCBzaWduYWwgdG8gYWxsIHdvcmtlcnMu ICAoSXQgc2VlbXMgYmVzdAotCSAqIHRvIGRvIHRoaXMgYmVmb3JlIFBRY2FuY2VsOyBraWxsaW5n IHRoZSBsZWFkZXIgdHJhbnNhY3Rpb24gd2lsbCByZXN1bHQKLQkgKiBpbiBpbnZhbGlkLXNuYXBz aG90IGVycm9ycyBmcm9tIGFjdGl2ZSB3b3JrZXJzLCB3aGljaCBtYXliZSB3ZSBjYW4KLQkgKiBx dWlldCBieSBraWxsaW5nIHdvcmtlcnMgZmlyc3QuKSAgSWdub3JlIGFueSBlcnJvcnMuCisJICog T24gV2luZG93cyB0aGUgd29ya2VycyBhcmUgdGhyZWFkcyB3aXRoaW4gdGhpcyBzYW1lIHByb2Nl c3MuICBPbmNlIHdlCisJICogY2FuY2VsIHRoZWlyIHF1ZXJpZXMgYmVsb3cgdGhleSB3b3VsZCBy ZWNlaXZlIHRoZSBjYW5jZWxsYXRpb24gYXMgYW4KKwkgKiBlcnJvciBhbmQgcmVwb3J0IGl0LCBj bHV0dGVyaW5nIHRoZSB1c2VyJ3Mgc2NyZWVuIGluIHRoZSBicmllZiB3aW5kb3cKKwkgKiBiZWZv cmUgdGhlIHByb2Nlc3MgZXhpdHMuICBGb3JjaWJseSB0ZXJtaW5hdGUgdGhlIHdvcmtlciB0aHJl YWRzIGZpcnN0CisJICogc28gdGhleSBjYW4ndCBkbyB0aGF0LgorCSAqCisJICogVGVybWluYXRl VGhyZWFkIGlzIHVuc2FmZSBpbiBnZW5lcmFsIChpdCBtYXkgbGVhayByZXNvdXJjZXMgb3IgbGVh dmUKKwkgKiB1c2VyLXNwYWNlIGxvY2tzIGhlbGQgYnkgdGhlIGtpbGxlZCB0aHJlYWQpLCBidXQg dGhhdCdzIGFjY2VwdGFibGUgaGVyZQorCSAqIGJlY2F1c2Ugd2UncmUgYWJvdXQgdG8gZW5kIHRo ZSB3aG9sZSBwcm9jZXNzIGFueXdheS4KIAkgKi8KIAlpZiAoc2lnbmFsX2luZm8ucHN0YXRlICE9 IE5VTEwpCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsX2luZm8ucHN0YXRlLT5udW1Xb3Jr ZXJzOyBpKyspCiAJCXsKLQkJCXBpZF90CQlwaWQgPSBzaWduYWxfaW5mby5wc3RhdGUtPnBhcmFs bGVsU2xvdFtpXS5waWQ7CisJCQlIQU5ETEUJCWhUaHJlYWQgPSAoSEFORExFKSBzaWduYWxfaW5m by5wc3RhdGUtPnBhcmFsbGVsU2xvdFtpXS5oVGhyZWFkOwogCi0JCQlpZiAocGlkICE9IDApCi0J CQkJa2lsbChwaWQsIFNJR1RFUk0pOworCQkJaWYgKGhUaHJlYWQgIT0gSU5WQUxJRF9IQU5ETEVf VkFMVUUpCisJCQkJVGVybWluYXRlVGhyZWFkKGhUaHJlYWQsIDApOwogCQl9CiAJfQorI2VuZGlm CiAKIAkvKgotCSAqIFNlbmQgUXVlcnlDYW5jZWwgaWYgd2UgaGF2ZSBhIGNvbm5lY3Rpb24gdG8g c2VuZCB0by4gIElnbm9yZSBlcnJvcnMsCi0JICogdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8g YWJvdXQgdGhlbSBhbnl3YXkuCisJICogU3RvcCB3b3JrZXJzIGZpcnN0IHRvIGF2b2lkIGludmFs aWQtc25hcHNob3QgZXJyb3JzIGlmIHRoZSBsZWFkZXIKKwkgKiBjYW5jZWxzIGJlZm9yZSB3b3Jr ZXJzLgogCSAqLwotCWlmIChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYgc2lnbmFsX2luZm8u bXlBSC0+Y29ubkNhbmNlbCAhPSBOVUxMKQotCQkodm9pZCkgUFFjYW5jZWwoc2lnbmFsX2luZm8u bXlBSC0+Y29ubkNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJU3RvcFdvcmtlcnMo KTsKKworCWlmIChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYgc2lnbmFsX2luZm8ubXlBSC0+ Y2FuY2VsQ29ubiAhPSBOVUxMKQorCQkodm9pZCkgUFFjYW5jZWxCbG9ja2luZyhzaWduYWxfaW5m by5teUFILT5jYW5jZWxDb25uKTsKIAogCS8qCi0JICogUmVwb3J0IHdlJ3JlIHF1aXR0aW5nLCB1 c2luZyBub3RoaW5nIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB3cml0ZSgyKS4KLQkgKiBXaGVuIGlu IHBhcmFsbGVsIG9wZXJhdGlvbiwgb25seSB0aGUgbGVhZGVyIHByb2Nlc3Mgc2hvdWxkIGRvIHRo aXMuCisJICogUHJpbnQgdGVybWluYXRpb24gbWVzc2FnZS4gSW4gcGFyYWxsZWwgb3BlcmF0aW9u LCBvbmx5IHRoZSBsZWFkZXIKKwkgKiBzaG91bGQgcHJpbnQgdGhpcy4gT24gV2luZG93cywgd29y a2VycyBhcmUgdGhyZWFkcyBpbiB0aGUgc2FtZSBwcm9jZXNzCisJICogYW5kIHRoZSBjb25zb2xl IGhhbmRsZXIgb25seSBydW5zIGluIHRoZSBsZWFkZXIgY29udGV4dCwgc28gd2UgY2FuCisJICog YWx3YXlzIHByaW50IGl0LgogCSAqLworI2lmbmRlZiBXSU4zMgogCWlmICghc2lnbmFsX2luZm8u YW1fd29ya2VyKQorI2VuZGlmCiAJewogCQlpZiAocHJvZ25hbWUpCiAJCXsKQEAgLTU5NiwxMTEg KzU3OCw0MiBAQCBzaWdUZXJtSGFuZGxlcihTSUdOQUxfQVJHUykKIAkJd3JpdGVfc3RkZXJyKCJ0 ZXJtaW5hdGVkIGJ5IHVzZXJcbiIpOwogCX0KIAotCS8qCi0JICogQW5kIGRpZSwgdXNpbmcgX2V4 aXQoKSBub3QgZXhpdCgpIGJlY2F1c2UgdGhlIGxhdHRlciB3aWxsIGludm9rZSBhdGV4aXQKLQkg KiBoYW5kbGVycyB0aGF0IGNhbiBmYWlsIGlmIHdlIGludGVycnVwdGVkIHJlbGF0ZWQgY29kZS4K LQkgKi8KIAlfZXhpdCgxKTsKIH0KIAogLyoKLSAqIEVuYWJsZSBjYW5jZWwgaW50ZXJydXB0IGhh bmRsZXIsIGlmIG5vdCBhbHJlYWR5IGRvbmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1zZXRfY2FuY2Vs X2hhbmRsZXIodm9pZCkKLXsKLQkvKgotCSAqIFdoZW4gZm9ya2luZywgc2lnbmFsX2luZm8uaGFu ZGxlcl9zZXQgd2lsbCBwcm9wYWdhdGUgaW50byB0aGUgbmV3Ci0JICogcHJvY2VzcywgYnV0IHRo YXQncyBmaW5lIGJlY2F1c2UgdGhlIHNpZ25hbCBoYW5kbGVyIHN0YXRlIGRvZXMgdG9vLgotCSAq LwotCWlmICghc2lnbmFsX2luZm8uaGFuZGxlcl9zZXQpCi0JewotCQlzaWduYWxfaW5mby5oYW5k bGVyX3NldCA9IHRydWU7Ci0KLQkJcHFzaWduYWwoU0lHSU5ULCBzaWdUZXJtSGFuZGxlcik7Ci0J CXBxc2lnbmFsKFNJR1RFUk0sIHNpZ1Rlcm1IYW5kbGVyKTsKLQkJcHFzaWduYWwoU0lHUVVJVCwg c2lnVGVybUhhbmRsZXIpOwotCX0KLX0KLQotI2Vsc2UJCQkJCQkJLyogV0lOMzIgKi8KLQotLyoK LSAqIENvbnNvbGUgaW50ZXJydXB0IGhhbmRsZXIgLS0tIHJ1bnMgaW4gYSBuZXdseS1zdGFydGVk IHRocmVhZC4KKyAqIFN0b3AgYWxsIHdvcmtlciBwcm9jZXNzZXMvdGhyZWFkcy4KICAqCi0gKiBB ZnRlciBzdG9wcGluZyBvdGhlciB0aHJlYWRzIGFuZCBzZW5kaW5nIGNhbmNlbCByZXF1ZXN0cyBv biBhbGwgb3BlbgotICogY29ubmVjdGlvbnMsIHdlIHJldHVybiBGQUxTRSB3aGljaCB3aWxsIGFs bG93IHRoZSBkZWZhdWx0IEV4aXRQcm9jZXNzKCkKLSAqIGFjdGlvbiB0byBiZSB0YWtlbi4KKyAq IE9uIFVuaXgsIHNlbmQgU0lHVEVSTSB0byBlYWNoIHdvcmtlciBwcm9jZXNzOyB0aGVpciBzaWdu YWwgaGFuZGxlcnMgd2lsbAorICogc2VuZCBjYW5jZWwgcmVxdWVzdHMgdG8gdGhlaXIgYmFja2Vu ZHMuCisgKgorICogT24gV2luZG93cywgd29ya2VycyBhcmUgdGhyZWFkcyBpbiB0aGUgc2FtZSBw cm9jZXNzLCBzbyB3ZSBzZW5kIGNhbmNlbAorICogcmVxdWVzdHMgZGlyZWN0bHkgdG8gdGhlaXIg YmFja2VuZHMuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCB0aGUgY2FuY2VsIHRocmVhZCBsb2Nr ICh2aWEgTG9ja0NhbmNlbFRocmVhZCkuCiAgKi8KLXN0YXRpYyBCT09MIFdJTkFQSQotY29uc29s ZUhhbmRsZXIoRFdPUkQgZHdDdHJsVHlwZSkKK3N0YXRpYyB2b2lkCitTdG9wV29ya2Vycyh2b2lk KQogewogCWludAkJCWk7Ci0JY2hhcgkJZXJyYnVmWzFdOwogCi0JaWYgKGR3Q3RybFR5cGUgPT0g Q1RSTF9DX0VWRU5UIHx8Ci0JCWR3Q3RybFR5cGUgPT0gQ1RSTF9CUkVBS19FVkVOVCkKLQl7Ci0J CS8qIENyaXRpY2FsIHNlY3Rpb24gcHJldmVudHMgY2hhbmdpbmcgZGF0YSB3ZSBsb29rIGF0IGhl cmUgKi8KLQkJRW50ZXJDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOwotCi0JCS8q Ci0JCSAqIElmIGluIHBhcmFsbGVsIG1vZGUsIHN0b3Agd29ya2VyIHRocmVhZHMgYW5kIHNlbmQg UXVlcnlDYW5jZWwgdG8KLQkJICogdGhlaXIgY29ubmVjdGVkIGJhY2tlbmRzLiAgVGhlIG1haW4g cG9pbnQgb2Ygc3RvcHBpbmcgdGhlIHdvcmtlcgotCQkgKiB0aHJlYWRzIGlzIHRvIGtlZXAgdGhl bSBmcm9tIHJlcG9ydGluZyB0aGUgcXVlcnkgY2FuY2VscyBhcyBlcnJvcnMsCi0JCSAqIHdoaWNo IHdvdWxkIGNsdXR0ZXIgdGhlIHVzZXIncyBzY3JlZW4uICBXZSBuZWVkbid0IHN0b3AgdGhlIGxl YWRlcgotCQkgKiB0aHJlYWQgc2luY2UgaXQgd29uJ3QgYmUgZG9pbmcgbXVjaCBhbnl3YXkuICBE byB0aGlzIGJlZm9yZQotCQkgKiBjYW5jZWxpbmcgdGhlIG1haW4gdHJhbnNhY3Rpb24sIGVsc2Ug d2UgbWlnaHQgZ2V0IGludmFsaWQtc25hcHNob3QKLQkJICogZXJyb3JzIHJlcG9ydGVkIGJlZm9y ZSB3ZSBjYW4gc3RvcCB0aGUgd29ya2Vycy4gIElnbm9yZSBlcnJvcnMsCi0JCSAqIHRoZXJlJ3Mg bm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IHRoZW0gYW55d2F5LgotCQkgKi8KLQkJaWYgKHNpZ25h bF9pbmZvLnBzdGF0ZSAhPSBOVUxMKQotCQl7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsX2lu Zm8ucHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCi0JCQl7Ci0JCQkJUGFyYWxsZWxTbG90ICpzbG90 ID0gJihzaWduYWxfaW5mby5wc3RhdGUtPnBhcmFsbGVsU2xvdFtpXSk7Ci0JCQkJQXJjaGl2ZUhh bmRsZSAqQUggPSBzbG90LT5BSDsKLQkJCQlIQU5ETEUJCWhUaHJlYWQgPSAoSEFORExFKSBzbG90 LT5oVGhyZWFkOwotCi0JCQkJLyoKLQkJCQkgKiBVc2luZyBUZXJtaW5hdGVUaHJlYWQgaGVyZSBt YXkgbGVhdmUgc29tZSByZXNvdXJjZXMgbGVha2VkLAotCQkJCSAqIGJ1dCBpdCBkb2Vzbid0IG1h dHRlciBzaW5jZSB3ZSdyZSBhYm91dCB0byBlbmQgdGhlIHdob2xlCi0JCQkJICogcHJvY2Vzcy4K LQkJCQkgKi8KLQkJCQlpZiAoaFRocmVhZCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLQkJCQkJ VGVybWluYXRlVGhyZWFkKGhUaHJlYWQsIDApOwotCi0JCQkJaWYgKEFIICE9IE5VTEwgJiYgQUgt PmNvbm5DYW5jZWwgIT0gTlVMTCkKLQkJCQkJKHZvaWQpIFBRY2FuY2VsKEFILT5jb25uQ2FuY2Vs LCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKLQkJCX0KLQkJfQorCWlmIChzaWduYWxfaW5mby5w c3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuOwogCi0JCS8qCi0JCSAqIFNlbmQgUXVlcnlDYW5jZWwg dG8gbGVhZGVyIGNvbm5lY3Rpb24sIGlmIGVuYWJsZWQuICBJZ25vcmUgZXJyb3JzLAotCQkgKiB0 aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCB0aGVtIGFueXdheS4KLQkJICovCi0JCWlm IChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYgc2lnbmFsX2luZm8ubXlBSC0+Y29ubkNhbmNl bCAhPSBOVUxMKQotCQkJKHZvaWQpIFBRY2FuY2VsKHNpZ25hbF9pbmZvLm15QUgtPmNvbm5DYW5j ZWwsCi0JCQkJCQkJZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJZm9yIChpID0gMDsgaSA8IHNp Z25hbF9pbmZvLnBzdGF0ZS0+bnVtV29ya2VyczsgaSsrKQorCXsKKyNpZm5kZWYgV0lOMzIKKwkJ cGlkX3QJCXBpZCA9IHNpZ25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpZDsKIAot CQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7CisJCWlmIChwaWQgIT0g MCkKKwkJCWtpbGwocGlkLCBTSUdURVJNKTsKKyNlbHNlCisJCUFyY2hpdmVIYW5kbGUgKkFIID0g c2lnbmFsX2luZm8ucHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0uQUg7CiAKLQkJLyoKLQkJICogUmVw b3J0IHdlJ3JlIHF1aXR0aW5nLCB1c2luZyBub3RoaW5nIG1vcmUgY29tcGxpY2F0ZWQgdGhhbgot CQkgKiB3cml0ZSgyKS4gIChXZSBtaWdodCBiZSBhYmxlIHRvIGdldCBhd2F5IHdpdGggdXNpbmcg cGdfbG9nXyooKQotCQkgKiBoZXJlLCBidXQgc2luY2Ugd2UgdGVybWluYXRlZCBvdGhlciB0aHJl YWRzIHVuY2xlYW5seSBhYm92ZSwgaXQKLQkJICogc2VlbXMgYmV0dGVyIHRvIGFzc3VtZSBhcyBs aXR0bGUgYXMgcG9zc2libGUuKQotCQkgKi8KLQkJaWYgKHByb2duYW1lKQotCQl7Ci0JCQl3cml0 ZV9zdGRlcnIocHJvZ25hbWUpOwotCQkJd3JpdGVfc3RkZXJyKCI6ICIpOwotCQl9Ci0JCXdyaXRl X3N0ZGVycigidGVybWluYXRlZCBieSB1c2VyXG4iKTsKKwkJaWYgKEFIICE9IE5VTEwgJiYgQUgt PmNhbmNlbENvbm4gIT0gTlVMTCkKKwkJCSh2b2lkKSBQUWNhbmNlbEJsb2NraW5nKEFILT5jYW5j ZWxDb25uKTsKKyNlbmRpZgogCX0KLQotCS8qIEFsd2F5cyByZXR1cm4gRkFMU0UgdG8gYWxsb3cg c2lnbmFsIGhhbmRsaW5nIHRvIGNvbnRpbnVlICovCi0JcmV0dXJuIEZBTFNFOwogfQogCiAvKgpA QCAtNzA5LDU4ICs2MjIsNTUgQEAgY29uc29sZUhhbmRsZXIoRFdPUkQgZHdDdHJsVHlwZSkKIHN0 YXRpYyB2b2lkCiBzZXRfY2FuY2VsX2hhbmRsZXIodm9pZCkKIHsKLQlpZiAoIXNpZ25hbF9pbmZv LmhhbmRsZXJfc2V0KQotCXsKLQkJc2lnbmFsX2luZm8uaGFuZGxlcl9zZXQgPSB0cnVlOworCWlm IChzaWduYWxfaW5mby5oYW5kbGVyX3NldCkKKwkJcmV0dXJuOwogCi0JCUluaXRpYWxpemVDcml0 aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOworCXNpZ25hbF9pbmZvLmhhbmRsZXJfc2V0 ID0gdHJ1ZTsKIAotCQlTZXRDb25zb2xlQ3RybEhhbmRsZXIoY29uc29sZUhhbmRsZXIsIFRSVUUp OwotCX0KLX0KKwlzZXR1cF9jYW5jZWxfaGFuZGxlcihOVUxMLCBDYW5jZWxCYWNrZW5kc0FuZEV4 aXQpOwogCi0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KKyNpZm5kZWYgV0lOMzIKKwlwcXNpZ25h bChTSUdURVJNLCBDYW5jZWxTaWduYWxIYW5kbGVyKTsKKwlwcXNpZ25hbChTSUdRVUlULCBDYW5j ZWxTaWduYWxIYW5kbGVyKTsKKyNlbmRpZgorfQogCiAKIC8qCiAgKiBzZXRfYXJjaGl2ZV9jYW5j ZWxfaW5mbwogICoKLSAqIEZpbGwgQUgtPmNvbm5DYW5jZWwgd2l0aCBjYW5jZWxsYXRpb24gaW5m byBmb3IgdGhlIHNwZWNpZmllZCBkYXRhYmFzZQorICogRmlsbCBBSC0+Y2FuY2VsQ29ubiB3aXRo IGNhbmNlbGxhdGlvbiBpbmZvIGZvciB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlCiAgKiBjb25uZWN0 aW9uOyBvciBjbGVhciBpdCBpZiBjb25uIGlzIE5VTEwuCiAgKi8KIHZvaWQKIHNldF9hcmNoaXZl X2NhbmNlbF9pbmZvKEFyY2hpdmVIYW5kbGUgKkFILCBQR2Nvbm4gKmNvbm4pCiB7Ci0JUEdjYW5j ZWwgICAqb2xkQ29ubkNhbmNlbDsKKwlQR2NhbmNlbENvbm4gKm9sZENhbmNlbENvbm47CiAKIAkv KgotCSAqIEFjdGl2YXRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpZiB3ZSBkaWRuJ3QgeWV0IGlu IHRoaXMgcHJvY2Vzcy4gIE9uCi0JICogV2luZG93cywgdGhpcyBhbHNvIGluaXRpYWxpemVzIHNp Z25hbF9pbmZvX2xvY2s7IHRoZXJlZm9yZSBpdCdzCisJICogQWN0aXZhdGUgdGhlIGludGVycnVw dCBoYW5kbGVyIGlmIHdlIGRpZG4ndCB5ZXQgaW4gdGhpcyBwcm9jZXNzLiBJdCdzCiAJICogaW1w b3J0YW50IHRoYXQgdGhpcyBoYXBwZW4gYXQgbGVhc3Qgb25jZSBiZWZvcmUgd2UgZm9yayBvZmYg YW55CiAJICogdGhyZWFkcy4KIAkgKi8KIAlzZXRfY2FuY2VsX2hhbmRsZXIoKTsKIAogCS8qCi0J ICogT24gVW5peCwgd2UgYXNzdW1lIHRoYXQgc3RvcmluZyBhIHBvaW50ZXIgdmFsdWUgaXMgYXRv bWljIHdpdGggcmVzcGVjdAotCSAqIHRvIGFueSBwb3NzaWJsZSBzaWduYWwgaW50ZXJydXB0LiAg T24gV2luZG93cywgdXNlIGEgY3JpdGljYWwgc2VjdGlvbi4KKwkgKiBVc2UgbXV0ZXggdG8gcHJl dmVudCB0aGUgY2FuY2VsIGhhbmRsZXIgZnJvbSB1c2luZyB0aGUgcG9pbnRlciB3aGlsZQorCSAq IHdlJ3JlIGNoYW5naW5nIGl0LgogCSAqLwotCi0jaWZkZWYgV0lOMzIKLQlFbnRlckNyaXRpY2Fs U2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7Ci0jZW5kaWYKKwlMb2NrQ2FuY2VsVGhyZWFkKCk7 CiAKIAkvKiBGcmVlIHRoZSBvbGQgb25lIGlmIHdlIGhhdmUgb25lICovCi0Jb2xkQ29ubkNhbmNl bCA9IEFILT5jb25uQ2FuY2VsOworCW9sZENhbmNlbENvbm4gPSBBSC0+Y2FuY2VsQ29ubjsKIAkv KiBiZSBzdXJlIGludGVycnVwdCBoYW5kbGVyIGRvZXNuJ3QgdXNlIHBvaW50ZXIgd2hpbGUgZnJl ZWluZyAqLwotCUFILT5jb25uQ2FuY2VsID0gTlVMTDsKKwlBSC0+Y2FuY2VsQ29ubiA9IE5VTEw7 CiAKLQlpZiAob2xkQ29ubkNhbmNlbCAhPSBOVUxMKQotCQlQUWZyZWVDYW5jZWwob2xkQ29ubkNh bmNlbCk7CisJaWYgKG9sZENhbmNlbENvbm4gIT0gTlVMTCkKKwkJUFFjYW5jZWxGaW5pc2gob2xk Q2FuY2VsQ29ubik7CiAKIAkvKiBTZXQgdGhlIG5ldyBvbmUgaWYgc3BlY2lmaWVkICovCiAJaWYg KGNvbm4pCi0JCUFILT5jb25uQ2FuY2VsID0gUFFnZXRDYW5jZWwoY29ubik7CisJCUFILT5jYW5j ZWxDb25uID0gUFFjYW5jZWxDcmVhdGUoY29ubik7CiAKIAkvKgogCSAqIE9uIFVuaXgsIHRoZXJl J3Mgb25seSBldmVyIG9uZSBhY3RpdmUgQXJjaGl2ZUhhbmRsZSBwZXIgcHJvY2Vzcywgc28gd2UK QEAgLTc3Niw0OSArNjg2LDM1IEBAIHNldF9hcmNoaXZlX2NhbmNlbF9pbmZvKEFyY2hpdmVIYW5k bGUgKkFILCBQR2Nvbm4gKmNvbm4pCiAJCXNpZ25hbF9pbmZvLm15QUggPSBBSDsKICNlbmRpZgog Ci0jaWZkZWYgV0lOMzIKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7 Ci0jZW5kaWYKKwlVbmxvY2tDYW5jZWxUaHJlYWQoKTsKIH0KIAogLyoKICAqIHNldF9jYW5jZWxf cHN0YXRlCiAgKgogICogU2V0IHNpZ25hbF9pbmZvLnBzdGF0ZSB0byBwb2ludCB0byB0aGUgc3Bl Y2lmaWVkIFBhcmFsbGVsU3RhdGUsIGlmIGFueS4KLSAqIFdlIG5lZWQgdGhpcyBtYWlubHkgdG8g aGF2ZSBhbiBpbnRlcmxvY2sgYWdhaW5zdCBXaW5kb3dzIHNpZ25hbCB0aHJlYWQuCisgKiBXZSBu ZWVkIHRoaXMgbWFpbmx5IHRvIGhhdmUgYW4gaW50ZXJsb2NrIGFnYWluc3QgdGhlIGNhbmNlbCBo YW5kbGVyIHRocmVhZC4KICAqLwogc3RhdGljIHZvaWQKIHNldF9jYW5jZWxfcHN0YXRlKFBhcmFs bGVsU3RhdGUgKnBzdGF0ZSkKIHsKLSNpZmRlZiBXSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0aW9u KCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgotCisJTG9ja0NhbmNlbFRocmVhZCgpOwogCXNp Z25hbF9pbmZvLnBzdGF0ZSA9IHBzdGF0ZTsKLQotI2lmZGVmIFdJTjMyCi0JTGVhdmVDcml0aWNh bFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOwotI2VuZGlmCisJVW5sb2NrQ2FuY2VsVGhyZWFk KCk7CiB9CiAKIC8qCiAgKiBzZXRfY2FuY2VsX3Nsb3RfYXJjaGl2ZQogICoKICAqIFNldCBQYXJh bGxlbFNsb3QncyBBSCBmaWVsZCB0byBwb2ludCB0byB0aGUgc3BlY2lmaWVkIGFyY2hpdmUsIGlm IGFueS4KLSAqIFdlIG5lZWQgdGhpcyBtYWlubHkgdG8gaGF2ZSBhbiBpbnRlcmxvY2sgYWdhaW5z dCBXaW5kb3dzIHNpZ25hbCB0aHJlYWQuCisgKiBXZSBuZWVkIHRoaXMgbWFpbmx5IHRvIGhhdmUg YW4gaW50ZXJsb2NrIGFnYWluc3QgdGhlIGNhbmNlbCBoYW5kbGVyIHRocmVhZC4KICAqLwogc3Rh dGljIHZvaWQKIHNldF9jYW5jZWxfc2xvdF9hcmNoaXZlKFBhcmFsbGVsU2xvdCAqc2xvdCwgQXJj aGl2ZUhhbmRsZSAqQUgpCiB7Ci0jaWZkZWYgV0lOMzIKLQlFbnRlckNyaXRpY2FsU2VjdGlvbigm c2lnbmFsX2luZm9fbG9jayk7Ci0jZW5kaWYKLQorCUxvY2tDYW5jZWxUaHJlYWQoKTsKIAlzbG90 LT5BSCA9IEFIOwotCi0jaWZkZWYgV0lOMzIKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc2lnbmFs X2luZm9fbG9jayk7Ci0jZW5kaWYKKwlVbmxvY2tDYW5jZWxUaHJlYWQoKTsKIH0KIAogCkBAIC05 MzMsNyArODI5LDcgQEAgUGFyYWxsZWxCYWNrdXBTdGFydChBcmNoaXZlSGFuZGxlICpBSCkKIAog CS8qCiAJICogVGVtcG9yYXJpbHkgZGlzYWJsZSBxdWVyeSBjYW5jZWxsYXRpb24gb24gdGhlIGxl YWRlciBjb25uZWN0aW9uLiAgVGhpcwotCSAqIGVuc3VyZXMgdGhhdCBjaGlsZCBwcm9jZXNzZXMg d29uJ3QgaW5oZXJpdCB2YWxpZCBBSC0+Y29ubkNhbmNlbAorCSAqIGVuc3VyZXMgdGhhdCBjaGls ZCBwcm9jZXNzZXMgd29uJ3QgaW5oZXJpdCB2YWxpZCBBSC0+Y2FuY2VsQ29ubgogCSAqIHNldHRp bmdzIGFuZCB0aHVzIHdvbid0IHRyeSB0byBpc3N1ZSBjYW5jZWxzIGFnYWluc3QgdGhlIGxlYWRl cidzCiAJICogY29ubmVjdGlvbi4gIE5vIGhhcm0gaXMgZG9uZSBpZiB3ZSBmYWlsIHdoaWxlIGl0 J3MgZGlzYWJsZWQsIGJlY2F1c2UKIAkgKiB0aGUgbGVhZGVyIGNvbm5lY3Rpb24gaXMgaWRsZSBh dCB0aGlzIHBvaW50IGFueXdheS4KQEAgLTk1MSw2ICs4NDcsNyBAQCBQYXJhbGxlbEJhY2t1cFN0 YXJ0KEFyY2hpdmVIYW5kbGUgKkFIKQogCQl1aW50cHRyX3QJaGFuZGxlOwogI2Vsc2UKIAkJcGlk X3QJCXBpZDsKKwkJc2lnc2V0X3QJY2FuY2VsX3NldDsKICNlbmRpZgogCQlQYXJhbGxlbFNsb3Qg KnNsb3QgPSAmKHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldKTsKIAkJaW50CQkJcGlwZU1XWzJdLApA QCAtOTc5LDYgKzg3NiwxOCBAQCBQYXJhbGxlbEJhY2t1cFN0YXJ0KEFyY2hpdmVIYW5kbGUgKkFI KQogCQlzbG90LT5oVGhyZWFkID0gaGFuZGxlOwogCQlzbG90LT53b3JrZXJTdGF0dXMgPSBXUktS X0lETEU7CiAjZWxzZQkJCQkJCQkvKiAhV0lOMzIgKi8KKworCQkvKgorCQkgKiBCbG9jayBzaWdu YWxzIGJlZm9yZSBmb3JrIHNvIHRoYXQgbm8gc2lnbmFsIGNhbiBhcnJpdmUgaW4gdGhlIGNoaWxk CisJCSAqIGJlZm9yZSBSZXNldENhbmNlbEFmdGVyRm9yaygpIGhhcyBjbGVhbmVkIHVwIHRoZSBp bmhlcml0ZWQgY2FuY2VsCisJCSAqIHN0YXRlIChwaXBlIGZkcywgc2lnbmFsIGhhbmRsZXJzLCBt dXRleCkuCisJCSAqLworCQlzaWdlbXB0eXNldCgmY2FuY2VsX3NldCk7CisJCXNpZ2FkZHNldCgm Y2FuY2VsX3NldCwgU0lHSU5UKTsKKwkJc2lnYWRkc2V0KCZjYW5jZWxfc2V0LCBTSUdURVJNKTsK KwkJc2lnYWRkc2V0KCZjYW5jZWxfc2V0LCBTSUdRVUlUKTsKKwkJc2lncHJvY21hc2soU0lHX0JM T0NLLCAmY2FuY2VsX3NldCwgTlVMTCk7CisKIAkJcGlkID0gZm9yaygpOwogCQlpZiAocGlkID09 IDApCiAJCXsKQEAgLTk5MSw2ICs5MDAsMTIgQEAgUGFyYWxsZWxCYWNrdXBTdGFydChBcmNoaXZl SGFuZGxlICpBSCkKIAkJCS8qIGluc3RydWN0IHNpZ25hbCBoYW5kbGVyIHRoYXQgd2UncmUgaW4g YSB3b3JrZXIgbm93ICovCiAJCQlzaWduYWxfaW5mby5hbV93b3JrZXIgPSB0cnVlOwogCisJCQlz aWduYWxfaW5mby5oYW5kbGVyX3NldCA9IGZhbHNlOworCQkJUmVzZXRDYW5jZWxBZnRlckZvcmso KTsKKwkJCXBxc2lnbmFsKFNJR1RFUk0sIFBHX1NJR19ERkwpOworCQkJcHFzaWduYWwoU0lHUVVJ VCwgUEdfU0lHX0RGTCk7CisJCQlzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJmNhbmNlbF9zZXQs IE5VTEwpOworCiAJCQkvKiBjbG9zZSByZWFkIGVuZCBvZiBXb3JrZXIgLT4gTGVhZGVyICovCiAJ CQljbG9zZXNvY2tldChwaXBlV01bUElQRV9SRUFEXSk7CiAJCQkvKiBjbG9zZSB3cml0ZSBlbmQg b2YgTGVhZGVyIC0+IFdvcmtlciAqLwpAQCAtMTAxOSw2ICs5MzQsOCBAQCBQYXJhbGxlbEJhY2t1 cFN0YXJ0KEFyY2hpdmVIYW5kbGUgKkFIKQogCQl9CiAKIAkJLyogSW4gTGVhZGVyIGFmdGVyIHN1 Y2Nlc3NmdWwgZm9yayAqLworCQlzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJmNhbmNlbF9zZXQs IE5VTEwpOworCiAJCXNsb3QtPnBpZCA9IHBpZDsKIAkJc2xvdC0+d29ya2VyU3RhdHVzID0gV1JL Ul9JRExFOwogCkBAIC0xNDA3LDggKzEzMjQsMTIgQEAgTGlzdGVuVG9Xb3JrZXJzKEFyY2hpdmVI YW5kbGUgKkFILCBQYXJhbGxlbFN0YXRlICpwc3RhdGUsIGJvb2wgZG9fd2FpdCkKIAogCWlmICgh bXNnKQogCXsKLQkJLyogSWYgZG9fd2FpdCBpcyB0cnVlLCB3ZSBtdXN0IGhhdmUgZGV0ZWN0ZWQg RU9GIG9uIHNvbWUgc29ja2V0ICovCi0JCWlmIChkb193YWl0KQorCQkvKgorCQkgKiBJZiBkb193 YWl0IGlzIHRydWUsIHdlIG11c3QgaGF2ZSBkZXRlY3RlZCBFT0Ygb24gc29tZSBzb2NrZXQuIElm CisJCSAqIGl0J3MgZHVlIHRvIGEgY2FuY2VsIHJlcXVlc3QsIHRoYXQncyBleHBlY3RlZCwgb3Ro ZXJ3aXNlIGl0J3MgYQorCQkgKiBwcm9ibGVtLgorCQkgKi8KKwkJaWYgKGRvX3dhaXQgJiYgIUNh bmNlbFJlcXVlc3RlZCkKIAkJCXBnX2ZhdGFsKCJhIHdvcmtlciBwcm9jZXNzIGRpZWQgdW5leHBl Y3RlZGx5Iik7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMKaW5kZXggMDU1N2ViNmQ2ZWQuLjhhNTdmMmZjMjcyIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5jCkBAIC01MTk2LDcgKzUxOTYsNyBAQCBDbG9uZUFyY2hpdmUoQXJjaGl2 ZUhhbmRsZSAqQUgpCiAKIAkvKiBUaGUgY2xvbmUgd2lsbCBoYXZlIGl0cyBvd24gY29ubmVjdGlv biwgc28gZGlzcmVnYXJkIGNvbm5lY3Rpb24gc3RhdGUgKi8KIAljbG9uZS0+Y29ubmVjdGlvbiA9 IE5VTEw7Ci0JY2xvbmUtPmNvbm5DYW5jZWwgPSBOVUxMOworCWNsb25lLT5jYW5jZWxDb25uID0g TlVMTDsKIAljbG9uZS0+Y3VyclVzZXIgPSBOVUxMOwogCWNsb25lLT5jdXJyU2NoZW1hID0gTlVM TDsKIAljbG9uZS0+Y3VyclRhYmxlQW0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5oCmluZGV4IGMxNTI4ZDc4ODUzLi4yOGZlYmFjMGM0MyAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuaApAQCAtMjg4LDggKzI4OCwxMiBAQCBzdHJ1Y3QgX2FyY2hpdmVIYW5k bGUKIAljaGFyCSAgICpzYXZlZFBhc3N3b3JkOwkvKiBwYXNzd29yZCBmb3Igcm9wdC0+dXNlcm5h bWUsIGlmIGtub3duICovCiAJY2hhcgkgICAqdXNlX3JvbGU7CiAJUEdjb25uCSAgICpjb25uZWN0 aW9uOwotCS8qIElmIGNvbm5DYW5jZWwgaXNuJ3QgTlVMTCwgU0lHSU5UIGhhbmRsZXIgd2lsbCBz ZW5kIGEgY2FuY2VsICovCi0JUEdjYW5jZWwgICAqdm9sYXRpbGUgY29ubkNhbmNlbDsKKworCS8q CisJICogSWYgY2FuY2VsQ29ubiBpc24ndCBOVUxMLCBTSUdJTlQgaGFuZGxlciB3aWxsIHRyaWdn ZXIgdGhlIGNhbmNlbCB0aHJlYWQKKwkgKiB0byBzZW5kIGEgY2FuY2VsLgorCSAqLworCVBHY2Fu Y2VsQ29ubiAqY2FuY2VsQ29ubjsKIAogCWludAkJCWNvbm5lY3RUb0RCOwkvKiBGbGFnIHRvIGlu ZGljYXRlIGlmIGRpcmVjdCBEQiBjb25uZWN0aW9uIGlzCiAJCQkJCQkJCSAqIHJlcXVpcmVkICov CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2RiLmMKaW5kZXggZWMwZGRmMWQ3MTguLjU4MmQ5Yjg4NDU2IDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9kYi5jCkBAIC04NCw3ICs4NCw3IEBAIFJlY29ubmVjdFRvU2VydmVyKEFy Y2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpkYm5hbWUpCiAKIAkvKgogCSAqIE5vdGU6IHdl IHdhbnQgdG8gZXN0YWJsaXNoIHRoZSBuZXcgY29ubmVjdGlvbiwgYW5kIGluIHBhcnRpY3VsYXIg dXBkYXRlCi0JICogQXJjaGl2ZUhhbmRsZSdzIGNvbm5DYW5jZWwsIGJlZm9yZSBjbG9zaW5nIG9s ZCBjb25uZWN0aW9uLiAgT3RoZXJ3aXNlCisJICogQXJjaGl2ZUhhbmRsZSdzIGNhbmNlbENvbm4s IGJlZm9yZSBjbG9zaW5nIG9sZCBjb25uZWN0aW9uLiAgT3RoZXJ3aXNlCiAJICogYW4gaWxsLXRp bWVkIFNJR0lOVCBjb3VsZCB0cnkgdG8gYWNjZXNzIGEgZGVhZCBjb25uZWN0aW9uLgogCSAqLwog CUFILT5jb25uZWN0aW9uID0gTlVMTDsJCS8qIGRvZGdlIGVycm9yIGNoZWNrIGluIENvbm5lY3RE YXRhYmFzZUFoeCAqLwpAQCAtMTY0LDEyICsxNjQsMTEgQEAgdm9pZAogRGlzY29ubmVjdERhdGFi YXNlKEFyY2hpdmUgKkFIWCkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxl ICopIEFIWDsKLQljaGFyCQllcnJidWZbMV07CiAKIAlpZiAoIUFILT5jb25uZWN0aW9uKQogCQly ZXR1cm47CiAKLQlpZiAoQUgtPmNvbm5DYW5jZWwpCisJaWYgKEFILT5jYW5jZWxDb25uKQogCXsK IAkJLyoKIAkJICogSWYgd2UgaGF2ZSBhbiBhY3RpdmUgcXVlcnksIHNlbmQgYSBjYW5jZWwgYmVm b3JlIGNsb3NpbmcsIGlnbm9yaW5nCkBAIC0xNzcsNyArMTc2LDcgQEAgRGlzY29ubmVjdERhdGFi YXNlKEFyY2hpdmUgKkFIWCkKIAkJICogaGVscGZ1bCBkdXJpbmcgcGdfZmF0YWwoKS4KIAkJICov CiAJCWlmIChQUXRyYW5zYWN0aW9uU3RhdHVzKEFILT5jb25uZWN0aW9uKSA9PSBQUVRSQU5TX0FD VElWRSkKLQkJCSh2b2lkKSBQUWNhbmNlbChBSC0+Y29ubkNhbmNlbCwgZXJyYnVmLCBzaXplb2Yo ZXJyYnVmKSk7CisJCQkodm9pZCkgUFFjYW5jZWxCbG9ja2luZyhBSC0+Y2FuY2VsQ29ubik7CiAK IAkJLyoKIAkJICogUHJldmVudCBzaWduYWwgaGFuZGxlciBmcm9tIHNlbmRpbmcgYSBjYW5jZWwg YWZ0ZXIgdGhpcy4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMv YmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDhhYjM1YThjODNlLi5hNDc1MTE1NDIwMyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gv cGdiZW5jaC5jCkBAIC01MzM2LDcgKzUzMzYsNyBAQCBydW5Jbml0U3RlcHMoY29uc3QgY2hhciAq aW5pdGlhbGl6ZV9zdGVwcykKIAlpZiAoKGNvbiA9IGRvQ29ubmVjdCgpKSA9PSBOVUxMKQogCQlw Z19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBjb25uZWN0aW9uIGZvciBpbml0aWFsaXphdGlvbiIp OwogCi0Jc2V0dXBfY2FuY2VsX2hhbmRsZXIoTlVMTCk7CisJc2V0dXBfY2FuY2VsX2hhbmRsZXIo TlVMTCwgTlVMTCk7CiAJU2V0Q2FuY2VsQ29ubihjb24pOwogCiAJZm9yIChzdGVwID0gaW5pdGlh bGl6ZV9zdGVwczsgKnN0ZXAgIT0gJ1wwJzsgc3RlcCsrKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w c3FsL2NvbW1vbi5jIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCmluZGV4IDcyMWY4NzMzYTUzLi42 NjU2OGExOGY4MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCisrKyBiL3NyYy9i aW4vcHNxbC9jb21tb24uYwpAQCAtMzA1LDIzICszMDUsMjcgQEAgdm9sYXRpbGUgc2lnX2F0b21p Y190IHNpZ2ludF9pbnRlcnJ1cHRfZW5hYmxlZCA9IGZhbHNlOwogCiBzaWdqbXBfYnVmCXNpZ2lu dF9pbnRlcnJ1cHRfam1wOwogCisjaWZuZGVmIFdJTjMyCiBzdGF0aWMgdm9pZAogcHNxbF9jYW5j ZWxfY2FsbGJhY2sodm9pZCkKIHsKLSNpZm5kZWYgV0lOMzIKIAkvKiBpZiB3ZSBhcmUgd2FpdGlu ZyBmb3IgaW5wdXQsIGxvbmdqbXAgb3V0IG9mIGl0ICovCiAJaWYgKHNpZ2ludF9pbnRlcnJ1cHRf ZW5hYmxlZCkKIAl7CiAJCXNpZ2ludF9pbnRlcnJ1cHRfZW5hYmxlZCA9IGZhbHNlOwogCQlzaWds b25nam1wKHNpZ2ludF9pbnRlcnJ1cHRfam1wLCAxKTsKIAl9Ci0jZW5kaWYKIH0KKyNlbmRpZgog CiB2b2lkCiBwc3FsX3NldHVwX2NhbmNlbF9oYW5kbGVyKHZvaWQpCiB7Ci0Jc2V0dXBfY2FuY2Vs X2hhbmRsZXIocHNxbF9jYW5jZWxfY2FsbGJhY2spOworI2lmbmRlZiBXSU4zMgorCXNldHVwX2Nh bmNlbF9oYW5kbGVyKHBzcWxfY2FuY2VsX2NhbGxiYWNrLCBOVUxMKTsKKyNlbHNlCisJc2V0dXBf Y2FuY2VsX2hhbmRsZXIoTlVMTCwgTlVMTCk7CisjZW5kaWYKIH0KIAogCmRpZmYgLS1naXQgYS9z cmMvYmluL3NjcmlwdHMvY2x1c3RlcmRiLmMgYi9zcmMvYmluL3NjcmlwdHMvY2x1c3RlcmRiLmMK aW5kZXggNTNiYmI0MmM4ODMuLmYyODJhODhjNzZkIDEwMDY0NAotLS0gYS9zcmMvYmluL3Njcmlw dHMvY2x1c3RlcmRiLmMKKysrIGIvc3JjL2Jpbi9zY3JpcHRzL2NsdXN0ZXJkYi5jCkBAIC0xNDAs NyArMTQwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNwYXJhbXMucHJvbXB0 X3Bhc3N3b3JkID0gcHJvbXB0X3Bhc3N3b3JkOwogCWNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0g TlVMTDsKIAotCXNldHVwX2NhbmNlbF9oYW5kbGVyKE5VTEwpOworCXNldHVwX2NhbmNlbF9oYW5k bGVyKE5VTEwsIE5VTEwpOwogCiAJaWYgKGFsbGRiKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iaW4v c2NyaXB0cy9yZWluZGV4ZGIuYyBiL3NyYy9iaW4vc2NyaXB0cy9yZWluZGV4ZGIuYwppbmRleCBk N2ZiMTZkM2M4NS4uNzU2MTNiOTk1ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vc2NyaXB0cy9yZWlu ZGV4ZGIuYworKysgYi9zcmMvYmluL3NjcmlwdHMvcmVpbmRleGRiLmMKQEAgLTIxMSw3ICsyMTEs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJY3BhcmFtcy5wcm9tcHRfcGFzc3dv cmQgPSBwcm9tcHRfcGFzc3dvcmQ7CiAJY3BhcmFtcy5vdmVycmlkZV9kYm5hbWUgPSBOVUxMOwog Ci0Jc2V0dXBfY2FuY2VsX2hhbmRsZXIoTlVMTCk7CisJc2V0dXBfY2FuY2VsX2hhbmRsZXIoTlVM TCwgTlVMTCk7CiAKIAlpZiAoY29uY3VycmVudENvbnMgPiAxICYmIHN5c2NhdGFsb2cpCiAJCXBn X2ZhdGFsKCJjYW5ub3QgdXNlIG11bHRpcGxlIGpvYnMgdG8gcmVpbmRleCBzeXN0ZW0gY2F0YWxv Z3MiKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vc2NyaXB0cy92YWN1dW1pbmcuYyBiL3NyYy9iaW4v c2NyaXB0cy92YWN1dW1pbmcuYwppbmRleCA4NTVhNTc1NGM5OC4uZWZhNDg5OTg1M2YgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vc2NyaXB0cy92YWN1dW1pbmcuYworKysgYi9zcmMvYmluL3NjcmlwdHMv dmFjdXVtaW5nLmMKQEAgLTU4LDcgKzU4LDcgQEAgdmFjdXVtaW5nX21haW4oQ29ublBhcmFtcyAq Y3BhcmFtcywgY29uc3QgY2hhciAqZGJuYW1lLAogCQkJICAgdW5zaWduZWQgaW50IHRibF9jb3Vu dCwgaW50IGNvbmN1cnJlbnRDb25zLAogCQkJICAgY29uc3QgY2hhciAqcHJvZ25hbWUpCiB7Ci0J c2V0dXBfY2FuY2VsX2hhbmRsZXIoTlVMTCk7CisJc2V0dXBfY2FuY2VsX2hhbmRsZXIoTlVMTCwg TlVMTCk7CiAKIAkvKiBBdm9pZCBvcGVuaW5nIGV4dHJhIGNvbm5lY3Rpb25zLiAqLwogCWlmICh0 YmxfY291bnQgPiAwICYmIChjb25jdXJyZW50Q29ucyA+IHRibF9jb3VudCkpCmRpZmYgLS1naXQg YS9zcmMvZmVfdXRpbHMvTWFrZWZpbGUgYi9zcmMvZmVfdXRpbHMvTWFrZWZpbGUKaW5kZXggY2Jm YmY5M2FjNjkuLjgwOWFiMjFjYzBjIDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvTWFrZWZpbGUK KysrIGIvc3JjL2ZlX3V0aWxzL01ha2VmaWxlCkBAIC0xNyw3ICsxNyw3IEBAIHN1YmRpciA9IHNy Yy9mZV91dGlscwogdG9wX2J1aWxkZGlyID0gLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIp L3NyYy9NYWtlZmlsZS5nbG9iYWwKIAotb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLURGUk9OVEVORCAt SSQobGlicHFfc3JjZGlyKSAkKENQUEZMQUdTKQorb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLURGUk9O VEVORCAtSSQobGlicHFfc3JjZGlyKSAtSSQodG9wX3NyY2Rpcikvc3JjL3BvcnQgJChDUFBGTEFH UykKIAogT0JKUyA9IFwKIAlhcmNoaXZlLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2ZlX3V0aWxzL2Nh bmNlbC5jIGIvc3JjL2ZlX3V0aWxzL2NhbmNlbC5jCmluZGV4IDlmYWMwNGUzMzNlLi44ZjI2MWQ4 ZjFjZCAxMDA2NDQKLS0tIGEvc3JjL2ZlX3V0aWxzL2NhbmNlbC5jCisrKyBiL3NyYy9mZV91dGls cy9jYW5jZWwuYwpAQCAtMyw3ICszLDcgQEAKICAqIFF1ZXJ5IGNhbmNlbGxhdGlvbiBzdXBwb3J0 IGZvciBmcm9udGVuZCBjb2RlCiAgKgogICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgU0lHSU5UL0N0 cmwtQyBoYW5kbGluZyBmb3IgZnJvbnRlbmQgdG9vbHMgdGhhdCBuZWVkIHRvCi0gKiBjYW5jZWwg cXVlcmllcyBvciBpbnRlcnJ1cHQgb3RoZXIgb3BlcmF0aW9ucy4gIEl0IHByb3ZpZGVzIHRocmVl CisgKiBjYW5jZWwgcXVlcmllcyBvciBpbnRlcnJ1cHQgb3RoZXIgb3BlcmF0aW9ucy4gIEl0IHBy b3ZpZGVzIGZvdXIKICAqIGluZGVwZW5kZW50IG1lY2hhbmlzbXMsIGFueSBjb21iaW5hdGlvbiBv ZiB3aGljaCBjYW4gYmUgdXNlZCBieSBhbgogICogYXBwbGljYXRpb246CiAgKgpAQCAtMTMsOSAr MTMsOSBAQAogICogICAgY2FsbGluZyBTZXRDYW5jZWxDb25uKCkgdG8gcmVnaXN0ZXIgdGhlIGNv bm5lY3Rpb24gdGhhdCBpcyAob3Igd2lsbCBiZSkKICAqICAgIHJ1bm5pbmcgdGhlIHF1ZXJ5LCBw cmlvciB0byB3YWl0aW5nIGZvciB0aGUgcmVzdWx0LiAgV2hlbiBTSUdJTlQvQ3RybC1DCiAgKiAg ICBpcyByZWNlaXZlZCwgYSBjYW5jZWwgcmVxdWVzdCBmb3IgdGhpcyBjb25uZWN0aW9uIHdpbGwg dGhlbiBiZSBzZW50IGZyb20KLSAqICAgIHRoZSBzaWduYWwgaGFuZGxlciAob24gV2luZG93cywg ZnJvbSBhIHNlcGFyYXRlIHRocmVhZCkuICBUaGF0IGluIHR1cm4KLSAqICAgIHdpbGwgdGhlbiAo YXNzdW1pbmcgYSBjby1vcGVyYXRpbmcgc2VydmVyKSBjYXVzZSB0aGUgc2VydmVyIHRvIGNhbmNl bAotICogICAgdGhlIHF1ZXJ5IGFuZCBzZW5kIGFuIGVycm9yIHRvIHRoZSB3YWl0aW5nIGNsaWVu dCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgKiAgICBhIHNlcGFyYXRlIHRocmVhZC4gIFRoYXQgaW4g dHVybiB3aWxsIHRoZW4gKGFzc3VtaW5nIGEgY28tb3BlcmF0aW5nCisgKiAgICBzZXJ2ZXIpIGNh dXNlIHRoZSBzZXJ2ZXIgdG8gY2FuY2VsIHRoZSBxdWVyeSBhbmQgc2VuZCBhbiBlcnJvciB0byB0 aGUKKyAqICAgIHdhaXRpbmcgY2xpZW50IG9uIHRoZSBtYWluIHRocmVhZC4KICAqICAgIFRoZSBj YW5jZWwgY29ubmVjdGlvbiBpcyBhIHByb2Nlc3Mtd2lkZSBnbG9iYWwsIHNvIG9ubHkgb25lIGNv bm5lY3Rpb24KICAqICAgIGNhbiBiZSB0aGUgY2FuY2VsIHRhcmdldCBhdCBhIHRpbWUuICBSZXNl dENhbmNlbENvbm4oKSBzaG91bGQgYmUgY2FsbGVkCiAgKiAgICB0byBkaXNhcm0gdGhlIG1lY2hh bmlzbSBhZ2FpbiBhZnRlciB0aGUgYmxvY2tpbmcgd2FpdCBoYXMgY29tcGxldGVkLgpAQCAtMjYs MTEgKzI2LDIxIEBACiAgKiAgICBub3QgYmxvY2tlZCAoaW5kZWZpbml0ZWx5KSwgYnV0IG5lZWRz IHRvIHRha2UgYW4gYWN0aW9uIHdoZW4gQ3RybC1DIGlzCiAgKiAgICBwcmVzc2VkLCBzdWNoIGFz IGJyZWFrIG91dCBvZiBhIGxvbmcgcnVubmluZyBsb29wLgogICoKLSAqIDMuIFNpZ25hbCBoYW5k bGVyIGNhbGxiYWNrIC0tIEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FuIGJlIHJlZ2lzdGVyZWQgd2l0 aAorICogMy4gVGhyZWFkIGhhbmRsZXIgY2FsbGJhY2sgLS0gQSBjYWxsYmFjayBmdW5jdGlvbiBj YW4gYmUgcmVnaXN0ZXJlZCB3aXRoCisgKiAgICBzZXR1cF9jYW5jZWxfaGFuZGxlcigpLCB3aGlj aCB3aWxsIHRoZW4gYmUgY2FsbGVkIHdoZW5ldmVyIFNJR0lOVCBpcworICogICAgcmVjZWl2ZWQu ICBVbmxpa2UgdGhlIHNpZ25hbCBoYW5kbGVyIGNhbGxiYWNrIGJlbG93LCBpdCBkb2VzIG5vdCBy dW4gaW4KKyAqICAgIHRoZSBzaWduYWwgaGFuZGxlciBidXQgaW4gdGhlIHNhbWUgc2VwYXJhdGUg dGhyZWFkIHRoYXQgc2VuZHMgdGhlIGNhbmNlbAorICogICAgcmVxdWVzdCAodGhlIGRlZGljYXRl ZCBjYW5jZWwgdGhyZWFkIG9uIFVuaXgsIHRoZSBjb25zb2xlIGhhbmRsZXIgdGhyZWFkCisgKiAg ICBvbiBXaW5kb3dzKSwgc28gaXQgbmVlZCBub3QgYmUgYXN5bmMtc2lnbmFsLXNhZmUuICBUaGF0 IHRocmVhZCBob2xkcworICogICAgY2FuY2VsX3RocmVhZF9sb2NrIHdoaWxlIHRoZSBjYWxsYmFj ayBydW5zLCBzbyBjb2RlIHNoYXJpbmcgZGF0YSB3aXRoIHRoZQorICogICAgY2FsbGJhY2sgc2hv dWxkIHRha2UgdGhlIHNhbWUgbG9jayB2aWEKKyAqICAgIExvY2tDYW5jZWxUaHJlYWQoKS9Vbmxv Y2tDYW5jZWxUaHJlYWQoKS4KKyAqCisgKiA0LiBTaWduYWwgaGFuZGxlciBjYWxsYmFjayAtLSBB IGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBiZSByZWdpc3RlcmVkIHdpdGgKICAqICAgIHNldHVwX2Nh bmNlbF9oYW5kbGVyKCksIHdoaWNoIHdpbGwgdGhlbiBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0 aGUKICAqICAgIHNpZ25hbCBoYW5kbGVyIHdoZW5ldmVyIFNJR0lOVCBpcyByZWNlaXZlZC4gIEJl Y2F1c2UgaXQgaXMgY2FsbGVkIGZyb20gYQogICogICAgc2lnbmFsIGhhbmRsZXIsIHRoZSBjYWxs YmFjayBmdW5jdGlvbiBtdXN0IGJlIGFzeW5jLXNpZ25hbC1zYWZlLiAgT24KLSAqICAgIFdpbmRv d3MsIGl0IGlzIGNhbGxlZCBmcm9tIGEgc2VwYXJhdGUgc2lnbmFsLWhhbmRsaW5nIHRocmVhZC4g IE5PVEU6IFRoZQorICogICAgV2luZG93cywgdGhpcyBjYWxsYmFjayBpcyBuZXZlciBjYWxsZWQu ICBOT1RFOiBUaGUKICAqICAgIGNhbGxiYWNrIGlzIGNhbGxlZCBBRlRFUiBzZXR0aW5nIENhbmNl bFJlcXVlc3RlZCBidXQgQkVGT1JFIHNlbmRpbmcgdGhlCiAgKiAgICBjYW5jZWwgcmVxdWVzdCB0 byB0aGUgc2VydmVyIChpZiBhcm1lZCBieSBTZXRDYW5jZWxDb25uKS4gIFRoaXMgbWVhbnMKICAq ICAgIHRoYXQgaWYgdGhlIGNhbGxiYWNrIGV4aXRzIG9yIGxvbmdqbXBzLCBubyBjYW5jZWwgcmVx dWVzdCB3aWxsIGJlIHNlbnQKQEAgLTQ2LDkgKzU2LDIxIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jl c19mZS5oIgogCisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKKyNp Zm5kZWYgV0lOMzIKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgor I2luY2x1ZGUgInB0aHJlYWQtd2luMzIuaCIKKyNlbHNlCisjaW5jbHVkZSA8cHRocmVhZC5oPgor I2VuZGlmCisKICNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbW1vbi9s b2dnaW5nLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvY2FuY2VsLmgiCiAjaW5jbHVkZSAiZmVfdXRp bHMvc3RyaW5nX3V0aWxzLmgiCiAKQEAgLTY2LDExICs4OCwxOSBAQAogCQkodm9pZCkgcmNfOyBc CiAJfSB3aGlsZSAoMCkKIAorCisvKgorICogQ2FuY2VsIGNvbm5lY3Rpb24gdGhhdCBzaG91bGQg YmUgdXNlZCB0byBzZW5kIGNhbmNlbCByZXF1ZXN0cy4KKyAqLworc3RhdGljIFBHY2FuY2VsQ29u biAqY2FuY2VsQ29ubiA9IE5VTEw7CisKIC8qCi0gKiBDb250YWlucyBhbGwgdGhlIGluZm9ybWF0 aW9uIG5lZWRlZCB0byBjYW5jZWwgYSBxdWVyeSBpc3N1ZWQgZnJvbQotICogYSBkYXRhYmFzZSBj b25uZWN0aW9uIHRvIHRoZSBiYWNrZW5kLgorICogTXV0ZXggaGVsZCBieSB0aGUgY2FuY2VsIHRo cmVhZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYW5jZWwgY2FsbGJhY2suCisgKiBTZXRDYW5j ZWxDb25uKCkvUmVzZXRDYW5jZWxDb25uKCkgb24gdGhlIG1haW4gdGhyZWFkIHRha2UgdGhpcyBs b2NrIHRvbywKKyAqIHNvIHRoZXkgd2lsbCB3YWl0IGZvciBhbnkgaW4tZmxpZ2h0IGNhbmNlbCB0 byBmaW5pc2ggYmVmb3JlIHJlcGxhY2luZyBvcgorICogZnJlZWluZyBjYW5jZWxDb25uLgogICov Ci1zdGF0aWMgUEdjYW5jZWwgKnZvbGF0aWxlIGNhbmNlbENvbm4gPSBOVUxMOworc3RhdGljIHB0 aHJlYWRfbXV0ZXhfdCBjYW5jZWxfdGhyZWFkX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJ WkVSOwogCiAvKgogICogUHJlZGV0ZXJtaW5lZCBsb2NhbGl6ZWQgZXJyb3Igc3RyaW5ncyAtLS0g bmVlZGVkIHRvIGF2b2lkIHRyeWluZwpAQCAtODgsMTY4ICsxMTgsMTgwIEBAIHN0YXRpYyBjb25z dCBjaGFyICpjYW5jZWxfbm90X3NlbnRfbXNnID0gTlVMTDsKICAqLwogdm9sYXRpbGUgc2lnX2F0 b21pY190IENhbmNlbFJlcXVlc3RlZCA9IGZhbHNlOwogCi0jaWZkZWYgV0lOMzIKLXN0YXRpYyBD UklUSUNBTF9TRUNUSU9OIGNhbmNlbENvbm5Mb2NrOwotI2VuZGlmCisvKgorICogU2lnbmFsIGhh bmRsZXIgY2FsbGJhY2ssIGNhbGxlZCBkaXJlY3RseSBmcm9tIHNpZ25hbCBoYW5kbGVyIGNvbnRl eHQuCisgKiBNdXN0IGJlIGFzeW5jLXNpZ25hbC1zYWZlLgorICovCitzdGF0aWMgdm9pZCAoKnNp Z25hbF9jYWxsYmFja19mbikgKHZvaWQpID0gTlVMTDsKIAogLyoKLSAqIEFkZGl0aW9uYWwgY2Fs bGJhY2sgZm9yIGNhbmNlbGxhdGlvbnMuCisgKiBDYW5jZWwgdGhyZWFkIGNhbGxiYWNrLCBjYWxs ZWQgZnJvbSB0aGUgY2FuY2VsIHRocmVhZCAoVW5peCkgb3IgY29uc29sZQorICogaGFuZGxlciAo V2luZG93cykgd2hlbiBhIGNhbmNlbCBzaWduYWwgaXMgcmVjZWl2ZWQuCiAgKi8KLXN0YXRpYyB2 b2lkICgqY2FuY2VsX2NhbGxiYWNrKSAodm9pZCkgPSBOVUxMOworc3RhdGljIHZvaWQgKCp0aHJl YWRfY2FsbGJhY2tfZm4pICh2b2lkKSA9IE5VTEw7CisKKyNpZm5kZWYgV0lOMzIKKy8qCisgKiBP biBVbml4LCB0aGUgU0lHSU5UIHNpZ25hbCBoYW5kbGVyIGNhbm5vdCBjYWxsIFBRY2FuY2VsQmxv Y2tpbmcoKSBkaXJlY3RseQorICogYmVjYXVzZSBpdCBpcyBub3QgYXN5bmMtc2lnbmFsLXNhZmUu ICBJbnN0ZWFkLCB3ZSB1c2UgYSBwaXBlIHRvIHdha2UgYQorICogZGVkaWNhdGVkIGNhbmNlbCB0 aHJlYWQ6IHRoZSBzaWduYWwgaGFuZGxlciB3cml0ZXMgYSBieXRlIHRvIHRoZSBwaXBlLCBhbmQK KyAqIHRoZSBjYW5jZWwgdGhyZWFkJ3MgYmxvY2tpbmcgcmVhZCgpIHJldHVybnMsIHRyaWdnZXJp bmcgdGhlIGFjdHVhbCBjYW5jZWwKKyAqIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQJY2FuY2Vs X3BpcGVbMl0gPSB7LTEsIC0xfTsKKyNlbmRpZgogCiAKIC8qCi0gKiBTZXRDYW5jZWxDb25uCisg KiBTZW5kIGEgY2FuY2VsIHJlcXVlc3QgdG8gdGhlIGNvbm5lY3Rpb24sIGlmIG9uZSBpcyBzZXQu CiAgKgotICogU2V0IGNhbmNlbENvbm4gdG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgZGF0YWJhc2Ug Y29ubmVjdGlvbi4KKyAqIENhbGxlZCBmcm9tIHRoZSBjYW5jZWwgdGhyZWFkIChVbml4KSBvciB0 aGUgY29uc29sZSBoYW5kbGVyIHRocmVhZAorICogKFdpbmRvd3MpLCBuZXZlciBmcm9tIHRoZSBz aWduYWwgaGFuZGxlciBpdHNlbGYuICBUaGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3Ig aG9sZGluZyBjYW5jZWxfdGhyZWFkX2xvY2suCiAgKi8KLXZvaWQKLVNldENhbmNlbENvbm4oUEdj b25uICpjb25uKQorc3RhdGljIHZvaWQKK1NlbmRDYW5jZWxSZXF1ZXN0KHZvaWQpCiB7Ci0JUEdj YW5jZWwgICAqb2xkQ2FuY2VsQ29ubjsKLQotI2lmZGVmIFdJTjMyCi0JRW50ZXJDcml0aWNhbFNl Y3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKLSNlbmRpZgorCVBHY2FuY2VsQ29ubiAqY2M7CiAKLQkv KiBGcmVlIHRoZSBvbGQgb25lIGlmIHdlIGhhdmUgb25lICovCi0Jb2xkQ2FuY2VsQ29ubiA9IGNh bmNlbENvbm47CisJY2MgPSBjYW5jZWxDb25uOworCWlmIChjYyA9PSBOVUxMKQorCQlyZXR1cm47 CiAKLQkvKiBiZSBzdXJlIGhhbmRsZV9zaWdpbnQgZG9lc24ndCB1c2UgcG9pbnRlciB3aGlsZSBm cmVlaW5nICovCi0JY2FuY2VsQ29ubiA9IE5VTEw7CisJd3JpdGVfc3RkZXJyKGNhbmNlbF9zZW50 X21zZyk7CiAKLQlpZiAob2xkQ2FuY2VsQ29ubiAhPSBOVUxMKQotCQlQUWZyZWVDYW5jZWwob2xk Q2FuY2VsQ29ubik7Ci0KLQljYW5jZWxDb25uID0gUFFnZXRDYW5jZWwoY29ubik7CisJaWYgKCFQ UWNhbmNlbEJsb2NraW5nKGNjKSkKKwl7CisJCWNoYXIJICAgKmVycm1zZyA9IFBRY2FuY2VsRXJy b3JNZXNzYWdlKGNjKTsKIAotI2lmZGVmIFdJTjMyCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNh bmNlbENvbm5Mb2NrKTsKLSNlbmRpZgorCQl3cml0ZV9zdGRlcnIoY2FuY2VsX25vdF9zZW50X21z Zyk7CisJCWlmIChlcnJtc2cpCisJCQl3cml0ZV9zdGRlcnIoZXJybXNnKTsKKwl9CisJLyogUmVz ZXQgZm9yIHBvc3NpYmxlIHJldXNlICovCisJUFFjYW5jZWxSZXNldChjYyk7CiB9CiAKKwogLyoK LSAqIFJlc2V0Q2FuY2VsQ29ubgorICogSGVscGVyIHRvIHJlcGxhY2UgY2FuY2VsQ29ubiB3aXRo IGEgbmV3IHZhbHVlLgogICoKLSAqIEZyZWUgdGhlIGN1cnJlbnQgY2FuY2VsIGNvbm5lY3Rpb24s IGlmIGFueSwgYW5kIHNldCB0byBOVUxMLgorICogVGFrZXMgY2FuY2VsX3RocmVhZF9sb2NrLCB3 aGljaCBhbHNvIHdhaXRzIGZvciBhbnkgaW4tZmxpZ2h0IGNhbmNlbAorICogY2FsbGJhY2sgdG8g ZmluaXNoLCBzaW5jZSB0aGUgY2FuY2VsIHRocmVhZCBob2xkcyB0aGUgc2FtZSBsb2NrLgogICov Ci12b2lkCi1SZXNldENhbmNlbENvbm4odm9pZCkKK3N0YXRpYyB2b2lkCitTZXRDYW5jZWxDb25u SW50ZXJuYWwoUEdjYW5jZWxDb25uICpuZXdDYW5jZWxDb25uKQogewotCVBHY2FuY2VsICAgKm9s ZENhbmNlbENvbm47Ci0KLSNpZmRlZiBXSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZjYW5j ZWxDb25uTG9jayk7Ci0jZW5kaWYKKwlQR2NhbmNlbENvbm4gKm9sZENhbmNlbENvbm47CiAKKwlM b2NrQ2FuY2VsVGhyZWFkKCk7CiAJb2xkQ2FuY2VsQ29ubiA9IGNhbmNlbENvbm47Ci0KLQkvKiBi ZSBzdXJlIGhhbmRsZV9zaWdpbnQgZG9lc24ndCB1c2UgcG9pbnRlciB3aGlsZSBmcmVlaW5nICov Ci0JY2FuY2VsQ29ubiA9IE5VTEw7CisJY2FuY2VsQ29ubiA9IG5ld0NhbmNlbENvbm47CisJVW5s b2NrQ2FuY2VsVGhyZWFkKCk7CiAKIAlpZiAob2xkQ2FuY2VsQ29ubiAhPSBOVUxMKQotCQlQUWZy ZWVDYW5jZWwob2xkQ2FuY2VsQ29ubik7Ci0KLSNpZmRlZiBXSU4zMgotCUxlYXZlQ3JpdGljYWxT ZWN0aW9uKCZjYW5jZWxDb25uTG9jayk7Ci0jZW5kaWYKKwkJUFFjYW5jZWxGaW5pc2gob2xkQ2Fu Y2VsQ29ubik7CiB9CiAKLQogLyoKLSAqIENvZGUgdG8gc3VwcG9ydCBxdWVyeSBjYW5jZWxsYXRp b24KLSAqCi0gKiBOb3RlIHRoYXQgc2VuZGluZyB0aGUgY2FuY2VsIGRpcmVjdGx5IGZyb20gdGhl IHNpZ25hbCBoYW5kbGVyIGlzIHNhZmUKLSAqIGJlY2F1c2UgUFFjYW5jZWwoKSBpcyB3cml0dGVu IHRvIG1ha2UgaXQgc28uICBXZSB1c2Ugd3JpdGUoKSB0byByZXBvcnQKLSAqIHRvIHN0ZGVyciBi ZWNhdXNlIGl0J3MgYmV0dGVyIHRvIHVzZSBzaW1wbGUgZmFjaWxpdGllcyBpbiBhIHNpZ25hbAot ICogaGFuZGxlci4KKyAqIFNldENhbmNlbENvbm4KICAqCi0gKiBPbiBXaW5kb3dzLCB0aGUgc2ln bmFsIGNhbmNlbGluZyBoYXBwZW5zIG9uIGEgc2VwYXJhdGUgdGhyZWFkLCBiZWNhdXNlCi0gKiB0 aGF0J3MgaG93IFNldENvbnNvbGVDdHJsSGFuZGxlciB3b3Jrcy4gIFRoZSBQUWNhbmNlbCBmdW5j dGlvbiBpcyBzYWZlCi0gKiBmb3IgdGhpcyAodW5saWtlIFBRcmVxdWVzdENhbmNlbCkuICBIb3dl dmVyLCBhIENSSVRJQ0FMX1NFQ1RJT04gaXMgcmVxdWlyZWQKLSAqIHRvIHByb3RlY3QgdGhlIFBH Y2FuY2VsIHN0cnVjdHVyZSBhZ2FpbnN0IGJlaW5nIGNoYW5nZWQgd2hpbGUgdGhlIHNpZ25hbAot ICogdGhyZWFkIGlzIHVzaW5nIGl0LgorICogU2V0IGNhbmNlbENvbm4gdG8gcG9pbnQgdG8gYSBj YW5jZWwgY29ubmVjdGlvbiBmb3IgdGhlIGdpdmVuIGRhdGFiYXNlCisgKiBjb25uZWN0aW9uLiBU aGlzIGNyZWF0ZXMgYSBuZXcgUEdjYW5jZWxDb25uIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VuZAor ICogY2FuY2VsIHJlcXVlc3RzLgogICovCi0KLSNpZm5kZWYgV0lOMzIKK3ZvaWQKK1NldENhbmNl bENvbm4oUEdjb25uICpjb25uKQoreworCVNldENhbmNlbENvbm5JbnRlcm5hbChQUWNhbmNlbENy ZWF0ZShjb25uKSk7Cit9CiAKIC8qCi0gKiBoYW5kbGVfc2lnaW50CisgKiBSZXNldENhbmNlbENv bm4KICAqCi0gKiBIYW5kbGUgaW50ZXJydXB0IHNpZ25hbHMgYnkgY2FuY2VsaW5nIHRoZSBjdXJy ZW50IGNvbW1hbmQsIGlmIGNhbmNlbENvbm4KLSAqIGlzIHNldC4KKyAqIENsZWFyIGNhbmNlbENv bm4sIHByZXZlbnRpbmcgYW55IHBlbmRpbmcgY2FuY2VsIGZyb20gYmVpbmcgc2VudC4KKyAqIFdh aXRzIGZvciBhbnkgaW4tZmxpZ2h0IGNhbmNlbCByZXF1ZXN0IHRvIGNvbXBsZXRlIGZpcnN0Lgog ICovCi1zdGF0aWMgdm9pZAotaGFuZGxlX3NpZ2ludChTSUdOQUxfQVJHUykKK3ZvaWQKK1Jlc2V0 Q2FuY2VsQ29ubih2b2lkKQogewotCWNoYXIJCWVycmJ1ZlsyNTZdOworCVNldENhbmNlbENvbm5J bnRlcm5hbChOVUxMKTsKK30KIAotCUNhbmNlbFJlcXVlc3RlZCA9IHRydWU7CiAKLQlpZiAoY2Fu Y2VsX2NhbGxiYWNrICE9IE5VTEwpCi0JCWNhbmNlbF9jYWxsYmFjaygpOworLyoKKyAqIExvY2tD YW5jZWxUaHJlYWQgLyBVbmxvY2tDYW5jZWxUaHJlYWQKKyAqCisgKiBBY3F1aXJlIG9yIHJlbGVh c2UgY2FuY2VsX3RocmVhZF9sb2NrLiAgRXh0ZXJuYWwgY2FsbGVycyAoZS5nLiBwZ19kdW1wKQor ICogdXNlIHRoZXNlIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEgdGhhdCB0aGUgY2FuY2VsLXRocmVh ZCBjYWxsYmFjayBhbHNvCisgKiBhY2Nlc3Nlcywgd2l0aG91dCBleHBvc2luZyB0aGUgbXV0ZXgg ZGlyZWN0bHkuCisgKi8KK3ZvaWQKK0xvY2tDYW5jZWxUaHJlYWQodm9pZCkKK3sKKwlwdGhyZWFk X211dGV4X2xvY2soJmNhbmNlbF90aHJlYWRfbG9jayk7Cit9CiAKLQkvKiBTZW5kIFF1ZXJ5Q2Fu Y2VsIGlmIHdlIGFyZSBwcm9jZXNzaW5nIGEgZGF0YWJhc2UgcXVlcnkgKi8KLQlpZiAoY2FuY2Vs Q29ubiAhPSBOVUxMKQotCXsKLQkJaWYgKFBRY2FuY2VsKGNhbmNlbENvbm4sIGVycmJ1Ziwgc2l6 ZW9mKGVycmJ1ZikpKQotCQl7Ci0JCQl3cml0ZV9zdGRlcnIoY2FuY2VsX3NlbnRfbXNnKTsKLQkJ fQotCQllbHNlCi0JCXsKLQkJCXdyaXRlX3N0ZGVycihjYW5jZWxfbm90X3NlbnRfbXNnKTsKLQkJ CXdyaXRlX3N0ZGVycihlcnJidWYpOwotCQl9Ci0JfQordm9pZAorVW5sb2NrQ2FuY2VsVGhyZWFk KHZvaWQpCit7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmNhbmNlbF90aHJlYWRfbG9jayk7CiB9 CiAKKyNpZm5kZWYgV0lOMzIKIC8qCi0gKiBzZXR1cF9jYW5jZWxfaGFuZGxlcgorICogUmVzZXRD YW5jZWxBZnRlckZvcmsKKyAqCisgKiBSZXNldCBjYW5jZWwgbW9kdWxlIHN0YXRlIGFmdGVyIGZv cmsoKS4gVGhyZWFkcyBkb24ndCBzdXJ2aXZlIGZvcmsoKSwgc28gdGhlCisgKiBjYW5jZWwgdGhy ZWFkIGFuZCBpdHMgcGlwZSBhcmUgZ29uZS4gVGhlIG11dGV4IG1heSBoYXZlIGJlZW4gaGVsZCBi eSB0aGUKKyAqIGNhbmNlbCB0aHJlYWQgYXQgZm9yayB0aW1lLCBzbyB3ZSBtdXN0IHJlaW5pdGlh bGl6ZSBpdCByYXRoZXIgdGhhbiB0cnlpbmcgdG8KKyAqIHVubG9jayBpdC4gIGNhbmNlbENvbm4g aXMgTlVMTGVkIHdpdGhvdXQgZnJlZWluZyBiZWNhdXNlIHRoZSBwYXJlbnQgcHJvY2VzcworICog b3ducyB0aGUgdW5kZXJseWluZyBvYmplY3QuICBUaGUgU0lHSU5UIGhhbmRsZXIgaXMgcmVzZXQg dG8gU0lHX0RGTCBzbyB0aGF0CisgKiBhIHNpZ25hbCBhcnJpdmluZyBiZWZvcmUgc2V0dXBfY2Fu Y2VsX2hhbmRsZXIoKSBpcyBjYWxsZWQgYWdhaW4gZG9lc24ndCB0cnkKKyAqIHRvIHdyaXRlIHRv IHRoZSBjbG9zZWQgcGlwZS4KICAqCi0gKiBSZWdpc3RlciBxdWVyeSBjYW5jZWxsYXRpb24gY2Fs bGJhY2sgZm9yIFNJR0lOVC4KKyAqIFRoZSBjaGlsZCB3aWxsIHNldCB1cCBhIGZyZXNoIGNhbmNl bCB0aHJlYWQgd2hlbiBpdCBsYXRlciBjYWxscworICogc2V0dXBfY2FuY2VsX2hhbmRsZXIoKS4K ICAqLwogdm9pZAotc2V0dXBfY2FuY2VsX2hhbmRsZXIodm9pZCAoKnF1ZXJ5X2NhbmNlbF9jYWxs YmFjaykgKHZvaWQpKQorUmVzZXRDYW5jZWxBZnRlckZvcmsodm9pZCkKIHsKLQljYW5jZWxfY2Fs bGJhY2sgPSBxdWVyeV9jYW5jZWxfY2FsbGJhY2s7Ci0JY2FuY2VsX3NlbnRfbXNnID0gXygiQ2Fu Y2VsIHJlcXVlc3Qgc2VudFxuIik7Ci0JY2FuY2VsX25vdF9zZW50X21zZyA9IF8oIkNvdWxkIG5v dCBzZW5kIGNhbmNlbCByZXF1ZXN0OiAiKTsKKwljbG9zZShjYW5jZWxfcGlwZVswXSk7CisJY2xv c2UoY2FuY2VsX3BpcGVbMV0pOworCWNhbmNlbF9waXBlWzBdID0gY2FuY2VsX3BpcGVbMV0gPSAt MTsKIAotCXBxc2lnbmFsKFNJR0lOVCwgaGFuZGxlX3NpZ2ludCk7Ci19CisJcHRocmVhZF9tdXRl eF9pbml0KCZjYW5jZWxfdGhyZWFkX2xvY2ssIE5VTEwpOworCisJY2FuY2VsQ29ubiA9IE5VTEw7 CisJQ2FuY2VsUmVxdWVzdGVkID0gZmFsc2U7CiAKLSNlbHNlCQkJCQkJCS8qIFdJTjMyICovCisJ cHFzaWduYWwoU0lHSU5ULCBQR19TSUdfREZMKTsKK30KKyNlbmRpZgogCisjaWZkZWYgV0lOMzIK Ky8qCisgKiBDb25zb2xlIGNvbnRyb2wgaGFuZGxlciBmb3IgV2luZG93cy4KKyAqCisgKiBUaGlz IHJ1bnMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgY3JlYXRlZCBieSB0aGUgT1MsIHNvIHdlIGNhbiBz YWZlbHkgY2FsbAorICogdGhlIGJsb2NraW5nIGNhbmNlbCBBUEkgZGlyZWN0bHkuCisgKi8KIHN0 YXRpYyBCT09MIFdJTkFQSQogY29uc29sZUhhbmRsZXIoRFdPUkQgZHdDdHJsVHlwZSkKIHsKLQlj aGFyCQllcnJidWZbMjU2XTsKLQogCWlmIChkd0N0cmxUeXBlID09IENUUkxfQ19FVkVOVCB8fAog CQlkd0N0cmxUeXBlID09IENUUkxfQlJFQUtfRVZFTlQpCiAJewogCQlDYW5jZWxSZXF1ZXN0ZWQg PSB0cnVlOwogCi0JCWlmIChjYW5jZWxfY2FsbGJhY2sgIT0gTlVMTCkKLQkJCWNhbmNlbF9jYWxs YmFjaygpOworCQlMb2NrQ2FuY2VsVGhyZWFkKCk7CiAKLQkJLyogU2VuZCBRdWVyeUNhbmNlbCBp ZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIGRhdGFiYXNlIHF1ZXJ5ICovCi0JCUVudGVyQ3JpdGljYWxT ZWN0aW9uKCZjYW5jZWxDb25uTG9jayk7Ci0JCWlmIChjYW5jZWxDb25uICE9IE5VTEwpCi0JCXsK LQkJCWlmIChQUWNhbmNlbChjYW5jZWxDb25uLCBlcnJidWYsIHNpemVvZihlcnJidWYpKSkKLQkJ CXsKLQkJCQl3cml0ZV9zdGRlcnIoY2FuY2VsX3NlbnRfbXNnKTsKLQkJCX0KLQkJCWVsc2UKLQkJ CXsKLQkJCQl3cml0ZV9zdGRlcnIoY2FuY2VsX25vdF9zZW50X21zZyk7Ci0JCQkJd3JpdGVfc3Rk ZXJyKGVycmJ1Zik7Ci0JCQl9Ci0JCX0KKwkJU2VuZENhbmNlbFJlcXVlc3QoKTsKIAotCQlMZWF2 ZUNyaXRpY2FsU2VjdGlvbigmY2FuY2VsQ29ubkxvY2spOworCQlpZiAodGhyZWFkX2NhbGxiYWNr X2ZuICE9IE5VTEwpCisJCQl0aHJlYWRfY2FsbGJhY2tfZm4oKTsKKworCQlVbmxvY2tDYW5jZWxU aHJlYWQoKTsKIAogCQlyZXR1cm4gVFJVRTsKIAl9CkBAIC0yNTgsMTYgKzMwMCwxNjkgQEAgY29u c29sZUhhbmRsZXIoRFdPUkQgZHdDdHJsVHlwZSkKIAkJcmV0dXJuIEZBTFNFOwogfQogCisjZWxz ZQkJCQkJCQkvKiAhV0lOMzIgKi8KKworLyoKKyAqIFNpZ25hbCBoYW5kbGVyIHRoYXQgc2V0dXBf Y2FuY2VsX2hhbmRsZXIgY29uZmlndXJlcyBmb3IgU0lHSU5ULiBFeHBvc2VkIHNvCisgKiBvdGhl ciBzaWduYWxzIHRoYW4gU0lHSU5UIGNhbiB1c2UgaXQgaWYgZGVzaXJlZC4KKyAqLwogdm9pZAot c2V0dXBfY2FuY2VsX2hhbmRsZXIodm9pZCAoKmNhbGxiYWNrKSAodm9pZCkpCitDYW5jZWxTaWdu YWxIYW5kbGVyKFNJR05BTF9BUkdTKQogewotCWNhbmNlbF9jYWxsYmFjayA9IGNhbGxiYWNrOwot CWNhbmNlbF9zZW50X21zZyA9IF8oIkNhbmNlbCByZXF1ZXN0IHNlbnRcbiIpOwotCWNhbmNlbF9u b3Rfc2VudF9tc2cgPSBfKCJDb3VsZCBub3Qgc2VuZCBjYW5jZWwgcmVxdWVzdDogIik7CisJaW50 CQkJc2F2ZV9lcnJubyA9IGVycm5vOwogCi0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmY2Fu Y2VsQ29ubkxvY2spOworCUNhbmNlbFJlcXVlc3RlZCA9IHRydWU7CiAKLQlTZXRDb25zb2xlQ3Ry bEhhbmRsZXIoY29uc29sZUhhbmRsZXIsIFRSVUUpOworCWlmIChzaWduYWxfY2FsbGJhY2tfZm4g IT0gTlVMTCkKKwkJc2lnbmFsX2NhbGxiYWNrX2ZuKCk7CisKKwkvKiBXYWtlIHVwIHRoZSBjYW5j ZWwgdGhyZWFkICovCisJaWYgKGNhbmNlbF9waXBlWzFdID49IDApCisJeworCQljaGFyCQljID0g MTsKKwkJaW50CQkJcmMgPSB3cml0ZShjYW5jZWxfcGlwZVsxXSwgJmMsIDEpOworCisJCSh2b2lk KSByYzsKKwl9CisKKwllcnJubyA9IHNhdmVfZXJybm87CiB9CiAKLSNlbmRpZgkJCQkJCQkvKiBX SU4zMiAqLworLyoKKyAqIFRocmVhZCBtYWluIGZ1bmN0aW9uIGZvciBjcmVhdGVfY2FuY2VsX3Ro cmVhZC4gIFdhaXRzIGZvciB0aGUgc2lnbmFsCisgKiBoYW5kbGVyIHRvIHdyaXRlIGEgYnl0ZSB0 byB0aGUgcGlwZSwgdGhlbiBjYWxscyB0aGUgY2FuY2VsIGNhbGxiYWNrLgorICovCitzdGF0aWMg dm9pZCAqCitjYW5jZWxfdGhyZWFkX2xvb3Aodm9pZCAqYXJnKQoreworCWZvciAoOzspCisJewor CQljaGFyCQlidWZbMTZdOworCQlzc2l6ZV90CQlyYzsKKworCQlyYyA9IHJlYWQoY2FuY2VsX3Bp cGVbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAocmMgPD0gMCkKKwkJeworCQkJaWYgKGVy cm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJLyogUGlwZSBjbG9zZWQgb3IgZXJyb3Ig LSBleGl0IHRocmVhZCAqLworCQkJYnJlYWs7CisJCX0KKworCQlMb2NrQ2FuY2VsVGhyZWFkKCk7 CisKKwkJU2VuZENhbmNlbFJlcXVlc3QoKTsKKworCQlpZiAodGhyZWFkX2NhbGxiYWNrX2ZuICE9 IE5VTEwpCisJCQl0aHJlYWRfY2FsbGJhY2tfZm4oKTsKKworCQkvKgorCQkgKiBEcmFpbiBhbnkg cGVuZGluZyBieXRlcyBmcm9tIHRoZSBjYW5jZWwgcGlwZSwgc28gdGhhdCBzaWduYWxzCisJCSAq IHJlY2VpdmVkIHdoaWxlIHdlIHdlcmUgYWxyZWFkeSBoYW5kbGluZyBhIGNhbmNlbCBkb24ndCBj YXVzZSB1cyB0bworCQkgKiB3YWtlIHVwIGFnYWluIGFuZCBjYW5jZWwgYSBzdWJzZXF1ZW50IHF1 ZXJ5LgorCQkgKi8KKwkJZmNudGwoY2FuY2VsX3BpcGVbMF0sIEZfU0VURkwsIE9fTk9OQkxPQ0sp OworCQl3aGlsZSAocmVhZChjYW5jZWxfcGlwZVswXSwgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQor CQkJOwkJCQkJLyogbG9vcCB1bnRpbCBwaXBlIGlzIGZ1bGx5IGRyYWluZWQgKi8KKwkJZmNudGwo Y2FuY2VsX3BpcGVbMF0sIEZfU0VURkwsIDApOworCisJCVVubG9ja0NhbmNlbFRocmVhZCgpOwor CX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogY3JlYXRlX2NhbmNlbF90aHJlYWQKKyAq CisgKiBDcmVhdGUgYSBkZWRpY2F0ZWQgdGhyZWFkIGFuZCBhc3NvY2lhdGVkIHBpcGUgZm9yIGFz eW5jLXNpZ25hbC1zYWZlIGNhbmNlbAorICogaGFuZGxpbmcuICBUaGUgcGlwZSBhbGxvd3Mgc2ln bmFsIGhhbmRsZXJzICh3aGljaCBjYW5ub3Qgc2FmZWx5IGNhbGwgY29tcGxleAorICogZnVuY3Rp b25zKSB0byB3YWtlIHVwIHRoZSB0aHJlYWQgYnkgd3JpdGluZyBhIGJ5dGUuCisgKgorICogVGhl IHdyaXRlIGVuZCBvZiB0aGUgcGlwZSBpcyBzZXQgbm9uLWJsb2NraW5nIHNvIHNpZ25hbCBoYW5k bGVycyBuZXZlcgorICogYmxvY2suICBUaGUgdGhyZWFkIGlzIGNyZWF0ZWQgd2l0aCBhbGwgc2ln bmFscyBibG9ja2VkIHNvIHRoYXQgc2lnbmFscyBhcmUKKyAqIGFsd2F5cyBkZWxpdmVyZWQgdG8g dGhlIG1haW4gdGhyZWFkLiAgVGhlIHRocmVhZCBydW5zIHVudGlsIHByb2Nlc3MgZXhpdC4KKyAq IE5vIGhhbmRsZSBpcyByZXR1cm5lZCBiZWNhdXNlIGN1cnJlbnRseSBubyBjYWxsZXJzIG5lZWQg dG8gam9pbiBpdC4KKyAqLworc3RhdGljIHZvaWQKK2NyZWF0ZV9jYW5jZWxfdGhyZWFkKHZvaWQp Cit7CisJc2lnc2V0X3QJc2F2ZV9zZXQ7CisJc2lnc2V0X3QJYmxvY2tfc2V0OworCXB0aHJlYWRf dAl0aHJlYWQ7CisJaW50CQkJcmM7CisKKwlpZiAocGlwZShjYW5jZWxfcGlwZSkgPCAwKQorCXsK KwkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIHBpcGUgZm9yIGNhbmNlbDogJW0iKTsK KwkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIE1ha2UgdGhlIHdyaXRlIGVuZCBub24tYmxvY2tp bmcsIHNvIHRoYXQgdGhlIHNpZ25hbCBoYW5kbGVyIHdvbid0IGJsb2NrCisJICogaWYgdGhlIHBp cGUgYnVmZmVyIGlzIGZ1bGwgKHdoaWNoIGlzIHZlcnkgdW5saWtlbHkgaW4gcHJhY3RpY2UgYnV0 CisJICogcG9zc2libGUgaW4gdGhlb3J5KS4KKwkgKi8KKwlmY250bChjYW5jZWxfcGlwZVsxXSwg Rl9TRVRGTCwgT19OT05CTE9DSyk7CisKKwkvKgorCSAqIEJsb2NrIGFsbCBzaWduYWxzIGJlZm9y ZSBjcmVhdGluZyB0aGUgY2FuY2VsIHRocmVhZCwgc28gdGhhdCBpdAorCSAqIGluaGVyaXRzIGEg c2lnbmFsIG1hc2sgd2l0aCBhbGwgc2lnbmFscyBibG9ja2VkLiAgVGhpcyBlbnN1cmVzIHNpZ25h bHMKKwkgKiBhcmUgYWx3YXlzIGRlbGl2ZXJlZCB0byB0aGUgbWFpbiB0aHJlYWQsIHdoaWNoIG1h dHRlcnMgYmVjYXVzZSBzb21lCisJICogc2lnbmFsX2NhbGxiYWNrIGZ1bmN0aW9ucyBjYWxsIHNp Z2xvbmdqbXAoKSBiYWNrIHRvIGEgc2lnc2V0am1wKCkgb24KKwkgKiB0aGUgbWFpbiB0aHJlYWQn cyBzdGFjaywgc3BlY2lmaWNhbGx5IHRoZSBwc3FsX2NhbmNlbF9jYWxsYmFjaworCSAqIGZ1bmN0 aW9uLgorCSAqLworCXNpZ2ZpbGxzZXQoJmJsb2NrX3NldCk7CisJcHRocmVhZF9zaWdtYXNrKFNJ R19CTE9DSywgJmJsb2NrX3NldCwgJnNhdmVfc2V0KTsKKworCXJjID0gcHRocmVhZF9jcmVhdGUo JnRocmVhZCwgTlVMTCwgY2FuY2VsX3RocmVhZF9sb29wLCBOVUxMKTsKKworCXB0aHJlYWRfc2ln bWFzayhTSUdfU0VUTUFTSywgJnNhdmVfc2V0LCBOVUxMKTsKKworCWlmIChyYyAhPSAwKQorCXsK KwkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIGNhbmNlbCB0aHJlYWQ6ICVzIiwgc3Ry ZXJyb3IocmMpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlwdGhyZWFkX2RldGFjaCh0aHJlYWQpOwor fQorCisjZW5kaWYJCQkJCQkJLyogIVdJTjMyICovCisKKworLyoKKyAqIHNldHVwX2NhbmNlbF9o YW5kbGVyCisgKgorICogU2V0IHVwIHNpZ25hbCBoYW5kbGluZyBmb3IgU0lHSU5UIChVbml4KSBv ciBjb25zb2xlIGV2ZW50cyAoV2luZG93cykgdG8KKyAqIHBlcmZvcm0gY2FuY2VsIGFjdGlvbnMu CisgKgorICogc2lnbmFsX2NhbGxiYWNrIGlzIGludm9rZWQgZGlyZWN0bHkgZnJvbSB0aGUgc2ln bmFsIGhhbmRsZXIgY29udGV4dCBvbgorICogZXZlcnkgU0lHSU5UIChvbiBVbml4KSwgc28gaXQg bXVzdCBiZSBhc3luYy1zaWduYWwtc2FmZS4gIENhbiBiZSBOVUxMLgorICogT24gV2luZG93cywg c2lnbmFsIGhhbmRsZXJzIGRvbid0IGV4aXN0ICh0aGUgY29uc29sZSBoYW5kbGVyIHJ1bnMgaW4g YQorICogc2VwYXJhdGUgdGhyZWFkKSwgc28gc2lnbmFsX2NhbGxiYWNrIG11c3QgYmUgTlVMTC4K KyAqCisgKiB0aHJlYWRfY2FsbGJhY2sgaXMgaW52b2tlZCBmcm9tIGEgZGVkaWNhdGVkIGNhbmNl bCB0aHJlYWQgKFVuaXgpIG9yIHRoZQorICogY29uc29sZSBoYW5kbGVyIHRocmVhZCAoV2luZG93 cykgd2hlbiBhIHNpZ25hbCBpcyByZWNlaXZlZC4gQ2FuIGJlIE5VTEwuCisgKi8KK3ZvaWQKK3Nl dHVwX2NhbmNlbF9oYW5kbGVyKHZvaWQgKCpzaWduYWxfY2FsbGJhY2spICh2b2lkKSwKKwkJCQkJ IHZvaWQgKCp0aHJlYWRfY2FsbGJhY2spICh2b2lkKSkKK3sKKyNpZmRlZiBXSU4zMgorCUFzc2Vy dChzaWduYWxfY2FsbGJhY2sgPT0gTlVMTCk7CisjZW5kaWYKKworCXNpZ25hbF9jYWxsYmFja19m biA9IHNpZ25hbF9jYWxsYmFjazsKKwl0aHJlYWRfY2FsbGJhY2tfZm4gPSB0aHJlYWRfY2FsbGJh Y2s7CisJY2FuY2VsX3NlbnRfbXNnID0gXygiU2VuZGluZyBjYW5jZWwgcmVxdWVzdFxuIik7CisJ Y2FuY2VsX25vdF9zZW50X21zZyA9IF8oIkNvdWxkIG5vdCBzZW5kIGNhbmNlbCByZXF1ZXN0OiAi KTsKKworI2lmZGVmIFdJTjMyCisJU2V0Q29uc29sZUN0cmxIYW5kbGVyKGNvbnNvbGVIYW5kbGVy LCBUUlVFKTsKKyNlbHNlCisJY3JlYXRlX2NhbmNlbF90aHJlYWQoKTsKKwlwcXNpZ25hbChTSUdJ TlQsIENhbmNlbFNpZ25hbEhhbmRsZXIpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9mZV91dGlscy9jYW5jZWwuaCBiL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL2NhbmNlbC5oCmlu ZGV4IGUxNzRmYjgzYjkyLi5mZWIxOTcwZDM3MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZmVf dXRpbHMvY2FuY2VsLmgKKysrIGIvc3JjL2luY2x1ZGUvZmVfdXRpbHMvY2FuY2VsLmgKQEAgLTIz LDEwICsyMywxNSBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENh bmNlbFJlcXVlc3RlZDsKIGV4dGVybiB2b2lkIFNldENhbmNlbENvbm4oUEdjb25uICpjb25uKTsK IGV4dGVybiB2b2lkIFJlc2V0Q2FuY2VsQ29ubih2b2lkKTsKIAotLyoKLSAqIEEgY2FsbGJhY2sg Y2FuIGJlIG9wdGlvbmFsbHkgc2V0IHVwIHRvIGJlIGNhbGxlZCBhdCBjYW5jZWxsYXRpb24KLSAq IHRpbWUuCi0gKi8KLWV4dGVybiB2b2lkIHNldHVwX2NhbmNlbF9oYW5kbGVyKHZvaWQgKCpxdWVy eV9jYW5jZWxfY2FsbGJhY2spICh2b2lkKSk7CitleHRlcm4gdm9pZCBzZXR1cF9jYW5jZWxfaGFu ZGxlcih2b2lkICgqc2lnbmFsX2NhbGxiYWNrKSAodm9pZCksCisJCQkJCQkJCSB2b2lkICgqdGhy ZWFkX2NhbGxiYWNrKSAodm9pZCkpOworCitleHRlcm4gdm9pZCBMb2NrQ2FuY2VsVGhyZWFkKHZv aWQpOworZXh0ZXJuIHZvaWQgVW5sb2NrQ2FuY2VsVGhyZWFkKHZvaWQpOworCisjaWZuZGVmIFdJ TjMyCitleHRlcm4gdm9pZCBSZXNldENhbmNlbEFmdGVyRm9yayh2b2lkKTsKK2V4dGVybiB2b2lk IENhbmNlbFNpZ25hbEhhbmRsZXIoU0lHTkFMX0FSR1MpOworI2VuZGlmCiAKICNlbmRpZgkJCQkJ CQkvKiBDQU5DRUxfSCAqLwotLSAKMi41NC4wCgo= --126885df0b67bb59e3c3231088c472cca7a1dc10a8f799be92df1cfb7043--