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=-9.6 required=3.0 tests=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 427E6C352A4 for ; Tue, 11 Feb 2020 00:55:13 +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 E25482072C for ; Tue, 11 Feb 2020 00:55:12 +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="b/2HT5PH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E25482072C 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]:41736 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1JpW-0007Jo-ML for qemu-devel@archiver.kernel.org; Mon, 10 Feb 2020 19:55:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60266) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1Jc2-0001B5-5h for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1Jbr-00053Q-KO for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:13 -0500 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:59197) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1Jbr-0004rC-9e for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1581381663; x=1612917663; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=X+/nQ45WPkuWHtSjaDsmxAyfy//EFwLCuf15h2SSCg4=; b=b/2HT5PH/lfPEb1WIa9t0Z+lxur29SrLcl28+sS+VNi+zCXFQgPxlz1C DQcFREyF9o/NdjeQOxqvio2E4ZfaQEhzXoXHohyDLnjbgtIj1HrFClKtL FZzmJqH5sXgTz4no7wnU45qZ5DT8uYXQMBPH8mhHTE60RqoWwH2RH8e2v M=; Received: from unknown (HELO ironmsg02-sd.qualcomm.com) ([10.53.140.142]) by alexa-out-sd-02.qualcomm.com with ESMTP; 10 Feb 2020 16:40:59 -0800 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg02-sd.qualcomm.com with ESMTP; 10 Feb 2020 16:40:58 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 487061B53; Mon, 10 Feb 2020 18:40:58 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH 13/66] Hexagon instruction/packet decode Date: Mon, 10 Feb 2020 18:39:51 -0600 Message-Id: <1581381644-13678-14-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1581381644-13678-1-git-send-email-tsimpson@quicinc.com> References: <1581381644-13678-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 199.106.114.39 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: riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, Taylor Simpson , philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGFrZSB0aGUgd29yZHMgZnJvbSBpbnN0cnVjdGlvbiBtZW1vcnkgYW5kIGJ1aWxkIGEgcGFja2V0 X3QgZm9yIFRDRyBjb2RlCmdlbmVyYXRpb24KClRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUg cGVyZm9ybWVkCiAgICBDb252ZXJ0IHRoZSAubmV3IGVuY29kZWQgb2Zmc2V0IHRvIHRoZSByZWdp c3RlciBudW1iZXIgb2YgdGhlIHByb2R1Y2VyCiAgICBSZW9yZGVyIHRoZSBpbnN0cnVjdGlvbnMg aW4gdGhlIHBhY2tldCBzbyAubmV3IHByb2R1Y2VyIGlzIGJlZm9yZSBjb25zdW1lcgogICAgQXBw bHkgY29uc3RhbnQgZXh0ZW5kZXJzCiAgICBTZXBhcmF0ZSBzdWJpbnNuJ3MgaW50byB0d28gaW5z dHJ1Y3Rpb25zCiAgICBCcmVhayBjb21wYXJlLWp1bXBzIGludG8gdHdvIGluc3RydWN0aW9ucwog ICAgQ3JlYXRlIGluc3RydWN0aW9ucyBmb3IgOmVuZGxvb3AKClNpZ25lZC1vZmYtYnk6IFRheWxv ciBTaW1wc29uIDx0c2ltcHNvbkBxdWljaW5jLmNvbT4KLS0tCiB0YXJnZXQvaGV4YWdvbi9kZWNv ZGUuYyAgICAgfCA3NzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIHRhcmdldC9oZXhhZ29uL2RlY29kZS5oICAgICB8ICAzOSArKysKIHRhcmdldC9oZXhhZ29u L3E2dl9kZWNvZGUuYyB8IDQwMiArKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFu Z2VkLCAxMjE0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdv bi9kZWNvZGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL2RlY29kZS5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vcTZ2X2RlY29kZS5jCgpkaWZmIC0tZ2l0 IGEvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMgYi90YXJnZXQvaGV4YWdvbi9kZWNvZGUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDc0YTI1Ci0tLSAvZGV2L251bGwKKysr IGIvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMKQEAgLTAsMCArMSw3NzMgQEAKKy8qCisgKiAgQ29w eXJpZ2h0IChjKSAyMDE5IFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIK KyNpbmNsdWRlICJxZW11L2xvZy5oIgorI2luY2x1ZGUgImljbGFzcy5oIgorI2luY2x1ZGUgIm9w Y29kZXMuaCIKKyNpbmNsdWRlICJnZW5wdHIuaCIKKyNpbmNsdWRlICJkZWNvZGUuaCIKKyNpbmNs dWRlICJpbnNuLmgiCisjaW5jbHVkZSAibWFjcm9zLmgiCisjaW5jbHVkZSAicHJpbnRpbnNuLmgi CisKK2VudW0geworICAgIEVYVF9JRFhfbm9leHQgPSAwLAorICAgIEVYVF9JRFhfbm9leHRfQUZU RVIgPSA0LAorICAgIEVYVF9JRFhfbW12ZWMgPSA0LAorICAgIEVYVF9JRFhfbW12ZWNfQUZURVIg PSA4LAorICAgIFhYX0xBU1RfRVhUX0lEWAorfTsKKworI2RlZmluZSBERUZfUkVHTUFQKE5BTUUs IEVMRU1FTlRTLCAuLi4pIFwKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IERFQ09ERV9S RUdJU1RFUl8jI05BTUVbRUxFTUVOVFNdID0gXAorICAgIHsgX19WQV9BUkdTX18gfTsKKyNpbmNs dWRlICJyZWdtYXAuaCIKKworI2RlZmluZSBERUNPREVfTUFQUEVEX1JFRyhSRUdOTywgTkFNRSkg XAorICAgIGluc24tPnJlZ25vW1JFR05PXSA9IERFQ09ERV9SRUdJU1RFUl8jI05BTUVbaW5zbi0+ cmVnbm9bUkVHTk9dXTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHN0cnVjdCBfZGVjdHJlZV90 YWJsZV9zdHJ1Y3QgKnRhYmxlX2xpbms7CisgICAgc3RydWN0IF9kZWN0cmVlX3RhYmxlX3N0cnVj dCAqdGFibGVfbGlua19iOworICAgIG9wY29kZV90IG9wY29kZTsKKyAgICBlbnVtIHsKKyAgICAg ICAgREVDVFJFRV9FTlRSWV9JTlZBTElELAorICAgICAgICBERUNUUkVFX1RBQkxFX0xJTkssCisg ICAgICAgIERFQ1RSRUVfU1VCSU5TTlMsCisgICAgICAgIERFQ1RSRUVfRVhUU1BBQ0UsCisgICAg ICAgIERFQ1RSRUVfVEVSTUlOQUwKKyAgICB9IHR5cGU7Cit9IGRlY3RyZWVfZW50cnlfdDsKKwor dHlwZWRlZiBzdHJ1Y3QgX2RlY3RyZWVfdGFibGVfc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQg KCpsb29rdXBfZnVuY3Rpb24pKGludCBzdGFydGJpdCwgaW50IHdpZHRoLCBzaXplNHVfdCBvcGNv ZGUpOworICAgIHVuc2lnbmVkIGludCBzaXplOworICAgIHVuc2lnbmVkIGludCBzdGFydGJpdDsK KyAgICB1bnNpZ25lZCBpbnQgd2lkdGg7CisgICAgZGVjdHJlZV9lbnRyeV90IHRhYmxlW107Cit9 IGRlY3RyZWVfdGFibGVfdDsKKworI2RlZmluZSBERUNPREVfTkVXX1RBQkxFKFRBRywgU0laRSwg V0hBVE5PVCkgXAorICAgIHN0YXRpYyBzdHJ1Y3QgX2RlY3RyZWVfdGFibGVfc3RydWN0IGRlY3Ry ZWVfdGFibGVfIyNUQUc7CisjZGVmaW5lIFRBQkxFX0xJTksoVEFCTEUpICAgICAgICAgICAgICAg ICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBURVJNSU5BTChUQUcsIEVOQykgICAgICAgICAg ICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgU1VCSU5TTlMoVEFHLCBDTEFTU0EsIENM QVNTQiwgRU5DKSAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIEVYVFNQQUNFKFRBRywgRU5DKSAg ICAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBJTlZBTElEKCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX0VORF9U QUJMRSguLi4pICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09ERV9N QVRDSF9JTkZPKC4uLikgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNP REVfTEVHQUNZX01BVENIX0lORk8oLi4uKSAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUg REVDT0RFX09QSU5GTyguLi4pICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisKKyNp bmNsdWRlICJkZWN0cmVlX2dlbmVyYXRlZC5oIgorCisjdW5kZWYgREVDT0RFX09QSU5GTworI3Vu ZGVmIERFQ09ERV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisj dW5kZWYgREVDT0RFX0VORF9UQUJMRQorI3VuZGVmIElOVkFMSUQKKyN1bmRlZiBURVJNSU5BTAor I3VuZGVmIFNVQklOU05TCisjdW5kZWYgRVhUU1BBQ0UKKyN1bmRlZiBUQUJMRV9MSU5LCisjdW5k ZWYgREVDT0RFX05FV19UQUJMRQorI3VuZGVmIERFQ09ERV9TRVBBUkFUT1JfQklUUworCisjZGVm aW5lIERFQ09ERV9TRVBBUkFUT1JfQklUUyhTVEFSVCwgV0lEVEgpIE5VTEwsIFNUQVJULCBXSURU SAorI2RlZmluZSBERUNPREVfTkVXX1RBQkxFX0hFTFBFUihUQUcsIFNJWkUsIEZOLCBTVEFSVCwg V0lEVEgpIFwKKyAgICBzdGF0aWMgZGVjdHJlZV90YWJsZV90IGRlY3RyZWVfdGFibGVfIyNUQUcg PSB7IFwKKyAgICAgICAgLnNpemUgPSBTSVpFLCBcCisgICAgICAgIC5sb29rdXBfZnVuY3Rpb24g PSBGTiwgXAorICAgICAgICAuc3RhcnRiaXQgPSBTVEFSVCwgXAorICAgICAgICAud2lkdGggPSBX SURUSCwgXAorICAgICAgICAudGFibGUgPSB7CisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFH LCBTSVpFLCBXSEFUTk9UKSBcCisgICAgREVDT0RFX05FV19UQUJMRV9IRUxQRVIoVEFHLCBTSVpF LCBXSEFUTk9UKQorCisjZGVmaW5lIFRBQkxFX0xJTksoVEFCTEUpIFwKKyAgICB7IC50eXBlID0g REVDVFJFRV9UQUJMRV9MSU5LLCAudGFibGVfbGluayA9ICZkZWN0cmVlX3RhYmxlXyMjVEFCTEUg fSwKKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBFTkMpIFwKKyAgICB7IC50eXBlID0gREVDVFJFRV9U RVJNSU5BTCwgLm9wY29kZSA9IFRBRyAgfSwKKyNkZWZpbmUgU1VCSU5TTlMoVEFHLCBDTEFTU0Es IENMQVNTQiwgRU5DKSBcCisgICAgeyBcCisgICAgICAgIC50eXBlID0gREVDVFJFRV9TVUJJTlNO UywgXAorICAgICAgICAudGFibGVfbGluayA9ICZkZWN0cmVlX3RhYmxlX0RFQ09ERV9TVUJJTlNO XyMjQ0xBU1NBLCBcCisgICAgICAgIC50YWJsZV9saW5rX2IgPSAmZGVjdHJlZV90YWJsZV9ERUNP REVfU1VCSU5TTl8jI0NMQVNTQiBcCisgICAgfSwKKyNkZWZpbmUgRVhUU1BBQ0UoVEFHLCBFTkMp IHsgLnR5cGUgPSBERUNUUkVFX0VYVFNQQUNFIH0sCisjZGVmaW5lIElOVkFMSUQoKSB7IC50eXBl ID0gREVDVFJFRV9FTlRSWV9JTlZBTElELCAub3Bjb2RlID0gWFhfTEFTVF9PUENPREUgfSwKKwor I2RlZmluZSBERUNPREVfRU5EX1RBQkxFKC4uLikgfSB9OworCisjZGVmaW5lIERFQ09ERV9NQVRD SF9JTkZPKC4uLikgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVf TEVHQUNZX01BVENIX0lORk8oLi4uKSAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVD T0RFX09QSU5GTyguLi4pICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisKKyNpbmNs dWRlICJkZWN0cmVlX2dlbmVyYXRlZC5oIgorCisjdW5kZWYgREVDT0RFX09QSU5GTworI3VuZGVm IERFQ09ERV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisjdW5k ZWYgREVDT0RFX0VORF9UQUJMRQorI3VuZGVmIElOVkFMSUQKKyN1bmRlZiBURVJNSU5BTAorI3Vu ZGVmIFNVQklOU05TCisjdW5kZWYgRVhUU1BBQ0UKKyN1bmRlZiBUQUJMRV9MSU5LCisjdW5kZWYg REVDT0RFX05FV19UQUJMRQorI3VuZGVmIERFQ09ERV9ORVdfVEFCTEVfSEVMUEVSCisjdW5kZWYg REVDT0RFX1NFUEFSQVRPUl9CSVRTCisKK3N0YXRpYyBkZWN0cmVlX3RhYmxlX3QgZGVjdHJlZV90 YWJsZV9ERUNPREVfRVhUX0VYVF9ub2V4dCA9IHsKKyAgICAuc2l6ZSA9IDEsIC5sb29rdXBfZnVu Y3Rpb24gPSBOVUxMLCAuc3RhcnRiaXQgPSAwLCAud2lkdGggPSAwLAorICAgIC50YWJsZSA9IHsK KyAgICAgICAgeyAudHlwZSA9IERFQ1RSRUVfRU5UUllfSU5WQUxJRCwgLm9wY29kZSA9IFhYX0xB U1RfT1BDT0RFIH0sCisgICAgfQorfTsKKworc3RhdGljIGRlY3RyZWVfdGFibGVfdCAqZXh0X3Ry ZWVzW1hYX0xBU1RfRVhUX0lEWF07CisKK3N0YXRpYyB2b2lkIGRlY29kZV9leHRfaW5pdCh2b2lk KQoreworICAgIGludCBpOworICAgIGZvciAoaSA9IEVYVF9JRFhfbm9leHQ7IGkgPCBFWFRfSURY X25vZXh0X0FGVEVSOyBpKyspIHsKKyAgICAgICAgZXh0X3RyZWVzW2ldID0gJmRlY3RyZWVfdGFi bGVfREVDT0RFX0VYVF9FWFRfbm9leHQ7CisgICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7Cisg ICAgc2l6ZTR1X3QgbWFzazsKKyAgICBzaXplNHVfdCBtYXRjaDsKK30gZGVjb2RlX2l0YWJsZV9l bnRyeV90OworCisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBXSEFUTk9UKSAg LyogTk9USElORyAqLworI2RlZmluZSBUQUJMRV9MSU5LKFRBQkxFKSAgICAgICAgICAgICAgICAg ICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBFTkMpICAgICAgICAgICAg ICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIFNVQklOU05TKFRBRywgQ0xBU1NBLCBDTEFT U0IsIEVOQykgICAgLyogTk9USElORyAqLworI2RlZmluZSBFWFRTUEFDRShUQUcsIEVOQykgICAg ICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgSU5WQUxJRCgpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09ERV9FTkRfVEFC TEUoLi4uKSAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfT1BJ TkZPKC4uLikgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKworI2RlZmluZSBERUNP REVfTUFUQ0hfSU5GT19OT1JNQUwoVEFHLCBNQVNLLCBNQVRDSCkgXAorICAgIFtUQUddID0geyBc CisgICAgICAgIC5tYXNrID0gTUFTSywgXAorICAgICAgICAubWF0Y2ggPSBNQVRDSCwgXAorICAg IH0sCisKKyNkZWZpbmUgREVDT0RFX01BVENIX0lORk9fTlVMTChUQUcsIE1BU0ssIE1BVENIKSBc CisgICAgW1RBR10gPSB7IC5tYXRjaCA9IH4wIH0sCisKKyNkZWZpbmUgREVDT0RFX01BVENIX0lO Rk8oLi4uKSBERUNPREVfTUFUQ0hfSU5GT19OT1JNQUwoX19WQV9BUkdTX18pCisjZGVmaW5lIERF Q09ERV9MRUdBQ1lfTUFUQ0hfSU5GTyguLi4pIC8qIE5PVEhJTkcgKi8KKworc3RhdGljIGNvbnN0 IGRlY29kZV9pdGFibGVfZW50cnlfdCBkZWNvZGVfaXRhYmxlW1hYX0xBU1RfT1BDT0RFXSA9IHsK KyNpbmNsdWRlICJkZWN0cmVlX2dlbmVyYXRlZC5oIgorfTsKKworI3VuZGVmIERFQ09ERV9NQVRD SF9JTkZPCisjZGVmaW5lIERFQ09ERV9NQVRDSF9JTkZPKC4uLikgREVDT0RFX01BVENIX0lORk9f TlVMTChfX1ZBX0FSR1NfXykKKworI3VuZGVmIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTworI2Rl ZmluZSBERUNPREVfTEVHQUNZX01BVENIX0lORk8oLi4uKSBERUNPREVfTUFUQ0hfSU5GT19OT1JN QUwoX19WQV9BUkdTX18pCisKK3N0YXRpYyBjb25zdCBkZWNvZGVfaXRhYmxlX2VudHJ5X3QgZGVj b2RlX2xlZ2FjeV9pdGFibGVbWFhfTEFTVF9PUENPREVdID0geworI2luY2x1ZGUgImRlY3RyZWVf Z2VuZXJhdGVkLmgiCit9OworCisjdW5kZWYgREVDT0RFX09QSU5GTworI3VuZGVmIERFQ09ERV9N QVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RF X0VORF9UQUJMRQorI3VuZGVmIElOVkFMSUQKKyN1bmRlZiBURVJNSU5BTAorI3VuZGVmIFNVQklO U05TCisjdW5kZWYgRVhUU1BBQ0UKKyN1bmRlZiBUQUJMRV9MSU5LCisjdW5kZWYgREVDT0RFX05F V19UQUJMRQorI3VuZGVmIERFQ09ERV9TRVBBUkFUT1JfQklUUworCit2b2lkIGRlY29kZV9pbml0 KHZvaWQpCit7CisgICAgZGVjb2RlX2V4dF9pbml0KCk7Cit9CisKK3ZvaWQgZGVjb2RlX3NlbmRf aW5zbl90byhwYWNrZXRfdCAqcGFja2V0LCBpbnQgc3RhcnQsIGludCBuZXdsb2MpCit7CisgICAg aW5zbl90IHRtcGluc247CisgICAgaW50IGRpcmVjdGlvbjsKKyAgICBpbnQgaTsKKyAgICBpZiAo c3RhcnQgPT0gbmV3bG9jKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0YXJ0 IDwgbmV3bG9jKSB7CisgICAgICAgIC8qIE1vdmUgdG93YXJkcyBlbmQgKi8KKyAgICAgICAgZGly ZWN0aW9uID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBtb3ZlIHRvd2FyZHMgYmVnaW5u aW5nICovCisgICAgICAgIGRpcmVjdGlvbiA9IC0xOworICAgIH0KKyAgICBmb3IgKGkgPSBzdGFy dDsgaSAhPSBuZXdsb2M7IGkgKz0gZGlyZWN0aW9uKSB7CisgICAgICAgIHRtcGluc24gPSBwYWNr ZXQtPmluc25baV07CisgICAgICAgIHBhY2tldC0+aW5zbltpXSA9IHBhY2tldC0+aW5zbltpICsg ZGlyZWN0aW9uXTsKKyAgICAgICAgcGFja2V0LT5pbnNuW2kgKyBkaXJlY3Rpb25dID0gdG1waW5z bjsKKyAgICB9Cit9CisKKy8qIEZpbGwgbmV3dmFsdWUgcmVnaXN0ZXJzIHdpdGggdGhlIGNvcnJl Y3QgcmVnbm8gKi8KK3N0YXRpYyBpbnQKK2RlY29kZV9maWxsX25ld3ZhbHVlX3JlZ25vKHBhY2tl dF90ICpwYWNrZXQpCit7CisgICAgaW50IGksIGRlZl9yZWdudW0sIHVzZV9yZWdpZHgsIGRlZl9p ZHg7CisgICAgc2l6ZTJ1X3QgZGVmX29wY29kZSwgdXNlX29wY29kZTsKKyAgICBjaGFyICpkc3Rz dHI7CisKKyAgICBmb3IgKGkgPSAxOyBpIDwgcGFja2V0LT5udW1faW5zbnM7IGkrKykgeworICAg ICAgICBpZiAoR0VUX0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX0RPVE5FV1ZBTFVF KSAmJgorICAgICAgICAgICAgIUdFVF9BVFRSSUIocGFja2V0LT5pbnNuW2ldLm9wY29kZSwgQV9F WFRFTlNJT04pKSB7CisgICAgICAgICAgICB1c2Vfb3Bjb2RlID0gcGFja2V0LT5pbnNuW2ldLm9w Y29kZTsKKworICAgICAgICAgICAgLyogSXQncyBhIHN0b3JlLCBzbyB3ZSdyZSBhZGp1c3Rpbmcg dGhlIE50IGZpZWxkICovCisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQih1c2Vfb3Bjb2RlLCBB X1NUT1JFKSkgeworICAgICAgICAgICAgICAgIHVzZV9yZWdpZHggPSBzdHJjaHIob3Bjb2RlX3Jl Z2luZm9bdXNlX29wY29kZV0sICd0JykgLQorICAgICAgICAgICAgICAgICAgICBvcGNvZGVfcmVn aW5mb1t1c2Vfb3Bjb2RlXTsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgIC8qIEl0J3MgYSBKdW1w LCBzbyB3ZSdyZSBhZGp1c3RpbmcgdGhlIE5zIGZpZWxkICovCisgICAgICAgICAgICAgICAgdXNl X3JlZ2lkeCA9IHN0cmNocihvcGNvZGVfcmVnaW5mb1t1c2Vfb3Bjb2RlXSwgJ3MnKSAtCisgICAg ICAgICAgICAgICAgICAgIG9wY29kZV9yZWdpbmZvW3VzZV9vcGNvZGVdOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2hhdCdzIGVuY29kZWQgYXQgdGhl IE4tZmllbGQgaXMgdGhlIG9mZnNldCB0byB3aG8ncyBwcm9kdWNpbmcKKyAgICAgICAgICAgICAq IHRoZSB2YWx1ZS4gIFNoaWZ0IG9mZiB0aGUgTFNCIHdoaWNoIGluZGljYXRlcyBvZGQvZXZlbiBy ZWdpc3Rlci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZGVmX2lkeCA9IGkgLSAoKHBh Y2tldC0+aW5zbltpXS5yZWdub1t1c2VfcmVnaWR4XSkgPj4gMSk7CisKKyAgICAgICAgICAgIC8q CisgICAgICAgICAgICAgKiBDaGVjayBmb3IgYSBiYWRseSBlbmNvZGVkIE4tZmllbGQgd2hpY2gg cG9pbnRzIHRvIGFuIGluc3RydWN0aW9uCisgICAgICAgICAgICAgKiBvdXQtb2YtcmFuZ2UKKyAg ICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKChkZWZfaWR4IDwgMCkgfHwgKGRlZl9pZHgg PiAocGFja2V0LT5udW1faW5zbnMgLSAxKSkpIHsKKyAgICAgICAgICAgICAgICBnX2Fzc2VydF9u b3RfcmVhY2hlZCgpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQor CisgICAgICAgICAgICAvKiBwcmV2aW91cyBpbnNuIGlzIHRoZSBwcm9kdWNlciAqLworICAgICAg ICAgICAgZGVmX29wY29kZSA9IHBhY2tldC0+aW5zbltkZWZfaWR4XS5vcGNvZGU7CisgICAgICAg ICAgICBkc3RzdHIgPSBzdHJzdHIob3Bjb2RlX3dyZWdzW2RlZl9vcGNvZGVdLCAiUmQiKTsKKyAg ICAgICAgICAgIGlmIChkc3RzdHIpIHsKKyAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJjaHIo b3Bjb2RlX3JlZ2luZm9bZGVmX29wY29kZV0sICdkJyk7CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIGRzdHN0ciA9IHN0cnN0cihvcGNvZGVfd3JlZ3NbZGVmX29wY29kZV0s ICJSeCIpOworICAgICAgICAgICAgICAgIGlmIChkc3RzdHIpIHsKKyAgICAgICAgICAgICAgICAg ICAgZHN0c3RyID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW2RlZl9vcGNvZGVdLCAneCcpOworICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRzdHN0ciA9IHN0cnN0 cihvcGNvZGVfd3JlZ3NbZGVmX29wY29kZV0sICJSZSIpOworICAgICAgICAgICAgICAgICAgICBp ZiAoZHN0c3RyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJjaHIob3Bj b2RlX3JlZ2luZm9bZGVmX29wY29kZV0sICdlJyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJzdHIob3Bjb2RlX3dyZWdz W2RlZl9vcGNvZGVdLCAiUnkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkc3RzdHIp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJjaHIob3Bjb2RlX3Jl Z2luZm9bZGVmX29wY29kZV0sICd5Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBnX2Fzc2VydChkc3RzdHIgIT0gTlVMTCk7CisgICAgICAgICAg ICBkZWZfcmVnbnVtID0KKyAgICAgICAgICAgICAgICBwYWNrZXQtPmluc25bZGVmX2lkeF0ucmVn bm9bZHN0c3RyIC0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX3JlZ2luZm9bZGVmX29wY29k ZV1dOworCisgICAgICAgICAgICAvKiBOb3cgcGF0Y2ggdXAgdGhlIGNvbnN1bWVyIHdpdGggdGhl IHJlZ2lzdGVyIG51bWJlciAqLworICAgICAgICAgICAgcGFja2V0LT5pbnNuW2ldLnJlZ25vW3Vz ZV9yZWdpZHhdID0gZGVmX3JlZ251bTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBX ZSBuZWVkIHRvIHJlbWVtYmVyIHdobyBwcm9kdWNlcyB0aGlzIHZhbHVlIHRvIGxhdGVyCisgICAg ICAgICAgICAgKiBjaGVjayBpZiBpdCB3YXMgZHluYW1pY2FsbHkgY2FuY2VsbGVkCisgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgIHBhY2tldC0+aW5zbltpXS5uZXdfdmFsdWVfcHJvZHVjZXJf c2xvdCA9CisgICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2RlZl9pZHhdLnNsb3Q7CisgICAg ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFNwbGl0IENKIGludG8gYSBjb21w YXJlIGFuZCBhIGp1bXAgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX3NwbGl0X2NtcGp1bXAocGFja2V0 X3QgKnBrdCkKK3sKKyAgICBpbnQgbGFzdCwgaTsKKyAgICBpbnQgbnVtaW5zbnMgPSBwa3QtPm51 bV9pbnNuczsKKworICAgIC8qCisgICAgICogRmlyc3QsIHNwbGl0IGFsbCBjb21wYXJlLWp1bXBz LgorICAgICAqIFRoZSBjb21wYXJlIGlzIHNlbnQgdG8gdGhlIGVuZCBhcyBhIG5ldyBpbnN0cnVj dGlvbi4KKyAgICAgKiBEbyBpdCB0aGlzIHdheSBzbyB3ZSBkb24ndCByZW9yZGVyIGR1YWwganVt cHMuIFRob3NlIG5lZWQgdG8gc3RheSBpbgorICAgICAqIG9yaWdpbmFsIG9yZGVyLgorICAgICAq LworICAgIGZvciAoaSA9IDA7IGkgPCBudW1pbnNuczsgaSsrKSB7CisgICAgICAgIC8qIEl0J3Mg YSBjbXAtanVtcCAqLworICAgICAgICBpZiAoR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2Rl LCBBX05FV0NNUEpVTVApKSB7CisgICAgICAgICAgICBsYXN0ID0gcGt0LT5udW1faW5zbnM7Cisg ICAgICAgICAgICBwa3QtPmluc25bbGFzdF0gPSBwa3QtPmluc25baV07ICAgIC8qIGNvcHkgdGhl IGluc3RydWN0aW9uICovCisgICAgICAgICAgICBwa3QtPmluc25bbGFzdF0ucGFydDEgPSAxOyAg ICAvKiBsYXN0IGluc3RydWN0aW9uIGRvZXMgdGhlIENNUCAqLworICAgICAgICAgICAgcGt0LT5p bnNuW2ldLnBhcnQxID0gMDsgICAgLyogZXhpc3RpbmcgaW5zdHJ1Y3Rpb24gZG9lcyB0aGUgSlVN UCAqLworICAgICAgICBwa3QtPm51bV9pbnNucysrOworICAgICAgICB9CisgICAgfQorCisgICAg LyogTm93IHJlLXNodWZmbGUgYWxsIHRoZSBjb21wYXJlcyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcg Ki8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcGt0LT5udW1faW5zbnM7IGkrKykgeworICAgICAgICBp ZiAocGt0LT5pbnNuW2ldLnBhcnQxKSB7CisgICAgICAgICAgICBkZWNvZGVfc2VuZF9pbnNuX3Rv KHBrdCwgaSwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50IGRlY29kZV9vcGNvZGVfY2FuX2p1bXAoaW50IG9wY29kZSkKK3sKKyAgICBp ZiAoKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0pVTVApKSB8fAorICAgICAgICAoR0VUX0FUVFJJQihv cGNvZGUsIEFfQ0FMTCkpIHx8CisgICAgICAgIChvcGNvZGUgPT0gSjJfdHJhcDApIHx8CisgICAg ICAgIChvcGNvZGUgPT0gSjJfdHJhcDEpIHx8CisgICAgICAgIChvcGNvZGUgPT0gSjJfcnRlKSB8 fAorICAgICAgICAob3Bjb2RlID09IEoyX3BhdXNlKSkgeworICAgICAgICAvKiBFeGNlcHRpb24g dG8gQV9KVU1QIGF0dHJpYnV0ZSAqLworICAgICAgICBpZiAob3Bjb2RlID09IEo0X2hpbnRqdW1w cikgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE7 CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRlY29kZV9v cGNvZGVfZW5kc19sb29wKGludCBvcGNvZGUpCit7CisgICAgcmV0dXJuIEdFVF9BVFRSSUIob3Bj b2RlLCBBX0hXTE9PUDBfRU5EKSB8fAorICAgICAgICAgICBHRVRfQVRUUklCKG9wY29kZSwgQV9I V0xPT1AxX0VORCk7Cit9CisKKy8qIFNldCB0aGUgaXNfKiBmaWVsZHMgaW4gZWFjaCBpbnN0cnVj dGlvbiAqLworc3RhdGljIGludCBkZWNvZGVfc2V0X2luc25fYXR0cl9maWVsZHMocGFja2V0X3Qg KnBrdCkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgbnVtaW5zbnMgPSBwa3QtPm51bV9pbnNuczsK KyAgICBzaXplMnVfdCBvcGNvZGU7CisgICAgaW50IGxvYWRzID0gMDsKKyAgICBpbnQgc3RvcmVz ID0gMDsKKyAgICBpbnQgY2FuanVtcDsKKyAgICBpbnQgdG90YWxfc2xvdHNfdmFsaWQgPSAwOwor CisgICAgcGt0LT5udW1fcm9wcyA9IDA7CisgICAgcGt0LT5wa3RfaGFzX2NvZiA9IDA7CisgICAg cGt0LT5wa3RfaGFzX2NhbGwgPSAwOworICAgIHBrdC0+cGt0X2hhc19qdW1wciA9IDA7CisgICAg cGt0LT5wa3RfaGFzX2NqdW1wID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfY2p1bXBfZG90bmV3ID0g MDsKKyAgICBwa3QtPnBrdF9oYXNfY2p1bXBfZG90b2xkID0gMDsKKyAgICBwa3QtPnBrdF9oYXNf Y2p1bXBfbmV3dmFsID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcCA9IDA7CisgICAgcGt0 LT5wa3RfaGFzX2VuZGxvb3AwID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcDAxID0gMDsK KyAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcDEgPSAwOworICAgIHBrdC0+cGt0X2hhc19jYWNoZW9w ID0gMDsKKyAgICBwa3QtPm1lbW9wX29yX252c3RvcmUgPSAwOworICAgIHBrdC0+cGt0X2hhc19k Y3plcm9hID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfZGVhbGxvY19yZXR1cm4gPSAwOworCisgICAg Zm9yIChpID0gMDsgaSA8IG51bWluc25zOyBpKyspIHsKKyAgICAgICAgb3Bjb2RlID0gcGt0LT5p bnNuW2ldLm9wY29kZTsKKyAgICAgICAgaWYgKHBrdC0+aW5zbltpXS5wYXJ0MSkgeworICAgICAg ICAgICAgY29udGludWU7ICAgIC8qIFNraXAgY29tcGFyZSBvZiBjbXAtanVtcHMgKi8KKyAgICAg ICAgfQorCisgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9ST1BTXzMpKSB7CisgICAg ICAgICAgICBwa3QtPm51bV9yb3BzICs9IDM7CisgICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJ QihvcGNvZGUsIEFfUk9QU18yKSkgeworICAgICAgICAgICAgcGt0LT5udW1fcm9wcyArPSAyOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGt0LT5udW1fcm9wcysrOworICAgICAgICB9 CisgICAgICAgIGlmIChwa3QtPmluc25baV0uZXh0ZW5zaW9uX3ZhbGlkKSB7CisgICAgICAgICAg ICBwa3QtPm51bV9yb3BzICs9IDI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoR0VUX0FUVFJJ QihvcGNvZGUsIEFfTUVNT1ApIHx8CisgICAgICAgICAgICBHRVRfQVRUUklCKG9wY29kZSwgQV9O VlNUT1JFKSkgeworICAgICAgICAgICAgcGt0LT5tZW1vcF9vcl9udnN0b3JlID0gMTsKKyAgICAg ICAgfQorCisgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9DQUNIRU9QKSkgeworICAg ICAgICAgICAgcGt0LT5wa3RfaGFzX2NhY2hlb3AgPSAxOworICAgICAgICAgICAgaWYgKEdFVF9B VFRSSUIob3Bjb2RlLCBBX0RDWkVST0EpKSB7CisgICAgICAgICAgICAgICAgcGt0LT5wa3RfaGFz X2RjemVyb2EgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKEdFVF9BVFRSSUIo b3Bjb2RlLCBBX0lDVEFHT1ApKSB7CisgICAgICAgICAgICAgICAgcGt0LT5wa3RfaGFzX2ljdGFn b3AgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2Rl LCBBX0lDRkxVU0hPUCkpIHsKKyAgICAgICAgICAgICAgICBwa3QtPnBrdF9oYXNfaWNmbHVzaG9w ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwg QV9EQ1RBR09QKSkgeworICAgICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19kY3RhZ29wID0gMTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9EQ0ZM VVNIT1ApKSB7CisgICAgICAgICAgICAgICAgcGt0LT5wa3RfaGFzX2RjZmx1c2hvcCA9IDE7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfTDJUQUdP UCkpIHsKKyAgICAgICAgICAgICAgICBwa3QtPnBrdF9oYXNfbDJ0YWdvcCA9IDE7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfTDJGTFVTSE9QKSkg eworICAgICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19sMmZsdXNob3AgPSAxOworICAgICAgICAg ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RFQUxM T0NSRVQpKSB7CisgICAgICAgICAgICBwa3QtPnBrdF9oYXNfZGVhbGxvY19yZXR1cm4gPSAxOwor ICAgICAgICB9CisKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX1NUT1JFKSkgewor ICAgICAgICAgICAgcGt0LT5pbnNuW2ldLmlzX3N0b3JlID0gMTsKKworICAgICAgICAgICAgaWYg KHBrdC0+aW5zbltpXS5zbG90ID09IDApIHsKKyAgICAgICAgICAgICAgICBwa3QtPnBrdF9oYXNf c3RvcmVfczAgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwa3Qt PnBrdF9oYXNfc3RvcmVfczEgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9EQ0ZFVENIKSkgeworICAgICAgICAgICAgcGt0LT5p bnNuW2ldLmlzX2RjZmV0Y2ggPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChHRVRfQVRUUklC KG9wY29kZSwgQV9MT0FEKSkgeworICAgICAgICAgICAgcGt0LT5pbnNuW2ldLmlzX2xvYWQgPSAx OworCisgICAgICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnNsb3QgPT0gMCkgeworICAgICAgICAg ICAgICAgIHBrdC0+cGt0X2hhc19sb2FkX3MwID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgcGt0LT5wa3RfaGFzX2xvYWRfczEgPSAxOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9NRU1PUCkpIHsKKyAg ICAgICAgICAgIHBrdC0+aW5zbltpXS5pc19tZW1vcCA9IDE7CisgICAgICAgIH0KKyAgICAgICAg aWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RFQUxMT0NSRVQpIHx8CisgICAgICAgICAgICBHRVRf QVRUUklCKG9wY29kZSwgQV9ERUFMTE9DRlJBTUUpKSB7CisgICAgICAgICAgICBwa3QtPmluc25b aV0uaXNfZGVhbGxvYyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bj b2RlLCBBX0RDRkxVU0hPUCkgfHwKKyAgICAgICAgICAgIEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RD VEFHT1ApKSB7CisgICAgICAgICAgICBwa3QtPmluc25baV0uaXNfZGNvcCA9IDE7CisgICAgICAg IH0KKworICAgICAgICBwa3QtPnBrdF9oYXNfY2FsbCB8PSBHRVRfQVRUUklCKG9wY29kZSwgQV9D QUxMKTsKKyAgICAgICAgcGt0LT5wa3RfaGFzX2p1bXByIHw9IEdFVF9BVFRSSUIob3Bjb2RlLCBB X0lORElSRUNUKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIUdFVF9BVFRSSUIo b3Bjb2RlLCBBX0hJTlRKUik7CisgICAgICAgIHBrdC0+cGt0X2hhc19janVtcCB8PSBHRVRfQVRU UklCKG9wY29kZSwgQV9DSlVNUCk7CisgICAgICAgIHBrdC0+cGt0X2hhc19janVtcF9kb3RuZXcg fD0gR0VUX0FUVFJJQihvcGNvZGUsIEFfRE9UTkVXKSAmJgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NKVU1QKTsKKyAgICAgICAgcGt0 LT5wa3RfaGFzX2NqdW1wX2RvdG9sZCB8PSBHRVRfQVRUUklCKG9wY29kZSwgQV9ET1RPTEQpICYm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VUX0FUVFJJQihvcGNvZGUs IEFfQ0pVTVApOworICAgICAgICBwa3QtPnBrdF9oYXNfY2p1bXBfbmV3dmFsIHw9IEdFVF9BVFRS SUIob3Bjb2RlLCBBX0RPVE5FV1ZBTFVFKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NKVU1QKTsKKworICAgICAgICBjYW5qdW1w ID0gZGVjb2RlX29wY29kZV9jYW5fanVtcChvcGNvZGUpOworCisgICAgICAgIGlmIChwa3QtPnBr dF9oYXNfY29mKSB7CisgICAgICAgICAgICBpZiAoY2FuanVtcCkgeworICAgICAgICAgICAgICAg IHBrdC0+cGt0X2hhc19kdWFsX2p1bXAgPSAxOworICAgICAgICAgICAgICAgIHBrdC0+aW5zbltp XS5pc18ybmRfanVtcCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBwa3QtPnBrdF9oYXNfY29mIHw9IGNhbmp1bXA7CisgICAgICAgIH0KKworICAgICAg ICBwa3QtPmluc25baV0uaXNfZW5kbG9vcCA9IGRlY29kZV9vcGNvZGVfZW5kc19sb29wKG9wY29k ZSk7CisKKyAgICAgICAgcGt0LT5wa3RfaGFzX2VuZGxvb3AgfD0gcGt0LT5pbnNuW2ldLmlzX2Vu ZGxvb3A7CisgICAgICAgIHBrdC0+cGt0X2hhc19lbmRsb29wMCB8PSBHRVRfQVRUUklCKG9wY29k ZSwgQV9IV0xPT1AwX0VORCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFH RVRfQVRUUklCKG9wY29kZSwgQV9IV0xPT1AxX0VORCk7CisgICAgICAgIHBrdC0+cGt0X2hhc19l bmRsb29wMDEgfD0gR0VUX0FUVFJJQihvcGNvZGUsIEFfSFdMT09QMF9FTkQpICYmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VUX0FUVFJJQihvcGNvZGUsIEFfSFdMT09QMV9F TkQpOworICAgICAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcDEgfD0gR0VUX0FUVFJJQihvcGNvZGUs IEFfSFdMT09QMV9FTkQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhR0VU X0FUVFJJQihvcGNvZGUsIEFfSFdMT09QMF9FTkQpOworCisgICAgICAgIHBrdC0+cGt0X2hhc19j b2YgfD0gcGt0LT5wa3RfaGFzX2VuZGxvb3A7CisKKyAgICAgICAgLyogTm93IGNyZWF0ZSBzbG90 IHZhbGlkcyAqLworICAgICAgICBpZiAocGt0LT5pbnNuW2ldLmlzX2VuZGxvb3ApICAgIC8qIERv bid0IGNvdW50IGVuZGxvb3BzICovCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBz d2l0Y2ggKHBrdC0+aW5zbltpXS5zbG90KSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg IHBrdC0+c2xvdDBfdmFsaWQgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug MToKKyAgICAgICAgICAgIHBrdC0+c2xvdDFfdmFsaWQgPSAxOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHBrdC0+c2xvdDJfdmFsaWQgPSAxOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHBrdC0+c2xvdDNf dmFsaWQgPSAxOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB0b3RhbF9zbG90 c192YWxpZCsrOworCisgICAgICAgIC8qIEFuZCB0cmFjayAjbG9hZHMvc3RvcmVzICovCisgICAg ICAgIGlmIChwa3QtPmluc25baV0uaXNfc3RvcmUpIHsKKyAgICAgICAgICAgIHN0b3JlcysrOwor ICAgICAgICB9IGVsc2UgaWYgKHBrdC0+aW5zbltpXS5pc19sb2FkKSB7CisgICAgICAgICAgICBs b2FkcysrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0b3JlcyA9PSAyKSB7CisgICAg ICAgIHBrdC0+ZHVhbF9zdG9yZSA9IDE7CisgICAgfSBlbHNlIGlmIChsb2FkcyA9PSAyKSB7Cisg ICAgICAgIHBrdC0+ZHVhbF9sb2FkID0gMTsKKyAgICB9IGVsc2UgaWYgKChsb2FkcyA9PSAxKSAm JiAoc3RvcmVzID09IDEpKSB7CisgICAgICAgIHBrdC0+bG9hZF9hbmRfc3RvcmUgPSAxOworICAg IH0gZWxzZSBpZiAobG9hZHMgPT0gMSkgeworICAgICAgICBwa3QtPnNpbmdsZV9sb2FkID0gMTsK KyAgICB9IGVsc2UgaWYgKHN0b3JlcyA9PSAxKSB7CisgICAgICAgIHBrdC0+c2luZ2xlX3N0b3Jl ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFNodWZmbGUgZm9yIGV4 ZWN1dGlvbgorICogTW92ZSBzdG9yZXMgdG8gZW5kIChpbiBzYW1lIG9yZGVyIGFzIGVuY29kaW5n KQorICogTW92ZSBjb21wYXJlcyB0byBiZWdpbm5pbmcgKGZvciB1c2UgYnkgLm5ldyBpbnNucykK KyAqLworc3RhdGljIGludCBkZWNvZGVfc2h1ZmZsZV9mb3JfZXhlY3V0aW9uKHBhY2tldF90ICpw YWNrZXQpCit7CisgICAgaW50IGNoYW5nZWQgPSAwOworICAgIGludCBpOworICAgIGludCBmbGFn OyAgICAvKiBmbGFnIG1lYW5zIHdlJ3ZlIHNlZW4gYSBub24tbWVtb3J5IGluc3RydWN0aW9uICov CisgICAgaW50IG5fbWVtczsKKyAgICBpbnQgbGFzdF9pbnNuID0gcGFja2V0LT5udW1faW5zbnMg LSAxOworCisgICAgLyoKKyAgICAgKiBTa2lwIGVuZCBsb29wcywgc29tZWhvdyBhbiBlbmQgbG9v cCBpcyBnZXR0aW5nIGluIGFuZCBtZXNzaW5nCisgICAgICogdXAgdGhlIG9yZGVyCisgICAgICov CisgICAgaWYgKGRlY29kZV9vcGNvZGVfZW5kc19sb29wKHBhY2tldC0+aW5zbltsYXN0X2luc25d Lm9wY29kZSkpIHsKKyAgICAgICAgbGFzdF9pbnNuLS07CisgICAgfQorCisgICAgZG8geworICAg ICAgICBjaGFuZ2VkID0gMDsKKyAgICAgICAgLyoKKyAgICAgICAgICogU3RvcmVzIGdvIGxhc3Qs IG11c3Qgbm90IHJlb3JkZXIuCisgICAgICAgICAqIENhbm5vdCBzaHVmZmxlIHN0b3JlcyBwYXN0 IGxvYWRzLCBlaXRoZXIuCisgICAgICAgICAqIEl0ZXJhdGUgYmFja3dhcmRzLiAgSWYgd2Ugc2Vl IGEgbm9uLW1lbW9yeSBpbnN0cnVjdGlvbiwKKyAgICAgICAgICogdGhlbiBhIHN0b3JlLCBzaHVm ZmxlIHRoZSBzdG9yZSB0byB0aGUgZnJvbnQuICBEb24ndCBzaHVmZmxlCisgICAgICAgICAqICBz dG9yZXMgd3J0IGVhY2ggb3RoZXIgb3IgYSBsb2FkLgorICAgICAgICAgKi8KKyAgICAgICAgZm9y IChmbGFnID0gbl9tZW1zID0gMCwgaSA9IGxhc3RfaW5zbjsgaSA+PSAwOyBpLS0pIHsKKyAgICAg ICAgICAgIGludCBvcGNvZGUgPSBwYWNrZXQtPmluc25baV0ub3Bjb2RlOworCisgICAgICAgICAg ICBpZiAoZmxhZyAmJiBHRVRfQVRUUklCKG9wY29kZSwgQV9TVE9SRSkpIHsKKyAgICAgICAgICAg ICAgICBkZWNvZGVfc2VuZF9pbnNuX3RvKHBhY2tldCwgaSwgbGFzdF9pbnNuIC0gbl9tZW1zKTsK KyAgICAgICAgICAgICAgICBuX21lbXMrKzsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsK KyAgICAgICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfU1RPUkUpKSB7Cisg ICAgICAgICAgICAgICAgbl9tZW1zKys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEdFVF9BVFRS SUIob3Bjb2RlLCBBX0xPQUQpKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAg ICAgKiBEb24ndCBzZXQgZmxhZywgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBzaHVmZmxlIGEKKyAg ICAgICAgICAgICAgICAgKiBzdG9yZSBwYXN0YSBsb2FkCisgICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgICAgbl9tZW1zKys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEdFVF9BVFRS SUIob3Bjb2RlLCBBX0RPVE5FV1ZBTFVFKSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgICAgICogRG9uJ3Qgc2V0IGZsYWcsIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gc2h1ZmZs ZSBwYXN0CisgICAgICAgICAgICAgICAgICogYSAubmV3IHZhbHVlCisgICAgICAgICAgICAgICAg ICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAg ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qIENvbXBhcmVzIGdvIGZpcnN0LCBt YXkgYmUgcmVvcmRlcmVkIHdydCBlYWNoIG90aGVyICovCisgICAgICAgIGZvciAoZmxhZyA9IDAs IGkgPSAwOyBpIDwgbGFzdF9pbnNuICsgMTsgaSsrKSB7CisgICAgICAgICAgICBpbnQgb3Bjb2Rl ID0gcGFja2V0LT5pbnNuW2ldLm9wY29kZTsKKworICAgICAgICAgICAgaWYgKChzdHJzdHIob3Bj b2RlX3dyZWdzW29wY29kZV0sICJQZDQiKSB8fAorICAgICAgICAgICAgICAgICBzdHJzdHIob3Bj b2RlX3dyZWdzW29wY29kZV0sICJQZTQiKSkgJiYKKyAgICAgICAgICAgICAgICBHRVRfQVRUUklC KG9wY29kZSwgQV9TVE9SRSkgPT0gMCkgeworICAgICAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxk IGJlIGEgY29tcGFyZSAobm90IGEgc3RvcmUgY29uZGl0aW9uYWwpICovCisgICAgICAgICAgICAg ICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5zbl90byhw YWNrZXQsIGksIDApOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl bHNlIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9JTVBMSUNJVF9XUklURVNfUDMpICYmCisgICAg ICAgICAgICAgICAgICAgICAgICFkZWNvZGVfb3Bjb2RlX2VuZHNfbG9vcChwYWNrZXQtPmluc25b aV0ub3Bjb2RlKSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogc3BO bG9vcCBpbnN0cnVjdGlvbgorICAgICAgICAgICAgICAgICAqIERvbid0IHJlb3JkZXIgZW5kbG9v cHM7IHRoZXkgYXJlIG5vdCB2YWxpZCBmb3IgLm5ldyB1c2VzLAorICAgICAgICAgICAgICAgICAq IGFuZCB3ZSB3YW50IHRvIG1hdGNoIEhXCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5zbl90 byhwYWNrZXQsIGksIDApOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSBlbHNlIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9JTVBMSUNJVF9XUklURVNfUDApICYmCisg ICAgICAgICAgICAgICAgICAgICAgICFHRVRfQVRUUklCKG9wY29kZSwgQV9ORVdDTVBKVU1QKSkg eworICAgICAgICAgICAgICAgIC8qIENBQkFDIGluc3RydWN0aW9uICovCisgICAgICAgICAgICAg ICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5zbl90byhw YWNrZXQsIGksIDApOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg IH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIC8qCisgICAgICogSWYgd2UgaGF2ZSBh IC5uZXcgcmVnaXN0ZXIgY29tcGFyZS9icmFuY2gsIG1vdmUgdGhhdCB0byB0aGUgdmVyeQorICAg ICAqIHZlcnkgZW5kLCBwYXN0IHN0b3JlcworICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBs YXN0X2luc247IGkrKykgeworICAgICAgICBpZiAoR0VUX0FUVFJJQihwYWNrZXQtPmluc25baV0u b3Bjb2RlLCBBX0RPVE5FV1ZBTFVFKSkgeworICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5zbl90 byhwYWNrZXQsIGksIGxhc3RfaW5zbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgIH0KKworICAgIC8qCisgICAgICogQW5kIGF0IHRoZSB2ZXJ5IHZlcnkgdmVyeSBlbmQsIG1v dmUgYW55IFJURSdzLCBzaW5jZSB0aGV5IHVwZGF0ZQorICAgICAqIHVzZXIvc3VwZXJ2aXNvciBt b2RlLgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBsYXN0X2luc247IGkrKykgeworICAg ICAgICBpZiAoKHBhY2tldC0+aW5zbltpXS5vcGNvZGUgPT0gSjJfcnRlKSkgeworICAgICAgICAg ICAgZGVjb2RlX3NlbmRfaW5zbl90byhwYWNrZXQsIGksIGxhc3RfaW5zbik7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgZGVjb2RlX2Fzc2VtYmxlcl9jb3VudF9mcG9wcyhwYWNrZXRfdCAqcGt0KQoreworICAgIGlu dCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBwa3QtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAg IGlmIChHRVRfQVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfRlBPUCkpIHsKKyAgICAgICAg ICAgIHBrdC0+cGt0X2hhc19mcF9vcCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdFVF9B VFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9GUERPVUJMRSkpIHsKKyAgICAgICAgICAgIHBr dC0+cGt0X2hhc19mcGRwX29wID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChHRVRfQVRUUklCKHBr dC0+aW5zbltpXS5vcGNvZGUsIEFfRlBTSU5HTEUpKSB7CisgICAgICAgICAgICBwa3QtPnBrdF9o YXNfZnBzcF9vcCA9IDE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK2FwcGx5 X2V4dGVuZGVyKHBhY2tldF90ICpwa3QsIGludCBpLCBzaXplNHVfdCBleHRlbmRlcikKK3sKKyAg ICBpbnQgaW1tZWRfbnVtOworICAgIHNpemU0dV90IGJhc2VfaW1tZWQ7CisKKyAgICBpbW1lZF9u dW0gPSBvcGNvZGVfd2hpY2hfaW1tZWRpYXRlX2lzX2V4dGVuZGVkKHBrdC0+aW5zbltpXS5vcGNv ZGUpOworICAgIGJhc2VfaW1tZWQgPSBwa3QtPmluc25baV0uaW1tZWRbaW1tZWRfbnVtXTsKKwor ICAgIHBrdC0+aW5zbltpXS5pbW1lZFtpbW1lZF9udW1dID0gZXh0ZW5kZXIgfCBmWlhUTig2LCAz MiwgYmFzZV9pbW1lZCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX2Fw cGx5X2V4dGVuZGVycyhwYWNrZXRfdCAqcGFja2V0KQoreworICAgIGludCBpOworICAgIGZvciAo aSA9IDA7IGkgPCBwYWNrZXQtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAgIGlmIChHRVRfQVRU UklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfSVRfRVhURU5ERVIpKSB7CisgICAgICAgICAg ICBwYWNrZXQtPmluc25baSArIDFdLmV4dGVuc2lvbl92YWxpZCA9IDE7CisgICAgICAgICAgICBw YWNrZXQtPnBrdF9oYXNfcGF5bG9hZCA9IDE7CisgICAgICAgICAgICBhcHBseV9leHRlbmRlcihw YWNrZXQsIGkgKyAxLCBwYWNrZXQtPmluc25baV0uaW1tZWRbMF0pOworICAgICAgICB9CisgICAg fQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29kZV9yZW1vdmVfZXh0ZW5kZXJz KHBhY2tldF90ICpwYWNrZXQpCit7CisgICAgaW50IGksIGo7CisgICAgZm9yIChpID0gMDsgaSA8 IHBhY2tldC0+bnVtX2luc25zOyBpKyspIHsKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIocGFja2V0 LT5pbnNuW2ldLm9wY29kZSwgQV9JVF9FWFRFTkRFUikpIHsKKyAgICAgICAgICAgIGZvciAoaiA9 IGk7CisgICAgICAgICAgICAgICAgKGogPCBwYWNrZXQtPm51bV9pbnNucyAtIDEpICYmIChqIDwg SU5TVFJVQ1RJT05TX01BWCAtIDEpOworICAgICAgICAgICAgICAgIGorKykgeworICAgICAgICAg ICAgICAgIHBhY2tldC0+aW5zbltqXSA9IHBhY2tldC0+aW5zbltqICsgMV07CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBwYWNrZXQtPm51bV9pbnNucy0tOworICAgICAgICB9CisgICAgfQor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfdmFsaWRfc2xvdF9z dHIoY29uc3QgcGFja2V0X3QgKnBrdCwgdW5zaWduZWQgaW50IHNsb3QpCit7CisgICAgcmV0dXJu IGZpbmRfaWNsYXNzX3Nsb3RzKHBrdC0+aW5zbltzbG90XS5vcGNvZGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBrdC0+aW5zbltzbG90XS5pY2xhc3MpOworfQorCisjaW5jbHVkZSAi cTZ2X2RlY29kZS5jIgorCitwYWNrZXRfdCAqZGVjb2RlX3RoaXMoaW50IG1heF93b3Jkcywgc2l6 ZTR1X3QgKndvcmRzLCBwYWNrZXRfdCAqZGVjb2RlX3BrdCkKK3sKKyAgICBpbnQgcmV0OworICAg IHJldCA9IGRvX2RlY29kZV9wYWNrZXQobWF4X3dvcmRzLCB3b3JkcywgZGVjb2RlX3BrdCk7Cisg ICAgaWYgKHJldCA8PSAwKSB7CisgICAgICAgIC8qIEVSUk9SIG9yIEJBRCBQQVJTRSAqLworICAg ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGRlY29kZV9wa3Q7Cit9CisKKy8q IFVzZWQgZm9yICItZCBpbl9hc20iIGxvZ2dpbmcgKi8KK2ludCBkaXNhc3NlbWJsZV9oZXhhZ29u KHVpbnQzMl90ICp3b3JkcywgaW50IG53b3JkcywgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKK3sK KyAgICBwYWNrZXRfdCBwa3Q7CisKKyAgICBpZiAoZGVjb2RlX3RoaXMobndvcmRzLCB3b3Jkcywg JnBrdCkpIHsKKyAgICAgICAgc25wcmludF9hX3BrdChidWYsIGJ1ZnNpemUsICZwa3QpOworICAg ICAgICByZXR1cm4gcGt0LmVuY29kX3BrdF9zaXplX2luX2J5dGVzOworICAgIH0gZWxzZSB7Cisg ICAgICAgIHNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1 cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9kZWNvZGUuaCBiL3Rh cmdldC9oZXhhZ29uL2RlY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjIyZmU2MzkKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9kZWNvZGUuaApAQCAt MCwwICsxLDM5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxOSBRdWFsY29tbSBJbm5vdmF0 aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBERUNPREVfSAorI2RlZmlu ZSBERUNPREVfSAorCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAib3Bjb2Rlcy5oIgorI2lu Y2x1ZGUgImhleF9hcmNoX3R5cGVzLmgiCisjaW5jbHVkZSAiaW5zbi5oIgorCitleHRlcm4gdm9p ZCBkZWNvZGVfaW5pdCh2b2lkKTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfcGFja2V0X2VuZCh1 aW50MzJfdCB3b3JkKQoreworICAgIHVpbnQzMl90IGJpdHMgPSAod29yZCA+PiAxNCkgJiAweDM7 CisgICAgcmV0dXJuICgoYml0cyA9PSAweDMpIHx8IChiaXRzID09IDB4MCkpOworfQorCitleHRl cm4gdm9pZCBkZWNvZGVfc2VuZF9pbnNuX3RvKHBhY2tldF90ICpwYWNrZXQsIGludCBzdGFydCwg aW50IG5ld2xvYyk7CisKK2V4dGVybiBwYWNrZXRfdCAqZGVjb2RlX3RoaXMoaW50IG1heF93b3Jk cywgc2l6ZTR1X3QgKndvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRf dCAqZGVjb2RlX3BrdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vcTZ2 X2RlY29kZS5jIGIvdGFyZ2V0L2hleGFnb24vcTZ2X2RlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjAyOTQ3NWYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4 YWdvbi9xNnZfZGVjb2RlLmMKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChj KSAyMDE5IFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2 ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgor ICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisj ZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBXSEFUTk9UKSAgICAgLyogTk9USElO RyAqLworI2RlZmluZSBUQUJMRV9MSU5LKFRBQkxFKSAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5PVEhJTkcgKi8KKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBFTkMpICAgICAgICAgICAgICAgICAg ICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIFNVQklOU05TKFRBRywgQ0xBU1NBLCBDTEFTU0Is IEVOQykgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBFWFRTUEFDRShUQUcsIEVOQykgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgSU5WQUxJRCgpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09ERV9F TkRfVEFCTEUoLi4uKSAgICAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBE RUNPREVfTUFUQ0hfSU5GTyguLi4pICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNk ZWZpbmUgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPKC4uLikgICAgICAgICAgICAvKiBOT1RISU5H ICovCisKKyNkZWZpbmUgREVDT0RFX1JFRyhSRUdOTywgV0lEVEgsIFNUQVJUQklUKSBcCisgICAg aW5zbi0+cmVnbm9bUkVHTk9dID0gKChlbmNvZGluZyA+PiBTVEFSVEJJVCkgJiAoKDEgPDwgV0lE VEgpIC0gMSkpOworCisjZGVmaW5lIERFQ09ERV9JTVBMX1JFRyhSRUdOTywgVkFMKSBcCisgICAg aW5zbi0+cmVnbm9bUkVHTk9dID0gVkFMOworCisjZGVmaW5lIERFQ09ERV9JTU0oSU1NTk8sIFdJ RFRILCBTVEFSVEJJVCwgVkFMU1RBUlQpIFwKKyAgICBpbnNuLT5pbW1lZFtJTU1OT10gfD0gKCgo ZW5jb2RpbmcgPj4gU1RBUlRCSVQpICYgKCgxIDw8IFdJRFRIKSAtIDEpKSkgPDwgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAoVkFMU1RBUlQpOworCisjZGVmaW5lIERFQ09ERV9JTU1fU1hU KElNTU5PLCBXSURUSCkgXAorICAgIGluc24tPmltbWVkW0lNTU5PXSA9ICgoKChzaXplNHNfdClp bnNuLT5pbW1lZFtJTU1OT10pIDw8ICgzMiAtIFdJRFRIKSkgPj4gXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAoMzIgLSBXSURUSCkpOworCisjZGVmaW5lIERFQ09ERV9JTU1fTkVHKElNTU5P LCBXSURUSCkgXAorICAgIGluc24tPmltbWVkW0lNTU5PXSA9IC1pbnNuLT5pbW1lZFtJTU1OT107 CisKKyNkZWZpbmUgREVDT0RFX0lNTV9TSElGVChJTU1OTywgU0hBTVQpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoIWluc24tPmV4dGVuc2lvbl92YWxpZCkgfHwg XAorICAgICAgICAoaW5zbi0+d2hpY2hfZXh0ZW5kZWQgIT0gSU1NTk8pKSB7IFwKKyAgICAgICAg aW5zbi0+aW1tZWRbSU1NTk9dIDw8PSBTSEFNVDsgXAorICAgIH0KKworI2RlZmluZSBERUNPREVf T1BJTkZPKFRBRywgQkVIKSBcCisgICAgY2FzZSBUQUc6IFwKKyAgICAgICAgeyBCRUggIH0gXAor ICAgICAgICBicmVhazsgXAorCitzdGF0aWMgdm9pZAorZGVjb2RlX29wKGluc25fdCAqaW5zbiwg b3Bjb2RlX3QgdGFnLCBzaXplNHVfdCBlbmNvZGluZykKK3sKKyAgICBpbnNuLT5pbW1lZFswXSA9 IDA7CisgICAgaW5zbi0+aW1tZWRbMV0gPSAwOworICAgIGlmIChpbnNuLT5leHRlbnNpb25fdmFs aWQpIHsKKyAgICAgICAgaW5zbi0+d2hpY2hfZXh0ZW5kZWQgPSBvcGNvZGVfd2hpY2hfaW1tZWRp YXRlX2lzX2V4dGVuZGVkKHRhZyk7CisgICAgfQorICAgIGluc24tPm9wY29kZSA9IHRhZzsKKwor ICAgIHN3aXRjaCAodGFnKSB7CisjaW5jbHVkZSAiZGVjdHJlZV9nZW5lcmF0ZWQuaCIKKyAgICBk ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpbnNuLT5nZW5lcmF0ZSA9IG9w Y29kZV9nZW5wdHJbdGFnXTsKKyAgICBpbnNuLT5pY2xhc3MgPSAoZW5jb2RpbmcgPj4gMjgpICYg MHhmOworICAgIGlmICgoKGVuY29kaW5nID4+IDE0KSAmIDMpID09IDApIHsKKyAgICAgICAgaW5z bi0+aWNsYXNzICs9IDE2OworICAgIH0KK30KKworI3VuZGVmIERFQ09ERV9SRUcKKyN1bmRlZiBE RUNPREVfSU1QTF9SRUcKKyN1bmRlZiBERUNPREVfSU1NCisjdW5kZWYgREVDT0RFX0lNTV9TSElG VAorI3VuZGVmIERFQ09ERV9PUElORk8KKyN1bmRlZiBERUNPREVfTUFUQ0hfSU5GTworI3VuZGVm IERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTworI3VuZGVmIERFQ09ERV9FTkRfVEFCTEUKKyN1bmRl ZiBJTlZBTElECisjdW5kZWYgVEVSTUlOQUwKKyN1bmRlZiBTVUJJTlNOUworI3VuZGVmIEVYVFNQ QUNFCisjdW5kZWYgVEFCTEVfTElOSworI3VuZGVmIERFQ09ERV9ORVdfVEFCTEUKKyN1bmRlZiBE RUNPREVfU0VQQVJBVE9SX0JJVFMKKworc3RhdGljIHVuc2lnbmVkIGludAorZGVjb2RlX3N1Ymlu c25fdGFibGV3YWxrKGluc25fdCAqaW5zbiwgZGVjdHJlZV90YWJsZV90ICp0YWJsZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplNHVfdCBlbmNvZGluZykKK3sKKyAgICB1bnNpZ25lZCBp bnQgaTsKKyAgICBvcGNvZGVfdCBvcGM7CisgICAgaWYgKHRhYmxlLT5sb29rdXBfZnVuY3Rpb24p IHsKKyAgICAgICAgaSA9IHRhYmxlLT5sb29rdXBfZnVuY3Rpb24odGFibGUtPnN0YXJ0Yml0LCB0 YWJsZS0+d2lkdGgsIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpID0gKChlbmNv ZGluZyA+PiB0YWJsZS0+c3RhcnRiaXQpICYgKCgxIDw8IHRhYmxlLT53aWR0aCkgLSAxKSk7Cisg ICAgfQorICAgIGlmICh0YWJsZS0+dGFibGVbaV0udHlwZSA9PSBERUNUUkVFX1RBQkxFX0xJTksp IHsKKyAgICAgICAgcmV0dXJuIGRlY29kZV9zdWJpbnNuX3RhYmxld2FsayhpbnNuLCB0YWJsZS0+ dGFibGVbaV0udGFibGVfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbmNvZGluZyk7CisgICAgfSBlbHNlIGlmICh0YWJsZS0+dGFibGVbaV0udHlwZSA9PSBE RUNUUkVFX1RFUk1JTkFMKSB7CisgICAgICAgIG9wYyA9IHRhYmxlLT50YWJsZVtpXS5vcGNvZGU7 CisgICAgICAgIGlmICgoZW5jb2RpbmcgJiBkZWNvZGVfaXRhYmxlW29wY10ubWFzaykgIT0gZGVj b2RlX2l0YWJsZVtvcGNdLm1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg fQorICAgICAgICBkZWNvZGVfb3AoaW5zbiwgb3BjLCBlbmNvZGluZyk7CisgICAgICAgIHJldHVy biAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGlj IHVuc2lnbmVkIGludCBnZXRfaW5zbl9hKHNpemU0dV90IGVuY29kaW5nKQoreworICAgIHJldHVy biBlbmNvZGluZyAmIDB4MDAwMDFmZmY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2lu c25fYihzaXplNHVfdCBlbmNvZGluZykKK3sKKyAgICByZXR1cm4gKGVuY29kaW5nID4+IDE2KSAm IDB4MDAwMDFmZmY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY29kZV9pbnNuc190YWJs ZXdhbGsoaW5zbl90ICppbnNuLCBkZWN0cmVlX3RhYmxlX3QgKnRhYmxlLCBzaXplNHVfdCBlbmNv ZGluZykKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1bnNpZ25lZCBpbnQgYSwgYjsKKyAg ICBvcGNvZGVfdCBvcGM7CisgICAgaWYgKHRhYmxlLT5sb29rdXBfZnVuY3Rpb24pIHsKKyAgICAg ICAgaSA9IHRhYmxlLT5sb29rdXBfZnVuY3Rpb24odGFibGUtPnN0YXJ0Yml0LCB0YWJsZS0+d2lk dGgsIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpID0gKChlbmNvZGluZyA+PiB0 YWJsZS0+c3RhcnRiaXQpICYgKCgxIDw8IHRhYmxlLT53aWR0aCkgLSAxKSk7CisgICAgfQorICAg IGlmICh0YWJsZS0+dGFibGVbaV0udHlwZSA9PSBERUNUUkVFX1RBQkxFX0xJTkspIHsKKyAgICAg ICAgcmV0dXJuIGRlY29kZV9pbnNuc190YWJsZXdhbGsoaW5zbiwgdGFibGUtPnRhYmxlW2ldLnRh YmxlX2xpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5n KTsKKyAgICB9IGVsc2UgaWYgKHRhYmxlLT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVfU1VCSU5T TlMpIHsKKyAgICAgICAgYSA9IGdldF9pbnNuX2EoZW5jb2RpbmcpOworICAgICAgICBiID0gZ2V0 X2luc25fYihlbmNvZGluZyk7CisgICAgICAgIGIgPSBkZWNvZGVfc3ViaW5zbl90YWJsZXdhbGso aW5zbiwgdGFibGUtPnRhYmxlW2ldLnRhYmxlX2xpbmtfYiwgYik7CisgICAgICAgIGEgPSBkZWNv ZGVfc3ViaW5zbl90YWJsZXdhbGsoaW5zbiArIDEsIHRhYmxlLT50YWJsZVtpXS50YWJsZV9saW5r LCBhKTsKKyAgICAgICAgaWYgKChhID09IDApIHx8IChiID09IDApKSB7CisgICAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMjsKKyAgICB9IGVsc2UgaWYgKHRh YmxlLT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVfVEVSTUlOQUwpIHsKKyAgICAgICAgb3BjID0g dGFibGUtPnRhYmxlW2ldLm9wY29kZTsKKyAgICAgICAgaWYgKChlbmNvZGluZyAmIGRlY29kZV9p dGFibGVbb3BjXS5tYXNrKSAhPSBkZWNvZGVfaXRhYmxlW29wY10ubWF0Y2gpIHsKKyAgICAgICAg ICAgIGlmICgoZW5jb2RpbmcgJiBkZWNvZGVfbGVnYWN5X2l0YWJsZVtvcGNdLm1hc2spICE9Cisg ICAgICAgICAgICAgICAgZGVjb2RlX2xlZ2FjeV9pdGFibGVbb3BjXS5tYXRjaCkgeworICAgICAg ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRl Y29kZV9vcChpbnNuLCBvcGMsIGVuY29kaW5nKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBl bHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50 CitkZWNvZGVfaW5zbnMoaW5zbl90ICppbnNuLCBzaXplNHVfdCBlbmNvZGluZykKK3sKKyAgICBk ZWN0cmVlX3RhYmxlX3QgKnRhYmxlOworICAgIGlmICgoZW5jb2RpbmcgJiAweDAwMDBjMDAwKSAh PSAwKSB7CisgICAgICAgIC8qIFN0YXJ0IHdpdGggUFAgdGFibGUgKi8KKyAgICAgICAgdGFibGUg PSAmZGVjdHJlZV90YWJsZV9ERUNPREVfUk9PVF8zMjsKKyAgICB9IGVsc2UgeworICAgICAgICAv KiBzdGFydCB3aXRoIEVFIHRhYmxlICovCisgICAgICAgIHRhYmxlID0gJmRlY3RyZWVfdGFibGVf REVDT0RFX1JPT1RfRUU7CisgICAgfQorICAgIHJldHVybiBkZWNvZGVfaW5zbnNfdGFibGV3YWxr KGluc24sIHRhYmxlLCBlbmNvZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9hZGRfZW5k bG9vcF9pbnNuKGluc25fdCAqaW5zbiwgaW50IGxvb3BudW0pCit7CisgICAgaWYgKGxvb3BudW0g PT0gMTApIHsKKyAgICAgICAgaW5zbi0+b3Bjb2RlID0gSjJfZW5kbG9vcDAxOworICAgICAgICBp bnNuLT5nZW5lcmF0ZSA9IG9wY29kZV9nZW5wdHJbSjJfZW5kbG9vcDAxXTsKKyAgICB9IGVsc2Ug aWYgKGxvb3BudW0gPT0gMSkgeworICAgICAgICBpbnNuLT5vcGNvZGUgPSBKMl9lbmRsb29wMTsK KyAgICAgICAgaW5zbi0+Z2VuZXJhdGUgPSBvcGNvZGVfZ2VucHRyW0oyX2VuZGxvb3AxXTsKKyAg ICB9IGVsc2UgeworICAgICAgICBpbnNuLT5vcGNvZGUgPSBKMl9lbmRsb29wMDsKKyAgICAgICAg aW5zbi0+Z2VuZXJhdGUgPSBvcGNvZGVfZ2VucHRyW0oyX2VuZGxvb3AwXTsKKyAgICB9Cit9CisK K3N0YXRpYyBpbmxpbmUgaW50IGRlY29kZV9wYXJzZWJpdHNfaXNfZW5kKHNpemU0dV90IGVuY29k aW5nMzIpCit7CisgICAgc2l6ZTR1X3QgYml0cyA9IChlbmNvZGluZzMyID4+IDE0KSAmIDB4MzsK KyAgICByZXR1cm4gKChiaXRzID09IDB4MykgfHwgKGJpdHMgPT0gMHgwKSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50IGRlY29kZV9wYXJzZWJpdHNfaXNfbG9vcGVuZChzaXplNHVfdCBlbmNvZGlu ZzMyKQoreworICAgIHNpemU0dV90IGJpdHMgPSAoZW5jb2RpbmczMiA+PiAxNCkgJiAweDM7Cisg ICAgcmV0dXJuICgoYml0cyA9PSAweDIpKTsKK30KKworc3RhdGljIGludAorZGVjb2RlX3NldF9z bG90X251bWJlcihwYWNrZXRfdCAqcGt0KQoreworICAgIGludCBzbG90OworICAgIGludCBpOwor ICAgIGludCBoaXRfbWVtX2luc24gPSAwOworICAgIGludCBoaXRfZHVwbGV4ID0gMDsKKyAgICBj b25zdCBjaGFyICp2YWxpZF9zbG90X3N0cjsKKworICAgIGZvciAoaSA9IDAsIHNsb3QgPSAzOyBp IDwgcGt0LT5udW1faW5zbnM7IGkrKykgeworICAgICAgICB2YWxpZF9zbG90X3N0ciA9IGdldF92 YWxpZF9zbG90X3N0cihwa3QsIGkpOworCisgICAgICAgIHdoaWxlIChzdHJjaHIodmFsaWRfc2xv dF9zdHIsICcwJyArIHNsb3QpID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNsb3QtLTsKKyAgICAg ICAgfQorICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9IHNsb3Q7CisgICAgICAgIGlmIChzbG90 KSB7CisgICAgICAgICAgICAvKiBJJ3ZlIGFzc2lnbmVkIHRoZSBzbG90LCBub3cgZGVjcmVtZW50 IGl0IGZvciB0aGUgbmV4dCBpbnNuICovCisgICAgICAgICAgICBzbG90LS07CisgICAgICAgIH0K KyAgICB9CisKKyAgICAvKiBGaXggdGhlIGV4Y2VwdGlvbnMgLSBtZW0gaW5zbnMgdG8gc2xvdCAw LDEgKi8KKyAgICBmb3IgKGkgPSBwa3QtPm51bV9pbnNucyAtIDE7IGkgPj0gMDsgaS0tKSB7CisK KyAgICAgICAgLyogRmlyc3QgbWVtb3J5IGluc3RydWN0aW9uIGFsd2F5cyBnb2VzIHRvIHNsb3Qg MCAqLworICAgICAgICBpZiAoKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9NRU1M SUtFKSB8fAorICAgICAgICAgICAgIEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9N RU1MSUtFX1BBQ0tFVF9SVUxFUykpICYmCisgICAgICAgICAgICAhaGl0X21lbV9pbnNuKSB7Cisg ICAgICAgICAgICBoaXRfbWVtX2luc24gPSAxOworICAgICAgICAgICAgcGt0LT5pbnNuW2ldLnNs b3QgPSAwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBO ZXh0IG1lbW9yeSBpbnN0cnVjdGlvbiBhbHdheXMgZ29lcyB0byBzbG90IDEgKi8KKyAgICAgICAg aWYgKChHRVRfQVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfTUVNTElLRSkgfHwKKyAgICAg ICAgICAgICBHRVRfQVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfTUVNTElLRV9QQUNLRVRf UlVMRVMpKSAmJgorICAgICAgICAgICAgaGl0X21lbV9pbnNuKSB7CisgICAgICAgICAgICBwa3Qt Pmluc25baV0uc2xvdCA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGaXggdGhlIGV4 Y2VwdGlvbnMgLSBkdXBsZXggYWx3YXlzIHNsb3QgMCwxICovCisgICAgZm9yIChpID0gcGt0LT5u dW1faW5zbnMgLSAxOyBpID49IDA7IGktLSkgeworCisgICAgICAgIC8qIEZpcnN0IHN1Ymluc24g YWx3YXlzIGdvZXMgdG8gc2xvdCAwICovCisgICAgICAgIGlmIChHRVRfQVRUUklCKHBrdC0+aW5z bltpXS5vcGNvZGUsIEFfU1VCSU5TTikgJiYgIWhpdF9kdXBsZXgpIHsKKyAgICAgICAgICAgIHBr dC0+cGt0X2hhc19kdXBsZXggPSAxOworICAgICAgICAgICAgaGl0X2R1cGxleCA9IDE7CisgICAg ICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgfQorCisgICAgICAgIC8qIE5leHQgc3ViaW5zbiBhbHdheXMgZ29lcyB0byBzbG90IDEg Ki8KKyAgICAgICAgaWYgKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9TVUJJTlNO KSAmJiBoaXRfZHVwbGV4KSB7CisgICAgICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9IDE7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGaXggdGhlIGV4Y2VwdGlvbnMgLSBzbG90IDEgaXMg bmV2ZXIgZW1wdHksIGFsd2F5cyBhbGlnbnMgdG8gc2xvdCAwICovCisgICAgeworICAgICAgICBp bnQgc2xvdDBfZm91bmQgPSAwOworICAgICAgICBpbnQgc2xvdDFfZm91bmQgPSAwOworICAgICAg ICBpbnQgc2xvdDFfaWlkeCA9IDA7CisgICAgICAgIGZvciAoaSA9IHBrdC0+bnVtX2luc25zIC0g MTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIC8qIElzIHNsb3QwIHVzZWQ/ICovCisgICAg ICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnNsb3QgPT0gMCkgeworICAgICAgICAgICAgICAgIGlu dCBpc19lbmRsb29wID0gKHBrdC0+aW5zbltpXS5vcGNvZGUgPT0gSjJfZW5kbG9vcDAxKTsKKyAg ICAgICAgICAgICAgICBpc19lbmRsb29wIHw9IChwa3QtPmluc25baV0ub3Bjb2RlID09IEoyX2Vu ZGxvb3AwKTsKKyAgICAgICAgICAgICAgICBpc19lbmRsb29wIHw9IChwa3QtPmluc25baV0ub3Bj b2RlID09IEoyX2VuZGxvb3AxKTsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg ICAgICogTWFrZSBzdXJlIGl0J3Mgbm90IGVuZGxvb3Agc2luY2UsIHdlJ3JlIG92ZXJsb2FkaW5n CisgICAgICAgICAgICAgICAgICogc2xvdDAgZm9yIGVuZGxvb3AKKyAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgICBpZiAoIWlzX2VuZGxvb3ApIHsKKyAgICAgICAgICAgICAgICAg ICAgc2xvdDBfZm91bmQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIC8qIElzIHNsb3QxIHVzZWQ/ICovCisgICAgICAgICAgICBpZiAocGt0LT5pbnNu W2ldLnNsb3QgPT0gMSkgeworICAgICAgICAgICAgICAgIHNsb3QxX2ZvdW5kID0gMTsKKyAgICAg ICAgICAgICAgICBzbG90MV9paWR4ID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICAvKiBJcyBzbG90MCBlbXB0eSBhbmQgc2xvdDEgdXNlZD8gKi8KKyAgICAgICAgaWYgKChz bG90MF9mb3VuZCA9PSAwKSAmJiAoc2xvdDFfZm91bmQgPT0gMSkpIHsKKyAgICAgICAgICAgIC8q IFRoZW4gcHVzaCBpdCB0byBzbG90MCAqLworICAgICAgICAgICAgcGt0LT5pbnNuW3Nsb3QxX2lp ZHhdLnNsb3QgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgor ICogZG9fZGVjb2RlX3BhY2tldAorICogRGVjb2RlcyBwYWNrZXQgd2l0aCBnaXZlbiB3b3Jkcwor ICogUmV0dXJucyBuZWdhdGl2ZSBvbiBlcnJvciwgMCBvbiBpbnN1ZmZpY2llbnQgd29yZHMsCisg KiBhbmQgbnVtYmVyIG9mIHdvcmRzIHVzZWQgb24gc3VjY2VzcworICovCisKK3N0YXRpYyBpbnQg ZG9fZGVjb2RlX3BhY2tldChpbnQgbWF4X3dvcmRzLCBjb25zdCBzaXplNHVfdCAqd29yZHMsIHBh Y2tldF90ICpwa3QpCit7CisgICAgaW50IG51bV9pbnNucyA9IDA7CisgICAgaW50IHdvcmRzX3Jl YWQgPSAwOworICAgIGludCBlbmRfb2ZfcGFja2V0ID0gMDsKKyAgICBpbnQgbmV3X2luc25zID0g MDsKKyAgICBpbnQgbnVtX21lbXMgPSAwOworICAgIGludCBlcnJvcnMgPSAwOworICAgIGludCBp OworICAgIHNpemU0dV90IGVuY29kaW5nMzI7CisKKyAgICAvKiBJbml0aWFsaXplICovCisgICAg bWVtc2V0KHBrdCwgMCwgc2l6ZW9mKCpwa3QpKTsKKyAgICAvKiBUcnkgdG8gYnVpbGQgcGFja2V0 ICovCisgICAgd2hpbGUgKCFlbmRfb2ZfcGFja2V0ICYmICh3b3Jkc19yZWFkIDwgbWF4X3dvcmRz KSkgeworICAgICAgICBlbmNvZGluZzMyID0gd29yZHNbd29yZHNfcmVhZF07CisgICAgICAgIGVu ZF9vZl9wYWNrZXQgPSBkZWNvZGVfcGFyc2ViaXRzX2lzX2VuZChlbmNvZGluZzMyKTsKKyAgICAg ICAgbmV3X2luc25zID0gZGVjb2RlX2luc25zKCZwa3QtPmluc25bbnVtX2luc25zXSwgZW5jb2Rp bmczMik7CisgICAgICAgIC8qCisgICAgICAgICAqIElmIHdlIHNhdyBhbiBleHRlbmRlciwgbWFy ayBuZXh0IHdvcmQgZXh0ZW5kZWQgc28gaW1tZWRpYXRlCisgICAgICAgICAqIGRlY29kZSB3b3Jr cworICAgICAgICAgKi8KKyAgICAgICAgaWYgKHBrdC0+aW5zbltudW1faW5zbnNdLm9wY29kZSA9 PSBBNF9leHQpIHsKKyAgICAgICAgICAgIHBrdC0+aW5zbltudW1faW5zbnMgKyAxXS5leHRlbnNp b25fdmFsaWQgPSAxOworICAgICAgICAgICAgcGt0LT5wa3RfaGFzX3BheWxvYWQgPSAxOworICAg ICAgICB9CisgICAgICAgIG51bV9pbnNucyArPSBuZXdfaW5zbnM7CisgICAgICAgIHdvcmRzX3Jl YWQrKzsKKyAgICB9CisKKyAgICBwa3QtPm51bV9pbnNucyA9IG51bV9pbnNuczsKKyAgICBpZiAo IWVuZF9vZl9wYWNrZXQpIHsKKyAgICAgICAgLyogUmFuIG91dCBvZiB3b3JkcyEgKi8KKyAgICAg ICAgcmV0dXJuIDA7CisgICAgfQorICAgIHBrdC0+ZW5jb2RfcGt0X3NpemVfaW5fYnl0ZXMgPSB3 b3Jkc19yZWFkICogNDsKKyAgICAvKiBDaGVjayBwYWNrZXQgLyBhdXggaW5mbyAqLworICAgIGZv ciAoaSA9IDA7IGkgPCBudW1faW5zbnM7IGkrKykgeworICAgICAgICBpZiAoR0VUX0FUVFJJQihw a3QtPmluc25baV0ub3Bjb2RlLCBBX01FTUNQWSkpIHsKKyAgICAgICAgICAgIG51bV9tZW1zICs9 IDI7CisgICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2RlLCBB X0xPQUQpIHx8CisgICAgICAgICAgICAgICAgICAgR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bj b2RlLCBBX1NUT1JFKSkgeworICAgICAgICAgICAgbnVtX21lbXMrKzsKKyAgICAgICAgfQorICAg ICAgICBpZiAocGt0LT5pbnNuW2ldLm9wY29kZSA9PSBBNF9leHQpIHsKKyAgICAgICAgICAgIHBr dC0+aW5zbltpICsgMV0uZXh0ZW5zaW9uX3ZhbGlkID0gMTsKKyAgICAgICAgICAgIHBrdC0+cGt0 X2hhc19wYXlsb2FkID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwa3QtPnBrdF9oYXNfaW5p dGxvb3AgPSAwOworICAgIHBrdC0+cGt0X2hhc19pbml0bG9vcDAgPSAwOworICAgIHBrdC0+cGt0 X2hhc19pbml0bG9vcDEgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1faW5zbnM7IGkrKykg eworICAgICAgICBwa3QtPnBrdF9oYXNfaW5pdGxvb3AwIHw9CisgICAgICAgICAgICBHRVRfQVRU UklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfSFdMT09QMF9TRVRVUCk7CisgICAgICAgIHBrdC0+ cGt0X2hhc19pbml0bG9vcDEgfD0KKyAgICAgICAgICAgIEdFVF9BVFRSSUIocGt0LT5pbnNuW2ld Lm9wY29kZSwgQV9IV0xPT1AxX1NFVFVQKTsKKyAgICB9CisgICAgcGt0LT5wa3RfaGFzX2luaXRs b29wIHw9IHBrdC0+cGt0X2hhc19pbml0bG9vcDAgfCBwa3QtPnBrdF9oYXNfaW5pdGxvb3AxOwor CisgICAgLyogU2h1ZmZsZSAvIHNwbGl0IC8gcmVvcmRlciBmb3IgZXhlY3V0aW9uICovCisgICAg aWYgKCh3b3Jkc19yZWFkID09IDIpICYmIChkZWNvZGVfcGFyc2ViaXRzX2lzX2xvb3BlbmQod29y ZHNbMF0pKSkgeworICAgICAgICBkZWNvZGVfYWRkX2VuZGxvb3BfaW5zbigmcGt0LT5pbnNuW3Br dC0+bnVtX2luc25zKytdLCAwKTsKKyAgICB9CisgICAgaWYgKHdvcmRzX3JlYWQgPj0gMykgewor ICAgICAgICBzaXplNHVfdCBoYXNfbG9vcDAsIGhhc19sb29wMTsKKyAgICAgICAgaGFzX2xvb3Aw ID0gZGVjb2RlX3BhcnNlYml0c19pc19sb29wZW5kKHdvcmRzWzBdKTsKKyAgICAgICAgaGFzX2xv b3AxID0gZGVjb2RlX3BhcnNlYml0c19pc19sb29wZW5kKHdvcmRzWzFdKTsKKyAgICAgICAgaWYg KGhhc19sb29wMCAmJiBoYXNfbG9vcDEpIHsKKyAgICAgICAgICAgIGRlY29kZV9hZGRfZW5kbG9v cF9pbnNuKCZwa3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDEwKTsKKyAgICAgICAgfSBlbHNl IGlmIChoYXNfbG9vcDEpIHsKKyAgICAgICAgICAgIGRlY29kZV9hZGRfZW5kbG9vcF9pbnNuKCZw a3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDEpOworICAgICAgICB9IGVsc2UgaWYgKGhhc19s b29wMCkgeworICAgICAgICAgICAgZGVjb2RlX2FkZF9lbmRsb29wX2luc24oJnBrdC0+aW5zbltw a3QtPm51bV9pbnNucysrXSwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkZWNvZGVfYXNz ZW1ibGVyX2NvdW50X2Zwb3BzKHBrdCk7CisKKyAgICBlcnJvcnMgKz0gZGVjb2RlX2FwcGx5X2V4 dGVuZGVycyhwa3QpOworICAgIGVycm9ycyArPSBkZWNvZGVfcmVtb3ZlX2V4dGVuZGVycyhwa3Qp OworICAgIGVycm9ycyArPSBkZWNvZGVfc2V0X3Nsb3RfbnVtYmVyKHBrdCk7CisgICAgZXJyb3Jz ICs9IGRlY29kZV9maWxsX25ld3ZhbHVlX3JlZ25vKHBrdCk7CisKKyAgICBlcnJvcnMgKz0gZGVj b2RlX3NodWZmbGVfZm9yX2V4ZWN1dGlvbihwa3QpOworICAgIGVycm9ycyArPSBkZWNvZGVfc3Bs aXRfY21wanVtcChwa3QpOworICAgIGVycm9ycyArPSBkZWNvZGVfc2V0X2luc25fYXR0cl9maWVs ZHMocGt0KTsKKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisK KyAgICByZXR1cm4gd29yZHNfcmVhZDsKK30KLS0gCjIuNy40Cgo=