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 Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6947AC43458 for ; Mon, 29 Jun 2026 13:50:40 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1weCIf-00057A-Qk; Mon, 29 Jun 2026 09:45:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1weCHq-0003r9-Ik for qemu-devel@nongnu.org; Mon, 29 Jun 2026 09:44:35 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1weCHn-0006NK-UF for qemu-devel@nongnu.org; Mon, 29 Jun 2026 09:44:34 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 65TATSto2592854 for ; Mon, 29 Jun 2026 13:44:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= EzOvoGhvtPKig+yChPX1XxYwqHpTeQ/TAqtl6EODqY0=; b=Se5pym1ux0DcOgyy meeZ8igwt4SOlGDkDv/d5wNSjMbNNZOGVFK+hnEiZt/FUSuB9ToVDEGFtxli8Zsm gaJp09NcbBhV9Otak/x1BXpFMCDa9GYBWyzpeOZ0PcZE9SO0jn8wKjxYgf9qDMQp 6tEjgey7s6tCMALL7+nhbkmVCGhZEiGLcMYOA+R+jH70g/Ctr+4Uj9TwGwiUag8r y9OCHr2UedTC4Q3HVeFxNTBVYTGVZ1Fh0O0dg0FkBNPmYdsjRa8j4bdt9RPMK+66 SnMuDByCdCS2w+VHKs/rR8IfKvd86wNQ0wE71ZhcoqlvxBTsLu8zBK947Y47uJpS O+aAUA== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4f3k7vhwv3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Jun 2026 13:44:30 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2c9b1b608e2so18074435ad.3 for ; Mon, 29 Jun 2026 06:44:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1782740670; x=1783345470; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EzOvoGhvtPKig+yChPX1XxYwqHpTeQ/TAqtl6EODqY0=; b=Ge0e8y16kpTneNrURiMaYvKSoGHOIuL0BRQt0uAVdtGdO2OQOwINprer+nOcVA1e2Z l1/pCCuGkK1xtkkWcU1AmSO4F/rgpzStiWpCXrTI2bg5eyBAsIrAJRzCHNNkZA6wkQ76 pBpXJxbqSDosrDGulSXJYwsuDhnazgLr1Um+Ed/DO5WDxnB2BudsW1rv7/cRdLnQQqqQ h79CfvuHidteT7bJQhVNiMua2nXtof7z+6u91OF1VOfepay9ah8RY9OvVhzG9xIgy1W8 XdaqByRhwgw2sKnd7CgC+C29WETDMKqeUUhJsbx8qmh/+kq90K43GGa5oHSmBCxHFNjq XrMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782740670; x=1783345470; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=EzOvoGhvtPKig+yChPX1XxYwqHpTeQ/TAqtl6EODqY0=; b=P/Bt8mHq+rTf+tcSaeVq41kFfC0ZhkLzMbQHHszaNhlVq4faBW1FgXpfWrXIYyleLN e/y4htpvU0W/NPxtg/5qy4Eh3jP61cTzL3YpYCyF2ClLxnBUGkviH+XucPgZU35wOnLq XTaK22co8Saqr7UOFXWHoB815yQnBaKHCetmuYZfNKc2qhmxX3jqwY4cy6/zb39OnYy0 7ANLRR3f/PNBKNOfbgYtf5S4+dhPk9uxc9BtbDg8Eq3KPDfXe1lCB8KuKHJqpfFLcdrk PL1/H5rFZ1mHP7MChJ4G+uRdGpOL1FvOUsuH6aUwYhqeFB/5egHyfO0OaMDVQ8iQSUFp XpdQ== X-Gm-Message-State: AOJu0Yx5+4YiNpcur7/zpuMnaPpqJboths/+WNwzYmCbnIshQDa3D5ia ZD9+BhGrQGDRF5pa2K0N3OGkm6bvD2yKsHuDPh9auw1vG1WdPX8bGaKl0j3hz2dWG3T1bylJXfC ZhsmV39HkMVJkeYwKyT/pFDXf7lXHSacdd20t5gUF5KYdDkam3RJljY1Tbm5rAlGi7g== X-Gm-Gg: AfdE7cnJBgTv3ETQWHjv2VVnxxj2R4u3iPsMfXbOXmvzkSgKVclNiy2U8mxMV/5lf/t 90HEiylwEI4B3Jhxn299qhjq/XA+MQ5BYL6eIxu7Pw+nKKHjbsBP7Htyb0ifJmzDS0Q8bo3+qKR hz0yS2GH8l9BC9o0PeRkRuc3BfInjQ7KiN+8b9ocw8Qr13amkQpS80xOCi9HqAYn+3GG0slK4AE 7qCTmSy5p9vO907YTMJT0e/rOWJKgP9sHi9Wm7r/4hiZOPS4hEySQ8oMc2WSVdzxIS0eWmeqMxN RaXA1JKkuzYCENlrPwbyT8PN7WBiMxtkj7Hsk3gSKjirhhMlLNmV9ajrEycLOjY9wZSoOXVADzH wXvtkINoK6rOEBE8+6z21J0WvO9pD7vkazlNigI+0hvGCB3YwnVGauypaXJo= X-Received: by 2002:a17:902:ec90:b0:2c9:ceb9:8668 with SMTP id d9443c01a7336-2c9ceb98a66mr59434845ad.46.1782740669870; Mon, 29 Jun 2026 06:44:29 -0700 (PDT) X-Received: by 2002:a17:902:ec90:b0:2c9:ceb9:8668 with SMTP id d9443c01a7336-2c9ceb98a66mr59434555ad.46.1782740669330; Mon, 29 Jun 2026 06:44:29 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c9b0992227sm48968555ad.37.2026.06.29.06.44.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2026 06:44:28 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com, peter.maydell@linaro.org Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v5 71/77] hw/hexagon: Add hexagon TLB device implementation Date: Mon, 29 Jun 2026 06:12:26 -0700 Message-Id: <20260629131232.2487780-72-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260629131232.2487780-1-brian.cain@oss.qualcomm.com> References: <20260629131232.2487780-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Proofpoint-GUID: 5ruS8JVt78oCcFJhEtlGUV69HViyjoVy X-Authority-Analysis: v=2.4 cv=CqCPtH4D c=1 sm=1 tr=0 ts=6a4276bf cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=FelO9ux0wxsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=PVkRrmxsJ_TG981LwpgA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwNjI5MDExNCBTYWx0ZWRfX8twoDaTnNxdK /3p9PwSV0pNmq985J0lxug+YM8ZMhKYv0SxcmSdIFodOd3IYY+1kQNrBQ+3psEwCHtSEt3GCX3C sgVDXmdVt+tjH2VUa58kMvlb8ahX6No= X-Proofpoint-ORIG-GUID: 5ruS8JVt78oCcFJhEtlGUV69HViyjoVy X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNjI5MDExNCBTYWx0ZWRfXwBMcE8vN78tv 31UXJdrvPJWA4Pfp/R6EGj+Pnuhu+Isbfuo9f2GC0MzlyNArC4GPWng7R5k7U2D2m6+wks9RtLj ZVhTDB+oUz60BpGlzRZIIO+HZapdUdLArtDy1+XFGh2YXMzC9Io0FEGNeJIXCqJDGN47QKp4DYV UiKeD0YQD1d4H2etQgdpAsVpRJVlZ6Nv/5Eki3ulr0BlnyKqUnNusSDSxmNGN6845Jqt2F25cWq HVMXTp1R5wQ5sVKRxgzeTPW58ZktLnoyTWNw9tfw8BXJHtzN1ymbWBuYphX3Xio0ezma86NO6xe 3ZfyCMAAVviQ6BP1jHwwlQWKnl5WH/Tj6BmYspxDJMofjbDecx1eaCY5Tji2dEDDpOBqe5FVxwO cADlB9vEolnQLuzpByY+QHn3SJmUl3knYv+MprBXFGE2AY0MniqT2a/R7jVWvJGIZyhHOcM/MYb 54M0fRueO2KPGItyd/g== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-29_03,2026-06-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 clxscore=1015 impostorscore=0 malwarescore=0 priorityscore=1501 spamscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2606290114 Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org QWRkIHRoZSBoZXhhZ29uIFRMQiBRT00gZGV2aWNlIG1vZGVsIGltcGxlbWVudGF0aW9uLgoKUmV2 aWV3ZWQtYnk6IFBpZXJyaWNrIEJvdXZpZXIgPHBpZXJyaWNrLmJvdXZpZXJAb3NzLnF1YWxjb21t LmNvbT4KU2lnbmVkLW9mZi1ieTogQnJpYW4gQ2FpbiA8YnJpYW4uY2FpbkBvc3MucXVhbGNvbW0u Y29tPgotLS0KIGh3L2hleGFnb24vaGV4YWdvbl90bGIuYyB8IDQ2NyArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0NjcgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGh3L2hleGFnb24vaGV4YWdvbl90bGIuYwoKZGlmZiAtLWdp dCBhL2h3L2hleGFnb24vaGV4YWdvbl90bGIuYyBiL2h3L2hleGFnb24vaGV4YWdvbl90bGIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjZkNGFmZjM4OWUKLS0tIC9k ZXYvbnVsbAorKysgYi9ody9oZXhhZ29uL2hleGFnb25fdGxiLmMKQEAgLTAsMCArMSw0NjcgQEAK Ky8qCisgKiBIZXhhZ29uIFRMQiBRT00gRGV2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSBRdWFs Y29tbSBUZWNobm9sb2dpZXMsIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuCisgKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorICovCisKKyNpbmNsdWRlICJx ZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9sb2cuaCIKKyNpbmNsdWRlICJody9oZXhhZ29u L2hleGFnb25fdGxiLmgiCisjaW5jbHVkZSAiaHcvY29yZS9xZGV2LXByb3BlcnRpZXMuaCIKKyNp bmNsdWRlICJody9jb3JlL3Jlc2V0dGFibGUuaCIKKyNpbmNsdWRlICJtaWdyYXRpb24vdm1zdGF0 ZS5oIgorI2luY2x1ZGUgIm1vbml0b3IvbW9uaXRvci5oIgorI2luY2x1ZGUgInFhcGkvZXJyb3Iu aCIKKyNpbmNsdWRlICJleGVjL3BhZ2UtcHJvdGVjdGlvbi5oIgorI2luY2x1ZGUgImV4ZWMvdGFy Z2V0X3BhZ2UuaCIKKyNpbmNsdWRlICJ0YXJnZXQvaGV4YWdvbi9jcHUuaCIKKyNpbmNsdWRlICJ0 YXJnZXQvaGV4YWdvbi9jcHVfYml0cy5oIgorCisvKiBQVEUgKFRMQiBlbnRyeSkgZmllbGQgZXh0 cmFjdGlvbiAqLworI2RlZmluZSBHRVRfUFRFX1BQRChlbnRyeSkgICBleHRyYWN0NjQoKGVudHJ5 KSwgIDAsIDI0KQorI2RlZmluZSBHRVRfUFRFX0MoZW50cnkpICAgICBleHRyYWN0NjQoKGVudHJ5 KSwgMjQsICA0KQorI2RlZmluZSBHRVRfUFRFX1UoZW50cnkpICAgICBleHRyYWN0NjQoKGVudHJ5 KSwgMjgsICAxKQorI2RlZmluZSBHRVRfUFRFX1IoZW50cnkpICAgICBleHRyYWN0NjQoKGVudHJ5 KSwgMjksICAxKQorI2RlZmluZSBHRVRfUFRFX1coZW50cnkpICAgICBleHRyYWN0NjQoKGVudHJ5 KSwgMzAsICAxKQorI2RlZmluZSBHRVRfUFRFX1goZW50cnkpICAgICBleHRyYWN0NjQoKGVudHJ5 KSwgMzEsICAxKQorI2RlZmluZSBHRVRfUFRFX1ZQTihlbnRyeSkgICBleHRyYWN0NjQoKGVudHJ5 KSwgMzIsIDIwKQorI2RlZmluZSBHRVRfUFRFX0FTSUQoZW50cnkpICBleHRyYWN0NjQoKGVudHJ5 KSwgNTIsICA3KQorI2RlZmluZSBHRVRfUFRFX0FUUjAoZW50cnkpICBleHRyYWN0NjQoKGVudHJ5 KSwgNTksICAxKQorI2RlZmluZSBHRVRfUFRFX0FUUjEoZW50cnkpICBleHRyYWN0NjQoKGVudHJ5 KSwgNjAsICAxKQorI2RlZmluZSBHRVRfUFRFX1BBMzUoZW50cnkpICBleHRyYWN0NjQoKGVudHJ5 KSwgNjEsICAxKQorI2RlZmluZSBHRVRfUFRFX0coZW50cnkpICAgICBleHRyYWN0NjQoKGVudHJ5 KSwgNjIsICAxKQorI2RlZmluZSBHRVRfUFRFX1YoZW50cnkpICAgICBleHRyYWN0NjQoKGVudHJ5 KSwgNjMsICAxKQorCisvKiBQUEQgKHBoeXNpY2FsIHBhZ2UgZGVzY3JpcHRvcikgKi8KK3N0YXRp YyBpbmxpbmUgdWludDY0X3QgR0VUX1BQRCh1aW50NjRfdCBlbnRyeSkKK3sKKyAgICByZXR1cm4g R0VUX1BURV9QUEQoZW50cnkpIHwgKEdFVF9QVEVfUEEzNShlbnRyeSkgPDwgMjQpOworfQorCisj ZGVmaW5lIE5PX0FTSUQgICAgICAoMSA8PCA4KQorCit0eXBlZGVmIGVudW0geworICAgIFBHU0la RV80SywKKyAgICBQR1NJWkVfMTZLLAorICAgIFBHU0laRV82NEssCisgICAgUEdTSVpFXzI1Nkss CisgICAgUEdTSVpFXzFNLAorICAgIFBHU0laRV80TSwKKyAgICBQR1NJWkVfMTZNLAorICAgIFBH U0laRV82NE0sCisgICAgUEdTSVpFXzI1Nk0sCisgICAgUEdTSVpFXzFHLAorfSB0bGJfcGdzaXpl X3Q7CisKKyNkZWZpbmUgTlVNX1BHU0laRV9UWVBFUyAoUEdTSVpFXzFHICsgMSkKKworc3RhdGlj IGNvbnN0IGNoYXIgKnBnc2l6ZV9zdHJbTlVNX1BHU0laRV9UWVBFU10gPSB7CisgICAgIjRLIiwK KyAgICAiMTZLIiwKKyAgICAiNjRLIiwKKyAgICAiMjU2SyIsCisgICAgIjFNIiwKKyAgICAiNE0i LAorICAgICIxNk0iLAorICAgICI2NE0iLAorICAgICIyNTZNIiwKKyAgICAiMUciLAorfTsKKwor I2RlZmluZSBJTlZBTElEX01BU0sgMHhmZmZmZmZmZkxMCisKK3N0YXRpYyBjb25zdCB1aW50NjRf dCBlbmNtYXNrXzJfbWFza1tdID0geworICAgIDB4MGZmZkxMLCAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDRrLCAgIDAwMDAgKi8KKyAgICAweDNmZmZMTCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAxNmssICAwMDAxICovCisgICAgMHhmZmZmTEwsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogNjRrLCAgMDAxMCAqLworICAgIDB4M2ZmZmZMTCwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDI1NmssIDAwMTEgKi8KKyAgICAweGZmZmZmTEwsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxbSwgICAwMTAwICovCisgICAgMHgzZmZmZmZMTCwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNG0sICAgMDEwMSAqLworICAgIDB4ZmZmZmZmTEwsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDE2bSwgIDAxMTAgKi8KKyAgICAweDNmZmZmZmZMTCwgICAgICAgICAg ICAgICAgICAgICAgICAvKiA2NG0sICAwMTExICovCisgICAgMHhmZmZmZmZmTEwsICAgICAgICAg ICAgICAgICAgICAgICAgLyogMjU2bSwgMTAwMCAqLworICAgIDB4M2ZmZmZmZmZMTCwgICAgICAg ICAgICAgICAgICAgICAgIC8qIDFnLCAgIDEwMDEgKi8KKyAgICBJTlZBTElEX01BU0ssICAgICAg ICAgICAgICAgICAgICAgICAvKiBSU1ZELCAxMDEwICovCit9OworCitzdGF0aWMgaW5saW5lIHRs Yl9wZ3NpemVfdCBoZXhfdGxiX3Bnc2l6ZV90eXBlKHVpbnQ2NF90IGVudHJ5KQoreworICAgIGlm IChlbnRyeSA9PSAwKSB7CisgICAgICAgIHFlbXVfbG9nX21hc2soQ1BVX0xPR19NTVUsICIlczog U3VwcGxpZWQgVExCIGVudHJ5IHdhcyAwIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBfX2Z1 bmNfXyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB0bGJfcGdzaXplX3Qgc2l6ZSA9 IGN0ejY0KGVudHJ5KTsKKyAgICBnX2Fzc2VydChzaXplIDwgTlVNX1BHU0laRV9UWVBFUyk7Cisg ICAgcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgaGV4X3RsYl9wYWdl X3NpemVfYnl0ZXModWludDY0X3QgZW50cnkpCit7CisgICAgcmV0dXJuIDF1bGwgPDwgKHFlbXVf dGFyZ2V0X3BhZ2VfYml0cygpICsgMiAqIGhleF90bGJfcGdzaXplX3R5cGUoZW50cnkpKTsKK30K Kworc3RhdGljIGlubGluZSB1aW50NjRfdCBoZXhfdGxiX3BoeXNfcGFnZV9udW0odWludDY0X3Qg ZW50cnkpCit7CisgICAgdWludDMyX3QgcHBkID0gR0VUX1BQRChlbnRyeSk7CisgICAgcmV0dXJu IHBwZCA+PiAxOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGhleF90bGJfcGh5c19hZGRy KHVpbnQ2NF90IGVudHJ5KQoreworICAgIHVpbnQ2NF90IHBhZ2VtYXNrID0gZW5jbWFza18yX21h c2tbaGV4X3RsYl9wZ3NpemVfdHlwZShlbnRyeSldOworICAgIHVpbnQ2NF90IHBhZ2VudW0gPSBo ZXhfdGxiX3BoeXNfcGFnZV9udW0oZW50cnkpOworICAgIHVpbnQ2NF90IFBBID0gKHBhZ2VudW0g PDwgcWVtdV90YXJnZXRfcGFnZV9iaXRzKCkpICYgKH5wYWdlbWFzayk7CisgICAgcmV0dXJuIFBB OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGhleF90bGJfdmlydF9hZGRyKHVpbnQ2NF90 IGVudHJ5KQoreworICAgIHJldHVybiAodWludDY0X3QpR0VUX1BURV9WUE4oZW50cnkpIDw8IHFl bXVfdGFyZ2V0X3BhZ2VfYml0cygpOworfQorCitib29sIGhleGFnb25fdGxiX2R1bXBfZW50cnko TW9uaXRvciAqbW9uLCB1aW50NjRfdCBlbnRyeSkKK3sKKyAgICBpZiAoR0VUX1BURV9WKGVudHJ5 KSkgeworICAgICAgICB1aW50NjRfdCBQQSA9IGhleF90bGJfcGh5c19hZGRyKGVudHJ5KTsKKyAg ICAgICAgdWludDY0X3QgVkEgPSBoZXhfdGxiX3ZpcnRfYWRkcihlbnRyeSk7CisgICAgICAgIG1v bml0b3JfcHJpbnRmKG1vbiwgIjB4JTAxNiIgUFJJeDY0ICI6ICIsIGVudHJ5KTsKKyAgICAgICAg bW9uaXRvcl9wcmludGYobW9uLCAiVjolIiBQUklkNjQgIiBHOiUiIFBSSWQ2NAorICAgICAgICAg ICAgICAgICAgICAgICAiIEExOiUiIFBSSWQ2NCAiIEEwOiUiIFBSSWQ2NCwKKyAgICAgICAgICAg ICAgICAgICAgICAgR0VUX1BURV9WKGVudHJ5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgR0VU X1BURV9HKGVudHJ5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgR0VUX1BURV9BVFIxKGVudHJ5 KSwKKyAgICAgICAgICAgICAgICAgICAgICAgR0VUX1BURV9BVFIwKGVudHJ5KSk7CisgICAgICAg IG1vbml0b3JfcHJpbnRmKG1vbiwgIiBBU0lEOjB4JTAyIiBQUkl4NjQgIiBWQToweCUwOCIgUFJJ eDY0LAorICAgICAgICAgICAgICAgICAgICAgICBHRVRfUFRFX0FTSUQoZW50cnkpLCBWQSk7Cisg ICAgICAgIG1vbml0b3JfcHJpbnRmKG1vbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIiBYOiUi IFBSSWQ2NCAiIFc6JSIgUFJJZDY0ICIgUjolIiBQUklkNjQKKyAgICAgICAgICAgICAgICAgICAg ICAgIiBVOiUiIFBSSWQ2NCAiIEM6JSIgUFJJZDY0LAorICAgICAgICAgICAgICAgICAgICAgICBH RVRfUFRFX1goZW50cnkpLAorICAgICAgICAgICAgICAgICAgICAgICBHRVRfUFRFX1coZW50cnkp LAorICAgICAgICAgICAgICAgICAgICAgICBHRVRfUFRFX1IoZW50cnkpLAorICAgICAgICAgICAg ICAgICAgICAgICBHRVRfUFRFX1UoZW50cnkpLAorICAgICAgICAgICAgICAgICAgICAgICBHRVRf UFRFX0MoZW50cnkpKTsKKyAgICAgICAgbW9uaXRvcl9wcmludGYobW9uLCAiIFBBOjB4JTA5IiBQ Ukl4NjQgIiBTWjolcyAoMHglIiBQUkl4NjQgIikiLAorICAgICAgICAgICAgICAgICAgICAgICBQ QSwgcGdzaXplX3N0cltoZXhfdGxiX3Bnc2l6ZV90eXBlKGVudHJ5KV0sCisgICAgICAgICAgICAg ICAgICAgICAgIGhleF90bGJfcGFnZV9zaXplX2J5dGVzKGVudHJ5KSk7CisgICAgICAgIG1vbml0 b3JfcHJpbnRmKG1vbiwgIlxuIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg IC8qIE5vdCB2YWxpZCAqLworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBi b29sIGhleF90bGJfZW50cnlfbWF0Y2hfbm9wZXJtKHVpbnQ2NF90IGVudHJ5LCB1aW50MzJfdCBh c2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2 NF90IFZBKQoreworICAgIGlmIChHRVRfUFRFX1YoZW50cnkpKSB7CisgICAgICAgIGlmIChHRVRf UFRFX0coZW50cnkpKSB7CisgICAgICAgICAgICAvKiBHbG9iYWwgZW50cnkgLSBpZ25vcmUgQVNJ RCAqLworICAgICAgICB9IGVsc2UgaWYgKGFzaWQgIT0gTk9fQVNJRCkgeworICAgICAgICAgICAg dWludDMyX3QgdGxiX2FzaWQgPSBHRVRfUFRFX0FTSUQoZW50cnkpOworICAgICAgICAgICAgaWYg KHRsYl9hc2lkICE9IGFzaWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1aW50NjRfdCBwYWdlX3NpemUgPSBoZXhf dGxiX3BhZ2Vfc2l6ZV9ieXRlcyhlbnRyeSk7CisgICAgICAgIHVpbnQ2NF90IHBhZ2Vfc3RhcnQg PQorICAgICAgICAgICAgUk9VTkRfRE9XTihoZXhfdGxiX3ZpcnRfYWRkcihlbnRyeSksIHBhZ2Vf c2l6ZSk7CisgICAgICAgIGlmIChwYWdlX3N0YXJ0IDw9IFZBICYmIFZBIDwgcGFnZV9zdGFydCAr IHBhZ2Vfc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9 CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGV4X3RsYl9lbnRy eV9nZXRfcGVybSh1aW50NjRfdCBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1NVUFjY2Vzc1R5cGUgYWNjZXNzX3R5cGUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW11X2lkeCwgaW50ICpwcm90LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqZXhjcCwgaW50ICpj YXVzZV9jb2RlKQoreworICAgIGJvb2wgcGVybV94ID0gR0VUX1BURV9YKGVudHJ5KTsKKyAgICBi b29sIHBlcm1fdyA9IEdFVF9QVEVfVyhlbnRyeSk7CisgICAgYm9vbCBwZXJtX3IgPSBHRVRfUFRF X1IoZW50cnkpOworICAgIGJvb2wgcGVybV91ID0gR0VUX1BURV9VKGVudHJ5KTsKKyAgICBib29s IHVzZXJfaWR4ID0gbW11X2lkeCA9PSBNTVVfVVNFUl9JRFg7CisKKyAgICBpZiAobW11X2lkeCA9 PSBNTVVfS0VSTkVMX0lEWCkgeworICAgICAgICAqcHJvdCA9IFBBR0VfVkFMSUQgfCBQQUdFX1JF QUQgfCBQQUdFX1dSSVRFIHwgUEFHRV9FWEVDOworICAgICAgICByZXR1cm47CisgICAgfQorCisg ICAgKnByb3QgPSBQQUdFX1ZBTElEOworICAgIHN3aXRjaCAoYWNjZXNzX3R5cGUpIHsKKyAgICBj YXNlIE1NVV9JTlNUX0ZFVENIOgorICAgICAgICBpZiAodXNlcl9pZHggJiYgIXBlcm1fdSkgewor ICAgICAgICAgICAgKmV4Y3AgPSBIRVhfRVZFTlRfUFJFQ0lTRTsKKyAgICAgICAgICAgICpjYXVz ZV9jb2RlID0gSEVYX0NBVVNFX0ZFVENIX05PX1VQQUdFOworICAgICAgICB9IGVsc2UgaWYgKCFw ZXJtX3gpIHsKKyAgICAgICAgICAgICpleGNwID0gSEVYX0VWRU5UX1BSRUNJU0U7CisgICAgICAg ICAgICAqY2F1c2VfY29kZSA9IEhFWF9DQVVTRV9GRVRDSF9OT19YUEFHRTsKKyAgICAgICAgfQor ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1NVV9EQVRBX0xPQUQ6CisgICAgICAgIGlmICh1c2Vy X2lkeCAmJiAhcGVybV91KSB7CisgICAgICAgICAgICAqZXhjcCA9IEhFWF9FVkVOVF9QUkVDSVNF OworICAgICAgICAgICAgKmNhdXNlX2NvZGUgPSBIRVhfQ0FVU0VfUFJJVl9OT19VUkVBRDsKKyAg ICAgICAgfSBlbHNlIGlmICghcGVybV9yKSB7CisgICAgICAgICAgICAqZXhjcCA9IEhFWF9FVkVO VF9QUkVDSVNFOworICAgICAgICAgICAgKmNhdXNlX2NvZGUgPSBIRVhfQ0FVU0VfUFJJVl9OT19S RUFEOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1VX0RBVEFfU1RPUkU6 CisgICAgICAgIGlmICh1c2VyX2lkeCAmJiAhcGVybV91KSB7CisgICAgICAgICAgICAqZXhjcCA9 IEhFWF9FVkVOVF9QUkVDSVNFOworICAgICAgICAgICAgKmNhdXNlX2NvZGUgPSBIRVhfQ0FVU0Vf UFJJVl9OT19VV1JJVEU7CisgICAgICAgIH0gZWxzZSBpZiAoIXBlcm1fdykgeworICAgICAgICAg ICAgKmV4Y3AgPSBIRVhfRVZFTlRfUFJFQ0lTRTsKKyAgICAgICAgICAgICpjYXVzZV9jb2RlID0g SEVYX0NBVVNFX1BSSVZfTk9fV1JJVEU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg fQorCisgICAgaWYgKCF1c2VyX2lkeCB8fCBwZXJtX3UpIHsKKyAgICAgICAgaWYgKHBlcm1feCkg eworICAgICAgICAgICAgKnByb3QgfD0gUEFHRV9FWEVDOworICAgICAgICB9CisgICAgICAgIGlm IChwZXJtX3IpIHsKKyAgICAgICAgICAgICpwcm90IHw9IFBBR0VfUkVBRDsKKyAgICAgICAgfQor ICAgICAgICBpZiAocGVybV93KSB7CisgICAgICAgICAgICAqcHJvdCB8PSBQQUdFX1dSSVRFOwor ICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaGV4X3RsYl9lbnRyeV9t YXRjaCh1aW50NjRfdCBlbnRyeSwgdWludDhfdCBhc2lkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgVkEsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNTVVBY2Nlc3NUeXBlIGFjY2Vzc190eXBlLCBod2FkZHIgKlBBLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwcm90LCB1aW50NjRfdCAq c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKmV4 Y3AsIGludCAqY2F1c2VfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBtbXVfaWR4KQoreworICAgIGlmIChoZXhfdGxiX2VudHJ5X21hdGNoX25vcGVybShl bnRyeSwgYXNpZCwgVkEpKSB7CisgICAgICAgIGhleF90bGJfZW50cnlfZ2V0X3Blcm0oZW50cnks IGFjY2Vzc190eXBlLCBtbXVfaWR4LCBwcm90LCBleGNwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhdXNlX2NvZGUpOworICAgICAgICAqUEEgPSBoZXhfdGxiX3BoeXNfYWRkcihl bnRyeSk7CisgICAgICAgICpzaXplID0gaGV4X3RsYl9wYWdlX3NpemVfYnl0ZXMoZW50cnkpOwor ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0 aWMgYm9vbCBoZXhfdGxiX2lzX21hdGNoKHVpbnQ2NF90IGVudHJ5MSwgdWludDY0X3QgZW50cnky LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbnNpZGVyX2diaXQpCit7Cisg ICAgYm9vbCB2YWxpZDEgPSBHRVRfUFRFX1YoZW50cnkxKTsKKyAgICBib29sIHZhbGlkMiA9IEdF VF9QVEVfVihlbnRyeTIpOworICAgIHVpbnQ2NF90IHNpemUxID0gaGV4X3RsYl9wYWdlX3NpemVf Ynl0ZXMoZW50cnkxKTsKKyAgICB1aW50NjRfdCB2YWRkcjEgPSBST1VORF9ET1dOKGhleF90bGJf dmlydF9hZGRyKGVudHJ5MSksIHNpemUxKTsKKyAgICB1aW50NjRfdCBzaXplMiA9IGhleF90bGJf cGFnZV9zaXplX2J5dGVzKGVudHJ5Mik7CisgICAgdWludDY0X3QgdmFkZHIyID0gUk9VTkRfRE9X TihoZXhfdGxiX3ZpcnRfYWRkcihlbnRyeTIpLCBzaXplMik7CisgICAgaW50IGFzaWQxID0gR0VU X1BURV9BU0lEKGVudHJ5MSk7CisgICAgaW50IGFzaWQyID0gR0VUX1BURV9BU0lEKGVudHJ5Mik7 CisgICAgYm9vbCBnYml0MSA9IEdFVF9QVEVfRyhlbnRyeTEpOworICAgIGJvb2wgZ2JpdDIgPSBH RVRfUFRFX0coZW50cnkyKTsKKworICAgIGlmICghdmFsaWQxIHx8ICF2YWxpZDIpIHsKKyAgICAg ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgoKHZhZGRyMSA8PSB2YWRkcjIpICYm ICh2YWRkcjIgPCAodmFkZHIxICsgc2l6ZTEpKSkgfHwKKyAgICAgICAgKCh2YWRkcjIgPD0gdmFk ZHIxKSAmJiAodmFkZHIxIDwgKHZhZGRyMiArIHNpemUyKSkpKSB7CisgICAgICAgIGlmIChhc2lk MSA9PSBhc2lkMikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKChjb25zaWRlcl9nYml0ICYmIGdiaXQxKSB8fCBnYml0MikgeworICAgICAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisv KiBQdWJsaWMgQVBJICovCisKK3VpbnQ2NF90IGhleGFnb25fdGxiX3JlYWQoSGV4YWdvblRMQlN0 YXRlICp0bGIsIHVpbnQzMl90IGluZGV4KQoreworICAgIGdfYXNzZXJ0KGluZGV4IDwgdGxiLT5u dW1fZW50cmllcyk7CisgICAgcmV0dXJuIHRsYi0+ZW50cmllc1tpbmRleF07Cit9CisKK3ZvaWQg aGV4YWdvbl90bGJfd3JpdGUoSGV4YWdvblRMQlN0YXRlICp0bGIsIHVpbnQzMl90IGluZGV4LCB1 aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBnX2Fzc2VydChpbmRleCA8IHRsYi0+bnVtX2VudHJpZXMp OworICAgIHRsYi0+ZW50cmllc1tpbmRleF0gPSB2YWx1ZTsKK30KKworYm9vbCBoZXhhZ29uX3Rs Yl9maW5kX21hdGNoKEhleGFnb25UTEJTdGF0ZSAqdGxiLCB1aW50MzJfdCBhc2lkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFZBLCBNTVVBY2Nlc3NUeXBlIGFjY2Vzc190 eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3YWRkciAqUEEsIGludCAqcHJvdCwg dWludDY0X3QgKnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqZXhj cCwgaW50ICpjYXVzZV9jb2RlLCBpbnQgbW11X2lkeCkKK3sKKyAgICAqUEEgPSAwOworICAgICpw cm90ID0gMDsKKyAgICAqc2l6ZSA9IDA7CisgICAgKmV4Y3AgPSAwOworICAgICpjYXVzZV9jb2Rl ID0gMDsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB0bGItPm51bV9lbnRyaWVzOyBp KyspIHsKKyAgICAgICAgaWYgKGhleF90bGJfZW50cnlfbWF0Y2godGxiLT5lbnRyaWVzW2ldLCBh c2lkLCBWQSwgYWNjZXNzX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBB LCBwcm90LCBzaXplLCBleGNwLCBjYXVzZV9jb2RlLCBtbXVfaWR4KSkgeworICAgICAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1 aW50MzJfdCBoZXhhZ29uX3RsYl9sb29rdXAoSGV4YWdvblRMQlN0YXRlICp0bGIsIHVpbnQzMl90 IGFzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVkEsIGludCAqY2F1 c2VfY29kZSkKK3sKKyAgICB1aW50MzJfdCBub3RfZm91bmQgPSAweDgwMDAwMDAwOworICAgIHVp bnQzMl90IGlkeCA9IG5vdF9mb3VuZDsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB0 bGItPm51bV9lbnRyaWVzOyBpKyspIHsKKyAgICAgICAgdWludDY0X3QgZW50cnkgPSB0bGItPmVu dHJpZXNbaV07CisgICAgICAgIGlmIChoZXhfdGxiX2VudHJ5X21hdGNoX25vcGVybShlbnRyeSwg YXNpZCwgVkEpKSB7CisgICAgICAgICAgICBpZiAoaWR4ICE9IG5vdF9mb3VuZCkgeworICAgICAg ICAgICAgICAgICpjYXVzZV9jb2RlID0gSEVYX0NBVVNFX0lNUFJFQ0lTRV9NVUxUSV9UTEJfTUFU Q0g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZHggPSBpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlkeCA9PSBub3RfZm91bmQpIHsK KyAgICAgICAgcWVtdV9sb2dfbWFzayhDUFVfTE9HX01NVSwKKyAgICAgICAgICAgICAgICAgICAg ICAiJXM6IDB4JSIgUFJJeDMyICIsIDB4JTA4IiBQUkl4MzIgIiA9PiBOT1QgRk9VTkRcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGFzaWQsIFZBKTsKKyAgICB9IGVsc2Ugewor ICAgICAgICBxZW11X2xvZ19tYXNrKENQVV9MT0dfTU1VLAorICAgICAgICAgICAgICAgICAgICAg ICIlczogMHglIiBQUkl4MzIgIiwgMHglMDgiIFBSSXgzMiAiID0+ICVkXG4iLAorICAgICAgICAg ICAgICAgICAgICAgIF9fZnVuY19fLCBhc2lkLCBWQSwgaWR4KTsKKyAgICB9CisKKyAgICByZXR1 cm4gaWR4OworfQorCisvKgorICogUmV0dXJuIGNvZGVzOgorICogMCBvciBwb3NpdGl2ZSAgICAg ICAgICAgICBpbmRleCBvZiBtYXRjaAorICogLTEgICAgICAgICAgICAgICAgICAgICAgICBtdWx0 aXBsZSBtYXRjaGVzCisgKiAtMiAgICAgICAgICAgICAgICAgICAgICAgIG5vIG1hdGNoCisgKi8K K2ludCBoZXhhZ29uX3RsYl9jaGVja19vdmVybGFwKEhleGFnb25UTEJTdGF0ZSAqdGxiLCB1aW50 NjRfdCBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGluZGV4 KQoreworICAgIGludCBtYXRjaGVzID0gMDsKKyAgICBpbnQgbGFzdF9tYXRjaCA9IDA7CisKKyAg ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdGxiLT5udW1fZW50cmllczsgaSsrKSB7CisgICAg ICAgIGlmIChoZXhfdGxiX2lzX21hdGNoKGVudHJ5LCB0bGItPmVudHJpZXNbaV0sIGZhbHNlKSkg eworICAgICAgICAgICAgbWF0Y2hlcysrOworICAgICAgICAgICAgbGFzdF9tYXRjaCA9IGk7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWF0Y2hlcyA9PSAxKSB7CisgICAgICAgIHJldHVy biBsYXN0X21hdGNoOworICAgIH0KKyAgICBpZiAobWF0Y2hlcyA9PSAwKSB7CisgICAgICAgIHJl dHVybiAtMjsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIGhleGFnb25fdGxiX2R1 bXAoTW9uaXRvciAqbW9uLCBIZXhhZ29uVExCU3RhdGUgKnRsYikKK3sKKyAgICBmb3IgKHVpbnQz Ml90IGkgPSAwOyBpIDwgdGxiLT5udW1fZW50cmllczsgaSsrKSB7CisgICAgICAgIGhleGFnb25f dGxiX2R1bXBfZW50cnkobW9uLCB0bGItPmVudHJpZXNbaV0pOworICAgIH0KK30KKwordWludDMy X3QgaGV4YWdvbl90bGJfZ2V0X251bV9lbnRyaWVzKEhleGFnb25UTEJTdGF0ZSAqdGxiKQorewor ICAgIHJldHVybiB0bGItPm51bV9lbnRyaWVzOworfQorCisvKiBRT00gbGlmZWN5Y2xlICovCisK K3N0YXRpYyB2b2lkIGhleGFnb25fdGxiX2luaXQoT2JqZWN0ICpvYmopCit7Cit9CisKK3N0YXRp YyB2b2lkIGhleGFnb25fdGxiX3JlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwgRXJyb3IgKiplcnJw KQoreworICAgIEhleGFnb25UTEJTdGF0ZSAqcyA9IEhFWEFHT05fVExCKGRldik7CisKKyAgICBp ZiAocy0+bnVtX2VudHJpZXMgPT0gMCB8fCBzLT5udW1fZW50cmllcyA+IE1BWF9UTEJfRU5UUklF UykgeworICAgICAgICBlcnJvcl9zZXRnKGVycnAsICJJbnZhbGlkIFRMQiBudW0tZW50cmllczog JSIgUFJJdTMyLAorICAgICAgICAgICAgICAgICAgIHMtPm51bV9lbnRyaWVzKTsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKyAgICBzLT5lbnRyaWVzID0gZ19uZXcwKHVpbnQ2NF90LCBzLT5udW1f ZW50cmllcyk7Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fdGxiX3VucmVhbGl6ZShEZXZpY2VT dGF0ZSAqZGV2KQoreworICAgIEhleGFnb25UTEJTdGF0ZSAqcyA9IEhFWEFHT05fVExCKGRldik7 CisgICAgZ19mcmVlKHMtPmVudHJpZXMpOworICAgIHMtPmVudHJpZXMgPSBOVUxMOworfQorCitz dGF0aWMgdm9pZCBoZXhhZ29uX3RsYl9yZXNldF9ob2xkKE9iamVjdCAqb2JqLCBSZXNldFR5cGUg dHlwZSkKK3sKKyAgICBIZXhhZ29uVExCU3RhdGUgKnMgPSBIRVhBR09OX1RMQihvYmopOworICAg IGlmIChzLT5lbnRyaWVzKSB7CisgICAgICAgIG1lbXNldChzLT5lbnRyaWVzLCAwLCBzaXplb2Yo dWludDY0X3QpICogcy0+bnVtX2VudHJpZXMpOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IFZN U3RhdGVEZXNjcmlwdGlvbiB2bXN0YXRlX2hleGFnb25fdGxiID0geworICAgIC5uYW1lID0gImhl eGFnb24tdGxiIiwKKyAgICAudmVyc2lvbl9pZCA9IDAsCisgICAgLm1pbmltdW1fdmVyc2lvbl9p ZCA9IDAsCisgICAgLmZpZWxkcyA9IChjb25zdCBWTVN0YXRlRmllbGRbXSkgeworICAgICAgICBW TVNUQVRFX1VJTlQzMihudW1fZW50cmllcywgSGV4YWdvblRMQlN0YXRlKSwKKyAgICAgICAgVk1T VEFURV9WQVJSQVlfVUlOVDMyX0FMTE9DKGVudHJpZXMsIEhleGFnb25UTEJTdGF0ZSwgbnVtX2Vu dHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB2bXN0YXRlX2lu Zm9fdWludDY0LCB1aW50NjRfdCksCisgICAgICAgIFZNU1RBVEVfRU5EX09GX0xJU1QoKQorICAg IH0sCit9OworCitzdGF0aWMgY29uc3QgUHJvcGVydHkgaGV4YWdvbl90bGJfcHJvcGVydGllc1td ID0geworICAgIERFRklORV9QUk9QX1VJTlQzMigibnVtLWVudHJpZXMiLCBIZXhhZ29uVExCU3Rh dGUsIG51bV9lbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICBNQVhfVExCX0VOVFJJRVMp LAorfTsKKworc3RhdGljIHZvaWQgaGV4YWdvbl90bGJfY2xhc3NfaW5pdChPYmplY3RDbGFzcyAq a2xhc3MsIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgRGV2aWNlQ2xhc3MgKmRjID0gREVWSUNF X0NMQVNTKGtsYXNzKTsKKyAgICBSZXNldHRhYmxlQ2xhc3MgKnJjID0gUkVTRVRUQUJMRV9DTEFT UyhrbGFzcyk7CisKKyAgICBkYy0+cmVhbGl6ZSA9IGhleGFnb25fdGxiX3JlYWxpemU7CisgICAg ZGMtPnVucmVhbGl6ZSA9IGhleGFnb25fdGxiX3VucmVhbGl6ZTsKKyAgICByYy0+cGhhc2VzLmhv bGQgPSBoZXhhZ29uX3RsYl9yZXNldF9ob2xkOworICAgIGRjLT52bXNkID0gJnZtc3RhdGVfaGV4 YWdvbl90bGI7CisgICAgZGMtPnVzZXJfY3JlYXRhYmxlID0gZmFsc2U7CisgICAgZGV2aWNlX2Ns YXNzX3NldF9wcm9wcyhkYywgaGV4YWdvbl90bGJfcHJvcGVydGllcyk7Cit9CisKK3N0YXRpYyBj b25zdCBUeXBlSW5mbyBoZXhhZ29uX3RsYl9pbmZvID0geworICAgIC5uYW1lID0gVFlQRV9IRVhB R09OX1RMQiwKKyAgICAucGFyZW50ID0gVFlQRV9TWVNfQlVTX0RFVklDRSwKKyAgICAuaW5zdGFu Y2Vfc2l6ZSA9IHNpemVvZihIZXhhZ29uVExCU3RhdGUpLAorICAgIC5pbnN0YW5jZV9pbml0ID0g aGV4YWdvbl90bGJfaW5pdCwKKyAgICAuY2xhc3NfaW5pdCA9IGhleGFnb25fdGxiX2NsYXNzX2lu aXQsCit9OworCitzdGF0aWMgdm9pZCBoZXhhZ29uX3RsYl9yZWdpc3Rlcl90eXBlcyh2b2lkKQor eworICAgIHR5cGVfcmVnaXN0ZXJfc3RhdGljKCZoZXhhZ29uX3RsYl9pbmZvKTsKK30KKwordHlw ZV9pbml0KGhleGFnb25fdGxiX3JlZ2lzdGVyX3R5cGVzKQotLSAKMi4zNC4xCgo=