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.94.2) (envelope-from ) id 1uH70N-00DlCu-Lb for pgsql-hackers@arkaria.postgresql.org; Mon, 19 May 2025 20:22:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uH70M-0012om-7m for pgsql-hackers@arkaria.postgresql.org; Mon, 19 May 2025 20:22:34 +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.94.2) (envelope-from ) id 1uH70L-0012oe-MV for pgsql-hackers@lists.postgresql.org; Mon, 19 May 2025 20:22:33 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uH70I-002kAn-2E for pgsql-hackers@postgresql.org; Mon, 19 May 2025 20:22:33 +0000 Received: from [192.168.1.112] (iptv-hkibng21-58c090-167.dhcp.inet.fi [88.192.144.167]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4b1Tcx40kKz49Pxq; Mon, 19 May 2025 23:22:25 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1747686146; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=2ej/tCiB+n7H5EYSDB3dTTfUjYz2V797Q5BiIHpfHU8=; b=emeN4pUP7HZsXhYO7Jg5cQAxge4lPLiTVXMJ4BxUWx/0ZjvMYS2T8gYBpwNr9gLVe/M/7Y fnY7uDRWJIgPZ/9Rt2/8bk9gP8HeXXEH1R0YGB792LpYlGzA6NfUt3E8kGmiIxx7m9VVKG LT+6D6z2iyJeJ/EtaNfeAxdo2n4MJHxlAnfn/vJpmoSXhCZMpQqsELAhGjNAwKUmi0kQSz Ydn+c0qSZFbhejLzdUclnXAW99KW1tPsuMRHirdhYJx/KkuiXPl+WbuTFem9adxs+X/+0s cJg/BjiADNa5ySQrcgyAIy2MojOdOIrf/9mS9AVvONPiLMMASbQ/JtdU+CwMpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1747686146; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=2ej/tCiB+n7H5EYSDB3dTTfUjYz2V797Q5BiIHpfHU8=; b=b7A9E9Wm7PS3LSElX2ucwNZaoEY77oKS+ePg+sCGoQx3co4fPIIEoOeMhWhtSRk8luhWZf NoC8UGSmziOd1rmrcgjFT67LgH3o+bngpbMObhmzTu+gSbmV6EKQXc2XjykoUXJs34AiqW bqhv1ZNDftwMb1sPtD1RQSvUPcw0uYTIWvW1NOCXleHss2sKnFbDbYtKKaNfEHUBCr0Vil fHikd0mzOD8yZvrLdnsgPdDA2KLqIRNLsc71r7HolUqM+0fH3GDk+2fkV7AtA+eoQtGTmT LXtz1uS8vEP8s3E5JmTF8CTZ4+9VN5q825nL6t63Y6y7s3QYNP/POzM1XiojrQ== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1747686146; a=rsa-sha256; cv=none; b=pYvpC01rLenedPfzyUJKcKQJgx4ksaXKf3CFpe4MAZi42NmuLM73nH2rZtXCmNO2YGtUSu Gyv4ZiLE+pMHY0i//A1U8z+hyaJ5sVpJiApv4QmD/A3sVrsznytg3cPTUmpUC5D5LY+JNM WZDl7/8x2dVgB6QTjs+vWSkorKx+P36ntLs9IQcV4wN5+1QpEWOteL0KxJtKCgdbFL0o2l OKcxT32SSeVIgnEu5Defv4TN6N5NkScbM9YcN6hLAJAXm5Eos7CrcyoMOg8kC7CBXXhn8D R5VRAdWKKOYH2vRws6i16p0UgF9TNKFGv5cZSLzN8+TFPwOqIsa30EOBHndl1w== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------UKeBz5P4n0QSQSe2NAsv4oe5" Message-ID: Date: Mon, 19 May 2025 23:22:25 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Thread-safe getopt() (was: report on not thread-safe functions) To: Peter Eisentraut , pgsql-hackers References: <856e5ec3-879f-42ee-8258-8bcc6ec9bdea@eisentraut.org> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: <856e5ec3-879f-42ee-8258-8bcc6ec9bdea@eisentraut.org> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------UKeBz5P4n0QSQSe2NAsv4oe5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 06/06/2024 17:34, Peter Eisentraut wrote: > Additionally, there are non-standard functions that are not > thread-safe, such as getopt_long(). getopt_long() is not used in the server, only in client programs. The server binary does actually accept a few "long" arguments, like --single and --describe-config, but it has special code to handle them and doesn't use getopt_long(). So we can leave getopt_long() alone for now. > - getopt() > > This needs a custom replacement.  (There is no getopt_r() because > programs usually don't call getopt() after startup.) > > (Note: This is also called during session startup, not only during > initial postmaster start.  So we definitely need something here, if we > want to, like, start more than one session concurrently.) Here's a patch for a thread-safe version of getopt(). I implemented it as two functions, pg_getopt_start() and pg_getopt_next(). Since there's no standard to follow, we have freedom on how to implement it, and IMHO that feels more natural than the single getopt() function. I took the implementation from the getopt() replacement we already had for platforms that don't have getopt(), moving all the global variables it used to a struct. The last patch attached replaces all calls in the server to use the new variant, but leaves all the calls in client programs alone. I considered changing the client programs as well, but there's no immediate need, and it seems nice to use OS functions when possible. (The first patch fixes a little harmless bug in get_stats_option_name() that's gone unnoticed since 2006 but got in the way now.) -- Heikki Linnakangas Neon (https://neon.tech) --------------UKeBz5P4n0QSQSe2NAsv4oe5 Content-Type: text/x-patch; charset=UTF-8; name="0001-Fix-latent-bug-in-get_stats_option_name.patch" Content-Disposition: attachment; filename="0001-Fix-latent-bug-in-get_stats_option_name.patch" Content-Transfer-Encoding: base64 RnJvbSAzYjAyODAxMTg4Yjc5NjFkMDFkN2M0N2ZjOWI5MjMwMzRiZmJiODIyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTkgTWF5IDIwMjUgMjM6MTU6NTIgKzAzMDAK U3ViamVjdDogW1BBVENIIDEvM10gRml4IGxhdGVudCBidWcgaW4gZ2V0X3N0YXRzX29wdGlv bl9uYW1lKCkKClRoZSBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBsb29rIGF0IHRoZSBwYXNz ZWQgaW4gJ2FyZycgYXJndW1lbnQsIGJ1dApwZWVrcyBhdCB0aGUgJ29wdGFyZycgZ2xvYmFs IHZhcmlhYmxlIHRoYXQncyBwYXJ0IG9mIGdldG9wdCgpCmluc3RlYWQuIEl0IGhhcHBlbmVk IHRvIHdvcmsgYW55d2F5LCBiZWNhdXNlIGFsbCBjYWxsZXJzIHBhc3NlZAonb3B0YXJnJyBh cyB0aGUgYXJndW1lbnQuCi0tLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIHwgNCAr Ky0tCiAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYwppbmRleCAxYWU1MWIxYjM5MS4uZjA2OWFjYjllZTIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMKQEAgLTM3NTcsOSArMzc1Nyw5IEBAIGdldF9zdGF0c19vcHRpb25f bmFtZShjb25zdCBjaGFyICphcmcpCiAJc3dpdGNoIChhcmdbMF0pCiAJewogCQljYXNlICdw JzoKLQkJCWlmIChvcHRhcmdbMV0gPT0gJ2EnKQkvKiAicGFyc2VyIiAqLworCQkJaWYgKGFy Z1sxXSA9PSAnYScpCS8qICJwYXJzZXIiICovCiAJCQkJcmV0dXJuICJsb2dfcGFyc2VyX3N0 YXRzIjsKLQkJCWVsc2UgaWYgKG9wdGFyZ1sxXSA9PSAnbCcpCS8qICJwbGFubmVyIiAqLwor CQkJZWxzZSBpZiAoYXJnWzFdID09ICdsJykgLyogInBsYW5uZXIiICovCiAJCQkJcmV0dXJu ICJsb2dfcGxhbm5lcl9zdGF0cyI7CiAJCQlicmVhazsKIAotLSAKMi4zOS41Cgo= --------------UKeBz5P4n0QSQSe2NAsv4oe5 Content-Type: text/x-patch; charset=UTF-8; name="0002-Invent-custom-pg_getopt_ctx-that-is-thread-safe.patch" Content-Disposition: attachment; filename*0="0002-Invent-custom-pg_getopt_ctx-that-is-thread-safe.patch" Content-Transfer-Encoding: base64 RnJvbSA4YjhmNjI4NTAyMzExNDhlNDQ3MWU0MjEyODhmYTBkMTc1ZTQ4MDM5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTkgTWF5IDIwMjUgMjI6MzM6NTkgKzAzMDAK U3ViamVjdDogW1BBVENIIDIvM10gSW52ZW50IGN1c3RvbSBwZ19nZXRvcHRfY3R4IHRoYXQg aXMgdGhyZWFkLXNhZmUKClRoZSBzdGFuZGFyZCBnZXRvcHQoMykgZnVuY3Rpb24gaXMgbm90 IHJlLWVudHJhbnQgbm9yCnRocmVhZC1zYWZlLiBUaGF0J3MgT0sgZm9yIGN1cnJlbnQgdXNh Z2UsIGJ1dCBpdCdzIG9uZSBtb3JlIGxpdHRsZQp0aGluZyB3ZSBuZWVkIHRvIGNoYW5nZSBp biBvcmRlciB0byBtYWtlIHRoZSBzZXJ2ZXIgbXVsdGktdGhyZWFkZWQuCgpUaGVyZSdzIG5v IHN0YW5kYXJkIGdldG9wdF9yKCkgZnVuY3Rpb24gb24gYW55IHBsYXRmb3JtLCBiZWNhdXNl CmNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIHVzdWFsbHkgcGFyc2VkIGVhcmx5IHdoZW4g eW91IHN0YXJ0IGEKcHJvZ3JhbSwgdXN1YWxseSBiZWZvcmUgbGF1bmNoaW5nIGFueSB0aHJl YWRzLCBzbyB0aGVyZSdzIG5vdCBtdWNoCm5lZWQgZm9yIGl0LiBIb3dldmVyLCB3ZSBjYWxs IGl0IGF0IGJhY2tlbmQgc3RhcnR1cCB0byBwYXJzZSBvcHRpb25zCmZyb20gdGhlIHN0YXJ0 dXAgcGFja2V0LiBXZSBhcmUgdGhlcmVmb3JlIGZyZWUgdG8gZGVmaW5lIG91ciBvd24uCgpU aGUgcGdfZ2V0b3B0X3N0YXJ0L25leHQoKSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0 aGUgb2xkIGdldG9wdAppbXBsZW1lbnRhdGlvbiwgSSBqdXN0IGdhdGhlcmVkIGFsbCB0aGUg c3RhdGUgdmFyaWFibGVzIHRvIGEgc3RydWN0LgpUaGUgbm9uLXJlLWVudHJhbnQgZ2V0b3B0 KCkgZnVuY3Rpb24gaXMgbm93IGEgd3JhcHBlciBhcm91bmQgdGhlCmN1c3RvbSByZS1lbnRy YW50IHZhcmlhbnQsIG9uIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgZ2V0b3B0KDMpLgpn ZXRvcHRfbG9uZygpIGlzIG5vdCB1c2VkIGluIHRoZSBzZXJ2ZXIsIHNvIHdlIGRvbid0IG5l ZWQgdG8gcHJvdmlkZSBhCnJlLWVudHJhbnQgdmFyaWFudCBvZiB0aGF0LgotLS0KIHNyYy9p bmNsdWRlL3BvcnQvcGdfZ2V0b3B0X2N0eC5oIHwgIDI5ICsrKysrKysKIHNyYy9wb3J0L01h a2VmaWxlICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9wb3J0L2dldG9wdC5jICAgICAg ICAgICAgICAgIHwgIDkxICsrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL3BvcnQvbWVzb24u YnVpbGQgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3BvcnQvcGdfZ2V0b3B0X2N0eC5jICAg ICAgICAgfCAxMzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgfCAgIDEgKwogNiBmaWxlcyBjaGFuZ2VkLCAxODkg aW5zZXJ0aW9ucygrKSwgNzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2luY2x1ZGUvcG9ydC9wZ19nZXRvcHRfY3R4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv cG9ydC9wZ19nZXRvcHRfY3R4LmMKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L3Bn X2dldG9wdF9jdHguaCBiL3NyYy9pbmNsdWRlL3BvcnQvcGdfZ2V0b3B0X2N0eC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MDY2OTE1ZDI1OQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3BvcnQvcGdfZ2V0b3B0X2N0eC5oCkBAIC0wLDAg KzEsMjkgQEAKKy8qCisgKiBSZS1lbnRyYW50IHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIGdl dG9wdCgzKSBmdW5jdGlvbi4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1 ZGUvcG9ydC9wZ19nZXRvcHRfY3R4LmgKKyAqLworI2lmbmRlZiBQR19HRVRPUFRfQ1RYX0gK KyNkZWZpbmUgUEdfR0VUT1BUX0NUWF9ICisKK3R5cGVkZWYgc3RydWN0Cit7CisJaW50CQkJ bmFyZ2M7CisJY2hhcgkgICAqY29uc3QgKm5hcmd2OworCWNvbnN0IGNoYXIgKm9zdHI7CisK KwljaGFyCSAgICpvcHRhcmc7CisJaW50CQkJb3B0aW5kOworCWludAkJCW9wdGVycjsKKwlp bnQJCQlvcHRvcHQ7CisKKwkvKiBpbnRlcm5hbCBzdGF0ZSAqLworCWNoYXIJICAgKnBsYWNl OworfSBwZ19nZXRvcHRfY3R4OworCitleHRlcm4gdm9pZCBwZ19nZXRvcHRfc3RhcnQocGdf Z2V0b3B0X2N0eCAqY3R4LCBpbnQgbmFyZ2MsIGNoYXIgKmNvbnN0ICpuYXJndiwgY29uc3Qg Y2hhciAqb3N0cik7CitleHRlcm4gaW50CXBnX2dldG9wdF9uZXh0KHBnX2dldG9wdF9jdHgg KmN0eCk7CisKKyNlbmRpZgkJCQkJCQkvKiBQR19HRVRPUFRfQ1RYX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9wb3J0L01ha2VmaWxlIGIvc3JjL3BvcnQvTWFrZWZpbGUKaW5kZXggNDI3NDk0 OWRmYTQuLjVhYTU4NjdiNWVhIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9NYWtlZmlsZQorKysg Yi9zcmMvcG9ydC9NYWtlZmlsZQpAQCAtNDQsNiArNDQsNyBAQCBPQkpTID0gXAogCW5vYmxv Y2subyBcCiAJcGF0aC5vIFwKIAlwZ19iaXR1dGlscy5vIFwKKwlwZ19nZXRvcHRfY3R4Lm8g XAogCXBnX2xvY2FsZWNvbnZfci5vIFwKIAlwZ19udW1hLm8gXAogCXBnX3BvcGNvdW50X2Fh cmNoNjQubyBcCmRpZmYgLS1naXQgYS9zcmMvcG9ydC9nZXRvcHQuYyBiL3NyYy9wb3J0L2dl dG9wdC5jCmluZGV4IDY1NWZlZjNiMGM3Li4zNGE2MGQ1ZjMyZCAxMDA2NDQKLS0tIGEvc3Jj L3BvcnQvZ2V0b3B0LmMKKysrIGIvc3JjL3BvcnQvZ2V0b3B0LmMKQEAgLTMyLDExICszMiw3 IEBACiAjaW5jbHVkZSAiYy5oIgogCiAjaW5jbHVkZSAicGdfZ2V0b3B0LmgiCi0KLSNpZiBk ZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3Np ZFtdID0gIkAoIylnZXRvcHQuYwk4LjMgKEJlcmtlbGV5KSA0LzI3Lzk1IjsKLSNlbmRpZgkJ CQkJCQkvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KKyNpbmNsdWRlICJwb3J0L3Bn X2dldG9wdF9jdHguaCIKIAogLyoKICAqIE9uIE9wZW5CU0QgYW5kIHNvbWUgdmVyc2lvbnMg b2YgU29sYXJpcywgb3B0ZXJyIGFuZCBmcmllbmRzIGFyZSBkZWZpbmVkIGluCkBAIC01NCw4 NCArNTAsMzkgQEAgY2hhcgkgICAqb3B0YXJnOwkJCQkvKiBhcmd1bWVudCBhc3NvY2lhdGVk IHdpdGggb3B0aW9uICovCiAKICNlbmRpZgogCi0jZGVmaW5lIEJBRENICShpbnQpJz8nCi0j ZGVmaW5lIEJBREFSRwkoaW50KSc6JwotI2RlZmluZSBFTVNHCSIiCi0KIC8qCiAgKiBnZXRv cHQKICAqCVBhcnNlIGFyZ2MvYXJndiBhcmd1bWVudCB2ZWN0b3IuCiAgKgorICogV2UgdXNl IHRoZSByZS1lbnRyYW50IHBnX2dldG9wdF9jdHgoKSBmdW5jdGlvbiB1bmRlciB0aGUgaG9v ZCwgYnV0IGV4cG9zZSB0aGUKKyAqIHN0YW5kYXJkIG5vbiByZS1lbnRyYW50IEFQSS4KKyAq CiAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHVzZSBvcHRyZXNldC4gIEluc3Rl YWQsIHdlIGd1YXJhbnRlZSB0aGF0CiAgKiBpdCBjYW4gYmUgcmVzdGFydGVkIG9uIGEgbmV3 IGFyZ3YgYXJyYXkgYWZ0ZXIgYSBwcmV2aW91cyBjYWxsIHJldHVybmVkIC0xLAogICogaWYg dGhlIGNhbGxlciByZXNldHMgb3B0aW5kIHRvIDEgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIG9m IHRoZSBuZXcgc2VyaWVzLgotICogKEludGVybmFsbHksIHRoaXMgbWVhbnMgd2UgbXVzdCBi ZSBzdXJlIHRvIHJlc2V0ICJwbGFjZSIgdG8gRU1TRyBiZWZvcmUKKyAqIChJbnRlcm5hbGx5 LCB0aGlzIG1lYW5zIHdlIG11c3QgYmUgc3VyZSB0byByZXNldCAiYWN0aXZlIiBiZWZvcmUK ICAqIHJldHVybmluZyAtMS4pCiAgKi8KIGludAogZ2V0b3B0KGludCBuYXJnYywgY2hhciAq Y29uc3QgKm5hcmd2LCBjb25zdCBjaGFyICpvc3RyKQogewotCXN0YXRpYyBjaGFyICpwbGFj ZSA9IEVNU0c7CS8qIG9wdGlvbiBsZXR0ZXIgcHJvY2Vzc2luZyAqLwotCWNoYXIJICAgKm9s aTsJCQkvKiBvcHRpb24gbGV0dGVyIGxpc3QgaW5kZXggKi8KKwlzdGF0aWMgYm9vbCBhY3Rp dmUgPSBmYWxzZTsKKwlzdGF0aWMgcGdfZ2V0b3B0X2N0eCBjdHg7CisJaW50CQkJcmVzdWx0 OwogCi0JaWYgKCEqcGxhY2UpCi0JewkJCQkJCQkvKiB1cGRhdGUgc2Nhbm5pbmcgcG9pbnRl ciAqLwotCQlpZiAob3B0aW5kID49IG5hcmdjIHx8ICoocGxhY2UgPSBuYXJndltvcHRpbmRd KSAhPSAnLScpCi0JCXsKLQkJCXBsYWNlID0gRU1TRzsKLQkJCXJldHVybiAtMTsKLQkJfQot CQlpZiAocGxhY2VbMV0gJiYgKisrcGxhY2UgPT0gJy0nICYmIHBsYWNlWzFdID09ICdcMCcp Ci0JCXsJCQkJCQkvKiBmb3VuZCAiLS0iICovCi0JCQkrK29wdGluZDsKLQkJCXBsYWNlID0g RU1TRzsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0JCQkJCQkJLyogb3B0aW9uIGxldHRlciBv a2F5PyAqLwotCWlmICgob3B0b3B0ID0gKGludCkgKnBsYWNlKyspID09IChpbnQpICc6JyB8 fAotCQkhKG9saSA9IHN0cmNocihvc3RyLCBvcHRvcHQpKSkKKwlpZiAoIWFjdGl2ZSkKIAl7 Ci0JCS8qCi0JCSAqIGlmIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5ICctJyBhcyBhbiBvcHRp b24sIGFzc3VtZSBpdCBtZWFucyAtMS4KLQkJICovCi0JCWlmIChvcHRvcHQgPT0gKGludCkg Jy0nKQotCQl7Ci0JCQlwbGFjZSA9IEVNU0c7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJaWYg KCEqcGxhY2UpCi0JCQkrK29wdGluZDsKLQkJaWYgKG9wdGVyciAmJiAqb3N0ciAhPSAnOicp Ci0JCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCi0JCQkJCQkgICAiaWxsZWdhbCBvcHRpb24g LS0gJWNcbiIsIG9wdG9wdCk7Ci0JCXJldHVybiBCQURDSDsKKwkJcGdfZ2V0b3B0X3N0YXJ0 KCZjdHgsIG5hcmdjLCBuYXJndiwgb3N0cik7CisJCWN0eC5vcHRlcnIgPSBvcHRlcnI7CisJ CWFjdGl2ZSA9IHRydWU7CiAJfQotCWlmICgqKytvbGkgIT0gJzonKQotCXsJCQkJCQkJLyog ZG9uJ3QgbmVlZCBhcmd1bWVudCAqLwotCQlvcHRhcmcgPSBOVUxMOwotCQlpZiAoISpwbGFj ZSkKLQkJCSsrb3B0aW5kOwotCX0KLQllbHNlCi0JewkJCQkJCQkvKiBuZWVkIGFuIGFyZ3Vt ZW50ICovCi0JCWlmICgqcGxhY2UpCQkJCS8qIG5vIHdoaXRlIHNwYWNlICovCi0JCQlvcHRh cmcgPSBwbGFjZTsKLQkJZWxzZSBpZiAobmFyZ2MgPD0gKytvcHRpbmQpCi0JCXsJCQkJCQkv KiBubyBhcmcgKi8KLQkJCXBsYWNlID0gRU1TRzsKLQkJCWlmICgqb3N0ciA9PSAnOicpCi0J CQkJcmV0dXJuIEJBREFSRzsKLQkJCWlmIChvcHRlcnIpCi0JCQkJKHZvaWQpIGZwcmludGYo c3RkZXJyLAotCQkJCQkJCSAgICJvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNc biIsCi0JCQkJCQkJICAgb3B0b3B0KTsKLQkJCXJldHVybiBCQURDSDsKLQkJfQotCQllbHNl Ci0JCQkvKiB3aGl0ZSBzcGFjZSAqLwotCQkJb3B0YXJnID0gbmFyZ3Zbb3B0aW5kXTsKLQkJ cGxhY2UgPSBFTVNHOwotCQkrK29wdGluZDsKLQl9Ci0JcmV0dXJuIG9wdG9wdDsJCQkJLyog ZHVtcCBiYWNrIG9wdGlvbiBsZXR0ZXIgKi8KKworCXJlc3VsdCA9IHBnX2dldG9wdF9uZXh0 KCZjdHgpOworCW9wdGVyciA9IGN0eC5vcHRlcnI7CisJb3B0aW5kID0gY3R4Lm9wdGluZDsK KwlvcHRvcHQgPSBjdHgub3B0b3B0OworCW9wdGFyZyA9IGN0eC5vcHRhcmc7CisJaWYgKHJl c3VsdCA9PSAtMSkKKwkJYWN0aXZlID0gZmFsc2U7CisJcmV0dXJuIHJlc3VsdDsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9wb3J0L21lc29uLmJ1aWxkIGIvc3JjL3BvcnQvbWVzb24uYnVpbGQK aW5kZXggZmM3YjA1OWZlZTUuLmE2ZWM5YzgyZjNhIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9t ZXNvbi5idWlsZAorKysgYi9zcmMvcG9ydC9tZXNvbi5idWlsZApAQCAtNyw2ICs3LDcgQEAg cGdwb3J0X3NvdXJjZXMgPSBbCiAgICdub2Jsb2NrLmMnLAogICAncGF0aC5jJywKICAgJ3Bn X2JpdHV0aWxzLmMnLAorICAncGdfZ2V0b3B0X2N0eC5jJywKICAgJ3BnX2xvY2FsZWNvbnZf ci5jJywKICAgJ3BnX251bWEuYycsCiAgICdwZ19wb3Bjb3VudF9hYXJjaDY0LmMnLApkaWZm IC0tZ2l0IGEvc3JjL3BvcnQvcGdfZ2V0b3B0X2N0eC5jIGIvc3JjL3BvcnQvcGdfZ2V0b3B0 X2N0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTI1ZjQ3 ODEzZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wb3J0L3BnX2dldG9wdF9jdHguYwpAQCAt MCwwICsxLDEzNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfZ2V0b3B0 X2N0eC5jCisgKiAgICBUaHJlYWQtc2FmZSBpbXBsZW1lbnRhdGlvbiBvZiBnZXRvcHQoKQor ICoKKyAqIENvcHlyaWdodCAoYykgMTk4NywgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorICoJICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICoJICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCisgKgkgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu YW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y cworICoJICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqCSAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisg KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqICAgIHNyYy9wb3J0L3BnX2dldG9wdF9jdHguYworICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpbmNsdWRlICJjLmgiCisKKyNpbmNsdWRlICJwb3J0L3BnX2dl dG9wdF9jdHguaCIKKworI2RlZmluZSBCQURDSAkoaW50KSc/JworI2RlZmluZSBCQURBUkcJ KGludCknOicKKyNkZWZpbmUgRU1TRwkiIgorCisvKgorICogU3RhcnQgcGFyc2luZyBhcmdj L2FyZ3YgYXJndW1lbnQgdmVjdG9yLgorICoKKyAqIFRoaXMgaXMgYSByZS1lbnRyYW50IHZl cnNpb24gb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgZ2V0b3B0KDMpIGZ1bmN0aW9uLiBUbwor ICogdXNlLCBmaXJzdCBjYWxsIHBnX2dldG9wdF9zdGFydCgpIHRvIGluaXRpYWxpemUgdGhl IHN0YXRlLCBhbmQgdGhlbiBjYWxsCisgKiBwZ19nZXRvcHRfbmV4dCgpIHVudGlsIGl0IHJl dHVybnMgLTEuCisgKi8KK3ZvaWQKK3BnX2dldG9wdF9zdGFydChwZ19nZXRvcHRfY3R4ICpj dHgsIGludCBuYXJnYywgY2hhciAqY29uc3QgKm5hcmd2LCBjb25zdCBjaGFyICpvc3RyKQor eworCWN0eC0+bmFyZ2MgPSBuYXJnYzsKKwljdHgtPm5hcmd2ID0gbmFyZ3Y7CisJY3R4LT5v c3RyID0gb3N0cjsKKworCWN0eC0+b3B0aW5kID0gMTsKKwljdHgtPm9wdGFyZyA9IE5VTEw7 CisJY3R4LT5vcHRlcnIgPSAwOwkJCS8qIENhbGxlciBtYXkgc2V0IHRoaXMgYWZ0ZXIgdGhl IGNhbGwgKi8KKwljdHgtPm9wdG9wdCA9IDA7CisKKwljdHgtPnBsYWNlID0gRU1TRzsJCQkv KiBvcHRpb24gbGV0dGVyIHByb2Nlc3NpbmcgKi8KK30KKworLyoKKyAqIFBhcnNlIG5leHQg b3B0aW9uIGluIGFyZ2MvYXJndiBhcmd1bWVudCB2ZWN0b3IKKyAqLworaW50CitwZ19nZXRv cHRfbmV4dChwZ19nZXRvcHRfY3R4ICpjdHgpCit7CisJY2hhcgkgICAqb2xpOwkJCS8qIG9w dGlvbiBsZXR0ZXIgbGlzdCBpbmRleCAqLworCisJaWYgKCEqY3R4LT5wbGFjZSkKKwl7CQkJ CQkJCS8qIHVwZGF0ZSBzY2FubmluZyBwb2ludGVyICovCisJCWlmIChjdHgtPm9wdGluZCA+ PSBjdHgtPm5hcmdjIHx8ICooY3R4LT5wbGFjZSA9IGN0eC0+bmFyZ3ZbY3R4LT5vcHRpbmRd KSAhPSAnLScpCisJCXsKKwkJCWN0eC0+cGxhY2UgPSBFTVNHOworCQkJcmV0dXJuIC0xOwor CQl9CisJCWlmIChjdHgtPnBsYWNlWzFdICYmICorK2N0eC0+cGxhY2UgPT0gJy0nICYmIGN0 eC0+cGxhY2VbMV0gPT0gJ1wwJykKKwkJewkJCQkJCS8qIGZvdW5kICItLSIgKi8KKwkJCSsr Y3R4LT5vcHRpbmQ7CisJCQljdHgtPnBsYWNlID0gRU1TRzsKKwkJCXJldHVybiAtMTsKKwkJ fQorCX0JCQkJCQkJLyogb3B0aW9uIGxldHRlciBva2F5PyAqLworCWlmICgoY3R4LT5vcHRv cHQgPSAoaW50KSAqY3R4LT5wbGFjZSsrKSA9PSAoaW50KSAnOicgfHwKKwkJIShvbGkgPSBz dHJjaHIoY3R4LT5vc3RyLCBjdHgtPm9wdG9wdCkpKQorCXsKKwkJLyoKKwkJICogaWYgdGhl IHVzZXIgZGlkbid0IHNwZWNpZnkgJy0nIGFzIGFuIG9wdGlvbiwgYXNzdW1lIGl0IG1lYW5z IC0xLgorCQkgKi8KKwkJaWYgKGN0eC0+b3B0b3B0ID09IChpbnQpICctJykKKwkJeworCQkJ Y3R4LT5wbGFjZSA9IEVNU0c7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCEqY3R4LT5w bGFjZSkKKwkJCSsrY3R4LT5vcHRpbmQ7CisJCWlmIChjdHgtPm9wdGVyciAmJiAqY3R4LT5v c3RyICE9ICc6JykKKwkJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSAgICJpbGxl Z2FsIG9wdGlvbiAtLSAlY1xuIiwgY3R4LT5vcHRvcHQpOworCQlyZXR1cm4gQkFEQ0g7CisJ fQorCWlmICgqKytvbGkgIT0gJzonKQorCXsJCQkJCQkJLyogZG9uJ3QgbmVlZCBhcmd1bWVu dCAqLworCQljdHgtPm9wdGFyZyA9IE5VTEw7CisJCWlmICghKmN0eC0+cGxhY2UpCisJCQkr K2N0eC0+b3B0aW5kOworCX0KKwllbHNlCisJewkJCQkJCQkvKiBuZWVkIGFuIGFyZ3VtZW50 ICovCisJCWlmICgqY3R4LT5wbGFjZSkJCS8qIG5vIHdoaXRlIHNwYWNlICovCisJCQljdHgt Pm9wdGFyZyA9IGN0eC0+cGxhY2U7CisJCWVsc2UgaWYgKGN0eC0+bmFyZ2MgPD0gKytjdHgt Pm9wdGluZCkKKwkJewkJCQkJCS8qIG5vIGFyZyAqLworCQkJY3R4LT5wbGFjZSA9IEVNU0c7 CisJCQlpZiAoKmN0eC0+b3N0ciA9PSAnOicpCisJCQkJcmV0dXJuIEJBREFSRzsKKwkJCWlm IChjdHgtPm9wdGVycikKKwkJCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJCQkJICAg Im9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIiwKKwkJCQkJCQkgICBjdHgt Pm9wdG9wdCk7CisJCQlyZXR1cm4gQkFEQ0g7CisJCX0KKwkJZWxzZQorCQkJLyogd2hpdGUg c3BhY2UgKi8KKwkJCWN0eC0+b3B0YXJnID0gY3R4LT5uYXJndltjdHgtPm9wdGluZF07CisJ CWN0eC0+cGxhY2UgPSBFTVNHOworCQkrK2N0eC0+b3B0aW5kOworCX0KKwlyZXR1cm4gY3R4 LT5vcHRvcHQ7CQkJLyogZHVtcCBiYWNrIG9wdGlvbiBsZXR0ZXIgKi8KK30KZGlmZiAtLWdp dCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOWVhNTczZmFlMjEuLjQ5YWM5YTFlNDdjIDEwMDY0 NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzgzMCw2ICszODMwLDcgQEAgcGdfZW5j Mm5hbWUKIHBnX2VuY25hbWUKIHBnX2ZlX3Nhc2xfbWVjaAogcGdfZnVuY3B0cl90CitwZ19n ZXRvcHRfY3R4CiBwZ19nc3NpbmZvCiBwZ19obWFjX2N0eAogcGdfaG1hY19lcnJubwotLSAK Mi4zOS41Cgo= --------------UKeBz5P4n0QSQSe2NAsv4oe5 Content-Type: text/x-patch; charset=UTF-8; name="0003-Replace-getopt-with-our-re-entrant-variant-in-the-ba.patch" Content-Disposition: attachment; filename*0="0003-Replace-getopt-with-our-re-entrant-variant-in-the-ba.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2ZmE3YjE2NDE2ZTc0ZTg5NGJkNmRiMGVlZTM4ZTk0Y2JiNzdkN2VkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTkgTWF5IDIwMjUgMjI6NTM6NDUgKzAzMDAK U3ViamVjdDogW1BBVENIIDMvM10gUmVwbGFjZSBnZXRvcHQoKSB3aXRoIG91ciByZS1lbnRy YW50IHZhcmlhbnQgaW4gdGhlCiBiYWNrZW5kCgotLS0KIHNyYy9iYWNrZW5kL2Jvb3RzdHJh cC9ib290c3RyYXAuYyAgIHwgMjggKysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5jIHwgNjAgKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3JjL2JhY2tl bmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgfCA3NyArKysrKysrKysrKysrLS0tLS0tLS0t LS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wc19zdGF0dXMuYyAgfCAgMyArLQog NCBmaWxlcyBjaGFuZ2VkLCA3NyBpbnNlcnRpb25zKCspLCA5MSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMgYi9zcmMvYmFj a2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMKaW5kZXggNmRiODY0ODkyZDAuLmM5ZWY1ZTBm MTE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMKKysr IGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCkBAIC0zMCw3ICszMCw3IEBA CiAjaW5jbHVkZSAiY29tbW9uL2xpbmstY2FuYXJ5LmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCi0jaW5jbHVkZSAicGdfZ2V0b3B0 LmgiCisjaW5jbHVkZSAicG9ydC9wZ19nZXRvcHRfY3R4LmgiCiAjaW5jbHVkZSAicG9zdG1h c3Rlci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9pcGMuaCIKQEAgLTE5OSw2ICsxOTksNyBAQCBCb290c3RyYXBNb2Rl TWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBib29sIGNoZWNrX29ubHkpCiB7CiAJaW50 CQkJaTsKIAljaGFyCSAgICpwcm9nbmFtZSA9IGFyZ3ZbMF07CisJcGdfZ2V0b3B0X2N0eCBv cHRjdHg7CiAJaW50CQkJZmxhZzsKIAljaGFyCSAgICp1c2VyRG9wdGlvbiA9IE5VTEw7CiAJ dWludDMyCQlib290c3RyYXBfZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gMDsJLyogTm8gY2hl Y2tzdW0gKi8KQEAgLTIxOCwxMiArMjE5LDEzIEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBh cmdjLCBjaGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25seSkKIAlhcmd2Kys7CiAJYXJnYy0t OwogCi0Jd2hpbGUgKChmbGFnID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJCOmM6ZDpEOkZrcjpY Oi06IikpICE9IC0xKQorCXBnX2dldG9wdF9zdGFydCgmb3B0Y3R4LCBhcmdjLCBhcmd2LCAi QjpjOmQ6RDpGa3I6WDotOiIpOworCXdoaWxlICgoZmxhZyA9IHBnX2dldG9wdF9uZXh0KCZv cHRjdHgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoZmxhZykKIAkJewogCQkJY2FzZSAnQic6 Ci0JCQkJU2V0Q29uZmlnT3B0aW9uKCJzaGFyZWRfYnVmZmVycyIsIG9wdGFyZywgUEdDX1BP U1RNQVNURVIsIFBHQ19TX0FSR1YpOworCQkJCVNldENvbmZpZ09wdGlvbigic2hhcmVkX2J1 ZmZlcnMiLCBvcHRjdHgub3B0YXJnLCBQR0NfUE9TVE1BU1RFUiwgUEdDX1NfQVJHVik7CiAJ CQkJYnJlYWs7CiAJCQljYXNlICctJzoKIApAQCAtMjMzLDEwICsyMzUsMTAgQEAgQm9vdHN0 cmFwTW9kZU1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgYm9vbCBjaGVja19vbmx5KQog CQkJCSAqIHJldHVybnMgRElTUEFUQ0hfUE9TVE1BU1RFUiBpZiBpdCBkb2Vzbid0IGZpbmQg YSBtYXRjaCwgc28KIAkJCQkgKiBlcnJvciBmb3IgYW55dGhpbmcgZWxzZS4KIAkJCQkgKi8K LQkJCQlpZiAocGFyc2VfZGlzcGF0Y2hfb3B0aW9uKG9wdGFyZykgIT0gRElTUEFUQ0hfUE9T VE1BU1RFUikKKwkJCQlpZiAocGFyc2VfZGlzcGF0Y2hfb3B0aW9uKG9wdGN0eC5vcHRhcmcp ICE9IERJU1BBVENIX1BPU1RNQVNURVIpCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCQkJCSBlcnJtc2coIi0tJXMg bXVzdCBiZSBmaXJzdCBhcmd1bWVudCIsIG9wdGFyZykpKTsKKwkJCQkJCQkgZXJybXNnKCIt LSVzIG11c3QgYmUgZmlyc3QgYXJndW1lbnQiLCBvcHRjdHgub3B0YXJnKSkpOwogCiAJCQkJ LyogRkFMTFRIUk9VR0ggKi8KIAkJCWNhc2UgJ2MnOgpAQCAtMjQ0LDE5ICsyNDYsMTkgQEAg Qm9vdHN0cmFwTW9kZU1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgYm9vbCBjaGVja19v bmx5KQogCQkJCQljaGFyCSAgICpuYW1lLAogCQkJCQkJCSAgICp2YWx1ZTsKIAotCQkJCQlQ YXJzZUxvbmdPcHRpb24ob3B0YXJnLCAmbmFtZSwgJnZhbHVlKTsKKwkJCQkJUGFyc2VMb25n T3B0aW9uKG9wdGN0eC5vcHRhcmcsICZuYW1lLCAmdmFsdWUpOwogCQkJCQlpZiAoIXZhbHVl KQogCQkJCQl7CiAJCQkJCQlpZiAoZmxhZyA9PSAnLScpCiAJCQkJCQkJZXJlcG9ydChFUlJP UiwKIAkJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkJCQkJ CSBlcnJtc2coIi0tJXMgcmVxdWlyZXMgYSB2YWx1ZSIsCi0JCQkJCQkJCQkJCW9wdGFyZykp KTsKKwkJCQkJCQkJCQkJb3B0Y3R4Lm9wdGFyZykpKTsKIAkJCQkJCWVsc2UKIAkJCQkJCQll cmVwb3J0KEVSUk9SLAogCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1Ip LAogCQkJCQkJCQkJIGVycm1zZygiLWMgJXMgcmVxdWlyZXMgYSB2YWx1ZSIsCi0JCQkJCQkJ CQkJCW9wdGFyZykpKTsKKwkJCQkJCQkJCQkJb3B0Y3R4Lm9wdGFyZykpKTsKIAkJCQkJfQog CiAJCQkJCVNldENvbmZpZ09wdGlvbihuYW1lLCB2YWx1ZSwgUEdDX1BPU1RNQVNURVIsIFBH Q19TX0FSR1YpOwpAQCAtMjY1LDE0ICsyNjcsMTQgQEAgQm9vdHN0cmFwTW9kZU1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgYm9vbCBjaGVja19vbmx5KQogCQkJCQlicmVhazsKIAkJ CQl9CiAJCQljYXNlICdEJzoKLQkJCQl1c2VyRG9wdGlvbiA9IHBzdHJkdXAob3B0YXJnKTsK KwkJCQl1c2VyRG9wdGlvbiA9IHBzdHJkdXAob3B0Y3R4Lm9wdGFyZyk7CiAJCQkJYnJlYWs7 CiAJCQljYXNlICdkJzoKIAkJCQl7CiAJCQkJCS8qIFR1cm4gb24gZGVidWdnaW5nIGZvciB0 aGUgYm9vdHN0cmFwIHByb2Nlc3MuICovCiAJCQkJCWNoYXIJICAgKmRlYnVnc3RyOwogCi0J CQkJCWRlYnVnc3RyID0gcHNwcmludGYoImRlYnVnJXMiLCBvcHRhcmcpOworCQkJCQlkZWJ1 Z3N0ciA9IHBzcHJpbnRmKCJkZWJ1ZyVzIiwgb3B0Y3R4Lm9wdGFyZyk7CiAJCQkJCVNldENv bmZpZ09wdGlvbigibG9nX21pbl9tZXNzYWdlcyIsIGRlYnVnc3RyLAogCQkJCQkJCQkJUEdD X1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOwogCQkJCQlTZXRDb25maWdPcHRpb24oImNsaWVu dF9taW5fbWVzc2FnZXMiLCBkZWJ1Z3N0ciwKQEAgLTI4NywxMCArMjg5LDEwIEBAIEJvb3Rz dHJhcE1vZGVNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25seSkK IAkJCQlib290c3RyYXBfZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gUEdfREFUQV9DSEVDS1NV TV9WRVJTSU9OOwogCQkJCWJyZWFrOwogCQkJY2FzZSAncic6Ci0JCQkJc3RybGNweShPdXRw dXRGaWxlTmFtZSwgb3B0YXJnLCBNQVhQR1BBVEgpOworCQkJCXN0cmxjcHkoT3V0cHV0Rmls ZU5hbWUsIG9wdGN0eC5vcHRhcmcsIE1BWFBHUEFUSCk7CiAJCQkJYnJlYWs7CiAJCQljYXNl ICdYJzoKLQkJCQlTZXRDb25maWdPcHRpb24oIndhbF9zZWdtZW50X3NpemUiLCBvcHRhcmcs IFBHQ19JTlRFUk5BTCwgUEdDX1NfRFlOQU1JQ19ERUZBVUxUKTsKKwkJCQlTZXRDb25maWdP cHRpb24oIndhbF9zZWdtZW50X3NpemUiLCBvcHRjdHgub3B0YXJnLCBQR0NfSU5URVJOQUws IFBHQ19TX0RZTkFNSUNfREVGQVVMVCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJ CXdyaXRlX3N0ZGVycigiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24u XG4iLApAQCAtMzAwLDcgKzMwMiw3IEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25seSkKIAkJfQogCX0KIAotCWlmIChhcmdjICE9 IG9wdGluZCkKKwlpZiAoYXJnYyAhPSBvcHRjdHgub3B0aW5kKQogCXsKIAkJd3JpdGVfc3Rk ZXJyKCIlczogaW52YWxpZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzXG4iLCBwcm9nbmFtZSk7 CiAJCXByb2NfZXhpdCgxKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5k ZXggNDkwZjdjZTM2NjQuLjZlYzVhN2NlYmFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYwpAQCAtOTcsOCArOTcsOCBAQAogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgog I2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIK LSNpbmNsdWRlICJwZ19nZXRvcHQuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRl ICJwb3J0L3BnX2dldG9wdF9jdHguaCIKICNpbmNsdWRlICJwb3J0L3BnX2Jzd2FwLmgiCiAj aW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rl ci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKQEAgLTQ5Miw2ICs0OTIsNyBAQCBIQU5ETEUJCVBv c3RtYXN0ZXJIYW5kbGU7CiB2b2lkCiBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogeworCXBnX2dldG9wdF9jdHggb3B0Y3R4OwogCWludAkJCW9wdDsKIAlpbnQJ CQlzdGF0dXM7CiAJY2hhcgkgICAqdXNlckRvcHRpb24gPSBOVUxMOwpAQCAtNTg4LDE5ICs1 ODksMTkgQEAgUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkgKi8K IAlJbml0aWFsaXplR1VDT3B0aW9ucygpOwogCi0Jb3B0ZXJyID0gMTsKLQogCS8qCiAJICog UGFyc2UgY29tbWFuZC1saW5lIG9wdGlvbnMuICBDQVVUSU9OOiBrZWVwIHRoaXMgaW4gc3lu YyB3aXRoCiAJICogdGNvcC9wb3N0Z3Jlcy5jICh0aGUgb3B0aW9uIHNldHMgc2hvdWxkIG5v dCBjb25mbGljdCkgYW5kIHdpdGggdGhlCiAJICogY29tbW9uIGhlbHAoKSBmdW5jdGlvbiBp biBtYWluL21haW4uYy4KIAkgKi8KLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2 LCAiQjpiQzpjOkQ6ZDpFZUZmOmg6aWprOmxOOk9QcDpyOlM6c1R0Olc6LToiKSkgIT0gLTEp CisJcGdfZ2V0b3B0X3N0YXJ0KCZvcHRjdHgsIGFyZ2MsIGFyZ3YsICJCOmJDOmM6RDpkOkVl RmY6aDppams6bE46T1BwOnI6UzpzVHQ6VzotOiIpOworCW9wdGN0eC5vcHRlcnIgPSAxOwor CXdoaWxlICgob3B0ID0gcGdfZ2V0b3B0X25leHQoJm9wdGN0eCkpICE9IC0xKQogCXsKIAkJ c3dpdGNoIChvcHQpCiAJCXsKIAkJCWNhc2UgJ0InOgotCQkJCVNldENvbmZpZ09wdGlvbigi c2hhcmVkX2J1ZmZlcnMiLCBvcHRhcmcsIFBHQ19QT1NUTUFTVEVSLCBQR0NfU19BUkdWKTsK KwkJCQlTZXRDb25maWdPcHRpb24oInNoYXJlZF9idWZmZXJzIiwgb3B0Y3R4Lm9wdGFyZywg UEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdi JzoKQEAgLTYwOSw3ICs2MTAsNyBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCQkJCWJyZWFrOwogCiAJCQljYXNlICdDJzoKLQkJCQlvdXRwdXRfY29uZmln X3ZhcmlhYmxlID0gc3RyZHVwKG9wdGFyZyk7CisJCQkJb3V0cHV0X2NvbmZpZ192YXJpYWJs ZSA9IHN0cmR1cChvcHRjdHgub3B0YXJnKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnLSc6 CkBAIC02MjAsMTAgKzYyMSwxMCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCQkJCSAqIHJldHVybnMgRElTUEFUQ0hfUE9TVE1BU1RFUiBpZiBpdCBkb2Vz bid0IGZpbmQgYSBtYXRjaCwgc28KIAkJCQkgKiBlcnJvciBmb3IgYW55dGhpbmcgZWxzZS4K IAkJCQkgKi8KLQkJCQlpZiAocGFyc2VfZGlzcGF0Y2hfb3B0aW9uKG9wdGFyZykgIT0gRElT UEFUQ0hfUE9TVE1BU1RFUikKKwkJCQlpZiAocGFyc2VfZGlzcGF0Y2hfb3B0aW9uKG9wdGN0 eC5vcHRhcmcpICE9IERJU1BBVENIX1BPU1RNQVNURVIpCiAJCQkJCWVyZXBvcnQoRVJST1Is CiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCQkJCSBlcnJt c2coIi0tJXMgbXVzdCBiZSBmaXJzdCBhcmd1bWVudCIsIG9wdGFyZykpKTsKKwkJCQkJCQkg ZXJybXNnKCItLSVzIG11c3QgYmUgZmlyc3QgYXJndW1lbnQiLCBvcHRjdHgub3B0YXJnKSkp OwogCiAJCQkJLyogRkFMTFRIUk9VR0ggKi8KIAkJCWNhc2UgJ2MnOgpAQCAtNjMxLDE5ICs2 MzIsMTkgQEAgUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQkJ Y2hhcgkgICAqbmFtZSwKIAkJCQkJCQkgICAqdmFsdWU7CiAKLQkJCQkJUGFyc2VMb25nT3B0 aW9uKG9wdGFyZywgJm5hbWUsICZ2YWx1ZSk7CisJCQkJCVBhcnNlTG9uZ09wdGlvbihvcHRj dHgub3B0YXJnLCAmbmFtZSwgJnZhbHVlKTsKIAkJCQkJaWYgKCF2YWx1ZSkKIAkJCQkJewog CQkJCQkJaWYgKG9wdCA9PSAnLScpCiAJCQkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkJCQkJCSBlcnJtc2coIi0t JXMgcmVxdWlyZXMgYSB2YWx1ZSIsCi0JCQkJCQkJCQkJCW9wdGFyZykpKTsKKwkJCQkJCQkJ CQkJb3B0Y3R4Lm9wdGFyZykpKTsKIAkJCQkJCWVsc2UKIAkJCQkJCQllcmVwb3J0KEVSUk9S LAogCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCQkJCQkJ IGVycm1zZygiLWMgJXMgcmVxdWlyZXMgYSB2YWx1ZSIsCi0JCQkJCQkJCQkJCW9wdGFyZykp KTsKKwkJCQkJCQkJCQkJb3B0Y3R4Lm9wdGFyZykpKTsKIAkJCQkJfQogCiAJCQkJCVNldENv bmZpZ09wdGlvbihuYW1lLCB2YWx1ZSwgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOwpA QCAtNjUzLDExICs2NTQsMTEgQEAgUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAkJCQl9CiAKIAkJCWNhc2UgJ0QnOgotCQkJCXVzZXJEb3B0aW9uID0gc3RyZHVw KG9wdGFyZyk7CisJCQkJdXNlckRvcHRpb24gPSBzdHJkdXAob3B0Y3R4Lm9wdGFyZyk7CiAJ CQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2QnOgotCQkJCXNldF9kZWJ1Z19vcHRpb25zKGF0b2ko b3B0YXJnKSwgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOworCQkJCXNldF9kZWJ1Z19v cHRpb25zKGF0b2kob3B0Y3R4Lm9wdGFyZyksIFBHQ19QT1NUTUFTVEVSLCBQR0NfU19BUkdW KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnRSc6CkBAIC02NzMsMTYgKzY3NCwxNiBAQCBQ b3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWJyZWFrOwogCiAJ CQljYXNlICdmJzoKLQkJCQlpZiAoIXNldF9wbGFuX2Rpc2FibGluZ19vcHRpb25zKG9wdGFy ZywgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpKQorCQkJCWlmICghc2V0X3BsYW5fZGlz YWJsaW5nX29wdGlvbnMob3B0Y3R4Lm9wdGFyZywgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FS R1YpKQogCQkJCXsKIAkJCQkJd3JpdGVfc3RkZXJyKCIlczogaW52YWxpZCBhcmd1bWVudCBm b3Igb3B0aW9uIC1mOiBcIiVzXCJcbiIsCi0JCQkJCQkJCSBwcm9nbmFtZSwgb3B0YXJnKTsK KwkJCQkJCQkJIHByb2duYW1lLCBvcHRjdHgub3B0YXJnKTsKIAkJCQkJRXhpdFBvc3RtYXN0 ZXIoMSk7CiAJCQkJfQogCQkJCWJyZWFrOwogCiAJCQljYXNlICdoJzoKLQkJCQlTZXRDb25m aWdPcHRpb24oImxpc3Rlbl9hZGRyZXNzZXMiLCBvcHRhcmcsIFBHQ19QT1NUTUFTVEVSLCBQ R0NfU19BUkdWKTsKKwkJCQlTZXRDb25maWdPcHRpb24oImxpc3Rlbl9hZGRyZXNzZXMiLCBv cHRjdHgub3B0YXJnLCBQR0NfUE9TVE1BU1RFUiwgUEdDX1NfQVJHVik7CiAJCQkJYnJlYWs7 CiAKIAkJCWNhc2UgJ2knOgpAQCAtNjk0LDcgKzY5NSw3IEBAIFBvc3RtYXN0ZXJNYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2snOgotCQkJ CVNldENvbmZpZ09wdGlvbigidW5peF9zb2NrZXRfZGlyZWN0b3JpZXMiLCBvcHRhcmcsIFBH Q19QT1NUTUFTVEVSLCBQR0NfU19BUkdWKTsKKwkJCQlTZXRDb25maWdPcHRpb24oInVuaXhf c29ja2V0X2RpcmVjdG9yaWVzIiwgb3B0Y3R4Lm9wdGFyZywgUEdDX1BPU1RNQVNURVIsIFBH Q19TX0FSR1YpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdsJzoKQEAgLTcwMiw3ICs3MDMs NyBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWJyZWFr OwogCiAJCQljYXNlICdOJzoKLQkJCQlTZXRDb25maWdPcHRpb24oIm1heF9jb25uZWN0aW9u cyIsIG9wdGFyZywgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOworCQkJCVNldENvbmZp Z09wdGlvbigibWF4X2Nvbm5lY3Rpb25zIiwgb3B0Y3R4Lm9wdGFyZywgUEdDX1BPU1RNQVNU RVIsIFBHQ19TX0FSR1YpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdPJzoKQEAgLTcxNCw3 ICs3MTUsNyBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJ CWJyZWFrOwogCiAJCQljYXNlICdwJzoKLQkJCQlTZXRDb25maWdPcHRpb24oInBvcnQiLCBv cHRhcmcsIFBHQ19QT1NUTUFTVEVSLCBQR0NfU19BUkdWKTsKKwkJCQlTZXRDb25maWdPcHRp b24oInBvcnQiLCBvcHRjdHgub3B0YXJnLCBQR0NfUE9TVE1BU1RFUiwgUEdDX1NfQVJHVik7 CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3InOgpAQCAtNzIyLDcgKzcyMyw3IEBAIFBvc3Rt YXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYnJlYWs7CiAKIAkJCWNh c2UgJ1MnOgotCQkJCVNldENvbmZpZ09wdGlvbigid29ya19tZW0iLCBvcHRhcmcsIFBHQ19Q T1NUTUFTVEVSLCBQR0NfU19BUkdWKTsKKwkJCQlTZXRDb25maWdPcHRpb24oIndvcmtfbWVt Iiwgb3B0Y3R4Lm9wdGFyZywgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOwogCQkJCWJy ZWFrOwogCiAJCQljYXNlICdzJzoKQEAgLTc0MCw3ICs3NDEsNyBAQCBQb3N0bWFzdGVyTWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICd0JzoKIAkJCQl7Ci0JCQkJ CWNvbnN0IGNoYXIgKnRtcCA9IGdldF9zdGF0c19vcHRpb25fbmFtZShvcHRhcmcpOworCQkJ CQljb25zdCBjaGFyICp0bXAgPSBnZXRfc3RhdHNfb3B0aW9uX25hbWUob3B0Y3R4Lm9wdGFy Zyk7CiAKIAkJCQkJaWYgKHRtcCkKIAkJCQkJewpAQCAtNzQ5LDE0ICs3NTAsMTQgQEAgUG9z dG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQkJZWxzZQogCQkJCQl7 CiAJCQkJCQl3cml0ZV9zdGRlcnIoIiVzOiBpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24g LXQ6IFwiJXNcIlxuIiwKLQkJCQkJCQkJCSBwcm9nbmFtZSwgb3B0YXJnKTsKKwkJCQkJCQkJ CSBwcm9nbmFtZSwgb3B0Y3R4Lm9wdGFyZyk7CiAJCQkJCQlFeGl0UG9zdG1hc3RlcigxKTsK IAkJCQkJfQogCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCWNhc2UgJ1cnOgotCQkJCVNldENv bmZpZ09wdGlvbigicG9zdF9hdXRoX2RlbGF5Iiwgb3B0YXJnLCBQR0NfUE9TVE1BU1RFUiwg UEdDX1NfQVJHVik7CisJCQkJU2V0Q29uZmlnT3B0aW9uKCJwb3N0X2F1dGhfZGVsYXkiLCBv cHRjdHgub3B0YXJnLCBQR0NfUE9TVE1BU1RFUiwgUEdDX1NfQVJHVik7CiAJCQkJYnJlYWs7 CiAKIAkJCWRlZmF1bHQ6CkBAIC03NjksMTAgKzc3MCwxMCBAQCBQb3N0bWFzdGVyTWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCS8qCiAJICogUG9zdG1hc3RlciBhY2NlcHRzIG5v IG5vbi1vcHRpb24gc3dpdGNoIGFyZ3VtZW50cy4KIAkgKi8KLQlpZiAob3B0aW5kIDwgYXJn YykKKwlpZiAob3B0Y3R4Lm9wdGluZCA8IGFyZ2MpCiAJewogCQl3cml0ZV9zdGRlcnIoIiVz OiBpbnZhbGlkIGFyZ3VtZW50OiBcIiVzXCJcbiIsCi0JCQkJCSBwcm9nbmFtZSwgYXJndltv cHRpbmRdKTsKKwkJCQkJIHByb2duYW1lLCBhcmd2W29wdGN0eC5vcHRpbmRdKTsKIAkJd3Jp dGVfc3RkZXJyKCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIs CiAJCQkJCSBwcm9nbmFtZSk7CiAJCUV4aXRQb3N0bWFzdGVyKDEpOwpAQCAtODY1LDE1ICs4 NjYsNiBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlFeGl0 UG9zdG1hc3RlcigxKTsKIAl9CiAKLQkvKgotCSAqIE5vdyB0aGF0IHdlIGFyZSBkb25lIHBy b2Nlc3NpbmcgdGhlIHBvc3RtYXN0ZXIgYXJndW1lbnRzLCByZXNldAotCSAqIGdldG9wdCgz KSBsaWJyYXJ5IHNvIHRoYXQgaXQgd2lsbCB3b3JrIGNvcnJlY3RseSBpbiBzdWJwcm9jZXNz ZXMuCi0JICovCi0Jb3B0aW5kID0gMTsKLSNpZmRlZiBIQVZFX0lOVF9PUFRSRVNFVAotCW9w dHJlc2V0ID0gMTsJCQkJLyogc29tZSBzeXN0ZW1zIG5lZWQgdGhpcyB0b28gKi8KLSNlbmRp ZgotCiAJLyogRm9yIGRlYnVnZ2luZzogZGlzcGxheSBwb3N0bWFzdGVyIGVudmlyb25tZW50 ICovCiAJaWYgKG1lc3NhZ2VfbGV2ZWxfaXNfaW50ZXJlc3RpbmcoREVCVUczKSkKIAl7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMKaW5kZXggZjA2OWFjYjllZTIuLjVhMjMyMmYzM2U4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jCkBAIC01MCw5ICs1MCw5IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL29w dGltaXplci5oIgogI2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGFy c2VyL3BhcnNlci5oIgotI2luY2x1ZGUgInBnX2dldG9wdC5oIgogI2luY2x1ZGUgInBnX3Ry YWNlLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9ydC9wZ19nZXRvcHRf Y3R4LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJw b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fs bGF1bmNoZXIuaCIKQEAgLTM3OTksNiArMzc5OSw3IEBAIHByb2Nlc3NfcG9zdGdyZXNfc3dp dGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgR3VjQ29udGV4dCBjdHgsCiAJaW50CQkJ ZXJycyA9IDA7CiAJR3VjU291cmNlCWd1Y3NvdXJjZTsKIAlpbnQJCQlmbGFnOworCXBnX2dl dG9wdF9jdHggb3B0Y3R4OwogCiAJaWYgKHNlY3VyZSkKIAl7CkBAIC0zODE2LDI3ICszODE3 LDI2IEBAIHByb2Nlc3NfcG9zdGdyZXNfc3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSwgR3VjQ29udGV4dCBjdHgsCiAJCWd1Y3NvdXJjZSA9IFBHQ19TX0NMSUVOVDsJLyogc3dp dGNoZXMgY2FtZSBmcm9tIGNsaWVudCAqLwogCX0KIAotI2lmZGVmIEhBVkVfSU5UX09QVEVS UgorCS8qCisJICogUGFyc2UgY29tbWFuZC1saW5lIG9wdGlvbnMuICBDQVVUSU9OOiBrZWVw IHRoaXMgaW4gc3luYyB3aXRoCisJICogcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgKHRoZSBv cHRpb24gc2V0cyBzaG91bGQgbm90IGNvbmZsaWN0KSBhbmQgd2l0aAorCSAqIHRoZSBjb21t b24gaGVscCgpIGZ1bmN0aW9uIGluIG1haW4vbWFpbi5jLgorCSAqLworCXBnX2dldG9wdF9z dGFydCgmb3B0Y3R4LCBhcmdjLCBhcmd2LCAiQjpiQzpjOkQ6ZDpFZUZmOmg6aWprOmxOOm5P UHA6cjpTOnNUdDp2Olc6LToiKTsKIAogCS8qCiAJICogVHVybiB0aGlzIG9mZiBiZWNhdXNl IGl0J3MgZWl0aGVyIHByaW50ZWQgdG8gc3RkZXJyIGFuZCBub3QgdGhlIGxvZwogCSAqIHdo ZXJlIHdlJ2Qgd2FudCBpdCwgb3IgYXJndlswXSBpcyBub3cgIi0tc2luZ2xlIiwgd2hpY2gg d291bGQgbWFrZSBmb3IKIAkgKiBhIHdlaXJkIGVycm9yIG1lc3NhZ2UuICBXZSBwcmludCBv dXIgb3duIGVycm9yIG1lc3NhZ2UgYmVsb3cuCiAJICovCi0Jb3B0ZXJyID0gMDsKLSNlbmRp ZgorCW9wdGN0eC5vcHRlcnIgPSAwOwogCi0JLyoKLQkgKiBQYXJzZSBjb21tYW5kLWxpbmUg b3B0aW9ucy4gIENBVVRJT046IGtlZXAgdGhpcyBpbiBzeW5jIHdpdGgKLQkgKiBwb3N0bWFz dGVyL3Bvc3RtYXN0ZXIuYyAodGhlIG9wdGlvbiBzZXRzIHNob3VsZCBub3QgY29uZmxpY3Qp IGFuZCB3aXRoCi0JICogdGhlIGNvbW1vbiBoZWxwKCkgZnVuY3Rpb24gaW4gbWFpbi9tYWlu LmMuCi0JICovCi0Jd2hpbGUgKChmbGFnID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJCOmJDOmM6 RDpkOkVlRmY6aDppams6bE46bk9QcDpyOlM6c1R0OnY6VzotOiIpKSAhPSAtMSkKKwl3aGls ZSAoKGZsYWcgPSBwZ19nZXRvcHRfbmV4dCgmb3B0Y3R4KSkgIT0gLTEpCiAJewogCQlzd2l0 Y2ggKGZsYWcpCiAJCXsKIAkJCWNhc2UgJ0InOgotCQkJCVNldENvbmZpZ09wdGlvbigic2hh cmVkX2J1ZmZlcnMiLCBvcHRhcmcsIGN0eCwgZ3Vjc291cmNlKTsKKwkJCQlTZXRDb25maWdP cHRpb24oInNoYXJlZF9idWZmZXJzIiwgb3B0Y3R4Lm9wdGFyZywgY3R4LCBndWNzb3VyY2Up OwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdiJzoKQEAgLTM4NTcsMTAgKzM4NTcsMTAgQEAg cHJvY2Vzc19wb3N0Z3Jlc19zd2l0Y2hlcyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBHdWND b250ZXh0IGN0eCwKIAkJCQkgKiByZXR1cm5zIERJU1BBVENIX1BPU1RNQVNURVIgaWYgaXQg ZG9lc24ndCBmaW5kIGEgbWF0Y2gsIHNvCiAJCQkJICogZXJyb3IgZm9yIGFueXRoaW5nIGVs c2UuCiAJCQkJICovCi0JCQkJaWYgKHBhcnNlX2Rpc3BhdGNoX29wdGlvbihvcHRhcmcpICE9 IERJU1BBVENIX1BPU1RNQVNURVIpCisJCQkJaWYgKHBhcnNlX2Rpc3BhdGNoX29wdGlvbihv cHRjdHgub3B0YXJnKSAhPSBESVNQQVRDSF9QT1NUTUFTVEVSKQogCQkJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKLQkJCQkJCQkg ZXJybXNnKCItLSVzIG11c3QgYmUgZmlyc3QgYXJndW1lbnQiLCBvcHRhcmcpKSk7CisJCQkJ CQkJIGVycm1zZygiLS0lcyBtdXN0IGJlIGZpcnN0IGFyZ3VtZW50Iiwgb3B0Y3R4Lm9wdGFy ZykpKTsKIAogCQkJCS8qIEZBTExUSFJPVUdIICovCiAJCQljYXNlICdjJzoKQEAgLTM4Njgs MTkgKzM4NjgsMTkgQEAgcHJvY2Vzc19wb3N0Z3Jlc19zd2l0Y2hlcyhpbnQgYXJnYywgY2hh ciAqYXJndltdLCBHdWNDb250ZXh0IGN0eCwKIAkJCQkJY2hhcgkgICAqbmFtZSwKIAkJCQkJ CQkgICAqdmFsdWU7CiAKLQkJCQkJUGFyc2VMb25nT3B0aW9uKG9wdGFyZywgJm5hbWUsICZ2 YWx1ZSk7CisJCQkJCVBhcnNlTG9uZ09wdGlvbihvcHRjdHgub3B0YXJnLCAmbmFtZSwgJnZh bHVlKTsKIAkJCQkJaWYgKCF2YWx1ZSkKIAkJCQkJewogCQkJCQkJaWYgKGZsYWcgPT0gJy0n KQogCQkJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZ TlRBWF9FUlJPUiksCiAJCQkJCQkJCQkgZXJybXNnKCItLSVzIHJlcXVpcmVzIGEgdmFsdWUi LAotCQkJCQkJCQkJCQlvcHRhcmcpKSk7CisJCQkJCQkJCQkJCW9wdGN0eC5vcHRhcmcpKSk7 CiAJCQkJCQllbHNlCiAJCQkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkJCShlcnJjb2Rl KEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkJCQkJCSBlcnJtc2coIi1jICVzIHJlcXVp cmVzIGEgdmFsdWUiLAotCQkJCQkJCQkJCQlvcHRhcmcpKSk7CisJCQkJCQkJCQkJCW9wdGN0 eC5vcHRhcmcpKSk7CiAJCQkJCX0KIAkJCQkJU2V0Q29uZmlnT3B0aW9uKG5hbWUsIHZhbHVl LCBjdHgsIGd1Y3NvdXJjZSk7CiAJCQkJCXBmcmVlKG5hbWUpOwpAQCAtMzg5MCwxMSArMzg5 MCwxMSBAQCBwcm9jZXNzX3Bvc3RncmVzX3N3aXRjaGVzKGludCBhcmdjLCBjaGFyICphcmd2 W10sIEd1Y0NvbnRleHQgY3R4LAogCiAJCQljYXNlICdEJzoKIAkJCQlpZiAoc2VjdXJlKQot CQkJCQl1c2VyRG9wdGlvbiA9IHN0cmR1cChvcHRhcmcpOworCQkJCQl1c2VyRG9wdGlvbiA9 IHN0cmR1cChvcHRjdHgub3B0YXJnKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnZCc6Ci0J CQkJc2V0X2RlYnVnX29wdGlvbnMoYXRvaShvcHRhcmcpLCBjdHgsIGd1Y3NvdXJjZSk7CisJ CQkJc2V0X2RlYnVnX29wdGlvbnMoYXRvaShvcHRjdHgub3B0YXJnKSwgY3R4LCBndWNzb3Vy Y2UpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdFJzoKQEAgLTM5MTEsMTIgKzM5MTEsMTIg QEAgcHJvY2Vzc19wb3N0Z3Jlc19zd2l0Y2hlcyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBH dWNDb250ZXh0IGN0eCwKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnZic6Ci0JCQkJaWYgKCFz ZXRfcGxhbl9kaXNhYmxpbmdfb3B0aW9ucyhvcHRhcmcsIGN0eCwgZ3Vjc291cmNlKSkKKwkJ CQlpZiAoIXNldF9wbGFuX2Rpc2FibGluZ19vcHRpb25zKG9wdGN0eC5vcHRhcmcsIGN0eCwg Z3Vjc291cmNlKSkKIAkJCQkJZXJycysrOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdoJzoK LQkJCQlTZXRDb25maWdPcHRpb24oImxpc3Rlbl9hZGRyZXNzZXMiLCBvcHRhcmcsIGN0eCwg Z3Vjc291cmNlKTsKKwkJCQlTZXRDb25maWdPcHRpb24oImxpc3Rlbl9hZGRyZXNzZXMiLCBv cHRjdHgub3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2Ug J2knOgpAQCAtMzkyOSw3ICszOTI5LDcgQEAgcHJvY2Vzc19wb3N0Z3Jlc19zd2l0Y2hlcyhp bnQgYXJnYywgY2hhciAqYXJndltdLCBHdWNDb250ZXh0IGN0eCwKIAkJCQlicmVhazsKIAog CQkJY2FzZSAnayc6Ci0JCQkJU2V0Q29uZmlnT3B0aW9uKCJ1bml4X3NvY2tldF9kaXJlY3Rv cmllcyIsIG9wdGFyZywgY3R4LCBndWNzb3VyY2UpOworCQkJCVNldENvbmZpZ09wdGlvbigi dW5peF9zb2NrZXRfZGlyZWN0b3JpZXMiLCBvcHRjdHgub3B0YXJnLCBjdHgsIGd1Y3NvdXJj ZSk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2wnOgpAQCAtMzkzNyw3ICszOTM3LDcgQEAg cHJvY2Vzc19wb3N0Z3Jlc19zd2l0Y2hlcyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBHdWND b250ZXh0IGN0eCwKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnTic6Ci0JCQkJU2V0Q29uZmln T3B0aW9uKCJtYXhfY29ubmVjdGlvbnMiLCBvcHRhcmcsIGN0eCwgZ3Vjc291cmNlKTsKKwkJ CQlTZXRDb25maWdPcHRpb24oIm1heF9jb25uZWN0aW9ucyIsIG9wdGN0eC5vcHRhcmcsIGN0 eCwgZ3Vjc291cmNlKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnbic6CkBAIC0zOTUzLDE3 ICszOTUzLDE3IEBAIHByb2Nlc3NfcG9zdGdyZXNfc3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSwgR3VjQ29udGV4dCBjdHgsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3AnOgot CQkJCVNldENvbmZpZ09wdGlvbigicG9ydCIsIG9wdGFyZywgY3R4LCBndWNzb3VyY2UpOwor CQkJCVNldENvbmZpZ09wdGlvbigicG9ydCIsIG9wdGN0eC5vcHRhcmcsIGN0eCwgZ3Vjc291 cmNlKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAncic6CiAJCQkJLyogc2VuZCBvdXRwdXQg KHN0ZG91dCBhbmQgc3RkZXJyKSB0byB0aGUgZ2l2ZW4gZmlsZSAqLwogCQkJCWlmIChzZWN1 cmUpCi0JCQkJCXN0cmxjcHkoT3V0cHV0RmlsZU5hbWUsIG9wdGFyZywgTUFYUEdQQVRIKTsK KwkJCQkJc3RybGNweShPdXRwdXRGaWxlTmFtZSwgb3B0Y3R4Lm9wdGFyZywgTUFYUEdQQVRI KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnUyc6Ci0JCQkJU2V0Q29uZmlnT3B0aW9uKCJ3 b3JrX21lbSIsIG9wdGFyZywgY3R4LCBndWNzb3VyY2UpOworCQkJCVNldENvbmZpZ09wdGlv bigid29ya19tZW0iLCBvcHRjdHgub3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSk7CiAJCQkJYnJl YWs7CiAKIAkJCWNhc2UgJ3MnOgpAQCAtMzk3Niw3ICszOTc2LDcgQEAgcHJvY2Vzc19wb3N0 Z3Jlc19zd2l0Y2hlcyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBHdWNDb250ZXh0IGN0eCwK IAogCQkJY2FzZSAndCc6CiAJCQkJewotCQkJCQljb25zdCBjaGFyICp0bXAgPSBnZXRfc3Rh dHNfb3B0aW9uX25hbWUob3B0YXJnKTsKKwkJCQkJY29uc3QgY2hhciAqdG1wID0gZ2V0X3N0 YXRzX29wdGlvbl9uYW1lKG9wdGN0eC5vcHRhcmcpOwogCiAJCQkJCWlmICh0bXApCiAJCQkJ CQlTZXRDb25maWdPcHRpb24odG1wLCAidHJ1ZSIsIGN0eCwgZ3Vjc291cmNlKTsKQEAgLTM5 OTUsMTEgKzM5OTUsMTEgQEAgcHJvY2Vzc19wb3N0Z3Jlc19zd2l0Y2hlcyhpbnQgYXJnYywg Y2hhciAqYXJndltdLCBHdWNDb250ZXh0IGN0eCwKIAkJCQkgKiBzdGFuZGFsb25lIGJhY2tl bmQuCiAJCQkJICovCiAJCQkJaWYgKHNlY3VyZSkKLQkJCQkJRnJvbnRlbmRQcm90b2NvbCA9 IChQcm90b2NvbFZlcnNpb24pIGF0b2kob3B0YXJnKTsKKwkJCQkJRnJvbnRlbmRQcm90b2Nv bCA9IChQcm90b2NvbFZlcnNpb24pIGF0b2kob3B0Y3R4Lm9wdGFyZyk7CiAJCQkJYnJlYWs7 CiAKIAkJCWNhc2UgJ1cnOgotCQkJCVNldENvbmZpZ09wdGlvbigicG9zdF9hdXRoX2RlbGF5 Iiwgb3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSk7CisJCQkJU2V0Q29uZmlnT3B0aW9uKCJwb3N0 X2F1dGhfZGVsYXkiLCBvcHRjdHgub3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSk7CiAJCQkJYnJl YWs7CiAKIAkJCWRlZmF1bHQ6CkBAIC00MDE0LDM2ICs0MDE0LDI3IEBAIHByb2Nlc3NfcG9z dGdyZXNfc3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgR3VjQ29udGV4dCBjdHgs CiAJLyoKIAkgKiBPcHRpb25hbCBkYXRhYmFzZSBuYW1lIHNob3VsZCBiZSB0aGVyZSBvbmx5 IGlmICpkYm5hbWUgaXMgTlVMTC4KIAkgKi8KLQlpZiAoIWVycnMgJiYgZGJuYW1lICYmICpk Ym5hbWUgPT0gTlVMTCAmJiBhcmdjIC0gb3B0aW5kID49IDEpCi0JCSpkYm5hbWUgPSBzdHJk dXAoYXJndltvcHRpbmQrK10pOworCWlmICghZXJycyAmJiBkYm5hbWUgJiYgKmRibmFtZSA9 PSBOVUxMICYmIGFyZ2MgLSBvcHRjdHgub3B0aW5kID49IDEpCisJCSpkYm5hbWUgPSBzdHJk dXAoYXJndltvcHRjdHgub3B0aW5kKytdKTsKIAotCWlmIChlcnJzIHx8IGFyZ2MgIT0gb3B0 aW5kKQorCWlmIChlcnJzIHx8IGFyZ2MgIT0gb3B0Y3R4Lm9wdGluZCkKIAl7CiAJCWlmIChl cnJzKQotCQkJb3B0aW5kLS07CQkJLyogY29tcGxhaW4gYWJvdXQgdGhlIHByZXZpb3VzIGFy Z3VtZW50ICovCisJCQlvcHRjdHgub3B0aW5kLS07CS8qIGNvbXBsYWluIGFib3V0IHRoZSBw cmV2aW91cyBhcmd1bWVudCAqLwogCiAJCS8qIHNwZWxsIHRoZSBlcnJvciBtZXNzYWdlIGEg Yml0IGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiBjb250ZXh0ICovCiAJCWlmIChJc1VuZGVy UG9zdG1hc3RlcikKIAkJCWVyZXBvcnQoRkFUQUwsCiAJCQkJCWVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAotCQkJCQllcnJtc2coImludmFsaWQgY29tbWFuZC1saW5lIGFyZ3Vt ZW50IGZvciBzZXJ2ZXIgcHJvY2VzczogJXMiLCBhcmd2W29wdGluZF0pLAorCQkJCQllcnJt c2coImludmFsaWQgY29tbWFuZC1saW5lIGFyZ3VtZW50IGZvciBzZXJ2ZXIgcHJvY2Vzczog JXMiLCBhcmd2W29wdGN0eC5vcHRpbmRdKSwKIAkJCQkJZXJyaGludCgiVHJ5IFwiJXMgLS1o ZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpKTsKIAkJZWxzZQogCQkJ ZXJlcG9ydChGQVRBTCwKIAkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJ CQkJCWVycm1zZygiJXM6IGludmFsaWQgY29tbWFuZC1saW5lIGFyZ3VtZW50OiAlcyIsCi0J CQkJCQkgICBwcm9nbmFtZSwgYXJndltvcHRpbmRdKSwKKwkJCQkJCSAgIHByb2duYW1lLCBh cmd2W29wdGN0eC5vcHRpbmRdKSwKIAkJCQkJZXJyaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIg Zm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpKTsKIAl9Ci0KLQkvKgotCSAqIFJl c2V0IGdldG9wdCgzKSBsaWJyYXJ5IHNvIHRoYXQgaXQgd2lsbCB3b3JrIGNvcnJlY3RseSBp biBzdWJwcm9jZXNzZXMKLQkgKiBvciB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGEg c2Vjb25kIHRpbWUgd2l0aCBhbm90aGVyIGFycmF5LgotCSAqLwotCW9wdGluZCA9IDE7Ci0j aWZkZWYgSEFWRV9JTlRfT1BUUkVTRVQKLQlvcHRyZXNldCA9IDE7CQkJCS8qIHNvbWUgc3lz dGVtcyBuZWVkIHRoaXMgdG9vICovCi0jZW5kaWYKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9taXNjL3BzX3N0YXR1cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wc19zdGF0dXMuYwppbmRleCBlMDhiMjZlOGMxNC4uMzBmZTg4MzkzOWEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcHNfc3RhdHVzLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wc19zdGF0dXMuYwpAQCAtMjE4LDcgKzIxOCw4IEBAIHNhdmVfcHNf ZGlzcGxheV9hcmdzKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiBpbnRvIHRoZSBhcmd2 IGFycmF5LCBhbmQgd2lsbCBnZXQgaG9ycmlibHkgY29uZnVzZWQgd2hlbiBpdCBpcwogCSAq IHJlLWNhbGxlZCB0byBhbmFseXplIGEgc3VicHJvY2VzcycgYXJndW1lbnQgc3RyaW5nIGlm IHRoZSBhcmd2IHN0b3JhZ2UKIAkgKiBoYXMgYmVlbiBjbG9iYmVyZWQgbWVhbndoaWxlLiAg T3RoZXIgcGxhdGZvcm1zIGhhdmUgb3RoZXIgZGVwZW5kZW5jaWVzCi0JICogb24gYXJndltd LgorCSAqIG9uIGFyZ3ZbXS4gKFdlIHVzZSBjdXN0b20gcGdfZ2V0b3B0X3N0YXJ0L25leHQo KSBmdW5jdGlvbnMgbm93YWRheXMKKwkgKiB0aGF0IGRvbid0IGRvIHRoYXQsIGJ1dCB0aG9z ZSBvdGhlciBkZXBlbmRlbmNpZXMgbWlnaHQgc3RpbGwgZXhpc3QuKQogCSAqLwogCXsKIAkJ Y2hhcgkgICoqbmV3X2FyZ3Y7Ci0tIAoyLjM5LjUKCg== --------------UKeBz5P4n0QSQSe2NAsv4oe5--