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 smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 61E17C433EF for ; Wed, 16 Mar 2022 07:49:48 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 2250260F0D; Wed, 16 Mar 2022 07:49:48 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TuW2XNGEViRs; Wed, 16 Mar 2022 07:49:47 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id C8AE460634; Wed, 16 Mar 2022 07:49:46 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id A85A9C001D; Wed, 16 Mar 2022 07:49:46 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 03350C0012 for ; Wed, 16 Mar 2022 07:49:45 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id DFBF160F0D for ; Wed, 16 Mar 2022 07:49:45 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id mDWq9K-mlyhY for ; Wed, 16 Mar 2022 07:49:44 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by smtp3.osuosl.org (Postfix) with ESMTPS id 7867A60634 for ; Wed, 16 Mar 2022 07:49:44 +0000 (UTC) Received: from canpemm500009.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4KJMk127WrzcbLf; Wed, 16 Mar 2022 15:44:41 +0800 (CST) Received: from [10.67.102.169] (10.67.102.169) by canpemm500009.china.huawei.com (7.192.105.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Wed, 16 Mar 2022 15:49:38 +0800 Subject: Re: [PATCH v5 2/8] hwtracing: Add trace function support for HiSilicon PCIe Tune and Trace device To: John Garry , Yicong Yang , , , , , , , , , , , , , , , , , , , , , , , , References: <20220308084930.5142-1-yangyicong@hisilicon.com> <20220308084930.5142-3-yangyicong@hisilicon.com> <2049e270-7cf4-84c5-eb84-5bb1a425e897@huawei.com> Message-ID: <3f8bff53-e6fb-d4ae-b48f-d9d9ef22f929@huawei.com> Date: Wed, 16 Mar 2022 15:49:38 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.5.1 MIME-Version: 1.0 In-Reply-To: <2049e270-7cf4-84c5-eb84-5bb1a425e897@huawei.com> X-Originating-IP: [10.67.102.169] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To canpemm500009.china.huawei.com (7.192.105.203) X-CFilter-Loop: Reflected Cc: zhangshaokun@hisilicon.com, song.bao.hua@hisilicon.com, liuqi115@huawei.com, linuxarm@huawei.com, prime.zeng@huawei.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: , From: Yicong Yang via iommu Reply-To: Yicong Yang Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" T24gMjAyMi8zLzEyIDE6NTUsIEpvaG4gR2Fycnkgd3JvdGU6Cj4+ICsKPj4gK3N0YXRpYyBpbnQg aGlzaV9wdHRfYWxsb2NfdHJhY2VfYnVmKHN0cnVjdCBoaXNpX3B0dCAqaGlzaV9wdHQpCj4gCj4g bm8gY2FsbGVyCj4gCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGhpc2lfcHR0X3RyYWNlX2N0cmwg KmN0cmwgPSAmaGlzaV9wdHQtPnRyYWNlX2N0cmw7Cj4+ICvCoMKgwqAgc3RydWN0IGRldmljZSAq ZGV2ID0gJmhpc2lfcHR0LT5wZGV2LT5kZXY7Cj4+ICvCoMKgwqAgaW50IGk7Cj4+ICsKPj4gK8Kg wqDCoCBoaXNpX3B0dC0+dHJhY2VfY3RybC5idWZfaW5kZXggPSAwOwo+PiArCj4+ICvCoMKgwqAg LyogSWYgdGhlIHRyYWNlIGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCwgemVybyBp dC4gKi8KPj4gK8KgwqDCoCBpZiAoY3RybC0+dHJhY2VfYnVmKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBmb3IgKGkgPSAwOyBpIDwgSElTSV9QVFRfVFJBQ0VfQlVGX0NOVDsgaSsrKQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBtZW1zZXQoY3RybC0+dHJhY2VfYnVmW2ldLmFkZHIsIDAsIEhJU0lf UFRUX1RSQUNFX0JVRl9TSVpFKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArwqDC oMKgIH0KPj4gKwo+PiArwqDCoMKgIGN0cmwtPnRyYWNlX2J1ZiA9IGRldm1fa2NhbGxvYyhkZXYs IEhJU0lfUFRUX1RSQUNFX0JVRl9DTlQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yoc3RydWN0IGhpc2lfcHR0X2RtYV9idWZmZXIpLCBHRlBf S0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIWN0cmwtPnRyYWNlX2J1ZikKPj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IEhJU0lf UFRUX1RSQUNFX0JVRl9DTlQ7ICsraSkgewo+PiArwqDCoMKgwqDCoMKgwqAgY3RybC0+dHJhY2Vf YnVmW2ldLmFkZHIgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgSElTSV9QVFRfVFJBQ0VfQlVG X1NJWkUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICZjdHJsLT50cmFjZV9idWZbaV0uZG1hLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBH RlBfS0VSTkVMKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghY3RybC0+dHJhY2VfYnVmW2ldLmFk ZHIpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGlzaV9wdHRfZnJlZV90cmFjZV9idWYo aGlzaV9wdHQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4g K8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgaGlzaV9wdHRfdHJhY2VfZW5kKHN0cnVjdCBoaXNp X3B0dCAqaGlzaV9wdHQpCj4+ICt7Cj4+ICvCoMKgwqAgd3JpdGVsKDAsIGhpc2lfcHR0LT5pb2Jh c2UgKyBISVNJX1BUVF9UUkFDRV9DVFJMKTsKPj4gK8KgwqDCoCBoaXNpX3B0dC0+dHJhY2VfY3Ry bC5zdGFydGVkID0gZmFsc2U7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaGlzaV9wdHRfdHJh Y2Vfc3RhcnQoc3RydWN0IGhpc2lfcHR0ICpoaXNpX3B0dCkKPiAKPiBhZ2FpbiB0aGlzIGZ1bmN0 aW9uIGhhcyBubyBjYWxsZXIsIHNvIEkgYXNzdW1lIGEgd2FybiBpcyBnZW5lcmF0ZWQgaWYgd2Ug b25seSBhcHBseSB1cCB0byB0aGlzIHBhdGNoICh3aGVuIGNvbXBpbGluZykKPiAKPiBwbGVhc2Ug b25seSBhZGQgY29kZSBwZXItcGF0Y2ggd2hpY2ggaXMgYWN0dWFsbHkgcmVmZXJlbmNlZAo+IAoK aXQncyBiZWNhdXNlIEkgc3BsaXQgdGhlIHRyYWNlIHBhcnQgaW50byAyIHBhdGNoZXMgYXMgMi84 IHByb3ZpZGVzIHByb2JlIGFuZCBzb21lIGJhc2ljCmZ1bmN0aW9ucyAobWVudGlvbmVkIGluIHRo ZSBjb21taXQgbWVzc2FnZSkgYW5kIDMvOCBhZGRzIHRoZSBQTVUgZGV2aWNlIHdoaWNoIHVzZSB0 aGUgZnVuY3Rpb24KaW4gMi84LCBhc3N1bWluZyB0aGF0IGl0J2xsIGJlIGVhc2llciB0byByZXZp ZXcuLgoKSSB0aGluayBpdCdzIHN1Z2dlc3RlZCB0byBzcXVhc2ggcGF0Y2ggMi84IGFuZCAzLzgs IHRoZW4gdGhlIGNvbW1lbnRzIGhlcmUgaXMgYWRkcmVzc2VkLgoKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgaGlzaV9wdHRfdHJhY2VfY3RybCAqY3RybCA9ICZoaXNpX3B0dC0+dHJhY2VfY3RybDsK Pj4gK8KgwqDCoCB1MzIgdmFsOwo+PiArwqDCoMKgIGludCBpOwo+PiArCj4+ICvCoMKgwqAgLyog Q2hlY2sgZGV2aWNlIGlkbGUgYmVmb3JlIHN0YXJ0IHRyYWNlICovCj4+ICvCoMKgwqAgaWYgKCFo aXNpX3B0dF93YWl0X3RyYWNlX2h3X2lkbGUoaGlzaV9wdHQpKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBwY2lfZXJyKGhpc2lfcHR0LT5wZGV2LCAiRmFpbGVkIHRvIHN0YXJ0IHRyYWNlLCB0aGUgZGV2 aWNlIGlzIHN0aWxsIGJ1c3kuXG4iKTsKPiAKPiBBcmUgd2UgYWxyZWFkeSBnb2luZyB0byBoYXZl IGEgImRldmljZSBidXN5IiBtZXNzYWdlPyBJIGp1c3Qgd29uZGVyIGlmIHdlIG5lZWQgdGhpcyBh dCBhbGwKPiAKClRoZSBtZXNzYWdlIGlzIG5lY2Vzc2FyeSBhcyB0aGUgY2FsbGVyIHBtdTo6c3Rh cnQoKSBpcyB2b2lkIGFuZCB3ZSBjYW5ub3QgcGFzcyB0aGUgZmFpbHVyZQp0byB0aGUgdXNlciBi eSB0aGUgcmV0dXJuIHZhbHVlLiBTbyBhIG1lc3NhZ2UgaXMgcHJpbnRlZCBoZXJlIHRvIG5vdGlm eSB1c2VyIHRoZSBlcnJvciByZWFzb24uCgo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FQlVT WTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBjdHJsLT5zdGFydGVkID0gdHJ1ZTsKPj4g KwpbLi4uXQo+PiArc3RhdGljIGludCBoaXNpX3B0dF9pbml0X2N0cmxzKHN0cnVjdCBoaXNpX3B0 dCAqaGlzaV9wdHQpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBoaXNp X3B0dC0+cGRldjsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGNpX2J1cyAqYnVzOwo+PiArwqDCoMKgIGlu dCByZXQ7Cj4+ICvCoMKgwqAgdTMyIHJlZzsKPj4gKwo+PiArwqDCoMKgIElOSVRfTElTVF9IRUFE KCZoaXNpX3B0dC0+cG9ydF9maWx0ZXJzKTsKPj4gK8KgwqDCoCBJTklUX0xJU1RfSEVBRCgmaGlz aV9wdHQtPnJlcV9maWx0ZXJzKTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIFRo ZSBkZXZpY2UgcmFuZ2UgcmVnaXN0ZXIgcHJvdmlkZXMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRo ZQo+PiArwqDCoMKgwqAgKiByb290IHBvcnRzIHdoaWNoIHRoZSBSQ2lFUCBjYW4gY29udHJvbCBh bmQgdHJhY2UuIFRoZSBSQ2lFUAo+PiArwqDCoMKgwqAgKiBhbmQgdGhlIHJvb3QgcG9ydHMgaXQg c3VwcG9ydCBhcmUgb24gdGhlIHNhbWUgUENJZSBjb3JlLCB3aXRoCj4+ICvCoMKgwqDCoCAqIHNh bWUgZG9tYWluIG51bWJlciBidXQgbWF5YmUgZGlmZmVyZW50IGJ1cyBudW1iZXIuIFRoZSBkZXZp Y2UKPj4gK8KgwqDCoMKgICogcmFuZ2UgcmVnaXN0ZXIgd2lsbCB0ZWxsIHVzIHdoaWNoIHJvb3Qg cG9ydHMgd2UgY2FuIHN1cHBvcnQsCj4+ICvCoMKgwqDCoCAqIEJpdFszMToxNl0gaW5kaWNhdGVz IHRoZSB1cHBlciBCREYgbnVtYmVycyBvZiB0aGUgcm9vdCBwb3J0LAo+PiArwqDCoMKgwqAgKiB3 aGlsZSBCaXRbMTU6MF0gaW5kaWNhdGVzIHRoZSBsb3dlci4KPj4gK8KgwqDCoMKgICovCj4+ICvC oMKgwqAgcmVnID0gcmVhZGwoaGlzaV9wdHQtPmlvYmFzZSArIEhJU0lfUFRUX0RFVklDRV9SQU5H RSk7Cj4+ICvCoMKgwqAgaGlzaV9wdHQtPnVwcGVyID0gRklFTERfR0VUKEhJU0lfUFRUX0RFVklD RV9SQU5HRV9VUFBFUiwgcmVnKTsKPj4gK8KgwqDCoCBoaXNpX3B0dC0+bG93ZXIgPSBGSUVMRF9H RVQoSElTSV9QVFRfREVWSUNFX1JBTkdFX0xPV0VSLCByZWcpOwo+PiArCj4+ICvCoMKgwqAgLyoK Pj4gK8KgwqDCoMKgICogaGlzaV9wdHRfaW5pdF9maWx0ZXJzKCkgb25seSBmYWlscyB3aGVuIHRo ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuCj4+ICvCoMKgwqDCoCAqIFdlIGRvbid0IGNoZWNr IHRoZSBmYWlsdXJlIGhlcmUgYXMgaXQgd29uJ3QgZmFpbCBhZnRlciBhZGRpbmcgdGhlCj4+ICvC oMKgwqDCoCAqIHN1cHBvcnQgb2YgZHluYW1pY2FsbHkgdXBkYXRpbmcgdGhlIGZpbHRlcnMgaW4g dGhlIGZvbGxvd2luZyBwYXRjaC4KPiAKPiBwbGVhc2Ugc3RydWN0dXJlIHRoZSBzZXJpZXMgc3Vj aCB0aGF0IHdlIGRvbid0IG5lZWQgdG8gdGFsayBhYm91dCBob3cgd2Ugd2lsbCBmaXggaXQgbGF0 ZXIKPiAKCndpbGwgZHJvcCB0aGUgY29tbWVudCBoZXJlIGFuZCBoYW5kbGUgdGhlIGVycm9yIGFz IHVzdWFsLgoKPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgYnVzID0gcGNpX2ZpbmRfYnVzKHBj aV9kb21haW5fbnIocGRldi0+YnVzKSwgUENJX0JVU19OVU0oaGlzaV9wdHQtPnVwcGVyKSk7Cj4+ ICvCoMKgwqAgaWYgKGJ1cykKPj4gK8KgwqDCoMKgwqDCoMKgIHBjaV93YWxrX2J1cyhidXMsIGhp c2lfcHR0X2luaXRfZmlsdGVycywgaGlzaV9wdHQpOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gZGV2 bV9hZGRfYWN0aW9uX29yX3Jlc2V0KCZwZGV2LT5kZXYsIGhpc2lfcHR0X3JlbGVhc2VfZmlsdGVy cywgaGlzaV9wdHQpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAgaGlzaV9wdHQtPnRyYWNlX2N0cmwuZGVmYXVsdF9jcHUg PSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2tfb2Zfbm9kZShkZXZfdG9fbm9kZSgmcGRldi0+ZGV2KSkp Owo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBUaGUg RE1BIG9mIFBUVCB0cmFjZSBjYW4gb25seSB1c2UgZGlyZWN0IG1hcHBpbmcsIGR1ZSB0byBzb21l Cj4+ICsgKiBoYXJkd2FyZSByZXN0cmljdGlvbi4gQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbiBJ T01NVSBvciB0aGUKPj4gKyAqIHBvbGljeSBvZiB0aGUgSU9NTVUgZG9tYWluIGlzIHBhc3N0aHJv dWdoLCBvdGhlcndpc2UgdGhlIHRyYWNlCj4+ICsgKiBjYW5ub3Qgd29yay4KPj4gKyAqCj4+ICsg KiBUaGUgUFRUIGRldmljZSBpcyBzdXBwb3NlZCB0byBiZWhpbmQgdGhlIEFSTSBTTU1VdjMsIHdo aWNoCj4+ICsgKiBzaG91bGQgaGF2ZSBwYXNzdGhyb3VnaCB0aGUgZGV2aWNlIGJ5IGEgcXVpcmsu Cj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgaGlzaV9wdHRfY2hlY2tfaW9tbXVfbWFwcGluZyhzdHJ1 Y3QgcGNpX2RldiAqcGRldikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpp b21tdV9kb21haW47Cj4+ICsKPj4gK8KgwqDCoCBpb21tdV9kb21haW4gPSBpb21tdV9nZXRfZG9t YWluX2Zvcl9kZXYoJnBkZXYtPmRldik7Cj4+ICvCoMKgwqAgaWYgKCFpb21tdV9kb21haW4gfHwg aW9tbXVfZG9tYWluLT50eXBlID09IElPTU1VX0RPTUFJTl9JREVOVElUWSkKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IGhpc2lfcHR0X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2Vf aWQgKmlkKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBoaXNpX3B0dCAqaGlzaV9wdHQ7Cj4+ICvC oMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgIHJldCA9IGhpc2lfcHR0X2NoZWNrX2lvbW11 X21hcHBpbmcocGRldik7Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqAg cGNpX2VycihwZGV2LCAiY2Fubm90IHdvcmsgd2l0aCBub24tZGlyZWN0IERNQSBtYXBwaW5nLlxu Iik7Cj4gCj4gcGxlYXNlIG5vIGRvdWJsZS1uZWdhdGl2ZXMgbGlrZSB0aGlzLCBzbyBtYXliZSAi cmVxdWlyZXMgZGlyZWN0IERNQSBtYXBwaW5ncyIKPiAKCndpbGwgcmVmaW5lIHRoZSBtZXNzYWdl LgoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqAgaGlzaV9wdHQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpoaXNpX3B0 dCksIEdGUF9LRVJORUwpOwo+PiArwqDCoMKgIGlmICghaGlzaV9wdHQpCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIG11dGV4X2luaXQoJmhpc2lfcHR0 LT5tdXRleCk7Cj4+ICvCoMKgwqAgaGlzaV9wdHQtPnBkZXYgPSBwZGV2Owo+PiArwqDCoMKgIHBj aV9zZXRfZHJ2ZGF0YShwZGV2LCBoaXNpX3B0dCk7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBwY2lt X2VuYWJsZV9kZXZpY2UocGRldik7Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDC oMKgwqAgcGNpX2VycihwZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBkZXZpY2UsIHJldCA9ICVkLlxu IiwgcmV0KTsKPiAKPiBuaXQ6IG5vICcuJyBhdCBlbmQgb2YgYW55IG1lc3NhZ2VzCj4gCgp3aWxs IGRyb3AgJy4nIGZvciBhbGwgdGhlIG1lc3NhZ2VzLgoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0ID0gcGNpbV9pb21hcF9yZWdp b25zKHBkZXYsIEJJVCgyKSwgRFJWX05BTUUpOwo+PiArwqDCoMKgIGlmIChyZXQpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgIHBjaV9lcnIocGRldiwgImZhaWxlZCB0byByZW1hcCBpbyBtZW1vcnksIHJl dCA9ICVkLlxuIiwgcmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKg wqAgfQo+PiArCj4+ICvCoMKgwqAgaGlzaV9wdHQtPmlvYmFzZSA9IHBjaW1faW9tYXBfdGFibGUo cGRldilbMl07Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soJnBk ZXYtPmRldiwgRE1BX0JJVF9NQVNLKDY0KSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDC oMKgwqDCoMKgwqAgcGNpX2VycihwZGV2LCAiZmFpbGVkIHRvIHNldCA2NCBiaXQgZG1hIG1hc2ss IHJldCA9ICVkLlxuIiwgcmV0KTsKPiAKPiBJIGRvIGRvdWJ0IHRoYXQgdGhpcyBtZXNzYWdlIGlz IGFueSB1c2UKPiAKCkkgdGhpbmsgaXQncyB1c2VmdWwgYXMgd2l0aCB0aGUgbWVzc2FnZSBpdCB3 aWxsIGJlIGVhc2llciB0byBmaW5kIG9uIHdoaWNoIHN0YWdlIHRoZSBwcm9iZSBmYWlscy4KClRo YW5rcywKWWljb25nCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KaW9tbXUgbWFpbGluZyBsaXN0CmlvbW11QGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3Jn Cmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lvbW11