From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6233FC4361B for ; Fri, 11 Dec 2020 15:46:50 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C6F1D2333C for ; Fri, 11 Dec 2020 15:46:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C6F1D2333C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=vzeYq9RDpvvNuvpBSz9k+PdQzREXOvcA8J1td+AgNpA=; b=GcOinhJl/3Xs0GmsO73pvSbEH 8ICqOVJRi/6Rz3b8X+AS3/V6Ov/zTSrc7bJekitRxET8WXMOFd4a+OVFqUUjazKEMR1YqLkWYewkA BvJA/KEaKMrlUBUYrX6SswSTDwda2+PBDkDmHSFi/v1xhpS3HbKHyK0DdhPreQMyPMGDMixLbksV6 Eo7fu+H37hjfSoHnpOl2rXK/oY9UaWMuzzauK3mwYMpEwOah2DYYJlqOEKd0Wa64lblAUJAiZst78 1aj/qYZMaUlSzoL/X/eX5iLaSZJwe16Ikb7hmy/NQpcLZSaWF+cmgwvTyRH8ALeAZrTfAdJc1xY2Y a833nQ+wg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1knkbZ-0005Hl-PE; Fri, 11 Dec 2020 15:45:13 +0000 Received: from relay7-d.mail.gandi.net ([217.70.183.200]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1knkb5-00058q-Ce for linux-arm-kernel@lists.infradead.org; Fri, 11 Dec 2020 15:45:06 +0000 X-Originating-IP: 93.29.109.196 Received: from localhost.localdomain (196.109.29.93.rev.sfr.net [93.29.109.196]) (Authenticated sender: paul.kocialkowski@bootlin.com) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 89EAD2000C; Fri, 11 Dec 2020 15:44:40 +0000 (UTC) From: Paul Kocialkowski To: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 2/3] media: i2c: Add support for the OV8865 image sensor Date: Fri, 11 Dec 2020 16:44:27 +0100 Message-Id: <20201211154428.153762-3-paul.kocialkowski@bootlin.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201211154428.153762-1-paul.kocialkowski@bootlin.com> References: <20201211154428.153762-1-paul.kocialkowski@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201211_104443_929029_AB574DC1 X-CRM114-Status: GOOD ( 17.64 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?K=C3=A9vin=20L=27h=C3=B4pital?= , Hans Verkuil , Jernej Skrabec , Thomas Petazzoni , Maxime Ripard , Paul Kocialkowski , Chen-Yu Tsai , Rob Herring , Sakari Ailus , Mauro Carvalho Chehab , kevin.lhopital@hotmail.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhlIE9WODg2NSBpcyBhIDggTXB4IENNT1MgaW1hZ2Ugc2Vuc29yIHByb2R1Y2luZyAzMjY0eDI0 NDggYXQgMzAgZnBzLgpPdGhlciBtb2RlcyAoaW5jbHVkaW5nIHNvbWUgd2l0aCBzdWItc2FtcGxp bmcpIGFyZSBhdmFpbGFibGUgdG9vLgpJdCBvdXRwdXRzIDEwLWJpdCBiYXllciBDRkEgZGF0YSB0 aHJvdWdoIGEgTUlQSSBDU0ktMiBpbnRlcmZhY2Ugd2l0aAp1cCB0byA0IGxhbmVzIHN1cHBvcnRl ZC4KClNvbWUgcmVnaXN0ZXIgaW5pdGlhbGlzYXRpb24gc2VxdWVuY2VzIGFyZSBzdGlsbCBuZWVk ZWQgZm9yIHRoaXMgZHJpdmVyLAphcyB0aGV5IGNvdmVyIHJlZ2lzdGVycyBmb3Igd2hpY2ggbm8g ZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUuCgpUaGlzIHdvcmsgaXMgYmFzZWQgb24gdGhlIGZp cnN0IHZlcnNpb24gb2YgdGhlIGRyaXZlciBzdWJtaXR0ZWQgYnkKS8OpdmluIEwnaMO0cGl0YWws IHdoaWNoIHdhcyBhZGFwdGVkIHRvIG1haW5saW5lIGZyb20gdGhlIEFsbHdpbm5lciBCU1AuClRo aXMgdmVyc2lvbiBpcyBhIHJld3JpdGUgb2YgdGhlIGZpcnN0IHZlcnNpb24gdGhhdCBtYXRjaGVz IHRoZSBzdHJ1Y3R1cmUKb2YgdGhlIE9WNTY0OCBkcml2ZXIsIHdpdGggZXhwbGljaXQgUExMIGNv bmZpZ3VyYXRpb24sIGFsbCB0aGUgbmVjZXNzYXJ5Cm1vZGUtc3BlY2lmaWMgZmllbGRzLCBhc3Nv Y2lhdGllZCByZWdpc3RlcnMgYW5kIHJlZHVjZWQgc3RhdGljIHNlcXVlbmNlcy4KCkl0IHdhcyB0 ZXN0ZWQgd2l0aCB0aGUgQmFuYW5hIFBpIENhbWVyYSBCb2FyZCB2MyBhbmQgdGhlIEJhbmFuYSBQ aSBNMy4KCkNvLWRldmVsb3BlZC1ieTogS8OpdmluIEwnaMO0cGl0YWwgPGtldmluLmxob3BpdGFs QGJvb3RsaW4uY29tPgpTaWduZWQtb2ZmLWJ5OiBLw6l2aW4gTCdow7RwaXRhbCA8a2V2aW4ubGhv cGl0YWxAYm9vdGxpbi5jb20+ClNpZ25lZC1vZmYtYnk6IFBhdWwgS29jaWFsa293c2tpIDxwYXVs LmtvY2lhbGtvd3NraUBib290bGluLmNvbT4KLS0tCiBkcml2ZXJzL21lZGlhL2kyYy9LY29uZmln ICB8ICAgMTMgKwogZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgfCAgICAxICsKIGRyaXZlcnMv bWVkaWEvaTJjL292ODg2NS5jIHwgMjk4MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjk5NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9tZWRpYS9pMmMvb3Y4ODY1LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21l ZGlhL2kyYy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZwppbmRleCBjMDQ3MGE4 YjlhODAuLjZiYzUwNWMxZjE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZp ZworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnCkBAIC0xMDQ2LDYgKzEwNDYsMTkgQEAg Y29uZmlnIFZJREVPX09WODg1NgogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVs ZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3Y4ODU2Lgog Citjb25maWcgVklERU9fT1Y4ODY1CisJdHJpc3RhdGUgIk9tbmlWaXNpb24gT1Y4ODY1IHNlbnNv ciBzdXBwb3J0IgorCWRlcGVuZHMgb24gSTJDICYmIFBNICYmIFZJREVPX1Y0TDIKKwlzZWxlY3Qg TUVESUFfQ09OVFJPTExFUgorCXNlbGVjdCBWSURFT19WNEwyX1NVQkRFVl9BUEkKKwlzZWxlY3Qg VjRMMl9GV05PREUKKwloZWxwCisJICBUaGlzIGlzIGEgVmlkZW80TGludXgyIHNlbnNvciBkcml2 ZXIgZm9yIE9tbmlWaXNpb24KKwkgIE9WODg2NSBjYW1lcmEgc2Vuc29yLgorCisJICBUbyBjb21w aWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVs ZSB3aWxsIGJlIGNhbGxlZCBvdjg4NjUuCisKIGNvbmZpZyBWSURFT19PVjk2NDAKIAl0cmlzdGF0 ZSAiT21uaVZpc2lvbiBPVjk2NDAgc2Vuc29yIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJMkMgJiYg VklERU9fVjRMMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgYi9kcml2 ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQppbmRleCAxNWQ0ZDYzODI1ODIuLjUwNWMyMDY3ZTc4MCAx MDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRp YS9pMmMvTWFrZWZpbGUKQEAgLTgyLDYgKzgyLDcgQEAgb2JqLSQoQ09ORklHX1ZJREVPX09WNzY3 MCkgKz0gb3Y3NjcwLm8KIG9iai0kKENPTkZJR19WSURFT19PVjc3MlgpICs9IG92NzcyeC5vCiBv YmotJChDT05GSUdfVklERU9fT1Y3NzQwKSArPSBvdjc3NDAubwogb2JqLSQoQ09ORklHX1ZJREVP X09WODg1NikgKz0gb3Y4ODU2Lm8KK29iai0kKENPTkZJR19WSURFT19PVjg4NjUpICs9IG92ODg2 NS5vCiBvYmotJChDT05GSUdfVklERU9fT1Y5NjQwKSArPSBvdjk2NDAubwogb2JqLSQoQ09ORklH X1ZJREVPX09WOTY1MCkgKz0gb3Y5NjUwLm8KIG9iai0kKENPTkZJR19WSURFT19PVjEzODU4KSAr PSBvdjEzODU4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL292ODg2NS5jIGIvZHJp dmVycy9tZWRpYS9pMmMvb3Y4ODY1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5jZmJiYzliNGQ0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2ky Yy9vdjg4NjUuYwpAQCAtMCwwICsxLDI5ODEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9yLWxhdGVyCisvKgorICogQ29weXJpZ2h0IDIwMjAgS8OpdmluIEwnaMO0cGl0 YWwgPGtldmluLmxob3BpdGFsQGJvb3RsaW4uY29tPgorICogQ29weXJpZ2h0IDIwMjAgQm9vdGxp bgorICogQXV0aG9yOiBQYXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAYm9vdGxp bi5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4K KyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9y L2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVk aWEvdjRsMi1jdHJscy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVk ZSA8bWVkaWEvdjRsMi1md25vZGUuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVz Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1tZWRpYWJ1cy5oPgorCisvKiBDbG9jayByYXRlICov CisKKyNkZWZpbmUgT1Y4ODY1X0VYVENMS19SQVRFCQkJMjQwMDAwMDAKKworLyogUmVnaXN0ZXIg ZGVmaW5pdGlvbnMgKi8KKworLyogU3lzdGVtICovCisKKyNkZWZpbmUgT1Y4ODY1X1NXX1NUQU5E QllfUkVHCQkJMHgxMDAKKyNkZWZpbmUgT1Y4ODY1X1NXX1NUQU5EQllfU1RSRUFNX09OCQlCSVQo MCkKKworI2RlZmluZSBPVjg4NjVfU1dfUkVTRVRfUkVHCQkJMHgxMDMKKyNkZWZpbmUgT1Y4ODY1 X1NXX1JFU0VUX1JFU0VUCQkJQklUKDApCisKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMMF9SRUcJ CQkweDMwMAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkwwX1BSRV9ESVYodikJCSgodikgJiBHRU5N QVNLKDIsIDApKQorI2RlZmluZSBPVjg4NjVfUExMX0NUUkwxX1JFRwkJCTB4MzAxCisjZGVmaW5l IE9WODg2NV9QTExfQ1RSTDFfTVVMX0godikJCSgoKHYpICYgR0VOTUFTSyg5LCA4KSkgPj4gOCkK KyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMMl9SRUcJCQkweDMwMgorI2RlZmluZSBPVjg4NjVfUExM X0NUUkwyX01VTF9MKHYpCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X1BM TF9DVFJMM19SRUcJCQkweDMwMworI2RlZmluZSBPVjg4NjVfUExMX0NUUkwzX01fRElWKHYpCQko KCh2KSAtIDEpICYgR0VOTUFTSygzLCAwKSkKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMNF9SRUcJ CQkweDMwNAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkw0X01JUElfRElWKHYpCQkoKHYpICYgR0VO TUFTSygxLCAwKSkKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMNV9SRUcJCQkweDMwNQorI2RlZmlu ZSBPVjg4NjVfUExMX0NUUkw1X1NZU19QUkVfRElWKHYpCQkoKHYpICYgR0VOTUFTSygxLCAwKSkK KyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMNl9SRUcJCQkweDMwNgorI2RlZmluZSBPVjg4NjVfUExM X0NUUkw2X1NZU19ESVYodikJCSgoKHYpIC0gMSkgJiBCSVQoMCkpCisKKyNkZWZpbmUgT1Y4ODY1 X1BMTF9DVFJMOF9SRUcJCQkweDMwOAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkw5X1JFRwkJCTB4 MzA5CisjZGVmaW5lIE9WODg2NV9QTExfQ1RSTEFfUkVHCQkJMHgzMGEKKyNkZWZpbmUgT1Y4ODY1 X1BMTF9DVFJMQV9QUkVfRElWX0hBTEYodikJKCgodikgLSAxKSAmIEJJVCgwKSkKKyNkZWZpbmUg T1Y4ODY1X1BMTF9DVFJMQl9SRUcJCQkweDMwYgorI2RlZmluZSBPVjg4NjVfUExMX0NUUkxCX1BS RV9ESVYodikJCSgodikgJiBHRU5NQVNLKDIsIDApKQorI2RlZmluZSBPVjg4NjVfUExMX0NUUkxD X1JFRwkJCTB4MzBjCisjZGVmaW5lIE9WODg2NV9QTExfQ1RSTENfTVVMX0godikJCSgoKHYpICYg R0VOTUFTSyg5LCA4KSkgPj4gOCkKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMRF9SRUcJCQkweDMw ZAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkxEX01VTF9MKHYpCQkoKHYpICYgR0VOTUFTSyg3LCAw KSkKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMRV9SRUcJCQkweDMwZQorI2RlZmluZSBPVjg4NjVf UExMX0NUUkxFX1NZU19ESVYodikJCSgodikgJiBHRU5NQVNLKDIsIDApKQorI2RlZmluZSBPVjg4 NjVfUExMX0NUUkxGX1JFRwkJCTB4MzBmCisjZGVmaW5lIE9WODg2NV9QTExfQ1RSTEZfU1lTX1BS RV9ESVYodikJCSgoKHYpIC0gMSkgJiBHRU5NQVNLKDMsIDApKQorI2RlZmluZSBPVjg4NjVfUExM X0NUUkwxMF9SRUcJCQkweDMxMAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkwxMV9SRUcJCQkweDMx MQorI2RlZmluZSBPVjg4NjVfUExMX0NUUkwxMl9SRUcJCQkweDMxMgorI2RlZmluZSBPVjg4NjVf UExMX0NUUkwxMl9QUkVfRElWX0hBTEYodikJKCgoKHYpIC0gMSkgPDwgNCkgJiBCSVQoNCkpCisj ZGVmaW5lIE9WODg2NV9QTExfQ1RSTDEyX0RBQ19ESVYodikJCSgoKHYpIC0gMSkgJiBHRU5NQVNL KDMsIDApKQorCisjZGVmaW5lIE9WODg2NV9QTExfQ1RSTDFCX1JFRwkJCTB4MzFiCisjZGVmaW5l IE9WODg2NV9QTExfQ1RSTDFDX1JFRwkJCTB4MzFjCisKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJM MUVfUkVHCQkJMHgzMWUKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMMUVfUExMMV9OT19MQVQJCUJJ VCgzKQorCisjZGVmaW5lIE9WODg2NV9QQURfT0VOMF9SRUcJCQkweDMwMDAKKworI2RlZmluZSBP Vjg4NjVfUEFEX09FTjJfUkVHCQkJMHgzMDAyCisKKyNkZWZpbmUgT1Y4ODY1X0NMS19SU1Q1X1JF RwkJCTB4MzAwNQorCisjZGVmaW5lIE9WODg2NV9DSElQX0lEX0hIX1JFRwkJCTB4MzAwYQorI2Rl ZmluZSBPVjg4NjVfQ0hJUF9JRF9ISF9WQUxVRQkJCTB4MDAKKyNkZWZpbmUgT1Y4ODY1X0NISVBf SURfSF9SRUcJCQkweDMwMGIKKyNkZWZpbmUgT1Y4ODY1X0NISVBfSURfSF9WQUxVRQkJCTB4ODgK KyNkZWZpbmUgT1Y4ODY1X0NISVBfSURfTF9SRUcJCQkweDMwMGMKKyNkZWZpbmUgT1Y4ODY1X0NI SVBfSURfTF9WQUxVRQkJCTB4NjUKKyNkZWZpbmUgT1Y4ODY1X1BBRF9PVVQyX1JFRwkJCTB4MzAw ZAorCisjZGVmaW5lIE9WODg2NV9QQURfU0VMMl9SRUcJCQkweDMwMTAKKyNkZWZpbmUgT1Y4ODY1 X1BBRF9QS19SRUcJCQkweDMwMTEKKyNkZWZpbmUgT1Y4ODY1X1BBRF9QS19EUklWRV9TVFJFTkdU SF8xWAkJKDAgPDwgNSkKKyNkZWZpbmUgT1Y4ODY1X1BBRF9QS19EUklWRV9TVFJFTkdUSF8yWAkJ KDEgPDwgNSkKKyNkZWZpbmUgT1Y4ODY1X1BBRF9QS19EUklWRV9TVFJFTkdUSF8zWAkJKDIgPDwg NSkKKyNkZWZpbmUgT1Y4ODY1X1BBRF9QS19EUklWRV9TVFJFTkdUSF80WAkJKDMgPDwgNSkKKwor I2RlZmluZSBPVjg4NjVfUFVNUF9DTEtfRElWX1JFRwkJCTB4MzAxNQorI2RlZmluZSBPVjg4NjVf UFVNUF9DTEtfRElWX1BVTVBfTih2KQkJKCgodikgPDwgNCkgJiBHRU5NQVNLKDYsIDQpKQorI2Rl ZmluZSBPVjg4NjVfUFVNUF9DTEtfRElWX1BVTVBfUCh2KQkJKCh2KSAmIEdFTk1BU0soMiwgMCkp CisKKyNkZWZpbmUgT1Y4ODY1X01JUElfU0NfQ1RSTDBfUkVHCQkweDMwMTgKKyNkZWZpbmUgT1Y4 ODY1X01JUElfU0NfQ1RSTDBfTEFORVModikJCSgoKCh2KSAtIDEpIDw8IDUpICYgXAorCQkJCQkJ IEdFTk1BU0soNywgNSkpCisjZGVmaW5lIE9WODg2NV9NSVBJX1NDX0NUUkwwX01JUElfRU4JCUJJ VCg0KQorI2RlZmluZSBPVjg4NjVfTUlQSV9TQ19DVFJMMF9VTktOT1dOCQlCSVQoMSkKKyNkZWZp bmUgT1Y4ODY1X01JUElfU0NfQ1RSTDBfTEFORVNfUERfTUlQSQlCSVQoMCkKKyNkZWZpbmUgT1Y4 ODY1X01JUElfU0NfQ1RSTDFfUkVHCQkweDMwMTkKKyNkZWZpbmUgT1Y4ODY1X0NMS19SU1QwX1JF RwkJCTB4MzAxYQorI2RlZmluZSBPVjg4NjVfQ0xLX1JTVDFfUkVHCQkJMHgzMDFiCisjZGVmaW5l IE9WODg2NV9DTEtfUlNUMl9SRUcJCQkweDMwMWMKKyNkZWZpbmUgT1Y4ODY1X0NMS19SU1QzX1JF RwkJCTB4MzAxZAorI2RlZmluZSBPVjg4NjVfQ0xLX1JTVDRfUkVHCQkJMHgzMDFlCisKKyNkZWZp bmUgT1Y4ODY1X1BDTEtfU0VMX1JFRwkJCTB4MzAyMAorI2RlZmluZSBPVjg4NjVfUENMS19TRUxf UENMS19ESVZfTUFTSwkJQklUKDMpCisjZGVmaW5lIE9WODg2NV9QQ0xLX1NFTF9QQ0xLX0RJVih2 KQkJKCgoKHYpIC0gMSkgPDwgMykgJiBCSVQoMykpCisKKyNkZWZpbmUgT1Y4ODY1X01JU0NfQ1RS TF9SRUcJCQkweDMwMjEKKyNkZWZpbmUgT1Y4ODY1X01JUElfU0NfQ1RSTDJfUkVHCQkweDMwMjIK KyNkZWZpbmUgT1Y4ODY1X01JUElfU0NfQ1RSTDJfQ0xLX0xBTkVTX1BEX01JUEkJQklUKDEpCisj ZGVmaW5lIE9WODg2NV9NSVBJX1NDX0NUUkwyX1BEX01JUElfUlNUX1NZTkMJQklUKDApCisKKyNk ZWZpbmUgT1Y4ODY1X01JUElfQklUX1NFTF9SRUcJCQkweDMwMzEKKyNkZWZpbmUgT1Y4ODY1X01J UElfQklUX1NFTCh2KQkJCSgoKHYpIDw8IDApICYgR0VOTUFTSyg0LCAwKSkKKyNkZWZpbmUgT1Y4 ODY1X0NMS19TRUwwX1JFRwkJCTB4MzAzMgorI2RlZmluZSBPVjg4NjVfQ0xLX1NFTDBfUExMMV9T WVNfU0VMKHYpCQkoKCh2KSA8PCA3KSAmIEJJVCg3KSkKKyNkZWZpbmUgT1Y4ODY1X0NMS19TRUwx X1JFRwkJCTB4MzAzMworI2RlZmluZSBPVjg4NjVfQ0xLX1NFTDFfTUlQSV9FT0YJCUJJVCg1KQor I2RlZmluZSBPVjg4NjVfQ0xLX1NFTDFfVU5LTk9XTgkJCUJJVCgyKQorI2RlZmluZSBPVjg4NjVf Q0xLX1NFTDFfUExMX1NDTEtfU0VMX01BU0sJQklUKDEpCisjZGVmaW5lIE9WODg2NV9DTEtfU0VM MV9QTExfU0NMS19TRUwodikJCSgoKHYpIDw8IDEpICYgQklUKDEpKQorCisjZGVmaW5lIE9WODg2 NV9TQ0xLX0NUUkxfUkVHCQkJMHgzMTA2CisjZGVmaW5lIE9WODg2NV9TQ0xLX0NUUkxfU0NMS19E SVYodikJCSgoKHYpIDw8IDQpICYgR0VOTUFTSyg3LCA0KSkKKyNkZWZpbmUgT1Y4ODY1X1NDTEtf Q1RSTF9TQ0xLX1BSRV9ESVYodikJKCgodikgPDwgMikgJiBHRU5NQVNLKDMsIDIpKQorI2RlZmlu ZSBPVjg4NjVfU0NMS19DVFJMX1VOS05PV04JCUJJVCgwKQorCisvKiBFeHBvc3VyZS9nYWluICov CisKKyNkZWZpbmUgT1Y4ODY1X0VYUE9TVVJFX0NUUkxfSEhfUkVHCQkweDM1MDAKKyNkZWZpbmUg T1Y4ODY1X0VYUE9TVVJFX0NUUkxfSEgodikJCSgoKHYpICYgR0VOTUFTSygxOSwgMTYpKSA+PiAx NikKKyNkZWZpbmUgT1Y4ODY1X0VYUE9TVVJFX0NUUkxfSF9SRUcJCTB4MzUwMQorI2RlZmluZSBP Vjg4NjVfRVhQT1NVUkVfQ1RSTF9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTUsIDgpKSA+PiA4KQor I2RlZmluZSBPVjg4NjVfRVhQT1NVUkVfQ1RSTF9MX1JFRwkJMHgzNTAyCisjZGVmaW5lIE9WODg2 NV9FWFBPU1VSRV9DVFJMX0wodikJCSgodikgJiBHRU5NQVNLKDcsIDApKQorI2RlZmluZSBPVjg4 NjVfRVhQT1NVUkVfR0FJTl9NQU5VQUxfUkVHCQkweDM1MDMKKworI2RlZmluZSBPVjg4NjVfR0FJ Tl9DVFJMX0hfUkVHCQkJMHgzNTA4CisjZGVmaW5lIE9WODg2NV9HQUlOX0NUUkxfSCh2KQkJCSgo KHYpICYgR0VOTUFTSygxMiwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9HQUlOX0NUUkxfTF9S RUcJCQkweDM1MDkKKyNkZWZpbmUgT1Y4ODY1X0dBSU5fQ1RSTF9MKHYpCQkJKCh2KSAmIEdFTk1B U0soNywgMCkpCisKKy8qIFRpbWluZyAqLworCisjZGVmaW5lIE9WODg2NV9DUk9QX1NUQVJUX1hf SF9SRUcJCTB4MzgwMAorI2RlZmluZSBPVjg4NjVfQ1JPUF9TVEFSVF9YX0godikJCSgoKHYpICYg R0VOTUFTSygxMSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9DUk9QX1NUQVJUX1hfTF9SRUcJ CTB4MzgwMQorI2RlZmluZSBPVjg4NjVfQ1JPUF9TVEFSVF9YX0wodikJCSgodikgJiBHRU5NQVNL KDcsIDApKQorI2RlZmluZSBPVjg4NjVfQ1JPUF9TVEFSVF9ZX0hfUkVHCQkweDM4MDIKKyNkZWZp bmUgT1Y4ODY1X0NST1BfU1RBUlRfWV9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTEsIDgpKSA+PiA4 KQorI2RlZmluZSBPVjg4NjVfQ1JPUF9TVEFSVF9ZX0xfUkVHCQkweDM4MDMKKyNkZWZpbmUgT1Y4 ODY1X0NST1BfU1RBUlRfWV9MKHYpCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4 ODY1X0NST1BfRU5EX1hfSF9SRUcJCQkweDM4MDQKKyNkZWZpbmUgT1Y4ODY1X0NST1BfRU5EX1hf SCh2KQkJCSgoKHYpICYgR0VOTUFTSygxMSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9DUk9Q X0VORF9YX0xfUkVHCQkJMHgzODA1CisjZGVmaW5lIE9WODg2NV9DUk9QX0VORF9YX0wodikJCQko KHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X0NST1BfRU5EX1lfSF9SRUcJCQkw eDM4MDYKKyNkZWZpbmUgT1Y4ODY1X0NST1BfRU5EX1lfSCh2KQkJCSgoKHYpICYgR0VOTUFTSygx MSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9DUk9QX0VORF9ZX0xfUkVHCQkJMHgzODA3Cisj ZGVmaW5lIE9WODg2NV9DUk9QX0VORF9ZX0wodikJCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNk ZWZpbmUgT1Y4ODY1X09VVFBVVF9TSVpFX1hfSF9SRUcJCTB4MzgwOAorI2RlZmluZSBPVjg4NjVf T1VUUFVUX1NJWkVfWF9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTEsIDgpKSA+PiA4KQorI2RlZmlu ZSBPVjg4NjVfT1VUUFVUX1NJWkVfWF9MX1JFRwkJMHgzODA5CisjZGVmaW5lIE9WODg2NV9PVVRQ VVRfU0laRV9YX0wodikJCSgodikgJiBHRU5NQVNLKDcsIDApKQorI2RlZmluZSBPVjg4NjVfT1VU UFVUX1NJWkVfWV9IX1JFRwkJMHgzODBhCisjZGVmaW5lIE9WODg2NV9PVVRQVVRfU0laRV9ZX0go dikJCSgoKHYpICYgR0VOTUFTSygxMSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9PVVRQVVRf U0laRV9ZX0xfUkVHCQkweDM4MGIKKyNkZWZpbmUgT1Y4ODY1X09VVFBVVF9TSVpFX1lfTCh2KQkJ KCh2KSAmIEdFTk1BU0soNywgMCkpCisjZGVmaW5lIE9WODg2NV9IVFNfSF9SRUcJCQkweDM4MGMK KyNkZWZpbmUgT1Y4ODY1X0hUU19IKHYpCQkJCSgoKHYpICYgR0VOTUFTSygxMSwgOCkpID4+IDgp CisjZGVmaW5lIE9WODg2NV9IVFNfTF9SRUcJCQkweDM4MGQKKyNkZWZpbmUgT1Y4ODY1X0hUU19M KHYpCQkJCSgodikgJiBHRU5NQVNLKDcsIDApKQorI2RlZmluZSBPVjg4NjVfVlRTX0hfUkVHCQkJ MHgzODBlCisjZGVmaW5lIE9WODg2NV9WVFNfSCh2KQkJCQkoKCh2KSAmIEdFTk1BU0soMTEsIDgp KSA+PiA4KQorI2RlZmluZSBPVjg4NjVfVlRTX0xfUkVHCQkJMHgzODBmCisjZGVmaW5lIE9WODg2 NV9WVFNfTCh2KQkJCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X09GRlNF VF9YX0hfUkVHCQkJMHgzODEwCisjZGVmaW5lIE9WODg2NV9PRkZTRVRfWF9IKHYpCQkJKCgodikg JiBHRU5NQVNLKDE1LCA4KSkgPj4gOCkKKyNkZWZpbmUgT1Y4ODY1X09GRlNFVF9YX0xfUkVHCQkJ MHgzODExCisjZGVmaW5lIE9WODg2NV9PRkZTRVRfWF9MKHYpCQkJKCh2KSAmIEdFTk1BU0soNywg MCkpCisjZGVmaW5lIE9WODg2NV9PRkZTRVRfWV9IX1JFRwkJCTB4MzgxMgorI2RlZmluZSBPVjg4 NjVfT0ZGU0VUX1lfSCh2KQkJCSgoKHYpICYgR0VOTUFTSygxNCwgOCkpID4+IDgpCisjZGVmaW5l IE9WODg2NV9PRkZTRVRfWV9MX1JFRwkJCTB4MzgxMworI2RlZmluZSBPVjg4NjVfT0ZGU0VUX1lf TCh2KQkJCSgodikgJiBHRU5NQVNLKDcsIDApKQorI2RlZmluZSBPVjg4NjVfSU5DX1hfT0REX1JF RwkJCTB4MzgxNAorI2RlZmluZSBPVjg4NjVfSU5DX1hfT0REKHYpCQkJKCh2KSAmIEdFTk1BU0so NCwgMCkpCisjZGVmaW5lIE9WODg2NV9JTkNfWF9FVkVOX1JFRwkJCTB4MzgxNQorI2RlZmluZSBP Vjg4NjVfSU5DX1hfRVZFTih2KQkJCSgodikgJiBHRU5NQVNLKDQsIDApKQorI2RlZmluZSBPVjg4 NjVfVlNZTkNfU1RBUlRfSF9SRUcJCTB4MzgxNgorI2RlZmluZSBPVjg4NjVfVlNZTkNfU1RBUlRf SCh2KQkJCSgoKHYpICYgR0VOTUFTSygxNSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9WU1lO Q19TVEFSVF9MX1JFRwkJMHgzODE3CisjZGVmaW5lIE9WODg2NV9WU1lOQ19TVEFSVF9MKHYpCQkJ KCh2KSAmIEdFTk1BU0soNywgMCkpCisjZGVmaW5lIE9WODg2NV9WU1lOQ19FTkRfSF9SRUcJCQkw eDM4MTgKKyNkZWZpbmUgT1Y4ODY1X1ZTWU5DX0VORF9IKHYpCQkJKCgodikgJiBHRU5NQVNLKDE1 LCA4KSkgPj4gOCkKKyNkZWZpbmUgT1Y4ODY1X1ZTWU5DX0VORF9MX1JFRwkJCTB4MzgxOQorI2Rl ZmluZSBPVjg4NjVfVlNZTkNfRU5EX0wodikJCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZp bmUgT1Y4ODY1X0hTWU5DX0ZJUlNUX0hfUkVHCQkweDM4MWEKKyNkZWZpbmUgT1Y4ODY1X0hTWU5D X0ZJUlNUX0godikJCQkoKCh2KSAmIEdFTk1BU0soMTUsIDgpKSA+PiA4KQorI2RlZmluZSBPVjg4 NjVfSFNZTkNfRklSU1RfTF9SRUcJCTB4MzgxYgorI2RlZmluZSBPVjg4NjVfSFNZTkNfRklSU1Rf TCh2KQkJCSgodikgJiBHRU5NQVNLKDcsIDApKQorCisjZGVmaW5lIE9WODg2NV9GT1JNQVQxX1JF RwkJCTB4MzgyMAorI2RlZmluZSBPVjg4NjVfRk9STUFUMV9GTElQX1ZFUlRfSVNQX0VOCQlCSVQo MikKKyNkZWZpbmUgT1Y4ODY1X0ZPUk1BVDFfRkxJUF9WRVJUX1NFTlNPUl9FTglCSVQoMSkKKyNk ZWZpbmUgT1Y4ODY1X0ZPUk1BVDJfUkVHCQkJMHgzODIxCisjZGVmaW5lIE9WODg2NV9GT1JNQVQy X0hTWU5DX0VOCQkJQklUKDYpCisjZGVmaW5lIE9WODg2NV9GT1JNQVQyX0ZTVF9WQklOX0VOCQlC SVQoNSkKKyNkZWZpbmUgT1Y4ODY1X0ZPUk1BVDJfRlNUX0hCSU5fRU4JCUJJVCg0KQorI2RlZmlu ZSBPVjg4NjVfRk9STUFUMl9JU1BfSE9SWl9WQVIyX0VOCQlCSVQoMykKKyNkZWZpbmUgT1Y4ODY1 X0ZPUk1BVDJfRkxJUF9IT1JaX0lTUF9FTgkJQklUKDIpCisjZGVmaW5lIE9WODg2NV9GT1JNQVQy X0ZMSVBfSE9SWl9TRU5TT1JfRU4JQklUKDEpCisjZGVmaW5lIE9WODg2NV9GT1JNQVQyX1NZTkNf SEJJTl9FTgkJQklUKDApCisKKworI2RlZmluZSBPVjg4NjVfSU5DX1lfT0REX1JFRwkJCTB4Mzgy YQorI2RlZmluZSBPVjg4NjVfSU5DX1lfT0REKHYpCQkJKCh2KSAmIEdFTk1BU0soNCwgMCkpCisj ZGVmaW5lIE9WODg2NV9JTkNfWV9FVkVOX1JFRwkJCTB4MzgyYgorI2RlZmluZSBPVjg4NjVfSU5D X1lfRVZFTih2KQkJCSgodikgJiBHRU5NQVNLKDQsIDApKQorCisjZGVmaW5lIE9WODg2NV9BQkxD X05VTV9SRUcJCQkweDM4MzAKKyNkZWZpbmUgT1Y4ODY1X0FCTENfTlVNKHYpCQkJKCh2KSAmIEdF Tk1BU0soNCwgMCkpCisKKyNkZWZpbmUgT1Y4ODY1X1pMSU5FX05VTV9SRUcJCQkweDM4MzYKKyNk ZWZpbmUgT1Y4ODY1X1pMSU5FX05VTSh2KQkJCSgodikgJiBHRU5NQVNLKDQsIDApKQorCisjZGVm aW5lIE9WODg2NV9BVVRPX1NJWkVfQ1RSTF9SRUcJCTB4Mzg0MQorI2RlZmluZSBPVjg4NjVfQVVU T19TSVpFX0NUUkxfT0ZGU0VUX1lfUkVHCUJJVCg1KQorI2RlZmluZSBPVjg4NjVfQVVUT19TSVpF X0NUUkxfT0ZGU0VUX1hfUkVHCUJJVCg0KQorI2RlZmluZSBPVjg4NjVfQVVUT19TSVpFX0NUUkxf Q1JPUF9FTkRfWV9SRUcJQklUKDMpCisjZGVmaW5lIE9WODg2NV9BVVRPX1NJWkVfQ1RSTF9DUk9Q X0VORF9YX1JFRwlCSVQoMikKKyNkZWZpbmUgT1Y4ODY1X0FVVE9fU0laRV9DVFJMX0NST1BfU1RB UlRfWV9SRUcJQklUKDEpCisjZGVmaW5lIE9WODg2NV9BVVRPX1NJWkVfQ1RSTF9DUk9QX1NUQVJU X1hfUkVHCUJJVCgwKQorI2RlZmluZSBPVjg4NjVfQVVUT19TSVpFX1hfT0ZGU0VUX0hfUkVHCQkw eDM4NDIKKyNkZWZpbmUgT1Y4ODY1X0FVVE9fU0laRV9YX09GRlNFVF9MX1JFRwkJMHgzODQzCisj ZGVmaW5lIE9WODg2NV9BVVRPX1NJWkVfWV9PRkZTRVRfSF9SRUcJCTB4Mzg0NAorI2RlZmluZSBP Vjg4NjVfQVVUT19TSVpFX1lfT0ZGU0VUX0xfUkVHCQkweDM4NDUKKyNkZWZpbmUgT1Y4ODY1X0FV VE9fU0laRV9CT1VOREFSSUVTX1JFRwkJMHgzODQ2CisjZGVmaW5lIE9WODg2NV9BVVRPX1NJWkVf Qk9VTkRBUklFU19ZKHYpCSgoKHYpIDw8IDQpICYgR0VOTUFTSyg3LCA0KSkKKyNkZWZpbmUgT1Y4 ODY1X0FVVE9fU0laRV9CT1VOREFSSUVTX1godikJKCh2KSAmIEdFTk1BU0soMywgMCkpCisKKy8q IFBTUkFNICovCisKKyNkZWZpbmUgT1Y4ODY1X1BTUkFNX0NUUkw4X1JFRwkJCTB4M2YwOAorCisv KiBCbGFjayBMZXZlbCAqLworCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDBfUkVHCQkJMHg0MDAw CisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDBfVFJJR19SQU5HRV9FTgkJQklUKDcpCisjZGVmaW5l IE9WODg2NV9CTENfQ1RSTDBfVFJJR19GT1JNQVRfRU4JCUJJVCg2KQorI2RlZmluZSBPVjg4NjVf QkxDX0NUUkwwX1RSSUdfR0FJTl9FTgkJQklUKDUpCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDBf VFJJR19FWFBPU1VSRV9FTglCSVQoNCkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMF9UUklHX01B TlVBTF9FTgkJQklUKDMpCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDBfRlJFRVpFX0VOCQlCSVQo MikKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMF9BTFdBWVNfRU4JCUJJVCgxKQorI2RlZmluZSBP Vjg4NjVfQkxDX0NUUkwwX0ZJTFRFUl9FTgkJQklUKDApCisjZGVmaW5lIE9WODg2NV9CTENfQ1RS TDFfUkVHCQkJMHg0MDAxCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDFfRElUSEVSX0VOCQlCSVQo NykKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMV9aRVJPX0xJTkVfRElGRl9FTglCSVQoNikKKyNk ZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMV9DT0xfU0hJRlRfMjU2CQkoMCA8PCA0KQorI2RlZmluZSBP Vjg4NjVfQkxDX0NUUkwxX0NPTF9TSElGVF8xMjgJCSgxIDw8IDQpCisjZGVmaW5lIE9WODg2NV9C TENfQ1RSTDFfQ09MX1NISUZUXzY0CQkoMiA8PCA0KQorI2RlZmluZSBPVjg4NjVfQkxDX0NUUkwx X0NPTF9TSElGVF8zMgkJKDMgPDwgNCkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMV9PRkZTRVRf TElNSVRfRU4JQklUKDIpCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDFfQ09MVU1OX0NBTkNFTF9F TglCSVQoMSkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMl9SRUcJCQkweDQwMDIKKyNkZWZpbmUg T1Y4ODY1X0JMQ19DVFJMM19SRUcJCQkweDQwMDMKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMNF9S RUcJCQkweDQwMDQKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMNV9SRUcJCQkweDQwMDUKKyNkZWZp bmUgT1Y4ODY1X0JMQ19DVFJMNl9SRUcJCQkweDQwMDYKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJM N19SRUcJCQkweDQwMDcKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMOF9SRUcJCQkweDQwMDgKKyNk ZWZpbmUgT1Y4ODY1X0JMQ19DVFJMOV9SRUcJCQkweDQwMDkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19D VFJMQV9SRUcJCQkweDQwMGEKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMQl9SRUcJCQkweDQwMGIK KyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMQ19SRUcJCQkweDQwMGMKKyNkZWZpbmUgT1Y4ODY1X0JM Q19DVFJMRF9SRUcJCQkweDQwMGQKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMRF9PRkZTRVRfVFJJ R0dFUih2KQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKworI2RlZmluZSBPVjg4NjVfQkxDX0NUUkwx Rl9SRUcJCQkweDQwMWYKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMUZfUkJfUkVWRVJTRQkJQklU KDMpCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDFGX0lOVEVSUE9MX1hfRU4JCUJJVCgyKQorI2Rl ZmluZSBPVjg4NjVfQkxDX0NUUkwxRl9JTlRFUlBPTF9ZX0VOCQlCSVQoMSkKKworI2RlZmluZSBP Vjg4NjVfQkxDX0FOQ0hPUl9MRUZUX1NUQVJUX0hfUkVHCTB4NDAyMAorI2RlZmluZSBPVjg4NjVf QkxDX0FOQ0hPUl9MRUZUX1NUQVJUX0godikJKCgodikgJiBHRU5NQVNLKDExLCA4KSkgPj4gOCkK KyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfTEVGVF9TVEFSVF9MX1JFRwkweDQwMjEKKyNkZWZp bmUgT1Y4ODY1X0JMQ19BTkNIT1JfTEVGVF9TVEFSVF9MKHYpCSgodikgJiBHRU5NQVNLKDcsIDAp KQorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hPUl9MRUZUX0VORF9IX1JFRwkweDQwMjIKKyNkZWZp bmUgT1Y4ODY1X0JMQ19BTkNIT1JfTEVGVF9FTkRfSCh2KQkJKCgodikgJiBHRU5NQVNLKDExLCA4 KSkgPj4gOCkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfTEVGVF9FTkRfTF9SRUcJMHg0MDIz CisjZGVmaW5lIE9WODg2NV9CTENfQU5DSE9SX0xFRlRfRU5EX0wodikJCSgodikgJiBHRU5NQVNL KDcsIDApKQorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9TVEFSVF9IX1JFRwkweDQw MjQKKyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfUklHSFRfU1RBUlRfSCh2KQkoKCh2KSAmIEdF Tk1BU0soMTEsIDgpKSA+PiA4KQorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9TVEFS VF9MX1JFRwkweDQwMjUKKyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfUklHSFRfU1RBUlRfTCh2 KQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfUklHSFRf RU5EX0hfUkVHCTB4NDAyNgorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9FTkRfSCh2 KQkoKCh2KSAmIEdFTk1BU0soMTEsIDgpKSA+PiA4KQorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hP Ul9SSUdIVF9FTkRfTF9SRUcJMHg0MDI3CisjZGVmaW5lIE9WODg2NV9CTENfQU5DSE9SX1JJR0hU X0VORF9MKHYpCSgodikgJiBHRU5NQVNLKDcsIDApKQorCisjZGVmaW5lIE9WODg2NV9CTENfVE9Q X1pMSU5FX1NUQVJUX1JFRwkJMHg0MDI4CisjZGVmaW5lIE9WODg2NV9CTENfVE9QX1pMSU5FX1NU QVJUKHYpCQkoKHYpICYgR0VOTUFTSyg1LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19UT1BfWkxJ TkVfTlVNX1JFRwkJMHg0MDI5CisjZGVmaW5lIE9WODg2NV9CTENfVE9QX1pMSU5FX05VTSh2KQkJ KCh2KSAmIEdFTk1BU0soNCwgMCkpCisjZGVmaW5lIE9WODg2NV9CTENfVE9QX0JMS0xJTkVfU1RB UlRfUkVHCTB4NDAyYQorI2RlZmluZSBPVjg4NjVfQkxDX1RPUF9CTEtMSU5FX1NUQVJUKHYpCQko KHYpICYgR0VOTUFTSyg1LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19UT1BfQkxLTElORV9OVU1f UkVHCQkweDQwMmIKKyNkZWZpbmUgT1Y4ODY1X0JMQ19UT1BfQkxLTElORV9OVU0odikJCSgodikg JiBHRU5NQVNLKDQsIDApKQorI2RlZmluZSBPVjg4NjVfQkxDX0JPVF9aTElORV9TVEFSVF9SRUcJ CTB4NDAyYworI2RlZmluZSBPVjg4NjVfQkxDX0JPVF9aTElORV9TVEFSVCh2KQkJKCh2KSAmIEdF Tk1BU0soNSwgMCkpCisjZGVmaW5lIE9WODg2NV9CTENfQk9UX1pMSU5FX05VTV9SRUcJCTB4NDAy ZAorI2RlZmluZSBPVjg4NjVfQkxDX0JPVF9aTElORV9OVU0odikJCSgodikgJiBHRU5NQVNLKDQs IDApKQorI2RlZmluZSBPVjg4NjVfQkxDX0JPVF9CTEtMSU5FX1NUQVJUX1JFRwkweDQwMmUKKyNk ZWZpbmUgT1Y4ODY1X0JMQ19CT1RfQkxLTElORV9TVEFSVCh2KQkJKCh2KSAmIEdFTk1BU0soNSwg MCkpCisjZGVmaW5lIE9WODg2NV9CTENfQk9UX0JMS0xJTkVfTlVNX1JFRwkJMHg0MDJmCisjZGVm aW5lIE9WODg2NV9CTENfQk9UX0JMS0xJTkVfTlVNKHYpCQkoKHYpICYgR0VOTUFTSyg0LCAwKSkK KworI2RlZmluZSBPVjg4NjVfQkxDX09GRlNFVF9MSU1JVF9SRUcJCTB4NDAzNAorI2RlZmluZSBP Vjg4NjVfQkxDX09GRlNFVF9MSU1JVCh2KQkJKCh2KSAmIEdFTk1BU0soNywgMCkpCisKKy8qIFZG SUZPICovCisKKyNkZWZpbmUgT1Y4ODY1X1ZGSUZPX1JFQURfU1RBUlRfSF9SRUcJCTB4NDYwMAor I2RlZmluZSBPVjg4NjVfVkZJRk9fUkVBRF9TVEFSVF9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTUs IDgpKSA+PiA4KQorI2RlZmluZSBPVjg4NjVfVkZJRk9fUkVBRF9TVEFSVF9MX1JFRwkJMHg0NjAx CisjZGVmaW5lIE9WODg2NV9WRklGT19SRUFEX1NUQVJUX0wodikJCSgodikgJiBHRU5NQVNLKDcs IDApKQorCisvKiBNSVBJICovCisKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RSTDBfUkVHCQkJMHg0 ODAwCisjZGVmaW5lIE9WODg2NV9NSVBJX0NUUkwxX1JFRwkJCTB4NDgwMQorI2RlZmluZSBPVjg4 NjVfTUlQSV9DVFJMMl9SRUcJCQkweDQ4MDIKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RSTDNfUkVH CQkJMHg0ODAzCisjZGVmaW5lIE9WODg2NV9NSVBJX0NUUkw0X1JFRwkJCTB4NDgwNAorI2RlZmlu ZSBPVjg4NjVfTUlQSV9DVFJMNV9SRUcJCQkweDQ4MDUKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RS TDZfUkVHCQkJMHg0ODA2CisjZGVmaW5lIE9WODg2NV9NSVBJX0NUUkw3X1JFRwkJCTB4NDgwNwor I2RlZmluZSBPVjg4NjVfTUlQSV9DVFJMOF9SRUcJCQkweDQ4MDgKKworI2RlZmluZSBPVjg4NjVf TUlQSV9GQ05UX01BWF9IX1JFRwkJMHg0ODEwCisjZGVmaW5lIE9WODg2NV9NSVBJX0ZDTlRfTUFY X0xfUkVHCQkweDQ4MTEKKworI2RlZmluZSBPVjg4NjVfTUlQSV9DVFJMMTNfUkVHCQkJMHg0ODEz CisjZGVmaW5lIE9WODg2NV9NSVBJX0NUUkwxNF9SRUcJCQkweDQ4MTQKKyNkZWZpbmUgT1Y4ODY1 X01JUElfQ1RSTDE1X1JFRwkJCTB4NDgxNQorI2RlZmluZSBPVjg4NjVfTUlQSV9FTUJFRERFRF9E VF9SRUcJCTB4NDgxNgorCisjZGVmaW5lIE9WODg2NV9NSVBJX0hTX1pFUk9fTUlOX0hfUkVHCQkw eDQ4MTgKKyNkZWZpbmUgT1Y4ODY1X01JUElfSFNfWkVST19NSU5fTF9SRUcJCTB4NDgxOQorI2Rl ZmluZSBPVjg4NjVfTUlQSV9IU19UUkFJTF9NSU5fSF9SRUcJCTB4NDgxYQorI2RlZmluZSBPVjg4 NjVfTUlQSV9IU19UUkFJTF9NSU5fTF9SRUcJCTB4NDgxYgorI2RlZmluZSBPVjg4NjVfTUlQSV9D TEtfWkVST19NSU5fSF9SRUcJCTB4NDgxYworI2RlZmluZSBPVjg4NjVfTUlQSV9DTEtfWkVST19N SU5fTF9SRUcJCTB4NDgxZAorI2RlZmluZSBPVjg4NjVfTUlQSV9DTEtfUFJFUEFSRV9NQVhfUkVH CQkweDQ4MWUKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ0xLX1BSRVBBUkVfTUlOX1JFRwkJMHg0ODFm CisjZGVmaW5lIE9WODg2NV9NSVBJX0NMS19QT1NUX01JTl9IX1JFRwkJMHg0ODIwCisjZGVmaW5l IE9WODg2NV9NSVBJX0NMS19QT1NUX01JTl9MX1JFRwkJMHg0ODIxCisjZGVmaW5lIE9WODg2NV9N SVBJX0NMS19UUkFJTF9NSU5fSF9SRUcJCTB4NDgyMgorI2RlZmluZSBPVjg4NjVfTUlQSV9DTEtf VFJBSUxfTUlOX0xfUkVHCQkweDQ4MjMKKyNkZWZpbmUgT1Y4ODY1X01JUElfTFBYX1BfTUlOX0hf UkVHCQkweDQ4MjQKKyNkZWZpbmUgT1Y4ODY1X01JUElfTFBYX1BfTUlOX0xfUkVHCQkweDQ4MjUK KyNkZWZpbmUgT1Y4ODY1X01JUElfSFNfUFJFUEFSRV9NSU5fUkVHCQkweDQ4MjYKKyNkZWZpbmUg T1Y4ODY1X01JUElfSFNfUFJFUEFSRV9NQVhfUkVHCQkweDQ4MjcKKyNkZWZpbmUgT1Y4ODY1X01J UElfSFNfRVhJVF9NSU5fSF9SRUcJCTB4NDgyOAorI2RlZmluZSBPVjg4NjVfTUlQSV9IU19FWElU X01JTl9MX1JFRwkJMHg0ODI5CisjZGVmaW5lIE9WODg2NV9NSVBJX1VJX0hTX1pFUk9fTUlOX1JF RwkJMHg0ODJhCisjZGVmaW5lIE9WODg2NV9NSVBJX1VJX0hTX1RSQUlMX01JTl9SRUcJCTB4NDgy YgorI2RlZmluZSBPVjg4NjVfTUlQSV9VSV9DTEtfWkVST19NSU5fUkVHCQkweDQ4MmMKKyNkZWZp bmUgT1Y4ODY1X01JUElfVUlfQ0xLX1BSRVBBUkVfUkVHCQkweDQ4MmQKKyNkZWZpbmUgT1Y4ODY1 X01JUElfVUlfQ0xLX1BPU1RfTUlOX1JFRwkJMHg0ODJlCisjZGVmaW5lIE9WODg2NV9NSVBJX1VJ X0NMS19UUkFJTF9NSU5fUkVHCTB4NDgyZgorI2RlZmluZSBPVjg4NjVfTUlQSV9VSV9MUFhfUF9N SU5fUkVHCQkweDQ4MzAKKyNkZWZpbmUgT1Y4ODY1X01JUElfVUlfSFNfUFJFUEFSRV9SRUcJCTB4 NDgzMQorI2RlZmluZSBPVjg4NjVfTUlQSV9VSV9IU19FWElUX01JTl9SRUcJCTB4NDgzMgorI2Rl ZmluZSBPVjg4NjVfTUlQSV9QS1RfU1RBUlRfU0laRV9SRUcJCTB4NDgzMworCisjZGVmaW5lIE9W ODg2NV9NSVBJX1BDTEtfUEVSSU9EX1JFRwkJMHg0ODM3CisjZGVmaW5lIE9WODg2NV9NSVBJX0xQ X0dQSU8wX1JFRwkJMHg0ODM4CisjZGVmaW5lIE9WODg2NV9NSVBJX0xQX0dQSU8xX1JFRwkJMHg0 ODM5CisKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RSTDNDX1JFRwkJCTB4NDgzYworI2RlZmluZSBP Vjg4NjVfTUlQSV9MUF9HUElPNF9SRUcJCTB4NDgzZAorCisjZGVmaW5lIE9WODg2NV9NSVBJX0NU Ukw0QV9SRUcJCQkweDQ4NGEKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RSTDRCX1JFRwkJCTB4NDg0 YgorI2RlZmluZSBPVjg4NjVfTUlQSV9DVFJMNENfUkVHCQkJMHg0ODRjCisjZGVmaW5lIE9WODg2 NV9NSVBJX0xBTkVfVEVTVF9QQVRURVJOX1JFRwkweDQ4NGQKKyNkZWZpbmUgT1Y4ODY1X01JUElf RlJBTUVfRU5EX0RFTEFZX1JFRwkJMHg0ODRlCisjZGVmaW5lIE9WODg2NV9NSVBJX0NMT0NLX1RF U1RfUEFUVEVSTl9SRUcJMHg0ODRmCisjZGVmaW5lIE9WODg2NV9NSVBJX0xBTkVfU0VMMDFfUkVH CQkweDQ4NTAKKyNkZWZpbmUgT1Y4ODY1X01JUElfTEFORV9TRUwwMV9MQU5FMCh2KQkJKCgodikg PDwgMCkgJiBHRU5NQVNLKDIsIDApKQorI2RlZmluZSBPVjg4NjVfTUlQSV9MQU5FX1NFTDAxX0xB TkUxKHYpCQkoKCh2KSA8PCA0KSAmIEdFTk1BU0soNiwgNCkpCisjZGVmaW5lIE9WODg2NV9NSVBJ X0xBTkVfU0VMMjNfUkVHCQkweDQ4NTEKKyNkZWZpbmUgT1Y4ODY1X01JUElfTEFORV9TRUwyM19M QU5FMih2KQkJKCgodikgPDwgMCkgJiBHRU5NQVNLKDIsIDApKQorI2RlZmluZSBPVjg4NjVfTUlQ SV9MQU5FX1NFTDIzX0xBTkUzKHYpCQkoKCh2KSA8PCA0KSAmIEdFTk1BU0soNiwgNCkpCisKKy8q IElTUCAqLworCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RSTDBfUkVHCQkJMHg1MDAwCisjZGVmaW5l IE9WODg2NV9JU1BfQ1RSTDBfTEVOQ19FTgkJQklUKDcpCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RS TDBfV0hJVEVfQkFMQU5DRV9FTglCSVQoNCkKKyNkZWZpbmUgT1Y4ODY1X0lTUF9DVFJMMF9EUENf QkxBQ0tfRU4JCUJJVCgyKQorI2RlZmluZSBPVjg4NjVfSVNQX0NUUkwwX0RQQ19XSElURV9FTgkJ QklUKDEpCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RSTDFfUkVHCQkJMHg1MDAxCisjZGVmaW5lIE9W ODg2NV9JU1BfQ1RSTDFfQkxDX0VOCQkJQklUKDApCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RSTDJf UkVHCQkJMHg1MDAyCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RSTDJfREVCVUcJCQlCSVQoMykKKyNk ZWZpbmUgT1Y4ODY1X0lTUF9DVFJMMl9WQVJJT1BJWEVMX0VOCQlCSVQoMikKKyNkZWZpbmUgT1Y4 ODY1X0lTUF9DVFJMMl9WU1lOQ19MQVRDSF9FTgkJQklUKDApCisjZGVmaW5lIE9WODg2NV9JU1Bf Q1RSTDNfUkVHCQkJMHg1MDAzCisKKyNkZWZpbmUgT1Y4ODY1X0lTUF9HQUlOX1JFRF9IX1JFRwkJ MHg1MDE4CisjZGVmaW5lIE9WODg2NV9JU1BfR0FJTl9SRURfSCh2KQkJKCgodikgJiBHRU5NQVNL KDEzLCA2KSkgPj4gNikKKyNkZWZpbmUgT1Y4ODY1X0lTUF9HQUlOX1JFRF9MX1JFRwkJMHg1MDE5 CisjZGVmaW5lIE9WODg2NV9JU1BfR0FJTl9SRURfTCh2KQkJKCh2KSAmIEdFTk1BU0soNSwgMCkp CisjZGVmaW5lIE9WODg2NV9JU1BfR0FJTl9HUkVFTl9IX1JFRwkJMHg1MDFhCisjZGVmaW5lIE9W ODg2NV9JU1BfR0FJTl9HUkVFTl9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTMsIDYpKSA+PiA2KQor I2RlZmluZSBPVjg4NjVfSVNQX0dBSU5fR1JFRU5fTF9SRUcJCTB4NTAxYgorI2RlZmluZSBPVjg4 NjVfSVNQX0dBSU5fR1JFRU5fTCh2KQkJKCh2KSAmIEdFTk1BU0soNSwgMCkpCisjZGVmaW5lIE9W ODg2NV9JU1BfR0FJTl9CTFVFX0hfUkVHCQkweDUwMWMKKyNkZWZpbmUgT1Y4ODY1X0lTUF9HQUlO X0JMVUVfSCh2KQkJKCgodikgJiBHRU5NQVNLKDEzLCA2KSkgPj4gNikKKyNkZWZpbmUgT1Y4ODY1 X0lTUF9HQUlOX0JMVUVfTF9SRUcJCTB4NTAxZAorI2RlZmluZSBPVjg4NjVfSVNQX0dBSU5fQkxV RV9MKHYpCQkoKHYpICYgR0VOTUFTSyg1LCAwKSkKKworLyogVmFyaW9QaXhlbCAqLworCisjZGVm aW5lIE9WODg2NV9WQVBfQ1RSTDBfUkVHCQkJMHg1OTAwCisjZGVmaW5lIE9WODg2NV9WQVBfQ1RS TDFfUkVHCQkJMHg1OTAxCisjZGVmaW5lIE9WODg2NV9WQVBfQ1RSTDFfSFNVQl9DT0VGKHYpCQko KCgodikgLSAxKSA8PCAyKSAmIFwKKwkJCQkJCSBHRU5NQVNLKDMsIDIpKQorI2RlZmluZSBPVjg4 NjVfVkFQX0NUUkwxX1ZTVUJfQ09FRih2KQkJKCgodikgLSAxKSAmIEdFTk1BU0soMSwgMCkpCisK Ky8qIFByZS1EU1AgKi8KKworI2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1JFRwkJCTB4NWUwMAor I2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fRU4JCUJJVCg3KQorI2RlZmluZSBPVjg4 NjVfUFJFX0NUUkwwX1JPTExJTkdfQkFSX0VOCQlCSVQoNikKKyNkZWZpbmUgT1Y4ODY1X1BSRV9D VFJMMF9UUkFOU1BBUkVOVF9NT0RFCUJJVCg1KQorI2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1NR VUFSRVNfQldfTU9ERQlCSVQoNCkKKyNkZWZpbmUgT1Y4ODY1X1BSRV9DVFJMMF9QQVRURVJOX0NP TE9SX0JBUlMJMAorI2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fUkFORE9NX0RBVEEJ MQorI2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fQ09MT1JfU1FVQVJFUwkyCisjZGVm aW5lIE9WODg2NV9QUkVfQ1RSTDBfUEFUVEVSTl9CTEFDSwkJMworCisvKiBNYWNyb3MgKi8KKwor I2RlZmluZSBvdjg4NjVfc3ViZGV2X3NlbnNvcihzdWJkZXYpIFwKKwljb250YWluZXJfb2Yoc3Vi ZGV2LCBzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciwgc3ViZGV2KQorCisjZGVmaW5lIG92ODg2NV9jdHJs X3N1YmRldihjdHJsKSBcCisJKCZjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IG92 ODg2NV9zZW5zb3IsIGN0cmxzLmhhbmRsZXIpLT5zdWJkZXYpCisKKy8qIERhdGEgc3RydWN0dXJl cyAqLworCitzdHJ1Y3Qgb3Y4ODY1X3JlZ2lzdGVyX3ZhbHVlIHsKKwl1MTYgYWRkcmVzczsKKwl1 OCB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgZGVsYXlfbXM7Cit9OworCisvKgorICogUExMMSBDbG9j ayBUcmVlOgorICoKKyAqICstPCBFWFRDTEsKKyAqIHwKKyAqICstKyBwbGxfcHJlX2Rpdl9oYWxm ICgweDMwYSBbMF0pCisgKiAgIHwKKyAqICAgKy0rIHBsbF9wcmVfZGl2ICgweDMwMCBbMjowXSwg c3BlY2lhbCB2YWx1ZXM6CisgKiAgICAgfCAgICAgICAgICAgICAgMDogMSwgMTogMS41LCAzOiAy LjUsIDQ6IDMsIDU6IDQsIDc6IDgpCisgKiAgICAgKy0rIHBsbF9tdWwgKDB4MzAxIFsxOjBdLCAw eDMwMiBbNzowXSkKKyAqICAgICAgIHwKKyAqICAgICAgICstKyBtX2RpdiAoMHgzMDMgWzM6MF0p CisgKiAgICAgICB8IHwKKyAqICAgICAgIHwgKy0+IFBIWV9TQ0xLCisgKiAgICAgICB8IHwKKyAq ICAgICAgIHwgKy0rIG1pcGlfZGl2ICgweDMwNCBbMTowXSwgc3BlY2lhbCB2YWx1ZXM6IDA6IDQs IDE6IDUsIDI6IDYsIDM6IDgpCisgKiAgICAgICB8ICAgfAorICogICAgICAgfCAgICstKyBwY2xr X2RpdiAoMHgzMDIwIFszXSkKKyAqICAgICAgIHwgICAgIHwKKyAqICAgICAgIHwgICAgICstPiBQ Q0xLCisgKiAgICAgICB8CisgKiAgICAgICArLSsgc3lzX3ByZV9kaXYgKDB4MzA1IFsxOjBdLCBz cGVjaWFsIHZhbHVlczogMDogMywgMTogNCwgMjogNSwgMzogNikKKyAqICAgICAgICAgfAorICog ICAgICAgICArLSsgc3lzX2RpdiAoMHgzMDYgWzBdKQorICogICAgICAgICAgIHwKKyAqICAgICAg ICAgICArLSsgc3lzX3NlbCAoMHgzMDMyIFs3XSwgMDogUExMMSwgMTogUExMMikKKyAqICAgICAg ICAgICAgIHwKKyAqICAgICAgICAgICAgICstKyBzY2xrX3NlbCAoMHgzMDMzIFsxXSwgMDogc3lz X3NlbCwgMTogUExMMiBEQUNfQ0xLKQorICogICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAg ICAgICstKyBzY2xrX3ByZV9kaXYgKDB4MzEwNiBbMzoyXSwgc3BlY2lhbCB2YWx1ZXM6CisgKiAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIDA6IDEsIDE6IDIsIDI6IDQsIDM6IDEpCisg KiAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICstKyBzY2xrX2RpdiAoMHgz MTA2IFs3OjRdLCBzcGVjaWFsIHZhbHVlczogMDogMSkKKyAqICAgICAgICAgICAgICAgICAgIHwK KyAqICAgICAgICAgICAgICAgICAgICstPiBTQ0xLCisgKi8KKworc3RydWN0IG92ODg2NV9wbGwx X2NvbmZpZyB7CisJdW5zaWduZWQgaW50IHBsbF9wcmVfZGl2X2hhbGY7CisJdW5zaWduZWQgaW50 IHBsbF9wcmVfZGl2OworCXVuc2lnbmVkIGludCBwbGxfbXVsOworCXVuc2lnbmVkIGludCBtX2Rp djsKKwl1bnNpZ25lZCBpbnQgbWlwaV9kaXY7CisJdW5zaWduZWQgaW50IHBjbGtfZGl2OworCXVu c2lnbmVkIGludCBzeXNfcHJlX2RpdjsKKwl1bnNpZ25lZCBpbnQgc3lzX2RpdjsKK307CisKKy8q CisgKiBQTEwyIENsb2NrIFRyZWU6CisgKgorICogKy08IEVYVENMSworICogfAorICogKy0rIHBs bF9wcmVfZGl2X2hhbGYgKDB4MzEyIFs0XSkKKyAqICAgfAorICogICArLSsgcGxsX3ByZV9kaXYg KDB4MzBiIFsyOjBdLCBzcGVjaWFsIHZhbHVlczoKKyAqICAgICB8ICAgICAgICAgICAgICAwOiAx LCAxOiAxLjUsIDM6IDIuNSwgNDogMywgNTogNCwgNzogOCkKKyAqICAgICArLSsgcGxsX211bCAo MHgzMGMgWzE6MF0sIDB4MzBkIFs3OjBdKQorICogICAgICAgfAorICogICAgICAgKy0rIGRhY19k aXYgKDB4MzEyIFszOjBdKQorICogICAgICAgfCB8CisgKiAgICAgICB8ICstPiBEQUNfQ0xLCisg KiAgICAgICB8CisgKiAgICAgICArLSsgc3lzX3ByZV9kaXYgKDB4MzBmIFszOjBdKQorICogICAg ICAgICB8CisgKiAgICAgICAgICstKyBzeXNfZGl2ICgweDMwZSBbMjowXSwgc3BlY2lhbCB2YWx1 ZXM6CisgKiAgICAgICAgICAgfCAgICAgICAgICAwOiAxLCAxOiAxLjUsIDM6IDIuNSwgNDogMywg NTogMy41LCA2OiA0LCA3OjUpCisgKiAgICAgICAgICAgfAorICogICAgICAgICAgICstKyBzeXNf c2VsICgweDMwMzIgWzddLCAwOiBQTEwxLCAxOiBQTEwyKQorICogICAgICAgICAgICAgfAorICog ICAgICAgICAgICAgKy0rIHNjbGtfc2VsICgweDMwMzMgWzFdLCAwOiBzeXNfc2VsLCAxOiBQTEwy IERBQ19DTEspCisgKiAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgKy0rIHNjbGtf cHJlX2RpdiAoMHgzMTA2IFszOjJdLCBzcGVjaWFsIHZhbHVlczoKKyAqICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgMDogMSwgMTogMiwgMjogNCwgMzogMSkKKyAqICAgICAgICAgICAg ICAgICB8CisgKiAgICAgICAgICAgICAgICAgKy0rIHNjbGtfZGl2ICgweDMxMDYgWzc6NF0sIHNw ZWNpYWwgdmFsdWVzOiAwOiAxKQorICogICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAg ICAgICAgICAgKy0+IFNDTEsKKyAqLworCitzdHJ1Y3Qgb3Y4ODY1X3BsbDJfY29uZmlnIHsKKwl1 bnNpZ25lZCBpbnQgcGxsX3ByZV9kaXZfaGFsZjsKKwl1bnNpZ25lZCBpbnQgcGxsX3ByZV9kaXY7 CisJdW5zaWduZWQgaW50IHBsbF9tdWw7CisJdW5zaWduZWQgaW50IGRhY19kaXY7CisJdW5zaWdu ZWQgaW50IHN5c19wcmVfZGl2OworCXVuc2lnbmVkIGludCBzeXNfZGl2OworfTsKKworc3RydWN0 IG92ODg2NV9zY2xrX2NvbmZpZyB7CisJdW5zaWduZWQgaW50IHN5c19zZWw7CisJdW5zaWduZWQg aW50IHNjbGtfc2VsOworCXVuc2lnbmVkIGludCBzY2xrX3ByZV9kaXY7CisJdW5zaWduZWQgaW50 IHNjbGtfZGl2OworfTsKKworLyoKKyAqIEdlbmVyYWwgZm9ybXVsYXMgZm9yIChhcnJheS1jZW50 ZXJlZCkgbW9kZSBjYWxjdWxhdGlvbjoKKyAqIC0gcGhvdG9fYXJyYXlfd2lkdGggPSAzMjk2Cisg KiAtIGNyb3Bfc3RhcnRfeCA9IChwaG90b19hcnJheV93aWR0aCAtIG91dHB1dF9zaXplX3gpIC8g MgorICogLSBjcm9wX2VuZF94ID0gY3JvcF9zdGFydF94ICsgb2Zmc2V0X3ggKyBvdXRwdXRfc2l6 ZV94IC0gMQorICoKKyAqIC0gcGhvdG9fYXJyYXlfaGVpZ2h0ID0gMjQ4MAorICogLSBjcm9wX3N0 YXJ0X3kgPSAocGhvdG9fYXJyYXlfaGVpZ2h0IC0gb3V0cHV0X3NpemVfeSkgLyAyCisgKiAtIGNy b3BfZW5kX3kgPSBjcm9wX3N0YXJ0X3kgKyBvZmZzZXRfeSArIG91dHB1dF9zaXplX3kgLSAxCisg Ki8KKworc3RydWN0IG92ODg2NV9tb2RlIHsKKwl1bnNpZ25lZCBpbnQgY3JvcF9zdGFydF94Owor CXVuc2lnbmVkIGludCBvZmZzZXRfeDsKKwl1bnNpZ25lZCBpbnQgb3V0cHV0X3NpemVfeDsKKwl1 bnNpZ25lZCBpbnQgY3JvcF9lbmRfeDsKKwl1bnNpZ25lZCBpbnQgaHRzOworCisJdW5zaWduZWQg aW50IGNyb3Bfc3RhcnRfeTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0X3k7CisJdW5zaWduZWQgaW50 IG91dHB1dF9zaXplX3k7CisJdW5zaWduZWQgaW50IGNyb3BfZW5kX3k7CisJdW5zaWduZWQgaW50 IHZ0czsKKworCS8qIFdpdGggYXV0byBzaXplLCBvbmx5IG91dHB1dCBhbmQgdG90YWwgc2l6ZXMg bmVlZCB0byBiZSBzZXQuICovCisJYm9vbCBzaXplX2F1dG87CisJdW5zaWduZWQgaW50IHNpemVf YXV0b19ib3VuZGFyeV94OworCXVuc2lnbmVkIGludCBzaXplX2F1dG9fYm91bmRhcnlfeTsKKwor CWJvb2wgYmlubmluZ194OworCWJvb2wgYmlubmluZ195OworCWJvb2wgdmFyaW9waXhlbDsKKwl1 bnNpZ25lZCBpbnQgdmFyaW9waXhlbF9oc3ViX2NvZWY7CisJdW5zaWduZWQgaW50IHZhcmlvcGl4 ZWxfdnN1Yl9jb2VmOworCisJLyogQml0cyBmb3IgdGhlIGZvcm1hdCByZWdpc3RlciwgdXNlZCBm b3IgYmlubmluZy4gKi8KKwlib29sIHN5bmNfaGJpbjsKKwlib29sIGhvcnpfdmFyMjsKKworCXVu c2lnbmVkIGludCBpbmNfeF9vZGQ7CisJdW5zaWduZWQgaW50IGluY194X2V2ZW47CisJdW5zaWdu ZWQgaW50IGluY195X29kZDsKKwl1bnNpZ25lZCBpbnQgaW5jX3lfZXZlbjsKKworCXVuc2lnbmVk IGludCB2Zmlmb19yZWFkX3N0YXJ0OworCisJdW5zaWduZWQgaW50IGFibGNfbnVtOworCXVuc2ln bmVkIGludCB6bGluZV9udW07CisKKwl1bnNpZ25lZCBpbnQgYmxjX3RvcF96ZXJvX2xpbmVfc3Rh cnQ7CisJdW5zaWduZWQgaW50IGJsY190b3BfemVyb19saW5lX251bTsKKwl1bnNpZ25lZCBpbnQg YmxjX3RvcF9ibGFja19saW5lX3N0YXJ0OworCXVuc2lnbmVkIGludCBibGNfdG9wX2JsYWNrX2xp bmVfbnVtOworCisJdW5zaWduZWQgaW50IGJsY19ib3R0b21femVyb19saW5lX3N0YXJ0OworCXVu c2lnbmVkIGludCBibGNfYm90dG9tX3plcm9fbGluZV9udW07CisJdW5zaWduZWQgaW50IGJsY19i b3R0b21fYmxhY2tfbGluZV9zdGFydDsKKwl1bnNpZ25lZCBpbnQgYmxjX2JvdHRvbV9ibGFja19s aW5lX251bTsKKworCXU4IGJsY19jb2xfc2hpZnRfbWFzazsKKworCXVuc2lnbmVkIGludCBibGNf YW5jaG9yX2xlZnRfc3RhcnQ7CisJdW5zaWduZWQgaW50IGJsY19hbmNob3JfbGVmdF9lbmQ7CisJ dW5zaWduZWQgaW50IGJsY19hbmNob3JfcmlnaHRfc3RhcnQ7CisJdW5zaWduZWQgaW50IGJsY19h bmNob3JfcmlnaHRfZW5kOworCisJc3RydWN0IHY0bDJfZnJhY3QgZnJhbWVfaW50ZXJ2YWw7CisK Kwljb25zdCBzdHJ1Y3Qgb3Y4ODY1X3BsbDFfY29uZmlnICpwbGwxX2NvbmZpZzsKKwljb25zdCBz dHJ1Y3Qgb3Y4ODY1X3BsbDJfY29uZmlnICpwbGwyX2NvbmZpZzsKKwljb25zdCBzdHJ1Y3Qgb3Y4 ODY1X3NjbGtfY29uZmlnICpzY2xrX2NvbmZpZzsKKworCWNvbnN0IHN0cnVjdCBvdjg4NjVfcmVn aXN0ZXJfdmFsdWUgKnJlZ2lzdGVyX3ZhbHVlczsKKwl1bnNpZ25lZCBpbnQgcmVnaXN0ZXJfdmFs dWVzX2NvdW50OworfTsKKworc3RydWN0IG92ODg2NV9zdGF0ZSB7CisJY29uc3Qgc3RydWN0IG92 ODg2NV9tb2RlICptb2RlOworCXUzMiBtYnVzX2NvZGU7CisKKwlib29sIHN0cmVhbWluZzsKK307 CisKK3N0cnVjdCBvdjg4NjVfY3RybHMgeworCXN0cnVjdCB2NGwyX2N0cmwgKmxpbmtfZnJlcTsK KwlzdHJ1Y3QgdjRsMl9jdHJsICpwaXhlbF9yYXRlOworCisJc3RydWN0IHY0bDJfY3RybF9oYW5k bGVyIGhhbmRsZXI7Cit9OworCitzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciB7CisJc3RydWN0IGRldmlj ZSAqZGV2OworCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50OworCXN0cnVjdCBncGlvX2Rl c2MgKnJlc2V0OworCXN0cnVjdCBncGlvX2Rlc2MgKnBvd2VyZG93bjsKKwlzdHJ1Y3QgcmVndWxh dG9yICphdmRkOworCXN0cnVjdCByZWd1bGF0b3IgKmR2ZGQ7CisJc3RydWN0IHJlZ3VsYXRvciAq ZG92ZGQ7CisJc3RydWN0IGNsayAqZXh0Y2xrOworCisJc3RydWN0IHY0bDJfZndub2RlX2VuZHBv aW50IGVuZHBvaW50OworCXN0cnVjdCB2NGwyX3N1YmRldiBzdWJkZXY7CisJc3RydWN0IG1lZGlh X3BhZCBwYWQ7CisKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwlzdHJ1Y3Qgb3Y4ODY1X3N0YXRl IHN0YXRlOworCXN0cnVjdCBvdjg4NjVfY3RybHMgY3RybHM7Cit9OworCisvKiBTdGF0aWMgZGVm aW5pdGlvbnMgKi8KKworLyoKKyAqIEVYVENMSyA9IDI0IE1IegorICogUEhZX1NDTEsgPSA3MjAg TUh6CisgKiBNSVBJX1BDTEsgPSA5MCBNSHoKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvdjg4 NjVfcGxsMV9jb25maWcgb3Y4ODY1X3BsbDFfY29uZmlnX25hdGl2ZSA9IHsKKwkucGxsX3ByZV9k aXZfaGFsZgk9IDEsCisJLnBsbF9wcmVfZGl2CQk9IDAsCisJLnBsbF9tdWwJCT0gMzAsCisJLm1f ZGl2CQkJPSAxLAorCS5taXBpX2RpdgkJPSAzLAorCS5wY2xrX2RpdgkJPSAxLAorCS5zeXNfcHJl X2RpdgkJPSAxLAorCS5zeXNfZGl2CQk9IDIsCit9OworCisvKgorICogRVhUQ0xLID0gMjQgTUh6 CisgKiBEQUNfQ0xLID0gMzYwIE1IegorICogU0NMSyA9IDE0NCBNSHoKKyAqLworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG92ODg2NV9wbGwyX2NvbmZpZyBvdjg4NjVfcGxsMl9jb25maWdfbmF0aXZl ID0geworCS5wbGxfcHJlX2Rpdl9oYWxmCT0gMSwKKwkucGxsX3ByZV9kaXYJCT0gMCwKKwkucGxs X211bAkJPSAzMCwKKwkuZGFjX2RpdgkJPSAyLAorCS5zeXNfcHJlX2RpdgkJPSA1LAorCS5zeXNf ZGl2CQk9IDAsCit9OworCisvKgorICogRVhUQ0xLID0gMjQgTUh6CisgKiBEQUNfQ0xLID0gMzYw IE1IegorICogU0NMSyA9IDgwIE1IegorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y4ODY1 X3BsbDJfY29uZmlnIG92ODg2NV9wbGwyX2NvbmZpZ19iaW5uaW5nID0geworCS5wbGxfcHJlX2Rp dl9oYWxmCT0gMSwKKwkucGxsX3ByZV9kaXYJCT0gMCwKKwkucGxsX211bAkJPSAzMCwKKwkuZGFj X2RpdgkJPSAyLAorCS5zeXNfcHJlX2RpdgkJPSAxMCwKKwkuc3lzX2RpdgkJPSAwLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvdjg4NjVfc2Nsa19jb25maWcgb3Y4ODY1X3NjbGtfY29uZmln X25hdGl2ZSA9IHsKKwkuc3lzX3NlbAkJPSAxLAorCS5zY2xrX3NlbAkJPSAwLAorCS5zY2xrX3By ZV9kaXYJCT0gMCwKKwkuc2Nsa19kaXYJCT0gMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b3Y4ODY1X3JlZ2lzdGVyX3ZhbHVlIG92ODg2NV9yZWdpc3Rlcl92YWx1ZXNfbmF0aXZlW10gPSB7 CisJLyogU2Vuc29yICovCisKKwl7IDB4MzcwMCwgMHg0OCB9LAorCXsgMHgzNzAxLCAweDE4IH0s CisJeyAweDM3MDIsIDB4NTAgfSwKKwl7IDB4MzcwMywgMHgzMiB9LAorCXsgMHgzNzA0LCAweDI4 IH0sCisJeyAweDM3MDYsIDB4NzAgfSwKKwl7IDB4MzcwNywgMHgwOCB9LAorCXsgMHgzNzA4LCAw eDQ4IH0sCisJeyAweDM3MDksIDB4ODAgfSwKKwl7IDB4MzcwYSwgMHgwMSB9LAorCXsgMHgzNzBi LCAweDcwIH0sCisJeyAweDM3MGMsIDB4MDcgfSwKKwl7IDB4MzcxOCwgMHgxNCB9LAorCXsgMHgz NzEyLCAweDQ0IH0sCisJeyAweDM3MWUsIDB4MzEgfSwKKwl7IDB4MzcxZiwgMHg3ZiB9LAorCXsg MHgzNzIwLCAweDBhIH0sCisJeyAweDM3MjEsIDB4MGEgfSwKKwl7IDB4MzcyNCwgMHgwNCB9LAor CXsgMHgzNzI1LCAweDA0IH0sCisJeyAweDM3MjYsIDB4MGMgfSwKKwl7IDB4MzcyOCwgMHgwYSB9 LAorCXsgMHgzNzI5LCAweDAzIH0sCisJeyAweDM3MmEsIDB4MDYgfSwKKwl7IDB4MzcyYiwgMHhh NiB9LAorCXsgMHgzNzJjLCAweGE2IH0sCisJeyAweDM3MmQsIDB4YTYgfSwKKwl7IDB4MzcyZSwg MHgwYyB9LAorCXsgMHgzNzJmLCAweDIwIH0sCisJeyAweDM3MzAsIDB4MDIgfSwKKwl7IDB4Mzcz MSwgMHgwYyB9LAorCXsgMHgzNzMyLCAweDI4IH0sCisJeyAweDM3MzYsIDB4MzAgfSwKKwl7IDB4 MzczYSwgMHgwNCB9LAorCXsgMHgzNzNiLCAweDE4IH0sCisJeyAweDM3M2MsIDB4MTQgfSwKKwl7 IDB4MzczZSwgMHgwNiB9LAorCXsgMHgzNzVhLCAweDBjIH0sCisJeyAweDM3NWIsIDB4MjYgfSwK Kwl7IDB4Mzc1ZCwgMHgwNCB9LAorCXsgMHgzNzVmLCAweDI4IH0sCisJeyAweDM3NjcsIDB4MWUg fSwKKwl7IDB4Mzc3MiwgMHg0NiB9LAorCXsgMHgzNzczLCAweDA0IH0sCisJeyAweDM3NzQsIDB4 MmMgfSwKKwl7IDB4Mzc3NSwgMHgxMyB9LAorCXsgMHgzNzc2LCAweDEwIH0sCisJeyAweDM3YTAs IDB4ODggfSwKKwl7IDB4MzdhMSwgMHg3YSB9LAorCXsgMHgzN2EyLCAweDdhIH0sCisJeyAweDM3 YTMsIDB4MDIgfSwKKwl7IDB4MzdhNSwgMHgwOSB9LAorCXsgMHgzN2E3LCAweDg4IH0sCisJeyAw eDM3YTgsIDB4YjAgfSwKKwl7IDB4MzdhOSwgMHhiMCB9LAorCXsgMHgzN2FhLCAweDg4IH0sCisJ eyAweDM3YWIsIDB4NWMgfSwKKwl7IDB4MzdhYywgMHg1YyB9LAorCXsgMHgzN2FkLCAweDU1IH0s CisJeyAweDM3YWUsIDB4MTkgfSwKKwl7IDB4MzdhZiwgMHgxOSB9LAorCXsgMHgzN2IzLCAweDg0 IH0sCisJeyAweDM3YjQsIDB4ODQgfSwKKwl7IDB4MzdiNSwgMHg2NiB9LAorCisJLyogUFNSQU0g Ki8KKworCXsgT1Y4ODY1X1BTUkFNX0NUUkw4X1JFRywgMHgxNiB9LAorCisJLyogQURDIFN5bmMg Ki8KKworCXsgMHg0NTAwLCAweDY4IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG92ODg2 NV9yZWdpc3Rlcl92YWx1ZSBvdjg4NjVfcmVnaXN0ZXJfdmFsdWVzX2Jpbm5pbmdbXSA9IHsKKwkv KiBTZW5zb3IgKi8KKworCXsgMHgzNzAwLCAweDI0IH0sCisJeyAweDM3MDEsIDB4MGMgfSwKKwl7 IDB4MzcwMiwgMHgyOCB9LAorCXsgMHgzNzAzLCAweDE5IH0sCisJeyAweDM3MDQsIDB4MTQgfSwK Kwl7IDB4MzcwNiwgMHgzOCB9LAorCXsgMHgzNzA3LCAweDA0IH0sCisJeyAweDM3MDgsIDB4MjQg fSwKKwl7IDB4MzcwOSwgMHg0MCB9LAorCXsgMHgzNzBhLCAweDAwIH0sCisJeyAweDM3MGIsIDB4 YjggfSwKKwl7IDB4MzcwYywgMHgwNCB9LAorCXsgMHgzNzE4LCAweDEyIH0sCisJeyAweDM3MTIs IDB4NDIgfSwKKwl7IDB4MzcxZSwgMHgxOSB9LAorCXsgMHgzNzFmLCAweDQwIH0sCisJeyAweDM3 MjAsIDB4MDUgfSwKKwl7IDB4MzcyMSwgMHgwNSB9LAorCXsgMHgzNzI0LCAweDAyIH0sCisJeyAw eDM3MjUsIDB4MDIgfSwKKwl7IDB4MzcyNiwgMHgwNiB9LAorCXsgMHgzNzI4LCAweDA1IH0sCisJ eyAweDM3MjksIDB4MDIgfSwKKwl7IDB4MzcyYSwgMHgwMyB9LAorCXsgMHgzNzJiLCAweDUzIH0s CisJeyAweDM3MmMsIDB4YTMgfSwKKwl7IDB4MzcyZCwgMHg1MyB9LAorCXsgMHgzNzJlLCAweDA2 IH0sCisJeyAweDM3MmYsIDB4MTAgfSwKKwl7IDB4MzczMCwgMHgwMSB9LAorCXsgMHgzNzMxLCAw eDA2IH0sCisJeyAweDM3MzIsIDB4MTQgfSwKKwl7IDB4MzczNiwgMHgyMCB9LAorCXsgMHgzNzNh LCAweDAyIH0sCisJeyAweDM3M2IsIDB4MGMgfSwKKwl7IDB4MzczYywgMHgwYSB9LAorCXsgMHgz NzNlLCAweDAzIH0sCisJeyAweDM3NWEsIDB4MDYgfSwKKwl7IDB4Mzc1YiwgMHgxMyB9LAorCXsg MHgzNzVkLCAweDAyIH0sCisJeyAweDM3NWYsIDB4MTQgfSwKKwl7IDB4Mzc2NywgMHgxYyB9LAor CXsgMHgzNzcyLCAweDIzIH0sCisJeyAweDM3NzMsIDB4MDIgfSwKKwl7IDB4Mzc3NCwgMHgxNiB9 LAorCXsgMHgzNzc1LCAweDEyIH0sCisJeyAweDM3NzYsIDB4MDggfSwKKwl7IDB4MzdhMCwgMHg0 NCB9LAorCXsgMHgzN2ExLCAweDNkIH0sCisJeyAweDM3YTIsIDB4M2QgfSwKKwl7IDB4MzdhMywg MHgwMSB9LAorCXsgMHgzN2E1LCAweDA4IH0sCisJeyAweDM3YTcsIDB4NDQgfSwKKwl7IDB4Mzdh OCwgMHg1OCB9LAorCXsgMHgzN2E5LCAweDU4IH0sCisJeyAweDM3YWEsIDB4NDQgfSwKKwl7IDB4 MzdhYiwgMHgyZSB9LAorCXsgMHgzN2FjLCAweDJlIH0sCisJeyAweDM3YWQsIDB4MzMgfSwKKwl7 IDB4MzdhZSwgMHgwZCB9LAorCXsgMHgzN2FmLCAweDBkIH0sCisJeyAweDM3YjMsIDB4NDIgfSwK Kwl7IDB4MzdiNCwgMHg0MiB9LAorCXsgMHgzN2I1LCAweDMzIH0sCisKKwkvKiBQU1JBTSAqLwor CisJeyBPVjg4NjVfUFNSQU1fQ1RSTDhfUkVHLCAweDBiIH0sCisKKwkvKiBBREMgU3luYyAqLwor CisJeyAweDQ1MDAsIDB4NDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y4ODY1X21v ZGUgb3Y4ODY1X21vZGVzW10gPSB7CisJLyogMzI2NHgyNDQ4ICovCisJeworCQkvKiBIb3Jpem9u dGFsICovCisJCS5vdXRwdXRfc2l6ZV94CQkJPSAzMjY0LAorCQkuaHRzCQkJCT0gMTk0NCwKKwor CQkvKiBWZXJ0aWNhbCAqLworCQkub3V0cHV0X3NpemVfeQkJCT0gMjQ0OCwKKwkJLnZ0cwkJCQk9 IDI0NzAsCisKKwkJLnNpemVfYXV0bwkJCT0gdHJ1ZSwKKwkJLnNpemVfYXV0b19ib3VuZGFyeV94 CQk9IDgsCisJCS5zaXplX2F1dG9fYm91bmRhcnlfeQkJPSA0LAorCisJCS8qIFN1YnNhbXBsZSBp bmNyZWFzZSAqLworCQkuaW5jX3hfb2RkCQkJPSAxLAorCQkuaW5jX3hfZXZlbgkJCT0gMSwKKwkJ LmluY195X29kZAkJCT0gMSwKKwkJLmluY195X2V2ZW4JCQk9IDEsCisKKwkJLyogVkZJRk8gKi8K KwkJLnZmaWZvX3JlYWRfc3RhcnQJCT0gMTYsCisKKwkJLmFibGNfbnVtCQkJPSA0LAorCQkuemxp bmVfbnVtCQkJPSAxLAorCisJCS8qIEJsYWNrIExldmVsICovCisKKwkJLmJsY190b3BfemVyb19s aW5lX3N0YXJ0CT0gMCwKKwkJLmJsY190b3BfemVyb19saW5lX251bQkJPSAyLAorCQkuYmxjX3Rv cF9ibGFja19saW5lX3N0YXJ0CT0gNCwKKwkJLmJsY190b3BfYmxhY2tfbGluZV9udW0JCT0gNCwK KworCQkuYmxjX2JvdHRvbV96ZXJvX2xpbmVfc3RhcnQJPSAyLAorCQkuYmxjX2JvdHRvbV96ZXJv X2xpbmVfbnVtCT0gMiwKKwkJLmJsY19ib3R0b21fYmxhY2tfbGluZV9zdGFydAk9IDgsCisJCS5i bGNfYm90dG9tX2JsYWNrX2xpbmVfbnVtCT0gMiwKKworCQkuYmxjX2FuY2hvcl9sZWZ0X3N0YXJ0 CQk9IDU3NiwKKwkJLmJsY19hbmNob3JfbGVmdF9lbmQJCT0gODMxLAorCQkuYmxjX2FuY2hvcl9y aWdodF9zdGFydAkJPSAxOTg0LAorCQkuYmxjX2FuY2hvcl9yaWdodF9lbmQJCT0gMjIzOSwKKwor CQkvKiBGcmFtZSBJbnRlcnZhbCAqLworCQkuZnJhbWVfaW50ZXJ2YWwJCQk9IHsgMSwgMzAgfSwK KworCQkvKiBQTEwgKi8KKwkJLnBsbDFfY29uZmlnCQkJPSAmb3Y4ODY1X3BsbDFfY29uZmlnX25h dGl2ZSwKKwkJLnBsbDJfY29uZmlnCQkJPSAmb3Y4ODY1X3BsbDJfY29uZmlnX25hdGl2ZSwKKwkJ LnNjbGtfY29uZmlnCQkJPSAmb3Y4ODY1X3NjbGtfY29uZmlnX25hdGl2ZSwKKworCQkvKiBSZWdp c3RlcnMgKi8KKwkJLnJlZ2lzdGVyX3ZhbHVlcwk9IG92ODg2NV9yZWdpc3Rlcl92YWx1ZXNfbmF0 aXZlLAorCQkucmVnaXN0ZXJfdmFsdWVzX2NvdW50CT0KKwkJCUFSUkFZX1NJWkUob3Y4ODY1X3Jl Z2lzdGVyX3ZhbHVlc19uYXRpdmUpLAorCX0sCisJLyogMzI2NHgxODM2ICovCisJeworCQkvKiBI b3Jpem9udGFsICovCisJCS5vdXRwdXRfc2l6ZV94CQkJPSAzMjY0LAorCQkuaHRzCQkJCT0gMjU4 MiwKKworCQkvKiBWZXJ0aWNhbCAqLworCQkub3V0cHV0X3NpemVfeQkJCT0gMTgzNiwKKwkJLnZ0 cwkJCQk9IDIwMDIsCisKKwkJLnNpemVfYXV0bwkJCT0gdHJ1ZSwKKwkJLnNpemVfYXV0b19ib3Vu ZGFyeV94CQk9IDgsCisJCS5zaXplX2F1dG9fYm91bmRhcnlfeQkJPSA0LAorCisJCS8qIFN1YnNh bXBsZSBpbmNyZWFzZSAqLworCQkuaW5jX3hfb2RkCQkJPSAxLAorCQkuaW5jX3hfZXZlbgkJCT0g MSwKKwkJLmluY195X29kZAkJCT0gMSwKKwkJLmluY195X2V2ZW4JCQk9IDEsCisKKwkJLyogVkZJ Rk8gKi8KKwkJLnZmaWZvX3JlYWRfc3RhcnQJCT0gMTYsCisKKwkJLmFibGNfbnVtCQkJPSA0LAor CQkuemxpbmVfbnVtCQkJPSAxLAorCisJCS8qIEJsYWNrIExldmVsICovCisKKwkJLmJsY190b3Bf emVyb19saW5lX3N0YXJ0CT0gMCwKKwkJLmJsY190b3BfemVyb19saW5lX251bQkJPSAyLAorCQku YmxjX3RvcF9ibGFja19saW5lX3N0YXJ0CT0gNCwKKwkJLmJsY190b3BfYmxhY2tfbGluZV9udW0J CT0gNCwKKworCQkuYmxjX2JvdHRvbV96ZXJvX2xpbmVfc3RhcnQJPSAyLAorCQkuYmxjX2JvdHRv bV96ZXJvX2xpbmVfbnVtCT0gMiwKKwkJLmJsY19ib3R0b21fYmxhY2tfbGluZV9zdGFydAk9IDgs CisJCS5ibGNfYm90dG9tX2JsYWNrX2xpbmVfbnVtCT0gMiwKKworCQkuYmxjX2FuY2hvcl9sZWZ0 X3N0YXJ0CQk9IDU3NiwKKwkJLmJsY19hbmNob3JfbGVmdF9lbmQJCT0gODMxLAorCQkuYmxjX2Fu Y2hvcl9yaWdodF9zdGFydAkJPSAxOTg0LAorCQkuYmxjX2FuY2hvcl9yaWdodF9lbmQJCT0gMjIz OSwKKworCQkvKiBGcmFtZSBJbnRlcnZhbCAqLworCQkuZnJhbWVfaW50ZXJ2YWwJCQk9IHsgMSwg MzAgfSwKKworCQkvKiBQTEwgKi8KKwkJLnBsbDFfY29uZmlnCQkJPSAmb3Y4ODY1X3BsbDFfY29u ZmlnX25hdGl2ZSwKKwkJLnBsbDJfY29uZmlnCQkJPSAmb3Y4ODY1X3BsbDJfY29uZmlnX25hdGl2 ZSwKKwkJLnNjbGtfY29uZmlnCQkJPSAmb3Y4ODY1X3NjbGtfY29uZmlnX25hdGl2ZSwKKworCQkv KiBSZWdpc3RlcnMgKi8KKwkJLnJlZ2lzdGVyX3ZhbHVlcwk9IG92ODg2NV9yZWdpc3Rlcl92YWx1 ZXNfbmF0aXZlLAorCQkucmVnaXN0ZXJfdmFsdWVzX2NvdW50CT0KKwkJCUFSUkFZX1NJWkUob3Y4 ODY1X3JlZ2lzdGVyX3ZhbHVlc19uYXRpdmUpLAorCX0sCisJLyogMTYzMngxMjI0ICovCisJewor CQkvKiBIb3Jpem9udGFsICovCisJCS5vdXRwdXRfc2l6ZV94CQkJPSAxNjMyLAorCQkuaHRzCQkJ CT0gMTkyMywKKworCQkvKiBWZXJ0aWNhbCAqLworCQkub3V0cHV0X3NpemVfeQkJCT0gMTIyNCwK KwkJLnZ0cwkJCQk9IDEyNDgsCisKKwkJLnNpemVfYXV0bwkJCT0gdHJ1ZSwKKwkJLnNpemVfYXV0 b19ib3VuZGFyeV94CQk9IDgsCisJCS5zaXplX2F1dG9fYm91bmRhcnlfeQkJPSA4LAorCisJCS8q IFN1YnNhbXBsZSBpbmNyZWFzZSAqLworCQkuaW5jX3hfb2RkCQkJPSAzLAorCQkuaW5jX3hfZXZl bgkJCT0gMSwKKwkJLmluY195X29kZAkJCT0gMywKKwkJLmluY195X2V2ZW4JCQk9IDEsCisKKwkJ LyogQmlubmluZyAqLworCQkuYmlubmluZ195CQkJPSB0cnVlLAorCQkuc3luY19oYmluCQkJPSB0 cnVlLAorCisJCS8qIFZGSUZPICovCisJCS52Zmlmb19yZWFkX3N0YXJ0CQk9IDExNiwKKworCQku YWJsY19udW0JCQk9IDgsCisJCS56bGluZV9udW0JCQk9IDIsCisKKwkJLyogQmxhY2sgTGV2ZWwg Ki8KKworCQkuYmxjX3RvcF96ZXJvX2xpbmVfc3RhcnQJPSAwLAorCQkuYmxjX3RvcF96ZXJvX2xp bmVfbnVtCQk9IDIsCisJCS5ibGNfdG9wX2JsYWNrX2xpbmVfc3RhcnQJPSA0LAorCQkuYmxjX3Rv cF9ibGFja19saW5lX251bQkJPSA0LAorCisJCS5ibGNfYm90dG9tX3plcm9fbGluZV9zdGFydAk9 IDIsCisJCS5ibGNfYm90dG9tX3plcm9fbGluZV9udW0JPSAyLAorCQkuYmxjX2JvdHRvbV9ibGFj a19saW5lX3N0YXJ0CT0gOCwKKwkJLmJsY19ib3R0b21fYmxhY2tfbGluZV9udW0JPSAyLAorCisJ CS5ibGNfYW5jaG9yX2xlZnRfc3RhcnQJCT0gMjg4LAorCQkuYmxjX2FuY2hvcl9sZWZ0X2VuZAkJ PSA0MTUsCisJCS5ibGNfYW5jaG9yX3JpZ2h0X3N0YXJ0CQk9IDk5MiwKKwkJLmJsY19hbmNob3Jf cmlnaHRfZW5kCQk9IDExMTksCisKKwkJLyogRnJhbWUgSW50ZXJ2YWwgKi8KKwkJLmZyYW1lX2lu dGVydmFsCQkJPSB7IDEsIDMwIH0sCisKKwkJLyogUExMICovCisJCS5wbGwxX2NvbmZpZwkJCT0g Jm92ODg2NV9wbGwxX2NvbmZpZ19uYXRpdmUsCisJCS5wbGwyX2NvbmZpZwkJCT0gJm92ODg2NV9w bGwyX2NvbmZpZ19iaW5uaW5nLAorCQkuc2Nsa19jb25maWcJCQk9ICZvdjg4NjVfc2Nsa19jb25m aWdfbmF0aXZlLAorCisJCS8qIFJlZ2lzdGVycyAqLworCQkucmVnaXN0ZXJfdmFsdWVzCT0gb3Y4 ODY1X3JlZ2lzdGVyX3ZhbHVlc19iaW5uaW5nLAorCQkucmVnaXN0ZXJfdmFsdWVzX2NvdW50CT0K KwkJCUFSUkFZX1NJWkUob3Y4ODY1X3JlZ2lzdGVyX3ZhbHVlc19iaW5uaW5nKSwKKwl9LAorCS8q IDgwMHg2MDAgKFNWR0EpICovCisJeworCQkvKiBIb3Jpem9udGFsICovCisJCS5vdXRwdXRfc2l6 ZV94CQkJPSA4MDAsCisJCS5odHMJCQkJPSAxMjUwLAorCisJCS8qIFZlcnRpY2FsICovCisJCS5v dXRwdXRfc2l6ZV95CQkJPSA2MDAsCisJCS52dHMJCQkJPSA2NDAsCisKKwkJLnNpemVfYXV0bwkJ CT0gdHJ1ZSwKKwkJLnNpemVfYXV0b19ib3VuZGFyeV94CQk9IDgsCisJCS5zaXplX2F1dG9fYm91 bmRhcnlfeQkJPSA4LAorCisJCS8qIFN1YnNhbXBsZSBpbmNyZWFzZSAqLworCQkuaW5jX3hfb2Rk CQkJPSAzLAorCQkuaW5jX3hfZXZlbgkJCT0gMSwKKwkJLmluY195X29kZAkJCT0gNSwKKwkJLmlu Y195X2V2ZW4JCQk9IDMsCisKKwkJLyogQmlubmluZyAqLworCQkuYmlubmluZ195CQkJPSB0cnVl LAorCQkudmFyaW9waXhlbAkJCT0gdHJ1ZSwKKwkJLnZhcmlvcGl4ZWxfaHN1Yl9jb2VmCQk9IDIs CisJCS52YXJpb3BpeGVsX3ZzdWJfY29lZgkJPSAxLAorCQkuc3luY19oYmluCQkJPSB0cnVlLAor CQkuaG9yel92YXIyCQkJPSB0cnVlLAorCisJCS8qIFZGSUZPICovCisJCS52Zmlmb19yZWFkX3N0 YXJ0CQk9IDgwLAorCisJCS5hYmxjX251bQkJCT0gOCwKKwkJLnpsaW5lX251bQkJCT0gMiwKKwor CQkvKiBCbGFjayBMZXZlbCAqLworCisJCS5ibGNfdG9wX3plcm9fbGluZV9zdGFydAk9IDAsCisJ CS5ibGNfdG9wX3plcm9fbGluZV9udW0JCT0gMiwKKwkJLmJsY190b3BfYmxhY2tfbGluZV9zdGFy dAk9IDIsCisJCS5ibGNfdG9wX2JsYWNrX2xpbmVfbnVtCQk9IDIsCisKKwkJLmJsY19ib3R0b21f emVyb19saW5lX3N0YXJ0CT0gMCwKKwkJLmJsY19ib3R0b21femVyb19saW5lX251bQk9IDAsCisJ CS5ibGNfYm90dG9tX2JsYWNrX2xpbmVfc3RhcnQJPSA0LAorCQkuYmxjX2JvdHRvbV9ibGFja19s aW5lX251bQk9IDIsCisKKwkJLmJsY19jb2xfc2hpZnRfbWFzawk9IE9WODg2NV9CTENfQ1RSTDFf Q09MX1NISUZUXzEyOCwKKworCQkuYmxjX2FuY2hvcl9sZWZ0X3N0YXJ0CQk9IDI4OCwKKwkJLmJs Y19hbmNob3JfbGVmdF9lbmQJCT0gNDE1LAorCQkuYmxjX2FuY2hvcl9yaWdodF9zdGFydAkJPSA5 OTIsCisJCS5ibGNfYW5jaG9yX3JpZ2h0X2VuZAkJPSAxMTE5LAorCisJCS8qIEZyYW1lIEludGVy dmFsICovCisJCS5mcmFtZV9pbnRlcnZhbAkJCT0geyAxLCA5MCB9LAorCisJCS8qIFBMTCAqLwor CQkucGxsMV9jb25maWcJCQk9ICZvdjg4NjVfcGxsMV9jb25maWdfbmF0aXZlLAorCQkucGxsMl9j b25maWcJCQk9ICZvdjg4NjVfcGxsMl9jb25maWdfYmlubmluZywKKwkJLnNjbGtfY29uZmlnCQkJ PSAmb3Y4ODY1X3NjbGtfY29uZmlnX25hdGl2ZSwKKworCQkvKiBSZWdpc3RlcnMgKi8KKwkJLnJl Z2lzdGVyX3ZhbHVlcwk9IG92ODg2NV9yZWdpc3Rlcl92YWx1ZXNfYmlubmluZywKKwkJLnJlZ2lz dGVyX3ZhbHVlc19jb3VudAk9CisJCQlBUlJBWV9TSVpFKG92ODg2NV9yZWdpc3Rlcl92YWx1ZXNf YmlubmluZyksCisJfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgb3Y4ODY1X21idXNfY29kZXNb XSA9IHsKKwlNRURJQV9CVVNfRk1UX1NCR0dSMTBfMVgxMCwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb3Y4ODY1X3JlZ2lzdGVyX3ZhbHVlIG92ODg2NV9pbml0X3NlcXVlbmNlW10gPSB7CisJ LyogQW5hbG9nICovCisKKwl7IDB4MzYwNCwgMHgwNCB9LAorCXsgMHgzNjAyLCAweDMwIH0sCisJ eyAweDM2MDUsIDB4MDAgfSwKKwl7IDB4MzYwNywgMHgyMCB9LAorCXsgMHgzNjA4LCAweDExIH0s CisJeyAweDM2MDksIDB4NjggfSwKKwl7IDB4MzYwYSwgMHg0MCB9LAorCXsgMHgzNjBjLCAweGRk IH0sCisJeyAweDM2MGUsIDB4MGMgfSwKKwl7IDB4MzYxMCwgMHgwNyB9LAorCXsgMHgzNjEyLCAw eDg2IH0sCisJeyAweDM2MTMsIDB4NTggfSwKKwl7IDB4MzYxNCwgMHgyOCB9LAorCXsgMHgzNjE3 LCAweDQwIH0sCisJeyAweDM2MTgsIDB4NWEgfSwKKwl7IDB4MzYxOSwgMHg5YiB9LAorCXsgMHgz NjFjLCAweDAwIH0sCisJeyAweDM2MWQsIDB4NjAgfSwKKwl7IDB4MzYzMSwgMHg2MCB9LAorCXsg MHgzNjMzLCAweDEwIH0sCisJeyAweDM2MzQsIDB4MTAgfSwKKwl7IDB4MzYzNSwgMHgxMCB9LAor CXsgMHgzNjM2LCAweDEwIH0sCisJeyAweDM2MzgsIDB4ZmYgfSwKKwl7IDB4MzY0MSwgMHg1NSB9 LAorCXsgMHgzNjQ2LCAweDg2IH0sCisJeyAweDM2NDcsIDB4MjcgfSwKKwl7IDB4MzY0YSwgMHgx YiB9LAorCisJLyogU2Vuc29yICovCisKKwl7IDB4MzcwMCwgMHgyNCB9LAorCXsgMHgzNzAxLCAw eDBjIH0sCisJeyAweDM3MDIsIDB4MjggfSwKKwl7IDB4MzcwMywgMHgxOSB9LAorCXsgMHgzNzA0 LCAweDE0IH0sCisJeyAweDM3MDUsIDB4MDAgfSwKKwl7IDB4MzcwNiwgMHgzOCB9LAorCXsgMHgz NzA3LCAweDA0IH0sCisJeyAweDM3MDgsIDB4MjQgfSwKKwl7IDB4MzcwOSwgMHg0MCB9LAorCXsg MHgzNzBhLCAweDAwIH0sCisJeyAweDM3MGIsIDB4YjggfSwKKwl7IDB4MzcwYywgMHgwNCB9LAor CXsgMHgzNzE4LCAweDEyIH0sCisJeyAweDM3MTksIDB4MzEgfSwKKwl7IDB4MzcxMiwgMHg0MiB9 LAorCXsgMHgzNzE0LCAweDEyIH0sCisJeyAweDM3MWUsIDB4MTkgfSwKKwl7IDB4MzcxZiwgMHg0 MCB9LAorCXsgMHgzNzIwLCAweDA1IH0sCisJeyAweDM3MjEsIDB4MDUgfSwKKwl7IDB4MzcyNCwg MHgwMiB9LAorCXsgMHgzNzI1LCAweDAyIH0sCisJeyAweDM3MjYsIDB4MDYgfSwKKwl7IDB4Mzcy OCwgMHgwNSB9LAorCXsgMHgzNzI5LCAweDAyIH0sCisJeyAweDM3MmEsIDB4MDMgfSwKKwl7IDB4 MzcyYiwgMHg1MyB9LAorCXsgMHgzNzJjLCAweGEzIH0sCisJeyAweDM3MmQsIDB4NTMgfSwKKwl7 IDB4MzcyZSwgMHgwNiB9LAorCXsgMHgzNzJmLCAweDEwIH0sCisJeyAweDM3MzAsIDB4MDEgfSwK Kwl7IDB4MzczMSwgMHgwNiB9LAorCXsgMHgzNzMyLCAweDE0IH0sCisJeyAweDM3MzMsIDB4MTAg fSwKKwl7IDB4MzczNCwgMHg0MCB9LAorCXsgMHgzNzM2LCAweDIwIH0sCisJeyAweDM3M2EsIDB4 MDIgfSwKKwl7IDB4MzczYiwgMHgwYyB9LAorCXsgMHgzNzNjLCAweDBhIH0sCisJeyAweDM3M2Us IDB4MDMgfSwKKwl7IDB4Mzc1NSwgMHg0MCB9LAorCXsgMHgzNzU4LCAweDAwIH0sCisJeyAweDM3 NTksIDB4NGMgfSwKKwl7IDB4Mzc1YSwgMHgwNiB9LAorCXsgMHgzNzViLCAweDEzIH0sCisJeyAw eDM3NWMsIDB4NDAgfSwKKwl7IDB4Mzc1ZCwgMHgwMiB9LAorCXsgMHgzNzVlLCAweDAwIH0sCisJ eyAweDM3NWYsIDB4MTQgfSwKKwl7IDB4Mzc2NywgMHgxYyB9LAorCXsgMHgzNzY4LCAweDA0IH0s CisJeyAweDM3NjksIDB4MjAgfSwKKwl7IDB4Mzc2YywgMHhjMCB9LAorCXsgMHgzNzZkLCAweGMw IH0sCisJeyAweDM3NmEsIDB4MDggfSwKKwl7IDB4Mzc2MSwgMHgwMCB9LAorCXsgMHgzNzYyLCAw eDAwIH0sCisJeyAweDM3NjMsIDB4MDAgfSwKKwl7IDB4Mzc2NiwgMHhmZiB9LAorCXsgMHgzNzZi LCAweDQyIH0sCisJeyAweDM3NzIsIDB4MjMgfSwKKwl7IDB4Mzc3MywgMHgwMiB9LAorCXsgMHgz Nzc0LCAweDE2IH0sCisJeyAweDM3NzUsIDB4MTIgfSwKKwl7IDB4Mzc3NiwgMHgwOCB9LAorCXsg MHgzN2EwLCAweDQ0IH0sCisJeyAweDM3YTEsIDB4M2QgfSwKKwl7IDB4MzdhMiwgMHgzZCB9LAor CXsgMHgzN2EzLCAweDAxIH0sCisJeyAweDM3YTQsIDB4MDAgfSwKKwl7IDB4MzdhNSwgMHgwOCB9 LAorCXsgMHgzN2E2LCAweDAwIH0sCisJeyAweDM3YTcsIDB4NDQgfSwKKwl7IDB4MzdhOCwgMHg1 OCB9LAorCXsgMHgzN2E5LCAweDU4IH0sCisJeyAweDM3NjAsIDB4MDAgfSwKKwl7IDB4Mzc2Ziwg MHgwMSB9LAorCXsgMHgzN2FhLCAweDQ0IH0sCisJeyAweDM3YWIsIDB4MmUgfSwKKwl7IDB4Mzdh YywgMHgyZSB9LAorCXsgMHgzN2FkLCAweDMzIH0sCisJeyAweDM3YWUsIDB4MGQgfSwKKwl7IDB4 MzdhZiwgMHgwZCB9LAorCXsgMHgzN2IwLCAweDAwIH0sCisJeyAweDM3YjEsIDB4MDAgfSwKKwl7 IDB4MzdiMiwgMHgwMCB9LAorCXsgMHgzN2IzLCAweDQyIH0sCisJeyAweDM3YjQsIDB4NDIgfSwK Kwl7IDB4MzdiNSwgMHgzMyB9LAorCXsgMHgzN2I2LCAweDAwIH0sCisJeyAweDM3YjcsIDB4MDAg fSwKKwl7IDB4MzdiOCwgMHgwMCB9LAorCXsgMHgzN2I5LCAweGZmIH0sCisKKwkvKiBBREMgU3lu YyAqLworCisJeyAweDQ1MDMsIDB4MTAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzNjQgb3Y4ODY1 X2xpbmtfZnJlcV9tZW51W10gPSB7CisJMzYwMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGNo YXIgKmNvbnN0IG92ODg2NV90ZXN0X3BhdHRlcm5fbWVudVtdID0geworCSJEaXNhYmxlZCIsCisJ IlJhbmRvbSBkYXRhIiwKKwkiQ29sb3IgYmFycyIsCisJIkNvbG9yIGJhcnMgd2l0aCByb2xsaW5n IGJhciIsCisJIkNvbG9yIHNxdWFyZXMiLAorCSJDb2xvciBzcXVhcmVzIHdpdGggcm9sbGluZyBi YXIiCit9OworCitzdGF0aWMgY29uc3QgdTggb3Y4ODY1X3Rlc3RfcGF0dGVybl9iaXRzW10gPSB7 CisJMCwKKwlPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fRU4gfCBPVjg4NjVfUFJFX0NUUkwwX1BB VFRFUk5fUkFORE9NX0RBVEEsCisJT1Y4ODY1X1BSRV9DVFJMMF9QQVRURVJOX0VOIHwgT1Y4ODY1 X1BSRV9DVFJMMF9QQVRURVJOX0NPTE9SX0JBUlMsCisJT1Y4ODY1X1BSRV9DVFJMMF9QQVRURVJO X0VOIHwgT1Y4ODY1X1BSRV9DVFJMMF9ST0xMSU5HX0JBUl9FTiB8CisJT1Y4ODY1X1BSRV9DVFJM MF9QQVRURVJOX0NPTE9SX0JBUlMsCisJT1Y4ODY1X1BSRV9DVFJMMF9QQVRURVJOX0VOIHwgT1Y4 ODY1X1BSRV9DVFJMMF9QQVRURVJOX0NPTE9SX1NRVUFSRVMsCisJT1Y4ODY1X1BSRV9DVFJMMF9Q QVRURVJOX0VOIHwgT1Y4ODY1X1BSRV9DVFJMMF9ST0xMSU5HX0JBUl9FTiB8CisJT1Y4ODY1X1BS RV9DVFJMMF9QQVRURVJOX0NPTE9SX1NRVUFSRVMsCit9OworCisvKiBJbnB1dC9PdXRwdXQgKi8K Kworc3RhdGljIGludCBvdjg4NjVfcmVhZChzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yLCB1 MTYgYWRkcmVzcywgdTggKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgZGF0YVsyXSA9IHsgYWRk cmVzcyA+PiA4LCBhZGRyZXNzICYgMHhmZiB9OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQg PSBzZW5zb3ItPmkyY19jbGllbnQ7CisJaW50IHJldDsKKworCXJldCA9IGkyY19tYXN0ZXJfc2Vu ZChjbGllbnQsIGRhdGEsIHNpemVvZihkYXRhKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Ri ZygmY2xpZW50LT5kZXYsICJpMmMgc2VuZCBlcnJvciBhdCBhZGRyZXNzICUjMDR4XG4iLAorCQkJ YWRkcmVzcyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNs aWVudCwgdmFsdWUsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2 LCAiaTJjIHJlY3YgZXJyb3IgYXQgYWRkcmVzcyAlIzA0eFxuIiwKKwkJCWFkZHJlc3MpOworCQly ZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92ODg2NV93cml0 ZShzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yLCB1MTYgYWRkcmVzcywgdTggdmFsdWUpCit7 CisJdW5zaWduZWQgY2hhciBkYXRhWzNdID0geyBhZGRyZXNzID4+IDgsIGFkZHJlc3MgJiAweGZm LCB2YWx1ZSB9OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZW5zb3ItPmkyY19jbGll bnQ7CisJaW50IHJldDsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGRhdGEsIHNp emVvZihkYXRhKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJp MmMgc2VuZCBlcnJvciBhdCBhZGRyZXNzICUjMDR4XG4iLAorCQkJYWRkcmVzcyk7CisJCXJldHVy biByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X3dyaXRlX3Nl cXVlbmNlKHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IsCisJCQkJIGNvbnN0IHN0cnVjdCBv djg4NjVfcmVnaXN0ZXJfdmFsdWUgKnNlcXVlbmNlLAorCQkJCSB1bnNpZ25lZCBpbnQgc2VxdWVu Y2VfY291bnQpCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKGkg PSAwOyBpIDwgc2VxdWVuY2VfY291bnQ7IGkrKykgeworCQlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vu c29yLCBzZXF1ZW5jZVtpXS5hZGRyZXNzLAorCQkJCSAgIHNlcXVlbmNlW2ldLnZhbHVlKTsKKwkJ aWYgKHJldCkKKwkJCWJyZWFrOworCisJCWlmIChzZXF1ZW5jZVtpXS5kZWxheV9tcykKKwkJCW1z bGVlcChzZXF1ZW5jZVtpXS5kZWxheV9tcyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBvdjg4NjVfdXBkYXRlX2JpdHMoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciwg dTE2IGFkZHJlc3MsCisJCQkgICAgICB1OCBtYXNrLCB1OCBiaXRzKQoreworCXU4IHZhbHVlID0g MDsKKwlpbnQgcmV0OworCisJcmV0ID0gb3Y4ODY1X3JlYWQoc2Vuc29yLCBhZGRyZXNzLCAmdmFs dWUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWx1ZSAmPSB+bWFzazsKKwl2YWx1 ZSB8PSBiaXRzOworCisJcmV0dXJuIG92ODg2NV93cml0ZShzZW5zb3IsIGFkZHJlc3MsIHZhbHVl KTsKK30KKworLyogU2Vuc29yICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X3N3X3Jlc2V0KHN0cnVj dCBvdjg4NjVfc2Vuc29yICpzZW5zb3IpCit7CisJcmV0dXJuIG92ODg2NV93cml0ZShzZW5zb3Is IE9WODg2NV9TV19SRVNFVF9SRUcsIE9WODg2NV9TV19SRVNFVF9SRVNFVCk7Cit9CisKK3N0YXRp YyBpbnQgb3Y4ODY1X3N3X3N0YW5kYnkoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciwgaW50 IHN0YW5kYnkpCit7CisJdTggdmFsdWUgPSAwOworCisJaWYgKCFzdGFuZGJ5KQorCQl2YWx1ZSA9 IE9WODg2NV9TV19TVEFOREJZX1NUUkVBTV9PTjsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vu c29yLCBPVjg4NjVfU1dfU1RBTkRCWV9SRUcsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBvdjg4 NjVfY2hpcF9pZF9jaGVjayhzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yKQoreworCXUxNiBy ZWdzW10gPSB7IE9WODg2NV9DSElQX0lEX0hIX1JFRywgT1Y4ODY1X0NISVBfSURfSF9SRUcsCisJ CSAgICAgICBPVjg4NjVfQ0hJUF9JRF9MX1JFRyB9OworCXU4IHZhbHVlc1tdID0geyBPVjg4NjVf Q0hJUF9JRF9ISF9WQUxVRSwgT1Y4ODY1X0NISVBfSURfSF9WQUxVRSwKKwkJCU9WODg2NV9DSElQ X0lEX0xfVkFMVUUgfTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1OCB2YWx1ZTsKKwlpbnQgcmV0Owor CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykgeworCQlyZXQgPSBvdjg4 NjVfcmVhZChzZW5zb3IsIHJlZ3NbaV0sICZ2YWx1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0 dXJuIHJldDsKKworCQlpZiAodmFsdWUgIT0gdmFsdWVzW2ldKSB7CisJCQlkZXZfZXJyKHNlbnNv ci0+ZGV2LAorCQkJCSJjaGlwIGlkIHZhbHVlIG1pc21hdGNoOiAlI3ggaW5zdGVhZCBvZiAlI3hc biIsCisJCQkJdmFsdWUsIHZhbHVlc1tpXSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92ODg2NV9jaGFyZ2VfcHVtcF9jb25maWd1 cmUoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvcikKK3sKKwlyZXR1cm4gb3Y4ODY1X3dyaXRl KHNlbnNvciwgT1Y4ODY1X1BVTVBfQ0xLX0RJVl9SRUcsCisJCQkgICAgT1Y4ODY1X1BVTVBfQ0xL X0RJVl9QVU1QX1AoMSkpOworfQorCitzdGF0aWMgaW50IG92ODg2NV9taXBpX2NvbmZpZ3VyZShz dHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yKQoreworCXN0cnVjdCB2NGwyX2Z3bm9kZV9idXNf bWlwaV9jc2kyICpidXNfbWlwaV9jc2kyID0KKwkJJnNlbnNvci0+ZW5kcG9pbnQuYnVzLm1pcGlf Y3NpMjsKKwl1bnNpZ25lZCBpbnQgbGFuZXNfY291bnQgPSBidXNfbWlwaV9jc2kyLT5udW1fZGF0 YV9sYW5lczsKKwlpbnQgcmV0OworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1 X01JUElfU0NfQ1RSTDBfUkVHLAorCQkJICAgT1Y4ODY1X01JUElfU0NfQ1RSTDBfTEFORVMobGFu ZXNfY291bnQpIHwKKwkJCSAgIE9WODg2NV9NSVBJX1NDX0NUUkwwX01JUElfRU4gfAorCQkJICAg T1Y4ODY1X01JUElfU0NfQ1RSTDBfVU5LTk9XTik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9NSVBJX1NDX0NUUkwyX1JFRywK KwkJCSAgIE9WODg2NV9NSVBJX1NDX0NUUkwyX1BEX01JUElfUlNUX1NZTkMpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlpZiAobGFuZXNfY291bnQgPj0gMikgeworCQlyZXQgPSBvdjg4 NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfTUlQSV9MQU5FX1NFTDAxX1JFRywKKwkJCQkgICBPVjg4 NjVfTUlQSV9MQU5FX1NFTDAxX0xBTkUwKDApIHwKKwkJCQkgICBPVjg4NjVfTUlQSV9MQU5FX1NF TDAxX0xBTkUxKDEpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGxh bmVzX2NvdW50ID49IDQpIHsKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X01J UElfTEFORV9TRUwyM19SRUcsCisJCQkJICAgT1Y4ODY1X01JUElfTEFORV9TRUwyM19MQU5FMigy KSB8CisJCQkJICAgT1Y4ODY1X01JUElfTEFORV9TRUwyM19MQU5FMygzKSk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG92ODg2NV91cGRhdGVfYml0cyhzZW5zb3Is IE9WODg2NV9DTEtfU0VMMV9SRUcsCisJCQkJIE9WODg2NV9DTEtfU0VMMV9NSVBJX0VPRiwKKwkJ CQkgT1Y4ODY1X0NMS19TRUwxX01JUElfRU9GKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJLyoKKwkgKiBUaGlzIHZhbHVlIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIGRlcGVuZGluZyBvbiBQ Q0xLIHJhdGUsCisJICogYnV0IGl0J3MgdW5jbGVhciBob3cuIFRoaXMgdmFsdWUgc2VlbXMgdG8g Z2VuZXJhbGx5IHdvcmsKKwkgKiB3aGlsZSB0aGUgZGVmYXVsdCB2YWx1ZSB3YXMgZm91bmQgdG8g Y2F1c2UgdHJhbnNtaXNzaW9uIGVycm9ycy4KKwkgKi8KKwlyZXR1cm4gb3Y4ODY1X3dyaXRlKHNl bnNvciwgT1Y4ODY1X01JUElfUENMS19QRVJJT0RfUkVHLCAweDE2KTsKK30KKworc3RhdGljIGlu dCBvdjg4NjVfYmxhY2tfbGV2ZWxfY29uZmlndXJlKHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5z b3IpCit7CisJaW50IHJldDsKKworCS8qIFRyaWdnZXIgQkxDIG9uIHJlbGV2YW50IGV2ZW50cyBh bmQgZW5hYmxlIGZpbHRlci4gKi8KKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVf QkxDX0NUUkwwX1JFRywKKwkJCSAgIE9WODg2NV9CTENfQ1RSTDBfVFJJR19SQU5HRV9FTiB8CisJ CQkgICBPVjg4NjVfQkxDX0NUUkwwX1RSSUdfRk9STUFUX0VOIHwKKwkJCSAgIE9WODg2NV9CTENf Q1RSTDBfVFJJR19HQUlOX0VOIHwKKwkJCSAgIE9WODg2NV9CTENfQ1RSTDBfVFJJR19FWFBPU1VS RV9FTiB8CisJCQkgICBPVjg4NjVfQkxDX0NUUkwwX0ZJTFRFUl9FTik7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCS8qIExvd2VyIEJMQyBvZmZzZXQgdHJpZ2dlciB0aHJlc2hvbGQuICov CisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0JMQ19DVFJMRF9SRUcsCisJCQkg ICBPVjg4NjVfQkxDX0NUUkxEX09GRlNFVF9UUklHR0VSKDE2KSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9CTENfQ1RSTDFG X1JFRywgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEluY3JlYXNlIEJMQyBv ZmZzZXQgbWF4aW11bSBsaW1pdC4gKi8KKwlyZXR1cm4gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4 ODY1X0JMQ19PRkZTRVRfTElNSVRfUkVHLAorCQkJICAgIE9WODg2NV9CTENfT0ZGU0VUX0xJTUlU KDYzKSk7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X2lzcF9jb25maWd1cmUoc3RydWN0IG92ODg2 NV9zZW5zb3IgKnNlbnNvcikKK3sKKwlpbnQgcmV0OworCisJLyogRGlzYWJsZSBsZW5zIGNvcnJl Y3Rpb24uICovCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0lTUF9DVFJMMF9S RUcsCisJCQkgICBPVjg4NjVfSVNQX0NUUkwwX1dISVRFX0JBTEFOQ0VfRU4gfAorCQkJICAgT1Y4 ODY1X0lTUF9DVFJMMF9EUENfQkxBQ0tfRU4gfAorCQkJICAgT1Y4ODY1X0lTUF9DVFJMMF9EUENf V0hJVEVfRU4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3Jp dGUoc2Vuc29yLCBPVjg4NjVfSVNQX0NUUkwxX1JFRywKKwkJCSAgIE9WODg2NV9JU1BfQ1RSTDFf QkxDX0VOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB1bnNpZ25lZCBsb25nIG92ODg2NV9tb2RlX3BsbDFfcmF0ZShzdHJ1Y3Qgb3Y4ODY1X3Nl bnNvciAqc2Vuc29yLAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGUpCit7 CisJY29uc3Qgc3RydWN0IG92ODg2NV9wbGwxX2NvbmZpZyAqY29uZmlnID0gbW9kZS0+cGxsMV9j b25maWc7CisJdW5zaWduZWQgbG9uZyBleHRjbGtfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIHBsbDFf cmF0ZTsKKworCWV4dGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHNlbnNvci0+ZXh0Y2xrKTsKKwlw bGwxX3JhdGUgPSBleHRjbGtfcmF0ZSAqIGNvbmZpZy0+cGxsX211bCAvIGNvbmZpZy0+cGxsX3By ZV9kaXZfaGFsZjsKKworCXN3aXRjaCAoY29uZmlnLT5wbGxfcHJlX2RpdikgeworCWNhc2UgMDoK KwkJYnJlYWs7CisJY2FzZSAxOgorCQlwbGwxX3JhdGUgKj0gMzsKKwkJcGxsMV9yYXRlIC89IDI7 CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcGxsMV9yYXRlICo9IDU7CisJCXBsbDFfcmF0ZSAvPSAy OworCQlicmVhazsKKwljYXNlIDQ6CisJCXBsbDFfcmF0ZSAvPSAzOworCQlicmVhazsKKwljYXNl IDU6CisJCXBsbDFfcmF0ZSAvPSA0OworCQlicmVhazsKKwljYXNlIDc6CisJCXBsbDFfcmF0ZSAv PSA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwbGwxX3JhdGUgLz0gY29uZmlnLT5wbGxfcHJl X2RpdjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHBsbDFfcmF0ZTsKK30KKworc3RhdGljIGlu dCBvdjg4NjVfbW9kZV9wbGwxX2NvbmZpZ3VyZShzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29y LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdjg4NjVfbW9kZSAqbW9kZSwKKwkJCQkgICAgICB1 MzIgbWJ1c19jb2RlKQoreworCWNvbnN0IHN0cnVjdCBvdjg4NjVfcGxsMV9jb25maWcgKmNvbmZp ZyA9IG1vZGUtPnBsbDFfY29uZmlnOworCXU4IHZhbHVlOworCWludCByZXQ7CisKKwlzd2l0Y2gg KG1idXNfY29kZSkgeworCWNhc2UgTUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTA6CisJCXZhbHVl ID0gT1Y4ODY1X01JUElfQklUX1NFTCgxMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9NSVBJ X0JJVF9TRUxfUkVHLCB2YWx1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9 IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RSTEFfUkVHLAorCQkJICAgT1Y4ODY1 X1BMTF9DVFJMQV9QUkVfRElWX0hBTEYoY29uZmlnLT5wbGxfcHJlX2Rpdl9oYWxmKSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2 NV9QTExfQ1RSTDBfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJMMF9QUkVfRElWKGNvbmZpZy0+ cGxsX3ByZV9kaXYpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1 X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1BMTF9DVFJMMV9SRUcsCisJCQkgICBPVjg4NjVfUExMX0NU UkwxX01VTF9IKGNvbmZpZy0+cGxsX211bCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfUExMX0NUUkwyX1JFRywKKwkJCSAg IE9WODg2NV9QTExfQ1RSTDJfTVVMX0woY29uZmlnLT5wbGxfbXVsKSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RS TDNfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJMM19NX0RJVihjb25maWctPm1fZGl2KSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9W ODg2NV9QTExfQ1RSTDRfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJMNF9NSVBJX0RJVihjb25m aWctPm1pcGlfZGl2KSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2 NV91cGRhdGVfYml0cyhzZW5zb3IsIE9WODg2NV9QQ0xLX1NFTF9SRUcsCisJCQkgICBPVjg4NjVf UENMS19TRUxfUENMS19ESVZfTUFTSywKKwkJCSAgIE9WODg2NV9QQ0xLX1NFTF9QQ0xLX0RJVihj b25maWctPnBjbGtfZGl2KSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92 ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RSTDVfUkVHLAorCQkJICAgT1Y4ODY1X1BM TF9DVFJMNV9TWVNfUFJFX0RJVihjb25maWctPnN5c19wcmVfZGl2KSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RS TDZfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJMNl9TWVNfRElWKGNvbmZpZy0+c3lzX2Rpdikp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gb3Y4ODY1X3VwZGF0ZV9iaXRz KHNlbnNvciwgT1Y4ODY1X1BMTF9DVFJMMUVfUkVHLAorCQkJCSAgT1Y4ODY1X1BMTF9DVFJMMUVf UExMMV9OT19MQVQsCisJCQkJICBPVjg4NjVfUExMX0NUUkwxRV9QTEwxX05PX0xBVCk7Cit9CisK K3N0YXRpYyBpbnQgb3Y4ODY1X21vZGVfcGxsMl9jb25maWd1cmUoc3RydWN0IG92ODg2NV9zZW5z b3IgKnNlbnNvciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGUpCit7 CisJY29uc3Qgc3RydWN0IG92ODg2NV9wbGwyX2NvbmZpZyAqY29uZmlnID0gbW9kZS0+cGxsMl9j b25maWc7CisJaW50IHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9Q TExfQ1RSTDEyX1JFRywKKwkJCSAgIE9WODg2NV9QTExfQ1RSTDEyX1BSRV9ESVZfSEFMRihjb25m aWctPnBsbF9wcmVfZGl2X2hhbGYpIHwKKwkJCSAgIE9WODg2NV9QTExfQ1RSTDEyX0RBQ19ESVYo Y29uZmlnLT5kYWNfZGl2KSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92 ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RSTEJfUkVHLAorCQkJICAgT1Y4ODY1X1BM TF9DVFJMQl9QUkVfRElWKGNvbmZpZy0+cGxsX3ByZV9kaXYpKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1BMTF9DVFJMQ19S RUcsCisJCQkgICBPVjg4NjVfUExMX0NUUkxDX01VTF9IKGNvbmZpZy0+cGxsX211bCkpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4 NjVfUExMX0NUUkxEX1JFRywKKwkJCSAgIE9WODg2NV9QTExfQ1RSTERfTVVMX0woY29uZmlnLT5w bGxfbXVsKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0 ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RSTEZfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJMRl9T WVNfUFJFX0RJVihjb25maWctPnN5c19wcmVfZGl2KSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfUExMX0NUUkxFX1JFRywK KwkJCSAgICBPVjg4NjVfUExMX0NUUkxFX1NZU19ESVYoY29uZmlnLT5zeXNfZGl2KSk7Cit9CisK K3N0YXRpYyBpbnQgb3Y4ODY1X21vZGVfc2Nsa19jb25maWd1cmUoc3RydWN0IG92ODg2NV9zZW5z b3IgKnNlbnNvciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGUpCit7 CisJY29uc3Qgc3RydWN0IG92ODg2NV9zY2xrX2NvbmZpZyAqY29uZmlnID0gbW9kZS0+c2Nsa19j b25maWc7CisJaW50IHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9D TEtfU0VMMF9SRUcsCisJCQkgICBPVjg4NjVfQ0xLX1NFTDBfUExMMV9TWVNfU0VMKGNvbmZpZy0+ c3lzX3NlbCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfdXBk YXRlX2JpdHMoc2Vuc29yLCBPVjg4NjVfQ0xLX1NFTDFfUkVHLAorCQkJCSBPVjg4NjVfQ0xLX1NF TDFfUExMX1NDTEtfU0VMX01BU0ssCisJCQkJIE9WODg2NV9DTEtfU0VMMV9QTExfU0NMS19TRUwo Y29uZmlnLT5zY2xrX3NlbCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4g b3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1NDTEtfQ1RSTF9SRUcsCisJCQkgICAgT1Y4ODY1 X1NDTEtfQ1RSTF9VTktOT1dOIHwKKwkJCSAgICBPVjg4NjVfU0NMS19DVFJMX1NDTEtfRElWKGNv bmZpZy0+c2Nsa19kaXYpIHwKKwkJCSAgICBPVjg4NjVfU0NMS19DVFJMX1NDTEtfUFJFX0RJVihj b25maWctPnNjbGtfcHJlX2RpdikpOworfQorCitzdGF0aWMgaW50IG92ODg2NV9tb2RlX2Jpbm5p bmdfY29uZmlndXJlKHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IsCisJCQkJCSBjb25zdCBz dHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhcmlvcGl4ZWxfaHN1 Yl9jb2VmLCB2YXJpb3BpeGVsX3ZzdWJfY29lZjsKKwl1OCB2YWx1ZTsKKwlpbnQgcmV0OworCisJ cmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0ZPUk1BVDFfUkVHLCAwKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsdWUgPSBPVjg4NjVfRk9STUFUMl9IU1lOQ19FTjsK KworCWlmIChtb2RlLT5iaW5uaW5nX3gpCisJCXZhbHVlIHw9IE9WODg2NV9GT1JNQVQyX0ZTVF9I QklOX0VOOworCisJaWYgKG1vZGUtPmJpbm5pbmdfeSkKKwkJdmFsdWUgfD0gT1Y4ODY1X0ZPUk1B VDJfRlNUX1ZCSU5fRU47CisKKwlpZiAobW9kZS0+c3luY19oYmluKQorCQl2YWx1ZSB8PSBPVjg4 NjVfRk9STUFUMl9TWU5DX0hCSU5fRU47CisKKwlpZiAobW9kZS0+aG9yel92YXIyKQorCQl2YWx1 ZSB8PSBPVjg4NjVfRk9STUFUMl9JU1BfSE9SWl9WQVIyX0VOOworCisJcmV0ID0gb3Y4ODY1X3dy aXRlKHNlbnNvciwgT1Y4ODY1X0ZPUk1BVDJfUkVHLCB2YWx1ZSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IG92ODg2NV91cGRhdGVfYml0cyhzZW5zb3IsIE9WODg2NV9JU1Bf Q1RSTDJfUkVHLAorCQkJCSBPVjg4NjVfSVNQX0NUUkwyX1ZBUklPUElYRUxfRU4sCisJCQkJIG1v ZGUtPnZhcmlvcGl4ZWwgPworCQkJCSBPVjg4NjVfSVNQX0NUUkwyX1ZBUklPUElYRUxfRU4gOiAw KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG1vZGUtPnZhcmlvcGl4ZWwpIHsK KwkJLyogVmFyaW9QaXhlbCBjb2VmcyBuZWVkcyB0byBiZSA+IDEuICovCisJCXZhcmlvcGl4ZWxf aHN1Yl9jb2VmID0gbW9kZS0+dmFyaW9waXhlbF9oc3ViX2NvZWY7CisJCXZhcmlvcGl4ZWxfdnN1 Yl9jb2VmID0gbW9kZS0+dmFyaW9waXhlbF92c3ViX2NvZWY7CisJfSBlbHNlIHsKKwkJdmFyaW9w aXhlbF9oc3ViX2NvZWYgPSAxOworCQl2YXJpb3BpeGVsX3ZzdWJfY29lZiA9IDE7CisJfQorCisJ cmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1ZBUF9DVFJMMV9SRUcsCisJCQkgICBP Vjg4NjVfVkFQX0NUUkwxX0hTVUJfQ09FRih2YXJpb3BpeGVsX2hzdWJfY29lZikgfAorCQkJICAg T1Y4ODY1X1ZBUF9DVFJMMV9WU1VCX0NPRUYodmFyaW9waXhlbF92c3ViX2NvZWYpKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1 X0lOQ19YX09ERF9SRUcsCisJCQkgICBPVjg4NjVfSU5DX1hfT0REKG1vZGUtPmluY194X29kZCkp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29y LCBPVjg4NjVfSU5DX1hfRVZFTl9SRUcsCisJCQkgICBPVjg4NjVfSU5DX1hfRVZFTihtb2RlLT5p bmNfeF9ldmVuKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93 cml0ZShzZW5zb3IsIE9WODg2NV9JTkNfWV9PRERfUkVHLAorCQkJICAgT1Y4ODY1X0lOQ19ZX09E RChtb2RlLT5pbmNfeV9vZGQpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJu IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9JTkNfWV9FVkVOX1JFRywKKwkJCSAgICBPVjg4 NjVfSU5DX1lfRVZFTihtb2RlLT5pbmNfeV9ldmVuKSk7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1 X21vZGVfYmxhY2tfbGV2ZWxfY29uZmlndXJlKHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3Is CisJCQkJCSAgICAgY29uc3Qgc3RydWN0IG92ODg2NV9tb2RlICptb2RlKQoreworCWludCByZXQ7 CisKKwkvKiBOb3RlIHRoYXQgYSB6ZXJvIHZhbHVlIGZvciBibGNfY29sX3NoaWZ0X21hc2sgaXMg dGhlIGRlZmF1bHQgMjU2LiAqLworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9C TENfQ1RSTDFfUkVHLAorCQkJICAgbW9kZS0+YmxjX2NvbF9zaGlmdF9tYXNrIHwKKwkJCSAgIE9W ODg2NV9CTENfQ1RSTDFfT0ZGU0VUX0xJTUlUX0VOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJLyogQkxDIHRvcCB6ZXJvIGxpbmUgKi8KKworCXJldCA9IG92ODg2NV93cml0ZShzZW5z b3IsIE9WODg2NV9CTENfVE9QX1pMSU5FX1NUQVJUX1JFRywKKwkJCSAgIE9WODg2NV9CTENfVE9Q X1pMSU5FX1NUQVJUKG1vZGUtPmJsY190b3BfemVyb19saW5lX3N0YXJ0KSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9CTENf VE9QX1pMSU5FX05VTV9SRUcsCisJCQkgICBPVjg4NjVfQkxDX1RPUF9aTElORV9OVU0obW9kZS0+ YmxjX3RvcF96ZXJvX2xpbmVfbnVtKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8q IEJMQyB0b3AgYmxhY2sgbGluZSAqLworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4 ODY1X0JMQ19UT1BfQkxLTElORV9TVEFSVF9SRUcsCisJCQkgICBPVjg4NjVfQkxDX1RPUF9CTEtM SU5FX1NUQVJUKG1vZGUtPmJsY190b3BfYmxhY2tfbGluZV9zdGFydCkpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxDX1RP UF9CTEtMSU5FX05VTV9SRUcsCisJCQkgICBPVjg4NjVfQkxDX1RPUF9CTEtMSU5FX05VTShtb2Rl LT5ibGNfdG9wX2JsYWNrX2xpbmVfbnVtKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CS8qIEJMQyBib3R0b20gemVybyBsaW5lICovCisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29y LCBPVjg4NjVfQkxDX0JPVF9aTElORV9TVEFSVF9SRUcsCisJCQkgICBPVjg4NjVfQkxDX0JPVF9a TElORV9TVEFSVChtb2RlLT5ibGNfYm90dG9tX3plcm9fbGluZV9zdGFydCkpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxD X0JPVF9aTElORV9OVU1fUkVHLAorCQkJICAgT1Y4ODY1X0JMQ19CT1RfWkxJTkVfTlVNKG1vZGUt PmJsY19ib3R0b21femVyb19saW5lX251bSkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwkvKiBCTEMgYm90dG9tIGJsYWNrIGxpbmUgKi8KKworCXJldCA9IG92ODg2NV93cml0ZShzZW5z b3IsIE9WODg2NV9CTENfQk9UX0JMS0xJTkVfU1RBUlRfUkVHLAorCQkJICAgT1Y4ODY1X0JMQ19C T1RfQkxLTElORV9TVEFSVChtb2RlLT5ibGNfYm90dG9tX2JsYWNrX2xpbmVfc3RhcnQpKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4 ODY1X0JMQ19CT1RfQkxLTElORV9OVU1fUkVHLAorCQkJICAgT1Y4ODY1X0JMQ19CT1RfQkxLTElO RV9OVU0obW9kZS0+YmxjX2JvdHRvbV9ibGFja19saW5lX251bSkpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwkvKiBCTEMgYW5jaG9yICovCisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vu c29yLCBPVjg4NjVfQkxDX0FOQ0hPUl9MRUZUX1NUQVJUX0hfUkVHLAorCQkJICAgT1Y4ODY1X0JM Q19BTkNIT1JfTEVGVF9TVEFSVF9IKG1vZGUtPmJsY19hbmNob3JfbGVmdF9zdGFydCkpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4 NjVfQkxDX0FOQ0hPUl9MRUZUX1NUQVJUX0xfUkVHLAorCQkJICAgT1Y4ODY1X0JMQ19BTkNIT1Jf TEVGVF9TVEFSVF9MKG1vZGUtPmJsY19hbmNob3JfbGVmdF9zdGFydCkpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxDX0FO Q0hPUl9MRUZUX0VORF9IX1JFRywKKwkJCSAgIE9WODg2NV9CTENfQU5DSE9SX0xFRlRfRU5EX0go bW9kZS0+YmxjX2FuY2hvcl9sZWZ0X2VuZCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxDX0FOQ0hPUl9MRUZUX0VORF9M X1JFRywKKwkJCSAgIE9WODg2NV9CTENfQU5DSE9SX0xFRlRfRU5EX0wobW9kZS0+YmxjX2FuY2hv cl9sZWZ0X2VuZCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVf d3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9TVEFSVF9IX1JFRywKKwkJCSAg IE9WODg2NV9CTENfQU5DSE9SX1JJR0hUX1NUQVJUX0gobW9kZS0+YmxjX2FuY2hvcl9yaWdodF9z dGFydCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUo c2Vuc29yLCBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9TVEFSVF9MX1JFRywKKwkJCSAgIE9WODg2 NV9CTENfQU5DSE9SX1JJR0hUX1NUQVJUX0wobW9kZS0+YmxjX2FuY2hvcl9yaWdodF9zdGFydCkp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29y LCBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9FTkRfSF9SRUcsCisJCQkgICBPVjg4NjVfQkxDX0FO Q0hPUl9SSUdIVF9FTkRfSChtb2RlLT5ibGNfYW5jaG9yX3JpZ2h0X2VuZCkpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0JM Q19BTkNIT1JfUklHSFRfRU5EX0xfUkVHLAorCQkJICAgIE9WODg2NV9CTENfQU5DSE9SX1JJR0hU X0VORF9MKG1vZGUtPmJsY19hbmNob3JfcmlnaHRfZW5kKSk7Cit9CisKK3N0YXRpYyBpbnQgb3Y4 ODY1X21vZGVfY29uZmlndXJlKHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IsCisJCQkJIGNv bnN0IHN0cnVjdCBvdjg4NjVfbW9kZSAqbW9kZSwgdTMyIG1idXNfY29kZSkKK3sKKwlpbnQgcmV0 OworCisJLyogT3V0cHV0IFNpemUgWCAqLworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwg T1Y4ODY1X09VVFBVVF9TSVpFX1hfSF9SRUcsCisJCQkgICBPVjg4NjVfT1VUUFVUX1NJWkVfWF9I KG1vZGUtPm91dHB1dF9zaXplX3gpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09VVFBVVF9TSVpFX1hfTF9SRUcsCisJCQkg ICBPVjg4NjVfT1VUUFVUX1NJWkVfWF9MKG1vZGUtPm91dHB1dF9zaXplX3gpKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJLyogSG9yaXpvbnRhbCBUb3RhbCBTaXplICovCisKKwlyZXQg PSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSFRTX0hfUkVHLCBPVjg4NjVfSFRTX0gobW9k ZS0+aHRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0 ZShzZW5zb3IsIE9WODg2NV9IVFNfTF9SRUcsIE9WODg2NV9IVFNfTChtb2RlLT5odHMpKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogT3V0cHV0IFNpemUgWSAqLworCisJcmV0ID0g b3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09VVFBVVF9TSVpFX1lfSF9SRUcsCisJCQkgICBP Vjg4NjVfT1VUUFVUX1NJWkVfWV9IKG1vZGUtPm91dHB1dF9zaXplX3kpKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09VVFBV VF9TSVpFX1lfTF9SRUcsCisJCQkgICBPVjg4NjVfT1VUUFVUX1NJWkVfWV9MKG1vZGUtPm91dHB1 dF9zaXplX3kpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVmVydGljYWwgVG90 YWwgU2l6ZSAqLworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1ZUU19IX1JF RywgT1Y4ODY1X1ZUU19IKG1vZGUtPnZ0cykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfVlRTX0xfUkVHLCBPVjg4NjVfVlRT X0wobW9kZS0+dnRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChtb2RlLT5z aXplX2F1dG8pIHsKKwkJLyogQXV0byBTaXplICovCisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNl bnNvciwgT1Y4ODY1X0FVVE9fU0laRV9DVFJMX1JFRywKKwkJCQkgICBPVjg4NjVfQVVUT19TSVpF X0NUUkxfT0ZGU0VUX1lfUkVHIHwKKwkJCQkgICBPVjg4NjVfQVVUT19TSVpFX0NUUkxfT0ZGU0VU X1hfUkVHIHwKKwkJCQkgICBPVjg4NjVfQVVUT19TSVpFX0NUUkxfQ1JPUF9FTkRfWV9SRUcgfAor CQkJCSAgIE9WODg2NV9BVVRPX1NJWkVfQ1RSTF9DUk9QX0VORF9YX1JFRyB8CisJCQkJICAgT1Y4 ODY1X0FVVE9fU0laRV9DVFJMX0NST1BfU1RBUlRfWV9SRUcgfAorCQkJCSAgIE9WODg2NV9BVVRP X1NJWkVfQ1RSTF9DUk9QX1NUQVJUX1hfUkVHKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7 CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0FVVE9fU0laRV9CT1VOREFS SUVTX1JFRywKKwkJCQkgICBPVjg4NjVfQVVUT19TSVpFX0JPVU5EQVJJRVNfWShtb2RlLT5zaXpl X2F1dG9fYm91bmRhcnlfeSkgfAorCQkJCSAgIE9WODg2NV9BVVRPX1NJWkVfQk9VTkRBUklFU19Y KG1vZGUtPnNpemVfYXV0b19ib3VuZGFyeV94KSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0 OworCX0gZWxzZSB7CisJCS8qIENyb3AgU3RhcnQgWCAqLworCisJCXJldCA9IG92ODg2NV93cml0 ZShzZW5zb3IsIE9WODg2NV9DUk9QX1NUQVJUX1hfSF9SRUcsCisJCQkJICAgT1Y4ODY1X0NST1Bf U1RBUlRfWF9IKG1vZGUtPmNyb3Bfc3RhcnRfeCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKworCQlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQ1JPUF9TVEFSVF9YX0xf UkVHLAorCQkJCSAgIE9WODg2NV9DUk9QX1NUQVJUX1hfTChtb2RlLT5jcm9wX3N0YXJ0X3gpKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogT2Zmc2V0IFggKi8KKworCQlyZXQg PSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfT0ZGU0VUX1hfSF9SRUcsCisJCQkJICAgT1Y4 ODY1X09GRlNFVF9YX0gobW9kZS0+b2Zmc2V0X3gpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09GRlNFVF9YX0xfUkVH LAorCQkJCSAgIE9WODg2NV9PRkZTRVRfWF9MKG1vZGUtPm9mZnNldF94KSk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCisJCS8qIENyb3AgRW5kIFggKi8KKworCQlyZXQgPSBvdjg4NjVf d3JpdGUoc2Vuc29yLCBPVjg4NjVfQ1JPUF9FTkRfWF9IX1JFRywKKwkJCQkgICBPVjg4NjVfQ1JP UF9FTkRfWF9IKG1vZGUtPmNyb3BfZW5kX3gpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7 CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0NST1BfRU5EX1hfTF9SRUcs CisJCQkJICAgT1Y4ODY1X0NST1BfRU5EX1hfTChtb2RlLT5jcm9wX2VuZF94KSk7CisJCWlmIChy ZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIENyb3AgU3RhcnQgWSAqLworCisJCXJldCA9IG92 ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9DUk9QX1NUQVJUX1lfSF9SRUcsCisJCQkJICAgT1Y4 ODY1X0NST1BfU1RBUlRfWV9IKG1vZGUtPmNyb3Bfc3RhcnRfeSkpOworCQlpZiAocmV0KQorCQkJ cmV0dXJuIHJldDsKKworCQlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQ1JPUF9T VEFSVF9ZX0xfUkVHLAorCQkJCSAgIE9WODg2NV9DUk9QX1NUQVJUX1lfTChtb2RlLT5jcm9wX3N0 YXJ0X3kpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogT2Zmc2V0IFkgKi8K KworCQlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfT0ZGU0VUX1lfSF9SRUcsCisJ CQkJICAgT1Y4ODY1X09GRlNFVF9ZX0gobW9kZS0+b2Zmc2V0X3kpKTsKKwkJaWYgKHJldCkKKwkJ CXJldHVybiByZXQ7CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09GRlNF VF9ZX0xfUkVHLAorCQkJCSAgIE9WODg2NV9PRkZTRVRfWV9MKG1vZGUtPm9mZnNldF95KSk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIENyb3AgRW5kIFkgKi8KKworCQlyZXQg PSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQ1JPUF9FTkRfWV9IX1JFRywKKwkJCQkgICBP Vjg4NjVfQ1JPUF9FTkRfWV9IKG1vZGUtPmNyb3BfZW5kX3kpKTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0NST1BfRU5E X1lfTF9SRUcsCisJCQkJICAgT1Y4ODY1X0NST1BfRU5EX1lfTChtb2RlLT5jcm9wX2VuZF95KSk7 CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFZGSUZPICovCisKKwlyZXQg PSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfVkZJRk9fUkVBRF9TVEFSVF9IX1JFRywKKwkJ CSAgIE9WODg2NV9WRklGT19SRUFEX1NUQVJUX0gobW9kZS0+dmZpZm9fcmVhZF9zdGFydCkpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBP Vjg4NjVfVkZJRk9fUkVBRF9TVEFSVF9MX1JFRywKKwkJCSAgIE9WODg2NV9WRklGT19SRUFEX1NU QVJUX0wobW9kZS0+dmZpZm9fcmVhZF9zdGFydCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQUJMQ19OVU1fUkVHLAorCQkJ ICAgT1Y4ODY1X0FCTENfTlVNKG1vZGUtPmFibGNfbnVtKSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9aTElORV9OVU1fUkVH LAorCQkJICAgT1Y4ODY1X1pMSU5FX05VTShtb2RlLT56bGluZV9udW0pKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJLyogQmlubmluZyAqLworCisJcmV0ID0gb3Y4ODY1X21vZGVfYmlu bmluZ19jb25maWd1cmUoc2Vuc29yLCBtb2RlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJLyogQmxhY2sgTGV2ZWwgKi8KKworCXJldCA9IG92ODg2NV9tb2RlX2JsYWNrX2xldmVsX2Nv bmZpZ3VyZShzZW5zb3IsIG1vZGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBQ TExzICovCisKKwlyZXQgPSBvdjg4NjVfbW9kZV9wbGwxX2NvbmZpZ3VyZShzZW5zb3IsIG1vZGUs IG1idXNfY29kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV9t b2RlX3BsbDJfY29uZmlndXJlKHNlbnNvciwgbW9kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldCA9IG92ODg2NV9tb2RlX3NjbGtfY29uZmlndXJlKHNlbnNvciwgbW9kZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEV4dHJhIHJlZ2lzdGVycyAqLworCisJaWYg KG1vZGUtPnJlZ2lzdGVyX3ZhbHVlcykgeworCQlyZXQgPSBvdjg4NjVfd3JpdGVfc2VxdWVuY2Uo c2Vuc29yLCBtb2RlLT5yZWdpc3Rlcl92YWx1ZXMsCisJCQkJCSAgICBtb2RlLT5yZWdpc3Rlcl92 YWx1ZXNfY291bnQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgb3Y4ODY1X21vZGVfbWlwaV9jbGtfcmF0ZShz dHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IG92 ODg2NV9tb2RlICptb2RlKQoreworCWNvbnN0IHN0cnVjdCBvdjg4NjVfcGxsMV9jb25maWcgKmNv bmZpZyA9IG1vZGUtPnBsbDFfY29uZmlnOworCXVuc2lnbmVkIGxvbmcgcGxsMV9yYXRlOworCisJ cGxsMV9yYXRlID0gb3Y4ODY1X21vZGVfcGxsMV9yYXRlKHNlbnNvciwgbW9kZSk7CisKKwlyZXR1 cm4gcGxsMV9yYXRlIC8gY29uZmlnLT5tX2RpdiAvIDI7Cit9CisKKy8qIEV4cG9zdXJlICovCisK K3N0YXRpYyBpbnQgb3Y4ODY1X2V4cG9zdXJlX2NvbmZpZ3VyZShzdHJ1Y3Qgb3Y4ODY1X3NlbnNv ciAqc2Vuc29yLCB1MzIgZXhwb3N1cmUpCit7CisJaW50IHJldDsKKworCXJldCA9IG92ODg2NV93 cml0ZShzZW5zb3IsIE9WODg2NV9FWFBPU1VSRV9DVFJMX0hIX1JFRywKKwkJCSAgIE9WODg2NV9F WFBPU1VSRV9DVFJMX0hIKGV4cG9zdXJlKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9FWFBPU1VSRV9DVFJMX0hfUkVHLAor CQkJICAgT1Y4ODY1X0VYUE9TVVJFX0NUUkxfSChleHBvc3VyZSkpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlyZXR1cm4gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0VYUE9TVVJF X0NUUkxfTF9SRUcsCisJCQkgICAgT1Y4ODY1X0VYUE9TVVJFX0NUUkxfTChleHBvc3VyZSkpOwor fQorCisvKiBHYWluICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X2dhaW5fY29uZmlndXJlKHN0cnVj dCBvdjg4NjVfc2Vuc29yICpzZW5zb3IsIHUzMiBnYWluKQoreworCWludCByZXQ7CisKKwlyZXQg PSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfR0FJTl9DVFJMX0hfUkVHLAorCQkJICAgT1Y4 ODY1X0dBSU5fQ1RSTF9IKGdhaW4pKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 dXJuIG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9HQUlOX0NUUkxfTF9SRUcsCisJCQkgICAg T1Y4ODY1X0dBSU5fQ1RSTF9MKGdhaW4pKTsKK30KKworLyogV2hpdGUgQmFsYW5jZSAqLworCitz dGF0aWMgaW50IG92ODg2NV9yZWRfYmFsYW5jZV9jb25maWd1cmUoc3RydWN0IG92ODg2NV9zZW5z b3IgKnNlbnNvciwKKwkJCQkJdTMyIHJlZF9iYWxhbmNlKQoreworCWludCByZXQ7CisKKwlyZXQg PSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSVNQX0dBSU5fUkVEX0hfUkVHLAorCQkJICAg T1Y4ODY1X0lTUF9HQUlOX1JFRF9IKHJlZF9iYWxhbmNlKSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSVNQX0dBSU5fUkVE X0xfUkVHLAorCQkJICAgIE9WODg2NV9JU1BfR0FJTl9SRURfTChyZWRfYmFsYW5jZSkpOworfQor CitzdGF0aWMgaW50IG92ODg2NV9ibHVlX2JhbGFuY2VfY29uZmlndXJlKHN0cnVjdCBvdjg4NjVf c2Vuc29yICpzZW5zb3IsCisJCQkJCSB1MzIgYmx1ZV9iYWxhbmNlKQoreworCWludCByZXQ7CisK KwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSVNQX0dBSU5fQkxVRV9IX1JFRywK KwkJCSAgIE9WODg2NV9JU1BfR0FJTl9CTFVFX0goYmx1ZV9iYWxhbmNlKSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSVNQ X0dBSU5fQkxVRV9MX1JFRywKKwkJCSAgICBPVjg4NjVfSVNQX0dBSU5fQkxVRV9MKGJsdWVfYmFs YW5jZSkpOworfQorCisvKiBGbGlwICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X2ZsaXBfdmVydF9j b25maWd1cmUoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciwgYm9vbCBlbmFibGUpCit7CisJ dTggYml0cyA9IE9WODg2NV9GT1JNQVQxX0ZMSVBfVkVSVF9JU1BfRU4gfAorCQkgIE9WODg2NV9G T1JNQVQxX0ZMSVBfVkVSVF9TRU5TT1JfRU47CisKKwlyZXR1cm4gb3Y4ODY1X3VwZGF0ZV9iaXRz KHNlbnNvciwgT1Y4ODY1X0ZPUk1BVDFfUkVHLCBiaXRzLAorCQkJCSAgZW5hYmxlID8gYml0cyA6 IDApOworfQorCitzdGF0aWMgaW50IG92ODg2NV9mbGlwX2hvcnpfY29uZmlndXJlKHN0cnVjdCBv djg4NjVfc2Vuc29yICpzZW5zb3IsIGJvb2wgZW5hYmxlKQoreworCXU4IGJpdHMgPSBPVjg4NjVf Rk9STUFUMl9GTElQX0hPUlpfSVNQX0VOIHwKKwkJICBPVjg4NjVfRk9STUFUMl9GTElQX0hPUlpf U0VOU09SX0VOOworCisJcmV0dXJuIG92ODg2NV91cGRhdGVfYml0cyhzZW5zb3IsIE9WODg2NV9G T1JNQVQyX1JFRywgYml0cywKKwkJCQkgIGVuYWJsZSA/IGJpdHMgOiAwKTsKK30KKworLyogVGVz dCBQYXR0ZXJuICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X3Rlc3RfcGF0dGVybl9jb25maWd1cmUo c3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciwKKwkJCQkJIHVuc2lnbmVkIGludCBpbmRleCkK K3sKKwlpZiAoaW5kZXggPj0gQVJSQVlfU0laRShvdjg4NjVfdGVzdF9wYXR0ZXJuX2JpdHMpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVf UFJFX0NUUkwwX1JFRywKKwkJCSAgICBvdjg4NjVfdGVzdF9wYXR0ZXJuX2JpdHNbaW5kZXhdKTsK K30KKworLyogU3RhdGUgKi8KKworc3RhdGljIGludCBvdjg4NjVfc3RhdGVfbWlwaV9jb25maWd1 cmUoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0 IG92ODg2NV9tb2RlICptb2RlLAorCQkJCSAgICAgICB1MzIgbWJ1c19jb2RlKQoreworCXN0cnVj dCBvdjg4NjVfY3RybHMgKmN0cmxzID0gJnNlbnNvci0+Y3RybHM7CisJc3RydWN0IHY0bDJfZndu b2RlX2J1c19taXBpX2NzaTIgKmJ1c19taXBpX2NzaTIgPQorCQkmc2Vuc29yLT5lbmRwb2ludC5i dXMubWlwaV9jc2kyOworCXVuc2lnbmVkIGxvbmcgbWlwaV9jbGtfcmF0ZTsKKwl1bnNpZ25lZCBp bnQgYml0c19wZXJfc2FtcGxlOworCXVuc2lnbmVkIGludCBsYW5lc19jb3VudDsKKwl1bnNpZ25l ZCBpbnQgaSwgajsKKwlzNjQgbWlwaV9waXhlbF9yYXRlOworCisJbWlwaV9jbGtfcmF0ZSA9IG92 ODg2NV9tb2RlX21pcGlfY2xrX3JhdGUoc2Vuc29yLCBtb2RlKTsKKwlpZiAoIW1pcGlfY2xrX3Jh dGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y4 ODY1X2xpbmtfZnJlcV9tZW51KTsgaSsrKSB7CisJCXM2NCBmcmVxID0gb3Y4ODY1X2xpbmtfZnJl cV9tZW51W2ldOworCisJCWlmIChmcmVxID09IG1pcGlfY2xrX3JhdGUpCisJCQlicmVhazsKKwl9 CisKKwlmb3IgKGogPSAwOyBqIDwgc2Vuc29yLT5lbmRwb2ludC5ucl9vZl9saW5rX2ZyZXF1ZW5j aWVzOyBqKyspIHsKKwkJdTY0IGZyZXEgPSBzZW5zb3ItPmVuZHBvaW50LmxpbmtfZnJlcXVlbmNp ZXNbal07CisKKwkJaWYgKGZyZXEgPT0gbWlwaV9jbGtfcmF0ZSkKKwkJCWJyZWFrOworCX0KKwor CWlmIChpID09IEFSUkFZX1NJWkUob3Y4ODY1X2xpbmtfZnJlcV9tZW51KSkgeworCQlkZXZfZXJy KHNlbnNvci0+ZGV2LAorCQkJImZhaWxlZCB0byBmaW5kICVsdSBjbGsgcmF0ZSBpbiBsaW5rIGZy ZXFcbiIsCisJCQltaXBpX2Nsa19yYXRlKTsKKwl9IGVsc2UgaWYgKGogPT0gc2Vuc29yLT5lbmRw b2ludC5ucl9vZl9saW5rX2ZyZXF1ZW5jaWVzKSB7CisJCWRldl9lcnIoc2Vuc29yLT5kZXYsCisJ CQkiZmFpbGVkIHRvIGZpbmQgJWx1IGNsayByYXRlIGluIGVuZHBvaW50IGxpbmstZnJlcXVlbmNp ZXNcbiIsCisJCQltaXBpX2Nsa19yYXRlKTsKKwl9IGVsc2UgeworCQlfX3Y0bDJfY3RybF9zX2N0 cmwoY3RybHMtPmxpbmtfZnJlcSwgaSk7CisJfQorCisJc3dpdGNoIChtYnVzX2NvZGUpIHsKKwlj YXNlIE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwOgorCQliaXRzX3Blcl9zYW1wbGUgPSAxMDsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGFuZXNfY291 bnQgPSBidXNfbWlwaV9jc2kyLT5udW1fZGF0YV9sYW5lczsKKwltaXBpX3BpeGVsX3JhdGUgPSBt aXBpX2Nsa19yYXRlICogMiAqIGxhbmVzX2NvdW50IC8gYml0c19wZXJfc2FtcGxlOworCisJX192 NGwyX2N0cmxfc19jdHJsX2ludDY0KGN0cmxzLT5waXhlbF9yYXRlLCBtaXBpX3BpeGVsX3JhdGUp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X3N0YXRlX2NvbmZpZ3VyZShz dHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yLAorCQkJCSAgY29uc3Qgc3RydWN0IG92ODg2NV9t b2RlICptb2RlLAorCQkJCSAgdTMyIG1idXNfY29kZSkKK3sKKwlpbnQgcmV0OworCisJaWYgKHNl bnNvci0+c3RhdGUuc3RyZWFtaW5nKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogU3RhdGUgd2ls bCBiZSBjb25maWd1cmVkIGF0IGZpcnN0IHBvd2VyIG9uIG90aGVyd2lzZS4gKi8KKwlpZiAocG1f cnVudGltZV9lbmFibGVkKHNlbnNvci0+ZGV2KSAmJgorCSAgICAhcG1fcnVudGltZV9zdXNwZW5k ZWQoc2Vuc29yLT5kZXYpKSB7CisJCXJldCA9IG92ODg2NV9tb2RlX2NvbmZpZ3VyZShzZW5zb3Is IG1vZGUsIG1idXNfY29kZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJl dCA9IG92ODg2NV9zdGF0ZV9taXBpX2NvbmZpZ3VyZShzZW5zb3IsIG1vZGUsIG1idXNfY29kZSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNlbnNvci0+c3RhdGUubW9kZSA9IG1vZGU7 CisJc2Vuc29yLT5zdGF0ZS5tYnVzX2NvZGUgPSBtYnVzX2NvZGU7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBvdjg4NjVfc3RhdGVfaW5pdChzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vu c29yKQoreworCXJldHVybiBvdjg4NjVfc3RhdGVfY29uZmlndXJlKHNlbnNvciwgJm92ODg2NV9t b2Rlc1swXSwKKwkJCQkgICAgICBvdjg4NjVfbWJ1c19jb2Rlc1swXSk7Cit9CisKKy8qIFNlbnNv ciBCYXNlICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X3NlbnNvcl9pbml0KHN0cnVjdCBvdjg4NjVf c2Vuc29yICpzZW5zb3IpCit7CisJaW50IHJldDsKKworCXJldCA9IG92ODg2NV9zd19yZXNldChz ZW5zb3IpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZW5zb3ItPmRldiwgImZhaWxlZCB0byBw ZXJmb3JtIHN3IHJlc2V0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvdjg4NjVf c3dfc3RhbmRieShzZW5zb3IsIDEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZW5zb3ItPmRl diwgImZhaWxlZCB0byBzZXQgc2Vuc29yIHN0YW5kYnlcbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCXJldCA9IG92ODg2NV9jaGlwX2lkX2NoZWNrKHNlbnNvcik7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKHNlbnNvci0+ZGV2LCAiZmFpbGVkIHRvIGNoZWNrIHNlbnNvciBjaGlwIGlkXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvdjg4NjVfd3JpdGVfc2VxdWVuY2Uoc2Vuc29y LCBvdjg4NjVfaW5pdF9zZXF1ZW5jZSwKKwkJCQkgICAgQVJSQVlfU0laRShvdjg4NjVfaW5pdF9z ZXF1ZW5jZSkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZW5zb3ItPmRldiwgImZhaWxlZCB0 byB3cml0ZSBpbml0IHNlcXVlbmNlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBv djg4NjVfY2hhcmdlX3B1bXBfY29uZmlndXJlKHNlbnNvcik7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKHNlbnNvci0+ZGV2LCAiZmFpbGVkIHRvIGNvbmZpZ3VyZSBwYWRcbiIpOworCQlyZXR1cm4g cmV0OworCX0KKworCXJldCA9IG92ODg2NV9taXBpX2NvbmZpZ3VyZShzZW5zb3IpOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihzZW5zb3ItPmRldiwgImZhaWxlZCB0byBjb25maWd1cmUgTUlQSVxu Iik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb3Y4ODY1X2lzcF9jb25maWd1cmUoc2Vu c29yKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoc2Vuc29yLT5kZXYsICJmYWlsZWQgdG8gY29u ZmlndXJlIElTUFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb3Y4ODY1X2JsYWNr X2xldmVsX2NvbmZpZ3VyZShzZW5zb3IpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZW5zb3It PmRldiwgImZhaWxlZCB0byBjb25maWd1cmUgYmxhY2sgbGV2ZWxcbiIpOworCQlyZXR1cm4gcmV0 OworCX0KKworCS8qIENvbmZpZ3VyZSBjdXJyZW50IG1vZGUuICovCisJcmV0ID0gb3Y4ODY1X3N0 YXRlX2NvbmZpZ3VyZShzZW5zb3IsIHNlbnNvci0+c3RhdGUubW9kZSwKKwkJCQkgICAgIHNlbnNv ci0+c3RhdGUubWJ1c19jb2RlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoc2Vuc29yLT5kZXYs ICJmYWlsZWQgdG8gY29uZmlndXJlIHN0YXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjg4NjVfc2Vuc29yX3Bvd2VyKHN0cnVjdCBvdjg4 NjVfc2Vuc29yICpzZW5zb3IsIGJvb2wgb24pCit7CisJLyogS2VlcCBpbml0aWFsaXplZCB0byB6 ZXJvIGZvciBkaXNhYmxlIGxhYmVsLiAqLworCWludCByZXQgPSAwOworCisJaWYgKG9uKSB7CisJ CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChzZW5zb3ItPnJlc2V0LCAxKTsKKwkJZ3Bpb2Rfc2V0 X3ZhbHVlX2NhbnNsZWVwKHNlbnNvci0+cG93ZXJkb3duLCAxKTsKKworCQlyZXQgPSByZWd1bGF0 b3JfZW5hYmxlKHNlbnNvci0+ZG92ZGQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKHNlbnNv ci0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gZW5hYmxlIERPVkREIHJlZ3VsYXRvclxuIik7CisJCQln b3RvIGRpc2FibGU7CisJCX0KKworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHNlbnNvci0+YXZk ZCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoc2Vuc29yLT5kZXYsCisJCQkJImZhaWxlZCB0 byBlbmFibGUgQVZERCByZWd1bGF0b3JcbiIpOworCQkJZ290byBkaXNhYmxlOworCQl9CisKKwkJ cmV0ID0gcmVndWxhdG9yX2VuYWJsZShzZW5zb3ItPmR2ZGQpOworCQlpZiAocmV0KSB7CisJCQlk ZXZfZXJyKHNlbnNvci0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gZW5hYmxlIERWREQgcmVndWxhdG9y XG4iKTsKKwkJCWdvdG8gZGlzYWJsZTsKKwkJfQorCisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJs ZShzZW5zb3ItPmV4dGNsayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoc2Vuc29yLT5kZXYs ICJmYWlsZWQgdG8gZW5hYmxlIEVYVENMSyBjbG9ja1xuIik7CisJCQlnb3RvIGRpc2FibGU7CisJ CX0KKworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoc2Vuc29yLT5yZXNldCwgMCk7CisJCWdw aW9kX3NldF92YWx1ZV9jYW5zbGVlcChzZW5zb3ItPnBvd2VyZG93biwgMCk7CisKKwkJLyogVGlt ZSB0byBlbnRlciBzdHJlYW1pbmcgbW9kZSBhY2NvcmRpbmcgdG8gcG93ZXIgdGltaW5ncy4gKi8K KwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMjAwMCk7CisJfSBlbHNlIHsKK2Rpc2FibGU6CisJCWdw aW9kX3NldF92YWx1ZV9jYW5zbGVlcChzZW5zb3ItPnBvd2VyZG93biwgMSk7CisJCWdwaW9kX3Nl dF92YWx1ZV9jYW5zbGVlcChzZW5zb3ItPnJlc2V0LCAxKTsKKworCQljbGtfZGlzYWJsZV91bnBy ZXBhcmUoc2Vuc29yLT5leHRjbGspOworCisJCXJlZ3VsYXRvcl9kaXNhYmxlKHNlbnNvci0+ZHZk ZCk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHNlbnNvci0+YXZkZCk7CisJCXJlZ3VsYXRvcl9kaXNh YmxlKHNlbnNvci0+ZG92ZGQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIENvbnRyb2xz ICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQor eworCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2ID0gb3Y4ODY1X2N0cmxfc3ViZGV2KGN0cmwp OworCXN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IgPSBvdjg4NjVfc3ViZGV2X3NlbnNvcihz dWJkZXYpOworCXVuc2lnbmVkIGludCBpbmRleDsKKwlpbnQgcmV0OworCisJLyogV2FpdCBmb3Ig dGhlIHNlbnNvciB0byBiZSBvbiBiZWZvcmUgc2V0dGluZyBjb250cm9scy4gKi8KKwlpZiAocG1f cnVudGltZV9zdXNwZW5kZWQoc2Vuc29yLT5kZXYpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAo Y3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQlyZXQgPSBvdjg4NjVfZXhw b3N1cmVfY29uZmlndXJlKHNlbnNvciwgY3RybC0+dmFsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVy biByZXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJcmV0ID0gb3Y4ODY1X2dh aW5fY29uZmlndXJlKHNlbnNvciwgY3RybC0+dmFsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCXJldHVybiBvdjg4 NjVfcmVkX2JhbGFuY2VfY29uZmlndXJlKHNlbnNvciwgY3RybC0+dmFsKTsKKwljYXNlIFY0TDJf Q0lEX0JMVUVfQkFMQU5DRToKKwkJcmV0dXJuIG92ODg2NV9ibHVlX2JhbGFuY2VfY29uZmlndXJl KHNlbnNvciwgY3RybC0+dmFsKTsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQlyZXR1cm4gb3Y4 ODY1X2ZsaXBfaG9yel9jb25maWd1cmUoc2Vuc29yLCAhIWN0cmwtPnZhbCk7CisJY2FzZSBWNEwy X0NJRF9WRkxJUDoKKwkJcmV0dXJuIG92ODg2NV9mbGlwX3ZlcnRfY29uZmlndXJlKHNlbnNvciwg ISFjdHJsLT52YWwpOworCWNhc2UgVjRMMl9DSURfVEVTVF9QQVRURVJOOgorCQlpbmRleCA9ICh1 bnNpZ25lZCBpbnQpY3RybC0+dmFsOworCQlyZXR1cm4gb3Y4ODY1X3Rlc3RfcGF0dGVybl9jb25m aWd1cmUoc2Vuc29yLCBpbmRleCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBvdjg4 NjVfY3RybF9vcHMgPSB7CisJLnNfY3RybAkJCT0gb3Y4ODY1X3NfY3RybCwKK307CisKK3N0YXRp YyBpbnQgb3Y4ODY1X2N0cmxzX2luaXQoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvcikKK3sK KwlzdHJ1Y3Qgb3Y4ODY1X2N0cmxzICpjdHJscyA9ICZzZW5zb3ItPmN0cmxzOworCXN0cnVjdCB2 NGwyX2N0cmxfaGFuZGxlciAqaGFuZGxlciA9ICZjdHJscy0+aGFuZGxlcjsKKwljb25zdCBzdHJ1 Y3QgdjRsMl9jdHJsX29wcyAqb3BzID0gJm92ODg2NV9jdHJsX29wczsKKwlpbnQgcmV0OworCisJ djRsMl9jdHJsX2hhbmRsZXJfaW5pdChoYW5kbGVyLCAzMik7CisKKwkvKiBVc2Ugb3VyIG11dGV4 IGZvciBjdHJsIGxvY2tpbmcuICovCisJaGFuZGxlci0+bG9jayA9ICZzZW5zb3ItPm11dGV4Owor CisJLyogRXhwb3N1cmUgKi8KKworCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIG9wcywgVjRM Ml9DSURfRVhQT1NVUkUsIDE2LCAxMDQ4NTc1LCAxNiwKKwkJCSAgNTEyKTsKKworCS8qIEdhaW4g Ki8KKworCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIG9wcywgVjRMMl9DSURfR0FJTiwgMTI4 LCA4MTkxLCAxMjgsIDEyOCk7CisKKwkvKiBXaGl0ZSBCYWxhbmNlICovCisKKwl2NGwyX2N0cmxf bmV3X3N0ZChoYW5kbGVyLCBvcHMsIFY0TDJfQ0lEX1JFRF9CQUxBTkNFLCAxLCAzMjc2NywgMSwK KwkJCSAgMTAyNCk7CisKKwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCBvcHMsIFY0TDJfQ0lE X0JMVUVfQkFMQU5DRSwgMSwgMzI3NjcsIDEsCisJCQkgIDEwMjQpOworCisJLyogRmxpcCAqLwor CisJdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgb3BzLCBWNEwyX0NJRF9IRkxJUCwgMCwgMSwg MSwgMCk7CisJdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgb3BzLCBWNEwyX0NJRF9WRkxJUCwg MCwgMSwgMSwgMCk7CisKKwkvKiBUZXN0IFBhdHRlcm4gKi8KKworCXY0bDJfY3RybF9uZXdfc3Rk X21lbnVfaXRlbXMoaGFuZGxlciwgb3BzLCBWNEwyX0NJRF9URVNUX1BBVFRFUk4sCisJCQkJICAg ICBBUlJBWV9TSVpFKG92ODg2NV90ZXN0X3BhdHRlcm5fbWVudSkgLSAxLAorCQkJCSAgICAgMCwg MCwgb3Y4ODY1X3Rlc3RfcGF0dGVybl9tZW51KTsKKworCS8qIE1JUEkgQ1NJLTIgKi8KKworCWN0 cmxzLT5saW5rX2ZyZXEgPQorCQl2NGwyX2N0cmxfbmV3X2ludF9tZW51KGhhbmRsZXIsIE5VTEws IFY0TDJfQ0lEX0xJTktfRlJFUSwKKwkJCQkgICAgICAgQVJSQVlfU0laRShvdjg4NjVfbGlua19m cmVxX21lbnUpIC0gMSwKKwkJCQkgICAgICAgMCwgb3Y4ODY1X2xpbmtfZnJlcV9tZW51KTsKKwor CWN0cmxzLT5saW5rX2ZyZXEtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKKwor CWN0cmxzLT5waXhlbF9yYXRlID0KKwkJdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgTlVMTCwg VjRMMl9DSURfUElYRUxfUkFURSwgMSwKKwkJCQkgIElOVF9NQVgsIDEsIDEpOworCisJY3RybHMt PnBpeGVsX3JhdGUtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKKworCWlmICho YW5kbGVyLT5lcnJvcikgeworCQlyZXQgPSBoYW5kbGVyLT5lcnJvcjsKKwkJZ290byBlcnJvcl9j dHJsczsKKwl9CisKKwlzZW5zb3ItPnN1YmRldi5jdHJsX2hhbmRsZXIgPSBoYW5kbGVyOworCisJ cmV0dXJuIDA7CisKK2Vycm9yX2N0cmxzOgorCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoaGFuZGxl cik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBTdWJkZXYgVmlkZW8gT3BlcmF0aW9ucyAqLwor CitzdGF0aWMgaW50IG92ODg2NV9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwg aW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yID0gb3Y4ODY1X3N1 YmRldl9zZW5zb3Ioc3ViZGV2KTsKKwlzdHJ1Y3Qgb3Y4ODY1X3N0YXRlICpzdGF0ZSA9ICZzZW5z b3ItPnN0YXRlOworCWludCByZXQgPSAwOworCisJaWYgKGVuYWJsZSkgeworCQlyZXQgPSBwbV9y dW50aW1lX2dldF9zeW5jKHNlbnNvci0+ZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXBtX3J1 bnRpbWVfcHV0X25vaWRsZShzZW5zb3ItPmRldik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQor CisJbXV0ZXhfbG9jaygmc2Vuc29yLT5tdXRleCk7CisJcmV0ID0gb3Y4ODY1X3N3X3N0YW5kYnko c2Vuc29yLCAhZW5hYmxlKTsKKwltdXRleF91bmxvY2soJnNlbnNvci0+bXV0ZXgpOworCisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN0YXRlLT5zdHJlYW1pbmcgPSAhIWVuYWJsZTsKKwor CWlmICghZW5hYmxlKQorCQlwbV9ydW50aW1lX3B1dChzZW5zb3ItPmRldik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBvdjg4NjVfZ19mcmFtZV9pbnRlcnZhbChzdHJ1Y3QgdjRsMl9z dWJkZXYgKnN1YmRldiwKKwkJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50ZXJ2YWwg KmludGVydmFsKQoreworCXN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IgPSBvdjg4NjVfc3Vi ZGV2X3NlbnNvcihzdWJkZXYpOworCWNvbnN0IHN0cnVjdCBvdjg4NjVfbW9kZSAqbW9kZTsKKwlp bnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnNlbnNvci0+bXV0ZXgpOworCisJbW9kZSA9IHNl bnNvci0+c3RhdGUubW9kZTsKKwlpbnRlcnZhbC0+aW50ZXJ2YWwgPSBtb2RlLT5mcmFtZV9pbnRl cnZhbDsKKworCW11dGV4X3VubG9jaygmc2Vuc29yLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBvdjg4NjVfc3Vi ZGV2X3ZpZGVvX29wcyA9IHsKKwkuc19zdHJlYW0JCT0gb3Y4ODY1X3Nfc3RyZWFtLAorCS5nX2Zy YW1lX2ludGVydmFsCT0gb3Y4ODY1X2dfZnJhbWVfaW50ZXJ2YWwsCisJLnNfZnJhbWVfaW50ZXJ2 YWwJPSBvdjg4NjVfZ19mcmFtZV9pbnRlcnZhbCwKK307CisKKy8qIFN1YmRldiBQYWQgT3BlcmF0 aW9ucyAqLworCitzdGF0aWMgaW50IG92ODg2NV9lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9z dWJkZXYgKnN1YmRldiwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNvbmZp ZywKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtICpjb2RlX2VudW0pCit7 CisJaWYgKGNvZGVfZW51bS0+aW5kZXggPj0gQVJSQVlfU0laRShvdjg4NjVfbWJ1c19jb2Rlcykp CisJCXJldHVybiAtRUlOVkFMOworCisJY29kZV9lbnVtLT5jb2RlID0gb3Y4ODY1X21idXNfY29k ZXNbY29kZV9lbnVtLT5pbmRleF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3Y4 ODY1X21idXNfZm9ybWF0X2ZpbGwoc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWJ1c19mb3Jt YXQsCisJCQkJICAgIHUzMiBtYnVzX2NvZGUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvdjg4NjVf bW9kZSAqbW9kZSkKK3sKKwltYnVzX2Zvcm1hdC0+d2lkdGggPSBtb2RlLT5vdXRwdXRfc2l6ZV94 OworCW1idXNfZm9ybWF0LT5oZWlnaHQgPSBtb2RlLT5vdXRwdXRfc2l6ZV95OworCW1idXNfZm9y bWF0LT5jb2RlID0gbWJ1c19jb2RlOworCisJbWJ1c19mb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVM RF9OT05FOworCW1idXNfZm9ybWF0LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1JBVzsK KwltYnVzX2Zvcm1hdC0+eWNiY3JfZW5jID0KKwkJVjRMMl9NQVBfWUNCQ1JfRU5DX0RFRkFVTFQo bWJ1c19mb3JtYXQtPmNvbG9yc3BhY2UpOworCW1idXNfZm9ybWF0LT5xdWFudGl6YXRpb24gPSBW NEwyX1FVQU5USVpBVElPTl9GVUxMX1JBTkdFOworCW1idXNfZm9ybWF0LT54ZmVyX2Z1bmMgPQor CQlWNEwyX01BUF9YRkVSX0ZVTkNfREVGQVVMVChtYnVzX2Zvcm1hdC0+Y29sb3JzcGFjZSk7Cit9 CisKK3N0YXRpYyBpbnQgb3Y4ODY1X2dldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYs CisJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjb25maWcsCisJCQkgIHN0cnVj dCB2NGwyX3N1YmRldl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAq c2Vuc29yID0gb3Y4ODY1X3N1YmRldl9zZW5zb3Ioc3ViZGV2KTsKKwlzdHJ1Y3QgdjRsMl9tYnVz X2ZyYW1lZm10ICptYnVzX2Zvcm1hdCA9ICZmb3JtYXQtPmZvcm1hdDsKKworCW11dGV4X2xvY2so JnNlbnNvci0+bXV0ZXgpOworCisJaWYgKGZvcm1hdC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9S TUFUX1RSWSkKKwkJKm1idXNfZm9ybWF0ID0gKnY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KHN1 YmRldiwgY29uZmlnLAorCQkJCQkJCSAgIGZvcm1hdC0+cGFkKTsKKwllbHNlCisJCW92ODg2NV9t YnVzX2Zvcm1hdF9maWxsKG1idXNfZm9ybWF0LCBzZW5zb3ItPnN0YXRlLm1idXNfY29kZSwKKwkJ CQkJc2Vuc29yLT5zdGF0ZS5tb2RlKTsKKworCW11dGV4X3VubG9jaygmc2Vuc29yLT5tdXRleCk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjg4NjVfc2V0X2ZtdChzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnN1YmRldiwKKwkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNv bmZpZywKKwkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cnVj dCBvdjg4NjVfc2Vuc29yICpzZW5zb3IgPSBvdjg4NjVfc3ViZGV2X3NlbnNvcihzdWJkZXYpOwor CXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1idXNfZm9ybWF0ID0gJmZvcm1hdC0+Zm9ybWF0 OworCWNvbnN0IHN0cnVjdCBvdjg4NjVfbW9kZSAqbW9kZTsKKwl1MzIgbWJ1c19jb2RlID0gMDsK Kwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZzZW5z b3ItPm11dGV4KTsKKworCWlmIChzZW5zb3ItPnN0YXRlLnN0cmVhbWluZykgeworCQlyZXQgPSAt RUJVU1k7CisJCWdvdG8gY29tcGxldGU7CisJfQorCisJLyogVHJ5IHRvIGZpbmQgcmVxdWVzdGVk IG1idXMgY29kZS4gKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBBUlJBWV9TSVpFKG92ODg2 NV9tYnVzX2NvZGVzKTsgaW5kZXgrKykgeworCQlpZiAob3Y4ODY1X21idXNfY29kZXNbaW5kZXhd ID09IG1idXNfZm9ybWF0LT5jb2RlKSB7CisJCQltYnVzX2NvZGUgPSBtYnVzX2Zvcm1hdC0+Y29k ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRmFsbGJhY2sgdG8gZGVmYXVsdC4gKi8KKwlp ZiAoIW1idXNfY29kZSkKKwkJbWJ1c19jb2RlID0gb3Y4ODY1X21idXNfY29kZXNbMF07CisKKwkv KiBGaW5kIHRoZSBtb2RlIHdpdGggbmVhcmVzdCBkaW1lbnNpb25zLiAqLworCW1vZGUgPSB2NGwy X2ZpbmRfbmVhcmVzdF9zaXplKG92ODg2NV9tb2RlcywgQVJSQVlfU0laRShvdjg4NjVfbW9kZXMp LAorCQkJCSAgICAgIG91dHB1dF9zaXplX3gsIG91dHB1dF9zaXplX3ksCisJCQkJICAgICAgbWJ1 c19mb3JtYXQtPndpZHRoLCBtYnVzX2Zvcm1hdC0+aGVpZ2h0KTsKKwlpZiAoIW1vZGUpCisJCXJl dHVybiAtRUlOVkFMOworCisJb3Y4ODY1X21idXNfZm9ybWF0X2ZpbGwobWJ1c19mb3JtYXQsIG1i dXNfY29kZSwgbW9kZSk7CisKKwlpZiAoZm9ybWF0LT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JN QVRfVFJZKSB7CisJCSp2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdChzdWJkZXYsIGNvbmZpZywg Zm9ybWF0LT5wYWQpID0KKwkJCSptYnVzX2Zvcm1hdDsKKwl9IGVsc2UgaWYgKHNlbnNvci0+c3Rh dGUubW9kZSAhPSBtb2RlIHx8CisJCSAgIHNlbnNvci0+c3RhdGUubWJ1c19jb2RlICE9IG1idXNf Y29kZSkgeworCQlyZXQgPSBvdjg4NjVfc3RhdGVfY29uZmlndXJlKHNlbnNvciwgbW9kZSwgbWJ1 c19jb2RlKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY29tcGxldGU7CisJfQorCitjb21wbGV0ZToK KwltdXRleF91bmxvY2soJnNlbnNvci0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBvdjg4NjVfZW51bV9mcmFtZV9zaXplKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2 LAorCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNvbmZpZywKKwkJCQkgIHN0 cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9zaXplX2VudW0gKnNpemVfZW51bSkKK3sKKwljb25zdCBz dHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGU7CisKKwlpZiAoc2l6ZV9lbnVtLT5pbmRleCA+PSBBUlJB WV9TSVpFKG92ODg2NV9tb2RlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJbW9kZSA9ICZvdjg4 NjVfbW9kZXNbc2l6ZV9lbnVtLT5pbmRleF07CisKKwlzaXplX2VudW0tPm1pbl93aWR0aCA9IHNp emVfZW51bS0+bWF4X3dpZHRoID0gbW9kZS0+b3V0cHV0X3NpemVfeDsKKwlzaXplX2VudW0tPm1p bl9oZWlnaHQgPSBzaXplX2VudW0tPm1heF9oZWlnaHQgPSBtb2RlLT5vdXRwdXRfc2l6ZV95Owor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X2VudW1fZnJhbWVfaW50ZXJ2YWwo c3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCisJCQkJICAgICAgc3RydWN0IHY0bDJfc3ViZGV2 X3BhZF9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVf aW50ZXJ2YWxfZW51bSAqaW50ZXJ2YWxfZW51bSkKK3sKKwljb25zdCBzdHJ1Y3Qgb3Y4ODY1X21v ZGUgKm1vZGUgPSBOVUxMOworCXVuc2lnbmVkIGludCBtb2RlX2luZGV4OworCXVuc2lnbmVkIGlu dCBpbnRlcnZhbF9pbmRleDsKKworCWlmIChpbnRlcnZhbF9lbnVtLT5pbmRleCA+IDApCisJCXJl dHVybiAtRUlOVkFMOworCS8qCisJICogTXVsdGlwbGUgbW9kZXMgd2l0aCB0aGUgc2FtZSBkaW1l bnNpb25zIG1heSBoYXZlIGRpZmZlcmVudCBmcmFtZQorCSAqIGludGVydmFscywgc28gbG9vayB1 cCBlYWNoIHJlbGV2YW50IG1vZGUuCisJICovCisJZm9yIChtb2RlX2luZGV4ID0gMCwgaW50ZXJ2 YWxfaW5kZXggPSAwOworCSAgICAgbW9kZV9pbmRleCA8IEFSUkFZX1NJWkUob3Y4ODY1X21vZGVz KTsgbW9kZV9pbmRleCsrKSB7CisJCW1vZGUgPSAmb3Y4ODY1X21vZGVzW21vZGVfaW5kZXhdOwor CisJCWlmIChtb2RlLT5vdXRwdXRfc2l6ZV94ID09IGludGVydmFsX2VudW0tPndpZHRoICYmCisJ CSAgICBtb2RlLT5vdXRwdXRfc2l6ZV95ID09IGludGVydmFsX2VudW0tPmhlaWdodCkgeworCQkJ aWYgKGludGVydmFsX2luZGV4ID09IGludGVydmFsX2VudW0tPmluZGV4KQorCQkJCWJyZWFrOwor CisJCQlpbnRlcnZhbF9pbmRleCsrOworCQl9CisJfQorCisJaWYgKG1vZGVfaW5kZXggPT0gQVJS QVlfU0laRShvdjg4NjVfbW9kZXMpIHx8ICFtb2RlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlu dGVydmFsX2VudW0tPmludGVydmFsID0gbW9kZS0+ZnJhbWVfaW50ZXJ2YWw7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIG92ODg2NV9z dWJkZXZfcGFkX29wcyA9IHsKKwkuZW51bV9tYnVzX2NvZGUJCT0gb3Y4ODY1X2VudW1fbWJ1c19j b2RlLAorCS5nZXRfZm10CQk9IG92ODg2NV9nZXRfZm10LAorCS5zZXRfZm10CQk9IG92ODg2NV9z ZXRfZm10LAorCS5lbnVtX2ZyYW1lX3NpemUJPSBvdjg4NjVfZW51bV9mcmFtZV9zaXplLAorCS5l bnVtX2ZyYW1lX2ludGVydmFsCT0gb3Y4ODY1X2VudW1fZnJhbWVfaW50ZXJ2YWwsCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBvdjg4NjVfc3ViZGV2X29wcyA9IHsK KwkudmlkZW8JCT0gJm92ODg2NV9zdWJkZXZfdmlkZW9fb3BzLAorCS5wYWQJCT0gJm92ODg2NV9z dWJkZXZfcGFkX29wcywKK307CisKK3N0YXRpYyBpbnQgb3Y4ODY1X3N1c3BlbmQoc3RydWN0IGRl dmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50 KGRldik7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEo Y2xpZW50KTsKKwlzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yID0gb3Y4ODY1X3N1YmRldl9z ZW5zb3Ioc3ViZGV2KTsKKwlzdHJ1Y3Qgb3Y4ODY1X3N0YXRlICpzdGF0ZSA9ICZzZW5zb3ItPnN0 YXRlOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmc2Vuc29yLT5tdXRleCk7CisKKwlp ZiAoc3RhdGUtPnN0cmVhbWluZykgeworCQlyZXQgPSBvdjg4NjVfc3dfc3RhbmRieShzZW5zb3Is IHRydWUpOworCQlpZiAocmV0KQorCQkJZ290byBjb21wbGV0ZTsKKwl9CisKKwlyZXQgPSBvdjg4 NjVfc2Vuc29yX3Bvd2VyKHNlbnNvciwgZmFsc2UpOworCWlmIChyZXQpIHsKKwkJb3Y4ODY1X3N3 X3N0YW5kYnkoc2Vuc29yLCBmYWxzZSk7CisJCWdvdG8gY29tcGxldGU7CisJfQorCitjb21wbGV0 ZToKKwltdXRleF91bmxvY2soJnNlbnNvci0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCBvdjg4NjVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB2NGwyX3N1 YmRldiAqc3ViZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92ODg2 NV9zZW5zb3IgKnNlbnNvciA9IG92ODg2NV9zdWJkZXZfc2Vuc29yKHN1YmRldik7CisJc3RydWN0 IG92ODg2NV9zdGF0ZSAqc3RhdGUgPSAmc2Vuc29yLT5zdGF0ZTsKKwlpbnQgcmV0ID0gMDsKKwor CW11dGV4X2xvY2soJnNlbnNvci0+bXV0ZXgpOworCisJcmV0ID0gb3Y4ODY1X3NlbnNvcl9wb3dl cihzZW5zb3IsIHRydWUpOworCWlmIChyZXQpCisJCWdvdG8gY29tcGxldGU7CisKKwlyZXQgPSBv djg4NjVfc2Vuc29yX2luaXQoc2Vuc29yKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3Bvd2Vy OworCisJcmV0ID0gX192NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmc2Vuc29yLT5jdHJscy5oYW5k bGVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3Bvd2VyOworCisJaWYgKHN0YXRlLT5zdHJl YW1pbmcpIHsKKwkJcmV0ID0gb3Y4ODY1X3N3X3N0YW5kYnkoc2Vuc29yLCBmYWxzZSk7CisJCWlm IChyZXQpCisJCQlnb3RvIGVycm9yX3Bvd2VyOworCX0KKworCWdvdG8gY29tcGxldGU7CisKK2Vy cm9yX3Bvd2VyOgorCW92ODg2NV9zZW5zb3JfcG93ZXIoc2Vuc29yLCBmYWxzZSk7CisKK2NvbXBs ZXRlOgorCW11dGV4X3VubG9jaygmc2Vuc29yLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IG92ODg2NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorewor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwlzdHJ1Y3QgZndub2RlX2hhbmRs ZSAqaGFuZGxlOworCXN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3I7CisJc3RydWN0IHY0bDJf c3ViZGV2ICpzdWJkZXY7CisJc3RydWN0IG1lZGlhX3BhZCAqcGFkOworCXVuc2lnbmVkIGxvbmcg cmF0ZTsKKwlpbnQgcmV0OworCisJc2Vuc29yID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpz ZW5zb3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlbnNvcikKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlzZW5zb3ItPmRldiA9IGRldjsKKwlzZW5zb3ItPmkyY19jbGllbnQgPSBjbGllbnQ7CisKKwkv KiBHcmFwaCBFbmRwb2ludCAqLworCisJaGFuZGxlID0gZndub2RlX2dyYXBoX2dldF9uZXh0X2Vu ZHBvaW50KGRldl9md25vZGUoZGV2KSwgTlVMTCk7CisJaWYgKCFoYW5kbGUpIHsKKwkJZGV2X2Vy cihkZXYsICJ1bmFibGUgdG8gZmluZCBlbnBvaW50IG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlzZW5zb3ItPmVuZHBvaW50LmJ1c190eXBlID0gVjRMMl9NQlVTX0NTSTJfRFBI WTsKKworCXJldCA9IHY0bDJfZndub2RlX2VuZHBvaW50X2FsbG9jX3BhcnNlKGhhbmRsZSwgJnNl bnNvci0+ZW5kcG9pbnQpOworCWZ3bm9kZV9oYW5kbGVfcHV0KGhhbmRsZSk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwYXJzZSBlbmRwb2ludCBub2RlXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwkvKiBHUElPcyAqLworCisJc2Vuc29yLT5wb3dlcmRvd24gPSBk ZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICJwb3dlcmRvd24iLAorCQkJCQkJICAgIEdQSU9E X09VVF9ISUdIKTsKKwlpZiAoSVNfRVJSKHNlbnNvci0+cG93ZXJkb3duKSkgeworCQlyZXQgPSBQ VFJfRVJSKHNlbnNvci0+cG93ZXJkb3duKTsKKwkJZ290byBlcnJvcl9lbmRwb2ludDsKKwl9CisK KwlzZW5zb3ItPnJlc2V0ID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAicmVzZXQiLCBH UElPRF9PVVRfSElHSCk7CisJaWYgKElTX0VSUihzZW5zb3ItPnJlc2V0KSkgeworCQlyZXQgPSBQ VFJfRVJSKHNlbnNvci0+cmVzZXQpOworCQlnb3RvIGVycm9yX2VuZHBvaW50OworCX0KKworCS8q IFJlZ3VsYXRvcnMgKi8KKworCS8qIERWREQ6IGRpZ2l0YWwgY29yZSAqLworCXNlbnNvci0+ZHZk ZCA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJkdmRkIik7CisJaWYgKElTX0VSUihzZW5zb3It PmR2ZGQpKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBEVkREIChkaWdpdGFsIGNvcmUp IHJlZ3VsYXRvclxuIik7CisJCXJldCA9IFBUUl9FUlIoc2Vuc29yLT5kdmRkKTsKKwkJZ290byBl cnJvcl9lbmRwb2ludDsKKwl9CisKKwkvKiBET1ZERDogZGlnaXRhbCBJL08gKi8KKwlzZW5zb3It PmRvdmRkID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgImRvdmRkIik7CisJaWYgKElTX0VSUihz ZW5zb3ItPmR2ZGQpKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBET1ZERCAoZGlnaXRh bCBJL08pIHJlZ3VsYXRvclxuIik7CisJCXJldCA9IFBUUl9FUlIoc2Vuc29yLT5kdmRkKTsKKwkJ Z290byBlcnJvcl9lbmRwb2ludDsKKwl9CisKKwkvKiBBVkREOiBhbmFsb2cgKi8KKwlzZW5zb3It PmF2ZGQgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAiYXZkZCIpOworCWlmIChJU19FUlIoc2Vu c29yLT5hdmRkKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgQVZERCAoYW5hbG9nKSBy ZWd1bGF0b3JcbiIpOworCQlyZXQgPSBQVFJfRVJSKHNlbnNvci0+ZHZkZCk7CisJCWdvdG8gZXJy b3JfZW5kcG9pbnQ7CisJfQorCisJLyogRXh0ZXJuYWwgQ2xvY2sgKi8KKworCXNlbnNvci0+ZXh0 Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihzZW5zb3ItPmV4dGNs aykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGV4dGVybmFsIGNsb2NrXG4iKTsK KwkJcmV0ID0gUFRSX0VSUihzZW5zb3ItPmV4dGNsayk7CisJCWdvdG8gZXJyb3JfZW5kcG9pbnQ7 CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShzZW5zb3ItPmV4dGNsayk7CisJaWYgKHJhdGUg IT0gT1Y4ODY1X0VYVENMS19SQVRFKSB7CisJCWRldl9lcnIoZGV2LCAiY2xvY2sgcmF0ZSAlbHUg SHogaXMgdW5zdXBwb3J0ZWRcbiIsIHJhdGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVy cm9yX2VuZHBvaW50OworCX0KKworCS8qIFN1YmRldiwgZW50aXR5IGFuZCBwYWQgKi8KKworCXN1 YmRldiA9ICZzZW5zb3ItPnN1YmRldjsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzdWJkZXYsIGNs aWVudCwgJm92ODg2NV9zdWJkZXZfb3BzKTsKKworCXN1YmRldi0+ZmxhZ3MgfD0gVjRMMl9TVUJE RVZfRkxfSEFTX0RFVk5PREU7CisJc3ViZGV2LT5lbnRpdHkuZnVuY3Rpb24gPSBNRURJQV9FTlRf Rl9DQU1fU0VOU09SOworCisJcGFkID0gJnNlbnNvci0+cGFkOworCXBhZC0+ZmxhZ3MgPSBNRURJ QV9QQURfRkxfU09VUkNFOworCisJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmc3ViZGV2 LT5lbnRpdHksIDEsIHBhZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9lbnRpdHk7CisKKwkv KiBNdXRleCAqLworCisJbXV0ZXhfaW5pdCgmc2Vuc29yLT5tdXRleCk7CisKKwkvKiBTZW5zb3Ig Ki8KKworCXJldCA9IG92ODg2NV9jdHJsc19pbml0KHNlbnNvcik7CisJaWYgKHJldCkKKwkJZ290 byBlcnJvcl9tdXRleDsKKworCXJldCA9IG92ODg2NV9zdGF0ZV9pbml0KHNlbnNvcik7CisJaWYg KHJldCkKKwkJZ290byBlcnJvcl9jdHJsczsKKworCS8qIFJ1bnRpbWUgUE0gKi8KKworCXBtX3J1 bnRpbWVfZW5hYmxlKHNlbnNvci0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoc2Vu c29yLT5kZXYpOworCisJLyogVjRMMiBzdWJkZXYgcmVnaXN0ZXIgKi8KKworCXJldCA9IHY0bDJf YXN5bmNfcmVnaXN0ZXJfc3ViZGV2X3NlbnNvcl9jb21tb24oc3ViZGV2KTsKKwlpZiAocmV0KQor CQlnb3RvIGVycm9yX2N0cmxzOworCisJcmV0dXJuIDA7CisKK2Vycm9yX3BtOgorCXBtX3J1bnRp bWVfZGlzYWJsZShzZW5zb3ItPmRldik7CisKK2Vycm9yX2N0cmxzOgorCXY0bDJfY3RybF9oYW5k bGVyX2ZyZWUoJnNlbnNvci0+Y3RybHMuaGFuZGxlcik7CisKK2Vycm9yX211dGV4OgorCW11dGV4 X2Rlc3Ryb3koJnNlbnNvci0+bXV0ZXgpOworCitlcnJvcl9lbnRpdHk6CisJbWVkaWFfZW50aXR5 X2NsZWFudXAoJnNlbnNvci0+c3ViZGV2LmVudGl0eSk7CisKK2Vycm9yX2VuZHBvaW50OgorCXY0 bDJfZndub2RlX2VuZHBvaW50X2ZyZWUoJnNlbnNvci0+ZW5kcG9pbnQpOworCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBvdjg4NjVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGll bnQpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEo Y2xpZW50KTsKKwlzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yID0gb3Y4ODY1X3N1YmRldl9z ZW5zb3Ioc3ViZGV2KTsKKworCXY0bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsK KwlwbV9ydW50aW1lX2Rpc2FibGUoc2Vuc29yLT5kZXYpOworCXY0bDJfY3RybF9oYW5kbGVyX2Zy ZWUoJnNlbnNvci0+Y3RybHMuaGFuZGxlcik7CisJbXV0ZXhfZGVzdHJveSgmc2Vuc29yLT5tdXRl eCk7CisJbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRldi0+ZW50aXR5KTsKKwl2NGwyX2Rldmlj ZV91bnJlZ2lzdGVyX3N1YmRldihzdWJkZXYpOworCisJdjRsMl9md25vZGVfZW5kcG9pbnRfZnJl ZSgmc2Vuc29yLT5lbmRwb2ludCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkZXZfcG1fb3BzIG92ODg2NV9wbV9vcHMgPSB7CisJU0VUX1JVTlRJTUVfUE1fT1BTKG92 ODg2NV9zdXNwZW5kLCBvdjg4NjVfcmVzdW1lLCBOVUxMKQorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgb3Y4ODY1X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJvdnRpLG92ODg2NSIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvdjg4 NjVfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgb3Y4ODY1X2RyaXZlciA9 IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJvdjg4NjUiLAorCQkub2ZfbWF0Y2hfdGFibGUg PSBvdjg4NjVfb2ZfbWF0Y2gsCisJCS5wbSA9ICZvdjg4NjVfcG1fb3BzLAorCX0sCisJLnByb2Jl X25ldyA9IG92ODg2NV9wcm9iZSwKKwkucmVtb3ZlCSA9IG92ODg2NV9yZW1vdmUsCit9OworCitt b2R1bGVfaTJjX2RyaXZlcihvdjg4NjVfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiUGF1bCBL b2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPiIpOworTU9EVUxFX0RF U0NSSVBUSU9OKCJWNEwyIGRyaXZlciBmb3IgdGhlIE9tbmlWaXNpb24gT1Y4ODY1IGltYWdlIHNl bnNvciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMi4yOS4yCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBt YWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=