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=-10.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham 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 74BF3C4743D for ; Wed, 9 Jun 2021 01:03:26 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 27E88608FE for ; Wed, 9 Jun 2021 01:03:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 27E88608FE Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C44B86EC6E; Wed, 9 Jun 2021 01:03:25 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 484BE89EA3; Wed, 9 Jun 2021 01:03:24 +0000 (UTC) IronPort-SDR: lxXJzENzzXviX+VJkNjZMA3U9SYyyD9KyEUMSsomwo0Z/cPgvOSN6rikXtKOQn0pX9LeV8eir5 nROtKMJVv/iQ== X-IronPort-AV: E=McAfee;i="6200,9189,10009"; a="192087743" X-IronPort-AV: E=Sophos;i="5.83,259,1616482800"; d="scan'208";a="192087743" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 18:03:21 -0700 IronPort-SDR: Mo5jMusmBjVKa4dbvaWpt+T2JlkdJ21ls/yiEPpXuIUqHgZDij6i6fZlYP7/hpSQ4vZHKygJWl iZ9mLidg8XuQ== X-IronPort-AV: E=Sophos;i="5.83,259,1616482800"; d="scan'208";a="449751080" Received: from dceraolo-mobl.amr.corp.intel.com (HELO [10.251.140.170]) ([10.251.140.170]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 18:03:21 -0700 To: Michal Wajdeczko , Matthew Brost , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210607180356.165785-1-matthew.brost@intel.com> <20210607180356.165785-3-matthew.brost@intel.com> <707a404a-c20b-39e6-af85-7ab93e9d3c5e@intel.com> <5dc6918e-d9ae-f435-c33f-2d6ab370224e@intel.com> From: Daniele Ceraolo Spurio Message-ID: <6c4cf5e3-5fe7-1c2d-7b7a-422aa203ee27@intel.com> Date: Tue, 8 Jun 2021 18:03:18 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <5dc6918e-d9ae-f435-c33f-2d6ab370224e@intel.com> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 02/13] drm/i915/guc: Update MMIO based communication X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" PHNuaXA+Cgo+Pj4gIMKgICNlbmRpZiAvKiBfQUJJX0dVQ19DT01NVU5JQ0FUSU9OX01NSU9fQUJJ X0ggKi8KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9n dWMuYwo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuYwo+Pj4gaW5k ZXggZjE0N2NiMzg5YTIwLi5iNzczNTY3Y2IwODAgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvdWMvaW50ZWxfZ3VjLmMKPj4+IEBAIC0zNzYsMjkgKzM3NiwyNyBAQCB2b2lkIGludGVs X2d1Y19maW5pKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPj4+ICDCoCAvKgo+Pj4gIMKgwqAgKiBU aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIE1NSU8gYmFzZWQgaG9zdCB0byBHdUMgaW50ZXJm YWNlLgo+Pj4gIMKgwqAgKi8KPj4+IC1pbnQgaW50ZWxfZ3VjX3NlbmRfbW1pbyhzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMsIGNvbnN0IHUzMiAqYWN0aW9uLCB1MzIKPj4+IGxlbiwKPj4+ICtpbnQgaW50 ZWxfZ3VjX3NlbmRfbW1pbyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIGNvbnN0IHUzMiAqcmVxdWVz dCwKPj4+IHUzMiBsZW4sCj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyICpyZXNw b25zZV9idWYsIHUzMiByZXNwb25zZV9idWZfc2l6ZSkKPj4+ICDCoCB7Cj4+PiArwqDCoMKgIHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ3VjX3RvX2d0KGd1YyktPmk5MTU7Cj4+PiAg wqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndWNfdG9fZ3QoZ3VjKS0+ dW5jb3JlOwo+Pj4gLcKgwqDCoCB1MzIgc3RhdHVzOwo+Pj4gK8KgwqDCoCB1MzIgaGVhZGVyOwo+ Pj4gIMKgwqDCoMKgwqAgaW50IGk7Cj4+PiAgwqDCoMKgwqDCoCBpbnQgcmV0Owo+Pj4gIMKgIMKg wqDCoMKgwqAgR0VNX0JVR19PTighbGVuKTsKPj4+ICDCoMKgwqDCoMKgIEdFTV9CVUdfT04obGVu ID4gZ3VjLT5zZW5kX3JlZ3MuY291bnQpOwo+Pj4gIMKgIC3CoMKgwqAgLyogV2UgZXhwZWN0IG9u bHkgYWN0aW9uIGNvZGUgKi8KPj4+IC3CoMKgwqAgR0VNX0JVR19PTigqYWN0aW9uICYgfklOVEVM X0dVQ19NU0dfQ09ERV9NQVNLKTsKPj4+IC0KPj4+IC3CoMKgwqAgLyogSWYgQ1QgaXMgYXZhaWxh YmxlLCB3ZSBleHBlY3QgdG8gdXNlIE1NSU8gb25seSBkdXJpbmcKPj4+IGluaXQvZmluaSAqLwo+ Pj4gLcKgwqDCoCBHRU1fQlVHX09OKCphY3Rpb24gIT0KPj4+IElOVEVMX0dVQ19BQ1RJT05fUkVH SVNURVJfQ09NTUFORF9UUkFOU1BPUlRfQlVGRkVSICYmCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqAgKmFjdGlvbiAhPQo+Pj4gSU5URUxfR1VDX0FDVElPTl9ERVJFR0lTVEVSX0NPTU1BTkRfVFJB TlNQT1JUX0JVRkZFUik7Cj4+PiArwqDCoMKgIEdFTV9CVUdfT04oRklFTERfR0VUKEdVQ19IWEdf TVNHXzBfT1JJR0lOLCByZXF1ZXN0WzBdKSAhPQo+Pj4gR1VDX0hYR19PUklHSU5fSE9TVCk7Cj4+ PiArwqDCoMKgIEdFTV9CVUdfT04oRklFTERfR0VUKEdVQ19IWEdfTVNHXzBfVFlQRSwgcmVxdWVz dFswXSkgIT0KPj4+IEdVQ19IWEdfVFlQRV9SRVFVRVNUKTsKPj4+ICDCoCDCoMKgwqDCoMKgIG11 dGV4X2xvY2soJmd1Yy0+c2VuZF9tdXRleCk7Cj4+PiAgwqDCoMKgwqDCoCBpbnRlbF91bmNvcmVf Zm9yY2V3YWtlX2dldCh1bmNvcmUsIGd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMpOwo+Pj4gIMKg ICtyZXRyeToKPj4+ICDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKPj4+IC3C oMKgwqDCoMKgwqDCoCBpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBndWNfc2VuZF9yZWcoZ3Vj LCBpKSwgYWN0aW9uW2ldKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBndWNfc2VuZF9yZWcoZ3VjLCBpKSwgcmVxdWVzdFtpXSk7Cj4+PiAgwqAgwqDCoMKg wqDCoCBpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkKHVuY29yZSwgZ3VjX3NlbmRfcmVnKGd1Yywg aSAtIDEpKTsKPj4+ICDCoCBAQCAtNDEwLDMwICs0MDgsNzQgQEAgaW50IGludGVsX2d1Y19zZW5k X21taW8oc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+Pj4gY29uc3QgdTMyICphY3Rpb24sIHUzMiBs ZW4sCj4+PiAgwqDCoMKgwqDCoMKgICovCj4+PiAgwqDCoMKgwqDCoCByZXQgPSBfX2ludGVsX3dh aXRfZm9yX3JlZ2lzdGVyX2Z3KHVuY29yZSwKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3VjX3NlbmRfcmVnKGd1YywgMCksCj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5URUxfR1VDX01TR19UWVBF X01BU0ssCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg SU5URUxfR1VDX01TR19UWVBFX1JFU1BPTlNFIDw8Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5URUxfR1VDX01TR19UWVBFX1NISUZULAo+Pj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEwLCAxMCwgJnN0YXR1 cyk7Cj4+PiAtwqDCoMKgIC8qIElmIEd1QyBleHBsaWNpdGx5IHJldHVybmVkIGFuIGVycm9yLCBj b252ZXJ0IGl0IHRvIC1FSU8gKi8KPj4+IC3CoMKgwqAgaWYgKCFyZXQgJiYgIUlOVEVMX0dVQ19N U0dfSVNfUkVTUE9OU0VfU1VDQ0VTUyhzdGF0dXMpKQo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9 IC1FSU87Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg R1VDX0hYR19NU0dfMF9PUklHSU4sCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgRklFTERfUFJFUChHVUNfSFhHX01TR18wX09SSUdJTiwKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdV Q19IWEdfT1JJR0lOX0dVQyksCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgMTAsIDEwLCAmaGVhZGVyKTsKPj4+ICvCoMKgwqAgaWYgKHVubGlrZWx5KHJl dCkpIHsKPj4+ICt0aW1lb3V0Ogo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRybV9lcnIoJmk5MTUtPmRy bSwgIm1taW8gcmVxdWVzdCAlI3g6IG5vIHJlcGx5ICV4XG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmVxdWVzdFswXSwgaGVhZGVyKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91 dDsKPj4+ICvCoMKgwqAgfQo+Pj4gIMKgIC3CoMKgwqAgaWYgKHJldCkgewo+Pj4gLcKgwqDCoMKg wqDCoMKgIERSTV9FUlJPUigiTU1JTzogR3VDIGFjdGlvbiAlI3ggZmFpbGVkIHdpdGggZXJyb3Ig JWQgJSN4XG4iLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFjdGlvblswXSwgcmV0 LCBzdGF0dXMpOwo+Pj4gK8KgwqDCoCBpZiAoRklFTERfR0VUKEdVQ19IWEdfTVNHXzBfVFlQRSwg aGVhZGVyKSA9PQo+Pj4gR1VDX0hYR19UWVBFX05PX1JFU1BPTlNFX0JVU1kpIHsKPj4+ICsjZGVm aW5lIGRvbmUgKHsgaGVhZGVyID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBndWNfc2VuZF9y ZWcoZ3VjLAo+Pj4gMCkpOyBcCj4+PiArwqDCoMKgwqDCoMKgwqAgRklFTERfR0VUKEdVQ19IWEdf TVNHXzBfT1JJR0lOLCBoZWFkZXIpICE9IEdVQ19IWEdfT1JJR0lOX0dVQwo+Pj4gfHwgXAo+Pj4g K8KgwqDCoMKgwqDCoMKgIEZJRUxEX0dFVChHVUNfSFhHX01TR18wX1RZUEUsIGhlYWRlcikgIT0K Pj4+IEdVQ19IWEdfVFlQRV9OT19SRVNQT05TRV9CVVNZOyB9KQo+Pj4gKwo+Pj4gK8KgwqDCoMKg wqDCoMKgIHJldCA9IHdhaXRfZm9yKGRvbmUsIDEwMDApOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlm ICh1bmxpa2VseShyZXQpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byB0aW1lb3V0 Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShGSUVMRF9HRVQoR1VDX0hYR19NU0df MF9PUklHSU4sIGhlYWRlcikgIT0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBHVUNfSFhHX09SSUdJTl9HVUMpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZ290byBwcm90bzsKPj4+ICsjdW5kZWYgZG9uZQo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+ PiArwqDCoMKgIGlmIChGSUVMRF9HRVQoR1VDX0hYR19NU0dfMF9UWVBFLCBoZWFkZXIpID09Cj4+ PiBHVUNfSFhHX1RZUEVfTk9fUkVTUE9OU0VfUkVUUlkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCB1 MzIgcmVhc29uID0gRklFTERfR0VUKEdVQ19IWEdfUkVUUllfTVNHXzBfUkVBU09OLCBoZWFkZXIp Owo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRybV9kYmcoJmk5MTUtPmRybSwgIm1taW8gcmVx dWVzdCAlI3g6IHJldHJ5aW5nLCByZWFzb24gJXVcbiIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXF1ZXN0WzBdLCByZWFzb24pOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gcmV0cnk7 Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgaWYgKEZJRUxEX0dFVChHVUNfSFhHX01T R18wX1RZUEUsIGhlYWRlcikgPT0KPj4+IEdVQ19IWEdfVFlQRV9SRVNQT05TRV9GQUlMVVJFKSB7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgdTMyIGhpbnQgPSBGSUVMRF9HRVQoR1VDX0hYR19GQUlMVVJF X01TR18wX0hJTlQsIGhlYWRlcik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgdTMyIGVycm9yID0gRklF TERfR0VUKEdVQ19IWEdfRkFJTFVSRV9NU0dfMF9FUlJPUiwgaGVhZGVyKTsKPj4+ICsKPj4+ICvC oMKgwqDCoMKgwqDCoCBkcm1fZXJyKCZpOTE1LT5kcm0sICJtbWlvIHJlcXVlc3QgJSN4OiBmYWls dXJlICV4LyV1XG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxdWVzdFswXSwgZXJy b3IsIGhpbnQpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FTlhJTzsKPj4+ICvCoMKgwqDC oMKgwqDCoCBnb3RvIG91dDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoRklF TERfR0VUKEdVQ19IWEdfTVNHXzBfVFlQRSwgaGVhZGVyKSAhPQo+Pj4gR1VDX0hYR19UWVBFX1JF U1BPTlNFX1NVQ0NFU1MpIHsKPj4+ICtwcm90bzoKPj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fZXJy KCZpOTE1LT5kcm0sICJtbWlvIHJlcXVlc3QgJSN4OiB1bmV4cGVjdGVkIHJlcGx5ICUjeFxuIiwK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcXVlc3RbMF0sIGhlYWRlcik7Cj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0ID0gLUVQUk9UTzsKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBv dXQ7Cj4+PiAgwqDCoMKgwqDCoCB9Cj4+PiAgwqAgwqDCoMKgwqDCoCBpZiAocmVzcG9uc2VfYnVm KSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgaW50IGNvdW50ID0gbWluKHJlc3BvbnNlX2J1Zl9zaXpl LCBndWMtPnNlbmRfcmVncy5jb3VudCAtIDEpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGludCBjb3Vu dCA9IG1pbihyZXNwb25zZV9idWZfc2l6ZSwgZ3VjLT5zZW5kX3JlZ3MuY291bnQpOwo+Pj4gIMKg IC3CoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKPj4+ICvCoMKgwqDC oMKgwqDCoCBHRU1fQlVHX09OKCFjb3VudCk7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqAgcmVz cG9uc2VfYnVmWzBdID0gaGVhZGVyOwo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9 IDE7IGkgPCBjb3VudDsgaSsrKQo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlc3Bv bnNlX2J1ZltpXSA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwKPj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBndWNfc2Vu ZF9yZWcoZ3VjLCBpICsgMSkpOwo+Pj4gLcKgwqDCoCB9Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3VjX3NlbmRfcmVn KGd1YywgaSkpOwo+PiBUaGlzIGNvdWxkIHVzZSBhIG5vdGUgaW4gdGhlIGNvbW1pdCBtZXNzYWdl IHRvIHJlbWFyayB0aGF0IHdlIGhhdmUgbm8KPj4gdXNlcnMgZm9yIHRoZSByZXR1cm5lZCBkYXRh IHlldCBhbmQgdGhlcmVmb3JlIG5vdGhpbmcgd2lsbCBicmVhayBpZiB3ZQo+PiBjaGFuZ2Ugd2hh dCB3ZSByZXR1cm4gdGhyb3VnaCBpdC4KPiBJIGhvcGUgdGhpcyB3aWxsIGRvIHRoZSB3b3JrOgo+ Cj4gIlNpbmNlIHNvbWUgb2YgdGhlIG5ldyBNTUlPIGFjdGlvbnMgbWF5IHVzZSBEQVRBMCBmcm9t IE1NSU8gSFhHCj4gcmVzcG9uc2UsIHdlIG11c3QgdXBkYXRlIGludGVsX2d1Y19zZW5kX21taW8o KSB0byBjb3B5IGZ1bGwgcmVzcG9uc2UsCj4gaW5jbHVkaW5nIEhYRyBoZWFkZXIuIFRoZXJlIHdp bGwgYmUgbm8gaW1wYWN0IHRvIGV4aXN0aW5nIHVzZXJzIGFzIGFsbAo+IG9mIHRoZW0gYXJlIG9u bHkgcmVseWluZyBqdXN0IG9uIHJldHVybiBjb2RlLiIKClllcyBpdCBkb2VzLgoKRGFuaWVsZQoK Pgo+PiBBcGFydCBmcm9tIHRoZSBuaXRzLCB0aGUgbG9naWMgbG9va3MgZ29vZCB0byBtZS4KPj4g RGFuaWVsZQo+Pgo+Pj4gIMKgIC3CoMKgwqAgLyogVXNlIGRhdGEgZnJvbSB0aGUgR3VDIHJlc3Bv bnNlIGFzIG91ciByZXR1cm4gdmFsdWUgKi8KPj4+IC3CoMKgwqAgcmV0ID0gSU5URUxfR1VDX01T R19UT19EQVRBKHN0YXR1cyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLyogVXNlIG51bWJlciBvZiBj b3BpZWQgZHdvcmRzIGFzIG91ciByZXR1cm4gdmFsdWUgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXQgPSBjb3VudDsKPj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBV c2UgZGF0YSBmcm9tIHRoZSBHdUMgcmVzcG9uc2UgYXMgb3VyIHJldHVybiB2YWx1ZSAqLwo+Pj4g K8KgwqDCoMKgwqDCoMKgIHJldCA9IEZJRUxEX0dFVChHVUNfSFhHX1JFU1BPTlNFX01TR18wX0RB VEEwLCBoZWFkZXIpOwo+Pj4gK8KgwqDCoCB9Cj4+PiAgwqAgwqAgb3V0Ogo+Pj4gIMKgwqDCoMKg wqAgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQodW5jb3JlLCBndWMtPnNlbmRfcmVncy5md19k b21haW5zKTsKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=