From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mxout012.mail.hostpoint.ch (mxout012.mail.hostpoint.ch [IPv6:2a00:d70:0:e::312]) by sourceware.org (Postfix) with ESMTPS id CF2A03882130; Fri, 14 Jun 2024 17:37:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CF2A03882130 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=vollmann.ch Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=vollmann.ch ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CF2A03882130 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:d70:0:e::312 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718386677; cv=none; b=XUcCpFnjWb8O/XIXZH2qed0kXDJss0yERW9Ri75LlX/Clca9yxj/OE3V358Y+QwrXTc0Su64uc72y/IJm0/a2dtgq5Qgpc/Sep2y0TvO5ZV+wYLT3jIPkgBJrrXoDkOvx2DjcUC+vFOKrmMuWTzKIH6qEUnDg5Fa6/oSb4MXh84= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718386677; c=relaxed/simple; bh=asDwgau6ev+Gks75aqrp+bVD9Zuqpteyb611PKdCT3o=; h=Message-ID:Date:MIME-Version:Subject:To:From; b=no4f6bfsNXv/LVHMMM8E87//6Ibxzz4VpcXk3g9zpJaGvVVneKTZKummpDahGljzo65QeHE8q5fMGFdgdnG+1I+RC7rGPkoY46CiF57nRwp69ZxNhFcUatjpdNNcSDc4E279AUdbUu4/Lr30NJTeebbf7cnW4u0KtBlA3t1jqx0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from [10.0.2.44] (helo=asmtp014.mail.hostpoint.ch) by mxout012.mail.hostpoint.ch with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.97.1 (FreeBSD)) (envelope-from ) id 1sIAs0-0000000024X-1NaS; Fri, 14 Jun 2024 19:37:48 +0200 Received: from [46.22.24.208] (helo=[192.168.26.4]) by asmtp014.mail.hostpoint.ch with esmtpa (Exim 4.97.1 (FreeBSD)) (envelope-from ) id 1sIAs0-00000000M9f-01qT; Fri, 14 Jun 2024 19:37:48 +0200 X-Authenticated-Sender-Id: mail-all@vollmann.ch Content-Type: multipart/mixed; boundary="------------ZnAeZFl23leLUSOpvvy2fUNr" Message-ID: <05fec570-04e5-44de-9a61-c25fb1adf92d@vollmann.ch> Date: Fri, 14 Jun 2024 19:37:47 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH] libstdc++: Fix build for AVR [PR115481, PR111639] Content-Language: en-US To: gcc Patches , libstdc++ References: Cc: gcc-bugzilla@gcc.gnu.org From: Detlef Vollmann In-Reply-To: X-Vs-State: 0 X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------ZnAeZFl23leLUSOpvvy2fUNr Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit The attached patch fixes 115481 and 111639. It was tested against avr-libc 2.0.0 (which has *f as macros), 2.1.0 (which has *f as functions, but no long double), and 2.2.0 (which has long double functions). Only the libstdc++ build was tested, not the resulting library. Detlef --------------ZnAeZFl23leLUSOpvvy2fUNr Content-Type: text/x-patch; charset=UTF-8; name="fix-avr-math.patch" Content-Disposition: attachment; filename="fix-avr-math.patch" Content-Transfer-Encoding: base64 Y29tbWl0IDkxMTJhZTU3OWY3M2IyNDllOTUxNWQ1YWM5ZGRjM2E3NmIwNjdjMzkKQXV0aG9y OiBEZXRsZWYgVm9sbG1hbm4gPGR2QHZvbGxtYW5uLmNoPgpEYXRlOiAgIEZyaSBKdW4gMTQg MTQ6MzQ6MzEgMjAyNCArMDIwMAoKICAgIGxpYnN0ZGMrKy12MzogZGV0ZWN0IG1hdGggZnVu Y3Rpb25zIHdoZW4gdXNpbmcgYXZyLWxpYmMgYW5kIGhhbmRsZSBtYWNyb3MKICAgIAogICAg RGlmZmVyZW50IHZlcnNpb25zIG9mIGF2ci1saWJjIGhhdmUgZGlmZmVyZW50IGRlZmluaXRp b25zIG9mCiAgICBtYXRoIGZ1bmN0aW9uczoKICAgICAgLSAyLjAuMCBhbmQgZWFybGllciBo YXZlIGZsb2F0IHZlcnNpb25zIGFzIG1hY3JvcwogICAgICAtIDIuMS4wIGhhcyBmbG9hdCB2 ZXJzaW9ucyBhcyBwcm9wZXIgZnVuY3Rpb25zLCBidXQgbm8gbG9uZyBkb3VibGUgdmVyc2lv bnMKICAgICAgLSAyLjIuMCBoYXMgbG9uZyBkb3VibGUgdmVyc2lvbnMKICAgIAogICAgVGhp cyBjb21taXQgdGVsbHMgY29uZmlndXJlIHRvIGFsd2F5cyBjaGVjayBpZiB0aGVzZSBmdW5j dGlvbnMgYXJlIGF2YWlsYWJsZS4KICAgIEl0IGFsc28gI3VuZGVmJ3MgYW55IG1hY3Jvcy4K ICAgIAogICAgbGlic3RkYysrLXYzL0NoYW5nZUxvZzoKICAgIAogICAgICAgICAgICAqIGNy b3NzY29uZmlnLm00IFthdnIqLSotKl06IEFkZCBjb21waWxlLWNoZWNrcyBmb3IKICAgICAg ICAgICAgZmxvYXQgYW5kIGxvbmcgZG91YmxlIGZ1bmN0aW9ucy4KICAgICAgICAgICAgKiBj b25maWd1cmU6IFJlZ2VuZXJhdGUuCiAgICAgICAgICAgICogc3JjL2MrKzk4L21hdGhfc3R1 YnNfZmxvYXQuY2M6ICN1bmRlZiBhbnkgbWFjcm9zLgoKZGlmZiAtLWdpdCBhL2xpYnN0ZGMr Ky12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCmluZGV4IDU2NDVlOTkx YWY3Li4xN2RiYWU3YmQ4NyAxMDA3NTUKLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQor KysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCkBAIC01MDgwLDcgKzUwODAsNyBAQCBlbHNl CiAgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcy MDM2ODU0Nzc1ODA3LAogICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRp bmcgYXMgQyBjb21waWxlcnMKICAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1 NDc3NTgwNy4gICovCi0jZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAt IDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgoKG9mZl90 KSAxIDw8IDMxKSA8PCAzMSkgLSAxICsgKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSkKICAg aW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCiAJ CSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKIAkJICAgICAgPyAx IDogLTFdOwpAQCAtNTEyNiw3ICs1MTI2LDcgQEAgZWxzZQogICAgIFdlIGNhbid0IHNpbXBs eSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKICAgICBz aW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCiAg ICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLwotI2RlZmlu ZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2 MikpCisjZGVmaW5lIExBUkdFX09GRl9UICgoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpIC0g MSArICgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkpCiAgIGludCBvZmZfdF9pc19sYXJnZVso TEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQogCQkgICAgICAgJiYgTEFSR0VfT0ZG X1QgJSAyMTQ3NDgzNjQ3ID09IDEpCiAJCSAgICAgID8gMSA6IC0xXTsKQEAgLTUxNTAsNyAr NTE1MCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dAogICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZG X1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKICAgICBzaW5jZSBzb21lIEMrKyBjb21w aWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCiAgICAgaW5jb3JyZWN0bHkgcmVq ZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLwotI2RlZmluZSBMQVJHRV9PRkZfVCAoKChv ZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisjZGVmaW5lIExBUkdF X09GRl9UICgoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpIC0gMSArICgoKG9mZl90KSAxIDw8 IDMxKSA8PCAzMSkpCiAgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3 NDgzNjI5ID09IDcyMQogCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09 IDEpCiAJCSAgICAgID8gMSA6IC0xXTsKQEAgLTUxOTUsNyArNTE5NSw3IEBAIGVsc2UKICAg ICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4 NTQ3NzU4MDcsCiAgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBh cyBDIGNvbXBpbGVycwogICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1 ODA3LiAgKi8KLSNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSAr ICgob2ZmX3QpIDEgPDwgNjIpKQorI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2ZmX3QpIDEg PDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQogICBpbnQg b2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKIAkJICAg ICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQogCQkgICAgICA/IDEgOiAt MV07CkBAIC01MjE5LDcgKzUyMTksNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25m dGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKICAgICBXZSBjYW4ndCBzaW1wbHkg ZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCiAgICAgc2lu Y2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycwogICAg IGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KLSNkZWZpbmUg TEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIp KQorI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEg KyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQogICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExB UkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKIAkJICAgICAgICYmIExBUkdFX09GRl9U ICUgMjE0NzQ4MzY0NyA9PSAxKQogCQkgICAgICA/IDEgOiAtMV07CkBAIC0yODYyOCw1MSAr Mjg2MjgsMjM1NCBAQCBjYXNlICIke2hvc3R9IiBpbgogICAgIDs7CiAKICAgYXZyKi0qLSop Ci0gICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BQ09TRiAxIiA+PmNvbmZkZWZzLmgKIAot ICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVNJTkYgMSIgPj5jb25mZGVmcy5oCiAKLSAg ICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0FUQU4yRiAxIiA+PmNvbmZkZWZzLmgKIAotICAg ICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVRBTkYgMSIgPj5jb25mZGVmcy5oCisgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFjb3Nm IGRlY2xhcmF0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhY29zZiBkZWNs YXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfYWNvc2ZfdXNlKzp9 IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKwor CisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9 JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xp bms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxB R1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2 X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1h dGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2Vu ZGlmCisjdW5kZWYgYWNvc2YKKworaW50CittYWluICgpCit7CisKKyAgdm9pZCAoKmYpKHZv aWQpID0gKHZvaWQgKCopKHZvaWQpKWFjb3NmOworCisgIDsKKyAgcmV0dXJuIDA7Cit9Citf QUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xp YmN4eF9jdl9mdW5jX2Fjb3NmX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNf YWNvc2ZfdXNlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFj X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNfYWNvc2ZfdXNlIiA+ JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5jX2Fjb3NmX3VzZSIgPiY2OyB9CisgIGlm IHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2Fjb3NmX3VzZSIgPSB4eWVzOyB0aGVuCisgICAg Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0FDT1NGIDEKK19BQ0VP RgorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIGFzaW5mIGRlY2xhcmF0aW9uIiA+JjUKKyRhc19lY2hvX24g ImNoZWNraW5nIGZvciBhc2luZiBkZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGli Y3h4X2N2X2Z1bmNfYXNpbmZfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAi KGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQ ICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25m dGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQg JENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUn CithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVm cy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisj IGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgYXNpbmYKKworaW50CittYWlu ICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKWFzaW5mOwor CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUg IiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX2FzaW5mX3VzZT15ZXMKKwor ZWxzZQorICBnbGliY3h4X2N2X2Z1bmNfYXNpbmZfdXNlPW5vCitmaQorcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQor eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGli Y3h4X2N2X2Z1bmNfYXNpbmZfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5j X2FzaW5mX3VzZSIgPiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2FzaW5m X3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2Rl ZmluZSBIQVZFX0FTSU5GIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGF0YW4yZiBkZWNs YXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXRhbjJmIGRlY2xhcmF0 aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19hdGFuMmZfdXNlKzp9IGZh bHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisg ICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRD QyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9 JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1Mg Y29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2Nf Y29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGgu aD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlm CisjdW5kZWYgYXRhbjJmCisKK2ludAorbWFpbiAoKQoreworCisgIHZvaWQgKCpmKSh2b2lk KSA9ICh2b2lkICgqKSh2b2lkKSlhdGFuMmY7CisKKyAgOworICByZXR1cm4gMDsKK30KK19B Q0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbGli Y3h4X2N2X2Z1bmNfYXRhbjJmX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNf YXRhbjJmX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRh Y19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5jX2F0YW4yZl91c2Ui ID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfYXRhbjJmX3VzZSIgPiY2OyB9Cisg IGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2F0YW4yZl91c2UiID0geHllczsgdGhlbgor ICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQor X0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXRhbmYgZGVjbGFyYXRpb24iID4mNQorJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yIGF0YW5mIGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAk e2dsaWJjeHhfY3ZfZnVuY19hdGFuZl91c2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFjX2V4dD1jCithY19jcHA9 JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdT IGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4 ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJT ID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNv bmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmZGVmIEhBVkVfSUVFRUZQ X0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRlZiBhdGFuZgorCitpbnQK K21haW4gKCkKK3sKKworICB2b2lkICgqZikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpYXRh bmY7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29t cGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbGliY3h4X2N2X2Z1bmNfYXRhbmZfdXNlPXll cworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19hdGFuZl91c2U9bm8KK2ZpCitybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQK K2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGdsaWJjeHhfY3ZfZnVuY19hdGFuZl91c2UiID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2 X2Z1bmNfYXRhbmZfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4X2N2X2Z1bmNf YXRhbmZfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G CisjZGVmaW5lIEhBVkVfQVRBTkYgMQorX0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY2VpbGYg ZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNlaWxmIGRlY2xh cmF0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19jZWlsZl91c2UrOn0g ZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisK KyAgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0n JENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGlu az0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFH UyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3Zf Y19jb21waWxlcl9nbnUKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0 aC5oPgorI2lmZGVmIEhBVkVfSUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5k aWYKKyN1bmRlZiBjZWlsZgorCitpbnQKK21haW4gKCkKK3sKKworICB2b2lkICgqZikodm9p ZCkgPSAodm9pZCAoKikodm9pZCkpY2VpbGY7CisKKyAgOworICByZXR1cm4gMDsKK30KK19B Q0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbGli Y3h4X2N2X2Z1bmNfY2VpbGZfdXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19j ZWlsZl91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNf b2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19jZWlsZl91c2UiID4m NQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfY2VpbGZfdXNlIiA+JjY7IH0KKyAgaWYg dGVzdCAieCRnbGliY3h4X2N2X2Z1bmNfY2VpbGZfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBj YXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorX0FDRU9G CisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBmb3IgY29zaGYgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yIGNvc2hmIGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJj eHhfY3ZfZnVuY19jb3NoZl91c2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAg JENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0 ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAk Q0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScK K2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZz LmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmZGVmIEhBVkVfSUVFRUZQX0gKKyMg aW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRlZiBjb3NoZgorCitpbnQKK21haW4g KCkKK3sKKworICB2b2lkICgqZikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpY29zaGY7CisK KyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAi JExJTkVOTyI7IHRoZW4gOgorICBnbGliY3h4X2N2X2Z1bmNfY29zaGZfdXNlPXllcworCitl bHNlCisgIGdsaWJjeHhfY3ZfZnVuY19jb3NoZl91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJj eHhfY3ZfZnVuY19jb3NoZl91c2UiID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNf Y29zaGZfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4X2N2X2Z1bmNfY29zaGZf dXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVm aW5lIEhBVkVfQ09TSEYgMQorX0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY29zZiBkZWNsYXJh dGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY29zZiBkZWNsYXJhdGlvbi4u LiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfY29zZl91c2UrOn0gZmFsc2U7IHRo ZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFj X2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRD RkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1v IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVz dC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxl cl9nbnUKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lm ZGVmIEhBVkVfSUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRl ZiBjb3NmCisKK2ludAorbWFpbiAoKQoreworCisgIHZvaWQgKCpmKSh2b2lkKSA9ICh2b2lk ICgqKSh2b2lkKSljb3NmOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFj X2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5j X2Nvc2ZfdXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19jb3NmX3VzZT1ubwor ZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5jX2Nvc2ZfdXNlIiA+JjUKKyRhc19lY2hvICIk Z2xpYmN4eF9jdl9mdW5jX2Nvc2ZfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4 X2N2X2Z1bmNfY29zZl91c2UiID0geHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9DT1NGIDEKK19BQ0VPRgorCisgIGZpCisKKworCisg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IGV4cGYgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGV4cGYg ZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KK2lmICR7Z2xpYmN4eF9jdl9mdW5jX2V4cGZfdXNl Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UK KworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBp bGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2Fj X2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExE RkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFj X2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUg PG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgor I2VuZGlmCisjdW5kZWYgZXhwZgorCitpbnQKK21haW4gKCkKK3sKKworICB2b2lkICgqZiko dm9pZCkgPSAodm9pZCAoKikodm9pZCkpZXhwZjsKKworICA7CisgIHJldHVybiAwOworfQor X0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGds aWJjeHhfY3ZfZnVuY19leHBmX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNf ZXhwZl91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNf b2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19leHBmX3VzZSIgPiY1 CiskYXNfZWNobyAiJGdsaWJjeHhfY3ZfZnVuY19leHBmX3VzZSIgPiY2OyB9CisgIGlmIHRl c3QgIngkZ2xpYmN4eF9jdl9mdW5jX2V4cGZfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXQg Pj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRVhQRiAxCitfQUNFT0YKKwor ICBmaQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciBmYWJzZiBkZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVj a2luZyBmb3IgZmFic2YgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KK2lmICR7Z2xpYmN4eF9j dl9mdW5jX2ZhYnNmX3VzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2CitlbHNlCisKKworICAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQ RkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3Qu JGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxB R1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNf Y29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4g ICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaWZkZWYgSEFWRV9JRUVFRlBfSAorIyBpbmNs dWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorI3VuZGVmIGZhYnNmCisKK2ludAorbWFpbiAoKQor eworCisgIHZvaWQgKCpmKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSlmYWJzZjsKKworICA7 CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElO RU5PIjsgdGhlbiA6CisgIGdsaWJjeHhfY3ZfZnVuY19mYWJzZl91c2U9eWVzCisKK2Vsc2UK KyAgZ2xpYmN4eF9jdl9mdW5jX2ZhYnNmX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRl c3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9j dl9mdW5jX2ZhYnNmX3VzZSIgPiY1CiskYXNfZWNobyAiJGdsaWJjeHhfY3ZfZnVuY19mYWJz Zl91c2UiID4mNjsgfQorICBpZiB0ZXN0ICJ4JGdsaWJjeHhfY3ZfZnVuY19mYWJzZl91c2Ui ID0geHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUg SEFWRV9GQUJTRiAxCitfQUNFT0YKKworICBmaQorCisKKworICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmbG9vcmYgZGVjbGFyYXRp b24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZsb29yZiBkZWNsYXJhdGlvbi4u LiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfZmxvb3JmX3VzZSs6fSBmYWxzZTsg dGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKworICAgICAg YWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMg JENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0Mg LW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0 ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBp bGVyX2dudQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxtYXRoLmg+Cisj aWZkZWYgSEFWRV9JRUVFRlBfSAorIyBpbmNsdWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorI3Vu ZGVmIGZsb29yZgorCitpbnQKK21haW4gKCkKK3sKKworICB2b2lkICgqZikodm9pZCkgPSAo dm9pZCAoKikodm9pZCkpZmxvb3JmOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YK K2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9j dl9mdW5jX2Zsb29yZl91c2U9eWVzCisKK2Vsc2UKKyAgZ2xpYmN4eF9jdl9mdW5jX2Zsb29y Zl91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19mbG9vcmZfdXNlIiA+JjUK KyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5jX2Zsb29yZl91c2UiID4mNjsgfQorICBpZiB0 ZXN0ICJ4JGdsaWJjeHhfY3ZfZnVuY19mbG9vcmZfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBj YXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKK19BQ0VP RgorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIGZtb2RmIGRlY2xhcmF0aW9uIiA+JjUKKyRhc19lY2hvX24g ImNoZWNraW5nIGZvciBmbW9kZiBkZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGli Y3h4X2N2X2Z1bmNfZm1vZGZfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAi KGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQ ICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25m dGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQg JENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUn CithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVm cy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisj IGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgZm1vZGYKKworaW50CittYWlu ICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKWZtb2RmOwor CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUg IiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX2Ztb2RmX3VzZT15ZXMKKwor ZWxzZQorICBnbGliY3h4X2N2X2Z1bmNfZm1vZGZfdXNlPW5vCitmaQorcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQor eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGli Y3h4X2N2X2Z1bmNfZm1vZGZfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5j X2Ztb2RmX3VzZSIgPiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2Ztb2Rm X3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2Rl ZmluZSBIQVZFX0ZNT0RGIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZyZXhwZiBkZWNs YXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZnJleHBmIGRlY2xhcmF0 aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19mcmV4cGZfdXNlKzp9IGZh bHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisg ICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRD QyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9 JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1Mg Y29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2Nf Y29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGgu aD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlm CisjdW5kZWYgZnJleHBmCisKK2ludAorbWFpbiAoKQoreworCisgIHZvaWQgKCpmKSh2b2lk KSA9ICh2b2lkICgqKSh2b2lkKSlmcmV4cGY7CisKKyAgOworICByZXR1cm4gMDsKK30KK19B Q0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbGli Y3h4X2N2X2Z1bmNfZnJleHBmX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNf ZnJleHBmX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRh Y19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5jX2ZyZXhwZl91c2Ui ID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfZnJleHBmX3VzZSIgPiY2OyB9Cisg IGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2ZyZXhwZl91c2UiID0geHllczsgdGhlbgor ICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQor X0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgaHlwb3RmIGRlY2xhcmF0aW9uIiA+JjUKKyRhc19l Y2hvX24gImNoZWNraW5nIGZvciBoeXBvdGYgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KK2lm ICR7Z2xpYmN4eF9jdl9mdW5jX2h5cG90Zl91c2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFjX2V4dD1jCithY19j cHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZM QUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFj X2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRM SUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAg ICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5k IGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmZGVmIEhBVkVfSUVF RUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRlZiBoeXBvdGYKKwor aW50CittYWluICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQpID0gKHZvaWQgKCopKHZvaWQp KWh5cG90ZjsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3Ry eV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsaWJjeHhfY3ZfZnVuY19oeXBvdGZf dXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19oeXBvdGZfdXNlPW5vCitmaQor cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNfaHlwb3RmX3VzZSIgPiY1CiskYXNfZWNobyAiJGds aWJjeHhfY3ZfZnVuY19oeXBvdGZfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4 X2N2X2Z1bmNfaHlwb3RmX3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMu aCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0hZUE9URiAxCitfQUNFT0YKKworICBmaQorCisK KworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBsZGV4cGYgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IGxkZXhwZiBkZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNf bGRleHBmX3VzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2CitlbHNlCisKKworICAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1Mn CithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4 dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQ UEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGls ZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisK KyNpbmNsdWRlIDxtYXRoLmg+CisjaWZkZWYgSEFWRV9JRUVFRlBfSAorIyBpbmNsdWRlIDxp ZWVlZnAuaD4KKyNlbmRpZgorI3VuZGVmIGxkZXhwZgorCitpbnQKK21haW4gKCkKK3sKKwor ICB2b2lkICgqZikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpbGRleHBmOworCisgIDsKKyAg cmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8i OyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX2xkZXhwZl91c2U9eWVzCisKK2Vsc2UKKyAg Z2xpYmN4eF9jdl9mdW5jX2xkZXhwZl91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0 LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zf ZnVuY19sZGV4cGZfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5jX2xkZXhw Zl91c2UiID4mNjsgfQorICBpZiB0ZXN0ICJ4JGdsaWJjeHhfY3ZfZnVuY19sZGV4cGZfdXNl IiA9IHh5ZXM7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5l IEhBVkVfTERFWFBGIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxvZzEwZiBkZWNsYXJh dGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbG9nMTBmIGRlY2xhcmF0aW9u Li4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19sb2cxMGZfdXNlKzp9IGZhbHNl OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisgICAg ICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAt YyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRD QyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29u ZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29t cGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4K KyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisj dW5kZWYgbG9nMTBmCisKK2ludAorbWFpbiAoKQoreworCisgIHZvaWQgKCpmKSh2b2lkKSA9 ICh2b2lkICgqKSh2b2lkKSlsb2cxMGY7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VP RgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbGliY3h4 X2N2X2Z1bmNfbG9nMTBmX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNfbG9n MTBmX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5jX2xvZzEwZl91c2UiID4m NQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfbG9nMTBmX3VzZSIgPiY2OyB9CisgIGlm IHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2xvZzEwZl91c2UiID0geHllczsgdGhlbgorICAg IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorX0FD RU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgbG9nZiBkZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19u ICJjaGVja2luZyBmb3IgbG9nZiBkZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGli Y3h4X2N2X2Z1bmNfbG9nZl91c2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAg JENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0 ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAk Q0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScK K2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZz LmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmZGVmIEhBVkVfSUVFRUZQX0gKKyMg aW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRlZiBsb2dmCisKK2ludAorbWFpbiAo KQoreworCisgIHZvaWQgKCpmKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSlsb2dmOworCisg IDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRM SU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX2xvZ2ZfdXNlPXllcworCitlbHNl CisgIGdsaWJjeHhfY3ZfZnVuY19sb2dmX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRl c3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9j dl9mdW5jX2xvZ2ZfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5jX2xvZ2Zf dXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4X2N2X2Z1bmNfbG9nZl91c2UiID0g eHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFW RV9MT0dGIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1vZGZmIGRlY2xhcmF0aW9uIiA+ JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtb2RmZiBkZWNsYXJhdGlvbi4uLiAiID4m NjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfbW9kZmZfdXNlKzp9IGZhbHNlOyB0aGVuIDoK KyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisgICAgICBhY19leHQ9 YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdT ICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25m dGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFj X2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251 CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQK Ky8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBI QVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgbW9k ZmYKKworaW50CittYWluICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQpID0gKHZvaWQgKCop KHZvaWQpKW1vZGZmOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2Zu X2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX21v ZGZmX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNfbW9kZmZfdXNlPW5vCitm aQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVz dC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNfbW9kZmZfdXNlIiA+JjUKKyRhc19lY2hvICIk Z2xpYmN4eF9jdl9mdW5jX21vZGZmX3VzZSIgPiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4 eF9jdl9mdW5jX21vZGZmX3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMu aCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX01PREZGIDEKK19BQ0VPRgorCisgIGZpCisKKwor CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIHBvd2YgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBv d2YgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KK2lmICR7Z2xpYmN4eF9jdl9mdW5jX3Bvd2Zf dXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vs c2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2Nv bXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScK K2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1Mg JExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9 JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1 ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5o PgorI2VuZGlmCisjdW5kZWYgcG93ZgorCitpbnQKK21haW4gKCkKK3sKKworICB2b2lkICgq Zikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpcG93ZjsKKworICA7CisgIHJldHVybiAwOwor fQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Cisg IGdsaWJjeHhfY3ZfZnVuY19wb3dmX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1 bmNfcG93Zl91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4k YWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19wb3dmX3VzZSIg PiY1CiskYXNfZWNobyAiJGdsaWJjeHhfY3ZfZnVuY19wb3dmX3VzZSIgPiY2OyB9CisgIGlm IHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX3Bvd2ZfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBj YXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUE9XRiAxCitfQUNFT0YK KworICBmaQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBzaW5oZiBkZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJj aGVja2luZyBmb3Igc2luaGYgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KK2lmICR7Z2xpYmN4 eF9jdl9mdW5jX3NpbmhmX3VzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2CitlbHNlCisKKworICAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAk Q1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRl c3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRD RkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1Jwor YWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMu aC4gICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaWZkZWYgSEFWRV9JRUVFRlBfSAorIyBp bmNsdWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorI3VuZGVmIHNpbmhmCisKK2ludAorbWFpbiAo KQoreworCisgIHZvaWQgKCpmKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSlzaW5oZjsKKwor ICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIk TElORU5PIjsgdGhlbiA6CisgIGdsaWJjeHhfY3ZfZnVuY19zaW5oZl91c2U9eWVzCisKK2Vs c2UKKyAgZ2xpYmN4eF9jdl9mdW5jX3NpbmhmX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29u ZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4 eF9jdl9mdW5jX3NpbmhmX3VzZSIgPiY1CiskYXNfZWNobyAiJGdsaWJjeHhfY3ZfZnVuY19z aW5oZl91c2UiID4mNjsgfQorICBpZiB0ZXN0ICJ4JGdsaWJjeHhfY3ZfZnVuY19zaW5oZl91 c2UiID0geHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZp bmUgSEFWRV9TSU5IRiAxCitfQUNFT0YKKworICBmaQorCisKKworICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaW5mIGRlY2xhcmF0 aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaW5mIGRlY2xhcmF0aW9uLi4u ICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19zaW5mX3VzZSs6fSBmYWxzZTsgdGhl biA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKworICAgICAgYWNf ZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENG TEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8g Y29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0 LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVy X2dudQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaWZk ZWYgSEFWRV9JRUVFRlBfSAorIyBpbmNsdWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorI3VuZGVm IHNpbmYKKworaW50CittYWluICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQpID0gKHZvaWQg KCopKHZvaWQpKXNpbmY7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNf Zm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbGliY3h4X2N2X2Z1bmNf c2luZl91c2U9eWVzCisKK2Vsc2UKKyAgZ2xpYmN4eF9jdl9mdW5jX3NpbmZfdXNlPW5vCitm aQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVz dC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNfc2luZl91c2UiID4mNQorJGFzX2VjaG8gIiRn bGliY3h4X2N2X2Z1bmNfc2luZl91c2UiID4mNjsgfQorICBpZiB0ZXN0ICJ4JGdsaWJjeHhf Y3ZfZnVuY19zaW5mX3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NJTkYgMQorX0FDRU9GCisKKyAgZmkKKworCisKKyAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig c3FydGYgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNxcnRm IGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19zcXJ0Zl91 c2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxz ZQorCisKKyAgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29t cGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1Jwor YWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAk TERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0k YWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVk ZSA8bWF0aC5oPgorI2lmZGVmIEhBVkVfSUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+ CisjZW5kaWYKKyN1bmRlZiBzcXJ0ZgorCitpbnQKK21haW4gKCkKK3sKKworICB2b2lkICgq Zikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpc3FydGY7CisKKyAgOworICByZXR1cm4gMDsK K30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgor ICBnbGliY3h4X2N2X2Z1bmNfc3FydGZfdXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3Zf ZnVuY19zcXJ0Zl91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVz dC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19zcXJ0Zl91 c2UiID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfc3FydGZfdXNlIiA+JjY7IH0K KyAgaWYgdGVzdCAieCRnbGliY3h4X2N2X2Z1bmNfc3FydGZfdXNlIiA9IHh5ZXM7IHRoZW4K KyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1FSVEYgMQor X0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgdGFuaGYgZGVjbGFyYXRpb24iID4mNQorJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yIHRhbmhmIGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAk e2dsaWJjeHhfY3ZfZnVuY190YW5oZl91c2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFjX2V4dD1jCithY19jcHA9 JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdT IGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4 ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJT ID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNv bmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmZGVmIEhBVkVfSUVFRUZQ X0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRlZiB0YW5oZgorCitpbnQK K21haW4gKCkKK3sKKworICB2b2lkICgqZikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpdGFu aGY7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29t cGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbGliY3h4X2N2X2Z1bmNfdGFuaGZfdXNlPXll cworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY190YW5oZl91c2U9bm8KK2ZpCitybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQK K2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGdsaWJjeHhfY3ZfZnVuY190YW5oZl91c2UiID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2 X2Z1bmNfdGFuaGZfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4X2N2X2Z1bmNf dGFuaGZfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G CisjZGVmaW5lIEhBVkVfVEFOSEYgMQorX0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdGFuZiBk ZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdGFuZiBkZWNsYXJh dGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfdGFuZl91c2UrOn0gZmFs c2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAg ICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJEND IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0n JENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBj b25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19j b21waWxlcl9nbnUKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5o PgorI2lmZGVmIEhBVkVfSUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYK KyN1bmRlZiB0YW5mCisKK2ludAorbWFpbiAoKQoreworCisgIHZvaWQgKCpmKSh2b2lkKSA9 ICh2b2lkICgqKSh2b2lkKSl0YW5mOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YK K2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9j dl9mdW5jX3RhbmZfdXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY190YW5mX3Vz ZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5jX3RhbmZfdXNlIiA+JjUKKyRhc19l Y2hvICIkZ2xpYmN4eF9jdl9mdW5jX3RhbmZfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRn bGliY3h4X2N2X2Z1bmNfdGFuZl91c2UiID0geHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZk ZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9UQU5GIDEKK19BQ0VPRgorCisgIGZpCisK KworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yIGFjb3NsIGRlY2xhcmF0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZv ciBhY29zbCBkZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNf YWNvc2xfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYKK2Vsc2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycK K2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0 ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQ RkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxl cl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKwor I2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGll ZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgYWNvc2wKKworaW50CittYWluICgpCit7CisKKyAg dm9pZCAoKmYpKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKWFjb3NsOworCisgIDsKKyAgcmV0 dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0 aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX2Fjb3NsX3VzZT15ZXMKKworZWxzZQorICBnbGli Y3h4X2N2X2Z1bmNfYWNvc2xfdXNlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNf YWNvc2xfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5jX2Fjb3NsX3VzZSIg PiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2Fjb3NsX3VzZSIgPSB4eWVz OyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0FD T1NMIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFzaW5sIGRlY2xhcmF0aW9uIiA+JjUK KyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhc2lubCBkZWNsYXJhdGlvbi4uLiAiID4mNjsg fQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfYXNpbmxfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisgICAgICBhY19leHQ9Ywor YWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRD UFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVz dCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4 dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisK KyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8q IGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZF X0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgYXNpbmwK KworaW50CittYWluICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQpID0gKHZvaWQgKCopKHZv aWQpKWFzaW5sOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2Nf dHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX2FzaW5s X3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNfYXNpbmxfdXNlPW5vCitmaQor cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNfYXNpbmxfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xp YmN4eF9jdl9mdW5jX2FzaW5sX3VzZSIgPiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9j dl9mdW5jX2FzaW5sX3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRgorI2RlZmluZSBIQVZFX0FTSU5MIDEKK19BQ0VPRgorCisgIGZpCisKKworCisg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IGF0YW4ybCBkZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXRh bjJsIGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19hdGFu MmxfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYK K2Vsc2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2Fj X2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4m NScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxB R1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9n bnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lu Y2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVm cC5oPgorI2VuZGlmCisjdW5kZWYgYXRhbjJsCisKK2ludAorbWFpbiAoKQoreworCisgIHZv aWQgKCpmKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSlhdGFuMmw7CisKKyAgOworICByZXR1 cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRo ZW4gOgorICBnbGliY3h4X2N2X2Z1bmNfYXRhbjJsX3VzZT15ZXMKKworZWxzZQorICBnbGli Y3h4X2N2X2Z1bmNfYXRhbjJsX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5j X2F0YW4ybF91c2UiID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfYXRhbjJsX3Vz ZSIgPiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2F0YW4ybF91c2UiID0g eHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFW RV9BVEFOMkwgMQorX0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXRhbmwgZGVjbGFyYXRpb24i ID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGF0YW5sIGRlY2xhcmF0aW9uLi4uICIg PiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19hdGFubF91c2UrOn0gZmFsc2U7IHRoZW4g OgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFjX2V4 dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxB R1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNv bmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4k YWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9n bnUKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmZGVm IEhBVkVfSUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRlZiBh dGFubAorCitpbnQKK21haW4gKCkKK3sKKworICB2b2lkICgqZikodm9pZCkgPSAodm9pZCAo Kikodm9pZCkpYXRhbmw7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNf Zm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbGliY3h4X2N2X2Z1bmNf YXRhbmxfdXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19hdGFubF91c2U9bm8K K2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19hdGFubF91c2UiID4mNQorJGFzX2VjaG8g IiRnbGliY3h4X2N2X2Z1bmNfYXRhbmxfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGli Y3h4X2N2X2Z1bmNfYXRhbmxfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVm cy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorX0FDRU9GCisKKyAgZmkKKwor CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgY2VpbGwgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IGNlaWxsIGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19j ZWlsbF91c2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m NgorZWxzZQorCisKKyAgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJwor YWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQg PiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBG TEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVy X2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisj aW5jbHVkZSA8bWF0aC5oPgorI2lmZGVmIEhBVkVfSUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVl ZWZwLmg+CisjZW5kaWYKKyN1bmRlZiBjZWlsbAorCitpbnQKK21haW4gKCkKK3sKKworICB2 b2lkICgqZikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpY2VpbGw7CisKKyAgOworICByZXR1 cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRo ZW4gOgorICBnbGliY3h4X2N2X2Z1bmNfY2VpbGxfdXNlPXllcworCitlbHNlCisgIGdsaWJj eHhfY3ZfZnVuY19jZWlsbF91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBj b25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19j ZWlsbF91c2UiID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfY2VpbGxfdXNlIiA+ JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4X2N2X2Z1bmNfY2VpbGxfdXNlIiA9IHh5ZXM7 IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQ0VJ TEwgMQorX0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY29zaGwgZGVjbGFyYXRpb24iID4mNQor JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNvc2hsIGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9 CitpZiAke2dsaWJjeHhfY3ZfZnVuY19jb3NobF91c2UrOn0gZmFsc2U7IHRoZW4gOgorICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFjX2V4dD1jCith Y19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQ UEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0 JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0 ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKwor ICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyog ZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmZGVmIEhBVkVf SUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRlZiBjb3NobAor CitpbnQKK21haW4gKCkKK3sKKworICB2b2lkICgqZikodm9pZCkgPSAodm9pZCAoKikodm9p ZCkpY29zaGw7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190 cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbGliY3h4X2N2X2Z1bmNfY29zaGxf dXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19jb3NobF91c2U9bm8KK2ZpCity bSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRh Y19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGdsaWJjeHhfY3ZfZnVuY19jb3NobF91c2UiID4mNQorJGFzX2VjaG8gIiRnbGli Y3h4X2N2X2Z1bmNfY29zaGxfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4X2N2 X2Z1bmNfY29zaGxfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorX0FDRU9GCisKKyAgZmkKKworCisKKyAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig Y29zbCBkZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY29zbCBk ZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfY29zbF91c2Ur On0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQor CisKKyAgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGls ZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNf bGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERG TEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNf Y3ZfY19jb21waWxlcl9nbnUKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8 bWF0aC5oPgorI2lmZGVmIEhBVkVfSUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+Cisj ZW5kaWYKKyN1bmRlZiBjb3NsCisKK2ludAorbWFpbiAoKQoreworCisgIHZvaWQgKCpmKSh2 b2lkKSA9ICh2b2lkICgqKSh2b2lkKSljb3NsOworCisgIDsKKyAgcmV0dXJuIDA7Cit9Citf QUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xp YmN4eF9jdl9mdW5jX2Nvc2xfdXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19j b3NsX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5jX2Nvc2xfdXNlIiA+JjUK KyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5jX2Nvc2xfdXNlIiA+JjY7IH0KKyAgaWYgdGVz dCAieCRnbGliY3h4X2N2X2Z1bmNfY29zbF91c2UiID0geHllczsgdGhlbgorICAgIGNhdCA+ PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9DT1NMIDEKK19BQ0VPRgorCisg IGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yIGV4cGwgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIGV4cGwgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KK2lmICR7Z2xpYmN4eF9jdl9m dW5jX2V4cGxfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYKK2Vsc2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFH UycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNf ZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAk Q1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21w aWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8K KworI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUg PGllZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgZXhwbAorCitpbnQKK21haW4gKCkKK3sKKwor ICB2b2lkICgqZikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpZXhwbDsKKworICA7CisgIHJl dHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsg dGhlbiA6CisgIGdsaWJjeHhfY3ZfZnVuY19leHBsX3VzZT15ZXMKKworZWxzZQorICBnbGli Y3h4X2N2X2Z1bmNfZXhwbF91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBj b25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19l eHBsX3VzZSIgPiY1CiskYXNfZWNobyAiJGdsaWJjeHhfY3ZfZnVuY19leHBsX3VzZSIgPiY2 OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2V4cGxfdXNlIiA9IHh5ZXM7IHRo ZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRVhQTCAx CitfQUNFT0YKKworICBmaQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmYWJzbCBkZWNsYXJhdGlvbiIgPiY1CiskYXNf ZWNob19uICJjaGVja2luZyBmb3IgZmFic2wgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KK2lm ICR7Z2xpYmN4eF9jdl9mdW5jX2ZhYnNsX3VzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKworICAgICAgYWNfZXh0PWMKK2FjX2Nw cD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxB R1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNf ZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJ QlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAg ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQg Y29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaWZkZWYgSEFWRV9JRUVF RlBfSAorIyBpbmNsdWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorI3VuZGVmIGZhYnNsCisKK2lu dAorbWFpbiAoKQoreworCisgIHZvaWQgKCpmKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSlm YWJzbDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9j b21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsaWJjeHhfY3ZfZnVuY19mYWJzbF91c2U9 eWVzCisKK2Vsc2UKKyAgZ2xpYmN4eF9jdl9mdW5jX2ZhYnNsX3VzZT1ubworZmkKK3JtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4 dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xpYmN4eF9jdl9mdW5jX2ZhYnNsX3VzZSIgPiY1CiskYXNfZWNobyAiJGdsaWJjeHhf Y3ZfZnVuY19mYWJzbF91c2UiID4mNjsgfQorICBpZiB0ZXN0ICJ4JGdsaWJjeHhfY3ZfZnVu Y19mYWJzbF91c2UiID0geHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNF T0YKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCitfQUNFT0YKKworICBmaQorCisKKworICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmbG9v cmwgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZsb29ybCBk ZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfZmxvb3JsX3Vz ZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNl CisKKworICAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21w aWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCith Y19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRM REZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRh Y19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRl IDxtYXRoLmg+CisjaWZkZWYgSEFWRV9JRUVFRlBfSAorIyBpbmNsdWRlIDxpZWVlZnAuaD4K KyNlbmRpZgorI3VuZGVmIGZsb29ybAorCitpbnQKK21haW4gKCkKK3sKKworICB2b2lkICgq Zikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpZmxvb3JsOworCisgIDsKKyAgcmV0dXJuIDA7 Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoK KyAgZ2xpYmN4eF9jdl9mdW5jX2Zsb29ybF91c2U9eWVzCisKK2Vsc2UKKyAgZ2xpYmN4eF9j dl9mdW5jX2Zsb29ybF91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25m dGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19mbG9v cmxfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5jX2Zsb29ybF91c2UiID4m NjsgfQorICBpZiB0ZXN0ICJ4JGdsaWJjeHhfY3ZfZnVuY19mbG9vcmxfdXNlIiA9IHh5ZXM7 IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRkxP T1JMIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZtb2RsIGRlY2xhcmF0aW9uIiA+JjUK KyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmbW9kbCBkZWNsYXJhdGlvbi4uLiAiID4mNjsg fQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfZm1vZGxfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisgICAgICBhY19leHQ9Ywor YWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRD UFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVz dCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4 dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisK KyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8q IGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZF X0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgZm1vZGwK KworaW50CittYWluICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQpID0gKHZvaWQgKCopKHZv aWQpKWZtb2RsOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2Nf dHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX2Ztb2Rs X3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNfZm1vZGxfdXNlPW5vCitmaQor cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNfZm1vZGxfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xp YmN4eF9jdl9mdW5jX2Ztb2RsX3VzZSIgPiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9j dl9mdW5jX2Ztb2RsX3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRgorI2RlZmluZSBIQVZFX0ZNT0RMIDEKK19BQ0VPRgorCisgIGZpCisKKworCisg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IGZyZXhwbCBkZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZnJl eHBsIGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19mcmV4 cGxfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYK K2Vsc2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2Fj X2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4m NScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxB R1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9n bnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lu Y2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVm cC5oPgorI2VuZGlmCisjdW5kZWYgZnJleHBsCisKK2ludAorbWFpbiAoKQoreworCisgIHZv aWQgKCpmKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSlmcmV4cGw7CisKKyAgOworICByZXR1 cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRo ZW4gOgorICBnbGliY3h4X2N2X2Z1bmNfZnJleHBsX3VzZT15ZXMKKworZWxzZQorICBnbGli Y3h4X2N2X2Z1bmNfZnJleHBsX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5j X2ZyZXhwbF91c2UiID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfZnJleHBsX3Vz ZSIgPiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2ZyZXhwbF91c2UiID0g eHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFW RV9GUkVYUEwgMQorX0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaHlwb3RsIGRlY2xhcmF0aW9u IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBoeXBvdGwgZGVjbGFyYXRpb24uLi4g IiA+JjY7IH0KK2lmICR7Z2xpYmN4eF9jdl9mdW5jX2h5cG90bF91c2UrOn0gZmFsc2U7IHRo ZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFj X2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRD RkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1v IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVz dC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxl cl9nbnUKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lm ZGVmIEhBVkVfSUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRl ZiBoeXBvdGwKKworaW50CittYWluICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQpID0gKHZv aWQgKCopKHZvaWQpKWh5cG90bDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitp ZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsaWJjeHhfY3Zf ZnVuY19oeXBvdGxfdXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19oeXBvdGxf dXNlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNfaHlwb3RsX3VzZSIgPiY1Cisk YXNfZWNobyAiJGdsaWJjeHhfY3ZfZnVuY19oeXBvdGxfdXNlIiA+JjY7IH0KKyAgaWYgdGVz dCAieCRnbGliY3h4X2N2X2Z1bmNfaHlwb3RsX3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0 ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0hZUE9UTCAxCitfQUNFT0YK KworICBmaQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBsZGV4cGwgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yIGxkZXhwbCBkZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGli Y3h4X2N2X2Z1bmNfbGRleHBsX3VzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2CitlbHNlCisKKworICAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQ UCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29u ZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0 ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1 JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRl ZnMuaC4gICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaWZkZWYgSEFWRV9JRUVFRlBfSAor IyBpbmNsdWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorI3VuZGVmIGxkZXhwbAorCitpbnQKK21h aW4gKCkKK3sKKworICB2b2lkICgqZikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpbGRleHBs OworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBp bGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX2xkZXhwbF91c2U9eWVz CisKK2Vsc2UKKyAgZ2xpYmN4eF9jdl9mdW5jX2xkZXhwbF91c2U9bm8KK2ZpCitybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQK K2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGdsaWJjeHhfY3ZfZnVuY19sZGV4cGxfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9j dl9mdW5jX2xkZXhwbF91c2UiID4mNjsgfQorICBpZiB0ZXN0ICJ4JGdsaWJjeHhfY3ZfZnVu Y19sZGV4cGxfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxv ZzEwbCBkZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbG9nMTBs IGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVuY19sb2cxMGxf dXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vs c2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2Nv bXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScK K2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1Mg JExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9 JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1 ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5o PgorI2VuZGlmCisjdW5kZWYgbG9nMTBsCisKK2ludAorbWFpbiAoKQoreworCisgIHZvaWQg KCpmKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSlsb2cxMGw7CisKKyAgOworICByZXR1cm4g MDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4g OgorICBnbGliY3h4X2N2X2Z1bmNfbG9nMTBsX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4 X2N2X2Z1bmNfbG9nMTBsX3VzZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5jX2xv ZzEwbF91c2UiID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfbG9nMTBsX3VzZSIg PiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX2xvZzEwbF91c2UiID0geHll czsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9M T0cxMEwgMQorX0FDRU9GCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbG9nbCBkZWNsYXJhdGlvbiIgPiY1 CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbG9nbCBkZWNsYXJhdGlvbi4uLiAiID4mNjsg fQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfbG9nbF91c2UrOn0gZmFsc2U7IHRoZW4gOgorICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKyAgICAgIGFjX2V4dD1jCith Y19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQ UEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0 JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0 ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKwor ICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyog ZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmZGVmIEhBVkVf SUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKyN1bmRlZiBsb2dsCisK K2ludAorbWFpbiAoKQoreworCisgIHZvaWQgKCpmKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lk KSlsb2dsOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5 X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX2xvZ2xfdXNl PXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19sb2dsX3VzZT1ubworZmkKK3JtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4 dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xpYmN4eF9jdl9mdW5jX2xvZ2xfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9j dl9mdW5jX2xvZ2xfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4X2N2X2Z1bmNf bG9nbF91c2UiID0geHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YK KyNkZWZpbmUgSEFWRV9MT0dMIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1vZGZsIGRl Y2xhcmF0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtb2RmbCBkZWNsYXJh dGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfbW9kZmxfdXNlKzp9IGZh bHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisg ICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRD QyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9 JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1Mg Y29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2Nf Y29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGgu aD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlm CisjdW5kZWYgbW9kZmwKKworaW50CittYWluICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQp ID0gKHZvaWQgKCopKHZvaWQpKW1vZGZsOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNF T0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4 eF9jdl9mdW5jX21vZGZsX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNfbW9k ZmxfdXNlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29i amV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNfbW9kZmxfdXNlIiA+JjUK KyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5jX21vZGZsX3VzZSIgPiY2OyB9CisgIGlmIHRl c3QgIngkZ2xpYmN4eF9jdl9mdW5jX21vZGZsX3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0 ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX01PREZMIDEKK19BQ0VPRgor CisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yIHBvd2wgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIHBvd2wgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KK2lmICR7Z2xpYmN4eF9j dl9mdW5jX3Bvd2xfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYKK2Vsc2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBG TEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4k YWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFH UyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19j b21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAg Ki8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1 ZGUgPGllZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgcG93bAorCitpbnQKK21haW4gKCkKK3sK KworICB2b2lkICgqZikodm9pZCkgPSAodm9pZCAoKikodm9pZCkpcG93bDsKKworICA7Cisg IHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5P IjsgdGhlbiA6CisgIGdsaWJjeHhfY3ZfZnVuY19wb3dsX3VzZT15ZXMKKworZWxzZQorICBn bGliY3h4X2N2X2Z1bmNfcG93bF91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVu Y19wb3dsX3VzZSIgPiY1CiskYXNfZWNobyAiJGdsaWJjeHhfY3ZfZnVuY19wb3dsX3VzZSIg PiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX3Bvd2xfdXNlIiA9IHh5ZXM7 IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUE9X TCAxCitfQUNFT0YKKworICBmaQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaW5obCBkZWNsYXJhdGlvbiIgPiY1Cisk YXNfZWNob19uICJjaGVja2luZyBmb3Igc2luaGwgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0K K2lmICR7Z2xpYmN4eF9jdl9mdW5jX3NpbmhsX3VzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKIAotICAgICRhc19lY2hvICIjZGVm aW5lIEhBVkVfQ0VJTEYgMSIgPj5jb25mZGVmcy5oCisgICAgICBhY19leHQ9YworYWNfY3Bw PSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFH UyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19l eGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElC UyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKLSAgICAk YXNfZWNobyAiI2RlZmluZSBIQVZFX0NPU0YgMSIgPj5jb25mZGVmcy5oCisgICAgICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRl ZnMuaC4gICovCiAKLSAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0NPU0hGIDEiID4+Y29u ZmRlZnMuaAorI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGlu Y2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgc2luaGwKIAotICAgICRhc19lY2hv ICIjZGVmaW5lIEhBVkVfRVhQRiAxIiA+PmNvbmZkZWZzLmgKK2ludAorbWFpbiAoKQorewog Ci0gICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GQUJTRiAxIiA+PmNvbmZkZWZzLmgKKyAg dm9pZCAoKmYpKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKXNpbmhsOwogCi0gICAgJGFzX2Vj aG8gIiNkZWZpbmUgSEFWRV9GTE9PUkYgMSIgPj5jb25mZGVmcy5oCisgIDsKKyAgcmV0dXJu IDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVu IDoKKyAgZ2xpYmN4eF9jdl9mdW5jX3NpbmhsX3VzZT15ZXMKIAotICAgICRhc19lY2hvICIj ZGVmaW5lIEhBVkVfRk1PREYgMSIgPj5jb25mZGVmcy5oCitlbHNlCisgIGdsaWJjeHhfY3Zf ZnVuY19zaW5obF91c2U9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVz dC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY19zaW5obF91 c2UiID4mNQorJGFzX2VjaG8gIiRnbGliY3h4X2N2X2Z1bmNfc2luaGxfdXNlIiA+JjY7IH0K KyAgaWYgdGVzdCAieCRnbGliY3h4X2N2X2Z1bmNfc2luaGxfdXNlIiA9IHh5ZXM7IHRoZW4K KyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU0lOSEwgMQor X0FDRU9GCiAKLSAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZSRVhQRiAxIiA+PmNvbmZk ZWZzLmgKKyAgZmkKIAotICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1FSVEYgMSIgPj5j b25mZGVmcy5oCiAKLSAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0hZUE9URiAxIiA+PmNv bmZkZWZzLmgKIAotICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfTERFWFBGIDEiID4+Y29u ZmRlZnMuaAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciBzaW5sIGRlY2xhcmF0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5n IGZvciBzaW5sIGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAke2dsaWJjeHhfY3ZfZnVu Y19zaW5sX3VzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2CitlbHNlCiAKLSAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0xPRzEwRiAxIiA+PmNv bmZkZWZzLmgKIAotICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9HRiAxIiA+PmNvbmZk ZWZzLmgKKyAgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29t cGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1Jwor YWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAk TERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0k YWNfY3ZfY19jb21waWxlcl9nbnUKIAotICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfTU9E RkYgMSIgPj5jb25mZGVmcy5oCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSAgICAkYXNfZWNo byAiI2RlZmluZSBIQVZFX1BPV0YgMSIgPj5jb25mZGVmcy5oCisjaW5jbHVkZSA8bWF0aC5o PgorI2lmZGVmIEhBVkVfSUVFRUZQX0gKKyMgaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYK KyN1bmRlZiBzaW5sCiAKLSAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NJTkYgMSIgPj5j b25mZGVmcy5oCitpbnQKK21haW4gKCkKK3sKIAotICAgICRhc19lY2hvICIjZGVmaW5lIEhB VkVfU0lOSEYgMSIgPj5jb25mZGVmcy5oCisgIHZvaWQgKCpmKSh2b2lkKSA9ICh2b2lkICgq KSh2b2lkKSlzaW5sOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2Zu X2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX3Np bmxfdXNlPXllcworCitlbHNlCisgIGdsaWJjeHhfY3ZfZnVuY19zaW5sX3VzZT1ubworZmkK K3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3Qu JGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkZ2xpYmN4eF9jdl9mdW5jX3NpbmxfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xp YmN4eF9jdl9mdW5jX3NpbmxfdXNlIiA+JjY7IH0KKyAgaWYgdGVzdCAieCRnbGliY3h4X2N2 X2Z1bmNfc2lubF91c2UiID0geHllczsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YKKyNkZWZpbmUgSEFWRV9TSU5MIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNx cnRsIGRlY2xhcmF0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzcXJ0bCBk ZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtnbGliY3h4X2N2X2Z1bmNfc3FydGxfdXNl Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UK KworCisgICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBp bGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2Fj X2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExE RkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFj X2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUg PG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgor I2VuZGlmCisjdW5kZWYgc3FydGwKKworaW50CittYWluICgpCit7CisKKyAgdm9pZCAoKmYp KHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKXNxcnRsOworCisgIDsKKyAgcmV0dXJuIDA7Cit9 CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAg Z2xpYmN4eF9jdl9mdW5jX3NxcnRsX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1 bmNfc3FydGxfdXNlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X2Z1bmNfc3FydGxfdXNl IiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9jdl9mdW5jX3NxcnRsX3VzZSIgPiY2OyB9Cisg IGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX3NxcnRsX3VzZSIgPSB4eWVzOyB0aGVuCisg ICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NRUlRMIDEKK19B Q0VPRgorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yIHRhbmhsIGRlY2xhcmF0aW9uIiA+JjUKKyRhc19lY2hv X24gImNoZWNraW5nIGZvciB0YW5obCBkZWNsYXJhdGlvbi4uLiAiID4mNjsgfQoraWYgJHtn bGliY3h4X2N2X2Z1bmNfdGFuaGxfdXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisgICAgICBhY19leHQ9YworYWNfY3BwPSck Q1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBj b25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVl eHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+ JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25m ZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpZmRlZiBIQVZFX0lFRUVGUF9I CisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisjdW5kZWYgdGFuaGwKKworaW50Citt YWluICgpCit7CisKKyAgdm9pZCAoKmYpKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKXRhbmhs OworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBp bGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xpYmN4eF9jdl9mdW5jX3RhbmhsX3VzZT15ZXMK KworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNfdGFuaGxfdXNlPW5vCitmaQorcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citm aQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRn bGliY3h4X2N2X2Z1bmNfdGFuaGxfdXNlIiA+JjUKKyRhc19lY2hvICIkZ2xpYmN4eF9jdl9m dW5jX3RhbmhsX3VzZSIgPiY2OyB9CisgIGlmIHRlc3QgIngkZ2xpYmN4eF9jdl9mdW5jX3Rh bmhsX3VzZSIgPSB4eWVzOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgor I2RlZmluZSBIQVZFX1RBTkhMIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRhbmwgZGVj bGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRhbmwgZGVjbGFyYXRp b24uLi4gIiA+JjY7IH0KK2lmICR7Z2xpYmN4eF9jdl9mdW5jX3RhbmxfdXNlKzp9IGZhbHNl OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCisgICAg ICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAt YyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRD QyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29u ZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29t cGlsZXJfZ251CisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPG1hdGguaD4K KyNpZmRlZiBIQVZFX0lFRUVGUF9ICisjIGluY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisj dW5kZWYgdGFubAorCitpbnQKK21haW4gKCkKK3sKKworICB2b2lkICgqZikodm9pZCkgPSAo dm9pZCAoKikodm9pZCkpdGFubDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitp ZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsaWJjeHhfY3Zf ZnVuY190YW5sX3VzZT15ZXMKKworZWxzZQorICBnbGliY3h4X2N2X2Z1bmNfdGFubF91c2U9 bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3ZfZnVuY190YW5sX3VzZSIgPiY1CiskYXNfZWNo byAiJGdsaWJjeHhfY3ZfZnVuY190YW5sX3VzZSIgPiY2OyB9CisgIGlmIHRlc3QgIngkZ2xp YmN4eF9jdl9mdW5jX3RhbmxfdXNlIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVm cy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVEFOTCAxCitfQUNFT0YKKworICBmaQogCi0g ICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9UQU5GIDEiID4+Y29uZmRlZnMuaAogCi0gICAg JGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9UQU5IRiAxIiA+PmNvbmZkZWZzLmgKIAogICAgIDs7 CiAKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jcm9zc2NvbmZpZy5tNCBiL2xpYnN0ZGMr Ky12My9jcm9zc2NvbmZpZy5tNAppbmRleCBiMzI2OWNiODhlMC4uNWUxMjQ5ZDBhNTQgMTAw NjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9jcm9zc2NvbmZpZy5tNAorKysgYi9saWJzdGRjKyst djMvY3Jvc3Njb25maWcubTQKQEAgLTEwLDI5ICsxMCwxNiBAQCBjYXNlICIke2hvc3R9IiBp bgogICAgIDs7CiAKICAgYXZyKi0qLSopCi0gICAgQUNfREVGSU5FKEhBVkVfQUNPU0YpCi0g ICAgQUNfREVGSU5FKEhBVkVfQVNJTkYpCi0gICAgQUNfREVGSU5FKEhBVkVfQVRBTjJGKQot ICAgIEFDX0RFRklORShIQVZFX0FUQU5GKQotICAgIEFDX0RFRklORShIQVZFX0NFSUxGKQot ICAgIEFDX0RFRklORShIQVZFX0NPU0YpCi0gICAgQUNfREVGSU5FKEhBVkVfQ09TSEYpCi0g ICAgQUNfREVGSU5FKEhBVkVfRVhQRikKLSAgICBBQ19ERUZJTkUoSEFWRV9GQUJTRikKLSAg ICBBQ19ERUZJTkUoSEFWRV9GTE9PUkYpCi0gICAgQUNfREVGSU5FKEhBVkVfRk1PREYpCi0g ICAgQUNfREVGSU5FKEhBVkVfRlJFWFBGKQotICAgIEFDX0RFRklORShIQVZFX1NRUlRGKQot ICAgIEFDX0RFRklORShIQVZFX0hZUE9URikKLSAgICBBQ19ERUZJTkUoSEFWRV9MREVYUEYp Ci0gICAgQUNfREVGSU5FKEhBVkVfTE9HMTBGKQotICAgIEFDX0RFRklORShIQVZFX0xPR0Yp Ci0gICAgQUNfREVGSU5FKEhBVkVfTU9ERkYpCi0gICAgQUNfREVGSU5FKEhBVkVfUE9XRikK LSAgICBBQ19ERUZJTkUoSEFWRV9TSU5GKQotICAgIEFDX0RFRklORShIQVZFX1NJTkhGKQot ICAgIEFDX0RFRklORShIQVZFX1RBTkYpCi0gICAgQUNfREVGSU5FKEhBVkVfVEFOSEYpCitk bmwgIyBDb3JyZWN0IChub24tbWFjcm8pIHN1cHBvcnQgZm9yIHNvbWUgbWF0aCBmdW5jdGlv bnMgZGVwZW5kcyBvbgorZG5sICMgbmV3bGliIG9yIGF2cmxpYmMgdmVyc2lvbi4gIFNvIHRl c3QgZm9yIHRoZWlyIGF2YWlsYWJpbGl0eQorZG5sICMgcmF0aGVyIHRoYW4gaGFyZGNvZGlu ZyB0aGF0IGluZm9ybWF0aW9uLgorICAgIEdMSUJDWFhfQ0hFQ0tfTUFUSF9ERUNMUyhbCisg ICAgICBhY29zZiBhc2luZiBhdGFuMmYgYXRhbmYgY2VpbGYgY29zaGYgY29zZiBleHBmIGZh YnNmIGZsb29yZiBmbW9kZgorICAgICAgZnJleHBmIGh5cG90ZiBsZGV4cGYgbG9nMTBmIGxv Z2YgbW9kZmYgcG93ZiBzaW5oZiBzaW5mIHNxcnRmCisgICAgICB0YW5oZiB0YW5mCisgICAg ICBhY29zbCBhc2lubCBhdGFuMmwgYXRhbmwgY2VpbGwgY29zaGwgY29zbCBleHBsIGZhYnNs IGZsb29ybCBmbW9kbAorICAgICAgZnJleHBsIGh5cG90bCBsZGV4cGwgbG9nMTBsIGxvZ2wg bW9kZmwgcG93bCBzaW5obCBzaW5sIHNxcnRsCisgICAgICB0YW5obCB0YW5sXSkKICAgICA7 OwogCiAgIG1pcHMqLXNkZS1lbGYqKQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3NyYy9j Kys5OC9tYXRoX3N0dWJzX2Zsb2F0LmNjIGIvbGlic3RkYysrLXYzL3NyYy9jKys5OC9tYXRo X3N0dWJzX2Zsb2F0LmNjCmluZGV4IDRkYmUzYWZhYjhmLi41MzdiZDRhZTY0ZSAxMDA2NDQK LS0tIGEvbGlic3RkYysrLXYzL3NyYy9jKys5OC9tYXRoX3N0dWJzX2Zsb2F0LmNjCisrKyBi L2xpYnN0ZGMrKy12My9zcmMvYysrOTgvbWF0aF9zdHVic19mbG9hdC5jYwpAQCAtMzEsNiAr MzEsNyBAQAogZXh0ZXJuICJDIgogewogI2lmbmRlZiBfR0xJQkNYWF9IQVZFX0ZBQlNGCisj dW5kZWYgZmFic2YKICAgZmxvYXQKICAgZmFic2YoZmxvYXQgeCkKICAgewpAQCAtMzksNiAr NDAsNyBAQCBleHRlcm4gIkMiCiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJQkNYWF9IQVZFX0FD T1NGCisjdW5kZWYgYWNvc2YKICAgZmxvYXQKICAgYWNvc2YoZmxvYXQgeCkKICAgewpAQCAt NDcsNiArNDksNyBAQCBleHRlcm4gIkMiCiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJQkNYWF9I QVZFX0FTSU5GCisjdW5kZWYgYXNpbmYKICAgZmxvYXQKICAgYXNpbmYoZmxvYXQgeCkKICAg ewpAQCAtNTUsNiArNTgsNyBAQCBleHRlcm4gIkMiCiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJ QkNYWF9IQVZFX0FUQU5GCisjdW5kZWYgYXRhbmYKICAgZmxvYXQKICAgYXRhbmYoZmxvYXQg eCkKICAgewpAQCAtNjMsNiArNjcsNyBAQCBleHRlcm4gIkMiCiAjZW5kaWYKIAogI2lmbmRl ZiBfR0xJQkNYWF9IQVZFX0FUQU4yRgorI3VuZGVmIGF0YW4yZgogICBmbG9hdAogICBhdGFu MmYoZmxvYXQgeCwgZmxvYXQgeSkKICAgewpAQCAtNzEsNiArNzYsNyBAQCBleHRlcm4gIkMi CiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJQkNYWF9IQVZFX0NFSUxGCisjdW5kZWYgY2VpbGYK ICAgZmxvYXQKICAgY2VpbGYoZmxvYXQgeCkKICAgewpAQCAtNzksNiArODUsNyBAQCBleHRl cm4gIkMiCiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJQkNYWF9IQVZFX0NPU0YKKyN1bmRlZiBj b3NmCiAgIGZsb2F0CiAgIGNvc2YoZmxvYXQgeCkKICAgewpAQCAtODcsNiArOTQsNyBAQCBl eHRlcm4gIkMiCiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJQkNYWF9IQVZFX0NPU0hGCisjdW5k ZWYgY29zaGYKICAgZmxvYXQKICAgY29zaGYoZmxvYXQgeCkKICAgewpAQCAtOTUsNiArMTAz LDcgQEAgZXh0ZXJuICJDIgogI2VuZGlmCiAKICNpZm5kZWYgX0dMSUJDWFhfSEFWRV9FWFBG CisjdW5kZWYgZXhwZgogICBmbG9hdAogICBleHBmKGZsb2F0IHgpCiAgIHsKQEAgLTEwMyw2 ICsxMTIsNyBAQCBleHRlcm4gIkMiCiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJQkNYWF9IQVZF X0ZMT09SRgorI3VuZGVmIGZsb29yZgogICBmbG9hdAogICBmbG9vcmYoZmxvYXQgeCkKICAg ewpAQCAtMTExLDYgKzEyMSw3IEBAIGV4dGVybiAiQyIKICNlbmRpZgogCiAjaWZuZGVmIF9H TElCQ1hYX0hBVkVfRk1PREYKKyN1bmRlZiBmbW9kZgogICBmbG9hdAogICBmbW9kZihmbG9h dCB4LCBmbG9hdCB5KQogICB7CkBAIC0xMTksNiArMTMwLDcgQEAgZXh0ZXJuICJDIgogI2Vu ZGlmCiAKICNpZm5kZWYgX0dMSUJDWFhfSEFWRV9GUkVYUEYKKyN1bmRlZiBmcmV4cGYKICAg ZmxvYXQKICAgZnJleHBmKGZsb2F0IHgsIGludCAqZXhwKQogICB7CkBAIC0xMjcsNiArMTM5 LDcgQEAgZXh0ZXJuICJDIgogI2VuZGlmCiAKICNpZm5kZWYgX0dMSUJDWFhfSEFWRV9TUVJU RgorI3VuZGVmIHNxcnRmCiAgIGZsb2F0CiAgIHNxcnRmKGZsb2F0IHgpCiAgIHsKQEAgLTEz NSw2ICsxNDgsNyBAQCBleHRlcm4gIkMiCiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJQkNYWF9I QVZFX0hZUE9URgorI3VuZGVmIGh5cG90ZgogICBmbG9hdAogICBoeXBvdGYoZmxvYXQgeCwg ZmxvYXQgeSkKICAgewpAQCAtMTQ3LDYgKzE2MSw3IEBAIGV4dGVybiAiQyIKICNlbmRpZgog CiAjaWZuZGVmIF9HTElCQ1hYX0hBVkVfTERFWFBGCisjdW5kZWYgbGRleHBmCiAgIGZsb2F0 CiAgIGxkZXhwZihmbG9hdCB4LCBpbnQgZXhwKQogICB7CkBAIC0xNTUsNiArMTcwLDcgQEAg ZXh0ZXJuICJDIgogI2VuZGlmCiAKICNpZm5kZWYgX0dMSUJDWFhfSEFWRV9MT0dGCisjdW5k ZWYgbG9nZgogICBmbG9hdAogICBsb2dmKGZsb2F0IHgpCiAgIHsKQEAgLTE2Myw2ICsxNzks NyBAQCBleHRlcm4gIkMiCiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJQkNYWF9IQVZFX0xPRzEw RgorI3VuZGVmIGxvZzEwZgogICBmbG9hdAogICBsb2cxMGYoZmxvYXQgeCkKICAgewpAQCAt MTcxLDYgKzE4OCw3IEBAIGV4dGVybiAiQyIKICNlbmRpZgogCiAjaWZuZGVmIF9HTElCQ1hY X0hBVkVfTU9ERkYKKyN1bmRlZiBtb2RmZgogICBmbG9hdAogICBtb2RmZihmbG9hdCB4LCBm bG9hdCAqaXB0cikKICAgewpAQCAtMTgzLDYgKzIwMSw3IEBAIGV4dGVybiAiQyIKICNlbmRp ZgogCiAjaWZuZGVmIF9HTElCQ1hYX0hBVkVfUE9XRgorI3VuZGVmIHBvd2YKICAgZmxvYXQK ICAgcG93ZihmbG9hdCB4LCBmbG9hdCB5KQogICB7CkBAIC0xOTEsNiArMjEwLDcgQEAgZXh0 ZXJuICJDIgogI2VuZGlmCiAKICNpZm5kZWYgX0dMSUJDWFhfSEFWRV9TSU5GCisjdW5kZWYg c2luZgogICBmbG9hdAogICBzaW5mKGZsb2F0IHgpCiAgIHsKQEAgLTE5OSw2ICsyMTksNyBA QCBleHRlcm4gIkMiCiAjZW5kaWYKIAogI2lmbmRlZiBfR0xJQkNYWF9IQVZFX1NJTkhGCisj dW5kZWYgc2luaGYKICAgZmxvYXQKICAgc2luaGYoZmxvYXQgeCkKICAgewpAQCAtMjA3LDYg KzIyOCw3IEBAIGV4dGVybiAiQyIKICNlbmRpZgogCiAjaWZuZGVmIF9HTElCQ1hYX0hBVkVf VEFORgorI3VuZGVmIHRhbmYKICAgZmxvYXQKICAgdGFuZihmbG9hdCB4KQogICB7CkBAIC0y MTUsNiArMjM3LDcgQEAgZXh0ZXJuICJDIgogI2VuZGlmCiAKICNpZm5kZWYgX0dMSUJDWFhf SEFWRV9UQU5IRgorI3VuZGVmIHRhbmhmCiAgIGZsb2F0CiAgIHRhbmhmKGZsb2F0IHgpCiAg IHsK --------------ZnAeZFl23leLUSOpvvy2fUNr--