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 1vv1Ff-00HAVe-0F for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 22:51:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vv1Fd-003tOq-37 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 22:51:33 +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 1vv1Fd-003tOf-1Y for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 22:51:33 +0000 Received: from mail-qv1-xf36.google.com ([2607:f8b0:4864:20::f36]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vv1FY-000000017rK-41xM for pgsql-hackers@postgresql.org; Tue, 24 Feb 2026 22:51:32 +0000 Received: by mail-qv1-xf36.google.com with SMTP id 6a1803df08f44-8954a050c19so76376846d6.3 for ; Tue, 24 Feb 2026 14:51:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771973487; cv=none; d=google.com; s=arc-20240605; b=O6RyUHVZSrRWLiokQtqC/0MmQArRy7zzt7dOcNPw6lycUxuDCzMU7UMtB5+FY3B7tQ mfj4wa1bK0jz/T2NQ/w+YaI3Tx/7tfcN1BaAFUEXJU6MsgUz8LL/I12R+TazlkP8WG3L ZLl7gVaiPv7J4Pl1aslcwdBn+LPp9QURil8YNZsSJadiXibZsk5geJb1VfbTFi/kNYuk BZf/R6wYlYvInT6z5OAkK1VF4YiaIEumlUch0sU/6zSEUMzhYmtzob2RSmA0U79Hh6pc Xiz3jb3GZ2LDBHu4rMxX3rtP+9wsUjb79xB3bbGGGXn3qS1MVx+Vf7p7Iouo4Es2X+0r tEkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=UPzxS/aiFsQ/bQylaDIvM1WmCovA/Z7iqkSRE4V80W0=; fh=4YeDCFGILZrZ7iSHOdYWBdPAXwXGSDDbJiJKWKZFbOY=; b=ZkOKTF8J8Gyb2jgr8x+As4uDeDhqkhl9zDFfQwIW7JdzRljIVt2yApfYoTjjtPWkOA bT4vAHX1+popZ/7aIao2P9ecVUJfHLZR0BM8Klfo8hkLVcFScXgEEPxq/YgxupYtiuhA meDvXY71ai4okit92QRUhHBsf++sx0hdWMdtuRFGQfIrGfG108ZTsAvQZHKvRJQOmWU8 0m53z8AryZ01vAmjhWbG3DvxaGhdZ7BXOu1XhgwCEZEaNyVlco4+oXFg5y2yoouBBpbs Mfpr7QwfaImNEutEoBuc6mH8Xlz9sANJOH6cO9jG1Q7sHduxW139HtE+ns6sGNKxgEMb yYlw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1771973487; x=1772578287; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=UPzxS/aiFsQ/bQylaDIvM1WmCovA/Z7iqkSRE4V80W0=; b=d3Usq26+0+Oapcryu60/hMZEpOHeDv/fCXvpbORCVyQfxBkr0JtpHW3SIszMZ492i6 pfo1Cjc2iBvaZ836gUBz9DMBcIK+Pat61jx5FphAL2WBn9aMC2MBwYSfrP20nWm4kIBL Eyi6L9MzjPr+W818gKfYXrBaumznMNx2jwOiuS+3EklT3v9JkZd8nB+iOJ3/ptHA/aEh n8zWUlfgzsCXrNhtAYqKQqeu/hnu58NCx4ayL5bhPCuS+iviOLoJ/KfK56de6JQ8hqvI hXFx82VEfEmD4ceDwKYfz7mEmMbljgLADwxwg0qyGLZIi9qIzHN1dFgNTszJi/iBYTne VA6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771973487; x=1772578287; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=UPzxS/aiFsQ/bQylaDIvM1WmCovA/Z7iqkSRE4V80W0=; b=R+6LFxP+cEzr5rR1DbD4oPY6Hs/UJqeNIr/uBB54AG56kaddrDYABthKtDn15wKV/R qaQFpfZS5ZQjVVfYc4k2ZDBfvZDri4ZRCAWvxk32sscUmGbGvzTQcKarjfuyIyvKiCcH iw+xP8WoXCMSoL42JYPyxFJ3+EpvjhB41ud7fZIjSeF0U0lrFFHcwZ4idZsRTWlcN1Ko FTl0VyJnGOzlc2vtlV05lgKkMLhPhrbVttpp6sXXZE3aCwc4fom7YxGoiVZLZ3qS5NfQ cViX6ZbArtI/KEdGlrATW9s2rxtoDvDsO4F2i7y6uqMmI9el6CCVSY1BChPJpakgZxWI 1d1Q== X-Gm-Message-State: AOJu0YxtL9HHy6RAVE1hiDhNh5vg+fWvSkIK/PThn6/jr0/CztBiuShp dj5lnW8wo3lEqkUJ8Fcf+uhyuAmZwoqe7ZnXtDq/SWyM+KEGKspa2t2FnVB4Ib2eW04CUOblhud 22QXhftfNPOlrzjpj2GLojYTCTJukEWhjO6nbNOKPzWbtTlNjwuA= X-Gm-Gg: ATEYQzxUOXBCc66pPfP8LKkCEq4aDuCdPoaAI+IbiJ6sdnXYwN7lSrU/PX7Tlaao2i9 P4HKUXOokEekjI8nVrmc4LIbpNjt21/2aI7VCPNpVGtDCqIHrJOl5dd9kzj1rGdv05EQxQpTI6t DZwE2Gj0/GeMVniZBLfmMEiyCUSkRfWlNbBco954+Z4bGXL4osHXOSrHaN83Y/q87uRltSr56J/ jnZpFb+907k5SeEm5MZZAdjWnAh26y/AhnDBq79gCng6FX89YMjexXEkmU9We7xL5AOeYPsDSzL FXIoB/y0vA== X-Received: by 2002:ad4:5d66:0:b0:895:1d59:5aa4 with SMTP id 6a1803df08f44-89979e61a7bmr222294996d6.21.1771973487344; Tue, 24 Feb 2026 14:51:27 -0800 (PST) MIME-Version: 1.0 References: <3720B2E1-0B96-4063-8D63-B5AE6AFEA159@gmail.com> In-Reply-To: From: Jacob Champion Date: Tue, 24 Feb 2026 14:51:16 -0800 X-Gm-Features: AaiRm508M1w5S4NeVII-k7NLH3AYPIgaJ6AmOQ8SdqOceJflh6DtXPiQ54supMk Message-ID: Subject: Re: [oauth] Stabilize the libpq-oauth ABI (and allow alternative implementations?) To: PostgreSQL Hackers Cc: Chao Li , Zsolt Parragi Content-Type: multipart/mixed; boundary="0000000000004484d6064b99ba84" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004484d6064b99ba84 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Dec 16, 2025 at 9:40=E2=80=AFAM Jacob Champion wrote: > Open questions remain: > 1) 0004: Any objections to putting PQExpBuffer into libpq-fe.h? Tom sounded lukewarm to this on the Discord, so I looked into replacing the new usage with a simple char*. That actually exposed a bug: appending error data during cleanup doesn't help us at all, because we've already stopped using the error buffer. In fact my whole idea of adding things to conn->errorMessage during a teardown operation has been nearly useless from the beginning. Elsewhere in libpq, we handle cases like these (which should ideally just not happen) by printing warnings to stderr, so v3-0001 does that instead. Besides exposing a bug, switching to char* means anyone who's not programming in C and already has code that handles pointer ownership across the boundary can continue to make use of that, instead of adapting to a completely new API for this one particular use case. We already have the cleanup-callback requirement for the token anyway; it's fine. > 2) 0004: Thoughts on the v2 inheritance struct style as opposed to > relying on implementations to double-check the struct length? Still feels half-dozen or the other to me, so I'm planning to move ahead with the inheritance model. I'll look into VALGRIND_MAKE_MEM_NOACCESS (and/or other ways to catch people scribbling where they shouldn't) for v4. > 3) 0005: Should I add the thread lock to an init() API, or expose a > new PQgetThreadLock() that other code can use? v3-0002 implements PQgetThreadLock(). The conversation with Nico Williams at [1] cemented this for me; it's entirely possible that implementations will need the lock at other times besides initialization, say if they're mixing OAuth with Kerberos. Adding a way to retrieve it doesn't actually expose new functionality -- applications could always get at our internal implementation by calling PQregisterThreadLock(NULL) -- but libraries can't use that API safely. Also, clients can probably make use of some of the newer ways of doing this kind of initialization (pthread_once, etc.) that weren't in wide use back when the init-function design showed up. We may not ever actually need a separate init function, and if I'm wrong we can always add one. I think I'll put this in its own top-level thread for comment. > (In other words, a plugin architecture causes the compile-time > and run-time dependency arrows to point in opposite directions, so > plugins won't be able to rely on the LIBPQ_HAS_* macros to determine > what APIs are available to them.) > > (TODO: Are there implications for our use of RTLD_NOW at dlopen() time= ? To answer my own question, yes: any future libpq-oauth plugin that needs PG20+ APIs will have to lazy-load them (weak symbol declarations, etc.) or else accept that long-running applications may fail OAuth connections until they restart. A more general plugin system would need to solve this. For example, we could load RTLD_LAZY, check for a minimum libpq version declared by the plugin, and then either upgrade the bindings with RTLD_NOW, or dlclose() and bail. But I don't think I need to be solving a nonexistent problem now. --Jacob [1] https://postgr.es/m/aSSp03wmNMngi/Oe%40ubby --0000000000004484d6064b99ba84 Content-Type: application/x-patch; name="v3-0001-oauth-Report-cleanup-errors-as-warnings-on-stderr.patch" Content-Disposition: attachment; filename="v3-0001-oauth-Report-cleanup-errors-as-warnings-on-stderr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlvfhhzb0 RnJvbSAwYmM1NDBmYmI3ZTQ2YzdlMjk4OGFhZWM0NjhlNjY4MmYzMzQ5NjQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogRnJpLCAzMCBKYW4gMjAyNiAxNjo0MToyNiAtMDgwMApTdWJqZWN0 OiBbUEFUQ0ggdjMgMS82XSBvYXV0aDogUmVwb3J0IGNsZWFudXAgZXJyb3JzIGFzIHdhcm5pbmdz IG9uIHN0ZGVycgoKVXNpbmcgY29ubi0+ZXJyb3JNZXNzYWdlIGZvciB0aGVzZSAic2hvdWxkbid0 LWhhcHBlbiIgY2FzZXMgd2lsbCBvbmx5CndvcmsgaWYgdGhlIGNvbm5lY3Rpb24gaXRzZWxmIGZh aWxzLiBPdXIgU1NMIGFuZCBwYXNzd29yZCBjYWxsYmFja3MKcHJpbnQgV0FSTklOR3Mgd2hlbiB0 aGV5IGZpbmQgdGhlbXNlbHZlcyBpbiBzaW1pbGFyIHNpdHVhdGlvbnMsIHNvCmZvbGxvdyB0aGVp ciBsZWFkLgotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyB8IDE4 ICsrKysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMTAg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1 dGgtY3VybC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jCmluZGV4 IDY5MWU3ZWMxZDlmLi4xOTAyNGY2YWFhNyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvb2F1dGgtY3VybC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29h dXRoLWN1cmwuYwpAQCAtMjkzLDEwICsyOTMsOCBAQCBmcmVlX2FzeW5jX2N0eChQR2Nvbm4gKmNv bm4sIHN0cnVjdCBhc3luY19jdHggKmFjdHgpCiAJICogbm8gYnVncyBhYm92ZS4gQnV0IGlmIHdl IGRvIGhpdCB0aGVtLCBzdXJmYWNpbmcgdGhvc2UgZXJyb3JzIHNvbWVob3cKIAkgKiBtaWdodCBi ZSB0aGUgb25seSB3YXkgdG8gaGF2ZSBhIGNoYW5jZSB0byBkZWJ1ZyB0aGVtLgogCSAqCi0JICog VE9ETzogQXQgc29tZSBwb2ludCBpdCdkIGJlIG5pY2UgdG8gaGF2ZSBhIHN0YW5kYXJkIHdheSB0 byB3YXJuIGFib3V0Ci0JICogdGVhcmRvd24gZmFpbHVyZXMuIEFwcGVuZGluZyB0byB0aGUgY29u bmVjdGlvbidzIGVycm9yIG1lc3NhZ2Ugb25seQotCSAqIGhlbHBzIGlmIHRoZSBidWcgY2F1c2Vk IGEgY29ubmVjdGlvbiBmYWlsdXJlOyBvdGhlcndpc2UgaXQnbGwgYmUKLQkgKiBidXJpZWQuLi4K KwkgKiBQcmludCB0aGVtIGFzIHdhcm5pbmdzIHRvIHN0ZGVyciwgZm9sbG93aW5nIHRoZSBleGFt cGxlIG9mIHNpbWlsYXIKKwkgKiBzaXR1YXRpb25zIGluIGZlLXNlY3VyZS1vcGVuc3NsLmMgYW5k IGZlLWNvbm5lY3QuYy4KIAkgKi8KIAogCWlmIChhY3R4LT5jdXJsbSAmJiBhY3R4LT5jdXJsKQpA QCAtMzA0LDkgKzMwMiw5IEBAIGZyZWVfYXN5bmNfY3R4KFBHY29ubiAqY29ubiwgc3RydWN0IGFz eW5jX2N0eCAqYWN0eCkKIAkJQ1VSTE1jb2RlCWVyciA9IGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRs ZShhY3R4LT5jdXJsbSwgYWN0eC0+Y3VybCk7CiAKIAkJaWYgKGVycikKLQkJCWxpYnBxX2FwcGVu ZF9jb25uX2Vycm9yKGNvbm4sCi0JCQkJCQkJCQkibGliY3VybCBlYXN5IGhhbmRsZSByZW1vdmFs IGZhaWxlZDogJXMiLAotCQkJCQkJCQkJY3VybF9tdWx0aV9zdHJlcnJvcihlcnIpKTsKKwkJCWZw cmludGYoc3RkZXJyLAorCQkJCQlsaWJwcV9nZXR0ZXh0KCJXQVJOSU5HOiBsaWJjdXJsIGVhc3kg aGFuZGxlIHJlbW92YWwgZmFpbGVkOiAlc1xuIiksCisJCQkJCWN1cmxfbXVsdGlfc3RyZXJyb3Io ZXJyKSk7CiAJfQogCiAJaWYgKGFjdHgtPmN1cmwpCkBAIC0zMjQsOSArMzIyLDkgQEAgZnJlZV9h c3luY19jdHgoUEdjb25uICpjb25uLCBzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQogCQlDVVJMTWNv ZGUJZXJyID0gY3VybF9tdWx0aV9jbGVhbnVwKGFjdHgtPmN1cmxtKTsKIAogCQlpZiAoZXJyKQot CQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwKLQkJCQkJCQkJCSJsaWJjdXJsIG11bHRp IGhhbmRsZSBjbGVhbnVwIGZhaWxlZDogJXMiLAotCQkJCQkJCQkJY3VybF9tdWx0aV9zdHJlcnJv cihlcnIpKTsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlsaWJwcV9nZXR0ZXh0KCJXQVJOSU5H OiBsaWJjdXJsIG11bHRpIGhhbmRsZSBjbGVhbnVwIGZhaWxlZDogJXNcbiIpLAorCQkJCQljdXJs X211bHRpX3N0cmVycm9yKGVycikpOwogCX0KIAogCWZyZWVfcHJvdmlkZXIoJmFjdHgtPnByb3Zp ZGVyKTsKLS0gCjIuMzQuMQoK --0000000000004484d6064b99ba84 Content-Type: application/x-patch; name="v3-0002-libpq-Add-PQgetThreadLock-to-mirror-PQregisterThr.patch" Content-Disposition: attachment; filename="v3-0002-libpq-Add-PQgetThreadLock-to-mirror-PQregisterThr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlvfhkq81 RnJvbSAwNzQ2NDVlNWI0MTRlMmYwOTViNTcwM2U1Y2UyYTQ1MDA2YzEzZDgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVGh1LCAxOSBGZWIgMjAyNiAxMjozOToxNiAtMDgwMApTdWJqZWN0 OiBbUEFUQ0ggdjMgMi82XSBsaWJwcTogQWRkIFBRZ2V0VGhyZWFkTG9jaygpIHRvIG1pcnJvcgog UFFyZWdpc3RlclRocmVhZExvY2soKQoKQWxsb3cgbGlicHEgY2xpZW50cyB0byByZXRyaWV2ZSB0 aGUgY3VycmVudCBwZ19nX3RocmVhZGxvY2sgcG9pbnRlciB3aXRoClBRZ2V0VGhyZWFkTG9jaygp LiBTaW5nbGUtdGhyZWFkZWQgYXBwbGljYXRpb25zIGNvdWxkIGFscmVhZHkgZG8gdGhpcyBpbgph IGNvbnZvbHV0ZWQgd2F5OgoKICAgIHBndGhyZWFkbG9ja190IHRsb2NrOwoKICAgIHRsb2NrID0g UFFyZWdpc3RlclRocmVhZExvY2soTlVMTCk7CiAgICBQUXJlZ2lzdGVyVGhyZWFkTG9jayh0bG9j ayk7ICAgIC8qIHJlLXJlZ2lzdGVyIHRoZSBjYWxsYmFjayAqLwoKICAgIC8qIHVzZSB0bG9jayAq LwoKQnV0IGEgZ2VuZXJpYyBsaWJyYXJ5IGNhbid0IGRvIHRoYXQgd2l0aG91dCBwb3RlbnRpYWxs eSBicmVha2luZwpjb25jdXJyZW50IGxpYnBxIGNvbm5lY3Rpb25zLgoKVGhlIG1vdGl2YXRpb24g Zm9yIGRvaW5nIHRoaXMgbm93IGlzIHRoZSBsaWJwcS1vYXV0aCBwbHVnaW4sIHdoaWNoCmN1cnJl bnRseSByZWxpZXMgb24gZGlyZWN0IGluamVjdGlvbiBvZiBwZ19nX3RocmVhZGxvY2ssIGFuZCBz aG91bGQKaWRlYWxseSBub3QuCi0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQg IHwgIDEgKwogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCAgIHwgMTAgKysrKysrKyst LQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jIHwgIDcgKysrKysrKwogMyBmaWxl cyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0IGIvc3JjL2ludGVyZmFjZXMvbGlicHEv ZXhwb3J0cy50eHQKaW5kZXggZGJiYWU2NDJkNzYuLjFlM2Q1YmQ1ODY3IDEwMDY0NAotLS0gYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9leHBvcnRzLnR4dApAQCAtMjEwLDMgKzIxMCw0IEBAIFBRZ2V0QXV0aERhdGFIb29rICAgICAg ICAgMjA3CiBQUWRlZmF1bHRBdXRoRGF0YUhvb2sgICAgIDIwOAogUFFmdWxsUHJvdG9jb2xWZXJz aW9uICAgICAyMDkKIGFwcGVuZFBRRXhwQnVmZmVyVkEgICAgICAgMjEwCitQUWdldFRocmVhZExv Y2sgICAgICAgICAgIDIxMQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEt ZmUuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKaW5kZXggOTA1ZjJmMzNhYjgu LjI5YjE2ZWZiYjFkIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5o CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKQEAgLTYzLDYgKzYzLDEwIEBA IGV4dGVybiAiQyIKIC8qIEluZGljYXRlcyBwcmVzZW5jZSBvZiB0aGUgUFFBVVRIREFUQV9QUk9N UFRfT0FVVEhfREVWSUNFIGF1dGhkYXRhIGhvb2sgKi8KICNkZWZpbmUgTElCUFFfSEFTX1BST01Q VF9PQVVUSF9ERVZJQ0UgMQogCisvKiBGZWF0dXJlcyBhZGRlZCBpbiBQb3N0Z3JlU1FMIHYxOTog Ki8KKy8qIEluZGljYXRlcyBwcmVzZW5jZSBvZiBQUWdldFRocmVhZExvY2sgKi8KKyNkZWZpbmUg TElCUFFfSEFTX0dFVF9USFJFQURfTE9DSworCiAvKgogICogT3B0aW9uIGZsYWdzIGZvciBQUWNv cHlSZXN1bHQKICAqLwpAQCAtNDYyLDEyICs0NjYsMTQgQEAgZXh0ZXJuIFBRbm90aWNlUHJvY2Vz c29yIFBRc2V0Tm90aWNlUHJvY2Vzc29yKFBHY29ubiAqY29ubiwKICAqCSAgIFVzZWQgdG8gc2V0 IGNhbGxiYWNrIHRoYXQgcHJldmVudHMgY29uY3VycmVudCBhY2Nlc3MgdG8KICAqCSAgIG5vbi10 aHJlYWQgc2FmZSBmdW5jdGlvbnMgdGhhdCBsaWJwcSBuZWVkcy4KICAqCSAgIFRoZSBkZWZhdWx0 IGltcGxlbWVudGF0aW9uIHVzZXMgYSBsaWJwcSBpbnRlcm5hbCBtdXRleC4KLSAqCSAgIE9ubHkg cmVxdWlyZWQgZm9yIG11bHRpdGhyZWFkZWQgYXBwcyB0aGF0IHVzZSBrZXJiZXJvcwotICoJICAg Ym90aCB3aXRoaW4gdGhlaXIgYXBwIGFuZCBmb3IgcG9zdGdyZXNxbCBjb25uZWN0aW9ucy4KKyAq CSAgIE9ubHkgcmVxdWlyZWQgZm9yIG11bHRpdGhyZWFkZWQgYXBwcyB0aGF0IHVzZSBLZXJiZXJv cyBvcgorICoJICAgb2xkZXIgKG5vbi10aHJlYWRzYWZlKSB2ZXJzaW9ucyBvZiBDdXJsIGJvdGgg d2l0aGluIHRoZWlyCisgKgkgICBhcHAgYW5kIGZvciBwb3N0Z3Jlc3FsIGNvbm5lY3Rpb25zLgog ICovCiB0eXBlZGVmIHZvaWQgKCpwZ3RocmVhZGxvY2tfdCkgKGludCBhY3F1aXJlKTsKIAogZXh0 ZXJuIHBndGhyZWFkbG9ja190IFBRcmVnaXN0ZXJUaHJlYWRMb2NrKHBndGhyZWFkbG9ja190IG5l d2hhbmRsZXIpOworZXh0ZXJuIHBndGhyZWFkbG9ja190IFBRZ2V0VGhyZWFkTG9jayh2b2lkKTsK IAogLyogPT09IGluIGZlLXRyYWNlLmMgPT09ICovCiBleHRlcm4gdm9pZCBQUXRyYWNlKFBHY29u biAqY29ubiwgRklMRSAqZGVidWdfcG9ydCk7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1jb25uZWN0LmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKaW5k ZXggYTBkMmY3NDk4MTEuLjBjNWYwZDQ3YjIwIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1jb25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5j CkBAIC04MzgxLDMgKzgzODEsMTAgQEAgUFFyZWdpc3RlclRocmVhZExvY2socGd0aHJlYWRsb2Nr X3QgbmV3aGFuZGxlcikKIAogCXJldHVybiBwcmV2OwogfQorCitwZ3RocmVhZGxvY2tfdAorUFFn ZXRUaHJlYWRMb2NrKHZvaWQpCit7CisJQXNzZXJ0KHBnX2dfdGhyZWFkbG9jayk7CisJcmV0dXJu IHBnX2dfdGhyZWFkbG9jazsKK30KLS0gCjIuMzQuMQoK --0000000000004484d6064b99ba84 Content-Type: application/x-patch; name="v3-0003-libpq-Introduce-PQAUTHDATA_OAUTH_BEARER_TOKEN_V2.patch" Content-Disposition: attachment; filename="v3-0003-libpq-Introduce-PQAUTHDATA_OAUTH_BEARER_TOKEN_V2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlvfho8j2 RnJvbSBiNDMxZWU3YTFlMDA2ZDg0Y2RjNDNlYTNiODE2NzZmMTAxZjYzNWQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogTW9uLCAxIERlYyAyMDI1IDE1OjA3OjI2IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2MyAzLzZdIGxpYnBxOiBJbnRyb2R1Y2UgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU5fVjIKCkZvciB0aGUgbGlicHEtb2F1dGggbW9kdWxlIHRvIGV2ZW50dWFsbHkgbWFrZSB1 c2Ugb2YgdGhlClBHb2F1dGhCZWFyZXJSZXF1ZXN0IEFQSSwgaXQgbmVlZHMgc29tZSBhZGRpdGlv bmFsIGZ1bmN0aW9uYWxpdHk6IHRoZQpkZXJpdmVkIElzc3VlciBJRCBmb3IgdGhlIGF1dGhvcml6 YXRpb24gc2VydmVyIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5CmxpYnBxLCBhbmQgZXJyb3IgbWVz c2FnZXMgbmVlZCB0byBiZSBidWlsdCB3aXRob3V0IHJlbHlpbmcgb24gUEdjb25uCmludGVybmFs cy4gVGhlc2UgZmVhdHVyZXMgc2VlbSB1c2VmdWwgZm9yIGFwcGxpY2F0aW9uIGhvb2tzLCB0b28s IHNvCnRoYXQgdGhleSBkb24ndCBlYWNoIGhhdmUgdG8gcmVpbnZlbnQgdGhlIHdoZWVsLgoKVGhl IG9yaWdpbmFsIHBsYW4gd2FzIGZvciBhZGRpdGlvbnMgdG8gUEdvYXV0aEJlYXJlclJlcXVlc3Qg dG8gYmUgbWFkZQp3aXRob3V0IGEgdmVyc2lvbiBidW1wIHRvIHRoZSBQR2F1dGhEYXRhIHR5cGUs IGFuZCB0aGVuIGFwcGxpY2F0aW9ucwp3b3VsZCBzaW1wbHkgY2hlY2sgYSBMSUJQUV9IQVNfKiBt YWNybyBhdCBjb21waWxlIHRpbWUgdG8gZGVjaWRlIHdoZXRoZXIKdGhleSBjb3VsZCB1c2UgdGhl IG5ldyBmZWF0dXJlcy4gVGhhdCB0aGVvcmV0aWNhbGx5IHdvcmtzIGZvcgphcHBsaWNhdGlvbnMg bGlua2VkIGFnYWluc3QgbGlicHEsIHNpbmNlIGl0J3Mgbm90IHNhZmUgdG8gZG93bmdyYWRlCmxp YnBxIGZyb20gdGhlIHZlcnNpb24geW91J3ZlIGNvbXBpbGVkIGFnYWluc3QuCgpUaGF0IHN0cmF0 ZWd5IHdvbid0IHdvcmsgZm9yIHBsdWdpbnMsIHRob3VnaCwgZHVlIHRvIGEgY29tcGxpY2F0aW9u CmZpcnN0IG5vdGljZWQgZHVyaW5nIHRoZSBsaWJwcS1vYXV0aCBtb2R1bGUgc3BsaXQ6IGl0J3Mg bm9ybWFsIGZvciBhCnBsdWdpbiBvbiBkaXNrIHRvIGJlICpuZXdlciogdGhhbiB0aGUgbGlicHEg dGhhdCdzIGxvYWRpbmcgaXQsIGJlY2F1c2UKeW91IG1pZ2h0IGhhdmUgdXBncmFkZWQgeW91ciBp bnN0YWxsYXRpb24gd2hpbGUgYW4gYXBwbGljYXRpb24gd2FzCnJ1bm5pbmcuIChJbiBvdGhlciB3 b3JkcywgYSBwbHVnaW4gYXJjaGl0ZWN0dXJlIGNhdXNlcyB0aGUgY29tcGlsZS10aW1lCmFuZCBy dW4tdGltZSBkZXBlbmRlbmN5IGFycm93cyB0byBwb2ludCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25z LCBzbwpwbHVnaW5zIHdvbid0IGJlIGFibGUgdG8gcmVseSBvbiB0aGUgTElCUFFfSEFTXyogbWFj cm9zIHRvIGRldGVybWluZQp3aGF0IEFQSXMgYXJlIGF2YWlsYWJsZSB0byB0aGVtLikKCkluc3Rl YWQsIGFkZCBhIG5ldyBzdHJ1Y3Qgd2hpY2ggZXh0ZW5kcyB0aGUgInYxIiBQR29hdXRoQmVhcmVy UmVxdWVzdC4KV2hlbiBhbiBhcHBsaWNhdGlvbiBob29rIHJlY2VpdmVzIFBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOX1YyLCBpdAptYXkgc2FmZWx5IGRvd25jYXN0IHRoZSByZXF1ZXN0IHBv aW50ZXIgaXQgcmVjZWl2ZXMgaW4gaXRzIGNhbGxiYWNrcyB0bwptYWtlIHVzZSBvZiB0aGUgbmV3 IGZ1bmN0aW9uYWxpdHkuIGxpYnBxIHdpbGwgZmlyc3QgdHJ5IHRoZSBuZXcgdmVyc2lvbiwKdGhl biBmYWxsIGJhY2sgdG8gdGhlIG9sZCBiZWZvcmUgZ2l2aW5nIHVwLgoKUmV2aWV3ZWQtYnk6IENo YW8gTGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdp IDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5l cy9tL0NBT1ltaSUyQm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBnUjh1el9EN21NOHolM0RkWDFK WVZiZyU0MG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwgICAgICAg ICAgICAgICAgICAgICAgIHwgODMgKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2ludGVyZmFjZXMvbGlicHEv bGlicHEtZmUuaCAgICAgICAgICAgICAgIHwgMzEgKysrKystCiBzcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMgICAgICAgICAgfCA4NyArKysrKysrKysrKy0tLS0tLQogLi4uL29h dXRoX3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jICAgICAgIHwgOTcgKysrKysrKysrKysr KysrKysrLQogLi4uL21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbCAgIHwg MzggKysrKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwgMzAxIGluc2VydGlvbnMoKyksIDM2IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sIGIvZG9jL3NyYy9z Z21sL2xpYnBxLnNnbWwKaW5kZXggMjFlMWJhMzRhNGUuLjRiYmM1MWU3MDk1IDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbApA QCAtMTAzNDUsNiArMTAzNDUsNyBAQCBQUWF1dGhEYXRhSG9va190eXBlIFBRZ2V0QXV0aERhdGFI b29rKHZvaWQpOwogICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5PlBRQVVUSERBVEFfUFJPTVBU X09BVVRIX0RFVklDRTwvcHJpbWFyeT48L2luZGV4dGVybT4KICAgICAgICA8L3Rlcm0+CiAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT48ZW1waGFzaXM+QXZhaWxhYmxlIGluIFBvc3Rn cmVTUUwgMTggYW5kIGxhdGVyLjwvZW1waGFzaXM+PC9wYXJhPgogICAgICAgICA8cGFyYT4KICAg ICAgICAgIFJlcGxhY2VzIHRoZSBkZWZhdWx0IHVzZXIgcHJvbXB0IGR1cmluZyB0aGUgYnVpbHRp biBkZXZpY2UKICAgICAgICAgIGF1dGhvcml6YXRpb24gY2xpZW50IGZsb3cuIDxyZXBsYWNlYWJs ZT5kYXRhPC9yZXBsYWNlYWJsZT4gcG9pbnRzIHRvCkBAIC0xMDM5Nyw2ICsxMDM5OCw3IEBAIHR5 cGVkZWYgc3RydWN0IF9QR3Byb21wdE9BdXRoRGV2aWNlCiAgICAgICAgIDxpbmRleHRlcm0+PHBy aW1hcnk+UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU48L3ByaW1hcnk+PC9pbmRleHRlcm0+ CiAgICAgICAgPC90ZXJtPgogICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+PGVtcGhh c2lzPkF2YWlsYWJsZSBpbiBQb3N0Z3JlU1FMIDE4IGFuZCBsYXRlci48L2VtcGhhc2lzPjwvcGFy YT4KICAgICAgICAgPHBhcmE+CiAgICAgICAgICBBZGRzIGEgY3VzdG9tIGltcGxlbWVudGF0aW9u IG9mIGEgZmxvdywgcmVwbGFjaW5nIHRoZSBidWlsdGluIGZsb3cgaWYKICAgICAgICAgIGl0IGlz IDxsaW5rIGxpbmtlbmQ9ImNvbmZpZ3VyZS1vcHRpb24td2l0aC1saWJjdXJsIj5pbnN0YWxsZWQ8 L2xpbms+LgpAQCAtMTA0MDQsNiArMTA0MDYsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgX1BHcHJvbXB0 T0F1dGhEZXZpY2UKICAgICAgICAgIHVzZXIvaXNzdWVyL3Njb3BlIGNvbWJpbmF0aW9uLCBpZiBv bmUgaXMgYXZhaWxhYmxlIHdpdGhvdXQgYmxvY2tpbmcsIG9yCiAgICAgICAgICBlbHNlIHNldCB1 cCBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2sgdG8gcmV0cmlldmUgb25lLgogICAgICAgICA8L3Bh cmE+CisgICAgICAgIDxub3RlPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIDxwcm9k dWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gcmVsZWFzZXMgMTkgYW5kIGxhdGVyLAor ICAgICAgICAgIGFwcGxpY2F0aW9ucyBzaG91bGQgcHJlZmVyCisgICAgICAgICAgPGxpbmsgbGlu a2VuZD0ibGlicHEtb2F1dGgtYXV0aGRhdGEtb2F1dGgtYmVhcmVyLXRva2VuLXYyIj48bGl0ZXJh bD5QUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjwvbGl0ZXJhbD48L2xpbms+LgorICAg ICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGU+CiAgICAgICAgIDxwYXJhPgogICAgICAgICAg PHJlcGxhY2VhYmxlPmRhdGE8L3JlcGxhY2VhYmxlPiBwb2ludHMgdG8gYW4gaW5zdGFuY2UKICAg ICAgICAgIG9mIDxzeW1ib2w+UEdvYXV0aEJlYXJlclJlcXVlc3Q8L3N5bWJvbD4sIHdoaWNoIHNo b3VsZCBiZSBmaWxsZWQgaW4KQEAgLTEwNDk5LDYgKzEwNTA4LDgwIEBAIHR5cGVkZWYgc3RydWN0 IFBHb2F1dGhCZWFyZXJSZXF1ZXN0CiAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L2xpc3RpdGVt PgogICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBx LW9hdXRoLWF1dGhkYXRhLW9hdXRoLWJlYXJlci10b2tlbi12MiI+CisgICAgICAgPHRlcm0+Cisg ICAgICAgIDxzeW1ib2w+UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI8L3N5bWJvbD4K KyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PlBRQVVUSERBVEFfT0FVVEhf QkVBUkVSX1RPS0VOX1YyPC9wcmltYXJ5PgorICAgICAgICAgPHNlY29uZGFyeT5QUUFVVEhEQVRB X09BVVRIX0JFQVJFUl9UT0tFTjwvc2Vjb25kYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAg ICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT48ZW1waGFzaXM+ QXZhaWxhYmxlIGluIFBvc3RncmVTUUwgMTkgYW5kIGxhdGVyLjwvZW1waGFzaXM+PC9wYXJhPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgIFByb3ZpZGVzIGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBv ZgorICAgICAgICAgPGxpbmsgbGlua2VuZD0ibGlicHEtb2F1dGgtYXV0aGRhdGEtb2F1dGgtYmVh cmVyLXRva2VuIj48bGl0ZXJhbD5QUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTjwvbGl0ZXJh bD48L2xpbms+LAorICAgICAgICAgYW5kIGFkZHMgdGhlIGFiaWxpdHkgdG8gc2V0IGN1c3RvbSBl cnJvciBtZXNzYWdlcyBhbmQgaW5zcGVjdCB0aGUKKyAgICAgICAgIE9BdXRoIGlzc3VlciBJRCB0 aGF0IHRoZSBjbGllbnQgZXhwZWN0cyB0byB1c2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgICA8cmVwbGFjZWFibGU+ZGF0YTwvcmVwbGFjZWFibGU+IHBvaW50cyB0 byBhbiBpbnN0YW5jZQorICAgICAgICAgb2YgPHN5bWJvbD5QR29hdXRoQmVhcmVyUmVxdWVzdFYy PC9zeW1ib2w+LCB3aGljaCBzaG91bGQgYmUgZmlsbGVkIGluCisgICAgICAgICBieSB0aGUgaW1w bGVtZW50YXRpb246Cis8c3lub3BzaXM+Cit0eXBlZGVmIHN0cnVjdAoreworICAgIFBHb2F1dGhC ZWFyZXJSZXF1ZXN0IHYxOyAgICAvKiBzZWUgdGhlIFBHb2F1dGhCZWFyZXJSZXF1ZXN0IHN0cnVj dCwgYWJvdmUgKi8KKworICAgIC8qIEhvb2sgaW5wdXRzIChjb25zdGFudCBhY3Jvc3MgYWxsIGNh bGxzKSAqLworICAgIGNvbnN0IGNoYXIgKmlzc3VlcjsgICAgICAgICAgICAvKiB0aGUgaXNzdWVy IGlkZW50aWZpZXIgKFJGQyA5MjA3KSBpbiB1c2UgKi8KKworICAgIC8qIEhvb2sgb3V0cHV0cyAq LworICAgIGNvbnN0IGNoYXIgKmVycm9yOyAgICAgICAgICAgICAvKiBob29rLWRlZmluZWQgZXJy b3IgbWVzc2FnZSAqLworfSBQR29hdXRoQmVhcmVyUmVxdWVzdFYyOworPC9zeW5vcHNpcz4KKyAg ICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFdoZW4gYSA8bGl0ZXJhbD5Q UUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjwvbGl0ZXJhbD4gaG9vayBpcyBpbgorICAg ICAgICAgdXNlLCA8YXBwbGljYXRpb24+bGlicHE8L2FwcGxpY2F0aW9uPiBhZGRpdGlvbmFsbHkg Z3VhcmFudGVlcyB0aGF0IHRoZQorICAgICAgICAgPGxpdGVyYWw+cmVxdWVzdDwvbGl0ZXJhbD4g cG9pbnRlciB0aGF0IGlzIHByb3ZpZGVkIHRvIHRoZQorICAgICAgICAgPHJlcGxhY2VhYmxlPnYx LmFzeW5jPC9yZXBsYWNlYWJsZT4gYW5kIDxyZXBsYWNlYWJsZT52MS5jbGVhbnVwPC9yZXBsYWNl YWJsZT4KKyAgICAgICAgIGNhbGxiYWNrcyBtYXkgYmUgc2FmZWx5IGNhc3QgdG8gPGxpdGVyYWw+ KFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjImbmJzcDsqKTwvbGl0ZXJhbD4uCisgICAgICAgICBJbXBs ZW1lbnRhdGlvbnMgbXVzdCBvdGhlcndpc2UgZm9sbG93IHRoZSB2MSBBUEksIGFzIGRlc2NyaWJl ZCBhYm92ZSwKKyAgICAgICAgIHVzaW5nIHRoZSA8cmVwbGFjZWFibGU+djE8L3JlcGxhY2VhYmxl PiBzdHJ1Y3QgbWVtYmVyLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDx3YXJuaW5nPgorICAg ICAgICAgPHBhcmE+CisgICAgICAgICAgQ2FzdGluZyB0byA8bGl0ZXJhbD4oUEdvYXV0aEJlYXJl clJlcXVlc3RWMiZuYnNwOyopPC9saXRlcmFsPiBpcworICAgICAgICAgIDxlbXBoYXNpcz5vbmx5 PC9lbXBoYXNpcz4gc2FmZSB3aGVuIHRoZSBob29rIHR5cGUgaXMKKyAgICAgICAgICA8bGl0ZXJh bD5QUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjwvbGl0ZXJhbD4uIEFwcGxpY2F0aW9u cyBtYXkKKyAgICAgICAgICBjcmFzaCBvciBtaXNiZWhhdmUgaWYgYSBob29rIGF0dGVtcHRzIHRv IHVzZSB2MiBmZWF0dXJlcyB3aXRoIHRoZSB2MQorICAgICAgICAgIGhvb2sgdHlwZS4KKyAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPC93YXJuaW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAg IEluIGFkZGl0aW9uIHRvIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB2ZXJzaW9uIDEgQVBJLCB0 aGUgdjIgc3RydWN0CisgICAgICAgICBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGlucHV0IGFuZCBv dXRwdXQgZm9yIHRoZSBob29rOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgPHJlcGxhY2VhYmxlPmlzc3VlcjwvcmVwbGFjZWFibGU+IGNvbnRhaW5zIHRoZSBpc3N1 ZXIgaWRlbnRpZmllciwgYXMKKyAgICAgICAgIGRlZmluZWQgaW4gPHVsaW5rIHVybD0iaHR0cHM6 Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM5MjA3Ij5SRkMgOTIwNzwvdWxpbms+ LAorICAgICAgICAgdGhhdCBpcyBpbiB1c2UgZm9yIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uIFRo aXMgaWRlbnRpZmllciBpcworICAgICAgICAgZGV0ZXJtaW5lZCBieSA8eHJlZiBsaW5rZW5kPSJs aWJwcS1jb25uZWN0LW9hdXRoLWlzc3VlciIvPi4KKyAgICAgICAgIFRvIGF2b2lkIG1peC11cCBh dHRhY2tzLCBjdXN0b20gZmxvd3Mgc2hvdWxkIGVuc3VyZSB0aGF0IGFueSBkaXNjb3ZlcnkKKyAg ICAgICAgIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciBtYXRj aGVzIHRoaXMgaXNzdWVyIElELgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgPHJlcGxhY2VhYmxlPmVycm9yPC9yZXBsYWNlYWJsZT4gbWF5IGJlIHNldCB0byBwb2lu dCB0byBhIGN1c3RvbQorICAgICAgICAgZXJyb3IgbWVzc2FnZSB3aGVuIGEgZmxvdyBmYWlscy4g VGhlIG1lc3NhZ2Ugd2lsbCBiZSBpbmNsdWRlZCBhcyBwYXJ0CisgICAgICAgICBvZiA8bGluayBs aW5rZW5kPSJsaWJwcS1QUWVycm9yTWVzc2FnZSI+PGxpdGVyYWw+UFFlcnJvck1lc3NhZ2UoKTwv bGl0ZXJhbD48L2xpbms+LgorICAgICAgICAgSG9va3MgbXVzdCBmcmVlIGFueSBlcnJvciBtZXNz YWdlIGFsbG9jYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgIDxyZXBsYWNlYWJsZT52MS5jbGVh bnVwPC9yZXBsYWNlYWJsZT4gY2FsbGJhY2suCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xp c3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPC92YXJpYWJsZWxpc3Q+CiAg ICAgPC9wYXJhPgogICAgPC9zZWN0Mz4KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMjQx OTQ1NzM0ZWMuLjUzYTE4M2ExNGYwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTky NSw2ICsxOTI1LDcgQEAgUEdkYXRhVmFsdWUKIFBHbG9iamZ1bmNzCiBQR25vdGlmeQogUEdvYXV0 aEJlYXJlclJlcXVlc3QKK1BHb2F1dGhCZWFyZXJSZXF1ZXN0VjIKIFBHcGlwZWxpbmVTdGF0dXMK IFBHcHJvbXB0T0F1dGhEZXZpY2UKIFBHcmVzQXR0RGVzYwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVy ZmFjZXMvbGlicHEvbGlicHEtZmUuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgK aW5kZXggMjliMTZlZmJiMWQuLjFhNjEyMDZiZGM1IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1mZS5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgK QEAgLTY2LDYgKzY2LDggQEAgZXh0ZXJuICJDIgogLyogRmVhdHVyZXMgYWRkZWQgaW4gUG9zdGdy ZVNRTCB2MTk6ICovCiAvKiBJbmRpY2F0ZXMgcHJlc2VuY2Ugb2YgUFFnZXRUaHJlYWRMb2NrICov CiAjZGVmaW5lIExJQlBRX0hBU19HRVRfVEhSRUFEX0xPQ0sKKy8qIEluZGljYXRlcyBwcmVzZW5j ZSBvZiB0aGUgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIgYXV0aGRhdGEgaG9vayAq LworI2RlZmluZSBMSUJQUV9IQVNfT0FVVEhfQkVBUkVSX1RPS0VOX1YyIDEKIAogLyoKICAqIE9w dGlvbiBmbGFncyBmb3IgUFFjb3B5UmVzdWx0CkBAIC0xOTcsNyArMTk5LDkgQEAgdHlwZWRlZiBl bnVtCiB7CiAJUFFBVVRIREFUQV9QUk9NUFRfT0FVVEhfREVWSUNFLCAvKiB1c2VyIG11c3Qgdmlz aXQgYSBkZXZpY2UtYXV0aG9yaXphdGlvbgogCQkJCQkJCQkJICogVVJMICovCi0JUFFBVVRIREFU QV9PQVVUSF9CRUFSRVJfVE9LRU4sCS8qIHNlcnZlciByZXF1ZXN0cyBhbiBPQXV0aCBCZWFyZXIg dG9rZW4gKi8KKwlQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiwJLyogc2VydmVyIHJlcXVl c3RzIGFuIE9BdXRoIEJlYXJlciB0b2tlbgorCQkJCQkJCQkJICogKHYyIGlzIHByZWZlcnJlZDsg c2VlIGJlbG93KSAqLworCVBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyLAkvKiBuZXdl c3QgQVBJIGZvciBPQXV0aCBCZWFyZXIgdG9rZW5zICovCiB9IFBHYXV0aERhdGE7CiAKIC8qIFBH Y29ubiBlbmNhcHN1bGF0ZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBiYWNrZW5kLgpAQCAtNzM1LDYg KzczOSw3IEBAIGV4dGVybiBpbnQJUFFlbnYyZW5jb2Rpbmcodm9pZCk7CiAKIC8qID09PSBpbiBm ZS1hdXRoLmMgPT09ICovCiAKKy8qIEF1dGhkYXRhIGZvciBQUUFVVEhEQVRBX1BST01QVF9PQVVU SF9ERVZJQ0UgKi8KIHR5cGVkZWYgc3RydWN0IF9QR3Byb21wdE9BdXRoRGV2aWNlCiB7CiAJY29u c3QgY2hhciAqdmVyaWZpY2F0aW9uX3VyaTsJLyogdmVyaWZpY2F0aW9uIFVSSSB0byB2aXNpdCAq LwpAQCAtNzU1LDYgKzc2MCw3IEBAIHR5cGVkZWYgc3RydWN0IF9QR3Byb21wdE9BdXRoRGV2aWNl CiAjZGVmaW5lIFBRX1NPQ0tUWVBFIGludAogI2VuZGlmCiAKKy8qIEF1dGhkYXRhIGZvciBQUUFV VEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiAqLwogdHlwZWRlZiBzdHJ1Y3QgUEdvYXV0aEJlYXJl clJlcXVlc3QKIHsKIAkvKiBIb29rIGlucHV0cyAoY29uc3RhbnQgYWNyb3NzIGFsbCBjYWxscykg Ki8KQEAgLTc4OCw3ICs3OTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBQR29hdXRoQmVhcmVyUmVxdWVz dAogCiAJLyoKIAkgKiBDYWxsYmFjayB0byBjbGVhbiB1cCBjdXN0b20gYWxsb2NhdGlvbnMuIEEg aG9vayBpbXBsZW1lbnRhdGlvbiBtYXkgdXNlCi0JICogdGhpcyB0byBmcmVlIHJlcXVlc3QtPnRv a2VuIGFuZCBhbnkgcmVzb3VyY2VzIGluIHJlcXVlc3QtPnVzZXIuCisJICogdGhpcyB0byBmcmVl IHJlcXVlc3QtPnRva2VuIGFuZCBhbnkgcmVzb3VyY2VzIGluIHJlcXVlc3QtPnVzZXIuIFYyCisJ ICogaW1wbGVtZW50YXRpb25zIHNob3VsZCBhZGRpdGlvbmFsbHkgZnJlZSByZXF1ZXN0LT5lcnJv ciwgaWYgc2V0LgogCSAqCiAJICogVGhpcyBpcyB0ZWNobmljYWxseSBvcHRpb25hbCwgYnV0IGhp Z2hseSByZWNvbW1lbmRlZCwgYmVjYXVzZSB0aGVyZSBpcwogCSAqIG5vIG90aGVyIGluZGljYXRp b24gYXMgdG8gd2hlbiBpdCBpcyBzYWZlIHRvIGZyZWUgdGhlIHRva2VuLgpAQCAtODEzLDYgKzgy MCwyNiBAQCB0eXBlZGVmIHN0cnVjdCBQR29hdXRoQmVhcmVyUmVxdWVzdAogCiAjdW5kZWYgUFFf U09DS1RZUEUKIAorLyogQXV0aGRhdGEgZm9yIFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VO X1YyICovCit0eXBlZGVmIHN0cnVjdAoreworCVBHb2F1dGhCZWFyZXJSZXF1ZXN0IHYxOwkvKiBz ZWUgdGhlIFBHb2F1dGhCZWFyZXJSZXF1ZXN0IHN0cnVjdCwgYWJvdmUgKi8KKworCS8qIEhvb2sg aW5wdXRzIChjb25zdGFudCBhY3Jvc3MgYWxsIGNhbGxzKSAqLworCWNvbnN0IGNoYXIgKmlzc3Vl cjsJCQkvKiB0aGUgaXNzdWVyIGlkZW50aWZpZXIgKFJGQyA5MjA3KSBpbiB1c2UsIGFzCisJCQkJ CQkJCSAqIGRlcml2ZWQgZnJvbSB0aGUgY29ubmVjdGlvbidzIG9hdXRoX2lzc3VlciAqLworCisJ LyogSG9vayBvdXRwdXRzICovCisKKwkvKgorCSAqIEhvb2stZGVmaW5lZCBlcnJvciBtZXNzYWdl IHdoaWNoIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGNvbm5lY3Rpb24ncworCSAqIFBRZXJyb3JN ZXNzYWdlKCkgb3V0cHV0IHdoZW4gdGhlIGZsb3cgZmFpbHMuIGxpYnBxIGRvZXMgbm90IHRha2UK KwkgKiBvd25lcnNoaXAgb2YgdGhpcyBwb2ludGVyOyBhbnkgYWxsb2NhdGlvbnMgc2hvdWxkIGJl IGZyZWVkIGR1cmluZyB0aGUKKwkgKiBjbGVhbnVwIGNhbGxiYWNrLgorCSAqLworCWNvbnN0IGNo YXIgKmVycm9yOworfSBQR29hdXRoQmVhcmVyUmVxdWVzdFYyOworCiBleHRlcm4gY2hhciAqUFFl bmNyeXB0UGFzc3dvcmQoY29uc3QgY2hhciAqcGFzc3dkLCBjb25zdCBjaGFyICp1c2VyKTsKIGV4 dGVybiBjaGFyICpQUWVuY3J5cHRQYXNzd29yZENvbm4oUEdjb25uICpjb25uLCBjb25zdCBjaGFy ICpwYXNzd2QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmFsZ29yaXRobSk7CiBleHRl cm4gUEdyZXN1bHQgKlBRY2hhbmdlUGFzc3dvcmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1 c2VyLCBjb25zdCBjaGFyICpwYXNzd2QpOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtYXV0aC1vYXV0aC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5j CmluZGV4IDY3ODc5ZDY0YjM5Li5iNjRkMDVhMTNlMyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1 dGgtb2F1dGguYwpAQCAtNjc1LDYgKzY3NSwyNSBAQCBjbGVhbnVwOgogCXJldHVybiBzdWNjZXNz OwogfQogCisvKgorICogSGVscGVyIGZvciBoYW5kbGluZyBmbG93IGZhaWx1cmVzLiBJZiBhbnl0 aGluZyB3YXMgcHV0IGludG8gcmVxdWVzdC0+ZXJyb3IsCisgKiBpdCdzIGFkZGVkIHRvIGNvbm4t PmVycm9yTWVzc2FnZSBoZXJlLgorICovCitzdGF0aWMgdm9pZAorcmVwb3J0X3VzZXJfZmxvd19l cnJvcihQR2Nvbm4gKmNvbm4sIGNvbnN0IFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3Qp Cit7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCSBs aWJwcV9nZXR0ZXh0KCJ1c2VyLWRlZmluZWQgT0F1dGggZmxvdyBmYWlsZWQiKSk7CisKKwlpZiAo cmVxdWVzdC0+ZXJyb3IpCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JN ZXNzYWdlLCAiOiAiKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2Fn ZSwgcmVxdWVzdC0+ZXJyb3IpOworCX0KKworCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcigmY29ubi0+ ZXJyb3JNZXNzYWdlLCAnXG4nKTsKK30KKwogLyoKICAqIENhbGxiYWNrIGltcGxlbWVudGF0aW9u IG9mIGNvbm4tPmFzeW5jX2F1dGgoKSBmb3IgYSB1c2VyLWRlZmluZWQgT0F1dGggZmxvdy4KICAq IERlbGVnYXRlcyB0aGUgcmV0cmlldmFsIG9mIHRoZSB0b2tlbiB0byB0aGUgYXBwbGljYXRpb24n cyBhc3luYyBjYWxsYmFjay4KQEAgLTY4NywyMCArNzA2LDIzIEBAIHN0YXRpYyBQb3N0Z3Jlc1Bv bGxpbmdTdGF0dXNUeXBlCiBydW5fdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIHsKIAlm ZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBjb25uLT5zYXNsX3N0YXRlOwotCVBHb2F1dGhCZWFyZXJS ZXF1ZXN0ICpyZXF1ZXN0ID0gc3RhdGUtPmFzeW5jX2N0eDsKKwlQR29hdXRoQmVhcmVyUmVxdWVz dFYyICpyZXF1ZXN0ID0gc3RhdGUtPmFzeW5jX2N0eDsKIAlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNU eXBlIHN0YXR1czsKIAotCWlmICghcmVxdWVzdC0+YXN5bmMpCisJaWYgKCFyZXF1ZXN0LT52MS5h c3luYykKIAl7CiAJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sCiAJCQkJCQkJCSJ1c2Vy LWRlZmluZWQgT0F1dGggZmxvdyBwcm92aWRlZCBuZWl0aGVyIGEgdG9rZW4gbm9yIGFuIGFzeW5j IGNhbGxiYWNrIik7CiAJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKIAl9CiAKLQlzdGF0 dXMgPSByZXF1ZXN0LT5hc3luYyhjb25uLCByZXF1ZXN0LCAmY29ubi0+YWx0c29jayk7CisJc3Rh dHVzID0gcmVxdWVzdC0+djEuYXN5bmMoY29ubiwKKwkJCQkJCQkgICAoUEdvYXV0aEJlYXJlclJl cXVlc3QgKikgcmVxdWVzdCwKKwkJCQkJCQkgICAmY29ubi0+YWx0c29jayk7CisKIAlpZiAoc3Rh dHVzID09IFBHUkVTX1BPTExJTkdfRkFJTEVEKQogCXsKLQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJy b3IoY29ubiwgInVzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZCIpOworCQlyZXBvcnRfdXNl cl9mbG93X2Vycm9yKGNvbm4sIHJlcXVlc3QpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAllbHNl IGlmIChzdGF0dXMgPT0gUEdSRVNfUE9MTElOR19PSykKQEAgLTcxMCwxNCArNzMyLDE0IEBAIHJ1 bl91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogCQkgKiBvbnRvIHRoZSBvcmlnaW5hbCBz dHJpbmcsIHNpbmNlIGl0IG1heSBub3QgYmUgc2FmZSBmb3IgdXMgdG8gZnJlZSgpCiAJCSAqIGl0 LikKIAkJICovCi0JCWlmICghcmVxdWVzdC0+dG9rZW4pCisJCWlmICghcmVxdWVzdC0+djEudG9r ZW4pCiAJCXsKIAkJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sCiAJCQkJCQkJCQkidXNl ci1kZWZpbmVkIE9BdXRoIGZsb3cgZGlkIG5vdCBwcm92aWRlIGEgdG9rZW4iKTsKIAkJCXJldHVy biBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKIAkJfQogCi0JCWNvbm4tPm9hdXRoX3Rva2VuID0gc3Ry ZHVwKHJlcXVlc3QtPnRva2VuKTsKKwkJY29ubi0+b2F1dGhfdG9rZW4gPSBzdHJkdXAocmVxdWVz dC0+djEudG9rZW4pOwogCQlpZiAoIWNvbm4tPm9hdXRoX3Rva2VuKQogCQl7CiAJCQlsaWJwcV9h cHBlbmRfY29ubl9lcnJvcihjb25uLCAib3V0IG9mIG1lbW9yeSIpOwpAQCAtNzM5LDE5ICs3NjEs MjAgQEAgcnVuX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiB9CiAKIC8qCi0gKiBDbGVh bnVwIGNhbGxiYWNrIGZvciB0aGUgYXN5bmMgdXNlciBmbG93LiBEZWxlZ2F0ZXMgbW9zdCBvZiBp dHMgam9iIHRvIHRoZQotICogdXNlci1wcm92aWRlZCBjbGVhbnVwIGltcGxlbWVudGF0aW9uLCB0 aGVuIGRpc2Nvbm5lY3RzIHRoZSBhbHRzb2NrLgorICogQ2xlYW51cCBjYWxsYmFjayBmb3IgdGhl IGFzeW5jIHVzZXIgZmxvdy4gRGVsZWdhdGVzIG1vc3Qgb2YgaXRzIGpvYiB0bworICogUEdvYXV0 aEJlYXJlclJlcXVlc3RWMi5jbGVhbnVwKCksIHRoZW4gZGlzY29ubmVjdHMgdGhlIGFsdHNvY2sg YW5kIGZyZWVzIHRoZQorICogcmVxdWVzdCBpdHNlbGYuCiAgKi8KIHN0YXRpYyB2b2lkCiBjbGVh bnVwX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiB7CiAJZmVfb2F1dGhfc3RhdGUgKnN0 YXRlID0gY29ubi0+c2FzbF9zdGF0ZTsKLQlQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxdWVzdCA9 IHN0YXRlLT5hc3luY19jdHg7CisJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCA9IHN0 YXRlLT5hc3luY19jdHg7CiAKIAlBc3NlcnQocmVxdWVzdCk7CiAKLQlpZiAocmVxdWVzdC0+Y2xl YW51cCkKLQkJcmVxdWVzdC0+Y2xlYW51cChjb25uLCByZXF1ZXN0KTsKKwlpZiAocmVxdWVzdC0+ djEuY2xlYW51cCkKKwkJcmVxdWVzdC0+djEuY2xlYW51cChjb25uLCAoUEdvYXV0aEJlYXJlclJl cXVlc3QgKikgcmVxdWVzdCk7CiAJY29ubi0+YWx0c29jayA9IFBHSU5WQUxJRF9TT0NLRVQ7CiAK IAlmcmVlKHJlcXVlc3QpOwpAQCAtOTc1LDggKzk5OCw4IEBAIHVzZV9idWlsdGluX2Zsb3coUEdj b25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAgKiB0b2tlbiBmb3IgcHJlc2VudGF0 aW9uIHRvIHRoZSBzZXJ2ZXIuCiAgKgogICogSWYgdGhlIGFwcGxpY2F0aW9uIGhhcyByZWdpc3Rl cmVkIGEgY3VzdG9tIGZsb3cgaGFuZGxlciB1c2luZwotICogUFFBVVRIREFUQV9PQVVUSF9CRUFS RVJfVE9LRU4sIGl0IG1heSBlaXRoZXIgcmV0dXJuIGEgdG9rZW4gaW1tZWRpYXRlbHkgKGUuZy4K LSAqIGlmIGl0IGhhcyBvbmUgY2FjaGVkIGZvciBpbW1lZGlhdGUgdXNlKSwgb3Igc2V0IHVwIGZv ciBhIHNlcmllcyBvZgorICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5bX1YyXSwgaXQg bWF5IGVpdGhlciByZXR1cm4gYSB0b2tlbiBpbW1lZGlhdGVseQorICogKGUuZy4gaWYgaXQgaGFz IG9uZSBjYWNoZWQgZm9yIGltbWVkaWF0ZSB1c2UpLCBvciBzZXQgdXAgZm9yIGEgc2VyaWVzIG9m CiAgKiBhc3luY2hyb25vdXMgY2FsbGJhY2tzIHdoaWNoIHdpbGwgYmUgbWFuYWdlZCBieSBydW5f dXNlcl9vYXV0aF9mbG93KCkuCiAgKgogICogSWYgdGhlIGRlZmF1bHQgaGFuZGxlciBpcyB1c2Vk IGluc3RlYWQsIGEgRGV2aWNlIEF1dGhvcml6YXRpb24gZmxvdyBpcyB1c2VkCkBAIC05OTAsMjcg KzEwMTMsMzcgQEAgc3RhdGljIGJvb2wKIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdjb25uICpjb25u LCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiB7CiAJaW50CQkJcmVzOwotCVBHb2F1dGhCZWFyZXJS ZXF1ZXN0IHJlcXVlc3QgPSB7Ci0JCS5vcGVuaWRfY29uZmlndXJhdGlvbiA9IGNvbm4tPm9hdXRo X2Rpc2NvdmVyeV91cmksCi0JCS5zY29wZSA9IGNvbm4tPm9hdXRoX3Njb3BlLAorCVBHb2F1dGhC ZWFyZXJSZXF1ZXN0VjIgcmVxdWVzdCA9IHsKKwkJLnYxID0geworCQkJLm9wZW5pZF9jb25maWd1 cmF0aW9uID0gY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSwKKwkJCS5zY29wZSA9IGNvbm4tPm9h dXRoX3Njb3BlLAorCQl9LAorCQkuaXNzdWVyID0gY29ubi0+b2F1dGhfaXNzdWVyX2lkLAogCX07 CiAKLQlBc3NlcnQocmVxdWVzdC5vcGVuaWRfY29uZmlndXJhdGlvbik7CisJQXNzZXJ0KHJlcXVl c3QudjEub3BlbmlkX2NvbmZpZ3VyYXRpb24pOworCUFzc2VydChyZXF1ZXN0Lmlzc3Vlcik7CisK KwkvKgorCSAqIFRoZSBjbGllbnQgbWF5IGhhdmUgb3ZlcnJpZGRlbiB0aGUgT0F1dGggZmxvdy4g VHJ5IHRoZSB2MiBob29rIGZpcnN0LAorCSAqIHRoZW4gZmFsbCBiYWNrIHRvIHRoZSB2MSBpbXBs ZW1lbnRhdGlvbi4KKwkgKi8KKwlyZXMgPSBQUWF1dGhEYXRhSG9vayhQUUFVVEhEQVRBX09BVVRI X0JFQVJFUl9UT0tFTl9WMiwgY29ubiwgJnJlcXVlc3QpOworCWlmIChyZXMgPT0gMCkKKwkJcmVz ID0gUFFhdXRoRGF0YUhvb2soUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4sIGNvbm4sICZy ZXF1ZXN0KTsKIAotCS8qIFRoZSBjbGllbnQgbWF5IGhhdmUgb3ZlcnJpZGRlbiB0aGUgT0F1dGgg Zmxvdy4gKi8KLQlyZXMgPSBQUWF1dGhEYXRhSG9vayhQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9U T0tFTiwgY29ubiwgJnJlcXVlc3QpOwogCWlmIChyZXMgPiAwKQogCXsKLQkJUEdvYXV0aEJlYXJl clJlcXVlc3QgKnJlcXVlc3RfY29weTsKKwkJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVz dF9jb3B5OwogCi0JCWlmIChyZXF1ZXN0LnRva2VuKQorCQlpZiAocmVxdWVzdC52MS50b2tlbikK IAkJewogCQkJLyoKIAkJCSAqIFdlIGFscmVhZHkgaGF2ZSBhIHRva2VuLCBzbyBjb3B5IGl0IGlu dG8gdGhlIGNvbm4uIChXZSBjYW4ndAogCQkJICogaG9sZCBvbnRvIHRoZSBvcmlnaW5hbCBzdHJp bmcsIHNpbmNlIGl0IG1heSBub3QgYmUgc2FmZSBmb3IgdXMKIAkJCSAqIHRvIGZyZWUoKSBpdC4p CiAJCQkgKi8KLQkJCWNvbm4tPm9hdXRoX3Rva2VuID0gc3RyZHVwKHJlcXVlc3QudG9rZW4pOwor CQkJY29ubi0+b2F1dGhfdG9rZW4gPSBzdHJkdXAocmVxdWVzdC52MS50b2tlbik7CiAJCQlpZiAo IWNvbm4tPm9hdXRoX3Rva2VuKQogCQkJewogCQkJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNv bm4sICJvdXQgb2YgbWVtb3J5Iik7CkBAIC0xMDE4LDggKzEwNTEsOCBAQCBzZXR1cF90b2tlbl9y ZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQogCQkJfQogCiAJCQkv KiBzaG9ydC1jaXJjdWl0ICovCi0JCQlpZiAocmVxdWVzdC5jbGVhbnVwKQotCQkJCXJlcXVlc3Qu Y2xlYW51cChjb25uLCAmcmVxdWVzdCk7CisJCQlpZiAocmVxdWVzdC52MS5jbGVhbnVwKQorCQkJ CXJlcXVlc3QudjEuY2xlYW51cChjb25uLCAoUEdvYXV0aEJlYXJlclJlcXVlc3QgKikgJnJlcXVl c3QpOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KIApAQCAtMTAzOCw3ICsxMDcxLDcgQEAgc2V0dXBf dG9rZW5fcmVxdWVzdChQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAl9CiAJ ZWxzZSBpZiAocmVzIDwgMCkKIAl7Ci0JCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJ1 c2VyLWRlZmluZWQgT0F1dGggZmxvdyBmYWlsZWQiKTsKKwkJcmVwb3J0X3VzZXJfZmxvd19lcnJv cihjb25uLCAmcmVxdWVzdCk7CiAJCWdvdG8gZmFpbDsKIAl9CiAJZWxzZSBpZiAoIXVzZV9idWls dGluX2Zsb3coY29ubiwgc3RhdGUpKQpAQCAtMTA1MCw4ICsxMDgzLDggQEAgc2V0dXBfdG9rZW5f cmVxdWVzdChQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAlyZXR1cm4gdHJ1 ZTsKIAogZmFpbDoKLQlpZiAocmVxdWVzdC5jbGVhbnVwKQotCQlyZXF1ZXN0LmNsZWFudXAoY29u biwgJnJlcXVlc3QpOworCWlmIChyZXF1ZXN0LnYxLmNsZWFudXApCisJCXJlcXVlc3QudjEuY2xl YW51cChjb25uLCAoUEdvYXV0aEJlYXJlclJlcXVlc3QgKikgJnJlcXVlc3QpOwogCXJldHVybiBm YWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Iv b2F1dGhfaG9va19jbGllbnQuYyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29h dXRoX2hvb2tfY2xpZW50LmMKaW5kZXggNjBkZDFkY2RhYTAuLjViZGRjMGY4MDdhIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5j CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2hvb2tfY2xpZW50 LmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVk ZSAibGlicHEtZmUuaCIKKyNpbmNsdWRlICJwcWV4cGJ1ZmZlci5oIgogCiBzdGF0aWMgaW50CWhh bmRsZV9hdXRoX2RhdGEoUEdhdXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNvbm4sIHZvaWQgKmRhdGEp Owogc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgYXN5bmNfY2IoUEdjb25uICpjb25u LApAQCAtMzYsMTMgKzM3LDE2IEBAIHVzYWdlKGNoYXIgKmFyZ3ZbXSkKIAogCXByaW50ZigicmVj b2duaXplZCBmbGFnczpcbiIpOwogCXByaW50ZigiICAtaCwgLS1oZWxwICAgICAgICAgICAgICBz aG93IHRoaXMgbWVzc2FnZVxuIik7CisJcHJpbnRmKCIgIC12IFZFUlNJT04gICAgICAgICAgICAg IHNlbGVjdCB0aGUgaG9vayBBUEkgdmVyc2lvbiAoZGVmYXVsdCAyKVxuIik7CiAJcHJpbnRmKCIg IC0tZXhwZWN0ZWQtc2NvcGUgU0NPUEUgIGZhaWwgaWYgcmVjZWl2ZWQgc2NvcGVzIGRvIG5vdCBt YXRjaCBTQ09QRVxuIik7CiAJcHJpbnRmKCIgIC0tZXhwZWN0ZWQtdXJpIFVSSSAgICAgIGZhaWwg aWYgcmVjZWl2ZWQgY29uZmlndXJhdGlvbiBsaW5rIGRvZXMgbm90IG1hdGNoIFVSSVxuIik7CisJ cHJpbnRmKCIgIC0tZXhwZWN0ZWQtaXNzdWVyIElTUyAgIGZhaWwgaWYgcmVjZWl2ZWQgaXNzdWVy IGRvZXMgbm90IG1hdGNoIElTUyAodjIgb25seSlcbiIpOwogCXByaW50ZigiICAtLW1pc2JlaGF2 ZT1NT0RFICAgICAgICBoYXZlIHRoZSBob29rIGZhaWwgcmVxdWlyZWQgcG9zdGNvbmRpdGlvbnNc biIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgKE1PREVzOiBuby1ob29rLCBmYWls LWFzeW5jLCBuby10b2tlbiwgbm8tc29ja2V0KVxuIik7CiAJcHJpbnRmKCIgIC0tbm8taG9vayAg ICAgICAgICAgICAgIGRvbid0IGluc3RhbGwgT0F1dGggaG9va3NcbiIpOwogCXByaW50ZigiICAt LWhhbmctZm9yZXZlciAgICAgICAgICBkb24ndCBldmVyIHJldHVybiBhIHRva2VuIChjb21iaW5l IHdpdGggY29ubmVjdF90aW1lb3V0KVxuIik7CiAJcHJpbnRmKCIgIC0tdG9rZW4gVE9LRU4gICAg ICAgICAgIHVzZSB0aGUgcHJvdmlkZWQgVE9LRU4gdmFsdWVcbiIpOworCXByaW50ZigiICAtLWVy cm9yIEVSUk1TRyAgICAgICAgICBmYWlsIGluc3RlYWQsIHdpdGggdGhlIGdpdmVuIEVSUk1TRyAo djIgb25seSlcbiIpOwogCXByaW50ZigiICAtLXN0cmVzcy1hc3luYyAgICAgICAgICBidXN5LWxv b3Agb24gUFFjb25uZWN0UG9sbCByYXRoZXIgdGhhbiBwb2xsaW5nXG4iKTsKIH0KIApAQCAtNTEs OSArNTUsMTIgQEAgc3RhdGljIGJvb2wgbm9faG9vayA9IGZhbHNlOwogc3RhdGljIGJvb2wgaGFu Z19mb3JldmVyID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBzdHJlc3NfYXN5bmMgPSBmYWxzZTsKIHN0 YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF91cmkgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIg KmV4cGVjdGVkX2lzc3VlciA9IE5VTEw7CiBzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfc2Nv cGUgPSBOVUxMOwogc3RhdGljIGNvbnN0IGNoYXIgKm1pc2JlaGF2ZV9tb2RlID0gTlVMTDsKIHN0 YXRpYyBjaGFyICp0b2tlbiA9IE5VTEw7CitzdGF0aWMgY2hhciAqZXJybXNnID0gTlVMTDsKK3N0 YXRpYyBpbnQJaG9va192ZXJzaW9uID0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI7 CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpAQCAtNjgsNiArNzUsOCBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsiaGFuZy1mb3JldmVyIiwgbm9fYXJndW1l bnQsIE5VTEwsIDEwMDR9LAogCQl7Im1pc2JlaGF2ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCAxMDA1fSwKIAkJeyJzdHJlc3MtYXN5bmMiLCBub19hcmd1bWVudCwgTlVMTCwgMTAwNn0sCisJ CXsiZXhwZWN0ZWQtaXNzdWVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDd9LAorCQl7 ImVycm9yIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDh9LAogCQl7MH0KIAl9OwogCkBA IC03NSw3ICs4NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlQR2Nvbm4JICAg KmNvbm47CiAJaW50CQkJYzsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3Ys ICJoIiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xv bmcoYXJnYywgYXJndiwgImh2OiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQogCXsKIAkJ c3dpdGNoIChjKQogCQl7CkBAIC04Myw2ICs5MiwxOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJCQkJdXNhZ2UoYXJndik7CiAJCQkJcmV0dXJuIDA7CiAKKwkJCWNhc2UgJ3YnOgor CQkJCWlmIChzdHJjbXAob3B0YXJnLCAiMSIpID09IDApCisJCQkJCWhvb2tfdmVyc2lvbiA9IFBR QVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOOworCQkJCWVsc2UgaWYgKHN0cmNtcChvcHRhcmcs ICIyIikgPT0gMCkKKwkJCQkJaG9va192ZXJzaW9uID0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU5fVjI7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJdXNhZ2UoYXJndik7CisJCQkJCXJldHVy biAxOworCQkJCX0KKwkJCQlicmVhazsKKwogCQkJY2FzZSAxMDAwOgkJCS8qIC0tZXhwZWN0ZWQt c2NvcGUgKi8KIAkJCQlleHBlY3RlZF9zY29wZSA9IG9wdGFyZzsKIAkJCQlicmVhazsKQEAgLTEx MSw2ICsxMzIsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCXN0cmVzc19h c3luYyA9IHRydWU7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgMTAwNzoJCQkvKiAtLWV4cGVjdGVk LWlzc3VlciAqLworCQkJCWV4cGVjdGVkX2lzc3VlciA9IG9wdGFyZzsKKwkJCQlicmVhazsKKwor CQkJY2FzZSAxMDA4OgkJCS8qIC0tZXJyb3IgKi8KKwkJCQllcnJtc2cgPSBvcHRhcmc7CisJCQkJ YnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJdXNhZ2UoYXJndik7CiAJCQkJcmV0dXJuIDE7CkBA IC0xNjcsMTYgKzE5NiwyNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIC8qCiAg KiBQUWF1dGhEYXRhSG9vayBpbXBsZW1lbnRhdGlvbi4gUmVwbGFjZXMgdGhlIGRlZmF1bHQgY2xp ZW50IGZsb3cgYnkgaGFuZGxpbmcKLSAqIFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOLgor ICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5bX1YyXS4KICAqLwogc3RhdGljIGludAog aGFuZGxlX2F1dGhfZGF0YShQR2F1dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAqZGF0 YSkKIHsKLQlQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxID0gZGF0YTsKKwlQR29hdXRoQmVhcmVy UmVxdWVzdCAqcmVxOworCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcTIgPSBOVUxMOworCisJ QXNzZXJ0KGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiB8fAor CQkgICBob29rX3ZlcnNpb24gPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIpOwog Ci0JaWYgKG5vX2hvb2sgfHwgKHR5cGUgIT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4p KQorCWlmIChub19ob29rIHx8IHR5cGUgIT0gaG9va192ZXJzaW9uKQogCQlyZXR1cm4gMDsKIAor CXJlcSA9IGRhdGE7CisJaWYgKHR5cGUgPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5f VjIpCisJCXJlcTIgPSBkYXRhOworCiAJaWYgKGhhbmdfZm9yZXZlcikKIAl7CiAJCS8qIFN0YXJ0 IGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLiAqLwpAQCAtMjIxLDYgKzI1OCw0NCBAQCBoYW5kbGVf YXV0aF9kYXRhKFBHYXV0aERhdGEgdHlwZSwgUEdjb25uICpjb25uLCB2b2lkICpkYXRhKQogCQl9 CiAJfQogCisJaWYgKGV4cGVjdGVkX2lzc3VlcikKKwl7CisJCWlmICghcmVxMikKKwkJeworCQkJ ZnByaW50ZihzdGRlcnIsICItLWV4cGVjdGVkLWlzc3VlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0 aCAtdjFcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKCFyZXEyLT5pc3N1ZXIpCisJ CXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgaXNzdWVyIFwiJXNcIiwgZ290IE5VTExc biIsIGV4cGVjdGVkX2lzc3Vlcik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoc3RyY21w KGV4cGVjdGVkX2lzc3VlciwgcmVxMi0+aXNzdWVyKSAhPSAwKQorCQl7CisJCQlmcHJpbnRmKHN0 ZGVyciwgImV4cGVjdGVkIGlzc3VlciBcIiVzXCIsIGdvdCBcIiVzXCJcbiIsIGV4cGVjdGVkX2lz c3VlciwgcmVxMi0+aXNzdWVyKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmIChlcnJt c2cpCisJeworCQlpZiAodG9rZW4pCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiLS1lcnJvciBj YW5ub3QgYmUgY29tYmluZWQgd2l0aCAtLXRva2VuXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQor CQllbHNlIGlmICghcmVxMikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICItLWVycm9yIGNhbm5v dCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlyZXEy LT5lcnJvciA9IGVycm1zZzsKKwkJcmV0dXJuIC0xOworCX0KKwogCXJlcS0+dG9rZW4gPSB0b2tl bjsKIAlyZXR1cm4gMTsKIH0KQEAgLTI3Myw2ICszNDgsMjAgQEAgbWlzYmVoYXZlX2NiKFBHY29u biAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwgcGdzb2NrZXQgKmFsdHNvY2spCiAJ aWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgImZhaWwtYXN5bmMiKSA9PSAwKQogCXsKIAkJLyog SnVzdCBmYWlsICJub3JtYWxseSIuICovCisJCWlmIChlcnJtc2cpCisJCXsKKwkJCVBHb2F1dGhC ZWFyZXJSZXF1ZXN0VjIgKnJlcTI7CisKKwkJCWlmIChob29rX3ZlcnNpb24gPT0gUFFBVVRIREFU QV9PQVVUSF9CRUFSRVJfVE9LRU4pCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsICItLWVycm9y IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwor CQkJcmVxMiA9IChQR29hdXRoQmVhcmVyUmVxdWVzdFYyICopIHJlcTsKKwkJCXJlcTItPmVycm9y ID0gZXJybXNnOworCQl9CisKIAkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogCX0KIAll bHNlIGlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJuby10b2tlbiIpID09IDApCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwgYi9z cmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwKaW5kZXggZDY2 Y2QwYjRhNWYuLjEyYWYzNWI3ZDk2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRo X3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92 YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsCkBAIC03OCw5ICs3OCw5IEBAIHN1YiB0ZXN0CiAJbXkg JGxvZ19zdGFydCA9IC1zICRub2RlLT5sb2dmaWxlOwogCW15ICgkc3Rkb3V0LCAkc3RkZXJyKSA9 IHJ1bl9jb21tYW5kKFxAY21kKTsKIAotCWlmIChkZWZpbmVkKCRwYXJhbXN7ZXhwZWN0ZWRfc3Rk b3V0fSkpCisJaWYgKCRwYXJhbXN7ZXhwZWN0X3N1Y2Nlc3N9KQogCXsKLQkJbGlrZSgkc3Rkb3V0 LCAkcGFyYW1ze2V4cGVjdGVkX3N0ZG91dH0sICIkdGVzdF9uYW1lOiBzdGRvdXQgbWF0Y2hlcyIp OworCQlsaWtlKCRzdGRvdXQsIHFyL2Nvbm5lY3Rpb24gc3VjY2VlZGVkLywgIiR0ZXN0X25hbWU6 IHN0ZG91dCBtYXRjaGVzIik7CiAJfQogCiAJaWYgKGRlZmluZWQoJHBhcmFtc3tleHBlY3RlZF9z dGRlcnJ9KSkKQEAgLTExMCwxMSArMTEwLDI0IEBAIHRlc3QoCiAJZmxhZ3MgPT4gWwogCQkiLS10 b2tlbiIsICJteS10b2tlbiIsCiAJCSItLWV4cGVjdGVkLXVyaSIsICIkaXNzdWVyLy53ZWxsLWtu b3duL29wZW5pZC1jb25maWd1cmF0aW9uIiwKKwkJIi0tZXhwZWN0ZWQtaXNzdWVyIiwgIiRpc3N1 ZXIiLAogCQkiLS1leHBlY3RlZC1zY29wZSIsICRzY29wZSwKIAldLAotCWV4cGVjdGVkX3N0ZG91 dCA9PiBxci9jb25uZWN0aW9uIHN1Y2NlZWRlZC8sCisJZXhwZWN0X3N1Y2Nlc3MgPT4gMSwKIAls b2dfbGlrZSA9PiBbcXIvb2F1dGhfdmFsaWRhdG9yOiB0b2tlbj0ibXktdG9rZW4iLCByb2xlPSIk dXNlciIvXSk7CiAKKyMgTWFrZSBzdXJlIHRoZSB2MSBob29rIGNvbnRpbnVlcyB0byB3b3JrLgor dGVzdCgKKwkidjEgc3luY2hyb25vdXMgaG9vayBjYW4gcHJvdmlkZSBhIHRva2VuIiwKKwlmbGFn cyA9PiBbCisJCSItdjEiLAorCQkiLS10b2tlbiIgPT4gIm15LXRva2VuLXYxIiwKKwkJIi0tZXhw ZWN0ZWQtdXJpIiA9PiAiJGlzc3Vlci8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiIs CisJCSItLWV4cGVjdGVkLXNjb3BlIiA9PiAkc2NvcGUsCisJXSwKKwlleHBlY3Rfc3VjY2VzcyA9 PiAxLAorCWxvZ19saWtlID0+IFtxci9vYXV0aF92YWxpZGF0b3I6IHRva2VuPSJteS10b2tlbi12 MSIsIHJvbGU9IiR1c2VyIi9dKTsKKwogaWYgKCRFTlZ7d2l0aF9saWJjdXJsfSBuZSAneWVzJykK IHsKIAkjIGxpYnBxIHNob3VsZCBoZWxwIHVzZXJzIG91dCBpZiBubyBPQXV0aCBzdXBwb3J0IGlz IGJ1aWx0IGluLgpAQCAtMTI2LDYgKzEzOSwxNSBAQCBpZiAoJEVOVnt3aXRoX2xpYmN1cmx9IG5l ICd5ZXMnKQogCSk7CiB9CiAKKyMgdjIgc3luY2hyb25vdXMgZmxvd3Mgc2hvdWxkIGJlIGFibGUg dG8gc2V0IGN1c3RvbSBlcnJvciBtZXNzYWdlcy4KK3Rlc3QoCisJImJhc2ljIHN5bmNocm9ub3Vz IGhvb2sgY2FuIHNldCBlcnJvciBtZXNzYWdlcyIsCisJZmxhZ3MgPT4gWworCQkiLS1lcnJvciIg PT4gImEgY3VzdG9tIGVycm9yIG1lc3NhZ2UiLAorCV0sCisJZXhwZWN0ZWRfc3RkZXJyID0+CisJ ICBxci91c2VyLWRlZmluZWQgT0F1dGggZmxvdyBmYWlsZWQ6IGEgY3VzdG9tIGVycm9yIG1lc3Nh Z2UvKTsKKwogIyBjb25uZWN0X3RpbWVvdXQgc2hvdWxkIHdvcmsgaWYgdGhlIGZsb3cgZG9lc24n dCByZXNwb25kLgogJGNvbW1vbl9jb25uc3RyID0gIiRjb21tb25fY29ubnN0ciBjb25uZWN0X3Rp bWVvdXQ9MSI7CiB0ZXN0KApAQCAtMTY1LDQgKzE4NywxNCBAQCBmb3JlYWNoIG15ICRjIChAY2Fz ZXMpCiAJCWV4cGVjdGVkX3N0ZGVyciA9PiAkYy0+eydleHBlY3RlZF9lcnJvcid9KTsKIH0KIAor IyB2MiBhc3luYyBmbG93cyBzaG91bGQgYmUgYWJsZSB0byBzZXQgZXJyb3IgbWVzc2FnZXMsIHRv by4KK3Rlc3QoCisJImFzeW5jaHJvbm91cyBob29rIGNhbiBzZXQgZXJyb3IgbWVzc2FnZXMiLAor CWZsYWdzID0+IFsKKwkJIi0tbWlzYmVoYXZlIiA9PiAiZmFpbC1hc3luYyIsCisJCSItLWVycm9y IiA9PiAiYXN5bmMgZXJyb3IgbWVzc2FnZSIsCisJXSwKKwlleHBlY3RlZF9zdGRlcnIgPT4KKwkg IHFyL3VzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZDogYXN5bmMgZXJyb3IgbWVzc2FnZS8p OworCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzQuMQoK --0000000000004484d6064b99ba84 Content-Type: application/x-patch; name="v3-0004-libpq-oauth-Use-the-PGoauthBearerRequestV2-API.patch" Content-Disposition: attachment; filename="v3-0004-libpq-oauth-Use-the-PGoauthBearerRequestV2-API.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlvfhqxz3 RnJvbSA1OWE1ZThlMjdkNjcwNDdiYmEyYWZlYjE1MWM2NGEzNTc2MjRkOTQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVGh1LCAyMyBPY3QgMjAyNSAxMjoyNDoyMCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjMgNC82XSBsaWJwcS1vYXV0aDogVXNlIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVz dFYyIEFQSQoKU3dpdGNoIHRoZSBwcml2YXRlIGxpYnBxLW9hdXRoIEFCSSB0byB0aGUgcHVibGlj IFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIKQVBJLiBBIGh1Z2UgYW1vdW50IG9mIGdsdWUgY29kZSBj YW4gYmUgcmVtb3ZlZCBhcyBwYXJ0IG9mIHRoaXMsIGFuZCBzZXZlcmFsCmNvZGUgcGF0aHMgY2Fu IGJlIGRlZHVwbGljYXRlZC4gQWRkaXRpb25hbGx5LCB0aGUgc2hhcmVkIGxpYnJhcnkgbm8KbG9u Z2VyIG5lZWRzIHRvIGNoYW5nZSBpdHMgbmFtZSBmb3IgZXZlcnkgbWFqb3IgcmVsZWFzZTsgaXQn cyBub3cganVzdAoibGlicHEtb2F1dGguc28iLgoKUmV2aWV3ZWQtYnk6IENoYW8gTGkgPGxpLmV2 YW4uY2hhb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJy YWdpQHBlcmNvbmEuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaSUy Qm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBnUjh1el9EN21NOHolM0RkWDFKWVZiZyU0MG1haWwu Z21haWwuY29tCi0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvUkVBRE1FICAgICAgICB8 ICA2NyArKy0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQgICB8ICAg MyArLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQgICB8ICAgNCArLQog c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgICAgICB8ICAgOSArLQogc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oICB8ICAgNiArLQogc3JjL2ludGVyZmFj ZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuaCB8ICA0MyArLS0KIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtb2F1dGguaCAgICAgfCAgIDcgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL29hdXRoLWN1cmwuYyAgfCAzMzYgKysrKysrKysrKysrKystLS0tLS0tLS0KIHNyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmMgfCAgNzcgKy0tLS0tCiBzcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMgICAgIHwgMTk4ICsrKysrKystLS0tLS0KIDEwIGZp bGVzIGNoYW5nZWQsIDMzMyBpbnNlcnRpb25zKCspLCA0MTcgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvUkVBRE1FIGIvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvUkVBRE1FCmluZGV4IDU1Mzk2MmQ2NDRlLi5hMjdhODIzOGQ0YiAxMDA2NDQK LS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvUkVBRE1FCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxLW9hdXRoL1JFQURNRQpAQCAtMTAsNDggKzEwLDMzIEBAIHJlc3VsdHMgaW4gYSBm YWlsZWQgY29ubmVjdGlvbi4KIAogPSBMb2FkLVRpbWUgQUJJID0KIAotVGhpcyBtb2R1bGUgQUJJ IGlzIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCwgc28gaXQncyBzdWJqZWN0IHRv IGNoYW5nZQotYWNyb3NzIG1ham9yIHJlbGVhc2VzOyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIChs aWJwcS1vYXV0aC1NQUpPUikgcmVmbGVjdHMgdGhpcy4KLVRoZSBtb2R1bGUgZXhwb3J0cyB0aGUg Zm9sbG93aW5nIHN5bWJvbHM6Ci0KLS0gUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBwZ19mZV9y dW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pOwotLSB2b2lkIHBnX2ZlX2NsZWFudXBfb2F1dGhf ZmxvdyhQR2Nvbm4gKmNvbm4pOwotCi1wZ19mZV9ydW5fb2F1dGhfZmxvdyBhbmQgcGdfZmVfY2xl YW51cF9vYXV0aF9mbG93IGFyZSBpbXBsZW1lbnRhdGlvbnMgb2YKLWNvbm4tPmFzeW5jX2F1dGgg YW5kIGNvbm4tPmNsZWFudXBfYXN5bmNfYXV0aCwgcmVzcGVjdGl2ZWx5LgotCi1BdCB0aGUgbW9t ZW50LCBwZ19mZV9ydW5fb2F1dGhfZmxvdygpIHJlbGllcyBvbiBsaWJwcSdzIHBnX2dfdGhyZWFk bG9jayBhbmQKLWxpYnBxX2dldHRleHQoKSwgd2hpY2ggbXVzdCBiZSBpbmplY3RlZCBieSBsaWJw cSB1c2luZyB0aGlzIGluaXRpYWxpemF0aW9uCi1mdW5jdGlvbiBiZWZvcmUgdGhlIGZsb3cgaXMg cnVuOgotCi0tIHZvaWQgbGlicHFfb2F1dGhfaW5pdChwZ3RocmVhZGxvY2tfdCB0aHJlYWRsb2Nr LAotCQkJCQkJbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRleHRfaW1wbCwKLQkJCQkJCWNvbm5fZXJy b3JNZXNzYWdlX2Z1bmMgZXJybXNnX2ltcGwsCi0JCQkJCQljb25uX29hdXRoX2NsaWVudF9pZF9m dW5jIGNsaWVudGlkX2ltcGwsCi0JCQkJCQljb25uX29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBj bGllbnRzZWNyZXRfaW1wbCwKLQkJCQkJCWNvbm5fb2F1dGhfZGlzY292ZXJ5X3VyaV9mdW5jIGRp c2NvdmVyeXVyaV9pbXBsLAotCQkJCQkJY29ubl9vYXV0aF9pc3N1ZXJfaWRfZnVuYyBpc3N1ZXJp ZF9pbXBsLAotCQkJCQkJY29ubl9vYXV0aF9zY29wZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJCQlj b25uX3Nhc2xfc3RhdGVfZnVuYyBzYXNsc3RhdGVfaW1wbCwKLQkJCQkJCXNldF9jb25uX2FsdHNv Y2tfZnVuYyBzZXRhbHRzb2NrX2ltcGwsCi0JCQkJCQlzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5j IHNldHRva2VuX2ltcGwpOwotCi1JdCBhbHNvIHJlbGllcyBvbiBhY2Nlc3MgdG8gc2V2ZXJhbCBt ZW1iZXJzIG9mIHRoZSBQR2Nvbm4gc3RydWN0LiBOb3Qgb25seSBjYW4KLXRoZXNlIGNoYW5nZSBw b3NpdGlvbnMgYWNyb3NzIG1pbm9yIHZlcnNpb25zLCBidXQgdGhlIG9mZnNldHMgYXJlbid0IG5l Y2Vzc2FyaWx5Ci1zdGFibGUgd2l0aGluIGEgc2luZ2xlIG1pbm9yIHJlbGVhc2UgKGNvbm4tPmVy cm9yTWVzc2FnZSwgZm9yIGluc3RhbmNlLCBjYW4KLWNoYW5nZSBvZmZzZXRzIGRlcGVuZGluZyBv biBjb25maWd1cmUtdGltZSBvcHRpb25zKS4gVGhlcmVmb3JlIHRoZSBuZWNlc3NhcnkKLWFjY2Vz c29ycyAobmFtZWQgY29ubl8qKSBhbmQgbXV0YXRvcnMgKHNldF9jb25uXyopIGFyZSBpbmplY3Rl ZCBoZXJlLiBXaXRoIHRoaXMKLWFwcHJvYWNoLCB3ZSBjYW4gc2FmZWx5IHNlYXJjaCB0aGUgc3Rh bmRhcmQgZGxvcGVuKCkgcGF0aHMgKGUuZy4gUlBBVEgsCi1MRF9MSUJSQVJZX1BBVEgsIHRoZSBT TyBjYWNoZSkgZm9yIGFuIGltcGxlbWVudGF0aW9uIG1vZHVsZSB0byB1c2UsIGV2ZW4gaWYgdGhh dAotbW9kdWxlIHdhc24ndCBjb21waWxlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGxpYnBxIC0tIHdo aWNoIGJlY29tZXMgZXNwZWNpYWxseQotaW1wb3J0YW50IGR1cmluZyAibGl2ZSB1cGdyYWRlIiBz aXR1YXRpb25zIHdoZXJlIGEgcnVubmluZyBsaWJwcSBhcHBsaWNhdGlvbiBoYXMKLXRoZSBsaWJw cS1vYXV0aCBtb2R1bGUgdXBkYXRlZCBvdXQgZnJvbSB1bmRlciBpdCBiZWZvcmUgaXQncyBmaXJz dCBsb2FkZWQgZnJvbQotZGlzay4KK0FzIG9mIHYxOSwgdGhpcyBtb2R1bGUgQUJJIGlzIHB1Ymxp YyBhbmQgY2Fubm90IGNoYW5nZSBpbmNvbXBhdGlibHkgd2l0aG91dCBhbHNvCitjaGFuZ2luZyB0 aGUgZW50cnkgcG9pbnRzLiBCb3RoIGxpYnBxIGFuZCBsaWJwcS1vYXV0aCBtdXN0IGdyYWNlZnVs bHkgaGFuZGxlCitzaXR1YXRpb25zIHdoZXJlIHRoZSBvdGhlciBsaWJyYXJ5IGlzIG9mIGEgZGlm ZmVyZW50IHJlbGVhc2UgdmVyc2lvbiwgcGFzdCBvcgorZnV0dXJlLCBzaW5jZSB1cGdyYWRlcyB0 byB0aGUgbGlicmFyaWVzIG1heSBoYXBwZW4gaW4gZWl0aGVyIG9yZGVyLgorCisoRG9uJ3QgYXNz dW1lIHRoYXQgcGFja2FnZSB2ZXJzaW9uIGRlcGVuZGVuY2llcyBmcm9tIGxpYnBxLW9hdXRoIHRv IGxpYnBxIHdpbGwKK3NpbXBsaWZ5IHRoZSBzaXR1YXRpb24hIFNpbmNlIGxpYnBxIGRlbGF5LWxv YWRzIGxpYnBxLW9hdXRoLCB3ZSBzdGlsbCBoYXZlIHRvCitoYW5kbGUgY2FzZXMgd2hlcmUgYSBs b25nLXJ1bm5pbmcgY2xpZW50IGFwcGxpY2F0aW9uIGhhcyBhIGxpYnBxIHRoYXQncyBvbGRlcgor dGhhbiBhIG5ld2x5IHVwZ3JhZGVkIHBsdWdpbi4pCisKK1RoZSBtb2R1bGUgZXhwb3J0cyB0aGUg Zm9sbG93aW5nIHN5bWJvbDoKKworLSBpbnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpj b25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKKworVGhlIG1vZHVsZSB0aGVu IGJlaGF2ZXMgYXMgaWYgaXQgaGFkIHJlY2VpdmVkIGEgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU5fVjIKK3JlcXVlc3QgdmlhIHRoZSBQUWF1dGhEYXRhSG9vayBBUEksIGFuZCBpdCBlaXRo ZXIgZmlsbHMgaW4gYW4gZXhpc3RpbmcgdG9rZW4gb3IKK3BvcHVsYXRlcyB0aGUgbmVjZXNzYXJ5 IGNhbGxiYWNrcyBmb3IgYSB0b2tlbiB0byBiZSBvYnRhaW5lZCBhc3luY2hyb25vdXNseS4KKyhT ZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIFBHb2F1dGhCZWFyZXJSZXF1ZXN0LikgVGhlIGZ1bmN0 aW9uIHJldHVybnMgemVybyBvbgorc3VjY2VzcyBhbmQgbm9uemVybyBvbiBmYWlsdXJlLgorCitB ZGRpdGlvbmFsbHksIGxpYnBxLW9hdXRoIHJlbGllcyBvbiBsaWJwcSdzIGxpYnBxX2dldHRleHQo KSwgd2hpY2ggbXVzdCBiZQoraW5qZWN0ZWQgYnkgbGlicHEgdXNpbmcgdGhpcyBpbml0aWFsaXph dGlvbiBmdW5jdGlvbiBiZWZvcmUgdGhlIGZsb3cgaXMgcnVuOgorCistIHZvaWQgbGlicHFfb2F1 dGhfaW5pdChsaWJwcV9nZXR0ZXh0X2Z1bmMgZ2V0dGV4dF9pbXBsKTsKIAogPSBTdGF0aWMgQnVp bGQgPQogCiBUaGUgc3RhdGljIGxpYnJhcnkgbGlicHEuYSBkb2VzIG5vdCBwZXJmb3JtIGFueSBk eW5hbWljIGxvYWRpbmcuIElmIHRoZSBidWlsdGluCi1mbG93IGlzIGVuYWJsZWQsIHRoZSBhcHBs aWNhdGlvbiBpcyBleHBlY3RlZCB0byBsaW5rIGFnYWluc3QgbGlicHEtb2F1dGguYQotZGlyZWN0 bHkgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuIChsaWJwcS5hIGFuZCBsaWJwcS1v YXV0aC5hIG11c3QgYmUKLXBhcnQgb2YgdGhlIHNhbWUgYnVpbGQuIFVubGlrZSB0aGUgZHluYW1p YyBtb2R1bGUsIHRoZXJlIGFyZSBubyB0cmFuc2xhdGlvbgotc2hpbXMgcHJvdmlkZWQuKQorZmxv dyBpcyBlbmFibGVkLCB0aGUgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gbGluayBhZ2FpbnN0 IGxpYnBxLW9hdXRoLmEgdG8KK3Byb3ZpZGUgdGhlIG5lY2Vzc2FyeSBzeW1ib2wsIG9yIGVsc2Ug aW1wbGVtZW50IHBnX3N0YXJ0X29hdXRoYmVhcmVyKCkgaXRzZWxmLgpkaWZmIC0tZ2l0IGEvc3Jj L2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9leHBvcnRzLnR4dAppbmRleCA2ODkxYTgzZGJmOS4uN2JjMTJiODYwZDcgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0CisrKyBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0CkBAIC0xLDQgKzEsMyBAQAogIyBzcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC9leHBvcnRzLnR4dAogbGlicHFfb2F1dGhfaW5pdCAgICAg ICAgICAxCi1wZ19mZV9ydW5fb2F1dGhfZmxvdyAgICAgIDIKLXBnX2ZlX2NsZWFudXBfb2F1dGhf ZmxvdyAgMworcGdfc3RhcnRfb2F1dGhiZWFyZXIgICAgICAyCmRpZmYgLS1naXQgYS9zcmMvaW50 ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL21lc29uLmJ1aWxkCmluZGV4IGQ4YTBjMDQwOTVhLi41OWJjZTQ5MDNlNSAxMDA2NDQKLS0t IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKQEAgLTM1LDkgKzM1LDcgQEAgbGlicHFfb2F1 dGhfc3QgPSBzdGF0aWNfbGlicmFyeSgnbGlicHEtb2F1dGgnLAogCiAjIFRoaXMgaXMgYW4gaW50 ZXJuYWwgbW9kdWxlOyB3ZSBkb24ndCB3YW50IGFuIFNPTkFNRSBhbmQgdGhlcmVmb3JlIGRvIG5v dCBzZXQKICMgU09fTUFKT1JfVkVSU0lPTi4KLWxpYnBxX29hdXRoX25hbWUgPSAnbGlicHEtb2F1 dGgtQDBAJy5mb3JtYXQocGdfdmVyc2lvbl9tYWpvcikKLQotbGlicHFfb2F1dGhfc28gPSBzaGFy ZWRfbW9kdWxlKGxpYnBxX29hdXRoX25hbWUsCitsaWJwcV9vYXV0aF9zbyA9IHNoYXJlZF9tb2R1 bGUoJ2xpYnBxLW9hdXRoJywKICAgbGlicHFfb2F1dGhfc291cmNlcyArIGxpYnBxX29hdXRoX3Nv X3NvdXJjZXMsCiAgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IFtsaWJwcV9vYXV0aF9pbmMsIHBvc3Rn cmVzX2luY10sCiAgIGNfYXJnczogbGlicHFfb2F1dGhfc29fY19hcmdzLApkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9NYWtlZmlsZQppbmRleCBhNWYyZDY1ZmNhZC4uZTkwNDgyNTY2YjEgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCkBAIC0xNiwxMyArMTYsMTAgQEAgaW5jbHVkZSAkKHRv cF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogUEdGSUxFREVTQyA9ICJsaWJwcS1vYXV0 aCAtIGRldmljZSBhdXRob3JpemF0aW9uIE9BdXRoIHN1cHBvcnQiCiAKICMgVGhpcyBpcyBhbiBp bnRlcm5hbCBtb2R1bGU7IHdlIGRvbid0IHdhbnQgYW4gU09OQU1FIGFuZCB0aGVyZWZvcmUgZG8g bm90IHNldAotIyBTT19NQUpPUl9WRVJTSU9OLgotTkFNRSA9IHBxLW9hdXRoLSQoTUFKT1JWRVJT SU9OKQotCi0jIEZvcmNlIHRoZSBuYW1lICJsaWJwcS1vYXV0aCIgZm9yIGJvdGggdGhlIHN0YXRp YyBhbmQgc2hhcmVkIGxpYnJhcmllcy4gVGhlCi0jIHN0YXRpY2xpYiBkb2Vzbid0IG5lZWQgdmVy c2lvbiBpbmZvcm1hdGlvbiBpbiBpdHMgbmFtZS4KKyMgU09fTUFKT1JfVkVSU0lPTi4gVGhpcyBy ZXF1aXJlcyBhbiBleHBsaWNpdCBvdmVycmlkZSBmb3IgdGhlIHNoYXJlZCBsaWJyYXJ5CisjIG5h bWUuCitOQU1FID0gcHEtb2F1dGgKIG92ZXJyaWRlIHNobGliIDo9IGxpYiQoTkFNRSkkKERMU1VG RklYKQotb3ZlcnJpZGUgc3RsaWIgOj0gbGlicHEtb2F1dGguYQogCiBvdmVycmlkZSBDUFBGTEFH UyA6PSAtSSQobGlicHFfc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKS9zcmMvcG9ydCAkKENQUEZM QUdTKSAkKExJQkNVUkxfQ1BQRkxBR1MpCiBvdmVycmlkZSBDRkxBR1MgKz0gJChQVEhSRUFEX0NG TEFHUykKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwu aCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuaAppbmRleCA2ODZlN2I0 ZGYzZi4uMWQ0ZGQ3NjYyMTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRo L29hdXRoLWN1cmwuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJs LmgKQEAgLTE3LDggKzE3LDggQEAKIAogI2luY2x1ZGUgImxpYnBxLWZlLmgiCiAKLS8qIEV4cG9y dGVkIGFzeW5jLWF1dGggY2FsbGJhY2tzLiAqLwotZXh0ZXJuIFBHRExMRVhQT1JUIFBvc3RncmVz UG9sbGluZ1N0YXR1c1R5cGUgcGdfZmVfcnVuX29hdXRoX2Zsb3coUEdjb25uICpjb25uKTsKLWV4 dGVybiBQR0RMTEVYUE9SVCB2b2lkIHBnX2ZlX2NsZWFudXBfb2F1dGhfZmxvdyhQR2Nvbm4gKmNv bm4pOworLyogRXhwb3J0ZWQgZmxvdyBjYWxsYmFjay4gKi8KK2V4dGVybiBQR0RMTEVYUE9SVCBp bnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLAorCQkJCQkJCQkJCQlQR29hdXRo QmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKIAogI2VuZGlmCQkJCQkJCS8qIE9BVVRIX0NVUkxf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMu aCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmgKaW5kZXggOWY0ZDVi NjkyZDIuLjI5M2U5OTM2OTg5IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0 aC9vYXV0aC11dGlscy5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0 aWxzLmgKQEAgLTE1LDUzICsxNSwxMyBAQAogI2lmbmRlZiBPQVVUSF9VVElMU19ICiAjZGVmaW5l IE9BVVRIX1VUSUxTX0gKIAotI2luY2x1ZGUgImZlLWF1dGgtb2F1dGguaCIKICNpbmNsdWRlICJs aWJwcS1mZS5oIgogI2luY2x1ZGUgInBxZXhwYnVmZmVyLmgiCiAKLS8qCi0gKiBBIGJhbmsgb2Yg Y2FsbGJhY2tzIHRvIHNhZmVseSBhY2Nlc3MgbWVtYmVycyBvZiBQR2Nvbm4sIHdoaWNoIGFyZSBh bGwgcGFzc2VkCi0gKiB0byBsaWJwcV9vYXV0aF9pbml0KCkgYnkgbGlicHEuCi0gKgotICogS2Vl cCB0aGVzZSBhbGlnbmVkIHdpdGggdGhlIGRlZmluaXRpb25zIGluIGZlLWF1dGgtb2F1dGguYyBh cyB3ZWxsIGFzIHRoZQotICogc3RhdGljIGRlY2xhcmF0aW9ucyBpbiBvYXV0aC1jdXJsLmMuCi0g Ki8KLSNkZWZpbmUgREVDTEFSRV9HRVRURVIoVFlQRSwgTUVNQkVSKSBcCi0JdHlwZWRlZiBUWVBF ICgqY29ubl8gIyMgTUVNQkVSICMjIF9mdW5jKSAoUEdjb25uICpjb25uKTsgXAotCWV4dGVybiBj b25uXyAjIyBNRU1CRVIgIyMgX2Z1bmMgY29ubl8gIyMgTUVNQkVSOwotCi0jZGVmaW5lIERFQ0xB UkVfU0VUVEVSKFRZUEUsIE1FTUJFUikgXAotCXR5cGVkZWYgdm9pZCAoKnNldF9jb25uXyAjIyBN RU1CRVIgIyMgX2Z1bmMpIChQR2Nvbm4gKmNvbm4sIFRZUEUgdmFsKTsgXAotCWV4dGVybiBzZXRf Y29ubl8gIyMgTUVNQkVSICMjIF9mdW5jIHNldF9jb25uXyAjIyBNRU1CRVI7Ci0KLURFQ0xBUkVf R0VUVEVSKFBRRXhwQnVmZmVyLCBlcnJvck1lc3NhZ2UpOwotREVDTEFSRV9HRVRURVIoY2hhciAq LCBvYXV0aF9jbGllbnRfaWQpOwotREVDTEFSRV9HRVRURVIoY2hhciAqLCBvYXV0aF9jbGllbnRf c2VjcmV0KTsKLURFQ0xBUkVfR0VUVEVSKGNoYXIgKiwgb2F1dGhfZGlzY292ZXJ5X3VyaSk7Ci1E RUNMQVJFX0dFVFRFUihjaGFyICosIG9hdXRoX2lzc3Vlcl9pZCk7Ci1ERUNMQVJFX0dFVFRFUihj aGFyICosIG9hdXRoX3Njb3BlKTsKLURFQ0xBUkVfR0VUVEVSKGZlX29hdXRoX3N0YXRlICosIHNh c2xfc3RhdGUpOwotCi1ERUNMQVJFX1NFVFRFUihwZ3NvY2tldCwgYWx0c29jayk7Ci1ERUNMQVJF X1NFVFRFUihjaGFyICosIG9hdXRoX3Rva2VuKTsKLQotI3VuZGVmIERFQ0xBUkVfR0VUVEVSCi0j dW5kZWYgREVDTEFSRV9TRVRURVIKLQogdHlwZWRlZiBjaGFyICooKmxpYnBxX2dldHRleHRfZnVu YykgKGNvbnN0IGNoYXIgKm1zZ2lkKTsKIAogLyogSW5pdGlhbGl6ZXMgbGlicHEtb2F1dGguICov Ci1leHRlcm4gUEdETExFWFBPUlQgdm9pZCBsaWJwcV9vYXV0aF9pbml0KHBndGhyZWFkbG9ja190 IHRocmVhZGxvY2ssCi0JCQkJCQkJCQkJIGxpYnBxX2dldHRleHRfZnVuYyBnZXR0ZXh0X2ltcGws Ci0JCQkJCQkJCQkJIGNvbm5fZXJyb3JNZXNzYWdlX2Z1bmMgZXJybXNnX2ltcGwsCi0JCQkJCQkJ CQkJIGNvbm5fb2F1dGhfY2xpZW50X2lkX2Z1bmMgY2xpZW50aWRfaW1wbCwKLQkJCQkJCQkJCQkg Y29ubl9vYXV0aF9jbGllbnRfc2VjcmV0X2Z1bmMgY2xpZW50c2VjcmV0X2ltcGwsCi0JCQkJCQkJ CQkJIGNvbm5fb2F1dGhfZGlzY292ZXJ5X3VyaV9mdW5jIGRpc2NvdmVyeXVyaV9pbXBsLAotCQkJ CQkJCQkJCSBjb25uX29hdXRoX2lzc3Vlcl9pZF9mdW5jIGlzc3VlcmlkX2ltcGwsCi0JCQkJCQkJ CQkJIGNvbm5fb2F1dGhfc2NvcGVfZnVuYyBzY29wZV9pbXBsLAotCQkJCQkJCQkJCSBjb25uX3Nh c2xfc3RhdGVfZnVuYyBzYXNsc3RhdGVfaW1wbCwKLQkJCQkJCQkJCQkgc2V0X2Nvbm5fYWx0c29j a19mdW5jIHNldGFsdHNvY2tfaW1wbCwKLQkJCQkJCQkJCQkgc2V0X2Nvbm5fb2F1dGhfdG9rZW5f ZnVuYyBzZXR0b2tlbl9pbXBsKTsKK2V4dGVybiBQR0RMTEVYUE9SVCB2b2lkIGxpYnBxX29hdXRo X2luaXQobGlicHFfZ2V0dGV4dF9mdW5jIGdldHRleHRfaW1wbCk7CiAKIC8qCiAgKiBEdXBsaWNh dGVkIEFQSXMsIGNvcGllZCBmcm9tIGxpYnBxIChwcmltYXJpbHkgbGlicHEtaW50LmgsIHdoaWNo IHdlIGNhbm5vdApAQCAtNzUsNyArMzUsNiBAQCB0eXBlZGVmIGVudW0KIAlQR19CT09MX05PCQkJ CQkvKiBObyAoZmFsc2UpICovCiB9IFBHVGVybmFyeUJvb2w7CiAKLWV4dGVybiB2b2lkIGxpYnBx X2FwcGVuZF9jb25uX2Vycm9yKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZm10LC4uLikgcGdf YXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIGV4dGVybiBib29sIG9hdXRoX3Vuc2FmZV9kZWJ1Z2dp bmdfZW5hYmxlZCh2b2lkKTsKIGV4dGVybiBpbnQJcHFfYmxvY2tfc2lncGlwZShzaWdzZXRfdCAq b3NpZ3NldCwgYm9vbCAqc2lncGlwZV9wZW5kaW5nKTsKIGV4dGVybiB2b2lkIHBxX3Jlc2V0X3Np Z3BpcGUoc2lnc2V0X3QgKm9zaWdzZXQsIGJvb2wgc2lncGlwZV9wZW5kaW5nLCBib29sIGdvdF9l cGlwZSk7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmgg Yi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmgKaW5kZXggNWM4YTI0Yjc2ZmEu LjUxMTI4NDYxNGY3IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9h dXRoLmgKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5oCkBAIC0yNywx MSArMjcsNiBAQCBlbnVtIGZlX29hdXRoX3N0ZXAKIAlGRV9PQVVUSF9TRVJWRVJfRVJST1IsCiB9 OwogCi0vKgotICogVGhpcyBzdHJ1Y3QgaXMgZXhwb3J0ZWQgdG8gdGhlIGxpYnBxLW9hdXRoIG1v ZHVsZS4gSWYgY2hhbmdlcyBhcmUgbmVlZGVkCi0gKiBkdXJpbmcgYmFja3BvcnRzIHRvIHN0YWJs ZSBicmFuY2hlcywgcGxlYXNlIGtlZXAgQUJJIGNvbXBhdGliaWxpdHkgKG5vCi0gKiBjaGFuZ2Vz IHRvIGV4aXN0aW5nIG1lbWJlcnMsIGFkZCBuZXcgbWVtYmVycyBhdCB0aGUgZW5kLCBldGMuKS4K LSAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKIAllbnVtIGZlX29hdXRoX3N0ZXAgc3RlcDsKQEAgLTM5 LDEyICszNCwxMiBAQCB0eXBlZGVmIHN0cnVjdAogCVBHY29ubgkgICAqY29ubjsKIAl2b2lkCSAg ICphc3luY19jdHg7CiAKKwlib29sCQlidWlsdGluOwogCXZvaWQJICAgKmJ1aWx0aW5fZmxvdzsK IH0gZmVfb2F1dGhfc3RhdGU7CiAKIGV4dGVybiB2b2lkIHBxQ2xlYXJPQXV0aFRva2VuKFBHY29u biAqY29ubik7CiBleHRlcm4gYm9vbCBvYXV0aF91bnNhZmVfZGVidWdnaW5nX2VuYWJsZWQodm9p ZCk7Ci1leHRlcm4gYm9vbCB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhf c3RhdGUgKnN0YXRlKTsKIAogLyogTWVjaGFuaXNtcyBpbiBmZS1hdXRoLW9hdXRoLmMgKi8KIGV4 dGVybiBjb25zdCBwZ19mZV9zYXNsX21lY2ggcGdfb2F1dGhfbWVjaDsKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL29hdXRoLWN1cmwuYwppbmRleCAxOTAyNGY2YWFhNy4uY2ViZTBhMjRhZDAgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYworKysgYi9z cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKQEAgLTI5LDcgKzI5LDYgQEAK ICNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2pzb25hcGkuaCIKLSNpbmNsdWRlICJmZS1hdXRo LW9hdXRoLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJvYXV0aC1jdXJs LmgiCiAKQEAgLTQ0LDIzICs0MywxMCBAQAogCiAjZWxzZQkJCQkJCQkvKiAhVVNFX0RZTkFNSUNf T0FVVEggKi8KIAotLyoKLSAqIFN0YXRpYyBidWlsZHMgbWF5IHJlbHkgb24gUEdjb25uIG9mZnNl dHMgZGlyZWN0bHkuIEtlZXAgdGhlc2UgYWxpZ25lZCB3aXRoCi0gKiB0aGUgYmFuayBvZiBjYWxs YmFja3MgaW4gb2F1dGgtdXRpbHMuaC4KLSAqLworLyogU3RhdGljIGJ1aWxkcyBtYXkgbWFrZSB1 c2Ugb2YgbGlicHEgaW50ZXJuYWxzIGRpcmVjdGx5LiAqLworI2luY2x1ZGUgImZlLWF1dGgtb2F1 dGguaCIKICNpbmNsdWRlICJsaWJwcS1pbnQuaCIKIAotI2RlZmluZSBjb25uX2Vycm9yTWVzc2Fn ZShDT05OKSAoJkNPTk4tPmVycm9yTWVzc2FnZSkKLSNkZWZpbmUgY29ubl9vYXV0aF9jbGllbnRf aWQoQ09OTikgKENPTk4tPm9hdXRoX2NsaWVudF9pZCkKLSNkZWZpbmUgY29ubl9vYXV0aF9jbGll bnRfc2VjcmV0KENPTk4pIChDT05OLT5vYXV0aF9jbGllbnRfc2VjcmV0KQotI2RlZmluZSBjb25u X29hdXRoX2Rpc2NvdmVyeV91cmkoQ09OTikgKENPTk4tPm9hdXRoX2Rpc2NvdmVyeV91cmkpCi0j ZGVmaW5lIGNvbm5fb2F1dGhfaXNzdWVyX2lkKENPTk4pIChDT05OLT5vYXV0aF9pc3N1ZXJfaWQp Ci0jZGVmaW5lIGNvbm5fb2F1dGhfc2NvcGUoQ09OTikgKENPTk4tPm9hdXRoX3Njb3BlKQotI2Rl ZmluZSBjb25uX3Nhc2xfc3RhdGUoQ09OTikgKENPTk4tPnNhc2xfc3RhdGUpCi0KLSNkZWZpbmUg c2V0X2Nvbm5fYWx0c29jayhDT05OLCBWQUwpIGRvIHsgQ09OTi0+YWx0c29jayA9IFZBTDsgfSB3 aGlsZSAoMCkKLSNkZWZpbmUgc2V0X2Nvbm5fb2F1dGhfdG9rZW4oQ09OTiwgVkFMKSBkbyB7IENP Tk4tPm9hdXRoX3Rva2VuID0gVkFMOyB9IHdoaWxlICgwKQotCiAjZW5kaWYJCQkJCQkJLyogVVNF X0RZTkFNSUNfT0FVVEggKi8KIAogLyogT25lIGZpbmFsIGd1YXJkcmFpbCBhZ2FpbnN0IGFjY2lk ZW50YWwgaW5jbHVzaW9uLi4uICovCkBAIC0yMjcsNiArMjEzLDE1IEBAIGVudW0gT0F1dGhTdGVw CiAgKi8KIHN0cnVjdCBhc3luY19jdHgKIHsKKwkvKiByZWxldmFudCBjb25uZWN0aW9uIG9wdGlv bnMgY2FjaGVkIGZyb20gdGhlIFBHY29ubiAqLworCWNoYXIJICAgKmNsaWVudF9pZDsJCS8qIG9h dXRoX2NsaWVudF9pZCAqLworCWNoYXIJICAgKmNsaWVudF9zZWNyZXQ7CS8qIG9hdXRoX2NsaWVu dF9zZWNyZXQgKG1heSBiZSBOVUxMKSAqLworCisJLyogb3B0aW9ucyBjYWNoZWQgZnJvbSB0aGUg UEdvYXV0aEJlYXJlclJlcXVlc3QgKHdlIGRvbid0IG93biB0aGVzZSkgKi8KKwljb25zdCBjaGFy ICpkaXNjb3ZlcnlfdXJpOworCWNvbnN0IGNoYXIgKmlzc3Vlcl9pZDsKKwljb25zdCBjaGFyICpz Y29wZTsKKwogCWVudW0gT0F1dGhTdGVwIHN0ZXA7CQkvKiB3aGVyZSBhcmUgd2UgaW4gdGhlIGZs b3c/ICovCiAKIAlpbnQJCQl0aW1lcmZkOwkJLyogZGVzY3JpcHRvciBmb3Igc2lnbmFsaW5nIGFz eW5jIHRpbWVvdXRzICovCkBAIC0yODYsNyArMjgxLDcgQEAgc3RydWN0IGFzeW5jX2N0eAogICog VGVhcnMgZG93biB0aGUgQ3VybCBoYW5kbGVzIGFuZCBmcmVlcyB0aGUgYXN5bmNfY3R4LgogICov CiBzdGF0aWMgdm9pZAotZnJlZV9hc3luY19jdHgoUEdjb25uICpjb25uLCBzdHJ1Y3QgYXN5bmNf Y3R4ICphY3R4KQorZnJlZV9hc3luY19jdHgoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxLCBz dHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQogewogCS8qCiAJICogSW4gZ2VuZXJhbCwgbm9uZSBvZiB0 aGUgZXJyb3IgY2FzZXMgYmVsb3cgc2hvdWxkIGV2ZXIgaGFwcGVuIGlmIHdlIGhhdmUKQEAgLTMz OSwyOSArMzM0LDcyIEBAIGZyZWVfYXN5bmNfY3R4KFBHY29ubiAqY29ubiwgc3RydWN0IGFzeW5j X2N0eCAqYWN0eCkKIAlpZiAoYWN0eC0+dGltZXJmZCA+PSAwKQogCQljbG9zZShhY3R4LT50aW1l cmZkKTsKIAorCWZyZWUoYWN0eC0+Y2xpZW50X2lkKTsKKwlmcmVlKGFjdHgtPmNsaWVudF9zZWNy ZXQpOworCiAJZnJlZShhY3R4KTsKIH0KIAogLyoKLSAqIFJlbGVhc2UgcmVzb3VyY2VzIHVzZWQg Zm9yIHRoZSBhc3luY2hyb25vdXMgZXhjaGFuZ2UgYW5kIGRpc2Nvbm5lY3QgdGhlCi0gKiBhbHRz b2NrLgotICoKLSAqIFRoaXMgaXMgY2FsbGVkIGVpdGhlciBhdCB0aGUgZW5kIG9mIGEgc3VjY2Vz c2Z1bCBhdXRoZW50aWNhdGlvbiwgb3IgZHVyaW5nCi0gKiBwcURyb3BDb25uZWN0aW9uKCksIHNv IHdlIHdvbid0IGxlYWsgcmVzb3VyY2VzIGV2ZW4gaWYgUFFjb25uZWN0UG9sbCgpIG5ldmVyCi0g KiBjYWxscyB1cyBiYWNrLgorICogUmVsZWFzZSByZXNvdXJjZXMgdXNlZCBmb3IgdGhlIGFzeW5j aHJvbm91cyBleGNoYW5nZS4KICAqLwotdm9pZAotcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KFBH Y29ubiAqY29ubikKK3N0YXRpYyB2b2lkCitwZ19mZV9jbGVhbnVwX29hdXRoX2Zsb3coUEdjb25u ICpjb25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxdWVzdCkKIHsKLQlmZV9vYXV0aF9zdGF0 ZSAqc3RhdGUgPSBjb25uX3Nhc2xfc3RhdGUoY29ubik7CisJc3RydWN0IGFzeW5jX2N0eCAqYWN0 eCA9IHJlcXVlc3QtPnVzZXI7CisKKwkvKiByZXF1ZXN0LT5jbGVhbnVwIGlzIG9ubHkgc2V0IGFm dGVyIGFjdHggaGFzIGJlZW4gYWxsb2NhdGVkLiAqLworCUFzc2VydChhY3R4KTsKKworCWZyZWVf YXN5bmNfY3R4KChQR29hdXRoQmVhcmVyUmVxdWVzdFYyICopIHJlcXVlc3QsIGFjdHgpOworCXJl cXVlc3QtPnVzZXIgPSBOVUxMOworCisJLyogbGlicHEgaGFzIG1hZGUgaXRzIG93biBjb3B5IG9m IHRoZSB0b2tlbjsgY2xlYXIgb3VycyBub3cuICovCisJaWYgKHJlcXVlc3QtPnRva2VuKQorCXsK KwkJZXhwbGljaXRfYnplcm8ocmVxdWVzdC0+dG9rZW4sIHN0cmxlbihyZXF1ZXN0LT50b2tlbikp OworCQlmcmVlKHJlcXVlc3QtPnRva2VuKTsKKwkJcmVxdWVzdC0+dG9rZW4gPSBOVUxMOworCX0K K30KKworLyoKKyAqIEJ1aWxkcyBhbiBlcnJvciBtZXNzYWdlIGZyb20gYWN0eCBhbmQgc3RvcmVz IGl0IGluIHJlcS0+ZXJyb3IuIFRoZSBhbGxvY2F0aW9uCisgKiBpcyBiYWNrZWQgYnkgYWN0eC0+ d29ya19kYXRhICh3aGljaCB3aWxsIGJlIHJlc2V0IGZpcnN0KS4KKyAqLworc3RhdGljIHZvaWQK K2FwcGVuZF9hY3R4X2Vycm9yKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcSwgc3RydWN0IGFz eW5jX2N0eCAqYWN0eCkKK3sKKwlQUUV4cEJ1ZmZlciBlcnJidWYgPSAmYWN0eC0+d29ya19kYXRh OworCisJcmVzZXRQUUV4cEJ1ZmZlcihlcnJidWYpOworCisJLyoKKwkgKiBBc3NlbWJsZSB0aGUg dGhyZWUgcGFydHMgb2Ygb3VyIGVycm9yOiBjb250ZXh0LCBib2R5LCBhbmQgZGV0YWlsLiBTZWUK KwkgKiBhbHNvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBzdHJ1Y3QgYXN5bmNfY3R4LgorCSAqLwor CWlmIChhY3R4LT5lcnJjdHgpCisJCWFwcGVuZFBRRXhwQnVmZmVyKGVycmJ1ZiwgIiVzOiAiLCBh Y3R4LT5lcnJjdHgpOworCisJaWYgKFBRRXhwQnVmZmVyRGF0YUJyb2tlbihhY3R4LT5lcnJidWYp KQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihlcnJidWYsIGxpYnBxX2dldHRleHQoIm91dCBvZiBt ZW1vcnkiKSk7CisJZWxzZQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihlcnJidWYsIGFjdHgtPmVy cmJ1Zi5kYXRhKTsKIAotCWlmIChzdGF0ZS0+YXN5bmNfY3R4KQorCWlmIChhY3R4LT5jdXJsX2Vy clswXSkKIAl7Ci0JCWZyZWVfYXN5bmNfY3R4KGNvbm4sIHN0YXRlLT5hc3luY19jdHgpOwotCQlz dGF0ZS0+YXN5bmNfY3R4ID0gTlVMTDsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoZXJyYnVmLCAiIChs aWJjdXJsOiAlcykiLCBhY3R4LT5jdXJsX2Vycik7CisKKwkJLyogU29tZXRpbWVzIGxpYmN1cmwg YWRkcyBhIG5ld2xpbmUgdG8gdGhlIGVycm9yIGJ1ZmZlci4gOiggKi8KKwkJaWYgKGVycmJ1Zi0+ bGVuID49IDIgJiYgZXJyYnVmLT5kYXRhW2VycmJ1Zi0+bGVuIC0gMl0gPT0gJ1xuJykKKwkJewor CQkJZXJyYnVmLT5kYXRhW2VycmJ1Zi0+bGVuIC0gMl0gPSAnKSc7CisJCQllcnJidWYtPmRhdGFb ZXJyYnVmLT5sZW4gLSAxXSA9ICdcMCc7CisJCQllcnJidWYtPmxlbi0tOworCQl9CiAJfQogCi0J c2V0X2Nvbm5fYWx0c29jayhjb25uLCBQR0lOVkFMSURfU09DS0VUKTsKKwlyZXEtPmVycm9yID0g ZXJyYnVmLT5kYXRhOwogfQogCiAvKgpAQCAtMjE5Nyw3ICsyMjM1LDcgQEAgc3RhdGljIGJvb2wK IGNoZWNrX2lzc3VlcihzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4LCBQR2Nvbm4gKmNvbm4pCiB7CiAJ Y29uc3Qgc3RydWN0IHByb3ZpZGVyICpwcm92aWRlciA9ICZhY3R4LT5wcm92aWRlcjsKLQljb25z dCBjaGFyICpvYXV0aF9pc3N1ZXJfaWQgPSBjb25uX29hdXRoX2lzc3Vlcl9pZChjb25uKTsKKwlj b25zdCBjaGFyICpvYXV0aF9pc3N1ZXJfaWQgPSBhY3R4LT5pc3N1ZXJfaWQ7CiAKIAlBc3NlcnQo b2F1dGhfaXNzdWVyX2lkKTsJLyogZW5zdXJlZCBieSBzZXR1cF9vYXV0aF9wYXJhbWV0ZXJzKCkg Ki8KIAlBc3NlcnQocHJvdmlkZXItPmlzc3Vlcik7CS8qIGVuc3VyZWQgYnkgcGFyc2VfcHJvdmlk ZXIoKSAqLwpAQCAtMjMwMCw4ICsyMzM4LDggQEAgY2hlY2tfZm9yX2RldmljZV9mbG93KHN0cnVj dCBhc3luY19jdHggKmFjdHgpCiBzdGF0aWMgYm9vbAogYWRkX2NsaWVudF9pZGVudGlmaWNhdGlv bihzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4LCBQUUV4cEJ1ZmZlciByZXFib2R5LCBQR2Nvbm4gKmNv bm4pCiB7Ci0JY29uc3QgY2hhciAqb2F1dGhfY2xpZW50X2lkID0gY29ubl9vYXV0aF9jbGllbnRf aWQoY29ubik7Ci0JY29uc3QgY2hhciAqb2F1dGhfY2xpZW50X3NlY3JldCA9IGNvbm5fb2F1dGhf Y2xpZW50X3NlY3JldChjb25uKTsKKwljb25zdCBjaGFyICpvYXV0aF9jbGllbnRfaWQgPSBhY3R4 LT5jbGllbnRfaWQ7CisJY29uc3QgY2hhciAqb2F1dGhfY2xpZW50X3NlY3JldCA9IGFjdHgtPmNs aWVudF9zZWNyZXQ7CiAKIAlib29sCQlzdWNjZXNzID0gZmFsc2U7CiAJY2hhcgkgICAqdXNlcm5h bWUgPSBOVUxMOwpAQCAtMjM4NCwxMSArMjQyMiwxMCBAQCBjbGVhbnVwOgogc3RhdGljIGJvb2wK IHN0YXJ0X2RldmljZV9hdXRoeihzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4LCBQR2Nvbm4gKmNvbm4p CiB7Ci0JY29uc3QgY2hhciAqb2F1dGhfc2NvcGUgPSBjb25uX29hdXRoX3Njb3BlKGNvbm4pOwor CWNvbnN0IGNoYXIgKm9hdXRoX3Njb3BlID0gYWN0eC0+c2NvcGU7CiAJY29uc3QgY2hhciAqZGV2 aWNlX2F1dGh6X3VyaSA9IGFjdHgtPnByb3ZpZGVyLmRldmljZV9hdXRob3JpemF0aW9uX2VuZHBv aW50OwogCVBRRXhwQnVmZmVyIHdvcmtfYnVmZmVyID0gJmFjdHgtPndvcmtfZGF0YTsKIAotCUFz c2VydChjb25uX29hdXRoX2NsaWVudF9pZChjb25uKSk7IC8qIGVuc3VyZWQgYnkgc2V0dXBfb2F1 dGhfcGFyYW1ldGVycygpICovCiAJQXNzZXJ0KGRldmljZV9hdXRoel91cmkpOwkvKiBlbnN1cmVk IGJ5IGNoZWNrX2Zvcl9kZXZpY2VfZmxvdygpICovCiAKIAkvKiBDb25zdHJ1Y3Qgb3VyIHJlcXVl c3QgYm9keS4gKi8KQEAgLTI0NzYsNyArMjUxMyw2IEBAIHN0YXJ0X3Rva2VuX3JlcXVlc3Qoc3Ry dWN0IGFzeW5jX2N0eCAqYWN0eCwgUEdjb25uICpjb25uKQogCWNvbnN0IGNoYXIgKmRldmljZV9j b2RlID0gYWN0eC0+YXV0aHouZGV2aWNlX2NvZGU7CiAJUFFFeHBCdWZmZXIgd29ya19idWZmZXIg PSAmYWN0eC0+d29ya19kYXRhOwogCi0JQXNzZXJ0KGNvbm5fb2F1dGhfY2xpZW50X2lkKGNvbm4p KTsgLyogZW5zdXJlZCBieSBzZXR1cF9vYXV0aF9wYXJhbWV0ZXJzKCkgKi8KIAlBc3NlcnQodG9r ZW5fdXJpKTsJCQkvKiBlbnN1cmVkIGJ5IHBhcnNlX3Byb3ZpZGVyKCkgKi8KIAlBc3NlcnQoZGV2 aWNlX2NvZGUpOwkJLyogZW5zdXJlZCBieSBwYXJzZV9kZXZpY2VfYXV0aHooKSAqLwogCkBAIC0y NjU1LDcgKzI2OTEsNyBAQCBwcm9tcHRfdXNlcihzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4LCBQR2Nv bm4gKmNvbm4pCiAgKiBmdW5jdGlvbiB3aWxsIG5vdCB0cnkgdG8gcmVpbml0aWFsaXplIEN1cmwg b24gc3VjY2Vzc2l2ZSBjYWxscy4KICAqLwogc3RhdGljIGJvb2wKLWluaXRpYWxpemVfY3VybChQ R2Nvbm4gKmNvbm4pCitpbml0aWFsaXplX2N1cmwoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVx KQogewogCS8qCiAJICogRG9uJ3QgbGV0IHRoZSBjb21waWxlciBwbGF5IHRyaWNrcyB3aXRoIHRo aXMgdmFyaWFibGUuIEluIHRoZQpAQCAtMjY4OSw4ICsyNzI1LDcgQEAgaW5pdGlhbGl6ZV9jdXJs KFBHY29ubiAqY29ubikKIAkJZ290byBkb25lOwogCWVsc2UgaWYgKGluaXRfc3VjY2Vzc2Z1bCA9 PSBQR19CT09MX05PKQogCXsKLQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwKLQkJCQkJ CQkJImN1cmxfZ2xvYmFsX2luaXQgcHJldmlvdXNseSBmYWlsZWQgZHVyaW5nIE9BdXRoIHNldHVw Iik7CisJCXJlcS0+ZXJyb3IgPSBsaWJwcV9nZXR0ZXh0KCJjdXJsX2dsb2JhbF9pbml0IHByZXZp b3VzbHkgZmFpbGVkIGR1cmluZyBPQXV0aCBzZXR1cCIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBA IC0yNzA4LDggKzI3NDMsNyBAQCBpbml0aWFsaXplX2N1cmwoUEdjb25uICpjb25uKQogCSAqLwog CWlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCAmIH5DVVJMX0dMT0JBTF9XSU4z MikgIT0gQ1VSTEVfT0spCiAJewotCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAotCQkJ CQkJCQkiY3VybF9nbG9iYWxfaW5pdCBmYWlsZWQgZHVyaW5nIE9BdXRoIHNldHVwIik7CisJCXJl cS0+ZXJyb3IgPSBsaWJwcV9nZXR0ZXh0KCJjdXJsX2dsb2JhbF9pbml0IGZhaWxlZCBkdXJpbmcg T0F1dGggc2V0dXAiKTsKIAkJaW5pdF9zdWNjZXNzZnVsID0gUEdfQk9PTF9OTzsKIAkJZ290byBk b25lOwogCX0KQEAgLTI3MzAsMTEgKzI3NjQsMTEgQEAgaW5pdGlhbGl6ZV9jdXJsKFBHY29ubiAq Y29ubikKIAkJICogSW4gYSBkb3duZ3JhZGUgc2l0dWF0aW9uLCB0aGUgZGFtYWdlIGlzIGFscmVh ZHkgZG9uZS4gQ3VybCBnbG9iYWwKIAkJICogc3RhdGUgbWF5IGJlIGNvcnJ1cHRlZC4gQmUgbm9p c3kuCiAJCSAqLwotCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLCAibGliY3VybCBpcyBu byBsb25nZXIgdGhyZWFkLXNhZmVcbiIKLQkJCQkJCQkJIlx0Q3VybCBpbml0aWFsaXphdGlvbiB3 YXMgcmVwb3J0ZWQgdGhyZWFkLXNhZmUgd2hlbiBsaWJwcVxuIgotCQkJCQkJCQkiXHR3YXMgY29t cGlsZWQsIGJ1dCB0aGUgY3VycmVudGx5IGluc3RhbGxlZCB2ZXJzaW9uIG9mXG4iCi0JCQkJCQkJ CSJcdGxpYmN1cmwgcmVwb3J0cyB0aGF0IGl0IGlzIG5vdC4gUmVjb21waWxlIGxpYnBxIGFnYWlu c3RcbiIKLQkJCQkJCQkJIlx0dGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIGxpYmN1cmwuIik7CisJ CXJlcS0+ZXJyb3IgPSBsaWJwcV9nZXR0ZXh0KCJsaWJjdXJsIGlzIG5vIGxvbmdlciB0aHJlYWQt c2FmZVxuIgorCQkJCQkJCQkgICAiXHRDdXJsIGluaXRpYWxpemF0aW9uIHdhcyByZXBvcnRlZCB0 aHJlYWQtc2FmZSB3aGVuIGxpYnBxXG4iCisJCQkJCQkJCSAgICJcdHdhcyBjb21waWxlZCwgYnV0 IHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIHZlcnNpb24gb2ZcbiIKKwkJCQkJCQkJICAgIlx0bGli Y3VybCByZXBvcnRzIHRoYXQgaXQgaXMgbm90LiBSZWNvbXBpbGUgbGlicHEgYWdhaW5zdFxuIgor CQkJCQkJCQkgICAiXHR0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgbGliY3VybC4iKTsKIAkJaW5p dF9zdWNjZXNzZnVsID0gUEdfQk9PTF9OTzsKIAkJZ290byBkb25lOwogCX0KQEAgLTI3NjQsNTQg KzI3OTgsMTYgQEAgZG9uZToKICAqIHByb3ZpZGVyLgogICovCiBzdGF0aWMgUG9zdGdyZXNQb2xs aW5nU3RhdHVzVHlwZQotcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4gKmNvbm4pCitw Z19mZV9ydW5fb2F1dGhfZmxvd19pbXBsKFBHY29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVl c3RWMiAqcmVxdWVzdCwKKwkJCQkJCSAgaW50ICphbHRzb2NrKQogewotCWZlX29hdXRoX3N0YXRl ICpzdGF0ZSA9IGNvbm5fc2FzbF9zdGF0ZShjb25uKTsKLQlzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4 OworCXN0cnVjdCBhc3luY19jdHggKmFjdHggPSByZXF1ZXN0LT52MS51c2VyOwogCWNoYXIJICAg Km9hdXRoX3Rva2VuID0gTlVMTDsKLQlQUUV4cEJ1ZmZlciBlcnJidWY7Ci0KLQlpZiAoIWluaXRp YWxpemVfY3VybChjb25uKSkKLQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwotCi0JaWYg KCFzdGF0ZS0+YXN5bmNfY3R4KQotCXsKLQkJLyoKLQkJICogQ3JlYXRlIG91ciBhc3luY2hyb25v dXMgc3RhdGUsIGFuZCBob29rIGl0IGludG8gdGhlIHVwcGVyLWxldmVsCi0JCSAqIE9BdXRoIHN0 YXRlIGltbWVkaWF0ZWx5LCBzbyBhbnkgZmFpbHVyZXMgYmVsb3cgd29uJ3QgbGVhayB0aGUKLQkJ ICogY29udGV4dCBhbGxvY2F0aW9uLgotCQkgKi8KLQkJYWN0eCA9IGNhbGxvYygxLCBzaXplb2Yo KmFjdHgpKTsKLQkJaWYgKCFhY3R4KQotCQl7Ci0JCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihj b25uLCAib3V0IG9mIG1lbW9yeSIpOwotCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwot CQl9Ci0KLQkJYWN0eC0+bXV4ID0gUEdJTlZBTElEX1NPQ0tFVDsKLQkJYWN0eC0+dGltZXJmZCA9 IC0xOwotCi0JCS8qIFNob3VsZCB3ZSBlbmFibGUgdW5zYWZlIGZlYXR1cmVzPyAqLwotCQlhY3R4 LT5kZWJ1Z2dpbmcgPSBvYXV0aF91bnNhZmVfZGVidWdnaW5nX2VuYWJsZWQoKTsKLQotCQlzdGF0 ZS0+YXN5bmNfY3R4ID0gYWN0eDsKLQotCQlpbml0UFFFeHBCdWZmZXIoJmFjdHgtPndvcmtfZGF0 YSk7Ci0JCWluaXRQUUV4cEJ1ZmZlcigmYWN0eC0+ZXJyYnVmKTsKLQotCQlpZiAoIXNldHVwX211 bHRpcGxleGVyKGFjdHgpKQotCQkJZ290byBlcnJvcl9yZXR1cm47Ci0KLQkJaWYgKCFzZXR1cF9j dXJsX2hhbmRsZXMoYWN0eCkpCi0JCQlnb3RvIGVycm9yX3JldHVybjsKLQl9Ci0KLQlhY3R4ID0g c3RhdGUtPmFzeW5jX2N0eDsKIAogCWRvCiAJewogCQkvKiBCeSBkZWZhdWx0LCB0aGUgbXVsdGlw bGV4ZXIgaXMgdGhlIGFsdHNvY2suIFJlYXNzaWduIGFzIGRlc2lyZWQuICovCi0JCXNldF9jb25u X2FsdHNvY2soY29ubiwgYWN0eC0+bXV4KTsKKwkJKmFsdHNvY2sgPSBhY3R4LT5tdXg7CiAKIAkJ c3dpdGNoIChhY3R4LT5zdGVwKQogCQl7CkBAIC0yODc2LDcgKzI4NzIsNyBAQCBwZ19mZV9ydW5f b2F1dGhfZmxvd19pbXBsKFBHY29ubiAqY29ubikKIAogCQkJCQlpZiAoIWV4cGlyZWQpCiAJCQkJ CXsKLQkJCQkJCXNldF9jb25uX2FsdHNvY2soY29ubiwgYWN0eC0+dGltZXJmZCk7CisJCQkJCQkq YWx0c29jayA9IGFjdHgtPnRpbWVyZmQ7CiAJCQkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19SRUFE SU5HOwogCQkJCQl9CiAKQEAgLTI4OTMsNyArMjg4OSw3IEBAIHBnX2ZlX3J1bl9vYXV0aF9mbG93 X2ltcGwoUEdjb25uICpjb25uKQogCQl7CiAJCQljYXNlIE9BVVRIX1NURVBfSU5JVDoKIAkJCQlh Y3R4LT5lcnJjdHggPSBsaWJwcV9nZXR0ZXh0KCJmYWlsZWQgdG8gZmV0Y2ggT3BlbklEIGRpc2Nv dmVyeSBkb2N1bWVudCIpOwotCQkJCWlmICghc3RhcnRfZGlzY292ZXJ5KGFjdHgsIGNvbm5fb2F1 dGhfZGlzY292ZXJ5X3VyaShjb25uKSkpCisJCQkJaWYgKCFzdGFydF9kaXNjb3ZlcnkoYWN0eCwg YWN0eC0+ZGlzY292ZXJ5X3VyaSkpCiAJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCiAJCQkJYWN0 eC0+c3RlcCA9IE9BVVRIX1NURVBfRElTQ09WRVJZOwpAQCAtMjkzMywxMCArMjkyOSwxMCBAQCBw Z19mZV9ydW5fb2F1dGhfZmxvd19pbXBsKFBHY29ubiAqY29ubikKIAkJCQkJZ290byBlcnJvcl9y ZXR1cm47CiAKIAkJCQkvKgotCQkJCSAqIEhvb2sgYW55IG9hdXRoX3Rva2VuIGludG8gdGhlIFBH Y29ubiBpbW1lZGlhdGVseSBzbyB0aGF0Ci0JCQkJICogdGhlIGFsbG9jYXRpb24gaXNuJ3QgbG9z dCBpbiBjYXNlIG9mIGFuIGVycm9yLgorCQkJCSAqIEhvb2sgYW55IG9hdXRoX3Rva2VuIGludG8g dGhlIHJlcXVlc3Qgc3RydWN0IGltbWVkaWF0ZWx5IHNvCisJCQkJICogdGhhdCB0aGUgYWxsb2Nh dGlvbiBpc24ndCBsb3N0IGluIGNhc2Ugb2YgYW4gZXJyb3IuCiAJCQkJICovCi0JCQkJc2V0X2Nv bm5fb2F1dGhfdG9rZW4oY29ubiwgb2F1dGhfdG9rZW4pOworCQkJCXJlcXVlc3QtPnYxLnRva2Vu ID0gb2F1dGhfdG9rZW47CiAKIAkJCQlpZiAoIWFjdHgtPnVzZXJfcHJvbXB0ZWQpCiAJCQkJewpA QCAtMjk2NSw3ICsyOTYxLDcgQEAgcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4gKmNv bm4pCiAJCQkJICogdGhlIGNsaWVudCB3YWl0IGRpcmVjdGx5IG9uIHRoZSB0aW1lcmZkIHJhdGhl ciB0aGFuIHRoZQogCQkJCSAqIG11bHRpcGxleGVyLgogCQkJCSAqLwotCQkJCXNldF9jb25uX2Fs dHNvY2soY29ubiwgYWN0eC0+dGltZXJmZCk7CisJCQkJKmFsdHNvY2sgPSBhY3R4LT50aW1lcmZk OwogCiAJCQkJYWN0eC0+c3RlcCA9IE9BVVRIX1NURVBfV0FJVF9JTlRFUlZBTDsKIAkJCQlhY3R4 LT5ydW5uaW5nID0gMTsKQEAgLTI5OTEsNDggKzI5ODcsMjEgQEAgcGdfZmVfcnVuX29hdXRoX2Zs b3dfaW1wbChQR2Nvbm4gKmNvbm4pCiAJcmV0dXJuIG9hdXRoX3Rva2VuID8gUEdSRVNfUE9MTElO R19PSyA6IFBHUkVTX1BPTExJTkdfUkVBRElORzsKIAogZXJyb3JfcmV0dXJuOgotCWVycmJ1ZiA9 IGNvbm5fZXJyb3JNZXNzYWdlKGNvbm4pOwotCi0JLyoKLQkgKiBBc3NlbWJsZSB0aGUgdGhyZWUg cGFydHMgb2Ygb3VyIGVycm9yOiBjb250ZXh0LCBib2R5LCBhbmQgZGV0YWlsLiBTZWUKLQkgKiBh bHNvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBzdHJ1Y3QgYXN5bmNfY3R4LgotCSAqLwotCWlmIChh Y3R4LT5lcnJjdHgpCi0JCWFwcGVuZFBRRXhwQnVmZmVyKGVycmJ1ZiwgIiVzOiAiLCBhY3R4LT5l cnJjdHgpOwotCi0JaWYgKFBRRXhwQnVmZmVyRGF0YUJyb2tlbihhY3R4LT5lcnJidWYpKQotCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihlcnJidWYsIGxpYnBxX2dldHRleHQoIm91dCBvZiBtZW1vcnki KSk7Ci0JZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihlcnJidWYsIGFjdHgtPmVycmJ1Zi5k YXRhKTsKLQotCWlmIChhY3R4LT5jdXJsX2VyclswXSkKLQl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVy KGVycmJ1ZiwgIiAobGliY3VybDogJXMpIiwgYWN0eC0+Y3VybF9lcnIpOwotCi0JCS8qIFNvbWV0 aW1lcyBsaWJjdXJsIGFkZHMgYSBuZXdsaW5lIHRvIHRoZSBlcnJvciBidWZmZXIuIDooICovCi0J CWlmIChlcnJidWYtPmxlbiA+PSAyICYmIGVycmJ1Zi0+ZGF0YVtlcnJidWYtPmxlbiAtIDJdID09 ICdcbicpCi0JCXsKLQkJCWVycmJ1Zi0+ZGF0YVtlcnJidWYtPmxlbiAtIDJdID0gJyknOwotCQkJ ZXJyYnVmLT5kYXRhW2VycmJ1Zi0+bGVuIC0gMV0gPSAnXDAnOwotCQkJZXJyYnVmLT5sZW4tLTsK LQkJfQotCX0KLQotCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihlcnJidWYsICdcbicpOworCWFwcGVu ZF9hY3R4X2Vycm9yKHJlcXVlc3QsIGFjdHgpOwogCiAJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJ TEVEOwogfQogCiAvKgotICogVGhlIHRvcC1sZXZlbCBlbnRyeSBwb2ludC4gVGhpcyBpcyBhIGNv bnZlbmllbnQgcGxhY2UgdG8gcHV0IG5lY2Vzc2FyeQotICogd3JhcHBlciBsb2dpYyBiZWZvcmUg aGFuZGluZyBvZmYgdG8gdGhlIHRydWUgaW1wbGVtZW50YXRpb24sIGFib3ZlLgorICogVGhlIHRv cC1sZXZlbCBlbnRyeSBwb2ludCBmb3IgdGhlIGZsb3cuIFRoaXMgaXMgYSBjb252ZW5pZW50IHBs YWNlIHRvIHB1dAorICogbmVjZXNzYXJ5IHdyYXBwZXIgbG9naWMgYmVmb3JlIGhhbmRpbmcgb2Zm IHRvIHRoZSB0cnVlIGltcGxlbWVudGF0aW9uLCBhYm92ZS4KICAqLwotUG9zdGdyZXNQb2xsaW5n U3RhdHVzVHlwZQotcGdfZmVfcnVuX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQorc3RhdGljIFBv c3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKK3BnX2ZlX3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29u biwgc3RydWN0IFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXF1ZXN0LAorCQkJCQkgaW50ICphbHRz b2NrKQogewogCVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgcmVzdWx0OwotCWZlX29hdXRoX3N0 YXRlICpzdGF0ZSA9IGNvbm5fc2FzbF9zdGF0ZShjb25uKTsKLQlzdHJ1Y3QgYXN5bmNfY3R4ICph Y3R4OworCXN0cnVjdCBhc3luY19jdHggKmFjdHggPSByZXF1ZXN0LT51c2VyOwogI2lmbmRlZiBX SU4zMgogCXNpZ3NldF90CW9zaWdzZXQ7CiAJYm9vbAkJc2lncGlwZV9wZW5kaW5nOwpAQCAtMzA1 OSwyMCArMzAyOCwxNiBAQCBwZ19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAJbWFz a2VkID0gKHBxX2Jsb2NrX3NpZ3BpcGUoJm9zaWdzZXQsICZzaWdwaXBlX3BlbmRpbmcpID09IDAp OwogI2VuZGlmCiAKLQlyZXN1bHQgPSBwZ19mZV9ydW5fb2F1dGhfZmxvd19pbXBsKGNvbm4pOwor CXJlc3VsdCA9IHBnX2ZlX3J1bl9vYXV0aF9mbG93X2ltcGwoY29ubiwKKwkJCQkJCQkJCSAgIChQ R29hdXRoQmVhcmVyUmVxdWVzdFYyICopIHJlcXVlc3QsCisJCQkJCQkJCQkgICBhbHRzb2NrKTsK IAogCS8qCiAJICogVG8gYXNzaXN0IHdpdGggZmluZGluZyBidWdzIGluIGNvbWJfbXVsdGlwbGV4 ZXIoKSBhbmQKIAkgKiBkcmFpbl90aW1lcl9ldmVudHMoKSwgd2hlbiB3ZSdyZSBpbiBkZWJ1ZyBt b2RlLCB0cmFjayB0aGUgdG90YWwgbnVtYmVyCiAJICogb2YgY2FsbHMgdG8gdGhpcyBmdW5jdGlv biBhbmQgcHJpbnQgdGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBmbG93LgotCSAqCi0JICogQmUgY2Fy ZWZ1bCB0aGF0IHN0YXRlLT5hc3luY19jdHggY291bGQgYmUgTlVMTCBpZiBlYXJseSBpbml0aWFs aXphdGlvbgotCSAqIGZhaWxzIGR1cmluZyB0aGUgZmlyc3QgY2FsbC4KIAkgKi8KLQlhY3R4ID0g c3RhdGUtPmFzeW5jX2N0eDsKLQlBc3NlcnQoYWN0eCB8fCByZXN1bHQgPT0gUEdSRVNfUE9MTElO R19GQUlMRUQpOwotCi0JaWYgKGFjdHggJiYgYWN0eC0+ZGVidWdnaW5nKQorCWlmIChhY3R4LT5k ZWJ1Z2dpbmcpCiAJewogCQlhY3R4LT5kYmdfbnVtX2NhbGxzKys7CiAJCWlmIChyZXN1bHQgPT0g UEdSRVNfUE9MTElOR19PSyB8fCByZXN1bHQgPT0gUEdSRVNfUE9MTElOR19GQUlMRUQpCkBAIC0z MDkzLDMgKzMwNTgsMTAyIEBAIHBnX2ZlX3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIAog CXJldHVybiByZXN1bHQ7CiB9CisKKy8qCisgKiBDYWxsYmFjayByZWdpc3RyYXRpb24gZm9yIE9B VVRIQkVBUkVSLiBsaWJwcSBjYWxscyB0aGlzIG9uY2UgcGVyIE9BdXRoCisgKiBjb25uZWN0aW9u LgorICovCitpbnQKK3BnX3N0YXJ0X29hdXRoYmVhcmVyKFBHY29ubiAqY29ubiwgUEdvYXV0aEJl YXJlclJlcXVlc3RWMiAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4OworCisJ aWYgKCFpbml0aWFsaXplX2N1cmwocmVxdWVzdCkpCisJCXJldHVybiAtMTsKKworCS8qCisJICog Q3JlYXRlIG91ciBhc3luY2hyb25vdXMgc3RhdGUsIGFuZCBob29rIGl0IGludG8gdGhlIHVwcGVy LWxldmVsIE9BdXRoCisJICogc3RhdGUgaW1tZWRpYXRlbHksIHNvIGFueSBmYWlsdXJlcyBiZWxv dyB3b24ndCBsZWFrIHRoZSBjb250ZXh0CisJICogYWxsb2NhdGlvbi4KKwkgKi8KKwlhY3R4ID0g Y2FsbG9jKDEsIHNpemVvZigqYWN0eCkpOworCWlmICghYWN0eCkKKwkJZ290byBvb207CisKKwlh Y3R4LT5tdXggPSBQR0lOVkFMSURfU09DS0VUOworCWFjdHgtPnRpbWVyZmQgPSAtMTsKKworCS8q CisJICogTm93IHdlIGhhdmUgYSB2YWxpZCAoYnV0IHN0aWxsIHVzZWxlc3MpIGFjdHgsIHNvIHdl IGNhbiBmaWxsIGluIHRoZQorCSAqIHJlcXVlc3Qgb2JqZWN0LiBGcm9tIHRoaXMgcG9pbnQgb253 YXJkLCBmYWlsdXJlcyB3aWxsIHJlc3VsdCBpbiBhIGNhbGwKKwkgKiB0byBwZ19mZV9jbGVhbnVw X29hdXRoX2Zsb3coKS4gRnVydGhlciBjbGVhbnVwIGxvZ2ljIGJlbG9uZ3MgdGhlcmUuCisJICov CisJcmVxdWVzdC0+djEuYXN5bmMgPSBwZ19mZV9ydW5fb2F1dGhfZmxvdzsKKwlyZXF1ZXN0LT52 MS5jbGVhbnVwID0gcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93OworCXJlcXVlc3QtPnYxLnVzZXIg PSBhY3R4OworCisJLyoKKwkgKiBOb3cgZmluaXNoIGZpbGxpbmcgaW4gdGhlIGFjdHguCisJICov CisKKwkvKiBTaG91bGQgd2UgZW5hYmxlIHVuc2FmZSBmZWF0dXJlcz8gKi8KKwlhY3R4LT5kZWJ1 Z2dpbmcgPSBvYXV0aF91bnNhZmVfZGVidWdnaW5nX2VuYWJsZWQoKTsKKworCWluaXRQUUV4cEJ1 ZmZlcigmYWN0eC0+d29ya19kYXRhKTsKKwlpbml0UFFFeHBCdWZmZXIoJmFjdHgtPmVycmJ1Zik7 CisKKwkvKiBQdWxsIHJlbGV2YW50IGNvbm5lY3Rpb24gb3B0aW9ucy4gKi8KKwl7CisJCVBRY29u bmluZm9PcHRpb24gKmNvbm5pbmZvID0gUFFjb25uaW5mbyhjb25uKTsKKworCQlpZiAoIWNvbm5p bmZvKQorCQkJZ290byBvb207CisKKwkJZm9yIChQUWNvbm5pbmZvT3B0aW9uICpvcHQgPSBjb25u aW5mbzsgb3B0LT5rZXl3b3JkOyBvcHQrKykKKwkJeworCQkJaWYgKCFvcHQtPnZhbCkKKwkJCQlj b250aW51ZTsJCS8qIHNpbXBsaWZpZXMgdGhlIHN0cmR1cCBsb2dpYyBiZWxvdyAqLworCisJCQlp ZiAoc3RyY21wKG9wdC0+a2V5d29yZCwgIm9hdXRoX2NsaWVudF9pZCIpID09IDApCisJCQl7CisJ CQkJYWN0eC0+Y2xpZW50X2lkID0gc3RyZHVwKG9wdC0+dmFsKTsKKwkJCQlpZiAoIWFjdHgtPmNs aWVudF9pZCkKKwkJCQkJZ290byBvb207CisJCQl9CisJCQllbHNlIGlmIChzdHJjbXAob3B0LT5r ZXl3b3JkLCAib2F1dGhfY2xpZW50X3NlY3JldCIpID09IDApCisJCQl7CisJCQkJYWN0eC0+Y2xp ZW50X3NlY3JldCA9IHN0cmR1cChvcHQtPnZhbCk7CisJCQkJaWYgKCFhY3R4LT5jbGllbnRfc2Vj cmV0KQorCQkJCQlnb3RvIG9vbTsKKwkJCX0KKwkJfQorCisJCVBRY29ubmluZm9GcmVlKGNvbm5p bmZvKTsKKwl9CisKKwlhY3R4LT5kaXNjb3ZlcnlfdXJpID0gcmVxdWVzdC0+djEub3BlbmlkX2Nv bmZpZ3VyYXRpb247CisJYWN0eC0+aXNzdWVyX2lkID0gcmVxdWVzdC0+aXNzdWVyOworCWFjdHgt PnNjb3BlID0gcmVxdWVzdC0+djEuc2NvcGU7CisKKwlBc3NlcnQoYWN0eC0+Y2xpZW50X2lkKTsJ LyogZW5zdXJlZCBieSBzZXR1cF9vYXV0aF9wYXJhbWV0ZXJzKCkgKi8KKwlBc3NlcnQoYWN0eC0+ aXNzdWVyX2lkKTsJLyogZW5zdXJlZCBieSBzZXR1cF9vYXV0aF9wYXJhbWV0ZXJzKCkgKi8KKwlB c3NlcnQoYWN0eC0+ZGlzY292ZXJ5X3VyaSk7CS8qIGVuc3VyZWQgYnkgb2F1dGhfZXhjaGFuZ2Uo KSAqLworCisJaWYgKCFzZXR1cF9tdWx0aXBsZXhlcihhY3R4KSkKKwl7CisJCWFwcGVuZF9hY3R4 X2Vycm9yKHJlcXVlc3QsIGFjdHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFzZXR1cF9j dXJsX2hhbmRsZXMoYWN0eCkpCisJeworCQlhcHBlbmRfYWN0eF9lcnJvcihyZXF1ZXN0LCBhY3R4 KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworCitvb206CisJcmVxdWVzdC0+ZXJy b3IgPSBsaWJwcV9nZXR0ZXh0KCJvdXQgb2YgbWVtb3J5Iik7CisJcmV0dXJuIC0xOworfQpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuYyBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmMKaW5kZXggNGViZTdkMDk0OGMuLmNj YjBkOWJmMmM1IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC11 dGlscy5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmMKQEAg LTM1LDg1ICszNSwxOCBAQAogcGd0aHJlYWRsb2NrX3QgcGdfZ190aHJlYWRsb2NrOwogc3RhdGlj IGxpYnBxX2dldHRleHRfZnVuYyBsaWJwcV9nZXR0ZXh0X2ltcGw7CiAKLWNvbm5fZXJyb3JNZXNz YWdlX2Z1bmMgY29ubl9lcnJvck1lc3NhZ2U7Ci1jb25uX29hdXRoX2NsaWVudF9pZF9mdW5jIGNv bm5fb2F1dGhfY2xpZW50X2lkOwotY29ubl9vYXV0aF9jbGllbnRfc2VjcmV0X2Z1bmMgY29ubl9v YXV0aF9jbGllbnRfc2VjcmV0OwotY29ubl9vYXV0aF9kaXNjb3ZlcnlfdXJpX2Z1bmMgY29ubl9v YXV0aF9kaXNjb3ZlcnlfdXJpOwotY29ubl9vYXV0aF9pc3N1ZXJfaWRfZnVuYyBjb25uX29hdXRo X2lzc3Vlcl9pZDsKLWNvbm5fb2F1dGhfc2NvcGVfZnVuYyBjb25uX29hdXRoX3Njb3BlOwotY29u bl9zYXNsX3N0YXRlX2Z1bmMgY29ubl9zYXNsX3N0YXRlOwotCi1zZXRfY29ubl9hbHRzb2NrX2Z1 bmMgc2V0X2Nvbm5fYWx0c29jazsKLXNldF9jb25uX29hdXRoX3Rva2VuX2Z1bmMgc2V0X2Nvbm5f b2F1dGhfdG9rZW47Ci0KIC8qLQogICogSW5pdGlhbGl6ZXMgbGlicHEtb2F1dGggYnkgc2V0dGlu ZyBuZWNlc3NhcnkgY2FsbGJhY2tzLgogICoKLSAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u IHJlbGllcyBvbiB0aGUgZm9sbG93aW5nIHByaXZhdGUgaW1wbGVtZW50YXRpb24KLSAqIGRldGFp bHMgb2YgbGlicHE6Ci0gKgotICogLSBwZ19nX3RocmVhZGxvY2s6IHByb3RlY3RzIGxpYmN1cmwg aW5pdGlhbGl6YXRpb24gaWYgdGhlIHVuZGVybHlpbmcgQ3VybAotICogICBpbnN0YWxsYXRpb24g aXMgbm90IHRocmVhZHNhZmUKLSAqCi0gKiAtIGxpYnBxX2dldHRleHQ6IHRyYW5zbGF0ZXMgZXJy b3IgbWVzc2FnZXMgdXNpbmcgbGlicHEncyBtZXNzYWdlIGRvbWFpbgotICoKLSAqIFRoZSBpbXBs ZW1lbnRhdGlvbiBhbHNvIG5lZWRzIGFjY2VzcyB0byBzZXZlcmFsIG1lbWJlcnMgb2YgdGhlIFBH Y29ubiBzdHJ1Y3QsCi0gKiB3aGljaCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gc3RheSBpbiBwbGFj ZSBhY3Jvc3MgbWlub3IgdmVyc2lvbnMuIEFjY2Vzc29ycwotICogKG5hbWVkIGNvbm5fKikgYW5k IG11dGF0b3JzIChuYW1lZCBzZXRfY29ubl8qKSBhcmUgaW5qZWN0ZWQgaGVyZS4KKyAqIFRoZSBj dXJyZW50IGltcGxlbWVudGF0aW9uIHJlbGllcyBvbiBsaWJwcV9nZXR0ZXh0IHRvIHRyYW5zbGF0 ZSBlcnJvcgorICogbWVzc2FnZXMgdXNpbmcgbGlicHEncyBtZXNzYWdlIGRvbWFpbiwgc28gbGli cHEgaW5qZWN0cyBpdCBoZXJlLiBXZSBhbHNvIHVzZQorICogdGhpcyBjaGFuY2UgdG8gaW5pdGlh bGl6ZSBvdXIgdGhyZWFkbG9jay4KICAqLwogdm9pZAotbGlicHFfb2F1dGhfaW5pdChwZ3RocmVh ZGxvY2tfdCB0aHJlYWRsb2NrX2ltcGwsCi0JCQkJIGxpYnBxX2dldHRleHRfZnVuYyBnZXR0ZXh0 X2ltcGwsCi0JCQkJIGNvbm5fZXJyb3JNZXNzYWdlX2Z1bmMgZXJybXNnX2ltcGwsCi0JCQkJIGNv bm5fb2F1dGhfY2xpZW50X2lkX2Z1bmMgY2xpZW50aWRfaW1wbCwKLQkJCQkgY29ubl9vYXV0aF9j bGllbnRfc2VjcmV0X2Z1bmMgY2xpZW50c2VjcmV0X2ltcGwsCi0JCQkJIGNvbm5fb2F1dGhfZGlz Y292ZXJ5X3VyaV9mdW5jIGRpc2NvdmVyeXVyaV9pbXBsLAotCQkJCSBjb25uX29hdXRoX2lzc3Vl cl9pZF9mdW5jIGlzc3VlcmlkX2ltcGwsCi0JCQkJIGNvbm5fb2F1dGhfc2NvcGVfZnVuYyBzY29w ZV9pbXBsLAotCQkJCSBjb25uX3Nhc2xfc3RhdGVfZnVuYyBzYXNsc3RhdGVfaW1wbCwKLQkJCQkg c2V0X2Nvbm5fYWx0c29ja19mdW5jIHNldGFsdHNvY2tfaW1wbCwKLQkJCQkgc2V0X2Nvbm5fb2F1 dGhfdG9rZW5fZnVuYyBzZXR0b2tlbl9pbXBsKQorbGlicHFfb2F1dGhfaW5pdChsaWJwcV9nZXR0 ZXh0X2Z1bmMgZ2V0dGV4dF9pbXBsKQogewotCXBnX2dfdGhyZWFkbG9jayA9IHRocmVhZGxvY2tf aW1wbDsKKwlwZ19nX3RocmVhZGxvY2sgPSBQUWdldFRocmVhZExvY2soKTsKIAlsaWJwcV9nZXR0 ZXh0X2ltcGwgPSBnZXR0ZXh0X2ltcGw7Ci0JY29ubl9lcnJvck1lc3NhZ2UgPSBlcnJtc2dfaW1w bDsKLQljb25uX29hdXRoX2NsaWVudF9pZCA9IGNsaWVudGlkX2ltcGw7Ci0JY29ubl9vYXV0aF9j bGllbnRfc2VjcmV0ID0gY2xpZW50c2VjcmV0X2ltcGw7Ci0JY29ubl9vYXV0aF9kaXNjb3Zlcnlf dXJpID0gZGlzY292ZXJ5dXJpX2ltcGw7Ci0JY29ubl9vYXV0aF9pc3N1ZXJfaWQgPSBpc3N1ZXJp ZF9pbXBsOwotCWNvbm5fb2F1dGhfc2NvcGUgPSBzY29wZV9pbXBsOwotCWNvbm5fc2FzbF9zdGF0 ZSA9IHNhc2xzdGF0ZV9pbXBsOwotCXNldF9jb25uX2FsdHNvY2sgPSBzZXRhbHRzb2NrX2ltcGw7 Ci0Jc2V0X2Nvbm5fb2F1dGhfdG9rZW4gPSBzZXR0b2tlbl9pbXBsOwotfQotCi0vKgotICogQXBw ZW5kIGEgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgZXJyb3IgbWVzc2FnZSBidWZmZXIgb2YgdGhl IGdpdmVuCi0gKiBjb25uZWN0aW9uLCBhZnRlciB0cmFuc2xhdGluZyBpdC4gIFRoaXMgaXMgYSBj b3B5IG9mIGxpYnBxJ3MgaW50ZXJuYWwgQVBJLgotICovCi12b2lkCi1saWJwcV9hcHBlbmRfY29u bl9lcnJvcihQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmZtdCwuLi4pCi17Ci0JaW50CQkJc2F2 ZV9lcnJubyA9IGVycm5vOwotCWJvb2wJCWRvbmU7Ci0JdmFfbGlzdAkJYXJnczsKLQlQUUV4cEJ1 ZmZlciBlcnJvck1lc3NhZ2UgPSBjb25uX2Vycm9yTWVzc2FnZShjb25uKTsKLQotCUFzc2VydChm bXRbc3RybGVuKGZtdCkgLSAxXSAhPSAnXG4nKTsKLQotCWlmIChQUUV4cEJ1ZmZlckJyb2tlbihl cnJvck1lc3NhZ2UpKQotCQlyZXR1cm47CQkJCQkvKiBhbHJlYWR5IGZhaWxlZCAqLwotCi0JLyog TG9vcCBpbiBjYXNlIHdlIGhhdmUgdG8gcmV0cnkgYWZ0ZXIgZW5sYXJnaW5nIHRoZSBidWZmZXIu ICovCi0JZG8KLQl7Ci0JCWVycm5vID0gc2F2ZV9lcnJubzsKLQkJdmFfc3RhcnQoYXJncywgZm10 KTsKLQkJZG9uZSA9IGFwcGVuZFBRRXhwQnVmZmVyVkEoZXJyb3JNZXNzYWdlLCBsaWJwcV9nZXR0 ZXh0KGZtdCksIGFyZ3MpOwotCQl2YV9lbmQoYXJncyk7Ci0JfSB3aGlsZSAoIWRvbmUpOwotCi0J YXBwZW5kUFFFeHBCdWZmZXJDaGFyKGVycm9yTWVzc2FnZSwgJ1xuJyk7CiB9CiAKICNpZmRlZiBF TkFCTEVfTkxTCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRo LmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKaW5kZXggYjY0ZDA1YTEz ZTMuLjkwNGY0M2U5MGVhIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRo LW9hdXRoLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jCkBAIC03 OCw3ICs3OCw3IEBAIG9hdXRoX2luaXQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpwYXNzd29y ZCwKICAqIFRoaXMgaGFuZGxlcyBvbmx5IG1lY2hhbmlzbSBzdGF0ZSB0aWVkIHRvIHRoZSBjb25u ZWN0aW9uIGxpZmV0aW1lOyBzdGF0ZQogICogc3RvcmVkIGluIHN0YXRlLT5hc3luY19jdHggaXMg ZnJlZWQgdXAgZWl0aGVyIGltbWVkaWF0ZWx5IGFmdGVyIHRoZQogICogYXV0aGVudGljYXRpb24g aGFuZHNoYWtlIHN1Y2NlZWRzLCBvciBiZWZvcmUgdGhlIG1lY2hhbmlzbSBpcyBjbGVhbmVkIHVw IG9uCi0gKiBmYWlsdXJlLiBTZWUgcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KCkgYW5kIGNsZWFu dXBfdXNlcl9vYXV0aF9mbG93KCkuCisgKiBmYWlsdXJlLiBTZWUgcGdfZmVfY2xlYW51cF9vYXV0 aF9mbG93KCkgYW5kIGNsZWFudXBfb2F1dGhfZmxvdygpLgogICovCiBzdGF0aWMgdm9pZAogb2F1 dGhfZnJlZSh2b2lkICpvcGFxKQpAQCAtNjgwLDMwICs2ODAsNTQgQEAgY2xlYW51cDoKICAqIGl0 J3MgYWRkZWQgdG8gY29ubi0+ZXJyb3JNZXNzYWdlIGhlcmUuCiAgKi8KIHN0YXRpYyB2b2lkCi1y ZXBvcnRfdXNlcl9mbG93X2Vycm9yKFBHY29ubiAqY29ubiwgY29uc3QgUEdvYXV0aEJlYXJlclJl cXVlc3RWMiAqcmVxdWVzdCkKK3JlcG9ydF9mbG93X2Vycm9yKFBHY29ubiAqY29ubiwgY29uc3Qg UEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkKIHsKLQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJIGxpYnBxX2dldHRleHQoInVzZXItZGVmaW5l ZCBPQXV0aCBmbG93IGZhaWxlZCIpKTsKKwlmZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBjb25uLT5z YXNsX3N0YXRlOworCWNvbnN0IGNoYXIgKmVycm1zZyA9IHJlcXVlc3QtPmVycm9yOworCisJLyoK KwkgKiBVc2VyLWRlZmluZWQgZmxvd3MgYXJlIGNhbGxlZCBvdXQgZXhwbGljaXRseSBzbyB0aGF0 IHRoZSB1c2VyIGtub3dzIHdobworCSAqIHRvIGJsYW1lLiBCdWlsdGluIGZsb3dzIGRvbid0IG5l ZWQgdGhhdCBleHRyYSBtZXNzYWdlIGxlbmd0aDsgd2UgZXhwZWN0CisJICogdGhlbSB0byBhbHdh eXMgZmlsbCBpbiByZXF1ZXN0LT5lcnJvciBvbiBmYWlsdXJlIGFueXdheS4KKwkgKi8KKwlpZiAo c3RhdGUtPmJ1aWx0aW4pCisJeworCQlpZiAoIWVycm1zZykKKwkJeworCQkJLyoKKwkJCSAqIERv bid0IHR1cm4gYSBidWcgaGVyZSBpbnRvIGEgY3Jhc2ggaW4gcHJvZHVjdGlvbiwgYnV0IGRvbid0 CisJCQkgKiBib3RoZXIgdHJhbnNsYXRpbmcgZWl0aGVyLgorCQkJICovCisJCQlBc3NlcnQoZmFs c2UpOworCQkJZXJybXNnID0gImJ1aWx0aW4gZmxvdyBmYWlsZWQgYnV0IGRpZCBub3QgcHJvdmlk ZSBhbiBlcnJvciBtZXNzYWdlIjsKKwkJfQogCi0JaWYgKHJlcXVlc3QtPmVycm9yKQorCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLCBlcnJtc2cpOworCX0KKwllbHNl CiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLCAiOiAiKTsK LQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwgcmVxdWVzdC0+ZXJy b3IpOworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJ CSBsaWJwcV9nZXR0ZXh0KCJ1c2VyLWRlZmluZWQgT0F1dGggZmxvdyBmYWlsZWQiKSk7CisJCWlm IChlcnJtc2cpCisJCXsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3Nh Z2UsICI6ICIpOworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwg ZXJybXNnKTsKKwkJfQogCX0KIAogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcigmY29ubi0+ZXJyb3JN ZXNzYWdlLCAnXG4nKTsKIH0KIAogLyoKLSAqIENhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGNv bm4tPmFzeW5jX2F1dGgoKSBmb3IgYSB1c2VyLWRlZmluZWQgT0F1dGggZmxvdy4KLSAqIERlbGVn YXRlcyB0aGUgcmV0cmlldmFsIG9mIHRoZSB0b2tlbiB0byB0aGUgYXBwbGljYXRpb24ncyBhc3lu YyBjYWxsYmFjay4KKyAqIENhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGNvbm4tPmFzeW5jX2F1 dGgoKSBmb3IgT0F1dGggZmxvd3MuIERlbGVnYXRlcyB0aGUKKyAqIHJldHJpZXZhbCBvZiB0aGUg dG9rZW4gdG8gdGhlIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIuYXN5bmMoKSBjYWxsYmFjay4KICAq Ci0gKiBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGFzIG5lZWRlZDsgdGhlIGFw cGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlCi0gKiBmb3Igc2V0dGluZyBhbiBhbHRzb2NrIHRvIHNp Z25hbCBhbmQgcmV0dXJuaW5nIHRoZSBjb3JyZWN0IFBHUkVTX1BPTExJTkdfKgorICogVGhpcyB3 aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBhcyBuZWVkZWQ7IHRoZSBjYWxsYmFjayBpcyBy ZXNwb25zaWJsZSBmb3IKKyAqIHNldHRpbmcgYW4gYWx0c29jayB0byBzaWduYWwgYW5kIHJldHVy bmluZyB0aGUgY29ycmVjdCBQR1JFU19QT0xMSU5HXyoKICAqIHN0YXR1c2VzIGZvciB1c2UgYnkg UFFjb25uZWN0UG9sbCgpLgogICovCiBzdGF0aWMgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZQot cnVuX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCitydW5fb2F1dGhfZmxvdyhQR2Nvbm4g KmNvbm4pCiB7CiAJZmVfb2F1dGhfc3RhdGUgKnN0YXRlID0gY29ubi0+c2FzbF9zdGF0ZTsKIAlQ R29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0ID0gc3RhdGUtPmFzeW5jX2N0eDsKQEAgLTcx MSw2ICs3MzUsNyBAQCBydW5fdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIAogCWlmICgh cmVxdWVzdC0+djEuYXN5bmMpCiAJeworCQlBc3NlcnQoIXN0YXRlLT5idWlsdGluKTsJLyogYmUg dmVyeSBub2lzeSBpZiBvdXIgY29kZSBkb2VzIHRoaXMgKi8KIAkJbGlicHFfYXBwZW5kX2Nvbm5f ZXJyb3IoY29ubiwKIAkJCQkJCQkJInVzZXItZGVmaW5lZCBPQXV0aCBmbG93IHByb3ZpZGVkIG5l aXRoZXIgYSB0b2tlbiBub3IgYW4gYXN5bmMgY2FsbGJhY2siKTsKIAkJcmV0dXJuIFBHUkVTX1BP TExJTkdfRkFJTEVEOwpAQCAtNzIyLDcgKzc0Nyw3IEBAIHJ1bl91c2VyX29hdXRoX2Zsb3coUEdj b25uICpjb25uKQogCiAJaWYgKHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX0ZBSUxFRCkKIAl7Ci0J CXJlcG9ydF91c2VyX2Zsb3dfZXJyb3IoY29ubiwgcmVxdWVzdCk7CisJCXJlcG9ydF9mbG93X2Vy cm9yKGNvbm4sIHJlcXVlc3QpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAllbHNlIGlmIChzdGF0 dXMgPT0gUEdSRVNfUE9MTElOR19PSykKQEAgLTczNCw2ICs3NTksNyBAQCBydW5fdXNlcl9vYXV0 aF9mbG93KFBHY29ubiAqY29ubikKIAkJICovCiAJCWlmICghcmVxdWVzdC0+djEudG9rZW4pCiAJ CXsKKwkJCUFzc2VydCghc3RhdGUtPmJ1aWx0aW4pOwogCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJy b3IoY29ubiwKIAkJCQkJCQkJCSJ1c2VyLWRlZmluZWQgT0F1dGggZmxvdyBkaWQgbm90IHByb3Zp ZGUgYSB0b2tlbiIpOwogCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwpAQCAtNzUyLDYg Kzc3OCw3IEBAIHJ1bl91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogCS8qIFRoZSBob29r IHdhbnRzIHRoZSBjbGllbnQgdG8gcG9sbCB0aGUgYWx0c29jay4gTWFrZSBzdXJlIGl0IHNldCBv bmUuICovCiAJaWYgKGNvbm4tPmFsdHNvY2sgPT0gUEdJTlZBTElEX1NPQ0tFVCkKIAl7CisJCUFz c2VydCghc3RhdGUtPmJ1aWx0aW4pOwogCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAog CQkJCQkJCQkidXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZGlkIG5vdCBwcm92aWRlIGEgc29ja2V0 IGZvciBwb2xsaW5nIik7CiAJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKQEAgLTc2MSwx MiArNzg4LDE2IEBAIHJ1bl91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogfQogCiAvKgot ICogQ2xlYW51cCBjYWxsYmFjayBmb3IgdGhlIGFzeW5jIHVzZXIgZmxvdy4gRGVsZWdhdGVzIG1v c3Qgb2YgaXRzIGpvYiB0bworICogQ2xlYW51cCBjYWxsYmFjayBmb3IgdGhlIGFzeW5jIGZsb3cu IERlbGVnYXRlcyBtb3N0IG9mIGl0cyBqb2IgdG8KICAqIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIu Y2xlYW51cCgpLCB0aGVuIGRpc2Nvbm5lY3RzIHRoZSBhbHRzb2NrIGFuZCBmcmVlcyB0aGUKICAq IHJlcXVlc3QgaXRzZWxmLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGVpdGhlciBhdCB0aGUgZW5k IG9mIGEgc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbiwgb3IgZHVyaW5nCisgKiBwcURyb3BDb25u ZWN0aW9uKCksIHNvIHdlIHdvbid0IGxlYWsgcmVzb3VyY2VzIGV2ZW4gaWYgUFFjb25uZWN0UG9s bCgpIG5ldmVyCisgKiBjYWxscyB1cyBiYWNrLgogICovCiBzdGF0aWMgdm9pZAotY2xlYW51cF91 c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQorY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAq Y29ubikKIHsKIAlmZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBjb25uLT5zYXNsX3N0YXRlOwogCVBH b2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OwpAQCAtNzg2 LDEyICs4MTcsMTYgQEAgY2xlYW51cF91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogICoK ICAqIFRoZXJlIGFyZSB0aHJlZSBwb3RlbnRpYWwgaW1wbGVtZW50YXRpb25zIG9mIHVzZV9idWls dGluX2Zsb3c6CiAgKgotICogMSkgSWYgdGhlIE9BdXRoIGNsaWVudCBpcyBkaXNhYmxlZCBhdCBj b25maWd1cmF0aW9uIHRpbWUsIHJldHVybiBmYWxzZS4KKyAqIDEpIElmIHRoZSBPQXV0aCBjbGll bnQgaXMgZGlzYWJsZWQgYXQgY29uZmlndXJhdGlvbiB0aW1lLCByZXR1cm4gemVyby4KICAqICAg IERlcGVuZGVudCBjbGllbnRzIG11c3QgcHJvdmlkZSB0aGVpciBvd24gZmxvdy4KICAqIDIpIElm IHRoZSBPQXV0aCBjbGllbnQgaXMgZW5hYmxlZCBhbmQgVVNFX0RZTkFNSUNfT0FVVEggaXMgZGVm aW5lZCwgZGxvcGVuKCkKICAqICAgIHRoZSBsaWJwcS1vYXV0aCBwbHVnaW4gYW5kIHVzZSBpdHMg aW1wbGVtZW50YXRpb24uCiAgKiAzKSBPdGhlcndpc2UsIHVzZSBmbG93IGNhbGxiYWNrcyB0aGF0 IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZQogICogICAgZXhlY3V0YWJsZS4KKyAqCisg KiBGb3IgY2FsbGVyIGNvbnZlbmllbmNlLCB0aGUgcmV0dXJuIHZhbHVlIGZvbGxvd3MgdGhlIGNv bnZlbnRpb24gb2YKKyAqIFBRYXV0aERhdGFIb29rOiB6ZXJvIG1lYW5zIG5vIGltcGxlbWVudGF0 aW9uIGlzIHByb3ZpZGVkLCBuZWdhdGl2ZSBpbmRpY2F0ZXMKKyAqIGZhaWx1cmUsIGFuZCBwb3Np dGl2ZSBpbmRpY2F0ZXMgc3VjY2Vzcy4KICAqLwogCiAjaWYgIWRlZmluZWQoVVNFX0xJQkNVUkwp CkBAIC04MDAsMTAgKzgzNSwxMCBAQCBjbGVhbnVwX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNv bm4pCiAgKiBUaGlzIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBzdXBwb3J0IHRoZSBidWlsdGluIGZs b3cuCiAgKi8KIAotYm9vbAotdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRo X3N0YXRlICpzdGF0ZSkKK3N0YXRpYyBpbnQKK3VzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25u LCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3Qp CiB7Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCiAjZWxpZiBkZWZpbmVkKFVTRV9E WU5BTUlDX09BVVRIKQpAQCAtODE0LDM2ICs4NDksNiBAQCB1c2VfYnVpbHRpbl9mbG93KFBHY29u biAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQogCiB0eXBlZGVmIGNoYXIgKigqbGlicHFf Z2V0dGV4dF9mdW5jKSAoY29uc3QgY2hhciAqbXNnaWQpOwogCi0vKgotICogRGVmaW5lIGFjY2Vz c29yL211dGF0b3Igc2hpbXMgdG8gaW5qZWN0IGludG8gbGlicHEtb2F1dGgsIHNvIHRoYXQgaXQg ZG9lc24ndAotICogZGVwZW5kIG9uIHRoZSBvZmZzZXRzIHdpdGhpbiBQR2Nvbm4uIChUaGVzZSBo YXZlIGNoYW5nZWQgZHVyaW5nIG1pbm9yIHZlcnNpb24KLSAqIHVwZGF0ZXMgaW4gdGhlIHBhc3Qu KQotICovCi0KLSNkZWZpbmUgREVGSU5FX0dFVFRFUihUWVBFLCBNRU1CRVIpIFwKLQl0eXBlZGVm IFRZUEUgKCpjb25uXyAjIyBNRU1CRVIgIyMgX2Z1bmMpIChQR2Nvbm4gKmNvbm4pOyBcCi0Jc3Rh dGljIFRZUEUgY29ubl8gIyMgTUVNQkVSKFBHY29ubiAqY29ubikgeyByZXR1cm4gY29ubi0+TUVN QkVSOyB9Ci0KLS8qIExpa2UgREVGSU5FX0dFVFRFUiwgYnV0IHJldHVybnMgYSBwb2ludGVyIHRv IHRoZSBtZW1iZXIuICovCi0jZGVmaW5lIERFRklORV9HRVRURVJfUChUWVBFLCBNRU1CRVIpIFwK LQl0eXBlZGVmIFRZUEUgKCpjb25uXyAjIyBNRU1CRVIgIyMgX2Z1bmMpIChQR2Nvbm4gKmNvbm4p OyBcCi0Jc3RhdGljIFRZUEUgY29ubl8gIyMgTUVNQkVSKFBHY29ubiAqY29ubikgeyByZXR1cm4g JmNvbm4tPk1FTUJFUjsgfQotCi0jZGVmaW5lIERFRklORV9TRVRURVIoVFlQRSwgTUVNQkVSKSBc Ci0JdHlwZWRlZiB2b2lkICgqc2V0X2Nvbm5fICMjIE1FTUJFUiAjIyBfZnVuYykgKFBHY29ubiAq Y29ubiwgVFlQRSB2YWwpOyBcCi0Jc3RhdGljIHZvaWQgc2V0X2Nvbm5fICMjIE1FTUJFUihQR2Nv bm4gKmNvbm4sIFRZUEUgdmFsKSB7IGNvbm4tPk1FTUJFUiA9IHZhbDsgfQotCi1ERUZJTkVfR0VU VEVSX1AoUFFFeHBCdWZmZXIsIGVycm9yTWVzc2FnZSk7Ci1ERUZJTkVfR0VUVEVSKGNoYXIgKiwg b2F1dGhfY2xpZW50X2lkKTsKLURFRklORV9HRVRURVIoY2hhciAqLCBvYXV0aF9jbGllbnRfc2Vj cmV0KTsKLURFRklORV9HRVRURVIoY2hhciAqLCBvYXV0aF9kaXNjb3ZlcnlfdXJpKTsKLURFRklO RV9HRVRURVIoY2hhciAqLCBvYXV0aF9pc3N1ZXJfaWQpOwotREVGSU5FX0dFVFRFUihjaGFyICos IG9hdXRoX3Njb3BlKTsKLURFRklORV9HRVRURVIoZmVfb2F1dGhfc3RhdGUgKiwgc2FzbF9zdGF0 ZSk7Ci0KLURFRklORV9TRVRURVIocGdzb2NrZXQsIGFsdHNvY2spOwotREVGSU5FX1NFVFRFUihj aGFyICosIG9hdXRoX3Rva2VuKTsKLQogLyoKICAqIExvYWRzIHRoZSBsaWJwcS1vYXV0aCBwbHVn aW4gdmlhIGRsb3BlbigpLCBpbml0aWFsaXplcyBpdCwgYW5kIHBsdWdzIGl0cwogICogY2FsbGJh Y2tzIGludG8gdGhlIGNvbm5lY3Rpb24ncyBhc3luYyBhdXRoIGhhbmRsZXJzLgpAQCAtODUyLDI3 ICs4NTcsMTkgQEAgREVGSU5FX1NFVFRFUihjaGFyICosIG9hdXRoX3Rva2VuKTsKICAqIGhhbmRs ZSB0aGUgdXNlIGNhc2Ugd2hlcmUgdGhlIGJ1aWxkIHN1cHBvcnRzIGxvYWRpbmcgYSBmbG93IGJ1 dCBhIHVzZXIgZG9lcwogICogbm90IHdhbnQgdG8gaW5zdGFsbCBpdC4gVHJvdWJsZXNob290aW5n IG9mIGxpbmtlci9sb2FkZXIgZmFpbHVyZXMgY2FuIGJlIGRvbmUKICAqIHZpYSBQR09BVVRIREVC VUcuCisgKgorICogVGhlIGxpZmV0aW1lIG9mICpyZXF1ZXN0IGVuZHMgc2hvcnRseSBhZnRlciB0 aGlzIGNhbGwsIHNvIGl0IG11c3QgYmUgY29waWVkCisgKiB0byBsb25nZXItbGl2ZWQgc3RvcmFn ZS4KICAqLwotYm9vbAotdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0 YXRlICpzdGF0ZSkKK3N0YXRpYyBpbnQKK3VzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBm ZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpCiB7 CiAJc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAlzdGF0aWMgcHRocmVhZF9tdXRl eF90IGluaXRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogCWludAkJCWxvY2tl cnI7CiAKLQl2b2lkCQkoKmluaXQpIChwZ3RocmVhZGxvY2tfdCB0aHJlYWRsb2NrLAotCQkJCQkJ IGxpYnBxX2dldHRleHRfZnVuYyBnZXR0ZXh0X2ltcGwsCi0JCQkJCQkgY29ubl9lcnJvck1lc3Nh Z2VfZnVuYyBlcnJtc2dfaW1wbCwKLQkJCQkJCSBjb25uX29hdXRoX2NsaWVudF9pZF9mdW5jIGNs aWVudGlkX2ltcGwsCi0JCQkJCQkgY29ubl9vYXV0aF9jbGllbnRfc2VjcmV0X2Z1bmMgY2xpZW50 c2VjcmV0X2ltcGwsCi0JCQkJCQkgY29ubl9vYXV0aF9kaXNjb3ZlcnlfdXJpX2Z1bmMgZGlzY292 ZXJ5dXJpX2ltcGwsCi0JCQkJCQkgY29ubl9vYXV0aF9pc3N1ZXJfaWRfZnVuYyBpc3N1ZXJpZF9p bXBsLAotCQkJCQkJIGNvbm5fb2F1dGhfc2NvcGVfZnVuYyBzY29wZV9pbXBsLAotCQkJCQkJIGNv bm5fc2FzbF9zdGF0ZV9mdW5jIHNhc2xzdGF0ZV9pbXBsLAotCQkJCQkJIHNldF9jb25uX2FsdHNv Y2tfZnVuYyBzZXRhbHRzb2NrX2ltcGwsCi0JCQkJCQkgc2V0X2Nvbm5fb2F1dGhfdG9rZW5fZnVu YyBzZXR0b2tlbl9pbXBsKTsKLQlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlICgqZmxvdykgKFBH Y29ubiAqY29ubik7Ci0Jdm9pZAkJKCpjbGVhbnVwKSAoUEdjb25uICpjb25uKTsKKwl2b2lkCQko KmluaXQpIChsaWJwcV9nZXR0ZXh0X2Z1bmMgZ2V0dGV4dF9pbXBsKTsKKwlpbnQJCQkoKnN0YXJ0 X2Zsb3cpIChQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpOwog CiAJLyoKIAkgKiBPbiBtYWNPUyBvbmx5LCBsb2FkIHRoZSBtb2R1bGUgdXNpbmcgaXRzIGFic29s dXRlIGluc3RhbGwgcGF0aDsgdGhlCkBAIC04ODUsOSArODgyLDkgQEAgdXNlX2J1aWx0aW5fZmxv dyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAkgKi8KIAljb25zdCBjaGFy ICpjb25zdCBtb2R1bGVfbmFtZSA9CiAjaWYgZGVmaW5lZChfX2Rhcndpbl9fKQotCQlMSUJESVIg Ii9saWJwcS1vYXV0aC0iIFBHX01BSk9SVkVSU0lPTiBETFNVRkZJWDsKKwkJTElCRElSICIvbGli cHEtb2F1dGgiIERMU1VGRklYOwogI2Vsc2UKLQkJImxpYnBxLW9hdXRoLSIgUEdfTUFKT1JWRVJT SU9OIERMU1VGRklYOworCQkibGlicHEtb2F1dGgiIERMU1VGRklYOwogI2VuZGlmCiAKIAlzdGF0 ZS0+YnVpbHRpbl9mbG93ID0gZGxvcGVuKG1vZHVsZV9uYW1lLCBSVExEX05PVyB8IFJUTERfTE9D QUwpOwpAQCAtOTAzLDEyICs5MDAsMTEgQEAgdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4s IGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAkJaWYgKG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5h YmxlZCgpKQogCQkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgZGxvcGVuIGZvciBsaWJwcS1vYXV0 aDogJXNcbiIsIGRsZXJyb3IoKSk7CiAKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9 CiAKIAlpZiAoKGluaXQgPSBkbHN5bShzdGF0ZS0+YnVpbHRpbl9mbG93LCAibGlicHFfb2F1dGhf aW5pdCIpKSA9PSBOVUxMCi0JCXx8IChmbG93ID0gZGxzeW0oc3RhdGUtPmJ1aWx0aW5fZmxvdywg InBnX2ZlX3J1bl9vYXV0aF9mbG93IikpID09IE5VTEwKLQkJfHwgKGNsZWFudXAgPSBkbHN5bShz dGF0ZS0+YnVpbHRpbl9mbG93LCAicGdfZmVfY2xlYW51cF9vYXV0aF9mbG93IikpID09IE5VTEwp CisJCXx8IChzdGFydF9mbG93ID0gZGxzeW0oc3RhdGUtPmJ1aWx0aW5fZmxvdywgInBnX3N0YXJ0 X29hdXRoYmVhcmVyIikpID09IE5VTEwpCiAJewogCQkvKgogCQkgKiBUaGlzIGlzIG1vcmUgb2Yg YW4gZXJyb3IgY29uZGl0aW9uIHRoYW4gdGhlIG9uZSBhYm92ZSwgYnV0IGR1ZSB0bwpAQCAtOTE4 LDcgKzkxNCw3IEBAIHVzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0 ZSAqc3RhdGUpCiAJCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCBkbHN5bSBmb3IgbGlicHEtb2F1 dGg6ICVzXG4iLCBkbGVycm9yKCkpOwogCiAJCWRsY2xvc2Uoc3RhdGUtPmJ1aWx0aW5fZmxvdyk7 Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyoKQEAgLTkzOCw1NiArOTM0 LDQwIEBAIHVzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3Rh dGUpCiAJCUFzc2VydChmYWxzZSk7CiAKIAkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwg ImZhaWxlZCB0byBsb2NrIG11dGV4ICglZCkiLCBsb2NrZXJyKTsKLQkJcmV0dXJuIGZhbHNlOwor CQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWluaXRpYWxpemVkKQogCXsKLQkJaW5pdChwZ19nX3Ro cmVhZGxvY2ssCisJCWluaXQoCiAjaWZkZWYgRU5BQkxFX05MUwotCQkJIGxpYnBxX2dldHRleHQs CisJCQkgbGlicHFfZ2V0dGV4dAogI2Vsc2UKLQkJCSBOVUxMLAorCQkJIE5VTEwKICNlbmRpZgot CQkJIGNvbm5fZXJyb3JNZXNzYWdlLAotCQkJIGNvbm5fb2F1dGhfY2xpZW50X2lkLAotCQkJIGNv bm5fb2F1dGhfY2xpZW50X3NlY3JldCwKLQkJCSBjb25uX29hdXRoX2Rpc2NvdmVyeV91cmksCi0J CQkgY29ubl9vYXV0aF9pc3N1ZXJfaWQsCi0JCQkgY29ubl9vYXV0aF9zY29wZSwKLQkJCSBjb25u X3Nhc2xfc3RhdGUsCi0JCQkgc2V0X2Nvbm5fYWx0c29jaywKLQkJCSBzZXRfY29ubl9vYXV0aF90 b2tlbik7CisJCQkpOwogCiAJCWluaXRpYWxpemVkID0gdHJ1ZTsKIAl9CiAKIAlwdGhyZWFkX211 dGV4X3VubG9jaygmaW5pdF9tdXRleCk7CiAKLQkvKiBTZXQgb3VyIGFzeW5jaHJvbm91cyBjYWxs YmFja3MuICovCi0JY29ubi0+YXN5bmNfYXV0aCA9IGZsb3c7Ci0JY29ubi0+Y2xlYW51cF9hc3lu Y19hdXRoID0gY2xlYW51cDsKLQotCXJldHVybiB0cnVlOworCXJldHVybiAoc3RhcnRfZmxvdyhj b25uLCByZXF1ZXN0KSA9PSAwKSA/IDEgOiAtMTsKIH0KIAogI2Vsc2UKIAogLyoKLSAqIFVzZSB0 aGUgYnVpbHRpbiBmbG93IGluIGxpYnBxLW9hdXRoLmEgKHNlZSBsaWJwcS1vYXV0aC9vYXV0aC1j dXJsLmgpLgorICogRm9yIHN0YXRpYyBidWlsZHMsIHdlIGNhbiBqdXN0IGNhbGwgcGdfc3RhcnRf b2F1dGhiZWFyZXIoKSBkaXJlY3RseS4gSXQncworICogcHJvdmlkZWQgYnkgbGlicHEtb2F1dGgu YS4KICAqLwogCi1leHRlcm4gUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBwZ19mZV9ydW5fb2F1 dGhfZmxvdyhQR2Nvbm4gKmNvbm4pOwotZXh0ZXJuIHZvaWQgcGdfZmVfY2xlYW51cF9vYXV0aF9m bG93KFBHY29ubiAqY29ubik7CitleHRlcm4gaW50CXBnX3N0YXJ0X29hdXRoYmVhcmVyKFBHY29u biAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCk7CiAKLWJvb2wKLXVzZV9i dWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCitzdGF0aWMg aW50Cit1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRl LCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KQogewotCS8qIFNldCBvdXIgYXN5bmNo cm9ub3VzIGNhbGxiYWNrcy4gKi8KLQljb25uLT5hc3luY19hdXRoID0gcGdfZmVfcnVuX29hdXRo X2Zsb3c7Ci0JY29ubi0+Y2xlYW51cF9hc3luY19hdXRoID0gcGdfZmVfY2xlYW51cF9vYXV0aF9m bG93OwotCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIChwZ19zdGFydF9vYXV0aGJlYXJlcihjb25u LCByZXF1ZXN0KSA9PSAwKSA/IDEgOiAtMTsKIH0KIAogI2VuZGlmCQkJCQkJCS8qIFVTRV9MSUJD VVJMICovCkBAIC0xMDAwLDExICs5ODAsMTEgQEAgdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNv bm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKICAqIElmIHRoZSBhcHBsaWNhdGlvbiBoYXMgcmVn aXN0ZXJlZCBhIGN1c3RvbSBmbG93IGhhbmRsZXIgdXNpbmcKICAqIFBRQVVUSERBVEFfT0FVVEhf QkVBUkVSX1RPS0VOW19WMl0sIGl0IG1heSBlaXRoZXIgcmV0dXJuIGEgdG9rZW4gaW1tZWRpYXRl bHkKICAqIChlLmcuIGlmIGl0IGhhcyBvbmUgY2FjaGVkIGZvciBpbW1lZGlhdGUgdXNlKSwgb3Ig c2V0IHVwIGZvciBhIHNlcmllcyBvZgotICogYXN5bmNocm9ub3VzIGNhbGxiYWNrcyB3aGljaCB3 aWxsIGJlIG1hbmFnZWQgYnkgcnVuX3VzZXJfb2F1dGhfZmxvdygpLgorICogYXN5bmNocm9ub3Vz IGNhbGxiYWNrcyB3aGljaCB3aWxsIGJlIG1hbmFnZWQgYnkgcnVuX29hdXRoX2Zsb3coKS4KICAq CiAgKiBJZiB0aGUgZGVmYXVsdCBoYW5kbGVyIGlzIHVzZWQgaW5zdGVhZCwgYSBEZXZpY2UgQXV0 aG9yaXphdGlvbiBmbG93IGlzIHVzZWQKLSAqIGZvciB0aGUgY29ubmVjdGlvbiBpZiBzdXBwb3J0 IGhhcyBiZWVuIGNvbXBpbGVkIGluLiAoU2VlCi0gKiBmZS1hdXRoLW9hdXRoLWN1cmwuYyBmb3Ig aW1wbGVtZW50YXRpb24gZGV0YWlscy4pCisgKiBmb3IgdGhlIGNvbm5lY3Rpb24gaWYgc3VwcG9y dCBoYXMgYmVlbiBjb21waWxlZCBpbi4gKFNlZSBvYXV0aC1jdXJsLmMgZm9yCisgKiBpbXBsZW1l bnRhdGlvbiBkZXRhaWxzLikKICAqCiAgKiBJZiBuZWl0aGVyIGEgY3VzdG9tIGhhbmRsZXIgbm9y IHRoZSBidWlsdGluIGZsb3cgaXMgYXZhaWxhYmxlLCB0aGUgY29ubmVjdGlvbgogICogZmFpbHMg aGVyZS4KQEAgLTEwMjYsMTEgKzEwMDYsMTcgQEAgc2V0dXBfdG9rZW5fcmVxdWVzdChQR2Nvbm4g KmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAogCS8qCiAJICogVGhlIGNsaWVudCBtYXkg aGF2ZSBvdmVycmlkZGVuIHRoZSBPQXV0aCBmbG93LiBUcnkgdGhlIHYyIGhvb2sgZmlyc3QsCi0J ICogdGhlbiBmYWxsIGJhY2sgdG8gdGhlIHYxIGltcGxlbWVudGF0aW9uLgorCSAqIHRoZW4gZmFs bCBiYWNrIHRvIHRoZSB2MSBpbXBsZW1lbnRhdGlvbi4gSWYgbmVpdGhlciBpcyBhdmFpbGFibGUs IHRyeQorCSAqIHRoZSBidWlsdGluIGZsb3cuCiAJICovCiAJcmVzID0gUFFhdXRoRGF0YUhvb2so UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIsIGNvbm4sICZyZXF1ZXN0KTsKIAlpZiAo cmVzID09IDApCiAJCXJlcyA9IFBRYXV0aERhdGFIb29rKFBRQVVUSERBVEFfT0FVVEhfQkVBUkVS X1RPS0VOLCBjb25uLCAmcmVxdWVzdCk7CisJaWYgKHJlcyA9PSAwKQorCXsKKwkJc3RhdGUtPmJ1 aWx0aW4gPSB0cnVlOworCQlyZXMgPSB1c2VfYnVpbHRpbl9mbG93KGNvbm4sIHN0YXRlLCAmcmVx dWVzdCk7CisJfQogCiAJaWYgKHJlcyA+IDApCiAJewpAQCAtMTA2NSwxNiArMTA1MSwxNiBAQCBz ZXR1cF90b2tlbl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQog CiAJCSpyZXF1ZXN0X2NvcHkgPSByZXF1ZXN0OwogCi0JCWNvbm4tPmFzeW5jX2F1dGggPSBydW5f dXNlcl9vYXV0aF9mbG93OwotCQljb25uLT5jbGVhbnVwX2FzeW5jX2F1dGggPSBjbGVhbnVwX3Vz ZXJfb2F1dGhfZmxvdzsKKwkJY29ubi0+YXN5bmNfYXV0aCA9IHJ1bl9vYXV0aF9mbG93OworCQlj b25uLT5jbGVhbnVwX2FzeW5jX2F1dGggPSBjbGVhbnVwX29hdXRoX2Zsb3c7CiAJCXN0YXRlLT5h c3luY19jdHggPSByZXF1ZXN0X2NvcHk7CiAJfQogCWVsc2UgaWYgKHJlcyA8IDApCiAJewotCQly ZXBvcnRfdXNlcl9mbG93X2Vycm9yKGNvbm4sICZyZXF1ZXN0KTsKKwkJcmVwb3J0X2Zsb3dfZXJy b3IoY29ubiwgJnJlcXVlc3QpOwogCQlnb3RvIGZhaWw7CiAJfQotCWVsc2UgaWYgKCF1c2VfYnVp bHRpbl9mbG93KGNvbm4sIHN0YXRlKSkKKwllbHNlCiAJewogCQlsaWJwcV9hcHBlbmRfY29ubl9l cnJvcihjb25uLCAibm8gT0F1dGggZmxvd3MgYXJlIGF2YWlsYWJsZSAodHJ5IGluc3RhbGxpbmcg dGhlIGxpYnBxLW9hdXRoIHBhY2thZ2UpIik7CiAJCWdvdG8gZmFpbDsKLS0gCjIuMzQuMQoK --0000000000004484d6064b99ba84 Content-Type: application/x-patch; name="v3-0005-libpq-oauth-Never-link-against-libpq-s-encoding-f.patch" Content-Disposition: attachment; filename="v3-0005-libpq-oauth-Never-link-against-libpq-s-encoding-f.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlvfhuqu4 RnJvbSA2MGMyYTI4OTM5MDU2ZWU2MDgwYTUwNWNjY2I1MzYzNmIxMzY2NzZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDA5OjUzOjQ0IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2MyA1LzZdIGxpYnBxLW9hdXRoOiBOZXZlciBsaW5rIGFnYWluc3QgbGlicHEncyBl bmNvZGluZwogZnVuY3Rpb25zCgpOb3cgdGhhdCBsaWJwcS1vYXV0aCBkb2Vzbid0IGhhdmUgdG8g bWF0Y2ggdGhlIG1ham9yIHZlcnNpb24gb2YgbGlicHEsCnNvbWUgdGhpbmdzIGluIHBnX3djaGFy LmggYXJlIHRlY2huaWNhbGx5IHVuc2FmZSBmb3IgdXMgdG8gdXNlLiAoU2VlCmI2YzdjZmFjOCBm b3IgYSBmdWxsZXIgZGlzY3Vzc2lvbi4pIFRoaXMgaXMgdW5saWtlbHkgdG8gYmUgYSBwcm9ibGVt IC0tCndlIG9ubHkgY2FyZSBhYm91dCBVVEYtOCBpbiB0aGUgY29udGV4dCBvZiBPQXV0aCByaWdo dCBub3cgLS0gYnV0IGlmCmFueW9uZSBkaWQgaW50cm9kdWNlIGEgd2F5IHRvIGhpdCBpdCwgaXQn ZCBiZSBleHRyZW1lbHkgZGlmZmljdWx0IHRvCmRlYnVnIG9yIHJlcHJvZHVjZSwgYW5kIGl0J2Qg YmUgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB0bwpib290LgoKRGVmaW5lIFVT RV9QUklWQVRFX0VOQ09ESU5HX0ZVTkNTIHNvIHRoYXQgYW55b25lIHdobyB0cmllcyB0byBhZGQg YQpkZXBlbmRlbmN5IG9uIHRoZSBleHBvcnRlZCBBUElzIHdpbGwgc2ltcGx5IGZhaWwgdG8gbGlu ayB0aGUgc2hhcmVkCm1vZHVsZS4KClJldmlld2VkLWJ5OiBDaGFvIExpIDxsaS5ldmFuLmNoYW9A Z21haWwuY29tPgpSZXZpZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJj b25hLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQU9ZbWklMkJtckdnJTJC bl9YMk1PTGdlV2NqM3ZfTTAwZ1I4dXpfRDdtTTh6JTNEZFgxSllWYmclNDBtYWlsLmdtYWlsLmNv bQotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIHwgMTAgKysrKysr KysrLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgICAgfCAxMSArKysrKysr KystLQogMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKaW5kZXggNTliY2U0OTAzZTUuLmM3 NjlhZjhlNmU2IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5i dWlsZAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZApAQCAtMTIs NyArMTIsMTUgQEAgbGlicHFfb2F1dGhfc291cmNlcyA9IGZpbGVzKAogbGlicHFfb2F1dGhfc29f c291cmNlcyA9IGZpbGVzKAogICAnb2F1dGgtdXRpbHMuYycsCiApCi1saWJwcV9vYXV0aF9zb19j X2FyZ3MgPSBbJy1EVVNFX0RZTkFNSUNfT0FVVEgnXQorbGlicHFfb2F1dGhfc29fY19hcmdzID0g WworICAnLURVU0VfRFlOQU1JQ19PQVVUSCcsCisKKyAgIyBBIGJpdCBvZiBmb3J3YXJkLWxvb2tp bmcgcGFyYW5vaWE6IGRvbid0IGFsbG93IGFueW9uZSB0byBhY2NpZGVudGFsbHkgZGVwZW5kCisg ICMgb24gdGhlIGVuY29kaW5nIElEcyBjb21pbmcgZnJvbSBsaWJwcS4gVGhleSdyZSBub3QgZ3Vh cmFudGVlZCB0byBtYXRjaCB0aGUKKyAgIyBJRHMgaW4gdXNlIGJ5IG91ciB2ZXJzaW9uIG9mIHBn Y29tbW9uLCBub3cgdGhhdCB3ZSBhbGxvdyB0aGUgbWFqb3IgdmVyc2lvbgorICAjIG9mIGxpYnBx IHRvIGRpZmZlciBmcm9tIHRoZSBtYWpvciB2ZXJzaW9uIG9mIGxpYnBxLW9hdXRoLgorICAnLURV U0VfUFJJVkFURV9FTkNPRElOR19GVU5DUycsCitdCiAKIGV4cG9ydF9maWxlID0gY3VzdG9tX3Rh cmdldCgnbGlicHEtb2F1dGguZXhwb3J0cycsCiAgIGt3YXJnczogZ2VuX2V4cG9ydF9rd2FyZ3Ms CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZSBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCmluZGV4IGU5MDQ4MjU2NmIxLi4yMzEzNDkw MzRkMSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKKysr IGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDE0IEBA IG92ZXJyaWRlIHNobGliIDo9IGxpYiQoTkFNRSkkKERMU1VGRklYKQogb3ZlcnJpZGUgQ1BQRkxB R1MgOj0gLUkkKGxpYnBxX3NyY2RpcikgLUkkKHRvcF9idWlsZGRpcikvc3JjL3BvcnQgJChDUFBG TEFHUykgJChMSUJDVVJMX0NQUEZMQUdTKQogb3ZlcnJpZGUgQ0ZMQUdTICs9ICQoUFRIUkVBRF9D RkxBR1MpCiAKK292ZXJyaWRlIENQUEZMQUdTX1NITElCIDo9IC1EVVNFX0RZTkFNSUNfT0FVVEgK KworIyBBIGJpdCBvZiBmb3J3YXJkLWxvb2tpbmcgcGFyYW5vaWE6IGRvbid0IGFsbG93IGxpYnBx LW9hdXRoLnNvIHRvIGFjY2lkZW50YWxseQorIyBkZXBlbmQgb24gdGhlIGVuY29kaW5nIElEcyBj b21pbmcgZnJvbSBsaWJwcS4gVGhleSdyZSBub3QgZ3VhcmFudGVlZCB0byBtYXRjaAorIyB0aGUg SURzIGluIHVzZSBieSBvdXIgdmVyc2lvbiBvZiBwZ2NvbW1vbiwgbm93IHRoYXQgd2UgYWxsb3cg dGhlIG1ham9yIHZlcnNpb24KKyMgb2YgbGlicHEgdG8gZGlmZmVyIGZyb20gdGhlIG1ham9yIHZl cnNpb24gb2YgbGlicHEtb2F1dGguCitvdmVycmlkZSBDUFBGTEFHU19TSExJQiArPSAtRFVTRV9Q UklWQVRFX0VOQ09ESU5HX0ZVTkNTCisKIE9CSlMgPSBcCiAJJChXSU4zMlJFUykKIApAQCAtMzQs OCArNDIsNyBAQCBPQkpTX1NITElCID0gXAogCW9hdXRoLWN1cmxfc2hsaWIubyBcCiAJb2F1dGgt dXRpbHMubyBcCiAKLW9hdXRoLXV0aWxzLm86IG92ZXJyaWRlIENQUEZMQUdTICs9IC1EVVNFX0RZ TkFNSUNfT0FVVEgKLW9hdXRoLWN1cmxfc2hsaWIubzogb3ZlcnJpZGUgQ1BQRkxBR1NfU0hMSUIg Kz0gLURVU0VfRFlOQU1JQ19PQVVUSAorb2F1dGgtdXRpbHMubzogb3ZlcnJpZGUgQ1BQRkxBR1Mg Kz0gJChDUFBGTEFHU19TSExJQikKIAogIyBBZGQgc2hsaWItL3N0bGliLXNwZWNpZmljIG9iamVj dHMuCiAkKHNobGliKTogb3ZlcnJpZGUgT0JKUyArPSAkKE9CSlNfU0hMSUIpCi0tIAoyLjM0LjEK Cg== --0000000000004484d6064b99ba84 Content-Type: application/x-patch; name="v3-0006-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Disposition: attachment; filename="v3-0006-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlvfhy5f5 RnJvbSBiNjk3NGQ1YzhlMmUzYzJmNDA3YjdlYjJiNzIyNTZmODA5NmRmNzg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDE1OjQ3OjIzIC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2MyA2LzZdIFdJUDogSW50cm9kdWNlIHRoaXJkLXBhcnR5IE9BdXRoIGZsb3cgcGx1 Z2lucz8KClRoaXMgZXhwZXJpbWVudGFsIGNvbW1pdCBwcm9tb3RlcyB0aGUgcGdfc3RhcnRfb2F1 dGhiZWFyZXIgQVBJIHRvIGEKcHVibGljIGhlYWRlciAobGlicHEtb2F1dGguaCkgYW5kIGFkZHMg YSBQR09BVVRITU9EVUxFIGVudmlyb25tZW50CnZhcmlhYmxlIHRoYXQgb3ZlcnJpZGVzIHRoZSBs b2FkIHBhdGggZm9yIHRoZSBwbHVnaW4sIGFsbG93aW5nIHVzZXJzIHRvCnByb3ZpZGUgdGhlaXIg b3duLiBUaGUgbGlicHFfb2F1dGhfaW5pdCBmdW5jdGlvbiBpcyBub3cgb3B0aW9uYWwsIGFuZAp3 aWxsIHJlbWFpbiB1bmRvY3VtZW50ZWQuIChNb2R1bGVzIHRoYXQgZG9uJ3QgcHJvdmlkZSBpdCBh cmUgbWFya2VkIGFzCnVzZXItZGVmaW5lZC4pCgpUaGlzIGlzIGEgcmVsYXRpdmVseSBzbWFsbCBh bW91bnQgb2YgaW1wbGVtZW50YXRpb24gY2hhbmdlLCBidXQKdW5mb3J0dW5hdGVseSB0aGUgdGVz dHMgaGF2ZSBhIGxhcmdlIGFtb3VudCBvZiBjb2RlIG1vdGlvbiB0byBiZSBhYmxlIHRvCnNoYXJl IGxvZ2ljIGJldHdlZW4gdGhlIHRlc3QgZXhlY3V0YWJsZSBhbmQgcGx1Z2luLiBJIG1pZ2h0IG5l ZWQgdG8Kc3BsaXQgdGhhdCBpbnRvIG11bHRpcGxlIHNxdWFzaCEgY29tbWl0cyB0byBtYWtlIGl0 IG1vcmUgZWFzaWx5CnJldmlld2FibGUuCgpUT0RPOiBmaWd1cmUgb3V0IFBHRExMRVhQT1JULCB3 aGljaCB3ZSBkbyBub3QgY3VycmVudGx5IHByb3ZpZGUgcHVibGljbHkKVE9ETzogbG9jayBkb3du IFBHT0FVVEhNT0RVTEUgYXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGludHJvZHVjaW5nIGV4Y2l0aW5n CiAgICAgIG5ldyB2dWxuZXJhYmlsaXRpZXMKVE9ETzogaG93IGhhcmQgd291bGQgaXQgYmUgdG8g c3VwcG9ydCBXaW5kb3dzIGhlcmU/CgpSZXZpZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQu cGFycmFnaUBwZXJjb25hLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQU9Z bWklMkJtckdnJTJCbl9YMk1PTGdlV2NqM3ZfTTAwZ1I4dXpfRDdtTTh6JTNEZFgxSllWYmclNDBt YWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgfCAgIDIgKwogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oICAg ICAgIHwgIDI0IC0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmggICAgICAg ICAgfCAgIDIgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLW9hdXRoLmggICAgICAgICAg ICB8ICA1MiArKysKIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyAgICAg ICB8ICAgMiArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jICAgICAgICAg IHwgMTIxICsrKystLQogc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvbWVzb24uYnVp bGQgIHwgIDE1ICsKIHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL01ha2VmaWxlICAg ICB8ICAxMCArLQogLi4uL29hdXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5oICAgICAg IHwgIDI2ICsrCiBzcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9mbG93LmMg fCAgNjkgKysrKwogLi4uL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jICAgICAg IHwgMzE5ICstLS0tLS0tLS0tLS0tLQogLi4uL29hdXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2Nv bW1vbi5jICAgICAgIHwgMzc0ICsrKysrKysrKysrKysrKysrKwogLi4uL21vZHVsZXMvb2F1dGhf dmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbCAgIHwgIDU2ICsrLQogMTQgZmlsZXMgY2hhbmdlZCwg Njg3IGluc2VydGlvbnMoKyksIDM4NiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBz cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1vYXV0aC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2Zs b3cuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9y L29hdXRoX3Rlc3RfY29tbW9uLmMKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9t ZXNvbi5idWlsZCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCmluZGV4IGM1ZWNk OWMzYTg3Li5jYWZmNzE5NGVhZiAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbWVz b24uYnVpbGQKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQKQEAgLTEyOCw2 ICsxMjgsNyBAQCBwa2djb25maWcuZ2VuZXJhdGUoCiBpbnN0YWxsX2hlYWRlcnMoCiAgICdsaWJw cS1mZS5oJywKICAgJ2xpYnBxLWV2ZW50cy5oJywKKyAgJ2xpYnBxLW9hdXRoLmgnLAogKQogCiBp bnN0YWxsX2hlYWRlcnMoCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmls ZSBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCmluZGV4IGJmNGJhYTkyOTE3Li5kNzg3 ZjVhMzBkZiAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKKysrIGIv c3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKQEAgLTE1NSw2ICsxNTUsNyBAQCAkKHRvcF9i dWlsZGRpcikvc3JjL3BvcnQvcGdfY29uZmlnX3BhdGhzLmg6CiBpbnN0YWxsOiBhbGwgaW5zdGFs bGRpcnMgaW5zdGFsbC1saWIKIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2xpYnBxLWZlLmgg JyQoREVTVERJUikkKGluY2x1ZGVkaXIpJwogCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbGli cHEtZXZlbnRzLmggJyQoREVTVERJUikkKGluY2x1ZGVkaXIpJworCSQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvbGlicHEtb2F1dGguaCAnJChERVNURElSKSQoaW5jbHVkZWRpciknCiAJJChJTlNU QUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1pbnQuaCAnJChERVNURElSKSQoaW5jbHVkZWRpcl9p bnRlcm5hbCknCiAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9mZS1hdXRoLXNhc2wuaCAnJChE RVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCknCiAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGly KS9wcWV4cGJ1ZmZlci5oICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScKQEAgLTE3 Nyw2ICsxNzgsNyBAQCBpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtbGliCiB1bmluc3RhbGw6IHVu aW5zdGFsbC1saWIKIAlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcikvbGlicHEtZmUuaCcK IAlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcikvbGlicHEtZXZlbnRzLmgnCisJcm0gLWYg JyQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYnBxLW9hdXRoLmgnCiAJcm0gLWYgJyQoREVTVERJ UikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpL2xpYnBxLWludC5oJwogCXJtIC1mICckKERFU1RESVIp JChpbmNsdWRlZGlyX2ludGVybmFsKS9mZS1hdXRoLXNhc2wuaCcKIAlybSAtZiAnJChERVNURElS KSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkvcHFleHBidWZmZXIuaCcKZGlmZiAtLWdpdCBhL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx LW9hdXRoL29hdXRoLWN1cmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ0ZGQ3 NjYyMTcuLjAwMDAwMDAwMDAwCi0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRo LWN1cmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotICoKLSAqIG9hdXRoLWN1cmwuaAotICoKLSAqCSAgRGVmaW5pdGlvbnMgZm9yIE9BdXRoIERl dmljZSBBdXRob3JpemF0aW9uIG1vZHVsZQotICoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAotICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKLSAqCi0gKiBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmgKLSAq Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jaWZuZGVmIE9BVVRIX0NVUkxfSAotI2RlZmlu ZSBPQVVUSF9DVVJMX0gKLQotI2luY2x1ZGUgImxpYnBxLWZlLmgiCi0KLS8qIEV4cG9ydGVkIGZs b3cgY2FsbGJhY2suICovCi1leHRlcm4gUEdETExFWFBPUlQgaW50IHBnX3N0YXJ0X29hdXRoYmVh cmVyKFBHY29ubiAqY29ubiwKLQkJCQkJCQkJCQkJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVx dWVzdCk7Ci0KLSNlbmRpZgkJCQkJCQkvKiBPQVVUSF9DVVJMX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWF1dGgtb2F1dGguaAppbmRleCA1MTEyODQ2MTRmNy4uNWM5NTE4N2Y2ZDggMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaAorKysgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmgKQEAgLTM1LDcgKzM1LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QKIAl2b2lkCSAgICphc3luY19jdHg7CiAKIAlib29sCQlidWlsdGluOwotCXZvaWQJICAgKmJ1 aWx0aW5fZmxvdzsKKwl2b2lkCSAgICpmbG93X21vZHVsZTsKIH0gZmVfb2F1dGhfc3RhdGU7CiAK IGV4dGVybiB2b2lkIHBxQ2xlYXJPQXV0aFRva2VuKFBHY29ubiAqY29ubik7CmRpZmYgLS1naXQg YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1vYXV0aC5oIGIvc3JjL2ludGVyZmFjZXMvbGli cHEvbGlicHEtb2F1dGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MmE2MmIzMzBiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJw cS1vYXV0aC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGxp YnBxLW9hdXRoLmgKKyAqCSAgVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHMgYW5kIGZ1bmN0aW9u cyB1c2VkIGJ5IGN1c3RvbSBPQXV0aCBwbHVnaW5zLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBzcmMvaW50ZXJm YWNlcy9saWJwcS9saWJwcS1vYXV0aC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor I2lmbmRlZiBMSUJQUV9PQVVUSF9ICisjZGVmaW5lIExJQlBRX09BVVRIX0gKKworI2luY2x1ZGUg ImxpYnBxLWZlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlm CisKKy8qIFhYWCBjYW4ndCByZWx5IG9uIGMuaCwgYnV0IGR1cGxpY2F0aW5nIHRoaXMgaXMgYXNr aW5nIGZvciB0cm91YmxlICovCisjaWZuZGVmIFBHRExMRVhQT1JUCisjaWZkZWYgX1dJTjMyCisj ZGVmaW5lIFBHRExMRVhQT1JUIF9fZGVjbHNwZWMgKGRsbGV4cG9ydCkKKyNlbGlmIGRlZmluZWQo X19oYXNfYXR0cmlidXRlKQorI2lmIF9faGFzX2F0dHJpYnV0ZSh2aXNpYmlsaXR5KQorI2RlZmlu ZSBQR0RMTEVYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorI2Vs c2UKKyNkZWZpbmUgUEdETExFWFBPUlQKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgUEdETExFWFBP UlQKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBWMSBBUEkKKyAqCisgKiBGbG93IHBsdWdpbnMg bXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2FsbGJhY2suCisgKgorICog VE9ETzogcHJvdmlkZSBhIG1hZ2ljIHN0cnVjdCB0aGF0IGFsbG93cyBiYWNrd2FyZHMgYnV0IG5v dCBmb3J3YXJkcyBjb21wYXQ/CisgKi8KK2V4dGVybiBQR0RMTEVYUE9SVCBpbnQgcGdfc3RhcnRf b2F1dGhiZWFyZXIoUEdjb25uICpjb25uLAorCQkJCQkJCQkJCQlQR29hdXRoQmVhcmVyUmVxdWVz dFYyICpyZXF1ZXN0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlm CQkJCQkJCS8qIExJQlBRX09BVVRIX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL29hdXRoLWN1cmwuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRo LWN1cmwuYwppbmRleCBjZWJlMGEyNGFkMC4uOTYxZmY4YjQ5YWMgMTAwNjQ0Ci0tLSBhL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYworKysgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKQEAgLTI5LDggKzI5LDggQEAKICNlbmRpZgogCiAjaW5j bHVkZSAiY29tbW9uL2pzb25hcGkuaCIKKyNpbmNsdWRlICJsaWJwcS1vYXV0aC5oIgogI2luY2x1 ZGUgIm1iL3BnX3djaGFyLmgiCi0jaW5jbHVkZSAib2F1dGgtY3VybC5oIgogCiAjaWZkZWYgVVNF X0RZTkFNSUNfT0FVVEgKIApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0 aC1vYXV0aC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jCmluZGV4IDkw NGY0M2U5MGVhLi5lYTBkYWRkZjRlOCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtYXV0aC1vYXV0aC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGgu YwpAQCAtMTcsNiArMTcsOCBAQAogCiAjaWZkZWYgVVNFX0RZTkFNSUNfT0FVVEgKICNpbmNsdWRl IDxkbGZjbi5oPgorI2Vsc2UKKyNpbmNsdWRlICJsaWJwcS1vYXV0aC5oIgogI2VuZGlmCiAKICNp bmNsdWRlICJjb21tb24vYmFzZTY0LmgiCkBAIC04ODAsNDEgKzg4Miw2NyBAQCB1c2VfYnVpbHRp bl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlLCBQR29hdXRoQmVhcmVy UmVxdWVzdFYyICpyZQogCSAqIE9uIHRoZSBvdGhlciBwbGF0Zm9ybXMsIGxvYWQgdGhlIG1vZHVs ZSB1c2luZyBvbmx5IHRoZSBiYXNlbmFtZSwgdG8KIAkgKiByZWx5IG9uIHRoZSBydW50aW1lIGxp bmtlcidzIHN0YW5kYXJkIHNlYXJjaCBiZWhhdmlvci4KIAkgKi8KLQljb25zdCBjaGFyICpjb25z dCBtb2R1bGVfbmFtZSA9CisJY29uc3QgY2hhciAqbW9kdWxlX25hbWUgPQogI2lmIGRlZmluZWQo X19kYXJ3aW5fXykKIAkJTElCRElSICIvbGlicHEtb2F1dGgiIERMU1VGRklYOwogI2Vsc2UKIAkJ ImxpYnBxLW9hdXRoIiBETFNVRkZJWDsKICNlbmRpZgogCi0Jc3RhdGUtPmJ1aWx0aW5fZmxvdyA9 IGRsb3Blbihtb2R1bGVfbmFtZSwgUlRMRF9OT1cgfCBSVExEX0xPQ0FMKTsKLQlpZiAoIXN0YXRl LT5idWlsdGluX2Zsb3cpCisJLyotCisJICogQWRkaXRpb25hbGx5LCB0aGUgdXNlciBtYXkgb3Zl cnJpZGUgdGhlIG1vZHVsZSBwYXRoIGV4cGxpY2l0bHkgdG8gYmUKKwkgKiBhYmxlIHRvIHByb3Zp ZGUgdGhlaXIgb3duIG1vZHVsZSwgdmlhIFBHT0FVVEhNT0RVTEUuCisJICoKKwkgKiBUT0RPOiBo YXZlIHRvIHRoaW5rIGFib3V0IF9hbGxfIHRoZSBzZWN1cml0eSByYW1pZmljYXRpb25zIG9mIHRo aXMuIFdoYXQKKwkgKiBleGlzdGluZyBwcm90ZWN0aW9ucyBpbiBMRF9MSUJSQVJZX1BBVEggKGFu ZC9vciBTSVApIGFyZSB3ZSBwb3RlbnRpYWxseQorCSAqIGJ5cGFzc2luZz8gU2hvdWxkIHdlIGNo ZWNrIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgZmlsZSBzb21laG93Li4uPworCSAqIFRPRE86IG1h eWJlIGRpc2FsbG93IGFueXRoaW5nIG5vdCB1bmRlcm5lYXRoIExJQkRJUj8gb3IgUEtHTElCRElS PworCSAqIFNob3VsZCBpdCBoYXZlIGEgbmFtaW5nIGNvbnZlbnRpb24/CisJICovCisJY29uc3Qg Y2hhciAqZW52ID0gZ2V0ZW52KCJQR09BVVRITU9EVUxFIik7CisKKwlpZiAoZW52ICYmIGVudlsw XSkKKwkJbW9kdWxlX25hbWUgPSBlbnY7CisJZWxzZQorCQlzdGF0ZS0+YnVpbHRpbiA9IHRydWU7 CisKKwlzdGF0ZS0+Zmxvd19tb2R1bGUgPSBkbG9wZW4obW9kdWxlX25hbWUsIFJUTERfTk9XIHwg UlRMRF9MT0NBTCk7CisJaWYgKCFzdGF0ZS0+Zmxvd19tb2R1bGUpCiAJewogCQkvKgogCQkgKiBG b3IgZW5kIHVzZXJzLCB0aGlzIHByb2JhYmx5IGlzbid0IGFuIGVycm9yIGNvbmRpdGlvbiwgaXQg anVzdAogCQkgKiBtZWFucyB0aGUgZmxvdyBpc24ndCBpbnN0YWxsZWQuIERldmVsb3BlcnMgYW5k IHBhY2thZ2UgbWFpbnRhaW5lcnMKLQkJICogbWF5IHdhbnQgdG8gZGVidWcgdGhpcyB2aWEgdGhl IFBHT0FVVEhERUJVRyBlbnZ2YXIsIHRob3VnaC4KKwkJICogbWF5IHdhbnQgdG8gZGVidWcgdGhp cyB2aWEgdGhlIFBHT0FVVEhERUJVRyBlbnZ2YXIsIHRob3VnaCwgYW5kIHdlCisJCSAqIHNob3Vs ZCBiZSBtb3JlIG5vaXN5IGlmIHVzZXJzIHRyaWVkIHRvIHByb3ZpZGUgYSBQR09BVVRITU9EVUxF LgogCQkgKgogCQkgKiBOb3RlIHRoYXQgUE9TSVggZGxlcnJvcigpIGlzbid0IGd1YXJhbnRlZWQg dG8gYmUgdGhyZWFkc2FmZS4KIAkJICovCiAJCWlmIChvYXV0aF91bnNhZmVfZGVidWdnaW5nX2Vu YWJsZWQoKSkKLQkJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIGRsb3BlbiBmb3IgbGlicHEtb2F1 dGg6ICVzXG4iLCBkbGVycm9yKCkpOworCQkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgZGxvcGVu IGZvciAlczogJXNcbiIsIG1vZHVsZV9uYW1lLCBkbGVycm9yKCkpOworCisJCWlmIChzdGF0ZS0+ YnVpbHRpbikKKwkJCXJldHVybiAwOwogCi0JCXJldHVybiAwOworCQlyZXF1ZXN0LT5lcnJvciA9 IGxpYnBxX2dldHRleHQoInBsdWdpbiBjb3VsZCBub3QgYmUgbG9hZGVkIik7CisJCXJldHVybiAt MTsKIAl9CiAKLQlpZiAoKGluaXQgPSBkbHN5bShzdGF0ZS0+YnVpbHRpbl9mbG93LCAibGlicHFf b2F1dGhfaW5pdCIpKSA9PSBOVUxMCi0JCXx8IChzdGFydF9mbG93ID0gZGxzeW0oc3RhdGUtPmJ1 aWx0aW5fZmxvdywgInBnX3N0YXJ0X29hdXRoYmVhcmVyIikpID09IE5VTEwpCisJaWYgKChzdGFy dF9mbG93ID0gZGxzeW0oc3RhdGUtPmZsb3dfbW9kdWxlLCAicGdfc3RhcnRfb2F1dGhiZWFyZXIi KSkgPT0gTlVMTCkKIAl7CiAJCS8qCiAJCSAqIFRoaXMgaXMgbW9yZSBvZiBhbiBlcnJvciBjb25k aXRpb24gdGhhbiB0aGUgb25lIGFib3ZlLCBidXQgZHVlIHRvCiAJCSAqIHRoZSBkbGVycm9yKCkg dGhyZWFkc2FmZXR5IGlzc3VlLCBsb2NrIGl0IGJlaGluZCBQR09BVVRIREVCVUcgdG9vLgogCQkg Ki8KIAkJaWYgKG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCgpKQotCQkJZnByaW50Zihz dGRlcnIsICJmYWlsZWQgZGxzeW0gZm9yIGxpYnBxLW9hdXRoOiAlc1xuIiwgZGxlcnJvcigpKTsK KwkJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIGRsc3ltIGZvciAlczogJXNcbiIsIG1vZHVsZV9u YW1lLCBkbGVycm9yKCkpOworCisJCWRsY2xvc2Uoc3RhdGUtPmZsb3dfbW9kdWxlKTsKKworCQlp ZiAoc3RhdGUtPmJ1aWx0aW4pCisJCQlyZXR1cm4gMDsKIAotCQlkbGNsb3NlKHN0YXRlLT5idWls dGluX2Zsb3cpOwotCQlyZXR1cm4gMDsKKwkJcmVxdWVzdC0+ZXJyb3IgPSBsaWJwcV9nZXR0ZXh0 KCJwbHVnaW4gZW50cnkgcG9pbnQgY291bGQgbm90IGJlIGxvY2F0ZWQiKTsKKwkJcmV0dXJuIC0x OwogCX0KIAogCS8qCkBAIC05MjMsMzQgKzk1MSw0NiBAQCB1c2VfYnVpbHRpbl9mbG93KFBHY29u biAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlLCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpy ZQogCSAqLwogCiAJLyoKLQkgKiBXZSBuZWVkIHRvIGluamVjdCBuZWNlc3NhcnkgZnVuY3Rpb24g cG9pbnRlcnMgaW50byB0aGUgbW9kdWxlLiBUaGlzCi0JICogb25seSBuZWVkcyB0byBiZSBkb25l IG9uY2UgLS0gZXZlbiBpZiB0aGUgcG9pbnRlcnMgYXJlIGNvbnN0YW50LAotCSAqIGFzc2lnbmlu ZyB0aGVtIHdoaWxlIGFub3RoZXIgdGhyZWFkIGlzIGV4ZWN1dGluZyB0aGUgZmxvd3MgZmVlbHMg bGlrZQotCSAqIHRlbXB0aW5nIGZhdGUuCisJICogT3VyIGxpYnBxLW9hdXRoLnNvIHByb3ZpZGVz IGEgc3BlY2lhbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgbGlicHEKKwkgKiBpbnRlZ3Jh dGlvbi4gSXQncyBub3QgYSBwcm9ibGVtIGlmIHdlIGRvbid0IGZpbmQgdGhpczsgaXQganVzdCBt ZWFucworCSAqIHRoYXQgYSB1c2VyLWRlZmluZWQgbW9kdWxlIGlzIGJlaW5nIHVzZWQuCiAJICov Ci0JaWYgKChsb2NrZXJyID0gcHRocmVhZF9tdXRleF9sb2NrKCZpbml0X211dGV4KSkgIT0gMCkK Kwlpbml0ID0gZGxzeW0oc3RhdGUtPmZsb3dfbW9kdWxlLCAibGlicHFfb2F1dGhfaW5pdCIpOwor CisJaWYgKCFpbml0KQorCQlzdGF0ZS0+YnVpbHRpbiA9IGZhbHNlOyAvKiBhZGp1c3Qgb3VyIGVy cm9yIG1lc3NhZ2VzICovCisJZWxzZQogCXsKLQkJLyogU2hvdWxkIG5vdCBoYXBwZW4uLi4gYnV0 IGRvbid0IGNvbnRpbnVlIGlmIGl0IGRvZXMuICovCi0JCUFzc2VydChmYWxzZSk7CisJCS8qCisJ CSAqIFdlIG5lZWQgdG8gaW5qZWN0IG5lY2Vzc2FyeSBmdW5jdGlvbiBwb2ludGVycyBpbnRvIHRo ZSBtb2R1bGUuIFRoaXMKKwkJICogb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UgLS0gZXZlbiBp ZiB0aGUgcG9pbnRlcnMgYXJlIGNvbnN0YW50LAorCQkgKiBhc3NpZ25pbmcgdGhlbSB3aGlsZSBh bm90aGVyIHRocmVhZCBpcyBleGVjdXRpbmcgdGhlIGZsb3dzIGZlZWxzCisJCSAqIGxpa2UgdGVt cHRpbmcgZmF0ZS4KKwkJICovCisJCWlmICgobG9ja2VyciA9IHB0aHJlYWRfbXV0ZXhfbG9jaygm aW5pdF9tdXRleCkpICE9IDApCisJCXsKKwkJCS8qIFNob3VsZCBub3QgaGFwcGVuLi4uIGJ1dCBk b24ndCBjb250aW51ZSBpZiBpdCBkb2VzLiAqLworCQkJQXNzZXJ0KGZhbHNlKTsKIAotCQlsaWJw cV9hcHBlbmRfY29ubl9lcnJvcihjb25uLCAiZmFpbGVkIHRvIGxvY2sgbXV0ZXggKCVkKSIsIGxv Y2tlcnIpOwotCQlyZXR1cm4gMDsKLQl9CisJCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25u LCAiZmFpbGVkIHRvIGxvY2sgbXV0ZXggKCVkKSIsIGxvY2tlcnIpOworCQkJcmV0dXJuIDA7CisJ CX0KIAotCWlmICghaW5pdGlhbGl6ZWQpCi0JewotCQlpbml0KAorCQlpZiAoIWluaXRpYWxpemVk KQorCQl7CisJCQlpbml0KAogI2lmZGVmIEVOQUJMRV9OTFMKLQkJCSBsaWJwcV9nZXR0ZXh0CisJ CQkJIGxpYnBxX2dldHRleHQKICNlbHNlCi0JCQkgTlVMTAorCQkJCSBOVUxMCiAjZW5kaWYKLQkJ CSk7CisJCQkJKTsKIAotCQlpbml0aWFsaXplZCA9IHRydWU7Ci0JfQorCQkJaW5pdGlhbGl6ZWQg PSB0cnVlOworCQl9CiAKLQlwdGhyZWFkX211dGV4X3VubG9jaygmaW5pdF9tdXRleCk7CisJCXB0 aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbml0X211dGV4KTsKKwl9CiAKIAlyZXR1cm4gKHN0YXJ0X2Zs b3coY29ubiwgcmVxdWVzdCkgPT0gMCkgPyAxIDogLTE7CiB9CkBAIC05NjcsNiArMTAwNyw3IEBA IGV4dGVybiBpbnQJcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLCBQR29hdXRoQmVh cmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKIHN0YXRpYyBpbnQKIHVzZV9idWlsdGluX2Zsb3coUEdj b25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIg KnJlcXVlc3QpCiB7CisJc3RhdGUtPmJ1aWx0aW4gPSB0cnVlOwogCXJldHVybiAocGdfc3RhcnRf b2F1dGhiZWFyZXIoY29ubiwgcmVxdWVzdCkgPT0gMCkgPyAxIDogLTE7CiB9CiAKQEAgLTEwMTMs MTAgKzEwNTQsNyBAQCBzZXR1cF90b2tlbl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhf c3RhdGUgKnN0YXRlKQogCWlmIChyZXMgPT0gMCkKIAkJcmVzID0gUFFhdXRoRGF0YUhvb2soUFFB VVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4sIGNvbm4sICZyZXF1ZXN0KTsKIAlpZiAocmVzID09 IDApCi0JewotCQlzdGF0ZS0+YnVpbHRpbiA9IHRydWU7CiAJCXJlcyA9IHVzZV9idWlsdGluX2Zs b3coY29ubiwgc3RhdGUsICZyZXF1ZXN0KTsKLQl9CiAKIAlpZiAocmVzID4gMCkKIAl7CkBAIC0x MDU0LDE5ICsxMDkyLDE4IEBAIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdjb25uICpjb25uLCBmZV9v YXV0aF9zdGF0ZSAqc3RhdGUpCiAJCWNvbm4tPmFzeW5jX2F1dGggPSBydW5fb2F1dGhfZmxvdzsK IAkJY29ubi0+Y2xlYW51cF9hc3luY19hdXRoID0gY2xlYW51cF9vYXV0aF9mbG93OwogCQlzdGF0 ZS0+YXN5bmNfY3R4ID0gcmVxdWVzdF9jb3B5OworCisJCXJldHVybiB0cnVlOwogCX0KLQllbHNl IGlmIChyZXMgPCAwKQotCXsKKworCS8qCisJICogRmFpbHVyZSBjYXNlczogZWl0aGVyIHdlIHRy aWVkIHRvIHNldCB1cCBhIGZsb3cgYW5kIGZhaWxlZCwgb3IgdGhlcmUKKwkgKiB3YXMgbm8gZmxv dyB0byB0cnkuCisJICovCisJaWYgKHJlcyA8IDApCiAJCXJlcG9ydF9mbG93X2Vycm9yKGNvbm4s ICZyZXF1ZXN0KTsKLQkJZ290byBmYWlsOwotCX0KIAllbHNlCi0JewogCQlsaWJwcV9hcHBlbmRf Y29ubl9lcnJvcihjb25uLCAibm8gT0F1dGggZmxvd3MgYXJlIGF2YWlsYWJsZSAodHJ5IGluc3Rh bGxpbmcgdGhlIGxpYnBxLW9hdXRoIHBhY2thZ2UpIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQly ZXR1cm4gdHJ1ZTsKIAogZmFpbDoKIAlpZiAocmVxdWVzdC52MS5jbGVhbnVwKQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvbWVzb24uYnVpbGQgYi9zcmMvdGVz dC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9tZXNvbi5idWlsZAppbmRleCBjNGI3M2UwNTI5Ny4u NzE0MTJmMGVjYWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9y L21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL21lc29u LmJ1aWxkCkBAIC01MCw2ICs1MCw3IEBAIHRlc3RfaW5zdGFsbF9saWJzICs9IG1hZ2ljX3ZhbGlk YXRvcgogCiBvYXV0aF9ob29rX2NsaWVudF9zb3VyY2VzID0gZmlsZXMoCiAgICdvYXV0aF9ob29r X2NsaWVudC5jJywKKyAgJ29hdXRoX3Rlc3RfY29tbW9uLmMnLAogKQogCiBpZiBob3N0X3N5c3Rl bSA9PSAnd2luZG93cycKQEAgLTY3LDYgKzY4LDE5IEBAIG9hdXRoX2hvb2tfY2xpZW50ID0gZXhl Y3V0YWJsZSgnb2F1dGhfaG9va19jbGllbnQnLAogKQogdGVzdHByZXBfdGFyZ2V0cyArPSBvYXV0 aF9ob29rX2NsaWVudAogCitvYXV0aF9mbG93ID0gc2hhcmVkX21vZHVsZSgnb2F1dGhfZmxvdycs CisgIGZpbGVzKAorICAgICdvYXV0aF9mbG93LmMnLAorICAgICdvYXV0aF90ZXN0X2NvbW1vbi5j JywKKyAgKSwKKyAgaW5jbHVkZV9kaXJlY3RvcmllczogW3Bvc3RncmVzX2luY10sCisgIGRlcGVu ZGVuY2llczogW2Zyb250ZW5kX3NobGliX2NvZGUsIGxpYnBxXSwKKyAga3dhcmdzOiBkZWZhdWx0 X2xpYl9hcmdzICsgeworICAgICdpbnN0YWxsJzogZmFsc2UsCisgIH0sCispCit0ZXN0cHJlcF90 YXJnZXRzICs9IG9hdXRoX2Zsb3cKKwogdGVzdHMgKz0gewogICAnbmFtZSc6ICdvYXV0aF92YWxp ZGF0b3InLAogICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKQEAgLTgwLDYgKzk0 LDcgQEAgdGVzdHMgKz0gewogICAgICAgJ1BZVEhPTic6IHB5dGhvbi5mdWxsX3BhdGgoKSwKICAg ICAgICd3aXRoX2xpYmN1cmwnOiBvYXV0aF9mbG93X3N1cHBvcnRlZCA/ICd5ZXMnIDogJ25vJywK ICAgICAgICd3aXRoX3B5dGhvbic6ICd5ZXMnLAorICAgICAgJ2Zsb3dfbW9kdWxlX3BhdGgnOiBv YXV0aF9mbG93LmZ1bGxfcGF0aCgpLAogICAgIH0sCiAgICAgJ2RlcHMnOiBbb2F1dGhfaG9va19j bGllbnRdLAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0 b3IvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9NYWtlZmlsZQpp bmRleCBjYjY0ZjBmMTQzNy4uYTE3YzQyNTlhZWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvb2F1dGhfdmFsaWRhdG9yL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhf dmFsaWRhdG9yL01ha2VmaWxlCkBAIC0xNCwxMSArMTQsMTMgQEAgUEdGSUxFREVTQyA9ICJ2YWxp ZGF0b3IgLSB0ZXN0IE9BdXRoIHZhbGlkYXRvciBtb2R1bGUiCiAKIFBST0dSQU0gPSBvYXV0aF9o b29rX2NsaWVudAogUEdBUFBJQ09OID0gd2luMzIKLU9CSlMgPSAkKFdJTjMyUkVTKSBvYXV0aF9o b29rX2NsaWVudC5vCitPQkpTID0gJChXSU4zMlJFUykgb2F1dGhfaG9va19jbGllbnQubyBvYXV0 aF90ZXN0X2NvbW1vbi5vCiAKIFBHX0NQUEZMQUdTID0gLUkkKGxpYnBxX3NyY2RpcikKIFBHX0xJ QlNfSU5URVJOQUwgKz0gJChsaWJwcV9wZ3BvcnQpCiAKK0VYVFJBX0NMRUFOID0gb2F1dGhfZmxv dyQoRExTVUZGSVgpIG9hdXRoX2Zsb3cubworCiBOT19JTlNUQUxMQ0hFQ0sgPSAxCiAKIFRBUF9U RVNUUyA9IDEKQEAgLTMzLDggKzM1LDE0IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCiBp bmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBpbmNsdWRlICQodG9w X3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5tawogCithbGw6IG9hdXRoX2Zsb3ckKERM U1VGRklYKQorCitvYXV0aF9mbG93JChETFNVRkZJWCk6IG9hdXRoX2Zsb3cubyBvYXV0aF90ZXN0 X2NvbW1vbi5vCisJJChDQykgJChDRkxBR1MpICReICQoTERGTEFHUykgJChsaWJwcV9wZ3BvcnRf c2hsaWIpICQoTERGTEFHU19TTCkgLXNoYXJlZCAtbyAkQAorCiBleHBvcnQgUFlUSE9OCiBleHBv cnQgd2l0aF9saWJjdXJsCiBleHBvcnQgd2l0aF9weXRob24KK2V4cG9ydCBmbG93X21vZHVsZV9w YXRoIDo9ICQoYWJzX3RvcF9idWlsZGRpcikvJChzdWJkaXIpL29hdXRoX2Zsb3ckKERMU1VGRklY KQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Iv b2F1dGhfdGVzdF9jb21tb24uaCBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29h dXRoX3Rlc3RfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjMzZTcyZTMwNDQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92 YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uaApAQCAtMCwwICsxLDI2IEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBvYXV0aF90ZXN0X2NvbW1vbi5oCisgKgkgIFNoYXJlZCBmdW5jdGlv bmFsaXR5IGZvciBvYXV0aF9ob29rX2NsaWVudCBhbmQgb2F1dGhfZmxvdworICoKKyAqIENvcHly aWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIE9BVVRIX1RFU1RfQ09NTU9OX0gKKyNk ZWZpbmUgT0FVVEhfVEVTVF9DT01NT05fSAorCisvKgorICogT25seSBwdWJsaWMgaGVhZGVycyBj YW4gYmUgaGVyZSwgc2luY2Ugb2F1dGhfZmxvdy5jIGlzIHRyeWluZyB0byB0ZXN0IG9ubHkKKyAq IHRoZSBwdWJsaWMgQVBJLgorICovCisjaW5jbHVkZSAibGlicHEtZmUuaCIKKworZXh0ZXJuIGlu dAlzdHJlc3NfYXN5bmM7CQkvKiBmb3Igb2F1dGhfaG9va19jbGllbnQgKi8KKworZXh0ZXJuIGNo YXIgKm9hdXRoX3Rlc3RfcGFyc2VfYXJndihpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgZm9y X3BsdWdpbik7CitleHRlcm4gaW50CW9hdXRoX3Rlc3RfYXV0aGRhdGFfaG9vayhQR2F1dGhEYXRh IHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50CW9hdXRoX3Rlc3Rf c3RhcnRfZmxvdyhQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3Qp OworCisjZW5kaWYJCQkJCQkJLyogT0FVVEhfVEVTVF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfZmxvdy5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfZmxvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi44MDY4YTQ1YWUyOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2Zsb3cuYwpAQCAtMCwwICsxLDY5IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvYXV0aF9mbG93LmMKKyAqCSAgVGVzdCBwbHVn aW4gZm9yIGNsaWVudHNpZGUgT0F1dGggZmxvd3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisv KiBTaW5jZSB3ZSB3YW50IHRvIHRlc3QgdGhlIHB1YmxpYyBBUEksIG9ubHkgaW5jbHVkZSBwdWJs aWMgaGVhZGVycyBoZXJlLiAqLworI2luY2x1ZGUgImxpYnBxLWZlLmgiCisjaW5jbHVkZSAibGli cHEtb2F1dGguaCIKKyNpbmNsdWRlICJvYXV0aF90ZXN0X2NvbW1vbi5oIgorCitzdGF0aWMgdm9p ZAorbG9hZF90ZXN0X2ZsYWdzKHZvaWQpCit7CisJaW50CQkJYXJnYzsKKwljaGFyCSAgKiphcmd2 OworCWNoYXIJICAgKmVudiA9IGdldGVudigiT0FVVEhfVEVTVF9GTEFHUyIpOworCWludAkJCWZs YWdfY291bnQ7CisJaW50CQkJaTsKKworCWlmICghZW52IHx8ICFlbnZbMF0pCisJeworCQlmcHJp bnRmKHN0ZGVyciwgIk9BVVRIX1RFU1RfRkxBR1MgbXVzdCBiZSBzZXRcbiIpOworCQlleGl0KDEp OworCX0KKworCWZsYWdfY291bnQgPSAxOworCWZvciAoY2hhciAqYyA9IGVudjsgKmM7IGMrKykK Kwl7CisJCWlmICgqYyA9PSAnXHgwMScpCisJCQlmbGFnX2NvdW50Kys7CisJfQorCisJYXJnYyA9 IGZsYWdfY291bnQgKyAxOworCWFyZ3YgPSBtYWxsb2Moc2l6ZW9mKCphcmd2KSAqIChhcmdjICsg MSkpOworCWlmICghYXJndikKKwl7CisJCWZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeSIp OworCQlleGl0KDEpOworCX0KKworCWFyZ3ZbMF0gPSAiW3BsdWdpbiB0ZXN0XSI7CisJZm9yIChp ID0gMTsgaSA8IGZsYWdfY291bnQ7IGkrKykKKwl7CisJCWFyZ3ZbaV0gPSBlbnY7CisKKwkJZW52 ID0gc3RyY2hyKGVudiwgJ1x4MDEnKTsKKwkJKmVudisrID0gJ1wwJzsKKwl9CisJYXJndltmbGFn X2NvdW50XSA9IGVudjsKKwlhcmd2W2FyZ2NdID0gTlVMTDsKKworCW9hdXRoX3Rlc3RfcGFyc2Vf YXJndihhcmdjLCBhcmd2LCAxIC8qIHBsdWdpbiAqLyApOworfQorCitpbnQKK3BnX3N0YXJ0X29h dXRoYmVhcmVyKFBHY29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkK K3sKKwlsb2FkX3Rlc3RfZmxhZ3MoKTsKKworCXJldHVybiBvYXV0aF90ZXN0X3N0YXJ0X2Zsb3co Y29ubiwgcmVxdWVzdCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3Zh bGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxp ZGF0b3Ivb2F1dGhfaG9va19jbGllbnQuYwppbmRleCA1YmRkYzBmODA3YS4uNWY5MzJhY2M1NzEg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2hvb2tf Y2xpZW50LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfaG9v a19jbGllbnQuYwpAQCAtMTgsMTQ0ICsxOCwxOCBAQAogCiAjaW5jbHVkZSA8c3lzL3NvY2tldC5o PgogCi0jaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJsaWJwcS1mZS5oIgotI2lu Y2x1ZGUgInBxZXhwYnVmZmVyLmgiCiAKLXN0YXRpYyBpbnQJaGFuZGxlX2F1dGhfZGF0YShQR2F1 dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgUG9zdGdyZXNQ b2xsaW5nU3RhdHVzVHlwZSBhc3luY19jYihQR2Nvbm4gKmNvbm4sCi0JCQkJCQkJCQkJICBQR29h dXRoQmVhcmVyUmVxdWVzdCAqcmVxLAotCQkJCQkJCQkJCSAgcGdzb2NrZXQgKmFsdHNvY2spOwot c3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgbWlzYmVoYXZlX2NiKFBHY29ubiAqY29u biwKLQkJCQkJCQkJCQkJICBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLAotCQkJCQkJCQkJCQkg IHBnc29ja2V0ICphbHRzb2NrKTsKLQotc3RhdGljIHZvaWQKLXVzYWdlKGNoYXIgKmFyZ3ZbXSkK LXsKLQlwcmludGYoInVzYWdlOiAlcyBbZmxhZ3NdIENPTk5JTkZPXG5cbiIsIGFyZ3ZbMF0pOwot Ci0JcHJpbnRmKCJyZWNvZ25pemVkIGZsYWdzOlxuIik7Ci0JcHJpbnRmKCIgIC1oLCAtLWhlbHAg ICAgICAgICAgICAgIHNob3cgdGhpcyBtZXNzYWdlXG4iKTsKLQlwcmludGYoIiAgLXYgVkVSU0lP TiAgICAgICAgICAgICAgc2VsZWN0IHRoZSBob29rIEFQSSB2ZXJzaW9uIChkZWZhdWx0IDIpXG4i KTsKLQlwcmludGYoIiAgLS1leHBlY3RlZC1zY29wZSBTQ09QRSAgZmFpbCBpZiByZWNlaXZlZCBz Y29wZXMgZG8gbm90IG1hdGNoIFNDT1BFXG4iKTsKLQlwcmludGYoIiAgLS1leHBlY3RlZC11cmkg VVJJICAgICAgZmFpbCBpZiByZWNlaXZlZCBjb25maWd1cmF0aW9uIGxpbmsgZG9lcyBub3QgbWF0 Y2ggVVJJXG4iKTsKLQlwcmludGYoIiAgLS1leHBlY3RlZC1pc3N1ZXIgSVNTICAgZmFpbCBpZiBy ZWNlaXZlZCBpc3N1ZXIgZG9lcyBub3QgbWF0Y2ggSVNTICh2MiBvbmx5KVxuIik7Ci0JcHJpbnRm KCIgIC0tbWlzYmVoYXZlPU1PREUgICAgICAgIGhhdmUgdGhlIGhvb2sgZmFpbCByZXF1aXJlZCBw b3N0Y29uZGl0aW9uc1xuIgotCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAoTU9ERXM6 IG5vLWhvb2ssIGZhaWwtYXN5bmMsIG5vLXRva2VuLCBuby1zb2NrZXQpXG4iKTsKLQlwcmludGYo IiAgLS1uby1ob29rICAgICAgICAgICAgICAgZG9uJ3QgaW5zdGFsbCBPQXV0aCBob29rc1xuIik7 Ci0JcHJpbnRmKCIgIC0taGFuZy1mb3JldmVyICAgICAgICAgIGRvbid0IGV2ZXIgcmV0dXJuIGEg dG9rZW4gKGNvbWJpbmUgd2l0aCBjb25uZWN0X3RpbWVvdXQpXG4iKTsKLQlwcmludGYoIiAgLS10 b2tlbiBUT0tFTiAgICAgICAgICAgdXNlIHRoZSBwcm92aWRlZCBUT0tFTiB2YWx1ZVxuIik7Ci0J cHJpbnRmKCIgIC0tZXJyb3IgRVJSTVNHICAgICAgICAgIGZhaWwgaW5zdGVhZCwgd2l0aCB0aGUg Z2l2ZW4gRVJSTVNHICh2MiBvbmx5KVxuIik7Ci0JcHJpbnRmKCIgIC0tc3RyZXNzLWFzeW5jICAg ICAgICAgIGJ1c3ktbG9vcCBvbiBQUWNvbm5lY3RQb2xsIHJhdGhlciB0aGFuIHBvbGxpbmdcbiIp OwotfQotCi0vKiAtLW9wdGlvbnMgKi8KLXN0YXRpYyBib29sIG5vX2hvb2sgPSBmYWxzZTsKLXN0 YXRpYyBib29sIGhhbmdfZm9yZXZlciA9IGZhbHNlOwotc3RhdGljIGJvb2wgc3RyZXNzX2FzeW5j ID0gZmFsc2U7Ci1zdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfdXJpID0gTlVMTDsKLXN0YXRp YyBjb25zdCBjaGFyICpleHBlY3RlZF9pc3N1ZXIgPSBOVUxMOwotc3RhdGljIGNvbnN0IGNoYXIg KmV4cGVjdGVkX3Njb3BlID0gTlVMTDsKLXN0YXRpYyBjb25zdCBjaGFyICptaXNiZWhhdmVfbW9k ZSA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqdG9rZW4gPSBOVUxMOwotc3RhdGljIGNoYXIgKmVycm1z ZyA9IE5VTEw7Ci1zdGF0aWMgaW50CWhvb2tfdmVyc2lvbiA9IFBRQVVUSERBVEFfT0FVVEhfQkVB UkVSX1RPS0VOX1YyOworI2luY2x1ZGUgIm9hdXRoX3Rlc3RfY29tbW9uLmgiCiAKIGludAogbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9u IGxvbmdfb3B0aW9uc1tdID0gewotCQl7ImhlbHAiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnfSwK LQotCQl7ImV4cGVjdGVkLXNjb3BlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDB9LAot CQl7ImV4cGVjdGVkLXVyaSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDAxfSwKLQkJeyJu by1ob29rIiwgbm9fYXJndW1lbnQsIE5VTEwsIDEwMDJ9LAotCQl7InRva2VuIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsIDEwMDN9LAotCQl7ImhhbmctZm9yZXZlciIsIG5vX2FyZ3VtZW50LCBO VUxMLCAxMDA0fSwKLQkJeyJtaXNiZWhhdmUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAw NX0sCi0JCXsic3RyZXNzLWFzeW5jIiwgbm9fYXJndW1lbnQsIE5VTEwsIDEwMDZ9LAotCQl7ImV4 cGVjdGVkLWlzc3VlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDA3fSwKLQkJeyJlcnJv ciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDA4fSwKLQkJezB9Ci0JfTsKLQotCWNvbnN0 IGNoYXIgKmNvbm5pbmZvOworCWNvbnN0IGNoYXIgKmNvbm5pbmZvID0gb2F1dGhfdGVzdF9wYXJz ZV9hcmd2KGFyZ2MsIGFyZ3YsIDAgLyogaG9vayAqLyApOwogCVBHY29ubgkgICAqY29ubjsKLQlp bnQJCQljOwotCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImh2OiIsIGxv bmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQotCXsKLQkJc3dpdGNoIChjKQotCQl7Ci0JCQljYXNl ICdoJzoKLQkJCQl1c2FnZShhcmd2KTsKLQkJCQlyZXR1cm4gMDsKLQotCQkJY2FzZSAndic6Ci0J CQkJaWYgKHN0cmNtcChvcHRhcmcsICIxIikgPT0gMCkKLQkJCQkJaG9va192ZXJzaW9uID0gUFFB VVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU47Ci0JCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywg IjIiKSA9PSAwKQotCQkJCQlob29rX3ZlcnNpb24gPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9U T0tFTl9WMjsKLQkJCQllbHNlCi0JCQkJewotCQkJCQl1c2FnZShhcmd2KTsKLQkJCQkJcmV0dXJu IDE7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlIDEwMDA6CQkJLyogLS1leHBlY3RlZC1z Y29wZSAqLwotCQkJCWV4cGVjdGVkX3Njb3BlID0gb3B0YXJnOwotCQkJCWJyZWFrOwotCi0JCQlj YXNlIDEwMDE6CQkJLyogLS1leHBlY3RlZC11cmkgKi8KLQkJCQlleHBlY3RlZF91cmkgPSBvcHRh cmc7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAwMjoJCQkvKiAtLW5vLWhvb2sgKi8KLQkJCQlu b19ob29rID0gdHJ1ZTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDAzOgkJCS8qIC0tdG9rZW4g Ki8KLQkJCQl0b2tlbiA9IG9wdGFyZzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDA0OgkJCS8q IC0taGFuZy1mb3JldmVyICovCi0JCQkJaGFuZ19mb3JldmVyID0gdHJ1ZTsKLQkJCQlicmVhazsK LQotCQkJY2FzZSAxMDA1OgkJCS8qIC0tbWlzYmVoYXZlICovCi0JCQkJbWlzYmVoYXZlX21vZGUg PSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAwNjoJCQkvKiAtLXN0cmVzcy1hc3lu YyAqLwotCQkJCXN0cmVzc19hc3luYyA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAw NzoJCQkvKiAtLWV4cGVjdGVkLWlzc3VlciAqLwotCQkJCWV4cGVjdGVkX2lzc3VlciA9IG9wdGFy ZzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDA4OgkJCS8qIC0tZXJyb3IgKi8KLQkJCQllcnJt c2cgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJdXNhZ2UoYXJndik7 Ci0JCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlpZiAoYXJnYyAhPSBvcHRpbmQgKyAxKQotCXsK LQkJdXNhZ2UoYXJndik7Ci0JCXJldHVybiAxOwotCX0KLQotCWNvbm5pbmZvID0gYXJndltvcHRp bmRdOwogCiAJLyogU2V0IHVwIG91ciBPQXV0aCBob29rcy4gKi8KLQlQUXNldEF1dGhEYXRhSG9v ayhoYW5kbGVfYXV0aF9kYXRhKTsKKwlQUXNldEF1dGhEYXRhSG9vayhvYXV0aF90ZXN0X2F1dGhk YXRhX2hvb2spOwogCiAJLyogQ29ubmVjdC4gKEFsbCB0aGUgYWN0dWFsIHdvcmsgaXMgaW4gdGhl IGhvb2suKSAqLwogCWlmIChzdHJlc3NfYXN5bmMpCkBAIC0xOTMsMTkwICs2NywzIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlQUWZpbmlzaChjb25uKTsKIAlyZXR1cm4gMDsKIH0K LQotLyoKLSAqIFBRYXV0aERhdGFIb29rIGltcGxlbWVudGF0aW9uLiBSZXBsYWNlcyB0aGUgZGVm YXVsdCBjbGllbnQgZmxvdyBieSBoYW5kbGluZwotICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU5bX1YyXS4KLSAqLwotc3RhdGljIGludAotaGFuZGxlX2F1dGhfZGF0YShQR2F1dGhEYXRh IHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAqZGF0YSkKLXsKLQlQR29hdXRoQmVhcmVyUmVxdWVz dCAqcmVxOwotCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcTIgPSBOVUxMOwotCi0JQXNzZXJ0 KGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiB8fAotCQkgICBo b29rX3ZlcnNpb24gPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIpOwotCi0JaWYg KG5vX2hvb2sgfHwgdHlwZSAhPSBob29rX3ZlcnNpb24pCi0JCXJldHVybiAwOwotCi0JcmVxID0g ZGF0YTsKLQlpZiAodHlwZSA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMikKLQkJ cmVxMiA9IGRhdGE7Ci0KLQlpZiAoaGFuZ19mb3JldmVyKQotCXsKLQkJLyogU3RhcnQgYXN5bmNo cm9ub3VzIHByb2Nlc3NpbmcuICovCi0JCXJlcS0+YXN5bmMgPSBhc3luY19jYjsKLQkJcmV0dXJu IDE7Ci0JfQotCi0JaWYgKG1pc2JlaGF2ZV9tb2RlKQotCXsKLQkJaWYgKHN0cmNtcChtaXNiZWhh dmVfbW9kZSwgIm5vLWhvb2siKSAhPSAwKQotCQkJcmVxLT5hc3luYyA9IG1pc2JlaGF2ZV9jYjsK LQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKGV4cGVjdGVkX3VyaSkKLQl7Ci0JCWlmICghcmVxLT5v cGVuaWRfY29uZmlndXJhdGlvbikKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBV UkkgXCIlc1wiLCBnb3QgTlVMTFxuIiwgZXhwZWN0ZWRfdXJpKTsKLQkJCXJldHVybiAtMTsKLQkJ fQotCi0JCWlmIChzdHJjbXAoZXhwZWN0ZWRfdXJpLCByZXEtPm9wZW5pZF9jb25maWd1cmF0aW9u KSAhPSAwKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVkIFVSSSBcIiVzXCIsIGdv dCBcIiVzXCJcbiIsIGV4cGVjdGVkX3VyaSwgcmVxLT5vcGVuaWRfY29uZmlndXJhdGlvbik7Ci0J CQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlpZiAoZXhwZWN0ZWRfc2NvcGUpCi0JewotCQlpZiAo IXJlcS0+c2NvcGUpCi0JCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgc2NvcGUgXCIl c1wiLCBnb3QgTlVMTFxuIiwgZXhwZWN0ZWRfc2NvcGUpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0K LQkJaWYgKHN0cmNtcChleHBlY3RlZF9zY29wZSwgcmVxLT5zY29wZSkgIT0gMCkKLQkJewotCQkJ ZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBzY29wZSBcIiVzXCIsIGdvdCBcIiVzXCJcbiIsIGV4 cGVjdGVkX3Njb3BlLCByZXEtPnNjb3BlKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQotCWlm IChleHBlY3RlZF9pc3N1ZXIpCi0JewotCQlpZiAoIXJlcTIpCi0JCXsKLQkJCWZwcmludGYoc3Rk ZXJyLCAiLS1leHBlY3RlZC1pc3N1ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsK LQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlmICghcmVxMi0+aXNzdWVyKQotCQl7Ci0JCQlmcHJp bnRmKHN0ZGVyciwgImV4cGVjdGVkIGlzc3VlciBcIiVzXCIsIGdvdCBOVUxMXG4iLCBleHBlY3Rl ZF9pc3N1ZXIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJaWYgKHN0cmNtcChleHBlY3RlZF9p c3N1ZXIsIHJlcTItPmlzc3VlcikgIT0gMCkKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJleHBl Y3RlZCBpc3N1ZXIgXCIlc1wiLCBnb3QgXCIlc1wiXG4iLCBleHBlY3RlZF9pc3N1ZXIsIHJlcTIt Pmlzc3Vlcik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlpZiAoZXJybXNnKQotCXsKLQkJ aWYgKHRva2VuKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJyb3IgY2Fubm90IGJlIGNv bWJpbmVkIHdpdGggLS10b2tlblxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJZWxzZSBpZiAo IXJlcTIpCi0JCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiLS1lcnJvciBjYW5ub3QgYmUgY29tYmlu ZWQgd2l0aCAtdjFcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJcmVxMi0+ZXJyb3IgPSBl cnJtc2c7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXEtPnRva2VuID0gdG9rZW47Ci0JcmV0dXJu IDE7Ci19Ci0KLXN0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCi1hc3luY19jYihQR2Nv bm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXEsIHBnc29ja2V0ICphbHRzb2NrKQot ewotCWlmIChoYW5nX2ZvcmV2ZXIpCi0JewotCQkvKgotCQkgKiBUaGlzIGNvZGUgdGVzdHMgdGhh dCBub3RoaW5nIGlzIGludGVyZmVyaW5nIHdpdGggbGlicHEncyBoYW5kbGluZwotCQkgKiBvZiBj b25uZWN0X3RpbWVvdXQuCi0JCSAqLwotCQlzdGF0aWMgcGdzb2NrZXQgc29jayA9IFBHSU5WQUxJ RF9TT0NLRVQ7Ci0KLQkJaWYgKHNvY2sgPT0gUEdJTlZBTElEX1NPQ0tFVCkKLQkJewotCQkJLyog Rmlyc3QgY2FsbC4gQ3JlYXRlIGFuIHVuYm91bmQgc29ja2V0IHRvIHdhaXQgb24uICovCi0jaWZk ZWYgV0lOMzIKLQkJCVdTQURBVEEJCXdzYURhdGE7Ci0JCQlpbnQJCQllcnI7Ci0KLQkJCWVyciA9 IFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwgMiksICZ3c2FEYXRhKTsKLQkJCWlmIChlcnIpCi0JCQl7 Ci0JCQkJcGVycm9yKCJXU0FTdGFydHVwIGZhaWxlZCIpOwotCQkJCXJldHVybiBQR1JFU19QT0xM SU5HX0ZBSUxFRDsKLQkJCX0KLSNlbmRpZgotCQkJc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NL X0RHUkFNLCAwKTsKLQkJCWlmIChzb2NrID09IFBHSU5WQUxJRF9TT0NLRVQpCi0JCQl7Ci0JCQkJ cGVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIGRhdGFncmFtIHNvY2tldCIpOwotCQkJCXJldHVybiBQ R1JFU19QT0xMSU5HX0ZBSUxFRDsKLQkJCX0KLQkJfQotCi0JCS8qIE1ha2UgbGlicHEgd2FpdCBv biB0aGUgKHVucmVhZGFibGUpIHNvY2tldC4gKi8KLQkJKmFsdHNvY2sgPSBzb2NrOwotCQlyZXR1 cm4gUEdSRVNfUE9MTElOR19SRUFESU5HOwotCX0KLQotCXJlcS0+dG9rZW4gPSB0b2tlbjsKLQly ZXR1cm4gUEdSRVNfUE9MTElOR19PSzsKLX0KLQotc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1 c1R5cGUKLW1pc2JlaGF2ZV9jYihQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpy ZXEsIHBnc29ja2V0ICphbHRzb2NrKQotewotCWlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJm YWlsLWFzeW5jIikgPT0gMCkKLQl7Ci0JCS8qIEp1c3QgZmFpbCAibm9ybWFsbHkiLiAqLwotCQlp ZiAoZXJybXNnKQotCQl7Ci0JCQlQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXEyOwotCi0JCQlp ZiAoaG9va192ZXJzaW9uID09IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOKQotCQkJewot CQkJCWZwcmludGYoc3RkZXJyLCAiLS1lcnJvciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtdjFc biIpOwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0KLQkJCXJlcTIgPSAoUEdvYXV0aEJlYXJlclJlcXVl c3RWMiAqKSByZXE7Ci0JCQlyZXEyLT5lcnJvciA9IGVycm1zZzsKLQkJfQotCi0JCXJldHVybiBQ R1JFU19QT0xMSU5HX0ZBSUxFRDsKLQl9Ci0JZWxzZSBpZiAoc3RyY21wKG1pc2JlaGF2ZV9tb2Rl LCAibm8tdG9rZW4iKSA9PSAwKQotCXsKLQkJLyogQ2FsbGJhY2tzIG11c3QgYXNzaWduIHJlcS0+ dG9rZW4gYmVmb3JlIHJldHVybmluZyBPSy4gKi8KLQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfT0s7 Ci0JfQotCWVsc2UgaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgIm5vLXNvY2tldCIpID09IDAp Ci0JewotCQkvKiBDYWxsYmFja3MgbXVzdCBhc3NpZ24gKmFsdHNvY2sgYmVmb3JlIGFza2luZyBm b3IgcG9sbGluZy4gKi8KLQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKLQl9Ci0JZWxz ZQotCXsKLQkJZnByaW50ZihzdGRlcnIsICJ1bnJlY29nbml6ZWQgLS1taXNiZWhhdmUgbW9kZTog JXNcbiIsIG1pc2JlaGF2ZV9tb2RlKTsKLQkJZXhpdCgxKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5jIGIvc3Jj L3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWJhOGMzMmVhY2UKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1v bi5jCkBAIC0wLDAgKzEsMzc0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvYXV0aF90 ZXN0X2NvbW1vbi5jCisgKgkgIFNoYXJlZCBmdW5jdGlvbmFsaXR5IGZvciBvYXV0aF9ob29rX2Ns aWVudCBhbmQgb2F1dGhfZmxvdworICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKwor I2luY2x1ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAibGlicHEtZmUuaCIKKyNpbmNsdWRl ICJwcWV4cGJ1ZmZlci5oIgorCisjaW5jbHVkZSAib2F1dGhfdGVzdF9jb21tb24uaCIKKworc3Rh dGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgYXN5bmNfY2IoUEdjb25uICpjb25uLAorCQkJ CQkJCQkJCSAgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwKKwkJCQkJCQkJCQkgIHBnc29ja2V0 ICphbHRzb2NrKTsKK3N0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIG1pc2JlaGF2ZV9j YihQR2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJCSAgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwK KwkJCQkJCQkJCQkJICBwZ3NvY2tldCAqYWx0c29jayk7CisKKy8qIC0tb3B0aW9ucyAqLworc3Rh dGljIGJvb2wgbm9faG9vayA9IGZhbHNlOworc3RhdGljIGJvb2wgaGFuZ19mb3JldmVyID0gZmFs c2U7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfdXJpID0gTlVMTDsKK3N0YXRpYyBjb25z dCBjaGFyICpleHBlY3RlZF9pc3N1ZXIgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVj dGVkX3Njb3BlID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICptaXNiZWhhdmVfbW9kZSA9IE5V TEw7CitzdGF0aWMgY2hhciAqdG9rZW4gPSBOVUxMOworc3RhdGljIGNoYXIgKmVycm1zZyA9IE5V TEw7CitzdGF0aWMgaW50CWhvb2tfdmVyc2lvbiA9IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RP S0VOX1YyOworCisvKgorICogWFhYOiBzdHJlc3NfYXN5bmMgaXMgZXhwb3J0ZWQgZm9yIHRoZSBi ZW5lZml0IG9mIG9hdXRoX2hvb2tfY2xpZW50LiBTaW5jZQorICogd2Ugb25seSB1c2UgcHVibGlj IGhlYWRlcnMgKGxpYnBxLWZlLmgpIGZvciBvYXV0aF9mbG93LCBpdCBuZWVkcyB0byBiZSBhbiBp bnQKKyAqIHJhdGhlciB0aGFuIGEgYm9vbC4KKyAqLworaW50CQkJc3RyZXNzX2FzeW5jID0gZmFs c2U7CisKK3N0YXRpYyB2b2lkCit1c2FnZShjaGFyICphcmd2W10pCit7CisJcHJpbnRmKCJ1c2Fn ZTogJXMgW2ZsYWdzXSBDT05OSU5GT1xuXG4iLCBhcmd2WzBdKTsKKworCXByaW50ZigicmVjb2du aXplZCBmbGFnczpcbiIpOworCXByaW50ZigiICAtaCwgLS1oZWxwICAgICAgICAgICAgICBzaG93 IHRoaXMgbWVzc2FnZVxuIik7CisJcHJpbnRmKCIgIC12IFZFUlNJT04gICAgICAgICAgICAgIHNl bGVjdCB0aGUgaG9vayBBUEkgdmVyc2lvbiAoZGVmYXVsdCAyKVxuIik7CisJcHJpbnRmKCIgIC0t ZXhwZWN0ZWQtc2NvcGUgU0NPUEUgIGZhaWwgaWYgcmVjZWl2ZWQgc2NvcGVzIGRvIG5vdCBtYXRj aCBTQ09QRVxuIik7CisJcHJpbnRmKCIgIC0tZXhwZWN0ZWQtdXJpIFVSSSAgICAgIGZhaWwgaWYg cmVjZWl2ZWQgY29uZmlndXJhdGlvbiBsaW5rIGRvZXMgbm90IG1hdGNoIFVSSVxuIik7CisJcHJp bnRmKCIgIC0tZXhwZWN0ZWQtaXNzdWVyIElTUyAgIGZhaWwgaWYgcmVjZWl2ZWQgaXNzdWVyIGRv ZXMgbm90IG1hdGNoIElTUyAodjIgb25seSlcbiIpOworCXByaW50ZigiICAtLW1pc2JlaGF2ZT1N T0RFICAgICAgICBoYXZlIHRoZSBob29rIGZhaWwgcmVxdWlyZWQgcG9zdGNvbmRpdGlvbnNcbiIK KwkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgKE1PREVzOiBuby1ob29rLCBmYWlsLWFz eW5jLCBuby10b2tlbiwgbm8tc29ja2V0KVxuIik7CisJcHJpbnRmKCIgIC0tbm8taG9vayAgICAg ICAgICAgICAgIGRvbid0IGluc3RhbGwgT0F1dGggaG9va3NcbiIpOworCXByaW50ZigiICAtLWhh bmctZm9yZXZlciAgICAgICAgICBkb24ndCBldmVyIHJldHVybiBhIHRva2VuIChjb21iaW5lIHdp dGggY29ubmVjdF90aW1lb3V0KVxuIik7CisJcHJpbnRmKCIgIC0tdG9rZW4gVE9LRU4gICAgICAg ICAgIHVzZSB0aGUgcHJvdmlkZWQgVE9LRU4gdmFsdWVcbiIpOworCXByaW50ZigiICAtLWVycm9y IEVSUk1TRyAgICAgICAgICBmYWlsIGluc3RlYWQsIHdpdGggdGhlIGdpdmVuIEVSUk1TRyAodjIg b25seSlcbiIpOworCXByaW50ZigiICAtLXN0cmVzcy1hc3luYyAgICAgICAgICBidXN5LWxvb3Ag b24gUFFjb25uZWN0UG9sbCByYXRoZXIgdGhhbiBwb2xsaW5nXG4iKTsKK30KKworY2hhciAqCitv YXV0aF90ZXN0X3BhcnNlX2FyZ3YoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IGZvcl9wbHVn aW4pCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJ CXsiaGVscCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaCd9LAorCisJCXsiZXhwZWN0ZWQtc2NvcGUi LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAwMH0sCisJCXsiZXhwZWN0ZWQtdXJpIiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDF9LAorCQl7Im5vLWhvb2siLCBub19hcmd1bWVudCwg TlVMTCwgMTAwMn0sCisJCXsidG9rZW4iLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAwM30s CisJCXsiaGFuZy1mb3JldmVyIiwgbm9fYXJndW1lbnQsIE5VTEwsIDEwMDR9LAorCQl7Im1pc2Jl aGF2ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDA1fSwKKwkJeyJzdHJlc3MtYXN5bmMi LCBub19hcmd1bWVudCwgTlVMTCwgMTAwNn0sCisJCXsiZXhwZWN0ZWQtaXNzdWVyIiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsIDEwMDd9LAorCQl7ImVycm9yIiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsIDEwMDh9LAorCQl7MH0KKwl9OworCisJaW50CQkJYzsKKworCWlmIChmb3JfcGx1Z2lu KQorCXsKKwkJLyogVGhlICJyZWFsIiBhcmd2IGhhcyBhbHJlYWR5IGJlZW4gcGFyc2VkLiBSZXNl dCBvcHRpbmQuICovCisJCW9wdGluZCA9IDE7CisJfQorCisJd2hpbGUgKChjID0gZ2V0b3B0X2xv bmcoYXJnYywgYXJndiwgImh2OiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQorCXsKKwkJ c3dpdGNoIChjKQorCQl7CisJCQljYXNlICdoJzoKKwkJCQl1c2FnZShhcmd2KTsKKwkJCQlleGl0 KDApOworCisJCQljYXNlICd2JzoKKwkJCQlpZiAoc3RyY21wKG9wdGFyZywgIjEiKSA9PSAwKQor CQkJCQlob29rX3ZlcnNpb24gPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTjsKKwkJCQll bHNlIGlmIChzdHJjbXAob3B0YXJnLCAiMiIpID09IDApCisJCQkJCWhvb2tfdmVyc2lvbiA9IFBR QVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCXVz YWdlKGFyZ3YpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSAx MDAwOgkJCS8qIC0tZXhwZWN0ZWQtc2NvcGUgKi8KKwkJCQlleHBlY3RlZF9zY29wZSA9IG9wdGFy ZzsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxMDAxOgkJCS8qIC0tZXhwZWN0ZWQtdXJpICovCisJ CQkJZXhwZWN0ZWRfdXJpID0gb3B0YXJnOworCQkJCWJyZWFrOworCisJCQljYXNlIDEwMDI6CQkJ LyogLS1uby1ob29rICovCisJCQkJbm9faG9vayA9IHRydWU7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgMTAwMzoJCQkvKiAtLXRva2VuICovCisJCQkJdG9rZW4gPSBvcHRhcmc7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgMTAwNDoJCQkvKiAtLWhhbmctZm9yZXZlciAqLworCQkJCWhhbmdfZm9yZXZl ciA9IHRydWU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwNToJCQkvKiAtLW1pc2JlaGF2ZSAq LworCQkJCW1pc2JlaGF2ZV9tb2RlID0gb3B0YXJnOworCQkJCWJyZWFrOworCisJCQljYXNlIDEw MDY6CQkJLyogLS1zdHJlc3MtYXN5bmMgKi8KKwkJCQlzdHJlc3NfYXN5bmMgPSB0cnVlOworCQkJ CWJyZWFrOworCisJCQljYXNlIDEwMDc6CQkJLyogLS1leHBlY3RlZC1pc3N1ZXIgKi8KKwkJCQll eHBlY3RlZF9pc3N1ZXIgPSBvcHRhcmc7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwODoJCQkv KiAtLWVycm9yICovCisJCQkJZXJybXNnID0gb3B0YXJnOworCQkJCWJyZWFrOworCisJCQlkZWZh dWx0OgorCQkJCXVzYWdlKGFyZ3YpOworCQkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoYXJn YyAhPSAoZm9yX3BsdWdpbiA/IG9wdGluZCA6IG9wdGluZCArIDEpKQorCXsKKwkJdXNhZ2UoYXJn dik7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dXJuIGFyZ3Zbb3B0aW5kXTsKK30KKworLyoKKyAq IFBRYXV0aERhdGFIb29rIGltcGxlbWVudGF0aW9uLiBSZXBsYWNlcyB0aGUgZGVmYXVsdCBjbGll bnQgZmxvdyBieSBoYW5kbGluZworICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5bX1Yy XS4KKyAqLworaW50CitvYXV0aF90ZXN0X2F1dGhkYXRhX2hvb2soUEdhdXRoRGF0YSB0eXBlLCBQ R2Nvbm4gKmNvbm4sIHZvaWQgKmRhdGEpCit7CisJUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcTsK KwlQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXEyID0gTlVMTDsKKworCUFzc2VydChob29rX3Zl cnNpb24gPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4gfHwKKwkJICAgaG9va192ZXJz aW9uID09IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyKTsKKworCWlmIChub19ob29r IHx8IHR5cGUgIT0gaG9va192ZXJzaW9uKQorCQlyZXR1cm4gMDsKKworCXJlcSA9IGRhdGE7CisJ aWYgKHR5cGUgPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIpCisJCXJlcTIgPSBk YXRhOworCisJaWYgKGhhbmdfZm9yZXZlcikKKwl7CisJCS8qIFN0YXJ0IGFzeW5jaHJvbm91cyBw cm9jZXNzaW5nLiAqLworCQlyZXEtPmFzeW5jID0gYXN5bmNfY2I7CisJCXJldHVybiAxOworCX0K KworCWlmIChtaXNiZWhhdmVfbW9kZSkKKwl7CisJCWlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUs ICJuby1ob29rIikgIT0gMCkKKwkJCXJlcS0+YXN5bmMgPSBtaXNiZWhhdmVfY2I7CisJCXJldHVy biAxOworCX0KKworCWlmIChleHBlY3RlZF91cmkpCisJeworCQlpZiAoIXJlcS0+b3BlbmlkX2Nv bmZpZ3VyYXRpb24pCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgVVJJIFwiJXNc IiwgZ290IE5VTExcbiIsIGV4cGVjdGVkX3VyaSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlp ZiAoc3RyY21wKGV4cGVjdGVkX3VyaSwgcmVxLT5vcGVuaWRfY29uZmlndXJhdGlvbikgIT0gMCkK KwkJeworCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBVUkkgXCIlc1wiLCBnb3QgXCIlc1wi XG4iLCBleHBlY3RlZF91cmksIHJlcS0+b3BlbmlkX2NvbmZpZ3VyYXRpb24pOworCQkJcmV0dXJu IC0xOworCQl9CisJfQorCisJaWYgKGV4cGVjdGVkX3Njb3BlKQorCXsKKwkJaWYgKCFyZXEtPnNj b3BlKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVkIHNjb3BlIFwiJXNcIiwgZ290 IE5VTExcbiIsIGV4cGVjdGVkX3Njb3BlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChz dHJjbXAoZXhwZWN0ZWRfc2NvcGUsIHJlcS0+c2NvcGUpICE9IDApCisJCXsKKwkJCWZwcmludGYo c3RkZXJyLCAiZXhwZWN0ZWQgc2NvcGUgXCIlc1wiLCBnb3QgXCIlc1wiXG4iLCBleHBlY3RlZF9z Y29wZSwgcmVxLT5zY29wZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAoZXhwZWN0 ZWRfaXNzdWVyKQorCXsKKwkJaWYgKCFyZXEyKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgIi0t ZXhwZWN0ZWQtaXNzdWVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7CisJCQlyZXR1 cm4gLTE7CisJCX0KKworCQlpZiAoIXJlcTItPmlzc3VlcikKKwkJeworCQkJZnByaW50ZihzdGRl cnIsICJleHBlY3RlZCBpc3N1ZXIgXCIlc1wiLCBnb3QgTlVMTFxuIiwgZXhwZWN0ZWRfaXNzdWVy KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChzdHJjbXAoZXhwZWN0ZWRfaXNzdWVyLCBy ZXEyLT5pc3N1ZXIpICE9IDApCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgaXNz dWVyIFwiJXNcIiwgZ290IFwiJXNcIlxuIiwgZXhwZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1ZXIp OworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGVycm1zZykKKwl7CisJCWlmICh0b2tl bikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICItLWVycm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3 aXRoIC0tdG9rZW5cbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWVsc2UgaWYgKCFyZXEyKQor CQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJyb3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGgg LXYxXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXJlcTItPmVycm9yID0gZXJybXNnOwor CQlyZXR1cm4gLTE7CisJfQorCisJcmVxLT50b2tlbiA9IHRva2VuOworCXJldHVybiAxOworfQor CisvKgorICogU2V0cyB1cCBhIHJlcXVlc3QgZm9yIGEgcGx1Z2luIG1vZHVsZSAocGdfc3RhcnRf b2F1dGhiZWFyZXIoKSkgcmF0aGVyIHRoYW4KKyAqIHVzaW5nIHRoZSBob29rLgorICovCitpbnQK K29hdXRoX3Rlc3Rfc3RhcnRfZmxvdyhQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0 VjIgKnJlcXVlc3QpCit7CisJaW50CQkJcmV0OworCisJLyoKKwkgKiBXZSBjYW4gc3RpbGwgZGVm ZXIgdG8gdGhlIGhvb2sgYWJvdmUgdG8gYXZvaWQgY29weWluZyBjb2RlOyB3ZSBqdXN0CisJICog aGF2ZSB0byB0cmFuc2xhdGUgdGhlIHJldHVybiB2YWx1ZS4KKwkgKi8KKwlyZXQgPSBvYXV0aF90 ZXN0X2F1dGhkYXRhX2hvb2soUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIsIGNvbm4s CisJCQkJCQkJCSAgIHJlcXVlc3QpOworCisJaWYgKHJldCA9PSAwKQorCXsKKwkJLyogVGhpcyBp cyBhIGJ1ZyBpbiB0aGUgdGVzdC4gKi8KKwkJZnByaW50ZihzdGRlcnIsICJwbHVnaW4gdGVzdHMg Y2Fubm90IG1ha2UgdXNlIG9mIC12MSBvciAtLW5vLWhvb2tcbiIpOworCQlleGl0KDEpOworCX0K KworCXJldHVybiAocmV0ID09IDEpID8gMCA6IC0xOworfQorCitzdGF0aWMgUG9zdGdyZXNQb2xs aW5nU3RhdHVzVHlwZQorYXN5bmNfY2IoUEdjb25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVxdWVz dCAqcmVxLCBwZ3NvY2tldCAqYWx0c29jaykKK3sKKwlpZiAoaGFuZ19mb3JldmVyKQorCXsKKwkJ LyoKKwkJICogVGhpcyBjb2RlIHRlc3RzIHRoYXQgbm90aGluZyBpcyBpbnRlcmZlcmluZyB3aXRo IGxpYnBxJ3MgaGFuZGxpbmcKKwkJICogb2YgY29ubmVjdF90aW1lb3V0LgorCQkgKi8KKwkJc3Rh dGljIHBnc29ja2V0IHNvY2sgPSBQR0lOVkFMSURfU09DS0VUOworCisJCWlmIChzb2NrID09IFBH SU5WQUxJRF9TT0NLRVQpCisJCXsKKwkJCS8qIEZpcnN0IGNhbGwuIENyZWF0ZSBhbiB1bmJvdW5k IHNvY2tldCB0byB3YWl0IG9uLiAqLworI2lmZGVmIFdJTjMyCisJCQlXU0FEQVRBCQl3c2FEYXRh OworCQkJaW50CQkJZXJyOworCisJCQllcnIgPSBXU0FTdGFydHVwKE1BS0VXT1JEKDIsIDIpLCAm d3NhRGF0YSk7CisJCQlpZiAoZXJyKQorCQkJeworCQkJCXBlcnJvcigiV1NBU3RhcnR1cCBmYWls ZWQiKTsKKwkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CisJCQl9CisjZW5kaWYKKwkJ CXNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisJCQlpZiAoc29jayA9PSBQ R0lOVkFMSURfU09DS0VUKQorCQkJeworCQkJCXBlcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBkYXRh Z3JhbSBzb2NrZXQiKTsKKwkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CisJCQl9CisJ CX0KKworCQkvKiBNYWtlIGxpYnBxIHdhaXQgb24gdGhlICh1bnJlYWRhYmxlKSBzb2NrZXQuICov CisJCSphbHRzb2NrID0gc29jazsKKwkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKKwl9 CisKKwlyZXEtPnRva2VuID0gdG9rZW47CisJcmV0dXJuIFBHUkVTX1BPTExJTkdfT0s7Cit9CisK K3N0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCittaXNiZWhhdmVfY2IoUEdjb25uICpj b25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLCBwZ3NvY2tldCAqYWx0c29jaykKK3sKKwlp ZiAoc3RyY21wKG1pc2JlaGF2ZV9tb2RlLCAiZmFpbC1hc3luYyIpID09IDApCisJeworCQkvKiBK dXN0IGZhaWwgIm5vcm1hbGx5Ii4gKi8KKwkJaWYgKGVycm1zZykKKwkJeworCQkJUEdvYXV0aEJl YXJlclJlcXVlc3RWMiAqcmVxMjsKKworCQkJaWYgKGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRB X09BVVRIX0JFQVJFUl9UT0tFTikKKwkJCXsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJyb3Ig Y2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKKwkJCQlleGl0KDEpOworCQkJfQorCisJ CQlyZXEyID0gKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKikgcmVxOworCQkJcmVxMi0+ZXJyb3Ig PSBlcnJtc2c7CisJCX0KKworCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CisJfQorCWVs c2UgaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgIm5vLXRva2VuIikgPT0gMCkKKwl7CisJCS8q IENhbGxiYWNrcyBtdXN0IGFzc2lnbiByZXEtPnRva2VuIGJlZm9yZSByZXR1cm5pbmcgT0suICov CisJCXJldHVybiBQR1JFU19QT0xMSU5HX09LOworCX0KKwllbHNlIGlmIChzdHJjbXAobWlzYmVo YXZlX21vZGUsICJuby1zb2NrZXQiKSA9PSAwKQorCXsKKwkJLyogQ2FsbGJhY2tzIG11c3QgYXNz aWduICphbHRzb2NrIGJlZm9yZSBhc2tpbmcgZm9yIHBvbGxpbmcuICovCisJCXJldHVybiBQR1JF U19QT0xMSU5HX1JFQURJTkc7CisJfQorCWVsc2UKKwl7CisJCWZwcmludGYoc3RkZXJyLCAidW5y ZWNvZ25pemVkIC0tbWlzYmVoYXZlIG1vZGU6ICVzXG4iLCBtaXNiZWhhdmVfbW9kZSk7CisJCWV4 aXQoMSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0 b3IvdC8wMDJfY2xpZW50LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8w MDJfY2xpZW50LnBsCmluZGV4IDEyYWYzNWI3ZDk2Li5iNTA0NTFlZmI3NCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbApAQCAtMSw2ICsx LDYgQEAKICMKICMgRXhlcmNpc2VzIHRoZSBBUEkgZm9yIGN1c3RvbSBPQXV0aCBjbGllbnQgZmxv d3MsIHVzaW5nIHRoZSBvYXV0aF9ob29rX2NsaWVudAotIyB0ZXN0IGRyaXZlci4KKyMgdGVzdCBk cml2ZXIgYW5kIHRoZSBvYXV0aF9mbG93IGN1c3RvbSBwbHVnaW4uCiAjCiAjIENvcHlyaWdodCAo YykgMjAyMS0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogIwpAQCAt MjAsNiArMjAsMTAgQEAgaWYgKCEkRU5We1BHX1RFU1RfRVhUUkF9IHx8ICRFTlZ7UEdfVEVTVF9F WFRSQX0gIX4gL1xib2F1dGhcYi8pCiAJICAnUG90ZW50aWFsbHkgdW5zYWZlIHRlc3Qgb2F1dGgg bm90IGVuYWJsZWQgaW4gUEdfVEVTVF9FWFRSQSc7CiB9CiAKK215ICRwbHVnaW5fc3VwcG9ydGVk ID0gKAorCQkgY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5lIEhBVkVfU1lTX0VWRU5UX0ggMSIpCisJ ICBvciBjaGVja19wZ19jb25maWcoIiNkZWZpbmUgSEFWRV9TWVNfRVBPTExfSCAxIikpOworCiAj CiAjIENsdXN0ZXIgU2V0dXAKICMKQEAgLTcyLDYgKzc2LDggQEAgc3ViIHRlc3QKIAkJJGZsYWdz ID0gJHBhcmFtc3tmbGFnc307CiAJfQogCisJIyBGaXJzdCBydW4gdGhlIG9hdXRoX2hvb2tfY2xp ZW50LCB3aGljaCB1c2VzIFBRYXV0aERhdGFIb29rIHRvIGluc2VydCBhIG5ldworCSMgT0F1dGgg Zmxvdy4KIAlteSBAY21kID0gKCJvYXV0aF9ob29rX2NsaWVudCIsIEB7JGZsYWdzfSwgJGNvbW1v bl9jb25uc3RyKTsKIAlub3RlICJydW5uaW5nICciIC4gam9pbigiJyAnIiwgQGNtZCkgLiAiJyI7 CiAKQEAgLTEwMyw2ICsxMDksMzcgQEAgc3ViIHRlc3QKIAkJJG5vZGUtPmxvZ19jaGVjaygiJHRl c3RfbmFtZTogbG9nIG1hdGNoZXMiLAogCQkJJGxvZ19zdGFydCwgbG9nX2xpa2UgPT4gJHBhcmFt c3tsb2dfbGlrZX0pOwogCX0KKworICBTS0lQOgorCXsKKwkJbGFzdCBTS0lQIGlmICRwYXJhbXN7 aG9va19vbmx5fTsKKwkJc2tpcCAiT0F1dGggbW9kdWxlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0 aGlzIHBsYXRmb3JtIgorCQkgIHVubGVzcyAkcGx1Z2luX3N1cHBvcnRlZDsKKworCQkjIFJ1biB0 aGUgc2FtZSB0ZXN0IHdpdGggcHNxbCBpdHNlbGYsIGxvYWRpbmcgdGhlIG9hdXRoX2Zsb3cuc28g bW9kdWxlLgorCQlsb2NhbCAkRU5We1BHT0FVVEhNT0RVTEV9ID0gJEVOVntmbG93X21vZHVsZV9w YXRofTsKKworCQkjIEZsYWdzIGFyZSBwYXNzZWQgdG8gdGhlIG1vZHVsZSB2aWEgT0FVVEhfVEVT VF9GTEFHUywgd2l0aCAweDAxIGFzIGEKKwkJIyBzZXBhcmF0b3IuCisJCWxvY2FsICRFTlZ7T0FV VEhfVEVTVF9GTEFHU30gPSBqb2luKCJceDAxIiwgQHskZmxhZ3N9KTsKKworCQlpZiAoJHBhcmFt c3tleHBlY3Rfc3VjY2Vzc30pCisJCXsKKwkJCSRub2RlLT5jb25uZWN0X29rKAorCQkJCSRjb21t b25fY29ubnN0ciwKKwkJCQkiW3BsdWdpbiBmbG93XSAkdGVzdF9uYW1lIiwKKwkJCQlleHBlY3Rl ZF9zdGRlcnIgPT4gJHBhcmFtc3tleHBlY3RlZF9zdGRlcnJ9LAorCQkJCWxvZ19saWtlID0+ICRw YXJhbXN7bG9nX2xpa2V9KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCSRub2RlLT5jb25uZWN0X2Zh aWxzKAorCQkJCSRjb21tb25fY29ubnN0ciwKKwkJCQkiW3BsdWdpbiBmbG93XSAkdGVzdF9uYW1l IiwKKwkJCQlleHBlY3RlZF9zdGRlcnIgPT4gJHBhcmFtc3tleHBlY3RlZF9zdGRlcnJ9LAorCQkJ CWxvZ19saWtlID0+ICRwYXJhbXN7bG9nX2xpa2V9KTsKKwkJfQorCX0KIH0KIAogdGVzdCgKQEAg LTExOSw2ICsxNTYsNyBAQCB0ZXN0KAogIyBNYWtlIHN1cmUgdGhlIHYxIGhvb2sgY29udGludWVz IHRvIHdvcmsuCiB0ZXN0KAogCSJ2MSBzeW5jaHJvbm91cyBob29rIGNhbiBwcm92aWRlIGEgdG9r ZW4iLAorCWhvb2tfb25seSA9PiAxLCAgICAjIHBsdWdpbnMgZG9uJ3Qgc3VwcG9ydCBBUEkgdjEK IAlmbGFncyA9PiBbCiAJCSItdjEiLAogCQkiLS10b2tlbiIgPT4gIm15LXRva2VuLXYxIiwKQEAg LTEzMyw2ICsxNzEsNyBAQCBpZiAoJEVOVnt3aXRoX2xpYmN1cmx9IG5lICd5ZXMnKQogCSMgbGli cHEgc2hvdWxkIGhlbHAgdXNlcnMgb3V0IGlmIG5vIE9BdXRoIHN1cHBvcnQgaXMgYnVpbHQgaW4u CiAJdGVzdCgKIAkJImZhaWxzIHdpdGhvdXQgY3VzdG9tIGhvb2sgaW5zdGFsbGVkIiwKKwkJaG9v a19vbmx5ID0+IDEsICAgICMgcGx1Z2lucyBjYW4ndCB1c2UgLS1uby1ob29rCiAJCWZsYWdzID0+ IFsiLS1uby1ob29rIl0sCiAJCWV4cGVjdGVkX3N0ZGVyciA9PgogCQkgIHFyL25vIE9BdXRoIGZs b3dzIGFyZSBhdmFpbGFibGUgXCh0cnkgaW5zdGFsbGluZyB0aGUgbGlicHEtb2F1dGggcGFja2Fn ZVwpLwpAQCAtMTk3LDQgKzIzNiwxOSBAQCB0ZXN0KAogCWV4cGVjdGVkX3N0ZGVyciA9PgogCSAg cXIvdXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZmFpbGVkOiBhc3luYyBlcnJvciBtZXNzYWdlLyk7 CiAKK1NLSVA6Cit7CisJc2tpcCAiT0F1dGggbW9kdWxlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0 aGlzIHBsYXRmb3JtIgorCSAgdW5sZXNzICRwbHVnaW5fc3VwcG9ydGVkOworCisJIyBNYWtlIHN1 cmUgYSBtaXNhaW1lZCBQR09BVVRITU9EVUxFIGdpdmVzIHRoZSBjb3JyZWN0IGVycm9yIG1lc3Nh Z2UuCisJbG9jYWwgJEVOVntQR09BVVRITU9EVUxFfSA9ICRub2RlLT5iYXNlZGlyIC4gJy9ub25l eGlzdGVudC5zbyc7CisKKwkkbm9kZS0+Y29ubmVjdF9mYWlscygKKwkJJGNvbW1vbl9jb25uc3Ry LAorCQkiUEdPQVVUSE1PRFVMRSBlcnJvciBtZXNzYWdlcyIsCisJCWV4cGVjdGVkX3N0ZGVyciA9 PgorCQkgIHFyL3VzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZDogcGx1Z2luIGNvdWxkIG5v dCBiZSBsb2FkZWQvKTsKK30KKwogZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEKCg== --0000000000004484d6064b99ba84--