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=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no 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 9E82EC433E0 for ; Mon, 25 May 2020 05:57:23 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (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 3A9212075F for ; Mon, 25 May 2020 05:57:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3A9212075F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=hisilicon.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id F037B88081; Mon, 25 May 2020 05:57:22 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9Zs1H0LZTsqN; Mon, 25 May 2020 05:57:21 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id A0AFC8807A; Mon, 25 May 2020 05:57:21 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 811C5C0178; Mon, 25 May 2020 05:57:21 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 8F806C016F for ; Mon, 25 May 2020 05:57:19 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 83379204E0 for ; Mon, 25 May 2020 05:57:19 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qnMCDMiPhZyc for ; Mon, 25 May 2020 05:57:17 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from huawei.com (szxga01-in.huawei.com [45.249.212.187]) by silver.osuosl.org (Postfix) with ESMTPS id 453552044E for ; Mon, 25 May 2020 05:57:17 +0000 (UTC) Received: from dggemi401-hub.china.huawei.com (unknown [172.30.72.53]) by Forcepoint Email with ESMTP id 125C0C36F59DEACAB042; Mon, 25 May 2020 13:57:14 +0800 (CST) Received: from DGGEMI525-MBS.china.huawei.com ([169.254.6.191]) by dggemi401-hub.china.huawei.com ([10.3.17.134]) with mapi id 14.03.0487.000; Mon, 25 May 2020 13:57:04 +0800 From: "Song Bao Hua (Barry Song)" To: John Garry , Will Deacon , "Robin Murphy" Subject: RE: arm-smmu-v3 high cpu usage for NVMe Thread-Topic: arm-smmu-v3 high cpu usage for NVMe Thread-Index: AQHWMEjEf1MJcheyQU6fNuturxsXA6i4TQCw Date: Mon, 25 May 2020 05:57:03 +0000 Message-ID: References: <20190821151749.23743-1-will@kernel.org> <20200318205313.GB8094@willie-the-truck> <20200319184349.GA1697676@myrica> <4aacbd65-f1fd-55e0-c8bb-468badc9f600@huawei.com> In-Reply-To: <4aacbd65-f1fd-55e0-c8bb-468badc9f600@huawei.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.126.201.104] MIME-Version: 1.0 X-CFilter-Loop: Reflected Cc: Jean-Philippe Brucker , Marc Zyngier , Linuxarm , Ming Lei , "iommu@lists.linux-foundation.org" , "alexandru.elisei@arm.com" X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" PiBTdWJqZWN0OiBSZTogYXJtLXNtbXUtdjMgaGlnaCBjcHUgdXNhZ2UgZm9yIE5WTWUNCj4gDQo+ IE9uIDIwLzAzLzIwMjAgMTA6NDEsIEpvaG4gR2Fycnkgd3JvdGU6DQo+IA0KPiArIEJhcnJ5LCBB bGV4YW5kcnUNCj4gDQo+ID4+Pj4+IMKgwqDCoCBQZXJmVG9wOsKgwqAgODU4NjQgaXJxcy9zZWPC oCBrZXJuZWw6ODkuNiXCoCBleGFjdDrCoCAwLjAlIGxvc3Q6DQo+ID4+Pj4+IDAvMzQ0MzQgZHJv cDoNCj4gPj4+Pj4gMC80MDExNiBbNDAwMEh6IGN5Y2xlc10swqAgKGFsbCwgOTYgQ1BVcykNCj4g Pj4+Pj4NCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KPiAtLS0tLS0tLS0tDQo+ID4+Pj4+DQo+ID4+Pj4+DQo+ID4+Pj4+IMKgwqDCoMKg wqAgMjcuNDMlwqAgW2tlcm5lbF3CoMKgwqDCoMKgwqDCoMKgwqAgW2tdDQo+IGFybV9zbW11X2Nt ZHFfaXNzdWVfY21kbGlzdA0KPiA+Pj4+PiDCoMKgwqDCoMKgIDExLjcxJcKgIFtrZXJuZWxdwqDC oMKgwqDCoMKgwqDCoMKgIFtrXQ0KPiBfcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUNCj4gPj4+ Pj4gwqDCoMKgwqDCoMKgIDYuMzUlwqAgW2tlcm5lbF3CoMKgwqDCoMKgwqDCoMKgwqAgW2tdIF9y YXdfc3Bpbl91bmxvY2tfaXJxDQo+ID4+Pj4+IMKgwqDCoMKgwqDCoCAyLjY1JcKgIFtrZXJuZWxd wqDCoMKgwqDCoMKgwqDCoMKgIFtrXSBnZXRfdXNlcl9wYWdlc19mYXN0DQo+ID4+Pj4+IMKgwqDC oMKgwqDCoCAyLjAzJcKgIFtrZXJuZWxdwqDCoMKgwqDCoMKgwqDCoMKgIFtrXSBfX3NsYWJfZnJl ZQ0KPiA+Pj4+PiDCoMKgwqDCoMKgwqAgMS41NSXCoCBba2VybmVsXcKgwqDCoMKgwqDCoMKgwqDC oCBba10gdGlja19ub2h6X2lkbGVfZXhpdA0KPiA+Pj4+PiDCoMKgwqDCoMKgwqAgMS40NyXCoCBb a2VybmVsXcKgwqDCoMKgwqDCoMKgwqDCoCBba10gYXJtX2xwYWVfbWFwDQo+ID4+Pj4+IMKgwqDC oMKgwqDCoCAxLjM5JcKgIFtrZXJuZWxdwqDCoMKgwqDCoMKgwqDCoMKgIFtrXSBfX2ZnZXQNCj4g Pj4+Pj4gwqDCoMKgwqDCoMKgIDEuMTQlwqAgW2tlcm5lbF3CoMKgwqDCoMKgwqDCoMKgwqAgW2td IF9fbG9ja190ZXh0X3N0YXJ0DQo+ID4+Pj4+IMKgwqDCoMKgwqDCoCAxLjA5JcKgIFtrZXJuZWxd wqDCoMKgwqDCoMKgwqDCoMKgIFtrXSBfcmF3X3NwaW5fbG9jaw0KPiA+Pj4+PiDCoMKgwqDCoMKg wqAgMS4wOCXCoCBba2VybmVsXcKgwqDCoMKgwqDCoMKgwqDCoCBba10gYmlvX3JlbGVhc2VfcGFn ZXMucGFydC40Mg0KPiA+Pj4+PiDCoMKgwqDCoMKgwqAgMS4wMyXCoCBba2VybmVsXcKgwqDCoMKg wqDCoMKgwqDCoCBba10gX19zYml0bWFwX2dldF93b3JkDQo+ID4+Pj4+IMKgwqDCoMKgwqDCoCAw Ljk3JcKgIFtrZXJuZWxdwqDCoMKgwqDCoMKgwqDCoMKgIFtrXQ0KPiA+Pj4+PiBhcm1fc21tdV9h dGNfaW52X2RvbWFpbi5jb25zdHByb3AuNDINCj4gPj4+Pj4gwqDCoMKgwqDCoMKgIDAuOTElwqAg W2tlcm5lbF3CoMKgwqDCoMKgwqDCoMKgwqAgW2tdIGZwdXRfbWFueQ0KPiA+Pj4+PiDCoMKgwqDC oMKgwqAgMC44OCXCoCBba2VybmVsXcKgwqDCoMKgwqDCoMKgwqDCoCBba10gX19hcm1fbHBhZV9t YXANCj4gPj4+Pj4NCj4gDQo+IEhpIFdpbGwsIFJvYmluLA0KPiANCj4gSSdtIGp1c3QgZ2V0dGlu ZyBhcm91bmQgdG8gbG9vayBhdCB0aGlzIHRvcGljIGFnYWluLiBIZXJlJ3MgdGhlIGN1cnJlbnQN Cj4gcGljdHVyZSBmb3IgbXkgTlZNZSB0ZXN0Og0KPiANCj4gcGVyZiB0b3AgLUMgMCAqDQo+IFNh bXBsZXM6IDgwOCBvZiBldmVudCAnY3ljbGVzOnBwcCcsIEV2ZW50IGNvdW50IChhcHByb3guKTog NDY5OTA5MDI0DQo+IE92ZXJoZWFkIFNoYXJlZCBPYmplY3QgU3ltYm9sDQo+IDc1LjkxJSBba2Vy bmVsXSBba10gYXJtX3NtbXVfY21kcV9pc3N1ZV9jbWRsaXN0DQo+IDMuMjglIFtrZXJuZWxdIFtr XSBhcm1fc21tdV90bGJfaW52X3JhbmdlDQo+IDIuNDIlIFtrZXJuZWxdIFtrXSBhcm1fc21tdV9h dGNfaW52X2RvbWFpbi5jb25zdHByb3AuNDkNCj4gMi4zNSUgW2tlcm5lbF0gW2tdIF9yYXdfc3Bp bl91bmxvY2tfaXJxcmVzdG9yZQ0KPiAxLjMyJSBba2VybmVsXSBba10gX19hcm1fc21tdV9jbWRx X3BvbGxfc2V0X3ZhbGlkX21hcC5pc3JhLjQxDQo+IDEuMjAlIFtrZXJuZWxdIFtrXSBhaW9fY29t cGxldGVfcncNCj4gMC45NiUgW2tlcm5lbF0gW2tdIGVucXVldWVfdGFza19mYWlyDQo+IDAuOTMl IFtrZXJuZWxdIFtrXSBnaWNfaGFuZGxlX2lycQ0KPiAwLjg2JSBba2VybmVsXSBba10gX3Jhd19z cGluX2xvY2tfaXJxc2F2ZQ0KPiAwLjcyJSBba2VybmVsXSBba10gcHV0X3JlcXNfYXZhaWxhYmxl DQo+IDAuNzIlIFtrZXJuZWxdIFtrXSBzYml0bWFwX3F1ZXVlX2NsZWFyDQo+IA0KPiAqIG9ubHkg Y2VydGFpbiBDUFVzIHJ1biB0aGUgZG1hIHVubWFwIGZvciBteSBzY2VuYXJpbywgY3B1MCBiZWlu ZyBvbmUgb2YNCj4gdGhlbS4NCj4gDQo+IENvbGxlYWd1ZSBCYXJyeSBoYXMgc2ltaWxhciBmaW5k aW5ncyBmb3Igc29tZSBvdGhlciBzY2VuYXJpb3MuDQoNCkkgd3JvdGUgYSB0ZXN0IG1vZHVsZSBh bmQgdXNlIHRoZSBwYXJhbWV0ZXIgIndheXMiIHRvIHNpbXVsYXRlIGhvdyBidXN5IFNNTVUgaXMg YW5kDQpjb21wYXJlIHRoZSBsYXRlbmN5IHVuZGVyIGRpZmZlcmVudCBkZWdyZWVzIG9mIGNvbnRl bnRpb25zLg0KMS4Jc3RhdGljIGludCB3YXlzPTE2OyAgDQoyLgltb2R1bGVfcGFyYW0od2F5cywg aW50LCBTX0lSVUdPKTsgIA0KMy4JICANCjQuCXN0YXRpYyBpbnQgc2Vjb25kcz0xMjA7ICANCjUu CW1vZHVsZV9wYXJhbShzZWNvbmRzLCBpbnQsIFNfSVJVR08pOyAgDQo2LgkgIA0KNy4JZXh0ZXJu IHN0cnVjdCBkZXZpY2UgKmdldF96aXBfZGV2KHZvaWQpOyAgDQo4LgkgIA0KOS4Jc3RhdGljIG5v aW5saW5lIHZvaWQgdGVzdF9tYXBzaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpidWYs IGludCBzaXplKSAgDQoxMC4JeyAgDQoxMS4JICAgIGRtYV9hZGRyX3QgZG1hX2FkZHIgPSBkbWFf bWFwX3NpbmdsZShkZXYsIGJ1Ziwgc2l6ZSwgRE1BX1RPX0RFVklDRSk7ICANCjEyLgkgICAgZG1h X3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfVE9fREVWSUNFKTsgIA0KMTMu CX0gIA0KMTQuCSAgDQoxNS4Jc3RhdGljIG5vaW5saW5lIHZvaWQgdGVzdF9tZW1jcHkodm9pZCAq b3V0LCB2b2lkICppbiwgaW50IHNpemUpICANCjE2Lgl7ICANCjE3LgkgICAgbWVtY3B5KG91dCwg aW4sIHNpemUpOyAgDQoxOC4JfSAgDQoxOS4JICANCjIwLglzdGF0aWMgaW50IHRlc3R0aHJlYWQo dm9pZCAqZGF0YSkgIA0KMjEuCXsgIA0KMjIuCSAgICB1bnNpZ25lZCBsb25nIHN0b3AgPSBqaWZm aWVzICtzZWNvbmRzKkhaOyAgDQoyMy4JICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGdldF96aXBf ZGV2KCk7ICANCjI0LgkgIA0KMjUuCSAgICBjaGFyICppbnB1dCA9IGt6YWxsb2MoNDA5NiwgR0ZQ X0tFUk5FTCk7ICANCjI2LgkgICAgaWYgKCFpbnB1dCkgIA0KMjcuCSAgICAgICAgcmV0dXJuIC1F Tk9NRU07ICANCjI4LgkgIA0KMjkuCSAgICBjaGFyICpvdXRwdXQgPSBremFsbG9jKDQwOTYsIEdG UF9LRVJORUwpOyAgDQozMC4JICAgIGlmICghb3V0cHV0KSAgDQozMS4JICAgICAgICByZXR1cm4g LUVOT01FTTsgIA0KMzIuCSAgDQozMy4JICAgIHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBz dG9wKSkgeyAgDQozNC4JICAgICAgICB0ZXN0X21hcHNpbmdsZShkZXYsIGlucHV0LCA0MDk2KTsg IA0KMzUuCSAgICAgICAgdGVzdF9tZW1jcHkob3V0cHV0LCBpbnB1dCwgNDA5Nik7ICANCjM2Lgkg ICAgfSAgDQozNy4JICANCjM4LgkgICAga2ZyZWUob3V0cHV0KTsgIA0KMzkuCSAgICBrZnJlZShp bnB1dCk7ICANCjQwLgkgIA0KNDEuCSAgICByZXR1cm4gMDsgIA0KNDIuCX0gIA0KNDMuCSAgDQo0 NC4Jc3RhdGljIGludCBfX2luaXQgdGVzdF9pbml0KHZvaWQpICANCjQ1Lgl7ICANCjQ2LgkgICAg c3RydWN0IHRhc2tfc3RydWN0ICp0c2s7ICANCjQ3LgkgICAgaW50IGk7ICANCjUwLgkgIA0KNTEu CSAgICBmb3IoaT0wO2k8d2F5cztpKyspIHsgIA0KNTIuCSAgICAgICAgdHNrID0ga3RocmVhZF9y dW4odGVzdHRocmVhZCwgJndheXMsICJtYXBfdGVzdC0lZCIsIGkpOyAgDQo1My4JICAgICAgICBp ZiAoSVNfRVJSKHRzaykpICAgDQo1NC4JICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjcmVh dGUgdGVzdCB0aHJlYWQgZmFpbGVkXG4iKTsgIA0KNTUuCSAgICB9ICANCjU2LgkgIA0KNTcuCSAg ICByZXR1cm4gMDsgIA0KNTguCX0gIA0KNTkuCSAgDQo2MC4Jc3RhdGljIHZvaWQgX19leGl0IHRl c3RfZXhpdCh2b2lkKSAgDQo2MS4JeyAgDQo2Mi4JfSAgDQo2My4JICANCjY0Lgltb2R1bGVfaW5p dCh0ZXN0X2luaXQpOyAgDQo2NS4JbW9kdWxlX2V4aXQodGVzdF9leGl0KTsgIA0KNjYuCU1PRFVM RV9MSUNFTlNFKCJHUEwiKTsNCg0KV2hpbGUgd2F5cz0xLCBzbW11IGlzIHF1aXRlIGZyZWUgd2l0 aCBvbmx5IG9uZSB1c2VyLCAgYXJtX3NtbXVfY21kcV9pc3N1ZV9jbWRsaXN0KCkgd2lsbCBzcGVu ZCBtb3JlIHRoYW4gNjAlIHRpbWUNCm9uIGFybV9zbW11X2NtZHFfcG9sbF91bnRpbF9zeW5jKCku IEl0IHNlZW1zIFNNTVUgcmVwb3J0cyB0aGUgY29tcGxldGlvbiBvZiBDTURfU1lOQyBxdWl0ZSBz bG93bHkuDQoNCldoZW4gSSBpbmNyZWFzZWQgIndheXMiLCBJIGZvdW5kIHRoZSBjb250ZW50aW9u IHdvdWxkIGluY3JlYXNlIHJhcGlkbHkuIFdoZW4gd2F5cz0xNiwgbW9yZSB0aGFuIDQwJSB0aW1l IHdpbGwgYmUgb246DQpjbXB4Y2hnX3JlbGF4ZWQoJmNtZHEtPnEubGxxLnZhbCwgbGxxLnZhbCwg aGVhZC52YWwpDQoNCndoZW4gd2F5cz02NCwgbW9yZSB0aGFuIDYwJSB0aW1lIHdpbGwgYmUgb246 DQpjbXB4Y2hnX3JlbGF4ZWQoJmNtZHEtPnEubGxxLnZhbCwgbGxxLnZhbCwgaGVhZC52YWwpDQoN CmhlcmUgaXMgYSB0YWJsZSBmb3IgZG1hX3VubWFwLCBhcm1fc21tdV9jbWRxX2lzc3VlX2NtZGxp c3QoKSBhbmQgQ01EX1NZTkMgd2l0aCBkaWZmZXJlbnQgd2F5czoNCgkgd2hvbGUgdW5tYXAobnMp ICAgYXJtX3NtbXVfY21kcV9pc3N1ZV9jbWRsaXN0KClucyAgCXdhaXQgQ01EX1NZTkMobnMpIA0K V2F5cz0xCSAgIDE5NTYJICAgICAgICAgICAxMzI4CSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgODgzCSANCldheXM9MTYJICAgODg5MQkgICAgICAgICAgIDc0NzQJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA0MDAwDQpXYXlzPTMyCSAgIDIyMDQzCSAgICAgICAgICAgMTk1 MTkJICAgICAgICAgICAgICAgICAgICAgICAgNjg3OQ0KV2F5cz02NAkgICA2MDg0MgkgICAgICAg ICAgIDU1ODk1CSAgICAgICAgICAgICAgICAgICAgICAgIDE2NzQ2IA0KV2F5cz05NgkgICAxMDE4 ODAJICAgICAgICAgICA5MzY0OQkgICAgICAgICAgICAgICAgICAgICAgICAyNDQyOQ0KDQpBcyB5 b3UgY2FuIHNlZSwgd2hpbGUgd2F5cz0xLCB3ZSBzdGlsbCBuZWVkIDJ1cyB0byB1bm1hcCwgYW5k IGFybV9zbW11X2NtZHFfaXNzdWVfY21kbGlzdCgpIHRha2VzIDYwJSB0aW1lIG9mIHRoZSBkbWFf dW5tYXAsIENNRF9TTkMNCnRha2VzIG1vcmUgdGhhbiA2MCUgdGltZSBvZiBhcm1fc21tdV9jbWRx X2lzc3VlX2NtZGxpc3QoKS4NCg0KV2hlbiBTTU1VIGlzIHZlcnkgYnVzeSwgZG1hX3VubWFwIGxh dGVuY3kgY2FuIGJlIHZlcnkgbGFyZ2UgZHVlIHRvIGNvbnRlbnRpb24sIG1vcmUgdGhhbiAxMDB1 cy4NCg0KDQpUaGFua3MNCkJhcnJ5DQoNCj4gDQo+IFNvIHdlIHRyaWVkIHRoZSBsYXRlc3QgcGVy ZiBOTUkgc3VwcG9ydCB3aXAgcGF0Y2hlcywgYW5kIG5vdGljZWQgYSBmZXcNCj4gaG90c3BvdHMg KHNlZQ0KPiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaGlzaWxpY29uL2tlcm5l bC1kZXYvZmVlNjljOGNhMzc4NGI5ZGQzDQo+IDkxMjcwM2NmY2Q0OTg1YTAwZjZiYmIvcGVyZiUy MGFubm90YXRlDQo+IGFuZA0KPiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaGlz aWxpY29uL2tlcm5lbC1kZXYvZmVlNjljOGNhMzc4NGI5ZGQzDQo+IDkxMjcwM2NmY2Q0OTg1YTAw ZjZiYmIvcmVwb3J0LnR4dCkNCj4gd2hlbiBydW5uaW5nIHNvbWUgTlZNZSB0cmFmZmljOg0KPiAN Cj4gLSBpbml0aWFsIGNtcHhjaGcgdG8gZ2V0IGEgcGxhY2UgaW4gdGhlIHF1ZXVlDQo+IAktIHdo ZW4gbW9yZSBDUFVzIGdldCBpbnZvbHZlZCwgd2Ugc3RhcnQgZmFpbGluZyBhdCBhbiBleHBvbmVu dGlhbCByYXRlDQo+IDAuMDAgOiAgICAgICAgZmZmZjgwMDAxMDdhMzUwMDogICAgICAgY2FzICAg ICB4NCwgeDIsIFt4MjddDQo+IDI2LjUyIDogICAgICAgIGZmZmY4MDAwMTA3YTM1MDQ6ICAgICAg IG1vdiAgICAgeDAsIHg0IDoNCj4gYXJtX3NtbXVfY21kcV9pc3N1ZV9jbWRsaXN0KCk6DQo+IA0K PiAtIHRoZSBxdWV1ZSBsb2NraW5nDQo+IC0gcG9sbGluZyBjbWRfc3luYw0KPiANCj4gU29tZSBp ZGVhcyB0byBvcHRpbWlzZToNCj4gDQo+IGEuIGluaXRpYWwgY21weGNoZw0KPiBTbyB0aGlzIGNt cHhjaGcgY291bGQgYmUgY29uc2lkZXJlZCB1bmZhaXIuIEluIGFkZGl0aW9uLCB3aXRoIGFsbCB0 aGUNCj4gY29udGVudGlvbiBvbiBhcm1fc21tdV9jbWRxLnEsIHRoYXQgY2FjaGVsaW5lIHdvdWxk IGJlIGNvbnN0YW50bHkgcGluZ2VkDQo+IGFyb3VuZCB0aGUgc3lzdGVtLg0KPiBNYXliZSB3ZSBj YW4gaW1wbGVtZW50IHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZSBpZGVhIG9mIHF1ZXVlZC90aWNr ZXRlZA0KPiBzcGlubG9ja3MsIG1ha2luZyBhIENQVSBzcGluIG9uIG93biBjb3B5IG9mIGFybV9z bW11X2NtZHEucSBhZnRlcg0KPiBpbml0aWFsIGNtcHhjaGcgZmFpbHMsIHJlbGVhc2VkIGJ5IGl0 cyBsZWFkZXIsIGFuZCByZWxlYXNpbmcgc3Vic2VxdWVudA0KPiBmb2xsb3dlcnMNCj4gDQo+IGIu IERyb3AgdGhlIHF1ZXVlX2Z1bGwgY2hlY2tpbmcgaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzDQo+ IElmIHdlIGNhbm5vdCB0aGVvcmV0aWNhbGx5IGZpbGwgdGhlIHF1ZXVlLCB0aGVuIHN0b3AgdGhl IGNoZWNraW5nIGZvcg0KPiBxdWV1ZSBmdWxsIG9yIHNpbWlsYXIuIFRoaXMgc2hvdWxkIGFsc28g aGVscCBjdXJyZW50IHByb2JsZW0gb2YgYS4sIGFzDQo+IHRoZSBsZXNzIHRpbWUgYmV0d2VlbiBj bXB4Y2hnLCB0aGUgbGVzcyBjaGFuY2Ugb2YgZmFpbGluZyAoYXMgd2UgY2hlY2sNCj4gcXVldWUg YXZhaWxhYmxlIHNwYWNlIGJldHdlZW4gY21weGNoZyBhdHRlbXB0cykuDQo+IA0KPiBTbyBpZiBj bWRxIGRlcHRoID4gbnJfYXZhaWxhYmxlX2NwdXMgKiAobWF4IGJhdGNoIHNpemUgKyAxKSBBTkQg d2UNCj4gYWx3YXlzIGlzc3VlIGEgY21kX3N5bmMgZm9yIGEgYmF0Y2ggKHJlZ2FyZGxlc3Mgb2Yg d2hldGhlciByZXF1ZXN0ZWQpLA0KPiB0aGVuIHdlIHNob3VsZCBuZXZlciBmaWxsIChJIHRoaW5r KS4NCj4gDQo+IGMuIERvbid0IGRvIHF1ZXVlIGxvY2tpbmcgaW4gY2VydGFpbiBjaXJjdW1zdGFu Y2VzDQo+IElmIHdlIGltcGxlbWVudCAoYW5kIHN1cHBvcnQpIGIuIGFuZCBzdXBwb3J0IE1TSSBw b2xsaW5nLCB0aGVuIEkgZG9uJ3QNCj4gdGhpbmsgdGhhdCB0aGlzIGlzIHJlcXVpcmVkLg0KPiAN Cj4gZC4gTW9yZSBtaW5vciBpZGVhcyBhcmUgdG8gbW92ZSBmb3J3YXJkIHdoZW4gdGhlICJvd25l ciIgc3RvcHMgZ2F0aGVyaW5nDQo+IHRvIHJlZHVjZSB0aW1lIG9mIGFkdmFuY2luZyB0aGUgcHJv ZCwgaG9wZWZ1bGx5IHJlZHVjaW5nIGNtZF9zeW5jDQo+IHBvbGxpbmcgdGltZTsgYW5kIGFsc28g dXNlIGEgc21hbGxlciB3b3JkIHNpemUgZm9yIHRoZSB2YWxpZCBiaXRtYXANCj4gb3BlcmF0aW9u cywgbWF5YmUgMzJiIGF0b21pYyBvcGVyYXRpb25zIGFyZSBvdmVyYWxsIG1vcmUgZWZmaWNpZW50 ICh0aGFuDQo+IDY0YikgLSBtb3N0bHkgdmFsaWQgcmFuZ2UgY2hlY2sgaXMgPCAxNiBiaXRzIGZy b20gbXkgb2JzZXJ2YXRpb24uDQo+IA0KPiBMZXQgbWUga25vdyB5b3VyIHRob3VnaHRzIG9yIGFu eSBvdGhlciBpZGVhcy4NCj4gDQo+IFRoYW5rcywNCj4gSm9obg0KDQpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppb21tdSBtYWlsaW5nIGxpc3QKaW9tbXVA bGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24u b3JnL21haWxtYW4vbGlzdGluZm8vaW9tbXU=