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=-14.5 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,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 7A754C433E0 for ; Mon, 8 Feb 2021 12:29:23 +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 1E51964E7D for ; Mon, 8 Feb 2021 12:29:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1E51964E7D 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=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 86C7A6E8C2; Mon, 8 Feb 2021 12:29:22 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9F2636E8C2 for ; Mon, 8 Feb 2021 12:29:21 +0000 (UTC) IronPort-SDR: RxY7rFbV+PhFfA2zofw26qkxA3/xwa5w0otUCr/cA0QK6Lt1qTQQpJIHqXsET8r7iJF0c7IWBL 8hCm0daWaDXA== X-IronPort-AV: E=McAfee;i="6000,8403,9888"; a="161454367" X-IronPort-AV: E=Sophos;i="5.81,161,1610438400"; d="scan'208";a="161454367" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Feb 2021 04:29:19 -0800 IronPort-SDR: jffcynqmXwocYRQyBVyi1VfQDZy5JI2L1GVQTpzVaZaDzb0aF9XCe5iSNNwvao5s1zlIJ/WBcj ILNNrKQJpfSA== X-IronPort-AV: E=Sophos;i="5.81,161,1610438400"; d="scan'208";a="395366608" Received: from dlauner-mobl.ger.corp.intel.com (HELO [10.214.195.182]) ([10.214.195.182]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Feb 2021 04:29:17 -0800 To: Chris Wilson , intel-gfx@lists.freedesktop.org References: <20210208105236.28498-1-chris@chris-wilson.co.uk> <20210208105236.28498-9-chris@chris-wilson.co.uk> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: Date: Mon, 8 Feb 2021 12:29:14 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: <20210208105236.28498-9-chris@chris-wilson.co.uk> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 09/31] drm/i915: Replace priolist rbtree with a skiplist 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" Ck9uIDA4LzAyLzIwMjEgMTA6NTIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBSZXBsYWNlIHRoZSBw cmlvbGlzdCByYnRyZWUgd2l0aCBhIHNraXBsaXN0LiBUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIGlz Cj4gdGhhdCB3YWxraW5nIGFuZCByZW1vdmluZyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHNraXBs aXN0IGlzIE8oMSksIGJ1dAo+IE8obGdOKSBmb3IgYW4gcmJ0cmVlLCBhcyB3ZSBuZWVkIHRvIHJl YmFsYW5jZSBvbiByZW1vdmUuIFRoaXMgaXMgYQo+IGhpbmRyYW5jZSBmb3Igc3VibWlzc2lvbiBs YXRlbmN5IGFzIGl0IG9jY3VycyBiZXR3ZWVuIHBpY2tpbmcgYSByZXF1ZXN0Cj4gZm9yIHRoZSBw cmlvbGlzdCBhbmQgc3VibWl0dGluZyBpdCB0byBoYXJkd2FyZSwgYXMgd2VsbCBlZmZlY3RpdmVs eQo+IHRyaXBsaW5nIHRoZSBudW1iZXIgb2YgTyhsZ04pIG9wZXJhdGlvbnMgcmVxdWlyZWQgdW5k ZXIgdGhlIGlycW9mZiBsb2NrLgo+IFRoaXMgaXMgY3JpdGljYWwgdG8gcmVkdWNpbmcgdGhlIGxh dGVuY3kgaml0dGVyIHdpdGggbXVsdGlwbGUgY2xpZW50cy4KPiAKPiBUaGUgZG93bnNpZGVzIHRv IHNraXBsaXN0cyBhcmUgdGhhdCBsb29rdXAvaW5zZXJ0aW9uIGlzIG9ubHkKPiBwcm9iYWJpbGlz dGljYWxseSBPKGxnTikgYW5kIHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgbWVtb3J5IHBlbmFsdHkg dG8KPiBhcyBlYWNoIHNraXAgbm9kZSBpcyBsYXJnZXIgdGhhbiB0aGUgcmJ0cmVlIGVxdWl2YWxl bnQuIEZ1cnRoZXJtb3JlLCB3ZQo+IGRvbid0IHVzZSBkeW5hbWljIGFycmF5cyBmb3IgdGhlIHNr aXBsaXN0LCBzbyB0aGUgYWxsb2NhdGlvbiBpcyBmaXhlZCwKPiBhbmQgaW1wb3NlcyBhbiB1cHBl ciBib3VuZCBvbiB0aGUgc2NhbGFiaWxpdHkgd3J0IHRvIHRoZSBudW1iZXIgb2YKPiBpbmZsaWdo dCByZXF1ZXN0cy4KPiAKPiBJbiB0aGUgZm9sbG93aW5nIHBhdGNoZXMsIHdlIGludHJvZHVjZSBh IG5ldyBzb3J0IGtleSB0byB0aGUgc2NoZWR1bGVyLAo+IGEgdmlydHVhbCBkZWFkbGluZS4gVGhp cyBpbXBvc2VzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSB0byB0aGUgdHJlZS4KPiBVc2luZyBhIHBy aW9yaXR5IHNvcnQsIHdlIGhhdmUgdmVyeSBmZXcgcHJpb3JpdHkgbGV2ZWxzIGFjdGl2ZSBhdCBh bnkKPiB0aW1lLCBtb3N0IGxpa2VseSBqdXN0IHRoZSBkZWZhdWx0IHByaW9yaXR5IGFuZCBzbyB0 aGUgcmJ0cmVlIGRlZ2VuZXJhdGVzCj4gdG8gYSBzaW5nbGUgZWxlbWVudHMgY29udGFpbmluZyB0 aGUgbGlzdCBvZiBhbGwgcmVhZHkgcmVxdWVzdHMuIFRoZQo+IGRlYWRsaW5lcyBpbiBjb250cmFz dCBhcmUgdmVyeSBzcGFyc2UsIGFuZCB0eXBpY2FsbHkgZWFjaCByZXF1ZXN0IGhhcyBhCj4gdW5p cXVlIGRlYWRsaW5lLiBJbnN0ZWFkIG9mIGJlaW5nIGFibGUgdG8gc2ltcGx5IHdhbGsgdGhlIGxp c3QgZHVyaW5nCj4gZGVxdWV1ZSwgd2l0aCB0aGUgZGVhZGxpbmUgc2NoZWR1bGVyIHdlIGhhdmUg dG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBic3QKPiBvbiB0aGUgY3JpdGljYWwgc3VibWlzc2lvbiBw YXRoLiBTa2lwbGlzdHMgYXJlIHZhc3RseSBzdXBlcmlvciBpbiB0aGlzCj4gaW5zdGFuY2UgZHVl IHRvIHRoZSBPKDEpIGl0ZXJhdGlvbiBkdXJpbmcgZGVxdWV1ZSwgd2l0aCB2ZXJ5IHNpbWlsYXIK PiBjaGFyYWN0ZXJpc3RpY3MgW29uIGF2ZXJhZ2VdIHRvIHRoZSByYnRyZWUgZm9yIGluc2VydGlv bi4KPiAKPiBUaGlzIG1lYW5zIHRoYXQgYnkgdXNpbmcgc2tpcGxpc3RzIHdlIGNhbiBpbnRyb2R1 Y2UgYSBzcGFyc2Ugc29ydCBrZXkKPiB3aXRob3V0IGRlZ3JhZGluZyBsYXRlbmN5IG9uIHRoZSBj cml0aWNhbCBzdWJtaXNzaW9uIHBhdGguCj4gCj4gQXMgYW4gZXhhbXBsZSwgb25lIHNpbXBsZSBj YXNlIHdoZXJlIHdlIHRyeSB0byBkbyBsb3RzIG9mCj4gc2VtaS1pbmRlcGVuZGVudCB3b3JrIHdp dGhvdXQgYW55IHByaW9yaXR5IG1hbmFnZW1lbnQgKGdlbV9leGVjX3BhcmFsbGVsKSwKPiB0aGUg bG9jayBob2xkIHRpbWVzIHdlcmU6Cj4gW3dvcnN0XSAgICAgICAgW3RvdGFsXSAgICBbYXZnXQo+ ICAgOTczLjA1ICAgICA2MzAxNTg0Ljg0ICAgICAwLjM1ICMgcGxhaW4gcmJ0cmVlCj4gICA1NTku ODIgICAgIDU0MjQ5MTUuMjUgICAgIDAuMzMgIyBiZXN0IHJidHJlZSB3aXRoIHBydW5pbmcKPiAg IDIwOC4yMSAgICAgMzg5ODc4NC4wOSAgICAgMC4yNCAjIHNraXBsaXN0Cj4gICAgMzQuMDUgICAg IDU3ODQxMDYuMDEgICAgIDAuMzIgIyByYnRyZWUgd2l0aG91dCBkZWFkbGluZXMKPiAgICAyMy4z NSAgICAgNDE1Mjk5OS44MCAgICAgMC4yNCAjIHNraXBsaXN0IHdpdGhvdXQgZGVhZGxpbmVzCj4g Cj4gQmFzZWQgb24gdGhlIHNraXBsaXN0IGltcGxlbWVudGF0aW9uIGJ5IERyIENvbiBLb2xpdmFz IGZvciBNdVFTUy4KPiAKPiBSZWZlcmVuY2VzOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lr aS9Ta2lwX2xpc3QKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KPiAtLS0KPiAgIC4uLi9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3Vi bWlzc2lvbi5jICB8IDE2OCArKysrKy0tLS0tCj4gICAuLi4vZ3B1L2RybS9pOTE1L2d0L3VjL2lu dGVsX2d1Y19zdWJtaXNzaW9uLmMgfCAgNDEgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3ByaW9saXN0X3R5cGVzLmggICAgfCAgNjQgKysrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zY2hlZHVsZXIuYyAgICAgICAgIHwgMzA0ICsrKysrKysrKysrKystLS0tLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCAgICAgICAgIHwgIDE2ICstCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlcl90eXBlcy5oICAgfCAgIDIgKy0K PiAgIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSAr Cj4gICAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3NjaGVkdWxlci5jICAgfCAgNTMg KystCj4gICA4IGZpbGVzIGNoYW5nZWQsIDQ1NCBpbnNlcnRpb25zKCspLCAxOTUgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNs aXN0c19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlz dHNfc3VibWlzc2lvbi5jCj4gaW5kZXggNzhmZGE5YjRmNjI2Li40YTAyNTgzNDdjMTAgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Np b24uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJt aXNzaW9uLmMKPiBAQCAtMjU0LDExICsyNTQsNiBAQCBzdGF0aWMgdm9pZCByaW5nX3NldF9wYXVz ZWQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgc3RhdGUpCj4gICAJ CXdtYigpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqdG9fcHJp b2xpc3Qoc3RydWN0IHJiX25vZGUgKnJiKQo+IC17Cj4gLQlyZXR1cm4gcmJfZW50cnkocmIsIHN0 cnVjdCBpOTE1X3ByaW9saXN0LCBub2RlKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyBpbnQgcnFfcHJp byhjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAgIHsKPiAgIAlyZXR1cm4gUkVBRF9P TkNFKHJxLT5zY2hlZC5hdHRyLnByaW9yaXR5KTsKPiBAQCAtMjgyLDE1ICsyNzcsMjcgQEAgc3Rh dGljIGludCBlZmZlY3RpdmVfcHJpbyhjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAg IAlyZXR1cm4gcHJpbzsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAq Zmlyc3RfcmVxdWVzdChjb25zdCBzdHJ1Y3QgaTkxNV9zY2hlZCAqc2UpCj4gK3sKPiArCXN0cnVj dCBpOTE1X3ByaW9saXN0ICpwbCA9IHNlLT5xdWV1ZS5zZW50aW5lbC5uZXh0WzBdOwo+ICsKPiAr CWlmIChwbCA9PSAmc2UtPnF1ZXVlLnNlbnRpbmVsKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiAr CXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJnBsLT5yZXF1ZXN0cywKPiArCQkJCQlz dHJ1Y3QgaTkxNV9yZXF1ZXN0LAo+ICsJCQkJCXNjaGVkLmxpbmspOwo+ICt9Cj4gKwo+ICAgc3Rh dGljIGludCBxdWV1ZV9wcmlvKGNvbnN0IHN0cnVjdCBpOTE1X3NjaGVkICpzZSkKPiAgIHsKPiAt CXN0cnVjdCByYl9ub2RlICpyYjsKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICAgCj4g LQlyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmc2UtPnF1ZXVlKTsKPiAtCWlmICghcmIpCj4gKwlycSA9 IGZpcnN0X3JlcXVlc3Qoc2UpOwo+ICsJaWYgKCFycSkKPiAgIAkJcmV0dXJuIElOVF9NSU47Cj4g ICAKPiAtCXJldHVybiB0b19wcmlvbGlzdChyYiktPnByaW9yaXR5Owo+ICsJcmV0dXJuIHJxX3By aW8ocnEpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IHZpcnR1YWxfcHJpbyhjb25zdCBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZWwpCj4gQEAgLTMwMCw3ICszMDcsNyBAQCBzdGF0 aWMgaW50IHZpcnR1YWxfcHJpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAq ZWwpCj4gICAJcmV0dXJuIHJiID8gcmJfZW50cnkocmIsIHN0cnVjdCB2ZV9ub2RlLCByYiktPnBy aW8gOiBJTlRfTUlOOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBib29sIG5lZWRfcHJlZW1wdChjb25z dCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gK3N0YXRpYyBib29sIG5lZWRfcHJl ZW1wdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCQkgY29uc3Qgc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGk5MTVfc2NoZWQgKnNl ID0gJmVuZ2luZS0+c2NoZWQ7Cj4gQEAgLTExNDQsNyArMTE1MSw5IEBAIHN0YXRpYyB2b2lkIGV4 ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICoqcG9ydCA9IGV4ZWNsaXN0cy0+cGVuZGluZzsKPiAgIAlzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICoqIGNvbnN0IGxhc3RfcG9ydCA9IHBvcnQgKyBleGVjbGlzdHMtPnBvcnRf bWFzazsKPiAgIAlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpsYXN0LCAqIGNvbnN0ICphY3RpdmU7Cj4g KwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgKnJuOwo+ICAgCXN0cnVjdCB2aXJ0dWFsX2VuZ2lu ZSAqdmU7Cj4gKwlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGw7Cj4gICAJc3RydWN0IHJiX25vZGUg KnJiOwo+ICAgCWJvb2wgc3VibWl0ID0gZmFsc2U7Cj4gICAKPiBAQCAtMTM1NSw4NyArMTM2NCw3 OSBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gICAJCQlicmVhazsKPiAgIAl9Cj4gICAKPiAtCXdoaWxlICgocmIgPSByYl9m aXJzdF9jYWNoZWQoJnNlLT5xdWV1ZSkpKSB7Cj4gLQkJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAg PSB0b19wcmlvbGlzdChyYik7Cj4gLQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsICpybjsKPiAr CWk5MTVfc2NoZWRfZGVxdWV1ZShzZSwgcGwsIHJxLCBybikgewo+ICsJCWJvb2wgbWVyZ2UgPSB0 cnVlOwo+ICAgCj4gLQkJcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdF9jb25zdW1lKHJxLCBybiwg cCkgewo+IC0JCQlib29sIG1lcmdlID0gdHJ1ZTsKPiArCQkvKgo+ICsJCSAqIENhbiB3ZSBjb21i aW5lIHRoaXMgcmVxdWVzdCB3aXRoIHRoZSBjdXJyZW50IHBvcnQ/Cj4gKwkJICogSXQgaGFzIHRv IGJlIHRoZSBzYW1lIGNvbnRleHQvcmluZ2J1ZmZlciBhbmQgbm90Cj4gKwkJICogaGF2ZSBhbnkg ZXhjZXB0aW9ucyAoZS5nLiBHVlQgc2F5aW5nIG5ldmVyIHRvCj4gKwkJICogY29tYmluZSBjb250 ZXh0cykuCj4gKwkJICoKPiArCQkgKiBJZiB3ZSBjYW4gY29tYmluZSB0aGUgcmVxdWVzdHMsIHdl IGNhbiBleGVjdXRlIGJvdGgKPiArCQkgKiBieSB1cGRhdGluZyB0aGUgUklOR19UQUlMIHRvIHBv aW50IHRvIHRoZSBlbmQgb2YgdGhlCj4gKwkJICogc2Vjb25kIHJlcXVlc3QsIGFuZCBzbyB3ZSBu ZXZlciBuZWVkIHRvIHRlbGwgdGhlCj4gKwkJICogaGFyZHdhcmUgYWJvdXQgdGhlIGZpcnN0Lgo+ ICsJCSAqLwo+ICsJCWlmIChsYXN0ICYmICFjYW5fbWVyZ2VfcnEobGFzdCwgcnEpKSB7Cj4gKwkJ CS8qCj4gKwkJCSAqIElmIHdlIGFyZSBvbiB0aGUgc2Vjb25kIHBvcnQgYW5kIGNhbm5vdAo+ICsJ CQkgKiBjb21iaW5lIHRoaXMgcmVxdWVzdCB3aXRoIHRoZSBsYXN0LCB0aGVuIHdlCj4gKwkJCSAq IGFyZSBkb25lLgo+ICsJCQkgKi8KPiArCQkJaWYgKHBvcnQgPT0gbGFzdF9wb3J0KQo+ICsJCQkJ Z290byBkb25lOwo+ICAgCj4gICAJCQkvKgo+IC0JCQkgKiBDYW4gd2UgY29tYmluZSB0aGlzIHJl cXVlc3Qgd2l0aCB0aGUgY3VycmVudCBwb3J0Pwo+IC0JCQkgKiBJdCBoYXMgdG8gYmUgdGhlIHNh bWUgY29udGV4dC9yaW5nYnVmZmVyIGFuZCBub3QKPiAtCQkJICogaGF2ZSBhbnkgZXhjZXB0aW9u cyAoZS5nLiBHVlQgc2F5aW5nIG5ldmVyIHRvCj4gLQkJCSAqIGNvbWJpbmUgY29udGV4dHMpLgo+ IC0JCQkgKgo+IC0JCQkgKiBJZiB3ZSBjYW4gY29tYmluZSB0aGUgcmVxdWVzdHMsIHdlIGNhbiBl eGVjdXRlIGJvdGgKPiAtCQkJICogYnkgdXBkYXRpbmcgdGhlIFJJTkdfVEFJTCB0byBwb2ludCB0 byB0aGUgZW5kIG9mIHRoZQo+IC0JCQkgKiBzZWNvbmQgcmVxdWVzdCwgYW5kIHNvIHdlIG5ldmVy IG5lZWQgdG8gdGVsbCB0aGUKPiAtCQkJICogaGFyZHdhcmUgYWJvdXQgdGhlIGZpcnN0Lgo+ICsJ CQkgKiBXZSBtdXN0IG5vdCBwb3B1bGF0ZSBib3RoIEVMU1BbXSB3aXRoIHRoZQo+ICsJCQkgKiBz YW1lIExSQ0EsIGkuZS4gd2UgbXVzdCBzdWJtaXQgMiBkaWZmZXJlbnQKPiArCQkJICogY29udGV4 dHMgaWYgd2Ugc3VibWl0IDIgRUxTUC4KPiAgIAkJCSAqLwo+IC0JCQlpZiAobGFzdCAmJiAhY2Fu X21lcmdlX3JxKGxhc3QsIHJxKSkgewo+IC0JCQkJLyoKPiAtCQkJCSAqIElmIHdlIGFyZSBvbiB0 aGUgc2Vjb25kIHBvcnQgYW5kIGNhbm5vdAo+IC0JCQkJICogY29tYmluZSB0aGlzIHJlcXVlc3Qg d2l0aCB0aGUgbGFzdCwgdGhlbiB3ZQo+IC0JCQkJICogYXJlIGRvbmUuCj4gLQkJCQkgKi8KPiAt CQkJCWlmIChwb3J0ID09IGxhc3RfcG9ydCkKPiAtCQkJCQlnb3RvIGRvbmU7Cj4gKwkJCWlmIChs YXN0LT5jb250ZXh0ID09IHJxLT5jb250ZXh0KQo+ICsJCQkJZ290byBkb25lOwo+ICAgCj4gLQkJ CQkvKgo+IC0JCQkJICogV2UgbXVzdCBub3QgcG9wdWxhdGUgYm90aCBFTFNQW10gd2l0aCB0aGUK PiAtCQkJCSAqIHNhbWUgTFJDQSwgaS5lLiB3ZSBtdXN0IHN1Ym1pdCAyIGRpZmZlcmVudAo+IC0J CQkJICogY29udGV4dHMgaWYgd2Ugc3VibWl0IDIgRUxTUC4KPiAtCQkJCSAqLwo+IC0JCQkJaWYg KGxhc3QtPmNvbnRleHQgPT0gcnEtPmNvbnRleHQpCj4gLQkJCQkJZ290byBkb25lOwo+ICsJCQlp ZiAoaTkxNV9yZXF1ZXN0X2hhc19zZW50aW5lbChsYXN0KSkKPiArCQkJCWdvdG8gZG9uZTsKPiAg IAo+IC0JCQkJaWYgKGk5MTVfcmVxdWVzdF9oYXNfc2VudGluZWwobGFzdCkpCj4gLQkJCQkJZ290 byBkb25lOwo+ICsJCQkvKgo+ICsJCQkgKiBXZSBhdm9pZCBzdWJtaXR0aW5nIHZpcnR1YWwgcmVx dWVzdHMgaW50bwo+ICsJCQkgKiB0aGUgc2Vjb25kYXJ5IHBvcnRzIHNvIHRoYXQgd2UgY2FuIG1p Z3JhdGUKPiArCQkJICogdGhlIHJlcXVlc3QgaW1tZWRpYXRlbHkgdG8gYW5vdGhlciBlbmdpbmUK PiArCQkJICogcmF0aGVyIHRoYW4gd2FpdCBmb3IgdGhlIHByaW1hcnkgcmVxdWVzdC4KPiArCQkJ ICovCj4gKwkJCWlmIChycS0+ZXhlY3V0aW9uX21hc2sgIT0gZW5naW5lLT5tYXNrKQo+ICsJCQkJ Z290byBkb25lOwo+ICAgCj4gLQkJCQkvKgo+IC0JCQkJICogV2UgYXZvaWQgc3VibWl0dGluZyB2 aXJ0dWFsIHJlcXVlc3RzIGludG8KPiAtCQkJCSAqIHRoZSBzZWNvbmRhcnkgcG9ydHMgc28gdGhh dCB3ZSBjYW4gbWlncmF0ZQo+IC0JCQkJICogdGhlIHJlcXVlc3QgaW1tZWRpYXRlbHkgdG8gYW5v dGhlciBlbmdpbmUKPiAtCQkJCSAqIHJhdGhlciB0aGFuIHdhaXQgZm9yIHRoZSBwcmltYXJ5IHJl cXVlc3QuCj4gLQkJCQkgKi8KPiAtCQkJCWlmIChycS0+ZXhlY3V0aW9uX21hc2sgIT0gZW5naW5l LT5tYXNrKQo+IC0JCQkJCWdvdG8gZG9uZTsKPiArCQkJLyoKPiArCQkJICogSWYgR1ZUIG92ZXJy aWRlcyB1cyB3ZSBvbmx5IGV2ZXIgc3VibWl0Cj4gKwkJCSAqIHBvcnRbMF0sIGxlYXZpbmcgcG9y dFsxXSBlbXB0eS4gTm90ZSB0aGF0IHdlCj4gKwkJCSAqIGFsc28gaGF2ZSB0byBiZSBjYXJlZnVs IHRoYXQgd2UgZG9uJ3QgcXVldWUKPiArCQkJICogdGhlIHNhbWUgY29udGV4dCAoZXZlbiB0aG91 Z2ggYSBkaWZmZXJlbnQKPiArCQkJICogcmVxdWVzdCkgdG8gdGhlIHNlY29uZCBwb3J0Lgo+ICsJ CQkgKi8KPiArCQkJaWYgKGN0eF9zaW5nbGVfcG9ydF9zdWJtaXNzaW9uKGxhc3QtPmNvbnRleHQp IHx8Cj4gKwkJCSAgICBjdHhfc2luZ2xlX3BvcnRfc3VibWlzc2lvbihycS0+Y29udGV4dCkpCj4g KwkJCQlnb3RvIGRvbmU7Cj4gICAKPiAtCQkJCS8qCj4gLQkJCQkgKiBJZiBHVlQgb3ZlcnJpZGVz IHVzIHdlIG9ubHkgZXZlciBzdWJtaXQKPiAtCQkJCSAqIHBvcnRbMF0sIGxlYXZpbmcgcG9ydFsx XSBlbXB0eS4gTm90ZSB0aGF0IHdlCj4gLQkJCQkgKiBhbHNvIGhhdmUgdG8gYmUgY2FyZWZ1bCB0 aGF0IHdlIGRvbid0IHF1ZXVlCj4gLQkJCQkgKiB0aGUgc2FtZSBjb250ZXh0IChldmVuIHRob3Vn aCBhIGRpZmZlcmVudAo+IC0JCQkJICogcmVxdWVzdCkgdG8gdGhlIHNlY29uZCBwb3J0Lgo+IC0J CQkJICovCj4gLQkJCQlpZiAoY3R4X3NpbmdsZV9wb3J0X3N1Ym1pc3Npb24obGFzdC0+Y29udGV4 dCkgfHwKPiAtCQkJCSAgICBjdHhfc2luZ2xlX3BvcnRfc3VibWlzc2lvbihycS0+Y29udGV4dCkp Cj4gLQkJCQkJZ290byBkb25lOwo+IC0KPiAtCQkJCW1lcmdlID0gZmFsc2U7Cj4gLQkJCX0KPiAt Cj4gLQkJCWlmIChfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpKSB7Cj4gLQkJCQlpZiAoIW1lcmdl KSB7Cj4gLQkJCQkJKnBvcnQrKyA9IGk5MTVfcmVxdWVzdF9nZXQobGFzdCk7Cj4gLQkJCQkJbGFz dCA9IE5VTEw7Cj4gLQkJCQl9Cj4gLQo+IC0JCQkJR0VNX0JVR19PTihsYXN0ICYmCj4gLQkJCQkJ ICAgIWNhbl9tZXJnZV9jdHgobGFzdC0+Y29udGV4dCwKPiAtCQkJCQkJCSAgcnEtPmNvbnRleHQp KTsKPiAtCQkJCUdFTV9CVUdfT04obGFzdCAmJgo+IC0JCQkJCSAgIGk5MTVfc2Vxbm9fcGFzc2Vk KGxhc3QtPmZlbmNlLnNlcW5vLAo+IC0JCQkJCQkJICAgICBycS0+ZmVuY2Uuc2Vxbm8pKTsKPiAt Cj4gLQkJCQlzdWJtaXQgPSB0cnVlOwo+IC0JCQkJbGFzdCA9IHJxOwo+IC0JCQl9Cj4gKwkJCW1l cmdlID0gZmFsc2U7Cj4gICAJCX0KPiAgIAo+IC0JCXJiX2VyYXNlX2NhY2hlZCgmcC0+bm9kZSwg JnNlLT5xdWV1ZSk7Cj4gLQkJaTkxNV9wcmlvbGlzdF9mcmVlKHApOwo+ICsJCWlmIChfX2k5MTVf cmVxdWVzdF9zdWJtaXQocnEpKSB7Cj4gKwkJCWlmICghbWVyZ2UpIHsKPiArCQkJCSpwb3J0Kysg PSBpOTE1X3JlcXVlc3RfZ2V0KGxhc3QpOwo+ICsJCQkJbGFzdCA9IE5VTEw7Cj4gKwkJCX0KPiAr Cj4gKwkJCUdFTV9CVUdfT04obGFzdCAmJgo+ICsJCQkJICAgIWNhbl9tZXJnZV9jdHgobGFzdC0+ Y29udGV4dCwKPiArCQkJCQkJICBycS0+Y29udGV4dCkpOwo+ICsJCQlHRU1fQlVHX09OKGxhc3Qg JiYKPiArCQkJCSAgIGk5MTVfc2Vxbm9fcGFzc2VkKGxhc3QtPmZlbmNlLnNlcW5vLAo+ICsJCQkJ CQkgICAgIHJxLT5mZW5jZS5zZXFubykpOwo+ICsKPiArCQkJc3VibWl0ID0gdHJ1ZTsKPiArCQkJ bGFzdCA9IHJxOwo+ICsJCX0KPiAgIAl9Cj4gICBkb25lOgo+ICAgCSpwb3J0KysgPSBpOTE1X3Jl cXVlc3RfZ2V0KGxhc3QpOwo+IEBAIC0xNDU2LDcgKzE0NTcsNyBAQCBzdGF0aWMgdm9pZCBleGVj bGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJICogcmVx dWVzdCB0cmlnZ2VyaW5nIHByZWVtcHRpb24gb24gdGhlIG5leHQgZGVxdWV1ZSAob3Igc3Vic2Vx dWVudAo+ICAgCSAqIGludGVycnVwdCBmb3Igc2Vjb25kYXJ5IHBvcnRzKS4KPiAgIAkgKi8KPiAt CWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCA9IHF1ZXVlX3ByaW8oc2UpOwo+ICsJZXhl Y2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcGwtPnByaW9yaXR5Owo+ICAgCXNwaW5fdW5s b2NrKCZzZS0+bG9jayk7Cj4gICAKPiAgIAkvKgo+IEBAIC0yNzE2LDcgKzI3MTcsNiBAQCBzdGF0 aWMgdm9pZCBleGVjbGlzdHNfcmVzZXRfY2FuY2VsKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiAgIAl9Cj4gICAKPiAgIAlleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJ TlRfTUlOOwo+IC0Jc2UtPnF1ZXVlID0gUkJfUk9PVF9DQUNIRUQ7Cj4gICAKPiAgIAlHRU1fQlVH X09OKF9fdGFza2xldF9pc19lbmFibGVkKCZzZS0+dGFza2xldCkpOwo+ICAgCXNlLT50YXNrbGV0 LmNhbGxiYWNrID0gbm9wX3N1Ym1pc3Npb25fdGFza2xldDsKPiBAQCAtMzE3Myw2ICszMTczLDgg QEAgc3RhdGljIHZvaWQgdmlydHVhbF9jb250ZXh0X2V4aXQoc3RydWN0IGludGVsX2NvbnRleHQg KmNlKQo+ICAgCj4gICAJZm9yIChuID0gMDsgbiA8IHZlLT5udW1fc2libGluZ3M7IG4rKykKPiAg IAkJaW50ZWxfZW5naW5lX3BtX3B1dCh2ZS0+c2libGluZ3Nbbl0pOwo+ICsKPiArCWk5MTVfc2No ZWRfcGFyayhpbnRlbF9lbmdpbmVfZ2V0X3NjaGVkdWxlcigmdmUtPmJhc2UpKTsKPiAgIH0KPiAg IAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0X29wcyB2aXJ0dWFsX2NvbnRl eHRfb3BzID0gewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3Vj X3N1Ym1pc3Npb24uYwo+IGluZGV4IGQxNGI5ZGI3N2RmOC4uYzE2MzkzZGY0MmEwIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5j Cj4gQEAgLTYwLDExICs2MCw2IEBACj4gICAKPiAgICNkZWZpbmUgR1VDX1JFUVVFU1RfU0laRSA2 NCAvKiBieXRlcyAqLwo+ICAgCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3Qg KnRvX3ByaW9saXN0KHN0cnVjdCByYl9ub2RlICpyYikKPiAtewo+IC0JcmV0dXJuIHJiX2VudHJ5 KHJiLCBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCwgbm9kZSk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgc3Ry dWN0IGd1Y19zdGFnZV9kZXNjICpfX2dldF9zdGFnZV9kZXNjKHN0cnVjdCBpbnRlbF9ndWMgKmd1 YywgdTMyIGlkKQo+ICAgewo+ICAgCXN0cnVjdCBndWNfc3RhZ2VfZGVzYyAqYmFzZSA9IGd1Yy0+ c3RhZ2VfZGVzY19wb29sX3ZhZGRyOwo+IEBAIC0xODYsOSArMTgxLDEwIEBAIHN0YXRpYyB2b2lk IF9fZ3VjX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCXN0cnVj dCBpOTE1X3JlcXVlc3QgKipmaXJzdCA9IGV4ZWNsaXN0cy0+aW5mbGlnaHQ7Cj4gICAJc3RydWN0 IGk5MTVfcmVxdWVzdCAqKiBjb25zdCBsYXN0X3BvcnQgPSBmaXJzdCArIGV4ZWNsaXN0cy0+cG9y dF9tYXNrOwo+ICAgCXN0cnVjdCBpOTE1X3JlcXVlc3QgKmxhc3QgPSBmaXJzdFswXTsKPiArCXN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqcm47Cj4gICAJc3RydWN0IGk5MTVfcmVxdWVzdCAqKnBv cnQ7Cj4gKwlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGw7Cj4gICAJYm9vbCBzdWJtaXQgPSBmYWxz ZTsKPiAtCXN0cnVjdCByYl9ub2RlICpyYjsKPiAgIAo+ICAgCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JnNlLT5sb2NrKTsKPiAgIAo+IEBAIC0yMDUsMzIgKzIwMSwyMiBAQCBzdGF0aWMgdm9pZCBfX2d1 Y19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAkgKiBldmVudC4K PiAgIAkgKi8KPiAgIAlwb3J0ID0gZmlyc3Q7Cj4gLQl3aGlsZSAoKHJiID0gcmJfZmlyc3RfY2Fj aGVkKCZzZS0+cXVldWUpKSkgewo+IC0JCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0gdG9fcHJp b2xpc3QocmIpOwo+IC0JCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqcm47Cj4gKwlpOTE1X3Nj aGVkX2RlcXVldWUoc2UsIHBsLCBycSwgcm4pIHsKPiArCQlpZiAobGFzdCAmJiBycS0+Y29udGV4 dCAhPSBsYXN0LT5jb250ZXh0KSB7Cj4gKwkJCWlmIChwb3J0ID09IGxhc3RfcG9ydCkKPiArCQkJ CWdvdG8gZG9uZTsKPiAgIAo+IC0JCXByaW9saXN0X2Zvcl9lYWNoX3JlcXVlc3RfY29uc3VtZShy cSwgcm4sIHApIHsKPiAtCQkJaWYgKGxhc3QgJiYgcnEtPmNvbnRleHQgIT0gbGFzdC0+Y29udGV4 dCkgewo+IC0JCQkJaWYgKHBvcnQgPT0gbGFzdF9wb3J0KQo+IC0JCQkJCWdvdG8gZG9uZTsKPiAt Cj4gLQkJCQkqcG9ydCA9IHNjaGVkdWxlX2luKGxhc3QsCj4gLQkJCQkJCSAgICBwb3J0IC0gZXhl Y2xpc3RzLT5pbmZsaWdodCk7Cj4gLQkJCQlwb3J0Kys7Cj4gLQkJCX0KPiAtCj4gLQkJCWxpc3Rf ZGVsX2luaXQoJnJxLT5zY2hlZC5saW5rKTsKPiAtCQkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJx KTsKPiAtCQkJc3VibWl0ID0gdHJ1ZTsKPiAtCQkJbGFzdCA9IHJxOwo+ICsJCQkqcG9ydCA9IHNj aGVkdWxlX2luKGxhc3QsIHBvcnQgLSBleGVjbGlzdHMtPmluZmxpZ2h0KTsKPiArCQkJcG9ydCsr Owo+ICAgCQl9Cj4gICAKPiAtCQlyYl9lcmFzZV9jYWNoZWQoJnAtPm5vZGUsICZzZS0+cXVldWUp Owo+IC0JCWk5MTVfcHJpb2xpc3RfZnJlZShwKTsKPiArCQlsaXN0X2RlbF9pbml0KCZycS0+c2No ZWQubGluayk7Cj4gKwkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJxKTsKPiArCQlzdWJtaXQgPSB0 cnVlOwo+ICsJCWxhc3QgPSBycTsKPiAgIAl9Cj4gICBkb25lOgo+IC0JZXhlY2xpc3RzLT5xdWV1 ZV9wcmlvcml0eV9oaW50ID0KPiAtCQlyYiA/IHRvX3ByaW9saXN0KHJiKS0+cHJpb3JpdHkgOiBJ TlRfTUlOOwo+ICsJZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcGwtPnByaW9yaXR5 Owo+ICAgCWlmIChzdWJtaXQpIHsKPiAgIAkJKnBvcnQgPSBzY2hlZHVsZV9pbihsYXN0LCBwb3J0 IC0gZXhlY2xpc3RzLT5pbmZsaWdodCk7Cj4gICAJCSorK3BvcnQgPSBOVUxMOwo+IEBAIC0zNjEs NyArMzQ3LDYgQEAgc3RhdGljIHZvaWQgZ3VjX3Jlc2V0X2NhbmNlbChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCj4gICAJX19pOTE1X3NjaGVkX2NhbmNlbF9xdWV1ZShzZSk7Cj4gICAK PiAgIAlleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwo+IC0Jc2UtPnF1 ZXVlID0gUkJfUk9PVF9DQUNIRUQ7Cj4gICAKPiAgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZz ZS0+bG9jaywgZmxhZ3MpOwo+ICAgCWludGVsX2VuZ2luZV9zaWduYWxfYnJlYWRjcnVtYnMoZW5n aW5lKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90 eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCj4gaW5k ZXggYmMyZmE4NGY5OGE4Li5lZTc0ODJiOWM4MTMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCj4gQEAgLTM4LDEwICszOCw3MiBAQCBlbnVtIHsKPiAg ICNkZWZpbmUgSTkxNV9QUklPUklUWV9VTlBSRUVNUFRBQkxFIElOVF9NQVgKPiAgICNkZWZpbmUg STkxNV9QUklPUklUWV9CQVJSSUVSIChJOTE1X1BSSU9SSVRZX1VOUFJFRU1QVEFCTEUgLSAxKQo+ ICAgCj4gKy8qCj4gKyAqIFRoZSBzbGFiIHJldHVybnMgcG93ZXItb2YtdHdvIGNodW5rcyBvZiBt ZW1vcnksIHNvIGZpbGwgb3V0IHRoZQo+ICsgKiBub2RlIHRvIHRoZSBuZXh0IGNhY2hlbGluZS4K PiArICoKPiArICogV2UgY2FuIGVzdGltYXRlIGhvdyBtYW55IHJlcXVlc3RzIHRoZSBza2lwbGlz dCB3aWxsIHNjYWxlIHRvIGJhc2VkCj4gKyAqIG9uIGl0cyBoZWlnaHQ6Cj4gKyAqICAgMTEgPT4g IDQgbWlsbGlvbiByZXF1ZXN0cwo+ICsgKiAgIDEyID0+IDE2IG1pbGxpb24gcmVxdWVzdHMKPiAr ICovCj4gKyNpZmRlZiBDT05GSUdfNjRCSVQKPiArI2RlZmluZSBJOTE1X1BSSU9MSVNUX0hFSUdI VCAxMgo+ICsjZWxzZQo+ICsjZGVmaW5lIEk5MTVfUFJJT0xJU1RfSEVJR0hUIDExCj4gKyNlbmRp Zgo+ICsKPiArLyoKPiArICogaTkxNV9wcmlvbGlzdCBmb3JtcyBhIHNraXBsaXN0LiBUaGUgc2tp cGxpc3QgaXMgYnVpbHQgaW4gbGF5ZXJzLAo+ICsgKiBzdGFydGluZyBhdCB0aGUgYmFzZSBbMF0g aXMgYSBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgYWxsIGk5MTVfcHJpb2xpc3QuCj4gKyAqIEVhY2gg aGlnaGVyIGxheWVyIGNvbnRhaW5zIGEgZnJhY3Rpb24gb2YgdGhlIGk5MTVfcHJpb2xpc3QgZnJv bSB0aGUKPiArICogcHJldmlvdXMgbGF5ZXI6Cj4gKyAqCj4gKyAqIFNbMF0gMDEyMzQ1Njc4OUFC Q0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRiBTCj4g KyAqIEVbMV0gPjE+Mz41Pjc+OT5CPkQ+Rj4xPjM+NT43Pjk+Qj5EPkY+MT4zPjU+Nz45PkI+RD5G PjE+Mz41Pjc+OT5CPkQ+RiBFCj4gKyAqIE5bMl0gLS0+My0tPjctLT5CLS0+Ri0tPjMtLT43LS0+ Qi0tPkYtLT4zLS0+Ny0tPkItLT5GLS0+My0tPjctLT5CLS0+RiBOCj4gKyAqIFRbM10gLS0tLS0t PjctLS0tLS0+Ri0tLS0tLS03LS0tLS0tPkYtLS0tLS0+Ny0tLS0tLT5GLS0tLS0tPjctLS0tLS0+ RiBUCj4gKyAqIElbNF0gLS0tLS0tLS0tLS0tLS0+Ri0tLS0tLS0tLS0tLS0tPkYtLS0tLS0tLS0t LS0tLT5GLS0tLS0tLS0tLS0tLS0+RiBJCj4gKyAqIE5bNV0gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tPkYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+RiBOCj4gKyAqIEVbNl0g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPkYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tPiBFCj4gKyAqIExbN10gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiBMCj4gKyAqCj4gKyAqIFRvIGl0ZXJhdGUgdGhy b3VnaCBhbGwgYWN0aXZlIGk5MTVfcHJpb2xpc3QsIHdlIG9ubHkgbmVlZCB0byBmb2xsb3cKPiAr ICogdGhlIGNoYWluIGluIGk5MTVfcHJpb2xpc3QubmV4dFswXSAoc2VlIGZvcl9lYWNoX3ByaW9s aXN0KCkpLgo+ICsgKgo+ICsgKiBUbyBxdWlja2x5IGZpbmQgYSBzcGVjaWZpYyBrZXkgKG9yIGlu c2VydCBwb2ludCksIHdlIGNhbiBwZXJmb3JtIGEgYmluYXJ5Cj4gKyAqIHNlYXJjaCBieSBzdGFy dGluZyBhdCB0aGUgaGlnaGVzdCBsZXZlbCBhbmQgZm9sbG93aW5nIHRoZSBsaW5rZWQgbGlzdAo+ ICsgKiBhdCB0aGF0IGxldmVsIHVudGlsIHdlIGVpdGhlciBmaW5kIHRoZSBub2RlLCBvciBoYXZl IGdvbmUgcGFzc2VkIHRoZSBrZXkuCj4gKyAqIFRoZW4gd2UgZGVzY2VuZCBhIGxldmVsLCBhbmQg c3RhcnQgd2Fsa2luZyB0aGUgbGlzdCBhZ2FpbiBzdGFydGluZyBmcm9tCj4gKyAqIHRoZSBjdXJy ZW50IHBvc2l0aW9uLCB1bnRpbCBldmVudHVhbGx5IHdlIGZpbmQgb3VyIGtleSwgb3Igd2UgcnVu IG91dCBvZgo+ICsgKiBsZXZlbHMuCj4gKyAqCj4gKyAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9y Zy93aWtpL1NraXBfbGlzdAo+ICsgKi8KPiAgIHN0cnVjdCBpOTE1X3ByaW9saXN0IHsKPiAgIAlz dHJ1Y3QgbGlzdF9oZWFkIHJlcXVlc3RzOwo+IC0Jc3RydWN0IHJiX25vZGUgbm9kZTsKPiAgIAlp bnQgcHJpb3JpdHk7Cj4gKwo+ICsJaW50IGxldmVsOwo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3Qg Km5leHRbSTkxNV9QUklPTElTVF9IRUlHSFRdOwo+ICAgfTsKPiAgIAo+ICtzdHJ1Y3QgaTkxNV9w cmlvbGlzdF9yb290IHsKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0IHNlbnRpbmVsOwo+ICsJdTMy IHBybmc7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIGk5MTVfcHJpb2xpc3RfaXNfZW1wdHkocm9vdCkg KChyb290KS0+c2VudGluZWwubGV2ZWwgPCAwKQo+ICsKPiArI2RlZmluZSBmb3JfZWFjaF9wcmlv bGlzdChwLCByb290KSBcCj4gKwlmb3IgKChwKSA9IChyb290KS0+c2VudGluZWwubmV4dFswXTsg XAo+ICsJICAgICAocCkgIT0gJihyb290KS0+c2VudGluZWw7IFwKPiArCSAgICAgKHApID0gKHAp LT5uZXh0WzBdKQo+ICsKPiArI2RlZmluZSBwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0KGl0LCBw bGlzdCkgXAo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShpdCwgJihwbGlzdCktPnJlcXVlc3RzLCBz Y2hlZC5saW5rKQo+ICsKPiArI2RlZmluZSBwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0X3NhZmUo aXQsIG4sIHBsaXN0KSBcCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXQsIG4sICYocGxp c3QpLT5yZXF1ZXN0cywgc2NoZWQubGluaykKPiArCj4gICAjZW5kaWYgLyogX0k5MTVfUFJJT0xJ U1RfVFlQRVNfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9z Y2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiBpbmRl eCAzMTJlMTUzOGQwMDEuLjUxOGVhYzY3OTU5ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9zY2hlZHVsZXIuYwo+IEBAIC00LDcgKzQsOSBAQAo+ICAgICogQ29weXJpZ2h0IMKpIDIwMTgg SW50ZWwgQ29ycG9yYXRpb24KPiAgICAqLwo+ICAgCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMu aD4KPiAgICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcHJhbmRv bS5oPgo+ICAgCj4gICAjaW5jbHVkZSAiZ3QvaW50ZWxfcmluZy5oIgo+ICAgI2luY2x1ZGUgImd0 L2ludGVsX2xyY19yZWcuaCIKPiBAQCAtMTY4LDYgKzE3MCwxNiBAQCB2b2lkIGk5MTVfc2NoZWRf c2VsZWN0X21vZGUoc3RydWN0IGk5MTVfc2NoZWQgKnNlLCBlbnVtIGk5MTVfc2NoZWRfbW9kZSBt b2RlKQo+ICAgCX0KPiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9pZCBpbml0X3ByaW9saXN0KHN0cnVj dCBpOTE1X3ByaW9saXN0X3Jvb3QgKmNvbnN0IHJvb3QpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3By aW9saXN0ICpwbCA9ICZyb290LT5zZW50aW5lbDsKPiArCj4gKwltZW1zZXRfcCgodm9pZCAqKilw bC0+bmV4dCwgcGwsIEFSUkFZX1NJWkUocGwtPm5leHQpKTsKPiArCXBsLT5yZXF1ZXN0cy5wcmV2 ID0gTlVMTDsKPiArCXBsLT5wcmlvcml0eSA9IElOVF9NSU47Cj4gKwlwbC0+bGV2ZWwgPSAtMTsK PiArfQo+ICsKPiAgIHZvaWQgaTkxNV9zY2hlZF9pbml0KHN0cnVjdCBpOTE1X3NjaGVkICpzZSwK PiAgIAkJICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gICAJCSAgICAgY29uc3QgY2hhciAqbmFt ZSwKPiBAQCAtMTgzLDkgKzE5NSw5IEBAIHZvaWQgaTkxNV9zY2hlZF9pbml0KHN0cnVjdCBpOTE1 X3NjaGVkICpzZSwKPiAgIAo+ICAgCXNlLT5tYXNrID0gbWFzazsKPiAgIAo+ICsJaW5pdF9wcmlv bGlzdCgmc2UtPnF1ZXVlKTsKPiAgIAlJTklUX0xJU1RfSEVBRCgmc2UtPnJlcXVlc3RzKTsKPiAg IAlJTklUX0xJU1RfSEVBRCgmc2UtPmhvbGQpOwo+IC0Jc2UtPnF1ZXVlID0gUkJfUk9PVF9DQUNI RUQ7Cj4gICAKPiAgIAlpbml0X2lwaSgmc2UtPmlwaSk7Cj4gICAKPiBAQCAtMTk0LDggKzIwNiw2 MCBAQCB2b2lkIGk5MTVfc2NoZWRfaW5pdChzdHJ1Y3QgaTkxNV9zY2hlZCAqc2UsCj4gICAJc2Ut PnJldm9rZV9jb250ZXh0ID0gaTkxNV9zY2hlZF9kZWZhdWx0X3Jldm9rZV9jb250ZXh0Owo+ICAg fQo+ICAgCj4gK19fbWF5YmVfdW51c2VkIHN0YXRpYyBib29sIHByaW9saXN0X2lkbGUoc3RydWN0 IGk5MTVfcHJpb2xpc3Rfcm9vdCAqcm9vdCkKPiArewo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3Qg KnBsID0gJnJvb3QtPnNlbnRpbmVsOwo+ICsJaW50IGx2bDsKPiArCj4gKwlmb3IgKGx2bCA9IDA7 IGx2bCA8IEFSUkFZX1NJWkUocGwtPm5leHQpOyBsdmwrKykgewo+ICsJCWlmIChwbC0+bmV4dFts dmxdICE9IHBsKSB7Cj4gKwkJCUdFTV9UUkFDRV9FUlIoInJvb3RbJWRdIGlzIG5vdCBlbXB0eVxu IiwgbHZsKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAocGwt PmxldmVsICE9IC0xKSB7Cj4gKwkJR0VNX1RSQUNFX0VSUigicm9vdCBpcyBub3QgY2xlYXI6ICVk XG4iLCBwbC0+bGV2ZWwpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlyZXR1cm4g dHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgcGxfZW1wdHkoc3RydWN0IGxpc3RfaGVhZCAq c3QpCj4gK3sKPiArCXJldHVybiAhc3QtPnByZXY7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHBs X3B1c2goc3RydWN0IGk5MTVfcHJpb2xpc3QgKnBsLCBzdHJ1Y3QgbGlzdF9oZWFkICpzdCkKPiAr ewo+ICsJLyogS2VlcCBsaXN0X2VtcHR5KCZwbC0+cmVxdWVzdHMpIHZhbGlkIGZvciBjb25jdXJy ZW50IHJlYWRlcnMgKi8KPiArCXBsLT5yZXF1ZXN0cy5wcmV2ID0gc3QtPnByZXY7Cj4gKwlzdC0+ cHJldiA9ICZwbC0+cmVxdWVzdHM7Cj4gKwlHRU1fQlVHX09OKHBsX2VtcHR5KHN0KSk7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGxfcG9wKHN0cnVjdCBsaXN0X2hl YWQgKnN0KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGw7Cj4gKwo+ICsJR0VNX0JV R19PTihwbF9lbXB0eShzdCkpOwo+ICsJcGwgPSBjb250YWluZXJfb2Yoc3QtPnByZXYsIHR5cGVv ZigqcGwpLCByZXF1ZXN0cyk7Cj4gKwlzdC0+cHJldiA9IHBsLT5yZXF1ZXN0cy5wcmV2Owo+ICsK PiArCXJldHVybiBwbDsKPiArfQo+ICsKPiAgIHZvaWQgaTkxNV9zY2hlZF9wYXJrKHN0cnVjdCBp OTE1X3NjaGVkICpzZSkKPiAgIHsKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0X3Jvb3QgKnJvb3Qg PSAmc2UtPnF1ZXVlOwo+ICsJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZyb290LT5zZW50aW5l bC5yZXF1ZXN0czsKPiArCj4gKwlHRU1fQlVHX09OKCFwcmlvbGlzdF9pZGxlKHJvb3QpKTsKPiAr Cj4gKwl3aGlsZSAoIXBsX2VtcHR5KGxpc3QpKQo+ICsJCWttZW1fY2FjaGVfZnJlZShnbG9iYWwu c2xhYl9wcmlvcml0aWVzLCBwbF9wb3AobGlzdCkpOwo+ICsKPiAgIAlHRU1fQlVHX09OKCFpOTE1 X3NjaGVkX2lzX2lkbGUoc2UpKTsKPiAgIAlzZS0+bm9fcHJpb2xpc3QgPSBmYWxzZTsKPiAgIH0K PiBAQCAtMjUxLDcwICszMTUsNzEgQEAgc3RhdGljIGlubGluZSBib29sIG5vZGVfc2lnbmFsZWQo Y29uc3Qgc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSkKPiAgIAlyZXR1cm4gaTkxNV9yZXF1 ZXN0X2NvbXBsZXRlZChub2RlX3RvX3JlcXVlc3Qobm9kZSkpOwo+ICAgfQo+ICAgCj4gLXN0YXRp YyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRvX3ByaW9saXN0KHN0cnVjdCByYl9ub2Rl ICpyYikKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmFuZG9tX2xldmVsKHN0cnVjdCBp OTE1X3ByaW9saXN0X3Jvb3QgKnJvb3QpCj4gICB7Cj4gLQlyZXR1cm4gcmJfZW50cnkocmIsIHN0 cnVjdCBpOTE1X3ByaW9saXN0LCBub2RlKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgYXNzZXJ0 X3ByaW9saXN0cyhzdHJ1Y3QgaTkxNV9zY2hlZCAqIGNvbnN0IHNlKQo+IC17Cj4gLQlzdHJ1Y3Qg cmJfbm9kZSAqcmI7Cj4gLQlsb25nIGxhc3RfcHJpbzsKPiAtCj4gLQlpZiAoIUlTX0VOQUJMRUQo Q09ORklHX0RSTV9JOTE1X0RFQlVHX0dFTSkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCUdFTV9CVUdf T04ocmJfZmlyc3RfY2FjaGVkKCZzZS0+cXVldWUpICE9Cj4gLQkJICAgcmJfZmlyc3QoJnNlLT5x dWV1ZS5yYl9yb290KSk7Cj4gLQo+IC0JbGFzdF9wcmlvID0gSU5UX01BWDsKPiAtCWZvciAocmIg PSByYl9maXJzdF9jYWNoZWQoJnNlLT5xdWV1ZSk7IHJiOyByYiA9IHJiX25leHQocmIpKSB7Cj4g LQkJY29uc3Qgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSB0b19wcmlvbGlzdChyYik7Cj4gLQo+ IC0JCUdFTV9CVUdfT04ocC0+cHJpb3JpdHkgPiBsYXN0X3ByaW8pOwo+IC0JCWxhc3RfcHJpbyA9 IHAtPnByaW9yaXR5Owo+IC0JfQo+ICsJLyoKPiArCSAqIEdpdmVuIGEgdW5pZm9ybSBkaXN0cmli dXRpb24gb2YgcmFuZG9tIG51bWJlcnMgb3ZlciB0aGUgdTMyLCB0aGVuCj4gKwkgKiB0aGUgcHJv YmFiaWxpdHkgZWFjaCBiaXQgYmVpbmcgdW5zZXQgaXMgUD0wLjUuIFRoZSBwcm9iYWJpbGl0eSBv ZiBhCj4gKwkgKiBzdWNjZXNzaXZlIHNlcXVlbmNlIG9mIGJpdHMgYmVpbmcgdW5zZXQgaXMgUChu KSA9IDAuNV5uIFtuID4gMF0uCj4gKwkgKiAgIFAobGV2ZWw6MSkgPSAwLjUKPiArCSAqICAgUChs ZXZlbDoyKSA9IDAuMjUKPiArCSAqICAgUChsZXZlbDozKSA9IDAuMTI1Cj4gKwkgKiAgIFAobGV2 ZWw6NCkgPSAwLjA2MjUKPiArCSAqICAgLi4uCj4gKwkgKiBTbyB3ZSBjYW4gdXNlIGZmcygpIG9u IGEgZ29vZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0byBwaWNrIG91cgo+ICsJICogbGV2ZWwu IFdlIGRpdmlkZSBieSB0d28gdG8gcmVkdWNlIHRoZSBwcm9iYWJpbGl0eSBvZiBjaG9vc2luZyBh Cj4gKwkgKiBsZXZlbCB0byAuMjUsIGFzIHRoZSBjb3N0IG9mIGRlc2NlbmRpbmcgYSBsZXZlbCBp cyB0aGUgc2FtZSBhcwo+ICsJICogZm9sbG93aW5nIGFuIGV4dHJhIGxpbmsgaW4gdGhlIGNoYWlu IGF0IHRoYXQgbGV2ZWwgKHNvIHdlIGNhbgo+ICsJICogcGFjayBtb3JlIG5vZGVzIGludG8gZmV3 ZXIgbGV2ZWxzIHdpdGhvdXQgaW5jdXJyaW5nIGV4dHJhIGNvc3QsCj4gKwkgKiBhbmQgYWxsb3cg c2NhbGluZyB0byBoaWdoZXIgdm9sdW1lcyBvZiByZXF1ZXN0cyB3aXRob3V0IGV4cGFuZGluZwo+ ICsJICogdGhlIGhlaWdodCBvZiB0aGUgc2tpcGxpc3QpLgo+ICsJICovCj4gKwlyb290LT5wcm5n ID0gbmV4dF9wc2V1ZG9fcmFuZG9tMzIocm9vdC0+cHJuZyk7Cj4gKwlyZXR1cm4gIF9fZmZzKHJv b3QtPnBybmcpIC8gMjsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKgo+ ICAgbG9va3VwX3ByaW9saXN0KHN0cnVjdCBpOTE1X3NjaGVkICpzZSwgaW50IHByaW8pCj4gICB7 Cj4gLQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcDsKPiAtCXN0cnVjdCByYl9ub2RlICoqcGFyZW50 LCAqcmI7Cj4gLQlib29sIGZpcnN0ID0gdHJ1ZTsKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0ICp1 cGRhdGVbSTkxNV9QUklPTElTVF9IRUlHSFRdOwo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3Rfcm9v dCAqY29uc3Qgcm9vdCA9ICZzZS0+cXVldWU7Cj4gKwlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGws ICp0bXA7Cj4gKwlpbnQgbHZsOwo+ICAgCj4gICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2UtPmxv Y2spOwo+IC0JYXNzZXJ0X3ByaW9saXN0cyhzZSk7Cj4gLQo+ICAgCWlmICh1bmxpa2VseShzZS0+ bm9fcHJpb2xpc3QpKQo+ICAgCQlwcmlvID0gSTkxNV9QUklPUklUWV9OT1JNQUw7Cj4gICAKPiAr CWZvcl9lYWNoX3ByaW9saXN0KHBsLCByb290KSB7IC8qIHJlY3ljbGUgYW55IGVtcHR5IGVsZW1l bnRzIGJlZm9yZSB1cyAqLwo+ICsJCWlmIChwbC0+cHJpb3JpdHkgPD0gcHJpbyB8fCAhbGlzdF9l bXB0eSgmcGwtPnJlcXVlc3RzKSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCV9faTkxNV9zY2hlZF9k ZXF1ZXVlX25leHQoc2UpOwo+ICsJfQo+ICsKPiAgIGZpbmRfcHJpb2xpc3Q6Cj4gLQkvKiBtb3N0 IHBvc2l0aXZlIHByaW9yaXR5IGlzIHNjaGVkdWxlZCBmaXJzdCwgZXF1YWwgcHJpb3JpdGllcyBm aWZvICovCj4gLQlyYiA9IE5VTEw7Cj4gLQlwYXJlbnQgPSAmc2UtPnF1ZXVlLnJiX3Jvb3QucmJf bm9kZTsKPiAtCXdoaWxlICgqcGFyZW50KSB7Cj4gLQkJcmIgPSAqcGFyZW50Owo+IC0JCXAgPSB0 b19wcmlvbGlzdChyYik7Cj4gLQkJaWYgKHByaW8gPiBwLT5wcmlvcml0eSkgewo+IC0JCQlwYXJl bnQgPSAmcmItPnJiX2xlZnQ7Cj4gLQkJfSBlbHNlIGlmIChwcmlvIDwgcC0+cHJpb3JpdHkpIHsK PiAtCQkJcGFyZW50ID0gJnJiLT5yYl9yaWdodDsKPiAtCQkJZmlyc3QgPSBmYWxzZTsKPiAtCQl9 IGVsc2Ugewo+IC0JCQlyZXR1cm4gJnAtPnJlcXVlc3RzOwo+IC0JCX0KPiArCXBsID0gJnJvb3Qt PnNlbnRpbmVsOwo+ICsJbHZsID0gcGwtPmxldmVsOwo+ICsJd2hpbGUgKGx2bCA+PSAwKSB7Cj4g KwkJd2hpbGUgKHRtcCA9IHBsLT5uZXh0W2x2bF0sIHRtcC0+cHJpb3JpdHkgPj0gcHJpbykKPiAr CQkJcGwgPSB0bXA7Cj4gKwkJaWYgKHBsLT5wcmlvcml0eSA9PSBwcmlvKQo+ICsJCQlnb3RvIG91 dDsKPiArCQl1cGRhdGVbbHZsLS1dID0gcGw7Cj4gICAJfQo+ICAgCj4gICAJaWYgKHByaW8gPT0g STkxNV9QUklPUklUWV9OT1JNQUwpIHsKPiAtCQlwID0gJnNlLT5kZWZhdWx0X3ByaW9saXN0Owo+ ICsJCXBsID0gJnNlLT5kZWZhdWx0X3ByaW9saXN0Owo+ICsJfSBlbHNlIGlmICghcGxfZW1wdHko JnJvb3QtPnNlbnRpbmVsLnJlcXVlc3RzKSkgewo+ICsJCXBsID0gcGxfcG9wKCZyb290LT5zZW50 aW5lbC5yZXF1ZXN0cyk7Cj4gICAJfSBlbHNlIHsKPiAtCQlwID0ga21lbV9jYWNoZV9hbGxvYyhn bG9iYWwuc2xhYl9wcmlvcml0aWVzLCBHRlBfQVRPTUlDKTsKPiArCQlwbCA9IGttZW1fY2FjaGVf YWxsb2MoZ2xvYmFsLnNsYWJfcHJpb3JpdGllcywgR0ZQX0FUT01JQyk7Cj4gICAJCS8qIENvbnZl cnQgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIHRvIGEgcHJpb3JpdHkgYnVtcCAqLwo+IC0JCWlmICh1 bmxpa2VseSghcCkpIHsKPiArCQlpZiAodW5saWtlbHkoIXBsKSkgewo+ICAgCQkJcHJpbyA9IEk5 MTVfUFJJT1JJVFlfTk9STUFMOyAvKiByZWN1cnNlcyBqdXN0IG9uY2UgKi8KPiAgIAo+IC0JCQkv KiBUbyBtYWludGFpbiBvcmRlcmluZyB3aXRoIGFsbCByZW5kZXJpbmcsIGFmdGVyIGFuCj4gKwkJ CS8qCj4gKwkJCSAqIFRvIG1haW50YWluIG9yZGVyaW5nIHdpdGggYWxsIHJlbmRlcmluZywgYWZ0 ZXIgYW4KPiAgIAkJCSAqIGFsbG9jYXRpb24gZmFpbHVyZSB3ZSBoYXZlIHRvIGRpc2FibGUgYWxs IHNjaGVkdWxpbmcuCj4gICAJCQkgKiBSZXF1ZXN0cyB3aWxsIHRoZW4gYmUgZXhlY3V0ZWQgaW4g ZmlmbywgYW5kIHNjaGVkdWxlCj4gICAJCQkgKiB3aWxsIGVuc3VyZSB0aGF0IGRlcGVuZGVuY2ll cyBhcmUgZW1pdHRlZCBpbiBmaWZvLgo+IEBAIC0zMjcsMTggKzM5MiwxMjMgQEAgbG9va3VwX3By aW9saXN0KHN0cnVjdCBpOTE1X3NjaGVkICpzZSwgaW50IHByaW8pCj4gICAJCX0KPiAgIAl9Cj4g ICAKPiAtCXAtPnByaW9yaXR5ID0gcHJpbzsKPiAtCUlOSVRfTElTVF9IRUFEKCZwLT5yZXF1ZXN0 cyk7Cj4gKwlwbC0+cHJpb3JpdHkgPSBwcmlvOwo+ICsJSU5JVF9MSVNUX0hFQUQoJnBsLT5yZXF1 ZXN0cyk7Cj4gICAKPiAtCXJiX2xpbmtfbm9kZSgmcC0+bm9kZSwgcmIsIHBhcmVudCk7Cj4gLQly Yl9pbnNlcnRfY29sb3JfY2FjaGVkKCZwLT5ub2RlLCAmc2UtPnF1ZXVlLCBmaXJzdCk7Cj4gKwls dmwgPSByYW5kb21fbGV2ZWwocm9vdCk7Cj4gKwlpZiAobHZsID4gcm9vdC0+c2VudGluZWwubGV2 ZWwpIHsKPiArCQlpZiAocm9vdC0+c2VudGluZWwubGV2ZWwgPCBJOTE1X1BSSU9MSVNUX0hFSUdI VCAtIDEpIHsKPiArCQkJbHZsID0gKytyb290LT5zZW50aW5lbC5sZXZlbDsKPiArCQkJdXBkYXRl W2x2bF0gPSAmcm9vdC0+c2VudGluZWw7Cj4gKwkJfSBlbHNlIHsKPiArCQkJbHZsID0gSTkxNV9Q UklPTElTVF9IRUlHSFQgLSAxOwo+ICsJCX0KPiArCX0KPiArCUdFTV9CVUdfT04obHZsIDwgMCk7 Cj4gKwlHRU1fQlVHX09OKGx2bCA+PSBBUlJBWV9TSVpFKHBsLT5uZXh0KSk7Cj4gICAKPiAtCXJl dHVybiAmcC0+cmVxdWVzdHM7Cj4gKwlwbC0+bGV2ZWwgPSBsdmw7Cj4gKwlkbyB7Cj4gKwkJdG1w ID0gdXBkYXRlW2x2bF07Cj4gKwkJcGwtPm5leHRbbHZsXSA9IHRtcC0+bmV4dFtsdmxdOwo+ICsJ CXRtcC0+bmV4dFtsdmxdID0gcGw7Cj4gKwl9IHdoaWxlICgtLWx2bCA+PSAwKTsKPiArCj4gKwlp ZiAoSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfREVCVUdfR0VNKSkgewo+ICsJCXN0cnVjdCBp OTE1X3ByaW9saXN0ICpjaGs7Cj4gKwo+ICsJCWNoayA9ICZyb290LT5zZW50aW5lbDsKPiArCQls dmwgPSBjaGstPmxldmVsOwo+ICsJCWRvIHsKPiArCQkJd2hpbGUgKHRtcCA9IGNoay0+bmV4dFts dmxdLCB0bXAtPnByaW9yaXR5ID49IHByaW8pCj4gKwkJCQljaGsgPSB0bXA7Cj4gKwkJfSB3aGls ZSAoLS1sdmwgPj0gMCk7Cj4gKwo+ICsJCUdFTV9CVUdfT04oY2hrICE9IHBsKTsKPiArCX0KPiAr Cj4gK291dDoKPiArCUdFTV9CVUdfT04ocGwgPT0gJnJvb3QtPnNlbnRpbmVsKTsKPiArCXJldHVy biAmcGwtPnJlcXVlc3RzOwo+ICAgfQo+ICAgCj4gLXZvaWQgX19pOTE1X3ByaW9saXN0X2ZyZWUo c3RydWN0IGk5MTVfcHJpb2xpc3QgKnApCj4gK3N0YXRpYyB2b2lkIF9fcmVtb3ZlX3ByaW9saXN0 KHN0cnVjdCBpOTE1X3NjaGVkICpzZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QpCj4gICB7Cj4g LQlrbWVtX2NhY2hlX2ZyZWUoZ2xvYmFsLnNsYWJfcHJpb3JpdGllcywgcCk7Cj4gKwlzdHJ1Y3Qg aTkxNV9wcmlvbGlzdF9yb290ICpyb290ID0gJnNlLT5xdWV1ZTsKPiArCXN0cnVjdCBpOTE1X3By aW9saXN0ICpwbCwgKnRtcDsKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpvbGQgPQo+ICsJCWNv bnRhaW5lcl9vZihwbGlzdCwgc3RydWN0IGk5MTVfcHJpb2xpc3QsIHJlcXVlc3RzKTsKPiArCWlu dCBwcmlvID0gb2xkLT5wcmlvcml0eTsKPiArCWludCBsdmw7Cj4gKwo+ICsJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmc2UtPmxvY2spOwo+ICsJR0VNX0JVR19PTighbGlzdF9lbXB0eShwbGlzdCkpOwo+ ICsKPiArCXBsID0gJnJvb3QtPnNlbnRpbmVsOwo+ICsJbHZsID0gcGwtPmxldmVsOwo+ICsJR0VN X0JVR19PTihsdmwgPCAwKTsKPiArCj4gKwlpZiAocHJpbyAhPSBJOTE1X1BSSU9SSVRZX05PUk1B TCkKPiArCQlwbF9wdXNoKG9sZCwgJnBsLT5yZXF1ZXN0cyk7Cj4gKwo+ICsJZG8gewo+ICsJCXdo aWxlICh0bXAgPSBwbC0+bmV4dFtsdmxdLCB0bXAtPnByaW9yaXR5ID4gcHJpbykKPiArCQkJcGwg PSB0bXA7Cj4gKwkJaWYgKGx2bCA8PSBvbGQtPmxldmVsKSB7Cj4gKwkJCXBsLT5uZXh0W2x2bF0g PSBvbGQtPm5leHRbbHZsXTsKPiArCQkJaWYgKHBsID09ICZyb290LT5zZW50aW5lbCAmJiBvbGQt Pm5leHRbbHZsXSA9PSBwbCkgewo+ICsJCQkJR0VNX0JVR19PTihwbC0+bGV2ZWwgIT0gbHZsKTsK PiArCQkJCXBsLT5sZXZlbC0tOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfSB3aGlsZSAoLS1sdmwgPj0g MCk7Cj4gKwlHRU1fQlVHX09OKHRtcCAhPSBvbGQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBy ZW1vdmVfZnJvbV9wcmlvbGlzdChzdHJ1Y3QgaTkxNV9zY2hlZCAqc2UsCj4gKwkJCQkgc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEsCj4gKwkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKPiArCQkJ CSBib29sIHRhaWwpCj4gK3sKPiArCXN0cnVjdCBsaXN0X2hlYWQgKnByZXYgPSBycS0+c2NoZWQu bGluay5wcmV2OwoKVGhpcyBkZXBlbmRzIG9uIHJxIGJlaW5nIGF0IHRoZSBoZWFkIG9mIGl0J3Mg bGlzdD8KCj4gKwo+ICsJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2luX3ByaW9yaXR5X3F1ZXVl KHJxKSk7Cj4gKwo+ICsJX19saXN0X2RlbF9lbnRyeSgmcnEtPnNjaGVkLmxpbmspOwo+ICsJaWYg KHRhaWwpCj4gKwkJbGlzdF9hZGRfdGFpbCgmcnEtPnNjaGVkLmxpbmssIGxpc3QpOwo+ICsJZWxz ZQo+ICsJCWxpc3RfYWRkKCZycS0+c2NoZWQubGluaywgbGlzdCk7CgpTbyBpdCBpcyBtb3JlIG1v dmUgdGhhbiByZW1vdmUoX2Zyb21fcHJpb2xpc3QpID8KCj4gKwo+ICsJLyogSWYgd2UganVzdCBy ZW1vdmVkIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIG9sZCBwbGlzdCwgZGVsZXRlIGl0ICovCj4g KwlpZiAobGlzdF9lbXB0eShwcmV2KSkKPiArCQlfX3JlbW92ZV9wcmlvbGlzdChzZSwgcHJldik7 Cj4gK30KPiArCj4gK3N0cnVjdCBpOTE1X3ByaW9saXN0ICpfX2k5MTVfc2NoZWRfZGVxdWV1ZV9u ZXh0KHN0cnVjdCBpOTE1X3NjaGVkICpzZSkKPiArewo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3Qg KiBjb25zdCBzID0gJnNlLT5xdWV1ZS5zZW50aW5lbDsKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0 ICpwbCA9IHMtPm5leHRbMF07Cj4gKwlpbnQgbHZsOwo+ICsKPiArCUdFTV9CVUdfT04oIWxpc3Rf ZW1wdHkoJnBsLT5yZXF1ZXN0cykpOwoKTG9zdCBhcyB0byB3aHkgcGwtPnJlcXVlc3RzIGhhcyB0 byBiZSBlbXB0eSBhdCB0aGlzIHBvaW50LiBDb25zaWRlcmluZzoKCisjZGVmaW5lIGk5MTVfc2No ZWRfZGVxdWV1ZShzZSwgcGwsIHJxLCBybikgXAorCWZvciAoKHBsKSA9IChzZSktPnF1ZXVlLnNl bnRpbmVsLm5leHRbMF07IFwKKwkgICAgIChwbCkgIT0gJihzZSktPnF1ZXVlLnNlbnRpbmVsOyBc CisJICAgICAocGwpID0gX19pOTE1X3NjaGVkX2RlcXVldWVfbmV4dChzZSkpIFwKKwkJcHJpb2xp c3RfZm9yX2VhY2hfcmVxdWVzdF9zYWZlKHJxLCBybiwgcGwpCisKCkkgYWxzbyBkb24ndCB1bmRl cnN0YW5kIHdoYXQgaXQgd291bGQgZGUtcXVldWUuIFdob2xlIHByaW9saXN0IHdvdGggb2YgCnJl cXVlc3RzIGF0IGEgdGltZT8gQnV0IGl0IGNhbid0IGJlIGVtcHR5IHRvIGRlcXVldWUgc29tZXRo aW5nLiBBbmQgd2hvIApwdXRzIGFueSB1bmNvbnN1bWVkIHJlcXVlc3RzIGJhY2sgb24gc29tZXdo ZXJlIGluIHRoaXMgY2FzZS4KClJlZ2FyZHMsCgpUdnJ0a28KCj4gKwlHRU1fQlVHX09OKHBsID09 IHMpOwo+ICsKPiArCS8qIEtlZXAgcGwtPm5leHRbMF0gdmFsaWQgZm9yIGZvcl9lYWNoX3ByaW9s aXN0IGl0ZXJhdGlvbiAqLwo+ICsJaWYgKHBsLT5wcmlvcml0eSAhPSBJOTE1X1BSSU9SSVRZX05P Uk1BTCkKPiArCQlwbF9wdXNoKHBsLCAmcy0+cmVxdWVzdHMpOwo+ICsKPiArCWx2bCA9IHBsLT5s ZXZlbDsKPiArCUdFTV9CVUdfT04obHZsIDwgMCk7Cj4gKwlkbyB7Cj4gKwkJcy0+bmV4dFtsdmxd ID0gcGwtPm5leHRbbHZsXTsKPiArCQlpZiAocGwtPm5leHRbbHZsXSA9PSBzKSB7Cj4gKwkJCUdF TV9CVUdfT04ocy0+bGV2ZWwgIT0gbHZsKTsKPiArCQkJcy0+bGV2ZWwtLTsKPiArCQl9Cj4gKwl9 IHdoaWxlICgtLWx2bCA+PSAwKTsKPiArCj4gKwlyZXR1cm4gcGwtPm5leHRbMF07Cj4gICB9Cj4g ICAKPiAgIHN0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKPiBAQCAtNDkxLDcgKzY2MSw3IEBA IHN0YXRpYyB2b2lkIF9faTkxNV9yZXF1ZXN0X3NldF9wcmlvcml0eShzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSwgaW50IHByaW8pCj4gICAKPiAgIAkJR0VNX0JVR19PTihycS0+ZW5naW5lICE9IGVu Z2luZSk7Cj4gICAJCWlmIChpOTE1X3JlcXVlc3RfaW5fcHJpb3JpdHlfcXVldWUocnEpKQo+IC0J CQlsaXN0X21vdmVfdGFpbCgmcnEtPnNjaGVkLmxpbmssIHBsaXN0KTsKPiArCQkJcmVtb3ZlX2Zy b21fcHJpb2xpc3Qoc2UsIHJxLCBwbGlzdCwgdHJ1ZSk7Cj4gICAKPiAgIAkJLyogRGVmZXIgKHRh c2tsZXQpIHN1Ym1pc3Npb24gdW50aWwgYWZ0ZXIgYWxsIHVwZGF0ZXMuICovCj4gICAJCWtpY2tf c3VibWlzc2lvbihlbmdpbmUsIHJxLCBwcmlvKTsKPiBAQCAtNjI3LDggKzc5Nyw3IEBAIHZvaWQg X19pOTE1X3NjaGVkX2RlZmVyX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAo+ICAgCj4gICAJCS8qIE5vdGUgbGlzdCBpcyByZXZlcnNlZCBmb3Igd2FpdGVycyB3cnQgc2ln bmFsIGhpZXJhcmNoeSAqLwo+ICAgCQlHRU1fQlVHX09OKHJxLT5lbmdpbmUgIT0gZW5naW5lKTsK PiAtCQlHRU1fQlVHX09OKCFpOTE1X3JlcXVlc3RfaW5fcHJpb3JpdHlfcXVldWUocnEpKTsKPiAt CQlsaXN0X21vdmUoJnJxLT5zY2hlZC5saW5rLCAmZGZzKTsKPiArCQlyZW1vdmVfZnJvbV9wcmlv bGlzdChzZSwgcnEsICZkZnMsIGZhbHNlKTsKPiAgIAo+ICAgCQkvKiBUcmFjayBvdXIgdmlzaXQs IGFuZCBwcmV2ZW50IGR1cGxpY2F0ZSBwcm9jZXNzaW5nICovCj4gICAJCWNsZWFyX2JpdChJOTE1 X0ZFTkNFX0ZMQUdfUFFVRVVFLCAmcnEtPmZlbmNlLmZsYWdzKTsKPiBAQCAtOTI3LDcgKzEwOTYs NyBAQCB2b2lkIGk5MTVfc2NoZWRfcmVzdW1lX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLAo+ICAgdm9pZCBfX2k5MTVfc2NoZWRfY2FuY2VsX3F1ZXVlKHN0cnVjdCBpOTE1 X3NjaGVkICpzZSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgKnJuOwo+IC0J c3RydWN0IHJiX25vZGUgKnJiOwo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnBsOwo+ICAgCj4g ICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2UtPmxvY2spOwo+ICAgCj4gQEAgLTkzNiwxNiArMTEw NSw5IEBAIHZvaWQgX19pOTE1X3NjaGVkX2NhbmNlbF9xdWV1ZShzdHJ1Y3QgaTkxNV9zY2hlZCAq c2UpCj4gICAJCWk5MTVfcmVxdWVzdF9wdXQoaTkxNV9yZXF1ZXN0X21hcmtfZWlvKHJxKSk7Cj4g ICAKPiAgIAkvKiBGbHVzaCB0aGUgcXVldWVkIHJlcXVlc3RzIHRvIHRoZSB0aW1lbGluZSBsaXN0 IChmb3IgcmV0aXJpbmcpLiAqLwo+IC0Jd2hpbGUgKChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmc2Ut PnF1ZXVlKSkpIHsKPiAtCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9IHRvX3ByaW9saXN0KHJi KTsKPiAtCj4gLQkJcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdF9jb25zdW1lKHJxLCBybiwgcCkg ewo+IC0JCQlpOTE1X3JlcXVlc3RfcHV0KGk5MTVfcmVxdWVzdF9tYXJrX2VpbyhycSkpOwo+IC0J CQlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpOwo+IC0JCX0KPiAtCj4gLQkJcmJfZXJhc2VfY2Fj aGVkKCZwLT5ub2RlLCAmc2UtPnF1ZXVlKTsKPiAtCQlpOTE1X3ByaW9saXN0X2ZyZWUocCk7Cj4g KwlpOTE1X3NjaGVkX2RlcXVldWUoc2UsIHBsLCBycSwgcm4pIHsKPiArCQlpOTE1X3JlcXVlc3Rf cHV0KGk5MTVfcmVxdWVzdF9tYXJrX2VpbyhycSkpOwo+ICsJCV9faTkxNV9yZXF1ZXN0X3N1Ym1p dChycSk7Cj4gICAJfQo+ICAgCUdFTV9CVUdfT04oIWk5MTVfc2NoZWRfaXNfaWRsZShzZSkpOwo+ ICAgCj4gQEAgLTEyMjUsOSArMTM4Nyw5IEBAIHZvaWQgaTkxNV9zY2hlZF9zaG93KHN0cnVjdCBk cm1fcHJpbnRlciAqbSwKPiAgIAkJICAgICB1bnNpZ25lZCBpbnQgbWF4KQo+ICAgewo+ICAgCWNv bnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqbGFzdDsKPiArCXN0cnVjdCBpOTE1X3ByaW9s aXN0ICpwbDsKPiAgIAl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAgCXVuc2lnbmVkIGludCBjb3Vu dDsKPiAtCXN0cnVjdCByYl9ub2RlICpyYjsKPiAgIAo+ICAgCXJjdV9yZWFkX2xvY2soKTsKPiAg IAlzcGluX2xvY2tfaXJxc2F2ZSgmc2UtPmxvY2ssIGZsYWdzKTsKPiBAQCAtMTI4MiwxMCArMTQ0 NCw4IEBAIHZvaWQgaTkxNV9zY2hlZF9zaG93KHN0cnVjdCBkcm1fcHJpbnRlciAqbSwKPiAgIAo+ ICAgCWxhc3QgPSBOVUxMOwo+ICAgCWNvdW50ID0gMDsKPiAtCWZvciAocmIgPSByYl9maXJzdF9j YWNoZWQoJnNlLT5xdWV1ZSk7IHJiOyByYiA9IHJiX25leHQocmIpKSB7Cj4gLQkJc3RydWN0IGk5 MTVfcHJpb2xpc3QgKnAgPSByYl9lbnRyeShyYiwgdHlwZW9mKCpwKSwgbm9kZSk7Cj4gLQo+IC0J CXByaW9saXN0X2Zvcl9lYWNoX3JlcXVlc3QocnEsIHApIHsKPiArCWZvcl9lYWNoX3ByaW9saXN0 KHBsLCAmc2UtPnF1ZXVlKSB7Cj4gKwkJcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdChycSwgcGwp IHsKPiAgIAkJCWlmIChjb3VudCsrIDwgbWF4IC0gMSkKPiAgIAkJCQlzaG93X3JlcXVlc3QobSwg cnEsICJcdCIsIDApOwo+ICAgCQkJZWxzZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3NjaGVkdWxlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVs ZXIuaAo+IGluZGV4IGZlMzkyMTA5YjExMi4uODcyZDIyMWY2YmE3IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oCj4gQEAgLTI0LDEyICsyNCw2IEBAIHN0cnVjdCBpbnRl bF9lbmdpbmVfY3M7Cj4gICAJCSAgIyNfX1ZBX0FSR1NfXyk7CQkJCQlcCj4gICB9IHdoaWxlICgw KQo+ICAgCj4gLSNkZWZpbmUgcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdChpdCwgcGxpc3QpIFwK PiAtCWxpc3RfZm9yX2VhY2hfZW50cnkoaXQsICYocGxpc3QpLT5yZXF1ZXN0cywgc2NoZWQubGlu aykKPiAtCj4gLSNkZWZpbmUgcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdF9jb25zdW1lKGl0LCBu LCBwbGlzdCkgXAo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0LCBuLCAmKHBsaXN0KS0+ cmVxdWVzdHMsIHNjaGVkLmxpbmspCj4gLQo+ICAgdm9pZCBpOTE1X3NjaGVkX25vZGVfaW5pdChz dHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlKTsKPiAgIHZvaWQgaTkxNV9zY2hlZF9ub2RlX3Jl aW5pdChzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlKTsKPiAgIAo+IEBAIC0xMDAsNyArOTQs NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wcmlvbGlzdF9mcmVlKHN0cnVjdCBpOTE1X3By aW9saXN0ICpwKQo+ICAgCj4gICBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9zY2hlZF9pc19pZGxl KGNvbnN0IHN0cnVjdCBpOTE1X3NjaGVkICpzZSkKPiAgIHsKPiAtCXJldHVybiBSQl9FTVBUWV9S T09UKCZzZS0+cXVldWUucmJfcm9vdCk7Cj4gKwlyZXR1cm4gaTkxNV9wcmlvbGlzdF9pc19lbXB0 eSgmc2UtPnF1ZXVlKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGlubGluZSBib29sCj4gQEAgLTE2 OCw2ICsxNjIsMTQgQEAgaTkxNV9zY2hlZF9nZXRfYWN0aXZlX3JlcXVlc3QoY29uc3Qgc3RydWN0 IGk5MTVfc2NoZWQgKnNlKQo+ICAgCXJldHVybiBOVUxMOwo+ICAgfQo+ICAgCj4gKy8qIFdhbGsg dGhlIHNjaGVkdWxlciBxdWV1ZSBvZiByZXF1ZXN0cyAoaW4gc3VibWlzc2lvbiBvcmRlcikgYW5k IHJlbW92ZSB0aGVtICovCj4gK3N0cnVjdCBpOTE1X3ByaW9saXN0ICpfX2k5MTVfc2NoZWRfZGVx dWV1ZV9uZXh0KHN0cnVjdCBpOTE1X3NjaGVkICpzZSk7Cj4gKyNkZWZpbmUgaTkxNV9zY2hlZF9k ZXF1ZXVlKHNlLCBwbCwgcnEsIHJuKSBcCj4gKwlmb3IgKChwbCkgPSAoc2UpLT5xdWV1ZS5zZW50 aW5lbC5uZXh0WzBdOyBcCj4gKwkgICAgIChwbCkgIT0gJihzZSktPnF1ZXVlLnNlbnRpbmVsOyBc Cj4gKwkgICAgIChwbCkgPSBfX2k5MTVfc2NoZWRfZGVxdWV1ZV9uZXh0KHNlKSkgXAo+ICsJCXBy aW9saXN0X2Zvcl9lYWNoX3JlcXVlc3Rfc2FmZShycSwgcm4sIHBsKQo+ICsKPiAgIHZvaWQgaTkx NV9yZXF1ZXN0X3Nob3dfd2l0aF9zY2hlZHVsZShzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0sCj4gICAJ CQkJICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgIAkJCQkgICAgIGNvbnN0 IGNoYXIgKnByZWZpeCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9z Y2hlZHVsZXJfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyX3R5 cGVzLmgKPiBpbmRleCA1Y2EyZGMxYjRmYjUuLmJjNjY4ZjM3NTA5NyAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlcl90eXBlcy5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXJfdHlwZXMuaAo+IEBAIC0xMTUsNyArMTE1LDcg QEAgc3RydWN0IGk5MTVfc2NoZWQgewo+ICAgCSAqIEBxdWV1ZSBpcyBvbmx5IHVzZWQgdG8gdHJh bnNmZXIgcmVxdWVzdHMgZnJvbSB0aGUgc2NoZWR1bGVyCj4gICAJICogZnJvbnRlbmQgdG8gdGhl IGJhY2suCj4gICAJICovCj4gLQlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgcXVldWU7Cj4gKwlzdHJ1 Y3QgaTkxNV9wcmlvbGlzdF9yb290IHF1ZXVlOwo+ICAgCj4gICAJLyoqCj4gICAJICogQHRhc2ts ZXQ6IHNvZnRpcnEgdGFza2xldCBmb3IgYm90dG9tIGhhbGYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKPiBpbmRleCAzZGIz NGQzZWVhNTguLjk0NmM5MzQ0MWMxZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAo+IEBAIC0yNSw2ICsyNSw3IEBA IHNlbGZ0ZXN0KHJpbmcsIGludGVsX3JpbmdfbW9ja19zZWxmdGVzdHMpCj4gICBzZWxmdGVzdChl bmdpbmUsIGludGVsX2VuZ2luZV9jc19tb2NrX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KHRpbWVs aW5lcywgaW50ZWxfdGltZWxpbmVfbW9ja19zZWxmdGVzdHMpCj4gICBzZWxmdGVzdChyZXF1ZXN0 cywgaTkxNV9yZXF1ZXN0X21vY2tfc2VsZnRlc3RzKQo+ICtzZWxmdGVzdChzY2hlZHVsZXIsIGk5 MTVfc2NoZWR1bGVyX21vY2tfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3Qob2JqZWN0cywgaTkxNV9n ZW1fb2JqZWN0X21vY2tfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3QocGh5cywgaTkxNV9nZW1fcGh5 c19tb2NrX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1fZG1hYnVmX21v Y2tfc2VsZnRlc3RzKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1 X3NjaGVkdWxlci5jCj4gaW5kZXggZjU0YmRiZWFhNDhiLi4yYmIyZDNkMDdkMDYgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfc2NoZWR1bGVyLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9zY2hlZHVsZXIuYwo+IEBA IC0xMiw2ICsxMiw1NCBAQAo+ICAgI2luY2x1ZGUgInNlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5oIgo+ ICAgI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X3JhbmRvbS5oIgo+ICAgCj4gK3N0YXRpYyBpbnQg bW9ja19za2lwbGlzdF9sZXZlbHModm9pZCAqZHVtbXkpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3By aW9saXN0X3Jvb3Qgcm9vdCA9IHt9Owo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnBsID0gJnJv b3Quc2VudGluZWw7Cj4gKwlJR1RfVElNRU9VVChlbmRfdGltZSk7Cj4gKwl1bnNpZ25lZCBsb25n IHRvdGFsOwo+ICsJaW50IGNvdW50LCBsdmw7Cj4gKwo+ICsJdG90YWwgPSAwOwo+ICsJZG8gewo+ ICsJCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDE2Mzg0OyBjb3VudCsrKSB7Cj4gKwkJCWx2bCA9 IHJhbmRvbV9sZXZlbCgmcm9vdCk7Cj4gKwkJCWlmIChsdmwgPiBwbC0+bGV2ZWwpIHsKPiArCQkJ CWlmIChsdmwgPCBJOTE1X1BSSU9MSVNUX0hFSUdIVCAtIDEpCj4gKwkJCQkJbHZsID0gKytwbC0+ bGV2ZWw7Cj4gKwkJCQllbHNlCj4gKwkJCQkJbHZsID0gSTkxNV9QUklPTElTVF9IRUlHSFQgLSAx Owo+ICsJCQl9Cj4gKwo+ICsJCQlwbC0+bmV4dFtsdmxdID0gcHRyX2luYyhwbC0+bmV4dFtsdmxd KTsKPiArCQl9Cj4gKwkJdG90YWwgKz0gY291bnQ7Cj4gKwl9IHdoaWxlICghX19pZ3RfdGltZW91 dChlbmRfdGltZSwgTlVMTCkpOwo+ICsKPiArCXByX2luZm8oIlRvdGFsICU5bHVcbiIsIHRvdGFs KTsKPiArCWZvciAobHZsID0gMDsgbHZsIDw9IHBsLT5sZXZlbDsgbHZsKyspIHsKPiArCQlpbnQg eCA9IGlsb2cyKCh1bnNpZ25lZCBsb25nKXBsLT5uZXh0W2x2bF0pOwo+ICsJCWNoYXIgcm93Wzgw XTsKPiArCj4gKwkJbWVtc2V0KHJvdywgJyonLCB4KTsKPiArCQlyb3dbeF0gPSAnXDAnOwo+ICsK PiArCQlwcl9pbmZvKCIgWyUyZF0gJTlsdSAlc1xuIiwKPiArCQkJbHZsLCAodW5zaWduZWQgbG9u ZylwbC0+bmV4dFtsdmxdLCByb3cpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtpbnQgaTkxNV9zY2hlZHVsZXJfbW9ja19zZWxmdGVzdHModm9pZCkKPiArewo+ICsJc3RhdGlj IGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKPiArCQlTVUJURVNUKG1vY2tf c2tpcGxpc3RfbGV2ZWxzKSwKPiArCX07Cj4gKwo+ICsJcmV0dXJuIGk5MTVfc3VidGVzdHModGVz dHMsIE5VTEwpOwo+ICt9Cj4gKwo+ICAgc3RhdGljIHZvaWQgc2NoZWR1bGluZ19kaXNhYmxlKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAgIAllbmdpbmUtPnByb3BzLnBy ZWVtcHRfdGltZW91dF9tcyA9IDA7Cj4gQEAgLTgwLDkgKzEyOCw5IEBAIHN0YXRpYyBpbnQgYWxs X2VuZ2luZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICBzdGF0aWMgYm9vbCBj aGVja19jb250ZXh0X29yZGVyKHN0cnVjdCBpOTE1X3NjaGVkICpzZSkKPiAgIHsKPiAgIAl1NjQg bGFzdF9zZXFubywgbGFzdF9jb250ZXh0Owo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnA7Cj4g ICAJdW5zaWduZWQgbG9uZyBjb3VudDsKPiAgIAlib29sIHJlc3VsdCA9IGZhbHNlOwo+IC0Jc3Ry dWN0IHJiX25vZGUgKnJiOwo+ICAgCWludCBsYXN0X3ByaW87Cj4gICAKPiAgIAkvKiBXZSBleHBl Y3QgdGhlIGV4ZWN1dGlvbiBvcmRlciB0byBmb2xsb3cgYXNjZW5kaW5nIGZlbmNlLWNvbnRleHQg Ki8KPiBAQCAtOTIsOCArMTQwLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfY29udGV4dF9vcmRlcihz dHJ1Y3QgaTkxNV9zY2hlZCAqc2UpCj4gICAJbGFzdF9jb250ZXh0ID0gMDsKPiAgIAlsYXN0X3Nl cW5vID0gMDsKPiAgIAlsYXN0X3ByaW8gPSAwOwo+IC0JZm9yIChyYiA9IHJiX2ZpcnN0X2NhY2hl ZCgmc2UtPnF1ZXVlKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKPiAtCQlzdHJ1Y3QgaTkxNV9w cmlvbGlzdCAqcCA9IHJiX2VudHJ5KHJiLCB0eXBlb2YoKnApLCBub2RlKTsKPiArCWZvcl9lYWNo X3ByaW9saXN0KHAsICZzZS0+cXVldWUpIHsKPiAgIAkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7 Cj4gICAKPiAgIAkJcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdChycSwgcCkgewo+IApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK