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=-11.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=unavailable 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 19138C433E7 for ; Fri, 16 Oct 2020 12:20:04 +0000 (UTC) Received: from silver.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 mail.kernel.org (Postfix) with ESMTPS id 7450820708 for ; Fri, 16 Oct 2020 12:20:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7450820708 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 8621D2E78B; Fri, 16 Oct 2020 12:20:02 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id b9nnZyxGHK6M; Fri, 16 Oct 2020 12:19:52 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 463CE20447; Fri, 16 Oct 2020 12:19:52 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 22A9FC07FF; Fri, 16 Oct 2020 12:19:52 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id C525DC0051 for ; Fri, 16 Oct 2020 12:19:50 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id A20D52E786 for ; Fri, 16 Oct 2020 12:19:50 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HmKg+sKNA7DE for ; Fri, 16 Oct 2020 12:19:48 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by silver.osuosl.org (Postfix) with ESMTPS id AC70920447 for ; Fri, 16 Oct 2020 12:19:47 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 6C85AAFAB; Fri, 16 Oct 2020 12:19:45 +0000 (UTC) Date: Fri, 16 Oct 2020 14:19:42 +0200 From: Thomas Zimmermann To: Sam Ravnborg Subject: Re: [PATCH v4 10/10] drm/fb_helper: Support framebuffers in I/O memory Message-ID: <20201016141942.111e17f3@linux-uq9g> In-Reply-To: <20201016120347.GB1125266@ravnborg.org> References: <20201015123806.32416-1-tzimmermann@suse.de> <20201015123806.32416-11-tzimmermann@suse.de> <20201016120347.GB1125266@ravnborg.org> Organization: SUSE Software Solutions Germany GmbH X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-suse-linux-gnu) MIME-Version: 1.0 Cc: luben.tuikov@amd.com, heiko@sntech.de, airlied@linux.ie, nouveau@lists.freedesktop.org, linus.walleij@linaro.org, dri-devel@lists.freedesktop.org, chris@chris-wilson.co.uk, melissa.srw@gmail.com, eric@anholt.net, ray.huang@amd.com, sumit.semwal@linaro.org, emil.velikov@collabora.com, robh@kernel.org, linux-samsung-soc@vger.kernel.org, jy0922.shim@samsung.com, lima@lists.freedesktop.org, oleksandr_andrushchenko@epam.com, krzk@kernel.org, steven.price@arm.com, linux-rockchip@lists.infradead.org, kgene@kernel.org, alyssa.rosenzweig@collabora.com, linux+etnaviv@armlinux.org.uk, spice-devel@lists.freedesktop.org, bskeggs@redhat.com, maarten.lankhorst@linux.intel.com, etnaviv@lists.freedesktop.org, mripard@kernel.org, inki.dae@samsung.com, hdegoede@redhat.com, christian.gmeiner@gmail.com, xen-devel@lists.xenproject.org, virtualization@lists.linux-foundation.org, sean@poorly.run, apaneers@amd.com, linux-arm-kernel@lists.infradead.org, linaro-mm-sig@lists.linaro.org, amd-gfx@lists.freedesktop.org, tomeu.vizoso@collabora.com, sw0312.kim@samsung.com, hjc@rock-chips.com, kyungmin.park@samsung.com, miaoqinglang@huawei.com, yuq825@gmail.com, daniel@ffwll.ch, alexander.deucher@amd.com, linux-media@vger.kernel.org, christian.koenig@amd.com, l.stach@pengutronix.de X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" SGkKCk9uIEZyaSwgMTYgT2N0IDIwMjAgMTQ6MDM6NDcgKzAyMDAgU2FtIFJhdm5ib3JnIDxzYW1A cmF2bmJvcmcub3JnPiB3cm90ZToKCj4gSGkgVGhvbWFzLgo+IAo+IE9uIFRodSwgT2N0IDE1LCAy MDIwIGF0IDAyOjM4OjA2UE0gKzAyMDAsIFRob21hcyBaaW1tZXJtYW5uIHdyb3RlOgo+ID4gQXQg bGVhc3Qgc3BhcmM2NCByZXF1aXJlcyBJL08tc3BlY2lmaWMgYWNjZXNzIHRvIGZyYW1lYnVmZmVy cy4gVGhpcwo+ID4gcGF0Y2ggdXBkYXRlcyB0aGUgZmJkZXYgY29uc29sZSBhY2NvcmRpbmdseS4K PiA+IAo+ID4gRm9yIGRyaXZlcnMgd2l0aCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBmcmFtZWJ1ZmZl ciBtZW1vcnksIHRoZSBjYWxsYmFjawo+ID4gZnVuY3Rpb25zIGluIHN0cnVjdCBmYl9vcHMgdGVz dCBmb3IgdGhlIHR5cGUgb2YgbWVtb3J5IGFuZCBjYWxsIHRoZSByc3AKPiA+IGZiX3N5c18gb2Yg ZmJfY2ZiXyBmdW5jdGlvbnMuCj4gPiAKPiA+IEZvciBkcml2ZXJzIHRoYXQgZW1wbG95IGEgc2hh ZG93IGJ1ZmZlciwgZmJkZXYncyBibGl0IGZ1bmN0aW9uIHJldHJpZXZlcwo+ID4gdGhlIGZyYW1l YnVmZmVyIGFkZHJlc3MgYXMgc3RydWN0IGRtYV9idWZfbWFwLCBhbmQgdXNlcyBkbWFfYnVmX21h cAo+ID4gaW50ZXJmYWNlcyB0byBhY2Nlc3MgdGhlIGJ1ZmZlci4KPiA+IAo+ID4gVGhlIGJvY2hz IGRyaXZlciBvbiBzcGFyYzY0IHVzZXMgYSB3b3JrYXJvdW5kIHRvIGZsYWcgdGhlIGZyYW1lYnVm ZmVyIGFzCj4gPiBJL08gbWVtb3J5IGFuZCBhdm9pZCBhIEhXIGV4Y2VwdGlvbi4gV2l0aCB0aGUg aW50cm9kdWN0aW9uIG9mIHN0cnVjdAo+ID4gZG1hX2J1Zl9tYXAsIHRoaXMgaXMgbm90IHJlcXVp cmVkIGFueSBsb25nZXIuIFRoZSBwYXRjaCByZW1vdmVzIHRoZSByc3AKPiA+IGNvZGUgZnJvbSBi b3RoLCBib2NocyBhbmQgZmJkZXYuCj4gPiAKPiA+IHY0Ogo+ID4gCSogbW92ZSBkbWFfYnVmX21h cCBjaGFuZ2VzIGludG8gc2VwYXJhdGUgcGF0Y2ggKERhbmllbCkKPiA+IAkqIFRPRE8gbGlzdDog Y29tbWVudCBvbiBmYmRldiB1cGRhdGVzIChEYW5pZWwpCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6 IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgo+IAo+IFRoZSBvcmlnaW5h bCB3b3JrYXJvdW5kIGZpeGVkIGl0IHNvIHdlIGNvdWxkIHJ1biBxZW11IHdpdGggdGhlCj4gLW5v Z3JhcGhpYyBvcHRpb24uCj4gCj4gU28gSSB3ZW50IGFoZWFkIGFuZCB0cmllZCB0byBydW4gcXVl bXUgdmVyc2lvbjoKPiB2NS4wLjAtMTk3MC1nMGIxMDBjOGU3Mi1kaXJ0eS4KPiBBbmQgd2l0aCB0 aGUgQk9DSFMgZHJpdmVyIGJ1aWx0LWluLgo+IAo+IFdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5k IGxpbmU6Cj4gcWVtdS1zeXN0ZW0tc3BhcmM2NCAtbSA1MTIgLWtlcm5lbCB2bWxpbnV4IC1hcHBl bmQgY29uc29sZT10dHlTMCAtbm9ncmFwaGljCj4gCj4gQmVoYXZpb3VyIHdhcyB0aGUgc2FtZSBi ZWZvcmUgYW5kIGFmdGVyIGFwcGx5aW5nIHRoaXMgcGF0Y2guCj4gKHBhbmljIGR1ZSB0byBWRlM6 IFVuYWJsZSB0byBtb3VudCByb290IGZzIG9uIHVua25vd24tYmxvY2soMCwwKSkKPiBTbyBJIGNv bnNpZGVyIGl0IGZpeGVkIGZvciByZWFsIG5vdyBhbmQgbm90IGp1c3QgYSB3b3JrYXJvdW5kLgo+ IAo+IEkgYWxzbyB0ZXN0ZWQgd2l0aDoKPiBxZW11LXN5c3RlbS1zcGFyYzY0IC1tIDUxMiAta2Vy bmVsIHZtbGludXggLWFwcGVuZCBjb25zb2xlPXR0eVMwIC1zZXJpYWwKPiBzdGRpbwo+IAo+IGFu ZCBpdCB3b3JrZWQgaW4gYm90aCBjYXNlcyB0b28uCgpGVFIsIHlvdSBib290ZWQgYSBrZXJuZWwg YW5kIGdvdCBncmFwaGljcyBvdXRwdXQuIFRoZSBlcnJvciBpcyBzaW1wbHkgdGhhdAp0aGVyZSB3 YXMgbm8gZGlzayB0byBtb3VudD8KCkJlc3QgcmVnYXJkcwpUaG9tYXMKCj4gCj4gQWxsIHRoZSBj b21tZW50cyBhYm92ZSBzbyBmdXR1cmUtbWUgaGF2ZSBhbiBlYXNpZXIgdGltZSBmaW5kaW5nIGhv dyB0bwo+IHJlcHJvZHVjZS4KPiAKPiBUZXN0ZWQtYnk6IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5i b3JnLm9yZz4KPiAKPiAJU2FtCj4gCj4gPiAtLS0KPiA+ICBEb2N1bWVudGF0aW9uL2dwdS90b2Rv LnJzdCAgICAgICAgfCAgMTkgKystCj4gPiAgZHJpdmVycy9ncHUvZHJtL2JvY2hzL2JvY2hzX2tt cy5jIHwgICAxIC0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jICAgfCAyMTcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCj4gPiAgaW5jbHVkZS9kcm0vZHJtX21vZGVf Y29uZmlnLmggICAgIHwgIDEyIC0tCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAyMjAgaW5zZXJ0aW9u cygrKSwgMjkgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9u L2dwdS90b2RvLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L3RvZG8ucnN0Cj4gPiBpbmRleCA3ZTZm YzNjMDRhZGQuLjYzOGI3ZjcwNDMzOSAxMDA2NDQKPiA+IC0tLSBhL0RvY3VtZW50YXRpb24vZ3B1 L3RvZG8ucnN0Cj4gPiArKysgYi9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdAo+ID4gQEAgLTE5 NywxMyArMTk3LDI4IEBAIENvbnZlcnQgZHJpdmVycyB0byB1c2UgZHJtX2ZiZGV2X2dlbmVyaWNf c2V0dXAoKQo+ID4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+ID4gIAo+ID4gIE1vc3QgZHJpdmVycyBjYW4gdXNlIGRybV9mYmRldl9nZW5lcmljX3Nl dHVwKCkuIERyaXZlciBoYXZlIHRvIGltcGxlbWVudAo+ID4gLWF0b21pYyBtb2Rlc2V0dGluZyBh bmQgR0VNIHZtYXAgc3VwcG9ydC4gQ3VycmVudCBnZW5lcmljIGZiZGV2IGVtdWxhdGlvbgo+ID4g LWV4cGVjdHMgdGhlIGZyYW1lYnVmZmVyIGluIHN5c3RlbSBtZW1vcnkgKG9yIHN5c3RlbS1saWtl IG1lbW9yeSkuCj4gPiArYXRvbWljIG1vZGVzZXR0aW5nIGFuZCBHRU0gdm1hcCBzdXBwb3J0LiBI aXN0b3JpY2FsbHksIGdlbmVyaWMgZmJkZXYKPiA+IGVtdWxhdGlvbiArZXhwZWN0ZWQgdGhlIGZy YW1lYnVmZmVyIGluIHN5c3RlbSBtZW1vcnkgb3Igc3lzdGVtLWxpa2UKPiA+IG1lbW9yeS4gQnkg ZW1wbG95aW5nICtzdHJ1Y3QgZG1hX2J1Zl9tYXAsIGRyaXZlcnMgd2l0aCBmcmFtYnVmZmVycyBp biBJL08KPiA+IG1lbW9yeSBjYW4gYmUgc3VwcG9ydGVkICthcyB3ZWxsLgo+ID4gIAo+ID4gIENv bnRhY3Q6IE1haW50YWluZXIgb2YgdGhlIGRyaXZlciB5b3UgcGxhbiB0byBjb252ZXJ0Cj4gPiAg Cj4gPiAgTGV2ZWw6IEludGVybWVkaWF0ZQo+ID4gIAo+ID4gK1JlaW1wbGVtZW50IGZ1bmN0aW9u cyBpbiBkcm1fZmJkZXZfZmJfb3BzIHdpdGhvdXQgZmJkZXYKPiA+ICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiArCj4gPiArQSBudW1i ZXIgb2YgY2FsbGJhY2sgZnVuY3Rpb25zIGluIGRybV9mYmRldl9mYl9vcHMgY291bGQgYmVuZWZp dCBmcm9tCj4gPiArYmVpbmcgcmV3cml0dGVuIHdpdGhvdXQgZGVwZW5kZW5jaWVzIG9uIHRoZSBm YmRldiBtb2R1bGUuIFNvbWUgb2YgdGhlCj4gPiAraGVscGVycyBjb3VsZCBmdXJ0aGVyIGJlbmVm aXQgZnJvbSB1c2luZyBzdHJ1Y3QgZG1hX2J1Zl9tYXAgaW5zdGVhZCBvZgo+ID4gK3JhdyBwb2lu dGVycy4KPiA+ICsKPiA+ICtDb250YWN0OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5A c3VzZS5kZT4sIERhbmllbCBWZXR0ZXIKPiA+ICsKPiA+ICtMZXZlbDogQWR2YW5jZWQKPiA+ICsK PiA+ICsKPiA+ICBkcm1fZnJhbWVidWZmZXJfZnVuY3MgYW5kIGRybV9tb2RlX2NvbmZpZ19mdW5j cy5mYl9jcmVhdGUgY2xlYW51cAo+ID4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2JvY2hzL2JvY2hzX2ttcy5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9i b2Nocy9ib2Noc19rbXMuYyBpbmRleCAxM2QwZDA0YzQ0NTcuLjg1MzA4MWQxODZkNQo+ID4gMTAw NjQ0IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ib2Nocy9ib2Noc19rbXMuYwo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2JvY2hzL2JvY2hzX2ttcy5jCj4gPiBAQCAtMTUxLDcgKzE1MSw2IEBAIGlu dCBib2Noc19rbXNfaW5pdChzdHJ1Y3QgYm9jaHNfZGV2aWNlICpib2NocykKPiA+ICAJYm9jaHMt PmRldi0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoID0gMjQ7Cj4gPiAgCWJvY2hzLT5kZXYt Pm1vZGVfY29uZmlnLnByZWZlcl9zaGFkb3cgPSAwOwo+ID4gIAlib2Nocy0+ZGV2LT5tb2RlX2Nv bmZpZy5wcmVmZXJfc2hhZG93X2ZiZGV2ID0gMTsKPiA+IC0JYm9jaHMtPmRldi0+bW9kZV9jb25m aWcuZmJkZXZfdXNlX2lvbWVtID0gdHJ1ZTsKPiA+ICAJYm9jaHMtPmRldi0+bW9kZV9jb25maWcu cXVpcmtfYWRkZmJfcHJlZmVyX2hvc3RfYnl0ZV9vcmRlciA9Cj4gPiB0cnVlOyAKPiA+ICAJYm9j aHMtPmRldi0+bW9kZV9jb25maWcuZnVuY3MgPSAmYm9jaHNfbW9kZV9mdW5jczsKPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gPiBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fZmJfaGVscGVyLmMgaW5kZXggNjIxMmNkN2NkZTFkLi40NjJiMGMxMzBlYmIgMTAw NjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gPiBAQCAtMzcyLDI0ICszNzIsMjIgQEAg c3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9yZXN1bWVfd29ya2VyKHN0cnVjdAo+ID4gd29ya19z dHJ1Y3QgKndvcmspIH0KPiA+ICAKPiA+ICBzdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX2RpcnR5 X2JsaXRfcmVhbChzdHJ1Y3QgZHJtX2ZiX2hlbHBlcgo+ID4gKmZiX2hlbHBlciwKPiA+IC0JCQkJ CSAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXApCj4gPiArCQkJCQkgIHN0cnVjdCBkcm1fY2xp cF9yZWN0ICpjbGlwLAo+ID4gKwkJCQkJICBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKmRzdCkKPiA+ICB7 Cj4gPiAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gZmJfaGVscGVyLT5mYjsKPiA+ICAJ dW5zaWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKPiA+ICAJc2l6ZV90IG9mZnNl dCA9IGNsaXAtPnkxICogZmItPnBpdGNoZXNbMF0gKyBjbGlwLT54MSAqIGNwcDsKPiA+ICAJdm9p ZCAqc3JjID0gZmJfaGVscGVyLT5mYmRldi0+c2NyZWVuX2J1ZmZlciArIG9mZnNldDsKPiA+IC0J dm9pZCAqZHN0ID0gZmJfaGVscGVyLT5idWZmZXItPm1hcC52YWRkciArIG9mZnNldDsKPiA+ICAJ c2l6ZV90IGxlbiA9IChjbGlwLT54MiAtIGNsaXAtPngxKSAqIGNwcDsKPiA+ICAJdW5zaWduZWQg aW50IHk7Cj4gPiAgCj4gPiAtCWZvciAoeSA9IGNsaXAtPnkxOyB5IDwgY2xpcC0+eTI7IHkrKykg ewo+ID4gLQkJaWYgKCFmYl9oZWxwZXItPmRldi0+bW9kZV9jb25maWcuZmJkZXZfdXNlX2lvbWVt KQo+ID4gLQkJCW1lbWNweShkc3QsIHNyYywgbGVuKTsKPiA+IC0JCWVsc2UKPiA+IC0JCQltZW1j cHlfdG9pbygodm9pZCBfX2lvbWVtICopZHN0LCBzcmMsIGxlbik7Cj4gPiArCWRtYV9idWZfbWFw X2luY3IoZHN0LCBvZmZzZXQpOyAvKiBnbyB0byBmaXJzdCBwaXhlbCB3aXRoaW4gY2xpcAo+ID4g cmVjdCAqLyAKPiA+ICsJZm9yICh5ID0gY2xpcC0+eTE7IHkgPCBjbGlwLT55MjsgeSsrKSB7Cj4g PiArCQlkbWFfYnVmX21hcF9tZW1jcHlfdG8oZHN0LCBzcmMsIGxlbik7Cj4gPiArCQlkbWFfYnVm X21hcF9pbmNyKGRzdCwgZmItPnBpdGNoZXNbMF0pOwo+ID4gIAkJc3JjICs9IGZiLT5waXRjaGVz WzBdOwo+ID4gLQkJZHN0ICs9IGZiLT5waXRjaGVzWzBdOwo+ID4gIAl9Cj4gPiAgfQo+ID4gIAo+ ID4gQEAgLTQxNyw4ICs0MTUsOSBAQCBzdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX2RpcnR5X3dv cmsoc3RydWN0Cj4gPiB3b3JrX3N0cnVjdCAqd29yaykgcmV0ID0gZHJtX2NsaWVudF9idWZmZXJf dm1hcChoZWxwZXItPmJ1ZmZlciwgJm1hcCk7Cj4gPiAgCQkJaWYgKHJldCkKPiA+ICAJCQkJcmV0 dXJuOwo+ID4gLQkJCWRybV9mYl9oZWxwZXJfZGlydHlfYmxpdF9yZWFsKGhlbHBlciwKPiA+ICZj bGlwX2NvcHkpOwo+ID4gKwkJCWRybV9mYl9oZWxwZXJfZGlydHlfYmxpdF9yZWFsKGhlbHBlciwK PiA+ICZjbGlwX2NvcHksICZtYXApOyB9Cj4gPiArCj4gPiAgCQlpZiAoaGVscGVyLT5mYi0+ZnVu Y3MtPmRpcnR5KQo+ID4gIAkJCWhlbHBlci0+ZmItPmZ1bmNzLT5kaXJ0eShoZWxwZXItPmZiLCBO VUxMLCAwLCAwLAo+ID4gIAkJCQkJCSAmY2xpcF9jb3B5LCAxKTsKPiA+IEBAIC03NTUsNiArNzU0 LDEzNiBAQCB2b2lkIGRybV9mYl9oZWxwZXJfc3lzX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbwo+ ID4gKmluZm8sIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfc3lzX2ltYWdlYmxp dCk7Cj4gPiAgCj4gPiArc3RhdGljIHNzaXplX3QgZHJtX2ZiX2hlbHBlcl9jZmJfcmVhZChzdHJ1 Y3QgZmJfaW5mbyAqaW5mbywgY2hhciBfX3VzZXIKPiA+ICpidWYsCj4gPiArCQkJCSAgICAgIHNp emVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgbG9uZyBwID0g KnBwb3M7Cj4gPiArCXU4ICpkc3Q7Cj4gPiArCXU4IF9faW9tZW0gKnNyYzsKPiA+ICsJaW50IGMs IGVyciA9IDA7Cj4gPiArCXVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZTsKPiA+ICsJdW5zaWduZWQg bG9uZyBhbGxvY19zaXplOwo+ID4gKwlzc2l6ZV90IHJldCA9IDA7Cj4gPiArCj4gPiArCWlmIChp bmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKPiA+ICsJCXJldHVybiAtRVBFUk07 Cj4gPiArCj4gPiArCXRvdGFsX3NpemUgPSBpbmZvLT5zY3JlZW5fc2l6ZTsKPiA+ICsKPiA+ICsJ aWYgKHRvdGFsX3NpemUgPT0gMCkKPiA+ICsJCXRvdGFsX3NpemUgPSBpbmZvLT5maXguc21lbV9s ZW47Cj4gPiArCj4gPiArCWlmIChwID49IHRvdGFsX3NpemUpCj4gPiArCQlyZXR1cm4gMDsKPiA+ ICsKPiA+ICsJaWYgKGNvdW50ID49IHRvdGFsX3NpemUpCj4gPiArCQljb3VudCA9IHRvdGFsX3Np emU7Cj4gPiArCj4gPiArCWlmIChjb3VudCArIHAgPiB0b3RhbF9zaXplKQo+ID4gKwkJY291bnQg PSB0b3RhbF9zaXplIC0gcDsKPiA+ICsKPiA+ICsJc3JjID0gKHU4IF9faW9tZW0gKikoaW5mby0+ c2NyZWVuX2Jhc2UgKyBwKTsKPiA+ICsKPiA+ICsJYWxsb2Nfc2l6ZSA9IG1pbihjb3VudCwgUEFH RV9TSVpFKTsKPiA+ICsKPiA+ICsJZHN0ID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVM KTsKPiA+ICsJaWYgKCFkc3QpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJd2hp bGUgKGNvdW50KSB7Cj4gPiArCQljID0gbWluKGNvdW50LCBhbGxvY19zaXplKTsKPiA+ICsKPiA+ ICsJCW1lbWNweV9mcm9taW8oZHN0LCBzcmMsIGMpOwo+ID4gKwkJaWYgKGNvcHlfdG9fdXNlcihi dWYsIGRzdCwgYykpIHsKPiA+ICsJCQllcnIgPSAtRUZBVUxUOwo+ID4gKwkJCWJyZWFrOwo+ID4g KwkJfQo+ID4gKwo+ID4gKwkJc3JjICs9IGM7Cj4gPiArCQkqcHBvcyArPSBjOwo+ID4gKwkJYnVm ICs9IGM7Cj4gPiArCQlyZXQgKz0gYzsKPiA+ICsJCWNvdW50IC09IGM7Cj4gPiArCX0KPiA+ICsK PiA+ICsJa2ZyZWUoZHN0KTsKPiA+ICsKPiA+ICsJaWYgKGVycikKPiA+ICsJCXJldHVybiBlcnI7 Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90 IGRybV9mYl9oZWxwZXJfY2ZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFy Cj4gPiBfX3VzZXIgKmJ1ZiwKPiA+ICsJCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpw cG9zKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7Cj4gPiArCXU4ICpzcmM7 Cj4gPiArCXU4IF9faW9tZW0gKmRzdDsKPiA+ICsJaW50IGMsIGVyciA9IDA7Cj4gPiArCXVuc2ln bmVkIGxvbmcgdG90YWxfc2l6ZTsKPiA+ICsJdW5zaWduZWQgbG9uZyBhbGxvY19zaXplOwo+ID4g Kwlzc2l6ZV90IHJldCA9IDA7Cj4gPiArCj4gPiArCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9f U1RBVEVfUlVOTklORykKPiA+ICsJCXJldHVybiAtRVBFUk07Cj4gPiArCj4gPiArCXRvdGFsX3Np emUgPSBpbmZvLT5zY3JlZW5fc2l6ZTsKPiA+ICsKPiA+ICsJaWYgKHRvdGFsX3NpemUgPT0gMCkK PiA+ICsJCXRvdGFsX3NpemUgPSBpbmZvLT5maXguc21lbV9sZW47Cj4gPiArCj4gPiArCWlmIChw ID4gdG90YWxfc2l6ZSkKPiA+ICsJCXJldHVybiAtRUZCSUc7Cj4gPiArCj4gPiArCWlmIChjb3Vu dCA+IHRvdGFsX3NpemUpIHsKPiA+ICsJCWVyciA9IC1FRkJJRzsKPiA+ICsJCWNvdW50ID0gdG90 YWxfc2l6ZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoY291bnQgKyBwID4gdG90YWxfc2l6ZSkg ewo+ID4gKwkJLyoKPiA+ICsJCSAqIFRoZSBmcmFtZWJ1ZmZlciBpcyB0b28gc21hbGwuIFdlIGRv IHRoZQo+ID4gKwkJICogY29weSBvcGVyYXRpb24sIGJ1dCByZXR1cm4gYW4gZXJyb3IgY29kZQo+ ID4gKwkJICogYWZ0ZXJ3YXJkcy4gVGFrZW4gZnJvbSBmYmRldi4KPiA+ICsJCSAqLwo+ID4gKwkJ aWYgKCFlcnIpCj4gPiArCQkJZXJyID0gLUVOT1NQQzsKPiA+ICsJCWNvdW50ID0gdG90YWxfc2l6 ZSAtIHA7Cj4gPiArCX0KPiA+ICsKPiA+ICsJYWxsb2Nfc2l6ZSA9IG1pbihjb3VudCwgUEFHRV9T SVpFKTsKPiA+ICsKPiA+ICsJc3JjID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsK PiA+ICsJaWYgKCFzcmMpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJZHN0ID0g KHU4IF9faW9tZW0gKikoaW5mby0+c2NyZWVuX2Jhc2UgKyBwKTsKPiA+ICsKPiA+ICsJd2hpbGUg KGNvdW50KSB7Cj4gPiArCQljID0gbWluKGNvdW50LCBhbGxvY19zaXplKTsKPiA+ICsKPiA+ICsJ CWlmIChjb3B5X2Zyb21fdXNlcihzcmMsIGJ1ZiwgYykpIHsKPiA+ICsJCQllcnIgPSAtRUZBVUxU Owo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJfQo+ID4gKwkJbWVtY3B5X3RvaW8oZHN0LCBzcmMsIGMp Owo+ID4gKwo+ID4gKwkJZHN0ICs9IGM7Cj4gPiArCQkqcHBvcyArPSBjOwo+ID4gKwkJYnVmICs9 IGM7Cj4gPiArCQlyZXQgKz0gYzsKPiA+ICsJCWNvdW50IC09IGM7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJa2ZyZWUoc3JjKTsKPiA+ICsKPiA+ICsJaWYgKGVycikKPiA+ICsJCXJldHVybiBlcnI7Cj4g PiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gIC8qKgo+ID4gICAqIGRybV9m Yl9oZWxwZXJfY2ZiX2ZpbGxyZWN0IC0gd3JhcHBlciBhcm91bmQgY2ZiX2ZpbGxyZWN0Cj4gPiAg ICogQGluZm86IGZiZGV2IHJlZ2lzdGVyZWQgYnkgdGhlIGhlbHBlcgo+ID4gQEAgLTIwMjcsNiAr MjE1Niw2NiBAQCBzdGF0aWMgaW50IGRybV9mYmRldl9mYl9tbWFwKHN0cnVjdCBmYl9pbmZvICpp bmZvLAo+ID4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHJldHVybiAtRU5PREVWOwo+ID4g IH0KPiA+ICAKPiA+ICtzdGF0aWMgc3NpemVfdCBkcm1fZmJkZXZfZmJfcmVhZChzdHJ1Y3QgZmJf aW5mbyAqaW5mbywgY2hhciBfX3VzZXIgKmJ1ZiwKPiA+ICsJCQkJIHNpemVfdCBjb3VudCwgbG9m Zl90ICpwcG9zKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9 IGluZm8tPnBhcjsKPiA+ICsJc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXIgPSBmYl9o ZWxwZXItPmJ1ZmZlcjsKPiA+ICsKPiA+ICsJaWYgKGRybV9mYmRldl91c2Vfc2hhZG93X2ZiKGZi X2hlbHBlcikgfHwgIWJ1ZmZlci0+bWFwLmlzX2lvbWVtKQo+ID4gKwkJcmV0dXJuIGRybV9mYl9o ZWxwZXJfc3lzX3JlYWQoaW5mbywgYnVmLCBjb3VudCwgcHBvcyk7Cj4gPiArCWVsc2UKPiA+ICsJ CXJldHVybiBkcm1fZmJfaGVscGVyX2NmYl9yZWFkKGluZm8sIGJ1ZiwgY291bnQsIHBwb3MpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBkcm1fZmJkZXZfZmJfd3JpdGUoc3RydWN0 IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIKPiA+IF9fdXNlciAqYnVmLAo+ID4gKwkJCQkgIHNp emVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9mYl9oZWxw ZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKPiA+ICsJc3RydWN0IGRybV9jbGllbnRfYnVmZmVy ICpidWZmZXIgPSBmYl9oZWxwZXItPmJ1ZmZlcjsKPiA+ICsKPiA+ICsJaWYgKGRybV9mYmRldl91 c2Vfc2hhZG93X2ZiKGZiX2hlbHBlcikgfHwgIWJ1ZmZlci0+bWFwLmlzX2lvbWVtKQo+ID4gKwkJ cmV0dXJuIGRybV9mYl9oZWxwZXJfc3lzX3dyaXRlKGluZm8sIGJ1ZiwgY291bnQsIHBwb3MpOwo+ ID4gKwllbHNlCj4gPiArCQlyZXR1cm4gZHJtX2ZiX2hlbHBlcl9jZmJfd3JpdGUoaW5mbywgYnVm LCBjb3VudCwgcHBvcyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGRybV9mYmRldl9m Yl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKPiA+ICsJCQkJICBjb25zdCBzdHJ1Y3Qg ZmJfZmlsbHJlY3QgKnJlY3QpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJf aGVscGVyID0gaW5mby0+cGFyOwo+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZl ciA9IGZiX2hlbHBlci0+YnVmZmVyOwo+ID4gKwo+ID4gKwlpZiAoZHJtX2ZiZGV2X3VzZV9zaGFk b3dfZmIoZmJfaGVscGVyKSB8fCAhYnVmZmVyLT5tYXAuaXNfaW9tZW0pCj4gPiArCQlkcm1fZmJf aGVscGVyX3N5c19maWxscmVjdChpbmZvLCByZWN0KTsKPiA+ICsJZWxzZQo+ID4gKwkJZHJtX2Zi X2hlbHBlcl9jZmJfZmlsbHJlY3QoaW5mbywgcmVjdCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGRybV9mYmRldl9mYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKPiA+ICsJ CQkJICBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOwo+ID4gKwlzdHJ1Y3QgZHJtX2Ns aWVudF9idWZmZXIgKmJ1ZmZlciA9IGZiX2hlbHBlci0+YnVmZmVyOwo+ID4gKwo+ID4gKwlpZiAo ZHJtX2ZiZGV2X3VzZV9zaGFkb3dfZmIoZmJfaGVscGVyKSB8fCAhYnVmZmVyLT5tYXAuaXNfaW9t ZW0pCj4gPiArCQlkcm1fZmJfaGVscGVyX3N5c19jb3B5YXJlYShpbmZvLCBhcmVhKTsKPiA+ICsJ ZWxzZQo+ID4gKwkJZHJtX2ZiX2hlbHBlcl9jZmJfY29weWFyZWEoaW5mbywgYXJlYSk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGRybV9mYmRldl9mYl9pbWFnZWJsaXQoc3RydWN0IGZi X2luZm8gKmluZm8sCj4gPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCj4g PiArewo+ID4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOwo+ ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlciA9IGZiX2hlbHBlci0+YnVmZmVy Owo+ID4gKwo+ID4gKwlpZiAoZHJtX2ZiZGV2X3VzZV9zaGFkb3dfZmIoZmJfaGVscGVyKSB8fCAh YnVmZmVyLT5tYXAuaXNfaW9tZW0pCj4gPiArCQlkcm1fZmJfaGVscGVyX3N5c19pbWFnZWJsaXQo aW5mbywgaW1hZ2UpOwo+ID4gKwllbHNlCj4gPiArCQlkcm1fZmJfaGVscGVyX2NmYl9pbWFnZWJs aXQoaW5mbywgaW1hZ2UpOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGZi X29wcyBkcm1fZmJkZXZfZmJfb3BzID0gewo+ID4gIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4g PiAgCURSTV9GQl9IRUxQRVJfREVGQVVMVF9PUFMsCj4gPiBAQCAtMjAzNCwxMSArMjIyMywxMSBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGZiX29wcyBkcm1fZmJkZXZfZmJfb3BzID0gewo+ID4gIAku ZmJfcmVsZWFzZQk9IGRybV9mYmRldl9mYl9yZWxlYXNlLAo+ID4gIAkuZmJfZGVzdHJveQk9IGRy bV9mYmRldl9mYl9kZXN0cm95LAo+ID4gIAkuZmJfbW1hcAk9IGRybV9mYmRldl9mYl9tbWFwLAo+ ID4gLQkuZmJfcmVhZAk9IGRybV9mYl9oZWxwZXJfc3lzX3JlYWQsCj4gPiAtCS5mYl93cml0ZQk9 IGRybV9mYl9oZWxwZXJfc3lzX3dyaXRlLAo+ID4gLQkuZmJfZmlsbHJlY3QJPSBkcm1fZmJfaGVs cGVyX3N5c19maWxscmVjdCwKPiA+IC0JLmZiX2NvcHlhcmVhCT0gZHJtX2ZiX2hlbHBlcl9zeXNf Y29weWFyZWEsCj4gPiAtCS5mYl9pbWFnZWJsaXQJPSBkcm1fZmJfaGVscGVyX3N5c19pbWFnZWJs aXQsCj4gPiArCS5mYl9yZWFkCT0gZHJtX2ZiZGV2X2ZiX3JlYWQsCj4gPiArCS5mYl93cml0ZQk9 IGRybV9mYmRldl9mYl93cml0ZSwKPiA+ICsJLmZiX2ZpbGxyZWN0CT0gZHJtX2ZiZGV2X2ZiX2Zp bGxyZWN0LAo+ID4gKwkuZmJfY29weWFyZWEJPSBkcm1fZmJkZXZfZmJfY29weWFyZWEsCj4gPiAr CS5mYl9pbWFnZWJsaXQJPSBkcm1fZmJkZXZfZmJfaW1hZ2VibGl0LAo+ID4gIH07Cj4gPiAgCj4g PiAgc3RhdGljIHN0cnVjdCBmYl9kZWZlcnJlZF9pbyBkcm1fZmJkZXZfZGVmaW8gPSB7Cj4gPiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmggYi9pbmNsdWRlL2RybS9k cm1fbW9kZV9jb25maWcuaAo+ID4gaW5kZXggNWZmYmI0ZWQ1YjM1Li5hYjQyNGRkZDc2NjUgMTAw NjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaAo+ID4gKysrIGIvaW5j bHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmgKPiA+IEBAIC04NzcsMTggKzg3Nyw2IEBAIHN0cnVj dCBkcm1fbW9kZV9jb25maWcgewo+ID4gIAkgKi8KPiA+ICAJYm9vbCBwcmVmZXJfc2hhZG93X2Zi ZGV2Owo+ID4gIAo+ID4gLQkvKioKPiA+IC0JICogQGZiZGV2X3VzZV9pb21lbToKPiA+IC0JICoK PiA+IC0JICogU2V0IHRvIHRydWUgaWYgZnJhbWVidWZmZXIgcmVzaWRlIGluIGlvbWVtLgo+ID4g LQkgKiBXaGVuIHNldCB0byB0cnVlIG1lbWNweV90b2lvKCkgaXMgdXNlZCB3aGVuIGNvcHlpbmcg dGhlCj4gPiBmcmFtZWJ1ZmZlciBpbgo+ID4gLQkgKiBkcm1fZmJfaGVscGVyLmRybV9mYl9oZWxw ZXJfZGlydHlfYmxpdF9yZWFsKCkuCj4gPiAtCSAqCj4gPiAtCSAqIEZJWE1FOiBUaGlzIHNob3Vs ZCBiZSByZXBsYWNlZCB3aXRoIGEgcGVyLW1hcHBpbmcgaXNfaW9tZW0KPiA+IC0JICogZmxhZyAo bGlrZSB0dG0gZG9lcyksIGFuZCB0aGVuIHVzZWQgZXZlcnl3aGVyZSBpbiBmYmRldiBjb2RlLgo+ ID4gLQkgKi8KPiA+IC0JYm9vbCBmYmRldl91c2VfaW9tZW07Cj4gPiAtCj4gPiAgCS8qKgo+ID4g IAkgKiBAcXVpcmtfYWRkZmJfcHJlZmVyX3hiZ3JfMzBicHA6Cj4gPiAgCSAqCj4gPiAtLSAKPiA+ IDIuMjguMAoKCgotLSAKVGhvbWFzIFppbW1lcm1hbm4KR3JhcGhpY3MgRHJpdmVyIERldmVsb3Bl cgpTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdtYkgKTWF4ZmVsZHN0ci4gNSwgOTA0 MDkgTsO8cm5iZXJnLCBHZXJtYW55CihIUkIgMzY4MDksIEFHIE7DvHJuYmVyZykKR2VzY2jDpGZ0 c2bDvGhyZXI6IEZlbGl4IEltZW5kw7ZyZmZlcgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6 YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5k YXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=