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 1vVE4N-00GejK-2s for pgadmin-hackers@arkaria.postgresql.org; Mon, 15 Dec 2025 19:17:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vVE4L-001vst-2h for pgadmin-hackers@arkaria.postgresql.org; Mon, 15 Dec 2025 19:17:18 +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 1vVE4L-001vsl-1Q for pgadmin-hackers@lists.postgresql.org; Mon, 15 Dec 2025 19:17:18 +0000 Received: from mail-ej1-x630.google.com ([2a00:1450:4864:20::630]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vVE4J-000uYf-0m for pgadmin-hackers@lists.postgresql.org; Mon, 15 Dec 2025 19:17:17 +0000 Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-b76b5afdf04so655372666b.1 for ; Mon, 15 Dec 2025 11:17:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765826232; x=1766431032; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=+kkO3Os33l/umnpTkyiub3KQEg1Lk6+K2IN9MeonGKU=; b=ISVrqIyqclYTTxFQV805qJ302Vr7UzeB9uJNiwsasylof7fxwBuXPcdKuC53nZ5s4v q20jWm/PBgN3lEGBdV4CR9q1t+C5rpA6rhqh/YCLbjjNMW1QWAMEjNAb3coaU3umpjsd RPS6EN3HC15kw82wWGW0x6y2ahLFUxrFl3y2XOFDRwKsW3q9VAlP8CINv7mLz+COn26s QFj0bSfMEfvfXGeMBPmAkismu2GePQbnOCaw4QEwMeXEhR2yTyX+5QOwinpiRPT/5rHK EgjNUHRnfZLA3oMacjWon4icE/Skezzueo5PuQO5auCCs/hYCL0WYc+gdLUzKlVlAkxa zBag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765826232; x=1766431032; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+kkO3Os33l/umnpTkyiub3KQEg1Lk6+K2IN9MeonGKU=; b=mdbi0CyJknFMfhkGnRKcTwPGxRcUz2iZtvfwSOv/6mS8fav9BJWUzNF9Oyt3BOnHxK +jSv96IAyyUG8WLlgoeAQW+XTVEeYnztPwKZ/PRFnfwACCC2/7ghuJ157P9Th2mWLZ46 7l0IK4+Hz3YleG6HxHTCcNzMZVkhOFo3BRxlMOXQ/NjdA5K/Evz+XZETKK4uJW4w8DEh PmAQpBc5XszOyhXfr4S0RvvsTAbo4huc9/B6oaf9X5hHzToFa2qg9BOsLQQ85K+Q15hd GkzY5C5aiTWYOUYvNZsgFWmKvK5zUkQ5QmujakHie9O3m2PkiKO+Xi113yjY1FTEMMFH T7Sw== X-Gm-Message-State: AOJu0YwphVu2rpmhgxkEv6jZBK+c6I0d1BWWl4CTagIlIjuBuLxi2fXO hk9SpnHazlQBFs/ZnvYXXiqYzaN63dtlkQEpeG6D366r5saeLYvFccP8WIEOZ7wEaHpQosKfnY8 gyImQnbxPILCtlqtChN4MERUIayS5cgn4tQ== X-Gm-Gg: AY/fxX6XI4wcFdaMewnDjbYiMsH00utYPFsbEAqKdkOwx+623zjnkoDQ8j4QgSj5Zjt 7MaUoxUOvfbU7E/UlISjrRQSENUP607+46JxGEhSiW/1yOXd02mgBYT96NM+OG1TZpeDNnBbbjY F/V31QlvnH5MP86tYeqASiZqoxXOVP8GO60C7wNkAtUJ9Xf557CHMPYMPqzUqU3/s/tZg+c7mFT GvwnSLgCk/yPRICKgh2PC58JBfMEOfPYd1RkYEweS1YBZk4Bgf2qMu1pDJ6IOCS+P55yvgC28eE UiyAfNrld4ShHO+vr8wYPoHUgL6DHA== X-Google-Smtp-Source: AGHT+IGY+loIn3dcvx/Qp0wkMkt9X8fF+N5wSpRV68TY02OJb1Jh5uWjeU85MJYyyFhYxZX0Syzaz7qlOuNI17Rw/qU= X-Received: by 2002:a17:906:6a04:b0:b79:fcc9:b00d with SMTP id a640c23a62f3a-b7d23a9f4b3mr1267033166b.59.1765826231980; Mon, 15 Dec 2025 11:17:11 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Dharin Shah Date: Mon, 15 Dec 2025 20:16:59 +0100 X-Gm-Features: AQt7F2pELTEoCLmjEgAtFsk5AJzIpFpv51TkFMSdqkihXeALkPg5nSRRH0kiy7o Message-ID: Subject: [PATCH] Add zstd compression for TOAST using extended header format To: pgadmin-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000004b15ff0646027564" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004b15ff0646027564 Content-Type: multipart/alternative; boundary="0000000000004b15fd0646027562" --0000000000004b15fd0646027562 Content-Type: text/plain; charset="UTF-8" Hello PG Hackers, Want to submit a patch that implements zstd compression for TOAST data using a 20-byte TOAST pointer format, directly addressing the concerns raised in prior discussions [1 ][2 ][3 ]. A bit of a background in the 2022 thread [3 ], The overall suggestion was to have something extensible for the TOAST header i.e. something like: 00 = PGLZ 01 = LZ4 10 = reserved for future emergencies 11 = extended header with additional type byte This patch implements that idea. The new header format: struct varatt_external_extended { int32 va_rawsize; /* same as legacy */ uint32 va_extinfo; /* cmid=3 signals extended format */ uint8 va_flags; /* feature flags */ uint8 va_data[3]; /* va_data[0] = compression method */ Oid va_valueid; /* same as legacy */ Oid va_toastrelid; /* same as legacy */ }; *A few notes:* - Zstd only applies to external TOAST, not inline compression. The 2-bit limit in va_tcinfo stays as-is for inline data, where pglz/lz4 work fine anyway. Zstd's wins show up on larger values. - A GUC use_extended_toast_header controls whether pglz/lz4 also use the 20-byte format (defaults to off for compatibility, can enable it if you want consistency). - Legacy 16-byte pointers continue to work - we check the vartag to determine which format to read. The 4 extra bytes per pointer is negligible for typical TOAST data sizes, and it gives us room to grow. Regards, Dharin --0000000000004b15fd0646027562 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello PG Hackers,
=
Want to submit a patch that implements zst= d compression for TOAST data using a 20-byte TOAST pointer format, directly= addressing the concerns raised in prior discussions [1][2<= /a>][= 3].

A bit of a backgroun= d in the 2022 thread [3], The ove= rall suggestion was to have something extensible for the TOAST header

i.e. something like:
00 =3D PGLZ
01 =3D LZ4
10 =3D reserved for future emergencies
11 =3D extended header with additional type byte<= br>
This patch implements that idea.=
The new header format:

=C2=A0 struct varatt_external_extende= d {
=C2=A0 =C2=A0 =C2=A0 int3= 2 =C2=A0 va_rawsize; =C2=A0 =C2=A0 /* same as legacy */

=C2=A0 =C2=A0 =C2=A0 uint32 =C2=A0va_extinfo; = =C2=A0 =C2=A0 /* cmid=3D3 signals extended format */

=C2=A0 =C2=A0 =C2=A0 uint8 =C2=A0 va_flags; =C2=A0 = =C2=A0 =C2=A0 /* feature flags */

=C2=A0 =C2=A0 =C2=A0 uint8 =C2=A0 va_data[3]; =C2=A0 =C2=A0 /* va_data= [0] =3D compression method */
=C2=A0 =C2=A0 =C2=A0 Oid =C2=A0 =C2=A0 va_valueid; =C2=A0 =C2=A0 /* same a= s legacy */
=C2=A0 =C2=A0 =C2= =A0 Oid =C2=A0 =C2=A0 va_toastrelid; =C2=A0/* same as legacy */
=C2=A0 };

A few notes:

- Zstd only applies to external TOAST, not inli= ne compression. The 2-bit limit in va_tcinfo stays as-is for inline data, w= here pglz/lz4 work fine anyway. Zstd's wins show up on larger values.
- A GUC use_extended_toast_hea= der controls whether pglz/lz4 also use the 20-byte format (defaults to off = for compatibility, can enable it if you want consistency).- Legacy 16-byte pointers continue to work - = we check the vartag to determine which format to read.
The 4 extra bytes per pointer is negligible f= or typical TOAST data sizes, and it gives us room to grow.

= Regards, =
Dharin
--0000000000004b15fd0646027562-- --0000000000004b15ff0646027564 Content-Type: application/x-patch; name="zstd-toast-compression-external.patch" Content-Disposition: attachment; filename="zstd-toast-compression-external.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj7jbe0p0 RnJvbSBmZGFhZTVkYzllOTgzN2Y3M2I5OTExMDBhZGNiYTZkNzZkZGExZjQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaGFyaW4gU2hhaCA8ODYxNjEzMCtEaGFyaW4tc2hhaEB1c2Vy cy5ub3JlcGx5LmdpdGh1Yi5jb20+CkRhdGU6IFNhdCwgMTMgRGVjIDIwMjUgMTE6MTY6MzUgKzAx MDAKU3ViamVjdDogW1BBVENIXSBBZGQgenN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0IGZvciBUT0FT VCB1c2luZyBleHRlbmRlZCBoZWFkZXIKIGZvcm1hdAoKLS0tCiBjb250cmliL2FtY2hlY2svdmVy aWZ5X2hlYXBhbS5jICAgICAgICAgICAgICAgfCAgNjkgKysrKystCiBzcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL2RldG9hc3QuYyAgICAgICAgICAgfCAxNjQgKysrKysrKysrKysrLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2NvbXByZXNzaW9uLmMgfCAxOTkgKysrKysrKysr KysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVybmFscy5jICAg fCAxOTggKysrKysrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90b2FzdF9o ZWxwZXIuYyAgICAgICB8ICAgMiArLQogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1 ZmZlci5jICAgICAgIHwgIDM4ICsrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMg ICAgICAgICAgICAgICB8ICAyNiArKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0ICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVz LmMgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9kZXRvYXN0LmggICAgICAg ICAgICAgICAgICB8ICA0MSArKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfY29tcHJlc3Np b24uaCAgICAgICAgfCAgMzYgKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL3RvYXN0X2ludGVybmFs cy5oICAgICAgICAgIHwgIDEwICstCiBzcmMvaW5jbHVkZS92YXJhdHQuaCAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAxNjAgKysrKysrKysrKysrKy0KIHNyYy90ZXN0L21vZHVsZXMvbWVzb24u YnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9h c3RfZXh0L01ha2VmaWxlICAgICAgfCAgMjAgKysKIC4uLi9leHBlY3RlZC90ZXN0X3RvYXN0X2V4 dC5vdXQgICAgICAgICAgICAgICB8IDE4NyArKysrKysrKysrKysrKysrCiAuLi4vZXhwZWN0ZWQv dGVzdF90b2FzdF9leHRfMS5vdXQgICAgICAgICAgICAgfCAgMzcgKysrKwogc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3RvYXN0X2V4dC9tZXNvbi5idWlsZCAgIHwgIDMzICsrKwogLi4uL3Rlc3RfdG9h c3RfZXh0L3NxbC90ZXN0X3RvYXN0X2V4dC5zcWwgICAgIHwgMTM2ICsrKysrKysrKysrKwogLi4u L3Rlc3RfdG9hc3RfZXh0L3Rlc3RfdG9hc3RfZXh0LS0xLjAuc3FsICAgIHwgIDE5ICsrCiAuLi4v bW9kdWxlcy90ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0X2V4dC5jICAgfCAxNDAgKysrKysrKysr KysrCiAuLi4vdGVzdF90b2FzdF9leHQvdGVzdF90b2FzdF9leHQuY29udHJvbCAgICAgfCAgIDUg KwogMjIgZmlsZXMgY2hhbmdlZCwgMTQ0MCBpbnNlcnRpb25zKCspLCA5MSBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L01ha2Vm aWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC9l eHBlY3RlZC90ZXN0X3RvYXN0X2V4dC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfdG9hc3RfZXh0L2V4cGVjdGVkL3Rlc3RfdG9hc3RfZXh0XzEub3V0CiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC9tZXNvbi5idWls ZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvc3Fs L3Rlc3RfdG9hc3RfZXh0LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF90b2FzdF9leHQvdGVzdF90b2FzdF9leHQtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L3Rlc3RfdG9hc3RfZXh0LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L3Rlc3RfdG9hc3Rf ZXh0LmNvbnRyb2wKCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X2hlYXBhbS5j IGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9oZWFwYW0uYwppbmRleCAxMzBiMzUzMzQ2My4uMjVj YWU0ZDAzODAgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfaGVhcGFtLmMKKysr IGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9oZWFwYW0uYwpAQCAtMTY2NSw2ICsxNjY1LDggQEAg Y2hlY2tfdHVwbGVfYXR0cmlidXRlKEhlYXBDaGVja0NvbnRleHQgKmN0eCkKIAl1aW50MTYJCWlu Zm9tYXNrOwogCUNvbXBhY3RBdHRyaWJ1dGUgKnRoaXNhdHQ7CiAJc3RydWN0IHZhcmF0dF9leHRl cm5hbCB0b2FzdF9wb2ludGVyOworCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgdG9h c3RfcG9pbnRlcl9leHQ7CisJYm9vbAkJaXNfZXh0ZW5kZWQ7CiAKIAlpbmZvbWFzayA9IGN0eC0+ dHVwaGRyLT50X2luZm9tYXNrOwogCXRoaXNhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cihSZWxh dGlvbkdldERlc2NyKGN0eC0+cmVsKSwgY3R4LT5hdHRudW0pOwpAQCAtMTcxNywxMyArMTcxOSwx NCBAQCBjaGVja190dXBsZV9hdHRyaWJ1dGUoSGVhcENoZWNrQ29udGV4dCAqY3R4KQogCiAJLyoK IAkgKiBDaGVjayB0aGF0IFZBUlRBR19TSVpFIHdvbid0IGhpdCBhbiBBc3NlcnQgb24gYSBjb3Jy dXB0IHZhX3RhZyBiZWZvcmUKLQkgKiByaXNraW5nIGEgY2FsbCBpbnRvIGF0dF9hZGRsZW5ndGhf cG9pbnRlcgorCSAqIHJpc2tpbmcgYSBjYWxsIGludG8gYXR0X2FkZGxlbmd0aF9wb2ludGVyLiAg Qm90aCBsZWdhY3kgKFZBUlRBR19PTkRJU0spCisJICogYW5kIGV4dGVuZGVkIChWQVJUQUdfT05E SVNLX0VYVEVOREVEKSBvbi1kaXNrIGZvcm1hdHMgYXJlIHZhbGlkLgogCSAqLwogCWlmIChWQVJB VFRfSVNfRVhURVJOQUwodHAgKyBjdHgtPm9mZnNldCkpCiAJewogCQl1aW50OAkJdmFfdGFnID0g VkFSVEFHX0VYVEVSTkFMKHRwICsgY3R4LT5vZmZzZXQpOwogCi0JCWlmICh2YV90YWcgIT0gVkFS VEFHX09ORElTSykKKwkJaWYgKHZhX3RhZyAhPSBWQVJUQUdfT05ESVNLICYmIHZhX3RhZyAhPSBW QVJUQUdfT05ESVNLX0VYVEVOREVEKQogCQl7CiAJCQlyZXBvcnRfY29ycnVwdGlvbihjdHgsCiAJ CQkJCQkJICBwc3ByaW50ZigidG9hc3RlZCBhdHRyaWJ1dGUgaGFzIHVuZXhwZWN0ZWQgVE9BU1Qg dGFnICV1IiwKQEAgLTE3NjgsOSArMTc3MSwyMyBAQCBjaGVja190dXBsZV9hdHRyaWJ1dGUoSGVh cENoZWNrQ29udGV4dCAqY3R4KQogCS8qIEl0IGlzIGV4dGVybmFsLCBhbmQgd2UncmUgbG9va2lu ZyBhdCBhIHBhZ2Ugb24gZGlzayAqLwogCiAJLyoKLQkgKiBNdXN0IGNvcHkgYXR0ciBpbnRvIHRv YXN0X3BvaW50ZXIgZm9yIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucworCSAqIE11c3QgY29weSBh dHRyIGludG8gdG9hc3RfcG9pbnRlciBmb3IgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLgorCSAq IEhhbmRsZSBib3RoIGxlZ2FjeSAoVkFSVEFHX09ORElTSykgYW5kIGV4dGVuZGVkIChWQVJUQUdf T05ESVNLX0VYVEVOREVEKQorCSAqIGZvcm1hdHMuCiAJICovCi0JVkFSQVRUX0VYVEVSTkFMX0dF VF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0dHIpOworCWlzX2V4dGVuZGVkID0gKFZBUlRBR19F WFRFUk5BTChhdHRyKSA9PSBWQVJUQUdfT05ESVNLX0VYVEVOREVEKTsKKworCWlmIChpc19leHRl bmRlZCkKKwl7CisJCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUl9FWFRFTkRFRCh0b2FzdF9w b2ludGVyX2V4dCwgYXR0cik7CisJCS8qIENvcHkgY29tbW9uIGZpZWxkcyBmb3Igc2ltcGxlciBj b2RlIGJlbG93ICovCisJCXRvYXN0X3BvaW50ZXIudmFfcmF3c2l6ZSA9IHRvYXN0X3BvaW50ZXJf ZXh0LnZhX3Jhd3NpemU7CisJCXRvYXN0X3BvaW50ZXIudmFfZXh0aW5mbyA9IHRvYXN0X3BvaW50 ZXJfZXh0LnZhX2V4dGluZm87CisJCXRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZCA9IHRvYXN0X3Bv aW50ZXJfZXh0LnZhX3ZhbHVlaWQ7CisJCXRvYXN0X3BvaW50ZXIudmFfdG9hc3RyZWxpZCA9IHRv YXN0X3BvaW50ZXJfZXh0LnZhX3RvYXN0cmVsaWQ7CisJfQorCWVsc2UKKwkJVkFSQVRUX0VYVEVS TkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0dHIpOwogCiAJLyogVG9hc3RlZCBhdHRy aWJ1dGVzIHRvbyBsYXJnZSB0byBiZSB1bnRvYXN0ZWQgc2hvdWxkIG5ldmVyIGJlIHN0b3JlZCAq LwogCWlmICh0b2FzdF9wb2ludGVyLnZhX3Jhd3NpemUgPiBWQVJMRU5BX1NJWkVfTElNSVQpCkBA IC0xNzg1LDggKzE4MDIsMTEgQEAgY2hlY2tfdHVwbGVfYXR0cmlidXRlKEhlYXBDaGVja0NvbnRl eHQgKmN0eCkKIAkJVG9hc3RDb21wcmVzc2lvbklkIGNtaWQ7CiAJCWJvb2wJCXZhbGlkID0gZmFs c2U7CiAKLQkJLyogQ29tcHJlc3NlZCBhdHRyaWJ1dGVzIHNob3VsZCBoYXZlIGEgdmFsaWQgY29t cHJlc3Npb24gbWV0aG9kICovCi0JCWNtaWQgPSBUT0FTVF9DT01QUkVTU19NRVRIT0QoJnRvYXN0 X3BvaW50ZXIpOworCQkvKgorCQkgKiBDb21wcmVzc2VkIGF0dHJpYnV0ZXMgc2hvdWxkIGhhdmUg YSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QuCisJCSAqIEZvciBleHRlbmRlZCBwb2ludGVycyB3 aXRoIGNtaWQ9PTMsIHRoZSBhY3R1YWwgbWV0aG9kIGlzIGluIHZhX2RhdGFbMF0uCisJCSAqLwor CQljbWlkID0gVkFSQVRUX0VYVEVSTkFMX0dFVF9DT01QUkVTU19NRVRIT0QodG9hc3RfcG9pbnRl cik7CiAJCXN3aXRjaCAoY21pZCkKIAkJewogCQkJCS8qIExpc3Qgb2YgYWxsIHZhbGlkIGNvbXBy ZXNzaW9uIG1ldGhvZCBJRHMgKi8KQEAgLTE3OTUsNiArMTgxNSwyNyBAQCBjaGVja190dXBsZV9h dHRyaWJ1dGUoSGVhcENoZWNrQ29udGV4dCAqY3R4KQogCQkJCXZhbGlkID0gdHJ1ZTsKIAkJCQli cmVhazsKIAorCQkJCS8qIEV4dGVuZGVkIGNvbXByZXNzaW9uICh6c3RkIG9yIHBnbHovbHo0IGlu IGV4dGVuZGVkIGZvcm1hdCkgKi8KKwkJCWNhc2UgVE9BU1RfRVhURU5ERURfQ09NUFJFU1NJT05f SUQ6CisJCQkJaWYgKGlzX2V4dGVuZGVkKQorCQkJCXsKKwkJCQkJdWludDgJZXh0X21ldGhvZCA9 IFZBUkFUVF9FWFRFUk5BTF9HRVRfRVhUX0NPTVBSRVNTSU9OX01FVEhPRCh0b2FzdF9wb2ludGVy X2V4dCk7CisKKwkJCQkJLyogVmFsaWRhdGUgZXh0ZW5kZWQgY29tcHJlc3Npb24gbWV0aG9kICov CisJCQkJCXN3aXRjaCAoZXh0X21ldGhvZCkKKwkJCQkJeworCQkJCQkJY2FzZSBUT0FTVF9QR0xa X0VYVF9NRVRIT0Q6CisJCQkJCQljYXNlIFRPQVNUX0xaNF9FWFRfTUVUSE9EOgorCQkJCQkJY2Fz ZSBUT0FTVF9aU1REX0VYVF9NRVRIT0Q6CisJCQkJCQkJdmFsaWQgPSB0cnVlOworCQkJCQkJCWJy ZWFrOworCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkvKiBJbnZhbGlkIGV4dGVuZGVkIG1ldGhvZCB3 aWxsIGJlIHJlcG9ydGVkIGJlbG93ICovCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJ CQkJYnJlYWs7CisKIAkJCQkvKiBSZWNvZ25pemVkIGJ1dCBpbnZhbGlkIGNvbXByZXNzaW9uIG1l dGhvZCBJRCAqLwogCQkJY2FzZSBUT0FTVF9JTlZBTElEX0NPTVBSRVNTSU9OX0lEOgogCQkJCWJy ZWFrOwpAQCAtMTg0MCw3ICsxODgxLDIxIEBAIGNoZWNrX3R1cGxlX2F0dHJpYnV0ZShIZWFwQ2hl Y2tDb250ZXh0ICpjdHgpCiAKIAkJdGEgPSBwYWxsb2MwX29iamVjdChUb2FzdGVkQXR0cmlidXRl KTsKIAotCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIodGEtPnRvYXN0X3BvaW50ZXIsIGF0 dHIpOworCQkvKgorCQkgKiBFeHRyYWN0IHRvYXN0IHBvaW50ZXIgYmFzZWQgb24gZm9ybWF0LiAg Rm9yIGV4dGVuZGVkIGZvcm1hdCwKKwkJICogY29weSBjb21tb24gZmllbGRzIGZyb20gdG9hc3Rf cG9pbnRlciB3aGljaCB3ZSBhbHJlYWR5IGV4dHJhY3RlZAorCQkgKiBhYm92ZS4KKwkJICovCisJ CWlmIChpc19leHRlbmRlZCkKKwkJeworCQkJdGEtPnRvYXN0X3BvaW50ZXIudmFfcmF3c2l6ZSA9 IHRvYXN0X3BvaW50ZXIudmFfcmF3c2l6ZTsKKwkJCXRhLT50b2FzdF9wb2ludGVyLnZhX2V4dGlu Zm8gPSB0b2FzdF9wb2ludGVyLnZhX2V4dGluZm87CisJCQl0YS0+dG9hc3RfcG9pbnRlci52YV92 YWx1ZWlkID0gdG9hc3RfcG9pbnRlci52YV92YWx1ZWlkOworCQkJdGEtPnRvYXN0X3BvaW50ZXIu dmFfdG9hc3RyZWxpZCA9IHRvYXN0X3BvaW50ZXIudmFfdG9hc3RyZWxpZDsKKwkJfQorCQllbHNl CisJCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIodGEtPnRvYXN0X3BvaW50ZXIsIGF0dHIp OworCiAJCXRhLT5ibGtubyA9IGN0eC0+Ymxrbm87CiAJCXRhLT5vZmZudW0gPSBjdHgtPm9mZm51 bTsKIAkJdGEtPmF0dG51bSA9IGN0eC0+YXR0bnVtOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2NvbW1vbi9kZXRvYXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2RldG9h c3QuYwppbmRleCA2MjY1MTc4Nzc0Mi4uNmQxYzA4OTAwZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9jb21tb24vZGV0b2FzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21t b24vZGV0b2FzdC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2RldG9hc3Qu aCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5o IgorI2luY2x1ZGUgImFjY2Vzcy90b2FzdF9jb21wcmVzc2lvbi5oIgogI2luY2x1ZGUgImFjY2Vz cy90b2FzdF9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJjb21tb24vaW50LmgiCiAjaW5jbHVkZSAi Y29tbW9uL3BnX2x6Y29tcHJlc3MuaCIKQEAgLTIyNSwxMiArMjI2LDQ3IEBAIGRldG9hc3RfYXR0 cl9zbGljZShzdHJ1Y3QgdmFybGVuYSAqYXR0ciwKIAogCWlmIChWQVJBVFRfSVNfRVhURVJOQUxf T05ESVNLKGF0dHIpKQogCXsKLQkJc3RydWN0IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9wb2ludGVy OworCQlpbnQzMgkJbWF4X3NpemU7CisJCWJvb2wJCWlzX2NvbXByZXNzZWQ7CisJCWJvb2wJCWlz X3BnbHogPSBmYWxzZTsKIAotCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIodG9hc3RfcG9p bnRlciwgYXR0cik7CisJCS8qCisJCSAqIEhhbmRsZSBib3RoIGxlZ2FjeSAxNi1ieXRlIGFuZCBl eHRlbmRlZCAyMC1ieXRlIG9uLWRpc2sgVE9BU1QKKwkJICogcG9pbnRlcnMuICBDaGVjayB0aGUg dmFydGFnIHRvIGRldGVybWluZSB3aGljaCBmb3JtYXQuCisJCSAqLworCQlpZiAoVkFSVEFHX0VY VEVSTkFMKGF0dHIpID09IFZBUlRBR19PTkRJU0tfRVhURU5ERUQpCisJCXsKKwkJCXN0cnVjdCB2 YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgdG9hc3RfcG9pbnRlcl9leHQ7CisJCQl1aW50OAkJZXh0 X21ldGhvZDsKKworCQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSX0VYVEVOREVEKHRvYXN0 X3BvaW50ZXJfZXh0LCBhdHRyKTsKKwkJCW1heF9zaXplID0gVkFSQVRUX0VYVEVSTkFMX0dFVF9F WFRTSVpFX0VYVEVOREVEKHRvYXN0X3BvaW50ZXJfZXh0KTsKKwkJCWlzX2NvbXByZXNzZWQgPSBW QVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRF9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCk7 CisKKwkJCS8qIENoZWNrIGlmIHRoaXMgaXMgcGdseiBmb3Igc2xpY2Ugb3B0aW1pemF0aW9uICov CisJCQlpZiAoaXNfY29tcHJlc3NlZCAmJgorCQkJCVZBUkFUVF9FWFRFUk5BTF9IQVNfRkxBRyh0 b2FzdF9wb2ludGVyX2V4dCwgVE9BU1RfRVhUX0ZMQUdfQ09NUFJFU1NJT04pKQorCQkJeworCQkJ CWV4dF9tZXRob2QgPSBWQVJBVFRfRVhURVJOQUxfR0VUX0VYVF9DT01QUkVTU0lPTl9NRVRIT0Qo dG9hc3RfcG9pbnRlcl9leHQpOworCQkJCWlzX3BnbHogPSAoZXh0X21ldGhvZCA9PSBUT0FTVF9Q R0xaX0VYVF9NRVRIT0QpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJc3RydWN0IHZhcmF0 dF9leHRlcm5hbCB0b2FzdF9wb2ludGVyOworCisJCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5U RVIodG9hc3RfcG9pbnRlciwgYXR0cik7CisJCQltYXhfc2l6ZSA9IFZBUkFUVF9FWFRFUk5BTF9H RVRfRVhUU0laRSh0b2FzdF9wb2ludGVyKTsKKwkJCWlzX2NvbXByZXNzZWQgPSBWQVJBVFRfRVhU RVJOQUxfSVNfQ09NUFJFU1NFRCh0b2FzdF9wb2ludGVyKTsKKworCQkJLyogQ2hlY2sgaWYgdGhp cyBpcyBwZ2x6IGZvciBzbGljZSBvcHRpbWl6YXRpb24gKi8KKwkJCWlmIChpc19jb21wcmVzc2Vk KQorCQkJCWlzX3BnbHogPSAoVkFSQVRUX0VYVEVSTkFMX0dFVF9DT01QUkVTU19NRVRIT0QodG9h c3RfcG9pbnRlcikgPT0KKwkJCQkJCSAgIFRPQVNUX1BHTFpfQ09NUFJFU1NJT05fSUQpOworCQl9 CiAKIAkJLyogZmFzdCBwYXRoIGZvciBub24tY29tcHJlc3NlZCBleHRlcm5hbCBkYXR1bXMgKi8K LQkJaWYgKCFWQVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRCh0b2FzdF9wb2ludGVyKSkKKwkJ aWYgKCFpc19jb21wcmVzc2VkKQogCQkJcmV0dXJuIHRvYXN0X2ZldGNoX2RhdHVtX3NsaWNlKGF0 dHIsIHNsaWNlb2Zmc2V0LCBzbGljZWxlbmd0aCk7CiAKIAkJLyoKQEAgLTI0MCwxOSArMjc2LDE2 IEBAIGRldG9hc3RfYXR0cl9zbGljZShzdHJ1Y3QgdmFybGVuYSAqYXR0ciwKIAkJICovCiAJCWlm IChzbGljZWxpbWl0ID49IDApCiAJCXsKLQkJCWludDMyCQltYXhfc2l6ZSA9IFZBUkFUVF9FWFRF Uk5BTF9HRVRfRVhUU0laRSh0b2FzdF9wb2ludGVyKTsKLQogCQkJLyoKIAkJCSAqIERldGVybWlu ZSBtYXhpbXVtIGFtb3VudCBvZiBjb21wcmVzc2VkIGRhdGEgbmVlZGVkIGZvciBhIHByZWZpeAog CQkJICogb2YgYSBnaXZlbiBsZW5ndGggKGFmdGVyIGRlY29tcHJlc3Npb24pLgogCQkJICoKLQkJ CSAqIEF0IGxlYXN0IGZvciBub3csIGlmIGl0J3MgTFo0IGRhdGEsIHdlJ2xsIGhhdmUgdG8gZmV0 Y2ggdGhlCi0JCQkgKiB3aG9sZSB0aGluZywgYmVjYXVzZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8g YmUgYW4gQVBJIGNhbGwgdG8KLQkJCSAqIGRldGVybWluZSBob3cgbXVjaCBjb21wcmVzc2VkIGRh dGEgd2UgbmVlZCB0byBiZSBzdXJlIG9mIGJlaW5nCi0JCQkgKiBhYmxlIHRvIGRlY29tcHJlc3Mg dGhlIHJlcXVpcmVkIHNsaWNlLgorCQkJICogQXQgbGVhc3QgZm9yIG5vdywgaWYgaXQncyBMWjQg b3IgenN0ZCBkYXRhLCB3ZSdsbCBoYXZlIHRvIGZldGNoCisJCQkgKiB0aGUgd2hvbGUgdGhpbmcs IGJlY2F1c2UgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGFuIEFQSSBjYWxsCisJCQkgKiB0byBk ZXRlcm1pbmUgaG93IG11Y2ggY29tcHJlc3NlZCBkYXRhIHdlIG5lZWQgdG8gYmUgc3VyZSBvZgor CQkJICogYmVpbmcgYWJsZSB0byBkZWNvbXByZXNzIHRoZSByZXF1aXJlZCBzbGljZS4KIAkJCSAq LwotCQkJaWYgKFZBUkFUVF9FWFRFUk5BTF9HRVRfQ09NUFJFU1NfTUVUSE9EKHRvYXN0X3BvaW50 ZXIpID09Ci0JCQkJVE9BU1RfUEdMWl9DT01QUkVTU0lPTl9JRCkKKwkJCWlmIChpc19wZ2x6KQog CQkJCW1heF9zaXplID0gcGdsel9tYXhpbXVtX2NvbXByZXNzZWRfc2l6ZShzbGljZWxpbWl0LCBt YXhfc2l6ZSk7CiAKIAkJCS8qCkBAIC0zNDQsMjAgKzM3Nyw0MiBAQCB0b2FzdF9mZXRjaF9kYXR1 bShzdHJ1Y3QgdmFybGVuYSAqYXR0cikKIHsKIAlSZWxhdGlvbgl0b2FzdHJlbDsKIAlzdHJ1Y3Qg dmFybGVuYSAqcmVzdWx0OwotCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsK IAlpbnQzMgkJYXR0cnNpemU7CisJT2lkCQkJdG9hc3RyZWxpZDsKKwlPaWQJCQl2YWx1ZWlkOwor CWJvb2wJCWlzX2NvbXByZXNzZWQ7CiAKIAlpZiAoIVZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0so YXR0cikpCiAJCWVsb2coRVJST1IsICJ0b2FzdF9mZXRjaF9kYXR1bSBzaG91bGRuJ3QgYmUgY2Fs bGVkIGZvciBub24tb25kaXNrIGRhdHVtcyIpOwogCi0JLyogTXVzdCBjb3B5IHRvIGFjY2VzcyBh bGlnbmVkIGZpZWxkcyAqLwotCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUih0b2FzdF9wb2lu dGVyLCBhdHRyKTsKKwkvKgorCSAqIEhhbmRsZSBib3RoIGxlZ2FjeSAxNi1ieXRlIGFuZCBleHRl bmRlZCAyMC1ieXRlIG9uLWRpc2sgVE9BU1QgcG9pbnRlcnMuCisJICogQ2hlY2sgdGhlIHZhcnRh ZyB0byBkZXRlcm1pbmUgd2hpY2ggZm9ybWF0IHdlJ3JlIGRlYWxpbmcgd2l0aC4KKwkgKi8KKwlp ZiAoVkFSVEFHX0VYVEVSTkFMKGF0dHIpID09IFZBUlRBR19PTkRJU0tfRVhURU5ERUQpCisJewor CQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkIHRvYXN0X3BvaW50ZXJfZXh0OworCisJ CVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUl9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCwg YXR0cik7CisJCWF0dHJzaXplID0gVkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRTSVpFX0VYVEVOREVE KHRvYXN0X3BvaW50ZXJfZXh0KTsKKwkJdG9hc3RyZWxpZCA9IHRvYXN0X3BvaW50ZXJfZXh0LnZh X3RvYXN0cmVsaWQ7CisJCXZhbHVlaWQgPSB0b2FzdF9wb2ludGVyX2V4dC52YV92YWx1ZWlkOwor CQlpc19jb21wcmVzc2VkID0gVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRURfRVhURU5ERUQo dG9hc3RfcG9pbnRlcl9leHQpOworCX0KKwllbHNlCisJeworCQlzdHJ1Y3QgdmFyYXR0X2V4dGVy bmFsIHRvYXN0X3BvaW50ZXI7CiAKLQlhdHRyc2l6ZSA9IFZBUkFUVF9FWFRFUk5BTF9HRVRfRVhU U0laRSh0b2FzdF9wb2ludGVyKTsKKwkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0 X3BvaW50ZXIsIGF0dHIpOworCQlhdHRyc2l6ZSA9IFZBUkFUVF9FWFRFUk5BTF9HRVRfRVhUU0la RSh0b2FzdF9wb2ludGVyKTsKKwkJdG9hc3RyZWxpZCA9IHRvYXN0X3BvaW50ZXIudmFfdG9hc3Ry ZWxpZDsKKwkJdmFsdWVpZCA9IHRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZDsKKwkJaXNfY29tcHJl c3NlZCA9IFZBUkFUVF9FWFRFUk5BTF9JU19DT01QUkVTU0VEKHRvYXN0X3BvaW50ZXIpOworCX0K IAogCXJlc3VsdCA9IChzdHJ1Y3QgdmFybGVuYSAqKSBwYWxsb2MoYXR0cnNpemUgKyBWQVJIRFJT Wik7CiAKLQlpZiAoVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRUQodG9hc3RfcG9pbnRlcikp CisJaWYgKGlzX2NvbXByZXNzZWQpCiAJCVNFVF9WQVJTSVpFX0NPTVBSRVNTRUQocmVzdWx0LCBh dHRyc2l6ZSArIFZBUkhEUlNaKTsKIAllbHNlCiAJCVNFVF9WQVJTSVpFKHJlc3VsdCwgYXR0cnNp emUgKyBWQVJIRFJTWik7CkBAIC0zNjksMTAgKzQyNCwxMCBAQCB0b2FzdF9mZXRjaF9kYXR1bShz dHJ1Y3QgdmFybGVuYSAqYXR0cikKIAkvKgogCSAqIE9wZW4gdGhlIHRvYXN0IHJlbGF0aW9uIGFu ZCBpdHMgaW5kZXhlcwogCSAqLwotCXRvYXN0cmVsID0gdGFibGVfb3Blbih0b2FzdF9wb2ludGVy LnZhX3RvYXN0cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJdG9hc3RyZWwgPSB0YWJsZV9vcGVu KHRvYXN0cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAKIAkvKiBGZXRjaCBhbGwgY2h1bmtzICov Ci0JdGFibGVfcmVsYXRpb25fZmV0Y2hfdG9hc3Rfc2xpY2UodG9hc3RyZWwsIHRvYXN0X3BvaW50 ZXIudmFfdmFsdWVpZCwKKwl0YWJsZV9yZWxhdGlvbl9mZXRjaF90b2FzdF9zbGljZSh0b2FzdHJl bCwgdmFsdWVpZCwKIAkJCQkJCQkJCSBhdHRyc2l6ZSwgMCwgYXR0cnNpemUsIHJlc3VsdCk7CiAK IAkvKiBDbG9zZSB0b2FzdCB0YWJsZSAqLwpAQCAtMzk4LDIzICs0NTMsNDUgQEAgdG9hc3RfZmV0 Y2hfZGF0dW1fc2xpY2Uoc3RydWN0IHZhcmxlbmEgKmF0dHIsIGludDMyIHNsaWNlb2Zmc2V0LAog ewogCVJlbGF0aW9uCXRvYXN0cmVsOwogCXN0cnVjdCB2YXJsZW5hICpyZXN1bHQ7Ci0Jc3RydWN0 IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9wb2ludGVyOwogCWludDMyCQlhdHRyc2l6ZTsKKwlPaWQJ CQl0b2FzdHJlbGlkOworCU9pZAkJCXZhbHVlaWQ7CisJYm9vbAkJaXNfY29tcHJlc3NlZDsKIAog CWlmICghVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhhdHRyKSkKIAkJZWxvZyhFUlJPUiwgInRv YXN0X2ZldGNoX2RhdHVtX3NsaWNlIHNob3VsZG4ndCBiZSBjYWxsZWQgZm9yIG5vbi1vbmRpc2sg ZGF0dW1zIik7CiAKLQkvKiBNdXN0IGNvcHkgdG8gYWNjZXNzIGFsaWduZWQgZmllbGRzICovCi0J VkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0dHIpOworCS8qCisJ ICogSGFuZGxlIGJvdGggbGVnYWN5IDE2LWJ5dGUgYW5kIGV4dGVuZGVkIDIwLWJ5dGUgb24tZGlz ayBUT0FTVCBwb2ludGVycy4KKwkgKiBDaGVjayB0aGUgdmFydGFnIHRvIGRldGVybWluZSB3aGlj aCBmb3JtYXQgd2UncmUgZGVhbGluZyB3aXRoLgorCSAqLworCWlmIChWQVJUQUdfRVhURVJOQUwo YXR0cikgPT0gVkFSVEFHX09ORElTS19FWFRFTkRFRCkKKwl7CisJCXN0cnVjdCB2YXJhdHRfZXh0 ZXJuYWxfZXh0ZW5kZWQgdG9hc3RfcG9pbnRlcl9leHQ7CisKKwkJVkFSQVRUX0VYVEVSTkFMX0dF VF9QT0lOVEVSX0VYVEVOREVEKHRvYXN0X3BvaW50ZXJfZXh0LCBhdHRyKTsKKwkJYXR0cnNpemUg PSBWQVJBVFRfRVhURVJOQUxfR0VUX0VYVFNJWkVfRVhURU5ERUQodG9hc3RfcG9pbnRlcl9leHQp OworCQl0b2FzdHJlbGlkID0gdG9hc3RfcG9pbnRlcl9leHQudmFfdG9hc3RyZWxpZDsKKwkJdmFs dWVpZCA9IHRvYXN0X3BvaW50ZXJfZXh0LnZhX3ZhbHVlaWQ7CisJCWlzX2NvbXByZXNzZWQgPSBW QVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRF9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCk7 CisJfQorCWVsc2UKKwl7CisJCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsK KworCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIodG9hc3RfcG9pbnRlciwgYXR0cik7CisJ CWF0dHJzaXplID0gVkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRTSVpFKHRvYXN0X3BvaW50ZXIpOwor CQl0b2FzdHJlbGlkID0gdG9hc3RfcG9pbnRlci52YV90b2FzdHJlbGlkOworCQl2YWx1ZWlkID0g dG9hc3RfcG9pbnRlci52YV92YWx1ZWlkOworCQlpc19jb21wcmVzc2VkID0gVkFSQVRUX0VYVEVS TkFMX0lTX0NPTVBSRVNTRUQodG9hc3RfcG9pbnRlcik7CisJfQogCiAJLyoKIAkgKiBJdCdzIG5v bnNlbnNlIHRvIGZldGNoIHNsaWNlcyBvZiBhIGNvbXByZXNzZWQgZGF0dW0gdW5sZXNzIHdoZW4g aXQncyBhCiAJICogcHJlZml4IC0tIHRoaXMgaXNuJ3QgbG9fKiB3ZSBjYW4ndCByZXR1cm4gYSBj b21wcmVzc2VkIGRhdHVtIHdoaWNoIGlzCiAJICogbWVhbmluZ2Z1bCB0byB0b2FzdCBsYXRlci4K IAkgKi8KLQlBc3NlcnQoIVZBUkFUVF9FWFRFUk5BTF9JU19DT01QUkVTU0VEKHRvYXN0X3BvaW50 ZXIpIHx8IDAgPT0gc2xpY2VvZmZzZXQpOwotCi0JYXR0cnNpemUgPSBWQVJBVFRfRVhURVJOQUxf R0VUX0VYVFNJWkUodG9hc3RfcG9pbnRlcik7CisJQXNzZXJ0KCFpc19jb21wcmVzc2VkIHx8IDAg PT0gc2xpY2VvZmZzZXQpOwogCiAJaWYgKHNsaWNlb2Zmc2V0ID49IGF0dHJzaXplKQogCXsKQEAg LTQyNyw3ICs1MDQsNyBAQCB0b2FzdF9mZXRjaF9kYXR1bV9zbGljZShzdHJ1Y3QgdmFybGVuYSAq YXR0ciwgaW50MzIgc2xpY2VvZmZzZXQsCiAJICogc3BhY2UgcmVxdWlyZWQgYnkgdmFfdGNpbmZv LCB3aGljaCBpcyBzdG9yZWQgYXQgdGhlIGJlZ2lubmluZyBhcyBhbgogCSAqIGludDMyIHZhbHVl LgogCSAqLwotCWlmIChWQVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRCh0b2FzdF9wb2ludGVy KSAmJiBzbGljZWxlbmd0aCA+IDApCisJaWYgKGlzX2NvbXByZXNzZWQgJiYgc2xpY2VsZW5ndGgg PiAwKQogCQlzbGljZWxlbmd0aCA9IHNsaWNlbGVuZ3RoICsgc2l6ZW9mKGludDMyKTsKIAogCS8q CkBAIC00NDAsNyArNTE3LDcgQEAgdG9hc3RfZmV0Y2hfZGF0dW1fc2xpY2Uoc3RydWN0IHZhcmxl bmEgKmF0dHIsIGludDMyIHNsaWNlb2Zmc2V0LAogCiAJcmVzdWx0ID0gKHN0cnVjdCB2YXJsZW5h ICopIHBhbGxvYyhzbGljZWxlbmd0aCArIFZBUkhEUlNaKTsKIAotCWlmIChWQVJBVFRfRVhURVJO QUxfSVNfQ09NUFJFU1NFRCh0b2FzdF9wb2ludGVyKSkKKwlpZiAoaXNfY29tcHJlc3NlZCkKIAkJ U0VUX1ZBUlNJWkVfQ09NUFJFU1NFRChyZXN1bHQsIHNsaWNlbGVuZ3RoICsgVkFSSERSU1opOwog CWVsc2UKIAkJU0VUX1ZBUlNJWkUocmVzdWx0LCBzbGljZWxlbmd0aCArIFZBUkhEUlNaKTsKQEAg LTQ0OSwxMCArNTI2LDEwIEBAIHRvYXN0X2ZldGNoX2RhdHVtX3NsaWNlKHN0cnVjdCB2YXJsZW5h ICphdHRyLCBpbnQzMiBzbGljZW9mZnNldCwKIAkJcmV0dXJuIHJlc3VsdDsJCQkvKiBDYW4gc2F2 ZSBhIGxvdCBvZiB3b3JrIGF0IHRoaXMgcG9pbnQhICovCiAKIAkvKiBPcGVuIHRoZSB0b2FzdCBy ZWxhdGlvbiAqLwotCXRvYXN0cmVsID0gdGFibGVfb3Blbih0b2FzdF9wb2ludGVyLnZhX3RvYXN0 cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJdG9hc3RyZWwgPSB0YWJsZV9vcGVuKHRvYXN0cmVs aWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAKIAkvKiBGZXRjaCBhbGwgY2h1bmtzICovCi0JdGFibGVf cmVsYXRpb25fZmV0Y2hfdG9hc3Rfc2xpY2UodG9hc3RyZWwsIHRvYXN0X3BvaW50ZXIudmFfdmFs dWVpZCwKKwl0YWJsZV9yZWxhdGlvbl9mZXRjaF90b2FzdF9zbGljZSh0b2FzdHJlbCwgdmFsdWVp ZCwKIAkJCQkJCQkJCSBhdHRyc2l6ZSwgc2xpY2VvZmZzZXQsIHNsaWNlbGVuZ3RoLAogCQkJCQkJ CQkJIHJlc3VsdCk7CiAKQEAgLTQ4NSw2ICs1NjIsOSBAQCB0b2FzdF9kZWNvbXByZXNzX2RhdHVt KHN0cnVjdCB2YXJsZW5hICphdHRyKQogCQkJcmV0dXJuIHBnbHpfZGVjb21wcmVzc19kYXR1bShh dHRyKTsKIAkJY2FzZSBUT0FTVF9MWjRfQ09NUFJFU1NJT05fSUQ6CiAJCQlyZXR1cm4gbHo0X2Rl Y29tcHJlc3NfZGF0dW0oYXR0cik7CisJCWNhc2UgVE9BU1RfRVhURU5ERURfQ09NUFJFU1NJT05f SUQ6CisJCQkvKiB6c3RkLWNvbXByZXNzZWQgZGF0YSAqLworCQkJcmV0dXJuIHpzdGRfZGVjb21w cmVzc19kYXR1bShhdHRyKTsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJpbnZhbGlkIGNv bXByZXNzaW9uIG1ldGhvZCBpZCAlZCIsIGNtaWQpOwogCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVw IGNvbXBpbGVyIHF1aWV0ICovCkBAIC01MjgsNiArNjA4LDkgQEAgdG9hc3RfZGVjb21wcmVzc19k YXR1bV9zbGljZShzdHJ1Y3QgdmFybGVuYSAqYXR0ciwgaW50MzIgc2xpY2VsZW5ndGgpCiAJCQly ZXR1cm4gcGdsel9kZWNvbXByZXNzX2RhdHVtX3NsaWNlKGF0dHIsIHNsaWNlbGVuZ3RoKTsKIAkJ Y2FzZSBUT0FTVF9MWjRfQ09NUFJFU1NJT05fSUQ6CiAJCQlyZXR1cm4gbHo0X2RlY29tcHJlc3Nf ZGF0dW1fc2xpY2UoYXR0ciwgc2xpY2VsZW5ndGgpOworCQljYXNlIFRPQVNUX0VYVEVOREVEX0NP TVBSRVNTSU9OX0lEOgorCQkJLyogenN0ZC1jb21wcmVzc2VkIGRhdGEgKi8KKwkJCXJldHVybiB6 c3RkX2RlY29tcHJlc3NfZGF0dW1fc2xpY2UoYXR0ciwgc2xpY2VsZW5ndGgpOwogCQlkZWZhdWx0 OgogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIGlkICVkIiwgY21p ZCk7CiAJCQlyZXR1cm4gTlVMTDsJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KQEAgLTU0OSwx MSArNjMyLDE1IEBAIHRvYXN0X3Jhd19kYXR1bV9zaXplKERhdHVtIHZhbHVlKQogCiAJaWYgKFZB UkFUVF9JU19FWFRFUk5BTF9PTkRJU0soYXR0cikpCiAJewotCQkvKiB2YV9yYXdzaXplIGlzIHRo ZSBzaXplIG9mIHRoZSBvcmlnaW5hbCBkYXR1bSAtLSBpbmNsdWRpbmcgaGVhZGVyICovCi0JCXN0 cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKKwkJLyoKKwkJICogdmFfcmF3c2l6 ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgZGF0dW0gLS0gaW5jbHVkaW5nIGhlYWRlci4K KwkJICogSXQncyBhdCBvZmZzZXQgMCBpbiBib3RoIHZhcmF0dF9leHRlcm5hbCBhbmQgdmFyYXR0 X2V4dGVybmFsX2V4dGVuZGVkLAorCQkgKiBzbyB3ZSBjYW4gcmVhZCBqdXN0IHRoZSBmaXJzdCA0 IGJ5dGVzIHJlZ2FyZGxlc3Mgb2YgZm9ybWF0LgorCQkgKi8KKwkJaW50MzIJdmFfcmF3c2l6ZTsK IAotCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIodG9hc3RfcG9pbnRlciwgYXR0cik7Ci0J CXJlc3VsdCA9IHRvYXN0X3BvaW50ZXIudmFfcmF3c2l6ZTsKKwkJbWVtY3B5KCZ2YV9yYXdzaXpl LCBWQVJEQVRBX0VYVEVSTkFMKGF0dHIpLCBzaXplb2YodmFfcmF3c2l6ZSkpOworCQlyZXN1bHQg PSB2YV9yYXdzaXplOwogCX0KIAllbHNlIGlmIChWQVJBVFRfSVNfRVhURVJOQUxfSU5ESVJFQ1Qo YXR0cikpCiAJewpAQCAtNjA5LDExICs2OTYsMTggQEAgdG9hc3RfZGF0dW1fc2l6ZShEYXR1bSB2 YWx1ZSkKIAkJICogQXR0cmlidXRlIGlzIHN0b3JlZCBleHRlcm5hbGx5IC0gcmV0dXJuIHRoZSBl eHRzaXplIHdoZXRoZXIKIAkJICogY29tcHJlc3NlZCBvciBub3QuICBXZSBkbyBub3QgY291bnQg dGhlIHNpemUgb2YgdGhlIHRvYXN0IHBvaW50ZXIKIAkJICogLi4uIHNob3VsZCB3ZT8KKwkJICoK KwkJICogdmFfZXh0aW5mbyBpcyBhdCBvZmZzZXQgNCBpbiBib3RoIHZhcmF0dF9leHRlcm5hbCBh bmQKKwkJICogdmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkLCBzbyB3ZSBjYW4gcmVhZCB0aGUgZmly c3QgOCBieXRlcworCQkgKiByZWdhcmRsZXNzIG9mIGZvcm1hdC4KIAkJICovCi0JCXN0cnVjdCB2 YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKKwkJc3RydWN0IHsKKwkJCWludDMyCXZhX3Jh d3NpemU7CisJCQl1aW50MzIJdmFfZXh0aW5mbzsKKwkJfSBjb21tb247CiAKLQkJVkFSQVRUX0VY VEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0dHIpOwotCQlyZXN1bHQgPSBWQVJB VFRfRVhURVJOQUxfR0VUX0VYVFNJWkUodG9hc3RfcG9pbnRlcik7CisJCW1lbWNweSgmY29tbW9u LCBWQVJEQVRBX0VYVEVSTkFMKGF0dHIpLCBzaXplb2YoY29tbW9uKSk7CisJCXJlc3VsdCA9IGNv bW1vbi52YV9leHRpbmZvICYgVkFSTEVOQV9FWFRTSVpFX01BU0s7CiAJfQogCWVsc2UgaWYgKFZB UkFUVF9JU19FWFRFUk5BTF9JTkRJUkVDVChhdHRyKSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2NvbXByZXNzaW9uLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL3RvYXN0X2NvbXByZXNzaW9uLmMKaW5kZXggOTI2ZjFlNDAwOGEuLjQyMmUyYzU5 NjdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2NvbXByZXNz aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9jb21wcmVzc2lvbi5j CkBAIC0xNywxMyArMTcsMTkgQEAKICNpbmNsdWRlIDxsejQuaD4KICNlbmRpZgogCisjaWZkZWYg VVNFX1pTVEQKKyNpbmNsdWRlIDx6c3RkLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImFjY2Vzcy9k ZXRvYXN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVk ZSAiY29tbW9uL3BnX2x6Y29tcHJlc3MuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgog I2luY2x1ZGUgInZhcmF0dC5oIgogCiAvKiBHVUMgKi8KIGludAkJCWRlZmF1bHRfdG9hc3RfY29t cHJlc3Npb24gPSBUT0FTVF9QR0xaX0NPTVBSRVNTSU9OOworYm9vbAkJdXNlX2V4dGVuZGVkX3Rv YXN0X2hlYWRlciA9IGZhbHNlOwogCiAjZGVmaW5lIE5PX0NPTVBSRVNTSU9OX1NVUFBPUlQobWV0 aG9kKSBcCiAJZXJlcG9ydChFUlJPUiwgXApAQCAtMjQ5LDExICsyNTUsMTYgQEAgbHo0X2RlY29t cHJlc3NfZGF0dW1fc2xpY2UoY29uc3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVlLCBpbnQzMiBzbGlj ZWxlbmd0aCkKICAqIEV4dHJhY3QgY29tcHJlc3Npb24gSUQgZnJvbSBhIHZhcmxlbmEuCiAgKgog ICogUmV0dXJucyBUT0FTVF9JTlZBTElEX0NPTVBSRVNTSU9OX0lEIGlmIHRoZSB2YXJsZW5hIGlz IG5vdCBjb21wcmVzc2VkLgorICoKKyAqIEZvciBleHRlcm5hbCBkYXRhIHN0b3JlZCBpbiBleHRl bmRlZCBmb3JtYXQgKFZBUlRBR19PTkRJU0tfRVhURU5ERUQpLAorICogdGhlIGFjdHVhbCBjb21w cmVzc2lvbiBtZXRob2QgaXMgc3RvcmVkIGluIHZhX2RhdGFbMF0uICBXZSBtYXAgdGhhdAorICog YmFjayB0byB0aGUgYXBwcm9wcmlhdGUgVG9hc3RDb21wcmVzc2lvbklkIGZvciBsZWdhY3kgY29t cGF0aWJpbGl0eS4KICAqLwogVG9hc3RDb21wcmVzc2lvbklkCiB0b2FzdF9nZXRfY29tcHJlc3Np b25faWQoc3RydWN0IHZhcmxlbmEgKmF0dHIpCiB7CiAJVG9hc3RDb21wcmVzc2lvbklkIGNtaWQg PSBUT0FTVF9JTlZBTElEX0NPTVBSRVNTSU9OX0lEOworCXZhcnRhZ19leHRlcm5hbCB0YWc7CiAK IAkvKgogCSAqIElmIGl0IGlzIHN0b3JlZCBleHRlcm5hbGx5IHRoZW4gZmV0Y2ggdGhlIGNvbXBy ZXNzaW9uIG1ldGhvZCBpZCBmcm9tCkBAIC0yNjIsMTIgKzI3Myw1MiBAQCB0b2FzdF9nZXRfY29t cHJlc3Npb25faWQoc3RydWN0IHZhcmxlbmEgKmF0dHIpCiAJICovCiAJaWYgKFZBUkFUVF9JU19F WFRFUk5BTF9PTkRJU0soYXR0cikpCiAJewotCQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIHRvYXN0 X3BvaW50ZXI7Ci0KLQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIs IGF0dHIpOwotCi0JCWlmIChWQVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRCh0b2FzdF9wb2lu dGVyKSkKLQkJCWNtaWQgPSBWQVJBVFRfRVhURVJOQUxfR0VUX0NPTVBSRVNTX01FVEhPRCh0b2Fz dF9wb2ludGVyKTsKKwkJdGFnID0gVkFSVEFHX0VYVEVSTkFMKGF0dHIpOworCQlpZiAodGFnID09 IFZBUlRBR19PTkRJU0spCisJCXsKKwkJCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9p bnRlcjsKKworCQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0 dHIpOworCisJCQlpZiAoVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRUQodG9hc3RfcG9pbnRl cikpCisJCQkJY21pZCA9IFZBUkFUVF9FWFRFUk5BTF9HRVRfQ09NUFJFU1NfTUVUSE9EKHRvYXN0 X3BvaW50ZXIpOworCQl9CisJCWVsc2UKKwkJeworCQkJc3RydWN0IHZhcmF0dF9leHRlcm5hbF9l eHRlbmRlZCB0b2FzdF9wb2ludGVyX2V4dDsKKwkJCXVpbnQ4CQlleHRfbWV0aG9kOworCisJCQlB c3NlcnQodGFnID09IFZBUlRBR19PTkRJU0tfRVhURU5ERUQpOworCQkJVkFSQVRUX0VYVEVSTkFM X0dFVF9QT0lOVEVSX0VYVEVOREVEKHRvYXN0X3BvaW50ZXJfZXh0LCBhdHRyKTsKKworCQkJaWYg KFZBUkFUVF9FWFRFUk5BTF9JU19DT01QUkVTU0VEX0VYVEVOREVEKHRvYXN0X3BvaW50ZXJfZXh0 KSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEV4dGVuZGVkIGZvcm1hdCBzdG9yZXMgdGhlIGFjdHVh bCBtZXRob2QgaW4gdmFfZGF0YVswXS4KKwkJCQkgKiBNYXAgaXQgYmFjayB0byBUb2FzdENvbXBy ZXNzaW9uSWQgZm9yIHJlcG9ydGluZyBwdXJwb3Nlcy4KKwkJCQkgKi8KKwkJCQlleHRfbWV0aG9k ID0gVkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRfQ09NUFJFU1NJT05fTUVUSE9EKHRvYXN0X3BvaW50 ZXJfZXh0KTsKKwkJCQlzd2l0Y2ggKGV4dF9tZXRob2QpCisJCQkJeworCQkJCQljYXNlIFRPQVNU X1BHTFpfRVhUX01FVEhPRDoKKwkJCQkJCWNtaWQgPSBUT0FTVF9QR0xaX0NPTVBSRVNTSU9OX0lE OworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgVE9BU1RfTFo0X0VYVF9NRVRIT0Q6CisJCQkJCQlj bWlkID0gVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2Ug VE9BU1RfWlNURF9FWFRfTUVUSE9EOgorCQkJCQkJY21pZCA9IFRPQVNUX0VYVEVOREVEX0NPTVBS RVNTSU9OX0lEOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgVE9BU1RfVU5DT01QUkVTU0VEX0VY VF9NRVRIT0Q6CisJCQkJCQkvKiBVbmNvbXByZXNzZWQgZGF0YSBpbiBleHRlbmRlZCBmb3JtYXQg Ki8KKwkJCQkJCWNtaWQgPSBUT0FTVF9JTlZBTElEX0NPTVBSRVNTSU9OX0lEOworCQkJCQkJYnJl YWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBleHRlbmRlZCBj b21wcmVzc2lvbiBtZXRob2QgJWQiLAorCQkJCQkJCSBleHRfbWV0aG9kKTsKKwkJCQl9CisJCQl9 CisJCX0KIAl9CiAJZWxzZSBpZiAoVkFSQVRUX0lTX0NPTVBSRVNTRUQoYXR0cikpCiAJCWNtaWQg PSBWQVJEQVRBX0NPTVBSRVNTRURfR0VUX0NPTVBSRVNTX01FVEhPRChhdHRyKTsKQEAgLTI3NSw2 ICszMjYsMTMzIEBAIHRvYXN0X2dldF9jb21wcmVzc2lvbl9pZChzdHJ1Y3QgdmFybGVuYSAqYXR0 cikKIAlyZXR1cm4gY21pZDsKIH0KIAorLyoKKyAqIFpzdGFuZGFyZCAoenN0ZCkgY29tcHJlc3Np b24vZGVjb21wcmVzc2lvbiBmb3IgVE9BU1QgKGV4dGVuZGVkIG1ldGhvZHMpLgorICoKKyAqIFRo ZXNlIHJvdXRpbmVzIHVzZSB0aGUgc2FtZSBiYXNpYyBzaGFwZSBhcyB0aGUgcGdseiBhbmQgTFo0 IGhlbHBlcnMsCisgKiBidXQgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gUG9zdGdyZVNRTCBpcyBi dWlsdCB3aXRoIFVTRV9aU1RELgorICovCisKKy8qCisgKiBDb21wcmVzcyBhIHZhcmxlbmEgdXNp bmcgWlNURC4KKyAqCisgKiBSZXR1cm5zIHRoZSBjb21wcmVzc2VkIHZhcmxlbmEsIG9yIE5VTEwg aWYgY29tcHJlc3Npb24gZmFpbHMgb3IgZG9lcworICogbm90IHNhdmUgc3BhY2UuCisgKi8KK3N0 YXRpYyBzdHJ1Y3QgdmFybGVuYSAqCit6c3RkX2NvbXByZXNzX2RhdHVtX2ludGVybmFsKGNvbnN0 IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSwgaW50IGxldmVsKQoreworI2lmbmRlZiBVU0VfWlNURAor CU5PX0NPTVBSRVNTSU9OX1NVUFBPUlQoInpzdGQiKTsKKwlyZXR1cm4gTlVMTDsJCQkJLyoga2Vl cCBjb21waWxlciBxdWlldCAqLworI2Vsc2UKKwlTaXplCQl2YWxzaXplOworCVNpemUJCW1heF9z aXplOworCVNpemUJCW91dF9zaXplOworCXN0cnVjdCB2YXJsZW5hICp0bXA7CisJc2l6ZV90CQly YzsKKworCXZhbHNpemUgPSBWQVJTSVpFX0FOWV9FWEhEUih2YWx1ZSk7CisKKwkvKgorCSAqIENv bXB1dGUgYW4gdXBwZXIgYm91bmQgZm9yIHRoZSBjb21wcmVzc2VkIHNpemUgYW5kIGFsbG9jYXRl IGVub3VnaAorCSAqIHNwYWNlIGZvciB0aGUgY29tcHJlc3NlZCBwYXlsb2FkIHBsdXMgdGhlIHZh cmxlbmEgaGVhZGVyLgorCSAqLworCW1heF9zaXplID0gWlNURF9jb21wcmVzc0JvdW5kKHZhbHNp emUpOworCWlmIChtYXhfc2l6ZSA+IChTaXplKSAoTWF4QWxsb2NTaXplIC0gVkFSSERSU1pfQ09N UFJFU1NFRCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFN X0xJTUlUX0VYQ0VFREVEKSwKKwkJCQkgZXJybXNnKCJjb21wcmVzc2VkIGRhdGEgd291bGQgZXhj ZWVkIG1heGltdW0gYWxsb2NhdGlvbiBzaXplIikpKTsKKworCXRtcCA9IChzdHJ1Y3QgdmFybGVu YSAqKSBwYWxsb2MobWF4X3NpemUgKyBWQVJIRFJTWl9DT01QUkVTU0VEKTsKKworCXJjID0gWlNU RF9jb21wcmVzcygoY2hhciAqKSB0bXAgKyBWQVJIRFJTWl9DT01QUkVTU0VELCBtYXhfc2l6ZSwK KwkJCQkJICAgVkFSREFUQV9BTlkodmFsdWUpLCB2YWxzaXplLCBsZXZlbCk7CisJaWYgKFpTVERf aXNFcnJvcihyYykpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRB X0NPUlJVUFRFRCksCisJCQkJIGVycm1zZ19pbnRlcm5hbCgienN0ZCBjb21wcmVzc2lvbiBmYWls ZWQ6ICVzIiwKKwkJCQkJCQkJIFpTVERfZ2V0RXJyb3JOYW1lKHJjKSkpKTsKKworCW91dF9zaXpl ID0gKFNpemUpIHJjOworCisJLyoKKwkgKiBJZiB0aGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlv biBpcyBub3Qgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hbAorCSAqIHBheWxvYWQsIGdpdmUgdXAg YW5kIHJldHVybiBOVUxMIHNvIHRoYXQgY2FsbGVycyBjYW4gZmFsbCBiYWNrIHRvCisJICogc3Rv cmluZyB0aGUgZGF0dW0gdW5jb21wcmVzc2VkIG9yIHdpdGggYSBkaWZmZXJlbnQgbWV0aG9kLgor CSAqLworCWlmIChvdXRfc2l6ZSA+PSB2YWxzaXplKQorCXsKKwkJcGZyZWUodG1wKTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJU0VUX1ZBUlNJWkVfQ09NUFJFU1NFRCh0bXAsIG91dF9zaXplICsg VkFSSERSU1pfQ09NUFJFU1NFRCk7CisKKwlyZXR1cm4gdG1wOworI2VuZGlmCQkJCQkJCS8qIFVT RV9aU1REICovCit9CisKK3N0cnVjdCB2YXJsZW5hICoKK3pzdGRfY29tcHJlc3NfZGF0dW0oY29u c3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVlKQoreworI2lmbmRlZiBVU0VfWlNURAorCU5PX0NPTVBS RVNTSU9OX1NVUFBPUlQoInpzdGQiKTsKKwlyZXR1cm4gTlVMTDsJCQkJLyoga2VlcCBjb21waWxl ciBxdWlldCAqLworI2Vsc2UKKwlyZXR1cm4genN0ZF9jb21wcmVzc19kYXR1bV9pbnRlcm5hbCh2 YWx1ZSwgWlNURF9DTEVWRUxfREVGQVVMVCk7CisjZW5kaWYKK30KKworLyoKKyAqIERlY29tcHJl c3MgYSB2YXJsZW5hIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgWlNURC4KKyAqLworc3RydWN0 IHZhcmxlbmEgKgorenN0ZF9kZWNvbXByZXNzX2RhdHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2 YWx1ZSkKK3sKKyNpZm5kZWYgVVNFX1pTVEQKKwlOT19DT01QUkVTU0lPTl9TVVBQT1JUKCJ6c3Rk Iik7CisJcmV0dXJuIE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKyNlbHNlCisJ c3RydWN0IHZhcmxlbmEgKnJlc3VsdDsKKwlTaXplCQlyYXdzaXplOworCXNpemVfdAkJcmM7CisK KwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB1bmNvbXByZXNzZWQgZGF0YSAqLworCXJhd3Np emUgPSBWQVJEQVRBX0NPTVBSRVNTRURfR0VUX0VYVFNJWkUodmFsdWUpOworCXJlc3VsdCA9IChz dHJ1Y3QgdmFybGVuYSAqKSBwYWxsb2MocmF3c2l6ZSArIFZBUkhEUlNaKTsKKworCXJjID0gWlNU RF9kZWNvbXByZXNzKFZBUkRBVEEocmVzdWx0KSwgcmF3c2l6ZSwKKwkJCQkJCSAoY2hhciAqKSB2 YWx1ZSArIFZBUkhEUlNaX0NPTVBSRVNTRUQsCisJCQkJCQkgVkFSU0laRSh2YWx1ZSkgLSBWQVJI RFJTWl9DT01QUkVTU0VEKTsKKwlpZiAoWlNURF9pc0Vycm9yKHJjKSB8fCByYyAhPSByYXdzaXpl KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQp LAorCQkJCSBlcnJtc2dfaW50ZXJuYWwoImNvbXByZXNzZWQgenN0ZCBkYXRhIGlzIGNvcnJ1cHQg b3IgdHJ1bmNhdGVkIikpKTsKKworCVNFVF9WQVJTSVpFKHJlc3VsdCwgcmF3c2l6ZSArIFZBUkhE UlNaKTsKKworCXJldHVybiByZXN1bHQ7CisjZW5kaWYJCQkJCQkJLyogVVNFX1pTVEQgKi8KK30K KworLyoKKyAqIERlY29tcHJlc3MgcGFydCBvZiBhIHZhcmxlbmEgdGhhdCB3YXMgY29tcHJlc3Nl ZCB1c2luZyBaU1RELgorICoKKyAqIEF0IGxlYXN0IGluaXRpYWxseSB3ZSBkb24ndCB0cnkgdG8g YmUgY2xldmVyIHdpdGggc3RyZWFtaW5nIHNsaWNlCisgKiBkZWNvbXByZXNzaW9uIGhlcmU7IGlu c3RlYWQgd2UganVzdCBkZWNvbXByZXNzIHRoZSBmdWxsIGRhdHVtIGFuZAorICogbGV0IGhpZ2hl ciBsYXllcnMgcGVyZm9ybSB0aGUgc2xpY2luZy4gIENhbGxlcnMgc2hvdWxkIHByZWZlciB0aGUK KyAqIHJlZ3VsYXIgenN0ZF9kZWNvbXByZXNzX2RhdHVtKCkgd2hlbiB0aGV5IGtub3cgdGhleSBu ZWVkIHRoZSB3aG9sZQorICogdmFsdWUgYW55d2F5LgorICovCitzdHJ1Y3QgdmFybGVuYSAqCit6 c3RkX2RlY29tcHJlc3NfZGF0dW1fc2xpY2UoY29uc3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVlLCBp bnQzMiBzbGljZWxlbmd0aCkKK3sKKwkvKiBGb3Igbm93LCBqdXN0IGZhbGwgYmFjayB0byBmdWxs IGRlY29tcHJlc3Npb24uICovCisJKHZvaWQpIHNsaWNlbGVuZ3RoOworCXJldHVybiB6c3RkX2Rl Y29tcHJlc3NfZGF0dW0odmFsdWUpOworfQorCiAvKgogICogQ29tcHJlc3Npb25OYW1lVG9NZXRo b2QgLSBHZXQgY29tcHJlc3Npb24gbWV0aG9kIGZyb20gY29tcHJlc3Npb24gbmFtZQogICoKQEAg LTI5Myw2ICs0NzEsMTMgQEAgQ29tcHJlc3Npb25OYW1lVG9NZXRob2QoY29uc3QgY2hhciAqY29t cHJlc3Npb24pCiAjZW5kaWYKIAkJcmV0dXJuIFRPQVNUX0xaNF9DT01QUkVTU0lPTjsKIAl9CisJ ZWxzZSBpZiAoc3RyY21wKGNvbXByZXNzaW9uLCAienN0ZCIpID09IDApCisJeworI2lmbmRlZiBV U0VfWlNURAorCQlOT19DT01QUkVTU0lPTl9TVVBQT1JUKCJ6c3RkIik7CisjZW5kaWYKKwkJcmV0 dXJuIFRPQVNUX1pTVERfQ09NUFJFU1NJT047CisJfQogCiAJcmV0dXJuIEludmFsaWRDb21wcmVz c2lvbk1ldGhvZDsKIH0KQEAgLTMwOSw2ICs0OTQsOCBAQCBHZXRDb21wcmVzc2lvbk1ldGhvZE5h bWUoY2hhciBtZXRob2QpCiAJCQlyZXR1cm4gInBnbHoiOwogCQljYXNlIFRPQVNUX0xaNF9DT01Q UkVTU0lPTjoKIAkJCXJldHVybiAibHo0IjsKKwkJY2FzZSBUT0FTVF9aU1REX0NPTVBSRVNTSU9O OgorCQkJcmV0dXJuICJ6c3RkIjsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJpbnZhbGlk IGNvbXByZXNzaW9uIG1ldGhvZCAlYyIsIG1ldGhvZCk7CiAJCQlyZXR1cm4gTlVMTDsJCS8qIGtl ZXAgY29tcGlsZXIgcXVpZXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21t b24vdG9hc3RfaW50ZXJuYWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2lu dGVybmFscy5jCmluZGV4IGQwNmFmODJkZTE1Li4wMzljY2M0MjI0OSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVybmFscy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5j bHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwdG9hc3QuaCIKICNp bmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfY29tcHJlc3Np b24uaCIKICNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKQEAgLTcxLDYgKzcyLDkg QEAgdG9hc3RfY29tcHJlc3NfZGF0dW0oRGF0dW0gdmFsdWUsIGNoYXIgY21ldGhvZCkKIAkJCXRt cCA9IGx6NF9jb21wcmVzc19kYXR1bSgoY29uc3Qgc3RydWN0IHZhcmxlbmEgKikgRGF0dW1HZXRQ b2ludGVyKHZhbHVlKSk7CiAJCQljbWlkID0gVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEOwogCQkJ YnJlYWs7CisJCWNhc2UgVE9BU1RfWlNURF9DT01QUkVTU0lPTjoKKwkJCS8qIHpzdGQgdXNlcyBl eHRlcm5hbCBzdG9yYWdlIG9ubHk7IGhhbmRsZWQgYnkgdG9hc3Rfc2F2ZV9kYXR1bSAqLworCQkJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1Is ICJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAlYyIsIGNtZXRob2QpOwogCX0KQEAgLTExMywx MSArMTE3LDEzIEBAIHRvYXN0X2NvbXByZXNzX2RhdHVtKERhdHVtIHZhbHVlLCBjaGFyIGNtZXRo b2QpCiAgKiB2YWx1ZTogZGF0dW0gdG8gYmUgcHVzaGVkIHRvIHRvYXN0IHN0b3JhZ2UKICAqIG9s ZGV4dGVybmFsOiBpZiBub3QgTlVMTCwgdG9hc3QgcG9pbnRlciBwcmV2aW91c2x5IHJlcHJlc2Vu dGluZyB0aGUgZGF0dW0KICAqIG9wdGlvbnM6IG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIGhlYXBf aW5zZXJ0KCkgZm9yIHRvYXN0IHJvd3MKKyAqIGNtZXRob2Q6IGNvbXByZXNzaW9uIG1ldGhvZCB0 byB1c2UgZm9yIHVuY29tcHJlc3NlZCBkYXRhCiAgKiAtLS0tLS0tLS0tCiAgKi8KIERhdHVtCiB0 b2FzdF9zYXZlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFsdWUsCi0JCQkJIHN0cnVjdCB2 YXJsZW5hICpvbGRleHRlcm5hbCwgaW50IG9wdGlvbnMpCisJCQkJIHN0cnVjdCB2YXJsZW5hICpv bGRleHRlcm5hbCwgaW50IG9wdGlvbnMsCisJCQkJIGNoYXIgY21ldGhvZCkKIHsKIAlSZWxhdGlv bgl0b2FzdHJlbDsKIAlSZWxhdGlvbiAgICp0b2FzdGlkeHM7CkBAIC0xMjUsMTIgKzEzMSwxNiBA QCB0b2FzdF9zYXZlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFsdWUsCiAJQ29tbWFuZElk CW15Y2lkID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKIAlzdHJ1Y3QgdmFybGVuYSAqcmVz dWx0OwogCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKKwlzdHJ1Y3QgdmFy YXR0X2V4dGVybmFsX2V4dGVuZGVkIHRvYXN0X3BvaW50ZXJfZXh0OwogCWludDMyCQljaHVua19z ZXEgPSAwOwogCWNoYXIJICAgKmRhdGFfcDsKIAlpbnQzMgkJZGF0YV90b2RvOwogCVBvaW50ZXIJ CWR2YWwgPSBEYXR1bUdldFBvaW50ZXIodmFsdWUpOwogCWludAkJCW51bV9pbmRleGVzOwogCWlu dAkJCXZhbGlkSW5kZXg7CisJYm9vbAkJdXNlX2V4dGVuZGVkID0gZmFsc2U7CisJdWludDgJCWV4 dF9tZXRob2QgPSAwOworCXN0cnVjdCB2YXJsZW5hICpjb21wcmVzc2VkX3RvX2ZyZWUgPSBOVUxM OwkvKiB0cmFjayBhbGxvY2F0ZWQgYnVmZmVyICovCiAKIAlBc3NlcnQoIVZBUkFUVF9JU19FWFRF Uk5BTChkdmFsKSk7CiAKQEAgLTE2NywyMyArMTc3LDk5IEBAIHRvYXN0X3NhdmVfZGF0dW0oUmVs YXRpb24gcmVsLCBEYXR1bSB2YWx1ZSwKIAl9CiAJZWxzZSBpZiAoVkFSQVRUX0lTX0NPTVBSRVNT RUQoZHZhbCkpCiAJeworCQlUb2FzdENvbXByZXNzaW9uSWQgY21pZDsKKwogCQlkYXRhX3AgPSBW QVJEQVRBKGR2YWwpOwogCQlkYXRhX3RvZG8gPSBWQVJTSVpFKGR2YWwpIC0gVkFSSERSU1o7CiAJ CS8qIHJhd3NpemUgaW4gYSBjb21wcmVzc2VkIGRhdHVtIGlzIGp1c3QgdGhlIHNpemUgb2YgdGhl IHBheWxvYWQgKi8KIAkJdG9hc3RfcG9pbnRlci52YV9yYXdzaXplID0gVkFSREFUQV9DT01QUkVT U0VEX0dFVF9FWFRTSVpFKGR2YWwpICsgVkFSSERSU1o7CiAKKwkJLyogR2V0IGNvbXByZXNzaW9u IG1ldGhvZCBmcm9tIGNvbXByZXNzZWQgZGF0dW0gKi8KKwkJY21pZCA9IFZBUkRBVEFfQ09NUFJF U1NFRF9HRVRfQ09NUFJFU1NfTUVUSE9EKGR2YWwpOworCisJCS8qIERlY2lkZSB3aGV0aGVyIHRv IHVzZSBleHRlbmRlZCAyMC1ieXRlIG9yIGxlZ2FjeSAxNi1ieXRlIGZvcm1hdCAqLworCQlpZiAo Y21pZCA9PSBUT0FTVF9FWFRFTkRFRF9DT01QUkVTU0lPTl9JRCkKKwkJeworCQkJdXNlX2V4dGVu ZGVkID0gdHJ1ZTsKKwkJCWV4dF9tZXRob2QgPSBUT0FTVF9aU1REX0VYVF9NRVRIT0Q7CisJCX0K KwkJZWxzZSBpZiAodXNlX2V4dGVuZGVkX3RvYXN0X2hlYWRlcikKKwkJeworCQkJLyogVXNlIGV4 dGVuZGVkIGZvcm1hdCBmb3IgcGdsei9sejQgd2hlbiBHVUMgaXMgZW5hYmxlZCAqLworCQkJdXNl X2V4dGVuZGVkID0gdHJ1ZTsKKwkJCXN3aXRjaCAoY21pZCkKKwkJCXsKKwkJCQljYXNlIFRPQVNU X1BHTFpfQ09NUFJFU1NJT05fSUQ6CisJCQkJCWV4dF9tZXRob2QgPSBUT0FTVF9QR0xaX0VYVF9N RVRIT0Q7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEOgor CQkJCQlleHRfbWV0aG9kID0gVE9BU1RfTFo0X0VYVF9NRVRIT0Q7CisJCQkJCWJyZWFrOworCQkJ CWRlZmF1bHQ6CisJCQkJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQgZmFsbCBiYWNrIHRvIGxl Z2FjeSBmb3JtYXQgKi8KKwkJCQkJdXNlX2V4dGVuZGVkID0gZmFsc2U7CisJCQkJCWJyZWFrOwor CQkJfQorCQl9CisKIAkJLyogc2V0IGV4dGVybmFsIHNpemUgYW5kIGNvbXByZXNzaW9uIG1ldGhv ZCAqLwotCQlWQVJBVFRfRVhURVJOQUxfU0VUX1NJWkVfQU5EX0NPTVBSRVNTX01FVEhPRCh0b2Fz dF9wb2ludGVyLCBkYXRhX3RvZG8sCi0JCQkJCQkJCQkJCQkJIFZBUkRBVEFfQ09NUFJFU1NFRF9H RVRfQ09NUFJFU1NfTUVUSE9EKGR2YWwpKTsKKwkJaWYgKHVzZV9leHRlbmRlZCkKKwkJCVZBUkFU VF9FWFRFUk5BTF9TRVRfU0laRV9BTkRfQ09NUFJFU1NfTUVUSE9EKHRvYXN0X3BvaW50ZXIsIGRh dGFfdG9kbywKKwkJCQkJCQkJCQkJCQkJVkFSQVRUX0VYVEVSTkFMX0VYVEVOREVEX0NNSUQpOwor CQllbHNlCisJCQlWQVJBVFRfRVhURVJOQUxfU0VUX1NJWkVfQU5EX0NPTVBSRVNTX01FVEhPRCh0 b2FzdF9wb2ludGVyLCBkYXRhX3RvZG8sIGNtaWQpOworCiAJCS8qIEFzc2VydCB0aGF0IHRoZSBu dW1iZXJzIGxvb2sgbGlrZSBpdCdzIGNvbXByZXNzZWQgKi8KIAkJQXNzZXJ0KFZBUkFUVF9FWFRF Uk5BTF9JU19DT01QUkVTU0VEKHRvYXN0X3BvaW50ZXIpKTsKIAl9CiAJZWxzZQogCXsKLQkJZGF0 YV9wID0gVkFSREFUQShkdmFsKTsKLQkJZGF0YV90b2RvID0gVkFSU0laRShkdmFsKSAtIFZBUkhE UlNaOwotCQl0b2FzdF9wb2ludGVyLnZhX3Jhd3NpemUgPSBWQVJTSVpFKGR2YWwpOwotCQl0b2Fz dF9wb2ludGVyLnZhX2V4dGluZm8gPSBkYXRhX3RvZG87CisJCS8qCisJCSAqIFVuY29tcHJlc3Nl ZCBkYXRhLiAgSWYgdGhlIGNhbGxlciBzcGVjaWZpZWQgenN0ZCBjb21wcmVzc2lvbiwKKwkJICog dHJ5IHRvIGNvbXByZXNzIGl0IG5vdyBiZWZvcmUgc3RvcmluZyB0byB0aGUgVE9BU1QgdGFibGUu CisJCSAqLworCQlpZiAoY21ldGhvZCA9PSBUT0FTVF9aU1REX0NPTVBSRVNTSU9OKQorCQl7CisJ CQlzdHJ1Y3QgdmFybGVuYSAqY29tcHJlc3NlZDsKKwkJCWludDMyCQlyYXdzaXplOworCisJCQly YXdzaXplID0gVkFSU0laRV9BTllfRVhIRFIoKGNvbnN0IHN0cnVjdCB2YXJsZW5hICopIGR2YWwp OworCQkJY29tcHJlc3NlZCA9IHpzdGRfY29tcHJlc3NfZGF0dW0oKGNvbnN0IHN0cnVjdCB2YXJs ZW5hICopIGR2YWwpOworCQkJaWYgKGNvbXByZXNzZWQgIT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBT ZXQgY29tcHJlc3Npb24gbWV0aG9kIGluIHZhX3RjaW5mbyAqLworCQkJCVRPQVNUX0NPTVBSRVNT X1NFVF9TSVpFX0FORF9DT01QUkVTU19NRVRIT0QoY29tcHJlc3NlZCwgcmF3c2l6ZSwKKwkJCQkJ CQkJCQkJCQkJCVRPQVNUX0VYVEVOREVEX0NPTVBSRVNTSU9OX0lEKTsKKworCQkJCS8qIENvbXBy ZXNzaW9uIHN1Y2NlZWRlZCAtIHVzZSB0aGUgY29tcHJlc3NlZCBkYXRhICovCisJCQkJY29tcHJl c3NlZF90b19mcmVlID0gY29tcHJlc3NlZDsJLyogdHJhY2sgZm9yIGNsZWFudXAgKi8KKwkJCQlk dmFsID0gKFBvaW50ZXIpIGNvbXByZXNzZWQ7CisJCQkJZGF0YV9wID0gVkFSREFUQShjb21wcmVz c2VkKTsKKwkJCQlkYXRhX3RvZG8gPSBWQVJTSVpFKGNvbXByZXNzZWQpIC0gVkFSSERSU1o7CisJ CQkJdG9hc3RfcG9pbnRlci52YV9yYXdzaXplID0gcmF3c2l6ZSArIFZBUkhEUlNaOworCisJCQkJ LyogVXNlIGV4dGVuZGVkIGZvcm1hdCBmb3IgenN0ZCAqLworCQkJCXVzZV9leHRlbmRlZCA9IHRy dWU7CisJCQkJZXh0X21ldGhvZCA9IFRPQVNUX1pTVERfRVhUX01FVEhPRDsKKwkJCQlWQVJBVFRf RVhURVJOQUxfU0VUX1NJWkVfQU5EX0NPTVBSRVNTX01FVEhPRCh0b2FzdF9wb2ludGVyLCBkYXRh X3RvZG8sCisJCQkJCQkJCQkJCQkJCQlWQVJBVFRfRVhURVJOQUxfRVhURU5ERURfQ01JRCk7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogQ29tcHJlc3Npb24gZmFpbGVkIG9yIGRpZG4ndCBz YXZlIHNwYWNlIC0gc3RvcmUgdW5jb21wcmVzc2VkICovCisJCQkJZGF0YV9wID0gVkFSREFUQShk dmFsKTsKKwkJCQlkYXRhX3RvZG8gPSBWQVJTSVpFKGR2YWwpIC0gVkFSSERSU1o7CisJCQkJdG9h c3RfcG9pbnRlci52YV9yYXdzaXplID0gVkFSU0laRShkdmFsKTsKKwkJCQl0b2FzdF9wb2ludGVy LnZhX2V4dGluZm8gPSBkYXRhX3RvZG87CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlkYXRh X3AgPSBWQVJEQVRBKGR2YWwpOworCQkJZGF0YV90b2RvID0gVkFSU0laRShkdmFsKSAtIFZBUkhE UlNaOworCQkJdG9hc3RfcG9pbnRlci52YV9yYXdzaXplID0gVkFSU0laRShkdmFsKTsKKwkJCXRv YXN0X3BvaW50ZXIudmFfZXh0aW5mbyA9IGRhdGFfdG9kbzsKKwkJfQogCX0KIAogCS8qCkBAIC0y MjUsMTUgKzMxMSwzNiBAQCB0b2FzdF9zYXZlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFs dWUsCiAJCXRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZCA9IEludmFsaWRPaWQ7CiAJCWlmIChvbGRl eHRlcm5hbCAhPSBOVUxMKQogCQl7Ci0JCQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIG9sZF90b2Fz dF9wb2ludGVyOworCQkJT2lkCQkJb2xkX3RvYXN0cmVsaWQ7CisJCQlPaWQJCQlvbGRfdmFsdWVp ZDsKIAogCQkJQXNzZXJ0KFZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0sob2xkZXh0ZXJuYWwpKTsK LQkJCS8qIE11c3QgY29weSB0byBhY2Nlc3MgYWxpZ25lZCBmaWVsZHMgKi8KLQkJCVZBUkFUVF9F WFRFUk5BTF9HRVRfUE9JTlRFUihvbGRfdG9hc3RfcG9pbnRlciwgb2xkZXh0ZXJuYWwpOwotCQkJ aWYgKG9sZF90b2FzdF9wb2ludGVyLnZhX3RvYXN0cmVsaWQgPT0gcmVsLT5yZF90b2FzdG9pZCkK KworCQkJLyoKKwkJCSAqIEV4dHJhY3QgdG9hc3RyZWxpZCBhbmQgdmFsdWVpZCBmcm9tIHRoZSBv bGQgcG9pbnRlci4KKwkJCSAqIEhhbmRsZSBib3RoIGxlZ2FjeSAxNi1ieXRlIGFuZCBleHRlbmRl ZCAyMC1ieXRlIGZvcm1hdHMuCisJCQkgKi8KKwkJCWlmIChWQVJUQUdfRVhURVJOQUwob2xkZXh0 ZXJuYWwpID09IFZBUlRBR19PTkRJU0tfRVhURU5ERUQpCisJCQl7CisJCQkJc3RydWN0IHZhcmF0 dF9leHRlcm5hbF9leHRlbmRlZCBvbGRfdG9hc3RfcG9pbnRlcl9leHQ7CisKKwkJCQlWQVJBVFRf RVhURVJOQUxfR0VUX1BPSU5URVJfRVhURU5ERUQob2xkX3RvYXN0X3BvaW50ZXJfZXh0LCBvbGRl eHRlcm5hbCk7CisJCQkJb2xkX3RvYXN0cmVsaWQgPSBvbGRfdG9hc3RfcG9pbnRlcl9leHQudmFf dG9hc3RyZWxpZDsKKwkJCQlvbGRfdmFsdWVpZCA9IG9sZF90b2FzdF9wb2ludGVyX2V4dC52YV92 YWx1ZWlkOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwg b2xkX3RvYXN0X3BvaW50ZXI7CisKKwkJCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIob2xk X3RvYXN0X3BvaW50ZXIsIG9sZGV4dGVybmFsKTsKKwkJCQlvbGRfdG9hc3RyZWxpZCA9IG9sZF90 b2FzdF9wb2ludGVyLnZhX3RvYXN0cmVsaWQ7CisJCQkJb2xkX3ZhbHVlaWQgPSBvbGRfdG9hc3Rf cG9pbnRlci52YV92YWx1ZWlkOworCQkJfQorCisJCQlpZiAob2xkX3RvYXN0cmVsaWQgPT0gcmVs LT5yZF90b2FzdG9pZCkKIAkJCXsKIAkJCQkvKiBUaGlzIHZhbHVlIGNhbWUgZnJvbSB0aGUgb2xk IHRvYXN0IHRhYmxlOyByZXVzZSBpdHMgT0lEICovCi0JCQkJdG9hc3RfcG9pbnRlci52YV92YWx1 ZWlkID0gb2xkX3RvYXN0X3BvaW50ZXIudmFfdmFsdWVpZDsKKwkJCQl0b2FzdF9wb2ludGVyLnZh X3ZhbHVlaWQgPSBvbGRfdmFsdWVpZDsKIAogCQkJCS8qCiAJCQkJICogVGhlcmUgaXMgYSBjb3Ju ZXIgY2FzZSBoZXJlOiB0aGUgdGFibGUgcmV3cml0ZSBtaWdodCBoYXZlCkBAIC0zNDgsNiArNDU1 LDEwIEBAIHRvYXN0X3NhdmVfZGF0dW0oUmVsYXRpb24gcmVsLCBEYXR1bSB2YWx1ZSwKIAkJZGF0 YV9wICs9IGNodW5rX3NpemU7CiAJfQogCisJLyogRnJlZSBjb21wcmVzc2VkIGJ1ZmZlciBpZiB3 ZSBhbGxvY2F0ZWQgb25lICovCisJaWYgKGNvbXByZXNzZWRfdG9fZnJlZSAhPSBOVUxMKQorCQlw ZnJlZShjb21wcmVzc2VkX3RvX2ZyZWUpOworCiAJLyoKIAkgKiBEb25lIC0gY2xvc2UgdG9hc3Qg cmVsYXRpb24gYW5kIGl0cyBpbmRleGVzIGJ1dCBrZWVwIHRoZSBsb2NrIHVudGlsCiAJICogY29t bWl0LCBzbyBhcyBhIGNvbmN1cnJlbnQgcmVpbmRleCBkb25lIGRpcmVjdGx5IG9uIHRoZSB0b2Fz dCByZWxhdGlvbgpAQCAtMzU2LDEyICs0NjcsMzUgQEAgdG9hc3Rfc2F2ZV9kYXR1bShSZWxhdGlv biByZWwsIERhdHVtIHZhbHVlLAogCXRvYXN0X2Nsb3NlX2luZGV4ZXModG9hc3RpZHhzLCBudW1f aW5kZXhlcywgTm9Mb2NrKTsKIAl0YWJsZV9jbG9zZSh0b2FzdHJlbCwgTm9Mb2NrKTsKIAotCS8q Ci0JICogQ3JlYXRlIHRoZSBUT0FTVCBwb2ludGVyIHZhbHVlIHRoYXQgd2UnbGwgcmV0dXJuCi0J ICovCi0JcmVzdWx0ID0gKHN0cnVjdCB2YXJsZW5hICopIHBhbGxvYyhUT0FTVF9QT0lOVEVSX1NJ WkUpOwotCVNFVF9WQVJUQUdfRVhURVJOQUwocmVzdWx0LCBWQVJUQUdfT05ESVNLKTsKLQltZW1j cHkoVkFSREFUQV9FWFRFUk5BTChyZXN1bHQpLCAmdG9hc3RfcG9pbnRlciwgc2l6ZW9mKHRvYXN0 X3BvaW50ZXIpKTsKKwkvKiBDcmVhdGUgdGhlIFRPQVNUIHBvaW50ZXIgdmFsdWUgdGhhdCB3ZSds bCByZXR1cm4gKi8KKwlpZiAodXNlX2V4dGVuZGVkKQorCXsKKwkJLyoKKwkJICogQnVpbGQgZXh0 ZW5kZWQgVE9BU1QgcG9pbnRlci4gIENvcHkgdGhlIGNvbW1vbiBmaWVsZHMgZnJvbQorCQkgKiB0 b2FzdF9wb2ludGVyLCB0aGVuIHNldCB0aGUgZXh0ZW5kZWQtZm9ybWF0LXNwZWNpZmljIGZpZWxk cy4KKwkJICovCisJCXRvYXN0X3BvaW50ZXJfZXh0LnZhX3Jhd3NpemUgPSB0b2FzdF9wb2ludGVy LnZhX3Jhd3NpemU7CisJCXRvYXN0X3BvaW50ZXJfZXh0LnZhX2V4dGluZm8gPSB0b2FzdF9wb2lu dGVyLnZhX2V4dGluZm87CisJCXRvYXN0X3BvaW50ZXJfZXh0LnZhX3ZhbHVlaWQgPSB0b2FzdF9w b2ludGVyLnZhX3ZhbHVlaWQ7CisJCXRvYXN0X3BvaW50ZXJfZXh0LnZhX3RvYXN0cmVsaWQgPSB0 b2FzdF9wb2ludGVyLnZhX3RvYXN0cmVsaWQ7CisKKwkJLyogU2V0IGV4dGVuZGVkIGZvcm1hdCBm aWVsZHMgKi8KKwkJdG9hc3RfcG9pbnRlcl9leHQudmFfZmxhZ3MgPSBUT0FTVF9FWFRfRkxBR19D T01QUkVTU0lPTjsKKwkJdG9hc3RfcG9pbnRlcl9leHQudmFfZGF0YVswXSA9IGV4dF9tZXRob2Q7 CisJCXRvYXN0X3BvaW50ZXJfZXh0LnZhX2RhdGFbMV0gPSAwOworCQl0b2FzdF9wb2ludGVyX2V4 dC52YV9kYXRhWzJdID0gMDsKKworCQlyZXN1bHQgPSAoc3RydWN0IHZhcmxlbmEgKikgcGFsbG9j KFRPQVNUX1BPSU5URVJfU0laRV9FWFRFTkRFRCk7CisJCVNFVF9WQVJUQUdfRVhURVJOQUwocmVz dWx0LCBWQVJUQUdfT05ESVNLX0VYVEVOREVEKTsKKwkJbWVtY3B5KFZBUkRBVEFfRVhURVJOQUwo cmVzdWx0KSwgJnRvYXN0X3BvaW50ZXJfZXh0LCBzaXplb2YodG9hc3RfcG9pbnRlcl9leHQpKTsK Kwl9CisJZWxzZQorCXsKKwkJLyogU3RhbmRhcmQgMTYtYnl0ZSBUT0FTVCBwb2ludGVyICovCisJ CXJlc3VsdCA9IChzdHJ1Y3QgdmFybGVuYSAqKSBwYWxsb2MoVE9BU1RfUE9JTlRFUl9TSVpFKTsK KwkJU0VUX1ZBUlRBR19FWFRFUk5BTChyZXN1bHQsIFZBUlRBR19PTkRJU0spOworCQltZW1jcHko VkFSREFUQV9FWFRFUk5BTChyZXN1bHQpLCAmdG9hc3RfcG9pbnRlciwgc2l6ZW9mKHRvYXN0X3Bv aW50ZXIpKTsKKwl9CiAKIAlyZXR1cm4gUG9pbnRlckdldERhdHVtKHJlc3VsdCk7CiB9CkBAIC0z NzcsNiArNTExLDcgQEAgdG9hc3RfZGVsZXRlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFs dWUsIGJvb2wgaXNfc3BlY3VsYXRpdmUpCiB7CiAJc3RydWN0IHZhcmxlbmEgKmF0dHIgPSAoc3Ry dWN0IHZhcmxlbmEgKikgRGF0dW1HZXRQb2ludGVyKHZhbHVlKTsKIAlzdHJ1Y3QgdmFyYXR0X2V4 dGVybmFsIHRvYXN0X3BvaW50ZXI7CisJc3RydWN0IHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCB0 b2FzdF9wb2ludGVyX2V4dDsKIAlSZWxhdGlvbgl0b2FzdHJlbDsKIAlSZWxhdGlvbiAgICp0b2Fz dGlkeHM7CiAJU2NhbktleURhdGEgdG9hc3RrZXk7CkBAIC0zODQsMTcgKzUxOSwzNiBAQCB0b2Fz dF9kZWxldGVfZGF0dW0oUmVsYXRpb24gcmVsLCBEYXR1bSB2YWx1ZSwgYm9vbCBpc19zcGVjdWxh dGl2ZSkKIAlIZWFwVHVwbGUJdG9hc3R0dXA7CiAJaW50CQkJbnVtX2luZGV4ZXM7CiAJaW50CQkJ dmFsaWRJbmRleDsKKwlPaWQJCQl0b2FzdHJlbGlkOworCU9pZAkJCXZhbHVlaWQ7CisJYm9vbAkJ aXNfZXh0ZW5kZWQ7CiAKIAlpZiAoIVZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0soYXR0cikpCiAJ CXJldHVybjsKIAotCS8qIE11c3QgY29weSB0byBhY2Nlc3MgYWxpZ25lZCBmaWVsZHMgKi8KLQlW QVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIodG9hc3RfcG9pbnRlciwgYXR0cik7CisJLyoKKwkg KiBNdXN0IGNvcHkgdG8gYWNjZXNzIGFsaWduZWQgZmllbGRzLiAgSGFuZGxlIGJvdGggbGVnYWN5 ICgxNi1ieXRlKSBhbmQKKwkgKiBleHRlbmRlZCAoMjAtYnl0ZSkgb24tZGlzayBUT0FTVCBwb2lu dGVycyBiYXNlZCBvbiB0aGUgdGFnLgorCSAqLworCWlzX2V4dGVuZGVkID0gKFZBUlRBR19FWFRF Uk5BTChhdHRyKSA9PSBWQVJUQUdfT05ESVNLX0VYVEVOREVEKTsKKworCWlmICghaXNfZXh0ZW5k ZWQpCisJeworCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIodG9hc3RfcG9pbnRlciwgYXR0 cik7CisJCXRvYXN0cmVsaWQgPSB0b2FzdF9wb2ludGVyLnZhX3RvYXN0cmVsaWQ7CisJCXZhbHVl aWQgPSB0b2FzdF9wb2ludGVyLnZhX3ZhbHVlaWQ7CisJfQorCWVsc2UKKwl7CisJCVZBUkFUVF9F WFRFUk5BTF9HRVRfUE9JTlRFUl9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCwgYXR0cik7CisJ CXRvYXN0cmVsaWQgPSB0b2FzdF9wb2ludGVyX2V4dC52YV90b2FzdHJlbGlkOworCQl2YWx1ZWlk ID0gdG9hc3RfcG9pbnRlcl9leHQudmFfdmFsdWVpZDsKKwl9CiAKIAkvKgogCSAqIE9wZW4gdGhl IHRvYXN0IHJlbGF0aW9uIGFuZCBpdHMgaW5kZXhlcwogCSAqLwotCXRvYXN0cmVsID0gdGFibGVf b3Blbih0b2FzdF9wb2ludGVyLnZhX3RvYXN0cmVsaWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXRv YXN0cmVsID0gdGFibGVfb3Blbih0b2FzdHJlbGlkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAogCS8q IEZldGNoIHZhbGlkIHJlbGF0aW9uIHVzZWQgZm9yIHByb2Nlc3MgKi8KIAl2YWxpZEluZGV4ID0g dG9hc3Rfb3Blbl9pbmRleGVzKHRvYXN0cmVsLApAQCAtNDA4LDcgKzU2Miw3IEBAIHRvYXN0X2Rl bGV0ZV9kYXR1bShSZWxhdGlvbiByZWwsIERhdHVtIHZhbHVlLCBib29sIGlzX3NwZWN1bGF0aXZl KQogCVNjYW5LZXlJbml0KCZ0b2FzdGtleSwKIAkJCQkoQXR0ck51bWJlcikgMSwKIAkJCQlCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCi0JCQkJT2JqZWN0SWRHZXREYXR1bSh0b2FzdF9w b2ludGVyLnZhX3ZhbHVlaWQpKTsKKwkJCQlPYmplY3RJZEdldERhdHVtKHZhbHVlaWQpKTsKIAog CS8qCiAJICogRmluZCBhbGwgdGhlIGNodW5rcy4gIChXZSBkb24ndCBhY3R1YWxseSBjYXJlIHdo ZXRoZXIgd2Ugc2VlIHRoZW0gaW4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJs ZS90b2FzdF9oZWxwZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90b2FzdF9oZWxwZXIu YwppbmRleCAxMWY5N2Q2NTM2Ny4uMjEzODEwMDRiYTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90YWJsZS90b2FzdF9oZWxwZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdG9hc3RfaGVscGVyLmMKQEAgLTI2MSw3ICsyNjEsNyBAQCB0b2FzdF90dXBsZV9leHRlcm5h bGl6ZShUb2FzdFR1cGxlQ29udGV4dCAqdHRjLCBpbnQgYXR0cmlidXRlLCBpbnQgb3B0aW9ucykK IAogCWF0dHItPnRhaV9jb2xmbGFncyB8PSBUT0FTVENPTF9JR05PUkU7CiAJKnZhbHVlID0gdG9h c3Rfc2F2ZV9kYXR1bSh0dGMtPnR0Y19yZWwsIG9sZF92YWx1ZSwgYXR0ci0+dGFpX29sZGV4dGVy bmFsLAotCQkJCQkJCSAgb3B0aW9ucyk7CisJCQkJCQkJICBvcHRpb25zLCBhdHRyLT50YWlfY29t cHJlc3Npb24pOwogCWlmICgoYXR0ci0+dGFpX2NvbGZsYWdzICYgVE9BU1RDT0xfTkVFRFNfRlJF RSkgIT0gMCkKIAkJcGZyZWUoRGF0dW1HZXRQb2ludGVyKG9sZF92YWx1ZSkpOwogCWF0dHItPnRh aV9jb2xmbGFncyB8PSBUT0FTVENPTF9ORUVEU19GUkVFOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCBmMThjNmZiNTJiNS4uOWU4M2Fi NTk3OGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRl cmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1 ZmZlci5jCkBAIC01MTM3LDExICs1MTM3LDE3IEBAIFJlb3JkZXJCdWZmZXJUb2FzdFJlcGxhY2Uo UmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCQkvKiB2YV9yYXdz aXplIGlzIHRoZSBzaXplIG9mIHRoZSBvcmlnaW5hbCBkYXR1bSAtLSBpbmNsdWRpbmcgaGVhZGVy ICovCiAJCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKKwkJc3RydWN0IHZh cmF0dF9leHRlcm5hbF9leHRlbmRlZCB0b2FzdF9wb2ludGVyX2V4dDsKIAkJc3RydWN0IHZhcmF0 dF9pbmRpcmVjdCByZWRpcmVjdF9wb2ludGVyOwogCQlzdHJ1Y3QgdmFybGVuYSAqbmV3X2RhdHVt ID0gTlVMTDsKIAkJc3RydWN0IHZhcmxlbmEgKnJlY29uc3RydWN0ZWQ7CiAJCWRsaXN0X2l0ZXIJ aXQ7CiAJCVNpemUJCWRhdGFfZG9uZSA9IDA7CisJCWJvb2wJCWlzX2V4dGVuZGVkOworCQlPaWQJ CQl2YWx1ZWlkOworCQlpbnQzMgkJcmF3c2l6ZTsKKwkJaW50MzIJCWV4dHNpemU7CisJCWJvb2wJ CWlzX2NvbXByZXNzZWQ7CiAKIAkJaWYgKGF0dHItPmF0dGlzZHJvcHBlZCkKIAkJCWNvbnRpbnVl OwpAQCAtNTE2MSwxNCArNTE2NywzNiBAQCBSZW9yZGVyQnVmZmVyVG9hc3RSZXBsYWNlKFJlb3Jk ZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCWlmICghVkFSQVRUX0lTX0VY VEVSTkFMKHZhcmxlbmEpKQogCQkJY29udGludWU7CiAKLQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9Q T0lOVEVSKHRvYXN0X3BvaW50ZXIsIHZhcmxlbmEpOworCQkvKgorCQkgKiBIYW5kbGUgYm90aCBs ZWdhY3kgMTYtYnl0ZSBhbmQgZXh0ZW5kZWQgMjAtYnl0ZSBvbi1kaXNrIFRPQVNUCisJCSAqIHBv aW50ZXJzIGJhc2VkIG9uIHRoZSB0YWcuCisJCSAqLworCQlpc19leHRlbmRlZCA9IFZBUkFUVF9J U19FWFRFUk5BTF9PTkRJU0sodmFybGVuYSkgJiYKKwkJCQkJICAoVkFSVEFHX0VYVEVSTkFMKHZh cmxlbmEpID09IFZBUlRBR19PTkRJU0tfRVhURU5ERUQpOworCisJCWlmIChpc19leHRlbmRlZCkK KwkJeworCQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSX0VYVEVOREVEKHRvYXN0X3BvaW50 ZXJfZXh0LCB2YXJsZW5hKTsKKwkJCXZhbHVlaWQgPSB0b2FzdF9wb2ludGVyX2V4dC52YV92YWx1 ZWlkOworCQkJcmF3c2l6ZSA9IHRvYXN0X3BvaW50ZXJfZXh0LnZhX3Jhd3NpemU7CisJCQlleHRz aXplID0gVkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRTSVpFX0VYVEVOREVEKHRvYXN0X3BvaW50ZXJf ZXh0KTsKKwkJCWlzX2NvbXByZXNzZWQgPSBWQVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRF9F WFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlWQVJBVFRf RVhURVJOQUxfR0VUX1BPSU5URVIodG9hc3RfcG9pbnRlciwgdmFybGVuYSk7CisJCQl2YWx1ZWlk ID0gdG9hc3RfcG9pbnRlci52YV92YWx1ZWlkOworCQkJcmF3c2l6ZSA9IHRvYXN0X3BvaW50ZXIu dmFfcmF3c2l6ZTsKKwkJCWV4dHNpemUgPSBWQVJBVFRfRVhURVJOQUxfR0VUX0VYVFNJWkUodG9h c3RfcG9pbnRlcik7CisJCQlpc19jb21wcmVzc2VkID0gVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBS RVNTRUQodG9hc3RfcG9pbnRlcik7CisJCX0KIAogCQkvKgogCQkgKiBDaGVjayB3aGV0aGVyIHRo ZSB0b2FzdCB0dXBsZSBjaGFuZ2VkLCByZXBsYWNlIGlmIHNvLgogCQkgKi8KIAkJZW50ID0gKFJl b3JkZXJCdWZmZXJUb2FzdEVudCAqKQogCQkJaGFzaF9zZWFyY2godHhuLT50b2FzdF9oYXNoLAot CQkJCQkJJnRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZCwKKwkJCQkJCSZ2YWx1ZWlkLAogCQkJCQkJ SEFTSF9GSU5ELAogCQkJCQkJTlVMTCk7CiAJCWlmIChlbnQgPT0gTlVMTCkKQEAgLTUxNzksNyAr NTIwNyw3IEBAIFJlb3JkZXJCdWZmZXJUb2FzdFJlcGxhY2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCQlmcmVlW25hdHRdID0gdHJ1ZTsKIAotCQlyZWNvbnN0 cnVjdGVkID0gcGFsbG9jMCh0b2FzdF9wb2ludGVyLnZhX3Jhd3NpemUpOworCQlyZWNvbnN0cnVj dGVkID0gcGFsbG9jMChyYXdzaXplKTsKIAogCQllbnQtPnJlY29uc3RydWN0ZWQgPSByZWNvbnN0 cnVjdGVkOwogCkBAIC01MjA0LDEwICs1MjMyLDEwIEBAIFJlb3JkZXJCdWZmZXJUb2FzdFJlcGxh Y2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkgICBWQVJT SVpFKGNodW5rKSAtIFZBUkhEUlNaKTsKIAkJCWRhdGFfZG9uZSArPSBWQVJTSVpFKGNodW5rKSAt IFZBUkhEUlNaOwogCQl9Ci0JCUFzc2VydChkYXRhX2RvbmUgPT0gVkFSQVRUX0VYVEVSTkFMX0dF VF9FWFRTSVpFKHRvYXN0X3BvaW50ZXIpKTsKKwkJQXNzZXJ0KGRhdGFfZG9uZSA9PSBleHRzaXpl KTsKIAogCQkvKiBtYWtlIHN1cmUgaXRzIG1hcmtlZCBhcyBjb21wcmVzc2VkIG9yIG5vdCAqLwot CQlpZiAoVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRUQodG9hc3RfcG9pbnRlcikpCisJCWlm IChpc19jb21wcmVzc2VkKQogCQkJU0VUX1ZBUlNJWkVfQ09NUFJFU1NFRChyZWNvbnN0cnVjdGVk LCBkYXRhX2RvbmUgKyBWQVJIRFJTWik7CiAJCWVsc2UKIAkJCVNFVF9WQVJTSVpFKHJlY29uc3Ry dWN0ZWQsIGRhdGFfZG9uZSArIFZBUkhEUlNaKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC92YXJsZW5hLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCmluZGV4 IGJhYTViNDRlYThkLi43MWE0MTBkYzYxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3ZhcmxlbmEuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCkBAIC00 MjA2LDYgKzQyMDYsMTAgQEAgcGdfY29sdW1uX2NvbXByZXNzaW9uKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCWNhc2UgVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEOgogCQkJcmVzdWx0ID0gImx6NCI7CiAJ CQlicmVhazsKKwkJY2FzZSBUT0FTVF9FWFRFTkRFRF9DT01QUkVTU0lPTl9JRDoKKwkJCS8qIEV4 dGVuZGVkIGZvcm1hdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB6c3RkICovCisJCQlyZXN1bHQg PSAienN0ZCI7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJpbnZhbGlk IGNvbXByZXNzaW9uIG1ldGhvZCBpZCAlZCIsIGNtaWQpOwogCX0KQEAgLTQyMjIsNyArNDIyNiw3 IEBAIHBnX2NvbHVtbl90b2FzdF9jaHVua19pZChQR19GVU5DVElPTl9BUkdTKQogewogCWludAkJ CXR5cGxlbjsKIAlzdHJ1Y3QgdmFybGVuYSAqYXR0cjsKLQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFs IHRvYXN0X3BvaW50ZXI7CisJT2lkCQkJdmFsdWVpZDsKIAogCS8qIE9uIGZpcnN0IGNhbGwsIGdl dCB0aGUgaW5wdXQgdHlwZSdzIHR5cGxlbiwgYW5kIHNhdmUgYXQgKmZuX2V4dHJhICovCiAJaWYg KGZjaW5mby0+ZmxpbmZvLT5mbl9leHRyYSA9PSBOVUxMKQpAQCAtNDI0OSw5ICs0MjUzLDI1IEBA IHBnX2NvbHVtbl90b2FzdF9jaHVua19pZChQR19GVU5DVElPTl9BUkdTKQogCWlmICghVkFSQVRU X0lTX0VYVEVSTkFMX09ORElTSyhhdHRyKSkKIAkJUEdfUkVUVVJOX05VTEwoKTsKIAotCVZBUkFU VF9FWFRFUk5BTF9HRVRfUE9JTlRFUih0b2FzdF9wb2ludGVyLCBhdHRyKTsKKwkvKgorCSAqIEhh bmRsZSBib3RoIGxlZ2FjeSAxNi1ieXRlIGFuZCBleHRlbmRlZCAyMC1ieXRlIG9uLWRpc2sgVE9B U1QgcG9pbnRlcnMuCisJICovCisJaWYgKFZBUlRBR19FWFRFUk5BTChhdHRyKSA9PSBWQVJUQUdf T05ESVNLX0VYVEVOREVEKQorCXsKKwkJc3RydWN0IHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCB0 b2FzdF9wb2ludGVyX2V4dDsKKworCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVJfRVhURU5E RUQodG9hc3RfcG9pbnRlcl9leHQsIGF0dHIpOworCQl2YWx1ZWlkID0gdG9hc3RfcG9pbnRlcl9l eHQudmFfdmFsdWVpZDsKKwl9CisJZWxzZQorCXsKKwkJc3RydWN0IHZhcmF0dF9leHRlcm5hbCB0 b2FzdF9wb2ludGVyOworCisJCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUih0b2FzdF9wb2lu dGVyLCBhdHRyKTsKKwkJdmFsdWVpZCA9IHRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZDsKKwl9CiAK LQlQR19SRVRVUk5fT0lEKHRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZCk7CisJUEdfUkVUVVJOX09J RCh2YWx1ZWlkKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVy cy5kYXQKaW5kZXggM2I5ZDgzNDkwNzguLjM4YzY4ZDFkMGE2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtNzM4LDcgKzczOCw2IEBACiAgIGJvb3RfdmFs ID0+ICdUT0FTVF9QR0xaX0NPTVBSRVNTSU9OJywKICAgb3B0aW9ucyA9PiAnZGVmYXVsdF90b2Fz dF9jb21wcmVzc2lvbl9vcHRpb25zJywKIH0sCi0KIHsgbmFtZSA9PiAnZGVmYXVsdF90cmFuc2Fj dGlvbl9kZWZlcnJhYmxlJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VU JywgZ3JvdXAgPT4gJ0NMSUVOVF9DT05OX1NUQVRFTUVOVCcsCiAgIHNob3J0X2Rlc2MgPT4gJ1Nl dHMgdGhlIGRlZmF1bHQgZGVmZXJyYWJsZSBzdGF0dXMgb2YgbmV3IHRyYW5zYWN0aW9ucy4nLAog ICB2YXJpYWJsZSA9PiAnRGVmYXVsdFhhY3REZWZlcnJhYmxlJywKQEAgLTMxNzUsNiArMzE3NCwx MiBAQAogICBib290X3ZhbCA9PiAnREVGQVVMVF9VUERBVEVfUFJPQ0VTU19USVRMRScsCiB9LAog Cit7IG5hbWUgPT4gJ3VzZV9leHRlbmRlZF90b2FzdF9oZWFkZXInLCB0eXBlID0+ICdib29sJywg Y29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnQ0xJRU5UX0NPTk5fU1RBVEVNRU5U JywKKyAgc2hvcnRfZGVzYyA9PiAnVXNlIDIwLWJ5dGUgZXh0ZW5kZWQgVE9BU1QgaGVhZGVyIGZv cm1hdCAocmVxdWlyZWQgZm9yIHpzdGQpLicsCisgIHZhcmlhYmxlID0+ICd1c2VfZXh0ZW5kZWRf dG9hc3RfaGVhZGVyJywKKyAgYm9vdF92YWwgPT4gJ2ZhbHNlJywKK30sCisKIHsgbmFtZSA9PiAn dmFjdXVtX2J1ZmZlcl91c2FnZV9saW1pdCcsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BH Q19VU0VSU0VUJywgZ3JvdXAgPT4gJ1JFU09VUkNFU19NRU0nLAogICBzaG9ydF9kZXNjID0+ICdT ZXRzIHRoZSBidWZmZXIgcG9vbCBzaXplIGZvciBWQUNVVU0sIEFOQUxZWkUsIGFuZCBhdXRvdmFj dXVtLicsCiAgIGZsYWdzID0+ICdHVUNfVU5JVF9LQicsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jCmluZGV4IGY4N2I1NThjMmM2Li5mNmMwOTI2MGYxYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfdGFibGVzLmMKQEAgLTQ2MCw2ICs0NjAsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNv bmZpZ19lbnVtX2VudHJ5IGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb25fb3B0aW9uc1tdID0gewog CXsicGdseiIsIFRPQVNUX1BHTFpfQ09NUFJFU1NJT04sIGZhbHNlfSwKICNpZmRlZiAgVVNFX0xa NAogCXsibHo0IiwgVE9BU1RfTFo0X0NPTVBSRVNTSU9OLCBmYWxzZX0sCisjZW5kaWYKKyNpZmRl ZiAgVVNFX1pTVEQKKwl7InpzdGQiLCBUT0FTVF9aU1REX0NPTVBSRVNTSU9OLCBmYWxzZX0sCiAj ZW5kaWYKIAl7TlVMTCwgMCwgZmFsc2V9CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2RldG9hc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9kZXRvYXN0LmgKaW5kZXggZTYwM2Ey Mjc2YzMuLmU1OTFhNTk1NjliIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZGV0b2Fz dC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9kZXRvYXN0LmgKQEAgLTE0LDI1ICsxNCw1OCBA QAogCiAvKgogICogTWFjcm8gdG8gZmV0Y2ggdGhlIHBvc3NpYmx5LXVuYWxpZ25lZCBjb250ZW50 cyBvZiBhbiBFWFRFUk5BTCBkYXR1bQotICogaW50byBhIGxvY2FsICJzdHJ1Y3QgdmFyYXR0X2V4 dGVybmFsIiB0b2FzdCBwb2ludGVyLiAgVGhpcyBzaG91bGQgYmUKLSAqIGp1c3QgYSBtZW1jcHks IGJ1dCBzb21lIHZlcnNpb25zIG9mIGdjYyBzZWVtIHRvIHByb2R1Y2UgYnJva2VuIGNvZGUKLSAq IHRoYXQgYXNzdW1lcyB0aGUgZGF0dW0gY29udGVudHMgYXJlIGFsaWduZWQuICBJbnRyb2R1Y2lu ZyBhbiBleHBsaWNpdAotICogaW50ZXJtZWRpYXRlICJ2YXJhdHRyaWJfMWJfZSAqIiB2YXJpYWJs ZSBzZWVtcyB0byBmaXggaXQuCisgKiBpbnRvIGEgbG9jYWwgInN0cnVjdCB2YXJhdHRfZXh0ZXJu YWwiIHRvYXN0IHBvaW50ZXIuCisgKgorICogVGhpcyBjdXJyZW50bHkgc3VwcG9ydHMgb25seSB0 aGUgbGVnYWN5IG9uLWRpc2sgVE9BU1QgcG9pbnRlciBmb3JtYXQsCisgKiB3aGljaCBoYXMgVkFS VEFHX09ORElTSyBhbmQgYSBwYXlsb2FkIHNpemUgb2Ygc2l6ZW9mKHZhcmF0dF9leHRlcm5hbCku CisgKiBFeHRlbmRlZCBvbi1kaXNrIHBvaW50ZXJzIChWQVJUQUdfT05ESVNLX0VYVEVOREVEKSBt dXN0IGJlIGFjY2Vzc2VkIHZpYQorICogVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSX0VYVEVO REVEKCkuCisgKgorICogVGhpcyBzaG91bGQgYmUganVzdCBhIG1lbWNweSwgYnV0IHNvbWUgdmVy c2lvbnMgb2YgZ2NjIHNlZW0gdG8gcHJvZHVjZQorICogYnJva2VuIGNvZGUgdGhhdCBhc3N1bWVz IHRoZSBkYXR1bSBjb250ZW50cyBhcmUgYWxpZ25lZC4gIEludHJvZHVjaW5nCisgKiBhbiBleHBs aWNpdCBpbnRlcm1lZGlhdGUgInZhcmF0dHJpYl8xYl9lICoiIHZhcmlhYmxlIHNlZW1zIHRvIGZp eCBpdC4KICAqLwogI2RlZmluZSBWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIodG9hc3RfcG9p bnRlciwgYXR0cikgXAogZG8geyBcCiAJdmFyYXR0cmliXzFiX2UgKmF0dHJlID0gKHZhcmF0dHJp Yl8xYl9lICopIChhdHRyKTsgXAogCUFzc2VydChWQVJBVFRfSVNfRVhURVJOQUwoYXR0cmUpKTsg XAorCUFzc2VydChWQVJUQUdfRVhURVJOQUwoYXR0cmUpID09IFZBUlRBR19PTkRJU0spOyBcCiAJ QXNzZXJ0KFZBUlNJWkVfRVhURVJOQUwoYXR0cmUpID09IHNpemVvZih0b2FzdF9wb2ludGVyKSAr IFZBUkhEUlNaX0VYVEVSTkFMKTsgXAogCW1lbWNweSgmKHRvYXN0X3BvaW50ZXIpLCBWQVJEQVRB X0VYVEVSTkFMKGF0dHJlKSwgc2l6ZW9mKHRvYXN0X3BvaW50ZXIpKTsgXAogfSB3aGlsZSAoMCkK IAorLyoKKyAqIFZhcmlhbnQgb2YgVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSIGZvciB0aGUg ZXh0ZW5kZWQgb24tZGlzayBUT0FTVAorICogcG9pbnRlciBmb3JtYXQuICBDYWxsZXJzIHNob3Vs ZCBvbmx5IHVzZSB0aGlzIHdoZW4gdGhleSBoYXZlIGFscmVhZHkKKyAqIGVzdGFibGlzaGVkIHRo YXQgdGhlIHRhZyBpcyBWQVJUQUdfT05ESVNLX0VYVEVOREVELgorICovCisjZGVmaW5lIFZBUkFU VF9FWFRFUk5BTF9HRVRfUE9JTlRFUl9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCwgYXR0cikg XAorZG8geyBcCisJdmFyYXR0cmliXzFiX2UgKmF0dHJlID0gKHZhcmF0dHJpYl8xYl9lICopIChh dHRyKTsgXAorCUFzc2VydChWQVJBVFRfSVNfRVhURVJOQUwoYXR0cmUpKTsgXAorCUFzc2VydChW QVJUQUdfRVhURVJOQUwoYXR0cmUpID09IFZBUlRBR19PTkRJU0tfRVhURU5ERUQpOyBcCisJQXNz ZXJ0KFZBUlNJWkVfRVhURVJOQUwoYXR0cmUpID09IHNpemVvZih0b2FzdF9wb2ludGVyX2V4dCkg KyBWQVJIRFJTWl9FWFRFUk5BTCk7IFwKKwltZW1jcHkoJih0b2FzdF9wb2ludGVyX2V4dCksIFZB UkRBVEFfRVhURVJOQUwoYXR0cmUpLCBzaXplb2YodG9hc3RfcG9pbnRlcl9leHQpKTsgXAorfSB3 aGlsZSAoMCkKKwogLyogU2l6ZSBvZiBhbiBFWFRFUk5BTCBkYXR1bSB0aGF0IGNvbnRhaW5zIGEg c3RhbmRhcmQgVE9BU1QgcG9pbnRlciAqLwogI2RlZmluZSBUT0FTVF9QT0lOVEVSX1NJWkUgKFZB UkhEUlNaX0VYVEVSTkFMICsgc2l6ZW9mKHZhcmF0dF9leHRlcm5hbCkpCiAKIC8qIFNpemUgb2Yg YW4gRVhURVJOQUwgZGF0dW0gdGhhdCBjb250YWlucyBhbiBpbmRpcmVjdGlvbiBwb2ludGVyICov CiAjZGVmaW5lIElORElSRUNUX1BPSU5URVJfU0laRSAoVkFSSERSU1pfRVhURVJOQUwgKyBzaXpl b2YodmFyYXR0X2luZGlyZWN0KSkKIAorLyogU2l6ZSBvZiBhbiBFWFRFUk5BTCBkYXR1bSB0aGF0 IGNvbnRhaW5zIGFuIGV4dGVuZGVkIFRPQVNUIHBvaW50ZXIgKi8KKyNkZWZpbmUgVE9BU1RfUE9J TlRFUl9TSVpFX0VYVEVOREVEIChWQVJIRFJTWl9FWFRFUk5BTCArIHNpemVvZih2YXJhdHRfZXh0 ZXJuYWxfZXh0ZW5kZWQpKQorCisvKiBWYWxpZGF0aW9uIGhlbHBlcnMgZm9yIFRPQVNUIHBvaW50 ZXIgc2l6ZXMgKi8KKyNkZWZpbmUgVE9BU1RfUE9JTlRFUl9TSVpFX0lTX1ZBTElEKHNpemUpIFwK KwkoKHNpemUpID09IFRPQVNUX1BPSU5URVJfU0laRSB8fCBcCisJIChzaXplKSA9PSBUT0FTVF9Q T0lOVEVSX1NJWkVfRVhURU5ERUQgfHwgXAorCSAoc2l6ZSkgPT0gSU5ESVJFQ1RfUE9JTlRFUl9T SVpFKQorCisjZGVmaW5lIFRPQVNUX1BPSU5URVJfSVNfRVhURU5ERURfU0laRShzaXplKSBcCisJ KChzaXplKSA9PSBUT0FTVF9QT0lOVEVSX1NJWkVfRVhURU5ERUQpCisKIC8qIC0tLS0tLS0tLS0K ICAqIGRldG9hc3RfZXh0ZXJuYWxfYXR0cigpIC0KICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9j b21wcmVzc2lvbi5oCmluZGV4IDEzYzQ2MTJjZWVkLi5iNzY5ZDFiYzcyZCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgKQEAgLTEzLDE0ICsxMywyMSBAQAogI2lmbmRlZiBU T0FTVF9DT01QUkVTU0lPTl9ICiAjZGVmaW5lIFRPQVNUX0NPTVBSRVNTSU9OX0gKIAorI2luY2x1 ZGUgInZhcmF0dC5oIgorCiAvKgogICogR1VDIHN1cHBvcnQuCiAgKgogICogZGVmYXVsdF90b2Fz dF9jb21wcmVzc2lvbiBpcyBhbiBpbnRlZ2VyIGZvciBwdXJwb3NlcyBvZiB0aGUgR1VDIG1hY2hp bmVyeSwKICAqIGJ1dCB0aGUgdmFsdWUgaXMgb25lIG9mIHRoZSBjaGFyIHZhbHVlcyBkZWZpbmVk IGJlbG93LCBhcyB0aGV5IGFwcGVhciBpbgogICogcGdfYXR0cmlidXRlLmF0dGNvbXByZXNzaW9u LCBlLmcuIFRPQVNUX1BHTFpfQ09NUFJFU1NJT04uCisgKgorICogdXNlX2V4dGVuZGVkX3RvYXN0 X2hlYWRlciBjb250cm9scyB3aGV0aGVyIHRvIHVzZSB0aGUgMjAtYnl0ZSBleHRlbmRlZAorICog VE9BU1QgcG9pbnRlciBmb3JtYXQgKHJlcXVpcmVkIGZvciB6c3RkKSBpbnN0ZWFkIG9mIHRoZSBs ZWdhY3kgMTYtYnl0ZQorICogZm9ybWF0LiBXaGVuIGZhbHNlLCB6c3RkIGNvbXByZXNzaW9uIGZh bGxzIGJhY2sgdG8gcGdsei4KICAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBkZWZhdWx0X3Rv YXN0X2NvbXByZXNzaW9uOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgdXNlX2V4dGVuZGVkX3Rv YXN0X2hlYWRlcjsKIAogLyoKICAqIEJ1aWx0LWluIGNvbXByZXNzaW9uIG1ldGhvZCBJRC4gIFRo ZSB0b2FzdCBjb21wcmVzc2lvbiBoZWFkZXIgd2lsbCBzdG9yZQpAQCAtMzksNiArNDYsNyBAQCB0 eXBlZGVmIGVudW0gVG9hc3RDb21wcmVzc2lvbklkCiAJVE9BU1RfUEdMWl9DT01QUkVTU0lPTl9J RCA9IDAsCiAJVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEID0gMSwKIAlUT0FTVF9JTlZBTElEX0NP TVBSRVNTSU9OX0lEID0gMiwKKwlUT0FTVF9FWFRFTkRFRF9DT01QUkVTU0lPTl9JRCA9IDMsCS8q IGV4dGVuZGVkIGZvcm1hdCBmb3IgZnV0dXJlIG1ldGhvZHMgKi8KIH0gVG9hc3RDb21wcmVzc2lv bklkOwogCiAvKgpAQCAtNDgsNiArNTYsNyBAQCB0eXBlZGVmIGVudW0gVG9hc3RDb21wcmVzc2lv bklkCiAgKi8KICNkZWZpbmUgVE9BU1RfUEdMWl9DT01QUkVTU0lPTgkJCSdwJwogI2RlZmluZSBU T0FTVF9MWjRfQ09NUFJFU1NJT04JCQknbCcKKyNkZWZpbmUgVE9BU1RfWlNURF9DT01QUkVTU0lP TgkJCSd6JwogI2RlZmluZSBJbnZhbGlkQ29tcHJlc3Npb25NZXRob2QJCSdcMCcKIAogI2RlZmlu ZSBDb21wcmVzc2lvbk1ldGhvZElzVmFsaWQoY20pICAoKGNtKSAhPSBJbnZhbGlkQ29tcHJlc3Np b25NZXRob2QpCkBAIC02NSw5ICs3NCwzNiBAQCBleHRlcm4gc3RydWN0IHZhcmxlbmEgKmx6NF9k ZWNvbXByZXNzX2RhdHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSk7CiBleHRlcm4gc3Ry dWN0IHZhcmxlbmEgKmx6NF9kZWNvbXByZXNzX2RhdHVtX3NsaWNlKGNvbnN0IHN0cnVjdCB2YXJs ZW5hICp2YWx1ZSwKIAkJCQkJCQkJCQkJCSAgaW50MzIgc2xpY2VsZW5ndGgpOwogCisvKiB6c3Rk IGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcm91dGluZXMgKGV4dGVuZGVkIG1ldGhvZHMpICov CitleHRlcm4gc3RydWN0IHZhcmxlbmEgKnpzdGRfY29tcHJlc3NfZGF0dW0oY29uc3Qgc3RydWN0 IHZhcmxlbmEgKnZhbHVlKTsKK2V4dGVybiBzdHJ1Y3QgdmFybGVuYSAqenN0ZF9kZWNvbXByZXNz X2RhdHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSk7CitleHRlcm4gc3RydWN0IHZhcmxl bmEgKnpzdGRfZGVjb21wcmVzc19kYXR1bV9zbGljZShjb25zdCBzdHJ1Y3QgdmFybGVuYSAqdmFs dWUsCisJCQkJCQkJCQkJCQkgICBpbnQzMiBzbGljZWxlbmd0aCk7CisKIC8qIG90aGVyIHN0dWZm ICovCiBleHRlcm4gVG9hc3RDb21wcmVzc2lvbklkIHRvYXN0X2dldF9jb21wcmVzc2lvbl9pZChz dHJ1Y3QgdmFybGVuYSAqYXR0cik7CiBleHRlcm4gY2hhciBDb21wcmVzc2lvbk5hbWVUb01ldGhv ZChjb25zdCBjaGFyICpjb21wcmVzc2lvbik7CiBleHRlcm4gY29uc3QgY2hhciAqR2V0Q29tcHJl c3Npb25NZXRob2ROYW1lKGNoYXIgbWV0aG9kKTsKIAorLyoKKyAqIEZlYXR1cmUgZmxhZ3MgZm9y IGV4dGVuZGVkIFRPQVNUIHBvaW50ZXJzICh2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQpLgorICog VGhlc2UgYWxpYXMgVkFSQVRUX0VYVEVSTkFMX0ZMQUdfKiBmcm9tIHZhcmF0dC5oLgorICovCisj ZGVmaW5lIFRPQVNUX0VYVF9GTEFHX0NPTVBSRVNTSU9OICAgICAgVkFSQVRUX0VYVEVSTkFMX0ZM QUdfQ09NUFJFU1NJT04KKyNkZWZpbmUgVE9BU1RfRVhUX0ZMQUdfQ0hFQ0tTVU0gICAgICAgICBW QVJBVFRfRVhURVJOQUxfRkxBR19DSEVDS1NVTQorCisvKgorICogRXh0ZW5kZWQgY29tcHJlc3Np b24gbWV0aG9kIElEcyBmb3IgdXNlIHdpdGggZXh0ZW5kZWQgVE9BU1QgZm9ybWF0LgorICogU3Rv cmVkIGluIHZhX2RhdGFbMF0gd2hlbiBUT0FTVF9FWFRfRkxBR19DT01QUkVTU0lPTiBpcyBzZXQu CisgKi8KKyNkZWZpbmUgVE9BU1RfUEdMWl9FWFRfTUVUSE9EICAgICAgICAgIDAKKyNkZWZpbmUg VE9BU1RfTFo0X0VYVF9NRVRIT0QgICAgICAgICAgIDEKKyNkZWZpbmUgVE9BU1RfWlNURF9FWFRf TUVUSE9EICAgICAgICAgIDIKKyNkZWZpbmUgVE9BU1RfVU5DT01QUkVTU0VEX0VYVF9NRVRIT0Qg IDMKKworLyogVmFsaWRhdGlvbiBtYWNyb3MgZm9yIGV4dGVuZGVkIGZvcm1hdCAqLworI2RlZmlu ZSBFeHRlbmRlZENvbXByZXNzaW9uTWV0aG9kSXNWYWxpZChtZXRob2QpICgobWV0aG9kKSA8PSAy NTUpCisjZGVmaW5lIEV4dGVuZGVkRmxhZ3NBcmVWYWxpZChmbGFncykgXAorCSgoKGZsYWdzKSAm IH4oVE9BU1RfRVhUX0ZMQUdfQ09NUFJFU1NJT04gfCBUT0FTVF9FWFRfRkxBR19DSEVDS1NVTSkp ID09IDApCisKICNlbmRpZgkJCQkJCQkvKiBUT0FTVF9DT01QUkVTU0lPTl9IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmgKaW5kZXggMDZhZTg1ODNjMWUuLmQ2YmM1YzRkMTc5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3RvYXN0X2ludGVybmFscy5oCkBAIC0zNiwxMSArMzYsMTYgQEAgdHlw ZWRlZiBzdHJ1Y3QgdG9hc3RfY29tcHJlc3NfaGVhZGVyCiAjZGVmaW5lIFRPQVNUX0NPTVBSRVNT X01FVEhPRChwdHIpIFwKIAkoKCh0b2FzdF9jb21wcmVzc19oZWFkZXIgKikgKHB0cikpLT50Y2lu Zm8gPj4gVkFSTEVOQV9FWFRTSVpFX0JJVFMpCiAKKy8qCisgKiBTZXQgdGhlIHNpemUgYW5kIGNv bXByZXNzaW9uIG1ldGhvZCBpbiBhIGNvbXByZXNzZWQgZGF0dW0ncyBoZWFkZXIuCisgKiBBY2Nl cHRzIFRPQVNUX0VYVEVOREVEX0NPTVBSRVNTSU9OX0lEIGZvciBleHRlbmRlZCBjb21wcmVzc2lv biBtZXRob2RzLgorICovCiAjZGVmaW5lIFRPQVNUX0NPTVBSRVNTX1NFVF9TSVpFX0FORF9DT01Q UkVTU19NRVRIT0QocHRyLCBsZW4sIGNtX21ldGhvZCkgXAogCWRvIHsgXAogCQlBc3NlcnQoKGxl bikgPiAwICYmIChsZW4pIDw9IFZBUkxFTkFfRVhUU0laRV9NQVNLKTsgXAogCQlBc3NlcnQoKGNt X21ldGhvZCkgPT0gVE9BU1RfUEdMWl9DT01QUkVTU0lPTl9JRCB8fCBcCi0JCQkgICAoY21fbWV0 aG9kKSA9PSBUT0FTVF9MWjRfQ09NUFJFU1NJT05fSUQpOyBcCisJCQkgICAoY21fbWV0aG9kKSA9 PSBUT0FTVF9MWjRfQ09NUFJFU1NJT05fSUQgfHwgXAorCQkJICAgKGNtX21ldGhvZCkgPT0gVE9B U1RfRVhURU5ERURfQ09NUFJFU1NJT05fSUQpOyBcCiAJCSgodG9hc3RfY29tcHJlc3NfaGVhZGVy ICopIChwdHIpKS0+dGNpbmZvID0gXAogCQkJKGxlbikgfCAoKHVpbnQzMikgKGNtX21ldGhvZCkg PDwgVkFSTEVOQV9FWFRTSVpFX0JJVFMpOyBcCiAJfSB3aGlsZSAoMCkKQEAgLTUwLDcgKzU1LDgg QEAgZXh0ZXJuIE9pZAl0b2FzdF9nZXRfdmFsaWRfaW5kZXgoT2lkIHRvYXN0b2lkLCBMT0NLTU9E RSBsb2NrKTsKIAogZXh0ZXJuIHZvaWQgdG9hc3RfZGVsZXRlX2RhdHVtKFJlbGF0aW9uIHJlbCwg RGF0dW0gdmFsdWUsIGJvb2wgaXNfc3BlY3VsYXRpdmUpOwogZXh0ZXJuIERhdHVtIHRvYXN0X3Nh dmVfZGF0dW0oUmVsYXRpb24gcmVsLCBEYXR1bSB2YWx1ZSwKLQkJCQkJCQkgIHN0cnVjdCB2YXJs ZW5hICpvbGRleHRlcm5hbCwgaW50IG9wdGlvbnMpOworCQkJCQkJCSAgc3RydWN0IHZhcmxlbmEg Km9sZGV4dGVybmFsLCBpbnQgb3B0aW9ucywKKwkJCQkJCQkgIGNoYXIgY21ldGhvZCk7CiAKIGV4 dGVybiBpbnQJdG9hc3Rfb3Blbl9pbmRleGVzKFJlbGF0aW9uIHRvYXN0cmVsLAogCQkJCQkJCSAg IExPQ0tNT0RFIGxvY2ssCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS92YXJhdHQuaCBiL3NyYy9p bmNsdWRlL3ZhcmF0dC5oCmluZGV4IGFlZWFiZjkxNDViLi41ZjU4MjlhMWVjNCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdmFyYXR0LmgKKysrIGIvc3JjL2luY2x1ZGUvdmFyYXR0LmgKQEAgLTQ1 LDYgKzQ1LDIzIEBAIHR5cGVkZWYgc3RydWN0IHZhcmF0dF9leHRlcm5hbAogI2RlZmluZSBWQVJM RU5BX0VYVFNJWkVfQklUUwkzMAogI2RlZmluZSBWQVJMRU5BX0VYVFNJWkVfTUFTSwkoKDFVIDw8 IFZBUkxFTkFfRVhUU0laRV9CSVRTKSAtIDEpCiAKKy8qCisgKiBDb21wcmVzc2lvbiBtZXRob2Qg SUQgc3RvcmVkIGluIHRoZSAyIGhpZ2gtb3JkZXIgYml0cyBvZiB2YV9leHRpbmZvLgorICogVmFs dWUgMyBpbmRpY2F0ZXMgYW4gZXh0ZW5kZWQgVE9BU1QgcG9pbnRlciBmb3JtYXQgKHZhcmF0dF9l eHRlcm5hbF9leHRlbmRlZCkuCisgKiBUaGlzIGNvbnN0YW50IGlzIGFsc28gZGVmaW5lZCBpbiB0 b2FzdF9jb21wcmVzc2lvbi5oIGZvciB1c2UgYnkgVE9BU1QgY29kZS4KKyAqLworI2RlZmluZSBW QVJBVFRfRVhURVJOQUxfRVhURU5ERURfQ01JRAkzCisKKy8qCisgKiBGZWF0dXJlIGZsYWdzIGZv ciBleHRlbmRlZCBvbi1kaXNrIFRPQVNUIHBvaW50ZXJzICh2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5k ZWQpLgorICoKKyAqIEtlZXAgdGhlc2UgaW4gdmFyYXR0LmggKG5vdCBhY2Nlc3MvdG9hc3QgaGVh ZGVycykgc28gbG93LWxldmVsIGNvZGUgY2FuCisgKiBzYWZlbHkgbWFuaXB1bGF0ZSB0aGUgb24t ZGlzayByZXByZXNlbnRhdGlvbiB3aXRob3V0IGRlcGVuZGluZyBvbiBoaWdoZXIKKyAqIGxheWVy cycgaGVhZGVyIGluY2x1ZGUgb3JkZXIuCisgKi8KKyNkZWZpbmUgVkFSQVRUX0VYVEVSTkFMX0ZM QUdfQ09NUFJFU1NJT04JMHgwMQkvKiB2YV9kYXRhWzBdID0gbWV0aG9kIElEICovCisjZGVmaW5l IFZBUkFUVF9FWFRFUk5BTF9GTEFHX0NIRUNLU1VNCQkweDAyCS8qIHZhX2RhdGFbMS0yXSA9IGNo ZWNrc3VtICovCisKIC8qCiAgKiBzdHJ1Y3QgdmFyYXR0X2luZGlyZWN0IGlzIGEgIlRPQVNUIHBv aW50ZXIiIHJlcHJlc2VudGluZyBhbiBvdXQtb2YtbGluZQogICogRGF0dW0gdGhhdCdzIHN0b3Jl ZCBpbiBtZW1vcnksIG5vdCBpbiBhbiBleHRlcm5hbCB0b2FzdCByZWxhdGlvbi4KQEAgLTc2LDYg KzkzLDI2IEBAIHR5cGVkZWYgc3RydWN0IHZhcmF0dF9leHBhbmRlZAogCUV4cGFuZGVkT2JqZWN0 SGVhZGVyICplb2hwdHI7CiB9IHZhcmF0dF9leHBhbmRlZDsKIAorLyoKKyAqIEV4dGVuZGVkIFRP QVNUIHBvaW50ZXIsIGV4dGVuZGluZyB2YXJhdHRfZXh0ZXJuYWwgZnJvbSAxNiB0byAyMCBieXRl cy4KKyAqCisgKiBJZGVudGlmaWVkIGJ5IGNvbXByZXNzaW9uIG1ldGhvZCBJRCAzIGluIHZhX2V4 dGluZm8gYml0cyAzMC0zMS4gIFRoZQorICogdmFfZmxhZ3MgZmllbGQgaW5kaWNhdGVzIHdoaWNo IG9wdGlvbmFsIGZlYXR1cmVzIGFyZSBlbmFibGVkOyB2YV9kYXRhW10KKyAqIGNvbnRhaW5zIGZl YXR1cmUtc3BlY2lmaWMgZGF0YSAoZS5nLiwgY29tcHJlc3Npb24gbWV0aG9kIGluIHZhX2RhdGFb MF0pLgorICoKKyAqIExpa2UgdmFyYXR0X2V4dGVybmFsLCBzdG9yZWQgdW5hbGlnbmVkIGFuZCBy ZXF1aXJlcyBtZW1jcHkgZm9yIGFjY2Vzcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgdmFyYXR0X2V4 dGVybmFsX2V4dGVuZGVkCit7CisJaW50MzIJCXZhX3Jhd3NpemU7CQkvKiBPcmlnaW5hbCBkYXRh IHNpemUgKGluY2x1ZGVzIGhlYWRlcikgKi8KKwl1aW50MzIJCXZhX2V4dGluZm87CQkvKiBFeHRl cm5hbCBzYXZlZCBzaXplICgzMCBiaXRzKSArIGV4dGVuZGVkCisJCQkJCQkJCSAqIGluZGljYXRv ciAoMiBiaXRzLCB2YWx1ZSA9IDMpICovCisJdWludDgJCXZhX2ZsYWdzOwkJLyogRmVhdHVyZSBm bGFncyBpbmRpY2F0aW5nIGVuYWJsZWQgZXh0ZW5zaW9ucyAqLworCXVpbnQ4CQl2YV9kYXRhWzNd OwkJLyogRXh0ZW5zaW9uIGRhdGEgLSBpbnRlcnByZXRhdGlvbiBkZXBlbmRzIG9uIGZsYWdzICov CisJT2lkCQkJdmFfdmFsdWVpZDsJCS8qIFVuaXF1ZSBJRCBvZiB2YWx1ZSB3aXRoaW4gVE9BU1Qg dGFibGUgKi8KKwlPaWQJCQl2YV90b2FzdHJlbGlkOwkvKiBSZWxJRCBvZiBUT0FTVCB0YWJsZSBj b250YWluaW5nIGl0ICovCit9CQkJdmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkOworCiAvKgogICog VHlwZSB0YWcgZm9yIHRoZSB2YXJpb3VzIHNvcnRzIG9mICJUT0FTVCBwb2ludGVyIiBkYXR1bXMu ICBUaGUgcGVjdWxpYXIKICAqIHZhbHVlIGZvciBWQVJUQUdfT05ESVNLIGNvbWVzIGZyb20gYSBy ZXF1aXJlbWVudCBmb3Igb24tZGlzayBjb21wYXRpYmlsaXR5CkBAIC04Niw3ICsxMjMsMTcgQEAg dHlwZWRlZiBlbnVtIHZhcnRhZ19leHRlcm5hbAogCVZBUlRBR19JTkRJUkVDVCA9IDEsCiAJVkFS VEFHX0VYUEFOREVEX1JPID0gMiwKIAlWQVJUQUdfRVhQQU5ERURfUlcgPSAzLAotCVZBUlRBR19P TkRJU0sgPSAxOAorCVZBUlRBR19PTkRJU0sgPSAxOCwKKworCS8qCisJICogVkFSVEFHX09ORElT S19FWFRFTkRFRCBpcyB1c2VkIGZvciB0aGUgZXh0ZW5kZWQgVE9BU1QgcG9pbnRlciBmb3JtYXQs CisJICogd2hpY2ggaW5jcmVhc2VzIHRoZSBvbi1kaXNrIHBheWxvYWQgZnJvbSAxNiB0byAyMCBi eXRlcy4gIFRoZSBmaXJzdAorCSAqIDggYnl0ZXMgKHZhX3Jhd3NpemUsIHZhX2V4dGluZm8pIGFy ZSBsYXlvdXQtY29tcGF0aWJsZSB3aXRoCisJICogc3RydWN0IHZhcmF0dF9leHRlcm5hbCBzbyB0 aGF0IGV4aXN0aW5nIGNvZGUgaW5zcGVjdGluZyB0aG9zZSBmaWVsZHMKKwkgKiBjb250aW51ZXMg dG8gd29yay4gIE9sZGVyIFBvc3RncmVTUUwgdmVyc2lvbnMgZG8gbm90IGtub3cgYWJvdXQgdGhp cworCSAqIHRhZyBhbmQgdGhlcmVmb3JlIG11c3Qgbm90IGJlIHVzZWQgdG8gcmVhZCBjbHVzdGVy cyB0aGF0IGNvbnRhaW4gaXQuCisJICovCisJVkFSVEFHX09ORElTS19FWFRFTkRFRCA9IDE5CiB9 IHZhcnRhZ19leHRlcm5hbDsKIAogLyogSXMgYSBUT0FTVCBwb2ludGVyIGVpdGhlciB0eXBlIG9m IGV4cGFuZGVkLW9iamVjdCBwb2ludGVyPyAqLwpAQCAtOTcsNyArMTQ0LDE0IEBAIFZBUlRBR19J U19FWFBBTkRFRCh2YXJ0YWdfZXh0ZXJuYWwgdGFnKQogCXJldHVybiAoKHRhZyAmIH4xKSA9PSBW QVJUQUdfRVhQQU5ERURfUk8pOwogfQogCi0vKiBTaXplIG9mIHRoZSBkYXRhIHBhcnQgb2YgYSAi VE9BU1QgcG9pbnRlciIgZGF0dW0gKi8KKy8qCisgKiBTaXplIG9mIHRoZSBkYXRhIHBhcnQgb2Yg YSAiVE9BU1QgcG9pbnRlciIgZGF0dW0uCisgKgorICogRm9yIG9uLWRpc2sgVE9BU1QgcG9pbnRl cnMgd2Ugbm93IHN1cHBvcnQgdHdvIHBheWxvYWQgc2l6ZXM6CisgKiB0aGUgb3JpZ2luYWwgMTYt Ynl0ZSBmb3JtYXQgKFZBUlRBR19PTkRJU0spIGRlc2NyaWJlZCBieSBzdHJ1Y3QKKyAqIHZhcmF0 dF9leHRlcm5hbCwgYW5kIGEgMjAtYnl0ZSBleHRlbmRlZCBmb3JtYXQKKyAqIChWQVJUQUdfT05E SVNLX0VYVEVOREVEKSBkZXNjcmliZWQgYnkgc3RydWN0IHZhcmF0dF9leHRlcm5hbF9leHRlbmRl ZC4KKyAqLwogc3RhdGljIGlubGluZSBTaXplCiBWQVJUQUdfU0laRSh2YXJ0YWdfZXh0ZXJuYWwg dGFnKQogewpAQCAtMTA3LDYgKzE2MSw4IEBAIFZBUlRBR19TSVpFKHZhcnRhZ19leHRlcm5hbCB0 YWcpCiAJCXJldHVybiBzaXplb2YodmFyYXR0X2V4cGFuZGVkKTsKIAllbHNlIGlmICh0YWcgPT0g VkFSVEFHX09ORElTSykKIAkJcmV0dXJuIHNpemVvZih2YXJhdHRfZXh0ZXJuYWwpOworCWVsc2Ug aWYgKHRhZyA9PSBWQVJUQUdfT05ESVNLX0VYVEVOREVEKQorCQlyZXR1cm4gc2l6ZW9mKHZhcmF0 dF9leHRlcm5hbF9leHRlbmRlZCk7CiAJZWxzZQogCXsKIAkJQXNzZXJ0KGZhbHNlKTsKQEAgLTM2 MCw3ICs0MTYsMTMgQEAgVkFSQVRUX0lTX0VYVEVSTkFMKGNvbnN0IHZvaWQgKlBUUikKIHN0YXRp YyBpbmxpbmUgYm9vbAogVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhjb25zdCB2b2lkICpQVFIp CiB7Ci0JcmV0dXJuIFZBUkFUVF9JU19FWFRFUk5BTChQVFIpICYmIFZBUlRBR19FWFRFUk5BTChQ VFIpID09IFZBUlRBR19PTkRJU0s7CisJdmFydGFnX2V4dGVybmFsIHRhZzsKKworCWlmICghVkFS QVRUX0lTX0VYVEVSTkFMKFBUUikpCisJCXJldHVybiBmYWxzZTsKKworCXRhZyA9IFZBUlRBR19F WFRFUk5BTChQVFIpOworCXJldHVybiB0YWcgPT0gVkFSVEFHX09ORElTSyB8fCB0YWcgPT0gVkFS VEFHX09ORElTS19FWFRFTkRFRDsKIH0KIAogLyogSXMgdmFybGVuYSBkYXR1bSBhbiBpbmRpcmVj dCBwb2ludGVyPyAqLwpAQCAtNTE2LDExICs1NzgsMTEgQEAgVkFSQVRUX0VYVEVSTkFMX0dFVF9D T01QUkVTU19NRVRIT0Qoc3RydWN0IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9wb2ludGVyKQogfQog CiAvKiBTZXQgc2l6ZSBhbmQgY29tcHJlc3MgbWV0aG9kIG9mIGFuIGV4dGVybmFsbHktc3RvcmVk IHZhcmxlbmEgZGF0dW0gKi8KLS8qIFRoaXMgaGFzIHRvIHJlbWFpbiBhIG1hY3JvOyBiZXdhcmUg bXVsdGlwbGUgZXZhbHVhdGlvbnMhICovCiAjZGVmaW5lIFZBUkFUVF9FWFRFUk5BTF9TRVRfU0la RV9BTkRfQ09NUFJFU1NfTUVUSE9EKHRvYXN0X3BvaW50ZXIsIGxlbiwgY20pIFwKIAlkbyB7IFwK IAkJQXNzZXJ0KChjbSkgPT0gVE9BU1RfUEdMWl9DT01QUkVTU0lPTl9JRCB8fCBcCi0JCQkgICAo Y20pID09IFRPQVNUX0xaNF9DT01QUkVTU0lPTl9JRCk7IFwKKwkJCSAgIChjbSkgPT0gVE9BU1Rf TFo0X0NPTVBSRVNTSU9OX0lEIHx8IFwKKwkJCSAgIChjbSkgPT0gVkFSQVRUX0VYVEVSTkFMX0VY VEVOREVEX0NNSUQpOyBcCiAJCSgodG9hc3RfcG9pbnRlcikudmFfZXh0aW5mbyA9IFwKIAkJCShs ZW4pIHwgKCh1aW50MzIpIChjbSkgPDwgVkFSTEVOQV9FWFRTSVpFX0JJVFMpKTsgXAogCX0gd2hp bGUgKDApCkBAIC01MzksNCArNjAxLDkyIEBAIFZBUkFUVF9FWFRFUk5BTF9JU19DT01QUkVTU0VE KHN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcikKIAkJKFNpemUpICh0b2FzdF9w b2ludGVyLnZhX3Jhd3NpemUgLSBWQVJIRFJTWik7CiB9CiAKKy8qIE1hY3JvcyBmb3IgZXh0ZW5k ZWQgVE9BU1QgcG9pbnRlcnMgKHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCkgKi8KKworLyoKKyAq IENoZWNrIGlmIGEgVE9BU1QgcG9pbnRlciB1c2VzIHRoZSBleHRlbmRlZCBvbi1kaXNrIGZvcm1h dC4KKyAqCisgKiBDYWxsZXJzIG11c3QgaGF2ZSBhbHJlYWR5IHZlcmlmaWVkIFZBUkFUVF9JU19F WFRFUk5BTF9PTkRJU0soKSBiZWZvcmUKKyAqIGNhbGxpbmcgdGhpczsgaGVyZSB3ZSBsb29rIG9u bHkgYXQgdGhlIGNvbXByZXNzaW9uLW1ldGhvZCBiaXRzIGVtYmVkZGVkCisgKiBpbiB2YV9leHRp bmZvLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK1ZBUkFUVF9FWFRFUk5BTF9JU19FWFRFTkRF RChzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIHRvYXN0X3BvaW50ZXIpCit7CisJcmV0dXJuIFZBUkFU VF9FWFRFUk5BTF9HRVRfQ09NUFJFU1NfTUVUSE9EKHRvYXN0X3BvaW50ZXIpID09CisJCVZBUkFU VF9FWFRFUk5BTF9FWFRFTkRFRF9DTUlEOworfQorCisvKiBHZXQgZmVhdHVyZSBmbGFncyBmcm9t IGV4dGVuZGVkIHBvaW50ZXIgKi8KK3N0YXRpYyBpbmxpbmUgdWludDgKK1ZBUkFUVF9FWFRFUk5B TF9HRVRfRkxBR1Moc3RydWN0IHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCB0b2FzdF9wb2ludGVy X2V4dCkKK3sKKwlyZXR1cm4gdG9hc3RfcG9pbnRlcl9leHQudmFfZmxhZ3M7Cit9CisKKy8qIFNl dCBmZWF0dXJlIGZsYWdzIGluIGV4dGVuZGVkIHBvaW50ZXIgKi8KKyNkZWZpbmUgVkFSQVRUX0VY VEVSTkFMX1NFVF9GTEFHUyh0b2FzdF9wb2ludGVyX2V4dCwgZmxhZ3MpIFwKKwlkbyB7IFwKKwkJ KHRvYXN0X3BvaW50ZXJfZXh0KS52YV9mbGFncyA9IChmbGFncyk7IFwKKwl9IHdoaWxlICgwKQor CisvKiBUZXN0IGlmIGEgc3BlY2lmaWMgZmxhZyBpcyBzZXQgKi8KKyNkZWZpbmUgVkFSQVRUX0VY VEVSTkFMX0hBU19GTEFHKHRvYXN0X3BvaW50ZXJfZXh0LCBmbGFnKSBcCisJKCgodG9hc3RfcG9p bnRlcl9leHQpLnZhX2ZsYWdzICYgKGZsYWcpKSAhPSAwKQorCisvKiBHZXQgcG9pbnRlciB0byBl eHRlbnNpb24gZGF0YSBhcnJheSAqLworI2RlZmluZSBWQVJBVFRfRVhURVJOQUxfR0VUX0VYVF9E QVRBKHRvYXN0X3BvaW50ZXJfZXh0KSBcCisJKCh0b2FzdF9wb2ludGVyX2V4dCkudmFfZGF0YSkK KworLyogR2V0IGV4dGVuZGVkIGNvbXByZXNzaW9uIG1ldGhvZCAod2hlbiBUT0FTVF9FWFRfRkxB R19DT01QUkVTU0lPTiBpcyBzZXQpICovCitzdGF0aWMgaW5saW5lIHVpbnQ4CitWQVJBVFRfRVhU RVJOQUxfR0VUX0VYVF9DT01QUkVTU0lPTl9NRVRIT0Qoc3RydWN0IHZhcmF0dF9leHRlcm5hbF9l eHRlbmRlZCB0b2FzdF9wb2ludGVyX2V4dCkKK3sKKwlyZXR1cm4gdG9hc3RfcG9pbnRlcl9leHQu dmFfZGF0YVswXTsKK30KKworLyogU2V0IGV4dGVuZGVkIGNvbXByZXNzaW9uIG1ldGhvZCAqLwor I2RlZmluZSBWQVJBVFRfRVhURVJOQUxfU0VUX0VYVF9DT01QUkVTU0lPTl9NRVRIT0QodG9hc3Rf cG9pbnRlcl9leHQsIG1ldGhvZCkgXAorCWRvIHsgXAorCQkodG9hc3RfcG9pbnRlcl9leHQpLnZh X2RhdGFbMF0gPSAobWV0aG9kKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIEdldCBleHRzaXplIGFu ZCBjb21wcmVzcyBtZXRob2QgZnJvbSBleHRlbmRlZCBwb2ludGVyIChzYW1lIGFzIHN0YW5kYXJk KSAqLworc3RhdGljIGlubGluZSBTaXplCitWQVJBVFRfRVhURVJOQUxfR0VUX0VYVFNJWkVfRVhU RU5ERUQoc3RydWN0IHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCB0b2FzdF9wb2ludGVyX2V4dCkK K3sKKwlyZXR1cm4gdG9hc3RfcG9pbnRlcl9leHQudmFfZXh0aW5mbyAmIFZBUkxFTkFfRVhUU0la RV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMgorVkFSQVRUX0VYVEVSTkFMX0dFVF9D T01QUkVTU19NRVRIT0RfRVhURU5ERUQoc3RydWN0IHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCB0 b2FzdF9wb2ludGVyX2V4dCkKK3sKKwlyZXR1cm4gdG9hc3RfcG9pbnRlcl9leHQudmFfZXh0aW5m byA+PiBWQVJMRU5BX0VYVFNJWkVfQklUUzsKK30KKworLyogU2V0IHNpemUgYW5kIGV4dGVuZGVk IGluZGljYXRvciBpbiB2YV9leHRpbmZvICovCisjZGVmaW5lIFZBUkFUVF9FWFRFUk5BTF9TRVRf U0laRV9BTkRfRVhUX0ZMQUdTKHRvYXN0X3BvaW50ZXJfZXh0LCBsZW4sIGZsYWdzKSBcCisJZG8g eyBcCisJCUFzc2VydCgobGVuKSA+IDAgJiYgKGxlbikgPD0gVkFSTEVOQV9FWFRTSVpFX01BU0sp OyBcCisJCSh0b2FzdF9wb2ludGVyX2V4dCkudmFfZXh0aW5mbyA9IFwKKwkJCShsZW4pIHwgKCh1 aW50MzIpIFZBUkFUVF9FWFRFUk5BTF9FWFRFTkRFRF9DTUlEIDw8IFZBUkxFTkFfRVhUU0laRV9C SVRTKTsgXAorCQkodG9hc3RfcG9pbnRlcl9leHQpLnZhX2ZsYWdzID0gKGZsYWdzKTsgXAorCQlt ZW1zZXQoKHRvYXN0X3BvaW50ZXJfZXh0KS52YV9kYXRhLCAwLCAzKTsgXAorCX0gd2hpbGUgKDAp CisKKy8qIENvbnZlbmllbmNlIG1hY3JvIGZvciBzZXR0aW5nIGV4dGVuZGVkIHBvaW50ZXIgd2l0 aCBjb21wcmVzc2lvbiBtZXRob2QgKi8KKyNkZWZpbmUgVkFSQVRUX0VYVEVSTkFMX1NFVF9TSVpF X0FORF9FWFRfQ09NUFJFU1NJT04odG9hc3RfcG9pbnRlcl9leHQsIGxlbiwgbWV0aG9kKSBcCisJ ZG8geyBcCisJCVZBUkFUVF9FWFRFUk5BTF9TRVRfU0laRV9BTkRfRVhUX0ZMQUdTKHRvYXN0X3Bv aW50ZXJfZXh0LCBsZW4sIFZBUkFUVF9FWFRFUk5BTF9GTEFHX0NPTVBSRVNTSU9OKTsgXAorCQlW QVJBVFRfRVhURVJOQUxfU0VUX0VYVF9DT01QUkVTU0lPTl9NRVRIT0QodG9hc3RfcG9pbnRlcl9l eHQsIG1ldGhvZCk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBUZXN0IGlmIGV4dGVuZGVkIHBvaW50 ZXIgaXMgY29tcHJlc3NlZCAoc2FtZSBsb2dpYyBhcyBzdGFuZGFyZCkgKi8KK3N0YXRpYyBpbmxp bmUgYm9vbAorVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRURfRVhURU5ERUQoc3RydWN0IHZh cmF0dF9leHRlcm5hbF9leHRlbmRlZCB0b2FzdF9wb2ludGVyX2V4dCkKK3sKKwlyZXR1cm4gVkFS QVRUX0VYVEVSTkFMX0dFVF9FWFRTSVpFX0VYVEVOREVEKHRvYXN0X3BvaW50ZXJfZXh0KSA8CisJ CShTaXplKSAodG9hc3RfcG9pbnRlcl9leHQudmFfcmF3c2l6ZSAtIFZBUkhEUlNaKTsKK30KKwog I2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIGIvc3JjL3Rl c3QvbW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCAwNjhmZDg1OWE4Zi4uOWRmZjExOWFhMjIgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy9tZXNvbi5idWlsZApAQCAtNDcsNiArNDcsNyBAQCBzdWJkaXIoJ3Rlc3RfcmxzX2hvb2tz JykKIHN1YmRpcigndGVzdF9zaG1fbXEnKQogc3ViZGlyKCd0ZXN0X3NscnUnKQogc3ViZGlyKCd0 ZXN0X3RpZHN0b3JlJykKK3N1YmRpcigndGVzdF90b2FzdF9leHQnKQogc3ViZGlyKCd0eXBjYWNo ZScpCiBzdWJkaXIoJ3Vuc2FmZV90ZXN0cycpCiBzdWJkaXIoJ3dvcmtlcl9zcGknKQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC9NYWtlZmlsZSBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF90b2FzdF9leHQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjVlMjQwOWY5MThjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X3RvYXN0X2V4dC9NYWtlZmlsZQpAQCAtMCwwICsxLDIwIEBACisjIHNyYy90 ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9IHRlc3Rf dG9hc3RfZXh0CitPQkpTID0gdGVzdF90b2FzdF9leHQubworCitFWFRFTlNJT04gPSB0ZXN0X3Rv YXN0X2V4dAorREFUQSA9IHRlc3RfdG9hc3RfZXh0LS0xLjAuc3FsCisKK1JFR1JFU1MgPSB0ZXN0 X3RvYXN0X2V4dAorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hT IDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQor c3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dAordG9wX2J1aWxkZGlyID0g Li4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwK K2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC9leHBlY3RlZC90ZXN0 X3RvYXN0X2V4dC5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L2V4cGVjdGVk L3Rlc3RfdG9hc3RfZXh0Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uNTM5ZjQ0Mzc2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf dG9hc3RfZXh0L2V4cGVjdGVkL3Rlc3RfdG9hc3RfZXh0Lm91dApAQCAtMCwwICsxLDE4NyBAQAor LS0KKy0tIFRlc3RzIGZvciBleHRlbmRlZCBUT0FTVCBoZWFkZXIgc3RydWN0dXJlcyBhbmQgenN0 ZCBjb21wcmVzc2lvbgorLS0KK0NSRUFURSBFWFRFTlNJT04gdGVzdF90b2FzdF9leHQ7CistLSBV c2UgZGVkaWNhdGVkIHNjaGVtYSBmb3IgdGVzdCBpc29sYXRpb24KK0NSRUFURSBTQ0hFTUEgdGVz dF90b2FzdF9leHRfc2NoZW1hOworU0VUIHNlYXJjaF9wYXRoIFRPIHRlc3RfdG9hc3RfZXh0X3Nj aGVtYSwgcHVibGljOworLS0gQ29tcGlsZS10aW1lIHZhbGlkYXRpb24gdGVzdHMgKGFsd2F5cyBy dW4pCistLSBUaGVzZSBlcnJvciBvdXQgb24gZmFpbHVyZSwgc28gY29tcGxldGluZyB3aXRob3V0 IGVycm9yID0gcGFzcworU0VMRUNUIHRlc3RfdG9hc3Rfc3RydWN0dXJlX3NpemVzKCk7CisgdGVz dF90b2FzdF9zdHJ1Y3R1cmVfc2l6ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor KDEgcm93KQorCitTRUxFQ1QgdGVzdF90b2FzdF9mbGFnX3ZhbGlkYXRpb24oKTsKKyB0ZXN0X3Rv YXN0X2ZsYWdfdmFsaWRhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoMSBy b3cpCisKK1NFTEVDVCB0ZXN0X3RvYXN0X2NvbXByZXNzaW9uX2lkcygpOworIHRlc3RfdG9hc3Rf Y29tcHJlc3Npb25faWRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKygxIHJvdykK KworLS0KKy0tIEZ1bmN0aW9uYWwgdGVzdHMgZm9yIHpzdGQgVE9BU1QgY29tcHJlc3Npb24KKy0t IFNraXAgaWYgbm90IGJ1aWx0IHdpdGggVVNFX1pTVEQKKy0tCitTRUxFQ1QgTk9UKGVudW12YWxz IEA+ICd7enN0ZH0nKSBBUyBza2lwX3Rlc3QgRlJPTSBwZ19zZXR0aW5ncyBXSEVSRQorICBuYW1l ID0gJ2RlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24nIFxnc2V0CitcaWYgOnNraXBfdGVzdAorICAg XGVjaG8gJyoqKiBza2lwcGluZyBUT0FTVCB0ZXN0cyB3aXRoIHpzdGQgKG5vdCBzdXBwb3J0ZWQp ICoqKicKKyAgIFxxdWl0CitcZW5kaWYKKy0tIFRlc3QgYmFzaWMgenN0ZCBjb21wcmVzc2lvbgor Q1JFQVRFIFRBQkxFIHRlc3RfenN0ZF9iYXNpYyAoaWQgc2VyaWFsLCBkYXRhIHRleHQgQ09NUFJF U1NJT04genN0ZCk7CitJTlNFUlQgSU5UTyB0ZXN0X3pzdGRfYmFzaWMgKGRhdGEpCisgICAgVkFM VUVTIChyZXBlYXQoJ1Bvc3RncmVTUUwgenN0ZCBUT0FTVCBjb21wcmVzc2lvbiB0ZXN0LiAnLCAz MDAwKSk7CitTRUxFQ1QgaWQsCisgICAgICAgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpIEFT IGNvbXByZXNzaW9uLAorICAgICAgIGxlbmd0aChkYXRhKSBBUyBkYXRhX2xlbmd0aCwKKyAgICAg ICBsZWZ0KGRhdGEsIDQyKSBBUyBkYXRhX3ByZWZpeAorRlJPTSB0ZXN0X3pzdGRfYmFzaWM7Cisg aWQgfCBjb21wcmVzc2lvbiB8IGRhdGFfbGVuZ3RoIHwgICAgICAgICAgICAgICAgZGF0YV9wcmVm aXgKKy0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgfCB6c3RkICAgICAgICB8ICAgICAgMTIwMDAw IHwgUG9zdGdyZVNRTCB6c3RkIFRPQVNUIGNvbXByZXNzaW9uIHRlc3QuIFBvCisoMSByb3cpCisK Ky0tIFRlc3Qgc2xpY2UgYWNjZXNzCitTRUxFQ1QgaWQsIHN1YnN0cihkYXRhLCAxMDAsIDQyKSBB UyBzbGljZSBGUk9NIHRlc3RfenN0ZF9iYXNpYzsKKyBpZCB8ICAgICAgICAgICAgICAgICAgIHNs aWNlCistLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg IDEgfCBTVCBjb21wcmVzc2lvbiB0ZXN0LiBQb3N0Z3JlU1FMIHpzdGQgVE9BU1QKKygxIHJvdykK KworLS0gVGVzdCBVUERBVEUKK1VQREFURSB0ZXN0X3pzdGRfYmFzaWMgU0VUIGRhdGEgPSByZXBl YXQoJ1VwZGF0ZWQgenN0ZCBkYXRhIGZvciBUT0FTVCB0ZXN0LiAnLCAzMDAwKTsKK1NFTEVDVCBp ZCwKKyAgICAgICBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24sCisg ICAgICAgbGVuZ3RoKGRhdGEpIEFTIGRhdGFfbGVuZ3RoLAorICAgICAgIGxlZnQoZGF0YSwgMzUp IEFTIGRhdGFfcHJlZml4CitGUk9NIHRlc3RfenN0ZF9iYXNpYzsKKyBpZCB8IGNvbXByZXNzaW9u IHwgZGF0YV9sZW5ndGggfCAgICAgICAgICAgICBkYXRhX3ByZWZpeAorLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAxIHwgenN0ZCAgICAgICAgfCAgICAgIDEwMjAwMCB8IFVwZGF0ZWQgenN0ZCBkYXRhIGZvciBU T0FTVCB0ZXN0LiBVCisoMSByb3cpCisKKy0tIFRlc3QgZXh0ZW5kZWQgaGVhZGVyIHdpdGggcGds egorU0VUIHVzZV9leHRlbmRlZF90b2FzdF9oZWFkZXIgPSBvbjsKK0NSRUFURSBUQUJMRSB0ZXN0 X3BnbHpfZXh0ZW5kZWQgKGRhdGEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0lOU0VSVCBJTlRP IHRlc3RfcGdsel9leHRlbmRlZCAoZGF0YSkKKyAgICBWQUxVRVMgKHJlcGVhdCgnUEdMWiB3aXRo IGV4dGVuZGVkIGhlYWRlciBmb3JtYXQuICcsIDMwMDApKTsKK1NFTEVDVCBwZ19jb2x1bW5fY29t cHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24sCisgICAgICAgbGVuZ3RoKGRhdGEpIEFTIGRh dGFfbGVuZ3RoCitGUk9NIHRlc3RfcGdsel9leHRlbmRlZDsKKyBjb21wcmVzc2lvbiB8IGRhdGFf bGVuZ3RoCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBwZ2x6ICAgICAgICB8ICAgICAg MTAyMDAwCisoMSByb3cpCisKK1NFTEVDVCBzdWJzdHIoZGF0YSwgNTAsIDM0KSBBUyBzbGljZSBG Uk9NIHRlc3RfcGdsel9leHRlbmRlZDsKKyAgICAgICAgICAgICAgIHNsaWNlCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkZWQgaGVhZGVyIGZvcm1hdC4gUEdMWiB3aXRo IGV4dGVuCisoMSByb3cpCisKKy0tIFRlc3QgZGF0YSBpbnRlZ3JpdHkKK0NSRUFURSBUQUJMRSB0 ZXN0X2ludGVncml0eSAoCisgICAgbWV0aG9kIHRleHQsCisgICAgb3JpZ2luYWxfZGF0YSB0ZXh0 LAorICAgIGNvbXByZXNzZWRfZGF0YSB0ZXh0CispOworSU5TRVJUIElOVE8gdGVzdF9pbnRlZ3Jp dHkgVkFMVUVTCisgICAgKCdwZ2x6JywgcmVwZWF0KCdJbnRlZ3JpdHkgdGVzdCBkYXRhIHBhdHRl cm4uICcsIDIwMDApLCBOVUxMKSwKKyAgICAoJ3pzdGQnLCByZXBlYXQoJ0ludGVncml0eSB0ZXN0 IGRhdGEgcGF0dGVybi4gJywgMjAwMCksIE5VTEwpOworQ1JFQVRFIFRBQkxFIHRlc3RfcGdsel9p bnRlZ3JpdHkgKGRhdGEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0NSRUFURSBUQUJMRSB0ZXN0 X3pzdGRfaW50ZWdyaXR5IChkYXRhIHRleHQgQ09NUFJFU1NJT04genN0ZCk7CitJTlNFUlQgSU5U TyB0ZXN0X3BnbHpfaW50ZWdyaXR5IFNFTEVDVCBvcmlnaW5hbF9kYXRhIEZST00gdGVzdF9pbnRl Z3JpdHkgV0hFUkUgbWV0aG9kID0gJ3BnbHonOworSU5TRVJUIElOVE8gdGVzdF96c3RkX2ludGVn cml0eSBTRUxFQ1Qgb3JpZ2luYWxfZGF0YSBGUk9NIHRlc3RfaW50ZWdyaXR5IFdIRVJFIG1ldGhv ZCA9ICd6c3RkJzsKK1NFTEVDVCAncGdseicgQVMgbWV0aG9kLAorICAgICAgIG1kNSgoU0VMRUNU IG9yaWdpbmFsX2RhdGEgRlJPTSB0ZXN0X2ludGVncml0eSBXSEVSRSBtZXRob2QgPSAncGdseicp KSA9CisgICAgICAgbWQ1KChTRUxFQ1QgZGF0YSBGUk9NIHRlc3RfcGdsel9pbnRlZ3JpdHkpKSBB UyBjaGVja3N1bV9tYXRjaDsKKyBtZXRob2QgfCBjaGVja3N1bV9tYXRjaAorLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLQorIHBnbHogICB8IHQKKygxIHJvdykKKworU0VMRUNUICd6c3RkJyBBUyBt ZXRob2QsCisgICAgICAgbWQ1KChTRUxFQ1Qgb3JpZ2luYWxfZGF0YSBGUk9NIHRlc3RfaW50ZWdy aXR5IFdIRVJFIG1ldGhvZCA9ICd6c3RkJykpID0KKyAgICAgICBtZDUoKFNFTEVDVCBkYXRhIEZS T00gdGVzdF96c3RkX2ludGVncml0eSkpIEFTIGNoZWNrc3VtX21hdGNoOworIG1ldGhvZCB8IGNo ZWNrc3VtX21hdGNoCistLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tCisgenN0ZCAgIHwgdAorKDEg cm93KQorCistLSBUZXN0IENMVVNURVIgYW5kIFZBQ1VVTSBGVUxMCitDUkVBVEUgVEFCTEUgdGVz dF9jbHVzdGVyX3pzdGQgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSwgZGF0YSB0ZXh0IENPTVBSRVNT SU9OIHpzdGQpOworSU5TRVJUIElOVE8gdGVzdF9jbHVzdGVyX3pzdGQgKGRhdGEpCisgICAgVkFM VUVTIChyZXBlYXQoJ0RhdGEgZm9yIENMVVNURVIgdGVzdCB3aXRoIHpzdGQgY29tcHJlc3Npb24u ICcsIDI1MDApKTsKK1NFTEVDVCAnYmVmb3JlX2NsdXN0ZXInIEFTIHN0YWdlLCBtZDUoZGF0YSkg QVMgaGFzaCBGUk9NIHRlc3RfY2x1c3Rlcl96c3RkOworICAgICBzdGFnZSAgICAgIHwgICAgICAg ICAgICAgICBoYXNoCistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBiZWZvcmVfY2x1c3RlciB8IGI0MTMyZTc5OWJiZDA2NWE3ZTkyNjYxNTlhYTgy ZGMxCisoMSByb3cpCisKK0NMVVNURVIgdGVzdF9jbHVzdGVyX3pzdGQgVVNJTkcgdGVzdF9jbHVz dGVyX3pzdGRfcGtleTsKK1NFTEVDVCAnYWZ0ZXJfY2x1c3RlcicgQVMgc3RhZ2UsCisgICAgICAg cGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpIEFTIGNvbXByZXNzaW9uLAorICAgICAgIG1kNShk YXRhKSBBUyBoYXNoCitGUk9NIHRlc3RfY2x1c3Rlcl96c3RkOworICAgICBzdGFnZSAgICAgfCBj b21wcmVzc2lvbiB8ICAgICAgICAgICAgICAgaGFzaAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGFmdGVyX2NsdXN0ZXIg fCB6c3RkICAgICAgICB8IGI0MTMyZTc5OWJiZDA2NWE3ZTkyNjYxNTlhYTgyZGMxCisoMSByb3cp CisKK1ZBQ1VVTSBGVUxMIHRlc3RfY2x1c3Rlcl96c3RkOworU0VMRUNUICdhZnRlcl92YWN1dW1f ZnVsbCcgQVMgc3RhZ2UsCisgICAgICAgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpIEFTIGNv bXByZXNzaW9uLAorICAgICAgIG1kNShkYXRhKSBBUyBoYXNoCitGUk9NIHRlc3RfY2x1c3Rlcl96 c3RkOworICAgICAgIHN0YWdlICAgICAgIHwgY29tcHJlc3Npb24gfCAgICAgICAgICAgICAgIGhh c2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgYWZ0ZXJfdmFjdXVtX2Z1bGwgfCB6c3RkICAgICAgICB8IGI0MTMy ZTc5OWJiZDA2NWE3ZTkyNjYxNTlhYTgyZGMxCisoMSByb3cpCisKKy0tIFRlc3QgR1VDIHRvZ2ds aW5nIChtaXhlZCBmb3JtYXRzIGluIHNhbWUgdGFibGUpCitTRVQgdXNlX2V4dGVuZGVkX3RvYXN0 X2hlYWRlciA9IG9uOworQ1JFQVRFIFRBQkxFIHRlc3RfZ3VjX3RvZ2dsZSAoaWQgc2VyaWFsLCBk YXRhIHRleHQgQ09NUFJFU1NJT04gcGdseik7CitJTlNFUlQgSU5UTyB0ZXN0X2d1Y190b2dnbGUg KGRhdGEpCisgICAgVkFMVUVTIChyZXBlYXQoJ0RhdGEgY3JlYXRlZCB3aXRoIGV4dGVuZGVkIGhl YWRlciBvbi4gJywgMzAwMCkpOworU0VMRUNUICd3aXRoX2V4dF9vbicgQVMgc3RhZ2UsCisgICAg ICAgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpIEFTIGNvbXByZXNzaW9uLAorICAgICAgIGxl bmd0aChkYXRhKSBBUyBkYXRhX2xlbmd0aAorRlJPTSB0ZXN0X2d1Y190b2dnbGU7CisgICAgc3Rh Z2UgICAgfCBjb21wcmVzc2lvbiB8IGRhdGFfbGVuZ3RoCistLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLQorIHdpdGhfZXh0X29uIHwgcGdseiAgICAgICAgfCAgICAgIDEx NDAwMAorKDEgcm93KQorCitTRVQgdXNlX2V4dGVuZGVkX3RvYXN0X2hlYWRlciA9IG9mZjsKK0lO U0VSVCBJTlRPIHRlc3RfZ3VjX3RvZ2dsZSAoZGF0YSkKKyAgICBWQUxVRVMgKHJlcGVhdCgnRGF0 YSBjcmVhdGVkIHdpdGggZXh0ZW5kZWQgaGVhZGVyIG9mZi4gJywgMzAwMCkpOworU0VMRUNUIGlk LAorICAgICAgIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSBBUyBjb21wcmVzc2lvbiwKKyAg ICAgICBsZW5ndGgoZGF0YSkgQVMgZGF0YV9sZW5ndGgsCisgICAgICAgbGVmdChkYXRhLCAzOSkg QVMgZGF0YV9wcmVmaXgKK0ZST00gdGVzdF9ndWNfdG9nZ2xlIE9SREVSIEJZIGlkOworIGlkIHwg Y29tcHJlc3Npb24gfCBkYXRhX2xlbmd0aCB8ICAgICAgICAgICAgICAgZGF0YV9wcmVmaXgKKy0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgIDEgfCBwZ2x6ICAgICAgICB8ICAgICAgMTE0MDAwIHwgRGF0YSBj cmVhdGVkIHdpdGggZXh0ZW5kZWQgaGVhZGVyIG9uLiBECisgIDIgfCBwZ2x6ICAgICAgICB8ICAg ICAgMTE3MDAwIHwgRGF0YSBjcmVhdGVkIHdpdGggZXh0ZW5kZWQgaGVhZGVyIG9mZi4KKygyIHJv d3MpCisKK1NFVCB1c2VfZXh0ZW5kZWRfdG9hc3RfaGVhZGVyID0gb247CitTRUxFQ1QgaWQsIGxl bmd0aChkYXRhKSBBUyBkYXRhX2xlbmd0aCBGUk9NIHRlc3RfZ3VjX3RvZ2dsZSBPUkRFUiBCWSBp ZDsKKyBpZCB8IGRhdGFfbGVuZ3RoCistLS0tKy0tLS0tLS0tLS0tLS0KKyAgMSB8ICAgICAgMTE0 MDAwCisgIDIgfCAgICAgIDExNzAwMAorKDIgcm93cykKKworLS0gQ2xlYW51cAorRFJPUCBTQ0hF TUEgdGVzdF90b2FzdF9leHRfc2NoZW1hIENBU0NBREU7CitEUk9QIEVYVEVOU0lPTiB0ZXN0X3Rv YXN0X2V4dDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvZXhw ZWN0ZWQvdGVzdF90b2FzdF9leHRfMS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3Rf ZXh0L2V4cGVjdGVkL3Rlc3RfdG9hc3RfZXh0XzEub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi44OTc2NjFmYzJhNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF90b2FzdF9leHQvZXhwZWN0ZWQvdGVzdF90b2FzdF9leHRfMS5vdXQKQEAg LTAsMCArMSwzNyBAQAorLS0KKy0tIFRlc3RzIGZvciBleHRlbmRlZCBUT0FTVCBoZWFkZXIgc3Ry dWN0dXJlcyBhbmQgenN0ZCBjb21wcmVzc2lvbgorLS0KK0NSRUFURSBFWFRFTlNJT04gdGVzdF90 b2FzdF9leHQ7CistLSBVc2UgZGVkaWNhdGVkIHNjaGVtYSBmb3IgdGVzdCBpc29sYXRpb24KK0NS RUFURSBTQ0hFTUEgdGVzdF90b2FzdF9leHRfc2NoZW1hOworU0VUIHNlYXJjaF9wYXRoIFRPIHRl c3RfdG9hc3RfZXh0X3NjaGVtYSwgcHVibGljOworLS0gQ29tcGlsZS10aW1lIHZhbGlkYXRpb24g dGVzdHMgKGFsd2F5cyBydW4pCistLSBUaGVzZSBlcnJvciBvdXQgb24gZmFpbHVyZSwgc28gY29t cGxldGluZyB3aXRob3V0IGVycm9yID0gcGFzcworU0VMRUNUIHRlc3RfdG9hc3Rfc3RydWN0dXJl X3NpemVzKCk7CisgdGVzdF90b2FzdF9zdHJ1Y3R1cmVfc2l6ZXMKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKworKDEgcm93KQorCitTRUxFQ1QgdGVzdF90b2FzdF9mbGFnX3ZhbGlkYXRp b24oKTsKKyB0ZXN0X3RvYXN0X2ZsYWdfdmFsaWRhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorCisoMSByb3cpCisKK1NFTEVDVCB0ZXN0X3RvYXN0X2NvbXByZXNzaW9uX2lkcygp OworIHRlc3RfdG9hc3RfY29tcHJlc3Npb25faWRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisKKygxIHJvdykKKworLS0KKy0tIEZ1bmN0aW9uYWwgdGVzdHMgZm9yIHpzdGQgVE9BU1Qg Y29tcHJlc3Npb24KKy0tIFNraXAgaWYgbm90IGJ1aWx0IHdpdGggVVNFX1pTVEQKKy0tCitTRUxF Q1QgTk9UKGVudW12YWxzIEA+ICd7enN0ZH0nKSBBUyBza2lwX3Rlc3QgRlJPTSBwZ19zZXR0aW5n cyBXSEVSRQorICBuYW1lID0gJ2RlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24nIFxnc2V0CitcaWYg OnNraXBfdGVzdAorICAgXGVjaG8gJyoqKiBza2lwcGluZyBUT0FTVCB0ZXN0cyB3aXRoIHpzdGQg KG5vdCBzdXBwb3J0ZWQpICoqKicKKyoqKiBza2lwcGluZyBUT0FTVCB0ZXN0cyB3aXRoIHpzdGQg KG5vdCBzdXBwb3J0ZWQpICoqKgorICAgXHF1aXQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF90b2FzdF9leHQvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9h c3RfZXh0L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li42MWMwN2VhMTkxMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90 b2FzdF9leHQvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5cmlnaHQgKGMpIDIw MjItMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordGVzdF90b2Fz dF9leHRfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF90b2FzdF9leHQuYycsCispCisKK2lmIGhv c3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X3RvYXN0X2V4dF9zb3VyY2VzICs9IHJjX2xp Yl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAn dGVzdF90b2FzdF9leHQnLAorICAgICctLUZJTEVERVNDJywgJ3Rlc3RfdG9hc3RfZXh0IC0gdGVz dCBjb2RlIGZvciBleHRlbmRlZCBUT0FTVCBoZWFkZXJzJyxdKQorZW5kaWYKKwordGVzdF90b2Fz dF9leHQgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X3RvYXN0X2V4dCcsCisgIHRlc3RfdG9hc3RfZXh0 X3NvdXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9s aWJzICs9IHRlc3RfdG9hc3RfZXh0CisKK3Rlc3RfaW5zdGFsbF9kYXRhICs9IGZpbGVzKAorICAn dGVzdF90b2FzdF9leHQuY29udHJvbCcsCisgICd0ZXN0X3RvYXN0X2V4dC0tMS4wLnNxbCcsCisp CisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF90b2FzdF9leHQnLAorICAnc2QnOiBtZXNv bi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIo KSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICd0ZXN0X3RvYXN0X2V4dCcs CisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90b2Fz dF9leHQvc3FsL3Rlc3RfdG9hc3RfZXh0LnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90b2Fz dF9leHQvc3FsL3Rlc3RfdG9hc3RfZXh0LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uODJlMzZjNTdiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfdG9hc3RfZXh0L3NxbC90ZXN0X3RvYXN0X2V4dC5zcWwKQEAgLTAsMCArMSwxMzYg QEAKKy0tCistLSBUZXN0cyBmb3IgZXh0ZW5kZWQgVE9BU1QgaGVhZGVyIHN0cnVjdHVyZXMgYW5k IHpzdGQgY29tcHJlc3Npb24KKy0tCisKK0NSRUFURSBFWFRFTlNJT04gdGVzdF90b2FzdF9leHQ7 CisKKy0tIFVzZSBkZWRpY2F0ZWQgc2NoZW1hIGZvciB0ZXN0IGlzb2xhdGlvbgorQ1JFQVRFIFND SEVNQSB0ZXN0X3RvYXN0X2V4dF9zY2hlbWE7CitTRVQgc2VhcmNoX3BhdGggVE8gdGVzdF90b2Fz dF9leHRfc2NoZW1hLCBwdWJsaWM7CisKKy0tIENvbXBpbGUtdGltZSB2YWxpZGF0aW9uIHRlc3Rz IChhbHdheXMgcnVuKQorLS0gVGhlc2UgZXJyb3Igb3V0IG9uIGZhaWx1cmUsIHNvIGNvbXBsZXRp bmcgd2l0aG91dCBlcnJvciA9IHBhc3MKK1NFTEVDVCB0ZXN0X3RvYXN0X3N0cnVjdHVyZV9zaXpl cygpOworU0VMRUNUIHRlc3RfdG9hc3RfZmxhZ192YWxpZGF0aW9uKCk7CitTRUxFQ1QgdGVzdF90 b2FzdF9jb21wcmVzc2lvbl9pZHMoKTsKKworLS0KKy0tIEZ1bmN0aW9uYWwgdGVzdHMgZm9yIHpz dGQgVE9BU1QgY29tcHJlc3Npb24KKy0tIFNraXAgaWYgbm90IGJ1aWx0IHdpdGggVVNFX1pTVEQK Ky0tCisKK1NFTEVDVCBOT1QoZW51bXZhbHMgQD4gJ3t6c3RkfScpIEFTIHNraXBfdGVzdCBGUk9N IHBnX3NldHRpbmdzIFdIRVJFCisgIG5hbWUgPSAnZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbicg XGdzZXQKK1xpZiA6c2tpcF90ZXN0CisgICBcZWNobyAnKioqIHNraXBwaW5nIFRPQVNUIHRlc3Rz IHdpdGggenN0ZCAobm90IHN1cHBvcnRlZCkgKioqJworICAgXHF1aXQKK1xlbmRpZgorCistLSBU ZXN0IGJhc2ljIHpzdGQgY29tcHJlc3Npb24KK0NSRUFURSBUQUJMRSB0ZXN0X3pzdGRfYmFzaWMg KGlkIHNlcmlhbCwgZGF0YSB0ZXh0IENPTVBSRVNTSU9OIHpzdGQpOworSU5TRVJUIElOVE8gdGVz dF96c3RkX2Jhc2ljIChkYXRhKQorICAgIFZBTFVFUyAocmVwZWF0KCdQb3N0Z3JlU1FMIHpzdGQg VE9BU1QgY29tcHJlc3Npb24gdGVzdC4gJywgMzAwMCkpOworCitTRUxFQ1QgaWQsCisgICAgICAg cGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpIEFTIGNvbXByZXNzaW9uLAorICAgICAgIGxlbmd0 aChkYXRhKSBBUyBkYXRhX2xlbmd0aCwKKyAgICAgICBsZWZ0KGRhdGEsIDQyKSBBUyBkYXRhX3By ZWZpeAorRlJPTSB0ZXN0X3pzdGRfYmFzaWM7CisKKy0tIFRlc3Qgc2xpY2UgYWNjZXNzCitTRUxF Q1QgaWQsIHN1YnN0cihkYXRhLCAxMDAsIDQyKSBBUyBzbGljZSBGUk9NIHRlc3RfenN0ZF9iYXNp YzsKKworLS0gVGVzdCBVUERBVEUKK1VQREFURSB0ZXN0X3pzdGRfYmFzaWMgU0VUIGRhdGEgPSBy ZXBlYXQoJ1VwZGF0ZWQgenN0ZCBkYXRhIGZvciBUT0FTVCB0ZXN0LiAnLCAzMDAwKTsKK1NFTEVD VCBpZCwKKyAgICAgICBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24s CisgICAgICAgbGVuZ3RoKGRhdGEpIEFTIGRhdGFfbGVuZ3RoLAorICAgICAgIGxlZnQoZGF0YSwg MzUpIEFTIGRhdGFfcHJlZml4CitGUk9NIHRlc3RfenN0ZF9iYXNpYzsKKworLS0gVGVzdCBleHRl bmRlZCBoZWFkZXIgd2l0aCBwZ2x6CitTRVQgdXNlX2V4dGVuZGVkX3RvYXN0X2hlYWRlciA9IG9u OworCitDUkVBVEUgVEFCTEUgdGVzdF9wZ2x6X2V4dGVuZGVkIChkYXRhIHRleHQgQ09NUFJFU1NJ T04gcGdseik7CitJTlNFUlQgSU5UTyB0ZXN0X3BnbHpfZXh0ZW5kZWQgKGRhdGEpCisgICAgVkFM VUVTIChyZXBlYXQoJ1BHTFogd2l0aCBleHRlbmRlZCBoZWFkZXIgZm9ybWF0LiAnLCAzMDAwKSk7 CisKK1NFTEVDVCBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24sCisg ICAgICAgbGVuZ3RoKGRhdGEpIEFTIGRhdGFfbGVuZ3RoCitGUk9NIHRlc3RfcGdsel9leHRlbmRl ZDsKKworU0VMRUNUIHN1YnN0cihkYXRhLCA1MCwgMzQpIEFTIHNsaWNlIEZST00gdGVzdF9wZ2x6 X2V4dGVuZGVkOworCistLSBUZXN0IGRhdGEgaW50ZWdyaXR5CitDUkVBVEUgVEFCTEUgdGVzdF9p bnRlZ3JpdHkgKAorICAgIG1ldGhvZCB0ZXh0LAorICAgIG9yaWdpbmFsX2RhdGEgdGV4dCwKKyAg ICBjb21wcmVzc2VkX2RhdGEgdGV4dAorKTsKKworSU5TRVJUIElOVE8gdGVzdF9pbnRlZ3JpdHkg VkFMVUVTCisgICAgKCdwZ2x6JywgcmVwZWF0KCdJbnRlZ3JpdHkgdGVzdCBkYXRhIHBhdHRlcm4u ICcsIDIwMDApLCBOVUxMKSwKKyAgICAoJ3pzdGQnLCByZXBlYXQoJ0ludGVncml0eSB0ZXN0IGRh dGEgcGF0dGVybi4gJywgMjAwMCksIE5VTEwpOworCitDUkVBVEUgVEFCTEUgdGVzdF9wZ2x6X2lu dGVncml0eSAoZGF0YSB0ZXh0IENPTVBSRVNTSU9OIHBnbHopOworQ1JFQVRFIFRBQkxFIHRlc3Rf enN0ZF9pbnRlZ3JpdHkgKGRhdGEgdGV4dCBDT01QUkVTU0lPTiB6c3RkKTsKKworSU5TRVJUIElO VE8gdGVzdF9wZ2x6X2ludGVncml0eSBTRUxFQ1Qgb3JpZ2luYWxfZGF0YSBGUk9NIHRlc3RfaW50 ZWdyaXR5IFdIRVJFIG1ldGhvZCA9ICdwZ2x6JzsKK0lOU0VSVCBJTlRPIHRlc3RfenN0ZF9pbnRl Z3JpdHkgU0VMRUNUIG9yaWdpbmFsX2RhdGEgRlJPTSB0ZXN0X2ludGVncml0eSBXSEVSRSBtZXRo b2QgPSAnenN0ZCc7CisKK1NFTEVDVCAncGdseicgQVMgbWV0aG9kLAorICAgICAgIG1kNSgoU0VM RUNUIG9yaWdpbmFsX2RhdGEgRlJPTSB0ZXN0X2ludGVncml0eSBXSEVSRSBtZXRob2QgPSAncGds eicpKSA9CisgICAgICAgbWQ1KChTRUxFQ1QgZGF0YSBGUk9NIHRlc3RfcGdsel9pbnRlZ3JpdHkp KSBBUyBjaGVja3N1bV9tYXRjaDsKKworU0VMRUNUICd6c3RkJyBBUyBtZXRob2QsCisgICAgICAg bWQ1KChTRUxFQ1Qgb3JpZ2luYWxfZGF0YSBGUk9NIHRlc3RfaW50ZWdyaXR5IFdIRVJFIG1ldGhv ZCA9ICd6c3RkJykpID0KKyAgICAgICBtZDUoKFNFTEVDVCBkYXRhIEZST00gdGVzdF96c3RkX2lu dGVncml0eSkpIEFTIGNoZWNrc3VtX21hdGNoOworCistLSBUZXN0IENMVVNURVIgYW5kIFZBQ1VV TSBGVUxMCitDUkVBVEUgVEFCTEUgdGVzdF9jbHVzdGVyX3pzdGQgKGlkIHNlcmlhbCBQUklNQVJZ IEtFWSwgZGF0YSB0ZXh0IENPTVBSRVNTSU9OIHpzdGQpOworSU5TRVJUIElOVE8gdGVzdF9jbHVz dGVyX3pzdGQgKGRhdGEpCisgICAgVkFMVUVTIChyZXBlYXQoJ0RhdGEgZm9yIENMVVNURVIgdGVz dCB3aXRoIHpzdGQgY29tcHJlc3Npb24uICcsIDI1MDApKTsKKworU0VMRUNUICdiZWZvcmVfY2x1 c3RlcicgQVMgc3RhZ2UsIG1kNShkYXRhKSBBUyBoYXNoIEZST00gdGVzdF9jbHVzdGVyX3pzdGQ7 CisKK0NMVVNURVIgdGVzdF9jbHVzdGVyX3pzdGQgVVNJTkcgdGVzdF9jbHVzdGVyX3pzdGRfcGtl eTsKKworU0VMRUNUICdhZnRlcl9jbHVzdGVyJyBBUyBzdGFnZSwKKyAgICAgICBwZ19jb2x1bW5f Y29tcHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24sCisgICAgICAgbWQ1KGRhdGEpIEFTIGhh c2gKK0ZST00gdGVzdF9jbHVzdGVyX3pzdGQ7CisKK1ZBQ1VVTSBGVUxMIHRlc3RfY2x1c3Rlcl96 c3RkOworCitTRUxFQ1QgJ2FmdGVyX3ZhY3V1bV9mdWxsJyBBUyBzdGFnZSwKKyAgICAgICBwZ19j b2x1bW5fY29tcHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24sCisgICAgICAgbWQ1KGRhdGEp IEFTIGhhc2gKK0ZST00gdGVzdF9jbHVzdGVyX3pzdGQ7CisKKy0tIFRlc3QgR1VDIHRvZ2dsaW5n IChtaXhlZCBmb3JtYXRzIGluIHNhbWUgdGFibGUpCitTRVQgdXNlX2V4dGVuZGVkX3RvYXN0X2hl YWRlciA9IG9uOworQ1JFQVRFIFRBQkxFIHRlc3RfZ3VjX3RvZ2dsZSAoaWQgc2VyaWFsLCBkYXRh IHRleHQgQ09NUFJFU1NJT04gcGdseik7CitJTlNFUlQgSU5UTyB0ZXN0X2d1Y190b2dnbGUgKGRh dGEpCisgICAgVkFMVUVTIChyZXBlYXQoJ0RhdGEgY3JlYXRlZCB3aXRoIGV4dGVuZGVkIGhlYWRl ciBvbi4gJywgMzAwMCkpOworCitTRUxFQ1QgJ3dpdGhfZXh0X29uJyBBUyBzdGFnZSwKKyAgICAg ICBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24sCisgICAgICAgbGVu Z3RoKGRhdGEpIEFTIGRhdGFfbGVuZ3RoCitGUk9NIHRlc3RfZ3VjX3RvZ2dsZTsKKworU0VUIHVz ZV9leHRlbmRlZF90b2FzdF9oZWFkZXIgPSBvZmY7CitJTlNFUlQgSU5UTyB0ZXN0X2d1Y190b2dn bGUgKGRhdGEpCisgICAgVkFMVUVTIChyZXBlYXQoJ0RhdGEgY3JlYXRlZCB3aXRoIGV4dGVuZGVk IGhlYWRlciBvZmYuICcsIDMwMDApKTsKKworU0VMRUNUIGlkLAorICAgICAgIHBnX2NvbHVtbl9j b21wcmVzc2lvbihkYXRhKSBBUyBjb21wcmVzc2lvbiwKKyAgICAgICBsZW5ndGgoZGF0YSkgQVMg ZGF0YV9sZW5ndGgsCisgICAgICAgbGVmdChkYXRhLCAzOSkgQVMgZGF0YV9wcmVmaXgKK0ZST00g dGVzdF9ndWNfdG9nZ2xlIE9SREVSIEJZIGlkOworCitTRVQgdXNlX2V4dGVuZGVkX3RvYXN0X2hl YWRlciA9IG9uOworU0VMRUNUIGlkLCBsZW5ndGgoZGF0YSkgQVMgZGF0YV9sZW5ndGggRlJPTSB0 ZXN0X2d1Y190b2dnbGUgT1JERVIgQlkgaWQ7CisKKy0tIENsZWFudXAKK0RST1AgU0NIRU1BIHRl c3RfdG9hc3RfZXh0X3NjaGVtYSBDQVNDQURFOworRFJPUCBFWFRFTlNJT04gdGVzdF90b2FzdF9l eHQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L3Rlc3RfdG9h c3RfZXh0LS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC90ZXN0X3Rv YXN0X2V4dC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u Zjc0ZDUwNjlmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9h c3RfZXh0L3Rlc3RfdG9hc3RfZXh0LS0xLjAuc3FsCkBAIC0wLDAgKzEsMTkgQEAKKy8qIHNyYy90 ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvdGVzdF90b2FzdF9leHQtLTEuMC5zcWwgKi8KKwor LS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlh IENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X3RvYXN0 X2V4dCIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X3Rv YXN0X3N0cnVjdHVyZV9zaXplcygpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUn CitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfdG9hc3RfZmxhZ192 YWxpZGF0aW9uKCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdF IEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF90b2FzdF9jb21wcmVzc2lvbl9pZHMo KQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBTVFJJQ1Q7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L3Rlc3RfdG9hc3Rf ZXh0LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L3Rlc3RfdG9hc3RfZXh0LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU5ODg0ZjJiNmQwCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0 X2V4dC5jCkBAIC0wLDAgKzEsMTQwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0 X3RvYXN0X2V4dC5jCisgKgkJVGVzdCBtb2R1bGUgZm9yIGV4dGVuZGVkIFRPQVNUIGhlYWRlciBz dHJ1Y3R1cmVzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiYWNjZXNzL2RldG9h c3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaCIKKyNpbmNsdWRlICJ2 YXJhdHQuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rf dG9hc3Rfc3RydWN0dXJlX3NpemVzKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF90b2FzdF9m bGFnX3ZhbGlkYXRpb24pOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3RvYXN0X2NvbXByZXNz aW9uX2lkcyk7CisKKy8qCisgKiBWZXJpZnkgVE9BU1Qgc3RydWN0dXJlIHNpemVzIG1hdGNoIGV4 cGVjdGVkIHZhbHVlcy4KKyAqIEVycm9ycyBvdXQgaWYgYW55IHNpemUgaXMgd3JvbmcgKGNhdGNo ZXMgQUJJIGlzc3VlcykuCisgKi8KK0RhdHVtCit0ZXN0X3RvYXN0X3N0cnVjdHVyZV9zaXplcyhQ R19GVU5DVElPTl9BUkdTKQoreworCS8qIFN0YW5kYXJkIHN0cnVjdHVyZSBtdXN0IGJlIDE2IGJ5 dGVzICovCisJaWYgKHNpemVvZih2YXJhdHRfZXh0ZXJuYWwpICE9IDE2KQorCQllbG9nKEVSUk9S LCAidmFyYXR0X2V4dGVybmFsIGlzICV6dSBieXRlcywgZXhwZWN0ZWQgMTYiLAorCQkJIHNpemVv Zih2YXJhdHRfZXh0ZXJuYWwpKTsKKworCS8qIEV4dGVuZGVkIHN0cnVjdHVyZSBtdXN0IGJlIDIw IGJ5dGVzICovCisJaWYgKHNpemVvZih2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQpICE9IDIwKQor CQllbG9nKEVSUk9SLCAidmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkIGlzICV6dSBieXRlcywgZXhw ZWN0ZWQgMjAiLAorCQkJIHNpemVvZih2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQpKTsKKworCS8q IFRPQVNUIHBvaW50ZXIgc2l6ZXMgKGluY2x1ZGUgMi1ieXRlIGV4dGVybmFsIGhlYWRlcikgKi8K KwlpZiAoVE9BU1RfUE9JTlRFUl9TSVpFICE9IDE4KQorCQllbG9nKEVSUk9SLCAiVE9BU1RfUE9J TlRFUl9TSVpFIGlzICV6dSwgZXhwZWN0ZWQgMTgiLAorCQkJIChTaXplKSBUT0FTVF9QT0lOVEVS X1NJWkUpOworCisJaWYgKFRPQVNUX1BPSU5URVJfU0laRV9FWFRFTkRFRCAhPSAyMikKKwkJZWxv ZyhFUlJPUiwgIlRPQVNUX1BPSU5URVJfU0laRV9FWFRFTkRFRCBpcyAlenUsIGV4cGVjdGVkIDIy IiwKKwkJCSAoU2l6ZSkgVE9BU1RfUE9JTlRFUl9TSVpFX0VYVEVOREVEKTsKKworCS8qIFZlcmlm eSBmaWVsZCBvZmZzZXRzIChubyB1bmV4cGVjdGVkIHBhZGRpbmcpICovCisJaWYgKG9mZnNldG9m KHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCwgdmFfcmF3c2l6ZSkgIT0gMCkKKwkJZWxvZyhFUlJP UiwgInZhX3Jhd3NpemUgb2Zmc2V0IGlzICV6dSwgZXhwZWN0ZWQgMCIsCisJCQkgb2Zmc2V0b2Yo dmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkLCB2YV9yYXdzaXplKSk7CisJaWYgKG9mZnNldG9mKHZh cmF0dF9leHRlcm5hbF9leHRlbmRlZCwgdmFfZXh0aW5mbykgIT0gNCkKKwkJZWxvZyhFUlJPUiwg InZhX2V4dGluZm8gb2Zmc2V0IGlzICV6dSwgZXhwZWN0ZWQgNCIsCisJCQkgb2Zmc2V0b2YodmFy YXR0X2V4dGVybmFsX2V4dGVuZGVkLCB2YV9leHRpbmZvKSk7CisJaWYgKG9mZnNldG9mKHZhcmF0 dF9leHRlcm5hbF9leHRlbmRlZCwgdmFfZmxhZ3MpICE9IDgpCisJCWVsb2coRVJST1IsICJ2YV9m bGFncyBvZmZzZXQgaXMgJXp1LCBleHBlY3RlZCA4IiwKKwkJCSBvZmZzZXRvZih2YXJhdHRfZXh0 ZXJuYWxfZXh0ZW5kZWQsIHZhX2ZsYWdzKSk7CisJaWYgKG9mZnNldG9mKHZhcmF0dF9leHRlcm5h bF9leHRlbmRlZCwgdmFfZGF0YSkgIT0gOSkKKwkJZWxvZyhFUlJPUiwgInZhX2RhdGEgb2Zmc2V0 IGlzICV6dSwgZXhwZWN0ZWQgOSIsCisJCQkgb2Zmc2V0b2YodmFyYXR0X2V4dGVybmFsX2V4dGVu ZGVkLCB2YV9kYXRhKSk7CisJaWYgKG9mZnNldG9mKHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCwg dmFfdmFsdWVpZCkgIT0gMTIpCisJCWVsb2coRVJST1IsICJ2YV92YWx1ZWlkIG9mZnNldCBpcyAl enUsIGV4cGVjdGVkIDEyIiwKKwkJCSBvZmZzZXRvZih2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQs IHZhX3ZhbHVlaWQpKTsKKwlpZiAob2Zmc2V0b2YodmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkLCB2 YV90b2FzdHJlbGlkKSAhPSAxNikKKwkJZWxvZyhFUlJPUiwgInZhX3RvYXN0cmVsaWQgb2Zmc2V0 IGlzICV6dSwgZXhwZWN0ZWQgMTYiLAorCQkJIG9mZnNldG9mKHZhcmF0dF9leHRlcm5hbF9leHRl bmRlZCwgdmFfdG9hc3RyZWxpZCkpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAq IFZlcmlmeSBmbGFnIHZhbGlkYXRpb24gbWFjcm9zIHdvcmsgY29ycmVjdGx5LgorICovCitEYXR1 bQordGVzdF90b2FzdF9mbGFnX3ZhbGlkYXRpb24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwkvKiBW YWxpZCBmbGFncyBzaG91bGQgcGFzcyAqLworCWlmICghRXh0ZW5kZWRGbGFnc0FyZVZhbGlkKDB4 MDApKQorCQllbG9nKEVSUk9SLCAiZmxhZ3MgMHgwMCBzaG91bGQgYmUgdmFsaWQiKTsKKwlpZiAo IUV4dGVuZGVkRmxhZ3NBcmVWYWxpZCgweDAxKSkKKwkJZWxvZyhFUlJPUiwgImZsYWdzIDB4MDEg c2hvdWxkIGJlIHZhbGlkIik7CisJaWYgKCFFeHRlbmRlZEZsYWdzQXJlVmFsaWQoMHgwMikpCisJ CWVsb2coRVJST1IsICJmbGFncyAweDAyIHNob3VsZCBiZSB2YWxpZCIpOworCWlmICghRXh0ZW5k ZWRGbGFnc0FyZVZhbGlkKDB4MDMpKQorCQllbG9nKEVSUk9SLCAiZmxhZ3MgMHgwMyBzaG91bGQg YmUgdmFsaWQiKTsKKworCS8qIEludmFsaWQgZmxhZ3Mgc2hvdWxkIGZhaWwgKi8KKwlpZiAoRXh0 ZW5kZWRGbGFnc0FyZVZhbGlkKDB4MDQpKQorCQllbG9nKEVSUk9SLCAiZmxhZ3MgMHgwNCBzaG91 bGQgYmUgaW52YWxpZCIpOworCWlmIChFeHRlbmRlZEZsYWdzQXJlVmFsaWQoMHgwOCkpCisJCWVs b2coRVJST1IsICJmbGFncyAweDA4IHNob3VsZCBiZSBpbnZhbGlkIik7CisJaWYgKEV4dGVuZGVk RmxhZ3NBcmVWYWxpZCgweEZGKSkKKwkJZWxvZyhFUlJPUiwgImZsYWdzIDB4RkYgc2hvdWxkIGJl IGludmFsaWQiKTsKKworCS8qIENvbXByZXNzaW9uIG1ldGhvZHMgMC0yNTUgYXJlIHZhbGlkICov CisJaWYgKCFFeHRlbmRlZENvbXByZXNzaW9uTWV0aG9kSXNWYWxpZCgwKSkKKwkJZWxvZyhFUlJP UiwgImNvbXByZXNzaW9uIG1ldGhvZCAwIHNob3VsZCBiZSB2YWxpZCIpOworCWlmICghRXh0ZW5k ZWRDb21wcmVzc2lvbk1ldGhvZElzVmFsaWQoMjU1KSkKKwkJZWxvZyhFUlJPUiwgImNvbXByZXNz aW9uIG1ldGhvZCAyNTUgc2hvdWxkIGJlIHZhbGlkIik7CisKKwkvKiBWZXJpZnkgbWV0aG9kIElE IGNvbnN0YW50cyAqLworCWlmIChUT0FTVF9QR0xaX0VYVF9NRVRIT0QgIT0gMCkKKwkJZWxvZyhF UlJPUiwgIlRPQVNUX1BHTFpfRVhUX01FVEhPRCBpcyAlZCwgZXhwZWN0ZWQgMCIsIFRPQVNUX1BH TFpfRVhUX01FVEhPRCk7CisJaWYgKFRPQVNUX0xaNF9FWFRfTUVUSE9EICE9IDEpCisJCWVsb2co RVJST1IsICJUT0FTVF9MWjRfRVhUX01FVEhPRCBpcyAlZCwgZXhwZWN0ZWQgMSIsIFRPQVNUX0xa NF9FWFRfTUVUSE9EKTsKKwlpZiAoVE9BU1RfWlNURF9FWFRfTUVUSE9EICE9IDIpCisJCWVsb2co RVJST1IsICJUT0FTVF9aU1REX0VYVF9NRVRIT0QgaXMgJWQsIGV4cGVjdGVkIDIiLCBUT0FTVF9a U1REX0VYVF9NRVRIT0QpOworCWlmIChUT0FTVF9VTkNPTVBSRVNTRURfRVhUX01FVEhPRCAhPSAz KQorCQllbG9nKEVSUk9SLCAiVE9BU1RfVU5DT01QUkVTU0VEX0VYVF9NRVRIT0QgaXMgJWQsIGV4 cGVjdGVkIDMiLCBUT0FTVF9VTkNPTVBSRVNTRURfRVhUX01FVEhPRCk7CisKKwlQR19SRVRVUk5f Vk9JRCgpOworfQorCisvKgorICogVmVyaWZ5IGNvbXByZXNzaW9uIElEIGNvbnN0YW50cyBhcmUg Y29uc2lzdGVudC4KKyAqLworRGF0dW0KK3Rlc3RfdG9hc3RfY29tcHJlc3Npb25faWRzKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJLyogU3RhbmRhcmQgY29tcHJlc3Npb24gSURzICovCisJaWYgKFRP QVNUX1BHTFpfQ09NUFJFU1NJT05fSUQgIT0gMCkKKwkJZWxvZyhFUlJPUiwgIlRPQVNUX1BHTFpf Q09NUFJFU1NJT05fSUQgaXMgJWQsIGV4cGVjdGVkIDAiLCBUT0FTVF9QR0xaX0NPTVBSRVNTSU9O X0lEKTsKKwlpZiAoVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEICE9IDEpCisJCWVsb2coRVJST1Is ICJUT0FTVF9MWjRfQ09NUFJFU1NJT05fSUQgaXMgJWQsIGV4cGVjdGVkIDEiLCBUT0FTVF9MWjRf Q09NUFJFU1NJT05fSUQpOworCWlmIChUT0FTVF9JTlZBTElEX0NPTVBSRVNTSU9OX0lEICE9IDIp CisJCWVsb2coRVJST1IsICJUT0FTVF9JTlZBTElEX0NPTVBSRVNTSU9OX0lEIGlzICVkLCBleHBl Y3RlZCAyIiwgVE9BU1RfSU5WQUxJRF9DT01QUkVTU0lPTl9JRCk7CisJaWYgKFRPQVNUX0VYVEVO REVEX0NPTVBSRVNTSU9OX0lEICE9IDMpCisJCWVsb2coRVJST1IsICJUT0FTVF9FWFRFTkRFRF9D T01QUkVTU0lPTl9JRCBpcyAlZCwgZXhwZWN0ZWQgMyIsIFRPQVNUX0VYVEVOREVEX0NPTVBSRVNT SU9OX0lEKTsKKworCS8qIEV4dGVuZGVkIElEcyBzaG91bGQgbWF0Y2ggc3RhbmRhcmQgd2hlcmUg YXBwbGljYWJsZSAqLworCWlmIChUT0FTVF9QR0xaX0VYVF9NRVRIT0QgIT0gVE9BU1RfUEdMWl9D T01QUkVTU0lPTl9JRCkKKwkJZWxvZyhFUlJPUiwgIlBHTFogSURzIG1pc21hdGNoOiBzdGFuZGFy ZD0lZCwgZXh0ZW5kZWQ9JWQiLAorCQkJIFRPQVNUX1BHTFpfQ09NUFJFU1NJT05fSUQsIFRPQVNU X1BHTFpfRVhUX01FVEhPRCk7CisJaWYgKFRPQVNUX0xaNF9FWFRfTUVUSE9EICE9IFRPQVNUX0xa NF9DT01QUkVTU0lPTl9JRCkKKwkJZWxvZyhFUlJPUiwgIkxaNCBJRHMgbWlzbWF0Y2g6IHN0YW5k YXJkPSVkLCBleHRlbmRlZD0lZCIsCisJCQkgVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lELCBUT0FT VF9MWjRfRVhUX01FVEhPRCk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0X2V4dC5jb250cm9sIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0X2V4dC5jb250cm9sCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNTllZTE0YWQ2NAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvdGVzdF90b2FzdF9l eHQuY29udHJvbApAQCAtMCwwICsxLDUgQEAKKyMgdGVzdF90b2FzdF9leHQgZXh0ZW5zaW9uCitj b21tZW50ID0gJ1Rlc3QgbW9kdWxlIGZvciBleHRlbmRlZCBUT0FTVCBoZWFkZXJzIGFuZCB6c3Rk IGNvbXByZXNzaW9uJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9 ICckbGliZGlyL3Rlc3RfdG9hc3RfZXh0JworcmVsb2NhdGFibGUgPSB0cnVlCi0tIAoyLjM5LjMg KEFwcGxlIEdpdC0xNDYpCgo= --0000000000004b15ff0646027564--