From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-02.nifty.com (conssluserg-02.nifty.com [210.131.2.81]) by sourceware.org (Postfix) with ESMTPS id 9BE9D3857820 for ; Sun, 28 Nov 2021 07:43:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9BE9D3857820 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-02.nifty.com with ESMTP id 1AS7gxm6007244 for ; Sun, 28 Nov 2021 16:43:00 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-02.nifty.com 1AS7gxm6007244 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1638085380; bh=GZMJLqfhLSk0QNgcqq/F8jD+6b08Nfi81Qot/gr4BQo=; h=Date:From:To:Subject:In-Reply-To:References:From; b=hYP1ww1KTeurjFEGuhJv+WvzTEtI+p0UYGPcrEO8OSvKNwoVM9JJvYfgQMTuLIL5L aFR6mvYuxKKvxAY7+YJWsan8quCUs8WHVtoWpT62TgVYiqBq7j74aClcn6dIeAHEKX Bxru5BpSWvbRiNJTq92HoC5gbj1Hp61EB9Kr84VCtVmAFrBnbFyyQkSgP31gjWSYtr pSMdHIUv82172JqLl5WGvgyg1exB+y7NhW5NvzHPDy+MViEb02dgTjtmPw8jAbaX44 lGUFaw6jaBVVt1jHtp2iXFerK6XwyRuI5SDNAm4QkvF0L9t0nvkP+skFdvwNyIK9Rz 8+5qWAHNwWFGg== X-Nifty-SrcIP: [110.4.221.123] Date: Sun, 28 Nov 2021 16:43:11 +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: <20211128164311.c405014bdf153aec8de46c6e@nifty.ne.jp> In-Reply-To: References: X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Sun__28_Nov_2021_16_43_11_+0900_6L3dxPVpn+JM3J7t" X-Spam-Status: No, score=-4.6 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: Sun, 28 Nov 2021 07:43:24 -0000 This is a multi-part message in MIME format. --Multipart=_Sun__28_Nov_2021_16_43_11_+0900_6L3dxPVpn+JM3J7t Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit 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? -- Takashi Yano --Multipart=_Sun__28_Nov_2021_16_43_11_+0900_6L3dxPVpn+JM3J7t 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 RnJvbSAzNzRkYjJkNjhkMmE3NjhmNzkyYWM4MWFjMGQyMzFjNDc3ZTk2Zjg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogU3VuLCAyOCBOb3YgMjAyMSAxMTowNDo1MiArMDkwMApTdWJqZWN0OiBbUEFUQ0hd IGxkdG9hOiBJbXBvcnQgZ2R0b2EgZnJvbSBPcGVuQlNELgoKLS0tCiBuZXdsaWIvbGliYy9pbmNs dWRlL21hY2hpbmUvaWVlZS5oIHwgMTA0ICsrKysKIG5ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmls ZS5hbSAgICAgfCAgMTQgKy0KIG5ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5pbiAgICAgfCAg ODIgKystCiBuZXdsaWIvbGliYy9zdGRsaWIvYXJpdGguaCAgICAgICAgIHwgICA5ICsKIG5ld2xp Yi9saWJjL3N0ZGxpYi9nZHRvYS1kbWlzYy5jICAgfCAyMjUgKysrKysrKwogbmV3bGliL2xpYmMv c3RkbGliL2dkdG9hLWR0b2EuYyAgICB8IDgzOSArKysrKysrKysrKysrKysrKysrKysrKysrKwog bmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdkdG9hLmMgICB8IDgzMCArKysrKysrKysrKysrKysr KysrKysrKysrKwogbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdtaXNjLmMgICB8ICA4NiArKysK IG5ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1sZHRvYS5jICAgfCAxMjQgKysrKwogbmV3bGliL2xp YmMvc3RkbGliL2dkdG9hLW1pc2MuYyAgICB8IDkxMiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLmggICAgICAgICB8IDEzMiArKysrLQogbmV3 bGliL2xpYmMvc3RkbGliL2dkdG9haW1wLmggICAgICB8IDY3MiArKysrKysrKysrKysrKysrKysr KysKIG5ld2xpYi9saWJjL3N0ZGxpYi9sZHRvYS5jICAgICAgICAgfCAgIDcgKwogMTMgZmlsZXMg Y2hhbmdlZCwgNDAwMiBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBuZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgbmV3bGliL2xpYmMvc3RkbGliL2FyaXRoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXds aWIvbGliYy9zdGRsaWIvZ2R0b2EtZG1pc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG5ld2xpYi9s aWJjL3N0ZGxpYi9nZHRvYS1kdG9hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXdsaWIvbGliYy9z dGRsaWIvZ2R0b2EtZ2R0b2EuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG5ld2xpYi9saWJjL3N0ZGxp Yi9nZHRvYS1nbWlzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbmV3bGliL2xpYmMvc3RkbGliL2dk dG9hLWxkdG9hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2Et bWlzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbmV3bGliL2xpYmMvc3RkbGliL2dkdG9haW1wLmgK CmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbmV3bGli L2xpYmMvaW5jbHVkZS9tYWNoaW5lL2llZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAuLmJiYTYyN2EzYgotLS0gL2Rldi9udWxsCisrKyBiL25ld2xpYi9saWJjL2luY2x1 ZGUvbWFjaGluZS9pZWVlLmgKQEAgLTAsMCArMSwxMDQgQEAKKyNpZm5kZWYgX01BQ0hJTkVfSUVF RV9IXworI2RlZmluZSBfTUFDSElORV9JRUVFX0hfCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj aW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pZWVlZnAuaD4KKyNpbmNs dWRlIDxmbG9hdC5oPgorCisjaWYgTERCTF9NQU5UX0RJRyA9PSAyNAorI2RlZmluZSBFWFRfSU1Q TElDSVRfTkJJVAorI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7ICAgICAgXAorICAg IChhKVswXSA9IChwKS0+ZXh0X2ZyYWM7ICBcCit9IHdoaWxlICgwKQorI2lmZGVmIF9fSUVFRV9M SVRUTEVfRU5ESUFOCitzdHJ1Y3QgaWVlZV9leHQgeworICAgIHVpbnQzMl90ICAgZXh0X2ZyYWM6 MjM7CisgICAgdWludDMyX3QgICBleHRfZXhwOjg7CisgICAgdWludDMyX3QgICBleHRfc2lnbjox OworfTsKKyNlbmRpZgorI2lmZGVmIF9fSUVFRV9CSUdfRU5ESUFOCitzdHJ1Y3QgaWVlZV9leHQg eworICAgIHVpbnQzMl90ICAgZXh0X3NpZ246MTsKKyAgICB1aW50MzJfdCAgIGV4dF9leHA6ODsK KyAgICB1aW50MzJfdCAgIGV4dF9mcmFjOjIzOworfTsKKyNlbmRpZgorI2VsaWYgTERCTF9NQU5U X0RJRyA9PSA1MworI2RlZmluZSBFWFRfSU1QTElDSVRfTkJJVAorI2RlZmluZSBFWFRfVE9fQVJS QVkzMihwLCBhKSBkbyB7ICAgICAgIFwKKyAgICAoYSlbMF0gPSAocCktPmV4dF9mcmFjbDsgIFwK KyAgICAoYSlbMV0gPSAocCktPmV4dF9mcmFjaDsgIFwKK30gd2hpbGUgKDApCisjaWZkZWYgX19J RUVFX0xJVFRMRV9FTkRJQU4KK3N0cnVjdCBpZWVlX2V4dCB7CisgICAgdWludDMyX3QgICBleHRf ZnJhY2w7CisgICAgdWludDMyX3QgICBleHRfZnJhY2g6MjA7CisgICAgdWludDMyX3QgICBleHRf ZXhwOjExOworICAgIHVpbnQzMl90ICAgZXh0X3NpZ246MTsKK307CisjZW5kaWYKKyNpZmRlZiBf X0lFRUVfQklHX0VORElBTgorc3RydWN0IGllZWVfZXh0IHsKKyAgICB1aW50MzJfdCAgIGV4dF9z aWduOjE7CisgICAgdWludDMyX3QgICBleHRfZXhwOjExOworICAgIHVpbnQzMl90ICAgZXh0X2Zy YWNoOjIwOworICAgIHVpbnQzMl90ICAgZXh0X2ZyYWNsOworfTsKKyNlbmRpZgorI2VsaWYgTERC TF9NQU5UX0RJRyA9PSA2NAorI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7ICAgICAg IFwKKyAgICAoYSlbMF0gPSAocCktPmV4dF9mcmFjbDsgIFwKKyAgICAoYSlbMV0gPSAocCktPmV4 dF9mcmFjaDsgIFwKK30gd2hpbGUgKDApCisjaWZkZWYgX19JRUVFX0xJVFRMRV9FTkRJQU4KK3N0 cnVjdCBpZWVlX2V4dCB7CisgICAgdWludDMyX3QgICBleHRfZnJhY2w7CisgICAgdWludDMyX3Qg ICBleHRfZnJhY2g7CisgICAgdWludDMyX3QgICBleHRfZXhwOjE1OworICAgIHVpbnQzMl90ICAg ZXh0X3NpZ246MTsKKyAgICB1aW50MzJfdCAgIGV4dF9wYWRsOjE2OworICAgIHVpbnQzMl90ICAg ZXh0X3BhZGg7Cit9OworI2VuZGlmCisjaWZkZWYgX19JRUVFX0JJR19FTkRJQU4KK3N0cnVjdCBp ZWVlX2V4dCB7CisgICAgdWludDMyX3QgICBleHRfcGFkaDsKKyAgICB1aW50MzJfdCAgIGV4dF9w YWRsOjE2OworICAgIHVpbnQzMl90ICAgZXh0X3NpZ246MTsKKyAgICB1aW50MzJfdCAgIGV4dF9l eHA6MTU7CisgICAgdWludDMyX3QgICBleHRfZnJhY2g7CisgICAgdWludDMyX3QgICBleHRfZnJh Y2w7Cit9OworI2VuZGlmCisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworI2RlZmluZSBFWFRf SU1QTElDSVRfTkJJVAorI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7ICAgICAgICBc CisgICAgKGEpWzBdID0gKHApLT5leHRfZnJhY2w7ICAgXAorICAgIChhKVsxXSA9IChwKS0+ZXh0 X2ZyYWNsbTsgIFwKKyAgICAoYSlbMl0gPSAocCktPmV4dF9mcmFjaG07ICBcCisgICAgKGEpWzNd ID0gKHApLT5leHRfZnJhY2g7ICAgXAorfSB3aGlsZSAoMCkKKyNpZmRlZiBfX0lFRUVfTElUVExF X0VORElBTgorc3RydWN0IGllZWVfZXh0IHsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjbDsKKyAg ICB1aW50MzJfdCAgIGV4dF9mcmFjbG07CisgICAgdWludDMyX3QgICBleHRfZnJhY2htOworICAg IHVpbnQzMl90ICAgZXh0X2ZyYWNoOjE2OworICAgIHVpbnQzMl90ICAgZXh0X2V4cDoxNTsKKyAg ICB1aW50MzJfdCAgIGV4dF9zaWduOjE7Cit9OworI2VuZGlmCisjaWZkZWYgX19JRUVFX0JJR19F TkRJQU4KK3N0cnVjdCBpZWVlX2V4dCB7CisgICAgdWludDMyX3QgICBleHRfc2lnbjoxOworICAg IHVpbnQzMl90ICAgZXh0X2V4cDoxNTsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjaDoxNjsKKyAg ICB1aW50MzJfdCAgIGV4dF9mcmFjaG07CisgICAgdWludDMyX3QgICBleHRfZnJhY2xtOworICAg IHVpbnQzMl90ICAgZXh0X2ZyYWNsOworfTsKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBf TUFDSElORV9JRUVFX0hfICovCmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZp bGUuYW0gYi9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZpbGUuYW0KaW5kZXggMzU3ZTM3YmViLi4w NGIyMmQ0NzcgMTAwNjQ0Ci0tLSBhL25ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5hbQorKysg Yi9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZpbGUuYW0KQEAgLTM4LDYgKzM4LDEyIEBAIEdFTkVS QUxfU09VUkNFUyA9IFwKIAlsYWJzLmMgCQlcCiAJbGRpdi5jICAJXAogCWxkdG9hLmMJCVwKKwln ZHRvYS1sZHRvYS5jCVwKKwlnZHRvYS1nZHRvYS5jCVwKKwlnZHRvYS1kdG9hLmMJXAorCWdkdG9h LW1pc2MuYwlcCisJZ2R0b2EtZG1pc2MuYwlcCisJZ2R0b2EtZ21pc2MuYwlcCiAJbWFsbG9jLmMg IAlcCiAJbWJsZW4uYwkJXAogCW1ibGVuX3IuYwlcCkBAIC0zMTEsNyArMzE3LDEzIEBAIENIRVdP VVRfRklMRVM9IFwKIENIQVBURVJTID0gc3RkbGliLnRleAogCiAkKGxwZngpZHRvYS4kKG9leHQp OiBkdG9hLmMgbXByZWMuaAotJChscGZ4KWxkdG9hLiQob2V4dCk6IGxkdG9hLmMgbXByZWMuaAor JChscGZ4KWxkdG9hLiQob2V4dCk6IGxkdG9hLmMgbXByZWMuaCBnZHRvYS5oCiskKGxwZngpZ2R0 b2EtbGR0b2EuJChvZXh0KTogZ2R0b2EtbGR0b2EuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGgu aAorJChscGZ4KWdkdG9hLWdkdG9hLiQob2V4dCk6IGdkdG9hLWdkdG9hLmMgZ2R0b2FpbXAuaCBn ZHRvYS5oIGFyaXRoLmgKKyQobHBmeClnZHRvYS1kdG9hLiQob2V4dCk6IGdkdG9hLWR0b2EuYyBn ZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAorJChscGZ4KWdkdG9hLW1pc2MuJChvZXh0KTogZ2R0 b2EtbWlzYy5jIGdkdG9haW1wLmggZ2R0b2EuaCBhcml0aC5oCiskKGxwZngpZ2R0b2EtZG1pc2Mu JChvZXh0KTogZ2R0b2EtZG1pc2MuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAorJChscGZ4 KWdkdG9hLWdtaXNjLiQob2V4dCk6IGdkdG9hLWdtaXNjLmMgZ2R0b2FpbXAuaCBnZHRvYS5oIGFy aXRoLmgKICQobHBmeCllY3Z0YnVmLiQob2V4dCk6IGVjdnRidWYuYyBtcHJlYy5oCiAkKGxwZngp bWJ0b3djX3IuJChvZXh0KTogbWJ0b3djX3IuYyBtYmN0eXBlLmgKICQobHBmeCltcHJlYy4kKG9l eHQpOiBtcHJlYy5jIG1wcmVjLmgKZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxpYi9NYWtl ZmlsZS5pbiBiL25ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5pbgppbmRleCBhODEyYjZhOTUu LjRlODkxY2VkOSAxMDA2NDQKLS0tIGEvbmV3bGliL2xpYmMvc3RkbGliL01ha2VmaWxlLmluCisr KyBiL25ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5pbgpAQCAtMTAxLDcgKzEwMSwxMCBAQCBh bV9fb2JqZWN0c18yID0gbGliX2EtX19hZGp1c3QuJChPQkpFWFQpIGxpYl9hLV9fYXRleGl0LiQo T0JKRVhUKSBcCiAJbGliX2EtZ2V0ZW52X3IuJChPQkpFWFQpIGxpYl9hLWltYXhhYnMuJChPQkpF WFQpIFwKIAlsaWJfYS1pbWF4ZGl2LiQoT0JKRVhUKSBsaWJfYS1pdG9hLiQoT0JKRVhUKSBcCiAJ bGliX2EtbGFicy4kKE9CSkVYVCkgbGliX2EtbGRpdi4kKE9CSkVYVCkgXAotCWxpYl9hLWxkdG9h LiQoT0JKRVhUKSBsaWJfYS1tYWxsb2MuJChPQkpFWFQpIFwKKwlsaWJfYS1sZHRvYS4kKE9CSkVY VCkgbGliX2EtZ2R0b2EtbGR0b2EuJChPQkpFWFQpIFwKKwlsaWJfYS1nZHRvYS1nZHRvYS4kKE9C SkVYVCkgbGliX2EtZ2R0b2EtZHRvYS4kKE9CSkVYVCkgXAorCWxpYl9hLWdkdG9hLW1pc2MuJChP QkpFWFQpIGxpYl9hLWdkdG9hLWRtaXNjLiQoT0JKRVhUKSBcCisJbGliX2EtZ2R0b2EtZ21pc2Mu JChPQkpFWFQpIGxpYl9hLW1hbGxvYy4kKE9CSkVYVCkgXAogCWxpYl9hLW1ibGVuLiQoT0JKRVhU KSBsaWJfYS1tYmxlbl9yLiQoT0JKRVhUKSBcCiAJbGliX2EtbWJzdG93Y3MuJChPQkpFWFQpIGxp Yl9hLW1ic3Rvd2NzX3IuJChPQkpFWFQpIFwKIAlsaWJfYS1tYnRvd2MuJChPQkpFWFQpIGxpYl9h LW1idG93Y19yLiQoT0JKRVhUKSBcCkBAIC0xNjUsMTQgKzE2OCwxNSBAQCBhbV9fb2JqZWN0c185 ID0gX19hZGp1c3QubG8gX19hdGV4aXQubG8gX19jYWxsX2F0ZXhpdC5sbyBfX2V4cDEwLmxvIFwK IAlkaXYubG8gZHRvYS5sbyBkdG9hc3R1Yi5sbyBlbnZpcm9uLmxvIGVudmxvY2subG8gZXByaW50 Zi5sbyBcCiAJZXhpdC5sbyBnZHRvYS1nZXRoZXgubG8gZ2R0b2EtaGV4bmFuLmxvIGdldGVudi5s byBnZXRlbnZfci5sbyBcCiAJaW1heGFicy5sbyBpbWF4ZGl2LmxvIGl0b2EubG8gbGFicy5sbyBs ZGl2LmxvIGxkdG9hLmxvIFwKLQltYWxsb2MubG8gbWJsZW4ubG8gbWJsZW5fci5sbyBtYnN0b3dj cy5sbyBtYnN0b3djc19yLmxvIFwKLQltYnRvd2MubG8gbWJ0b3djX3IubG8gbWxvY2subG8gbXBy ZWMubG8gbXN0YXRzLmxvIFwKLQlvbl9leGl0X2FyZ3MubG8gcXVpY2tfZXhpdC5sbyByYW5kLmxv IHJhbmRfci5sbyByYW5kb20ubG8gXAotCXJlYWxsb2MubG8gcmVhbGxvY2FycmF5LmxvIHJlYWxs b2NmLmxvIHNiX2NoYXJzZXRzLmxvIFwKLQlzdHJ0b2QubG8gc3RydG9pbWF4LmxvIHN0cnRvbC5s byBzdHJ0b3VsLmxvIHN0cnRvdW1heC5sbyBcCi0JdXRvYS5sbyB3Y3N0b2QubG8gd2NzdG9pbWF4 LmxvIHdjc3RvbC5sbyB3Y3N0b3VsLmxvIFwKLQl3Y3N0b3VtYXgubG8gd2NzdG9tYnMubG8gd2Nz dG9tYnNfci5sbyB3Y3RvbWIubG8gd2N0b21iX3IubG8gXAotCSQoYW1fX29iamVjdHNfOCkKKwln ZHRvYS1sZHRvYS5sbyBnZHRvYS1nZHRvYS5sbyBnZHRvYS1kdG9hLmxvIGdkdG9hLW1pc2MubG8g XAorCWdkdG9hLWRtaXNjLmxvIGdkdG9hLWdtaXNjLmxvIG1hbGxvYy5sbyBtYmxlbi5sbyBtYmxl bl9yLmxvIFwKKwltYnN0b3djcy5sbyBtYnN0b3djc19yLmxvIG1idG93Yy5sbyBtYnRvd2Nfci5s byBtbG9jay5sbyBcCisJbXByZWMubG8gbXN0YXRzLmxvIG9uX2V4aXRfYXJncy5sbyBxdWlja19l eGl0LmxvIHJhbmQubG8gXAorCXJhbmRfci5sbyByYW5kb20ubG8gcmVhbGxvYy5sbyByZWFsbG9j YXJyYXkubG8gcmVhbGxvY2YubG8gXAorCXNiX2NoYXJzZXRzLmxvIHN0cnRvZC5sbyBzdHJ0b2lt YXgubG8gc3RydG9sLmxvIHN0cnRvdWwubG8gXAorCXN0cnRvdW1heC5sbyB1dG9hLmxvIHdjc3Rv ZC5sbyB3Y3N0b2ltYXgubG8gd2NzdG9sLmxvIFwKKwl3Y3N0b3VsLmxvIHdjc3RvdW1heC5sbyB3 Y3N0b21icy5sbyB3Y3N0b21ic19yLmxvIHdjdG9tYi5sbyBcCisJd2N0b21iX3IubG8gJChhbV9f b2JqZWN0c184KQogYW1fX29iamVjdHNfMTAgPSBhcmM0cmFuZG9tLmxvIGFyYzRyYW5kb21fdW5p Zm9ybS5sbyBjeGFfYXRleGl0LmxvIFwKIAljeGFfZmluYWxpemUubG8gZHJhbmQ0OC5sbyBlY3Z0 YnVmLmxvIGVmZ2N2dC5sbyBlcmFuZDQ4LmxvIFwKIAlqcmFuZDQ4LmxvIGxjb25nNDgubG8gbHJh bmQ0OC5sbyBtcmFuZDQ4LmxvIG1zaXplLmxvIG10cmltLmxvIFwKQEAgLTM1NCw2ICszNTgsNyBA QCBwZGZkaXIgPSBAcGRmZGlyQAogcHJlZml4ID0gQHByZWZpeEAKIHByb2dyYW1fdHJhbnNmb3Jt X25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKIHBzZGlyID0gQHBzZGlyQAorcnVuc3Rh dGVkaXIgPSBAcnVuc3RhdGVkaXJACiBzYmluZGlyID0gQHNiaW5kaXJACiBzaGFyZWRfbWFjaGlu ZV9kaXIgPSBAc2hhcmVkX21hY2hpbmVfZGlyQAogc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3Rh dGVkaXJACkBAIC0zNzIsMTMgKzM3NywxNCBAQCBHRU5FUkFMX1NPVVJDRVMgPSBfX2FkanVzdC5j IF9fYXRleGl0LmMgX19jYWxsX2F0ZXhpdC5jIF9fZXhwMTAuYyBcCiAJYXRleGl0LmMgYXRvZi5j IGF0b2ZmLmMgYXRvaS5jIGF0b2wuYyBjYWxsb2MuYyBkaXYuYyBkdG9hLmMgXAogCWR0b2FzdHVi LmMgZW52aXJvbi5jIGVudmxvY2suYyBlcHJpbnRmLmMgZXhpdC5jIGdkdG9hLWdldGhleC5jIFwK IAlnZHRvYS1oZXhuYW4uYyBnZXRlbnYuYyBnZXRlbnZfci5jIGltYXhhYnMuYyBpbWF4ZGl2LmMg aXRvYS5jIFwKLQlsYWJzLmMgbGRpdi5jIGxkdG9hLmMgbWFsbG9jLmMgbWJsZW4uYyBtYmxlbl9y LmMgbWJzdG93Y3MuYyBcCi0JbWJzdG93Y3Nfci5jIG1idG93Yy5jIG1idG93Y19yLmMgbWxvY2su YyBtcHJlYy5jIG1zdGF0cy5jIFwKLQlvbl9leGl0X2FyZ3MuYyBxdWlja19leGl0LmMgcmFuZC5j IHJhbmRfci5jIHJhbmRvbS5jIHJlYWxsb2MuYyBcCi0JcmVhbGxvY2FycmF5LmMgcmVhbGxvY2Yu YyBzYl9jaGFyc2V0cy5jIHN0cnRvZC5jIHN0cnRvaW1heC5jIFwKLQlzdHJ0b2wuYyBzdHJ0b3Vs LmMgc3RydG91bWF4LmMgdXRvYS5jIHdjc3RvZC5jIHdjc3RvaW1heC5jIFwKLQl3Y3N0b2wuYyB3 Y3N0b3VsLmMgd2NzdG91bWF4LmMgd2NzdG9tYnMuYyB3Y3N0b21ic19yLmMgXAotCXdjdG9tYi5j IHdjdG9tYl9yLmMgJChhbV9fYXBwZW5kXzEpCisJbGFicy5jIGxkaXYuYyBsZHRvYS5jIGdkdG9h LWxkdG9hLmMgZ2R0b2EtZ2R0b2EuYyBnZHRvYS1kdG9hLmMgXAorCWdkdG9hLW1pc2MuYyBnZHRv YS1kbWlzYy5jIGdkdG9hLWdtaXNjLmMgbWFsbG9jLmMgbWJsZW4uYyBcCisJbWJsZW5fci5jIG1i c3Rvd2NzLmMgbWJzdG93Y3Nfci5jIG1idG93Yy5jIG1idG93Y19yLmMgbWxvY2suYyBcCisJbXBy ZWMuYyBtc3RhdHMuYyBvbl9leGl0X2FyZ3MuYyBxdWlja19leGl0LmMgcmFuZC5jIHJhbmRfci5j IFwKKwlyYW5kb20uYyByZWFsbG9jLmMgcmVhbGxvY2FycmF5LmMgcmVhbGxvY2YuYyBzYl9jaGFy c2V0cy5jIFwKKwlzdHJ0b2QuYyBzdHJ0b2ltYXguYyBzdHJ0b2wuYyBzdHJ0b3VsLmMgc3RydG91 bWF4LmMgdXRvYS5jIFwKKwl3Y3N0b2QuYyB3Y3N0b2ltYXguYyB3Y3N0b2wuYyB3Y3N0b3VsLmMg d2NzdG91bWF4LmMgd2NzdG9tYnMuYyBcCisJd2NzdG9tYnNfci5jIHdjdG9tYi5jIHdjdG9tYl9y LmMgJChhbV9fYXBwZW5kXzEpCiBATkVXTElCX05BTk9fTUFMTE9DX0ZBTFNFQE1BTElHTlIgPSBt YWxpZ25yCiBATkVXTElCX05BTk9fTUFMTE9DX1RSVUVATUFMSUdOUiA9IG5hbm8tbWFsaWducgog QE5FV0xJQl9OQU5PX01BTExPQ19GQUxTRUBNQUxMT1BUUiA9IG1hbGxvcHRyCkBAIC04MjcsNiAr ODMzLDQyIEBAIGxpYl9hLWxkdG9hLm86IGxkdG9hLmMKIGxpYl9hLWxkdG9hLm9iajogbGR0b2Eu YwogCSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQ UEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9h LWxkdG9hLm9iaiBgaWYgdGVzdCAtZiAnbGR0b2EuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsZHRv YS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9sZHRvYS5jJzsgZmlgCiAKK2xpYl9h LWdkdG9hLWxkdG9hLm86IGdkdG9hLWxkdG9hLmMKKwkkKENDKSAkKERFRlMpICQoREVGQVVMVF9J TkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJfYV9D RkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRvYS1sZHRvYS5vIGB0ZXN0IC1mICdnZHRv YS1sZHRvYS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZHRvYS1sZHRvYS5jCisKK2xpYl9hLWdk dG9hLWxkdG9hLm9iajogZ2R0b2EtbGR0b2EuYworCSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lO Q0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NG TEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWxkdG9hLm9iaiBgaWYgdGVzdCAtZiAn Z2R0b2EtbGR0b2EuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZHRvYS1sZHRvYS5jJzsgZWxzZSAk KENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZHRvYS1sZHRvYS5jJzsgZmlgCisKK2xpYl9hLWdkdG9h LWdkdG9hLm86IGdkdG9hLWdkdG9hLmMKKwkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURF UykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJfYV9DRkxBR1Mp ICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRvYS1nZHRvYS5vIGB0ZXN0IC1mICdnZHRvYS1nZHRv YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZHRvYS1nZHRvYS5jCisKK2xpYl9hLWdkdG9hLWdk dG9hLm9iajogZ2R0b2EtZ2R0b2EuYworCSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVT KSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykg JChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWdkdG9hLm9iaiBgaWYgdGVzdCAtZiAnZ2R0b2Et Z2R0b2EuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZHRvYS1nZHRvYS5jJzsgZWxzZSAkKENZR1BB VEhfVykgJyQoc3JjZGlyKS9nZHRvYS1nZHRvYS5jJzsgZmlgCisKK2xpYl9hLWdkdG9hLWR0b2Eu bzogZ2R0b2EtZHRvYS5jCisJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5D TFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliX2FfQ0ZMQUdTKSAkKENGTEFH UykgLWMgLW8gbGliX2EtZ2R0b2EtZHRvYS5vIGB0ZXN0IC1mICdnZHRvYS1kdG9hLmMnIHx8IGVj aG8gJyQoc3JjZGlyKS8nYGdkdG9hLWR0b2EuYworCitsaWJfYS1nZHRvYS1kdG9hLm9iajogZ2R0 b2EtZHRvYS5jCisJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMp ICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliX2FfQ0ZMQUdTKSAkKENGTEFHUykgLWMg LW8gbGliX2EtZ2R0b2EtZHRvYS5vYmogYGlmIHRlc3QgLWYgJ2dkdG9hLWR0b2EuYyc7IHRoZW4g JChDWUdQQVRIX1cpICdnZHRvYS1kdG9hLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIp L2dkdG9hLWR0b2EuYyc7IGZpYAorCitsaWJfYS1nZHRvYS1taXNjLm86IGdkdG9hLW1pc2MuYwor CSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZM QUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdk dG9hLW1pc2MubyBgdGVzdCAtZiAnZ2R0b2EtbWlzYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bn ZHRvYS1taXNjLmMKKworbGliX2EtZ2R0b2EtbWlzYy5vYmo6IGdkdG9hLW1pc2MuYworCSQoQ0Mp ICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAk KENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLW1p c2Mub2JqIGBpZiB0ZXN0IC1mICdnZHRvYS1taXNjLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2R0 b2EtbWlzYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZHRvYS1taXNjLmMnOyBm aWAKKworbGliX2EtZ2R0b2EtZG1pc2MubzogZ2R0b2EtZG1pc2MuYworCSQoQ0MpICQoREVGUykg JChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdT KSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWRtaXNjLm8gYHRl c3QgLWYgJ2dkdG9hLWRtaXNjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdkdG9hLWRtaXNjLmMK KworbGliX2EtZ2R0b2EtZG1pc2Mub2JqOiBnZHRvYS1kbWlzYy5jCisJJChDQykgJChERUZTKSAk KERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1Mp ICQobGliX2FfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliX2EtZ2R0b2EtZG1pc2Mub2JqIGBp ZiB0ZXN0IC1mICdnZHRvYS1kbWlzYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dkdG9hLWRtaXNj LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dkdG9hLWRtaXNjLmMnOyBmaWAKKwor bGliX2EtZ2R0b2EtZ21pc2MubzogZ2R0b2EtZ21pc2MuYworCSQoQ0MpICQoREVGUykgJChERUZB VUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxp Yl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWdtaXNjLm8gYHRlc3QgLWYg J2dkdG9hLWdtaXNjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdkdG9hLWdtaXNjLmMKKworbGli X2EtZ2R0b2EtZ21pc2Mub2JqOiBnZHRvYS1nbWlzYy5jCisJJChDQykgJChERUZTKSAkKERFRkFV TFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGli X2FfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliX2EtZ2R0b2EtZ21pc2Mub2JqIGBpZiB0ZXN0 IC1mICdnZHRvYS1nbWlzYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dkdG9hLWdtaXNjLmMnOyBl bHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dkdG9hLWdtaXNjLmMnOyBmaWAKKwogbGliX2Et bWFsbG9jLm86IG1hbGxvYy5jCiAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQo SU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliX2FfQ0ZMQUdTKSAkKENG TEFHUykgLWMgLW8gbGliX2EtbWFsbG9jLm8gYHRlc3QgLWYgJ21hbGxvYy5jJyB8fCBlY2hvICck KHNyY2RpcikvJ2BtYWxsb2MuYwogCkBAIC0xNjEwLDcgKzE2NTIsMTMgQEAgJChscGZ4KSQoTUFM TE9QVFIpLiQob2V4dCk6ICQoTUFMTE9DUikuYwogCSQoTUFMTE9DX0NPTVBJTEUpIC1EREVGSU5F X01BTExPUFQgLWMgJChzcmNkaXIpLyQoTUFMTE9DUikuYyAtbyAkQAogCiAkKGxwZngpZHRvYS4k KG9leHQpOiBkdG9hLmMgbXByZWMuaAotJChscGZ4KWxkdG9hLiQob2V4dCk6IGxkdG9hLmMgbXBy ZWMuaAorJChscGZ4KWxkdG9hLiQob2V4dCk6IGxkdG9hLmMgbXByZWMuaCBnZHRvYS5oCiskKGxw ZngpZ2R0b2EtbGR0b2EuJChvZXh0KTogZ2R0b2EtbGR0b2EuYyBnZHRvYWltcC5oIGdkdG9hLmgg YXJpdGguaAorJChscGZ4KWdkdG9hLWdkdG9hLiQob2V4dCk6IGdkdG9hLWdkdG9hLmMgZ2R0b2Fp bXAuaCBnZHRvYS5oIGFyaXRoLmgKKyQobHBmeClnZHRvYS1kdG9hLiQob2V4dCk6IGdkdG9hLWR0 b2EuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAorJChscGZ4KWdkdG9hLW1pc2MuJChvZXh0 KTogZ2R0b2EtbWlzYy5jIGdkdG9haW1wLmggZ2R0b2EuaCBhcml0aC5oCiskKGxwZngpZ2R0b2Et ZG1pc2MuJChvZXh0KTogZ2R0b2EtZG1pc2MuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAor JChscGZ4KWdkdG9hLWdtaXNjLiQob2V4dCk6IGdkdG9hLWdtaXNjLmMgZ2R0b2FpbXAuaCBnZHRv YS5oIGFyaXRoLmgKICQobHBmeCllY3Z0YnVmLiQob2V4dCk6IGVjdnRidWYuYyBtcHJlYy5oCiAk KGxwZngpbWJ0b3djX3IuJChvZXh0KTogbWJ0b3djX3IuYyBtYmN0eXBlLmgKICQobHBmeCltcHJl Yy4kKG9leHQpOiBtcHJlYy5jIG1wcmVjLmgKZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxp Yi9hcml0aC5oIGIvbmV3bGliL2xpYmMvc3RkbGliL2FyaXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwLi5kM2I4NGQ4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXdsaWIv bGliYy9zdGRsaWIvYXJpdGguaApAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDxtYWNoaW5lL2ll ZWVmcC5oPgorCisjaWZkZWYgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgSUVFRV84MDg3 CisjZW5kaWYKKworI2lmZGVmIF9fSUVFRV9CSUdfRU5ESUFOCisjZGVmaW5lIElFRUVfTUM2OGsK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWRtaXNjLmMgYi9u ZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtZG1pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAuLmYzZDhlYTcxYQotLS0gL2Rldi9udWxsCisrKyBiL25ld2xpYi9saWJjL3N0 ZGxpYi9nZHRvYS1kbWlzYy5jCkBAIC0wLDAgKzEsMjI1IEBACisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0 aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5 OTggYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNz aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFu ZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBo ZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIg YXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9m IEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2lu ZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2Fy ZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQg RElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJ TkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBC RSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNF LCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVH TElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4K KworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5 IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQg IiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisj aWZuZGVmIE1VTFRJUExFX1RIUkVBRFMKKyBjaGFyICpkdG9hX3Jlc3VsdDsKKyNlbmRpZgorCisg Y2hhciAqCisjaWZkZWYgS1JfaGVhZGVycworcnZfYWxsb2MoaSkgaW50IGk7CisjZWxzZQorcnZf YWxsb2MoaW50IGkpCisjZW5kaWYKK3sKKwlpbnQgaiwgaywgKnI7CisKKwlqID0gc2l6ZW9mKFVM b25nKTsKKwlmb3IoayA9IDA7CisJCXNpemVvZihCaWdpbnQpIC0gc2l6ZW9mKFVMb25nKSAtIHNp emVvZihpbnQpICsgaiA8PSBpOworCQlqIDw8PSAxKQorCQkJaysrOworCXIgPSAoaW50KilCYWxs b2Moayk7CisJaWYgKHIgPT0gTlVMTCkKKwkJcmV0dXJuICgKKyNpZm5kZWYgTVVMVElQTEVfVEhS RUFEUworCQlkdG9hX3Jlc3VsdCA9CisjZW5kaWYKKwkJCU5VTEwpOworCSpyID0gazsKKwlyZXR1 cm4KKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworCWR0b2FfcmVzdWx0ID0KKyNlbmRpZgorCQko Y2hhciAqKShyKzEpOworCX0KKworIGNoYXIgKgorI2lmZGVmIEtSX2hlYWRlcnMKK25ydl9hbGxv YyhzLCBydmUsIG4pIGNoYXIgKnMsICoqcnZlOyBpbnQgbjsKKyNlbHNlCitucnZfYWxsb2MoY2hh ciAqcywgY2hhciAqKnJ2ZSwgaW50IG4pCisjZW5kaWYKK3sKKwljaGFyICpydiwgKnQ7CisKKwl0 ID0gcnYgPSBydl9hbGxvYyhuKTsKKwlpZiAodCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOwor CXdoaWxlKCgqdCA9ICpzKyspICE9MCkKKwkJdCsrOworCWlmIChydmUpCisJCSpydmUgPSB0Owor CXJldHVybiBydjsKKwl9CisKKy8qIGZyZWVkdG9hKHMpIG11c3QgYmUgdXNlZCB0byBmcmVlIHZh bHVlcyBzIHJldHVybmVkIGJ5IGR0b2EKKyAqIHdoZW4gTVVMVElQTEVfVEhSRUFEUyBpcyAjZGVm aW5lZC4gIEl0IHNob3VsZCBiZSB1c2VkIGluIGFsbCBjYXNlcywKKyAqIGJ1dCBmb3IgY29uc2lz dGVuY3kgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIGR0b2EsIGl0IGlzIG9wdGlvbmFsCisgKiB3 aGVuIE1VTFRJUExFX1RIUkVBRFMgaXMgbm90IGRlZmluZWQuCisgKi8KKworIHZvaWQKKyNpZmRl ZiBLUl9oZWFkZXJzCitmcmVlZHRvYShzKSBjaGFyICpzOworI2Vsc2UKK2ZyZWVkdG9hKGNoYXIg KnMpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmIgPSAoQmlnaW50ICopKChpbnQgKilzIC0gMSk7CisJ Yi0+bWF4d2RzID0gMSA8PCAoYi0+ayA9ICooaW50KiliKTsKKwlCZnJlZShiKTsKKyNpZm5kZWYg TVVMVElQTEVfVEhSRUFEUworCWlmIChzID09IGR0b2FfcmVzdWx0KQorCQlkdG9hX3Jlc3VsdCA9 IDA7CisjZW5kaWYKKwl9CitERUZfU1RST05HKGZyZWVkdG9hKTsKKworIGludAorcXVvcmVtCisj aWZkZWYgS1JfaGVhZGVycworCShiLCBTKSBCaWdpbnQgKmIsICpTOworI2Vsc2UKKwkoQmlnaW50 ICpiLCBCaWdpbnQgKlMpCisjZW5kaWYKK3sKKwlpbnQgbjsKKwlVTG9uZyAqYngsICpieGUsIHEs ICpzeCwgKnN4ZTsKKyNpZmRlZiBVTExvbmcKKwlVTExvbmcgYm9ycm93LCBjYXJyeSwgeSwgeXM7 CisjZWxzZQorCVVMb25nIGJvcnJvdywgY2FycnksIHksIHlzOworI2lmZGVmIFBhY2tfMzIKKwlV TG9uZyBzaSwgeiwgenM7CisjZW5kaWYKKyNlbmRpZgorCisJbiA9IFMtPndkczsKKyNpZmRlZiBE RUJVRworCS8qZGVidWcqLyBpZiAoYi0+d2RzID4gbikKKwkvKmRlYnVnKi8JQnVnKCJvdmVyc2l6 ZSBiIGluIHF1b3JlbSIpOworI2VuZGlmCisJaWYgKGItPndkcyA8IG4pCisJCXJldHVybiAwOwor CXN4ID0gUy0+eDsKKwlzeGUgPSBzeCArIC0tbjsKKwlieCA9IGItPng7CisJYnhlID0gYnggKyBu OworCXEgPSAqYnhlIC8gKCpzeGUgKyAxKTsJLyogZW5zdXJlIHEgPD0gdHJ1ZSBxdW90aWVudCAq LworI2lmZGVmIERFQlVHCisJLypkZWJ1ZyovIGlmIChxID4gOSkKKwkvKmRlYnVnKi8JQnVnKCJv dmVyc2l6ZWQgcXVvdGllbnQgaW4gcXVvcmVtIik7CisjZW5kaWYKKwlpZiAocSkgeworCQlib3Jy b3cgPSAwOworCQljYXJyeSA9IDA7CisJCWRvIHsKKyNpZmRlZiBVTExvbmcKKwkJCXlzID0gKnN4 KysgKiAoVUxMb25nKXEgKyBjYXJyeTsKKwkJCWNhcnJ5ID0geXMgPj4gMzI7CisJCQl5ID0gKmJ4 IC0gKHlzICYgMHhmZmZmZmZmZlVMKSAtIGJvcnJvdzsKKwkJCWJvcnJvdyA9IHkgPj4gMzIgJiAx VUw7CisJCQkqYngrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisjZWxzZQorI2lmZGVmIFBhY2tfMzIK KwkJCXNpID0gKnN4Kys7CisJCQl5cyA9IChzaSAmIDB4ZmZmZikgKiBxICsgY2Fycnk7CisJCQl6 cyA9IChzaSA+PiAxNikgKiBxICsgKHlzID4+IDE2KTsKKwkJCWNhcnJ5ID0genMgPj4gMTY7CisJ CQl5ID0gKCpieCAmIDB4ZmZmZikgLSAoeXMgJiAweGZmZmYpIC0gYm9ycm93OworCQkJYm9ycm93 ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJCXogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZm ZikgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworCQkJU3RvcmVp bmMoYngsIHosIHkpOworI2Vsc2UKKwkJCXlzID0gKnN4KysgKiBxICsgY2Fycnk7CisJCQljYXJy eSA9IHlzID4+IDE2OworCQkJeSA9ICpieCAtICh5cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCQli b3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQkJKmJ4KysgPSB5ICYgMHhmZmZmOworI2Vu ZGlmCisjZW5kaWYKKwkJCX0KKwkJCXdoaWxlKHN4IDw9IHN4ZSk7CisJCWlmICghKmJ4ZSkgewor CQkJYnggPSBiLT54OworCQkJd2hpbGUoLS1ieGUgPiBieCAmJiAhKmJ4ZSkKKwkJCQktLW47CisJ CQliLT53ZHMgPSBuOworCQkJfQorCQl9CisJaWYgKGNtcChiLCBTKSA+PSAwKSB7CisJCXErKzsK KwkJYm9ycm93ID0gMDsKKwkJY2FycnkgPSAwOworCQlieCA9IGItPng7CisJCXN4ID0gUy0+eDsK KwkJZG8geworI2lmZGVmIFVMTG9uZworCQkJeXMgPSAqc3grKyArIGNhcnJ5OworCQkJY2Fycnkg PSB5cyA+PiAzMjsKKwkJCXkgPSAqYnggLSAoeXMgJiAweGZmZmZmZmZmVUwpIC0gYm9ycm93Owor CQkJYm9ycm93ID0geSA+PiAzMiAmIDFVTDsKKwkJCSpieCsrID0geSAmIDB4ZmZmZmZmZmZVTDsK KyNlbHNlCisjaWZkZWYgUGFja18zMgorCQkJc2kgPSAqc3grKzsKKwkJCXlzID0gKHNpICYgMHhm ZmZmKSArIGNhcnJ5OworCQkJenMgPSAoc2kgPj4gMTYpICsgKHlzID4+IDE2KTsKKwkJCWNhcnJ5 ID0genMgPj4gMTY7CisJCQl5ID0gKCpieCAmIDB4ZmZmZikgLSAoeXMgJiAweGZmZmYpIC0gYm9y cm93OworCQkJYm9ycm93ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJCXogPSAoKmJ4ID4+IDE2 KSAtICh6cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+ IDE2OworCQkJU3RvcmVpbmMoYngsIHosIHkpOworI2Vsc2UKKwkJCXlzID0gKnN4KysgKyBjYXJy eTsKKwkJCWNhcnJ5ID0geXMgPj4gMTY7CisJCQl5ID0gKmJ4IC0gKHlzICYgMHhmZmZmKSAtIGJv cnJvdzsKKwkJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCQkqYngrKyA9IHkgJiAw eGZmZmY7CisjZW5kaWYKKyNlbmRpZgorCQkJfQorCQkJd2hpbGUoc3ggPD0gc3hlKTsKKwkJYngg PSBiLT54OworCQlieGUgPSBieCArIG47CisJCWlmICghKmJ4ZSkgeworCQkJd2hpbGUoLS1ieGUg PiBieCAmJiAhKmJ4ZSkKKwkJCQktLW47CisJCQliLT53ZHMgPSBuOworCQkJfQorCQl9CisJcmV0 dXJuIHE7CisJfQpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWR0b2EuYyBi L25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1kdG9hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwLi45OTgxOTI3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXdsaWIvbGliYy9z dGRsaWIvZ2R0b2EtZHRvYS5jCkBAIC0wLDAgKzEsODM5IEBACisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0 aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5 OTgsIDE5OTkgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQ ZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3 YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZl ZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2Ns YWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBu YW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZl cnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBz b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitM VUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdB UkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJ VElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1Mg T0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZU V0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQg TS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJA IiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5o IgorCisvKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0aWMgKGRtZyk6IGNvbnZlcnQgZG91YmxlIHRv IEFTQ0lJIHN0cmluZy4KKyAqCisgKiBJbnNwaXJlZCBieSAiSG93IHRvIFByaW50IEZsb2F0aW5n LVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkKKyAqIEd1eSBMLiBTdGVlbGUsIEpyLiBhbmQg Sm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiAxMTItMTI2XS4KKyAqCisg KiBNb2RpZmljYXRpb25zOgorICoJMS4gUmF0aGVyIHRoYW4gaXRlcmF0aW5nLCB3ZSB1c2UgYSBz aW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKKyAqCSAgIHRvIGRldGVybWluZSBrID0gZmxvb3Io bG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQKKyAqCSAgIHF1YW50aXRpZXMgdXNpbmcgTyhs b2cyKGspKSByYXRoZXIgdGhhbiBPKGspIG11bHRpcGxpY2F0aW9ucy4KKyAqCTIuIEZvciBzb21l IG1vZGVzID4gMiAoY29ycmVzcG9uZGluZyB0byBlY3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKKyAq CSAgIHRyeSB0byBnZW5lcmF0ZSBkaWdpdHMgc3RyaWN0bHkgbGVmdCB0byByaWdodC4gIEluc3Rl YWQsIHdlCisgKgkgICBjb21wdXRlIHdpdGggZmV3ZXIgYml0cyBhbmQgcHJvcGFnYXRlIHRoZSBj YXJyeSBpZiBuZWNlc3NhcnkKKyAqCSAgIHdoZW4gcm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVw LiAgVGhpcyBpcyBvZnRlbiBmYXN0ZXIuCisgKgkzLiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0 IGlucHV0IHdpbGwgYmUgcm91bmRlZCBuZWFyZXN0LAorICoJICAgbW9kZSAwIHJlbmRlcnMgMWUy MyBhcyAxZTIzIHJhdGhlciB0aGFuIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgorICoJICAgVGhhdCBp cywgd2UgYWxsb3cgZXF1YWxpdHkgaW4gc3RvcHBpbmcgdGVzdHMgd2hlbiB0aGUKKyAqCSAgIHJv dW5kLW5lYXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUK KyAqCSAgIGFzIHdvdWxkIHNhdGlzZmFjdGlvbiBvZiB0aGUgc3RvcHBpbmcgdGVzdCB3aXRoIHN0 cmljdAorICoJICAgaW5lcXVhbGl0eS4KKyAqCTQuIFdlIHJlbW92ZSBjb21tb24gZmFjdG9ycyBv ZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50CisgKgkgICBxdWFudGl0aWVzLgorICoJNS4gV2hl biBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGludGVnZXJzIGxlc3MgdGhhbiAxZTE2LAorICoJ ICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgcmF0aGVyIHRoYW4gcmVzb3J0aW5n CisgKgkgICB0byBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlcnMuCisgKgk2LiBXaGVuIGFza2Vk IHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdpdHMsIHdlIGZpcnN0IHRyeQorICoJICAgdG8g Z2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYzsgd2UgcmVzb3J0IHRvCisgKgkg ICBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljIG9ubHkgaWYgd2UgY2Fubm90 CisgKgkgICBndWFyYW50ZWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFz IGdpdmVuCisgKgkgICB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVz dGVkIGRpZ2l0cyBhbmQKKyAqCSAgICJ1bmlmb3JtbHkiIGRpc3RyaWJ1dGVkIGlucHV0LCB0aGUg cHJvYmFiaWxpdHkgaXMKKyAqCSAgIHNvbWV0aGluZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11 c3QgcmVzb3J0IHRvIHRoZSBMb25nCisgKgkgICBjYWxjdWxhdGlvbi4KKyAqLworCisjaWZkZWYg SG9ub3JfRkxUX1JPVU5EUworI3VuZGVmIENoZWNrX0ZMVF9ST1VORFMKKyNkZWZpbmUgQ2hlY2tf RkxUX1JPVU5EUworI2Vsc2UKKyNkZWZpbmUgUm91bmRpbmcgRmx0X1JvdW5kcworI2VuZGlmCisK KyBjaGFyICoKK2R0b2EKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGQwLCBtb2RlLCBuZGlnaXRzLCBk ZWNwdCwgc2lnbiwgcnZlKQorCWRvdWJsZSBkMDsgaW50IG1vZGUsIG5kaWdpdHMsICpkZWNwdCwg KnNpZ247IGNoYXIgKipydmU7CisjZWxzZQorCShkb3VibGUgZDAsIGludCBtb2RlLCBpbnQgbmRp Z2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLCBjaGFyICoqcnZlKQorI2VuZGlmCit7CisgLyoJ QXJndW1lbnRzIG5kaWdpdHMsIGRlY3B0LCBzaWduIGFyZSBzaW1pbGFyIHRvIHRob3NlCisJb2Yg ZWN2dCBhbmQgZmN2dDsgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQgZnJvbQorCXRoZSBy ZXR1cm5lZCBzdHJpbmcuICBJZiBub3QgbnVsbCwgKnJ2ZSBpcyBzZXQgdG8gcG9pbnQKKwl0byB0 aGUgZW5kIG9mIHRoZSByZXR1cm4gdmFsdWUuICBJZiBkIGlzICstSW5maW5pdHkgb3IgTmFOLAor CXRoZW4gKmRlY3B0IGlzIHNldCB0byA5OTk5LgorCisJbW9kZToKKwkJMCA9PT4gc2hvcnRlc3Qg c3RyaW5nIHRoYXQgeWllbGRzIGQgd2hlbiByZWFkIGluCisJCQlhbmQgcm91bmRlZCB0byBuZWFy ZXN0LgorCQkxID09PiBsaWtlIDAsIGJ1dCB3aXRoIFN0ZWVsZSAmIFdoaXRlIHN0b3BwaW5nIHJ1 bGU7CisJCQllLmcuIHdpdGggSUVFRSBQNzU0IGFyaXRobWV0aWMgLCBtb2RlIDAgZ2l2ZXMKKwkJ CTFlMjMgd2hlcmVhcyBtb2RlIDEgZ2l2ZXMgOS45OTk5OTk5OTk5OTk5OTllMjIuCisJCTIgPT0+ IG1heCgxLG5kaWdpdHMpIHNpZ25pZmljYW50IGRpZ2l0cy4gIFRoaXMgZ2l2ZXMgYQorCQkJcmV0 dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBvZiBlY3Z0LCBleGNlcHQKKwkJCXRoYXQgdHJhaWxp bmcgemVyb3MgYXJlIHN1cHByZXNzZWQuCisJCTMgPT0+IHRocm91Z2ggbmRpZ2l0cyBwYXN0IHRo ZSBkZWNpbWFsIHBvaW50LiAgVGhpcworCQkJZ2l2ZXMgYSByZXR1cm4gdmFsdWUgc2ltaWxhciB0 byB0aGF0IGZyb20gZmN2dCwKKwkJCWV4Y2VwdCB0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBw cmVzc2VkLCBhbmQKKwkJCW5kaWdpdHMgY2FuIGJlIG5lZ2F0aXZlLgorCQk0LDUgPT0+IHNpbWls YXIgdG8gMiBhbmQgMywgcmVzcGVjdGl2ZWx5LCBidXQgKGluCisJCQlyb3VuZC1uZWFyZXN0IG1v ZGUpIHdpdGggdGhlIHRlc3RzIG9mIG1vZGUgMCB0bworCQkJcG9zc2libHkgcmV0dXJuIGEgc2hv cnRlciBzdHJpbmcgdGhhdCByb3VuZHMgdG8gZC4KKwkJCVdpdGggSUVFRSBhcml0aG1ldGljIGFu ZCBjb21waWxhdGlvbiB3aXRoCisJCQktREhvbm9yX0ZMVF9ST1VORFMsIG1vZGVzIDQgYW5kIDUg YmVoYXZlIHRoZSBzYW1lCisJCQlhcyBtb2RlcyAyIGFuZCAzIHdoZW4gRkxUX1JPVU5EUyAhPSAx LgorCQk2LTkgPT0+IERlYnVnZ2luZyBtb2RlcyBzaW1pbGFyIHRvIG1vZGUgLSA0OiAgZG9uJ3Qg dHJ5CisJCQlmYXN0IGZsb2F0aW5nLXBvaW50IGVzdGltYXRlIChpZiBhcHBsaWNhYmxlKS4KKwor CQlWYWx1ZXMgb2YgbW9kZSBvdGhlciB0aGFuIDAtOSBhcmUgdHJlYXRlZCBhcyBtb2RlIDAuCisK KwkJU3VmZmljaWVudCBzcGFjZSBpcyBhbGxvY2F0ZWQgdG8gdGhlIHJldHVybiB2YWx1ZQorCQl0 byBob2xkIHRoZSBzdXBwcmVzc2VkIHRyYWlsaW5nIHplcm9zLgorCSovCisKKwlpbnQgYmJpdHMs IGIyLCBiNSwgYmUsIGRpZywgaSwgaWVwcywgaWxpbSwgaWxpbTAsIGlsaW0xLAorCQlqLCBqMSwg aywgazAsIGtfY2hlY2ssIGxlZnRyaWdodCwgbTIsIG01LCBzMiwgczUsCisJCXNwZWNfY2FzZSwg dHJ5X3F1aWNrOworCUxvbmcgTDsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCWludCBkZW5v cm07CisJVUxvbmcgeDsKKyNlbmRpZgorCUJpZ2ludCAqYiwgKmIxLCAqZGVsdGEsICptbG8sICpt aGksICpTOworCVUgZCwgZDIsIGVwczsKKwlkb3VibGUgZHM7CisJY2hhciAqcywgKnMwOworI2lm ZGVmIFNFVF9JTkVYQUNUCisJaW50IGluZXhhY3QsIG9sZGluZXhhY3Q7CisjZW5kaWYKKyNpZmRl ZiBIb25vcl9GTFRfUk9VTkRTIC8qeyovCisJaW50IFJvdW5kaW5nOworI2lmZGVmIFRydXN0X0ZM VF9ST1VORFMgLyp7eyBvbmx5IGRlZmluZSB0aGlzIGlmIEZMVF9ST1VORFMgcmVhbGx5IHdvcmtz ISAqLworCVJvdW5kaW5nID0gRmx0X1JvdW5kczsKKyNlbHNlIC8qfXsqLworCVJvdW5kaW5nID0g MTsKKwlzd2l0Y2goZmVnZXRyb3VuZCgpKSB7CisJICBjYXNlIEZFX1RPV0FSRFpFUk86CVJvdW5k aW5nID0gMDsgYnJlYWs7CisJICBjYXNlIEZFX1VQV0FSRDoJUm91bmRpbmcgPSAyOyBicmVhazsK KwkgIGNhc2UgRkVfRE9XTldBUkQ6CVJvdW5kaW5nID0gMzsKKwkgIH0KKyNlbmRpZiAvKn19Ki8K KyNlbmRpZiAvKn0qLworCisjaWZuZGVmIE1VTFRJUExFX1RIUkVBRFMKKwlpZiAoZHRvYV9yZXN1 bHQpIHsKKwkJZnJlZWR0b2EoZHRvYV9yZXN1bHQpOworCQlkdG9hX3Jlc3VsdCA9IDA7CisJCX0K KyNlbmRpZgorCWQuZCA9IGQwOworCWlmICh3b3JkMCgmZCkgJiBTaWduX2JpdCkgeworCQkvKiBz ZXQgc2lnbiBmb3IgZXZlcnl0aGluZywgaW5jbHVkaW5nIDAncyBhbmQgTmFOcyAqLworCQkqc2ln biA9IDE7CisJCXdvcmQwKCZkKSAmPSB+U2lnbl9iaXQ7CS8qIGNsZWFyIHNpZ24gYml0ICovCisJ CX0KKwllbHNlCisJCSpzaWduID0gMDsKKworI2lmIGRlZmluZWQoSUVFRV9Bcml0aCkgKyBkZWZp bmVkKFZBWCkKKyNpZmRlZiBJRUVFX0FyaXRoCisJaWYgKCh3b3JkMCgmZCkgJiBFeHBfbWFzaykg PT0gRXhwX21hc2spCisjZWxzZQorCWlmICh3b3JkMCgmZCkgID09IDB4ODAwMCkKKyNlbmRpZgor CQl7CisJCS8qIEluZmluaXR5IG9yIE5hTiAqLworCQkqZGVjcHQgPSA5OTk5OworI2lmZGVmIElF RUVfQXJpdGgKKwkJaWYgKCF3b3JkMSgmZCkgJiYgISh3b3JkMCgmZCkgJiAweGZmZmZmKSkKKwkJ CXJldHVybiBucnZfYWxsb2MoIkluZmluaXR5IiwgcnZlLCA4KTsKKyNlbmRpZgorCQlyZXR1cm4g bnJ2X2FsbG9jKCJOYU4iLCBydmUsIDMpOworCQl9CisjZW5kaWYKKyNpZmRlZiBJQk0KKwlkdmFs KCZkKSArPSAwOyAvKiBub3JtYWxpemUgKi8KKyNlbmRpZgorCWlmICghZHZhbCgmZCkpIHsKKwkJ KmRlY3B0ID0gMTsKKwkJcmV0dXJuIG5ydl9hbGxvYygiMCIsIHJ2ZSwgMSk7CisJCX0KKworI2lm ZGVmIFNFVF9JTkVYQUNUCisJdHJ5X3F1aWNrID0gb2xkaW5leGFjdCA9IGdldF9pbmV4YWN0KCk7 CisJaW5leGFjdCA9IDE7CisjZW5kaWYKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJaWYgKFJv dW5kaW5nID49IDIpIHsKKwkJaWYgKCpzaWduKQorCQkJUm91bmRpbmcgPSBSb3VuZGluZyA9PSAy ID8gMCA6IDI7CisJCWVsc2UKKwkJCWlmIChSb3VuZGluZyAhPSAyKQorCQkJCVJvdW5kaW5nID0g MDsKKwkJfQorI2VuZGlmCisKKwliID0gZDJiKGR2YWwoJmQpLCAmYmUsICZiYml0cyk7CisJaWYg KGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisJ aSA9IChpbnQpKHdvcmQwKCZkKSA+PiBFeHBfc2hpZnQxICYgKEV4cF9tYXNrPj5FeHBfc2hpZnQx KSk7CisjZWxzZQorCWlmICgoIGkgPSAoaW50KSh3b3JkMCgmZCkgPj4gRXhwX3NoaWZ0MSAmIChF eHBfbWFzaz4+RXhwX3NoaWZ0MSkpICkhPTApIHsKKyNlbmRpZgorCQlkdmFsKCZkMikgPSBkdmFs KCZkKTsKKwkJd29yZDAoJmQyKSAmPSBGcmFjX21hc2sxOworCQl3b3JkMCgmZDIpIHw9IEV4cF8x MTsKKyNpZmRlZiBJQk0KKwkJaWYgKCggaiA9IDExIC0gaGkwYml0cyh3b3JkMCgmZDIpICYgRnJh Y19tYXNrKSApIT0wKQorCQkJZHZhbCgmZDIpIC89IDEgPDwgajsKKyNlbmRpZgorCisJCS8qIGxv Zyh4KQl+PX4gbG9nKDEuNSkgKyAoeC0xLjUpLzEuNQorCQkgKiBsb2cxMCh4KQkgPSAgbG9nKHgp IC8gbG9nKDEwKQorCQkgKgkJfj1+IGxvZygxLjUpL2xvZygxMCkgKyAoeC0xLjUpLygxLjUqbG9n KDEwKSkKKwkJICogbG9nMTAoJmQpID0gKGktQmlhcykqbG9nKDIpL2xvZygxMCkgKyBsb2cxMCgm ZDIpCisJCSAqCisJCSAqIFRoaXMgc3VnZ2VzdHMgY29tcHV0aW5nIGFuIGFwcHJveGltYXRpb24g ayB0byBsb2cxMCgmZCkgYnkKKwkJICoKKwkJICogayA9IChpIC0gQmlhcykqMC4zMDEwMjk5OTU2 NjM5ODEKKwkJICoJKyAoIChkMi0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkw NTU2ODEgKTsKKwkJICoKKwkJICogV2Ugd2FudCBrIHRvIGJlIHRvbyBsYXJnZSByYXRoZXIgdGhh biB0b28gc21hbGwuCisJCSAqIFRoZSBlcnJvciBpbiB0aGUgZmlyc3Qtb3JkZXIgVGF5bG9yIHNl cmllcyBhcHByb3hpbWF0aW9uCisJCSAqIGlzIGluIG91ciBmYXZvciwgc28gd2UganVzdCByb3Vu ZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCisJCSAqIHRvIGNvbXBlbnNhdGUgZm9yIGFueSBlcnJv ciBpbiB0aGUgbXVsdGlwbGljYXRpb24gb2YKKwkJICogKGkgLSBCaWFzKSBieSAwLjMwMTAyOTk5 NTY2Mzk4MTsgc2luY2UgfGkgLSBCaWFzfCA8PSAxMDc3LAorCQkgKiBhbmQgMTA3NyAqIDAuMzAx MDMgKiAyXi01MiB+PX4gNy4yZS0xNCwKKwkJICogYWRkaW5nIDFlLTEzIHRvIHRoZSBjb25zdGFu dCB0ZXJtIG1vcmUgdGhhbiBzdWZmaWNlcy4KKwkJICogSGVuY2Ugd2UgYWRqdXN0IHRoZSBjb25z dGFudCB0ZXJtIHRvIDAuMTc2MDkxMjU5MDU1OC4KKwkJICogKFdlIGNvdWxkIGdldCBhIG1vcmUg YWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKKwkJICogIGJ1dCB0aGlzIGlzIHByb2JhYmx5 IG5vdCB3b3J0aHdoaWxlLikKKwkJICovCisKKwkJaSAtPSBCaWFzOworI2lmZGVmIElCTQorCQlp IDw8PSAyOworCQlpICs9IGo7CisjZW5kaWYKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQlk ZW5vcm0gPSAwOworCQl9CisJZWxzZSB7CisJCS8qIGQgaXMgZGVub3JtYWxpemVkICovCisKKwkJ aSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQLTEpIC0gMSk7CisJCXggPSBpID4gMzIgID8gd29y ZDAoJmQpIDw8ICg2NCAtIGkpIHwgd29yZDEoJmQpID4+IChpIC0gMzIpCisJCQkgICAgOiB3b3Jk MSgmZCkgPDwgKDMyIC0gaSk7CisJCWR2YWwoJmQyKSA9IHg7CisJCXdvcmQwKCZkMikgLT0gMzEq RXhwX21zazE7IC8qIGFkanVzdCBleHBvbmVudCAqLworCQlpIC09IChCaWFzICsgKFAtMSkgLSAx KSArIDE7CisJCWRlbm9ybSA9IDE7CisJCX0KKyNlbmRpZgorCWRzID0gKGR2YWwoJmQyKS0xLjUp KjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU4ICsgaSowLjMwMTAyOTk5NTY2Mzk4 MTsKKwlrID0gKGludClkczsKKwlpZiAoZHMgPCAwLiAmJiBkcyAhPSBrKQorCQlrLS07CS8qIHdh bnQgayA9IGZsb29yKGRzKSAqLworCWtfY2hlY2sgPSAxOworCWlmIChrID49IDAgJiYgayA8PSBU ZW5fcG1heCkgeworCQlpZiAoZHZhbCgmZCkgPCB0ZW5zW2tdKQorCQkJay0tOworCQlrX2NoZWNr ID0gMDsKKwkJfQorCWogPSBiYml0cyAtIGkgLSAxOworCWlmIChqID49IDApIHsKKwkJYjIgPSAw OworCQlzMiA9IGo7CisJCX0KKwllbHNlIHsKKwkJYjIgPSAtajsKKwkJczIgPSAwOworCQl9CisJ aWYgKGsgPj0gMCkgeworCQliNSA9IDA7CisJCXM1ID0gazsKKwkJczIgKz0gazsKKwkJfQorCWVs c2UgeworCQliMiAtPSBrOworCQliNSA9IC1rOworCQlzNSA9IDA7CisJCX0KKwlpZiAobW9kZSA8 IDAgfHwgbW9kZSA+IDkpCisJCW1vZGUgPSAwOworCisjaWZuZGVmIFNFVF9JTkVYQUNUCisjaWZk ZWYgQ2hlY2tfRkxUX1JPVU5EUworCXRyeV9xdWljayA9IFJvdW5kaW5nID09IDE7CisjZWxzZQor CXRyeV9xdWljayA9IDE7CisjZW5kaWYKKyNlbmRpZiAvKlNFVF9JTkVYQUNUKi8KKworCWlmICht b2RlID4gNSkgeworCQltb2RlIC09IDQ7CisJCXRyeV9xdWljayA9IDA7CisJCX0KKwlsZWZ0cmln aHQgPSAxOworCWlsaW0gPSBpbGltMSA9IC0xOwkvKiBWYWx1ZXMgZm9yIGNhc2VzIDAgYW5kIDE7 IGRvbmUgaGVyZSB0byAqLworCQkJCS8qIHNpbGVuY2UgZXJyb25lb3VzICJnY2MgLVdhbGwiIHdh cm5pbmcuICovCisJc3dpdGNoKG1vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlpID0g MTg7CisJCQluZGlnaXRzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlsZWZ0cmlnaHQg PSAwOworCQkJLyogbm8gYnJlYWsgKi8KKwkJY2FzZSA0OgorCQkJaWYgKG5kaWdpdHMgPD0gMCkK KwkJCQluZGlnaXRzID0gMTsKKwkJCWlsaW0gPSBpbGltMSA9IGkgPSBuZGlnaXRzOworCQkJYnJl YWs7CisJCWNhc2UgMzoKKwkJCWxlZnRyaWdodCA9IDA7CisJCQkvKiBubyBicmVhayAqLworCQlj YXNlIDU6CisJCQlpID0gbmRpZ2l0cyArIGsgKyAxOworCQkJaWxpbSA9IGk7CisJCQlpbGltMSA9 IGkgLSAxOworCQkJaWYgKGkgPD0gMCkKKwkJCQlpID0gMTsKKwkJfQorCXMgPSBzMCA9IHJ2X2Fs bG9jKGkpOworCWlmIChzID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKyNpZmRlZiBIb25v cl9GTFRfUk9VTkRTCisJaWYgKG1vZGUgPiAxICYmIFJvdW5kaW5nICE9IDEpCisJCWxlZnRyaWdo dCA9IDA7CisjZW5kaWYKKworCWlmIChpbGltID49IDAgJiYgaWxpbSA8PSBRdWlja19tYXggJiYg dHJ5X3F1aWNrKSB7CisKKwkJLyogVHJ5IHRvIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFy aXRobWV0aWMuICovCisKKwkJaSA9IDA7CisJCWR2YWwoJmQyKSA9IGR2YWwoJmQpOworCQlrMCA9 IGs7CisJCWlsaW0wID0gaWxpbTsKKwkJaWVwcyA9IDI7IC8qIGNvbnNlcnZhdGl2ZSAqLworCQlp ZiAoayA+IDApIHsKKwkJCWRzID0gdGVuc1trJjB4Zl07CisJCQlqID0gayA+PiA0OworCQkJaWYg KGogJiBCbGV0Y2gpIHsKKwkJCQkvKiBwcmV2ZW50IG92ZXJmbG93cyAqLworCQkJCWogJj0gQmxl dGNoIC0gMTsKKwkJCQlkdmFsKCZkKSAvPSBiaWd0ZW5zW25fYmlndGVucy0xXTsKKwkJCQlpZXBz Kys7CisJCQkJfQorCQkJZm9yKDsgajsgaiA+Pj0gMSwgaSsrKQorCQkJCWlmIChqICYgMSkgewor CQkJCQlpZXBzKys7CisJCQkJCWRzICo9IGJpZ3RlbnNbaV07CisJCQkJCX0KKwkJCWR2YWwoJmQp IC89IGRzOworCQkJfQorCQllbHNlIGlmICgoIGoxID0gLWsgKSE9MCkgeworCQkJZHZhbCgmZCkg Kj0gdGVuc1tqMSAmIDB4Zl07CisJCQlmb3IoaiA9IGoxID4+IDQ7IGo7IGogPj49IDEsIGkrKykK KwkJCQlpZiAoaiAmIDEpIHsKKwkJCQkJaWVwcysrOworCQkJCQlkdmFsKCZkKSAqPSBiaWd0ZW5z W2ldOworCQkJCQl9CisJCQl9CisJCWlmIChrX2NoZWNrICYmIGR2YWwoJmQpIDwgMS4gJiYgaWxp bSA+IDApIHsKKwkJCWlmIChpbGltMSA8PSAwKQorCQkJCWdvdG8gZmFzdF9mYWlsZWQ7CisJCQlp bGltID0gaWxpbTE7CisJCQlrLS07CisJCQlkdmFsKCZkKSAqPSAxMC47CisJCQlpZXBzKys7CisJ CQl9CisJCWR2YWwoJmVwcykgPSBpZXBzKmR2YWwoJmQpICsgNy47CisJCXdvcmQwKCZlcHMpIC09 IChQLTEpKkV4cF9tc2sxOworCQlpZiAoaWxpbSA9PSAwKSB7CisJCQlTID0gbWhpID0gMDsKKwkJ CWR2YWwoJmQpIC09IDUuOworCQkJaWYgKGR2YWwoJmQpID4gZHZhbCgmZXBzKSkKKwkJCQlnb3Rv IG9uZV9kaWdpdDsKKwkJCWlmIChkdmFsKCZkKSA8IC1kdmFsKCZlcHMpKQorCQkJCWdvdG8gbm9f ZGlnaXRzOworCQkJZ290byBmYXN0X2ZhaWxlZDsKKwkJCX0KKyNpZm5kZWYgTm9fbGVmdHJpZ2h0 CisJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCS8qIFVzZSBTdGVlbGUgJiBXaGl0ZSBtZXRob2Qgb2Yg b25seQorCQkJICogZ2VuZXJhdGluZyBkaWdpdHMgbmVlZGVkLgorCQkJICovCisJCQlkdmFsKCZl cHMpID0gMC41L3RlbnNbaWxpbS0xXSAtIGR2YWwoJmVwcyk7CisJCQlmb3IoaSA9IDA7Oykgewor CQkJCUwgPSBkdmFsKCZkKTsKKwkJCQlkdmFsKCZkKSAtPSBMOworCQkJCSpzKysgPSAnMCcgKyAo aW50KUw7CisJCQkJaWYgKGR2YWwoJmQpIDwgZHZhbCgmZXBzKSkKKwkJCQkJZ290byByZXQxOwor CQkJCWlmICgxLiAtIGR2YWwoJmQpIDwgZHZhbCgmZXBzKSkKKwkJCQkJZ290byBidW1wX3VwOwor CQkJCWlmICgrK2kgPj0gaWxpbSkKKwkJCQkJYnJlYWs7CisJCQkJZHZhbCgmZXBzKSAqPSAxMC47 CisJCQkJZHZhbCgmZCkgKj0gMTAuOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisjZW5kaWYKKwkJ CS8qIEdlbmVyYXRlIGlsaW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVtIHVwLiAqLworCQkJZHZhbCgm ZXBzKSAqPSB0ZW5zW2lsaW0tMV07CisJCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEw LikgeworCQkJCUwgPSAoTG9uZykoZHZhbCgmZCkpOworCQkJCWlmICghKGR2YWwoJmQpIC09IEwp KQorCQkJCQlpbGltID0gaTsKKwkJCQkqcysrID0gJzAnICsgKGludClMOworCQkJCWlmIChpID09 IGlsaW0pIHsKKwkJCQkJaWYgKGR2YWwoJmQpID4gMC41ICsgZHZhbCgmZXBzKSkKKwkJCQkJCWdv dG8gYnVtcF91cDsKKwkJCQkJZWxzZSBpZiAoZHZhbCgmZCkgPCAwLjUgLSBkdmFsKCZlcHMpKSB7 CisJCQkJCQl3aGlsZSgqLS1zID09ICcwJyk7CisJCQkJCQlzKys7CisJCQkJCQlnb3RvIHJldDE7 CisJCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorI2lmbmRlZiBOb19sZWZ0cmln aHQKKwkJCX0KKyNlbmRpZgorIGZhc3RfZmFpbGVkOgorCQlzID0gczA7CisJCWR2YWwoJmQpID0g ZHZhbCgmZDIpOworCQlrID0gazA7CisJCWlsaW0gPSBpbGltMDsKKwkJfQorCisJLyogRG8gd2Ug aGF2ZSBhICJzbWFsbCIgaW50ZWdlcj8gKi8KKworCWlmIChiZSA+PSAwICYmIGsgPD0gSW50X21h eCkgeworCQkvKiBZZXMuICovCisJCWRzID0gdGVuc1trXTsKKwkJaWYgKG5kaWdpdHMgPCAwICYm IGlsaW0gPD0gMCkgeworCQkJUyA9IG1oaSA9IDA7CisJCQlpZiAoaWxpbSA8IDAgfHwgZHZhbCgm ZCkgPD0gNSpkcykKKwkJCQlnb3RvIG5vX2RpZ2l0czsKKwkJCWdvdG8gb25lX2RpZ2l0OworCQkJ fQorCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEwLikgeworCQkJTCA9IChMb25nKShk dmFsKCZkKSAvIGRzKTsKKwkJCWR2YWwoJmQpIC09IEwqZHM7CisjaWZkZWYgQ2hlY2tfRkxUX1JP VU5EUworCQkJLyogSWYgRkxUX1JPVU5EUyA9PSAyLCBMIHdpbGwgdXN1YWxseSBiZSBoaWdoIGJ5 IDEgKi8KKwkJCWlmIChkdmFsKCZkKSA8IDApIHsKKwkJCQlMLS07CisJCQkJZHZhbCgmZCkgKz0g ZHM7CisJCQkJfQorI2VuZGlmCisJCQkqcysrID0gJzAnICsgKGludClMOworCQkJaWYgKCFkdmFs KCZkKSkgeworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJ CQlicmVhazsKKwkJCQl9CisJCQlpZiAoaSA9PSBpbGltKSB7CisjaWZkZWYgSG9ub3JfRkxUX1JP VU5EUworCQkJCWlmIChtb2RlID4gMSkKKwkJCQlzd2l0Y2goUm91bmRpbmcpIHsKKwkJCQkgIGNh c2UgMDogZ290byByZXQxOworCQkJCSAgY2FzZSAyOiBnb3RvIGJ1bXBfdXA7CisJCQkJICB9Cisj ZW5kaWYKKwkJCQlkdmFsKCZkKSArPSBkdmFsKCZkKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJ CQlpZiAoZHZhbCgmZCkgPj0gZHMpCisjZWxzZQorCQkJCWlmIChkdmFsKCZkKSA+IGRzIHx8IChk dmFsKCZkKSA9PSBkcyAmJiBMICYgMSkpCisjZW5kaWYKKwkJCQkJeworIGJ1bXBfdXA6CisJCQkJ CXdoaWxlKCotLXMgPT0gJzknKQorCQkJCQkJaWYgKHMgPT0gczApIHsKKwkJCQkJCQlrKys7CisJ CQkJCQkJKnMgPSAnMCc7CisJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkrKypzKys7CisJ CQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCWdvdG8gcmV0MTsKKwkJfQorCisJbTIg PSBiMjsKKwltNSA9IGI1OworCW1oaSA9IG1sbyA9IDA7CisJaWYgKGxlZnRyaWdodCkgeworCQlp ID0KKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQkJZGVub3JtID8gYmUgKyAoQmlhcyArIChQ LTEpIC0gMSArIDEpIDoKKyNlbmRpZgorI2lmZGVmIElCTQorCQkJMSArIDQqUCAtIDMgLSBiYml0 cyArICgoYmJpdHMgKyBiZSAtIDEpICYgMyk7CisjZWxzZQorCQkJMSArIFAgLSBiYml0czsKKyNl bmRpZgorCQliMiArPSBpOworCQlzMiArPSBpOworCQltaGkgPSBpMmIoMSk7CisJCWlmIChtaGkg PT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwlpZiAobTIgPiAwICYmIHMyID4gMCkg eworCQlpID0gbTIgPCBzMiA/IG0yIDogczI7CisJCWIyIC09IGk7CisJCW0yIC09IGk7CisJCXMy IC09IGk7CisJCX0KKwlpZiAoYjUgPiAwKSB7CisJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCWlmICht NSA+IDApIHsKKwkJCQltaGkgPSBwb3c1bXVsdChtaGksIG01KTsKKwkJCQlpZiAobWhpID09IE5V TEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJYjEgPSBtdWx0KG1oaSwgYik7CisJCQkJaWYg KGIxID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJQmZyZWUoYik7CisJCQkJYiA9 IGIxOworCQkJCX0KKwkJCWlmICgoIGogPSBiNSAtIG01ICkhPTApIHsKKwkJCQliID0gcG93NW11 bHQoYiwgaik7CisJCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9 CisJCQl9CisJCWVsc2UgeworCQkJYiA9IHBvdzVtdWx0KGIsIGI1KTsKKwkJCWlmIChiID09IE5V TEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCVMgPSBpMmIoMSk7CisJaWYgKFMg PT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlpZiAoczUgPiAwKSB7CisJCVMgPSBwb3c1bXVs dChTLCBzNSk7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwkv KiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2Yg Mi4gKi8KKworCXNwZWNfY2FzZSA9IDA7CisJaWYgKChtb2RlIDwgMiB8fCBsZWZ0cmlnaHQpCisj aWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJJiYgUm91bmRpbmcgPT0gMQorI2VuZGlmCisJCQkJ KSB7CisJCWlmICghd29yZDEoJmQpICYmICEod29yZDAoJmQpICYgQm5kcnlfbWFzaykKKyNpZm5k ZWYgU3VkZGVuX1VuZGVyZmxvdworCQkgJiYgd29yZDAoJmQpICYgKEV4cF9tYXNrICYgfkV4cF9t c2sxKQorI2VuZGlmCisJCQkJKSB7CisJCQkvKiBUaGUgc3BlY2lhbCBjYXNlICovCisJCQliMiAr PSBMb2cyUDsKKwkJCXMyICs9IExvZzJQOworCQkJc3BlY19jYXNlID0gMTsKKwkJCX0KKwkJfQor CisJLyogQXJyYW5nZSBmb3IgY29udmVuaWVudCBjb21wdXRhdGlvbiBvZiBxdW90aWVudHM6CisJ ICogc2hpZnQgbGVmdCBpZiBuZWNlc3Nhcnkgc28gZGl2aXNvciBoYXMgNCBsZWFkaW5nIDAgYml0 cy4KKwkgKgorCSAqIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgY29tcHV0ZSBsZWFkaW5nIDI4IGJp dHMgb2YgUyBvbmNlCisJICogYW5kIGZvciBhbGwgYW5kIHBhc3MgdGhlbSBhbmQgYSBzaGlmdCB0 byBxdW9yZW0sIHNvIGl0CisJICogY2FuIGRvIHNoaWZ0cyBhbmQgb3JzIHRvIGNvbXB1dGUgdGhl IG51bWVyYXRvciBmb3IgcS4KKwkgKi8KKyNpZmRlZiBQYWNrXzMyCisJaWYgKCggaSA9ICgoczUg PyAzMiAtIGhpMGJpdHMoUy0+eFtTLT53ZHMtMV0pIDogMSkgKyBzMikgJiAweDFmICkhPTApCisJ CWkgPSAzMiAtIGk7CisjZWxzZQorCWlmICgoIGkgPSAoKHM1ID8gMzIgLSBoaTBiaXRzKFMtPnhb Uy0+d2RzLTFdKSA6IDEpICsgczIpICYgMHhmICkhPTApCisJCWkgPSAxNiAtIGk7CisjZW5kaWYK KwlpZiAoaSA+IDQpIHsKKwkJaSAtPSA0OworCQliMiArPSBpOworCQltMiArPSBpOworCQlzMiAr PSBpOworCQl9CisJZWxzZSBpZiAoaSA8IDQpIHsKKwkJaSArPSAyODsKKwkJYjIgKz0gaTsKKwkJ bTIgKz0gaTsKKwkJczIgKz0gaTsKKwkJfQorCWlmIChiMiA+IDApIHsKKwkJYiA9IGxzaGlmdChi LCBiMik7CisJCWlmIChiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJaWYgKHMy ID4gMCkgeworCQlTID0gbHNoaWZ0KFMsIHMyKTsKKwkJaWYgKFMgPT0gTlVMTCkKKwkJCXJldHVy biAoTlVMTCk7CisJCX0KKwlpZiAoa19jaGVjaykgeworCQlpZiAoY21wKGIsUykgPCAwKSB7CisJ CQlrLS07CisJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CS8qIHdlIGJvdGNoZWQgdGhlIGsgZXN0 aW1hdGUgKi8KKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWlmIChs ZWZ0cmlnaHQpIHsKKwkJCQltaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtaGkg PT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQlpbGltID0gaWxpbTE7CisJ CQl9CisJCX0KKwlpZiAoaWxpbSA8PSAwICYmIChtb2RlID09IDMgfHwgbW9kZSA9PSA1KSkgewor CQlTID0gbXVsdGFkZChTLDUsMCk7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwp OworCQlpZiAoaWxpbSA8IDAgfHwgY21wKGIsUykgPD0gMCkgeworCQkJLyogbm8gZGlnaXRzLCBm Y3Z0IHN0eWxlICovCisgbm9fZGlnaXRzOgorCQkJayA9IC0xIC0gbmRpZ2l0czsKKwkJCWdvdG8g cmV0OworCQkJfQorIG9uZV9kaWdpdDoKKwkJKnMrKyA9ICcxJzsKKwkJaysrOworCQlnb3RvIHJl dDsKKwkJfQorCWlmIChsZWZ0cmlnaHQpIHsKKwkJaWYgKG0yID4gMCkgeworCQkJbWhpID0gbHNo aWZ0KG1oaSwgbTIpOworCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJ CQl9CisKKwkJLyogQ29tcHV0ZSBtbG8gLS0gY2hlY2sgZm9yIHNwZWNpYWwgY2FzZQorCQkgKiB0 aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuCisJCSAqLworCisJCW1sbyA9IG1oaTsK KwkJaWYgKHNwZWNfY2FzZSkgeworCQkJbWhpID0gQmFsbG9jKG1oaS0+ayk7CisJCQlpZiAobWhp ID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCUJjb3B5KG1oaSwgbWxvKTsKKwkJCW1o aSA9IGxzaGlmdChtaGksIExvZzJQKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQlyZXR1cm4g KE5VTEwpOworCQkJfQorCisJCWZvcihpID0gMTs7aSsrKSB7CisJCQlkaWcgPSBxdW9yZW0oYixT KSArICcwJzsKKwkJCS8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmlu ZworCQkJICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/CisJCQkgKi8KKwkJCWogPSBjbXAoYiwgbWxv KTsKKwkJCWRlbHRhID0gZGlmZihTLCBtaGkpOworCQkJaWYgKGRlbHRhID09IE5VTEwpCisJCQkJ cmV0dXJuIChOVUxMKTsKKwkJCWoxID0gZGVsdGEtPnNpZ24gPyAxIDogY21wKGIsIGRlbHRhKTsK KwkJCUJmcmVlKGRlbHRhKTsKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQlpZiAoajEgPT0gMCAm JiBtb2RlICE9IDEgJiYgISh3b3JkMSgmZCkgJiAxKQorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMK KwkJCQkmJiBSb3VuZGluZyA+PSAxCisjZW5kaWYKKwkJCQkJCQkJICAgKSB7CisJCQkJaWYgKGRp ZyA9PSAnOScpCisJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQlpZiAoaiA+IDApCisJCQkJCWRp ZysrOworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJZWxzZSBpZiAoIWItPnhbMF0gJiYgYi0+d2Rz IDw9IDEpCisJCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJKnMrKyA9IGRpZzsKKwkJCQln b3RvIHJldDsKKwkJCQl9CisjZW5kaWYKKwkJCWlmIChqIDwgMCB8fCAoaiA9PSAwICYmIG1vZGUg IT0gMQorI2lmbmRlZiBST1VORF9CSUFTRUQKKwkJCQkJCQkmJiAhKHdvcmQxKCZkKSAmIDEpCisj ZW5kaWYKKwkJCQkJKSkgeworCQkJCWlmICghYi0+eFswXSAmJiBiLT53ZHMgPD0gMSkgeworI2lm ZGVmIFNFVF9JTkVYQUNUCisJCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJCWdvdG8gYWNj ZXB0X2RpZzsKKwkJCQkJfQorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwkJCQlpZiAobW9kZSA+ IDEpCisJCQkJIHN3aXRjaChSb3VuZGluZykgeworCQkJCSAgY2FzZSAwOiBnb3RvIGFjY2VwdF9k aWc7CisJCQkJICBjYXNlIDI6IGdvdG8ga2VlcF9kaWc7CisJCQkJICB9CisjZW5kaWYgLypIb25v cl9GTFRfUk9VTkRTKi8KKwkJCQlpZiAoajEgPiAwKSB7CisJCQkJCWIgPSBsc2hpZnQoYiwgMSk7 CisJCQkJCWlmIChiID09IE5VTEwpCisJCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCQlqMSA9IGNt cChiLCBTKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJCQkJaWYgKGoxID49IDAgLyopKi8KKyNl bHNlCisJCQkJCWlmICgoajEgPiAwIHx8IChqMSA9PSAwICYmIGRpZyAmIDEpKQorI2VuZGlmCisJ CQkJCSYmIGRpZysrID09ICc5JykKKwkJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQkJfQorIGFj Y2VwdF9kaWc6CisJCQkJKnMrKyA9IGRpZzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQlpZiAo ajEgPiAwKSB7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJCWlmICghUm91bmRpbmcpCisJ CQkJCWdvdG8gYWNjZXB0X2RpZzsKKyNlbmRpZgorCQkJCWlmIChkaWcgPT0gJzknKSB7IC8qIHBv c3NpYmxlIGlmIGkgPT0gMSAqLworIHJvdW5kXzlfdXA6CisJCQkJCSpzKysgPSAnOSc7CisJCQkJ CWdvdG8gcm91bmRvZmY7CisJCQkJCX0KKwkJCQkqcysrID0gZGlnICsgMTsKKwkJCQlnb3RvIHJl dDsKKwkJCQl9CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworIGtlZXBfZGlnOgorI2VuZGlmCisJ CQkqcysrID0gZGlnOworCQkJaWYgKGkgPT0gaWxpbSkKKwkJCQlicmVhazsKKwkJCWIgPSBtdWx0 YWRkKGIsIDEwLCAwKTsKKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJ CWlmIChtbG8gPT0gbWhpKSB7CisJCQkJbWxvID0gbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsK KwkJCQlpZiAobWxvID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJZWxz ZSB7CisJCQkJbWxvID0gbXVsdGFkZChtbG8sIDEwLCAwKTsKKwkJCQlpZiAobWxvID09IE5VTEwp CisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJ CQlpZiAobWhpID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJfQorCQl9 CisJZWxzZQorCQlmb3IoaSA9IDE7OyBpKyspIHsKKwkJCSpzKysgPSBkaWcgPSBxdW9yZW0oYixT KSArICcwJzsKKwkJCWlmICghYi0+eFswXSAmJiBiLT53ZHMgPD0gMSkgeworI2lmZGVmIFNFVF9J TkVYQUNUCisJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJ CQlpZiAoaSA+PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOwor CQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCisJLyogUm91bmQg b2ZmIGxhc3QgZGlnaXQgKi8KKworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwlzd2l0Y2goUm91 bmRpbmcpIHsKKwkgIGNhc2UgMDogZ290byB0cmltemVyb3M7CisJICBjYXNlIDI6IGdvdG8gcm91 bmRvZmY7CisJICB9CisjZW5kaWYKKwliID0gbHNoaWZ0KGIsIDEpOworCWlmIChiID09IE5VTEwp CisJCXJldHVybiAoTlVMTCk7CisJaiA9IGNtcChiLCBTKTsKKyNpZmRlZiBST1VORF9CSUFTRUQK KwlpZiAoaiA+PSAwKQorI2Vsc2UKKwlpZiAoaiA+IDAgfHwgKGogPT0gMCAmJiBkaWcgJiAxKSkK KyNlbmRpZgorCQl7Cisgcm91bmRvZmY6CisJCXdoaWxlKCotLXMgPT0gJzknKQorCQkJaWYgKHMg PT0gczApIHsKKwkJCQlrKys7CisJCQkJKnMrKyA9ICcxJzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9 CisJCSsrKnMrKzsKKwkJfQorCWVsc2UgeworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKyB0cmlt emVyb3M6CisjZW5kaWYKKwkJd2hpbGUoKi0tcyA9PSAnMCcpOworCQlzKys7CisJCX0KKyByZXQ6 CisJQmZyZWUoUyk7CisJaWYgKG1oaSkgeworCQlpZiAobWxvICYmIG1sbyAhPSBtaGkpCisJCQlC ZnJlZShtbG8pOworCQlCZnJlZShtaGkpOworCQl9CisgcmV0MToKKyNpZmRlZiBTRVRfSU5FWEFD VAorCWlmIChpbmV4YWN0KSB7CisJCWlmICghb2xkaW5leGFjdCkgeworCQkJd29yZDAoJmQpID0g RXhwXzEgKyAoNzAgPDwgRXhwX3NoaWZ0KTsKKwkJCXdvcmQxKCZkKSA9IDA7CisJCQlkdmFsKCZk KSArPSAxLjsKKwkJCX0KKwkJfQorCWVsc2UgaWYgKCFvbGRpbmV4YWN0KQorCQljbGVhcl9pbmV4 YWN0KCk7CisjZW5kaWYKKwlCZnJlZShiKTsKKwkqcyA9IDA7CisJKmRlY3B0ID0gayArIDE7CisJ aWYgKHJ2ZSkKKwkJKnJ2ZSA9IHM7CisJcmV0dXJuIHMwOworfQpkaWZmIC0tZ2l0IGEvbmV3bGli L2xpYmMvc3RkbGliL2dkdG9hLWdkdG9hLmMgYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtZ2R0 b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmZlYWU1YWZhMwotLS0g L2Rldi9udWxsCisrKyBiL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1nZHRvYS5jCkBAIC0wLDAg KzEsODMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2 aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgYnkgTHVjZW50IFRlY2hub2xv Z2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24g Zm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3Zp ZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVz IGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlz c2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcK K2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRz IGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFp bmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3 cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5U SUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBT SEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BF Q0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitX SEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdI RVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JU SU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVT RSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxl YXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcs CisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIu IikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisgc3RhdGljIEJpZ2ludCAqCisjaWZk ZWYgS1JfaGVhZGVycworYml0c3RvYihiaXRzLCBuYml0cywgYmJpdHMpIFVMb25nICpiaXRzOyBp bnQgbmJpdHM7IGludCAqYmJpdHM7CisjZWxzZQorYml0c3RvYihVTG9uZyAqYml0cywgaW50IG5i aXRzLCBpbnQgKmJiaXRzKQorI2VuZGlmCit7CisJaW50IGksIGs7CisJQmlnaW50ICpiOworCVVM b25nICpiZSwgKngsICp4MDsKKworCWkgPSBVTGJpdHM7CisJayA9IDA7CisJd2hpbGUoaSA8IG5i aXRzKSB7CisJCWkgPDw9IDE7CisJCWsrKzsKKwkJfQorI2lmbmRlZiBQYWNrXzMyCisJaWYgKCFr KQorCQlrID0gMTsKKyNlbmRpZgorCWIgPSBCYWxsb2Moayk7CisJaWYgKGIgPT0gTlVMTCkKKwkJ cmV0dXJuIChOVUxMKTsKKwliZSA9IGJpdHMgKyAoKG5iaXRzIC0gMSkgPj4ga3NoaWZ0KTsKKwl4 ID0geDAgPSBiLT54OworCWRvIHsKKwkJKngrKyA9ICpiaXRzICYgQUxMX09OOworI2lmZGVmIFBh Y2tfMTYKKwkJKngrKyA9ICgqYml0cyA+PiAxNikgJiBBTExfT047CisjZW5kaWYKKwkJfSB3aGls ZSgrK2JpdHMgPD0gYmUpOworCWkgPSB4IC0geDA7CisJd2hpbGUoIXgwWy0taV0pCisJCWlmICgh aSkgeworCQkJYi0+d2RzID0gMDsKKwkJCSpiYml0cyA9IDA7CisJCQlnb3RvIHJldDsKKwkJCX0K KwliLT53ZHMgPSBpICsgMTsKKwkqYmJpdHMgPSBpKlVMYml0cyArIDMyIC0gaGkwYml0cyhiLT54 W2ldKTsKKyByZXQ6CisJcmV0dXJuIGI7CisJfQorCisvKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0 aWMgKGRtZyk6IGNvbnZlcnQgZG91YmxlIHRvIEFTQ0lJIHN0cmluZy4KKyAqCisgKiBJbnNwaXJl ZCBieSAiSG93IHRvIFByaW50IEZsb2F0aW5nLVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkK KyAqIEd1eSBMLiBTdGVlbGUsIEpyLiBhbmQgSm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExB TiAnOTAsIHBwLiAxMTItMTI2XS4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICoJMS4gUmF0aGVy IHRoYW4gaXRlcmF0aW5nLCB3ZSB1c2UgYSBzaW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKKyAq CSAgIHRvIGRldGVybWluZSBrID0gZmxvb3IobG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQK KyAqCSAgIHF1YW50aXRpZXMgdXNpbmcgTyhsb2cyKGspKSByYXRoZXIgdGhhbiBPKGspIG11bHRp cGxpY2F0aW9ucy4KKyAqCTIuIEZvciBzb21lIG1vZGVzID4gMiAoY29ycmVzcG9uZGluZyB0byBl Y3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKKyAqCSAgIHRyeSB0byBnZW5lcmF0ZSBkaWdpdHMgc3Ry aWN0bHkgbGVmdCB0byByaWdodC4gIEluc3RlYWQsIHdlCisgKgkgICBjb21wdXRlIHdpdGggZmV3 ZXIgYml0cyBhbmQgcHJvcGFnYXRlIHRoZSBjYXJyeSBpZiBuZWNlc3NhcnkKKyAqCSAgIHdoZW4g cm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVwLiAgVGhpcyBpcyBvZnRlbiBmYXN0ZXIuCisgKgkz LiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IHdpbGwgYmUgcm91bmRlZCBuZWFyZXN0 LAorICoJICAgbW9kZSAwIHJlbmRlcnMgMWUyMyBhcyAxZTIzIHJhdGhlciB0aGFuIDkuOTk5OTk5 OTk5OTk5OTk5ZTIyLgorICoJICAgVGhhdCBpcywgd2UgYWxsb3cgZXF1YWxpdHkgaW4gc3RvcHBp bmcgdGVzdHMgd2hlbiB0aGUKKyAqCSAgIHJvdW5kLW5lYXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhl IHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUKKyAqCSAgIGFzIHdvdWxkIHNhdGlzZmFjdGlvbiBv ZiB0aGUgc3RvcHBpbmcgdGVzdCB3aXRoIHN0cmljdAorICoJICAgaW5lcXVhbGl0eS4KKyAqCTQu IFdlIHJlbW92ZSBjb21tb24gZmFjdG9ycyBvZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50Cisg KgkgICBxdWFudGl0aWVzLgorICoJNS4gV2hlbiBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGlu dGVnZXJzIGxlc3MgdGhhbiAxZTE2LAorICoJICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRo bWV0aWMgcmF0aGVyIHRoYW4gcmVzb3J0aW5nCisgKgkgICB0byBtdWx0aXBsZS1wcmVjaXNpb24g aW50ZWdlcnMuCisgKgk2LiBXaGVuIGFza2VkIHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdp dHMsIHdlIGZpcnN0IHRyeQorICoJICAgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJp dGhtZXRpYzsgd2UgcmVzb3J0IHRvCisgKgkgICBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBh cml0aG1ldGljIG9ubHkgaWYgd2UgY2Fubm90CisgKgkgICBndWFyYW50ZWUgdGhhdCB0aGUgZmxv YXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFzIGdpdmVuCisgKgkgICB0aGUgY29ycmVjdGx5IHJv dW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVzdGVkIGRpZ2l0cyBhbmQKKyAqCSAgICJ1bmlmb3Jt bHkiIGRpc3RyaWJ1dGVkIGlucHV0LCB0aGUgcHJvYmFiaWxpdHkgaXMKKyAqCSAgIHNvbWV0aGlu ZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11c3QgcmVzb3J0IHRvIHRoZSBMb25nCisgKgkgICBj YWxjdWxhdGlvbi4KKyAqLworCisgY2hhciAqCitnZHRvYQorI2lmZGVmIEtSX2hlYWRlcnMKKwko ZnBpLCBiZSwgYml0cywga2luZHAsIG1vZGUsIG5kaWdpdHMsIGRlY3B0LCBydmUpCisJRlBJICpm cGk7IGludCBiZTsgVUxvbmcgKmJpdHM7CisJaW50ICpraW5kcCwgbW9kZSwgbmRpZ2l0cywgKmRl Y3B0OyBjaGFyICoqcnZlOworI2Vsc2UKKwkoRlBJICpmcGksIGludCBiZSwgVUxvbmcgKmJpdHMs IGludCAqa2luZHAsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgY2hhciAqKnJ2 ZSkKKyNlbmRpZgoreworIC8qCUFyZ3VtZW50cyBuZGlnaXRzIGFuZCBkZWNwdCBhcmUgc2ltaWxh ciB0byB0aGUgc2Vjb25kIGFuZCB0aGlyZAorCWFyZ3VtZW50cyBvZiBlY3Z0IGFuZCBmY3Z0OyB0 cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZCBmcm9tCisJdGhlIHJldHVybmVkIHN0cmluZy4g IElmIG5vdCBudWxsLCAqcnZlIGlzIHNldCB0byBwb2ludAorCXRvIHRoZSBlbmQgb2YgdGhlIHJl dHVybiB2YWx1ZS4gIElmIGQgaXMgKy1JbmZpbml0eSBvciBOYU4sCisJdGhlbiAqZGVjcHQgaXMg c2V0IHRvIDk5OTkuCisJYmUgPSBleHBvbmVudDogdmFsdWUgPSAoaW50ZWdlciByZXByZXNlbnRl ZCBieSBiaXRzKSAqICgyIHRvIHRoZSBwb3dlciBvZiBiZSkuCisKKwltb2RlOgorCQkwID09PiBz aG9ydGVzdCBzdHJpbmcgdGhhdCB5aWVsZHMgZCB3aGVuIHJlYWQgaW4KKwkJCWFuZCByb3VuZGVk IHRvIG5lYXJlc3QuCisJCTEgPT0+IGxpa2UgMCwgYnV0IHdpdGggU3RlZWxlICYgV2hpdGUgc3Rv cHBpbmcgcnVsZTsKKwkJCWUuZy4gd2l0aCBJRUVFIFA3NTQgYXJpdGhtZXRpYyAsIG1vZGUgMCBn aXZlcworCQkJMWUyMyB3aGVyZWFzIG1vZGUgMSBnaXZlcyA5Ljk5OTk5OTk5OTk5OTk5OWUyMi4K KwkJMiA9PT4gbWF4KDEsbmRpZ2l0cykgc2lnbmlmaWNhbnQgZGlnaXRzLiAgVGhpcyBnaXZlcyBh CisJCQlyZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IG9mIGVjdnQsIGV4Y2VwdAorCQkJdGhh dCB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZC4KKwkJMyA9PT4gdGhyb3VnaCBuZGlnaXRz IHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQuICBUaGlzCisJCQlnaXZlcyBhIHJldHVybiB2YWx1ZSBz aW1pbGFyIHRvIHRoYXQgZnJvbSBmY3Z0LAorCQkJZXhjZXB0IHRoYXQgdHJhaWxpbmcgemVyb3Mg YXJlIHN1cHByZXNzZWQsIGFuZAorCQkJbmRpZ2l0cyBjYW4gYmUgbmVnYXRpdmUuCisJCTQtOSBz aG91bGQgZ2l2ZSB0aGUgc2FtZSByZXR1cm4gdmFsdWVzIGFzIDItMywgaS5lLiwKKwkJCTQgPD0g bW9kZSA8PSA5ID09PiBzYW1lIHJldHVybiBhcyBtb2RlCisJCQkyICsgKG1vZGUgJiAxKS4gIFRo ZXNlIG1vZGVzIGFyZSBtYWlubHkgZm9yCisJCQlkZWJ1Z2dpbmc7IG9mdGVuIHRoZXkgcnVuIHNs b3dlciBidXQgc29tZXRpbWVzCisJCQlmYXN0ZXIgdGhhbiBtb2RlcyAyLTMuCisJCTQsNSw4LDkg PT0+IGxlZnQtdG8tcmlnaHQgZGlnaXQgZ2VuZXJhdGlvbi4KKwkJNi05ID09PiBkb24ndCB0cnkg ZmFzdCBmbG9hdGluZy1wb2ludCBlc3RpbWF0ZQorCQkJKGlmIGFwcGxpY2FibGUpLgorCisJCVZh bHVlcyBvZiBtb2RlIG90aGVyIHRoYW4gMC05IGFyZSB0cmVhdGVkIGFzIG1vZGUgMC4KKworCQlT dWZmaWNpZW50IHNwYWNlIGlzIGFsbG9jYXRlZCB0byB0aGUgcmV0dXJuIHZhbHVlCisJCXRvIGhv bGQgdGhlIHN1cHByZXNzZWQgdHJhaWxpbmcgemVyb3MuCisJKi8KKworCWludCBiYml0cywgYjIs IGI1LCBiZTAsIGRpZywgaSwgaWVwcywgaWxpbSwgaWxpbTAsIGlsaW0xLCBpbmV4OworCWludCBq LCBqMSwgaywgazAsIGtfY2hlY2ssIGtpbmQsIGxlZnRyaWdodCwgbTIsIG01LCBuYml0czsKKwlp bnQgcmRpciwgczIsIHM1LCBzcGVjX2Nhc2UsIHRyeV9xdWljazsKKwlMb25nIEw7CisJQmlnaW50 ICpiLCAqYjEsICpkZWx0YSwgKm1sbywgKm1oaSwgKm1oaTEsICpTOworCWRvdWJsZSBkMiwgZHM7 CisJY2hhciAqcywgKnMwOworCVUgZCwgZXBzOworCisjaWZuZGVmIE1VTFRJUExFX1RIUkVBRFMK KwlpZiAoZHRvYV9yZXN1bHQpIHsKKwkJZnJlZWR0b2EoZHRvYV9yZXN1bHQpOworCQlkdG9hX3Jl c3VsdCA9IDA7CisJCX0KKyNlbmRpZgorCWluZXggPSAwOworCWtpbmQgPSAqa2luZHAgJj0gflNU UlRPR19JbmV4YWN0OworCXN3aXRjaChraW5kICYgU1RSVE9HX1JldG1hc2spIHsKKwkgIGNhc2Ug U1RSVE9HX1plcm86CisJCWdvdG8gcmV0X3plcm87CisJICBjYXNlIFNUUlRPR19Ob3JtYWw6CisJ ICBjYXNlIFNUUlRPR19EZW5vcm1hbDoKKwkJYnJlYWs7CisJICBjYXNlIFNUUlRPR19JbmZpbml0 ZToKKwkJKmRlY3B0ID0gLTMyNzY4OworCQlyZXR1cm4gbnJ2X2FsbG9jKCJJbmZpbml0eSIsIHJ2 ZSwgOCk7CisJICBjYXNlIFNUUlRPR19OYU46CisJCSpkZWNwdCA9IC0zMjc2ODsKKwkJcmV0dXJu IG5ydl9hbGxvYygiTmFOIiwgcnZlLCAzKTsKKwkgIGRlZmF1bHQ6CisJCXJldHVybiAwOworCSAg fQorCWIgPSBiaXRzdG9iKGJpdHMsIG5iaXRzID0gZnBpLT5uYml0cywgJmJiaXRzKTsKKwlpZiAo YiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWJlMCA9IGJlOworCWlmICggKGkgPSB0cmFp bHooYikpICE9MCkgeworCQlyc2hpZnQoYiwgaSk7CisJCWJlICs9IGk7CisJCWJiaXRzIC09IGk7 CisJCX0KKwlpZiAoIWItPndkcykgeworCQlCZnJlZShiKTsKKyByZXRfemVybzoKKwkJKmRlY3B0 ID0gMTsKKwkJcmV0dXJuIG5ydl9hbGxvYygiMCIsIHJ2ZSwgMSk7CisJCX0KKworCWR2YWwoJmQp ID0gYjJkKGIsICZpKTsKKwlpID0gYmUgKyBiYml0cyAtIDE7CisJd29yZDAoJmQpICY9IEZyYWNf bWFzazE7CisJd29yZDAoJmQpIHw9IEV4cF8xMTsKKyNpZmRlZiBJQk0KKwlpZiAoIChqID0gMTEg LSBoaTBiaXRzKHdvcmQwKCZkKSAmIEZyYWNfbWFzaykpICE9MCkKKwkJZHZhbCgmZCkgLz0gMSA8 PCBqOworI2VuZGlmCisKKwkvKiBsb2coeCkJfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKKwkg KiBsb2cxMCh4KQkgPSAgbG9nKHgpIC8gbG9nKDEwKQorCSAqCQl+PX4gbG9nKDEuNSkvbG9nKDEw KSArICh4LTEuNSkvKDEuNSpsb2coMTApKQorCSAqIGxvZzEwKCZkKSA9IChpLUJpYXMpKmxvZygy KS9sb2coMTApICsgbG9nMTAoZDIpCisJICoKKwkgKiBUaGlzIHN1Z2dlc3RzIGNvbXB1dGluZyBh biBhcHByb3hpbWF0aW9uIGsgdG8gbG9nMTAoJmQpIGJ5CisJICoKKwkgKiBrID0gKGkgLSBCaWFz KSowLjMwMTAyOTk5NTY2Mzk4MQorCSAqCSsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCAr IDAuMTc2MDkxMjU5MDU1NjgxICk7CisJICoKKwkgKiBXZSB3YW50IGsgdG8gYmUgdG9vIGxhcmdl IHJhdGhlciB0aGFuIHRvbyBzbWFsbC4KKwkgKiBUaGUgZXJyb3IgaW4gdGhlIGZpcnN0LW9yZGVy IFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbgorCSAqIGlzIGluIG91ciBmYXZvciwgc28gd2Ug anVzdCByb3VuZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCisJICogdG8gY29tcGVuc2F0ZSBmb3Ig YW55IGVycm9yIGluIHRoZSBtdWx0aXBsaWNhdGlvbiBvZgorCSAqIChpIC0gQmlhcykgYnkgMC4z MDEwMjk5OTU2NjM5ODE7IHNpbmNlIHxpIC0gQmlhc3wgPD0gMTA3NywKKwkgKiBhbmQgMTA3NyAq IDAuMzAxMDMgKiAyXi01MiB+PX4gNy4yZS0xNCwKKwkgKiBhZGRpbmcgMWUtMTMgdG8gdGhlIGNv bnN0YW50IHRlcm0gbW9yZSB0aGFuIHN1ZmZpY2VzLgorCSAqIEhlbmNlIHdlIGFkanVzdCB0aGUg Y29uc3RhbnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCisJICogKFdlIGNvdWxkIGdldCBhIG1v cmUgYWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKKwkgKiAgYnV0IHRoaXMgaXMgcHJvYmFi bHkgbm90IHdvcnRod2hpbGUuKQorCSAqLworI2lmZGVmIElCTQorCWkgPDw9IDI7CisJaSArPSBq OworI2VuZGlmCisJZHMgPSAoZHZhbCgmZCktMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2 MDkxMjU5MDU1OCArIGkqMC4zMDEwMjk5OTU2NjM5ODE7CisKKwkvKiBjb3JyZWN0IGFzc3VtcHRp b24gYWJvdXQgZXhwb25lbnQgcmFuZ2UgKi8KKwlpZiAoKGogPSBpKSA8IDApCisJCWogPSAtajsK KwlpZiAoKGogLT0gMTA3NykgPiAwKQorCQlkcyArPSBqICogN2UtMTc7CisKKwlrID0gKGludClk czsKKwlpZiAoZHMgPCAwLiAmJiBkcyAhPSBrKQorCQlrLS07CS8qIHdhbnQgayA9IGZsb29yKGRz KSAqLworCWtfY2hlY2sgPSAxOworI2lmZGVmIElCTQorCWogPSBiZSArIGJiaXRzIC0gMTsKKwlp ZiAoIChqMSA9IGogJiAzKSAhPTApCisJCWR2YWwoJmQpICo9IDEgPDwgajE7CisJd29yZDAoJmQp ICs9IGogPDwgRXhwX3NoaWZ0IC0gMiAmIEV4cF9tYXNrOworI2Vsc2UKKwl3b3JkMCgmZCkgKz0g KGJlICsgYmJpdHMgLSAxKSA8PCBFeHBfc2hpZnQ7CisjZW5kaWYKKwlpZiAoayA+PSAwICYmIGsg PD0gVGVuX3BtYXgpIHsKKwkJaWYgKGR2YWwoJmQpIDwgdGVuc1trXSkKKwkJCWstLTsKKwkJa19j aGVjayA9IDA7CisJCX0KKwlqID0gYmJpdHMgLSBpIC0gMTsKKwlpZiAoaiA+PSAwKSB7CisJCWIy ID0gMDsKKwkJczIgPSBqOworCQl9CisJZWxzZSB7CisJCWIyID0gLWo7CisJCXMyID0gMDsKKwkJ fQorCWlmIChrID49IDApIHsKKwkJYjUgPSAwOworCQlzNSA9IGs7CisJCXMyICs9IGs7CisJCX0K KwllbHNlIHsKKwkJYjIgLT0gazsKKwkJYjUgPSAtazsKKwkJczUgPSAwOworCQl9CisJaWYgKG1v ZGUgPCAwIHx8IG1vZGUgPiA5KQorCQltb2RlID0gMDsKKwl0cnlfcXVpY2sgPSAxOworCWlmICht b2RlID4gNSkgeworCQltb2RlIC09IDQ7CisJCXRyeV9xdWljayA9IDA7CisJCX0KKwllbHNlIGlm IChpID49IC00IC0gRW1pbiB8fCBpIDwgRW1pbikKKwkJdHJ5X3F1aWNrID0gMDsKKwlsZWZ0cmln aHQgPSAxOworCWlsaW0gPSBpbGltMSA9IC0xOwkvKiBWYWx1ZXMgZm9yIGNhc2VzIDAgYW5kIDE7 IGRvbmUgaGVyZSB0byAqLworCQkJCS8qIHNpbGVuY2UgZXJyb25lb3VzICJnY2MgLVdhbGwiIHdh cm5pbmcuICovCisJc3dpdGNoKG1vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlpID0g KGludCkobmJpdHMgKiAuMzAxMDMpICsgMzsKKwkJCW5kaWdpdHMgPSAwOworCQkJYnJlYWs7CisJ CWNhc2UgMjoKKwkJCWxlZnRyaWdodCA9IDA7CisJCQkvKiBubyBicmVhayAqLworCQljYXNlIDQ6 CisJCQlpZiAobmRpZ2l0cyA8PSAwKQorCQkJCW5kaWdpdHMgPSAxOworCQkJaWxpbSA9IGlsaW0x ID0gaSA9IG5kaWdpdHM7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbGVmdHJpZ2h0ID0gMDsK KwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgNToKKwkJCWkgPSBuZGlnaXRzICsgayArIDE7CisJ CQlpbGltID0gaTsKKwkJCWlsaW0xID0gaSAtIDE7CisJCQlpZiAoaSA8PSAwKQorCQkJCWkgPSAx OworCQl9CisJcyA9IHMwID0gcnZfYWxsb2MoaSk7CisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJu IChOVUxMKTsKKworCWlmICggKHJkaXIgPSBmcGktPnJvdW5kaW5nIC0gMSkgIT0wKSB7CisJCWlm IChyZGlyIDwgMCkKKwkJCXJkaXIgPSAyOworCQlpZiAoa2luZCAmIFNUUlRPR19OZWcpCisJCQly ZGlyID0gMyAtIHJkaXI7CisJCX0KKworCS8qIE5vdyByZGlyID0gMCA9PT4gcm91bmQgbmVhciwg MSA9PT4gcm91bmQgdXAsIDIgPT0+IHJvdW5kIGRvd24uICovCisKKwlpZiAoaWxpbSA+PSAwICYm IGlsaW0gPD0gUXVpY2tfbWF4ICYmIHRyeV9xdWljayAmJiAhcmRpcgorI2lmbmRlZiBJTVBSRUNJ U0VfSU5FWEFDVAorCQkmJiBrID09IDAKKyNlbmRpZgorCQkJCQkJCQkpIHsKKworCQkvKiBUcnkg dG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4gKi8KKworCQlpID0gMDsK KwkJZDIgPSBkdmFsKCZkKTsKKyNpZmRlZiBJQk0KKwkJaWYgKCAoaiA9IDExIC0gaGkwYml0cyh3 b3JkMCgmZCkgJiBGcmFjX21hc2spKSAhPTApCisJCQlkdmFsKCZkKSAvPSAxIDw8IGo7CisjZW5k aWYKKwkJazAgPSBrOworCQlpbGltMCA9IGlsaW07CisJCWllcHMgPSAyOyAvKiBjb25zZXJ2YXRp dmUgKi8KKwkJaWYgKGsgPiAwKSB7CisJCQlkcyA9IHRlbnNbayYweGZdOworCQkJaiA9IGsgPj4g NDsKKwkJCWlmIChqICYgQmxldGNoKSB7CisJCQkJLyogcHJldmVudCBvdmVyZmxvd3MgKi8KKwkJ CQlqICY9IEJsZXRjaCAtIDE7CisJCQkJZHZhbCgmZCkgLz0gYmlndGVuc1tuX2JpZ3RlbnMtMV07 CisJCQkJaWVwcysrOworCQkJCX0KKwkJCWZvcig7IGo7IGogPj49IDEsIGkrKykKKwkJCQlpZiAo aiAmIDEpIHsKKwkJCQkJaWVwcysrOworCQkJCQlkcyAqPSBiaWd0ZW5zW2ldOworCQkJCQl9CisJ CQl9CisJCWVsc2UgIHsKKwkJCWRzID0gMS47CisJCQlpZiAoIChqMSA9IC1rKSAhPTApIHsKKwkJ CQlkdmFsKCZkKSAqPSB0ZW5zW2oxICYgMHhmXTsKKwkJCQlmb3IoaiA9IGoxID4+IDQ7IGo7IGog Pj49IDEsIGkrKykKKwkJCQkJaWYgKGogJiAxKSB7CisJCQkJCQlpZXBzKys7CisJCQkJCQlkdmFs KCZkKSAqPSBiaWd0ZW5zW2ldOworCQkJCQkJfQorCQkJCX0KKwkJCX0KKwkJaWYgKGtfY2hlY2sg JiYgZHZhbCgmZCkgPCAxLiAmJiBpbGltID4gMCkgeworCQkJaWYgKGlsaW0xIDw9IDApCisJCQkJ Z290byBmYXN0X2ZhaWxlZDsKKwkJCWlsaW0gPSBpbGltMTsKKwkJCWstLTsKKwkJCWR2YWwoJmQp ICo9IDEwLjsKKwkJCWllcHMrKzsKKwkJCX0KKwkJZHZhbCgmZXBzKSA9IGllcHMqZHZhbCgmZCkg KyA3LjsKKwkJd29yZDAoJmVwcykgLT0gKFAtMSkqRXhwX21zazE7CisJCWlmIChpbGltID09IDAp IHsKKwkJCVMgPSBtaGkgPSAwOworCQkJZHZhbCgmZCkgLT0gNS47CisJCQlpZiAoZHZhbCgmZCkg PiBkdmFsKCZlcHMpKQorCQkJCWdvdG8gb25lX2RpZ2l0OworCQkJaWYgKGR2YWwoJmQpIDwgLWR2 YWwoJmVwcykpCisJCQkJZ290byBub19kaWdpdHM7CisJCQlnb3RvIGZhc3RfZmFpbGVkOworCQkJ fQorI2lmbmRlZiBOb19sZWZ0cmlnaHQKKwkJaWYgKGxlZnRyaWdodCkgeworCQkJLyogVXNlIFN0 ZWVsZSAmIFdoaXRlIG1ldGhvZCBvZiBvbmx5CisJCQkgKiBnZW5lcmF0aW5nIGRpZ2l0cyBuZWVk ZWQuCisJCQkgKi8KKwkJCWR2YWwoJmVwcykgPSBkcyowLjUvdGVuc1tpbGltLTFdIC0gZHZhbCgm ZXBzKTsKKwkJCWZvcihpID0gMDs7KSB7CisJCQkJTCA9IChMb25nKShkdmFsKCZkKS9kcyk7CisJ CQkJZHZhbCgmZCkgLT0gTCpkczsKKwkJCQkqcysrID0gJzAnICsgKGludClMOworCQkJCWlmIChk dmFsKCZkKSA8IGR2YWwoJmVwcykpIHsKKwkJCQkJaWYgKGR2YWwoJmQpKQorCQkJCQkJaW5leCA9 IFNUUlRPR19JbmV4bG87CisJCQkJCWdvdG8gcmV0MTsKKwkJCQkJfQorCQkJCWlmIChkcyAtIGR2 YWwoJmQpIDwgZHZhbCgmZXBzKSkKKwkJCQkJZ290byBidW1wX3VwOworCQkJCWlmICgrK2kgPj0g aWxpbSkKKwkJCQkJYnJlYWs7CisJCQkJZHZhbCgmZXBzKSAqPSAxMC47CisJCQkJZHZhbCgmZCkg Kj0gMTAuOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisjZW5kaWYKKwkJCS8qIEdlbmVyYXRlIGls aW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVtIHVwLiAqLworCQkJZHZhbCgmZXBzKSAqPSB0ZW5zW2ls aW0tMV07CisJCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEwLikgeworCQkJCWlmICgg KEwgPSAoTG9uZykoZHZhbCgmZCkvZHMpKSAhPTApCisJCQkJCWR2YWwoJmQpIC09IEwqZHM7CisJ CQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCQlpZiAoaSA9PSBpbGltKSB7CisJCQkJCWRzICo9 IDAuNTsKKwkJCQkJaWYgKGR2YWwoJmQpID4gZHMgKyBkdmFsKCZlcHMpKQorCQkJCQkJZ290byBi dW1wX3VwOworCQkJCQllbHNlIGlmIChkdmFsKCZkKSA8IGRzIC0gZHZhbCgmZXBzKSkgeworCQkJ CQkJaWYgKGR2YWwoJmQpKQorCQkJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQkJCQkJZ290 byBjbGVhcl90cmFpbGluZzA7CisJCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQor I2lmbmRlZiBOb19sZWZ0cmlnaHQKKwkJCX0KKyNlbmRpZgorIGZhc3RfZmFpbGVkOgorCQlzID0g czA7CisJCWR2YWwoJmQpID0gZDI7CisJCWsgPSBrMDsKKwkJaWxpbSA9IGlsaW0wOworCQl9CisK KwkvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLworCisJaWYgKGJlID49IDAgJiYg ayA8PSBJbnRfbWF4KSB7CisJCS8qIFllcy4gKi8KKwkJZHMgPSB0ZW5zW2tdOworCQlpZiAobmRp Z2l0cyA8IDAgJiYgaWxpbSA8PSAwKSB7CisJCQlTID0gbWhpID0gMDsKKwkJCWlmIChpbGltIDwg MCB8fCBkdmFsKCZkKSA8PSA1KmRzKQorCQkJCWdvdG8gbm9fZGlnaXRzOworCQkJZ290byBvbmVf ZGlnaXQ7CisJCQl9CisJCWZvcihpID0gMTs7IGkrKywgZHZhbCgmZCkgKj0gMTAuKSB7CisJCQlM ID0gZHZhbCgmZCkgLyBkczsKKwkJCWR2YWwoJmQpIC09IEwqZHM7CisjaWZkZWYgQ2hlY2tfRkxU X1JPVU5EUworCQkJLyogSWYgRkxUX1JPVU5EUyA9PSAyLCBMIHdpbGwgdXN1YWxseSBiZSBoaWdo IGJ5IDEgKi8KKwkJCWlmIChkdmFsKCZkKSA8IDApIHsKKwkJCQlMLS07CisJCQkJZHZhbCgmZCkg Kz0gZHM7CisJCQkJfQorI2VuZGlmCisJCQkqcysrID0gJzAnICsgKGludClMOworCQkJaWYgKGR2 YWwoJmQpID09IDAuKQorCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gaWxpbSkgeworCQkJCWlmIChy ZGlyKSB7CisJCQkJCWlmIChyZGlyID09IDEpCisJCQkJCQlnb3RvIGJ1bXBfdXA7CisJCQkJCWlu ZXggPSBTVFJUT0dfSW5leGxvOworCQkJCQlnb3RvIHJldDE7CisJCQkJCX0KKwkJCQlkdmFsKCZk KSArPSBkdmFsKCZkKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJCQlpZiAoZHZhbCgmZCkgPj0g ZHMpCisjZWxzZQorCQkJCWlmIChkdmFsKCZkKSA+IGRzIHx8IChkdmFsKCZkKSA9PSBkcyAmJiBM ICYgMSkpCisjZW5kaWYKKwkJCQkJeworIGJ1bXBfdXA6CisJCQkJCWluZXggPSBTVFJUT0dfSW5l eGhpOworCQkJCQl3aGlsZSgqLS1zID09ICc5JykKKwkJCQkJCWlmIChzID09IHMwKSB7CisJCQkJ CQkJaysrOworCQkJCQkJCSpzID0gJzAnOworCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJ KysqcysrOworCQkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOwor IGNsZWFyX3RyYWlsaW5nMDoKKwkJCQkJd2hpbGUoKi0tcyA9PSAnMCcpe30KKwkJCQkJKytzOwor CQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQlnb3RvIHJldDE7CisJCX0KKworCW0y ID0gYjI7CisJbTUgPSBiNTsKKwltaGkgPSBtbG8gPSAwOworCWlmIChsZWZ0cmlnaHQpIHsKKwkJ aSA9IG5iaXRzIC0gYmJpdHM7CisJCWlmIChiZSAtIGkrKyA8IGZwaS0+ZW1pbiAmJiBtb2RlICE9 IDMgJiYgbW9kZSAhPSA1KSB7CisJCQkvKiBkZW5vcm1hbCAqLworCQkJaSA9IGJlIC0gZnBpLT5l bWluICsgMTsKKwkJCWlmIChtb2RlID49IDIgJiYgaWxpbSA+IDAgJiYgaWxpbSA8IGkpCisJCQkJ Z290byBzbWFsbF9pbGltOworCQkJfQorCQllbHNlIGlmIChtb2RlID49IDIpIHsKKyBzbWFsbF9p bGltOgorCQkJaiA9IGlsaW0gLSAxOworCQkJaWYgKG01ID49IGopCisJCQkJbTUgLT0gajsKKwkJ CWVsc2UgeworCQkJCXM1ICs9IGogLT0gbTU7CisJCQkJYjUgKz0gajsKKwkJCQltNSA9IDA7CisJ CQkJfQorCQkJaWYgKChpID0gaWxpbSkgPCAwKSB7CisJCQkJbTIgLT0gaTsKKwkJCQlpID0gMDsK KwkJCQl9CisJCQl9CisJCWIyICs9IGk7CisJCXMyICs9IGk7CisJCW1oaSA9IGkyYigxKTsKKwkJ aWYgKG1oaSA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmIChtMiA+IDAgJiYg czIgPiAwKSB7CisJCWkgPSBtMiA8IHMyID8gbTIgOiBzMjsKKwkJYjIgLT0gaTsKKwkJbTIgLT0g aTsKKwkJczIgLT0gaTsKKwkJfQorCWlmIChiNSA+IDApIHsKKwkJaWYgKGxlZnRyaWdodCkgewor CQkJaWYgKG01ID4gMCkgeworCQkJCW1oaSA9IHBvdzVtdWx0KG1oaSwgbTUpOworCQkJCWlmICht aGkgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQliMSA9IG11bHQobWhpLCBiKTsK KwkJCQlpZiAoYjEgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQlCZnJlZShiKTsK KwkJCQliID0gYjE7CisJCQkJfQorCQkJaWYgKCAoaiA9IGI1IC0gbTUpICE9MCkgeworCQkJCWIg PSBwb3c1bXVsdChiLCBqKTsKKwkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwp OworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisJCQliID0gcG93NW11bHQoYiwgYjUpOworCQkJaWYg KGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQl9CisJUyA9IGkyYigxKTsK KwlpZiAoUyA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWlmIChzNSA+IDApIHsKKwkJUyA9 IHBvdzVtdWx0KFMsIHM1KTsKKwkJaWYgKFMgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJ CX0KKworCS8qIENoZWNrIGZvciBzcGVjaWFsIGNhc2UgdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBw b3dlciBvZiAyLiAqLworCisJc3BlY19jYXNlID0gMDsKKwlpZiAobW9kZSA8IDIpIHsKKwkJaWYg KGJiaXRzID09IDEgJiYgYmUwID4gZnBpLT5lbWluICsgMSkgeworCQkJLyogVGhlIHNwZWNpYWwg Y2FzZSAqLworCQkJYjIrKzsKKwkJCXMyKys7CisJCQlzcGVjX2Nhc2UgPSAxOworCQkJfQorCQl9 CisKKwkvKiBBcnJhbmdlIGZvciBjb252ZW5pZW50IGNvbXB1dGF0aW9uIG9mIHF1b3RpZW50czoK KwkgKiBzaGlmdCBsZWZ0IGlmIG5lY2Vzc2FyeSBzbyBkaXZpc29yIGhhcyA0IGxlYWRpbmcgMCBi aXRzLgorCSAqCisJICogUGVyaGFwcyB3ZSBzaG91bGQganVzdCBjb21wdXRlIGxlYWRpbmcgMjgg Yml0cyBvZiBTIG9uY2UKKwkgKiBhbmQgZm9yIGFsbCBhbmQgcGFzcyB0aGVtIGFuZCBhIHNoaWZ0 IHRvIHF1b3JlbSwgc28gaXQKKwkgKiBjYW4gZG8gc2hpZnRzIGFuZCBvcnMgdG8gY29tcHV0ZSB0 aGUgbnVtZXJhdG9yIGZvciBxLgorCSAqLworCWkgPSAoKHM1ID8gaGkwYml0cyhTLT54W1MtPndk cy0xXSkgOiBVTGJpdHMgLSAxKSAtIHMyIC0gNCkgJiBrbWFzazsKKwltMiArPSBpOworCWlmICgo YjIgKz0gaSkgPiAwKSB7CisJCWIgPSBsc2hpZnQoYiwgYjIpOworCQlpZiAoYiA9PSBOVUxMKQor CQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmICgoczIgKz0gaSkgPiAwKSB7CisJCVMgPSBsc2hp ZnQoUywgczIpOworCQlpZiAoUyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlm IChrX2NoZWNrKSB7CisJCWlmIChjbXAoYixTKSA8IDApIHsKKwkJCWstLTsKKwkJCWIgPSBtdWx0 YWRkKGIsIDEwLCAwKTsJLyogd2UgYm90Y2hlZCB0aGUgayBlc3RpbWF0ZSAqLworCQkJaWYgKGIg PT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJaWYgKGxlZnRyaWdodCkgeworCQkJCW1o aSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCQlyZXR1 cm4gKE5VTEwpOworCQkJCX0KKwkJCWlsaW0gPSBpbGltMTsKKwkJCX0KKwkJfQorCWlmIChpbGlt IDw9IDAgJiYgbW9kZSA+IDIpIHsKKwkJUyA9IG11bHRhZGQoUyw1LDApOworCQlpZiAoUyA9PSBO VUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJaWYgKGlsaW0gPCAwIHx8IGNtcChiLFMpIDw9IDAp IHsKKwkJCS8qIG5vIGRpZ2l0cywgZmN2dCBzdHlsZSAqLworIG5vX2RpZ2l0czoKKwkJCWsgPSAt MSAtIG5kaWdpdHM7CisJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJCWdvdG8gcmV0OworCQkJ fQorIG9uZV9kaWdpdDoKKwkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCSpzKysgPSAnMSc7CisJ CWsrKzsKKwkJZ290byByZXQ7CisJCX0KKwlpZiAobGVmdHJpZ2h0KSB7CisJCWlmIChtMiA+IDAp IHsKKwkJCW1oaSA9IGxzaGlmdChtaGksIG0yKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQly ZXR1cm4gKE5VTEwpOworCQkJfQorCisJCS8qIENvbXB1dGUgbWxvIC0tIGNoZWNrIGZvciBzcGVj aWFsIGNhc2UKKwkJICogdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dlciBvZiAyLgorCQkgKi8K KworCQltbG8gPSBtaGk7CisJCWlmIChzcGVjX2Nhc2UpIHsKKwkJCW1oaSA9IEJhbGxvYyhtaGkt PmspOworCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCY29weSht aGksIG1sbyk7CisJCQltaGkgPSBsc2hpZnQobWhpLCAxKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkK KwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCisJCWZvcihpID0gMTs7aSsrKSB7CisJCQlkaWcg PSBxdW9yZW0oYixTKSArICcwJzsKKwkJCS8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBk ZWNpbWFsIHN0cmluZworCQkJICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/CisJCQkgKi8KKwkJCWog PSBjbXAoYiwgbWxvKTsKKwkJCWRlbHRhID0gZGlmZihTLCBtaGkpOworCQkJaWYgKGRlbHRhID09 IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWoxID0gZGVsdGEtPnNpZ24gPyAxIDogY21w KGIsIGRlbHRhKTsKKwkJCUJmcmVlKGRlbHRhKTsKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQlp ZiAoajEgPT0gMCAmJiAhbW9kZSAmJiAhKGJpdHNbMF0gJiAxKSAmJiAhcmRpcikgeworCQkJCWlm IChkaWcgPT0gJzknKQorCQkJCQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJaWYgKGogPD0gMCkgewor CQkJCQlpZiAoYi0+d2RzID4gMSB8fCBiLT54WzBdKQorCQkJCQkJaW5leCA9IFNUUlRPR19JbmV4 bG87CisJCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZGlnKys7CisJCQkJCWluZXggPSBTVFJUT0df SW5leGhpOworCQkJCQl9CisJCQkJKnMrKyA9IGRpZzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9Cisj ZW5kaWYKKwkJCWlmIChqIDwgMCB8fCAoaiA9PSAwICYmICFtb2RlCisjaWZuZGVmIFJPVU5EX0JJ QVNFRAorCQkJCQkJCSYmICEoYml0c1swXSAmIDEpCisjZW5kaWYKKwkJCQkJKSkgeworCQkJCWlm IChyZGlyICYmIChiLT53ZHMgPiAxIHx8IGItPnhbMF0pKSB7CisJCQkJCWlmIChyZGlyID09IDIp IHsKKwkJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQkJCQkJZ290byBhY2NlcHQ7CisJCQkJ CQl9CisJCQkJCXdoaWxlIChjbXAoUyxtaGkpID4gMCkgeworCQkJCQkJKnMrKyA9IGRpZzsKKwkJ CQkJCW1oaTEgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCQkJaWYgKG1oaTEgPT0gTlVMTCkK KwkJCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCQkJaWYgKG1sbyA9PSBtaGkpCisJCQkJCQkJbWxv ID0gbWhpMTsKKwkJCQkJCW1oaSA9IG1oaTE7CisJCQkJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7 CisJCQkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJCQlkaWcg PSBxdW9yZW0oYixTKSArICcwJzsKKwkJCQkJCX0KKwkJCQkJaWYgKGRpZysrID09ICc5JykKKwkJ CQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQkJCWdv dG8gYWNjZXB0OworCQkJCQl9CisJCQkJaWYgKGoxID4gMCkgeworCQkJCQliID0gbHNoaWZ0KGIs IDEpOworCQkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQkJajEg PSBjbXAoYiwgUyk7CisjaWZkZWYgUk9VTkRfQklBU0VECisJCQkJCWlmIChqMSA+PSAwIC8qKSov CisjZWxzZQorCQkJCQlpZiAoKGoxID4gMCB8fCAoajEgPT0gMCAmJiBkaWcgJiAxKSkKKyNlbmRp ZgorCQkJCQkmJiBkaWcrKyA9PSAnOScpCisJCQkJCQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJCWlu ZXggPSBTVFJUT0dfSW5leGhpOworCQkJCQl9CisJCQkJaWYgKGItPndkcyA+IDEgfHwgYi0+eFsw XSkKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisgYWNjZXB0OgorCQkJCSpzKysgPSBkaWc7 CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJaWYgKGoxID4gMCAmJiByZGlyICE9IDIpIHsKKwkJ CQlpZiAoZGlnID09ICc5JykgeyAvKiBwb3NzaWJsZSBpZiBpID09IDEgKi8KKyByb3VuZF85X3Vw OgorCQkJCQkqcysrID0gJzknOworCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhoaTsKKwkJCQkJZ290 byByb3VuZG9mZjsKKwkJCQkJfQorCQkJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkJCSpzKysg PSBkaWcgKyAxOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCSpzKysgPSBkaWc7CisJCQlpZiAo aSA9PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOworCQkJaWYg KGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJaWYgKG1sbyA9PSBtaGkpIHsKKwkJ CQltbG8gPSBtaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtbG8gPT0gTlVMTCkK KwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQltbG8gPSBtdWx0YWRk KG1sbywgMTAsIDApOworCQkJCWlmIChtbG8gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsK KwkJCQltaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtaGkgPT0gTlVMTCkKKwkJ CQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCX0KKwllbHNlCisJCWZvcihpID0gMTs7 IGkrKykgeworCQkJKnMrKyA9IGRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworCQkJaWYgKGkgPj0g aWxpbSkKKwkJCQlicmVhazsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKKwkJCWlmIChiID09 IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKworCS8qIFJvdW5kIG9mZiBsYXN0IGRp Z2l0ICovCisKKwlpZiAocmRpcikgeworCQlpZiAocmRpciA9PSAyIHx8IChiLT53ZHMgPD0gMSAm JiAhYi0+eFswXSkpCisJCQlnb3RvIGNob3B6ZXJvczsKKwkJZ290byByb3VuZG9mZjsKKwkJfQor CWIgPSBsc2hpZnQoYiwgMSk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlq ID0gY21wKGIsIFMpOworI2lmZGVmIFJPVU5EX0JJQVNFRAorCWlmIChqID49IDApCisjZWxzZQor CWlmIChqID4gMCB8fCAoaiA9PSAwICYmIGRpZyAmIDEpKQorI2VuZGlmCisJCXsKKyByb3VuZG9m ZjoKKwkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCXdoaWxlKCotLXMgPT0gJzknKQorCQkJaWYg KHMgPT0gczApIHsKKwkJCQlrKys7CisJCQkJKnMrKyA9ICcxJzsKKwkJCQlnb3RvIHJldDsKKwkJ CQl9CisJCSsrKnMrKzsKKwkJfQorCWVsc2UgeworIGNob3B6ZXJvczoKKwkJaWYgKGItPndkcyA+ IDEgfHwgYi0+eFswXSkKKwkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQl3aGlsZSgqLS1zID09 ICcwJyl7fQorCQkrK3M7CisJCX0KKyByZXQ6CisJQmZyZWUoUyk7CisJaWYgKG1oaSkgeworCQlp ZiAobWxvICYmIG1sbyAhPSBtaGkpCisJCQlCZnJlZShtbG8pOworCQlCZnJlZShtaGkpOworCQl9 CisgcmV0MToKKwlCZnJlZShiKTsKKwkqcyA9IDA7CisJKmRlY3B0ID0gayArIDE7CisJaWYgKHJ2 ZSkKKwkJKnJ2ZSA9IHM7CisJKmtpbmRwIHw9IGluZXg7CisJcmV0dXJuIHMwOworCX0KK0RFRl9T VFJPTkcoZ2R0b2EpOwpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdtaXNj LmMgYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtZ21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAuLjgyNzBlZjk0NAotLS0gL2Rldi9udWxsCisrKyBiL25ld2xpYi9s aWJjL3N0ZGxpYi9nZHRvYS1nbWlzYy5jCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1Ro ZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAo QykgMTk5OCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Bl cm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdh cmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVl IGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xh aW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5h bWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVy dGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNv ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xV Q0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FS RSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElU SUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP RiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRX QVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBN LiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAi IGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgi CisKKyB2b2lkCisjaWZkZWYgS1JfaGVhZGVycworcnNoaWZ0KGIsIGspIEJpZ2ludCAqYjsgaW50 IGs7CisjZWxzZQorcnNoaWZ0KEJpZ2ludCAqYiwgaW50IGspCisjZW5kaWYKK3sKKwlVTG9uZyAq eCwgKngxLCAqeGUsIHk7CisJaW50IG47CisKKwl4ID0geDEgPSBiLT54OworCW4gPSBrID4+IGtz aGlmdDsKKwlpZiAobiA8IGItPndkcykgeworCQl4ZSA9IHggKyBiLT53ZHM7CisJCXggKz0gbjsK KwkJaWYgKGsgJj0ga21hc2spIHsKKwkJCW4gPSBVTGJpdHMgLSBrOworCQkJeSA9ICp4KysgPj4g azsKKwkJCXdoaWxlKHggPCB4ZSkgeworCQkJCSp4MSsrID0gKHkgfCAoKnggPDwgbikpICYgQUxM X09OOworCQkJCXkgPSAqeCsrID4+IGs7CisJCQkJfQorCQkJaWYgKCgqeDEgPSB5KSAhPTApCisJ CQkJeDErKzsKKwkJCX0KKwkJZWxzZQorCQkJd2hpbGUoeCA8IHhlKQorCQkJCSp4MSsrID0gKngr KzsKKwkJfQorCWlmICgoYi0+d2RzID0geDEgLSBiLT54KSA9PSAwKQorCQliLT54WzBdID0gMDsK Kwl9CisKKyBpbnQKKyNpZmRlZiBLUl9oZWFkZXJzCit0cmFpbHooYikgQmlnaW50ICpiOworI2Vs c2UKK3RyYWlseihCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlVTG9uZyBMLCAqeCwgKnhlOworCWlu dCBuID0gMDsKKworCXggPSBiLT54OworCXhlID0geCArIGItPndkczsKKwlmb3IobiA9IDA7IHgg PCB4ZSAmJiAhKng7IHgrKykKKwkJbiArPSBVTGJpdHM7CisJaWYgKHggPCB4ZSkgeworCQlMID0g Kng7CisJCW4gKz0gbG8wYml0cygmTCk7CisJCX0KKwlyZXR1cm4gbjsKKwl9CmRpZmYgLS1naXQg YS9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtbGR0b2EuYyBiL25ld2xpYi9saWJjL3N0ZGxpYi9n ZHRvYS1sZHRvYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNzI4MmU3 YTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWxkdG9hLmMK QEAgLTAsMCArMSwxMjQgQEAKKy8qCSRPcGVuQlNEOiBsZHRvYS5jLHYgMS40IDIwMTYvMDMvMDkg MTY6Mjg6NDcgZGVyYWFkdCBFeHAgJAkqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgRGF2 aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5E IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pZWVlLmg+CisjaW5j bHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4K KyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiZ2R0b2Fp bXAuaCIKKworI2lmIChMREJMX01BTlRfRElHID4gREJMX01BTlRfRElHKQorCisvKgorICogbGR0 b2EoKSBpcyBhIHdyYXBwZXIgZm9yIGdkdG9hKCkgdGhhdCBtYWtlcyBpdCBzbWVsbCBsaWtlIGR0 b2EoKSwKKyAqIGV4Y2VwdCB0aGF0IHRoZSBmbG9hdGluZyBwb2ludCBhcmd1bWVudCBpcyBwYXNz ZWQgYnkgcmVmZXJlbmNlLgorICogV2hlbiBkdG9hKCkgaXMgcGFzc2VkIGEgTmFOIG9yIGluZmlu aXR5LCBpdCBzZXRzIGV4cHQgdG8gOTk5OS4KKyAqIEhvd2V2ZXIsIGEgbG9uZyBkb3VibGUgY291 bGQgaGF2ZSBhIHZhbGlkIGV4cG9uZW50IG9mIDk5OTksIHNvIHdlCisgKiB1c2UgSU5UX01BWCBp biBsZHRvYSgpIGluc3RlYWQuCisgKi8KK2NoYXIgKgorX19sZHRvYShsb25nIGRvdWJsZSAqbGQs IGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLAorICAgIGNoYXIg KipydmUpCit7CisJRlBJIGZwaSA9IHsKKwkJTERCTF9NQU5UX0RJRywJCQkvKiBuYml0cyAqLwor CQlMREJMX01JTl9FWFAgLSBMREJMX01BTlRfRElHLAkvKiBlbWluICovCisJCUxEQkxfTUFYX0VY UCAtIExEQkxfTUFOVF9ESUcsCS8qIGVtYXggKi8KKwkJRkxUX1JPVU5EUywJICAgICAgIAkJLyog cm91bmRpbmcgKi8KKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CS8qIHVudXNlZCwgYnV0IGNvcnJl Y3QgYW55d2F5ICovCisJCTEKKyNlbHNlCisJCTAKKyNlbmRpZgorCX07CisJaW50IGJlLCBraW5k OworCWNoYXIgKnJldDsKKwlzdHJ1Y3QgaWVlZV9leHQgKnAgPSAoc3RydWN0IGllZWVfZXh0ICop bGQ7CisJdWludDMyX3QgYml0c1soTERCTF9NQU5UX0RJRyArIDMxKSAvIDMyXTsKKwl2b2lkICp2 Yml0cyA9IGJpdHM7CisKKwkvKgorCSAqIGdkdG9hIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBhYm91 dCB0aGUgc2lnbiBvZiB0aGUgbnVtYmVyLCBzbworCSAqIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRp dmUsIHdlIG5lZWQgdG8gc3dhcCByb3VuZGluZyBtb2RlcyBvZgorCSAqIDIgKHVwd2FyZHMpIGFu ZCAzIChkb3dud2FyZHMpLgorCSAqLworCSpzaWduID0gcC0+ZXh0X3NpZ247CisJZnBpLnJvdW5k aW5nIF49IChmcGkucm91bmRpbmcgPj4gMSkgJiBwLT5leHRfc2lnbjsKKworCWJlID0gcC0+ZXh0 X2V4cCAtIChMREJMX01BWF9FWFAgLSAxKSAtIChMREJMX01BTlRfRElHIC0gMSk7CisJRVhUX1RP X0FSUkFZMzIocCwgYml0cyk7CisKKwlzd2l0Y2ggKGZwY2xhc3NpZnkoKmxkKSkgeworCWNhc2Ug RlBfTk9STUFMOgorCQlraW5kID0gU1RSVE9HX05vcm1hbDsKKyNpZmRlZiBFWFRfSU1QTElDSVRf TkJJVAorCQliaXRzW0xEQkxfTUFOVF9ESUcgLyAzMl0gfD0gMSA8PCAoKExEQkxfTUFOVF9ESUcg LSAxKSAlIDMyKTsKKyNlbmRpZiAvKiBFWFRfSU1QTElDSVRfTkJJVCAqLworCQlicmVhazsKKwlj YXNlIEZQX1pFUk86CisJCWtpbmQgPSBTVFJUT0dfWmVybzsKKwkJYnJlYWs7CisJY2FzZSBGUF9T VUJOT1JNQUw6CisJCWtpbmQgPSBTVFJUT0dfRGVub3JtYWw7CisJCWJlKys7CisJCWJyZWFrOwor CWNhc2UgRlBfSU5GSU5JVEU6CisJCWtpbmQgPSBTVFJUT0dfSW5maW5pdGU7CisJCWJyZWFrOwor CWNhc2UgRlBfTkFOOgorCQlraW5kID0gU1RSVE9HX05hTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJYWJvcnQoKTsKKwl9CisKKwlyZXQgPSBnZHRvYSgmZnBpLCBiZSwgdmJpdHMsICZraW5kLCBt b2RlLCBuZGlnaXRzLCBkZWNwdCwgcnZlKTsKKwlpZiAoKmRlY3B0ID09IC0zMjc2OCkKKwkJKmRl Y3B0ID0gSU5UX01BWDsKKwlyZXR1cm4gcmV0OworfQorREVGX1NUUk9ORyhfX2xkdG9hKTsKKwor I2Vsc2UgICAvKiAoTERCTF9NQU5UX0RJRyA9PSBEQkxfTUFOVF9ESUcpICovCisKK2NoYXIgKgor X19sZHRvYShsb25nIGRvdWJsZSAqbGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNw dCwgaW50ICpzaWduLAorICAgIGNoYXIgKipydmUpCit7CisJY2hhciAqcmV0OworCisJcmV0ID0g ZHRvYSgoZG91YmxlKSpsZCwgbW9kZSwgbmRpZ2l0cywgZGVjcHQsIHNpZ24sIHJ2ZSk7CisJaWYg KCpkZWNwdCA9PSA5OTk5KQorCQkqZGVjcHQgPSBJTlRfTUFYOworCXJldHVybiByZXQ7Cit9CitE RUZfU1RST05HKF9fbGR0b2EpOworCisjZW5kaWYgIC8qIChMREJMX01BTlRfRElHID09IERCTF9N QU5UX0RJRykgKi8KZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1taXNjLmMg Yi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMC4uNWQxZTBhZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV3bGliL2xpYmMv c3RkbGliL2dkdG9hLW1pc2MuYwpAQCAtMCwwICsxLDkxMiBAQAorLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1 dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAx OTk4LCAxOTk5IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKwor UGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0 d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBm ZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNj bGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUg bmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2 ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUg c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKwor TFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRX QVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5U SVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NT IE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09G VFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlk IE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAi QCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAu aCIKKworIHN0YXRpYyBCaWdpbnQgKmZyZWVsaXN0W0ttYXgrMV07CisjaWZuZGVmIE9taXRfUHJp dmF0ZV9NZW1vcnkKKyNpZm5kZWYgUFJJVkFURV9NRU0KKyNkZWZpbmUgUFJJVkFURV9NRU0gMjMw NAorI2VuZGlmCisjZGVmaW5lIFBSSVZBVEVfbWVtICgoUFJJVkFURV9NRU0rc2l6ZW9mKGRvdWJs ZSktMSkvc2l6ZW9mKGRvdWJsZSkpCitzdGF0aWMgZG91YmxlIHByaXZhdGVfbWVtW1BSSVZBVEVf bWVtXSwgKnBtZW1fbmV4dCA9IHByaXZhdGVfbWVtOworI2VuZGlmCisKKyNpZmRlZiBNVUxUSVBM RV9USFJFQURTCitfX0xPQ0tfSU5JVChzdGF0aWMsIF9fZHRvYV9sb2NrMCk7CitfX0xPQ0tfSU5J VChzdGF0aWMsIF9fZHRvYV9sb2NrMSk7CisjZW5kaWYKKworIEJpZ2ludCAqCitCYWxsb2MKKyNp ZmRlZiBLUl9oZWFkZXJzCisJKGspIGludCBrOworI2Vsc2UKKwkoaW50IGspCisjZW5kaWYKK3sK KwlpbnQgeDsKKwlCaWdpbnQgKnJ2OworI2lmbmRlZiBPbWl0X1ByaXZhdGVfTWVtb3J5CisJdW5z aWduZWQgaW50IGxlbjsKKyNlbmRpZgorCisJQUNRVUlSRV9EVE9BX0xPQ0soMCk7CisJLyogVGhl IGsgPiBLbWF4IGNhc2UgZG9lcyBub3QgbmVlZCBBQ1FVSVJFX0RUT0FfTE9DSygwKSwgKi8KKwkv KiBidXQgdGhpcyBjYXNlIHNlZW1zIHZlcnkgdW5saWtlbHkuICovCisJaWYgKGsgPD0gS21heCAm JiAocnYgPSBmcmVlbGlzdFtrXSkgIT0wKSB7CisJCWZyZWVsaXN0W2tdID0gcnYtPm5leHQ7CisJ CX0KKwllbHNlIHsKKwkJeCA9IDEgPDwgazsKKyNpZmRlZiBPbWl0X1ByaXZhdGVfTWVtb3J5CisJ CXJ2ID0gKEJpZ2ludCAqKU1BTExPQyhzaXplb2YoQmlnaW50KSArICh4LTEpKnNpemVvZihVTG9u ZykpOworCQlpZiAocnYgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisjZWxzZQorCQlsZW4g PSAoc2l6ZW9mKEJpZ2ludCkgKyAoeC0xKSpzaXplb2YoVUxvbmcpICsgc2l6ZW9mKGRvdWJsZSkg LSAxKQorCQkJL3NpemVvZihkb3VibGUpOworCQlpZiAoayA8PSBLbWF4ICYmIHBtZW1fbmV4dCAt IHByaXZhdGVfbWVtICsgbGVuIDw9IFBSSVZBVEVfbWVtKSB7CisJCQlydiA9IChCaWdpbnQqKXBt ZW1fbmV4dDsKKwkJCXBtZW1fbmV4dCArPSBsZW47CisJCQl9CisJCWVsc2UgeworCQkJcnYgPSAo QmlnaW50KilNQUxMT0MobGVuKnNpemVvZihkb3VibGUpKTsKKwkJCWlmIChydiA9PSBOVUxMKQor CQkJCXJldHVybiAoTlVMTCk7CisJCX0KKyNlbmRpZgorCQlydi0+ayA9IGs7CisJCXJ2LT5tYXh3 ZHMgPSB4OworCQl9CisJRlJFRV9EVE9BX0xPQ0soMCk7CisJcnYtPnNpZ24gPSBydi0+d2RzID0g MDsKKwlyZXR1cm4gcnY7CisJfQorCisgdm9pZAorQmZyZWUKKyNpZmRlZiBLUl9oZWFkZXJzCisJ KHYpIEJpZ2ludCAqdjsKKyNlbHNlCisJKEJpZ2ludCAqdikKKyNlbmRpZgoreworCWlmICh2KSB7 CisJCWlmICh2LT5rID4gS21heCkKKyNpZmRlZiBGUkVFCisJCQlGUkVFKHYpOworI2Vsc2UKKwkJ CWZyZWUodik7CisjZW5kaWYKKwkJZWxzZSB7CisJCQlBQ1FVSVJFX0RUT0FfTE9DSygwKTsKKwkJ CXYtPm5leHQgPSBmcmVlbGlzdFt2LT5rXTsKKwkJCWZyZWVsaXN0W3YtPmtdID0gdjsKKwkJCUZS RUVfRFRPQV9MT0NLKDApOworCQkJfQorCQl9CisJfQorCisgaW50CitsbzBiaXRzCisjaWZkZWYg S1JfaGVhZGVycworCSh5KSBVTG9uZyAqeTsKKyNlbHNlCisJKFVMb25nICp5KQorI2VuZGlmCit7 CisJaW50IGs7CisJVUxvbmcgeCA9ICp5OworCisJaWYgKHggJiA3KSB7CisJCWlmICh4ICYgMSkK KwkJCXJldHVybiAwOworCQlpZiAoeCAmIDIpIHsKKwkJCSp5ID0geCA+PiAxOworCQkJcmV0dXJu IDE7CisJCQl9CisJCSp5ID0geCA+PiAyOworCQlyZXR1cm4gMjsKKwkJfQorCWsgPSAwOworCWlm ICghKHggJiAweGZmZmYpKSB7CisJCWsgPSAxNjsKKwkJeCA+Pj0gMTY7CisJCX0KKwlpZiAoISh4 ICYgMHhmZikpIHsKKwkJayArPSA4OworCQl4ID4+PSA4OworCQl9CisJaWYgKCEoeCAmIDB4Zikp IHsKKwkJayArPSA0OworCQl4ID4+PSA0OworCQl9CisJaWYgKCEoeCAmIDB4MykpIHsKKwkJayAr PSAyOworCQl4ID4+PSAyOworCQl9CisJaWYgKCEoeCAmIDEpKSB7CisJCWsrKzsKKwkJeCA+Pj0g MTsKKwkJaWYgKCF4KQorCQkJcmV0dXJuIDMyOworCQl9CisJKnkgPSB4OworCXJldHVybiBrOwor CX0KKworIEJpZ2ludCAqCittdWx0YWRkCisjaWZkZWYgS1JfaGVhZGVycworCShiLCBtLCBhKSBC aWdpbnQgKmI7IGludCBtLCBhOworI2Vsc2UKKwkoQmlnaW50ICpiLCBpbnQgbSwgaW50IGEpCS8q IG11bHRpcGx5IGJ5IG0gYW5kIGFkZCBhICovCisjZW5kaWYKK3sKKwlpbnQgaSwgd2RzOworI2lm ZGVmIFVMTG9uZworCVVMb25nICp4OworCVVMTG9uZyBjYXJyeSwgeTsKKyNlbHNlCisJVUxvbmcg Y2FycnksICp4LCB5OworI2lmZGVmIFBhY2tfMzIKKwlVTG9uZyB4aSwgejsKKyNlbmRpZgorI2Vu ZGlmCisJQmlnaW50ICpiMTsKKworCXdkcyA9IGItPndkczsKKwl4ID0gYi0+eDsKKwlpID0gMDsK KwljYXJyeSA9IGE7CisJZG8geworI2lmZGVmIFVMTG9uZworCQl5ID0gKnggKiAoVUxMb25nKW0g KyBjYXJyeTsKKwkJY2FycnkgPSB5ID4+IDMyOworCQkqeCsrID0geSAmIDB4ZmZmZmZmZmZVTDsK KyNlbHNlCisjaWZkZWYgUGFja18zMgorCQl4aSA9ICp4OworCQl5ID0gKHhpICYgMHhmZmZmKSAq IG0gKyBjYXJyeTsKKwkJeiA9ICh4aSA+PiAxNikgKiBtICsgKHkgPj4gMTYpOworCQljYXJyeSA9 IHogPj4gMTY7CisJCSp4KysgPSAoeiA8PCAxNikgKyAoeSAmIDB4ZmZmZik7CisjZWxzZQorCQl5 ID0gKnggKiBtICsgY2Fycnk7CisJCWNhcnJ5ID0geSA+PiAxNjsKKwkJKngrKyA9IHkgJiAweGZm ZmY7CisjZW5kaWYKKyNlbmRpZgorCQl9CisJCXdoaWxlKCsraSA8IHdkcyk7CisJaWYgKGNhcnJ5 KSB7CisJCWlmICh3ZHMgPj0gYi0+bWF4d2RzKSB7CisJCQliMSA9IEJhbGxvYyhiLT5rKzEpOwor CQkJaWYgKGIxID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCUJjb3B5KGIxLCBiKTsK KwkJCUJmcmVlKGIpOworCQkJYiA9IGIxOworCQkJfQorCQliLT54W3dkcysrXSA9IGNhcnJ5Owor CQliLT53ZHMgPSB3ZHM7CisJCX0KKwlyZXR1cm4gYjsKKwl9CisKKyBpbnQKK2hpMGJpdHNfRDJB CisjaWZkZWYgS1JfaGVhZGVycworCSh4KSBVTG9uZyB4OworI2Vsc2UKKwkoVUxvbmcgeCkKKyNl bmRpZgoreworCWludCBrID0gMDsKKworCWlmICghKHggJiAweGZmZmYwMDAwKSkgeworCQlrID0g MTY7CisJCXggPDw9IDE2OworCQl9CisJaWYgKCEoeCAmIDB4ZmYwMDAwMDApKSB7CisJCWsgKz0g ODsKKwkJeCA8PD0gODsKKwkJfQorCWlmICghKHggJiAweGYwMDAwMDAwKSkgeworCQlrICs9IDQ7 CisJCXggPDw9IDQ7CisJCX0KKwlpZiAoISh4ICYgMHhjMDAwMDAwMCkpIHsKKwkJayArPSAyOwor CQl4IDw8PSAyOworCQl9CisJaWYgKCEoeCAmIDB4ODAwMDAwMDApKSB7CisJCWsrKzsKKwkJaWYg KCEoeCAmIDB4NDAwMDAwMDApKQorCQkJcmV0dXJuIDMyOworCQl9CisJcmV0dXJuIGs7CisJfQor CisgQmlnaW50ICoKK2kyYgorI2lmZGVmIEtSX2hlYWRlcnMKKwkoaSkgaW50IGk7CisjZWxzZQor CShpbnQgaSkKKyNlbmRpZgoreworCUJpZ2ludCAqYjsKKworCWIgPSBCYWxsb2MoMSk7CisJaWYg KGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwliLT54WzBdID0gaTsKKwliLT53ZHMgPSAx OworCXJldHVybiBiOworCX0KKworIEJpZ2ludCAqCittdWx0CisjaWZkZWYgS1JfaGVhZGVycwor CShhLCBiKSBCaWdpbnQgKmEsICpiOworI2Vsc2UKKwkoQmlnaW50ICphLCBCaWdpbnQgKmIpCisj ZW5kaWYKK3sKKwlCaWdpbnQgKmM7CisJaW50IGssIHdhLCB3Yiwgd2M7CisJVUxvbmcgKngsICp4 YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGMsICp4YzA7CisJVUxvbmcgeTsKKyNpZmRlZiBVTExvbmcK KwlVTExvbmcgY2FycnksIHo7CisjZWxzZQorCVVMb25nIGNhcnJ5LCB6OworI2lmZGVmIFBhY2tf MzIKKwlVTG9uZyB6MjsKKyNlbmRpZgorI2VuZGlmCisKKwlpZiAoYS0+d2RzIDwgYi0+d2RzKSB7 CisJCWMgPSBhOworCQlhID0gYjsKKwkJYiA9IGM7CisJCX0KKwlrID0gYS0+azsKKwl3YSA9IGEt PndkczsKKwl3YiA9IGItPndkczsKKwl3YyA9IHdhICsgd2I7CisJaWYgKHdjID4gYS0+bWF4d2Rz KQorCQlrKys7CisJYyA9IEJhbGxvYyhrKTsKKwlpZiAoYyA9PSBOVUxMKQorCQlyZXR1cm4gKE5V TEwpOworCWZvcih4ID0gYy0+eCwgeGEgPSB4ICsgd2M7IHggPCB4YTsgeCsrKQorCQkqeCA9IDA7 CisJeGEgPSBhLT54OworCXhhZSA9IHhhICsgd2E7CisJeGIgPSBiLT54OworCXhiZSA9IHhiICsg d2I7CisJeGMwID0gYy0+eDsKKyNpZmRlZiBVTExvbmcKKwlmb3IoOyB4YiA8IHhiZTsgeGMwKysp IHsKKwkJaWYgKCAoeSA9ICp4YisrKSAhPTApIHsKKwkJCXggPSB4YTsKKwkJCXhjID0geGMwOwor CQkJY2FycnkgPSAwOworCQkJZG8geworCQkJCXogPSAqeCsrICogKFVMTG9uZyl5ICsgKnhjICsg Y2Fycnk7CisJCQkJY2FycnkgPSB6ID4+IDMyOworCQkJCSp4YysrID0geiAmIDB4ZmZmZmZmZmZV TDsKKwkJCQl9CisJCQkJd2hpbGUoeCA8IHhhZSk7CisJCQkqeGMgPSBjYXJyeTsKKwkJCX0KKwkJ fQorI2Vsc2UKKyNpZmRlZiBQYWNrXzMyCisJZm9yKDsgeGIgPCB4YmU7IHhiKyssIHhjMCsrKSB7 CisJCWlmICggKHkgPSAqeGIgJiAweGZmZmYpICE9MCkgeworCQkJeCA9IHhhOworCQkJeGMgPSB4 YzA7CisJCQljYXJyeSA9IDA7CisJCQlkbyB7CisJCQkJeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsg KCp4YyAmIDB4ZmZmZikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHogPj4gMTY7CisJCQkJejIgPSAo KngrKyA+PiAxNikgKiB5ICsgKCp4YyA+PiAxNikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHoyID4+ IDE2OworCQkJCVN0b3JlaW5jKHhjLCB6Miwgeik7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUp OworCQkJKnhjID0gY2Fycnk7CisJCQl9CisJCWlmICggKHkgPSAqeGIgPj4gMTYpICE9MCkgewor CQkJeCA9IHhhOworCQkJeGMgPSB4YzA7CisJCQljYXJyeSA9IDA7CisJCQl6MiA9ICp4YzsKKwkJ CWRvIHsKKwkJCQl6ID0gKCp4ICYgMHhmZmZmKSAqIHkgKyAoKnhjID4+IDE2KSArIGNhcnJ5Owor CQkJCWNhcnJ5ID0geiA+PiAxNjsKKwkJCQlTdG9yZWluYyh4YywgeiwgejIpOworCQkJCXoyID0g KCp4KysgPj4gMTYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7CisJCQkJY2FycnkgPSB6 MiA+PiAxNjsKKwkJCQl9CisJCQkJd2hpbGUoeCA8IHhhZSk7CisJCQkqeGMgPSB6MjsKKwkJCX0K KwkJfQorI2Vsc2UKKwlmb3IoOyB4YiA8IHhiZTsgeGMwKyspIHsKKwkJaWYgKCAoeSA9ICp4Yisr KSAhPTApIHsKKwkJCXggPSB4YTsKKwkJCXhjID0geGMwOworCQkJY2FycnkgPSAwOworCQkJZG8g eworCQkJCXogPSAqeCsrICogeSArICp4YyArIGNhcnJ5OworCQkJCWNhcnJ5ID0geiA+PiAxNjsK KwkJCQkqeGMrKyA9IHogJiAweGZmZmY7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUpOworCQkJ KnhjID0gY2Fycnk7CisJCQl9CisJCX0KKyNlbmRpZgorI2VuZGlmCisJZm9yKHhjMCA9IGMtPngs IHhjID0geGMwICsgd2M7IHdjID4gMCAmJiAhKi0teGM7IC0td2MpIDsKKwljLT53ZHMgPSB3YzsK KwlyZXR1cm4gYzsKKwl9CisKKyBzdGF0aWMgQmlnaW50ICpwNXM7CisKKyBCaWdpbnQgKgorcG93 NW11bHQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7CisjZWxz ZQorCShCaWdpbnQgKmIsIGludCBrKQorI2VuZGlmCit7CisJQmlnaW50ICpiMSwgKnA1LCAqcDUx OworCWludCBpOworCXN0YXRpYyBpbnQgcDA1WzNdID0geyA1LCAyNSwgMTI1IH07CisKKwlpZiAo IChpID0gayAmIDMpICE9MCkgeworCQliID0gbXVsdGFkZChiLCBwMDVbaS0xXSwgMCk7CisJCWlm IChiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwlpZiAoIShrID4+PSAyKSkK KwkJcmV0dXJuIGI7CisJaWYgKChwNSA9IHA1cykgPT0gMCkgeworCQkvKiBmaXJzdCB0aW1lICov CisjaWZkZWYgTVVMVElQTEVfVEhSRUFEUworCQlBQ1FVSVJFX0RUT0FfTE9DSygxKTsKKwkJaWYg KCEocDUgPSBwNXMpKSB7CisJCQlwNSA9IHA1cyA9IGkyYig2MjUpOworCQkJaWYgKHA1ID09IE5V TEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCXA1LT5uZXh0ID0gMDsKKwkJCX0KKwkJRlJFRV9E VE9BX0xPQ0soMSk7CisjZWxzZQorCQlwNSA9IHA1cyA9IGkyYig2MjUpOworCQlpZiAocDUgPT0g TlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCXA1LT5uZXh0ID0gMDsKKyNlbmRpZgorCQl9CisJ Zm9yKDs7KSB7CisJCWlmIChrICYgMSkgeworCQkJYjEgPSBtdWx0KGIsIHA1KTsKKwkJCWlmIChi MSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCZnJlZShiKTsKKwkJCWIgPSBiMTsK KwkJCX0KKwkJaWYgKCEoayA+Pj0gMSkpCisJCQlicmVhazsKKwkJaWYgKChwNTEgPSBwNS0+bmV4 dCkgPT0gMCkgeworI2lmZGVmIE1VTFRJUExFX1RIUkVBRFMKKwkJCUFDUVVJUkVfRFRPQV9MT0NL KDEpOworCQkJaWYgKCEocDUxID0gcDUtPm5leHQpKSB7CisJCQkJcDUxID0gcDUtPm5leHQgPSBt dWx0KHA1LHA1KTsKKwkJCQlpZiAocDUxID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJ CQkJcDUxLT5uZXh0ID0gMDsKKwkJCQl9CisJCQlGUkVFX0RUT0FfTE9DSygxKTsKKyNlbHNlCisJ CQlwNTEgPSBwNS0+bmV4dCA9IG11bHQocDUscDUpOworCQkJaWYgKHA1MSA9PSBOVUxMKQorCQkJ CXJldHVybiAoTlVMTCk7CisJCQlwNTEtPm5leHQgPSAwOworI2VuZGlmCisJCQl9CisJCXA1ID0g cDUxOworCQl9CisJcmV0dXJuIGI7CisJfQorCisgQmlnaW50ICoKK2xzaGlmdAorI2lmZGVmIEtS X2hlYWRlcnMKKwkoYiwgaykgQmlnaW50ICpiOyBpbnQgazsKKyNlbHNlCisJKEJpZ2ludCAqYiwg aW50IGspCisjZW5kaWYKK3sKKwlpbnQgaSwgazEsIG4sIG4xOworCUJpZ2ludCAqYjE7CisJVUxv bmcgKngsICp4MSwgKnhlLCB6OworCisJbiA9IGsgPj4ga3NoaWZ0OworCWsxID0gYi0+azsKKwlu MSA9IG4gKyBiLT53ZHMgKyAxOworCWZvcihpID0gYi0+bWF4d2RzOyBuMSA+IGk7IGkgPDw9IDEp CisJCWsxKys7CisJYjEgPSBCYWxsb2MoazEpOworCWlmIChiMSA9PSBOVUxMKQorCQlyZXR1cm4g KE5VTEwpOworCXgxID0gYjEtPng7CisJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkqeDErKyA9 IDA7CisJeCA9IGItPng7CisJeGUgPSB4ICsgYi0+d2RzOworCWlmIChrICY9IGttYXNrKSB7Cisj aWZkZWYgUGFja18zMgorCQlrMSA9IDMyIC0gazsKKwkJeiA9IDA7CisJCWRvIHsKKwkJCSp4MSsr ID0gKnggPDwgayB8IHo7CisJCQl6ID0gKngrKyA+PiBrMTsKKwkJCX0KKwkJCXdoaWxlKHggPCB4 ZSk7CisJCWlmICgoKngxID0geikgIT0wKQorCQkJKytuMTsKKyNlbHNlCisJCWsxID0gMTYgLSBr OworCQl6ID0gMDsKKwkJZG8geworCQkJKngxKysgPSAqeCA8PCBrICAmIDB4ZmZmZiB8IHo7CisJ CQl6ID0gKngrKyA+PiBrMTsKKwkJCX0KKwkJCXdoaWxlKHggPCB4ZSk7CisJCWlmICgqeDEgPSB6 KQorCQkJKytuMTsKKyNlbmRpZgorCQl9CisJZWxzZSBkbworCQkqeDErKyA9ICp4Kys7CisJCXdo aWxlKHggPCB4ZSk7CisJYjEtPndkcyA9IG4xIC0gMTsKKwlCZnJlZShiKTsKKwlyZXR1cm4gYjE7 CisJfQorCisgaW50CitjbXAKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGEsIGIpIEJpZ2ludCAqYSwg KmI7CisjZWxzZQorCShCaWdpbnQgKmEsIEJpZ2ludCAqYikKKyNlbmRpZgoreworCVVMb25nICp4 YSwgKnhhMCwgKnhiLCAqeGIwOworCWludCBpLCBqOworCisJaSA9IGEtPndkczsKKwlqID0gYi0+ d2RzOworI2lmZGVmIERFQlVHCisJaWYgKGkgPiAxICYmICFhLT54W2ktMV0pCisJCUJ1ZygiY21w IGNhbGxlZCB3aXRoIGEtPnhbYS0+d2RzLTFdID09IDAiKTsKKwlpZiAoaiA+IDEgJiYgIWItPnhb ai0xXSkKKwkJQnVnKCJjbXAgY2FsbGVkIHdpdGggYi0+eFtiLT53ZHMtMV0gPT0gMCIpOworI2Vu ZGlmCisJaWYgKGkgLT0gaikKKwkJcmV0dXJuIGk7CisJeGEwID0gYS0+eDsKKwl4YSA9IHhhMCAr IGo7CisJeGIwID0gYi0+eDsKKwl4YiA9IHhiMCArIGo7CisJZm9yKDs7KSB7CisJCWlmICgqLS14 YSAhPSAqLS14YikKKwkJCXJldHVybiAqeGEgPCAqeGIgPyAtMSA6IDE7CisJCWlmICh4YSA8PSB4 YTApCisJCQlicmVhazsKKwkJfQorCXJldHVybiAwOworCX0KKworIEJpZ2ludCAqCitkaWZmCisj aWZkZWYgS1JfaGVhZGVycworCShhLCBiKSBCaWdpbnQgKmEsICpiOworI2Vsc2UKKwkoQmlnaW50 ICphLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmM7CisJaW50IGksIHdhLCB3YjsK KwlVTG9uZyAqeGEsICp4YWUsICp4YiwgKnhiZSwgKnhjOworI2lmZGVmIFVMTG9uZworCVVMTG9u ZyBib3Jyb3csIHk7CisjZWxzZQorCVVMb25nIGJvcnJvdywgeTsKKyNpZmRlZiBQYWNrXzMyCisJ VUxvbmcgejsKKyNlbmRpZgorI2VuZGlmCisKKwlpID0gY21wKGEsYik7CisJaWYgKCFpKSB7CisJ CWMgPSBCYWxsb2MoMCk7CisJCWlmIChjID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQlj LT53ZHMgPSAxOworCQljLT54WzBdID0gMDsKKwkJcmV0dXJuIGM7CisJCX0KKwlpZiAoaSA8IDAp IHsKKwkJYyA9IGE7CisJCWEgPSBiOworCQliID0gYzsKKwkJaSA9IDE7CisJCX0KKwllbHNlCisJ CWkgPSAwOworCWMgPSBCYWxsb2MoYS0+ayk7CisJaWYgKGMgPT0gTlVMTCkKKwkJcmV0dXJuIChO VUxMKTsKKwljLT5zaWduID0gaTsKKwl3YSA9IGEtPndkczsKKwl4YSA9IGEtPng7CisJeGFlID0g eGEgKyB3YTsKKwl3YiA9IGItPndkczsKKwl4YiA9IGItPng7CisJeGJlID0geGIgKyB3YjsKKwl4 YyA9IGMtPng7CisJYm9ycm93ID0gMDsKKyNpZmRlZiBVTExvbmcKKwlkbyB7CisJCXkgPSAoVUxM b25nKSp4YSsrIC0gKnhiKysgLSBib3Jyb3c7CisJCWJvcnJvdyA9IHkgPj4gMzIgJiAxVUw7CisJ CSp4YysrID0geSAmIDB4ZmZmZmZmZmZVTDsKKwkJfQorCQl3aGlsZSh4YiA8IHhiZSk7CisJd2hp bGUoeGEgPCB4YWUpIHsKKwkJeSA9ICp4YSsrIC0gYm9ycm93OworCQlib3Jyb3cgPSB5ID4+IDMy ICYgMVVMOworCQkqeGMrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisJCX0KKyNlbHNlCisjaWZkZWYg UGFja18zMgorCWRvIHsKKwkJeSA9ICgqeGEgJiAweGZmZmYpIC0gKCp4YiAmIDB4ZmZmZikgLSBi b3Jyb3c7CisJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCXogPSAoKnhhKysgPj4g MTYpIC0gKCp4YisrID4+IDE2KSAtIGJvcnJvdzsKKwkJYm9ycm93ID0gKHogJiAweDEwMDAwKSA+ PiAxNjsKKwkJU3RvcmVpbmMoeGMsIHosIHkpOworCQl9CisJCXdoaWxlKHhiIDwgeGJlKTsKKwl3 aGlsZSh4YSA8IHhhZSkgeworCQl5ID0gKCp4YSAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCWJvcnJv dyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCXogPSAoKnhhKysgPj4gMTYpIC0gYm9ycm93Owor CQlib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworCQlTdG9yZWluYyh4YywgeiwgeSk7CisJ CX0KKyNlbHNlCisJZG8geworCQl5ID0gKnhhKysgLSAqeGIrKyAtIGJvcnJvdzsKKwkJYm9ycm93 ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJKnhjKysgPSB5ICYgMHhmZmZmOworCQl9CisJCXdo aWxlKHhiIDwgeGJlKTsKKwl3aGlsZSh4YSA8IHhhZSkgeworCQl5ID0gKnhhKysgLSBib3Jyb3c7 CisJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCSp4YysrID0geSAmIDB4ZmZmZjsK KwkJfQorI2VuZGlmCisjZW5kaWYKKwl3aGlsZSghKi0teGMpCisJCXdhLS07CisJYy0+d2RzID0g d2E7CisJcmV0dXJuIGM7CisJfQorCisgZG91YmxlCitiMmQKKyNpZmRlZiBLUl9oZWFkZXJzCisJ KGEsIGUpIEJpZ2ludCAqYTsgaW50ICplOworI2Vsc2UKKwkoQmlnaW50ICphLCBpbnQgKmUpCisj ZW5kaWYKK3sKKwlVTG9uZyAqeGEsICp4YTAsIHcsIHksIHo7CisJaW50IGs7CisJVSBkOworI2lm ZGVmIFZBWAorCVVMb25nIGQwLCBkMTsKKyNlbHNlCisjZGVmaW5lIGQwIHdvcmQwKCZkKQorI2Rl ZmluZSBkMSB3b3JkMSgmZCkKKyNlbmRpZgorCisJeGEwID0gYS0+eDsKKwl4YSA9IHhhMCArIGEt PndkczsKKwl5ID0gKi0teGE7CisjaWZkZWYgREVCVUcKKwlpZiAoIXkpIEJ1ZygiemVybyB5IGlu IGIyZCIpOworI2VuZGlmCisJayA9IGhpMGJpdHMoeSk7CisJKmUgPSAzMiAtIGs7CisjaWZkZWYg UGFja18zMgorCWlmIChrIDwgRWJpdHMpIHsKKwkJZDAgPSBFeHBfMSB8IHkgPj4gKEViaXRzIC0g ayk7CisJCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJZDEgPSB5IDw8ICgoMzItRWJpdHMp ICsgaykgfCB3ID4+IChFYml0cyAtIGspOworCQlnb3RvIHJldF9kOworCQl9CisJeiA9IHhhID4g eGEwID8gKi0teGEgOiAwOworCWlmIChrIC09IEViaXRzKSB7CisJCWQwID0gRXhwXzEgfCB5IDw8 IGsgfCB6ID4+ICgzMiAtIGspOworCQl5ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCWQxID0g eiA8PCBrIHwgeSA+PiAoMzIgLSBrKTsKKwkJfQorCWVsc2UgeworCQlkMCA9IEV4cF8xIHwgeTsK KwkJZDEgPSB6OworCQl9CisjZWxzZQorCWlmIChrIDwgRWJpdHMgKyAxNikgeworCQl6ID0geGEg PiB4YTAgPyAqLS14YSA6IDA7CisJCWQwID0gRXhwXzEgfCB5IDw8IGsgLSBFYml0cyB8IHogPj4g RWJpdHMgKyAxNiAtIGs7CisJCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJeSA9IHhhID4g eGEwID8gKi0teGEgOiAwOworCQlkMSA9IHogPDwgayArIDE2IC0gRWJpdHMgfCB3IDw8IGsgLSBF Yml0cyB8IHkgPj4gMTYgKyBFYml0cyAtIGs7CisJCWdvdG8gcmV0X2Q7CisJCX0KKwl6ID0geGEg PiB4YTAgPyAqLS14YSA6IDA7CisJdyA9IHhhID4geGEwID8gKi0teGEgOiAwOworCWsgLT0gRWJp dHMgKyAxNjsKKwlkMCA9IEV4cF8xIHwgeSA8PCBrICsgMTYgfCB6IDw8IGsgfCB3ID4+IDE2IC0g azsKKwl5ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJZDEgPSB3IDw8IGsgKyAxNiB8IHkgPDwg azsKKyNlbmRpZgorIHJldF9kOgorI2lmZGVmIFZBWAorCXdvcmQwKCZkKSA9IGQwID4+IDE2IHwg ZDAgPDwgMTY7CisJd29yZDEoJmQpID0gZDEgPj4gMTYgfCBkMSA8PCAxNjsKKyNlbmRpZgorCXJl dHVybiBkdmFsKCZkKTsKKwl9CisjdW5kZWYgZDAKKyN1bmRlZiBkMQorCisgQmlnaW50ICoKK2Qy YgorI2lmZGVmIEtSX2hlYWRlcnMKKwkoZGQsIGUsIGJpdHMpIGRvdWJsZSBkZDsgaW50ICplLCAq Yml0czsKKyNlbHNlCisJKGRvdWJsZSBkZCwgaW50ICplLCBpbnQgKmJpdHMpCisjZW5kaWYKK3sK KwlCaWdpbnQgKmI7CisJVSBkOworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJaW50IGk7Cisj ZW5kaWYKKwlpbnQgZGUsIGs7CisJVUxvbmcgKngsIHksIHo7CisjaWZkZWYgVkFYCisJVUxvbmcg ZDAsIGQxOworI2Vsc2UKKyNkZWZpbmUgZDAgd29yZDAoJmQpCisjZGVmaW5lIGQxIHdvcmQxKCZk KQorI2VuZGlmCisJZC5kID0gZGQ7CisjaWZkZWYgVkFYCisJZDAgPSB3b3JkMCgmZCkgPj4gMTYg fCB3b3JkMCgmZCkgPDwgMTY7CisJZDEgPSB3b3JkMSgmZCkgPj4gMTYgfCB3b3JkMSgmZCkgPDwg MTY7CisjZW5kaWYKKworI2lmZGVmIFBhY2tfMzIKKwliID0gQmFsbG9jKDEpOworI2Vsc2UKKwli ID0gQmFsbG9jKDIpOworI2VuZGlmCisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsK Kwl4ID0gYi0+eDsKKworCXogPSBkMCAmIEZyYWNfbWFzazsKKwlkMCAmPSAweDdmZmZmZmZmOwkv KiBjbGVhciBzaWduIGJpdCwgd2hpY2ggd2UgaWdub3JlICovCisjaWZkZWYgU3VkZGVuX1VuZGVy ZmxvdworCWRlID0gKGludCkoZDAgPj4gRXhwX3NoaWZ0KTsKKyNpZm5kZWYgSUJNCisJeiB8PSBF eHBfbXNrMTE7CisjZW5kaWYKKyNlbHNlCisJaWYgKCAoZGUgPSAoaW50KShkMCA+PiBFeHBfc2hp ZnQpKSAhPTApCisJCXogfD0gRXhwX21zazE7CisjZW5kaWYKKyNpZmRlZiBQYWNrXzMyCisJaWYg KCAoeSA9IGQxKSAhPTApIHsKKwkJaWYgKCAoayA9IGxvMGJpdHMoJnkpKSAhPTApIHsKKwkJCXhb MF0gPSB5IHwgeiA8PCAoMzIgLSBrKTsKKwkJCXogPj49IGs7CisJCQl9CisJCWVsc2UKKwkJCXhb MF0gPSB5OworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCWkgPQorI2VuZGlmCisJCSAgICAg Yi0+d2RzID0gKHhbMV0gPSB6KSAhPTAgPyAyIDogMTsKKwkJfQorCWVsc2UgeworCQlrID0gbG8w Yml0cygmeik7CisJCXhbMF0gPSB6OworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCWkgPQor I2VuZGlmCisJCSAgICBiLT53ZHMgPSAxOworCQlrICs9IDMyOworCQl9CisjZWxzZQorCWlmICgg KHkgPSBkMSkgIT0wKSB7CisJCWlmICggKGsgPSBsbzBiaXRzKCZ5KSkgIT0wKQorCQkJaWYgKGsg Pj0gMTYpIHsKKwkJCQl4WzBdID0geSB8IHogPDwgMzIgLSBrICYgMHhmZmZmOworCQkJCXhbMV0g PSB6ID4+IGsgLSAxNiAmIDB4ZmZmZjsKKwkJCQl4WzJdID0geiA+PiBrOworCQkJCWkgPSAyOwor CQkJCX0KKwkJCWVsc2UgeworCQkJCXhbMF0gPSB5ICYgMHhmZmZmOworCQkJCXhbMV0gPSB5ID4+ IDE2IHwgeiA8PCAxNiAtIGsgJiAweGZmZmY7CisJCQkJeFsyXSA9IHogPj4gayAmIDB4ZmZmZjsK KwkJCQl4WzNdID0geiA+PiBrKzE2OworCQkJCWkgPSAzOworCQkJCX0KKwkJZWxzZSB7CisJCQl4 WzBdID0geSAmIDB4ZmZmZjsKKwkJCXhbMV0gPSB5ID4+IDE2OworCQkJeFsyXSA9IHogJiAweGZm ZmY7CisJCQl4WzNdID0geiA+PiAxNjsKKwkJCWkgPSAzOworCQkJfQorCQl9CisJZWxzZSB7Cisj aWZkZWYgREVCVUcKKwkJaWYgKCF6KQorCQkJQnVnKCJaZXJvIHBhc3NlZCB0byBkMmIiKTsKKyNl bmRpZgorCQlrID0gbG8wYml0cygmeik7CisJCWlmIChrID49IDE2KSB7CisJCQl4WzBdID0gejsK KwkJCWkgPSAwOworCQkJfQorCQllbHNlIHsKKwkJCXhbMF0gPSB6ICYgMHhmZmZmOworCQkJeFsx XSA9IHogPj4gMTY7CisJCQlpID0gMTsKKwkJCX0KKwkJayArPSAzMjsKKwkJfQorCXdoaWxlKCF4 W2ldKQorCQktLWk7CisJYi0+d2RzID0gaSArIDE7CisjZW5kaWYKKyNpZm5kZWYgU3VkZGVuX1Vu ZGVyZmxvdworCWlmIChkZSkgeworI2VuZGlmCisjaWZkZWYgSUJNCisJCSplID0gKGRlIC0gQmlh cyAtIChQLTEpIDw8IDIpICsgazsKKwkJKmJpdHMgPSA0KlAgKyA4IC0gayAtIGhpMGJpdHMod29y ZDAoJmQpICYgRnJhY19tYXNrKTsKKyNlbHNlCisJCSplID0gZGUgLSBCaWFzIC0gKFAtMSkgKyBr OworCQkqYml0cyA9IFAgLSBrOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJ fQorCWVsc2UgeworCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgMSArIGs7CisjaWZkZWYgUGFj a18zMgorCQkqYml0cyA9IDMyKmkgLSBoaTBiaXRzKHhbaS0xXSk7CisjZWxzZQorCQkqYml0cyA9 IChpKzIpKjE2IC0gaGkwYml0cyh4W2ldKTsKKyNlbmRpZgorCQl9CisjZW5kaWYKKwlyZXR1cm4g YjsKKwl9CisjdW5kZWYgZDAKKyN1bmRlZiBkMQorCisgQ09OU1QgZG91YmxlCisjaWZkZWYgSUVF RV9Bcml0aAorYmlndGVuc1tdID0geyAxZTE2LCAxZTMyLCAxZTY0LCAxZTEyOCwgMWUyNTYgfTsK K0NPTlNUIGRvdWJsZSB0aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIsIDFlLTY0LCAxZS0xMjgs IDFlLTI1NgorCQl9OworI2Vsc2UKKyNpZmRlZiBJQk0KK2JpZ3RlbnNbXSA9IHsgMWUxNiwgMWUz MiwgMWU2NCB9OworQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiwgMWUt NjQgfTsKKyNlbHNlCitiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIgfTsKK0NPTlNUIGRvdWJsZSB0 aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIgfTsKKyNlbmRpZgorI2VuZGlmCisKKyBDT05TVCBk b3VibGUKK3RlbnNbXSA9IHsKKwkJMWUwLCAxZTEsIDFlMiwgMWUzLCAxZTQsIDFlNSwgMWU2LCAx ZTcsIDFlOCwgMWU5LAorCQkxZTEwLCAxZTExLCAxZTEyLCAxZTEzLCAxZTE0LCAxZTE1LCAxZTE2 LCAxZTE3LCAxZTE4LCAxZTE5LAorCQkxZTIwLCAxZTIxLCAxZTIyCisjaWZkZWYgVkFYCisJCSwg MWUyMywgMWUyNAorI2VuZGlmCisJCX07CisKKyNpZmRlZiBOT19TVFJJTkdfSAorCisgY2hhciAq CisjaWZkZWYgS1JfaGVhZGVycworc3RyY3BfRDJBKGEsIGIpIGNoYXIgKmE7IGNoYXIgKmI7Cisj ZWxzZQorc3RyY3BfRDJBKGNoYXIgKmEsIENPTlNUIGNoYXIgKmIpCisjZW5kaWYKK3sKKwl3aGls ZSgoKmEgPSAqYisrKSkKKwkJYSsrOworCXJldHVybiBhOworCX0KKworIENoYXIgKgorI2lmZGVm IEtSX2hlYWRlcnMKK21lbWNweV9EMkEoYSwgYiwgbGVuKSBDaGFyICphOyBDaGFyICpiOyBzaXpl X3QgbGVuOworI2Vsc2UKK21lbWNweV9EMkEodm9pZCAqYTEsIHZvaWQgKmIxLCBzaXplX3QgbGVu KQorI2VuZGlmCit7CisJY2hhciAqYSA9IChjaGFyKilhMSwgKmFlID0gYSArIGxlbjsKKwljaGFy ICpiID0gKGNoYXIqKWIxLCAqYTAgPSBhOworCXdoaWxlKGEgPCBhZSkKKwkJKmErKyA9ICpiKys7 CisJcmV0dXJuIGEwOworCX0KKworI2VuZGlmIC8qIE5PX1NUUklOR19IICovCmRpZmYgLS1naXQg YS9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EuaCBiL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS5o CmluZGV4IDA3NTA2YWFjMS4uNGYyNmQ4ODU3IDEwMDY0NAotLS0gYS9uZXdsaWIvbGliYy9zdGRs aWIvZ2R0b2EuaAorKysgYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EuaApAQCAtMzIsMjUgKzMy LDYxIEBAIFRISVMgU09GVFdBUkUuCiAjaWZuZGVmIEdEVE9BX0hfSU5DTFVERUQKICNkZWZpbmUg R0RUT0FfSF9JTkNMVURFRAogCisjaW5jbHVkZSAiYXJpdGguaCIKKyNpbmNsdWRlIDxzdGRkZWYu aD4gLyogZm9yIHNpemVfdCAqLworCisjZGVmaW5lIFBST1RPX05PUk1BTCh4KQorI2RlZmluZSBf X0JFR0lOX0hJRERFTl9ERUNMUworI2RlZmluZSBfX0VORF9ISURERU5fREVDTFMKKyNkZWZpbmUg REVGX1NUUk9ORyh4KQorCisjaWZuZGVmIExvbmcKKyNkZWZpbmUgTG9uZyBpbnQKKyNlbmRpZgor I2lmbmRlZiBVTG9uZwordHlwZWRlZiB1bnNpZ25lZCBMb25nIFVMb25nOworI2VuZGlmCisjaWZu ZGVmIFVTaG9ydAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVU2hvcnQ7CisjZW5kaWYKKworI2lm bmRlZiBBTlNJCisjaWZkZWYgS1JfaGVhZGVycworI2RlZmluZSBBTlNJKHgpICgpCisjZGVmaW5l IFZvaWQgLypub3RoaW5nKi8KKyNlbHNlCisjZGVmaW5lIEFOU0koeCkgeAorI2RlZmluZSBWb2lk IHZvaWQKKyNlbmRpZgorI2VuZGlmIC8qIEFOU0kgKi8KKworI2lmbmRlZiBDT05TVAorI2lmZGVm IEtSX2hlYWRlcnMKKyNkZWZpbmUgQ09OU1QgLyogYmxhbmsgKi8KKyNlbHNlCisjZGVmaW5lIENP TlNUIGNvbnN0CisjZW5kaWYKKyNlbmRpZiAvKiBDT05TVCAqLwogCiAgZW51bSB7CS8qIHJldHVy biB2YWx1ZXMgZnJvbSBzdHJ0b2RnICovCi0JU1RSVE9HX1plcm8JPSAwLAotCVNUUlRPR19Ob3Jt YWwJPSAxLAotCVNUUlRPR19EZW5vcm1hbAk9IDIsCi0JU1RSVE9HX0luZmluaXRlCT0gMywKLQlT VFJUT0dfTmFOCT0gNCwKLQlTVFJUT0dfTmFOYml0cwk9IDUsCi0JU1RSVE9HX05vTnVtYmVyCT0g NiwKLQlTVFJUT0dfUmV0bWFzawk9IDcsCisJU1RSVE9HX1plcm8JPSAweDAwMCwKKwlTVFJUT0df Tm9ybWFsCT0gMHgwMDEsCisJU1RSVE9HX0Rlbm9ybWFsCT0gMHgwMDIsCisJU1RSVE9HX0luZmlu aXRlCT0gMHgwMDMsCisJU1RSVE9HX05hTgk9IDB4MDA0LAorCVNUUlRPR19OYU5iaXRzCT0gMHgw MDUsCisJU1RSVE9HX05vTnVtYmVyCT0gMHgwMDYsCisJU1RSVE9HX05vTWVtb3J5ID0gMHgwMDcs CisJU1RSVE9HX1JldG1hc2sJPSAweDAwZiwKIAogCS8qIFRoZSBmb2xsb3dpbmcgbWF5IGJlIG9y LWVkIGludG8gb25lIG9mIHRoZSBhYm92ZSB2YWx1ZXMuICovCiAKLQlTVFJUT0dfTmVnCT0gMHgw OCwKLQlTVFJUT0dfSW5leGxvCT0gMHgxMCwKLQlTVFJUT0dfSW5leGhpCT0gMHgyMCwKLQlTVFJU T0dfSW5leGFjdAk9IDB4MzAsCi0JU1RSVE9HX1VuZGVyZmxvdz0gMHg0MCwKLQlTVFJUT0dfT3Zl cmZsb3cJPSAweDgwCisJU1RSVE9HX0luZXhsbwk9IDB4MDEwLCAvKiByZXR1cm5lZCByZXN1bHQg cm91bmRlZCB0b3dhcmQgemVybyAqLworCVNUUlRPR19JbmV4aGkJPSAweDAyMCwgLyogcmV0dXJu ZWQgcmVzdWx0IHJvdW5kZWQgYXdheSBmcm9tIHplcm8gKi8KKwlTVFJUT0dfSW5leGFjdAk9IDB4 MDMwLAorCVNUUlRPR19VbmRlcmZsb3c9IDB4MDQwLAorCVNUUlRPR19PdmVyZmxvdwk9IDB4MDgw LAorCVNUUlRPR19OZWcJPSAweDEwMCAvKiBkb2VzIG5vdCBhZmZlY3QgU1RSVE9HX0luZXhsbyBv ciBTVFJUT0dfSW5leGhpICovCiAJfTsKIAogIHR5cGVkZWYgc3RydWN0CkBAIC02OSw2ICsxMDUs NzAgQEAgZW51bSB7CS8qIEZQSS5yb3VuZGluZyB2YWx1ZXM6IHNhbWUgYXMgRkxUX1JPVU5EUyAq LwogCUZQSV9Sb3VuZF9kb3duID0gMwogCX07CiAKLSNlbmRpZiAvKiBHRFRPQV9IX0lOQ0xVREVE ICovCi0KIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19VU2hvcnQ7CisKKyNpZmRlZiBfX2NwbHVz cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIGNoYXIqIF9fZHRvYSAgQU5TSSgo ZG91YmxlIGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwKKwkJCWludCAqc2ln biwgY2hhciAqKnJ2ZSkpOworZXh0ZXJuIGNoYXIqIF9fZ2R0b2EgQU5TSSgoRlBJICpmcGksIGlu dCBiZSwgVUxvbmcgKmJpdHMsIGludCAqa2luZHAsCisJCQlpbnQgbW9kZSwgaW50IG5kaWdpdHMs IGludCAqZGVjcHQsIGNoYXIgKipydmUpKTsKK2V4dGVybiB2b2lkIF9fZnJlZWR0b2EgQU5TSSgo Y2hhciopKTsKK2V4dGVybiBmbG9hdCAgc3RydG9mIEFOU0koKENPTlNUIGNoYXIgKiwgY2hhciAq KikpOworZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgQU5TSSgoQ09OU1QgY2hhciAqLCBjaGFyICoqKSk7 CitleHRlcm4gaW50IF9fc3RydG9kZyBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBGUEkqLCBM b25nKiwgVUxvbmcqKSk7CitjaGFyCSpfX2hkdG9hKGRvdWJsZSwgY29uc3QgY2hhciAqLCBpbnQs IGludCAqLCBpbnQgKiwgY2hhciAqKik7CitjaGFyCSpfX2hsZHRvYShsb25nIGRvdWJsZSwgY29u c3QgY2hhciAqLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKik7CitjaGFyCSpfX2xkdG9hKGxv bmcgZG91YmxlICosIGludCwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKiopOworCitQUk9UT19O T1JNQUwoX19kdG9hKTsKK1BST1RPX05PUk1BTChfX2dkdG9hKTsKK1BST1RPX05PUk1BTChfX2Zy ZWVkdG9hKTsKK1BST1RPX05PUk1BTChfX2hkdG9hKTsKK1BST1RPX05PUk1BTChfX2hsZHRvYSk7 CitQUk9UT19OT1JNQUwoX19sZHRvYSk7CisKK19fQkVHSU5fSElEREVOX0RFQ0xTCitleHRlcm4g Y2hhcioJX19nX2RkZm10ICBBTlNJKChjaGFyKiwgZG91YmxlKiwgaW50LCBzaXplX3QpKTsKK2V4 dGVybiBjaGFyKglfX2dfZGZtdCAgIEFOU0koKGNoYXIqLCBkb3VibGUqLCBpbnQsIHNpemVfdCkp OworZXh0ZXJuIGNoYXIqCV9fZ19mZm10ICAgQU5TSSgoY2hhciosIGZsb2F0KiwgIGludCwgc2l6 ZV90KSk7CitleHRlcm4gY2hhcioJX19nX1FmbXQgICBBTlNJKChjaGFyKiwgdm9pZCosICAgaW50 LCBzaXplX3QpKTsKK2V4dGVybiBjaGFyKglfX2dfeGZtdCAgIEFOU0koKGNoYXIqLCB2b2lkKiwg ICBpbnQsIHNpemVfdCkpOworZXh0ZXJuIGNoYXIqCV9fZ194TGZtdCAgQU5TSSgoY2hhciosIHZv aWQqLCAgIGludCwgc2l6ZV90KSk7CisKK2V4dGVybiBpbnQJX19zdHJ0b0lkICBBTlNJKChDT05T VCBjaGFyKiwgY2hhcioqLCBkb3VibGUqLCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3RydG9J ZGQgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgZG91YmxlKiwgZG91YmxlKikpOworZXh0ZXJu IGludAlfX3N0cnRvSWYgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGZsb2F0KiwgZmxvYXQq KSk7CitleHRlcm4gaW50CV9fc3RydG9JUSAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgdm9p ZCosIHZvaWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9JeCAgQU5TSSgoQ09OU1QgY2hhciosIGNo YXIqKiwgdm9pZCosIHZvaWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9JeEwgQU5TSSgoQ09OU1Qg Y2hhciosIGNoYXIqKiwgdm9pZCosIHZvaWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9yZCAgQU5T SSgoQ09OU1QgY2hhciosIGNoYXIqKiwgaW50LCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3Ry dG9yZGQgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgaW50LCBkb3VibGUqKSk7CitleHRlcm4g aW50CV9fc3RydG9yZiAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgaW50LCBmbG9hdCopKTsK K2V4dGVybiBpbnQJX19zdHJ0b3JRICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBpbnQsIHZv aWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9yeCAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwg aW50LCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvcnhMIEFOU0koKENPTlNUIGNoYXIqLCBj aGFyKiosIGludCwgdm9pZCopKTsKKyNpZiAxCitleHRlcm4gaW50CV9fc3RydG9kSSAgQU5TSSgo Q09OU1QgY2hhciosIGNoYXIqKiwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRvcGQgIEFO U0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGRvdWJsZSopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3Bk ZCBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3Ry dG9wZiAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgZmxvYXQqKSk7CitleHRlcm4gaW50CV9f c3RydG9wUSAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgdm9pZCopKTsKK2V4dGVybiBpbnQJ X19zdHJ0b3B4ICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCB2b2lkKikpOworZXh0ZXJuIGlu dAlfX3N0cnRvcHhMIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIHZvaWQqKSk7CisjZWxzZQor I2RlZmluZSBfX3N0cnRvcGQocyxzZSx4KSBzdHJ0b3JkKHMsc2UsMSx4KQorI2RlZmluZSBfX3N0 cnRvcGRkKHMsc2UseCkgc3RydG9yZGQocyxzZSwxLHgpCisjZGVmaW5lIF9fc3RydG9wZihzLHNl LHgpIHN0cnRvcmYocyxzZSwxLHgpCisjZGVmaW5lIF9fc3RydG9wUShzLHNlLHgpIHN0cnRvclEo cyxzZSwxLHgpCisjZGVmaW5lIF9fc3RydG9weChzLHNlLHgpIHN0cnRvcngocyxzZSwxLHgpCisj ZGVmaW5lIF9fc3RydG9weEwocyxzZSx4KSBzdHJ0b3J4TChzLHNlLDEseCkKKyNlbmRpZgorX19F TkRfSElEREVOX0RFQ0xTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYg LyogR0RUT0FfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL2dk dG9haW1wLmggYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2FpbXAuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAuLmJmOTc3MDk1NQotLS0gL2Rldi9udWxsCisrKyBiL25ld2xp Yi9saWJjL3N0ZGxpYi9nZHRvYWltcC5oCkBAIC0wLDAgKzEsNjcyIEBACisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitU aGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQg KEMpIDE5OTgtMjAwMCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVk CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMg c29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhv dXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkg ZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQg dGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGlu IGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2Yg dGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24u CisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBT T0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRT IEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00g TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElT IFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIGR0b2Eu YyB0aGF0IGNvbnZlcnRzIGFyYml0YXJ5IGJpbmFyeQorICAgZmxvYXRpbmctcG9pbnQgZm9ybWF0 cyB0byBhbmQgZnJvbSBkZWNpbWFsIG5vdGF0aW9uLiAgSXQgdXNlcworICAgZG91YmxlLXByZWNp c2lvbiBhcml0aG1ldGljIGludGVybmFsbHksIHNvIHRoZXJlIGFyZSBzdGlsbAorICAgdmFyaW91 cyAjaWZkZWZzIHRoYXQgYWRhcHQgdGhlIGNhbGN1bGF0aW9ucyB0byB0aGUgbmF0aXZlCisgICBk b3VibGUtcHJlY2lzaW9uIGFyaXRobWV0aWMgKGFueSBvZiBJRUVFLCBWQVggRF9mbG9hdGluZywK KyAgIG9yIElCTSBtYWluZnJhbWUgYXJpdGhtZXRpYykuCisKKyAgIFBsZWFzZSBzZW5kIGJ1ZyBy ZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICAgd2l0aCAiIGF0 ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgorICovCisKKy8q IE9uIGEgbWFjaGluZSB3aXRoIElFRUUgZXh0ZW5kZWQtcHJlY2lzaW9uIHJlZ2lzdGVycywgaXQg aXMKKyAqIG5lY2Vzc2FyeSB0byBzcGVjaWZ5IGRvdWJsZS1wcmVjaXNpb24gKDUzLWJpdCkgcm91 bmRpbmcgcHJlY2lzaW9uCisgKiBiZWZvcmUgaW52b2tpbmcgc3RydG9kIG9yIGR0b2EuICBJZiB0 aGUgbWFjaGluZSB1c2VzICh0aGUgZXF1aXZhbGVudAorICogb2YpIEludGVsIDgweDg3IGFyaXRo bWV0aWMsIHRoZSBjYWxsCisgKglfY29udHJvbDg3KFBDXzUzLCBNQ1dfUEMpOworICogZG9lcyB0 aGlzIHdpdGggbWFueSBjb21waWxlcnMuICBXaGV0aGVyIHRoaXMgb3IgYW5vdGhlciBjYWxsIGlz CisgKiBhcHByb3ByaWF0ZSBkZXBlbmRzIG9uIHRoZSBjb21waWxlcjsgZm9yIHRoaXMgdG8gd29y aywgaXQgbWF5IGJlCisgKiBuZWNlc3NhcnkgdG8gI2luY2x1ZGUgImZsb2F0LmgiIG9yIGFub3Ro ZXIgc3lzdGVtLWRlcGVuZGVudCBoZWFkZXIKKyAqIGZpbGUuCisgKi8KKworLyogc3RydG9kIGZv ciBJRUVFLSwgVkFYLSwgYW5kIElCTS1hcml0aG1ldGljIG1hY2hpbmVzLgorICoKKyAqIFRoaXMg c3RydG9kIHJldHVybnMgYSBuZWFyZXN0IG1hY2hpbmUgbnVtYmVyIHRvIHRoZSBpbnB1dCBkZWNp bWFsCisgKiBzdHJpbmcgKG9yIHNldHMgZXJybm8gdG8gRVJBTkdFKS4gIFdpdGggSUVFRSBhcml0 aG1ldGljLCB0aWVzIGFyZQorICogYnJva2VuIGJ5IHRoZSBJRUVFIHJvdW5kLWV2ZW4gcnVsZS4g IE90aGVyd2lzZSB0aWVzIGFyZSBicm9rZW4gYnkKKyAqIGJpYXNlZCByb3VuZGluZyAoYWRkIGhh bGYgYW5kIGNob3ApLgorICoKKyAqIEluc3BpcmVkIGxvb3NlbHkgYnkgV2lsbGlhbSBELiBDbGlu Z2VyJ3MgcGFwZXIgIkhvdyB0byBSZWFkIEZsb2F0aW5nCisgKiBQb2ludCBOdW1iZXJzIEFjY3Vy YXRlbHkiIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiAxMTItMTI2XS4KKyAqCisgKiBNb2Rp ZmljYXRpb25zOgorICoKKyAqCTEuIFdlIG9ubHkgcmVxdWlyZSBJRUVFLCBJQk0sIG9yIFZBWCBk b3VibGUtcHJlY2lzaW9uCisgKgkJYXJpdGhtZXRpYyAobm90IElFRUUgZG91YmxlLWV4dGVuZGVk KS4KKyAqCTIuIFdlIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgaW4gYSBj YXNlIHRoYXQKKyAqCQlDbGluZ2VyIG1pc3NlZCAtLSB3aGVuIHdlJ3JlIGNvbXB1dGluZyBkICog MTBebgorICoJCWZvciBhIHNtYWxsIGludGVnZXIgZCBhbmQgdGhlIGludGVnZXIgbiBpcyBub3Qg dG9vCisgKgkJbXVjaCBsYXJnZXIgdGhhbiAyMiAodGhlIG1heGltdW0gaW50ZWdlciBrIGZvciB3 aGljaAorICoJCXdlIGNhbiByZXByZXNlbnQgMTBeayBleGFjdGx5KSwgd2UgbWF5IGJlIGFibGUg dG8KKyAqCQljb21wdXRlIChkKjEwXmspICogMTBeKGUtaykgd2l0aCBqdXN0IG9uZSByb3VuZG9m Zi4KKyAqCTMuIFJhdGhlciB0aGFuIGEgYml0LWF0LWEtdGltZSBhZGp1c3RtZW50IG9mIHRoZSBi aW5hcnkKKyAqCQlyZXN1bHQgaW4gdGhlIGhhcmQgY2FzZSwgd2UgdXNlIGZsb2F0aW5nLXBvaW50 CisgKgkJYXJpdGhtZXRpYyB0byBkZXRlcm1pbmUgdGhlIGFkanVzdG1lbnQgdG8gd2l0aGluCisg KgkJb25lIGJpdDsgb25seSBpbiByZWFsbHkgaGFyZCBjYXNlcyBkbyB3ZSBuZWVkIHRvCisgKgkJ Y29tcHV0ZSBhIHNlY29uZCByZXNpZHVhbC4KKyAqCTQuIEJlY2F1c2Ugb2YgMy4sIHdlIGRvbid0 IG5lZWQgYSBsYXJnZSB0YWJsZSBvZiBwb3dlcnMgb2YgMTAKKyAqCQlmb3IgdGVuLXRvLWUgKGp1 c3Qgc29tZSBzbWFsbCB0YWJsZXMsIGUuZy4gb2YgMTBeaworICoJCWZvciAwIDw9IGsgPD0gMjIp LgorICovCisKKy8qCisgKiAjZGVmaW5lIElFRUVfODA4NyBmb3IgSUVFRS1hcml0aG1ldGljIG1h Y2hpbmVzIHdoZXJlIHRoZSBsZWFzdAorICoJc2lnbmlmaWNhbnQgYnl0ZSBoYXMgdGhlIGxvd2Vz dCBhZGRyZXNzLgorICogI2RlZmluZSBJRUVFX01DNjhrIGZvciBJRUVFLWFyaXRobWV0aWMgbWFj aGluZXMgd2hlcmUgdGhlIG1vc3QKKyAqCXNpZ25pZmljYW50IGJ5dGUgaGFzIHRoZSBsb3dlc3Qg YWRkcmVzcy4KKyAqICNkZWZpbmUgTG9uZyBpbnQgb24gbWFjaGluZXMgd2l0aCAzMi1iaXQgaW50 cyBhbmQgNjQtYml0IGxvbmdzLgorICogI2RlZmluZSBTdWRkZW5fVW5kZXJmbG93IGZvciBJRUVF LWZvcm1hdCBtYWNoaW5lcyB3aXRob3V0IGdyYWR1YWwKKyAqCXVuZGVyZmxvdyAoaS5lLiwgdGhh dCBmbHVzaCB0byB6ZXJvIG9uIHVuZGVyZmxvdykuCisgKiAjZGVmaW5lIElCTSBmb3IgSUJNIG1h aW5mcmFtZS1zdHlsZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorICogI2RlZmluZSBWQVgg Zm9yIFZBWC1zdHlsZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIChEX2Zsb2F0aW5nKS4KKyAq ICNkZWZpbmUgTm9fbGVmdHJpZ2h0IHRvIG9taXQgbGVmdC1yaWdodCBsb2dpYyBpbiBmYXN0IGZs b2F0aW5nLXBvaW50CisgKgljb21wdXRhdGlvbiBvZiBkdG9hIGFuZCBnZHRvYS4gIFRoaXMgd2ls bCBjYXVzZSBtb2RlcyA0IGFuZCA1IHRvIGJlCisgKgl0cmVhdGVkIHRoZSBzYW1lIGFzIG1vZGVz IDIgYW5kIDMgZm9yIHNvbWUgaW5wdXRzLgorICogI2RlZmluZSBDaGVja19GTFRfUk9VTkRTIGlm IEZMVF9ST1VORFMgY2FuIGFzc3VtZSB0aGUgdmFsdWVzIDIgb3IgMy4KKyAqICNkZWZpbmUgUk5E X1BST0RRVU9UIHRvIHVzZSBybmRfcHJvZCBhbmQgcm5kX3F1b3QgKGFzc2VtYmx5IHJvdXRpbmVz CisgKgl0aGF0IHVzZSBleHRlbmRlZC1wcmVjaXNpb24gaW5zdHJ1Y3Rpb25zIHRvIGNvbXB1dGUg cm91bmRlZAorICoJcHJvZHVjdHMgYW5kIHF1b3RpZW50cykgd2l0aCBJQk0uCisgKiAjZGVmaW5l IFJPVU5EX0JJQVNFRCBmb3IgSUVFRS1mb3JtYXQgd2l0aCBiaWFzZWQgcm91bmRpbmcgYW5kIGFy aXRobWV0aWMKKyAqCXRoYXQgcm91bmRzIHRvd2FyZCArSW5maW5pdHkuCisgKiAjZGVmaW5lIFJP VU5EX0JJQVNFRF93aXRob3V0X1JvdW5kX1VwIGZvciBJRUVFLWZvcm1hdCB3aXRoIGJpYXNlZAor ICoJcm91bmRpbmcgd2hlbiB0aGUgdW5kZXJseWluZyBmbG9hdGluZy1wb2ludCBhcml0aG1ldGlj IHVzZXMKKyAqCXVuYmlhc2VkIHJvdW5kaW5nLiAgVGhpcyBwcmV2ZW50IHVzaW5nIG9yZGluYXJ5 IGZsb2F0aW5nLXBvaW50CisgKglhcml0aG1ldGljIHdoZW4gdGhlIHJlc3VsdCBjb3VsZCBiZSBj b21wdXRlZCB3aXRoIG9uZSByb3VuZGluZyBlcnJvci4KKyAqICNkZWZpbmUgSW5hY2N1cmF0ZV9E aXZpZGUgZm9yIElFRUUtZm9ybWF0IHdpdGggY29ycmVjdGx5IHJvdW5kZWQKKyAqCXByb2R1Y3Rz IGJ1dCBpbmFjY3VyYXRlIHF1b3RpZW50cywgZS5nLiwgZm9yIEludGVsIGk4NjAuCisgKiAjZGVm aW5lIE5PX0xPTkdfTE9ORyBvbiBtYWNoaW5lcyB0aGF0IGRvIG5vdCBoYXZlIGEgImxvbmcgbG9u ZyIKKyAqCWludGVnZXIgdHlwZSAob2YgPj0gNjQgYml0cykuICBPbiBzdWNoIG1hY2hpbmVzLCB5 b3UgY2FuCisgKgkjZGVmaW5lIEp1c3RfMTYgdG8gc3RvcmUgMTYgYml0cyBwZXIgMzItYml0IExv bmcgd2hlbiBkb2luZworICoJaGlnaC1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgV2hl dGhlciB0aGlzIHNwZWVkcyB0aGluZ3MKKyAqCXVwIG9yIHNsb3dzIHRoaW5ncyBkb3duIGRlcGVu ZHMgb24gdGhlIG1hY2hpbmUgYW5kIHRoZSBudW1iZXIKKyAqCWJlaW5nIGNvbnZlcnRlZC4gIElm IGxvbmcgbG9uZyBpcyBhdmFpbGFibGUgYW5kIHRoZSBuYW1lIGlzCisgKglzb21ldGhpbmcgb3Ro ZXIgdGhhbiAibG9uZyBsb25nIiwgI2RlZmluZSBMbG9uZyB0byBiZSB0aGUgbmFtZSwKKyAqCWFu ZCBpZiAidW5zaWduZWQgTGxvbmciIGRvZXMgbm90IHdvcmsgYXMgYW4gdW5zaWduZWQgdmVyc2lv biBvZgorICoJTGxvbmcsICNkZWZpbmUgI1VMTG9uZyB0byBiZSB0aGUgY29ycmVzcG9uZGluZyB1 bnNpZ25lZCB0eXBlLgorICogI2RlZmluZSBLUl9oZWFkZXJzIGZvciBvbGQtc3R5bGUgQyBmdW5j dGlvbiBoZWFkZXJzLgorICogI2RlZmluZSBCYWRfZmxvYXRfaCBpZiB5b3VyIHN5c3RlbSBsYWNr cyBhIGZsb2F0Lmggb3IgaWYgaXQgZG9lcyBub3QKKyAqCWRlZmluZSBzb21lIG9yIGFsbCBvZiBE QkxfRElHLCBEQkxfTUFYXzEwX0VYUCwgREJMX01BWF9FWFAsCisgKglGTFRfUkFESVgsIEZMVF9S T1VORFMsIGFuZCBEQkxfTUFYLgorICogI2RlZmluZSBNQUxMT0MgeW91cl9tYWxsb2MsIHdoZXJl IHlvdXJfbWFsbG9jKG4pIGFjdHMgbGlrZSBtYWxsb2MobikKKyAqCWlmIG1lbW9yeSBpcyBhdmFp bGFibGUgYW5kIG90aGVyd2lzZSBkb2VzIHNvbWV0aGluZyB5b3UgZGVlbQorICoJYXBwcm9wcmlh dGUuICBJZiBNQUxMT0MgaXMgdW5kZWZpbmVkLCBtYWxsb2Mgd2lsbCBiZSBpbnZva2VkCisgKglk aXJlY3RseSAtLSBhbmQgYXNzdW1lZCBhbHdheXMgdG8gc3VjY2VlZC4gIFNpbWlsYXJseSwgaWYg eW91CisgKgl3YW50IHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBzeXN0ZW0ncyBmcmVlKCkgdG8g YmUgY2FsbGVkIHRvCisgKglyZWN5Y2xlIG1lbW9yeSBhY3F1aXJlZCBmcm9tIE1BTExPQywgI2Rl ZmluZSBGUkVFIHRvIGJlIHRoZQorICoJbmFtZSBvZiB0aGUgYWx0ZXJuYXRlIHJvdXRpbmUuICAo RlJFRSBvciBmcmVlIGlzIG9ubHkgY2FsbGVkIGluCisgKglwYXRob2xvZ2ljYWwgY2FzZXMsIGUu Zy4sIGluIGEgZ2R0b2EgY2FsbCBhZnRlciBhIGdkdG9hIHJldHVybiBpbgorICoJbW9kZSAzIHdp dGggdGhvdXNhbmRzIG9mIGRpZ2l0cyByZXF1ZXN0ZWQuKQorICogI2RlZmluZSBPbWl0X1ByaXZh dGVfTWVtb3J5IHRvIG9taXQgbG9naWMgKGFkZGVkIEphbi4gMTk5OCkgZm9yIG1ha2luZworICoJ bWVtb3J5IGFsbG9jYXRpb25zIGZyb20gYSBwcml2YXRlIHBvb2wgb2YgbWVtb3J5IHdoZW4gcG9z c2libGUuCisgKglXaGVuIHVzZWQsIHRoZSBwcml2YXRlIHBvb2wgaXMgUFJJVkFURV9NRU0gYnl0 ZXMgbG9uZzogIDIzMDQgYnl0ZXMsCisgKgl1bmxlc3MgI2RlZmluZWQgdG8gYmUgYSBkaWZmZXJl bnQgbGVuZ3RoLiAgVGhpcyBkZWZhdWx0IGxlbmd0aAorICoJc3VmZmljZXMgdG8gZ2V0IHJpZCBv ZiBNQUxMT0MgY2FsbHMgZXhjZXB0IGZvciB1bnVzdWFsIGNhc2VzLAorICoJc3VjaCBhcyBkZWNp bWFsLXRvLWJpbmFyeSBjb252ZXJzaW9uIG9mIGEgdmVyeSBsb25nIHN0cmluZyBvZgorICoJZGln aXRzLiAgV2hlbiBjb252ZXJ0aW5nIElFRUUgZG91YmxlIHByZWNpc2lvbiB2YWx1ZXMsIHRoZQor ICoJbG9uZ2VzdCBzdHJpbmcgZ2R0b2EgY2FuIHJldHVybiBpcyBhYm91dCA3NTEgYnl0ZXMgbG9u Zy4gIEZvcgorICoJY29udmVyc2lvbnMgYnkgc3RydG9kIG9mIHN0cmluZ3Mgb2YgODAwIGRpZ2l0 cyBhbmQgYWxsIGdkdG9hCisgKgljb252ZXJzaW9ucyBvZiBJRUVFIGRvdWJsZXMgaW4gc2luZ2xl LXRocmVhZGVkIGV4ZWN1dGlvbnMgd2l0aAorICoJOC1ieXRlIHBvaW50ZXJzLCBQUklWQVRFX01F TSA+PSA3NDAwIGFwcGVhcnMgdG8gc3VmZmljZTsgd2l0aAorICoJNC1ieXRlIHBvaW50ZXJzLCBQ UklWQVRFX01FTSA+PSA3MTEyIGFwcGVhcnMgYWRlcXVhdGUuCisgKiAjZGVmaW5lIE5PX0lORk5B Tl9DSEVDSyBpZiB5b3UgZG8gbm90IHdpc2ggdG8gaGF2ZSBJTkZOQU5fQ0hFQ0sKKyAqCSNkZWZp bmVkIGF1dG9tYXRpY2FsbHkgb24gSUVFRSBzeXN0ZW1zLiAgT24gc3VjaCBzeXN0ZW1zLAorICoJ d2hlbiBJTkZOQU5fQ0hFQ0sgaXMgI2RlZmluZWQsIHN0cnRvZCBjaGVja3MKKyAqCWZvciBJbmZp bml0eSBhbmQgTmFOIChjYXNlIGluc2Vuc2l0aXZlbHkpLgorICoJV2hlbiBJTkZOQU5fQ0hFQ0sg aXMgI2RlZmluZWQgYW5kIE5vX0hleF9OYU4gaXMgbm90ICNkZWZpbmVkLAorICoJc3RydG9kZyBh bHNvIGFjY2VwdHMgKGNhc2UgaW5zZW5zaXRpdmVseSkgc3RyaW5ncyBvZiB0aGUgZm9ybQorICoJ TmFOKHgpLCB3aGVyZSB4IGlzIGEgc3RyaW5nIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAob3B0aW9u YWxseQorICoJcHJlY2VkZWQgYnkgMHggb3IgMFgpIGFuZCBzcGFjZXM7IGlmIHRoZXJlIGlzIG9u bHkgb25lIHN0cmluZworICoJb2YgaGV4YWRlY2ltYWwgZGlnaXRzLCBpdCBpcyB0YWtlbiBmb3Ig dGhlIGZyYWN0aW9uIGJpdHMgb2YgdGhlCisgKglyZXN1bHRpbmcgTmFOOyBpZiB0aGVyZSBhcmUg dHdvIG9yIG1vcmUgc3RyaW5ncyBvZiBoZXhhZGVjaW1hbAorICoJZGlnaXRzLCBlYWNoIHN0cmlu ZyBpcyBhc3NpZ25lZCB0byB0aGUgbmV4dCBhdmFpbGFibGUgc2VxdWVuY2UKKyAqCW9mIDMyLWJp dCB3b3JkcyBvZiBmcmFjdGlvbnMgYml0cyAoc3RhcnRpbmcgd2l0aCB0aGUgbW9zdAorICoJc2ln bmlmaWNhbnQpLCByaWdodC1hbGlnbmVkIGluIGVhY2ggc2VxdWVuY2UuCisgKglVbmxlc3MgR0RU T0FfTk9OX1BFREFOVElDX05BTkNIRUNLIGlzICNkZWZpbmVkLCBpbnB1dCAiTmFOKC4uLikiCisg KglpcyBjb25zdW1lZCBldmVuIHdoZW4gLi4uIGhhcyB0aGUgd3JvbmcgZm9ybSAoaW4gd2hpY2gg Y2FzZSB0aGUKKyAqCSIoLi4uKSIgaXMgY29uc3VtZWQgYnV0IGlnbm9yZWQpLgorICogI2RlZmlu ZSBNVUxUSVBMRV9USFJFQURTIGlmIHRoZSBzeXN0ZW0gb2ZmZXJzIHByZWVtcHRpdmVseSBzY2hl ZHVsZWQKKyAqCW11bHRpcGxlIHRocmVhZHMuICBJbiB0aGlzIGNhc2UsIHlvdSBtdXN0IHByb3Zp ZGUgKG9yIHN1aXRhYmx5CisgKgkjZGVmaW5lKSB0d28gbG9ja3MsIGFjcXVpcmVkIGJ5IEFDUVVJ UkVfRFRPQV9MT0NLKG4pIGFuZCBmcmVlZAorICoJYnkgRlJFRV9EVE9BX0xPQ0sobikgZm9yIG4g PSAwIG9yIDEuICAoVGhlIHNlY29uZCBsb2NrLCBhY2Nlc3NlZAorICoJaW4gcG93NW11bHQsIGVu c3VyZXMgbGF6eSBldmFsdWF0aW9uIG9mIG9ubHkgb25lIGNvcHkgb2YgaGlnaAorICoJcG93ZXJz IG9mIDU7IG9taXR0aW5nIHRoaXMgbG9jayB3b3VsZCBpbnRyb2R1Y2UgYSBzbWFsbAorICoJcHJv YmFiaWxpdHkgb2Ygd2FzdGluZyBtZW1vcnksIGJ1dCB3b3VsZCBvdGhlcndpc2UgYmUgaGFybWxl c3MuKQorICoJWW91IG11c3QgYWxzbyBpbnZva2UgZnJlZWR0b2EocykgdG8gZnJlZSB0aGUgdmFs dWUgcyByZXR1cm5lZCBieQorICoJZHRvYS4gIFlvdSBtYXkgZG8gc28gd2hldGhlciBvciBub3Qg TVVMVElQTEVfVEhSRUFEUyBpcyAjZGVmaW5lZC4KKyAqICNkZWZpbmUgSU1QUkVDSVNFX0lORVhB Q1QgaWYgeW91IGRvIG5vdCBjYXJlIGFib3V0IHRoZSBzZXR0aW5nIG9mCisgKgl0aGUgU1RSVE9H X0luZXhhY3QgYml0cyBpbiB0aGUgc3BlY2lhbCBjYXNlIG9mIGRvaW5nIElFRUUgZG91YmxlCisg KglwcmVjaXNpb24gY29udmVyc2lvbnMgKHdoaWNoIGNvdWxkIGFsc28gYmUgZG9uZSBieSB0aGUg c3RydG9kIGluCisgKglkdG9hLmMpLgorICogI2RlZmluZSBOT19IRVhfRlAgdG8gZGlzYWJsZSBy ZWNvZ25pdGlvbiBvZiBDOXgncyBoZXhhZGVjaW1hbAorICoJZmxvYXRpbmctcG9pbnQgY29uc3Rh bnRzLgorICogI2RlZmluZSAtRE5PX0VSUk5PIHRvIHN1cHByZXNzIHNldHRpbmcgZXJybm8gKGlu IHN0cnRvZC5jIGFuZAorICoJc3RydG9kZy5jKS4KKyAqICNkZWZpbmUgTk9fU1RSSU5HX0ggdG8g dXNlIHByaXZhdGUgdmVyc2lvbnMgb2YgbWVtY3B5LgorICoJT24gc29tZSBLJlIgc3lzdGVtcywg aXQgbWF5IGFsc28gYmUgbmVjZXNzYXJ5IHRvCisgKgkjZGVmaW5lIERFQ0xBUkVfU0laRV9UIGlu IHRoaXMgY2FzZS4KKyAqICNkZWZpbmUgVVNFX0xPQ0FMRSB0byB1c2UgdGhlIGN1cnJlbnQgbG9j YWxlJ3MgZGVjaW1hbF9wb2ludCB2YWx1ZS4KKyAqLworCisjaWZuZGVmIEdEVE9BSU1QX0hfSU5D TFVERUQKKyNkZWZpbmUgR0RUT0FJTVBfSF9JTkNMVURFRAorI2luY2x1ZGUgImdkdG9hLmgiCisj aWYgMAorI2luY2x1ZGUgImdkX3FuYW4uaCIKKyNlbmRpZgorI2lmZGVmIEhvbm9yX0ZMVF9ST1VO RFMKKyNpbmNsdWRlIDxmZW52Lmg+CisjZW5kaWYKKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSAi c3RkaW8uaCIKKyNkZWZpbmUgQnVnKHgpIHtmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB4KTsgZXhp dCgxKTt9CisjZW5kaWYKKworI2luY2x1ZGUgInN0ZGxpYi5oIgorI2luY2x1ZGUgInN0cmluZy5o IgorCisjaWZkZWYgS1JfaGVhZGVycworI2RlZmluZSBDaGFyIGNoYXIKKyNlbHNlCisjZGVmaW5l IENoYXIgdm9pZAorI2VuZGlmCisKKyNpZmRlZiBNQUxMT0MKK2V4dGVybiBDaGFyICpNQUxMT0Mg QU5TSSgoc2l6ZV90KSk7CisjZWxzZQorI2RlZmluZSBNQUxMT0MoeCkgX21hbGxvY19yKF9SRUVO VCwgeCkKKyNlbmRpZgorI2RlZmluZSBGUkVFKHgpIF9mcmVlX3IoX1JFRU5ULCB4KQorCisjdW5k ZWYgSUVFRV9Bcml0aAorI3VuZGVmIEF2b2lkX1VuZGVyZmxvdworI2lmZGVmIElFRUVfTUM2OGsK KyNkZWZpbmUgSUVFRV9Bcml0aAorI2VuZGlmCisjaWZkZWYgSUVFRV84MDg3CisjZGVmaW5lIElF RUVfQXJpdGgKKyNlbmRpZgorCisjaW5jbHVkZSAiZXJybm8uaCIKKyNpZmRlZiBCYWRfZmxvYXRf aAorCisjaWZkZWYgSUVFRV9Bcml0aAorI2RlZmluZSBEQkxfRElHIDE1CisjZGVmaW5lIERCTF9N QVhfMTBfRVhQIDMwOAorI2RlZmluZSBEQkxfTUFYX0VYUCAxMDI0CisjZGVmaW5lIEZMVF9SQURJ WCAyCisjZGVmaW5lIERCTF9NQVggMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgKKyNlbmRpZgorCisj aWZkZWYgSUJNCisjZGVmaW5lIERCTF9ESUcgMTYKKyNkZWZpbmUgREJMX01BWF8xMF9FWFAgNzUK KyNkZWZpbmUgREJMX01BWF9FWFAgNjMKKyNkZWZpbmUgRkxUX1JBRElYIDE2CisjZGVmaW5lIERC TF9NQVggNy4yMzcwMDU1NzczMzIyNjIxZSs3NQorI2VuZGlmCisKKyNpZmRlZiBWQVgKKyNkZWZp bmUgREJMX0RJRyAxNgorI2RlZmluZSBEQkxfTUFYXzEwX0VYUCAzOAorI2RlZmluZSBEQkxfTUFY X0VYUCAxMjcKKyNkZWZpbmUgRkxUX1JBRElYIDIKKyNkZWZpbmUgREJMX01BWCAxLjcwMTQxMTgz NDYwNDY5MjNlKzM4CisjZGVmaW5lIG5fYmlndGVucyAyCisjZW5kaWYKKworI2lmbmRlZiBMT05H X01BWAorI2RlZmluZSBMT05HX01BWCAyMTQ3NDgzNjQ3CisjZW5kaWYKKworI2Vsc2UgLyogaWZu ZGVmIEJhZF9mbG9hdF9oICovCisjaW5jbHVkZSAiZmxvYXQuaCIKKyNlbmRpZiAvKiBCYWRfZmxv YXRfaCAqLworCisjaWZkZWYgSUVFRV9Bcml0aAorI2RlZmluZSBTY2FsZV9CaXQgMHgxMAorI2Rl ZmluZSBuX2JpZ3RlbnMgNQorI2VuZGlmCisKKyNpZmRlZiBJQk0KKyNkZWZpbmUgbl9iaWd0ZW5z IDMKKyNlbmRpZgorCisjaWZkZWYgVkFYCisjZGVmaW5lIG5fYmlndGVucyAyCisjZW5kaWYKKwor I2lmbmRlZiBfX01BVEhfSF9fCisjaW5jbHVkZSAibWF0aC5oIgorI2VuZGlmCisKKyNpZmRlZiBf X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSUVFRV84MDg3 KSArIGRlZmluZWQoSUVFRV9NQzY4aykgKyBkZWZpbmVkKFZBWCkgKyBkZWZpbmVkKElCTSkgIT0g MQorRXhhY3RseSBvbmUgb2YgSUVFRV84MDg3LCBJRUVFX01DNjhrLCBWQVgsIG9yIElCTSBzaG91 bGQgYmUgZGVmaW5lZC4KKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uIHsgZG91YmxlIGQ7IFVMb25n IExbMl07IH0gVTsKKworI2lmZGVmIElFRUVfODA4NworI2RlZmluZSB3b3JkMCh4KSAoeCktPkxb MV0KKyNkZWZpbmUgd29yZDEoeCkgKHgpLT5MWzBdCisjZWxzZQorI2RlZmluZSB3b3JkMCh4KSAo eCktPkxbMF0KKyNkZWZpbmUgd29yZDEoeCkgKHgpLT5MWzFdCisjZW5kaWYKKyNkZWZpbmUgZHZh bCh4KSAoeCktPmQKKworLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIG9mIFN0b3JlaW5jIGlz IGFwcHJvcHJpYXRlIGZvciBNSVBTIHByb2Nlc3NvcnMuCisgKiBBbiBhbHRlcm5hdGl2ZSB0aGF0 IG1pZ2h0IGJlIGJldHRlciBvbiBzb21lIG1hY2hpbmVzIGlzCisgKiAjZGVmaW5lIFN0b3JlaW5j KGEsYixjKSAoKmErKyA9IGIgPDwgMTYgfCBjICYgMHhmZmZmKQorICovCisjaWYgZGVmaW5lZChJ RUVFXzgwODcpICsgZGVmaW5lZChWQVgpCisjZGVmaW5lIFN0b3JlaW5jKGEsYixjKSAoKCh1bnNp Z25lZCBzaG9ydCAqKWEpWzFdID0gKHVuc2lnbmVkIHNob3J0KWIsIFwKKygodW5zaWduZWQgc2hv cnQgKilhKVswXSA9ICh1bnNpZ25lZCBzaG9ydCljLCBhKyspCisjZWxzZQorI2RlZmluZSBTdG9y ZWluYyhhLGIsYykgKCgodW5zaWduZWQgc2hvcnQgKilhKVswXSA9ICh1bnNpZ25lZCBzaG9ydCli LCBcCisoKHVuc2lnbmVkIHNob3J0ICopYSlbMV0gPSAodW5zaWduZWQgc2hvcnQpYywgYSsrKQor I2VuZGlmCisKKy8qICNkZWZpbmUgUCBEQkxfTUFOVF9ESUcgKi8KKy8qIFRlbl9wbWF4ID0gZmxv b3IoUCpsb2coMikvbG9nKDUpKSAqLworLyogQmxldGNoID0gKGhpZ2hlc3QgcG93ZXIgb2YgMiA8 IERCTF9NQVhfMTBfRVhQKSAvIDE2ICovCisvKiBRdWlja19tYXggPSBmbG9vcigoUC0xKSpsb2co RkxUX1JBRElYKS9sb2coMTApIC0gMSkgKi8KKy8qIEludF9tYXggPSBmbG9vcihQKmxvZyhGTFRf UkFESVgpL2xvZygxMCkgLSAxKSAqLworCisjaWZkZWYgSUVFRV9Bcml0aAorI2RlZmluZSBFeHBf c2hpZnQgIDIwCisjZGVmaW5lIEV4cF9zaGlmdDEgMjAKKyNkZWZpbmUgRXhwX21zazEgICAgMHgx MDAwMDAKKyNkZWZpbmUgRXhwX21zazExICAgMHgxMDAwMDAKKyNkZWZpbmUgRXhwX21hc2sgIDB4 N2ZmMDAwMDAKKyNkZWZpbmUgUCA1MworI2RlZmluZSBCaWFzIDEwMjMKKyNkZWZpbmUgRW1pbiAo LTEwMjIpCisjZGVmaW5lIEV4cF8xICAweDNmZjAwMDAwCisjZGVmaW5lIEV4cF8xMSAweDNmZjAw MDAwCisjZGVmaW5lIEViaXRzIDExCisjZGVmaW5lIEZyYWNfbWFzayAgMHhmZmZmZgorI2RlZmlu ZSBGcmFjX21hc2sxIDB4ZmZmZmYKKyNkZWZpbmUgVGVuX3BtYXggMjIKKyNkZWZpbmUgQmxldGNo IDB4MTAKKyNkZWZpbmUgQm5kcnlfbWFzayAgMHhmZmZmZgorI2RlZmluZSBCbmRyeV9tYXNrMSAw eGZmZmZmCisjZGVmaW5lIExTQiAxCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMDAwMDAKKyNkZWZp bmUgTG9nMlAgMQorI2RlZmluZSBUaW55MCAwCisjZGVmaW5lIFRpbnkxIDEKKyNkZWZpbmUgUXVp Y2tfbWF4IDE0CisjZGVmaW5lIEludF9tYXggMTQKKworI2lmbmRlZiBGbHRfUm91bmRzCisjaWZk ZWYgRkxUX1JPVU5EUworI2RlZmluZSBGbHRfUm91bmRzIEZMVF9ST1VORFMKKyNlbHNlCisjZGVm aW5lIEZsdF9Sb3VuZHMgMQorI2VuZGlmCisjZW5kaWYgLypGbHRfUm91bmRzKi8KKworI2Vsc2Ug LyogaWZuZGVmIElFRUVfQXJpdGggKi8KKyN1bmRlZiAgU3VkZGVuX1VuZGVyZmxvdworI2RlZmlu ZSBTdWRkZW5fVW5kZXJmbG93CisjaWZkZWYgSUJNCisjdW5kZWYgRmx0X1JvdW5kcworI2RlZmlu ZSBGbHRfUm91bmRzIDAKKyNkZWZpbmUgRXhwX3NoaWZ0ICAyNAorI2RlZmluZSBFeHBfc2hpZnQx IDI0CisjZGVmaW5lIEV4cF9tc2sxICAgMHgxMDAwMDAwCisjZGVmaW5lIEV4cF9tc2sxMSAgMHgx MDAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmMDAwMDAwCisjZGVmaW5lIFAgMTQKKyNkZWZp bmUgQmlhcyA2NQorI2RlZmluZSBFeHBfMSAgMHg0MTAwMDAwMAorI2RlZmluZSBFeHBfMTEgMHg0 MTAwMDAwMAorI2RlZmluZSBFYml0cyA4CS8qIGV4cG9uZW50IGhhcyA3IGJpdHMsIGJ1dCA4IGlz IHRoZSByaWdodCB2YWx1ZSBpbiBiMmQgKi8KKyNkZWZpbmUgRnJhY19tYXNrICAweGZmZmZmZgor I2RlZmluZSBGcmFjX21hc2sxIDB4ZmZmZmZmCisjZGVmaW5lIEJsZXRjaCA0CisjZGVmaW5lIFRl bl9wbWF4IDIyCisjZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZWZmZmZmCisjZGVmaW5lIEJuZHJ5X21h c2sxIDB4ZmZmZmZmCisjZGVmaW5lIExTQiAxCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMDAwMDAK KyNkZWZpbmUgTG9nMlAgNAorI2RlZmluZSBUaW55MCAweDEwMDAwMAorI2RlZmluZSBUaW55MSAw CisjZGVmaW5lIFF1aWNrX21heCAxNAorI2RlZmluZSBJbnRfbWF4IDE1CisjZWxzZSAvKiBWQVgg Ki8KKyN1bmRlZiBGbHRfUm91bmRzCisjZGVmaW5lIEZsdF9Sb3VuZHMgMQorI2RlZmluZSBFeHBf c2hpZnQgIDIzCisjZGVmaW5lIEV4cF9zaGlmdDEgNworI2RlZmluZSBFeHBfbXNrMSAgICAweDgw CisjZGVmaW5lIEV4cF9tc2sxMSAgIDB4ODAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmODAK KyNkZWZpbmUgUCA1NgorI2RlZmluZSBCaWFzIDEyOQorI2RlZmluZSBFbWluICgtMTI3KQorI2Rl ZmluZSBFeHBfMSAgMHg0MDgwMDAwMAorI2RlZmluZSBFeHBfMTEgMHg0MDgwCisjZGVmaW5lIEVi aXRzIDgKKyNkZWZpbmUgRnJhY19tYXNrICAweDdmZmZmZgorI2RlZmluZSBGcmFjX21hc2sxIDB4 ZmZmZjAwN2YKKyNkZWZpbmUgVGVuX3BtYXggMjQKKyNkZWZpbmUgQmxldGNoIDIKKyNkZWZpbmUg Qm5kcnlfbWFzayAgMHhmZmZmMDA3ZgorI2RlZmluZSBCbmRyeV9tYXNrMSAweGZmZmYwMDdmCisj ZGVmaW5lIExTQiAweDEwMDAwCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMAorI2RlZmluZSBMb2cy UCAxCisjZGVmaW5lIFRpbnkwIDB4ODAKKyNkZWZpbmUgVGlueTEgMAorI2RlZmluZSBRdWlja19t YXggMTUKKyNkZWZpbmUgSW50X21heCAxNQorI2VuZGlmIC8qIElCTSwgVkFYICovCisjZW5kaWYg LyogSUVFRV9Bcml0aCAqLworCisjaWZuZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgUk9VTkRfQklB U0VECisjZWxzZQorI2lmZGVmIFJPVU5EX0JJQVNFRF93aXRob3V0X1JvdW5kX1VwCisjdW5kZWYg IFJPVU5EX0JJQVNFRAorI2RlZmluZSBST1VORF9CSUFTRUQKKyNlbmRpZgorI2VuZGlmCisKKyNp ZmRlZiBSTkRfUFJPRFFVT1QKKyNkZWZpbmUgcm91bmRlZF9wcm9kdWN0KGEsYikgYSA9IHJuZF9w cm9kKGEsIGIpCisjZGVmaW5lIHJvdW5kZWRfcXVvdGllbnQoYSxiKSBhID0gcm5kX3F1b3QoYSwg YikKKyNpZmRlZiBLUl9oZWFkZXJzCitleHRlcm4gZG91YmxlIHJuZF9wcm9kKCksIHJuZF9xdW90 KCk7CisjZWxzZQorZXh0ZXJuIGRvdWJsZSBybmRfcHJvZChkb3VibGUsIGRvdWJsZSksIHJuZF9x dW90KGRvdWJsZSwgZG91YmxlKTsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgcm91bmRlZF9wcm9k dWN0KGEsYikgYSAqPSBiCisjZGVmaW5lIHJvdW5kZWRfcXVvdGllbnQoYSxiKSBhIC89IGIKKyNl bmRpZgorCisjZGVmaW5lIEJpZzAgKEZyYWNfbWFzazEgfCBFeHBfbXNrMSooREJMX01BWF9FWFAr Qmlhcy0xKSkKKyNkZWZpbmUgQmlnMSAweGZmZmZmZmZmCisKKyN1bmRlZiAgUGFja18xNgorI2lm bmRlZiBQYWNrXzMyCisjZGVmaW5lIFBhY2tfMzIKKyNlbmRpZgorCisjaWZkZWYgTk9fTE9OR19M T05HCisjdW5kZWYgVUxMb25nCisjaWZkZWYgSnVzdF8xNgorI3VuZGVmIFBhY2tfMzIKKyNkZWZp bmUgUGFja18xNgorLyogV2hlbiBQYWNrXzMyIGlzIG5vdCBkZWZpbmVkLCB3ZSBzdG9yZSAxNiBi aXRzIHBlciAzMi1iaXQgTG9uZy4KKyAqIFRoaXMgbWFrZXMgc29tZSBpbm5lciBsb29wcyBzaW1w bGVyIGFuZCBzb21ldGltZXMgc2F2ZXMgd29yaworICogZHVyaW5nIG11bHRpcGxpY2F0aW9ucywg YnV0IGl0IG9mdGVuIHNlZW1zIHRvIG1ha2UgdGhpbmdzIHNsaWdodGx5CisgKiBzbG93ZXIuICBI ZW5jZSB0aGUgZGVmYXVsdCBpcyBub3cgdG8gc3RvcmUgMzIgYml0cyBwZXIgTG9uZy4KKyAqLwor I2VuZGlmCisjZWxzZQkvKiBsb25nIGxvbmcgYXZhaWxhYmxlICovCisjaWZuZGVmIExsb25nCisj ZGVmaW5lIExsb25nIGxvbmcgbG9uZworI2VuZGlmCisjaWZuZGVmIFVMTG9uZworI2RlZmluZSBV TExvbmcgdW5zaWduZWQgTGxvbmcKKyNlbmRpZgorI2VuZGlmIC8qIE5PX0xPTkdfTE9ORyAqLwor CisjaWZkZWYgUGFja18zMgorI2RlZmluZSBVTGJpdHMgMzIKKyNkZWZpbmUga3NoaWZ0IDUKKyNk ZWZpbmUga21hc2sgMzEKKyNkZWZpbmUgQUxMX09OIDB4ZmZmZmZmZmYKKyNlbHNlCisjZGVmaW5l IFVMYml0cyAxNgorI2RlZmluZSBrc2hpZnQgNAorI2RlZmluZSBrbWFzayAxNQorI2RlZmluZSBB TExfT04gMHhmZmZmCisjZW5kaWYKKworI2lmbmRlZiBfX1NJTkdMRV9USFJFQURfXworI2RlZmlu ZSBNVUxUSVBMRV9USFJFQURTCisjZW5kaWYKKworI2lmbmRlZiBNVUxUSVBMRV9USFJFQURTCisj ZGVmaW5lIEFDUVVJUkVfRFRPQV9MT0NLKG4pCS8qbm90aGluZyovCisjZGVmaW5lIEZSRUVfRFRP QV9MT0NLKG4pCS8qbm90aGluZyovCisjZWxzZQorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjZGVm aW5lIEFDUVVJUkVfRFRPQV9MT0NLKG4pIFwKKwluID8gX19sb2NrX2FjcXVpcmUoX19kdG9hX2xv Y2sxKSA6IF9fbG9ja19hY3F1aXJlKF9fZHRvYV9sb2NrMCkKKyNkZWZpbmUgRlJFRV9EVE9BX0xP Q0sobikgXAorCW4gPyBfX2xvY2tfcmVsZWFzZShfX2R0b2FfbG9jazEpIDogX19sb2NrX3JlbGVh c2UoX19kdG9hX2xvY2swKQorI2VuZGlmCisKKyNkZWZpbmUgS21heCA5CisKKyBzdHJ1Y3QKK0Jp Z2ludCB7CisJc3RydWN0IEJpZ2ludCAqbmV4dDsKKwlpbnQgaywgbWF4d2RzLCBzaWduLCB3ZHM7 CisJVUxvbmcgeFsxXTsKKwl9OworCisgdHlwZWRlZiBzdHJ1Y3QgQmlnaW50IEJpZ2ludDsKKwor I2lmZGVmIE5PX1NUUklOR19ICisjaWZkZWYgREVDTEFSRV9TSVpFX1QKK3R5cGVkZWYgdW5zaWdu ZWQgaW50IHNpemVfdDsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgbWVtY3B5X0QyQSBBTlNJKCh2b2lk KiwgY29uc3Qgdm9pZCosIHNpemVfdCkpOworI2RlZmluZSBCY29weSh4LHkpIG1lbWNweV9EMkEo JngtPnNpZ24sJnktPnNpZ24seS0+d2RzKnNpemVvZihVTG9uZykgKyAyKnNpemVvZihpbnQpKQor I2Vsc2UgLyogIU5PX1NUUklOR19IICovCisjZGVmaW5lIEJjb3B5KHgseSkgbWVtY3B5KCZ4LT5z aWduLCZ5LT5zaWduLHktPndkcypzaXplb2YoVUxvbmcpICsgMipzaXplb2YoaW50KSkKKyNlbmRp ZiAvKiBOT19TVFJJTkdfSCAqLworCisjZGVmaW5lIGR0b2EgX19kdG9hCisjZGVmaW5lIGdkdG9h IF9fZ2R0b2EKKyNkZWZpbmUgZnJlZWR0b2EgX19mcmVlZHRvYQorI2RlZmluZSBzdHJ0b2RnIF9f c3RydG9kZworI2RlZmluZSBnX2RkZm10IF9fZ19kZGZtdAorI2RlZmluZSBnX2RmbXQgX19nX2Rm bXQKKyNkZWZpbmUgZ19mZm10IF9fZ19mZm10CisjZGVmaW5lIGdfUWZtdCBfX2dfUWZtdAorI2Rl ZmluZSBnX3hmbXQgX19nX3hmbXQKKyNkZWZpbmUgZ194TGZtdCBfX2dfeExmbXQKKyNkZWZpbmUg c3RydG9JZCBfX3N0cnRvSWQKKyNkZWZpbmUgc3RydG9JZGQgX19zdHJ0b0lkZAorI2RlZmluZSBz dHJ0b0lmIF9fc3RydG9JZgorI2RlZmluZSBzdHJ0b0lRIF9fc3RydG9JUQorI2RlZmluZSBzdHJ0 b0l4IF9fc3RydG9JeAorI2RlZmluZSBzdHJ0b0l4TCBfX3N0cnRvSXhMCisjZGVmaW5lIHN0cnRv cmQgX19zdHJ0b3JkCisjZGVmaW5lIHN0cnRvcmRkIF9fc3RydG9yZGQKKyNkZWZpbmUgc3RydG9y ZiBfX3N0cnRvcmYKKyNkZWZpbmUgc3RydG9yUSBfX3N0cnRvclEKKyNkZWZpbmUgc3RydG9yeCBf X3N0cnRvcngKKyNkZWZpbmUgc3RydG9yeEwgX19zdHJ0b3J4TAorI2RlZmluZSBzdHJ0b2RJIF9f c3RydG9kSQorI2RlZmluZSBzdHJ0b3BkIF9fc3RydG9wZAorI2RlZmluZSBzdHJ0b3BkZCBfX3N0 cnRvcGRkCisjZGVmaW5lIHN0cnRvcGYgX19zdHJ0b3BmCisjZGVmaW5lIHN0cnRvcFEgX19zdHJ0 b3BRCisjZGVmaW5lIHN0cnRvcHggX19zdHJ0b3B4CisjZGVmaW5lIHN0cnRvcHhMIF9fc3RydG9w eEwKKworI2RlZmluZSBCYWxsb2MgX19CYWxsb2NfRDJBCisjZGVmaW5lIEJmcmVlIF9fQmZyZWVf RDJBCisjZGVmaW5lIFVMdG9RIF9fVUx0b1FfRDJBCisjZGVmaW5lIFVMdG9mIF9fVUx0b2ZfRDJB CisjZGVmaW5lIFVMdG9kIF9fVUx0b2RfRDJBCisjZGVmaW5lIFVMdG9kZCBfX1VMdG9kZF9EMkEK KyNkZWZpbmUgVUx0b3ggX19VTHRveF9EMkEKKyNkZWZpbmUgVUx0b3hMIF9fVUx0b3hMX0QyQQor I2RlZmluZSBhbnlfb24gX19hbnlfb25fRDJBCisjZGVmaW5lIGIyZCBfX2IyZF9EMkEKKyNkZWZp bmUgYmlndGVucyBfX2JpZ3RlbnNfRDJBCisjZGVmaW5lIGNtcCBfX2NtcF9EMkEKKyNkZWZpbmUg Y29weWJpdHMgX19jb3B5Yml0c19EMkEKKyNkZWZpbmUgZDJiIF9fZDJiX0QyQQorI2RlZmluZSBk ZWNyZW1lbnQgX19kZWNyZW1lbnRfRDJBCisjZGVmaW5lIGRpZmYgX19kaWZmX0QyQQorI2RlZmlu ZSBkdG9hX3Jlc3VsdCBfX2R0b2FfcmVzdWx0X0QyQQorI2RlZmluZSBnX19mbXQgX19nX19mbXRf RDJBCisjZGVmaW5lIGdldGhleCBfX2dldGhleF9EMkEKKyNkZWZpbmUgaGV4ZGlnIF9faGV4ZGln X0QyQQorI2RlZmluZSBoZXhuYW4gX19oZXhuYW5fRDJBCisjZGVmaW5lIGhpMGJpdHMoeCkgX19o aTBiaXRzX0QyQSgoVUxvbmcpKHgpKQorI2RlZmluZSBoaTBiaXRzX0QyQSBfX2hpMGJpdHNfRDJB CisjZGVmaW5lIGkyYiBfX2kyYl9EMkEKKyNkZWZpbmUgaW5jcmVtZW50IF9faW5jcmVtZW50X0Qy QQorI2RlZmluZSBsbzBiaXRzIF9fbG8wYml0c19EMkEKKyNkZWZpbmUgbHNoaWZ0IF9fbHNoaWZ0 X0QyQQorI2RlZmluZSBtYXRjaCBfX21hdGNoX0QyQQorI2RlZmluZSBtdWx0IF9fbXVsdF9EMkEK KyNkZWZpbmUgbXVsdGFkZCBfX211bHRhZGRfRDJBCisjZGVmaW5lIG5ydl9hbGxvYyBfX25ydl9h bGxvY19EMkEKKyNkZWZpbmUgcG93NW11bHQgX19wb3c1bXVsdF9EMkEKKyNkZWZpbmUgcXVvcmVt IF9fcXVvcmVtX0QyQQorI2RlZmluZSByYXRpbyBfX3JhdGlvX0QyQQorI2RlZmluZSByc2hpZnQg X19yc2hpZnRfRDJBCisjZGVmaW5lIHJ2X2FsbG9jIF9fcnZfYWxsb2NfRDJBCisjZGVmaW5lIHMy YiBfX3MyYl9EMkEKKyNkZWZpbmUgc2V0X29uZXMgX19zZXRfb25lc19EMkEKKyNkZWZpbmUgc3Ry Y3AgX19zdHJjcF9EMkEKKyNkZWZpbmUgc3RydG9JZyBfX3N0cnRvSWdfRDJBCisjZGVmaW5lIHN1 bHAgX19zdWxwX0QyQQorI2RlZmluZSBzdW0gX19zdW1fRDJBCisjZGVmaW5lIHRlbnMgX190ZW5z X0QyQQorI2RlZmluZSB0aW55dGVucyBfX3Rpbnl0ZW5zX0QyQQorI2RlZmluZSB0aW55dGVucyBf X3Rpbnl0ZW5zX0QyQQorI2RlZmluZSB0cmFpbHogX190cmFpbHpfRDJBCisjZGVmaW5lIHVscCBf X3VscF9EMkEKKworX19CRUdJTl9ISURERU5fREVDTFMKKyBleHRlcm4gY2hhciAqZHRvYV9yZXN1 bHQ7CisgZXh0ZXJuIENPTlNUIGRvdWJsZSBiaWd0ZW5zW10sIHRlbnNbXSwgdGlueXRlbnNbXTsK KyBleHRlcm4gdW5zaWduZWQgY2hhciBoZXhkaWdbXTsKKworIGV4dGVybiBCaWdpbnQgKkJhbGxv YyBBTlNJKChpbnQpKTsKKyBleHRlcm4gdm9pZCBCZnJlZSBBTlNJKChCaWdpbnQqKSk7CisgZXh0 ZXJuIHZvaWQgVUx0b2YgQU5TSSgoVUxvbmcqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVy biB2b2lkIFVMdG9kIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4g dm9pZCBVTHRvZGQgQU5TSSgoVUxvbmcqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVybiB2 b2lkIFVMdG9RIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4gdm9p ZCBVTHRveCBBTlNJKChVU2hvcnQqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVybiB2b2lk IFVMdG94TCBBTlNJKChVTG9uZyosIFVMb25nKiwgTG9uZywgaW50KSk7CisgZXh0ZXJuIFVMb25n IGFueV9vbiBBTlNJKChCaWdpbnQqLCBpbnQpKTsKKyBleHRlcm4gZG91YmxlIGIyZCBBTlNJKChC aWdpbnQqLCBpbnQqKSk7CisgZXh0ZXJuIGludCBjbXAgQU5TSSgoQmlnaW50KiwgQmlnaW50Kikp OworIGV4dGVybiB2b2lkIGNvcHliaXRzIEFOU0koKFVMb25nKiwgaW50LCBCaWdpbnQqKSk7Cisg ZXh0ZXJuIEJpZ2ludCAqZDJiIEFOU0koKGRvdWJsZSwgaW50KiwgaW50KikpOworIGV4dGVybiB2 b2lkIGRlY3JlbWVudCBBTlNJKChCaWdpbnQqKSk7CisgZXh0ZXJuIEJpZ2ludCAqZGlmZiBBTlNJ KChCaWdpbnQqLCBCaWdpbnQqKSk7CisgZXh0ZXJuIGNoYXIgKmdfX2ZtdCBBTlNJKChjaGFyKiwg Y2hhciosIGNoYXIqLCBpbnQsIFVMb25nLCBzaXplX3QpKTsKKyBleHRlcm4gaW50IGdldGhleCBB TlNJKChDT05TVCBjaGFyKiosIEZQSSosIExvbmcqLCBCaWdpbnQqKiwgaW50KSk7CisgZXh0ZXJu IHZvaWQgX19oZXhkaWdfaW5pdF9EMkEoVm9pZCk7CisgZXh0ZXJuIGludCBoZXhuYW4gQU5TSSgo Q09OU1QgY2hhcioqLCBGUEkqLCBVTG9uZyopKTsKKyBleHRlcm4gaW50IGhpMGJpdHNfRDJBIEFO U0koKFVMb25nKSk7CisgZXh0ZXJuIEJpZ2ludCAqaTJiIEFOU0koKGludCkpOworIGV4dGVybiBC aWdpbnQgKmluY3JlbWVudCBBTlNJKChCaWdpbnQqKSk7CisgZXh0ZXJuIGludCBsbzBiaXRzIEFO U0koKFVMb25nKikpOworIGV4dGVybiBCaWdpbnQgKmxzaGlmdCBBTlNJKChCaWdpbnQqLCBpbnQp KTsKKyBleHRlcm4gaW50IG1hdGNoIEFOU0koKENPTlNUIGNoYXIqKiwgY2hhciopKTsKKyBleHRl cm4gQmlnaW50ICptdWx0IEFOU0koKEJpZ2ludCosIEJpZ2ludCopKTsKKyBleHRlcm4gQmlnaW50 ICptdWx0YWRkIEFOU0koKEJpZ2ludCosIGludCwgaW50KSk7CisgZXh0ZXJuIGNoYXIgKm5ydl9h bGxvYyBBTlNJKChjaGFyKiwgY2hhciAqKiwgaW50KSk7CisgZXh0ZXJuIEJpZ2ludCAqcG93NW11 bHQgQU5TSSgoQmlnaW50KiwgaW50KSk7CisgZXh0ZXJuIGludCBxdW9yZW0gQU5TSSgoQmlnaW50 KiwgQmlnaW50KikpOworIGV4dGVybiBkb3VibGUgcmF0aW8gQU5TSSgoQmlnaW50KiwgQmlnaW50 KikpOworIGV4dGVybiB2b2lkIHJzaGlmdCBBTlNJKChCaWdpbnQqLCBpbnQpKTsKKyBleHRlcm4g Y2hhciAqcnZfYWxsb2MgQU5TSSgoaW50KSk7CisgZXh0ZXJuIEJpZ2ludCAqczJiIEFOU0koKENP TlNUIGNoYXIqLCBpbnQsIGludCwgVUxvbmcsIGludCkpOworIGV4dGVybiBCaWdpbnQgKnNldF9v bmVzIEFOU0koKEJpZ2ludCosIGludCkpOworIGV4dGVybiBjaGFyICpzdHJjcCBBTlNJKChjaGFy KiwgY29uc3QgY2hhciopKTsKKyBleHRlcm4gaW50IHN0cnRvSWcgQU5TSSgoQ09OU1QgY2hhcios IGNoYXIqKiwgRlBJKiwgTG9uZyosIEJpZ2ludCoqLCBpbnQqKSk7CisgZXh0ZXJuIEJpZ2ludCAq c3VtIEFOU0koKEJpZ2ludCosIEJpZ2ludCopKTsKKyBleHRlcm4gaW50IHRyYWlseiBBTlNJKChC aWdpbnQqKSk7CisgZXh0ZXJuIGRvdWJsZSB1bHAgQU5TSSgoVSopKTsKK19fRU5EX0hJRERFTl9E RUNMUworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorLyoKKyAqIE5BTl9XT1JEMCBh bmQgTkFOX1dPUkQxIGFyZSBvbmx5IHJlZmVyZW5jZWQgaW4gc3RydG9kLmMuICBQcmlvciB0bwor ICogMjAwNTAxMTUsIHRoZXkgdXNlZCB0byBiZSBoYXJkLXdpcmVkIGhlcmUgKHRvIDB4N2ZmODAw MDAgYW5kIDAsCisgKiByZXNwZWN0aXZlbHkpLCBidXQgbm93IGFyZSBkZXRlcm1pbmVkIGJ5IGNv bXBpbGluZyBhbmQgcnVubmluZworICogcW5hbi5jIHRvIGdlbmVyYXRlIGdkX3FuYW4uaCwgd2hp Y2ggc3BlY2lmaWVzIGRfUU5BTjAgYW5kIGRfUU5BTjEuCisgKiBGb3JtZXJseSBnZHRvYWltcC5o IHJlY29tbWVuZGVkIHN1cHBseWluZyBzdWl0YWJsZSAtRE5BTl9XT1JEMD0uLi4KKyAqIGFuZCAt RE5BTl9XT1JEMT0uLi4gIHZhbHVlcyBpZiBuZWNlc3NhcnkuICBUaGlzIHNob3VsZCBzdGlsbCB3 b3JrLgorICogKE9uIEhQIFNlcmllcyA3MDAvODAwIG1hY2hpbmVzLCAtRE5BTl9XT1JEMD0weDdm ZjQwMDAwIHdvcmtzLikKKyAqLworI2lmZGVmIElFRUVfQXJpdGgKKyNpZm5kZWYgTk9fSU5GTkFO X0NIRUNLCisjdW5kZWYgSU5GTkFOX0NIRUNLCisjZGVmaW5lIElORk5BTl9DSEVDSworI2VuZGlm CisjaWZkZWYgSUVFRV9NQzY4aworI2RlZmluZSBfMCAwCisjZGVmaW5lIF8xIDEKKyNpZm5kZWYg TkFOX1dPUkQwCisjZGVmaW5lIE5BTl9XT1JEMCBkX1FOQU4wCisjZW5kaWYKKyNpZm5kZWYgTkFO X1dPUkQxCisjZGVmaW5lIE5BTl9XT1JEMSBkX1FOQU4xCisjZW5kaWYKKyNlbHNlCisjZGVmaW5l IF8wIDEKKyNkZWZpbmUgXzEgMAorI2lmbmRlZiBOQU5fV09SRDAKKyNkZWZpbmUgTkFOX1dPUkQw IGRfUU5BTjEKKyNlbmRpZgorI2lmbmRlZiBOQU5fV09SRDEKKyNkZWZpbmUgTkFOX1dPUkQxIGRf UU5BTjAKKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI3VuZGVmIElORk5BTl9DSEVDSworI2VuZGlm CisKKyN1bmRlZiBTSQorI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKyNkZWZpbmUgU0kgMQorI2Vs c2UKKyNkZWZpbmUgU0kgMAorI2VuZGlmCisKKyNlbmRpZiAvKiBHRFRPQUlNUF9IX0lOQ0xVREVE ICovCmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9zdGRsaWIvbGR0b2EuYyBiL25ld2xpYi9saWJj L3N0ZGxpYi9sZHRvYS5jCmluZGV4IDI2YzYxOTQ4Yi4uZmJiZDNkMGIxIDEwMDY0NAotLS0gYS9u ZXdsaWIvbGliYy9zdGRsaWIvbGR0b2EuYworKysgYi9uZXdsaWIvbGliYy9zdGRsaWIvbGR0b2Eu YwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRsaWIu aD4KICNpbmNsdWRlICJtcHJlYy5oIgorI2luY2x1ZGUgImdkdG9hLmgiCiAKIC8qIFRoZXNlIGFy ZSB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIGVudHJpZXMuICovCiAvKiBsaW51eCBuYW1lOiAgbG9u ZyBkb3VibGUgX0lPX3N0cnRvbGQgKGNoYXIgKiwgY2hhciAqKik7ICovCkBAIC0yODE0LDYgKzI4 MTUsMTIgQEAgX2xkdG9hX3IgKHN0cnVjdCBfcmVlbnQgKnB0ciwgbG9uZyBkb3VibGUgZCwgaW50 IG1vZGUsIGludCBuZGlnaXRzLAogICAgICAgX1JFRU5UX01QX1JFU1VMVCAocHRyKSA9IDA7CiAg ICAgfQogCisgIC8qIFVzZSB0aGUgcmVzdWx0IG9mIGdkdG9hIGlmIHN1Y2Nlc3NmdWxsLiAqLwor ICBvdXRzdHIgPSBfX2xkdG9hICgmZCwgbW9kZSwgbmRpZ2l0cywgZGVjcHQsIHNpZ24sIHJ2ZSk7 CisgIC8qIElmIGl0IGZhaWxzLCBmYWxsYmFjayB0byBsZWdhY3kgbGR0b2EuICovCisgIGlmIChv dXRzdHIpCisgICAgcmV0dXJuIG91dHN0cjsKKwogI2lmIExEQkxfTUFOVF9ESUcgPT0gMjQKICAg ZTI0dG9lICgmZHUucGUsIGUsIGxkcCk7CiAjZWxpZiBMREJMX01BTlRfRElHID09IDUzCi0tIAoy LjMzLjAKCg== --Multipart=_Sun__28_Nov_2021_16_43_11_+0900_6L3dxPVpn+JM3J7t--