From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) by sourceware.org (Postfix) with ESMTPS id EA68C3858D3C for ; Tue, 12 Sep 2023 17:11:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EA68C3858D3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivosinc.com Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-54290603887so4240565a12.1 for ; Tue, 12 Sep 2023 10:11:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1694538674; x=1695143474; darn=gcc.gnu.org; h=in-reply-to:from:references:to:content-language:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=5idV+uFafnVnFJlBvV61uzvQDeeVM6IzvVy2FeuZGzk=; b=WqVEGxak1pvxkS61Qfd1WuXnQGQ7HbOIQeb/hv+zApPhAuezJD3FhuopSLmBl/S6HB 37mA74AXYNAvLpVF0kOWUSzbC4RN2Ak0qygmYjci7T/tZq1rzh2641puP2PbifMRFy5T mD/5EYbJqf+LUcHi80Lo8thomlog0vpll5icpocGzgOVsH5lI/jOrQQ8+JUior/heY+w 7teVhVgQ096ZsEMOyKO+ZH1JayyfIa2xrqc19OcDDfF30BWzBnw62GilpCP6w4h3a618 IfawBc3c43Q2Pfr3zH+m8CReHYU1+o2bNw5vtnH+bg+QXcx0TCn5eztwKMwXdo1VSaj+ LXLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694538674; x=1695143474; h=in-reply-to:from:references:to:content-language:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=5idV+uFafnVnFJlBvV61uzvQDeeVM6IzvVy2FeuZGzk=; b=IuslJ5joEv6y//MNRG5SW8QiVLjszIG8IQau13JqejJ8MAPWbNm66Vuz9HQ4Drm2XT zS5SPLeDnw3imrP3u/SofavIwsZKXejIs3a4MZLq5sKMUgAvQjYuEPldAwCqOXyj5w0c quavJtQL3kawe+qG3aKuXxni2Y2xqnboNZpaCzr7T9V45dq1uQuyfuQYJ/exHZdD712Q Kn0YE6pl+zy0I5DbLD65sKeDvk9DVV9t9lm9hthRiLMsX/zFnuZQkNjPFfzT1mrCcYp7 0I2VHK2ESQ6QDJl2nJPkiijzF7pAESUJa4bgldZoSdTq17VOtJJMU4qLnI1s6uc/H6Yo DJdg== X-Gm-Message-State: AOJu0YxiBUJda3o5z+2yWP/momfisN0Tc3btIUP2RLrl2CBGKbWlHDtb dWf4KYrPZH7hbhIDzOLa5QvtWA== X-Google-Smtp-Source: AGHT+IHfY5lgTEZemXAZO+tVG3icV1Y0bBVrgPBAM3D/nQ/cBeCS0rxK100wkF3BvSE6GQ5DRP5ELQ== X-Received: by 2002:a17:90a:130d:b0:271:af7b:7c5e with SMTP id h13-20020a17090a130d00b00271af7b7c5emr10864512pja.44.1694538673703; Tue, 12 Sep 2023 10:11:13 -0700 (PDT) Received: from [10.0.16.165] ([50.221.140.188]) by smtp.gmail.com with ESMTPSA id bt22-20020a17090af01600b002612150d958sm9504535pjb.16.2023.09.12.10.11.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 12 Sep 2023 10:11:13 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------BAGKepogUdifbb4VK0R78m6Y" Message-ID: <7683535c-6f0c-cce3-463b-46378c71c94a@rivosinc.com> Date: Tue, 12 Sep 2023 10:11:10 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.0 Subject: Re: RFC: RISC-V sign extension dead code elimination Content-Language: en-US To: Joern Rennecke , GCC Patches References: From: Vineet Gupta In-Reply-To: X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------BAGKepogUdifbb4VK0R78m6Y Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 8/29/23 08:40, Joern Rennecke wrote: > In the patch call we talked about sign extsnsion elimination, so I dug > up this patch set that I did a while ago. It is still lacking some > documentation and testing in a more recent base version; > I only adjusted the common.opt part context for the patch to apply. Attached is the updated patch - prev one fails to apply cleanly on trunk and also needs some adj for inverted_post_order_compute API change. Thx, -Vineet --------------BAGKepogUdifbb4VK0R78m6Y Content-Type: text/x-patch; charset=UTF-8; name="0001-Joerns-sign-extension-pass.patch" Content-Disposition: attachment; filename="0001-Joerns-sign-extension-pass.patch" Content-Transfer-Encoding: base64 RnJvbSAyNDZjYTlhNTcyZjQ5YzNlMmYyMDc2ZDVhODJkYmFhNWJiOWRlZjUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VybiBSZW5uZWNrZSA8am9lcm4ucmVubmVja2VA ZW1iZWNvc20uY29tPgpEYXRlOiBNb24sIDExIFNlcCAyMDIzIDE0OjEzOjU4IC0wNzAwClN1 YmplY3Q6IFtQQVRDSF0gRENFIGV4dHJhbmVvdXMgZXh0ZW5zaW9uIHBhc3MKCi0tLQogZ2Nj L01ha2VmaWxlLmluICAgICAgICAgICAgICB8ICAgMSArCiBnY2MvY29tbW9uLm9wdCAgICAg ICAgICAgICAgIHwgICA4ICsKIGdjYy9jb25maWcvcmlzY3YvYml0bWFuaXAubWQgfCAgMTQg KwogZ2NjL2RmLXNjYW4uY2MgICAgICAgICAgICAgICB8ICAgMyArLQogZ2NjL2RmLmggICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiBnY2MvZXh0LWRjZS5jYyAgICAgICAgICAgICAg IHwgNTQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBnY2MvcGFzc2Vz LmRlZiAgICAgICAgICAgICAgIHwgICAxICsKIGdjYy90cmVlLXBhc3MuaCAgICAgICAgICAg ICAgfCAgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCA1NzMgaW5zZXJ0aW9ucygrKSwgMiBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvZXh0LWRjZS5jYwoKZGlmZiAtLWdp dCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgppbmRleCA2ZDYwOGRiNGRk MjQuLmNjMTNkMTkwNGVkNyAxMDA2NDQKLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKyBiL2dj Yy9NYWtlZmlsZS5pbgpAQCAtMTQyOSw2ICsxNDI5LDcgQEAgT0JKUyA9IFwKIAlleHBsb3cu byBcCiAJZXhwbWVkLm8gXAogCWV4cHIubyBcCisJZXh0LWRjZS5vIFwKIAlmaWJvbmFjY2lf aGVhcC5vIFwKIAlmaWxlLXByZWZpeC1tYXAubyBcCiAJZmluYWwubyBcCmRpZmYgLS1naXQg YS9nY2MvY29tbW9uLm9wdCBiL2djYy9jb21tb24ub3B0CmluZGV4IGYxMzdhMWY4MWFjOC4u OGE1ZDNmZWNlNTgxIDEwMDY0NAotLS0gYS9nY2MvY29tbW9uLm9wdAorKysgYi9nY2MvY29t bW9uLm9wdApAQCAtMzcxNiw0ICszNzE2LDEyIEBAIGZpcGEtcmEKIENvbW1vbiBWYXIoZmxh Z19pcGFfcmEpIE9wdGltaXphdGlvbgogVXNlIGNhbGxlciBzYXZlIHJlZ2lzdGVyIGFjcm9z cyBjYWxscyBpZiBwb3NzaWJsZS4KIAorZmV4dC1kY2UKK0NvbW1vbiBWYXIoZmxhZ19leHRf ZGNlLCAxKSBPcHRpbWl6YXRpb24gSW5pdCgwKQorUGVyZm9ybSBkZWFkIGNvZGUgZWxpbWlu YXRpb24gb24gemVybyBhbmQgc2lnbiBleHRlbnNpb25zIHdpdGggc3BlY2lhbCBkYXRhZmxv dyBhbmFseXNpcy4KKworZmV4dC1kY2UtcHJlCitDb21tb24gVmFyKGZsYWdfZXh0X2RjZSwg MikKK1BlcmZvcm0gZGVhZCBjb2RlIGVsaW1pbmF0aW9uIG9uIHplcm8gYW5kIHNpZ24gZXh0 ZW5zaW9ucyB3aXRoIHNwZWNpYWwgZGF0YWZsb3cgYW5hbHlzaXMuICBJbnNlcnQgZXh0ZW5z aW9ucyBvbiBlZGdlcyBmb3IgcGFydGlhbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uLgorCiA7 IFRoaXMgY29tbWVudCBpcyB0byBlbnN1cmUgd2UgcmV0YWluIHRoZSBibGFuayBsaW5lIGFi b3ZlLgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9iaXRtYW5pcC5tZCBiL2djYy9j b25maWcvcmlzY3YvYml0bWFuaXAubWQKaW5kZXggNDMxYjMyOTIyMTM1Li5jMDNmMjBmNTk1 NDYgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvcmlzY3YvYml0bWFuaXAubWQKKysrIGIvZ2Nj L2NvbmZpZy9yaXNjdi9iaXRtYW5pcC5tZApAQCAtMjczLDYgKzI3MywyMCBAQAogICBbKHNl dF9hdHRyICJ0eXBlIiAiPGJpdG1hbmlwX2luc24+IikKICAgIChzZXRfYXR0ciAibW9kZSIg IkRJIildKQogCis7OyBDb21iaW5lIGhhcyBhIGRpZmZlcmVudCBpZGVhIGFib3V0IGNhbm9u aWNhbCBydGwuCis7OyBFeGFtcGxlOiBpbnQgZiAoaW50IGkpIHsgcmV0dXJuIChzaG9ydClp OyB9CisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqZXh0ZW5kaGlkaV9jb21iaW5lIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkoc2lnbl9l eHRlbmQ6REkKKwkgIChhc2hpZnRydDpTSQorCSAgICAoc3VicmVnOlNJIChhc2hpZnQ6REkg KG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCisJCQkJICAoY29uc3Rf aW50IDE2KSkgMCkKKwkgICAgKGNvbnN0X2ludCAxNikpKSldCisgICJUQVJHRVRfWkJCIgor ICAiIyIKKyAgIiYmIDEiCisgIFsoc2V0IChtYXRjaF9kdXAgMCkgKHNpZ25fZXh0ZW5kOkRJ IChzdWJyZWc6SEkgKG1hdGNoX2R1cCAxKSAwKSkpXSkKKwogKGRlZmluZV9pbnNuICIqemVy b19leHRlbmRoaTxHUFI6bW9kZT4yX2JpdG1hbmlwIgogICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIiKQogICAgICAgICAoemVyb19leHRl bmQ6R1BSIChtYXRjaF9vcGVyYW5kOkhJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAicixt IikpKV0KZGlmZiAtLWdpdCBhL2djYy9kZi1zY2FuLmNjIGIvZ2NjL2RmLXNjYW4uY2MKaW5k ZXggOTUxNTc0MDcyOGMzLi44NzcyOWFiMGY0NGQgMTAwNjQ0Ci0tLSBhL2djYy9kZi1zY2Fu LmNjCisrKyBiL2djYy9kZi1zY2FuLmNjCkBAIC03OCw3ICs3OCw2IEBAIHN0YXRpYyB2b2lk IGRmX2dldF9laF9ibG9ja19hcnRpZmljaWFsX3VzZXMgKGJpdG1hcCk7CiAKIHN0YXRpYyB2 b2lkIGRmX3JlY29yZF9lbnRyeV9ibG9ja19kZWZzIChiaXRtYXApOwogc3RhdGljIHZvaWQg ZGZfcmVjb3JkX2V4aXRfYmxvY2tfdXNlcyAoYml0bWFwKTsKLXN0YXRpYyB2b2lkIGRmX2dl dF9leGl0X2Jsb2NrX3VzZV9zZXQgKGJpdG1hcCk7CiBzdGF0aWMgdm9pZCBkZl9nZXRfZW50 cnlfYmxvY2tfZGVmX3NldCAoYml0bWFwKTsKIHN0YXRpYyB2b2lkIGRmX2dyb3dfcmVmX2lu Zm8gKHN0cnVjdCBkZl9yZWZfaW5mbyAqLCB1bnNpZ25lZCBpbnQpOwogc3RhdGljIHZvaWQg ZGZfcmVmX2NoYWluX2RlbGV0ZV9kdV9jaGFpbiAoZGZfcmVmKTsKQEAgLTM2NDIsNyArMzY0 MSw3IEBAIGRmX2VwaWxvZ3VlX3VzZXNfcCAodW5zaWduZWQgaW50IHJlZ25vKQogCiAvKiBT ZXQgdGhlIGJpdCBmb3IgcmVncyB0aGF0IGFyZSBjb25zaWRlcmVkIGJlaW5nIHVzZWQgYXQg dGhlIGV4aXQuICovCiAKLXN0YXRpYyB2b2lkCit2b2lkCiBkZl9nZXRfZXhpdF9ibG9ja191 c2Vfc2V0IChiaXRtYXAgZXhpdF9ibG9ja191c2VzKQogewogICB1bnNpZ25lZCBpbnQgaTsK ZGlmZiAtLWdpdCBhL2djYy9kZi5oIGIvZ2NjL2RmLmgKaW5kZXggNDAyNjU3YTcwNzZmLi5h YmNiYjA5NzczNDkgMTAwNjQ0Ci0tLSBhL2djYy9kZi5oCisrKyBiL2djYy9kZi5oCkBAIC0x MDkxLDYgKzEwOTEsNyBAQCBleHRlcm4gYm9vbCBkZl9lcGlsb2d1ZV91c2VzX3AgKHVuc2ln bmVkIGludCk7CiBleHRlcm4gdm9pZCBkZl9zZXRfcmVnc19ldmVyX2xpdmUgKHVuc2lnbmVk IGludCwgYm9vbCk7CiBleHRlcm4gdm9pZCBkZl9jb21wdXRlX3JlZ3NfZXZlcl9saXZlIChi b29sKTsKIGV4dGVybiB2b2lkIGRmX3NjYW5fdmVyaWZ5ICh2b2lkKTsKK2V4dGVybiB2b2lk IGRmX2dldF9leGl0X2Jsb2NrX3VzZV9zZXQgKGJpdG1hcCk7CiAKIAwKIC8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZ2NjL2V4dC1kY2UuY2MgYi9nY2MvZXh0LWRj ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMyODVlNjdj NTA5ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy9leHQtZGNlLmNjCkBAIC0wLDAgKzEsNTQ2 IEBACisvKiBSVEwgZGVhZCB6ZXJvL3NpZ24gZXh0ZW5zaW9uIChjb2RlKSBlbGltaW5hdGlv bi4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVy Cit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g Mywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lU SE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFp bHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJ TkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUg ImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgImJhY2tlbmQuaCIKKyNpbmNsdWRlICJydGwuaCIK KyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAibWVtbW9kZWwuaCIKKyNpbmNsdWRlICJp bnNuLWNvbmZpZy5oIgorI2luY2x1ZGUgImVtaXQtcnRsLmgiCisjaW5jbHVkZSAicmVjb2cu aCIKKyNpbmNsdWRlICJjZmdhbmFsLmgiCisjaW5jbHVkZSAidHJlZS1wYXNzLmgiCisjaW5j bHVkZSAiY2ZncnRsLmgiCisjaW5jbHVkZSAicnRsLWl0ZXIuaCIKKyNpbmNsdWRlICJkZi5o IgorCisvKiBXZSBjb25zaWRlciBmb3VyIGJpdCBncm91cHMgZm9yIGxpdmVuZXNzOgorICAg Yml0IDAuLjcgICAobGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSkKKyAgIGJpdCA4Li4xNSAgKHNl Y29uZCBsZWFzdCBzaWduaWZpY2FudCBieXRlKQorICAgYml0IDE2Li4zMQorICAgYml0IDMy Li5CSVRTX1BFUl9XT1JELTEgICovCisKK2JpdG1hcAorZXh0X2RjZV9wcm9jZXNzX2JiIChi YXNpY19ibG9jayBiYiwgYml0bWFwIGxpdmVub3csIGJvb2wgbW9kaWZ5KQoreworICBydHhf aW5zbiAqaW5zbjsKKworICBGT1JfQkJfSU5TTlNfUkVWRVJTRSAoYmIsIGluc24pCisgICAg eworICAgICAgc3VicnR4X2l0ZXJhdG9yOjphcnJheV90eXBlIGFycmF5OworCisgICAgICBp ZiAoIUlOU05fUCAoaW5zbikpCisJY29udGludWU7CisKKyAgICAgIGJpdG1hcCBsaXZlX3Rt cCA9IEJJVE1BUF9BTExPQyAoTlVMTCk7CisgICAgICBpbnQgc2Vlbl9mdXNhZ2UgPSAwOwor CisgICAgICAvKiBGaXJzdCwgcHJvY2VzcyB0aGUgc2V0cy4gICovCisgICAgICBmb3IgKHJ0 eCBwYXQgPSBQQVRURVJOIChpbnNuKTs7KQorCXsKKwkgIEZPUl9FQUNIX1NVQlJUWCAoaXRl ciwgYXJyYXksIHBhdCwgTk9OQ09OU1QpCisJICAgIHsKKwkgICAgICBjb25zdF9ydHggeCA9 ICppdGVyOworCSAgICAgIC8qIEFuIEVYUFJfTElTVCAoZnJvbSBjYWxsIGZ1c2FnZSkgZW5k cyBpbiBOVUxMX1JUWC4gICovCisJICAgICAgaWYgKHggPT0gTlVMTF9SVFgpCisJCWNvbnRp bnVlOworCSAgICAgIGlmIChHRVRfQ09ERSAoeCkgPT0gU0VUIHx8IEdFVF9DT0RFICh4KSA9 PSBDTE9CQkVSKQorCQl7CisJCSAgdW5zaWduZWQgYml0ID0gMDsKKwkJICB4ID0gU0VUX0RF U1QgKHgpOworCQkgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbWFzayA9IEdFVF9NT0RFX01B U0sgKEdFVF9NT0RFICh4KSk7CisJCSAgaWYgKEdFVF9DT0RFICh4KSA9PSBTVUJSRUcpCisJ CSAgICB7CisJCSAgICAgIGJpdCA9IFNVQlJFR19CWVRFICh4KS50b19jb25zdGFudCAoKSAq IEJJVFNfUEVSX1VOSVQ7CisJCSAgICAgIGlmIChXT1JEU19CSUdfRU5ESUFOKQorCQkJYml0 ID0gKEdFVF9NT0RFX0JJVFNJWkUgKEdFVF9NT0RFICh4KSkudG9fY29uc3RhbnQgKCkKKwkJ CSAgICAgICAtIEJJVFNfUEVSX1dPUkQgLSBiaXQpOworCQkgICAgICBtYXNrID0gR0VUX01P REVfTUFTSyAoR0VUX01PREUgKFNVQlJFR19SRUcgKHgpKSkgPDwgYml0OworCQkgICAgICBp ZiAoIW1hc2spCisJCQltYXNrID0gLTB4MTAwMDAwMDAwVUxMOworCQkgICAgICB4ID0gU1VC UkVHX1JFRyAoeCk7CisJCSAgICB9CisJCSAgZWxzZSBpZiAoR0VUX0NPREUgKHgpID09IFNU UklDVF9MT1dfUEFSVCkKKwkJICAgIHsKKwkJICAgICAgeCA9IFhFWFAgKHgsIDApOworCQkg ICAgfQorCQkgIGVsc2UgaWYgKEdFVF9DT0RFICh4KSA9PSBaRVJPX0VYVFJBQ1QpCisJCSAg ICB7CisJCSAgICAgICAvKiBJZiB3ZSBhcmUgbm90IHN1cmUgd2hhdCBpcyBiZWluZyBvdmVy d3JpdHRlbiwKKwkJCSAgYXNzdW1lIG5vdGhpbmcgaXMuICAqLworCQkgICAgICBpZiAoIUNP TlNUX0lOVF9QIChYRVhQICh4LCAxKSkKKwkJCSAgfHwgIUNPTlNUX0lOVF9QIChYRVhQICh4 LCAyKSkpCisJCQljb250aW51ZTsKKwkJICAgICAgbWFzayA9ICgxVUxMIDw8IElOVFZBTCAo WEVYUCAoeCwgMSkpKSAtIDE7CisJCSAgICAgIGJpdCA9IElOVFZBTCAoWEVYUCAoeCwgMikp OworCQkgICAgICBpZiAoQklUU19CSUdfRU5ESUFOKQorCQkJYml0ID0gKEdFVF9NT0RFX0JJ VFNJWkUgKEdFVF9NT0RFICh4KSkKKwkJCSAgICAgICAtIElOVFZBTCAoWEVYUCAoeCwgMSkp IC0gYml0KS50b19jb25zdGFudCAoKTsKKwkJICAgICAgeCA9IFhFWFAgKHgsIDApOworCQkg ICAgfQorCQkgIGlmIChSRUdfUCAoeCkpCisJCSAgICB7CisJCSAgICAgIEhPU1RfV0lERV9J TlQgcm4gPSBSRUdOTyAoeCk7CisJCSAgICAgIGZvciAoSE9TVF9XSURFX0lOVCBpID0gNCAq IHJuOyBpIDwgNCAqIHJuICsgNDsgaSsrKQorCQkJaWYgKGJpdG1hcF9iaXRfcCAobGl2ZW5v dywgaSkpCisJCQkgIGJpdG1hcF9zZXRfYml0IChsaXZlX3RtcCwgaSk7CisJCSAgICAgIGlu dCBzdGFydCA9IChiaXQgPT0gMCA/IDAgOiBiaXQgPT0gOCA/IDEKKwkJCQkgICA6IGJpdCA9 PSAxNiA/IDIgOiAzKTsKKwkJICAgICAgaW50IGVuZCA9ICgobWFzayAmIH4weGZmZmZmZmZm VUxMKSA/IDQKKwkJCQkgOiAobWFzayAmIDB4ZmZmZjAwMDBVTEwpID8gMworCQkJCSA6ICht YXNrICYgMHhmZjAwKSA/IDIgOiAxKTsKKwkJICAgICAgYml0bWFwX2NsZWFyX3JhbmdlIChs aXZlbm93LCA0ICogcm4gKyBzdGFydCwgZW5kIC0gc3RhcnQpOworCQkgICAgfQorCQkgIGVs c2UKKwkJICAgIGdjY19hc3NlcnQgKE1FTV9QICh4KSB8fCB4ID09IHBjX3J0eAorCQkJCXx8 IEdFVF9DT0RFICh4KSA9PSBTQ1JBVENIKTsKKwkJICBpdGVyLnNraXBfc3VicnR4ZXMgKCk7 CisJCX0KKwkgICAgICBlbHNlIGlmIChHRVRfQ09ERSAoeCkgPT0gQ09ORF9FWEVDKQorCQl7 CisJCSAgaXRlci5za2lwX3N1YnJ0eGVzICgpOworCQl9CisJICAgIH0KKwkgIGlmIChHRVRf Q09ERSAoaW5zbikgIT0gQ0FMTF9JTlNOIHx8IHNlZW5fZnVzYWdlID4gMCkKKwkgICAgYnJl YWs7CisJICBwYXQgPSBDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UgKGluc24pOworCSAgc2Vl bl9mdXNhZ2UrKzsKKwl9CisgICAgICAvKiBOb3csIHByb2Nlc3MgdGhlIHVzZXMuICAqLwor ICAgICAgaWYgKEpVTVBfUCAoaW5zbikgJiYgZmluZF9yZWdfbm90ZSAoaW5zbiwgUkVHX05P Tl9MT0NBTF9HT1RPLCBOVUxMX1JUWCkpCisJeworCSAgLyogVGhlIGZyYW1lIHB0ciBpcyB1 c2VkIGJ5IGEgbm9uLWxvY2FsIGdvdG8uICAqLworCSAgYml0bWFwX3NldF9yYW5nZSAobGl2 ZW5vdywgRlJBTUVfUE9JTlRFUl9SRUdOVU0gKiA0LCA0KTsKKwkgIGlmICghSEFSRF9GUkFN RV9QT0lOVEVSX0lTX0ZSQU1FX1BPSU5URVIpCisJICAgIGJpdG1hcF9zZXRfcmFuZ2UgKGxp dmVub3csIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gKiA0LCA0KTsKKwl9CisKKyAgICAg IGZvciAocnR4IHBhdCA9IFBBVFRFUk4gKGluc24pOzspCisJeworCSAgc3VicnR4X3Zhcl9p dGVyYXRvcjo6YXJyYXlfdHlwZSBhcnJheV92YXI7CisJICBGT1JfRUFDSF9TVUJSVFhfVkFS IChpdGVyLCBhcnJheV92YXIsIHBhdCwgTk9OQ09OU1QpCisJICAgIHsKKwkgICAgICBydHgg eCA9ICppdGVyOworCSAgICAgIC8qIEFuIEVYUFJfTElTVCAoZnJvbSBjYWxsIGZ1c2FnZSkg ZW5kcyBpbiBOVUxMX1JUWC4gICovCisJICAgICAgaWYgKHggPT0gTlVMTF9SVFgpCisJCWNv bnRpbnVlOworCSAgICAgIGVudW0gcnR4X2NvZGUgeGNvZGUgPSBHRVRfQ09ERSAoeCk7CisK KwkgICAgICBpZiAoR0VUX0NPREUgKHgpID09IFNFVCkKKwkJeworCQkgIGNvbnN0X3J0eCBk c3QgPSBTRVRfREVTVCAoeCk7CisJCSAgcnR4IHNyYyA9IFNFVF9TUkMgKHgpOworCQkgIGNv bnN0X3J0eCB5OworCQkgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYml0ID0gMDsKKwkJICBl bnVtIHJ0eF9jb2RlIGNvZGUgPSBHRVRfQ09ERSAoc3JjKTsKKwkJICBpZiAoR0VUX0NPREUg KGRzdCkgPT0gU1VCUkVHKQorCQkgICAgeworCQkgICAgICBiaXQgPSBTVUJSRUdfQllURSAo ZHN0KS50b19jb25zdGFudCAoKSAqIEJJVFNfUEVSX1VOSVQ7CisJCSAgICAgIGlmIChXT1JE U19CSUdfRU5ESUFOKQorCQkJYml0ID0gKEdFVF9NT0RFX0JJVFNJWkUgKEdFVF9NT0RFIChk c3QpKS50b19jb25zdGFudCAoKQorCQkJICAgICAgIC0gQklUU19QRVJfV09SRCAtIGJpdCk7 CisJCSAgICAgIGlmIChiaXQgPj0gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCkKKwkJCWJpdCA9 IEhPU1RfQklUU19QRVJfV0lERV9JTlQgLSAxOworCQkgICAgICBkc3QgPSBTVUJSRUdfUkVH IChkc3QpOworCQkgICAgfQorCQkgIGVsc2UgaWYgKEdFVF9DT0RFIChkc3QpID09IFpFUk9f RVhUUkFDVAorCQkJICAgfHwgR0VUX0NPREUgKGRzdCkgPT0gU1RSSUNUX0xPV19QQVJUKQor CQkgICAgZHN0ID0gWEVYUCAoZHN0LCAwKTsKKwkJICBpZiAoUkVHX1AgKGRzdCkKKwkJICAg ICAgJiYgKGNvZGUgPT0gUExVUyB8fCBjb2RlID09IE1JTlVTIHx8IGNvZGUgPT0gTVVMVAor CQkJICB8fCBjb2RlID09IEFTSElGVAorCQkJICB8fCBjb2RlID09IFpFUk9fRVhURU5EIHx8 IGNvZGUgPT0gU0lHTl9FWFRFTkQKKwkJCSAgfHwgY29kZSA9PSBBTkQgfHwgY29kZSA9PSBJ T1IgfHwgY29kZSA9PSBYT1IKKwkJCSAgfHwgY29kZSA9PSBSRUcKKwkJCSAgfHwgKGNvZGUg PT0gU1VCUkVHICYmIFJFR19QIChTVUJSRUdfUkVHIChzcmMpKSkpKQorCQkgICAgeworCQkg ICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIG1hc2tfYXJyYXlbXQorCQkJPSB7IDB4ZmYs IDB4ZmYwMCwgMHhmZmZmMDAwMFVMTCwgLTB4MTAwMDAwMDAwVUxMIH07CisJCSAgICAgIEhP U1RfV0lERV9JTlQgbWFzayA9IDA7CisJCSAgICAgIEhPU1RfV0lERV9JTlQgcm4gPSBSRUdO TyAoZHN0KTsKKwkJICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCisJCQlpZiAo Yml0bWFwX2JpdF9wIChsaXZlX3RtcCwgNCAqIHJuICsgaSkpCisJCQkgIG1hc2sgfD0gbWFz a19hcnJheVtpXTsKKwkJICAgICAgbWFzayA+Pj0gYml0OworCisJCSAgICAgIC8qID8/PyBD b3VsZCBhbHNvIGhhbmRsZSBaRVJPX0VYVFJBQ1QgLyBTSUdOX0VYVFJBQ1QKKwkJCSBvZiB0 aGUgc291cmNlIHNwZWNpYWxseSB0byBpbXByb3ZlIG9wdGltaXphdGlvbi4gICovCisKKwkJ ICAgICAgaWYgKGNvZGUgPT0gU0lHTl9FWFRFTkQgfHwgY29kZSA9PSBaRVJPX0VYVEVORCkK KwkJCXsKKwkJCSAgcnR4IGlubmVyID0gWEVYUCAoc3JjLCAwKTsKKwkJCSAgSE9TVF9XSURF X0lOVCBtYXNrMgorCQkJICAgID0gR0VUX01PREVfTUFTSyAoR0VUX01PREUgKGlubmVyKSk7 CisKKwkJCSAgLyogRGVsZXRlIGRlYWQgc2lnbiAvIHplcm8gZXh0ZW5zaW9ucy4gICovCisg ICAgICBpZiAoMCAmJiBtb2RpZnkpCit7CitkZWJ1Z19ydHgoaW5zbik7CitkZWJ1Z19iaXRt YXAgICAgIChsaXZlX3RtcCk7CisJZnByaW50ZiAoc3RkZXJyLCAibSAiIEhPU1RfV0lERV9J TlRfUFJJTlRfSEVYICIgbTIgIiBIT1NUX1dJREVfSU5UX1BSSU5UX0hFWCAiXG4iLCBtYXNr LCBtYXNrMik7Cit9CisJCQkgIGlmIChtb2RpZnkgJiYgKG1hc2sgJiB+bWFzazIpID09IDAp CisJCQkgICAgdmFsaWRhdGVfY2hhbmdlCisJCQkgICAgICAoaW5zbiwgJlNFVF9TUkMgKHgp LAorCQkJICAgICAgIHNpbXBsaWZ5X2dlbl9zdWJyZWcKKwkJCQkgKEdFVF9NT0RFIChzcmMp LCBpbm5lciwgR0VUX01PREUgKGlubmVyKSwgMCksCisJCQkgICAgICAgZmFsc2UpOworCisJ CQkgIG1hc2sgJj0gbWFzazI7CisJCQkgIHNyYyA9IFhFWFAgKHNyYywgMCk7CisJCQkgIGNv ZGUgPSBHRVRfQ09ERSAoc3JjKTsKKwkJCX0KKwkJICAgICAgaWYgKGNvZGUgPT0gUExVUyB8 fCBjb2RlID09IE1JTlVTIHx8IGNvZGUgPT0gTVVMVAorCQkJICB8fCBjb2RlID09IEFTSElG VCkKKwkJCW1hc2sgPSBtYXNrID8gKCgyVUxMIDw8IGZsb29yX2xvZzIgKG1hc2spKSAtIDEp IDogMDsKKwkJICAgICAgaWYgKEJJTkFSWV9QIChzcmMpKQorCQkJeSA9IFhFWFAgKHNyYywg MCk7CisJCSAgICAgIGVsc2UKKwkJCXkgPSBzcmM7CisJCSAgICAgIGZvciAoOzspCisJCQl7 CisJCQkgIGlmIChHRVRfQ09ERSAoeSkgPT0gU1VCUkVHKQorCQkJICAgIHsKKwkJCSAgICAg IGJpdCA9IChTVUJSRUdfQllURSAoeSkudG9fY29uc3RhbnQgKCkKKwkJCQkgICAgICogQklU U19QRVJfVU5JVCk7CisJCQkgICAgICBpZiAoV09SRFNfQklHX0VORElBTikKKwkJCQliaXQg PSAoR0VUX01PREVfQklUU0laRQorCQkJCQkoR0VUX01PREUgKHkpKS50b19jb25zdGFudCAo KQorCQkJCQkgLSBCSVRTX1BFUl9XT1JEIC0gYml0KTsKKwkJCSAgICAgIGlmIChtYXNrKQor CQkJCXsKKwkJCQkgIG1hc2sgPDw9IGJpdDsKKwkJCQkgIGlmICghbWFzaykKKwkJCQkgICAg bWFzayA9IC0weDEwMDAwMDAwMFVMTDsKKwkJCQl9CisJCQkgICAgICB5ID0gU1VCUkVHX1JF RyAoeSk7CisJCQkgICAgfQorCQkJICBpZiAoUkVHX1AgKHkpKQorCQkJICAgIHsKKwkJCSAg ICAgIHJuID0gNCAqIFJFR05PICh5KTsKKwkJCSAgICAgIGlmIChtYXNrICYgMHhmZikKKwkJ CQliaXRtYXBfc2V0X2JpdCAobGl2ZW5vdywgcm4pOworCQkJICAgICAgaWYgKG1hc2sgJiAw eGZmMDApCisJCQkJYml0bWFwX3NldF9iaXQgKGxpdmVub3csIHJuKzEpOworCQkJICAgICAg aWYgKG1hc2sgJiAweGZmZmYwMDAwVUxMKQorCQkJCWJpdG1hcF9zZXRfYml0IChsaXZlbm93 LCBybisyKTsKKwkJCSAgICAgIGlmIChtYXNrICYgLTB4MTAwMDAwMDAwVUxMKQorCQkJCWJp dG1hcF9zZXRfYml0IChsaXZlbm93LCBybiszKTsKKwkJCSAgICB9CisJCQkgIGVsc2UgaWYg KCFDT05TVEFOVF9QICh5KSkKKwkJCSAgICBicmVhazsKKwkJCSAgaWYgKCFCSU5BUllfUCAo c3JjKSkKKwkJCSAgICBicmVhazsKKwkJCSAgeSA9IFhFWFAgKHNyYywgMSksIHNyYyA9IHBj X3J0eDsKKwkJCX0KKwkJICAgICAgaWYgKFJFR19QICh5KSB8fCBDT05TVEFOVF9QICh5KSkK KwkJCWl0ZXIuc2tpcF9zdWJydHhlcyAoKTsKKwkJICAgIH0KKwkJICBlbHNlIGlmIChSRUdf UCAoZHN0KSkKKwkJICAgIGl0ZXIuc3Vic3RpdHV0ZSAoc3JjKTsKKwkJfQorCSAgICAgIGVs c2UgaWYgKHhjb2RlID09IFNVQlJFRworCQkgICAgICAgJiYgR0VUX01PREVfQklUU0laRSAo R0VUX01PREUgICh4KSkudG9fY29uc3RhbnQgKCkgPD0gMzIKKwkJICAgICAgICYmIFNVQlJF R19CWVRFICh4KS50b19jb25zdGFudCAoKSA9PSAwCisJCSAgICAgICAmJiBSRUdfUCAoU1VC UkVHX1JFRyAoeCkpKQorCQl7CisJCSAgSE9TVF9XSURFX0lOVCBzaXplCisJCSAgICA9IEdF VF9NT0RFX0JJVFNJWkUgKEdFVF9NT0RFICAoeCkpLnRvX2NvbnN0YW50ICgpOworCQkgIEhP U1RfV0lERV9JTlQgcm4gPSA0ICogUkVHTk8gKFNVQlJFR19SRUcgKHgpKTsKKwkJICBiaXRt YXBfc2V0X2JpdCAobGl2ZW5vdywgcm4pOworCQkgIGlmIChzaXplID4gOCkKKwkJICAgIGJp dG1hcF9zZXRfYml0IChsaXZlbm93LCBybisxKTsKKwkJICBpZiAoc2l6ZSA+IDE2KQorCQkg ICAgYml0bWFwX3NldF9iaXQgKGxpdmVub3csIHJuKzIpOworCQkgIGl0ZXIuc2tpcF9zdWJy dHhlcyAoKTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKFJFR19QICh4KSkKKwkJYml0bWFwX3Nl dF9yYW5nZSAobGl2ZW5vdywgUkVHTk8gKHgpICogNCwgNCk7CisJICAgICAgZWxzZSBpZiAo R0VUX0NPREUgKHgpID09IENMT0JCRVIpCisJCWNvbnRpbnVlOworCSAgICB9CisJICBpZiAo R0VUX0NPREUgKGluc24pICE9IENBTExfSU5TTiB8fCBzZWVuX2Z1c2FnZSA+IDEpCisJICAg IGJyZWFrOworCSAgcGF0ID0gQ0FMTF9JTlNOX0ZVTkNUSU9OX1VTQUdFIChpbnNuKTsKKwkg IHNlZW5fZnVzYWdlKys7CisJICBpZiAoIUZBS0VfQ0FMTF9QIChpbnNuKSkKKwkgICAgYml0 bWFwX3NldF9yYW5nZSAobGl2ZW5vdywgU1RBQ0tfUE9JTlRFUl9SRUdOVU0gKiA0LCA0KTsK KwkgIC8qIFVubGVzcyB0aGlzIGlzIGEgY2FsbCB0byBhIGNvbnN0IGZ1bmN0aW9uLCBpdCBj YW4gcmVhZCBhbnkKKwkgICAgIGdsb2JhbCByZWdpc3Rlci4gICovCisJICBpZiAoUlRMX0NP TlNUX0NBTExfUCAoaW5zbikpCisJICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGSVJT VF9QU0VVRE9fUkVHSVNURVI7IGkrKykKKwkgICAgICBpZiAoZ2xvYmFsX3JlZ3NbaV0pCisJ CWJpdG1hcF9zZXRfcmFuZ2UgKGxpdmVub3csIGkgKiA0LCA0KTsKKwl9CisgICAgICAvL0JJ VE1BUF9GUkVFIChsaXZlX3RtcCk7CisgICAgfQorICByZXR1cm4gbGl2ZW5vdzsKK30KKwor dm9pZAorZXh0X2RjZSAodm9pZCkKK3sKKyAgLyogUHJvcGVyIFBSRSBpcyBoYXJkLCBzbyBm b3Igbm93IGp1c3QgZXh0ZW5kIHJldHVybiB2YWx1ZXMgd2l0aG91dAorICAgIGNoZWNraW5n IGlmIHRoYXQnbGwgaGVscC4KKyAgICAoVG8gY2hlY2sgaWYgaXQnZCBoZWxwLCB3ZSdkIGhh dmUgdG8gZG8gYSBkYXRhZmxvdyBjb21wdXRhdGlvbiB0byBjaGVjaworICAgICBpZiBhIGhp Z2hwYXJ0IGNvbXB1dGVkIGZyb20gYW4gZXh0ZW5zaW9uIHRoYXQgY291bGQgYmUgY2hhbmdl ZCBpbnRvIGEKKyAgICAgbm8tb3AgbW92ZSByZWFjaGVzIHRoZSByZXR1cm4gdmFsdWUgY29w eS4pCisgICAgSWYgYSBmdW5jdGlvbiBpcyBpbmxpbmVkLCB0aGUgcmV0dXJuIHZhbHVlIHNo b3VsZCBhbHJlYWR5IGJlIHVzZWQKKyAgICBqdXN0IGluIHRoZSBtb2RlIG5lZWRlZCwgc28g bm9ybWFsIGV4dC1kY2Ugc2hvdWxkIHdvcmsganVzdCBmaW5lLiAgKi8KKyAgaWYgKGZsYWdf ZXh0X2RjZSA9PSAyKQorICAgIHsKKyAgICAgIGVkZ2VfaXRlcmF0b3IgZWk7CisgICAgICBl ZGdlIGU7CisgICAgICBydHhfaW5zbiAqaW5zbjsKKyAgICAgIGJvb2wgbmVlZF9jb21taXQg PSBmYWxzZTsKKworICAgICAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIEVYSVRfQkxPQ0tfUFRS X0ZPUl9GTiAoY2Z1biktPnByZWRzKQorCUZPUl9CQl9JTlNOUyAoZS0+c3JjLCBpbnNuKQor CSAgeworCSAgICBydHggc2V0ID0gc2luZ2xlX3NldCAoaW5zbik7CisJICAgIGlmICghc2V0 CisJCXx8ICFSRUdfUCAoU0VUX1NSQyAoc2V0KSkKKwkJfHwgIVJFR19QIChTRVRfREVTVCAo c2V0KSkpCisJICAgICAgY29udGludWU7CisJICAgIHRyZWUgZGVjbCA9IFJFR19FWFBSIChT RVRfU1JDIChzZXQpKTsKKwkgICAgaWYgKCFkZWNsIHx8IFRSRUVfQ09ERSAoZGVjbCkgIT0g UkVTVUxUX0RFQ0wKKwkJfHwgVFJFRV9DT0RFIChUUkVFX1RZUEUgKGRlY2wpKSAhPSBJTlRF R0VSX1RZUEUKKwkJfHwgbWF5YmVfZ2UgKFRZUEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKGRl Y2wpKSwKKwkJCSAgICAgR0VUX01PREVfQklUU0laRSAoR0VUX01PREUgKFNFVF9TUkMgKHNl dCkpKSkpCisJICAgICAgY29udGludWU7CisKKwkgICAgcnR4IGV4dCA9IGdlbl9ydHhfU1VC UkVHIChUWVBFX01PREUgKFRSRUVfVFlQRSAoZGVjbCkpLAorCQkJCSAgICAgIFNFVF9TUkMg KHNldCksIDApOworCSAgICBleHQgPSBnZW5fcnR4X2ZtdF9lICgoVFlQRV9VTlNJR05FRCAo VFJFRV9UWVBFIChkZWNsKSkKKwkJCQkgID8gWkVST19FWFRFTkQgOiBTSUdOX0VYVEVORCks CisJCQkJIEdFVF9NT0RFIChTRVRfREVTVCAoc2V0KSksIGV4dCk7CisKKwkgICAgLyogRmls dGVyIG91dCBhIHRyaXZpYWwgY2FzZSBvZiBhIHVzZWxlc3MgZXh0ZW5zaW9uOgorCSAgICAg ICBpZiB0aGUgcmVnaXN0ZXIgd2FzIGp1c3Qgc2V0IHRvIGEgY29uc3RhbnQgb3IgbWVtb3J5 IHZhbHVlLiAgKi8KKwkgICAgcnR4X2luc24gKnByZXYgPSBwcmV2X25vbm5vdGVfbm9uZGVi dWdfaW5zbiAoaW5zbik7CisJICAgIGlmICgoIXByZXYgfHwgTEFCRUxfUCAocHJldikpICYm ICFiYl9oYXNfYWJub3JtYWxfcHJlZCAoZS0+c3JjKSkKKwkgICAgICB7CisJCWVkZ2VfaXRl cmF0b3IgZWkyOworCQllZGdlIGUyOworCQlhdXRvX3ZlYzxlZGdlPiBsaXZlX3ByZWRzOwor CisJCUZPUl9FQUNIX0VER0UgKGUyLCBlaTIsIGUtPnNyYy0+cHJlZHMpCisJCSAgeworCQkg ICAgcHJldiA9IEJCX0VORCAoZTItPnNyYyk7CisJCSAgICBpZiAoTk9URV9QIChwcmV2KSB8 fCBERUJVR19JTlNOX1AgKHByZXYpKQorCQkgICAgICBwcmV2ID0gcHJldl9ub25ub3RlX25v bmRlYnVnX2luc24gKHByZXYpOworCQkgICAgcnR4IHByZXZfc2V0ID0gTlVMTF9SVFg7CisJ CSAgICBpZiAocHJldikKKwkJICAgICAgcHJldl9zZXQgPSBzaW5nbGVfc2V0IChwcmV2KTsK KwkJICAgIGlmIChwcmV2X3NldAorCQkJJiYgcnR4X2VxdWFsX3AgKFNFVF9ERVNUIChwcmV2 X3NldCksIFNFVF9TUkMgKHNldCkpCisJCQkmJiAoQ09OU1RBTlRfUCAoU0VUX1NSQyAocHJl dl9zZXQpKQorCQkJICAgIHx8IE1FTV9QIChTRVRfU1JDIChwcmV2KSkpKQorCQkgICAgICBj b250aW51ZTsKKwkJICAgIGxpdmVfcHJlZHMuc2FmZV9wdXNoIChlMik7CisJCSAgfQorCQlp ZiAoIWxpdmVfcHJlZHMubGVuZ3RoICgpKQorCQkgIGNvbnRpbnVlOworCisJCXN0YXJ0X3Nl cXVlbmNlICgpOworCQlydHhfaW5zbiAqZXh0X2luc24KKwkJICA9IGVtaXRfaW5zbiAoZ2Vu X3J0eF9TRVQgKFNFVF9TUkMgKHNldCksIGV4dCkpOworCQlpZiAocmVjb2cgKFBBVFRFUk4g KGV4dF9pbnNuKSwgZXh0X2luc24sIE5VTEwpIDwgMCkKKwkJICBleHRfaW5zbiA9IE5VTEw7 CisJCWVuZF9zZXF1ZW5jZSAoKTsKKworCQlpZiAoZXh0X2luc24KKwkJICAgICYmIGxpdmVf cHJlZHMubGVuZ3RoICgpIDwgRURHRV9DT1VOVCAoZS0+c3JjLT5wcmVkcykKKwkJICAgICYm IGZpbmRfcmVnbm9fbm90ZSAoaW5zbiwgUkVHX0RFQUQsIFJFR05PIChTRVRfU1JDIChzZXQp KSkpCisJCSAgeworCQkgICAgdW5zaWduZWQgaW50IGk7CisJCSAgICBGT1JfRUFDSF9WRUNf RUxUIChsaXZlX3ByZWRzLCBpLCBlMikKKwkJICAgICAgaW5zZXJ0X2luc25fb25fZWRnZSAo Y29weV9ydHggKFBBVFRFUk4gKGV4dF9pbnNuKSksIGUyKTsKKwkJICAgIG5lZWRfY29tbWl0 ID0gdHJ1ZTsKKwkJICAgIGNvbnRpbnVlOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UK KwkgICAgICB7CisJCXJ0eCBwcmV2X3NldCA9IE5VTExfUlRYOworCQlpZiAocHJldikKKwkJ ICBwcmV2X3NldCA9IHNpbmdsZV9zZXQgKHByZXYpOworCQlpZiAocHJldl9zZXQKKwkJICAg ICYmIHJ0eF9lcXVhbF9wIChTRVRfREVTVCAocHJldl9zZXQpLCBTRVRfU1JDIChzZXQpKQor CQkgICAgJiYgKENPTlNUQU5UX1AgKFNFVF9TUkMgKHByZXZfc2V0KSkKKwkJCXx8IE1FTV9Q IChTRVRfU1JDIChwcmV2KSkpKQorCQkgIGNvbnRpbnVlOworCSAgICAgIH0KKworCSAgICB2 YWxpZGF0ZV9jaGFuZ2UgKGluc24sICZTRVRfU1JDIChzZXQpLCBleHQsIGZhbHNlKTsKKwkg IH0KKyAgICAgIGlmIChuZWVkX2NvbW1pdCkKKwljb21taXRfZWRnZV9pbnNlcnRpb25zKCk7 CisgICAgfQorCisgIGJhc2ljX2Jsb2NrIGJiLCAqd29ya2xpc3QsICpxaW4sICpxb3V0LCAq cWVuZDsKKyAgdW5zaWduZWQgaW50IHFsZW47CisgIHZlYzxiaXRtYXBfaGVhZD4gbGl2ZWlu OworICBiaXRtYXAgbGl2ZW5vdzsKKworICBsaXZlaW4uY3JlYXRlIChsYXN0X2Jhc2ljX2Js b2NrX2Zvcl9mbiAoY2Z1bikpOworICBsaXZlaW4ucXVpY2tfZ3JvdyAobGFzdF9iYXNpY19i bG9ja19mb3JfZm4gKGNmdW4pKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBsYXN0X2Jhc2lj X2Jsb2NrX2Zvcl9mbiAoY2Z1bik7IGkrKykKKyAgICBiaXRtYXBfaW5pdGlhbGl6ZSAoJmxp dmVpbltpXSwgJmJpdG1hcF9kZWZhdWx0X29ic3RhY2spOworCisgIGF1dG9fYml0bWFwIHJl ZnMgKCZiaXRtYXBfZGVmYXVsdF9vYnN0YWNrKTsKKyAgZGZfZ2V0X2V4aXRfYmxvY2tfdXNl X3NldCAocmVmcyk7CisKKyAgdW5zaWduZWQgaTsKKyAgYml0bWFwX2l0ZXJhdG9yIGJpOwor ICBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAgKHJlZnMsIDAsIGksIGJpKQorICAgIHsKKyAg ICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorCWJpdG1hcF9zZXRfYml0ICgmbGl2 ZWluW0VYSVRfQkxPQ0tdLCBpICogNCArIGopOworICAgIH0KKworICBsaXZlbm93ID0gQklU TUFQX0FMTE9DIChOVUxMKTsKKworICB3b3JrbGlzdAorICAgID0gWE5FV1ZFQyAoYmFzaWNf YmxvY2ssIG5fYmFzaWNfYmxvY2tzX2Zvcl9mbiAoY2Z1bikgLSBOVU1fRklYRURfQkxPQ0tT KTsKKworICBpbnQgbW9kaWZ5ID0gMDsKKworICBkbworICAgIHsKKyAgICAgIHFpbiA9IHFv dXQgPSB3b3JrbGlzdDsKKworICAgICAgLyogUHV0IGV2ZXJ5IGJsb2NrIG9uIHRoZSB3b3Jr bGlzdC4gICovCisgICAgICBpbnQgKnJwbyA9IFhORVdWRUMgKGludCwgbl9iYXNpY19ibG9j a3NfZm9yX2ZuIChjZnVuKSk7CisgICAgICBpbnQgbiA9IGludmVydGVkX3Jldl9wb3N0X29y ZGVyX2NvbXB1dGUgKGNmdW4sIHJwbyk7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47 ICsraSkKKwl7CisJICBiYiA9IEJBU0lDX0JMT0NLX0ZPUl9GTiAoY2Z1biwgcnBvW2ldKTsK KwkgIGlmIChiYiA9PSBFWElUX0JMT0NLX1BUUl9GT1JfRk4gKGNmdW4pCisJICAgICAgfHwg YmIgPT0gRU5UUllfQkxPQ0tfUFRSX0ZPUl9GTiAoY2Z1bikpCisJICAgIGNvbnRpbnVlOwor CSAgKnFpbisrID0gYmI7CisJICBiYi0+YXV4ID0gYmI7CisJfQorICAgICAgZnJlZSAocnBv KTsKKworICAgICAgcWluID0gd29ya2xpc3Q7CisgICAgICBxZW5kID0gJndvcmtsaXN0W25f YmFzaWNfYmxvY2tzX2Zvcl9mbiAoY2Z1bikgLSBOVU1fRklYRURfQkxPQ0tTXTsKKyAgICAg IHFsZW4gPSBuX2Jhc2ljX2Jsb2Nrc19mb3JfZm4gKGNmdW4pIC0gTlVNX0ZJWEVEX0JMT0NL UzsKKworICAgICAgLyogSXRlcmF0ZSB1bnRpbCB0aGUgd29ya2xpc3QgaXMgZW1wdHkuICAq LworICAgICAgd2hpbGUgKHFsZW4pCisJeworCSAgLyogVGFrZSB0aGUgZmlyc3QgZW50cnkg b2ZmIHRoZSB3b3JrbGlzdC4gICovCisJICBiYiA9ICpxb3V0Kys7CisJICBxbGVuLS07CisK KwkgIGlmIChxb3V0ID49IHFlbmQpCisJICAgIHFvdXQgPSB3b3JrbGlzdDsKKworCSAgLyog Q2xlYXIgdGhlIGF1eCBmaWVsZCBvZiB0aGlzIGJsb2NrIHNvIHRoYXQgaXQgY2FuIGJlIGFk ZGVkIHRvCisJICAgICB0aGUgd29ya2xpc3QgYWdhaW4gaWYgbmVjZXNzYXJ5LiAgKi8KKwkg IGJiLT5hdXggPSBOVUxMOworCisJICBiaXRtYXBfY2xlYXIgKGxpdmVub3cpOworCSAgLyog TWFrZSBldmVyeXRoaW5nIGxpdmUgdGhhdCdzIGxpdmUgaW4gdGhlIHN1Y2Nlc3NvcnMuICAq LworCSAgZWRnZV9pdGVyYXRvciBlaTsKKwkgIGVkZ2UgZTsKKworCSAgRk9SX0VBQ0hfRURH RSAoZSwgZWksIGJiLT5zdWNjcykKKwkgICAgYml0bWFwX2lvcl9pbnRvIChsaXZlbm93LCAm bGl2ZWluW2UtPmRlc3QtPmluZGV4XSk7CisKKwkgIGxpdmVub3cgPSBleHRfZGNlX3Byb2Nl c3NfYmIgKGJiLCBsaXZlbm93LCBtb2RpZnkgPiAwKTsKKworCSAgaWYgKCFiaXRtYXBfZXF1 YWxfcCAoJmxpdmVpbltiYi0+aW5kZXhdLCBsaXZlbm93KSkKKwkgICAgeworCSAgICAgIGdj Y19hc3NlcnQgKCFtb2RpZnkpOworCSAgICAgIGJpdG1hcCB0bXAgPSBCSVRNQVBfQUxMT0Mg KE5VTEwpOworCSAgICAgIGdjY19hc3NlcnQgKCFiaXRtYXBfYW5kX2NvbXBsICh0bXAsICZs aXZlaW5bYmItPmluZGV4XSwgbGl2ZW5vdykpOworCisJICAgICAgYml0bWFwX2NvcHkgKCZs aXZlaW5bYmItPmluZGV4XSwgbGl2ZW5vdyk7CisKKwkgICAgICBlZGdlX2l0ZXJhdG9yIGVp OworCSAgICAgIGVkZ2UgZTsKKworCSAgICAgIEZPUl9FQUNIX0VER0UgKGUsIGVpLCBiYi0+ cHJlZHMpCisJCWlmICghZS0+c3JjLT5hdXggJiYgZS0+c3JjICE9IEVOVFJZX0JMT0NLX1BU Ul9GT1JfRk4gKGNmdW4pKQorCQkgIHsKKwkJICAgICpxaW4rKyA9IGUtPnNyYzsKKwkJICAg IGUtPnNyYy0+YXV4ID0gZTsKKwkJICAgIHFsZW4rKzsKKwkJICAgIGlmIChxaW4gPj0gcWVu ZCkKKwkJICAgICAgcWluID0gd29ya2xpc3Q7CisJCSAgfQorCSAgICB9CisJfQorICAgIH0g d2hpbGUgKCFtb2RpZnkrKyk7CisKKyAgLyogQ2xlYW4gdXAuICAqLworICBCSVRNQVBfRlJF RSAobGl2ZW5vdyk7CisgIHVuc2lnbmVkIGxlbiA9IGxpdmVpbi5sZW5ndGggKCk7CisgIGZv ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICBiaXRtYXBfY2xlYXIgKCZs aXZlaW5baV0pOworICBsaXZlaW4ucmVsZWFzZSAoKTsKKyAgY2xlYXJfYXV4X2Zvcl9ibG9j a3MgKCk7CisgIGZyZWUgKHdvcmtsaXN0KTsKK30KKworbmFtZXNwYWNlIHsKKworY29uc3Qg cGFzc19kYXRhIHBhc3NfZGF0YV9leHRfZGNlID0KK3sKKyAgUlRMX1BBU1MsIC8qIHR5cGUg Ki8KKyAgImV4dF9kY2UiLCAvKiBuYW1lICovCisgIE9QVEdST1VQX05PTkUsIC8qIG9wdGlu Zm9fZmxhZ3MgKi8KKyAgVFZfTk9ORSwgLyogdHZfaWQgKi8KKyAgUFJPUF9jZmdsYXlvdXQs IC8qIHByb3BlcnRpZXNfcmVxdWlyZWQgKi8KKyAgMCwgLyogcHJvcGVydGllc19wcm92aWRl ZCAqLworICAwLCAvKiBwcm9wZXJ0aWVzX2Rlc3Ryb3llZCAqLworICAwLCAvKiB0b2RvX2Zs YWdzX3N0YXJ0ICovCisgIFRPRE9fZGZfZmluaXNoLCAvKiB0b2RvX2ZsYWdzX2ZpbmlzaCAq LworfTsKKworY2xhc3MgcGFzc19leHRfZGNlIDogcHVibGljIHJ0bF9vcHRfcGFzcworewor cHVibGljOgorICBwYXNzX2V4dF9kY2UgKGdjYzo6Y29udGV4dCAqY3R4dCkKKyAgICA6IHJ0 bF9vcHRfcGFzcyAocGFzc19kYXRhX2V4dF9kY2UsIGN0eHQpCisgIHt9CisKKyAgLyogb3B0 X3Bhc3MgbWV0aG9kczogKi8KKyAgdmlydHVhbCBib29sIGdhdGUgKGZ1bmN0aW9uICopIHsg cmV0dXJuIGZsYWdfZXh0X2RjZSAhPSAwOyB9CisgIHZpcnR1YWwgdW5zaWduZWQgaW50IGV4 ZWN1dGUgKGZ1bmN0aW9uICopCisgICAgeworICAgICAgZXh0X2RjZSAoKTsKKyAgICAgIHJl dHVybiAwOworICAgIH0KKworfTsgLy8gY2xhc3MgcGFzc19jb21iaW5lCisKK30gLy8gYW5v biBuYW1lc3BhY2UKKworcnRsX29wdF9wYXNzICoKK21ha2VfcGFzc19leHRfZGNlIChnY2M6 OmNvbnRleHQgKmN0eHQpCit7CisgIHJldHVybiBuZXcgcGFzc19leHRfZGNlIChjdHh0KTsK K30KZGlmZiAtLWdpdCBhL2djYy9wYXNzZXMuZGVmIGIvZ2NjL3Bhc3Nlcy5kZWYKaW5kZXgg NDExMGE0NzI5MTRmLi41MjY1NWI1ZGRmZjMgMTAwNjQ0Ci0tLSBhL2djYy9wYXNzZXMuZGVm CisrKyBiL2djYy9wYXNzZXMuZGVmCkBAIC00ODYsNiArNDg2LDcgQEAgYWxvbmcgd2l0aCBH Q0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICAgICAgIE5FWFRfUEFT UyAocGFzc19pbmNfZGVjKTsKICAgICAgIE5FWFRfUEFTUyAocGFzc19pbml0aWFsaXplX3Jl Z3MpOwogICAgICAgTkVYVF9QQVNTIChwYXNzX3VkX3J0bF9kY2UpOworICAgICAgTkVYVF9Q QVNTIChwYXNzX2V4dF9kY2UpOwogICAgICAgTkVYVF9QQVNTIChwYXNzX2NvbWJpbmUpOwog ICAgICAgTkVYVF9QQVNTIChwYXNzX2lmX2FmdGVyX2NvbWJpbmUpOwogICAgICAgTkVYVF9Q QVNTIChwYXNzX2p1bXBfYWZ0ZXJfY29tYmluZSk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1w YXNzLmggYi9nY2MvdHJlZS1wYXNzLmgKaW5kZXggZWJhMmQ1NGFjNzY2Li41ZTVlNjY4NTQ2 ZWUgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXBhc3MuaAorKysgYi9nY2MvdHJlZS1wYXNzLmgK QEAgLTU5MCw2ICs1OTAsNyBAQCBleHRlcm4gcnRsX29wdF9wYXNzICptYWtlX3Bhc3NfcmVn aW5mb19pbml0IChnY2M6OmNvbnRleHQgKmN0eHQpOwogZXh0ZXJuIHJ0bF9vcHRfcGFzcyAq bWFrZV9wYXNzX2luY19kZWMgKGdjYzo6Y29udGV4dCAqY3R4dCk7CiBleHRlcm4gcnRsX29w dF9wYXNzICptYWtlX3Bhc3Nfc3RhY2tfcHRyX21vZCAoZ2NjOjpjb250ZXh0ICpjdHh0KTsK IGV4dGVybiBydGxfb3B0X3Bhc3MgKm1ha2VfcGFzc19pbml0aWFsaXplX3JlZ3MgKGdjYzo6 Y29udGV4dCAqY3R4dCk7CitleHRlcm4gcnRsX29wdF9wYXNzICptYWtlX3Bhc3NfZXh0X2Rj ZSAoZ2NjOjpjb250ZXh0ICpjdHh0KTsKIGV4dGVybiBydGxfb3B0X3Bhc3MgKm1ha2VfcGFz c19jb21iaW5lIChnY2M6OmNvbnRleHQgKmN0eHQpOwogZXh0ZXJuIHJ0bF9vcHRfcGFzcyAq bWFrZV9wYXNzX2lmX2FmdGVyX2NvbWJpbmUgKGdjYzo6Y29udGV4dCAqY3R4dCk7CiBleHRl cm4gcnRsX29wdF9wYXNzICptYWtlX3Bhc3NfanVtcF9hZnRlcl9jb21iaW5lIChnY2M6OmNv bnRleHQgKmN0eHQpOwotLSAKMi4zNC4xCgo= --------------BAGKepogUdifbb4VK0R78m6Y--