From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E13ED30B539; Thu, 18 Dec 2025 09:11:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.5 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766049116; cv=none; b=PLEdtXViXvCjQbcF4EldoqRR5VbhepKdCj/9BNnckIuCX5f8uPq4ZodWV/MetG9lzJhtRA0copPCWhz03gyd1HfuAu5fXvwV/NQiWg32T7PVW2IuxkgsCAUySD9GGGGyoFKn7t26TvJvSmTdiPOR4I4Zszzyh9pQmEHqTyqCX6Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766049116; c=relaxed/simple; bh=SXsKjnMYfgWYWDLCNNSvpxIBFiGfC5za6X46ywczwsI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mEbmJK31qdJMZcYGv+B9Mfpu9qVv7riRAfDuZAgCcM7/TPbjObTH3nA6bEqZIYRe8NPsBE5Hn18QSWNoE1OHDnXPSC9dSQBQirX+Ksw0keh9CfDn9TEmIE7/AzPdIVXe7zDO7UBaCx1KpF+QevsyqIeRCNXDkI8uDoV2bZ7RrP0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=SUYKeF48; arc=none smtp.client-ip=220.197.31.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="SUYKeF48" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=SX sKjnMYfgWYWDLCNNSvpxIBFiGfC5za6X46ywczwsI=; b=SUYKeF48ZHWfmsO188 VmWpABUHJS00+WkE4hlHWuzDarRa6vaqXiGHeM3IkXKoo4p4U79soHupBs3dmQ+D UhR+a4IsMAIK62/e68VzW4Qq0oiH0a8OTdZP8oG2o2soD80p+y+FBBsvniUKyGy8 EZLxbtPAvhFomBGjPp4QGwAkI= Received: from xwm-TianYi510Pro-14IMB.. (unknown []) by gzga-smtp-mtada-g0-4 (Coremail) with SMTP id _____wC3U84cxUNpI7dcBA--.210S5; Thu, 18 Dec 2025 17:10:57 +0800 (CST) From: Xiong Weimin <15927021679@163.com> To: "Michael S . Tsirkin" , David Hildenbrand , Jason Wang , Stefano Garzarella , Thomas Monjalon , David Marchand , Luca Boccassi , Kevin Traynor , Christian Ehrhardt , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Xueming Li , Maxime Coquelin , Chenbo Xia , Bruce Richardson Cc: kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, xiongweimin Subject: [PATCH 03/10] drivers/infiniband/hw/virtio: Implement core device and key resource management Date: Thu, 18 Dec 2025 17:09:43 +0800 Message-ID: <20251218091050.55047-4-15927021679@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251218091050.55047-1-15927021679@163.com> References: <20251218091050.55047-1-15927021679@163.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: base64 X-CM-TRANSID:_____wC3U84cxUNpI7dcBA--.210S5 X-Coremail-Antispam: 1Uf129KBjvAXoWDCr1kWFW7Jw48Ww1DWF13twb_yoW3Gw47Ao Z3Z3sxXr1rK347ur4kKrWktF97Zayvga98Ar4FqFZ8uF47Xa1Yka47K3W3J34rWr1YkF48 Cry3tw1FgrWvqFWrn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUTrb1UUUUU X-CM-SenderInfo: jprvmjixqsilmxzbiqqrwthudrp/xtbC8wGkLWlDxSGyFwAA3Q RnJvbTogeGlvbmd3ZWltaW4gPHhpb25nd2VpbWluQGt5bGlub3MuY24+CgpUaGlzIGNvbW1pdCBj b25zb2xpZGF0ZXMgZm91bmRhdGlvbmFsIGltcGxlbWVudGF0aW9ucyBmb3Igdmhvc3QtdXNlciBS RE1BCmRldmljZSBkcml2ZXIsIGluY2x1ZGluZzoKCjEuIENvcmUgRGV2aWNlIEluaXRpYWxpemF0 aW9uOgogICAtIERQREsgRUFMIHNldHVwIHdpdGggUE9TSVggc2lnbmFsIGhhbmRsaW5nCiAgIC0g TlVNQS1hd2FyZSByZXNvdXJjZSBhbGxvY2F0aW9uIChwYWNrZXQgcG9vbHMsIHJpbmcgYnVmZmVy cykKICAgLSBCYWNrZW5kIG5ldGRldiBhdXRvLWRldGVjdGlvbiAobmV0X3RhcC9uZXRfdmhvc3Qp CiAgIC0gTXVsdGktZGV2aWNlIHN1cHBvcnQgd2l0aCBpc29sYXRlZCBSWC9UWCByZXNvdXJjZXMK ICAgLSB2SG9zdC11c2VyIHByb3RvY29sIGZlYXR1cmUgbmVnb3RpYXRpb24KCjIuIFJETUEgQ29u dHJvbCBQYXRoOgogICAtIERldmljZSBjYXBhYmlsaXR5IHF1ZXJpZXMgKFZIT1NUX1JETUFfQ1RS TF9ST0NFX1FVRVJZX0RFVklDRSkKICAgLSBQb3J0IGF0dHJpYnV0ZSByZXBvcnRpbmcgKFZIT1NU X1JETUFfQ1RSTF9ST0NFX1FVRVJZX1BPUlQpCiAgIC0gU2NhdHRlcmxpc3QgaGVscGVycyBmb3Ig dm1hbGxvYy9saW5lYXIgYnVmZmVycwogICAtIEF0b21pYyBtZW1vcnkgaGFuZGxpbmcgZm9yIGlu dGVycnVwdCBjb250ZXh0cwoKMy4gUmVzb3VyY2UgTWFuYWdlbWVudDoKICAgLSBQcm90ZWN0aW9u IERvbWFpbnMgKFBEKSBhbGxvY2F0aW9uL2Rlc3RydWN0aW9uCiAgIC0gQ29tcGxldGlvbiBRdWV1 ZXMgKENRKSBjcmVhdGlvbi9kZXN0cnVjdGlvbiB3aXRoOgogICAgICogS2VybmVsLW1vZGUgcHJl LXBvc3RlZCBidWZmZXJzCiAgICAgKiBVc2Vyc3BhY2UgbW1hcCBzdXBwb3J0IGZvciB6ZXJvLWNv cHkgcG9sbGluZwogICAgICogRE1BLWNvaGVyZW50IHJpbmcgYnVmZmVycwogICAtIFF1ZXVlIFBh aXJzIChRUCkgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gd2l0aDoKICAgICAqIER1YWwtbW9kZSBzdXBw b3J0IChrZXJuZWwvdXNlcnNwYWNlKQogICAgICogRHluYW1pYyBXUUUgYnVmZmVyIHNpemluZwog ICAgICogRG9vcmJlbGwgcmVnaXN0ZXIgbWFwcGluZwogICAtIEdsb2JhbCBiaXRtYXAtYmFzZWQg b2JqZWN0IHBvb2xzIChQRC9DUS9RUC9BSC9NUikKCjQuIFVzZXJzcGFjZSBJbnRlZ3JhdGlvbjoK ICAgLSBEZXRhaWxlZCBtbWFwIHN0cnVjdHVyZXMgZm9yIFNRL1JRIHJpbmdzCiAgIC0gQXRvbWlj IGNvdW50ZXJzIGZvciByZXNvdXJjZSB0cmFja2luZwogICAtIENvbXByZWhlbnNpdmUgZXJyb3Ig aGFuZGxpbmcgcGF0aHMKICAgLSBBQkktY29tcGxpYW50IHVyZXNwb25zZSBzdHJ1Y3R1cmVzCgpU aGUgaW1wbGVtZW50YXRpb24gZmVhdHVyZXM6Ci0gRGV2aWNlL3BvcnQgYXR0cmlidXRlIHJlcG9y dGluZyBjb21wbGlhbnQgd2l0aCBJQiBzcGVjaWZpY2F0aW9ucwotIFBlci1yZXNvdXJjZSByZWZl cmVuY2UgY291bnRpbmcKLSBHcmFjZWZ1bCByZXNvdXJjZSBjbGVhbnVwIGR1cmluZyBkZXN0cnVj dGlvbgotIFN1cHBvcnQgZm9yIGJvdGgga2VybmVsIGFuZCB1c2Vyc3BhY2UgbWVtb3J5IG1vZGVs cwoKU2lnbmVkLW9mZi1ieTogWGlvbmcgV2VpbWluIDx4aW9uZ3dlaW1pbkBreWxpbm9zLmNuPgot LS0KLS0tCiAuLi4vZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYS5oICAgICAgfCAg ICA1ICsKIC4uLi9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2FiaS5oICB8ICAy NzkgKysrKwogLi4uL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2Rldl9hcGkuaCAgICAgIHwg ICA0NiArCiAuLi4vZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9pYi5jICAgfCAx MTc4ICsrKysrKysrKysrKysrKy0tCiAuLi4vZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92 cmRtYV9pYi5oICAgfCAgMTA2ICstCiAuLi4vZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92 cmRtYV9tYWluLmMgfCAgIDg2ICstCiAuLi4vZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92 cmRtYV9tbWFwLmggfCAgIDg4ICsrCiAuLi4vaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfbmV0 ZGV2LmMgICAgICAgfCAgMTMwICstCiAuLi4vaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfcXVl dWUuYyAgICAgICAgfCAgMTEwICsrCiAuLi4vaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfcXVl dWUuaCAgICAgICAgfCAgICAzICstCiBsaW51eC02LjE2LjgvaW5jbHVkZS9yZG1hL2liX3ZlcmJz LmggICAgICAgICAgfCAgICA5ICsKIDExIGZpbGVzIGNoYW5nZWQsIDE4MDYgaW5zZXJ0aW9ucygr KSwgMjM0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpbnV4LTYuMTYuOC9kcml2 ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2FiaS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfbW1hcC5oCgpk aWZmIC0tZ2l0IGEvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJk bWEuaCBiL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hLmgK aW5kZXggYTY0Njc5NGVmLi45OTkwOTQ0NmYgMTAwNjQ0Ci0tLSBhL2xpbnV4LTYuMTYuOC9kcml2 ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hLmgKKysrIGIvbGludXgtNi4xNi44L2RyaXZl cnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWEuaApAQCAtODAsNCArODAsOSBAQCBzdHJ1Y3Qg dnJkbWFfZGV2IHsKIAlib29sIGZhc3RfZG9vcmJlbGw7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0 cnVjdCB2cmRtYV9kZXYgKnRvX3ZkZXYoc3RydWN0IGliX2RldmljZSAqaWJkZXYpCit7CisJcmV0 dXJuIGNvbnRhaW5lcl9vZihpYmRldiwgc3RydWN0IHZyZG1hX2RldiwgaWJfZGV2KTsKK30KKwog I2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGludXgtNi4x Ni44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfYWJpLmggYi9saW51eC02LjE2 LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9hYmkuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjdjZGM0ZTQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2xp bnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2FiaS5oCkBAIC0w LDAgKzEsMjc5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBvciBCU0Qt My1DbGF1c2UKKworLyogQXV0aG9yczogWGlvbmcgV2VpbWluIDx4aW9uZ3dlaW1pbkBreWxpbm9z LmNuPiAqLworLyogQ29weXJpZ2h0IDIwMjAua3lsaW5vcy5jbi5BbGwgUmlnaHRzIFJlc2VydmVk LiovCisjaWZuZGVmIF9fVlJETUFfQUJJX0hfXworI2RlZmluZSBfX1ZSRE1BX0FCSV9IX18KKwor I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgVlJETUFfQUJJX1ZFUlNJT04gMQor CisvKioKKyAqIHN0cnVjdCB2cmRtYV9jcWUgLSBWaXJ0aW8tUkRNQSBDb21wbGV0aW9uIFF1ZXVl IEVudHJ5IChDUUUpCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIHNpbmdsZSBj b21wbGV0aW9uIGVudHJ5IGluIHRoZSBDb21wbGV0aW9uIFF1ZXVlIChDUSkuCisgKiBJdCBpcyB3 cml0dGVuIGJ5IHRoZSBrZXJuZWwgZHJpdmVyIChvciBkaXJlY3RseSBieSB0aGUgYmFja2VuZCB2 aWEgc2hhcmVkIG1lbW9yeSkKKyAqIHdoZW4gYSBXb3JrIFJlcXVlc3QgKFdSKSBjb21wbGV0ZXMs IGFuZCBpcyByZWFkIGJ5IHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgZHVyaW5nCisgKiBwb2xsaW5n IG9yIGV2ZW50IGhhbmRsaW5nLgorICoKKyAqIFRoZSBsYXlvdXQgbWF0Y2hlcyB0aGUgc2VtYW50 aWNzIG9mIGBzdHJ1Y3QgaWJfd2NgIGJ1dCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZQorICogZm9y IHplcm8tY29weSBhY2Nlc3MuIEFsbCBmaWVsZHMgdXNlIG5hdGl2ZSBieXRlIG9yZGVyIChsaXR0 bGUtZW5kaWFuIGFzc3VtZWQpLAorICogYXMgdmlydGlvIGlzIGluaGVyZW50bHkgbGl0dGxlLWVu ZGlhbi4KKyAqCisgKiBAd3JfaWQ6IFVzZXItcHJvdmlkZWQgV1IgaWRlbnRpZmllciwgY29waWVk IGZyb20gdGhlIG9yaWdpbmFsIHNlbmQvcmVjZWl2ZSByZXF1ZXN0LgorICogICAgICAgICBVc2Vk IHRvIGNvcnJlbGF0ZSBjb21wbGV0aW9ucyB3aXRoIG91dHN0YW5kaW5nIG9wZXJhdGlvbnMuCisg KiBAc3RhdHVzOiBDb21wbGV0aW9uIHN0YXR1cyAoZS5nLiwgSUJfV0NfU1VDQ0VTUywgSUJfV0Nf UkVUUllfRVhDRUVERURfRVJSLCBldGMuKS4KKyAqICAgICAgICAgIFNlZSAmZW51bSBpYl93Y19z dGF0dXMuCisgKiBAb3Bjb2RlOiBPcGVyYXRpb24gdHlwZSB0aGF0IGNvbXBsZXRlZCAoZS5nLiwg SUJfV0NfU0VORCwgSUJfV0NfUkVDViwgSUJfV0NfUkRNQV9XUklURSkuCisgKiAgICAgICAgICBT ZWUgJmVudW0gaWJfd2Nfb3Bjb2RlLgorICogQHZlbmRvcl9lcnI6IFZlbmRvci1zcGVjaWZpYyBl cnJvciBjb2RlIChpZiBhbnkpLiBUeXBpY2FsbHkgMCBvbiBzdWNjZXNzLgorICogQGJ5dGVfbGVu OiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhpcyBvcGVyYXRpb24uCisgKiBAZXg6 IFVuaW9uIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBkYXRhIGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBl OgorICogICAgICAtIEBpbW1fZGF0YTogSW1tZWRpYXRlIGRhdGEgcmVjZWl2ZWQgaW4gYSBTRU5E IHdpdGggaW1tZWRpYXRlIGZsYWcuCisgKiAgICAgIC0gQGludmFsaWRhdGVfcmtleTogUktFWSBp bnZhbGlkYXRlZCBieSBhbiBSRE1BIFdSSVRFIHdpdGggaW52YWxpZGF0ZS4KKyAqIEBxcF9udW06 IFNvdXJjZSBRUCBudW1iZXIgKGZvciBpbmNvbWluZyBjb21wbGV0aW9ucywgdGhpcyBpcyB0aGUg cmVtb3RlIFFQKS4KKyAqIEBzcmNfcXA6IEFsaWFzIGZvciBAcXBfbnVtOyBrZXB0IGZvciBzeW1t ZXRyeSB3aXRoIElCIGNvcmUgbmFtaW5nLgorICogQHdjX2ZsYWdzOiBCaXRtYXNrIG9mIGNvbXBs ZXRpb24gZmxhZ3MgKGUuZy4sIElCX1dDX0dSSCwgSUJfV0NfV0lUSF9JTU0sIElCX1dDX0NPTVBM RVRJT05fVElNRVNUQU1QKS4KKyAqICAgICAgICAgICAgU2VlICZlbnVtIGliX3djX2ZsYWdzLgor ICogQHBrZXlfaW5kZXg6IFBhcnRpdGlvbiBLZXkgaW5kZXggdXNlZCBmb3IgdGhpcyBwYWNrZXQg KGxvY2FsIGNvbnRleHQpLgorICogQHNsaWQ6IFNvdXJjZSBMSUQgKDE2LWJpdCksIHZhbGlkIG9u bHkgZm9yIElCIHRyYW5zcG9ydCBpZiBHUkggbm90IHByZXNlbnQuCisgKiBAc2w6IFNlcnZpY2Ug TGV2ZWwgKDQgYml0cyksIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrZXQgaGVhZGVyLgorICogQGRs aWRfcGF0aF9iaXRzOiBFbmNvZGVzIGVpdGhlciBETElEIHBhdGggYml0cyAoaW4gUm9DRS9JQikg b3Igc3dpdGNoIHBhdGggaW5mb3JtYXRpb24uCisgKiBAcG9ydF9udW06IFBoeXNpY2FsIHBvcnQg bnVtYmVyIG9uIHdoaWNoIHRoZSBwYWNrZXQgd2FzIHJlY2VpdmVkLgorICoKKyAqIE5vdGU6Cisg KiAgIFRoaXMgc3RydWN0dXJlIGlzIG1hcHBlZCBpbnRvIHVzZXJzcGFjZSB2aWEgbW1hcCgpIGFs b25nIHdpdGggdGhlIENRIHJpbmcgYnVmZmVyLgorICogICBBcHBsaWNhdGlvbnMgcG9sbCB0aGlz IGFycmF5IGZvciBuZXcgY29tcGxldGlvbnMgd2l0aG91dCBzeXN0ZW0gY2FsbHMuCisgKgorICog TWVtb3J5IExheW91dCBFeGFtcGxlOgorICoKKyAqICAgICBzdHJ1Y3QgdnJkbWFfY3FlIGNxX3Jp bmdbTl07CisgKgorICogICAgIHdoaWxlIChwb2xsaW5nKSB7CisgKiAgICAgICAgIHN0cnVjdCB2 cmRtYV9jcWUgKmNxZSA9ICZjcV9yaW5nW2hlYWRdOworICogICAgICAgICBpZiAoY3FlLT5zdGF0 dXMgPT0gVlo4MF9DUV9TVEFUVVNfRU1QVFkpCisgKiAgICAgICAgICAgICBicmVhazsgLy8gbm8g bW9yZSBjb21wbGV0aW9ucworICoKKyAqICAgICAgICAgcHJvY2Vzc19jb21wbGV0aW9uKGNxZSk7 CisgKiAgICAgICAgIGNxZS0+c3RhdHVzID0gVlo4MF9DUV9TVEFUVVNfUFJPQ0VTU0VEOyAvLyBv cHRpb25hbCBhY2tub3dsZWRnbWVudAorICogICAgICAgICBoZWFkID0gKGhlYWQgKyAxKSAlIE47 CisgKiAgICAgfQorICoKKyAqIEFsaWdubWVudDogTXVzdCBiZSBhbGlnbmVkIHRvIDgtYnl0ZSBi b3VuZGFyeS4gU2l6ZTogdHlwaWNhbGx5IDY0IGJ5dGVzLgorICovCitzdHJ1Y3QgdnJkbWFfY3Fl IHsKKwlfX3U2NAl3cl9pZDsJCQkvKiBbb3V0XSBVc2VyLWRlZmluZWQgV1IgSUQgKi8KKwlfX3Uz MglzdGF0dXM7CQkJLyogW291dF0gU3RhdHVzIG9mIHRoZSBjb21wbGV0ZWQgV1IgKi8KKwlfX3Uz MglvcGNvZGU7CQkJLyogW291dF0gVHlwZSBvZiBvcGVyYXRpb24gY29tcGxldGVkICovCisJX191 MzIJdmVuZG9yX2VycjsJCS8qIFtvdXRdIFZlbmRvci1zcGVjaWZpYyBlcnJvciBjb2RlICovCisJ X191MzIJYnl0ZV9sZW47CQkvKiBbb3V0XSBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgKi8K KworCXVuaW9uIHsKKwkJX191MzIJaW1tX2RhdGE7CQkvKiBbb3V0XSBJbW1lZGlhdGUgZGF0YSAo aWYgSUJWX1dDX1dJVEhfSU1NKSAqLworCQlfX3UzMglpbnZhbGlkYXRlX3JrZXk7CS8qIFtvdXRd IFJLRVkgaW52YWxpZGF0ZWQgKGlmIElCVl9XQ19XSVRIX0lOVkFMSURBVEUpICovCisJfSBleDsK KworCV9fdTMyCXFwX251bTsJCQkvKiBbb3V0XSBSZW1vdGUgUVAgbnVtYmVyIChzb3VyY2UgUVAp ICovCisJX191MzIJc3JjX3FwOwkJCS8qIFtvdXRdIEFsaWFzIG9mIHFwX251bSBmb3IgY2xhcml0 eSAqLworCWludAl3Y19mbGFnczsJCS8qIFtvdXRdIEZsYWdzIChlLmcuLCBJQl9XQ19HUkgsIElC X1dDX1dJVEhfSU1NKSAqLworCisJX191MTYJcGtleV9pbmRleDsJCS8qIFtvdXRdIFBfS2V5IGlu ZGV4IHVzZWQgKi8KKwlfX3UxNglzbGlkOwkJCS8qIFtvdXRdIFNvdXJjZSBMSUQgKDE2LWJpdCkg Ki8KKwlfX3U4CXNsOwkJCS8qIFtvdXRdIFNlcnZpY2UgTGV2ZWwgKi8KKwlfX3U4CWRsaWRfcGF0 aF9iaXRzOwkJLyogW291dF0gRExJRCBwYXRoIGJpdHMgLyBzd2l0Y2ggcm91dGluZyBpbmZvICov CisJX191OAlwb3J0X251bTsJCS8qIFtvdXRdIFBvcnQgbnVtYmVyIHdoZXJlIHBhY2tldCB3YXMg cmVjZWl2ZWQgKi8KKwlfX3U4ICAgIHJlc2VydmVkWzNdOwkJLyogUGFkIHRvIG1haW50YWluIDgt Ynl0ZSBhbGlnbm1lbnQgKi8KK307CisKKy8qKgorICogc3RydWN0IHZyZG1hX2NyZWF0ZV9jcV91 cmVzcCAtIFJlc3BvbnNlIHRvIHVzZXJzcGFjZSBvbiBDUSBjcmVhdGlvbiB3aXRoIG1tYXAgc3Vw cG9ydAorICogQG9mZnNldDogRmlsZSBvZmZzZXQgdG8gYmUgdXNlZCBpbiBtbWFwKCkgZm9yIG1h cHBpbmcgdGhlIENRIGFuZCB2cmluZy4KKyAqICAgICAgICAgIFBhc3NlZCBiYWNrIGZyb20ga2Vy bmVsIHZpYSByZG1hX3VzZXJfbW1hcF9nZXRfb2Zmc2V0KCkuCisgKiAgICAgICAgICBVc2Vyc3Bh Y2UgZG9lczogbW1hcCgwLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkLCBvZmZzZXQp OworICogQGNxX3NpemU6IFRvdGFsIHNpemUgb2YgdGhlIG1hcHBlZCByZWdpb24sIGluY2x1ZGlu ZzoKKyAqICAgICAgICAgICAtIENRIGV2ZW50IHJpbmcgKGFycmF5IG9mIHN0cnVjdCB2cmRtYV9j cWUpCisgKiAgICAgICAgICAgLSBWaXJ0cXVldWUgc3RydWN0dXJlIChkZXNjcmlwdG9yIHRhYmxl LCBhdmFpbGFibGUsIHVzZWQgcmluZ3MpCisgKiAgICAgICAgICAgTXVzdCBiZSBwYWdlLWFsaWdu ZWQuCisgKiBAY3FfcGh5c19hZGRyOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBDUSByaW5nIGJ1 ZmZlciAob3B0aW9uYWwpLgorICogICAgICAgICAgICAgICAgTWF5IGJlIHVzZWQgYnkgdXNlcnNw YWNlIGZvciBkZWJ1Z2dpbmcgb3IgbWVtb3J5IGluc3BlY3Rpb24gdG9vbHMuCisgKiBAdXNlZF9v ZmY6IE9mZnNldCBvZiB0aGUgInVzZWQiIHJpbmcgd2l0aGluIHRoZSB2aXJ0cXVldWUncyBtZW1v cnkgbGF5b3V0LgorICogICAgICAgICAgICBDYWxjdWxhdGVkIGFzOiB1c2VkX3JpbmdfYWRkciAt IGRlc2NfdGFibGVfYWRkci4KKyAqICAgICAgICAgICAgQWxsb3dzIHVzZXJzcGFjZSB0byBkaXJl Y3RseSBtYXAgYW5kIHJlYWQgY29tcGxldGlvbnMgd2l0aG91dCBzeXNjYWxscy4KKyAqIEB2cV9z aXplOiBTaXplIG9mIHRoZSBlbnRpcmUgdmlydHF1ZXVlIChpbmNsdWRpbmcgcGFkZGluZyksIHBh Z2UtYWxpZ25lZC4KKyAqICAgICAgICAgICBVc2VkIGJ5IHVzZXJzcGFjZSB0byBkZXRlcm1pbmUg aG93IG11Y2ggZXh0cmEgbWVtb3J5IHRvIG1hcCBiZXlvbmQgQ1EgcmluZy4KKyAqIEBudW1fY3Fl OiBOdW1iZXIgb2YgQ1EgZW50cmllcyAoY29tcGxldGlvbiBxdWV1ZSBkZXB0aCkgYWxsb2NhdGVk LgorICogICAgICAgICAgIFVzZWZ1bCBmb3IgYm91bmRzIGNoZWNraW5nIGluIHVzZXJzcGFjZS4K KyAqIEBudW1fY3ZxZTogTnVtYmVyIG9mIGNvbXBsZXRpb24gdmlydHF1ZXVlIGVsZW1lbnRzIChp LmUuLCBzaXplIG9mIHZyaW5nKS4KKyAqICAgICAgICAgICAgQ29ycmVzcG9uZHMgdG8gdmlydHF1 ZXVlX2dldF92cmluZ19zaXplKHZjcS0+dnEtPnZxKS4KKyAqICAgICAgICAgICAgSW5kaWNhdGVz IGhvdyBtYW55IGNvbXBsZXRpb24gZXZlbnRzIGNhbiBiZSBxdWV1ZWQuCisgKgorICogVGhpcyBz dHJ1Y3R1cmUgaXMgcGFzc2VkIGZyb20ga2VybmVsIHRvIHVzZXJzcGFjZSB2aWEgaWJfY29weV90 b191ZGF0YSgpCisgKiBkdXJpbmcgQ1EgY3JlYXRpb24gd2hlbiBhIHVzZXIgY29udGV4dCBpcyBw cm92aWRlZC4gSXQgZW5hYmxlcyB6ZXJvLWNvcHksCisgKiBwb2xsaW5nLWJhc2VkIGNvbXBsZXRp b24gaGFuZGxpbmcgYnkgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGRpcmVjdGx5IGFjY2VzczoKKyAq ICAgLSBUaGUgQ1EgZXZlbnQgcmluZyAoZm9yIHJlYWRpbmcgd29yayBjb21wbGV0aW9ucykKKyAq ICAgLSBUaGUgdmlydHF1ZXVlIHVzZWQgcmluZyAodG8gZGV0ZWN0IHdoZW4gZGV2aWNlIGhhcyBw b3N0ZWQgbmV3IGNvbXBsZXRpb25zKQorICoKKyAqIE1lbW9yeSBMYXlvdXQgQWZ0ZXIgbW1hcCgp OgorICoKKyAqICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICB8IENRIEV2ZW50IFJp bmcgICAgICAgfCAgPC0gTWFwcGVkIGF0IGJhc2UgYWRkcgorICogICAgfCAobnVtX2NxZSBlbnRy aWVzKSAgIHwKKyAqICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICB8IFZpcnRxdWV1 ZTogICAgICAgICAgfAorICogICAgfCAgIC0gRGVzYyBUYWJsZSAgICAgIHwKKyAqICAgIHwgICAt IEF2YWlsYWJsZSBSaW5nICB8CisgKiAgICB8ICAgLSBVc2VkIFJpbmcgICAgICAgfCAgPC0gQWNj ZXNzZWQgdmlhIChiYXNlICsgdXNlZF9vZmYpCisgKiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t KworICoKKyAqIEV4YW1wbGUgdXNhZ2UgaW4gdXNlcnNwYWNlOgorICoKKyAqICAgdm9pZCAqYWRk ciA9IG1tYXAoTlVMTCwgdXJlc3AuY3Ffc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELAorICog ICAgICAgICAgICAgICAgICAgICBjdHgtPmNtZF9mZCwgdXJlc3Aub2Zmc2V0KTsKKyAqICAgc3Ry dWN0IHZyZG1hX2NxZSAqY3FlX3JpbmcgPSBhZGRyOworICogICBzdHJ1Y3QgdnJpbmdfdXNlZCAq dXNlZF9yaW5nID0gYWRkciArIHVyZXNwLnVzZWRfb2ZmOworICovCitzdHJ1Y3QgdnJkbWFfY3Jl YXRlX2NxX3VyZXNwIHsKKwlfX3U2NCBvZmZzZXQ7ICAgICAgICAgLyogbW1hcCBvZmZzZXQgZm9y IHVzZXJzcGFjZSAqLworCV9fdTY0IGNxX3NpemU7ICAgICAgICAvKiB0b3RhbCBzaXplIHRvIG1h cCAoQ1EgKyB2cmluZykgKi8KKwlfX3U2NCBjcV9waHlzX2FkZHI7ICAgLyogcGh5c2ljYWwgYWRk cmVzcyBvZiBDUSByaW5nIChoaW50KSAqLworCV9fdTY0IHVzZWRfb2ZmOyAgICAgICAvKiBvZmZz ZXQgdG8gdXNlZCByaW5nIGluc2lkZSB2cmluZyAqLworCV9fdTMyIHZxX3NpemU7ICAgICAgICAv KiBzaXplIG9mIHRoZSB2aXJ0cXVldWUgKGFsaWduZWQpICovCisJaW50IG51bV9jcWU7ICAgICAg ICAgIC8qIG51bWJlciBvZiBDUSBlbnRyaWVzICovCisJaW50IG51bV9jdnFlOyAgICAgICAgIC8q IG51bWJlciBvZiBjb21wbGV0aW9uIFZRIGRlc2NyaXB0b3JzICovCit9OworCitzdHJ1Y3QgdnJk bWFfYWxsb2NfcGRfdXJlc3AgeworICAgIF9fdTMyIHBkbjsKK307CisKKy8qKgorICogc3RydWN0 IHZyZG1hX2NyZWF0ZV9xcF91cmVzcCAtIFVzZXIgcmVzcG9uc2UgZm9yIFFQIGNyZWF0aW9uIGlu IHZpcnRpby1yZG1hCisgKiBAc3FfbW1hcF9vZmZzZXQ6ICAgICBPZmZzZXQgdG8gbW1hcCB0aGUg U2VuZCBRdWV1ZSAoU1EpIHJpbmcgYnVmZmVyCisgKiBAc3FfbW1hcF9zaXplOiAgICAgICBTaXpl IG9mIHRoZSBTUSByaW5nIGJ1ZmZlciBhdmFpbGFibGUgZm9yIG1tYXAKKyAqIEBzcV9kYl9hZGRy OiAgICAgICAgIFBoeXNpY2FsIGFkZHJlc3MgKG9yIHRva2VuKSBmb3IgU1EgZG9vcmJlbGwgcmVn aXN0ZXIgYWNjZXNzCisgKiBAc3ZxX3VzZWRfaWR4X29mZjogICBPZmZzZXQgd2l0aGluIFNRIG1t YXAgd2hlcmUgdXNlZCBpbmRleCBpcyBzdG9yZWQgKHBvbGxpbmcgc3VwcG9ydCkKKyAqIEBzdnFf cmluZ19zaXplOiAgICAgIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBiYWNrZW5kJ3Mgc2VuZCB2 aXJ0cXVldWUKKyAqIEBudW1fc3Ffd3FlczogICAgICAgIE1heGltdW0gbnVtYmVyIG9mIFNRIFdR RXMgdGhpcyBRUCBjYW4gcG9zdAorICogQHNxX2hlYWRfaWR4OiAgICAgICAgQ3VycmVudCBoZWFk IGluZGV4IGluIGtlcm5lbCdzIFNRIHJpbmcgKG9wdGlvbmFsIGRlYnVnIGluZm8pCisKKyAqIEBy cV9tbWFwX29mZnNldDogICAgIE9mZnNldCB0byBtbWFwIHRoZSBSZWNlaXZlIFF1ZXVlIChSUSkg cmluZyBidWZmZXIKKyAqIEBycV9tbWFwX3NpemU6ICAgICAgIFNpemUgb2YgdGhlIFJRIHJpbmcg YnVmZmVyIGF2YWlsYWJsZSBmb3IgbW1hcAorICogQHJxX2RiX2FkZHI6ICAgICAgICAgUGh5c2lj YWwgYWRkcmVzcyAob3IgdG9rZW4pIGZvciBSUSBkb29yYmVsbCByZWdpc3RlciBhY2Nlc3MKKyAq IEBydnFfdXNlZF9pZHhfb2ZmOiAgIE9mZnNldCB3aXRoaW4gUlEgbW1hcCB3aGVyZSB1c2VkIGlu ZGV4IGlzIHN0b3JlZAorICogQHJ2cV9yaW5nX3NpemU6ICAgICAgTnVtYmVyIG9mIGVudHJpZXMg aW4gdGhlIGJhY2tlbmQncyByZWNlaXZlIHZpcnRxdWV1ZQorICogQG51bV9ycV93cWVzOiAgICAg ICAgTWF4aW11bSBudW1iZXIgb2YgUlEgV1FFcyB0aGlzIFFQIGNhbiBwb3N0CisgKiBAcnFfaGVh ZF9pZHg6ICAgICAgICBDdXJyZW50IGhlYWQgaW5kZXggaW4ga2VybmVsJ3MgUlEgcmluZworCisg KiBAbm90aWZpZXJfc2l6ZTogICAgICBTaXplIG9mIG5vdGlmaWNhdGlvbiBhcmVhIChlLmcuLCBD USBub3RpZmllciwgZXZlbnQgY291bnRlcikKKyAqIEBxcF9oYW5kbGU6ICAgICAgICAgIFVuaXF1 ZSBpZGVudGlmaWVyIGZvciB0aGlzIFFQIChxcG4pCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMg cGFzc2VkIGJhY2sgdG8gdXNlcnNwYWNlIHZpYSBgaWJfY29weV90b191ZGF0YSgpYAorICogZHVy aW5nIFFQIGNyZWF0aW9uLiBJdCBhbGxvd3MgdXNlcnNwYWNlIHRvOgorICogICAtIE1hcCBTUS9S USByaW5ncyBpbnRvIGl0cyBhZGRyZXNzIHNwYWNlCisgKiAgIC0gQWNjZXNzIGRvb3JiZWxscyBk aXJlY3RseSAoaWYgc3VwcG9ydGVkKQorICogICAtIFBvbGwgZm9yIGNvbXBsZXRpb24gc3RhdHVz IHZpYSB1c2VkIGluZGV4CisgKi8KK3N0cnVjdCB2cmRtYV9jcmVhdGVfcXBfdXJlc3AgeworCV9f dTY0IHNxX21tYXBfb2Zmc2V0OworCV9fdTY0IHNxX21tYXBfc2l6ZTsKKwlfX3U2NCBzcV9kYl9h ZGRyOworCV9fdTY0IHN2cV91c2VkX2lkeF9vZmY7CisJX191MzIgc3ZxX3Jpbmdfc2l6ZTsKKwlf X3UzMiBudW1fc3Ffd3FlczsKKyAgICBfX3UzMiBudW1fc3ZxZTsKKwlfX3UzMiBzcV9oZWFkX2lk eDsKKworCV9fdTY0IHJxX21tYXBfb2Zmc2V0OworCV9fdTY0IHJxX21tYXBfc2l6ZTsKKwlfX3U2 NCBycV9kYl9hZGRyOworCV9fdTY0IHJ2cV91c2VkX2lkeF9vZmY7CisJX191MzIgcnZxX3Jpbmdf c2l6ZTsKKwlfX3UzMiBudW1fcnFfd3FlczsKKyAgICBfX3UzMiBudW1fcnZxZTsKKwlfX3UzMiBy cV9oZWFkX2lkeDsKKworCV9fdTMyIG5vdGlmaWVyX3NpemU7CisKKwlfX3UzMiBxcF9oYW5kbGU7 Cit9OworCisvKioKKyAqIHN0cnVjdCB2cmRtYV9hdiAtIEFkZHJlc3MgVmVjdG9yIGZvciBWaXJ0 aW8tUkRNQSBRUCByb3V0aW5nCisgKgorICogQW4gQWRkcmVzcyBWZWN0b3IgKEFWKSBjb250YWlu cyBMMi9MMyBuZXR3b3JrIHBhdGggaW5mb3JtYXRpb24gdXNlZCB0bworICogcm91dGUgcGFja2V0 cyBmcm9tIGEgVUQgb3IgUkMgUVAgdG8gYSByZW1vdGUgZGVzdGluYXRpb24uIEl0IGlzIGFuYWxv Z291cworICogdG8gSW5maW5pQmFuZCdzIEFWIHN0cnVjdHVyZSBpbiB1c2VyIHZlcmJzLgorICoK KyAqIEFsbCBmaWVsZHMgdXNlIGZpeGVkLXdpZHRoIHR5cGVzIGZvciBBQkkgc3RhYmlsaXR5IGFj cm9zcyBhcmNoaXRlY3R1cmVzLgorICovCitzdHJ1Y3QgdnJkbWFfYXYgeworCV9fdTMyIHBvcnQ6 ODsJCQkvKiBQaHlzaWNhbCBwb3J0IGluZGV4ICgxLWJhc2VkKSAqLworCV9fdTMyIHBkbjo4OwkJ CS8qIFBvcnQgRE4gKERlbGl2ZXJ5IE5vdGlmaWNhdGlvbikgaGFuZGxlIG9yIFZQT1JUIElEICov CisJX191MzIgc2xfdGNsYXNzX2Zsb3dsYWJlbDoxNjsJLyogQ29tYmluZWQgU0wgKDQpLCBUQ2xh c3MgKDgpLCBGbG93IExhYmVsICgyMCkgKi8KKworCV9fdTggZGdpZFsxNl07CQkJLyogRGVzdGlu YXRpb24gR2xvYmFsIElkZW50aWZpZXIgKEdJRCksIGJpZy1lbmRpYW4gKi8KKworCV9fdTggZ2lk X2luZGV4OwkJCS8qIE91dGJvdW5kIEdJRCB0YWJsZSBpbmRleCAoZm9yIHNvdXJjZSBHSUQgc2Vs ZWN0aW9uKSAqLworCV9fdTggc3RhdF9yYXRlOwkJCS8qIFN0YXRpYyByYXRlIGNvbnRyb2wgKGVu dW0gaWJ2X3JhdGUpICovCisJX191OCBob3BfbGltaXQ7CQkJLyogSVB2Ni1zdHlsZSBob3AgbGlt aXQgLyBUVEwgKi8KKwlfX3U4IGRtYWNbNl07CQkJLyogRGVzdGluYXRpb24gTUFDIGFkZHJlc3Mg KGZvciBMMiBmb3J3YXJkaW5nKSAqLworCisJX191OCByZXNlcnZlZFs2XTsJCS8qIFJlc2VydmVk IGZvciBmdXR1cmUgdXNlIC8gYWxpZ25tZW50IHBhZGRpbmcgKi8KK307CisKKy8qKgorICogc3Ry dWN0IHZyZG1hX2NtZF9wb3N0X3NlbmQgLSBVc2VyLXNwYWNlIGNvbW1hbmQgdG8gcG9zdCBhIFNl bmQgV1FFCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGZyb20gdXNlcnNwYWNlIHZp YSBpb2N0bCAoZS5nLiwgV1JJVEUgb24gdXZlcmJzIGNoYXIgZGV2KQorICogdG8gcmVxdWVzdCBw b3N0aW5nIG9uZSBvciBtb3JlIHdvcmsgcXVldWUgZW50cmllcyAoV1FFcykgb24gdGhlIFNlbmQg UXVldWUgKFNRKS4KKyAqIEl0IG1pcnJvcnMgdGhlIHNlbWFudGljcyBvZiBgaWJ2X3Bvc3Rfc2Vu ZCgpYCBpbiBsaWJpYnZlcmJzLgorICoKKyAqIEFsbCBmaWVsZHMgdXNlIGZpeGVkLXNpemUgdHlw ZXMgZm9yIEFCSSBzdGFiaWxpdHkgYWNyb3NzIGFyY2hpdGVjdHVyZXMuCisgKi8KK3N0cnVjdCB2 cmRtYV9jbWRfcG9zdF9zZW5kIHsKKwlfX3UzMiBudW1fc2dlOwkJLyogTnVtYmVyIG9mIHNjYXR0 ZXItZ2F0aGVyIGVsZW1lbnRzIGluIHRoaXMgV1FFICovCisKKwlfX3UzMiBzZW5kX2ZsYWdzOwkv KiBJQlZfU0VORF94eHggZmxhZ3MgKGUuZy4sIHNpZ25hbGVkLCBpbmxpbmUsIGZlbmNlKSAqLwor CV9fdTMyIG9wY29kZTsJCS8qIE9wZXJhdGlvbiBjb2RlOiBSRE1BX1dSSVRFLCBTRU5ELCBBVE9N SUMsIGV0Yy4gKi8KKwlfX3U2NCB3cl9pZDsJCS8qIFdvcmsgUmVxdWVzdCBJRCByZXR1cm5lZCBp biBDUUUgKi8KKworCXVuaW9uIHsKKwkJX19iZTMyCWltbV9kYXRhOwkJLyogSW1tZWRpYXRlIGRh dGEgZm9yIFJDL1VDIFFQcyAqLworCQlfX3UzMglpbnZhbGlkYXRlX3JrZXk7CS8qIHJrZXkgdG8g aW52YWxpZGF0ZSAob24gU0VORF9XSVRIX0lOVikgKi8KKwl9IGV4OworCisJdW5pb24gd3JfZGF0 YSB7CisJCXN0cnVjdCB7CisJCQlfX3U2NCByZW1vdGVfYWRkcjsJLyogVGFyZ2V0IHZpcnR1YWwg YWRkcmVzcyBmb3IgUkRNQSBvcCAqLworCQkJX191MzIgcmtleTsJCS8qIFJlbW90ZSBrZXkgZm9y IG1lbW9yeSBhY2Nlc3MgKi8KKwkJfSByZG1hOworCisJCXN0cnVjdCB7CisJCQlfX3U2NCByZW1v dGVfYWRkcjsJLyogQWRkcmVzcyBvZiBhdG9taWMgdmFyaWFibGUgKi8KKwkJCV9fdTY0IGNvbXBh cmVfYWRkOwkvKiBWYWx1ZSB0byBjb21wYXJlICovCisJCQlfX3U2NCBzd2FwOwkJLyogVmFsdWUg dG8gc3dhcCAob3IgYWRkKSAqLworCQkJX191MzIgcmtleTsJCS8qIFJlbW90ZSBtZW1vcnkga2V5 ICovCisJCX0gYXRvbWljOworCisJCXN0cnVjdCB7CisJCQlfX3UzMiByZW1vdGVfcXBuOwkvKiBE ZXN0aW5hdGlvbiBRUCBudW1iZXIgKi8KKwkJCV9fdTMyIHJlbW90ZV9xa2V5OwkvKiBRX0tleSBm b3IgVUQgcGFja2V0IHZhbGlkYXRpb24gKi8KKwkJCXN0cnVjdCB2cmRtYV9hdiBhdjsJLyogQWRk cmVzcyB2ZWN0b3IgKEwyL0wzIGluZm8pICovCisJCX0gdWQ7CisKKwkJc3RydWN0IHsKKwkJCV9f dTMyIG1ybjsJCS8qIE1lbW9yeSBSZWdpb24gTnVtYmVyIChNUiBoYW5kbGUpICovCisJCQlfX3Uz MiBrZXk7CQkvKiBTdGFnaW5nIHJrZXkgZm9yIE1SIHJlZ2lzdHJhdGlvbiAqLworCQkJX191MzIg YWNjZXNzOwkJLyogQWNjZXNzIGZsYWdzIChJQl9BQ0NFU1NfeHh4KSAqLworCQl9IHJlZzsKKwl9 IHdyOworfTsKKworc3RydWN0IHZyZG1hX3NnZSB7CisgICAgX191NjQgYWRkcjsKKyAgICBfX3Uz MiBsZW5ndGg7CisgICAgX191MzIgbGtleTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlu dXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfZGV2X2FwaS5oIGIv bGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfZGV2X2FwaS5o CmluZGV4IDNiMWY3ZDJiNi4uZDFkYjFiZWE0IDEwMDY0NAotLS0gYS9saW51eC02LjE2LjgvZHJp dmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9kZXZfYXBpLmgKKysrIGIvbGludXgtNi4x Ni44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfZGV2X2FwaS5oCkBAIC0xMTQs NiArMTE0LDUyIEBAIGVudW0gdnJkbWFfdmVyYnNfY21kIHsKIAlWSVJUSU9fUkRNQV9DTURfUkVR X05PVElGWV9DUSwKIH07CiAKK3N0cnVjdCB2cmRtYV9jbWRfcXVlcnlfcG9ydCB7CisJdTMyIHBv cnQ7Cit9OworCitzdHJ1Y3QgdnJkbWFfY21kX2NyZWF0ZV9jcSB7CisJdTMyIGNxZTsKK307CisK K3N0cnVjdCB2cmRtYV9yc3BfY3JlYXRlX2NxIHsKKwl1MzIgY3FuOworfTsKKworc3RydWN0IHZy ZG1hX2NtZF9kZXN0cm95X2NxIHsKKwl1MzIgY3FuOworfTsKKworc3RydWN0IHZyZG1hX3JzcF9j cmVhdGVfcGQgeworCV9fdTMyIHBkbjsKK307CisKK3N0cnVjdCB2cmRtYV9jbWRfZGVzdHJveV9w ZCB7CisJX191MzIgcGRuOworfTsKKworc3RydWN0IHZyZG1hX2NtZF9jcmVhdGVfcXAgeworICAg IF9fdTMyIHBkbjsKKyAgICBfX3U4IHFwX3R5cGU7CisJX191OCBzcV9zaWdfdHlwZTsKKyAgICBf X3UzMiBtYXhfc2VuZF93cjsKKyAgICBfX3UzMiBtYXhfc2VuZF9zZ2U7CisgICAgX191MzIgc2Vu ZF9jcW47CisgICAgX191MzIgbWF4X3JlY3Zfd3I7CisgICAgX191MzIgbWF4X3JlY3Zfc2dlOwor ICAgIF9fdTMyIHJlY3ZfY3FuOworCisJX191MzIgbWF4X2lubGluZV9kYXRhOworfTsKKworc3Ry dWN0IHZyZG1hX3JzcF9jcmVhdGVfcXAgeworCV9fdTMyIHFwbjsKK307CisKK3N0cnVjdCB2cmRt YV9jbWRfZGVzdHJveV9xcCB7CisgICAgX191MzIgcXBuOworfTsKKwogI2RlZmluZSBWUkRNQV9D VFJMX09LCTAKICNkZWZpbmUgVlJETUFfQ1RSTF9FUlIJMQogCmRpZmYgLS1naXQgYS9saW51eC02 LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9pYi5jIGIvbGludXgtNi4x Ni44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfaWIuYwppbmRleCA4MjVlYzU4 YmQuLmYxZjUzMzE0ZiAxMDA2NDQKLS0tIGEvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFu ZC9ody92aXJ0aW8vdnJkbWFfaWIuYworKysgYi9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmli YW5kL2h3L3ZpcnRpby92cmRtYV9pYi5jCkBAIC0xNyw2ICsxNyw5IEBACiAjaW5jbHVkZSAidnJk bWFfZGV2LmgiCiAjaW5jbHVkZSAidnJkbWFfZGV2X2FwaS5oIgogI2luY2x1ZGUgInZyZG1hX2li LmgiCisjaW5jbHVkZSAidnJkbWFfYWJpLmgiCisjaW5jbHVkZSAidnJkbWFfbW1hcC5oIgorI2lu Y2x1ZGUgInZyZG1hX3F1ZXVlLmgiCiAKIC8qKgogICogY21kX3N0ciAtIFN0cmluZyByZXByZXNl bnRhdGlvbiBvZiB2aXJ0aW8gUkRNQSBjb250cm9sIGNvbW1hbmRzCkBAIC02MSwxMTAgKzY0LDEw NDMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjbWRfc3RyW10gPSB7CiAgKiBSZXR1cm46 IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGlu dCB2cmRtYV9leGVjX3ZlcmJzX2NtZChzdHJ1Y3QgdnJkbWFfZGV2ICp2cmRldiwgaW50IHZlcmJz X2NtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0 ICp2ZXJic19pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0 ZXJsaXN0ICp2ZXJic19vdXQpCisJCQkJCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqdmVyYnNfaW4s CisJCQkJCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqdmVyYnNfb3V0KQogewotICAgIHN0cnVjdCB2 cmRtYV9pbmZvICp2cmRtYV9pbmZvID0gbmV0ZGV2X3ByaXYodnJkZXYtPm5ldGRldik7Ci0gICAg c3RydWN0IHZpcnRxdWV1ZSAqdnEgPSB2cmRldi0+Y3RybF92cTsKLSAgICBzdHJ1Y3QgdmVyYnNf Y3RybF9idWYgKmN0cmxfYnVmOwotICAgIHN0cnVjdCBzY2F0dGVybGlzdCBoZHJfc2csIHN0YXR1 c19zZzsKLSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnc1s0XTsKLSAgICB1bnNpZ25lZCBpbnQg b3V0X251bSA9IDEsIGluX251bSA9IDE7Ci0gICAgdW5zaWduZWQgaW50IGxlbjsKLSAgICBpbnQg cmV0LCB0aW1lb3V0X2xvb3BzID0gVlJETUFfQ09NTV9USU1FT1VUOwotICAgIHVuc2lnbmVkIGxv bmcgZmxhZ3M7Ci0KLSAgICBpZiAodW5saWtlbHkoIXZxKSkgewotICAgICAgICBuZXRkZXZfZXJy KHZyZG1hX2luZm8tPmRldiwgIk1pc3NpbmcgY29udHJvbCB2aXJ0cXVldWVcbiIpOwotICAgICAg ICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBjdHJsX2J1ZiA9IGttYWxsb2Moc2l6ZW9m KCpjdHJsX2J1ZiksIEdGUF9BVE9NSUMpOwotICAgIGlmICghY3RybF9idWYpIHsKLSAgICAgICAg Z290byB1bmxvY2s7Ci0gICAgfQotICAgIGN0cmxfYnVmLT5jbWQgPSB2ZXJic19jbWQ7Ci0gICAg Y3RybF9idWYtPnN0YXR1cyA9IH4wVTsKLQotICAgIC8qIFByZXBhcmUgc2NhdHRlcmxpc3RzIGZv ciBzZW5kaW5nIGNvbW1hbmQgYW5kIHJlY2VpdmluZyBzdGF0dXMgKi8KLSAgICBzZ19pbml0X29u ZSgmaGRyX3NnLCAmY3RybF9idWYtPmNtZCwgc2l6ZW9mKGN0cmxfYnVmLT5jbWQpKTsKLSAgICBz Z3NbMF0gPSAmaGRyX3NnOwotCi0gICAgaWYgKHZlcmJzX2luKSB7Ci0gICAgICAgIHNnc1sxXSA9 IHZlcmJzX2luOworCXN0cnVjdCB2cmRtYV9pbmZvICp2cmRtYV9pbmZvID0gbmV0ZGV2X3ByaXYo dnJkZXYtPm5ldGRldik7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnEgPSB2cmRldi0+Y3RybF92cTsK KwlzdHJ1Y3QgdmVyYnNfY3RybF9idWYgKmN0cmxfYnVmOworCXN0cnVjdCBzY2F0dGVybGlzdCBo ZHJfc2csIHN0YXR1c19zZzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnc1s0XTsKKwl1bnNpZ25l ZCBpbnQgb3V0X251bSA9IDEsIGluX251bSA9IDE7CisJdW5zaWduZWQgaW50IGxlbjsKKwlpbnQg cmV0LCB0aW1lb3V0X2xvb3BzID0gVlJETUFfQ09NTV9USU1FT1VUOworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisKKwlpZiAodW5saWtlbHkoIXZxKSkgeworCQluZXRkZXZfZXJyKHZyZG1hX2luZm8t PmRldiwgIk1pc3NpbmcgY29udHJvbCB2aXJ0cXVldWVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwljdHJsX2J1ZiA9IGttYWxsb2Moc2l6ZW9mKCpjdHJsX2J1ZiksIEdGUF9BVE9NSUMp OworCWlmKCFjdHJsX2J1Zil7CisJCWdvdG8gdW5sb2NrOworCX0KKwljdHJsX2J1Zi0+Y21kID0g dmVyYnNfY21kOworCWN0cmxfYnVmLT5zdGF0dXMgPSAweDAxOyAKKworCS8qIFByZXBhcmUgc2Nh dHRlcmxpc3RzIGZvciBzZW5kaW5nIGNvbW1hbmQgYW5kIHJlY2VpdmluZyBzdGF0dXMgKi8KKwlz Z19pbml0X29uZSgmaGRyX3NnLCAmY3RybF9idWYtPmNtZCwgc2l6ZW9mKGN0cmxfYnVmLT5jbWQp KTsKKwlzZ3NbMF0gPSAmaGRyX3NnOworCisJaWYgKHZlcmJzX2luKSB7CisJCXNnc1sxXSA9IHZl cmJzX2luOwogCQlpbl9udW0rKzsKLSAgICB9CisJfQogCi0gICAgc2dfaW5pdF9vbmUoJnN0YXR1 c19zZywgJmN0cmxfYnVmLT5zdGF0dXMsIHNpemVvZihjdHJsX2J1Zi0+c3RhdHVzKSk7Ci0gICAg c2dzW2luX251bV0gPSAmc3RhdHVzX3NnOworCXNnX2luaXRfb25lKCZzdGF0dXNfc2csICZjdHJs X2J1Zi0+c3RhdHVzLCBzaXplb2YoY3RybF9idWYtPnN0YXR1cykpOworCXNnc1tpbl9udW1dID0g JnN0YXR1c19zZzsKIAotICAgIGlmICh2ZXJic19vdXQpIHsKLSAgICAgICAgc2dzW2luX251bSAr IDFdID0gdmVyYnNfb3V0OworCWlmICh2ZXJic19vdXQpIHsKKwkJc2dzW2luX251bSArIDFdID0g dmVyYnNfb3V0OwogCQlvdXRfbnVtKys7Ci0gICAgfQotCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUo JnZyZGV2LT5jdHJsX2xvY2ssIGZsYWdzKTsKLQotICAgIHJldCA9IHZpcnRxdWV1ZV9hZGRfc2dz KHZxLCBzZ3MsIGluX251bSwgb3V0X251bSwgdnJkZXYsIEdGUF9BVE9NSUMpOwotICAgIGlmIChy ZXQpIHsKLSAgICAgICAgbmV0ZGV2X2Vycih2cmRtYV9pbmZvLT5kZXYsICJGYWlsZWQgdG8gYWRk IGNtZCAlZCB0byBDVlE6ICVkXG4iLAotICAgICAgICAgICAgICAgICAgIHZlcmJzX2NtZCwgcmV0 KTsKLSAgICAgICAgZ290byB1bmxvY2s7Ci0gICAgfQotCi0gICAgaWYgKHVubGlrZWx5KCF2aXJ0 cXVldWVfa2ljayh2cSkpKSB7Ci0gICAgICAgIG5ldGRldl9lcnIodnJkbWFfaW5mby0+ZGV2LCAi RmFpbGVkIHRvIGtpY2sgQ1ZRIGZvciBjbWQgJWRcbiIsIHZlcmJzX2NtZCk7Ci0gICAgICAgIHJl dCA9IC1FSU87Ci0gICAgICAgIGdvdG8gdW5sb2NrOwotICAgIH0KLQotICAgIC8qIFdhaXQgZm9y IHJlc3BvbnNlOiBsb29wIHdpdGggdGltZW91dCB0byBhdm9pZCBpbmZpbml0ZSBibG9ja2luZyAq LwotICAgIHJldCA9IC1FVElNRURPVVQ7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKHZp cnRxdWV1ZV9nZXRfYnVmKHZxLCAmbGVuKSkgewotICAgICAgICAgICAgcmV0ID0gMDsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1bmxpa2VseSh2aXJ0cXVldWVf aXNfYnJva2VuKHZxKSkpIHsKLSAgICAgICAgICAgIG5ldGRldl9lcnIodnJkbWFfaW5mby0+ZGV2 LCAiQ1ZRIGlzIGJyb2tlblxuIik7Ci0gICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY3B1X3JlbGF4KCk7Ci0gICAgICAgIC8qCi0g ICAgICAgICAqIFByZXZlbnQgaW5maW5pdGUgd2FpdC4gSW4gbm9uLWF0b21pYyBjb250ZXh0LCBj b25zaWRlciB1c2luZyBzY2hlZHVsZV90aW1lb3V0KCkKLSAgICAgICAgICogZm9yIGJldHRlciBD UFUgdXRpbGl6YXRpb24uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIS0tdGltZW91dF9sb29w cykgewotICAgICAgICAgICAgbmV0ZGV2X2Vycih2cmRtYV9pbmZvLT5kZXYsICJUaW1lb3V0IHdh aXRpbmcgZm9yIGNtZCAlZCByZXNwb25zZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdmVy YnNfY21kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorCX0KKworCXNw aW5fbG9ja19pcnFzYXZlKCZ2cmRldi0+Y3RybF9sb2NrLCBmbGFncyk7CisKKwlyZXQgPSB2aXJ0 cXVldWVfYWRkX3Nncyh2cSwgc2dzLCBpbl9udW0sIG91dF9udW0sIHZyZGV2LCBHRlBfQVRPTUlD KTsKKwlpZiAocmV0KSB7CisJCW5ldGRldl9lcnIodnJkbWFfaW5mby0+ZGV2LCAiRmFpbGVkIHRv IGFkZCBjbWQgJWQgdG8gQ1ZROiAlZFxuIiwKKwkJCQkJdmVyYnNfY21kLCByZXQpOworCQlnb3Rv IHVubG9jazsKKwl9CisKKwlpZiAodW5saWtlbHkoIXZpcnRxdWV1ZV9raWNrKHZxKSkpIHsKKwkJ bmV0ZGV2X2Vycih2cmRtYV9pbmZvLT5kZXYsICJGYWlsZWQgdG8ga2ljayBDVlEgZm9yIGNtZCAl ZFxuIiwgdmVyYnNfY21kKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byB1bmxvY2s7CisJfQorCisJ LyogV2FpdCBmb3IgcmVzcG9uc2U6IGxvb3Agd2l0aCB0aW1lb3V0IHRvIGF2b2lkIGluZmluaXRl IGJsb2NraW5nICovCisJcmV0ID0gLUVUSU1FRE9VVDsKKwl3aGlsZSAoMSkgeworCQlpZiAodmly dHF1ZXVlX2dldF9idWYodnEsICZsZW4pKSB7CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0K KwkJaWYgKHVubGlrZWx5KHZpcnRxdWV1ZV9pc19icm9rZW4odnEpKSkgeworCQkJbmV0ZGV2X2Vy cih2cmRtYV9pbmZvLT5kZXYsICJDVlEgaXMgYnJva2VuXG4iKTsKKwkJCXJldCA9IC1FSU87CisJ CQlicmVhazsKKwkJfQorCQljcHVfcmVsYXgoKTsKKwkJLyoKKwkJICogUHJldmVudCBpbmZpbml0 ZSB3YWl0LiBJbiBub24tYXRvbWljIGNvbnRleHQsIGNvbnNpZGVyIHVzaW5nIHNjaGVkdWxlX3Rp bWVvdXQoKQorCQkgKiBmb3IgYmV0dGVyIENQVSB1dGlsaXphdGlvbi4KKwkJICovCisJCWlmICgh LS10aW1lb3V0X2xvb3BzKSB7CisJCQluZXRkZXZfZXJyKHZyZG1hX2luZm8tPmRldiwgIlRpbWVv dXQgd2FpdGluZyBmb3IgY21kICVkIHJlc3BvbnNlXG4iLAorCQkJCQkJdmVyYnNfY21kKTsKKwkJ CWJyZWFrOworCQl9CisJfQogCiB1bmxvY2s6Ci0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm dnJkZXYtPmN0cmxfbG9jaywgZmxhZ3MpOwotCi0gICAgLyogTG9nIGZpbmFsIHJlc3VsdCAqLwot ICAgIGlmIChyZXQgPT0gMCAmJiBjdHJsX2J1Zi0+c3RhdHVzICE9IFZSRE1BX0NUUkxfT0spIHsK LSAgICAgICAgbmV0ZGV2X2Vycih2cmRtYV9pbmZvLT5kZXYsICJFWEVDIGNtZCAlcyBmYWlsZWQ6 IHN0YXR1cz0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICBjbWRfc3RyW3ZlcmJzX2NtZF0sIGN0 cmxfYnVmLT5zdGF0dXMpOwotICAgICAgICByZXQgPSAtRUlPOyAvKiBIb3N0IHJldHVybmVkIGFu IGVycm9yIHN0YXR1cyAqLwotICAgIH0gZWxzZSBpZiAocmV0ID09IDApIHsKLSAgICAgICAgbmV0 ZGV2X2RiZyh2cmRtYV9pbmZvLT5kZXYsICJFWEVDIGNtZCAlcyBPS1xuIiwgY21kX3N0clt2ZXJi c19jbWRdKTsKLSAgICB9IGVsc2UgewotICAgICAgICBuZXRkZXZfZXJyKHZyZG1hX2luZm8tPmRl diwgIkVYRUMgY21kICVzIGZhaWxlZDogcmV0PSVkXG4iLAotICAgICAgICAgICAgICAgICAgIGNt ZF9zdHJbdmVyYnNfY21kXSwgcmV0KTsKLSAgICB9Ci0KLSAgICBrZnJlZShjdHJsX2J1Zik7Ci0g ICAgcmV0dXJuIHJldDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cmRldi0+Y3RybF9sb2Nr LCBmbGFncyk7CisKKwkvKiBMb2cgZmluYWwgcmVzdWx0ICovCisJaWYgKHJldCA9PSAwICYmIGN0 cmxfYnVmLT5zdGF0dXMgIT0gVlJETUFfQ1RSTF9PSykgeworCQluZXRkZXZfZXJyKHZyZG1hX2lu Zm8tPmRldiwgIkVYRUMgY21kICVzIGZhaWxlZDogc3RhdHVzPSVkXG4iLAorCQkJCQljbWRfc3Ry W3ZlcmJzX2NtZF0sIGN0cmxfYnVmLT5zdGF0dXMpOworCQlyZXQgPSAtRUlPOyAvKiBIb3N0IHJl dHVybmVkIGFuIGVycm9yIHN0YXR1cyAqLworCX0gZWxzZSBpZiAocmV0ID09IDApIHsKKwkJbmV0 ZGV2X2RiZyh2cmRtYV9pbmZvLT5kZXYsICJFWEVDIGNtZCAlcyBPS1xuIiwgY21kX3N0clt2ZXJi c19jbWRdKTsKKwl9IGVsc2UgeworCQluZXRkZXZfZXJyKHZyZG1hX2luZm8tPmRldiwgIkVYRUMg Y21kICVzIGZhaWxlZDogcmV0PSVkXG4iLAorCQkJCQljbWRfc3RyW3ZlcmJzX2NtZF0sIHJldCk7 CisJfQorCisJa2ZyZWUoY3RybF9idWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg dnJkbWFfcG9ydF9pbW11dGFibGUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0X251 bSwKKwkJCQkJCXN0cnVjdCBpYl9wb3J0X2ltbXV0YWJsZSAqaW1tdXRhYmxlKQoreworCXN0cnVj dCBpYl9wb3J0X2F0dHIgYXR0cjsKKwlpbnQgcmV0OworCisJcmV0ID0gaWJfcXVlcnlfcG9ydChp YmRldiwgcG9ydF9udW0sICZhdHRyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaW1t dXRhYmxlLT5jb3JlX2NhcF9mbGFncyA9IFJETUFfQ09SRV9QT1JUX1ZJUlRJTzsKKwlpbW11dGFi bGUtPnBrZXlfdGJsX2xlbiA9IGF0dHIucGtleV90YmxfbGVuOworCWltbXV0YWJsZS0+Z2lkX3Ri bF9sZW4gPSBhdHRyLmdpZF90YmxfbGVuOworCWltbXV0YWJsZS0+bWF4X21hZF9zaXplID0gSUJf TUdNVF9NQURfU0laRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyZG1hX3F1ZXJ5 X2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKKwkJCQkJc3RydWN0IGliX2RldmljZV9h dHRyICppYl9kZXZfYXR0ciwKKwkJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlpZiAo dWRhdGEtPmlubGVuIHx8IHVkYXRhLT5vdXRsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJKmli X2Rldl9hdHRyID0gdG9fdmRldihpYmRldiktPmF0dHI7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyB2aXJ0aW9fcmRtYV9kZXZfb3BzID0geworc3Rh dGljIHN0cnVjdCBzY2F0dGVybGlzdCogdnJkbWFfaW5pdF9zZyh2b2lkKiBidWYsIHVuc2lnbmVk IGxvbmcgbmJ5dGVzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCogbmVlZF9zZzsKKwlpbnQgbnVt X3BhZ2UgPSAwOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXZvaWQqIHB0cjsKKworCWlmIChp c192bWFsbG9jX2FkZHIoYnVmKSkgeworCQlpbnQgaTsKKwkJdW5zaWduZWQgbG9uZyByZW1haW5p bmcgPSBuYnl0ZXM7CisKKwkJcHRyID0gYnVmOworCQlvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShw dHIpOworCQludW1fcGFnZSA9IDE7CisJCWlmIChvZmZzZXQgKyBuYnl0ZXMgPiBQQUdFX1NJWkUp IHsKKwkJCW51bV9wYWdlICs9IChvZmZzZXQgKyBuYnl0ZXMgLSBQQUdFX1NJWkUgKyBQQUdFX1NJ WkUgLSAxKSAvIFBBR0VfU0laRTsKKwkJfQorCisJCW5lZWRfc2cgPSBrbWFsbG9jX2FycmF5KG51 bV9wYWdlLCBzaXplb2YoKm5lZWRfc2cpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFuZWVkX3NnKQor CQkJcmV0dXJuIE5VTEw7CisKKwkJc2dfaW5pdF90YWJsZShuZWVkX3NnLCBudW1fcGFnZSk7CisK KwkJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdl OworCQkJdW5zaWduZWQgaW50IGxlbjsKKwkJCXVuc2lnbmVkIGludCBvZmZfaW5fcGFnZTsKKwor CQkJb2ZmX2luX3BhZ2UgPSBvZmZzZXRfaW5fcGFnZShwdHIpOworCQkJbGVuID0gbWluKCh1bnNp Z25lZCBsb25nKShQQUdFX1NJWkUgLSBvZmZfaW5fcGFnZSksIHJlbWFpbmluZyk7CisKKwkJCXBh Z2UgPSB2bWFsbG9jX3RvX3BhZ2UocHRyKTsKKwkJCWlmICghcGFnZSkgeworCQkJCWtmcmVlKG5l ZWRfc2cpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCisJCQlzZ19zZXRfcGFnZSgmbmVlZF9z Z1tpXSwgcGFnZSwgbGVuLCBvZmZfaW5fcGFnZSk7CisKKwkJCXB0ciArPSBsZW47CisJCQlyZW1h aW5pbmcgLT0gbGVuOworCQl9CisJfSBlbHNlIHsKKwkJbmVlZF9zZyA9IGttYWxsb2Moc2l6ZW9m KCpuZWVkX3NnKSwgR0ZQX0FUT01JQyk7CisJCWlmICghbmVlZF9zZykKKwkJCXJldHVybiBOVUxM OworCisJCXNnX2luaXRfb25lKG5lZWRfc2csIGJ1ZiwgbmJ5dGVzKTsKKwl9CisKKwlyZXR1cm4g bmVlZF9zZzsKK30KKworc3RhdGljIGludCB2cmRtYV9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZp Y2UgKmliZGV2LCB1MzIgcG9ydCwKKwkJCQlzdHJ1Y3QgaWJfcG9ydF9hdHRyICpwcm9wcykKK3sK KwlzdHJ1Y3QgdnJkbWFfZGV2ICp2ZGV2ID0gdG9fdmRldihpYmRldik7CisJc3RydWN0IHZyZG1h X2NtZF9xdWVyeV9wb3J0ICpjbWQ7CisJc3RydWN0IHZyZG1hX3BvcnRfYXR0ciBwb3J0X2F0dHI7 CisJc3RydWN0IHNjYXR0ZXJsaXN0IGluX3NnbCwgKm91dF9zZ2w7CisJaW50IHJldDsKKworCW1l bXNldCgmcG9ydF9hdHRyLCAwLCBzaXplb2YocG9ydF9hdHRyKSk7CisKKwljbWQgPSBrbWFsbG9j KHNpemVvZigqY21kKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVN OworCisJb3V0X3NnbCA9IHZyZG1hX2luaXRfc2coJnBvcnRfYXR0ciwgc2l6ZW9mKHBvcnRfYXR0 cikpOworCWlmICghb3V0X3NnbCkgeworCQlrZnJlZShjbWQpOworCQlyZXR1cm4gLUVOT01FTTsK Kwl9CisKKwljbWQtPnBvcnQgPSBwb3J0OworCXNnX2luaXRfb25lKCZpbl9zZ2wsIGNtZCwgc2l6 ZW9mKCpjbWQpKTsKKworCXJldCA9IHZyZG1hX2V4ZWNfdmVyYnNfY21kKHZkZXYsIFZJUlRJT19S RE1BX0NNRF9RVUVSWV9QT1JULCAmaW5fc2dsLCBvdXRfc2dsKTsKKwlpZiAoIXJldCkgeworCQlw cm9wcy0+c3RhdGUgPSBwb3J0X2F0dHIuc3RhdGU7CisJCXByb3BzLT5tYXhfbXR1ID0gcG9ydF9h dHRyLm1heF9tdHU7CisJCXByb3BzLT5hY3RpdmVfbXR1ID0gcG9ydF9hdHRyLmFjdGl2ZV9tdHU7 CisJCXByb3BzLT5waHlzX210dSA9IHBvcnRfYXR0ci5waHlzX210dTsKKwkJcHJvcHMtPmdpZF90 YmxfbGVuID0gcG9ydF9hdHRyLmdpZF90YmxfbGVuOworCQlwcm9wcy0+cG9ydF9jYXBfZmxhZ3Mg PSBwb3J0X2F0dHIucG9ydF9jYXBfZmxhZ3M7CisJCXByb3BzLT5tYXhfbXNnX3N6ID0gcG9ydF9h dHRyLm1heF9tc2dfc3o7CisJCXByb3BzLT5iYWRfcGtleV9jbnRyID0gcG9ydF9hdHRyLmJhZF9w a2V5X2NudHI7CisJCXByb3BzLT5xa2V5X3Zpb2xfY250ciA9IHBvcnRfYXR0ci5xa2V5X3Zpb2xf Y250cjsKKwkJcHJvcHMtPnBrZXlfdGJsX2xlbiA9IHBvcnRfYXR0ci5wa2V5X3RibF9sZW47CisJ CXByb3BzLT5hY3RpdmVfd2lkdGggPSBwb3J0X2F0dHIuYWN0aXZlX3dpZHRoOworCQlwcm9wcy0+ YWN0aXZlX3NwZWVkID0gcG9ydF9hdHRyLmFjdGl2ZV9zcGVlZDsKKwkJcHJvcHMtPnBoeXNfc3Rh dGUgPSBwb3J0X2F0dHIucGh5c19zdGF0ZTsKKworCQlwcm9wcy0+aXBfZ2lkcyA9IDE7CisJCXBy b3BzLT5zbV9saWQgPSAwOworCQlwcm9wcy0+bGlkID0gMDsKKwkJcHJvcHMtPmxtYyA9IDA7CisJ CXByb3BzLT5tYXhfdmxfbnVtID0gMTsKKwkJcHJvcHMtPnNtX3NsID0gMDsKKwkJcHJvcHMtPnN1 Ym5ldF90aW1lb3V0ID0gMDsKKwkJcHJvcHMtPmluaXRfdHlwZV9yZXBseSA9IDA7CisJCXByb3Bz LT5wb3J0X2NhcF9mbGFnczIgPSAwOworCX0KKworCWtmcmVlKG91dF9zZ2wpOworCWtmcmVlKGNt ZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnZyZG1h X2dldF9uZXRkZXYoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkJCQkJCQkJdTMyIHBvcnRf bnVtKQoreworCXN0cnVjdCB2cmRtYV9kZXYgKnZyZGV2ID0gdG9fdmRldihpYmRldik7CisJcmV0 dXJuIHZyZGV2LT5uZXRkZXY7Cit9CisKKy8qKgorICogdnJkbWFfY3JlYXRlX2NxIC0gQ3JlYXRl IGEgQ29tcGxldGlvbiBRdWV1ZSAoQ1EpIGZvciB2aXJ0aW8tcmRtYSBkZXZpY2UKKyAqIEBpYmNx OiBQb2ludGVyIHRvIHRoZSBJbmZpbmlCYW5kIENRIHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXpl ZAorICogQGF0dHI6IEF0dHJpYnV0ZXMgZm9yIENRIGluaXRpYWxpemF0aW9uLCBpbmNsdWRpbmcg cmVxdWVzdGVkIGRlcHRoIChjcWUpCisgKiBAYXR0cl9idW5kbGU6IEJ1bmRsZSBjb250YWluaW5n IHVzZXIgY29udGV4dCBhbmQgYXR0cmlidXRlcyAoaW5jbHVkZXMgdWRhdGEpCisgKgorICogVGhp cyBmdW5jdGlvbiBjcmVhdGVzIGEgQ29tcGxldGlvbiBRdWV1ZSAoQ1EpIGluIHRoZSB2aXJ0aW8t cmRtYSBkcml2ZXIsCisgKiB3aGljaCBpcyB1c2VkIHRvIHJlcG9ydCBjb21wbGV0aW9uIGV2ZW50 cyBmcm9tIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIHN1Y2gKKyAqIGFzIHNlbmRzLCByZWNlaXZl cywgYW5kIG1lbW9yeSBhY2Nlc3Nlcy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcGVyZm9ybXMgdGhl IGZvbGxvd2luZyBzdGVwczoKKyAqIDEuIEVuZm9yY2VzIHBlci1kZXZpY2UgQ1EgY291bnQgbGlt aXRzLgorICogMi4gQWxsb2NhdGVzIGEgRE1BLWNvaGVyZW50IHJpbmcgYnVmZmVyIGZvciBzdG9y aW5nIGNvbXBsZXRpb24gZW50cmllcy4KKyAqIDMuIENvbW11bmljYXRlcyB3aXRoIHRoZSBiYWNr ZW5kIHZpYSBhIHZpcnRxdWV1ZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgQ1EKKyAqICAgIGFuZCBv YnRhaW4gYSBoYXJkd2FyZSBoYW5kbGUgKGNxbikuCisgKiA0LiBTZXRzIHVwIHplcm8tY29weSB1 c2VyLXNwYWNlIGFjY2VzcyB0aHJvdWdoIG1tYXAoKSBpZiBAdWRhdGEgaXMgcHJvdmlkZWQuCisg KiA1LiBJbml0aWFsaXplcyBrZXJuZWwtc2lkZSBzdGF0ZSwgaW5jbHVkaW5nIGxvY2tpbmcgYW5k IGV2ZW50IGhhbmRsaW5nLgorICoKKyAqIElmIEBhdHRyX2J1bmRsZS0+dWNvcmUgKGkuZS4sIHVk YXRhKSBpcyBub24tTlVMTDoKKyAqICAgLSBBIHVzZXItbWFwcGFibGUgcmVnaW9uIGlzIGNyZWF0 ZWQgdGhhdCBpbmNsdWRlczoKKyAqICAgICAgIGEpIFRoZSBDUSBldmVudCByaW5nIChhcnJheSBv ZiBzdHJ1Y3QgdnJkbWFfY3FlKQorICogICAgICAgYikgVGhlIGFzc29jaWF0ZWQgdmlydHF1ZXVl J3MgdXNlZCByaW5nIChmb3IgcG9sbGluZyBjb21wbGV0aW9ucykKKyAqICAgLSBNZXRhZGF0YSBy ZXF1aXJlZCBmb3IgbW1hcCBzZXR1cCAob2Zmc2V0LCBzaXplcywgYWRkcmVzc2VzKSBpcyByZXR1 cm5lZAorICogICAgIHRvIHVzZXJzcGFjZSB2aWEgaWJfY29weV90b191ZGF0YSgpLgorICoKKyAq IElmIEB1ZGF0YSBpcyBOVUxMIChrZXJuZWwtb25seSBDUSk6CisgKiAgIC0gVGhlIGRyaXZlciBw cmUtcG9zdHMgcmVjZWl2ZSBidWZmZXJzIG9uIHRoZSBDUSdzIGRlZGljYXRlZCB2aXJ0cXVldWUK KyAqICAgICBzbyB0aGF0IGNvbXBsZXRpb24gbWVzc2FnZXMgZnJvbSB0aGUgZGV2aWNlIGNhbiBi ZSByZWNlaXZlZCBkaXJlY3RseQorICogICAgIGludG8gdGhlIGtlcm5lbC1tYW5hZ2VkIENRIHJp bmcuCisgKiAgIC0gTm8gbW1hcCBzdXBwb3J0IGlzIGVuYWJsZWQuCisgKgorICogTWVtb3J5IExh eW91dCBNYXBwZWQgdG8gVXNlcnNwYWNlOgorICoKKyAqICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsgIDwtLSBtYXBwZWQgYmFzZSBhZGRyZXNzCisgKiAgIHwgQ1EgRXZlbnQgUmluZyAgICAg ICAgICB8CisgKiAgIHwgKG51bV9jcWUgeCB2cmRtYV9jcWUpICB8CisgKiAgICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rCisgKiAgIHwgVmlydHF1ZXVlIFN0cnVjdHVyZSAgICB8CisgKiAgIHwg LSBEZXNjcmlwdG9yIFRhYmxlICAgICB8CisgKiAgIHwgLSBBdmFpbGFibGUgUmluZyAgICAgICB8 CisgKiAgIHwgLSBVc2VkIFJpbmcgICAgICAgICAgICB8ICA8LS0gYWNjZXNzZWQgYXQgKGJhc2Ug KyB1c2VkX29mZikKKyAqICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBVc2Fn ZSBieSBVc2Vyc3BhY2U6CisgKiAgIEFmdGVyIHJlY2VpdmluZyBAb2Zmc2V0IGFuZCBAY3Ffc2l6 ZSwgdXNlcnNwYWNlIGNhbGxzOgorICogICAgIG1tYXAoTlVMTCwgY3Ffc2l6ZSwgUFJPVF9SRUFE LCBNQVBfU0hBUkVELCBmZCwgb2Zmc2V0KTsKKyAqICAgVGhlbiBwb2xscyB0aGUgdXNlZCByaW5n IHRvIGRldGVjdCBuZXcgY29tcGxldGlvbnMgd2l0aG91dCBzeXNjYWxscy4KKyAqCisgKiBSZXR1 cm46CisgKiAgIDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSAoZS5nLiwgLUVO T01FTSwgLUVJTlZBTCwgLUVJTykuCisgKi8KK3N0YXRpYyBpbnQgdnJkbWFfY3JlYXRlX2NxKHN0 cnVjdCBpYl9jcSAqaWJjcSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpYl9jcV9pbml0X2F0dHIgKmF0 dHIsCisJCQkgICBzdHJ1Y3QgdXZlcmJzX2F0dHJfYnVuZGxlICphdHRyX2J1bmRsZSkKK3sKKwlz dHJ1Y3Qgc2NhdHRlcmxpc3QgaW4sIG91dDsKKwlzdHJ1Y3QgdnJkbWFfY3EgKnZjcSA9IHRvX3Zj cShpYmNxKTsKKwlzdHJ1Y3QgdnJkbWFfZGV2ICp2ZGV2ID0gdG9fdmRldihpYmNxLT5kZXZpY2Up OworCXN0cnVjdCB2cmRtYV9jbWRfY3JlYXRlX2NxICpjbWQ7CisJc3RydWN0IHZyZG1hX3JzcF9j cmVhdGVfY3EgKnJzcDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJc3RydWN0IGliX3VkYXRh ICp1ZGF0YTsKKwlpbnQgZW50cmllcyA9IGF0dHItPmNxZTsKKwlzaXplX3QgdG90YWxfc2l6ZTsK KwlzdHJ1Y3QgdnJkbWFfdXNlcl9tbWFwX2VudHJ5ICplbnRyeSA9IE5VTEw7CisJaW50IHJldDsK KworCWlmKCFhdHRyX2J1bmRsZSkKKwkJdWRhdGEgPSBOVUxMOworCWVsc2UKKwkJdWRhdGEgPSAm YXR0cl9idW5kbGUtPmRyaXZlcl91ZGF0YTsKKworCS8qIEVuZm9yY2UgbWF4aW11bSBudW1iZXIg b2YgQ1FzIHBlciBkZXZpY2UgKi8KKwlpZiAoIWF0b21pY19hZGRfdW5sZXNzKCZ2ZGV2LT5udW1f Y3EsIDEsIHZkZXYtPmliX2Rldi5hdHRycy5tYXhfY3EpKSB7CisJCWRldl9kYmcoJnZkZXYtPnZk ZXYtPmRldiwgIm1heCBDUSBsaW1pdCByZWFjaGVkOiAldVxuIiwKKwkJCXZkZXYtPmliX2Rldi5h dHRycy5tYXhfY3EpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBDUSBy aW5nIGJ1ZmZlcjogYXJyYXkgb2YgdnJkbWFfY3FlIGVudHJpZXMgKi8KKwl0b3RhbF9zaXplID0g UEFHRV9BTElHTihlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCB2cmRtYV9jcWUpKTsKKwl2Y3EtPnF1 ZXVlX3NpemUgPSB0b3RhbF9zaXplOworCXZjcS0+cXVldWUgPSBkbWFfYWxsb2NfY29oZXJlbnQo dmRldi0+dmRldi0+ZGV2LnBhcmVudCwgdmNxLT5xdWV1ZV9zaXplLAorCQkJCQkmdmNxLT5kbWFf YWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2Y3EtPnF1ZXVlKSB7CisJCXJldCA9IC1FTk9NRU07 CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwkvKiBQcmVwYXJlIGNvbW1hbmQgYW5kIHJlc3BvbnNl IHN0cnVjdHVyZXMgKi8KKwljbWQgPSBrbWFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFjbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9xdWV1ZTsK Kwl9CisKKwlyc3AgPSBrbWFsbG9jKHNpemVvZigqcnNwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFy c3ApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9jbWQ7CisJfQorCisJLyog T3B0aW9uYWw6IGFsbG9jYXRlIG1tYXAgZW50cnkgaWYgdXNlcnNwYWNlIG1hcHBpbmcgaXMgcmVx dWVzdGVkICovCisJaWYgKHVkYXRhKSB7CisJCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5 KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZW50cnkpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQln b3RvIGVycl9mcmVlX3JzcDsKKwkJfQorCX0KKworCS8qIEZpbGwgY29tbWFuZCBwYXJhbWV0ZXJz ICovCisJY21kLT5jcWUgPSBlbnRyaWVzOworCXNnX2luaXRfb25lKCZpbiwgY21kLCBzaXplb2Yo KmNtZCkpOworCXNnX2luaXRfb25lKCZvdXQsIHJzcCwgc2l6ZW9mKCpyc3ApKTsKKworCS8qIFNl bmQgY29tbWFuZCB0byBiYWNrZW5kIGRldmljZSAqLworCXJldCA9IHZyZG1hX2V4ZWNfdmVyYnNf Y21kKHZkZXYsIFZJUlRJT19SRE1BX0NNRF9DUkVBVEVfQ1EsICZpbiwgJm91dCk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKCZ2ZGV2LT52ZGV2LT5kZXYsICJDUkVBVEVfQ1EgY21kIGZhaWxlZDog JWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWVfZW50cnk7CisJfQorCisJLyogSW5pdGlhbGl6 ZSBDUSBmaWVsZHMgZnJvbSByZXNwb25zZSAqLworCXZjcS0+Y3FfaGFuZGxlID0gcnNwLT5jcW47 CisJdmNxLT5pYmNxLmNxZSA9IGVudHJpZXM7CisJdmNxLT5udW1fY3FlID0gZW50cmllczsKKwl2 Y3EtPnZxID0gJnZkZXYtPmNxX3Zxc1tyc3AtPmNxbl07IC8qIEFzc2lnbmVkIHZpcnRxdWV1ZSBm b3IgdGhpcyBDUSAqLworCXZkZXYtPmNxc1tyc3AtPmNxbl0gPSB2Y3E7CisKKwkvKiBVc2Vyc3Bh Y2UgbWFwcGluZyBzZXR1cCAqLworCWlmICh1ZGF0YSkgeworCQlzdHJ1Y3QgdnJkbWFfY3JlYXRl X2NxX3VyZXNwIHVyZXNwID0ge307CisJCXN0cnVjdCB2cmRtYV91Y29udGV4dCAqdWN0eCA9cmRt YV91ZGF0YV90b19kcnZfY29udGV4dCh1ZGF0YSwgc3RydWN0IHZyZG1hX3Vjb250ZXh0LCBpYnVj b250ZXh0KTsKKworCQllbnRyeS0+bW1hcF90eXBlID0gVlJETUFfTU1BUF9DUTsKKwkJZW50cnkt PnZxID0gdmNxLT52cS0+dnE7CisJCWVudHJ5LT51c2VyX2J1ZiA9IHZjcS0+cXVldWU7CisJCWVu dHJ5LT51YnVmX3NpemUgPSB2Y3EtPnF1ZXVlX3NpemU7CisKKwkJLyogQ2FsY3VsYXRlIHVzZWQg cmluZyBvZmZzZXQgd2l0aGluIGRlc2NyaXB0b3IgdGFibGUgKi8KKwkJdXJlc3AudXNlZF9vZmYg PSB2aXJ0cXVldWVfZ2V0X3VzZWRfYWRkcih2Y3EtPnZxLT52cSkgLQorCQkJCSB2aXJ0cXVldWVf Z2V0X2Rlc2NfYWRkcih2Y3EtPnZxLT52cSk7CisKKwkJLyogQWxpZ24gdnJpbmcgc2l6ZSB0byBw YWdlIGJvdW5kYXJ5IGZvciBtbWFwICovCisJCXVyZXNwLnZxX3NpemUgPSBQQUdFX0FMSUdOKHZy aW5nX3NpemUodmlydHF1ZXVlX2dldF92cmluZ19zaXplKHZjcS0+dnEtPnZxKSwKKwkJCQkJCSAg ICAgIFNNUF9DQUNIRV9CWVRFUykpOworCQl0b3RhbF9zaXplICs9IHVyZXNwLnZxX3NpemU7CisK KwkJLyogSW5zZXJ0IG1tYXAgZW50cnkgaW50byB1c2VyIGNvbnRleHQgKi8KKwkJcmV0ID0gcmRt YV91c2VyX21tYXBfZW50cnlfaW5zZXJ0KCZ1Y3R4LT5pYnVjb250ZXh0LAorCQkJCQkJICZlbnRy eS0+cmRtYV9lbnRyeSwKKwkJCQkJCSB0b3RhbF9zaXplKTsKKwkJaWYgKHJldCkgeworCQkJZGV2 X2VycigmdmRldi0+dmRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gaW5zZXJ0IG1tYXAgZW50cnkg Zm9yIENROiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyX2ZyZWVfZW50cnk7CisJCX0KKworCQkv KiBQb3B1bGF0ZSByZXNwb25zZSB0byB1c2Vyc3BhY2UgKi8KKwkJdXJlc3Aub2Zmc2V0ID0gcmRt YV91c2VyX21tYXBfZ2V0X29mZnNldCgmZW50cnktPnJkbWFfZW50cnkpOworCQl1cmVzcC5jcV9w aHlzX2FkZHIgPSB2aXJ0X3RvX3BoeXModmNxLT5xdWV1ZSk7CisJCXVyZXNwLm51bV9jcWUgPSBl bnRyaWVzOworCQl1cmVzcC5udW1fY3ZxZSA9IHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2Y3Et PnZxLT52cSk7CisJCXVyZXNwLmNxX3NpemUgPSB0b3RhbF9zaXplOworCisJCWlmICh1ZGF0YS0+ b3V0bGVuIDwgc2l6ZW9mKHVyZXNwKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJy X3JlbW92ZV9tbWFwOworCQl9CisKKwkJcmV0ID0gaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJnVy ZXNwLCBzaXplb2YodXJlc3ApKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmdmRldi0+dmRl di0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gY29weSBDUSBjcmVhdGlvbiByZXNwb25zZSB0byB1c2Vy c3BhY2VcbiIpOworCQkJZ290byBlcnJfcmVtb3ZlX21tYXA7CisJCX0KKworCQl2Y3EtPmVudHJ5 ID0gJmVudHJ5LT5yZG1hX2VudHJ5OworCX0gZWxzZSB7CisJCWludCBzZ19udW0gPSBlbnRyaWVz ID4gdmNxLT52cS0+dnEtPm51bV9mcmVlID8gdmNxLT52cS0+dnEtPm51bV9mcmVlIDogZW50cmll czsKKwkJLyogS2VybmVsLW9ubHkgQ1E6IHByZS1wb3N0IHJlY2VpdmUgYnVmZmVycyB0byBjYXRj aCBldmVudHMgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZ19udW07IGkrKykgeworCQkJc2df aW5pdF9vbmUoJnNnLCB2Y3EtPnF1ZXVlICsgaSwgc2l6ZW9mKHN0cnVjdCB2cmRtYV9jcWUpKTsK KwkJCXJldCA9IHZpcnRxdWV1ZV9hZGRfaW5idWYodmNxLT52cS0+dnEsICZzZywgMSwKKwkJCQkJ CSB2Y3EtPnF1ZXVlICsgaSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2Vy cigmdmRldi0+dmRldi0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIGFkZCBpbmJ1ZiB0byBDUSB2cTog JWRcbiIsIHJldCk7CisJCQkJLyogQmVzdC1lZmZvcnQgY2xlYW51cDsgY29udGludWUgYW55d2F5 ICovCisJCQl9CisJCX0KKwkJdmlydHF1ZXVlX2tpY2sodmNxLT52cS0+dnEpOworCX0KKworCS8q IEZpbmFsIGluaXRpYWxpemF0aW9uICovCisJc3Bpbl9sb2NrX2luaXQoJnZjcS0+bG9jayk7CisK KwkvKiBDbGVhbnVwIHRlbXBvcmFyaWVzICovCisJa2ZyZWUocnNwKTsKKwlrZnJlZShjbWQpOwor CXJldHVybiAwOworCitlcnJfcmVtb3ZlX21tYXA6CisJaWYgKHVkYXRhICYmIGVudHJ5KQorCQly ZG1hX3VzZXJfbW1hcF9lbnRyeV9yZW1vdmUoJmVudHJ5LT5yZG1hX2VudHJ5KTsKK2Vycl9mcmVl X2VudHJ5OgorCWlmIChlbnRyeSkKKwkJa2ZyZWUoZW50cnkpOworZXJyX2ZyZWVfcnNwOgorCWtm cmVlKHJzcCk7CitlcnJfZnJlZV9jbWQ6CisJa2ZyZWUoY21kKTsKK2Vycl9mcmVlX3F1ZXVlOgor CWRtYV9mcmVlX2NvaGVyZW50KHZkZXYtPnZkZXYtPmRldi5wYXJlbnQsIHZjcS0+cXVldWVfc2l6 ZSwKKwkJCSAgdmNxLT5xdWV1ZSwgdmNxLT5kbWFfYWRkcik7CitlcnJfb3V0OgorCWF0b21pY19k ZWMoJnZkZXYtPm51bV9jcSk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2cmRtYV9kZXN0 cm95X2NxIC0gRGVzdHJveSBhIENvbXBsZXRpb24gUXVldWUgKENRKSBpbiB2aXJ0aW8tcmRtYSBk cml2ZXIKKyAqIEBjcTogUG9pbnRlciB0byB0aGUgSUIgQ1EgdG8gZGVzdHJveQorICogQHVkYXRh OiBVc2VyIGRhdGEgY29udGV4dCAobWF5IGJlIE5VTEwgZm9yIGtlcm5lbCBjbGllbnRzKQorICoK KyAqIFRoaXMgZnVuY3Rpb24gZGVzdHJveXMgYSBDUSBieToKKyAqICAgMS4gRGlzYWJsaW5nIGNh bGxiYWNrcyBvbiB0aGUgYXNzb2NpYXRlZCB2aXJ0cXVldWUKKyAqICAgMi4gU2VuZGluZyBWSVJU SU9fUkRNQV9DTURfREVTVFJPWV9DUSBjb21tYW5kIHRvIGJhY2tlbmQKKyAqICAgMy4gRHJhaW5p bmcgYW55IHBlbmRpbmcgYnVmZmVycyBmcm9tIHRoZSB2aXJ0cXVldWUgKGZvciBrZXJuZWwgQ1Fz KQorICogICA0LiBSZW1vdmluZyBtbWFwIGVudHJpZXMgKGlmIGNyZWF0ZWQgZm9yIHVzZXJzcGFj ZSkKKyAqICAgNS4gRnJlZWluZyBETUEtY29oZXJlbnQgbWVtb3J5IHVzZWQgZm9yIENRIHJpbmcK KyAqICAgNi4gRGVjcmVtZW50aW5nIGRldmljZS13aWRlIENRIGNvdW50ZXIKKyAqCisgKiBUaGUg Q1EgbXVzdCBub3QgYmUgaW4gdXNlIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKgor ICogUmV0dXJuOgorICogICBBbHdheXMgcmV0dXJucyAwIChzdWNjZXNzKS4gRnV0dXJlIHZlcnNp b25zIG1heSByZXR1cm4gZXJyb3IgaWYKKyAqICAgdGhlIGRldmljZSBmYWlscyB0byBhY2tub3ds ZWRnZSBkZXN0cnVjdGlvbi4KKyAqLworc3RhdGljIGludCB2cmRtYV9kZXN0cm95X2NxKHN0cnVj dCBpYl9jcSAqY3EsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IHZyZG1hX2Nx ICp2Y3EgPSB0b192Y3EoY3EpOworCXN0cnVjdCB2cmRtYV9kZXYgKnZkZXYgPSB0b192ZGV2KGNx LT5kZXZpY2UpOworCXN0cnVjdCBzY2F0dGVybGlzdCBpbl9zZ3M7CisJc3RydWN0IHZyZG1hX2Nt ZF9kZXN0cm95X2NxICpjbWQ7CisKKwkvKiBBbGxvY2F0ZSBjb21tYW5kIGJ1ZmZlciAqLworCWNt ZCA9IGttYWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwkvKiBQcmVwYXJlIGFuZCBzZW5kIERFU1RST1lfQ1EgY29tbWFuZCB0 byBiYWNrZW5kICovCisJY21kLT5jcW4gPSB2Y3EtPmNxX2hhbmRsZTsKKwlzZ19pbml0X29uZSgm aW5fc2dzLCBjbWQsIHNpemVvZigqY21kKSk7CisKKwkvKiBQcmV2ZW50IGZ1cnRoZXIgaW50ZXJy dXB0cy9jYWxsYmFja3MgZHVyaW5nIHRlYXJkb3duICovCisJdmlydHF1ZXVlX2Rpc2FibGVfY2Io dmNxLT52cS0+dnEpOworCisJLyogU2VuZCBjb21tYW5kIHN5bmNocm9ub3VzbHk7IG5vIHJlc3Bv bnNlIGV4cGVjdGVkIG9uIHN1Y2Nlc3MgKi8KKwlpbnQgcmMgPSB2cmRtYV9leGVjX3ZlcmJzX2Nt ZCh2ZGV2LCBWSVJUSU9fUkRNQV9DTURfREVTVFJPWV9DUSwKKwkJCQkgICAgICAmaW5fc2dzLCBO VUxMKTsKKwlpZiAocmMpIHsKKwkJZGV2X3dhcm4oJnZkZXYtPnZkZXYtPmRldiwKKwkJCSAiRmFp bGVkIHRvIGRlc3Ryb3kgQ1EgJXU6IGJhY2tlbmQgZXJyb3IgJWRcbiIsCisJCQkgdmNxLT5jcV9o YW5kbGUsIHJjKTsKKwkJLyogUHJvY2VlZCBhbnl3YXk6IGNvbnRpbnVlIGNsZWFudXAgZXZlbiBp ZiBkZXZpY2UgZmFpbGVkICovCisJfQorCisJLyoKKwkgKiBGb3Iga2VybmVsLW9ubHkgQ1FzOiBk cmFpbiBhbGwgdW51c2VkIHJlY2VpdmUgYnVmZmVycy4KKwkgKiBVc2Vyc3BhY2UgbWFuYWdlcyBp dHMgb3duIHZyaW5nIHZpYSBtbWFwL3BvbGwsIHNvIHNraXAuCisJICovCisJaWYgKCF1ZGF0YSkg eworCQlzdHJ1Y3QgdnJkbWFfY3FlICpjcWU7CisJCXdoaWxlICgoY3FlID0gdmlydHF1ZXVlX2Rl dGFjaF91bnVzZWRfYnVmKHZjcS0+dnEtPnZxKSkgIT0gTlVMTCkgeworCQkJLyogTm8gYWN0aW9u IG5lZWRlZCAtIGp1c3QgcmVsZWFzZSBidWZmZXIgYmFjayAqLworCQl9CisJfQorCisJLyogUmVt b3ZlIG1tYXAgZW50cnkgaWYgb25lIHdhcyBjcmVhdGVkIGZvciB1c2Vyc3BhY2UgYWNjZXNzICov CisJaWYgKHZjcS0+ZW50cnkpIHsKKwkJcmRtYV91c2VyX21tYXBfZW50cnlfcmVtb3ZlKHZjcS0+ ZW50cnkpOworCQl2Y3EtPmVudHJ5ID0gTlVMTDsgIC8qIFNhZmV0eTogYXZvaWQgZG91YmxlLXJl bW92ZSAqLworCX0KKworCS8qIFVucmVnaXN0ZXIgQ1EgZnJvbSBkZXZpY2UncyBDUSB0YWJsZSAq LworCVdSSVRFX09OQ0UodmRldi0+Y3FzW3ZjcS0+Y3FfaGFuZGxlXSwgTlVMTCk7CisKKwkvKiBG cmVlIENRIGV2ZW50IHJpbmcgKERNQSBtZW1vcnkpICovCisJZG1hX2ZyZWVfY29oZXJlbnQodmRl di0+dmRldi0+ZGV2LnBhcmVudCwgdmNxLT5xdWV1ZV9zaXplLAorCQkJICB2Y3EtPnF1ZXVlLCB2 Y3EtPmRtYV9hZGRyKTsKKworCS8qIERlY3JlbWVudCBnbG9iYWwgQ1EgY291bnQgKi8KKwlhdG9t aWNfZGVjKCZ2ZGV2LT5udW1fY3EpOworCisJLyogUmUtZW5hYmxlIGNhbGxiYWNrICh0aG91Z2gg dnEgd2lsbCBsaWtlbHkgYmUgcmV1c2VkIG9yIGZyZWVkIGxhdGVyKSAqLworCXZpcnRxdWV1ZV9l bmFibGVfY2IodmNxLT52cS0+dnEpOworCisJLyogQ2xlYW4gdXAgY29tbWFuZCBzdHJ1Y3R1cmUg Ki8KKwlrZnJlZShjbWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnJkbWFfZGVh bGxvY19wZChzdHJ1Y3QgaWJfcGQgKmlicGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOworCisv KioKKyAqIHZyZG1hX2FsbG9jX3BkIC0gQWxsb2NhdGUgYSBQcm90ZWN0aW9uIERvbWFpbiAoUEQp IHZpYSB2aXJ0aW8tcmRtYSBiYWNrZW5kCisgKiBAaWJwZDogUG9pbnRlciB0byB0aGUgSUIgUEQg c3RydWN0dXJlCisgKiBAdWRhdGE6IFVzZXIgZGF0YSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHVz ZXJzcGFjZSAobWF5IGJlIE5VTEwpCisgKgorICogVGhpcyBmdW5jdGlvbjoKKyAqICAgMS4gU2Vu ZHMgVklSVElPX1JETUFfQ01EX0NSRUFURV9QRCB0byB0aGUgYmFja2VuZAorICogICAyLiBSZWNl aXZlcyBhIFBEIGhhbmRsZSAocGRuKSBmcm9tIHRoZSBkZXZpY2UKKyAqICAgMy4gU3RvcmVzIGl0 IGluIHRoZSB2cmRtYV9wZCBzdHJ1Y3R1cmUKKyAqICAgNC4gT3B0aW9uYWxseSByZXR1cm5zIGFu IGVtcHR5IHJlc3BvbnNlIHRvIHVzZXJzcGFjZSAoZm9yIEFCSSBjb21wYXRpYmlsaXR5KQorICoK KyAqIFJldHVybjoKKyAqICAgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJl LgorICovCitzdGF0aWMgaW50IHZyZG1hX2FsbG9jX3BkKHN0cnVjdCBpYl9wZCAqaWJwZCwgc3Ry dWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgdnJkbWFfcGQgKnBkID0gdG9fdnBkKGli cGQpOworCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gaWJwZC0+ZGV2aWNlOworCXN0cnVjdCB2 cmRtYV9kZXYgKnZkZXYgPSB0b192ZGV2KGliZGV2KTsKKwlzdHJ1Y3QgdnJkbWFfcnNwX2NyZWF0 ZV9wZCAqcnNwOworCXN0cnVjdCBzY2F0dGVybGlzdCBvdXRfc2dzOworCWludCByZXQ7CisKKwkv KiBBbGxvY2F0ZSByZXNwb25zZSBidWZmZXIgKi8KKwlyc3AgPSBremFsbG9jKHNpemVvZigqcnNw KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyc3ApCisJCXJldHVybiAtRU5PTUVNOworCisJc2dfaW5p dF9vbmUoJm91dF9zZ3MsIHJzcCwgc2l6ZW9mKCpyc3ApKTsKKworCS8qIFNlbmQgY29tbWFuZCB0 byBiYWNrZW5kICovCisJcmV0ID0gdnJkbWFfZXhlY192ZXJic19jbWQodmRldiwgVklSVElPX1JE TUFfQ01EX0NSRUFURV9QRCwKKwkJCQkgICBOVUxMLCAmb3V0X3Nncyk7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKCZ2ZGV2LT52ZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGNyZWF0ZSBQRDogY21k IGVycm9yICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCS8qIFN0b3JlIHJl dHVybmVkIFBEIGhhbmRsZSAqLworCXBkLT5wZF9oYW5kbGUgPSByc3AtPnBkbjsKKworCS8qIElm IHRoaXMgaXMgYSB1c2Vyc3BhY2UgUEQsIHJldHVybiBzdWNjZXNzIGluZGljYXRvciAqLworCWlm ICh1ZGF0YSkgeworCQlzdHJ1Y3QgdnJkbWFfYWxsb2NfcGRfdXJlc3AgdXJlc3AgPSB7fTsKKwor CQlpZiAoaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJnVyZXNwLCBzaXplb2YodXJlc3ApKSkgewor CQkJZGV2X3dhcm4oJnZkZXYtPnZkZXYtPmRldiwKKwkJCQkgIkZhaWxlZCB0byBjb3B5IFBEIHVy ZXNwIHRvIHVzZXJzcGFjZVxuIik7CisJCQkvKiBVbmRvOiBkZXN0cm95IHRoZSBQRCBvbiBiYWNr ZW5kICovCisJCQl2cmRtYV9kZWFsbG9jX3BkKGlicGQsIHVkYXRhKTsKKwkJCXJldCA9IC1FRkFV TFQ7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisJfQorCisJZGV2X2luZm8oJnZkZXYtPnZkZXYt PmRldiwgIiVzOiBhbGxvY2F0ZWQgUEQgJXVcbiIsCisJCSBfX2Z1bmNfXywgcGQtPnBkX2hhbmRs ZSk7CisKK2Vycl9mcmVlOgorCWtmcmVlKHJzcCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisg KiB2cmRtYV9kZWFsbG9jX3BkIC0gRGVhbGxvY2F0ZSBhIFByb3RlY3Rpb24gRG9tYWluIChQRCkK KyAqIEBpYnBkOiBQb2ludGVyIHRvIHRoZSBJQiBQRCB0byBkZXN0cm95CisgKiBAdWRhdGE6IFVz ZXIgZGF0YSBjb250ZXh0IChpZ25vcmVkIGhlcmU7IHVzZWQgZm9yIHN5bW1ldHJ5KQorICoKKyAq IFRoaXMgZnVuY3Rpb24gc2VuZHMgVklSVElPX1JETUFfQ01EX0RFU1RST1lfUEQgdG8gdGhlIGJh Y2tlbmQKKyAqIHRvIHJlbGVhc2UgdGhlIFBEIHJlc291cmNlLiBObyByZXNwb25zZSBpcyBleHBl Y3RlZC4KKyAqCisgKiBOb3RlOiBUaGVyZSBpcyBubyBsb2NhbCBzdGF0ZSAoZS5nLiwgRE1BIG1h cHBpbmdzKSB0aWVkIHRvIFBEIGluIHRoaXMgZHJpdmVyLgorICogQWxsIGNsZWFudXAgaXMgaGFu ZGxlZCBieSB0aGUgYmFja2VuZC4KKyAqCisgKiBSZXR1cm46CisgKiAgIEFsd2F5cyByZXR1cm5z IDAgKHN1Y2Nlc3MpLgorICovCitzdGF0aWMgaW50IHZyZG1hX2RlYWxsb2NfcGQoc3RydWN0IGli X3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCB2cmRtYV9wZCAq cGQgPSB0b192cGQoaWJwZCk7CisJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBpYnBkLT5kZXZp Y2U7CisJc3RydWN0IHZyZG1hX2RldiAqdmRldiA9IHRvX3ZkZXYoaWJkZXYpOworCXN0cnVjdCB2 cmRtYV9jbWRfZGVzdHJveV9wZCAqY21kOworCXN0cnVjdCBzY2F0dGVybGlzdCBpbl9zZ3M7CisJ aW50IHJldDsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPnBkbiA9IHBkLT5wZF9oYW5kbGU7 CisJc2dfaW5pdF9vbmUoJmluX3NncywgY21kLCBzaXplb2YoKmNtZCkpOworCisJcmV0ID0gdnJk bWFfZXhlY192ZXJic19jbWQodmRldiwgVklSVElPX1JETUFfQ01EX0RFU1RST1lfUEQsCisJCQkJ ICAgJmluX3NncywgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZ2ZGV2LT52ZGV2LT5k ZXYsCisJCQkiRmFpbGVkIHRvIGRlc3Ryb3kgUEQgJXU6IGJhY2tlbmQgZXJyb3IgJWRcbiIsCisJ CQlwZC0+cGRfaGFuZGxlLCByZXQpOworCQkvKiBQcm9jZWVkIGFueXdheSAtIGRvbid0IGJsb2Nr IGNsZWFudXAgKi8KKwl9CisKKwlkZXZfaW5mbygmdmRldi0+dmRldi0+ZGV2LCAiJXM6IGRlYWxs b2NhdGVkIFBEICV1XG4iLAorCQkgX19mdW5jX18sIHBkLT5wZF9oYW5kbGUpOworCisJa2ZyZWUo Y21kKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cmRtYV9pbml0X21tYXBfZW50cnkgLSBJ bml0aWFsaXplIGFuZCBpbnNlcnQgYSB1c2VyIG1tYXAgZW50cnkgZm9yIFFQIGJ1ZmZlcgorICog QHZkZXY6CVBvaW50ZXIgdG8gdGhlIHZSRE1BIGRldmljZQorICogQHZxOgkJVmlydHF1ZXVlIGFz c29jaWF0ZWQgd2l0aCB0aGlzIG1lbW9yeSByZWdpb24KKyAqIEBlbnRyeV86CVBvaW50ZXIgdG8g c3RvcmUgYWxsb2NhdGVkIG1tYXAgZW50cnkgKG91dHB1dCkKKyAqIEBidWZfc2l6ZToJU2l6ZSBv ZiB0aGUgdXNlciBkYXRhIGJ1ZmZlciAoZS5nLiwgU1EvUlEgcmluZyBzcGFjZSkKKyAqIEB2Y3R4 OglVc2VyIGNvbnRleHQgdG8gd2hpY2ggdGhlIG1tYXAgZW50cnkgd2lsbCBiZSBhdHRhY2hlZAor ICogQHNpemU6CVRvdGFsIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBtYXBwaW5nIHJlZ2lvbiAob3V0 cHV0KQorICogQHVzZWRfb2ZmOglPZmZzZXQgd2l0aGluIHRoZSBtYXBwaW5nIHdoZXJlIHVzZWQg cmluZyBzdGFydHMgKG91dHB1dCkKKyAqIEB2cV9zaXplOglBbGlnbmVkIHNpemUgb2YgdGhlIHZp cnRxdWV1ZSBzdHJ1Y3R1cmUgKG91dHB1dCkKKyAqIEBkbWFfYWRkcjoJRE1BIGFkZHJlc3Mgb2Yg dGhlIGFsbG9jYXRlZCBjb2hlcmVudCBidWZmZXIgKG91dHB1dCkKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGFsbG9jYXRlcyBhIHBoeXNpY2FsbHkgY29udGlndW91cywgRE1BLWNvaGVyZW50IGJ1ZmZl ciBmb3IKKyAqIHRoZSBTZW5kL1JlY2VpdmUgUXVldWUgZGF0YSAoZS5nLiwgV1FFIHBheWxvYWRz KSwgbWFwcyB0aGUgdmlydHF1ZXVlJ3MKKyAqIGRlc2NyaXB0b3IgYW5kIHVzZWQgcmluZ3MgaW50 byB1c2Vyc3BhY2UgdmlhIGFuIG1tYXAgZW50cnksIGFuZCBpbnNlcnRzIGl0CisgKiBpbnRvIHRo ZSB1c2VyIGNvbnRleHQuIEl0IHN1cHBvcnRzIGZhc3QgZG9vcmJlbGwgbWFwcGluZyBpZiBlbmFi bGVkLgorICoKKyAqIFRoZSBsYXlvdXQgaW4gdXNlcnNwYWNlIGlzOgorICogICBbMCwgYnVmX3Np emVfYWxpZ25lZCkgICAgICAgICAgIDogRGF0YSBidWZmZXIgKFNRL1JRIHBheWxvYWQgc3BhY2Up CisgKiAgIFtidWZfc2l6ZV9hbGlnbmVkLCAuLi4pICAgICAgICAgOiBWaXJ0cXVldWUgKGRlc2Mg KyBhdmFpbCArIHVzZWQpCisgKiAgIFsuLi4gKyB2cV9zaXplLCAuLi5dICAgICAgICAgICAgOiBP cHRpb25hbCBmYXN0IGRvb3JiZWxsIHBhZ2UKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0 aGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIsCisgKiBvciBOVUxM IG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkICp2cmRtYV9pbml0X21tYXBfZW50cnkoc3Ry dWN0IHZyZG1hX2RldiAqdmRldiwKKwkJCQkgICBzdHJ1Y3QgdmlydHF1ZXVlICp2cSwKKwkJCQkg ICBzdHJ1Y3QgdnJkbWFfdXNlcl9tbWFwX2VudHJ5ICoqZW50cnlfLAorCQkJCSAgIGludCBidWZf c2l6ZSwKKwkJCQkgICBzdHJ1Y3QgdnJkbWFfdWNvbnRleHQgKnZjdHgsCisJCQkJICAgX191NjQg KnNpemUsCisJCQkJICAgX191NjQgKnVzZWRfb2ZmLAorCQkJCSAgIF9fdTMyICp2cV9zaXplLAor CQkJCSAgIGRtYV9hZGRyX3QgKmRtYV9hZGRyKQoreworCXZvaWQgKmJ1ZjsKKwlzaXplX3QgdG90 YWxfc2l6ZTsKKwlzdHJ1Y3QgdnJkbWFfdXNlcl9tbWFwX2VudHJ5ICplbnRyeTsKKwlpbnQgcmM7 CisKKwkvKiBBbGxvY2F0ZSBhbGlnbmVkIGJ1ZmZlciBmb3IgU1EvUlEgcGF5bG9hZCBhcmVhICov CisJdG90YWxfc2l6ZSA9IFBBR0VfQUxJR04oYnVmX3NpemUpOworCWJ1ZiA9IGRtYV9hbGxvY19j b2hlcmVudCh2ZGV2LT52ZGV2LT5kZXYucGFyZW50LCB0b3RhbF9zaXplLAorCQkJCSBkbWFfYWRk ciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCisJZW50cnkgPSBr emFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KSB7CisJCWRt YV9mcmVlX2NvaGVyZW50KHZkZXYtPnZkZXYtPmRldi5wYXJlbnQsIHRvdGFsX3NpemUsCisJCQkJ ICBidWYsICpkbWFfYWRkcik7CisJCXJldHVybiBOVUxMOworCX0KKworCWVudHJ5LT5tbWFwX3R5 cGUgPSBWUkRNQV9NTUFQX1FQOworCWVudHJ5LT52cSA9IHZxOworCWVudHJ5LT51c2VyX2J1ZiA9 IGJ1ZjsKKwllbnRyeS0+dWJ1Zl9zaXplID0gdG90YWxfc2l6ZTsgLyogQWxyZWFkeSBwYWdlLWFs aWduZWQgKi8KKworCS8qIENhbGN1bGF0ZSBvZmZzZXQgZnJvbSBkZXNjIHRvIHVzZWQgcmluZyAo Zm9yIHVzZXJzcGFjZSBwb2xsaW5nKSAqLworCSp1c2VkX29mZiA9IHZpcnRxdWV1ZV9nZXRfdXNl ZF9hZGRyKHZxKSAtIHZpcnRxdWV1ZV9nZXRfZGVzY19hZGRyKHZxKTsKKworCS8qIEFsaWduIHZy aW5nIHNpemUgdG8gY2FjaGUgbGluZSBib3VuZGFyeSBhbmQgcm91bmQgdXAgdG8gcGFnZSBzaXpl ICovCisJKnZxX3NpemUgPSB2cmluZ19zaXplKHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2cSks IFNNUF9DQUNIRV9CWVRFUyk7CisJKnZxX3NpemUgPSBQQUdFX0FMSUdOKCp2cV9zaXplKTsKKwl0 b3RhbF9zaXplICs9ICp2cV9zaXplOworCisJLyogQWRkIGV4dHJhIHBhZ2UgZm9yIGZhc3QgZG9v cmJlbGwgaWYgc3VwcG9ydGVkICovCisJaWYgKHZkZXYtPmZhc3RfZG9vcmJlbGwpCisJCXRvdGFs X3NpemUgKz0gUEFHRV9TSVpFOworCisJLyogSW5zZXJ0IGludG8gdXNlciBtbWFwIGluZnJhc3Ry dWN0dXJlICovCisJcmMgPSByZG1hX3VzZXJfbW1hcF9lbnRyeV9pbnNlcnQoJnZjdHgtPmlidWNv bnRleHQsICZlbnRyeS0+cmRtYV9lbnRyeSwKKwkJCQkJIHRvdGFsX3NpemUpOworCWlmIChyYykg eworCQlkbWFfZnJlZV9jb2hlcmVudCh2ZGV2LT52ZGV2LT5kZXYucGFyZW50LCB0b3RhbF9zaXpl LAorCQkJCSAgYnVmLCAqZG1hX2FkZHIpOworCQlrZnJlZShlbnRyeSk7CisJCXJldHVybiBOVUxM OworCX0KKworCSpzaXplID0gdG90YWxfc2l6ZTsKKwkqZW50cnlfID0gZW50cnk7CisJcmV0dXJu IGJ1ZjsKK30KKworLyoqCisgKiB2cmRtYV9jcmVhdGVfcXAgLSBDcmVhdGUgYSBWaXJ0aW8tUkRN QSBRdWV1ZSBQYWlyIChRUCkKKyAqIEBpYnFwOglQb2ludGVyIHRvIHRoZSBJQiBRUCBzdHJ1Y3R1 cmUgKGFsbG9jYXRlZCBieSBjb3JlKQorICogQGF0dHI6CVFQIGluaXRpYWxpemF0aW9uIGF0dHJp YnV0ZXMgZnJvbSB1c2Vyc3BhY2Ugb3Iga2VybmVsCisgKiBAdWRhdGE6CVVzZXIgZGF0YSBmb3Ig bW1hcCBhbmQgZG9vcmJlbGwgbWFwcGluZyAoTlVMTCBpZiBrZXJuZWwgUVApCisgKgorICogVGhp cyBmdW5jdGlvbiBjcmVhdGVzIGEgUVAgaW4gdGhlIGJhY2tlbmQgdlJETUEgZGV2aWNlIHZpYSBh IHZpcnRxdWV1ZQorICogY29tbWFuZC4gSXQgYWxsb2NhdGVzIHJlc291cmNlcyBpbmNsdWRpbmc6 CisgKiAgIC0gU2VuZCBhbmQgUmVjZWl2ZSBRdWV1ZXMgKHZpcnRxdWV1ZXMpCisgKiAgIC0gTWVt b3J5IHJlZ2lvbnMgZm9yIFdRRSBidWZmZXJzIChpZiB1c2VyLXNwYWNlIFFQKQorICogICAtIERN QS1jb2hlcmVudCByaW5ncyBhbmQgbW1hcCBlbnRyaWVzCisgKgorICogT24gc3VjY2VzcywgaXQg cmV0dXJucyAwIGFuZCBmaWxscyBAdWRhdGEgd2l0aCBvZmZzZXRzIGFuZCBzaXplcyBuZWVkZWQK KyAqIGZvciB1c2Vyc3BhY2UgdG8gbW1hcCBTUS9SUSByaW5ncyBhbmQgYWNjZXNzIENRIG5vdGlm aWNhdGlvbiBtZWNoYW5pc21zLgorICoKKyAqIENvbnRleHQ6IENhbGxlZCBpbiBwcm9jZXNzIGNv bnRleHQuIE1heSBzbGVlcC4KKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJu byBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHZyZG1hX2NyZWF0ZV9xcChzdHJ1Y3QgaWJf cXAgKmlicXAsCisJCSAgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICphdHRyLAorCQkgICAgc3Ry dWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5fc2dzLCBvdXRf c2dzOworCXN0cnVjdCB2cmRtYV9kZXYgKnZkZXYgPSB0b192ZGV2KGlicXAtPmRldmljZSk7CisJ c3RydWN0IHZyZG1hX2NtZF9jcmVhdGVfcXAgKmNtZDsKKwlzdHJ1Y3QgdnJkbWFfcnNwX2NyZWF0 ZV9xcCAqcnNwOworCXN0cnVjdCB2cmRtYV9xcCAqdnFwID0gdG9fdnFwKGlicXApOworCWludCBy YywgdnFuOworCWludCByZXQgPSAwOworCisJLyogU1JRIGlzIG5vdCBzdXBwb3J0ZWQgeWV0ICov CisJaWYgKGF0dHItPnNycSkgeworCQlkZXZfZXJyKCZ2ZGV2LT52ZGV2LT5kZXYsICJTUlEgaXMg bm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBFbmZv cmNlIFFQIGNvdW50IGxpbWl0ICovCisJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmdmRldi0+bnVt X3FwLCAxLCB2ZGV2LT5pYl9kZXYuYXR0cnMubWF4X3FwKSkgeworCQlkZXZfZGJnKCZ2ZGV2LT52 ZGV2LT5kZXYsICJleGNlZWRlZCBtYXhfcXAgKCV1KVxuIiwKKwkJCXZkZXYtPmliX2Rldi5hdHRy cy5tYXhfcXApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBWYWxpZGF0ZSBRUCBhdHRy aWJ1dGVzIGJlZm9yZSBzZW5kaW5nIHRvIGRldmljZSAqLworCWlmICh2cmRtYV9xcF9jaGVja19p bml0KHZkZXYsIGF0dHIpKSB7CisJCWRldl9kYmcoJnZkZXYtPnZkZXYtPmRldiwgImludmFsaWQg UVAgaW5pdCBhdHRyaWJ1dGVzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY21kID0g a3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXJldCA9 IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX2NtZDsKKwl9CisKKwlyc3AgPSBremFsbG9jKHNp emVvZigqcnNwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyc3ApIHsKKwkJcmV0ID0gLUVOT01FTTsK KwkJZ290byBlcnJfYWxsb2NfcnNwOworCX0KKworCS8qIFByZXBhcmUgY29tbWFuZCBmb3IgZGV2 aWNlICovCisJY21kLT5wZG4gPSB0b192cGQoaWJxcC0+cGQpLT5wZF9oYW5kbGU7CisJY21kLT5x cF90eXBlID0gYXR0ci0+cXBfdHlwZTsKKwljbWQtPnNxX3NpZ190eXBlID0gYXR0ci0+c3Ffc2ln X3R5cGU7CisJY21kLT5tYXhfc2VuZF93ciA9IGF0dHItPmNhcC5tYXhfc2VuZF93cjsKKwljbWQt Pm1heF9zZW5kX3NnZSA9IGF0dHItPmNhcC5tYXhfc2VuZF9zZ2U7CisJY21kLT5zZW5kX2NxbiA9 IHRvX3ZjcShhdHRyLT5zZW5kX2NxKS0+Y3FfaGFuZGxlOworCWNtZC0+bWF4X3JlY3Zfd3IgPSBh dHRyLT5jYXAubWF4X3JlY3Zfd3I7CisJY21kLT5tYXhfcmVjdl9zZ2UgPSBhdHRyLT5jYXAubWF4 X3JlY3Zfc2dlOworCWNtZC0+cmVjdl9jcW4gPSB0b192Y3EoYXR0ci0+cmVjdl9jcSktPmNxX2hh bmRsZTsKKwljbWQtPm1heF9pbmxpbmVfZGF0YSA9IGF0dHItPmNhcC5tYXhfaW5saW5lX2RhdGE7 CisKKwlzZ19pbml0X29uZSgmaW5fc2dzLCBjbWQsIHNpemVvZigqY21kKSk7CisJc2dfaW5pdF9v bmUoJm91dF9zZ3MsIHJzcCwgc2l6ZW9mKCpyc3ApKTsKKworCS8qIEV4ZWN1dGUgQ1JFQVRFX1FQ IHZlcmIgb3ZlciBjb250cm9sIHZpcnRxdWV1ZSAqLworCXJjID0gdnJkbWFfZXhlY192ZXJic19j bWQodmRldiwgVklSVElPX1JETUFfQ01EX0NSRUFURV9RUCwKKwkJCQkgICZpbl9zZ3MsICZvdXRf c2dzKTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycigmdmRldi0+dmRldi0+ZGV2LCAiQ1JFQVRFX1FQ IGNtZCBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyX2V4ZWNf Y21kOworCX0KKworCS8qIEluaXRpYWxpemUgc29mdHdhcmUgUVAgc3RhdGUgKi8KKwl2cXAtPnR5 cGUgPSB1ZGF0YSA/IFZJUlRJT19SRE1BX1RZUEVfVVNFUiA6IFZJUlRJT19SRE1BX1RZUEVfS0VS TkVMOworCXZxcC0+cG9ydCA9IGF0dHItPnBvcnRfbnVtOworCXZxcC0+cXBfaGFuZGxlID0gcnNw LT5xcG47CisJaWJxcC0+cXBfbnVtID0gcnNwLT5xcG47CisKKwl2cW4gPSByc3AtPnFwbjsKKwl2 cXAtPnNxID0gJnZkZXYtPnFwX3Zxc1t2cW4gKiAyXTsKKwl2cXAtPnJxID0gJnZkZXYtPnFwX3Zx c1t2cW4gKiAyICsgMV07CisKKwkvKiBJZiB0aGlzIGlzIGEgdXNlci1zcGFjZSBRUCwgc2V0IHVw IG1tYXAtYWJsZSBtZW1vcnkgcmVnaW9ucyAqLworCWlmICh1ZGF0YSkgeworCQlzdHJ1Y3QgdnJk bWFfY3JlYXRlX3FwX3VyZXNwIHVyZXNwID0ge307CisJCXN0cnVjdCB2cmRtYV91Y29udGV4dCAq dWN0eCA9IHJkbWFfdWRhdGFfdG9fZHJ2X2NvbnRleHQoCisJCQl1ZGF0YSwgc3RydWN0IHZyZG1h X3Vjb250ZXh0LCBpYnVjb250ZXh0KTsKKwkJdWludDMyX3QgcGVyX3dxZV9zaXplOworCisJCS8q IEFsbG9jYXRlIFNRIGJ1ZmZlciBhcmVhICovCisJCXBlcl93cWVfc2l6ZSA9IHNpemVvZihzdHJ1 Y3QgdnJkbWFfY21kX3Bvc3Rfc2VuZCkgKworCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdnJkbWFf c2dlKSAqIGF0dHItPmNhcC5tYXhfc2VuZF9zZ2U7CisJCXZxcC0+dXNxX2J1Zl9zaXplID0gUEFH RV9BTElHTihwZXJfd3FlX3NpemUgKiBhdHRyLT5jYXAubWF4X3NlbmRfd3IpOworCisJCXZxcC0+ dXNxX2J1ZiA9IHZyZG1hX2luaXRfbW1hcF9lbnRyeSh2ZGV2LCB2cXAtPnNxLT52cSwKKwkJCQkJ CSAgICAgJnZxcC0+c3FfZW50cnksCisJCQkJCQkgICAgIHZxcC0+dXNxX2J1Zl9zaXplLAorCQkJ CQkJICAgICB1Y3R4LAorCQkJCQkJICAgICAmdXJlc3Auc3FfbW1hcF9zaXplLAorCQkJCQkJICAg ICAmdXJlc3Auc3ZxX3VzZWRfaWR4X29mZiwKKwkJCQkJCSAgICAgJnVyZXNwLnN2cV9yaW5nX3Np emUsCisJCQkJCQkgICAgICZ2cXAtPnVzcV9kbWFfYWRkcik7CisJCWlmICghdnFwLT51c3FfYnVm KSB7CisJCQlkZXZfZXJyKCZ2ZGV2LT52ZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdCBTUSBtbWFw IGVudHJ5XG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9tbWFwX3NxOworCQl9 CisKKwkJLyogQWxsb2NhdGUgUlEgYnVmZmVyIGFyZWEgKi8KKwkJcGVyX3dxZV9zaXplID0gc2l6 ZW9mKHN0cnVjdCB2cmRtYV9jbWRfcG9zdF9zZW5kKSArCisJCQkgICAgICAgc2l6ZW9mKHN0cnVj dCB2cmRtYV9zZ2UpICogYXR0ci0+Y2FwLm1heF9yZWN2X3NnZTsKKwkJdnFwLT51cnFfYnVmX3Np emUgPSBQQUdFX0FMSUdOKHBlcl93cWVfc2l6ZSAqIGF0dHItPmNhcC5tYXhfcmVjdl93cik7CisK KwkJdnFwLT51cnFfYnVmID0gdnJkbWFfaW5pdF9tbWFwX2VudHJ5KHZkZXYsIHZxcC0+cnEtPnZx LAorCQkJCQkJCSAgICZ2cXAtPnJxX2VudHJ5LAorCQkJCQkJCSAgIHZxcC0+dXJxX2J1Zl9zaXpl LAorCQkJCQkJCSAgIHVjdHgsCisJCQkJCQkJICAgJnVyZXNwLnJxX21tYXBfc2l6ZSwKKwkJCQkJ CQkgICAmdXJlc3AucnZxX3VzZWRfaWR4X29mZiwKKwkJCQkJCQkgICAmdXJlc3AucnZxX3Jpbmdf c2l6ZSwKKwkJCQkJCQkgICAmdnFwLT51cnFfZG1hX2FkZHIpOworCQlpZiAoIXZxcC0+dXJxX2J1 ZikgeworCQkJZGV2X2VycigmdmRldi0+dmRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgUlEgbW1h cCBlbnRyeVxuIik7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJfbW1hcF9ycTsKKwkJ fQorCisJCS8qIEZpbGwgcmVzcG9uc2UgZm9yIHVzZXJzcGFjZSAqLworCQl1cmVzcC5zcV9tbWFw X29mZnNldCA9IHJkbWFfdXNlcl9tbWFwX2dldF9vZmZzZXQoJnZxcC0+c3FfZW50cnktPnJkbWFf ZW50cnkpOworCQl1cmVzcC5zcV9kYl9hZGRyID0gdnFwLT51c3FfZG1hX2FkZHI7CisJCXVyZXNw Lm51bV9zcV93cWVzID0gYXR0ci0+Y2FwLm1heF9zZW5kX3dyOworCQl1cmVzcC5udW1fc3ZxZSA9 IHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2cXAtPnNxLT52cSk7CisJCXVyZXNwLnNxX2hlYWRf aWR4ID0gdnFwLT5zcS0+dnEtPmluZGV4OworCisJCXVyZXNwLnJxX21tYXBfb2Zmc2V0ID0gcmRt YV91c2VyX21tYXBfZ2V0X29mZnNldCgmdnFwLT5ycV9lbnRyeS0+cmRtYV9lbnRyeSk7CisJCXVy ZXNwLnJxX2RiX2FkZHIgPSB2cXAtPnVycV9kbWFfYWRkcjsKKwkJdXJlc3AubnVtX3JxX3dxZXMg PSBhdHRyLT5jYXAubWF4X3JlY3Zfd3I7CisJCXVyZXNwLm51bV9ydnFlID0gdmlydHF1ZXVlX2dl dF92cmluZ19zaXplKHZxcC0+cnEtPnZxKTsKKwkJdXJlc3AucnFfaGVhZF9pZHggPSB2cXAtPnJx LT52cS0+aW5kZXg7CisKKwkJdXJlc3Aubm90aWZpZXJfc2l6ZSA9IHZkZXYtPmZhc3RfZG9vcmJl bGwgPyBQQUdFX1NJWkUgOiAwOworCQl1cmVzcC5xcF9oYW5kbGUgPSB2cXAtPnFwX2hhbmRsZTsK KworCQlpZiAodWRhdGEtPm91dGxlbiA8IHNpemVvZih1cmVzcCkpIHsKKwkJCWRldl9kYmcoJnZk ZXYtPnZkZXYtPmRldiwgInVzZXIgb3V0bGVuIHRvbyBzbWFsbDogJXp1IDwgJXp1XG4iLAorCQkJ CXVkYXRhLT5vdXRsZW4sIHNpemVvZih1cmVzcCkpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdv dG8gZXJyX2NvcHlfdWRhdGE7CisJCX0KKworCQlyYyA9IGliX2NvcHlfdG9fdWRhdGEodWRhdGEs ICZ1cmVzcCwgc2l6ZW9mKHVyZXNwKSk7CisJCWlmIChyYykgeworCQkJZGV2X2VycigmdmRldi0+ dmRldi0+ZGV2LCAiZmFpbGVkIHRvIGNvcHkgdWRhdGEgdG8gdXNlcnNwYWNlXG4iKTsKKwkJCXJl dCA9IHJjOworCQkJZ290byBlcnJfY29weV91ZGF0YTsKKwkJfQorCX0KKworCS8qIENsZWFudXAg YW5kIHJldHVybiBzdWNjZXNzICovCisJa2ZyZWUoY21kKTsKKwlrZnJlZShyc3ApOworCXJldHVy biAwOworCitlcnJfY29weV91ZGF0YToKKwlkbWFfZnJlZV9jb2hlcmVudCh2ZGV2LT52ZGV2LT5k ZXYucGFyZW50LCB2cXAtPnVycV9idWZfc2l6ZSwKKwkJCSAgdnFwLT51cnFfYnVmLCB2cXAtPnVy cV9kbWFfYWRkcik7CisJcmRtYV91c2VyX21tYXBfZW50cnlfcmVtb3ZlKCZ2cXAtPnJxX2VudHJ5 LT5yZG1hX2VudHJ5KTsKKworZXJyX21tYXBfcnE6CisJZG1hX2ZyZWVfY29oZXJlbnQodmRldi0+ dmRldi0+ZGV2LnBhcmVudCwgdnFwLT51c3FfYnVmX3NpemUsCisJCQkgIHZxcC0+dXNxX2J1Ziwg dnFwLT51c3FfZG1hX2FkZHIpOworCXJkbWFfdXNlcl9tbWFwX2VudHJ5X3JlbW92ZSgmdnFwLT5z cV9lbnRyeS0+cmRtYV9lbnRyeSk7CisKK2Vycl9tbWFwX3NxOgorCWtmcmVlKHZxcCk7CisKK2Vy cl9leGVjX2NtZDoKKwlrZnJlZShyc3ApOworCitlcnJfYWxsb2NfcnNwOgorCWtmcmVlKGNtZCk7 CisKK2Vycl9hbGxvY19jbWQ6CisJYXRvbWljX2RlYygmdmRldi0+bnVtX3FwKTsKKwlyZXR1cm4g cmV0OworfQorCisvKioKKyAqIHZyZG1hX2Rlc3Ryb3lfcXAgLSBEZXN0cm95IGEgVmlydGlvLVJE TUEgUXVldWUgUGFpciAoUVApCisgKiBAaWJxcDoJUG9pbnRlciB0byB0aGUgSUIgUVAgdG8gZGVz dHJveQorICogQHVkYXRhOglVc2VyIGRhdGEgY29udGV4dCAobWF5IGJlIE5VTEwgZm9yIGtlcm5l bCBRUHMpCisgKgorICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBhIFFQIGJvdGggaW4gdGhlIGhv c3QgZHJpdmVyIGFuZCBvbiB0aGUgYmFja2VuZAorICogdlJETUEgZGV2aWNlLiBJdCBwZXJmb3Jt cyB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICogICAxLiBTZW5kcyBhIFZJUlRJT19SRE1BX0NNRF9E RVNUUk9ZX1FQIGNvbW1hbmQgdG8gdGhlIGRldmljZS4KKyAqICAgMi4gRnJlZXMgRE1BLWNvaGVy ZW50IG1lbW9yeSB1c2VkIGZvciB1c2VyLXNwYWNlIFdRRSBidWZmZXJzLgorICogICAzLiBSZW1v dmVzIG1tYXAgZW50cmllcyBmb3IgU1EvUlEgcmluZ3MuCisgKiAgIDQuIERlY3JlbWVudHMgZ2xv YmFsIFFQIGNvdW50LgorICoKKyAqIENvbnRleHQ6IENhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQu IE1heSBzbGVlcC4KKyAqIFJldHVybjoKKyAqICogMCBvbiBzdWNjZXNzCisgKiAqIE5lZ2F0aXZl IGVycm5vIG9uIGZhaWx1cmUgKGUuZy4sIGNvbW11bmljYXRpb24gZXJyb3Igd2l0aCBkZXZpY2Up CisgKi8KK3N0YXRpYyBpbnQgdnJkbWFfZGVzdHJveV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0 cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IHZyZG1hX2RldiAqdmRldiA9IHRvX3Zk ZXYoaWJxcC0+ZGV2aWNlKTsKKwlzdHJ1Y3QgdnJkbWFfcXAgKnZxcCA9IHRvX3ZxcChpYnFwKTsK KwlzdHJ1Y3QgdnJkbWFfY21kX2Rlc3Ryb3lfcXAgKmNtZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qg aW47CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwp OworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+cXBuID0gdnFwLT5xcF9o YW5kbGU7CisJc2dfaW5pdF9vbmUoJmluLCBjbWQsIHNpemVvZigqY21kKSk7CisKKwkvKiBTZW5k IERFU1RST1lfUVAgY29tbWFuZCB0byB0aGUgYmFja2VuZCBkZXZpY2UgKi8KKwlyYyA9IHZyZG1h X2V4ZWNfdmVyYnNfY21kKHZkZXYsIFZJUlRJT19SRE1BX0NNRF9ERVNUUk9ZX1FQLCAmaW4sIE5V TEwpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZ2ZGV2LT52ZGV2LT5kZXYsICJERVNUUk9ZX1FQ IGZhaWxlZCBmb3IgcXBuPSV1OiAlZFxuIiwKKwkJCXZxcC0+cXBfaGFuZGxlLCByYyk7CisJCS8q CisJCSAqIEV2ZW4gaWYgdGhlIGRldmljZSBjb21tYW5kIGZhaWxzLCB3ZSBzdGlsbCBwcm9jZWVk IHRvIGZyZWUKKwkJICogbG9jYWwgcmVzb3VyY2VzIGJlY2F1c2UgdGhlIFFQIGlzIGJlaW5nIGRl c3Ryb3llZCBmcm9tIHRoZQorCQkgKiBzb2Z0d2FyZSBzaWRlIHJlZ2FyZGxlc3MuCisJCSAqLwor CX0KKworCS8qIENsZWFuIHVwIHVzZXItc3BhY2UgbWFwcGluZ3MgaWYgdGhpcyBpcyBhIHVzZXIg UVAgKi8KKwlpZiAodWRhdGEpIHsKKwkJLyogRnJlZSBTZW5kIFF1ZXVlIGJ1ZmZlciAqLworCQlp ZiAodnFwLT51c3FfYnVmKSB7CisJCQlkbWFfZnJlZV9jb2hlcmVudCh2ZGV2LT52ZGV2LT5kZXYu cGFyZW50LAorCQkJCQkgIHZxcC0+dXNxX2J1Zl9zaXplLAorCQkJCQkgIHZxcC0+dXNxX2J1ZiwK KwkJCQkJICB2cXAtPnVzcV9kbWFfYWRkcik7CisJCQlyZG1hX3VzZXJfbW1hcF9lbnRyeV9yZW1v dmUoJnZxcC0+c3FfZW50cnktPnJkbWFfZW50cnkpOworCQl9CisKKwkJLyogRnJlZSBSZWNlaXZl IFF1ZXVlIGJ1ZmZlciAqLworCQlpZiAodnFwLT51cnFfYnVmKSB7CisJCQlkbWFfZnJlZV9jb2hl cmVudCh2ZGV2LT52ZGV2LT5kZXYucGFyZW50LAorCQkJCQkgIHZxcC0+dXJxX2J1Zl9zaXplLAor CQkJCQkgIHZxcC0+dXJxX2J1ZiwKKwkJCQkJICB2cXAtPnVycV9kbWFfYWRkcik7CisJCQlyZG1h X3VzZXJfbW1hcF9lbnRyeV9yZW1vdmUoJnZxcC0+cnFfZW50cnktPnJkbWFfZW50cnkpOworCQl9 CisJfQorCisJLyogRGVjcmVtZW50IGdsb2JhbCBRUCBjb3VudGVyICovCisJYXRvbWljX2RlYygm dmRldi0+bnVtX3FwKTsKKworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgdnJkbWFfZGV2X29wcyA9IHsKIAkub3duZXIgPSBU SElTX01PRFVMRSwKIAkudXZlcmJzX2FiaV92ZXIgPSBWSVJUSU9fUkRNQV9BQklfVkVSU0lPTiwK IAkuZHJpdmVyX2lkID0gUkRNQV9EUklWRVJfVklSVElPLAorCisJLmdldF9wb3J0X2ltbXV0YWJs ZSA9IHZyZG1hX3BvcnRfaW1tdXRhYmxlLAorCS5xdWVyeV9kZXZpY2UgPSB2cmRtYV9xdWVyeV9k ZXZpY2UsCisJLnF1ZXJ5X3BvcnQgPSB2cmRtYV9xdWVyeV9wb3J0LAorCS5nZXRfbmV0ZGV2ID0g dnJkbWFfZ2V0X25ldGRldiwKKwkuY3JlYXRlX2NxID0gdnJkbWFfY3JlYXRlX2NxLAorCS5kZXN0 cm95X2NxID0gdnJkbWFfZGVzdHJveV9jcSwKKwkuYWxsb2NfcGQgPSB2cmRtYV9hbGxvY19wZCwK KwkuZGVhbGxvY19wZCA9IHZyZG1hX2RlYWxsb2NfcGQsCisJLmNyZWF0ZV9xcCA9IHZyZG1hX2Ny ZWF0ZV9xcCwKKwkuZGVzdHJveV9xcCA9IHZyZG1hX2Rlc3Ryb3lfcXAsCiB9OwogCiAvKioKQEAg LTE5NSw0MSArMTEzMSwzMiBAQCBpbnQgdnJkbWFfcmVnaXN0ZXJfaWJfZGV2aWNlKHN0cnVjdCB2 cmRtYV9kZXYgKnZyZGV2KQogCWliZGV2LT5ub2RlX3R5cGUgPSBSRE1BX05PREVfSUJfQ0E7CiAJ c3RybmNweShpYmRldi0+bm9kZV9kZXNjLCAiVmlydElPIFJETUEiLCBzaXplb2YoaWJkZXYtPm5v ZGVfZGVzYykpOwogCi0JaWJkZXYtPnBoeXNfcG9ydF9jbnQgPSAxOwkJIC8qIEFzc3VtZSBzaW5n bGUgcG9ydCAqLwotCWliZGV2LT5udW1fY29tcF92ZWN0b3JzID0gMTsJICAvKiBPbmUgY29tcGxl dGlvbiB2ZWN0b3IgKi8KKwlpYmRldi0+cGh5c19wb3J0X2NudCA9IDE7CQkvKiBBc3N1bWUgc2lu Z2xlIHBvcnQgKi8KKwlpYmRldi0+bnVtX2NvbXBfdmVjdG9ycyA9IDE7CS8qIE9uZSBjb21wbGV0 aW9uIHZlY3RvciAqLwogCi0JLyogU2V0IEdVSUQ6IFVzZSBNQUMtbGlrZSBpZGVudGlmaWVyIGRl cml2ZWQgZnJvbSBkZXZpY2UgaW5mbyAoZXhhbXBsZSkgKi8KLQltZW1jcHkoJmliZGV2LT5ub2Rl X2d1aWQsIHZyZGV2LT52ZGV2LT5pZC5kZXZpY2UsIDYpOwotCSoodTY0ICopJmliZGV2LT5ub2Rl X2d1aWQgfD0gMHgwMjAwMDAgPDwgMjQ7IC8qIE1ha2UgbG9jYWxseSBhZG1pbmlzdGVyZWQgKi8K LQotCS8qIC0tLSBTdGVwIDI6IFNldCB1c2VyIHZlcmJzIGNvbW1hbmQgbWFzayAtLS0gKi8KLQot CWliZGV2LT51dmVyYnNfY21kX21hc2sgPQotCQlCSVRfVUxMKElCX1VTRVJfVkVSQlNfQ01EX0dF VF9DT05URVhUKSB8Ci0JCUJJVF9VTEwoSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NPTVBfQ0hB Tk5FTCkgfAotCQlCSVRfVUxMKElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX0RFVklDRSkgfAotCQlC SVRfVUxMKElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1BPUlQpIHwKLQkJQklUX1VMTChJQl9VU0VS X1ZFUkJTX0NNRF9BTExPQ19QRCkgfAotCQlCSVRfVUxMKElCX1VTRVJfVkVSQlNfQ01EX0RFQUxM T0NfUEQpIHwKLQkJQklUX1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfUVApIHwKLQkJQklU X1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfUVApIHwKLQkJQklUX1VMTChJQl9VU0VSX1ZF UkJTX0NNRF9RVUVSWV9RUCkgfAotCQlCSVRfVUxMKElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lf UVApIHwKLQkJQklUX1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1NFTkQpIHwKLQkJQklUX1VM TChJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1JFQ1YpIHwKLQkJQklUX1VMTChJQl9VU0VSX1ZFUkJT X0NNRF9DUkVBVEVfQ1EpIHwKLQkJQklUX1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0NR KSB8Ci0JCUJJVF9VTEwoSUJfVVNFUl9WRVJCU19DTURfUE9MTF9DUSkgfAotCQlCSVRfVUxMKElC X1VTRVJfVkVSQlNfQ01EX1JFUV9OT1RJRllfQ1EpIHwKLQkJQklUX1VMTChJQl9VU0VSX1ZFUkJT X0NNRF9SRUdfTVIpIHwKLQkJQklUX1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9ERVJFR19NUikgfAot CQlCSVRfVUxMKElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9BSCkgfAotCQlCSVRfVUxMKElCX1VT RVJfVkVSQlNfQ01EX01PRElGWV9BSCkgfAotCQlCSVRfVUxMKElCX1VTRVJfVkVSQlNfQ01EX1FV RVJZX0FIKSB8Ci0JCUJJVF9VTEwoSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9BSCk7CisJQklU X1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ09NUF9DSEFOTkVMKSB8CisJQklUX1VMTChJ Ql9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9QT1JUKSB8CisJQklUX1VMTChJQl9VU0VSX1ZFUkJTX0NN RF9BTExPQ19QRCkgfAorCUJJVF9VTEwoSUJfVVNFUl9WRVJCU19DTURfREVBTExPQ19QRCkgfAor CUJJVF9VTEwoSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1FQKSB8CisJQklUX1VMTChJQl9VU0VS X1ZFUkJTX0NNRF9NT0RJRllfUVApIHwKKwlCSVRfVUxMKElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZ X1FQKSB8CisJQklUX1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1FQKSB8CisJQklUX1VM TChJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1NFTkQpIHwKKwlCSVRfVUxMKElCX1VTRVJfVkVSQlNf Q01EX1BPU1RfUkVDVikgfAorCUJJVF9VTEwoSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NRKSB8 CisJQklUX1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0NRKSB8CisJQklUX1VMTChJQl9V U0VSX1ZFUkJTX0NNRF9QT0xMX0NRKSB8CisJQklUX1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9SRVFf Tk9USUZZX0NRKSB8CisJQklUX1VMTChJQl9VU0VSX1ZFUkJTX0NNRF9SRUdfTVIpIHwKKwlCSVRf VUxMKElCX1VTRVJfVkVSQlNfQ01EX0RFUkVHX01SKSB8CisJQklUX1VMTChJQl9VU0VSX1ZFUkJT X0NNRF9DUkVBVEVfQUgpIHwKKwlCSVRfVUxMKElCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9BSCkg fAorCUJJVF9VTEwoSUJfVVNFUl9WRVJCU19DTURfUVVFUllfQUgpIHwKKwlCSVRfVUxMKElCX1VT RVJfVkVSQlNfQ01EX0RFU1RST1lfQUgpOwogCiAJLyogLS0tIFN0ZXAgMzogQXR0YWNoIGRldmlj ZSBvcGVyYXRpb24gdmVjdG9ycyAtLS0gKi8KLQlpYl9zZXRfZGV2aWNlX29wcyhpYmRldiwgJnZp cnRpb19yZG1hX2Rldl9vcHMpOworCWliX3NldF9kZXZpY2Vfb3BzKGliZGV2LCAmdnJkbWFfZGV2 X29wcyk7CiAKIAkvKiAtLS0gU3RlcCA0OiBCaW5kIHRvIG5ldGRldiAob3B0aW9uYWwsIGZvciBS b0NFKSAtLS0gKi8KIAlpZiAodnJkZXYtPm5ldGRldikgewpAQCAtMjQ0LDYgKzExNzEsOSBAQCBp bnQgdnJkbWFfcmVnaXN0ZXJfaWJfZGV2aWNlKHN0cnVjdCB2cmRtYV9kZXYgKnZyZGV2KQogCQly ZXR1cm4gcmM7CiAJfQogCisJLyogU2V0IEdVSUQ6IFVzZSBNQUMtbGlrZSBpZGVudGlmaWVyIGRl cml2ZWQgZnJvbSBkZXZpY2UgaW5mbyAoZXhhbXBsZSkgKi8KKwltZW1jcHkoJmliZGV2LT5ub2Rl X2d1aWQsIGliZGV2LT5uYW1lLCA2KTsKKwogCXByX2luZm8oIlN1Y2Nlc3NmdWxseSByZWdpc3Rl cmVkIHZSRE1BIGRldmljZSBhcyAnJXMnXG4iLCBkZXZfbmFtZSgmaWJkZXYtPmRldikpOwogCXJl dHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9o dy92aXJ0aW8vdnJkbWFfaWIuaCBiL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcv dmlydGlvL3ZyZG1hX2liLmgKaW5kZXggYmRiYTVhOWRlLi5iYTg4NTk5YzggMTAwNjQ0Ci0tLSBh L2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2liLmgKKysr IGIvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfaWIuaApA QCAtMTMsNiArMTMsMTIgQEAKIAogI2RlZmluZSBWUkRNQV9DT01NX1RJTUVPVVQgMTAwMDAwMAog CitlbnVtIHZyZG1hX3R5cGUgeworCVZJUlRJT19SRE1BX1RZUEVfVVNFUiwKKwlWSVJUSU9fUkRN QV9UWVBFX0tFUk5FTAorfTsKKworCiBlbnVtIHsKIAlWSVJUSU9fUkRNQV9BVE9NSUNfTk9ORSwK IAlWSVJUSU9fUkRNQV9BVE9NSUNfSENBLApAQCAtNzEsMTIgKzc3LDExMCBAQCBzdHJ1Y3QgdnJk bWFfY3EgewogCXN0cnVjdCB2cmRtYV92cSAqdnE7ICAvKiBWaXJ0cXVldWUgd2hlcmUgQ1FFcyBh cnJpdmUgKi8KIAlzdHJ1Y3QgcmRtYV91c2VyX21tYXBfZW50cnkgKmVudHJ5OyAvKiBGb3IgbW1h cCBzdXBwb3J0IGluIHVzZXJzcGFjZSAqLwogCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3Qgdmly dGlvX3JkbWFfY3FlICpxdWV1ZTsgICAgICAvKiBDUUUgcmluZyBidWZmZXIgKi8KKwlzdHJ1Y3Qg dnJkbWFfY3FlICpxdWV1ZTsgICAgICAvKiBDUUUgcmluZyBidWZmZXIgKi8KIAlzaXplX3QgcXVl dWVfc2l6ZTsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCXUzMiBudW1fY3FlOwogfTsKIAorc3Ry dWN0IHZyZG1hX3BkIHsKKwlzdHJ1Y3QgaWJfcGQgaWJwZDsKKwl1MzIgcGRfaGFuZGxlOworfTsK KworLyoqCisgKiBzdHJ1Y3QgdnJkbWFfcG9ydF9hdHRyIC0gVmlydHVhbCBSRE1BIHBvcnQgYXR0 cmlidXRlcworICogQHN0YXRlOiBQb3J0IHBoeXNpY2FsIHN0YXRlIChlLmcuLCBJQl9QT1JUX0RP V04sIElCX1BPUlRfQUNUSVZFKS4KKyAqIEBtYXhfbXR1OiBNYXhpbXVtIE1UVSBzdXBwb3J0ZWQg YnkgdGhlIHBvcnQuCisgKiBAYWN0aXZlX210dTogQ3VycmVudGx5IGFjdGl2ZSBNVFUuCisgKiBA cGh5c19tdHU6IFBoeXNpY2FsIGxheWVyIE1UVSAodHlwaWNhbGx5IHNhbWUgYXMgYWN0aXZlX210 dSBpbiB2aXJ0dWFsIGRldmljZXMpLgorICogQGdpZF90YmxfbGVuOiBTaXplIG9mIHRoZSBHSUQg dGFibGUgKG51bWJlciBvZiBzdXBwb3J0ZWQgR0lEcykuCisgKiBAcG9ydF9jYXBfZmxhZ3M6IFBv cnQgY2FwYWJpbGl0aWVzIChlLmcuLCBJQl9QT1JUX0NNX1NVUCwgSUJfUE9SVF9JUF9CQVNFRF9H SURTKS4KKyAqIEBtYXhfbXNnX3N6OiBNYXhpbXVtIG1lc3NhZ2Ugc2l6ZSBzdXBwb3J0ZWQuCisg KiBAYmFkX3BrZXlfY250cjogUF9LZXkgdmlvbGF0aW9uIGNvdW50ZXIgKG9wdGlvbmFsIGluIHZp cnR1YWwgZGV2aWNlcykuCisgKiBAcWtleV92aW9sX2NudHI6IFFLZXkgdmlvbGF0aW9uIGNvdW50 ZXIuCisgKiBAcGtleV90YmxfbGVuOiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgUF9LZXkgdGFi bGUuCisgKiBAYWN0aXZlX3dpZHRoOiBDdXJyZW50IGFjdGl2ZSB3aWR0aCAoZS5nLiwgSUJfV0lE VEhfNFgsIElCX1dJRFRIXzFYKS4KKyAqIEBhY3RpdmVfc3BlZWQ6IEN1cnJlbnQgYWN0aXZlIHNw ZWVkIChlLmcuLCBJQl9TUEVFRF8xMF9HQlBTLCBJQl9TUEVFRF8yNV9HQlBTKS4KKyAqIEBwaHlz X3N0YXRlOiBQaHlzaWNhbCBwb3J0IHN0YXRlICh2ZW5kb3Itc3BlY2lmaWMsIG9wdGlvbmFsIGV4 dGVuc2lvbikuCisgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIG9yIGFsaWdu bWVudCBwYWRkaW5nOyBtdXN0IGJlIHplcm9lZC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBtaXJy b3JzIGBzdHJ1Y3QgaWJfcG9ydF9hdHRyYCBmcm9tIDxyZG1hL2liX3ZlcmJzLmg+IGFuZCBpcyB1 c2VkCisgKiB0byBxdWVyeSBwb3J0IHByb3BlcnRpZXMgdmlhIGB2cmRtYV9xdWVyeV9wb3J0KClg IG9wZXJhdGlvbi4KKyAqLworc3RydWN0IHZyZG1hX3BvcnRfYXR0ciB7CisJZW51bSBpYl9wb3J0 X3N0YXRlCXN0YXRlOworCWVudW0gaWJfbXR1CQltYXhfbXR1OworCWVudW0gaWJfbXR1CQlhY3Rp dmVfbXR1OworCXUzMgkJCXBoeXNfbXR1OworCWludAkJCWdpZF90YmxfbGVuOworCXUzMgkJCXBv cnRfY2FwX2ZsYWdzOworCXUzMgkJCW1heF9tc2dfc3o7CisJdTMyCQkJYmFkX3BrZXlfY250cjsK Kwl1MzIJCQlxa2V5X3Zpb2xfY250cjsKKwl1MTYJCQlwa2V5X3RibF9sZW47CisJdTE2CQkJYWN0 aXZlX3NwZWVkOwkKKwl1OAkJCWFjdGl2ZV93aWR0aDsKKwl1OAkJCXBoeXNfc3RhdGU7CisJdTMy CQkJcmVzZXJ2ZWRbMzJdOwkvKiBGb3IgZnV0dXJlIGV4dGVuc2lvbnMgKi8KK30gX19wYWNrZWQ7 CisKK3N0cnVjdCB2cmRtYV91Y29udGV4dCB7CisJc3RydWN0IGliX3Vjb250ZXh0IGlidWNvbnRl eHQ7CisJc3RydWN0IHZyZG1hX2RldiAqZGV2OworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnJkbWFf cXAgLSBWaXJ0dWFsIFJETUEgUXVldWUgUGFpciAoUVApIHByaXZhdGUgZGF0YQorICoKKyAqIFRo aXMgc3RydWN0dXJlIGhvbGRzIGFsbCBkcml2ZXItcHJpdmF0ZSBzdGF0ZSBmb3IgYSBRUCBpbiB0 aGUgdmlydGlvLXJkbWEgZHJpdmVyLgorICogSXQgaXMgYWxsb2NhdGVkIGR1cmluZyBpYl9jcmVh dGVfcXAoKSBhbmQgZnJlZWQgb24gaWJfZGVzdHJveV9xcCgpLgorICovCitzdHJ1Y3QgdnJkbWFf cXAgeworCS8qIFB1YmxpYyBJQiBsYXllciBvYmplY3QgbXVzdCBiZSBmaXJzdCAqLworCXN0cnVj dCBpYl9xcCBpYnFwOworCisJLyogUVAgdHlwZSAoSUJfUVBUX1JDLCBJQl9RUFRfVUQsIGV0Yy4p ICovCisJdTggdHlwZTsKKworCS8qIFBvcnQgbnVtYmVyIHRoaXMgUVAgaXMgYm91bmQgdG8gKHVz dWFsbHkgMSBmb3Igc2luZ2xlLXBvcnQgZGV2aWNlcykgKi8KKwl1OCBwb3J0OworCisJLyogSGFu ZGxlIHVzZWQgYnkgYmFja2VuZCB0byBpZGVudGlmeSB0aGlzIFFQICovCisJdTMyIHFwX2hhbmRs ZTsKKworCS8qIFNlbmQgUXVldWUgKFNRKSByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgdnJkbWFfdnEg KnNxOyAgICAgICAgICAgLyogVmlydHF1ZXVlIGZvciBTUSBvcHMgKi8KKwl2b2lkICp1c3FfYnVm OyAgICAgICAgICAgICAgICAgICAgICAgLyogS2VybmVsLW1hcHBlZCBzZW5kIHF1ZXVlIHJpbmcg Ki8KKwlzaXplX3QgdXNxX2J1Zl9zaXplOyAgICAgICAgICAgICAgICAgLyogU2l6ZSBvZiBTUSBy aW5nIGJ1ZmZlciAqLworCWRtYV9hZGRyX3QgdXNxX2RtYV9hZGRyOyAgICAgICAgICAgICAvKiBE TUEgYWRkcmVzcyBmb3IgY29oZXJlbnQgbWFwcGluZyAqLworCisJLyogUmVjZWl2ZSBRdWV1ZSAo UlEpIHJlc291cmNlcyAqLworCXN0cnVjdCB2cmRtYV92cSAqcnE7ICAgICAgICAgICAvKiBWaXJ0 cXVldWUgZm9yIFJRIG9wcyAqLworCXZvaWQgKnVycV9idWY7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBLZXJuZWwtbWFwcGVkIHJlY2VpdmUgcXVldWUgcmluZyAqLworCXNpemVfdCB1cnFfYnVm X3NpemU7ICAgICAgICAgICAgICAgICAvKiBTaXplIG9mIFJRIHJpbmcgYnVmZmVyICovCisJZG1h X2FkZHJfdCB1cnFfZG1hX2FkZHI7ICAgICAgICAgICAgIC8qIERNQSBhZGRyZXNzIGZvciBjb2hl cmVudCBtYXBwaW5nICovCisKKwkvKiBVc2VyLXNwYWNlIG1tYXAgZW50cmllcyBmb3IgdXNlcnNw YWNlIFFQIGFjY2VzcyAqLworCXN0cnVjdCB2cmRtYV91c2VyX21tYXBfZW50cnkgKnNxX2VudHJ5 OyAvKiBNbWFwIGVudHJ5IGZvciBTUSBidWZmZXIgKi8KKwlzdHJ1Y3QgdnJkbWFfdXNlcl9tbWFw X2VudHJ5ICpycV9lbnRyeTsgLyogTW1hcCBlbnRyeSBmb3IgUlEgYnVmZmVyICovCit9OworCitz dGF0aWMgaW5saW5lIHN0cnVjdCB2cmRtYV9jcSAqdG9fdmNxKHN0cnVjdCBpYl9jcSAqaWJjcSkK K3sKKyAgICAgICByZXR1cm4gY29udGFpbmVyX29mKGliY3EsIHN0cnVjdCB2cmRtYV9jcSwgaWJj cSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZyZG1hX3BkICp0b192cGQoc3RydWN0IGli X3BkICppYnBkKQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJwZCwgc3RydWN0IHZyZG1hX3Bk LCBpYnBkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdnJkbWFfcXAgKnRvX3ZxcChzdHJ1 Y3QgaWJfcXAgKmlicXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYnFwLCBzdHJ1Y3QgdnJk bWFfcXAsIGlicXApOworfQorCiBpbnQgdnJkbWFfcmVnaXN0ZXJfaWJfZGV2aWNlKHN0cnVjdCB2 cmRtYV9kZXYgKnZyZGV2KTsKIHZvaWQgdnJkbWFfdW5yZWdpc3Rlcl9pYl9kZXZpY2Uoc3RydWN0 IHZyZG1hX2RldiAqdnJkZXYpOwogCmRpZmYgLS1naXQgYS9saW51eC02LjE2LjgvZHJpdmVycy9p bmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9tYWluLmMgYi9saW51eC02LjE2LjgvZHJpdmVycy9p bmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9tYWluLmMKaW5kZXggZWEyZjE1NDkxLi45MTEzZmEz YTMgMTAwNjQ0Ci0tLSBhL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlv L3ZyZG1hX21haW4uYworKysgYi9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3Zp cnRpby92cmRtYV9tYWluLmMKQEAgLTI5LDM5ICsyOSwzOSBAQAogICovCiBzdGF0aWMgaW50IHZy ZG1hX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewotICAgIHN0cnVjdCB2cmRt YV9kZXYgKnZyZGV2OwotICAgIGludCByYzsKLQotICAgIC8qIFN0ZXAgMTogQWxsb2NhdGUgSUIg ZGV2aWNlIHN0cnVjdHVyZSB1c2luZyBpYl9jb3JlJ3MgYWxsb2NhdG9yICovCi0gICAgdnJkZXYg PSBpYl9hbGxvY19kZXZpY2UodnJkbWFfZGV2LCBpYl9kZXYpOwotICAgIGlmICghdnJkZXYpIHsK LSAgICAgICAgcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgdlJETUEgZGV2aWNlXG4iKTsKLSAg ICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotCi0gICAgLyogSW5pdGlhbGl6ZSBiYXNpYyBm aWVsZHMgKi8KLSAgICB2cmRldi0+dmRldiA9IHZkZXY7Ci0gICAgdmRldi0+cHJpdiA9IHZyZGV2 OwotCi0gICAgc3Bpbl9sb2NrX2luaXQoJnZyZGV2LT5jdHJsX2xvY2spOwotICAgIHNwaW5fbG9j a19pbml0KCZ2cmRldi0+cGVuZGluZ19tbWFwc19sb2NrKTsKLSAgICBJTklUX0xJU1RfSEVBRCgm dnJkZXYtPnBlbmRpbmdfbW1hcHMpOwotCi0gICAgLyogU3RlcCAyOiBDaGVjayBkb29yYmVsbCBt ZWNoYW5pc20gc3VwcG9ydCAqLwotICAgIGlmICh0b192cF9kZXZpY2UodmRldiktPm1kZXYubm90 aWZ5X29mZnNldF9tdWx0aXBsaWVyICE9IFBBR0VfU0laRSkgewotICAgICAgICBwcl93YXJuKCJu b3RpZnlfb2Zmc2V0X211bHRpcGxpZXI9JXUgIT0gUEFHRV9TSVpFLCBkaXNhYmxpbmcgZmFzdCBk b29yYmVsbFxuIiwKLSAgICAgICAgICAgICAgICB0b192cF9kZXZpY2UodmRldiktPm1kZXYubm90 aWZ5X29mZnNldF9tdWx0aXBsaWVyKTsKLSAgICAgICAgdnJkZXYtPmZhc3RfZG9vcmJlbGwgPSBm YWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICB2cmRldi0+ZmFzdF9kb29yYmVsbCA9IHRydWU7 Ci0gICAgfQotCi0gICAgLyogU3RlcCAzOiBJbml0aWFsaXplIGhhcmR3YXJlIGludGVyZmFjZSAo dmlydHF1ZXVlcykgKi8KLSAgICByYyA9IHZyZG1hX2luaXRfZGV2aWNlKHZyZGV2KTsKLSAgICBp ZiAocmMpIHsKLSAgICAgICAgcHJfZXJyKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB2UkRNQSBkZXZp Y2UgcXVldWVzXG4iKTsKLSAgICAgICAgZ290byBlcnJfZGVhbGxvY19kZXZpY2U7Ci0gICAgfQor CXN0cnVjdCB2cmRtYV9kZXYgKnZyZGV2OworCWludCByYzsKKworCS8qIFN0ZXAgMTogQWxsb2Nh dGUgSUIgZGV2aWNlIHN0cnVjdHVyZSB1c2luZyBpYl9jb3JlJ3MgYWxsb2NhdG9yICovCisJdnJk ZXYgPSBpYl9hbGxvY19kZXZpY2UodnJkbWFfZGV2LCBpYl9kZXYpOworCWlmICghdnJkZXYpIHsK KwkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgdlJETUEgZGV2aWNlXG4iKTsKKwkJcmV0dXJu IC1FTk9NRU07CisJfQorCisJLyogSW5pdGlhbGl6ZSBiYXNpYyBmaWVsZHMgKi8KKwl2cmRldi0+ dmRldiA9IHZkZXY7CisJdmRldi0+cHJpdiA9IHZyZGV2OworCisJc3Bpbl9sb2NrX2luaXQoJnZy ZGV2LT5jdHJsX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZ2cmRldi0+cGVuZGluZ19tbWFwc19s b2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdnJkZXYtPnBlbmRpbmdfbW1hcHMpOworCisJLyogU3Rl cCAyOiBDaGVjayBkb29yYmVsbCBtZWNoYW5pc20gc3VwcG9ydCAqLworCWlmICh0b192cF9kZXZp Y2UodmRldiktPm1kZXYubm90aWZ5X29mZnNldF9tdWx0aXBsaWVyICE9IFBBR0VfU0laRSkgewor CQlwcl93YXJuKCJub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI9JXUgIT0gUEFHRV9TSVpFLCBkaXNh YmxpbmcgZmFzdCBkb29yYmVsbFxuIiwKKwkJCQl0b192cF9kZXZpY2UodmRldiktPm1kZXYubm90 aWZ5X29mZnNldF9tdWx0aXBsaWVyKTsKKwkJdnJkZXYtPmZhc3RfZG9vcmJlbGwgPSBmYWxzZTsK Kwl9IGVsc2UgeworCQl2cmRldi0+ZmFzdF9kb29yYmVsbCA9IHRydWU7CisJfQorCisJLyogU3Rl cCAzOiBJbml0aWFsaXplIGhhcmR3YXJlIGludGVyZmFjZSAodmlydHF1ZXVlcykgKi8KKwlyYyA9 IHZyZG1hX2luaXRfZGV2aWNlKHZyZGV2KTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJGYWlsZWQg dG8gaW5pdGlhbGl6ZSB2UkRNQSBkZXZpY2UgcXVldWVzXG4iKTsKKwkJZ290byBlcnJfZGVhbGxv Y19kZXZpY2U7CisJfQogCiAJcmMgPSB2cmRtYV9pbml0X25ldGRldih2cmRldik7CiAJaWYgKHJj KSB7CkBAIC02OSwyNiArNjksMjYgQEAgc3RhdGljIGludCB2cmRtYV9wcm9iZShzdHJ1Y3Qgdmly dGlvX2RldmljZSAqdmRldikKIAkJZ290byBlcnJfY2xlYW51cF9kZXZpY2U7CiAJfQogCi0gICAg LyogU3RlcCA0OiBSZWdpc3RlciB3aXRoIEluZmluaUJhbmQgY29yZSBsYXllciAqLwotICAgIHJj ID0gdnJkbWFfcmVnaXN0ZXJfaWJfZGV2aWNlKHZyZGV2KTsKLSAgICBpZiAocmMpIHsKLSAgICAg ICAgcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgd2l0aCBJQiBzdWJzeXN0ZW1cbiIpOwotICAg ICAgICBnb3RvIGVycl9jbGVhbnVwX25ldGRldjsKLSAgICB9CisJLyogU3RlcCA0OiBSZWdpc3Rl ciB3aXRoIEluZmluaUJhbmQgY29yZSBsYXllciAqLworCXJjID0gdnJkbWFfcmVnaXN0ZXJfaWJf ZGV2aWNlKHZyZGV2KTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIg d2l0aCBJQiBzdWJzeXN0ZW1cbiIpOworCQlnb3RvIGVycl9jbGVhbnVwX25ldGRldjsKKwl9CiAK LSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogZXJyX2NsZWFudXBfbmV0ZGV2OgogCXZyZG1h X2ZpbmlzaF9uZXRkZXYodnJkZXYpOwogCiBlcnJfY2xlYW51cF9kZXZpY2U6Ci0gICAgdnJkbWFf ZmluaXNoX2RldmljZSh2cmRldik7ICAvKiBTYWZlIGNsZWFudXAgb2YgcXVldWVzIGFuZCByZXNl dCAqLworCXZyZG1hX2ZpbmlzaF9kZXZpY2UodnJkZXYpOyAgLyogU2FmZSBjbGVhbnVwIG9mIHF1 ZXVlcyBhbmQgcmVzZXQgKi8KIAogZXJyX2RlYWxsb2NfZGV2aWNlOgotICAgIGliX2RlYWxsb2Nf ZGV2aWNlKCZ2cmRldi0+aWJfZGV2KTsgIC8qIEZyZWVzIHZyZGV2IGl0c2VsZiAqLworCWliX2Rl YWxsb2NfZGV2aWNlKCZ2cmRldi0+aWJfZGV2KTsgIC8qIEZyZWVzIHZyZGV2IGl0c2VsZiAqLwog CXZkZXYtPnByaXYgPSBOVUxMOwogCi0gICAgcmV0dXJuIHJjOworCXJldHVybiByYzsKIH0KIAog c3RhdGljIHZvaWQgdnJkbWFfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQpkaWZm IC0tZ2l0IGEvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFf bW1hcC5oIGIvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFf bW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uYWNhZDQ2MjZjCi0t LSAvZGV2L251bGwKKysrIGIvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0 aW8vdnJkbWFfbW1hcC5oCkBAIC0wLDAgKzEsODggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wIG9yIEJTRC0zLUNsYXVzZQorCisvKiBBdXRob3JzOiBYaW9uZyBXZWltaW4g PHhpb25nd2VpbWluQGt5bGlub3MuY24+ICovCisvKiBDb3B5cmlnaHQgMjAyMC5reWxpbm9zLmNu LkFsbCBSaWdodHMgUmVzZXJ2ZWQuKi8KKyNpZm5kZWYgX19WUkRNQV9NTUFQX0hfXworI2RlZmlu ZSBfX1ZSRE1BX01NQVBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUg PGxpbnV4L2tyZWYuaD4KKworLyogTW1hcCB0eXBlIGRlZmluaXRpb25zIGZvciB2aXJ0aW8tcmRt YSAqLworI2RlZmluZSBWUkRNQV9NTUFQX0NRICAxICAvKiBNYXBwaW5nIGZvciBDb21wbGV0aW9u IFF1ZXVlIChDUSkgKi8KKyNkZWZpbmUgVlJETUFfTU1BUF9RUCAgMiAgLyogTWFwcGluZyBmb3Ig UXVldWUgUGFpciAoUVApICovCisKKy8qKgorICogc3RydWN0IHZyZG1hX3VzZXJfbW1hcF9lbnRy eSAtIFByaXZhdGUgZXh0ZW5zaW9uIG9mIFJETUEgdXNlciBtbWFwIGVudHJ5CisgKgorICogVGhp cyBzdHJ1Y3R1cmUgZXh0ZW5kcyB0aGUgZ2VuZXJpYyAnc3RydWN0IHJkbWFfdXNlcl9tbWFwX2Vu dHJ5JyB0byBjYXJyeQorICogZHJpdmVyLXNwZWNpZmljIGRhdGEgZm9yIHZpcnRpby1yZG1hLiBJ dCBpcyB1c2VkIHdoZW4gcmVnaXN0ZXJpbmcgbW1hcAorICogcmVnaW9ucyB0aGF0IGFsbG93IHVz ZXJzcGFjZSB0byBkaXJlY3RseSBhY2Nlc3MgaGFyZHdhcmUgcmluZ3Mgb3IgYnVmZmVycworICog dmlhIG1lbW9yeSBtYXBwaW5nIChlLmcuLCBDUSBvciBRUCBjb250ZXh0IHJpbmdzKS4KKyAqCisg KiBAcmRtYV9lbnRyeTogVGhlIGJhc2UgUkRNQSBjb3JlIG1tYXAgZW50cnk7IG11c3QgYmUgdGhl IGZpcnN0IG1lbWJlcgorICogICAgICAgICAgICAgIHRvIGVuc3VyZSBwcm9wZXIgY29udGFpbmVy X29mKCkgcmVzb2x1dGlvbiBhbmQgY29tcGF0aWJpbGl0eQorICogICAgICAgICAgICAgIHdpdGgg UkRNQSBzdWJzeXN0ZW0gQVBJcy4KKyAqIEB0eXBlOiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgbWFw cGVkIHJlc291cmNlIChWUkRNQV9NTUFQX0NRIG9yCisgKiAgICAgICAgVklSVElPX1JETUFfTU1B UF9RUCkuIFVzZWQgaW4gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZXJtaW5lIGJlaGF2aW9yLgorICog QHZxOiBQb2ludGVyIHRvIHRoZSBhc3NvY2lhdGVkIHZpcnRxdWV1ZS4gVGhpcyBhbGxvd3MgdGhl IGRyaXZlciB0byBsaW5rCisgKiAgICAgIHRoZSBtbWFwIHJlZ2lvbiB3aXRoIGEgc3BlY2lmaWMg dmlydHVhbCBxdWV1ZSBmb3IgZXZlbnQgcHJvY2Vzc2luZworICogICAgICBvciBkb29yYmVsbCBo YW5kbGluZy4KKyAqIEB1YnVmOiBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHVzZXItc3BhY2UgYnVm ZmVyIChvcHRpb25hbCkuIENhbiBiZSB1c2VkCisgKiAgICAgICAgdG8gbWFwIGtlcm5lbC1tYW5h Z2VkIHJpbmcgYnVmZmVycyBpbnRvIHVzZXIgc3BhY2UsIGFsbG93aW5nIGRpcmVjdAorICogICAg ICAgIGFjY2VzcyB3aXRob3V0IHN5c3RlbSBjYWxscy4KKyAqIEB1YnVmX3NpemU6IFNpemUgb2Yg dGhlIHVzZXIgYnVmZmVyIGluIGJ5dGVzLiBVc2VkIGZvciBib3VuZHMgY2hlY2tpbmcKKyAqICAg ICAgICAgICAgIGR1cmluZyBtYXBwaW5nIGFuZCBmYXVsdCBvcGVyYXRpb25zLgorICovCitzdHJ1 Y3QgdnJkbWFfdXNlcl9tbWFwX2VudHJ5IHsKKwlzdHJ1Y3QgcmRtYV91c2VyX21tYXBfZW50cnkg cmRtYV9lbnRyeTsKKwl1OCBtbWFwX3R5cGU7ICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIG9m IG1tYXAgcmVnaW9uIChDUS9RUCkgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsgICAgICAgLyog QXNzb2NpYXRlZCB2aXJ0cXVldWUgcG9pbnRlciAqLworCXZvaWQgKnVzZXJfYnVmOyAgICAgICAg ICAgICAgICAgLyogVXNlciBidWZmZXIgdmlydHVhbCBhZGRyZXNzICovCisJdTY0IHVidWZfc2l6 ZTsgICAgICAgICAgICAgIC8qIFNpemUgb2YgdGhlIG1hcHBlZCB1c2VyIGJ1ZmZlciAqLworfTsK Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgdnJkbWFfdXNlcl9tbWFwX2VudHJ5ICoKK3RvX3ZlbnRy eShzdHJ1Y3QgcmRtYV91c2VyX21tYXBfZW50cnkgKnJkbWFfZW50cnkpCit7CisJcmV0dXJuIGNv bnRhaW5lcl9vZihyZG1hX2VudHJ5LCBzdHJ1Y3QgdnJkbWFfdXNlcl9tbWFwX2VudHJ5LAorCQkJ ICAgIHJkbWFfZW50cnkpOworfQorCisvKioKKyAqIHZpcnRpb19yZG1hX21tYXAgLSBIYW5kbGUg dXNlcnNwYWNlIG1tYXAgcmVxdWVzdCBmb3IgdmlydGlvLXJkbWEgcmVzb3VyY2VzCisgKiBAY29u dGV4dDogVXNlciBjb250ZXh0IGZyb20gSUIgbGF5ZXIKKyAqIEB2bWE6IFZpcnR1YWwgbWVtb3J5 IGFyZWEgdG8gYmUgbWFwcGVkCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4g dXNlcnNwYWNlIGNhbGxzIG1tYXAoKSBvbiBhIHNwZWNpYWwgb2Zmc2V0CisgKiByZXR1cm5lZCBi eSBhbiBpb2N0bCAoZS5nLiwgZHVyaW5nIENRIG9yIFFQIGNyZWF0aW9uKS4gSXQgbWFwcyBkZXZp Y2Utc3BlY2lmaWMKKyAqIG1lbW9yeSByZWdpb25zIChsaWtlIGNvbXBsZXRpb24gcXVldWVzIG9y IHF1ZXVlIHBhaXIgcmluZ3MpIGludG8gdXNlciBzcGFjZQorICogZm9yIHplcm8tY29weSBhY2Nl c3MuCisgKgorICogVGhlIFZNQSdzIHBnb2ZmIGZpZWxkIGNvbnRhaW5zIHRoZSBtbWFwIG9mZnNl dCByZWdpc3RlcmVkIHZpYQorICogcmRtYV91c2VyX21tYXBfZW50cnlfaW5zZXJ0KCkuIFRoaXMg ZnVuY3Rpb24gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIG1tYXAgZW50cnkgYW5kIHNl dHMgdXAgdGhlIGFwcHJvcHJpYXRlIHZtX29wcyBmb3IgcGFnZSBmYXVsdCBoYW5kbGluZy4KKyAq CisgKiBSZXR1cm46CisgKiAtIDAgb24gc3VjY2VzcworICogLSBOZWdhdGl2ZSBlcnJvciBjb2Rl IChlLmcuLCAtRUlOVkFMLCAtRUFHQUlOKSBvbiBmYWlsdXJlCisgKi8KK2ludCB2cmRtYV9tbWFw KHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp OworCisvKioKKyAqIHZpcnRpb19yZG1hX21tYXBfZnJlZSAtIEZyZWUgbW1hcCBlbnRyeSB3aGVu IHVzZXJzcGFjZSB1bm1hcHMgb3IgY2xvc2VzCisgKiBAcmRtYV9lbnRyeTogVGhlIG1tYXAgZW50 cnkgYmVpbmcgcmVsZWFzZWQKKyAqCisgKiBUaGlzIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQgd2l0 aCB0aGUgUkRNQSBjb3JlIHRvIGZyZWUgcHJpdmF0ZSBtbWFwIGVudHJpZXMKKyAqIHdoZW4gdGhl IHVzZXIgcHJvY2VzcyB1bm1hcHMgdGhlIHJlZ2lvbiBvciBleGl0cy4gSXQgaXMgcmVzcG9uc2li bGUgZm9yCisgKiByZWxlYXNpbmcgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1h cHBpbmcgKGUuZy4sIGZyZWVpbmcgbWV0YWRhdGEpLgorICoKKyAqIFRoZSBmdW5jdGlvbiBzaG91 bGQgdXNlICd0b192ZW50cnkoKScgdG8gcmV0cmlldmUgdGhlIHByaXZhdGUgc3RydWN0dXJlLAor ICogdGhlbiBrZnJlZSgpIGl0LiBOb3RlOiBUaGUgYWN0dWFsIG1hcHBlZCBtZW1vcnkgKGUuZy4s IHJpbmcgYnVmZmVyKSBtYXkgYmUKKyAqIGZyZWVkIHNlcGFyYXRlbHkgZGVwZW5kaW5nIG9uIGxp ZmVjeWNsZSBtYW5hZ2VtZW50LgorICoKKyAqIEByZG1hX2VudHJ5OiBQb2ludGVyIHRvIHRoZSBi YXNlIFJETUEgbW1hcCBlbnRyeSAoY29udGFpbmVyIHdpdGhpbiBvdXIgc3RydWN0KQorICovCit2 b2lkIHZyZG1hX21tYXBfZnJlZShzdHJ1Y3QgcmRtYV91c2VyX21tYXBfZW50cnkgKnJkbWFfZW50 cnkpOworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9s aW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9uZXRkZXYuYyBi L2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX25ldGRldi5j CmluZGV4IGU4MzkwMmU2ZC4uMTlkZDlhZjE4IDEwMDY0NAotLS0gYS9saW51eC02LjE2LjgvZHJp dmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9uZXRkZXYuYworKysgYi9saW51eC02LjE2 LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9uZXRkZXYuYwpAQCAtMTYsNjcg KzE2LDY3IEBACiAgKiBAdnJkZXY6IFRoZSB2UkRNQSBkZXZpY2UKICAqCiAgKiBXQVJOSU5HOiBU aGlzIGlzIGEgbm9uLXN0YW5kYXJkIGhhY2sgZm9yIGRldmVsb3BtZW50L2VtdWxhdGlvbiBlbnZp cm9ubWVudHMuCi0gKiAgICAgICAgICBEbyBub3QgdXNlIGluIHByb2R1Y3Rpb24gb3IgdXBzdHJl YW0gZHJpdmVycy4KKyAqCQkJRG8gbm90IHVzZSBpbiBwcm9kdWN0aW9uIG9yIHVwc3RyZWFtIGRy aXZlcnMuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vLgog ICovCiBpbnQgdnJkbWFfaW5pdF9uZXRkZXYoc3RydWN0IHZyZG1hX2RldiAqdnJkZXYpCiB7Ci0g ICAgc3RydWN0IHBjaV9kZXYgKnBkZXZfbmV0OwotICAgIHN0cnVjdCB2aXJ0aW9fcGNpX2Rldmlj ZSAqdnBfZGV2OwotICAgIHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdm5ldF9wZGV2OwotICAg IHZvaWQgKnByaXY7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQotICAgIGlmICgh dnJkZXYgfHwgIXZyZGV2LT52ZGV2KSB7Ci0gICAgICAgIHByX2VycigiJXM6IGludmFsaWQgdnJk ZXYgb3IgdmRldlxuIiwgX19mdW5jX18pOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9 Ci0KLSAgICB2cF9kZXYgPSB0b192cF9kZXZpY2UodnJkZXYtPnZkZXYpOwotCi0gICAgLyogRmlu ZCB0aGUgUENJIGRldmljZSBhdCBmdW5jdGlvbiAwIG9mIHRoZSBzYW1lIHNsb3QgKi8KLSAgICBw ZGV2X25ldCA9IHBjaV9nZXRfc2xvdCh2cF9kZXYtPnBjaV9kZXYtPmJ1cywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQQ0lfREVWRk4oUENJX1NMT1QodnBfZGV2LT5wY2lfZGV2LT5kZXZm biksIDApKTsKLSAgICBpZiAoIXBkZXZfbmV0KSB7Ci0gICAgICAgIHByX2VycigiRmFpbGVkIHRv IGZpbmQgUENJIGRldmljZSBhdCBmbj0wIG9mIHNsb3QgJXhcbiIsCi0gICAgICAgICAgICAgICBQ Q0lfU0xPVCh2cF9kZXYtPnBjaV9kZXYtPmRldmZuKSk7Ci0gICAgICAgIHJldHVybiAtRU5PREVW OwotICAgIH0KLQotICAgIC8qIE9wdGlvbmFsOiBWYWxpZGF0ZSBpdCdzIGEga25vd24gdmlydGlv LW5ldCBkZXZpY2UgKi8KLSAgICBpZiAocGRldl9uZXQtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lE X1JFREhBVF9RVU1SQU5FVCB8fAotICAgICAgICBwZGV2X25ldC0+ZGV2aWNlICE9IDB4MTA0MSkg ewotICAgICAgICBwcl93YXJuKCJQQ0kgZGV2aWNlICUwNHg6JTA0eCBpcyBub3QgZXhwZWN0ZWQg dmlydGlvLW5ldCAoMTA0MSkgZGV2aWNlXG4iLAotICAgICAgICAgICAgICAgIHBkZXZfbmV0LT52 ZW5kb3IsIHBkZXZfbmV0LT5kZXZpY2UpOwotICAgICAgICBwY2lfZGV2X3B1dChwZGV2X25ldCk7 Ci0gICAgICAgIHJldHVybiAtRU5PREVWOwotICAgIH0KLQotICAgIC8qIEdldCB0aGUgdmlydGlv X3BjaV9kZXZpY2UgZnJvbSBkcnZkYXRhICovCi0gICAgdm5ldF9wZGV2ID0gcGNpX2dldF9kcnZk YXRhKHBkZXZfbmV0KTsKLSAgICBpZiAoIXZuZXRfcGRldiB8fCAhdm5ldF9wZGV2LT52ZGV2LnBy aXYpIHsKLSAgICAgICAgcHJfZXJyKCJObyBkcml2ZXIgZGF0YSBvciBwcml2IGZvciB2aXJ0aW8t bmV0IGRldmljZVxuIik7Ci0gICAgICAgIHBjaV9kZXZfcHV0KHBkZXZfbmV0KTsKLSAgICAgICAg cmV0dXJuIC1FTk9ERVY7Ci0gICAgfQotCi0gICAgcHJpdiA9IHZuZXRfcGRldi0+dmRldi5wcml2 OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2X25ldDsKKwlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2Ug KnZwX2RldjsKKwlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZuZXRfcGRldjsKKwl2b2lkICpw cml2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwlpZiAoIXZyZGV2IHx8ICF2cmRl di0+dmRldikgeworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIHZyZGV2IG9yIHZkZXZcbiIsIF9fZnVu Y19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZy ZGV2LT52ZGV2KTsKKworCS8qIEZpbmQgdGhlIFBDSSBkZXZpY2UgYXQgZnVuY3Rpb24gMCBvZiB0 aGUgc2FtZSBzbG90ICovCisJcGRldl9uZXQgPSBwY2lfZ2V0X3Nsb3QodnBfZGV2LT5wY2lfZGV2 LT5idXMsCisJCQkJCQkJUENJX0RFVkZOKFBDSV9TTE9UKHZwX2Rldi0+cGNpX2Rldi0+ZGV2Zm4p LCAwKSk7CisJaWYgKCFwZGV2X25ldCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byBmaW5kIFBDSSBk ZXZpY2UgYXQgZm49MCBvZiBzbG90ICV4XG4iLAorCQkJCVBDSV9TTE9UKHZwX2Rldi0+cGNpX2Rl di0+ZGV2Zm4pKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogT3B0aW9uYWw6IFZhbGlk YXRlIGl0J3MgYSBrbm93biB2aXJ0aW8tbmV0IGRldmljZSAqLworCWlmIChwZGV2X25ldC0+dmVu ZG9yICE9IFBDSV9WRU5ET1JfSURfUkVESEFUX1FVTVJBTkVUIHx8CisJCXBkZXZfbmV0LT5kZXZp Y2UgIT0gMHgxMDQxKSB7CisJCXByX3dhcm4oIlBDSSBkZXZpY2UgJTA0eDolMDR4IGlzIG5vdCBl eHBlY3RlZCB2aXJ0aW8tbmV0ICgxMDQxKSBkZXZpY2VcbiIsCisJCQkJcGRldl9uZXQtPnZlbmRv ciwgcGRldl9uZXQtPmRldmljZSk7CisJCXBjaV9kZXZfcHV0KHBkZXZfbmV0KTsKKwkJcmV0dXJu IC1FTk9ERVY7CisJfQorCisJLyogR2V0IHRoZSB2aXJ0aW9fcGNpX2RldmljZSBmcm9tIGRydmRh dGEgKi8KKwl2bmV0X3BkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldl9uZXQpOworCWlmICghdm5l dF9wZGV2IHx8ICF2bmV0X3BkZXYtPnZkZXYucHJpdikgeworCQlwcl9lcnIoIk5vIGRyaXZlciBk YXRhIG9yIHByaXYgZm9yIHZpcnRpby1uZXQgZGV2aWNlXG4iKTsKKwkJcGNpX2Rldl9wdXQocGRl dl9uZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcml2ID0gdm5ldF9wZGV2LT52ZGV2 LnByaXY7CiAJdnJkZXYtPm5ldGRldiA9IHByaXYgLSBBTElHTihzaXplb2Yoc3RydWN0IG5ldF9k ZXZpY2UpLCBORVRERVZfQUxJR04pOwotICAgIG5ldGRldiA9IHZyZGV2LT5uZXRkZXY7IAorCW5l dGRldiA9IHZyZGV2LT5uZXRkZXY7IAogCi0gICAgaWYgKCFuZXRkZXYgfHwgIW5ldGRldi0+bmV0 ZGV2X29wcykgewotICAgICAgICBwcl9lcnIoIkludmFsaWQgbmV0X2RldmljZSByZXRyaWV2ZWQg ZnJvbSB2aXJ0aW8tbmV0XG4iKTsKLSAgICAgICAgcGNpX2Rldl9wdXQocGRldl9uZXQpOwotICAg ICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9CisJaWYgKCFuZXRkZXYgfHwgIW5ldGRldi0+bmV0 ZGV2X29wcykgeworCQlwcl9lcnIoIkludmFsaWQgbmV0X2RldmljZSByZXRyaWV2ZWQgZnJvbSB2 aXJ0aW8tbmV0XG4iKTsKKwkJcGNpX2Rldl9wdXQocGRldl9uZXQpOworCQlyZXR1cm4gLUVOT0RF VjsKKwl9CiAKLSAgICAvKiBIb2xkIHJlZmVyZW5jZSBzbyBuZXRkZXYgd29uJ3QgZGlzYXBwZWFy ICovCi0gICAgZGV2X2hvbGQobmV0ZGV2KTsKKwkvKiBIb2xkIHJlZmVyZW5jZSBzbyBuZXRkZXYg d29uJ3QgZGlzYXBwZWFyICovCisJZGV2X2hvbGQobmV0ZGV2KTsKIAotICAgIHBjaV9kZXZfcHV0 KHBkZXZfbmV0KTsgIC8qIFJlbGVhc2UgcmVmZXJlbmNlIGZyb20gcGNpX2dldF9zbG90ICovCisJ cGNpX2Rldl9wdXQocGRldl9uZXQpOyAgLyogUmVsZWFzZSByZWZlcmVuY2UgZnJvbSBwY2lfZ2V0 X3Nsb3QgKi8KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTg4LDE4 ICs4OCwxOCBAQCBpbnQgdnJkbWFfaW5pdF9uZXRkZXYoc3RydWN0IHZyZG1hX2RldiAqdnJkZXYp CiAgKi8KIHZvaWQgdnJkbWFfZmluaXNoX25ldGRldihzdHJ1Y3QgdnJkbWFfZGV2ICp2cmRldikK IHsKLSAgICBpZiAoIXZyZGV2KSB7Ci0gICAgICAgIHByX2VycigiJXM6IGludmFsaWQgdnJkZXYg cG9pbnRlclxuIiwgX19mdW5jX18pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg KHZyZGV2LT5uZXRkZXYpIHsKLSAgICAgICAgcHJfaW5mbygiWyVzXTogUmVsZWFzaW5nIHJlZmVy ZW5jZSB0byBuZXRfZGV2aWNlICclcydcbiIsCi0gICAgICAgICAgICAgICAgX19mdW5jX18sIHZy ZGV2LT5uZXRkZXYtPm5hbWUpOwotCi0gICAgICAgIGRldl9wdXQodnJkZXYtPm5ldGRldik7Ci0g ICAgICAgIHZyZGV2LT5uZXRkZXYgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByX2Rl YnVnKCIlczogbm8gbmV0ZGV2IHRvIHJlbGVhc2VcbiIsIF9fZnVuY19fKTsKLSAgICB9CisJaWYg KCF2cmRldikgeworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIHZyZGV2IHBvaW50ZXJcbiIsIF9fZnVu Y19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh2cmRldi0+bmV0ZGV2KSB7CisJCXByX2luZm8o Ilslc106IFJlbGVhc2luZyByZWZlcmVuY2UgdG8gbmV0X2RldmljZSAnJXMnXG4iLAorCQkJCV9f ZnVuY19fLCB2cmRldi0+bmV0ZGV2LT5uYW1lKTsKKworCQlkZXZfcHV0KHZyZGV2LT5uZXRkZXYp OworCQl2cmRldi0+bmV0ZGV2ID0gTlVMTDsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygiJXM6IG5v IG5ldGRldiB0byByZWxlYXNlXG4iLCBfX2Z1bmNfXyk7CisJfQogfQpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQv aHcvdmlydGlvL3ZyZG1hX3F1ZXVlLmMgYi9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5k L2h3L3ZpcnRpby92cmRtYV9xdWV1ZS5jCmluZGV4IDc4Nzc5YzI0My4uNTdjNjM1YWFmIDEwMDY0 NAotLS0gYS9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9x dWV1ZS5jCisrKyBiL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3Zy ZG1hX3F1ZXVlLmMKQEAgLTE4LDQgKzE4LDExNCBAQCB2b2lkIHZyZG1hX2NxX2FjayhzdHJ1Y3Qg dmlydHF1ZXVlICp2cSkKIAogCWlmICh2Y3EgJiYgdmNxLT5pYmNxLmNvbXBfaGFuZGxlcikKIAkJ dmNxLT5pYmNxLmNvbXBfaGFuZGxlcigmdmNxLT5pYmNxLCB2Y3EtPmliY3EuY3FfY29udGV4dCk7 Cit9CisKKy8qKgorICogdnJkbWFfcXBfY2hlY2tfY2FwIC0gVmFsaWRhdGUgUVAgY2FwYWNpdHkg bGltaXRzIGFnYWluc3QgZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEB2ZGV2OiBQb2ludGVyIHRvIHRo ZSB2aXJ0aW8tcmRtYSBkZXZpY2UKKyAqIEBjYXA6IFVzZXItcmVxdWVzdGVkIFFQIGNhcGFiaWxp dGllcworICogQGhhc19zcnE6IFdoZXRoZXIgdGhpcyBRUCBpcyBhc3NvY2lhdGVkIHdpdGggYSBT aGFyZWQgUmVjZWl2ZSBRdWV1ZSAoU1JRKQorICoKKyAqIENoZWNrcyB0aGF0IHRoZSByZXF1ZXN0 ZWQgUVAgY2FwYWNpdGllcyAoV1FFcywgU0dFcykgZG8gbm90IGV4Y2VlZAorICogZGV2aWNlIGxp bWl0cy4gSW5saW5lIGRhdGEgbGltaXQgaXMgY3VycmVudGx5IGlnbm9yZWQuCisgKgorICogUmV0 dXJuOgorICogICAwIGlmIGFsbCBjb25zdHJhaW50cyBhcmUgc2F0aXNmaWVkLCAtRUlOVkFMIG90 aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB2cmRtYV9xcF9jaGVja19jYXAoc3RydWN0IHZyZG1h X2RldiAqdmRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpYl9xcF9jYXAgKmNhcCwgYm9vbCBo YXNfc3JxKQoreworCWlmIChjYXAtPm1heF9zZW5kX3dyID4gdmRldi0+YXR0ci5tYXhfcXBfd3Ip IHsKKwkJZGV2X3dhcm4oJnZkZXYtPnZkZXYtPmRldiwKKwkJCSAiaW52YWxpZCBtYXhfc2VuZF93 ciA9ICV1ID4gJXVcbiIsCisJCQkgY2FwLT5tYXhfc2VuZF93ciwgdmRldi0+YXR0ci5tYXhfcXBf d3IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY2FwLT5tYXhfc2VuZF9zZ2UgPiB2 ZGV2LT5hdHRyLm1heF9zZW5kX3NnZSkgeworCQlkZXZfd2FybigmdmRldi0+dmRldi0+ZGV2LAor CQkJICJpbnZhbGlkIG1heF9zZW5kX3NnZSA9ICV1ID4gJXVcbiIsCisJCQkgY2FwLT5tYXhfc2Vu ZF9zZ2UsIHZkZXYtPmF0dHIubWF4X3NlbmRfc2dlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJLyogT25seSBjaGVjayByZWNlaXZlIHF1ZXVlIHBhcmFtZXRlcnMgaWYgbm8gU1JRIGlzIHVz ZWQgKi8KKwlpZiAoIWhhc19zcnEpIHsKKwkJaWYgKGNhcC0+bWF4X3JlY3Zfd3IgPiB2ZGV2LT5h dHRyLm1heF9xcF93cikgeworCQkJZGV2X3dhcm4oJnZkZXYtPnZkZXYtPmRldiwKKwkJCQkgImlu dmFsaWQgbWF4X3JlY3Zfd3IgPSAldSA+ICV1XG4iLAorCQkJCSBjYXAtPm1heF9yZWN2X3dyLCB2 ZGV2LT5hdHRyLm1heF9xcF93cik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChj YXAtPm1heF9yZWN2X3NnZSA+IHZkZXYtPmF0dHIubWF4X3JlY3Zfc2dlKSB7CisJCQlkZXZfd2Fy bigmdmRldi0+dmRldi0+ZGV2LAorCQkJCSAiaW52YWxpZCBtYXhfcmVjdl9zZ2UgPSAldSA+ICV1 XG4iLAorCQkJCSBjYXAtPm1heF9yZWN2X3NnZSwgdmRldi0+YXR0ci5tYXhfcmVjdl9zZ2UpOwor CQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBUT0RPOiBBZGQgY2hlY2sgZm9yIGlu bGluZSBkYXRhOiBjYXAtPm1heF9pbmxpbmVfZGF0YSA8PSBkZXYtPmF0dHIubWF4X2lubGluZV9k YXRhICovCisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cmRtYV9xcF9jaGVja19pbml0X2F0 dHIgLSBWYWxpZGF0ZSBRUCBpbml0aWFsaXphdGlvbiBhdHRyaWJ1dGVzCisgKiBAdmRldjogVGhl IHZpcnR1YWwgUkRNQSBkZXZpY2UKKyAqIEBpbml0OiBRUCBpbml0aWFsaXphdGlvbiBhdHRyaWJ1 dGVzIGZyb20gdXNlci9rZXJuZWwgc3BhY2UKKyAqCisgKiBQZXJmb3JtcyBzZW1hbnRpYyB2YWxp ZGF0aW9uIG9mIFFQIGNyZWF0aW9uIHBhcmFtZXRlcnMgaW5jbHVkaW5nOgorICogICAtIFN1cHBv cnRlZCBRUCB0eXBlcworICogICAtIFZhbGlkIENRIGJpbmRpbmdzCisgKiAgIC0gUG9ydCBudW1i ZXIgdmFsaWRpdHkgZm9yIHNwZWNpYWwgUVAgdHlwZXMKKyAqICAgLSBDYXBhY2l0eSBsaW1pdHMg dmlhIHZyZG1hX3FwX2NoZWNrX2NhcCgpCisgKgorICogUmV0dXJuOgorICogICAwIG9uIHN1Y2Nl c3MsIG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IHZyZG1hX3FwX2No ZWNrX2luaXQoc3RydWN0IHZyZG1hX2RldiAqdmRldiwKKwkJCWNvbnN0IHN0cnVjdCBpYl9xcF9p bml0X2F0dHIgKmluaXQpCit7CisJY29uc3Qgc3RydWN0IGliX3FwX2NhcCAqY2FwID0gJmluaXQt PmNhcDsKKwl1OCBwb3J0X251bSA9IGluaXQtPnBvcnRfbnVtOworCWludCByZXQ7CisKKwkvKiBD aGVjayBzdXBwb3J0ZWQgUVAgdHlwZXMgKi8KKwlzd2l0Y2ggKGluaXQtPnFwX3R5cGUpIHsKKwlj YXNlIElCX1FQVF9TTUk6CisJY2FzZSBJQl9RUFRfR1NJOgorCWNhc2UgSUJfUVBUX1JDOgorCWNh c2UgSUJfUVBUX1VDOgorCWNhc2UgSUJfUVBUX1VEOgorCQlicmVhazsgLyogU3VwcG9ydGVkICov CisJZGVmYXVsdDoKKwkJZGV2X2RiZygmdmRldi0+dmRldi0+ZGV2LAorCQkJIlFQIHR5cGUgJWQg bm90IHN1cHBvcnRlZFxuIiwgaW5pdC0+cXBfdHlwZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsK Kwl9CisKKwkvKiBTZW5kIGFuZCByZWNlaXZlIENRcyBhcmUgcmVxdWlyZWQgdW5sZXNzIHVzaW5n IFNSUS1vbmx5IHJlY3YgcGF0aCAqLworCWlmICghaW5pdC0+c2VuZF9jcSB8fCAhaW5pdC0+cmVj dl9jcSkgeworCQlkZXZfd2FybigmdmRldi0+dmRldi0+ZGV2LAorCQkJICJtaXNzaW5nIHNlbmQg b3IgcmVjdiBjb21wbGV0aW9uIHF1ZXVlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ LyogVmFsaWRhdGUgUVAgY2FwYWNpdHkgbGltaXRzICovCisJcmV0ID0gdnJkbWFfcXBfY2hlY2tf Y2FwKHZkZXYsIGNhcCwgISFpbml0LT5zcnEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwkvKiBGb3IgU01JL0dTSSBRUHMsIGVuc3VyZSBwb3J0IG51bWJlciBpcyB2YWxpZCAqLworCWlm IChpbml0LT5xcF90eXBlID09IElCX1FQVF9TTUkgfHwgaW5pdC0+cXBfdHlwZSA9PSBJQl9RUFRf R1NJKSB7CisJCWlmICghcmRtYV9pc19wb3J0X3ZhbGlkKCZ2ZGV2LT5pYl9kZXYsIHBvcnRfbnVt KSkgeworCQkJZGV2X3dhcm4oJnZkZXYtPnZkZXYtPmRldiwKKwkJCQkgImludmFsaWQgcG9ydCBu dW1iZXIgJXVcbiIsIHBvcnRfbnVtKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJ cmV0dXJuIDA7CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlu dXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfcXVldWUuaCBiL2xp bnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX3F1ZXVlLmgKaW5k ZXggNjRiODk2MjA4Li5hNDBjMzc2MmYgMTAwNjQ0Ci0tLSBhL2xpbnV4LTYuMTYuOC9kcml2ZXJz L2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX3F1ZXVlLmgKKysrIGIvbGludXgtNi4xNi44L2Ry aXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfcXVldWUuaApAQCAtMTAsNSArMTAsNiBA QAogI2luY2x1ZGUgInZyZG1hX2Rldl9hcGkuaCIKIAogdm9pZCB2cmRtYV9jcV9hY2soc3RydWN0 IHZpcnRxdWV1ZSAqdnEpOwotCitpbnQgdnJkbWFfcXBfY2hlY2tfaW5pdChzdHJ1Y3QgdnJkbWFf ZGV2ICp2ZGV2LAorCQkJICAgICAgICAgICAgY29uc3Qgc3RydWN0IGliX3FwX2luaXRfYXR0ciAq aW5pdCk7CiAjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9s aW51eC02LjE2LjgvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9saW51eC02LjE2LjgvaW5jbHVk ZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggNjM1M2RhMWMwLi5hMTI5ZjFjYzkgMTAwNjQ0Ci0tLSBh L2xpbnV4LTYuMTYuOC9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9saW51eC02LjE2Ljgv aW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTY1OSw2ICs2NTksNyBAQCB2b2lkIHJkbWFfZnJl ZV9od19zdGF0c19zdHJ1Y3Qoc3RydWN0IHJkbWFfaHdfc3RhdHMgKnN0YXRzKTsKICNkZWZpbmUg UkRNQV9DT1JFX0NBUF9QUk9UX1JPQ0VfVURQX0VOQ0FQIDB4MDA4MDAwMDAKICNkZWZpbmUgUkRN QV9DT1JFX0NBUF9QUk9UX1JBV19QQUNLRVQgICAweDAxMDAwMDAwCiAjZGVmaW5lIFJETUFfQ09S RV9DQVBfUFJPVF9VU05JQyAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBSRE1BX0NPUkVfQ0FQ X1BST1RfVklSVElPCQkweDA0MDAwMDAwCiAKICNkZWZpbmUgUkRNQV9DT1JFX1BPUlRfSUJfR1JI X1JFUVVJUkVEIChSRE1BX0NPUkVfQ0FQX0lCX0dSSF9SRVFVSVJFRCBcCiAJCQkJCXwgUkRNQV9D T1JFX0NBUF9QUk9UX1JPQ0UgICAgIFwKQEAgLTY5MCw2ICs2OTEsMTQgQEAgdm9pZCByZG1hX2Zy ZWVfaHdfc3RhdHNfc3RydWN0KHN0cnVjdCByZG1hX2h3X3N0YXRzICpzdGF0cyk7CiAKICNkZWZp bmUgUkRNQV9DT1JFX1BPUlRfVVNOSUMJCShSRE1BX0NPUkVfQ0FQX1BST1RfVVNOSUMpCiAKKy8q IGluIG1vc3QgdGltZSwgUkRNQV9DT1JFX1BPUlRfVklSVElPIGlzIHNhbWUgYXMgUkRNQV9DT1JF X1BPUlRfSUJBX1JPQ0VfVURQX0VOQ0FQICovCisjZGVmaW5lIFJETUFfQ09SRV9QT1JUX1ZJUlRJ TyAgICBcCisgICAgICAgICAgICAgICAgICAgIChSRE1BX0NPUkVfQ0FQX1BST1RfVklSVElPIFwK KwkJCQkJfCBSRE1BX0NPUkVfQ0FQX0lCX01BRCAgXAorCQkJCQl8IFJETUFfQ09SRV9DQVBfSUJf Q00gICBcCisJCQkJCXwgUkRNQV9DT1JFX0NBUF9BRl9JQiAgIFwKKwkJCQkJfCBSRE1BX0NPUkVf Q0FQX0VUSF9BSCkKKwogc3RydWN0IGliX3BvcnRfYXR0ciB7CiAJdTY0CQkJc3VibmV0X3ByZWZp eDsKIAllbnVtIGliX3BvcnRfc3RhdGUJc3RhdGU7Ci0tIAoyLjQzLjAKCg==