From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B678C5DF62 for ; Wed, 6 Nov 2019 07:57:26 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C24FF206A3 for ; Wed, 6 Nov 2019 07:57:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C24FF206A3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:53524 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iSGBw-0005EX-Ti for qemu-devel@archiver.kernel.org; Wed, 06 Nov 2019 02:57:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36639) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iSGBA-0004W4-Du for qemu-devel@nongnu.org; Wed, 06 Nov 2019 02:56:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iSGB6-0001T5-3O for qemu-devel@nongnu.org; Wed, 06 Nov 2019 02:56:35 -0500 Received: from mga11.intel.com ([192.55.52.93]:58440) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iSGB5-0001Mg-MT for qemu-devel@nongnu.org; Wed, 06 Nov 2019 02:56:32 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Nov 2019 23:56:26 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,274,1569308400"; d="scan'208";a="214163223" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga002.jf.intel.com with ESMTP; 05 Nov 2019 23:56:25 -0800 Received: from FMSMSX110.amr.corp.intel.com (10.18.116.10) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 5 Nov 2019 23:56:25 -0800 Received: from shsmsx153.ccr.corp.intel.com (10.239.6.53) by fmsmsx110.amr.corp.intel.com (10.18.116.10) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 5 Nov 2019 23:56:24 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.127]) by SHSMSX153.ccr.corp.intel.com ([169.254.12.215]) with mapi id 14.03.0439.000; Wed, 6 Nov 2019 15:56:22 +0800 From: "Liu, Yi L" To: Peter Xu Subject: RE: [RFC v2 13/22] intel_iommu: add PASID cache management infrastructure Thread-Topic: [RFC v2 13/22] intel_iommu: add PASID cache management infrastructure Thread-Index: AQHVims0e/zt5Spafk+xfIVf42xCf6d6+9OAgALEypA= Date: Wed, 6 Nov 2019 07:56:21 +0000 Message-ID: References: <1571920483-3382-1-git-send-email-yi.l.liu@intel.com> <1571920483-3382-14-git-send-email-yi.l.liu@intel.com> <20191104200647.GA8825@xz-x1> In-Reply-To: <20191104200647.GA8825@xz-x1> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNDlmYzIzYTMtOGQ0My00MTdhLTgwMmQtYzg4YWFlNjVjZTdiIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoidUs4T1dCYmw0ejcxaFwvdHhTYmd2dEN6Z3JFSGhqb3NINTlmaWtwcGFRRkhnUVRFRE1vWlpQUE5acUZIeEVNengifQ== x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.93 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Tian, Kevin" , "jacob.jun.pan@linux.intel.com" , Yi Sun , "kvm@vger.kernel.org" , "mst@redhat.com" , "Tian, Jun J" , "qemu-devel@nongnu.org" , "eric.auger@redhat.com" , "alex.williamson@redhat.com" , "pbonzini@redhat.com" , "Sun, Yi Y" , "david@gibson.dropbear.id.au" Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" PiBGcm9tOiBQZXRlciBYdSBbbWFpbHRvOnBldGVyeEByZWRoYXQuY29tXQ0KPiBTZW50OiBUdWVz ZGF5LCBOb3ZlbWJlciA1LCAyMDE5IDQ6MDcgQU0NCj4gVG86IExpdSwgWWkgTCA8eWkubC5saXVA aW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW1JGQyB2MiAxMy8yMl0gaW50ZWxfaW9tbXU6IGFk ZCBQQVNJRCBjYWNoZSBtYW5hZ2VtZW50DQo+IGluZnJhc3RydWN0dXJlDQo+IA0KPiBPbiBUaHUs IE9jdCAyNCwgMjAxOSBhdCAwODozNDozNEFNIC0wNDAwLCBMaXUgWWkgTCB3cm90ZToNCj4gPiBU aGlzIHBhdGNoIGFkZHMgYSBQQVNJRCBjYWNoZSBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlIGJh c2VkIG9uDQo+ID4gbmV3IGFkZGVkIHN0cnVjdHVyZSBWVERQQVNJREFkZHJlc3NTcGFjZSwgd2hp Y2ggaXMgdXNlZCB0byB0cmFjaw0KPiA+IHRoZSBQQVNJRCB1c2FnZSBhbmQgZnV0dXJlIFBBU0lE IHRhZ2dlZCBETUEgYWRkcmVzcyB0cmFuc2xhdGlvbg0KPiA+IHN1cHBvcnQgaW4gdklPTU1VLg0K PiA+DQo+ID4gICAgIHN0cnVjdCBWVERQQVNJREFkZHJlc3NTcGFjZSB7DQo+ID4gICAgICAgICBW VERCdXMgKnZ0ZF9idXM7DQo+ID4gICAgICAgICB1aW50OF90IGRldmZuOw0KPiA+ICAgICAgICAg QWRkcmVzc1NwYWNlIGFzOw0KPiA+ICAgICAgICAgdWludDMyX3QgcGFzaWQ7DQo+ID4gICAgICAg ICBJbnRlbElPTU1VU3RhdGUgKmlvbW11X3N0YXRlOw0KPiA+ICAgICAgICAgVlREQ29udGV4dENh Y2hlRW50cnkgY29udGV4dF9jYWNoZV9lbnRyeTsNCj4gPiAgICAgICAgIFFMSVNUX0VOVFJZKFZU RFBBU0lEQWRkcmVzc1NwYWNlKSBuZXh0Ow0KPiA+ICAgICAgICAgVlREUEFTSURDYWNoZUVudHJ5 IHBhc2lkX2NhY2hlX2VudHJ5Ow0KPiA+ICAgICB9Ow0KPiA+DQo+ID4gSWRlYWxseSwgYSBWVERQ QVNJREFkZHJlc3NTcGFjZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHdoZW4gYSBQQVNJRA0KPiA+IGlz IGJvdW5kIHdpdGggYSBETUEgQWRkcmVzc1NwYWNlLiBJbnRlbCBWVC1kIHNwZWMgcmVxdWlyZXMg Z3Vlc3QNCj4gPiBzb2Z0d2FyZSB0byBpc3N1ZSBwYXNpZCBjYWNoZSBpbnZhbGlkYXRpb24gd2hl biBiaW5kIG9yIHVuYmluZCBhDQo+ID4gcGFzaWQgd2l0aCBhbiBhZGRyZXNzIHNwYWNlIHVuZGVy IGNhY2hpbmctbW9kZS4gSG93ZXZlciwgYXMNCj4gPiBWVERQQVNJREFkZHJlc3NTcGFjZSBpbnN0 YW5jZXMgYWxzbyBhY3QgYXMgcGFzaWQgY2FjaGUgaW4gdGhpcw0KPiA+IGltcGxlbWVudGF0aW9u LCBpdHMgY3JlYXRpb24gYWxzbyBoYXBwZW5zIGR1cmluZyB2SU9NTVUgUEFTSUQNCj4gPiB0YWdn ZWQgRE1BIHRyYW5zbGF0aW9uLiBUaGUgY3JlYXRpb24gaW4gdGhpcyBwYXRoIHdpbGwgbm90IGJl DQo+ID4gYWRkZWQgaW4gdGhpcyBwYXRjaCBzaW5jZSBubyBQQVNJRC1jYXBhYmxlIGVtdWxhdGVk IGRldmljZXMgZm9yDQo+ID4gbm93Lg0KPiA+DQo+ID4gVGhlIGltcGxlbWVudGF0aW9uIGluIHRo aXMgcGF0Y2ggbWFuYWdlcyBWVERQQVNJREFkZHJlc3NTcGFjZQ0KPiA+IGluc3RhbmNlcyBwZXIg UEFTSUQrQkRGIChsb29rdXAgYW5kIGluc2VydCB3aWxsIHVzZSBQQVNJRCBhbmQNCj4gPiBCREYp IHNpbmNlIEludGVsIFZULWQgc3BlYyBhbGxvd3MgcGVyLUJERiBQQVNJRCBUYWJsZS4gV2hlbiBh DQo+ID4gZ3Vlc3QgYmluZCBhIFBBU0lEIHdpdGggYW4gQWRkcmVzc1NwYWNlLCBRRU1VIHdpbGwg Y2FwdHVyZSB0aGUNCj4gPiBndWVzdCBwYXNpZCBzZWxlY3RpdmUgcGFzaWQgY2FjaGUgaW52YWxp ZGF0aW9uLCBhbmQgYWxsb2NhdGUNCj4gPiByZW1vdmUgYSBWVERQQVNJREFkZHJlc3NTcGFjZSBp bnN0YW5jZSBwZXIgdGhlIGludmFsaWRhdGlvbg0KPiA+IHJlYXNvbnM6DQo+ID4NCj4gPiAgICAg KikgYSBwcmVzZW50IHBhc2lkIGVudHJ5IG1vdmVkIHRvIG5vbi1wcmVzZW50DQo+ID4gICAgICop IGEgcHJlc2VudCBwYXNpZCBlbnRyeSB0byBiZSBhIHByZXNlbnQgZW50cnkNCj4gPiAgICAgKikg YSBub24tcHJlc2VudCBwYXNpZCBlbnRyeSBtb3ZlZCB0byBwcmVzZW50DQo+ID4NCj4gPiB2SU9N TVUgZW11bGF0b3IgY291bGQgZmlndXJlIG91dCB0aGUgcmVhc29uIGJ5IGZldGNoaW5nIGxhdGVz dA0KPiA+IGd1ZXN0IHBhc2lkIGVudHJ5Lg0KPiA+DQo+ID4gQ2M6IEtldmluIFRpYW4gPGtldmlu LnRpYW5AaW50ZWwuY29tPg0KPiA+IENjOiBKYWNvYiBQYW4gPGphY29iLmp1bi5wYW5AbGludXgu aW50ZWwuY29tPg0KPiA+IENjOiBQZXRlciBYdSA8cGV0ZXJ4QHJlZGhhdC5jb20+DQo+ID4gQ2M6 IFlpIFN1biA8eWkueS5zdW5AbGludXguaW50ZWwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IExp dSBZaSBMIDx5aS5sLmxpdUBpbnRlbC5jb20+DQo+IA0KPiBPayBmZWVsIGZyZWUgdG8gaWdub3Jl IG15IHByZXZpb3VzIHJlcGx5Li4uIEkgZGlkbid0IG5vdGljZSBpdCdzDQo+IGFjdHVhbGx5IHRo ZSBwYXNpZCBlbnRyeSBjYWNoZSBsYXllciByYXRoZXIgdGhhbiB0aGUgd2hvbGUgcGFzaWQNCj4g bGF5ZXIgKGluY2x1ZGluZyBwaW90bGIpLiAgQ29tbWVudHMgYmVsb3cuDQoNCnllcC4gSXQgaXMg aW4gYW5vdGhlciBwYXRjaCBhbmQgdGhpcyBwYXRjaCBzZXQgd29uJ3QgaW1wbGVtZW50IHBpb3Rs Yg0KY2FjaGUgaW5mcmFzdHJ1Y3R1cmUgYXMgbm8gZW11bGF0ZWQgc3ZhLWNhcGFibGUgZGV2aWNl IHNvIGZhci4NCg0KPiA+IC0tLQ0KPiA+ICBody9pMzg2L2ludGVsX2lvbW11LmMgICAgICAgICAg fCAzNTYNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAg aHcvaTM4Ni9pbnRlbF9pb21tdV9pbnRlcm5hbC5oIHwgIDEwICsrDQo+ID4gIGh3L2kzODYvdHJh Y2UtZXZlbnRzICAgICAgICAgICB8ICAgMSArDQo+ID4gIGluY2x1ZGUvaHcvaTM4Ni9pbnRlbF9p b21tdS5oICB8ICAzNiArKysrLQ0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDQwMiBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvaHcvaTM4Ni9pbnRlbF9p b21tdS5jIGIvaHcvaTM4Ni9pbnRlbF9pb21tdS5jDQo+ID4gaW5kZXggOTBiOGY2Yy4uZDg4Mjdj OSAxMDA2NDQNCj4gPiAtLS0gYS9ody9pMzg2L2ludGVsX2lvbW11LmMNCj4gPiArKysgYi9ody9p Mzg2L2ludGVsX2lvbW11LmMNCj4gPiBAQCAtNDAsNiArNDAsNyBAQA0KPiA+ICAjaW5jbHVkZSAi a3ZtX2kzODYuaCINCj4gPiAgI2luY2x1ZGUgIm1pZ3JhdGlvbi92bXN0YXRlLmgiDQo+ID4gICNp bmNsdWRlICJ0cmFjZS5oIg0KPiA+ICsjaW5jbHVkZSAicWVtdS9qaGFzaC5oIg0KPiA+DQo+ID4g IC8qIGNvbnRleHQgZW50cnkgb3BlcmF0aW9ucyAqLw0KPiA+ICAjZGVmaW5lIFZURF9DRV9HRVRf UklEMlBBU0lEKGNlKSBcDQo+ID4gQEAgLTY1LDYgKzY2LDggQEANCj4gPiAgc3RhdGljIHZvaWQg dnRkX2FkZHJlc3Nfc3BhY2VfcmVmcmVzaF9hbGwoSW50ZWxJT01NVVN0YXRlICpzKTsNCj4gPiAg c3RhdGljIHZvaWQgdnRkX2FkZHJlc3Nfc3BhY2VfdW5tYXAoVlREQWRkcmVzc1NwYWNlICphcywg SU9NTVVOb3RpZmllciAqbik7DQo+ID4NCj4gPiArc3RhdGljIHZvaWQgdnRkX3Bhc2lkX2NhY2hl X3Jlc2V0KEludGVsSU9NTVVTdGF0ZSAqcyk7DQo+ID4gKw0KPiA+ICBzdGF0aWMgdm9pZCB2dGRf cGFuaWNfcmVxdWlyZV9jYWNoaW5nX21vZGUodm9pZCkNCj4gPiAgew0KPiA+ICAgICAgZXJyb3Jf cmVwb3J0KCJXZSBuZWVkIHRvIHNldCBjYWNoaW5nLW1vZGU9b24gZm9yIGludGVsLWlvbW11IHRv IGVuYWJsZSAiDQo+ID4gQEAgLTI3Niw2ICsyNzksNyBAQCBzdGF0aWMgdm9pZCB2dGRfcmVzZXRf Y2FjaGVzKEludGVsSU9NTVVTdGF0ZSAqcykNCj4gPiAgICAgIHZ0ZF9pb21tdV9sb2NrKHMpOw0K PiA+ICAgICAgdnRkX3Jlc2V0X2lvdGxiX2xvY2tlZChzKTsNCj4gPiAgICAgIHZ0ZF9yZXNldF9j b250ZXh0X2NhY2hlX2xvY2tlZChzKTsNCj4gPiArICAgIHZ0ZF9wYXNpZF9jYWNoZV9yZXNldChz KTsNCj4gPiAgICAgIHZ0ZF9pb21tdV91bmxvY2socyk7DQo+ID4gIH0NCj4gPg0KPiA+IEBAIC02 ODYsNiArNjkwLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2dGRfcGVfdHlwZV9jaGVjayhYODZJ T01NVVN0YXRlDQo+ICp4ODZfaW9tbXUsDQo+ID4gICAgICByZXR1cm4gdHJ1ZTsNCj4gPiAgfQ0K PiA+DQo+ID4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgdnRkX3BlX2dldF9kb21haW5faWQoVlRE UEFTSURFbnRyeSAqcGUpDQo+ID4gK3sNCj4gPiArICAgIHJldHVybiBWVERfU01fUEFTSURfRU5U UllfRElEKChwZSktPnZhbFsxXSk7DQo+ID4gK30NCj4gPiArDQo+ID4gIHN0YXRpYyBpbmxpbmUg Ym9vbCB2dGRfcGRpcmVfcHJlc2VudChWVERQQVNJRERpckVudHJ5ICpwZGlyZSkNCj4gPiAgew0K PiA+ICAgICAgcmV0dXJuIHBkaXJlLT52YWwgJiAxOw0KPiA+IEBAIC0yMzg5LDE5ICsyMzk4LDM2 MSBAQCBzdGF0aWMgYm9vbA0KPiB2dGRfcHJvY2Vzc19pb3RsYl9kZXNjKEludGVsSU9NTVVTdGF0 ZSAqcywgVlRESW52RGVzYyAqaW52X2Rlc2MpDQo+ID4gICAgICByZXR1cm4gdHJ1ZTsNCj4gPiAg fQ0KPiA+DQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhc2lkX2tleSAqdnRkX2dldF9wYXNp ZF9rZXkodWludDMyX3QgcGFzaWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2lkKQ0KPiA+ICt7DQo+ID4gKyAgICBzdHJ1 Y3QgcGFzaWRfa2V5ICprZXkgPSBnX21hbGxvYzAoc2l6ZW9mKCprZXkpKTsNCj4gDQo+IEkgdGhp bmsgeW91IGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBwYXNpZF9rZXkgZGlyZWN0bHkgbWF5YmUgb3Ro ZXJ3aXNlDQo+IHNob3VsZCBiZSBjYXJlZnVsIG9uIG1lbSBsZWFrLiAgQWN0dWFsbHkgSSB0aGlu ayBpdCdzIGxlYWtlZCBiZWxvdy4uLg0KDQpzdXJlLCBJIGNhbiBkbyBpdC4gRm9yIHRoZSBsZWFr LCBpdCBpcyBhIGtub3duIGlzc3VlIGFzIGJlbG93IGNvbW1lbnQNCmluZGljYXRlcy4gTm90IHN1 cmUgd2h5IGl0IHdhcyBsZWZ0IGFzIGl0IGlzLiBQZXJoYXBzLCB0aGUga2V5IHBvaW50IGlzDQp1 c2VkIGluIHRoZSBoYXNoIHRhYmxlLiBQZXIgbXkgdW5kZXJzdGFuZGluZywgaGFzaCB0YWJsZSBz aG91bGQgaGF2ZQ0KaXRzIG93biBmaWVsZCB0byBzdG9yZSB0aGUga2V5IGNvbnRlbnQuIERvIHlv dSBoYXZlIGFueSBpZGVhPw0KDQogICAgaWYgKCF2dGRfYnVzKSB7DQogICAgICAgIHVpbnRwdHJf dCAqbmV3X2tleSA9IGdfbWFsbG9jKHNpemVvZigqbmV3X2tleSkpOw0KICAgICAgICAqbmV3X2tl eSA9ICh1aW50cHRyX3QpYnVzOw0KICAgICAgICAvKiBObyBjb3JyZXNwb25kaW5nIGZyZWUoKSAq Lw0KDQo+IA0KPiA+ICsgICAga2V5LT5wYXNpZCA9IHBhc2lkOw0KPiA+ICsgICAga2V5LT5zaWQg PSBzaWQ7DQo+ID4gKyAgICByZXR1cm4ga2V5Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg Z3VpbnQgdnRkX3Bhc2lkX2FzX2tleV9oYXNoKGdjb25zdHBvaW50ZXIgdikNCj4gPiArew0KPiA+ ICsgICAgc3RydWN0IHBhc2lkX2tleSAqa2V5ID0gKHN0cnVjdCBwYXNpZF9rZXkgKil2Ow0KPiA+ ICsgICAgdWludDMyX3QgYSwgYiwgYzsNCj4gPiArDQo+ID4gKyAgICAvKiBKZW5raW5zIGhhc2gg Ki8NCj4gPiArICAgIGEgPSBiID0gYyA9IEpIQVNIX0lOSVRWQUwgKyBzaXplb2YoKmtleSk7DQo+ ID4gKyAgICBhICs9IGtleS0+c2lkOw0KPiA+ICsgICAgYiArPSBleHRyYWN0MzIoa2V5LT5wYXNp ZCwgMCwgMTYpOw0KPiA+ICsgICAgYyArPSBleHRyYWN0MzIoa2V5LT5wYXNpZCwgMTYsIDE2KTsN Cj4gPiArDQo+ID4gKyAgICBfX2poYXNoX21peChhLCBiLCBjKTsNCj4gPiArICAgIF9famhhc2hf ZmluYWwoYSwgYiwgYyk7DQo+IA0KPiBJJ20gdG90YWxseSBub3QgZ29vZCBhdCBoYXNoLCBidXQg SSdtIGN1cmlvdXMgd2h5IG5vIG9uZSB3YW50cyB0bw0KPiBpbnRyb2R1Y2UgYXQgbGVhc3QgYSBq aGFzaCgpIHNvIHdlIGRvbid0IG5lZWQgdG8gY2FsbCB0aGVzZSBpbnRlcm5hbHMNCj4gKEkgYmVs aWV2ZSB0aGF0J3MgaG93IGtlcm5lbCBkaWQgaXQpLiANCg0Kd2VsbCwgSSdtIGFsc28gY3VyaW91 cyBhYm91dCBpdC4NCg0KPiBBdCB0aGUgbWVhbnRpbWUgSSBkb24ndCBzZWUgaG93DQo+IGl0IHdv dWxkIGJlIGJldHRlciB0aGFuIHRoaW5ncyBsaWtlIGdfc3RyX2hhc2goKSB0b28gc28gSSdkIGJl IGdsYWQgaWYNCj4gYW55b25lIGNvdWxkIGhlbHAgZXhwbGFpbiBhIGJpdC4uLg0KDQpJIHVzZWQg dG8gdXNlIGdfc3RyX2hhc2goKSwgYW5kIHVzZWQgc3RyaW5nIGFzIGtleS4NCmh0dHBzOi8vbGlz dHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvcWVtdS1kZXZlbC8yMDE5LTA3L21zZzAyMTI4Lmh0bWwN Cg0KRG8geW91IHdhbnQgbWUgdG8ga2VlcCB0aGUgcGFzaWRfa2V5IHN0cnVjdHVyZSBoZXJlIGFu ZCBzd2l0Y2ggdG8NCnVzZSBnX3N0cl9oYXNoKCk/IFRoZW4gdGhlIHBhc2lkIGtleSBjb250ZW50 IHdvdWxkIGJlIGNvbXBhcmVkIGFzDQpzdHJpbmdzLiBJIHRoaW5rIGl0IHNob3VsZCB3b3JrLiBC dXQsIEkgbWF5IGJlIHdyb25nIGFsbCB0aGUgc2FtZS4NCg0KPiA+ICsNCj4gPiArICAgIHJldHVy biBjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgZ2Jvb2xlYW4gdnRkX3Bhc2lkX2FzX2tl eV9lcXVhbChnY29uc3Rwb2ludGVyIHYxLCBnY29uc3Rwb2ludGVyIHYyKQ0KPiA+ICt7DQo+ID4g KyAgICBjb25zdCBzdHJ1Y3QgcGFzaWRfa2V5ICprMSA9IHYxOw0KPiA+ICsgICAgY29uc3Qgc3Ry dWN0IHBhc2lkX2tleSAqazIgPSB2MjsNCj4gPiArDQo+ID4gKyAgICByZXR1cm4gKGsxLT5wYXNp ZCA9PSBrMi0+cGFzaWQpICYmIChrMS0+c2lkID09IGsyLT5zaWQpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW5saW5lIGJvb2wgdnRkX3BjX2lzX2RvbV9zaShzdHJ1Y3QgVlREUEFTSURD YWNoZUluZm8gKnBjX2luZm8pDQo+ID4gK3sNCj4gPiArICAgIHJldHVybiBwY19pbmZvLT5mbGFn cyAmIFZURF9QQVNJRF9DQUNIRV9ET01TSTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu bGluZSBib29sIHZ0ZF9wY19pc19wYXNpZF9zaShzdHJ1Y3QgVlREUEFTSURDYWNoZUluZm8gKnBj X2luZm8pDQo+ID4gK3sNCj4gPiArICAgIHJldHVybiBwY19pbmZvLT5mbGFncyAmIFZURF9QQVNJ RF9DQUNIRV9QQVNJRFNJOw0KPiANCj4gQUZBSVMgdGhlc2Ugb25seSB1c2VkIG9uY2UuICBIb3cg YWJvdXQgcmVtb3ZpbmcgdGhlc2UgaGVscGVycz8gIEkNCj4gZG9uJ3Qgc2VlIG11Y2ggb24gaGVs cGluZyByZWFkYWJpbGl0eSBvciBhbnl0aGluZy4uLiAgcGxlYXNlIHNlZSBiZWxvdw0KPiBhdCBb MV0uDQoNCkFncmVlZC4gV2lsbCBkbyBpdC4gQlRXLiBJIGZhaWxlZCB0byBsb2NhdGUgWzFdLiBN YXkgeW91IHBvaW50IGl0IG91dC4gU3VyZWx5DQpJIGRvbuKAmXQgd2FudCB0byBtaXNzIGFueSBj b21tZW50cy4NCg0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2dGRfZGV2 X2dldF9wZV9mcm9tX3Bhc2lkKEludGVsSU9NTVVTdGF0ZSAqcywNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJ1c19udW0sDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkZXZmbiwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCBwYXNpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWVERQQVNJREVudHJ5ICpwZSkNCj4gPiArew0KPiA+ICsgICAgVlREQ29udGV4dEVudHJ5IGNl Ow0KPiA+ICsgICAgaW50IHJldDsNCj4gPiArICAgIGRtYV9hZGRyX3QgcGFzaWRfZGlyX2Jhc2U7 DQo+ID4gKw0KPiA+ICsgICAgaWYgKCFzLT5yb290X3NjYWxhYmxlKSB7DQo+ID4gKyAgICAgICAg cmV0dXJuIC1WVERfRlJfUEFTSURfVEFCTEVfSU5WOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAr ICAgIHJldCA9IHZ0ZF9kZXZfdG9fY29udGV4dF9lbnRyeShzLCBidXNfbnVtLCBkZXZmbiwgJmNl KTsNCj4gPiArICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsg ICAgfQ0KPiA+ICsNCj4gPiArICAgIHBhc2lkX2Rpcl9iYXNlID0gVlREX0NFX0dFVF9QQVNJRF9E SVJfVEFCTEUoJmNlKTsNCj4gPiArICAgIHJldCA9IHZ0ZF9nZXRfcGVfZnJvbV9wYXNpZF90YWJs ZShzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzaWRfZGlyX2Jh c2UsIHBhc2lkLCBwZSk7DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGJvb2wgdnRkX3Bhc2lkX2VudHJ5X2NvbXBhcmUoVlREUEFTSURFbnRy eSAqcDEsIFZURFBBU0lERW50cnkgKnAyKQ0KPiA+ICt7DQo+ID4gKyAgICBpbnQgaSA9IDA7DQo+ ID4gKyAgICB3aGlsZSAoaSA8IHNpemVvZigqcDEpIC8gc2l6ZW9mKHAxLT52YWwpKSB7DQo+ID4g KyAgICAgICAgaWYgKHAxLT52YWxbaV0gIT0gcDItPnZhbFtpXSkgew0KPiA+ICsgICAgICAgICAg ICByZXR1cm4gZmFsc2U7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIGkrKzsNCj4gPiAr ICAgIH0NCj4gPiArICAgIHJldHVybiB0cnVlOw0KPiANCj4gV2lsbCB0aGlzIHdvcms/DQo+IA0K PiAgIHJldHVybiAhbWVtY21wKHAxLCBwMiwgc2l6ZW9mKCpwMSkpOw0KDQpvaCwgeWVzLiBXaWxs IHJlcGxhY2Ugd2l0aCBpdC4NCg0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogVGhp cyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIHBhc2lkX2NhY2hlX2dlbiBvZiBjYWNoZWQgcGFz aWQNCj4gPiArICogZW50cnkgaW4gdnRkX3Bhc2lkX2FzIGluc3RhbmNlcy4gQ2FsbGVyIG9mIHRo aXMgZnVuY3Rpb24gc2hvdWxkDQo+ID4gKyAqIGhvbGQgaW9tbXVfbG9jay4NCj4gPiArICovDQo+ ID4gK3N0YXRpYyBnYm9vbGVhbiB2dGRfZmx1c2hfcGFzaWQoZ3BvaW50ZXIga2V5LCBncG9pbnRl ciB2YWx1ZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1 c2VyX2RhdGEpDQo+ID4gK3sNCj4gPiArICAgIFZURFBBU0lEQ2FjaGVJbmZvICpwY19pbmZvID0g dXNlcl9kYXRhOw0KPiA+ICsgICAgVlREUEFTSURBZGRyZXNzU3BhY2UgKnZ0ZF9wYXNpZF9hcyA9 IHZhbHVlOw0KPiA+ICsgICAgSW50ZWxJT01NVVN0YXRlICpzID0gdnRkX3Bhc2lkX2FzLT5pb21t dV9zdGF0ZTsNCj4gPiArICAgIFZURFBBU0lEQ2FjaGVFbnRyeSAqcGNfZW50cnkgPSAmdnRkX3Bh c2lkX2FzLT5wYXNpZF9jYWNoZV9lbnRyeTsNCj4gPiArICAgIFZUREJ1cyAqdnRkX2J1cyA9IHZ0 ZF9wYXNpZF9hcy0+dnRkX2J1czsNCj4gPiArICAgIFZURFBBU0lERW50cnkgcGU7DQo+ID4gKyAg ICB1aW50MTZfdCBkaWQ7DQo+ID4gKyAgICB1aW50MzJfdCBwYXNpZDsNCj4gPiArICAgIHVpbnQx Nl90IGRldmZuOw0KPiA+ICsgICAgZ2Jvb2xlYW4gcmVtb3ZlID0gZmFsc2U7DQo+ID4gKw0KPiA+ ICsgICAgZGlkID0gdnRkX3BlX2dldF9kb21haW5faWQoJnBjX2VudHJ5LT5wYXNpZF9lbnRyeSk7 DQo+ID4gKyAgICBwYXNpZCA9IHZ0ZF9wYXNpZF9hcy0+cGFzaWQ7DQo+ID4gKyAgICBkZXZmbiA9 IHZ0ZF9wYXNpZF9hcy0+ZGV2Zm47DQo+ID4gKw0KPiA+ICsgICAgaWYgKHBjX2VudHJ5LT5wYXNp ZF9jYWNoZV9nZW4gJiYNCj4gPiArICAgICAgICAodnRkX3BjX2lzX2RvbV9zaShwY19pbmZvKSA/ IChwY19pbmZvLT5kb21haW5faWQgPT0gZGlkKSA6IDEpICYmDQo+ID4gKyAgICAgICAgKHZ0ZF9w Y19pc19wYXNpZF9zaShwY19pbmZvKSA/IChwY19pbmZvLT5wYXNpZCA9PSBwYXNpZCkgOiAxKSkg ew0KPiANCj4gVGhpcyBjaHVuayBpcyBhIGJpdCBvZGQgdG8gbWUuICBIb3cgYWJvdXQgc29tZXRo aW5nIGxpa2UgdGhpcz8NCj4gDQo+ICAgLi4uDQo+IA0KPiAgIGlmICghcGNfZW50cnktPnBhc2lk X2NhY2hlX2dlbikNCj4gICAgIHJldHVybiBmYWxzZTsNCj4gDQo+ICAgc3dpdGNoIChwY19pbmZv LT5mbGFncykgew0KPiAgICAgY2FzZSBET01BSU46DQo+ICAgICAgIGlmIChwY19pbmZvLT5kb21h aW5faWQgIT0gZGlkKSB7DQo+ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiAgICAgICB9DQo+ICAg ICAgIGJyZWFrOw0KPiAgICAgY2FzZSBQQVNJRDoNCj4gICAgICAgaWYgKHBjX2luZm8tPnBhc2lk ICE9IHBhc2lkKSB7DQo+ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiAgICAgICB9DQo+ICAgICAg IGJyZWFrOw0KPiAgICAgLi4uIChJIHRoaW5rIHlvdSdsbCBhZGQgbW9yZSBpbiB0aGUgZm9sbG93 IHVwIHBhdGNoZXMpDQo+ICAgfQ0KDQp5ZXAsIEkgY2FuIGRvIGl0Lg0KDQo+ID4gKyAgICAgICAg LyoNCj4gPiArICAgICAgICAgKiBNb2RpZnkgcGFzaWRfY2FjaGVfZ2VuIHRvIGJlIDAsIHRoZSBj YWNoZWQgcGFzaWQgZW50cnkgaW4NCj4gPiArICAgICAgICAgKiB2dGRfcGFzaWRfYXMgaW5zdGFu Y2UgaXMgaW52YWxpZC4gQW5kIHZ0ZF9wYXNpZF9hcyBpbnN0YW5jZQ0KPiA+ICsgICAgICAgICAq IHdvdWxkIGJlIHRyZWF0ZWQgYXMgaW52YWxpZCBpbiBRRU1VIHNjb3BlIHVudGlsIHRoZSBwYXNp ZA0KPiA+ICsgICAgICAgICAqIGNhY2hlIGdlbiBpcyB1cGRhdGVkIGluIGEgbmV3IHBhc2lkIGJp bmRpbmcgb3IgdXBkYXRlZCBpbg0KPiA+ICsgICAgICAgICAqIGJlbG93IGxvZ2ljIGlmIGZvdW5k IGd1ZXN0IHBhc2lkIGVudHJ5IGV4aXN0cy4NCj4gPiArICAgICAgICAgKi8NCj4gPiArICAgICAg ICByZW1vdmUgPSB0cnVlOw0KPiANCj4gV2h5IHNldCByZW1vdmUgaGVyZT8gIFNob3VsZCB3ZSBz ZXQgaXQgb25seSBpZiB3ZSBmb3VuZCB0aGF0IHRoZSBlbnRyeQ0KPiBpcyBjbGVhcmVkPw0KDQpZ ZXMsIHlvdSBhcmUgcmlnaHQuIEJ1dCBpdCBpcyBvbmx5IGZvciBwYXNzdGhydSBkZXZpY2VzLiBG b3IgZW11bGF0ZWQNCnN2YS1jYXBhYmxlIGRldmljZSwgSSB0aGluayBpdCB3b3VsZCBzaW1wbGUg dG8gYWx3YXlzIHJlbW92ZSBjYWNoZWQNCnBhc2lkLWVudHJ5IGlmIGd1ZXN0IGlzc3VlcyBwYXNp ZCBjYWNoZSBpbnZhbGlkYXRpb24uIFRoaXMgaXMgYmVjYXVzZQ0KY2FjaGluZy1tb2RlIGlzIG5v dCBuZWNlc3NhcnkgZm9yIGVtdWxhdGVkIGRldmljZXMsIHdoaWNoIG1lYW5zIHBhc2lkDQpjYWNo ZSBpbnZhbGlkYXRpb24gZm9yIGVtdWxhdGVkIGRldmljZXMgb25seSBtZWFucyBjYWNoZSBmbHVz aC4gVGhpcw0KaXMgZW5vdWdoIGFzIHRoZSBwYXNpZCBlbnRyeSBjYW4gYmUgcmUtY2FjaGVkIGR1 cmluZyBQQVNJRCB0YWdnZWQgRE1BDQp0cmFuc2xhdGlvbiBpbiBkb190cmFuc2xhdGUoKS4gQWx0 aG91Z2ggaXQgaXMgbm90IHlldCBhZGRlZCBhcyBJDQptZW50aW9uZWQgaW4gdGhlIHBhdGNoIGNv bW1pdCBtZXNzYWdlLiBXaGlsZSBmb3IgcGFzc3RocnUgZGV2aWNlcywNCnBhc2lkIGNhY2hlIGlu dmFsaWRhdGlvbiBkb2VzIG5vdCBvbmx5IG1lYW4gY2FjaGUgZmx1c2guIEluc3RlYWQsIGl0DQpy ZWxpZXMgb24gdGhlIGxhdGVzdCBndWVzdCBwYXNpZCBlbnRyeSBwcmVzZW5jZSBzdGF0dXMuDQoN CkJhc2VkIG9uIHRoZSBhYm92ZSBpZGVhLCBJIG1ha2UgdGhlIHJlbW92ZT10cnVlIGF0IHRoZSBi ZWdpbm5pbmcsIGFuZA0KaWYgdGhlIHN1YnNlcXVlbnQgbG9naWMgZmluZHMgb3V0IGl0IGlzIGZv ciBwYXNzdGhydSBkZXZpY2VzLCBpdCB3aWxsDQpjaGVjayBndWVzdCBwYXNpZCBlbnRyeSBhbmQg dGhlbiBkZWNpZGUgaG93IHRvIGhhbmRsZSB0aGUgcGFzaWQgY2FjaGUNCmludmFsaWRhdGlvbiBy ZXF1ZXN0LiAicmVtb3ZlIiB3aWxsIGJlIHNldCB0byBiZSBmYWxzZSB3aGVuIGd1ZXN0IHBhc2lk DQplbnRyeSBleGlzdHMuDQoNCj4gDQo+ID4gKyAgICAgICAgcGNfZW50cnktPnBhc2lkX2NhY2hl X2dlbiA9IDA7DQo+ID4gKyAgICAgICAgaWYgKHZ0ZF9idXMtPmRldl9pY1tkZXZmbl0pIHsNCj4g PiArICAgICAgICAgICAgaWYgKCF2dGRfZGV2X2dldF9wZV9mcm9tX3Bhc2lkKHMsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICBwY2lfYnVzX251bSh2dGRfYnVzLT5idXMpLCBkZXZmbiwgcGFz aWQsICZwZSkpIHsNCj4gPiArICAgICAgICAgICAgICAgIC8qDQo+ID4gKyAgICAgICAgICAgICAg ICAgKiBwYXNpZCBlbnRyeSBleGlzdHMsIHNvIGtlZXAgdGhlIHZ0ZF9wYXNpZF9hcywgYW5kIG5l ZWRzDQo+ID4gKyAgICAgICAgICAgICAgICAgKiB1cGRhdGUgdGhlIHBhc2lkIGVudHJ5IGNhY2hl ZCBpbiB2dGRfcGFzaWRfYXMuIEFsc28sIGlmDQo+ID4gKyAgICAgICAgICAgICAgICAgKiB0aGUg Z3Vlc3QgcGFzaWQgZW50cnkgZG9lc24ndCBlcXVhbCB0byBjYWNoZWQgcGFzaWQgZW50cnkNCj4g PiArICAgICAgICAgICAgICAgICAqIG5lZWRzIHRvIGlzc3VlIGEgcGFzaWQgYmluZCB0byBob3N0 IGZvciBwYXNzdGhydSBkZXZpZXMuDQo+ID4gKyAgICAgICAgICAgICAgICAgKi8NCj4gPiArICAg ICAgICAgICAgICAgIHJlbW92ZSA9IGZhbHNlOw0KPiA+ICsgICAgICAgICAgICAgICAgcGNfZW50 cnktPnBhc2lkX2NhY2hlX2dlbiA9IHMtPnBhc2lkX2NhY2hlX2dlbjsNCj4gPiArICAgICAgICAg ICAgICAgIGlmICghdnRkX3Bhc2lkX2VudHJ5X2NvbXBhcmUoJnBlLCAmcGNfZW50cnktPnBhc2lk X2VudHJ5KSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHBjX2VudHJ5LT5wYXNpZF9lbnRy eSA9IHBlOw0KPiANCj4gV2hhdCBpZiB0aGUgcGFzaWQgZW50cnkgY2hhbmdlZCBmcm9tIHZhbGlk IHRvIGFsbCB6ZXJvcz8gIFNob3VsZCB3ZQ0KPiB1bmJpbmQvcmVtb3ZlIGl0IGFzIHdlbGw/DQoN CklmIGl0IGlzIGZyb20gdmFsaWQgdG8gYWxsIHplcm8sIHZ0ZF9kZXZfZ2V0X3BlX2Zyb21fcGFz aWQoKSBzaG91bGQNCnJldHVybiBub24temVyby4gVGhlbiBpdCB3b3VsZCBrZWVwICJyZW1vdmUi PXRydWUgYW5kIHBhc2lkX2NhY2hlX2dlbj0wLg0KVW5iaW5kIHdpbGwgYmUgYWRkZWQgd2l0aCBi aW5kIGluIHBhdGNoIDE1LiBIZXJlIGp1c3QgaGFuZGxlIHRoZSBjYWNoZWQNCnBhc2lkIGVudHJ5 IHdpdGhpbiB2SU9NTVUuDQoNCjAwMTUtaW50ZWxfaW9tbXUtYmluZC11bmJpbmQtZ3Vlc3QtcGFn ZS10YWJsZS10by1ob3N0LnBhdGNoDQoNCj4gDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgLyoN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgKiBUT0RPOiB3aGVuIHBhc2lkLWJhc2UtaW90bGIo cGlvdGxiKSBpbmZyYXN0cnVjdHVyZSBpcw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAqIHJl YWR5LCBzaG91bGQgaW52YWxpZGF0ZSBRRU1VIHBpb3RsYiB0b2dlaHRlciB3aXRoIHRoaXMNCj4g PiArICAgICAgICAgICAgICAgICAgICAgKiBjaGFuZ2UuDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICovDQo+ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiAr ICAgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuIHJlbW92ZTsNCj4g DQo+IEluIHN1bW1hcnksIElNSE8gdGhpcyBjaHVuayBjb3VsZCBiZSBjbGVhcmVyIGlmIGxpa2Ug dGhpczoNCj4gDQo+ICAgLi4uIChjb250aW51ZXMgd2l0aCBhYm92ZSBwZXN1ZG8gY29kZSkNCj4g DQo+ICAgcmV0ID0gdnRkX2Rldl9nZXRfcGVfZnJvbV9wYXNpZCguLi4sICZwZSk7DQo+ICAgaWYg KHJldCkgew0KPiAgICAgZ290byByZW1vdmU7DQo+ICAgfQ0KPiAgIC8vIGRldGVjdGVkIGNvcnJl Y3QgcGFzaWQgZW50cnkNCj4gICBpZiAoIXZ0ZF9wYXNpZF9lbnRyeV9jb21wYXJlKCZwZSwgLi4u KSkgew0KPiAgICAgIC8vIHBhc2lkIGVudHJ5IGNoYW5nZWQNCj4gICAgICBpZiAodnRkX3Bhc2lk X2NsZWFyZWQoJnBlKSkgew0KPiAgICAgICAgLy8gdGhlIHBhc2lkIGlzIGNsZWFyZWQgdG8gYWxs IHplcm8sIGRyb3ANCj4gICAgICAgIGdvdG8gcmVtb3ZlOw0KPiAgICAgIH0NCj4gICAgICAvLyBh IG5ldyBwYXNpZCBpcyBzZXR1cA0KPiANCj4gICAgICAvLyBTZW5kIFVOQklORCBpZiBjYWNoZSB2 YWxpZA0KPiAgICAgIC4uLg0KPiAgICAgIC8vIFNlbmQgQklORA0KPiAgICAgIC4uLg0KPiAgICAg IC8vIFVwZGF0ZSBjYWNoZQ0KPiAgICAgIHBjX2VudHJ5LT5wYXNpZF9lbnRyeSA9IHBlOw0KPiAg ICAgIHBjX2VudHJ5LT5wYXNpZF9jYWNoZV9nZW4gPSBzLT5wYXNpZF9jYWNoZV9nZW47DQo+ICAg fQ0KPiANCj4gcmVtb3ZlOg0KPiAgIC8vIFNlbmQgVU5CSU5EIGlmIGNhY2hlIHZhbGlkDQo+ICAg Li4uDQo+ICAgcmV0dXJuIHRydWU7DQoNCnllcCwgSSBjYW4gZG8gaXQuIG5pY2UgaWRlYS4gOi0p DQoNCj4gSSBmZWVsIGxpa2UgeW91IHNob3VsZG4ndCBib3RoZXIgY2hlY2tpbmcgYWdhaW5zdA0K PiB2dGRfYnVzLT5kZXZfaWNbZGV2Zm5dIGF0IGFsbCBoZXJlIGJlY2F1c2UgaWYgdGhhdCB3YXMg c2V0IHRoZW4gaXQNCj4gbWVhbnMgd2UgbmVlZCB0byBwYXNzIHRoZXNlIGluZm9ybWF0aW9uIGRv d24gdG8gaG9zdCwgYW5kIGl0J2xsIGJlDQo+IGNoZWNrZWQgYXV0b21hdGljYWxseSBiZWNhdXNl IHdoZW4gd2Ugc2VuZCBCSU5EL1VOQklORCBldmVudCB3ZSdsbA0KPiBkZWZpbml0ZWx5IGNoZWNr IHRoYXQgdG9vIG90aGVyd2lzZSB0aG9zZSBldmVudHMgd2lsbCBiZSBub29wcy4NCg0KSSBuZWVk IGl0LiBCZWNhdXNlIEkgd2FudCB0byBkaWZmZXIgcGFzc3RocnUgZGV2aWNlcyBhbmQgZW11bGF0 ZWQNCmRldmljZXMuIElkZWFsbHksIGVtdWxhdGVkIGRldmljZXMgd29uJ3QgaGF2ZSB2dGRfYnVz LT5kZXZfaWNbZGV2Zm5dLg0KDQo+ID4gK30NCj4gPiArDQo+ID4gIHN0YXRpYyBpbnQgdnRkX3Bh c2lkX2NhY2hlX2RzaShJbnRlbElPTU1VU3RhdGUgKnMsIHVpbnQxNl90IGRvbWFpbl9pZCkNCj4g PiAgew0KPiA+ICsgICAgVlREUEFTSURDYWNoZUluZm8gcGNfaW5mbzsNCj4gPiArDQo+ID4gKyAg ICB0cmFjZV92dGRfcGFzaWRfY2FjaGVfZHNpKGRvbWFpbl9pZCk7DQo+ID4gKw0KPiA+ICsgICAg cGNfaW5mby5mbGFncyA9IFZURF9QQVNJRF9DQUNIRV9ET01TSTsNCj4gPiArICAgIHBjX2luZm8u ZG9tYWluX2lkID0gZG9tYWluX2lkOw0KPiA+ICsNCj4gPiArICAgIC8qDQo+ID4gKyAgICAgKiBM b29wIGFsbCBleGlzdGluZyBwYXNpZCBjYWNoZXMgYW5kIHVwZGF0ZSB0aGVtLg0KPiA+ICsgICAg ICovDQo+ID4gKyAgICB2dGRfaW9tbXVfbG9jayhzKTsNCj4gPiArICAgIGdfaGFzaF90YWJsZV9m b3JlYWNoX3JlbW92ZShzLT52dGRfcGFzaWRfYXMsIHZ0ZF9mbHVzaF9wYXNpZCwgJnBjX2luZm8p Ow0KPiA+ICsgICAgdnRkX2lvbW11X3VubG9jayhzKTsNCj4gPiArDQo+ID4gKyAgICAvKg0KPiA+ ICsgICAgICogVE9ETzogRG9tYWluIHNlbGVjdGl2ZSBQQVNJRCBjYWNoZSBpbnZhbGlkYXRpb24N Cj4gPiArICAgICAqIG1heSBiZSBpc3N1ZWQgd3JvbmdseSBieSBwcm9ncmFtbWVyLCB0byBiZSBz YWZlLA0KPiANCj4gSU1ITyBpdCdzIG5vdCB3cm9uZyBldmVuIGlmIHRoZSBndWVzdCBzZW5kcyB0 aGF0LCBiZWNhdXNlIGxvZ2ljYWxseQ0KPiB0aGUgZ3Vlc3QgY2FuIHNlbmQgaW52YWxpZGF0aW9u IGFzIGl0IHdpc2hlcywgYW5kIHdlIHNob3VsZCBoYXZlDQo+IHNpbWlsYXIgaXNzdWUgYmVmb3Jl IG9uIHRoZSAybmQgbGV2ZWwgcGFnZSB0YWJsZSBpbnZhbGlkYXRpb25zLi4uIGFuZA0KPiB0aGF0 J3Mgd2h5IHdlIG5lZWQgdG8ga2VlcCB0aGUgaW92YSBtYXBwaW5nIGluc2lkZSBxZW11IEkgc3Vw cG9zZS4uLg0KDQp5ZXMsIHdlIGFyZSBhbGlnbmVkIG9uIHRoaXMgcG9pbnQuIEkgY2FuIHVwZGF0 ZSB0aGUgZGVzY3JpcHRpb24gYWJvdmUuDQoNCj4gDQo+ID4gKyAgICAgKiBhZnRlciBpbnZhbGlk YXRpbmcgdGhlIHBhc2lkIGNhY2hlcywgZW11bGF0b3INCj4gPiArICAgICAqIG5lZWRzIHRvIHJl cGxheSB0aGUgcGFzaWQgYmluZGluZ3MgYnkgd2Fsa2luZyBndWVzdA0KPiA+ICsgICAgICogcGFz aWQgZGlyIGFuZCBwYXNpZCB0YWJsZS4NCj4gDQo+IFRoaXMgaXMgdHJ1ZS4uLg0KDQpoYW5kc2hh a2UgaGVyZS4NCg0KPiANCj4gPiArICAgICAqLw0KPiA+ICAgICAgcmV0dXJuIDA7DQo+ID4gIH0N Cj4gPg0KPiA+ICsvKioNCj4gPiArICogVGhpcyBmdW5jdGlvbiBmaW5kcyBvciBhZGRzIGEgVlRE UEFTSURBZGRyZXNzU3BhY2UgZm9yIGEgZGV2aWNlDQo+ID4gKyAqIHdoZW4gaXQgaXMgYm91bmQg dG8gYSBwYXNpZC4gQ2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhvbGQNCj4gPiArICog aW9tbXVfbG9jay4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBWVERQQVNJREFkZHJlc3NTcGFjZSAq dnRkX2FkZF9maW5kX3Bhc2lkX2FzKEludGVsSU9NTVVTdGF0ZSAqcywNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlREQnVzICp2dGRfYnVz LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZGV2Zm4sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IHBhc2lkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG9jYXRlKQ0KPiA+ICt7DQo+ID4g KyAgICBzdHJ1Y3QgcGFzaWRfa2V5ICprZXk7DQo+ID4gKyAgICBzdHJ1Y3QgcGFzaWRfa2V5ICpu ZXdfa2V5Ow0KPiA+ICsgICAgVlREUEFTSURBZGRyZXNzU3BhY2UgKnZ0ZF9wYXNpZF9hczsNCj4g PiArICAgIHVpbnQxNl90IHNpZDsNCj4gPiArDQo+ID4gKyAgICBzaWQgPSB2dGRfbWFrZV9zb3Vy Y2VfaWQocGNpX2J1c19udW0odnRkX2J1cy0+YnVzKSwgZGV2Zm4pOw0KPiA+ICsgICAga2V5ID0g dnRkX2dldF9wYXNpZF9rZXkocGFzaWQsIHNpZCk7DQo+ID4gKyAgICB2dGRfcGFzaWRfYXMgPSBn X2hhc2hfdGFibGVfbG9va3VwKHMtPnZ0ZF9wYXNpZF9hcywga2V5KTsNCj4gPiArDQo+ID4gKyAg ICBpZiAoIXZ0ZF9wYXNpZF9hcyAmJiBhbGxvY2F0ZSkgew0KPiA+ICsgICAgICAgIG5ld19rZXkg PSB2dGRfZ2V0X3Bhc2lkX2tleShwYXNpZCwgc2lkKTsNCj4gDQo+IElzIHRoaXMgdGhlIHNhbWUg YXMga2V5IG5vIG1hdHRlciB3aGF0Pw0KDQpJdCBpcyB0aGUga2V5IGNvbnRlbnQgbWF0dGVycy4g SSdkIG5lZWQgdG8gcmVmaW5lIHRoZSBrZXkgYWxsb2MvZnJlZSBpbg0KbmV4dCB2ZXJzaW9uLg0K DQo+IA0KPiA+ICsgICAgICAgIC8qDQo+ID4gKyAgICAgICAgICogSW5pdGlhdGUgdGhlIHZ0ZF9w YXNpZF9hcyBzdHJ1Y3R1cmUuDQo+ID4gKyAgICAgICAgICoNCj4gPiArICAgICAgICAgKiBUaGlz IHN0cnVjdHVyZSBoZXJlIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGd1ZXN0IHBhc2lkDQo+ID4gKyAg ICAgICAgICogYmluZGluZyBhbmQgYWxzbyBzZXJ2ZXMgYXMgcGFzaWQtY2FjaGUgbWFuZ2VtZW50 IGVudHJ5Lg0KPiA+ICsgICAgICAgICAqDQo+ID4gKyAgICAgICAgICogVE9ETzogaW4gZnV0dXJl LCBpZiB3YW50cyB0byBzdXBwb3J0IHRoZSBTVkEtYXdhcmUgRE1BDQo+ID4gKyAgICAgICAgICog ICAgICAgZW11bGF0aW9uLCB0aGUgdnRkX3Bhc2lkX2FzIHNob3VsZCBiZSBmdWxseSBpbml0aWFs aXplZC4NCj4gPiArICAgICAgICAgKiAgICAgICBlLmcuIHRoZSBhZGRyZXNzX3NwYWNlIGFuZCBt ZW1vcnkgcmVnaW9uIGZpZWxkcy4NCj4gPiArICAgICAgICAgKi8NCj4gPiArICAgICAgICB2dGRf cGFzaWRfYXMgPSBnX21hbGxvYzAoc2l6ZW9mKFZURFBBU0lEQWRkcmVzc1NwYWNlKSk7DQo+ID4g KyAgICAgICAgdnRkX3Bhc2lkX2FzLT5pb21tdV9zdGF0ZSA9IHM7DQo+ID4gKyAgICAgICAgdnRk X3Bhc2lkX2FzLT52dGRfYnVzID0gdnRkX2J1czsNCj4gPiArICAgICAgICB2dGRfcGFzaWRfYXMt PmRldmZuID0gZGV2Zm47DQo+ID4gKyAgICAgICAgdnRkX3Bhc2lkX2FzLT5jb250ZXh0X2NhY2hl X2VudHJ5LmNvbnRleHRfY2FjaGVfZ2VuID0gMDsNCj4gPiArICAgICAgICB2dGRfcGFzaWRfYXMt PnBhc2lkID0gcGFzaWQ7DQo+ID4gKyAgICAgICAgdnRkX3Bhc2lkX2FzLT5wYXNpZF9jYWNoZV9l bnRyeS5wYXNpZF9jYWNoZV9nZW4gPSAwOw0KPiA+ICsgICAgICAgIGdfaGFzaF90YWJsZV9pbnNl cnQocy0+dnRkX3Bhc2lkX2FzLCBuZXdfa2V5LCB2dGRfcGFzaWRfYXMpOw0KPiA+ICsgICAgfQ0K PiA+ICsgICAgcmV0dXJuIHZ0ZF9wYXNpZF9hczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArIC8qKg0K PiA+ICsgICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBwYXNpZCBlbnRyeSBjYWNoZWQgaW4g JnZ0ZF9wYXNpZF9hcy4NCj4gPiArICAqIENhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBo b2xkIGlvbW11X2xvY2suDQo+ID4gKyAgKi8NCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHZ0ZF9m aWxsX2luX3BlX2NhY2hlKA0KPiA+ICsgICAgICAgICAgICAgIFZURFBBU0lEQWRkcmVzc1NwYWNl ICp2dGRfcGFzaWRfYXMsIFZURFBBU0lERW50cnkgKnBlKQ0KPiA+ICt7DQo+ID4gKyAgICBJbnRl bElPTU1VU3RhdGUgKnMgPSB2dGRfcGFzaWRfYXMtPmlvbW11X3N0YXRlOw0KPiA+ICsgICAgVlRE UEFTSURDYWNoZUVudHJ5ICpwY19lbnRyeSA9ICZ2dGRfcGFzaWRfYXMtPnBhc2lkX2NhY2hlX2Vu dHJ5Ow0KPiA+ICsNCj4gPiArICAgIHBjX2VudHJ5LT5wYXNpZF9lbnRyeSA9ICpwZTsNCj4gPiAr ICAgIHBjX2VudHJ5LT5wYXNpZF9jYWNoZV9nZW4gPSBzLT5wYXNpZF9jYWNoZV9nZW47DQo+ID4g K30NCj4gPiArDQo+ID4gIHN0YXRpYyBpbnQgdnRkX3Bhc2lkX2NhY2hlX3BzaShJbnRlbElPTU1V U3RhdGUgKnMsDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBk b21haW5faWQsIHVpbnQzMl90IHBhc2lkKQ0KPiA+ICB7DQo+ID4gKyAgICBWVERQQVNJRENhY2hl SW5mbyBwY19pbmZvOw0KPiA+ICsgICAgVlREUEFTSURFbnRyeSBwZTsNCj4gPiArICAgIFZUREJ1 cyAqdnRkX2J1czsNCj4gPiArICAgIGludCBidXNfbiwgZGV2Zm47DQo+ID4gKyAgICBWVERQQVNJ REFkZHJlc3NTcGFjZSAqdnRkX3Bhc2lkX2FzOw0KPiA+ICsgICAgVlRESU9NTVVDb250ZXh0ICp2 dGRfaWM7DQo+ID4gKw0KPiA+ICsgICAgcGNfaW5mby5mbGFncyA9IFZURF9QQVNJRF9DQUNIRV9E T01TSTsNCj4gPiArICAgIHBjX2luZm8uZG9tYWluX2lkID0gZG9tYWluX2lkOw0KPiA+ICsgICAg cGNfaW5mby5mbGFncyB8PSBWVERfUEFTSURfQ0FDSEVfUEFTSURTSTsNCj4gPiArICAgIHBjX2lu Zm8ucGFzaWQgPSBwYXNpZDsNCj4gPiArDQo+ID4gKyAgICAvKg0KPiA+ICsgICAgICogUmVnYXJk cyB0byBhIHBhc2lkIHNlbGVjdGl2ZSBwYXNpZCBjYWNoZSBpbnZhbGlkYXRpb24gKFBTSSksIGl0 DQo+ID4gKyAgICAgKiBjb3VsZCBiZSBlaXRoZXIgY2FzZXMgb2YgYmVsb3c6DQo+ID4gKyAgICAg KiBhKSBhIHByZXNlbnQgcGFzaWQgZW50cnkgbW92ZWQgdG8gbm9uLXByZXNlbnQNCj4gPiArICAg ICAqIGIpIGEgcHJlc2VudCBwYXNpZCBlbnRyeSB0byBiZSBhIHByZXNlbnQgZW50cnkNCj4gPiAr ICAgICAqIGMpIGEgbm9uLXByZXNlbnQgcGFzaWQgZW50cnkgbW92ZWQgdG8gcHJlc2VudA0KPiA+ ICsgICAgICoNCj4gPiArICAgICAqIEhlcmUgdGhlIGhhbmRsaW5nIG9mIGEgUFNJIGlzOg0KPiA+ ICsgICAgICogMSkgbG9vcCBhbGwgdGhlIGV4aXNpdG5nIHZ0ZF9wYXNpZF9hcyBpbnN0YW5jZXMg dG8gdXBkYXRlIHRoZW0NCj4gPiArICAgICAqICAgIGFjY29yZGluZyB0byB0aGUgbGF0ZXN0IGd1 ZXN0IHBhc2lkIGVudHJ5IGluIHBhc2lkIHRhYmxlLg0KPiA+ICsgICAgICogICAgdGhpcyB3aWxs IG1ha2Ugc3VyZSBhZmZlY3RlZCBleGlzdGluZyB2dGRfcGFzaWRfYXMgaW5zdGFuY2VzDQo+ID4g KyAgICAgKiAgICBjYWNoZWQgdGhlIGxhdGVzdCBwYXNpZCBlbnRyaWVzLiBBbHNvLCBkdXJpbmcg dGhlIGxvb3AsIHRoZQ0KPiA+ICsgICAgICogICAgaG9zdCBzaG91bGQgYmUgbm90aWZpZWQgaWYg bmVlZGVkLiBlLmcuIHBhc2lkIHVuYmluZCBvciBwYXNpZA0KPiA+ICsgICAgICogICAgdXBkYXRl LiBTaG91bGQgYmUgYWJsZSB0byBjb3ZlciBjYXNlIGEpIGFuZCBjYXNlIGIpLg0KPiA+ICsgICAg ICoNCj4gPiArICAgICAqIDIpIGxvb3AgYWxsIGRldmljZXMgdG8gY292ZXIgY2FzZSBjKQ0KPiA+ ICsgICAgICogICAgSG93ZXZlciwgaXQgaXMgbm90IGdvb2QgdG8gYWx3YXlzIGxvb3AgYWxsIGRl dmljZXMuIEluIHRoaXMNCj4gPiArICAgICAqICAgIGltcGxlbWVudGF0aW9uLiBXZSBkbyBpdCBp biB0aGlzIHdheXM6DQo+ID4gKyAgICAgKiAgICAtIEZvciBkZXZpY2VzIHdoaWNoIGhhdmUgVlRE SU9NTVVDb250ZXh0IGluc3RhbmNlcywgd2UgbG9vcA0KPiA+ICsgICAgICogICAgICB0aGVtIGFu ZCBjaGVjayBpZiBndWVzdCBwYXNpZCBlbnRyeSBleGlzdHMuIElmIHllcywgaXQgaXMNCj4gPiAr ICAgICAqICAgICAgY2FzZSBjKSwgd2UgdXBkYXRlIHRoZSBwYXNpZCBjYWNoZSBhbmQgYWxzbyBu b3RpZnkgaG9zdC4NCj4gPiArICAgICAqICAgIC0gRm9yIGRldmljZXMgd2hpY2ggaGF2ZSBubyBW VERJT01NVUNvbnRleHQgaW5zdGFuY2VzLCBpdCBpcw0KPiA+ICsgICAgICogICAgICBub3QgbmVj ZXNzYXJ5IHRvIGNyZWF0ZSBwYXNpZCBjYWNoZSBhdCB0aGlzIHBoYXNlIHNpbmNlIGl0DQo+ID4g KyAgICAgKiAgICAgIGNvdWxkIGJlIGNyZWF0ZWQgd2hlbiB2SU9NTVUgZG8gRE1BIGFkZHJlc3Mg dHJhbnNsYXRpb24uDQo+ID4gKyAgICAgKiAgICAgIFRoaXMgaXMgbm90IGltcGxlbWVudGVkIHll dCBzaW5jZSBubyBQQVNJRC1jYXBhYmxlIGVtdWxhdGVkDQo+ID4gKyAgICAgKiAgICAgIGRldmlj ZXMgdG9kYXkuIElmIHdlIGhhdmUgaXQgaW4gZnV0dXJlLCB0aGUgcGFzaWQgY2FjaGUgc2hhbGwN Cj4gPiArICAgICAqICAgICAgYmUgY3JlYXRlZCB0aGVyZS4NCj4gPiArICAgICAqLw0KPiA+ICsN Cj4gPiArICAgIHZ0ZF9pb21tdV9sb2NrKHMpOw0KPiA+ICsgICAgZ19oYXNoX3RhYmxlX2ZvcmVh Y2hfcmVtb3ZlKHMtPnZ0ZF9wYXNpZF9hcywgdnRkX2ZsdXNoX3Bhc2lkLCAmcGNfaW5mbyk7DQo+ ID4gKyAgICB2dGRfaW9tbXVfdW5sb2NrKHMpOw0KPiANCj4gWzJdDQo+IA0KPiA+ICsNCj4gPiAr ICAgIHZ0ZF9pb21tdV9sb2NrKHMpOw0KPiANCj4gRG8geW91IHdhbnQgdG8gZXhwbGljaXRseSBy ZWxlYXNlIHRoZSBsb2NrIGZvciBvdGhlciB0aHJlYWQ/DQo+IE90aGVyd2lzZSBJIGRvbid0IHNl ZSBhIHBvaW50IHRvIHVubG9jay9sb2NrIGluIHNlcXVlbmNlLi4NCg0KSSBmZWx0IGxpa2UgdG8g aGF2ZSBzaG9ydGVyIHByb3RlY3RlZCBzbmlwcGV0cy4gQnV0LCBJIGRvbuKAmXQgaGF2ZSBzdHJv bmcNCnJlYXNvbiBlaXRoZXIgYWZ0ZXIgcmVjb25zaWRlcmluZyBpdC4gSSdsbCByZW1vdmUgaXQg YW55aG93Lg0KDQo+ID4gKyAgICBRTElTVF9GT1JFQUNIKHZ0ZF9pYywgJnMtPnZ0ZF9kZXZfaWNf bGlzdCwgbmV4dCkgew0KPiA+ICsgICAgICAgIHZ0ZF9idXMgPSB2dGRfaWMtPnZ0ZF9idXM7DQo+ ID4gKyAgICAgICAgZGV2Zm4gPSB2dGRfaWMtPmRldmZuOw0KPiA+ICsgICAgICAgIGJ1c19uID0g cGNpX2J1c19udW0odnRkX2J1cy0+YnVzKTsNCj4gPiArDQo+ID4gKyAgICAgICAgLyogU3RlcCAx OiBmZXRjaCB2dGRfcGFzaWRfYXMgYW5kIGNoZWNrIGlmIGl0IGlzIHZhbGlkICovDQo+ID4gKyAg ICAgICAgdnRkX3Bhc2lkX2FzID0gdnRkX2FkZF9maW5kX3Bhc2lkX2FzKHMsIHZ0ZF9idXMsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZmbiwgcGFzaWQs IHRydWUpOw0KPiA+ICsgICAgICAgIGlmICh2dGRfcGFzaWRfYXMgJiYNCj4gPiArICAgICAgICAg ICAgKHMtPnBhc2lkX2NhY2hlX2dlbiA9PQ0KPiA+ICsgICAgICAgICAgICAgdnRkX3Bhc2lkX2Fz LT5wYXNpZF9jYWNoZV9lbnRyeS5wYXNpZF9jYWNoZV9nZW4pKSB7DQo+ID4gKyAgICAgICAgICAg IC8qDQo+ID4gKyAgICAgICAgICAgICAqIHBhc2lkX2NhY2hlX2dlbiBlcXVhbHMgdG8gcy0+cGFz aWRfY2FjaGVfZ2VuIG1lYW5zDQo+ID4gKyAgICAgICAgICAgICAqIHZ0ZF9wYXNpZF9hcyBpcyB2 YWxpZCBhZnRlciB0aGUgYWJvdmUgcy0+dnRkX3Bhc2lkX2FzDQo+ID4gKyAgICAgICAgICAgICAq IHVwZGF0ZXMuIFRodXMgbm8gbmVlZCBmb3IgdGhlIGJlbG93IHN0ZXBzLg0KPiA+ICsgICAgICAg ICAgICAgKi8NCj4gPiArICAgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAgICAvKg0KPiA+ICsgICAgICAgICAqIFN0ZXAgMjogdnRkX3Bhc2lkX2Fz IGlzIG5vdCB2YWxpZCwgaXQncyBwb3RlbnRhaWxseSBhDQo+ID4gKyAgICAgICAgICogbmV3IHBh c2lkIGJpbmQuIEZldGNoIGd1ZXN0IHBhc2lkIGVudHJ5Lg0KPiA+ICsgICAgICAgICAqLw0KPiA+ ICsgICAgICAgIGlmICh2dGRfZGV2X2dldF9wZV9mcm9tX3Bhc2lkKHMsIGJ1c19uLCBkZXZmbiwg cGFzaWQsICZwZSkpIHsNCj4gPiArICAgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgICAvKg0KPiA+ICsgICAgICAgICAqIFN0ZXAgMzogcGFzaWQg ZW50cnkgZXhpc3RzLCB1cGRhdGUgcGFzaWQgY2FjaGUNCj4gPiArICAgICAgICAgKg0KPiA+ICsg ICAgICAgICAqIEhlcmUgbmVlZCB0byBjaGVjayBkb21haW4gSUQgc2luY2UgZ3Vlc3QgcGFzaWQg ZW50cnkNCj4gPiArICAgICAgICAgKiBleGlzdHMuIFdoYXQgbmVlZHMgdG8gZG8gYXJlOg0KPiA+ ICsgICAgICAgICAqICAgLSB1cGRhdGUgdGhlIHBjX2VudHJ5IGluIHRoZSB2dGRfcGFzaWRfYXMN Cj4gPiArICAgICAgICAgKiAgIC0gc2V0IHByb3BlciBwY19lbnRyeS5wYXNpZF9jYWNoZV9nZW4N Cj4gPiArICAgICAgICAgKiAgIC0gcGFzc2Rvd24gdGhlIGxhdGVzdCBndWVzdCBwYXNpZCBlbnRy eSBjb25maWcgdG8gaG9zdA0KPiA+ICsgICAgICAgICAqICAgICAod2lsbCBiZSBhZGRlZCBpbiBs YXRlciBwYXRjaCkNCj4gPiArICAgICAgICAgKi8NCj4gPiArICAgICAgICBpZiAoZG9tYWluX2lk ID09IHZ0ZF9wZV9nZXRfZG9tYWluX2lkKCZwZSkpIHsNCj4gPiArICAgICAgICAgICAgdnRkX2Zp bGxfaW5fcGVfY2FjaGUodnRkX3Bhc2lkX2FzLCAmcGUpOw0KPiA+ICsgICAgICAgIH0NCj4gPiAr ICAgIH0NCj4gDQo+IENvdWxkIHlvdSBleHBsYWluIHdoeSBkbyB3ZSBuZWVkIHRoaXMgd2hvbGUg Y2h1bmsgaWYgd2l0aCBbMl0gYWJvdmU/DQo+IEkgZmVlbCBsaWtlIHRoYXQnbGwgZG8gYWxsIHRo ZSB0aGluZ3Mgd2UgbmVlZCBhbHJlYWR5IChzZW5kDQo+IEJJTkQvVU5CSU5ELCB1cGRhdGUgcGFz aWQgZW50cnkgY2FjaGUpLg0KDQpZb3UgbWF5IHJlZmVyIHRvIHRoZSBjb21tZW50cyBhZGRlZCBm b3IgdGhpcyBmdW5jdGlvbiBpbiB0aGUgcGF0Y2gNCml0c2VsZi4gQWxzbywgSSdkIGxpa2UgdG8g dGFsayBtb3JlIHRvIGFzc2lzdCB5b3VyIHJldmlldy4gVGhlIGJhc2ljDQppZGVhIGlzIHRoYXQg dGhlIGFib3ZlIGNodW5rIFsyXSBvbmx5IGhhbmRsZXMgdGhlIGFscmVhZHkgY2FjaGVkDQpwYXNp ZC1lbnRyaWVzLiByaWdodD8gSXQgY292ZXJzIHRoZSBtb2RpZmljYXRpb25zIGZyb20gcHJlc2Vu dCBwYXNpZA0KZW50cnkgdG8gYmUgZWl0aGVyIG5vbi1wcmVzZW50IG9yIHByZXNlbnQgbW9kaWZp Y2F0aW9ucy4gV2hpbGUgZm9yIGENCm5vbi1wcmVzZW50IHBhc2lkIGVudHJ5IHRvIHByZXNlbnQg bW9kaWZpY2F0aW9uLCBjaHVuayBbMl0gaGFzIG5vIGlkZWEuDQpUbyBjb3ZlciBzdWNoIHBvc3Np YmlsaXRpZXMsIG5lZWRzIHRvIGxvb3AgYWxsIGRldmljZXMgYW5kIGNoZWNrIHRoZQ0KY29ycmVz cG9uZGluZyBwYXNpZCBlbnRyaWVzLiBUaGlzIGlzIHdoYXQgSSBwcm9wb3NlZCBpbiBSRkMgdjEu IEJ1dCBJDQpkb27igJl0IGxpa2UgaXQuIFRvIGJlIG1vcmUgZWZmaWNpZW50LCBJIHRoaW5rIHdl IGNhbiBqdXN0IGxvb3AgYWxsDQpwYXNzdGhydSBkZXZpY2VzIHNpbmNlIG9ubHkgcGFzc3RocnUg ZGV2aWNlcyBjYXJlIGFib3V0IHRoZQ0Kbm9uLXByZXNlbnQgdG8gcHJlc2VudCBjaGFuZ2VzLiBG b3IgZW11bGF0ZWQgZGV2aWNlcywgaXRzIHBhc2lkIGNhY2hlDQpjYW4gYmUgY3JlYXRlZCBpbiBk b190cmFuc2xhdGUoKSBmb3IgZW11bGF0ZWQgUEFTSUQgdGFnZ2VkIERNQXMuDQoNCj4gDQo+ID4g KyAgICB2dGRfaW9tbXVfdW5sb2NrKHMpOw0KPiA+ICAgICAgcmV0dXJuIDA7DQo+ID4gIH0NCj4g Pg0KPiA+ICsvKioNCj4gPiArICogQ2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhvbGQg aW9tbXVfbG9jaw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgdnRkX3Bhc2lkX2NhY2hlX3Jl c2V0KEludGVsSU9NTVVTdGF0ZSAqcykNCj4gPiArew0KPiA+ICsgICAgVlREUEFTSURDYWNoZUlu Zm8gcGNfaW5mbzsNCj4gPiArDQo+ID4gKyAgICB0cmFjZV92dGRfcGFzaWRfY2FjaGVfcmVzZXQo KTsNCj4gPiArDQo+ID4gKyAgICBwY19pbmZvLmZsYWdzID0gMDsNCj4gDQo+IE1heWJlIGFsc28g aW50cm9kdWNlIGEgZmxhZyBmb3IgR0xPQkFMIGZsdXNoIHRvIGJlIGNsZWFyPw0KDQpXaWxsIGRv IGl0LiBUaGFua3MuDQoNCj4gPiArDQo+ID4gKyAgICAvKg0KPiA+ICsgICAgICogUmVzZXQgcGFz aWQgY2FjaGUgaXMgYSBiaWcgaGFtbWVyLCBzbyB1c2UgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVt b3ZlDQo+ID4gKyAgICAgKiB3aGljaCB3aWxsIGZyZWUgdGhlIHZ0ZF9wYXNpZF9hcyBpbnN0YW5j ZXMuDQo+ID4gKyAgICAgKi8NCj4gPiArICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoX3JlbW92ZShz LT52dGRfcGFzaWRfYXMsIHZ0ZF9mbHVzaF9wYXNpZCwgJnBjX2luZm8pOw0KPiA+ICsgICAgcy0+ cGFzaWRfY2FjaGVfZ2VuID0gMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgc3RhdGljIGludCB2dGRf cGFzaWRfY2FjaGVfZ3NpKEludGVsSU9NTVVTdGF0ZSAqcykNCj4gPiAgew0KPiA+ICsgICAgdHJh Y2VfdnRkX3Bhc2lkX2NhY2hlX2dzaSgpOw0KPiA+ICsNCj4gPiArICAgIHZ0ZF9pb21tdV9sb2Nr KHMpOw0KPiA+ICsgICAgdnRkX3Bhc2lkX2NhY2hlX3Jlc2V0KHMpOw0KPiA+ICsgICAgdnRkX2lv bW11X3VubG9jayhzKTsNCj4gPiArDQo+ID4gKyAgICAvKg0KPiA+ICsgICAgICogVE9ETzogR2xv YmFsIFBBU0lEIGNhY2hlIGludmFsaWRhdGlvbiBtYXkgYmUNCj4gPiArICAgICAqIGlzc3VlZCB3 cm9uZ2x5IGJ5IHByb2dyYW1tZXIsIHRvIGJlIHNhZmUsIGFmdGVyDQo+ID4gKyAgICAgKiBpbnZh bGlkYXRpbmcgdGhlIHBhc2lkIGNhY2hlcywgZW11bGF0b3IgbmVlZHMNCj4gPiArICAgICAqIHRv IHJlcGxheSB0aGUgcGFzaWQgYmluZGluZ3MgYnkgd2Fsa2luZyBndWVzdA0KPiA+ICsgICAgICog cGFzaWQgZGlyIGFuZCBwYXNpZCB0YWJsZS4NCj4gPiArICAgICAqLw0KPiA+ICAgICAgcmV0dXJu IDA7DQo+ID4gIH0NCj4gPg0KPiA+IEBAIC0zNjYwLDcgKzQwMTEsOSBAQCBWVERJT01NVUNvbnRl eHQNCj4gKnZ0ZF9maW5kX2FkZF9pYyhJbnRlbElPTU1VU3RhdGUgKnMsDQo+ID4gICAgICAgICAg dnRkX2Rldl9pYy0+ZGV2Zm4gPSAodWludDhfdClkZXZmbjsNCj4gPiAgICAgICAgICB2dGRfZGV2 X2ljLT5pb21tdV9zdGF0ZSA9IHM7DQo+ID4gICAgICAgICAgaW9tbXVfY29udGV4dF9pbml0KCZ2 dGRfZGV2X2ljLT5pb21tdV9jb250ZXh0KTsNCj4gPiArICAgICAgICBRTElTVF9JTlNFUlRfSEVB RCgmcy0+dnRkX2Rldl9pY19saXN0LCB2dGRfZGV2X2ljLCBuZXh0KTsNCj4gPiAgICAgIH0NCj4g PiArDQo+ID4gICAgICByZXR1cm4gdnRkX2Rldl9pYzsNCj4gPiAgfQ0KPiA+DQo+ID4gQEAgLTQw NzQsNiArNDQyNyw3IEBAIHN0YXRpYyB2b2lkIHZ0ZF9yZWFsaXplKERldmljZVN0YXRlICpkZXYs IEVycm9yICoqZXJycCkNCj4gPiAgICAgIH0NCj4gPg0KPiA+ICAgICAgUUxJU1RfSU5JVCgmcy0+ dnRkX2FzX3dpdGhfbm90aWZpZXJzKTsNCj4gPiArICAgIFFMSVNUX0lOSVQoJnMtPnZ0ZF9kZXZf aWNfbGlzdCk7DQo+ID4gICAgICBxZW11X211dGV4X2luaXQoJnMtPmlvbW11X2xvY2spOw0KPiA+ ICAgICAgbWVtc2V0KHMtPnZ0ZF9hc19ieV9idXNfbnVtLCAwLCBzaXplb2Yocy0+dnRkX2FzX2J5 X2J1c19udW0pKTsNCj4gPiAgICAgIG1lbW9yeV9yZWdpb25faW5pdF9pbygmcy0+Y3NybWVtLCBP QkpFQ1QocyksICZ2dGRfbWVtX29wcywgcywNCj4gPiBAQCAtNDA5OSw2ICs0NDUzLDggQEAgc3Rh dGljIHZvaWQgdnRkX3JlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwgRXJyb3IgKiplcnJwKQ0KPiA+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19mcmVlLCBnX2ZyZWUpOw0K PiA+ICAgICAgcy0+dnRkX2FzX2J5X2J1c3B0ciA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCh2dGRf dWludDY0X2hhc2gsDQo+IHZ0ZF91aW50NjRfZXF1YWwsDQo+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2ZyZWUsIGdfZnJlZSk7DQo+ID4gKyAgICBz LT52dGRfcGFzaWRfYXMgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwodnRkX3Bhc2lkX2FzX2tleV9o YXNoLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0ZF9wYXNpZF9h c19rZXlfZXF1YWwsIGdfZnJlZSwgZ19mcmVlKTsNCj4gPiAgICAgIHZ0ZF9pbml0KHMpOw0KPiA+ ICAgICAgc3lzYnVzX21taW9fbWFwKFNZU19CVVNfREVWSUNFKHMpLCAwLCBRMzVfSE9TVF9CUklE R0VfSU9NTVVfQUREUik7DQo+ID4gICAgICBwY2lfc2V0dXBfaW9tbXUoYnVzLCAmdnRkX2lvbW11 X29wcywgZGV2KTsNCj4gPiBkaWZmIC0tZ2l0IGEvaHcvaTM4Ni9pbnRlbF9pb21tdV9pbnRlcm5h bC5oIGIvaHcvaTM4Ni9pbnRlbF9pb21tdV9pbnRlcm5hbC5oDQo+ID4gaW5kZXggODc5MjExZS4u MTI4NzNlMSAxMDA2NDQNCj4gPiAtLS0gYS9ody9pMzg2L2ludGVsX2lvbW11X2ludGVybmFsLmgN Cj4gPiArKysgYi9ody9pMzg2L2ludGVsX2lvbW11X2ludGVybmFsLmgNCj4gPiBAQCAtMzExLDYg KzMxMSw3IEBAIHR5cGVkZWYgZW51bSBWVERGYXVsdFJlYXNvbiB7DQo+ID4gICAgICBWVERfRlJf SVJfU0lEX0VSUiA9IDB4MjYsICAgLyogSW52YWxpZCBTb3VyY2UtSUQgKi8NCj4gPg0KPiA+ICAg ICAgVlREX0ZSX1BBU0lEX1RBQkxFX0lOViA9IDB4NTgsICAvKkludmFsaWQgUEFTSUQgdGFibGUg ZW50cnkgKi8NCj4gPiArICAgIFZURF9GUl9QQVNJRF9FTlRSWV9QID0gMHg1OSwgLyogVGhlIFBy ZXNlbnQoUCkgZmllbGQgb2YgcGFzaWR0LWVudHJ5IGlzIDAgKi8NCj4gPg0KPiA+ICAgICAgLyog VGhpcyBpcyBub3QgYSBub3JtYWwgZmF1bHQgcmVhc29uLiBXZSB1c2UgdGhpcyB0byBpbmRpY2F0 ZSBzb21lIGZhdWx0cw0KPiA+ICAgICAgICogdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgdGhl IFZULWQgc3BlY2lmaWNhdGlvbi4NCj4gPiBAQCAtNDgyLDYgKzQ4MywxNSBAQCBzdHJ1Y3QgVlRE Um9vdEVudHJ5IHsNCj4gPiAgfTsNCj4gPiAgdHlwZWRlZiBzdHJ1Y3QgVlREUm9vdEVudHJ5IFZU RFJvb3RFbnRyeTsNCj4gPg0KPiA+ICtzdHJ1Y3QgVlREUEFTSURDYWNoZUluZm8gew0KPiA+ICsj ZGVmaW5lIFZURF9QQVNJRF9DQUNIRV9ET01TSSAgICgxVUxMIDw8IDApOw0KPiA+ICsjZGVmaW5l IFZURF9QQVNJRF9DQUNIRV9QQVNJRFNJICgxVUxMIDw8IDEpOw0KPiA+ICsgICAgdWludDMyX3Qg ZmxhZ3M7DQo+ID4gKyAgICB1aW50MTZfdCBkb21haW5faWQ7DQo+ID4gKyAgICB1aW50MzJfdCBw YXNpZDsNCj4gPiArfTsNCj4gPiArdHlwZWRlZiBzdHJ1Y3QgVlREUEFTSURDYWNoZUluZm8gVlRE UEFTSURDYWNoZUluZm87DQo+ID4gKw0KPiA+ICAvKiBNYXNrcyBmb3Igc3RydWN0IFZURFJvb3RF bnRyeSAqLw0KPiA+ICAjZGVmaW5lIFZURF9ST09UX0VOVFJZX1AgICAgICAgICAgICAxVUxMDQo+ ID4gICNkZWZpbmUgVlREX1JPT1RfRU5UUllfQ1RQICAgICAgICAgICh+MHhmZmZVTEwpDQo+ID4g ZGlmZiAtLWdpdCBhL2h3L2kzODYvdHJhY2UtZXZlbnRzIGIvaHcvaTM4Ni90cmFjZS1ldmVudHMN Cj4gPiBpbmRleCA2ZGE4YmQyLi43OTEyYWUxIDEwMDY0NA0KPiA+IC0tLSBhL2h3L2kzODYvdHJh Y2UtZXZlbnRzDQo+ID4gKysrIGIvaHcvaTM4Ni90cmFjZS1ldmVudHMNCj4gPiBAQCAtMjIsNiAr MjIsNyBAQCB2dGRfaW52X3FpX2hlYWQodWludDE2X3QgaGVhZCkgInJlYWQgaGVhZCAlZCINCj4g PiAgdnRkX2ludl9xaV90YWlsKHVpbnQxNl90IGhlYWQpICJ3cml0ZSB0YWlsICVkIg0KPiA+ICB2 dGRfaW52X3FpX2ZldGNoKHZvaWQpICIiDQo+ID4gIHZ0ZF9jb250ZXh0X2NhY2hlX3Jlc2V0KHZv aWQpICIiDQo+ID4gK3Z0ZF9wYXNpZF9jYWNoZV9yZXNldCh2b2lkKSAiIg0KPiA+ICB2dGRfcGFz aWRfY2FjaGVfZ3NpKHZvaWQpICIiDQo+ID4gIHZ0ZF9wYXNpZF9jYWNoZV9kc2kodWludDE2X3Qg ZG9tYWluKSAiRG9taWFuIHNsZWN0aXZlIFBDIGludmFsaWRhdGlvbiBkb21haW4NCj4gMHglIlBS SXgxNg0KPiA+ICB2dGRfcGFzaWRfY2FjaGVfcHNpKHVpbnQxNl90IGRvbWFpbiwgdWludDMyX3Qg cGFzaWQpICJQQVNJRCBzbGVjdGl2ZSBQQw0KPiBpbnZhbGlkYXRpb24gZG9tYWluIDB4JSJQUkl4 MTYiIHBhc2lkIDB4JSJQUkl4MzINCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ody9pMzg2L2lu dGVsX2lvbW11LmggYi9pbmNsdWRlL2h3L2kzODYvaW50ZWxfaW9tbXUuaA0KPiA+IGluZGV4IDBk NDk0ODAuLmQ2OTNmNzEgMTAwNjQ0DQo+ID4gLS0tIGEvaW5jbHVkZS9ody9pMzg2L2ludGVsX2lv bW11LmgNCj4gPiArKysgYi9pbmNsdWRlL2h3L2kzODYvaW50ZWxfaW9tbXUuaA0KPiA+IEBAIC02 OSw2ICs2OSw4IEBAIHR5cGVkZWYgdW5pb24gVlREX0lSX01TSUFkZHJlc3MgVlREX0lSX01TSUFk ZHJlc3M7DQo+ID4gIHR5cGVkZWYgc3RydWN0IFZURFBBU0lERGlyRW50cnkgVlREUEFTSUREaXJF bnRyeTsNCj4gPiAgdHlwZWRlZiBzdHJ1Y3QgVlREUEFTSURFbnRyeSBWVERQQVNJREVudHJ5Ow0K PiA+ICB0eXBlZGVmIHN0cnVjdCBWVERJT01NVUNvbnRleHQgVlRESU9NTVVDb250ZXh0Ow0KPiA+ ICt0eXBlZGVmIHN0cnVjdCBWVERQQVNJRENhY2hlRW50cnkgVlREUEFTSURDYWNoZUVudHJ5Ow0K PiA+ICt0eXBlZGVmIHN0cnVjdCBWVERQQVNJREFkZHJlc3NTcGFjZSBWVERQQVNJREFkZHJlc3NT cGFjZTsNCj4gPg0KPiA+ICAvKiBDb250ZXh0LUVudHJ5ICovDQo+ID4gIHN0cnVjdCBWVERDb250 ZXh0RW50cnkgew0KPiA+IEBAIC0xMDEsNiArMTAzLDMxIEBAIHN0cnVjdCBWVERQQVNJREVudHJ5 IHsNCj4gPiAgICAgIHVpbnQ2NF90IHZhbFs4XTsNCj4gPiAgfTsNCj4gPg0KPiA+ICtzdHJ1Y3Qg cGFzaWRfa2V5IHsNCj4gPiArICAgIHVpbnQzMl90IHBhc2lkOw0KPiA+ICsgICAgdWludDE2X3Qg c2lkOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IFZURFBBU0lEQ2FjaGVFbnRyeSB7DQo+ ID4gKyAgICAvKg0KPiA+ICsgICAgICogVGhlIGNhY2hlIGVudHJ5IGlzIG9ic29sZXRlIGlmDQo+ ID4gKyAgICAgKiBwYXNpZF9jYWNoZV9nZW4hPUludGVsSU9NTVVTdGF0ZS5wYXNpZF9jYWNoZV9n ZW4NCj4gPiArICAgICAqLw0KPiA+ICsgICAgdWludDMyX3QgcGFzaWRfY2FjaGVfZ2VuOw0KPiA+ ICsgICAgc3RydWN0IFZURFBBU0lERW50cnkgcGFzaWRfZW50cnk7DQo+ID4gK307DQo+ID4gKw0K PiA+ICtzdHJ1Y3QgVlREUEFTSURBZGRyZXNzU3BhY2Ugew0KPiA+ICsgICAgVlREQnVzICp2dGRf YnVzOw0KPiA+ICsgICAgdWludDhfdCBkZXZmbjsNCj4gPiArICAgIEFkZHJlc3NTcGFjZSBhczsN Cj4gPiArICAgIHVpbnQzMl90IHBhc2lkOw0KPiA+ICsgICAgSW50ZWxJT01NVVN0YXRlICppb21t dV9zdGF0ZTsNCj4gPiArICAgIFZURENvbnRleHRDYWNoZUVudHJ5IGNvbnRleHRfY2FjaGVfZW50 cnk7DQo+ID4gKyAgICBRTElTVF9FTlRSWShWVERQQVNJREFkZHJlc3NTcGFjZSkgbmV4dDsNCj4g PiArICAgIFZURFBBU0lEQ2FjaGVFbnRyeSBwYXNpZF9jYWNoZV9lbnRyeTsNCj4gPiArfTsNCj4g PiArDQo+ID4gIHN0cnVjdCBWVERBZGRyZXNzU3BhY2Ugew0KPiA+ICAgICAgUENJQnVzICpidXM7 DQo+ID4gICAgICB1aW50OF90IGRldmZuOw0KPiA+IEBAIC0xMjEsNiArMTQ4LDcgQEAgc3RydWN0 IFZURElPTU1VQ29udGV4dCB7DQo+ID4gICAgICBWVERCdXMgKnZ0ZF9idXM7DQo+ID4gICAgICB1 aW50OF90IGRldmZuOw0KPiA+ICAgICAgSU9NTVVDb250ZXh0IGlvbW11X2NvbnRleHQ7DQo+ID4g KyAgICBRTElTVF9FTlRSWShWVERJT01NVUNvbnRleHQpIG5leHQ7DQo+ID4gICAgICBJbnRlbElP TU1VU3RhdGUgKmlvbW11X3N0YXRlOw0KPiA+ICB9Ow0KPiA+DQo+ID4gQEAgLTI2OSw5ICsyOTcs MTQgQEAgc3RydWN0IEludGVsSU9NTVVTdGF0ZSB7DQo+ID4NCj4gPiAgICAgIEdIYXNoVGFibGUg KnZ0ZF9hc19ieV9idXNwdHI7ICAgLyogVlREQnVzIG9iamVjdHMgaW5kZXhlZCBieSBQQ0lCdXMq DQo+IHJlZmVyZW5jZSAqLw0KPiA+ICAgICAgVlREQnVzICp2dGRfYXNfYnlfYnVzX251bVtWVERf UENJX0JVU19NQVhdOyAvKiBWVERCdXMgb2JqZWN0cyBpbmRleGVkDQo+IGJ5IGJ1cyBudW1iZXIg Ki8NCj4gPiArICAgIEdIYXNoVGFibGUgKnZ0ZF9wYXNpZF9hczsgICAvKiBWVERQQVNJREFkZHJl c3NTcGFjZSBvYmplY3RzICovDQo+ID4gKyAgICB1aW50MzJfdCBwYXNpZF9jYWNoZV9nZW47ICAg LyogU2hvdWxkIGJlIGluIFsxLE1BWF0gKi8NCj4gPiAgICAgIC8qIGxpc3Qgb2YgcmVnaXN0ZXJl ZCBub3RpZmllcnMgKi8NCj4gPiAgICAgIFFMSVNUX0hFQUQoLCBWVERBZGRyZXNzU3BhY2UpIHZ0 ZF9hc193aXRoX25vdGlmaWVyczsNCj4gPg0KPiA+ICsgICAgLyogbGlzdCBvZiByZWdpc3RlcmVk IG5vdGlmaWVycyAqLw0KPiA+ICsgICAgUUxJU1RfSEVBRCgsIFZURElPTU1VQ29udGV4dCkgdnRk X2Rldl9pY19saXN0Ow0KPiA+ICsNCj4gPiAgICAgIC8qIGludGVycnVwdCByZW1hcHBpbmcgKi8N Cj4gPiAgICAgIGJvb2wgaW50cl9lbmFibGVkOyAgICAgICAgICAgICAgLyogV2hldGhlciBndWVz dCBlbmFibGVkIElSICovDQo+ID4gICAgICBkbWFfYWRkcl90IGludHJfcm9vdDsgICAgICAgICAg IC8qIEludGVycnVwdCByZW1hcHBpbmcgdGFibGUgcG9pbnRlciAqLw0KPiA+IEBAIC0yODgsNyAr MzIxLDggQEAgc3RydWN0IEludGVsSU9NTVVTdGF0ZSB7DQo+ID4NCj4gPiAgICAgIC8qDQo+ID4g ICAgICAgKiBQcm90ZWN0cyBJT01NVSBzdGF0ZXMgaW4gZ2VuZXJhbC4gIEN1cnJlbnRseSBpdCBw cm90ZWN0cyB0aGUNCj4gPiAtICAgICAqIHBlci1JT01NVSBJT1RMQiBjYWNoZSwgYW5kIGNvbnRl eHQgZW50cnkgY2FjaGUgaW4gVlREQWRkcmVzc1NwYWNlLg0KPiA+ICsgICAgICogcGVyLUlPTU1V IElPVExCIGNhY2hlLCBhbmQgY29udGV4dCBlbnRyeSBjYWNoZSBpbiBWVERBZGRyZXNzU3BhY2Us DQo+ID4gKyAgICAgKiBhbmQgcGFzaWQgY2FjaGUgaW4gVlREUEFTSURBZGRyZXNzU3BhY2UuDQo+ ID4gICAgICAgKi8NCj4gPiAgICAgIFFlbXVNdXRleCBpb21tdV9sb2NrOw0KPiA+ICB9Ow0KPiA+ IC0tDQo+ID4gMi43LjQNCj4gPg0KPiANCj4gLS0NCj4gUGV0ZXIgWHUNCg0KVGhhbmtzLA0KWWkg TGl1DQo=