From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30079.outbound.protection.outlook.com [40.107.3.79]) by dpdk.org (Postfix) with ESMTP id 136331B3AB for ; Thu, 22 Nov 2018 12:31:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Oii0Hp6P1SfwrppmZ1ldhOEJ/nqDC6vW8UZzb4e1joI=; b=oksdKAjJRvTEY884TteRLA2qJWD5usbH/xE075XtY+sGY7FsnlPQjbPuKvhH80LwQChc3r1PA9bgTepP3CNGy9Hq5bIk1sjEf7GS+rSW5LPP8zIgIux/rpfloRCRuh7MMzolp/qz8i2pr0S0J/uHzjHIl14wuqSoHHumRsMSZwE= Received: from DB7PR05MB4426.eurprd05.prod.outlook.com (52.134.109.15) by DB7PR05MB5691.eurprd05.prod.outlook.com (20.178.104.208) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1339.26; Thu, 22 Nov 2018 11:31:42 +0000 Received: from DB7PR05MB4426.eurprd05.prod.outlook.com ([fe80::bc22:c2f5:208d:826f]) by DB7PR05MB4426.eurprd05.prod.outlook.com ([fe80::bc22:c2f5:208d:826f%2]) with mapi id 15.20.1294.048; Thu, 22 Nov 2018 11:31:42 +0000 From: Shahaf Shuler To: "Burakov, Anatoly" , "dev@dpdk.org" CC: Olga Shern , Yongseok Koh , "pawelx.wodkowski@intel.com" , "gowrishankar.m@linux.vnet.ibm.com" , "ferruh.yigit@intel.com" , Thomas Monjalon , "arybchenko@solarflare.com" , "shreyansh.jain@nxp.com" Thread-Topic: [dpdk-dev] [RFC] ethdev: introduce DMA memory mapping for external memory Thread-Index: AQHUglACzJpexAth4EeG2Jy4UQzbz6Vbp3bg Date: Thu, 22 Nov 2018 11:31:42 +0000 Message-ID: References: <6c7243cd-5370-846b-2999-5ae34722f640@intel.com> <1c00477d-266a-400e-44b4-5bcb1f41e4b7@intel.com> <7c26e2d2-0c87-d416-87a2-737caa457ed6@intel.com> In-Reply-To: <7c26e2d2-0c87-d416-87a2-737caa457ed6@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=shahafs@mellanox.com; x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB7PR05MB5691; 6:XNe+cd6Hlp+QRWT4NEW7EwtZSaJE1d1G3JBBLaVjS+GU428VOCc6w/S6YcQTm4CIjVNnKqKUgZ70bL99QssTkmHk1tfbibImMRSUQ0dc14d9SwIecS15qcX8Lt6YEx5p3NhXCCATS51oXH/id4KgT608oqYZqNk1wR6PGbPvT94aay8zZOG2g2UCQnhkd1SygUDCz9S2CXFSdVyokkKKiCSAmN0RvEcixH0cLjpZuiKDqProhSbUtne4NVikOPXXuizMbhzKmiw2CMUFV7AhmP8EkS29W1Eum37Avi7bzzIgmsmW7JxsgLwvaDd69bCvVHjbufzjsKUT9R4Wxq0JH/toYydjTeK1SGaAcJ5pvM7CDRGE4tfzgX7JQ3mSt/UjkaiTB+QyRE+QTrx+P/0V1tct8vezgqzhp8GcVe1KpfSzdN78Z6yX+S2Ru0Hj3adLuRio1qcH/JLBm8pDfPdE1Q==; 5:6Tlmgl8m0URqq5WZz5DTuz1sij6jBmdPmqCumHz1NYpVKk5T+Bg66twwfiYa0CYZj60Cua61fIidJgLNj3SsHiCQlNjunYtT9iaXSL7alLAvi6ejeVC0JygmABSzjVmBcznQ3zWvUYGnSYBuYj2TpdE10PgXLjhLZcxtaBEGrdc=; 7:iLSYPJnueevs2lVdMl9xCr0HSsu1Gp5l7+ND88pGT7mUKUvqUn4cQ2wf9x52DqsJFkqf0Ivm7WOJLX9nR5hTiMDPJLvzW5xE1fRsgi7r3+IWrKR6j1KPgv6f6N5w2Z/+lJb378BvTJ5hgah/gVzJow== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 453d3f38-5da0-4c61-adc0-08d6506e13d9 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:DB7PR05MB5691; x-ms-traffictypediagnostic: DB7PR05MB5691: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(93006095)(93001095)(3231442)(944501410)(52105112)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123562045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:DB7PR05MB5691; BCL:0; PCL:0; RULEID:; SRVR:DB7PR05MB5691; x-forefront-prvs: 0864A36BBF x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(136003)(366004)(39860400002)(396003)(189003)(199004)(7736002)(68736007)(93886005)(25786009)(6246003)(316002)(5024004)(256004)(561944003)(33656002)(6116002)(3846002)(4326008)(71190400001)(55016002)(2906002)(97736004)(4744004)(66066001)(14454004)(105586002)(53936002)(9686003)(71200400001)(6436002)(478600001)(99286004)(86362001)(2900100001)(76176011)(81156014)(106356001)(8676002)(229853002)(81166006)(8936002)(74316002)(7696005)(476003)(5660300001)(26005)(110136005)(54906003)(186003)(11346002)(305945005)(2501003)(53546011)(6506007)(486006)(446003)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR05MB5691; H:DB7PR05MB4426.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: m9VHJqCOvemT4xGoL6m8Dc1xjylFwxTpNKEZU8XQavAVioa52wSj2AJfcDUT1k7+OLfrnWgeweiiM1QuCDFTMQL5Wp9/76cTcO3qm3ok0PQc05NW5Crp9y1J0suZWGuAWxlOIbb15z4IrsakWMFJxrJBHzRUJQ27D0qToxbeSWuMfRQ5CGic3vQ2gebNWK/el4ig+eZkXkoCus66zfx3jOoYV/S9lkLxtOueap8l/QL/WQlCXubasNSiV4ZVbT8o0bYHPnPagmL1DoamfNmmeLcHz83OOaILrf765O+zAX7PerTnpW5CFc3rG+vyXYprvqEZIUKsSOXtO0vC1jylM2dsn1Kbn9eI+mdePvUCQWo= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 453d3f38-5da0-4c61-adc0-08d6506e13d9 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Nov 2018 11:31:42.7860 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR05MB5691 Subject: Re: [dpdk-dev] [RFC] ethdev: introduce DMA memory mapping for external memory X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Nov 2018 11:31:44 -0000 VGh1cnNkYXksIE5vdmVtYmVyIDIyLCAyMDE4IDEyOjQyIFBNLCBCdXJha292LCBBbmF0b2x5Og0K PiBTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUkZDXSBldGhkZXY6IGludHJvZHVjZSBETUEgbWVt b3J5IG1hcHBpbmcgZm9yDQo+IGV4dGVybmFsIG1lbW9yeQ0KPiANCj4gT24gMjItTm92LTE4IDEw OjA2IEFNLCBTaGFoYWYgU2h1bGVyIHdyb3RlOg0KPiA+IFR1ZXNkYXksIE5vdmVtYmVyIDIwLCAy MDE4IDEyOjU2IFBNLCBCdXJha292LCBBbmF0b2x5Og0KPiA+PiBTdWJqZWN0OiBSZTogW2RwZGst ZGV2XSBbUkZDXSBldGhkZXY6IGludHJvZHVjZSBETUEgbWVtb3J5IG1hcHBpbmcNCj4gPj4gZm9y IGV4dGVybmFsIG1lbW9yeQ0KPiA+Pg0KPiA+PiBPbiAyMC1Ob3YtMTggODowOCBBTSwgU2hhaGFm IFNodWxlciB3cm90ZToNCj4gPj4+IE1vbmRheSwgTm92ZW1iZXIgMTksIDIwMTggNzoxOCBQTSwg QnVyYWtvdiwgQW5hdG9seToNCj4gPj4+PiBTdWJqZWN0OiBSZTogW1JGQ10gZXRoZGV2OiBpbnRy b2R1Y2UgRE1BIG1lbW9yeSBtYXBwaW5nIGZvcg0KPiA+Pj4+IGV4dGVybmFsIG1lbW9yeQ0KPiA+ Pj4+DQo+ID4+Pj4gT24gMTktTm92LTE4IDExOjIwIEFNLCBTaGFoYWYgU2h1bGVyIHdyb3RlOg0K PiA+Pj4+PiBUaHVyc2RheSwgTm92ZW1iZXIgMTUsIDIwMTggMTowMCBQTSwgQnVyYWtvdiwgQW5h dG9seToNCj4gPj4+Pj4+IFN1YmplY3Q6IFJlOiBbUkZDXSBldGhkZXY6IGludHJvZHVjZSBETUEg bWVtb3J5IG1hcHBpbmcgZm9yDQo+ID4+Pj4+PiBleHRlcm5hbCBtZW1vcnkNCj4gPj4+Pj4+DQo+ ID4+Pj4+PiBPbiAxNS1Ob3YtMTggOTo0NiBBTSwgU2hhaGFmIFNodWxlciB3cm90ZToNCj4gPj4+ Pj4+PiBXZWRuZXNkYXksIE5vdmVtYmVyIDE0LCAyMDE4IDc6MDYgUE0sIEJ1cmFrb3YsIEFuYXRv bHk6DQo+ID4+Pj4+Pj4+IFN1YmplY3Q6IFJlOiBbUkZDXSBldGhkZXY6IGludHJvZHVjZSBETUEg bWVtb3J5IG1hcHBpbmcgZm9yDQo+ID4+Pj4+Pj4+IGV4dGVybmFsIG1lbW9yeQ0KPiA+Pj4+Pj4+ Pg0KPiA+Pj4+Pj4+PiBPbiAxNC1Ob3YtMTggMjo1MyBQTSwgU2hhaGFmIFNodWxlciB3cm90ZToN Cj4gPj4+Pj4+Pj4+IEhpIEFuYXRvbHksDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gV2VkbmVz ZGF5LCBOb3ZlbWJlciAxNCwgMjAxOCAxOjE5IFBNLCBCdXJha292LCBBbmF0b2x5Og0KPiA+Pj4+ Pj4+Pj4+IFN1YmplY3Q6IFJlOiBbUkZDXSBldGhkZXY6IGludHJvZHVjZSBETUEgbWVtb3J5IG1h cHBpbmcNCj4gZm9yDQo+ID4+Pj4+Pj4+Pj4gZXh0ZXJuYWwgbWVtb3J5DQo+ID4+Pj4+Pj4+Pj4N Cj4gPj4+DQo+ID4+PiBbLi4uXQ0KPiA+DQo+ID4gWy4uLl0NCj4gPg0KPiA+IEkgdGhvdWdodCB0 aGUgMTguMTEgZmVhdHVyZSBzaG91bGQgc2VydmUgYm90aCBjYXNlcy4NCj4gPiBUbyB1c2UgbWVt b3J5IG5vdCBtYW5hZ2VkIGJ5IERQREsgdXNlciBzaG91bGQgY3JlYXRlIGhlYXAgYW5kDQo+IHBv cHVsYXRlIGl0IHcvIHRoZSBtZW1vcnksIHNvIHRoYXQgaXQgY2FuIHVzZSBpdCBsYXRlciBmb3Ig bWVtcG9vbC9yaW5ncy4NCj4gDQo+IFRoZSBmZWF0dXJlIGludHJvZHVjZWQgaW4gMTguMTEgZXhw ZWN0cyB5b3UgdG8gdXNlIERQREsgYWxsb2NhdGlvbiBtZXRob2RzDQo+IHdpdGggYWRkZWQgbWVt b3J5LiBJdCBpcyBub3QgYSBzdXBwb3J0ZWQgdXNlIGNhc2UgdG8gY3JlYXRlIGFuIGV4dGVybmFs DQo+IG1lbW9yeSBhcmVhLCByZWdpc3RlciBpdCB3aXRoIGhlYXAgKmFuZCogdXNlIG1hbnVhbCBt ZW1vcnkgbWFuYWdlbWVudA0KPiBvbiB0aGF0IGFyZWEgKGUuZy4gcG9wdWxhdGUgbWVtcG9vbCBh bm9ueW1vdXNseSkuDQo+IA0KPiBQZXJoYXBzIHRoZXJlIHNob3VsZCBiZSBhIG5ldyBBUEksIHNv bWV0aGluZyBsaWtlICJyZWdpc3Rlcl9tZW1vcnkiLA0KPiB3aGVyZSB3ZSBvbmx5IHJlZ2lzdGVy IG1lbW9yeSwgYnV0IGRvIG5vdCBleHBlY3QgdGhlIHVzZXIgdG8gdXNlIERQREsNCj4gYWxsb2Nh dG9yIHdpdGggc2FpZCBtZW1vcnkuIA0KDQpJc24ndCBpdCB0aGUgZXhpc3RpbmcgcnRlX3ZmaW9f ZG1hX21hcD8NCg0KSSB3aXNoIGkgd291bGQndmUgdGhvdWdodCBvZiB0aGF0IGJlZm9yZSwgd2hl cmUNCj4gaGF2ZSB5b3UgYmVlbiBhbGwgdGhpcyB0aW1lISA6RCBJIHRoaW5rIHRoaXMgc2hvdWxk IGZlYXR1cmUgZGVmaW5pdGVseSBnbyBpbnRvDQo+IDE5LjAyLiBBcmUgd2UgcGFzdCB0aGUgdjEg ZGVhZGxpbmU/DQo+IA0KPiA+DQo+ID4+DQo+ID4+IFRoZSBhYm92ZSBzY2VuYXJpbyAod29ya2lu ZyB3aXRoIGFub255bW91cyBtZW1vcnkgaW4gbWVtcG9vbHMpIGlzDQo+ID4+IHN0aWxsICJicm9r ZW4iIGluIHRoaXMgc2Vuc2UgLSBhbmQgaSBzZWUgbm8gZ2VuZXJhbCB3YXkgdG8gZml4IGl0LiBJ dA0KPiA+PiBjb3VsZCB3b3JrIHdpdGggbWVtcG9vbHMgaW4gdGhhdCB3ZSBjb3VsZCBhdXRvbWF0 aWNhbGx5IGNyZWF0ZSBuZXcNCj4gPj4gaGVhcHMgYmVoaW5kIHRoZSBzY2VuZXMgYW5kIHBvcHVs YXRlIHRoZW0gd2l0aCBuZXcgbWVtb3J5LCBidXQgZm9yDQo+ID4+IG90aGVyIGRhdGEgc3RydWN0 dXJlcyAoZS5nLiBydGVfcmluZ19pbml0KCkgb3ZlciBhbm9ueW1vdXMgbWVtb3J5KSwNCj4gPj4g aXQncyBqdXN0IG5vdCBwb3NzaWJsZSB0byBkbyB0aGF0Lg0KPiA+Pg0KPiA+PiBJIHBlcnNvbmFs bHkgd291bGQgcHJlZmVyIHRoZXNlIEFQSSdzIHRvIGp1c3QgZ28gYXdheSBhbmQgcGVvcGxlDQo+ ID4+IHN0YXJ0ZWQgdXNpbmcgdGhlICJvZmZpY2lhbCIgd2F5IHRvIG1hbmFnZSBleHRlcm5hbCBt ZW1vcnkuIFJlbW92aW5nDQo+ID4+IHRoZSBBUEkncyBtYXkgZXZlbiBiZSBmZWFzaWJsZSBmb3Ig ZXZlcnl0aGluZyBiYXIgbWVtcG9vbCwgYW5kDQo+ID4+IG1lbXBvb2wgc3VwcG9ydCB3ZSBjYW4g bWFuYWdlIG1vcmUtb3ItbGVzcyBhdXRvbWF0aWNhbGx5IGluIHRoZQ0KPiBhYm92ZQ0KPiA+PiB3 YXkgKGJ5IGF1dG9tYXRpY2FsbHkgY3JlYXRpbmcgYW4gZXh0ZXJuYWwgaGVhcCBiZWhpbmQgdGhl IHNjZW5lcykuDQo+ID4+IEJ1dCB0aGVuIGJ5IHRoZSB0aW1lIHdlJ3JlIGNyZWF0aW5nL2FkZGlu ZyBleHRlcm5hbCBtZW1vcnkgaGVhcHMNCj4gPj4gaW5zaWRlIG1lbXBvb2wgQVBJJ3MsIHlvdSBk b24ndCByZWFsbHkgbmVlZCB0aGUgZXh0ZXJuYWwgbWVtb3J5IERNQQ0KPiA+PiBtYXBwaW5nIEFQ SSBjYWxscyBiZWNhdXNlIHRoZSBtZW1wb29sIHdvdWxkIGRvIHRoYXQgYXV0b21hdGljYWxseSBi eQ0KPiA+PiB3YXkgb2YgdXNpbmcgdGhlIGV4dGVybmFsIGhlYXBzIEFQSS4NCj4gPg0KPiA+IFll cywgb25lIHdheSB0byBnbyBpcyB0byBtYXAgdGhlIG1lbW9yeSBpbnRlcm5hbGx5IGluc2lkZSB0 aGUgbWVtcG9vbA0KPiBjcmVhdGlvbi4gQnV0IGl0IHdpbGwgbm90IHdvcmsgZm9yIGFsbCBjYXNl cy4NCj4gPiBGb3IgZXhhbXBsZSwgaWYgYXBwbGljYXRpb24gd2FudHMgdG8gd29yayB3LyBtYnVm IHdpdGggZXh0ZXJuYWwgYnVmZmVyDQo+IChFWFRfQVRUQUNIRURfTUJVRiksIHRoZSBidWZmZXIg d2lsbCBiZSBhdHRhY2hlZCBvbiBhIGRpZmZlcmVudCBjYWxsDQo+IChydGVfcGt0bWJ1Zl9hdHRh Y2hfZXh0YnVmKSwgc28gd2Ugd2lsbCBuZWVkIHRvIGhhbmRsZSB0aGF0IGFzIHdlbGwuDQo+ID4g TWF5YmUgd2Ugd2lsbCBmaW5kIG1vcmUgY2FzZXMgaW4gdGhlIGZ1dHVyZS4gaSB3b3VsZCBwcmVm ZXIgdG8gc29sdmUgaXQgZm9yIGFsbA0KPiBjYXNlcy4gIFNlZSBtb3JlIGJlbG93Lg0KPiA+DQo+ ID4+DQo+ID4+IEluIG90aGVyIHdvcmRzLCB0aGUgcHJvYmxlbSBoZXJlIGlzbid0IHNvIG11Y2gg dXNhYmlsaXR5IGFzIGl0IGlzIHRoZQ0KPiA+PiBmYWN0IHRoYXQsIGZvciBzb21lIHN0dWZmLCBh IGxvdCBvZiBpbnRlcm5hbCBjb2RlIG5vdyByZWxpZXMgb24NCj4gPj4gRFBESydzIGludGVybmFs IHBhZ2UgdGFibGVzLCBhbmQgd2UgaGF2ZSB0byBlaXRoZXIgbWFrZSBhbGxvd2FuY2VzDQo+ID4+ IGZvciB0aGF0IG9uIGEgY2FzZS1ieS1jYXNlIGJhc2lzIChieSB0aGUgd2F5LCBubyBvbmUgY2Ft ZSB0byBtZSB3aXRoDQo+ID4+IHRoZXNlIGlzc3VlcyEpLA0KPiA+DQo+ID4gT25lIG9wdGlvbiBp cyBjYXNlIGJ5IGNhc2UsIG90aGVyIGNhbiBiZSB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8g ZXhwbGljaXQNCj4gbWFwIHRoaXMgbWVtb3J5IHRvIHRoZSBkaWZmZXJlbnQgZGV2aWNlcy4NCj4g Pg0KPiA+IG9yIGFkbWl0IHRoYXQgdXNpbmcNCj4gPj4gdW5yZWdpc3RlcmVkIG1lbW9yeSBpcyBh IGJhZCBpZGVhIGFuZCBsZXQncyBub3QgZG8gdGhhdCBpbiB0aGUgZnV0dXJlLg0KPiA+DQo+ID4g SSB0aGluayBpdCBpcyB1bi1hdm9pZGFibGUgKHRvIHVzZSB1bnJlZ2lzdGVyZWQgbWVtb3J5KS4g VGhlIHVzZSBjYXNlIGV4aXN0cywNCj4gdGhlcmUgYXJlIGFwcGxpY2F0aW9ucyB3aGljaCBwcmVm ZXIgdG8gaGF2ZSB0aGVpciBvd24gbWVtb3J5IG1hbmFnZW1lbnQuDQo+ID4gRm9yIHRob3NlIGFw cHMsIHdlIG5lZWQgdG8gaGF2ZSBhIHNvbHV0aW9uLg0KPiA+DQo+ID4+DQo+ID4+Pg0KPiA+Pj4+ DQo+ID4+Pj4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSB3ZXJlIHRvIHVzZSBpdCBpbiBhIGRp ZmZlcmVudCB3YXkgLSBmb3INCj4gPj4+PiBleGFtcGxlLCBhbGxvY2F0aW5nIGhhc2ggdGFibGVz IG9yIG90aGVyIERQREsgZGF0YSBzdHJ1Y3R1cmVzIC0NCj4gPj4+PiB0aGVuIHN1Y2ggYSBmZWF0 dXJlIGlzIGVzc2VudGlhbC4NCj4gPj4+DQo+ID4+PiBIYXNoIHRhYmxlcyB0aGF0IHRoZSBOSUMg bmVlZHMgdG8gcmVhZC93cml0ZSB0by9mcm9tPw0KPiA+Pj4gSSBkaWRuJ3QgZ2V0IHRoZSBwb2lu dCBoZXJlLg0KPiA+Pg0KPiA+PiBUaGUgcG9pbnQgd2Fzbid0IGhhc2ggdGFibGVzLCBidXQgc3Vw cG9ydCBmb3IgdXNlIGNhc2VzIHdlIG1pZ2h0IG5vdA0KPiA+PiBoYXZlIHRob3VnaHQgb2YuIFRo YXQgaW5jbHVkZXMgZG9pbmcgc3RyYW5nZSB0aGluZ3MgbGlrZSBhbGxvY2F0aW5nDQo+ID4+IERQ REsgZGF0YSBzdHJ1Y3R1cmVzIGluIG5vbi1zdGFuZGFyZCBtZW1vcnkgbG9jYXRpb25zLg0KPiA+ Pg0KPiA+Pj4NCj4gPj4+IFRoZSBlbnRpcmUgcG9pbnQgd2FzIHRvIGFsbG93IHVzaW5nIGV4dGVy bmFsIG1lbW9yeSB3aXRoDQo+ID4+Pj4gc2VtYW50aWNzIGlkZW50aWNhbCB0byBob3cgeW91IHVz ZSB0aGUgcmVzdCBvZiBEUERLLg0KPiA+Pj4NCj4gPj4+IEkgdW5kZXJzdGFuZCB0aGlzIGRlc2ln biBjaG9pY2UsIGFuZCBpdCBoYXMgdGhlIGJlbmVmaXQgb2YgY29uc2lzdGVuY3kgdi5zLg0KPiA+ PiBtb3JlIEFQSSBjYWxsIG9uIHRoZSBhcHBsaWNhdGlvbiBzaWRlLg0KPiA+Pj4NCj4gPj4+Pg0K PiA+Pj4+IEFsc28sIHdoZXRoZXIgaXQncyAiaW50dWl0aXZlIiBkZXBlbmRzIG9uIHBlcnNwZWN0 aXZlIC0geW91IHNheSAiaQ0KPiA+Pj4+IGV4cGVjdCB0byBhbGxvY2F0ZSBtZW1vcnkgYW5kIG1h cCBpdCBmb3IgRE1BIG15c2VsZiIsIGkgc2F5ICJ3aHkgZG8NCj4gPj4+PiBpIGhhdmUgdG8gY2Fy ZSBhYm91dCBETUEgbWFwcGluZywgRFBESyBzaG91bGQgZG8gdGhpcyBmb3IgbWUiIDopDQo+ID4+ Pg0KPiA+Pj4gUmlnaHQg8J+Yii4gV2Ugc2hvdWxkIGJlIGRyaXZlbiBieSBjdXN0b21lcnMgYW5k IG5vdCB2ZW5kb3JzLCB0b28gYmFkDQo+ID4+PiB0aGVyZQ0KPiA+PiBpcyBubyBtdWNoIGZlZWRi YWNrIGZyb20gdGhlbSBvbiB0aGUgY29tbXVuaXR5Lg0KPiA+Pg0KPiA+PiBUaGF0IGltcGxpZXMg Y3VycmVudCBkZXNpZ24gKndhc24ndCogZHJpdmVuIGJ5IGN1c3RvbWVycywgd2hpY2ggaXMgbm90 DQo+IHRydWUuDQo+ID4+IFRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyBvbmVzIHlvdSBhcmUg YXdhcmUgb2YgLSBidXQgdGhlbiB0aGlzDQo+ID4+IGlzbid0IHJlYWxseSBteSBmYXVsdCA6KQ0K PiA+Pg0KPiA+Pj4gSSBrbm93IGZyb20gVlBQIHNpZGUgdGhleSBwcmVmZXIgbm90IHRvIHVzZSB0 aGUgcnRlX3NvY2tldCByYXRoZXIgdG8NCj4gPj4gbWFuYWdlIHRoZSBtZW1vcnkgYnkgdGhlbSBz ZWxmLCBhbmQgdGhleSBhcmUgcGVyZmVjdGx5IGZpbmUgd2l0aA0KPiA+PiBtYXBwaW5nIGl0IGV4 cGxpY2l0bHkuIFRoaXMgaXMgdHJ1ZSBmb3Igb3RoZXIgY29tcGFueSB0aGF0IGhhcw0KPiA+PiB2 c3dpdGNoIHNvbHV0aW9uICh3aGljaCBJIGNhbm5vdCBtZW50aW9uIGJ5IG5hbWUpLg0KPiA+Pg0K PiA+PiBXZWxsLCBpdCdzIG5vdCBsaWtlIGkgY2FuIGRvIGFueXRoaW5nIGlmIG5vIG9uZSBmcm9t IGVpdGhlcg0KPiA+PiBjb21tdW5pdGllcyBjb21lcyBoZXJlIGFuZCBlbmdhZ2VzIGluIHRoZSBk aXNjdXNzaW9uLiBJIHdpc2ggaSBjb3VsZA0KPiA+PiByZWFkIHBlb3BsZSdzIG1pbmRzLCBidXQg YWxhcyA6KQ0KPiA+Pg0KPiA+Pj4NCj4gPj4+DQo+ID4+PiBJZiB5b3UgYXJlIHVzaW5nIHlvdXIN Cj4gPj4+PiBvd24gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRvaW5nIGV2ZXJ5dGhpbmcgbWFudWFs bHkgLSB5b3UgZ2V0IHRvDQo+ID4+IG1hcA0KPiA+Pj4+IGV2ZXJ5dGhpbmcgZm9yIERNQSBtYW51 YWxseS4gSWYgeW91IGFyZSB1c2luZyBEUERLIGZhY2lsaXRpZXMNCj4gPj4+PiAtIGl0IGlzIGlu dHVpdGl2ZSB0aGF0IGZvciBhbnkgRFBESy1tYW5hZ2VkIG1lbW9yeSwgaW50ZXJuYWwgb3INCj4g Pj4+PiBleHRlcm5hbCwgc2FtZSBydWxlcyBhcHBseSBhY3Jvc3MgdGhlIGJvYXJkIC0gRE1BIG1h cHBpbmcgaW5jbHVkZWQuDQo+ID4+Pg0KPiA+Pj4gU28gaWYgdW5kZXJzdGFuZCB5b3UgcG9pbnQg aGVyZSwgeW91ciBjbGFpbSAid2UgbmVlZCBib3RoIi4gT25lIGZvcg0KPiA+Pj4gdXNlcnMNCj4g Pj4gd2hpY2ggcHJlZmVyIHRoZSBEUERLIHRvIGRvIHRoYXQgZm9yIHRoZW0gYW5kIHRoZSBvdGhl ciBmb3IgdGhlIHVzZXJzDQo+ID4+IHdobyB3YW50cyBtb3JlIGNvbnRyb2wuDQo+ID4+PiBIb3dl dmVyLCB3aGVuIGtlZXBpbmcgdGhlIEFQSSBvZiBleHBsaWNpdCBtYXBwaW5nLCB3ZSBjYW4gbm8g bG9uZ2VyDQo+ID4+PiBzYXkNCj4gPj4gdGhhdCBleHRlcm5hbCBtZW1vcnkgaXMgYmVoYXZlcyBl eGFjdGx5IHRoZSBzYW1lIGFzIGludGVybmFsLg0KPiA+Pg0KPiA+PiBXZWxsLCBtb3JlIG9yIGxl c3MgdGhhdCwgeWVzLiBJdCB3b3VsZCBiZSBnb29kIHRvIGhhdmUgZnVsbCBzdXBwb3J0DQo+ID4+ IGZvciAiZXh0ZXJuYWwiIG1lbW9yeSAoaW4gdGhlICJ1bnJlZ2lzdGVyZWQgd2l0aCBEUERLIiBz ZW5zZSwgYXMNCj4gPj4gb3V0bGluZWQgYWJvdmUpLg0KPiA+Pg0KPiA+Pj4NCj4gPj4+IFNvIGdv aW5nIGJhY2sgdG8gbXkgUkZDIPCfmIosIGlmIHdlIGRlY2lkZSB0byBrZWVwIGJvdGggYXBwcm9h Y2gsIHdoYXQNCj4gPj4+IEkNCj4gPj4gc3VnZ2VzdCBpcyB0byBjaGFuZ2UgdGhlIFZGSU8gbWFw cGluZyBvbmUgdG8gYmUgbW9yZSBnZW5lcmljIGFuZCBwZXINCj4gPj4gZGV2aWNlIChjYW4gYmUg cnRlX2RldmljZSkuDQo+ID4+PiBJIHRoaW5rIHRoZSBiaWdnZXN0IHF1ZXN0aW9ucyB3ZSBuZWVk IHRvIGFuc3dlciBhcmUgMS4gYXJlIHdlIE9LDQo+ID4+PiB3aXRoIGdlbmVyaWMsIHZlbmRvciBh Z25vc3RpYyBBUEk/DQo+ID4+DQo+ID4+IFllcywgZ2VuZXJpYyBhbmQgdmVuZG9yLWFnbm9zdGlj IEZUVyENCj4gPj4NCj4gPj4+IDIuICBhcmUgd2UgT0sgdGhhdCB0aGUgZXhwbGljaXQgbWFwcGlu ZyBpcyBkb25lIHBlciBkZXZpY2U/DQo+ID4+DQo+ID4+IFRoaXMgcXVlc3Rpb24gaXMgc2xpZ2h0 bHkgbWlzbGVhZGluZywgYmVjYXVzZSB0aGF0J3Mgbm90ICphbGwqIHRoZXJlDQo+ID4+IGlzIHRv IGl0LiBJbiBnZW5lcmFsLCB5ZXMsIGknbSBPSyB3aXRoIHRoZSBpZGVhLiBJbiBwcmFjdGljZSwg VkZJTyBtYXkgZ2V0IGluDQo+IHRoZSB3YXkuDQo+ID4+DQo+ID4+IFZGSU8gd29ya3MgYnkgbWFw cGluZyBtZW1vcnkgZm9yIGEgVkZJTyBjb250YWluZXIuIFRoZSBjb250YWluZXIgY2FuDQo+ID4+ IGhhdmUgb25lIG9yIG1vcmUgZGV2aWNlcyBpbiBpdCwgYW5kIGhvdyBtYW55IGRldmljZXMgaXQg Y2FuIGhhdmUNCj4gPj4gZGVwZW5kcyBvbiB0aGUgSU9NTVUgc2V0dXAgKGkuZS4gaXQgbWF5IG5v dCBiZSBwb3NzaWJsZSB0byBoYXZlIG9uZQ0KPiA+PiBkZXZpY2UgcGVyIGNvbnRhaW5lciBvbiBz b21lIHNldHVwcywgd2hpY2ggaXMgd2h5IGN1cnJlbnRseQ0KPiA+PiBldmVyeXRoaW5nIGlzIGRv bmUgd2l0aCBvbmUgY29udGFpbmVyKS4NCj4gPg0KPiA+DQo+ID4gICBTbywgInBlci1kZXZpY2Ui IG1lYW5zIHdlIGVpdGhlciBrZWVwIGVhY2ggZGV2aWNlIGluDQo+ID4+IHNlcGFyYXRlIGNvbnRh aW5lciAod2hpY2ggd2lsbCBub3Qgd29yayBpbiBzb21lIGNhc2VzKSwNCj4gPiBvciB3ZSBzb21l aG93DQo+ID4+IHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgbWFwcGluZ3MgY2FuIGJlIHBlcmZv cm1lZCBvbmx5IG9uY2UgKGknbQ0KPiA+PiBub3Qgc3VyZSBpZiBWRklPIHdpbGwgcmV0dXJuIGFw cHJvcHJpYXRlIGVycm9yIGNvZGVzIHRoYXQgd291bGQgYWxsb3cNCj4gPj4gdXMgdG8gZGlzdGlu Z3Vpc2ggZmFpbGVkIG1hcHBpbmdzIGR1ZSB0byBkdXBsaWNhdGUsIG9yIGZhaWxlZA0KPiA+PiBt YXBwaW5ncyBkdWUgdG8gb3RoZXIgcmVhc29ucyAtIGknbGwgaGF2ZSB0byByZXNlYXJjaCB0aGlz KSwgYW5kIGtlZXANCj4gPj4gYWxsIGRldmljZXMgaW4gdGhlIHNhbWUgY29udGFpbmVyLg0KPiA+ DQo+ID4gWWVzIEkgc2VlIGhlcmUgMiBvcHRpb25zOg0KPiA+IDEuIHRoZSBWRklPIGhhcyBnb29k IGVycm9yIHJlcG9ydHMgdGhhdCBlbmFibGVzIHRoZSB1c2VyIHRvIHVuZGVyc3RhbmQNCj4gbWFw cGluZyBmYWlsZWQgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGV4aXN0cy4NCj4gPiAyLiB0byBob2xk IGRhdGFiYXNlIHdoaWNoIHdpbGwgc2F5IHdoaWNoIElPVkEgd2VyZSBhbHJlYWR5IG1hcHBlZCBz byB0aGUNCj4gRFBESyB2ZmlvIG1hcHBpbmcgd2lsbCBrbm93IHRvIGF2b2lkIGl0Lg0KPiANCj4g T3B0aW9uIDIgaXMgZGlmZmljdWx0IHRvIHN1cHBvcnQgd2l0aCBzZWNvbmRhcnkgcHJvY2Vzc2Vz LiBTZWNvbmRhcnkNCj4gcHJvY2Vzc2VzIGFsc28gdXNlIHRoZSBzYW1lIGNvbnRhaW5lciBhbmQg dGh1cyBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2aWV3DQo+IG9mIHdoYXQgaXMgbWFwcGVkIGFuZCB3 aGF0IGlzbid0LiBHaXZlbiB0aGF0IFZGSU8gbWFwcGluZyBtYXkgaGFwcGVuDQo+IGR1cmluZyBt ZW1vcnkgYWxsb2NhdGlvbiwgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbGxvY2F0ZSBtb3JlIG1lbW9y eSB0byBob2xkDQo+IGV4dHJhIG1hcHBpbmdzLCBzbyBzaGFyZWQgbWVtb3J5IHdvbid0IHdvcmsg aGVyZS4gV2UgY291bGQgdXNlIGZiYXJyYXkNCj4gZm9yIHRoaXMsIGJ1dCB0aGF0IHdvdWxkIG1h a2UgdGhlIGFtb3VudCBvZiBtYXBwaW5ncyBmaXhlZC4NCj4gDQo+ID4NCj4gPj4NCj4gPj4gSW4g b3RoZXIgd29yZHMsIGl0IG1heSBiZSBwb3NzaWJsZSB0byBzb2x2ZSB0aGlzIGlzc3VlIGZvciBW RklPLCBidXQNCj4gPj4gaSB3b3VsZCBub3QgYmUgY29tZm9ydGFibGUgdG8gcHJvY2VlZCB3aXRo b3V0IGtub3dpbmcgdGhhdCB0aGlzIGNhbg0KPiA+PiBiZSBkb25lIGluIGEgc2FuZSB3YXkuDQo+ ID4NCj4gPiArMS4NCj4gPg0KPiA+IEkgdGhpbmsgdGhlIHNpbXBsZXN0IGlzICMxIGFib3ZlLiBI b3cgY2FuIHdlIGdldCBhbiBhbnN3ZXIgb24gaXQ/DQo+IA0KPiBBIGZldyBleHBlcmltZW50cyBz aG91bGQgZG8gaXQgOikgSSdsbCBnZXQgYmFjayB0byB5b3Ugb24gdGhhdC4NCj4gDQo+ID4NCj4g Pj4NCj4gPj4gVGhlcmUncyBhbHNvIGEgcXVlc3Rpb24gb2YgYXV0b21hdGljIHZzLiBtYW51YWwg bWFwcGluZy4gVGhlIHdheSBpDQo+ID4+IHNlZSBpdCwgdGhlIGNob2ljZXMgYXJlOg0KPiA+Pg0K PiA+PiAxKSBkcm9wIGF1dG9tYXRpYyByZWdpc3RyYXRpb24gZm9yIERNQSBhbHRvZ2V0aGVyLCBm b3IgYm90aCBpbnRlcm5hbA0KPiA+PiBhbmQgZXh0ZXJuYWwgbWVtb3J5DQo+ID4+IDIpIGRyb3Ag YXV0b21hdGljIHJlZ2lzdHJhdGlvbiBmb3IgRE1BIGZvciBleHRlcm5hbCBtZW1vcnkgb25seSwg YnV0DQo+ID4+IGtlZXAgYXV0b21hdGljIERNQSByZWdpc3RyYXRpb24gZm9yIGludGVybmFsIG1l bW9yeQ0KPiA+PiAzKSBkbyBhdXRvbWF0aWMgRE1BIHJlZ2lzdHJhdGlvbiBmb3IgYm90aA0KPiA+ Pg0KPiA+PiBJIGRvbid0IGxpa2UgdGhlIHNlY29uZCBjaG9pY2UgZm9yIEFQSSBjb25zaXN0ZW5j eSByZWFzb25zLCBzbyBpDQo+ID4+IHdvdWxkIHJhdGhlciBnbyBlaXRoZXIgZm9yIDEpIChhbmQg Y2F1c2UgbWFzc2l2ZSBicmVha2FnZSBvZiBhbGwNCj4gPj4gZXhpc3RpbmcgYXBwbGljYXRpb25z IGFsb25nIHRoZSB3YXkuLi4pLCBvciAzKSAodGhlIHdheSBpdCdzIHdvcmtpbmcgcmlnaHQNCj4g bm93KS4NCj4gPj4gVGhlIHByYWdtYXRpYyBjaG9pY2UgKm1heSogYmUgMiksIHdoaWNoIGlzIHdo YXQgaSBmZWVsIHlvdSBhcmUNCj4gPj4gYWR2b2NhdGluZyBmb3IsIGJ1dCBpdCBoYXMgaXRzIG93 biBwcm9ibGVtcywgbWFpbmx5IHRoZSBtZWNoYW5pY3Mgb2YgaXQuDQo+ID4+IElmIHdlIGNhbiBn ZXQgdGhlbSB3b3JrZWQgb3V0LCBpIG1heSBqdXN0IGJpdGUgdGhlIGJ1bGxldCBhbmQgYWNrIHRo ZQ0KPiA+PiBwYXRjaGVzDQo+ID4+IPCfmIMNCj4gPg0KPiA+IEkgZG9uJ3QgdGhpbmsgd2UgbmVl ZCB0byBkbyBzdWNoIGV4dGVuc2l2ZSBjaGFuZ2VzLg0KPiA+DQo+ID4gSSB0aGluayBpdCBpcyBv ayB0byBoYXZlIDIgd2F5cyBmb3IgYXBwbGljYXRpb24gdG8gd29yayAodGhlIGhlYXBzIGFuZCB0 aGUNCj4gZXhwbGljaXQgRE1BIGNhbGwpLiBBZnRlciBhbGwsIERQREsgaXMgYSBkZXZlbG9wbWVu dCBraXQgYW5kIHdlIHNob3VsZCBtYWtlDQo+IGFwcGxpY2F0aW9uIGxpZmUgZWFzaWVyIGZvciBk aWZmZXJlbnQgdXNlIGNhc2VzLg0KPiA+IElmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0aGUgRFBE SyB0byBoZWxwLCBpdCBjYW4gY3JlYXRlIHRoZSBoZWFwIGFuZA0KPiBldmVyeXRoaW5nIHdpbGwg anVzdCBoYXBwZW4uIE90aGVyd2lzZSBhcHBsaWNhdGlvbiB3aWxsIGRvIHRoZSBtZW1vcnkNCj4g bWFuYWdlbWVudCBieSBpdHNlbGYsIGFuZCB1c2UgdGhlIERNQSBjYWxsIGV4cGxpY2l0bHkuDQo+ IA0KPiBJbiBvdGhlciB3b3Jkcywgd2hhdCB5b3UgYXJlIHByb3Bvc2luZyBpcyBvcHRpb24gMyks IHdpdGggYW4gYWRkaXRpb24gb2YNCj4gc3VwcG9ydCBmb3IgbWFudWFsIG1lbW9yeS9ETUEgbWFw cGluZyBtYW5hZ2VtZW50IGJ5IHdheSBvZiB0aGUgbmV3DQo+IEFQSSBwcm9wb3NlZCBhYm92ZSAo cmVnaXN0ZXJfbWVtb3J5KCkgY2FsbCkuIEFtIGkgdW5kZXJzdGFuZGluZyB5b3UNCj4gY29ycmVj dGx5Pw0KDQpFeGFjdC4gDQoNCj4gDQo+ID4NCj4gPj4NCj4gPj4gU3BlY2lmaWNhbGx5LCBsZXQn cyBzdXBwb3NlIHdlIHdhbnQgYXV0b21hdGljIG1lbW9yeSByZWdpc3RyYXRpb24gZm9yDQo+ID4+ IERNQSBvbiBpbnRlcm5hbCBidXQgbm90IGV4dGVybmFsIG1lbW9yeS4gSG93IGRvZXMgaXQgaGFw cGVuPw0KPiA+PiBDdXJyZW50bHksIGl0IGhhcHBlbnMgdmlhIG1lbSBldmVudCBjYWxsYmFja3Mu DQo+ID4+DQo+ID4+IElmIHdlIHdlcmUgdG8gZHJvcCB0aGUgY2FsbGJhY2sgYXBwcm9hY2ggZm9y IGV4dGVybmFsIG1lbW9yeSwgd2UNCj4gPj4gd291bGQgbG9zZSBvdXQgb24gYWRkaXRpb25hbCBm dW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHNhaWQNCj4gPj4gY2FsbGJhY2tzLCBhbmQgaSB3b3Vs ZCByZWFsbHkgbGlrZSB0byBhdm9pZCB0aGF0Lg0KPiA+Pg0KPiA+PiBJZiB3ZSB3ZXJlIHRvIHN3 aXRjaCB0byBtYW51YWwgbWFwcGluZywgdGhhdCBtZWFucyBFQUwgd2lsbCBkZXBlbmQgb24NCj4g Pj4gZXRoZGV2ICh5b3UgaGF2ZSBzdWdnZXN0ZWQgcnRlX2RldmljZSBhcyBhbiBhbHRlcm5hdGl2 ZSAtIHdvdWxkIHRoYXQNCj4gPj4gZml4IHRoZQ0KPiA+PiBpc3N1ZT8pDQo+ID4NCj4gPiBObyBp dCB3b24ndC4NCj4gPiBJdCB3aWxsIGhlbHAgb25seSBmb3IgdGhlIGNhc2VzIHdlcmUgd2UgaGF2 ZSBtdWx0aXBsZSBkZXZpY2VzIG9uIHRoZSBzYW1lDQo+IFBDSSBhZGRyZXNzIChsaWtlIHJlcHJl c2VudG9ycykuDQo+IA0KPiBTbywgc2hvdWxkIGl0IGJlIGFuIHJ0ZV9kZXZpY2UgY2FsbCB0aGVu Pw0KDQpJIHRoaW5rIGl0IHNob3VsZCBiZSBydGVfZGV2aWNlLiAgU28gdGhhdCB3ZSBjYW4gZG8g dGhlIHNhbWUgZm9yIGNyeXB0byBkZXZpY2VzIChhbmQgb3RoZXJzKS4NCkZvciB0aGUgcmVwcmVz ZW50b3IgY2FzZSwgIFBNRHMgY2FuIGhhdmUgaXRlcmF0b3IgdG8gcmVnaXN0ZXIgdGhlIG1lbW9y eSB0byBhbGwgb2YgdGhlIHJlbGF0ZWQgZXRoIGRldmljZXMuIA0KDQo+IA0KPiA+DQo+ID4gLCBh bmQgd2Ugd2lsbCBoYXZlIHRvIHJld3JpdGUgY3VycmVudCBETUEgbWFwcGluZyBjb2RlIHRvIGRv DQo+ID4+IG1hcHBpbmdzIGV4cGxpY2l0bHksIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gY2FsbGJh Y2tzIG1lY2hhbmlzbS4gU28sDQo+ID4+IGluc3RlYWQgb2YgZS5nLiBWRklPIG1hcHBpbmcgYmVp bmcgcGVyZm9ybWVkIHZpYSBjYWxsYmFjaywgd2Ugd291bGQNCj4gPj4gaW5zdGVhZCBpdGVyYXRl IG92ZXIgZWFjaCBydGVfZGV2aWNlIGFuZCBjYWxsIGl0cyByZXNwZWN0aXZlIERNQQ0KPiA+PiBt YXBwaW5nIGZ1bmN0aW9uIGV4cGxpY2l0bHkgLSBmb3IgaW50ZXJuYWwgbWVtb3J5LCBidXQgbm90 IGZvcg0KPiA+PiBleHRlcm5hbC4gVGhpcw0KPiA+PiAqbWF5KiB3b3JrLCBidXQgaSBuZWVkIHRv IHRoaW5rIGl0IHRocm91Z2ggYSBiaXQgbW9yZSA6KQ0KPiA+Pg0KPiA+PiBUaGlzIGFsc28gc3Rp bGwgbGVhdmVzIGEgcXVlc3Rpb24gb2YgZXh0ZXJuYWwgdW5yZWdpc3RlcmVkIG1lbW9yeSAtDQo+ ID4+IHRoaXMgaXMgYSB3aG9sbHkgc2VwYXJhdGUgaXNzdWUuDQo+ID4+DQo+ID4+IFRMO0RSIGkn bSB0ZW50YXRpdmVseSBPSyB3aXRoIHRoZSBwcm9wb3NhbCwgYnV0IHdlIG5lZWQgdG8gd29yaw0K PiA+PiBjZXJ0YWluIHRoaW5ncyBvdXQgYmVmb3JlIHdlIGdvIHRvbyBmYXIgYWxvbmcgdGhlIHBh dGggYW5kIGZpbmQgb3V0DQo+ID4+IHRoYXQgd2UndmUgcmVhY2hlZCBhIGRlYWQgZW5kLg0KPiA+ DQo+ID4gRnVsbHkgYWdyZWUsIHRoaXMgaXMgd2h5IHRoZSBSRkMgaXMgZm9yLg0KPiA+IEkgdGhp bmsgb3VyIGJpZ2dlc3QgcXVlc3Rpb24gaXMgd2hldGhlciBvciBub3QgVkZJTyB3aWxsIGJlaGF2 ZSBPSyB3aXRoDQo+IGRvdWJsZSBtYXBwaW5nIG9yIHdlIG5lZWQgc29tZSB0cmFja2luZyBtZWNo YW5pc20gaW4gRFBESy4NCj4gDQo+IFllcywgaSB3aWxsIGNoZWNrIHRoaXMgZm9yIFZGSU8gYW5k IGdldCBiYWNrIHRvIHlvdS4NCg0KR3JlYXQgdGhhbmtzLiANCg0KPiANCj4gPg0KPiA+Pg0KPiA+ PiAtLQ0KPiA+PiBUaGFua3MsDQo+ID4+IEFuYXRvbHkNCj4gDQo+IA0KPiAtLQ0KPiBUaGFua3Ms DQo+IEFuYXRvbHkNCg==