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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,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 E9AB5C433ED for ; Mon, 12 Apr 2021 14:19:57 +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 A423E61287 for ; Mon, 12 Apr 2021 14:19:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A423E61287 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DFF306E5BD; Mon, 12 Apr 2021 14:19:56 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5C4FB6E5D5 for ; Mon, 12 Apr 2021 14:19:55 +0000 (UTC) IronPort-SDR: Qj34l1JVOvlh5rPkTMZ32mSEXFQAOgvxroipKd6ye53yFzKuX4PP86FgyTBLPYjl6fj5cL2jdW CHwCtIYdz8CA== X-IronPort-AV: E=McAfee;i="6200,9189,9952"; a="174298790" X-IronPort-AV: E=Sophos;i="5.82,216,1613462400"; d="scan'208";a="174298790" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2021 07:17:20 -0700 IronPort-SDR: LwHuiAD2ETTLVJnMEKyGsvMKatSQNALOmjAWFWP4gJOEMgUwGttK7QRJzD2kM3iQa6ENpHh91e 8/vcWsIK/t/A== X-IronPort-AV: E=Sophos;i="5.82,216,1613462400"; d="scan'208";a="614583271" Received: from sarveshw-mobl.gar.corp.intel.com (HELO [10.249.254.205]) ([10.249.254.205]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2021 07:17:18 -0700 Subject: Re: [RFC PATCH] drm/ttm: Simplify the delayed destroy locking To: =?UTF-8?Q?Christian_K=c3=b6nig?= , dri-devel@lists.freedesktop.org References: <20210412131740.10257-1-thomas.hellstrom@linux.intel.com> From: =?UTF-8?Q?Thomas_Hellstr=c3=b6m?= Message-ID: <715d7cbd-264c-9422-e173-c57266800c5f@linux.intel.com> Date: Mon, 12 Apr 2021 16:16:49 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - 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: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SGksIENocmlzdGlhbiwKCk9uIDQvMTIvMjEgNDowMSBQTSwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90 ZToKPiBIaSBUaG9tYXMsCj4KPiB3ZWxsIGluIGdlbmVyYWwgYSBnb29kIGlkZWEsIGJ1dCBJJ20g d29ya2luZyBvbiBhIGRpZmZlcmVudCBwbGFuIGZvciBhIAo+IHdoaWxlIG5vdy4KPgo+IE15IGlk ZWEgaGVyZSBpcyB0aGF0IGluc3RlYWQgb2YgdGhlIEJPIHRoZSByZXNvdXJjZSBvYmplY3QgaXMg a2VwdCBvbiAKPiBhIGRvdWJsZSBsaW5rZWQgbHJ1IGxpc3QuCj4KPiBUaGUgcmVzb3VyY2Ugb2Jq ZWN0cyB0aGVuIGhhdmUgYSBwb2ludGVyIHRvIGVpdGhlciB0aGUgQk8gb3IgYSBmZW5jZSAKPiBv YmplY3QuCj4KPiBXaGVuIGl0IGlzIGEgZmVuY2Ugb2JqZWN0IHdlIGNhbiBqdXN0IGdyYWIgYSBy ZWZlcmVuY2UgdG8gaXQgYW5kIHdhaXQgCj4gZm9yIGl0IHRvIGNvbXBsZXRlLgo+Cj4gSWYgaXQg aXMgYSBCTyB3ZSBldmljdCBpdCB0aGUgc2FtZSB3YXkgd2UgY3VycmVudGx5IGRvLgo+Cj4gVGhp cyBhbGxvd3MgdG8gcmVtb3ZlIGJvdGggdGhlIGRlbGF5ZWQgZGVsZXRlLCBpbmRpdmlkdWFsaXph dGlvbiBvZiAKPiBCT3MsIGdob3N0IG9iamVjdHMgZXRjLi4uCgpIbW0sIG9rLiBTbyBpbiB0aGF0 IGNhc2UsIHdoYXQgd291bGQgdHJpZ2dlciB0aGUgZmluYWwgcmVsZWFzZSBvZiB0aGUgCmJ1ZmZl ciBvYmplY3QgaW4gdGhlIGFic2VuY2Ugb2YgYSBkZWxheWVkIGRlbGV0ZSBsaXN0PyBXb3VsZCB3 ZSB1c2UgYSAKZmVuY2UgY2FsbGJhY2sgZm9yIHRoYXQ/CgpPdGhlcndpc2Ugc291bmRzIGxpa2Ug YSBnb29kIGlkZWEsIGFuZCBpZiBpdCBydW5zIGludG8gcHJvYmxlbXMsIHdlIApjb3VsZCBwb3Nz aWJseSByZXN1cnJlY3QgdGhpcy4KCi9UaG9tYXMKCgoKCj4KPiBSZWdhcmRzLAo+IENocmlzdGlh bi4KPgo+IEFtIDEyLjA0LjIxIHVtIDE1OjE3IHNjaHJpZWIgVGhvbWFzIEhlbGxzdHLDtm06Cj4+ IFRoaXMgUkZDIG5lZWRzIHNvbWUgZGVjZW50IHRlc3Rpbmcgb24gYSBkcml2ZXIgd2l0aCBib3Mg dGhhdCBzaGFyZQo+PiByZXNlcnZhdGlvbiBvYmplY3RzLCBhbmQgb2YgY291cnNlIGEgY2hlY2sg Zm9yIHdoZXRoZXIgSSBtaXNzZWQKPj4gc29tZXRoaW5nIG9idmlvdXMuCj4+Cj4+IFRoZSBsb2Nr aW5nIGFyb3VuZCBkZWxheWVkIGRlc3Ryb3kgaXMgcmF0aGVyIGNvbXBsZXggZHVlIHRvIHRoZSBm YWN0Cj4+IHRoYXQgd2Ugd2FudCB0byBpbmRpdmlkdWFsaXplIGRtYV9yZXN2IHBvaW50ZXJzIGJl Zm9yZSBwdXR0aW5nIHRoZSAKPj4gb2JqZWN0Cj4+IG9uIHRoZSBkZWxheWVkLWRlc3Ryb3kgbGlz dC4gVGhhdCBpbmRpdmlkdWFsaXphdGlvbiBpcyBjdXJyZW50bHkgCj4+IHByb3RlY3RlZAo+PiBi eSB0aGUgbHJ1IGxvY2sgZm9yY2luZyB1cyB0byBkbyB0cnktcmVzZXJ2YXRpb25zIHVuZGVyIHRo ZSBscnUgbG9jayAKPj4gd2hlbgo+PiByZXNlcnZpbmcgYW4gb2JqZWN0IGZyb20gdGhlIGxydS0g b3IgZGRlc3Ryb3kgbGlzdHMsIHdoaWNoIGNvbXBsaWNhdGVzCj4+IG1vdmluZyBvdmVyIHRvIHBl ci1tYW5hZ2VyIGxydSBsb2Nrcy4KPj4KPj4gSW5zdGVhZCBwcm90ZWN0IHRoZSBpbmRpdmlkdWFs aXphdGlvbiB3aXRoIHRoZSBvYmplY3Qga3JlZiA9PSAwLAo+PiBhbmQgZW5zdXJlIGtyZWYgIT0g MCBiZWZvcmUgdHJ5aW5nIHRvIHJlc2VydmUgYW4gb2JqZWN0IGZyb20gdGhlIGxpc3QuCj4+IFJl bW92ZSB0aGUgbHJ1IGxvY2sgYXJvdW5kIGluZGl2aWR1YWxpemF0aW9uIGFuZCBwcm90ZWN0IHRo ZSBkZWxheWVkCj4+IGRlc3Ryb3kgbGlzdCB3aXRoIGEgc2VwYXJhdGUgc3BpbmxvY2suIElzb2xh dGUgdGhlIGRlbGF5ZWQgZGVzdHJveSBsaXN0Cj4+IHNpbWlsYXJseSB0byBhIGxvY2tsZXNzIGxp c3QgYmVmb3JlIHRyYXZlcnNpbmcgaXQuIEFsc28gZG9uJ3QgdHJ5IHRvIAo+PiBkcm9wCj4+IHJl c291cmNlIHJlZmVyZW5jZXMgZnJvbSB0aGUgZGVsYXllZCBkZXN0cm95IGxpc3QgdHJhdmVyc2Fs LCBidXQgbGVhdmUKPj4gdGhhdCB0byB0aGUgZmluYWwgb2JqZWN0IHJlbGVhc2UuIFRoZSByb2xl IG9mIHRoZSBkZWxheWVkIGRlc3Ryb3kgdGhyZWFkCj4+IHdpbGwgbm93IHNpbXBseSBiZSB0byB0 cnkgdG8gaWRsZSB0aGUgb2JqZWN0IGFuZCB3aGVuIGlkbGUsIGRyb3AKPj4gdGhlIGRlbGF5ZWQg ZGVzdG95IHJlZmVyZW5jZS4KPj4KPj4gVGhpcyBzaG91bGQgcGF2ZSB0aGUgd2F5IGZvciBwZXIt bWFuYWdlciBscnUgbGlzdHMsIHNsZWVwaW5nIGV2aWN0aW9uIAo+PiBsb2Nrcwo+PiB0aGF0IGFy ZSBrZXB0LCBvcHRpb25hbCBkcm1fbW0gZXZpY3Rpb24gcm9zdGVyIHVzYWdlIGFuZCBtb3Zpbmcg b3ZlciAKPj4gdG8gYQo+PiBjb21wbGV0ZWx5IGxvY2tsZXNzIGRlbGF5ZWQgZGVzdHJveSBsaXN0 IGV2ZW4gaWYgdGhlIHRyYXZlcnNhbCBvcmRlcgo+PiB3aWxsIHRoZW4gY2hhbmdlIGJlY2F1c2Ug dGhlcmUgaXMgbm8gbGxpc3RfYWRkX3RhaWwoKS4KPj4KPj4gQ2M6IENocmlzdGlhbiBLw7ZuaWcg PGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KPj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbEBm ZndsbC5jaD4KPj4gU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxs c3Ryb21AbGludXguaW50ZWwuY29tPgo+PiAtLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL3R0bS90 dG1fYm8uY8KgwqDCoMKgIHwgMTkzICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KPj4g wqAgZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fZGV2aWNlLmMgfMKgwqAgMSArCj4+IMKgIGluY2x1 ZGUvZHJtL3R0bS90dG1fZGV2aWNlLmjCoMKgwqDCoCB8wqDCoCAxICsKPj4gwqAgMyBmaWxlcyBj aGFuZ2VkLCA4MiBpbnNlcnRpb25zKCspLCAxMTMgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90 dG1fYm8uYwo+PiBpbmRleCA2YWI3YjY2Y2UzNmQuLmZkNTcyNTJiYzhmZSAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v dHRtL3R0bV9iby5jCj4+IEBAIC0yMTcsNiArMjE3LDkgQEAgc3RhdGljIGludCB0dG1fYm9faGFu ZGxlX21vdmVfbWVtKHN0cnVjdCAKPj4gdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+PiDCoCDCoCBz dGF0aWMgdm9pZCB0dG1fYm9fY2xlYW51cF9tZW10eXBlX3VzZShzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKmJvKQo+PiDCoCB7Cj4+ICvCoMKgwqAgaWYgKGtyZWZfcmVhZCgmYm8tPmtyZWYpKQo+ PiArwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYm8tPmJhc2UucmVzdik7Cj4+ ICsKPj4gwqDCoMKgwqDCoCBpZiAoYm8tPmJkZXYtPmZ1bmNzLT5kZWxldGVfbWVtX25vdGlmeSkK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJvLT5iZGV2LT5mdW5jcy0+ZGVsZXRlX21lbV9ub3RpZnko Ym8pOwo+PiDCoCBAQCAtMjM5LDEzICsyNDIsMTggQEAgc3RhdGljIGludCB0dG1fYm9faW5kaXZp ZHVhbGl6ZV9yZXN2KHN0cnVjdCAKPj4gdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIHI7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKGJvLT50eXBlICE9IHR0 bV9ib190eXBlX3NnKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBUaGlzIHdvcmtzIGJlY2F1c2Ug dGhlIEJPIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBhbmQgCj4+IG5vYm9keQo+PiAtwqDCoMKg wqDCoMKgwqDCoCAqIHJlZmVyZW5jZSBpdCBhbnkgbW9yZS4gVGhlIG9ubHkgdHJpY2t5IGNhc2Ug aXMgdGhlIAo+PiB0cnlsb2NrIG9uCj4+IC3CoMKgwqDCoMKgwqDCoMKgICogdGhlIHJlc3Ygb2Jq ZWN0IHdoaWxlIGhvbGRpbmcgdGhlIGxydV9sb2NrLgo+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4g K8KgwqDCoMKgwqDCoMKgwqAgKiBUaGlzIHdvcmtzIGJlY2F1c2Ugbm9ib2R5IGJlc2lkZXMgdXMg Y2FuIGxvY2sgdGhlIGJvIG9yCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogYXNzdW1lIGl0IGlzIGxv Y2tlZCB3aGlsZSBpdHMgcmVmY291bnQgaXMgemVyby4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAg Ki8KPj4gLcKgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmYm8tPmJkZXYtPmxydV9sb2NrKTsKPj4g K8KgwqDCoMKgwqDCoMKgIFdBUk5fT05fT05DRShrcmVmX3JlYWQoJmJvLT5rcmVmKSk7Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBiby0+YmFzZS5yZXN2ID0gJmJvLT5iYXNlLl9yZXN2Owo+PiAtwqDC oMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJmJvLT5iZGV2LT5scnVfbG9jayk7Cj4+ICvCoMKgwqDC oMKgwqDCoCAvKgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIERvbid0IHJlb3JkZXIgYWdhaW5zdCBr cmVmX2luaXQoKS4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBNYXRjaGVzIHRoZSBpbXBsaWNpdCBm dWxsIGJhcnJpZXIgb2YgYSBzdWNjZXNzZnVsCj4+ICvCoMKgwqDCoMKgwqDCoMKgICoga3JlZl9n ZXRfdW5sZXNzX3plcm8oKSBhZnRlciBhIGxydV9saXN0X2xvb2t1cC4KPj4gK8KgwqDCoMKgwqDC oMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHNtcF9tYigpOwo+PiDCoMKgwqDCoMKgIH0KPj4g wqAgwqDCoMKgwqDCoCByZXR1cm4gcjsKPj4gQEAgLTI3NCwxMjIgKzI4Miw2NiBAQCBzdGF0aWMg dm9pZCB0dG1fYm9fZmx1c2hfYWxsX2ZlbmNlcyhzdHJ1Y3QgCj4+IHR0bV9idWZmZXJfb2JqZWN0 ICpibykKPj4gwqAgfQo+PiDCoCDCoCAvKioKPj4gLSAqIGZ1bmN0aW9uIHR0bV9ib19jbGVhbnVw X3JlZnMKPj4gLSAqIElmIGJvIGlkbGUsIHJlbW92ZSBmcm9tIGxydSBsaXN0cywgYW5kIHVucmVm Lgo+PiAtICogSWYgbm90IGlkbGUsIGJsb2NrIGlmIHBvc3NpYmxlLgo+PiAtICoKPj4gLSAqIE11 c3QgYmUgY2FsbGVkIHdpdGggbHJ1X2xvY2sgYW5kIHJlc2VydmF0aW9uIGhlbGQsIHRoaXMgZnVu Y3Rpb24KPj4gLSAqIHdpbGwgZHJvcCB0aGUgbHJ1IGxvY2sgYW5kIG9wdGlvbmFsbHkgdGhlIHJl c2VydmF0aW9uIGxvY2sgYmVmb3JlIAo+PiByZXR1cm5pbmcuCj4+ICsgKiB0dG1fYm9fY2xlYW51 cF9yZWZzIC0gaWRsZSBhbmQgcmVtb3ZlIHBhZ2VzIGFuZCBncHUtYmluZGluZ3MgYW5kIAo+PiBy ZW1vdmUKPj4gKyAqIGZyb20gbHJ1X2xpc3RzLgo+PiDCoMKgICoKPj4gwqDCoCAqIEBibzrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUaGUgYnVmZmVyIG9iamVjdCB0byBj bGVhbi11cAo+PiDCoMKgICogQGludGVycnVwdGlibGU6wqDCoMKgwqDCoMKgwqDCoCBBbnkgc2xl ZXBzIHNob3VsZCBvY2N1ciBpbnRlcnJ1cHRpYmx5Lgo+PiAtICogQG5vX3dhaXRfZ3B1OsKgwqDC oMKgwqDCoMKgwqDCoMKgIE5ldmVyIHdhaXQgZm9yIGdwdS4gUmV0dXJuIC1FQlVTWSBpbnN0ZWFk Lgo+PiAtICogQHVubG9ja19yZXN2OsKgwqDCoMKgwqDCoMKgwqDCoMKgIFVubG9jayB0aGUgcmVz ZXJ2YXRpb24gbG9jayBhcyB3ZWxsLgo+PiArICogQG5vX3dhaXRfZ3B1OsKgwqDCoMKgwqDCoMKg wqDCoMKgIE5ldmVyIHdhaXQgZm9yIGdwdS4gUmV0dXJuIC1FQlVTWSBpZiBub3QgCj4+IGlkbGUu Cj4+IMKgwqAgKi8KPj4gLQo+PiDCoCBzdGF0aWMgaW50IHR0bV9ib19jbGVhbnVwX3JlZnMoc3Ry dWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBib29sIGludGVycnVwdGlibGUsIGJvb2wgbm9fd2FpdF9ncHUsCj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCB1bmxvY2tfcmVzdikKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIGludGVycnVwdGlibGUsIGJv b2wgbm9fd2FpdF9ncHUpCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgZG1hX3Jlc3YgKnJlc3Yg PSAmYm8tPmJhc2UuX3Jlc3Y7Cj4+IMKgwqDCoMKgwqAgaW50IHJldDsKPj4gwqAgLcKgwqDCoCBp ZiAoZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3UocmVzdiwgdHJ1ZSkpCj4+IC3CoMKgwqDCoMKg wqDCoCByZXQgPSAwOwo+PiAtwqDCoMKgIGVsc2UKPj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IC1F QlVTWTsKPj4gLQo+PiAtwqDCoMKgIGlmIChyZXQgJiYgIW5vX3dhaXRfZ3B1KSB7Cj4+IC3CoMKg wqDCoMKgwqDCoCBsb25nIGxyZXQ7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIGlmICh1bmxvY2tf cmVzdikKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNl LnJlc3YpOwo+PiAtwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJmJvLT5iZGV2LT5scnVfbG9j ayk7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIGxyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRf cmN1KHJlc3YsIHRydWUsIGludGVycnVwdGlibGUsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMzAgKiBIWik7Cj4+IC0KPj4gLcKgwqDCoMKgwqDC oMKgIGlmIChscmV0IDwgMCkKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGxyZXQ7 Cj4+IC3CoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChscmV0ID09IDApCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiAtRUJVU1k7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIHNwaW5fbG9j aygmYm8tPmJkZXYtPmxydV9sb2NrKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmICh1bmxvY2tfcmVz diAmJiAhZG1hX3Jlc3ZfdHJ5bG9jayhiby0+YmFzZS5yZXN2KSkgewo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAvKgo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogV2UgcmFjZWQsIGFu ZCBsb3N0LCBzb21lb25lIGVsc2UgaG9sZHMgdGhlIAo+PiByZXNlcnZhdGlvbiBub3csCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBhbmQgaXMgcHJvYmFibHkgYnVzeSBpbiB0dG1fYm9f Y2xlYW51cF9tZW10eXBlX3VzZS4KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBFdmVuIGlmIGl0J3Mgbm90IHRoZSBjYXNlLCBiZWNh dXNlIHdlIGZpbmlzaGVkIAo+PiB3YWl0aW5nIGFueQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICogZGVsYXllZCBkZXN0cnVjdGlvbiB3b3VsZCBzdWNjZWVkLCBzbyBqdXN0IHJldHVybiAK Pj4gc3VjY2Vzcwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogaGVyZS4KPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGluX3Vu bG9jaygmYm8tPmJkZXYtPmxydV9sb2NrKTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIDA7Cj4+IC3CoMKgwqDCoMKgwqDCoCB9Cj4+IC3CoMKgwqDCoMKgwqDCoCByZXQgPSAwOwo+ PiAtwqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgIGlmIChyZXQgfHwgdW5saWtlbHkobGlzdF9lbXB0 eSgmYm8tPmRkZXN0cm95KSkpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmICh1bmxvY2tfcmVzdikK Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3Yp Owo+PiAtwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJmJvLT5iZGV2LT5scnVfbG9jayk7Cj4+ ICvCoMKgwqAgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYm8tPmJhc2UucmVzdik7Cj4+ICvCoMKgwqAg V0FSTl9PTl9PTkNFKCFiby0+ZGVsZXRlZCk7Cj4+ICvCoMKgwqAgcmV0ID0gdHRtX2JvX3dhaXQo Ym8sIGludGVycnVwdGlibGUsIG5vX3dhaXRfZ3B1KTsKPj4gK8KgwqDCoCBpZiAocmV0KQo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gLcKgwqDCoCB9Cj4+IMKgICvCoMKgwqAg dHRtX2JvX2NsZWFudXBfbWVtdHlwZV91c2UoYm8pOwo+PiArwqDCoMKgIHNwaW5fbG9jaygmYm8t PmJkZXYtPmxydV9sb2NrKTsKPj4gwqDCoMKgwqDCoCB0dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsK Pj4gLcKgwqDCoCBsaXN0X2RlbF9pbml0KCZiby0+ZGRlc3Ryb3kpOwo+PiDCoMKgwqDCoMKgIHNw aW5fdW5sb2NrKCZiby0+YmRldi0+bHJ1X2xvY2spOwo+PiAtwqDCoMKgIHR0bV9ib19jbGVhbnVw X21lbXR5cGVfdXNlKGJvKTsKPj4gLQo+PiAtwqDCoMKgIGlmICh1bmxvY2tfcmVzdikKPj4gLcKg wqDCoMKgwqDCoMKgIGRtYV9yZXN2X3VubG9jayhiby0+YmFzZS5yZXN2KTsKPj4gLQo+PiAtwqDC oMKgIHR0bV9ib19wdXQoYm8pOwo+PiDCoCDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+ IMKgIMKgIC8qCj4+IC0gKiBUcmF2ZXJzZSB0aGUgZGVsYXllZCBsaXN0LCBhbmQgY2FsbCB0dG1f Ym9fY2xlYW51cF9yZWZzIG9uIGFsbAo+PiAtICogZW5jb3VudGVyZWQgYnVmZmVycy4KPj4gKyAq IElzb2xhdGUgYSBwYXJ0IG9mIHRoZSBkZWxheWVkIGRlc3Ryb3kgbGlzdCBhbmQgY2hlY2sgZm9y IGlkbGUgb24gYWxsCj4+ICsgKiBidWZmZXIgb2JqZWN0cyBvbiBpdC4gSWYgaWRsZSwgcmVtb3Zl IGZyb20gdGhlIGxpc3QgYW5kIGRyb3AgdGhlCj4+ICsgKiBkZWxheWVkIGRlc3Ryb3kgcmVmY291 bnQuIFJldHVybiBhbGwgYnVzeSBidWZmZXJzIHRvIHRoZSBkZWxheWVkCj4+ICsgKiBkZXN0cm95 IGxpc3QuCj4+IMKgwqAgKi8KPj4gwqAgYm9vbCB0dG1fYm9fZGVsYXllZF9kZWxldGUoc3RydWN0 IHR0bV9kZXZpY2UgKmJkZXYsIGJvb2wgcmVtb3ZlX2FsbCkKPj4gwqAgewo+PiAtwqDCoMKgIHN0 cnVjdCBsaXN0X2hlYWQgcmVtb3ZlZDsKPj4gLcKgwqDCoCBib29sIGVtcHR5Owo+PiAtCj4+IC3C oMKgwqAgSU5JVF9MSVNUX0hFQUQoJnJlbW92ZWQpOwo+PiAtCj4+IC3CoMKgwqAgc3Bpbl9sb2Nr KCZiZGV2LT5scnVfbG9jayk7Cj4+IC3CoMKgwqAgd2hpbGUgKCFsaXN0X2VtcHR5KCZiZGV2LT5k ZGVzdHJveSkpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAq Ym87Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIGJvID0gbGlzdF9maXJzdF9lbnRyeSgmYmRldi0+ ZGRlc3Ryb3ksIHN0cnVjdCAKPj4gdHRtX2J1ZmZlcl9vYmplY3QsCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGRlc3Ryb3kpOwo+PiAtwqDCoMKgwqDCoMKg wqAgbGlzdF9tb3ZlX3RhaWwoJmJvLT5kZGVzdHJveSwgJnJlbW92ZWQpOwo+PiAtwqDCoMKgwqDC oMKgwqAgaWYgKCF0dG1fYm9fZ2V0X3VubGVzc196ZXJvKGJvKSkKPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY29udGludWU7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIGlmIChyZW1vdmVfYWxs IHx8IGJvLT5iYXNlLnJlc3YgIT0gJmJvLT5iYXNlLl9yZXN2KSB7Cj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7Cj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGRtYV9yZXN2X2xvY2soYm8tPmJhc2UucmVzdiwgTlVMTCk7Cj4+IC0KPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7Cj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHR0bV9ib19jbGVhbnVwX3JlZnMoYm8sIGZhbHNlLCAhcmVtb3Zl X2FsbCwgdHJ1ZSk7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAoZG1hX3Jlc3Zf dHJ5bG9jayhiby0+YmFzZS5yZXN2KSkgewo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0dG1f Ym9fY2xlYW51cF9yZWZzKGJvLCBmYWxzZSwgIXJlbW92ZV9hbGwsIHRydWUpOwo+PiAtwqDCoMKg wqDCoMKgwqAgfSBlbHNlIHsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2so JmJkZXYtPmxydV9sb2NrKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJv LCAqbmV4dDsKPj4gK8KgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIGlzb2xhdGVkOwo+PiArwqDCoMKg IGJvb2wgZW1wdHksIGlkbGU7Cj4+ICsKPj4gK8KgwqDCoCBJTklUX0xJU1RfSEVBRCgmaXNvbGF0 ZWQpOwo+PiArCj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZiZGV2LT5kZGVzdHJveV9sb2NrKTsKPj4g K8KgwqDCoCBsaXN0X3NwbGljZV9pbml0KCZiZGV2LT5kZGVzdHJveSwgJmlzb2xhdGVkKTsKPj4g K8KgwqDCoCBzcGluX3VubG9jaygmYmRldi0+ZGRlc3Ryb3lfbG9jayk7Cj4+ICvCoMKgwqAgbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJvLCBuZXh0LCAmaXNvbGF0ZWQsIGRkZXN0cm95KSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBXQVJOX09OX09OQ0UoIWtyZWZfcmVhZCgmYm8tPmtyZWYpIHx8Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiby0+YmFzZS5yZXN2ICE9ICZiby0+ YmFzZS5fcmVzdik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXJlbW92ZV9hbGwpCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlkbGUgPSBkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShiby0+ YmFzZS5yZXN2LCB0cnVlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWRsZSA9IChkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KGJvLT5iYXNlLnJl c3YsIHRydWUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGZhbHNlLCAzMCAqIEhaKSA+IDApOwo+PiArwqDCoMKgwqDCoMKgwqAg aWYgKGlkbGUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9kZWxfaW5pdCgmYm8t PmRkZXN0cm95KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHRtX2JvX3B1dChibyk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIHR0bV9ib19wdXQo Ym8pOwo+PiAtwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7Cj4+IMKg wqDCoMKgwqAgfQo+PiAtwqDCoMKgIGxpc3Rfc3BsaWNlX3RhaWwoJnJlbW92ZWQsICZiZGV2LT5k ZGVzdHJveSk7Cj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZiZGV2LT5kZGVzdHJveV9sb2NrKTsKPj4g K8KgwqDCoCBsaXN0X3NwbGljZSgmaXNvbGF0ZWQsICZiZGV2LT5kZGVzdHJveSk7Cj4+IMKgwqDC oMKgwqAgZW1wdHkgPSBsaXN0X2VtcHR5KCZiZGV2LT5kZGVzdHJveSk7Cj4+IC3CoMKgwqAgc3Bp bl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKPj4gK8KgwqDCoCBzcGluX3VubG9jaygmYmRldi0+ ZGRlc3Ryb3lfbG9jayk7Cj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIGVtcHR5Owo+PiDCoCB9Cj4+ IEBAIC00MDUsMTAgKzM1NywxNiBAQCBzdGF0aWMgdm9pZCB0dG1fYm9fcmVsZWFzZShzdHJ1Y3Qg a3JlZiAqa3JlZikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IHR0bV9ib19pbmRpdmlkdWFs aXplX3Jlc3YoYm8pOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkgewo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBMYXN0IHJlc29ydCwgaWYgd2UgZmFpbCB0byBhbGxvY2F0 ZSBtZW1vcnkgZm9yIHRoZQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogZmVuY2VzIGJs b2NrIGZvciB0aGUgQk8gdG8gYmVjb21lIGlkbGUKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqIGZlbmNlcyBibG9jayBmb3IgdGhlIEJPIHRvIGJlY29tZSBpZGxlLCBhbmQgdGhlbgo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogd2UgYXJlIGZyZWUgdG8gdXBkYXRlIHRoZSByZXN2 IHBvaW50ZXIuCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShiby0+YmFzZS5yZXN2 LCB0cnVlLCBmYWxzZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIDMwICogSFopOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo Ym8tPnR5cGUgIT0gdHRtX2JvX3R5cGVfc2cpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBiby0+YmFzZS5yZXN2ID0gJmJvLT5iYXNlLl9yZXN2Owo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC8qIFBsZWFzZSBzZWUgdHRtX2JvX2luZGl2aWR1YWxpemVfcmVz digpICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc21wX21iKCk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqAgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChiby0+YmRldi0+ZnVuY3MtPnJlbGVhc2Vfbm90aWZ5KQo+PiBA QCAtNDIyLDkgKzM4MCw4IEBAIHN0YXRpYyB2b2lkIHR0bV9ib19yZWxlYXNlKHN0cnVjdCBrcmVm ICprcmVmKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgIWRtYV9yZXN2X3RyeWxvY2soYm8tPmJhc2Uu cmVzdikpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFRoZSBCTyBpcyBub3QgaWRsZSwgcmVz dXJyZWN0IGl0IGZvciBkZWxheWVkIGRlc3Ryb3kgKi8KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHR0 bV9ib19mbHVzaF9hbGxfZmVuY2VzKGJvKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGJvLT5kZWxldGVk ID0gdHJ1ZTsKPj4gLQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZiby0+YmRldi0+ bHJ1X2xvY2spOwo+PiArwqDCoMKgwqDCoMKgwqAgYm8tPmRlbGV0ZWQgPSB0cnVlOwo+PiDCoCDC oMKgwqDCoMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBNYWtlIHBpbm5l ZCBib3MgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIHRvCj4+IEBAIC00MzksOCArMzk2LDEwIEBAIHN0 YXRpYyB2b2lkIHR0bV9ib19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB0dG1fYm9fbW92ZV90b19scnVfdGFpbChibywgJmJvLT5tZW0sIE5V TEwpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoCArwqDCoMKgwqDCoMKgwqAgc3Bpbl9s b2NrKCZiby0+YmRldi0+ZGRlc3Ryb3lfbG9jayk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBrcmVm X2luaXQoJmJvLT5rcmVmKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGxpc3RfYWRkX3RhaWwoJmJv LT5kZGVzdHJveSwgJmJkZXYtPmRkZXN0cm95KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5fdW5s b2NrKCZiby0+YmRldi0+ZGRlc3Ryb3lfbG9jayk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzcGlu X3VubG9jaygmYm8tPmJkZXYtPmxydV9sb2NrKTsKPj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHNj aGVkdWxlX2RlbGF5ZWRfd29yaygmYmRldi0+d3EsCj4+IEBAIC00NTAsOSArNDA5LDExIEBAIHN0 YXRpYyB2b2lkIHR0bV9ib19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQo+PiDCoCDCoMKgwqDC oMKgIHNwaW5fbG9jaygmYm8tPmJkZXYtPmxydV9sb2NrKTsKPj4gwqDCoMKgwqDCoCB0dG1fYm9f ZGVsX2Zyb21fbHJ1KGJvKTsKPj4gLcKgwqDCoCBsaXN0X2RlbCgmYm8tPmRkZXN0cm95KTsKPj4g wqDCoMKgwqDCoCBzcGluX3VubG9jaygmYm8tPmJkZXYtPmxydV9sb2NrKTsKPj4gwqAgK8KgwqDC oCBwcl9pbmZvKCJEZWxldGluZy5cbiIpOwo+PiArwqDCoMKgIFdBUk5fT05fT05DRSghbGlzdF9l bXB0eV9jYXJlZnVsKCZiby0+ZGRlc3Ryb3kpKTsKPj4gKwo+PiDCoMKgwqDCoMKgIHR0bV9ib19j bGVhbnVwX21lbXR5cGVfdXNlKGJvKTsKPj4gwqDCoMKgwqDCoCBkbWFfcmVzdl91bmxvY2soYm8t PmJhc2UucmVzdik7Cj4+IMKgIEBAIC02MzAsMjUgKzU5MSwyNiBAQCBpbnQgdHRtX21lbV9ldmlj dF9maXJzdChzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGxp c3RfZm9yX2VhY2hfZW50cnkoYm8sICZtYW4tPmxydVtpXSwgbHJ1KSB7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJvb2wgYnVzeTsKPj4gwqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKCF0dG1fYm9fZ2V0X3VubGVzc196ZXJvKGJvKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb250aW51ZTsKPj4gKwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoIXR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShibywgY3R4LCAmbG9ja2VkLAo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJmJ1c3kpKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGJ1c3kgJiYgIWJ1c3lfYm8gJiYgdGlja2V0ICE9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl9sb2NraW5nX2N0eChiby0+YmFzZS5yZXN2 KSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1c3lfYm8g PSBibzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0dG1fYm9fcHV0KGJvKTsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAocGxhY2UgJiYgIWJkZXYtPmZ1bmNzLT5ldmljdGlvbl92YWx1YWJsZShibywKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHBsYWNlKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHR0bV9ib19wdXQoYm8pOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChsb2NrZWQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkbWFfcmVzdl91bmxvY2soYm8tPmJhc2UucmVzdik7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0K Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCF0dG1fYm9fZ2V0X3VubGVzc196ZXJvKGJv KSkgewo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChsb2NrZWQpCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl91bmxvY2soYm8t PmJhc2UucmVzdik7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7 Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBicmVhazsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqAgQEAgLTY3MCw4ICs2 MzIsMTEgQEAgaW50IHR0bV9tZW1fZXZpY3RfZmlyc3Qoc3RydWN0IHR0bV9kZXZpY2UgKmJkZXYs Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKgIGlmIChiby0+ZGVsZXRlZCkgewo+PiAr wqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIHJldCA9IHR0bV9ib19jbGVhbnVwX3JlZnMoYm8sIGN0eC0+aW50ZXJydXB0aWJs ZSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPm5v X3dhaXRfZ3B1LCBsb2NrZWQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGN0eC0+bm9fd2FpdF9ncHUpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGxvY2tl ZCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJl c3YpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdHRtX2JvX3B1dChibyk7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoMKgwqDCoMKgIH0KPj4gQEAgLTExNjgsMTcgKzExMzMs MTkgQEAgaW50IHR0bV9ib19zd2Fwb3V0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAKPj4gKmJv LCBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCwKPj4gwqDCoMKgwqDCoCBib29sIGxvY2tl ZDsKPj4gwqDCoMKgwqDCoCBpbnQgcmV0Owo+PiDCoCAtwqDCoMKgIGlmICghdHRtX2JvX2V2aWN0 X3N3YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsICZsb2NrZWQsIE5VTEwpKQo+PiArwqDCoMKgIGlm ICghdHRtX2JvX2dldF91bmxlc3NfemVybyhibykpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVCVVNZOwo+PiDCoCAtwqDCoMKgIGlmICghdHRtX2JvX2dldF91bmxlc3NfemVybyhibykp IHsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmIChsb2NrZWQpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGRtYV9yZXN2X3VubG9jayhiby0+YmFzZS5yZXN2KTsKPj4gK8KgwqDCoCBpZiAoIXR0bV9i b19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShibywgY3R4LCAmbG9ja2VkLCBOVUxMKSkgewo+PiAr wqDCoMKgwqDCoMKgwqAgdHRtX2JvX3B1dChibyk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVCVVNZOwo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgwqDCoMKgwqDCoCBpZiAoYm8tPmRlbGV0 ZWQpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHR0bV9ib19jbGVhbnVwX3JlZnMoYm8sIGZhbHNlLCBm YWxzZSwgbG9ja2VkKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZiby0+YmRldi0+ bHJ1X2xvY2spOwo+PiArwqDCoMKgwqDCoMKgwqAgdHRtX2JvX2NsZWFudXBfcmVmcyhibywgZmFs c2UsIGZhbHNlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChsb2NrZWQpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRtYV9yZXN2X3VubG9jayhiby0+YmFzZS5yZXN2KTsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIHR0bV9ib19wdXQoYm8pOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7 Cj4+IMKgwqDCoMKgwqAgfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1f ZGV2aWNlLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fZGV2aWNlLmMKPj4gaW5kZXgg OWI3ODdiM2NhZWI1Li5iOTQxOTg5ODg1ZWQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS90dG0vdHRtX2RldmljZS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2Rldmlj ZS5jCj4+IEBAIC0yMjgsNiArMjI4LDcgQEAgaW50IHR0bV9kZXZpY2VfaW5pdChzdHJ1Y3QgdHRt X2RldmljZSAqYmRldiwgCj4+IHN0cnVjdCB0dG1fZGV2aWNlX2Z1bmNzICpmdW5jcywKPj4gwqDC oMKgwqDCoCBiZGV2LT52bWFfbWFuYWdlciA9IHZtYV9tYW5hZ2VyOwo+PiDCoMKgwqDCoMKgIElO SVRfREVMQVlFRF9XT1JLKCZiZGV2LT53cSwgdHRtX2RldmljZV9kZWxheWVkX3dvcmtxdWV1ZSk7 Cj4+IMKgwqDCoMKgwqAgc3Bpbl9sb2NrX2luaXQoJmJkZXYtPmxydV9sb2NrKTsKPj4gK8KgwqDC oCBzcGluX2xvY2tfaW5pdCgmYmRldi0+ZGRlc3Ryb3lfbG9jayk7Cj4+IMKgwqDCoMKgwqAgSU5J VF9MSVNUX0hFQUQoJmJkZXYtPmRkZXN0cm95KTsKPj4gwqDCoMKgwqDCoCBiZGV2LT5kZXZfbWFw cGluZyA9IG1hcHBpbmc7Cj4+IMKgwqDCoMKgwqAgbXV0ZXhfbG9jaygmdHRtX2dsb2JhbF9tdXRl eCk7Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRtX2RldmljZS5oIGIvaW5jbHVk ZS9kcm0vdHRtL3R0bV9kZXZpY2UuaAo+PiBpbmRleCA3YzhmODdiZDUyZDMuLmZhOGM0ZjZhMTY5 ZSAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9kZXZpY2UuaAo+PiArKysgYi9p bmNsdWRlL2RybS90dG0vdHRtX2RldmljZS5oCj4+IEBAIC0yNzksNiArMjc5LDcgQEAgc3RydWN0 IHR0bV9kZXZpY2Ugewo+PiDCoMKgwqDCoMKgwqAgKiBQcm90ZWN0aW9uIGZvciB0aGUgcGVyIG1h bmFnZXIgTFJVIGFuZCBkZGVzdHJveSBsaXN0cy4KPj4gwqDCoMKgwqDCoMKgICovCj4+IMKgwqDC oMKgwqAgc3BpbmxvY2tfdCBscnVfbG9jazsKPj4gK8KgwqDCoCBzcGlubG9ja190IGRkZXN0cm95 X2xvY2s7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBkZGVzdHJveTsKPj4gwqAgwqDC oMKgwqDCoCAvKgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=