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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 A1387C433E0 for ; Fri, 8 Jan 2021 05:01:49 +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 D54D322E02 for ; Fri, 8 Jan 2021 05:01:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D54D322E02 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]:36392 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kxjuF-0004Ji-Rz for qemu-devel@archiver.kernel.org; Fri, 08 Jan 2021 00:01:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52262) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kxjP9-0007PM-CY for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:29:40 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:25188) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kxjP4-00059i-PU for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:29:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1610080174; x=1641616174; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=UhjV0r3e7nIeUbW225cudNMynRWdL7+RRLLzvw1IUBU=; b=FVzdQ4qUuFYzd5gI/27/kpk+QK9IjSORgfuWQ4cy8LTsFpoTTX7l7Yhp nTvuCq6Ovy8fjFEVR4k8qW0YDMA9RIvTT9TFVT4pWu4s2aRA4MehUW/LX nswydW25uOrfvbOlzkeWHNb8BvFvPj8fzbUY+nA81Tv2AejRwdIObtWdu o=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 07 Jan 2021 20:29:13 -0800 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 07 Jan 2021 20:29:13 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id E5A9F13D7; Thu, 7 Jan 2021 22:29:12 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v6 13/35] Hexagon (target/hexagon) instruction/packet decode Date: Thu, 7 Jan 2021 22:28:44 -0600 Message-Id: <1610080146-14968-14-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1610080146-14968-1-git-send-email-tsimpson@quicinc.com> References: <1610080146-14968-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.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com 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.248, 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, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGFrZSB0aGUgd29yZHMgZnJvbSBpbnN0cnVjdGlvbiBtZW1vcnkgYW5kIGJ1aWxkIGEgcGFja2V0 X3QgZm9yIFRDRyBjb2RlCmdlbmVyYXRpb24KClRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUg cGVyZm9ybWVkCiAgICBDb252ZXJ0IHRoZSAubmV3IGVuY29kZWQgb2Zmc2V0IHRvIHRoZSByZWdp c3RlciBudW1iZXIgb2YgdGhlIHByb2R1Y2VyCiAgICBSZW9yZGVyIHRoZSBwYWNrZXQgc28gLm5l dyBwcm9kdWNlciBpcyBiZWZvcmUgY29uc3VtZXIKICAgIEFwcGx5IGNvbnN0YW50IGV4dGVuZGVy cwogICAgU2VwYXJhdGUgc3ViaW5zbidzIGludG8gdHdvIGluc3RydWN0aW9ucwogICAgQnJlYWsg Y29tcGFyZS1qdW1wcyBpbnRvIHR3byBpbnN0cnVjdGlvbnMKICAgIENyZWF0ZSBpbnN0cnVjdGlv bnMgZm9yIDplbmRsb29wCgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25A cXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vZGVjb2RlLmggICAgIHwgIDMyICsrKwog dGFyZ2V0L2hleGFnb24vZGVjb2RlLmMgICAgIHwgNTgxICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9xNnZfZGVjb2RlLmMgfCAzODUg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgOTk4IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi9kZWNvZGUuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL2RlY29kZS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgdGFyZ2V0L2hleGFnb24vcTZ2X2RlY29kZS5jCgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFn b24vZGVjb2RlLmggYi90YXJnZXQvaGV4YWdvbi9kZWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4zOGY1OTdjCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFn b24vZGVjb2RlLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0y MDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICog IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZu ZGVmIEhFWEFHT05fREVDT0RFX0gKKyNkZWZpbmUgSEVYQUdPTl9ERUNPREVfSAorCisjaW5jbHVk ZSAiY3B1LmgiCisjaW5jbHVkZSAib3Bjb2Rlcy5oIgorI2luY2x1ZGUgImluc24uaCIKKworZXh0 ZXJuIHZvaWQgZGVjb2RlX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIGRlY29kZV9zZW5kX2lu c25fdG8oUGFja2V0ICpwYWNrZXQsIGludCBzdGFydCwgaW50IG5ld2xvYyk7CisKK2V4dGVybiBp bnQgZGVjb2RlX3BhY2tldChpbnQgbWF4X3dvcmRzLCBjb25zdCB1aW50MzJfdCAqd29yZHMsIFBh Y2tldCAqcGt0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGlzYXNfb25seSk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMgYi90YXJnZXQvaGV4 YWdvbi9kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmM2NjFj Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMKQEAgLTAsMCArMSw1 ODEgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9u IENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNp bmNsdWRlICJxZW11L2xvZy5oIgorI2luY2x1ZGUgImljbGFzcy5oIgorI2luY2x1ZGUgIm9wY29k ZXMuaCIKKyNpbmNsdWRlICJnZW5wdHIuaCIKKyNpbmNsdWRlICJkZWNvZGUuaCIKKyNpbmNsdWRl ICJpbnNuLmgiCisjaW5jbHVkZSAicHJpbnRpbnNuLmgiCisKKyNkZWZpbmUgZlpYVE4oTiwgTSwg VkFMKSAoKFZBTCkgJiAoKDFMTCA8PCAoTikpIC0gMSkpCisKK2VudW0geworICAgIEVYVF9JRFhf bm9leHQgPSAwLAorICAgIEVYVF9JRFhfbm9leHRfQUZURVIgPSA0LAorICAgIEVYVF9JRFhfbW12 ZWMgPSA0LAorICAgIEVYVF9JRFhfbW12ZWNfQUZURVIgPSA4LAorICAgIFhYX0xBU1RfRVhUX0lE WAorfTsKKworLyoKKyAqICBDZXJ0YWluIG9wZXJhbmQgdHlwZXMgcmVwcmVzZW50IGEgbm9uLWNv bnRpZ3VvdXMgc2V0IG9mIHZhbHVlcy4KKyAqICBGb3IgZXhhbXBsZSwgdGhlIGNvbXBvdW5kIGNv bXBhcmUtYW5kLWp1bXAgaW5zdHJ1Y3Rpb24gY2FuIG9ubHkgYWNjZXNzCisgKiAgcmVnaXN0ZXJz IFIwLVI3IGFuZCBSMTYtMjMuCisgKiAgVGhpcyB0YWJsZSByZXByZXNlbnRzIHRoZSBtYXBwaW5n IGZyb20gdGhlIGVuY29kaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWVzLgorICovCisKKyNkZWZpbmUg REVGX1JFR01BUChOQU1FLCBFTEVNRU5UUywgLi4uKSBcCisgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGludCBERUNPREVfUkVHSVNURVJfIyNOQU1FW0VMRU1FTlRTXSA9IFwKKyAgICB7IF9fVkFf QVJHU19fIH07CisgICAgICAgIC8qIE5hbWUgICBOdW0gVGFibGUgKi8KK0RFRl9SRUdNQVAoUl8x NiwgIDE2LCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAy MiwgMjMpCitERUZfUkVHTUFQKFJfXzgsICA4LCAgMCwgMiwgNCwgNiwgMTYsIDE4LCAyMCwgMjIp CisKKyNkZWZpbmUgREVDT0RFX01BUFBFRF9SRUcoUkVHTk8sIE5BTUUpIFwKKyAgICBpbnNuLT5y ZWdub1tSRUdOT10gPSBERUNPREVfUkVHSVNURVJfIyNOQU1FW2luc24tPnJlZ25vW1JFR05PXV07 CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBzdHJ1Y3QgRGVjdHJlZVRhYmxlICp0YWJs ZV9saW5rOworICAgIGNvbnN0IHN0cnVjdCBEZWN0cmVlVGFibGUgKnRhYmxlX2xpbmtfYjsKKyAg ICBPcGNvZGUgb3Bjb2RlOworICAgIGVudW0geworICAgICAgICBERUNUUkVFX0VOVFJZX0lOVkFM SUQsCisgICAgICAgIERFQ1RSRUVfVEFCTEVfTElOSywKKyAgICAgICAgREVDVFJFRV9TVUJJTlNO UywKKyAgICAgICAgREVDVFJFRV9FWFRTUEFDRSwKKyAgICAgICAgREVDVFJFRV9URVJNSU5BTAor ICAgIH0gdHlwZTsKK30gRGVjdHJlZUVudHJ5OworCit0eXBlZGVmIHN0cnVjdCBEZWN0cmVlVGFi bGUgeworICAgIHVuc2lnbmVkIGludCAoKmxvb2t1cF9mdW5jdGlvbikoaW50IHN0YXJ0Yml0LCBp bnQgd2lkdGgsIHVpbnQzMl90IG9wY29kZSk7CisgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAg dW5zaWduZWQgaW50IHN0YXJ0Yml0OworICAgIHVuc2lnbmVkIGludCB3aWR0aDsKKyAgICBjb25z dCBEZWN0cmVlRW50cnkgdGFibGVbXTsKK30gRGVjdHJlZVRhYmxlOworCisjZGVmaW5lIERFQ09E RV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBXSEFUTk9UKSBcCisgICAgc3RhdGljIGNvbnN0IERlY3Ry ZWVUYWJsZSBkZWN0cmVlX3RhYmxlXyMjVEFHOworI2RlZmluZSBUQUJMRV9MSU5LKFRBQkxFKSAg ICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBF TkMpICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIFNVQklOU05TKFRB RywgQ0xBU1NBLCBDTEFTU0IsIEVOQykgICAgLyogTk9USElORyAqLworI2RlZmluZSBFWFRTUEFD RShUQUcsIEVOQykgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgSU5W QUxJRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5l IERFQ09ERV9FTkRfVEFCTEUoLi4uKSAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2Rl ZmluZSBERUNPREVfTUFUQ0hfSU5GTyguLi4pICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8K KyNkZWZpbmUgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPKC4uLikgICAgICAgICAvKiBOT1RISU5H ICovCisjZGVmaW5lIERFQ09ERV9PUElORk8oLi4uKSAgICAgICAgICAgICAgICAgICAgLyogTk9U SElORyAqLworCisjaW5jbHVkZSAiZGVjdHJlZV9nZW5lcmF0ZWQuaCIKKworI3VuZGVmIERFQ09E RV9PUElORk8KKyN1bmRlZiBERUNPREVfTUFUQ0hfSU5GTworI3VuZGVmIERFQ09ERV9MRUdBQ1lf TUFUQ0hfSU5GTworI3VuZGVmIERFQ09ERV9FTkRfVEFCTEUKKyN1bmRlZiBJTlZBTElECisjdW5k ZWYgVEVSTUlOQUwKKyN1bmRlZiBTVUJJTlNOUworI3VuZGVmIEVYVFNQQUNFCisjdW5kZWYgVEFC TEVfTElOSworI3VuZGVmIERFQ09ERV9ORVdfVEFCTEUKKyN1bmRlZiBERUNPREVfU0VQQVJBVE9S X0JJVFMKKworI2RlZmluZSBERUNPREVfU0VQQVJBVE9SX0JJVFMoU1RBUlQsIFdJRFRIKSBOVUxM LCBTVEFSVCwgV0lEVEgKKyNkZWZpbmUgREVDT0RFX05FV19UQUJMRV9IRUxQRVIoVEFHLCBTSVpF LCBGTiwgU1RBUlQsIFdJRFRIKSBcCisgICAgc3RhdGljIGNvbnN0IERlY3RyZWVUYWJsZSBkZWN0 cmVlX3RhYmxlXyMjVEFHID0geyBcCisgICAgICAgIC5zaXplID0gU0laRSwgXAorICAgICAgICAu bG9va3VwX2Z1bmN0aW9uID0gRk4sIFwKKyAgICAgICAgLnN0YXJ0Yml0ID0gU1RBUlQsIFwKKyAg ICAgICAgLndpZHRoID0gV0lEVEgsIFwKKyAgICAgICAgLnRhYmxlID0geworI2RlZmluZSBERUNP REVfTkVXX1RBQkxFKFRBRywgU0laRSwgV0hBVE5PVCkgXAorICAgIERFQ09ERV9ORVdfVEFCTEVf SEVMUEVSKFRBRywgU0laRSwgV0hBVE5PVCkKKworI2RlZmluZSBUQUJMRV9MSU5LKFRBQkxFKSBc CisgICAgeyAudHlwZSA9IERFQ1RSRUVfVEFCTEVfTElOSywgLnRhYmxlX2xpbmsgPSAmZGVjdHJl ZV90YWJsZV8jI1RBQkxFIH0sCisjZGVmaW5lIFRFUk1JTkFMKFRBRywgRU5DKSBcCisgICAgeyAu dHlwZSA9IERFQ1RSRUVfVEVSTUlOQUwsIC5vcGNvZGUgPSBUQUcgIH0sCisjZGVmaW5lIFNVQklO U05TKFRBRywgQ0xBU1NBLCBDTEFTU0IsIEVOQykgXAorICAgIHsgXAorICAgICAgICAudHlwZSA9 IERFQ1RSRUVfU1VCSU5TTlMsIFwKKyAgICAgICAgLnRhYmxlX2xpbmsgPSAmZGVjdHJlZV90YWJs ZV9ERUNPREVfU1VCSU5TTl8jI0NMQVNTQSwgXAorICAgICAgICAudGFibGVfbGlua19iID0gJmRl Y3RyZWVfdGFibGVfREVDT0RFX1NVQklOU05fIyNDTEFTU0IgXAorICAgIH0sCisjZGVmaW5lIEVY VFNQQUNFKFRBRywgRU5DKSB7IC50eXBlID0gREVDVFJFRV9FWFRTUEFDRSB9LAorI2RlZmluZSBJ TlZBTElEKCkgeyAudHlwZSA9IERFQ1RSRUVfRU5UUllfSU5WQUxJRCwgLm9wY29kZSA9IFhYX0xB U1RfT1BDT0RFIH0sCisKKyNkZWZpbmUgREVDT0RFX0VORF9UQUJMRSguLi4pIH0gfTsKKworI2Rl ZmluZSBERUNPREVfTUFUQ0hfSU5GTyguLi4pICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8K KyNkZWZpbmUgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPKC4uLikgICAgICAgICAvKiBOT1RISU5H ICovCisjZGVmaW5lIERFQ09ERV9PUElORk8oLi4uKSAgICAgICAgICAgICAgICAgICAgLyogTk9U SElORyAqLworCisjaW5jbHVkZSAiZGVjdHJlZV9nZW5lcmF0ZWQuaCIKKworI3VuZGVmIERFQ09E RV9PUElORk8KKyN1bmRlZiBERUNPREVfTUFUQ0hfSU5GTworI3VuZGVmIERFQ09ERV9MRUdBQ1lf TUFUQ0hfSU5GTworI3VuZGVmIERFQ09ERV9FTkRfVEFCTEUKKyN1bmRlZiBJTlZBTElECisjdW5k ZWYgVEVSTUlOQUwKKyN1bmRlZiBTVUJJTlNOUworI3VuZGVmIEVYVFNQQUNFCisjdW5kZWYgVEFC TEVfTElOSworI3VuZGVmIERFQ09ERV9ORVdfVEFCTEUKKyN1bmRlZiBERUNPREVfTkVXX1RBQkxF X0hFTFBFUgorI3VuZGVmIERFQ09ERV9TRVBBUkFUT1JfQklUUworCitzdGF0aWMgY29uc3QgRGVj dHJlZVRhYmxlIGRlY3RyZWVfdGFibGVfREVDT0RFX0VYVF9FWFRfbm9leHQgPSB7CisgICAgLnNp emUgPSAxLCAubG9va3VwX2Z1bmN0aW9uID0gTlVMTCwgLnN0YXJ0Yml0ID0gMCwgLndpZHRoID0g MCwKKyAgICAudGFibGUgPSB7CisgICAgICAgIHsgLnR5cGUgPSBERUNUUkVFX0VOVFJZX0lOVkFM SUQsIC5vcGNvZGUgPSBYWF9MQVNUX09QQ09ERSB9LAorICAgIH0KK307CisKK3N0YXRpYyBjb25z dCBEZWN0cmVlVGFibGUgKmV4dF90cmVlc1tYWF9MQVNUX0VYVF9JRFhdOworCitzdGF0aWMgdm9p ZCBkZWNvZGVfZXh0X2luaXQodm9pZCkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSBFWFRf SURYX25vZXh0OyBpIDwgRVhUX0lEWF9ub2V4dF9BRlRFUjsgaSsrKSB7CisgICAgICAgIGV4dF90 cmVlc1tpXSA9ICZkZWN0cmVlX3RhYmxlX0RFQ09ERV9FWFRfRVhUX25vZXh0OworICAgIH0KK30K KwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVpbnQzMl90IG1hc2s7CisgICAgdWludDMyX3QgbWF0 Y2g7Cit9IERlY29kZUlUYWJsZUVudHJ5OworCisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFH LCBTSVpFLCBXSEFUTk9UKSAgLyogTk9USElORyAqLworI2RlZmluZSBUQUJMRV9MSU5LKFRBQkxF KSAgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgVEVSTUlOQUwoVEFH LCBFTkMpICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIFNVQklOU05T KFRBRywgQ0xBU1NBLCBDTEFTU0IsIEVOQykgICAgLyogTk9USElORyAqLworI2RlZmluZSBFWFRT UEFDRShUQUcsIEVOQykgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUg SU5WQUxJRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVm aW5lIERFQ09ERV9FTkRfVEFCTEUoLi4uKSAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLwor I2RlZmluZSBERUNPREVfT1BJTkZPKC4uLikgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcg Ki8KKworI2RlZmluZSBERUNPREVfTUFUQ0hfSU5GT19OT1JNQUwoVEFHLCBNQVNLLCBNQVRDSCkg XAorICAgIFtUQUddID0geyBcCisgICAgICAgIC5tYXNrID0gTUFTSywgXAorICAgICAgICAubWF0 Y2ggPSBNQVRDSCwgXAorICAgIH0sCisKKyNkZWZpbmUgREVDT0RFX01BVENIX0lORk9fTlVMTChU QUcsIE1BU0ssIE1BVENIKSBcCisgICAgW1RBR10gPSB7IC5tYXRjaCA9IH4wIH0sCisKKyNkZWZp bmUgREVDT0RFX01BVENIX0lORk8oLi4uKSBERUNPREVfTUFUQ0hfSU5GT19OT1JNQUwoX19WQV9B UkdTX18pCisjZGVmaW5lIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTyguLi4pIC8qIE5PVEhJTkcg Ki8KKworc3RhdGljIGNvbnN0IERlY29kZUlUYWJsZUVudHJ5IGRlY29kZV9pdGFibGVbWFhfTEFT VF9PUENPREVdID0geworI2luY2x1ZGUgImRlY3RyZWVfZ2VuZXJhdGVkLmgiCit9OworCisjdW5k ZWYgREVDT0RFX01BVENIX0lORk8KKyNkZWZpbmUgREVDT0RFX01BVENIX0lORk8oLi4uKSBERUNP REVfTUFUQ0hfSU5GT19OVUxMKF9fVkFfQVJHU19fKQorCisjdW5kZWYgREVDT0RFX0xFR0FDWV9N QVRDSF9JTkZPCisjZGVmaW5lIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTyguLi4pIERFQ09ERV9N QVRDSF9JTkZPX05PUk1BTChfX1ZBX0FSR1NfXykKKworc3RhdGljIGNvbnN0IERlY29kZUlUYWJs ZUVudHJ5IGRlY29kZV9sZWdhY3lfaXRhYmxlW1hYX0xBU1RfT1BDT0RFXSA9IHsKKyNpbmNsdWRl ICJkZWN0cmVlX2dlbmVyYXRlZC5oIgorfTsKKworI3VuZGVmIERFQ09ERV9PUElORk8KKyN1bmRl ZiBERUNPREVfTUFUQ0hfSU5GTworI3VuZGVmIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTworI3Vu ZGVmIERFQ09ERV9FTkRfVEFCTEUKKyN1bmRlZiBJTlZBTElECisjdW5kZWYgVEVSTUlOQUwKKyN1 bmRlZiBTVUJJTlNOUworI3VuZGVmIEVYVFNQQUNFCisjdW5kZWYgVEFCTEVfTElOSworI3VuZGVm IERFQ09ERV9ORVdfVEFCTEUKKyN1bmRlZiBERUNPREVfU0VQQVJBVE9SX0JJVFMKKwordm9pZCBk ZWNvZGVfaW5pdCh2b2lkKQoreworICAgIGRlY29kZV9leHRfaW5pdCgpOworfQorCit2b2lkIGRl Y29kZV9zZW5kX2luc25fdG8oUGFja2V0ICpwYWNrZXQsIGludCBzdGFydCwgaW50IG5ld2xvYykK K3sKKyAgICBJbnNuIHRtcGluc247CisgICAgaW50IGRpcmVjdGlvbjsKKyAgICBpbnQgaTsKKyAg ICBpZiAoc3RhcnQgPT0gbmV3bG9jKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg KHN0YXJ0IDwgbmV3bG9jKSB7CisgICAgICAgIC8qIE1vdmUgdG93YXJkcyBlbmQgKi8KKyAgICAg ICAgZGlyZWN0aW9uID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBtb3ZlIHRvd2FyZHMg YmVnaW5uaW5nICovCisgICAgICAgIGRpcmVjdGlvbiA9IC0xOworICAgIH0KKyAgICBmb3IgKGkg PSBzdGFydDsgaSAhPSBuZXdsb2M7IGkgKz0gZGlyZWN0aW9uKSB7CisgICAgICAgIHRtcGluc24g PSBwYWNrZXQtPmluc25baV07CisgICAgICAgIHBhY2tldC0+aW5zbltpXSA9IHBhY2tldC0+aW5z bltpICsgZGlyZWN0aW9uXTsKKyAgICAgICAgcGFja2V0LT5pbnNuW2kgKyBkaXJlY3Rpb25dID0g dG1waW5zbjsKKyAgICB9Cit9CisKKy8qIEZpbGwgbmV3dmFsdWUgcmVnaXN0ZXJzIHdpdGggdGhl IGNvcnJlY3QgcmVnbm8gKi8KK3N0YXRpYyB2b2lkCitkZWNvZGVfZmlsbF9uZXd2YWx1ZV9yZWdu byhQYWNrZXQgKnBhY2tldCkKK3sKKyAgICBpbnQgaSwgdXNlX3JlZ2lkeCwgZGVmX2lkeDsKKyAg ICB1aW50MTZfdCBkZWZfb3Bjb2RlLCB1c2Vfb3Bjb2RlOworICAgIGNoYXIgKmRzdHN0cjsKKwor ICAgIGZvciAoaSA9IDE7IGkgPCBwYWNrZXQtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAgIGlm IChHRVRfQVRUUklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfRE9UTkVXVkFMVUUpICYmCisg ICAgICAgICAgICAhR0VUX0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX0VYVEVOU0lP TikpIHsKKyAgICAgICAgICAgIHVzZV9vcGNvZGUgPSBwYWNrZXQtPmluc25baV0ub3Bjb2RlOwor CisgICAgICAgICAgICAvKiBJdCdzIGEgc3RvcmUsIHNvIHdlJ3JlIGFkanVzdGluZyB0aGUgTnQg ZmllbGQgKi8KKyAgICAgICAgICAgIGlmIChHRVRfQVRUUklCKHVzZV9vcGNvZGUsIEFfU1RPUkUp KSB7CisgICAgICAgICAgICAgICAgdXNlX3JlZ2lkeCA9IHN0cmNocihvcGNvZGVfcmVnaW5mb1t1 c2Vfb3Bjb2RlXSwgJ3QnKSAtCisgICAgICAgICAgICAgICAgICAgIG9wY29kZV9yZWdpbmZvW3Vz ZV9vcGNvZGVdOworICAgICAgICAgICAgfSBlbHNlIHsgICAgLyogSXQncyBhIEp1bXAsIHNvIHdl J3JlIGFkanVzdGluZyB0aGUgTnMgZmllbGQgKi8KKyAgICAgICAgICAgICAgICB1c2VfcmVnaWR4 ID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW3VzZV9vcGNvZGVdLCAncycpIC0KKyAgICAgICAgICAg ICAgICAgICAgb3Bjb2RlX3JlZ2luZm9bdXNlX29wY29kZV07CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBXaGF0J3MgZW5jb2RlZCBhdCB0aGUgTi1maWVs ZCBpcyB0aGUgb2Zmc2V0IHRvIHdobydzIHByb2R1Y2luZworICAgICAgICAgICAgICogdGhlIHZh bHVlLiAgU2hpZnQgb2ZmIHRoZSBMU0Igd2hpY2ggaW5kaWNhdGVzIG9kZC9ldmVuIHJlZ2lzdGVy LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBkZWZfaWR4ID0gaSAtICgocGFja2V0LT5p bnNuW2ldLnJlZ25vW3VzZV9yZWdpZHhdKSA+PiAxKTsKKworICAgICAgICAgICAgLyoKKyAgICAg ICAgICAgICAqIENoZWNrIGZvciBhIGJhZGx5IGVuY29kZWQgTi1maWVsZCB3aGljaCBwb2ludHMg dG8gYW4gaW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAqIG91dC1vZi1yYW5nZQorICAgICAgICAg ICAgICovCisgICAgICAgICAgICBnX2Fzc2VydCghKChkZWZfaWR4IDwgMCkgfHwgKGRlZl9pZHgg PiAocGFja2V0LT5udW1faW5zbnMgLSAxKSkpKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAg ICAgICAqIHBhY2tldC0+aW5zbltkZWZfaWR4XSBpcyB0aGUgcHJvZHVjZXIKKyAgICAgICAgICAg ICAqIEZpZ3VyZSBvdXQgd2hpY2ggdHlwZSBvZiBkZXN0aW5hdGlvbiBpdCBwcm9kdWNlcworICAg ICAgICAgICAgICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluIHRoZSByZWdpbmZvCisg ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGRlZl9vcGNvZGUgPSBwYWNrZXQtPmluc25bZGVm X2lkeF0ub3Bjb2RlOworICAgICAgICAgICAgZHN0c3RyID0gc3Ryc3RyKG9wY29kZV93cmVnc1tk ZWZfb3Bjb2RlXSwgIlJkIik7CisgICAgICAgICAgICBpZiAoZHN0c3RyKSB7CisgICAgICAgICAg ICAgICAgZHN0c3RyID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW2RlZl9vcGNvZGVdLCAnZCcpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJzdHIob3Bj b2RlX3dyZWdzW2RlZl9vcGNvZGVdLCAiUngiKTsKKyAgICAgICAgICAgICAgICBpZiAoZHN0c3Ry KSB7CisgICAgICAgICAgICAgICAgICAgIGRzdHN0ciA9IHN0cmNocihvcGNvZGVfcmVnaW5mb1tk ZWZfb3Bjb2RlXSwgJ3gnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICBkc3RzdHIgPSBzdHJzdHIob3Bjb2RlX3dyZWdzW2RlZl9vcGNvZGVdLCAiUmUiKTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKGRzdHN0cikgeworICAgICAgICAgICAgICAgICAgICAg ICAgZHN0c3RyID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW2RlZl9vcGNvZGVdLCAnZScpOworICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZHN0c3Ry ID0gc3Ryc3RyKG9wY29kZV93cmVnc1tkZWZfb3Bjb2RlXSwgIlJ5Iik7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoZHN0c3RyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0 c3RyID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW2RlZl9vcGNvZGVdLCAneScpOworICAgICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2Fz c2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg ICAgZ19hc3NlcnQoZHN0c3RyICE9IE5VTEwpOworCisgICAgICAgICAgICAvKiBOb3cgcGF0Y2gg dXAgdGhlIGNvbnN1bWVyIHdpdGggdGhlIHJlZ2lzdGVyIG51bWJlciAqLworICAgICAgICAgICAg aW50IGRzdF9pZHggPSBkc3RzdHIgLSBvcGNvZGVfcmVnaW5mb1tkZWZfb3Bjb2RlXTsKKyAgICAg ICAgICAgIHBhY2tldC0+aW5zbltpXS5yZWdub1t1c2VfcmVnaWR4XSA9CisgICAgICAgICAgICAg ICAgcGFja2V0LT5pbnNuW2RlZl9pZHhdLnJlZ25vW2RzdF9pZHhdOworICAgICAgICAgICAgLyoK KyAgICAgICAgICAgICAqIFdlIG5lZWQgdG8gcmVtZW1iZXIgd2hvIHByb2R1Y2VzIHRoaXMgdmFs dWUgdG8gbGF0ZXIKKyAgICAgICAgICAgICAqIGNoZWNrIGlmIGl0IHdhcyBkeW5hbWljYWxseSBj YW5jZWxsZWQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcGFja2V0LT5pbnNuW2ldLm5l d192YWx1ZV9wcm9kdWNlcl9zbG90ID0KKyAgICAgICAgICAgICAgICBwYWNrZXQtPmluc25bZGVm X2lkeF0uc2xvdDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogU3BsaXQgQ0ogaW50byBhIGNv bXBhcmUgYW5kIGEganVtcCAqLworc3RhdGljIHZvaWQgZGVjb2RlX3NwbGl0X2NtcGp1bXAoUGFj a2V0ICpwa3QpCit7CisgICAgaW50IGxhc3QsIGk7CisgICAgaW50IG51bWluc25zID0gcGt0LT5u dW1faW5zbnM7CisKKyAgICAvKgorICAgICAqIEZpcnN0LCBzcGxpdCBhbGwgY29tcGFyZS1qdW1w cy4KKyAgICAgKiBUaGUgY29tcGFyZSBpcyBzZW50IHRvIHRoZSBlbmQgYXMgYSBuZXcgaW5zdHJ1 Y3Rpb24uCisgICAgICogRG8gaXQgdGhpcyB3YXkgc28gd2UgZG9uJ3QgcmVvcmRlciBkdWFsIGp1 bXBzLiBUaG9zZSBuZWVkIHRvIHN0YXkgaW4KKyAgICAgKiBvcmlnaW5hbCBvcmRlci4KKyAgICAg Ki8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtaW5zbnM7IGkrKykgeworICAgICAgICAvKiBJdCdz IGEgY21wLWp1bXAgKi8KKyAgICAgICAgaWYgKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29k ZSwgQV9ORVdDTVBKVU1QKSkgeworICAgICAgICAgICAgbGFzdCA9IHBrdC0+bnVtX2luc25zOwor ICAgICAgICAgICAgcGt0LT5pbnNuW2xhc3RdID0gcGt0LT5pbnNuW2ldOyAgICAvKiBjb3B5IHRo ZSBpbnN0cnVjdGlvbiAqLworICAgICAgICAgICAgcGt0LT5pbnNuW2xhc3RdLnBhcnQxID0gMTsg ICAgLyogbGFzdCBpbnN0cnVjdGlvbiBkb2VzIHRoZSBDTVAgKi8KKyAgICAgICAgICAgIHBrdC0+ aW5zbltpXS5wYXJ0MSA9IDA7ICAgIC8qIGV4aXN0aW5nIGluc3RydWN0aW9uIGRvZXMgdGhlIEpV TVAgKi8KKyAgICAgICAgICAgIHBrdC0+bnVtX2luc25zKys7CisgICAgICAgIH0KKyAgICB9CisK KyAgICAvKiBOb3cgcmUtc2h1ZmZsZSBhbGwgdGhlIGNvbXBhcmVzIGJhY2sgdG8gdGhlIGJlZ2lu bmluZyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBwa3QtPm51bV9pbnNuczsgaSsrKSB7CisgICAg ICAgIGlmIChwa3QtPmluc25baV0ucGFydDEpIHsKKyAgICAgICAgICAgIGRlY29kZV9zZW5kX2lu c25fdG8ocGt0LCBpLCAwKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGlubGluZSBp bnQgZGVjb2RlX29wY29kZV9jYW5fanVtcChpbnQgb3Bjb2RlKQoreworICAgIGlmICgoR0VUX0FU VFJJQihvcGNvZGUsIEFfSlVNUCkpIHx8CisgICAgICAgIChHRVRfQVRUUklCKG9wY29kZSwgQV9D QUxMKSkgfHwKKyAgICAgICAgKG9wY29kZSA9PSBKMl90cmFwMCkpIHsKKyAgICAgICAgLyogRXhj ZXB0aW9uIHRvIEFfSlVNUCBhdHRyaWJ1dGUgKi8KKyAgICAgICAgaWYgKG9wY29kZSA9PSBKNF9o aW50anVtcHIpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJl dHVybiAxOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBk ZWNvZGVfb3Bjb2RlX2VuZHNfbG9vcChpbnQgb3Bjb2RlKQoreworICAgIHJldHVybiBHRVRfQVRU UklCKG9wY29kZSwgQV9IV0xPT1AwX0VORCkgfHwKKyAgICAgICAgICAgR0VUX0FUVFJJQihvcGNv ZGUsIEFfSFdMT09QMV9FTkQpOworfQorCisvKiBTZXQgdGhlIGlzXyogZmllbGRzIGluIGVhY2gg aW5zdHJ1Y3Rpb24gKi8KK3N0YXRpYyB2b2lkIGRlY29kZV9zZXRfaW5zbl9hdHRyX2ZpZWxkcyhQ YWNrZXQgKnBrdCkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgbnVtaW5zbnMgPSBwa3QtPm51bV9p bnNuczsKKyAgICB1aW50MTZfdCBvcGNvZGU7CisKKyAgICBwa3QtPnBrdF9oYXNfY29mID0gMDsK KyAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcCA9IDA7CisgICAgcGt0LT5wa3RfaGFzX2RjemVyb2Eg PSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bWluc25zOyBpKyspIHsKKyAgICAgICAgb3Bj b2RlID0gcGt0LT5pbnNuW2ldLm9wY29kZTsKKyAgICAgICAgaWYgKHBrdC0+aW5zbltpXS5wYXJ0 MSkgeworICAgICAgICAgICAgY29udGludWU7ICAgIC8qIFNraXAgY29tcGFyZSBvZiBjbXAtanVt cHMgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9EQ1pF Uk9BKSkgeworICAgICAgICAgICAgcGt0LT5wa3RfaGFzX2RjemVyb2EgPSAxOworICAgICAgICB9 CisKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX1NUT1JFKSkgeworICAgICAgICAg ICAgaWYgKHBrdC0+aW5zbltpXS5zbG90ID09IDApIHsKKyAgICAgICAgICAgICAgICBwa3QtPnBr dF9oYXNfc3RvcmVfczAgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBwa3QtPnBrdF9oYXNfc3RvcmVfczEgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisK KyAgICAgICAgcGt0LT5wa3RfaGFzX2NvZiB8PSBkZWNvZGVfb3Bjb2RlX2Nhbl9qdW1wKG9wY29k ZSk7CisKKyAgICAgICAgcGt0LT5pbnNuW2ldLmlzX2VuZGxvb3AgPSBkZWNvZGVfb3Bjb2RlX2Vu ZHNfbG9vcChvcGNvZGUpOworCisgICAgICAgIHBrdC0+cGt0X2hhc19lbmRsb29wIHw9IHBrdC0+ aW5zbltpXS5pc19lbmRsb29wOworCisgICAgICAgIHBrdC0+cGt0X2hhc19jb2YgfD0gcGt0LT5w a3RfaGFzX2VuZGxvb3A7CisgICAgfQorfQorCisvKgorICogU2h1ZmZsZSBmb3IgZXhlY3V0aW9u CisgKiBNb3ZlIHN0b3JlcyB0byBlbmQgKGluIHNhbWUgb3JkZXIgYXMgZW5jb2RpbmcpCisgKiBN b3ZlIGNvbXBhcmVzIHRvIGJlZ2lubmluZyAoZm9yIHVzZSBieSAubmV3IGluc25zKQorICovCitz dGF0aWMgdm9pZCBkZWNvZGVfc2h1ZmZsZV9mb3JfZXhlY3V0aW9uKFBhY2tldCAqcGFja2V0KQor eworICAgIGludCBjaGFuZ2VkID0gMDsKKyAgICBpbnQgaTsKKyAgICBpbnQgZmxhZzsgICAgLyog ZmxhZyBtZWFucyB3ZSd2ZSBzZWVuIGEgbm9uLW1lbW9yeSBpbnN0cnVjdGlvbiAqLworICAgIGlu dCBuX21lbXM7CisgICAgaW50IGxhc3RfaW5zbiA9IHBhY2tldC0+bnVtX2luc25zIC0gMTsKKwor ICAgIC8qCisgICAgICogU2tpcCBlbmQgbG9vcHMsIHNvbWVob3cgYW4gZW5kIGxvb3AgaXMgZ2V0 dGluZyBpbiBhbmQgbWVzc2luZworICAgICAqIHVwIHRoZSBvcmRlcgorICAgICAqLworICAgIGlm IChkZWNvZGVfb3Bjb2RlX2VuZHNfbG9vcChwYWNrZXQtPmluc25bbGFzdF9pbnNuXS5vcGNvZGUp KSB7CisgICAgICAgIGxhc3RfaW5zbi0tOworICAgIH0KKworICAgIGRvIHsKKyAgICAgICAgY2hh bmdlZCA9IDA7CisgICAgICAgIC8qCisgICAgICAgICAqIFN0b3JlcyBnbyBsYXN0LCBtdXN0IG5v dCByZW9yZGVyLgorICAgICAgICAgKiBDYW5ub3Qgc2h1ZmZsZSBzdG9yZXMgcGFzdCBsb2Fkcywg ZWl0aGVyLgorICAgICAgICAgKiBJdGVyYXRlIGJhY2t3YXJkcy4gIElmIHdlIHNlZSBhIG5vbi1t ZW1vcnkgaW5zdHJ1Y3Rpb24sCisgICAgICAgICAqIHRoZW4gYSBzdG9yZSwgc2h1ZmZsZSB0aGUg c3RvcmUgdG8gdGhlIGZyb250LiAgRG9uJ3Qgc2h1ZmZsZQorICAgICAgICAgKiBzdG9yZXMgd3J0 IGVhY2ggb3RoZXIgb3IgYSBsb2FkLgorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChmbGFnID0g bl9tZW1zID0gMCwgaSA9IGxhc3RfaW5zbjsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlu dCBvcGNvZGUgPSBwYWNrZXQtPmluc25baV0ub3Bjb2RlOworCisgICAgICAgICAgICBpZiAoZmxh ZyAmJiBHRVRfQVRUUklCKG9wY29kZSwgQV9TVE9SRSkpIHsKKyAgICAgICAgICAgICAgICBkZWNv ZGVfc2VuZF9pbnNuX3RvKHBhY2tldCwgaSwgbGFzdF9pbnNuIC0gbl9tZW1zKTsKKyAgICAgICAg ICAgICAgICBuX21lbXMrKzsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfU1RPUkUpKSB7CisgICAgICAgICAg ICAgICAgbl9tZW1zKys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEdFVF9BVFRSSUIob3Bjb2Rl LCBBX0xPQUQpKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBEb24n dCBzZXQgZmxhZywgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBzaHVmZmxlIGEKKyAgICAgICAgICAg ICAgICAgKiBzdG9yZSBwYXN0IGEgbG9hZAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAg ICAgICAgIG5fbWVtcysrOworICAgICAgICAgICAgfSBlbHNlIGlmIChHRVRfQVRUUklCKG9wY29k ZSwgQV9ET1RORVdWQUxVRSkpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAg ICAqIERvbid0IHNldCBmbGFnLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIHNodWZmbGUgcGFzdAor ICAgICAgICAgICAgICAgICAqIGEgLm5ldyB2YWx1ZQorICAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKiBDb21wYXJlcyBnbyBmaXJzdCwgbWF5IGJlIHJl b3JkZXJlZCB3cnQgZWFjaCBvdGhlciAqLworICAgICAgICBmb3IgKGZsYWcgPSAwLCBpID0gMDsg aSA8IGxhc3RfaW5zbiArIDE7IGkrKykgeworICAgICAgICAgICAgaW50IG9wY29kZSA9IHBhY2tl dC0+aW5zbltpXS5vcGNvZGU7CisKKyAgICAgICAgICAgIGlmICgoc3Ryc3RyKG9wY29kZV93cmVn c1tvcGNvZGVdLCAiUGQ0IikgfHwKKyAgICAgICAgICAgICAgICAgc3Ryc3RyKG9wY29kZV93cmVn c1tvcGNvZGVdLCAiUGU0IikpICYmCisgICAgICAgICAgICAgICAgR0VUX0FUVFJJQihvcGNvZGUs IEFfU1RPUkUpID09IDApIHsKKyAgICAgICAgICAgICAgICAvKiBUaGlzIHNob3VsZCBiZSBhIGNv bXBhcmUgKG5vdCBhIHN0b3JlIGNvbmRpdGlvbmFsKSAqLworICAgICAgICAgICAgICAgIGlmIChm bGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlY29kZV9zZW5kX2luc25fdG8ocGFja2V0LCBp LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CisgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo R0VUX0FUVFJJQihvcGNvZGUsIEFfSU1QTElDSVRfV1JJVEVTX1AzKSAmJgorICAgICAgICAgICAg ICAgICAgICAgICAhZGVjb2RlX29wY29kZV9lbmRzX2xvb3AocGFja2V0LT5pbnNuW2ldLm9wY29k ZSkpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHNwTmxvb3AgaW5z dHJ1Y3Rpb24KKyAgICAgICAgICAgICAgICAgKiBEb24ndCByZW9yZGVyIGVuZGxvb3BzOyB0aGV5 IGFyZSBub3QgdmFsaWQgZm9yIC5uZXcgdXNlcywKKyAgICAgICAgICAgICAgICAgKiBhbmQgd2Ug d2FudCB0byBtYXRjaCBIVworICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlm IChmbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlY29kZV9zZW5kX2luc25fdG8ocGFja2V0 LCBpLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CisgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBp ZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfSU1QTElDSVRfV1JJVEVTX1AwKSAmJgorICAgICAgICAg ICAgICAgICAgICAgICAhR0VUX0FUVFJJQihvcGNvZGUsIEFfTkVXQ01QSlVNUCkpIHsKKyAgICAg ICAgICAgICAgICBpZiAoZmxhZykgeworICAgICAgICAgICAgICAgICAgICBkZWNvZGVfc2VuZF9p bnNuX3RvKHBhY2tldCwgaSwgMCk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwor ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgLyoKKyAgICAgKiBJZiB3 ZSBoYXZlIGEgLm5ldyByZWdpc3RlciBjb21wYXJlL2JyYW5jaCwgbW92ZSB0aGF0IHRvIHRoZSB2 ZXJ5CisgICAgICogdmVyeSBlbmQsIHBhc3Qgc3RvcmVzCisgICAgICovCisgICAgZm9yIChpID0g MDsgaSA8IGxhc3RfaW5zbjsgaSsrKSB7CisgICAgICAgIGlmIChHRVRfQVRUUklCKHBhY2tldC0+ aW5zbltpXS5vcGNvZGUsIEFfRE9UTkVXVkFMVUUpKSB7CisgICAgICAgICAgICBkZWNvZGVfc2Vu ZF9pbnNuX3RvKHBhY2tldCwgaSwgbGFzdF9pbnNuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorYXBwbHlfZXh0ZW5kZXIoUGFja2V0ICpw a3QsIGludCBpLCB1aW50MzJfdCBleHRlbmRlcikKK3sKKyAgICBpbnQgaW1tZWRfbnVtOworICAg IHVpbnQzMl90IGJhc2VfaW1tZWQ7CisKKyAgICBpbW1lZF9udW0gPSBvcGNvZGVfd2hpY2hfaW1t ZWRpYXRlX2lzX2V4dGVuZGVkKHBrdC0+aW5zbltpXS5vcGNvZGUpOworICAgIGJhc2VfaW1tZWQg PSBwa3QtPmluc25baV0uaW1tZWRbaW1tZWRfbnVtXTsKKworICAgIHBrdC0+aW5zbltpXS5pbW1l ZFtpbW1lZF9udW1dID0gZXh0ZW5kZXIgfCBmWlhUTig2LCAzMiwgYmFzZV9pbW1lZCk7Cit9CisK K3N0YXRpYyB2b2lkIGRlY29kZV9hcHBseV9leHRlbmRlcnMoUGFja2V0ICpwYWNrZXQpCit7Cisg ICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHBhY2tldC0+bnVtX2luc25zOyBpKyspIHsK KyAgICAgICAgaWYgKEdFVF9BVFRSSUIocGFja2V0LT5pbnNuW2ldLm9wY29kZSwgQV9JVF9FWFRF TkRFUikpIHsKKyAgICAgICAgICAgIHBhY2tldC0+aW5zbltpICsgMV0uZXh0ZW5zaW9uX3ZhbGlk ID0gMTsKKyAgICAgICAgICAgIGFwcGx5X2V4dGVuZGVyKHBhY2tldCwgaSArIDEsIHBhY2tldC0+ aW5zbltpXS5pbW1lZFswXSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRl Y29kZV9yZW1vdmVfZXh0ZW5kZXJzKFBhY2tldCAqcGFja2V0KQoreworICAgIGludCBpLCBqOwor ICAgIGZvciAoaSA9IDA7IGkgPCBwYWNrZXQtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAgIGlm IChHRVRfQVRUUklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfSVRfRVhURU5ERVIpKSB7Cisg ICAgICAgICAgICAvKiBSZW1vdmUgdGhpcyBvbmUgYnkgbW92aW5nIHRoZSByZW1haW5pbmcgaW5z dHJ1Y3Rpb25zIGRvd24gKi8KKyAgICAgICAgICAgIGZvciAoaiA9IGk7CisgICAgICAgICAgICAg ICAgKGogPCBwYWNrZXQtPm51bV9pbnNucyAtIDEpICYmIChqIDwgSU5TVFJVQ1RJT05TX01BWCAt IDEpOworICAgICAgICAgICAgICAgIGorKykgeworICAgICAgICAgICAgICAgIHBhY2tldC0+aW5z bltqXSA9IHBhY2tldC0+aW5zbltqICsgMV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw YWNrZXQtPm51bV9pbnNucy0tOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgU2xvdE1h c2sgZ2V0X3ZhbGlkX3Nsb3RzKGNvbnN0IFBhY2tldCAqcGt0LCB1bnNpZ25lZCBpbnQgc2xvdCkK K3sKKyAgICByZXR1cm4gZmluZF9pY2xhc3Nfc2xvdHMocGt0LT5pbnNuW3Nsb3RdLm9wY29kZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0LT5pbnNuW3Nsb3RdLmljbGFzcyk7Cit9 CisKKyNpbmNsdWRlICJxNnZfZGVjb2RlLmMiCisKKy8qIFVzZWQgZm9yICItZCBpbl9hc20iIGxv Z2dpbmcgKi8KK2ludCBkaXNhc3NlbWJsZV9oZXhhZ29uKHVpbnQzMl90ICp3b3JkcywgaW50IG53 b3JkcywgYmZkX3ZtYSBwYywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgaW50 IGJ1ZnNpemUpCit7CisgICAgUGFja2V0IHBrdDsKKworICAgIGlmIChkZWNvZGVfcGFja2V0KG53 b3Jkcywgd29yZHMsICZwa3QsIHRydWUpID4gMCkgeworICAgICAgICBzbnByaW50X2FfcGt0X2Rp c2FzKGJ1ZiwgYnVmc2l6ZSwgJnBrdCwgd29yZHMsIHBjKTsKKyAgICAgICAgcmV0dXJuIHBrdC5l bmNvZF9wa3Rfc2l6ZV9pbl9ieXRlczsKKyAgICB9IGVsc2UgeworICAgICAgICBzbnByaW50Zihi dWYsIGJ1ZnNpemUsICI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQpk aWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vcTZ2X2RlY29kZS5jIGIvdGFyZ2V0L2hleGFnb24v cTZ2X2RlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNmI4MzYK LS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9xNnZfZGVjb2RlLmMKQEAgLTAsMCAr MSwzODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0 aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2RlZmluZSBERUNPREVfTkVXX1RBQkxF KFRBRywgU0laRSwgV0hBVE5PVCkgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgVEFCTEVfTElO SyhUQUJMRSkgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIFRF Uk1JTkFMKFRBRywgRU5DKSAgICAgICAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2Rl ZmluZSBTVUJJTlNOUyhUQUcsIENMQVNTQSwgQ0xBU1NCLCBFTkMpICAgICAgIC8qIE5PVEhJTkcg Ki8KKyNkZWZpbmUgRVhUU1BBQ0UoVEFHLCBFTkMpICAgICAgICAgICAgICAgICAgICAgICAvKiBO T1RISU5HICovCisjZGVmaW5lIElOVkFMSUQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfRU5EX1RBQkxFKC4uLikgICAgICAgICAg ICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX01BVENIX0lORk8oLi4uKSAg ICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09ERV9MRUdBQ1lfTUFU Q0hfSU5GTyguLi4pICAgICAgICAgICAgLyogTk9USElORyAqLworCisjZGVmaW5lIERFQ09ERV9S RUcoUkVHTk8sIFdJRFRILCBTVEFSVEJJVCkgXAorICAgIGluc24tPnJlZ25vW1JFR05PXSA9ICgo ZW5jb2RpbmcgPj4gU1RBUlRCSVQpICYgKCgxIDw8IFdJRFRIKSAtIDEpKTsKKworI2RlZmluZSBE RUNPREVfSU1QTF9SRUcoUkVHTk8sIFZBTCkgXAorICAgIGluc24tPnJlZ25vW1JFR05PXSA9IFZB TDsKKworI2RlZmluZSBERUNPREVfSU1NKElNTU5PLCBXSURUSCwgU1RBUlRCSVQsIFZBTFNUQVJU KSBcCisgICAgaW5zbi0+aW1tZWRbSU1NTk9dIHw9ICgoKGVuY29kaW5nID4+IFNUQVJUQklUKSAm ICgoMSA8PCBXSURUSCkgLSAxKSkpIDw8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKFZB TFNUQVJUKTsKKworI2RlZmluZSBERUNPREVfSU1NX1NYVChJTU1OTywgV0lEVEgpIFwKKyAgICBp bnNuLT5pbW1lZFtJTU1OT10gPSAoKCgoaW50MzJfdClpbnNuLT5pbW1lZFtJTU1OT10pIDw8ICgz MiAtIFdJRFRIKSkgPj4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMzIgLSBXSURUSCkp OworCisjZGVmaW5lIERFQ09ERV9JTU1fTkVHKElNTU5PLCBXSURUSCkgXAorICAgIGluc24tPmlt bWVkW0lNTU5PXSA9IC1pbnNuLT5pbW1lZFtJTU1OT107CisKKyNkZWZpbmUgREVDT0RFX0lNTV9T SElGVChJTU1OTywgU0hBTVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IGlmICgoIWluc24tPmV4dGVuc2lvbl92YWxpZCkgfHwgXAorICAgICAgICAoaW5zbi0+d2hpY2hf ZXh0ZW5kZWQgIT0gSU1NTk8pKSB7IFwKKyAgICAgICAgaW5zbi0+aW1tZWRbSU1NTk9dIDw8PSBT SEFNVDsgXAorICAgIH0KKworI2RlZmluZSBERUNPREVfT1BJTkZPKFRBRywgQkVIKSBcCisgICAg Y2FzZSBUQUc6IFwKKyAgICAgICAgeyBCRUggIH0gXAorICAgICAgICBicmVhazsgXAorCisvKgor ICogRmlsbCBpbiB0aGUgb3BlcmFuZHMgb2YgdGhlIGluc3RydWN0aW9uCisgKiBkZWN0cmVlX2dl bmVyYXRlZC5oIGhhZCBhIERFQ09ERV9PUElORk8gZW50cnkgZm9yIGVhY2ggb3Bjb2RlCisgKiBG b3IgZXhhbXBsZSwKKyAqICAgICBERUNPREVfT1BJTkZPKEEyX2FkZGksCisgKiAgICAgICAgICBE RUNPREVfUkVHKDAsNSwwKQorICogICAgICAgICAgREVDT0RFX1JFRygxLDUsMTYpCisgKiAgICAg ICAgICBERUNPREVfSU1NKDAsNywyMSw5KQorICogICAgICAgICAgREVDT0RFX0lNTSgwLDksNSww KQorICogICAgICAgICAgREVDT0RFX0lNTV9TWFQoMCwxNikKKyAqIHdpdGggdGhlIG1hY3JvcyBk ZWZpbmVkIGFib3ZlLCB3ZSdsbCBmaWxsIGluIGEgc3dpdGNoIHN0YXRlbWVudAorICogd2hlcmUg ZWFjaCBjYXNlIGlzIGFuIG9wY29kZSB0YWcuCisgKi8KK3N0YXRpYyB2b2lkCitkZWNvZGVfb3Ao SW5zbiAqaW5zbiwgT3Bjb2RlIHRhZywgdWludDMyX3QgZW5jb2RpbmcpCit7CisgICAgaW5zbi0+ aW1tZWRbMF0gPSAwOworICAgIGluc24tPmltbWVkWzFdID0gMDsKKyAgICBpbnNuLT5vcGNvZGUg PSB0YWc7CisgICAgaWYgKGluc24tPmV4dGVuc2lvbl92YWxpZCkgeworICAgICAgICBpbnNuLT53 aGljaF9leHRlbmRlZCA9IG9wY29kZV93aGljaF9pbW1lZGlhdGVfaXNfZXh0ZW5kZWQodGFnKTsK KyAgICB9CisKKyAgICBzd2l0Y2ggKHRhZykgeworI2luY2x1ZGUgImRlY3RyZWVfZ2VuZXJhdGVk LmgiCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaW5zbi0+Z2Vu ZXJhdGUgPSBvcGNvZGVfZ2VucHRyW3RhZ107CisKKyAgICBpbnNuLT5pY2xhc3MgPSBpY2xhc3Nf Yml0cyhlbmNvZGluZyk7Cit9CisKKyN1bmRlZiBERUNPREVfUkVHCisjdW5kZWYgREVDT0RFX0lN UExfUkVHCisjdW5kZWYgREVDT0RFX0lNTQorI3VuZGVmIERFQ09ERV9JTU1fU0hJRlQKKyN1bmRl ZiBERUNPREVfT1BJTkZPCisjdW5kZWYgREVDT0RFX01BVENIX0lORk8KKyN1bmRlZiBERUNPREVf TEVHQUNZX01BVENIX0lORk8KKyN1bmRlZiBERUNPREVfRU5EX1RBQkxFCisjdW5kZWYgSU5WQUxJ RAorI3VuZGVmIFRFUk1JTkFMCisjdW5kZWYgU1VCSU5TTlMKKyN1bmRlZiBFWFRTUEFDRQorI3Vu ZGVmIFRBQkxFX0xJTksKKyN1bmRlZiBERUNPREVfTkVXX1RBQkxFCisjdW5kZWYgREVDT0RFX1NF UEFSQVRPUl9CSVRTCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY29kZV9zdWJpbnNuX3RhYmxl d2FsayhJbnNuICppbnNuLCBjb25zdCBEZWN0cmVlVGFibGUgKnRhYmxlLAorICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IGVuY29kaW5nKQoreworICAgIHVuc2lnbmVkIGludCBpOwor ICAgIE9wY29kZSBvcGM7CisgICAgaWYgKHRhYmxlLT5sb29rdXBfZnVuY3Rpb24pIHsKKyAgICAg ICAgaSA9IHRhYmxlLT5sb29rdXBfZnVuY3Rpb24odGFibGUtPnN0YXJ0Yml0LCB0YWJsZS0+d2lk dGgsIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpID0gZXh0cmFjdDMyKGVuY29k aW5nLCB0YWJsZS0+c3RhcnRiaXQsIHRhYmxlLT53aWR0aCk7CisgICAgfQorICAgIGlmICh0YWJs ZS0+dGFibGVbaV0udHlwZSA9PSBERUNUUkVFX1RBQkxFX0xJTkspIHsKKyAgICAgICAgcmV0dXJu IGRlY29kZV9zdWJpbnNuX3RhYmxld2FsayhpbnNuLCB0YWJsZS0+dGFibGVbaV0udGFibGVfbGlu aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyk7Cisg ICAgfSBlbHNlIGlmICh0YWJsZS0+dGFibGVbaV0udHlwZSA9PSBERUNUUkVFX1RFUk1JTkFMKSB7 CisgICAgICAgIG9wYyA9IHRhYmxlLT50YWJsZVtpXS5vcGNvZGU7CisgICAgICAgIGlmICgoZW5j b2RpbmcgJiBkZWNvZGVfaXRhYmxlW29wY10ubWFzaykgIT0gZGVjb2RlX2l0YWJsZVtvcGNdLm1h dGNoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBkZWNvZGVf b3AoaW5zbiwgb3BjLCBlbmNvZGluZyk7CisgICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7 CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRf aW5zbl9hKHVpbnQzMl90IGVuY29kaW5nKQoreworICAgIHJldHVybiBleHRyYWN0MzIoZW5jb2Rp bmcsIDAsIDEzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfaW5zbl9iKHVpbnQzMl90 IGVuY29kaW5nKQoreworICAgIHJldHVybiBleHRyYWN0MzIoZW5jb2RpbmcsIDE2LCAxMyk7Cit9 CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY29kZV9pbnNuc190YWJsZXdhbGsoSW5zbiAqaW5z biwgY29uc3QgRGVjdHJlZVRhYmxlICp0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgZW5jb2RpbmcpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdW5zaWduZWQgaW50 IGEsIGI7CisgICAgT3Bjb2RlIG9wYzsKKyAgICBpZiAodGFibGUtPmxvb2t1cF9mdW5jdGlvbikg eworICAgICAgICBpID0gdGFibGUtPmxvb2t1cF9mdW5jdGlvbih0YWJsZS0+c3RhcnRiaXQsIHRh YmxlLT53aWR0aCwgZW5jb2RpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGkgPSBleHRyYWN0 MzIoZW5jb2RpbmcsIHRhYmxlLT5zdGFydGJpdCwgdGFibGUtPndpZHRoKTsKKyAgICB9CisgICAg aWYgKHRhYmxlLT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVfVEFCTEVfTElOSykgeworICAgICAg ICByZXR1cm4gZGVjb2RlX2luc25zX3RhYmxld2FsayhpbnNuLCB0YWJsZS0+dGFibGVbaV0udGFi bGVfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmcp OworICAgIH0gZWxzZSBpZiAodGFibGUtPnRhYmxlW2ldLnR5cGUgPT0gREVDVFJFRV9TVUJJTlNO UykgeworICAgICAgICBhID0gZ2V0X2luc25fYShlbmNvZGluZyk7CisgICAgICAgIGIgPSBnZXRf aW5zbl9iKGVuY29kaW5nKTsKKyAgICAgICAgYiA9IGRlY29kZV9zdWJpbnNuX3RhYmxld2Fsayhp bnNuLCB0YWJsZS0+dGFibGVbaV0udGFibGVfbGlua19iLCBiKTsKKyAgICAgICAgYSA9IGRlY29k ZV9zdWJpbnNuX3RhYmxld2FsayhpbnNuICsgMSwgdGFibGUtPnRhYmxlW2ldLnRhYmxlX2xpbmss IGEpOworICAgICAgICBpZiAoKGEgPT0gMCkgfHwgKGIgPT0gMCkpIHsKKyAgICAgICAgICAgIHJl dHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAyOworICAgIH0gZWxzZSBpZiAodGFi bGUtPnRhYmxlW2ldLnR5cGUgPT0gREVDVFJFRV9URVJNSU5BTCkgeworICAgICAgICBvcGMgPSB0 YWJsZS0+dGFibGVbaV0ub3Bjb2RlOworICAgICAgICBpZiAoKGVuY29kaW5nICYgZGVjb2RlX2l0 YWJsZVtvcGNdLm1hc2spICE9IGRlY29kZV9pdGFibGVbb3BjXS5tYXRjaCkgeworICAgICAgICAg ICAgaWYgKChlbmNvZGluZyAmIGRlY29kZV9sZWdhY3lfaXRhYmxlW29wY10ubWFzaykgIT0KKyAg ICAgICAgICAgICAgICBkZWNvZGVfbGVnYWN5X2l0YWJsZVtvcGNdLm1hdGNoKSB7CisgICAgICAg ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVj b2RlX29wKGluc24sIG9wYywgZW5jb2RpbmcpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVs c2UgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQK K2RlY29kZV9pbnNucyhJbnNuICppbnNuLCB1aW50MzJfdCBlbmNvZGluZykKK3sKKyAgICBjb25z dCBEZWN0cmVlVGFibGUgKnRhYmxlOworICAgIGlmIChwYXJzZV9iaXRzKGVuY29kaW5nKSAhPSAw KSB7CisgICAgICAgIC8qIFN0YXJ0IHdpdGggUFAgdGFibGUgLSAzMiBiaXQgaW5zdHJ1Y3Rpb25z ICovCisgICAgICAgIHRhYmxlID0gJmRlY3RyZWVfdGFibGVfREVDT0RFX1JPT1RfMzI7CisgICAg fSBlbHNlIHsKKyAgICAgICAgLyogc3RhcnQgd2l0aCBFRSB0YWJsZSAtIGR1cGxleCBpbnN0cnVj dGlvbnMgKi8KKyAgICAgICAgdGFibGUgPSAmZGVjdHJlZV90YWJsZV9ERUNPREVfUk9PVF9FRTsK KyAgICB9CisgICAgcmV0dXJuIGRlY29kZV9pbnNuc190YWJsZXdhbGsoaW5zbiwgdGFibGUsIGVu Y29kaW5nKTsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX2FkZF9lbmRsb29wX2luc24oSW5zbiAq aW5zbiwgaW50IGxvb3BudW0pCit7CisgICAgaWYgKGxvb3BudW0gPT0gMTApIHsKKyAgICAgICAg aW5zbi0+b3Bjb2RlID0gSjJfZW5kbG9vcDAxOworICAgICAgICBpbnNuLT5nZW5lcmF0ZSA9IG9w Y29kZV9nZW5wdHJbSjJfZW5kbG9vcDAxXTsKKyAgICB9IGVsc2UgaWYgKGxvb3BudW0gPT0gMSkg eworICAgICAgICBpbnNuLT5vcGNvZGUgPSBKMl9lbmRsb29wMTsKKyAgICAgICAgaW5zbi0+Z2Vu ZXJhdGUgPSBvcGNvZGVfZ2VucHRyW0oyX2VuZGxvb3AxXTsKKyAgICB9IGVsc2UgaWYgKGxvb3Bu dW0gPT0gMCkgeworICAgICAgICBpbnNuLT5vcGNvZGUgPSBKMl9lbmRsb29wMDsKKyAgICAgICAg aW5zbi0+Z2VuZXJhdGUgPSBvcGNvZGVfZ2VucHRyW0oyX2VuZGxvb3AwXTsKKyAgICB9IGVsc2Ug eworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKworc3RhdGljIGlu bGluZSBpbnQgZGVjb2RlX3BhcnNlYml0c19pc19sb29wZW5kKHVpbnQzMl90IGVuY29kaW5nMzIp Cit7CisgICAgdWludDMyX3QgYml0cyA9IHBhcnNlX2JpdHMoZW5jb2RpbmczMik7CisgICAgcmV0 dXJuIGJpdHMgPT0gMHgyOworfQorCitzdGF0aWMgdm9pZAorZGVjb2RlX3NldF9zbG90X251bWJl cihQYWNrZXQgKnBrdCkKK3sKKyAgICBpbnQgc2xvdDsKKyAgICBpbnQgaTsKKyAgICBpbnQgaGl0 X21lbV9pbnNuID0gMDsKKyAgICBpbnQgaGl0X2R1cGxleCA9IDA7CisKKyAgICAvKgorICAgICAq IFRoZSBzbG90cyBhcmUgZW5jb2RlZCBpbiByZXZlcnNlIG9yZGVyCisgICAgICogRm9yIGVhY2gg aW5zdHJ1Y3Rpb24sIGNvdW50IGRvd24gdW50aWwgeW91IGZpbmQgYSBzdWl0YWJsZSBzbG90Cisg ICAgICovCisgICAgZm9yIChpID0gMCwgc2xvdCA9IDM7IGkgPCBwa3QtPm51bV9pbnNuczsgaSsr KSB7CisgICAgICAgIFNsb3RNYXNrIHZhbGlkX3Nsb3RzID0gZ2V0X3ZhbGlkX3Nsb3RzKHBrdCwg aSk7CisKKyAgICAgICAgd2hpbGUgKCEodmFsaWRfc2xvdHMgJiAoMSA8PCBzbG90KSkpIHsKKyAg ICAgICAgICAgIHNsb3QtLTsKKyAgICAgICAgfQorICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9 IHNsb3Q7CisgICAgICAgIGlmIChzbG90KSB7CisgICAgICAgICAgICAvKiBJJ3ZlIGFzc2lnbmVk IHRoZSBzbG90LCBub3cgZGVjcmVtZW50IGl0IGZvciB0aGUgbmV4dCBpbnNuICovCisgICAgICAg ICAgICBzbG90LS07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGaXggdGhlIGV4Y2VwdGlv bnMgLSBtZW0gaW5zbnMgdG8gc2xvdCAwLDEgKi8KKyAgICBmb3IgKGkgPSBwa3QtPm51bV9pbnNu cyAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIC8qIEZpcnN0IG1lbW9yeSBpbnN0cnVjdGlv biBhbHdheXMgZ29lcyB0byBzbG90IDAgKi8KKyAgICAgICAgaWYgKChHRVRfQVRUUklCKHBrdC0+ aW5zbltpXS5vcGNvZGUsIEFfTUVNTElLRSkgfHwKKyAgICAgICAgICAgICBHRVRfQVRUUklCKHBr dC0+aW5zbltpXS5vcGNvZGUsIEFfTUVNTElLRV9QQUNLRVRfUlVMRVMpKSAmJgorICAgICAgICAg ICAgIWhpdF9tZW1faW5zbikgeworICAgICAgICAgICAgaGl0X21lbV9pbnNuID0gMTsKKyAgICAg ICAgICAgIHBrdC0+aW5zbltpXS5zbG90ID0gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICB9CisKKyAgICAgICAgLyogTmV4dCBtZW1vcnkgaW5zdHJ1Y3Rpb24gYWx3YXlzIGdvZXMg dG8gc2xvdCAxICovCisgICAgICAgIGlmICgoR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2Rl LCBBX01FTUxJS0UpIHx8CisgICAgICAgICAgICAgR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bj b2RlLCBBX01FTUxJS0VfUEFDS0VUX1JVTEVTKSkgJiYKKyAgICAgICAgICAgIGhpdF9tZW1faW5z bikgeworICAgICAgICAgICAgcGt0LT5pbnNuW2ldLnNsb3QgPSAxOworICAgICAgICB9CisgICAg fQorCisgICAgLyogRml4IHRoZSBleGNlcHRpb25zIC0gZHVwbGV4IGFsd2F5cyBzbG90IDAsMSAq LworICAgIGZvciAoaSA9IHBrdC0+bnVtX2luc25zIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAg ICAgLyogRmlyc3Qgc3ViaW5zbiBhbHdheXMgZ29lcyB0byBzbG90IDAgKi8KKyAgICAgICAgaWYg KEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9TVUJJTlNOKSAmJiAhaGl0X2R1cGxl eCkgeworICAgICAgICAgICAgaGl0X2R1cGxleCA9IDE7CisgICAgICAgICAgICBwa3QtPmluc25b aV0uc2xvdCA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg IC8qIE5leHQgc3ViaW5zbiBhbHdheXMgZ29lcyB0byBzbG90IDEgKi8KKyAgICAgICAgaWYgKEdF VF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9TVUJJTlNOKSAmJiBoaXRfZHVwbGV4KSB7 CisgICAgICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9IDE7CisgICAgICAgIH0KKyAgICB9CisK KyAgICAvKiBGaXggdGhlIGV4Y2VwdGlvbnMgLSBzbG90IDEgaXMgbmV2ZXIgZW1wdHksIGFsd2F5 cyBhbGlnbnMgdG8gc2xvdCAwICovCisgICAgaW50IHNsb3QwX2ZvdW5kID0gMDsKKyAgICBpbnQg c2xvdDFfZm91bmQgPSAwOworICAgIGludCBzbG90MV9paWR4ID0gMDsKKyAgICBmb3IgKGkgPSBw a3QtPm51bV9pbnNucyAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIC8qIElzIHNsb3QwIHVz ZWQ/ICovCisgICAgICAgIGlmIChwa3QtPmluc25baV0uc2xvdCA9PSAwKSB7CisgICAgICAgICAg ICBpbnQgaXNfZW5kbG9vcCA9IChwa3QtPmluc25baV0ub3Bjb2RlID09IEoyX2VuZGxvb3AwMSk7 CisgICAgICAgICAgICBpc19lbmRsb29wIHw9IChwa3QtPmluc25baV0ub3Bjb2RlID09IEoyX2Vu ZGxvb3AwKTsKKyAgICAgICAgICAgIGlzX2VuZGxvb3AgfD0gKHBrdC0+aW5zbltpXS5vcGNvZGUg PT0gSjJfZW5kbG9vcDEpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTWFrZSBz dXJlIGl0J3Mgbm90IGVuZGxvb3Agc2luY2UsIHdlJ3JlIG92ZXJsb2FkaW5nCisgICAgICAgICAg ICAgKiBzbG90MCBmb3IgZW5kbG9vcAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAo IWlzX2VuZGxvb3ApIHsKKyAgICAgICAgICAgICAgICBzbG90MF9mb3VuZCA9IDE7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogSXMgc2xvdDEgdXNlZD8gKi8KKyAgICAgICAg aWYgKHBrdC0+aW5zbltpXS5zbG90ID09IDEpIHsKKyAgICAgICAgICAgIHNsb3QxX2ZvdW5kID0g MTsKKyAgICAgICAgICAgIHNsb3QxX2lpZHggPSBpOworICAgICAgICB9CisgICAgfQorICAgIC8q IElzIHNsb3QwIGVtcHR5IGFuZCBzbG90MSB1c2VkPyAqLworICAgIGlmICgoc2xvdDBfZm91bmQg PT0gMCkgJiYgKHNsb3QxX2ZvdW5kID09IDEpKSB7CisgICAgICAgIC8qIFRoZW4gcHVzaCBpdCB0 byBzbG90MCAqLworICAgICAgICBwa3QtPmluc25bc2xvdDFfaWlkeF0uc2xvdCA9IDA7CisgICAg fQorfQorCisvKgorICogZGVjb2RlX3BhY2tldAorICogRGVjb2RlcyBwYWNrZXQgd2l0aCBnaXZl biB3b3JkcworICogUmV0dXJucyAwIG9uIGluc3VmZmljaWVudCB3b3JkcywKKyAqIG9yIG51bWJl ciBvZiB3b3JkcyB1c2VkIG9uIHN1Y2Nlc3MKKyAqLworCitpbnQgZGVjb2RlX3BhY2tldChpbnQg bWF4X3dvcmRzLCBjb25zdCB1aW50MzJfdCAqd29yZHMsIFBhY2tldCAqcGt0LAorICAgICAgICAg ICAgICAgICAgYm9vbCBkaXNhc19vbmx5KQoreworICAgIGludCBudW1faW5zbnMgPSAwOworICAg IGludCB3b3Jkc19yZWFkID0gMDsKKyAgICBpbnQgZW5kX29mX3BhY2tldCA9IDA7CisgICAgaW50 IG5ld19pbnNucyA9IDA7CisgICAgdWludDMyX3QgZW5jb2RpbmczMjsKKworICAgIC8qIEluaXRp YWxpemUgKi8KKyAgICBtZW1zZXQocGt0LCAwLCBzaXplb2YoKnBrdCkpOworICAgIC8qIFRyeSB0 byBidWlsZCBwYWNrZXQgKi8KKyAgICB3aGlsZSAoIWVuZF9vZl9wYWNrZXQgJiYgKHdvcmRzX3Jl YWQgPCBtYXhfd29yZHMpKSB7CisgICAgICAgIGVuY29kaW5nMzIgPSB3b3Jkc1t3b3Jkc19yZWFk XTsKKyAgICAgICAgZW5kX29mX3BhY2tldCA9IGlzX3BhY2tldF9lbmQoZW5jb2RpbmczMik7Cisg ICAgICAgIG5ld19pbnNucyA9IGRlY29kZV9pbnNucygmcGt0LT5pbnNuW251bV9pbnNuc10sIGVu Y29kaW5nMzIpOworICAgICAgICAvKgorICAgICAgICAgKiBJZiB3ZSBzYXcgYW4gZXh0ZW5kZXIs IG1hcmsgbmV4dCB3b3JkIGV4dGVuZGVkIHNvIGltbWVkaWF0ZQorICAgICAgICAgKiBkZWNvZGUg d29ya3MKKyAgICAgICAgICovCisgICAgICAgIGlmIChwa3QtPmluc25bbnVtX2luc25zXS5vcGNv ZGUgPT0gQTRfZXh0KSB7CisgICAgICAgICAgICBwa3QtPmluc25bbnVtX2luc25zICsgMV0uZXh0 ZW5zaW9uX3ZhbGlkID0gMTsKKyAgICAgICAgfQorICAgICAgICBudW1faW5zbnMgKz0gbmV3X2lu c25zOworICAgICAgICB3b3Jkc19yZWFkKys7CisgICAgfQorCisgICAgcGt0LT5udW1faW5zbnMg PSBudW1faW5zbnM7CisgICAgaWYgKCFlbmRfb2ZfcGFja2V0KSB7CisgICAgICAgIC8qIFJhbiBv dXQgb2Ygd29yZHMhICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBwa3QtPmVuY29k X3BrdF9zaXplX2luX2J5dGVzID0gd29yZHNfcmVhZCAqIDQ7CisKKyAgICAvKgorICAgICAqIENo ZWNrIGZvciA6ZW5kbG9vcCBpbiB0aGUgcGFyc2UgYml0cworICAgICAqIFNlY3Rpb24gMTAuNiBv ZiB0aGUgUHJvZ3JhbW1lcidzIFJlZmVyZW5jZSBkZXNjcmliZXMgdGhlIGVuY29kaW5nCisgICAg ICogICAgIFRoZSBlbmQgb2YgaGFyZHdhcmUgbG9vcCAwIGNhbiBiZSBlbmNvZGVkIHdpdGggMiB3 b3JkcworICAgICAqICAgICBUaGUgZW5kIG9mIGhhcmR3YXJlIGxvb3AgMSBuZWVkcyAzIHdvcmRz CisgICAgICovCisgICAgaWYgKCh3b3Jkc19yZWFkID09IDIpICYmIChkZWNvZGVfcGFyc2ViaXRz X2lzX2xvb3BlbmQod29yZHNbMF0pKSkgeworICAgICAgICBkZWNvZGVfYWRkX2VuZGxvb3BfaW5z bigmcGt0LT5pbnNuW3BrdC0+bnVtX2luc25zKytdLCAwKTsKKyAgICB9CisgICAgaWYgKHdvcmRz X3JlYWQgPj0gMykgeworICAgICAgICB1aW50MzJfdCBoYXNfbG9vcDAsIGhhc19sb29wMTsKKyAg ICAgICAgaGFzX2xvb3AwID0gZGVjb2RlX3BhcnNlYml0c19pc19sb29wZW5kKHdvcmRzWzBdKTsK KyAgICAgICAgaGFzX2xvb3AxID0gZGVjb2RlX3BhcnNlYml0c19pc19sb29wZW5kKHdvcmRzWzFd KTsKKyAgICAgICAgaWYgKGhhc19sb29wMCAmJiBoYXNfbG9vcDEpIHsKKyAgICAgICAgICAgIGRl Y29kZV9hZGRfZW5kbG9vcF9pbnNuKCZwa3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDEwKTsK KyAgICAgICAgfSBlbHNlIGlmIChoYXNfbG9vcDEpIHsKKyAgICAgICAgICAgIGRlY29kZV9hZGRf ZW5kbG9vcF9pbnNuKCZwa3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDEpOworICAgICAgICB9 IGVsc2UgaWYgKGhhc19sb29wMCkgeworICAgICAgICAgICAgZGVjb2RlX2FkZF9lbmRsb29wX2lu c24oJnBrdC0+aW5zbltwa3QtPm51bV9pbnNucysrXSwgMCk7CisgICAgICAgIH0KKyAgICB9CisK KyAgICBkZWNvZGVfYXBwbHlfZXh0ZW5kZXJzKHBrdCk7CisgICAgaWYgKCFkaXNhc19vbmx5KSB7 CisgICAgICAgIGRlY29kZV9yZW1vdmVfZXh0ZW5kZXJzKHBrdCk7CisgICAgfQorICAgIGRlY29k ZV9zZXRfc2xvdF9udW1iZXIocGt0KTsKKyAgICBkZWNvZGVfZmlsbF9uZXd2YWx1ZV9yZWdubyhw a3QpOworCisgICAgaWYgKCFkaXNhc19vbmx5KSB7CisgICAgICAgIGRlY29kZV9zaHVmZmxlX2Zv cl9leGVjdXRpb24ocGt0KTsKKyAgICAgICAgZGVjb2RlX3NwbGl0X2NtcGp1bXAocGt0KTsKKyAg ICAgICAgZGVjb2RlX3NldF9pbnNuX2F0dHJfZmllbGRzKHBrdCk7CisgICAgfQorCisgICAgcmV0 dXJuIHdvcmRzX3JlYWQ7Cit9Ci0tIAoyLjcuNAoK