From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-06.nifty.com (conssluserg-06.nifty.com [210.131.2.91]) by sourceware.org (Postfix) with ESMTPS id 4CD31385840E for ; Mon, 29 Nov 2021 14:24:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4CD31385840E Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp Received: from Express5800-S70 (z221123.dynamic.ppp.asahi-net.or.jp [110.4.221.123]) (authenticated) by conssluserg-06.nifty.com with ESMTP id 1ATEOa4B001799 for ; Mon, 29 Nov 2021 23:24:36 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-06.nifty.com 1ATEOa4B001799 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1638195876; bh=+Ms1xLkx84y7pZmbBqJxyBjxEczbO7tSJnhuLMmD6tY=; h=Date:From:To:Subject:In-Reply-To:References:From; b=GEkUDZIzpPDuYC+oCT+MVzPUCNUwncU8CN5bkTKT9VLHY0YwgIufra4Is0TZ5Ufny 6flbvRHr/YqR1v1t1B5PI/nAJtF5U3zJ4tr9MmVshSgz8QrQl9idZ1tq0/x0RVuJTf GJB9CWTzQCKq1OXD0N2reZqDxOL4OQG7AqmmMMAnlE01if+9U47pNhu/AuePpnJaOJ 1Xv5ixcRmTvTKJKQIEijr7K6+qajADVvekaDiKSS8dWTXa5qM3AHMFf2A8PQ1VrR9U KbHzXDJ1CEypujq6RpUw7XAxPd7Wf/vsxM2LQYGPmwkxRfG7X5zAHtVNrrzoPmdnsG rjEvSPIh+sS+g== X-Nifty-SrcIP: [110.4.221.123] Date: Mon, 29 Nov 2021 23:24:39 +0900 From: Takashi Yano To: newlib@sourceware.org Subject: Re: gcc 11.1.0: printf("%.43f\n", 0x1.52f8a8e32e982p-140): printed value is incorrectly rounded Message-Id: <20211129232439.ea273a79602b671f8b76383c@nifty.ne.jp> In-Reply-To: <20211129195646.c4f66449ff164a0c6bad4d2e@nifty.ne.jp> References: <20211128164311.c405014bdf153aec8de46c6e@nifty.ne.jp> <20211128213839.90567fce0606267eb0362cc3@nifty.ne.jp> <20211128221646.4c6f751029f31af953565702@nifty.ne.jp> <20211129195646.c4f66449ff164a0c6bad4d2e@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Mon__29_Nov_2021_23_24_39_+0900_8ZGvh8A+7HA_RadX" X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Nov 2021 14:24:53 -0000 This is a multi-part message in MIME format. --Multipart=_Mon__29_Nov_2021_23_24_39_+0900_8ZGvh8A+7HA_RadX Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Mon, 29 Nov 2021 19:56:46 +0900 Takashi Yano wrote: > On Sun, 28 Nov 2021 22:16:46 +0900 > Takashi Yano wrote: > > On Sun, 28 Nov 2021 21:38:39 +0900 > > Takashi Yano wrote: > > > On Sun, 28 Nov 2021 16:43:11 +0900 > > > Takashi Yano wrote: > > > > On Thu, 4 Nov 2021 13:24:42 +0100 > > > > Corinna Vinschen wrote: > > > > > However, a much better fix would be to switch to gdtoa, as the BSDs and > > > > > Mingw64 do. > > > > > > > > I have tried to import gdtoa into newlib from OpenBSD. > > > > > > > > gdtoa seems to use malloc much, so it may not work in some of > > > > platforms due to insufficient heap. Therefore, new ldtoa.c tries > > > > gdtoa first and fallbacks to legacy ldtoa if gdtoa fails. > > > > > > > > To import gdtoa to newlib, I did: > > > > 1) Create "machine/ieee.h" which conditionally defines ieee_ext > > > > structure and EXT_TO_ARRAY32() macro depend on architecture. > > > > 2) Create arith.h which reflects endian of architecture. > > > > 3) Merge gdtoa.h with OpenBSD's gdtoa.h. __BEGIN_HIDDEN_DECLS, > > > > __END_HIDDEN_DECLS, PROTO_NORMAL() and DEF_STRONG() are > > > > defined as dummy in this header. > > > > 4) Replace malloc()/free() with _malloc_r()/_free_r(). > > > > 5) Implement ACQUIRE_DTOA_LOCK() and FREE_DTOA_LOCK() macros > > > > using "sys/lock.h" for multi-threading environment. > > > > 6) Remove inclusion of "gd_qnan.h" which is not used. > > > > > > > > Please see attached patch for more details. > > > > > > > > I confirmed this works nicely with cygwin. Moreover, it is much > > > > faster than legacy ldtoa (more than 4 times faster). > > > > > > > > However, this may break some other supported platforms. > > > > > > > > Could anyone please check this? > > > > > > Ah, in "machine/ieee.h", struct ieee_ext definition for > > > LDBL_MANT_DIG==64 and __IEEE_BIG_ENDIAN case, is obviously > > > wrong. > > > > Fixed. > > Bit order for ARMEL without __VFP_FP__ is fixed. Add support for ARM FPA10 math coprocessor extended precision format. -- Takashi Yano --Multipart=_Mon__29_Nov_2021_23_24_39_+0900_8ZGvh8A+7HA_RadX Content-Type: application/octet-stream; name="0001-ldtoa-Import-gdtoa-from-OpenBSD.patch" Content-Disposition: attachment; filename="0001-ldtoa-Import-gdtoa-from-OpenBSD.patch" Content-Transfer-Encoding: base64 RnJvbSA5MTkwMjlmNWRmN2VlNDZjZGYzMjg0NTA1MzU0MGE4MTJkNjAzMGVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogTW9uLCAyOSBOb3YgMjAyMSAyMTozNjo0NyArMDkwMApTdWJqZWN0OiBbUEFUQ0hd IGxkdG9hOiBJbXBvcnQgZ2R0b2EgZnJvbSBPcGVuQlNELgoKLS0tCiBuZXdsaWIvbGliYy9pbmNs dWRlL21hY2hpbmUvaWVlZS5oIHwgMTI3ICsrKysKIG5ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmls ZS5hbSAgICAgfCAgMTQgKy0KIG5ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5pbiAgICAgfCAg ODIgKystCiBuZXdsaWIvbGliYy9zdGRsaWIvYXJpdGguaCAgICAgICAgIHwgICA5ICsKIG5ld2xp Yi9saWJjL3N0ZGxpYi9nZHRvYS1kbWlzYy5jICAgfCAyMjUgKysrKysrKwogbmV3bGliL2xpYmMv c3RkbGliL2dkdG9hLWR0b2EuYyAgICB8IDgzOSArKysrKysrKysrKysrKysrKysrKysrKysrKwog bmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdkdG9hLmMgICB8IDgzMCArKysrKysrKysrKysrKysr KysrKysrKysrKwogbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdtaXNjLmMgICB8ICA4NiArKysK IG5ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1sZHRvYS5jICAgfCAxMjQgKysrKwogbmV3bGliL2xp YmMvc3RkbGliL2dkdG9hLW1pc2MuYyAgICB8IDkxMiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLmggICAgICAgICB8IDEzMiArKysrLQogbmV3 bGliL2xpYmMvc3RkbGliL2dkdG9haW1wLmggICAgICB8IDY3MiArKysrKysrKysrKysrKysrKysr KysKIG5ld2xpYi9saWJjL3N0ZGxpYi9sZHRvYS5jICAgICAgICAgfCAgIDcgKwogMTMgZmlsZXMg Y2hhbmdlZCwgNDAyNSBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBuZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgbmV3bGliL2xpYmMvc3RkbGliL2FyaXRoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXds aWIvbGliYy9zdGRsaWIvZ2R0b2EtZG1pc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG5ld2xpYi9s aWJjL3N0ZGxpYi9nZHRvYS1kdG9hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXdsaWIvbGliYy9z dGRsaWIvZ2R0b2EtZ2R0b2EuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG5ld2xpYi9saWJjL3N0ZGxp Yi9nZHRvYS1nbWlzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbmV3bGliL2xpYmMvc3RkbGliL2dk dG9hLWxkdG9hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2Et bWlzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbmV3bGliL2xpYmMvc3RkbGliL2dkdG9haW1wLmgK CmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbmV3bGli L2xpYmMvaW5jbHVkZS9tYWNoaW5lL2llZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAuLjc5ZDcyYTY0NQotLS0gL2Rldi9udWxsCisrKyBiL25ld2xpYi9saWJjL2luY2x1 ZGUvbWFjaGluZS9pZWVlLmgKQEAgLTAsMCArMSwxMjcgQEAKKyNpZm5kZWYgX01BQ0hJTkVfSUVF RV9IXworI2RlZmluZSBfTUFDSElORV9JRUVFX0hfCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj aW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pZWVlZnAuaD4KKyNpbmNs dWRlIDxmbG9hdC5oPgorCisjaWYgTERCTF9NQU5UX0RJRyA9PSAyNAorI2RlZmluZSBFWFRfSU1Q TElDSVRfTkJJVAorI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7ICAgICAgXAorICAg IChhKVswXSA9IChwKS0+ZXh0X2ZyYWM7ICBcCit9IHdoaWxlICgwKQorI2lmZGVmIF9fSUVFRV9M SVRUTEVfRU5ESUFOCitzdHJ1Y3QgaWVlZV9leHQgeworICAgIHVpbnQzMl90ICAgZXh0X2ZyYWM6 MjM7CisgICAgdWludDMyX3QgICBleHRfZXhwOjg7CisgICAgdWludDMyX3QgICBleHRfc2lnbjox OworfTsKKyNlbmRpZgorI2lmZGVmIF9fSUVFRV9CSUdfRU5ESUFOCitzdHJ1Y3QgaWVlZV9leHQg eworI2lmbmRlZiBfX19JRUVFX0JZVEVTX0xJVFRMRV9FTkRJQU4KKyAgICB1aW50MzJfdCAgIGV4 dF9zaWduOjE7CisgICAgdWludDMyX3QgICBleHRfZXhwOjg7CisgICAgdWludDMyX3QgICBleHRf ZnJhYzoyMzsKKyNlbHNlIC8qIEFSTUVMIHdpdGhvdXQgX19WRlBfRlBfXyAqLworICAgIHVpbnQz Ml90ICAgZXh0X2ZyYWM6MjM7CisgICAgdWludDMyX3QgICBleHRfZXhwOjg7CisgICAgdWludDMy X3QgICBleHRfc2lnbjoxOworI2VuZGlmCit9OworI2VuZGlmCisjZWxpZiBMREJMX01BTlRfRElH ID09IDUzCisjZGVmaW5lIEVYVF9JTVBMSUNJVF9OQklUCisjZGVmaW5lIEVYVF9UT19BUlJBWTMy KHAsIGEpIGRvIHsgICAgICAgXAorICAgIChhKVswXSA9IChwKS0+ZXh0X2ZyYWNsOyAgXAorICAg IChhKVsxXSA9IChwKS0+ZXh0X2ZyYWNoOyAgXAorfSB3aGlsZSAoMCkKKyNpZmRlZiBfX0lFRUVf TElUVExFX0VORElBTgorc3RydWN0IGllZWVfZXh0IHsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFj bDsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjaDoyMDsKKyAgICB1aW50MzJfdCAgIGV4dF9leHA6 MTE7CisgICAgdWludDMyX3QgICBleHRfc2lnbjoxOworfTsKKyNlbmRpZgorI2lmZGVmIF9fSUVF RV9CSUdfRU5ESUFOCitzdHJ1Y3QgaWVlZV9leHQgeworI2lmbmRlZiBfX19JRUVFX0JZVEVTX0xJ VFRMRV9FTkRJQU4KKyAgICB1aW50MzJfdCAgIGV4dF9zaWduOjE7CisgICAgdWludDMyX3QgICBl eHRfZXhwOjExOworICAgIHVpbnQzMl90ICAgZXh0X2ZyYWNoOjIwOworI2Vsc2UgLyogQVJNRUwg d2l0aG91dCBfX1ZGUF9GUF9fICovCisgICAgdWludDMyX3QgICBleHRfZnJhY2g6MjA7CisgICAg dWludDMyX3QgICBleHRfZXhwOjExOworICAgIHVpbnQzMl90ICAgZXh0X3NpZ246MTsKKyNlbmRp ZgorICAgIHVpbnQzMl90ICAgZXh0X2ZyYWNsOworfTsKKyNlbmRpZgorI2VsaWYgTERCTF9NQU5U X0RJRyA9PSA2NAorI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7ICAgICAgIFwKKyAg ICAoYSlbMF0gPSAocCktPmV4dF9mcmFjbDsgIFwKKyAgICAoYSlbMV0gPSAocCktPmV4dF9mcmFj aDsgIFwKK30gd2hpbGUgKDApCisjaWZkZWYgX19JRUVFX0xJVFRMRV9FTkRJQU4gLyogZm9yIElu dGVsIENQVSAqLworc3RydWN0IGllZWVfZXh0IHsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjbDsK KyAgICB1aW50MzJfdCAgIGV4dF9mcmFjaDsKKyAgICB1aW50MzJfdCAgIGV4dF9leHA6MTU7Cisg ICAgdWludDMyX3QgICBleHRfc2lnbjoxOworICAgIHVpbnQzMl90ICAgZXh0X3BhZGw6MTY7Cisg ICAgdWludDMyX3QgICBleHRfcGFkaDsKK307CisjZW5kaWYKKyNpZmRlZiBfX0lFRUVfQklHX0VO RElBTgorc3RydWN0IGllZWVfZXh0IHsKKyNpZm5kZWYgX19fSUVFRV9CWVRFU19MSVRUTEVfRU5E SUFOIC8qIGZvciBtNjhrICovCisgICAgdWludDMyX3QgICBleHRfc2lnbjoxOworICAgIHVpbnQz Ml90ICAgZXh0X2V4cDoxNTsKKyAgICB1aW50MzJfdCAgIGV4dF9wYWQ6MTY7CisjZWxzZSAvKiBB Uk0gRlBBMTAgbWF0aCBjb3Byb2Nlc3NvciAqLworICAgIHVpbnQzMl90ICAgZXh0X2V4cDoxNTsK KyAgICB1aW50MzJfdCAgIGV4dF9wYWQ6MTY7CisgICAgdWludDMyX3QgICBleHRfc2lnbjoxOwor I2VuZGlmCisgICAgdWludDMyX3QgICBleHRfZnJhY2g7CisgICAgdWludDMyX3QgICBleHRfZnJh Y2w7Cit9OworI2VuZGlmCisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworI2RlZmluZSBFWFRf SU1QTElDSVRfTkJJVAorI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7ICAgICAgICBc CisgICAgKGEpWzBdID0gKHApLT5leHRfZnJhY2w7ICAgXAorICAgIChhKVsxXSA9IChwKS0+ZXh0 X2ZyYWNsbTsgIFwKKyAgICAoYSlbMl0gPSAocCktPmV4dF9mcmFjaG07ICBcCisgICAgKGEpWzNd ID0gKHApLT5leHRfZnJhY2g7ICAgXAorfSB3aGlsZSAoMCkKKyNpZmRlZiBfX0lFRUVfTElUVExF X0VORElBTgorc3RydWN0IGllZWVfZXh0IHsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjbDsKKyAg ICB1aW50MzJfdCAgIGV4dF9mcmFjbG07CisgICAgdWludDMyX3QgICBleHRfZnJhY2htOworICAg IHVpbnQzMl90ICAgZXh0X2ZyYWNoOjE2OworICAgIHVpbnQzMl90ICAgZXh0X2V4cDoxNTsKKyAg ICB1aW50MzJfdCAgIGV4dF9zaWduOjE7Cit9OworI2VuZGlmCisjaWZkZWYgX19JRUVFX0JJR19F TkRJQU4KK3N0cnVjdCBpZWVlX2V4dCB7CisjaWZuZGVmIF9fX0lFRUVfQllURVNfTElUVExFX0VO RElBTgorICAgIHVpbnQzMl90ICAgZXh0X3NpZ246MTsKKyAgICB1aW50MzJfdCAgIGV4dF9leHA6 MTU7CisgICAgdWludDMyX3QgICBleHRfZnJhY2g6MTY7CisjZWxzZSAvKiBBUk1FTCB3aXRob3V0 IF9fVkZQX0ZQX18gKi8KKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjaDoxNjsKKyAgICB1aW50MzJf dCAgIGV4dF9leHA6MTU7CisgICAgdWludDMyX3QgICBleHRfc2lnbjoxOworI2VuZGlmCisgICAg dWludDMyX3QgICBleHRfZnJhY2htOworICAgIHVpbnQzMl90ICAgZXh0X2ZyYWNsbTsKKyAgICB1 aW50MzJfdCAgIGV4dF9mcmFjbDsKK307CisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX01B Q0hJTkVfSUVFRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL01ha2VmaWxl LmFtIGIvbmV3bGliL2xpYmMvc3RkbGliL01ha2VmaWxlLmFtCmluZGV4IDM1N2UzN2JlYi4uMDRi MjJkNDc3IDEwMDY0NAotLS0gYS9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZpbGUuYW0KKysrIGIv bmV3bGliL2xpYmMvc3RkbGliL01ha2VmaWxlLmFtCkBAIC0zOCw2ICszOCwxMiBAQCBHRU5FUkFM X1NPVVJDRVMgPSBcCiAJbGFicy5jIAkJXAogCWxkaXYuYyAgCVwKIAlsZHRvYS5jCQlcCisJZ2R0 b2EtbGR0b2EuYwlcCisJZ2R0b2EtZ2R0b2EuYwlcCisJZ2R0b2EtZHRvYS5jCVwKKwlnZHRvYS1t aXNjLmMJXAorCWdkdG9hLWRtaXNjLmMJXAorCWdkdG9hLWdtaXNjLmMJXAogCW1hbGxvYy5jICAJ XAogCW1ibGVuLmMJCVwKIAltYmxlbl9yLmMJXApAQCAtMzExLDcgKzMxNywxMyBAQCBDSEVXT1VU X0ZJTEVTPSBcCiBDSEFQVEVSUyA9IHN0ZGxpYi50ZXgKIAogJChscGZ4KWR0b2EuJChvZXh0KTog ZHRvYS5jIG1wcmVjLmgKLSQobHBmeClsZHRvYS4kKG9leHQpOiBsZHRvYS5jIG1wcmVjLmgKKyQo bHBmeClsZHRvYS4kKG9leHQpOiBsZHRvYS5jIG1wcmVjLmggZ2R0b2EuaAorJChscGZ4KWdkdG9h LWxkdG9hLiQob2V4dCk6IGdkdG9hLWxkdG9hLmMgZ2R0b2FpbXAuaCBnZHRvYS5oIGFyaXRoLmgK KyQobHBmeClnZHRvYS1nZHRvYS4kKG9leHQpOiBnZHRvYS1nZHRvYS5jIGdkdG9haW1wLmggZ2R0 b2EuaCBhcml0aC5oCiskKGxwZngpZ2R0b2EtZHRvYS4kKG9leHQpOiBnZHRvYS1kdG9hLmMgZ2R0 b2FpbXAuaCBnZHRvYS5oIGFyaXRoLmgKKyQobHBmeClnZHRvYS1taXNjLiQob2V4dCk6IGdkdG9h LW1pc2MuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAorJChscGZ4KWdkdG9hLWRtaXNjLiQo b2V4dCk6IGdkdG9hLWRtaXNjLmMgZ2R0b2FpbXAuaCBnZHRvYS5oIGFyaXRoLmgKKyQobHBmeCln ZHRvYS1nbWlzYy4kKG9leHQpOiBnZHRvYS1nbWlzYy5jIGdkdG9haW1wLmggZ2R0b2EuaCBhcml0 aC5oCiAkKGxwZngpZWN2dGJ1Zi4kKG9leHQpOiBlY3Z0YnVmLmMgbXByZWMuaAogJChscGZ4KW1i dG93Y19yLiQob2V4dCk6IG1idG93Y19yLmMgbWJjdHlwZS5oCiAkKGxwZngpbXByZWMuJChvZXh0 KTogbXByZWMuYyBtcHJlYy5oCmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZp bGUuaW4gYi9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZpbGUuaW4KaW5kZXggYTgxMmI2YTk1Li40 ZTg5MWNlZDkgMTAwNjQ0Ci0tLSBhL25ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5pbgorKysg Yi9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZpbGUuaW4KQEAgLTEwMSw3ICsxMDEsMTAgQEAgYW1f X29iamVjdHNfMiA9IGxpYl9hLV9fYWRqdXN0LiQoT0JKRVhUKSBsaWJfYS1fX2F0ZXhpdC4kKE9C SkVYVCkgXAogCWxpYl9hLWdldGVudl9yLiQoT0JKRVhUKSBsaWJfYS1pbWF4YWJzLiQoT0JKRVhU KSBcCiAJbGliX2EtaW1heGRpdi4kKE9CSkVYVCkgbGliX2EtaXRvYS4kKE9CSkVYVCkgXAogCWxp Yl9hLWxhYnMuJChPQkpFWFQpIGxpYl9hLWxkaXYuJChPQkpFWFQpIFwKLQlsaWJfYS1sZHRvYS4k KE9CSkVYVCkgbGliX2EtbWFsbG9jLiQoT0JKRVhUKSBcCisJbGliX2EtbGR0b2EuJChPQkpFWFQp IGxpYl9hLWdkdG9hLWxkdG9hLiQoT0JKRVhUKSBcCisJbGliX2EtZ2R0b2EtZ2R0b2EuJChPQkpF WFQpIGxpYl9hLWdkdG9hLWR0b2EuJChPQkpFWFQpIFwKKwlsaWJfYS1nZHRvYS1taXNjLiQoT0JK RVhUKSBsaWJfYS1nZHRvYS1kbWlzYy4kKE9CSkVYVCkgXAorCWxpYl9hLWdkdG9hLWdtaXNjLiQo T0JKRVhUKSBsaWJfYS1tYWxsb2MuJChPQkpFWFQpIFwKIAlsaWJfYS1tYmxlbi4kKE9CSkVYVCkg bGliX2EtbWJsZW5fci4kKE9CSkVYVCkgXAogCWxpYl9hLW1ic3Rvd2NzLiQoT0JKRVhUKSBsaWJf YS1tYnN0b3djc19yLiQoT0JKRVhUKSBcCiAJbGliX2EtbWJ0b3djLiQoT0JKRVhUKSBsaWJfYS1t YnRvd2Nfci4kKE9CSkVYVCkgXApAQCAtMTY1LDE0ICsxNjgsMTUgQEAgYW1fX29iamVjdHNfOSA9 IF9fYWRqdXN0LmxvIF9fYXRleGl0LmxvIF9fY2FsbF9hdGV4aXQubG8gX19leHAxMC5sbyBcCiAJ ZGl2LmxvIGR0b2EubG8gZHRvYXN0dWIubG8gZW52aXJvbi5sbyBlbnZsb2NrLmxvIGVwcmludGYu bG8gXAogCWV4aXQubG8gZ2R0b2EtZ2V0aGV4LmxvIGdkdG9hLWhleG5hbi5sbyBnZXRlbnYubG8g Z2V0ZW52X3IubG8gXAogCWltYXhhYnMubG8gaW1heGRpdi5sbyBpdG9hLmxvIGxhYnMubG8gbGRp di5sbyBsZHRvYS5sbyBcCi0JbWFsbG9jLmxvIG1ibGVuLmxvIG1ibGVuX3IubG8gbWJzdG93Y3Mu bG8gbWJzdG93Y3Nfci5sbyBcCi0JbWJ0b3djLmxvIG1idG93Y19yLmxvIG1sb2NrLmxvIG1wcmVj LmxvIG1zdGF0cy5sbyBcCi0Jb25fZXhpdF9hcmdzLmxvIHF1aWNrX2V4aXQubG8gcmFuZC5sbyBy YW5kX3IubG8gcmFuZG9tLmxvIFwKLQlyZWFsbG9jLmxvIHJlYWxsb2NhcnJheS5sbyByZWFsbG9j Zi5sbyBzYl9jaGFyc2V0cy5sbyBcCi0Jc3RydG9kLmxvIHN0cnRvaW1heC5sbyBzdHJ0b2wubG8g c3RydG91bC5sbyBzdHJ0b3VtYXgubG8gXAotCXV0b2EubG8gd2NzdG9kLmxvIHdjc3RvaW1heC5s byB3Y3N0b2wubG8gd2NzdG91bC5sbyBcCi0Jd2NzdG91bWF4LmxvIHdjc3RvbWJzLmxvIHdjc3Rv bWJzX3IubG8gd2N0b21iLmxvIHdjdG9tYl9yLmxvIFwKLQkkKGFtX19vYmplY3RzXzgpCisJZ2R0 b2EtbGR0b2EubG8gZ2R0b2EtZ2R0b2EubG8gZ2R0b2EtZHRvYS5sbyBnZHRvYS1taXNjLmxvIFwK KwlnZHRvYS1kbWlzYy5sbyBnZHRvYS1nbWlzYy5sbyBtYWxsb2MubG8gbWJsZW4ubG8gbWJsZW5f ci5sbyBcCisJbWJzdG93Y3MubG8gbWJzdG93Y3Nfci5sbyBtYnRvd2MubG8gbWJ0b3djX3IubG8g bWxvY2subG8gXAorCW1wcmVjLmxvIG1zdGF0cy5sbyBvbl9leGl0X2FyZ3MubG8gcXVpY2tfZXhp dC5sbyByYW5kLmxvIFwKKwlyYW5kX3IubG8gcmFuZG9tLmxvIHJlYWxsb2MubG8gcmVhbGxvY2Fy cmF5LmxvIHJlYWxsb2NmLmxvIFwKKwlzYl9jaGFyc2V0cy5sbyBzdHJ0b2QubG8gc3RydG9pbWF4 LmxvIHN0cnRvbC5sbyBzdHJ0b3VsLmxvIFwKKwlzdHJ0b3VtYXgubG8gdXRvYS5sbyB3Y3N0b2Qu bG8gd2NzdG9pbWF4LmxvIHdjc3RvbC5sbyBcCisJd2NzdG91bC5sbyB3Y3N0b3VtYXgubG8gd2Nz dG9tYnMubG8gd2NzdG9tYnNfci5sbyB3Y3RvbWIubG8gXAorCXdjdG9tYl9yLmxvICQoYW1fX29i amVjdHNfOCkKIGFtX19vYmplY3RzXzEwID0gYXJjNHJhbmRvbS5sbyBhcmM0cmFuZG9tX3VuaWZv cm0ubG8gY3hhX2F0ZXhpdC5sbyBcCiAJY3hhX2ZpbmFsaXplLmxvIGRyYW5kNDgubG8gZWN2dGJ1 Zi5sbyBlZmdjdnQubG8gZXJhbmQ0OC5sbyBcCiAJanJhbmQ0OC5sbyBsY29uZzQ4LmxvIGxyYW5k NDgubG8gbXJhbmQ0OC5sbyBtc2l6ZS5sbyBtdHJpbS5sbyBcCkBAIC0zNTQsNiArMzU4LDcgQEAg cGRmZGlyID0gQHBkZmRpckAKIHByZWZpeCA9IEBwcmVmaXhACiBwcm9ncmFtX3RyYW5zZm9ybV9u YW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACiBwc2RpciA9IEBwc2RpckAKK3J1bnN0YXRl ZGlyID0gQHJ1bnN0YXRlZGlyQAogc2JpbmRpciA9IEBzYmluZGlyQAogc2hhcmVkX21hY2hpbmVf ZGlyID0gQHNoYXJlZF9tYWNoaW5lX2RpckAKIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRl ZGlyQApAQCAtMzcyLDEzICszNzcsMTQgQEAgR0VORVJBTF9TT1VSQ0VTID0gX19hZGp1c3QuYyBf X2F0ZXhpdC5jIF9fY2FsbF9hdGV4aXQuYyBfX2V4cDEwLmMgXAogCWF0ZXhpdC5jIGF0b2YuYyBh dG9mZi5jIGF0b2kuYyBhdG9sLmMgY2FsbG9jLmMgZGl2LmMgZHRvYS5jIFwKIAlkdG9hc3R1Yi5j IGVudmlyb24uYyBlbnZsb2NrLmMgZXByaW50Zi5jIGV4aXQuYyBnZHRvYS1nZXRoZXguYyBcCiAJ Z2R0b2EtaGV4bmFuLmMgZ2V0ZW52LmMgZ2V0ZW52X3IuYyBpbWF4YWJzLmMgaW1heGRpdi5jIGl0 b2EuYyBcCi0JbGFicy5jIGxkaXYuYyBsZHRvYS5jIG1hbGxvYy5jIG1ibGVuLmMgbWJsZW5fci5j IG1ic3Rvd2NzLmMgXAotCW1ic3Rvd2NzX3IuYyBtYnRvd2MuYyBtYnRvd2Nfci5jIG1sb2NrLmMg bXByZWMuYyBtc3RhdHMuYyBcCi0Jb25fZXhpdF9hcmdzLmMgcXVpY2tfZXhpdC5jIHJhbmQuYyBy YW5kX3IuYyByYW5kb20uYyByZWFsbG9jLmMgXAotCXJlYWxsb2NhcnJheS5jIHJlYWxsb2NmLmMg c2JfY2hhcnNldHMuYyBzdHJ0b2QuYyBzdHJ0b2ltYXguYyBcCi0Jc3RydG9sLmMgc3RydG91bC5j IHN0cnRvdW1heC5jIHV0b2EuYyB3Y3N0b2QuYyB3Y3N0b2ltYXguYyBcCi0Jd2NzdG9sLmMgd2Nz dG91bC5jIHdjc3RvdW1heC5jIHdjc3RvbWJzLmMgd2NzdG9tYnNfci5jIFwKLQl3Y3RvbWIuYyB3 Y3RvbWJfci5jICQoYW1fX2FwcGVuZF8xKQorCWxhYnMuYyBsZGl2LmMgbGR0b2EuYyBnZHRvYS1s ZHRvYS5jIGdkdG9hLWdkdG9hLmMgZ2R0b2EtZHRvYS5jIFwKKwlnZHRvYS1taXNjLmMgZ2R0b2Et ZG1pc2MuYyBnZHRvYS1nbWlzYy5jIG1hbGxvYy5jIG1ibGVuLmMgXAorCW1ibGVuX3IuYyBtYnN0 b3djcy5jIG1ic3Rvd2NzX3IuYyBtYnRvd2MuYyBtYnRvd2Nfci5jIG1sb2NrLmMgXAorCW1wcmVj LmMgbXN0YXRzLmMgb25fZXhpdF9hcmdzLmMgcXVpY2tfZXhpdC5jIHJhbmQuYyByYW5kX3IuYyBc CisJcmFuZG9tLmMgcmVhbGxvYy5jIHJlYWxsb2NhcnJheS5jIHJlYWxsb2NmLmMgc2JfY2hhcnNl dHMuYyBcCisJc3RydG9kLmMgc3RydG9pbWF4LmMgc3RydG9sLmMgc3RydG91bC5jIHN0cnRvdW1h eC5jIHV0b2EuYyBcCisJd2NzdG9kLmMgd2NzdG9pbWF4LmMgd2NzdG9sLmMgd2NzdG91bC5jIHdj c3RvdW1heC5jIHdjc3RvbWJzLmMgXAorCXdjc3RvbWJzX3IuYyB3Y3RvbWIuYyB3Y3RvbWJfci5j ICQoYW1fX2FwcGVuZF8xKQogQE5FV0xJQl9OQU5PX01BTExPQ19GQUxTRUBNQUxJR05SID0gbWFs aWducgogQE5FV0xJQl9OQU5PX01BTExPQ19UUlVFQE1BTElHTlIgPSBuYW5vLW1hbGlnbnIKIEBO RVdMSUJfTkFOT19NQUxMT0NfRkFMU0VATUFMTE9QVFIgPSBtYWxsb3B0cgpAQCAtODI3LDYgKzgz Myw0MiBAQCBsaWJfYS1sZHRvYS5vOiBsZHRvYS5jCiBsaWJfYS1sZHRvYS5vYmo6IGxkdG9hLmMK IAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBG TEFHUykgJChDUFBGTEFHUykgJChsaWJfYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1s ZHRvYS5vYmogYGlmIHRlc3QgLWYgJ2xkdG9hLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGR0b2Eu Yyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGR0b2EuYyc7IGZpYAogCitsaWJfYS1n ZHRvYS1sZHRvYS5vOiBnZHRvYS1sZHRvYS5jCisJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5D TFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliX2FfQ0ZM QUdTKSAkKENGTEFHUykgLWMgLW8gbGliX2EtZ2R0b2EtbGR0b2EubyBgdGVzdCAtZiAnZ2R0b2Et bGR0b2EuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2R0b2EtbGR0b2EuYworCitsaWJfYS1nZHRv YS1sZHRvYS5vYmo6IGdkdG9hLWxkdG9hLmMKKwkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNM VURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJfYV9DRkxB R1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRvYS1sZHRvYS5vYmogYGlmIHRlc3QgLWYgJ2dk dG9hLWxkdG9hLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2R0b2EtbGR0b2EuYyc7IGVsc2UgJChD WUdQQVRIX1cpICckKHNyY2RpcikvZ2R0b2EtbGR0b2EuYyc7IGZpYAorCitsaWJfYS1nZHRvYS1n ZHRvYS5vOiBnZHRvYS1nZHRvYS5jCisJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMp ICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliX2FfQ0ZMQUdTKSAk KENGTEFHUykgLWMgLW8gbGliX2EtZ2R0b2EtZ2R0b2EubyBgdGVzdCAtZiAnZ2R0b2EtZ2R0b2Eu YycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2R0b2EtZ2R0b2EuYworCitsaWJfYS1nZHRvYS1nZHRv YS5vYmo6IGdkdG9hLWdkdG9hLmMKKwkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykg JChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJfYV9DRkxBR1MpICQo Q0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRvYS1nZHRvYS5vYmogYGlmIHRlc3QgLWYgJ2dkdG9hLWdk dG9hLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2R0b2EtZ2R0b2EuYyc7IGVsc2UgJChDWUdQQVRI X1cpICckKHNyY2RpcikvZ2R0b2EtZ2R0b2EuYyc7IGZpYAorCitsaWJfYS1nZHRvYS1kdG9hLm86 IGdkdG9hLWR0b2EuYworCSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xV REVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1Mp IC1jIC1vIGxpYl9hLWdkdG9hLWR0b2EubyBgdGVzdCAtZiAnZ2R0b2EtZHRvYS5jJyB8fCBlY2hv ICckKHNyY2RpcikvJ2BnZHRvYS1kdG9hLmMKKworbGliX2EtZ2R0b2EtZHRvYS5vYmo6IGdkdG9h LWR0b2EuYworCSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAk KEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1v IGxpYl9hLWdkdG9hLWR0b2Eub2JqIGBpZiB0ZXN0IC1mICdnZHRvYS1kdG9hLmMnOyB0aGVuICQo Q1lHUEFUSF9XKSAnZ2R0b2EtZHRvYS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9n ZHRvYS1kdG9hLmMnOyBmaWAKKworbGliX2EtZ2R0b2EtbWlzYy5vOiBnZHRvYS1taXNjLmMKKwkk KENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFH UykgJChDUFBGTEFHUykgJChsaWJfYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRv YS1taXNjLm8gYHRlc3QgLWYgJ2dkdG9hLW1pc2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2R0 b2EtbWlzYy5jCisKK2xpYl9hLWdkdG9hLW1pc2Mub2JqOiBnZHRvYS1taXNjLmMKKwkkKENDKSAk KERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChD UFBGTEFHUykgJChsaWJfYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRvYS1taXNj Lm9iaiBgaWYgdGVzdCAtZiAnZ2R0b2EtbWlzYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dkdG9h LW1pc2MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2R0b2EtbWlzYy5jJzsgZmlg CisKK2xpYl9hLWdkdG9hLWRtaXNjLm86IGdkdG9hLWRtaXNjLmMKKwkkKENDKSAkKERFRlMpICQo REVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykg JChsaWJfYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRvYS1kbWlzYy5vIGB0ZXN0 IC1mICdnZHRvYS1kbWlzYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZHRvYS1kbWlzYy5jCisK K2xpYl9hLWdkdG9hLWRtaXNjLm9iajogZ2R0b2EtZG1pc2MuYworCSQoQ0MpICQoREVGUykgJChE RUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAk KGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWRtaXNjLm9iaiBgaWYg dGVzdCAtZiAnZ2R0b2EtZG1pc2MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZHRvYS1kbWlzYy5j JzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZHRvYS1kbWlzYy5jJzsgZmlgCisKK2xp Yl9hLWdkdG9hLWdtaXNjLm86IGdkdG9hLWdtaXNjLmMKKwkkKENDKSAkKERFRlMpICQoREVGQVVM VF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJf YV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRvYS1nbWlzYy5vIGB0ZXN0IC1mICdn ZHRvYS1nbWlzYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZHRvYS1nbWlzYy5jCisKK2xpYl9h LWdkdG9hLWdtaXNjLm9iajogZ2R0b2EtZ21pc2MuYworCSQoQ0MpICQoREVGUykgJChERUZBVUxU X0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9h X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWdtaXNjLm9iaiBgaWYgdGVzdCAt ZiAnZ2R0b2EtZ21pc2MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZHRvYS1nbWlzYy5jJzsgZWxz ZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZHRvYS1nbWlzYy5jJzsgZmlgCisKIGxpYl9hLW1h bGxvYy5vOiBtYWxsb2MuYwogCSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElO Q0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykgJChDRkxB R1MpIC1jIC1vIGxpYl9hLW1hbGxvYy5vIGB0ZXN0IC1mICdtYWxsb2MuYycgfHwgZWNobyAnJChz cmNkaXIpLydgbWFsbG9jLmMKIApAQCAtMTYxMCw3ICsxNjUyLDEzIEBAICQobHBmeCkkKE1BTExP UFRSKS4kKG9leHQpOiAkKE1BTExPQ1IpLmMKIAkkKE1BTExPQ19DT01QSUxFKSAtRERFRklORV9N QUxMT1BUIC1jICQoc3JjZGlyKS8kKE1BTExPQ1IpLmMgLW8gJEAKIAogJChscGZ4KWR0b2EuJChv ZXh0KTogZHRvYS5jIG1wcmVjLmgKLSQobHBmeClsZHRvYS4kKG9leHQpOiBsZHRvYS5jIG1wcmVj LmgKKyQobHBmeClsZHRvYS4kKG9leHQpOiBsZHRvYS5jIG1wcmVjLmggZ2R0b2EuaAorJChscGZ4 KWdkdG9hLWxkdG9hLiQob2V4dCk6IGdkdG9hLWxkdG9hLmMgZ2R0b2FpbXAuaCBnZHRvYS5oIGFy aXRoLmgKKyQobHBmeClnZHRvYS1nZHRvYS4kKG9leHQpOiBnZHRvYS1nZHRvYS5jIGdkdG9haW1w LmggZ2R0b2EuaCBhcml0aC5oCiskKGxwZngpZ2R0b2EtZHRvYS4kKG9leHQpOiBnZHRvYS1kdG9h LmMgZ2R0b2FpbXAuaCBnZHRvYS5oIGFyaXRoLmgKKyQobHBmeClnZHRvYS1taXNjLiQob2V4dCk6 IGdkdG9hLW1pc2MuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAorJChscGZ4KWdkdG9hLWRt aXNjLiQob2V4dCk6IGdkdG9hLWRtaXNjLmMgZ2R0b2FpbXAuaCBnZHRvYS5oIGFyaXRoLmgKKyQo bHBmeClnZHRvYS1nbWlzYy4kKG9leHQpOiBnZHRvYS1nbWlzYy5jIGdkdG9haW1wLmggZ2R0b2Eu aCBhcml0aC5oCiAkKGxwZngpZWN2dGJ1Zi4kKG9leHQpOiBlY3Z0YnVmLmMgbXByZWMuaAogJChs cGZ4KW1idG93Y19yLiQob2V4dCk6IG1idG93Y19yLmMgbWJjdHlwZS5oCiAkKGxwZngpbXByZWMu JChvZXh0KTogbXByZWMuYyBtcHJlYy5oCmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9zdGRsaWIv YXJpdGguaCBiL25ld2xpYi9saWJjL3N0ZGxpYi9hcml0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMC4uZDNiODRkODY3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV3bGliL2xp YmMvc3RkbGliL2FyaXRoLmgKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8bWFjaGluZS9pZWVl ZnAuaD4KKworI2lmZGVmIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIElFRUVfODA4Nwor I2VuZGlmCisKKyNpZmRlZiBfX0lFRUVfQklHX0VORElBTgorI2RlZmluZSBJRUVFX01DNjhrCisj ZW5kaWYKZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1kbWlzYy5jIGIvbmV3 bGliL2xpYmMvc3RkbGliL2dkdG9hLWRtaXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwLi5mM2Q4ZWE3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXdsaWIvbGliYy9zdGRs aWIvZ2R0b2EtZG1pc2MuYwpAQCAtMCwwICsxLDIyNSBAQAorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhv ciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4 IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lv biB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQK K2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVy ZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFw cGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFw cGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBM dWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcg b3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUg d2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJ U0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5D TFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUg TElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwg REFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJ R0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisK KyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAo ZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIg ZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworI2lm bmRlZiBNVUxUSVBMRV9USFJFQURTCisgY2hhciAqZHRvYV9yZXN1bHQ7CisjZW5kaWYKKworIGNo YXIgKgorI2lmZGVmIEtSX2hlYWRlcnMKK3J2X2FsbG9jKGkpIGludCBpOworI2Vsc2UKK3J2X2Fs bG9jKGludCBpKQorI2VuZGlmCit7CisJaW50IGosIGssICpyOworCisJaiA9IHNpemVvZihVTG9u Zyk7CisJZm9yKGsgPSAwOworCQlzaXplb2YoQmlnaW50KSAtIHNpemVvZihVTG9uZykgLSBzaXpl b2YoaW50KSArIGogPD0gaTsKKwkJaiA8PD0gMSkKKwkJCWsrKzsKKwlyID0gKGludCopQmFsbG9j KGspOworCWlmIChyID09IE5VTEwpCisJCXJldHVybiAoCisjaWZuZGVmIE1VTFRJUExFX1RIUkVB RFMKKwkJZHRvYV9yZXN1bHQgPQorI2VuZGlmCisJCQlOVUxMKTsKKwkqciA9IGs7CisJcmV0dXJu CisjaWZuZGVmIE1VTFRJUExFX1RIUkVBRFMKKwlkdG9hX3Jlc3VsdCA9CisjZW5kaWYKKwkJKGNo YXIgKikocisxKTsKKwl9CisKKyBjaGFyICoKKyNpZmRlZiBLUl9oZWFkZXJzCitucnZfYWxsb2Mo cywgcnZlLCBuKSBjaGFyICpzLCAqKnJ2ZTsgaW50IG47CisjZWxzZQorbnJ2X2FsbG9jKGNoYXIg KnMsIGNoYXIgKipydmUsIGludCBuKQorI2VuZGlmCit7CisJY2hhciAqcnYsICp0OworCisJdCA9 IHJ2ID0gcnZfYWxsb2Mobik7CisJaWYgKHQgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwl3 aGlsZSgoKnQgPSAqcysrKSAhPTApCisJCXQrKzsKKwlpZiAocnZlKQorCQkqcnZlID0gdDsKKwly ZXR1cm4gcnY7CisJfQorCisvKiBmcmVlZHRvYShzKSBtdXN0IGJlIHVzZWQgdG8gZnJlZSB2YWx1 ZXMgcyByZXR1cm5lZCBieSBkdG9hCisgKiB3aGVuIE1VTFRJUExFX1RIUkVBRFMgaXMgI2RlZmlu ZWQuICBJdCBzaG91bGQgYmUgdXNlZCBpbiBhbGwgY2FzZXMsCisgKiBidXQgZm9yIGNvbnNpc3Rl bmN5IHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBkdG9hLCBpdCBpcyBvcHRpb25hbAorICogd2hl biBNVUxUSVBMRV9USFJFQURTIGlzIG5vdCBkZWZpbmVkLgorICovCisKKyB2b2lkCisjaWZkZWYg S1JfaGVhZGVycworZnJlZWR0b2EocykgY2hhciAqczsKKyNlbHNlCitmcmVlZHRvYShjaGFyICpz KQorI2VuZGlmCit7CisJQmlnaW50ICpiID0gKEJpZ2ludCAqKSgoaW50ICopcyAtIDEpOworCWIt Pm1heHdkcyA9IDEgPDwgKGItPmsgPSAqKGludCopYik7CisJQmZyZWUoYik7CisjaWZuZGVmIE1V TFRJUExFX1RIUkVBRFMKKwlpZiAocyA9PSBkdG9hX3Jlc3VsdCkKKwkJZHRvYV9yZXN1bHQgPSAw OworI2VuZGlmCisJfQorREVGX1NUUk9ORyhmcmVlZHRvYSk7CisKKyBpbnQKK3F1b3JlbQorI2lm ZGVmIEtSX2hlYWRlcnMKKwkoYiwgUykgQmlnaW50ICpiLCAqUzsKKyNlbHNlCisJKEJpZ2ludCAq YiwgQmlnaW50ICpTKQorI2VuZGlmCit7CisJaW50IG47CisJVUxvbmcgKmJ4LCAqYnhlLCBxLCAq c3gsICpzeGU7CisjaWZkZWYgVUxMb25nCisJVUxMb25nIGJvcnJvdywgY2FycnksIHksIHlzOwor I2Vsc2UKKwlVTG9uZyBib3Jyb3csIGNhcnJ5LCB5LCB5czsKKyNpZmRlZiBQYWNrXzMyCisJVUxv bmcgc2ksIHosIHpzOworI2VuZGlmCisjZW5kaWYKKworCW4gPSBTLT53ZHM7CisjaWZkZWYgREVC VUcKKwkvKmRlYnVnKi8gaWYgKGItPndkcyA+IG4pCisJLypkZWJ1ZyovCUJ1Zygib3ZlcnNpemUg YiBpbiBxdW9yZW0iKTsKKyNlbmRpZgorCWlmIChiLT53ZHMgPCBuKQorCQlyZXR1cm4gMDsKKwlz eCA9IFMtPng7CisJc3hlID0gc3ggKyAtLW47CisJYnggPSBiLT54OworCWJ4ZSA9IGJ4ICsgbjsK KwlxID0gKmJ4ZSAvICgqc3hlICsgMSk7CS8qIGVuc3VyZSBxIDw9IHRydWUgcXVvdGllbnQgKi8K KyNpZmRlZiBERUJVRworCS8qZGVidWcqLyBpZiAocSA+IDkpCisJLypkZWJ1ZyovCUJ1Zygib3Zl cnNpemVkIHF1b3RpZW50IGluIHF1b3JlbSIpOworI2VuZGlmCisJaWYgKHEpIHsKKwkJYm9ycm93 ID0gMDsKKwkJY2FycnkgPSAwOworCQlkbyB7CisjaWZkZWYgVUxMb25nCisJCQl5cyA9ICpzeCsr ICogKFVMTG9uZylxICsgY2Fycnk7CisJCQljYXJyeSA9IHlzID4+IDMyOworCQkJeSA9ICpieCAt ICh5cyAmIDB4ZmZmZmZmZmZVTCkgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSB5ID4+IDMyICYgMVVM OworCQkJKmJ4KysgPSB5ICYgMHhmZmZmZmZmZlVMOworI2Vsc2UKKyNpZmRlZiBQYWNrXzMyCisJ CQlzaSA9ICpzeCsrOworCQkJeXMgPSAoc2kgJiAweGZmZmYpICogcSArIGNhcnJ5OworCQkJenMg PSAoc2kgPj4gMTYpICogcSArICh5cyA+PiAxNik7CisJCQljYXJyeSA9IHpzID4+IDE2OworCQkJ eSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSAtIGJvcnJvdzsKKwkJCWJvcnJvdyA9 ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCQl6ID0gKCpieCA+PiAxNikgLSAoenMgJiAweGZmZmYp IC0gYm9ycm93OworCQkJYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKwkJCVN0b3JlaW5j KGJ4LCB6LCB5KTsKKyNlbHNlCisJCQl5cyA9ICpzeCsrICogcSArIGNhcnJ5OworCQkJY2Fycnkg PSB5cyA+PiAxNjsKKwkJCXkgPSAqYnggLSAoeXMgJiAweGZmZmYpIC0gYm9ycm93OworCQkJYm9y cm93ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJCSpieCsrID0geSAmIDB4ZmZmZjsKKyNlbmRp ZgorI2VuZGlmCisJCQl9CisJCQl3aGlsZShzeCA8PSBzeGUpOworCQlpZiAoISpieGUpIHsKKwkJ CWJ4ID0gYi0+eDsKKwkJCXdoaWxlKC0tYnhlID4gYnggJiYgISpieGUpCisJCQkJLS1uOworCQkJ Yi0+d2RzID0gbjsKKwkJCX0KKwkJfQorCWlmIChjbXAoYiwgUykgPj0gMCkgeworCQlxKys7CisJ CWJvcnJvdyA9IDA7CisJCWNhcnJ5ID0gMDsKKwkJYnggPSBiLT54OworCQlzeCA9IFMtPng7CisJ CWRvIHsKKyNpZmRlZiBVTExvbmcKKwkJCXlzID0gKnN4KysgKyBjYXJyeTsKKwkJCWNhcnJ5ID0g eXMgPj4gMzI7CisJCQl5ID0gKmJ4IC0gKHlzICYgMHhmZmZmZmZmZlVMKSAtIGJvcnJvdzsKKwkJ CWJvcnJvdyA9IHkgPj4gMzIgJiAxVUw7CisJCQkqYngrKyA9IHkgJiAweGZmZmZmZmZmVUw7Cisj ZWxzZQorI2lmZGVmIFBhY2tfMzIKKwkJCXNpID0gKnN4Kys7CisJCQl5cyA9IChzaSAmIDB4ZmZm ZikgKyBjYXJyeTsKKwkJCXpzID0gKHNpID4+IDE2KSArICh5cyA+PiAxNik7CisJCQljYXJyeSA9 IHpzID4+IDE2OworCQkJeSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSAtIGJvcnJv dzsKKwkJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCQl6ID0gKCpieCA+PiAxNikg LSAoenMgJiAweGZmZmYpIC0gYm9ycm93OworCQkJYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAx NjsKKwkJCVN0b3JlaW5jKGJ4LCB6LCB5KTsKKyNlbHNlCisJCQl5cyA9ICpzeCsrICsgY2Fycnk7 CisJCQljYXJyeSA9IHlzID4+IDE2OworCQkJeSA9ICpieCAtICh5cyAmIDB4ZmZmZikgLSBib3Jy b3c7CisJCQlib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQkJKmJ4KysgPSB5ICYgMHhm ZmZmOworI2VuZGlmCisjZW5kaWYKKwkJCX0KKwkJCXdoaWxlKHN4IDw9IHN4ZSk7CisJCWJ4ID0g Yi0+eDsKKwkJYnhlID0gYnggKyBuOworCQlpZiAoISpieGUpIHsKKwkJCXdoaWxlKC0tYnhlID4g YnggJiYgISpieGUpCisJCQkJLS1uOworCQkJYi0+d2RzID0gbjsKKwkJCX0KKwkJfQorCXJldHVy biBxOworCX0KZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1kdG9hLmMgYi9u ZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtZHRvYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMC4uOTk4MTkyNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV3bGliL2xpYmMvc3Rk bGliL2dkdG9hLWR0b2EuYwpAQCAtMCwwICsxLDgzOSBAQAorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhv ciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4 LCAxOTk5IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVy bWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2Fy ZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUg aXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFp bWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFt ZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0 aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVD RU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJF LAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJ RVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9G IFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdB UkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0u IEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIg YW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIK KworLyogZHRvYSBmb3IgSUVFRSBhcml0aG1ldGljIChkbWcpOiBjb252ZXJ0IGRvdWJsZSB0byBB U0NJSSBzdHJpbmcuCisgKgorICogSW5zcGlyZWQgYnkgIkhvdyB0byBQcmludCBGbG9hdGluZy1Q b2ludCBOdW1iZXJzIEFjY3VyYXRlbHkiIGJ5CisgKiBHdXkgTC4gU3RlZWxlLCBKci4gYW5kIEpv biBMLiBXaGl0ZSBbUHJvYy4gQUNNIFNJR1BMQU4gJzkwLCBwcC4gMTEyLTEyNl0uCisgKgorICog TW9kaWZpY2F0aW9uczoKKyAqCTEuIFJhdGhlciB0aGFuIGl0ZXJhdGluZywgd2UgdXNlIGEgc2lt cGxlIG51bWVyaWMgb3ZlcmVzdGltYXRlCisgKgkgICB0byBkZXRlcm1pbmUgayA9IGZsb29yKGxv ZzEwKGQpKS4gIFdlIHNjYWxlIHJlbGV2YW50CisgKgkgICBxdWFudGl0aWVzIHVzaW5nIE8obG9n MihrKSkgcmF0aGVyIHRoYW4gTyhrKSBtdWx0aXBsaWNhdGlvbnMuCisgKgkyLiBGb3Igc29tZSBt b2RlcyA+IDIgKGNvcnJlc3BvbmRpbmcgdG8gZWN2dCBhbmQgZmN2dCksIHdlIGRvbid0CisgKgkg ICB0cnkgdG8gZ2VuZXJhdGUgZGlnaXRzIHN0cmljdGx5IGxlZnQgdG8gcmlnaHQuICBJbnN0ZWFk LCB3ZQorICoJICAgY29tcHV0ZSB3aXRoIGZld2VyIGJpdHMgYW5kIHByb3BhZ2F0ZSB0aGUgY2Fy cnkgaWYgbmVjZXNzYXJ5CisgKgkgICB3aGVuIHJvdW5kaW5nIHRoZSBmaW5hbCBkaWdpdCB1cC4g IFRoaXMgaXMgb2Z0ZW4gZmFzdGVyLgorICoJMy4gVW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBp bnB1dCB3aWxsIGJlIHJvdW5kZWQgbmVhcmVzdCwKKyAqCSAgIG1vZGUgMCByZW5kZXJzIDFlMjMg YXMgMWUyMyByYXRoZXIgdGhhbiA5Ljk5OTk5OTk5OTk5OTk5OWUyMi4KKyAqCSAgIFRoYXQgaXMs IHdlIGFsbG93IGVxdWFsaXR5IGluIHN0b3BwaW5nIHRlc3RzIHdoZW4gdGhlCisgKgkgICByb3Vu ZC1uZWFyZXN0IHJ1bGUgd2lsbCBnaXZlIHRoZSBzYW1lIGZsb2F0aW5nLXBvaW50IHZhbHVlCisg KgkgICBhcyB3b3VsZCBzYXRpc2ZhY3Rpb24gb2YgdGhlIHN0b3BwaW5nIHRlc3Qgd2l0aCBzdHJp Y3QKKyAqCSAgIGluZXF1YWxpdHkuCisgKgk0LiBXZSByZW1vdmUgY29tbW9uIGZhY3RvcnMgb2Yg cG93ZXJzIG9mIDIgZnJvbSByZWxldmFudAorICoJICAgcXVhbnRpdGllcy4KKyAqCTUuIFdoZW4g Y29udmVydGluZyBmbG9hdGluZy1wb2ludCBpbnRlZ2VycyBsZXNzIHRoYW4gMWUxNiwKKyAqCSAg IHdlIHVzZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHJhdGhlciB0aGFuIHJlc29ydGluZwor ICoJICAgdG8gbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXJzLgorICoJNi4gV2hlbiBhc2tlZCB0 byBwcm9kdWNlIGZld2VyIHRoYW4gMTUgZGlnaXRzLCB3ZSBmaXJzdCB0cnkKKyAqCSAgIHRvIGdl dCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWM7IHdlIHJlc29ydCB0bworICoJICAg bXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYyBvbmx5IGlmIHdlIGNhbm5vdAor ICoJICAgZ3VhcmFudGVlIHRoYXQgdGhlIGZsb2F0aW5nLXBvaW50IGNhbGN1bGF0aW9uIGhhcyBn aXZlbgorICoJICAgdGhlIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdC4gIEZvciBrIHJlcXVlc3Rl ZCBkaWdpdHMgYW5kCisgKgkgICAidW5pZm9ybWx5IiBkaXN0cmlidXRlZCBpbnB1dCwgdGhlIHBy b2JhYmlsaXR5IGlzCisgKgkgICBzb21ldGhpbmcgbGlrZSAxMF4oay0xNSkgdGhhdCB3ZSBtdXN0 IHJlc29ydCB0byB0aGUgTG9uZworICoJICAgY2FsY3VsYXRpb24uCisgKi8KKworI2lmZGVmIEhv bm9yX0ZMVF9ST1VORFMKKyN1bmRlZiBDaGVja19GTFRfUk9VTkRTCisjZGVmaW5lIENoZWNrX0ZM VF9ST1VORFMKKyNlbHNlCisjZGVmaW5lIFJvdW5kaW5nIEZsdF9Sb3VuZHMKKyNlbmRpZgorCisg Y2hhciAqCitkdG9hCisjaWZkZWYgS1JfaGVhZGVycworCShkMCwgbW9kZSwgbmRpZ2l0cywgZGVj cHQsIHNpZ24sIHJ2ZSkKKwlkb3VibGUgZDA7IGludCBtb2RlLCBuZGlnaXRzLCAqZGVjcHQsICpz aWduOyBjaGFyICoqcnZlOworI2Vsc2UKKwkoZG91YmxlIGQwLCBpbnQgbW9kZSwgaW50IG5kaWdp dHMsIGludCAqZGVjcHQsIGludCAqc2lnbiwgY2hhciAqKnJ2ZSkKKyNlbmRpZgoreworIC8qCUFy Z3VtZW50cyBuZGlnaXRzLCBkZWNwdCwgc2lnbiBhcmUgc2ltaWxhciB0byB0aG9zZQorCW9mIGVj dnQgYW5kIGZjdnQ7IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkIGZyb20KKwl0aGUgcmV0 dXJuZWQgc3RyaW5nLiAgSWYgbm90IG51bGwsICpydmUgaXMgc2V0IHRvIHBvaW50CisJdG8gdGhl IGVuZCBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgSWYgZCBpcyArLUluZmluaXR5IG9yIE5hTiwKKwl0 aGVuICpkZWNwdCBpcyBzZXQgdG8gOTk5OS4KKworCW1vZGU6CisJCTAgPT0+IHNob3J0ZXN0IHN0 cmluZyB0aGF0IHlpZWxkcyBkIHdoZW4gcmVhZCBpbgorCQkJYW5kIHJvdW5kZWQgdG8gbmVhcmVz dC4KKwkJMSA9PT4gbGlrZSAwLCBidXQgd2l0aCBTdGVlbGUgJiBXaGl0ZSBzdG9wcGluZyBydWxl OworCQkJZS5nLiB3aXRoIElFRUUgUDc1NCBhcml0aG1ldGljICwgbW9kZSAwIGdpdmVzCisJCQkx ZTIzIHdoZXJlYXMgbW9kZSAxIGdpdmVzIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgorCQkyID09PiBt YXgoMSxuZGlnaXRzKSBzaWduaWZpY2FudCBkaWdpdHMuICBUaGlzIGdpdmVzIGEKKwkJCXJldHVy biB2YWx1ZSBzaW1pbGFyIHRvIHRoYXQgb2YgZWN2dCwgZXhjZXB0CisJCQl0aGF0IHRyYWlsaW5n IHplcm9zIGFyZSBzdXBwcmVzc2VkLgorCQkzID09PiB0aHJvdWdoIG5kaWdpdHMgcGFzdCB0aGUg ZGVjaW1hbCBwb2ludC4gIFRoaXMKKwkJCWdpdmVzIGEgcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8g dGhhdCBmcm9tIGZjdnQsCisJCQlleGNlcHQgdGhhdCB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJl c3NlZCwgYW5kCisJCQluZGlnaXRzIGNhbiBiZSBuZWdhdGl2ZS4KKwkJNCw1ID09PiBzaW1pbGFy IHRvIDIgYW5kIDMsIHJlc3BlY3RpdmVseSwgYnV0IChpbgorCQkJcm91bmQtbmVhcmVzdCBtb2Rl KSB3aXRoIHRoZSB0ZXN0cyBvZiBtb2RlIDAgdG8KKwkJCXBvc3NpYmx5IHJldHVybiBhIHNob3J0 ZXIgc3RyaW5nIHRoYXQgcm91bmRzIHRvIGQuCisJCQlXaXRoIElFRUUgYXJpdGhtZXRpYyBhbmQg Y29tcGlsYXRpb24gd2l0aAorCQkJLURIb25vcl9GTFRfUk9VTkRTLCBtb2RlcyA0IGFuZCA1IGJl aGF2ZSB0aGUgc2FtZQorCQkJYXMgbW9kZXMgMiBhbmQgMyB3aGVuIEZMVF9ST1VORFMgIT0gMS4K KwkJNi05ID09PiBEZWJ1Z2dpbmcgbW9kZXMgc2ltaWxhciB0byBtb2RlIC0gNDogIGRvbid0IHRy eQorCQkJZmFzdCBmbG9hdGluZy1wb2ludCBlc3RpbWF0ZSAoaWYgYXBwbGljYWJsZSkuCisKKwkJ VmFsdWVzIG9mIG1vZGUgb3RoZXIgdGhhbiAwLTkgYXJlIHRyZWF0ZWQgYXMgbW9kZSAwLgorCisJ CVN1ZmZpY2llbnQgc3BhY2UgaXMgYWxsb2NhdGVkIHRvIHRoZSByZXR1cm4gdmFsdWUKKwkJdG8g aG9sZCB0aGUgc3VwcHJlc3NlZCB0cmFpbGluZyB6ZXJvcy4KKwkqLworCisJaW50IGJiaXRzLCBi MiwgYjUsIGJlLCBkaWcsIGksIGllcHMsIGlsaW0sIGlsaW0wLCBpbGltMSwKKwkJaiwgajEsIGss IGswLCBrX2NoZWNrLCBsZWZ0cmlnaHQsIG0yLCBtNSwgczIsIHM1LAorCQlzcGVjX2Nhc2UsIHRy eV9xdWljazsKKwlMb25nIEw7CisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwlpbnQgZGVub3Jt OworCVVMb25nIHg7CisjZW5kaWYKKwlCaWdpbnQgKmIsICpiMSwgKmRlbHRhLCAqbWxvLCAqbWhp LCAqUzsKKwlVIGQsIGQyLCBlcHM7CisJZG91YmxlIGRzOworCWNoYXIgKnMsICpzMDsKKyNpZmRl ZiBTRVRfSU5FWEFDVAorCWludCBpbmV4YWN0LCBvbGRpbmV4YWN0OworI2VuZGlmCisjaWZkZWYg SG9ub3JfRkxUX1JPVU5EUyAvKnsqLworCWludCBSb3VuZGluZzsKKyNpZmRlZiBUcnVzdF9GTFRf Uk9VTkRTIC8qe3sgb25seSBkZWZpbmUgdGhpcyBpZiBGTFRfUk9VTkRTIHJlYWxseSB3b3JrcyEg Ki8KKwlSb3VuZGluZyA9IEZsdF9Sb3VuZHM7CisjZWxzZSAvKn17Ki8KKwlSb3VuZGluZyA9IDE7 CisJc3dpdGNoKGZlZ2V0cm91bmQoKSkgeworCSAgY2FzZSBGRV9UT1dBUkRaRVJPOglSb3VuZGlu ZyA9IDA7IGJyZWFrOworCSAgY2FzZSBGRV9VUFdBUkQ6CVJvdW5kaW5nID0gMjsgYnJlYWs7CisJ ICBjYXNlIEZFX0RPV05XQVJEOglSb3VuZGluZyA9IDM7CisJICB9CisjZW5kaWYgLyp9fSovCisj ZW5kaWYgLyp9Ki8KKworI2lmbmRlZiBNVUxUSVBMRV9USFJFQURTCisJaWYgKGR0b2FfcmVzdWx0 KSB7CisJCWZyZWVkdG9hKGR0b2FfcmVzdWx0KTsKKwkJZHRvYV9yZXN1bHQgPSAwOworCQl9Cisj ZW5kaWYKKwlkLmQgPSBkMDsKKwlpZiAod29yZDAoJmQpICYgU2lnbl9iaXQpIHsKKwkJLyogc2V0 IHNpZ24gZm9yIGV2ZXJ5dGhpbmcsIGluY2x1ZGluZyAwJ3MgYW5kIE5hTnMgKi8KKwkJKnNpZ24g PSAxOworCQl3b3JkMCgmZCkgJj0gflNpZ25fYml0OwkvKiBjbGVhciBzaWduIGJpdCAqLworCQl9 CisJZWxzZQorCQkqc2lnbiA9IDA7CisKKyNpZiBkZWZpbmVkKElFRUVfQXJpdGgpICsgZGVmaW5l ZChWQVgpCisjaWZkZWYgSUVFRV9Bcml0aAorCWlmICgod29yZDAoJmQpICYgRXhwX21hc2spID09 IEV4cF9tYXNrKQorI2Vsc2UKKwlpZiAod29yZDAoJmQpICA9PSAweDgwMDApCisjZW5kaWYKKwkJ eworCQkvKiBJbmZpbml0eSBvciBOYU4gKi8KKwkJKmRlY3B0ID0gOTk5OTsKKyNpZmRlZiBJRUVF X0FyaXRoCisJCWlmICghd29yZDEoJmQpICYmICEod29yZDAoJmQpICYgMHhmZmZmZikpCisJCQly ZXR1cm4gbnJ2X2FsbG9jKCJJbmZpbml0eSIsIHJ2ZSwgOCk7CisjZW5kaWYKKwkJcmV0dXJuIG5y dl9hbGxvYygiTmFOIiwgcnZlLCAzKTsKKwkJfQorI2VuZGlmCisjaWZkZWYgSUJNCisJZHZhbCgm ZCkgKz0gMDsgLyogbm9ybWFsaXplICovCisjZW5kaWYKKwlpZiAoIWR2YWwoJmQpKSB7CisJCSpk ZWNwdCA9IDE7CisJCXJldHVybiBucnZfYWxsb2MoIjAiLCBydmUsIDEpOworCQl9CisKKyNpZmRl ZiBTRVRfSU5FWEFDVAorCXRyeV9xdWljayA9IG9sZGluZXhhY3QgPSBnZXRfaW5leGFjdCgpOwor CWluZXhhY3QgPSAxOworI2VuZGlmCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCWlmIChSb3Vu ZGluZyA+PSAyKSB7CisJCWlmICgqc2lnbikKKwkJCVJvdW5kaW5nID0gUm91bmRpbmcgPT0gMiA/ IDAgOiAyOworCQllbHNlCisJCQlpZiAoUm91bmRpbmcgIT0gMikKKwkJCQlSb3VuZGluZyA9IDA7 CisJCX0KKyNlbmRpZgorCisJYiA9IGQyYihkdmFsKCZkKSwgJmJlLCAmYmJpdHMpOworCWlmIChi ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisjaWZkZWYgU3VkZGVuX1VuZGVyZmxvdworCWkg PSAoaW50KSh3b3JkMCgmZCkgPj4gRXhwX3NoaWZ0MSAmIChFeHBfbWFzaz4+RXhwX3NoaWZ0MSkp OworI2Vsc2UKKwlpZiAoKCBpID0gKGludCkod29yZDAoJmQpID4+IEV4cF9zaGlmdDEgJiAoRXhw X21hc2s+PkV4cF9zaGlmdDEpKSApIT0wKSB7CisjZW5kaWYKKwkJZHZhbCgmZDIpID0gZHZhbCgm ZCk7CisJCXdvcmQwKCZkMikgJj0gRnJhY19tYXNrMTsKKwkJd29yZDAoJmQyKSB8PSBFeHBfMTE7 CisjaWZkZWYgSUJNCisJCWlmICgoIGogPSAxMSAtIGhpMGJpdHMod29yZDAoJmQyKSAmIEZyYWNf bWFzaykgKSE9MCkKKwkJCWR2YWwoJmQyKSAvPSAxIDw8IGo7CisjZW5kaWYKKworCQkvKiBsb2co eCkJfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKKwkJICogbG9nMTAoeCkJID0gIGxvZyh4KSAv IGxvZygxMCkKKwkJICoJCX49fiBsb2coMS41KS9sb2coMTApICsgKHgtMS41KS8oMS41KmxvZygx MCkpCisJCSAqIGxvZzEwKCZkKSA9IChpLUJpYXMpKmxvZygyKS9sb2coMTApICsgbG9nMTAoJmQy KQorCQkgKgorCQkgKiBUaGlzIHN1Z2dlc3RzIGNvbXB1dGluZyBhbiBhcHByb3hpbWF0aW9uIGsg dG8gbG9nMTAoJmQpIGJ5CisJCSAqCisJCSAqIGsgPSAoaSAtIEJpYXMpKjAuMzAxMDI5OTk1NjYz OTgxCisJCSAqCSsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1 NjgxICk7CisJCSAqCisJCSAqIFdlIHdhbnQgayB0byBiZSB0b28gbGFyZ2UgcmF0aGVyIHRoYW4g dG9vIHNtYWxsLgorCQkgKiBUaGUgZXJyb3IgaW4gdGhlIGZpcnN0LW9yZGVyIFRheWxvciBzZXJp ZXMgYXBwcm94aW1hdGlvbgorCQkgKiBpcyBpbiBvdXIgZmF2b3IsIHNvIHdlIGp1c3Qgcm91bmQg dXAgdGhlIGNvbnN0YW50IGVub3VnaAorCQkgKiB0byBjb21wZW5zYXRlIGZvciBhbnkgZXJyb3Ig aW4gdGhlIG11bHRpcGxpY2F0aW9uIG9mCisJCSAqIChpIC0gQmlhcykgYnkgMC4zMDEwMjk5OTU2 NjM5ODE7IHNpbmNlIHxpIC0gQmlhc3wgPD0gMTA3NywKKwkJICogYW5kIDEwNzcgKiAwLjMwMTAz ICogMl4tNTIgfj1+IDcuMmUtMTQsCisJCSAqIGFkZGluZyAxZS0xMyB0byB0aGUgY29uc3RhbnQg dGVybSBtb3JlIHRoYW4gc3VmZmljZXMuCisJCSAqIEhlbmNlIHdlIGFkanVzdCB0aGUgY29uc3Rh bnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCisJCSAqIChXZSBjb3VsZCBnZXQgYSBtb3JlIGFj Y3VyYXRlIGsgYnkgaW52b2tpbmcgbG9nMTAsCisJCSAqICBidXQgdGhpcyBpcyBwcm9iYWJseSBu b3Qgd29ydGh3aGlsZS4pCisJCSAqLworCisJCWkgLT0gQmlhczsKKyNpZmRlZiBJQk0KKwkJaSA8 PD0gMjsKKwkJaSArPSBqOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJZGVu b3JtID0gMDsKKwkJfQorCWVsc2UgeworCQkvKiBkIGlzIGRlbm9ybWFsaXplZCAqLworCisJCWkg PSBiYml0cyArIGJlICsgKEJpYXMgKyAoUC0xKSAtIDEpOworCQl4ID0gaSA+IDMyICA/IHdvcmQw KCZkKSA8PCAoNjQgLSBpKSB8IHdvcmQxKCZkKSA+PiAoaSAtIDMyKQorCQkJICAgIDogd29yZDEo JmQpIDw8ICgzMiAtIGkpOworCQlkdmFsKCZkMikgPSB4OworCQl3b3JkMCgmZDIpIC09IDMxKkV4 cF9tc2sxOyAvKiBhZGp1c3QgZXhwb25lbnQgKi8KKwkJaSAtPSAoQmlhcyArIChQLTEpIC0gMSkg KyAxOworCQlkZW5vcm0gPSAxOworCQl9CisjZW5kaWYKKwlkcyA9IChkdmFsKCZkMiktMS41KSow LjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1OCArIGkqMC4zMDEwMjk5OTU2NjM5ODE7 CisJayA9IChpbnQpZHM7CisJaWYgKGRzIDwgMC4gJiYgZHMgIT0gaykKKwkJay0tOwkvKiB3YW50 IGsgPSBmbG9vcihkcykgKi8KKwlrX2NoZWNrID0gMTsKKwlpZiAoayA+PSAwICYmIGsgPD0gVGVu X3BtYXgpIHsKKwkJaWYgKGR2YWwoJmQpIDwgdGVuc1trXSkKKwkJCWstLTsKKwkJa19jaGVjayA9 IDA7CisJCX0KKwlqID0gYmJpdHMgLSBpIC0gMTsKKwlpZiAoaiA+PSAwKSB7CisJCWIyID0gMDsK KwkJczIgPSBqOworCQl9CisJZWxzZSB7CisJCWIyID0gLWo7CisJCXMyID0gMDsKKwkJfQorCWlm IChrID49IDApIHsKKwkJYjUgPSAwOworCQlzNSA9IGs7CisJCXMyICs9IGs7CisJCX0KKwllbHNl IHsKKwkJYjIgLT0gazsKKwkJYjUgPSAtazsKKwkJczUgPSAwOworCQl9CisJaWYgKG1vZGUgPCAw IHx8IG1vZGUgPiA5KQorCQltb2RlID0gMDsKKworI2lmbmRlZiBTRVRfSU5FWEFDVAorI2lmZGVm IENoZWNrX0ZMVF9ST1VORFMKKwl0cnlfcXVpY2sgPSBSb3VuZGluZyA9PSAxOworI2Vsc2UKKwl0 cnlfcXVpY2sgPSAxOworI2VuZGlmCisjZW5kaWYgLypTRVRfSU5FWEFDVCovCisKKwlpZiAobW9k ZSA+IDUpIHsKKwkJbW9kZSAtPSA0OworCQl0cnlfcXVpY2sgPSAwOworCQl9CisJbGVmdHJpZ2h0 ID0gMTsKKwlpbGltID0gaWxpbTEgPSAtMTsJLyogVmFsdWVzIGZvciBjYXNlcyAwIGFuZCAxOyBk b25lIGhlcmUgdG8gKi8KKwkJCQkvKiBzaWxlbmNlIGVycm9uZW91cyAiZ2NjIC1XYWxsIiB3YXJu aW5nLiAqLworCXN3aXRjaChtb2RlKSB7CisJCWNhc2UgMDoKKwkJY2FzZSAxOgorCQkJaSA9IDE4 OworCQkJbmRpZ2l0cyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbGVmdHJpZ2h0ID0g MDsKKwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgNDoKKwkJCWlmIChuZGlnaXRzIDw9IDApCisJ CQkJbmRpZ2l0cyA9IDE7CisJCQlpbGltID0gaWxpbTEgPSBpID0gbmRpZ2l0czsKKwkJCWJyZWFr OworCQljYXNlIDM6CisJCQlsZWZ0cmlnaHQgPSAwOworCQkJLyogbm8gYnJlYWsgKi8KKwkJY2Fz ZSA1OgorCQkJaSA9IG5kaWdpdHMgKyBrICsgMTsKKwkJCWlsaW0gPSBpOworCQkJaWxpbTEgPSBp IC0gMTsKKwkJCWlmIChpIDw9IDApCisJCQkJaSA9IDE7CisJCX0KKwlzID0gczAgPSBydl9hbGxv YyhpKTsKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisjaWZkZWYgSG9ub3Jf RkxUX1JPVU5EUworCWlmIChtb2RlID4gMSAmJiBSb3VuZGluZyAhPSAxKQorCQlsZWZ0cmlnaHQg PSAwOworI2VuZGlmCisKKwlpZiAoaWxpbSA+PSAwICYmIGlsaW0gPD0gUXVpY2tfbWF4ICYmIHRy eV9xdWljaykgeworCisJCS8qIFRyeSB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0 aG1ldGljLiAqLworCisJCWkgPSAwOworCQlkdmFsKCZkMikgPSBkdmFsKCZkKTsKKwkJazAgPSBr OworCQlpbGltMCA9IGlsaW07CisJCWllcHMgPSAyOyAvKiBjb25zZXJ2YXRpdmUgKi8KKwkJaWYg KGsgPiAwKSB7CisJCQlkcyA9IHRlbnNbayYweGZdOworCQkJaiA9IGsgPj4gNDsKKwkJCWlmIChq ICYgQmxldGNoKSB7CisJCQkJLyogcHJldmVudCBvdmVyZmxvd3MgKi8KKwkJCQlqICY9IEJsZXRj aCAtIDE7CisJCQkJZHZhbCgmZCkgLz0gYmlndGVuc1tuX2JpZ3RlbnMtMV07CisJCQkJaWVwcysr OworCQkJCX0KKwkJCWZvcig7IGo7IGogPj49IDEsIGkrKykKKwkJCQlpZiAoaiAmIDEpIHsKKwkJ CQkJaWVwcysrOworCQkJCQlkcyAqPSBiaWd0ZW5zW2ldOworCQkJCQl9CisJCQlkdmFsKCZkKSAv PSBkczsKKwkJCX0KKwkJZWxzZSBpZiAoKCBqMSA9IC1rICkhPTApIHsKKwkJCWR2YWwoJmQpICo9 IHRlbnNbajEgJiAweGZdOworCQkJZm9yKGogPSBqMSA+PiA0OyBqOyBqID4+PSAxLCBpKyspCisJ CQkJaWYgKGogJiAxKSB7CisJCQkJCWllcHMrKzsKKwkJCQkJZHZhbCgmZCkgKj0gYmlndGVuc1tp XTsKKwkJCQkJfQorCQkJfQorCQlpZiAoa19jaGVjayAmJiBkdmFsKCZkKSA8IDEuICYmIGlsaW0g PiAwKSB7CisJCQlpZiAoaWxpbTEgPD0gMCkKKwkJCQlnb3RvIGZhc3RfZmFpbGVkOworCQkJaWxp bSA9IGlsaW0xOworCQkJay0tOworCQkJZHZhbCgmZCkgKj0gMTAuOworCQkJaWVwcysrOworCQkJ fQorCQlkdmFsKCZlcHMpID0gaWVwcypkdmFsKCZkKSArIDcuOworCQl3b3JkMCgmZXBzKSAtPSAo UC0xKSpFeHBfbXNrMTsKKwkJaWYgKGlsaW0gPT0gMCkgeworCQkJUyA9IG1oaSA9IDA7CisJCQlk dmFsKCZkKSAtPSA1LjsKKwkJCWlmIChkdmFsKCZkKSA+IGR2YWwoJmVwcykpCisJCQkJZ290byBv bmVfZGlnaXQ7CisJCQlpZiAoZHZhbCgmZCkgPCAtZHZhbCgmZXBzKSkKKwkJCQlnb3RvIG5vX2Rp Z2l0czsKKwkJCWdvdG8gZmFzdF9mYWlsZWQ7CisJCQl9CisjaWZuZGVmIE5vX2xlZnRyaWdodAor CQlpZiAobGVmdHJpZ2h0KSB7CisJCQkvKiBVc2UgU3RlZWxlICYgV2hpdGUgbWV0aG9kIG9mIG9u bHkKKwkJCSAqIGdlbmVyYXRpbmcgZGlnaXRzIG5lZWRlZC4KKwkJCSAqLworCQkJZHZhbCgmZXBz KSA9IDAuNS90ZW5zW2lsaW0tMV0gLSBkdmFsKCZlcHMpOworCQkJZm9yKGkgPSAwOzspIHsKKwkJ CQlMID0gZHZhbCgmZCk7CisJCQkJZHZhbCgmZCkgLT0gTDsKKwkJCQkqcysrID0gJzAnICsgKGlu dClMOworCQkJCWlmIChkdmFsKCZkKSA8IGR2YWwoJmVwcykpCisJCQkJCWdvdG8gcmV0MTsKKwkJ CQlpZiAoMS4gLSBkdmFsKCZkKSA8IGR2YWwoJmVwcykpCisJCQkJCWdvdG8gYnVtcF91cDsKKwkJ CQlpZiAoKytpID49IGlsaW0pCisJCQkJCWJyZWFrOworCQkJCWR2YWwoJmVwcykgKj0gMTAuOwor CQkJCWR2YWwoJmQpICo9IDEwLjsKKwkJCQl9CisJCQl9CisJCWVsc2UgeworI2VuZGlmCisJCQkv KiBHZW5lcmF0ZSBpbGltIGRpZ2l0cywgdGhlbiBmaXggdGhlbSB1cC4gKi8KKwkJCWR2YWwoJmVw cykgKj0gdGVuc1tpbGltLTFdOworCQkJZm9yKGkgPSAxOzsgaSsrLCBkdmFsKCZkKSAqPSAxMC4p IHsKKwkJCQlMID0gKExvbmcpKGR2YWwoJmQpKTsKKwkJCQlpZiAoIShkdmFsKCZkKSAtPSBMKSkK KwkJCQkJaWxpbSA9IGk7CisJCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCQlpZiAoaSA9PSBp bGltKSB7CisJCQkJCWlmIChkdmFsKCZkKSA+IDAuNSArIGR2YWwoJmVwcykpCisJCQkJCQlnb3Rv IGJ1bXBfdXA7CisJCQkJCWVsc2UgaWYgKGR2YWwoJmQpIDwgMC41IC0gZHZhbCgmZXBzKSkgewor CQkJCQkJd2hpbGUoKi0tcyA9PSAnMCcpOworCQkJCQkJcysrOworCQkJCQkJZ290byByZXQxOwor CQkJCQkJfQorCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKyNpZm5kZWYgTm9fbGVmdHJpZ2h0 CisJCQl9CisjZW5kaWYKKyBmYXN0X2ZhaWxlZDoKKwkJcyA9IHMwOworCQlkdmFsKCZkKSA9IGR2 YWwoJmQyKTsKKwkJayA9IGswOworCQlpbGltID0gaWxpbTA7CisJCX0KKworCS8qIERvIHdlIGhh dmUgYSAic21hbGwiIGludGVnZXI/ICovCisKKwlpZiAoYmUgPj0gMCAmJiBrIDw9IEludF9tYXgp IHsKKwkJLyogWWVzLiAqLworCQlkcyA9IHRlbnNba107CisJCWlmIChuZGlnaXRzIDwgMCAmJiBp bGltIDw9IDApIHsKKwkJCVMgPSBtaGkgPSAwOworCQkJaWYgKGlsaW0gPCAwIHx8IGR2YWwoJmQp IDw9IDUqZHMpCisJCQkJZ290byBub19kaWdpdHM7CisJCQlnb3RvIG9uZV9kaWdpdDsKKwkJCX0K KwkJZm9yKGkgPSAxOzsgaSsrLCBkdmFsKCZkKSAqPSAxMC4pIHsKKwkJCUwgPSAoTG9uZykoZHZh bCgmZCkgLyBkcyk7CisJCQlkdmFsKCZkKSAtPSBMKmRzOworI2lmZGVmIENoZWNrX0ZMVF9ST1VO RFMKKwkJCS8qIElmIEZMVF9ST1VORFMgPT0gMiwgTCB3aWxsIHVzdWFsbHkgYmUgaGlnaCBieSAx ICovCisJCQlpZiAoZHZhbCgmZCkgPCAwKSB7CisJCQkJTC0tOworCQkJCWR2YWwoJmQpICs9IGRz OworCQkJCX0KKyNlbmRpZgorCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCWlmICghZHZhbCgm ZCkpIHsKKyNpZmRlZiBTRVRfSU5FWEFDVAorCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJ YnJlYWs7CisJCQkJfQorCQkJaWYgKGkgPT0gaWxpbSkgeworI2lmZGVmIEhvbm9yX0ZMVF9ST1VO RFMKKwkJCQlpZiAobW9kZSA+IDEpCisJCQkJc3dpdGNoKFJvdW5kaW5nKSB7CisJCQkJICBjYXNl IDA6IGdvdG8gcmV0MTsKKwkJCQkgIGNhc2UgMjogZ290byBidW1wX3VwOworCQkJCSAgfQorI2Vu ZGlmCisJCQkJZHZhbCgmZCkgKz0gZHZhbCgmZCk7CisjaWZkZWYgUk9VTkRfQklBU0VECisJCQkJ aWYgKGR2YWwoJmQpID49IGRzKQorI2Vsc2UKKwkJCQlpZiAoZHZhbCgmZCkgPiBkcyB8fCAoZHZh bCgmZCkgPT0gZHMgJiYgTCAmIDEpKQorI2VuZGlmCisJCQkJCXsKKyBidW1wX3VwOgorCQkJCQl3 aGlsZSgqLS1zID09ICc5JykKKwkJCQkJCWlmIChzID09IHMwKSB7CisJCQkJCQkJaysrOworCQkJ CQkJCSpzID0gJzAnOworCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJKysqcysrOworCQkJ CQl9CisJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQlnb3RvIHJldDE7CisJCX0KKworCW0yID0g YjI7CisJbTUgPSBiNTsKKwltaGkgPSBtbG8gPSAwOworCWlmIChsZWZ0cmlnaHQpIHsKKwkJaSA9 CisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCWRlbm9ybSA/IGJlICsgKEJpYXMgKyAoUC0x KSAtIDEgKyAxKSA6CisjZW5kaWYKKyNpZmRlZiBJQk0KKwkJCTEgKyA0KlAgLSAzIC0gYmJpdHMg KyAoKGJiaXRzICsgYmUgLSAxKSAmIDMpOworI2Vsc2UKKwkJCTEgKyBQIC0gYmJpdHM7CisjZW5k aWYKKwkJYjIgKz0gaTsKKwkJczIgKz0gaTsKKwkJbWhpID0gaTJiKDEpOworCQlpZiAobWhpID09 IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJaWYgKG0yID4gMCAmJiBzMiA+IDApIHsK KwkJaSA9IG0yIDwgczIgPyBtMiA6IHMyOworCQliMiAtPSBpOworCQltMiAtPSBpOworCQlzMiAt PSBpOworCQl9CisJaWYgKGI1ID4gMCkgeworCQlpZiAobGVmdHJpZ2h0KSB7CisJCQlpZiAobTUg PiAwKSB7CisJCQkJbWhpID0gcG93NW11bHQobWhpLCBtNSk7CisJCQkJaWYgKG1oaSA9PSBOVUxM KQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCWIxID0gbXVsdChtaGksIGIpOworCQkJCWlmIChi MSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCUJmcmVlKGIpOworCQkJCWIgPSBi MTsKKwkJCQl9CisJCQlpZiAoKCBqID0gYjUgLSBtNSApIT0wKSB7CisJCQkJYiA9IHBvdzVtdWx0 KGIsIGopOworCQkJCWlmIChiID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQor CQkJfQorCQllbHNlIHsKKwkJCWIgPSBwb3c1bXVsdChiLCBiNSk7CisJCQlpZiAoYiA9PSBOVUxM KQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCX0KKwlTID0gaTJiKDEpOworCWlmIChTID09 IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJaWYgKHM1ID4gMCkgeworCQlTID0gcG93NW11bHQo UywgczUpOworCQlpZiAoUyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCisJLyog Q2hlY2sgZm9yIHNwZWNpYWwgY2FzZSB0aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIu ICovCisKKwlzcGVjX2Nhc2UgPSAwOworCWlmICgobW9kZSA8IDIgfHwgbGVmdHJpZ2h0KQorI2lm ZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwkJCSYmIFJvdW5kaW5nID09IDEKKyNlbmRpZgorCQkJCSkg eworCQlpZiAoIXdvcmQxKCZkKSAmJiAhKHdvcmQwKCZkKSAmIEJuZHJ5X21hc2spCisjaWZuZGVm IFN1ZGRlbl9VbmRlcmZsb3cKKwkJICYmIHdvcmQwKCZkKSAmIChFeHBfbWFzayAmIH5FeHBfbXNr MSkKKyNlbmRpZgorCQkJCSkgeworCQkJLyogVGhlIHNwZWNpYWwgY2FzZSAqLworCQkJYjIgKz0g TG9nMlA7CisJCQlzMiArPSBMb2cyUDsKKwkJCXNwZWNfY2FzZSA9IDE7CisJCQl9CisJCX0KKwor CS8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgorCSAq IHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAwIGJpdHMu CisJICoKKwkgKiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbXB1dGUgbGVhZGluZyAyOCBiaXRz IG9mIFMgb25jZQorCSAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0gYW5kIGEgc2hpZnQgdG8g cXVvcmVtLCBzbyBpdAorCSAqIGNhbiBkbyBzaGlmdHMgYW5kIG9ycyB0byBjb21wdXRlIHRoZSBu dW1lcmF0b3IgZm9yIHEuCisJICovCisjaWZkZWYgUGFja18zMgorCWlmICgoIGkgPSAoKHM1ID8g MzIgLSBoaTBiaXRzKFMtPnhbUy0+d2RzLTFdKSA6IDEpICsgczIpICYgMHgxZiApIT0wKQorCQlp ID0gMzIgLSBpOworI2Vsc2UKKwlpZiAoKCBpID0gKChzNSA/IDMyIC0gaGkwYml0cyhTLT54W1Mt Pndkcy0xXSkgOiAxKSArIHMyKSAmIDB4ZiApIT0wKQorCQlpID0gMTYgLSBpOworI2VuZGlmCisJ aWYgKGkgPiA0KSB7CisJCWkgLT0gNDsKKwkJYjIgKz0gaTsKKwkJbTIgKz0gaTsKKwkJczIgKz0g aTsKKwkJfQorCWVsc2UgaWYgKGkgPCA0KSB7CisJCWkgKz0gMjg7CisJCWIyICs9IGk7CisJCW0y ICs9IGk7CisJCXMyICs9IGk7CisJCX0KKwlpZiAoYjIgPiAwKSB7CisJCWIgPSBsc2hpZnQoYiwg YjIpOworCQlpZiAoYiA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmIChzMiA+ IDApIHsKKwkJUyA9IGxzaGlmdChTLCBzMik7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4g KE5VTEwpOworCQl9CisJaWYgKGtfY2hlY2spIHsKKwkJaWYgKGNtcChiLFMpIDwgMCkgeworCQkJ ay0tOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOwkvKiB3ZSBib3RjaGVkIHRoZSBrIGVzdGlt YXRlICovCisJCQlpZiAoYiA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlpZiAobGVm dHJpZ2h0KSB7CisJCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJCQlpZiAobWhpID09 IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJaWxpbSA9IGlsaW0xOworCQkJ fQorCQl9CisJaWYgKGlsaW0gPD0gMCAmJiAobW9kZSA9PSAzIHx8IG1vZGUgPT0gNSkpIHsKKwkJ UyA9IG11bHRhZGQoUyw1LDApOworCQlpZiAoUyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsK KwkJaWYgKGlsaW0gPCAwIHx8IGNtcChiLFMpIDw9IDApIHsKKwkJCS8qIG5vIGRpZ2l0cywgZmN2 dCBzdHlsZSAqLworIG5vX2RpZ2l0czoKKwkJCWsgPSAtMSAtIG5kaWdpdHM7CisJCQlnb3RvIHJl dDsKKwkJCX0KKyBvbmVfZGlnaXQ6CisJCSpzKysgPSAnMSc7CisJCWsrKzsKKwkJZ290byByZXQ7 CisJCX0KKwlpZiAobGVmdHJpZ2h0KSB7CisJCWlmIChtMiA+IDApIHsKKwkJCW1oaSA9IGxzaGlm dChtaGksIG0yKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJ fQorCisJCS8qIENvbXB1dGUgbWxvIC0tIGNoZWNrIGZvciBzcGVjaWFsIGNhc2UKKwkJICogdGhh dCBkIGlzIGEgbm9ybWFsaXplZCBwb3dlciBvZiAyLgorCQkgKi8KKworCQltbG8gPSBtaGk7CisJ CWlmIChzcGVjX2Nhc2UpIHsKKwkJCW1oaSA9IEJhbGxvYyhtaGktPmspOworCQkJaWYgKG1oaSA9 PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCY29weShtaGksIG1sbyk7CisJCQltaGkg PSBsc2hpZnQobWhpLCBMb2cyUCk7CisJCQlpZiAobWhpID09IE5VTEwpCisJCQkJcmV0dXJuIChO VUxMKTsKKwkJCX0KKworCQlmb3IoaSA9IDE7O2krKykgeworCQkJZGlnID0gcXVvcmVtKGIsUykg KyAnMCc7CisJCQkvKiBEbyB3ZSB5ZXQgaGF2ZSB0aGUgc2hvcnRlc3QgZGVjaW1hbCBzdHJpbmcK KwkJCSAqIHRoYXQgd2lsbCByb3VuZCB0byBkPworCQkJICovCisJCQlqID0gY21wKGIsIG1sbyk7 CisJCQlkZWx0YSA9IGRpZmYoUywgbWhpKTsKKwkJCWlmIChkZWx0YSA9PSBOVUxMKQorCQkJCXJl dHVybiAoTlVMTCk7CisJCQlqMSA9IGRlbHRhLT5zaWduID8gMSA6IGNtcChiLCBkZWx0YSk7CisJ CQlCZnJlZShkZWx0YSk7CisjaWZuZGVmIFJPVU5EX0JJQVNFRAorCQkJaWYgKGoxID09IDAgJiYg bW9kZSAhPSAxICYmICEod29yZDEoJmQpICYgMSkKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJ CQkJJiYgUm91bmRpbmcgPj0gMQorI2VuZGlmCisJCQkJCQkJCSAgICkgeworCQkJCWlmIChkaWcg PT0gJzknKQorCQkJCQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJaWYgKGogPiAwKQorCQkJCQlkaWcr KzsKKyNpZmRlZiBTRVRfSU5FWEFDVAorCQkJCWVsc2UgaWYgKCFiLT54WzBdICYmIGItPndkcyA8 PSAxKQorCQkJCQlpbmV4YWN0ID0gMDsKKyNlbmRpZgorCQkJCSpzKysgPSBkaWc7CisJCQkJZ290 byByZXQ7CisJCQkJfQorI2VuZGlmCisJCQlpZiAoaiA8IDAgfHwgKGogPT0gMCAmJiBtb2RlICE9 IDEKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQkJCQkJJiYgISh3b3JkMSgmZCkgJiAxKQorI2Vu ZGlmCisJCQkJCSkpIHsKKwkJCQlpZiAoIWItPnhbMF0gJiYgYi0+d2RzIDw9IDEpIHsKKyNpZmRl ZiBTRVRfSU5FWEFDVAorCQkJCQlpbmV4YWN0ID0gMDsKKyNlbmRpZgorCQkJCQlnb3RvIGFjY2Vw dF9kaWc7CisJCQkJCX0KKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCQkJaWYgKG1vZGUgPiAx KQorCQkJCSBzd2l0Y2goUm91bmRpbmcpIHsKKwkJCQkgIGNhc2UgMDogZ290byBhY2NlcHRfZGln OworCQkJCSAgY2FzZSAyOiBnb3RvIGtlZXBfZGlnOworCQkJCSAgfQorI2VuZGlmIC8qSG9ub3Jf RkxUX1JPVU5EUyovCisJCQkJaWYgKGoxID4gMCkgeworCQkJCQliID0gbHNoaWZ0KGIsIDEpOwor CQkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQkJajEgPSBjbXAo YiwgUyk7CisjaWZkZWYgUk9VTkRfQklBU0VECisJCQkJCWlmIChqMSA+PSAwIC8qKSovCisjZWxz ZQorCQkJCQlpZiAoKGoxID4gMCB8fCAoajEgPT0gMCAmJiBkaWcgJiAxKSkKKyNlbmRpZgorCQkJ CQkmJiBkaWcrKyA9PSAnOScpCisJCQkJCQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJCX0KKyBhY2Nl cHRfZGlnOgorCQkJCSpzKysgPSBkaWc7CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJaWYgKGox ID4gMCkgeworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwkJCQlpZiAoIVJvdW5kaW5nKQorCQkJ CQlnb3RvIGFjY2VwdF9kaWc7CisjZW5kaWYKKwkJCQlpZiAoZGlnID09ICc5JykgeyAvKiBwb3Nz aWJsZSBpZiBpID09IDEgKi8KKyByb3VuZF85X3VwOgorCQkJCQkqcysrID0gJzknOworCQkJCQln b3RvIHJvdW5kb2ZmOworCQkJCQl9CisJCQkJKnMrKyA9IGRpZyArIDE7CisJCQkJZ290byByZXQ7 CisJCQkJfQorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKyBrZWVwX2RpZzoKKyNlbmRpZgorCQkJ KnMrKyA9IGRpZzsKKwkJCWlmIChpID09IGlsaW0pCisJCQkJYnJlYWs7CisJCQliID0gbXVsdGFk ZChiLCAxMCwgMCk7CisJCQlpZiAoYiA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlp ZiAobWxvID09IG1oaSkgeworCQkJCW1sbyA9IG1oaSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJ CQkJaWYgKG1sbyA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCWVsc2Ug eworCQkJCW1sbyA9IG11bHRhZGQobWxvLCAxMCwgMCk7CisJCQkJaWYgKG1sbyA9PSBOVUxMKQor CQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCW1oaSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJCQkJ aWYgKG1oaSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCX0KKwkJfQor CWVsc2UKKwkJZm9yKGkgPSAxOzsgaSsrKSB7CisJCQkqcysrID0gZGlnID0gcXVvcmVtKGIsUykg KyAnMCc7CisJCQlpZiAoIWItPnhbMF0gJiYgYi0+d2RzIDw9IDEpIHsKKyNpZmRlZiBTRVRfSU5F WEFDVAorCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJ aWYgKGkgPj0gaWxpbSkKKwkJCQlicmVhazsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKKwkJ CWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKworCS8qIFJvdW5kIG9m ZiBsYXN0IGRpZ2l0ICovCisKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJc3dpdGNoKFJvdW5k aW5nKSB7CisJICBjYXNlIDA6IGdvdG8gdHJpbXplcm9zOworCSAgY2FzZSAyOiBnb3RvIHJvdW5k b2ZmOworCSAgfQorI2VuZGlmCisJYiA9IGxzaGlmdChiLCAxKTsKKwlpZiAoYiA9PSBOVUxMKQor CQlyZXR1cm4gKE5VTEwpOworCWogPSBjbXAoYiwgUyk7CisjaWZkZWYgUk9VTkRfQklBU0VECisJ aWYgKGogPj0gMCkKKyNlbHNlCisJaWYgKGogPiAwIHx8IChqID09IDAgJiYgZGlnICYgMSkpCisj ZW5kaWYKKwkJeworIHJvdW5kb2ZmOgorCQl3aGlsZSgqLS1zID09ICc5JykKKwkJCWlmIChzID09 IHMwKSB7CisJCQkJaysrOworCQkJCSpzKysgPSAnMSc7CisJCQkJZ290byByZXQ7CisJCQkJfQor CQkrKypzKys7CisJCX0KKwllbHNlIHsKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisgdHJpbXpl cm9zOgorI2VuZGlmCisJCXdoaWxlKCotLXMgPT0gJzAnKTsKKwkJcysrOworCQl9CisgcmV0Ogor CUJmcmVlKFMpOworCWlmIChtaGkpIHsKKwkJaWYgKG1sbyAmJiBtbG8gIT0gbWhpKQorCQkJQmZy ZWUobWxvKTsKKwkJQmZyZWUobWhpKTsKKwkJfQorIHJldDE6CisjaWZkZWYgU0VUX0lORVhBQ1QK KwlpZiAoaW5leGFjdCkgeworCQlpZiAoIW9sZGluZXhhY3QpIHsKKwkJCXdvcmQwKCZkKSA9IEV4 cF8xICsgKDcwIDw8IEV4cF9zaGlmdCk7CisJCQl3b3JkMSgmZCkgPSAwOworCQkJZHZhbCgmZCkg Kz0gMS47CisJCQl9CisJCX0KKwllbHNlIGlmICghb2xkaW5leGFjdCkKKwkJY2xlYXJfaW5leGFj dCgpOworI2VuZGlmCisJQmZyZWUoYik7CisJKnMgPSAwOworCSpkZWNwdCA9IGsgKyAxOworCWlm IChydmUpCisJCSpydmUgPSBzOworCXJldHVybiBzMDsKK30KZGlmZiAtLWdpdCBhL25ld2xpYi9s aWJjL3N0ZGxpYi9nZHRvYS1nZHRvYS5jIGIvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdkdG9h LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5mZWFlNWFmYTMKLS0tIC9k ZXYvbnVsbAorKysgYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtZ2R0b2EuYwpAQCAtMCwwICsx LDgzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlk IE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IGJ5IEx1Y2VudCBUZWNobm9sb2dp ZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlm eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZv ciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRl ZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBh bmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Np b24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitk b2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBl bnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5p bmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3Jp dHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElF UyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hB TEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJ QUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hB VFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVU SEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElP VVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0Ug T1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFz ZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAor ICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIp LgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworIHN0YXRpYyBCaWdpbnQgKgorI2lmZGVm IEtSX2hlYWRlcnMKK2JpdHN0b2IoYml0cywgbmJpdHMsIGJiaXRzKSBVTG9uZyAqYml0czsgaW50 IG5iaXRzOyBpbnQgKmJiaXRzOworI2Vsc2UKK2JpdHN0b2IoVUxvbmcgKmJpdHMsIGludCBuYml0 cywgaW50ICpiYml0cykKKyNlbmRpZgoreworCWludCBpLCBrOworCUJpZ2ludCAqYjsKKwlVTG9u ZyAqYmUsICp4LCAqeDA7CisKKwlpID0gVUxiaXRzOworCWsgPSAwOworCXdoaWxlKGkgPCBuYml0 cykgeworCQlpIDw8PSAxOworCQlrKys7CisJCX0KKyNpZm5kZWYgUGFja18zMgorCWlmICghaykK KwkJayA9IDE7CisjZW5kaWYKKwliID0gQmFsbG9jKGspOworCWlmIChiID09IE5VTEwpCisJCXJl dHVybiAoTlVMTCk7CisJYmUgPSBiaXRzICsgKChuYml0cyAtIDEpID4+IGtzaGlmdCk7CisJeCA9 IHgwID0gYi0+eDsKKwlkbyB7CisJCSp4KysgPSAqYml0cyAmIEFMTF9PTjsKKyNpZmRlZiBQYWNr XzE2CisJCSp4KysgPSAoKmJpdHMgPj4gMTYpICYgQUxMX09OOworI2VuZGlmCisJCX0gd2hpbGUo KytiaXRzIDw9IGJlKTsKKwlpID0geCAtIHgwOworCXdoaWxlKCF4MFstLWldKQorCQlpZiAoIWkp IHsKKwkJCWItPndkcyA9IDA7CisJCQkqYmJpdHMgPSAwOworCQkJZ290byByZXQ7CisJCQl9CisJ Yi0+d2RzID0gaSArIDE7CisJKmJiaXRzID0gaSpVTGJpdHMgKyAzMiAtIGhpMGJpdHMoYi0+eFtp XSk7CisgcmV0OgorCXJldHVybiBiOworCX0KKworLyogZHRvYSBmb3IgSUVFRSBhcml0aG1ldGlj IChkbWcpOiBjb252ZXJ0IGRvdWJsZSB0byBBU0NJSSBzdHJpbmcuCisgKgorICogSW5zcGlyZWQg YnkgIkhvdyB0byBQcmludCBGbG9hdGluZy1Qb2ludCBOdW1iZXJzIEFjY3VyYXRlbHkiIGJ5Cisg KiBHdXkgTC4gU3RlZWxlLCBKci4gYW5kIEpvbiBMLiBXaGl0ZSBbUHJvYy4gQUNNIFNJR1BMQU4g JzkwLCBwcC4gMTEyLTEyNl0uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqCTEuIFJhdGhlciB0 aGFuIGl0ZXJhdGluZywgd2UgdXNlIGEgc2ltcGxlIG51bWVyaWMgb3ZlcmVzdGltYXRlCisgKgkg ICB0byBkZXRlcm1pbmUgayA9IGZsb29yKGxvZzEwKGQpKS4gIFdlIHNjYWxlIHJlbGV2YW50Cisg KgkgICBxdWFudGl0aWVzIHVzaW5nIE8obG9nMihrKSkgcmF0aGVyIHRoYW4gTyhrKSBtdWx0aXBs aWNhdGlvbnMuCisgKgkyLiBGb3Igc29tZSBtb2RlcyA+IDIgKGNvcnJlc3BvbmRpbmcgdG8gZWN2 dCBhbmQgZmN2dCksIHdlIGRvbid0CisgKgkgICB0cnkgdG8gZ2VuZXJhdGUgZGlnaXRzIHN0cmlj dGx5IGxlZnQgdG8gcmlnaHQuICBJbnN0ZWFkLCB3ZQorICoJICAgY29tcHV0ZSB3aXRoIGZld2Vy IGJpdHMgYW5kIHByb3BhZ2F0ZSB0aGUgY2FycnkgaWYgbmVjZXNzYXJ5CisgKgkgICB3aGVuIHJv dW5kaW5nIHRoZSBmaW5hbCBkaWdpdCB1cC4gIFRoaXMgaXMgb2Z0ZW4gZmFzdGVyLgorICoJMy4g VW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgbmVhcmVzdCwK KyAqCSAgIG1vZGUgMCByZW5kZXJzIDFlMjMgYXMgMWUyMyByYXRoZXIgdGhhbiA5Ljk5OTk5OTk5 OTk5OTk5OWUyMi4KKyAqCSAgIFRoYXQgaXMsIHdlIGFsbG93IGVxdWFsaXR5IGluIHN0b3BwaW5n IHRlc3RzIHdoZW4gdGhlCisgKgkgICByb3VuZC1uZWFyZXN0IHJ1bGUgd2lsbCBnaXZlIHRoZSBz YW1lIGZsb2F0aW5nLXBvaW50IHZhbHVlCisgKgkgICBhcyB3b3VsZCBzYXRpc2ZhY3Rpb24gb2Yg dGhlIHN0b3BwaW5nIHRlc3Qgd2l0aCBzdHJpY3QKKyAqCSAgIGluZXF1YWxpdHkuCisgKgk0LiBX ZSByZW1vdmUgY29tbW9uIGZhY3RvcnMgb2YgcG93ZXJzIG9mIDIgZnJvbSByZWxldmFudAorICoJ ICAgcXVhbnRpdGllcy4KKyAqCTUuIFdoZW4gY29udmVydGluZyBmbG9hdGluZy1wb2ludCBpbnRl Z2VycyBsZXNzIHRoYW4gMWUxNiwKKyAqCSAgIHdlIHVzZSBmbG9hdGluZy1wb2ludCBhcml0aG1l dGljIHJhdGhlciB0aGFuIHJlc29ydGluZworICoJICAgdG8gbXVsdGlwbGUtcHJlY2lzaW9uIGlu dGVnZXJzLgorICoJNi4gV2hlbiBhc2tlZCB0byBwcm9kdWNlIGZld2VyIHRoYW4gMTUgZGlnaXRz LCB3ZSBmaXJzdCB0cnkKKyAqCSAgIHRvIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRo bWV0aWM7IHdlIHJlc29ydCB0bworICoJICAgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgYXJp dGhtZXRpYyBvbmx5IGlmIHdlIGNhbm5vdAorICoJICAgZ3VhcmFudGVlIHRoYXQgdGhlIGZsb2F0 aW5nLXBvaW50IGNhbGN1bGF0aW9uIGhhcyBnaXZlbgorICoJICAgdGhlIGNvcnJlY3RseSByb3Vu ZGVkIHJlc3VsdC4gIEZvciBrIHJlcXVlc3RlZCBkaWdpdHMgYW5kCisgKgkgICAidW5pZm9ybWx5 IiBkaXN0cmlidXRlZCBpbnB1dCwgdGhlIHByb2JhYmlsaXR5IGlzCisgKgkgICBzb21ldGhpbmcg bGlrZSAxMF4oay0xNSkgdGhhdCB3ZSBtdXN0IHJlc29ydCB0byB0aGUgTG9uZworICoJICAgY2Fs Y3VsYXRpb24uCisgKi8KKworIGNoYXIgKgorZ2R0b2EKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGZw aSwgYmUsIGJpdHMsIGtpbmRwLCBtb2RlLCBuZGlnaXRzLCBkZWNwdCwgcnZlKQorCUZQSSAqZnBp OyBpbnQgYmU7IFVMb25nICpiaXRzOworCWludCAqa2luZHAsIG1vZGUsIG5kaWdpdHMsICpkZWNw dDsgY2hhciAqKnJ2ZTsKKyNlbHNlCisJKEZQSSAqZnBpLCBpbnQgYmUsIFVMb25nICpiaXRzLCBp bnQgKmtpbmRwLCBpbnQgbW9kZSwgaW50IG5kaWdpdHMsIGludCAqZGVjcHQsIGNoYXIgKipydmUp CisjZW5kaWYKK3sKKyAvKglBcmd1bWVudHMgbmRpZ2l0cyBhbmQgZGVjcHQgYXJlIHNpbWlsYXIg dG8gdGhlIHNlY29uZCBhbmQgdGhpcmQKKwlhcmd1bWVudHMgb2YgZWN2dCBhbmQgZmN2dDsgdHJh aWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQgZnJvbQorCXRoZSByZXR1cm5lZCBzdHJpbmcuICBJ ZiBub3QgbnVsbCwgKnJ2ZSBpcyBzZXQgdG8gcG9pbnQKKwl0byB0aGUgZW5kIG9mIHRoZSByZXR1 cm4gdmFsdWUuICBJZiBkIGlzICstSW5maW5pdHkgb3IgTmFOLAorCXRoZW4gKmRlY3B0IGlzIHNl dCB0byA5OTk5LgorCWJlID0gZXhwb25lbnQ6IHZhbHVlID0gKGludGVnZXIgcmVwcmVzZW50ZWQg YnkgYml0cykgKiAoMiB0byB0aGUgcG93ZXIgb2YgYmUpLgorCisJbW9kZToKKwkJMCA9PT4gc2hv cnRlc3Qgc3RyaW5nIHRoYXQgeWllbGRzIGQgd2hlbiByZWFkIGluCisJCQlhbmQgcm91bmRlZCB0 byBuZWFyZXN0LgorCQkxID09PiBsaWtlIDAsIGJ1dCB3aXRoIFN0ZWVsZSAmIFdoaXRlIHN0b3Bw aW5nIHJ1bGU7CisJCQllLmcuIHdpdGggSUVFRSBQNzU0IGFyaXRobWV0aWMgLCBtb2RlIDAgZ2l2 ZXMKKwkJCTFlMjMgd2hlcmVhcyBtb2RlIDEgZ2l2ZXMgOS45OTk5OTk5OTk5OTk5OTllMjIuCisJ CTIgPT0+IG1heCgxLG5kaWdpdHMpIHNpZ25pZmljYW50IGRpZ2l0cy4gIFRoaXMgZ2l2ZXMgYQor CQkJcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBvZiBlY3Z0LCBleGNlcHQKKwkJCXRoYXQg dHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQuCisJCTMgPT0+IHRocm91Z2ggbmRpZ2l0cyBw YXN0IHRoZSBkZWNpbWFsIHBvaW50LiAgVGhpcworCQkJZ2l2ZXMgYSByZXR1cm4gdmFsdWUgc2lt aWxhciB0byB0aGF0IGZyb20gZmN2dCwKKwkJCWV4Y2VwdCB0aGF0IHRyYWlsaW5nIHplcm9zIGFy ZSBzdXBwcmVzc2VkLCBhbmQKKwkJCW5kaWdpdHMgY2FuIGJlIG5lZ2F0aXZlLgorCQk0LTkgc2hv dWxkIGdpdmUgdGhlIHNhbWUgcmV0dXJuIHZhbHVlcyBhcyAyLTMsIGkuZS4sCisJCQk0IDw9IG1v ZGUgPD0gOSA9PT4gc2FtZSByZXR1cm4gYXMgbW9kZQorCQkJMiArIChtb2RlICYgMSkuICBUaGVz ZSBtb2RlcyBhcmUgbWFpbmx5IGZvcgorCQkJZGVidWdnaW5nOyBvZnRlbiB0aGV5IHJ1biBzbG93 ZXIgYnV0IHNvbWV0aW1lcworCQkJZmFzdGVyIHRoYW4gbW9kZXMgMi0zLgorCQk0LDUsOCw5ID09 PiBsZWZ0LXRvLXJpZ2h0IGRpZ2l0IGdlbmVyYXRpb24uCisJCTYtOSA9PT4gZG9uJ3QgdHJ5IGZh c3QgZmxvYXRpbmctcG9pbnQgZXN0aW1hdGUKKwkJCShpZiBhcHBsaWNhYmxlKS4KKworCQlWYWx1 ZXMgb2YgbW9kZSBvdGhlciB0aGFuIDAtOSBhcmUgdHJlYXRlZCBhcyBtb2RlIDAuCisKKwkJU3Vm ZmljaWVudCBzcGFjZSBpcyBhbGxvY2F0ZWQgdG8gdGhlIHJldHVybiB2YWx1ZQorCQl0byBob2xk IHRoZSBzdXBwcmVzc2VkIHRyYWlsaW5nIHplcm9zLgorCSovCisKKwlpbnQgYmJpdHMsIGIyLCBi NSwgYmUwLCBkaWcsIGksIGllcHMsIGlsaW0sIGlsaW0wLCBpbGltMSwgaW5leDsKKwlpbnQgaiwg ajEsIGssIGswLCBrX2NoZWNrLCBraW5kLCBsZWZ0cmlnaHQsIG0yLCBtNSwgbmJpdHM7CisJaW50 IHJkaXIsIHMyLCBzNSwgc3BlY19jYXNlLCB0cnlfcXVpY2s7CisJTG9uZyBMOworCUJpZ2ludCAq YiwgKmIxLCAqZGVsdGEsICptbG8sICptaGksICptaGkxLCAqUzsKKwlkb3VibGUgZDIsIGRzOwor CWNoYXIgKnMsICpzMDsKKwlVIGQsIGVwczsKKworI2lmbmRlZiBNVUxUSVBMRV9USFJFQURTCisJ aWYgKGR0b2FfcmVzdWx0KSB7CisJCWZyZWVkdG9hKGR0b2FfcmVzdWx0KTsKKwkJZHRvYV9yZXN1 bHQgPSAwOworCQl9CisjZW5kaWYKKwlpbmV4ID0gMDsKKwlraW5kID0gKmtpbmRwICY9IH5TVFJU T0dfSW5leGFjdDsKKwlzd2l0Y2goa2luZCAmIFNUUlRPR19SZXRtYXNrKSB7CisJICBjYXNlIFNU UlRPR19aZXJvOgorCQlnb3RvIHJldF96ZXJvOworCSAgY2FzZSBTVFJUT0dfTm9ybWFsOgorCSAg Y2FzZSBTVFJUT0dfRGVub3JtYWw6CisJCWJyZWFrOworCSAgY2FzZSBTVFJUT0dfSW5maW5pdGU6 CisJCSpkZWNwdCA9IC0zMjc2ODsKKwkJcmV0dXJuIG5ydl9hbGxvYygiSW5maW5pdHkiLCBydmUs IDgpOworCSAgY2FzZSBTVFJUT0dfTmFOOgorCQkqZGVjcHQgPSAtMzI3Njg7CisJCXJldHVybiBu cnZfYWxsb2MoIk5hTiIsIHJ2ZSwgMyk7CisJICBkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwkgIH0K KwliID0gYml0c3RvYihiaXRzLCBuYml0cyA9IGZwaS0+bmJpdHMsICZiYml0cyk7CisJaWYgKGIg PT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwliZTAgPSBiZTsKKwlpZiAoIChpID0gdHJhaWx6 KGIpKSAhPTApIHsKKwkJcnNoaWZ0KGIsIGkpOworCQliZSArPSBpOworCQliYml0cyAtPSBpOwor CQl9CisJaWYgKCFiLT53ZHMpIHsKKwkJQmZyZWUoYik7CisgcmV0X3plcm86CisJCSpkZWNwdCA9 IDE7CisJCXJldHVybiBucnZfYWxsb2MoIjAiLCBydmUsIDEpOworCQl9CisKKwlkdmFsKCZkKSA9 IGIyZChiLCAmaSk7CisJaSA9IGJlICsgYmJpdHMgLSAxOworCXdvcmQwKCZkKSAmPSBGcmFjX21h c2sxOworCXdvcmQwKCZkKSB8PSBFeHBfMTE7CisjaWZkZWYgSUJNCisJaWYgKCAoaiA9IDExIC0g aGkwYml0cyh3b3JkMCgmZCkgJiBGcmFjX21hc2spKSAhPTApCisJCWR2YWwoJmQpIC89IDEgPDwg ajsKKyNlbmRpZgorCisJLyogbG9nKHgpCX49fiBsb2coMS41KSArICh4LTEuNSkvMS41CisJICog bG9nMTAoeCkJID0gIGxvZyh4KSAvIGxvZygxMCkKKwkgKgkJfj1+IGxvZygxLjUpL2xvZygxMCkg KyAoeC0xLjUpLygxLjUqbG9nKDEwKSkKKwkgKiBsb2cxMCgmZCkgPSAoaS1CaWFzKSpsb2coMikv bG9nKDEwKSArIGxvZzEwKGQyKQorCSAqCisJICogVGhpcyBzdWdnZXN0cyBjb21wdXRpbmcgYW4g YXBwcm94aW1hdGlvbiBrIHRvIGxvZzEwKCZkKSBieQorCSAqCisJICogayA9IChpIC0gQmlhcykq MC4zMDEwMjk5OTU2NjM5ODEKKwkgKgkrICggKGQyLTEuNSkqMC4yODk1Mjk2NTQ2MDIxNjggKyAw LjE3NjA5MTI1OTA1NTY4MSApOworCSAqCisJICogV2Ugd2FudCBrIHRvIGJlIHRvbyBsYXJnZSBy YXRoZXIgdGhhbiB0b28gc21hbGwuCisJICogVGhlIGVycm9yIGluIHRoZSBmaXJzdC1vcmRlciBU YXlsb3Igc2VyaWVzIGFwcHJveGltYXRpb24KKwkgKiBpcyBpbiBvdXIgZmF2b3IsIHNvIHdlIGp1 c3Qgcm91bmQgdXAgdGhlIGNvbnN0YW50IGVub3VnaAorCSAqIHRvIGNvbXBlbnNhdGUgZm9yIGFu eSBlcnJvciBpbiB0aGUgbXVsdGlwbGljYXRpb24gb2YKKwkgKiAoaSAtIEJpYXMpIGJ5IDAuMzAx MDI5OTk1NjYzOTgxOyBzaW5jZSB8aSAtIEJpYXN8IDw9IDEwNzcsCisJICogYW5kIDEwNzcgKiAw LjMwMTAzICogMl4tNTIgfj1+IDcuMmUtMTQsCisJICogYWRkaW5nIDFlLTEzIHRvIHRoZSBjb25z dGFudCB0ZXJtIG1vcmUgdGhhbiBzdWZmaWNlcy4KKwkgKiBIZW5jZSB3ZSBhZGp1c3QgdGhlIGNv bnN0YW50IHRlcm0gdG8gMC4xNzYwOTEyNTkwNTU4LgorCSAqIChXZSBjb3VsZCBnZXQgYSBtb3Jl IGFjY3VyYXRlIGsgYnkgaW52b2tpbmcgbG9nMTAsCisJICogIGJ1dCB0aGlzIGlzIHByb2JhYmx5 IG5vdCB3b3J0aHdoaWxlLikKKwkgKi8KKyNpZmRlZiBJQk0KKwlpIDw8PSAyOworCWkgKz0gajsK KyNlbmRpZgorCWRzID0gKGR2YWwoJmQpLTEuNSkqMC4yODk1Mjk2NTQ2MDIxNjggKyAwLjE3NjA5 MTI1OTA1NTggKyBpKjAuMzAxMDI5OTk1NjYzOTgxOworCisJLyogY29ycmVjdCBhc3N1bXB0aW9u IGFib3V0IGV4cG9uZW50IHJhbmdlICovCisJaWYgKChqID0gaSkgPCAwKQorCQlqID0gLWo7CisJ aWYgKChqIC09IDEwNzcpID4gMCkKKwkJZHMgKz0gaiAqIDdlLTE3OworCisJayA9IChpbnQpZHM7 CisJaWYgKGRzIDwgMC4gJiYgZHMgIT0gaykKKwkJay0tOwkvKiB3YW50IGsgPSBmbG9vcihkcykg Ki8KKwlrX2NoZWNrID0gMTsKKyNpZmRlZiBJQk0KKwlqID0gYmUgKyBiYml0cyAtIDE7CisJaWYg KCAoajEgPSBqICYgMykgIT0wKQorCQlkdmFsKCZkKSAqPSAxIDw8IGoxOworCXdvcmQwKCZkKSAr PSBqIDw8IEV4cF9zaGlmdCAtIDIgJiBFeHBfbWFzazsKKyNlbHNlCisJd29yZDAoJmQpICs9IChi ZSArIGJiaXRzIC0gMSkgPDwgRXhwX3NoaWZ0OworI2VuZGlmCisJaWYgKGsgPj0gMCAmJiBrIDw9 IFRlbl9wbWF4KSB7CisJCWlmIChkdmFsKCZkKSA8IHRlbnNba10pCisJCQlrLS07CisJCWtfY2hl Y2sgPSAwOworCQl9CisJaiA9IGJiaXRzIC0gaSAtIDE7CisJaWYgKGogPj0gMCkgeworCQliMiA9 IDA7CisJCXMyID0gajsKKwkJfQorCWVsc2UgeworCQliMiA9IC1qOworCQlzMiA9IDA7CisJCX0K KwlpZiAoayA+PSAwKSB7CisJCWI1ID0gMDsKKwkJczUgPSBrOworCQlzMiArPSBrOworCQl9CisJ ZWxzZSB7CisJCWIyIC09IGs7CisJCWI1ID0gLWs7CisJCXM1ID0gMDsKKwkJfQorCWlmIChtb2Rl IDwgMCB8fCBtb2RlID4gOSkKKwkJbW9kZSA9IDA7CisJdHJ5X3F1aWNrID0gMTsKKwlpZiAobW9k ZSA+IDUpIHsKKwkJbW9kZSAtPSA0OworCQl0cnlfcXVpY2sgPSAwOworCQl9CisJZWxzZSBpZiAo aSA+PSAtNCAtIEVtaW4gfHwgaSA8IEVtaW4pCisJCXRyeV9xdWljayA9IDA7CisJbGVmdHJpZ2h0 ID0gMTsKKwlpbGltID0gaWxpbTEgPSAtMTsJLyogVmFsdWVzIGZvciBjYXNlcyAwIGFuZCAxOyBk b25lIGhlcmUgdG8gKi8KKwkJCQkvKiBzaWxlbmNlIGVycm9uZW91cyAiZ2NjIC1XYWxsIiB3YXJu aW5nLiAqLworCXN3aXRjaChtb2RlKSB7CisJCWNhc2UgMDoKKwkJY2FzZSAxOgorCQkJaSA9IChp bnQpKG5iaXRzICogLjMwMTAzKSArIDM7CisJCQluZGlnaXRzID0gMDsKKwkJCWJyZWFrOworCQlj YXNlIDI6CisJCQlsZWZ0cmlnaHQgPSAwOworCQkJLyogbm8gYnJlYWsgKi8KKwkJY2FzZSA0Ogor CQkJaWYgKG5kaWdpdHMgPD0gMCkKKwkJCQluZGlnaXRzID0gMTsKKwkJCWlsaW0gPSBpbGltMSA9 IGkgPSBuZGlnaXRzOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWxlZnRyaWdodCA9IDA7CisJ CQkvKiBubyBicmVhayAqLworCQljYXNlIDU6CisJCQlpID0gbmRpZ2l0cyArIGsgKyAxOworCQkJ aWxpbSA9IGk7CisJCQlpbGltMSA9IGkgLSAxOworCQkJaWYgKGkgPD0gMCkKKwkJCQlpID0gMTsK KwkJfQorCXMgPSBzMCA9IHJ2X2FsbG9jKGkpOworCWlmIChzID09IE5VTEwpCisJCXJldHVybiAo TlVMTCk7CisKKwlpZiAoIChyZGlyID0gZnBpLT5yb3VuZGluZyAtIDEpICE9MCkgeworCQlpZiAo cmRpciA8IDApCisJCQlyZGlyID0gMjsKKwkJaWYgKGtpbmQgJiBTVFJUT0dfTmVnKQorCQkJcmRp ciA9IDMgLSByZGlyOworCQl9CisKKwkvKiBOb3cgcmRpciA9IDAgPT0+IHJvdW5kIG5lYXIsIDEg PT0+IHJvdW5kIHVwLCAyID09PiByb3VuZCBkb3duLiAqLworCisJaWYgKGlsaW0gPj0gMCAmJiBp bGltIDw9IFF1aWNrX21heCAmJiB0cnlfcXVpY2sgJiYgIXJkaXIKKyNpZm5kZWYgSU1QUkVDSVNF X0lORVhBQ1QKKwkJJiYgayA9PSAwCisjZW5kaWYKKwkJCQkJCQkJKSB7CisKKwkJLyogVHJ5IHRv IGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuICovCisKKwkJaSA9IDA7CisJ CWQyID0gZHZhbCgmZCk7CisjaWZkZWYgSUJNCisJCWlmICggKGogPSAxMSAtIGhpMGJpdHMod29y ZDAoJmQpICYgRnJhY19tYXNrKSkgIT0wKQorCQkJZHZhbCgmZCkgLz0gMSA8PCBqOworI2VuZGlm CisJCWswID0gazsKKwkJaWxpbTAgPSBpbGltOworCQlpZXBzID0gMjsgLyogY29uc2VydmF0aXZl ICovCisJCWlmIChrID4gMCkgeworCQkJZHMgPSB0ZW5zW2smMHhmXTsKKwkJCWogPSBrID4+IDQ7 CisJCQlpZiAoaiAmIEJsZXRjaCkgeworCQkJCS8qIHByZXZlbnQgb3ZlcmZsb3dzICovCisJCQkJ aiAmPSBCbGV0Y2ggLSAxOworCQkJCWR2YWwoJmQpIC89IGJpZ3RlbnNbbl9iaWd0ZW5zLTFdOwor CQkJCWllcHMrKzsKKwkJCQl9CisJCQlmb3IoOyBqOyBqID4+PSAxLCBpKyspCisJCQkJaWYgKGog JiAxKSB7CisJCQkJCWllcHMrKzsKKwkJCQkJZHMgKj0gYmlndGVuc1tpXTsKKwkJCQkJfQorCQkJ fQorCQllbHNlICB7CisJCQlkcyA9IDEuOworCQkJaWYgKCAoajEgPSAtaykgIT0wKSB7CisJCQkJ ZHZhbCgmZCkgKj0gdGVuc1tqMSAmIDB4Zl07CisJCQkJZm9yKGogPSBqMSA+PiA0OyBqOyBqID4+ PSAxLCBpKyspCisJCQkJCWlmIChqICYgMSkgeworCQkJCQkJaWVwcysrOworCQkJCQkJZHZhbCgm ZCkgKj0gYmlndGVuc1tpXTsKKwkJCQkJCX0KKwkJCQl9CisJCQl9CisJCWlmIChrX2NoZWNrICYm IGR2YWwoJmQpIDwgMS4gJiYgaWxpbSA+IDApIHsKKwkJCWlmIChpbGltMSA8PSAwKQorCQkJCWdv dG8gZmFzdF9mYWlsZWQ7CisJCQlpbGltID0gaWxpbTE7CisJCQlrLS07CisJCQlkdmFsKCZkKSAq PSAxMC47CisJCQlpZXBzKys7CisJCQl9CisJCWR2YWwoJmVwcykgPSBpZXBzKmR2YWwoJmQpICsg Ny47CisJCXdvcmQwKCZlcHMpIC09IChQLTEpKkV4cF9tc2sxOworCQlpZiAoaWxpbSA9PSAwKSB7 CisJCQlTID0gbWhpID0gMDsKKwkJCWR2YWwoJmQpIC09IDUuOworCQkJaWYgKGR2YWwoJmQpID4g ZHZhbCgmZXBzKSkKKwkJCQlnb3RvIG9uZV9kaWdpdDsKKwkJCWlmIChkdmFsKCZkKSA8IC1kdmFs KCZlcHMpKQorCQkJCWdvdG8gbm9fZGlnaXRzOworCQkJZ290byBmYXN0X2ZhaWxlZDsKKwkJCX0K KyNpZm5kZWYgTm9fbGVmdHJpZ2h0CisJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCS8qIFVzZSBTdGVl bGUgJiBXaGl0ZSBtZXRob2Qgb2Ygb25seQorCQkJICogZ2VuZXJhdGluZyBkaWdpdHMgbmVlZGVk LgorCQkJICovCisJCQlkdmFsKCZlcHMpID0gZHMqMC41L3RlbnNbaWxpbS0xXSAtIGR2YWwoJmVw cyk7CisJCQlmb3IoaSA9IDA7OykgeworCQkJCUwgPSAoTG9uZykoZHZhbCgmZCkvZHMpOworCQkJ CWR2YWwoJmQpIC09IEwqZHM7CisJCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCQlpZiAoZHZh bCgmZCkgPCBkdmFsKCZlcHMpKSB7CisJCQkJCWlmIChkdmFsKCZkKSkKKwkJCQkJCWluZXggPSBT VFJUT0dfSW5leGxvOworCQkJCQlnb3RvIHJldDE7CisJCQkJCX0KKwkJCQlpZiAoZHMgLSBkdmFs KCZkKSA8IGR2YWwoJmVwcykpCisJCQkJCWdvdG8gYnVtcF91cDsKKwkJCQlpZiAoKytpID49IGls aW0pCisJCQkJCWJyZWFrOworCQkJCWR2YWwoJmVwcykgKj0gMTAuOworCQkJCWR2YWwoJmQpICo9 IDEwLjsKKwkJCQl9CisJCQl9CisJCWVsc2UgeworI2VuZGlmCisJCQkvKiBHZW5lcmF0ZSBpbGlt IGRpZ2l0cywgdGhlbiBmaXggdGhlbSB1cC4gKi8KKwkJCWR2YWwoJmVwcykgKj0gdGVuc1tpbGlt LTFdOworCQkJZm9yKGkgPSAxOzsgaSsrLCBkdmFsKCZkKSAqPSAxMC4pIHsKKwkJCQlpZiAoIChM ID0gKExvbmcpKGR2YWwoJmQpL2RzKSkgIT0wKQorCQkJCQlkdmFsKCZkKSAtPSBMKmRzOworCQkJ CSpzKysgPSAnMCcgKyAoaW50KUw7CisJCQkJaWYgKGkgPT0gaWxpbSkgeworCQkJCQlkcyAqPSAw LjU7CisJCQkJCWlmIChkdmFsKCZkKSA+IGRzICsgZHZhbCgmZXBzKSkKKwkJCQkJCWdvdG8gYnVt cF91cDsKKwkJCQkJZWxzZSBpZiAoZHZhbCgmZCkgPCBkcyAtIGR2YWwoJmVwcykpIHsKKwkJCQkJ CWlmIChkdmFsKCZkKSkKKwkJCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJCQkJCWdvdG8g Y2xlYXJfdHJhaWxpbmcwOworCQkJCQkJfQorCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKyNp Zm5kZWYgTm9fbGVmdHJpZ2h0CisJCQl9CisjZW5kaWYKKyBmYXN0X2ZhaWxlZDoKKwkJcyA9IHMw OworCQlkdmFsKCZkKSA9IGQyOworCQlrID0gazA7CisJCWlsaW0gPSBpbGltMDsKKwkJfQorCisJ LyogRG8gd2UgaGF2ZSBhICJzbWFsbCIgaW50ZWdlcj8gKi8KKworCWlmIChiZSA+PSAwICYmIGsg PD0gSW50X21heCkgeworCQkvKiBZZXMuICovCisJCWRzID0gdGVuc1trXTsKKwkJaWYgKG5kaWdp dHMgPCAwICYmIGlsaW0gPD0gMCkgeworCQkJUyA9IG1oaSA9IDA7CisJCQlpZiAoaWxpbSA8IDAg fHwgZHZhbCgmZCkgPD0gNSpkcykKKwkJCQlnb3RvIG5vX2RpZ2l0czsKKwkJCWdvdG8gb25lX2Rp Z2l0OworCQkJfQorCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEwLikgeworCQkJTCA9 IGR2YWwoJmQpIC8gZHM7CisJCQlkdmFsKCZkKSAtPSBMKmRzOworI2lmZGVmIENoZWNrX0ZMVF9S T1VORFMKKwkJCS8qIElmIEZMVF9ST1VORFMgPT0gMiwgTCB3aWxsIHVzdWFsbHkgYmUgaGlnaCBi eSAxICovCisJCQlpZiAoZHZhbCgmZCkgPCAwKSB7CisJCQkJTC0tOworCQkJCWR2YWwoJmQpICs9 IGRzOworCQkJCX0KKyNlbmRpZgorCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCWlmIChkdmFs KCZkKSA9PSAwLikKKwkJCQlicmVhazsKKwkJCWlmIChpID09IGlsaW0pIHsKKwkJCQlpZiAocmRp cikgeworCQkJCQlpZiAocmRpciA9PSAxKQorCQkJCQkJZ290byBidW1wX3VwOworCQkJCQlpbmV4 ID0gU1RSVE9HX0luZXhsbzsKKwkJCQkJZ290byByZXQxOworCQkJCQl9CisJCQkJZHZhbCgmZCkg Kz0gZHZhbCgmZCk7CisjaWZkZWYgUk9VTkRfQklBU0VECisJCQkJaWYgKGR2YWwoJmQpID49IGRz KQorI2Vsc2UKKwkJCQlpZiAoZHZhbCgmZCkgPiBkcyB8fCAoZHZhbCgmZCkgPT0gZHMgJiYgTCAm IDEpKQorI2VuZGlmCisJCQkJCXsKKyBidW1wX3VwOgorCQkJCQlpbmV4ID0gU1RSVE9HX0luZXho aTsKKwkJCQkJd2hpbGUoKi0tcyA9PSAnOScpCisJCQkJCQlpZiAocyA9PSBzMCkgeworCQkJCQkJ CWsrKzsKKwkJCQkJCQkqcyA9ICcwJzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCSsr KnMrKzsKKwkJCQkJfQorCQkJCWVsc2UgeworCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKyBj bGVhcl90cmFpbGluZzA6CisJCQkJCXdoaWxlKCotLXMgPT0gJzAnKXt9CisJCQkJCSsrczsKKwkJ CQkJfQorCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJZ290byByZXQxOworCQl9CisKKwltMiA9 IGIyOworCW01ID0gYjU7CisJbWhpID0gbWxvID0gMDsKKwlpZiAobGVmdHJpZ2h0KSB7CisJCWkg PSBuYml0cyAtIGJiaXRzOworCQlpZiAoYmUgLSBpKysgPCBmcGktPmVtaW4gJiYgbW9kZSAhPSAz ICYmIG1vZGUgIT0gNSkgeworCQkJLyogZGVub3JtYWwgKi8KKwkJCWkgPSBiZSAtIGZwaS0+ZW1p biArIDE7CisJCQlpZiAobW9kZSA+PSAyICYmIGlsaW0gPiAwICYmIGlsaW0gPCBpKQorCQkJCWdv dG8gc21hbGxfaWxpbTsKKwkJCX0KKwkJZWxzZSBpZiAobW9kZSA+PSAyKSB7Cisgc21hbGxfaWxp bToKKwkJCWogPSBpbGltIC0gMTsKKwkJCWlmIChtNSA+PSBqKQorCQkJCW01IC09IGo7CisJCQll bHNlIHsKKwkJCQlzNSArPSBqIC09IG01OworCQkJCWI1ICs9IGo7CisJCQkJbTUgPSAwOworCQkJ CX0KKwkJCWlmICgoaSA9IGlsaW0pIDwgMCkgeworCQkJCW0yIC09IGk7CisJCQkJaSA9IDA7CisJ CQkJfQorCQkJfQorCQliMiArPSBpOworCQlzMiArPSBpOworCQltaGkgPSBpMmIoMSk7CisJCWlm IChtaGkgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwlpZiAobTIgPiAwICYmIHMy ID4gMCkgeworCQlpID0gbTIgPCBzMiA/IG0yIDogczI7CisJCWIyIC09IGk7CisJCW0yIC09IGk7 CisJCXMyIC09IGk7CisJCX0KKwlpZiAoYjUgPiAwKSB7CisJCWlmIChsZWZ0cmlnaHQpIHsKKwkJ CWlmIChtNSA+IDApIHsKKwkJCQltaGkgPSBwb3c1bXVsdChtaGksIG01KTsKKwkJCQlpZiAobWhp ID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJYjEgPSBtdWx0KG1oaSwgYik7CisJ CQkJaWYgKGIxID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJQmZyZWUoYik7CisJ CQkJYiA9IGIxOworCQkJCX0KKwkJCWlmICggKGogPSBiNSAtIG01KSAhPTApIHsKKwkJCQliID0g cG93NW11bHQoYiwgaik7CisJCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsK KwkJCQl9CisJCQl9CisJCWVsc2UgeworCQkJYiA9IHBvdzVtdWx0KGIsIGI1KTsKKwkJCWlmIChi ID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCVMgPSBpMmIoMSk7CisJ aWYgKFMgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlpZiAoczUgPiAwKSB7CisJCVMgPSBw b3c1bXVsdChTLCBzNSk7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9 CisKKwkvKiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93 ZXIgb2YgMi4gKi8KKworCXNwZWNfY2FzZSA9IDA7CisJaWYgKG1vZGUgPCAyKSB7CisJCWlmIChi Yml0cyA9PSAxICYmIGJlMCA+IGZwaS0+ZW1pbiArIDEpIHsKKwkJCS8qIFRoZSBzcGVjaWFsIGNh c2UgKi8KKwkJCWIyKys7CisJCQlzMisrOworCQkJc3BlY19jYXNlID0gMTsKKwkJCX0KKwkJfQor CisJLyogQXJyYW5nZSBmb3IgY29udmVuaWVudCBjb21wdXRhdGlvbiBvZiBxdW90aWVudHM6CisJ ICogc2hpZnQgbGVmdCBpZiBuZWNlc3Nhcnkgc28gZGl2aXNvciBoYXMgNCBsZWFkaW5nIDAgYml0 cy4KKwkgKgorCSAqIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgY29tcHV0ZSBsZWFkaW5nIDI4IGJp dHMgb2YgUyBvbmNlCisJICogYW5kIGZvciBhbGwgYW5kIHBhc3MgdGhlbSBhbmQgYSBzaGlmdCB0 byBxdW9yZW0sIHNvIGl0CisJICogY2FuIGRvIHNoaWZ0cyBhbmQgb3JzIHRvIGNvbXB1dGUgdGhl IG51bWVyYXRvciBmb3IgcS4KKwkgKi8KKwlpID0gKChzNSA/IGhpMGJpdHMoUy0+eFtTLT53ZHMt MV0pIDogVUxiaXRzIC0gMSkgLSBzMiAtIDQpICYga21hc2s7CisJbTIgKz0gaTsKKwlpZiAoKGIy ICs9IGkpID4gMCkgeworCQliID0gbHNoaWZ0KGIsIGIyKTsKKwkJaWYgKGIgPT0gTlVMTCkKKwkJ CXJldHVybiAoTlVMTCk7CisJCX0KKwlpZiAoKHMyICs9IGkpID4gMCkgeworCQlTID0gbHNoaWZ0 KFMsIHMyKTsKKwkJaWYgKFMgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwlpZiAo a19jaGVjaykgeworCQlpZiAoY21wKGIsUykgPCAwKSB7CisJCQlrLS07CisJCQliID0gbXVsdGFk ZChiLCAxMCwgMCk7CS8qIHdlIGJvdGNoZWQgdGhlIGsgZXN0aW1hdGUgKi8KKwkJCWlmIChiID09 IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCQltaGkg PSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQkJcmV0dXJu IChOVUxMKTsKKwkJCQl9CisJCQlpbGltID0gaWxpbTE7CisJCQl9CisJCX0KKwlpZiAoaWxpbSA8 PSAwICYmIG1vZGUgPiAyKSB7CisJCVMgPSBtdWx0YWRkKFMsNSwwKTsKKwkJaWYgKFMgPT0gTlVM TCkKKwkJCXJldHVybiAoTlVMTCk7CisJCWlmIChpbGltIDwgMCB8fCBjbXAoYixTKSA8PSAwKSB7 CisJCQkvKiBubyBkaWdpdHMsIGZjdnQgc3R5bGUgKi8KKyBub19kaWdpdHM6CisJCQlrID0gLTEg LSBuZGlnaXRzOworCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisJCQlnb3RvIHJldDsKKwkJCX0K KyBvbmVfZGlnaXQ6CisJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkqcysrID0gJzEnOworCQlr Kys7CisJCWdvdG8gcmV0OworCQl9CisJaWYgKGxlZnRyaWdodCkgeworCQlpZiAobTIgPiAwKSB7 CisJCQltaGkgPSBsc2hpZnQobWhpLCBtMik7CisJCQlpZiAobWhpID09IE5VTEwpCisJCQkJcmV0 dXJuIChOVUxMKTsKKwkJCX0KKworCQkvKiBDb21wdXRlIG1sbyAtLSBjaGVjayBmb3Igc3BlY2lh bCBjYXNlCisJCSAqIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4KKwkJICovCisK KwkJbWxvID0gbWhpOworCQlpZiAoc3BlY19jYXNlKSB7CisJCQltaGkgPSBCYWxsb2MobWhpLT5r KTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJQmNvcHkobWhp LCBtbG8pOworCQkJbWhpID0gbHNoaWZ0KG1oaSwgMSk7CisJCQlpZiAobWhpID09IE5VTEwpCisJ CQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKworCQlmb3IoaSA9IDE7O2krKykgeworCQkJZGlnID0g cXVvcmVtKGIsUykgKyAnMCc7CisJCQkvKiBEbyB3ZSB5ZXQgaGF2ZSB0aGUgc2hvcnRlc3QgZGVj aW1hbCBzdHJpbmcKKwkJCSAqIHRoYXQgd2lsbCByb3VuZCB0byBkPworCQkJICovCisJCQlqID0g Y21wKGIsIG1sbyk7CisJCQlkZWx0YSA9IGRpZmYoUywgbWhpKTsKKwkJCWlmIChkZWx0YSA9PSBO VUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlqMSA9IGRlbHRhLT5zaWduID8gMSA6IGNtcChi LCBkZWx0YSk7CisJCQlCZnJlZShkZWx0YSk7CisjaWZuZGVmIFJPVU5EX0JJQVNFRAorCQkJaWYg KGoxID09IDAgJiYgIW1vZGUgJiYgIShiaXRzWzBdICYgMSkgJiYgIXJkaXIpIHsKKwkJCQlpZiAo ZGlnID09ICc5JykKKwkJCQkJZ290byByb3VuZF85X3VwOworCQkJCWlmIChqIDw9IDApIHsKKwkJ CQkJaWYgKGItPndkcyA+IDEgfHwgYi0+eFswXSkKKwkJCQkJCWluZXggPSBTVFJUT0dfSW5leGxv OworCQkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWRpZysrOworCQkJCQlpbmV4ID0gU1RSVE9HX0lu ZXhoaTsKKwkJCQkJfQorCQkJCSpzKysgPSBkaWc7CisJCQkJZ290byByZXQ7CisJCQkJfQorI2Vu ZGlmCisJCQlpZiAoaiA8IDAgfHwgKGogPT0gMCAmJiAhbW9kZQorI2lmbmRlZiBST1VORF9CSUFT RUQKKwkJCQkJCQkmJiAhKGJpdHNbMF0gJiAxKQorI2VuZGlmCisJCQkJCSkpIHsKKwkJCQlpZiAo cmRpciAmJiAoYi0+d2RzID4gMSB8fCBiLT54WzBdKSkgeworCQkJCQlpZiAocmRpciA9PSAyKSB7 CisJCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJCQkJCWdvdG8gYWNjZXB0OworCQkJCQkJ fQorCQkJCQl3aGlsZSAoY21wKFMsbWhpKSA+IDApIHsKKwkJCQkJCSpzKysgPSBkaWc7CisJCQkJ CQltaGkxID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJCQkJCWlmIChtaGkxID09IE5VTEwpCisJ CQkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQkJCWlmIChtbG8gPT0gbWhpKQorCQkJCQkJCW1sbyA9 IG1oaTE7CisJCQkJCQltaGkgPSBtaGkxOworCQkJCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOwor CQkJCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCQkJZGlnID0g cXVvcmVtKGIsUykgKyAnMCc7CisJCQkJCQl9CisJCQkJCWlmIChkaWcrKyA9PSAnOScpCisJCQkJ CQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkJCQlnb3Rv IGFjY2VwdDsKKwkJCQkJfQorCQkJCWlmIChqMSA+IDApIHsKKwkJCQkJYiA9IGxzaGlmdChiLCAx KTsKKwkJCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJCWoxID0g Y21wKGIsIFMpOworI2lmZGVmIFJPVU5EX0JJQVNFRAorCQkJCQlpZiAoajEgPj0gMCAvKikqLwor I2Vsc2UKKwkJCQkJaWYgKChqMSA+IDAgfHwgKGoxID09IDAgJiYgZGlnICYgMSkpCisjZW5kaWYK KwkJCQkJJiYgZGlnKysgPT0gJzknKQorCQkJCQkJZ290byByb3VuZF85X3VwOworCQkJCQlpbmV4 ID0gU1RSVE9HX0luZXhoaTsKKwkJCQkJfQorCQkJCWlmIChiLT53ZHMgPiAxIHx8IGItPnhbMF0p CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOworIGFjY2VwdDoKKwkJCQkqcysrID0gZGlnOwor CQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCWlmIChqMSA+IDAgJiYgcmRpciAhPSAyKSB7CisJCQkJ aWYgKGRpZyA9PSAnOScpIHsgLyogcG9zc2libGUgaWYgaSA9PSAxICovCisgcm91bmRfOV91cDoK KwkJCQkJKnMrKyA9ICc5JzsKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQkJCWdvdG8g cm91bmRvZmY7CisJCQkJCX0KKwkJCQlpbmV4ID0gU1RSVE9HX0luZXhoaTsKKwkJCQkqcysrID0g ZGlnICsgMTsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQkqcysrID0gZGlnOworCQkJaWYgKGkg PT0gaWxpbSkKKwkJCQlicmVhazsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKKwkJCWlmIChi ID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWlmIChtbG8gPT0gbWhpKSB7CisJCQkJ bWxvID0gbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJCQlpZiAobWxvID09IE5VTEwpCisJ CQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJbWxvID0gbXVsdGFkZCht bG8sIDEwLCAwKTsKKwkJCQlpZiAobWxvID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJ CQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJCQlpZiAobWhpID09IE5VTEwpCisJCQkJ CXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJfQorCQl9CisJZWxzZQorCQlmb3IoaSA9IDE7OyBp KyspIHsKKwkJCSpzKysgPSBkaWcgPSBxdW9yZW0oYixTKSArICcwJzsKKwkJCWlmIChpID49IGls aW0pCisJCQkJYnJlYWs7CisJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CisJCQlpZiAoYiA9PSBO VUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisKKwkvKiBSb3VuZCBvZmYgbGFzdCBkaWdp dCAqLworCisJaWYgKHJkaXIpIHsKKwkJaWYgKHJkaXIgPT0gMiB8fCAoYi0+d2RzIDw9IDEgJiYg IWItPnhbMF0pKQorCQkJZ290byBjaG9wemVyb3M7CisJCWdvdG8gcm91bmRvZmY7CisJCX0KKwli ID0gbHNoaWZ0KGIsIDEpOworCWlmIChiID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJaiA9 IGNtcChiLCBTKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwlpZiAoaiA+PSAwKQorI2Vsc2UKKwlp ZiAoaiA+IDAgfHwgKGogPT0gMCAmJiBkaWcgJiAxKSkKKyNlbmRpZgorCQl7Cisgcm91bmRvZmY6 CisJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQl3aGlsZSgqLS1zID09ICc5JykKKwkJCWlmIChz ID09IHMwKSB7CisJCQkJaysrOworCQkJCSpzKysgPSAnMSc7CisJCQkJZ290byByZXQ7CisJCQkJ fQorCQkrKypzKys7CisJCX0KKwllbHNlIHsKKyBjaG9wemVyb3M6CisJCWlmIChiLT53ZHMgPiAx IHx8IGItPnhbMF0pCisJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJd2hpbGUoKi0tcyA9PSAn MCcpe30KKwkJKytzOworCQl9CisgcmV0OgorCUJmcmVlKFMpOworCWlmIChtaGkpIHsKKwkJaWYg KG1sbyAmJiBtbG8gIT0gbWhpKQorCQkJQmZyZWUobWxvKTsKKwkJQmZyZWUobWhpKTsKKwkJfQor IHJldDE6CisJQmZyZWUoYik7CisJKnMgPSAwOworCSpkZWNwdCA9IGsgKyAxOworCWlmIChydmUp CisJCSpydmUgPSBzOworCSpraW5kcCB8PSBpbmV4OworCXJldHVybiBzMDsKKwl9CitERUZfU1RS T05HKGdkdG9hKTsKZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1nbWlzYy5j IGIvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdtaXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwLi44MjcwZWY5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXdsaWIvbGli Yy9zdGRsaWIvZ2R0b2EtZ21pc2MuYwpAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUg YXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMp IDE5OTggYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJt aXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJl IGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBp cyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWlt ZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1l IG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRp c2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0 d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNF TlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUs CitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElF UyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0Yg VVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg TkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FS RS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4g R2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBh bmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgor Cisgdm9pZAorI2lmZGVmIEtSX2hlYWRlcnMKK3JzaGlmdChiLCBrKSBCaWdpbnQgKmI7IGludCBr OworI2Vsc2UKK3JzaGlmdChCaWdpbnQgKmIsIGludCBrKQorI2VuZGlmCit7CisJVUxvbmcgKngs ICp4MSwgKnhlLCB5OworCWludCBuOworCisJeCA9IHgxID0gYi0+eDsKKwluID0gayA+PiBrc2hp ZnQ7CisJaWYgKG4gPCBiLT53ZHMpIHsKKwkJeGUgPSB4ICsgYi0+d2RzOworCQl4ICs9IG47CisJ CWlmIChrICY9IGttYXNrKSB7CisJCQluID0gVUxiaXRzIC0gazsKKwkJCXkgPSAqeCsrID4+IGs7 CisJCQl3aGlsZSh4IDwgeGUpIHsKKwkJCQkqeDErKyA9ICh5IHwgKCp4IDw8IG4pKSAmIEFMTF9P TjsKKwkJCQl5ID0gKngrKyA+PiBrOworCQkJCX0KKwkJCWlmICgoKngxID0geSkgIT0wKQorCQkJ CXgxKys7CisJCQl9CisJCWVsc2UKKwkJCXdoaWxlKHggPCB4ZSkKKwkJCQkqeDErKyA9ICp4Kys7 CisJCX0KKwlpZiAoKGItPndkcyA9IHgxIC0gYi0+eCkgPT0gMCkKKwkJYi0+eFswXSA9IDA7CisJ fQorCisgaW50CisjaWZkZWYgS1JfaGVhZGVycwordHJhaWx6KGIpIEJpZ2ludCAqYjsKKyNlbHNl Cit0cmFpbHooQmlnaW50ICpiKQorI2VuZGlmCit7CisJVUxvbmcgTCwgKngsICp4ZTsKKwlpbnQg biA9IDA7CisKKwl4ID0gYi0+eDsKKwl4ZSA9IHggKyBiLT53ZHM7CisJZm9yKG4gPSAwOyB4IDwg eGUgJiYgISp4OyB4KyspCisJCW4gKz0gVUxiaXRzOworCWlmICh4IDwgeGUpIHsKKwkJTCA9ICp4 OworCQluICs9IGxvMGJpdHMoJkwpOworCQl9CisJcmV0dXJuIG47CisJfQpkaWZmIC0tZ2l0IGEv bmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWxkdG9hLmMgYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0 b2EtbGR0b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjcyODJlN2Ez OQotLS0gL2Rldi9udWxsCisrKyBiL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1sZHRvYS5jCkBA IC0wLDAgKzEsMTI0IEBACisvKgkkT3BlbkJTRDogbGR0b2EuYyx2IDEuNCAyMDE2LzAzLzA5IDE2 OjI4OjQ3IGRlcmFhZHQgRXhwICQJKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIERhdmlk IFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBD T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaWVlZS5oPgorI2luY2x1 ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+Cisj aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImdkdG9haW1w LmgiCisKKyNpZiAoTERCTF9NQU5UX0RJRyA+IERCTF9NQU5UX0RJRykKKworLyoKKyAqIGxkdG9h KCkgaXMgYSB3cmFwcGVyIGZvciBnZHRvYSgpIHRoYXQgbWFrZXMgaXQgc21lbGwgbGlrZSBkdG9h KCksCisgKiBleGNlcHQgdGhhdCB0aGUgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnQgaXMgcGFzc2Vk IGJ5IHJlZmVyZW5jZS4KKyAqIFdoZW4gZHRvYSgpIGlzIHBhc3NlZCBhIE5hTiBvciBpbmZpbml0 eSwgaXQgc2V0cyBleHB0IHRvIDk5OTkuCisgKiBIb3dldmVyLCBhIGxvbmcgZG91YmxlIGNvdWxk IGhhdmUgYSB2YWxpZCBleHBvbmVudCBvZiA5OTk5LCBzbyB3ZQorICogdXNlIElOVF9NQVggaW4g bGR0b2EoKSBpbnN0ZWFkLgorICovCitjaGFyICoKK19fbGR0b2EobG9uZyBkb3VibGUgKmxkLCBp bnQgbW9kZSwgaW50IG5kaWdpdHMsIGludCAqZGVjcHQsIGludCAqc2lnbiwKKyAgICBjaGFyICoq cnZlKQoreworCUZQSSBmcGkgPSB7CisJCUxEQkxfTUFOVF9ESUcsCQkJLyogbmJpdHMgKi8KKwkJ TERCTF9NSU5fRVhQIC0gTERCTF9NQU5UX0RJRywJLyogZW1pbiAqLworCQlMREJMX01BWF9FWFAg LSBMREJMX01BTlRfRElHLAkvKiBlbWF4ICovCisJCUZMVF9ST1VORFMsCSAgICAgICAJCS8qIHJv dW5kaW5nICovCisjaWZkZWYgU3VkZGVuX1VuZGVyZmxvdwkvKiB1bnVzZWQsIGJ1dCBjb3JyZWN0 IGFueXdheSAqLworCQkxCisjZWxzZQorCQkwCisjZW5kaWYKKwl9OworCWludCBiZSwga2luZDsK KwljaGFyICpyZXQ7CisJc3RydWN0IGllZWVfZXh0ICpwID0gKHN0cnVjdCBpZWVlX2V4dCAqKWxk OworCXVpbnQzMl90IGJpdHNbKExEQkxfTUFOVF9ESUcgKyAzMSkgLyAzMl07CisJdm9pZCAqdmJp dHMgPSBiaXRzOworCisJLyoKKwkgKiBnZHRvYSBkb2Vzbid0IGtub3cgYW55dGhpbmcgYWJvdXQg dGhlIHNpZ24gb2YgdGhlIG51bWJlciwgc28KKwkgKiBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZl LCB3ZSBuZWVkIHRvIHN3YXAgcm91bmRpbmcgbW9kZXMgb2YKKwkgKiAyICh1cHdhcmRzKSBhbmQg MyAoZG93bndhcmRzKS4KKwkgKi8KKwkqc2lnbiA9IHAtPmV4dF9zaWduOworCWZwaS5yb3VuZGlu ZyBePSAoZnBpLnJvdW5kaW5nID4+IDEpICYgcC0+ZXh0X3NpZ247CisKKwliZSA9IHAtPmV4dF9l eHAgLSAoTERCTF9NQVhfRVhQIC0gMSkgLSAoTERCTF9NQU5UX0RJRyAtIDEpOworCUVYVF9UT19B UlJBWTMyKHAsIGJpdHMpOworCisJc3dpdGNoIChmcGNsYXNzaWZ5KCpsZCkpIHsKKwljYXNlIEZQ X05PUk1BTDoKKwkJa2luZCA9IFNUUlRPR19Ob3JtYWw7CisjaWZkZWYgRVhUX0lNUExJQ0lUX05C SVQKKwkJYml0c1tMREJMX01BTlRfRElHIC8gMzJdIHw9IDEgPDwgKChMREJMX01BTlRfRElHIC0g MSkgJSAzMik7CisjZW5kaWYgLyogRVhUX0lNUExJQ0lUX05CSVQgKi8KKwkJYnJlYWs7CisJY2Fz ZSBGUF9aRVJPOgorCQlraW5kID0gU1RSVE9HX1plcm87CisJCWJyZWFrOworCWNhc2UgRlBfU1VC Tk9STUFMOgorCQlraW5kID0gU1RSVE9HX0Rlbm9ybWFsOworCQliZSsrOworCQlicmVhazsKKwlj YXNlIEZQX0lORklOSVRFOgorCQlraW5kID0gU1RSVE9HX0luZmluaXRlOworCQlicmVhazsKKwlj YXNlIEZQX05BTjoKKwkJa2luZCA9IFNUUlRPR19OYU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CWFib3J0KCk7CisJfQorCisJcmV0ID0gZ2R0b2EoJmZwaSwgYmUsIHZiaXRzLCAma2luZCwgbW9k ZSwgbmRpZ2l0cywgZGVjcHQsIHJ2ZSk7CisJaWYgKCpkZWNwdCA9PSAtMzI3NjgpCisJCSpkZWNw dCA9IElOVF9NQVg7CisJcmV0dXJuIHJldDsKK30KK0RFRl9TVFJPTkcoX19sZHRvYSk7CisKKyNl bHNlICAgLyogKExEQkxfTUFOVF9ESUcgPT0gREJMX01BTlRfRElHKSAqLworCitjaGFyICoKK19f bGR0b2EobG9uZyBkb3VibGUgKmxkLCBpbnQgbW9kZSwgaW50IG5kaWdpdHMsIGludCAqZGVjcHQs IGludCAqc2lnbiwKKyAgICBjaGFyICoqcnZlKQoreworCWNoYXIgKnJldDsKKworCXJldCA9IGR0 b2EoKGRvdWJsZSkqbGQsIG1vZGUsIG5kaWdpdHMsIGRlY3B0LCBzaWduLCBydmUpOworCWlmICgq ZGVjcHQgPT0gOTk5OSkKKwkJKmRlY3B0ID0gSU5UX01BWDsKKwlyZXR1cm4gcmV0OworfQorREVG X1NUUk9ORyhfX2xkdG9hKTsKKworI2VuZGlmICAvKiAoTERCTF9NQU5UX0RJRyA9PSBEQkxfTUFO VF9ESUcpICovCmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtbWlzYy5jIGIv bmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLW1pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAuLjVkMWUwYWQ2OQotLS0gL2Rldi9udWxsCisrKyBiL25ld2xpYi9saWJjL3N0 ZGxpYi9nZHRvYS1taXNjLmMKQEAgLTAsMCArMSw5MTIgQEAKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRo b3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5 OCwgMTk5OSBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Bl cm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdh cmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVl IGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xh aW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5h bWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVy dGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNv ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xV Q0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FS RSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElU SUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP RiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRX QVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBN LiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAi IGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgi CisKKyBzdGF0aWMgQmlnaW50ICpmcmVlbGlzdFtLbWF4KzFdOworI2lmbmRlZiBPbWl0X1ByaXZh dGVfTWVtb3J5CisjaWZuZGVmIFBSSVZBVEVfTUVNCisjZGVmaW5lIFBSSVZBVEVfTUVNIDIzMDQK KyNlbmRpZgorI2RlZmluZSBQUklWQVRFX21lbSAoKFBSSVZBVEVfTUVNK3NpemVvZihkb3VibGUp LTEpL3NpemVvZihkb3VibGUpKQorc3RhdGljIGRvdWJsZSBwcml2YXRlX21lbVtQUklWQVRFX21l bV0sICpwbWVtX25leHQgPSBwcml2YXRlX21lbTsKKyNlbmRpZgorCisjaWZkZWYgTVVMVElQTEVf VEhSRUFEUworX19MT0NLX0lOSVQoc3RhdGljLCBfX2R0b2FfbG9jazApOworX19MT0NLX0lOSVQo c3RhdGljLCBfX2R0b2FfbG9jazEpOworI2VuZGlmCisKKyBCaWdpbnQgKgorQmFsbG9jCisjaWZk ZWYgS1JfaGVhZGVycworCShrKSBpbnQgazsKKyNlbHNlCisJKGludCBrKQorI2VuZGlmCit7CisJ aW50IHg7CisJQmlnaW50ICpydjsKKyNpZm5kZWYgT21pdF9Qcml2YXRlX01lbW9yeQorCXVuc2ln bmVkIGludCBsZW47CisjZW5kaWYKKworCUFDUVVJUkVfRFRPQV9MT0NLKDApOworCS8qIFRoZSBr ID4gS21heCBjYXNlIGRvZXMgbm90IG5lZWQgQUNRVUlSRV9EVE9BX0xPQ0soMCksICovCisJLyog YnV0IHRoaXMgY2FzZSBzZWVtcyB2ZXJ5IHVubGlrZWx5LiAqLworCWlmIChrIDw9IEttYXggJiYg KHJ2ID0gZnJlZWxpc3Rba10pICE9MCkgeworCQlmcmVlbGlzdFtrXSA9IHJ2LT5uZXh0OworCQl9 CisJZWxzZSB7CisJCXggPSAxIDw8IGs7CisjaWZkZWYgT21pdF9Qcml2YXRlX01lbW9yeQorCQly diA9IChCaWdpbnQgKilNQUxMT0Moc2l6ZW9mKEJpZ2ludCkgKyAoeC0xKSpzaXplb2YoVUxvbmcp KTsKKwkJaWYgKHJ2ID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworI2Vsc2UKKwkJbGVuID0g KHNpemVvZihCaWdpbnQpICsgKHgtMSkqc2l6ZW9mKFVMb25nKSArIHNpemVvZihkb3VibGUpIC0g MSkKKwkJCS9zaXplb2YoZG91YmxlKTsKKwkJaWYgKGsgPD0gS21heCAmJiBwbWVtX25leHQgLSBw cml2YXRlX21lbSArIGxlbiA8PSBQUklWQVRFX21lbSkgeworCQkJcnYgPSAoQmlnaW50KilwbWVt X25leHQ7CisJCQlwbWVtX25leHQgKz0gbGVuOworCQkJfQorCQllbHNlIHsKKwkJCXJ2ID0gKEJp Z2ludCopTUFMTE9DKGxlbipzaXplb2YoZG91YmxlKSk7CisJCQlpZiAocnYgPT0gTlVMTCkKKwkJ CQlyZXR1cm4gKE5VTEwpOworCQl9CisjZW5kaWYKKwkJcnYtPmsgPSBrOworCQlydi0+bWF4d2Rz ID0geDsKKwkJfQorCUZSRUVfRFRPQV9MT0NLKDApOworCXJ2LT5zaWduID0gcnYtPndkcyA9IDA7 CisJcmV0dXJuIHJ2OworCX0KKworIHZvaWQKK0JmcmVlCisjaWZkZWYgS1JfaGVhZGVycworCSh2 KSBCaWdpbnQgKnY7CisjZWxzZQorCShCaWdpbnQgKnYpCisjZW5kaWYKK3sKKwlpZiAodikgewor CQlpZiAodi0+ayA+IEttYXgpCisjaWZkZWYgRlJFRQorCQkJRlJFRSh2KTsKKyNlbHNlCisJCQlm cmVlKHYpOworI2VuZGlmCisJCWVsc2UgeworCQkJQUNRVUlSRV9EVE9BX0xPQ0soMCk7CisJCQl2 LT5uZXh0ID0gZnJlZWxpc3Rbdi0+a107CisJCQlmcmVlbGlzdFt2LT5rXSA9IHY7CisJCQlGUkVF X0RUT0FfTE9DSygwKTsKKwkJCX0KKwkJfQorCX0KKworIGludAorbG8wYml0cworI2lmZGVmIEtS X2hlYWRlcnMKKwkoeSkgVUxvbmcgKnk7CisjZWxzZQorCShVTG9uZyAqeSkKKyNlbmRpZgorewor CWludCBrOworCVVMb25nIHggPSAqeTsKKworCWlmICh4ICYgNykgeworCQlpZiAoeCAmIDEpCisJ CQlyZXR1cm4gMDsKKwkJaWYgKHggJiAyKSB7CisJCQkqeSA9IHggPj4gMTsKKwkJCXJldHVybiAx OworCQkJfQorCQkqeSA9IHggPj4gMjsKKwkJcmV0dXJuIDI7CisJCX0KKwlrID0gMDsKKwlpZiAo ISh4ICYgMHhmZmZmKSkgeworCQlrID0gMTY7CisJCXggPj49IDE2OworCQl9CisJaWYgKCEoeCAm IDB4ZmYpKSB7CisJCWsgKz0gODsKKwkJeCA+Pj0gODsKKwkJfQorCWlmICghKHggJiAweGYpKSB7 CisJCWsgKz0gNDsKKwkJeCA+Pj0gNDsKKwkJfQorCWlmICghKHggJiAweDMpKSB7CisJCWsgKz0g MjsKKwkJeCA+Pj0gMjsKKwkJfQorCWlmICghKHggJiAxKSkgeworCQlrKys7CisJCXggPj49IDE7 CisJCWlmICgheCkKKwkJCXJldHVybiAzMjsKKwkJfQorCSp5ID0geDsKKwlyZXR1cm4gazsKKwl9 CisKKyBCaWdpbnQgKgorbXVsdGFkZAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYiwgbSwgYSkgQmln aW50ICpiOyBpbnQgbSwgYTsKKyNlbHNlCisJKEJpZ2ludCAqYiwgaW50IG0sIGludCBhKQkvKiBt dWx0aXBseSBieSBtIGFuZCBhZGQgYSAqLworI2VuZGlmCit7CisJaW50IGksIHdkczsKKyNpZmRl ZiBVTExvbmcKKwlVTG9uZyAqeDsKKwlVTExvbmcgY2FycnksIHk7CisjZWxzZQorCVVMb25nIGNh cnJ5LCAqeCwgeTsKKyNpZmRlZiBQYWNrXzMyCisJVUxvbmcgeGksIHo7CisjZW5kaWYKKyNlbmRp ZgorCUJpZ2ludCAqYjE7CisKKwl3ZHMgPSBiLT53ZHM7CisJeCA9IGItPng7CisJaSA9IDA7CisJ Y2FycnkgPSBhOworCWRvIHsKKyNpZmRlZiBVTExvbmcKKwkJeSA9ICp4ICogKFVMTG9uZyltICsg Y2Fycnk7CisJCWNhcnJ5ID0geSA+PiAzMjsKKwkJKngrKyA9IHkgJiAweGZmZmZmZmZmVUw7Cisj ZWxzZQorI2lmZGVmIFBhY2tfMzIKKwkJeGkgPSAqeDsKKwkJeSA9ICh4aSAmIDB4ZmZmZikgKiBt ICsgY2Fycnk7CisJCXogPSAoeGkgPj4gMTYpICogbSArICh5ID4+IDE2KTsKKwkJY2FycnkgPSB6 ID4+IDE2OworCQkqeCsrID0gKHogPDwgMTYpICsgKHkgJiAweGZmZmYpOworI2Vsc2UKKwkJeSA9 ICp4ICogbSArIGNhcnJ5OworCQljYXJyeSA9IHkgPj4gMTY7CisJCSp4KysgPSB5ICYgMHhmZmZm OworI2VuZGlmCisjZW5kaWYKKwkJfQorCQl3aGlsZSgrK2kgPCB3ZHMpOworCWlmIChjYXJyeSkg eworCQlpZiAod2RzID49IGItPm1heHdkcykgeworCQkJYjEgPSBCYWxsb2MoYi0+aysxKTsKKwkJ CWlmIChiMSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCY29weShiMSwgYik7CisJ CQlCZnJlZShiKTsKKwkJCWIgPSBiMTsKKwkJCX0KKwkJYi0+eFt3ZHMrK10gPSBjYXJyeTsKKwkJ Yi0+d2RzID0gd2RzOworCQl9CisJcmV0dXJuIGI7CisJfQorCisgaW50CitoaTBiaXRzX0QyQQor I2lmZGVmIEtSX2hlYWRlcnMKKwkoeCkgVUxvbmcgeDsKKyNlbHNlCisJKFVMb25nIHgpCisjZW5k aWYKK3sKKwlpbnQgayA9IDA7CisKKwlpZiAoISh4ICYgMHhmZmZmMDAwMCkpIHsKKwkJayA9IDE2 OworCQl4IDw8PSAxNjsKKwkJfQorCWlmICghKHggJiAweGZmMDAwMDAwKSkgeworCQlrICs9IDg7 CisJCXggPDw9IDg7CisJCX0KKwlpZiAoISh4ICYgMHhmMDAwMDAwMCkpIHsKKwkJayArPSA0Owor CQl4IDw8PSA0OworCQl9CisJaWYgKCEoeCAmIDB4YzAwMDAwMDApKSB7CisJCWsgKz0gMjsKKwkJ eCA8PD0gMjsKKwkJfQorCWlmICghKHggJiAweDgwMDAwMDAwKSkgeworCQlrKys7CisJCWlmICgh KHggJiAweDQwMDAwMDAwKSkKKwkJCXJldHVybiAzMjsKKwkJfQorCXJldHVybiBrOworCX0KKwor IEJpZ2ludCAqCitpMmIKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGkpIGludCBpOworI2Vsc2UKKwko aW50IGkpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmI7CisKKwliID0gQmFsbG9jKDEpOworCWlmIChi ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJYi0+eFswXSA9IGk7CisJYi0+d2RzID0gMTsK KwlyZXR1cm4gYjsKKwl9CisKKyBCaWdpbnQgKgorbXVsdAorI2lmZGVmIEtSX2hlYWRlcnMKKwko YSwgYikgQmlnaW50ICphLCAqYjsKKyNlbHNlCisJKEJpZ2ludCAqYSwgQmlnaW50ICpiKQorI2Vu ZGlmCit7CisJQmlnaW50ICpjOworCWludCBrLCB3YSwgd2IsIHdjOworCVVMb25nICp4LCAqeGEs ICp4YWUsICp4YiwgKnhiZSwgKnhjLCAqeGMwOworCVVMb25nIHk7CisjaWZkZWYgVUxMb25nCisJ VUxMb25nIGNhcnJ5LCB6OworI2Vsc2UKKwlVTG9uZyBjYXJyeSwgejsKKyNpZmRlZiBQYWNrXzMy CisJVUxvbmcgejI7CisjZW5kaWYKKyNlbmRpZgorCisJaWYgKGEtPndkcyA8IGItPndkcykgewor CQljID0gYTsKKwkJYSA9IGI7CisJCWIgPSBjOworCQl9CisJayA9IGEtPms7CisJd2EgPSBhLT53 ZHM7CisJd2IgPSBiLT53ZHM7CisJd2MgPSB3YSArIHdiOworCWlmICh3YyA+IGEtPm1heHdkcykK KwkJaysrOworCWMgPSBCYWxsb2Moayk7CisJaWYgKGMgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxM KTsKKwlmb3IoeCA9IGMtPngsIHhhID0geCArIHdjOyB4IDwgeGE7IHgrKykKKwkJKnggPSAwOwor CXhhID0gYS0+eDsKKwl4YWUgPSB4YSArIHdhOworCXhiID0gYi0+eDsKKwl4YmUgPSB4YiArIHdi OworCXhjMCA9IGMtPng7CisjaWZkZWYgVUxMb25nCisJZm9yKDsgeGIgPCB4YmU7IHhjMCsrKSB7 CisJCWlmICggKHkgPSAqeGIrKykgIT0wKSB7CisJCQl4ID0geGE7CisJCQl4YyA9IHhjMDsKKwkJ CWNhcnJ5ID0gMDsKKwkJCWRvIHsKKwkJCQl6ID0gKngrKyAqIChVTExvbmcpeSArICp4YyArIGNh cnJ5OworCQkJCWNhcnJ5ID0geiA+PiAzMjsKKwkJCQkqeGMrKyA9IHogJiAweGZmZmZmZmZmVUw7 CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUpOworCQkJKnhjID0gY2Fycnk7CisJCQl9CisJCX0K KyNlbHNlCisjaWZkZWYgUGFja18zMgorCWZvcig7IHhiIDwgeGJlOyB4YisrLCB4YzArKykgewor CQlpZiAoICh5ID0gKnhiICYgMHhmZmZmKSAhPTApIHsKKwkJCXggPSB4YTsKKwkJCXhjID0geGMw OworCQkJY2FycnkgPSAwOworCQkJZG8geworCQkJCXogPSAoKnggJiAweGZmZmYpICogeSArICgq eGMgJiAweGZmZmYpICsgY2Fycnk7CisJCQkJY2FycnkgPSB6ID4+IDE2OworCQkJCXoyID0gKCp4 KysgPj4gMTYpICogeSArICgqeGMgPj4gMTYpICsgY2Fycnk7CisJCQkJY2FycnkgPSB6MiA+PiAx NjsKKwkJCQlTdG9yZWluYyh4YywgejIsIHopOworCQkJCX0KKwkJCQl3aGlsZSh4IDwgeGFlKTsK KwkJCSp4YyA9IGNhcnJ5OworCQkJfQorCQlpZiAoICh5ID0gKnhiID4+IDE2KSAhPTApIHsKKwkJ CXggPSB4YTsKKwkJCXhjID0geGMwOworCQkJY2FycnkgPSAwOworCQkJejIgPSAqeGM7CisJCQlk byB7CisJCQkJeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsgKCp4YyA+PiAxNikgKyBjYXJyeTsKKwkJ CQljYXJyeSA9IHogPj4gMTY7CisJCQkJU3RvcmVpbmMoeGMsIHosIHoyKTsKKwkJCQl6MiA9ICgq eCsrID4+IDE2KSAqIHkgKyAoKnhjICYgMHhmZmZmKSArIGNhcnJ5OworCQkJCWNhcnJ5ID0gejIg Pj4gMTY7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUpOworCQkJKnhjID0gejI7CisJCQl9CisJ CX0KKyNlbHNlCisJZm9yKDsgeGIgPCB4YmU7IHhjMCsrKSB7CisJCWlmICggKHkgPSAqeGIrKykg IT0wKSB7CisJCQl4ID0geGE7CisJCQl4YyA9IHhjMDsKKwkJCWNhcnJ5ID0gMDsKKwkJCWRvIHsK KwkJCQl6ID0gKngrKyAqIHkgKyAqeGMgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHogPj4gMTY7CisJ CQkJKnhjKysgPSB6ICYgMHhmZmZmOworCQkJCX0KKwkJCQl3aGlsZSh4IDwgeGFlKTsKKwkJCSp4 YyA9IGNhcnJ5OworCQkJfQorCQl9CisjZW5kaWYKKyNlbmRpZgorCWZvcih4YzAgPSBjLT54LCB4 YyA9IHhjMCArIHdjOyB3YyA+IDAgJiYgISotLXhjOyAtLXdjKSA7CisJYy0+d2RzID0gd2M7CisJ cmV0dXJuIGM7CisJfQorCisgc3RhdGljIEJpZ2ludCAqcDVzOworCisgQmlnaW50ICoKK3BvdzVt dWx0CisjaWZkZWYgS1JfaGVhZGVycworCShiLCBrKSBCaWdpbnQgKmI7IGludCBrOworI2Vsc2UK KwkoQmlnaW50ICpiLCBpbnQgaykKKyNlbmRpZgoreworCUJpZ2ludCAqYjEsICpwNSwgKnA1MTsK KwlpbnQgaTsKKwlzdGF0aWMgaW50IHAwNVszXSA9IHsgNSwgMjUsIDEyNSB9OworCisJaWYgKCAo aSA9IGsgJiAzKSAhPTApIHsKKwkJYiA9IG11bHRhZGQoYiwgcDA1W2ktMV0sIDApOworCQlpZiAo YiA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCisJaWYgKCEoayA+Pj0gMikpCisJ CXJldHVybiBiOworCWlmICgocDUgPSBwNXMpID09IDApIHsKKwkJLyogZmlyc3QgdGltZSAqLwor I2lmZGVmIE1VTFRJUExFX1RIUkVBRFMKKwkJQUNRVUlSRV9EVE9BX0xPQ0soMSk7CisJCWlmICgh KHA1ID0gcDVzKSkgeworCQkJcDUgPSBwNXMgPSBpMmIoNjI1KTsKKwkJCWlmIChwNSA9PSBOVUxM KQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlwNS0+bmV4dCA9IDA7CisJCQl9CisJCUZSRUVfRFRP QV9MT0NLKDEpOworI2Vsc2UKKwkJcDUgPSBwNXMgPSBpMmIoNjI1KTsKKwkJaWYgKHA1ID09IE5V TEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQlwNS0+bmV4dCA9IDA7CisjZW5kaWYKKwkJfQorCWZv cig7OykgeworCQlpZiAoayAmIDEpIHsKKwkJCWIxID0gbXVsdChiLCBwNSk7CisJCQlpZiAoYjEg PT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJQmZyZWUoYik7CisJCQliID0gYjE7CisJ CQl9CisJCWlmICghKGsgPj49IDEpKQorCQkJYnJlYWs7CisJCWlmICgocDUxID0gcDUtPm5leHQp ID09IDApIHsKKyNpZmRlZiBNVUxUSVBMRV9USFJFQURTCisJCQlBQ1FVSVJFX0RUT0FfTE9DSygx KTsKKwkJCWlmICghKHA1MSA9IHA1LT5uZXh0KSkgeworCQkJCXA1MSA9IHA1LT5uZXh0ID0gbXVs dChwNSxwNSk7CisJCQkJaWYgKHA1MSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJ CXA1MS0+bmV4dCA9IDA7CisJCQkJfQorCQkJRlJFRV9EVE9BX0xPQ0soMSk7CisjZWxzZQorCQkJ cDUxID0gcDUtPm5leHQgPSBtdWx0KHA1LHA1KTsKKwkJCWlmIChwNTEgPT0gTlVMTCkKKwkJCQly ZXR1cm4gKE5VTEwpOworCQkJcDUxLT5uZXh0ID0gMDsKKyNlbmRpZgorCQkJfQorCQlwNSA9IHA1 MTsKKwkJfQorCXJldHVybiBiOworCX0KKworIEJpZ2ludCAqCitsc2hpZnQKKyNpZmRlZiBLUl9o ZWFkZXJzCisJKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7CisjZWxzZQorCShCaWdpbnQgKmIsIGlu dCBrKQorI2VuZGlmCit7CisJaW50IGksIGsxLCBuLCBuMTsKKwlCaWdpbnQgKmIxOworCVVMb25n ICp4LCAqeDEsICp4ZSwgejsKKworCW4gPSBrID4+IGtzaGlmdDsKKwlrMSA9IGItPms7CisJbjEg PSBuICsgYi0+d2RzICsgMTsKKwlmb3IoaSA9IGItPm1heHdkczsgbjEgPiBpOyBpIDw8PSAxKQor CQlrMSsrOworCWIxID0gQmFsbG9jKGsxKTsKKwlpZiAoYjEgPT0gTlVMTCkKKwkJcmV0dXJuIChO VUxMKTsKKwl4MSA9IGIxLT54OworCWZvcihpID0gMDsgaSA8IG47IGkrKykKKwkJKngxKysgPSAw OworCXggPSBiLT54OworCXhlID0geCArIGItPndkczsKKwlpZiAoayAmPSBrbWFzaykgeworI2lm ZGVmIFBhY2tfMzIKKwkJazEgPSAzMiAtIGs7CisJCXogPSAwOworCQlkbyB7CisJCQkqeDErKyA9 ICp4IDw8IGsgfCB6OworCQkJeiA9ICp4KysgPj4gazE7CisJCQl9CisJCQl3aGlsZSh4IDwgeGUp OworCQlpZiAoKCp4MSA9IHopICE9MCkKKwkJCSsrbjE7CisjZWxzZQorCQlrMSA9IDE2IC0gazsK KwkJeiA9IDA7CisJCWRvIHsKKwkJCSp4MSsrID0gKnggPDwgayAgJiAweGZmZmYgfCB6OworCQkJ eiA9ICp4KysgPj4gazE7CisJCQl9CisJCQl3aGlsZSh4IDwgeGUpOworCQlpZiAoKngxID0geikK KwkJCSsrbjE7CisjZW5kaWYKKwkJfQorCWVsc2UgZG8KKwkJKngxKysgPSAqeCsrOworCQl3aGls ZSh4IDwgeGUpOworCWIxLT53ZHMgPSBuMSAtIDE7CisJQmZyZWUoYik7CisJcmV0dXJuIGIxOwor CX0KKworIGludAorY21wCisjaWZkZWYgS1JfaGVhZGVycworCShhLCBiKSBCaWdpbnQgKmEsICpi OworI2Vsc2UKKwkoQmlnaW50ICphLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlVTG9uZyAqeGEs ICp4YTAsICp4YiwgKnhiMDsKKwlpbnQgaSwgajsKKworCWkgPSBhLT53ZHM7CisJaiA9IGItPndk czsKKyNpZmRlZiBERUJVRworCWlmIChpID4gMSAmJiAhYS0+eFtpLTFdKQorCQlCdWcoImNtcCBj YWxsZWQgd2l0aCBhLT54W2EtPndkcy0xXSA9PSAwIik7CisJaWYgKGogPiAxICYmICFiLT54W2ot MV0pCisJCUJ1ZygiY21wIGNhbGxlZCB3aXRoIGItPnhbYi0+d2RzLTFdID09IDAiKTsKKyNlbmRp ZgorCWlmIChpIC09IGopCisJCXJldHVybiBpOworCXhhMCA9IGEtPng7CisJeGEgPSB4YTAgKyBq OworCXhiMCA9IGItPng7CisJeGIgPSB4YjAgKyBqOworCWZvcig7OykgeworCQlpZiAoKi0teGEg IT0gKi0teGIpCisJCQlyZXR1cm4gKnhhIDwgKnhiID8gLTEgOiAxOworCQlpZiAoeGEgPD0geGEw KQorCQkJYnJlYWs7CisJCX0KKwlyZXR1cm4gMDsKKwl9CisKKyBCaWdpbnQgKgorZGlmZgorI2lm ZGVmIEtSX2hlYWRlcnMKKwkoYSwgYikgQmlnaW50ICphLCAqYjsKKyNlbHNlCisJKEJpZ2ludCAq YSwgQmlnaW50ICpiKQorI2VuZGlmCit7CisJQmlnaW50ICpjOworCWludCBpLCB3YSwgd2I7CisJ VUxvbmcgKnhhLCAqeGFlLCAqeGIsICp4YmUsICp4YzsKKyNpZmRlZiBVTExvbmcKKwlVTExvbmcg Ym9ycm93LCB5OworI2Vsc2UKKwlVTG9uZyBib3Jyb3csIHk7CisjaWZkZWYgUGFja18zMgorCVVM b25nIHo7CisjZW5kaWYKKyNlbmRpZgorCisJaSA9IGNtcChhLGIpOworCWlmICghaSkgeworCQlj ID0gQmFsbG9jKDApOworCQlpZiAoYyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJYy0+ d2RzID0gMTsKKwkJYy0+eFswXSA9IDA7CisJCXJldHVybiBjOworCQl9CisJaWYgKGkgPCAwKSB7 CisJCWMgPSBhOworCQlhID0gYjsKKwkJYiA9IGM7CisJCWkgPSAxOworCQl9CisJZWxzZQorCQlp ID0gMDsKKwljID0gQmFsbG9jKGEtPmspOworCWlmIChjID09IE5VTEwpCisJCXJldHVybiAoTlVM TCk7CisJYy0+c2lnbiA9IGk7CisJd2EgPSBhLT53ZHM7CisJeGEgPSBhLT54OworCXhhZSA9IHhh ICsgd2E7CisJd2IgPSBiLT53ZHM7CisJeGIgPSBiLT54OworCXhiZSA9IHhiICsgd2I7CisJeGMg PSBjLT54OworCWJvcnJvdyA9IDA7CisjaWZkZWYgVUxMb25nCisJZG8geworCQl5ID0gKFVMTG9u ZykqeGErKyAtICp4YisrIC0gYm9ycm93OworCQlib3Jyb3cgPSB5ID4+IDMyICYgMVVMOworCQkq eGMrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisJCX0KKwkJd2hpbGUoeGIgPCB4YmUpOworCXdoaWxl KHhhIDwgeGFlKSB7CisJCXkgPSAqeGErKyAtIGJvcnJvdzsKKwkJYm9ycm93ID0geSA+PiAzMiAm IDFVTDsKKwkJKnhjKysgPSB5ICYgMHhmZmZmZmZmZlVMOworCQl9CisjZWxzZQorI2lmZGVmIFBh Y2tfMzIKKwlkbyB7CisJCXkgPSAoKnhhICYgMHhmZmZmKSAtICgqeGIgJiAweGZmZmYpIC0gYm9y cm93OworCQlib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQl6ID0gKCp4YSsrID4+IDE2 KSAtICgqeGIrKyA+PiAxNikgLSBib3Jyb3c7CisJCWJvcnJvdyA9ICh6ICYgMHgxMDAwMCkgPj4g MTY7CisJCVN0b3JlaW5jKHhjLCB6LCB5KTsKKwkJfQorCQl3aGlsZSh4YiA8IHhiZSk7CisJd2hp bGUoeGEgPCB4YWUpIHsKKwkJeSA9ICgqeGEgJiAweGZmZmYpIC0gYm9ycm93OworCQlib3Jyb3cg PSAoeSAmIDB4MTAwMDApID4+IDE2OworCQl6ID0gKCp4YSsrID4+IDE2KSAtIGJvcnJvdzsKKwkJ Ym9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKwkJU3RvcmVpbmMoeGMsIHosIHkpOworCQl9 CisjZWxzZQorCWRvIHsKKwkJeSA9ICp4YSsrIC0gKnhiKysgLSBib3Jyb3c7CisJCWJvcnJvdyA9 ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCSp4YysrID0geSAmIDB4ZmZmZjsKKwkJfQorCQl3aGls ZSh4YiA8IHhiZSk7CisJd2hpbGUoeGEgPCB4YWUpIHsKKwkJeSA9ICp4YSsrIC0gYm9ycm93Owor CQlib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQkqeGMrKyA9IHkgJiAweGZmZmY7CisJ CX0KKyNlbmRpZgorI2VuZGlmCisJd2hpbGUoISotLXhjKQorCQl3YS0tOworCWMtPndkcyA9IHdh OworCXJldHVybiBjOworCX0KKworIGRvdWJsZQorYjJkCisjaWZkZWYgS1JfaGVhZGVycworCShh LCBlKSBCaWdpbnQgKmE7IGludCAqZTsKKyNlbHNlCisJKEJpZ2ludCAqYSwgaW50ICplKQorI2Vu ZGlmCit7CisJVUxvbmcgKnhhLCAqeGEwLCB3LCB5LCB6OworCWludCBrOworCVUgZDsKKyNpZmRl ZiBWQVgKKwlVTG9uZyBkMCwgZDE7CisjZWxzZQorI2RlZmluZSBkMCB3b3JkMCgmZCkKKyNkZWZp bmUgZDEgd29yZDEoJmQpCisjZW5kaWYKKworCXhhMCA9IGEtPng7CisJeGEgPSB4YTAgKyBhLT53 ZHM7CisJeSA9ICotLXhhOworI2lmZGVmIERFQlVHCisJaWYgKCF5KSBCdWcoInplcm8geSBpbiBi MmQiKTsKKyNlbmRpZgorCWsgPSBoaTBiaXRzKHkpOworCSplID0gMzIgLSBrOworI2lmZGVmIFBh Y2tfMzIKKwlpZiAoayA8IEViaXRzKSB7CisJCWQwID0gRXhwXzEgfCB5ID4+IChFYml0cyAtIGsp OworCQl3ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCWQxID0geSA8PCAoKDMyLUViaXRzKSAr IGspIHwgdyA+PiAoRWJpdHMgLSBrKTsKKwkJZ290byByZXRfZDsKKwkJfQorCXogPSB4YSA+IHhh MCA/ICotLXhhIDogMDsKKwlpZiAoayAtPSBFYml0cykgeworCQlkMCA9IEV4cF8xIHwgeSA8PCBr IHwgeiA+PiAoMzIgLSBrKTsKKwkJeSA9IHhhID4geGEwID8gKi0teGEgOiAwOworCQlkMSA9IHog PDwgayB8IHkgPj4gKDMyIC0gayk7CisJCX0KKwllbHNlIHsKKwkJZDAgPSBFeHBfMSB8IHk7CisJ CWQxID0gejsKKwkJfQorI2Vsc2UKKwlpZiAoayA8IEViaXRzICsgMTYpIHsKKwkJeiA9IHhhID4g eGEwID8gKi0teGEgOiAwOworCQlkMCA9IEV4cF8xIHwgeSA8PCBrIC0gRWJpdHMgfCB6ID4+IEVi aXRzICsgMTYgLSBrOworCQl3ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCXkgPSB4YSA+IHhh MCA/ICotLXhhIDogMDsKKwkJZDEgPSB6IDw8IGsgKyAxNiAtIEViaXRzIHwgdyA8PCBrIC0gRWJp dHMgfCB5ID4+IDE2ICsgRWJpdHMgLSBrOworCQlnb3RvIHJldF9kOworCQl9CisJeiA9IHhhID4g eGEwID8gKi0teGEgOiAwOworCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwlrIC09IEViaXRz ICsgMTY7CisJZDAgPSBFeHBfMSB8IHkgPDwgayArIDE2IHwgeiA8PCBrIHwgdyA+PiAxNiAtIGs7 CisJeSA9IHhhID4geGEwID8gKi0teGEgOiAwOworCWQxID0gdyA8PCBrICsgMTYgfCB5IDw8IGs7 CisjZW5kaWYKKyByZXRfZDoKKyNpZmRlZiBWQVgKKwl3b3JkMCgmZCkgPSBkMCA+PiAxNiB8IGQw IDw8IDE2OworCXdvcmQxKCZkKSA9IGQxID4+IDE2IHwgZDEgPDwgMTY7CisjZW5kaWYKKwlyZXR1 cm4gZHZhbCgmZCk7CisJfQorI3VuZGVmIGQwCisjdW5kZWYgZDEKKworIEJpZ2ludCAqCitkMmIK KyNpZmRlZiBLUl9oZWFkZXJzCisJKGRkLCBlLCBiaXRzKSBkb3VibGUgZGQ7IGludCAqZSwgKmJp dHM7CisjZWxzZQorCShkb3VibGUgZGQsIGludCAqZSwgaW50ICpiaXRzKQorI2VuZGlmCit7CisJ QmlnaW50ICpiOworCVUgZDsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCWludCBpOworI2Vu ZGlmCisJaW50IGRlLCBrOworCVVMb25nICp4LCB5LCB6OworI2lmZGVmIFZBWAorCVVMb25nIGQw LCBkMTsKKyNlbHNlCisjZGVmaW5lIGQwIHdvcmQwKCZkKQorI2RlZmluZSBkMSB3b3JkMSgmZCkK KyNlbmRpZgorCWQuZCA9IGRkOworI2lmZGVmIFZBWAorCWQwID0gd29yZDAoJmQpID4+IDE2IHwg d29yZDAoJmQpIDw8IDE2OworCWQxID0gd29yZDEoJmQpID4+IDE2IHwgd29yZDEoJmQpIDw8IDE2 OworI2VuZGlmCisKKyNpZmRlZiBQYWNrXzMyCisJYiA9IEJhbGxvYygxKTsKKyNlbHNlCisJYiA9 IEJhbGxvYygyKTsKKyNlbmRpZgorCWlmIChiID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJ eCA9IGItPng7CisKKwl6ID0gZDAgJiBGcmFjX21hc2s7CisJZDAgJj0gMHg3ZmZmZmZmZjsJLyog Y2xlYXIgc2lnbiBiaXQsIHdoaWNoIHdlIGlnbm9yZSAqLworI2lmZGVmIFN1ZGRlbl9VbmRlcmZs b3cKKwlkZSA9IChpbnQpKGQwID4+IEV4cF9zaGlmdCk7CisjaWZuZGVmIElCTQorCXogfD0gRXhw X21zazExOworI2VuZGlmCisjZWxzZQorCWlmICggKGRlID0gKGludCkoZDAgPj4gRXhwX3NoaWZ0 KSkgIT0wKQorCQl6IHw9IEV4cF9tc2sxOworI2VuZGlmCisjaWZkZWYgUGFja18zMgorCWlmICgg KHkgPSBkMSkgIT0wKSB7CisJCWlmICggKGsgPSBsbzBiaXRzKCZ5KSkgIT0wKSB7CisJCQl4WzBd ID0geSB8IHogPDwgKDMyIC0gayk7CisJCQl6ID4+PSBrOworCQkJfQorCQllbHNlCisJCQl4WzBd ID0geTsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQlpID0KKyNlbmRpZgorCQkgICAgIGIt PndkcyA9ICh4WzFdID0geikgIT0wID8gMiA6IDE7CisJCX0KKwllbHNlIHsKKwkJayA9IGxvMGJp dHMoJnopOworCQl4WzBdID0gejsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQlpID0KKyNl bmRpZgorCQkgICAgYi0+d2RzID0gMTsKKwkJayArPSAzMjsKKwkJfQorI2Vsc2UKKwlpZiAoICh5 ID0gZDEpICE9MCkgeworCQlpZiAoIChrID0gbG8wYml0cygmeSkpICE9MCkKKwkJCWlmIChrID49 IDE2KSB7CisJCQkJeFswXSA9IHkgfCB6IDw8IDMyIC0gayAmIDB4ZmZmZjsKKwkJCQl4WzFdID0g eiA+PiBrIC0gMTYgJiAweGZmZmY7CisJCQkJeFsyXSA9IHogPj4gazsKKwkJCQlpID0gMjsKKwkJ CQl9CisJCQllbHNlIHsKKwkJCQl4WzBdID0geSAmIDB4ZmZmZjsKKwkJCQl4WzFdID0geSA+PiAx NiB8IHogPDwgMTYgLSBrICYgMHhmZmZmOworCQkJCXhbMl0gPSB6ID4+IGsgJiAweGZmZmY7CisJ CQkJeFszXSA9IHogPj4gaysxNjsKKwkJCQlpID0gMzsKKwkJCQl9CisJCWVsc2UgeworCQkJeFsw XSA9IHkgJiAweGZmZmY7CisJCQl4WzFdID0geSA+PiAxNjsKKwkJCXhbMl0gPSB6ICYgMHhmZmZm OworCQkJeFszXSA9IHogPj4gMTY7CisJCQlpID0gMzsKKwkJCX0KKwkJfQorCWVsc2UgeworI2lm ZGVmIERFQlVHCisJCWlmICgheikKKwkJCUJ1ZygiWmVybyBwYXNzZWQgdG8gZDJiIik7CisjZW5k aWYKKwkJayA9IGxvMGJpdHMoJnopOworCQlpZiAoayA+PSAxNikgeworCQkJeFswXSA9IHo7CisJ CQlpID0gMDsKKwkJCX0KKwkJZWxzZSB7CisJCQl4WzBdID0geiAmIDB4ZmZmZjsKKwkJCXhbMV0g PSB6ID4+IDE2OworCQkJaSA9IDE7CisJCQl9CisJCWsgKz0gMzI7CisJCX0KKwl3aGlsZSgheFtp XSkKKwkJLS1pOworCWItPndkcyA9IGkgKyAxOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRl cmZsb3cKKwlpZiAoZGUpIHsKKyNlbmRpZgorI2lmZGVmIElCTQorCQkqZSA9IChkZSAtIEJpYXMg LSAoUC0xKSA8PCAyKSArIGs7CisJCSpiaXRzID0gNCpQICsgOCAtIGsgLSBoaTBiaXRzKHdvcmQw KCZkKSAmIEZyYWNfbWFzayk7CisjZWxzZQorCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgazsK KwkJKmJpdHMgPSBQIC0gazsKKyNlbmRpZgorI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCX0K KwllbHNlIHsKKwkJKmUgPSBkZSAtIEJpYXMgLSAoUC0xKSArIDEgKyBrOworI2lmZGVmIFBhY2tf MzIKKwkJKmJpdHMgPSAzMippIC0gaGkwYml0cyh4W2ktMV0pOworI2Vsc2UKKwkJKmJpdHMgPSAo aSsyKSoxNiAtIGhpMGJpdHMoeFtpXSk7CisjZW5kaWYKKwkJfQorI2VuZGlmCisJcmV0dXJuIGI7 CisJfQorI3VuZGVmIGQwCisjdW5kZWYgZDEKKworIENPTlNUIGRvdWJsZQorI2lmZGVmIElFRUVf QXJpdGgKK2JpZ3RlbnNbXSA9IHsgMWUxNiwgMWUzMiwgMWU2NCwgMWUxMjgsIDFlMjU2IH07CitD T05TVCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyLCAxZS02NCwgMWUtMTI4LCAx ZS0yNTYKKwkJfTsKKyNlbHNlCisjaWZkZWYgSUJNCitiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIs IDFlNjQgfTsKK0NPTlNUIGRvdWJsZSB0aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIsIDFlLTY0 IH07CisjZWxzZQorYmlndGVuc1tdID0geyAxZTE2LCAxZTMyIH07CitDT05TVCBkb3VibGUgdGlu eXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyIH07CisjZW5kaWYKKyNlbmRpZgorCisgQ09OU1QgZG91 YmxlCit0ZW5zW10gPSB7CisJCTFlMCwgMWUxLCAxZTIsIDFlMywgMWU0LCAxZTUsIDFlNiwgMWU3 LCAxZTgsIDFlOSwKKwkJMWUxMCwgMWUxMSwgMWUxMiwgMWUxMywgMWUxNCwgMWUxNSwgMWUxNiwg MWUxNywgMWUxOCwgMWUxOSwKKwkJMWUyMCwgMWUyMSwgMWUyMgorI2lmZGVmIFZBWAorCQksIDFl MjMsIDFlMjQKKyNlbmRpZgorCQl9OworCisjaWZkZWYgTk9fU1RSSU5HX0gKKworIGNoYXIgKgor I2lmZGVmIEtSX2hlYWRlcnMKK3N0cmNwX0QyQShhLCBiKSBjaGFyICphOyBjaGFyICpiOworI2Vs c2UKK3N0cmNwX0QyQShjaGFyICphLCBDT05TVCBjaGFyICpiKQorI2VuZGlmCit7CisJd2hpbGUo KCphID0gKmIrKykpCisJCWErKzsKKwlyZXR1cm4gYTsKKwl9CisKKyBDaGFyICoKKyNpZmRlZiBL Ul9oZWFkZXJzCittZW1jcHlfRDJBKGEsIGIsIGxlbikgQ2hhciAqYTsgQ2hhciAqYjsgc2l6ZV90 IGxlbjsKKyNlbHNlCittZW1jcHlfRDJBKHZvaWQgKmExLCB2b2lkICpiMSwgc2l6ZV90IGxlbikK KyNlbmRpZgoreworCWNoYXIgKmEgPSAoY2hhciopYTEsICphZSA9IGEgKyBsZW47CisJY2hhciAq YiA9IChjaGFyKiliMSwgKmEwID0gYTsKKwl3aGlsZShhIDwgYWUpCisJCSphKysgPSAqYisrOwor CXJldHVybiBhMDsKKwl9CisKKyNlbmRpZiAvKiBOT19TVFJJTkdfSCAqLwpkaWZmIC0tZ2l0IGEv bmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLmggYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EuaApp bmRleCAwNzUwNmFhYzEuLjRmMjZkODg1NyAxMDA2NDQKLS0tIGEvbmV3bGliL2xpYmMvc3RkbGli L2dkdG9hLmgKKysrIGIvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLmgKQEAgLTMyLDI1ICszMiw2 MSBAQCBUSElTIFNPRlRXQVJFLgogI2lmbmRlZiBHRFRPQV9IX0lOQ0xVREVECiAjZGVmaW5lIEdE VE9BX0hfSU5DTFVERUQKIAorI2luY2x1ZGUgImFyaXRoLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+ IC8qIGZvciBzaXplX3QgKi8KKworI2RlZmluZSBQUk9UT19OT1JNQUwoeCkKKyNkZWZpbmUgX19C RUdJTl9ISURERU5fREVDTFMKKyNkZWZpbmUgX19FTkRfSElEREVOX0RFQ0xTCisjZGVmaW5lIERF Rl9TVFJPTkcoeCkKKworI2lmbmRlZiBMb25nCisjZGVmaW5lIExvbmcgaW50CisjZW5kaWYKKyNp Zm5kZWYgVUxvbmcKK3R5cGVkZWYgdW5zaWduZWQgTG9uZyBVTG9uZzsKKyNlbmRpZgorI2lmbmRl ZiBVU2hvcnQKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVNob3J0OworI2VuZGlmCisKKyNpZm5k ZWYgQU5TSQorI2lmZGVmIEtSX2hlYWRlcnMKKyNkZWZpbmUgQU5TSSh4KSAoKQorI2RlZmluZSBW b2lkIC8qbm90aGluZyovCisjZWxzZQorI2RlZmluZSBBTlNJKHgpIHgKKyNkZWZpbmUgVm9pZCB2 b2lkCisjZW5kaWYKKyNlbmRpZiAvKiBBTlNJICovCisKKyNpZm5kZWYgQ09OU1QKKyNpZmRlZiBL Ul9oZWFkZXJzCisjZGVmaW5lIENPTlNUIC8qIGJsYW5rICovCisjZWxzZQorI2RlZmluZSBDT05T VCBjb25zdAorI2VuZGlmCisjZW5kaWYgLyogQ09OU1QgKi8KIAogIGVudW0gewkvKiByZXR1cm4g dmFsdWVzIGZyb20gc3RydG9kZyAqLwotCVNUUlRPR19aZXJvCT0gMCwKLQlTVFJUT0dfTm9ybWFs CT0gMSwKLQlTVFJUT0dfRGVub3JtYWwJPSAyLAotCVNUUlRPR19JbmZpbml0ZQk9IDMsCi0JU1RS VE9HX05hTgk9IDQsCi0JU1RSVE9HX05hTmJpdHMJPSA1LAotCVNUUlRPR19Ob051bWJlcgk9IDYs Ci0JU1RSVE9HX1JldG1hc2sJPSA3LAorCVNUUlRPR19aZXJvCT0gMHgwMDAsCisJU1RSVE9HX05v cm1hbAk9IDB4MDAxLAorCVNUUlRPR19EZW5vcm1hbAk9IDB4MDAyLAorCVNUUlRPR19JbmZpbml0 ZQk9IDB4MDAzLAorCVNUUlRPR19OYU4JPSAweDAwNCwKKwlTVFJUT0dfTmFOYml0cwk9IDB4MDA1 LAorCVNUUlRPR19Ob051bWJlcgk9IDB4MDA2LAorCVNUUlRPR19Ob01lbW9yeSA9IDB4MDA3LAor CVNUUlRPR19SZXRtYXNrCT0gMHgwMGYsCiAKIAkvKiBUaGUgZm9sbG93aW5nIG1heSBiZSBvci1l ZCBpbnRvIG9uZSBvZiB0aGUgYWJvdmUgdmFsdWVzLiAqLwogCi0JU1RSVE9HX05lZwk9IDB4MDgs Ci0JU1RSVE9HX0luZXhsbwk9IDB4MTAsCi0JU1RSVE9HX0luZXhoaQk9IDB4MjAsCi0JU1RSVE9H X0luZXhhY3QJPSAweDMwLAotCVNUUlRPR19VbmRlcmZsb3c9IDB4NDAsCi0JU1RSVE9HX092ZXJm bG93CT0gMHg4MAorCVNUUlRPR19JbmV4bG8JPSAweDAxMCwgLyogcmV0dXJuZWQgcmVzdWx0IHJv dW5kZWQgdG93YXJkIHplcm8gKi8KKwlTVFJUT0dfSW5leGhpCT0gMHgwMjAsIC8qIHJldHVybmVk IHJlc3VsdCByb3VuZGVkIGF3YXkgZnJvbSB6ZXJvICovCisJU1RSVE9HX0luZXhhY3QJPSAweDAz MCwKKwlTVFJUT0dfVW5kZXJmbG93PSAweDA0MCwKKwlTVFJUT0dfT3ZlcmZsb3cJPSAweDA4MCwK KwlTVFJUT0dfTmVnCT0gMHgxMDAgLyogZG9lcyBub3QgYWZmZWN0IFNUUlRPR19JbmV4bG8gb3Ig U1RSVE9HX0luZXhoaSAqLwogCX07CiAKICB0eXBlZGVmIHN0cnVjdApAQCAtNjksNiArMTA1LDcw IEBAIGVudW0gewkvKiBGUEkucm91bmRpbmcgdmFsdWVzOiBzYW1lIGFzIEZMVF9ST1VORFMgKi8K IAlGUElfUm91bmRfZG93biA9IDMKIAl9OwogCi0jZW5kaWYgLyogR0RUT0FfSF9JTkNMVURFRCAq LwotCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fVVNob3J0OworCisjaWZkZWYgX19jcGx1c3Bs dXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2V4dGVybiBjaGFyKiBfX2R0b2EgIEFOU0koKGRv dWJsZSBkLCBpbnQgbW9kZSwgaW50IG5kaWdpdHMsIGludCAqZGVjcHQsCisJCQlpbnQgKnNpZ24s IGNoYXIgKipydmUpKTsKK2V4dGVybiBjaGFyKiBfX2dkdG9hIEFOU0koKEZQSSAqZnBpLCBpbnQg YmUsIFVMb25nICpiaXRzLCBpbnQgKmtpbmRwLAorCQkJaW50IG1vZGUsIGludCBuZGlnaXRzLCBp bnQgKmRlY3B0LCBjaGFyICoqcnZlKSk7CitleHRlcm4gdm9pZCBfX2ZyZWVkdG9hIEFOU0koKGNo YXIqKSk7CitleHRlcm4gZmxvYXQgIHN0cnRvZiBBTlNJKChDT05TVCBjaGFyICosIGNoYXIgKiop KTsKK2V4dGVybiBkb3VibGUgc3RydG9kIEFOU0koKENPTlNUIGNoYXIgKiwgY2hhciAqKikpOwor ZXh0ZXJuIGludCBfX3N0cnRvZGcgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgRlBJKiwgTG9u ZyosIFVMb25nKikpOworY2hhcgkqX19oZHRvYShkb3VibGUsIGNvbnN0IGNoYXIgKiwgaW50LCBp bnQgKiwgaW50ICosIGNoYXIgKiopOworY2hhcgkqX19obGR0b2EobG9uZyBkb3VibGUsIGNvbnN0 IGNoYXIgKiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKiopOworY2hhcgkqX19sZHRvYShsb25n IGRvdWJsZSAqLCBpbnQsIGludCwgaW50ICosIGludCAqLCBjaGFyICoqKTsKKworUFJPVE9fTk9S TUFMKF9fZHRvYSk7CitQUk9UT19OT1JNQUwoX19nZHRvYSk7CitQUk9UT19OT1JNQUwoX19mcmVl ZHRvYSk7CitQUk9UT19OT1JNQUwoX19oZHRvYSk7CitQUk9UT19OT1JNQUwoX19obGR0b2EpOwor UFJPVE9fTk9STUFMKF9fbGR0b2EpOworCitfX0JFR0lOX0hJRERFTl9ERUNMUworZXh0ZXJuIGNo YXIqCV9fZ19kZGZtdCAgQU5TSSgoY2hhciosIGRvdWJsZSosIGludCwgc2l6ZV90KSk7CitleHRl cm4gY2hhcioJX19nX2RmbXQgICBBTlNJKChjaGFyKiwgZG91YmxlKiwgaW50LCBzaXplX3QpKTsK K2V4dGVybiBjaGFyKglfX2dfZmZtdCAgIEFOU0koKGNoYXIqLCBmbG9hdCosICBpbnQsIHNpemVf dCkpOworZXh0ZXJuIGNoYXIqCV9fZ19RZm10ICAgQU5TSSgoY2hhciosIHZvaWQqLCAgIGludCwg c2l6ZV90KSk7CitleHRlcm4gY2hhcioJX19nX3hmbXQgICBBTlNJKChjaGFyKiwgdm9pZCosICAg aW50LCBzaXplX3QpKTsKK2V4dGVybiBjaGFyKglfX2dfeExmbXQgIEFOU0koKGNoYXIqLCB2b2lk KiwgICBpbnQsIHNpemVfdCkpOworCitleHRlcm4gaW50CV9fc3RydG9JZCAgQU5TSSgoQ09OU1Qg Y2hhciosIGNoYXIqKiwgZG91YmxlKiwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRvSWRk IEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGRvdWJsZSosIGRvdWJsZSopKTsKK2V4dGVybiBp bnQJX19zdHJ0b0lmICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBmbG9hdCosIGZsb2F0Kikp OworZXh0ZXJuIGludAlfX3N0cnRvSVEgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIHZvaWQq LCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvSXggIEFOU0koKENPTlNUIGNoYXIqLCBjaGFy KiosIHZvaWQqLCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvSXhMIEFOU0koKENPTlNUIGNo YXIqLCBjaGFyKiosIHZvaWQqLCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvcmQgIEFOU0ko KENPTlNUIGNoYXIqLCBjaGFyKiosIGludCwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRv cmRkIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGludCwgZG91YmxlKikpOworZXh0ZXJuIGlu dAlfX3N0cnRvcmYgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGludCwgZmxvYXQqKSk7Citl eHRlcm4gaW50CV9fc3RydG9yUSAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgaW50LCB2b2lk KikpOworZXh0ZXJuIGludAlfX3N0cnRvcnggIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGlu dCwgdm9pZCopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3J4TCBBTlNJKChDT05TVCBjaGFyKiwgY2hh cioqLCBpbnQsIHZvaWQqKSk7CisjaWYgMQorZXh0ZXJuIGludAlfX3N0cnRvZEkgIEFOU0koKENP TlNUIGNoYXIqLCBjaGFyKiosIGRvdWJsZSopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3BkICBBTlNJ KChDT05TVCBjaGFyKiwgY2hhcioqLCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3RydG9wZGQg QU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRv cGYgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGZsb2F0KikpOworZXh0ZXJuIGludAlfX3N0 cnRvcFEgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIHZvaWQqKSk7CitleHRlcm4gaW50CV9f c3RydG9weCAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgdm9pZCopKTsKK2V4dGVybiBpbnQJ X19zdHJ0b3B4TCBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCB2b2lkKikpOworI2Vsc2UKKyNk ZWZpbmUgX19zdHJ0b3BkKHMsc2UseCkgc3RydG9yZChzLHNlLDEseCkKKyNkZWZpbmUgX19zdHJ0 b3BkZChzLHNlLHgpIHN0cnRvcmRkKHMsc2UsMSx4KQorI2RlZmluZSBfX3N0cnRvcGYocyxzZSx4 KSBzdHJ0b3JmKHMsc2UsMSx4KQorI2RlZmluZSBfX3N0cnRvcFEocyxzZSx4KSBzdHJ0b3JRKHMs c2UsMSx4KQorI2RlZmluZSBfX3N0cnRvcHgocyxzZSx4KSBzdHJ0b3J4KHMsc2UsMSx4KQorI2Rl ZmluZSBfX3N0cnRvcHhMKHMsc2UseCkgc3RydG9yeEwocyxzZSwxLHgpCisjZW5kaWYKK19fRU5E X0hJRERFTl9ERUNMUworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8q IEdEVE9BX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRv YWltcC5oIGIvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9haW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwLi5iZjk3NzA5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXdsaWIv bGliYy9zdGRsaWIvZ2R0b2FpbXAuaApAQCAtMCwwICsxLDY3MiBAQAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhl IGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChD KSAxOTk4LTIwMDAgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAor CitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNv ZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0 IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRp c2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRo ZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBh ZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRo ZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgor CitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09G VFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBF TlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExP U1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBT T0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpcyBhIHZhcmlhdGlvbiBvbiBkdG9hLmMg dGhhdCBjb252ZXJ0cyBhcmJpdGFyeSBiaW5hcnkKKyAgIGZsb2F0aW5nLXBvaW50IGZvcm1hdHMg dG8gYW5kIGZyb20gZGVjaW1hbCBub3RhdGlvbi4gIEl0IHVzZXMKKyAgIGRvdWJsZS1wcmVjaXNp b24gYXJpdGhtZXRpYyBpbnRlcm5hbGx5LCBzbyB0aGVyZSBhcmUgc3RpbGwKKyAgIHZhcmlvdXMg I2lmZGVmcyB0aGF0IGFkYXB0IHRoZSBjYWxjdWxhdGlvbnMgdG8gdGhlIG5hdGl2ZQorICAgZG91 YmxlLXByZWNpc2lvbiBhcml0aG1ldGljIChhbnkgb2YgSUVFRSwgVkFYIERfZmxvYXRpbmcsCisg ICBvciBJQk0gbWFpbmZyYW1lIGFyaXRobWV0aWMpLgorCisgICBQbGVhc2Ugc2VuZCBidWcgcmVw b3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAgIHdpdGggIiBhdCAi IGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4KKyAqLworCisvKiBP biBhIG1hY2hpbmUgd2l0aCBJRUVFIGV4dGVuZGVkLXByZWNpc2lvbiByZWdpc3RlcnMsIGl0IGlz CisgKiBuZWNlc3NhcnkgdG8gc3BlY2lmeSBkb3VibGUtcHJlY2lzaW9uICg1My1iaXQpIHJvdW5k aW5nIHByZWNpc2lvbgorICogYmVmb3JlIGludm9raW5nIHN0cnRvZCBvciBkdG9hLiAgSWYgdGhl IG1hY2hpbmUgdXNlcyAodGhlIGVxdWl2YWxlbnQKKyAqIG9mKSBJbnRlbCA4MHg4NyBhcml0aG1l dGljLCB0aGUgY2FsbAorICoJX2NvbnRyb2w4NyhQQ181MywgTUNXX1BDKTsKKyAqIGRvZXMgdGhp cyB3aXRoIG1hbnkgY29tcGlsZXJzLiAgV2hldGhlciB0aGlzIG9yIGFub3RoZXIgY2FsbCBpcwor ICogYXBwcm9wcmlhdGUgZGVwZW5kcyBvbiB0aGUgY29tcGlsZXI7IGZvciB0aGlzIHRvIHdvcmss IGl0IG1heSBiZQorICogbmVjZXNzYXJ5IHRvICNpbmNsdWRlICJmbG9hdC5oIiBvciBhbm90aGVy IHN5c3RlbS1kZXBlbmRlbnQgaGVhZGVyCisgKiBmaWxlLgorICovCisKKy8qIHN0cnRvZCBmb3Ig SUVFRS0sIFZBWC0sIGFuZCBJQk0tYXJpdGhtZXRpYyBtYWNoaW5lcy4KKyAqCisgKiBUaGlzIHN0 cnRvZCByZXR1cm5zIGEgbmVhcmVzdCBtYWNoaW5lIG51bWJlciB0byB0aGUgaW5wdXQgZGVjaW1h bAorICogc3RyaW5nIChvciBzZXRzIGVycm5vIHRvIEVSQU5HRSkuICBXaXRoIElFRUUgYXJpdGht ZXRpYywgdGllcyBhcmUKKyAqIGJyb2tlbiBieSB0aGUgSUVFRSByb3VuZC1ldmVuIHJ1bGUuICBP dGhlcndpc2UgdGllcyBhcmUgYnJva2VuIGJ5CisgKiBiaWFzZWQgcm91bmRpbmcgKGFkZCBoYWxm IGFuZCBjaG9wKS4KKyAqCisgKiBJbnNwaXJlZCBsb29zZWx5IGJ5IFdpbGxpYW0gRC4gQ2xpbmdl cidzIHBhcGVyICJIb3cgdG8gUmVhZCBGbG9hdGluZworICogUG9pbnQgTnVtYmVycyBBY2N1cmF0 ZWx5IiBbUHJvYy4gQUNNIFNJR1BMQU4gJzkwLCBwcC4gMTEyLTEyNl0uCisgKgorICogTW9kaWZp Y2F0aW9uczoKKyAqCisgKgkxLiBXZSBvbmx5IHJlcXVpcmUgSUVFRSwgSUJNLCBvciBWQVggZG91 YmxlLXByZWNpc2lvbgorICoJCWFyaXRobWV0aWMgKG5vdCBJRUVFIGRvdWJsZS1leHRlbmRlZCku CisgKgkyLiBXZSBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIGluIGEgY2Fz ZSB0aGF0CisgKgkJQ2xpbmdlciBtaXNzZWQgLS0gd2hlbiB3ZSdyZSBjb21wdXRpbmcgZCAqIDEw Xm4KKyAqCQlmb3IgYSBzbWFsbCBpbnRlZ2VyIGQgYW5kIHRoZSBpbnRlZ2VyIG4gaXMgbm90IHRv bworICoJCW11Y2ggbGFyZ2VyIHRoYW4gMjIgKHRoZSBtYXhpbXVtIGludGVnZXIgayBmb3Igd2hp Y2gKKyAqCQl3ZSBjYW4gcmVwcmVzZW50IDEwXmsgZXhhY3RseSksIHdlIG1heSBiZSBhYmxlIHRv CisgKgkJY29tcHV0ZSAoZCoxMF5rKSAqIDEwXihlLWspIHdpdGgganVzdCBvbmUgcm91bmRvZmYu CisgKgkzLiBSYXRoZXIgdGhhbiBhIGJpdC1hdC1hLXRpbWUgYWRqdXN0bWVudCBvZiB0aGUgYmlu YXJ5CisgKgkJcmVzdWx0IGluIHRoZSBoYXJkIGNhc2UsIHdlIHVzZSBmbG9hdGluZy1wb2ludAor ICoJCWFyaXRobWV0aWMgdG8gZGV0ZXJtaW5lIHRoZSBhZGp1c3RtZW50IHRvIHdpdGhpbgorICoJ CW9uZSBiaXQ7IG9ubHkgaW4gcmVhbGx5IGhhcmQgY2FzZXMgZG8gd2UgbmVlZCB0bworICoJCWNv bXB1dGUgYSBzZWNvbmQgcmVzaWR1YWwuCisgKgk0LiBCZWNhdXNlIG9mIDMuLCB3ZSBkb24ndCBu ZWVkIGEgbGFyZ2UgdGFibGUgb2YgcG93ZXJzIG9mIDEwCisgKgkJZm9yIHRlbi10by1lIChqdXN0 IHNvbWUgc21hbGwgdGFibGVzLCBlLmcuIG9mIDEwXmsKKyAqCQlmb3IgMCA8PSBrIDw9IDIyKS4K KyAqLworCisvKgorICogI2RlZmluZSBJRUVFXzgwODcgZm9yIElFRUUtYXJpdGhtZXRpYyBtYWNo aW5lcyB3aGVyZSB0aGUgbGVhc3QKKyAqCXNpZ25pZmljYW50IGJ5dGUgaGFzIHRoZSBsb3dlc3Qg YWRkcmVzcy4KKyAqICNkZWZpbmUgSUVFRV9NQzY4ayBmb3IgSUVFRS1hcml0aG1ldGljIG1hY2hp bmVzIHdoZXJlIHRoZSBtb3N0CisgKglzaWduaWZpY2FudCBieXRlIGhhcyB0aGUgbG93ZXN0IGFk ZHJlc3MuCisgKiAjZGVmaW5lIExvbmcgaW50IG9uIG1hY2hpbmVzIHdpdGggMzItYml0IGludHMg YW5kIDY0LWJpdCBsb25ncy4KKyAqICNkZWZpbmUgU3VkZGVuX1VuZGVyZmxvdyBmb3IgSUVFRS1m b3JtYXQgbWFjaGluZXMgd2l0aG91dCBncmFkdWFsCisgKgl1bmRlcmZsb3cgKGkuZS4sIHRoYXQg Zmx1c2ggdG8gemVybyBvbiB1bmRlcmZsb3cpLgorICogI2RlZmluZSBJQk0gZm9yIElCTSBtYWlu ZnJhbWUtc3R5bGUgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4KKyAqICNkZWZpbmUgVkFYIGZv ciBWQVgtc3R5bGUgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyAoRF9mbG9hdGluZykuCisgKiAj ZGVmaW5lIE5vX2xlZnRyaWdodCB0byBvbWl0IGxlZnQtcmlnaHQgbG9naWMgaW4gZmFzdCBmbG9h dGluZy1wb2ludAorICoJY29tcHV0YXRpb24gb2YgZHRvYSBhbmQgZ2R0b2EuICBUaGlzIHdpbGwg Y2F1c2UgbW9kZXMgNCBhbmQgNSB0byBiZQorICoJdHJlYXRlZCB0aGUgc2FtZSBhcyBtb2RlcyAy IGFuZCAzIGZvciBzb21lIGlucHV0cy4KKyAqICNkZWZpbmUgQ2hlY2tfRkxUX1JPVU5EUyBpZiBG TFRfUk9VTkRTIGNhbiBhc3N1bWUgdGhlIHZhbHVlcyAyIG9yIDMuCisgKiAjZGVmaW5lIFJORF9Q Uk9EUVVPVCB0byB1c2Ugcm5kX3Byb2QgYW5kIHJuZF9xdW90IChhc3NlbWJseSByb3V0aW5lcwor ICoJdGhhdCB1c2UgZXh0ZW5kZWQtcHJlY2lzaW9uIGluc3RydWN0aW9ucyB0byBjb21wdXRlIHJv dW5kZWQKKyAqCXByb2R1Y3RzIGFuZCBxdW90aWVudHMpIHdpdGggSUJNLgorICogI2RlZmluZSBS T1VORF9CSUFTRUQgZm9yIElFRUUtZm9ybWF0IHdpdGggYmlhc2VkIHJvdW5kaW5nIGFuZCBhcml0 aG1ldGljCisgKgl0aGF0IHJvdW5kcyB0b3dhcmQgK0luZmluaXR5LgorICogI2RlZmluZSBST1VO RF9CSUFTRURfd2l0aG91dF9Sb3VuZF9VcCBmb3IgSUVFRS1mb3JtYXQgd2l0aCBiaWFzZWQKKyAq CXJvdW5kaW5nIHdoZW4gdGhlIHVuZGVybHlpbmcgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyB1 c2VzCisgKgl1bmJpYXNlZCByb3VuZGluZy4gIFRoaXMgcHJldmVudCB1c2luZyBvcmRpbmFyeSBm bG9hdGluZy1wb2ludAorICoJYXJpdGhtZXRpYyB3aGVuIHRoZSByZXN1bHQgY291bGQgYmUgY29t cHV0ZWQgd2l0aCBvbmUgcm91bmRpbmcgZXJyb3IuCisgKiAjZGVmaW5lIEluYWNjdXJhdGVfRGl2 aWRlIGZvciBJRUVFLWZvcm1hdCB3aXRoIGNvcnJlY3RseSByb3VuZGVkCisgKglwcm9kdWN0cyBi dXQgaW5hY2N1cmF0ZSBxdW90aWVudHMsIGUuZy4sIGZvciBJbnRlbCBpODYwLgorICogI2RlZmlu ZSBOT19MT05HX0xPTkcgb24gbWFjaGluZXMgdGhhdCBkbyBub3QgaGF2ZSBhICJsb25nIGxvbmci CisgKglpbnRlZ2VyIHR5cGUgKG9mID49IDY0IGJpdHMpLiAgT24gc3VjaCBtYWNoaW5lcywgeW91 IGNhbgorICoJI2RlZmluZSBKdXN0XzE2IHRvIHN0b3JlIDE2IGJpdHMgcGVyIDMyLWJpdCBMb25n IHdoZW4gZG9pbmcKKyAqCWhpZ2gtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gIFdoZXRo ZXIgdGhpcyBzcGVlZHMgdGhpbmdzCisgKgl1cCBvciBzbG93cyB0aGluZ3MgZG93biBkZXBlbmRz IG9uIHRoZSBtYWNoaW5lIGFuZCB0aGUgbnVtYmVyCisgKgliZWluZyBjb252ZXJ0ZWQuICBJZiBs b25nIGxvbmcgaXMgYXZhaWxhYmxlIGFuZCB0aGUgbmFtZSBpcworICoJc29tZXRoaW5nIG90aGVy IHRoYW4gImxvbmcgbG9uZyIsICNkZWZpbmUgTGxvbmcgdG8gYmUgdGhlIG5hbWUsCisgKglhbmQg aWYgInVuc2lnbmVkIExsb25nIiBkb2VzIG5vdCB3b3JrIGFzIGFuIHVuc2lnbmVkIHZlcnNpb24g b2YKKyAqCUxsb25nLCAjZGVmaW5lICNVTExvbmcgdG8gYmUgdGhlIGNvcnJlc3BvbmRpbmcgdW5z aWduZWQgdHlwZS4KKyAqICNkZWZpbmUgS1JfaGVhZGVycyBmb3Igb2xkLXN0eWxlIEMgZnVuY3Rp b24gaGVhZGVycy4KKyAqICNkZWZpbmUgQmFkX2Zsb2F0X2ggaWYgeW91ciBzeXN0ZW0gbGFja3Mg YSBmbG9hdC5oIG9yIGlmIGl0IGRvZXMgbm90CisgKglkZWZpbmUgc29tZSBvciBhbGwgb2YgREJM X0RJRywgREJMX01BWF8xMF9FWFAsIERCTF9NQVhfRVhQLAorICoJRkxUX1JBRElYLCBGTFRfUk9V TkRTLCBhbmQgREJMX01BWC4KKyAqICNkZWZpbmUgTUFMTE9DIHlvdXJfbWFsbG9jLCB3aGVyZSB5 b3VyX21hbGxvYyhuKSBhY3RzIGxpa2UgbWFsbG9jKG4pCisgKglpZiBtZW1vcnkgaXMgYXZhaWxh YmxlIGFuZCBvdGhlcndpc2UgZG9lcyBzb21ldGhpbmcgeW91IGRlZW0KKyAqCWFwcHJvcHJpYXRl LiAgSWYgTUFMTE9DIGlzIHVuZGVmaW5lZCwgbWFsbG9jIHdpbGwgYmUgaW52b2tlZAorICoJZGly ZWN0bHkgLS0gYW5kIGFzc3VtZWQgYWx3YXlzIHRvIHN1Y2NlZWQuICBTaW1pbGFybHksIGlmIHlv dQorICoJd2FudCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgc3lzdGVtJ3MgZnJlZSgpIHRvIGJl IGNhbGxlZCB0bworICoJcmVjeWNsZSBtZW1vcnkgYWNxdWlyZWQgZnJvbSBNQUxMT0MsICNkZWZp bmUgRlJFRSB0byBiZSB0aGUKKyAqCW5hbWUgb2YgdGhlIGFsdGVybmF0ZSByb3V0aW5lLiAgKEZS RUUgb3IgZnJlZSBpcyBvbmx5IGNhbGxlZCBpbgorICoJcGF0aG9sb2dpY2FsIGNhc2VzLCBlLmcu LCBpbiBhIGdkdG9hIGNhbGwgYWZ0ZXIgYSBnZHRvYSByZXR1cm4gaW4KKyAqCW1vZGUgMyB3aXRo IHRob3VzYW5kcyBvZiBkaWdpdHMgcmVxdWVzdGVkLikKKyAqICNkZWZpbmUgT21pdF9Qcml2YXRl X01lbW9yeSB0byBvbWl0IGxvZ2ljIChhZGRlZCBKYW4uIDE5OTgpIGZvciBtYWtpbmcKKyAqCW1l bW9yeSBhbGxvY2F0aW9ucyBmcm9tIGEgcHJpdmF0ZSBwb29sIG9mIG1lbW9yeSB3aGVuIHBvc3Np YmxlLgorICoJV2hlbiB1c2VkLCB0aGUgcHJpdmF0ZSBwb29sIGlzIFBSSVZBVEVfTUVNIGJ5dGVz IGxvbmc6ICAyMzA0IGJ5dGVzLAorICoJdW5sZXNzICNkZWZpbmVkIHRvIGJlIGEgZGlmZmVyZW50 IGxlbmd0aC4gIFRoaXMgZGVmYXVsdCBsZW5ndGgKKyAqCXN1ZmZpY2VzIHRvIGdldCByaWQgb2Yg TUFMTE9DIGNhbGxzIGV4Y2VwdCBmb3IgdW51c3VhbCBjYXNlcywKKyAqCXN1Y2ggYXMgZGVjaW1h bC10by1iaW5hcnkgY29udmVyc2lvbiBvZiBhIHZlcnkgbG9uZyBzdHJpbmcgb2YKKyAqCWRpZ2l0 cy4gIFdoZW4gY29udmVydGluZyBJRUVFIGRvdWJsZSBwcmVjaXNpb24gdmFsdWVzLCB0aGUKKyAq CWxvbmdlc3Qgc3RyaW5nIGdkdG9hIGNhbiByZXR1cm4gaXMgYWJvdXQgNzUxIGJ5dGVzIGxvbmcu ICBGb3IKKyAqCWNvbnZlcnNpb25zIGJ5IHN0cnRvZCBvZiBzdHJpbmdzIG9mIDgwMCBkaWdpdHMg YW5kIGFsbCBnZHRvYQorICoJY29udmVyc2lvbnMgb2YgSUVFRSBkb3VibGVzIGluIHNpbmdsZS10 aHJlYWRlZCBleGVjdXRpb25zIHdpdGgKKyAqCTgtYnl0ZSBwb2ludGVycywgUFJJVkFURV9NRU0g Pj0gNzQwMCBhcHBlYXJzIHRvIHN1ZmZpY2U7IHdpdGgKKyAqCTQtYnl0ZSBwb2ludGVycywgUFJJ VkFURV9NRU0gPj0gNzExMiBhcHBlYXJzIGFkZXF1YXRlLgorICogI2RlZmluZSBOT19JTkZOQU5f Q0hFQ0sgaWYgeW91IGRvIG5vdCB3aXNoIHRvIGhhdmUgSU5GTkFOX0NIRUNLCisgKgkjZGVmaW5l ZCBhdXRvbWF0aWNhbGx5IG9uIElFRUUgc3lzdGVtcy4gIE9uIHN1Y2ggc3lzdGVtcywKKyAqCXdo ZW4gSU5GTkFOX0NIRUNLIGlzICNkZWZpbmVkLCBzdHJ0b2QgY2hlY2tzCisgKglmb3IgSW5maW5p dHkgYW5kIE5hTiAoY2FzZSBpbnNlbnNpdGl2ZWx5KS4KKyAqCVdoZW4gSU5GTkFOX0NIRUNLIGlz ICNkZWZpbmVkIGFuZCBOb19IZXhfTmFOIGlzIG5vdCAjZGVmaW5lZCwKKyAqCXN0cnRvZGcgYWxz byBhY2NlcHRzIChjYXNlIGluc2Vuc2l0aXZlbHkpIHN0cmluZ3Mgb2YgdGhlIGZvcm0KKyAqCU5h Tih4KSwgd2hlcmUgeCBpcyBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMgKG9wdGlvbmFs bHkKKyAqCXByZWNlZGVkIGJ5IDB4IG9yIDBYKSBhbmQgc3BhY2VzOyBpZiB0aGVyZSBpcyBvbmx5 IG9uZSBzdHJpbmcKKyAqCW9mIGhleGFkZWNpbWFsIGRpZ2l0cywgaXQgaXMgdGFrZW4gZm9yIHRo ZSBmcmFjdGlvbiBiaXRzIG9mIHRoZQorICoJcmVzdWx0aW5nIE5hTjsgaWYgdGhlcmUgYXJlIHR3 byBvciBtb3JlIHN0cmluZ3Mgb2YgaGV4YWRlY2ltYWwKKyAqCWRpZ2l0cywgZWFjaCBzdHJpbmcg aXMgYXNzaWduZWQgdG8gdGhlIG5leHQgYXZhaWxhYmxlIHNlcXVlbmNlCisgKglvZiAzMi1iaXQg d29yZHMgb2YgZnJhY3Rpb25zIGJpdHMgKHN0YXJ0aW5nIHdpdGggdGhlIG1vc3QKKyAqCXNpZ25p ZmljYW50KSwgcmlnaHQtYWxpZ25lZCBpbiBlYWNoIHNlcXVlbmNlLgorICoJVW5sZXNzIEdEVE9B X05PTl9QRURBTlRJQ19OQU5DSEVDSyBpcyAjZGVmaW5lZCwgaW5wdXQgIk5hTiguLi4pIgorICoJ aXMgY29uc3VtZWQgZXZlbiB3aGVuIC4uLiBoYXMgdGhlIHdyb25nIGZvcm0gKGluIHdoaWNoIGNh c2UgdGhlCisgKgkiKC4uLikiIGlzIGNvbnN1bWVkIGJ1dCBpZ25vcmVkKS4KKyAqICNkZWZpbmUg TVVMVElQTEVfVEhSRUFEUyBpZiB0aGUgc3lzdGVtIG9mZmVycyBwcmVlbXB0aXZlbHkgc2NoZWR1 bGVkCisgKgltdWx0aXBsZSB0aHJlYWRzLiAgSW4gdGhpcyBjYXNlLCB5b3UgbXVzdCBwcm92aWRl IChvciBzdWl0YWJseQorICoJI2RlZmluZSkgdHdvIGxvY2tzLCBhY3F1aXJlZCBieSBBQ1FVSVJF X0RUT0FfTE9DSyhuKSBhbmQgZnJlZWQKKyAqCWJ5IEZSRUVfRFRPQV9MT0NLKG4pIGZvciBuID0g MCBvciAxLiAgKFRoZSBzZWNvbmQgbG9jaywgYWNjZXNzZWQKKyAqCWluIHBvdzVtdWx0LCBlbnN1 cmVzIGxhenkgZXZhbHVhdGlvbiBvZiBvbmx5IG9uZSBjb3B5IG9mIGhpZ2gKKyAqCXBvd2VycyBv ZiA1OyBvbWl0dGluZyB0aGlzIGxvY2sgd291bGQgaW50cm9kdWNlIGEgc21hbGwKKyAqCXByb2Jh YmlsaXR5IG9mIHdhc3RpbmcgbWVtb3J5LCBidXQgd291bGQgb3RoZXJ3aXNlIGJlIGhhcm1sZXNz LikKKyAqCVlvdSBtdXN0IGFsc28gaW52b2tlIGZyZWVkdG9hKHMpIHRvIGZyZWUgdGhlIHZhbHVl IHMgcmV0dXJuZWQgYnkKKyAqCWR0b2EuICBZb3UgbWF5IGRvIHNvIHdoZXRoZXIgb3Igbm90IE1V TFRJUExFX1RIUkVBRFMgaXMgI2RlZmluZWQuCisgKiAjZGVmaW5lIElNUFJFQ0lTRV9JTkVYQUNU IGlmIHlvdSBkbyBub3QgY2FyZSBhYm91dCB0aGUgc2V0dGluZyBvZgorICoJdGhlIFNUUlRPR19J bmV4YWN0IGJpdHMgaW4gdGhlIHNwZWNpYWwgY2FzZSBvZiBkb2luZyBJRUVFIGRvdWJsZQorICoJ cHJlY2lzaW9uIGNvbnZlcnNpb25zICh3aGljaCBjb3VsZCBhbHNvIGJlIGRvbmUgYnkgdGhlIHN0 cnRvZCBpbgorICoJZHRvYS5jKS4KKyAqICNkZWZpbmUgTk9fSEVYX0ZQIHRvIGRpc2FibGUgcmVj b2duaXRpb24gb2YgQzl4J3MgaGV4YWRlY2ltYWwKKyAqCWZsb2F0aW5nLXBvaW50IGNvbnN0YW50 cy4KKyAqICNkZWZpbmUgLUROT19FUlJOTyB0byBzdXBwcmVzcyBzZXR0aW5nIGVycm5vIChpbiBz dHJ0b2QuYyBhbmQKKyAqCXN0cnRvZGcuYykuCisgKiAjZGVmaW5lIE5PX1NUUklOR19IIHRvIHVz ZSBwcml2YXRlIHZlcnNpb25zIG9mIG1lbWNweS4KKyAqCU9uIHNvbWUgSyZSIHN5c3RlbXMsIGl0 IG1heSBhbHNvIGJlIG5lY2Vzc2FyeSB0bworICoJI2RlZmluZSBERUNMQVJFX1NJWkVfVCBpbiB0 aGlzIGNhc2UuCisgKiAjZGVmaW5lIFVTRV9MT0NBTEUgdG8gdXNlIHRoZSBjdXJyZW50IGxvY2Fs ZSdzIGRlY2ltYWxfcG9pbnQgdmFsdWUuCisgKi8KKworI2lmbmRlZiBHRFRPQUlNUF9IX0lOQ0xV REVECisjZGVmaW5lIEdEVE9BSU1QX0hfSU5DTFVERUQKKyNpbmNsdWRlICJnZHRvYS5oIgorI2lm IDAKKyNpbmNsdWRlICJnZF9xbmFuLmgiCisjZW5kaWYKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRT CisjaW5jbHVkZSA8ZmVudi5oPgorI2VuZGlmCisKKyNpZmRlZiBERUJVRworI2luY2x1ZGUgInN0 ZGlvLmgiCisjZGVmaW5lIEJ1Zyh4KSB7ZnByaW50ZihzdGRlcnIsICIlc1xuIiwgeCk7IGV4aXQo MSk7fQorI2VuZGlmCisKKyNpbmNsdWRlICJzdGRsaWIuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIK KworI2lmZGVmIEtSX2hlYWRlcnMKKyNkZWZpbmUgQ2hhciBjaGFyCisjZWxzZQorI2RlZmluZSBD aGFyIHZvaWQKKyNlbmRpZgorCisjaWZkZWYgTUFMTE9DCitleHRlcm4gQ2hhciAqTUFMTE9DIEFO U0koKHNpemVfdCkpOworI2Vsc2UKKyNkZWZpbmUgTUFMTE9DKHgpIF9tYWxsb2NfcihfUkVFTlQs IHgpCisjZW5kaWYKKyNkZWZpbmUgRlJFRSh4KSBfZnJlZV9yKF9SRUVOVCwgeCkKKworI3VuZGVm IElFRUVfQXJpdGgKKyN1bmRlZiBBdm9pZF9VbmRlcmZsb3cKKyNpZmRlZiBJRUVFX01DNjhrCisj ZGVmaW5lIElFRUVfQXJpdGgKKyNlbmRpZgorI2lmZGVmIElFRUVfODA4NworI2RlZmluZSBJRUVF X0FyaXRoCisjZW5kaWYKKworI2luY2x1ZGUgImVycm5vLmgiCisjaWZkZWYgQmFkX2Zsb2F0X2gK KworI2lmZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgREJMX0RJRyAxNQorI2RlZmluZSBEQkxfTUFY XzEwX0VYUCAzMDgKKyNkZWZpbmUgREJMX01BWF9FWFAgMTAyNAorI2RlZmluZSBGTFRfUkFESVgg MgorI2RlZmluZSBEQkxfTUFYIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4CisjZW5kaWYKKworI2lm ZGVmIElCTQorI2RlZmluZSBEQkxfRElHIDE2CisjZGVmaW5lIERCTF9NQVhfMTBfRVhQIDc1Cisj ZGVmaW5lIERCTF9NQVhfRVhQIDYzCisjZGVmaW5lIEZMVF9SQURJWCAxNgorI2RlZmluZSBEQkxf TUFYIDcuMjM3MDA1NTc3MzMyMjYyMWUrNzUKKyNlbmRpZgorCisjaWZkZWYgVkFYCisjZGVmaW5l IERCTF9ESUcgMTYKKyNkZWZpbmUgREJMX01BWF8xMF9FWFAgMzgKKyNkZWZpbmUgREJMX01BWF9F WFAgMTI3CisjZGVmaW5lIEZMVF9SQURJWCAyCisjZGVmaW5lIERCTF9NQVggMS43MDE0MTE4MzQ2 MDQ2OTIzZSszOAorI2RlZmluZSBuX2JpZ3RlbnMgMgorI2VuZGlmCisKKyNpZm5kZWYgTE9OR19N QVgKKyNkZWZpbmUgTE9OR19NQVggMjE0NzQ4MzY0NworI2VuZGlmCisKKyNlbHNlIC8qIGlmbmRl ZiBCYWRfZmxvYXRfaCAqLworI2luY2x1ZGUgImZsb2F0LmgiCisjZW5kaWYgLyogQmFkX2Zsb2F0 X2ggKi8KKworI2lmZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgU2NhbGVfQml0IDB4MTAKKyNkZWZp bmUgbl9iaWd0ZW5zIDUKKyNlbmRpZgorCisjaWZkZWYgSUJNCisjZGVmaW5lIG5fYmlndGVucyAz CisjZW5kaWYKKworI2lmZGVmIFZBWAorI2RlZmluZSBuX2JpZ3RlbnMgMgorI2VuZGlmCisKKyNp Zm5kZWYgX19NQVRIX0hfXworI2luY2x1ZGUgIm1hdGguaCIKKyNlbmRpZgorCisjaWZkZWYgX19j cGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKElFRUVfODA4Nykg KyBkZWZpbmVkKElFRUVfTUM2OGspICsgZGVmaW5lZChWQVgpICsgZGVmaW5lZChJQk0pICE9IDEK K0V4YWN0bHkgb25lIG9mIElFRUVfODA4NywgSUVFRV9NQzY4aywgVkFYLCBvciBJQk0gc2hvdWxk IGJlIGRlZmluZWQuCisjZW5kaWYKKwordHlwZWRlZiB1bmlvbiB7IGRvdWJsZSBkOyBVTG9uZyBM WzJdOyB9IFU7CisKKyNpZmRlZiBJRUVFXzgwODcKKyNkZWZpbmUgd29yZDAoeCkgKHgpLT5MWzFd CisjZGVmaW5lIHdvcmQxKHgpICh4KS0+TFswXQorI2Vsc2UKKyNkZWZpbmUgd29yZDAoeCkgKHgp LT5MWzBdCisjZGVmaW5lIHdvcmQxKHgpICh4KS0+TFsxXQorI2VuZGlmCisjZGVmaW5lIGR2YWwo eCkgKHgpLT5kCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBvZiBTdG9yZWluYyBpcyBh cHByb3ByaWF0ZSBmb3IgTUlQUyBwcm9jZXNzb3JzLgorICogQW4gYWx0ZXJuYXRpdmUgdGhhdCBt aWdodCBiZSBiZXR0ZXIgb24gc29tZSBtYWNoaW5lcyBpcworICogI2RlZmluZSBTdG9yZWluYyhh LGIsYykgKCphKysgPSBiIDw8IDE2IHwgYyAmIDB4ZmZmZikKKyAqLworI2lmIGRlZmluZWQoSUVF RV84MDg3KSArIGRlZmluZWQoVkFYKQorI2RlZmluZSBTdG9yZWluYyhhLGIsYykgKCgodW5zaWdu ZWQgc2hvcnQgKilhKVsxXSA9ICh1bnNpZ25lZCBzaG9ydCliLCBcCisoKHVuc2lnbmVkIHNob3J0 ICopYSlbMF0gPSAodW5zaWduZWQgc2hvcnQpYywgYSsrKQorI2Vsc2UKKyNkZWZpbmUgU3RvcmVp bmMoYSxiLGMpICgoKHVuc2lnbmVkIHNob3J0ICopYSlbMF0gPSAodW5zaWduZWQgc2hvcnQpYiwg XAorKCh1bnNpZ25lZCBzaG9ydCAqKWEpWzFdID0gKHVuc2lnbmVkIHNob3J0KWMsIGErKykKKyNl bmRpZgorCisvKiAjZGVmaW5lIFAgREJMX01BTlRfRElHICovCisvKiBUZW5fcG1heCA9IGZsb29y KFAqbG9nKDIpL2xvZyg1KSkgKi8KKy8qIEJsZXRjaCA9IChoaWdoZXN0IHBvd2VyIG9mIDIgPCBE QkxfTUFYXzEwX0VYUCkgLyAxNiAqLworLyogUXVpY2tfbWF4ID0gZmxvb3IoKFAtMSkqbG9nKEZM VF9SQURJWCkvbG9nKDEwKSAtIDEpICovCisvKiBJbnRfbWF4ID0gZmxvb3IoUCpsb2coRkxUX1JB RElYKS9sb2coMTApIC0gMSkgKi8KKworI2lmZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgRXhwX3No aWZ0ICAyMAorI2RlZmluZSBFeHBfc2hpZnQxIDIwCisjZGVmaW5lIEV4cF9tc2sxICAgIDB4MTAw MDAwCisjZGVmaW5lIEV4cF9tc2sxMSAgIDB4MTAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdm ZjAwMDAwCisjZGVmaW5lIFAgNTMKKyNkZWZpbmUgQmlhcyAxMDIzCisjZGVmaW5lIEVtaW4gKC0x MDIyKQorI2RlZmluZSBFeHBfMSAgMHgzZmYwMDAwMAorI2RlZmluZSBFeHBfMTEgMHgzZmYwMDAw MAorI2RlZmluZSBFYml0cyAxMQorI2RlZmluZSBGcmFjX21hc2sgIDB4ZmZmZmYKKyNkZWZpbmUg RnJhY19tYXNrMSAweGZmZmZmCisjZGVmaW5lIFRlbl9wbWF4IDIyCisjZGVmaW5lIEJsZXRjaCAw eDEwCisjZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZmZmZmYKKyNkZWZpbmUgQm5kcnlfbWFzazEgMHhm ZmZmZgorI2RlZmluZSBMU0IgMQorI2RlZmluZSBTaWduX2JpdCAweDgwMDAwMDAwCisjZGVmaW5l IExvZzJQIDEKKyNkZWZpbmUgVGlueTAgMAorI2RlZmluZSBUaW55MSAxCisjZGVmaW5lIFF1aWNr X21heCAxNAorI2RlZmluZSBJbnRfbWF4IDE0CisKKyNpZm5kZWYgRmx0X1JvdW5kcworI2lmZGVm IEZMVF9ST1VORFMKKyNkZWZpbmUgRmx0X1JvdW5kcyBGTFRfUk9VTkRTCisjZWxzZQorI2RlZmlu ZSBGbHRfUm91bmRzIDEKKyNlbmRpZgorI2VuZGlmIC8qRmx0X1JvdW5kcyovCisKKyNlbHNlIC8q IGlmbmRlZiBJRUVFX0FyaXRoICovCisjdW5kZWYgIFN1ZGRlbl9VbmRlcmZsb3cKKyNkZWZpbmUg U3VkZGVuX1VuZGVyZmxvdworI2lmZGVmIElCTQorI3VuZGVmIEZsdF9Sb3VuZHMKKyNkZWZpbmUg Rmx0X1JvdW5kcyAwCisjZGVmaW5lIEV4cF9zaGlmdCAgMjQKKyNkZWZpbmUgRXhwX3NoaWZ0MSAy NAorI2RlZmluZSBFeHBfbXNrMSAgIDB4MTAwMDAwMAorI2RlZmluZSBFeHBfbXNrMTEgIDB4MTAw MDAwMAorI2RlZmluZSBFeHBfbWFzayAgMHg3ZjAwMDAwMAorI2RlZmluZSBQIDE0CisjZGVmaW5l IEJpYXMgNjUKKyNkZWZpbmUgRXhwXzEgIDB4NDEwMDAwMDAKKyNkZWZpbmUgRXhwXzExIDB4NDEw MDAwMDAKKyNkZWZpbmUgRWJpdHMgOAkvKiBleHBvbmVudCBoYXMgNyBiaXRzLCBidXQgOCBpcyB0 aGUgcmlnaHQgdmFsdWUgaW4gYjJkICovCisjZGVmaW5lIEZyYWNfbWFzayAgMHhmZmZmZmYKKyNk ZWZpbmUgRnJhY19tYXNrMSAweGZmZmZmZgorI2RlZmluZSBCbGV0Y2ggNAorI2RlZmluZSBUZW5f cG1heCAyMgorI2RlZmluZSBCbmRyeV9tYXNrICAweGVmZmZmZgorI2RlZmluZSBCbmRyeV9tYXNr MSAweGZmZmZmZgorI2RlZmluZSBMU0IgMQorI2RlZmluZSBTaWduX2JpdCAweDgwMDAwMDAwCisj ZGVmaW5lIExvZzJQIDQKKyNkZWZpbmUgVGlueTAgMHgxMDAwMDAKKyNkZWZpbmUgVGlueTEgMAor I2RlZmluZSBRdWlja19tYXggMTQKKyNkZWZpbmUgSW50X21heCAxNQorI2Vsc2UgLyogVkFYICov CisjdW5kZWYgRmx0X1JvdW5kcworI2RlZmluZSBGbHRfUm91bmRzIDEKKyNkZWZpbmUgRXhwX3No aWZ0ICAyMworI2RlZmluZSBFeHBfc2hpZnQxIDcKKyNkZWZpbmUgRXhwX21zazEgICAgMHg4MAor I2RlZmluZSBFeHBfbXNrMTEgICAweDgwMDAwMAorI2RlZmluZSBFeHBfbWFzayAgMHg3ZjgwCisj ZGVmaW5lIFAgNTYKKyNkZWZpbmUgQmlhcyAxMjkKKyNkZWZpbmUgRW1pbiAoLTEyNykKKyNkZWZp bmUgRXhwXzEgIDB4NDA4MDAwMDAKKyNkZWZpbmUgRXhwXzExIDB4NDA4MAorI2RlZmluZSBFYml0 cyA4CisjZGVmaW5lIEZyYWNfbWFzayAgMHg3ZmZmZmYKKyNkZWZpbmUgRnJhY19tYXNrMSAweGZm ZmYwMDdmCisjZGVmaW5lIFRlbl9wbWF4IDI0CisjZGVmaW5lIEJsZXRjaCAyCisjZGVmaW5lIEJu ZHJ5X21hc2sgIDB4ZmZmZjAwN2YKKyNkZWZpbmUgQm5kcnlfbWFzazEgMHhmZmZmMDA3ZgorI2Rl ZmluZSBMU0IgMHgxMDAwMAorI2RlZmluZSBTaWduX2JpdCAweDgwMDAKKyNkZWZpbmUgTG9nMlAg MQorI2RlZmluZSBUaW55MCAweDgwCisjZGVmaW5lIFRpbnkxIDAKKyNkZWZpbmUgUXVpY2tfbWF4 IDE1CisjZGVmaW5lIEludF9tYXggMTUKKyNlbmRpZiAvKiBJQk0sIFZBWCAqLworI2VuZGlmIC8q IElFRUVfQXJpdGggKi8KKworI2lmbmRlZiBJRUVFX0FyaXRoCisjZGVmaW5lIFJPVU5EX0JJQVNF RAorI2Vsc2UKKyNpZmRlZiBST1VORF9CSUFTRURfd2l0aG91dF9Sb3VuZF9VcAorI3VuZGVmICBS T1VORF9CSUFTRUQKKyNkZWZpbmUgUk9VTkRfQklBU0VECisjZW5kaWYKKyNlbmRpZgorCisjaWZk ZWYgUk5EX1BST0RRVU9UCisjZGVmaW5lIHJvdW5kZWRfcHJvZHVjdChhLGIpIGEgPSBybmRfcHJv ZChhLCBiKQorI2RlZmluZSByb3VuZGVkX3F1b3RpZW50KGEsYikgYSA9IHJuZF9xdW90KGEsIGIp CisjaWZkZWYgS1JfaGVhZGVycworZXh0ZXJuIGRvdWJsZSBybmRfcHJvZCgpLCBybmRfcXVvdCgp OworI2Vsc2UKK2V4dGVybiBkb3VibGUgcm5kX3Byb2QoZG91YmxlLCBkb3VibGUpLCBybmRfcXVv dChkb3VibGUsIGRvdWJsZSk7CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIHJvdW5kZWRfcHJvZHVj dChhLGIpIGEgKj0gYgorI2RlZmluZSByb3VuZGVkX3F1b3RpZW50KGEsYikgYSAvPSBiCisjZW5k aWYKKworI2RlZmluZSBCaWcwIChGcmFjX21hc2sxIHwgRXhwX21zazEqKERCTF9NQVhfRVhQK0Jp YXMtMSkpCisjZGVmaW5lIEJpZzEgMHhmZmZmZmZmZgorCisjdW5kZWYgIFBhY2tfMTYKKyNpZm5k ZWYgUGFja18zMgorI2RlZmluZSBQYWNrXzMyCisjZW5kaWYKKworI2lmZGVmIE5PX0xPTkdfTE9O RworI3VuZGVmIFVMTG9uZworI2lmZGVmIEp1c3RfMTYKKyN1bmRlZiBQYWNrXzMyCisjZGVmaW5l IFBhY2tfMTYKKy8qIFdoZW4gUGFja18zMiBpcyBub3QgZGVmaW5lZCwgd2Ugc3RvcmUgMTYgYml0 cyBwZXIgMzItYml0IExvbmcuCisgKiBUaGlzIG1ha2VzIHNvbWUgaW5uZXIgbG9vcHMgc2ltcGxl ciBhbmQgc29tZXRpbWVzIHNhdmVzIHdvcmsKKyAqIGR1cmluZyBtdWx0aXBsaWNhdGlvbnMsIGJ1 dCBpdCBvZnRlbiBzZWVtcyB0byBtYWtlIHRoaW5ncyBzbGlnaHRseQorICogc2xvd2VyLiAgSGVu Y2UgdGhlIGRlZmF1bHQgaXMgbm93IHRvIHN0b3JlIDMyIGJpdHMgcGVyIExvbmcuCisgKi8KKyNl bmRpZgorI2Vsc2UJLyogbG9uZyBsb25nIGF2YWlsYWJsZSAqLworI2lmbmRlZiBMbG9uZworI2Rl ZmluZSBMbG9uZyBsb25nIGxvbmcKKyNlbmRpZgorI2lmbmRlZiBVTExvbmcKKyNkZWZpbmUgVUxM b25nIHVuc2lnbmVkIExsb25nCisjZW5kaWYKKyNlbmRpZiAvKiBOT19MT05HX0xPTkcgKi8KKwor I2lmZGVmIFBhY2tfMzIKKyNkZWZpbmUgVUxiaXRzIDMyCisjZGVmaW5lIGtzaGlmdCA1CisjZGVm aW5lIGttYXNrIDMxCisjZGVmaW5lIEFMTF9PTiAweGZmZmZmZmZmCisjZWxzZQorI2RlZmluZSBV TGJpdHMgMTYKKyNkZWZpbmUga3NoaWZ0IDQKKyNkZWZpbmUga21hc2sgMTUKKyNkZWZpbmUgQUxM X09OIDB4ZmZmZgorI2VuZGlmCisKKyNpZm5kZWYgX19TSU5HTEVfVEhSRUFEX18KKyNkZWZpbmUg TVVMVElQTEVfVEhSRUFEUworI2VuZGlmCisKKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworI2Rl ZmluZSBBQ1FVSVJFX0RUT0FfTE9DSyhuKQkvKm5vdGhpbmcqLworI2RlZmluZSBGUkVFX0RUT0Ff TE9DSyhuKQkvKm5vdGhpbmcqLworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2RlZmlu ZSBBQ1FVSVJFX0RUT0FfTE9DSyhuKSBcCisJbiA/IF9fbG9ja19hY3F1aXJlKF9fZHRvYV9sb2Nr MSkgOiBfX2xvY2tfYWNxdWlyZShfX2R0b2FfbG9jazApCisjZGVmaW5lIEZSRUVfRFRPQV9MT0NL KG4pIFwKKwluID8gX19sb2NrX3JlbGVhc2UoX19kdG9hX2xvY2sxKSA6IF9fbG9ja19yZWxlYXNl KF9fZHRvYV9sb2NrMCkKKyNlbmRpZgorCisjZGVmaW5lIEttYXggOQorCisgc3RydWN0CitCaWdp bnQgeworCXN0cnVjdCBCaWdpbnQgKm5leHQ7CisJaW50IGssIG1heHdkcywgc2lnbiwgd2RzOwor CVVMb25nIHhbMV07CisJfTsKKworIHR5cGVkZWYgc3RydWN0IEJpZ2ludCBCaWdpbnQ7CisKKyNp ZmRlZiBOT19TVFJJTkdfSAorI2lmZGVmIERFQ0xBUkVfU0laRV9UCit0eXBlZGVmIHVuc2lnbmVk IGludCBzaXplX3Q7CisjZW5kaWYKK2V4dGVybiB2b2lkIG1lbWNweV9EMkEgQU5TSSgodm9pZCos IGNvbnN0IHZvaWQqLCBzaXplX3QpKTsKKyNkZWZpbmUgQmNvcHkoeCx5KSBtZW1jcHlfRDJBKCZ4 LT5zaWduLCZ5LT5zaWduLHktPndkcypzaXplb2YoVUxvbmcpICsgMipzaXplb2YoaW50KSkKKyNl bHNlIC8qICFOT19TVFJJTkdfSCAqLworI2RlZmluZSBCY29weSh4LHkpIG1lbWNweSgmeC0+c2ln biwmeS0+c2lnbix5LT53ZHMqc2l6ZW9mKFVMb25nKSArIDIqc2l6ZW9mKGludCkpCisjZW5kaWYg LyogTk9fU1RSSU5HX0ggKi8KKworI2RlZmluZSBkdG9hIF9fZHRvYQorI2RlZmluZSBnZHRvYSBf X2dkdG9hCisjZGVmaW5lIGZyZWVkdG9hIF9fZnJlZWR0b2EKKyNkZWZpbmUgc3RydG9kZyBfX3N0 cnRvZGcKKyNkZWZpbmUgZ19kZGZtdCBfX2dfZGRmbXQKKyNkZWZpbmUgZ19kZm10IF9fZ19kZm10 CisjZGVmaW5lIGdfZmZtdCBfX2dfZmZtdAorI2RlZmluZSBnX1FmbXQgX19nX1FmbXQKKyNkZWZp bmUgZ194Zm10IF9fZ194Zm10CisjZGVmaW5lIGdfeExmbXQgX19nX3hMZm10CisjZGVmaW5lIHN0 cnRvSWQgX19zdHJ0b0lkCisjZGVmaW5lIHN0cnRvSWRkIF9fc3RydG9JZGQKKyNkZWZpbmUgc3Ry dG9JZiBfX3N0cnRvSWYKKyNkZWZpbmUgc3RydG9JUSBfX3N0cnRvSVEKKyNkZWZpbmUgc3RydG9J eCBfX3N0cnRvSXgKKyNkZWZpbmUgc3RydG9JeEwgX19zdHJ0b0l4TAorI2RlZmluZSBzdHJ0b3Jk IF9fc3RydG9yZAorI2RlZmluZSBzdHJ0b3JkZCBfX3N0cnRvcmRkCisjZGVmaW5lIHN0cnRvcmYg X19zdHJ0b3JmCisjZGVmaW5lIHN0cnRvclEgX19zdHJ0b3JRCisjZGVmaW5lIHN0cnRvcnggX19z dHJ0b3J4CisjZGVmaW5lIHN0cnRvcnhMIF9fc3RydG9yeEwKKyNkZWZpbmUgc3RydG9kSSBfX3N0 cnRvZEkKKyNkZWZpbmUgc3RydG9wZCBfX3N0cnRvcGQKKyNkZWZpbmUgc3RydG9wZGQgX19zdHJ0 b3BkZAorI2RlZmluZSBzdHJ0b3BmIF9fc3RydG9wZgorI2RlZmluZSBzdHJ0b3BRIF9fc3RydG9w UQorI2RlZmluZSBzdHJ0b3B4IF9fc3RydG9weAorI2RlZmluZSBzdHJ0b3B4TCBfX3N0cnRvcHhM CisKKyNkZWZpbmUgQmFsbG9jIF9fQmFsbG9jX0QyQQorI2RlZmluZSBCZnJlZSBfX0JmcmVlX0Qy QQorI2RlZmluZSBVTHRvUSBfX1VMdG9RX0QyQQorI2RlZmluZSBVTHRvZiBfX1VMdG9mX0QyQQor I2RlZmluZSBVTHRvZCBfX1VMdG9kX0QyQQorI2RlZmluZSBVTHRvZGQgX19VTHRvZGRfRDJBCisj ZGVmaW5lIFVMdG94IF9fVUx0b3hfRDJBCisjZGVmaW5lIFVMdG94TCBfX1VMdG94TF9EMkEKKyNk ZWZpbmUgYW55X29uIF9fYW55X29uX0QyQQorI2RlZmluZSBiMmQgX19iMmRfRDJBCisjZGVmaW5l IGJpZ3RlbnMgX19iaWd0ZW5zX0QyQQorI2RlZmluZSBjbXAgX19jbXBfRDJBCisjZGVmaW5lIGNv cHliaXRzIF9fY29weWJpdHNfRDJBCisjZGVmaW5lIGQyYiBfX2QyYl9EMkEKKyNkZWZpbmUgZGVj cmVtZW50IF9fZGVjcmVtZW50X0QyQQorI2RlZmluZSBkaWZmIF9fZGlmZl9EMkEKKyNkZWZpbmUg ZHRvYV9yZXN1bHQgX19kdG9hX3Jlc3VsdF9EMkEKKyNkZWZpbmUgZ19fZm10IF9fZ19fZm10X0Qy QQorI2RlZmluZSBnZXRoZXggX19nZXRoZXhfRDJBCisjZGVmaW5lIGhleGRpZyBfX2hleGRpZ19E MkEKKyNkZWZpbmUgaGV4bmFuIF9faGV4bmFuX0QyQQorI2RlZmluZSBoaTBiaXRzKHgpIF9faGkw Yml0c19EMkEoKFVMb25nKSh4KSkKKyNkZWZpbmUgaGkwYml0c19EMkEgX19oaTBiaXRzX0QyQQor I2RlZmluZSBpMmIgX19pMmJfRDJBCisjZGVmaW5lIGluY3JlbWVudCBfX2luY3JlbWVudF9EMkEK KyNkZWZpbmUgbG8wYml0cyBfX2xvMGJpdHNfRDJBCisjZGVmaW5lIGxzaGlmdCBfX2xzaGlmdF9E MkEKKyNkZWZpbmUgbWF0Y2ggX19tYXRjaF9EMkEKKyNkZWZpbmUgbXVsdCBfX211bHRfRDJBCisj ZGVmaW5lIG11bHRhZGQgX19tdWx0YWRkX0QyQQorI2RlZmluZSBucnZfYWxsb2MgX19ucnZfYWxs b2NfRDJBCisjZGVmaW5lIHBvdzVtdWx0IF9fcG93NW11bHRfRDJBCisjZGVmaW5lIHF1b3JlbSBf X3F1b3JlbV9EMkEKKyNkZWZpbmUgcmF0aW8gX19yYXRpb19EMkEKKyNkZWZpbmUgcnNoaWZ0IF9f cnNoaWZ0X0QyQQorI2RlZmluZSBydl9hbGxvYyBfX3J2X2FsbG9jX0QyQQorI2RlZmluZSBzMmIg X19zMmJfRDJBCisjZGVmaW5lIHNldF9vbmVzIF9fc2V0X29uZXNfRDJBCisjZGVmaW5lIHN0cmNw IF9fc3RyY3BfRDJBCisjZGVmaW5lIHN0cnRvSWcgX19zdHJ0b0lnX0QyQQorI2RlZmluZSBzdWxw IF9fc3VscF9EMkEKKyNkZWZpbmUgc3VtIF9fc3VtX0QyQQorI2RlZmluZSB0ZW5zIF9fdGVuc19E MkEKKyNkZWZpbmUgdGlueXRlbnMgX190aW55dGVuc19EMkEKKyNkZWZpbmUgdGlueXRlbnMgX190 aW55dGVuc19EMkEKKyNkZWZpbmUgdHJhaWx6IF9fdHJhaWx6X0QyQQorI2RlZmluZSB1bHAgX191 bHBfRDJBCisKK19fQkVHSU5fSElEREVOX0RFQ0xTCisgZXh0ZXJuIGNoYXIgKmR0b2FfcmVzdWx0 OworIGV4dGVybiBDT05TVCBkb3VibGUgYmlndGVuc1tdLCB0ZW5zW10sIHRpbnl0ZW5zW107Cisg ZXh0ZXJuIHVuc2lnbmVkIGNoYXIgaGV4ZGlnW107CisKKyBleHRlcm4gQmlnaW50ICpCYWxsb2Mg QU5TSSgoaW50KSk7CisgZXh0ZXJuIHZvaWQgQmZyZWUgQU5TSSgoQmlnaW50KikpOworIGV4dGVy biB2b2lkIFVMdG9mIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4g dm9pZCBVTHRvZCBBTlNJKChVTG9uZyosIFVMb25nKiwgTG9uZywgaW50KSk7CisgZXh0ZXJuIHZv aWQgVUx0b2RkIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4gdm9p ZCBVTHRvUSBBTlNJKChVTG9uZyosIFVMb25nKiwgTG9uZywgaW50KSk7CisgZXh0ZXJuIHZvaWQg VUx0b3ggQU5TSSgoVVNob3J0KiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4gdm9pZCBV THRveEwgQU5TSSgoVUxvbmcqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVybiBVTG9uZyBh bnlfb24gQU5TSSgoQmlnaW50KiwgaW50KSk7CisgZXh0ZXJuIGRvdWJsZSBiMmQgQU5TSSgoQmln aW50KiwgaW50KikpOworIGV4dGVybiBpbnQgY21wIEFOU0koKEJpZ2ludCosIEJpZ2ludCopKTsK KyBleHRlcm4gdm9pZCBjb3B5Yml0cyBBTlNJKChVTG9uZyosIGludCwgQmlnaW50KikpOworIGV4 dGVybiBCaWdpbnQgKmQyYiBBTlNJKChkb3VibGUsIGludCosIGludCopKTsKKyBleHRlcm4gdm9p ZCBkZWNyZW1lbnQgQU5TSSgoQmlnaW50KikpOworIGV4dGVybiBCaWdpbnQgKmRpZmYgQU5TSSgo QmlnaW50KiwgQmlnaW50KikpOworIGV4dGVybiBjaGFyICpnX19mbXQgQU5TSSgoY2hhciosIGNo YXIqLCBjaGFyKiwgaW50LCBVTG9uZywgc2l6ZV90KSk7CisgZXh0ZXJuIGludCBnZXRoZXggQU5T SSgoQ09OU1QgY2hhcioqLCBGUEkqLCBMb25nKiwgQmlnaW50KiosIGludCkpOworIGV4dGVybiB2 b2lkIF9faGV4ZGlnX2luaXRfRDJBKFZvaWQpOworIGV4dGVybiBpbnQgaGV4bmFuIEFOU0koKENP TlNUIGNoYXIqKiwgRlBJKiwgVUxvbmcqKSk7CisgZXh0ZXJuIGludCBoaTBiaXRzX0QyQSBBTlNJ KChVTG9uZykpOworIGV4dGVybiBCaWdpbnQgKmkyYiBBTlNJKChpbnQpKTsKKyBleHRlcm4gQmln aW50ICppbmNyZW1lbnQgQU5TSSgoQmlnaW50KikpOworIGV4dGVybiBpbnQgbG8wYml0cyBBTlNJ KChVTG9uZyopKTsKKyBleHRlcm4gQmlnaW50ICpsc2hpZnQgQU5TSSgoQmlnaW50KiwgaW50KSk7 CisgZXh0ZXJuIGludCBtYXRjaCBBTlNJKChDT05TVCBjaGFyKiosIGNoYXIqKSk7CisgZXh0ZXJu IEJpZ2ludCAqbXVsdCBBTlNJKChCaWdpbnQqLCBCaWdpbnQqKSk7CisgZXh0ZXJuIEJpZ2ludCAq bXVsdGFkZCBBTlNJKChCaWdpbnQqLCBpbnQsIGludCkpOworIGV4dGVybiBjaGFyICpucnZfYWxs b2MgQU5TSSgoY2hhciosIGNoYXIgKiosIGludCkpOworIGV4dGVybiBCaWdpbnQgKnBvdzVtdWx0 IEFOU0koKEJpZ2ludCosIGludCkpOworIGV4dGVybiBpbnQgcXVvcmVtIEFOU0koKEJpZ2ludCos IEJpZ2ludCopKTsKKyBleHRlcm4gZG91YmxlIHJhdGlvIEFOU0koKEJpZ2ludCosIEJpZ2ludCop KTsKKyBleHRlcm4gdm9pZCByc2hpZnQgQU5TSSgoQmlnaW50KiwgaW50KSk7CisgZXh0ZXJuIGNo YXIgKnJ2X2FsbG9jIEFOU0koKGludCkpOworIGV4dGVybiBCaWdpbnQgKnMyYiBBTlNJKChDT05T VCBjaGFyKiwgaW50LCBpbnQsIFVMb25nLCBpbnQpKTsKKyBleHRlcm4gQmlnaW50ICpzZXRfb25l cyBBTlNJKChCaWdpbnQqLCBpbnQpKTsKKyBleHRlcm4gY2hhciAqc3RyY3AgQU5TSSgoY2hhcios IGNvbnN0IGNoYXIqKSk7CisgZXh0ZXJuIGludCBzdHJ0b0lnIEFOU0koKENPTlNUIGNoYXIqLCBj aGFyKiosIEZQSSosIExvbmcqLCBCaWdpbnQqKiwgaW50KikpOworIGV4dGVybiBCaWdpbnQgKnN1 bSBBTlNJKChCaWdpbnQqLCBCaWdpbnQqKSk7CisgZXh0ZXJuIGludCB0cmFpbHogQU5TSSgoQmln aW50KikpOworIGV4dGVybiBkb3VibGUgdWxwIEFOU0koKFUqKSk7CitfX0VORF9ISURERU5fREVD TFMKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKy8qCisgKiBOQU5fV09SRDAgYW5k IE5BTl9XT1JEMSBhcmUgb25seSByZWZlcmVuY2VkIGluIHN0cnRvZC5jLiAgUHJpb3IgdG8KKyAq IDIwMDUwMTE1LCB0aGV5IHVzZWQgdG8gYmUgaGFyZC13aXJlZCBoZXJlICh0byAweDdmZjgwMDAw IGFuZCAwLAorICogcmVzcGVjdGl2ZWx5KSwgYnV0IG5vdyBhcmUgZGV0ZXJtaW5lZCBieSBjb21w aWxpbmcgYW5kIHJ1bm5pbmcKKyAqIHFuYW4uYyB0byBnZW5lcmF0ZSBnZF9xbmFuLmgsIHdoaWNo IHNwZWNpZmllcyBkX1FOQU4wIGFuZCBkX1FOQU4xLgorICogRm9ybWVybHkgZ2R0b2FpbXAuaCBy ZWNvbW1lbmRlZCBzdXBwbHlpbmcgc3VpdGFibGUgLUROQU5fV09SRDA9Li4uCisgKiBhbmQgLURO QU5fV09SRDE9Li4uICB2YWx1ZXMgaWYgbmVjZXNzYXJ5LiAgVGhpcyBzaG91bGQgc3RpbGwgd29y ay4KKyAqIChPbiBIUCBTZXJpZXMgNzAwLzgwMCBtYWNoaW5lcywgLUROQU5fV09SRDA9MHg3ZmY0 MDAwMCB3b3Jrcy4pCisgKi8KKyNpZmRlZiBJRUVFX0FyaXRoCisjaWZuZGVmIE5PX0lORk5BTl9D SEVDSworI3VuZGVmIElORk5BTl9DSEVDSworI2RlZmluZSBJTkZOQU5fQ0hFQ0sKKyNlbmRpZgor I2lmZGVmIElFRUVfTUM2OGsKKyNkZWZpbmUgXzAgMAorI2RlZmluZSBfMSAxCisjaWZuZGVmIE5B Tl9XT1JEMAorI2RlZmluZSBOQU5fV09SRDAgZF9RTkFOMAorI2VuZGlmCisjaWZuZGVmIE5BTl9X T1JEMQorI2RlZmluZSBOQU5fV09SRDEgZF9RTkFOMQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBf MCAxCisjZGVmaW5lIF8xIDAKKyNpZm5kZWYgTkFOX1dPUkQwCisjZGVmaW5lIE5BTl9XT1JEMCBk X1FOQU4xCisjZW5kaWYKKyNpZm5kZWYgTkFOX1dPUkQxCisjZGVmaW5lIE5BTl9XT1JEMSBkX1FO QU4wCisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyN1bmRlZiBJTkZOQU5fQ0hFQ0sKKyNlbmRpZgor CisjdW5kZWYgU0kKKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisjZGVmaW5lIFNJIDEKKyNlbHNl CisjZGVmaW5lIFNJIDAKKyNlbmRpZgorCisjZW5kaWYgLyogR0RUT0FJTVBfSF9JTkNMVURFRCAq LwpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL2xkdG9hLmMgYi9uZXdsaWIvbGliYy9z dGRsaWIvbGR0b2EuYwppbmRleCAyNmM2MTk0OGIuLmZiYmQzZDBiMSAxMDA2NDQKLS0tIGEvbmV3 bGliL2xpYmMvc3RkbGliL2xkdG9hLmMKKysrIGIvbmV3bGliL2xpYmMvc3RkbGliL2xkdG9hLmMK QEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+ CiAjaW5jbHVkZSAibXByZWMuaCIKKyNpbmNsdWRlICJnZHRvYS5oIgogCiAvKiBUaGVzZSBhcmUg dGhlIGV4dGVybmFsbHkgdmlzaWJsZSBlbnRyaWVzLiAqLwogLyogbGludXggbmFtZTogIGxvbmcg ZG91YmxlIF9JT19zdHJ0b2xkIChjaGFyICosIGNoYXIgKiopOyAqLwpAQCAtMjgxNCw2ICsyODE1 LDEyIEBAIF9sZHRvYV9yIChzdHJ1Y3QgX3JlZW50ICpwdHIsIGxvbmcgZG91YmxlIGQsIGludCBt b2RlLCBpbnQgbmRpZ2l0cywKICAgICAgIF9SRUVOVF9NUF9SRVNVTFQgKHB0cikgPSAwOwogICAg IH0KIAorICAvKiBVc2UgdGhlIHJlc3VsdCBvZiBnZHRvYSBpZiBzdWNjZXNzZnVsbC4gKi8KKyAg b3V0c3RyID0gX19sZHRvYSAoJmQsIG1vZGUsIG5kaWdpdHMsIGRlY3B0LCBzaWduLCBydmUpOwor ICAvKiBJZiBpdCBmYWlscywgZmFsbGJhY2sgdG8gbGVnYWN5IGxkdG9hLiAqLworICBpZiAob3V0 c3RyKQorICAgIHJldHVybiBvdXRzdHI7CisKICNpZiBMREJMX01BTlRfRElHID09IDI0CiAgIGUy NHRvZSAoJmR1LnBlLCBlLCBsZHApOwogI2VsaWYgTERCTF9NQU5UX0RJRyA9PSA1MwotLSAKMi4z My4wCgo= --Multipart=_Mon__29_Nov_2021_23_24_39_+0900_8ZGvh8A+7HA_RadX--