Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp1979629ybh; Sun, 8 Mar 2020 18:35:25 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvl7o5ZaCWwsamkQWBm34FKZYcSPANMIqKNVQxvd/rtJuV35LRg5HFcTusKDU9ndpJSYuZJ X-Received: by 2002:a9d:5e8e:: with SMTP id f14mr2364281otl.303.1583717725230; Sun, 08 Mar 2020 18:35:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583717725; cv=none; d=google.com; s=arc-20160816; b=nm+9z4fOBQE4ReAnzqjRyTkus/rzaI0aEL0ugwtF1XVy7p4vMf438etNUWsdDe6ktu mbdOWVpnZnVwgLhAlGi8vaqpxlPzuRfuF1QOKtgUSz+RN9GURc9VFNnMjnyhblBZfYax dO4Tv0Nu5koKqnyADhQAG9XH9Wmh1y9PIauIM7RRp/KDud2rEGBhArP0PuuHQRD6p0Rq eJC9yr/N7kKVWhYPidREit97jrIlt8eCQKAsRX+kuLgaOa4/rojMuaw4mvLW/AxTrngG vT7x3e4n0O++ocL6iPXdx4wwnsSyF3iKpKV5tFtUJiA2ly9zSu9F3b3SSOb3i1fAYKZe vDog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :dlp-reaction:dlp-version:dlp-product:content-language :accept-language:references:message-id:date:thread-index :thread-topic:subject:cc:to:from; bh=lQW8VTGDhQ7/x3MuPMF+PdWmDxlTO959uxQHMpL05E4=; b=shoIcRSWtaXl2/644mW/ZpyuCB/LvJiwRWFW8Q0e7rQDSg5HnBy7B0n7fRfQiXPX2N cDGksiENMCUgJo/DvtV13+yyTMK5fQTtoECn2poxU/hzslBBCNmO3pnsM8hLXD+v1oM4 BL3n7YdhFd3g+PQEVjt255V6eOSWZRFdGyhzteH74Vrj8chhH6WUSWAfON2hP88WO+ky 0C4jgwcSa6c3PbECt9elX2g/aexv8z9sUrvespzUQcSMrm2sGTXfjGvnplundDSj3PLW 7cRpjz17nlHjLw7XUEpdUjTGXgxu/n+U05PMXDIbmYoOTN/9hsT7ykdB5dZQoSTMTJVR pQ2A== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r3si2478679otc.58.2020.03.08.18.35.12; Sun, 08 Mar 2020 18:35:25 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726749AbgCIBeA (ORCPT + 99 others); Sun, 8 Mar 2020 21:34:00 -0400 Received: from mga03.intel.com ([134.134.136.65]:35138 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726346AbgCIBd7 (ORCPT ); Sun, 8 Mar 2020 21:33:59 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Mar 2020 18:33:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,530,1574150400"; d="scan'208";a="233887301" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga007.fm.intel.com with ESMTP; 08 Mar 2020 18:33:58 -0700 Received: from fmsmsx125.amr.corp.intel.com (10.18.125.40) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 8 Mar 2020 18:33:57 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX125.amr.corp.intel.com (10.18.125.40) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 8 Mar 2020 18:33:51 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.206]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.137]) with mapi id 14.03.0439.000; Mon, 9 Mar 2020 09:33:49 +0800 From: "Tian, Kevin" To: Alex Williamson CC: "kvm@vger.kernel.org" , "linux-pci@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "dev@dpdk.org" , "mtosatti@redhat.com" , "thomas@monjalon.net" , "bluca@debian.org" , "jerinjacobk@gmail.com" , "Richardson, Bruce" , "cohuck@redhat.com" Subject: RE: [PATCH v2 3/7] vfio/pci: Introduce VF token Thread-Topic: [PATCH v2 3/7] vfio/pci: Introduce VF token Thread-Index: AQHV51YI52su8gffRkOPjcjW9Q2JM6grPNwAgA6jCgCAAW544P//95cAgAEiRICAAps6AIAAjtDggAACEZA= Date: Mon, 9 Mar 2020 01:33:48 +0000 Message-ID: References: <158213716959.17090.8399427017403507114.stgit@gimli.home> <158213845243.17090.15563257812711358228.stgit@gimli.home> <20200305111734.4025ce2f@w520.home> <20200306083906.13c9a762@x1.home> <20200308184606.3a670ab5@x1.home> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNjgxM2FjMDAtNmZhZi00MzRiLWIxOWItNGU2MDA3ZmY2YTlhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiR0hwSVJFZ0t0azlmSFwvVUxUbE55XC83VnVJc2F6QkFBQVJEazQ2cExXTGdGaFBKanFETFRQWlpzSytNZzYxMmVXIn0= dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBGcm9tOiBUaWFuLCBLZXZpbg0KPiBTZW50OiBNb25kYXksIE1hcmNoIDksIDIwMjAgOToyMiBB TQ0KPiANCj4gPiBGcm9tOiBBbGV4IFdpbGxpYW1zb24gPGFsZXgud2lsbGlhbXNvbkByZWRoYXQu Y29tPg0KPiA+IFNlbnQ6IE1vbmRheSwgTWFyY2ggOSwgMjAyMCA4OjQ2IEFNDQo+ID4NCj4gPiBP biBTYXQsIDcgTWFyIDIwMjAgMDE6MDQ6NDEgKzAwMDANCj4gPiAiVGlhbiwgS2V2aW4iIDxrZXZp bi50aWFuQGludGVsLmNvbT4gd3JvdGU6DQo+ID4NCj4gPiA+ID4gRnJvbTogQWxleCBXaWxsaWFt c29uIDxhbGV4LndpbGxpYW1zb25AcmVkaGF0LmNvbT4NCj4gPiA+ID4gU2VudDogRnJpZGF5LCBN YXJjaCA2LCAyMDIwIDExOjM5IFBNDQo+ID4gPiA+DQo+ID4gPiA+IE9uIEZyaSwgNiBNYXIgMjAy MCAwODozMjo0MCArMDAwMA0KPiA+ID4gPiAiVGlhbiwgS2V2aW4iIDxrZXZpbi50aWFuQGludGVs LmNvbT4gd3JvdGU6DQo+ID4gPiA+DQo+ID4gPiA+ID4gPiBGcm9tOiBBbGV4IFdpbGxpYW1zb24g PGFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tPg0KPiA+ID4gPiA+ID4gU2VudDogRnJpZGF5LCBN YXJjaCA2LCAyMDIwIDI6MTggQU0NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBPbiBUdWUsIDI1 IEZlYiAyMDIwIDAyOjU5OjM3ICswMDAwDQo+ID4gPiA+ID4gPiAiVGlhbiwgS2V2aW4iIDxrZXZp bi50aWFuQGludGVsLmNvbT4gd3JvdGU6DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IEZy b206IEFsZXggV2lsbGlhbXNvbg0KPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFRodXJzZGF5LCBGZWJy dWFyeSAyMCwgMjAyMCAyOjU0IEFNDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBJ ZiB3ZSBlbmFibGUgU1ItSU9WIG9uIGEgdmZpby1wY2kgb3duZWQgUEYsIHRoZSByZXN1bHRpbmcg VkZzIGFyZQ0KPiA+IG5vdA0KPiA+ID4gPiA+ID4gPiA+IGZ1bGx5IGlzb2xhdGVkIGZyb20gdGhl IFBGLiAgVGhlIFBGIGNhbiBhbHdheXMgY2F1c2UgYSBkZW5pYWwgb2YNCj4gPiBzZXJ2aWNlDQo+ ID4gPiA+ID4gPiA+ID4gdG8gdGhlIFZGLCBldmVuIGlmIGJ5IHNpbXBseSByZXNldHRpbmcgaXRz ZWxmLiAgVGhlIGRlZ3JlZSB0byB3aGljaA0KPiBhDQo+ID4gUEYNCj4gPiA+ID4gPiA+ID4gPiBj YW4gYWNjZXNzIHRoZSBkYXRhIHBhc3NlZCB0aHJvdWdoIGEgVkYgb3IgaW50ZXJmZXJlIHdpdGgg aXRzDQo+ID4gPiA+IG9wZXJhdGlvbg0KPiA+ID4gPiA+ID4gPiA+IGlzIGRlcGVuZGVudCBvbiBh IGdpdmVuIFNSLUlPViBpbXBsZW1lbnRhdGlvbi4gIFRoZXJlZm9yZSB3ZQ0KPiA+IHdhbnQNCj4g PiA+ID4gdG8NCj4gPiA+ID4gPiA+ID4gPiBhdm9pZCBhIHNjZW5hcmlvIHdoZXJlIGFuIGV4aXN0 aW5nIHZmaW8tcGNpIGJhc2VkIHVzZXJzcGFjZQ0KPiBkcml2ZXINCj4gPiA+ID4gbWlnaHQNCj4g PiA+ID4gPiA+ID4gPiBhc3N1bWUgdGhlIFBGIGRyaXZlciBpcyB0cnVzdGVkLCBmb3IgZXhhbXBs ZSBhc3NpZ25pbmcgYSBQRiB0bw0KPiBvbmUNCj4gPiBWTQ0KPiA+ID4gPiA+ID4gPiA+IGFuZCBW RiB0byBhbm90aGVyIHdpdGggc29tZSBleHBlY3RhdGlvbiBvZiBpc29sYXRpb24uICBJT01NVQ0K PiA+ID4gPiBncm91cGluZw0KPiA+ID4gPiA+ID4gPiA+IGNvdWxkIGJlIGEgc29sdXRpb24gdG8g dGhpcywgYnV0IGltcG9zZXMgYW4gdW5uZWNlc3NhcmlseSBzdHJvbmcNCj4gPiA+ID4gPiA+ID4g PiByZWxhdGlvbnNoaXAgYmV0d2VlbiBQRiBhbmQgVkYgZHJpdmVycyBpZiB0aGV5IG5lZWQgdG8g b3BlcmF0ZQ0KPiA+IHdpdGgNCj4gPiA+ID4gdGhlDQo+ID4gPiA+ID4gPiA+ID4gc2FtZSBJT01N VSBjb250ZXh0LiAgSW5zdGVhZCB3ZSBpbnRyb2R1Y2UgYSAiVkYgdG9rZW4iLCB3aGljaA0KPiA+ IGlzDQo+ID4gPiA+ID4gPiA+ID4gZXNzZW50aWFsbHkganVzdCBhIHNoYXJlZCBzZWNyZXQgYmV0 d2VlbiBQRiBhbmQgVkYgZHJpdmVycywNCj4gPiA+ID4gaW1wbGVtZW50ZWQNCj4gPiA+ID4gPiA+ ID4gPiBhcyBhIFVVSUQuDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBUaGUgVkYg dG9rZW4gY2FuIGJlIHNldCBieSBhIHZmaW8tcGNpIGJhc2VkIFBGIGRyaXZlciBhbmQgbXVzdA0K PiBiZQ0KPiA+ID4gPiBrbm93bg0KPiA+ID4gPiA+ID4gPiA+IGJ5IHRoZSB2ZmlvLXBjaSBiYXNl ZCBWRiBkcml2ZXIgaW4gb3JkZXIgdG8gZ2FpbiBhY2Nlc3MgdG8gdGhlDQo+IGRldmljZS4NCj4g PiA+ID4gPiA+ID4gPiBUaGlzIGFsbG93cyB0aGUgZGVncmVlIHRvIHdoaWNoIHRoaXMgVkYgdG9r ZW4gaXMgY29uc2lkZXJlZA0KPiBzZWNyZXQNCj4gPiB0bw0KPiA+ID4gPiBiZQ0KPiA+ID4gPiA+ ID4gPiA+IGRldGVybWluZWQgYnkgdGhlIGFwcGxpY2F0aW9ucyBhbmQgZW52aXJvbm1lbnQuICBG b3IgZXhhbXBsZSBhDQo+ID4gVk0NCj4gPiA+ID4gPiA+IG1pZ2h0DQo+ID4gPiA+ID4gPiA+ID4g Z2VuZXJhdGUgYSByYW5kb20gVVVJRCBrbm93biBvbmx5IGludGVybmFsbHkgdG8gdGhlIGh5cGVy dmlzb3INCj4gPiA+ID4gd2hpbGUgYQ0KPiA+ID4gPiA+ID4gPiA+IHVzZXJzcGFjZSBuZXR3b3Jr aW5nIGFwcGxpYW5jZSBtaWdodCB1c2UgYSBzaGFyZWQsIG9yIGV2ZW4gd2VsbA0KPiA+ID4gPiBr bm93LA0KPiA+ID4gPiA+ID4gPiA+IFVVSUQgYW1vbmcgdGhlIGFwcGxpY2F0aW9uIGRyaXZlcnMu DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBUbyBpbmNvcnBvcmF0ZSB0aGlzIFZG IHRva2VuLCB0aGUgVkZJT19HUk9VUF9HRVRfREVWSUNFX0ZEDQo+ID4gPiA+IGludGVyZmFjZQ0K PiA+ID4gPiA+ID4gaXMNCj4gPiA+ID4gPiA+ID4gPiBleHRlbmRlZCB0byBhY2NlcHQga2V5PXZh bHVlIHBhaXJzIGluIGFkZGl0aW9uIHRvIHRoZSBkZXZpY2UNCj4gbmFtZS4NCj4gPiA+ID4gVGhp cw0KPiA+ID4gPiA+ID4gPiA+IGFsbG93cyB1cyB0byBtb3N0IGVhc2lseSBkZW55IHVzZXIgYWNj ZXNzIHRvIHRoZSBkZXZpY2Ugd2l0aG91dA0KPiByaXNrDQo+ID4gPiA+ID4gPiA+ID4gdGhhdCBl eGlzdGluZyB1c2Vyc3BhY2UgZHJpdmVycyBhc3N1bWUgcmVnaW9uIG9mZnNldHMsIElSUXMsIGFu ZA0KPiA+IG90aGVyDQo+ID4gPiA+ID4gPiA+ID4gZGV2aWNlIGZlYXR1cmVzLCBsZWFkaW5nIHRv IG1vcmUgZWxhYm9yYXRlIGVycm9yIHBhdGhzLiAgVGhlDQo+ID4gZm9ybWF0IG9mDQo+ID4gPiA+ ID4gPiA+ID4gdGhlc2Ugb3B0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSB0aGUgZm9ybToNCj4g PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICIkREVWSUNFX05BTUUgJE9QVElPTjE9JFZB TFVFMSAkT1BUSU9OMj0kVkFMVUUyIg0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g V2hlcmUgdGhlIGRldmljZSBuYW1lIGlzIGFsd2F5cyBwcm92aWRlZCBmaXJzdCBmb3IgY29tcGF0 aWJpbGl0eQ0KPiA+IGFuZA0KPiA+ID4gPiA+ID4gPiA+IGFkZGl0aW9uYWwgb3B0aW9ucyBhcmUg c3BlY2lmaWVkIGluIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3QuICBUaGUNCj4gPiA+ID4gPiA+ID4g PiByZWxhdGlvbiBiZXR3ZWVuIGFuZCByZXF1aXJlbWVudHMgZm9yIHRoZSBhZGRpdGlvbmFsIG9w dGlvbnMNCj4gd2lsbA0KPiA+IGJlDQo+ID4gPiA+ID4gPiA+ID4gdmZpbyBidXMgZHJpdmVyIGRl cGVuZGVudCwgaG93ZXZlciB1bmtub3duIG9yIHVudXNlZCBvcHRpb24NCj4gPiA+ID4gd2l0aGlu DQo+ID4gPiA+ID4gPiB0aGlzDQo+ID4gPiA+ID4gPiA+ID4gc2NoZW1hIHNob3VsZCByZXR1cm4g ZXJyb3IuICBUaGlzIGFsbG93IGZvciBmdXR1cmUgdXNlIG9mDQo+IHVua25vd24NCj4gPiA+ID4g PiA+ID4gPiBvcHRpb25zIGFzIHdlbGwgYXMgYSBwb3NpdGl2ZSBpbmRpY2F0aW9uIHRvIHRoZSB1 c2VyIHRoYXQgYW4gb3B0aW9uDQo+IGlzDQo+ID4gPiA+ID4gPiA+ID4gdXNlZC4NCj4gPiA+ID4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IEFuIGV4YW1wbGUgVkYgdG9rZW4gb3B0aW9uIHdvdWxk IHRha2UgdGhpcyBmb3JtOg0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gIjAwMDA6 MDM6MDAuMCB2Zl90b2tlbj0yYWI3NDkyNC1jMzM1LTQ1ZjQtOWIxNi0NCj4gODU2OWU1YjA4MjU4 Ig0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gV2hlbiBhY2Nlc3NpbmcgYSBWRiB3 aGVyZSB0aGUgUEYgaXMgbWFraW5nIHVzZSBvZiB2ZmlvLXBjaSwgdGhlDQo+ID4gdXNlcg0KPiA+ ID4gPiA+ID4gPiA+IE1VU1QgcHJvdmlkZSB0aGUgY3VycmVudCB2Zl90b2tlbi4gIFdoZW4gYWNj ZXNzaW5nIGEgUEYsIHRoZQ0KPiA+IHVzZXINCj4gPiA+ID4gTVVTVA0KPiA+ID4gPiA+ID4gPiA+ IHByb3ZpZGUgdGhlIGN1cnJlbnQgdmZfdG9rZW4gSUYgdGhlcmUgYXJlIGFjdGl2ZSBWRiB1c2Vy cyBvciBNQVkNCj4gPiA+ID4gcHJvdmlkZQ0KPiA+ID4gPiA+ID4gPiA+IGEgdmZfdG9rZW4gaW4g b3JkZXIgdG8gc2V0IHRoZSBjdXJyZW50IFZGIHRva2VuIHdoZW4gbm8gVkYgdXNlcnMNCj4gPiBh cmUNCj4gPiA+ID4gPiA+ID4gPiBhY3RpdmUuICBUaGUgZm9ybWVyIHJlcXVpcmVtZW50IGFzc3Vy ZXMgVkYgdXNlcnMgdGhhdCBhbg0KPiA+ID4gPiB1bmFzc29jaWF0ZWQNCj4gPiA+ID4gPiA+ID4g PiBkcml2ZXIgY2Fubm90IHVzdXJwIHRoZSBQRiBkZXZpY2UuICBUaGVzZSBzZW1hbnRpY3MgYWxz byBpbXBseQ0KPiB0aGF0DQo+ID4gYQ0KPiA+ID4gPiA+ID4gPiA+IFZGIHRva2VuIE1VU1QgYmUg c2V0IGJ5IGEgUEYgZHJpdmVyIGJlZm9yZSBWRiBkcml2ZXJzIGNhbiBhY2Nlc3MNCj4gPiB0aGVp cg0KPiA+ID4gPiA+ID4gPiA+IGRldmljZSwgdGhlIGRlZmF1bHQgdG9rZW4gaXMgcmFuZG9tIGFu ZCBtZWNoYW5pc21zIHRvIHJlYWQgdGhlDQo+ID4gPiA+IHRva2VuDQo+ID4gPiA+ID4gPiBhcmUN Cj4gPiA+ID4gPiA+ID4gPiBub3QgcHJvdmlkZWQgaW4gb3JkZXIgdG8gcHJvdGVjdCB0aGUgVkYg dG9rZW4gb2YgcHJldmlvdXMgdXNlcnMuDQo+ID4gVXNlDQo+ID4gPiA+IG9mDQo+ID4gPiA+ID4g PiA+ID4gdGhlIHZmX3Rva2VuIG9wdGlvbiBvdXRzaWRlIG9mIHRoZXNlIGNhc2VzIHdpbGwgcmV0 dXJuIGFuIGVycm9yLA0KPiBhcw0KPiA+ID4gPiA+ID4gPiA+IGRpc2N1c3NlZCBhYm92ZS4NCj4g PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEFsZXggV2lsbGlh bXNvbiA8YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb20+DQo+ID4gPiA+ID4gPiA+ID4gLS0tDQo+ ID4gPiA+ID4gPiA+ID4gIGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYyAgICAgICAgIHwgIDE5 OA0KPiA+ID4gPiA+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ ID4gPiA+ID4gPiA+ID4gIGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdmF0ZS5oIHwgICAg OCArDQo+ID4gPiA+ID4gPiA+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMjA1IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMNCj4gYi9kcml2ZXJzL3ZmaW8vcGNpL3Zm aW9fcGNpLmMNCj4gPiA+ID4gPiA+ID4gPiBpbmRleCAyZWM2YzMxZDBhYjAuLjhkZDZlZjk1NDNj YSAxMDA2NDQNCj4gPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNp LmMNCj4gPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMNCj4g PiA+ID4gPiA+ID4gPiBAQCAtNDY2LDYgKzQ2Niw0NCBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9k aXNhYmxlKHN0cnVjdA0KPiA+ID4gPiA+ID4gdmZpb19wY2lfZGV2aWNlDQo+ID4gPiA+ID4gPiA+ ID4gKnZkZXYpDQo+ID4gPiA+ID4gPiA+ID4gIAkJdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZk ZXYsIFBDSV9EM2hvdCk7DQo+ID4gPiA+ID4gPiA+ID4gIH0NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ ID4gPiA+ID4gPiA+ICtzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdmZpb19wY2lfZHJpdmVyOw0K PiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHN0cnVjdCB2ZmlvX3Bj aV9kZXZpY2UgKmdldF9wZl92ZGV2KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UNCj4gPiA+ID4gKnZk ZXYsDQo+ID4gPiA+ID4gPiA+ID4gKwkJCQkJICAgc3RydWN0IHZmaW9fZGV2aWNlICoqcGZfZGV2 KQ0KPiA+ID4gPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgcGNpX2RldiAq cGh5c2ZuID0gcGNpX3BoeXNmbih2ZGV2LT5wZGV2KTsNCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiA+ID4gKwlpZiAoIXZkZXYtPnBkZXYtPmlzX3ZpcnRmbikNCj4gPiA+ID4gPiA+ID4g PiArCQlyZXR1cm4gTlVMTDsNCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gKwkq cGZfZGV2ID0gdmZpb19kZXZpY2VfZ2V0X2Zyb21fZGV2KCZwaHlzZm4tPmRldik7DQo+ID4gPiA+ ID4gPiA+ID4gKwlpZiAoISpwZl9kZXYpDQo+ID4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIE5VTEw7 DQo+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICsJaWYgKHBjaV9kZXZfZHJpdmVy KHBoeXNmbikgIT0gJnZmaW9fcGNpX2RyaXZlcikgew0KPiA+ID4gPiA+ID4gPiA+ICsJCXZmaW9f ZGV2aWNlX3B1dCgqcGZfZGV2KTsNCj4gPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gTlVMTDsNCj4g PiA+ID4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gKwly ZXR1cm4gdmZpb19kZXZpY2VfZGF0YSgqcGZfZGV2KTsNCj4gPiA+ID4gPiA+ID4gPiArfQ0KPiA+ ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHZvaWQgdmZpb19wY2lfdmZf dG9rZW5fdXNlcl9hZGQoc3RydWN0IHZmaW9fcGNpX2RldmljZQ0KPiA+ICp2ZGV2LA0KPiA+ID4g PiBpbnQNCj4gPiA+ID4gPiA+IHZhbCkNCj4gPiA+ID4gPiA+ID4gPiArew0KPiA+ID4gPiA+ID4g PiA+ICsJc3RydWN0IHZmaW9fZGV2aWNlICpwZl9kZXY7DQo+ID4gPiA+ID4gPiA+ID4gKwlzdHJ1 Y3QgdmZpb19wY2lfZGV2aWNlICpwZl92ZGV2ID0gZ2V0X3BmX3ZkZXYodmRldiwNCj4gPiA+ID4g JnBmX2Rldik7DQo+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICsJaWYgKCFwZl92 ZGV2KQ0KPiA+ID4gPiA+ID4gPiA+ICsJCXJldHVybjsNCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiA+ID4gKwltdXRleF9sb2NrKCZwZl92ZGV2LT52Zl90b2tlbi0+bG9jayk7DQo+ID4g PiA+ID4gPiA+ID4gKwlwZl92ZGV2LT52Zl90b2tlbi0+dXNlcnMgKz0gdmFsOw0KPiA+ID4gPiA+ ID4gPiA+ICsJV0FSTl9PTihwZl92ZGV2LT52Zl90b2tlbi0+dXNlcnMgPCAwKTsNCj4gPiA+ID4g PiA+ID4gPiArCW11dGV4X3VubG9jaygmcGZfdmRldi0+dmZfdG9rZW4tPmxvY2spOw0KPiA+ID4g PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArCXZmaW9fZGV2aWNlX3B1dChwZl9kZXYpOw0K PiA+ID4gPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICBz dGF0aWMgdm9pZCB2ZmlvX3BjaV9yZWxlYXNlKHZvaWQgKmRldmljZV9kYXRhKQ0KPiA+ID4gPiA+ ID4gPiA+ICB7DQo+ID4gPiA+ID4gPiA+ID4gIAlzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICp2ZGV2 ID0gZGV2aWNlX2RhdGE7DQo+ID4gPiA+ID4gPiA+ID4gQEAgLTQ3Myw2ICs1MTEsNyBAQCBzdGF0 aWMgdm9pZCB2ZmlvX3BjaV9yZWxlYXNlKHZvaWQNCj4gPiAqZGV2aWNlX2RhdGEpDQo+ID4gPiA+ ID4gPiA+ID4gIAltdXRleF9sb2NrKCZ2ZGV2LT5yZWZsY2stPmxvY2spOw0KPiA+ID4gPiA+ID4g PiA+DQo+ID4gPiA+ID4gPiA+ID4gIAlpZiAoISgtLXZkZXYtPnJlZmNudCkpIHsNCj4gPiA+ID4g PiA+ID4gPiArCQl2ZmlvX3BjaV92Zl90b2tlbl91c2VyX2FkZCh2ZGV2LCAtMSk7DQo+ID4gPiA+ ID4gPiA+ID4gIAkJdmZpb19zcGFwcl9wY2lfZWVoX3JlbGVhc2UodmRldi0+cGRldik7DQo+ID4g PiA+ID4gPiA+ID4gIAkJdmZpb19wY2lfZGlzYWJsZSh2ZGV2KTsNCj4gPiA+ID4gPiA+ID4gPiAg CX0NCj4gPiA+ID4gPiA+ID4gPiBAQCAtNDk4LDYgKzUzNyw3IEBAIHN0YXRpYyBpbnQgdmZpb19w Y2lfb3Blbih2b2lkDQo+ICpkZXZpY2VfZGF0YSkNCj4gPiA+ID4gPiA+ID4gPiAgCQkJZ290byBl cnJvcjsNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICAJCXZmaW9fc3BhcHJfcGNp X2VlaF9vcGVuKHZkZXYtPnBkZXYpOw0KPiA+ID4gPiA+ID4gPiA+ICsJCXZmaW9fcGNpX3ZmX3Rv a2VuX3VzZXJfYWRkKHZkZXYsIDEpOw0KPiA+ID4gPiA+ID4gPiA+ICAJfQ0KPiA+ID4gPiA+ID4g PiA+ICAJdmRldi0+cmVmY250Kys7DQo+ID4gPiA+ID4gPiA+ID4gIGVycm9yOg0KPiA+ID4gPiA+ ID4gPiA+IEBAIC0xMjc4LDExICsxMzE4LDE0OCBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9yZXF1 ZXN0KHZvaWQNCj4gPiA+ID4gPiA+ICpkZXZpY2VfZGF0YSwNCj4gPiA+ID4gPiA+ID4gPiB1bnNp Z25lZCBpbnQgY291bnQpDQo+ID4gPiA+ID4gPiA+ID4gIAltdXRleF91bmxvY2soJnZkZXYtPmln YXRlKTsNCj4gPiA+ID4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ ID4gK3N0YXRpYyBpbnQgdmZpb19wY2lfdmFsaWRhdGVfdmZfdG9rZW4oc3RydWN0IHZmaW9fcGNp X2RldmljZQ0KPiAqdmRldiwNCj4gPiA+ID4gPiA+ID4gPiArCQkJCSAgICAgIGJvb2wgdmZfdG9r ZW4sIHV1aWRfdCAqdXVpZCkNCj4gPiA+ID4gPiA+ID4gPiArew0KPiA+ID4gPiA+ID4gPiA+ICsJ LyoNCj4gPiA+ID4gPiA+ID4gPiArCSAqIFRoZXJlJ3MgYWx3YXlzIHNvbWUgZGVncmVlIG9mIHRy dXN0IG9yIGNvbGxhYm9yYXRpb24NCj4gPiA+ID4gYmV0d2VlbiBTUi0NCj4gPiA+ID4gPiA+ID4g PiBJT1YNCj4gPiA+ID4gPiA+ID4gPiArCSAqIFBGIGFuZCBWRnMsIGV2ZW4gaWYganVzdCB0aGF0 IHRoZSBQRiBob3N0cyB0aGUgU1ItSU9WDQo+ID4gPiA+IGNhcGFiaWxpdHkgYW5kDQo+ID4gPiA+ ID4gPiA+ID4gKwkgKiBjYW4gZGlzcnVwdCBWRnMgd2l0aCBhIHJlc2V0LCBidXQgb2Z0ZW4gdGhl IFBGIGhhcyBtb3JlDQo+ID4gPiA+IGV4cGxpY2l0DQo+ID4gPiA+ID4gPiA+ID4gKwkgKiBhY2Nl c3MgdG8gZGVueSBzZXJ2aWNlIHRvIHRoZSBWRiBvciBhY2Nlc3MgZGF0YSBwYXNzZWQNCj4gPiA+ ID4gdGhyb3VnaCB0aGUNCj4gPiA+ID4gPiA+ID4gPiArCSAqIFZGLiAgV2UgdGhlcmVmb3JlIHJl cXVpcmUgYW4gb3B0LWluIHZpYSBhIHNoYXJlZCBWRiB0b2tlbg0KPiA+ID4gPiAoVVVJRCkNCj4g PiA+ID4gPiA+ID4gPiB0bw0KPiA+ID4gPiA+ID4gPiA+ICsJICogcmVwcmVzZW50IHRoaXMgdHJ1 c3QuICBUaGlzIGJvdGggcHJldmVudHMgdGhhdCBhIFZGIGRyaXZlcg0KPiA+ID4gPiBtaWdodA0K PiA+ID4gPiA+ID4gPiA+ICsJICogYXNzdW1lIHRoZSBQRiBkcml2ZXIgaXMgYSB0cnVzdGVkLCBp bi1rZXJuZWwgZHJpdmVyLCBhbmQgYWxzbw0KPiA+ID4gPiB0aGF0DQo+ID4gPiA+ID4gPiA+ID4g KwkgKiBhIFBGIGRyaXZlciBtaWdodCBiZSByZXBsYWNlZCB3aXRoIGEgcm9ndWUgZHJpdmVyLCB1 bmtub3duDQo+ID4gPiA+IHRvIGluLQ0KPiA+ID4gPiA+ID4gPiA+IHVzZQ0KPiA+ID4gPiA+ID4g PiA+ICsJICogVkYgZHJpdmVycy4NCj4gPiA+ID4gPiA+ID4gPiArCSAqDQo+ID4gPiA+ID4gPiA+ ID4gKwkgKiBUaGVyZWZvcmUgd2hlbiBwcmVzZW50ZWQgd2l0aCBhIFZGLCBpZiB0aGUgUEYgaXMg YSB2ZmlvDQo+ID4gPiA+IGRldmljZSBhbmQNCj4gPiA+ID4gPiA+ID4gPiArCSAqIGl0IGlzIGJv dW5kIHRvIHRoZSB2ZmlvLXBjaSBkcml2ZXIsIHRoZSB1c2VyIG5lZWRzIHRvIHByb3ZpZGUNCj4g PiA+ID4gYSBWRg0KPiA+ID4gPiA+ID4gPiA+ICsJICogdG9rZW4gdG8gYWNjZXNzIHRoZSBkZXZp Y2UsIGluIHRoZSBmb3JtIG9mIGFwcGVuZGluZyBhDQo+ID4gPiA+IHZmX3Rva2VuIHRvDQo+ID4g PiA+ID4gPiA+ID4gKwkgKiB0aGUgZGV2aWNlIG5hbWUsIGZvciBleGFtcGxlOg0KPiA+ID4gPiA+ ID4gPiA+ICsJICoNCj4gPiA+ID4gPiA+ID4gPiArCSAqICIwMDAwOjA0OjEwLjAgdmZfdG9rZW49 YmQ4ZDlkMmItNWE1Zi00ZjVhLWEyMTEtDQo+ID4gPiA+IGY1OTE1MTRiYTFmMyINCj4gPiA+ID4g PiA+ID4gPiArCSAqDQo+ID4gPiA+ID4gPiA+ID4gKwkgKiBXaGVuIHByZXNlbnRlZCB3aXRoIGEg UEYgd2hpY2ggaGFzIFZGcyBpbiB1c2UsIHRoZSB1c2VyDQo+ID4gPiA+IG11c3QgYWxzbw0KPiA+ ID4gPiA+ID4gPiA+ICsJICogcHJvdmlkZSB0aGUgY3VycmVudCBWRiB0b2tlbiB0byBwcm92ZSBj b2xsYWJvcmF0aW9uIHdpdGgNCj4gPiA+ID4gZXhpc3RpbmcNCj4gPiA+ID4gPiA+ID4gPiArCSAq IFZGIHVzZXJzLiAgSWYgVkZzIGFyZSBub3QgaW4gdXNlLCB0aGUgVkYgdG9rZW4gcHJvdmlkZWQg Zm9yDQo+ID4gPiA+IHRoZSBQRg0KPiA+ID4gPiA+ID4gPiA+ICsJICogZGV2aWNlIHdpbGwgYWN0 IHRvIHNldCB0aGUgVkYgdG9rZW4uDQo+ID4gPiA+ID4gPiA+ID4gKwkgKg0KPiA+ID4gPiA+ID4g PiA+ICsJICogSWYgdGhlIFZGIHRva2VuIGlzIHByb3ZpZGVkIGJ1dCB1bnVzZWQsIGEgZmF1bHQg aXMgZ2VuZXJhdGVkLg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBmYXVsdC0+ZXJyb3Is IG90aGVyd2lzZSBpdCBpcyBlYXN5IHRvIGNvbnNpZGVyIGEgQ1BVIGZhdWx0LiDwn5iKDQo+ID4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gT2ssIEkgY2FuIG1ha2UgdGhhdCBjaGFuZ2UsIGJ1dCBJIHRo aW5rIHlvdSBtaWdodCBoYXZlIGEgdW5pcXVlDQo+ID4gPiA+ID4gPiBiYWNrZ3JvdW5kIHRvIG1h a2UgYSBsZWFwIHRoYXQgYSB1c2Vyc3BhY2UgaW9jdGwgY2FuIHRyaWdnZXIgYSBDUFUNCj4gPiA+ ID4gPiA+IGZhdWx0IDspDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICsJICovDQo+ID4g PiA+ID4gPiA+ID4gKwlpZiAoIXZkZXYtPnBkZXYtPmlzX3ZpcnRmbiAmJiAhdmRldi0+dmZfdG9r ZW4gJiYgIXZmX3Rva2VuKQ0KPiA+ID4gPiA+ID4gPiA+ICsJCXJldHVybiAwOyAvKiBObyBWRiB0 b2tlbiBwcm92aWRlZCBvciByZXF1aXJlZCAqLw0KPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiA+ID4gPiArCWlmICh2ZGV2LT5wZGV2LT5pc192aXJ0Zm4pIHsNCj4gPiA+ID4gPiA+ID4gPiAr CQlzdHJ1Y3QgdmZpb19kZXZpY2UgKnBmX2RldjsNCj4gPiA+ID4gPiA+ID4gPiArCQlzdHJ1Y3Qg dmZpb19wY2lfZGV2aWNlICpwZl92ZGV2ID0gZ2V0X3BmX3ZkZXYodmRldiwNCj4gPiA+ID4gPiA+ ID4gPiAmcGZfZGV2KTsNCj4gPiA+ID4gPiA+ID4gPiArCQlib29sIG1hdGNoOw0KPiA+ID4gPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArCQlpZiAoIXBmX3ZkZXYpIHsNCj4gPiA+ID4gPiA+ ID4gPiArCQkJaWYgKCF2Zl90b2tlbikNCj4gPiA+ID4gPiA+ID4gPiArCQkJCXJldHVybiAwOyAv KiBQRiBpcyBub3QgdmZpby1wY2ksIG5vIFZGDQo+ID4gPiA+IHRva2VuICovDQo+ID4gPiA+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICsJCQlwY2lfaW5mb19yYXRlbGltaXRlZCh2ZGV2LT5w ZGV2LA0KPiA+ID4gPiA+ID4gPiA+ICsJCQkJIlZGIHRva2VuIGluY29ycmVjdGx5IHByb3ZpZGVk LCBQRiBub3QNCj4gPiA+ID4gYm91bmQNCj4gPiA+ID4gPiA+ID4gPiB0byB2ZmlvLXBjaVxuIik7 DQo+ID4gPiA+ID4gPiA+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiA+ID4gPiA+ICsJ CX0NCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gKwkJaWYgKCF2Zl90b2tlbikg ew0KPiA+ID4gPiA+ID4gPiA+ICsJCQl2ZmlvX2RldmljZV9wdXQocGZfZGV2KTsNCj4gPiA+ID4g PiA+ID4gPiArCQkJcGNpX2luZm9fcmF0ZWxpbWl0ZWQodmRldi0+cGRldiwNCj4gPiA+ID4gPiA+ ID4gPiArCQkJCSJWRiB0b2tlbiByZXF1aXJlZCB0byBhY2Nlc3MNCj4gPiA+ID4gZGV2aWNlXG4i KTsNCj4gPiA+ID4gPiA+ID4gPiArCQkJcmV0dXJuIC1FQUNDRVM7DQo+ID4gPiA+ID4gPiA+ID4g KwkJfQ0KPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArCQltdXRleF9sb2NrKCZw Zl92ZGV2LT52Zl90b2tlbi0+bG9jayk7DQo+ID4gPiA+ID4gPiA+ID4gKwkJbWF0Y2ggPSB1dWlk X2VxdWFsKHV1aWQsICZwZl92ZGV2LT52Zl90b2tlbi0NCj4gPiA+ID4gPnV1aWQpOw0KPiA+ID4g PiA+ID4gPiA+ICsJCW11dGV4X3VubG9jaygmcGZfdmRldi0+dmZfdG9rZW4tPmxvY2spOw0KPiA+ ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArCQl2ZmlvX2RldmljZV9wdXQocGZfZGV2 KTsNCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gKwkJaWYgKCFtYXRjaCkgew0K PiA+ID4gPiA+ID4gPiA+ICsJCQlwY2lfaW5mb19yYXRlbGltaXRlZCh2ZGV2LT5wZGV2LA0KPiA+ ID4gPiA+ID4gPiA+ICsJCQkJIkluY29ycmVjdCBWRiB0b2tlbiBwcm92aWRlZCBmb3INCj4gPiA+ ID4gZGV2aWNlXG4iKTsNCj4gPiA+ID4gPiA+ID4gPiArCQkJcmV0dXJuIC1FQUNDRVM7DQo+ID4g PiA+ID4gPiA+ID4gKwkJfQ0KPiA+ID4gPiA+ID4gPiA+ICsJfSBlbHNlIGlmICh2ZGV2LT52Zl90 b2tlbikgew0KPiA+ID4gPiA+ID4gPiA+ICsJCW11dGV4X2xvY2soJnZkZXYtPnZmX3Rva2VuLT5s b2NrKTsNCj4gPiA+ID4gPiA+ID4gPiArCQlpZiAodmRldi0+dmZfdG9rZW4tPnVzZXJzKSB7DQo+ ID4gPiA+ID4gPiA+ID4gKwkJCWlmICghdmZfdG9rZW4pIHsNCj4gPiA+ID4gPiA+ID4gPiArCQkJ CW11dGV4X3VubG9jaygmdmRldi0+dmZfdG9rZW4tDQo+ID4gPiA+ID5sb2NrKTsNCj4gPiA+ID4g PiA+ID4gPiArCQkJCXBjaV9pbmZvX3JhdGVsaW1pdGVkKHZkZXYtPnBkZXYsDQo+ID4gPiA+ID4g PiA+ID4gKwkJCQkJIlZGIHRva2VuIHJlcXVpcmVkIHRvIGFjY2Vzcw0KPiA+ID4gPiA+ID4gPiA+ IGRldmljZVxuIik7DQo+ID4gPiA+ID4gPiA+ID4gKwkJCQlyZXR1cm4gLUVBQ0NFUzsNCj4gPiA+ ID4gPiA+ID4gPiArCQkJfQ0KPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArCQkJ aWYgKCF1dWlkX2VxdWFsKHV1aWQsICZ2ZGV2LT52Zl90b2tlbi0+dXVpZCkpDQo+ID4gPiA+IHsN Cj4gPiA+ID4gPiA+ID4gPiArCQkJCW11dGV4X3VubG9jaygmdmRldi0+dmZfdG9rZW4tDQo+ID4g PiA+ID5sb2NrKTsNCj4gPiA+ID4gPiA+ID4gPiArCQkJCXBjaV9pbmZvX3JhdGVsaW1pdGVkKHZk ZXYtPnBkZXYsDQo+ID4gPiA+ID4gPiA+ID4gKwkJCQkJIkluY29ycmVjdCBWRiB0b2tlbiBwcm92 aWRlZA0KPiA+ID4gPiBmb3INCj4gPiA+ID4gPiA+ID4gPiBkZXZpY2VcbiIpOw0KPiA+ID4gPiA+ ID4gPiA+ICsJCQkJcmV0dXJuIC1FQUNDRVM7DQo+ID4gPiA+ID4gPiA+ID4gKwkJCX0NCj4gPiA+ ID4gPiA+ID4gPiArCQl9IGVsc2UgaWYgKHZmX3Rva2VuKSB7DQo+ID4gPiA+ID4gPiA+ID4gKwkJ CXV1aWRfY29weSgmdmRldi0+dmZfdG9rZW4tPnV1aWQsIHV1aWQpOw0KPiA+ID4gPiA+ID4gPiA+ ICsJCX0NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gSXQgaW1wbGllcyB0aGF0IHdlIGFs bG93IFBGIHRvIGJlIGFjY2Vzc2VkIHcvbyBwcm92aWRpbmcgYSBWRiB0b2tlbiwNCj4gPiA+ID4g PiA+ID4gYXMgbG9uZyBhcyBubyBWRiBpcyBjdXJyZW50bHkgaW4tdXNlLCB3aGljaCBmdXJ0aGVy IG1lYW5zIG5vIFZGIGNhbg0KPiA+ID4gPiA+ID4gPiBiZSBmdXJ0aGVyIGFzc2lnbmVkIHNpbmNl IG5vIG9uZSBrbm93cyB0aGUgcmFuZG9tIHV1aWQgYWxsb2NhdGVkDQo+ID4gPiA+ID4gPiA+IGJ5 IHZmaW8uIEp1c3Qgd2FudCB0byBjb25maXJtIHdoZXRoZXIgaXQgaXMgdGhlIGRlc2lyZWQgZmxh dm9yLiBJZiBhbg0KPiA+ID4gPiA+ID4gPiB1c2VyIHJlYWxseSB3YW50cyB0byB1c2UgUEYtb25s eSwgcG9zc2libHkgaGUgc2hvdWxkIGRpc2FibGUgU1ItSU9WDQo+ID4gPiA+ID4gPiA+IGluc3Rl YWQuLi4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBZZXMsIHRoaXMgaXMgdGhlIGJlaGF2aW9y IEknbSBpbnRlbmRpbmcuICBBcmUgeW91IHN1Z2dlc3RpbmcgdGhhdCB3ZQ0KPiA+ID4gPiA+ID4g c2hvdWxkIHJlcXVpcmUgYSBWRiB0b2tlbiBpbiBvcmRlciB0byBhY2Nlc3MgYSBQRiB0aGF0IGhh cyBTUi1JT1YNCj4gPiA+ID4gPiA+IGFscmVhZHkgZW5hYmxlZD8gIFRoaXMgaW50cm9kdWNlcyBh biBpbmNvbnNpc3RlbmN5IHRoYXQgU1ItSU9WIGNhbg0KPiBiZQ0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4geWVzLiBJIGZlbHQgdGhhdCBpdCdzIG1lYW5pbmdsZXNzIG90aGVyd2lzZSBpZiBhbiB1c2Vy IGhhcyBubyBhdHRlbXB0IHRvDQo+ID4gPiA+ID4gbWFuYWdlIFNSLUlPViBidXQgc3RpbGwgbGVh dmluZyBpdCBlbmFibGVkLiBJbiBtYW55IGNhc2VzLCBlbmFibGluZyBvZg0KPiA+ID4gPiA+IFNS LUlPViBtYXkgcmVzZXJ2ZSBzb21lIHJlc291cmNlIGluIHRoZSBoYXJkd2FyZSwgdGh1cyBzaW1w bHkNCj4gaHVydGluZw0KPiA+ID4gPiA+IFBGIHBlcmZvcm1hbmNlLg0KPiA+ID4gPg0KPiA+ID4g PiBCdXQgYSB1c2VyIG5lZWRzIHRvIGJlIGdyYW50ZWQgYWNjZXNzIHRvIGEgZGV2aWNlIGJ5IGEg cHJpdmlsZWdlZA0KPiA+ID4gPiBlbnRpdHkgYW5kIHRoZSBwcml2aWxlZ2VkIGVudGl0eSBtYXkg YWxzbyBlbmFibGUgU1ItSU9WLCBzbyBpdCBzZWVtcw0KPiA+ID4gPiB5b3UncmUgYXNzdW1pbmcg dGhlIHByaXZpbGVnZWQgZW50aXR5IGlzIG9wZXJhdGluZyBpbmRlcGVuZGVudGx5IGFuZA0KPiA+ ID4gPiBub3QgaW4gdGhlIGJlc3QgaW50ZXJlc3Qgb2YgZW5hYmxpbmcgdGhlIHNwZWNpZmljIHVz ZXIgY2FzZS4NCj4gPiA+DQo+ID4gPiB3aGF0IGFib3V0IHRocm93aW5nIG91dCBhIHdhcm5pbmcg Zm9yIHN1Y2ggc2l0dWF0aW9uPyBzbyB0aGUgdXNlcnNwYWNlDQo+ID4gPiBrbm93cyBzb21lIGNv bGxhYm9yYXRpb24gaXMgbWlzc2luZyBiZWZvcmUgaXRzIGFjY2VzcyB0byB0aGUgZGV2aWNlLg0K PiA+DQo+ID4gVGhpcyBzZWVtcyBhcmJpdHJhcnkuICBwY2ktcGYtc3R1YiBwcm92ZXMgdG8gdXMg dGhhdCB0aGVyZSBhcmUgZGV2aWNlcw0KPiA+IHRoYXQgbmVlZCBubyBzcGVjaWFsIHNldHVwIGZv ciBTUi1JT1YsIHdlIGRvbid0IGtub3cgdGhhdCB3ZSBkb24ndCBoYXZlDQo+ID4gc3VjaCBhIGRl dmljZS4gIEVuYWJsaW5nIFNSLUlPViBhZnRlciB0aGUgdXNlciBvcGVucyB0aGUgZGV2aWNlIGFs c28NCg0KYnR3IG5vIHNwZWNpYWwgc2V0dXAgZG9lc24ndCBtZWFuIHRoYXQgYSBQRiBkcml2ZXIg Y2Fubm90IGRvIGJhZCB0aGluZyB0byANClZGcy4gSW4gc3VjaCBjYXNlLCBJIHRoaW5rIHRoZSB3 aG9sZSB0b2tlbiBpZGVhIHNob3VsZCBiZSBzdGlsbCBhcHBsaWVkLg0KDQo+ID4gZG9lc24ndCBp bmRpY2F0ZSB0aGVyZSdzIG5lY2Vzc2FyaWx5IGNvbGxhYm9yYXRpb24gYmV0d2VlbiB0aGUgdHdv LCBzbw0KPiA+IGlmIHdlIGdlbmVyYXRlIGEgd2FybmluZyBvbiBvbmUsIGhvdyBkbyB3ZSBhc3N1 bWUgdGhlIG90aGVyIGlzIG9rPyAgSQ0KPiA+IGRvbid0IHJlYWxseSB1bmRlcnN0YW5kIHdoeSB0 aGlzIGlzIGdlbmVyYXRpbmcgc3VjaCBjb25jZXJuLiAgVGhhbmtzLA0KDQpzcGVjaWZpY2FsbHkg SSBmZWVsIHdlIHNob3VsZCB3YXJuIGJvdGg6DQoNCjEpIHVzZXJzcGFjZSBkcml2ZXIgR0VUX0RF VklDRV9GRCB3L28gcHJvdmlkaW5nIGEgdG9rZW4gb24gYSBQRg0Kd2hpY2ggaGFzIFNSLUlPViBh bHJlYWR5IGVuYWJsZWQNCjIpIGFkbWluIHdyaXRlcyBub24temVybyBudW12ZnMgdG8gYSBQRiB3 aGljaCBoYXMgYWxyZWFkeSBib3VuZCB0bw0KdXNlcnNwYWNlIGRyaXZlciB3aGljaCBkb2Vzbid0 IHByb3ZpZGUgYSB0b2tlbg0KDQppbiBib3RoIGNhc2VzIFZGcyBhcmUgZW5hYmxlZCBidXQgY2Fu bm90IGJlIHVzZWQgKGlmIHlvdSBhZ3JlZSB0aGF0DQp0aGUgdG9rZW4gaWRlYSBzaG91bGQgYmUg YWxzbyBhcHBsaWVkIHRvICdubyBzcGVjaWFsIHNldHVwJyBjYXNlKQ0KDQo+ID4NCj4gPiBBbGV4 DQo+IA0KPiBJIG1lYW50IHRvIHdhcm4gdGhlIHN1Ym9wdGltYWwgY2FzZSB3aGVyZSB0aGUgdXNl cnNwYWNlIGRyaXZlciBkb2Vzbid0DQo+IHByb3ZpZGUgYSB0b2tlbiB3aGVuIGFjY2Vzc2luZyBh IFBGIHdoaWNoIGhhcyBTUi1JT1YgYWxyZWFkeSBlbmFibGVkLg0KPiBJIGRvbid0IHRoaW5rIGEg c2FuZSBjb25maWd1cmF0aW9uL2Nvb3JkaW5hdGlvbiBzaG91bGQgZG8gdGhpcyBzaW5jZSBhbGwN Cj4gVkZzIGFyZSBzaW1wbHkgd2FzdGVkIGFuZCBpbnN0ZWFkIG1heSBodXJ0IHRoZSBQRiBwZXJm b3JtYW5jZS4uLg0KPiANCj4gPg0KPiA+ID4gPiA+ID4gZW5hYmxlZCB2aWEgc3lzZnMgYXN5bmNo cm9ub3VzIHRvIHRoZSBHRVRfREVWSUNFX0ZEIGlvY3RsLCBzbyB3ZSdkDQo+ID4gPiA+IG5lZWQN Cj4gPiA+ID4gPiA+IHRvIHNlY3VyZSB0aGUgc3lzZnMgaW50ZXJmYWNlIHRvIG9ubHkgYWxsb3cg ZW5hYmxpbmcgU1ItSU9WIHdoZW4gdGhlDQo+ID4gUEYNCj4gPiA+ID4gPiA+IGlzIGFscmVhZHkg b3BlbmVkIHRvIGNhc2VzIHdoZXJlIHRoZSBWRiB0b2tlbiBpcyBhbHJlYWR5IHNldD8gIFRodXMN Cj4gPiA+ID4gPg0KPiA+ID4gPiA+IHllcywgdGhlIFBGIGlzIGFzc2lnbmVkIHRvIHRoZSB1c2Vy c3BhY2UgZHJpdmVyLCB0aHVzIGl0J3MgcmVhc29uYWJsZSB0bw0KPiA+ID4gPiA+IGhhdmUgdGhl IHVzZXJzcGFjZSBkcml2ZXIgZGVjaWRlIHdoZXRoZXIgdG8gZW5hYmxlIG9yIGRpc2FibGUgU1It SU9WDQo+ID4gPiA+ID4gd2hlbiB0aGUgUEYgaXMgdW5kZXIgaXRzIGNvbnRyb2wuIGFzIEkgcmVw bGllZCB0byBwYXRjaCBbNS83XSwgdGhlIHN5c2ZzDQo+ID4gPiA+ID4gaW50ZXJmYWNlIGFsb25l IGxvb2tzIHByb2JsZW1hdGljIHcvbyBrbm93aW5nIHdoZXRoZXIgdGhlDQo+IHVzZXJzcGFjZQ0K PiA+ID4gPiA+IGRyaXZlciBpcyB3aWxsaW5nIHRvIG1hbmFnZSBWRnMgKGJ5IHNldHRpbmcgYSB0 b2tlbikuLi4NCj4gPiA+ID4NCj4gPiA+ID4gQXMgSSByZXBsaWVkIGluIHBhdGNoIFs1LzddIHRo ZSBvcGVyYXRpb25zIGRvbid0IG5lZWQgdG8gaGFwcGVuDQo+ID4gPiA+IGluZGVwZW5kZW50bHks IGNvbmZpZ3VyaW5nIFNSLUlPViBpbiBhZHZhbmNlIG9mIHRoZSB1c2VyIGRyaXZlcg0KPiA+ID4g PiBhdHRhY2hpbmcgb3IgaW4gY29sbGFib3JhdGlvbiB3aXRoIHRoZSB1c2VyIGRyaXZlciBjYW4g YWxzbyBiZSBlbmFibGVkDQo+ID4gPiA+IHdpdGggdGhpcyBzZXJpZXMgYXMgaXMuICBBbGxvd2lu ZyB0aGUgdXNlciBkcml2ZXIgdG8gZGlyZWN0bHkgZW5hYmxlDQo+ID4gPiA+IFNSLUlPViBhbmQg Y3JlYXRlIFZGcyBpbiB0aGUgaG9zdCBpcyBzb21ldGhpbmcgSSd2ZSBhdm9pZGVkIGhlcmUsIGJ1 dA0KPiA+ID4gPiBub3QgcHJlY2x1ZGVkIGZvciBsYXRlciBleHRlbnNpb25zLiAgSSB0aGluayB0 aGF0IGFsbG93aW5nIGEgdXNlciB0bw0KPiA+ID4gPiBwZXJmb3JtIHRoZXNlIG9wZXJhdGlvbnMg cmVwcmVzZW50cyBhIGRlZ3JlZSBvZiBwcml2aWxlZ2UgYmV5b25kDQo+ID4gPiA+IG93bmVyc2hp cCBvZiB0aGUgUEYgaXRzZWxmLCB3aGljaCBpcyB3aHkgSSdtIGN1cnJlbnRseSBvbmx5IGVuYWJs aW5nDQo+ID4gPiA+IHRoZSBzeXNmcyBzcmlvdl9jb25maWd1cmUgaW50ZXJmYWNlLiAgVGhlIHVz ZXIgZHJpdmVyIG5lZWRzIHRvIHdvcmsgaW4NCj4gPiA+ID4gY29sbGFib3JhdGlvbiB3aXRoIGEg cHJpdmlsZWdlZCBlbnRpdHkgdG8gZW5hYmxlIFNSLUlPViwgb3IgYmUgZ3JhbnRlZA0KPiA+ID4g PiBhY2Nlc3MgdG8gb3BlcmF0ZSBvbiB0aGUgc3lzZnMgaW50ZXJmYWNlIGRpcmVjdGx5Lg0KPiA+ ID4NCj4gPiA+IFRoYW5rcy4gdGhpcyBhc3N1bXB0aW9uIHdhcyBjbGVhcmx5IG92ZXJsb29rZWQg aW4gbXkgcHJldmlvdXMgdGhpbmtpbmcuDQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+ID4gU1It SU9WIGNvdWxkIGJlIHByZS1lbmFibGVkLCBidXQgdGhlIHVzZXIgbXVzdCBwcm92aWRlIGEgdmZf dG9rZW4NCj4gPiA+ID4gPiA+IG9wdGlvbiBvbiBHRVRfREVWSUNFX0ZELCBvdGhlcndpc2UgU1It SU9WIGNvdWxkIG9ubHkgYmUgZW5hYmxlZA0KPiA+IGFmdGVyDQo+ID4gPiA+ID4gPiB0aGUgdXNl ciBzZXRzIGEgVkYgdG9rZW4uICBCdXQgdGhlbiBkbyB3ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhl DQo+IHRva2VuDQo+ID4gPiA+ID4gPiBhdCBzb21lIHBvaW50LCBvciBlbHNlIGl0IHNlZW1zIGxp a2Ugd2UgaGF2ZSB0aGUgc2FtZSBzY2VuYXJpbyB3aGVuDQo+ID4gdGhlDQo+ID4gPiA+ID4gPiBu ZXh0IHVzZXIgY29tZXMgYWxvbmcuICBXZSBiZWxpZXZlIHRoZXJlIGFyZSBQRnMgdGhhdCByZXF1 aXJlIG5vDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJIHRoaW5rIHNvLCBlLmcuIHdoZW4gU1ItSU9W IGlzIGJlaW5nIGRpc2FibGVkLCBvciB3aGVuIHRoZSBmZCBpcyBjbG9zZWQuDQo+ID4gPiA+DQo+ ID4gPiA+IENhbiB5b3UgYXJ0aWN1bGF0ZSBhIHNwZWNpZmljIHJpc2sgdGhhdCB0aGlzIHdvdWxk IHJlc29sdmU/ICBJZiB3ZSBoYXZlDQo+ID4gPiA+IGRldmljZXMgbGlrZSB0aGUgb25lIHN1cHBv cnRlZCBieSBwY2ktcGYtc3R1Yiwgd2hlcmUgaXQncyBhcHBhcmVudGx5DQo+ID4gPiA+IHN1ZmZp Y2llbnQgdG8gcHJvdmlkZSBubyBkZXZpY2UgYWNjZXNzIG90aGVyIHRoYW4gdG8gZW5hYmxlIFNS LUlPViBvbg0KPiA+ID4gPiB0aGUgUEYsIHJlLWltcGxlbWVudGluZyB0aGF0IGluIHZmaW8tcGNp IHdvdWxkIHJlcXVpcmUgdGhhdCB0aGUNCj4gPiA+ID4gdXNlcnNwYWNlIGRyaXZlciBpcyBub3Rp ZmllZCB3aGVuIHRoZSBTUi1JT1YgY29uZmlndXJhdGlvbiBpcyBjaGFuZ2VkDQo+ID4gPiA+IHN1 Y2ggdGhhdCBhIFZGIHRva2VuIGNhbiBiZSByZS1pbnNlcnRlZC4gIEZvciB3aGF0IGdhaW4/DQo+ ID4gPiA+DQo+ID4gPiA+ID4gPiBzcGVjaWFsIFZGIHN1cHBvcnQgb3RoZXIgdGhhbiBzcmlvdl9j b25maWd1cmUsIHNvIHRob3NlIGRyaXZlciBjb3VsZA0KPiA+ID4gPiA+ID4gdGhlb3JldGljYWxs eSBjbG9zZSB0aGUgUEYgYWZ0ZXIgc2V0dGluZyBhIFZGIHRva2VuLiAgVGhhdCBtYWtlcyBpdA0K PiA+ID4gPiA+DQo+ID4gPiA+ID4gdGhlb3JldGljYWxseSB5ZXMsIGJ1dCBJJ20gbm90IHN1cmUg dGhlIHJlYWwgZ2FpbiBvZiBzdXBwb3J0aW5nIHN1Y2gNCj4gPiA+ID4gPiB1c2FnZS4g8J+Yig0K PiA+ID4gPg0KPiA+ID4gPiBMaWtld2lzZSBJIGRvbid0IHNlZSB0aGUgZ2FpbiBvZiByZXN0cmlj dGluZyBpdC4NCj4gPiA+ID4NCj4gPiA+ID4gPiBidHcgd2l0aCB5b3VyIHF1ZXN0aW9uIEkgcmVh bGl6ZSBhbm90aGVyIHBvdGVudGlhbCBvcGVuLiBOb3cgYW4NCj4gPiA+ID4gPiB1c2VyIGNvdWxk IGFsc28gdXNlIHN5c2ZzIHRvIHJlc2V0IHRoZSBQRiwgd2hpY2ggZGVmaW5pdGVseSBhZmZlY3Rz IHRoZQ0KPiA+ID4gPiA+IHN0YXRlIG9mIFZGcy4gRG8gd2Ugd2FudCBhIHRva2VuIG1hdGNoIHdp dGggdGhhdCBwYXRoPyBvciBzdWNoDQo+ID4gPiA+ID4gaW50ZW50aW9uIGlzIGFzc3VtZWQgdG8g YmUgdHJ1c3RlZCBieSBWRiBkcml2ZXJzIGdpdmVuIHRoYXQgb25seQ0KPiA+ID4gPiA+IHByaXZp bGVnZWQgdXNlcnMgY2FuIGRvIGl0Pw0KPiA+ID4gPg0KPiA+ID4gPiBJIHRoaW5rIHdlJ3JlIGdv aW5nIGludG8gdGhlIHdlZWRzIGhlcmUsIGEgcHJpdmlsZWdlZCB1c2VyIGNhbiB1c2UgdGhlDQo+ ID4gPiA+IHBjaS1zeXNmcyByZXNldCBpbnRlcmZhY2UgdG8gYnJlYWsgYWxsIHNvcnRzIG9mIHRo aW5ncy4gIEknbSBjZXJ0YWlubHkNCj4gPiA+ID4gbm90IGdvaW5nIHRvIHByb3Bvc2UgYW55IHNv cnQgb2YgVkYgdG9rZW4gaW50ZXJmYWNlIHRvIHJlc3RyaWN0IGl0Lg0KPiA+ID4gPiBQcml2aWxl Z2VkIHVzZXJzIGNhbiBkbyBiYWQgdGhpbmdzIHZpYSBzeXNmcy4gIFByaXZpbGVnZWQgdXNlcnMg Y2FuDQo+ID4gPiA+IGNvbmZpZ3VyZSBQRnMgaW4gd2F5cyB0aGF0IG1heSBub3QgYmUgY29tcGF0 aWJsZSB3aXRoIGFueSBnaXZlbg0KPiA+ID4gPiB1c2Vyc3BhY2UgVkYgZHJpdmVyLiAgSSdtIGFz c3VtaW5nIGNvbGxhYm9yYXRpb24gaW4gdGhlIGJlc3QgaW50ZXJlc3QNCj4gPiA+ID4gb2YgZW5h YmxpbmcgdGhlIHVzZXIgZHJpdmVyLiAgVGhhbmtzLA0KPiA+ID4gPg0KPiA+ID4gPiBBbGV4DQo+ ID4gPiA+DQo+ID4gPiA+ID4gPiBkaWZmaWN1bHQgdG8gZGV0ZXJtaW5lIHRoZSBsaWZldGltZSBv ZiBhIFZGIHRva2VuIGFuZCBsZWFkcyB0byB0aGUNCj4gPiA+ID4gPiA+IGludGVyZmFjZSBwcm9w b3NlZCBoZXJlIG9mIGFuIGluaXRpYWwgcmFuZG9tIHRva2VuLCB0aGVuIHRoZSB1c2VyDQo+IHNl dA0KPiA+ID4gPiA+ID4gdG9rZW4gcGVyc2lzdGluZyBpbmRlZmluaXRlbHkuDQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gSSd2ZSB0ZW5kZWQgY29uc2lkZXIgYWxsIG9mIHRoZXNlIHRvIGJlIG1l Y2hhbmlzbXMgdGhhdCBhIHVzZXIgY2FuDQo+ID4gPiA+ID4gPiBzaG9vdCB0aGVtc2VsdmVzIGlu IHRoZSBmb290LiAgWWVzLCB0aGUgdXNlciBhbmQgYWRtaW4gY2FuIGRvIHRoaW5ncw0KPiA+ID4g PiA+ID4gdGhhdCB3aWxsIGZhaWwgdG8gd29yayB3aXRoIHRoaXMgaW50ZXJmYWNlLCBmb3IgZXhh bXBsZSBteSB0ZXN0aW5nDQo+ID4gPiA+ID4gPiBpbnZvbHZlcyBRRU1VLCB3aGVyZSB3ZSBkb24n dCBleHBvc2UgU1ItSU9WIHRvIHRoZSBndWVzdCB5ZXQgYW5kDQo+ID4gdGhlDQo+ID4gPiA+ID4g PiBpZ2IgZHJpdmVyIGZvciB0aGUgUEYgd2lsbCBlbmNvdW50ZXIgcHJvYmxlbXMgcnVubmluZyBh IGRldmljZSB3aXRoDQo+ID4gPiA+ID4gPiBTUi1JT1YgZW5hYmxlZCB0aGF0IGl0IGRvZXNuJ3Qg a25vdyBhYm91dC4gIERvIHdlIHdhbnQgdG8gdHJ5IHRvDQo+IHBsYXkNCj4gPiA+ID4gPiA+IG5h bm55IGFuZCByZXF1aXJlIHNwZWNpZmljIHNlbWFudGljcz8gIEkndmUgb3B0J2QgZm9yIHRoZSBt b3JlDQo+IHNpbXBsZQ0KPiA+ID4gPiA+ID4gY29kZSBoZXJlLg0KPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gKwkJbXV0ZXhfdW5sb2NrKCZ2ZGV2LT52Zl90 b2tlbi0+bG9jayk7DQo+ID4gPiA+ID4gPiA+ID4gKwl9IGVsc2UgaWYgKHZmX3Rva2VuKSB7DQo+ ID4gPiA+ID4gPiA+ID4gKwkJcGNpX2luZm9fcmF0ZWxpbWl0ZWQodmRldi0+cGRldiwNCj4gPiA+ ID4gPiA+ID4gPiArCQkJIlZGIHRva2VuIGluY29ycmVjdGx5IHByb3ZpZGVkLCBub3QgYSBQRiBv cg0KPiA+ID4gPiBWRlxuIik7DQo+ID4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ID4gPiA+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICsJ cmV0dXJuIDA7DQo+ID4gPiA+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gPiA+ID4gKyNkZWZpbmUgVkZfVE9LRU5fQVJHICJ2Zl90b2tlbj0iDQo+ID4gPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICBzdGF0aWMgaW50IHZmaW9fcGNpX21hdGNoKHZvaWQgKmRl dmljZV9kYXRhLCBjaGFyICpidWYpDQo+ID4gPiA+ID4gPiA+ID4gIHsNCj4gPiA+ID4gPiA+ID4g PiAgCXN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZkZXYgPSBkZXZpY2VfZGF0YTsNCj4gPiA+ID4g PiA+ID4gPiArCWJvb2wgdmZfdG9rZW4gPSBmYWxzZTsNCj4gPiA+ID4gPiA+ID4gPiArCXV1aWRf dCB1dWlkOw0KPiA+ID4gPiA+ID4gPiA+ICsJaW50IHJldDsNCj4gPiA+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiA+ID4gKwlpZiAoc3RybmNtcChwY2lfbmFtZSh2ZGV2LT5wZGV2KSwgYnVmLA0K PiA+ID4gPiBzdHJsZW4ocGNpX25hbWUodmRldi0NCj4gPiA+ID4gPiA+ID4gPiA+cGRldikpKSkN Cj4gPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsgLyogTm8gbWF0Y2ggKi8NCj4gPiA+ID4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gKwlpZiAoc3RybGVuKGJ1ZikgPiBzdHJsZW4ocGNpX25h bWUodmRldi0+cGRldikpKSB7DQo+ID4gPiA+ID4gPiA+ID4gKwkJYnVmICs9IHN0cmxlbihwY2lf bmFtZSh2ZGV2LT5wZGV2KSk7DQo+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICsJ CWlmICgqYnVmICE9ICcgJykNCj4gPiA+ID4gPiA+ID4gPiArCQkJcmV0dXJuIDA7IC8qIE5vIG1h dGNoOiBub24td2hpdGVzcGFjZSBhZnRlcg0KPiA+ID4gPiBuYW1lICovDQo+ID4gPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICsJCXdoaWxlICgqYnVmKSB7DQo+ID4gPiA+ID4gPiA+ID4g KwkJCWlmICgqYnVmID09ICcgJykgew0KPiA+ID4gPiA+ID4gPiA+ICsJCQkJYnVmKys7DQo+ID4g PiA+ID4gPiA+ID4gKwkJCQljb250aW51ZTsNCj4gPiA+ID4gPiA+ID4gPiArCQkJfQ0KPiA+ID4g PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArCQkJaWYgKCF2Zl90b2tlbiAmJiAhc3RybmNt cChidWYsDQo+ID4gPiA+IFZGX1RPS0VOX0FSRywNCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ IHN0cmxlbihWRl9UT0tFTl9BUkcpKSkgew0KPiA+ID4gPiA+ID4gPiA+ICsJCQkJYnVmICs9IHN0 cmxlbihWRl9UT0tFTl9BUkcpOw0KPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiAr CQkJCWlmIChzdHJsZW4oYnVmKSA8IFVVSURfU1RSSU5HX0xFTikNCj4gPiA+ID4gPiA+ID4gPiAr CQkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4g KwkJCQlyZXQgPSB1dWlkX3BhcnNlKGJ1ZiwgJnV1aWQpOw0KPiA+ID4gPiA+ID4gPiA+ICsJCQkJ aWYgKHJldCkNCj4gPiA+ID4gPiA+ID4gPiArCQkJCQlyZXR1cm4gcmV0Ow0KPiA+ID4gPiA+ID4g PiA+DQo+ID4gPiA+ID4gPiA+ID4gLQlyZXR1cm4gIXN0cmNtcChwY2lfbmFtZSh2ZGV2LT5wZGV2 KSwgYnVmKTsNCj4gPiA+ID4gPiA+ID4gPiArCQkJCXZmX3Rva2VuID0gdHJ1ZTsNCj4gPiA+ID4g PiA+ID4gPiArCQkJCWJ1ZiArPSBVVUlEX1NUUklOR19MRU47DQo+ID4gPiA+ID4gPiA+ID4gKwkJ CX0gZWxzZSB7DQo+ID4gPiA+ID4gPiA+ID4gKwkJCQkvKiBVbmtub3duL2R1cGxpY2F0ZSBvcHRp b24gKi8NCj4gPiA+ID4gPiA+ID4gPiArCQkJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiA+ID4g PiA+ICsJCQl9DQo+ID4gPiA+ID4gPiA+ID4gKwkJfQ0KPiA+ID4gPiA+ID4gPiA+ICsJfQ0KPiA+ ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArCXJldCA9IHZmaW9fcGNpX3ZhbGlkYXRl X3ZmX3Rva2VuKHZkZXYsIHZmX3Rva2VuLCAmdXVpZCk7DQo+ID4gPiA+ID4gPiA+ID4gKwlpZiAo cmV0KQ0KPiA+ID4gPiA+ID4gPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gPiA+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ID4gPiA+ICsJcmV0dXJuIDE7IC8qIE1hdGNoICovDQo+ID4gPiA+ID4gPiA+ID4g IH0NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0 IHZmaW9fZGV2aWNlX29wcyB2ZmlvX3BjaV9vcHMgPSB7DQo+ID4gPiA+ID4gPiA+ID4gQEAgLTEz NTQsNiArMTUzMSwxOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX3Byb2JlKHN0cnVjdA0KPiBwY2lf ZGV2DQo+ID4gPiA+ICpwZGV2LA0KPiA+ID4gPiA+ID4gPiA+IGNvbnN0IHN0cnVjdCBwY2lfZGV2 aWNlX2lkICppZCkNCj4gPiA+ID4gPiA+ID4gPiAgCQlyZXR1cm4gcmV0Ow0KPiA+ID4gPiA+ID4g PiA+ICAJfQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gKwlpZiAocGRldi0+aXNf cGh5c2ZuKSB7DQo+ID4gPiA+ID4gPiA+ID4gKwkJdmRldi0+dmZfdG9rZW4gPSBremFsbG9jKHNp emVvZigqdmRldi0+dmZfdG9rZW4pLA0KPiA+ID4gPiA+ID4gPiA+IEdGUF9LRVJORUwpOw0KPiA+ ID4gPiA+ID4gPiA+ICsJCWlmICghdmRldi0+dmZfdG9rZW4pIHsNCj4gPiA+ID4gPiA+ID4gPiAr CQkJdmZpb19wY2lfcmVmbGNrX3B1dCh2ZGV2LT5yZWZsY2spOw0KPiA+ID4gPiA+ID4gPiA+ICsJ CQl2ZmlvX2RlbF9ncm91cF9kZXYoJnBkZXYtPmRldik7DQo+ID4gPiA+ID4gPiA+ID4gKwkJCXZm aW9faW9tbXVfZ3JvdXBfcHV0KGdyb3VwLCAmcGRldi0+ZGV2KTsNCj4gPiA+ID4gPiA+ID4gPiAr CQkJa2ZyZWUodmRldik7DQo+ID4gPiA+ID4gPiA+ID4gKwkJCXJldHVybiAtRU5PTUVNOw0KPiA+ ID4gPiA+ID4gPiA+ICsJCX0NCj4gPiA+ID4gPiA+ID4gPiArCQltdXRleF9pbml0KCZ2ZGV2LT52 Zl90b2tlbi0+bG9jayk7DQo+ID4gPiA+ID4gPiA+ID4gKwkJdXVpZF9nZW4oJnZkZXYtPnZmX3Rv a2VuLT51dWlkKTsNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gc2hvdWxkIHdlIGFsc28g cmVnZW5lcmF0ZSBhIHJhbmRvbSB1dWlkIHNvbWV3aGVyZSB3aGVuIFNSLQ0KPiBJT1YNCj4gPiBp cw0KPiA+ID4gPiA+ID4gPiBkaXNhYmxlZCBhbmQgdGhlbiByZS1lbmFibGVkIG9uIGEgUEY/IEFs dGhvdWdoIHZmaW8gZGlzYWxsb3dzDQo+ID4gPiA+IHVzZXJzcGFjZQ0KPiA+ID4gPiA+ID4gPiB0 byByZWFkIHV1aWQsIGl0IGlzIGFsd2F5cyBzYWZlciB0byBhdm9pZCBjYWNoaW5nIGEgc2VjcmV0 IGZyb20NCj4gPiBwcmV2aW91cw0KPiA+ID4gPiA+ID4gPiB1c2VyLg0KPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+IFdoYXQgaWYgb3VyIHVzZXIgaXMgUUVNVSBlbXVsYXRpbmcgU1ItSU9WIHRvIHRo ZSBndWVzdC4gIERvIHdlDQo+IHdhbnQNCj4gPiB0bw0KPiA+ID4gPiA+ID4gZm9yY2UgYSBuZXcg VkYgdG9rZW4gaXMgc2V0IGV2ZXJ5IHRpbWUgd2UgYm91bmNlIHRoZSBWRnM/ICBXaHk/ICBBcw0K PiA+ID4gPiA+ID4gYWJvdmUsIHRoZSBzZXNzaW9uIGxpZmV0aW1lIG9mIHRoZSBWRiB0b2tlbiBt aWdodCBiZSBkaWZmaWN1bHQgdG8NCj4gPiA+ID4gPiA+IGRldGVybWluZSBhbmQgSSdtIG5vdCBz dXJlIHBhcmFub2lhIGlzIGEgc3VmZmljaWVudCByZWFzb24gdG8gdHJ5IHRvDQo+ID4gPiA+ID4g PiBjcmVhdGUgYm91bmRhcmllcyBmb3IgaXQuICBUaGFua3MsDQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gQWxleA0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gIAlpZiAodmZpb19wY2lfaXNfdmdhKHBkZXYpKSB7DQo+ ID4gPiA+ID4gPiA+ID4gIAkJdmdhX2NsaWVudF9yZWdpc3RlcihwZGV2LCB2ZGV2LCBOVUxMLA0K PiA+ID4gPiA+ID4gPiA+IHZmaW9fcGNpX3NldF92Z2FfZGVjb2RlKTsNCj4gPiA+ID4gPiA+ID4g PiAgCQl2Z2Ffc2V0X2xlZ2FjeV9kZWNvZGluZyhwZGV2LA0KPiA+ID4gPiA+ID4gPiA+IEBAIC0x Mzg3LDYgKzE1NzcsMTIgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfcmVtb3ZlKHN0cnVjdA0KPiA+ IHBjaV9kZXYNCj4gPiA+ID4gPiA+ICpwZGV2KQ0KPiA+ID4gPiA+ID4gPiA+ICAJaWYgKCF2ZGV2 KQ0KPiA+ID4gPiA+ID4gPiA+ICAJCXJldHVybjsNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ ID4gPiA+ICsJaWYgKHZkZXYtPnZmX3Rva2VuKSB7DQo+ID4gPiA+ID4gPiA+ID4gKwkJV0FSTl9P Tih2ZGV2LT52Zl90b2tlbi0+dXNlcnMpOw0KPiA+ID4gPiA+ID4gPiA+ICsJCW11dGV4X2Rlc3Ry b3koJnZkZXYtPnZmX3Rva2VuLT5sb2NrKTsNCj4gPiA+ID4gPiA+ID4gPiArCQlrZnJlZSh2ZGV2 LT52Zl90b2tlbik7DQo+ID4gPiA+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ID4gPiA+ICAJdmZpb19wY2lfcmVmbGNrX3B1dCh2ZGV2LT5yZWZsY2spOw0KPiA+ID4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gIAl2ZmlvX2lvbW11X2dyb3VwX3B1dChwZGV2LT5k ZXYuaW9tbXVfZ3JvdXAsICZwZGV2LQ0KPiA+ID5kZXYpOw0KPiA+ID4gPiA+ID4gPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXZhdGUuaA0KPiA+ID4gPiA+ID4g PiA+IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2YXRlLmgNCj4gPiA+ID4gPiA+ID4g PiBpbmRleCA4YTJjNzYwN2Q1MTMuLjc2YzExYzkxNTk0OSAxMDA2NDQNCj4gPiA+ID4gPiA+ID4g PiAtLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXZhdGUuaA0KPiA+ID4gPiA+ID4g PiA+ICsrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdmF0ZS5oDQo+ID4gPiA+ID4g PiA+ID4gQEAgLTEyLDYgKzEyLDcgQEANCj4gPiA+ID4gPiA+ID4gPiAgI2luY2x1ZGUgPGxpbnV4 L3BjaS5oPg0KPiA+ID4gPiA+ID4gPiA+ICAjaW5jbHVkZSA8bGludXgvaXJxYnlwYXNzLmg+DQo+ ID4gPiA+ID4gPiA+ID4gICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ID4gPiA+ID4gPiA+ ICsjaW5jbHVkZSA8bGludXgvdXVpZC5oPg0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ ID4gICNpZm5kZWYgVkZJT19QQ0lfUFJJVkFURV9IDQo+ID4gPiA+ID4gPiA+ID4gICNkZWZpbmUg VkZJT19QQ0lfUFJJVkFURV9IDQo+ID4gPiA+ID4gPiA+ID4gQEAgLTg0LDYgKzg1LDEyIEBAIHN0 cnVjdCB2ZmlvX3BjaV9yZWZsY2sgew0KPiA+ID4gPiA+ID4gPiA+ICAJc3RydWN0IG11dGV4CQls b2NrOw0KPiA+ID4gPiA+ID4gPiA+ICB9Ow0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ ID4gK3N0cnVjdCB2ZmlvX3BjaV92Zl90b2tlbiB7DQo+ID4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3Qg bXV0ZXgJCWxvY2s7DQo+ID4gPiA+ID4gPiA+ID4gKwl1dWlkX3QJCQl1dWlkOw0KPiA+ID4gPiA+ ID4gPiA+ICsJaW50CQkJdXNlcnM7DQo+ID4gPiA+ID4gPiA+ID4gK307DQo+ID4gPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlIHsNCj4gPiA+ID4g PiA+ID4gPiAgCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsNCj4gPiA+ID4gPiA+ID4gPiAgCXZvaWQg X19pb21lbQkJKmJhcm1hcFtQQ0lfU1REX05VTV9CQVJTXTsNCj4gPiA+ID4gPiA+ID4gPiBAQCAt MTIyLDYgKzEyOSw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Ugew0KPiA+ID4gPiA+ID4gPiA+ ICAJc3RydWN0IGxpc3RfaGVhZAlkdW1teV9yZXNvdXJjZXNfbGlzdDsNCj4gPiA+ID4gPiA+ID4g PiAgCXN0cnVjdCBtdXRleAkJaW9ldmVudGZkc19sb2NrOw0KPiA+ID4gPiA+ID4gPiA+ICAJc3Ry dWN0IGxpc3RfaGVhZAlpb2V2ZW50ZmRzX2xpc3Q7DQo+ID4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3Qg dmZpb19wY2lfdmZfdG9rZW4JKnZmX3Rva2VuOw0KPiA+ID4gPiA+ID4gPiA+ICB9Ow0KPiA+ID4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gICNkZWZpbmUgaXNfaW50eCh2ZGV2KSAodmRldi0+ aXJxX3R5cGUgPT0NCj4gPiBWRklPX1BDSV9JTlRYX0lSUV9JTkRFWCkNCj4gPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPg0KPiA+ID4NCg0K