From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 221AFC2D0A3 for ; Fri, 30 Oct 2020 00:35:31 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 61DB420723 for ; Fri, 30 Oct 2020 00:35:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="S6n3vmbE" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 61DB420723 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:33006 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kYIO9-0002tn-76 for qemu-devel@archiver.kernel.org; Thu, 29 Oct 2020 20:35:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39150) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kYHyr-0004B4-Ur for qemu-devel@nongnu.org; Thu, 29 Oct 2020 20:09:22 -0400 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:54820) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kYHyk-0005RE-V0 for qemu-devel@nongnu.org; Thu, 29 Oct 2020 20:09:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1604016554; x=1635552554; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2SiyIb0r/rPj3jamrnzMVVaC7bZ/Y8rLmp2o+/1c6RU=; b=S6n3vmbEn3iSnGOXrvqLkrSClnbwKAVzYxJ44fqxYEYqOxfgIyUyjh5Z raWafIClbF9gm52cGZngWhpgAJ79wriV9gTGS0tXIJ419qzEA5Sg6c+9V mufgOWcbPEHaN9j8BoHLrn7jKP9KgaT1CbrBEyugFkdPL6NeieBAsEVnM w=; Received: from unknown (HELO ironmsg04-sd.qualcomm.com) ([10.53.140.144]) by alexa-out-sd-02.qualcomm.com with ESMTP; 29 Oct 2020 17:08:45 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg04-sd.qualcomm.com with ESMTP; 29 Oct 2020 17:08:45 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id B1D8F411F; Thu, 29 Oct 2020 19:08:44 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v5 17/33] Hexagon (target/hexagon/fma_emu.[ch]) utility functions Date: Thu, 29 Oct 2020 19:08:23 -0500 Message-Id: <1604016519-28065-18-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1604016519-28065-1-git-send-email-tsimpson@quicinc.com> References: <1604016519-28065-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.39; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-02.qualcomm.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/29 19:58:53 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ale@rev.ng, bcain@quicinc.com, richard.henderson@linaro.org, at.org@qualcomm.com, laurent@vivier.eu, tsimpson@quicinc.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" U2lnbmVkLW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0K IHRhcmdldC9oZXhhZ29uL2ZtYV9lbXUuaCB8ICAzMiArKysKIHRhcmdldC9oZXhhZ29uL2ZtYV9l bXUuYyB8IDcwNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMiBmaWxlcyBjaGFuZ2VkLCA3MzggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRhcmdldC9oZXhhZ29uL2ZtYV9lbXUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhh Z29uL2ZtYV9lbXUuYwoKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2ZtYV9lbXUuaCBiL3Rh cmdldC9oZXhhZ29uL2ZtYV9lbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li40NDAyZDYzCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZm1hX2VtdS5oCkBA IC0wLDAgKzEsMzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJ bm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBIRVhBR09OX0ZN QV9FTVVfSAorI2RlZmluZSBIRVhBR09OX0ZNQV9FTVVfSAorCitleHRlcm4gaW50MzJfdCBmbG9h dDY0X2dldGV4cChmbG9hdDY0IGY2NCk7CitleHRlcm4gaW50MzJfdCBmbG9hdDMyX2dldGV4cChm bG9hdDMyIGYzMik7CitleHRlcm4gZmxvYXQzMiBpbmZpbml0ZV9mbG9hdDMyKHVpbnQ4X3Qgc2ln bik7CitleHRlcm4gZmxvYXQzMiBpbnRlcm5hbF9mbWFmeChmbG9hdDMyIGEsIGZsb2F0MzIgYiwg ZmxvYXQzMiBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjYWxlLCBmbG9h dF9zdGF0dXMgKmZwX3N0YXR1cyk7CitleHRlcm4gZmxvYXQzMiBpbnRlcm5hbF9tcHlmKGZsb2F0 MzIgYSwgZmxvYXQzMiBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdF9zdGF0 dXMgKmZwX3N0YXR1cyk7CitleHRlcm4gZmxvYXQ2NCBpbnRlcm5hbF9tcHloaChmbG9hdDY0IGEs IGZsb2F0NjQgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgYWNjdW11bGF0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h dF9zdGF0dXMgKmZwX3N0YXR1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFn b24vZm1hX2VtdS5jIGIvdGFyZ2V0L2hleGFnb24vZm1hX2VtdS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjIzMThhNmUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4 YWdvbi9mbWFfZW11LmMKQEAgLTAsMCArMSw3MDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIw MTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy dmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK KyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKwor I2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2ludDEyOC5oIgorI2luY2x1 ZGUgImZwdS9zb2Z0ZmxvYXQuaCIKKyNpbmNsdWRlICJtYWNyb3MuaCIKKyNpbmNsdWRlICJjb252 X2VtdS5oIgorI2luY2x1ZGUgImZtYV9lbXUuaCIKKworI2RlZmluZSBERl9JTkZfRVhQICAgICAw eDdmZgorI2RlZmluZSBERl9CSUFTICAgICAgICAxMDIzCisjZGVmaW5lIERGX01BTlRCSVRTICAg IDUyCisjZGVmaW5lIERGX05BTiAgICAgICAgIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTAorI2RlZmlu ZSBERl9JTkYgICAgICAgICAweDdmZjAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgREZfTUlOVVNf SU5GICAgMHhmZmYwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIERGX01BWEYgICAgICAgIDB4N2Zl ZmZmZmZmZmZmZmZmZlVMTAorI2RlZmluZSBERl9NSU5VU19NQVhGICAweGZmZWZmZmZmZmZmZmZm ZmZVTEwKKworI2RlZmluZSBTRl9JTkZfRVhQICAgICAweGZmCisjZGVmaW5lIFNGX0JJQVMgICAg ICAgIDEyNworI2RlZmluZSBTRl9NQU5UQklUUyAgICAyMworI2RlZmluZSBTRl9JTkYgICAgICAg ICAweDdmODAwMDAwCisjZGVmaW5lIFNGX01JTlVTX0lORiAgIDB4ZmY4MDAwMDAKKyNkZWZpbmUg U0ZfTUFYRiAgICAgICAgMHg3ZjdmZmZmZgorI2RlZmluZSBTRl9NSU5VU19NQVhGICAweGZmN2Zm ZmZmCisKKyNkZWZpbmUgSEZfSU5GX0VYUCAweDFmCisjZGVmaW5lIEhGX0JJQVMgMTUKKworI2Rl ZmluZSBXQVlfQklHX0VYUCA0MDk2CisKK3R5cGVkZWYgdW5pb24geworICAgIGRvdWJsZSBmOwor ICAgIHVpbnQ2NF90IGk7CisgICAgc3RydWN0IHsKKyAgICAgICAgdWludDY0X3QgbWFudDo1MjsK KyAgICAgICAgdWludDY0X3QgZXhwOjExOworICAgICAgICB1aW50NjRfdCBzaWduOjE7CisgICAg fTsKK30gRG91YmxlOworCit0eXBlZGVmIHVuaW9uIHsKKyAgICBmbG9hdCBmOworICAgIHVpbnQz Ml90IGk7CisgICAgc3RydWN0IHsKKyAgICAgICAgdWludDMyX3QgbWFudDoyMzsKKyAgICAgICAg dWludDMyX3QgZXhwOjg7CisgICAgICAgIHVpbnQzMl90IHNpZ246MTsKKyAgICB9OworfSBGbG9h dDsKKworc3RhdGljIGlubGluZSB1aW50NjRfdCBmbG9hdDY0X2dldG1hbnQoZmxvYXQ2NCBmNjQp Cit7CisgICAgRG91YmxlIGEgPSB7IC5pID0gZjY0IH07CisgICAgaWYgKGZsb2F0NjRfaXNfbm9y bWFsKGY2NCkpIHsKKyAgICAgICAgcmV0dXJuIGEubWFudCB8IDFVTEwgPDwgNTI7CisgICAgfQor ICAgIGlmIChmbG9hdDY0X2lzX3plcm8oZjY0KSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9 CisgICAgaWYgKGZsb2F0NjRfaXNfZGVub3JtYWwoZjY0KSkgeworICAgICAgICByZXR1cm4gYS5t YW50OworICAgIH0KKyAgICByZXR1cm4gfjBVTEw7Cit9CisKK2ludDMyX3QgZmxvYXQ2NF9nZXRl eHAoZmxvYXQ2NCBmNjQpCit7CisgICAgRG91YmxlIGEgPSB7IC5pID0gZjY0IH07CisgICAgaWYg KGZsb2F0NjRfaXNfbm9ybWFsKGY2NCkpIHsKKyAgICAgICAgcmV0dXJuIGEuZXhwOworICAgIH0K KyAgICBpZiAoZmxvYXQ2NF9pc19kZW5vcm1hbChmNjQpKSB7CisgICAgICAgIHJldHVybiBhLmV4 cCArIDE7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRf dCBmbG9hdDMyX2dldG1hbnQoZmxvYXQzMiBmMzIpCit7CisgICAgRmxvYXQgYSA9IHsgLmkgPSBm MzIgfTsKKyAgICBpZiAoZmxvYXQzMl9pc19ub3JtYWwoZjMyKSkgeworICAgICAgICByZXR1cm4g YS5tYW50IHwgMVVMTCA8PCAyMzsKKyAgICB9CisgICAgaWYgKGZsb2F0MzJfaXNfemVybyhmMzIp KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoZmxvYXQzMl9pc19kZW5vcm1h bChmMzIpKSB7CisgICAgICAgIHJldHVybiBhLm1hbnQ7CisgICAgfQorICAgIHJldHVybiB+MFVM TDsKK30KKworaW50MzJfdCBmbG9hdDMyX2dldGV4cChmbG9hdDMyIGYzMikKK3sKKyAgICBGbG9h dCBhID0geyAuaSA9IGYzMiB9OworICAgIGlmIChmbG9hdDMyX2lzX25vcm1hbChmMzIpKSB7Cisg ICAgICAgIHJldHVybiBhLmV4cDsKKyAgICB9CisgICAgaWYgKGZsb2F0MzJfaXNfZGVub3JtYWwo ZjMyKSkgeworICAgICAgICByZXR1cm4gYS5leHAgKyAxOworICAgIH0KKyAgICByZXR1cm4gLTE7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaW50MTI4X2dldHcwKEludDEyOCB4KQorewor ICAgIHJldHVybiBpbnQxMjhfZ2V0bG8oeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qg aW50MTI4X2dldHcxKEludDEyOCB4KQoreworICAgIHJldHVybiBpbnQxMjhfZ2V0bG8oeCkgPj4g MzI7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50MTI4IGludDEyOF9tdWxfNjQ2NCh1aW50NjRfdCBh aSwgdWludDY0X3QgYmkpCit7CisgICAgSW50MTI4IGEsIGI7CisgICAgdWludDY0X3QgcHAwLCBw cDFhLCBwcDFiLCBwcDFzLCBwcDI7CisKKyAgICBhID0gaW50MTI4X21ha2U2NChhaSk7CisgICAg YiA9IGludDEyOF9tYWtlNjQoYmkpOworICAgIHBwMCA9ICh1aW50NjRfdClpbnQxMjhfZ2V0dzAo YSkgKiAodWludDY0X3QpaW50MTI4X2dldHcwKGIpOworICAgIHBwMWEgPSAodWludDY0X3QpaW50 MTI4X2dldHcxKGEpICogKHVpbnQ2NF90KWludDEyOF9nZXR3MChiKTsKKyAgICBwcDFiID0gKHVp bnQ2NF90KWludDEyOF9nZXR3MShiKSAqICh1aW50NjRfdClpbnQxMjhfZ2V0dzAoYSk7CisgICAg cHAyID0gKHVpbnQ2NF90KWludDEyOF9nZXR3MShhKSAqICh1aW50NjRfdClpbnQxMjhfZ2V0dzEo Yik7CisKKyAgICBwcDFzID0gcHAxYSArIHBwMWI7CisgICAgaWYgKChwcDFzIDwgcHAxYSkgfHwg KHBwMXMgPCBwcDFiKSkgeworICAgICAgICBwcDIgKz0gKDFVTEwgPDwgMzIpOworICAgIH0KKyAg ICB1aW50NjRfdCByZXRfbG93ID0gcHAwICsgKHBwMXMgPDwgMzIpOworICAgIGlmICgocmV0X2xv dyA8IHBwMCkgfHwgKHJldF9sb3cgPCAocHAxcyA8PCAzMikpKSB7CisgICAgICAgIHBwMiArPSAx OworICAgIH0KKworICAgIHJldHVybiBpbnQxMjhfbWFrZTEyOChyZXRfbG93LCBwcDIgKyAocHAx cyA+PiAzMikpOworfQorCitzdGF0aWMgaW5saW5lIEludDEyOCBpbnQxMjhfc3ViX2JvcnJvdyhJ bnQxMjggYSwgSW50MTI4IGIsIGludCBib3Jyb3cpCit7CisgICAgSW50MTI4IHJldCA9IGludDEy OF9zdWIoYSwgYik7CisgICAgaWYgKGJvcnJvdyAhPSAwKSB7CisgICAgICAgIHJldCA9IGludDEy OF9zdWIocmV0LCBpbnQxMjhfb25lKCkpOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCit0 eXBlZGVmIHN0cnVjdCB7CisgICAgSW50MTI4IG1hbnQ7CisgICAgaW50MzJfdCBleHA7CisgICAg dWludDhfdCBzaWduOworICAgIHVpbnQ4X3QgZ3VhcmQ7CisgICAgdWludDhfdCByb3VuZDsKKyAg ICB1aW50OF90IHN0aWNreTsKK30gQWNjdW07CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2N1bV9p bml0KEFjY3VtICpwKQoreworICAgIHAtPm1hbnQgPSBpbnQxMjhfemVybygpOworICAgIHAtPmV4 cCA9IDA7CisgICAgcC0+c2lnbiA9IDA7CisgICAgcC0+Z3VhcmQgPSAwOworICAgIHAtPnJvdW5k ID0gMDsKKyAgICBwLT5zdGlja3kgPSAwOworfQorCitzdGF0aWMgaW5saW5lIEFjY3VtIGFjY3Vt X25vcm1fbGVmdChBY2N1bSBhKQoreworICAgIGEuZXhwLS07CisgICAgYS5tYW50ID0gaW50MTI4 X2xzaGlmdChhLm1hbnQsIDEpOworICAgIGEubWFudCA9IGludDEyOF9vcihhLm1hbnQsIGludDEy OF9tYWtlNjQoYS5ndWFyZCkpOworICAgIGEuZ3VhcmQgPSBhLnJvdW5kOworICAgIGEucm91bmQg PSBhLnN0aWNreTsKKyAgICByZXR1cm4gYTsKK30KKworc3RhdGljIGlubGluZSBBY2N1bSBhY2N1 bV9ub3JtX3JpZ2h0KEFjY3VtIGEsIGludCBhbXQpCit7CisgICAgaWYgKGFtdCA+IDEzMCkgewor ICAgICAgICBhLnN0aWNreSB8PQorICAgICAgICAgICAgYS5yb3VuZCB8IGEuZ3VhcmQgfCBpbnQx MjhfbnooYS5tYW50KTsKKyAgICAgICAgYS5ndWFyZCA9IGEucm91bmQgPSAwOworICAgICAgICBh Lm1hbnQgPSBpbnQxMjhfemVybygpOworICAgICAgICBhLmV4cCArPSBhbXQ7CisgICAgICAgIHJl dHVybiBhOworCisgICAgfQorICAgIHdoaWxlIChhbXQgPj0gNjQpIHsKKyAgICAgICAgYS5zdGlj a3kgfD0gYS5yb3VuZCB8IGEuZ3VhcmQgfCAoaW50MTI4X2dldGxvKGEubWFudCkgIT0gMCk7Cisg ICAgICAgIGEuZ3VhcmQgPSAoaW50MTI4X2dldGxvKGEubWFudCkgPj4gNjMpICYgMTsKKyAgICAg ICAgYS5yb3VuZCA9IChpbnQxMjhfZ2V0bG8oYS5tYW50KSA+PiA2MikgJiAxOworICAgICAgICBh Lm1hbnQgPSBpbnQxMjhfbWFrZTY0KGludDEyOF9nZXRoaShhLm1hbnQpKTsKKyAgICAgICAgYS5l eHAgKz0gNjQ7CisgICAgICAgIGFtdCAtPSA2NDsKKyAgICB9CisgICAgd2hpbGUgKGFtdCA+IDAp IHsKKyAgICAgICAgYS5leHArKzsKKyAgICAgICAgYS5zdGlja3kgfD0gYS5yb3VuZDsKKyAgICAg ICAgYS5yb3VuZCA9IGEuZ3VhcmQ7CisgICAgICAgIGEuZ3VhcmQgPSBpbnQxMjhfZ2V0bG8oYS5t YW50KSAmIDE7CisgICAgICAgIGEubWFudCA9IGludDEyOF9yc2hpZnQoYS5tYW50LCAxKTsKKyAg ICAgICAgYW10LS07CisgICAgfQorICAgIHJldHVybiBhOworfQorCisvKgorICogT24gdGhlIGFk ZC9zdWIsIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzaGlmdCBvdXQgbG90cyBvZiBiaXRzLCBidXQg bmVlZCBhCisgKiBzdGlja3kgYml0IGZvciB3aGF0IHdhcyBzaGlmdGVkIG91dCwgSSB0aGluay4K KyAqLworc3RhdGljIEFjY3VtIGFjY3VtX2FkZChBY2N1bSBhLCBBY2N1bSBiKTsKKworc3RhdGlj IGlubGluZSBBY2N1bSBhY2N1bV9zdWIoQWNjdW0gYSwgQWNjdW0gYiwgaW50IG5lZ2F0ZSkKK3sK KyAgICBBY2N1bSByZXQ7CisgICAgYWNjdW1faW5pdCgmcmV0KTsKKyAgICBpbnQgYm9ycm93Owor CisgICAgaWYgKGEuc2lnbiAhPSBiLnNpZ24pIHsKKyAgICAgICAgYi5zaWduID0gIWIuc2lnbjsK KyAgICAgICAgcmV0dXJuIGFjY3VtX2FkZChhLCBiKTsKKyAgICB9CisgICAgaWYgKGIuZXhwID4g YS5leHApIHsKKyAgICAgICAgLyogc21hbGwgLSBiaWcgPT0gLSAoYmlnIC0gc21hbGwpICovCisg ICAgICAgIHJldHVybiBhY2N1bV9zdWIoYiwgYSwgIW5lZ2F0ZSk7CisgICAgfQorICAgIGlmICgo Yi5leHAgPT0gYS5leHApICYmIChpbnQxMjhfZ3QoYi5tYW50LCBhLm1hbnQpKSkgeworICAgICAg ICAvKiBzbWFsbCAtIGJpZyA9PSAtIChiaWcgLSBzbWFsbCkgKi8KKyAgICAgICAgcmV0dXJuIGFj Y3VtX3N1YihiLCBhLCAhbmVnYXRlKTsKKyAgICB9CisKKyAgICB3aGlsZSAoYS5leHAgPiBiLmV4 cCkgeworICAgICAgICAvKiBUcnkgdG8gbm9ybWFsaXplIGV4cG9uZW50czogc2hyaW5rIGEgZXhw b25lbnQgYW5kIGdyb3cgbWFudGlzc2EgKi8KKyAgICAgICAgaWYgKGludDEyOF9nZXRoaShhLm1h bnQpICYgKDFVTEwgPDwgNjIpKSB7CisgICAgICAgICAgICAvKiBDYW4ndCBncm93IGEgYW55IG1v cmUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg YSA9IGFjY3VtX25vcm1fbGVmdChhKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlIChh LmV4cCA+IGIuZXhwKSB7CisgICAgICAgIC8qIFRyeSB0byBub3JtYWxpemUgZXhwb25lbnRzOiBn cm93IGIgZXhwb25lbnQgYW5kIHNocmluayBtYW50aXNzYSAqLworICAgICAgICAvKiBLZWVwIGFy b3VuZCBzaGlmdGVkIG91dCBiaXRzLi4uIHdlIG1pZ2h0IG5lZWQgdGhvc2UgbGF0ZXIgKi8KKyAg ICAgICAgYiA9IGFjY3VtX25vcm1fcmlnaHQoYiwgYS5leHAgLSBiLmV4cCk7CisgICAgfQorCisg ICAgaWYgKChpbnQxMjhfZ3QoYi5tYW50LCBhLm1hbnQpKSkgeworICAgICAgICByZXR1cm4gYWNj dW1fc3ViKGIsIGEsICFuZWdhdGUpOworICAgIH0KKworICAgIC8qIE9LLCBub3cgdGhpbmdzIHNo b3VsZCBiZSBub3JtYWxpemVkISAqLworICAgIHJldC5zaWduID0gYS5zaWduOworICAgIHJldC5l eHAgPSBhLmV4cDsKKyAgICBhc3NlcnQoIWludDEyOF9ndChiLm1hbnQsIGEubWFudCkpOworICAg IGJvcnJvdyA9IChiLnJvdW5kIDw8IDIpIHwgKGIuZ3VhcmQgPDwgMSkgfCBiLnN0aWNreTsKKyAg ICByZXQubWFudCA9IGludDEyOF9zdWJfYm9ycm93KGEubWFudCwgYi5tYW50LCAoYm9ycm93ICE9 IDApKTsKKyAgICBib3Jyb3cgPSAwIC0gYm9ycm93OworICAgIHJldC5ndWFyZCA9IChib3Jyb3cg Pj4gMikgJiAxOworICAgIHJldC5yb3VuZCA9IChib3Jyb3cgPj4gMSkgJiAxOworICAgIHJldC5z dGlja3kgPSAoYm9ycm93ID4+IDApICYgMTsKKyAgICBpZiAobmVnYXRlKSB7CisgICAgICAgIHJl dC5zaWduID0gIXJldC5zaWduOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMg QWNjdW0gYWNjdW1fYWRkKEFjY3VtIGEsIEFjY3VtIGIpCit7CisgICAgQWNjdW0gcmV0OworICAg IGFjY3VtX2luaXQoJnJldCk7CisgICAgaWYgKGEuc2lnbiAhPSBiLnNpZ24pIHsKKyAgICAgICAg Yi5zaWduID0gIWIuc2lnbjsKKyAgICAgICAgcmV0dXJuIGFjY3VtX3N1YihhLCBiLCAwKTsKKyAg ICB9CisgICAgaWYgKGIuZXhwID4gYS5leHApIHsKKyAgICAgICAgLyogc21hbGwgKyBiaWcgPT0g IChiaWcgKyBzbWFsbCkgKi8KKyAgICAgICAgcmV0dXJuIGFjY3VtX2FkZChiLCBhKTsKKyAgICB9 CisgICAgaWYgKChiLmV4cCA9PSBhLmV4cCkgJiYgaW50MTI4X2d0KGIubWFudCwgYS5tYW50KSkg eworICAgICAgICAvKiBzbWFsbCArIGJpZyA9PSAgKGJpZyArIHNtYWxsKSAqLworICAgICAgICBy ZXR1cm4gYWNjdW1fYWRkKGIsIGEpOworICAgIH0KKworICAgIHdoaWxlIChhLmV4cCA+IGIuZXhw KSB7CisgICAgICAgIC8qIFRyeSB0byBub3JtYWxpemUgZXhwb25lbnRzOiBzaHJpbmsgYSBleHBv bmVudCBhbmQgZ3JvdyBtYW50aXNzYSAqLworICAgICAgICBpZiAoaW50MTI4X2dldGhpKGEubWFu dCkgJiAoMVVMTCA8PCA2MikpIHsKKyAgICAgICAgICAgIC8qIENhbid0IGdyb3cgYSBhbnkgbW9y ZSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh ID0gYWNjdW1fbm9ybV9sZWZ0KGEpOworICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKGEu ZXhwID4gYi5leHApIHsKKyAgICAgICAgLyogVHJ5IHRvIG5vcm1hbGl6ZSBleHBvbmVudHM6IGdy b3cgYiBleHBvbmVudCBhbmQgc2hyaW5rIG1hbnRpc3NhICovCisgICAgICAgIC8qIEtlZXAgYXJv dW5kIHNoaWZ0ZWQgb3V0IGJpdHMuLi4gd2UgbWlnaHQgbmVlZCB0aG9zZSBsYXRlciAqLworICAg ICAgICBiID0gYWNjdW1fbm9ybV9yaWdodChiLCBhLmV4cCAtIGIuZXhwKTsKKyAgICB9CisKKyAg ICAvKiBPSywgbm93IHRoaW5ncyBzaG91bGQgYmUgbm9ybWFsaXplZCEgKi8KKyAgICBpZiAoaW50 MTI4X2d0KGIubWFudCwgYS5tYW50KSkgeworICAgICAgICByZXR1cm4gYWNjdW1fYWRkKGIsIGEp OworICAgIH07CisgICAgcmV0LnNpZ24gPSBhLnNpZ247CisgICAgcmV0LmV4cCA9IGEuZXhwOwor ICAgIGFzc2VydCghaW50MTI4X2d0KGIubWFudCwgYS5tYW50KSk7CisgICAgcmV0Lm1hbnQgPSBp bnQxMjhfYWRkKGEubWFudCwgYi5tYW50KTsKKyAgICByZXQuZ3VhcmQgPSBiLmd1YXJkOworICAg IHJldC5yb3VuZCA9IGIucm91bmQ7CisgICAgcmV0LnN0aWNreSA9IGIuc3RpY2t5OworICAgIHJl dHVybiByZXQ7Cit9CisKKy8qIFJldHVybiBhbiBpbmZpbml0eSB3aXRoIHJlcXVlc3RlZCBzaWdu ICovCitzdGF0aWMgaW5saW5lIGZsb2F0NjQgaW5maW5pdGVfZmxvYXQ2NCh1aW50OF90IHNpZ24p Cit7CisgICAgaWYgKHNpZ24pIHsKKyAgICAgICAgcmV0dXJuIG1ha2VfZmxvYXQ2NChERl9NSU5V U19JTkYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBtYWtlX2Zsb2F0NjQoREZfSU5G KTsKKyAgICB9Cit9CisKKy8qIFJldHVybiBhIG1heGltdW0gZmluaXRlIHZhbHVlIHdpdGggcmVx dWVzdGVkIHNpZ24gKi8KK3N0YXRpYyBpbmxpbmUgZmxvYXQ2NCBtYXhmaW5pdGVfZmxvYXQ2NCh1 aW50OF90IHNpZ24pCit7CisgICAgaWYgKHNpZ24pIHsKKyAgICAgICAgcmV0dXJuIG1ha2VfZmxv YXQ2NChERl9NSU5VU19NQVhGKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbWFrZV9m bG9hdDY0KERGX01BWEYpOworICAgIH0KK30KKworLyogUmV0dXJuIGEgemVybyB2YWx1ZSB3aXRo IHJlcXVlc3RlZCBzaWduICovCitzdGF0aWMgaW5saW5lIGZsb2F0NjQgemVyb19mbG9hdDY0KHVp bnQ4X3Qgc2lnbikKK3sKKyAgICBpZiAoc2lnbikgeworICAgICAgICByZXR1cm4gbWFrZV9mbG9h dDY0KDB4ODAwMDAwMDAwMDAwMDAwMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZs b2F0NjRfemVybzsKKyAgICB9Cit9CisKKy8qIFJldHVybiBhbiBpbmZpbml0eSB3aXRoIHRoZSBy ZXF1ZXN0ZWQgc2lnbiAqLworZmxvYXQzMiBpbmZpbml0ZV9mbG9hdDMyKHVpbnQ4X3Qgc2lnbikK K3sKKyAgICBpZiAoc2lnbikgeworICAgICAgICByZXR1cm4gbWFrZV9mbG9hdDMyKFNGX01JTlVT X0lORik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIG1ha2VfZmxvYXQzMihTRl9JTkYp OworICAgIH0KK30KKworLyogUmV0dXJuIGEgbWF4aW11bSBmaW5pdGUgdmFsdWUgd2l0aCB0aGUg cmVxdWVzdGVkIHNpZ24gKi8KK3N0YXRpYyBpbmxpbmUgZmxvYXQzMiBtYXhmaW5pdGVfZmxvYXQz Mih1aW50OF90IHNpZ24pCit7CisgICAgaWYgKHNpZ24pIHsKKyAgICAgICAgcmV0dXJuIG1ha2Vf ZmxvYXQzMihTRl9NSU5VU19NQVhGKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbWFr ZV9mbG9hdDMyKFNGX01BWEYpOworICAgIH0KK30KKworLyogUmV0dXJuIGEgemVybyB2YWx1ZSB3 aXRoIHJlcXVlc3RlZCBzaWduICovCitzdGF0aWMgaW5saW5lIGZsb2F0MzIgemVyb19mbG9hdDMy KHVpbnQ4X3Qgc2lnbikKK3sKKyAgICBpZiAoc2lnbikgeworICAgICAgICByZXR1cm4gbWFrZV9m bG9hdDMyKDB4ODAwMDAwMDApOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmbG9hdDMy X3plcm87CisgICAgfQorfQorCisjZGVmaW5lIEdFTl9YRl9ST1VORChTVUZGSVgsIE1BTlRCSVRT LCBJTkZfRVhQLCBJTlRFUk5BTF9UWVBFKSBcCitzdGF0aWMgaW5saW5lIFNVRkZJWCBhY2N1bV9y b3VuZF8jI1NVRkZJWChBY2N1bSBhLCBmbG9hdF9zdGF0dXMgKiBmcF9zdGF0dXMpIFwKK3sgXAor ICAgIGlmICgoaW50MTI4X2dldGhpKGEubWFudCkgPT0gMCkgJiYgKGludDEyOF9nZXRsbyhhLm1h bnQpID09IDApIFwKKyAgICAgICAgJiYgKChhLmd1YXJkIHwgYS5yb3VuZCB8IGEuc3RpY2t5KSA9 PSAwKSkgeyBcCisgICAgICAgIC8qIHJlc3VsdCB6ZXJvICovIFwKKyAgICAgICAgc3dpdGNoIChm cF9zdGF0dXMtPmZsb2F0X3JvdW5kaW5nX21vZGUpIHsgXAorICAgICAgICBjYXNlIGZsb2F0X3Jv dW5kX2Rvd246IFwKKyAgICAgICAgICAgIHJldHVybiB6ZXJvXyMjU1VGRklYKDEpOyBcCisgICAg ICAgIGRlZmF1bHQ6IFwKKyAgICAgICAgICAgIHJldHVybiB6ZXJvXyMjU1VGRklYKDApOyBcCisg ICAgICAgIH0gXAorICAgIH0gXAorICAgIC8qIE5vcm1hbGl6ZSByaWdodCAqLyBcCisgICAgLyog V2Ugd2FudCBNQU5UQklUUyBiaXRzIG9mIG1hbnRpc3NhIHBsdXMgdGhlIGxlYWRpbmcgb25lLiAq LyBcCisgICAgLyogVGhhdCBtZWFucyB0aGF0IHdlIHdhbnQgTUFOVEJJVFMrMSBiaXRzLCBvciAw eDAwMDAwMDAwMDAwMEZGX0ZGRkYgKi8gXAorICAgIC8qIFNvIHdlIG5lZWQgdG8gbm9ybWFsaXpl IHJpZ2h0IHdoaWxlIHRoZSBoaWdoIHdvcmQgaXMgbm9uLXplcm8gYW5kIFwKKyAgICAqIHdoaWxl IHRoZSBsb3cgd29yZCBpcyBub256ZXJvIHdoZW4gbWFza2VkIHdpdGggMHhmZmUwXzAwMDBfMDAw MF8wMDAwICovIFwKKyAgICB3aGlsZSAoKGludDEyOF9nZXRoaShhLm1hbnQpICE9IDApIHx8IFwK KyAgICAgICAgICAgKChpbnQxMjhfZ2V0bG8oYS5tYW50KSA+PiAoTUFOVEJJVFMgKyAxKSkgIT0g MCkpIHsgXAorICAgICAgICBhID0gYWNjdW1fbm9ybV9yaWdodChhLCAxKTsgXAorICAgIH0gXAor ICAgIC8qIFwKKyAgICAgKiBPSywgbm93IG5vcm1hbGl6ZSBsZWZ0IFwKKyAgICAgKiBXZSB3YW50 IHRvIG5vcm1hbGl6ZSBsZWZ0IHVudGlsIHdlIGhhdmUgYSBsZWFkaW5nIG9uZSBpbiBiaXQgMjQg XAorICAgICAqIFRoZW9yZXRpY2FsbHksIHdlIG9ubHkgbmVlZCB0byBzaGlmdCBhIG1heGltdW0g b2Ygb25lIHRvIHRoZSBsZWZ0IGlmIHdlIFwKKyAgICAgKiBzaGlmdGVkIG91dCBsb3RzIG9mIGJp dHMgZnJvbSBCLCBvciBpZiB3ZSBoYWQgbm8gc2hpZnQgLyAxIHNoaWZ0IHN0aWNreSBcCisgICAg ICogc2hvdWRsIGJlIDAgIFwKKyAgICAgKi8gXAorICAgIHdoaWxlICgoaW50MTI4X2dldGxvKGEu bWFudCkgJiAoMVVMTCA8PCBNQU5UQklUUykpID09IDApIHsgXAorICAgICAgICBhID0gYWNjdW1f bm9ybV9sZWZ0KGEpOyBcCisgICAgfSBcCisgICAgLyogXAorICAgICAqIE9LLCBub3cgd2UgbWln aHQgbmVlZCB0byBkZW5vcm1hbGl6ZSBiZWNhdXNlIG9mIHBvdGVudGlhbCB1bmRlcmZsb3cuIFwK KyAgICAgKiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIHJvdW5kaW5nLCBhbmQgcm91bmRpbmcg bWlnaHQgbWFrZSB1cyBub3JtYWwgXAorICAgICAqIGFnYWluIFwKKyAgICAgKi8gXAorICAgIHdo aWxlIChhLmV4cCA8PSAwKSB7IFwKKyAgICAgICAgYSA9IGFjY3VtX25vcm1fcmlnaHQoYSwgMSAt IGEuZXhwKTsgXAorICAgICAgICAvKiBcCisgICAgICAgICAqIERvIHdlIGhhdmUgdW5kZXJmbG93 PyBcCisgICAgICAgICAqIFRoYXQncyB3aGVuIHdlIGdldCBhbiBpbmV4YWN0IGFuc3dlciBiZWNh dXNlIHdlIHJhbiBvdXQgb2YgYml0cyBcCisgICAgICAgICAqIGluIGEgZGVub3JtYWwuIFwKKyAg ICAgICAgICovIFwKKyAgICAgICAgaWYgKGEuZ3VhcmQgfHwgYS5yb3VuZCB8fCBhLnN0aWNreSkg eyBcCisgICAgICAgICAgICBmbG9hdF9yYWlzZShmbG9hdF9mbGFnX3VuZGVyZmxvdywgZnBfc3Rh dHVzKTsgXAorICAgICAgICB9IFwKKyAgICB9IFwKKyAgICAvKiBPSywgd2UncmUgcmVsYXRpdmVs eSBjYW5vbmljYWwuLi4gbm93IHdlIG5lZWQgdG8gcm91bmQgKi8gXAorICAgIGlmIChhLmd1YXJk IHx8IGEucm91bmQgfHwgYS5zdGlja3kpIHsgXAorICAgICAgICBmbG9hdF9yYWlzZShmbG9hdF9m bGFnX2luZXhhY3QsIGZwX3N0YXR1cyk7IFwKKyAgICAgICAgc3dpdGNoIChmcF9zdGF0dXMtPmZs b2F0X3JvdW5kaW5nX21vZGUpIHsgXAorICAgICAgICBjYXNlIGZsb2F0X3JvdW5kX3RvX3plcm86 IFwKKyAgICAgICAgICAgIC8qIENob3AgYW5kIHdlJ3JlIGRvbmUgKi8gXAorICAgICAgICAgICAg YnJlYWs7IFwKKyAgICAgICAgY2FzZSBmbG9hdF9yb3VuZF91cDogXAorICAgICAgICAgICAgaWYg KGEuc2lnbiA9PSAwKSB7IFwKKyAgICAgICAgICAgICAgICBhLm1hbnQgPSBpbnQxMjhfYWRkKGEu bWFudCwgaW50MTI4X29uZSgpKTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgICAgICBicmVh azsgXAorICAgICAgICBjYXNlIGZsb2F0X3JvdW5kX2Rvd246IFwKKyAgICAgICAgICAgIGlmIChh LnNpZ24gIT0gMCkgeyBcCisgICAgICAgICAgICAgICAgYS5tYW50ID0gaW50MTI4X2FkZChhLm1h bnQsIGludDEyOF9vbmUoKSk7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgYnJlYWs7 IFwKKyAgICAgICAgZGVmYXVsdDogXAorICAgICAgICAgICAgaWYgKGEucm91bmQgfHwgYS5zdGlj a3kpIHsgXAorICAgICAgICAgICAgICAgIC8qIHJvdW5kIHVwIGlmIGd1YXJkIGlzIDEsIGRvd24g aWYgZ3VhcmQgaXMgemVybyAqLyBcCisgICAgICAgICAgICAgICAgYS5tYW50ID0gaW50MTI4X2Fk ZChhLm1hbnQsIGludDEyOF9tYWtlNjQoYS5ndWFyZCkpOyBcCisgICAgICAgICAgICB9IGVsc2Ug aWYgKGEuZ3VhcmQpIHsgXAorICAgICAgICAgICAgICAgIC8qIGV4YWN0bHkgLjUsIHJvdW5kIHVw IGlmIG9kZCAqLyBcCisgICAgICAgICAgICAgICAgYS5tYW50ID0gaW50MTI4X2FkZChhLm1hbnQs IGludDEyOF9hbmQoYS5tYW50LCBpbnQxMjhfb25lKCkpKTsgXAorICAgICAgICAgICAgfSBcCisg ICAgICAgICAgICBicmVhazsgXAorICAgICAgICB9IFwKKyAgICB9IFwKKyAgICAvKiBcCisgICAg ICogT0ssIG5vdyB3ZSBtaWdodCBoYXZlIGNhcnJpZWQgYWxsIHRoZSB3YXkgdXAuIFwKKyAgICAg KiBTbyB3ZSBtaWdodCBuZWVkIHRvIHNociBvbmNlIFwKKyAgICAgKiBhdCBsZWFzdCB3ZSBrbm93 IHRoYXQgdGhlIGxzYiBzaG91bGQgYmUgemVybyBpZiB3ZSByb3VuZGVkIGFuZCBcCisgICAgICog Z290IGEgY2Fycnkgb3V0Li4uIFwKKyAgICAgKi8gXAorICAgIGlmICgoaW50MTI4X2dldGxvKGEu bWFudCkgPj4gKE1BTlRCSVRTICsgMSkpICE9IDApIHsgXAorICAgICAgICBhID0gYWNjdW1fbm9y bV9yaWdodChhLCAxKTsgXAorICAgIH0gXAorICAgIC8qIE92ZXJmbG93PyAqLyBcCisgICAgaWYg KGEuZXhwID49IElORl9FWFApIHsgXAorICAgICAgICAvKiBZZXAsIGluZiByZXN1bHQgKi8gXAor ICAgICAgICBmbG9hdF9yYWlzZShmbG9hdF9mbGFnX292ZXJmbG93LCBmcF9zdGF0dXMpOyBcCisg ICAgICAgIGZsb2F0X3JhaXNlKGZsb2F0X2ZsYWdfaW5leGFjdCwgZnBfc3RhdHVzKTsgXAorICAg ICAgICBzd2l0Y2ggKGZwX3N0YXR1cy0+ZmxvYXRfcm91bmRpbmdfbW9kZSkgeyBcCisgICAgICAg IGNhc2UgZmxvYXRfcm91bmRfdG9femVybzogXAorICAgICAgICAgICAgcmV0dXJuIG1heGZpbml0 ZV8jI1NVRkZJWChhLnNpZ24pOyBcCisgICAgICAgIGNhc2UgZmxvYXRfcm91bmRfdXA6IFwKKyAg ICAgICAgICAgIGlmIChhLnNpZ24gPT0gMCkgeyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIGlu ZmluaXRlXyMjU1VGRklYKGEuc2lnbik7IFwKKyAgICAgICAgICAgIH0gZWxzZSB7IFwKKyAgICAg ICAgICAgICAgICByZXR1cm4gbWF4ZmluaXRlXyMjU1VGRklYKGEuc2lnbik7IFwKKyAgICAgICAg ICAgIH0gXAorICAgICAgICBjYXNlIGZsb2F0X3JvdW5kX2Rvd246IFwKKyAgICAgICAgICAgIGlm IChhLnNpZ24gIT0gMCkgeyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIGluZmluaXRlXyMjU1VG RklYKGEuc2lnbik7IFwKKyAgICAgICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgICAgICBy ZXR1cm4gbWF4ZmluaXRlXyMjU1VGRklYKGEuc2lnbik7IFwKKyAgICAgICAgICAgIH0gXAorICAg ICAgICBkZWZhdWx0OiBcCisgICAgICAgICAgICByZXR1cm4gaW5maW5pdGVfIyNTVUZGSVgoYS5z aWduKTsgXAorICAgICAgICB9IFwKKyAgICB9IFwKKyAgICAvKiBVbmRlcmZsb3c/ICovIFwKKyAg ICBpZiAoaW50MTI4X2dldGxvKGEubWFudCkgJiAoMVVMTCA8PCBNQU5UQklUUykpIHsgXAorICAg ICAgICAvKiBMZWFkaW5nIG9uZSBtZWFuczogTm8sIHdlJ3JlIG5vcm1hbC4gU28sIHdlIHNob3Vs ZCBiZSBkb25lLi4uICovIFwKKyAgICAgICAgSU5URVJOQUxfVFlQRSByZXQ7IFwKKyAgICAgICAg cmV0LmkgPSAwOyBcCisgICAgICAgIHJldC5zaWduID0gYS5zaWduOyBcCisgICAgICAgIHJldC5l eHAgPSBhLmV4cDsgXAorICAgICAgICByZXQubWFudCA9IGludDEyOF9nZXRsbyhhLm1hbnQpOyBc CisgICAgICAgIHJldHVybiByZXQuaTsgXAorICAgIH0gXAorICAgIGFzc2VydChhLmV4cCA9PSAx KTsgXAorICAgIElOVEVSTkFMX1RZUEUgcmV0OyBcCisgICAgcmV0LmkgPSAwOyBcCisgICAgcmV0 LnNpZ24gPSBhLnNpZ247IFwKKyAgICByZXQuZXhwID0gMDsgXAorICAgIHJldC5tYW50ID0gaW50 MTI4X2dldGxvKGEubWFudCk7IFwKKyAgICByZXR1cm4gcmV0Lmk7IFwKK30KKworR0VOX1hGX1JP VU5EKGZsb2F0NjQsIERGX01BTlRCSVRTLCBERl9JTkZfRVhQLCBEb3VibGUpCitHRU5fWEZfUk9V TkQoZmxvYXQzMiwgU0ZfTUFOVEJJVFMsIFNGX0lORl9FWFAsIEZsb2F0KQorCitzdGF0aWMgYm9v bCBpc2Zpbml0ZShmbG9hdDY0IHgpCit7CisgICAgcmV0dXJuICFmbG9hdDY0X2lzX2FueV9uYW4o eCkgJiYgIWZsb2F0NjRfaXNfaW5maW5pdHkoeCk7Cit9CisKK3N0YXRpYyBib29sIGlzX2luZl9w cm9kKGZsb2F0NjQgYSwgZmxvYXQ2NCBiKQoreworICAgIHJldHVybiAoKGZsb2F0NjRfaXNfaW5m aW5pdHkoYSkgJiYgZmxvYXQ2NF9pc19pbmZpbml0eShiKSkgfHwKKyAgICAgICAgICAgIChmbG9h dDY0X2lzX2luZmluaXR5KGEpICYmIGlzZmluaXRlKGIpICYmICghZmxvYXQ2NF9pc196ZXJvKGIp KSkgfHwKKyAgICAgICAgICAgIChmbG9hdDY0X2lzX2luZmluaXR5KGIpICYmIGlzZmluaXRlKGEp ICYmIChmbG9hdDY0X2lzX3plcm8oYSkpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQ2NCBz cGVjaWFsX2ZtYShmbG9hdDY0IGEsIGZsb2F0NjQgYiwgZmxvYXQ2NCBjLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0X3N0YXR1cyAqZnBfc3RhdHVzKQoreworICAgIGZs b2F0NjQgcmV0ID0gbWFrZV9mbG9hdDY0KDApOworCisgICAgLyoKKyAgICAgKiBJZiBBIG11bHRp cGxpZWQgYnkgQiBpcyBhbiBleGFjdCBpbmZpbml0eSBhbmQgQyBpcyBhbHNvIGFuIGluZmluaXR5 CisgICAgICogYnV0IHdpdGggdGhlIG9wcG9zaXRlIHNpZ24sIEZNQSByZXR1cm5zIE5hTiBhbmQg cmFpc2VzIGludmFsaWQuCisgICAgICovCisgICAgdWludDhfdCBhX3NpZ24gPSBmbG9hdDY0X2lz X25lZyhhKTsKKyAgICB1aW50OF90IGJfc2lnbiA9IGZsb2F0NjRfaXNfbmVnKGIpOworICAgIHVp bnQ4X3QgY19zaWduID0gZmxvYXQ2NF9pc19uZWcoYyk7CisgICAgaWYgKGlzX2luZl9wcm9kKGEs IGIpICYmIGZsb2F0NjRfaXNfaW5maW5pdHkoYykpIHsKKyAgICAgICAgaWYgKChhX3NpZ24gXiBi X3NpZ24pICE9IGNfc2lnbikgeworICAgICAgICAgICAgcmV0ID0gbWFrZV9mbG9hdDY0KERGX05B Tik7CisgICAgICAgICAgICBmbG9hdF9yYWlzZShmbG9hdF9mbGFnX2ludmFsaWQsIGZwX3N0YXR1 cyk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQorICAgIGlmICgo ZmxvYXQ2NF9pc19pbmZpbml0eShhKSAmJiBmbG9hdDY0X2lzX3plcm8oYikpIHx8CisgICAgICAg IChmbG9hdDY0X2lzX3plcm8oYSkgJiYgZmxvYXQ2NF9pc19pbmZpbml0eShiKSkpIHsKKyAgICAg ICAgcmV0ID0gbWFrZV9mbG9hdDY0KERGX05BTik7CisgICAgICAgIGZsb2F0X3JhaXNlKGZsb2F0 X2ZsYWdfaW52YWxpZCwgZnBfc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9Cisg ICAgLyoKKyAgICAgKiBJZiBub25lIG9mIHRoZSBhYm92ZSBjaGVja3MgYXJlIHRydWUgYW5kIEMg aXMgYSBOYU4sCisgICAgICogYSBOYU4gc2hhbGwgYmUgcmV0dXJuZWQKKyAgICAgKiBJZiBBIG9y IEIgYXJlIE5hTiwgYSBOQU4gc2hhbGwgYmUgcmV0dXJuZWQuCisgICAgICovCisgICAgaWYgKGZs b2F0NjRfaXNfYW55X25hbihhKSB8fAorICAgICAgICBmbG9hdDY0X2lzX2FueV9uYW4oYikgfHwK KyAgICAgICAgZmxvYXQ2NF9pc19hbnlfbmFuKGMpKSB7CisgICAgICAgIGlmIChmbG9hdDY0X2lz X2FueV9uYW4oYSkgJiYgKGZHRVRCSVQoNTEsIGEpID09IDApKSB7CisgICAgICAgICAgICBmbG9h dF9yYWlzZShmbG9hdF9mbGFnX2ludmFsaWQsIGZwX3N0YXR1cyk7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGZsb2F0NjRfaXNfYW55X25hbihiKSAmJiAoZkdFVEJJVCg1MSwgYikgPT0gMCkpIHsK KyAgICAgICAgICAgIGZsb2F0X3JhaXNlKGZsb2F0X2ZsYWdfaW52YWxpZCwgZnBfc3RhdHVzKTsK KyAgICAgICAgfQorICAgICAgICBpZiAoZmxvYXQ2NF9pc19hbnlfbmFuKGMpICYmIChmR0VUQklU KDUxLCBjKSA9PSAwKSkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoZmxvYXRfZmxhZ19pbnZh bGlkLCBmcF9zdGF0dXMpOworICAgICAgICB9CisgICAgICAgIHJldCA9IG1ha2VfZmxvYXQ2NChE Rl9OQU4pOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICAvKgorICAgICAqIFdlIGhh dmUgY2hlY2tlZCBmb3IgYWRkaW5nIG9wcG9zaXRlLXNpZ25lZCBpbmZpbml0aWVzLgorICAgICAq IE90aGVyIGluZmluaXRpZXMgcmV0dXJuIGluZmluaXR5IHdpdGggdGhlIGNvcnJlY3Qgc2lnbgor ICAgICAqLworICAgIGlmIChmbG9hdDY0X2lzX2luZmluaXR5KGMpKSB7CisgICAgICAgIHJldCA9 IGluZmluaXRlX2Zsb2F0NjQoY19zaWduKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9Cisg ICAgaWYgKGZsb2F0NjRfaXNfaW5maW5pdHkoYSkgfHwgZmxvYXQ2NF9pc19pbmZpbml0eShiKSkg eworICAgICAgICByZXQgPSBpbmZpbml0ZV9mbG9hdDY0KGFfc2lnbiBeIGJfc2lnbik7CisgICAg ICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cit9CisK K3N0YXRpYyBpbmxpbmUgZmxvYXQzMiBzcGVjaWFsX2ZtYWYoZmxvYXQzMiBhLCBmbG9hdDMyIGIs IGZsb2F0MzIgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0X3N0YXR1 cyAqZnBfc3RhdHVzKQoreworICAgIGZsb2F0NjQgYWEsIGJiLCBjYzsKKyAgICBhYSA9IGZsb2F0 MzJfdG9fZmxvYXQ2NChhLCBmcF9zdGF0dXMpOworICAgIGJiID0gZmxvYXQzMl90b19mbG9hdDY0 KGIsIGZwX3N0YXR1cyk7CisgICAgY2MgPSBmbG9hdDMyX3RvX2Zsb2F0NjQoYywgZnBfc3RhdHVz KTsKKyAgICByZXR1cm4gZmxvYXQ2NF90b19mbG9hdDMyKHNwZWNpYWxfZm1hKGFhLCBiYiwgY2Ms IGZwX3N0YXR1cyksIGZwX3N0YXR1cyk7Cit9CisKK2Zsb2F0MzIgaW50ZXJuYWxfZm1hZngoZmxv YXQzMiBhLCBmbG9hdDMyIGIsIGZsb2F0MzIgYywgaW50IHNjYWxlLAorICAgICAgICAgICAgICAg ICAgICAgICBmbG9hdF9zdGF0dXMgKmZwX3N0YXR1cykKK3sKKyAgICBBY2N1bSBwcm9kOworICAg IEFjY3VtIGFjYzsKKyAgICBBY2N1bSByZXN1bHQ7CisgICAgYWNjdW1faW5pdCgmcHJvZCk7Cisg ICAgYWNjdW1faW5pdCgmYWNjKTsKKyAgICBhY2N1bV9pbml0KCZyZXN1bHQpOworCisgICAgdWlu dDhfdCBhX3NpZ24gPSBmbG9hdDMyX2lzX25lZyhhKTsKKyAgICB1aW50OF90IGJfc2lnbiA9IGZs b2F0MzJfaXNfbmVnKGIpOworICAgIHVpbnQ4X3QgY19zaWduID0gZmxvYXQzMl9pc19uZWcoYyk7 CisgICAgaWYgKGZsb2F0MzJfaXNfaW5maW5pdHkoYSkgfHwKKyAgICAgICAgZmxvYXQzMl9pc19p bmZpbml0eShiKSB8fAorICAgICAgICBmbG9hdDMyX2lzX2luZmluaXR5KGMpKSB7CisgICAgICAg IHJldHVybiBzcGVjaWFsX2ZtYWYoYSwgYiwgYywgZnBfc3RhdHVzKTsKKyAgICB9CisgICAgaWYg KGZsb2F0MzJfaXNfYW55X25hbihhKSB8fAorICAgICAgICBmbG9hdDMyX2lzX2FueV9uYW4oYikg fHwKKyAgICAgICAgZmxvYXQzMl9pc19hbnlfbmFuKGMpKSB7CisgICAgICAgIHJldHVybiBzcGVj aWFsX2ZtYWYoYSwgYiwgYywgZnBfc3RhdHVzKTsKKyAgICB9CisgICAgaWYgKChzY2FsZSA9PSAw KSAmJiAoZmxvYXQzMl9pc196ZXJvKGEpIHx8IGZsb2F0MzJfaXNfemVybyhiKSkpIHsKKyAgICAg ICAgZmxvYXQzMiB0bXAgPSBmbG9hdDMyX211bChhLCBiLCBmcF9zdGF0dXMpOworICAgICAgICB0 bXAgPSBmbG9hdDMyX2FkZCh0bXAsIGMsIGZwX3N0YXR1cyk7CisgICAgICAgIHJldHVybiB0bXA7 CisgICAgfQorCisgICAgLyogKGEgKiAyKipiKSAqIChjICogMioqZCkgPT0gYSpjICogMioqKGIr ZCkgKi8KKyAgICBwcm9kLm1hbnQgPSBpbnQxMjhfbXVsXzY0NjQoZmxvYXQzMl9nZXRtYW50KGEp LCBmbG9hdDMyX2dldG1hbnQoYikpOworCisgICAgLyoKKyAgICAgKiBOb3RlOiBleHRyYWN0aW5n IHRoZSBtYW50aXNzYSBpbnRvIGFuIGludCBpcyBtdWx0aXBseWluZyBieQorICAgICAqIDIqKjIz LCBzbyBhZGp1c3QgaGVyZQorICAgICAqLworICAgIHByb2QuZXhwID0gZmxvYXQzMl9nZXRleHAo YSkgKyBmbG9hdDMyX2dldGV4cChiKSAtIFNGX0JJQVMgLSAyMzsKKyAgICBwcm9kLnNpZ24gPSBh X3NpZ24gXiBiX3NpZ247CisgICAgaWYgKGZsb2F0MzJfaXNfemVybyhhKSB8fCBmbG9hdDMyX2lz X3plcm8oYikpIHsKKyAgICAgICAgcHJvZC5leHAgPSAtMiAqIFdBWV9CSUdfRVhQOworICAgIH0K KyAgICBpZiAoKHNjYWxlID4gMCkgJiYgZmxvYXQzMl9pc19kZW5vcm1hbChjKSkgeworICAgICAg ICBhY2MubWFudCA9IGludDEyOF9tdWxfNjQ2NCgwLCAwKTsKKyAgICAgICAgYWNjLmV4cCA9IC1X QVlfQklHX0VYUDsKKyAgICAgICAgYWNjLnNpZ24gPSBjX3NpZ247CisgICAgICAgIGFjYy5zdGlj a3kgPSAxOworICAgICAgICByZXN1bHQgPSBhY2N1bV9hZGQocHJvZCwgYWNjKTsKKyAgICB9IGVs c2UgaWYgKCFmbG9hdDMyX2lzX3plcm8oYykpIHsKKyAgICAgICAgYWNjLm1hbnQgPSBpbnQxMjhf bXVsXzY0NjQoZmxvYXQzMl9nZXRtYW50KGMpLCAxKTsKKyAgICAgICAgYWNjLmV4cCA9IGZsb2F0 MzJfZ2V0ZXhwKGMpOworICAgICAgICBhY2Muc2lnbiA9IGNfc2lnbjsKKyAgICAgICAgcmVzdWx0 ID0gYWNjdW1fYWRkKHByb2QsIGFjYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0g cHJvZDsKKyAgICB9CisgICAgcmVzdWx0LmV4cCArPSBzY2FsZTsKKyAgICByZXR1cm4gYWNjdW1f cm91bmRfZmxvYXQzMihyZXN1bHQsIGZwX3N0YXR1cyk7Cit9CisKK2Zsb2F0MzIgaW50ZXJuYWxf bXB5ZihmbG9hdDMyIGEsIGZsb2F0MzIgYiwgZmxvYXRfc3RhdHVzICpmcF9zdGF0dXMpCit7Cisg ICAgaWYgKGZsb2F0MzJfaXNfemVybyhhKSB8fCBmbG9hdDMyX2lzX3plcm8oYikpIHsKKyAgICAg ICAgcmV0dXJuIGZsb2F0MzJfbXVsKGEsIGIsIGZwX3N0YXR1cyk7CisgICAgfQorICAgIHJldHVy biBpbnRlcm5hbF9mbWFmeChhLCBiLCBmbG9hdDMyX3plcm8sIDAsIGZwX3N0YXR1cyk7Cit9CisK K2Zsb2F0NjQgaW50ZXJuYWxfbXB5aGgoZmxvYXQ2NCBhLCBmbG9hdDY0IGIsCisgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBhY2N1bXVsYXRlZCwKKyAgICAgICAg ICAgICAgICAgICAgICBmbG9hdF9zdGF0dXMgKmZwX3N0YXR1cykKK3sKKyAgICBBY2N1bSB4Owor ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgcHJvZDsKKyAgICB1bnNpZ25lZCBpbnQgc3RpY2t5 OworCisgICAgc3RpY2t5ID0gYWNjdW11bGF0ZWQgJiAxOworICAgIGFjY3VtdWxhdGVkID4+PSAx OworICAgIGFjY3VtX2luaXQoJngpOworICAgIGlmIChmbG9hdDY0X2lzX3plcm8oYSkgfHwKKyAg ICAgICAgZmxvYXQ2NF9pc19hbnlfbmFuKGEpIHx8CisgICAgICAgIGZsb2F0NjRfaXNfaW5maW5p dHkoYSkpIHsKKyAgICAgICAgcmV0dXJuIGZsb2F0NjRfbXVsKGEsIGIsIGZwX3N0YXR1cyk7Cisg ICAgfQorICAgIGlmIChmbG9hdDY0X2lzX3plcm8oYikgfHwKKyAgICAgICAgZmxvYXQ2NF9pc19h bnlfbmFuKGIpIHx8CisgICAgICAgIGZsb2F0NjRfaXNfaW5maW5pdHkoYikpIHsKKyAgICAgICAg cmV0dXJuIGZsb2F0NjRfbXVsKGEsIGIsIGZwX3N0YXR1cyk7CisgICAgfQorICAgIHgubWFudCA9 IGludDEyOF9tdWxfNjQ2NChhY2N1bXVsYXRlZCwgMSk7CisgICAgeC5zdGlja3kgPSBzdGlja3k7 CisgICAgcHJvZCA9IGZHRVRVV09SRCgxLCBmbG9hdDY0X2dldG1hbnQoYSkpICogZkdFVFVXT1JE KDEsIGZsb2F0NjRfZ2V0bWFudChiKSk7CisgICAgeC5tYW50ID0gaW50MTI4X2FkZCh4Lm1hbnQs IGludDEyOF9tdWxfNjQ2NChwcm9kLCAweDEwMDAwMDAwMFVMTCkpOworICAgIHguZXhwID0gZmxv YXQ2NF9nZXRleHAoYSkgKyBmbG9hdDY0X2dldGV4cChiKSAtIERGX0JJQVMgLSAyMDsKKyAgICBp ZiAoIWZsb2F0NjRfaXNfbm9ybWFsKGEpIHx8ICFmbG9hdDY0X2lzX25vcm1hbChiKSkgeworICAg ICAgICAvKiBjcnVzaCB0byBpbmV4YWN0IHplcm8gKi8KKyAgICAgICAgeC5zdGlja3kgPSAxOwor ICAgICAgICB4LmV4cCA9IC00MDk2OworICAgIH0KKyAgICB1aW50OF90IGFfc2lnbiA9IGZsb2F0 NjRfaXNfbmVnKGEpOworICAgIHVpbnQ4X3QgYl9zaWduID0gZmxvYXQ2NF9pc19uZWcoYik7Cisg ICAgeC5zaWduID0gYV9zaWduIF4gYl9zaWduOworICAgIHJldHVybiBhY2N1bV9yb3VuZF9mbG9h dDY0KHgsIGZwX3N0YXR1cyk7Cit9Ci0tIAoyLjcuNAoK