Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp3745755ybb; Tue, 31 Mar 2020 11:09:38 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtmnVHLVGDn/mPZklrbsrwGKijEW0pUMnMMNyVyfLn1bu6DF44rWkhMQiQnVwkBjETtMs8t X-Received: by 2002:a05:6830:3109:: with SMTP id b9mr14661132ots.369.1585678178439; Tue, 31 Mar 2020 11:09:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585678178; cv=none; d=google.com; s=arc-20160816; b=rOa6KJ4uOuK1jG0gieY8ceaLaWAcjbcUITlWIEaxTINV44UBVSbip1viL8eukHnZ9f v0bpWPKeWlzAgYf2xGJ0f391nIR+5fEINdtk1VvE0Bf2pc6FHd5bvWW/Rz7DGfmWX3Co 1blj13+ylvJUa+0qMTTsCL0lCdemrcRZDTkiwYHFIcqXaYtGPvJuM9HHsVELZETshwnc xskvEt37iPCtJJLgSKwqRs8B1T0bqeyNz1VOamkDE1W+5DoQGtBvlEZr/xFXHO0WG59L 5XqYdnzgewbKaY3xQx8QoaznGevab7ZC9tbKzAOiWshU8cPwIyGshGCwkb8Gju7+yAlY xkZA== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=H+nM2knhdE1G6996/K7DXuE/Mx6CFil59TWFeED9RRc=; b=XAVh8VHJj9epUgoF01Re7CqlMSK0pRdfxmZ9MwdNBgUwAFKqqLtJ+ql6BiRCjxiHW2 f2r9TonL8kPhngfvq7arZK3uc1DYAXrgOU0BuXuZBPDmkQ9whn67y2SBxWapyLVdwXFa T8LfNk3e8apsmbXRQa/o5lpbbNEX8Yer9m04s3jvrhyElCm2F1aZEf6N8XUKBmTNDfSe P67Pz7ujg5A8FvmfYM0EOj+ioR9L4XKGbahw08El+1p8Tjsx8YcFyk3yKRL5T6D3XfIt 3xmENHEUH6ywgTY3tX4tgb/TBykZZw14digNX3KROqcht9h9274SBz5T5IMNZY9yLJxF Mx/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=WDipdmQ+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-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. [209.132.180.67]) by mx.google.com with ESMTP id i15si8250418ots.121.2020.03.31.11.09.25; Tue, 31 Mar 2020 11:09:38 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=WDipdmQ+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-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 S1727677AbgCaSIn (ORCPT + 99 others); Tue, 31 Mar 2020 14:08:43 -0400 Received: from mailgw02.mediatek.com ([1.203.163.81]:39195 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726268AbgCaSIn (ORCPT ); Tue, 31 Mar 2020 14:08:43 -0400 X-UUID: 3c18ea27ec724bf5a04b0a133db42f48-20200401 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:Message-ID:Date:Subject:CC:To:From; bh=H+nM2knhdE1G6996/K7DXuE/Mx6CFil59TWFeED9RRc=; b=WDipdmQ+qJStqIzT9hG7tTTKyCia0WDZ9OX5DT4EN+cnjvIKnXjaE4qO2ZVyYEzhJTsJPA+4aPCyZEtYs3MF4iu/41Mse2j9tRgN/QdCbCEnhHWe79F0SlVjQyLBV0n1Hnteu2n9RHRiPZtNAddUS/j7yUUxXcB/Wl/T76ERFrs=; X-UUID: 3c18ea27ec724bf5a04b0a133db42f48-20200401 Received: from mtkcas32.mediatek.inc [(172.27.4.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 1595492440; Wed, 01 Apr 2020 02:08:13 +0800 Received: from MTKCAS32.mediatek.inc (172.27.4.184) by MTKMBS31N2.mediatek.inc (172.27.4.87) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 1 Apr 2020 02:08:10 +0800 Received: from mcddlt001.mediatek.inc (10.19.240.15) by MTKCAS32.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Wed, 1 Apr 2020 02:08:09 +0800 From: Weijie Gao To: CC: , , , , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Matthias Brugger , Boris Brezillon , Frieder Schrempf , Greg Kroah-Hartman , Anders Roxell , Brendan Higgins , Piotr Sroka , Mason Yang , Arnd Bergmann , Rob Herring , Mark Rutland , Weijie Gao Subject: [PATCH 1/2] mtd: rawnand: add driver support for MT7621 nand flash controller Date: Wed, 1 Apr 2020 02:07:58 +0800 Message-ID: <1585678079-5999-1-git-send-email-weijie.gao@mediatek.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: 563D9B50FAA90B571C47A1F93922B3641D649343EBC47ECA46AE978DAD5A06AC2000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIE5BTkQgZmxhc2ggY29udHJvbGxlciBkcml2ZXIgZm9yIE1lZGlhVGVr IE1UNzYyMSBTb0MuDQoNClRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgaXMgc2ltaWxhciB3aXRo IGNvbnRyb2xsZXJzIGRlc2NyaWJlZCBpbg0KbXRrX25hbmQuYywgZXhjZXB0IHRoYXQgdGhlIGNv bnRyb2xsZXIgZnJvbSBNVDc2MjEgZG9lc24ndCBzdXBwb3J0IERNQQ0KdHJhbnNtaXNzaW9uLCBh bmQgc29tZSByZWdpc3RlcnMnIG9mZnNldCBhbmQgZmllbGRzIGFyZSBkaWZmZXJlbnQuDQoNClNp Z25lZC1vZmYtYnk6IFdlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPg0KLS0tDQog ZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZyAgICAgICB8ICAgIDggKw0KIGRyaXZlcnMvbXRk L25hbmQvcmF3L01ha2VmaWxlICAgICAgfCAgICAxICsNCiBkcml2ZXJzL210ZC9uYW5kL3Jhdy9t dDc2MjFfbmFuZC5jIHwgMTM0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogMyBmaWxl cyBjaGFuZ2VkLCAxMzU3IGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9tdGQvbmFuZC9yYXcvbXQ3NjIxX25hbmQuYw0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQv bmFuZC9yYXcvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcNCmluZGV4IGE4 MGE0NmJiNWI4Yi4uYzA3ZGNmMTc0YTBmIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9y YXcvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZw0KQEAgLTM5MSw2 ICszOTEsMTQgQEAgY29uZmlnIE1URF9OQU5EX1FDT00NCiAJICBFbmFibGVzIHN1cHBvcnQgZm9y IE5BTkQgZmxhc2ggY2hpcHMgb24gU29DcyBjb250YWluaW5nIHRoZSBFQkkyIE5BTkQNCiAJICBj b250cm9sbGVyLiBUaGlzIGNvbnRyb2xsZXIgaXMgZm91bmQgb24gSVBRODA2eCBTb0MuDQogDQor Y29uZmlnIE1URF9OQU5EX01UNzYyMQ0KKwl0cmlzdGF0ZSAiTVQ3NjIxIE5BTkQgY29udHJvbGxl ciINCisJZGVwZW5kcyBvbiBTT0NfTVQ3NjIxIHx8IENPTVBJTEVfVEVTVA0KKwlkZXBlbmRzIG9u IEhBU19JT01FTQ0KKwloZWxwDQorCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBOQU5EIGNvbnRyb2xs ZXIgb24gTVQ3NjIxIFNvQy4NCisJICBUaGlzIGRyaXZlciB1c2VzIFBJTyBtb2RlIGZvciBkYXRh IHRyYW5zbWlzc2lvbiBpbnN0ZWFkIG9mIERNQSBtb2RlLg0KKw0KIGNvbmZpZyBNVERfTkFORF9N VEsNCiAJdHJpc3RhdGUgIk1USyBOQU5EIGNvbnRyb2xsZXIiDQogCWRlcGVuZHMgb24gQVJDSF9N RURJQVRFSyB8fCBDT01QSUxFX1RFU1QNCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jh dy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlDQppbmRleCAyZDEzNmIx NThmYjcuLmYzNzQ5NDVkNjMwNSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L01h a2VmaWxlDQorKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZQ0KQEAgLTUyLDYgKzUy LDcgQEAgb2JqLSQoQ09ORklHX01URF9OQU5EX1NVTlhJKQkJKz0gc3VueGlfbmFuZC5vDQogb2Jq LSQoQ09ORklHX01URF9OQU5EX0hJU0k1MDQpCSAgICAgICAgKz0gaGlzaTUwNF9uYW5kLm8NCiBv YmotJChDT05GSUdfTVREX05BTkRfQlJDTU5BTkQpCQkrPSBicmNtbmFuZC8NCiBvYmotJChDT05G SUdfTVREX05BTkRfUUNPTSkJCSs9IHFjb21fbmFuZGMubw0KK29iai0kKENPTkZJR19NVERfTkFO RF9NVDc2MjEpCQkrPSBtdDc2MjFfbmFuZC5vDQogb2JqLSQoQ09ORklHX01URF9OQU5EX01USykJ CSs9IG10a19lY2MubyBtdGtfbmFuZC5vDQogb2JqLSQoQ09ORklHX01URF9OQU5EX01YSUMpCQkr PSBteGljX25hbmQubw0KIG9iai0kKENPTkZJR19NVERfTkFORF9URUdSQSkJCSs9IHRlZ3JhX25h bmQubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L210NzYyMV9uYW5kLmMgYi9k cml2ZXJzL210ZC9uYW5kL3Jhdy9tdDc2MjFfbmFuZC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMDAwLi43NzYzMTM3NDMwZjENCi0tLSAvZGV2L251bGwNCisrKyBiL2Ry aXZlcnMvbXRkL25hbmQvcmF3L210NzYyMV9uYW5kLmMNCkBAIC0wLDAgKzEsMTM0OCBAQA0KKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBNZWRpYVRlayBNVDc2 MjEgTkFORCBGbGFzaCBDb250cm9sbGVyIGRyaXZlcg0KKyAqDQorICogQ29weXJpZ2h0IChDKSAy MDIwIE1lZGlhVGVrIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCisgKg0KKyAqIEF1dGhvcjog V2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+DQorICovDQorDQorI2luY2x1ZGUg PGxpbnV4L2lvLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NpemVz Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQu aD4NCisjaW5jbHVkZSA8bGludXgvbXRkL3Jhd25hbmQuaD4NCisjaW5jbHVkZSA8bGludXgvbXRk L3BhcnRpdGlvbnMuaD4NCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQorI2lu Y2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4NCisNCisvKiBORkkgY29yZSByZWdpc3RlcnMgKi8NCisj ZGVmaW5lIE5GSV9DTkZHCQkJMHgwMDANCisjZGVmaW5lICAgQ05GR19PUF9NT0RFX1MJCTEyDQor I2RlZmluZSAgIENORkdfT1BfTU9ERV9NCQlHRU5NQVNLKDE0LCAxMikNCisjZGVmaW5lICAgICBD TkZHX09QX0NVU1RPTQkJNg0KKyNkZWZpbmUgICBDTkZHX0FVVE9fRk1UX0VOCQlCSVQoOSkNCisj ZGVmaW5lICAgQ05GR19IV19FQ0NfRU4JCUJJVCg4KQ0KKyNkZWZpbmUgICBDTkZHX0JZVEVfUlcJ CQlCSVQoNikNCisjZGVmaW5lICAgQ05GR19SRUFEX01PREUJCUJJVCgxKQ0KKw0KKyNkZWZpbmUg TkZJX1BBR0VGTVQJCQkweDAwNA0KKyNkZWZpbmUgICBQQUdFRk1UX0ZETV9FQ0NfUwkJMTINCisj ZGVmaW5lICAgUEFHRUZNVF9GRE1fRUNDX00JCUdFTk1BU0soMTUsIDEyKQ0KKyNkZWZpbmUgICBQ QUdFRk1UX0ZETV9TCQkJOA0KKyNkZWZpbmUgICBQQUdFRk1UX0ZETV9NCQkJR0VOTUFTSygxMSwg OCkNCisjZGVmaW5lICAgUEFHRUZNVF9TUEFSRV9TCQk0DQorI2RlZmluZSAgIFBBR0VGTVRfU1BB UkVfTQkJR0VOTUFTSyg1LCA0KQ0KKyNkZWZpbmUgICBQQUdFRk1UX1BBR0VfUwkJMA0KKyNkZWZp bmUgICBQQUdFRk1UX1BBR0VfTQkJR0VOTUFTSygxLCAwKQ0KKw0KKyNkZWZpbmUgTkZJX0NPTgkJ CQkweDAwOA0KKyNkZWZpbmUgICBDT05fTkZJX1NFQ19TCQkJMTINCisjZGVmaW5lICAgQ09OX05G SV9TRUNfTQkJCUdFTk1BU0soMTUsIDEyKQ0KKyNkZWZpbmUgICBDT05fTkZJX0JXUgkJCUJJVCg5 KQ0KKyNkZWZpbmUgICBDT05fTkZJX0JSRAkJCUJJVCg4KQ0KKyNkZWZpbmUgICBDT05fTkZJX1JT VAkJCUJJVCgxKQ0KKyNkZWZpbmUgICBDT05fRklGT19GTFVTSAkJQklUKDApDQorDQorI2RlZmlu ZSBORklfQUNDQ09OCQkJMHgwMGMNCisjZGVmaW5lICAgQUNDQ09OX1BPRUNTX1MJCTI4DQorI2Rl ZmluZSAgIEFDQ0NPTl9QT0VDU19NQVgJCTB4MGYNCisjZGVmaW5lICAgQUNDQ09OX1BPRUNTX0RF RgkJMw0KKyNkZWZpbmUgICBBQ0NDT05fUFJFQ1NfUwkJMjINCisjZGVmaW5lICAgQUNDQ09OX1BS RUNTX01BWAkJMHgzZg0KKyNkZWZpbmUgICBBQ0NDT05fUFJFQ1NfREVGCQkzDQorI2RlZmluZSAg IEFDQ0NPTl9DMlJfUwkJCTE2DQorI2RlZmluZSAgIEFDQ0NPTl9DMlJfTUFYCQkweDNmDQorI2Rl ZmluZSAgIEFDQ0NPTl9DMlJfREVGCQk3DQorI2RlZmluZSAgIEFDQ0NPTl9XMlJfUwkJCTEyDQor I2RlZmluZSAgIEFDQ0NPTl9XMlJfTUFYCQkweDBmDQorI2RlZmluZSAgIEFDQ0NPTl9XMlJfREVG CQk3DQorI2RlZmluZSAgIEFDQ0NPTl9XSF9TCQkJOA0KKyNkZWZpbmUgICBBQ0NDT05fV0hfTUFY CQkJMHgwZg0KKyNkZWZpbmUgICBBQ0NDT05fV0hfREVGCQkJMTUNCisjZGVmaW5lICAgQUNDQ09O X1dTVF9TCQkJNA0KKyNkZWZpbmUgICBBQ0NDT05fV1NUX01BWAkJMHgwZg0KKyNkZWZpbmUgICBB Q0NDT05fV1NUX0RFRgkJMTUNCisjZGVmaW5lICAgQUNDQ09OX1dTVF9NSU4JCTMNCisjZGVmaW5l ICAgQUNDQ09OX1JMVF9TCQkJMA0KKyNkZWZpbmUgICBBQ0NDT05fUkxUX01BWAkJMHgwZg0KKyNk ZWZpbmUgICBBQ0NDT05fUkxUX0RFRgkJMTUNCisjZGVmaW5lICAgQUNDQ09OX1JMVF9NSU4JCTMN CisNCisjZGVmaW5lIE5GSV9DTUQJCQkJMHgwMjANCisNCisjZGVmaW5lIE5GSV9BRERSTk9CCQkJ MHgwMzANCisjZGVmaW5lICAgQUREUl9ST1dfTk9CX1MJCTQNCisjZGVmaW5lICAgQUREUl9ST1df Tk9CX00JCUdFTk1BU0soNiwgNCkNCisjZGVmaW5lICAgQUREUl9DT0xfTk9CX1MJCTANCisjZGVm aW5lICAgQUREUl9DT0xfTk9CX00JCUdFTk1BU0soMiwgMCkNCisNCisjZGVmaW5lIE5GSV9DT0xB RERSCQkJMHgwMzQNCisjZGVmaW5lIE5GSV9ST1dBRERSCQkJMHgwMzgNCisNCisjZGVmaW5lIE5G SV9TVFJEQVRBCQkJMHgwNDANCisjZGVmaW5lICAgU1RSX0RBVEEJCQlCSVQoMCkNCisNCisjZGVm aW5lIE5GSV9DTlJOQgkJCTB4MDQ0DQorI2RlZmluZSAgIENCMlJfVElNRV9TCQkJNA0KKyNkZWZp bmUgICBDQjJSX1RJTUVfTQkJCUdFTk1BU0soNywgNCkNCisjZGVmaW5lICAgU1RSX0NOUk5CCQkJ QklUKDApDQorDQorI2RlZmluZSBORklfREFUQVcJCQkweDA1MA0KKyNkZWZpbmUgTkZJX0RBVEFS CQkJMHgwNTQNCisNCisjZGVmaW5lIE5GSV9QSU9fRElSRFkJCQkweDA1OA0KKyNkZWZpbmUgICBQ SU9fRElSRFkJCQlCSVQoMCkNCisNCisjZGVmaW5lIE5GSV9TVEEJCQkJMHgwNjANCisjZGVmaW5l ICAgU1RBX05GSV9GU01fUwkJCTE2DQorI2RlZmluZSAgIFNUQV9ORklfRlNNX00JCQlHRU5NQVNL KDE5LCAxNikNCisjZGVmaW5lICAgICBTVEFfRlNNX0NVU1RPTV9EQVRBCQkxNA0KKyNkZWZpbmUg ICBTVEFfQlVTWQkJCUJJVCg4KQ0KKyNkZWZpbmUgICBTVEFfQUREUgkJCUJJVCgxKQ0KKyNkZWZp bmUgICBTVEFfQ01ECQkJQklUKDApDQorDQorI2RlZmluZSBORklfQUREUkNOVFIJCQkweDA3MA0K KyNkZWZpbmUgICBTRUNfQ05UUl9TCQkJMTINCisjZGVmaW5lICAgU0VDX0NOVFJfTQkJCUdFTk1B U0soMTUsIDEyKQ0KKyNkZWZpbmUgICBTRUNfQUREUl9TCQkJMA0KKyNkZWZpbmUgICBTRUNfQURE Ul9NCQkJR0VOTUFTSyg5LCAwKQ0KKw0KKyNkZWZpbmUgTkZJX0NTRUwJCQkweDA5MA0KKyNkZWZp bmUgICBDU0VMX1MJCQkwDQorI2RlZmluZSAgIENTRUxfTQkJCUdFTk1BU0soMSwgMCkNCisNCisj ZGVmaW5lIE5GSV9GRE0wTAkJCTB4MGEwDQorI2RlZmluZSBORklfRkRNTChuKQkJCSgweDBhMCAr ICgobikgPDwgMykpDQorDQorI2RlZmluZSBORklfRkRNME0JCQkweDBhNA0KKyNkZWZpbmUgTkZJ X0ZETU0obikJCQkoMHgwYTQgKyAoKG4pIDw8IDMpKQ0KKw0KKyNkZWZpbmUgTkZJX01BU1RFUl9T VEEJCQkweDIxMA0KKyNkZWZpbmUgICBNQVNfQUREUgkJCUdFTk1BU0soMTEsIDkpDQorI2RlZmlu ZSAgIE1BU19SRAkJCUdFTk1BU0soOCwgNikNCisjZGVmaW5lICAgTUFTX1dSCQkJR0VOTUFTSyg1 LCAzKQ0KKyNkZWZpbmUgICBNQVNfUkRETFkJCQlHRU5NQVNLKDIsIDApDQorDQorLyogRUNDIGVu Z2luZSByZWdpc3RlcnMgKi8NCisjZGVmaW5lIEVDQ19FTkNDT04JCQkweDAwMA0KKyNkZWZpbmUg ICBFTkNfRU4JCQlCSVQoMCkNCisNCisjZGVmaW5lIEVDQ19FTkNDTkZHCQkJMHgwMDQNCisjZGVm aW5lICAgRU5DX0NORkdfTVNHX1MJCTE2DQorI2RlZmluZSAgIEVOQ19DTkZHX01TR19NCQlHRU5N QVNLKDI4LCAxNikNCisjZGVmaW5lICAgRU5DX01PREVfUwkJCTQNCisjZGVmaW5lICAgRU5DX01P REVfTQkJCUdFTk1BU0soNSwgNCkNCisjZGVmaW5lICAgICBFTkNfTU9ERV9ORkkJCTENCisjZGVm aW5lICAgRU5DX1ROVU1fUwkJCTANCisjZGVmaW5lICAgRU5DX1ROVU1fTQkJCUdFTk1BU0soMiwg MCkNCisNCisjZGVmaW5lIEVDQ19FTkNJRExFCQkJMHgwMGMNCisjZGVmaW5lICAgRU5DX0lETEUJ CQlCSVQoMCkNCisNCisjZGVmaW5lIEVDQ19ERUNDT04JCQkweDEwMA0KKyNkZWZpbmUgICBERUNf RU4JCQlCSVQoMCkNCisNCisjZGVmaW5lIEVDQ19ERUNDTkZHCQkJMHgxMDQNCisjZGVmaW5lICAg REVDX0VNUFRZX0VOCQkJQklUKDMxKQ0KKyNkZWZpbmUgICBERUNfQ1NfUwkJCTE2DQorI2RlZmlu ZSAgIERFQ19DU19NCQkJR0VOTUFTSygyOCwgMTYpDQorI2RlZmluZSAgIERFQ19DT05fUwkJCTEy DQorI2RlZmluZSAgIERFQ19DT05fTQkJCUdFTk1BU0soMTMsIDEyKQ0KKyNkZWZpbmUgICAgIERF Q19DT05fRUwJCQkyDQorI2RlZmluZSAgIERFQ19NT0RFX1MJCQk0DQorI2RlZmluZSAgIERFQ19N T0RFX00JCQlHRU5NQVNLKDUsIDQpDQorI2RlZmluZSAgICAgREVDX01PREVfTkZJCQkxDQorI2Rl ZmluZSAgIERFQ19UTlVNX1MJCQkwDQorI2RlZmluZSAgIERFQ19UTlVNX00JCQlHRU5NQVNLKDIs IDApDQorDQorI2RlZmluZSBFQ0NfREVDSURMRQkJCTB4MTBjDQorI2RlZmluZSAgIERFQ19JRExF CQkJQklUKDEpDQorDQorI2RlZmluZSBFQ0NfREVDRU5VTQkJCTB4MTE0DQorI2RlZmluZSAgIEVS Uk5VTV9TCQkJMg0KKyNkZWZpbmUgICBFUlJOVU1fTQkJCUdFTk1BU0soMywgMCkNCisNCisjZGVm aW5lIEVDQ19ERUNET05FCQkJMHgxMTgNCisjZGVmaW5lICAgREVDX0RPTkU3CQkJQklUKDcpDQor I2RlZmluZSAgIERFQ19ET05FNgkJCUJJVCg2KQ0KKyNkZWZpbmUgICBERUNfRE9ORTUJCQlCSVQo NSkNCisjZGVmaW5lICAgREVDX0RPTkU0CQkJQklUKDQpDQorI2RlZmluZSAgIERFQ19ET05FMwkJ CUJJVCgzKQ0KKyNkZWZpbmUgICBERUNfRE9ORTIJCQlCSVQoMikNCisjZGVmaW5lICAgREVDX0RP TkUxCQkJQklUKDEpDQorI2RlZmluZSAgIERFQ19ET05FMAkJCUJJVCgwKQ0KKw0KKyNkZWZpbmUg RUNDX0RFQ0VMKG4pCQkJKDB4MTFjICsgKG4pICogNCkNCisjZGVmaW5lICAgREVDX0VMX09ERF9T CQkJMTYNCisjZGVmaW5lICAgREVDX0VMX0VWRU5fUwkJCTANCisjZGVmaW5lICAgREVDX0VMX00J CQkweDFmZmYNCisjZGVmaW5lICAgREVDX0VMX0JZVEVfUE9TX1MJCTMNCisjZGVmaW5lICAgREVD X0VMX0JJVF9QT1NfTQkJR0VOTUFTSygzLCAwKQ0KKw0KKyNkZWZpbmUgRUNDX0ZETUFERFIJCQkw eDEzYw0KKw0KKy8qIEVOQ0lETEUgYW5kIERFQ0lETEUgKi8NCisjZGVmaW5lICAgRUNDX0lETEUJ CQlCSVQoMCkNCisNCisjZGVmaW5lIEFDQ1RJTUlORyh0cG9lY3MsIHRwcmVjcywgdGMyciwgdHcy ciwgdHdoLCB0d3N0LCB0cmx0KSBcDQorCSgodHBvZWNzKSA8PCBBQ0NDT05fUE9FQ1NfUyB8ICh0 cHJlY3MpIDw8IEFDQ0NPTl9QUkVDU19TIHwgXA0KKwkodGMycikgPDwgQUNDQ09OX0MyUl9TIHwg KHR3MnIpIDw8IEFDQ0NPTl9XMlJfUyB8IFwNCisJKHR3aCkgPDwgQUNDQ09OX1dIX1MgfCAodHdz dCkgPDwgQUNDQ09OX1dTVF9TIHwgKHRybHQpKQ0KKw0KKyNkZWZpbmUgTUFTVEVSX1NUQV9NQVNL CQkJKE1BU19BRERSIHwgTUFTX1JEIHwgTUFTX1dSIHwgXA0KKwkJCQkJIE1BU19SRERMWSkNCisj ZGVmaW5lIE5GSV9SRVNFVF9USU1FT1VUCQkxMDAwMDAwDQorI2RlZmluZSBORklfQ09SRV9USU1F T1VUCQk1MDAwMDANCisjZGVmaW5lIEVDQ19FTkdJTkVfVElNRU9VVAkJNTAwMDAwDQorDQorI2Rl ZmluZSBFQ0NfU0VDVE9SX1NJWkUJCQk1MTINCisjZGVmaW5lIEVDQ19QQVJJVFlfQklUUwkJCTEz DQorDQorI2RlZmluZSBORklfRkRNX1NJWkUJCTgNCisNCisjZGVmaW5lIE1UNzYyMV9ORkNfTkFN RQkJCSJtdDc2MjEtbmFuZCINCisNCitzdHJ1Y3QgbXQ3NjIxX25mYyB7DQorCXN0cnVjdCBuYW5k X2NvbnRyb2xsZXIgY29udHJvbGxlcjsNCisJc3RydWN0IG5hbmRfY2hpcCBuYW5kOw0KKwlzdHJ1 Y3QgY2xrICpuZmlfY2xrOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQorDQorCXZvaWQgX19pb21l bSAqbmZpX3JlZ3M7DQorCXZvaWQgX19pb21lbSAqZWNjX3JlZ3M7DQorDQorCXUzMiBzcGFyZV9w ZXJfc2VjdG9yOw0KK307DQorDQorc3RhdGljIGNvbnN0IHUxNiBtdDc2MjFfbmZpX3BhZ2Vfc2l6 ZVtdID0geyBTWl81MTIsIFNaXzJLLCBTWl80SyB9Ow0KK3N0YXRpYyBjb25zdCB1OCBtdDc2MjFf bmZpX3NwYXJlX3NpemVbXSA9IHsgMTYsIDI2LCAyNywgMjggfTsNCitzdGF0aWMgY29uc3QgdTgg bXQ3NjIxX2VjY19zdHJlbmd0aFtdID0geyA0LCA2LCA4LCAxMCwgMTIgfTsNCisNCitzdGF0aWMg aW5saW5lIHUzMiBuZmlfcmVhZDMyKHN0cnVjdCBtdDc2MjFfbmZjICpuZmMsIHUzMiByZWcpDQor ew0KKwlyZXR1cm4gcmVhZGwobmZjLT5uZmlfcmVncyArIHJlZyk7DQorfQ0KKw0KK3N0YXRpYyBp bmxpbmUgdm9pZCBuZmlfd3JpdGUzMihzdHJ1Y3QgbXQ3NjIxX25mYyAqbmZjLCB1MzIgcmVnLCB1 MzIgdmFsKQ0KK3sNCisJd3JpdGVsKHZhbCwgbmZjLT5uZmlfcmVncyArIHJlZyk7DQorfQ0KKw0K K3N0YXRpYyBpbmxpbmUgdTE2IG5maV9yZWFkMTYoc3RydWN0IG10NzYyMV9uZmMgKm5mYywgdTMy IHJlZykNCit7DQorCXJldHVybiByZWFkdyhuZmMtPm5maV9yZWdzICsgcmVnKTsNCit9DQorDQor c3RhdGljIGlubGluZSB2b2lkIG5maV93cml0ZTE2KHN0cnVjdCBtdDc2MjFfbmZjICpuZmMsIHUz MiByZWcsIHUxNiB2YWwpDQorew0KKwl3cml0ZXcodmFsLCBuZmMtPm5maV9yZWdzICsgcmVnKTsN Cit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIGVjY193cml0ZTE2KHN0cnVjdCBtdDc2MjFfbmZj ICpuZmMsIHUzMiByZWcsIHUxNiB2YWwpDQorew0KKwl3cml0ZXcodmFsLCBuZmMtPmVjY19yZWdz ICsgcmVnKTsNCit9DQorDQorc3RhdGljIGlubGluZSB1MzIgZWNjX3JlYWQzMihzdHJ1Y3QgbXQ3 NjIxX25mYyAqbmZjLCB1MzIgcmVnKQ0KK3sNCisJcmV0dXJuIHJlYWRsKG5mYy0+ZWNjX3JlZ3Mg KyByZWcpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgZWNjX3dyaXRlMzIoc3RydWN0IG10 NzYyMV9uZmMgKm5mYywgdTMyIHJlZywgdTMyIHZhbCkNCit7DQorCXJldHVybiB3cml0ZWwodmFs LCBuZmMtPmVjY19yZWdzICsgcmVnKTsNCit9DQorDQorc3RhdGljIGlubGluZSB1OCAqb29iX2Zk bV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHNlY3QpDQorew0KKwlyZXR1cm4gbmFu ZC0+b29iX3BvaSArIHNlY3QgKiBORklfRkRNX1NJWkU7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUg dTggKm9vYl9lY2NfcHRyKHN0cnVjdCBtdDc2MjFfbmZjICpuZmMsIGludCBzZWN0KQ0KK3sNCisJ c3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9ICZuZmMtPm5hbmQ7DQorDQorCXJldHVybiBuYW5kLT5v b2JfcG9pICsgbmFuZC0+ZWNjLnN0ZXBzICogTkZJX0ZETV9TSVpFICsNCisJCXNlY3QgKiAobmZj LT5zcGFyZV9wZXJfc2VjdG9yIC0gTkZJX0ZETV9TSVpFKTsNCit9DQorDQorc3RhdGljIGlubGlu ZSB1OCAqcGFnZV9kYXRhX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBjb25zdCB1OCAqYnVm LA0KKwkJCQlpbnQgc2VjdCkNCit7DQorCXJldHVybiAodTggKilidWYgKyBzZWN0ICogbmFuZC0+ ZWNjLnNpemU7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3NjIxX2VjY193YWl0X2lkbGUoc3RydWN0 IG10NzYyMV9uZmMgKm5mYywgdTMyIHJlZykNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IG5m Yy0+ZGV2Ow0KKwl1MzIgdmFsOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSByZWFkd19wb2xsX3Rp bWVvdXRfYXRvbWljKG5mYy0+ZWNjX3JlZ3MgKyByZWcsIHZhbCwNCisJCQkJCXZhbCAmIEVDQ19J RExFLCAxMCwNCisJCQkJCUVDQ19FTkdJTkVfVElNRU9VVCk7DQorCWlmIChyZXQpIHsNCisJCWRl dl93YXJuKGRldiwgIkVDQyBlbmdpbmUgdGltZWQgb3V0IGVudGVyaW5nIGlkbGUgbW9kZVxuIik7 DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlu dCBtdDc2MjFfZWNjX2RlY29kZXJfd2FpdF9kb25lKHN0cnVjdCBtdDc2MjFfbmZjICpuZmMsIHUz MiBzZWN0KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gbmZjLT5kZXY7DQorCXUzMiB2YWw7 DQorCWludCByZXQ7DQorDQorCXJldCA9IHJlYWR3X3BvbGxfdGltZW91dF9hdG9taWMobmZjLT5l Y2NfcmVncyArIEVDQ19ERUNET05FLCB2YWwsDQorCQkJCQl2YWwgJiAoMSA8PCBzZWN0KSwgMTAs DQorCQkJCQlFQ0NfRU5HSU5FX1RJTUVPVVQpOw0KKw0KKwlpZiAocmV0KSB7DQorCQlkZXZfd2Fy bihkZXYsICJFQ0MgZGVjb2RlciBmb3Igc2VjdG9yICVkIHRpbWVkIG91dFxuIiwNCisJCQkgc2Vj dCk7DQorCQlyZXR1cm4gLUVUSU1FRE9VVDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor c3RhdGljIHZvaWQgbXQ3NjIxX2VjY19lbmNvZGVyX29wKHN0cnVjdCBtdDc2MjFfbmZjICpuZmMs IGJvb2wgZW5hYmxlKQ0KK3sNCisJbXQ3NjIxX2VjY193YWl0X2lkbGUobmZjLCBFQ0NfRU5DSURM RSk7DQorCWVjY193cml0ZTE2KG5mYywgRUNDX0VOQ0NPTiwgZW5hYmxlID8gRU5DX0VOIDogMCk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10NzYyMV9lY2NfZGVjb2Rlcl9vcChzdHJ1Y3QgbXQ3NjIx X25mYyAqbmZjLCBib29sIGVuYWJsZSkNCit7DQorCW10NzYyMV9lY2Nfd2FpdF9pZGxlKG5mYywg RUNDX0RFQ0lETEUpOw0KKwllY2Nfd3JpdGUxNihuZmMsIEVDQ19ERUNDT04sIGVuYWJsZSA/IERF Q19FTiA6IDApOw0KK30NCisNCitzdGF0aWMgaW50IG10NzYyMV9lY2NfY29ycmVjdF9jaGVjayhz dHJ1Y3QgbXQ3NjIxX25mYyAqbmZjLCB1OCAqc2VjdG9yX2J1ZiwNCisJCQkJICAgdTggKmZkbV9i dWYsIHUzMiBzZWN0KQ0KK3sNCisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9ICZuZmMtPm5hbmQ7 DQorCXUzMiBkZWNudW0sIG51bV9lcnJvcl9iaXRzLCBmZG1fZW5kX2JpdHM7DQorCXUzMiBlcnJv cl9sb2NhdGlvbnMsIGVycm9yX2JpdF9sb2M7DQorCXUzMiBlcnJvcl9ieXRlX3BvcywgZXJyb3Jf Yml0X3BvczsNCisJaW50IGJpdGZsaXBzID0gMDsNCisJdTMyIGk7DQorDQorCWRlY251bSA9IGVj Y19yZWFkMzIobmZjLCBFQ0NfREVDRU5VTSk7DQorCW51bV9lcnJvcl9iaXRzID0gKGRlY251bSA+ PiAoc2VjdCA8PCBFUlJOVU1fUykpICYgRVJSTlVNX007DQorCWZkbV9lbmRfYml0cyA9IChuYW5k LT5lY2Muc2l6ZSArIE5GSV9GRE1fU0laRSkgPDwgMzsNCisNCisJaWYgKCFudW1fZXJyb3JfYml0 cykNCisJCXJldHVybiAwOw0KKw0KKwlpZiAobnVtX2Vycm9yX2JpdHMgPT0gRVJSTlVNX00pDQor CQlyZXR1cm4gLTE7DQorDQorCWZvciAoaSA9IDA7IGkgPCBudW1fZXJyb3JfYml0czsgaSsrKSB7 DQorCQllcnJvcl9sb2NhdGlvbnMgPSBlY2NfcmVhZDMyKG5mYywgRUNDX0RFQ0VMKGkgLyAyKSk7 DQorCQllcnJvcl9iaXRfbG9jID0gKGVycm9yX2xvY2F0aW9ucyA+PiAoKGkgJSAyKSAqIERFQ19F TF9PRERfUykpICYNCisJCQkJREVDX0VMX007DQorCQllcnJvcl9ieXRlX3BvcyA9IGVycm9yX2Jp dF9sb2MgPj4gREVDX0VMX0JZVEVfUE9TX1M7DQorCQllcnJvcl9iaXRfcG9zID0gZXJyb3JfYml0 X2xvYyAmIERFQ19FTF9CSVRfUE9TX007DQorDQorCQlpZiAoZXJyb3JfYml0X2xvYyA8IChuYW5k LT5lY2Muc2l6ZSA8PCAzKSkgew0KKwkJCWlmIChzZWN0b3JfYnVmKSB7DQorCQkJCXNlY3Rvcl9i dWZbZXJyb3JfYnl0ZV9wb3NdIF49DQorCQkJCQkoMSA8PCBlcnJvcl9iaXRfcG9zKTsNCisJCQl9 DQorCQl9IGVsc2UgaWYgKGVycm9yX2JpdF9sb2MgPCBmZG1fZW5kX2JpdHMpIHsNCisJCQlpZiAo ZmRtX2J1Zikgew0KKwkJCQlmZG1fYnVmW2Vycm9yX2J5dGVfcG9zIC0gbmFuZC0+ZWNjLnNpemVd IF49DQorCQkJCQkoMSA8PCBlcnJvcl9iaXRfcG9zKTsNCisJCQl9DQorCQl9DQorDQorCQliaXRm bGlwcysrOw0KKwl9DQorDQorCXJldHVybiBiaXRmbGlwczsNCit9DQorDQorc3RhdGljIGludCBt dDc2MjFfbmZjX3dhaXRfd3JpdGVfY29tcGxldGlvbihzdHJ1Y3QgbXQ3NjIxX25mYyAqbmZjLA0K KwkJCQkJICAgIHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBuZmMtPmRldjsNCisJdTE2IHZhbDsNCisJaW50IHJldDsNCisNCisJcmV0ID0gcmVhZHdf cG9sbF90aW1lb3V0X2F0b21pYyhuZmMtPm5maV9yZWdzICsgTkZJX0FERFJDTlRSLCB2YWwsDQor CQkoKHZhbCAmIFNFQ19DTlRSX00pID4+IFNFQ19DTlRSX1MpID49IG5hbmQtPmVjYy5zdGVwcywg MTAsDQorCQlORklfQ09SRV9USU1FT1VUKTsNCisNCisJaWYgKHJldCkgew0KKwkJZGV2X3dhcm4o ZGV2LCAiTkZJIGNvcmUgd3JpdGUgb3BlcmF0aW9uIHRpbWVkIG91dFxuIik7DQorCQlyZXR1cm4g LUVUSU1FRE9VVDsNCisJfQ0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBt dDc2MjFfbmZjX2h3X3Jlc2V0KHN0cnVjdCBtdDc2MjFfbmZjICpuZmMpDQorew0KKwl1MzIgdmFs Ow0KKwlpbnQgcmV0Ow0KKw0KKwkvKiByZXNldCBhbGwgcmVnaXN0ZXJzIGFuZCBmb3JjZSB0aGUg TkZJIG1hc3RlciB0byB0ZXJtaW5hdGUgKi8NCisJbmZpX3dyaXRlMTYobmZjLCBORklfQ09OLCBD T05fRklGT19GTFVTSCB8IENPTl9ORklfUlNUKTsNCisNCisJLyogd2FpdCBmb3IgdGhlIG1hc3Rl ciB0byBmaW5pc2ggdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisJcmV0ID0gcmVhZHdfcG9sbF90 aW1lb3V0KG5mYy0+bmZpX3JlZ3MgKyBORklfTUFTVEVSX1NUQSwgdmFsLA0KKwkJCQkgISh2YWwg JiBNQVNURVJfU1RBX01BU0spLCA1MCwNCisJCQkJIE5GSV9SRVNFVF9USU1FT1VUKTsNCisJaWYg KHJldCkgew0KKwkJZGV2X3dhcm4obmZjLT5kZXYsICJGYWlsZWQgdG8gcmVzZXQgTkZJIG1hc3Rl ciBpbiAlZG1zXG4iLA0KKwkJCSBORklfUkVTRVRfVElNRU9VVCk7DQorCX0NCisNCisJLyogZW5z dXJlIGFueSBzdGF0dXMgcmVnaXN0ZXIgYWZmZWN0ZWQgYnkgdGhlIE5GSSBtYXN0ZXIgaXMgcmVz ZXQgKi8NCisJbmZpX3dyaXRlMTYobmZjLCBORklfQ09OLCBDT05fRklGT19GTFVTSCB8IENPTl9O RklfUlNUKTsNCisJbmZpX3dyaXRlMTYobmZjLCBORklfU1RSREFUQSwgMCk7DQorfQ0KKw0KK3N0 YXRpYyBpbmxpbmUgdm9pZCBtdDc2MjFfbmZjX2h3X2luaXQoc3RydWN0IG10NzYyMV9uZmMgKm5m YykNCit7DQorCXUzMiBhY2Njb247DQorDQorCS8qDQorCSAqIENOUk5COiBuYW5kIHJlYWR5L2J1 c3kgcmVnaXN0ZXINCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKwkgKiA3 OjQ6IHRpbWVvdXQgcmVnaXN0ZXIgZm9yIHBvbGxpbmcgdGhlIE5BTkQgYnVzeS9yZWFkeSBzaWdu YWwNCisJICogMCAgOiBwb2xsIHRoZSBzdGF0dXMgb2YgdGhlIGJ1c3kvcmVhZHkgc2lnbmFsIGFm dGVyIFs3OjRdKjE2IGN5Y2xlcy4NCisJICovDQorCW5maV93cml0ZTE2KG5mYywgTkZJX0NOUk5C LCBDQjJSX1RJTUVfTSB8IFNUUl9DTlJOQik7DQorDQorCW10NzYyMV9uZmNfaHdfcmVzZXQobmZj KTsNCisNCisJLyogQXBwbHkgZGVmYXVsdCBhY2Nlc3MgdGltaW5nICovDQorCWFjY2NvbiA9IEFD Q1RJTUlORyhBQ0NDT05fUE9FQ1NfREVGLCBBQ0NDT05fUFJFQ1NfREVGLCBBQ0NDT05fQzJSX0RF RiwNCisJCQkgICBBQ0NDT05fVzJSX0RFRiwgQUNDQ09OX1dIX0RFRiwgQUNDQ09OX1dTVF9ERUYs DQorCQkJICAgQUNDQ09OX1JMVF9ERUYpOw0KKw0KKwluZmlfd3JpdGUzMihuZmMsIE5GSV9BQ0ND T04sIGFjY2Nvbik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3NjIxX25mY19zZW5kX2NvbW1hbmQo c3RydWN0IG10NzYyMV9uZmMgKm5mYywgdTggY29tbWFuZCkNCit7DQorCXN0cnVjdCBkZXZpY2Ug KmRldiA9IG5mYy0+ZGV2Ow0KKwl1MzIgdmFsOw0KKwlpbnQgcmV0Ow0KKw0KKwluZmlfd3JpdGUz MihuZmMsIE5GSV9DTUQsIGNvbW1hbmQpOw0KKw0KKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXRf YXRvbWljKG5mYy0+bmZpX3JlZ3MgKyBORklfU1RBLCB2YWwsDQorCQkJCQkhKHZhbCAmIFNUQV9D TUQpLCAxMCwNCisJCQkJCU5GSV9DT1JFX1RJTUVPVVQpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZf d2FybihkZXYsICJORkkgY29yZSB0aW1lZCBvdXQgZW50ZXJpbmcgY29tbWFuZCBtb2RlXG4iKTsN CisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50 IG10NzYyMV9uZmNfc2VuZF9hZGRyZXNzX2J5dGUoc3RydWN0IG10NzYyMV9uZmMgKm5mYywgaW50 IGFkZHIpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZmMtPmRldjsNCisJdTMyIHZhbDsN CisJaW50IHJldDsNCisNCisJbmZpX3dyaXRlMzIobmZjLCBORklfQ09MQUREUiwgYWRkcik7DQor CW5maV93cml0ZTMyKG5mYywgTkZJX1JPV0FERFIsIDApOw0KKwluZmlfd3JpdGUxNihuZmMsIE5G SV9BRERSTk9CLCAxKTsNCisNCisJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0X2F0b21pYyhuZmMt Pm5maV9yZWdzICsgTkZJX1NUQSwgdmFsLA0KKwkJCQkJISh2YWwgJiBTVEFfQUREUiksIDEwLA0K KwkJCQkJTkZJX0NPUkVfVElNRU9VVCk7DQorCWlmIChyZXQpIHsNCisJCWRldl93YXJuKGRldiwg Ik5GSSBjb3JlIHRpbWVkIG91dCBlbnRlcmluZyBhZGRyZXNzIG1vZGVcbiIpOw0KKwkJcmV0dXJu IC1FSU87DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3NjIxX25m Y19zZW5kX2FkZHJlc3Moc3RydWN0IG10NzYyMV9uZmMgKm5mYywgY29uc3QgdTggKmFkZHIsDQor CQkJCSAgIHVuc2lnbmVkIGludCBuYWRkcnMpDQorew0KKwlpbnQgcmV0Ow0KKw0KKwl3aGlsZSAo bmFkZHJzKSB7DQorCQlyZXQgPSBtdDc2MjFfbmZjX3NlbmRfYWRkcmVzc19ieXRlKG5mYywgKmFk ZHIpOw0KKwkJaWYgKHJldCkNCisJCQlyZXR1cm4gcmV0Ow0KKw0KKwkJYWRkcisrOw0KKwkJbmFk ZHJzLS07DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10NzYyMV9u ZmNfd2FpdF9waW9fcmVhZHkoc3RydWN0IG10NzYyMV9uZmMgKm5mYykNCit7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9IG5mYy0+ZGV2Ow0KKwlpbnQgcmV0Ow0KKwl1MTYgdmFsOw0KKw0KKwlyZXQg PSByZWFkd19wb2xsX3RpbWVvdXRfYXRvbWljKG5mYy0+bmZpX3JlZ3MgKyBORklfUElPX0RJUkRZ LCB2YWwsDQorCQkJCQl2YWwgJiBQSU9fRElSRFksIDEwLA0KKwkJCQkJTkZJX0NPUkVfVElNRU9V VCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZGV2X2VycihkZXYsICJORkkgY29yZSBQSU8gbW9kZSBu b3QgcmVhZHlcbiIpOw0KK30NCisNCitzdGF0aWMgdTMyIG10NzYyMV9uZmNfcGlvX3JlYWQoc3Ry dWN0IG10NzYyMV9uZmMgKm5mYywgYm9vbCBicikNCit7DQorCXUzMiByZWc7DQorDQorCS8qIGFm dGVyIGVhY2ggYnl0ZSByZWFkLCB0aGUgTkZJX1NUQSByZWcgaXMgcmVzZXQgYnkgdGhlIGhhcmR3 YXJlICovDQorCXJlZyA9IChuZmlfcmVhZDMyKG5mYywgTkZJX1NUQSkgJiBTVEFfTkZJX0ZTTV9N KSA+PiBTVEFfTkZJX0ZTTV9TOw0KKwlpZiAocmVnICE9IFNUQV9GU01fQ1VTVE9NX0RBVEEpIHsN CisJCXJlZyA9IG5maV9yZWFkMTYobmZjLCBORklfQ05GRyk7DQorCQlyZWcgfD0gQ05GR19SRUFE X01PREUgfCBDTkZHX0JZVEVfUlc7DQorCQlpZiAoIWJyKQ0KKwkJCXJlZyAmPSB+Q05GR19CWVRF X1JXOw0KKwkJbmZpX3dyaXRlMTYobmZjLCBORklfQ05GRywgcmVnKTsNCisNCisJCS8qDQorCQkg KiBzZXQgdG8gbWF4IHNlY3RvciB0byBhbGxvdyB0aGUgSFcgdG8gY29udGludWUgcmVhZGluZyBv dmVyDQorCQkgKiB1bmFsaWduZWQgYWNjZXNzZXMNCisJCSAqLw0KKwkJbmZpX3dyaXRlMTYobmZj LCBORklfQ09OLCBDT05fTkZJX1NFQ19NIHwgQ09OX05GSV9CUkQpOw0KKw0KKwkJLyogdHJpZ2dl ciB0byBmZXRjaCBkYXRhICovDQorCQluZmlfd3JpdGUxNihuZmMsIE5GSV9TVFJEQVRBLCBTVFJf REFUQSk7DQorCX0NCisNCisJbXQ3NjIxX25mY193YWl0X3Bpb19yZWFkeShuZmMpOw0KKw0KKwly ZXR1cm4gbmZpX3JlYWQzMihuZmMsIE5GSV9EQVRBUik7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10 NzYyMV9uZmNfcmVhZF9kYXRhKHN0cnVjdCBtdDc2MjFfbmZjICpuZmMsIHU4ICpidWYsIHUzMiBs ZW4pDQorew0KKwl3aGlsZSAoKCh1aW50cHRyX3QpYnVmICYgMykgJiYgbGVuKSB7DQorCQkqYnVm ID0gbXQ3NjIxX25mY19waW9fcmVhZChuZmMsIHRydWUpOw0KKwkJYnVmKys7DQorCQlsZW4tLTsN CisJfQ0KKw0KKwl3aGlsZSAobGVuID49IDQpIHsNCisJCSoodTMyICopYnVmID0gbXQ3NjIxX25m Y19waW9fcmVhZChuZmMsIGZhbHNlKTsNCisJCWJ1ZiArPSA0Ow0KKwkJbGVuIC09IDQ7DQorCX0N CisNCisJd2hpbGUgKGxlbikgew0KKwkJKmJ1ZiA9IG10NzYyMV9uZmNfcGlvX3JlYWQobmZjLCB0 cnVlKTsNCisJCWJ1ZisrOw0KKwkJbGVuLS07DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgbXQ3 NjIxX25mY19yZWFkX2RhdGFfZGlzY2FyZChzdHJ1Y3QgbXQ3NjIxX25mYyAqbmZjLCB1MzIgbGVu KQ0KK3sNCisJd2hpbGUgKGxlbiA+PSA0KSB7DQorCQltdDc2MjFfbmZjX3Bpb19yZWFkKG5mYywg ZmFsc2UpOw0KKwkJbGVuIC09IDQ7DQorCX0NCisNCisJd2hpbGUgKGxlbikgew0KKwkJbXQ3NjIx X25mY19waW9fcmVhZChuZmMsIHRydWUpOw0KKwkJbGVuLS07DQorCX0NCit9DQorDQorc3RhdGlj IHZvaWQgbXQ3NjIxX25mY19waW9fd3JpdGUoc3RydWN0IG10NzYyMV9uZmMgKm5mYywgdTMyIHZh bCwgYm9vbCBidykNCit7DQorCXUzMiByZWc7DQorDQorCXJlZyA9IChuZmlfcmVhZDMyKG5mYywg TkZJX1NUQSkgJiBTVEFfTkZJX0ZTTV9NKSA+PiBTVEFfTkZJX0ZTTV9TOw0KKwlpZiAocmVnICE9 IFNUQV9GU01fQ1VTVE9NX0RBVEEpIHsNCisJCXJlZyA9IG5maV9yZWFkMTYobmZjLCBORklfQ05G Ryk7DQorCQlyZWcgJj0gfihDTkZHX1JFQURfTU9ERSB8IENORkdfQllURV9SVyk7DQorCQlpZiAo YncpDQorCQkJcmVnIHw9IENORkdfQllURV9SVzsNCisJCW5maV93cml0ZTE2KG5mYywgTkZJX0NO RkcsIHJlZyk7DQorDQorCQluZmlfd3JpdGUxNihuZmMsIE5GSV9DT04sIENPTl9ORklfU0VDX00g fCBDT05fTkZJX0JXUik7DQorCQluZmlfd3JpdGUxNihuZmMsIE5GSV9TVFJEQVRBLCBTVFJfREFU QSk7DQorCX0NCisNCisJbXQ3NjIxX25mY193YWl0X3Bpb19yZWFkeShuZmMpOw0KKwluZmlfd3Jp dGUzMihuZmMsIE5GSV9EQVRBVywgdmFsKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXQ3NjIxX25m Y193cml0ZV9kYXRhKHN0cnVjdCBtdDc2MjFfbmZjICpuZmMsIGNvbnN0IHU4ICpidWYsDQorCQkJ CSAgdTMyIGxlbikNCit7DQorCXdoaWxlICgoKHVpbnRwdHJfdClidWYgJiAzKSAmJiBsZW4pIHsN CisJCW10NzYyMV9uZmNfcGlvX3dyaXRlKG5mYywgKmJ1ZiwgdHJ1ZSk7DQorCQlidWYrKzsNCisJ CWxlbi0tOw0KKwl9DQorDQorCXdoaWxlIChsZW4gPj0gNCkgew0KKwkJbXQ3NjIxX25mY19waW9f d3JpdGUobmZjLCAqKGNvbnN0IHUzMiAqKWJ1ZiwgZmFsc2UpOw0KKwkJYnVmICs9IDQ7DQorCQls ZW4gLT0gNDsNCisJfQ0KKw0KKwl3aGlsZSAobGVuKSB7DQorCQltdDc2MjFfbmZjX3Bpb193cml0 ZShuZmMsICpidWYsIHRydWUpOw0KKwkJYnVmKys7DQorCQlsZW4tLTsNCisJfQ0KK30NCisNCitz dGF0aWMgdm9pZCBtdDc2MjFfbmZjX3dyaXRlX2RhdGFfZW1wdHkoc3RydWN0IG10NzYyMV9uZmMg Km5mYywgdTMyIGxlbikNCit7DQorCXdoaWxlIChsZW4gPj0gNCkgew0KKwkJbXQ3NjIxX25mY19w aW9fd3JpdGUobmZjLCAweGZmZmZmZmZmLCBmYWxzZSk7DQorCQlsZW4gLT0gNDsNCisJfQ0KKw0K Kwl3aGlsZSAobGVuKSB7DQorCQltdDc2MjFfbmZjX3Bpb193cml0ZShuZmMsIDB4ZmYsIHRydWUp Ow0KKwkJbGVuLS07DQorCX0NCit9DQorDQorc3RhdGljIGludCBtdDc2MjFfbmZjX2Rldl9yZWFk eShzdHJ1Y3QgbXQ3NjIxX25mYyAqbmZjLA0KKwkJCQl1bnNpZ25lZCBpbnQgdGltZW91dF9tcykN Cit7DQorCXUzMiB2YWw7DQorDQorCXJldHVybiByZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKG5m Yy0+bmZpX3JlZ3MgKyBORklfU1RBLCB2YWwsDQorCQkJCQkgISh2YWwgJiBTVEFfQlVTWSksIDEw LA0KKwkJCQkJIHRpbWVvdXRfbXMgKiAxMDAwKTsNCit9DQorDQorc3RhdGljIGludCBtdDc2MjFf bmZjX2V4ZWNfaW5zdHIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwNCisJCQkJIGNvbnN0IHN0cnVj dCBuYW5kX29wX2luc3RyICppbnN0cikNCit7DQorCXN0cnVjdCBtdDc2MjFfbmZjICpuZmMgPSBu YW5kX2dldF9jb250cm9sbGVyX2RhdGEobmFuZCk7DQorDQorCXN3aXRjaCAoaW5zdHItPnR5cGUp IHsNCisJY2FzZSBOQU5EX09QX0NNRF9JTlNUUjoNCisJCW10NzYyMV9uZmNfaHdfcmVzZXQobmZj KTsNCisJCW5maV93cml0ZTE2KG5mYywgTkZJX0NORkcsIENORkdfT1BfQ1VTVE9NIDw8IENORkdf T1BfTU9ERV9TKTsNCisJCXJldHVybiBtdDc2MjFfbmZjX3NlbmRfY29tbWFuZChuZmMsIGluc3Ry LT5jdHguY21kLm9wY29kZSk7DQorCWNhc2UgTkFORF9PUF9BRERSX0lOU1RSOg0KKwkJcmV0dXJu IG10NzYyMV9uZmNfc2VuZF9hZGRyZXNzKG5mYywgaW5zdHItPmN0eC5hZGRyLmFkZHJzLA0KKwkJ CQkJICAgICAgIGluc3RyLT5jdHguYWRkci5uYWRkcnMpOw0KKwljYXNlIE5BTkRfT1BfREFUQV9J Tl9JTlNUUjoNCisJCW10NzYyMV9uZmNfcmVhZF9kYXRhKG5mYywgaW5zdHItPmN0eC5kYXRhLmJ1 Zi5pbiwNCisJCQkJICAgICBpbnN0ci0+Y3R4LmRhdGEubGVuKTsNCisJCXJldHVybiAwOw0KKwlj YXNlIE5BTkRfT1BfREFUQV9PVVRfSU5TVFI6DQorCQltdDc2MjFfbmZjX3dyaXRlX2RhdGEobmZj LCBpbnN0ci0+Y3R4LmRhdGEuYnVmLm91dCwNCisJCQkJICAgICAgaW5zdHItPmN0eC5kYXRhLmxl bik7DQorCQlyZXR1cm4gMDsNCisJY2FzZSBOQU5EX09QX1dBSVRSRFlfSU5TVFI6DQorCQlyZXR1 cm4gbXQ3NjIxX25mY19kZXZfcmVhZHkobmZjLA0KKwkJCQkJICAgIGluc3RyLT5jdHgud2FpdHJk eS50aW1lb3V0X21zKTsNCisJZGVmYXVsdDoNCisJCVdBUk5fT05DRSgxLCAidW5zdXBwb3J0ZWQg TkFORCBpbnN0cnVjdGlvbiB0eXBlOiAlZFxuIiwNCisJCQkgIGluc3RyLT50eXBlKTsNCisNCisJ CXJldHVybiAtRUlOVkFMOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3NjIxX25mY19leGVj X29wKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsDQorCQkJICAgICAgY29uc3Qgc3RydWN0IG5hbmRf b3BlcmF0aW9uICpvcCwgYm9vbCBjaGVja19vbmx5KQ0KK3sNCisJc3RydWN0IG10NzYyMV9uZmMg Km5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShuYW5kKTsNCisJaW50IGksIHJldDsNCisN CisJaWYgKGNoZWNrX29ubHkpDQorCQlyZXR1cm4gMDsNCisNCisJLyogT25seSBDUzAgYXZhaWxh YmxlICovDQorCW5maV93cml0ZTE2KG5mYywgTkZJX0NTRUwsIDApOw0KKw0KKwlmb3IgKGkgPSAw OyBpIDwgb3AtPm5pbnN0cnM7IGkrKykgew0KKwkJcmV0ID0gbXQ3NjIxX25mY19leGVjX2luc3Ry KG5hbmQsICZvcC0+aW5zdHJzW2ldKTsNCisJCWlmIChyZXQpDQorCQkJcmV0dXJuIHJldDsNCisJ fQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdDc2MjFfbmZjX3NldHVwX2Rh dGFfaW50ZXJmYWNlKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIGludCBjc2xpbmUsDQorCQkJCQkg ICBjb25zdCBzdHJ1Y3QgbmFuZF9kYXRhX2ludGVyZmFjZSAqY29uZikNCit7DQorCXN0cnVjdCBt dDc2MjFfbmZjICpuZmMgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEobmFuZCk7DQorCWNvbnN0 IHN0cnVjdCBuYW5kX3Nkcl90aW1pbmdzICp0aW1pbmdzOw0KKwl1MzIgYWNjY29uLCB0ZW1wLCBy YXRlLCB0cG9lY3MsIHRwcmVjcywgdGMyciwgdHcyciwgdHdoLCB0d3N0LCB0cmx0Ow0KKw0KKwlp ZiAoIW5mYy0+bmZpX2NsaykNCisJCXJldHVybiAtRU5PVFNVUFA7DQorDQorCXRpbWluZ3MgPSBu YW5kX2dldF9zZHJfdGltaW5ncyhjb25mKTsNCisJaWYgKElTX0VSUih0aW1pbmdzKSkNCisJCXJl dHVybiAtRU5PVFNVUFA7DQorDQorCXJhdGUgPSBjbGtfZ2V0X3JhdGUobmZjLT5uZmlfY2xrKTsN CisNCisJLyogdHVybiBjbG9jayByYXRlIGludG8gS0haICovDQorCXJhdGUgLz0gMTAwMDsNCisN CisJdHBvZWNzID0gbWF4KHRpbWluZ3MtPnRBTEhfbWluLCB0aW1pbmdzLT50Q0xIX21pbikgLyAx MDAwOw0KKwl0cG9lY3MgPSBESVZfUk9VTkRfVVAodHBvZWNzICogcmF0ZSwgMTAwMDAwMCk7DQor CXRwb2VjcyA9IG1pbl90KHUzMiwgdHBvZWNzLCBBQ0NDT05fUE9FQ1NfTUFYKTsNCisNCisJdHBy ZWNzID0gbWF4KHRpbWluZ3MtPnRDTFNfbWluLCB0aW1pbmdzLT50QUxTX21pbikgLyAxMDAwOw0K Kwl0cHJlY3MgPSBESVZfUk9VTkRfVVAodHByZWNzICogcmF0ZSwgMTAwMDAwMCk7DQorCXRwcmVj cyA9IG1pbl90KHUzMiwgdHByZWNzLCBBQ0NDT05fUFJFQ1NfTUFYKTsNCisNCisJLyogc2RyIGlu dGVyZmFjZSBoYXMgbm8gdENSIHdoaWNoIG1lYW5zIENFIyBsb3cgdG8gUkUjIGxvdyAqLw0KKwl0 YzJyID0gMDsNCisNCisJdHcyciA9IHRpbWluZ3MtPnRXSFJfbWluIC8gMTAwMDsNCisJdHcyciA9 IERJVl9ST1VORF9VUCh0dzJyICogcmF0ZSwgMTAwMDAwMCk7DQorCXR3MnIgPSBESVZfUk9VTkRf VVAodHcyciAtIDEsIDIpOw0KKwl0dzJyID0gbWluX3QodTMyLCB0dzJyLCBBQ0NDT05fVzJSX01B WCk7DQorDQorCXR3aCA9IG1heCh0aW1pbmdzLT50UkVIX21pbiwgdGltaW5ncy0+dFdIX21pbikg LyAxMDAwOw0KKwl0d2ggPSBESVZfUk9VTkRfVVAodHdoICogcmF0ZSwgMTAwMDAwMCkgLSAxOw0K Kwl0d2ggPSBtaW5fdCh1MzIsIHR3aCwgQUNDQ09OX1dIX01BWCk7DQorDQorCS8qIENhbGN1bGF0 ZSByZWFsIFdFIy9SRSMgaG9sZCB0aW1lIGluIG5hbm9zZWNvbmQgKi8NCisJdGVtcCA9ICh0d2gg KyAxKSAqIDEwMDAwMDAgLyByYXRlOw0KKwkvKiBuYW5vc2Vjb25kIHRvIHBpY29zZWNvbmQgKi8N CisJdGVtcCAqPSAxMDAwOw0KKw0KKwkvKg0KKwkgKiBXRSMgbG93IGxldmVsIHRpbWUgc2hvdWxk IGJlIGV4cGFuZWQgdG8gbWVldCBXRSMgcHVsc2UgdGltZQ0KKwkgKiBhbmQgV0UjIGN5Y2xlIHRp bWUgYXQgdGhlIHNhbWUgdGltZS4NCisJICovDQorCWlmICh0ZW1wIDwgdGltaW5ncy0+dFdDX21p bikNCisJCXR3c3QgPSB0aW1pbmdzLT50V0NfbWluIC0gdGVtcDsNCisJZWxzZQ0KKwkJdHdzdCA9 IDA7DQorCXR3c3QgPSBtYXgodGltaW5ncy0+dFdQX21pbiwgdHdzdCkgLyAxMDAwOw0KKwl0d3N0 ID0gRElWX1JPVU5EX1VQKHR3c3QgKiByYXRlLCAxMDAwMDAwKSAtIDE7DQorCXR3c3QgPSBtaW5f dCh1MzIsIHR3c3QsIEFDQ0NPTl9XU1RfTUFYKTsNCisNCisJLyoNCisJICogUkUjIGxvdyBsZXZl bCB0aW1lIHNob3VsZCBiZSBleHBhbmVkIHRvIG1lZXQgUkUjIHB1bHNlIHRpbWUNCisJICogYW5k IFJFIyBjeWNsZSB0aW1lIGF0IHRoZSBzYW1lIHRpbWUuDQorCSAqLw0KKwlpZiAodGVtcCA8IHRp bWluZ3MtPnRSQ19taW4pDQorCQl0cmx0ID0gdGltaW5ncy0+dFJDX21pbiAtIHRlbXA7DQorCWVs c2UNCisJCXRybHQgPSAwOw0KKwl0cmx0ID0gbWF4KHRybHQsIHRpbWluZ3MtPnRSUF9taW4pIC8g MTAwMDsNCisJdHJsdCA9IERJVl9ST1VORF9VUCh0cmx0ICogcmF0ZSwgMTAwMDAwMCkgLSAxOw0K Kwl0cmx0ID0gbWluX3QodTMyLCB0cmx0LCBBQ0NDT05fUkxUX01BWCk7DQorDQorCWlmIChjc2xp bmUgPT0gTkFORF9EQVRBX0lGQUNFX0NIRUNLX09OTFkpIHsNCisJCWlmICh0d3N0IDwgQUNDQ09O X1dTVF9NSU4gfHwgdHJsdCA8IEFDQ0NPTl9STFRfTUlOKQ0KKwkJCXJldHVybiAtRU5PVFNVUFA7 DQorCX0NCisNCisJYWNjY29uID0gQUNDVElNSU5HKHRwb2VjcywgdHByZWNzLCB0YzJyLCB0dzJy LCB0d2gsIHR3c3QsIHRybHQpOw0KKw0KKwlkZXZfaW5mbyhuZmMtPmRldiwgIlVzaW5nIHByb2dy YW1tZWQgYWNjZXNzIHRpbWluZzogJTA4eFxuIiwgYWNjY29uKTsNCisNCisJbmZpX3dyaXRlMzIo bmZjLCBORklfQUNDQ09OLCBhY2Njb24pOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGludCBtdDc2MjFfbmZjX2NhbGNfZWNjX3N0cmVuZ3RoKHN0cnVjdCBtdDc2MjFfbmZjICpuZmMs DQorCQkJCQl1MzIgYXZhaWxfZWNjX2J5dGVzKQ0KK3sNCisJc3RydWN0IG5hbmRfY2hpcCAqbmFu ZCA9ICZuZmMtPm5hbmQ7DQorCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFu ZCk7DQorCXUzMiBzdHJlbmd0aDsNCisJaW50IGk7DQorDQorCXN0cmVuZ3RoID0gYXZhaWxfZWNj X2J5dGVzICogOCAvIEVDQ19QQVJJVFlfQklUUzsNCisNCisJLyogRmluZCB0aGUgY2xvc2VzdCBz dXBwb3J0ZWQgZWNjIHN0cmVuZ3RoICovDQorCWZvciAoaSA9IEFSUkFZX1NJWkUobXQ3NjIxX2Vj Y19zdHJlbmd0aCkgLSAxOyBpID49IDA7IGktLSkgew0KKwkJaWYgKG10NzYyMV9lY2Nfc3RyZW5n dGhbaV0gPD0gc3RyZW5ndGgpDQorCQkJYnJlYWs7DQorCX0NCisNCisJaWYgKHVubGlrZWx5KGkg PCAwKSkgew0KKwkJZGV2X2VycihuZmMtPmRldiwgIk9PQiBzaXplICgldSkgaXMgbm90IHN1cHBv cnRlZFxuIiwNCisJCQltdGQtPm9vYnNpemUpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisN CisJbmFuZC0+ZWNjLnN0cmVuZ3RoID0gbXQ3NjIxX2VjY19zdHJlbmd0aFtpXTsNCisJbmFuZC0+ ZWNjLmJ5dGVzID0NCisJCURJVl9ST1VORF9VUChuYW5kLT5lY2Muc3RyZW5ndGggKiBFQ0NfUEFS SVRZX0JJVFMsIDgpOw0KKw0KKwlkZXZfaW5mbyhuZmMtPmRldiwgIkVDQyBzdHJlbmd0aCBhZGp1 c3RlZCB0byAldSBiaXRzXG4iLA0KKwkJIG5hbmQtPmVjYy5zdHJlbmd0aCk7DQorDQorCXJldHVy biBpOw0KK30NCisNCitzdGF0aWMgaW50IG10NzYyMV9uZmNfc2V0X3NwYXJlX3Blcl9zZWN0b3Io c3RydWN0IG10NzYyMV9uZmMgKm5mYykNCit7DQorCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmQgPSAm bmZjLT5uYW5kOw0KKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOw0K Kwl1MzIgc2l6ZTsNCisJaW50IGk7DQorDQorCXNpemUgPSBuYW5kLT5lY2MuYnl0ZXMgKyBORklf RkRNX1NJWkU7DQorDQorCS8qIEZpbmQgdGhlIGNsb3Nlc3Qgc3VwcG9ydGVkIHNwYXJlIHNpemUg Ki8NCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXQ3NjIxX25maV9zcGFyZV9zaXplKTsg aSsrKSB7DQorCQlpZiAobXQ3NjIxX25maV9zcGFyZV9zaXplW2ldID49IHNpemUpDQorCQkJYnJl YWs7DQorCX0NCisNCisJaWYgKHVubGlrZWx5KGkgPj0gQVJSQVlfU0laRShtdDc2MjFfbmZpX3Nw YXJlX3NpemUpKSkgew0KKwkJZGV2X2VycihuZmMtPmRldiwgIk9PQiBzaXplICgldSkgaXMgbm90 IHN1cHBvcnRlZFxuIiwNCisJCQltdGQtPm9vYnNpemUpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQor CX0NCisNCisJbmZjLT5zcGFyZV9wZXJfc2VjdG9yID0gbXQ3NjIxX25maV9zcGFyZV9zaXplW2ld Ow0KKw0KKwlyZXR1cm4gaTsNCit9DQorDQorc3RhdGljIGludCBtdDc2MjFfbmZjX2VjY19pbml0 KHN0cnVjdCBtdDc2MjFfbmZjICpuZmMpDQorew0KKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kID0g Jm5mYy0+bmFuZDsNCisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChuYW5kKTsN CisJdTMyIHNwYXJlX3Blcl9zZWN0b3IsIGVuY29kZV9ibG9ja19zaXplLCBkZWNvZGVfYmxvY2tf c2l6ZTsNCisJdTMyIGVjY19lbmNjZmcsIGVjY19kZWNjZmc7DQorCWludCBlY2NfY2FwOw0KKw0K KwkvKiBPbmx5IGhhcmR3YXJlIEVDQyBtb2RlIGlzIHN1cHBvcnRlZCAqLw0KKwlpZiAobmFuZC0+ ZWNjLm1vZGUgIT0gTkFORF9FQ0NfSFdfU1lORFJPTUUpIHsNCisJCWRldl9lcnIobmZjLT5kZXYs ICJPbmx5IGhhcmR3YXJlIEVDQyBtb2RlIGlzIHN1cHBvcnRlZFxuIik7DQorCQlyZXR1cm4gLUVJ TlZBTDsNCisJfQ0KKw0KKwluYW5kLT5lY2Muc2l6ZSA9IEVDQ19TRUNUT1JfU0laRTsNCisJbmFu ZC0+ZWNjLnN0ZXBzID0gbXRkLT53cml0ZXNpemUgLyBuYW5kLT5lY2Muc2l6ZTsNCisNCisJc3Bh cmVfcGVyX3NlY3RvciA9IG10ZC0+b29ic2l6ZSAvIG5hbmQtPmVjYy5zdGVwczsNCisNCisJZWNj X2NhcCA9IG10NzYyMV9uZmNfY2FsY19lY2Nfc3RyZW5ndGgobmZjLA0KKwkJc3BhcmVfcGVyX3Nl Y3RvciAtIE5GSV9GRE1fU0laRSk7DQorCWlmIChlY2NfY2FwIDwgMCkNCisJCXJldHVybiBlY2Nf Y2FwOw0KKw0KKwkvKiBTZWN0b3IgKyBGRE0gKi8NCisJZW5jb2RlX2Jsb2NrX3NpemUgPSAobmFu ZC0+ZWNjLnNpemUgKyBORklfRkRNX1NJWkUpICogODsNCisJZWNjX2VuY2NmZyA9IGVjY19jYXAg fCAoRU5DX01PREVfTkZJIDw8IEVOQ19NT0RFX1MpIHwNCisJCSAgICAgKGVuY29kZV9ibG9ja19z aXplIDw8IEVOQ19DTkZHX01TR19TKTsNCisNCisJLyogU2VjdG9yICsgRkRNICsgRUNDIHBhcml0 eSBiaXRzICovDQorCWRlY29kZV9ibG9ja19zaXplID0gKChuYW5kLT5lY2Muc2l6ZSArIE5GSV9G RE1fU0laRSkgKiA4KSArDQorCQkJICAgIG5hbmQtPmVjYy5zdHJlbmd0aCAqIEVDQ19QQVJJVFlf QklUUzsNCisJZWNjX2RlY2NmZyA9IGVjY19jYXAgfCAoREVDX01PREVfTkZJIDw8IERFQ19NT0RF X1MpIHwNCisJCSAgICAgKGRlY29kZV9ibG9ja19zaXplIDw8IERFQ19DU19TKSB8DQorCQkgICAg IChERUNfQ09OX0VMIDw8IERFQ19DT05fUykgfCBERUNfRU1QVFlfRU47DQorDQorCW10NzYyMV9l Y2NfZW5jb2Rlcl9vcChuZmMsIGZhbHNlKTsNCisJZWNjX3dyaXRlMzIobmZjLCBFQ0NfRU5DQ05G RywgZWNjX2VuY2NmZyk7DQorDQorCW10NzYyMV9lY2NfZGVjb2Rlcl9vcChuZmMsIGZhbHNlKTsN CisJZWNjX3dyaXRlMzIobmZjLCBFQ0NfREVDQ05GRywgZWNjX2RlY2NmZyk7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IG10NzYyMV9uZmNfc2V0X3BhZ2VfZm9ybWF0KHN0cnVj dCBtdDc2MjFfbmZjICpuZmMpDQorew0KKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kID0gJm5mYy0+ bmFuZDsNCisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChuYW5kKTsNCisJaW50 IGksIHNwYXJlX3NpemU7DQorCXUzMiBwYWdlZm10Ow0KKw0KKwlzcGFyZV9zaXplID0gbXQ3NjIx X25mY19zZXRfc3BhcmVfcGVyX3NlY3RvcihuZmMpOw0KKwlpZiAoc3BhcmVfc2l6ZSA8IDApDQor CQlyZXR1cm4gc3BhcmVfc2l6ZTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXQ3 NjIxX25maV9wYWdlX3NpemUpOyBpKyspIHsNCisJCWlmIChtdDc2MjFfbmZpX3BhZ2Vfc2l6ZVtp XSA9PSBtdGQtPndyaXRlc2l6ZSkNCisJCQlicmVhazsNCisJfQ0KKw0KKwlpZiAodW5saWtlbHko aSA+PSBBUlJBWV9TSVpFKG10NzYyMV9uZmlfcGFnZV9zaXplKSkpIHsNCisJCWRldl9lcnIobmZj LT5kZXYsICJQYWdlIHNpemUgKCV1KSBpcyBub3Qgc3VwcG9ydGVkXG4iLA0KKwkJCW10ZC0+d3Jp dGVzaXplKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXBhZ2VmbXQgPSBpIHwgKHNw YXJlX3NpemUgPDwgUEFHRUZNVF9TUEFSRV9TKSB8DQorCQkgIChORklfRkRNX1NJWkUgPDwgUEFH RUZNVF9GRE1fUykgfA0KKwkJICAoTkZJX0ZETV9TSVpFIDw8IFBBR0VGTVRfRkRNX0VDQ19TKTsN CisNCisJbmZpX3dyaXRlMTYobmZjLCBORklfUEFHRUZNVCwgcGFnZWZtdCk7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IG10NzYyMV9uZmNfYXR0YWNoX2NoaXAoc3RydWN0IG5h bmRfY2hpcCAqbmFuZCkNCit7DQorCXN0cnVjdCBtdDc2MjFfbmZjICpuZmMgPSBuYW5kX2dldF9j b250cm9sbGVyX2RhdGEobmFuZCk7DQorCWludCByZXQ7DQorDQorCWlmIChuYW5kLT5vcHRpb25z ICYgTkFORF9CVVNXSURUSF8xNikgew0KKwkJZGV2X2VycihuZmMtPmRldiwgIjE2LWJpdCBidXN3 aWR0aCBpcyBub3Qgc3VwcG9ydGVkIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwly ZXQgPSBtdDc2MjFfbmZjX2VjY19pbml0KG5mYyk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0 Ow0KKw0KKwlyZXR1cm4gbXQ3NjIxX25mY19zZXRfcGFnZV9mb3JtYXQobmZjKTsNCit9DQorDQor c3RhdGljIGNvbnN0IHN0cnVjdCBuYW5kX2NvbnRyb2xsZXJfb3BzIG10NzYyMV9uZmNfY29udHJv bGxlcl9vcHMgPSB7DQorCS5hdHRhY2hfY2hpcCA9IG10NzYyMV9uZmNfYXR0YWNoX2NoaXAsDQor CS5leGVjX29wID0gbXQ3NjIxX25mY19leGVjX29wLA0KKwkuc2V0dXBfZGF0YV9pbnRlcmZhY2Ug PSBtdDc2MjFfbmZjX3NldHVwX2RhdGFfaW50ZXJmYWNlLA0KK307DQorDQorc3RhdGljIGludCBt dDc2MjFfbmZjX29vYmxheW91dF9mcmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlv biwNCisJCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYl9yZWdpb24pDQorew0KKwlz dHJ1Y3QgbmFuZF9jaGlwICpuYW5kID0gbXRkX3RvX25hbmQobXRkKTsNCisNCisJaWYgKHNlY3Rp b24gPj0gbmFuZC0+ZWNjLnN0ZXBzKQ0KKwkJcmV0dXJuIC1FUkFOR0U7DQorDQorCW9vYl9yZWdp b24tPmxlbmd0aCA9IE5GSV9GRE1fU0laRSAtIDE7DQorCW9vYl9yZWdpb24tPm9mZnNldCA9IHNl Y3Rpb24gKiBORklfRkRNX1NJWkUgKyAxOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGludCBtdDc2MjFfbmZjX29vYmxheW91dF9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBz ZWN0aW9uLA0KKwkJCQkgICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JfcmVnaW9uKQ0KK3sN CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZF90b19uYW5kKG10ZCk7DQorDQorCWlmIChz ZWN0aW9uKQ0KKwkJcmV0dXJuIC1FUkFOR0U7DQorDQorCW9vYl9yZWdpb24tPm9mZnNldCA9IE5G SV9GRE1fU0laRSAqIG5hbmQtPmVjYy5zdGVwczsNCisJb29iX3JlZ2lvbi0+bGVuZ3RoID0gbXRk LT5vb2JzaXplIC0gb29iX3JlZ2lvbi0+b2Zmc2V0Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfb29ibGF5b3V0X29wcyBtdDc2MjFfbmZjX29vYmxheW91 dF9vcHMgPSB7DQorCS5mcmVlID0gbXQ3NjIxX25mY19vb2JsYXlvdXRfZnJlZSwNCisJLmVjYyA9 IG10NzYyMV9uZmNfb29ibGF5b3V0X2VjYywNCit9Ow0KKw0KK3N0YXRpYyB2b2lkIG10NzYyMV9u ZmNfd3JpdGVfZmRtKHN0cnVjdCBtdDc2MjFfbmZjICpuZmMpDQorew0KKwlzdHJ1Y3QgbmFuZF9j aGlwICpuYW5kID0gJm5mYy0+bmFuZDsNCisJdTMyIHZhbGwsIHZhbG07DQorCXU4ICpvb2JwdHI7 DQorCWludCBpLCBqOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKysp IHsNCisJCXZhbGwgPSAwOw0KKwkJdmFsbSA9IDA7DQorCQlvb2JwdHIgPSBvb2JfZmRtX3B0cihu YW5kLCBpKTsNCisNCisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspDQorCQkJdmFsbCB8PSAodTMy KW9vYnB0cltqXSA8PCAoaiAqIDgpOw0KKw0KKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykNCisJ CQl2YWxtIHw9ICh1MzIpb29icHRyW2ogKyA0XSA8PCAoKGogLSA0KSAqIDgpOw0KKw0KKwkJbmZp X3dyaXRlMzIobmZjLCBORklfRkRNTChpKSwgdmFsbCk7DQorCQluZmlfd3JpdGUzMihuZmMsIE5G SV9GRE1NKGkpLCB2YWxtKTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBtdDc2MjFfbmZjX3Jl YWRfc2VjdG9yX2ZkbShzdHJ1Y3QgbXQ3NjIxX25mYyAqbmZjLCB1MzIgc2VjdCkNCit7DQorCXN0 cnVjdCBuYW5kX2NoaXAgKm5hbmQgPSAmbmZjLT5uYW5kOw0KKwl1MzIgdmFsbCwgdmFsbTsNCisJ dTggKm9vYnB0cjsNCisJaW50IGk7DQorDQorCXZhbGwgPSBuZmlfcmVhZDMyKG5mYywgTkZJX0ZE TUwoc2VjdCkpOw0KKwl2YWxtID0gbmZpX3JlYWQzMihuZmMsIE5GSV9GRE1NKHNlY3QpKTsNCisJ b29icHRyID0gb29iX2ZkbV9wdHIobmFuZCwgc2VjdCk7DQorDQorCWZvciAoaSA9IDA7IGkgPCA0 OyBpKyspDQorCQlvb2JwdHJbaV0gPSAodmFsbCA+PiAoaSAqIDgpKSAmIDB4ZmY7DQorDQorCWZv ciAoaSA9IDA7IGkgPCA0OyBpKyspDQorCQlvb2JwdHJbaSArIDRdID0gKHZhbG0gPj4gKGkgKiA4 KSkgJiAweGZmOw0KK30NCisNCitzdGF0aWMgaW50IG10NzYyMV9uZmNfcmVhZF9wYWdlX2h3ZWNj KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHVpbnQ4X3QgKmJ1ZiwNCisJCQkJICAgICAgaW50IG9v Yl9yZXF1aXJlZCwgaW50IHBhZ2UpDQorew0KKwlzdHJ1Y3QgbXQ3NjIxX25mYyAqbmZjID0gbmFu ZF9nZXRfY29udHJvbGxlcl9kYXRhKG5hbmQpOw0KKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5h bmRfdG9fbXRkKG5hbmQpOw0KKwlpbnQgYml0ZmxpcHMgPSAwOw0KKwlpbnQgcmMsIGk7DQorDQor CW5hbmRfcmVhZF9wYWdlX29wKG5hbmQsIHBhZ2UsIDAsIE5VTEwsIDApOw0KKw0KKwluZmlfd3Jp dGUxNihuZmMsIE5GSV9DTkZHLCAoQ05GR19PUF9DVVNUT00gPDwgQ05GR19PUF9NT0RFX1MpIHwN CisJCSAgICBDTkZHX1JFQURfTU9ERSB8IENORkdfQVVUT19GTVRfRU4gfCBDTkZHX0hXX0VDQ19F Tik7DQorDQorCW10NzYyMV9lY2NfZGVjb2Rlcl9vcChuZmMsIHRydWUpOw0KKw0KKwluZmlfd3Jp dGUxNihuZmMsIE5GSV9DT04sDQorCQkgICAgQ09OX05GSV9CUkQgfCAobmFuZC0+ZWNjLnN0ZXBz IDw8IENPTl9ORklfU0VDX1MpKTsNCisNCisJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVw czsgaSsrKSB7DQorCQlpZiAoYnVmKQ0KKwkJCW10NzYyMV9uZmNfcmVhZF9kYXRhKG5mYywgcGFn ZV9kYXRhX3B0cihuYW5kLCBidWYsIGkpLA0KKwkJCQkJICAgICBuYW5kLT5lY2Muc2l6ZSk7DQor CQllbHNlDQorCQkJbXQ3NjIxX25mY19yZWFkX2RhdGFfZGlzY2FyZChuZmMsIG5hbmQtPmVjYy5z aXplKTsNCisNCisJCXJjID0gbXQ3NjIxX2VjY19kZWNvZGVyX3dhaXRfZG9uZShuZmMsIGkpOw0K Kw0KKwkJbXQ3NjIxX25mY19yZWFkX3NlY3Rvcl9mZG0obmZjLCBpKTsNCisNCisJCWlmIChyYyA8 IDApIHsNCisJCQliaXRmbGlwcyA9IC1FSU87DQorCQkJY29udGludWU7DQorCQl9DQorDQorCQly YyA9IG10NzYyMV9lY2NfY29ycmVjdF9jaGVjayhuZmMsDQorCQkJYnVmID8gcGFnZV9kYXRhX3B0 cihuYW5kLCBidWYsIGkpIDogTlVMTCwNCisJCQlvb2JfZmRtX3B0cihuYW5kLCBpKSwgaSk7DQor DQorCQlpZiAocmMgPCAwKSB7DQorCQkJZGV2X3dhcm4obmZjLT5kZXYsDQorCQkJCSAiVW5jb3Jy ZWN0YWJsZSBFQ0MgZXJyb3IgYXQgcGFnZSAlZC4lZFxuIiwNCisJCQkJIHBhZ2UsIGkpOw0KKwkJ CWJpdGZsaXBzID0gLUVCQURNU0c7DQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7DQorCQl9 IGVsc2UgaWYgKGJpdGZsaXBzID49IDApIHsNCisJCQliaXRmbGlwcyArPSByYzsNCisJCQltdGQt PmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gcmM7DQorCQl9DQorCX0NCisNCisJbXQ3NjIxX2VjY19k ZWNvZGVyX29wKG5mYywgZmFsc2UpOw0KKw0KKwluZmlfd3JpdGUxNihuZmMsIE5GSV9DT04sIDAp Ow0KKw0KKwlyZXR1cm4gYml0ZmxpcHM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3NjIxX25mY19y ZWFkX3BhZ2VfcmF3KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHVpbnQ4X3QgKmJ1ZiwNCisJCQkJ ICAgIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKQ0KK3sNCisJc3RydWN0IG10NzYyMV9uZmMg Km5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShuYW5kKTsNCisJaW50IGk7DQorDQorCW5h bmRfcmVhZF9wYWdlX29wKG5hbmQsIHBhZ2UsIDAsIE5VTEwsIDApOw0KKw0KKwluZmlfd3JpdGUx NihuZmMsIE5GSV9DTkZHLCAoQ05GR19PUF9DVVNUT00gPDwgQ05GR19PUF9NT0RFX1MpIHwNCisJ CSAgICBDTkZHX1JFQURfTU9ERSk7DQorDQorCW5maV93cml0ZTE2KG5mYywgTkZJX0NPTiwNCisJ CSAgICBDT05fTkZJX0JSRCB8IChuYW5kLT5lY2Muc3RlcHMgPDwgQ09OX05GSV9TRUNfUykpOw0K Kw0KKwlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyspIHsNCisJCS8qIFJlYWQg ZGF0YSAqLw0KKwkJaWYgKGJ1ZikNCisJCQltdDc2MjFfbmZjX3JlYWRfZGF0YShuZmMsIHBhZ2Vf ZGF0YV9wdHIobmFuZCwgYnVmLCBpKSwNCisJCQkJCSAgICAgbmFuZC0+ZWNjLnNpemUpOw0KKwkJ ZWxzZQ0KKwkJCW10NzYyMV9uZmNfcmVhZF9kYXRhX2Rpc2NhcmQobmZjLCBuYW5kLT5lY2Muc2l6 ZSk7DQorDQorCQkvKiBSZWFkIEZETSAqLw0KKwkJbXQ3NjIxX25mY19yZWFkX2RhdGEobmZjLCBv b2JfZmRtX3B0cihuYW5kLCBpKSwgTkZJX0ZETV9TSVpFKTsNCisNCisJCS8qIFJlYWQgRUNDIHBh cml0eSBkYXRhICovDQorCQltdDc2MjFfbmZjX3JlYWRfZGF0YShuZmMsIG9vYl9lY2NfcHRyKG5m YywgaSksDQorCQkJCSAgICAgbmZjLT5zcGFyZV9wZXJfc2VjdG9yIC0gTkZJX0ZETV9TSVpFKTsN CisJfQ0KKw0KKwluZmlfd3JpdGUxNihuZmMsIE5GSV9DT04sIDApOw0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIGludCBtdDc2MjFfbmZjX3JlYWRfb29iX2h3ZWNjKHN0cnVjdCBuYW5k X2NoaXAgKm5hbmQsIGludCBwYWdlKQ0KK3sNCisJcmV0dXJuIG10NzYyMV9uZmNfcmVhZF9wYWdl X2h3ZWNjKG5hbmQsIE5VTEwsIDEsIHBhZ2UpOw0KK30NCisNCitzdGF0aWMgaW50IG10NzYyMV9u ZmNfcmVhZF9vb2JfcmF3KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIGludCBwYWdlKQ0KK3sNCisJ cmV0dXJuIG10NzYyMV9uZmNfcmVhZF9wYWdlX3JhdyhuYW5kLCBOVUxMLCAxLCBwYWdlKTsNCit9 DQorDQorc3RhdGljIGludCBtdDc2MjFfbmZjX2NoZWNrX2VtcHR5X3BhZ2Uoc3RydWN0IG5hbmRf Y2hpcCAqbmFuZCwgY29uc3QgdTggKmJ1ZikNCit7DQorCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0g bmFuZF90b19tdGQobmFuZCk7DQorCXVpbnQzMl90IGksIGo7DQorCXU4ICpvb2JwdHI7DQorDQor CWZvciAoaSA9IDA7IGkgPCBtdGQtPndyaXRlc2l6ZTsgaSsrKQ0KKwkJaWYgKGJ1ZltpXSAhPSAw eGZmKQ0KKwkJCXJldHVybiAwOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBz OyBpKyspIHsNCisJCW9vYnB0ciA9IG9vYl9mZG1fcHRyKG5hbmQsIGkpOw0KKwkJZm9yIChqID0g MDsgaiA8IE5GSV9GRE1fU0laRTsgaisrKQ0KKwkJCWlmIChvb2JwdHJbal0gIT0gMHhmZikNCisJ CQkJcmV0dXJuIDA7DQorCX0NCisNCisJcmV0dXJuIDE7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3 NjIxX25mY193cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsDQorCQkJCSAg ICAgICBjb25zdCB1aW50OF90ICpidWYsIGludCBvb2JfcmVxdWlyZWQsDQorCQkJCSAgICAgICBp bnQgcGFnZSkNCit7DQorCXN0cnVjdCBtdDc2MjFfbmZjICpuZmMgPSBuYW5kX2dldF9jb250cm9s bGVyX2RhdGEobmFuZCk7DQorCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFu ZCk7DQorDQorCWlmIChtdDc2MjFfbmZjX2NoZWNrX2VtcHR5X3BhZ2UobmFuZCwgYnVmKSkgew0K KwkJLyoNCisJCSAqIE1UNzYyMSBFQ0MgZW5naW5lIGFsd2F5cyBnZW5lcmF0ZXMgcGFyaXR5IGNv ZGUgZm9yIGlucHV0DQorCQkgKiBwYWdlcywgZXZlbiBmb3IgZW1wdHkgcGFnZXMuIERvaW5nIHNv IHdpbGwgd3JpdGUgYmFjayBFQ0MNCisJCSAqIHBhcml0eSBjb2RlIHRvIHRoZSBvb2IgcmVnaW9u LCB3aGljaCBtZWFucyBzdWNoIHBhZ2VzIHdpbGwNCisJCSAqIG5vIGxvbmdlciBiZSBlbXB0eSBw YWdlcy4NCisJCSAqDQorCQkgKiBUbyBhdm9pZCB0aGlzLCBzdG9wIHdyaXRlIG9wZXJhdGlvbiBp ZiBjdXJyZW50IHBhZ2UgaXMgYW4NCisJCSAqIGVtcHR5IHBhZ2UuDQorCQkgKi8NCisJCXJldHVy biAwOw0KKwl9DQorDQorCW5hbmRfcHJvZ19wYWdlX2JlZ2luX29wKG5hbmQsIHBhZ2UsIDAsIE5V TEwsIDApOw0KKw0KKwluZmlfd3JpdGUxNihuZmMsIE5GSV9DTkZHLCAoQ05GR19PUF9DVVNUT00g PDwgQ05GR19PUF9NT0RFX1MpIHwNCisJCSAgIENORkdfQVVUT19GTVRfRU4gfCBDTkZHX0hXX0VD Q19FTik7DQorDQorCW10NzYyMV9lY2NfZW5jb2Rlcl9vcChuZmMsIHRydWUpOw0KKw0KKwltdDc2 MjFfbmZjX3dyaXRlX2ZkbShuZmMpOw0KKw0KKwluZmlfd3JpdGUxNihuZmMsIE5GSV9DT04sDQor CQkgICAgQ09OX05GSV9CV1IgfCAobmFuZC0+ZWNjLnN0ZXBzIDw8IENPTl9ORklfU0VDX1MpKTsN CisNCisJaWYgKGJ1ZikNCisJCW10NzYyMV9uZmNfd3JpdGVfZGF0YShuZmMsIGJ1ZiwgbXRkLT53 cml0ZXNpemUpOw0KKwllbHNlDQorCQltdDc2MjFfbmZjX3dyaXRlX2RhdGFfZW1wdHkobmZjLCBt dGQtPndyaXRlc2l6ZSk7DQorDQorCW10NzYyMV9uZmNfd2FpdF93cml0ZV9jb21wbGV0aW9uKG5m YywgbmFuZCk7DQorDQorCW10NzYyMV9lY2NfZW5jb2Rlcl9vcChuZmMsIGZhbHNlKTsNCisNCisJ bmZpX3dyaXRlMTYobmZjLCBORklfQ09OLCAwKTsNCisNCisJcmV0dXJuIG5hbmRfcHJvZ19wYWdl X2VuZF9vcChuYW5kKTsNCit9DQorDQorc3RhdGljIGludCBtdDc2MjFfbmZjX3dyaXRlX3BhZ2Vf cmF3KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsDQorCQkJCSAgICAgY29uc3QgdWludDhfdCAqYnVm LCBpbnQgb29iX3JlcXVpcmVkLA0KKwkJCQkgICAgIGludCBwYWdlKQ0KK3sNCisJc3RydWN0IG10 NzYyMV9uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShuYW5kKTsNCisJaW50IGk7 DQorDQorCW5hbmRfcHJvZ19wYWdlX2JlZ2luX29wKG5hbmQsIHBhZ2UsIDAsIE5VTEwsIDApOw0K Kw0KKwluZmlfd3JpdGUxNihuZmMsIE5GSV9DTkZHLCAoQ05GR19PUF9DVVNUT00gPDwgQ05GR19P UF9NT0RFX1MpKTsNCisNCisJbmZpX3dyaXRlMTYobmZjLCBORklfQ09OLA0KKwkJICAgIENPTl9O RklfQldSIHwgKG5hbmQtPmVjYy5zdGVwcyA8PCBDT05fTkZJX1NFQ19TKSk7DQorDQorCWZvciAo aSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgew0KKwkJLyogV3JpdGUgZGF0YSAqLw0K KwkJaWYgKGJ1ZikNCisJCQltdDc2MjFfbmZjX3dyaXRlX2RhdGEobmZjLCBwYWdlX2RhdGFfcHRy KG5hbmQsIGJ1ZiwgaSksDQorCQkJCQkgICAgICBuYW5kLT5lY2Muc2l6ZSk7DQorCQllbHNlDQor CQkJbXQ3NjIxX25mY193cml0ZV9kYXRhX2VtcHR5KG5mYywgbmFuZC0+ZWNjLnNpemUpOw0KKw0K KwkJLyogV3JpdGUgRkRNICovDQorCQltdDc2MjFfbmZjX3dyaXRlX2RhdGEobmZjLCBvb2JfZmRt X3B0cihuYW5kLCBpKSwNCisJCQkJICAgICAgTkZJX0ZETV9TSVpFKTsNCisNCisJCS8qIFdyaXRl IGR1bW15IEVDQyBwYXJpdHkgZGF0YSAqLw0KKwkJbXQ3NjIxX25mY193cml0ZV9kYXRhX2VtcHR5 KG5mYywgbmZjLT5zcGFyZV9wZXJfc2VjdG9yIC0NCisJCQkJCSAgICBORklfRkRNX1NJWkUpOw0K Kwl9DQorDQorCW10NzYyMV9uZmNfd2FpdF93cml0ZV9jb21wbGV0aW9uKG5mYywgbmFuZCk7DQor DQorCW5maV93cml0ZTE2KG5mYywgTkZJX0NPTiwgMCk7DQorDQorCXJldHVybiBuYW5kX3Byb2df cGFnZV9lbmRfb3AobmFuZCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3NjIxX25mY193cml0ZV9v b2JfaHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpDQorew0KKwlyZXR1cm4g bXQ3NjIxX25mY193cml0ZV9wYWdlX2h3ZWNjKG5hbmQsIE5VTEwsIDEsIHBhZ2UpOw0KK30NCisN CitzdGF0aWMgaW50IG10NzYyMV9uZmNfd3JpdGVfb29iX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpu YW5kLCBpbnQgcGFnZSkNCit7DQorCXJldHVybiBtdDc2MjFfbmZjX3dyaXRlX3BhZ2VfcmF3KG5h bmQsIE5VTEwsIDEsIHBhZ2UpOw0KK30NCisNCitzdGF0aWMgaW50IG10NzYyMV9uZmNfaW5pdF9j aGlwKHN0cnVjdCBtdDc2MjFfbmZjICpuZmMpDQorew0KKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5k ID0gJm5mYy0+bmFuZDsNCisJc3RydWN0IG10ZF9pbmZvICptdGQ7DQorCWludCByZXQ7DQorDQor CW5hbmQtPmNvbnRyb2xsZXIgPSAmbmZjLT5jb250cm9sbGVyOw0KKwluYW5kX3NldF9jb250cm9s bGVyX2RhdGEobmFuZCwgKHZvaWQgKiluZmMpOw0KKwluYW5kX3NldF9mbGFzaF9ub2RlKG5hbmQs IG5mYy0+ZGV2LT5vZl9ub2RlKTsNCisNCisJbmFuZC0+b3B0aW9ucyB8PSBOQU5EX1VTRV9CT1VO Q0VfQlVGRkVSIHwgTkFORF9OT19TVUJQQUdFX1dSSVRFOw0KKwlpZiAoIW5mYy0+bmZpX2NsaykN CisJCW5hbmQtPm9wdGlvbnMgfD0gTkFORF9LRUVQX1RJTUlOR1M7DQorDQorCW5hbmQtPmVjYy5t b2RlID0gTkFORF9FQ0NfSFdfU1lORFJPTUU7DQorCW5hbmQtPmVjYy5yZWFkX3BhZ2UgPSBtdDc2 MjFfbmZjX3JlYWRfcGFnZV9od2VjYzsNCisJbmFuZC0+ZWNjLnJlYWRfcGFnZV9yYXcgPSBtdDc2 MjFfbmZjX3JlYWRfcGFnZV9yYXc7DQorCW5hbmQtPmVjYy53cml0ZV9wYWdlID0gbXQ3NjIxX25m Y193cml0ZV9wYWdlX2h3ZWNjOw0KKwluYW5kLT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBtdDc2MjFf bmZjX3dyaXRlX3BhZ2VfcmF3Ow0KKwluYW5kLT5lY2MucmVhZF9vb2IgPSBtdDc2MjFfbmZjX3Jl YWRfb29iX2h3ZWNjOw0KKwluYW5kLT5lY2MucmVhZF9vb2JfcmF3ID0gbXQ3NjIxX25mY19yZWFk X29vYl9yYXc7DQorCW5hbmQtPmVjYy53cml0ZV9vb2IgPSBtdDc2MjFfbmZjX3dyaXRlX29vYl9o d2VjYzsNCisJbmFuZC0+ZWNjLndyaXRlX29vYl9yYXcgPSBtdDc2MjFfbmZjX3dyaXRlX29vYl9y YXc7DQorDQorCW10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOw0KKwltdGQtPm93bmVyID0gVEhJU19N T0RVTEU7DQorCW10ZC0+ZGV2LnBhcmVudCA9IG5mYy0+ZGV2Ow0KKwltdGQtPm5hbWUgPSBNVDc2 MjFfTkZDX05BTUU7DQorCW10ZF9zZXRfb29ibGF5b3V0KG10ZCwgJm10NzYyMV9uZmNfb29ibGF5 b3V0X29wcyk7DQorDQorCW10NzYyMV9uZmNfaHdfaW5pdChuZmMpOw0KKw0KKwlyZXQgPSBuYW5k X3NjYW4obmFuZCwgMSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBt dGRfZGV2aWNlX3JlZ2lzdGVyKG10ZCwgTlVMTCwgMCk7DQorCWlmIChyZXQpIHsNCisJCWRldl9l cnIobmZjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTVREOiAlZFxuIiwgcmV0KTsNCisJCW5h bmRfcmVsZWFzZShuYW5kKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbnQgbXQ3NjIxX25mY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCisJc3RydWN0 IG10NzYyMV9uZmMgKm5mYzsNCisJc3RydWN0IHJlc291cmNlICpyZXM7DQorCWludCByZXQ7DQor DQorCW5mYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbmZjKSwgR0ZQX0tFUk5FTCk7DQor CWlmICghbmZjKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCW5hbmRfY29udHJvbGxlcl9pbml0 KCZuZmMtPmNvbnRyb2xsZXIpOw0KKwluZmMtPmNvbnRyb2xsZXIub3BzID0gJm10NzYyMV9uZmNf Y29udHJvbGxlcl9vcHM7DQorCW5mYy0+ZGV2ID0gZGV2Ow0KKw0KKwlyZXMgPSBwbGF0Zm9ybV9n ZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAibmZpIik7DQorCW5mYy0+ bmZpX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOw0KKwlpZiAoSVNfRVJS KG5mYy0+bmZpX3JlZ3MpKSB7DQorCQlyZXQgPSBQVFJfRVJSKG5mYy0+bmZpX3JlZ3MpOw0KKwkJ cmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1l KHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZWNjIik7DQorCW5mYy0+ZWNjX3JlZ3MgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOw0KKwlpZiAoSVNfRVJSKG5mYy0+ZWNjX3JlZ3MpKSB7 DQorCQlyZXQgPSBQVFJfRVJSKG5mYy0+ZWNjX3JlZ3MpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0K Kw0KKwluZmMtPm5maV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAibmZpX2NsayIpOw0KKwlpZiAo SVNfRVJSKG5mYy0+bmZpX2NsaykpIHsNCisJCWRldl93YXJuKGRldiwgIm5maSBjbGsgbm90IHBy b3ZpZGVkXG4iKTsNCisJCW5mYy0+bmZpX2NsayA9IE5VTEw7DQorCX0gZWxzZSB7DQorCQlyZXQg PSBjbGtfcHJlcGFyZV9lbmFibGUobmZjLT5uZmlfY2xrKTsNCisJCWlmIChyZXQpIHsNCisJCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgbmZpIGNvcmUgY2xvY2tcbiIpOw0KKwkJCXJl dHVybiByZXQ7DQorCQl9DQorCX0NCisNCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmZj KTsNCisNCisJcmV0ID0gbXQ3NjIxX25mY19pbml0X2NoaXAobmZjKTsNCisJaWYgKHJldCkgew0K KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBuYW5kIGNoaXBcbiIpOw0KKwkJ Z290byBjbGtfZGlzYWJsZTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCisNCitjbGtfZGlzYWJsZToN CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG5mYy0+bmZpX2Nsayk7DQorDQorCXJldHVybiByZXQ7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3NjIxX25mY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikNCit7DQorCXN0cnVjdCBtdDc2MjFfbmZjICpuZmMgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsNCisNCisJbmFuZF9yZWxlYXNlKCZuZmMtPm5hbmQpOw0KKwljbGtfZGlz YWJsZV91bnByZXBhcmUobmZjLT5uZmlfY2xrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NzYyMV9uZmNfaWRfdGFibGVbXSA9IHsN CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjEtbmZjIiB9LA0KKwl7IH0sDQorfTsN CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtYXRjaCk7DQorDQorc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgbXQ3NjIxX25mY19kcml2ZXIgPSB7DQorCS5wcm9iZSA9IG10NzYyMV9uZmNf cHJvYmUsDQorCS5yZW1vdmUgPSBtdDc2MjFfbmZjX3JlbW92ZSwNCisJLmRyaXZlciA9IHsNCisJ CS5uYW1lID0gTVQ3NjIxX05GQ19OQU1FLA0KKwkJLm93bmVyID0gVEhJU19NT0RVTEUsDQorCQku b2ZfbWF0Y2hfdGFibGUgPSBtdDc2MjFfbmZjX2lkX3RhYmxlLA0KKwl9LA0KK307DQorbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihtdDc2MjFfbmZjX2RyaXZlcik7DQorDQorTU9EVUxFX0xJQ0VOU0Uo IkdQTCIpOw0KK01PRFVMRV9BVVRIT1IoIldlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsu Y29tPiIpOw0KK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgTVQ3NjIxIE5BTkQgRmxhc2gg Q29udHJvbGxlciBkcml2ZXIiKTsNCi0tIA0KMi4xNy4xDQo=