Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp177080ybz; Wed, 15 Apr 2020 06:44:58 -0700 (PDT) X-Google-Smtp-Source: APiQypIMDJsKo10PECmS8Q6wKl0dNTRXKQha4tbJ1ziKGnxszcxHZ9SbnVlTdf0Z5ms6vWBrT61K X-Received: by 2002:aa7:c352:: with SMTP id j18mr7178180edr.196.1586958297623; Wed, 15 Apr 2020 06:44:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586958297; cv=none; d=google.com; s=arc-20160816; b=WAN9R46rE3dsjyuWBDwidSxhbLZNHs7kZDy+KbYvjJkvfQqMyIQjv/w4bHJaP0NSWG UAgZHSpgIR39S7Vru1D7gkrIncOyuLLQe/rNyKFHymVP4fk0wpaVENkzB/03MDA+KB7o Cvm9DUltaapMcAYqHwXpLqBGc8m2IGyY1jJM2maztNQKl/d8epQZaAwtsu9Y0cuYwQYk AVxZZ8LlP64PYmDg8Jwi+eMOJITK21v6FWfvnwQACYEJ1bjv9AxTHolDW9Bhc80aLZSf Df2e/4aaPyMtYokfh+ep/2wdyfkmEid092ixp+FdV6kiqWX5Uif3ti8wPUSkGQy6pff5 U/0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+mbUiuQLZGosgpaRLgSsUVN3cY3ohRNDz5/pOWfD7UM=; b=ISgUQLf4haY9eAD5gMBdbbYFuj0rRuz9jNRSUmGn8lkMioHHwzwvkB91Y7zbH2pwwp iNxwY36iankMOMl8pfRNqPK5ZnzlobDRNVXuZSeizx6cgVr3crkY3rUuG5GM+6z3vTIL nOZMBc35GOGmj0qTKK2BcY0W9YMC0jZDJuU3UFsCQySA8JGItM0uqcOwG7EI3FL1IDtf QmMqo5kr5Co/IwatPFns6CkiYURlr4lXq5LZT7L/QxVpyqGKD5dI1I7Rtd/qsZsB9Joc 5EEcvUAuG04V30qmq4qCK+gHlUUUNXTZLcVj2lVgjsDJ9eQR2RUuFj80755zktNDuyyZ N4vg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=CFzQOSD3; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e25si10299242eje.513.2020.04.15.06.44.32; Wed, 15 Apr 2020 06:44:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=CFzQOSD3; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2633633AbgDNVEE (ORCPT + 99 others); Tue, 14 Apr 2020 17:04:04 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:4735 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2633557AbgDNVB6 (ORCPT ); Tue, 14 Apr 2020 17:01:58 -0400 X-UUID: 57d3bb0522a64e4bbf67949ce638104e-20200415 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=+mbUiuQLZGosgpaRLgSsUVN3cY3ohRNDz5/pOWfD7UM=; b=CFzQOSD3mRR/sGCplWbYhx8BHIHEdjjJtOWP/dkUGnwA/Osli9u7LjKiYoyTKVcAeJDl0VOvJkFY//INbCG6fidQwvl1qzyw31s8snOCLFF7x4oZyYEFqKHCa6otmtzSUXVbGYuIeI2sehoVPvPVo2/WFXC4PQVodUG3GO0zYQw=; X-UUID: 57d3bb0522a64e4bbf67949ce638104e-20200415 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 778567809; Wed, 15 Apr 2020 05:01:25 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs08n2.mediatek.inc (172.21.101.56) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 15 Apr 2020 05:01:24 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 15 Apr 2020 05:01:21 +0800 From: Ryder Lee To: Felix Fietkau , Lorenzo Bianconi CC: Shayne Chen , YF Luo , Yiwei Chung , Chih-Min Chen , Evelyn Tsai , Sean Wang , , , Ryder Lee Subject: [PATCH v2 06/18] mt76: add mac80211 driver for MT7915 PCIe-based chipsets Date: Wed, 15 Apr 2020 05:01:04 +0800 Message-ID: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: DF5DD09BB7FFF709C7F3717547C5712BD414BA5D1AAD8243A3ED46BB3346C1262000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBNZWRpYVRlayBsYXRlc3QgZ2VuZXJhdGlvbiBJRUVFIDgwMi4x MWF4IDR4NA0KZGV2aWNlIE1UNzkxNUUsIHdoaWNoIHN1cHBvcnRzIGNvbmN1cnJlbnQgZHVhbC1i YW5kIG9wZXJhdGlvbiBhdA0KYm90aCA1R0h6IGFuZCAyLjRHSHouDQoNCk5vdGUgdGhhdCB0aGlz IHBhdGNoIGp1c3QgYWRkIGJhc2ljIHBhcnQgYW5kIHdpbGwgYWRkIG1vcmUgSEUNCmNhcGFiaWxp dGllcyBzdXBwb3J0IGluIHRoZSBmdXJ0aGVyIHBhdGNoZXMuDQoNClRoZSBkcml2ZXIgc3VwcG9y dHMgQVAsIFN0YXRpb24sIE1lc2ggYW5kIG1vbml0b3IgbW9kZS4NCg0KU2lnbmVkLW9mZi1ieTog UnlkZXIgTGVlIDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPg0KU2lnbmVkLW9mZi1ieTogU2hheW5l IENoZW4gPHNoYXluZS5jaGVuQG1lZGlhdGVrLmNvbT4NClNpZ25lZC1vZmYtYnk6IENoaWgtTWlu IENoZW4gPGNoaWgtbWluLmNoZW5AbWVkaWF0ZWsuY29tPg0KU3VnZ2VzdGVkLWJ5OiBTaGlod2Vp IExpbiA8c2hpaHdlaS5saW5AbWVkaWF0ZWsuY29tPg0KVGVzdGVkLWJ5OiBFdmVseW4gVHNhaSA8 ZXZlbHluLnRzYWlAbWVkaWF0ZWsuY29tPg0KQWNrZWQtYnk6IFlpd2VpIENodW5nIDx5aXdlaS5j aHVuZ0BtZWRpYXRlay5jb20+DQpBY2tlZC1ieTogWUYgTHVvIDx5Zi5sdW9AbWVkaWF0ZWsuY29t Pg0KLS0tDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnICAgIHwg ICAgMSArDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZSAgIHwg ICAgMSArDQogLi4uL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9LY29uZmlnIHwg ICAxMyArDQogLi4uL3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L01ha2VmaWxlICAgIHwg ICAgNiArDQogLi4uL3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2RlYnVnZnMuYyAgIHwg IDI0NSArKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZG1hLmMgICB8 ICAyODMgKysNCiAuLi4vd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmMgICAg fCAgMTI1ICsNCiAuLi4vd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmggICAg fCAgIDc4ICsNCiAuLi4vbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2luaXQuYyAg fCAgMzk1ICsrKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmMg ICB8IDEyOTQgKysrKysrKysrDQogLi4uL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzkx NS9tYWMuaCAgIHwgIDMyOCArKysNCiAuLi4vbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3 OTE1L21haW4uYyAgfCAgNzQxICsrKysrKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3 Ni9tdDc5MTUvbWN1LmMgICB8IDIzMTkgKysrKysrKysrKysrKysrKysNCiAuLi4vbmV0L3dpcmVs ZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5oICAgfCAgODM3ICsrKysrKw0KIC4uLi93aXJl bGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tdDc5MTUuaCAgICB8ICA0NDEgKysrKw0KIC4uLi9u ZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvcGNpLmMgICB8ICAxNjYgKysNCiAuLi4v bmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3JlZ3MuaCAgfCAgMzQzICsrKw0KIDE3 IGZpbGVzIGNoYW5nZWQsIDc2MTYgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9LY29uZmlnDQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L01h a2VmaWxlDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVr L210NzYvbXQ3OTE1L2RlYnVnZnMuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93 aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9kbWEuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9lZXByb20uYw0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9l ZXByb20uaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRl ay9tdDc2L210NzkxNS9pbml0LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2ly ZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmgNCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFpbi5j DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYv bXQ3OTE1L21jdS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21l ZGlhdGVrL210NzYvbXQ3OTE1L21jdS5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L210NzkxNS5oDQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3BjaS5jDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1 L3JlZ3MuaA0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3 Ni9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnDQpp bmRleCBjYmMyZDhhNWQzNTQuLjQxNTMzYTBlMTcyMCAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnDQpAQCAtMjQsMyArMjQsNCBAQCBzb3VyY2UgImRyaXZl cnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwL0tjb25maWciDQogc291cmNlICJk cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4Mi9LY29uZmlnIg0KIHNvdXJj ZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MDMvS2NvbmZpZyINCiBz b3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWci DQorc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9LY29u ZmlnIg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFr ZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L01ha2VmaWxlDQppbmRl eCBkN2ExZGRjOWU0MDcuLjFkZjA0MTU2Zjk3ZiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNz L21lZGlhdGVrL210NzYvTWFrZWZpbGUNCkBAIC0yNywzICsyNyw0IEBAIG9iai0kKENPTkZJR19N VDc2eDBfQ09NTU9OKSArPSBtdDc2eDAvDQogb2JqLSQoQ09ORklHX01UNzZ4Ml9DT01NT04pICs9 IG10NzZ4Mi8NCiBvYmotJChDT05GSUdfTVQ3NjAzRSkgKz0gbXQ3NjAzLw0KIG9iai0kKENPTkZJ R19NVDc2MTVFKSArPSBtdDc2MTUvDQorb2JqLSQoQ09ORklHX01UNzkxNUUpICs9IG10NzkxNS8N CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9L Y29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvS2NvbmZp Zw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uZDk4MjI1ZGE2OTRj DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2 L210NzkxNS9LY29uZmlnDQpAQCAtMCwwICsxLDEzIEBADQorIyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogSVNDDQorY29uZmlnIE1UNzkxNUUNCisJdHJpc3RhdGUgIk1lZGlhVGVrIE1UNzkxNUUg KFBDSWUpIHN1cHBvcnQiDQorCXNlbGVjdCBNVDc2X0NPUkUNCisJZGVwZW5kcyBvbiBNQUM4MDIx MQ0KKwlkZXBlbmRzIG9uIFBDSQ0KKwloZWxwDQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1U NzkxNS1iYXNlZCB3aXJlbGVzcyBQQ0llIGRldmljZXMsDQorCSAgd2hpY2ggc3VwcG9ydCBjb25j dXJyZW50IGR1YWwtYmFuZCBvcGVyYXRpb24gYXQgYm90aCA1R0h6DQorCSAgYW5kIDIuNEdIeiBJ RUVFIDgwMi4xMWF4IDR4NDo0U1MgMTAyNC1RQU0sIDE2ME1IeiBjaGFubmVscywNCisJICBPRkRN QSwgc3BhdGlhbCByZXVzZSBhbmQgZHVhbCBjYXJyaWVyIG1vZHVsYXRpb24uDQorDQorCSAgVG8g Y29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4NCmRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9NYWtlZmlsZSBi L2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L01ha2VmaWxlDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi41N2ZlNzI2Y2MzOGINCi0tLSAv ZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1 L01ha2VmaWxlDQpAQCAtMCwwICsxLDYgQEANCisjU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElT Qw0KKw0KK29iai0kKENPTkZJR19NVDc5MTVFKSArPSBtdDc5MTVlLm8NCisNCittdDc5MTVlLXkg Oj0gcGNpLm8gaW5pdC5vIGRtYS5vIGVlcHJvbS5vIG1haW4ubyBtY3UubyBtYWMubyBcDQorCSAg ICAgZGVidWdmcy5vDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc5MTUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3 Ni9tdDc5MTUvZGVidWdmcy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAw MDAwLi4xNTJhZTA2MTdmM2QNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVs ZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2RlYnVnZnMuYw0KQEAgLTAsMCArMSwyNDUgQEANCisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDDQorLyogQ29weXJpZ2h0IChDKSAyMDIwIE1l ZGlhVGVrIEluYy4gKi8NCisNCisjaW5jbHVkZSAibXQ3OTE1LmgiDQorI2luY2x1ZGUgImVlcHJv bS5oIg0KKw0KKy8qKiBnbG9iYWwgZGVidWdmcyAqKi8NCisNCisvKiB0ZXN0IGtub2Igb2Ygc3lz dGVtIGxheWVyIDEvMiBlcnJvciByZWNvdmVyeSAqLw0KK3N0YXRpYyBpbnQgbXQ3OTE1X3Nlcl90 cmlnZ2VyX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQ0KK3sNCisJZW51bSB7DQorCQlTRVJfU0VU X1JFQ09WRVJfTDEgPSAxLA0KKwkJU0VSX1NFVF9SRUNPVkVSX0wyLA0KKwkJU0VSX0VOQUJMRSA9 IDIsDQorCQlTRVJfUkVDT1ZFUg0KKwl9Ow0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gZGF0 YTsNCisJaW50IHJldCA9IDA7DQorDQorCXN3aXRjaCAodmFsKSB7DQorCWNhc2UgU0VSX1NFVF9S RUNPVkVSX0wxOg0KKwljYXNlIFNFUl9TRVRfUkVDT1ZFUl9MMjoNCisJCS8qIGZhbGwgdGhyb3Vn aCAqLw0KKwkJcmV0ID0gbXQ3OTE1X21jdV9zZXRfc2VyKGRldiwgU0VSX0VOQUJMRSwgQklUKHZh bCksIDApOw0KKwkJaWYgKHJldCkNCisJCQlyZXR1cm4gcmV0Ow0KKw0KKwkJcmV0dXJuIG10Nzkx NV9tY3Vfc2V0X3NlcihkZXYsIFNFUl9SRUNPVkVSLCB2YWwsIDApOw0KKwlkZWZhdWx0Og0KKwkJ YnJlYWs7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorREVGSU5FX0RFQlVHRlNfQVRU UklCVVRFKGZvcHNfc2VyX3RyaWdnZXIsIE5VTEwsDQorCQkJIG10NzkxNV9zZXJfdHJpZ2dlcl9z ZXQsICIlbGxkXG4iKTsNCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X3JhZGFyX3RyaWdnZXIodm9p ZCAqZGF0YSwgdTY0IHZhbCkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBkYXRhOw0K Kw0KKwlyZXR1cm4gbXQ3OTE1X21jdV9yZGRfY21kKGRldiwgUkREX1JBREFSX0VNVUxBVEUsIDEs IDAsIDApOw0KK30NCisNCitERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yYWRhcl90cmln Z2VyLCBOVUxMLA0KKwkJCSBtdDc5MTVfcmFkYXJfdHJpZ2dlciwgIiVsbGRcbiIpOw0KKw0KK3N0 YXRpYyBpbnQNCittdDc5MTVfZGJkY19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkNCit7DQorCXN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBkYXRhOw0KKw0KKwlpZiAodmFsKQ0KKwkJbXQ3OTE1X3Jl Z2lzdGVyX2V4dF9waHkoZGV2KTsNCisJZWxzZQ0KKwkJbXQ3OTE1X3VucmVnaXN0ZXJfZXh0X3Bo eShkZXYpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9kYmRj X2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYg PSBkYXRhOw0KKw0KKwkqdmFsID0gISFtdDc5MTVfZXh0X3BoeShkZXYpOw0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQorREVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKGZvcHNfZGJkYywgbXQ3OTE1X2Ri ZGNfZ2V0LA0KKwkJCSBtdDc5MTVfZGJkY19zZXQsICIlbGxkXG4iKTsNCisNCitzdGF0aWMgdm9p ZA0KK210NzkxNV9hbXBkdV9zdGF0X3JlYWRfcGh5KHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksDQor CQkJICAgc3RydWN0IHNlcV9maWxlICpmaWxlKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRl diA9IGZpbGUtPnByaXZhdGU7DQorCWJvb2wgZXh0X3BoeSA9IHBoeSAhPSAmZGV2LT5waHk7DQor CWludCBib3VuZFsxNV0sIHJhbmdlWzRdLCBpLCBuOw0KKw0KKwlpZiAoIXBoeSkNCisJCXJldHVy bjsNCisNCisJLyogVHggYW1wZHUgc3RhdCAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShyYW5nZSk7IGkrKykNCisJCXJhbmdlW2ldID0gbXQ3Nl9ycihkZXYsIE1UX01JQl9BUk5HKGV4 dF9waHksIGkpKTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYm91bmQpOyBpKysp DQorCQlib3VuZFtpXSA9IE1UX01JQl9BUk5DUl9SQU5HRShyYW5nZVtpIC8gNF0sIGkpICsgMTsN CisNCisJc2VxX3ByaW50ZihmaWxlLCAiXG5QaHkgJWRcbiIsIGV4dF9waHkpOw0KKw0KKwlzZXFf cHJpbnRmKGZpbGUsICJMZW5ndGg6ICU4ZCB8ICIsIGJvdW5kWzBdKTsNCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoYm91bmQpIC0gMTsgaSsrKQ0KKwkJc2VxX3ByaW50ZihmaWxlLCAiJTNk IC0lM2QgfCAiLA0KKwkJCSAgIGJvdW5kW2ldICsgMSwgYm91bmRbaSArIDFdKTsNCisNCisJc2Vx X3B1dHMoZmlsZSwgIlxuQ291bnQ6ICAiKTsNCisJbiA9IGV4dF9waHkgPyBBUlJBWV9TSVpFKGRl di0+bXQ3Ni5hZ2dyX3N0YXRzKSAvIDIgOiAwOw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShib3VuZCk7IGkrKykNCisJCXNlcV9wcmludGYoZmlsZSwgIiU4ZCB8ICIsIGRldi0+bXQ3Ni5h Z2dyX3N0YXRzW2kgKyBuXSk7DQorCXNlcV9wdXRzKGZpbGUsICJcbiIpOw0KKw0KKwlzZXFfcHJp bnRmKGZpbGUsICJCQSBtaXNzIGNvdW50OiAlZFxuIiwgcGh5LT5taWIuYmFfbWlzc19jbnQpOw0K K30NCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X3R4X3N0YXRzX3JlYWQoc3RydWN0IHNlcV9maWxl ICpmaWxlLCB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IGZpbGUt PnByaXZhdGU7DQorCWludCBzdGF0WzhdLCBpLCBuOw0KKw0KKwltdDc5MTVfYW1wZHVfc3RhdF9y ZWFkX3BoeSgmZGV2LT5waHksIGZpbGUpOw0KKwltdDc5MTVfYW1wZHVfc3RhdF9yZWFkX3BoeSht dDc5MTVfZXh0X3BoeShkZXYpLCBmaWxlKTsNCisNCisJLyogVHggYW1zZHUgaW5mbyAqLw0KKwlz ZXFfcHV0cyhmaWxlLCAiVHggTVNEVSBzdGF0OlxuIik7DQorCWZvciAoaSA9IDAsIG4gPSAwOyBp IDwgQVJSQVlfU0laRShzdGF0KTsgaSsrKSB7DQorCQlzdGF0W2ldID0gbXQ3Nl9ycihkZXYsICBN VF9QTEVfQU1TRFVfUEFDS19NU0RVX0NOVChpKSk7DQorCQluICs9IHN0YXRbaV07DQorCX0NCisN CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RhdCk7IGkrKykgew0KKwkJc2VxX3ByaW50 ZihmaWxlLCAiQU1TRFUgcGFjayBjb3VudCBvZiAlZCBNU0RVIGluIFRYRDogMHgleCAiLA0KKwkJ CSAgIGkgKyAxLCBzdGF0W2ldKTsNCisJCWlmIChuICE9IDApDQorCQkJc2VxX3ByaW50ZihmaWxl LCAiKCVkJSUpXG4iLCBzdGF0W2ldICogMTAwIC8gbik7DQorCQllbHNlDQorCQkJc2VxX3B1dHMo ZmlsZSwgIlxuIik7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitt dDc5MTVfdHhfc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikN Cit7DQorCXJldHVybiBzaW5nbGVfb3BlbihmLCBtdDc5MTVfdHhfc3RhdHNfcmVhZCwgaW5vZGUt PmlfcHJpdmF0ZSk7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IGZvcHNfdHhfc3RhdHMgPSB7DQorCS5vcGVuID0gbXQ3OTE1X3R4X3N0YXRzX29wZW4sDQorCS5y ZWFkID0gc2VxX3JlYWQsDQorCS5sbHNlZWsgPSBzZXFfbHNlZWssDQorCS5yZWxlYXNlID0gc2lu Z2xlX3JlbGVhc2UsDQorfTsNCisNCitzdGF0aWMgaW50IG10NzkxNV9yZWFkX3RlbXBlcmF0dXJl KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy0+cHJpdmF0ZSk7DQorCWludCB0ZW1wOw0KKw0KKwkv KiBjcHUgKi8NCisJdGVtcCA9IG10NzkxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlKGRldiwgMCk7DQor CXNlcV9wcmludGYocywgIlRlbXBlcmF0dXJlOiAlZFxuIiwgdGVtcCk7DQorDQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X3F1ZXVlc19hY3Eoc3RydWN0IHNlcV9maWxl ICpzLCB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IGRldl9nZXRf ZHJ2ZGF0YShzLT5wcml2YXRlKTsNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCAxNjsg aSsrKSB7DQorCQlpbnQgaiwgYWNzID0gaSAvIDQsIGluZGV4ID0gaSAlIDQ7DQorCQl1MzIgY3Ry bCwgdmFsLCBxbGVuID0gMDsNCisNCisJCXZhbCA9IG10NzZfcnIoZGV2LCBNVF9QTEVfQUNfUUVN UFRZKGFjcywgaW5kZXgpKTsNCisJCWN0cmwgPSBCSVQoMzEpIHwgQklUKDE1KSB8IChhY3MgPDwg OCk7DQorDQorCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgew0KKwkJCWlmICh2YWwgJiBCSVQo aikpDQorCQkJCWNvbnRpbnVlOw0KKw0KKwkJCW10NzZfd3IoZGV2LCBNVF9QTEVfRkxfUTBfQ1RS TCwNCisJCQkJY3RybCB8IChqICsgKGluZGV4IDw8IDUpKSk7DQorCQkJcWxlbiArPSBtdDc2X2dl dF9maWVsZChkZXYsIE1UX1BMRV9GTF9RM19DVFJMLA0KKwkJCQkJICAgICAgIEdFTk1BU0soMTEs IDApKTsNCisJCX0NCisJCXNlcV9wcmludGYocywgIkFDJWQlZDogcXVldWVkPSVkXG4iLCBhY3Ms IGluZGV4LCBxbGVuKTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0K K210NzkxNV9xdWV1ZXNfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpDQorew0K KwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKHMtPnByaXZhdGUpOw0K KwlzdGF0aWMgY29uc3Qgc3RydWN0IHsNCisJCWNoYXIgKnF1ZXVlOw0KKwkJaW50IGlkOw0KKwl9 IHF1ZXVlX21hcFtdID0gew0KKwkJeyAiV0ZETUEwIiwgTVRfVFhRX0JFIH0sDQorCQl7ICJNQ1VX TSIsIE1UX1RYUV9NQ1UgfSwNCisJCXsgIk1DVVdBIiwgTVRfVFhRX01DVV9XQSB9LA0KKwkJeyAi TUNVRldRIiwgTVRfVFhRX0ZXREwgfSwNCisJfTsNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKHF1ZXVlX21hcCk7IGkrKykgew0KKwkJc3RydWN0IG10NzZfc3dfcXVl dWUgKnEgPSAmZGV2LT5tdDc2LnFfdHhbcXVldWVfbWFwW2ldLmlkXTsNCisNCisJCWlmICghcS0+ cSkNCisJCQljb250aW51ZTsNCisNCisJCXNlcV9wcmludGYocywNCisJCQkgICAiJXM6CXF1ZXVl ZD0lZCBoZWFkPSVkIHRhaWw9JWRcbiIsDQorCQkJICAgcXVldWVfbWFwW2ldLnF1ZXVlLCBxLT5x LT5xdWV1ZWQsIHEtPnEtPmhlYWQsDQorCQkJICAgcS0+cS0+dGFpbCk7DQorCX0NCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK2ludCBtdDc5MTVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYpDQorew0KKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7DQorDQorCWRpciA9IG10NzZfcmVnaXN0 ZXJfZGVidWdmcygmZGV2LT5tdDc2KTsNCisJaWYgKCFkaXIpDQorCQlyZXR1cm4gLUVOT01FTTsN CisNCisJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi0+bXQ3Ni5kZXYsICJxdWV1ZXMi LCBkaXIsDQorCQkJCSAgICBtdDc5MTVfcXVldWVzX3JlYWQpOw0KKwlkZWJ1Z2ZzX2NyZWF0ZV9k ZXZtX3NlcWZpbGUoZGV2LT5tdDc2LmRldiwgImFjcSIsIGRpciwNCisJCQkJICAgIG10NzkxNV9x dWV1ZXNfYWNxKTsNCisJZGVidWdmc19jcmVhdGVfZmlsZSgidHhfc3RhdHMiLCAwNDAwLCBkaXIs IGRldiwgJmZvcHNfdHhfc3RhdHMpOw0KKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkYmRjIiwgMDYw MCwgZGlyLCBkZXYsICZmb3BzX2RiZGMpOw0KKwlkZWJ1Z2ZzX2NyZWF0ZV91MzIoImRmc19od19w YXR0ZXJuIiwgMDQwMCwgZGlyLCAmZGV2LT5od19wYXR0ZXJuKTsNCisJLyogdGVzdCBrbm9icyAq Lw0KKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyYWRhcl90cmlnZ2VyIiwgMDIwMCwgZGlyLCBkZXYs DQorCQkJICAgICZmb3BzX3JhZGFyX3RyaWdnZXIpOw0KKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJz ZXJfdHJpZ2dlciIsIDAyMDAsIGRpciwgZGV2LCAmZm9wc19zZXJfdHJpZ2dlcik7DQorCWRlYnVn ZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtPm10NzYuZGV2LCAidGVtcGVyYXR1cmUiLCBkaXIs DQorCQkJCSAgICBtdDc5MTVfcmVhZF90ZW1wZXJhdHVyZSk7DQorDQorCXJldHVybiAwOw0KK30N CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9k bWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2RtYS5jDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi4wMTU2ZTZlNTkzM2ENCi0t LSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3 OTE1L2RtYS5jDQpAQCAtMCwwICsxLDI4MyBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBJU0MNCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiAqLw0KKw0KKyNpbmNs dWRlICJtdDc5MTUuaCINCisjaW5jbHVkZSAiLi4vZG1hLmgiDQorI2luY2x1ZGUgIm1hYy5oIg0K Kw0KK3N0YXRpYyBpbnQNCittdDc5MTVfaW5pdF90eF9xdWV1ZXMoc3RydWN0IG10NzkxNV9kZXYg KmRldiwgaW50IG5fZGVzYykNCit7DQorCXN0cnVjdCBtdDc2X3N3X3F1ZXVlICpxOw0KKwlzdHJ1 Y3QgbXQ3Nl9xdWV1ZSAqaHdxOw0KKwlpbnQgZXJyLCBpOw0KKw0KKwlod3EgPSBkZXZtX2t6YWxs b2MoZGV2LT5tdDc2LmRldiwgc2l6ZW9mKCpod3EpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFod3Ep DQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJZXJyID0gbXQ3Nl9xdWV1ZV9hbGxvYyhkZXYsIGh3 cSwgTVQ3OTE1X1RYUV9CQU5EMCwgbl9kZXNjLCAwLA0KKwkJCSAgICAgICBNVF9UWF9SSU5HX0JB U0UpOw0KKwlpZiAoZXJyIDwgMCkNCisJCXJldHVybiBlcnI7DQorDQorCWZvciAoaSA9IDA7IGkg PCBNVF9UWFFfTUNVOyBpKyspIHsNCisJCXEgPSAmZGV2LT5tdDc2LnFfdHhbaV07DQorCQlJTklU X0xJU1RfSEVBRCgmcS0+c3dxKTsNCisJCXEtPnEgPSBod3E7DQorCX0NCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfaW5pdF9tY3VfcXVldWUoc3RydWN0IG10Nzkx NV9kZXYgKmRldiwgc3RydWN0IG10NzZfc3dfcXVldWUgKnEsDQorCQkgICAgICBpbnQgaWR4LCBp bnQgbl9kZXNjKQ0KK3sNCisJc3RydWN0IG10NzZfcXVldWUgKmh3cTsNCisJaW50IGVycjsNCisN CisJaHdxID0gZGV2bV9remFsbG9jKGRldi0+bXQ3Ni5kZXYsIHNpemVvZigqaHdxKSwgR0ZQX0tF Uk5FTCk7DQorCWlmICghaHdxKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWVyciA9IG10NzZf cXVldWVfYWxsb2MoZGV2LCBod3EsIGlkeCwgbl9kZXNjLCAwLCBNVF9UWF9SSU5HX0JBU0UpOw0K KwlpZiAoZXJyIDwgMCkNCisJCXJldHVybiBlcnI7DQorDQorCUlOSVRfTElTVF9IRUFEKCZxLT5z d3EpOw0KKwlxLT5xID0gaHdxOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBtdDc5MTVf cXVldWVfcnhfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgZW51bSBtdDc2X3J4cV9pZCBxLA0K KwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9 IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbXQ3OTE1X2RldiwgbXQ3Nik7DQorCV9fbGUzMiAq cnhkID0gKF9fbGUzMiAqKXNrYi0+ZGF0YTsNCisJZW51bSByeF9wa3RfdHlwZSB0eXBlOw0KKw0K Kwl0eXBlID0gRklFTERfR0VUKE1UX1JYRDBfUEtUX1RZUEUsIGxlMzJfdG9fY3B1KHJ4ZFswXSkp Ow0KKw0KKwlzd2l0Y2ggKHR5cGUpIHsNCisJY2FzZSBQS1RfVFlQRV9UWFJYX05PVElGWToNCisJ CW10NzkxNV9tYWNfdHhfZnJlZShkZXYsIHNrYik7DQorCQlicmVhazsNCisJY2FzZSBQS1RfVFlQ RV9SWF9FVkVOVDoNCisJCW10NzkxNV9tY3VfcnhfZXZlbnQoZGV2LCBza2IpOw0KKwkJYnJlYWs7 DQorCWNhc2UgUEtUX1RZUEVfTk9STUFMOg0KKwkJaWYgKCFtdDc5MTVfbWFjX2ZpbGxfcngoZGV2 LCBza2IpKSB7DQorCQkJbXQ3Nl9yeCgmZGV2LT5tdDc2LCBxLCBza2IpOw0KKwkJCXJldHVybjsN CisJCX0NCisJCS8qIGZhbGwgdGhyb3VnaCAqLw0KKwlkZWZhdWx0Og0KKwkJZGV2X2tmcmVlX3Nr Yihza2IpOw0KKwkJYnJlYWs7DQorCX0NCit9DQorDQorc3RhdGljIGludCBtdDc5MTVfcG9sbF90 eChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpDQorew0KKwlzdGF0aWMgY29u c3QgdTggcXVldWVfbWFwW10gPSB7DQorCQlNVF9UWFFfTUNVLA0KKwkJTVRfVFhRX01DVV9XQSwN CisJCU1UX1RYUV9CRQ0KKwl9Ow0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2Ow0KKwlpbnQgaTsN CisNCisJZGV2ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2LnR4 X25hcGkpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShxdWV1ZV9tYXApOyBpKysp DQorCQltdDc2X3F1ZXVlX3R4X2NsZWFudXAoZGV2LCBxdWV1ZV9tYXBbaV0sIGZhbHNlKTsNCisN CisJaWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSkNCisJCW10NzkxNV9pcnFfZW5hYmxl KGRldiwgTVRfSU5UX1RYX0RPTkVfQUxMKTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUocXVldWVfbWFwKTsgaSsrKQ0KKwkJbXQ3Nl9xdWV1ZV90eF9jbGVhbnVwKGRldiwgcXVldWVf bWFwW2ldLCBmYWxzZSk7DQorDQorCW10NzkxNV9tYWNfc3RhX3BvbGwoZGV2KTsNCisNCisJdGFz a2xldF9zY2hlZHVsZSgmZGV2LT5tdDc2LnR4X3Rhc2tsZXQpOw0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQordm9pZCBtdDc5MTVfZG1hX3ByZWZldGNoKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQor ew0KKyNkZWZpbmUgUFJFRkVUQ0goYmFzZSwgZGVwdGgpCSgoYmFzZSkgPDwgMTYgfCAoZGVwdGgp KQ0KKw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUEwX1JYX1JJTkcwX0VYVF9DVFJMLCBQUkVGRVRD SCgweDAsIDB4NCkpOw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUEwX1JYX1JJTkcxX0VYVF9DVFJM LCBQUkVGRVRDSCgweDQwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMF9SWF9SSU5H Ml9FWFRfQ1RSTCwgUFJFRkVUQ0goMHg4MCwgMHgwKSk7DQorDQorCW10NzZfd3IoZGV2LCBNVF9X RkRNQTFfVFhfUklORzBfRVhUX0NUUkwsIFBSRUZFVENIKDB4ODAsIDB4NCkpOw0KKwltdDc2X3dy KGRldiwgTVRfV0ZETUExX1RYX1JJTkcxX0VYVF9DVFJMLCBQUkVGRVRDSCgweGMwLCAweDQpKTsN CisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMl9FWFRfQ1RSTCwgUFJFRkVUQ0goMHgx MDAsIDB4NCkpOw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUExX1RYX1JJTkczX0VYVF9DVFJMLCBQ UkVGRVRDSCgweDE0MCwgMHg0KSk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfVFhfUklORzRf RVhUX0NUUkwsIFBSRUZFVENIKDB4MTgwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1B MV9UWF9SSU5HNV9FWFRfQ1RSTCwgUFJFRkVUQ0goMHgxYzAsIDB4NCkpOw0KKwltdDc2X3dyKGRl diwgTVRfV0ZETUExX1RYX1JJTkc2X0VYVF9DVFJMLCBQUkVGRVRDSCgweDIwMCwgMHg0KSk7DQor CW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfVFhfUklORzdfRVhUX0NUUkwsIFBSRUZFVENIKDB4MjQw LCAweDQpKTsNCisNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMTZfRVhUX0NUUkws IFBSRUZFVENIKDB4MjgwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5H MTdfRVhUX0NUUkwsIFBSRUZFVENIKDB4MmMwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dG RE1BMV9UWF9SSU5HMThfRVhUX0NUUkwsIFBSRUZFVENIKDB4MzAwLCAweDQpKTsNCisJbXQ3Nl93 cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMTlfRVhUX0NUUkwsIFBSRUZFVENIKDB4MzQwLCAweDQp KTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMjBfRVhUX0NUUkwsIFBSRUZFVENI KDB4MzgwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMjFfRVhUX0NU UkwsIFBSRUZFVENIKDB4M2MwLCAweDApKTsNCisNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9S WF9SSU5HMF9FWFRfQ1RSTCwgUFJFRkVUQ0goMHgzYzAsIDB4NCkpOw0KKwltdDc2X3dyKGRldiwg TVRfV0ZETUExX1JYX1JJTkcxX0VYVF9DVFJMLCBQUkVGRVRDSCgweDQwMCwgMHg0KSk7DQorCW10 NzZfd3IoZGV2LCBNVF9XRkRNQTFfUlhfUklORzJfRVhUX0NUUkwsIFBSRUZFVENIKDB4NDQwLCAw eDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9SWF9SSU5HM19FWFRfQ1RSTCwgUFJFRkVU Q0goMHg0ODAsIDB4MCkpOw0KK30NCisNCitpbnQgbXQ3OTE1X2RtYV9pbml0KHN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYpDQorew0KKwlpbnQgcmV0Ow0KKw0KKwltdDc2X2RtYV9hdHRhY2goJmRldi0+ bXQ3Nik7DQorDQorCS8qIGNvbmZpZ3VyZSBnbG9iYWwgc2V0dGluZyAqLw0KKwltdDc2X3NldChk ZXYsIE1UX1dGRE1BMV9HTE9fQ0ZHLA0KKwkJIE1UX1dGRE1BMV9HTE9fQ0ZHX09NSVRfVFhfSU5G TyB8DQorCQkgTVRfV0ZETUExX0dMT19DRkdfT01JVF9SWF9JTkZPKTsNCisNCisJLyogY29uZmln dXJlIHBlcmZldGNoIHNldHRpbmdzICovDQorCW10NzkxNV9kbWFfcHJlZmV0Y2goZGV2KTsNCisN CisJLyogcmVzZXQgZG1hIGlkeCAqLw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUEwX1JTVF9EVFhf UFRSLCB+MCk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfUlNUX0RUWF9QVFIsIH4wKTsNCisN CisJLyogY29uZmlndXJlIGRlbGF5IGludGVycnVwdCAqLw0KKwltdDc2X3dyKGRldiwgTVRfV0ZE TUEwX1BSSV9ETFlfSU5UX0NGRzAsIDApOw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUExX1BSSV9E TFlfSU5UX0NGRzAsIDApOw0KKw0KKwkvKiBpbml0IHR4IHF1ZXVlICovDQorCXJldCA9IG10Nzkx NV9pbml0X3R4X3F1ZXVlcyhkZXYsIE1UNzkxNV9UWF9SSU5HX1NJWkUpOw0KKwlpZiAocmV0KQ0K KwkJcmV0dXJuIHJldDsNCisNCisJLyogY29tbWFuZCB0byBXTSAqLw0KKwlyZXQgPSBtdDc5MTVf aW5pdF9tY3VfcXVldWUoZGV2LCAmZGV2LT5tdDc2LnFfdHhbTVRfVFhRX01DVV0sDQorCQkJCSAg ICBNVDc5MTVfVFhRX01DVV9XTSwNCisJCQkJICAgIE1UNzkxNV9UWF9NQ1VfUklOR19TSVpFKTsN CisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCS8qIGNvbW1hbmQgdG8gV0EgKi8NCisJ cmV0ID0gbXQ3OTE1X2luaXRfbWN1X3F1ZXVlKGRldiwgJmRldi0+bXQ3Ni5xX3R4W01UX1RYUV9N Q1VfV0FdLA0KKwkJCQkgICAgTVQ3OTE1X1RYUV9NQ1VfV0EsDQorCQkJCSAgICBNVDc5MTVfVFhf TUNVX1JJTkdfU0laRSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkvKiBmaXJt d2FyZSBkb3dubG9hZCAqLw0KKwlyZXQgPSBtdDc5MTVfaW5pdF9tY3VfcXVldWUoZGV2LCAmZGV2 LT5tdDc2LnFfdHhbTVRfVFhRX0ZXRExdLA0KKwkJCQkgICAgTVQ3OTE1X1RYUV9GV0RMLA0KKwkJ CQkgICAgTVQ3OTE1X1RYX0ZXRExfUklOR19TSVpFKTsNCisJaWYgKHJldCkNCisJCXJldHVybiBy ZXQ7DQorDQorCS8qIGV2ZW50IGZyb20gV00gKi8NCisJcmV0ID0gbXQ3Nl9xdWV1ZV9hbGxvYyhk ZXYsICZkZXYtPm10NzYucV9yeFtNVF9SWFFfTUNVXSwNCisJCQkgICAgICAgTVQ3OTE1X1JYUV9N Q1VfV00sIE1UNzkxNV9SWF9NQ1VfUklOR19TSVpFLA0KKwkJCSAgICAgICBNVF9SWF9CVUZfU0la RSwgTVRfUlhfRVZFTlRfUklOR19CQVNFKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQor DQorCS8qIGV2ZW50IGZyb20gV0EgKi8NCisJcmV0ID0gbXQ3Nl9xdWV1ZV9hbGxvYyhkZXYsICZk ZXYtPm10NzYucV9yeFtNVF9SWFFfTUNVX1dBXSwNCisJCQkgICAgICAgTVQ3OTE1X1JYUV9NQ1Vf V0EsIE1UNzkxNV9SWF9NQ1VfUklOR19TSVpFLA0KKwkJCSAgICAgICBNVF9SWF9CVUZfU0laRSwg TVRfUlhfRVZFTlRfUklOR19CQVNFKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQor CS8qIHJ4IGRhdGEgKi8NCisJcmV0ID0gbXQ3Nl9xdWV1ZV9hbGxvYyhkZXYsICZkZXYtPm10NzYu cV9yeFtNVF9SWFFfTUFJTl0sIDAsDQorCQkJICAgICAgIE1UNzkxNV9SWF9SSU5HX1NJWkUsIE1U X1JYX0JVRl9TSVpFLA0KKwkJCSAgICAgICBNVF9SWF9EQVRBX1JJTkdfQkFTRSk7DQorCWlmIChy ZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBtdDc2X2luaXRfcXVldWVzKGRldik7DQor CWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJbmV0aWZfdHhfbmFwaV9hZGQoJmRl di0+bXQ3Ni5uYXBpX2RldiwgJmRldi0+bXQ3Ni50eF9uYXBpLA0KKwkJCSAgbXQ3OTE1X3BvbGxf dHgsIE5BUElfUE9MTF9XRUlHSFQpOw0KKwluYXBpX2VuYWJsZSgmZGV2LT5tdDc2LnR4X25hcGkp Ow0KKw0KKwkvKiBoaWYgd2FpdCBXRkRNQSBpZGxlICovDQorCW10NzZfc2V0KGRldiwgTVRfV0ZE TUEwX0JVU1lfRU5BLA0KKwkJIE1UX1dGRE1BMF9CVVNZX0VOQV9UWF9GSUZPMCB8DQorCQkgTVRf V0ZETUEwX0JVU1lfRU5BX1RYX0ZJRk8xIHwNCisJCSBNVF9XRkRNQTBfQlVTWV9FTkFfUlhfRklG Tyk7DQorDQorCW10NzZfc2V0KGRldiwgTVRfV0ZETUExX0JVU1lfRU5BLA0KKwkJIE1UX1dGRE1B MV9CVVNZX0VOQV9UWF9GSUZPMCB8DQorCQkgTVRfV0ZETUExX0JVU1lfRU5BX1RYX0ZJRk8xIHwN CisJCSBNVF9XRkRNQTFfQlVTWV9FTkFfUlhfRklGTyk7DQorDQorCW10NzZfc2V0KGRldiwgTVRf V0ZETUEwX1BDSUUxX0JVU1lfRU5BLA0KKwkJIE1UX1dGRE1BMF9QQ0lFMV9CVVNZX0VOQV9UWF9G SUZPMCB8DQorCQkgTVRfV0ZETUEwX1BDSUUxX0JVU1lfRU5BX1RYX0ZJRk8xIHwNCisJCSBNVF9X RkRNQTBfUENJRTFfQlVTWV9FTkFfUlhfRklGTyk7DQorDQorCW10NzZfc2V0KGRldiwgTVRfV0ZE TUExX1BDSUUxX0JVU1lfRU5BLA0KKwkJIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VOQV9UWF9GSUZP MCB8DQorCQkgTVRfV0ZETUExX1BDSUUxX0JVU1lfRU5BX1RYX0ZJRk8xIHwNCisJCSBNVF9XRkRN QTFfUENJRTFfQlVTWV9FTkFfUlhfRklGTyk7DQorDQorCW10NzZfcG9sbChkZXYsIE1UX1dGRE1B X0VYVF9DU1JfSElGX01JU0MsDQorCQkgIE1UX1dGRE1BX0VYVF9DU1JfSElGX01JU0NfQlVTWSwg MCwgMTAwMCk7DQorDQorCS8qIHNldCBXRkRNQSBUeC9SeCAqLw0KKwltdDc2X3NldChkZXYsIE1U X1dGRE1BMF9HTE9fQ0ZHLA0KKwkJIE1UX1dGRE1BMF9HTE9fQ0ZHX1RYX0RNQV9FTiB8IE1UX1dG RE1BMF9HTE9fQ0ZHX1JYX0RNQV9FTik7DQorCW10NzZfc2V0KGRldiwgTVRfV0ZETUExX0dMT19D RkcsDQorCQkgTVRfV0ZETUExX0dMT19DRkdfVFhfRE1BX0VOIHwgTVRfV0ZETUExX0dMT19DRkdf UlhfRE1BX0VOKTsNCisNCisJLyogZW5hYmxlIGludGVycnVwdHMgZm9yIFRYL1JYIHJpbmdzICov DQorCW10NzkxNV9pcnFfZW5hYmxlKGRldiwgTVRfSU5UX1JYX0RPTkVfQUxMIHwgTVRfSU5UX1RY X0RPTkVfQUxMIHwNCisJCQkgIE1UX0lOVF9NQ1VfQ01EKTsNCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3ZvaWQgbXQ3OTE1X2RtYV9jbGVhbnVwKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0K KwkvKiBkaXNhYmxlICovDQorCW10NzZfY2xlYXIoZGV2LCBNVF9XRkRNQTBfR0xPX0NGRywNCisJ CSAgIE1UX1dGRE1BMF9HTE9fQ0ZHX1RYX0RNQV9FTiB8DQorCQkgICBNVF9XRkRNQTBfR0xPX0NG R19SWF9ETUFfRU4pOw0KKwltdDc2X2NsZWFyKGRldiwgTVRfV0ZETUExX0dMT19DRkcsDQorCQkg ICBNVF9XRkRNQTFfR0xPX0NGR19UWF9ETUFfRU4gfA0KKwkJICAgTVRfV0ZETUExX0dMT19DRkdf UlhfRE1BX0VOKTsNCisNCisJLyogcmVzZXQgKi8NCisJbXQ3Nl9jbGVhcihkZXYsIE1UX1dGRE1B MV9SU1QsDQorCQkgICBNVF9XRkRNQTFfUlNUX0RNQVNIRExfQUxMX1JTVCB8DQorCQkgICBNVF9X RkRNQTFfUlNUX0xPR0lDX1JTVCk7DQorDQorCW10NzZfc2V0KGRldiwgTVRfV0ZETUExX1JTVCwN CisJCSBNVF9XRkRNQTFfUlNUX0RNQVNIRExfQUxMX1JTVCB8DQorCQkgTVRfV0ZETUExX1JTVF9M T0dJQ19SU1QpOw0KKw0KKwltdDc2X2NsZWFyKGRldiwgTVRfV0ZETUEwX1JTVCwNCisJCSAgIE1U X1dGRE1BMF9SU1RfRE1BU0hETF9BTExfUlNUIHwNCisJCSAgIE1UX1dGRE1BMF9SU1RfTE9HSUNf UlNUKTsNCisNCisJbXQ3Nl9zZXQoZGV2LCBNVF9XRkRNQTBfUlNULA0KKwkJIE1UX1dGRE1BMF9S U1RfRE1BU0hETF9BTExfUlNUIHwNCisJCSBNVF9XRkRNQTBfUlNUX0xPR0lDX1JTVCk7DQorDQor CXRhc2tsZXRfa2lsbCgmZGV2LT5tdDc2LnR4X3Rhc2tsZXQpOw0KKwltdDc2X2RtYV9jbGVhbnVw KCZkZXYtPm10NzYpOw0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRp YXRlay9tdDc2L210NzkxNS9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVr L210NzYvbXQ3OTE1L2VlcHJvbS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MDAwMDAwLi4yMDk5ZGQ0MDUzMGYNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2VlcHJvbS5jDQpAQCAtMCwwICsxLDEyNSBAQA0K Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MNCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAg TWVkaWFUZWsgSW5jLiAqLw0KKw0KKyNpbmNsdWRlICJtdDc5MTUuaCINCisjaW5jbHVkZSAiZWVw cm9tLmgiDQorDQorc3RhdGljIGlubGluZSBib29sIG10NzkxNV9lZnVzZV92YWxpZCh1OCB2YWwp DQorew0KKwlyZXR1cm4gISh2YWwgPT0gMHhmZik7DQorfQ0KKw0KK3UzMiBtdDc5MTVfZWVwcm9t X3JlYWQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG9mZnNldCkNCit7DQorCXU4ICpkYXRh ID0gZGV2LT5tdDc2LmVlcHJvbS5kYXRhOw0KKw0KKwlpZiAoIW10NzkxNV9lZnVzZV92YWxpZChk YXRhW29mZnNldF0pKQ0KKwkJbXQ3OTE1X21jdV9nZXRfZWVwcm9tKGRldiwgb2Zmc2V0KTsNCisN CisJcmV0dXJuIGRhdGFbb2Zmc2V0XTsNCit9DQorDQorc3RhdGljIGludCBtdDc5MTVfZWVwcm9t X2xvYWQoc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCWludCByZXQ7DQorDQorCXJldCA9 IG10NzZfZWVwcm9tX2luaXQoJmRldi0+bXQ3NiwgTVQ3OTE1X0VFUFJPTV9TSVpFKTsNCisJaWYg KHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwltZW1zZXQoZGV2LT5tdDc2LmVlcHJvbS5k YXRhLCAtMSwgTVQ3OTE1X0VFUFJPTV9TSVpFKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgbXQ3OTE1X2NoZWNrX2VlcHJvbShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sN CisJdTE2IHZhbDsNCisJdTggKmVlcHJvbSA9IGRldi0+bXQ3Ni5lZXByb20uZGF0YTsNCisNCisJ bXQ3OTE1X2VlcHJvbV9yZWFkKGRldiwgMCk7DQorCXZhbCA9IGdldF91bmFsaWduZWRfbGUxNihl ZXByb20pOw0KKw0KKwlzd2l0Y2ggKHZhbCkgew0KKwljYXNlIDB4NzkxNToNCisJCXJldHVybiAw Ow0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCit9DQorDQorc3RhdGljIHZv aWQgbXQ3OTE1X2VlcHJvbV9wYXJzZV9od19jYXAoc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7 DQorCXU4ICplZXByb20gPSBkZXYtPm10NzYuZWVwcm9tLmRhdGE7DQorCXU4IHR4X21hc2ssIG1h eF9uc3MgPSA0Ow0KKwl1MzIgdmFsID0gbXQ3OTE1X2VlcHJvbV9yZWFkKGRldiwgTVRfRUVfV0lG SV9DT05GKTsNCisNCisJdmFsID0gRklFTERfR0VUKE1UX0VFX1dJRklfQ09ORl9CQU5EX1NFTCwg dmFsKTsNCisJc3dpdGNoICh2YWwpIHsNCisJY2FzZSBNVF9FRV81R0haOg0KKwkJZGV2LT5tdDc2 LmNhcC5oYXNfNWdoeiA9IHRydWU7DQorCQlicmVhazsNCisJY2FzZSBNVF9FRV8yR0haOg0KKwkJ ZGV2LT5tdDc2LmNhcC5oYXNfMmdoeiA9IHRydWU7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJ CWRldi0+bXQ3Ni5jYXAuaGFzXzJnaHogPSB0cnVlOw0KKwkJZGV2LT5tdDc2LmNhcC5oYXNfNWdo eiA9IHRydWU7DQorCQlicmVhazsNCisJfQ0KKw0KKwkvKiByZWFkIHR4IG1hc2sgZnJvbSBlZXBy b20gKi8NCisJdHhfbWFzayA9ICBGSUVMRF9HRVQoTVRfRUVfV0lGSV9DT05GX1RYX01BU0ssDQor CQkJICAgICBlZXByb21bTVRfRUVfV0lGSV9DT05GXSk7DQorCWlmICghdHhfbWFzayB8fCB0eF9t YXNrID4gbWF4X25zcykNCisJCXR4X21hc2sgPSBtYXhfbnNzOw0KKw0KKwlkZXYtPmNoYWlubWFz ayA9IEJJVCh0eF9tYXNrKSAtIDE7DQorCWRldi0+bXBoeS5hbnRlbm5hX21hc2sgPSBkZXYtPmNo YWlubWFzazsNCisJZGV2LT5waHkuY2hhaW5tYXNrID0gZGV2LT5jaGFpbm1hc2s7DQorfQ0KKw0K K2ludCBtdDc5MTVfZWVwcm9tX2luaXQoc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCWlu dCByZXQ7DQorDQorCXJldCA9IG10NzkxNV9lZXByb21fbG9hZChkZXYpOw0KKwlpZiAocmV0IDwg MCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IG10NzkxNV9jaGVja19lZXByb20oZGV2KTsN CisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCW10NzkxNV9lZXByb21fcGFyc2VfaHdf Y2FwKGRldik7DQorCW1lbWNweShkZXYtPm10NzYubWFjYWRkciwgZGV2LT5tdDc2LmVlcHJvbS5k YXRhICsgTVRfRUVfTUFDX0FERFIsDQorCSAgICAgICBFVEhfQUxFTik7DQorDQorCW10NzZfZWVw cm9tX292ZXJyaWRlKCZkZXYtPm10NzYpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG10 NzkxNV9lZXByb21fZ2V0X3RhcmdldF9wb3dlcihzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJ CQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sDQorCQkJCSAgIHU4IGNoYWluX2lk eCkNCit7DQorCWludCBpbmRleDsNCisJYm9vbCB0c3NpX29uOw0KKw0KKwlpZiAoY2hhaW5faWR4 ID4gMykNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwl0c3NpX29uID0gbXQ3OTE1X3Rzc2lfZW5h YmxlZChkZXYsIGNoYW4tPmJhbmQpOw0KKw0KKwlpZiAoY2hhbi0+YmFuZCA9PSBOTDgwMjExX0JB TkRfMkdIWikgew0KKwkJaW5kZXggPSBNVF9FRV9UWDBfUE9XRVJfMkcgKyBjaGFpbl9pZHggKiAz ICsgIXRzc2lfb247DQorCX0gZWxzZSB7DQorCQlpbnQgZ3JvdXAgPSB0c3NpX29uID8NCisJCQkg ICAgbXQ3OTE1X2dldF9jaGFubmVsX2dyb3VwKGNoYW4tPmh3X3ZhbHVlKSA6IDg7DQorDQorCQlp bmRleCA9IE1UX0VFX1RYMF9QT1dFUl81RyArIGNoYWluX2lkeCAqIDEyICsgZ3JvdXA7DQorCX0N CisNCisJcmV0dXJuIG10NzkxNV9lZXByb21fcmVhZChkZXYsIGluZGV4KTsNCit9DQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmgg Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9lZXByb20uaA0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uMzBmYzYwN2U0NjZkDQotLS0g L2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzkx NS9lZXByb20uaA0KQEAgLTAsMCArMSw3OCBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBJU0MgKi8NCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiAqLw0KKw0KKyNp Zm5kZWYgX19NVDc5MTVfRUVQUk9NX0gNCisjZGVmaW5lIF9fTVQ3OTE1X0VFUFJPTV9IDQorDQor I2luY2x1ZGUgIm10NzkxNS5oIg0KKw0KK3N0cnVjdCBjYWxfZGF0YSB7DQorCXU4IGNvdW50Ow0K Kwl1MTYgb2Zmc2V0WzYwXTsNCit9Ow0KKw0KK2VudW0gbXQ3OTE1X2VlcHJvbV9maWVsZCB7DQor CU1UX0VFX0NISVBfSUQgPQkJMHgwMDAsDQorCU1UX0VFX1ZFUlNJT04gPQkJMHgwMDIsDQorCU1U X0VFX01BQ19BRERSID0JMHgwMDQsDQorCU1UX0VFX0RESUVfRlRfVkVSU0lPTiA9CTB4MDUwLA0K KwlNVF9FRV9XSUZJX0NPTkYgPQkweDE5MCwNCisJTVRfRUVfVFgwX1BPV0VSXzJHID0JMHgyZmMs DQorCU1UX0VFX1RYMF9QT1dFUl81RyA9CTB4MzRiLA0KKwlNVF9FRV9BRElFX0ZUX1ZFUlNJT04g PQkweDlhMCwNCisNCisJX19NVF9FRV9NQVggPQkJMHhlMDANCit9Ow0KKw0KKyNkZWZpbmUgTVRf RUVfV0lGSV9DT05GX1RYX01BU0sJCQlHRU5NQVNLKDIsIDApDQorI2RlZmluZSBNVF9FRV9XSUZJ X0NPTkZfQkFORF9TRUwJCUdFTk1BU0soNywgNikNCisjZGVmaW5lIE1UX0VFX1dJRklfQ09ORl9U U1NJMF8yRwkJQklUKDApDQorI2RlZmluZSBNVF9FRV9XSUZJX0NPTkZfVFNTSTBfNUcJCUJJVCgy KQ0KKyNkZWZpbmUgTVRfRUVfV0lGSV9DT05GX1RTU0kxXzVHCQlCSVQoNCkNCisNCitlbnVtIG10 NzkxNV9lZXByb21fYmFuZCB7DQorCU1UX0VFX0RVQUxfQkFORCwNCisJTVRfRUVfNUdIWiwNCisJ TVRfRUVfMkdIWiwNCisJTVRfRUVfREJEQywNCit9Ow0KKw0KK3N0cnVjdCBza3VfZ3JvdXAgew0K Kwl1OCBsZW47DQorCXUxNiBvZmZzZXRbMl07DQorCWNvbnN0IHU4ICpkZWx0YV9tYXA7DQorfTsN CisNCitzdGF0aWMgaW5saW5lIGludA0KK210NzkxNV9nZXRfY2hhbm5lbF9ncm91cChpbnQgY2hh bm5lbCkNCit7DQorCWlmIChjaGFubmVsID49IDE4NCAmJiBjaGFubmVsIDw9IDE5NikNCisJCXJl dHVybiAwOw0KKwlpZiAoY2hhbm5lbCA8PSA0OCkNCisJCXJldHVybiAxOw0KKwlpZiAoY2hhbm5l bCA8PSA2NCkNCisJCXJldHVybiAyOw0KKwlpZiAoY2hhbm5lbCA8PSA5NikNCisJCXJldHVybiAz Ow0KKwlpZiAoY2hhbm5lbCA8PSAxMTIpDQorCQlyZXR1cm4gNDsNCisJaWYgKGNoYW5uZWwgPD0g MTI4KQ0KKwkJcmV0dXJuIDU7DQorCWlmIChjaGFubmVsIDw9IDE0NCkNCisJCXJldHVybiA2Ow0K KwlyZXR1cm4gNzsNCit9DQorDQorc3RhdGljIGlubGluZSBib29sDQorbXQ3OTE1X3Rzc2lfZW5h YmxlZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKQ0KK3sN CisJdTggKmVlcCA9IGRldi0+bXQ3Ni5lZXByb20uZGF0YTsNCisNCisJLyogVE9ETzogREJEQyAq Lw0KKwlpZiAoYmFuZCA9PSBOTDgwMjExX0JBTkRfNUdIWikNCisJCXJldHVybiBlZXBbTVRfRUVf V0lGSV9DT05GICsgN10gJiBNVF9FRV9XSUZJX0NPTkZfVFNTSTBfNUc7DQorCWVsc2UNCisJCXJl dHVybiBlZXBbTVRfRUVfV0lGSV9DT05GICsgN10gJiBNVF9FRV9XSUZJX0NPTkZfVFNTSTBfMkc7 DQorfQ0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlh dGVrL210NzYvbXQ3OTE1L2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210 NzYvbXQ3OTE1L2luaXQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAw MC4uZmI1OTZhZmRmMGJlDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVz cy9tZWRpYXRlay9tdDc2L210NzkxNS9pbml0LmMNCkBAIC0wLDAgKzEsMzk1IEBADQorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRl ayBJbmMuICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+DQorI2luY2x1ZGUg Im10NzkxNS5oIg0KKyNpbmNsdWRlICJtYWMuaCINCisjaW5jbHVkZSAiZWVwcm9tLmgiDQorDQor c3RhdGljIHZvaWQNCittdDc5MTVfbWFjX2luaXRfYmFuZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 LCB1OCBiYW5kKQ0KK3sNCisJdTMyIG1hc2ssIHNldDsNCisNCisJbXQ3Nl9ybXdfZmllbGQoZGV2 LCBNVF9UTUFDX0NUQ1IwKGJhbmQpLA0KKwkJICAgICAgIE1UX1RNQUNfQ1RDUjBfSU5TX0RETE1U X1JFRlRJTUUsIDB4M2YpOw0KKwltdDc2X3NldChkZXYsIE1UX1RNQUNfQ1RDUjAoYmFuZCksDQor CQkgTVRfVE1BQ19DVENSMF9JTlNfRERMTVRfVkhUX1NNUERVX0VOIHwNCisJCSBNVF9UTUFDX0NU Q1IwX0lOU19ERExNVF9FTik7DQorDQorCW1hc2sgPSBNVF9NRFBfUkNGUjBfTUNVX1JYX01HTVQg fA0KKwkgICAgICAgTVRfTURQX1JDRlIwX01DVV9SWF9DVExfTk9OX0JBUiB8DQorCSAgICAgICBN VF9NRFBfUkNGUjBfTUNVX1JYX0NUTF9CQVI7DQorCXNldCA9IEZJRUxEX1BSRVAoTVRfTURQX1JD RlIwX01DVV9SWF9NR01ULCBNVF9NRFBfVE9fSElGKSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRf TURQX1JDRlIwX01DVV9SWF9DVExfTk9OX0JBUiwgTVRfTURQX1RPX0hJRikgfA0KKwkgICAgICBG SUVMRF9QUkVQKE1UX01EUF9SQ0ZSMF9NQ1VfUlhfQ1RMX0JBUiwgTVRfTURQX1RPX0hJRik7DQor CW10NzZfcm13KGRldiwgTVRfTURQX0JOUkNGUjAoYmFuZCksIG1hc2ssIHNldCk7DQorDQorCW1h c2sgPSBNVF9NRFBfUkNGUjFfTUNVX1JYX0JZUEFTUyB8DQorCSAgICAgICBNVF9NRFBfUkNGUjFf UlhfRFJPUFBFRF9VQ0FTVCB8DQorCSAgICAgICBNVF9NRFBfUkNGUjFfUlhfRFJPUFBFRF9NQ0FT VDsNCisJc2V0ID0gRklFTERfUFJFUChNVF9NRFBfUkNGUjFfTUNVX1JYX0JZUEFTUywgTVRfTURQ X1RPX0hJRikgfA0KKwkgICAgICBGSUVMRF9QUkVQKE1UX01EUF9SQ0ZSMV9SWF9EUk9QUEVEX1VD QVNULCBNVF9NRFBfVE9fSElGKSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfTURQX1JDRlIxX1JY X0RST1BQRURfTUNBU1QsIE1UX01EUF9UT19ISUYpOw0KKwltdDc2X3JtdyhkZXYsIE1UX01EUF9C TlJDRlIxKGJhbmQpLCBtYXNrLCBzZXQpOw0KKw0KKwltdDc2X3NldChkZXYsIE1UX1dGX1JNQUNf TUlCX1RJTUUwKGJhbmQpLCBNVF9XRl9STUFDX01JQl9SWFRJTUVfRU4pOw0KKwltdDc2X3NldChk ZXYsIE1UX1dGX1JNQUNfTUlCX0FJUlRJTUUwKGJhbmQpLCBNVF9XRl9STUFDX01JQl9SWFRJTUVf RU4pOw0KK30NCisNCitzdGF0aWMgdm9pZCBtdDc5MTVfbWFjX2luaXQoc3RydWN0IG10NzkxNV9k ZXYgKmRldikNCit7DQorCWludCBpOw0KKw0KKwltdDc2X3Jtd19maWVsZChkZXYsIE1UX0RNQV9E Q1IwLCBNVF9ETUFfRENSMF9NQVhfUlhfTEVOLCAxNTM2KTsNCisJbXQ3Nl9ybXdfZmllbGQoZGV2 LCBNVF9NRFBfRENSMSwgTVRfTURQX0RDUjFfTUFYX1JYX0xFTiwgMTUzNik7DQorCS8qIGRpc2Fi bGUgaGFyZHdhcmUgZGUtYWdnICovDQorCW10NzZfY2xlYXIoZGV2LCBNVF9NRFBfRENSMCwgTVRf TURQX0RDUjBfREFNU0RVX0VOKTsNCisNCisJZm9yIChpID0gMDsgaSA8IE1UNzkxNV9XVEJMX1NJ WkU7IGkrKykNCisJCW10NzkxNV9tYWNfd3RibF91cGRhdGUoZGV2LCBpLA0KKwkJCQkgICAgICAg TVRfV1RCTF9VUERBVEVfQURNX0NPVU5UX0NMRUFSKTsNCisNCisJbXQ3OTE1X21hY19pbml0X2Jh bmQoZGV2LCAwKTsNCisJbXQ3OTE1X21hY19pbml0X2JhbmQoZGV2LCAxKTsNCisJbXQ3OTE1X21j dV9zZXRfcnRzX3RocmVzaCgmZGV2LT5waHksIDB4OTJiKTsNCit9DQorDQorc3RhdGljIHZvaWQN CittdDc5MTVfaW5pdF90eHBvd2VyX2JhbmQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwNCisJCQkg c3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQpDQorew0KKwlpbnQgaSwgbl9j aGFpbnMgPSBod2VpZ2h0OChkZXYtPm1waHkuYW50ZW5uYV9tYXNrKTsNCisNCisJZm9yIChpID0g MDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsNCisJCXN0cnVjdCBpZWVlODAyMTFfY2hh bm5lbCAqY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbaV07DQorCQl1MzIgdGFyZ2V0X3Bvd2VyID0g MDsNCisJCWludCBqOw0KKw0KKwkJZm9yIChqID0gMDsgaiA8IG5fY2hhaW5zOyBqKyspIHsNCisJ CQl1MzIgdmFsOw0KKw0KKwkJCXZhbCA9IG10NzkxNV9lZXByb21fZ2V0X3RhcmdldF9wb3dlcihk ZXYsIGNoYW4sIGopOw0KKwkJCXRhcmdldF9wb3dlciA9IG1heCh0YXJnZXRfcG93ZXIsIHZhbCk7 DQorCQl9DQorDQorCQljaGFuLT5tYXhfcG93ZXIgPSBtaW5fdChpbnQsIGNoYW4tPm1heF9yZWdf cG93ZXIsDQorCQkJCQl0YXJnZXRfcG93ZXIgLyAyKTsNCisJCWNoYW4tPm9yaWdfbXB3ciA9IHRh cmdldF9wb3dlciAvIDI7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgbXQ3OTE1X2luaXRfdHhw b3dlcihzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJbXQ3OTE1X2luaXRfdHhwb3dlcl9i YW5kKGRldiwgJmRldi0+bXBoeS5zYmFuZF8yZy5zYmFuZCk7DQorCW10NzkxNV9pbml0X3R4cG93 ZXJfYmFuZChkZXYsICZkZXYtPm1waHkuc2JhbmRfNWcuc2JhbmQpOw0KK30NCisNCitzdGF0aWMg dm9pZCBtdDc5MTVfaW5pdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG10NzkxNV9k ZXYsDQorCQkJCSBpbml0X3dvcmspOw0KKw0KKwltdDc5MTVfbWN1X3NldF9lZXByb20oZGV2KTsN CisJbXQ3OTE1X21hY19pbml0KGRldik7DQorCW10NzkxNV9pbml0X3R4cG93ZXIoZGV2KTsNCit9 DQorDQorc3RhdGljIGludCBtdDc5MTVfaW5pdF9oYXJkd2FyZShzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2KQ0KK3sNCisJaW50IHJldCwgaWR4Ow0KKw0KKwltdDc2X3dyKGRldiwgTVRfSU5UX1NPVVJD RV9DU1IsIH4wKTsNCisNCisJSU5JVF9XT1JLKCZkZXYtPmluaXRfd29yaywgbXQ3OTE1X2luaXRf d29yayk7DQorCXNwaW5fbG9ja19pbml0KCZkZXYtPnRva2VuX2xvY2spOw0KKwlpZHJfaW5pdCgm ZGV2LT50b2tlbik7DQorDQorCXJldCA9IG10NzkxNV9kbWFfaW5pdChkZXYpOw0KKwlpZiAocmV0 KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJc2V0X2JpdChNVDc2X1NUQVRFX0lOSVRJQUxJWkVELCAm ZGV2LT5tcGh5LnN0YXRlKTsNCisNCisJcmV0ID0gbXQ3OTE1X21jdV9pbml0KGRldik7DQorCWlm IChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBtdDc5MTVfZWVwcm9tX2luaXQoZGV2 KTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkvKiBCZWFjb24gYW5kIG1n bXQgZnJhbWVzIHNob3VsZCBvY2N1cHkgd2NpZCAwICovDQorCWlkeCA9IG10NzZfd2NpZF9hbGxv YyhkZXYtPm10NzYud2NpZF9tYXNrLCBNVDc5MTVfV1RCTF9TVEEgLSAxKTsNCisJaWYgKGlkeCkN CisJCXJldHVybiAtRU5PU1BDOw0KKw0KKwlkZXYtPm10NzYuZ2xvYmFsX3djaWQuaWR4ID0gaWR4 Ow0KKwlkZXYtPm10NzYuZ2xvYmFsX3djaWQuaHdfa2V5X2lkeCA9IC0xOw0KKwlkZXYtPm10NzYu Z2xvYmFsX3djaWQudHhfaW5mbyB8PSBNVF9XQ0lEX1RYX0lORk9fU0VUOw0KKwlyY3VfYXNzaWdu X3BvaW50ZXIoZGV2LT5tdDc2LndjaWRbaWR4XSwgJmRldi0+bXQ3Ni5nbG9iYWxfd2NpZCk7DQor DQorCXJldHVybiAwOw0KK30NCisNCisjZGVmaW5lIENDS19SQVRFKF9pZHgsIF9yYXRlKSB7CQkJ CQkJXA0KKwkuYml0cmF0ZSA9IF9yYXRlLAkJCQkJCVwNCisJLmZsYWdzID0gSUVFRTgwMjExX1JB VEVfU0hPUlRfUFJFQU1CTEUsCQkJCVwNCisJLmh3X3ZhbHVlID0gKE1UX1BIWV9UWVBFX0NDSyA8 PCA4KSB8IChfaWR4KSwJCQlcDQorCS5od192YWx1ZV9zaG9ydCA9IChNVF9QSFlfVFlQRV9DQ0sg PDwgOCkgfCAoNCArIChfaWR4KSksCVwNCit9DQorDQorI2RlZmluZSBPRkRNX1JBVEUoX2lkeCwg X3JhdGUpIHsJCQkJCVwNCisJLmJpdHJhdGUgPSBfcmF0ZSwJCQkJCQlcDQorCS5od192YWx1ZSA9 IChNVF9QSFlfVFlQRV9PRkRNIDw8IDgpIHwgKF9pZHgpLAkJCVwNCisJLmh3X3ZhbHVlX3Nob3J0 ID0gKE1UX1BIWV9UWVBFX09GRE0gPDwgOCkgfCAoX2lkeCksCQlcDQorfQ0KKw0KK3N0YXRpYyBz dHJ1Y3QgaWVlZTgwMjExX3JhdGUgbXQ3OTE1X3JhdGVzW10gPSB7DQorCUNDS19SQVRFKDAsIDEw KSwNCisJQ0NLX1JBVEUoMSwgMjApLA0KKwlDQ0tfUkFURSgyLCA1NSksDQorCUNDS19SQVRFKDMs IDExMCksDQorCU9GRE1fUkFURSgxMSwgNjApLA0KKwlPRkRNX1JBVEUoMTUsIDkwKSwNCisJT0ZE TV9SQVRFKDEwLCAxMjApLA0KKwlPRkRNX1JBVEUoMTQsIDE4MCksDQorCU9GRE1fUkFURSg5LCAg MjQwKSwNCisJT0ZETV9SQVRFKDEzLCAzNjApLA0KKwlPRkRNX1JBVEUoOCwgIDQ4MCksDQorCU9G RE1fUkFURSgxMiwgNTQwKSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjEx X2lmYWNlX2xpbWl0IGlmX2xpbWl0c1tdID0gew0KKwl7DQorCQkubWF4ID0gMSwNCisJCS50eXBl cyA9IEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykNCisJfSwgew0KKwkJLm1heCA9IE1UNzkxNV9N QVhfSU5URVJGQUNFUywNCisJCS50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfA0KKyNp ZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSA0KKwkJCSBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9Q T0lOVCkgfA0KKyNlbmRpZg0KKwkJCSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikNCisJfQ0K K307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24g aWZfY29tYltdID0gew0KKwl7DQorCQkubGltaXRzID0gaWZfbGltaXRzLA0KKwkJLm5fbGltaXRz ID0gQVJSQVlfU0laRShpZl9saW1pdHMpLA0KKwkJLm1heF9pbnRlcmZhY2VzID0gNCwNCisJCS5u dW1fZGlmZmVyZW50X2NoYW5uZWxzID0gMSwNCisJCS5iZWFjb25faW50X2luZnJhX21hdGNoID0g dHJ1ZSwNCisJCS5yYWRhcl9kZXRlY3Rfd2lkdGhzID0gQklUKE5MODAyMTFfQ0hBTl9XSURUSF8y MF9OT0hUKSB8DQorCQkJCSAgICAgICBCSVQoTkw4MDIxMV9DSEFOX1dJRFRIXzIwKSB8DQorCQkJ CSAgICAgICBCSVQoTkw4MDIxMV9DSEFOX1dJRFRIXzQwKSB8DQorCQkJCSAgICAgICBCSVQoTkw4 MDIxMV9DSEFOX1dJRFRIXzgwKSB8DQorCQkJCSAgICAgICBCSVQoTkw4MDIxMV9DSEFOX1dJRFRI XzE2MCkgfA0KKwkJCQkgICAgICAgQklUKE5MODAyMTFfQ0hBTl9XSURUSF84MFA4MCksDQorCX0N Cit9Ow0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X3JlZ2Rfbm90aWZpZXIoc3RydWN0IHdpcGh5 ICp3aXBoeSwNCisJCSAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkNCit7 DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd2lwaHlfdG9faWVlZTgwMjExX2h3KHdpcGh5 KTsNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19kZXYoaHcpOw0KKwlzdHJ1 Y3QgbXQ3Nl9waHkgKm1waHkgPSBody0+cHJpdjsNCisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9 IG1waHktPnByaXY7DQorCXN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZiA9ICZtcGh5 LT5jaGFuZGVmOw0KKw0KKwlkZXYtPm10NzYucmVnaW9uID0gcmVxdWVzdC0+ZGZzX3JlZ2lvbjsN CisNCisJaWYgKCEoY2hhbmRlZi0+Y2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikp DQorCQlyZXR1cm47DQorDQorCW10NzkxNV9kZnNfaW5pdF9yYWRhcl9kZXRlY3RvcihwaHkpOw0K K30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9pbml0X3dpcGh5KHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3KQ0KK3sNCisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9od19waHkoaHcp Ow0KKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gaHctPndpcGh5Ow0KKw0KKwlody0+cXVldWVzID0g NDsNCisJaHctPm1heF9yeF9hZ2dyZWdhdGlvbl9zdWJmcmFtZXMgPSBJRUVFODAyMTFfTUFYX0FN UERVX0JVRjsNCisJaHctPm1heF90eF9hZ2dyZWdhdGlvbl9zdWJmcmFtZXMgPSBJRUVFODAyMTFf TUFYX0FNUERVX0JVRjsNCisNCisJcGh5LT5zbG90dGltZSA9IDk7DQorDQorCWh3LT5zdGFfZGF0 YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtdDc5MTVfc3RhKTsNCisJaHctPnZpZl9kYXRhX3NpemUg PSBzaXplb2Yoc3RydWN0IG10NzkxNV92aWYpOw0KKw0KKwl3aXBoeS0+aWZhY2VfY29tYmluYXRp b25zID0gaWZfY29tYjsNCisJd2lwaHktPm5faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0la RShpZl9jb21iKTsNCisJd2lwaHktPnJlZ19ub3RpZmllciA9IG10NzkxNV9yZWdkX25vdGlmaWVy Ow0KKwl3aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19IQVNfQ0hBTk5FTF9TV0lUQ0g7DQorDQor CXdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9WSFRfSUJT Uyk7DQorDQorCWllZWU4MDIxMV9od19zZXQoaHcsIEhBU19SQVRFX0NPTlRST0wpOw0KKw0KKwlo dy0+bWF4X3R4X2ZyYWdtZW50cyA9IDQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X2Nh cF9kYmRjX2VuYWJsZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJZGV2LT5tcGh5LnNi YW5kXzVnLnNiYW5kLnZodF9jYXAuY2FwICY9DQorCQkJfihJRUVFODAyMTFfVkhUX0NBUF9TSE9S VF9HSV8xNjAgfA0KKwkJCSAgSUVFRTgwMjExX1ZIVF9DQVBfU1VQUF9DSEFOX1dJRFRIXzE2MF84 MFBMVVM4ME1IWik7DQorDQorCWlmIChkZXYtPmNoYWlubWFzayA9PSAweGYpDQorCQlkZXYtPm1w aHkuYW50ZW5uYV9tYXNrID0gZGV2LT5jaGFpbm1hc2sgPj4gMjsNCisJZWxzZQ0KKwkJZGV2LT5t cGh5LmFudGVubmFfbWFzayA9IGRldi0+Y2hhaW5tYXNrID4+IDE7DQorDQorCWRldi0+cGh5LmNo YWlubWFzayA9IGRldi0+bXBoeS5hbnRlbm5hX21hc2s7DQorCWRldi0+bXBoeS5ody0+d2lwaHkt PmF2YWlsYWJsZV9hbnRlbm5hc19yeCA9IGRldi0+cGh5LmNoYWlubWFzazsNCisJZGV2LT5tcGh5 Lmh3LT53aXBoeS0+YXZhaWxhYmxlX2FudGVubmFzX3R4ID0gZGV2LT5waHkuY2hhaW5tYXNrOw0K Kw0KKwltdDc2X3NldF9zdHJlYW1fY2FwcygmZGV2LT5tdDc2LCB0cnVlKTsNCit9DQorDQorc3Rh dGljIHZvaWQNCittdDc5MTVfY2FwX2RiZGNfZGlzYWJsZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 KQ0KK3sNCisJZGV2LT5tcGh5LnNiYW5kXzVnLnNiYW5kLnZodF9jYXAuY2FwIHw9DQorCQkJSUVF RTgwMjExX1ZIVF9DQVBfU0hPUlRfR0lfMTYwIHwNCisJCQlJRUVFODAyMTFfVkhUX0NBUF9TVVBQ X0NIQU5fV0lEVEhfMTYwXzgwUExVUzgwTUhaOw0KKw0KKwlkZXYtPm1waHkuYW50ZW5uYV9tYXNr ID0gZGV2LT5jaGFpbm1hc2s7DQorCWRldi0+cGh5LmNoYWlubWFzayA9IGRldi0+Y2hhaW5tYXNr Ow0KKwlkZXYtPm1waHkuaHctPndpcGh5LT5hdmFpbGFibGVfYW50ZW5uYXNfcnggPSBkZXYtPmNo YWlubWFzazsNCisJZGV2LT5tcGh5Lmh3LT53aXBoeS0+YXZhaWxhYmxlX2FudGVubmFzX3R4ID0g ZGV2LT5jaGFpbm1hc2s7DQorDQorCW10NzZfc2V0X3N0cmVhbV9jYXBzKCZkZXYtPm10NzYsIHRy dWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X3JlZ2lzdGVyX2V4dF9waHkoc3RydWN0IG10NzkxNV9k ZXYgKmRldikNCit7DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBtdDc5MTVfZXh0X3BoeShk ZXYpOw0KKwlzdHJ1Y3QgbXQ3Nl9waHkgKm1waHk7DQorCWludCByZXQ7DQorCWJvb2wgYm91bmQ7 DQorDQorCS8qIFRPRE86IGVuYmxlIERCREMgKi8NCisJYm91bmQgPSBtdDc5MTVfbDFfcnIoZGV2 LCBNVF9IV19CT1VORCkgJiBCSVQoNSk7DQorCWlmICghYm91bmQpDQorCQlyZXR1cm4gLUVJTlZB TDsNCisNCisJaWYgKHRlc3RfYml0KE1UNzZfU1RBVEVfUlVOTklORywgJmRldi0+bXBoeS5zdGF0 ZSkpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKHBoeSkNCisJCXJldHVybiAwOw0KKw0K KwltdDc5MTVfY2FwX2RiZGNfZW5hYmxlKGRldik7DQorCW1waHkgPSBtdDc2X2FsbG9jX3BoeSgm ZGV2LT5tdDc2LCBzaXplb2YoKnBoeSksICZtdDc5MTVfb3BzKTsNCisJaWYgKCFtcGh5KQ0KKwkJ cmV0dXJuIC1FTk9NRU07DQorDQorCXBoeSA9IG1waHktPnByaXY7DQorCXBoeS0+ZGV2ID0gZGV2 Ow0KKwlwaHktPm10NzYgPSBtcGh5Ow0KKwlwaHktPmNoYWlubWFzayA9IGRldi0+Y2hhaW5tYXNr ICYgfmRldi0+cGh5LmNoYWlubWFzazsNCisJbXBoeS0+YW50ZW5uYV9tYXNrID0gQklUKGh3ZWln aHQ4KHBoeS0+Y2hhaW5tYXNrKSkgLSAxOw0KKwltdDc5MTVfaW5pdF93aXBoeShtcGh5LT5odyk7 DQorDQorCS8qDQorCSAqIE1ha2UgdGhlIHNlY29uZGFyeSBQSFkgTUFDIGFkZHJlc3MgbG9jYWwg d2l0aG91dCBvdmVybGFwcGluZyB3aXRoDQorCSAqIHRoZSB1c3VhbCBNQUMgYWRkcmVzcyBhbGxv Y2F0aW9uIHNjaGVtZSBvbiBtdWx0aXBsZSB2aXJ0dWFsIGludGVyZmFjZXMNCisJICovDQorCW1w aHktPmh3LT53aXBoeS0+cGVybV9hZGRyWzBdIHw9IDI7DQorCW1waHktPmh3LT53aXBoeS0+cGVy bV9hZGRyWzBdIF49IEJJVCg3KTsNCisNCisJLyogVGhlIHNlY29uZCBpbnRlcmZhY2UgZG9lcyBu b3QgZ2V0IGFueSBwYWNrZXRzIHVubGVzcyBpdCBoYXMgYSB2aWYgKi8NCisJaWVlZTgwMjExX2h3 X3NldChtcGh5LT5odywgV0FOVF9NT05JVE9SX1ZJRik7DQorDQorCXJldCA9IG10NzZfcmVnaXN0 ZXJfcGh5KG1waHkpOw0KKwlpZiAocmV0KQ0KKwkJaWVlZTgwMjExX2ZyZWVfaHcobXBoeS0+aHcp Ow0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCit2b2lkIG10NzkxNV91bnJlZ2lzdGVyX2V4dF9w aHkoc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkg PSBtdDc5MTVfZXh0X3BoeShkZXYpOw0KKwlzdHJ1Y3QgbXQ3Nl9waHkgKm1waHkgPSBkZXYtPm10 NzYucGh5MjsNCisNCisJaWYgKCFwaHkpDQorCQlyZXR1cm47DQorDQorCW10NzkxNV9jYXBfZGJk Y19kaXNhYmxlKGRldik7DQorCW10NzZfdW5yZWdpc3Rlcl9waHkobXBoeSk7DQorCWllZWU4MDIx MV9mcmVlX2h3KG1waHktPmh3KTsNCit9DQorDQoraW50IG10NzkxNV9yZWdpc3Rlcl9kZXZpY2Uo c3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0g bXQ3Nl9odyhkZXYpOw0KKwlpbnQgcmV0Ow0KKw0KKwlkZXYtPnBoeS5kZXYgPSBkZXY7DQorCWRl di0+cGh5Lm10NzYgPSAmZGV2LT5tdDc2LnBoeTsNCisJZGV2LT5tdDc2LnBoeS5wcml2ID0gJmRl di0+cGh5Ow0KKwlJTklUX0RFTEFZRURfV09SSygmZGV2LT5tdDc2Lm1hY193b3JrLCBtdDc5MTVf bWFjX3dvcmspOw0KKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5zdGFfcG9sbF9saXN0KTsNCisJc3Bp bl9sb2NrX2luaXQoJmRldi0+c3RhX3BvbGxfbG9jayk7DQorDQorCWluaXRfd2FpdHF1ZXVlX2hl YWQoJmRldi0+cmVzZXRfd2FpdCk7DQorCUlOSVRfV09SSygmZGV2LT5yZXNldF93b3JrLCBtdDc5 MTVfbWFjX3Jlc2V0X3dvcmspOw0KKw0KKwlyZXQgPSBtdDc5MTVfaW5pdF9oYXJkd2FyZShkZXYp Ow0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJbXQ3OTE1X2luaXRfd2lwaHkoaHcp Ow0KKwlkZXYtPm1waHkuc2JhbmRfMmcuc2JhbmQuaHRfY2FwLmNhcCB8PQ0KKwkJCUlFRUU4MDIx MV9IVF9DQVBfTERQQ19DT0RJTkcgfA0KKwkJCUlFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVOw0K KwlkZXYtPm1waHkuc2JhbmRfNWcuc2JhbmQuaHRfY2FwLmNhcCB8PQ0KKwkJCUlFRUU4MDIxMV9I VF9DQVBfTERQQ19DT0RJTkcgfA0KKwkJCUlFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVOw0KKwlk ZXYtPm1waHkuc2JhbmRfNWcuc2JhbmQudmh0X2NhcC5jYXAgfD0NCisJCQlJRUVFODAyMTFfVkhU X0NBUF9NQVhfTVBEVV9MRU5HVEhfNzk5MSB8DQorCQkJSUVFRTgwMjExX1ZIVF9DQVBfTUFYX0Ff TVBEVV9MRU5HVEhfRVhQT05FTlRfTUFTSzsNCisJbXQ3OTE1X2NhcF9kYmRjX2Rpc2FibGUoZGV2 KTsNCisJZGV2LT5waHkuZGZzX3N0YXRlID0gLTE7DQorDQorCXJldCA9IG10NzZfcmVnaXN0ZXJf ZGV2aWNlKCZkZXYtPm10NzYsIHRydWUsIG10NzkxNV9yYXRlcywNCisJCQkJICAgQVJSQVlfU0la RShtdDc5MTVfcmF0ZXMpKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCWllZWU4 MDIxMV9xdWV1ZV93b3JrKG10NzZfaHcoZGV2KSwgJmRldi0+aW5pdF93b3JrKTsNCisNCisJcmV0 dXJuIG10NzkxNV9pbml0X2RlYnVnZnMoZGV2KTsNCit9DQorDQordm9pZCBtdDc5MTVfdW5yZWdp c3Rlcl9kZXZpY2Uoc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXN0cnVjdCBtdDc2X3R4 d2lfY2FjaGUgKnR4d2k7DQorCWludCBpZDsNCisNCisJbXQ3OTE1X3VucmVnaXN0ZXJfZXh0X3Bo eShkZXYpOw0KKwltdDc2X3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPm10NzYpOw0KKwltdDc5MTVf bWN1X2V4aXQoZGV2KTsNCisJbXQ3OTE1X2RtYV9jbGVhbnVwKGRldik7DQorDQorCXNwaW5fbG9j a19iaCgmZGV2LT50b2tlbl9sb2NrKTsNCisJaWRyX2Zvcl9lYWNoX2VudHJ5KCZkZXYtPnRva2Vu LCB0eHdpLCBpZCkgew0KKwkJbXQ3OTE1X3R4cF9za2JfdW5tYXAoJmRldi0+bXQ3NiwgdHh3aSk7 DQorCQlpZiAodHh3aS0+c2tiKQ0KKwkJCWRldl9rZnJlZV9za2JfYW55KHR4d2ktPnNrYik7DQor CQltdDc2X3B1dF90eHdpKCZkZXYtPm10NzYsIHR4d2kpOw0KKwl9DQorCXNwaW5fdW5sb2NrX2Jo KCZkZXYtPnRva2VuX2xvY2spOw0KKwlpZHJfZGVzdHJveSgmZGV2LT50b2tlbik7DQorDQorCW10 NzZfZnJlZV9kZXZpY2UoJmRldi0+bXQ3Nik7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwMDAuLmI3ZmVkNjQyODY1Yw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmMNCkBAIC0wLDAgKzEsMTI5 NCBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MNCisvKiBDb3B5cmlnaHQgKEMp IDIwMjAgTWVkaWFUZWsgSW5jLiAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5o Pg0KKyNpbmNsdWRlIDxsaW51eC90aW1la2VlcGluZy5oPg0KKyNpbmNsdWRlICJtdDc5MTUuaCIN CisjaW5jbHVkZSAiLi4vZG1hLmgiDQorI2luY2x1ZGUgIm1hYy5oIg0KKw0KKyNkZWZpbmUgdG9f cnNzaShmaWVsZCwgcnh2KQkoKEZJRUxEX0dFVChmaWVsZCwgcnh2KSAtIDIyMCkgLyAyKQ0KKw0K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3OTE1X2Rmc19yYWRhcl9zcGVjIGV0c2lfcmFkYXJfc3Bl Y3MgPSB7DQorCS5wdWxzZV90aCA9IHsgMTEwLCAtMTAsIC04MCwgNDAsIDUyMDAsIDEyOCwgNTIw MCB9LA0KKwkucmFkYXJfcGF0dGVybiA9IHsNCisJCVs1XSA9ICB7IDEsIDAsICA2LCAzMiwgMjgs IDAsICA5OTAsIDUwMTAsIDE3LCAxLCAxIH0sDQorCQlbNl0gPSAgeyAxLCAwLCAgOSwgMzIsIDI4 LCAwLCAgNjE1LCA1MDEwLCAyNywgMSwgMSB9LA0KKwkJWzddID0gIHsgMSwgMCwgMTUsIDMyLCAy OCwgMCwgIDI0MCwgIDQ0NSwgMjcsIDEsIDEgfSwNCisJCVs4XSA9ICB7IDEsIDAsIDEyLCAzMiwg MjgsIDAsICAyNDAsICA1MTAsIDQyLCAxLCAxIH0sDQorCQlbOV0gPSAgeyAxLCAxLCAgMCwgIDAs ICAwLCAwLCAyNDkwLCAzMzQzLCAxNCwgMCwgMCwgMTIsIDMyLCAyOCwgeyB9LCAxMjYgfSwNCisJ CVsxMF0gPSB7IDEsIDEsICAwLCAgMCwgIDAsIDAsIDI0OTAsIDMzNDMsIDE0LCAwLCAwLCAxNSwg MzIsIDI0LCB7IH0sIDEyNiB9LA0KKwkJWzExXSA9IHsgMSwgMSwgIDAsICAwLCAgMCwgMCwgIDgy MywgMjUxMCwgMTQsIDAsIDAsIDE4LCAzMiwgMjgsIHsgfSwgIDU0IH0sDQorCQlbMTJdID0geyAx LCAxLCAgMCwgIDAsICAwLCAwLCAgODIzLCAyNTEwLCAxNCwgMCwgMCwgMjcsIDMyLCAyNCwgeyB9 LCAgNTQgfSwNCisJfSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3OTE1X2Rmc19y YWRhcl9zcGVjIGZjY19yYWRhcl9zcGVjcyA9IHsNCisJLnB1bHNlX3RoID0geyAxMTAsIC0xMCwg LTgwLCA0MCwgNTIwMCwgMTI4LCA1MjAwIH0sDQorCS5yYWRhcl9wYXR0ZXJuID0gew0KKwkJWzBd ID0geyAxLCAwLCAgOCwgIDMyLCAyOCwgMCwgNTA4LCAzMDc2LCAxMywgMSwgIDEgfSwNCisJCVsx XSA9IHsgMSwgMCwgMTIsICAzMiwgMjgsIDAsIDE0MCwgIDI0MCwgMTcsIDEsICAxIH0sDQorCQlb Ml0gPSB7IDEsIDAsICA4LCAgMzIsIDI4LCAwLCAxOTAsICA1MTAsIDIyLCAxLCAgMSB9LA0KKwkJ WzNdID0geyAxLCAwLCAgNiwgIDMyLCAyOCwgMCwgMTkwLCAgNTEwLCAzMiwgMSwgIDEgfSwNCisJ CVs0XSA9IHsgMSwgMCwgIDksIDI1NSwgMjgsIDAsIDMyMywgIDM0MywgMTMsIDEsIDMyIH0sDQor CX0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG10NzkxNV9kZnNfcmFkYXJfc3BlYyBq cF9yYWRhcl9zcGVjcyA9IHsNCisJLnB1bHNlX3RoID0geyAxMTAsIC0xMCwgLTgwLCA0MCwgNTIw MCwgMTI4LCA1MjAwIH0sDQorCS5yYWRhcl9wYXR0ZXJuID0gew0KKwkJWzBdID0gIHsgMSwgMCwg IDgsICAzMiwgMjgsIDAsICA1MDgsIDMwNzYsICAxMywgMSwgIDEgfSwNCisJCVsxXSA9ICB7IDEs IDAsIDEyLCAgMzIsIDI4LCAwLCAgMTQwLCAgMjQwLCAgMTcsIDEsICAxIH0sDQorCQlbMl0gPSAg eyAxLCAwLCAgOCwgIDMyLCAyOCwgMCwgIDE5MCwgIDUxMCwgIDIyLCAxLCAgMSB9LA0KKwkJWzNd ID0gIHsgMSwgMCwgIDYsICAzMiwgMjgsIDAsICAxOTAsICA1MTAsICAzMiwgMSwgIDEgfSwNCisJ CVs0XSA9ICB7IDEsIDAsICA5LCAyNTUsIDI4LCAwLCAgMzIzLCAgMzQzLCAgMTMsIDEsIDMyIH0s DQorCQlbMTNdID0geyAxLCAwLCAgNywgIDMyLCAyOCwgMCwgMzgzNiwgMzg1NiwgIDE0LCAxLCAg MSB9LA0KKwkJWzE0XSA9IHsgMSwgMCwgIDYsICAzMiwgMjgsIDAsICA2MTUsIDUwMTAsIDExMCwg MSwgIDEgfSwNCisJCVsxNV0gPSB7IDEsIDEsICAwLCAgIDAsICAwLCAwLCAgIDE1LCA1MDEwLCAx MTAsIDAsICAwLCAxMiwgMzIsIDI4IH0sDQorCX0sDQorfTsNCisNCitzdGF0aWMgc3RydWN0IG10 NzZfd2NpZCAqbXQ3OTE1X3J4X2dldF93Y2lkKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkJ CQkgICAgdTE2IGlkeCwgYm9vbCB1bmljYXN0KQ0KK3sNCisJc3RydWN0IG10NzkxNV9zdGEgKnN0 YTsNCisJc3RydWN0IG10NzZfd2NpZCAqd2NpZDsNCisNCisJaWYgKGlkeCA+PSBBUlJBWV9TSVpF KGRldi0+bXQ3Ni53Y2lkKSkNCisJCXJldHVybiBOVUxMOw0KKw0KKwl3Y2lkID0gcmN1X2RlcmVm ZXJlbmNlKGRldi0+bXQ3Ni53Y2lkW2lkeF0pOw0KKwlpZiAodW5pY2FzdCB8fCAhd2NpZCkNCisJ CXJldHVybiB3Y2lkOw0KKw0KKwlpZiAoIXdjaWQtPnN0YSkNCisJCXJldHVybiBOVUxMOw0KKw0K KwlzdGEgPSBjb250YWluZXJfb2Yod2NpZCwgc3RydWN0IG10NzkxNV9zdGEsIHdjaWQpOw0KKwlp ZiAoIXN0YS0+dmlmKQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCXJldHVybiAmc3RhLT52aWYtPnN0 YS53Y2lkOw0KK30NCisNCit2b2lkIG10NzkxNV9zdGFfcHMoc3RydWN0IG10NzZfZGV2ICptZGV2 LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIHBzKQ0KK3sNCit9DQorDQorYm9vbCBt dDc5MTVfbWFjX3d0YmxfdXBkYXRlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGludCBpZHgsIHUz MiBtYXNrKQ0KK3sNCisJbXQ3Nl9ybXcoZGV2LCBNVF9XVEJMX1VQREFURSwgTVRfV1RCTF9VUERB VEVfV0xBTl9JRFgsDQorCQkgRklFTERfUFJFUChNVF9XVEJMX1VQREFURV9XTEFOX0lEWCwgaWR4 KSB8IG1hc2spOw0KKw0KKwlyZXR1cm4gbXQ3Nl9wb2xsKGRldiwgTVRfV1RCTF9VUERBVEUsIE1U X1dUQkxfVVBEQVRFX0JVU1ksDQorCQkJIDAsIDUwMDApOw0KK30NCisNCitzdGF0aWMgdTMyIG10 NzkxNV9tYWNfd3RibF9sbWFjX3JlYWQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTE2IHdjaWQs DQorCQkJCSAgICAgdTE2IGFkZHIpDQorew0KKwltdDc2X3dyKGRldiwgTVRfV1RCTE9OX1RPUF9X RFVDUiwNCisJCUZJRUxEX1BSRVAoTVRfV1RCTE9OX1RPUF9XRFVDUl9HUk9VUCwgKHdjaWQgPj4g NykpKTsNCisNCisJcmV0dXJuIG10NzZfcnIoZGV2LCBNVF9XVEJMX0xNQUNfT0ZGUyh3Y2lkLCBh ZGRyKSk7DQorfQ0KKw0KKy8qIFRPRE86IHVzZSB0eGZyZWUgYWlydGltZSBpbmZvIHRvIGF2b2lk IHJ1bnRpbWUgYWNjZXNzaW5nIGluIHRoZSBsb25nIHJ1biAqLw0KK3ZvaWQgbXQ3OTE1X21hY19z dGFfcG9sbChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJc3RhdGljIGNvbnN0IHU4IGFj X3RvX3RpZFtdID0gew0KKwkJW0lFRUU4MDIxMV9BQ19CRV0gPSAwLA0KKwkJW0lFRUU4MDIxMV9B Q19CS10gPSAxLA0KKwkJW0lFRUU4MDIxMV9BQ19WSV0gPSA0LA0KKwkJW0lFRUU4MDIxMV9BQ19W T10gPSA2DQorCX07DQorCXN0YXRpYyBjb25zdCB1OCBod19xdWV1ZV9tYXBbXSA9IHsNCisJCVtJ RUVFODAyMTFfQUNfQktdID0gMCwNCisJCVtJRUVFODAyMTFfQUNfQkVdID0gMSwNCisJCVtJRUVF ODAyMTFfQUNfVkldID0gMiwNCisJCVtJRUVFODAyMTFfQUNfVk9dID0gMywNCisJfTsNCisJc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YTsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGE7DQorCXUz MiB0eF90aW1lW0lFRUU4MDIxMV9OVU1fQUNTXSwgcnhfdGltZVtJRUVFODAyMTFfTlVNX0FDU107 DQorCWludCBpOw0KKw0KKwlyY3VfcmVhZF9sb2NrKCk7DQorDQorCXdoaWxlICh0cnVlKSB7DQor CQlib29sIGNsZWFyID0gZmFsc2U7DQorCQl1MTYgaWR4Ow0KKw0KKwkJc3Bpbl9sb2NrX2JoKCZk ZXYtPnN0YV9wb2xsX2xvY2spOw0KKwkJaWYgKGxpc3RfZW1wdHkoJmRldi0+c3RhX3BvbGxfbGlz dCkpIHsNCisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5zdGFfcG9sbF9sb2NrKTsNCisJCQlicmVh azsNCisJCX0NCisJCW1zdGEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXYtPnN0YV9wb2xsX2xpc3Qs DQorCQkJCQlzdHJ1Y3QgbXQ3OTE1X3N0YSwgcG9sbF9saXN0KTsNCisJCWxpc3RfZGVsX2luaXQo Jm1zdGEtPnBvbGxfbGlzdCk7DQorCQlzcGluX3VubG9ja19iaCgmZGV2LT5zdGFfcG9sbF9sb2Nr KTsNCisNCisJCWZvciAoaSA9IDAsIGlkeCA9IG1zdGEtPndjaWQuaWR4OyBpIDwgSUVFRTgwMjEx X05VTV9BQ1M7IGkrKykgew0KKwkJCXUzMiB0eF9sYXN0ID0gbXN0YS0+YWlydGltZV9hY1tpXTsN CisJCQl1MzIgcnhfbGFzdCA9IG1zdGEtPmFpcnRpbWVfYWNbaSArIElFRUU4MDIxMV9OVU1fQUNT XTsNCisNCisJCQltc3RhLT5haXJ0aW1lX2FjW2ldID0NCisJCQkJbXQ3OTE1X21hY193dGJsX2xt YWNfcmVhZChkZXYsIGlkeCwgMjAgKyBpKTsNCisJCQltc3RhLT5haXJ0aW1lX2FjW2kgKyBJRUVF ODAyMTFfTlVNX0FDU10gPQ0KKwkJCQltdDc5MTVfbWFjX3d0YmxfbG1hY19yZWFkKGRldiwgaWR4 LCAyMSArIGkpOw0KKwkJCXR4X3RpbWVbaV0gPSBtc3RhLT5haXJ0aW1lX2FjW2ldIC0gdHhfbGFz dDsNCisJCQlyeF90aW1lW2ldID0gbXN0YS0+YWlydGltZV9hY1tpICsgSUVFRTgwMjExX05VTV9B Q1NdIC0NCisJCQkJICAgICByeF9sYXN0Ow0KKw0KKwkJCWlmICgodHhfbGFzdCB8IHJ4X2xhc3Qp ICYgQklUKDMwKSkNCisJCQkJY2xlYXIgPSB0cnVlOw0KKwkJfQ0KKw0KKwkJaWYgKGNsZWFyKSB7 DQorCQkJbXQ3OTE1X21hY193dGJsX3VwZGF0ZShkZXYsIGlkeCwNCisJCQkJCSAgICAgICBNVF9X VEJMX1VQREFURV9BRE1fQ09VTlRfQ0xFQVIpOw0KKwkJCW1lbXNldChtc3RhLT5haXJ0aW1lX2Fj LCAwLCBzaXplb2YobXN0YS0+YWlydGltZV9hYykpOw0KKwkJfQ0KKw0KKwkJaWYgKCFtc3RhLT53 Y2lkLnN0YSkNCisJCQljb250aW51ZTsNCisNCisJCXN0YSA9IGNvbnRhaW5lcl9vZigodm9pZCAq KW1zdGEsIHN0cnVjdCBpZWVlODAyMTFfc3RhLA0KKwkJCQkgICBkcnZfcHJpdik7DQorCQlmb3Ig KGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgew0KKwkJCXUzMiB0eF9jdXIgPSB0 eF90aW1lW2ldOw0KKwkJCXUzMiByeF9jdXIgPSByeF90aW1lW2h3X3F1ZXVlX21hcFtpXV07DQor CQkJdTggdGlkID0gYWNfdG9fdGlkW2ldOw0KKw0KKwkJCWlmICghdHhfY3VyICYmICFyeF9jdXIp DQorCQkJCWNvbnRpbnVlOw0KKw0KKwkJCWllZWU4MDIxMV9zdGFfcmVnaXN0ZXJfYWlydGltZShz dGEsIHRpZCwgdHhfY3VyLA0KKwkJCQkJCSAgICAgICByeF9jdXIpOw0KKwkJfQ0KKwl9DQorDQor CXJjdV9yZWFkX3VubG9jaygpOw0KK30NCisNCitpbnQgbXQ3OTE1X21hY19maWxsX3J4KHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgbXQ3 Nl9yeF9zdGF0dXMgKnN0YXR1cyA9IChzdHJ1Y3QgbXQ3Nl9yeF9zdGF0dXMgKilza2ItPmNiOw0K KwlzdHJ1Y3QgbXQ3Nl9waHkgKm1waHkgPSAmZGV2LT5tdDc2LnBoeTsNCisJc3RydWN0IG10Nzkx NV9waHkgKnBoeSA9ICZkZXYtPnBoeTsNCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFu ZCAqc2JhbmQ7DQorCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7DQorCXN0cnVjdCBtdDc5MTVf cnh2IHJ4diA9IHt9Ow0KKwlfX2xlMzIgKnJ4ZCA9IChfX2xlMzIgKilza2ItPmRhdGE7DQorCXUz MiByeGQxID0gbGUzMl90b19jcHUocnhkWzFdKTsNCisJdTMyIHJ4ZDIgPSBsZTMyX3RvX2NwdShy eGRbMl0pOw0KKwl1MzIgcnhkMyA9IGxlMzJfdG9fY3B1KHJ4ZFszXSk7DQorCWJvb2wgdW5pY2Fz dCwgaW5zZXJ0X2NjbXBfaGRyID0gZmFsc2U7DQorCXU4IHJlbW92ZV9wYWQ7DQorCWludCBpLCBp ZHg7DQorDQorCW1lbXNldChzdGF0dXMsIDAsIHNpemVvZigqc3RhdHVzKSk7DQorDQorCWlmIChy eGQxICYgTVRfUlhEMV9OT1JNQUxfQkFORF9JRFgpIHsNCisJCW1waHkgPSBkZXYtPm10NzYucGh5 MjsNCisJCWlmICghbXBoeSkNCisJCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJCXBoeSA9IG1waHkt PnByaXY7DQorCQlzdGF0dXMtPmV4dF9waHkgPSB0cnVlOw0KKwl9DQorDQorCWlmICghdGVzdF9i aXQoTVQ3Nl9TVEFURV9SVU5OSU5HLCAmbXBoeS0+c3RhdGUpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7 DQorDQorCXVuaWNhc3QgPSBGSUVMRF9HRVQoTVRfUlhEM19OT1JNQUxfQUREUl9UWVBFLCByeGQz KSA9PSBNVF9SWEQzX05PUk1BTF9VMk07DQorCWlkeCA9IEZJRUxEX0dFVChNVF9SWEQxX05PUk1B TF9XTEFOX0lEWCwgcnhkMSk7DQorCXN0YXR1cy0+d2NpZCA9IG10NzkxNV9yeF9nZXRfd2NpZChk ZXYsIGlkeCwgdW5pY2FzdCk7DQorDQorCWlmIChzdGF0dXMtPndjaWQpIHsNCisJCXN0cnVjdCBt dDc5MTVfc3RhICptc3RhOw0KKw0KKwkJbXN0YSA9IGNvbnRhaW5lcl9vZihzdGF0dXMtPndjaWQs IHN0cnVjdCBtdDc5MTVfc3RhLCB3Y2lkKTsNCisJCXNwaW5fbG9ja19iaCgmZGV2LT5zdGFfcG9s bF9sb2NrKTsNCisJCWlmIChsaXN0X2VtcHR5KCZtc3RhLT5wb2xsX2xpc3QpKQ0KKwkJCWxpc3Rf YWRkX3RhaWwoJm1zdGEtPnBvbGxfbGlzdCwgJmRldi0+c3RhX3BvbGxfbGlzdCk7DQorCQlzcGlu X3VubG9ja19iaCgmZGV2LT5zdGFfcG9sbF9sb2NrKTsNCisJfQ0KKw0KKwlzdGF0dXMtPmZyZXEg PSBtcGh5LT5jaGFuZGVmLmNoYW4tPmNlbnRlcl9mcmVxOw0KKwlzdGF0dXMtPmJhbmQgPSBtcGh5 LT5jaGFuZGVmLmNoYW4tPmJhbmQ7DQorCWlmIChzdGF0dXMtPmJhbmQgPT0gTkw4MDIxMV9CQU5E XzVHSFopDQorCQlzYmFuZCA9ICZtcGh5LT5zYmFuZF81Zy5zYmFuZDsNCisJZWxzZQ0KKwkJc2Jh bmQgPSAmbXBoeS0+c2JhbmRfMmcuc2JhbmQ7DQorDQorCWlmICghc2JhbmQtPmNoYW5uZWxzKQ0K KwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmIChyeGQxICYgTVRfUlhEMV9OT1JNQUxfRkNTX0VS UikNCisJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOw0KKw0KKwlpZiAo cnhkMSAmIE1UX1JYRDFfTk9STUFMX1RLSVBfTUlDX0VSUikNCisJCXN0YXR1cy0+ZmxhZyB8PSBS WF9GTEFHX01NSUNfRVJST1I7DQorDQorCWlmIChGSUVMRF9HRVQoTVRfUlhEMV9OT1JNQUxfU0VD X01PREUsIHJ4ZDEpICE9IDAgJiYNCisJICAgICEocnhkMSAmIChNVF9SWEQxX05PUk1BTF9DTE0g fCBNVF9SWEQxX05PUk1BTF9DTSkpKSB7DQorCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19ERUNS WVBURUQ7DQorCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19JVl9TVFJJUFBFRDsNCisJCXN0YXR1 cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfU1RSSVBQRUQgfCBSWF9GTEFHX01JQ19TVFJJUFBFRDsN CisJfQ0KKw0KKwlpZiAoIShyeGQyICYgTVRfUlhEMl9OT1JNQUxfTk9OX0FNUERVKSkgew0KKwkJ c3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfQU1QRFVfREVUQUlMUzsNCisNCisJCS8qIGFsbCBzdWJm cmFtZXMgb2YgYW4gQS1NUERVIGhhdmUgdGhlIHNhbWUgdGltZXN0YW1wICovDQorCQlpZiAocGh5 LT5yeF9hbXBkdV90cyAhPSByeGRbMTRdKSB7DQorCQkJaWYgKCErK3BoeS0+YW1wZHVfcmVmKQ0K KwkJCQlwaHktPmFtcGR1X3JlZisrOw0KKwkJfQ0KKwkJcGh5LT5yeF9hbXBkdV90cyA9IHJ4ZFsx NF07DQorDQorCQlzdGF0dXMtPmFtcGR1X3JlZiA9IHBoeS0+YW1wZHVfcmVmOw0KKwl9DQorDQor CXJlbW92ZV9wYWQgPSBGSUVMRF9HRVQoTVRfUlhEMl9OT1JNQUxfSERSX09GRlNFVCwgcnhkMik7 DQorDQorCWlmIChyeGQyICYgTVRfUlhEMl9OT1JNQUxfTUFYX0xFTl9FUlJPUikNCisJCXJldHVy biAtRUlOVkFMOw0KKw0KKwlyeGQgKz0gNjsNCisJaWYgKHJ4ZDEgJiBNVF9SWEQxX05PUk1BTF9H Uk9VUF80KSB7DQorCQlyeGQgKz0gNDsNCisJCWlmICgodTggKilyeGQgLSBza2ItPmRhdGEgPj0g c2tiLT5sZW4pDQorCQkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJaWYgKHJ4ZDEgJiBNVF9S WEQxX05PUk1BTF9HUk9VUF8xKSB7DQorCQl1OCAqZGF0YSA9ICh1OCAqKXJ4ZDsNCisNCisJCWlm IChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkgew0KKwkJCXN0YXR1cy0+aXZbMF0g PSBkYXRhWzVdOw0KKwkJCXN0YXR1cy0+aXZbMV0gPSBkYXRhWzRdOw0KKwkJCXN0YXR1cy0+aXZb Ml0gPSBkYXRhWzNdOw0KKwkJCXN0YXR1cy0+aXZbM10gPSBkYXRhWzJdOw0KKwkJCXN0YXR1cy0+ aXZbNF0gPSBkYXRhWzFdOw0KKwkJCXN0YXR1cy0+aXZbNV0gPSBkYXRhWzBdOw0KKw0KKwkJCWlu c2VydF9jY21wX2hkciA9IEZJRUxEX0dFVChNVF9SWEQyX05PUk1BTF9GUkFHLCByeGQyKTsNCisJ CX0NCisJCXJ4ZCArPSA0Ow0KKwkJaWYgKCh1OCAqKXJ4ZCAtIHNrYi0+ZGF0YSA+PSBza2ItPmxl bikNCisJCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpZiAocnhkMSAmIE1UX1JYRDFfTk9S TUFMX0dST1VQXzIpIHsNCisJCXJ4ZCArPSAyOw0KKwkJaWYgKCh1OCAqKXJ4ZCAtIHNrYi0+ZGF0 YSA+PSBza2ItPmxlbikNCisJCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwkvKiBSWEQgR3Jv dXAgMyAtIFAtUlhWICovDQorCWlmIChyeGQxICYgTVRfUlhEMV9OT1JNQUxfR1JPVVBfMykgew0K KwkJbWVtY3B5KHJ4di52LCByeGQsIHNpemVvZihyeHYudikpOw0KKw0KKwkJcnhkICs9IDI7DQor CQlpZiAoKHU4ICopcnhkIC0gc2tiLT5kYXRhID49IHNrYi0+bGVuKQ0KKwkJCXJldHVybiAtRUlO VkFMOw0KKw0KKwkJaWYgKHJ4di52WzBdICYgTVRfUFJYVl9IVF9BRF9DT0RFKQ0KKwkJCXN0YXR1 cy0+ZW5jX2ZsYWdzIHw9IFJYX0VOQ19GTEFHX0xEUEM7DQorDQorCQlzdGF0dXMtPmNoYWlucyA9 IG1waHktPmFudGVubmFfbWFzazsNCisJCXN0YXR1cy0+Y2hhaW5fc2lnbmFsWzBdID0gdG9fcnNz aShNVF9QUlhWX1JDUEkwLCByeHYudlsxXSk7DQorCQlzdGF0dXMtPmNoYWluX3NpZ25hbFsxXSA9 IHRvX3Jzc2koTVRfUFJYVl9SQ1BJMSwgcnh2LnZbMV0pOw0KKwkJc3RhdHVzLT5jaGFpbl9zaWdu YWxbMl0gPSB0b19yc3NpKE1UX1BSWFZfUkNQSTIsIHJ4di52WzFdKTsNCisJCXN0YXR1cy0+Y2hh aW5fc2lnbmFsWzNdID0gdG9fcnNzaShNVF9QUlhWX1JDUEkzLCByeHYudlsxXSk7DQorCQlzdGF0 dXMtPnNpZ25hbCA9IHN0YXR1cy0+Y2hhaW5fc2lnbmFsWzBdOw0KKw0KKwkJZm9yIChpID0gMTsg aSA8IGh3ZWlnaHQ4KG1waHktPmFudGVubmFfbWFzayk7IGkrKykgew0KKwkJCWlmICghKHN0YXR1 cy0+Y2hhaW5zICYgQklUKGkpKSkNCisJCQkJY29udGludWU7DQorDQorCQkJc3RhdHVzLT5zaWdu YWwgPSBtYXgoc3RhdHVzLT5zaWduYWwsDQorCQkJCQkgICAgIHN0YXR1cy0+Y2hhaW5fc2lnbmFs W2ldKTsNCisJCX0NCisNCisJCS8qIFJYRCBHcm91cCA1IC0gQy1SWFYgKi8NCisJCWlmIChyeGQx ICYgTVRfUlhEMV9OT1JNQUxfR1JPVVBfNSkgew0KKwkJCXU4IHN0YmMgPSBGSUVMRF9HRVQoTVRf Q1JYVl9IVF9TVEJDLCByeHYudlsyXSk7DQorCQkJdTggZ2kgPSBGSUVMRF9HRVQoTVRfQ1JYVl9I VF9TSE9SVF9HSSwgcnh2LnZbMl0pOw0KKwkJCWJvb2wgY2NrID0gZmFsc2U7DQorDQorCQkJcnhk ICs9IDE4Ow0KKwkJCWlmICgodTggKilyeGQgLSBza2ItPmRhdGEgPj0gc2tiLT5sZW4pDQorCQkJ CXJldHVybiAtRUlOVkFMOw0KKw0KKwkJCWlkeCA9IGkgPSBGSUVMRF9HRVQoTVRfUFJYVl9UWF9S QVRFLCByeHYudlswXSk7DQorCQkJcnh2LnBoeSA9IEZJRUxEX0dFVChNVF9DUlhWX1RYX01PREUs IHJ4di52WzJdKTsNCisNCisJCQlzd2l0Y2ggKHJ4di5waHkpIHsNCisJCQljYXNlIE1UX1BIWV9U WVBFX0NDSzoNCisJCQkJY2NrID0gdHJ1ZTsNCisJCQkJLyogZmFsbCB0aHJvdWdoICovDQorCQkJ Y2FzZSBNVF9QSFlfVFlQRV9PRkRNOg0KKwkJCQlpID0gbXQ3Nl9nZXRfcmF0ZSgmZGV2LT5tdDc2 LCBzYmFuZCwgaSwgY2NrKTsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBNVF9QSFlfVFlQRV9IVF9H RjoNCisJCQljYXNlIE1UX1BIWV9UWVBFX0hUOg0KKwkJCQlzdGF0dXMtPmVuY29kaW5nID0gUlhf RU5DX0hUOw0KKwkJCQlpZiAoaSA+IDMxKQ0KKwkJCQkJcmV0dXJuIC1FSU5WQUw7DQorCQkJCWJy ZWFrOw0KKwkJCWNhc2UgTVRfUEhZX1RZUEVfVkhUOg0KKwkJCQlzdGF0dXMtPm5zcyA9DQorCQkJ CQlGSUVMRF9HRVQoTVRfUFJYVl9OU1RTLCByeHYudlswXSkgKyAxOw0KKwkJCQlzdGF0dXMtPmVu Y29kaW5nID0gUlhfRU5DX1ZIVDsNCisJCQkJaWYgKGkgPiA5KQ0KKwkJCQkJcmV0dXJuIC1FSU5W QUw7DQorCQkJCWJyZWFrOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXJldHVybiAtRUlOVkFMOw0KKwkJ CX0NCisJCQlzdGF0dXMtPnJhdGVfaWR4ID0gaTsNCisNCisJCQlzd2l0Y2ggKEZJRUxEX0dFVChN VF9DUlhWX0ZSQU1FX01PREUsIHJ4di52WzJdKSkgew0KKwkJCWNhc2UgSUVFRTgwMjExX1NUQV9S WF9CV18yMDoNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBJRUVFODAyMTFfU1RBX1JYX0JXXzQwOg0K KwkJCQlzdGF0dXMtPmJ3ID0gUkFURV9JTkZPX0JXXzQwOw0KKwkJCQlicmVhazsNCisJCQljYXNl IElFRUU4MDIxMV9TVEFfUlhfQldfODA6DQorCQkJCXN0YXR1cy0+YncgPSBSQVRFX0lORk9fQldf ODA7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgSUVFRTgwMjExX1NUQV9SWF9CV18xNjA6DQorCQkJ CXN0YXR1cy0+YncgPSBSQVRFX0lORk9fQldfMTYwOw0KKwkJCQlicmVhazsNCisJCQlkZWZhdWx0 Og0KKwkJCQlyZXR1cm4gLUVJTlZBTDsNCisJCQl9DQorDQorCQkJc3RhdHVzLT5lbmNfZmxhZ3Mg fD0gUlhfRU5DX0ZMQUdfU1RCQ19NQVNLICogc3RiYzsNCisJCQlpZiAoZ2kpDQorCQkJCXN0YXR1 cy0+ZW5jX2ZsYWdzIHw9IFJYX0VOQ19GTEFHX1NIT1JUX0dJOw0KKwkJfQ0KKwl9DQorDQorCXNr Yl9wdWxsKHNrYiwgKHU4ICopcnhkIC0gc2tiLT5kYXRhICsgMiAqIHJlbW92ZV9wYWQpOw0KKw0K KwlpZiAoaW5zZXJ0X2NjbXBfaGRyKSB7DQorCQl1OCBrZXlfaWQgPSBGSUVMRF9HRVQoTVRfUlhE MV9OT1JNQUxfS0VZX0lELCByeGQxKTsNCisNCisJCW10NzZfaW5zZXJ0X2NjbXBfaGRyKHNrYiwg a2V5X2lkKTsNCisJfQ0KKw0KKwloZHIgPSBtdDc2X3NrYl9nZXRfaGRyKHNrYik7DQorCWlmICgh c3RhdHVzLT53Y2lkIHx8ICFpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9s KSkNCisJCXJldHVybiAwOw0KKw0KKwlzdGF0dXMtPmFnZ3IgPSB1bmljYXN0ICYmDQorCQkgICAg ICAgIWllZWU4MDIxMV9pc19xb3NfbnVsbGZ1bmMoaGRyLT5mcmFtZV9jb250cm9sKTsNCisJc3Rh dHVzLT50aWQgPSAqaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcikgJiBJRUVFODAyMTFfUU9TX0NU TF9USURfTUFTSzsNCisJc3RhdHVzLT5zZXFubyA9IElFRUU4MDIxMV9TRVFfVE9fU04obGUxNl90 b19jcHUoaGRyLT5zZXFfY3RybCkpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBtdDc5 MTVfbWFjX3dyaXRlX3R4d2koc3RydWN0IG10NzkxNV9kZXYgKmRldiwgX19sZTMyICp0eHdpLA0K KwkJCSAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtdDc2X3djaWQgKndjaWQsDQorCQkJ ICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCBib29sIGJlYWNvbikNCit7DQorCXN0 cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsNCisJ c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ ZGF0YTsNCisJYm9vbCBtdWx0aWNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFk ZHIxKTsNCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IGluZm8tPmNvbnRyb2wudmlmOw0K KwlzdHJ1Y3QgbXQ3Nl9waHkgKm1waHkgPSAmZGV2LT5tcGh5Ow0KKwlib29sIGV4dF9waHkgPSBp bmZvLT5od19xdWV1ZSAmIE1UX1RYX0hXX1FVRVVFX0VYVF9QSFk7DQorCXU4IGZjX3R5cGUsIGZj X3N0eXBlLCBwX2ZtdCwgcV9pZHgsIG9tYWNfaWR4ID0gMCwgd21tX2lkeCA9IDA7DQorCV9fbGUx NiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsNCisJdTE2IHR4X2NvdW50ID0gNCwgc2Vxbm8gPSAw Ow0KKwl1MzIgdmFsOw0KKw0KKwlpZiAodmlmKSB7DQorCQlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZp ZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorDQorCQlvbWFjX2lkeCA9 IG12aWYtPm9tYWNfaWR4Ow0KKwkJd21tX2lkeCA9IG12aWYtPndtbV9pZHg7DQorCX0NCisNCisJ aWYgKGV4dF9waHkgJiYgZGV2LT5tdDc2LnBoeTIpDQorCQltcGh5ID0gZGV2LT5tdDc2LnBoeTI7 DQorDQorCWZjX3R5cGUgPSAobGUxNl90b19jcHUoZmMpICYgSUVFRTgwMjExX0ZDVExfRlRZUEUp ID4+IDI7DQorCWZjX3N0eXBlID0gKGxlMTZfdG9fY3B1KGZjKSAmIElFRUU4MDIxMV9GQ1RMX1NU WVBFKSA+PiA0Ow0KKw0KKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpIHx8IGllZWU4MDIxMV9p c19idWZmZXJhYmxlX21tcGR1KGZjKSkgew0KKwkJcV9pZHggPSB3bW1faWR4ICogTVQ3OTE1X01B WF9XTU1fU0VUUyArDQorCQkJc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7DQorCQlwX2ZtdCA9 IE1UX1RYX1RZUEVfQ1Q7DQorCX0gZWxzZSBpZiAoYmVhY29uKSB7DQorCQlxX2lkeCA9IE1UX0xN QUNfQkNOMDsNCisJCXBfZm10ID0gTVRfVFhfVFlQRV9GVzsNCisJfSBlbHNlIHsNCisJCXFfaWR4 ID0gTVRfTE1BQ19BTFRYMDsNCisJCXBfZm10ID0gTVRfVFhfVFlQRV9DVDsNCisJfQ0KKw0KKwl2 YWwgPSBGSUVMRF9QUkVQKE1UX1RYRDBfVFhfQllURVMsIHNrYi0+bGVuICsgTVRfVFhEX1NJWkUp IHwNCisJICAgICAgRklFTERfUFJFUChNVF9UWEQwX1BLVF9GTVQsIHBfZm10KSB8DQorCSAgICAg IEZJRUxEX1BSRVAoTVRfVFhEMF9RX0lEWCwgcV9pZHgpOw0KKwl0eHdpWzBdID0gY3B1X3RvX2xl MzIodmFsKTsNCisNCisJdmFsID0gTVRfVFhEMV9MT05HX0ZPUk1BVCB8DQorCSAgICAgIEZJRUxE X1BSRVAoTVRfVFhEMV9XTEFOX0lEWCwgd2NpZC0+aWR4KSB8DQorCSAgICAgIEZJRUxEX1BSRVAo TVRfVFhEMV9IRFJfRk9STUFULCBNVF9IRFJfRk9STUFUXzgwMl8xMSkgfA0KKwkgICAgICBGSUVM RF9QUkVQKE1UX1RYRDFfSERSX0lORk8sDQorCQkJIGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21f c2tiKHNrYikgLyAyKSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMV9USUQsDQorCQkJIHNr Yi0+cHJpb3JpdHkgJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSykgfA0KKwkgICAgICBGSUVM RF9QUkVQKE1UX1RYRDFfT1dOX01BQywgb21hY19pZHgpOw0KKwlpZiAoZXh0X3BoeSAmJiBxX2lk eCA+PSBNVF9MTUFDX0FMVFgwICYmIHFfaWR4IDw9IE1UX0xNQUNfQkNOMCkNCisJCXZhbCB8PSBj cHVfdG9fbGUzMihNVF9UWEQxX1RHSUQpOw0KKw0KKwl0eHdpWzFdID0gY3B1X3RvX2xlMzIodmFs KTsNCisNCisJdmFsID0gRklFTERfUFJFUChNVF9UWEQyX0ZSQU1FX1RZUEUsIGZjX3R5cGUpIHwN CisJICAgICAgRklFTERfUFJFUChNVF9UWEQyX1NVQl9UWVBFLCBmY19zdHlwZSkgfA0KKwkgICAg ICBGSUVMRF9QUkVQKE1UX1RYRDJfTVVMVElDQVNULCBtdWx0aWNhc3QpOw0KKwlpZiAoa2V5KSB7 DQorCQlpZiAobXVsdGljYXN0ICYmIGllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShza2Ip ICYmDQorCQkgICAga2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMpIHsN CisJCQl2YWwgfD0gTVRfVFhEMl9CSVA7DQorCQkJdHh3aVszXSA9IDA7DQorCQl9IGVsc2Ugew0K KwkJCXR4d2lbM10gPSBjcHVfdG9fbGUzMihNVF9UWEQzX1BST1RFQ1RfRlJBTUUpOw0KKwkJfQ0K Kwl9IGVsc2Ugew0KKwkJdHh3aVszXSA9IDA7DQorCX0NCisJdHh3aVsyXSA9IGNwdV90b19sZTMy KHZhbCk7DQorDQorCXR4d2lbNF0gPSAwOw0KKwl0eHdpWzVdID0gMDsNCisJdHh3aVs2XSA9IDA7 DQorDQorCWlmICghaWVlZTgwMjExX2lzX2RhdGEoZmMpIHx8IG11bHRpY2FzdCkgew0KKwkJdTE2 IHJhdGU7DQorDQorCQkvKiBoYXJkd2FyZSB3b24ndCBhZGQgSFRDIGZvciBtZ210L2N0cmwgZnJh bWUgKi8NCisJCXR4d2lbMl0gfD0gY3B1X3RvX2xlMzIoTVRfVFhEMl9GSVhfUkFURSB8IE1UX1RY RDJfSFRDX1ZMRCk7DQorDQorCQlpZiAobXBoeS0+Y2hhbmRlZi5jaGFuLT5iYW5kID09IE5MODAy MTFfQkFORF81R0haKQ0KKwkJCXJhdGUgPSBNVDc5MTVfNUdfUkFURV9ERUZBVUxUOw0KKwkJZWxz ZQ0KKwkJCXJhdGUgPSBNVDc5MTVfMkdfUkFURV9ERUZBVUxUOw0KKw0KKwkJdmFsID0gTVRfVFhE Nl9GSVhFRF9CVyB8DQorCQkgICAgICBGSUVMRF9QUkVQKE1UX1RYRDZfVFhfUkFURSwgcmF0ZSk7 DQorCQl0eHdpWzZdIHw9IGNwdV90b19sZTMyKHZhbCk7DQorCQl0eHdpWzNdIHw9IGNwdV90b19s ZTMyKE1UX1RYRDNfQkFfRElTQUJMRSk7DQorCX0NCisNCisJaWYgKCFpZWVlODAyMTFfaXNfYmVh Y29uKGZjKSkNCisJCXR4d2lbM10gfD0gY3B1X3RvX2xlMzIoTVRfVFhEM19TV19QT1dFUl9NR01U KTsNCisJZWxzZQ0KKwkJdHhfY291bnQgPSAweDFmOw0KKw0KKwlpZiAoaW5mby0+ZmxhZ3MgJiBJ RUVFODAyMTFfVFhfQ1RMX05PX0FDSykNCisJCXR4d2lbM10gfD0gY3B1X3RvX2xlMzIoTVRfVFhE M19OT19BQ0spOw0KKw0KKwl2YWwgPSBGSUVMRF9QUkVQKE1UX1RYRDdfVFlQRSwgZmNfdHlwZSkg fA0KKwkgICAgICBGSUVMRF9QUkVQKE1UX1RYRDdfU1VCX1RZUEUsIGZjX3N0eXBlKTsNCisJdHh3 aVs3XSA9IGNwdV90b19sZTMyKHZhbCk7DQorDQorCXZhbCA9IEZJRUxEX1BSRVAoTVRfVFhEM19S RU1fVFhfQ09VTlQsIHR4X2NvdW50KTsNCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykp IHsNCisJCXNlcW5vID0gSUVFRTgwMjExX1NFUV9UT19TTihsZTE2X3RvX2NwdShoZHItPnNlcV9j dHJsKSk7DQorCQl2YWwgfD0gTVRfVFhEM19TTl9WQUxJRDsNCisJfSBlbHNlIGlmIChpZWVlODAy MTFfaXNfYmFja19yZXEoZmMpKSB7DQorCQlzdHJ1Y3QgaWVlZTgwMjExX2JhciAqYmFyOw0KKw0K KwkJYmFyID0gKHN0cnVjdCBpZWVlODAyMTFfYmFyICopc2tiLT5kYXRhOw0KKwkJc2Vxbm8gPSBJ RUVFODAyMTFfU0VRX1RPX1NOKGxlMTZfdG9fY3B1KGJhci0+c3RhcnRfc2VxX251bSkpOw0KKwkJ dmFsIHw9IE1UX1RYRDNfU05fVkFMSUQ7DQorCX0NCisJdmFsIHw9IEZJRUxEX1BSRVAoTVRfVFhE M19TRVEsIHNlcW5vKTsNCisJdHh3aVszXSB8PSBjcHVfdG9fbGUzMih2YWwpOw0KK30NCisNCitp bnQgbXQ3OTE1X3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgdm9pZCAqdHh3 aV9wdHIsDQorCQkJICBlbnVtIG10NzZfdHhxX2lkIHFpZCwgc3RydWN0IG10NzZfd2NpZCAqd2Np ZCwNCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkJICBzdHJ1Y3QgbXQ3Nl90 eF9pbmZvICp0eF9pbmZvKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1 Y3QgaWVlZTgwMjExX2hkciAqKXR4X2luZm8tPnNrYi0+ZGF0YTsNCisJc3RydWN0IG10NzkxNV9k ZXYgKmRldiA9IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbXQ3OTE1X2RldiwgbXQ3Nik7DQor CXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhfaW5m by0+c2tiKTsNCisJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5ID0gaW5mby0+Y29udHJv bC5od19rZXk7DQorCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBpbmZvLT5jb250cm9sLnZp ZjsNCisJc3RydWN0IG10NzZfdHhfY2IgKmNiID0gbXQ3Nl90eF9za2JfY2IodHhfaW5mby0+c2ti KTsNCisJc3RydWN0IG10NzZfdHh3aV9jYWNoZSAqdDsNCisJc3RydWN0IG10NzkxNV90eHAgKnR4 cDsNCisJaW50IGlkLCBpLCBuYnVmID0gdHhfaW5mby0+bmJ1ZiAtIDE7DQorCXU4ICp0eHdpID0g KHU4ICopdHh3aV9wdHI7DQorDQorCWlmICghd2NpZCkNCisJCXdjaWQgPSAmZGV2LT5tdDc2Lmds b2JhbF93Y2lkOw0KKw0KKwljYi0+d2NpZCA9IHdjaWQtPmlkeDsNCisNCisJbXQ3OTE1X21hY193 cml0ZV90eHdpKGRldiwgdHh3aV9wdHIsIHR4X2luZm8tPnNrYiwgd2NpZCwga2V5LA0KKwkJCSAg ICAgIGZhbHNlKTsNCisNCisJdHhwID0gKHN0cnVjdCBtdDc5MTVfdHhwICopKHR4d2kgKyBNVF9U WERfU0laRSk7DQorCWZvciAoaSA9IDA7IGkgPCBuYnVmOyBpKyspIHsNCisJCXR4cC0+YnVmW2ld ID0gY3B1X3RvX2xlMzIodHhfaW5mby0+YnVmW2kgKyAxXS5hZGRyKTsNCisJCXR4cC0+bGVuW2ld ID0gY3B1X3RvX2xlMTYodHhfaW5mby0+YnVmW2kgKyAxXS5sZW4pOw0KKwl9DQorCXR4cC0+bmJ1 ZiA9IG5idWY7DQorDQorCS8qIHBhc3MgcGFydGlhbCBza2IgaGVhZGVyIHRvIGZ3ICovDQorCXR4 X2luZm8tPmJ1ZlsxXS5sZW4gPSBNVF9DVF9QQVJTRV9MRU47DQorCXR4X2luZm8tPm5idWYgPSBN VF9DVF9ETUFfQlVGX05VTTsNCisNCisJdHhwLT5mbGFncyA9IGNwdV90b19sZTE2KE1UX0NUX0lO Rk9fQVBQTFlfVFhEKTsNCisNCisJaWYgKCFrZXkpDQorCQl0eHAtPmZsYWdzIHw9IGNwdV90b19s ZTE2KE1UX0NUX0lORk9fTk9ORV9DSVBIRVJfRlJBTUUpOw0KKw0KKwlpZiAoaWVlZTgwMjExX2lz X21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkNCisJCXR4cC0+ZmxhZ3MgfD0gY3B1X3RvX2xlMTYo TVRfQ1RfSU5GT19NR01UX0ZSQU1FKTsNCisNCisJaWYgKHZpZikgew0KKwkJc3RydWN0IG10Nzkx NV92aWYgKm12aWYgPSAoc3RydWN0IG10NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKw0KKwkJ dHhwLT5ic3NfaWR4ID0gbXZpZi0+aWR4Ow0KKwl9DQorDQorCXQgPSAoc3RydWN0IG10NzZfdHh3 aV9jYWNoZSAqKSh0eHdpICsgbWRldi0+ZHJ2LT50eHdpX3NpemUpOw0KKwl0LT5za2IgPSB0eF9p bmZvLT5za2I7DQorDQorCXNwaW5fbG9ja19iaCgmZGV2LT50b2tlbl9sb2NrKTsNCisJaWQgPSBp ZHJfYWxsb2MoJmRldi0+dG9rZW4sIHQsIDAsIE1UNzkxNV9UT0tFTl9TSVpFLCBHRlBfQVRPTUlD KTsNCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+dG9rZW5fbG9jayk7DQorCWlmIChpZCA8IDApDQor CQlyZXR1cm4gaWQ7DQorDQorCXR4cC0+dG9rZW4gPSBjcHVfdG9fbGUxNihpZCk7DQorCXR4cC0+ cmVwdF93ZHNfd2NpZCA9IDB4ZmY7DQorCXR4X2luZm8tPnNrYiA9IERNQV9EVU1NWV9EQVRBOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlubGluZSBib29sDQorbXQ3OTE1X3R4X2No ZWNrX2FnZ3JfdGlkKHN0cnVjdCBtdDc5MTVfc3RhICptc3RhLCB1OCB0aWQpDQorew0KKwlib29s IHJldCA9IGZhbHNlOw0KKw0KKwlzcGluX2xvY2tfYmgoJm1zdGEtPmFtcGR1X2xvY2spOw0KKwlp ZiAobXN0YS0+YW1wZHVfc3RhdGVbdGlkXSA9PSBNVDc5MTVfQUdHUl9TVE9QKQ0KKwkJcmV0ID0g dHJ1ZTsNCisJc3Bpbl91bmxvY2tfYmgoJm1zdGEtPmFtcGR1X2xvY2spOw0KKw0KKwlyZXR1cm4g cmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV90eF9jaGVja19hZ2dyKHN0cnVjdCBp ZWVlODAyMTFfc3RhICpzdGEsIHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgaWVl ZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOw0KKwlz dHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YTsNCisJdTE2IHRpZDsNCisNCisJaWYgKCFzdGEtPmh0X2Nh cC5odF9zdXBwb3J0ZWQpDQorCQlyZXR1cm47DQorDQorCWlmIChza2JfZ2V0X3F1ZXVlX21hcHBp bmcoc2tiKSA9PSBJRUVFODAyMTFfQUNfVk8pDQorCQlyZXR1cm47DQorDQorCWlmICh1bmxpa2Vs eSghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpKQ0KKwkJcmV0dXJu Ow0KKw0KKwlpZiAodW5saWtlbHkoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9Q QUUpKSkNCisJCXJldHVybjsNCisNCisJbXN0YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXN0YS0+ ZHJ2X3ByaXY7DQorCXRpZCA9IGllZWU4MDIxMV9nZXRfdGlkKGhkcik7DQorDQorCWlmIChtdDc5 MTVfdHhfY2hlY2tfYWdncl90aWQobXN0YSwgdGlkKSkgew0KKwkJaWVlZTgwMjExX3N0YXJ0X3R4 X2JhX3Nlc3Npb24oc3RhLCB0aWQsIDApOw0KKwkJbXQ3OTE1X3NldF9hZ2dyX3N0YXRlKG1zdGEs IHRpZCwgTVQ3OTE1X0FHR1JfUFJPR1JFU1MpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUg dm9pZA0KK210NzkxNV90eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsDQorCQkgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgc3Rh dHVzID0gew0KKwkJLnN0YSA9IHN0YSwNCisJCS5pbmZvID0gaW5mbywNCisJfTsNCisNCisJaWYg KHNrYikNCisJCXN0YXR1cy5za2IgPSBza2I7DQorDQorCWlmIChzdGEpIHsNCisJCXN0cnVjdCBt dDc5MTVfc3RhICptc3RhOw0KKw0KKwkJbXN0YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXN0YS0+ ZHJ2X3ByaXY7DQorCQlzdGF0dXMucmF0ZSA9ICZtc3RhLT5zdGF0cy50eF9yYXRlOw0KKwl9DQor DQorCS8qIHVzZSBzdGF0dXNfZXh0IHRvIHJlcG9ydCBIRSByYXRlICovDQorCWllZWU4MDIxMV90 eF9zdGF0dXNfZXh0KGh3LCAmc3RhdHVzKTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVf dHhfY29tcGxldGVfc3RhdHVzKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgc3RydWN0IHNrX2J1ZmYg KnNrYiwNCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHN0YXQpDQorew0KKwlz dHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7DQor CXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3Ow0KKw0KKwlodyA9IG10NzZfdHhfc3RhdHVzX2dldF9o dyhtZGV2LCBza2IpOw0KKw0KKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FN UERVKQ0KKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQU1QRFU7DQorCWVsc2Ug aWYgKHN0YSkNCisJCW10NzkxNV90eF9jaGVja19hZ2dyKHN0YSwgc2tiKTsNCisNCisJaWYgKHN0 YXQpDQorCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7DQorDQorCWlmICgh KGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKQ0KKwkJaW5mby0+ZmxhZ3Mg fD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOw0KKw0KKwlpbmZvLT5zdGF0dXMudHhfdGltZSA9IDA7 DQorDQorCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUykg ew0KKwkJbXQ3OTE1X3R4X3N0YXR1cyhzdGEsIGh3LCBpbmZvLCBza2IpOw0KKwkJcmV0dXJuOw0K Kwl9DQorDQorCWlmIChzdGEgfHwgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9f QUNLKSkNCisJCW10NzkxNV90eF9zdGF0dXMoc3RhLCBodywgaW5mbywgTlVMTCk7DQorDQorCWRl dl9rZnJlZV9za2Ioc2tiKTsNCit9DQorDQordm9pZCBtdDc5MTVfdHhwX3NrYl91bm1hcChzdHJ1 Y3QgbXQ3Nl9kZXYgKmRldiwNCisJCQkgIHN0cnVjdCBtdDc2X3R4d2lfY2FjaGUgKnQpDQorew0K KwlzdHJ1Y3QgbXQ3OTE1X3R4cCAqdHhwOw0KKwlpbnQgaTsNCisNCisJdHhwID0gbXQ3OTE1X3R4 d2lfdG9fdHhwKGRldiwgdCk7DQorCWZvciAoaSA9IDE7IGkgPCB0eHAtPm5idWY7IGkrKykNCisJ CWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGxlMzJfdG9fY3B1KHR4cC0+YnVmW2ldKSwNCisJ CQkJIGxlMTZfdG9fY3B1KHR4cC0+bGVuW2ldKSwgRE1BX1RPX0RFVklDRSk7DQorfQ0KKw0KK3Zv aWQgbXQ3OTE1X21hY190eF9mcmVlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19i dWZmICpza2IpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3R4X2ZyZWUgKmZyZWUgPSAoc3RydWN0IG10 NzkxNV90eF9mcmVlICopc2tiLT5kYXRhOw0KKwlzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYgPSAmZGV2 LT5tdDc2Ow0KKwlzdHJ1Y3QgbXQ3Nl90eHdpX2NhY2hlICp0eHdpOw0KKwlzdHJ1Y3QgaWVlZTgw MjExX3N0YSAqc3RhID0gTlVMTDsNCisJdTggaSwgY291bnQ7DQorDQorCS8qDQorCSAqIFRPRE86 IE1UX1RYX0ZSRUVfTEFURU5DWSBpcyBtc2R1IHRpbWUgZnJvbSB0aGUgVFhEIGlzIHF1ZXVlZCBp bnRvIFBMRSwNCisJICogdG8gdGhlIHRpbWUgYWNrIGlzIHJlY2VpdmVkIG9yIGRyb3BwZWQgYnkg aHcgKGFpciArIGh3IHF1ZXVlIHRpbWUpLg0KKwkgKiBTaG91bGQgYXZvaWQgYWNjZXNzaW5nIFdU QkwgdG8gZ2V0IFR4IGFpcnRpbWUsIGFuZCB1c2UgaXQgaW5zdGVhZC4NCisJICovDQorCWNvdW50 ID0gRklFTERfR0VUKE1UX1RYX0ZSRUVfTVNEVV9DTlQsIGxlMTZfdG9fY3B1KGZyZWUtPmN0cmwp KTsNCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsNCisJCXUzMiBtc2R1LCBpbmZvID0g bGUzMl90b19jcHUoZnJlZS0+aW5mb1tpXSk7DQorCQl1OCBzdGF0Ow0KKw0KKwkJLyoNCisJCSAq IDEnYjE6IG5ldyB3Y2lkIHBhaXIuDQorCQkgKiAxJ2IwOiBtc2R1X2lkIHdpdGggdGhlIHNhbWUg J3djaWQgcGFpcicgYXMgYWJvdmUuDQorCQkgKi8NCisJCWlmIChpbmZvICYgTVRfVFhfRlJFRV9Q QUlSKSB7DQorCQkJc3RydWN0IG10NzkxNV9zdGEgKm1zdGE7DQorCQkJc3RydWN0IG10NzZfd2Np ZCAqd2NpZDsNCisJCQl1MTYgaWR4Ow0KKw0KKwkJCWNvdW50Kys7DQorCQkJaWR4ID0gRklFTERf R0VUKE1UX1RYX0ZSRUVfV0xBTl9JRCwgaW5mbyk7DQorCQkJd2NpZCA9IHJjdV9kZXJlZmVyZW5j ZShkZXYtPm10NzYud2NpZFtpZHhdKTsNCisJCQlzdGEgPSB3Y2lkX3RvX3N0YSh3Y2lkKTsNCisJ CQlpZiAoIXN0YSkNCisJCQkJY29udGludWU7DQorDQorCQkJbXN0YSA9IGNvbnRhaW5lcl9vZih3 Y2lkLCBzdHJ1Y3QgbXQ3OTE1X3N0YSwgd2NpZCk7DQorCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmso bXQ3Nl9odyhkZXYpLCAmbXN0YS0+c3RhdHNfd29yayk7DQorCQkJY29udGludWU7DQorCQl9DQor DQorCQltc2R1ID0gRklFTERfR0VUKE1UX1RYX0ZSRUVfTVNEVV9JRCwgaW5mbyk7DQorCQlzdGF0 ID0gRklFTERfR0VUKE1UX1RYX0ZSRUVfU1RBVFVTLCBpbmZvKTsNCisNCisJCXNwaW5fbG9ja19i aCgmZGV2LT50b2tlbl9sb2NrKTsNCisJCXR4d2kgPSBpZHJfcmVtb3ZlKCZkZXYtPnRva2VuLCBt c2R1KTsNCisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnRva2VuX2xvY2spOw0KKw0KKwkJaWYgKCF0 eHdpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJbXQ3OTE1X3R4cF9za2JfdW5tYXAobWRldiwgdHh3 aSk7DQorCQlpZiAodHh3aS0+c2tiKSB7DQorCQkJbXQ3OTE1X3R4X2NvbXBsZXRlX3N0YXR1cyht ZGV2LCB0eHdpLT5za2IsIHN0YSwgc3RhdCk7DQorCQkJdHh3aS0+c2tiID0gTlVMTDsNCisJCX0N CisNCisJCW10NzZfcHV0X3R4d2kobWRldiwgdHh3aSk7DQorCX0NCisJZGV2X2tmcmVlX3NrYihz a2IpOw0KK30NCisNCit2b2lkIG10NzkxNV90eF9jb21wbGV0ZV9za2Ioc3RydWN0IG10NzZfZGV2 ICptZGV2LCBlbnVtIG10NzZfdHhxX2lkIHFpZCwNCisJCQkgICAgc3RydWN0IG10NzZfcXVldWVf ZW50cnkgKmUpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2Ow0KKw0KKwlpZiAoIWUtPnR4 d2kpIHsNCisJCWRldl9rZnJlZV9za2JfYW55KGUtPnNrYik7DQorCQlyZXR1cm47DQorCX0NCisN CisJZGV2ID0gY29udGFpbmVyX29mKG1kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCisN CisJLyogZXJyb3IgcGF0aCAqLw0KKwlpZiAoZS0+c2tiID09IERNQV9EVU1NWV9EQVRBKSB7DQor CQlzdHJ1Y3QgbXQ3Nl90eHdpX2NhY2hlICp0Ow0KKwkJc3RydWN0IG10NzkxNV90eHAgKnR4cDsN CisNCisJCXR4cCA9IG10NzkxNV90eHdpX3RvX3R4cChtZGV2LCBlLT50eHdpKTsNCisNCisJCXNw aW5fbG9ja19iaCgmZGV2LT50b2tlbl9sb2NrKTsNCisJCXQgPSBpZHJfcmVtb3ZlKCZkZXYtPnRv a2VuLCBsZTE2X3RvX2NwdSh0eHAtPnRva2VuKSk7DQorCQlzcGluX3VubG9ja19iaCgmZGV2LT50 b2tlbl9sb2NrKTsNCisJCWUtPnNrYiA9IHQgPyB0LT5za2IgOiBOVUxMOw0KKwl9DQorDQorCWlm IChlLT5za2IpIHsNCisJCXN0cnVjdCBtdDc2X3R4X2NiICpjYiA9IG10NzZfdHhfc2tiX2NiKGUt PnNrYik7DQorCQlzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkOw0KKw0KKwkJd2NpZCA9IHJjdV9kZXJl ZmVyZW5jZShkZXYtPm10NzYud2NpZFtjYi0+d2NpZF0pOw0KKw0KKwkJbXQ3OTE1X3R4X2NvbXBs ZXRlX3N0YXR1cyhtZGV2LCBlLT5za2IsIHdjaWRfdG9fc3RhKHdjaWQpLCAwKTsNCisJfQ0KK30N CisNCit2b2lkIG10NzkxNV9tYWNfY2NhX3N0YXRzX3Jlc2V0KHN0cnVjdCBtdDc5MTVfcGh5ICpw aHkpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5LT5kZXY7DQorCWJvb2wgZXh0 X3BoeSA9IHBoeSAhPSAmZGV2LT5waHk7DQorCXUzMiByZWcgPSBNVF9XRl9QSFlfUlhfQ1RSTDEo ZXh0X3BoeSk7DQorDQorCW10NzkxNV9sMl9jbGVhcihkZXYsIHJlZywgTVRfV0ZfUEhZX1JYX0NU UkwxX1NUU0NOVF9FTik7DQorCW10NzkxNV9sMl9zZXQoZGV2LCByZWcsIEJJVCgxMSkgfCBCSVQo OSkpOw0KK30NCisNCit2b2lkIG10NzkxNV9tYWNfcmVzZXRfY291bnRlcnMoc3RydWN0IG10Nzkx NV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBwaHktPmRldjsNCisJ Ym9vbCBleHRfcGh5ID0gcGh5ICE9ICZkZXYtPnBoeTsNCisJaW50IGk7DQorDQorCWZvciAoaSA9 IDA7IGkgPCA0OyBpKyspIHsNCisJCW10NzZfcnIoZGV2LCBNVF9UWF9BR0dfQ05UKGV4dF9waHks IGkpKTsNCisJCW10NzZfcnIoZGV2LCBNVF9UWF9BR0dfQ05UMihleHRfcGh5LCBpKSk7DQorCX0N CisNCisJaWYgKGV4dF9waHkpIHsNCisJCWRldi0+bXQ3Ni5waHkyLT5zdXJ2ZXlfdGltZSA9IGt0 aW1lX2dldF9ib290dGltZSgpOw0KKwkJaSA9IEFSUkFZX1NJWkUoZGV2LT5tdDc2LmFnZ3Jfc3Rh dHMpIC8gMjsNCisJfSBlbHNlIHsNCisJCWRldi0+bXQ3Ni5waHkuc3VydmV5X3RpbWUgPSBrdGlt ZV9nZXRfYm9vdHRpbWUoKTsNCisJCWkgPSAwOw0KKwl9DQorCW1lbXNldCgmZGV2LT5tdDc2LmFn Z3Jfc3RhdHNbaV0sIDAsIHNpemVvZihkZXYtPm10NzYuYWdncl9zdGF0cykgLyAyKTsNCisNCisJ LyogcmVzZXQgYWlydGltZSBjb3VudGVycyAqLw0KKwltdDc2X3JyKGRldiwgTVRfTUlCX1NEUjko ZXh0X3BoeSkpOw0KKwltdDc2X3JyKGRldiwgTVRfTUlCX1NEUjM2KGV4dF9waHkpKTsNCisJbXQ3 Nl9ycihkZXYsIE1UX01JQl9TRFIzNyhleHRfcGh5KSk7DQorDQorCW10NzZfc2V0KGRldiwgTVRf V0ZfUk1BQ19NSUJfVElNRTAoZXh0X3BoeSksDQorCQkgTVRfV0ZfUk1BQ19NSUJfUlhUSU1FX0NM Uik7DQorCW10NzZfc2V0KGRldiwgTVRfV0ZfUk1BQ19NSUJfQUlSVElNRTAoZXh0X3BoeSksDQor CQkgTVRfV0ZfUk1BQ19NSUJfUlhUSU1FX0NMUik7DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X21hY19z ZXRfdGltaW5nKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkpDQorew0KKwlzMTYgY292ZXJhZ2VfY2xh c3MgPSBwaHktPmNvdmVyYWdlX2NsYXNzOw0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5 LT5kZXY7DQorCWJvb2wgZXh0X3BoeSA9IHBoeSAhPSAmZGV2LT5waHk7DQorCXUzMiB2YWwsIHJl Z19vZmZzZXQ7DQorCXUzMiBjY2sgPSBGSUVMRF9QUkVQKE1UX1RJTUVPVVRfVkFMX1BMQ1AsIDIz MSkgfA0KKwkJICBGSUVMRF9QUkVQKE1UX1RJTUVPVVRfVkFMX0NDQSwgNDgpOw0KKwl1MzIgb2Zk bSA9IEZJRUxEX1BSRVAoTVRfVElNRU9VVF9WQUxfUExDUCwgNjApIHwNCisJCSAgIEZJRUxEX1BS RVAoTVRfVElNRU9VVF9WQUxfQ0NBLCAyNCk7DQorCWludCBzaWZzLCBvZmZzZXQ7DQorDQorCWlm IChwaHktPm10NzYtPmNoYW5kZWYuY2hhbi0+YmFuZCA9PSBOTDgwMjExX0JBTkRfNUdIWikNCisJ CXNpZnMgPSAxNjsNCisJZWxzZQ0KKwkJc2lmcyA9IDEwOw0KKw0KKwlpZiAoZXh0X3BoeSkgew0K KwkJY292ZXJhZ2VfY2xhc3MgPSBtYXhfdChzMTYsIGRldi0+cGh5LmNvdmVyYWdlX2NsYXNzLA0K KwkJCQkgICAgICAgY292ZXJhZ2VfY2xhc3MpOw0KKwl9IGVsc2Ugew0KKwkJc3RydWN0IG10Nzkx NV9waHkgKnBoeV9leHQgPSBtdDc5MTVfZXh0X3BoeShkZXYpOw0KKw0KKwkJaWYgKHBoeV9leHQp DQorCQkJY292ZXJhZ2VfY2xhc3MgPSBtYXhfdChzMTYsIHBoeV9leHQtPmNvdmVyYWdlX2NsYXNz LA0KKwkJCQkJICAgICAgIGNvdmVyYWdlX2NsYXNzKTsNCisJfQ0KKwltdDc2X3NldChkZXYsIE1U X0FSQl9TQ1IoZXh0X3BoeSksDQorCQkgTVRfQVJCX1NDUl9UWF9ESVNBQkxFIHwgTVRfQVJCX1ND Ul9SWF9ESVNBQkxFKTsNCisJdWRlbGF5KDEpOw0KKw0KKwlvZmZzZXQgPSAzICogY292ZXJhZ2Vf Y2xhc3M7DQorCXJlZ19vZmZzZXQgPSBGSUVMRF9QUkVQKE1UX1RJTUVPVVRfVkFMX1BMQ1AsIG9m ZnNldCkgfA0KKwkJICAgICBGSUVMRF9QUkVQKE1UX1RJTUVPVVRfVkFMX0NDQSwgb2Zmc2V0KTsN CisNCisJbXQ3Nl93cihkZXYsIE1UX1RNQUNfQ0RUUihleHRfcGh5KSwgY2NrICsgcmVnX29mZnNl dCk7DQorCW10NzZfd3IoZGV2LCBNVF9UTUFDX09EVFIoZXh0X3BoeSksIG9mZG0gKyByZWdfb2Zm c2V0KTsNCisJbXQ3Nl93cihkZXYsIE1UX1RNQUNfSUNSMChleHRfcGh5KSwNCisJCUZJRUxEX1BS RVAoTVRfSUZTX0VJRlMsIDM2MCkgfA0KKwkJRklFTERfUFJFUChNVF9JRlNfUklGUywgMikgfA0K KwkJRklFTERfUFJFUChNVF9JRlNfU0lGUywgc2lmcykgfA0KKwkJRklFTERfUFJFUChNVF9JRlNf U0xPVCwgcGh5LT5zbG90dGltZSkpOw0KKw0KKwlpZiAocGh5LT5zbG90dGltZSA8IDIwKQ0KKwkJ dmFsID0gTVQ3OTE1X0NGRU5EX1JBVEVfREVGQVVMVDsNCisJZWxzZQ0KKwkJdmFsID0gTVQ3OTE1 X0NGRU5EX1JBVEVfMTFCOw0KKw0KKwltdDc2X3Jtd19maWVsZChkZXYsIE1UX0FHR19BQ1IwKGV4 dF9waHkpLCBNVF9BR0dfQUNSX0NGRU5EX1JBVEUsIHZhbCk7DQorCW10NzZfY2xlYXIoZGV2LCBN VF9BUkJfU0NSKGV4dF9waHkpLA0KKwkJICAgTVRfQVJCX1NDUl9UWF9ESVNBQkxFIHwgTVRfQVJC X1NDUl9SWF9ESVNBQkxFKTsNCit9DQorDQorLyoNCisgKiBUT0RPOiBtaWIgY291bnRlcnMgYXJl IHJlYWQtY2xlYXIgYW5kIHRoZXJlJ3JlIG1hbnkgSEUgZnVuY3Rpb25hbGl0aWVzIG5lZWQNCisg KiBzdWNoIGluZm8sIGhlbmNlIGZpcm13YXJlIHByZXBhcmVzIGEgdGFzayB0byByZWFkIHRoZSBm aWVsZHMgb3V0IHRvIGEgc2hhcmVkDQorICogc3RydWN0dXJlLiBVc2VyIHNob3VsZCBzd2l0Y2gg dG8gdXNlIGV2ZW50IGZvcm1hdCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbi4NCisgKi8NCitzdGF0 aWMgdm9pZA0KK210NzkxNV9waHlfdXBkYXRlX2NoYW5uZWwoc3RydWN0IG10NzZfcGh5ICptcGh5 LCBpbnQgaWR4KQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZiht cGh5LT5kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCisJc3RydWN0IG10NzZfY2hhbm5l bF9zdGF0ZSAqc3RhdGU7DQorCXU2NCBidXN5X3RpbWUsIHR4X3RpbWUsIHJ4X3RpbWUsIG9ic3Nf dGltZTsNCisNCisJYnVzeV90aW1lID0gbXQ3Nl9nZXRfZmllbGQoZGV2LCBNVF9NSUJfU0RSOShp ZHgpLA0KKwkJCQkgICBNVF9NSUJfU0RSOV9CVVNZX01BU0spOw0KKwl0eF90aW1lID0gbXQ3Nl9n ZXRfZmllbGQoZGV2LCBNVF9NSUJfU0RSMzYoaWR4KSwNCisJCQkJIE1UX01JQl9TRFIzNl9UWFRJ TUVfTUFTSyk7DQorCXJ4X3RpbWUgPSBtdDc2X2dldF9maWVsZChkZXYsIE1UX01JQl9TRFIzNyhp ZHgpLA0KKwkJCQkgTVRfTUlCX1NEUjM3X1JYVElNRV9NQVNLKTsNCisJb2Jzc190aW1lID0gbXQ3 Nl9nZXRfZmllbGQoZGV2LCBNVF9XRl9STUFDX01JQl9BSVJUSU1FMTQoaWR4KSwNCisJCQkJICAg TVRfTUlCX09CU1NUSU1FX01BU0spOw0KKw0KKwkvKiBUT0RPOiBzdGF0ZS0+bm9pc2UgKi8NCisJ c3RhdGUgPSBtcGh5LT5jaGFuX3N0YXRlOw0KKwlzdGF0ZS0+Y2NfYnVzeSArPSBidXN5X3RpbWU7 DQorCXN0YXRlLT5jY190eCArPSB0eF90aW1lOw0KKwlzdGF0ZS0+Y2NfcnggKz0gcnhfdGltZSAr IG9ic3NfdGltZTsNCisJc3RhdGUtPmNjX2Jzc19yeCArPSByeF90aW1lOw0KK30NCisNCit2b2lk IG10NzkxNV91cGRhdGVfY2hhbm5lbChzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYpDQorew0KKwlzdHJ1 Y3QgbXQ3OTE1X2RldiAqZGV2ID0gY29udGFpbmVyX29mKG1kZXYsIHN0cnVjdCBtdDc5MTVfZGV2 LCBtdDc2KTsNCisNCisJbXQ3OTE1X3BoeV91cGRhdGVfY2hhbm5lbCgmbWRldi0+cGh5LCAwKTsN CisJaWYgKG1kZXYtPnBoeTIpDQorCQltdDc5MTVfcGh5X3VwZGF0ZV9jaGFubmVsKG1kZXYtPnBo eTIsIDEpOw0KKw0KKwkvKiByZXNldCBvYnNzIGFpcnRpbWUgKi8NCisJbXQ3Nl9zZXQoZGV2LCBN VF9XRl9STUFDX01JQl9USU1FMCgwKSwgTVRfV0ZfUk1BQ19NSUJfUlhUSU1FX0NMUik7DQorCWlm IChtZGV2LT5waHkyKQ0KKwkJbXQ3Nl9zZXQoZGV2LCBNVF9XRl9STUFDX01JQl9USU1FMCgxKSwN CisJCQkgTVRfV0ZfUk1BQ19NSUJfUlhUSU1FX0NMUik7DQorfQ0KKw0KK3N0YXRpYyBib29sDQor bXQ3OTE1X3dhaXRfcmVzZXRfc3RhdGUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIHN0YXRl KQ0KK3sNCisJYm9vbCByZXQ7DQorDQorCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dChkZXYtPnJl c2V0X3dhaXQsDQorCQkJCSAoUkVBRF9PTkNFKGRldi0+cmVzZXRfc3RhdGUpICYgc3RhdGUpLA0K KwkJCQkgTVQ3OTE1X1JFU0VUX1RJTUVPVVQpOw0KKw0KKwlXQVJOKCFyZXQsICJUaW1lb3V0IHdh aXRpbmcgZm9yIE1DVSByZXNldCBzdGF0ZSAleFxuIiwgc3RhdGUpOw0KKwlyZXR1cm4gcmV0Ow0K K30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV91cGRhdGVfdmlmX2JlYWNvbih2b2lkICpwcml2 LCB1OCAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KK3sNCisJc3RydWN0IGllZWU4 MDIxMV9odyAqaHcgPSBwcml2Ow0KKw0KKwltdDc5MTVfbWN1X2FkZF9iZWFjb24oaHcsIHZpZiwg dmlmLT5ic3NfY29uZi5lbmFibGVfYmVhY29uKTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5 MTVfdXBkYXRlX2JlYWNvbnMoc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCWllZWU4MDIx MV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKGRldi0+bXQ3Ni5odywNCisJCUlFRUU4MDIxMV9J RkFDRV9JVEVSX1JFU1VNRV9BTEwsDQorCQltdDc5MTVfdXBkYXRlX3ZpZl9iZWFjb24sIGRldi0+ bXQ3Ni5odyk7DQorDQorCWlmICghZGV2LT5tdDc2LnBoeTIpDQorCQlyZXR1cm47DQorDQorCWll ZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKGRldi0+bXQ3Ni5waHkyLT5odywNCisJ CUlFRUU4MDIxMV9JRkFDRV9JVEVSX1JFU1VNRV9BTEwsDQorCQltdDc5MTVfdXBkYXRlX3ZpZl9i ZWFjb24sIGRldi0+bXQ3Ni5waHkyLT5odyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1 X2RtYV9yZXNldChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJaW50IGk7DQorDQorCW10 NzZfY2xlYXIoZGV2LCBNVF9XRkRNQTBfR0xPX0NGRywNCisJCSAgIE1UX1dGRE1BMF9HTE9fQ0ZH X1RYX0RNQV9FTiB8IE1UX1dGRE1BMF9HTE9fQ0ZHX1JYX0RNQV9FTik7DQorCW10NzZfY2xlYXIo ZGV2LCBNVF9XRkRNQTFfR0xPX0NGRywNCisJCSAgIE1UX1dGRE1BMV9HTE9fQ0ZHX1RYX0RNQV9F TiB8IE1UX1dGRE1BMV9HTE9fQ0ZHX1JYX0RNQV9FTik7DQorCXVzbGVlcF9yYW5nZSgxMDAwLCAy MDAwKTsNCisNCisJZm9yIChpID0gMDsgaSA8IF9fTVRfVFhRX01BWDsgaSsrKQ0KKwkJbXQ3Nl9x dWV1ZV90eF9jbGVhbnVwKGRldiwgaSwgdHJ1ZSk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGRldi0+bXQ3Ni5xX3J4KTsgaSsrKQ0KKwkJbXQ3Nl9xdWV1ZV9yeF9yZXNldChkZXYs IGkpOw0KKw0KKwkvKiByZS1pbml0IHByZWZldGNoIHNldHRpbmdzIGFmdGVyIHJlc2V0ICovDQor CW10NzkxNV9kbWFfcHJlZmV0Y2goZGV2KTsNCisNCisJbXQ3Nl9zZXQoZGV2LCBNVF9XRkRNQTBf R0xPX0NGRywNCisJCSBNVF9XRkRNQTBfR0xPX0NGR19UWF9ETUFfRU4gfCBNVF9XRkRNQTBfR0xP X0NGR19SWF9ETUFfRU4pOw0KKwltdDc2X3NldChkZXYsIE1UX1dGRE1BMV9HTE9fQ0ZHLA0KKwkJ IE1UX1dGRE1BMV9HTE9fQ0ZHX1RYX0RNQV9FTiB8IE1UX1dGRE1BMV9HTE9fQ0ZHX1JYX0RNQV9F Tik7DQorfQ0KKw0KKy8qIHN5c3RlbSBlcnJvciByZWNvdmVyeSAqLw0KK3ZvaWQgbXQ3OTE1X21h Y19yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCBtdDc5 MTVfZGV2ICpkZXY7DQorDQorCWRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXQ3OTE1 X2RldiwgcmVzZXRfd29yayk7DQorDQorCWlmICghKFJFQURfT05DRShkZXYtPnJlc2V0X3N0YXRl KSAmIE1UX01DVV9DTURfU1RPUF9ETUEpKQ0KKwkJcmV0dXJuOw0KKw0KKwlpZWVlODAyMTFfc3Rv cF9xdWV1ZXMobXQ3Nl9odyhkZXYpKTsNCisJaWYgKGRldi0+bXQ3Ni5waHkyKQ0KKwkJaWVlZTgw MjExX3N0b3BfcXVldWVzKGRldi0+bXQ3Ni5waHkyLT5odyk7DQorDQorCXNldF9iaXQoTVQ3Nl9S RVNFVCwgJmRldi0+bXBoeS5zdGF0ZSk7DQorCXNldF9iaXQoTVQ3Nl9NQ1VfUkVTRVQsICZkZXYt Pm1waHkuc3RhdGUpOw0KKwl3YWtlX3VwKCZkZXYtPm10NzYubWN1LndhaXQpOw0KKwljYW5jZWxf ZGVsYXllZF93b3JrX3N5bmMoJmRldi0+bXQ3Ni5tYWNfd29yayk7DQorDQorCS8qIGxvY2svdW5s b2NrIGFsbCBxdWV1ZXMgdG8gZW5zdXJlIHRoYXQgbm8gdHggaXMgcGVuZGluZyAqLw0KKwltdDc2 X3R4cV9zY2hlZHVsZV9hbGwoJmRldi0+bXBoeSk7DQorCWlmIChkZXYtPm10NzYucGh5MikNCisJ CW10NzZfdHhxX3NjaGVkdWxlX2FsbChkZXYtPm10NzYucGh5Mik7DQorDQorCXRhc2tsZXRfZGlz YWJsZSgmZGV2LT5tdDc2LnR4X3Rhc2tsZXQpOw0KKwluYXBpX2Rpc2FibGUoJmRldi0+bXQ3Ni5u YXBpWzBdKTsNCisJbmFwaV9kaXNhYmxlKCZkZXYtPm10NzYubmFwaVsxXSk7DQorCW5hcGlfZGlz YWJsZSgmZGV2LT5tdDc2Lm5hcGlbMl0pOw0KKwluYXBpX2Rpc2FibGUoJmRldi0+bXQ3Ni50eF9u YXBpKTsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJbXQ3Nl93cihk ZXYsIE1UX01DVV9JTlRfRVZFTlQsIE1UX01DVV9JTlRfRVZFTlRfRE1BX1NUT1BQRUQpOw0KKw0K KwlpZiAobXQ3OTE1X3dhaXRfcmVzZXRfc3RhdGUoZGV2LCBNVF9NQ1VfQ01EX1JFU0VUX0RPTkUp KSB7DQorCQltdDc5MTVfZG1hX3Jlc2V0KGRldik7DQorDQorCQltdDc2X3dyKGRldiwgTVRfTUNV X0lOVF9FVkVOVCwgTVRfTUNVX0lOVF9FVkVOVF9ETUFfSU5JVCk7DQorCQltdDc5MTVfd2FpdF9y ZXNldF9zdGF0ZShkZXYsIE1UX01DVV9DTURfUkVDT1ZFUllfRE9ORSk7DQorCX0NCisNCisJY2xl YXJfYml0KE1UNzZfTUNVX1JFU0VULCAmZGV2LT5tcGh5LnN0YXRlKTsNCisJY2xlYXJfYml0KE1U NzZfUkVTRVQsICZkZXYtPm1waHkuc3RhdGUpOw0KKw0KKwl0YXNrbGV0X2VuYWJsZSgmZGV2LT5t dDc2LnR4X3Rhc2tsZXQpOw0KKwluYXBpX2VuYWJsZSgmZGV2LT5tdDc2LnR4X25hcGkpOw0KKwlu YXBpX3NjaGVkdWxlKCZkZXYtPm10NzYudHhfbmFwaSk7DQorDQorCW5hcGlfZW5hYmxlKCZkZXYt Pm10NzYubmFwaVswXSk7DQorCW5hcGlfc2NoZWR1bGUoJmRldi0+bXQ3Ni5uYXBpWzBdKTsNCisN CisJbmFwaV9lbmFibGUoJmRldi0+bXQ3Ni5uYXBpWzFdKTsNCisJbmFwaV9zY2hlZHVsZSgmZGV2 LT5tdDc2Lm5hcGlbMV0pOw0KKw0KKwluYXBpX2VuYWJsZSgmZGV2LT5tdDc2Lm5hcGlbMl0pOw0K KwluYXBpX3NjaGVkdWxlKCZkZXYtPm10NzYubmFwaVsyXSk7DQorDQorCWllZWU4MDIxMV93YWtl X3F1ZXVlcyhtdDc2X2h3KGRldikpOw0KKwlpZiAoZGV2LT5tdDc2LnBoeTIpDQorCQlpZWVlODAy MTFfd2FrZV9xdWV1ZXMoZGV2LT5tdDc2LnBoeTItPmh3KTsNCisNCisJbXQ3Nl93cihkZXYsIE1U X01DVV9JTlRfRVZFTlQsIE1UX01DVV9JTlRfRVZFTlRfUkVTRVRfRE9ORSk7DQorCW10NzkxNV93 YWl0X3Jlc2V0X3N0YXRlKGRldiwgTVRfTUNVX0NNRF9OT1JNQUxfU1RBVEUpOw0KKw0KKwltdXRl eF91bmxvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCW10NzkxNV91cGRhdGVfYmVhY29ucyhk ZXYpOw0KKw0KKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKG10NzZfaHcoZGV2KSwgJmRl di0+bXQ3Ni5tYWNfd29yaywNCisJCQkJICAgICBNVDc5MTVfV0FUQ0hET0dfVElNRSk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21hY191cGRhdGVfbWliX3N0YXRzKHN0cnVjdCBtdDc5 MTVfcGh5ICpwaHkpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5LT5kZXY7DQor CXN0cnVjdCBtaWJfc3RhdHMgKm1pYiA9ICZwaHktPm1pYjsNCisJYm9vbCBleHRfcGh5ID0gcGh5 ICE9ICZkZXYtPnBoeTsNCisJaW50IGksIGFnZ3IwLCBhZ2dyMTsNCisNCisJbWVtc2V0KG1pYiwg MCwgc2l6ZW9mKCptaWIpKTsNCisNCisJbWliLT5mY3NfZXJyX2NudCA9IG10NzZfZ2V0X2ZpZWxk KGRldiwgTVRfTUlCX1NEUjMoZXh0X3BoeSksDQorCQkJCQkgIE1UX01JQl9TRFIzX0ZDU19FUlJf TUFTSyk7DQorDQorCWFnZ3IwID0gZXh0X3BoeSA/IEFSUkFZX1NJWkUoZGV2LT5tdDc2LmFnZ3Jf c3RhdHMpIC8gMiA6IDA7DQorCWZvciAoaSA9IDAsIGFnZ3IxID0gYWdncjAgKyA0OyBpIDwgNDsg aSsrKSB7DQorCQl1MzIgdmFsLCB2YWwyOw0KKw0KKwkJdmFsID0gbXQ3Nl9ycihkZXYsIE1UX01J Ql9NQl9TRFIxKGV4dF9waHksIGkpKTsNCisNCisJCXZhbDIgPSBGSUVMRF9HRVQoTVRfTUlCX0FD S19GQUlMX0NPVU5UX01BU0ssIHZhbCk7DQorCQlpZiAodmFsMiA+IG1pYi0+YWNrX2ZhaWxfY250 KQ0KKwkJCW1pYi0+YWNrX2ZhaWxfY250ID0gdmFsMjsNCisNCisJCXZhbDIgPSBGSUVMRF9HRVQo TVRfTUlCX0JBX01JU1NfQ09VTlRfTUFTSywgdmFsKTsNCisJCWlmICh2YWwyID4gbWliLT5iYV9t aXNzX2NudCkNCisJCQltaWItPmJhX21pc3NfY250ID0gdmFsMjsNCisNCisJCXZhbCA9IG10NzZf cnIoZGV2LCBNVF9NSUJfTUJfU0RSMChleHRfcGh5LCBpKSk7DQorCQl2YWwyID0gRklFTERfR0VU KE1UX01JQl9SVFNfUkVUUklFU19DT1VOVF9NQVNLLCB2YWwpOw0KKwkJaWYgKHZhbDIgPiBtaWIt PnJ0c19yZXRyaWVzX2NudCkgew0KKwkJCW1pYi0+cnRzX2NudCA9IEZJRUxEX0dFVChNVF9NSUJf UlRTX0NPVU5UX01BU0ssIHZhbCk7DQorCQkJbWliLT5ydHNfcmV0cmllc19jbnQgPSB2YWwyOw0K KwkJfQ0KKw0KKwkJdmFsID0gbXQ3Nl9ycihkZXYsIE1UX1RYX0FHR19DTlQoZXh0X3BoeSwgaSkp Ow0KKwkJdmFsMiA9IG10NzZfcnIoZGV2LCBNVF9UWF9BR0dfQ05UMihleHRfcGh5LCBpKSk7DQor DQorCQlkZXYtPm10NzYuYWdncl9zdGF0c1thZ2dyMCsrXSArPSB2YWwgJiAweGZmZmY7DQorCQlk ZXYtPm10NzYuYWdncl9zdGF0c1thZ2dyMCsrXSArPSB2YWwgPj4gMTY7DQorCQlkZXYtPm10NzYu YWdncl9zdGF0c1thZ2dyMSsrXSArPSB2YWwyICYgMHhmZmZmOw0KKwkJZGV2LT5tdDc2LmFnZ3Jf c3RhdHNbYWdncjErK10gKz0gdmFsMiA+PiAxNjsNCisJfQ0KK30NCisNCit2b2lkIG10NzkxNV9t YWNfc3RhX3N0YXRzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0 IGllZWU4MDIxMV9zdGEgKnN0YTsNCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsNCisJc3Ry dWN0IG10NzkxNV9zdGFfc3RhdHMgKnN0YXRzOw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YTsN CisJc3RydWN0IG10NzkxNV9kZXYgKmRldjsNCisNCisJbXN0YSA9IGNvbnRhaW5lcl9vZih3b3Jr LCBzdHJ1Y3QgbXQ3OTE1X3N0YSwgc3RhdHNfd29yayk7DQorCXN0YSA9IGNvbnRhaW5lcl9vZigo dm9pZCAqKW1zdGEsIHN0cnVjdCBpZWVlODAyMTFfc3RhLCBkcnZfcHJpdik7DQorCXZpZiA9IGNv bnRhaW5lcl9vZigodm9pZCAqKW1zdGEtPnZpZiwgc3RydWN0IGllZWU4MDIxMV92aWYsIGRydl9w cml2KTsNCisJZGV2ID0gbXN0YS0+dmlmLT5kZXY7DQorCXN0YXRzID0gJm1zdGEtPnN0YXRzOw0K Kw0KKwkvKiB1c2UgTVRfVFhfRlJFRV9SQVRFIHRvIHJlcG9ydCBUeCByYXRlIGZvciBmdXJ0aGVy IGRldmljZXMgKi8NCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhdHMtPmppZmZpZXMgKyBI WikpIHsNCisJCW10NzkxNV9tY3VfZ2V0X3JhdGVfaW5mbyhkZXYsIFJBVEVfQ1RSTF9SVV9JTkZP LA0KKwkJCQkJIG1zdGEtPndjaWQuaWR4KTsNCisNCisJCXN0YXRzLT5qaWZmaWVzID0gamlmZmll czsNCisJfQ0KKw0KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9SQ19TVVBQX1JB VEVTX0NIQU5HRUQgfA0KKwkJCSAgICAgICBJRUVFODAyMTFfUkNfTlNTX0NIQU5HRUQgfA0KKwkJ CSAgICAgICBJRUVFODAyMTFfUkNfQldfQ0hBTkdFRCwgJnN0YXRzLT5jaGFuZ2VkKSkNCisJCW10 NzkxNV9tY3VfYWRkX3JhdGVfY3RybChkZXYsIHZpZiwgc3RhKTsNCisNCisJaWYgKHRlc3RfYW5k X2NsZWFyX2JpdChJRUVFODAyMTFfUkNfU01QU19DSEFOR0VELCAmc3RhdHMtPmNoYW5nZWQpKQ0K KwkJbXQ3OTE1X21jdV9hZGRfc21wcyhkZXYsIHZpZiwgc3RhKTsNCisNCisJc3Bpbl9sb2NrX2Jo KCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KKwlpZiAobGlzdF9lbXB0eSgmbXN0YS0+cG9sbF9saXN0 KSkNCisJCWxpc3RfYWRkX3RhaWwoJm1zdGEtPnBvbGxfbGlzdCwgJmRldi0+c3RhX3BvbGxfbGlz dCk7DQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KK30NCisNCit2b2lk IG10NzkxNV9tYWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qg bXQ3OTE1X2RldiAqZGV2Ow0KKw0KKwlkZXYgPSAoc3RydWN0IG10NzkxNV9kZXYgKiljb250YWlu ZXJfb2Yod29yaywgc3RydWN0IG10NzZfZGV2LA0KKwkJCQkJCW1hY193b3JrLndvcmspOw0KKw0K KwltdXRleF9sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKwltdDc2X3VwZGF0ZV9zdXJ2ZXkoJmRl di0+bXQ3Nik7DQorCWlmICgrK2Rldi0+bWFjX3dvcmtfY291bnQgPT0gNSkgew0KKwkJc3RydWN0 IG10NzkxNV9waHkgKmV4dF9waHkgPSBtdDc5MTVfZXh0X3BoeShkZXYpOw0KKw0KKwkJbXQ3OTE1 X21hY191cGRhdGVfbWliX3N0YXRzKCZkZXYtPnBoeSk7DQorCQlpZiAoZXh0X3BoeSkNCisJCQlt dDc5MTVfbWFjX3VwZGF0ZV9taWJfc3RhdHMoZXh0X3BoeSk7DQorDQorCQlkZXYtPm1hY193b3Jr X2NvdW50ID0gMDsNCisJfQ0KKwltdXRleF91bmxvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQor CWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsobXQ3Nl9odyhkZXYpLCAmZGV2LT5tdDc2Lm1h Y193b3JrLA0KKwkJCQkgICAgIE1UNzkxNV9XQVRDSERPR19USU1FKTsNCit9DQorDQorc3RhdGlj IHZvaWQgbXQ3OTE1X2Rmc19zdG9wX3JhZGFyX2RldGVjdG9yKHN0cnVjdCBtdDc5MTVfcGh5ICpw aHkpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5LT5kZXY7DQorDQorCWlmIChw aHktPnJkZF9zdGF0ZSAmIEJJVCgwKSkNCisJCW10NzkxNV9tY3VfcmRkX2NtZChkZXYsIFJERF9T VE9QLCAwLCBNVF9SWF9TRUwwLCAwKTsNCisJaWYgKHBoeS0+cmRkX3N0YXRlICYgQklUKDEpKQ0K KwkJbXQ3OTE1X21jdV9yZGRfY21kKGRldiwgUkREX1NUT1AsIDEsIE1UX1JYX1NFTDAsIDApOw0K K30NCisNCitzdGF0aWMgaW50IG10NzkxNV9kZnNfc3RhcnRfcmRkKHN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYsIGludCBjaGFpbikNCit7DQorCWludCBlcnI7DQorDQorCWVyciA9IG10NzkxNV9tY3Vf cmRkX2NtZChkZXYsIFJERF9TVEFSVCwgY2hhaW4sIE1UX1JYX1NFTDAsIDApOw0KKwlpZiAoZXJy IDwgMCkNCisJCXJldHVybiBlcnI7DQorDQorCXJldHVybiBtdDc5MTVfbWN1X3JkZF9jbWQoZGV2 LCBSRERfREVUX01PREUsIGNoYWluLCBNVF9SWF9TRUwwLCAxKTsNCit9DQorDQorc3RhdGljIGlu dCBtdDc5MTVfZGZzX3N0YXJ0X3JhZGFyX2RldGVjdG9yKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkp DQorew0KKwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYgPSAmcGh5LT5tdDc2LT5j aGFuZGVmOw0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5LT5kZXY7DQorCWJvb2wgZXh0 X3BoeSA9IHBoeSAhPSAmZGV2LT5waHk7DQorCWludCBlcnI7DQorDQorCS8qIHN0YXJ0IENBQyAq Lw0KKwllcnIgPSBtdDc5MTVfbWN1X3JkZF9jbWQoZGV2LCBSRERfQ0FDX1NUQVJULCBleHRfcGh5 LCBNVF9SWF9TRUwwLCAwKTsNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0KKwll cnIgPSBtdDc5MTVfZGZzX3N0YXJ0X3JkZChkZXYsIGV4dF9waHkpOw0KKwlpZiAoZXJyIDwgMCkN CisJCXJldHVybiBlcnI7DQorDQorCXBoeS0+cmRkX3N0YXRlIHw9IEJJVChleHRfcGh5KTsNCisN CisJaWYgKGNoYW5kZWYtPndpZHRoID09IE5MODAyMTFfQ0hBTl9XSURUSF8xNjAgfHwNCisJICAg IGNoYW5kZWYtPndpZHRoID09IE5MODAyMTFfQ0hBTl9XSURUSF84MFA4MCkgew0KKwkJZXJyID0g bXQ3OTE1X2Rmc19zdGFydF9yZGQoZGV2LCAxKTsNCisJCWlmIChlcnIgPCAwKQ0KKwkJCXJldHVy biBlcnI7DQorDQorCQlwaHktPnJkZF9zdGF0ZSB8PSBCSVQoMSk7DQorCX0NCisNCisJcmV0dXJu IDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfZGZzX2luaXRfcmFkYXJfc3BlY3Moc3Ry dWN0IG10NzkxNV9waHkgKnBoeSkNCit7DQorCWNvbnN0IHN0cnVjdCBtdDc5MTVfZGZzX3JhZGFy X3NwZWMgKnJhZGFyX3NwZWNzOw0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5LT5kZXY7 DQorCWludCBlcnIsIGk7DQorDQorCXN3aXRjaCAoZGV2LT5tdDc2LnJlZ2lvbikgew0KKwljYXNl IE5MODAyMTFfREZTX0ZDQzoNCisJCXJhZGFyX3NwZWNzID0gJmZjY19yYWRhcl9zcGVjczsNCisJ CWVyciA9IG10NzkxNV9tY3Vfc2V0X2ZjYzVfbHBuKGRldiwgOCk7DQorCQlpZiAoZXJyIDwgMCkN CisJCQlyZXR1cm4gZXJyOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9ERlNfRVRTSToNCisJ CXJhZGFyX3NwZWNzID0gJmV0c2lfcmFkYXJfc3BlY3M7DQorCQlicmVhazsNCisJY2FzZSBOTDgw MjExX0RGU19KUDoNCisJCXJhZGFyX3NwZWNzID0gJmpwX3JhZGFyX3NwZWNzOw0KKwkJYnJlYWs7 DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShyYWRhcl9zcGVjcy0+cmFkYXJfcGF0dGVybik7IGkrKykgew0KKwkJZXJy ID0gbXQ3OTE1X21jdV9zZXRfcmFkYXJfdGgoZGV2LCBpLA0KKwkJCQkJICAgICAgJnJhZGFyX3Nw ZWNzLT5yYWRhcl9wYXR0ZXJuW2ldKTsNCisJCWlmIChlcnIgPCAwKQ0KKwkJCXJldHVybiBlcnI7 DQorCX0NCisNCisJcmV0dXJuIG10NzkxNV9tY3Vfc2V0X3B1bHNlX3RoKGRldiwgJnJhZGFyX3Nw ZWNzLT5wdWxzZV90aCk7DQorfQ0KKw0KK2ludCBtdDc5MTVfZGZzX2luaXRfcmFkYXJfZGV0ZWN0 b3Ioc3RydWN0IG10NzkxNV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBjZmc4MDIxMV9jaGFuX2Rl ZiAqY2hhbmRlZiA9ICZwaHktPm10NzYtPmNoYW5kZWY7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYgPSBwaHktPmRldjsNCisJYm9vbCBleHRfcGh5ID0gcGh5ICE9ICZkZXYtPnBoeTsNCisJaW50 IGVycjsNCisNCisJaWYgKGRldi0+bXQ3Ni5yZWdpb24gPT0gTkw4MDIxMV9ERlNfVU5TRVQpIHsN CisJCXBoeS0+ZGZzX3N0YXRlID0gLTE7DQorCQlpZiAocGh5LT5yZGRfc3RhdGUpDQorCQkJZ290 byBzdG9wOw0KKw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJaWYgKHRlc3RfYml0KE1UNzZfU0NB Tk5JTkcsICZwaHktPm10NzYtPnN0YXRlKSkNCisJCXJldHVybiAwOw0KKw0KKwlpZiAocGh5LT5k ZnNfc3RhdGUgPT0gY2hhbmRlZi0+Y2hhbi0+ZGZzX3N0YXRlKQ0KKwkJcmV0dXJuIDA7DQorDQor CWVyciA9IG10NzkxNV9kZnNfaW5pdF9yYWRhcl9zcGVjcyhwaHkpOw0KKwlpZiAoZXJyIDwgMCkg ew0KKwkJcGh5LT5kZnNfc3RhdGUgPSAtMTsNCisJCWdvdG8gc3RvcDsNCisJfQ0KKw0KKwlwaHkt PmRmc19zdGF0ZSA9IGNoYW5kZWYtPmNoYW4tPmRmc19zdGF0ZTsNCisNCisJaWYgKGNoYW5kZWYt PmNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUkFEQVIpIHsNCisJCWlmIChjaGFuZGVmLT5j aGFuLT5kZnNfc3RhdGUgIT0gTkw4MDIxMV9ERlNfQVZBSUxBQkxFKQ0KKwkJCXJldHVybiBtdDc5 MTVfZGZzX3N0YXJ0X3JhZGFyX2RldGVjdG9yKHBoeSk7DQorDQorCQlyZXR1cm4gbXQ3OTE1X21j dV9yZGRfY21kKGRldiwgUkREX0NBQ19FTkQsIGV4dF9waHksDQorCQkJCQkgIE1UX1JYX1NFTDAs IDApOw0KKwl9DQorDQorc3RvcDoNCisJZXJyID0gbXQ3OTE1X21jdV9yZGRfY21kKGRldiwgUkRE X05PUk1BTF9TVEFSVCwgZXh0X3BoeSwNCisJCQkJIE1UX1JYX1NFTDAsIDApOw0KKwlpZiAoZXJy IDwgMCkNCisJCXJldHVybiBlcnI7DQorDQorCW10NzkxNV9kZnNfc3RvcF9yYWRhcl9kZXRlY3Rv cihwaHkpOw0KKwlyZXR1cm4gMDsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRp YXRlay9tdDc2L210NzkxNS9tYWMuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw MDAwMDAwMC4uN2RhNzU1MWY5OGU0DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93 aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tYWMuaA0KQEAgLTAsMCArMSwzMjggQEANCisv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDICovDQorLyogQ29weXJpZ2h0IChDKSAyMDIw IE1lZGlhVGVrIEluYy4gKi8NCisNCisjaWZuZGVmIF9fTVQ3OTE1X01BQ19IDQorI2RlZmluZSBf X01UNzkxNV9NQUNfSA0KKw0KKyNkZWZpbmUgTVRfQ1RfUEFSU0VfTEVOCQkJNzINCisjZGVmaW5l IE1UX0NUX0RNQV9CVUZfTlVNCQkyDQorDQorI2RlZmluZSBNVF9SWEQwX0xFTkdUSAkJCUdFTk1B U0soMTUsIDApDQorI2RlZmluZSBNVF9SWEQwX1BLVF9UWVBFCQlHRU5NQVNLKDMxLCAyNykNCisN CisjZGVmaW5lIE1UX1JYRDBfTk9STUFMX0VUSF9UWVBFX09GUwlHRU5NQVNLKDIyLCAxNikNCisj ZGVmaW5lIE1UX1JYRDBfTk9STUFMX0lQX1NVTQkJQklUKDIzKQ0KKyNkZWZpbmUgTVRfUlhEMF9O T1JNQUxfVURQX1RDUF9TVU0JQklUKDI0KQ0KKw0KK2VudW0gcnhfcGt0X3R5cGUgew0KKwlQS1Rf VFlQRV9UWFMsDQorCVBLVF9UWVBFX1RYUlhWLA0KKwlQS1RfVFlQRV9OT1JNQUwsDQorCVBLVF9U WVBFX1JYX0RVUF9SRkIsDQorCVBLVF9UWVBFX1JYX1RNUiwNCisJUEtUX1RZUEVfUkVUUklFVkUs DQorCVBLVF9UWVBFX1RYUlhfTk9USUZZLA0KKwlQS1RfVFlQRV9SWF9FVkVOVCwNCit9Ow0KKw0K Ky8qIFJYRCBEVzEgKi8NCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX1dMQU5fSURYCQlHRU5NQVNL KDksIDApDQorI2RlZmluZSBNVF9SWEQxX05PUk1BTF9HUk9VUF8xCQlCSVQoMTEpDQorI2RlZmlu ZSBNVF9SWEQxX05PUk1BTF9HUk9VUF8yCQlCSVQoMTIpDQorI2RlZmluZSBNVF9SWEQxX05PUk1B TF9HUk9VUF8zCQlCSVQoMTMpDQorI2RlZmluZSBNVF9SWEQxX05PUk1BTF9HUk9VUF80CQlCSVQo MTQpDQorI2RlZmluZSBNVF9SWEQxX05PUk1BTF9HUk9VUF81CQlCSVQoMTUpDQorI2RlZmluZSBN VF9SWEQxX05PUk1BTF9TRUNfTU9ERQkJR0VOTUFTSygyMCwgMTYpDQorI2RlZmluZSBNVF9SWEQx X05PUk1BTF9LRVlfSUQJCUdFTk1BU0soMjIsIDIxKQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxf Q00JCUJJVCgyMykNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX0NMTQkJQklUKDI0KQ0KKyNkZWZp bmUgTVRfUlhEMV9OT1JNQUxfSUNWX0VSUgkJQklUKDI1KQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JN QUxfVEtJUF9NSUNfRVJSCUJJVCgyNikNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX0ZDU19FUlIJ CUJJVCgyNykNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX0JBTkRfSURYCQlCSVQoMjgpDQorI2Rl ZmluZSBNVF9SWEQxX05PUk1BTF9TUFBfRU4JCUJJVCgyOSkNCisjZGVmaW5lIE1UX1JYRDFfTk9S TUFMX0FERF9PTQkJQklUKDMwKQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxfU0VDX0RPTkUJCUJJ VCgzMSkNCisNCisvKiBSWEQgRFcyICovDQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9CU1NJRAkJ R0VOTUFTSyg1LCAwKQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxfQ09fQU5UCQlCSVQoNikNCisj ZGVmaW5lIE1UX1JYRDJfTk9STUFMX0JGX0NRSQkJQklUKDcpDQorI2RlZmluZSBNVF9SWEQyX05P Uk1BTF9NQUNfSERSX0xFTglHRU5NQVNLKDEyLCA4KQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxf SERSX1RSQU5TCUJJVCgxMykNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX0hEUl9PRkZTRVQJR0VO TUFTSygxNSwgMTQpDQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9USUQJCUdFTk1BU0soMTksIDE2 KQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxfTVVfQkFSCQlCSVQoMjEpDQorI2RlZmluZSBNVF9S WEQyX05PUk1BTF9TV19CSVQJCUJJVCgyMikNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX0FNU0RV X0VSUglCSVQoMjMpDQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9NQVhfTEVOX0VSUk9SCUJJVCgy NCkNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX0hEUl9UUkFOU19FUlJPUglCSVQoMjUpDQorI2Rl ZmluZSBNVF9SWEQyX05PUk1BTF9JTlRfRlJBTUUJQklUKDI2KQ0KKyNkZWZpbmUgTVRfUlhEMl9O T1JNQUxfRlJBRwkJQklUKDI3KQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxfTlVMTF9GUkFNRQlC SVQoMjgpDQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9OREFUQQkJQklUKDI5KQ0KKyNkZWZpbmUg TVRfUlhEMl9OT1JNQUxfTk9OX0FNUERVCUJJVCgzMCkNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFM X0JGX1JFUE9SVAlCSVQoMzEpDQorDQorLyogUlhEIERXMyAqLw0KKyNkZWZpbmUgTVRfUlhEM19O T1JNQUxfUlhWX1NFUQkJR0VOTUFTSyg3LCAwKQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfQ0hf RlJFUQkJR0VOTUFTSygxNSwgOCkNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX0FERFJfVFlQRQlH RU5NQVNLKDE3LCAxNikNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX1UyTQkJQklUKDApDQorI2Rl ZmluZSBNVF9SWEQzX05PUk1BTF9IVENfVkxECQlCSVQoMCkNCisjZGVmaW5lIE1UX1JYRDNfTk9S TUFMX1RTRl9DT01QQVJFX0xPU1MJQklUKDE5KQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfQkVB Q09OX01DCUJJVCgyMCkNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX0JFQUNPTl9VQwlCSVQoMjEp DQorI2RlZmluZSBNVF9SWEQzX05PUk1BTF9BTVNEVQkJQklUKDIyKQ0KKyNkZWZpbmUgTVRfUlhE M19OT1JNQUxfTUVTSAkJQklUKDIzKQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfTUhDUAkJQklU KDI0KQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfTk9fSU5GT19XQglCSVQoMjUpDQorI2RlZmlu ZSBNVF9SWEQzX05PUk1BTF9ESVNBQkxFX1JYX0hEUl9UUkFOUwlCSVQoMjYpDQorI2RlZmluZSBN VF9SWEQzX05PUk1BTF9QT1dFUl9TQVZFX1NUQVQJQklUKDI3KQ0KKyNkZWZpbmUgTVRfUlhEM19O T1JNQUxfTU9SRQkJQklUKDI4KQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfVU5XQU5UCQlCSVQo MjkpDQorI2RlZmluZSBNVF9SWEQzX05PUk1BTF9SWF9EUk9QCQlCSVQoMzApDQorI2RlZmluZSBN VF9SWEQzX05PUk1BTF9WTEFOMkVUSAkJQklUKDMxKQ0KKw0KKy8qIFJYRCBEVzQgKi8NCisjZGVm aW5lIE1UX1JYRDRfTk9STUFMX1BBWUxPQURfRk9STUFUCUdFTk1BU0soMSwgMCkNCisjZGVmaW5l IE1UX1JYRDRfTk9STUFMX1BBVFRFUk5fRFJPUAlCSVQoOSkNCisjZGVmaW5lIE1UX1JYRDRfTk9S TUFMX0NMUwkJQklUKDEwKQ0KKyNkZWZpbmUgTVRfUlhENF9OT1JNQUxfT0ZMRAkJR0VOTUFTSygx MiwgMTEpDQorI2RlZmluZSBNVF9SWEQ0X05PUk1BTF9NQUdJQ19QS1QJQklUKDEzKQ0KKyNkZWZp bmUgTVRfUlhENF9OT1JNQUxfV09MCQlHRU5NQVNLKDE4LCAxNCkNCisjZGVmaW5lIE1UX1JYRDRf Tk9STUFMX0NMU19CSVRNQVAJR0VOTUFTSygyOCwgMTkpDQorI2RlZmluZSBNVF9SWEQzX05PUk1B TF9QRl9NT0RFCQlCSVQoMjkpDQorI2RlZmluZSBNVF9SWEQzX05PUk1BTF9QRl9TVFMJCUdFTk1B U0soMzEsIDMwKQ0KKw0KKy8qIFAtUlhWICovDQorI2RlZmluZSBNVF9QUlhWX1RYX1JBVEUJCQlH RU5NQVNLKDYsIDApDQorI2RlZmluZSBNVF9QUlhWX05TVFMJCQlHRU5NQVNLKDksIDcpDQorI2Rl ZmluZSBNVF9QUlhWX0hUX0FEX0NPREUJCUJJVCgxMSkNCisjZGVmaW5lIE1UX1BSWFZfUkNQSTMJ CQlHRU5NQVNLKDMxLCAyNCkNCisjZGVmaW5lIE1UX1BSWFZfUkNQSTIJCQlHRU5NQVNLKDIzLCAx NikNCisjZGVmaW5lIE1UX1BSWFZfUkNQSTEJCQlHRU5NQVNLKDE1LCA4KQ0KKyNkZWZpbmUgTVRf UFJYVl9SQ1BJMAkJCUdFTk1BU0soNywgMCkNCisNCisvKiBDLVJYViAqLw0KKyNkZWZpbmUgTVRf Q1JYVl9IVF9TVEJDCQkJR0VOTUFTSygxLCAwKQ0KKyNkZWZpbmUgTVRfQ1JYVl9UWF9NT0RFCQkJ R0VOTUFTSyg3LCA0KQ0KKyNkZWZpbmUgTVRfQ1JYVl9GUkFNRV9NT0RFCQlHRU5NQVNLKDEwLCA4 KQ0KKyNkZWZpbmUgTVRfQ1JYVl9IVF9TSE9SVF9HSQkJR0VOTUFTSygxNCwgMTMpDQorDQorc3Ry dWN0IG10NzkxNV9yeHYgew0KKwl1MzIgcGh5Ow0KKw0KKwkvKiBQLVJYVjogYml0IDB+MSwgQy1S WFY6IGJpdCAyfjE5ICovDQorCV9fbGUzMiB2WzIwXTsNCit9Ow0KKw0KK2VudW0gdHhfaGVhZGVy X2Zvcm1hdCB7DQorCU1UX0hEUl9GT1JNQVRfODAyXzMsDQorCU1UX0hEUl9GT1JNQVRfQ01ELA0K KwlNVF9IRFJfRk9STUFUXzgwMl8xMSwNCisJTVRfSERSX0ZPUk1BVF84MDJfMTFfRVhULA0KK307 DQorDQorZW51bSB0eF9wa3RfdHlwZSB7DQorCU1UX1RYX1RZUEVfQ1QsDQorCU1UX1RYX1RZUEVf U0YsDQorCU1UX1RYX1RZUEVfQ01ELA0KKwlNVF9UWF9UWVBFX0ZXLA0KK307DQorDQorZW51bSB0 eF9wa3RfcXVldWVfaWR4IHsNCisJTVRfTE1BQ19BQzAwLA0KKwlNVF9MTUFDX0FDMDEsDQorCU1U X0xNQUNfQUMwMiwNCisJTVRfTE1BQ19BQzAzLA0KKwlNVF9MTUFDX0FMVFgwID0gMHgxMCwNCisJ TVRfTE1BQ19CTUMwID0gMHgxMCwNCisJTVRfTE1BQ19CQ04wID0gMHgxMiwNCit9Ow0KKw0KK2Vu dW0gdHhfcG9ydF9pZHggew0KKwlNVF9UWF9QT1JUX0lEWF9MTUFDLA0KKwlNVF9UWF9QT1JUX0lE WF9NQ1UNCit9Ow0KKw0KK2VudW0gdHhfbWN1X3BvcnRfcV9pZHggew0KKwlNVF9UWF9NQ1VfUE9S VF9SWF9RMCA9IDB4MjAsDQorCU1UX1RYX01DVV9QT1JUX1JYX1ExLA0KKwlNVF9UWF9NQ1VfUE9S VF9SWF9RMiwNCisJTVRfVFhfTUNVX1BPUlRfUlhfUTMsDQorCU1UX1RYX01DVV9QT1JUX1JYX0ZX REwgPSAweDNlDQorfTsNCisNCisjZGVmaW5lIE1UX0NUX0lORk9fQVBQTFlfVFhECQlCSVQoMCkN CisjZGVmaW5lIE1UX0NUX0lORk9fQ09QWV9IT1NUX1RYRF9BTEwJQklUKDEpDQorI2RlZmluZSBN VF9DVF9JTkZPX01HTVRfRlJBTUUJCUJJVCgyKQ0KKyNkZWZpbmUgTVRfQ1RfSU5GT19OT05FX0NJ UEhFUl9GUkFNRQlCSVQoMykNCisjZGVmaW5lIE1UX0NUX0lORk9fSFNSMl9UWAkJQklUKDQpDQor DQorI2RlZmluZSBNVF9UWERfU0laRQkJCSg4ICogNCkNCisNCisjZGVmaW5lIE1UX1RYRDBfUV9J RFgJCQlHRU5NQVNLKDMxLCAyNSkNCisjZGVmaW5lIE1UX1RYRDBfUEtUX0ZNVAkJCUdFTk1BU0so MjQsIDIzKQ0KKyNkZWZpbmUgTVRfVFhEMF9FVEhfVFlQRV9PRkZTRVQJCUdFTk1BU0soMjIsIDE2 KQ0KKyNkZWZpbmUgTVRfVFhEMF9UWF9CWVRFUwkJR0VOTUFTSygxNSwgMCkNCisNCisjZGVmaW5l IE1UX1RYRDFfTE9OR19GT1JNQVQJCUJJVCgzMSkNCisjZGVmaW5lIE1UX1RYRDFfVEdJRAkJCUJJ VCgzMCkNCisjZGVmaW5lIE1UX1RYRDFfT1dOX01BQwkJCUdFTk1BU0soMjksIDI0KQ0KKyNkZWZp bmUgTVRfVFhEMV9BTVNEVQkJCUJJVCgyMykNCisjZGVmaW5lIE1UX1RYRDFfVElECQkJR0VOTUFT SygyMiwgMjApDQorI2RlZmluZSBNVF9UWEQxX0hEUl9QQUQJCQlHRU5NQVNLKDE5LCAxOCkNCisj ZGVmaW5lIE1UX1RYRDFfSERSX0ZPUk1BVAkJR0VOTUFTSygxNywgMTYpDQorI2RlZmluZSBNVF9U WEQxX0hEUl9JTkZPCQlHRU5NQVNLKDE1LCAxMSkNCisjZGVmaW5lIE1UX1RYRDFfVlRBCQkJQklU KDEwKQ0KKyNkZWZpbmUgTVRfVFhEMV9XTEFOX0lEWAkJR0VOTUFTSyg5LCAwKQ0KKw0KKyNkZWZp bmUgTVRfVFhEMl9GSVhfUkFURQkJQklUKDMxKQ0KKyNkZWZpbmUgTVRfVFhEMl9GSVhFRF9SQVRF CQlCSVQoMzApDQorI2RlZmluZSBNVF9UWEQyX1BPV0VSX09GRlNFVAkJR0VOTUFTSygyOSwgMjQp DQorI2RlZmluZSBNVF9UWEQyX01BWF9UWF9USU1FCQlHRU5NQVNLKDIzLCAxNikNCisjZGVmaW5l IE1UX1RYRDJfRlJBRwkJCUdFTk1BU0soMTUsIDE0KQ0KKyNkZWZpbmUgTVRfVFhEMl9IVENfVkxE CQkJQklUKDEzKQ0KKyNkZWZpbmUgTVRfVFhEMl9EVVJBVElPTgkJQklUKDEyKQ0KKyNkZWZpbmUg TVRfVFhEMl9CSVAJCQlCSVQoMTEpDQorI2RlZmluZSBNVF9UWEQyX01VTFRJQ0FTVAkJQklUKDEw KQ0KKyNkZWZpbmUgTVRfVFhEMl9SVFMJCQlCSVQoOSkNCisjZGVmaW5lIE1UX1RYRDJfU09VTkRJ TkcJCUJJVCg4KQ0KKyNkZWZpbmUgTVRfVFhEMl9ORFBBCQkJQklUKDcpDQorI2RlZmluZSBNVF9U WEQyX05EUAkJCUJJVCg2KQ0KKyNkZWZpbmUgTVRfVFhEMl9GUkFNRV9UWVBFCQlHRU5NQVNLKDUs IDQpDQorI2RlZmluZSBNVF9UWEQyX1NVQl9UWVBFCQlHRU5NQVNLKDMsIDApDQorDQorI2RlZmlu ZSBNVF9UWEQzX1NOX1ZBTElECQlCSVQoMzEpDQorI2RlZmluZSBNVF9UWEQzX1BOX1ZBTElECQlC SVQoMzApDQorI2RlZmluZSBNVF9UWEQzX1NXX1BPV0VSX01HTVQJCUJJVCgyOSkNCisjZGVmaW5l IE1UX1RYRDNfQkFfRElTQUJMRQkJQklUKDI4KQ0KKyNkZWZpbmUgTVRfVFhEM19TRVEJCQlHRU5N QVNLKDI3LCAxNikNCisjZGVmaW5lIE1UX1RYRDNfUkVNX1RYX0NPVU5UCQlHRU5NQVNLKDE1LCAx MSkNCisjZGVmaW5lIE1UX1RYRDNfVFhfQ09VTlQJCUdFTk1BU0soMTAsIDYpDQorI2RlZmluZSBN VF9UWEQzX1RJTUlOR19NRUFTVVJFCQlCSVQoNSkNCisjZGVmaW5lIE1UX1RYRDNfREFTCQkJQklU KDQpDQorI2RlZmluZSBNVF9UWEQzX0VFT1NQCQkJQklUKDMpDQorI2RlZmluZSBNVF9UWEQzX0VN UkQJCQlCSVQoMikNCisjZGVmaW5lIE1UX1RYRDNfUFJPVEVDVF9GUkFNRQkJQklUKDEpDQorI2Rl ZmluZSBNVF9UWEQzX05PX0FDSwkJCUJJVCgwKQ0KKw0KKyNkZWZpbmUgTVRfVFhENF9QTl9MT1cJ CQlHRU5NQVNLKDMxLCAwKQ0KKw0KKyNkZWZpbmUgTVRfVFhENV9QTl9ISUdICQkJR0VOTUFTSygz MSwgMTYpDQorI2RlZmluZSBNVF9UWEQ1X01ECQkJQklUKDE1KQ0KKyNkZWZpbmUgTVRfVFhENV9B RERfQkEJCQlCSVQoMTQpDQorI2RlZmluZSBNVF9UWEQ1X1RYX1NUQVRVU19IT1NUCQlCSVQoMTAp DQorI2RlZmluZSBNVF9UWEQ1X1RYX1NUQVRVU19NQ1UJCUJJVCg5KQ0KKyNkZWZpbmUgTVRfVFhE NV9UWF9TVEFUVVNfRk1UCQlCSVQoOCkNCisjZGVmaW5lIE1UX1RYRDVfUElECQkJR0VOTUFTSyg3 LCAwKQ0KKw0KKyNkZWZpbmUgTVRfVFhENl9UWF9JQkYJCQlCSVQoMzEpDQorI2RlZmluZSBNVF9U WEQ2X1RYX0VCRgkJCUJJVCgzMCkNCisjZGVmaW5lIE1UX1RYRDZfVFhfUkFURQkJCUdFTk1BU0so MjksIDE2KQ0KKyNkZWZpbmUgTVRfVFhENl9TR0kJCQlHRU5NQVNLKDE1LCAxNCkNCisjZGVmaW5l IE1UX1RYRDZfSEVMVEYJCQlHRU5NQVNLKDEzLCAxMikNCisjZGVmaW5lIE1UX1RYRDZfTERQQwkJ CUJJVCgxMSkNCisjZGVmaW5lIE1UX1RYRDZfU1BFX0lEX0lEWAkJQklUKDEwKQ0KKyNkZWZpbmUg TVRfVFhENl9BTlRfSUQJCQlHRU5NQVNLKDcsIDQpDQorI2RlZmluZSBNVF9UWEQ2X0RZTl9CVwkJ CUJJVCgzKQ0KKyNkZWZpbmUgTVRfVFhENl9GSVhFRF9CVwkJQklUKDIpDQorI2RlZmluZSBNVF9U WEQ2X0JXCQkJR0VOTUFTSygyLCAwKQ0KKw0KKyNkZWZpbmUgTVRfVFhEN19UWERfTEVOCQkJR0VO TUFTSygzMSwgMzApDQorI2RlZmluZSBNVF9UWEQ3X1VEUF9UQ1BfU1VNCQlCSVQoMjkpDQorI2Rl ZmluZSBNVF9UWEQ3X0lQX1NVTQkJCUJJVCgyOCkNCisNCisjZGVmaW5lIE1UX1RYRDdfVFlQRQkJ CUdFTk1BU0soMjEsIDIwKQ0KKyNkZWZpbmUgTVRfVFhEN19TVUJfVFlQRQkJR0VOTUFTSygxOSwg MTYpDQorDQorI2RlZmluZSBNVF9UWEQ3X1BTRV9GSUQJCQlHRU5NQVNLKDI3LCAxNikNCisjZGVm aW5lIE1UX1RYRDdfU1BFX0lEWAkJCUdFTk1BU0soMTUsIDExKQ0KKyNkZWZpbmUgTVRfVFhEN19I V19BTVNEVQkJQklUKDEwKQ0KKyNkZWZpbmUgTVRfVFhEN19UWF9USU1FCQkJR0VOTUFTSyg5LCAw KQ0KKw0KKyNkZWZpbmUgTVRfVFhfUkFURV9TVEJDCQkJQklUKDEzKQ0KKyNkZWZpbmUgTVRfVFhf UkFURV9OU1MJCQlHRU5NQVNLKDEyLCAxMCkNCisjZGVmaW5lIE1UX1RYX1JBVEVfTU9ERQkJCUdF Tk1BU0soOSwgNikNCisjZGVmaW5lIE1UX1RYX1JBVEVfSURYCQkJR0VOTUFTSyg1LCAwKQ0KKw0K KyNkZWZpbmUgTVRfVFhQX01BWF9CVUZfTlVNCQk2DQorDQorc3RydWN0IG10NzkxNV90eHAgew0K KwlfX2xlMTYgZmxhZ3M7DQorCV9fbGUxNiB0b2tlbjsNCisJdTggYnNzX2lkeDsNCisJdTggcmVw dF93ZHNfd2NpZDsNCisJdTggcnN2Ow0KKwl1OCBuYnVmOw0KKwlfX2xlMzIgYnVmW01UX1RYUF9N QVhfQlVGX05VTV07DQorCV9fbGUxNiBsZW5bTVRfVFhQX01BWF9CVUZfTlVNXTsNCit9IF9fcGFj a2VkIF9fYWxpZ25lZCg0KTsNCisNCitzdHJ1Y3QgbXQ3OTE1X3R4X2ZyZWUgew0KKwlfX2xlMTYg cnhfYnl0ZV9jbnQ7DQorCV9fbGUxNiBjdHJsOw0KKwl1OCB0eGRfY250Ow0KKwl1OCByc3ZbM107 DQorCV9fbGUzMiBpbmZvW107DQorfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7DQorDQorI2RlZmlu ZSBNVF9UWF9GUkVFX01TRFVfQ05UCQlHRU5NQVNLKDksIDApDQorI2RlZmluZSBNVF9UWF9GUkVF X1dMQU5fSUQJCUdFTk1BU0soMjMsIDE0KQ0KKyNkZWZpbmUgTVRfVFhfRlJFRV9MQVRFTkNZCQlH RU5NQVNLKDEyLCAwKQ0KKy8qIDA6IHN1Y2Nlc3MsIG90aGVyczogZHJvcHBlZCAqLw0KKyNkZWZp bmUgTVRfVFhfRlJFRV9TVEFUVVMJCUdFTk1BU0soMTQsIDEzKQ0KKyNkZWZpbmUgTVRfVFhfRlJF RV9NU0RVX0lECQlHRU5NQVNLKDMwLCAxNikNCisjZGVmaW5lIE1UX1RYX0ZSRUVfUEFJUgkJCUJJ VCgzMSkNCisvKiB3aWxsIHN1cHBvcnQgdGhpcyBmaWVsZCBpbiBmdXJ0aGVyIHJldmlzaW9uICov DQorI2RlZmluZSBNVF9UWF9GUkVFX1JBVEUJCQlHRU5NQVNLKDEzLCAwKQ0KKw0KK3N0cnVjdCBt dDc5MTVfZGZzX3B1bHNlIHsNCisJdTMyIG1heF93aWR0aDsJCS8qIHVzICovDQorCWludCBtYXhf cHdyOwkJLyogZGJtICovDQorCWludCBtaW5fcHdyOwkJLyogZGJtICovDQorCXUzMiBtaW5fc3Rn cl9wcmk7CS8qIHVzICovDQorCXUzMiBtYXhfc3Rncl9wcmk7CS8qIHVzICovDQorCXUzMiBtaW5f Y3JfcHJpOwkJLyogdXMgKi8NCisJdTMyIG1heF9jcl9wcmk7CQkvKiB1cyAqLw0KK307DQorDQor c3RydWN0IG10NzkxNV9kZnNfcGF0dGVybiB7DQorCXU4IGVuYjsNCisJdTggc3RncjsNCisJdTgg bWluX2NycG47DQorCXU4IG1heF9jcnBuOw0KKwl1OCBtaW5fY3JwcjsNCisJdTggbWluX3B3Ow0K Kwl1MzIgbWluX3ByaTsNCisJdTMyIG1heF9wcmk7DQorCXU4IG1heF9wdzsNCisJdTggbWluX2Ny Ym47DQorCXU4IG1heF9jcmJuOw0KKwl1OCBtaW5fc3RncG47DQorCXU4IG1heF9zdGdwbjsNCisJ dTggbWluX3N0Z3ByOw0KKwl1OCByc3ZbMl07DQorCXUzMiBtaW5fc3RncHJfZGlmZjsNCit9IF9f cGFja2VkOw0KKw0KK3N0cnVjdCBtdDc5MTVfZGZzX3JhZGFyX3NwZWMgew0KKwlzdHJ1Y3QgbXQ3 OTE1X2Rmc19wdWxzZSBwdWxzZV90aDsNCisJc3RydWN0IG10NzkxNV9kZnNfcGF0dGVybiByYWRh cl9wYXR0ZXJuWzE2XTsNCit9Ow0KKw0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10NzkxNV90eHAg Kg0KK210NzkxNV90eHdpX3RvX3R4cChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IG10NzZf dHh3aV9jYWNoZSAqdCkNCit7DQorCXU4ICp0eHdpOw0KKw0KKwlpZiAoIXQpDQorCQlyZXR1cm4g TlVMTDsNCisNCisJdHh3aSA9IG10NzZfZ2V0X3R4d2lfcHRyKGRldiwgdCk7DQorDQorCXJldHVy biAoc3RydWN0IG10NzkxNV90eHAgKikodHh3aSArIE1UX1RYRF9TSVpFKTsNCit9DQorDQorI2Vu ZGlmDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5 MTUvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFp bi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5hZTVlZDQxZDMz N2INCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210 NzYvbXQ3OTE1L21haW4uYw0KQEAgLTAsMCArMSw3NDEgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogSVNDDQorLyogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVrIEluYy4gKi8NCisN CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4NCisjaW5jbHVkZSAibXQ3OTE1LmgiDQorI2luY2x1ZGUgIm1jdS5oIg0KKw0KK3N0 YXRpYyBib29sIG10NzkxNV9kZXZfcnVubmluZyhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sN CisJc3RydWN0IG10NzkxNV9waHkgKnBoeTsNCisNCisJaWYgKHRlc3RfYml0KE1UNzZfU1RBVEVf UlVOTklORywgJmRldi0+bXBoeS5zdGF0ZSkpDQorCQlyZXR1cm4gdHJ1ZTsNCisNCisJcGh5ID0g bXQ3OTE1X2V4dF9waHkoZGV2KTsNCisNCisJcmV0dXJuIHBoeSAmJiB0ZXN0X2JpdChNVDc2X1NU QVRFX1JVTk5JTkcsICZwaHktPm10NzYtPnN0YXRlKTsNCit9DQorDQorc3RhdGljIGludCBtdDc5 MTVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBt dDc5MTVfaHdfcGh5KGh3KTsNCisJYm9vbCBydW5uaW5nOw0KKw0KKwltdXRleF9sb2NrKCZkZXYt Pm10NzYubXV0ZXgpOw0KKw0KKwlydW5uaW5nID0gbXQ3OTE1X2Rldl9ydW5uaW5nKGRldik7DQor DQorCWlmICghcnVubmluZykgew0KKwkJbXQ3OTE1X21jdV9zZXRfcG0oZGV2LCAwLCAwKTsNCisJ CW10NzkxNV9tY3Vfc2V0X21hYyhkZXYsIDAsIHRydWUsIGZhbHNlKTsNCisJCW10NzkxNV9tY3Vf c2V0X3NjcyhkZXYsIDAsIHRydWUpOw0KKwl9DQorDQorCWlmIChwaHkgIT0gJmRldi0+cGh5KSB7 DQorCQltdDc5MTVfbWN1X3NldF9wbShkZXYsIDEsIDApOw0KKwkJbXQ3OTE1X21jdV9zZXRfbWFj KGRldiwgMSwgdHJ1ZSwgZmFsc2UpOw0KKwkJbXQ3OTE1X21jdV9zZXRfc2NzKGRldiwgMSwgdHJ1 ZSk7DQorCX0NCisNCisJbXQ3OTE1X21jdV9zZXRfY2hhbl9pbmZvKHBoeSwgTUNVX0VYVF9DTURf U0VUX1JYX1BBVEgpOw0KKw0KKwlzZXRfYml0KE1UNzZfU1RBVEVfUlVOTklORywgJnBoeS0+bXQ3 Ni0+c3RhdGUpOw0KKw0KKwlpZiAocnVubmluZykNCisJCWdvdG8gb3V0Ow0KKw0KKwltdDc5MTVf bWFjX3Jlc2V0X2NvdW50ZXJzKHBoeSk7DQorDQorCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dv cmsobXQ3Nl9odyhkZXYpLCAmZGV2LT5tdDc2Lm1hY193b3JrLA0KKwkJCQkgICAgIE1UNzkxNV9X QVRDSERPR19USU1FKTsNCitvdXQ6DQorCW11dGV4X3VubG9jaygmZGV2LT5tdDc2Lm11dGV4KTsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10NzkxNV9zdG9wKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9o d19kZXYoaHcpOw0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7 DQorDQorCW11dGV4X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCWNsZWFyX2JpdChNVDc2 X1NUQVRFX1JVTk5JTkcsICZwaHktPm10NzYtPnN0YXRlKTsNCisNCisJaWYgKHBoeSAhPSAmZGV2 LT5waHkpIHsNCisJCW10NzkxNV9tY3Vfc2V0X3BtKGRldiwgMSwgMSk7DQorCQltdDc5MTVfbWN1 X3NldF9tYWMoZGV2LCAxLCBmYWxzZSwgZmFsc2UpOw0KKwl9DQorDQorCWlmICghbXQ3OTE1X2Rl dl9ydW5uaW5nKGRldikpIHsNCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2LT5tdDc2 Lm1hY193b3JrKTsNCisNCisJCW10NzkxNV9tY3Vfc2V0X3BtKGRldiwgMCwgMSk7DQorCQltdDc5 MTVfbWN1X3NldF9tYWMoZGV2LCAwLCBmYWxzZSwgZmFsc2UpOw0KKwl9DQorDQorCW11dGV4X3Vu bG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCit9DQorDQorc3RhdGljIGludCBnZXRfb21hY19pZHgo ZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgbWFzaykNCit7DQorCWludCBpOw0KKw0KKwlz d2l0Y2ggKHR5cGUpIHsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOg0KKwljYXNlIE5M ODAyMTFfSUZUWVBFX0FQOg0KKwkJLyogYXAgdXNlcyBodyBic3NpZCAwIGFuZCBleHQgYnNzaWQg Ki8NCisJCWlmICh+bWFzayAmIEJJVChIV19CU1NJRF8wKSkNCisJCQlyZXR1cm4gSFdfQlNTSURf MDsNCisNCisJCWZvciAoaSA9IEVYVF9CU1NJRF8xOyBpIDwgRVhUX0JTU0lEX0VORDsgaSsrKQ0K KwkJCWlmICh+bWFzayAmIEJJVChpKSkNCisJCQkJcmV0dXJuIGk7DQorCQlicmVhazsNCisJY2Fz ZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOg0KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9D Og0KKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046DQorCQkvKiBzdGF0aW9uIHVzZXMgaHcg YnNzaWQgb3RoZXIgdGhhbiAwICovDQorCQlmb3IgKGkgPSBIV19CU1NJRF8xOyBpIDwgSFdfQlNT SURfTUFYOyBpKyspDQorCQkJaWYgKH5tYXNrICYgQklUKGkpKQ0KKwkJCQlyZXR1cm4gaTsNCisJ CWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJV0FSTl9PTigxKTsNCisJCWJyZWFrOw0KKwl9DQorDQor CXJldHVybiAtMTsNCit9DQorDQorc3RhdGljIGludCBtdDc5MTVfYWRkX2ludGVyZmFjZShzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikNCit7 DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5k cnZfcHJpdjsNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19kZXYoaHcpOw0K KwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7DQorCXN0cnVjdCBt dDc2X3R4cSAqbXR4cTsNCisJYm9vbCBleHRfcGh5ID0gcGh5ICE9ICZkZXYtPnBoeTsNCisJaW50 IGlkeCwgcmV0ID0gMDsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJ bXZpZi0+aWR4ID0gZmZzKH5waHktPnZpZl9tYXNrKSAtIDE7DQorCWlmIChtdmlmLT5pZHggPj0g TVQ3OTE1X01BWF9JTlRFUkZBQ0VTKSB7DQorCQlyZXQgPSAtRU5PU1BDOw0KKwkJZ290byBvdXQ7 DQorCX0NCisNCisJaWR4ID0gZ2V0X29tYWNfaWR4KHZpZi0+dHlwZSwgcGh5LT5vbWFjX21hc2sp Ow0KKwlpZiAoaWR4IDwgMCkgew0KKwkJcmV0ID0gLUVOT1NQQzsNCisJCWdvdG8gb3V0Ow0KKwl9 DQorCW12aWYtPm9tYWNfaWR4ID0gaWR4Ow0KKwltdmlmLT5kZXYgPSBkZXY7DQorCW12aWYtPmJh bmRfaWR4ID0gZXh0X3BoeTsNCisNCisJaWYgKGV4dF9waHkpDQorCQltdmlmLT53bW1faWR4ID0g ZXh0X3BoeSAqIChNVDc5MTVfTUFYX1dNTV9TRVRTIC8gMikgKw0KKwkJCQltdmlmLT5pZHggJSAo TVQ3OTE1X01BWF9XTU1fU0VUUyAvIDIpOw0KKwllbHNlDQorCQltdmlmLT53bW1faWR4ID0gbXZp Zi0+aWR4ICUgTVQ3OTE1X01BWF9XTU1fU0VUUzsNCisNCisJcmV0ID0gbXQ3OTE1X21jdV9hZGRf ZGV2X2luZm8oZGV2LCB2aWYsIHRydWUpOw0KKwlpZiAocmV0KQ0KKwkJZ290byBvdXQ7DQorDQor CXBoeS0+dmlmX21hc2sgfD0gQklUKG12aWYtPmlkeCk7DQorCXBoeS0+b21hY19tYXNrIHw9IEJJ VChtdmlmLT5vbWFjX2lkeCk7DQorDQorCWlkeCA9IE1UNzkxNV9XVEJMX1JFU0VSVkVEIC0gbXZp Zi0+aWR4Ow0KKw0KKwlJTklUX0xJU1RfSEVBRCgmbXZpZi0+c3RhLnBvbGxfbGlzdCk7DQorCW12 aWYtPnN0YS53Y2lkLmlkeCA9IGlkeDsNCisJbXZpZi0+c3RhLndjaWQuZXh0X3BoeSA9IG12aWYt PmJhbmRfaWR4Ow0KKwltdmlmLT5zdGEud2NpZC5od19rZXlfaWR4ID0gLTE7DQorCW12aWYtPnN0 YS53Y2lkLnR4X2luZm8gfD0gTVRfV0NJRF9UWF9JTkZPX1NFVDsNCisJbXQ3OTE1X21hY193dGJs X3VwZGF0ZShkZXYsIGlkeCwNCisJCQkgICAgICAgTVRfV1RCTF9VUERBVEVfQURNX0NPVU5UX0NM RUFSKTsNCisNCisJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+bXQ3Ni53Y2lkW2lkeF0sICZtdmlm LT5zdGEud2NpZCk7DQorCWlmICh2aWYtPnR4cSkgew0KKwkJbXR4cSA9IChzdHJ1Y3QgbXQ3Nl90 eHEgKil2aWYtPnR4cS0+ZHJ2X3ByaXY7DQorCQltdHhxLT53Y2lkID0gJm12aWYtPnN0YS53Y2lk Ow0KKwkJbXQ3Nl90eHFfaW5pdCgmZGV2LT5tdDc2LCB2aWYtPnR4cSk7DQorCX0NCisNCitvdXQ6 DQorCW11dGV4X3VubG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJcmV0dXJuIHJldDsNCit9 DQorDQorc3RhdGljIHZvaWQgbXQ3OTE1X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsDQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KK3sNCisJc3Ry dWN0IG10NzkxNV92aWYgKm12aWYgPSAoc3RydWN0IG10NzkxNV92aWYgKil2aWYtPmRydl9wcml2 Ow0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YSA9ICZtdmlmLT5zdGE7DQorCXN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10NzkxNV9waHkgKnBo eSA9IG10NzkxNV9od19waHkoaHcpOw0KKwlpbnQgaWR4ID0gbXN0YS0+d2NpZC5pZHg7DQorDQor CS8qIFRPRE86IGRpc2FibGUgYmVhY29uIGZvciB0aGUgYnNzICovDQorDQorCW10NzkxNV9tY3Vf YWRkX2Rldl9pbmZvKGRldiwgdmlmLCBmYWxzZSk7DQorDQorCXJjdV9hc3NpZ25fcG9pbnRlcihk ZXYtPm10NzYud2NpZFtpZHhdLCBOVUxMKTsNCisJaWYgKHZpZi0+dHhxKQ0KKwkJbXQ3Nl90eHFf cmVtb3ZlKCZkZXYtPm10NzYsIHZpZi0+dHhxKTsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2 Lm11dGV4KTsNCisJcGh5LT52aWZfbWFzayAmPSB+QklUKG12aWYtPmlkeCk7DQorCXBoeS0+b21h Y19tYXNrICY9IH5CSVQobXZpZi0+b21hY19pZHgpOw0KKwltdXRleF91bmxvY2soJmRldi0+bXQ3 Ni5tdXRleCk7DQorDQorCXNwaW5fbG9ja19iaCgmZGV2LT5zdGFfcG9sbF9sb2NrKTsNCisJaWYg KCFsaXN0X2VtcHR5KCZtc3RhLT5wb2xsX2xpc3QpKQ0KKwkJbGlzdF9kZWxfaW5pdCgmbXN0YS0+ cG9sbF9saXN0KTsNCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+c3RhX3BvbGxfbG9jayk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIG10NzkxNV9pbml0X2Rmc19zdGF0ZShzdHJ1Y3QgbXQ3OTE1X3BoeSAq cGh5KQ0KK3sNCisJc3RydWN0IG10NzZfcGh5ICptcGh5ID0gcGh5LT5tdDc2Ow0KKwlzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodyA9IG1waHktPmh3Ow0KKwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYg KmNoYW5kZWYgPSAmaHctPmNvbmYuY2hhbmRlZjsNCisNCisJaWYgKGh3LT5jb25mLmZsYWdzICYg SUVFRTgwMjExX0NPTkZfT0ZGQ0hBTk5FTCkNCisJCXJldHVybjsNCisNCisJaWYgKCEoY2hhbmRl Zi0+Y2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikpDQorCQlyZXR1cm47DQorDQor CWlmIChtcGh5LT5jaGFuZGVmLmNoYW4tPmNlbnRlcl9mcmVxID09IGNoYW5kZWYtPmNoYW4tPmNl bnRlcl9mcmVxICYmDQorCSAgICBtcGh5LT5jaGFuZGVmLndpZHRoID09IGNoYW5kZWYtPndpZHRo KQ0KKwkJcmV0dXJuOw0KKw0KKwlwaHktPmRmc19zdGF0ZSA9IC0xOw0KK30NCisNCitzdGF0aWMg aW50IG10NzkxNV9zZXRfY2hhbm5lbChzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJc3Ry dWN0IG10NzkxNV9kZXYgKmRldiA9IHBoeS0+ZGV2Ow0KKwlpbnQgcmV0Ow0KKw0KKwljYW5jZWxf ZGVsYXllZF93b3JrX3N5bmMoJmRldi0+bXQ3Ni5tYWNfd29yayk7DQorDQorCW11dGV4X2xvY2so JmRldi0+bXQ3Ni5tdXRleCk7DQorCXNldF9iaXQoTVQ3Nl9SRVNFVCwgJnBoeS0+bXQ3Ni0+c3Rh dGUpOw0KKw0KKwltdDc5MTVfaW5pdF9kZnNfc3RhdGUocGh5KTsNCisJbXQ3Nl9zZXRfY2hhbm5l bChwaHktPm10NzYpOw0KKw0KKwlyZXQgPSBtdDc5MTVfbWN1X3NldF9jaGFuX2luZm8ocGh5LCBN Q1VfRVhUX0NNRF9DSEFOTkVMX1NXSVRDSCk7DQorCWlmIChyZXQpDQorCQlnb3RvIG91dDsNCisN CisJbXQ3OTE1X21hY19zZXRfdGltaW5nKHBoeSk7DQorCXJldCA9IG10NzkxNV9kZnNfaW5pdF9y YWRhcl9kZXRlY3RvcihwaHkpOw0KKwltdDc5MTVfbWFjX2NjYV9zdGF0c19yZXNldChwaHkpOw0K Kw0KKwltdDc5MTVfbWFjX3Jlc2V0X2NvdW50ZXJzKHBoeSk7DQorCXBoeS0+bm9pc2UgPSAwOw0K Kw0KK291dDoNCisJY2xlYXJfYml0KE1UNzZfUkVTRVQsICZwaHktPm10NzYtPnN0YXRlKTsNCisJ bXV0ZXhfdW5sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKw0KKwltdDc2X3R4cV9zY2hlZHVsZV9h bGwocGh5LT5tdDc2KTsNCisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhtdDc2X2h3KGRl diksICZkZXYtPm10NzYubWFjX3dvcmssDQorCQkJCSAgICAgTVQ3OTE1X1dBVENIRE9HX1RJTUUp Ow0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9zZXRfa2V5KHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwNCisJCQkgIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkJICBz dHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0 cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1z dGEgPSBzdGEgPyAoc3RydWN0IG10NzkxNV9zdGEgKilzdGEtPmRydl9wcml2IDoNCisJCQkJICAm bXZpZi0+c3RhOw0KKwlzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkID0gJm1zdGEtPndjaWQ7DQorCWlu dCBpZHggPSBrZXktPmtleWlkeDsNCisNCisJLyogVGhlIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBv cnQgcGVyLVNUQSBSWCBHVEssIGZhbGxiYWNrDQorCSAqIHRvIHNvZnR3YXJlIG1vZGUgZm9yIHRo ZXNlLg0KKwkgKi8NCisJaWYgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwN CisJICAgICB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgJiYNCisJICAg IChrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQIHx8DQorCSAgICAga2V5LT5j aXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkgJiYNCisJICAgICEoa2V5LT5mbGFncyAm IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkpDQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQor DQorCS8qIGZhbGwgYmFjayB0byBzdyBlbmNyeXB0aW9uIGZvciB1bnN1cHBvcnRlZCBjaXBoZXJz ICovDQorCXN3aXRjaCAoa2V5LT5jaXBoZXIpIHsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9B RVNfQ01BQzoNCisJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01N SUU7DQorCQlicmVhazsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoNCisJY2FzZSBX TEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoN CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOg0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRF X0NDTVBfMjU2Og0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVA6DQorCWNhc2UgV0xBTl9D SVBIRVJfU1VJVEVfR0NNUF8yNTY6DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfU01TNDoNCisJ CWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KKwl9DQorDQorCWlm IChjbWQgPT0gU0VUX0tFWSkgew0KKwkJa2V5LT5od19rZXlfaWR4ID0gd2NpZC0+aWR4Ow0KKwkJ d2NpZC0+aHdfa2V5X2lkeCA9IGlkeDsNCisJfSBlbHNlIGlmIChpZHggPT0gd2NpZC0+aHdfa2V5 X2lkeCkgew0KKwkJd2NpZC0+aHdfa2V5X2lkeCA9IC0xOw0KKwl9DQorCW10NzZfd2NpZF9rZXlf c2V0dXAoJmRldi0+bXQ3Niwgd2NpZCwNCisJCQkgICAgY21kID09IFNFVF9LRVkgPyBrZXkgOiBO VUxMKTsNCisNCisJcmV0dXJuIG10NzkxNV9tY3VfYWRkX2tleShkZXYsIHZpZiwgbXN0YSwga2V5 LCBjbWQpOw0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9jb25maWcoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHUzMiBjaGFuZ2VkKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10 NzkxNV9od19kZXYoaHcpOw0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3Bo eShodyk7DQorCWJvb2wgYmFuZCA9IHBoeSAhPSAmZGV2LT5waHk7DQorCWludCByZXQ7DQorDQor CWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsNCisJCWllZWU4 MDIxMV9zdG9wX3F1ZXVlcyhodyk7DQorCQlyZXQgPSBtdDc5MTVfc2V0X2NoYW5uZWwocGh5KTsN CisJCWlmIChyZXQpDQorCQkJcmV0dXJuIHJldDsNCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyho dyk7DQorCX0NCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJaWYgKGNo YW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUikgew0KKwkJaWYgKCEoaHctPmNv bmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9NT05JVE9SKSkNCisJCQlwaHktPnJ4ZmlsdGVyIHw9 IE1UX1dGX1JGQ1JfRFJPUF9PVEhFUl9VQzsNCisJCWVsc2UNCisJCQlwaHktPnJ4ZmlsdGVyICY9 IH5NVF9XRl9SRkNSX0RST1BfT1RIRVJfVUM7DQorDQorCQltdDc2X3dyKGRldiwgTVRfV0ZfUkZD UihiYW5kKSwgcGh5LT5yeGZpbHRlcik7DQorCX0NCisNCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm10 NzYubXV0ZXgpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9j b25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LCB1MTYgcXVldWUsDQorCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3Bh cmFtcyAqcGFyYW1zKQ0KK3sNCisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSAoc3RydWN0IG10 NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKw0KKwkvKiBubyBuZWVkIHRvIHVwZGF0ZSByaWdo dCBhd2F5LCB3ZSdsbCBnZXQgQlNTX0NIQU5HRURfUU9TICovDQorCW12aWYtPndtbVtxdWV1ZV0u Y3dfbWluID0gcGFyYW1zLT5jd19taW47DQorCW12aWYtPndtbVtxdWV1ZV0uY3dfbWF4ID0gcGFy YW1zLT5jd19tYXg7DQorCW12aWYtPndtbVtxdWV1ZV0uYWlmcyA9IHBhcmFtcy0+YWlmczsNCisJ bXZpZi0+d21tW3F1ZXVlXS50eG9wID0gcGFyYW1zLT50eG9wOw0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIHZvaWQgbXQ3OTE1X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsDQorCQkJCSAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywNCisJCQkJICAg IHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsDQorCQkJCSAgICB1NjQgbXVsdGljYXN0KQ0KK3sN CisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19kZXYoaHcpOw0KKwlzdHJ1Y3Qg bXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7DQorCWJvb2wgYmFuZCA9IHBoeSAh PSAmZGV2LT5waHk7DQorDQorCXUzMiBjdGxfZmxhZ3MgPSBNVF9XRl9SRkNSMV9EUk9QX0FDSyB8 DQorCQkJTVRfV0ZfUkZDUjFfRFJPUF9CRl9QT0xMIHwNCisJCQlNVF9XRl9SRkNSMV9EUk9QX0JB IHwNCisJCQlNVF9XRl9SRkNSMV9EUk9QX0NGRU5EIHwNCisJCQlNVF9XRl9SRkNSMV9EUk9QX0NG QUNLOw0KKwl1MzIgZmxhZ3MgPSAwOw0KKw0KKyNkZWZpbmUgTVQ3Nl9GSUxURVIoX2ZsYWcsIF9o dykgZG8gewkJCQkJXA0KKwkJZmxhZ3MgfD0gKnRvdGFsX2ZsYWdzICYgRklGXyMjX2ZsYWc7CQkJ XA0KKwkJcGh5LT5yeGZpbHRlciAmPSB+KF9odyk7CQkJCVwNCisJCXBoeS0+cnhmaWx0ZXIgfD0g IShmbGFncyAmIEZJRl8jI19mbGFnKSAqIChfaHcpOwlcDQorCX0gd2hpbGUgKDApDQorDQorCXBo eS0+cnhmaWx0ZXIgJj0gfihNVF9XRl9SRkNSX0RST1BfT1RIRVJfQlNTIHwNCisJCQkgICBNVF9X Rl9SRkNSX0RST1BfT1RIRVJfQkVBQ09OIHwNCisJCQkgICBNVF9XRl9SRkNSX0RST1BfRlJBTUVf UkVQT1JUIHwNCisJCQkgICBNVF9XRl9SRkNSX0RST1BfUFJPQkVSRVEgfA0KKwkJCSAgIE1UX1dG X1JGQ1JfRFJPUF9NQ0FTVF9GSUxURVJFRCB8DQorCQkJICAgTVRfV0ZfUkZDUl9EUk9QX01DQVNU IHwNCisJCQkgICBNVF9XRl9SRkNSX0RST1BfQkNBU1QgfA0KKwkJCSAgIE1UX1dGX1JGQ1JfRFJP UF9EVVBMSUNBVEUgfA0KKwkJCSAgIE1UX1dGX1JGQ1JfRFJPUF9BMl9CU1NJRCB8DQorCQkJICAg TVRfV0ZfUkZDUl9EUk9QX1VOV0FOVEVEX0NUTCB8DQorCQkJICAgTVRfV0ZfUkZDUl9EUk9QX1NU QkNfTVVMVEkpOw0KKw0KKwlNVDc2X0ZJTFRFUihPVEhFUl9CU1MsIE1UX1dGX1JGQ1JfRFJPUF9P VEhFUl9USU0gfA0KKwkJCSAgICAgICBNVF9XRl9SRkNSX0RST1BfQTNfTUFDIHwNCisJCQkgICAg ICAgTVRfV0ZfUkZDUl9EUk9QX0EzX0JTU0lEKTsNCisNCisJTVQ3Nl9GSUxURVIoRkNTRkFJTCwg TVRfV0ZfUkZDUl9EUk9QX0ZDU0ZBSUwpOw0KKw0KKwlNVDc2X0ZJTFRFUihDT05UUk9MLCBNVF9X Rl9SRkNSX0RST1BfQ1RTIHwNCisJCQkgICAgIE1UX1dGX1JGQ1JfRFJPUF9SVFMgfA0KKwkJCSAg ICAgTVRfV0ZfUkZDUl9EUk9QX0NUTF9SU1YgfA0KKwkJCSAgICAgTVRfV0ZfUkZDUl9EUk9QX05E UEEpOw0KKw0KKwkqdG90YWxfZmxhZ3MgPSBmbGFnczsNCisJbXQ3Nl93cihkZXYsIE1UX1dGX1JG Q1IoYmFuZCksIHBoeS0+cnhmaWx0ZXIpOw0KKw0KKwlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NP TlRST0wpDQorCQltdDc2X2NsZWFyKGRldiwgTVRfV0ZfUkZDUjEoYmFuZCksIGN0bF9mbGFncyk7 DQorCWVsc2UNCisJCW10NzZfc2V0KGRldiwgTVRfV0ZfUkZDUjEoYmFuZCksIGN0bF9mbGFncyk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10NzkxNV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LA0KKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkJ ICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sDQorCQkJCSAgICB1MzIgY2hhbmdl ZCkNCit7DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBtdDc5MTVfaHdfcGh5KGh3KTsNCisJ c3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19kZXYoaHcpOw0KKw0KKwltdXRleF9s b2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKw0KKwkvKg0KKwkgKiBzdGF0aW9uIG1vZGUgdXNlcyBC U1NJRCB0byBtYXAgdGhlIHdsYW4gZW50cnkgdG8gYSBwZWVyLA0KKwkgKiBhbmQgdGhlbiBwZWVy IHJlZmVyZW5jZXMgYnNzX2luZm9fcmZjaCB0byBzZXQgYmFuZHdpZHRoIGNhcC4NCisJICovDQor CWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQgJiYNCisJICAgIHZpZi0+dHlwZSA9PSBO TDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7DQorCQlib29sIGpvaW4gPSAhaXNfemVyb19ldGhlcl9h ZGRyKGluZm8tPmJzc2lkKTsNCisNCisJCW10NzkxNV9tY3VfYWRkX2Jzc19pbmZvKHBoeSwgdmlm LCBqb2luKTsNCisJCW10NzkxNV9tY3VfYWRkX3N0YShkZXYsIHZpZiwgTlVMTCwgam9pbik7DQor CX0NCisNCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykNCisJCW10NzkxNV9tY3Vf YWRkX2Jzc19pbmZvKHBoeSwgdmlmLCBpbmZvLT5hc3NvYyk7DQorDQorCWlmIChjaGFuZ2VkICYg QlNTX0NIQU5HRURfRVJQX1NMT1QpIHsNCisJCWludCBzbG90dGltZSA9IGluZm8tPnVzZV9zaG9y dF9zbG90ID8gOSA6IDIwOw0KKw0KKwkJaWYgKHNsb3R0aW1lICE9IHBoeS0+c2xvdHRpbWUpIHsN CisJCQlwaHktPnNsb3R0aW1lID0gc2xvdHRpbWU7DQorCQkJbXQ3OTE1X21hY19zZXRfdGltaW5n KHBoeSk7DQorCQl9DQorCX0NCisNCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05f RU5BQkxFRCkgew0KKwkJbXQ3OTE1X21jdV9hZGRfYnNzX2luZm8ocGh5LCB2aWYsIGluZm8tPmVu YWJsZV9iZWFjb24pOw0KKwkJbXQ3OTE1X21jdV9hZGRfc3RhKGRldiwgdmlmLCBOVUxMLCBpbmZv LT5lbmFibGVfYmVhY29uKTsNCisJfQ0KKw0KKwkvKiBlbnN1cmUgdGhhdCBlbmFibGUgdHhjbWRf bW9kZSBhZnRlciBic3NfaW5mbyAqLw0KKwlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9RT1Mg fCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkpDQorCQltdDc5MTVfbWN1X3NldF90eChkZXYs IHZpZik7DQorDQorCWlmIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0JFQUNPTiB8DQorCQkgICAg ICAgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpKQ0KKwkJbXQ3OTE1X21jdV9hZGRfYmVhY29u KGh3LCB2aWYsIGluZm8tPmVuYWJsZV9iZWFjb24pOw0KKw0KKwltdXRleF91bmxvY2soJmRldi0+ bXQ3Ni5tdXRleCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X2NoYW5uZWxfc3dpdGNo X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgICAgIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsDQorCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYp DQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQorDQor CW11dGV4X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorCW10NzkxNV9tY3VfYWRkX2JlYWNvbiho dywgdmlmLCB0cnVlKTsNCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KK30NCisN CitpbnQgbXQ3OTE1X21hY19zdGFfYWRkKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgc3RydWN0IGll ZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQ0K K3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3Qg bXQ3OTE1X2RldiwgbXQ3Nik7DQorCXN0cnVjdCBtdDc5MTVfc3RhICptc3RhID0gKHN0cnVjdCBt dDc5MTVfc3RhICopc3RhLT5kcnZfcHJpdjsNCisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSAo c3RydWN0IG10NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKwlpbnQgaWR4Ow0KKw0KKwlpZHgg PSBtdDc2X3djaWRfYWxsb2MoZGV2LT5tdDc2LndjaWRfbWFzaywgTVQ3OTE1X1dUQkxfU1RBIC0g MSk7DQorCWlmIChpZHggPCAwKQ0KKwkJcmV0dXJuIC1FTk9TUEM7DQorDQorCUlOSVRfTElTVF9I RUFEKCZtc3RhLT5wb2xsX2xpc3QpOw0KKwlJTklUX1dPUksoJm1zdGEtPnN0YXRzX3dvcmssIG10 NzkxNV9tYWNfc3RhX3N0YXRzX3dvcmspOw0KKwlzcGluX2xvY2tfaW5pdCgmbXN0YS0+YW1wZHVf bG9jayk7DQorCW1zdGEtPnZpZiA9IG12aWY7DQorCW1zdGEtPndjaWQuc3RhID0gMTsNCisJbXN0 YS0+d2NpZC5pZHggPSBpZHg7DQorCW1zdGEtPndjaWQuZXh0X3BoeSA9IG12aWYtPmJhbmRfaWR4 Ow0KKwltc3RhLT53Y2lkLnR4X2luZm8gfD0gTVRfV0NJRF9UWF9JTkZPX1NFVDsNCisJbXN0YS0+ c3RhdHMuamlmZmllcyA9IGppZmZpZXM7DQorDQorCW10NzkxNV9tYWNfd3RibF91cGRhdGUoZGV2 LCBpZHgsDQorCQkJICAgICAgIE1UX1dUQkxfVVBEQVRFX0FETV9DT1VOVF9DTEVBUik7DQorDQor CW10NzkxNV9tY3VfYWRkX3N0YShkZXYsIHZpZiwgc3RhLCB0cnVlKTsNCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X21hY19zdGFfcmVtb3ZlKHN0cnVjdCBtdDc2X2RldiAqbWRl diwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0 YSAqc3RhKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihtZGV2 LCBzdHJ1Y3QgbXQ3OTE1X2RldiwgbXQ3Nik7DQorCXN0cnVjdCBtdDc5MTVfc3RhICptc3RhID0g KHN0cnVjdCBtdDc5MTVfc3RhICopc3RhLT5kcnZfcHJpdjsNCisNCisJbXQ3OTE1X21jdV9hZGRf c3RhKGRldiwgdmlmLCBzdGEsIGZhbHNlKTsNCisNCisJbXQ3OTE1X21hY193dGJsX3VwZGF0ZShk ZXYsIG1zdGEtPndjaWQuaWR4LA0KKwkJCSAgICAgICBNVF9XVEJMX1VQREFURV9BRE1fQ09VTlRf Q0xFQVIpOw0KKw0KKwlzcGluX2xvY2tfYmgoJmRldi0+c3RhX3BvbGxfbG9jayk7DQorCWlmICgh bGlzdF9lbXB0eSgmbXN0YS0+cG9sbF9saXN0KSkNCisJCWxpc3RfZGVsX2luaXQoJm1zdGEtPnBv bGxfbGlzdCk7DQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KK30NCisN CitzdGF0aWMgdm9pZCBtdDc5MTVfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAg ICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsDQorCQkgICAgICBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19k ZXYoaHcpOw0KKwlzdHJ1Y3QgbXQ3Nl9waHkgKm1waHkgPSBody0+cHJpdjsNCisJc3RydWN0IGll ZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOw0KKwlzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmID0gaW5mby0+Y29udHJvbC52aWY7DQorCXN0cnVjdCBtdDc2X3dj aWQgKndjaWQgPSAmZGV2LT5tdDc2Lmdsb2JhbF93Y2lkOw0KKw0KKwlpZiAoY29udHJvbC0+c3Rh KSB7DQorCQlzdHJ1Y3QgbXQ3OTE1X3N0YSAqc3RhOw0KKw0KKwkJc3RhID0gKHN0cnVjdCBtdDc5 MTVfc3RhICopY29udHJvbC0+c3RhLT5kcnZfcHJpdjsNCisJCXdjaWQgPSAmc3RhLT53Y2lkOw0K Kwl9DQorDQorCWlmICh2aWYgJiYgIWNvbnRyb2wtPnN0YSkgew0KKwkJc3RydWN0IG10NzkxNV92 aWYgKm12aWY7DQorDQorCQltdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJp djsNCisJCXdjaWQgPSAmbXZpZi0+c3RhLndjaWQ7DQorCX0NCisNCisJbXQ3Nl90eChtcGh5LCBj b250cm9sLT5zdGEsIHdjaWQsIHNrYik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1X3NldF9y dHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsKQ0KK3sNCisJc3Ry dWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19kZXYoaHcpOw0KKwlzdHJ1Y3QgbXQ3OTE1 X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7DQorDQorCW11dGV4X2xvY2soJmRldi0+bXQ3 Ni5tdXRleCk7DQorCW10NzkxNV9tY3Vfc2V0X3J0c190aHJlc2gocGh5LCB2YWwpOw0KKwltdXRl eF91bmxvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgaW50DQorbXQ3OTE1X2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2FtcGR1X3Bh cmFtcyAqcGFyYW1zKQ0KK3sNCisJZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0 aW9uID0gcGFyYW1zLT5hY3Rpb247DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBtdDc5MTVf aHdfZGV2KGh3KTsNCisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHBhcmFtcy0+c3RhOw0K KwlzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxID0gc3RhLT50eHFbcGFyYW1zLT50aWRdOw0KKwlz dHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXN0YS0+ZHJ2X3By aXY7DQorCXUxNiB0aWQgPSBwYXJhbXMtPnRpZDsNCisJdTE2IHNzbiA9IHBhcmFtcy0+c3NuOw0K KwlzdHJ1Y3QgbXQ3Nl90eHEgKm10eHE7DQorCWludCByZXQgPSAwOw0KKw0KKwlpZiAoIXR4cSkN CisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwltdHhxID0gKHN0cnVjdCBtdDc2X3R4cSAqKXR4cS0+ ZHJ2X3ByaXY7DQorDQorCW11dGV4X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorCXN3aXRjaCAo YWN0aW9uKSB7DQorCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOg0KKwkJbXQ3Nl9yeF9h Z2dyX3N0YXJ0KCZkZXYtPm10NzYsICZtc3RhLT53Y2lkLCB0aWQsIHNzbiwNCisJCQkJICAgcGFy YW1zLT5idWZfc2l6ZSk7DQorCQltdDc5MTVfbWN1X2FkZF9yeF9iYShkZXYsIHBhcmFtcywgdHJ1 ZSk7DQorCQlicmVhazsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoNCisJCW10NzZf cnhfYWdncl9zdG9wKCZkZXYtPm10NzYsICZtc3RhLT53Y2lkLCB0aWQpOw0KKwkJbXQ3OTE1X21j dV9hZGRfcnhfYmEoZGV2LCBwYXJhbXMsIGZhbHNlKTsNCisJCWJyZWFrOw0KKwljYXNlIElFRUU4 MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoNCisJCW10eHEtPmFnZ3IgPSB0cnVlOw0KKwkJbXR4 cS0+c2VuZF9iYXIgPSBmYWxzZTsNCisJCW10NzkxNV9zZXRfYWdncl9zdGF0ZShtc3RhLCB0aWQs IE1UNzkxNV9BR0dSX09QRVJBVElPTkFMKTsNCisJCW10NzkxNV9tY3VfYWRkX3R4X2JhKGRldiwg cGFyYW1zLCB0cnVlKTsNCisJCWJyZWFrOw0KKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9Q X0ZMVVNIOg0KKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIX0NPTlQ6DQorCQlt dHhxLT5hZ2dyID0gZmFsc2U7DQorCQltdDc5MTVfc2V0X2FnZ3Jfc3RhdGUobXN0YSwgdGlkLCBN VDc5MTVfQUdHUl9TVE9QKTsNCisJCW10NzkxNV9tY3VfYWRkX3R4X2JhKGRldiwgcGFyYW1zLCBm YWxzZSk7DQorCQlicmVhazsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6DQorCQlt dHhxLT5hZ2dfc3NuID0gSUVFRTgwMjExX1NOX1RPX1NFUShzc24pOw0KKwkJbXQ3OTE1X3NldF9h Z2dyX3N0YXRlKG1zdGEsIHRpZCwgTVQ3OTE1X0FHR1JfU1RBUlQpOw0KKwkJcmV0ID0gSUVFRTgw MjExX0FNUERVX1RYX1NUQVJUX0lNTUVESUFURTsNCisJCWJyZWFrOw0KKwljYXNlIElFRUU4MDIx MV9BTVBEVV9UWF9TVE9QX0NPTlQ6DQorCQltdHhxLT5hZ2dyID0gZmFsc2U7DQorCQltdDc5MTVf c2V0X2FnZ3Jfc3RhdGUobXN0YSwgdGlkLCBNVDc5MTVfQUdHUl9TVE9QKTsNCisJCW10NzkxNV9t Y3VfYWRkX3R4X2JhKGRldiwgcGFyYW1zLCBmYWxzZSk7DQorCQlpZWVlODAyMTFfc3RvcF90eF9i YV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOw0KKwkJYnJlYWs7DQorCX0NCisJbXV0 ZXhfdW5sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitz dGF0aWMgaW50DQorbXQ3OTE1X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYsDQorCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3Rh KQ0KK3sNCisJcmV0dXJuIG10NzZfc3RhX3N0YXRlKGh3LCB2aWYsIHN0YSwgSUVFRTgwMjExX1NU QV9OT1RFWElTVCwNCisJCQkgICAgICBJRUVFODAyMTFfU1RBX05PTkUpOw0KK30NCisNCitzdGF0 aWMgaW50DQorbXQ3OTE1X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQor ew0KKwlyZXR1cm4gbXQ3Nl9zdGFfc3RhdGUoaHcsIHZpZiwgc3RhLCBJRUVFODAyMTFfU1RBX05P TkUsDQorCQkJICAgICAgSUVFRTgwMjExX1NUQV9OT1RFWElTVCk7DQorfQ0KKw0KK3N0YXRpYyBp bnQNCittdDc5MTVfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJIHN0cnVj dCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykNCit7DQorCXN0cnVjdCBtdDc5MTVf cGh5ICpwaHkgPSBtdDc5MTVfaHdfcGh5KGh3KTsNCisJc3RydWN0IG1pYl9zdGF0cyAqbWliID0g JnBoeS0+bWliOw0KKw0KKwlzdGF0cy0+ZG90MTFSVFNTdWNjZXNzQ291bnQgPSBtaWItPnJ0c19j bnQ7DQorCXN0YXRzLT5kb3QxMVJUU0ZhaWx1cmVDb3VudCA9IG1pYi0+cnRzX3JldHJpZXNfY250 Ow0KKwlzdGF0cy0+ZG90MTFGQ1NFcnJvckNvdW50ID0gbWliLT5mY3NfZXJyX2NudDsNCisJc3Rh dHMtPmRvdDExQUNLRmFpbHVyZUNvdW50ID0gbWliLT5hY2tfZmFpbF9jbnQ7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9zZXRfY292ZXJhZ2VfY2xhc3Moc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHMxNiBjb3ZlcmFnZV9jbGFzcykNCit7DQorCXN0cnVjdCBt dDc5MTVfcGh5ICpwaHkgPSBtdDc5MTVfaHdfcGh5KGh3KTsNCisNCisJcGh5LT5jb3ZlcmFnZV9j bGFzcyA9IG1heF90KHMxNiwgY292ZXJhZ2VfY2xhc3MsIDApOw0KKwltdDc5MTVfbWFjX3NldF90 aW1pbmcocGh5KTsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9zZXRfYW50ZW5uYShzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHR4X2FudCwgdTMyIHJ4X2FudCkNCit7DQorCXN0cnVj dCBtdDc5MTVfZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10NzkxNV9w aHkgKnBoeSA9IG10NzkxNV9od19waHkoaHcpOw0KKwlpbnQgbWF4X25zcyA9IGh3ZWlnaHQ4KGh3 LT53aXBoeS0+YXZhaWxhYmxlX2FudGVubmFzX3R4KTsNCisJYm9vbCBleHRfcGh5ID0gcGh5ICE9 ICZkZXYtPnBoeTsNCisNCisJaWYgKCF0eF9hbnQgfHwgdHhfYW50ICE9IHJ4X2FudCB8fCBmZnMo dHhfYW50KSA+IG1heF9uc3MpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKChCSVQoaHdl aWdodDgodHhfYW50KSkgLSAxKSAhPSB0eF9hbnQpDQorCQl0eF9hbnQgPSBCSVQoZmZzKHR4X2Fu dCkgLSAxKSAtIDE7DQorDQorCW11dGV4X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCXBo eS0+bXQ3Ni0+YW50ZW5uYV9tYXNrID0gdHhfYW50Ow0KKw0KKwlpZiAoZXh0X3BoeSkgew0KKwkJ aWYgKGRldi0+Y2hhaW5tYXNrID09IDB4ZikNCisJCQl0eF9hbnQgPDw9IDI7DQorCQllbHNlDQor CQkJdHhfYW50IDw8PSAxOw0KKwl9DQorCXBoeS0+Y2hhaW5tYXNrID0gdHhfYW50Ow0KKw0KKwlt dDc2X3NldF9zdHJlYW1fY2FwcygmZGV2LT5tdDc2LCB0cnVlKTsNCisNCisJbXV0ZXhfdW5sb2Nr KCZkZXYtPm10NzYubXV0ZXgpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQN CittdDc5MTVfc3RhX3JjX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSAgICAg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEg KnN0YSwNCisJCSAgICAgdTMyIGNoYW5nZWQpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0 YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXN0YS0+ZHJ2X3ByaXY7DQorDQorCXJjdV9yZWFkX2xv Y2soKTsNCisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHZpZiwgc3RhLT5hZGRyKTsNCisJaWYg KCFzdGEpIHsNCisJCXJjdV9yZWFkX3VubG9jaygpOw0KKwkJcmV0dXJuOw0KKwl9DQorCXJjdV9y ZWFkX2xvY2soKTsNCisNCisJc2V0X2JpdChjaGFuZ2VkLCAmbXN0YS0+c3RhdHMuY2hhbmdlZCk7 DQorCWllZWU4MDIxMV9xdWV1ZV93b3JrKGh3LCAmbXN0YS0+c3RhdHNfd29yayk7DQorfQ0KKw0K K2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG10NzkxNV9vcHMgPSB7DQorCS50eCA9IG10Nzkx NV90eCwNCisJLnN0YXJ0ID0gbXQ3OTE1X3N0YXJ0LA0KKwkuc3RvcCA9IG10NzkxNV9zdG9wLA0K KwkuYWRkX2ludGVyZmFjZSA9IG10NzkxNV9hZGRfaW50ZXJmYWNlLA0KKwkucmVtb3ZlX2ludGVy ZmFjZSA9IG10NzkxNV9yZW1vdmVfaW50ZXJmYWNlLA0KKwkuY29uZmlnID0gbXQ3OTE1X2NvbmZp ZywNCisJLmNvbmZfdHggPSBtdDc5MTVfY29uZl90eCwNCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSBt dDc5MTVfY29uZmlndXJlX2ZpbHRlciwNCisJLmJzc19pbmZvX2NoYW5nZWQgPSBtdDc5MTVfYnNz X2luZm9fY2hhbmdlZCwNCisJLnN0YV9hZGQgPSBtdDc5MTVfc3RhX2FkZCwNCisJLnN0YV9yZW1v dmUgPSBtdDc5MTVfc3RhX3JlbW92ZSwNCisJLnN0YV9wcmVfcmN1X3JlbW92ZSA9IG10NzZfc3Rh X3ByZV9yY3VfcmVtb3ZlLA0KKwkuc3RhX3JjX3VwZGF0ZSA9IG10NzkxNV9zdGFfcmNfdXBkYXRl LA0KKwkuc2V0X2tleSA9IG10NzkxNV9zZXRfa2V5LA0KKwkuYW1wZHVfYWN0aW9uID0gbXQ3OTE1 X2FtcGR1X2FjdGlvbiwNCisJLnNldF9ydHNfdGhyZXNob2xkID0gbXQ3OTE1X3NldF9ydHNfdGhy ZXNob2xkLA0KKwkud2FrZV90eF9xdWV1ZSA9IG10NzZfd2FrZV90eF9xdWV1ZSwNCisJLnN3X3Nj YW5fc3RhcnQgPSBtdDc2X3N3X3NjYW4sDQorCS5zd19zY2FuX2NvbXBsZXRlID0gbXQ3Nl9zd19z Y2FuX2NvbXBsZXRlLA0KKwkucmVsZWFzZV9idWZmZXJlZF9mcmFtZXMgPSBtdDc2X3JlbGVhc2Vf YnVmZmVyZWRfZnJhbWVzLA0KKwkuZ2V0X3R4cG93ZXIgPSBtdDc2X2dldF90eHBvd2VyLA0KKwku Y2hhbm5lbF9zd2l0Y2hfYmVhY29uID0gbXQ3OTE1X2NoYW5uZWxfc3dpdGNoX2JlYWNvbiwNCisJ LmdldF9zdGF0cyA9IG10NzkxNV9nZXRfc3RhdHMsDQorCS5nZXRfc3VydmV5ID0gbXQ3Nl9nZXRf c3VydmV5LA0KKwkuZ2V0X2FudGVubmEgPSBtdDc2X2dldF9hbnRlbm5hLA0KKwkuc2V0X2FudGVu bmEgPSBtdDc5MTVfc2V0X2FudGVubmEsDQorCS5zZXRfY292ZXJhZ2VfY2xhc3MgPSBtdDc5MTVf c2V0X2NvdmVyYWdlX2NsYXNzLA0KK307DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRp YXRlay9tdDc2L210NzkxNS9tY3UuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw MDAwMDAwMC4uNWNhNmJkOWYwOTljDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93 aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYw0KQEAgLTAsMCArMSwyMzE5IEBADQor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBN ZWRpYVRlayBJbmMuICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+DQorI2luY2x1 ZGUgPGxpbnV4L2ZzLmg+DQorI2luY2x1ZGUgIm10NzkxNS5oIg0KKyNpbmNsdWRlICJtY3UuaCIN CisjaW5jbHVkZSAibWFjLmgiDQorI2luY2x1ZGUgImVlcHJvbS5oIg0KKw0KK3N0cnVjdCBtdDc5 MTVfcGF0Y2hfaGRyIHsNCisJY2hhciBidWlsZF9kYXRlWzE2XTsNCisJY2hhciBwbGF0Zm9ybVs0 XTsNCisJX19iZTMyIGh3X3N3X3ZlcjsNCisJX19iZTMyIHBhdGNoX3ZlcjsNCisJX19iZTE2IGNo ZWNrc3VtOw0KKwl1MTYgcmVzZXJ2ZWQ7DQorCXN0cnVjdCB7DQorCQlfX2JlMzIgcGF0Y2hfdmVy Ow0KKwkJX19iZTMyIHN1YnN5czsNCisJCV9fYmUzMiBmZWF0dXJlOw0KKwkJX19iZTMyIG5fcmVn aW9uOw0KKwkJX19iZTMyIGNyYzsNCisJCXUzMiByZXNlcnZlZFsxMV07DQorCX0gZGVzYzsNCit9 IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBtdDc5MTVfcGF0Y2hfc2VjIHsNCisJX19iZTMyIHR5cGU7 DQorCV9fYmUzMiBvZmZzOw0KKwlfX2JlMzIgc2l6ZTsNCisJdW5pb24gew0KKwkJX19iZTMyIHNw ZWNbMTNdOw0KKwkJc3RydWN0IHsNCisJCQlfX2JlMzIgYWRkcjsNCisJCQlfX2JlMzIgbGVuOw0K KwkJCV9fYmUzMiBzZWNfa2V5X2lkeDsNCisJCQlfX2JlMzIgYWxpZ25fbGVuOw0KKwkJCXUzMiBy ZXNlcnZlZFs5XTsNCisJCX0gaW5mbzsNCisJfTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBt dDc5MTVfZndfdHJhaWxlciB7DQorCXU4IGNoaXBfaWQ7DQorCXU4IGVjb19jb2RlOw0KKwl1OCBu X3JlZ2lvbjsNCisJdTggZm9ybWF0X3ZlcjsNCisJdTggZm9ybWF0X2ZsYWc7DQorCXU4IHJlc2Vy dmVkWzJdOw0KKwljaGFyIGZ3X3ZlclsxMF07DQorCWNoYXIgYnVpbGRfZGF0ZVsxNV07DQorCXUz MiBjcmM7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgbXQ3OTE1X2Z3X3JlZ2lvbiB7DQorCV9f bGUzMiBkZWNvbXBfY3JjOw0KKwlfX2xlMzIgZGVjb21wX2xlbjsNCisJX19sZTMyIGRlY29tcF9i bGtfc3o7DQorCXU4IHJlc2VydmVkWzRdOw0KKwlfX2xlMzIgYWRkcjsNCisJX19sZTMyIGxlbjsN CisJdTggZmVhdHVyZV9zZXQ7DQorCXU4IHJlc2VydmVkMVsxNV07DQorfSBfX3BhY2tlZDsNCisN CisjZGVmaW5lIE1DVV9QQVRDSF9BRERSRVNTCQkweDIwMDAwMA0KKw0KKyNkZWZpbmUgRldfRkVB VFVSRV9TRVRfRU5DUllQVAkJQklUKDApDQorI2RlZmluZSBGV19GRUFUVVJFX1NFVF9LRVlfSURY CQlHRU5NQVNLKDIsIDEpDQorI2RlZmluZSBGV19GRUFUVVJFX09WRVJSSURFX0FERFIJQklUKDUp DQorDQorI2RlZmluZSBETF9NT0RFX0VOQ1JZUFQJCQlCSVQoMCkNCisjZGVmaW5lIERMX01PREVf S0VZX0lEWAkJCUdFTk1BU0soMiwgMSkNCisjZGVmaW5lIERMX01PREVfUkVTRVRfU0VDX0lWCQlC SVQoMykNCisjZGVmaW5lIERMX01PREVfV09SS0lOR19QREFfQ1I0CQlCSVQoNCkNCisjZGVmaW5l IERMX01PREVfTkVFRF9SU1AJCUJJVCgzMSkNCisNCisjZGVmaW5lIEZXX1NUQVJUX09WRVJSSURF CQlCSVQoMCkNCisjZGVmaW5lIEZXX1NUQVJUX1dPUktJTkdfUERBX0NSNAlCSVQoMikNCisNCisj ZGVmaW5lIFBBVENIX1NFQ19UWVBFX01BU0sJCUdFTk1BU0soMTUsIDApDQorI2RlZmluZSBQQVRD SF9TRUNfVFlQRV9JTkZPCQkweDINCisNCisjZGVmaW5lIHRvX3djaWRfbG8oaWQpCQkJRklFTERf R0VUKEdFTk1BU0soNywgMCksICh1MTYpaWQpDQorI2RlZmluZSB0b193Y2lkX2hpKGlkKQkJCUZJ RUxEX0dFVChHRU5NQVNLKDksIDgpLCAodTE2KWlkKQ0KKw0KK3N0YXRpYyBlbnVtIG10NzkxNV9j aXBoZXJfdHlwZQ0KK210NzkxNV9tY3VfZ2V0X2NpcGhlcihpbnQgY2lwaGVyKQ0KK3sNCisJc3dp dGNoIChjaXBoZXIpIHsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoNCisJCXJldHVy biBNVF9DSVBIRVJfV0VQNDA7DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0Og0KKwkJ cmV0dXJuIE1UX0NJUEhFUl9XRVAxMDQ7DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoN CisJCXJldHVybiBNVF9DSVBIRVJfVEtJUDsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNf Q01BQzoNCisJCXJldHVybiBNVF9DSVBIRVJfQklQX0NNQUNfMTI4Ow0KKwljYXNlIFdMQU5fQ0lQ SEVSX1NVSVRFX0NDTVA6DQorCQlyZXR1cm4gTVRfQ0lQSEVSX0FFU19DQ01QOw0KKwljYXNlIFdM QU5fQ0lQSEVSX1NVSVRFX0NDTVBfMjU2Og0KKwkJcmV0dXJuIE1UX0NJUEhFUl9DQ01QXzI1NjsN CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QOg0KKwkJcmV0dXJuIE1UX0NJUEhFUl9HQ01Q Ow0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVBfMjU2Og0KKwkJcmV0dXJuIE1UX0NJUEhF Ul9HQ01QXzI1NjsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9TTVM0Og0KKwkJcmV0dXJuIE1U X0NJUEhFUl9XQVBJOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuIE1UX0NJUEhFUl9OT05FOw0KKwl9 DQorfQ0KKw0KK3N0YXRpYyB1OCBtdDc5MTVfbWN1X2NoYW5fYncoc3RydWN0IGNmZzgwMjExX2No YW5fZGVmICpjaGFuZGVmKQ0KK3sNCisJc3RhdGljIGNvbnN0IHU4IHdpZHRoX3RvX2J3W10gPSB7 DQorCQlbTkw4MDIxMV9DSEFOX1dJRFRIXzQwXSA9IENNRF9DQldfNDBNSFosDQorCQlbTkw4MDIx MV9DSEFOX1dJRFRIXzgwXSA9IENNRF9DQldfODBNSFosDQorCQlbTkw4MDIxMV9DSEFOX1dJRFRI XzgwUDgwXSA9IENNRF9DQldfODA4ME1IWiwNCisJCVtOTDgwMjExX0NIQU5fV0lEVEhfMTYwXSA9 IENNRF9DQldfMTYwTUhaLA0KKwkJW05MODAyMTFfQ0hBTl9XSURUSF81XSA9IENNRF9DQldfNU1I WiwNCisJCVtOTDgwMjExX0NIQU5fV0lEVEhfMTBdID0gQ01EX0NCV18xME1IWiwNCisJCVtOTDgw MjExX0NIQU5fV0lEVEhfMjBdID0gQ01EX0NCV18yME1IWiwNCisJCVtOTDgwMjExX0NIQU5fV0lE VEhfMjBfTk9IVF0gPSBDTURfQ0JXXzIwTUhaLA0KKwl9Ow0KKw0KKwlpZiAoY2hhbmRlZi0+d2lk dGggPj0gQVJSQVlfU0laRSh3aWR0aF90b19idykpDQorCQlyZXR1cm4gMDsNCisNCisJcmV0dXJu IHdpZHRoX3RvX2J3W2NoYW5kZWYtPndpZHRoXTsNCit9DQorDQorc3RhdGljIHU4DQorbXQ3OTE1 X2dldF9waHlfbW9kZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLA0KKwkJICAgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQsIHN0cnVjdCBpZWVlODAyMTFf c3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcDsNCisJ c3RydWN0IGllZWU4MDIxMV9zdGFfdmh0X2NhcCAqdmh0X2NhcDsNCisJdTggbW9kZSA9IDA7DQor DQorCWlmIChzdGEpIHsNCisJCWh0X2NhcCA9ICZzdGEtPmh0X2NhcDsNCisJCXZodF9jYXAgPSAm c3RhLT52aHRfY2FwOw0KKwl9IGVsc2Ugew0KKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRf YmFuZCAqc2JhbmQ7DQorDQorCQlpZiAoYmFuZCA9PSBOTDgwMjExX0JBTkRfMkdIWikNCisJCQlz YmFuZCA9ICZkZXYtPm1waHkuc2JhbmRfMmcuc2JhbmQ7DQorCQllbHNlDQorCQkJc2JhbmQgPSAm ZGV2LT5tcGh5LnNiYW5kXzVnLnNiYW5kOw0KKw0KKwkJaHRfY2FwID0gJnNiYW5kLT5odF9jYXA7 DQorCQl2aHRfY2FwID0gJnNiYW5kLT52aHRfY2FwOw0KKwl9DQorDQorCWlmIChiYW5kID09IE5M ODAyMTFfQkFORF8yR0haKSB7DQorCQltb2RlIHw9IFBIWV9NT0RFX0IgfCBQSFlfTU9ERV9HOw0K Kw0KKwkJaWYgKGh0X2NhcC0+aHRfc3VwcG9ydGVkKQ0KKwkJCW1vZGUgfD0gUEhZX01PREVfR047 DQorCX0gZWxzZSBpZiAoYmFuZCA9PSBOTDgwMjExX0JBTkRfNUdIWikgew0KKwkJbW9kZSB8PSBQ SFlfTU9ERV9BOw0KKw0KKwkJaWYgKGh0X2NhcC0+aHRfc3VwcG9ydGVkKQ0KKwkJCW1vZGUgfD0g UEhZX01PREVfQU47DQorDQorCQlpZiAodmh0X2NhcC0+dmh0X3N1cHBvcnRlZCkNCisJCQltb2Rl IHw9IFBIWV9NT0RFX0FDOw0KKwl9DQorDQorCXJldHVybiBtb2RlOw0KK30NCisNCitzdGF0aWMg aW50IF9fbXQ3OTE1X21jdV9tc2dfc2VuZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiLA0KKwkJCQkgaW50IGNtZCwgaW50ICp3YWl0X3NlcSkNCit7DQorCXN0cnVj dCBtdDc5MTVfbWN1X3R4ZCAqbWN1X3R4ZDsNCisJdTggc2VxLCBwa3RfZm10LCBxaWR4Ow0KKwll bnVtIG10NzkxNV90eHFfaWQgdHhxOw0KKwlfX2xlMzIgKnR4ZDsNCisJdTMyIHZhbDsNCisNCisJ c2VxID0gKytkZXYtPm10NzYubWN1Lm1zZ19zZXEgJiAweGY7DQorCWlmICghc2VxKQ0KKwkJc2Vx ID0gKytkZXYtPm10NzYubWN1Lm1zZ19zZXEgJiAweGY7DQorDQorCWlmIChjbWQgPT0gLU1DVV9D TURfRldfU0NBVFRFUikgew0KKwkJdHhxID0gTVRfVFhRX0ZXREw7DQorCQlnb3RvIGV4aXQ7DQor CX0NCisNCisJbWN1X3R4ZCA9IChzdHJ1Y3QgbXQ3OTE1X21jdV90eGQgKilza2JfcHVzaChza2Is IHNpemVvZigqbWN1X3R4ZCkpOw0KKw0KKwlpZiAodGVzdF9iaXQoTVQ3Nl9TVEFURV9NQ1VfUlVO TklORywgJmRldi0+bXBoeS5zdGF0ZSkpIHsNCisJCXR4cSA9IE1UX1RYUV9NQ1VfV0E7DQorCQlx aWR4ID0gTVRfVFhfTUNVX1BPUlRfUlhfUTA7DQorCQlwa3RfZm10ID0gTVRfVFhfVFlQRV9DTUQ7 DQorCX0gZWxzZSB7DQorCQl0eHEgPSBNVF9UWFFfTUNVOw0KKwkJcWlkeCA9IE1UX1RYX01DVV9Q T1JUX1JYX1EwOw0KKwkJcGt0X2ZtdCA9IE1UX1RYX1RZUEVfQ01EOw0KKwl9DQorDQorCXR4ZCA9 IG1jdV90eGQtPnR4ZDsNCisNCisJdmFsID0gRklFTERfUFJFUChNVF9UWEQwX1RYX0JZVEVTLCBz a2ItPmxlbikgfA0KKwkgICAgICBGSUVMRF9QUkVQKE1UX1RYRDBfUEtUX0ZNVCwgcGt0X2ZtdCkg fA0KKwkgICAgICBGSUVMRF9QUkVQKE1UX1RYRDBfUV9JRFgsIHFpZHgpOw0KKwl0eGRbMF0gPSBj cHVfdG9fbGUzMih2YWwpOw0KKw0KKwl2YWwgPSBNVF9UWEQxX0xPTkdfRk9STUFUIHwNCisJICAg ICAgRklFTERfUFJFUChNVF9UWEQxX0hEUl9GT1JNQVQsIE1UX0hEUl9GT1JNQVRfQ01EKTsNCisJ dHhkWzFdID0gY3B1X3RvX2xlMzIodmFsKTsNCisNCisJbWN1X3R4ZC0+bGVuID0gY3B1X3RvX2xl MTYoc2tiLT5sZW4gLSBzaXplb2YobWN1X3R4ZC0+dHhkKSk7DQorCW1jdV90eGQtPnBxX2lkID0g Y3B1X3RvX2xlMTYoTUNVX1BRX0lEKE1UX1RYX1BPUlRfSURYX01DVSwgcWlkeCkpOw0KKwltY3Vf dHhkLT5wa3RfdHlwZSA9IE1DVV9QS1RfSUQ7DQorCW1jdV90eGQtPnNlcSA9IHNlcTsNCisNCisJ aWYgKGNtZCA8IDApIHsNCisJCW1jdV90eGQtPnNldF9xdWVyeSA9IE1DVV9RX05BOw0KKwkJbWN1 X3R4ZC0+Y2lkID0gLWNtZDsNCisJfSBlbHNlIHsNCisJCW1jdV90eGQtPmNpZCA9IE1DVV9DTURf RVhUX0NJRDsNCisJCW1jdV90eGQtPmV4dF9jaWQgPSBjbWQ7DQorCQltY3VfdHhkLT5leHRfY2lk X2FjayA9IDE7DQorDQorCQkvKiBkbyBub3QgdXNlIFFfU0VUIGZvciBlZnVzZSAqLw0KKwkJaWYg KGNtZCA9PSBNQ1VfRVhUX0NNRF9FRlVTRV9BQ0NFU1MpDQorCQkJbWN1X3R4ZC0+c2V0X3F1ZXJ5 ID0gTUNVX1FfUVVFUlk7DQorCQllbHNlDQorCQkJbWN1X3R4ZC0+c2V0X3F1ZXJ5ID0gTUNVX1Ff U0VUOw0KKwl9DQorDQorCW1jdV90eGQtPnMyZF9pbmRleCA9IE1DVV9TMkRfSDJOOw0KKwlCVUlM RF9CVUdfT04oY21kID09IE1DVV9FWFRfQ01EX0VGVVNFX0FDQ0VTUyAmJg0KKwkJICAgICBtY3Vf dHhkLT5zZXRfcXVlcnkgIT0gTUNVX1FfUVVFUlkpOw0KKw0KK2V4aXQ6DQorCWlmICh3YWl0X3Nl cSkNCisJCSp3YWl0X3NlcSA9IHNlcTsNCisNCisJcmV0dXJuIG10NzZfdHhfcXVldWVfc2tiX3Jh dyhkZXYsIHR4cSwgc2tiLCAwKTsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9tY3VfcGFy c2VfZWVwcm9tKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpDQor ew0KKwlzdHJ1Y3QgbXQ3OTE1X21jdV9lZXByb21faW5mbyAqcmVzOw0KKwl1OCAqYnVmOw0KKw0K KwlpZiAoIXNrYikNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlza2JfcHVsbChza2IsIHNpemVv ZihzdHJ1Y3QgbXQ3OTE1X21jdV9yeGQpKTsNCisNCisJcmVzID0gKHN0cnVjdCBtdDc5MTVfbWN1 X2VlcHJvbV9pbmZvICopc2tiLT5kYXRhOw0KKwlidWYgPSBkZXYtPm10NzYuZWVwcm9tLmRhdGEg KyBsZTMyX3RvX2NwdShyZXMtPmFkZHIpOw0KKwltZW1jcHkoYnVmLCByZXMtPmRhdGEsIDE2KTsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfbWN1X3BhcnNlX3Jl c3BvbnNlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGludCBjbWQsDQorCQkJICBzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCBpbnQgc2VxKQ0KK3sNCisJc3RydWN0IG10NzkxNV9tY3VfcnhkICpyeGQgPSAo c3RydWN0IG10NzkxNV9tY3VfcnhkICopc2tiLT5kYXRhOw0KKwlpbnQgcmV0ID0gMDsNCisNCisJ aWYgKHNlcSAhPSByeGQtPnNlcSkNCisJCXJldHVybiAtRUFHQUlOOw0KKw0KKwlzd2l0Y2ggKGNt ZCkgew0KKwljYXNlIC1NQ1VfQ01EX1BBVENIX1NFTV9DT05UUk9MOg0KKwkJc2tiX3B1bGwoc2ti LCBzaXplb2YoKnJ4ZCkgLSA0KTsNCisJCXJldCA9ICpza2ItPmRhdGE7DQorCQlicmVhazsNCisJ Y2FzZSBNQ1VfRVhUX0NNRF9USEVSTUFMX0NUUkw6DQorCQlza2JfcHVsbChza2IsIHNpemVvZigq cnhkKSArIDQpOw0KKwkJcmV0ID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilza2ItPmRhdGEpOw0K KwkJYnJlYWs7DQorCWNhc2UgTUNVX0VYVF9DTURfRUZVU0VfQUNDRVNTOg0KKwkJcmV0ID0gbXQ3 OTE1X21jdV9wYXJzZV9lZXByb20oZGV2LCBza2IpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQor CQlicmVhazsNCisJfQ0KKwlkZXZfa2ZyZWVfc2tiKHNrYik7DQorDQorCXJldHVybiByZXQ7DQor fQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfbWN1X3dhaXRfcmVzcG9uc2Uoc3RydWN0IG10Nzkx NV9kZXYgKmRldiwgaW50IGNtZCwgaW50IHNlcSkNCit7DQorCXVuc2lnbmVkIGxvbmcgZXhwaXJl cyA9IGppZmZpZXMgKyAyMCAqIEhaOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKwlpbnQgcmV0 ID0gMDsNCisNCisJd2hpbGUgKHRydWUpIHsNCisJCXNrYiA9IG10NzZfbWN1X2dldF9yZXNwb25z ZSgmZGV2LT5tdDc2LCBleHBpcmVzKTsNCisJCWlmICghc2tiKSB7DQorCQkJZGV2X2VycihkZXYt Pm10NzYuZGV2LCAiTWVzc2FnZSAlZCAoc2VxICVkKSB0aW1lb3V0XG4iLA0KKwkJCQljbWQsIHNl cSk7DQorCQkJcmV0dXJuIC1FVElNRURPVVQ7DQorCQl9DQorDQorCQlyZXQgPSBtdDc5MTVfbWN1 X3BhcnNlX3Jlc3BvbnNlKGRldiwgY21kLCBza2IsIHNlcSk7DQorCQlpZiAocmV0ICE9IC1FQUdB SU4pDQorCQkJYnJlYWs7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGlu dA0KK210NzkxNV9tY3Vfc2VuZF9tZXNzYWdlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgc3RydWN0 IHNrX2J1ZmYgKnNrYiwNCisJCQlpbnQgY21kLCBib29sIHdhaXRfcmVzcCkNCit7DQorCXN0cnVj dCBtdDc5MTVfZGV2ICpkZXYgPSBjb250YWluZXJfb2YobWRldiwgc3RydWN0IG10NzkxNV9kZXYs IG10NzYpOw0KKwlpbnQgcmV0LCBzZXE7DQorDQorCW11dGV4X2xvY2soJm1kZXYtPm1jdS5tdXRl eCk7DQorDQorCXJldCA9IF9fbXQ3OTE1X21jdV9tc2dfc2VuZChkZXYsIHNrYiwgY21kLCAmc2Vx KTsNCisJaWYgKHJldCkNCisJCWdvdG8gb3V0Ow0KKw0KKwlpZiAod2FpdF9yZXNwKQ0KKwkJcmV0 ID0gbXQ3OTE1X21jdV93YWl0X3Jlc3BvbnNlKGRldiwgY21kLCBzZXEpOw0KKw0KK291dDoNCisJ bXV0ZXhfdW5sb2NrKCZtZGV2LT5tY3UubXV0ZXgpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisN CitzdGF0aWMgaW50DQorbXQ3OTE1X21jdV9tc2dfc2VuZChzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYs IGludCBjbWQsIGNvbnN0IHZvaWQgKmRhdGEsDQorCQkgICAgaW50IGxlbiwgYm9vbCB3YWl0X3Jl c3ApDQorew0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKw0KKwlza2IgPSBtdDc2X21jdV9tc2df YWxsb2MobWRldiwgZGF0YSwgbGVuKTsNCisJaWYgKCFza2IpDQorCQlyZXR1cm4gLUVOT01FTTsN CisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2tiX3NlbmRfbXNnKG1kZXYsIHNrYiwgY21kLCB3YWl0 X3Jlc3ApOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3VfY3NhX2ZpbmlzaCh2b2lk ICpwcml2LCB1OCAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KK3sNCisJaWYgKHZp Zi0+Y3NhX2FjdGl2ZSkNCisJCWllZWU4MDIxMV9jc2FfZmluaXNoKHZpZik7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9yeF9yYWRhcl9kZXRlY3RlZChzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG10NzZfcGh5ICptcGh5 ID0gJmRldi0+bXQ3Ni5waHk7DQorCXN0cnVjdCBtdDc5MTVfbWN1X3JkZF9yZXBvcnQgKnI7DQor DQorCXIgPSAoc3RydWN0IG10NzkxNV9tY3VfcmRkX3JlcG9ydCAqKXNrYi0+ZGF0YTsNCisNCisJ aWYgKHItPmlkeCAmJiBkZXYtPm10NzYucGh5MikNCisJCW1waHkgPSBkZXYtPm10NzYucGh5MjsN CisNCisJaWVlZTgwMjExX3JhZGFyX2RldGVjdGVkKG1waHktPmh3KTsNCisJZGV2LT5od19wYXR0 ZXJuKys7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV90eF9yYXRlX2NhbChzdHJ1 Y3QgbXQ3Nl9waHkgKm1waHksIHN0cnVjdCBtdDc5MTVfbWN1X3JhX2luZm8gKnJhLA0KKwkJICAg ICAgIHN0cnVjdCByYXRlX2luZm8gKnJhdGUsIHUxNiByKQ0KK3sNCisJc3RydWN0IGllZWU4MDIx MV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7DQorCXUxNiBydV9pZHggPSBsZTE2X3RvX2NwdShyYS0+ cnVfaWR4KTsNCisJdTE2IGZsYWdzID0gMDsNCisNCisJcmF0ZS0+bWNzID0gRklFTERfR0VUKE1U X1JBX1JBVEVfTUNTLCByKTsNCisJcmF0ZS0+bnNzID0gRklFTERfR0VUKE1UX1JBX1JBVEVfTlNT LCByKSArIDE7DQorDQorCXN3aXRjaCAoRklFTERfR0VUKE1UX1JBX1JBVEVfVFhfTU9ERSwgcikp IHsNCisJY2FzZSBNVF9QSFlfVFlQRV9DQ0s6DQorCWNhc2UgTVRfUEhZX1RZUEVfT0ZETToNCisJ CWlmIChtcGh5LT5jaGFuZGVmLmNoYW4tPmJhbmQgPT0gTkw4MDIxMV9CQU5EXzVHSFopDQorCQkJ c2JhbmQgPSAmbXBoeS0+c2JhbmRfNWcuc2JhbmQ7DQorCQllbHNlDQorCQkJc2JhbmQgPSAmbXBo eS0+c2JhbmRfMmcuc2JhbmQ7DQorDQorCQlyYXRlLT5sZWdhY3kgPSBzYmFuZC0+Yml0cmF0ZXNb cmF0ZS0+bWNzXS5iaXRyYXRlOw0KKwkJYnJlYWs7DQorCWNhc2UgTVRfUEhZX1RZUEVfSFQ6DQor CWNhc2UgTVRfUEhZX1RZUEVfSFRfR0Y6DQorCQlyYXRlLT5tY3MgKz0gKHJhdGUtPm5zcyAtIDEp ICogODsNCisJCWZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU19NQ1M7DQorDQorCQlpZiAocmEtPmdp KQ0KKwkJCWZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU19TSE9SVF9HSTsNCisJCWJyZWFrOw0KKwlj YXNlIE1UX1BIWV9UWVBFX1ZIVDoNCisJCWZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU19WSFRfTUNT Ow0KKw0KKwkJaWYgKHJhLT5naSkNCisJCQlmbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfU0hPUlRf R0k7DQorCQlicmVhazsNCisJY2FzZSBNVF9QSFlfVFlQRV9IRV9TVToNCisJY2FzZSBNVF9QSFlf VFlQRV9IRV9FWFRfU1U6DQorCWNhc2UgTVRfUEhZX1RZUEVfSEVfVEI6DQorCWNhc2UgTVRfUEhZ X1RZUEVfSEVfTVU6DQorCQlyYXRlLT5oZV9naSA9IHJhLT5naTsNCisJCXJhdGUtPmhlX2RjbSA9 IEZJRUxEX0dFVChNVF9SQV9SQVRFX0RDTV9FTiwgcik7DQorDQorCQlmbGFncyB8PSBSQVRFX0lO Rk9fRkxBR1NfSEVfTUNTOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlicmVhazsNCisJfQ0K KwlyYXRlLT5mbGFncyA9IGZsYWdzOw0KKw0KKwlpZiAocnVfaWR4KSB7DQorCQlzd2l0Y2ggKHJ1 X2lkeCkgew0KKwkJY2FzZSAxIC4uLiAyOg0KKwkJCXJhdGUtPmhlX3J1X2FsbG9jID0gTkw4MDIx MV9SQVRFX0lORk9fSEVfUlVfQUxMT0NfOTk2Ow0KKwkJCWJyZWFrOw0KKwkJY2FzZSAzIC4uLiA2 Og0KKwkJCXJhdGUtPmhlX3J1X2FsbG9jID0gTkw4MDIxMV9SQVRFX0lORk9fSEVfUlVfQUxMT0Nf NDg0Ow0KKwkJCWJyZWFrOw0KKwkJY2FzZSA3IC4uLiAxNDoNCisJCQlyYXRlLT5oZV9ydV9hbGxv YyA9IE5MODAyMTFfUkFURV9JTkZPX0hFX1JVX0FMTE9DXzI0MjsNCisJCQlicmVhazsNCisJCWRl ZmF1bHQ6DQorCQkJcmF0ZS0+aGVfcnVfYWxsb2MgPSBOTDgwMjExX1JBVEVfSU5GT19IRV9SVV9B TExPQ18xMDY7DQorCQkJYnJlYWs7DQorCQl9DQorCQlyYXRlLT5idyA9IFJBVEVfSU5GT19CV19I RV9SVTsNCisJfSBlbHNlIHsNCisJCXU4IGJ3ID0gbXQ3OTE1X21jdV9jaGFuX2J3KCZtcGh5LT5j aGFuZGVmKSAtDQorCQkJRklFTERfR0VUKE1UX1JBX1JBVEVfQlcsIHIpOw0KKw0KKwkJc3dpdGNo IChidykgew0KKwkJY2FzZSBJRUVFODAyMTFfU1RBX1JYX0JXXzE2MDoNCisJCQlyYXRlLT5idyA9 IFJBVEVfSU5GT19CV18xNjA7DQorCQkJYnJlYWs7DQorCQljYXNlIElFRUU4MDIxMV9TVEFfUlhf QldfODA6DQorCQkJcmF0ZS0+YncgPSBSQVRFX0lORk9fQldfODA7DQorCQkJYnJlYWs7DQorCQlj YXNlIElFRUU4MDIxMV9TVEFfUlhfQldfNDA6DQorCQkJcmF0ZS0+YncgPSBSQVRFX0lORk9fQldf NDA7DQorCQkJYnJlYWs7DQorCQlkZWZhdWx0Og0KKwkJCXJhdGUtPmJ3ID0gUkFURV9JTkZPX0JX XzIwOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1 X21jdV90eF9yYXRlX3JlcG9ydChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiKQ0KK3sNCisJc3RydWN0IG10NzkxNV9tY3VfcmFfaW5mbyAqcmEgPSAoc3RydWN0IG10 NzkxNV9tY3VfcmFfaW5mbyAqKXNrYi0+ZGF0YTsNCisJdTE2IHdjaWR4ID0gbGUxNl90b19jcHUo cmEtPndsYW5faWR4KTsNCisJc3RydWN0IG10NzZfd2NpZCAqd2NpZCA9IHJjdV9kZXJlZmVyZW5j ZShkZXYtPm10NzYud2NpZFt3Y2lkeF0pOw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YSA9IGNv bnRhaW5lcl9vZih3Y2lkLCBzdHJ1Y3QgbXQ3OTE1X3N0YSwgd2NpZCk7DQorCXN0cnVjdCBtdDc5 MTVfc3RhX3N0YXRzICpzdGF0cyA9ICZtc3RhLT5zdGF0czsNCisJc3RydWN0IG10NzZfcGh5ICpt cGh5ID0gJmRldi0+bXBoeTsNCisJc3RydWN0IHJhdGVfaW5mbyByYXRlID0ge30sIHByb2JfcmF0 ZSA9IHt9Ow0KKwl1MTYgYXR0ZW1wdHMgPSBsZTE2X3RvX2NwdShyYS0+YXR0ZW1wdHMpOw0KKwl1 MTYgY3VyciA9IGxlMTZfdG9fY3B1KHJhLT5jdXJyX3JhdGUpOw0KKwl1MTYgcHJvYmUgPSBsZTE2 X3RvX2NwdShyYS0+cHJvYl91cF9yYXRlKTsNCisNCisJaWYgKG1zdGEtPndjaWQuZXh0X3BoeSAm JiBkZXYtPm10NzYucGh5MikNCisJCW1waHkgPSBkZXYtPm10NzYucGh5MjsNCisNCisJLyogY3Vy cmVudCByYXRlICovDQorCW10NzkxNV9tY3VfdHhfcmF0ZV9jYWwobXBoeSwgcmEsICZyYXRlLCBj dXJyKTsNCisJc3RhdHMtPnR4X3JhdGUgPSByYXRlOw0KKw0KKwkvKiBwcm9iaW5nIHJhdGUgKi8N CisJbXQ3OTE1X21jdV90eF9yYXRlX2NhbChtcGh5LCByYSwgJnByb2JfcmF0ZSwgcHJvYmUpOw0K KwlzdGF0cy0+cHJvYl9yYXRlID0gcHJvYl9yYXRlOw0KKw0KKwlpZiAoYXR0ZW1wdHMpIHsNCisJ CXUxNiBzdWNjZXNzID0gbGUxNl90b19jcHUocmEtPnN1Y2Nlc3MpOw0KKw0KKwkJc3RhdHMtPnBl ciA9IDEwMDAgKiAoYXR0ZW1wdHMgLSBzdWNjZXNzKSAvIGF0dGVtcHRzOw0KKwl9DQorfQ0KKw0K K3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9yeF9leHRfZXZlbnQoc3RydWN0IG10NzkxNV9kZXYg KmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBtdDc5MTVfbWN1X3J4ZCAq cnhkID0gKHN0cnVjdCBtdDc5MTVfbWN1X3J4ZCAqKXNrYi0+ZGF0YTsNCisNCisJc3dpdGNoIChy eGQtPmV4dF9laWQpIHsNCisJY2FzZSBNQ1VfRVhUX0VWRU5UX1JERF9SRVBPUlQ6DQorCQltdDc5 MTVfbWN1X3J4X3JhZGFyX2RldGVjdGVkKGRldiwgc2tiKTsNCisJCWJyZWFrOw0KKwljYXNlIE1D VV9FWFRfRVZFTlRfQ1NBX05PVElGWToNCisJCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRl cmZhY2VzX2F0b21pYyhkZXYtPm10NzYuaHcsDQorCQkJCUlFRUU4MDIxMV9JRkFDRV9JVEVSX1JF U1VNRV9BTEwsDQorCQkJCW10NzkxNV9tY3VfY3NhX2ZpbmlzaCwgZGV2KTsNCisJCWJyZWFrOw0K KwljYXNlIE1DVV9FWFRfRVZFTlRfUkFURV9SRVBPUlQ6DQorCQltdDc5MTVfbWN1X3R4X3JhdGVf cmVwb3J0KGRldiwgc2tiKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQorCX0N Cit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X3J4X3Vuc29saWNpdGVkX2V2ZW50KHN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3Qg bXQ3OTE1X21jdV9yeGQgKnJ4ZCA9IChzdHJ1Y3QgbXQ3OTE1X21jdV9yeGQgKilza2ItPmRhdGE7 DQorDQorCXN3aXRjaCAocnhkLT5laWQpIHsNCisJY2FzZSBNQ1VfRVZFTlRfRVhUOg0KKwkJbXQ3 OTE1X21jdV9yeF9leHRfZXZlbnQoZGV2LCBza2IpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQor CQlicmVhazsNCisJfQ0KKwlkZXZfa2ZyZWVfc2tiKHNrYik7DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1 X21jdV9yeF9ldmVudChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2ti KQ0KK3sNCisJc3RydWN0IG10NzkxNV9tY3VfcnhkICpyeGQgPSAoc3RydWN0IG10NzkxNV9tY3Vf cnhkICopc2tiLT5kYXRhOw0KKw0KKwlpZiAocnhkLT5leHRfZWlkID09IE1DVV9FWFRfRVZFTlRf VEhFUk1BTF9QUk9URUNUIHx8DQorCSAgICByeGQtPmV4dF9laWQgPT0gTUNVX0VYVF9FVkVOVF9B U1NFUlRfRFVNUCB8fA0KKwkgICAgcnhkLT5leHRfZWlkID09IE1DVV9FWFRfRVZFTlRfUFNfU1lO QyB8fA0KKwkgICAgcnhkLT5leHRfZWlkID09IE1DVV9FWFRfRVZFTlRfUkFURV9SRVBPUlQgfHwN CisJICAgICFyeGQtPnNlcSkNCisJCW10NzkxNV9tY3VfcnhfdW5zb2xpY2l0ZWRfZXZlbnQoZGV2 LCBza2IpOw0KKwllbHNlDQorCQltdDc2X21jdV9yeF9ldmVudCgmZGV2LT5tdDc2LCBza2IpOw0K K30NCisNCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKg0KK210NzkxNV9tY3VfYWxsb2Nfc3RhX3Jl cShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiwNCisJCQkg c3RydWN0IG10NzkxNV9zdGEgKm1zdGEsIGludCBsZW4pDQorew0KKwlzdHJ1Y3Qgc3RhX3JlcV9o ZHIgaGRyID0gew0KKwkJLmJzc19pZHggPSBtdmlmLT5pZHgsDQorCQkud2xhbl9pZHhfbG8gPSBt c3RhID8gdG9fd2NpZF9sbyhtc3RhLT53Y2lkLmlkeCkgOiAwLA0KKwkJLndsYW5faWR4X2hpID0g bXN0YSA/IHRvX3djaWRfaGkobXN0YS0+d2NpZC5pZHgpIDogMCwNCisJCS5tdWFyX2lkeCA9IG1z dGEgPyBtdmlmLT5vbWFjX2lkeCA6IDAsDQorCQkuaXNfdGx2X2FwcGVuZCA9IDEsDQorCX07DQor CXN0cnVjdCBza19idWZmICpza2I7DQorDQorCXNrYiA9IG10NzZfbWN1X21zZ19hbGxvYygmZGV2 LT5tdDc2LCBOVUxMLCBsZW4pOw0KKwlpZiAoIXNrYikNCisJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOw0KKw0KKwlza2JfcHV0X2RhdGEoc2tiLCAmaGRyLCBzaXplb2YoaGRyKSk7DQorDQorCXJl dHVybiBza2I7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3Qgd3RibF9yZXFfaGRyICoNCittdDc5MTVf bWN1X2FsbG9jX3d0YmxfcmVxKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MTVf c3RhICptc3RhLA0KKwkJCSAgaW50IGNtZCwgdm9pZCAqc3RhX3d0YmwsIHN0cnVjdCBza19idWZm ICoqc2tiKQ0KK3sNCisJc3RydWN0IHRsdiAqc3RhX2hkciA9IHN0YV93dGJsOw0KKwlzdHJ1Y3Qg d3RibF9yZXFfaGRyIGhkciA9IHsNCisJCS53bGFuX2lkeF9sbyA9IHRvX3djaWRfbG8obXN0YS0+ d2NpZC5pZHgpLA0KKwkJLndsYW5faWR4X2hpID0gdG9fd2NpZF9oaShtc3RhLT53Y2lkLmlkeCks DQorCQkub3BlcmF0aW9uID0gY21kLA0KKwl9Ow0KKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9ICpz a2I7DQorDQorCWlmICghbnNrYikgew0KKwkJbnNrYiA9IG10NzZfbWN1X21zZ19hbGxvYygmZGV2 LT5tdDc2LCBOVUxMLA0KKwkJCQkJICBNVDc5MTVfV1RCTF9VUERBVEVfQkFfU0laRSk7DQorCQlp ZiAoIW5za2IpDQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQorDQorCQkqc2tiID0gbnNr YjsNCisJfQ0KKw0KKwlpZiAoc3RhX2hkcikNCisJCXN0YV9oZHItPmxlbiA9IGNwdV90b19sZTE2 KHNpemVvZihoZHIpKTsNCisNCisJcmV0dXJuIHNrYl9wdXRfZGF0YShuc2tiLCAmaGRyLCBzaXpl b2YoaGRyKSk7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgdGx2ICoNCittdDc5MTVfbWN1X2FkZF9u ZXN0ZWRfdGx2KHN0cnVjdCBza19idWZmICpza2IsIGludCB0YWcsIGludCBsZW4sDQorCQkJICB2 b2lkICpzdGFfbnRsdiwgdm9pZCAqc3RhX3d0YmwpDQorew0KKwlzdHJ1Y3Qgc3RhX250bHZfaGRy ICpudGx2X2hkciA9IHN0YV9udGx2Ow0KKwlzdHJ1Y3QgdGx2ICpzdGFfaGRyID0gc3RhX3d0Ymw7 DQorCXN0cnVjdCB0bHYgKnB0bHYsIHRsdiA9IHsNCisJCS50YWcgPSBjcHVfdG9fbGUxNih0YWcp LA0KKwkJLmxlbiA9IGNwdV90b19sZTE2KGxlbiksDQorCX07DQorCXUxNiBudGx2Ow0KKw0KKwlw dGx2ID0gc2tiX3B1dChza2IsIGxlbik7DQorCW1lbWNweShwdGx2LCAmdGx2LCBzaXplb2YodGx2 KSk7DQorDQorCW50bHYgPSBsZTE2X3RvX2NwdShudGx2X2hkci0+dGx2X251bSk7DQorCW50bHZf aGRyLT50bHZfbnVtID0gY3B1X3RvX2xlMTYobnRsdiArIDEpOw0KKw0KKwlpZiAoc3RhX2hkcikg ew0KKwkJdTE2IHNpemUgPSBsZTE2X3RvX2NwdShzdGFfaGRyLT5sZW4pOw0KKw0KKwkJc3RhX2hk ci0+bGVuID0gY3B1X3RvX2xlMTYoc2l6ZSArIGxlbik7DQorCX0NCisNCisJcmV0dXJuIHB0bHY7 DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgdGx2ICoNCittdDc5MTVfbWN1X2FkZF90bHYoc3RydWN0 IHNrX2J1ZmYgKnNrYiwgaW50IHRhZywgaW50IGxlbikNCit7DQorCXJldHVybiBtdDc5MTVfbWN1 X2FkZF9uZXN0ZWRfdGx2KHNrYiwgdGFnLCBsZW4sIHNrYi0+ZGF0YSwgTlVMTCk7DQorfQ0KKw0K K3N0YXRpYyBzdHJ1Y3QgdGx2ICoNCittdDc5MTVfbWN1X2FkZF9uZXN0ZWRfc3VidGx2KHN0cnVj dCBza19idWZmICpza2IsIGludCBzdWJfdGFnLCBpbnQgc3ViX2xlbiwNCisJCQkgICAgIF9fbGUx NiAqc3ViX250bHYsIF9fbGUxNiAqbGVuKQ0KK3sNCisJc3RydWN0IHRsdiAqcHRsdiwgdGx2ID0g ew0KKwkJLnRhZyA9IGNwdV90b19sZTE2KHN1Yl90YWcpLA0KKwkJLmxlbiA9IGNwdV90b19sZTE2 KHN1Yl9sZW4pLA0KKwl9Ow0KKw0KKwlwdGx2ID0gc2tiX3B1dChza2IsIHN1Yl9sZW4pOw0KKwlt ZW1jcHkocHRsdiwgJnRsdiwgc2l6ZW9mKHRsdikpOw0KKw0KKwkqc3ViX250bHYgPSBjcHVfdG9f bGUxNihsZTE2X3RvX2NwdSgqc3ViX250bHYpICsgMSk7DQorCSpsZW4gPSBjcHVfdG9fbGUxNihs ZTE2X3RvX2NwdSgqbGVuKSArIHN1Yl9sZW4pOw0KKw0KKwlyZXR1cm4gcHRsdjsNCit9DQorDQor LyoqIGJzcyBpbmZvICoqLw0KK3N0YXRpYyBpbnQNCittdDc5MTVfbWN1X2Jzc19iYXNpY190bHYo c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgc3Ry dWN0IG10NzkxNV9waHkgKnBoeSwgYm9vbCBlbmFibGUpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3Zp ZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBj Zmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZiA9ICZwaHktPm10NzYtPmNoYW5kZWY7DQorCWVudW0g bmw4MDIxMV9iYW5kIGJhbmQgPSBjaGFuZGVmLT5jaGFuLT5iYW5kOw0KKwlzdHJ1Y3QgYnNzX2lu Zm9fYmFzaWMgKmJzczsNCisJdTE2IHdsYW5faWR4ID0gbXZpZi0+c3RhLndjaWQuaWR4Ow0KKwl1 MzIgdHlwZSA9IE5FVFdPUktfSU5GUkE7DQorCXN0cnVjdCB0bHYgKnRsdjsNCisNCisJdGx2ID0g bXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgQlNTX0lORk9fQkFTSUMsIHNpemVvZigqYnNzKSk7DQor DQorCXN3aXRjaCAodmlmLT50eXBlKSB7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lO VDoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoNCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFf SUZUWVBFX1NUQVRJT046DQorCQkvKiBUT0RPOiBlbmFibGUgQlNTX0lORk9fVUFQU0QgJiBCU1Nf SU5GT19QTSAqLw0KKwkJaWYgKGVuYWJsZSkgew0KKwkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpz dGE7DQorCQkJc3RydWN0IG10NzkxNV9zdGEgKm1zdGE7DQorDQorCQkJcmN1X3JlYWRfbG9jaygp Ow0KKwkJCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIHZpZi0+YnNzX2NvbmYuYnNzaWQp Ow0KKwkJCWlmICghc3RhKSB7DQorCQkJCXJjdV9yZWFkX3VubG9jaygpOw0KKwkJCQlyZXR1cm4g LUVJTlZBTDsNCisJCQl9DQorDQorCQkJbXN0YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXN0YS0+ ZHJ2X3ByaXY7DQorCQkJd2xhbl9pZHggPSBtc3RhLT53Y2lkLmlkeDsNCisJCQlyY3VfcmVhZF91 bmxvY2soKTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOg0K KwkJdHlwZSA9IE5FVFdPUktfSUJTUzsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJV0FSTl9P TigxKTsNCisJCWJyZWFrOw0KKwl9DQorDQorCWJzcyA9IChzdHJ1Y3QgYnNzX2luZm9fYmFzaWMg Kil0bHY7DQorCW1lbWNweShic3MtPmJzc2lkLCB2aWYtPmJzc19jb25mLmJzc2lkLCBFVEhfQUxF Tik7DQorCWJzcy0+YmNuX2ludGVydmFsID0gY3B1X3RvX2xlMTYodmlmLT5ic3NfY29uZi5iZWFj b25faW50KTsNCisJYnNzLT5uZXR3b3JrX3R5cGUgPSBjcHVfdG9fbGUzMih0eXBlKTsNCisJYnNz LT5kdGltX3BlcmlvZCA9IHZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2Q7DQorCWJzcy0+Ym1jX3dj aWRfbG8gPSB0b193Y2lkX2xvKHdsYW5faWR4KTsNCisJYnNzLT5ibWNfd2NpZF9oaSA9IHRvX3dj aWRfaGkod2xhbl9pZHgpOw0KKwlic3MtPnBoeV9tb2RlID0gbXQ3OTE1X2dldF9waHlfbW9kZShw aHktPmRldiwgdmlmLCBiYW5kLCBOVUxMKTsNCisJYnNzLT53bW1faWR4ID0gbXZpZi0+d21tX2lk eDsNCisJYnNzLT5hY3RpdmUgPSBlbmFibGU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgdm9pZA0KK210NzkxNV9tY3VfYnNzX29tYWNfdGx2KHN0cnVjdCBza19idWZmICpza2IsIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9 IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBic3NfaW5mb19v bWFjICpvbWFjOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorCXUzMiB0eXBlID0gMDsNCisJdTggaWR4 Ow0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBCU1NfSU5GT19PTUFDLCBzaXpl b2YoKm9tYWMpKTsNCisNCisJc3dpdGNoICh2aWYtPnR5cGUpIHsNCisJY2FzZSBOTDgwMjExX0lG VFlQRV9NRVNIX1BPSU5UOg0KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOg0KKwkJdHlwZSA9IENP Tk5FQ1RJT05fSU5GUkFfQVA7DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFU SU9OOg0KKwkJdHlwZSA9IENPTk5FQ1RJT05fSU5GUkFfU1RBOw0KKwkJYnJlYWs7DQorCWNhc2Ug Tkw4MDIxMV9JRlRZUEVfQURIT0M6DQorCQl0eXBlID0gQ09OTkVDVElPTl9JQlNTX0FESE9DOw0K KwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlXQVJOX09OKDEpOw0KKwkJYnJlYWs7DQorCX0NCisN CisJb21hYyA9IChzdHJ1Y3QgYnNzX2luZm9fb21hYyAqKXRsdjsNCisJaWR4ID0gbXZpZi0+b21h Y19pZHggPiBFWFRfQlNTSURfU1RBUlQgPyBIV19CU1NJRF8wIDogbXZpZi0+b21hY19pZHg7DQor CW9tYWMtPmNvbm5fdHlwZSA9IGNwdV90b19sZTMyKHR5cGUpOw0KKwlvbWFjLT5vbWFjX2lkeCA9 IG12aWYtPm9tYWNfaWR4Ow0KKwlvbWFjLT5iYW5kX2lkeCA9IG12aWYtPmJhbmRfaWR4Ow0KKwlv bWFjLT5od19ic3NfaWR4ID0gaWR4Ow0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3Vf YnNzX3JmY2hfdGx2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsDQorCQkJc3RydWN0IG10NzkxNV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBjZmc4MDIxMV9j aGFuX2RlZiAqY2hhbmRlZiA9ICZwaHktPm10NzYtPmNoYW5kZWY7DQorCXN0cnVjdCBic3NfaW5m b19yZl9jaCAqY2g7DQorCXN0cnVjdCB0bHYgKnRsdjsNCisJaW50IGZyZXExID0gY2hhbmRlZi0+ Y2VudGVyX2ZyZXExOw0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBCU1NfSU5G T19SRl9DSCwgc2l6ZW9mKCpjaCkpOw0KKw0KKwljaCA9IChzdHJ1Y3QgYnNzX2luZm9fcmZfY2gg Kil0bHY7DQorCWNoLT5wcmlfY2ggPSBjaGFuZGVmLT5jaGFuLT5od192YWx1ZTsNCisJY2gtPmNl bnRlcl9jaDAgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoZnJlcTEpOw0KKwljaC0+ YncgPSBtdDc5MTVfbWN1X2NoYW5fYncoY2hhbmRlZik7DQorDQorCWlmIChjaGFuZGVmLT53aWR0 aCA9PSBOTDgwMjExX0NIQU5fV0lEVEhfODBQODApIHsNCisJCWludCBmcmVxMiA9IGNoYW5kZWYt PmNlbnRlcl9mcmVxMjsNCisNCisJCWNoLT5jZW50ZXJfY2gxID0gaWVlZTgwMjExX2ZyZXF1ZW5j eV90b19jaGFubmVsKGZyZXEyKTsNCisJfQ0KKw0KKwljaC0+aGVfYWxsX2Rpc2FibGUgPSB0cnVl Ow0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3VfYnNzX3JhX3RsdihzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgICAgc3RydWN0IG10 NzkxNV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBic3NfaW5mb19yYSAqcmE7DQorCXN0cnVjdCB0 bHYgKnRsdjsNCisJaW50IG1heF9uc3MgPSBod2VpZ2h0OChwaHktPmNoYWlubWFzayk7DQorDQor CXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIEJTU19JTkZPX1JBLCBzaXplb2YoKnJhKSk7 DQorDQorCXJhID0gKHN0cnVjdCBic3NfaW5mb19yYSAqKXRsdjsNCisJcmEtPm9wX21vZGUgPSB2 aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVA7DQorCXJhLT5hZGhvY19lbiA9IHZpZi0+dHlw ZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQzsNCisJcmEtPnNob3J0X3ByZWFtYmxlID0gdHJ1ZTsN CisJcmEtPnR4X3N0cmVhbXMgPSBtYXhfbnNzOw0KKwlyYS0+cnhfc3RyZWFtcyA9IG1heF9uc3M7 DQorCXJhLT5hbGdvID0gNDsNCisJcmEtPnRyYWluX3VwX3J1bGUgPSAyOw0KKwlyYS0+dHJhaW5f dXBfaGlnaF90aHJlcyA9IDExMDsNCisJcmEtPnRyYWluX3VwX3J1bGVfcnNzaSA9IC03MDsNCisJ cmEtPmxvd190cmFmZmljX3RocmVzID0gMjsNCisJcmEtPnBoeV9jYXAgPSBjcHVfdG9fbGUzMigw eGZkZik7DQorCXJhLT5pbnRlcnZhbCA9IGNwdV90b19sZTMyKDUwMCk7DQorCXJhLT5mYXN0X2lu dGVydmFsID0gY3B1X3RvX2xlMzIoMTAwKTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVf bWN1X2Jzc19leHRfdGx2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtdDc5MTVfdmlmICpt dmlmKQ0KK3sNCisvKiBTSUZTIDIwdXMgKyA1MTIgYnl0ZSBiZWFjb24gdHJhbm1pdHRlZCBieSAx TWJwcyAoMzkwNnVzKSAqLw0KKyNkZWZpbmUgQkNOX1RYX0VTVElNQVRFX1RJTUUJKDQwOTYgKyAy MCkNCisJc3RydWN0IGJzc19pbmZvX2V4dF9ic3MgKmV4dDsNCisJaW50IGV4dF9ic3NfaWR4LCB0 c2Zfb2Zmc2V0Ow0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorDQorCWV4dF9ic3NfaWR4ID0gbXZpZi0+ b21hY19pZHggLSBFWFRfQlNTSURfU1RBUlQ7DQorCWlmIChleHRfYnNzX2lkeCA8IDApDQorCQly ZXR1cm47DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIEJTU19JTkZPX0VYVF9C U1MsIHNpemVvZigqZXh0KSk7DQorDQorCWV4dCA9IChzdHJ1Y3QgYnNzX2luZm9fZXh0X2JzcyAq KXRsdjsNCisJdHNmX29mZnNldCA9IGV4dF9ic3NfaWR4ICogQkNOX1RYX0VTVElNQVRFX1RJTUU7 DQorCWV4dC0+bWJzc190c2Zfb2Zmc2V0ID0gY3B1X3RvX2xlMzIodHNmX29mZnNldCk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9ic3NfYm1jX3RsdihzdHJ1Y3Qgc2tfYnVmZiAq c2tiLCBzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJc3RydWN0IGJzc19pbmZvX2JtY19y YXRlICpibWM7DQorCXN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZiA9ICZwaHktPm10 NzYtPmNoYW5kZWY7DQorCWVudW0gbmw4MDIxMV9iYW5kIGJhbmQgPSBjaGFuZGVmLT5jaGFuLT5i YW5kOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihz a2IsIEJTU19JTkZPX0JNQ19SQVRFLCBzaXplb2YoKmJtYykpOw0KKw0KKwlibWMgPSAoc3RydWN0 IGJzc19pbmZvX2JtY19yYXRlICopdGx2Ow0KKwlpZiAoYmFuZCA9PSBOTDgwMjExX0JBTkRfMkdI Wikgew0KKwkJYm1jLT5zaG9ydF9wcmVhbWJsZSA9IHRydWU7DQorCX0gZWxzZSB7DQorCQlibWMt PmJjX3RyYW5zID0gY3B1X3RvX2xlMTYoMHgyMDAwKTsNCisJCWJtYy0+bWNfdHJhbnMgPSBjcHVf dG9fbGUxNigweDIwODApOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9i c3Nfc3luY190bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZp ZikNCit7DQorCXN0cnVjdCBic3NfaW5mb19zeW5jX21vZGUgKnN5bmM7DQorCXN0cnVjdCB0bHYg KnRsdjsNCisNCisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgQlNTX0lORk9fU1lOQ19N T0RFLCBzaXplb2YoKnN5bmMpKTsNCisNCisJc3luYyA9IChzdHJ1Y3QgYnNzX2luZm9fc3luY19t b2RlICopdGx2Ow0KKwlzeW5jLT5iY25faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNih2aWYtPmJzc19j b25mLmJlYWNvbl9pbnQpOw0KKwlzeW5jLT5kdGltX3BlcmlvZCA9IHZpZi0+YnNzX2NvbmYuZHRp bV9wZXJpb2Q7DQorCXN5bmMtPmVuYWJsZSA9IHRydWU7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1 X2FkZF9ic3NfaW5mbyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LA0KKwkJCSAgICBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLCBpbnQgZW5hYmxlKQ0KK3sNCisJc3RydWN0IG10NzkxNV92aWYgKm12 aWYgPSAoc3RydWN0IG10NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgc2tfYnVm ZiAqc2tiOw0KKw0KKwlza2IgPSBtdDc5MTVfbWN1X2FsbG9jX3N0YV9yZXEocGh5LT5kZXYsIG12 aWYsIE5VTEwsDQorCQkJCSAgICAgICBNVDc5MTVfU1RBX1VQREFURV9NQVhfU0laRSk7DQorCWlm IChJU19FUlIoc2tiKSkNCisJCXJldHVybiBQVFJfRVJSKHNrYik7DQorDQorCS8qIGJzc19vbWFj IG11c3QgYmUgZmlyc3QgKi8NCisJaWYgKGVuYWJsZSkNCisJCW10NzkxNV9tY3VfYnNzX29tYWNf dGx2KHNrYiwgdmlmKTsNCisNCisJbXQ3OTE1X21jdV9ic3NfYmFzaWNfdGx2KHNrYiwgdmlmLCBw aHksIGVuYWJsZSk7DQorDQorCWlmIChlbmFibGUpIHsNCisJCW10NzkxNV9tY3VfYnNzX3JmY2hf dGx2KHNrYiwgdmlmLCBwaHkpOw0KKwkJbXQ3OTE1X21jdV9ic3NfYm1jX3Rsdihza2IsIHBoeSk7 DQorCQltdDc5MTVfbWN1X2Jzc19yYV90bHYoc2tiLCB2aWYsIHBoeSk7DQorDQorCQlpZiAobXZp Zi0+b21hY19pZHggPiBIV19CU1NJRF9NQVgpDQorCQkJbXQ3OTE1X21jdV9ic3NfZXh0X3Rsdihz a2IsIG12aWYpOw0KKwkJZWxzZQ0KKwkJCW10NzkxNV9tY3VfYnNzX3N5bmNfdGx2KHNrYiwgdmlm KTsNCisJfQ0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9za2Jfc2VuZF9tc2coJnBoeS0+ZGV2LT5t dDc2LCBza2IsDQorCQkJCSAgICAgICBNQ1VfRVhUX0NNRF9CU1NfSU5GT19VUERBVEUsIHRydWUp Ow0KK30NCisNCisvKiogc3RhcmVjICYgd3RibCAqKi8NCitzdGF0aWMgaW50DQorbXQ3OTE1X21j dV9zdGFfa2V5X3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX2tleV9j b25mICprZXksDQorCQkgICAgICAgZW51bSBzZXRfa2V5X2NtZCBjbWQpDQorew0KKwlzdHJ1Y3Qg c3RhX3JlY19zZWMgKnNlYzsNCisJc3RydWN0IHRsdiAqdGx2Ow0KKwl1MzIgbGVuID0gc2l6ZW9m KCpzZWMpOw0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBTVEFfUkVDX0tFWV9W Miwgc2l6ZW9mKCpzZWMpKTsNCisNCisJc2VjID0gKHN0cnVjdCBzdGFfcmVjX3NlYyAqKXRsdjsN CisJc2VjLT5hZGQgPSBjbWQ7DQorDQorCWlmIChjbWQgPT0gU0VUX0tFWSkgew0KKwkJc3RydWN0 IHNlY19rZXkgKnNlY19rZXk7DQorCQl1OCBjaXBoZXI7DQorDQorCQljaXBoZXIgPSBtdDc5MTVf bWN1X2dldF9jaXBoZXIoa2V5LT5jaXBoZXIpOw0KKwkJaWYgKGNpcGhlciA9PSBNVF9DSVBIRVJf Tk9ORSkNCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQorDQorCQlzZWNfa2V5ID0gJnNlYy0+a2V5 WzBdOw0KKwkJc2VjX2tleS0+Y2lwaGVyX2xlbiA9IHNpemVvZigqc2VjX2tleSk7DQorCQlzZWNf a2V5LT5rZXlfaWQgPSBrZXktPmtleWlkeDsNCisNCisJCWlmIChjaXBoZXIgPT0gTVRfQ0lQSEVS X0JJUF9DTUFDXzEyOCkgew0KKwkJCXNlY19rZXktPmNpcGhlcl9pZCA9IE1UX0NJUEhFUl9BRVNf Q0NNUDsNCisJCQlzZWNfa2V5LT5rZXlfbGVuID0gMTY7DQorCQkJbWVtY3B5KHNlY19rZXktPmtl eSwga2V5LT5rZXksIDE2KTsNCisNCisJCQlzZWNfa2V5ID0gJnNlYy0+a2V5WzFdOw0KKwkJCXNl Y19rZXktPmNpcGhlcl9pZCA9IE1UX0NJUEhFUl9CSVBfQ01BQ18xMjg7DQorCQkJc2VjX2tleS0+ Y2lwaGVyX2xlbiA9IHNpemVvZigqc2VjX2tleSk7DQorCQkJc2VjX2tleS0+a2V5X2xlbiA9IDE2 Ow0KKwkJCW1lbWNweShzZWNfa2V5LT5rZXksIGtleS0+a2V5ICsgMTYsIDE2KTsNCisNCisJCQlz ZWMtPm5fY2lwaGVyID0gMjsNCisJCX0gZWxzZSB7DQorCQkJc2VjX2tleS0+Y2lwaGVyX2lkID0g Y2lwaGVyOw0KKwkJCXNlY19rZXktPmtleV9sZW4gPSBrZXktPmtleWxlbjsNCisJCQltZW1jcHko c2VjX2tleS0+a2V5LCBrZXktPmtleSwga2V5LT5rZXlsZW4pOw0KKw0KKwkJCWlmIChjaXBoZXIg PT0gTVRfQ0lQSEVSX1RLSVApIHsNCisJCQkJLyogUngvVHggTUlDIGtleXMgYXJlIHN3YXBwZWQg Ki8NCisJCQkJbWVtY3B5KHNlY19rZXktPmtleSArIDE2LCBrZXktPmtleSArIDI0LCA4KTsNCisJ CQkJbWVtY3B5KHNlY19rZXktPmtleSArIDI0LCBrZXktPmtleSArIDE2LCA4KTsNCisJCQl9DQor DQorCQkJbGVuIC09IHNpemVvZigqc2VjX2tleSk7DQorCQkJc2VjLT5uX2NpcGhlciA9IDE7DQor CQl9DQorCX0gZWxzZSB7DQorCQlsZW4gLT0gc2l6ZW9mKHNlYy0+a2V5KTsNCisJCXNlYy0+bl9j aXBoZXIgPSAwOw0KKwl9DQorCXNlYy0+bGVuID0gY3B1X3RvX2xlMTYobGVuKTsNCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2FkZF9rZXkoc3RydWN0IG10NzkxNV9kZXYg KmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICAgICBzdHJ1Y3QgbXQ3OTE1 X3N0YSAqbXN0YSwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LA0KKwkJICAgICAgIGVu dW0gc2V0X2tleV9jbWQgY21kKQ0KK3sNCisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSAoc3Ry dWN0IG10NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0K KwlpbnQgcmV0Ow0KKw0KKwlza2IgPSBtdDc5MTVfbWN1X2FsbG9jX3N0YV9yZXEoZGV2LCBtdmlm LCBtc3RhLA0KKwkJCQkgICAgICAgTVQ3OTE1X1NUQV9VUERBVEVfTUFYX1NJWkUpOw0KKwlpZiAo SVNfRVJSKHNrYikpDQorCQlyZXR1cm4gUFRSX0VSUihza2IpOw0KKw0KKwlyZXQgPSBtdDc5MTVf bWN1X3N0YV9rZXlfdGx2KHNrYiwga2V5LCBjbWQpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJl dDsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2tiX3NlbmRfbXNnKCZkZXYtPm10NzYsIHNrYiwN CisJCQkJICAgICAgIE1DVV9FWFRfQ01EX1NUQV9SRUNfVVBEQVRFLCB0cnVlKTsNCit9DQorDQor c3RhdGljIHZvaWQNCittdDc5MTVfbWN1X3N0YV9iYV90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwN CisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMsDQorCQkgICAg ICBib29sIGVuYWJsZSwgYm9vbCB0eCkNCit7DQorCXN0cnVjdCBzdGFfcmVjX2JhICpiYTsNCisJ c3RydWN0IHRsdiAqdGx2Ow0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBTVEFf UkVDX0JBLCBzaXplb2YoKmJhKSk7DQorDQorCWJhID0gKHN0cnVjdCBzdGFfcmVjX2JhICopdGx2 Ow0KKwliYS0+YmFfdHlwZSA9IHR4ID8gTVRfQkFfVFlQRV9PUklHSU5BVE9SIDogTVRfQkFfVFlQ RV9SRUNJUElFTlQsDQorCWJhLT53aW5zaXplID0gY3B1X3RvX2xlMTYocGFyYW1zLT5idWZfc2l6 ZSk7DQorCWJhLT5zc24gPSBjcHVfdG9fbGUxNihwYXJhbXMtPnNzbik7DQorCWJhLT5iYV9lbiA9 IGVuYWJsZSA8PCBwYXJhbXMtPnRpZDsNCisJYmEtPmFtc2R1ID0gcGFyYW1zLT5hbXNkdTsNCisJ YmEtPnRpZCA9IHBhcmFtcy0+dGlkOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3Vf d3RibF9iYV90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwNCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgw MjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zLA0KKwkJICAgICAgIGJvb2wgZW5hYmxlLCBib29sIHR4 LCB2b2lkICpzdGFfd3RibCwNCisJCSAgICAgICB2b2lkICp3dGJsX3RsdikNCit7DQorCXN0cnVj dCB3dGJsX2JhICpiYTsNCisJc3RydWN0IHRsdiAqdGx2Ow0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1 X2FkZF9uZXN0ZWRfdGx2KHNrYiwgV1RCTF9CQSwgc2l6ZW9mKCpiYSksDQorCQkJCQl3dGJsX3Rs diwgc3RhX3d0YmwpOw0KKw0KKwliYSA9IChzdHJ1Y3Qgd3RibF9iYSAqKXRsdjsNCisJYmEtPnRp ZCA9IHBhcmFtcy0+dGlkOw0KKw0KKwlpZiAodHgpIHsNCisJCWJhLT5iYV90eXBlID0gTVRfQkFf VFlQRV9PUklHSU5BVE9SOw0KKwkJYmEtPnNuID0gZW5hYmxlID8gY3B1X3RvX2xlMTYocGFyYW1z LT5zc24pIDogMDsNCisJCWJhLT5iYV9lbiA9IGVuYWJsZTsNCisJfSBlbHNlIHsNCisJCW1lbWNw eShiYS0+cGVlcl9hZGRyLCBwYXJhbXMtPnN0YS0+YWRkciwgRVRIX0FMRU4pOw0KKwkJYmEtPmJh X3R5cGUgPSBNVF9CQV9UWVBFX1JFQ0lQSUVOVDsNCisJCWJhLT5yc3RfYmFfdGlkID0gcGFyYW1z LT50aWQ7DQorCQliYS0+cnN0X2JhX3NlbCA9IFJTVF9CQV9NQUNfVElEX01BVENIOw0KKwkJYmEt PnJzdF9iYV9zYiA9IDE7DQorCX0NCisNCisJaWYgKGVuYWJsZSAmJiB0eCkNCisJCWJhLT5iYV93 aW5zaXplID0gY3B1X3RvX2xlMTYocGFyYW1zLT5idWZfc2l6ZSk7DQorfQ0KKw0KK3N0YXRpYyBp bnQNCittdDc5MTVfbWN1X3N0YV9iYShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJICBzdHJ1 Y3QgaWVlZTgwMjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zLA0KKwkJICBib29sIGVuYWJsZSwgYm9v bCB0eCkNCit7DQorCXN0cnVjdCBtdDc5MTVfc3RhICptc3RhID0gKHN0cnVjdCBtdDc5MTVfc3Rh ICopcGFyYW1zLT5zdGEtPmRydl9wcml2Ow0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9IG1z dGEtPnZpZjsNCisJc3RydWN0IHd0YmxfcmVxX2hkciAqd3RibF9oZHI7DQorCXN0cnVjdCB0bHYg KnN0YV93dGJsOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKw0KKwlza2IgPSBtdDc5MTVfbWN1 X2FsbG9jX3N0YV9yZXEoZGV2LCBtdmlmLCBtc3RhLA0KKwkJCQkgICAgICAgTVQ3OTE1X1NUQV9V UERBVEVfTUFYX1NJWkUpOw0KKwlpZiAoSVNfRVJSKHNrYikpDQorCQlyZXR1cm4gUFRSX0VSUihz a2IpOw0KKw0KKwltdDc5MTVfbWN1X3N0YV9iYV90bHYoc2tiLCBwYXJhbXMsIGVuYWJsZSwgdHgp Ow0KKwlzdGFfd3RibCA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIFNUQV9SRUNfV1RCTCwgc2l6 ZW9mKHN0cnVjdCB0bHYpKTsNCisNCisJd3RibF9oZHIgPSBtdDc5MTVfbWN1X2FsbG9jX3d0Ymxf cmVxKGRldiwgbXN0YSwgV1RCTF9TRVQsIHN0YV93dGJsLA0KKwkJCQkJICAgICAmc2tiKTsNCisJ bXQ3OTE1X21jdV93dGJsX2JhX3Rsdihza2IsIHBhcmFtcywgZW5hYmxlLCB0eCwgc3RhX3d0Ymws IHd0YmxfaGRyKTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2tiX3NlbmRfbXNnKCZkZXYtPm10 NzYsIHNrYiwNCisJCQkJICAgICAgIE1DVV9FWFRfQ01EX1NUQV9SRUNfVVBEQVRFLCB0cnVlKTsN Cit9DQorDQoraW50IG10NzkxNV9tY3VfYWRkX3R4X2JhKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYs DQorCQkJIHN0cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMsDQorCQkJIGJvb2wg ZW5hYmxlKQ0KK3sNCisJcmV0dXJuIG10NzkxNV9tY3Vfc3RhX2JhKGRldiwgcGFyYW1zLCBlbmFi bGUsIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9hZGRfcnhfYmEoc3RydWN0IG10Nzkx NV9kZXYgKmRldiwNCisJCQkgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcywN CisJCQkgYm9vbCBlbmFibGUpDQorew0KKwlyZXR1cm4gbXQ3OTE1X21jdV9zdGFfYmEoZGV2LCBw YXJhbXMsIGVuYWJsZSwgZmFsc2UpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3Vf d3RibF9nZW5lcmljX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLA0KKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpzdGFfd3Ri bCwNCisJCQkgICAgdm9pZCAqd3RibF90bHYpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZp ZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB3dGJsX2dl bmVyaWMgKmdlbmVyaWM7DQorCXN0cnVjdCB3dGJsX3J4ICpyeDsNCisJc3RydWN0IHRsdiAqdGx2 Ow0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF9uZXN0ZWRfdGx2KHNrYiwgV1RCTF9HRU5FUklD LCBzaXplb2YoKmdlbmVyaWMpLA0KKwkJCQkJd3RibF90bHYsIHN0YV93dGJsKTsNCisNCisJZ2Vu ZXJpYyA9IChzdHJ1Y3Qgd3RibF9nZW5lcmljICopdGx2Ow0KKw0KKwlpZiAoc3RhKSB7DQorCQlt ZW1jcHkoZ2VuZXJpYy0+cGVlcl9hZGRyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsNCisJCWdlbmVy aWMtPnBhcnRpYWxfYWlkID0gY3B1X3RvX2xlMTYoc3RhLT5haWQpOw0KKwkJZ2VuZXJpYy0+bXVh cl9pZHggPSBtdmlmLT5vbWFjX2lkeDsNCisJCWdlbmVyaWMtPnFvcyA9IHN0YS0+d21lOw0KKwl9 IGVsc2Ugew0KKwkJLyogdXNlIEJTU0lEIGluIHN0YXRpb24gbW9kZSAqLw0KKwkJaWYgKHZpZi0+ dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQ0KKwkJCW1lbWNweShnZW5lcmljLT5wZWVy X2FkZHIsIHZpZi0+YnNzX2NvbmYuYnNzaWQsDQorCQkJICAgICAgIEVUSF9BTEVOKTsNCisJCWVs c2UNCisJCQlldGhfYnJvYWRjYXN0X2FkZHIoZ2VuZXJpYy0+cGVlcl9hZGRyKTsNCisNCisJCWdl bmVyaWMtPm11YXJfaWR4ID0gMHhlOw0KKwl9DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX25l c3RlZF90bHYoc2tiLCBXVEJMX1JYLCBzaXplb2YoKnJ4KSwNCisJCQkJCXd0YmxfdGx2LCBzdGFf d3RibCk7DQorDQorCXJ4ID0gKHN0cnVjdCB3dGJsX3J4ICopdGx2Ow0KKwlyeC0+cmNhMSA9IHN0 YSA/IHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCA6IDE7DQorCXJ4LT5yY2EyID0gMTsN CisJcngtPnJ2ID0gMTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X3N0YV9iYXNp Y190bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJ CQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBlbmFibGUpDQorew0KKyNkZWZpbmUg RVhUUkFfSU5GT19WRVIgICAgICAgICAgQklUKDApDQorI2RlZmluZSBFWFRSQV9JTkZPX05FVyAg ICAgICAgICBCSVQoMSkNCisJc3RydWN0IHN0YV9yZWNfYmFzaWMgKmJhc2ljOw0KKwlzdHJ1Y3Qg dGx2ICp0bHY7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIFNUQV9SRUNfQkFT SUMsIHNpemVvZigqYmFzaWMpKTsNCisNCisJYmFzaWMgPSAoc3RydWN0IHN0YV9yZWNfYmFzaWMg Kil0bHY7DQorCWJhc2ljLT5leHRyYV9pbmZvID0gY3B1X3RvX2xlMTYoRVhUUkFfSU5GT19WRVIp Ow0KKw0KKwlpZiAoZW5hYmxlKSB7DQorCQliYXNpYy0+ZXh0cmFfaW5mbyB8PSBjcHVfdG9fbGUx NihFWFRSQV9JTkZPX05FVyk7DQorCQliYXNpYy0+Y29ubl9zdGF0ZSA9IENPTk5fU1RBVEVfUE9S VF9TRUNVUkU7DQorCX0gZWxzZSB7DQorCQliYXNpYy0+Y29ubl9zdGF0ZSA9IENPTk5fU1RBVEVf RElTQ09OTkVDVDsNCisJfQ0KKw0KKwlpZiAoIXN0YSkgew0KKwkJYmFzaWMtPmNvbm5fdHlwZSA9 IGNwdV90b19sZTMyKENPTk5FQ1RJT05fSU5GUkFfQkMpOw0KKwkJZXRoX2Jyb2FkY2FzdF9hZGRy KGJhc2ljLT5wZWVyX2FkZHIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXN3aXRjaCAodmlmLT50 eXBlKSB7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoNCisJY2FzZSBOTDgwMjEx X0lGVFlQRV9BUDoNCisJCWJhc2ljLT5jb25uX3R5cGUgPSBjcHVfdG9fbGUzMihDT05ORUNUSU9O X0lORlJBX1NUQSk7DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOg0K KwkJYmFzaWMtPmNvbm5fdHlwZSA9IGNwdV90b19sZTMyKENPTk5FQ1RJT05fSU5GUkFfQVApOw0K KwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6DQorCQliYXNpYy0+Y29ubl90 eXBlID0gY3B1X3RvX2xlMzIoQ09OTkVDVElPTl9JQlNTX0FESE9DKTsNCisJCWJyZWFrOw0KKwlk ZWZhdWx0Og0KKwkJV0FSTl9PTigxKTsNCisJCWJyZWFrOw0KKwl9DQorDQorCW1lbWNweShiYXNp Yy0+cGVlcl9hZGRyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsNCisJYmFzaWMtPmFpZCA9IGNwdV90 b19sZTE2KHN0YS0+YWlkKTsNCisJYmFzaWMtPnFvcyA9IHN0YS0+d21lOw0KK30NCisNCitzdGF0 aWMgdm9pZA0KK210NzkxNV9tY3Vfc3RhX3RsdihzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLA0KKwkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQor CXN0cnVjdCB0bHYgKnRsdjsNCisNCisJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgew0K KwkJc3RydWN0IHN0YV9yZWNfaHQgKmh0Ow0KKw0KKwkJLyogc3RhcmVjIGh0ICovDQorCQl0bHYg PSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBTVEFfUkVDX0hULCBzaXplb2YoKmh0KSk7DQorCQlo dCA9IChzdHJ1Y3Qgc3RhX3JlY19odCAqKXRsdjsNCisJCWh0LT5odF9jYXAgPSBjcHVfdG9fbGUx NihzdGEtPmh0X2NhcC5jYXApOw0KKwl9DQorDQorCS8qIHN0YXJlYyB2aHQgKi8NCisJaWYgKHN0 YS0+dmh0X2NhcC52aHRfc3VwcG9ydGVkKSB7DQorCQlzdHJ1Y3Qgc3RhX3JlY192aHQgKnZodDsN CisNCisJCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIFNUQV9SRUNfVkhULCBzaXplb2Yo KnZodCkpOw0KKwkJdmh0ID0gKHN0cnVjdCBzdGFfcmVjX3ZodCAqKXRsdjsNCisJCXZodC0+dmh0 X2NhcCA9IGNwdV90b19sZTMyKHN0YS0+dmh0X2NhcC5jYXApOw0KKwkJdmh0LT52aHRfcnhfbWNz X21hcCA9IHN0YS0+dmh0X2NhcC52aHRfbWNzLnJ4X21jc19tYXA7DQorCQl2aHQtPnZodF90eF9t Y3NfbWFwID0gc3RhLT52aHRfY2FwLnZodF9tY3MudHhfbWNzX21hcDsNCisJfQ0KK30NCisNCitz dGF0aWMgdm9pZA0KK210NzkxNV9tY3Vfd3RibF9zbXBzX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLA0KKwkJCSB2b2lkICpzdGFfd3RibCwgdm9pZCAq d3RibF90bHYpDQorew0KKwlzdHJ1Y3Qgd3RibF9zbXBzICpzbXBzOw0KKwlzdHJ1Y3QgdGx2ICp0 bHY7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX25lc3RlZF90bHYoc2tiLCBXVEJMX1NNUFMs IHNpemVvZigqc21wcyksDQorCQkJCQl3dGJsX3Rsdiwgc3RhX3d0YmwpOw0KKwlzbXBzID0gKHN0 cnVjdCB3dGJsX3NtcHMgKil0bHY7DQorDQorCWlmIChzdGEtPnNtcHNfbW9kZSA9PSBJRUVFODAy MTFfU01QU19EWU5BTUlDKQ0KKwkJc21wcy0+c21wcyA9IHRydWU7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorbXQ3OTE1X21jdV93dGJsX2h0X3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qg aWVlZTgwMjExX3N0YSAqc3RhLA0KKwkJICAgICAgIHZvaWQgKnN0YV93dGJsLCB2b2lkICp3dGJs X3RsdikNCit7DQorCXN0cnVjdCB3dGJsX2h0ICpodCA9IE5VTEw7DQorCXN0cnVjdCB0bHYgKnRs djsNCisNCisJLyogd3RibCBodCAqLw0KKwlpZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7 DQorCQl0bHYgPSBtdDc5MTVfbWN1X2FkZF9uZXN0ZWRfdGx2KHNrYiwgV1RCTF9IVCwgc2l6ZW9m KCpodCksDQorCQkJCQkJd3RibF90bHYsIHN0YV93dGJsKTsNCisJCWh0ID0gKHN0cnVjdCB3dGJs X2h0ICopdGx2Ow0KKwkJaHQtPmxkcGMgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRf Q0FQX0xEUENfQ09ESU5HOw0KKwkJaHQtPmFmID0gc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOw0K KwkJaHQtPm1tID0gc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eTsNCisJCWh0LT5odCA9IHRydWU7 DQorCX0NCisNCisJLyogd3RibCB2aHQgKi8NCisJaWYgKHN0YS0+dmh0X2NhcC52aHRfc3VwcG9y dGVkKSB7DQorCQlzdHJ1Y3Qgd3RibF92aHQgKnZodDsNCisJCXUzMiBhZjsNCisNCisJCXRsdiA9 IG10NzkxNV9tY3VfYWRkX25lc3RlZF90bHYoc2tiLCBXVEJMX1ZIVCwgc2l6ZW9mKCp2aHQpLA0K KwkJCQkJCXd0YmxfdGx2LCBzdGFfd3RibCk7DQorCQl2aHQgPSAoc3RydWN0IHd0Ymxfdmh0ICop dGx2Ow0KKwkJdmh0LT5sZHBjID0gc3RhLT52aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQ X1JYTERQQywNCisJCXZodC0+dmh0ID0gdHJ1ZTsNCisNCisJCWFmID0gKHN0YS0+dmh0X2NhcC5j YXAgJg0KKwkJICAgICAgSUVFRTgwMjExX1ZIVF9DQVBfTUFYX0FfTVBEVV9MRU5HVEhfRVhQT05F TlRfTUFTSykgPj4NCisJCSAgICAgSUVFRTgwMjExX1ZIVF9DQVBfTUFYX0FfTVBEVV9MRU5HVEhf RVhQT05FTlRfU0hJRlQ7DQorDQorCQlpZiAoaHQgJiYgYWYgPiBodC0+YWYpDQorCQkJaHQtPmFm ID0gYWY7DQorCX0NCisNCisJbXQ3OTE1X21jdV93dGJsX3NtcHNfdGx2KHNrYiwgc3RhLCBzdGFf d3RibCwgd3RibF90bHYpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9hZGRfc21wcyhzdHJ1Y3Qg bXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCXN0cnVjdCBp ZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9IChzdHJ1 Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBtdDc5MTVfc3RhICptc3Rh ID0gKHN0cnVjdCBtdDc5MTVfc3RhICopc3RhLT5kcnZfcHJpdjsNCisJc3RydWN0IHd0YmxfcmVx X2hkciAqd3RibF9oZHI7DQorCXN0cnVjdCB0bHYgKnN0YV93dGJsOw0KKwlzdHJ1Y3Qgc2tfYnVm ZiAqc2tiOw0KKw0KKwlza2IgPSBtdDc5MTVfbWN1X2FsbG9jX3N0YV9yZXEoZGV2LCBtdmlmLCBt c3RhLA0KKwkJCQkgICAgICAgTVQ3OTE1X1NUQV9VUERBVEVfTUFYX1NJWkUpOw0KKwlpZiAoSVNf RVJSKHNrYikpDQorCQlyZXR1cm4gUFRSX0VSUihza2IpOw0KKw0KKwlzdGFfd3RibCA9IG10Nzkx NV9tY3VfYWRkX3Rsdihza2IsIFNUQV9SRUNfV1RCTCwgc2l6ZW9mKHN0cnVjdCB0bHYpKTsNCisN CisJd3RibF9oZHIgPSBtdDc5MTVfbWN1X2FsbG9jX3d0YmxfcmVxKGRldiwgbXN0YSwgV1RCTF9T RVQsIHN0YV93dGJsLA0KKwkJCQkJICAgICAmc2tiKTsNCisJbXQ3OTE1X21jdV93dGJsX3NtcHNf dGx2KHNrYiwgc3RhLCBzdGFfd3RibCwgd3RibF9oZHIpOw0KKw0KKwlyZXR1cm4gX19tdDc2X21j dV9za2Jfc2VuZF9tc2coJmRldi0+bXQ3Niwgc2tiLA0KKwkJCQkgICAgICAgTUNVX0VYVF9DTURf U1RBX1JFQ19VUERBVEUsIHRydWUpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3Vf c3RhX3JhdGVfY3RybF90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG10NzkxNV9kZXYg KmRldiwNCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJICAgICBzdHJ1 Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQ0KK3sNCisJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpj aGFuZGVmID0gJmRldi0+bXBoeS5jaGFuZGVmOw0KKwlzdHJ1Y3Qgc3RhX3JlY19yYSAqcmE7DQor CXN0cnVjdCB0bHYgKnRsdjsNCisJZW51bSBubDgwMjExX2JhbmQgYmFuZCA9IGNoYW5kZWYtPmNo YW4tPmJhbmQ7DQorCXUzMiBzdXBwX3JhdGUgPSBzdGEtPnN1cHBfcmF0ZXNbYmFuZF07DQorCWlu dCBuX3JhdGVzID0gaHdlaWdodDMyKHN1cHBfcmF0ZSk7DQorCXUzMiBjYXAgPSBzdGEtPndtZSA/ IFNUQV9DQVBfV01NIDogMDsNCisJdTggaSwgbnNzID0gc3RhLT5yeF9uc3MsIG1jcyA9IDA7DQor DQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIFNUQV9SRUNfUkEsIHNpemVvZigqcmEp KTsNCisNCisJcmEgPSAoc3RydWN0IHN0YV9yZWNfcmEgKil0bHY7DQorCXJhLT52YWxpZCA9IHRy dWU7DQorCXJhLT5hdXRvX3JhdGUgPSB0cnVlOw0KKwlyYS0+cGh5X21vZGUgPSBtdDc5MTVfZ2V0 X3BoeV9tb2RlKGRldiwgdmlmLCBiYW5kLCBzdGEpOw0KKwlyYS0+Y2hhbm5lbCA9IGNoYW5kZWYt PmNoYW4tPmh3X3ZhbHVlOw0KKwlyYS0+YncgPSBzdGEtPmJhbmR3aWR0aDsNCisJcmEtPnJhdGVf bGVuID0gbl9yYXRlczsNCisJcmEtPnBoeS5idyA9IHN0YS0+YmFuZHdpZHRoOw0KKw0KKwlpZiAo bl9yYXRlcykgew0KKwkJaWYgKGJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopIHsNCisJCQlyYS0+ c3VwcF9tb2RlID0gTU9ERV9DQ0s7DQorCQkJcmEtPnN1cHBfY2NrX3JhdGUgPSBzdXBwX3JhdGUg JiBHRU5NQVNLKDMsIDApOw0KKwkJCXJhLT5waHkudHlwZSA9IE1UX1BIWV9UWVBFX0NDSzsNCisN CisJCQlpZiAobl9yYXRlcyA+IDQpIHsNCisJCQkJcmEtPnN1cHBfbW9kZSB8PSBNT0RFX09GRE07 DQorCQkJCXJhLT5zdXBwX29mZG1fcmF0ZSA9IHN1cHBfcmF0ZSA+PiA0Ow0KKwkJCQlyYS0+cGh5 LnR5cGUgPSBNVF9QSFlfVFlQRV9PRkRNOw0KKwkJCX0NCisJCX0gZWxzZSB7DQorCQkJcmEtPnN1 cHBfbW9kZSA9IE1PREVfT0ZETTsNCisJCQlyYS0+c3VwcF9vZmRtX3JhdGUgPSBzdXBwX3JhdGU7 DQorCQkJcmEtPnBoeS50eXBlID0gTVRfUEhZX1RZUEVfT0ZETTsNCisJCX0NCisJfQ0KKw0KKwlp ZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7DQorCQlmb3IgKGkgPSAwOyBpIDwgbnNzOyBp KyspDQorCQkJcmEtPmh0X21jc1tpXSA9IHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrW2ldOw0KKw0K KwkJcmEtPnN1cHBfaHRfbWNzID0gKihfX2xlMzIgKilyYS0+aHRfbWNzOw0KKwkJcmEtPnN1cHBf bW9kZSB8PSBNT0RFX0hUOw0KKwkJbWNzID0gaHdlaWdodDMyKHJhLT5zdXBwX2h0X21jcykgLSAx Ow0KKwkJcmEtPmFmID0gc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOw0KKwkJcmEtPmh0X2dmID0g ISEoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEKTsNCisNCisJCWNh cCB8PSBTVEFfQ0FQX0hUOw0KKwkJaWYgKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9D QVBfU0dJXzIwKQ0KKwkJCWNhcCB8PSBTVEFfQ0FQX1NHSV8yMDsNCisJCWlmIChzdGEtPmh0X2Nh cC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkNCisJCQljYXAgfD0gU1RBX0NBUF9TR0lf NDA7DQorCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9UWF9TVEJDKQ0K KwkJCWNhcCB8PSBTVEFfQ0FQX1RYX1NUQkM7DQorCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVF RTgwMjExX0hUX0NBUF9SWF9TVEJDKQ0KKwkJCWNhcCB8PSBTVEFfQ0FQX1JYX1NUQkM7DQorCQlp ZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9MRFBDX0NPRElORykNCisJCQlj YXAgfD0gU1RBX0NBUF9MRFBDOw0KKwl9DQorDQorCWlmIChzdGEtPnZodF9jYXAudmh0X3N1cHBv cnRlZCkgew0KKwkJX19sZTE2IG1jc19tYXAgPSBzdGEtPnZodF9jYXAudmh0X21jcy5yeF9tY3Nf bWFwOw0KKwkJdTMyIGFmOw0KKwkJdTE2IHZodF9tY3M7DQorCQl1OCBtY3NfcHJldjsNCisNCisJ CWFmID0gKHN0YS0+dmh0X2NhcC5jYXAgJg0KKwkJICAgICAgSUVFRTgwMjExX1ZIVF9DQVBfTUFY X0FfTVBEVV9MRU5HVEhfRVhQT05FTlRfTUFTSykgPj4NCisJCSAgICAgSUVFRTgwMjExX1ZIVF9D QVBfTUFYX0FfTVBEVV9MRU5HVEhfRVhQT05FTlRfU0hJRlQ7DQorDQorCQlpZiAoYWYgPiBzdGEt Pmh0X2NhcC5hbXBkdV9mYWN0b3IpDQorCQkJcmEtPmFmID0gYWY7DQorDQorCQljYXAgfD0gU1RB X0NBUF9WSFQ7DQorCQlpZiAoc3RhLT52aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQX1NI T1JUX0dJXzgwKQ0KKwkJCWNhcCB8PSBTVEFfQ0FQX1ZIVF9TR0lfODA7DQorCQlpZiAoc3RhLT52 aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQX1NIT1JUX0dJXzE2MCkNCisJCQljYXAgfD0g U1RBX0NBUF9WSFRfU0dJXzE2MDsNCisJCWlmIChzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgwMjEx X1ZIVF9DQVBfVFhTVEJDKQ0KKwkJCWNhcCB8PSBTVEFfQ0FQX1ZIVF9UWF9TVEJDOw0KKwkJaWYg KHN0YS0+dmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfVkhUX0NBUF9SWFNUQkNfMSkNCisJCQljYXAg fD0gU1RBX0NBUF9WSFRfUlhfU1RCQzsNCisJCWlmIChzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgw MjExX1ZIVF9DQVBfUlhMRFBDKQ0KKwkJCWNhcCB8PSBTVEFfQ0FQX1ZIVF9MRFBDOw0KKw0KKwkJ cmEtPnN1cHBfbW9kZSB8PSBNT0RFX1ZIVDsNCisJCWZvciAobWNzID0gMCwgaSA9IDA7IGkgPCBu c3M7IGkrKywgbWNzX21hcCA+Pj0gMikgew0KKwkJCXN3aXRjaCAobWNzX21hcCAmIDB4Mykgew0K KwkJCWNhc2UgSUVFRTgwMjExX1ZIVF9NQ1NfU1VQUE9SVF8wXzk6DQorCQkJCXZodF9tY3MgPSBH RU5NQVNLKDksIDApOw0KKwkJCQlicmVhazsNCisJCQljYXNlIElFRUU4MDIxMV9WSFRfTUNTX1NV UFBPUlRfMF84Og0KKwkJCQl2aHRfbWNzID0gR0VOTUFTSyg4LCAwKTsNCisJCQkJYnJlYWs7DQor CQkJY2FzZSBJRUVFODAyMTFfVkhUX01DU19TVVBQT1JUXzBfNzoNCisJCQkJdmh0X21jcyA9IEdF Tk1BU0soNywgMCk7DQorCQkJCWJyZWFrOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXZodF9tY3MgPSAw Ow0KKwkJCX0NCisNCisJCQlyYS0+c3VwcF92aHRfbWNzW2ldID0gY3B1X3RvX2xlMTYodmh0X21j cyk7DQorDQorCQkJbWNzX3ByZXYgPSBod2VpZ2h0MTYodmh0X21jcykgLSAxOw0KKwkJCWlmICht Y3NfcHJldiA+IG1jcykNCisJCQkJbWNzID0gbWNzX3ByZXY7DQorDQorCQkJLyogb25seSBzdXBw b3J0IDJzcyBvbiAxNjBNSHogKi8NCisJCQlpZiAoaSA+IDEgJiYgKHJhLT5idyA9PSBDTURfQ0JX XzE2ME1IWiB8fA0KKwkJCQkgICAgICByYS0+YncgPT0gQ01EX0NCV184MDgwTUhaKSkNCisJCQkJ YnJlYWs7DQorCQl9DQorCX0NCisNCisJcmEtPnN0YV9zdGF0dXMgPSBjcHVfdG9fbGUzMihjYXAp Ow0KKw0KKwlzd2l0Y2ggKEJJVChmbHMocmEtPnN1cHBfbW9kZSkgLSAxKSkgew0KKwljYXNlIE1P REVfVkhUOg0KKwkJcmEtPnBoeS50eXBlID0gTVRfUEhZX1RZUEVfVkhUOw0KKwkJcmEtPnBoeS5t Y3MgPSBtY3M7DQorCQlyYS0+cGh5Lm5zcyA9IG5zczsNCisJCXJhLT5waHkuc3RiYyA9ICEhKHN0 YS0+dmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfVkhUX0NBUF9UWFNUQkMpOw0KKwkJcmEtPnBoeS5s ZHBjID0gISEoc3RhLT52aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQX1JYTERQQyk7DQor CQlyYS0+cGh5LnNnaSA9DQorCQkJISEoc3RhLT52aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9WSFRf Q0FQX1NIT1JUX0dJXzgwKTsNCisJCWJyZWFrOw0KKwljYXNlIE1PREVfSFQ6DQorCQlyYS0+cGh5 LnR5cGUgPSBNVF9QSFlfVFlQRV9IVDsNCisJCXJhLT5waHkubWNzID0gbWNzOw0KKwkJcmEtPnBo eS5sZHBjID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9MRFBDX0NPRElORzsN CisJCXJhLT5waHkuc3RiYyA9ICEhKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBf VFhfU1RCQyk7DQorCQlyYS0+cGh5LnNnaSA9ICEhKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIx MV9IVF9DQVBfU0dJXzIwKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQorCX0N Cit9DQorDQoraW50IG10NzkxNV9tY3VfYWRkX3JhdGVfY3RybChzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgICAgc3RydWN0IGllZWU4MDIx MV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5 MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGEgPSAoc3Ry dWN0IG10NzkxNV9zdGEgKilzdGEtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0K Kw0KKwlza2IgPSBtdDc5MTVfbWN1X2FsbG9jX3N0YV9yZXEoZGV2LCBtdmlmLCBtc3RhLA0KKwkJ CQkgICAgICAgTVQ3OTE1X1NUQV9VUERBVEVfTUFYX1NJWkUpOw0KKwlpZiAoSVNfRVJSKHNrYikp DQorCQlyZXR1cm4gUFRSX0VSUihza2IpOw0KKw0KKwltdDc5MTVfbWN1X3N0YV9yYXRlX2N0cmxf dGx2KHNrYiwgZGV2LCB2aWYsIHN0YSk7DQorDQorCXJldHVybiBfX210NzZfbWN1X3NrYl9zZW5k X21zZygmZGV2LT5tdDc2LCBza2IsDQorCQkJCSAgICAgICBNQ1VfRVhUX0NNRF9TVEFfUkVDX1VQ REFURSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2FkZF9zdGEoc3RydWN0IG10Nzkx NV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICAgICBzdHJ1Y3Qg aWVlZTgwMjExX3N0YSAqc3RhLCBib29sIGVuYWJsZSkNCit7DQorCXN0cnVjdCBtdDc5MTVfdmlm ICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IHd0 YmxfcmVxX2hkciAqd3RibF9oZHI7DQorCXN0cnVjdCBtdDc5MTVfc3RhICptc3RhOw0KKwlzdHJ1 Y3QgdGx2ICpzdGFfd3RibDsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisJaW50IHJldDsNCisN CisJbXN0YSA9IHN0YSA/IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXN0YS0+ZHJ2X3ByaXYgOiAmbXZp Zi0+c3RhOw0KKw0KKwlza2IgPSBtdDc5MTVfbWN1X2FsbG9jX3N0YV9yZXEoZGV2LCBtdmlmLCBt c3RhLA0KKwkJCQkgICAgICAgTVQ3OTE1X1NUQV9VUERBVEVfTUFYX1NJWkUpOw0KKwlpZiAoSVNf RVJSKHNrYikpDQorCQlyZXR1cm4gUFRSX0VSUihza2IpOw0KKw0KKwltdDc5MTVfbWN1X3N0YV9i YXNpY190bHYoc2tiLCB2aWYsIHN0YSwgZW5hYmxlKTsNCisJaWYgKGVuYWJsZSAmJiBzdGEpDQor CQltdDc5MTVfbWN1X3N0YV90bHYoZGV2LCBza2IsIHN0YSk7DQorDQorCXN0YV93dGJsID0gbXQ3 OTE1X21jdV9hZGRfdGx2KHNrYiwgU1RBX1JFQ19XVEJMLCBzaXplb2Yoc3RydWN0IHRsdikpOw0K Kw0KKwl3dGJsX2hkciA9IG10NzkxNV9tY3VfYWxsb2Nfd3RibF9yZXEoZGV2LCBtc3RhLCBXVEJM X1JFU0VUX0FORF9TRVQsDQorCQkJCQkgICAgIHN0YV93dGJsLCAmc2tiKTsNCisJaWYgKGVuYWJs ZSkgew0KKwkJbXQ3OTE1X21jdV93dGJsX2dlbmVyaWNfdGx2KHNrYiwgdmlmLCBzdGEsIHN0YV93 dGJsLCB3dGJsX2hkcik7DQorCQlpZiAoc3RhKQ0KKwkJCW10NzkxNV9tY3Vfd3RibF9odF90bHYo c2tiLCBzdGEsIHN0YV93dGJsLCB3dGJsX2hkcik7DQorCX0NCisNCisJcmV0ID0gX19tdDc2X21j dV9za2Jfc2VuZF9tc2coJmRldi0+bXQ3Niwgc2tiLA0KKwkJCQkgICAgICBNQ1VfRVhUX0NNRF9T VEFfUkVDX1VQREFURSwgdHJ1ZSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlp ZiAoZW5hYmxlICYmIHN0YSkNCisJCXJldHVybiBtdDc5MTVfbWN1X2FkZF9yYXRlX2N0cmwoZGV2 LCB2aWYsIHN0YSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9hZGRf ZGV2X2luZm8oc3RydWN0IG10NzkxNV9kZXYgKmRldiwNCisJCQkgICAgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwgYm9vbCBlbmFibGUpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9 IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB7DQorCQlzdHJ1 Y3QgcmVxX2hkciB7DQorCQkJdTggb21hY19pZHg7DQorCQkJdTggZGJkY19pZHg7DQorCQkJX19s ZTE2IHRsdl9udW07DQorCQkJdTggaXNfdGx2X2FwcGVuZDsNCisJCQl1OCByc3ZbM107DQorCQl9 IF9fcGFja2VkIGhkcjsNCisJCXN0cnVjdCByZXFfdGx2IHsNCisJCQlfX2xlMTYgdGFnOw0KKwkJ CV9fbGUxNiBsZW47DQorCQkJdTggYWN0aXZlOw0KKwkJCXU4IGRiZGNfaWR4Ow0KKwkJCXU4IG9t YWNfYWRkcltFVEhfQUxFTl07DQorCQl9IF9fcGFja2VkIHRsdjsNCisJfSBkYXRhID0gew0KKwkJ LmhkciA9IHsNCisJCQkub21hY19pZHggPSBtdmlmLT5vbWFjX2lkeCwNCisJCQkuZGJkY19pZHgg PSBtdmlmLT5iYW5kX2lkeCwNCisJCQkudGx2X251bSA9IGNwdV90b19sZTE2KDEpLA0KKwkJCS5p c190bHZfYXBwZW5kID0gMSwNCisJCX0sDQorCQkudGx2ID0gew0KKwkJCS50YWcgPSBjcHVfdG9f bGUxNihERVZfSU5GT19BQ1RJVkUpLA0KKwkJCS5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2Yoc3Ry dWN0IHJlcV90bHYpKSwNCisJCQkuYWN0aXZlID0gZW5hYmxlLA0KKwkJCS5kYmRjX2lkeCA9IG12 aWYtPmJhbmRfaWR4LA0KKwkJfSwNCisJfTsNCisNCisJbWVtY3B5KGRhdGEudGx2Lm9tYWNfYWRk ciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7DQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZk ZXYtPm10NzYsIE1DVV9FWFRfQ01EX0RFVl9JTkZPX1VQREFURSwNCisJCQkJICAgJmRhdGEsIHNp emVvZihkYXRhKSwgdHJ1ZSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9iZWFj b25fY3NhKHN0cnVjdCBza19idWZmICpyc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KKwkJICAg ICAgc3RydWN0IGJzc19pbmZvX2JjbiAqYmNuLA0KKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV9t dXRhYmxlX29mZnNldHMgKm9mZnMpDQorew0KKwlpZiAob2Zmcy0+Y3NhX2NvdW50ZXJfb2Zmc1sw XSkgew0KKwkJc3RydWN0IHRsdiAqdGx2Ow0KKwkJc3RydWN0IGJzc19pbmZvX2Jjbl9jc2EgKmNz YTsNCisNCisJCXRsdiA9IG10NzkxNV9tY3VfYWRkX25lc3RlZF9zdWJ0bHYocnNrYiwgQlNTX0lO Rk9fQkNOX0NTQSwNCisJCQkJCQkgICBzaXplb2YoKmNzYSksICZiY24tPnN1Yl9udGx2LA0KKwkJ CQkJCSAgICZiY24tPmxlbik7DQorCQljc2EgPSAoc3RydWN0IGJzc19pbmZvX2Jjbl9jc2EgKil0 bHY7DQorCQljc2EtPmNudCA9IHNrYi0+ZGF0YVtvZmZzLT5jc2FfY291bnRlcl9vZmZzWzBdXTsN CisJfQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3VfYmVhY29uX2NvbnQoc3RydWN0 IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnJza2IsDQorCQkgICAgICAgc3RydWN0 IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJzc19pbmZvX2JjbiAqYmNuLA0KKwkJICAgICAgIHN0cnVj dCBpZWVlODAyMTFfbXV0YWJsZV9vZmZzZXRzICpvZmZzKQ0KK3sNCisJc3RydWN0IG10NzZfd2Np ZCAqd2NpZCA9ICZkZXYtPm10NzYuZ2xvYmFsX3djaWQ7DQorCXN0cnVjdCBic3NfaW5mb19iY25f Y29udCAqY29udDsNCisJc3RydWN0IHRsdiAqdGx2Ow0KKwl1OCAqYnVmOw0KKwlpbnQgbGVuID0g c2l6ZW9mKCpjb250KSArIE1UX1RYRF9TSVpFICsgc2tiLT5sZW47DQorDQorCXRsdiA9IG10Nzkx NV9tY3VfYWRkX25lc3RlZF9zdWJ0bHYocnNrYiwgQlNTX0lORk9fQkNOX0NPTlRFTlQsDQorCQkJ CQkgICBsZW4sICZiY24tPnN1Yl9udGx2LCAmYmNuLT5sZW4pOw0KKw0KKwljb250ID0gKHN0cnVj dCBic3NfaW5mb19iY25fY29udCAqKXRsdjsNCisJY29udC0+cGt0X2xlbiA9IGNwdV90b19sZTE2 KE1UX1RYRF9TSVpFICsgc2tiLT5sZW4pOw0KKwljb250LT50aW1fb2ZzID0gY3B1X3RvX2xlMTYo b2Zmcy0+dGltX29mZnNldCk7DQorDQorCWlmIChvZmZzLT5jc2FfY291bnRlcl9vZmZzWzBdKQ0K KwkJY29udC0+Y3NhX29mcyA9IGNwdV90b19sZTE2KG9mZnMtPmNzYV9jb3VudGVyX29mZnNbMF0g LSA0KTsNCisNCisJYnVmID0gKHU4ICopdGx2ICsgc2l6ZW9mKCpjb250KTsNCisJbXQ3OTE1X21h Y193cml0ZV90eHdpKGRldiwgKF9fbGUzMiAqKWJ1Ziwgc2tiLCB3Y2lkLCBOVUxMLA0KKwkJCSAg ICAgIHRydWUpOw0KKwltZW1jcHkoYnVmICsgTVRfVFhEX1NJWkUsIHNrYi0+ZGF0YSwgc2tiLT5s ZW4pOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9hZGRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LA0KKwkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgaW50IGVuKQ0KK3sNCisj ZGVmaW5lIE1BWF9CRUFDT05fU0laRSA1MTINCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10 NzkxNV9od19kZXYoaHcpOw0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3Bo eShodyk7DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICop dmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IGllZWU4MDIxMV9tdXRhYmxlX29mZnNldHMgb2ZmczsN CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCAqcnNrYjsNCisJc3RydWN0IHRsdiAqdGx2Ow0KKwlzdHJ1Y3QgYnNzX2luZm9fYmNuICpiY247 DQorCWludCBsZW4gPSBNVDc5MTVfQkVBQ09OX1VQREFURV9TSVpFICsgTUFYX0JFQUNPTl9TSVpF Ow0KKw0KKwlyc2tiID0gbXQ3OTE1X21jdV9hbGxvY19zdGFfcmVxKGRldiwgbXZpZiwgTlVMTCwg bGVuKTsNCisJaWYgKElTX0VSUihyc2tiKSkNCisJCXJldHVybiBQVFJfRVJSKHJza2IpOw0KKw0K Kwl0bHYgPSBtdDc5MTVfbWN1X2FkZF90bHYocnNrYiwgQlNTX0lORk9fT0ZGTE9BRCwgc2l6ZW9m KCpiY24pKTsNCisJYmNuID0gKHN0cnVjdCBic3NfaW5mb19iY24gKil0bHY7DQorCWJjbi0+ZW5h YmxlID0gZW47DQorDQorCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKGh3LCB2 aWYsICZvZmZzKTsNCisJaWYgKCFza2IpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKHNr Yi0+bGVuID4gTUFYX0JFQUNPTl9TSVpFIC0gTVRfVFhEX1NJWkUpIHsNCisJCWRldl9lcnIoZGV2 LT5tdDc2LmRldiwgIkJjbiBzaXplIGxpbWl0IGV4Y2VlZFxuIik7DQorCQlkZXZfa2ZyZWVfc2ti KHNrYik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpZiAobXZpZi0+YmFuZF9pZHgp IHsNCisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7DQorCQlpbmZvLT5od19xdWV1ZSB8 PSBNVF9UWF9IV19RVUVVRV9FWFRfUEhZOw0KKwl9DQorDQorCS8qIFRPRE86IHN1YnRhZyAtIGJz cyBjb2xvciBjb3VudCAmIDExdiBNQlNTSUQgKi8NCisJbXQ3OTE1X21jdV9iZWFjb25fY3NhKHJz a2IsIHNrYiwgYmNuLCAmb2Zmcyk7DQorCW10NzkxNV9tY3VfYmVhY29uX2NvbnQoZGV2LCByc2ti LCBza2IsIGJjbiwgJm9mZnMpOw0KKwlkZXZfa2ZyZWVfc2tiKHNrYik7DQorDQorCXJldHVybiBf X210NzZfbWN1X3NrYl9zZW5kX21zZygmcGh5LT5kZXYtPm10NzYsIHJza2IsDQorCQkJCSAgICAg ICBNQ1VfRVhUX0NNRF9CU1NfSU5GT19VUERBVEUsIHRydWUpOw0KK30NCisNCitzdGF0aWMgaW50 IG10NzkxNV9tY3Vfc2VuZF9maXJtd2FyZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBjb25zdCB2 b2lkICpkYXRhLA0KKwkJCQkgICAgaW50IGxlbikNCit7DQorCWludCByZXQgPSAwLCBjdXJfbGVu Ow0KKw0KKwl3aGlsZSAobGVuID4gMCkgew0KKwkJY3VyX2xlbiA9IG1pbl90KGludCwgNDA5NiAt IHNpemVvZihzdHJ1Y3QgbXQ3OTE1X21jdV90eGQpLA0KKwkJCQlsZW4pOw0KKw0KKwkJcmV0ID0g X19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCAtTUNVX0NNRF9GV19TQ0FUVEVSLA0KKwkJ CQkJICBkYXRhLCBjdXJfbGVuLCBmYWxzZSk7DQorCQlpZiAocmV0KQ0KKwkJCWJyZWFrOw0KKw0K KwkJZGF0YSArPSBjdXJfbGVuOw0KKwkJbGVuIC09IGN1cl9sZW47DQorCQltdDc2X3F1ZXVlX3R4 X2NsZWFudXAoZGV2LCBNVF9UWFFfRldETCwgZmFsc2UpOw0KKwl9DQorDQorCXJldHVybiByZXQ7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1X21jdV9zdGFydF9maXJtd2FyZShzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2LCB1MzIgYWRkciwNCisJCQkJICAgICB1MzIgb3B0aW9uKQ0KK3sNCisJc3Ry dWN0IHsNCisJCV9fbGUzMiBvcHRpb247DQorCQlfX2xlMzIgYWRkcjsNCisJfSByZXEgPSB7DQor CQkub3B0aW9uID0gY3B1X3RvX2xlMzIob3B0aW9uKSwNCisJCS5hZGRyID0gY3B1X3RvX2xlMzIo YWRkciksDQorCX07DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYs IC1NQ1VfQ01EX0ZXX1NUQVJUX1JFUSwNCisJCQkJICAgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUp Ow0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9tY3VfcmVzdGFydChzdHJ1Y3QgbXQ3Nl9kZXYg KmRldikNCit7DQorCXN0cnVjdCB7DQorCQl1OCBwb3dlcl9tb2RlOw0KKwkJdTggcnN2WzNdOw0K Kwl9IHJlcSA9IHsNCisJCS5wb3dlcl9tb2RlID0gMSwNCisJfTsNCisNCisJcmV0dXJuIF9fbXQ3 Nl9tY3Vfc2VuZF9tc2coZGV2LCAtTUNVX0NNRF9OSUNfUE9XRVJfQ1RSTCwgJnJlcSwNCisJCQkJ ICAgc2l6ZW9mKHJlcSksIGZhbHNlKTsNCit9DQorDQorc3RhdGljIGludCBtdDc5MTVfbWN1X3Bh dGNoX3NlbV9jdHJsKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGJvb2wgZ2V0KQ0KK3sNCisJc3Ry dWN0IHsNCisJCV9fbGUzMiBvcDsNCisJfSByZXEgPSB7DQorCQkub3AgPSBjcHVfdG9fbGUzMihn ZXQgPyBQQVRDSF9TRU1fR0VUIDogUEFUQ0hfU0VNX1JFTEVBU0UpLA0KKwl9Ow0KKw0KKwlyZXR1 cm4gX19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCAtTUNVX0NNRF9QQVRDSF9TRU1fQ09O VFJPTCwNCisJCQkJICAgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitzdGF0aWMg aW50IG10NzkxNV9tY3Vfc3RhcnRfcGF0Y2goc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQor CXN0cnVjdCB7DQorCQl1OCBjaGVja19jcmM7DQorCQl1OCByZXNlcnZlZFszXTsNCisJfSByZXEg PSB7DQorCQkuY2hlY2tfY3JjID0gMCwNCisJfTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2Vu ZF9tc2coJmRldi0+bXQ3NiwgLU1DVV9DTURfUEFUQ0hfRklOSVNIX1JFUSwNCisJCQkJICAgJnJl cSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9kcml2ZXJf b3duKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwl1MzIgcmVnID0gbXQ3OTE1X3JlZ19t YXBfbDEoZGV2LCBNVF9UT1BfTFBDUl9IT1NUX0JBTkQwKTsNCisNCisJbXQ3Nl93cihkZXYsIHJl ZywgTVRfVE9QX0xQQ1JfSE9TVF9EUlZfT1dOKTsNCisJaWYgKCFtdDc2X3BvbGxfbXNlYyhkZXYs IHJlZywgTVRfVE9QX0xQQ1JfSE9TVF9GV19PV04sDQorCQkJICAgIDAsIDUwMCkpIHsNCisJCWRl dl9lcnIoZGV2LT5tdDc2LmRldiwgIlRpbWVvdXQgZm9yIGRyaXZlciBvd25cbiIpOw0KKwkJcmV0 dXJuIC1FSU87DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1 X21jdV9pbml0X2Rvd25sb2FkKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBhZGRyLA0KKwkJ CQkgICAgdTMyIGxlbiwgdTMyIG1vZGUpDQorew0KKwlzdHJ1Y3Qgew0KKwkJX19sZTMyIGFkZHI7 DQorCQlfX2xlMzIgbGVuOw0KKwkJX19sZTMyIG1vZGU7DQorCX0gcmVxID0gew0KKwkJLmFkZHIg PSBjcHVfdG9fbGUzMihhZGRyKSwNCisJCS5sZW4gPSBjcHVfdG9fbGUzMihsZW4pLA0KKwkJLm1v ZGUgPSBjcHVfdG9fbGUzMihtb2RlKSwNCisJfTsNCisJaW50IGF0dHI7DQorDQorCWlmIChyZXEu YWRkciA9PSBNQ1VfUEFUQ0hfQUREUkVTUykNCisJCWF0dHIgPSAtTUNVX0NNRF9QQVRDSF9TVEFS VF9SRVE7DQorCWVsc2UNCisJCWF0dHIgPSAtTUNVX0NNRF9UQVJHRVRfQUREUkVTU19MRU5fUkVR Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBhdHRyLCAmcmVx LCBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1X2xvYWRfcGF0 Y2goc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCWNvbnN0IHN0cnVjdCBtdDc5MTVfcGF0 Y2hfaGRyICpoZHI7DQorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOw0KKwlpbnQg aSwgcmV0LCBzZW07DQorDQorCXNlbSA9IG10NzkxNV9tY3VfcGF0Y2hfc2VtX2N0cmwoZGV2LCAx KTsNCisJc3dpdGNoIChzZW0pIHsNCisJY2FzZSBQQVRDSF9JU19ETDoNCisJCXJldHVybiAwOw0K KwljYXNlIFBBVENIX05PVF9ETF9TRU1fU1VDQ0VTUzoNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0K KwkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiRmFpbGVkIHRvIGdldCBwYXRjaCBzZW1hcGhvcmVc biIpOw0KKwkJcmV0dXJuIC1FQUdBSU47DQorCX0NCisNCisJcmV0ID0gcmVxdWVzdF9maXJtd2Fy ZSgmZncsIE1UNzkxNV9ST01fUEFUQ0gsIGRldi0+bXQ3Ni5kZXYpOw0KKwlpZiAocmV0KQ0KKwkJ Z290byBvdXQ7DQorDQorCWlmICghZncgfHwgIWZ3LT5kYXRhIHx8IGZ3LT5zaXplIDwgc2l6ZW9m KCpoZHIpKSB7DQorCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJJbnZhbGlkIGZpcm13YXJlXG4i KTsNCisJCXJldCA9IC1FSU5WQUw7DQorCQlnb3RvIG91dDsNCisJfQ0KKw0KKwloZHIgPSAoY29u c3Qgc3RydWN0IG10NzkxNV9wYXRjaF9oZHIgKikoZnctPmRhdGEpOw0KKw0KKwlkZXZfaW5mbyhk ZXYtPm10NzYuZGV2LCAiSFcvU1cgVmVyc2lvbjogMHgleCwgQnVpbGQgVGltZTogJS4xNnNcbiIs DQorCQkgYmUzMl90b19jcHUoaGRyLT5od19zd192ZXIpLCBoZHItPmJ1aWxkX2RhdGUpOw0KKw0K Kwlmb3IgKGkgPSAwOyBpIDwgYmUzMl90b19jcHUoaGRyLT5kZXNjLm5fcmVnaW9uKTsgaSsrKSB7 DQorCQlzdHJ1Y3QgbXQ3OTE1X3BhdGNoX3NlYyAqc2VjOw0KKwkJY29uc3QgdTggKmRsOw0KKwkJ dTMyIGxlbiwgYWRkcjsNCisNCisJCXNlYyA9IChzdHJ1Y3QgbXQ3OTE1X3BhdGNoX3NlYyAqKShm dy0+ZGF0YSArIHNpemVvZigqaGRyKSArDQorCQkJCQkJICBpICogc2l6ZW9mKCpzZWMpKTsNCisJ CWlmICgoYmUzMl90b19jcHUoc2VjLT50eXBlKSAmIFBBVENIX1NFQ19UWVBFX01BU0spICE9DQor CQkgICAgUEFUQ0hfU0VDX1RZUEVfSU5GTykgew0KKwkJCXJldCA9IC1FSU5WQUw7DQorCQkJZ290 byBvdXQ7DQorCQl9DQorDQorCQlhZGRyID0gYmUzMl90b19jcHUoc2VjLT5pbmZvLmFkZHIpOw0K KwkJbGVuID0gYmUzMl90b19jcHUoc2VjLT5pbmZvLmxlbik7DQorCQlkbCA9IGZ3LT5kYXRhICsg YmUzMl90b19jcHUoc2VjLT5vZmZzKTsNCisNCisJCXJldCA9IG10NzkxNV9tY3VfaW5pdF9kb3du bG9hZChkZXYsIGFkZHIsIGxlbiwNCisJCQkJCSAgICAgICBETF9NT0RFX05FRURfUlNQKTsNCisJ CWlmIChyZXQpIHsNCisJCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJEb3dubG9hZCByZXF1ZXN0 IGZhaWxlZFxuIik7DQorCQkJZ290byBvdXQ7DQorCQl9DQorDQorCQlyZXQgPSBtdDc5MTVfbWN1 X3NlbmRfZmlybXdhcmUoZGV2LCBkbCwgbGVuKTsNCisJCWlmIChyZXQpIHsNCisJCQlkZXZfZXJy KGRldi0+bXQ3Ni5kZXYsICJGYWlsZWQgdG8gc2VuZCBwYXRjaFxuIik7DQorCQkJZ290byBvdXQ7 DQorCQl9DQorCX0NCisNCisJcmV0ID0gbXQ3OTE1X21jdV9zdGFydF9wYXRjaChkZXYpOw0KKwlp ZiAocmV0KQ0KKwkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiRmFpbGVkIHRvIHN0YXJ0IHBhdGNo XG4iKTsNCisNCitvdXQ6DQorCXNlbSA9IG10NzkxNV9tY3VfcGF0Y2hfc2VtX2N0cmwoZGV2LCAw KTsNCisJc3dpdGNoIChzZW0pIHsNCisJY2FzZSBQQVRDSF9SRUxfU0VNX1NVQ0NFU1M6DQorCQli cmVhazsNCisJZGVmYXVsdDoNCisJCXJldCA9IC1FQUdBSU47DQorCQlkZXZfZXJyKGRldi0+bXQ3 Ni5kZXYsICJGYWlsZWQgdG8gcmVsZWFzZSBwYXRjaCBzZW1hcGhvcmVcbiIpOw0KKwkJZ290byBv dXQ7DQorCX0NCisJcmVsZWFzZV9maXJtd2FyZShmdyk7DQorDQorCXJldHVybiByZXQ7DQorfQ0K Kw0KK3N0YXRpYyB1MzIgbXQ3OTE1X21jdV9nZW5fZGxfbW9kZSh1OCBmZWF0dXJlX3NldCwgYm9v bCBpc193YSkNCit7DQorCXUzMiByZXQgPSAwOw0KKw0KKwlyZXQgfD0gKGZlYXR1cmVfc2V0ICYg RldfRkVBVFVSRV9TRVRfRU5DUllQVCkgPw0KKwkgICAgICAgKERMX01PREVfRU5DUllQVCB8IERM X01PREVfUkVTRVRfU0VDX0lWKSA6IDA7DQorCXJldCB8PSBGSUVMRF9QUkVQKERMX01PREVfS0VZ X0lEWCwNCisJCQkgIEZJRUxEX0dFVChGV19GRUFUVVJFX1NFVF9LRVlfSURYLCBmZWF0dXJlX3Nl dCkpOw0KKwlyZXQgfD0gRExfTU9ERV9ORUVEX1JTUDsNCisJcmV0IHw9IGlzX3dhID8gRExfTU9E RV9XT1JLSU5HX1BEQV9DUjQgOiAwOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMg aW50DQorbXQ3OTE1X21jdV9zZW5kX3JhbV9maXJtd2FyZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 LA0KKwkJCSAgICAgY29uc3Qgc3RydWN0IG10NzkxNV9md190cmFpbGVyICpoZHIsDQorCQkJICAg ICBjb25zdCB1OCAqZGF0YSwgYm9vbCBpc193YSkNCit7DQorCWludCBpLCBvZmZzZXQgPSAwOw0K Kwl1MzIgb3ZlcnJpZGUgPSAwLCBvcHRpb24gPSAwOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgaGRy LT5uX3JlZ2lvbjsgaSsrKSB7DQorCQljb25zdCBzdHJ1Y3QgbXQ3OTE1X2Z3X3JlZ2lvbiAqcmVn aW9uOw0KKwkJaW50IGVycjsNCisJCXUzMiBsZW4sIGFkZHIsIG1vZGU7DQorDQorCQlyZWdpb24g PSAoY29uc3Qgc3RydWN0IG10NzkxNV9md19yZWdpb24gKikoKGNvbnN0IHU4ICopaGRyIC0NCisJ CQkgKGhkci0+bl9yZWdpb24gLSBpKSAqIHNpemVvZigqcmVnaW9uKSk7DQorCQltb2RlID0gbXQ3 OTE1X21jdV9nZW5fZGxfbW9kZShyZWdpb24tPmZlYXR1cmVfc2V0LCBpc193YSk7DQorCQlsZW4g PSBsZTMyX3RvX2NwdShyZWdpb24tPmxlbik7DQorCQlhZGRyID0gbGUzMl90b19jcHUocmVnaW9u LT5hZGRyKTsNCisNCisJCWlmIChyZWdpb24tPmZlYXR1cmVfc2V0ICYgRldfRkVBVFVSRV9PVkVS UklERV9BRERSKQ0KKwkJCW92ZXJyaWRlID0gYWRkcjsNCisNCisJCWVyciA9IG10NzkxNV9tY3Vf aW5pdF9kb3dubG9hZChkZXYsIGFkZHIsIGxlbiwgbW9kZSk7DQorCQlpZiAoZXJyKSB7DQorCQkJ ZGV2X2VycihkZXYtPm10NzYuZGV2LCAiRG93bmxvYWQgcmVxdWVzdCBmYWlsZWRcbiIpOw0KKwkJ CXJldHVybiBlcnI7DQorCQl9DQorDQorCQllcnIgPSBtdDc5MTVfbWN1X3NlbmRfZmlybXdhcmUo ZGV2LCBkYXRhICsgb2Zmc2V0LCBsZW4pOw0KKwkJaWYgKGVycikgew0KKwkJCWRldl9lcnIoZGV2 LT5tdDc2LmRldiwgIkZhaWxlZCB0byBzZW5kIGZpcm13YXJlLlxuIik7DQorCQkJcmV0dXJuIGVy cjsNCisJCX0NCisNCisJCW9mZnNldCArPSBsZW47DQorCX0NCisNCisJaWYgKG92ZXJyaWRlKQ0K KwkJb3B0aW9uIHw9IEZXX1NUQVJUX09WRVJSSURFOw0KKw0KKwlpZiAoaXNfd2EpDQorCQlvcHRp b24gfD0gRldfU1RBUlRfV09SS0lOR19QREFfQ1I0Ow0KKw0KKwlyZXR1cm4gbXQ3OTE1X21jdV9z dGFydF9maXJtd2FyZShkZXYsIG92ZXJyaWRlLCBvcHRpb24pOw0KK30NCisNCitzdGF0aWMgaW50 IG10NzkxNV9sb2FkX3JhbShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJY29uc3Qgc3Ry dWN0IG10NzkxNV9md190cmFpbGVyICpoZHI7DQorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7 DQorCWludCByZXQ7DQorDQorCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBNVDc5MTVfRklS TVdBUkVfV00sIGRldi0+bXQ3Ni5kZXYpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisN CisJaWYgKCFmdyB8fCAhZnctPmRhdGEgfHwgZnctPnNpemUgPCBzaXplb2YoKmhkcikpIHsNCisJ CWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIkludmFsaWQgZmlybXdhcmVcbiIpOw0KKwkJcmV0ID0g LUVJTlZBTDsNCisJCWdvdG8gb3V0Ow0KKwl9DQorDQorCWhkciA9IChjb25zdCBzdHJ1Y3QgbXQ3 OTE1X2Z3X3RyYWlsZXIgKikoZnctPmRhdGEgKyBmdy0+c2l6ZSAtDQorCQkJCQlzaXplb2YoKmhk cikpOw0KKw0KKwlkZXZfaW5mbyhkZXYtPm10NzYuZGV2LCAiV00gRmlybXdhcmUgVmVyc2lvbjog JS4xMHMsIEJ1aWxkIFRpbWU6ICUuMTVzXG4iLA0KKwkJIGhkci0+ZndfdmVyLCBoZHItPmJ1aWxk X2RhdGUpOw0KKw0KKwlyZXQgPSBtdDc5MTVfbWN1X3NlbmRfcmFtX2Zpcm13YXJlKGRldiwgaGRy LCBmdy0+ZGF0YSwgZmFsc2UpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldi0+bXQ3Ni5k ZXYsICJGYWlsZWQgdG8gc3RhcnQgV00gZmlybXdhcmVcbiIpOw0KKwkJZ290byBvdXQ7DQorCX0N CisNCisJcmVsZWFzZV9maXJtd2FyZShmdyk7DQorDQorCXJldCA9IHJlcXVlc3RfZmlybXdhcmUo JmZ3LCBNVDc5MTVfRklSTVdBUkVfV0EsIGRldi0+bXQ3Ni5kZXYpOw0KKwlpZiAocmV0KQ0KKwkJ cmV0dXJuIHJldDsNCisNCisJaWYgKCFmdyB8fCAhZnctPmRhdGEgfHwgZnctPnNpemUgPCBzaXpl b2YoKmhkcikpIHsNCisJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIkludmFsaWQgZmlybXdhcmVc biIpOw0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWdvdG8gb3V0Ow0KKwl9DQorDQorCWhkciA9IChj b25zdCBzdHJ1Y3QgbXQ3OTE1X2Z3X3RyYWlsZXIgKikoZnctPmRhdGEgKyBmdy0+c2l6ZSAtDQor CQkJCQlzaXplb2YoKmhkcikpOw0KKw0KKwlkZXZfaW5mbyhkZXYtPm10NzYuZGV2LCAiV0EgRmly bXdhcmUgVmVyc2lvbjogJS4xMHMsIEJ1aWxkIFRpbWU6ICUuMTVzXG4iLA0KKwkJIGhkci0+Zndf dmVyLCBoZHItPmJ1aWxkX2RhdGUpOw0KKw0KKwlyZXQgPSBtdDc5MTVfbWN1X3NlbmRfcmFtX2Zp cm13YXJlKGRldiwgaGRyLCBmdy0+ZGF0YSwgdHJ1ZSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9l cnIoZGV2LT5tdDc2LmRldiwgIkZhaWxlZCB0byBzdGFydCBXQSBmaXJtd2FyZVxuIik7DQorCQln b3RvIG91dDsNCisJfQ0KKw0KKwlzbnByaW50ZihkZXYtPm10NzYuaHctPndpcGh5LT5md192ZXJz aW9uLA0KKwkJIHNpemVvZihkZXYtPm10NzYuaHctPndpcGh5LT5md192ZXJzaW9uKSwNCisJCSAi JS4xMHMtJS4xNXMiLCBoZHItPmZ3X3ZlciwgaGRyLT5idWlsZF9kYXRlKTsNCisNCitvdXQ6DQor CXJlbGVhc2VfZmlybXdhcmUoZncpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMg aW50IG10NzkxNV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlp bnQgcmV0Ow0KKwl1MzIgdmFsLCByZWcgPSBtdDc5MTVfcmVnX21hcF9sMShkZXYsIE1UX1RPUF9N SVNDKTsNCisNCisJdmFsID0gRklFTERfUFJFUChNVF9UT1BfTUlTQ19GV19TVEFURSwgRldfU1RB VEVfRldfRE9XTkxPQUQpOw0KKw0KKwlpZiAoIW10NzZfcG9sbF9tc2VjKGRldiwgcmVnLCBNVF9U T1BfTUlTQ19GV19TVEFURSwgdmFsLCAxMDAwKSkgew0KKwkJLyogcmVzdGFydCBmaXJtd2FyZSBv bmNlICovDQorCQlfX210NzZfbWN1X3Jlc3RhcnQoJmRldi0+bXQ3Nik7DQorCQlpZiAoIW10NzZf cG9sbF9tc2VjKGRldiwgcmVnLCBNVF9UT1BfTUlTQ19GV19TVEFURSwNCisJCQkJICAgIHZhbCwg MTAwMCkpIHsNCisJCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsDQorCQkJCSJGaXJtd2FyZSBpcyBu b3QgcmVhZHkgZm9yIGRvd25sb2FkXG4iKTsNCisJCQlyZXR1cm4gLUVJTzsNCisJCX0NCisJfQ0K Kw0KKwlyZXQgPSBtdDc5MTVfbG9hZF9wYXRjaChkZXYpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJu IHJldDsNCisNCisJcmV0ID0gbXQ3OTE1X2xvYWRfcmFtKGRldik7DQorCWlmIChyZXQpDQorCQly ZXR1cm4gcmV0Ow0KKw0KKwlpZiAoIW10NzZfcG9sbF9tc2VjKGRldiwgcmVnLCBNVF9UT1BfTUlT Q19GV19TVEFURSwNCisJCQkgICAgRklFTERfUFJFUChNVF9UT1BfTUlTQ19GV19TVEFURSwNCisJ CQkJICAgICAgIEZXX1NUQVRFX1dBQ1BVX1JEWSksIDEwMDApKSB7DQorCQlkZXZfZXJyKGRldi0+ bXQ3Ni5kZXYsICJUaW1lb3V0IGZvciBpbml0aWFsaXppbmcgZmlybXdhcmVcbiIpOw0KKwkJcmV0 dXJuIC1FSU87DQorCX0NCisNCisJbXQ3Nl9xdWV1ZV90eF9jbGVhbnVwKGRldiwgTVRfVFhRX0ZX REwsIGZhbHNlKTsNCisNCisJZGV2X2RiZyhkZXYtPm10NzYuZGV2LCAiRmlybXdhcmUgaW5pdCBk b25lXG4iKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2luaXQoc3Ry dWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3Nl9tY3Vf b3BzIG10NzkxNV9tY3Vfb3BzID0gew0KKwkJLmhlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBtdDc5 MTVfbWN1X3R4ZCksDQorCQkubWN1X3NrYl9zZW5kX21zZyA9IG10NzkxNV9tY3Vfc2VuZF9tZXNz YWdlLA0KKwkJLm1jdV9zZW5kX21zZyA9IG10NzkxNV9tY3VfbXNnX3NlbmQsDQorCQkubWN1X3Jl c3RhcnQgPSBtdDc5MTVfbWN1X3Jlc3RhcnQsDQorCX07DQorCWludCByZXQ7DQorDQorCWRldi0+ bXQ3Ni5tY3Vfb3BzID0gJm10NzkxNV9tY3Vfb3BzLA0KKw0KKwlyZXQgPSBtdDc5MTVfZHJpdmVy X293bihkZXYpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gbXQ3OTE1 X2xvYWRfZmlybXdhcmUoZGV2KTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCXNl dF9iaXQoTVQ3Nl9TVEFURV9NQ1VfUlVOTklORywgJmRldi0+bXBoeS5zdGF0ZSk7DQorDQorCXJl dHVybiAwOw0KK30NCisNCit2b2lkIG10NzkxNV9tY3VfZXhpdChzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2KQ0KK3sNCisJdTMyIHJlZyA9IG10NzkxNV9yZWdfbWFwX2wxKGRldiwgTVRfVE9QX01JU0Mp Ow0KKw0KKwlfX210NzZfbWN1X3Jlc3RhcnQoJmRldi0+bXQ3Nik7DQorCWlmICghbXQ3Nl9wb2xs X21zZWMoZGV2LCByZWcsIE1UX1RPUF9NSVNDX0ZXX1NUQVRFLA0KKwkJCSAgICBGSUVMRF9QUkVQ KE1UX1RPUF9NSVNDX0ZXX1NUQVRFLA0KKwkJCQkgICAgICAgRldfU1RBVEVfRldfRE9XTkxPQUQp LCAxMDAwKSkgew0KKwkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiRmFpbGVkIHRvIGV4aXQgbWN1 XG4iKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlyZWcgPSBtdDc5MTVfcmVnX21hcF9sMShkZXYs IE1UX1RPUF9MUENSX0hPU1RfQkFORDApOw0KKwltdDc2X3dyKGRldiwgcmVnLCBNVF9UT1BfTFBD Ul9IT1NUX0ZXX09XTik7DQorCXNrYl9xdWV1ZV9wdXJnZSgmZGV2LT5tdDc2Lm1jdS5yZXNfcSk7 DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X3NldF9tYWMoc3RydWN0IG10NzkxNV9kZXYgKmRldiwg aW50IGJhbmQsDQorCQkgICAgICAgYm9vbCBlbmFibGUsIGJvb2wgaGRyX3RyYW5zKQ0KK3sNCisJ c3RydWN0IHsNCisJCXU4IG9wZXJhdGlvbjsNCisJCXU4IGVuYWJsZTsNCisJCXU4IGNoZWNrX2Jz c2lkOw0KKwkJdTggaW5zZXJ0X3ZsYW47DQorCQl1OCByZW1vdmVfdmxhbjsNCisJCXU4IHRpZDsN CisJCXU4IG1vZGU7DQorCQl1OCByc3Y7DQorCX0gX19wYWNrZWQgcmVxX3RyYW5zID0gew0KKwkJ LmVuYWJsZSA9IGhkcl90cmFucywNCisJfTsNCisJc3RydWN0IHsNCisJCXU4IGVuYWJsZTsNCisJ CXU4IGJhbmQ7DQorCQl1OCByc3ZbMl07DQorCX0gX19wYWNrZWQgcmVxX21hYyA9IHsNCisJCS5l bmFibGUgPSBlbmFibGUsDQorCQkuYmFuZCA9IGJhbmQsDQorCX07DQorCWludCByZXQ7DQorDQor CXJldCA9IF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfUlhfSERS X1RSQU5TLA0KKwkJCQkgICZyZXFfdHJhbnMsIHNpemVvZihyZXFfdHJhbnMpLCBmYWxzZSk7DQor CWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5kX21z ZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9NQUNfSU5JVF9DVFJMLA0KKwkJCQkgICAmcmVxX21h Yywgc2l6ZW9mKHJlcV9tYWMpLCB0cnVlKTsNCit9DQorDQoraW50IG10NzkxNV9tY3Vfc2V0X3Nj cyhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1OCBiYW5kLCBib29sIGVuYWJsZSkNCit7DQorCXN0 cnVjdCB7DQorCQlfX2xlMzIgY21kOw0KKwkJdTggYmFuZDsNCisJCXU4IGVuYWJsZTsNCisJfSBf X3BhY2tlZCByZXEgPSB7DQorCQkuY21kID0gY3B1X3RvX2xlMzIoU0NTX0VOQUJMRSksDQorCQku YmFuZCA9IGJhbmQsDQorCQkuZW5hYmxlID0gZW5hYmxlICsgMSwNCisJfTsNCisNCisJcmV0dXJu IF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfU0NTX0NUUkwsICZy ZXEsDQorCQkJCSAgIHNpemVvZihyZXEpLCBmYWxzZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1 X3NldF9ydHNfdGhyZXNoKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksIHUzMiB2YWwpDQorew0KKwlz dHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5LT5kZXY7DQorCXN0cnVjdCB7DQorCQl1OCBwcm90 X2lkeDsNCisJCXU4IGJhbmQ7DQorCQl1OCByc3ZbMl07DQorCQlfX2xlMzIgbGVuX3RocmVzaDsN CisJCV9fbGUzMiBwa3RfdGhyZXNoOw0KKwl9IF9fcGFja2VkIHJlcSA9IHsNCisJCS5wcm90X2lk eCA9IDEsDQorCQkuYmFuZCA9IHBoeSAhPSAmZGV2LT5waHksDQorCQkubGVuX3RocmVzaCA9IGNw dV90b19sZTMyKHZhbCksDQorCQkucGt0X3RocmVzaCA9IGNwdV90b19sZTMyKDB4MiksDQorCX07 DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01E X1BST1RFQ1RfQ1RSTCwNCisJCQkJICAgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisN CitpbnQgbXQ3OTE1X21jdV9zZXRfdHgoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IGll ZWU4MDIxMV92aWYgKnZpZikNCit7DQorI2RlZmluZSBXTU1fQUlGU19TRVQJCUJJVCgwKQ0KKyNk ZWZpbmUgV01NX0NXX01JTl9TRVQJCUJJVCgxKQ0KKyNkZWZpbmUgV01NX0NXX01BWF9TRVQJCUJJ VCgyKQ0KKyNkZWZpbmUgV01NX1RYT1BfU0VUCQlCSVQoMykNCisjZGVmaW5lIFdNTV9QQVJBTV9T RVQJCUdFTk1BU0soMywgMCkNCisjZGVmaW5lIFRYX0NNRF9NT0RFCQkxDQorCXN0cnVjdCBlZGNh IHsNCisJCXU4IHF1ZXVlOw0KKwkJdTggc2V0Ow0KKwkJdTggYWlmczsNCisJCXU4IGN3X21pbjsN CisJCV9fbGUxNiBjd19tYXg7DQorCQlfX2xlMTYgdHhvcDsNCisJfTsNCisJc3RydWN0IG10Nzkx NV9tY3VfdHggew0KKwkJdTggdG90YWw7DQorCQl1OCBhY3Rpb247DQorCQl1OCB2YWxpZDsNCisJ CXU4IG1vZGU7DQorDQorCQlzdHJ1Y3QgZWRjYSBlZGNhW0lFRUU4MDIxMV9OVU1fQUNTXTsNCisJ fSBfX3BhY2tlZCByZXEgPSB7DQorCQkudmFsaWQgPSB0cnVlLA0KKwkJLm1vZGUgPSBUWF9DTURf TU9ERSwNCisJCS50b3RhbCA9IElFRUU4MDIxMV9OVU1fQUNTLA0KKwl9Ow0KKwlzdHJ1Y3QgbXQ3 OTE1X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCWlu dCBhYzsNCisNCisJZm9yIChhYyA9IDA7IGFjIDwgSUVFRTgwMjExX05VTV9BQ1M7IGFjKyspIHsN CisJCXN0cnVjdCBlZGNhICplID0gJnJlcS5lZGNhW2FjXTsNCisNCisJCWUtPnF1ZXVlID0gYWMg KyBtdmlmLT53bW1faWR4ICogTVQ3OTE1X01BWF9XTU1fU0VUUzsNCisJCWUtPmFpZnMgPSBtdmlm LT53bW1bYWNdLmFpZnM7DQorCQllLT50eG9wID0gY3B1X3RvX2xlMTYobXZpZi0+d21tW2FjXS50 eG9wKTsNCisNCisJCWlmIChtdmlmLT53bW1bYWNdLmN3X21pbikNCisJCQllLT5jd19taW4gPSBm bHMobXZpZi0+d21tW2FjXS5jd19tYXgpOw0KKwkJZWxzZQ0KKwkJCWUtPmN3X21pbiA9IDU7DQor DQorCQlpZiAobXZpZi0+d21tW2FjXS5jd19tYXgpDQorCQkJZS0+Y3dfbWF4ID0gY3B1X3RvX2xl MTYoZmxzKG12aWYtPndtbVthY10uY3dfbWF4KSk7DQorCQllbHNlDQorCQkJZS0+Y3dfbWF4ID0g Y3B1X3RvX2xlMTYoMTApOw0KKwl9DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZk ZXYtPm10NzYsIE1DVV9FWFRfQ01EX0VEQ0FfVVBEQVRFLA0KKwkJCQkgICZyZXEsIHNpemVvZihy ZXEpLCB0cnVlKTsNCit9DQorDQoraW50IG10NzkxNV9tY3Vfc2V0X3BtKHN0cnVjdCBtdDc5MTVf ZGV2ICpkZXYsIGludCBiYW5kLCBpbnQgZW50ZXIpDQorew0KKyNkZWZpbmUgRU5URVJfUE1fU1RB VEUJCTENCisjZGVmaW5lIEVYSVRfUE1fU1RBVEUJCTINCisJc3RydWN0IHsNCisJCXU4IHBtX251 bWJlcjsNCisJCXU4IHBtX3N0YXRlOw0KKwkJdTggYnNzaWRbRVRIX0FMRU5dOw0KKwkJdTggZHRp bV9wZXJpb2Q7DQorCQl1OCB3bGFuX2lkeF9sbzsNCisJCV9fbGUxNiBiY25faW50ZXJ2YWw7DQor CQlfX2xlMzIgYWlkOw0KKwkJX19sZTMyIHJ4X2ZpbHRlcjsNCisJCXU4IGJhbmRfaWR4Ow0KKwkJ dTggd2xhbl9pZHhfaGk7DQorCQl1OCByc3ZbMl07DQorCQlfX2xlMzIgZmVhdHVyZTsNCisJCXU4 IG9tYWNfaWR4Ow0KKwkJdTggd21tX2lkeDsNCisJCXU4IGJjbl9sb3NzX2NudDsNCisJCXU4IGJj bl9zcF9kdXJhdGlvbjsNCisJfSBfX3BhY2tlZCByZXEgPSB7DQorCQkucG1fbnVtYmVyID0gNSwN CisJCS5wbV9zdGF0ZSA9IChlbnRlcikgPyBFTlRFUl9QTV9TVEFURSA6IEVYSVRfUE1fU1RBVEUs DQorCQkuYmFuZF9pZHggPSBiYW5kLA0KKwl9Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5k X21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9QTV9TVEFURV9DVFJMLA0KKwkJCQkgICAmcmVx LCBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X3JkZF9jbWQoc3Ry dWN0IG10NzkxNV9kZXYgKmRldiwNCisJCSAgICAgICBlbnVtIG10NzkxNV9yZGRfY21kIGNtZCwg dTggaW5kZXgsDQorCQkgICAgICAgdTggcnhfc2VsLCB1OCB2YWwpDQorew0KKwlzdHJ1Y3Qgew0K KwkJdTggY3RybDsNCisJCXU4IHJkZF9pZHg7DQorCQl1OCByZGRfcnhfc2VsOw0KKwkJdTggdmFs Ow0KKwkJdTggcnN2WzRdOw0KKwl9IF9fcGFja2VkIHJlcSA9IHsNCisJCS5jdHJsID0gY21kLA0K KwkJLnJkZF9pZHggPSBpbmRleCwNCisJCS5yZGRfcnhfc2VsID0gcnhfc2VsLA0KKwkJLnZhbCA9 IHZhbCwNCisJfTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3Niwg TUNVX0VYVF9DTURfU0VUX1JERF9DVFJMLA0KKwkJCQkgICAmcmVxLCBzaXplb2YocmVxKSwgdHJ1 ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X3NldF9mY2M1X2xwbihzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2LCBpbnQgdmFsKQ0KK3sNCisJc3RydWN0IHsNCisJCXUzMiB0YWc7DQorCQl1MTYgbWlu X2xwbjsNCisJCXU4IHJzdlsyXTsNCisJfSBfX3BhY2tlZCByZXEgPSB7DQorCQkudGFnID0gMHgx LA0KKwkJLm1pbl9scG4gPSB2YWwsDQorCX07DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRf bXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX1NFVF9SRERfVEgsDQorCQkJCSAgICZyZXEsIHNp emVvZihyZXEpLCB0cnVlKTsNCit9DQorDQoraW50IG10NzkxNV9tY3Vfc2V0X3B1bHNlX3RoKHN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkJICAgIGNvbnN0IHN0cnVjdCBtdDc5MTVfZGZzX3B1 bHNlICpwdWxzZSkNCit7DQorCXN0cnVjdCB7DQorCQl1MzIgdGFnOw0KKwkJc3RydWN0IG10Nzkx NV9kZnNfcHVsc2UgcHVsc2U7DQorCX0gX19wYWNrZWQgcmVxID0gew0KKwkJLnRhZyA9IDB4MywN CisJfTsNCisNCisJbWVtY3B5KCZyZXEucHVsc2UsIHB1bHNlLCBzaXplb2YoKnB1bHNlKSk7DQor DQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX1NF VF9SRERfVEgsDQorCQkJCSAgICZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQoraW50 IG10NzkxNV9tY3Vfc2V0X3JhZGFyX3RoKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGludCBpbmRl eCwNCisJCQkgICAgY29uc3Qgc3RydWN0IG10NzkxNV9kZnNfcGF0dGVybiAqcGF0dGVybikNCit7 DQorCXN0cnVjdCB7DQorCQl1MzIgdGFnOw0KKwkJdTE2IHJhZGFyX3R5cGU7DQorCQlzdHJ1Y3Qg bXQ3OTE1X2Rmc19wYXR0ZXJuIHBhdHRlcm47DQorCX0gX19wYWNrZWQgcmVxID0gew0KKwkJLnRh ZyA9IDB4MiwNCisJCS5yYWRhcl90eXBlID0gaW5kZXgsDQorCX07DQorDQorCW1lbWNweSgmcmVx LnBhdHRlcm4sIHBhdHRlcm4sIHNpemVvZigqcGF0dGVybikpOw0KKw0KKwlyZXR1cm4gX19tdDc2 X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9TRVRfUkREX1RILA0KKwkJCQkg ICAmcmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X3NldF9j aGFuX2luZm8oc3RydWN0IG10NzkxNV9waHkgKnBoeSwgaW50IGNtZCkNCit7DQorCXN0cnVjdCBt dDc5MTVfZGV2ICpkZXYgPSBwaHktPmRldjsNCisJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpj aGFuZGVmID0gJnBoeS0+bXQ3Ni0+Y2hhbmRlZjsNCisJaW50IGZyZXExID0gY2hhbmRlZi0+Y2Vu dGVyX2ZyZXExOw0KKwlzdHJ1Y3Qgew0KKwkJdTggY29udHJvbF9jaDsNCisJCXU4IGNlbnRlcl9j aDsNCisJCXU4IGJ3Ow0KKwkJdTggdHhfc3RyZWFtc19udW07DQorCQl1OCByeF9zdHJlYW1zOwkv KiBtYXNrIG9yIG51bSAqLw0KKwkJdTggc3dpdGNoX3JlYXNvbjsNCisJCXU4IGJhbmRfaWR4Ow0K KwkJdTggY2VudGVyX2NoMjsJLyogZm9yIDgwKzgwIG9ubHkgKi8NCisJCV9fbGUxNiBjYWNfY2Fz ZTsNCisJCXU4IGNoYW5uZWxfYmFuZDsNCisJCXU4IHJzdjA7DQorCQlfX2xlMzIgb3V0YmFuZF9m cmVxOw0KKwkJdTggdHhwb3dlcl9kcm9wOw0KKwkJdTggYXBfYnc7DQorCQl1OCBhcF9jZW50ZXJf Y2g7DQorCQl1OCByc3YxWzU3XTsNCisJfSBfX3BhY2tlZCByZXEgPSB7DQorCQkuY29udHJvbF9j aCA9IGNoYW5kZWYtPmNoYW4tPmh3X3ZhbHVlLA0KKwkJLmNlbnRlcl9jaCA9IGllZWU4MDIxMV9m cmVxdWVuY3lfdG9fY2hhbm5lbChmcmVxMSksDQorCQkuYncgPSBtdDc5MTVfbWN1X2NoYW5fYnco Y2hhbmRlZiksDQorCQkudHhfc3RyZWFtc19udW0gPSBod2VpZ2h0OChwaHktPm10NzYtPmFudGVu bmFfbWFzayksDQorCQkucnhfc3RyZWFtcyA9IHBoeS0+Y2hhaW5tYXNrLA0KKwkJLmJhbmRfaWR4 ID0gcGh5ICE9ICZkZXYtPnBoeSwNCisJCS5jaGFubmVsX2JhbmQgPSBjaGFuZGVmLT5jaGFuLT5i YW5kLA0KKwl9Ow0KKw0KKwlpZiAoKGNoYW5kZWYtPmNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NI QU5fUkFEQVIpICYmDQorCSAgICBjaGFuZGVmLT5jaGFuLT5kZnNfc3RhdGUgIT0gTkw4MDIxMV9E RlNfQVZBSUxBQkxFKQ0KKwkJcmVxLnN3aXRjaF9yZWFzb24gPSBDSF9TV0lUQ0hfREZTOw0KKwll bHNlDQorCQlyZXEuc3dpdGNoX3JlYXNvbiA9IENIX1NXSVRDSF9OT1JNQUw7DQorDQorCWlmIChj bWQgPT0gTUNVX0VYVF9DTURfQ0hBTk5FTF9TV0lUQ0gpDQorCQlyZXEucnhfc3RyZWFtcyA9IGh3 ZWlnaHQ4KHJlcS5yeF9zdHJlYW1zKTsNCisNCisJaWYgKGNoYW5kZWYtPndpZHRoID09IE5MODAy MTFfQ0hBTl9XSURUSF84MFA4MCkgew0KKwkJaW50IGZyZXEyID0gY2hhbmRlZi0+Y2VudGVyX2Zy ZXEyOw0KKw0KKwkJcmVxLmNlbnRlcl9jaDIgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5u ZWwoZnJlcTIpOw0KKwl9DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10 NzYsIGNtZCwgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21j dV9zZXRfZWVwcm9tKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlzdHJ1Y3QgcmVxX2hk ciB7DQorCQl1OCBidWZmZXJfbW9kZTsNCisJCXU4IGZvcm1hdDsNCisJCV9fbGUxNiBsZW47DQor CX0gX19wYWNrZWQgcmVxID0gew0KKwkJLmJ1ZmZlcl9tb2RlID0gRUVfTU9ERV9FRlVTRSwNCisJ CS5mb3JtYXQgPSBFRV9GT1JNQVRfV0hPTEUsDQorCX07DQorDQorCXJldHVybiBfX210NzZfbWN1 X3NlbmRfbXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX0VGVVNFX0JVRkZFUl9NT0RFLA0KKwkJ CQkgICAmcmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2dl dF9lZXByb20oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG9mZnNldCkNCit7DQorCXN0cnVj dCBtdDc5MTVfbWN1X2VlcHJvbV9pbmZvIHJlcSA9IHsNCisJCS5hZGRyID0gY3B1X3RvX2xlMzIo cm91bmRfZG93bihvZmZzZXQsIDE2KSksDQorCX07DQorDQorCXJldHVybiBfX210NzZfbWN1X3Nl bmRfbXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX0VGVVNFX0FDQ0VTUywgJnJlcSwNCisJCQkJ ICAgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9nZXRfdGVtcGVy YXR1cmUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgaW50IGluZGV4KQ0KK3sNCisJc3RydWN0IHsN CisJCXU4IGN0cmxfaWQ7DQorCQl1OCBhY3Rpb247DQorCQl1OCBiYW5kOw0KKwkJdTggcnN2WzVd Ow0KKwl9IHJlcSA9IHsNCisJCS5jdHJsX2lkID0gVEhFUk1BTF9TRU5TT1JfVEVNUF9RVUVSWSwN CisJCS5hY3Rpb24gPSBpbmRleCwNCisJfTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2VuZF9t c2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfVEhFUk1BTF9DVFJMLCAmcmVxLA0KKwkJCQkgICBz aXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2dldF9yYXRlX2luZm8o c3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIGNtZCwgdTE2IHdsYW5faWR4KQ0KK3sNCisJc3Ry dWN0IHsNCisJCV9fbGUzMiBjbWQ7DQorCQl1MTYgd2xhbl9pZHg7DQorCQl1MTYgcnVfaWR4Ow0K KwkJdTE2IGRpcmVjdGlvbjsNCisJCXUxNiBkdW1wX2dyb3VwOw0KKwl9IHJlcSA9IHsNCisJCS5j bWQgPSBjcHVfdG9fbGUzMihjbWQpLA0KKwkJLndsYW5faWR4ID0gd2xhbl9pZHgsDQorCQkuZHVt cF9ncm91cCA9IDEsDQorCX07DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYt Pm10NzYsIE1DVV9FWFRfQ01EX1JBVEVfQ1RSTCwgJnJlcSwNCisJCQkJICAgc2l6ZW9mKHJlcSks IGZhbHNlKTsNCit9DQorDQoraW50IG10NzkxNV9tY3Vfc2V0X3NlcihzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2LCB1OCBhY3Rpb24sIHU4IHNldCwgdTggYmFuZCkNCit7DQorCXN0cnVjdCB7DQorCQl1 OCBhY3Rpb247DQorCQl1OCBzZXQ7DQorCQl1OCBiYW5kOw0KKwkJdTggcnN2Ow0KKwl9IHJlcSA9 IHsNCisJCS5hY3Rpb24gPSBhY3Rpb24sDQorCQkuc2V0ID0gc2V0LA0KKwkJLmJhbmQgPSBiYW5k LA0KKwl9Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1Vf RVhUX0NNRF9TRVRfU0VSX1RSSUdHRVIsDQorCQkJCSAgICZyZXEsIHNpemVvZihyZXEpLCBmYWxz ZSk7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYv bXQ3OTE1L21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUv bWN1LmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjVlNDcwODg2 MWVkZQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc5MTUvbWN1LmgNCkBAIC0wLDAgKzEsODM3IEBADQorLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IElTQyAqLw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuICov DQorDQorI2lmbmRlZiBfX01UNzkxNV9NQ1VfSA0KKyNkZWZpbmUgX19NVDc5MTVfTUNVX0gNCisN CitzdHJ1Y3QgbXQ3OTE1X21jdV90eGQgew0KKwlfX2xlMzIgdHhkWzhdOw0KKw0KKwlfX2xlMTYg bGVuOw0KKwlfX2xlMTYgcHFfaWQ7DQorDQorCXU4IGNpZDsNCisJdTggcGt0X3R5cGU7DQorCXU4 IHNldF9xdWVyeTsgLyogRlcgZG9uJ3QgY2FyZSAqLw0KKwl1OCBzZXE7DQorDQorCXU4IHVjX2Qy YjBfcmV2Ow0KKwl1OCBleHRfY2lkOw0KKwl1OCBzMmRfaW5kZXg7DQorCXU4IGV4dF9jaWRfYWNr Ow0KKw0KKwl1MzIgcmVzZXJ2ZWRbNV07DQorfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7DQorDQor LyogZXZlbnQgdGFibGUgKi8NCitlbnVtIHsNCisJTUNVX0VWRU5UX1RBUkdFVF9BRERSRVNTX0xF TiA9IDB4MDEsDQorCU1DVV9FVkVOVF9GV19TVEFSVCA9IDB4MDEsDQorCU1DVV9FVkVOVF9HRU5F UklDID0gMHgwMSwNCisJTUNVX0VWRU5UX0FDQ0VTU19SRUcgPSAweDAyLA0KKwlNQ1VfRVZFTlRf TVRfUEFUQ0hfU0VNID0gMHgwNCwNCisJTUNVX0VWRU5UX0NIX1BSSVZJTEVHRSA9IDB4MTgsDQor CU1DVV9FVkVOVF9FWFQgPSAweGVkLA0KKwlNQ1VfRVZFTlRfUkVTVEFSVF9ETCA9IDB4ZWYsDQor fTsNCisNCisvKiBleHQgZXZlbnQgdGFibGUgKi8NCitlbnVtIHsNCisJTUNVX0VYVF9FVkVOVF9Q U19TWU5DID0gMHg1LA0KKwlNQ1VfRVhUX0VWRU5UX1RIRVJNQUxfUFJPVEVDVCA9IDB4MjIsDQor CU1DVV9FWFRfRVZFTlRfQVNTRVJUX0RVTVAgPSAweDIzLA0KKwlNQ1VfRVhUX0VWRU5UX1JERF9S RVBPUlQgPSAweDNhLA0KKwlNQ1VfRVhUX0VWRU5UX0NTQV9OT1RJRlkgPSAweDRmLA0KKwlNQ1Vf RVhUX0VWRU5UX1JBVEVfUkVQT1JUID0gMHg4NywNCit9Ow0KKw0KK3N0cnVjdCBtdDc5MTVfbWN1 X3J4ZCB7DQorCV9fbGUzMiByeGRbNl07DQorDQorCV9fbGUxNiBsZW47DQorCV9fbGUxNiBwa3Rf dHlwZV9pZDsNCisNCisJdTggZWlkOw0KKwl1OCBzZXE7DQorCV9fbGUxNiBfX3JzdjsNCisNCisJ dTggZXh0X2VpZDsNCisJdTggX19yc3YxWzJdOw0KKwl1OCBzMmRfaW5kZXg7DQorfTsNCisNCitz dHJ1Y3QgbXQ3OTE1X21jdV9yZGRfcmVwb3J0IHsNCisJc3RydWN0IG10NzkxNV9tY3VfcnhkIHJ4 ZDsNCisNCisJdTggaWR4Ow0KKwl1OCBsb25nX2RldGVjdGVkOw0KKwl1OCBjb25zdGFudF9wcmZf ZGV0ZWN0ZWQ7DQorCXU4IHN0YWdnZXJlZF9wcmZfZGV0ZWN0ZWQ7DQorCXU4IHJhZGFyX3R5cGVf aWR4Ow0KKwl1OCBwZXJpb2RpY19wdWxzZV9udW07DQorCXU4IGxvbmdfcHVsc2VfbnVtOw0KKwl1 OCBod19wdWxzZV9udW07DQorDQorCXU4IG91dF9scG47DQorCXU4IG91dF9zcG47DQorCXU4IG91 dF9jcnBuOw0KKwl1OCBvdXRfY3JwdzsNCisJdTggb3V0X2NyYm47DQorCXU4IG91dF9zdGdwbjsN CisJdTggb3V0X3N0Z3B3Ow0KKw0KKwl1OCByc3Y7DQorDQorCV9fbGUzMiBvdXRfcHJpX2NvbnN0 Ow0KKwlfX2xlMzIgb3V0X3ByaV9zdGdbM107DQorDQorCXN0cnVjdCB7DQorCQlfX2xlMzIgc3Rh cnQ7DQorCQlfX2xlMTYgcHVsc2Vfd2lkdGg7DQorCQlfX2xlMTYgcHVsc2VfcG93ZXI7DQorCQl1 OCBtZHJkeV9mbGFnOw0KKwkJdTggcnN2WzNdOw0KKwl9IGxvbmdfcHVsc2VbMzJdOw0KKw0KKwlz dHJ1Y3Qgew0KKwkJX19sZTMyIHN0YXJ0Ow0KKwkJX19sZTE2IHB1bHNlX3dpZHRoOw0KKwkJX19s ZTE2IHB1bHNlX3Bvd2VyOw0KKwkJdTggbWRyZHlfZmxhZzsNCisJCXU4IHJzdlszXTsNCisJfSBw ZXJpb2RpY19wdWxzZVszMl07DQorDQorCXN0cnVjdCB7DQorCQlfX2xlMzIgc3RhcnQ7DQorCQlf X2xlMTYgcHVsc2Vfd2lkdGg7DQorCQlfX2xlMTYgcHVsc2VfcG93ZXI7DQorCQl1OCBzY19wYXNz Ow0KKwkJdTggc3dfcmVzZXQ7DQorCQl1OCBtZHJkeV9mbGFnOw0KKwkJdTggdHhfYWN0aXZlOw0K Kwl9IGh3X3B1bHNlWzMyXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBtdDc5MTVfbWN1X2Vl cHJvbV9pbmZvIHsNCisJX19sZTMyIGFkZHI7DQorCV9fbGUzMiB2YWxpZDsNCisJdTggZGF0YVsx Nl07DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgbXQ3OTE1X21jdV9yYV9pbmZvIHsNCisJc3Ry dWN0IG10NzkxNV9tY3VfcnhkIHJ4ZDsNCisNCisJX19sZTMyIGV2ZW50X2lkOw0KKwlfX2xlMTYg d2xhbl9pZHg7DQorCV9fbGUxNiBydV9pZHg7DQorCV9fbGUxNiBkaXJlY3Rpb247DQorCV9fbGUx NiBkdW1wX2dyb3VwOw0KKw0KKwlfX2xlMzIgc3VnZ2VzdF9yYXRlOw0KKwlfX2xlMzIgbWluX3Jh dGU7CS8qIGZvciBkeW5hbWljIHNvdW5kaW5nICovDQorCV9fbGUzMiBtYXhfcmF0ZTsJLyogZm9y IGR5bmFtaWMgc291bmRpbmcgKi8NCisJX19sZTMyIGluaXRfcmF0ZV9kb3duX3JhdGU7DQorDQor CV9fbGUxNiBjdXJyX3JhdGU7DQorCV9fbGUxNiBpbml0X3JhdGVfZG93bl90b3RhbDsNCisJX19s ZTE2IGluaXRfcmF0ZV9kb3duX3N1Y2M7DQorCV9fbGUxNiBzdWNjZXNzOw0KKwlfX2xlMTYgYXR0 ZW1wdHM7DQorDQorCV9fbGUxNiBwcmV2X3JhdGU7DQorCV9fbGUxNiBwcm9iX3VwX3JhdGU7DQor CXU4IG5vX3JhdGVfdXBfY250Ow0KKwl1OCBwcGR1X2NudDsNCisJdTggZ2k7DQorDQorCXU4IHRy eV91cF9mYWlsOw0KKwl1OCB0cnlfdXBfdG90YWw7DQorCXU4IHN1Z2dlc3Rfd2Y7DQorCXU4IHRy eV91cF9jaGVjazsNCisJdTggcHJvYl91cF9wZXJpb2Q7DQorCXU4IHByb2JfZG93bl9wZW5kaW5n Ow0KK30gX19wYWNrZWQ7DQorDQorI2RlZmluZSBNVF9SQV9SQVRFX05TUwkJCUdFTk1BU0soOCwg NikNCisjZGVmaW5lIE1UX1JBX1JBVEVfTUNTCQkJR0VOTUFTSygzLCAwKQ0KKyNkZWZpbmUgTVRf UkFfUkFURV9UWF9NT0RFCQlHRU5NQVNLKDEyLCA5KQ0KKyNkZWZpbmUgTVRfUkFfUkFURV9EQ01f RU4JCUJJVCg0KQ0KKyNkZWZpbmUgTVRfUkFfUkFURV9CVwkJCUdFTk1BU0soMTQsIDEzKQ0KKw0K KyNkZWZpbmUgTUNVX1BRX0lEKHAsIHEpCQkJKCgocCkgPDwgMTUpIHwgKChxKSA8PCAxMCkpDQor I2RlZmluZSBNQ1VfUEtUX0lECQkJMHhhMA0KKw0KK2VudW0gew0KKwlNQ1VfUV9RVUVSWSwNCisJ TUNVX1FfU0VULA0KKwlNQ1VfUV9SRVNFUlZFRCwNCisJTUNVX1FfTkENCit9Ow0KKw0KK2VudW0g ew0KKwlNQ1VfUzJEX0gyTiwNCisJTUNVX1MyRF9DMk4sDQorCU1DVV9TMkRfSDJDLA0KKwlNQ1Vf UzJEX0gyQ04NCit9Ow0KKw0KK2VudW0gew0KKwlNQ1VfQ01EX1RBUkdFVF9BRERSRVNTX0xFTl9S RVEgPSAweDAxLA0KKwlNQ1VfQ01EX0ZXX1NUQVJUX1JFUSA9IDB4MDIsDQorCU1DVV9DTURfSU5J VF9BQ0NFU1NfUkVHID0gMHgzLA0KKwlNQ1VfQ01EX05JQ19QT1dFUl9DVFJMID0gMHg0LA0KKwlN Q1VfQ01EX1BBVENIX1NUQVJUX1JFUSA9IDB4MDUsDQorCU1DVV9DTURfUEFUQ0hfRklOSVNIX1JF USA9IDB4MDcsDQorCU1DVV9DTURfUEFUQ0hfU0VNX0NPTlRST0wgPSAweDEwLA0KKwlNQ1VfQ01E X0VYVF9DSUQgPSAweEVELA0KKwlNQ1VfQ01EX0ZXX1NDQVRURVIgPSAweEVFLA0KKwlNQ1VfQ01E X1JFU1RBUlRfRExfUkVRID0gMHhFRiwNCit9Ow0KKw0KK2VudW0gew0KKwlNQ1VfRVhUX0NNRF9F RlVTRV9BQ0NFU1MgPSAweDAxLA0KKwlNQ1VfRVhUX0NNRF9QTV9TVEFURV9DVFJMID0gMHgwNywN CisJTUNVX0VYVF9DTURfQ0hBTk5FTF9TV0lUQ0ggPSAweDA4LA0KKwlNQ1VfRVhUX0NNRF9FRlVT RV9CVUZGRVJfTU9ERSA9IDB4MjEsDQorCU1DVV9FWFRfQ01EX1NUQV9SRUNfVVBEQVRFID0gMHgy NSwNCisJTUNVX0VYVF9DTURfQlNTX0lORk9fVVBEQVRFID0gMHgyNiwNCisJTUNVX0VYVF9DTURf RURDQV9VUERBVEUgPSAweDI3LA0KKwlNQ1VfRVhUX0NNRF9ERVZfSU5GT19VUERBVEUgPSAweDJB LA0KKwlNQ1VfRVhUX0NNRF9USEVSTUFMX0NUUkwgPSAweDJjLA0KKwlNQ1VfRVhUX0NNRF9TRVRf UkREX0NUUkwgPSAweDNhLA0KKwlNQ1VfRVhUX0NNRF9QUk9URUNUX0NUUkwgPSAweDNlLA0KKwlN Q1VfRVhUX0NNRF9NQUNfSU5JVF9DVFJMID0gMHg0NiwNCisJTUNVX0VYVF9DTURfUlhfSERSX1RS QU5TID0gMHg0NywNCisJTUNVX0VYVF9DTURfU0VUX1JYX1BBVEggPSAweDRlLA0KKwlNQ1VfRVhU X0NNRF9TRVRfU0VSX1RSSUdHRVIgPSAweDgxLA0KKwlNQ1VfRVhUX0NNRF9TQ1NfQ1RSTCA9IDB4 ODIsDQorCU1DVV9FWFRfQ01EX1JBVEVfQ1RSTCA9IDB4ODcsDQorCU1DVV9FWFRfQ01EX1NFVF9S RERfVEggPSAweDlkLA0KK307DQorDQorZW51bSB7DQorCVBBVENIX1NFTV9SRUxFQVNFLA0KKwlQ QVRDSF9TRU1fR0VUDQorfTsNCisNCitlbnVtIHsNCisJUEFUQ0hfTk9UX0RMX1NFTV9GQUlMLA0K KwlQQVRDSF9JU19ETCwNCisJUEFUQ0hfTk9UX0RMX1NFTV9TVUNDRVNTLA0KKwlQQVRDSF9SRUxf U0VNX1NVQ0NFU1MNCit9Ow0KKw0KK2VudW0gew0KKwlGV19TVEFURV9JTklUSUFMLA0KKwlGV19T VEFURV9GV19ET1dOTE9BRCwNCisJRldfU1RBVEVfTk9STUFMX09QRVJBVElPTiwNCisJRldfU1RB VEVfTk9STUFMX1RSWCwNCisJRldfU1RBVEVfV0FDUFVfUkRZICAgICAgICA9IDcNCit9Ow0KKw0K K2VudW0gew0KKwlFRV9NT0RFX0VGVVNFLA0KKwlFRV9NT0RFX0JVRkZFUiwNCit9Ow0KKw0KK2Vu dW0gew0KKwlFRV9GT1JNQVRfQklOLA0KKwlFRV9GT1JNQVRfV0hPTEUsDQorCUVFX0ZPUk1BVF9N VUxUSVBMRSwNCit9Ow0KKw0KKyNkZWZpbmUgU1RBX1RZUEVfU1RBCQkJQklUKDApDQorI2RlZmlu ZSBTVEFfVFlQRV9BUAkJCUJJVCgxKQ0KKyNkZWZpbmUgU1RBX1RZUEVfQURIT0MJCQlCSVQoMikN CisjZGVmaW5lIFNUQV9UWVBFX1dEUwkJCUJJVCg0KQ0KKyNkZWZpbmUgU1RBX1RZUEVfQkMJCQlC SVQoNSkNCisNCisjZGVmaW5lIE5FVFdPUktfSU5GUkEJCQlCSVQoMTYpDQorI2RlZmluZSBORVRX T1JLX1AyUAkJCUJJVCgxNykNCisjZGVmaW5lIE5FVFdPUktfSUJTUwkJCUJJVCgxOCkNCisjZGVm aW5lIE5FVFdPUktfV0RTCQkJQklUKDIxKQ0KKw0KKyNkZWZpbmUgQ09OTkVDVElPTl9JTkZSQV9T VEEJCShTVEFfVFlQRV9TVEEgfCBORVRXT1JLX0lORlJBKQ0KKyNkZWZpbmUgQ09OTkVDVElPTl9J TkZSQV9BUAkJKFNUQV9UWVBFX0FQIHwgTkVUV09SS19JTkZSQSkNCisjZGVmaW5lIENPTk5FQ1RJ T05fUDJQX0dDCQkoU1RBX1RZUEVfU1RBIHwgTkVUV09SS19QMlApDQorI2RlZmluZSBDT05ORUNU SU9OX1AyUF9HTwkJKFNUQV9UWVBFX0FQIHwgTkVUV09SS19QMlApDQorI2RlZmluZSBDT05ORUNU SU9OX0lCU1NfQURIT0MJCShTVEFfVFlQRV9BREhPQyB8IE5FVFdPUktfSUJTUykNCisjZGVmaW5l IENPTk5FQ1RJT05fV0RTCQkJKFNUQV9UWVBFX1dEUyB8IE5FVFdPUktfV0RTKQ0KKyNkZWZpbmUg Q09OTkVDVElPTl9JTkZSQV9CQwkJKFNUQV9UWVBFX0JDIHwgTkVUV09SS19JTkZSQSkNCisNCisj ZGVmaW5lIENPTk5fU1RBVEVfRElTQ09OTkVDVAkJMA0KKyNkZWZpbmUgQ09OTl9TVEFURV9DT05O RUNUCQkxDQorI2RlZmluZSBDT05OX1NUQVRFX1BPUlRfU0VDVVJFCQkyDQorDQorZW51bSB7DQor CURFVl9JTkZPX0FDVElWRSwNCisJREVWX0lORk9fTUFYX05VTQ0KK307DQorDQorZW51bSB7DQor CVNDU19TRU5EX0RBVEEsDQorCVNDU19TRVRfTUFOVUFMX1BEX1RILA0KKwlTQ1NfQ09ORklHLA0K KwlTQ1NfRU5BQkxFLA0KKwlTQ1NfU0hPV19JTkZPLA0KKwlTQ1NfR0VUX0dMT19BRERSLA0KKwlT Q1NfR0VUX0dMT19BRERSX0VWRU5ULA0KK307DQorDQorZW51bSB7DQorCUNNRF9DQldfMjBNSFog PSBJRUVFODAyMTFfU1RBX1JYX0JXXzIwLA0KKwlDTURfQ0JXXzQwTUhaID0gSUVFRTgwMjExX1NU QV9SWF9CV180MCwNCisJQ01EX0NCV184ME1IWiA9IElFRUU4MDIxMV9TVEFfUlhfQldfODAsDQor CUNNRF9DQldfMTYwTUhaID0gSUVFRTgwMjExX1NUQV9SWF9CV18xNjAsDQorCUNNRF9DQldfMTBN SFosDQorCUNNRF9DQldfNU1IWiwNCisJQ01EX0NCV184MDgwTUhaLA0KKw0KKwlDTURfSEVfTUNT X0JXODAgPSAwLA0KKwlDTURfSEVfTUNTX0JXMTYwLA0KKwlDTURfSEVfTUNTX0JXODA4MCwNCisJ Q01EX0hFX01DU19CV19OVU0NCit9Ow0KKw0KK3N0cnVjdCB0bHYgew0KKwlfX2xlMTYgdGFnOw0K KwlfX2xlMTYgbGVuOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGJzc19pbmZvX29tYWMgew0K KwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBod19ic3NfaWR4Ow0KKwl1OCBvbWFj X2lkeDsNCisJdTggYmFuZF9pZHg7DQorCXU4IHJzdjA7DQorCV9fbGUzMiBjb25uX3R5cGU7DQor CXUzMiByc3YxOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGJzc19pbmZvX2Jhc2ljIHsNCisJ X19sZTE2IHRhZzsNCisJX19sZTE2IGxlbjsNCisJX19sZTMyIG5ldHdvcmtfdHlwZTsNCisJdTgg YWN0aXZlOw0KKwl1OCByc3YwOw0KKwlfX2xlMTYgYmNuX2ludGVydmFsOw0KKwl1OCBic3NpZFtF VEhfQUxFTl07DQorCXU4IHdtbV9pZHg7DQorCXU4IGR0aW1fcGVyaW9kOw0KKwl1OCBibWNfd2Np ZF9sbzsNCisJdTggY2lwaGVyOw0KKwl1OCBwaHlfbW9kZTsNCisJdTggbWF4X2Jzc2lkOwkvKiBt YXggQlNTSUQuIHJhbmdlOiAxIH4gOCwgMDogTUJTU0lEIGRpc2FibGVkICovDQorCXU4IG5vbl90 eF9ic3NpZDsvKiBub24tdHJhbnNtaXR0ZWQgQlNTSUQsIDA6IHRyYW5zbWl0dGVkIEJTU0lEICov DQorCXU4IGJtY193Y2lkX2hpOwkvKiBoaWdoIEJ5dGUgYW5kIHZlcnNpb24gKi8NCisJdTggcnN2 WzJdOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGJzc19pbmZvX3JmX2NoIHsNCisJX19sZTE2 IHRhZzsNCisJX19sZTE2IGxlbjsNCisJdTggcHJpX2NoOw0KKwl1OCBjZW50ZXJfY2gwOw0KKwl1 OCBjZW50ZXJfY2gxOw0KKwl1OCBidzsNCisJdTggaGVfcnUyNl9ibG9jazsJLyogMTogZG9uJ3Qg c2VuZCBIRVRCIGluIFJVMjYsIDA6IGFsbG93ICovDQorCXU4IGhlX2FsbF9kaXNhYmxlOwkvKiAx OiBkaXNhbGxvdyBhbGwgSEVUQiwgMDogYWxsb3cgKi8NCisJdTggcnN2WzJdOw0KK30gX19wYWNr ZWQ7DQorDQorc3RydWN0IGJzc19pbmZvX2V4dF9ic3Mgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xl MTYgbGVuOw0KKwlfX2xlMzIgbWJzc190c2Zfb2Zmc2V0OyAvKiBpbiB1bml0IG9mIHVzICovDQor CXU4IHJzdls4XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBic3NfaW5mb19zeW5jX21vZGUg ew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwlfX2xlMTYgYmNuX2ludGVydmFsOw0K Kwl1OCBlbmFibGU7DQorCXU4IGR0aW1fcGVyaW9kOw0KKwl1OCByc3ZbOF07DQorfSBfX3BhY2tl ZDsNCisNCitzdHJ1Y3QgYnNzX2luZm9fYm1jX3JhdGUgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xl MTYgbGVuOw0KKwlfX2xlMTYgYmNfdHJhbnM7DQorCV9fbGUxNiBtY190cmFuczsNCisJdTggc2hv cnRfcHJlYW1ibGU7DQorCXU4IHJzdls3XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBic3Nf aW5mb19yYSB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCXU4IG9wX21vZGU7DQor CXU4IGFkaG9jX2VuOw0KKwl1OCBzaG9ydF9wcmVhbWJsZTsNCisJdTggdHhfc3RyZWFtczsNCisJ dTggcnhfc3RyZWFtczsNCisJdTggYWxnbzsNCisJdTggZm9yY2Vfc2dpOw0KKwl1OCBmb3JjZV9n ZjsNCisJdTggaHRfbW9kZTsNCisJdTggaGFzXzIwX3N0YTsJCS8qIENoZWNrIGlmIGFueSBzdGEg c3VwcG9ydCBHRi4gKi8NCisJdTggYnNzX3dpZHRoX3RyaWdnZXJfZXZlbnRzOw0KKwl1OCB2aHRf bnNzX2NhcDsNCisJdTggdmh0X2J3X3NpZ25hbDsJLyogbm90IHVzZSAqLw0KKwl1OCB2aHRfZm9y Y2Vfc2dpOwkvKiBub3QgdXNlICovDQorCXU4IHNlX29mZjsNCisJdTggYW50ZW5uYV9pZHg7DQor CXU4IHRyYWluX3VwX3J1bGU7DQorCXU4IHJzdlszXTsNCisJdW5zaWduZWQgc2hvcnQgdHJhaW5f dXBfaGlnaF90aHJlczsNCisJc2hvcnQgdHJhaW5fdXBfcnVsZV9yc3NpOw0KKwl1bnNpZ25lZCBz aG9ydCBsb3dfdHJhZmZpY190aHJlczsNCisJX19sZTE2IG1heF9waHlyYXRlOw0KKwlfX2xlMzIg cGh5X2NhcDsNCisJX19sZTMyIGludGVydmFsOw0KKwlfX2xlMzIgZmFzdF9pbnRlcnZhbDsNCit9 IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBic3NfaW5mb19iY24gew0KKwlfX2xlMTYgdGFnOw0KKwlf X2xlMTYgbGVuOw0KKwl1OCB2ZXI7DQorCXU4IGVuYWJsZTsNCisJX19sZTE2IHN1Yl9udGx2Ow0K K30gX19wYWNrZWQgX19hbGlnbmVkKDQpOw0KKw0KK3N0cnVjdCBic3NfaW5mb19iY25fY3NhIHsN CisJX19sZTE2IHRhZzsNCisJX19sZTE2IGxlbjsNCisJdTggY250Ow0KKwl1OCByc3ZbM107DQor fSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7DQorDQorc3RydWN0IGJzc19pbmZvX2Jjbl9iY2Mgew0K KwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBjbnQ7DQorCXU4IHJzdlszXTsNCit9 IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsNCisNCitzdHJ1Y3QgYnNzX2luZm9fYmNuX21ic3Mgew0K KyNkZWZpbmUgTUFYX0JFQUNPTl9OVU0JMzINCisJX19sZTE2IHRhZzsNCisJX19sZTE2IGxlbjsN CisJX19sZTMyIGJpdG1hcDsNCisJX19sZTE2IG9mZnNldFtNQVhfQkVBQ09OX05VTV07DQorCXU4 IHJzdls4XTsNCit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsNCisNCitzdHJ1Y3QgYnNzX2luZm9f YmNuX2NvbnQgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwlfX2xlMTYgdGltX29m czsNCisJX19sZTE2IGNzYV9vZnM7DQorCV9fbGUxNiBiY2Nfb2ZzOw0KKwlfX2xlMTYgcGt0X2xl bjsNCit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsNCisNCitlbnVtIHsNCisJQlNTX0lORk9fQkNO X0NTQSwNCisJQlNTX0lORk9fQkNOX0JDQywNCisJQlNTX0lORk9fQkNOX01CU1NJRCwNCisJQlNT X0lORk9fQkNOX0NPTlRFTlQsDQorCUJTU19JTkZPX0JDTl9NQVgNCit9Ow0KKw0KK2VudW0gew0K KwlCU1NfSU5GT19PTUFDLA0KKwlCU1NfSU5GT19CQVNJQywNCisJQlNTX0lORk9fUkZfQ0gsCQkv KiBvcHRpb25hbCwgZm9yIEJUL0xURSBjb2V4ICovDQorCUJTU19JTkZPX1BNLAkJLyogc3RhIG9u bHkgKi8NCisJQlNTX0lORk9fVUFQU0QsCQkvKiBzdGEgb25seSAqLw0KKwlCU1NfSU5GT19ST0FN X0RFVEVDVCwJLyogb2Jzb2xldGVkICovDQorCUJTU19JTkZPX0xRX1JNLAkJLyogb2Jzb2xldGVk ICovDQorCUJTU19JTkZPX0VYVF9CU1MsDQorCUJTU19JTkZPX0JNQ19SQVRFLAkvKiBmb3IgYm1j IHJhdGUgY29udHJvbCBpbiBDUjQgKi8NCisJQlNTX0lORk9fU1lOQ19NT0RFLA0KKwlCU1NfSU5G T19SQSwNCisJQlNTX0lORk9fSFdfQU1TRFUsDQorCUJTU19JTkZPX0JTU19DT0xPUiwNCisJQlNT X0lORk9fSEVfQkFTSUMsDQorCUJTU19JTkZPX1BST1RFQ1RfSU5GTywNCisJQlNTX0lORk9fT0ZG TE9BRCwNCisJQlNTX0lORk9fMTFWX01CU1NJRCwNCisJQlNTX0lORk9fTUFYX05VTQ0KK307DQor DQorZW51bSB7DQorCVdUQkxfUkVTRVRfQU5EX1NFVCA9IDEsDQorCVdUQkxfU0VULA0KKwlXVEJM X1FVRVJZLA0KKwlXVEJMX1JFU0VUX0FMTA0KK307DQorDQorc3RydWN0IHd0YmxfcmVxX2hkciB7 DQorCXU4IHdsYW5faWR4X2xvOw0KKwl1OCBvcGVyYXRpb247DQorCV9fbGUxNiB0bHZfbnVtOw0K Kwl1OCB3bGFuX2lkeF9oaTsNCisJdTggcnN2WzNdOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0 IHd0YmxfZ2VuZXJpYyB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCXU4IHBlZXJf YWRkcltFVEhfQUxFTl07DQorCXU4IG11YXJfaWR4Ow0KKwl1OCBza2lwX3R4Ow0KKwl1OCBjZl9h Y2s7DQorCXU4IHFvczsNCisJdTggbWVzaDsNCisJdTggYWRtOw0KKwlfX2xlMTYgcGFydGlhbF9h aWQ7DQorCXU4IGJhZl9lbjsNCisJdTggYWFkX29tOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0 IHd0Ymxfcnggew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCByY2lkOw0KKwl1 OCByY2ExOw0KKwl1OCByY2EyOw0KKwl1OCBydjsNCisJdTggcnN2WzRdOw0KK30gX19wYWNrZWQ7 DQorDQorc3RydWN0IHd0YmxfaHQgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1 OCBodDsNCisJdTggbGRwYzsNCisJdTggYWY7DQorCXU4IG1tOw0KKwl1OCByc3ZbNF07DQorfSBf X3BhY2tlZDsNCisNCitzdHJ1Y3Qgd3RibF92aHQgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYg bGVuOw0KKwl1OCBsZHBjOw0KKwl1OCBkeW5fYnc7DQorCXU4IHZodDsNCisJdTggdHhvcF9wczsN CisJdTggcnN2WzRdOw0KK30gX19wYWNrZWQ7DQorDQorZW51bSB7DQorCU1UX0JBX1RZUEVfSU5W QUxJRCwNCisJTVRfQkFfVFlQRV9PUklHSU5BVE9SLA0KKwlNVF9CQV9UWVBFX1JFQ0lQSUVOVA0K K307DQorDQorZW51bSB7DQorCVJTVF9CQV9NQUNfVElEX01BVENILA0KKwlSU1RfQkFfTUFDX01B VENILA0KKwlSU1RfQkFfTk9fTUFUQ0gNCit9Ow0KKw0KK3N0cnVjdCB3dGJsX2JhIHsNCisJX19s ZTE2IHRhZzsNCisJX19sZTE2IGxlbjsNCisJLyogY29tbW9uICovDQorCXU4IHRpZDsNCisJdTgg YmFfdHlwZTsNCisJdTggcnN2MFsyXTsNCisJLyogb3JpZ2luYXRvciBvbmx5ICovDQorCV9fbGUx NiBzbjsNCisJdTggYmFfZW47DQorCXU4IGJhX3dpbnNpemVfaWR4Ow0KKwlfX2xlMTYgYmFfd2lu c2l6ZTsNCisJLyogcmVjaXBpZW50IG9ubHkgKi8NCisJdTggcGVlcl9hZGRyW0VUSF9BTEVOXTsN CisJdTggcnN0X2JhX3RpZDsNCisJdTggcnN0X2JhX3NlbDsNCisJdTggcnN0X2JhX3NiOw0KKwl1 OCBiYW5kX2lkeDsNCisJdTggcnN2MVs0XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCB3dGJs X2JmIHsNCisJX19sZTE2IHRhZzsNCisJX19sZTE2IGxlbjsNCisJdTggaWJmOw0KKwl1OCBlYmY7 DQorCXU4IGliZl92aHQ7DQorCXU4IGViZl92aHQ7DQorCXU4IGdpZDsNCisJdTggcGZtdV9pZHg7 DQorCXU4IHJzdlsyXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCB3dGJsX3NtcHMgew0KKwlf X2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBzbXBzOw0KKwl1OCByc3ZbM107DQorfSBf X3BhY2tlZDsNCisNCitzdHJ1Y3Qgd3RibF9zcGUgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYg bGVuOw0KKwl1OCBzcGVfaWR4Ow0KKwl1OCByc3ZbM107DQorfSBfX3BhY2tlZDsNCisNCitlbnVt IHsNCisJV1RCTF9HRU5FUklDLA0KKwlXVEJMX1JYLA0KKwlXVEJMX0hULA0KKwlXVEJMX1ZIVCwN CisJV1RCTF9QRUVSX1BTLAkJLyogbm90IHVzZWQgKi8NCisJV1RCTF9UWF9QUywNCisJV1RCTF9I RFJfVFJBTlMsDQorCVdUQkxfU0VDX0tFWSwNCisJV1RCTF9CQSwNCisJV1RCTF9SREcsCQkvKiBv YnNvbGV0ZWQgKi8NCisJV1RCTF9QUk9URUNULAkJLyogbm90IHVzZWQgKi8NCisJV1RCTF9DTEVB UiwJCS8qIG5vdCB1c2VkICovDQorCVdUQkxfQkYsDQorCVdUQkxfU01QUywNCisJV1RCTF9SQVdf REFUQSwJCS8qIGRlYnVnIG9ubHkgKi8NCisJV1RCTF9QTiwNCisJV1RCTF9TUEUsDQorCVdUQkxf TUFYX05VTQ0KK307DQorDQorc3RydWN0IHN0YV9udGx2X2hkciB7DQorCXU4IHJzdlsyXTsNCisJ X19sZTE2IHRsdl9udW07DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgc3RhX3JlcV9oZHIgew0K Kwl1OCBic3NfaWR4Ow0KKwl1OCB3bGFuX2lkeF9sbzsNCisJX19sZTE2IHRsdl9udW07DQorCXU4 IGlzX3Rsdl9hcHBlbmQ7DQorCXU4IG11YXJfaWR4Ow0KKwl1OCB3bGFuX2lkeF9oaTsNCisJdTgg cnN2Ow0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHN0YV9yZWNfYmFzaWMgew0KKwlfX2xlMTYg dGFnOw0KKwlfX2xlMTYgbGVuOw0KKwlfX2xlMzIgY29ubl90eXBlOw0KKwl1OCBjb25uX3N0YXRl Ow0KKwl1OCBxb3M7DQorCV9fbGUxNiBhaWQ7DQorCXU4IHBlZXJfYWRkcltFVEhfQUxFTl07DQor CV9fbGUxNiBleHRyYV9pbmZvOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHN0YV9yZWNfaHQg ew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwlfX2xlMTYgaHRfY2FwOw0KKwl1MTYg cnN2Ow0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHN0YV9yZWNfdmh0IHsNCisJX19sZTE2IHRh ZzsNCisJX19sZTE2IGxlbjsNCisJX19sZTMyIHZodF9jYXA7DQorCV9fbGUxNiB2aHRfcnhfbWNz X21hcDsNCisJX19sZTE2IHZodF90eF9tY3NfbWFwOw0KKwl1OCBydHNfYndfc2lnOw0KKwl1OCBy c3ZbM107DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgc3RhX3JlY19iYSB7DQorCV9fbGUxNiB0 YWc7DQorCV9fbGUxNiBsZW47DQorCXU4IHRpZDsNCisJdTggYmFfdHlwZTsNCisJdTggYW1zZHU7 DQorCXU4IGJhX2VuOw0KKwlfX2xlMTYgc3NuOw0KKwlfX2xlMTYgd2luc2l6ZTsNCit9IF9fcGFj a2VkOw0KKw0KK3N0cnVjdCBzZWNfa2V5IHsNCisJdTggY2lwaGVyX2lkOw0KKwl1OCBjaXBoZXJf bGVuOw0KKwl1OCBrZXlfaWQ7DQorCXU4IGtleV9sZW47DQorCXU4IGtleVszMl07DQorfSBfX3Bh Y2tlZDsNCisNCitzdHJ1Y3Qgc3RhX3JlY19zZWMgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYg bGVuOw0KKwl1OCBhZGQ7DQorCXU4IG5fY2lwaGVyOw0KKwl1OCByc3ZbMl07DQorDQorCXN0cnVj dCBzZWNfa2V5IGtleVsyXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCByYV9waHkgew0KKwl1 OCB0eXBlOw0KKwl1OCBmbGFnOw0KKwl1OCBzdGJjOw0KKwl1OCBzZ2k7DQorCXU4IGJ3Ow0KKwl1 OCBsZHBjOw0KKwl1OCBtY3M7DQorCXU4IG5zczsNCisJdTggaGVfbHRmOw0KK307DQorDQorc3Ry dWN0IHN0YV9yZWNfcmEgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKw0KKwl1OCB2 YWxpZDsNCisJdTggYXV0b19yYXRlOw0KKwl1OCBwaHlfbW9kZTsNCisJdTggY2hhbm5lbDsNCisJ dTggYnc7DQorCXU4IGRpc2FibGVfY2NrOw0KKwl1OCBodF9tY3MzMjsNCisJdTggaHRfZ2Y7DQor CXU4IGh0X21jc1s0XTsNCisJdTggbW1wc19tb2RlOw0KKwl1OCBnYmFuZF8yNTY7DQorCXU4IGFm Ow0KKwl1OCBhdXRoX3dhcGlfbW9kZTsNCisJdTggcmF0ZV9sZW47DQorDQorCXU4IHN1cHBfbW9k ZTsNCisJdTggc3VwcF9jY2tfcmF0ZTsNCisJdTggc3VwcF9vZmRtX3JhdGU7DQorCV9fbGUzMiBz dXBwX2h0X21jczsNCisJX19sZTE2IHN1cHBfdmh0X21jc1s0XTsNCisNCisJdTggb3BfbW9kZTsN CisJdTggb3Bfdmh0X2NoYW5fd2lkdGg7DQorCXU4IG9wX3ZodF9yeF9uc3M7DQorCXU4IG9wX3Zo dF9yeF9uc3NfdHlwZTsNCisNCisJX19sZTMyIHN0YV9zdGF0dXM7DQorDQorCXN0cnVjdCByYV9w aHkgcGh5Ow0KK30gX19wYWNrZWQ7DQorDQorZW51bSB7DQorCVNUQV9SRUNfQkFTSUMsDQorCVNU QV9SRUNfUkEsDQorCVNUQV9SRUNfUkFfQ01NX0lORk8sDQorCVNUQV9SRUNfUkFfVVBEQVRFLA0K KwlTVEFfUkVDX0JGLA0KKwlTVEFfUkVDX0FNU0RVLA0KKwlTVEFfUkVDX0JBLA0KKwlTVEFfUkVD X1JFRCwJCS8qIG5vdCB1c2VkICovDQorCVNUQV9SRUNfVFhfUFJPQywJLyogZm9yIGhkciB0cmFu cyBhbmQgQ1NPIGluIENSNCAqLw0KKwlTVEFfUkVDX0hULA0KKwlTVEFfUkVDX1ZIVCwNCisJU1RB X1JFQ19BUFBTLA0KKwlTVEFfUkVDX0tFWSwNCisJU1RBX1JFQ19XVEJMLA0KKwlTVEFfUkVDX0hF LA0KKwlTVEFfUkVDX0hXX0FNU0RVLA0KKwlTVEFfUkVDX1dUQkxfQUFET00sDQorCVNUQV9SRUNf S0VZX1YyLA0KKwlTVEFfUkVDX01VUlUsDQorCVNUQV9SRUNfTVVFRENBLA0KKwlTVEFfUkVDX01B WF9OVU0NCit9Ow0KKw0KK2VudW0gbXQ3OTE1X2NpcGhlcl90eXBlIHsNCisJTVRfQ0lQSEVSX05P TkUsDQorCU1UX0NJUEhFUl9XRVA0MCwNCisJTVRfQ0lQSEVSX1dFUDEwNCwNCisJTVRfQ0lQSEVS X1dFUDEyOCwNCisJTVRfQ0lQSEVSX1RLSVAsDQorCU1UX0NJUEhFUl9BRVNfQ0NNUCwNCisJTVRf Q0lQSEVSX0NDTVBfMjU2LA0KKwlNVF9DSVBIRVJfR0NNUCwNCisJTVRfQ0lQSEVSX0dDTVBfMjU2 LA0KKwlNVF9DSVBIRVJfV0FQSSwNCisJTVRfQ0lQSEVSX0JJUF9DTUFDXzEyOCwNCit9Ow0KKw0K K2VudW0gew0KKwlDSF9TV0lUQ0hfTk9STUFMID0gMCwNCisJQ0hfU1dJVENIX1NDQU4gPSAzLA0K KwlDSF9TV0lUQ0hfTUNDID0gNCwNCisJQ0hfU1dJVENIX0RGUyA9IDUsDQorCUNIX1NXSVRDSF9C QUNLR1JPVU5EX1NDQU5fU1RBUlQgPSA2LA0KKwlDSF9TV0lUQ0hfQkFDS0dST1VORF9TQ0FOX1JV Tk5JTkcgPSA3LA0KKwlDSF9TV0lUQ0hfQkFDS0dST1VORF9TQ0FOX1NUT1AgPSA4LA0KKwlDSF9T V0lUQ0hfU0NBTl9CWVBBU1NfRFBEID0gOQ0KK307DQorDQorZW51bSB7DQorCVRIRVJNQUxfU0VO U09SX1RFTVBfUVVFUlksDQorCVRIRVJNQUxfU0VOU09SX01BTlVBTF9DVFJMLA0KKwlUSEVSTUFM X1NFTlNPUl9JTkZPX1FVRVJZLA0KKwlUSEVSTUFMX1NFTlNPUl9UQVNLX0NUUkwsDQorfTsNCisN CisjZGVmaW5lIE1UNzkxNV9XVEJMX1VQREFURV9NQVhfU0laRQkoc2l6ZW9mKHN0cnVjdCB3dGJs X3JlcV9oZHIpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgd3RibF9nZW5lcmljKSArCVwNCisJ CQkJCSBzaXplb2Yoc3RydWN0IHd0YmxfcngpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgd3Ri bF9odCkgKwlcDQorCQkJCQkgc2l6ZW9mKHN0cnVjdCB3dGJsX3ZodCkgKwlcDQorCQkJCQkgc2l6 ZW9mKHN0cnVjdCB3dGJsX2JhKSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHd0YmxfYmYpICsJ XA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgd3RibF9zbXBzKSArCVwNCisJCQkJCSBzaXplb2Yoc3Ry dWN0IHd0Ymxfc3BlKSkNCisNCisjZGVmaW5lIE1UNzkxNV9TVEFfVVBEQVRFX01BWF9TSVpFCShz aXplb2Yoc3RydWN0IHN0YV9yZXFfaGRyKSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHN0YV9y ZWNfYmFzaWMpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgc3RhX3JlY19odCkgKwlcDQorCQkJ CQkgc2l6ZW9mKHN0cnVjdCBzdGFfcmVjX2JhKSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHN0 YV9yZWNfdmh0KSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHRsdikgKwkJXA0KKwkJCQkJIHNp emVvZihzdHJ1Y3Qgc3RhX3JlY19zZWMpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgc3RhX3Jl Y19yYSkgKwlcDQorCQkJCQkgTVQ3OTE1X1dUQkxfVVBEQVRFX01BWF9TSVpFKQ0KKw0KKyNkZWZp bmUgTVQ3OTE1X1dUQkxfVVBEQVRFX0JBX1NJWkUJKHNpemVvZihzdHJ1Y3Qgd3RibF9yZXFfaGRy KSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHd0YmxfYmEpKQ0KKw0KKyNkZWZpbmUgTVQ3OTE1 X0JFQUNPTl9VUERBVEVfU0laRQkoc2l6ZW9mKHN0cnVjdCBzdGFfcmVxX2hkcikgKwlcDQorCQkJ CQkgc2l6ZW9mKHN0cnVjdCBic3NfaW5mb19iY25fY3NhKSArIFwNCisJCQkJCSBzaXplb2Yoc3Ry dWN0IGJzc19pbmZvX2Jjbl9iY2MpICsgXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3QgYnNzX2luZm9f YmNuX21ic3MpICsgXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3QgYnNzX2luZm9fYmNuX2NvbnQpKQ0K Kw0KKyNkZWZpbmUgUEhZX01PREVfQQkJCUJJVCgwKQ0KKyNkZWZpbmUgUEhZX01PREVfQgkJCUJJ VCgxKQ0KKyNkZWZpbmUgUEhZX01PREVfRwkJCUJJVCgyKQ0KKyNkZWZpbmUgUEhZX01PREVfR04J CQlCSVQoMykNCisjZGVmaW5lIFBIWV9NT0RFX0FOCQkJQklUKDQpDQorI2RlZmluZSBQSFlfTU9E RV9BQwkJCUJJVCg1KQ0KKw0KKyNkZWZpbmUgTU9ERV9DQ0sJCQlCSVQoMCkNCisjZGVmaW5lIE1P REVfT0ZETQkJCUJJVCgxKQ0KKyNkZWZpbmUgTU9ERV9IVAkJCQlCSVQoMikNCisjZGVmaW5lIE1P REVfVkhUCQkJQklUKDMpDQorDQorI2RlZmluZSBTVEFfQ0FQX1dNTQkJCUJJVCgwKQ0KKyNkZWZp bmUgU1RBX0NBUF9TR0lfMjAJCQlCSVQoNCkNCisjZGVmaW5lIFNUQV9DQVBfU0dJXzQwCQkJQklU KDUpDQorI2RlZmluZSBTVEFfQ0FQX1RYX1NUQkMJCQlCSVQoNikNCisjZGVmaW5lIFNUQV9DQVBf UlhfU1RCQwkJCUJJVCg3KQ0KKyNkZWZpbmUgU1RBX0NBUF9WSFRfU0dJXzgwCQlCSVQoMTYpDQor I2RlZmluZSBTVEFfQ0FQX1ZIVF9TR0lfMTYwCQlCSVQoMTcpDQorI2RlZmluZSBTVEFfQ0FQX1ZI VF9UWF9TVEJDCQlCSVQoMTgpDQorI2RlZmluZSBTVEFfQ0FQX1ZIVF9SWF9TVEJDCQlCSVQoMTkp DQorI2RlZmluZSBTVEFfQ0FQX1ZIVF9MRFBDCQlCSVQoMjMpDQorI2RlZmluZSBTVEFfQ0FQX0xE UEMJCQlCSVQoMjQpDQorI2RlZmluZSBTVEFfQ0FQX0hUCQkJQklUKDI2KQ0KKyNkZWZpbmUgU1RB X0NBUF9WSFQJCQlCSVQoMjcpDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv d2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbXQ3OTE1LmggYi9kcml2ZXJzL25ldC93aXJl bGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tdDc5MTUuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAwMC4uYjIzYWIzZjIxNWUwDQotLS0gL2Rldi9udWxsDQorKysgYi9k cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tdDc5MTUuaA0KQEAgLTAs MCArMSw0NDEgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDICovDQorLyogQ29w eXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVrIEluYy4gKi8NCisNCisjaWZuZGVmIF9fTVQ3OTE1X0gN CisjZGVmaW5lIF9fTVQ3OTE1X0gNCisNCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQor I2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+DQorI2luY2x1ZGUgIi4uL210NzYuaCINCisjaW5jbHVk ZSAicmVncy5oIg0KKw0KKyNkZWZpbmUgTVQ3OTE1X01BWF9JTlRFUkZBQ0VTCQk0DQorI2RlZmlu ZSBNVDc5MTVfTUFYX1dNTV9TRVRTCQk0DQorI2RlZmluZSBNVDc5MTVfV1RCTF9TSVpFCQkyODgN CisjZGVmaW5lIE1UNzkxNV9XVEJMX1JFU0VSVkVECQkoTVQ3OTE1X1dUQkxfU0laRSAtIDEpDQor I2RlZmluZSBNVDc5MTVfV1RCTF9TVEEJCQkoTVQ3OTE1X1dUQkxfUkVTRVJWRUQgLSBcDQorCQkJ CQkgTVQ3OTE1X01BWF9JTlRFUkZBQ0VTKQ0KKw0KKyNkZWZpbmUgTVQ3OTE1X1dBVENIRE9HX1RJ TUUJCShIWiAvIDEwKQ0KKyNkZWZpbmUgTVQ3OTE1X1JFU0VUX1RJTUVPVVQJCSgzMCAqIEhaKQ0K Kw0KKyNkZWZpbmUgTVQ3OTE1X1RYX1JJTkdfU0laRQkJMjA0OA0KKyNkZWZpbmUgTVQ3OTE1X1RY X01DVV9SSU5HX1NJWkUJCTI1Ng0KKyNkZWZpbmUgTVQ3OTE1X1RYX0ZXRExfUklOR19TSVpFCTEy OA0KKw0KKyNkZWZpbmUgTVQ3OTE1X1JYX1JJTkdfU0laRQkJMTUzNg0KKyNkZWZpbmUgTVQ3OTE1 X1JYX01DVV9SSU5HX1NJWkUJCTUxMg0KKw0KKyNkZWZpbmUgTVQ3OTE1X0ZJUk1XQVJFX1dBCQki bWVkaWF0ZWsvbXQ3OTE1X3dhLmJpbiINCisjZGVmaW5lIE1UNzkxNV9GSVJNV0FSRV9XTQkJIm1l ZGlhdGVrL210NzkxNV93bS5iaW4iDQorI2RlZmluZSBNVDc5MTVfUk9NX1BBVENICQkibWVkaWF0 ZWsvbXQ3OTE1X3JvbV9wYXRjaC5iaW4iDQorDQorI2RlZmluZSBNVDc5MTVfRUVQUk9NX1NJWkUJ CTM1ODQNCisjZGVmaW5lIE1UNzkxNV9UT0tFTl9TSVpFCQk4MTkyDQorDQorI2RlZmluZSBNVDc5 MTVfQ0ZFTkRfUkFURV9ERUZBVUxUCTB4NDkJLyogT0ZETSAyNE0gKi8NCisjZGVmaW5lIE1UNzkx NV9DRkVORF9SQVRFXzExQgkJMHgwMwkvKiAxMUIgTFAsIDExTSAqLw0KKyNkZWZpbmUgTVQ3OTE1 XzVHX1JBVEVfREVGQVVMVAkJMHg0YgkvKiBPRkRNIDZNICovDQorI2RlZmluZSBNVDc5MTVfMkdf UkFURV9ERUZBVUxUCQkweDAJLyogQ0NLIDFNICovDQorDQorDQorc3RydWN0IG10NzkxNV92aWY7 DQorc3RydWN0IG10NzkxNV9zdGE7DQorc3RydWN0IG10NzkxNV9kZnNfcHVsc2U7DQorc3RydWN0 IG10NzkxNV9kZnNfcGF0dGVybjsNCisNCitlbnVtIG10NzkxNV90eHFfaWQgew0KKwlNVDc5MTVf VFhRX0ZXREwgPSAxNiwNCisJTVQ3OTE1X1RYUV9NQ1VfV00sDQorCU1UNzkxNV9UWFFfQkFORDAs DQorCU1UNzkxNV9UWFFfQkFORDEsDQorCU1UNzkxNV9UWFFfTUNVX1dBLA0KK307DQorDQorZW51 bSBtdDc5MTVfcnhxX2lkIHsNCisJTVQ3OTE1X1JYUV9CQU5EMCA9IDAsDQorCU1UNzkxNV9SWFFf QkFORDEsDQorCU1UNzkxNV9SWFFfTUNVX1dNID0gMCwNCisJTVQ3OTE1X1JYUV9NQ1VfV0EsDQor fTsNCisNCitlbnVtIG10NzkxNV9hbXBkdV9zdGF0ZSB7DQorCU1UNzkxNV9BR0dSX1NUT1AsDQor CU1UNzkxNV9BR0dSX1BST0dSRVNTLA0KKwlNVDc5MTVfQUdHUl9TVEFSVCwNCisJTVQ3OTE1X0FH R1JfT1BFUkFUSU9OQUwNCit9Ow0KKw0KK3N0cnVjdCBtdDc5MTVfc3RhX3N0YXRzIHsNCisJc3Ry dWN0IHJhdGVfaW5mbyBwcm9iX3JhdGU7DQorCXN0cnVjdCByYXRlX2luZm8gdHhfcmF0ZTsNCisN CisJdW5zaWduZWQgbG9uZyBwZXI7DQorCXVuc2lnbmVkIGxvbmcgY2hhbmdlZDsNCisJdW5zaWdu ZWQgbG9uZyBqaWZmaWVzOw0KK307DQorDQorc3RydWN0IG10NzkxNV9zdGEgew0KKwlzdHJ1Y3Qg bXQ3Nl93Y2lkIHdjaWQ7IC8qIG11c3QgYmUgZmlyc3QgKi8NCisNCisJc3RydWN0IG10NzkxNV92 aWYgKnZpZjsNCisNCisJc3RydWN0IGxpc3RfaGVhZCBwb2xsX2xpc3Q7DQorCXUzMiBhaXJ0aW1l X2FjWzhdOw0KKw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YV9zdGF0cyBzdGF0czsNCisJc3RydWN0IHdv cmtfc3RydWN0IHN0YXRzX3dvcms7DQorDQorCXNwaW5sb2NrX3QgYW1wZHVfbG9jazsNCisJZW51 bSBtdDc5MTVfYW1wZHVfc3RhdGUgYW1wZHVfc3RhdGVbSUVFRTgwMjExX05VTV9USURTXTsNCit9 Ow0KKw0KK3N0cnVjdCBtdDc5MTVfdmlmIHsNCisJdTE2IGlkeDsNCisJdTggb21hY19pZHg7DQor CXU4IGJhbmRfaWR4Ow0KKwl1OCB3bW1faWR4Ow0KKw0KKwlzdHJ1Y3Qgew0KKwkJdTE2IGN3X21p bjsNCisJCXUxNiBjd19tYXg7DQorCQl1MTYgdHhvcDsNCisJCXU4IGFpZnM7DQorCX0gd21tW0lF RUU4MDIxMV9OVU1fQUNTXTsNCisNCisJc3RydWN0IG10NzkxNV9zdGEgc3RhOw0KKwlzdHJ1Y3Qg bXQ3OTE1X2RldiAqZGV2Ow0KK307DQorDQorc3RydWN0IG1pYl9zdGF0cyB7DQorCXUxNiBhY2tf ZmFpbF9jbnQ7DQorCXUxNiBmY3NfZXJyX2NudDsNCisJdTE2IHJ0c19jbnQ7DQorCXUxNiBydHNf cmV0cmllc19jbnQ7DQorCXUxNiBiYV9taXNzX2NudDsNCit9Ow0KKw0KK3N0cnVjdCBtdDc5MTVf cGh5IHsNCisJc3RydWN0IG10NzZfcGh5ICptdDc2Ow0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 Ow0KKw0KKwl1MzIgcnhmaWx0ZXI7DQorCXUzMiB2aWZfbWFzazsNCisJdTMyIG9tYWNfbWFzazsN CisNCisJdTE2IG5vaXNlOw0KKwl1MTYgY2hhaW5tYXNrOw0KKw0KKwlzMTYgY292ZXJhZ2VfY2xh c3M7DQorCXU4IHNsb3R0aW1lOw0KKw0KKwl1OCByZGRfc3RhdGU7DQorCWludCBkZnNfc3RhdGU7 DQorDQorCV9fbGUzMiByeF9hbXBkdV90czsNCisJdTMyIGFtcGR1X3JlZjsNCisNCisJc3RydWN0 IG1pYl9zdGF0cyBtaWI7DQorfTsNCisNCitzdHJ1Y3QgbXQ3OTE1X2RldiB7DQorCXVuaW9uIHsg LyogbXVzdCBiZSBmaXJzdCAqLw0KKwkJc3RydWN0IG10NzZfZGV2IG10NzY7DQorCQlzdHJ1Y3Qg bXQ3Nl9waHkgbXBoeTsNCisJfTsNCisNCisJc3RydWN0IG10NzkxNV9waHkgcGh5Ow0KKw0KKwl1 MTYgY2hhaW5tYXNrOw0KKw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5pdF93b3JrOw0KKwlzdHJ1 Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yazsNCisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd2Fp dDsNCisJdTMyIHJlc2V0X3N0YXRlOw0KKw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9wb2xsX2xp c3Q7DQorCXNwaW5sb2NrX3Qgc3RhX3BvbGxfbG9jazsNCisNCisJdTMyIGh3X3BhdHRlcm47DQor DQorCXNwaW5sb2NrX3QgdG9rZW5fbG9jazsNCisJc3RydWN0IGlkciB0b2tlbjsNCisNCisJdTgg bWFjX3dvcmtfY291bnQ7DQorCWJvb2wgZndfZGVidWc7DQorfTsNCisNCitlbnVtIHsNCisJSFdf QlNTSURfMCA9IDB4MCwNCisJSFdfQlNTSURfMSwNCisJSFdfQlNTSURfMiwNCisJSFdfQlNTSURf MywNCisJSFdfQlNTSURfTUFYLA0KKwlFWFRfQlNTSURfU1RBUlQgPSAweDEwLA0KKwlFWFRfQlNT SURfMSwNCisJRVhUX0JTU0lEXzIsDQorCUVYVF9CU1NJRF8zLA0KKwlFWFRfQlNTSURfNCwNCisJ RVhUX0JTU0lEXzUsDQorCUVYVF9CU1NJRF82LA0KKwlFWFRfQlNTSURfNywNCisJRVhUX0JTU0lE XzgsDQorCUVYVF9CU1NJRF85LA0KKwlFWFRfQlNTSURfMTAsDQorCUVYVF9CU1NJRF8xMSwNCisJ RVhUX0JTU0lEXzEyLA0KKwlFWFRfQlNTSURfMTMsDQorCUVYVF9CU1NJRF8xNCwNCisJRVhUX0JT U0lEXzE1LA0KKwlFWFRfQlNTSURfRU5EDQorfTsNCisNCitlbnVtIHsNCisJTVRfUlhfU0VMMCwN CisJTVRfUlhfU0VMMSwNCit9Ow0KKw0KK2VudW0gbXQ3OTE1X3JkZF9jbWQgew0KKwlSRERfU1RP UCwNCisJUkREX1NUQVJULA0KKwlSRERfREVUX01PREUsDQorCVJERF9SQURBUl9FTVVMQVRFLA0K KwlSRERfU1RBUlRfVFhRID0gMjAsDQorCVJERF9DQUNfU1RBUlQgPSA1MCwNCisJUkREX0NBQ19F TkQsDQorCVJERF9OT1JNQUxfU1RBUlQsDQorCVJERF9ESVNBQkxFX0RGU19DQUwsDQorCVJERF9Q VUxTRV9EQkcsDQorCVJERF9SRUFEX1BVTFNFLA0KKwlSRERfUkVTVU1FX0JGLA0KKwlSRERfSVJR X09GRiwNCit9Ow0KKw0KK2VudW0gew0KKwlSQVRFX0NUUkxfUlVfSU5GTywNCisJUkFURV9DVFJM X0ZJWEVEX1JBVEVfSU5GTywNCisJUkFURV9DVFJMX0RVTVBfSU5GTywNCisJUkFURV9DVFJMX01V X0lORk8sDQorfTsNCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdDc5MTVfcGh5ICoNCittdDc5 MTVfaHdfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG10NzZfcGh5 ICpwaHkgPSBody0+cHJpdjsNCisNCisJcmV0dXJuIHBoeS0+cHJpdjsNCit9DQorDQorc3RhdGlj IGlubGluZSBzdHJ1Y3QgbXQ3OTE1X2RldiAqDQorbXQ3OTE1X2h3X2RldihzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodykNCit7DQorCXN0cnVjdCBtdDc2X3BoeSAqcGh5ID0gaHctPnByaXY7DQorDQor CXJldHVybiBjb250YWluZXJfb2YocGh5LT5kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsN Cit9DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXQ3OTE1X3BoeSAqDQorbXQ3OTE1X2V4dF9w aHkoc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXN0cnVjdCBtdDc2X3BoeSAqcGh5ID0g ZGV2LT5tdDc2LnBoeTI7DQorDQorCWlmICghcGh5KQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCXJl dHVybiBwaHktPnByaXY7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZA0KK210NzkxNV9zZXRf YWdncl9zdGF0ZShzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YSwgdTggdGlkLA0KKwkJICAgICAgZW51 bSBtdDc5MTVfYW1wZHVfc3RhdGUgc3RhdGUpDQorew0KKwlzcGluX2xvY2tfYmgoJm1zdGEtPmFt cGR1X2xvY2spOw0KKwltc3RhLT5hbXBkdV9zdGF0ZVt0aWRdID0gc3RhdGU7DQorCXNwaW5fdW5s b2NrX2JoKCZtc3RhLT5hbXBkdV9sb2NrKTsNCit9DQorDQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBp ZWVlODAyMTFfb3BzIG10NzkxNV9vcHM7DQorZXh0ZXJuIHN0cnVjdCBwY2lfZHJpdmVyIG10Nzkx NV9wY2lfZHJpdmVyOw0KKw0KK3UzMiBtdDc5MTVfcmVnX21hcChzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2LCB1MzIgYWRkcik7DQorDQoraW50IG10NzkxNV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10 NzkxNV9kZXYgKmRldik7DQordm9pZCBtdDc5MTVfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10 NzkxNV9kZXYgKmRldik7DQoraW50IG10NzkxNV9yZWdpc3Rlcl9leHRfcGh5KHN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYpOw0KK3ZvaWQgbXQ3OTE1X3VucmVnaXN0ZXJfZXh0X3BoeShzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2KTsNCitpbnQgbXQ3OTE1X2VlcHJvbV9pbml0KHN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYpOw0KK3UzMiBtdDc5MTVfZWVwcm9tX3JlYWQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwg dTMyIG9mZnNldCk7DQoraW50IG10NzkxNV9lZXByb21fZ2V0X3RhcmdldF9wb3dlcihzdHJ1Y3Qg bXQ3OTE1X2RldiAqZGV2LA0KKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4s DQorCQkJCSAgIHU4IGNoYWluX2lkeCk7DQoraW50IG10NzkxNV9kbWFfaW5pdChzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2KTsNCit2b2lkIG10NzkxNV9kbWFfcHJlZmV0Y2goc3RydWN0IG10NzkxNV9k ZXYgKmRldik7DQordm9pZCBtdDc5MTVfZG1hX2NsZWFudXAoc3RydWN0IG10NzkxNV9kZXYgKmRl dik7DQoraW50IG10NzkxNV9tY3VfaW5pdChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KTsNCitpbnQg bXQ3OTE1X21jdV9hZGRfZGV2X2luZm8oc3RydWN0IG10NzkxNV9kZXYgKmRldiwNCisJCQkgICAg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgYm9vbCBlbmFibGUpOw0KK2ludCBtdDc5MTVfbWN1 X2FkZF9ic3NfaW5mbyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LA0KKwkJCSAgICBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLCBpbnQgZW5hYmxlKTsNCitpbnQgbXQ3OTE1X21jdV9hZGRfc3RhKHN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICAg ICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBlbmFibGUpOw0KK2ludCBtdDc5MTVf bWN1X2FkZF90eF9iYShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSBzdHJ1Y3QgaWVlZTgw MjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zLA0KKwkJCSBib29sIGFkZCk7DQoraW50IG10NzkxNV9t Y3VfYWRkX3J4X2JhKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkJIHN0cnVjdCBpZWVlODAy MTFfYW1wZHVfcGFyYW1zICpwYXJhbXMsDQorCQkJIGJvb2wgYWRkKTsNCitpbnQgbXQ3OTE1X21j dV9hZGRfa2V5KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsDQorCQkgICAgICAgc3RydWN0IG10NzkxNV9zdGEgKm1zdGEsIHN0cnVjdCBpZWVlODAyMTFf a2V5X2NvbmYgKmtleSwNCisJCSAgICAgICBlbnVtIHNldF9rZXlfY21kIGNtZCk7DQoraW50IG10 NzkxNV9tY3VfYWRkX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwNCisJCQkgIGludCBlbmFibGUpOw0KK2ludCBtdDc5MTVfbWN1X2FkZF9y YXRlX2N0cmwoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZp ZiwNCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOw0KK2ludCBtdDc5MTVfbWN1 X2FkZF9zbXBzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsDQorCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7DQoraW50IG10NzkxNV9tY3Vfc2V0 X2NoYW5faW5mbyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LCBpbnQgY21kKTsNCitpbnQgbXQ3OTE1 X21jdV9zZXRfdHgoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZik7DQoraW50IG10NzkxNV9tY3Vfc2V0X2VlcHJvbShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 KTsNCitpbnQgbXQ3OTE1X21jdV9nZXRfZWVwcm9tKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUz MiBvZmZzZXQpOw0KK2ludCBtdDc5MTVfbWN1X3NldF9tYWMoc3RydWN0IG10NzkxNV9kZXYgKmRl diwgaW50IGJhbmQsIGJvb2wgZW5hYmxlLA0KKwkJICAgICAgIGJvb2wgaGRyX3RyYW5zKTsNCitp bnQgbXQ3OTE1X21jdV9zZXRfc2NzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHU4IGJhbmQsIGJv b2wgZW5hYmxlKTsNCitpbnQgbXQ3OTE1X21jdV9zZXRfc2VyKHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYsIHU4IGFjdGlvbiwgdTggc2V0LCB1OCBiYW5kKTsNCitpbnQgbXQ3OTE1X21jdV9zZXRfcnRz X3RocmVzaChzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LCB1MzIgdmFsKTsNCitpbnQgbXQ3OTE1X21j dV9zZXRfcG0oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgaW50IGJhbmQsIGludCBlbnRlcik7DQor aW50IG10NzkxNV9tY3Vfc2V0X2ZjYzVfbHBuKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGludCB2 YWwpOw0KK2ludCBtdDc5MTVfbWN1X3NldF9wdWxzZV90aChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 LA0KKwkJCSAgICBjb25zdCBzdHJ1Y3QgbXQ3OTE1X2Rmc19wdWxzZSAqcHVsc2UpOw0KK2ludCBt dDc5MTVfbWN1X3NldF9yYWRhcl90aChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgaW5kZXgs DQorCQkJICAgIGNvbnN0IHN0cnVjdCBtdDc5MTVfZGZzX3BhdHRlcm4gKnBhdHRlcm4pOw0KK2lu dCBtdDc5MTVfbWN1X2dldF9yYXRlX2luZm8oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIGNt ZCwgdTE2IHdsYW5faWR4KTsNCitpbnQgbXQ3OTE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0 IG10NzkxNV9kZXYgKmRldiwgaW50IGluZGV4KTsNCitpbnQgbXQ3OTE1X21jdV9yZGRfY21kKHN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGVudW0gbXQ3OTE1X3JkZF9jbWQgY21kLA0KKwkJICAgICAg IHU4IGluZGV4LCB1OCByeF9zZWwsIHU4IHZhbCk7DQordm9pZCBtdDc5MTVfbWN1X3J4X2V2ZW50 KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOw0KK3ZvaWQgbXQ3 OTE1X21jdV9leGl0KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpOw0KKw0KK3N0YXRpYyBpbmxpbmUg Ym9vbCBpc19tdDc5MTUoc3RydWN0IG10NzZfZGV2ICpkZXYpDQorew0KKwlyZXR1cm4gbXQ3Nl9j aGlwKGRldikgPT0gMHg3OTE1Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXQ3OTE1X2ly cV9lbmFibGUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG1hc2spDQorew0KKwltdDc2X3Nl dF9pcnFfbWFzaygmZGV2LT5tdDc2LCBNVF9JTlRfTUFTS19DU1IsIDAsIG1hc2spOw0KK30NCisN CitzdGF0aWMgaW5saW5lIHZvaWQgbXQ3OTE1X2lycV9kaXNhYmxlKHN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYsIHUzMiBtYXNrKQ0KK3sNCisJbXQ3Nl9zZXRfaXJxX21hc2soJmRldi0+bXQ3NiwgTVRf SU5UX01BU0tfQ1NSLCBtYXNrLCAwKTsNCit9DQorDQorc3RhdGljIGlubGluZSB1MzINCittdDc5 MTVfcmVnX21hcF9sMShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgYWRkcikNCit7DQorCXUz MiBvZmZzZXQgPSBGSUVMRF9HRVQoTVRfSElGX1JFTUFQX0wxX09GRlNFVCwgYWRkcik7DQorCXUz MiBiYXNlID0gRklFTERfR0VUKE1UX0hJRl9SRU1BUF9MMV9CQVNFLCBhZGRyKTsNCisNCisJbXQ3 Nl9ybXdfZmllbGQoZGV2LCBNVF9ISUZfUkVNQVBfTDEsIE1UX0hJRl9SRU1BUF9MMV9NQVNLLCBi YXNlKTsNCisJLyogdXNlIHJlYWQgdG8gcHVzaCB3cml0ZSAqLw0KKwltdDc2X3JyKGRldiwgTVRf SElGX1JFTUFQX0wxKTsNCisNCisJcmV0dXJuIE1UX0hJRl9SRU1BUF9CQVNFX0wxICsgb2Zmc2V0 Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIHUzMg0KK210NzkxNV9sMV9ycihzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2LCB1MzIgYWRkcikNCit7DQorCXJldHVybiBtdDc2X3JyKGRldiwgbXQ3OTE1X3Jl Z19tYXBfbDEoZGV2LCBhZGRyKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZA0KK210Nzkx NV9sMV93cihzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgYWRkciwgdTMyIHZhbCkNCit7DQor CW10NzZfd3IoZGV2LCBtdDc5MTVfcmVnX21hcF9sMShkZXYsIGFkZHIpLCB2YWwpOw0KK30NCisN CitzdGF0aWMgaW5saW5lIHUzMg0KK210NzkxNV9sMV9ybXcoc3RydWN0IG10NzkxNV9kZXYgKmRl diwgdTMyIGFkZHIsIHUzMiBtYXNrLCB1MzIgdmFsKQ0KK3sNCisJdmFsIHw9IG10NzkxNV9sMV9y cihkZXYsIGFkZHIpICYgfm1hc2s7DQorCW10NzkxNV9sMV93cihkZXYsIGFkZHIsIHZhbCk7DQor DQorCXJldHVybiB2YWw7DQorfQ0KKw0KKyNkZWZpbmUgbXQ3OTE1X2wxX3NldChkZXYsIGFkZHIs IHZhbCkJbXQ3OTE1X2wxX3JtdyhkZXYsIGFkZHIsIDAsIHZhbCkNCisjZGVmaW5lIG10NzkxNV9s MV9jbGVhcihkZXYsIGFkZHIsIHZhbCkJbXQ3OTE1X2wxX3JtdyhkZXYsIGFkZHIsIHZhbCwgMCkN CisNCitzdGF0aWMgaW5saW5lIHUzMg0KK210NzkxNV9yZWdfbWFwX2wyKHN0cnVjdCBtdDc5MTVf ZGV2ICpkZXYsIHUzMiBhZGRyKQ0KK3sNCisJdTMyIG9mZnNldCA9IEZJRUxEX0dFVChNVF9ISUZf UkVNQVBfTDJfT0ZGU0VULCBhZGRyKTsNCisJdTMyIGJhc2UgPSBGSUVMRF9HRVQoTVRfSElGX1JF TUFQX0wyX0JBU0UsIGFkZHIpOw0KKw0KKwltdDc2X3Jtd19maWVsZChkZXYsIE1UX0hJRl9SRU1B UF9MMiwgTVRfSElGX1JFTUFQX0wyX01BU0ssIGJhc2UpOw0KKwkvKiB1c2UgcmVhZCB0byBwdXNo IHdyaXRlICovDQorCW10NzZfcnIoZGV2LCBNVF9ISUZfUkVNQVBfTDIpOw0KKw0KKwlyZXR1cm4g TVRfSElGX1JFTUFQX0JBU0VfTDIgKyBvZmZzZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdTMy DQorbXQ3OTE1X2wyX3JyKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBhZGRyKQ0KK3sNCisJ cmV0dXJuIG10NzZfcnIoZGV2LCBtdDc5MTVfcmVnX21hcF9sMihkZXYsIGFkZHIpKTsNCit9DQor DQorc3RhdGljIGlubGluZSB2b2lkDQorbXQ3OTE1X2wyX3dyKHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYsIHUzMiBhZGRyLCB1MzIgdmFsKQ0KK3sNCisJbXQ3Nl93cihkZXYsIG10NzkxNV9yZWdfbWFw X2wyKGRldiwgYWRkciksIHZhbCk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdTMyDQorbXQ3OTE1 X2wyX3JtdyhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgYWRkciwgdTMyIG1hc2ssIHUzMiB2 YWwpDQorew0KKwl2YWwgfD0gbXQ3OTE1X2wyX3JyKGRldiwgYWRkcikgJiB+bWFzazsNCisJbXQ3 OTE1X2wyX3dyKGRldiwgYWRkciwgdmFsKTsNCisNCisJcmV0dXJuIHZhbDsNCit9DQorDQorI2Rl ZmluZSBtdDc5MTVfbDJfc2V0KGRldiwgYWRkciwgdmFsKQltdDc5MTVfbDJfcm13KGRldiwgYWRk ciwgMCwgdmFsKQ0KKyNkZWZpbmUgbXQ3OTE1X2wyX2NsZWFyKGRldiwgYWRkciwgdmFsKQltdDc5 MTVfbDJfcm13KGRldiwgYWRkciwgdmFsLCAwKQ0KKw0KK2Jvb2wgbXQ3OTE1X21hY193dGJsX3Vw ZGF0ZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgaWR4LCB1MzIgbWFzayk7DQordm9pZCBt dDc5MTVfbWFjX3Jlc2V0X2NvdW50ZXJzKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkpOw0KK3ZvaWQg bXQ3OTE1X21hY19jY2Ffc3RhdHNfcmVzZXQoc3RydWN0IG10NzkxNV9waHkgKnBoeSk7DQordm9p ZCBtdDc5MTVfbWFjX3N0YV9wb2xsKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpOw0KK3ZvaWQgbXQ3 OTE1X21hY193cml0ZV90eHdpKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIF9fbGUzMiAqdHh3aSwN CisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkLA0KKwkJ CSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgYm9vbCBiZWFjb24pOw0KK3ZvaWQg bXQ3OTE1X21hY19zZXRfdGltaW5nKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkpOw0KK2ludCBtdDc5 MTVfbWFjX2ZpbGxfcngoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNr Yik7DQordm9pZCBtdDc5MTVfbWFjX3R4X2ZyZWUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3Ry dWN0IHNrX2J1ZmYgKnNrYik7DQoraW50IG10NzkxNV9tYWNfc3RhX2FkZChzdHJ1Y3QgbXQ3Nl9k ZXYgKm1kZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICAgICAgc3RydWN0IGll ZWU4MDIxMV9zdGEgKnN0YSk7DQordm9pZCBtdDc5MTVfbWFjX3N0YV9yZW1vdmUoc3RydWN0IG10 NzZfZGV2ICptZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgIHN0cnVjdCBp ZWVlODAyMTFfc3RhICpzdGEpOw0KK3ZvaWQgbXQ3OTE1X21hY193b3JrKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yayk7DQordm9pZCBtdDc5MTVfbWFjX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKTsNCit2b2lkIG10NzkxNV9tYWNfc3RhX3N0YXRzX3dvcmsoc3RydWN0IHdvcmtf c3RydWN0ICp3b3JrKTsNCitpbnQgbXQ3OTE1X3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBtdDc2X2Rl diAqbWRldiwgdm9pZCAqdHh3aV9wdHIsDQorCQkJICBlbnVtIG10NzZfdHhxX2lkIHFpZCwgc3Ry dWN0IG10NzZfd2NpZCAqd2NpZCwNCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQor CQkJICBzdHJ1Y3QgbXQ3Nl90eF9pbmZvICp0eF9pbmZvKTsNCit2b2lkIG10NzkxNV90eF9jb21w bGV0ZV9za2Ioc3RydWN0IG10NzZfZGV2ICptZGV2LCBlbnVtIG10NzZfdHhxX2lkIHFpZCwNCisJ CQkgICAgc3RydWN0IG10NzZfcXVldWVfZW50cnkgKmUpOw0KK3ZvaWQgbXQ3OTE1X3F1ZXVlX3J4 X3NrYihzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGVudW0gbXQ3Nl9yeHFfaWQgcSwNCisJCQkgc3Ry dWN0IHNrX2J1ZmYgKnNrYik7DQordm9pZCBtdDc5MTVfc3RhX3BzKHN0cnVjdCBtdDc2X2RldiAq bWRldiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBwcyk7DQordm9pZCBtdDc5MTVf c3RhdHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOw0KK3ZvaWQgbXQ3OTE1X3R4cF9z a2JfdW5tYXAoc3RydWN0IG10NzZfZGV2ICpkZXYsDQorCQkJICBzdHJ1Y3QgbXQ3Nl90eHdpX2Nh Y2hlICp0eHdpKTsNCitpbnQgbXQ3Nl9kZnNfc3RhcnRfcmRkKHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYsIGJvb2wgZm9yY2UpOw0KK2ludCBtdDc5MTVfZGZzX2luaXRfcmFkYXJfZGV0ZWN0b3Ioc3Ry dWN0IG10NzkxNV9waHkgKnBoeSk7DQordm9pZCBtdDc5MTVfdXBkYXRlX2NoYW5uZWwoc3RydWN0 IG10NzZfZGV2ICptZGV2KTsNCitpbnQgbXQ3OTE1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2KTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVz cy9tZWRpYXRlay9tdDc2L210NzkxNS9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlh dGVrL210NzYvbXQ3OTE1L3BjaS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MDAwMDAwLi5iNzliNTA2MGNkNzcNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3BjaS5jDQpAQCAtMCwwICsxLDE2NiBAQA0KKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MNCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVk aWFUZWsgSW5jLg0KKyAqDQorICogQXV0aG9yOiBSeWRlciBMZWUgPHJ5ZGVyLmxlZUBtZWRpYXRl ay5jb20+DQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvcGNpLmg+DQorDQorI2luY2x1ZGUgIm10 NzkxNS5oIg0KKyNpbmNsdWRlICJtYWMuaCINCisjaW5jbHVkZSAiLi4vdHJhY2UuaCINCisNCitz dGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXQ3OTE1X3BjaV9kZXZpY2VfdGFibGVb XSA9IHsNCisJeyBQQ0lfREVWSUNFKDB4MTRjMywgMHg3OTE1KSB9LA0KKwl7IH0sDQorfTsNCisN CitzdGF0aWMgdm9pZA0KK210NzkxNV9yeF9wb2xsX2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAq bWRldiwgZW51bSBtdDc2X3J4cV9pZCBxKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9 IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbXQ3OTE1X2RldiwgbXQ3Nik7DQorDQorCW10Nzkx NV9pcnFfZW5hYmxlKGRldiwgTVRfSU5UX1JYX0RPTkUocSkpOw0KK30NCisNCisvKiBUT0RPOiBz dXBwb3J0IDIvNC82LzggTVNJLVggdmVjdG9ycyAqLw0KK3N0YXRpYyBpcnFyZXR1cm5fdCBtdDc5 MTVfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQ0KK3sNCisJc3RydWN0 IG10NzkxNV9kZXYgKmRldiA9IGRldl9pbnN0YW5jZTsNCisJdTMyIGludHI7DQorDQorCWludHIg PSBtdDc2X3JyKGRldiwgTVRfSU5UX1NPVVJDRV9DU1IpOw0KKwltdDc2X3dyKGRldiwgTVRfSU5U X1NPVVJDRV9DU1IsIGludHIpOw0KKw0KKwlpZiAoIXRlc3RfYml0KE1UNzZfU1RBVEVfSU5JVElB TElaRUQsICZkZXYtPm1waHkuc3RhdGUpKQ0KKwkJcmV0dXJuIElSUV9OT05FOw0KKw0KKwl0cmFj ZV9kZXZfaXJxKCZkZXYtPm10NzYsIGludHIsIGRldi0+bXQ3Ni5tbWlvLmlycW1hc2spOw0KKw0K KwlpbnRyICY9IGRldi0+bXQ3Ni5tbWlvLmlycW1hc2s7DQorDQorCWlmIChpbnRyICYgTVRfSU5U X1RYX0RPTkVfQUxMKSB7DQorCQltdDc5MTVfaXJxX2Rpc2FibGUoZGV2LCBNVF9JTlRfVFhfRE9O RV9BTEwpOw0KKwkJbmFwaV9zY2hlZHVsZSgmZGV2LT5tdDc2LnR4X25hcGkpOw0KKwl9DQorDQor CWlmIChpbnRyICYgTVRfSU5UX1JYX0RPTkVfREFUQSkgew0KKwkJbXQ3OTE1X2lycV9kaXNhYmxl KGRldiwgTVRfSU5UX1JYX0RPTkVfREFUQSk7DQorCQluYXBpX3NjaGVkdWxlKCZkZXYtPm10NzYu bmFwaVswXSk7DQorCX0NCisNCisJaWYgKGludHIgJiBNVF9JTlRfUlhfRE9ORV9XTSkgew0KKwkJ bXQ3OTE1X2lycV9kaXNhYmxlKGRldiwgTVRfSU5UX1JYX0RPTkVfV00pOw0KKwkJbmFwaV9zY2hl ZHVsZSgmZGV2LT5tdDc2Lm5hcGlbMV0pOw0KKwl9DQorDQorCWlmIChpbnRyICYgTVRfSU5UX1JY X0RPTkVfV0EpIHsNCisJCW10NzkxNV9pcnFfZGlzYWJsZShkZXYsIE1UX0lOVF9SWF9ET05FX1dB KTsNCisJCW5hcGlfc2NoZWR1bGUoJmRldi0+bXQ3Ni5uYXBpWzJdKTsNCisJfQ0KKw0KKwlpZiAo aW50ciAmIE1UX0lOVF9NQ1VfQ01EKSB7DQorCQl1MzIgdmFsID0gbXQ3Nl9ycihkZXYsIE1UX01D VV9DTUQpOw0KKw0KKwkJbXQ3Nl93cihkZXYsIE1UX01DVV9DTUQsIHZhbCk7DQorCQlpZiAodmFs ICYgTVRfTUNVX0NNRF9FUlJPUl9NQVNLKSB7DQorCQkJZGV2LT5yZXNldF9zdGF0ZSA9IHZhbDsN CisJCQlpZWVlODAyMTFfcXVldWVfd29yayhtdDc2X2h3KGRldiksICZkZXYtPnJlc2V0X3dvcmsp Ow0KKwkJCXdha2VfdXAoJmRldi0+cmVzZXRfd2FpdCk7DQorCQl9DQorCX0NCisNCisJcmV0dXJu IElSUV9IQU5ETEVEOw0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9wY2lfcHJvYmUoc3RydWN0 IHBjaV9kZXYgKnBkZXYsDQorCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkN Cit7DQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3Nl9kcml2ZXJfb3BzIGRydl9vcHMgPSB7DQor CQkvKiB0eHdpX3NpemUgPSB0eGQgc2l6ZSArIHR4cCBzaXplICovDQorCQkudHh3aV9zaXplID0g TVRfVFhEX1NJWkUgKyBzaXplb2Yoc3RydWN0IG10NzkxNV90eHApLA0KKwkJLmRydl9mbGFncyA9 IE1UX0RSVl9UWFdJX05PX0ZSRUUsDQorCQkuc3VydmV5X2ZsYWdzID0gU1VSVkVZX0lORk9fVElN RV9UWCB8DQorCQkJCVNVUlZFWV9JTkZPX1RJTUVfUlggfA0KKwkJCQlTVVJWRVlfSU5GT19USU1F X0JTU19SWCwNCisJCS50eF9wcmVwYXJlX3NrYiA9IG10NzkxNV90eF9wcmVwYXJlX3NrYiwNCisJ CS50eF9jb21wbGV0ZV9za2IgPSBtdDc5MTVfdHhfY29tcGxldGVfc2tiLA0KKwkJLnJ4X3NrYiA9 IG10NzkxNV9xdWV1ZV9yeF9za2IsDQorCQkucnhfcG9sbF9jb21wbGV0ZSA9IG10NzkxNV9yeF9w b2xsX2NvbXBsZXRlLA0KKwkJLnN0YV9wcyA9IG10NzkxNV9zdGFfcHMsDQorCQkuc3RhX2FkZCA9 IG10NzkxNV9tYWNfc3RhX2FkZCwNCisJCS5zdGFfcmVtb3ZlID0gbXQ3OTE1X21hY19zdGFfcmVt b3ZlLA0KKwkJLnVwZGF0ZV9zdXJ2ZXkgPSBtdDc5MTVfdXBkYXRlX2NoYW5uZWwsDQorCX07DQor CXN0cnVjdCBtdDc5MTVfZGV2ICpkZXY7DQorCXN0cnVjdCBtdDc2X2RldiAqbWRldjsNCisJaW50 IHJldDsNCisNCisJcmV0ID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOw0KKwlpZiAocmV0KQ0K KwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIEJJVCgw KSwgcGNpX25hbWUocGRldikpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcGNp X3NldF9tYXN0ZXIocGRldik7DQorDQorCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1B X0JJVF9NQVNLKDMyKSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwltZGV2ID0g bXQ3Nl9hbGxvY19kZXZpY2UoJnBkZXYtPmRldiwgc2l6ZW9mKCpkZXYpLCAmbXQ3OTE1X29wcywN CisJCQkJICZkcnZfb3BzKTsNCisJaWYgKCFtZGV2KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQor CWRldiA9IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbXQ3OTE1X2RldiwgbXQ3Nik7DQorDQor CW10NzZfbW1pb19pbml0KCZkZXYtPm10NzYsIHBjaW1faW9tYXBfdGFibGUocGRldilbMF0pOw0K KwltZGV2LT5yZXYgPSAobXQ3OTE1X2wxX3JyKGRldiwgTVRfSFdfQ0hJUElEKSA8PCAxNikgfA0K KwkJICAgIChtdDc5MTVfbDFfcnIoZGV2LCBNVF9IV19SRVYpICYgMHhmZik7DQorCWRldl9kYmco bWRldi0+ZGV2LCAiQVNJQyByZXZpc2lvbjogJTA0eFxuIiwgbWRldi0+cmV2KTsNCisNCisJLyog bWFzdGVyIHN3aXRjaCBvZiBQQ0llIHRudGVycnVwdCBlbmFibGUgKi8NCisJbXQ3OTE1X2wxX3dy KGRldiwgTVRfUENJRV9NQUNfSU5UX0VOQUJMRSwgMHhmZik7DQorDQorCXJldCA9IGRldm1fcmVx dWVzdF9pcnEobWRldi0+ZGV2LCBwZGV2LT5pcnEsIG10NzkxNV9pcnFfaGFuZGxlciwNCisJCQkg ICAgICAgSVJRRl9TSEFSRUQsIEtCVUlMRF9NT0ROQU1FLCBkZXYpOw0KKwlpZiAocmV0KQ0KKwkJ Z290byBlcnJvcjsNCisNCisJcmV0ID0gbXQ3OTE1X3JlZ2lzdGVyX2RldmljZShkZXYpOw0KKwlp ZiAocmV0KQ0KKwkJZ290byBlcnJvcjsNCisNCisJcmV0dXJuIDA7DQorZXJyb3I6DQorCWllZWU4 MDIxMV9mcmVlX2h3KG10NzZfaHcoZGV2KSk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIG10NzkxNV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KK3sNCisJc3Ry dWN0IG10NzZfZGV2ICptZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KKwlzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2ID0gY29udGFpbmVyX29mKG1kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2 KTsNCisNCisJbXQ3OTE1X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7DQorfQ0KKw0KK3N0cnVjdCBw Y2lfZHJpdmVyIG10NzkxNV9wY2lfZHJpdmVyID0gew0KKwkubmFtZQkJPSBLQlVJTERfTU9ETkFN RSwNCisJLmlkX3RhYmxlCT0gbXQ3OTE1X3BjaV9kZXZpY2VfdGFibGUsDQorCS5wcm9iZQkJPSBt dDc5MTVfcGNpX3Byb2JlLA0KKwkucmVtb3ZlCQk9IG10NzkxNV9wY2lfcmVtb3ZlLA0KK307DQor DQorbW9kdWxlX3BjaV9kcml2ZXIobXQ3OTE1X3BjaV9kcml2ZXIpOw0KKw0KK01PRFVMRV9ERVZJ Q0VfVEFCTEUocGNpLCBtdDc5MTVfcGNpX2RldmljZV90YWJsZSk7DQorTU9EVUxFX0ZJUk1XQVJF KE1UNzkxNV9GSVJNV0FSRV9XQSk7DQorTU9EVUxFX0ZJUk1XQVJFKE1UNzkxNV9GSVJNV0FSRV9X TSk7DQorTU9EVUxFX0ZJUk1XQVJFKE1UNzkxNV9ST01fUEFUQ0gpOw0KK01PRFVMRV9MSUNFTlNF KCJEdWFsIEJTRC9HUEwiKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRp YXRlay9tdDc2L210NzkxNS9yZWdzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9t dDc2L210NzkxNS9yZWdzLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAw MDAuLmVmODc1NzkwNTZmZQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvcmVncy5oDQpAQCAtMCwwICsxLDM0MyBAQA0KKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MgKi8NCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVk aWFUZWsgSW5jLiAqLw0KKw0KKyNpZm5kZWYgX19NVDc5MTVfUkVHU19IDQorI2RlZmluZSBfX01U NzkxNV9SRUdTX0gNCisNCisvKiBNQ1UgV0ZETUExICovDQorI2RlZmluZSBNVF9NQ1VfV0ZETUEx X0JBU0UJCTB4MzAwMA0KKyNkZWZpbmUgTVRfTUNVX1dGRE1BMShvZnMpCQkoTVRfTUNVX1dGRE1B MV9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9NQ1VfSU5UX0VWRU5UCQlNVF9NQ1VfV0ZE TUExKDB4MTA4KQ0KKyNkZWZpbmUgTVRfTUNVX0lOVF9FVkVOVF9ETUFfU1RPUFBFRAlCSVQoMCkN CisjZGVmaW5lIE1UX01DVV9JTlRfRVZFTlRfRE1BX0lOSVQJQklUKDEpDQorI2RlZmluZSBNVF9N Q1VfSU5UX0VWRU5UX1NFUl9UUklHR0VSCUJJVCgyKQ0KKyNkZWZpbmUgTVRfTUNVX0lOVF9FVkVO VF9SRVNFVF9ET05FCUJJVCgzKQ0KKw0KKyNkZWZpbmUgTVRfUExFX0JBU0UJCQkweDgwMDANCisj ZGVmaW5lIE1UX1BMRShvZnMpCQkJKE1UX1BMRV9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBN VF9QTEVfRkxfUTBfQ1RSTAkJTVRfUExFKDB4MWIwKQ0KKyNkZWZpbmUgTVRfUExFX0ZMX1ExX0NU UkwJCU1UX1BMRSgweDFiNCkNCisjZGVmaW5lIE1UX1BMRV9GTF9RMl9DVFJMCQlNVF9QTEUoMHgx YjgpDQorI2RlZmluZSBNVF9QTEVfRkxfUTNfQ1RSTAkJTVRfUExFKDB4MWJjKQ0KKw0KKyNkZWZp bmUgTVRfUExFX0FDX1FFTVBUWShhYywgbikJCU1UX1BMRSgweDMwMCArIDB4MTAgKiAoYWMpICsg XA0KKwkJCQkJICAgICAgICgobikgPDwgMikpDQorI2RlZmluZSBNVF9QTEVfQU1TRFVfUEFDS19N U0RVX0NOVChuKQlNVF9QTEUoMHgxMGUwICsgKChuKSA8PCAyKSkNCisNCisjZGVmaW5lIE1UX01E UF9CQVNFCQkJMHhmMDAwDQorI2RlZmluZSBNVF9NRFAob2ZzKQkJCShNVF9NRFBfQkFTRSArIChv ZnMpKQ0KKw0KKyNkZWZpbmUgTVRfTURQX0RDUjAJCQlNVF9NRFAoMHgwMDApDQorI2RlZmluZSBN VF9NRFBfRENSMF9EQU1TRFVfRU4JCUJJVCgxNSkNCisNCisjZGVmaW5lIE1UX01EUF9EQ1IxCQkJ TVRfTURQKDB4MDA0KQ0KKyNkZWZpbmUgTVRfTURQX0RDUjFfTUFYX1JYX0xFTgkJR0VOTUFTSygx NSwgMykNCisNCisjZGVmaW5lIE1UX01EUF9CTlJDRlIwKF9iYW5kKQkJTVRfTURQKDB4MDcwICsg KChfYmFuZCkgPDwgOCkpDQorI2RlZmluZSBNVF9NRFBfUkNGUjBfTUNVX1JYX01HTVQJR0VOTUFT Syg1LCA0KQ0KKyNkZWZpbmUgTVRfTURQX1JDRlIwX01DVV9SWF9DVExfTk9OX0JBUglHRU5NQVNL KDcsIDYpDQorI2RlZmluZSBNVF9NRFBfUkNGUjBfTUNVX1JYX0NUTF9CQVIJR0VOTUFTSyg5LCA4 KQ0KKw0KKyNkZWZpbmUgTVRfTURQX0JOUkNGUjEoX2JhbmQpCQlNVF9NRFAoMHgwNzQgKyAoKF9i YW5kKSA8PCA4KSkNCisjZGVmaW5lIE1UX01EUF9SQ0ZSMV9NQ1VfUlhfQllQQVNTCUdFTk1BU0so MjMsIDIyKQ0KKyNkZWZpbmUgTVRfTURQX1JDRlIxX1JYX0RST1BQRURfVUNBU1QJR0VOTUFTSygy OCwgMjcpDQorI2RlZmluZSBNVF9NRFBfUkNGUjFfUlhfRFJPUFBFRF9NQ0FTVAlHRU5NQVNLKDMw LCAyOSkNCisjZGVmaW5lIE1UX01EUF9UT19ISUYJCQkwDQorI2RlZmluZSBNVF9NRFBfVE9fV00J CQkxDQorDQorLyogVE1BQzogYmFuZCAwKDB4MjEwMDApLCBiYW5kIDEoMHhhMTAwMCkgKi8NCisj ZGVmaW5lIE1UX1dGX1RNQUNfQkFTRShfYmFuZCkJCSgoX2JhbmQpID8gMHhhMTAwMCA6IDB4MjEw MDApDQorI2RlZmluZSBNVF9XRl9UTUFDKF9iYW5kLCBvZnMpCQkoTVRfV0ZfVE1BQ19CQVNFKF9i YW5kKSArIChvZnMpKQ0KKw0KKyNkZWZpbmUgTVRfVE1BQ19DRFRSKF9iYW5kKQkJTVRfV0ZfVE1B QyhfYmFuZCwgMHgwOTApDQorI2RlZmluZSBNVF9UTUFDX09EVFIoX2JhbmQpCQlNVF9XRl9UTUFD KF9iYW5kLCAweDA5NCkNCisjZGVmaW5lIE1UX1RJTUVPVVRfVkFMX1BMQ1AJCUdFTk1BU0soMTUs IDApDQorI2RlZmluZSBNVF9USU1FT1VUX1ZBTF9DQ0EJCUdFTk1BU0soMzEsIDE2KQ0KKw0KKyNk ZWZpbmUgTVRfVE1BQ19JQ1IwKF9iYW5kKQkJTVRfV0ZfVE1BQyhfYmFuZCwgMHgwYTQpDQorI2Rl ZmluZSBNVF9JRlNfRUlGUwkJCUdFTk1BU0soOCwgMCkNCisjZGVmaW5lIE1UX0lGU19SSUZTCQkJ R0VOTUFTSygxNCwgMTApDQorI2RlZmluZSBNVF9JRlNfU0lGUwkJCUdFTk1BU0soMjIsIDE2KQ0K KyNkZWZpbmUgTVRfSUZTX1NMT1QJCQlHRU5NQVNLKDMwLCAyNCkNCisNCisjZGVmaW5lIE1UX1RN QUNfQ1RDUjAoX2JhbmQpCQkJTVRfV0ZfVE1BQyhfYmFuZCwgMHgwZjQpDQorI2RlZmluZSBNVF9U TUFDX0NUQ1IwX0lOU19ERExNVF9SRUZUSU1FCQlHRU5NQVNLKDUsIDApDQorI2RlZmluZSBNVF9U TUFDX0NUQ1IwX0lOU19ERExNVF9FTgkJQklUKDE3KQ0KKyNkZWZpbmUgTVRfVE1BQ19DVENSMF9J TlNfRERMTVRfVkhUX1NNUERVX0VOCUJJVCgxOCkNCisNCisvKiBETUEgQmFuZCAwICovDQorI2Rl ZmluZSBNVF9XRl9ETUFfQkFTRQkJCTB4MjFlMDANCisjZGVmaW5lIE1UX1dGX0RNQShvZnMpCQkJ KE1UX1dGX0RNQV9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9ETUFfRENSMAkJCU1UX1dG X0RNQSgweDAwMCkNCisjZGVmaW5lIE1UX0RNQV9EQ1IwX01BWF9SWF9MRU4JCUdFTk1BU0soMTUs IDMpDQorDQorLyogTUlCOiBiYW5kIDAoMHgyNDgwMCksIGJhbmQgMSgweGE0ODAwKSAqLw0KKyNk ZWZpbmUgTVRfV0ZfTUlCX0JBU0UoX2JhbmQpCQkoKF9iYW5kKSA/IDB4YTQ4MDAgOiAweDI0ODAw KQ0KKyNkZWZpbmUgTVRfV0ZfTUlCKF9iYW5kLCBvZnMpCQkoTVRfV0ZfTUlCX0JBU0UoX2JhbmQp ICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9NSUJfU0RSMyhfYmFuZCkJCU1UX1dGX01JQihfYmFu ZCwgMHgwMTQpDQorI2RlZmluZSBNVF9NSUJfU0RSM19GQ1NfRVJSX01BU0sJR0VOTUFTSygxNSwg MCkNCisNCisjZGVmaW5lIE1UX01JQl9TRFI5KF9iYW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDAy YykNCisjZGVmaW5lIE1UX01JQl9TRFI5X0JVU1lfTUFTSwkJR0VOTUFTSygyMywgMCkNCisNCisj ZGVmaW5lIE1UX01JQl9TRFIxNihfYmFuZCkJCU1UX1dGX01JQihfYmFuZCwgMHgwNDgpDQorI2Rl ZmluZSBNVF9NSUJfU0RSMTZfQlVTWV9NQVNLCQlHRU5NQVNLKDIzLCAwKQ0KKw0KKyNkZWZpbmUg TVRfTUlCX1NEUjM2KF9iYW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDA5OCkNCisjZGVmaW5lIE1U X01JQl9TRFIzNl9UWFRJTUVfTUFTSwlHRU5NQVNLKDIzLCAwKQ0KKyNkZWZpbmUgTVRfTUlCX1NE UjM3KF9iYW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDA5YykNCisjZGVmaW5lIE1UX01JQl9TRFIz N19SWFRJTUVfTUFTSwlHRU5NQVNLKDIzLCAwKQ0KKw0KKyNkZWZpbmUgTVRfTUlCX01CX1NEUjAo X2JhbmQsIG4pCU1UX1dGX01JQihfYmFuZCwgMHgxMDAgKyAoKG4pIDw8IDQpKQ0KKyNkZWZpbmUg TVRfTUlCX1JUU19SRVRSSUVTX0NPVU5UX01BU0sJR0VOTUFTSygzMSwgMTYpDQorI2RlZmluZSBN VF9NSUJfUlRTX0NPVU5UX01BU0sJCUdFTk1BU0soMTUsIDApDQorDQorI2RlZmluZSBNVF9NSUJf TUJfU0RSMShfYmFuZCwgbikJTVRfV0ZfTUlCKF9iYW5kLCAweDEwNCArICgobikgPDwgNCkpDQor I2RlZmluZSBNVF9NSUJfQkFfTUlTU19DT1VOVF9NQVNLCUdFTk1BU0soMTUsIDApDQorI2RlZmlu ZSBNVF9NSUJfQUNLX0ZBSUxfQ09VTlRfTUFTSwlHRU5NQVNLKDMxLCAxNikNCisNCisjZGVmaW5l IE1UX01JQl9NQl9TRFIyKF9iYW5kLCBuKQlNVF9XRl9NSUIoX2JhbmQsIDB4MTA4ICsgKChuKSA8 PCA0KSkNCisjZGVmaW5lIE1UX01JQl9GUkFNRV9SRVRSSUVTX0NPVU5UX01BU0sJR0VOTUFTSygx NSwgMCkNCisNCisjZGVmaW5lIE1UX1RYX0FHR19DTlQoX2JhbmQsIG4pCQlNVF9XRl9NSUIoX2Jh bmQsIDB4MGE4ICsgKChuKSA8PCAyKSkNCisjZGVmaW5lIE1UX1RYX0FHR19DTlQyKF9iYW5kLCBu KQlNVF9XRl9NSUIoX2JhbmQsIDB4MTY0ICsgKChuKSA8PCAyKSkNCisjZGVmaW5lIE1UX01JQl9B Uk5HKF9iYW5kLCBuKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDRiOCArICgobikgPDwgMikpDQorI2Rl ZmluZSBNVF9NSUJfQVJOQ1JfUkFOR0UodmFsLCBuKQkoKCh2YWwpID4+ICgobikgPDwgMykpICYg R0VOTUFTSyg3LCAwKSkNCisNCisjZGVmaW5lIE1UX1dUQkxPTl9UT1BfQkFTRQkJMHgzNDAwMA0K KyNkZWZpbmUgTVRfV1RCTE9OX1RPUChvZnMpCQkoTVRfV1RCTE9OX1RPUF9CQVNFICsgKG9mcykp DQorI2RlZmluZSBNVF9XVEJMT05fVE9QX1dEVUNSCQlNVF9XVEJMT05fVE9QKDB4MCkNCisjZGVm aW5lIE1UX1dUQkxPTl9UT1BfV0RVQ1JfR1JPVVAJR0VOTUFTSygyLCAwKQ0KKw0KKyNkZWZpbmUg TVRfV1RCTF9VUERBVEUJCQlNVF9XVEJMT05fVE9QKDB4MDMwKQ0KKyNkZWZpbmUgTVRfV1RCTF9V UERBVEVfV0xBTl9JRFgJCUdFTk1BU0soOSwgMCkNCisjZGVmaW5lIE1UX1dUQkxfVVBEQVRFX0FE TV9DT1VOVF9DTEVBUglCSVQoMTIpDQorI2RlZmluZSBNVF9XVEJMX1VQREFURV9CVVNZCQlCSVQo MzEpDQorDQorI2RlZmluZSBNVF9XVEJMX0JBU0UJCQkweDM4MDAwDQorI2RlZmluZSBNVF9XVEJM X0xNQUNfSUQJCQlHRU5NQVNLKDE0LCA4KQ0KKyNkZWZpbmUgTVRfV1RCTF9MTUFDX0RXCQkJR0VO TUFTSyg3LCAyKQ0KKyNkZWZpbmUgTVRfV1RCTF9MTUFDX09GRlMoX2lkLCBfZHcpCShNVF9XVEJM X0JBU0UgfCBcDQorCQkJCQlGSUVMRF9QUkVQKE1UX1dUQkxfTE1BQ19JRCwgX2lkKSB8IFwNCisJ CQkJCUZJRUxEX1BSRVAoTVRfV1RCTF9MTUFDX0RXLCBfZHcpKQ0KKw0KKy8qIEFHRzogYmFuZCAw KDB4MjA4MDApLCBiYW5kIDEoMHhhMDgwMCkgKi8NCisjZGVmaW5lIE1UX1dGX0FHR19CQVNFKF9i YW5kKQkJKChfYmFuZCkgPyAweGEwODAwIDogMHgyMDgwMCkNCisjZGVmaW5lIE1UX1dGX0FHRyhf YmFuZCwgb2ZzKQkJKE1UX1dGX0FHR19CQVNFKF9iYW5kKSArIChvZnMpKQ0KKw0KKyNkZWZpbmUg TVRfQUdHX0FDUjAoX2JhbmQpCQlNVF9XRl9BR0coX2JhbmQsIDB4MDg0KQ0KKyNkZWZpbmUgTVRf QUdHX0FDUl9DRkVORF9SQVRFCQlHRU5NQVNLKDEzLCAwKQ0KKyNkZWZpbmUgTVRfQUdHX0FDUl9C QVJfUkFURQkJR0VOTUFTSygyOSwgMTYpDQorDQorLyogQVJCOiBiYW5kIDAoMHgyMGMwMCksIGJh bmQgMSgweGEwYzAwKSAqLw0KKyNkZWZpbmUgTVRfV0ZfQVJCX0JBU0UoX2JhbmQpCQkoKF9iYW5k KSA/IDB4YTBjMDAgOiAweDIwYzAwKQ0KKyNkZWZpbmUgTVRfV0ZfQVJCKF9iYW5kLCBvZnMpCQko TVRfV0ZfQVJCX0JBU0UoX2JhbmQpICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9BUkJfU0NSKF9i YW5kKQkJTVRfV0ZfQVJCKF9iYW5kLCAweDA4MCkNCisjZGVmaW5lIE1UX0FSQl9TQ1JfVFhfRElT QUJMRQkJQklUKDgpDQorI2RlZmluZSBNVF9BUkJfU0NSX1JYX0RJU0FCTEUJCUJJVCg5KQ0KKw0K Ky8qIFJNQUM6IGJhbmQgMCgweDIxNDAwKSwgYmFuZCAxKDB4YTE0MDApICovDQorI2RlZmluZSBN VF9XRl9STUFDX0JBU0UoX2JhbmQpCQkoKF9iYW5kKSA/IDB4YTE0MDAgOiAweDIxNDAwKQ0KKyNk ZWZpbmUgTVRfV0ZfUk1BQyhfYmFuZCwgb2ZzKQkJKE1UX1dGX1JNQUNfQkFTRShfYmFuZCkgKyAo b2ZzKSkNCisNCisjZGVmaW5lIE1UX1dGX1JGQ1IoX2JhbmQpCQlNVF9XRl9STUFDKF9iYW5kLCAw eDAwMCkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9TVEJDX01VTFRJCUJJVCgwKQ0KKyNkZWZp bmUgTVRfV0ZfUkZDUl9EUk9QX0ZDU0ZBSUwJCUJJVCgxKQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9E Uk9QX1ZFUlNJT04JCUJJVCgzKQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX1BST0JFUkVRCUJJ VCg0KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX01DQVNUCQlCSVQoNSkNCisjZGVmaW5lIE1U X1dGX1JGQ1JfRFJPUF9CQ0FTVAkJQklUKDYpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfTUNB U1RfRklMVEVSRUQJQklUKDcpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfQTNfTUFDCQlCSVQo OCkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9BM19CU1NJRAlCSVQoOSkNCisjZGVmaW5lIE1U X1dGX1JGQ1JfRFJPUF9BMl9CU1NJRAlCSVQoMTApDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1Bf T1RIRVJfQkVBQ09OCUJJVCgxMSkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9GUkFNRV9SRVBP UlQJQklUKDEyKQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX0NUTF9SU1YJCUJJVCgxMykNCisj ZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9DVFMJCUJJVCgxNCkNCisjZGVmaW5lIE1UX1dGX1JGQ1Jf RFJPUF9SVFMJCUJJVCgxNSkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9EVVBMSUNBVEUJQklU KDE2KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX09USEVSX0JTUwlCSVQoMTcpDQorI2RlZmlu ZSBNVF9XRl9SRkNSX0RST1BfT1RIRVJfVUMJQklUKDE4KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9E Uk9QX09USEVSX1RJTQlCSVQoMTkpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfTkRQQQkJQklU KDIwKQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX1VOV0FOVEVEX0NUTAlCSVQoMjEpDQorDQor I2RlZmluZSBNVF9XRl9SRkNSMShfYmFuZCkJCU1UX1dGX1JNQUMoX2JhbmQsIDB4MDA0KQ0KKyNk ZWZpbmUgTVRfV0ZfUkZDUjFfRFJPUF9BQ0sJCUJJVCg0KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUjFf RFJPUF9CRl9QT0xMCUJJVCg1KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUjFfRFJPUF9CQQkJQklUKDYp DQorI2RlZmluZSBNVF9XRl9SRkNSMV9EUk9QX0NGRU5ECQlCSVQoNykNCisjZGVmaW5lIE1UX1dG X1JGQ1IxX0RST1BfQ0ZBQ0sJCUJJVCg4KQ0KKw0KKyNkZWZpbmUgTVRfV0ZfUk1BQ19NSUJfVElN RTAoX2JhbmQpCU1UX1dGX1JNQUMoX2JhbmQsIDB4MDNjNCkNCisjZGVmaW5lIE1UX1dGX1JNQUNf TUlCX1JYVElNRV9DTFIJQklUKDMxKQ0KKyNkZWZpbmUgTVRfV0ZfUk1BQ19NSUJfUlhUSU1FX0VO CUJJVCgzMCkNCisNCisjZGVmaW5lIE1UX1dGX1JNQUNfTUlCX0FJUlRJTUUxNChfYmFuZCkJTVRf V0ZfUk1BQyhfYmFuZCwgMHgwM2I4KQ0KKyNkZWZpbmUgTVRfTUlCX09CU1NUSU1FX01BU0sJCUdF Tk1BU0soMjMsIDApDQorI2RlZmluZSBNVF9XRl9STUFDX01JQl9BSVJUSU1FMChfYmFuZCkJTVRf V0ZfUk1BQyhfYmFuZCwgMHgwMzgwKQ0KKw0KKy8qIFdGRE1BMCAqLw0KKyNkZWZpbmUgTVRfV0ZE TUEwX0JBU0UJCQkweGQ0MDAwDQorI2RlZmluZSBNVF9XRkRNQTAob2ZzKQkJCShNVF9XRkRNQTBf QkFTRSArIChvZnMpKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUEwX1JTVAkJCU1UX1dGRE1BMCgweDEw MCkNCisjZGVmaW5lIE1UX1dGRE1BMF9SU1RfTE9HSUNfUlNUCQlCSVQoNCkNCisjZGVmaW5lIE1U X1dGRE1BMF9SU1RfRE1BU0hETF9BTExfUlNUCUJJVCg1KQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUEw X0JVU1lfRU5BCQlNVF9XRkRNQTAoMHgxM2MpDQorI2RlZmluZSBNVF9XRkRNQTBfQlVTWV9FTkFf VFhfRklGTzAJQklUKDApDQorI2RlZmluZSBNVF9XRkRNQTBfQlVTWV9FTkFfVFhfRklGTzEJQklU KDEpDQorI2RlZmluZSBNVF9XRkRNQTBfQlVTWV9FTkFfUlhfRklGTwlCSVQoMikNCisNCisjZGVm aW5lIE1UX1dGRE1BMF9HTE9fQ0ZHCQlNVF9XRkRNQTAoMHgyMDgpDQorI2RlZmluZSBNVF9XRkRN QTBfR0xPX0NGR19UWF9ETUFfRU4JQklUKDApDQorI2RlZmluZSBNVF9XRkRNQTBfR0xPX0NGR19S WF9ETUFfRU4JQklUKDIpDQorDQorI2RlZmluZSBNVF9XRkRNQTBfUlNUX0RUWF9QVFIJCU1UX1dG RE1BMCgweDIwYykNCisjZGVmaW5lIE1UX1dGRE1BMF9QUklfRExZX0lOVF9DRkcwCU1UX1dGRE1B MCgweDJmMCkNCisNCisjZGVmaW5lIE1UX1JYX0RBVEFfUklOR19CQVNFCQlNVF9XRkRNQTAoMHg1 MDApDQorDQorI2RlZmluZSBNVF9XRkRNQTBfUlhfUklORzBfRVhUX0NUUkwJTVRfV0ZETUEwKDB4 NjgwKQ0KKyNkZWZpbmUgTVRfV0ZETUEwX1JYX1JJTkcxX0VYVF9DVFJMCU1UX1dGRE1BMCgweDY4 NCkNCisjZGVmaW5lIE1UX1dGRE1BMF9SWF9SSU5HMl9FWFRfQ1RSTAlNVF9XRkRNQTAoMHg2ODgp DQorDQorLyogV0ZETUExICovDQorI2RlZmluZSBNVF9XRkRNQTFfQkFTRQkJCTB4ZDUwMDANCisj ZGVmaW5lIE1UX1dGRE1BMShvZnMpCQkJKE1UX1dGRE1BMV9CQVNFICsgKG9mcykpDQorDQorI2Rl ZmluZSBNVF9XRkRNQTFfUlNUCQkJTVRfV0ZETUExKDB4MTAwKQ0KKyNkZWZpbmUgTVRfV0ZETUEx X1JTVF9MT0dJQ19SU1QJCUJJVCg0KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1JTVF9ETUFTSERMX0FM TF9SU1QJQklUKDUpDQorDQorI2RlZmluZSBNVF9XRkRNQTFfQlVTWV9FTkEJCU1UX1dGRE1BMSgw eDEzYykNCisjZGVmaW5lIE1UX1dGRE1BMV9CVVNZX0VOQV9UWF9GSUZPMAlCSVQoMCkNCisjZGVm aW5lIE1UX1dGRE1BMV9CVVNZX0VOQV9UWF9GSUZPMQlCSVQoMSkNCisjZGVmaW5lIE1UX1dGRE1B MV9CVVNZX0VOQV9SWF9GSUZPCUJJVCgyKQ0KKw0KKyNkZWZpbmUgTVRfTUNVX0NNRAkJCU1UX1dG RE1BMSgweDFmMCkNCisjZGVmaW5lIE1UX01DVV9DTURfU1RPUF9ETUFfRldfUkVMT0FECUJJVCgx KQ0KKyNkZWZpbmUgTVRfTUNVX0NNRF9TVE9QX0RNQQkJQklUKDIpDQorI2RlZmluZSBNVF9NQ1Vf Q01EX1JFU0VUX0RPTkUJCUJJVCgzKQ0KKyNkZWZpbmUgTVRfTUNVX0NNRF9SRUNPVkVSWV9ET05F CUJJVCg0KQ0KKyNkZWZpbmUgTVRfTUNVX0NNRF9OT1JNQUxfU1RBVEUJCUJJVCg1KQ0KKyNkZWZp bmUgTVRfTUNVX0NNRF9FUlJPUl9NQVNLCQlHRU5NQVNLKDUsIDEpDQorDQorI2RlZmluZSBNVF9X RkRNQTFfR0xPX0NGRwkJTVRfV0ZETUExKDB4MjA4KQ0KKyNkZWZpbmUgTVRfV0ZETUExX0dMT19D RkdfVFhfRE1BX0VOCUJJVCgwKQ0KKyNkZWZpbmUgTVRfV0ZETUExX0dMT19DRkdfUlhfRE1BX0VO CUJJVCgyKQ0KKyNkZWZpbmUgTVRfV0ZETUExX0dMT19DRkdfT01JVF9UWF9JTkZPCUJJVCgyOCkN CisjZGVmaW5lIE1UX1dGRE1BMV9HTE9fQ0ZHX09NSVRfUlhfSU5GTwlCSVQoMjcpDQorDQorI2Rl ZmluZSBNVF9XRkRNQTFfUlNUX0RUWF9QVFIJCU1UX1dGRE1BMSgweDIwYykNCisjZGVmaW5lIE1U X1dGRE1BMV9QUklfRExZX0lOVF9DRkcwCU1UX1dGRE1BMSgweDJmMCkNCisNCisjZGVmaW5lIE1U X1RYX1JJTkdfQkFTRQkJCU1UX1dGRE1BMSgweDMwMCkNCisjZGVmaW5lIE1UX1JYX0VWRU5UX1JJ TkdfQkFTRQkJTVRfV0ZETUExKDB4NTAwKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkcw X0VYVF9DVFJMCU1UX1dGRE1BMSgweDYwMCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMV9F WFRfQ1RSTAlNVF9XRkRNQTEoMHg2MDQpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzJfRVhU X0NUUkwJTVRfV0ZETUExKDB4NjA4KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkczX0VYVF9D VFJMCU1UX1dGRE1BMSgweDYwYykNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HNF9FWFRfQ1RS TAlNVF9XRkRNQTEoMHg2MTApDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzVfRVhUX0NUUkwJ TVRfV0ZETUExKDB4NjE0KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkc2X0VYVF9DVFJMCU1U X1dGRE1BMSgweDYxOCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HN19FWFRfQ1RSTAlNVF9X RkRNQTEoMHg2MWMpDQorDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzE2X0VYVF9DVFJMCU1U X1dGRE1BMSgweDY0MCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMTdfRVhUX0NUUkwJTVRf V0ZETUExKDB4NjQ0KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkcxOF9FWFRfQ1RSTAlNVF9X RkRNQTEoMHg2NDgpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzE5X0VYVF9DVFJMCU1UX1dG RE1BMSgweDY0YykNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMjBfRVhUX0NUUkwJTVRfV0ZE TUExKDB4NjUwKQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkcyMV9FWFRfQ1RSTAlNVF9XRkRN QTEoMHg2NTQpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzIyX0VYVF9DVFJMCU1UX1dGRE1B MSgweDY1OCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMjNfRVhUX0NUUkwJTVRfV0ZETUEx KDB4NjVjKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUExX1JYX1JJTkcwX0VYVF9DVFJMCU1UX1dGRE1B MSgweDY4MCkNCisjZGVmaW5lIE1UX1dGRE1BMV9SWF9SSU5HMV9FWFRfQ1RSTAlNVF9XRkRNQTEo MHg2ODQpDQorI2RlZmluZSBNVF9XRkRNQTFfUlhfUklORzJfRVhUX0NUUkwJTVRfV0ZETUExKDB4 Njg4KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1JYX1JJTkczX0VYVF9DVFJMCU1UX1dGRE1BMSgweDY4 YykNCisNCisvKiBXRkRNQSBDU1IgKi8NCisjZGVmaW5lIE1UX1dGRE1BX0VYVF9DU1JfQkFTRQkJ MHhkNzAwMA0KKyNkZWZpbmUgTVRfV0ZETUFfRVhUX0NTUihvZnMpCQkoTVRfV0ZETUFfRVhUX0NT Ul9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9JTlRfU09VUkNFX0NTUgkJTVRfV0ZETUFf RVhUX0NTUigweDEwKQ0KKyNkZWZpbmUgTVRfSU5UX01BU0tfQ1NSCQkJTVRfV0ZETUFfRVhUX0NT UigweDE0KQ0KKyNkZWZpbmUgTVRfSU5UX1JYX0RPTkVfREFUQQkJQklUKDE2KQ0KKyNkZWZpbmUg TVRfSU5UX1JYX0RPTkVfV00JCUJJVCgwKQ0KKyNkZWZpbmUgTVRfSU5UX1JYX0RPTkVfV0EJCUJJ VCgxKQ0KKyNkZWZpbmUgTVRfSU5UX1JYX0RPTkUoX24pCQkoKF9uKSA/IEJJVCgoX24pIC0gMSkg OiBCSVQoMTYpKQ0KKyNkZWZpbmUgTVRfSU5UX1JYX0RPTkVfQUxMCQkoQklUKDApIHwgQklUKDEp IHwgQklUKDE2KSkNCisjZGVmaW5lIE1UX0lOVF9UWF9ET05FX0FMTAkJKEJJVCgxNSkgfCBHRU5N QVNLKDI3LCAyNikgfCBCSVQoMzApKQ0KKyNkZWZpbmUgTVRfSU5UX01DVV9DTUQJCQlCSVQoMjkp DQorDQorI2RlZmluZSBNVF9XRkRNQV9FWFRfQ1NSX0hJRl9NSVNDCU1UX1dGRE1BX0VYVF9DU1Io MHg0NCkNCisjZGVmaW5lIE1UX1dGRE1BX0VYVF9DU1JfSElGX01JU0NfQlVTWQlCSVQoMCkNCisN CisvKiBXRkRNQTAgUENJRTEgKi8NCisjZGVmaW5lIE1UX1dGRE1BMF9QQ0lFMV9CQVNFCQkJMHhk ODAwMA0KKyNkZWZpbmUgTVRfV0ZETUEwX1BDSUUxKG9mcykJCQkoTVRfV0ZETUEwX1BDSUUxX0JB U0UgKyAob2ZzKSkNCisNCisjZGVmaW5lIE1UX1dGRE1BMF9QQ0lFMV9CVVNZX0VOQQkJTVRfV0ZE TUEwX1BDSUUxKDB4MTNjKQ0KKyNkZWZpbmUgTVRfV0ZETUEwX1BDSUUxX0JVU1lfRU5BX1RYX0ZJ Rk8wCUJJVCgwKQ0KKyNkZWZpbmUgTVRfV0ZETUEwX1BDSUUxX0JVU1lfRU5BX1RYX0ZJRk8xCUJJ VCgxKQ0KKyNkZWZpbmUgTVRfV0ZETUEwX1BDSUUxX0JVU1lfRU5BX1JYX0ZJRk8JQklUKDIpDQor DQorLyogV0ZETUExIFBDSUUxICovDQorI2RlZmluZSBNVF9XRkRNQTFfUENJRTFfQkFTRQkJCTB4 ZDkwMDANCisjZGVmaW5lIE1UX1dGRE1BMV9QQ0lFMShvZnMpCQkJKE1UX1dGRE1BMF9QQ0lFMV9C QVNFICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9XRkRNQTFfUENJRTFfQlVTWV9FTkEJCU1UX1dG RE1BMV9QQ0lFMSgweDEzYykNCisjZGVmaW5lIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VOQV9UWF9G SUZPMAlCSVQoMCkNCisjZGVmaW5lIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VOQV9UWF9GSUZPMQlC SVQoMSkNCisjZGVmaW5lIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VOQV9SWF9GSUZPCUJJVCgyKQ0K Kw0KKyNkZWZpbmUgTVRfSU5GUkFfQ0ZHX0JBU0UJCTB4ZjEwMDANCisjZGVmaW5lIE1UX0lORlJB KG9mcykJCQkoTVRfSU5GUkFfQ0ZHX0JBU0UgKyAob2ZzKSkNCisNCisjZGVmaW5lIE1UX0hJRl9S RU1BUF9MMQkJCU1UX0lORlJBKDB4MWFjKQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wxX01BU0sJ CUdFTk1BU0soMTUsIDApDQorI2RlZmluZSBNVF9ISUZfUkVNQVBfTDFfT0ZGU0VUCQlHRU5NQVNL KDE1LCAwKQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wxX0JBU0UJCUdFTk1BU0soMzEsIDE2KQ0K KyNkZWZpbmUgTVRfSElGX1JFTUFQX0JBU0VfTDEJCTB4ZTAwMDANCisNCisjZGVmaW5lIE1UX0hJ Rl9SRU1BUF9MMgkJCU1UX0lORlJBKDB4MWIwKQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wyX01B U0sJCUdFTk1BU0soMTksIDApDQorI2RlZmluZSBNVF9ISUZfUkVNQVBfTDJfT0ZGU0VUCQlHRU5N QVNLKDExLCAwKQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wyX0JBU0UJCUdFTk1BU0soMzEsIDEy KQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0JBU0VfTDIJCTB4MDAwMDANCisNCisjZGVmaW5lIE1U X1RPUF9CQVNFCQkJMHgxODA2MDAwMA0KKyNkZWZpbmUgTVRfVE9QKG9mcykJCQkoTVRfVE9QX0JB U0UgKyAob2ZzKSkNCisNCisjZGVmaW5lIE1UX1RPUF9MUENSX0hPU1RfQkFORDAJCU1UX1RPUCgw eDEwKQ0KKyNkZWZpbmUgTVRfVE9QX0xQQ1JfSE9TVF9GV19PV04JCUJJVCgwKQ0KKyNkZWZpbmUg TVRfVE9QX0xQQ1JfSE9TVF9EUlZfT1dOCUJJVCgxKQ0KKw0KKyNkZWZpbmUgTVRfVE9QX01JU0MJ CQlNVF9UT1AoMHhmMCkNCisjZGVmaW5lIE1UX1RPUF9NSVNDX0ZXX1NUQVRFCQlHRU5NQVNLKDIs IDApDQorDQorI2RlZmluZSBNVF9IV19CT1VORAkJCTB4NzAwMTAwMjANCisjZGVmaW5lIE1UX0hX X0NISVBJRAkJCTB4NzAwMTAyMDANCisjZGVmaW5lIE1UX0hXX1JFVgkJCTB4NzAwMTAyMDQNCisN CisjZGVmaW5lIE1UX1BDSUVfTUFDX0JBU0UJCTB4NzQwMzAwMDANCisjZGVmaW5lIE1UX1BDSUVf TUFDKG9mcykJCShNVF9QQ0lFX01BQ19CQVNFICsgKG9mcykpDQorI2RlZmluZSBNVF9QQ0lFX01B Q19JTlRfRU5BQkxFCQlNVF9QQ0lFX01BQygweDE4OCkNCisNCisvKiBQSFk6IGJhbmQgMCgweDgz MDgwMDAwKSwgYmFuZCAxKDB4ODMwOTAwMDApICovDQorI2RlZmluZSBNVF9XRl9QSFlfQkFTRQkJ CTB4ODMwODAwMDANCisjZGVmaW5lIE1UX1dGX1BIWShvZnMpCQkJKE1UX1dGX1BIWV9CQVNFICsg KG9mcykpDQorDQorI2RlZmluZSBNVF9XRl9QSFlfUlhfQ1RSTDEoX3BoeSkJTVRfV0ZfUEhZKDB4 MjAwNCArICgoX3BoeSkgPDwgMTYpKQ0KKyNkZWZpbmUgTVRfV0ZfUEhZX1JYX0NUUkwxX1NUU0NO VF9FTglHRU5NQVNLKDExLCA5KQ0KKw0KKyNlbmRpZg0KLS0gDQoyLjE4LjANCg==