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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 376F8C64ED8 for ; Mon, 20 Feb 2023 08:59:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231308AbjBTI7o (ORCPT ); Mon, 20 Feb 2023 03:59:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42170 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229619AbjBTI7m (ORCPT ); Mon, 20 Feb 2023 03:59:42 -0500 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 803C56EA1; Mon, 20 Feb 2023 00:59:37 -0800 (PST) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id AEE7E5FD08; Mon, 20 Feb 2023 11:59:34 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1676883574; bh=UtLXTuZXv8cQep0boK1CBvozqdGMNL5usAKda7oVYZM=; h=From:To:Subject:Date:Message-ID:Content-Type:MIME-Version; b=N4oB52++CeTG9i1CV5BfTW8wA3KG4OZJtaB2QAzDAgHFOKyoy2s/lOX7Ks7Cjemmu 1qPzHQVuZKLLsibZHDzXIaJYdq2cfdQ34vQ7uOX4gwpO2wf2RYG5Lxbsx6v5msyQ8Y hyPTOuwni/g2ciS9rvowjNPkaXATWIrMv9bsqwP+kIob5qxeEjwvi0X+2MLG0holzU ebnfH0TzUTKVdYNH8iFJYrC+jXSiIkNKGxyJBwTsRvmc7kXEquCuED1uvf0GdrShZ0 nCcWwWQqnx/o7rl9CHKkrFMKWLOmciJ+HA31c1YNaghtHjiWtXwnicGp8+/8ucjnsY 1k4knpC8D4smg== Received: from S-MS-EXCH02.sberdevices.ru (S-MS-EXCH02.sberdevices.ru [172.16.1.5]) by mx.sberdevices.ru (Postfix) with ESMTP; Mon, 20 Feb 2023 11:59:32 +0300 (MSK) From: Krasnov Arseniy To: Stefano Garzarella CC: Stefan Hajnoczi , "Michael S. Tsirkin" , Jason Wang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Krasnov Arseniy , "linux-kernel@vger.kernel.org" , "kvm@vger.kernel.org" , "virtualization@lists.linux-foundation.org" , "netdev@vger.kernel.org" , kernel Subject: Re: [RFC PATCH v1 00/12] vsock: MSG_ZEROCOPY flag support Thread-Topic: [RFC PATCH v1 00/12] vsock: MSG_ZEROCOPY flag support Thread-Index: AQHZOfeA2nL8nCs+GE2d7KRGHhlyG67RcGEAgAX76AA= Date: Mon, 20 Feb 2023 08:59:32 +0000 Message-ID: References: <0e7c6fc4-b4a6-a27b-36e9-359597bba2b5@sberdevices.ru> <20230216133350.nmutrel7s5fjpkwm@sgarzare-redhat> In-Reply-To: <20230216133350.nmutrel7s5fjpkwm@sgarzare-redhat> Accept-Language: en-US, ru-RU Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.16.1.12] Content-Type: text/plain; charset="utf-8" Content-ID: <83E0E9DBBAEAF043895B1A1917C8D1EB@sberdevices.ru> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2023/02/20 05:01:00 #20887657 X-KSMG-AntiVirus-Status: Clean, skipped Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gMTYuMDIuMjAyMyAxNjozMywgU3RlZmFubyBHYXJ6YXJlbGxhIHdyb3RlOg0KPiBIaSBBcnNl bml5LA0KPiBzb3JyeSBmb3IgdGhlIGRlbGF5LCBidXQgSSB3YXMgb2ZmbGluZS4NCg0KSGVsbG8h IFN1cmUgbm8gcHJvYmxlbSEsIGkgd2FzIGFsc28gb2ZmbGluZSBhIGxpdHRsZSBiaXQgc28gaSdt IHJlcGx5aW5nDQpqdXN0IG5vdw0KDQo+IA0KPiBPbiBNb24sIEZlYiAwNiwgMjAyMyBhdCAwNjo1 MTo1NUFNICswMDAwLCBBcnNlbml5IEtyYXNub3Ygd3JvdGU6DQo+PiBIZWxsbywNCj4+DQo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBERVNDUklQ VElPTg0KPj4NCj4+IHRoaXMgaXMgTVNHX1pFUk9DT1BZIGZlYXR1cmUgc3VwcG9ydCBmb3Igdmly dGlvL3Zzb2NrLiBJIHRyaWVkIHRvIGZvbGxvdw0KPj4gY3VycmVudCBpbXBsZW1lbnRhdGlvbiBm b3IgVENQIGFzIG11Y2ggYXMgcG9zc2libGU6DQo+Pg0KPj4gMSkgU2VuZGVyIG11c3QgZW5hYmxl IFNPX1pFUk9DT1BZIGZsYWcgdG8gdXNlIHRoaXMgZmVhdHVyZS4gV2l0aG91dCB0aGlzDQo+PiDC oCBmbGFnLCBkYXRhIHdpbGwgYmUgc2VudCBpbiAiY2xhc3NpYyIgY29weSBtYW5uZXIgYW5kIE1T R19aRVJPQ09QWQ0KPj4gwqAgZmxhZyB3aWxsIGJlIGlnbm9yZWQgKGUuZy4gd2l0aG91dCBjb21w bGV0aW9uKS4NCj4+DQo+PiAyKSBLZXJuZWwgdXNlcyBjb21wbGV0aW9ucyBmcm9tIHNvY2tldCdz IGVycm9yIHF1ZXVlLiBTaW5nbGUgY29tcGxldGlvbg0KPj4gwqAgZm9yIHNpbmdsZSB0eCBzeXNj YWxsIChvciBpdCBjYW4gbWVyZ2Ugc2V2ZXJhbCBjb21wbGV0aW9ucyB0byBzaW5nbGUNCj4+IMKg IG9uZSkuIEkgdXNlZCBhbHJlYWR5IGltcGxlbWVudGVkIGxvZ2ljIGZvciBNU0dfWkVST0NPUFkg c3VwcG9ydDoNCj4+IMKgICdtc2dfemVyb2NvcHlfcmVhbGxvYygpJyBldGMuDQo+IA0KPiBJIHdp bGwgcmV2aWV3IGZvciB0aGUgdnNvY2sgcG9pbnQgb2Ygdmlldy4gSG9wZSBzb21lIG5ldCBtYWlu dGFpbmVycyBjYW4NCj4gY29tbWVudCBhYm91dCBTT19aRVJPQ09QWS4NCj4gDQo+IEFueXdheSBJ IHRoaW5rIGlzIGEgZ29vZCBpZGVhIHRvIGtlZXAgaXQgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8g dGhlIFRDUA0KPiBpbXBsZW1lbnRhdGlvbi4NCj4gDQo+Pg0KPj4gRGlmZmVyZW5jZSB3aXRoIGNv cHkgd2F5IGlzIG5vdCBzaWduaWZpY2FudC4gRHVyaW5nIHBhY2tldCBhbGxvY2F0aW9uLA0KPj4g bm9uLWxpbmVhciBza2IgaXMgY3JlYXRlZCwgdGhlbiBJIGNhbGwgJ2dldF91c2VyX3BhZ2VzKCkn IGZvciBlYWNoIHBhZ2UNCj4+IGZyb20gdXNlcidzIGlvdiBpdGVyYXRvciAoSSB0aGluayBpIGRv bid0IG5lZWQgJ3Bpbl91c2VyX3BhZ2VzKCknIGFzDQo+IA0KPiBBcmUgdGhlc2UgcGFnZXMgZXhw b3NlZCB0byB0aGUgaG9zdCB2aWEgdmlydHF1ZXVlcz8gSWYgc28sIEkgdGhpbmsgd2UNCj4gc2hv dWxkIHBpbiB0aGVtLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGhvc3QgYWNjZXNzZXMgdGhlbSBidXQg dGhlc2UgcGFnZXMNCj4gaGF2ZSBiZWVuIHVubWFwcGVkPw0KDQpZZXMsIHVzZXIgcGFnZXMgd2l0 aCBkYXRhIHdpbGwgYmUgdXNlZCBieSB0aGUgdmlydGlvIGRldmljZS4NCidwaW4nIC0gWW91IG1l YW4gdXNlICdwaW5fdXNlcl9wYWdlcygpJz8gVW5tYXBwZWQgLSBZb3UgbWVhbiBndWVzdA0KIHdp bGwgdW5tYXAgaXQsIHdoaWxlIGhvc3QgbXVzdCBhY2Nlc3MgaXQgdG8gY29weSBwYWNrZXQ/IFN1 Y2ggcGFnZXMNCiBoYXZlIGluY3JlbWVudGVkIHJlZmNvdW50IGJ5ICdnZXRfdXNlcl9wYWdlcygp Jywgc28gcGFnZSBpcyBsb2NrZWQNCiBhbmQgbWVtb3J5IGFuZCB3aWxsIGJlIGxvY2tlZCB1bnRp bCBob3N0IGZpbmlzaGVzIGNvcHlpbmcgZGF0YS4NCiBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBk aXNjdXNzIHRoaW5ncyByZWxhdGVkIHRvICdnZXQvcGluX3VzZXJfcGFnZXMoKScNCiBpbiBvbmUg cGxhY2UsIGZvciBleGFtcGxlIGluIDA3LzEyIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk LiANCg0KPiANCj4+IHRoZXJlIGlzIG5vIGJhY2tpbmcgc3RvcmFnZSBmb3IgdGhlc2UgcGFnZXMp IGFuZCBhZGQgZWFjaCByZXR1cm5lZCBwYWdlDQo+PiB0byB0aGUgc2tiIGFzIGZyYWdtZW50LiBU aGVyZSBhcmUgYWxzbyBzb21lIHVwZGF0ZXMgZm9yIHZob3N0IGFuZCBndWVzdA0KPj4gcGFydHMg b2YgdHJhbnNwb3J0IC0gaW4gYm90aCBjYXNlcyBpJ3ZlIGFkZGVkIGhhbmRsaW5nIG9mIG5vbi1s aW5lYXIgc2tiDQo+PiBmb3IgdmlydGlvIHBhcnQuIHZob3N0IGNvcGllcyBkYXRhIGZyb20gc3Vj aCBza2IgdG8gdGhlIGd1ZXN0J3MgcnggdmlydGlvDQo+PiBidWZmZXJzLiBJbiB0aGUgZ3Vlc3Qs IHZpcnRpbyB0cmFuc3BvcnQgZmlsbHMgdmlydGlvIHF1ZXVlIHdpdGggcGFnZXMNCj4+IGZyb20g c2tiLg0KPj4NCj4+IEkgdGhpbmsgZG9jIGluIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2df emVyb2NvcHkucnN0IGNvdWxkIGJlIGFsc28NCj4+IHVwZGF0ZWQgaW4gbmV4dCB2ZXJzaW9ucy4N Cj4gDQo+IFllcCwgZ29vZCBpZGVhLg0KDQpBY2ssIGknbGwgZG8gaXQgaW4gdjIuDQoNCj4gDQo+ Pg0KPj4gVGhpcyB2ZXJzaW9uIGhhcyBzZXZlcmFsIGxpbWl0cy9wcm9ibGVtczoNCj4+DQo+PiAx KSBBcyB0aGlzIGZlYXR1cmUgdG90YWxseSBkZXBlbmRzIG9uIHRyYW5zcG9ydCwgdGhlcmUgaXMg bm8gd2F5IChvciBpdA0KPj4gwqAgaXMgZGlmZmljdWx0KSB0byBjaGVjayB3aGV0aGVyIHRyYW5z cG9ydCBpcyBhYmxlIHRvIGhhbmRsZSBpdCBvciBub3QNCj4+IMKgIGR1cmluZyBTT19aRVJPQ09Q WSBzZXR0aW5nLiBTZWVtcyBJIG5lZWQgdG8gY2FsbCBBRl9WU09DSyBzcGVjaWZpYw0KPj4gwqAg c2V0c29ja29wdCBjYWxsYmFjayBmcm9tIHNldHNvY2tvcHQgY2FsbGJhY2sgZm9yIFNPTF9TT0NL RVQsIGJ1dCB0aGlzDQo+PiDCoCBsZWFkcyB0byBsb2NrIHByb2JsZW0sIGJlY2F1c2UgYm90aCBB Rl9WU09DSyBhbmQgU09MX1NPQ0tFVCBjYWxsYmFjaw0KPj4gwqAgYXJlIG5vdCBjb25zaWRlcmVk IHRvIGJlIGNhbGxlZCBmcm9tIGVhY2ggb3RoZXIuIFNvIGluIGN1cnJlbnQgdmVyc2lvbg0KPj4g wqAgU09fWkVST0NPUFkgaXMgc2V0IHN1Y2Nlc3NmdWxseSB0byBhbnkgdHlwZSAoZS5nLiB0cmFu c3BvcnQpIG9mDQo+PiDCoCBBRl9WU09DSyBzb2NrZXQsIGJ1dCBpZiB0cmFuc3BvcnQgZG9lcyBu b3Qgc3VwcG9ydCBNU0dfWkVST0NPUFksDQo+PiDCoCB0eCByb3V0aW5lIHdpbGwgZmFpbCB3aXRo IEVPUE5PVFNVUFAuDQo+IA0KPiBJJ2xsIHRha2UgYSBsb29rLCBidXQgaWYgd2UgaGF2ZSBubyBh bHRlcm5hdGl2ZSwgSSB0aGluayBpdCdzIG9rYXkgdG8NCj4gbWFrZSB0eCBmYWlsLj4NCg0KVGhh bmtzDQogDQo+Pg0KPj4gMikgV2hlbiBNU0dfWkVST0NPUFkgaXMgdXNlZCwgZm9yIGVhY2ggdHgg c3lzdGVtIGNhbGwgd2UgbmVlZCB0byBlbnF1ZXVlDQo+PiDCoCBvbmUgY29tcGxldGlvbi4gSW4g ZWFjaCBjb21wbGV0aW9uIHRoZXJlIGlzIGZsYWcgd2hpY2ggc2hvd3MgaG93IHR4DQo+PiDCoCB3 YXMgcGVyZm9ybWVkOiB6ZXJvY29weSBvciBjb3B5LiBUaGlzIGxlYWRzIHRoYXQgd2hvbGUgbWVz c2FnZSBtdXN0DQo+PiDCoCBiZSBzZW5kIGluIHplcm9jb3B5IG9yIGNvcHkgd2F5IC0gd2UgY2Fu J3Qgc2VuZCBwYXJ0IG9mIG1lc3NhZ2Ugd2l0aA0KPj4gwqAgY29weWluZyBhbmQgcmVzdCBvZiBt ZXNzYWdlIHdpdGggemVyb2NvcHkgbW9kZSAob3IgdmljZSB2ZXJzYSkuIE5vdywNCj4+IMKgIHdl IG5lZWQgdG8gYWNjb3VudCB2c29jayBjcmVkaXQgbG9naWMsIGUuZy4gd2UgY2FuJ3Qgc2VuZCB3 aG9sZSBkYXRhDQo+PiDCoCBvbmNlIC0gb25seSBhbGxvd2VkIG51bWJlciBvZiBieXRlcyBjb3Vs ZCBzZW50IGF0IGFueSBtb21lbnQuIEluIGNhc2UNCj4+IMKgIG9mIGNvcHlpbmcgd2F5IHRoZXJl IGlzIG5vIHByb2JsZW0gYXMgaW4gd29yc3QgY2FzZSB3ZSBjYW4gc2VuZCBzaW5nbGUNCj4+IMKg IGJ5dGVzLCBidXQgemVyb2NvcHkgaXMgbW9yZSBjb21wbGV4IGJlY2F1c2Ugc21hbGxlc3QgdHJh bnNtaXNzaW9uDQo+PiDCoCB1bml0IGlzIHNpbmdsZSBwYWdlLiBTbyBpZiB0aGVyZSBpcyBub3Qg ZW5vdWdoIHNwYWNlIGF0IHBlZXIncyBzaWRlDQo+PiDCoCB0byBzZW5kIGludGVnZXIgbnVtYmVy IG9mIHBhZ2VzIChhdCBsZWFzdCBvbmUpIC0gd2Ugd2lsbCB3YWl0LCB0aHVzDQo+PiDCoCBzdGFs bGluZyB0eCBzaWRlLiBUbyBvdmVyY29tZSB0aGlzIHByb2JsZW0gaSd2ZSBhZGRlZCBzaW1wbGUg cnVsZSAtDQo+PiDCoCB6ZXJvY29weSBpcyBwb3NzaWJsZSBvbmx5IHdoZW4gdGhlcmUgaXMgZW5v dWdoIHNwYWNlIGF0IGFub3RoZXIgc2lkZQ0KPj4gwqAgZm9yIHdob2xlIG1lc3NhZ2UgKHRvIGNo ZWNrLCB0aGF0IGN1cnJlbnQgJ21zZ2hkcicgd2FzIGFscmVhZHkgdXNlZA0KPj4gwqAgaW4gcHJl dmlvdXMgdHggaXRlcmF0aW9ucyBpIHVzZSAnaW92X29mZnNldCcgZmllbGQgb2YgaXQncyBpb3Yg aXRlcikuDQo+IA0KPiBJIHNlZSB0aGUgcHJvYmxlbSBhbmQgSSB0aGluayB5b3VyIGFwcHJvYWNo IGlzIHRoZSByaWdodCBvbmUuDQo+IA0KPj4NCj4+IDMpIGxvb3BiYWNrIHRyYW5zcG9ydCBpcyBu b3Qgc3VwcG9ydGVkLCBiZWNhdXNlIGl0IHJlcXVpcmVzIHRvIGltcGxlbWVudA0KPj4gwqAgbm9u LWxpbmVhciBza2IgaGFuZGxpbmcgaW4gZGVxdWV1ZSBsb2dpYyAoYXMgd2UgInNlbmQiIGZyYWdn ZWQgc2tiDQo+PiDCoCBhbmQgInJlY2VpdmUiIGl0IGZyb20gdGhlIHNhbWUgcXVldWUpLiBJJ20g Z29pbmcgdG8gaW1wbGVtZW50IGl0IGluDQo+PiDCoCBuZXh0IHZlcnNpb25zLg0KPiANCj4gbG9v cGJhY2sgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcsIHNvIGl0IHdvdWxkIGJl IGdyZWF0IHRvDQo+IGhhdmUgdGhlIHN1cHBvcnQsIGJ1dCBpZiBpdCdzIHRvbyBjb21wbGljYXRl ZCwgd2UgY2FuIGRvIGl0IGxhdGVyLg0KPiANCg0KT2ssIGknbGwgaW1wbGVtZW50IGl0IGluIHYy Lg0KDQo+Pg0KPj4gNCkgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBzZXRzIG1heCBsZW5ndGggb2Yg cGFja2V0IHRvIDY0S0IuIElJVUMgdGhpcw0KPj4gwqAgaXMgZHVlIHRvICdrbWFsbG9jKCknIGFs bG9jYXRlZCBkYXRhIGJ1ZmZlcnMuIEkgdGhpbmssIGluIGNhc2Ugb2YNCj4gDQo+IFllcCwgSSB0 aGluayBzby4NCj4gV2hlbiBJIHN0YXJ0ZWQgdG91Y2hpbmcgdGhpcyBjb2RlLCB0aGUgbGltaXQg d2FzIGFscmVhZHkgdGhlcmUuDQo+IEFzIHlvdSBzYWlkLCBJIHRoaW5rIGl0IHdhcyBpbnRyb2R1 Y2VkIHRvIGhhdmUgYSBsaW1pdCBvbiAoaG9zdC9kZXZpY2UNCj4gc2lkZT8pIGFsbG9jYXRpb24s IGJ1dCBidWZfYWxsb2MgbWlnaHQgYmUgZW5vdWdoLCBzbyBtYXliZSB3ZSBjb3VsZA0KPiBhbHNv IHJlbW92ZSBpdCBmb3IgY29weSBtb2RlLg0KPiBUaGUgb25seSBwcm9ibGVtIEkgc2VlIGlzIGNv bXBhdGliaWxpdHkgd2l0aCBvbGQgZGV2aWNlcy9kcml2ZXJzLCBzbw0KPiBtYXliZSB3ZSBuZWVk IGEgZmVhdHVyZSBpbiB0aGUgc3BlYyB0byBzYXkgdGhlIGxpbWl0IGlzIGdvbmUsIG9yIGhhdmUg YQ0KPiBmaWVsZCBpbiB0aGUgdmlydGlvIGNvbmZpZyBzcGFjZSB3aGVyZSB0aGUgZGV2aWNlIHNw ZWNpZmllcyBpdHMgbGltaXQNCj4gKGZvciB0aGUgZHJpdmVyLCB0aGUgbGltaXQgaXMgaW1wbGlj aXRseSB0aGF0IG9mIHRoZSBidWZmZXIgYWxsb2NhdGVkDQo+IGFuZCBwdXQgaW4gdGhlIHZpcnRx dWV1ZSkuDQo+IA0KPiBUaGlzIHJlbWluZGVkIG1lIHRoYXQgTGF1cmEgaGFkIHByb3Bvc2VkIHNv bWV0aGluZyBzaW1pbGFyIGJlZm9yZSwNCj4gbWF5YmUgd2Ugc2hvdWxkIHRha2UgaXQgdXAgYWdh aW46DQo+IGh0dHBzOi8vbWFya21haWwub3JnL21lc3NhZ2UvM2VsNGNrZWFrZmlsZzV3bw0KPiAN Cj4+IMKgIE1TR19aRVJPQ09QWSB0aGlzIHZhbHVlIGNvdWxkIGJlIGluY3JlYXNlZCwgYmVjYXVz ZSAna21hbGxvYygpJyBpcw0KPj4gwqAgbm90IHRvdWNoZWQgZm9yIGRhdGEgLSB1c2VyIHNwYWNl IHBhZ2VzIGFyZSB1c2VkIGFzIGJ1ZmZlcnMuIEFsc28NCj4+IMKgIHRoaXMgbGltaXQgdHJpbXMg ZXZlcnkgbWVzc2FnZSB3aGljaCBpcyA+IDY0S0IsIHRodXMgc3VjaCBtZXNzYWdlcw0KPj4gwqAg d2lsbCBiZSBzZW5kIGluIGNvcHkgbW9kZSBkdWUgdG8gJ2lvdl9vZmZzZXQnIGNoZWNrIGluIDIp Lg0KPiANCj4gVGhlIGhvc3Qgc3RpbGwgbmVlZHMgdG8gYWxsb2NhdGUgYW5kIGNvcHksIHNvIG1h eWJlIHRoZSBsaW1pdGF0aW9uDQo+IGNvdWxkIGJlIHRvIGF2b2lkIGxhcmdlIGFsbG9jYXRpb25z IGluIHRoZSBob3N0LCBidXQgYWN0dWFsbHkgdGhlIGhvc3QNCj4gY2FuIHVzZSB2bWFsbG9jIGJl Y2F1c2UgaXQgZG9lc24ndCBuZWVkIHRoZW0gdG8gYmUgY29udGlndW91cy4NCj4gDQoNCkhtbW0s IEkgdGhpbmsgaXQgaXMgcG9zc2libGUgdG8gc29sdmUgdGhpcyBzaXR1YXRpb24gaW4gdGhlIGZv bGxvd2luZw0Kd2F5IC0gaSBjYW4ga2VlcCBsaW1pdGF0aW9uIGZvciA2NEtCIGZvciBjb3B5IG1v ZGUsIGFuZCByZW1vdmUgaXQgZm9yDQp6ZXJvIGNvcHksIGJ1dCBJJ2xsIGxpbWl0IGVhY2ggcGFj a2V0IHNpemUgdG8gNjRLQihvZiBjb3Vyc2UgdGVjaG5pY2FsbHkNCml0IGlzIG5vdCBleGFjdGx5 IDY0S0IsIGl0IGlzIG1pbihtYXggcGFja2V0IHNpemUsIE1BWF9TS0JfRlJBR1MgKiBQQUdFX1NJ WkUpDQp3aGVyZSBtYXggcGFja2V0IHNpemUgaXMgNjRLYiwgYnV0IGZvciBzaW1wbGljaXR5ICBs ZXQncyBjYWxsIHRoaXMgbGltaXQgNjRLYjopICkuDQpFLmcuIHdoZW4gemVyb2NvcHkgdHJhbnNt aXNzaW9uIG5lZWRzIHRvIHNlbmQgZm9yIGV4YW1wbGUgMTI5S2Iob2YgY291cnNlDQpwZWVyJ3Mg ZnJlZSBzcGFjZSBpcyBiaWcgZW5vdWdoIGFuZCB0aGlzIGNoZWNrIGlzIHBhc3NlZCksIEknbGwg d29uJ3QgdHJpbQ0KMTI5S2IgdG8gNjRLYiArIDY0S2IgKyAxS2IgaW4gdGhlIGN1cnJlbnQgbWFu bmVyIC0gYnkgcmV0dXJuaW5nIHRvIGFmX3Zzb2NrLmMNCmFmdGVyIHNlbmRpbmcgZXZlcnkgc2ti LiBJJ2xsIGFsbG9jIHNldmVyYWwgc2ticywgKDMgaW4gdGhpcyBjYXNlIC0gNjRLYiArIDY0S2Ig KyAxS2IpDQppbiBzaW5nbGUgY2FsbCB0byB0aGUgdHJhbnNwb3J0LiBDb21wbGV0aW9uIGFyZyB3 aWxsIGJlIGF0dGFjaGVkDQpvbmx5IHRvIHRoZSBsYXN0IG9uZSBza2IsIGFuZCBzZW5kIHRoZXNl IDMgc2ticy4gSG9zdCBzdGlsbCBwcm9jZXNzZXMNCjY0S2IobGV0IGl0IGJlIDY0S2IgZm9yIHNp bXBsaWNpdHkgYWdhaW4gOikgKSBwYWNrZXRzIC0gbm8gYmlnIGFsbG9jYXRpb25zLg0KTW9yZW92 ZXIsIGkgdGhpbmsgdGhhdCB0aGlzIGxvZ2ljIGNvdWxkIGJlIGEgbGl0dGxlIG9wdGltaXphdGlv biBmb3INCmNvcHkgbW9kZSAtIHdoeSB3ZSBhbGxvY2F0ZSBzaW5nbGUgc2tiIGFuZCBhbHdheXMg cmV0dXJuIHRvIGFmX3Zzb2NrLmM/DQpNYXkgYmUgd2UgY2FuIGl0ZXJhdGUgbmVlZGVkIG51bWJl ciBvZiBza2JzIGluIHRoZSBsb29wIGFuZCBzZW5kIHRoZW0uDQoNCkFsc28gYWJvdXQgdm1hbGxv YygpLCBJSVVDIHRoZXJlIGlzIGFscmVhZHkgdGhpcyBpZGVhIHdoaWNoIHJlcGxhY2VzICdrbWFs bG9jKCknDQp0byAna3ZtYWxsb2MoKScuDQoNCj4+DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBFUkZPUk1BTkNFDQo+Pg0KPj4gUGVyZm9y bWFuY2U6IGl0IGlzIGEgbGl0dGxlIGJpdCB0cmlja3kgdG8gY29tcGFyZSBwZXJmb3JtYW5jZSBi ZXR3ZWVuDQo+PiBjb3B5IGFuZCB6ZXJvY29weSB0cmFuc21pc3Npb25zLiBJbiB6ZXJvY29weSB3 YXkgd2UgbmVlZCB0byB3YWl0IHdoZW4NCj4+IHVzZXIgYnVmZmVycyB3aWxsIGJlIHJlbGVhc2Vk IGJ5IGtlcm5lbCwgc28gaXQgc29tZXRoaW5nIGxpa2Ugc3luY2hyb25vdXMNCj4+IHBhdGggKHdh aXQgdW50aWwgZGV2aWNlIGRyaXZlciB3aWxsIHByb2Nlc3MgaXQpLCB3aGlsZSBpbiBjb3B5IHdh eSB3ZQ0KPj4gY2FuIGZlZWQgZGF0YSB0byBrZXJuZWwgYXMgbWFueSBhcyB3ZSB3YW50LCBkb24n dCBjYXJlIGFib3V0IGRldmljZQ0KPj4gZHJpdmVyLiBTbyBJIGNvbXBhcmVkIG9ubHkgdGltZSB3 aGljaCB3ZSBzcGVuZCBpbiAnc2VuZG1zZygpJyBzeXNjYWxsLg0KPj4gQWxzbyB0aGVyZSBpcyBs aW1pdCBmcm9tIDQpIGFib3ZlIHNvIG1heCBidWZmZXIgc2l6ZSBpcyA2NEtCLiBJJ3ZlDQo+PiB0 ZXN0ZWQgdGhpcyBwYXRjaHNldCBpbiB0aGUgbmVzdGVkIFZNLCBidXQgaSB0aGluayBmb3IgVjEg aXQgaXMgbm90IGENCj4+IGJpZyBkZWFsLg0KPj4NCj4+IFNlbmRlcjoNCj4+IC4vdnNvY2tfcGVy ZiAtLXNlbmRlciA8Q0lEPiAtLWJ1Zi1zaXplIDxidWYgc2l6ZT4gLS1ieXRlcyA2ME0gWy0temNd DQo+Pg0KPj4gUmVjZWl2ZXI6DQo+PiAuL3Zzb2NrX3BlcmYgLS12c2stc2l6ZSAyNTZNDQo+Pg0K Pj4gTnVtYmVyIGluIGNlbGwgaXMgc2Vjb25kcyB3aGljaCBzZW5kZXJzIHNwZW5kcyBpbnNpZGUg dHggc3lzY2FsbC4NCj4+DQo+PiBHdWVzdCB0byBob3N0IHRyYW5zbWlzc2lvbjoNCj4+DQo+PiAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoNCj4+IHzCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoCB8DQo+PiB8IGJ1ZiBzaXplIHzC oMKgIGNvcHnCoCB8IHplcm9jb3B5IHwNCj4+IHzCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKg wqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoCB8DQo+PiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSoNCj4+IHzCoMKgIDRLQsKgwqDCoCB8wqAgMC4yNsKgwqAgfMKgwqAgMC4wNDLC oCB8DQo+PiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoNCj4+IHzCoMKgIDE2S0LC oMKgIHzCoCAwLjExwqDCoCB8wqDCoCAwLjAxNMKgIHwNCj4+ICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKg0KPj4gfMKgwqAgMzJLQsKgwqAgfMKgIDAuMDXCoMKgIHzCoMKgIDAuMDA5 wqAgfA0KPj4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qDQo+PiB8wqDCoCA2NEtC wqDCoCB8wqAgMC4wNMKgwqAgfMKgwqAgMC4wMDXCoCB8DQo+PiAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSoNCj4+DQo+PiBIb3N0IHRvIGd1ZXN0IHRyYW5zbWlzc2lvbjoNCj4+DQo+ PiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qDQo+PiB8wqDCoMKgwqDCoMKgwqDC oMKgIHzCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoCB8DQo+PiB8IGJ1ZiBz aXplIHzCoMKgIGNvcHnCoMKgIHwgemVyb2NvcHkgfA0KPj4gfMKgwqDCoMKgwqDCoMKgwqDCoCB8 wqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKgwqDCoMKgwqAgfA0KPj4gKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKg0KPj4gfMKgwqAgNEtCwqDCoMKgIHzCoMKgIDAuMDQ5wqAg fMKgwqAgMC4wMzTCoCB8DQo+PiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qDQo+ PiB8wqDCoCAxNktCwqDCoCB8wqDCoCAwLjAzwqDCoCB8wqDCoCAwLjAyNMKgIHwNCj4+ICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoNCj4+IHzCoMKgIDMyS0LCoMKgIHzCoMKgIDAu MDI1wqAgfMKgwqAgMC4wMcKgwqAgfA0KPj4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKg0KPj4gfMKgwqAgNjRLQsKgwqAgfMKgwqAgMC4wMjjCoCB8wqDCoCAwLjAxwqDCoCB8DQo+ PiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qDQo+Pg0KPj4gSWYgaG9zdCBmYWls cyB0byBzZW5kIGRhdGEgd2l0aCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSIsIGNoZWNrIHZhbHVl DQo+PiAvcHJvYy9zeXMvbmV0L2NvcmUvb3B0bWVtX21heCAtIGl0IGlzIGFjY291bnRlZCBkdXJp bmcgY29tcGxldGlvbiBza2INCj4+IGFsbG9jYXRpb24uDQo+Pg0KPj4gWmVyb2NvcHkgaXMgZmFz dGVyIHRoYW4gY2xhc3NpYyBjb3B5IG1vZGUsIGJ1dCBvZiBjb3Vyc2UgaXQgcmVxdWlyZXMNCj4+ IHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvZiBhcHBsaWNhdGlvbiBkdWUgdG8gdXNlciBwYWdlcyBw aW5uaW5nLCBidWZmZXINCj4+IHNpemUgYW5kIGFsaWdubWVudC4gSW4gbmV4dCB2ZXJzaW9ucyBp J20gZ29pbmcgdG8gZml4IDY0S0IgYmFycmllciB0bw0KPj4gcGVyZm9ybSB0ZXN0cyB3aXRoIGJp Z2dlciBidWZmZXIgc2l6ZXMuDQo+IA0KPiBZZXAsIEkgc2VlLg0KPiBBZGp1c3RpbmcgdnNvY2tf cGVyZiB0byBjb21wYXJlIGFsc28gR2JwcyAoY2FuIGlvX3VyaW5nIGhlbHBzIGluIHRoaXMNCj4g Y2FzZSB0byBoYXZlIG1vcmUgcmVxdWVzdHMgaW4tZmxpZ2h0Pykgd291bGQgYmUgZ3JlYXQuDQo+ IA0KDQpZZXMsIGknbGwgYWRkIEdicHMuIEFsc28gSSB0aG91Z2h0IGFib3V0IGFkZGluZyBpb191 cmluZyB0ZXN0IHRvDQp0aGUgY3VycmVudCB0ZXN0IHN1aXRlIGJlY2F1c2UgaW9fdXJpbmcgYWxz byBoYXZlIE1TR19aRVJPQ09QWQ0KdHlwZSBvZiByZXF1ZXN0LCBhbmQgaW50ZXJlc3RpbmcgdGhp bmcgaXMgdGhhdCBpb191cmluZyB1c2VzIGl0J3MNCm93biBhbHJlYWR5IGFsbG9jYXRlZCB1YXJn Lg0KDQo+Pg0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBURVNUSU5HDQo+Pg0KPj4gVGhpcyBwYXRjaHNldCBpbmNsdWRlcyBzZXQgb2YgdGVz dHMgZm9yIE1TR19aRVJPQ09QWSBmZWF0dXJlLiBJIHRyaWVkIHRvDQo+PiBjb3ZlciBuZXcgY29k ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHNvIHRoZXJlIGFyZSBkaWZmZXJlbnQgY2FzZXMgZm9yDQo+ PiBNU0dfWkVST0NPUFkgdHJhbnNtaXNzaW9uczogd2l0aCBkaXNhYmxlZCBTT19aRVJPQ09QWSBh bmQgc2V2ZXJhbCBpbw0KPj4gdmVjdG9yIHR5cGVzIChkaWZmZXJlbnQgc2l6ZXMsIGFsaWdubWVu dHMsIHdpdGggdW5tYXBwZWQgcGFnZXMpLg0KPiANCj4gR3JlYXQhIFRoYW5rcyBmb3IgYWRkaW5n IHRoZSB0ZXN0cyENCj4gDQo+IEknbGwgZ28gdGhyb3VnaCB0aGUgcGF0Y2hlcyBiZXR3ZWVuIHRv ZGF5IGFuZCBNb25kYXkuDQo+IFNvcnJ5IGFnYWluIGZvciB0YWtpbmcgc28gbG9uZyENCg0KU3Vy ZSwgVGhhbmtzIGZvciByZXZpZXchIEkgdGhpbmsgd2UgYXJlIG5vdCBodXJyeSA6KQ0KDQo+IA0K PiBUaGFua3MsDQo+IFN0ZWZhbm8NCj4gDQoNCg==