From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [[RFC]DPU PATCH] drm/msm/dsi: Use one connector for dual DSI mode Date: Thu, 8 Mar 2018 11:20:42 +0530 Message-ID: References: <1519865089-26296-1-git-send-email-chandanu@codeaurora.org> <20180301155321.GP223881@art_vandelay> <85fc60e6b276f65060cf6373827cb163@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <85fc60e6b276f65060cf6373827cb163@codeaurora.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: chandanu@codeaurora.org, Sean Paul Cc: linux-arm-msm@vger.kernel.org, abhinavk@codeaurora.org, hoegsberg@google.com, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org CgpPbiBGcmlkYXkgMDIgTWFyY2ggMjAxOCAwNTo1NyBBTSwgY2hhbmRhbnVAY29kZWF1cm9yYS5v cmcgd3JvdGU6Cj4gT24gMjAxOC0wMy0wMSAwNzo1MywgU2VhbiBQYXVsIHdyb3RlOgo+PiBPbiBX ZWQsIEZlYiAyOCwgMjAxOCBhdCAwNDo0NDo0OVBNIC0wODAwLCBDaGFuZGFuIFVkZGFyYWp1IHdy b3RlOgo+Pj4gQ3VycmVudCBEU0kgZHJpdmVyIHVzZXMgdHdvIGNvbm5lY3RvcnMgZm9yIGR1YWwg RFNJIGNhc2UgZXZlbgo+Pj4gdGhvdWdoIHdlIG9ubHkgaGF2ZSBvbmUgcGFuZWwuIEZpeCB0aGlz IGJ5IGltcGxlbWVudGluZyBvbmUKPj4+IGNvbm5lY3Rvci9icmlkZ2UgZm9yIGR1YWwgRFNJIHVz ZSBjYXNlLgo+Pj4KPj4+IEN1cnJlbnQgcGF0Y2ggaXMgbm90IHlldCB0ZXN0ZWQgb24gZHVhbC1k c2kgc2V0dXAuCj4+Cj4+IFRoaXMgc2VlbXMgbGlrZSBzb21ldGhpbmcgdGhhdCBtaWdodCBiZW5l Zml0IGZyb20gYmVpbmcgcGFydCBvZiBhIAo+PiBwYXRjaCBzZXJpZXMKPj4gdGhhdCBjYW4gYmUg dGVzdGVkIGVuZC10by1lbmQgKGllOiBhIHBhdGNoIHNlcmllcyB0byBhZGQgZnVsbCBkdWFsLWRz aSAKPj4gc3VwcG9ydAo+PiB0byB0aGUgZHNpIGRyaXZlcikuIEl0J3Mga2luZCBvZiBoYXJkIHRv IHNlZSB3aGVyZSB0aGluZ3MgYXJlIGdvaW5nIAo+PiB3aXRoIGp1c3QKPj4gdGhpcyBvbmUgc21h bGwgcGllY2UuCj4+Cj4gCj4gVGhpcyBpcyBtb3JlIGxpa2UgYSBpbml0aWFsIHBhdGNoIHRvIGdl dCBlYXJseSBjb21tZW50cy9zdWdnZXN0aW9ucwo+IHJlZ2FyZGluZyB0aGlzIGFwcHJvYWNoIG9u IHRoZSBEU0kgdXBzdHJlYW0gZHJpdmVyLgo+IFdlIGFyZSB3b3JraW5nIG9uIGVuYWJsaW5nIGR1 YWwtZHNpIHVzaW5nIERQVSB3aXRoIHVwc3RyZWFtIGRzaSBkcml2ZXIuCj4gVGhpcyBjaGFuZ2Ug d2lsbCBiZSBiYXNlZCBvbiBhcmNoaXQncyBkdWFsIERTSSBjaGFuZ2VzIG9uIFNETTg0NS4KPiBP bmNlIHdlIGhhdmUgdmVyaWZpZWQsIHdlIHdpbGwgcG9zdCBhbGwgdGhlIHJlbGV2YW50IHBhdGNo ZXMgYWxvbmcgd2l0aCAKPiB0aGlzIG9uZS4KClRoZSBhcHByb2FjaCBvZiBlbnRpcmVseSBieXBh c3NpbmcgbXNtX2RzaV9tb2Rlc2V0X2luaXQoKSBmb3IgRFNJMSAKc291bmRzIGxpa2UgYSBkZWNl bnQgaWRlYS4gSG93ZXZlciwgdGhpcyBtYXkgbm90IHdvcmsgd2VsbCBpZiB3ZSBuZWVkIHRvIApk eW5hbWljYWxseSBzd2l0Y2ggYmV0d2VlbiBkdWFsIERTSSBtb2RlIHZzIG9wZXJhdGluZyB0aGUg MiBEU0lzCmluZGVwZW5kZW50bHkuIElmIHdlIGRvbid0IGhhdmUgdGhpcyB1c2UgY2FzZSBpbiBt aW5kLCB0aGVuIHdlIHNob3VsZApiZSBva2F5LgoKQW5vdGhlciBhcHByb2FjaCBjb3VsZCBiZSB0 byBjcmVhdGUgMiBzZXBhcmF0ZSBicmlkZ2UvY29ubmVjdG9ycyBmb3IKaXJyZXNwZWN0aXZlIG9m IHdoZXRoZXIgd2UgYXJlIGluIGR1YWwgRFNJIG1vZGUgb3Igbm90LCBidXQgcmVwb3J0IG9uZQpv ZiB0aGUgcGFpcnMgYXMgdW5hdmFpbGFibGUgKGNvbm5lY3RvcidzIGRldGVjdCgpIHNob3VsZCBy ZXBvcnQgCmRpc2Nvbm5lY3RlZCkuCgo+IAo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IENoYW5kYW4g VWRkYXJhanUgPGNoYW5kYW51QGNvZGVhdXJvcmEub3JnPgo+Pj4gLS0tCj4+PiDCoGRyaXZlcnMv Z3B1L2RybS9tc20vZHNpL2RzaS5jwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAzICsKPj4+IMKgZHJp dmVycy9ncHUvZHJtL21zbS9kc2kvZHNpLmjCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+Pj4g wqBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfbWFuYWdlci5jIHwgMTAwIAo+Pj4gKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4gwqAzIGZpbGVzIGNoYW5nZWQsIDI0IGlu c2VydGlvbnMoKyksIDgwIGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS9kc2kuYyAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNp LmMKPj4+IGluZGV4IGI3NDRiY2MuLmZmODE2NGMgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS9kc2kuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNp LmMKPj4+IEBAIC0yMDgsNiArMjA4LDkgQEAgaW50IG1zbV9kc2lfbW9kZXNldF9pbml0KHN0cnVj dCBtc21fZHNpICptc21fZHNpLCAKPj4+IHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+PiDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4+IMKgwqDCoMKgIH0KPj4+Cj4+PiArwqDCoMKgIGlm ICghbXNtX2RzaV9tYW5hZ2VyX3ZhbGlkYXRlX2N1cnJlbnRfY29uZmlnKG1zbV9kc2ktPmlkKSkK Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+PiArCj4+PiDCoMKgwqDCoCBtc21fZHNp LT5lbmNvZGVyID0gZW5jb2RlcjsKPj4+Cj4+PiDCoMKgwqDCoCBtc21fZHNpLT5icmlkZ2UgPSBt c21fZHNpX21hbmFnZXJfYnJpZGdlX2luaXQobXNtX2RzaS0+aWQpOwo+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaS5oIAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS9kc2kuaAo+Pj4gaW5kZXggNzBkOWE5YS4uMmQ5NzYzZiAxMDA2NDQKPj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaS5oCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS9kc2kuaAo+Pj4gQEAgLTEwMCw2ICsxMDAsNyBAQCBzdHJ1Y3QgbXNtX2RzaSB7Cj4+PiDC oHZvaWQgbXNtX2RzaV9tYW5hZ2VyX2F0dGFjaF9kc2lfZGV2aWNlKGludCBpZCwgdTMyIGRldmlj ZV9mbGFncyk7Cj4+PiDCoGludCBtc21fZHNpX21hbmFnZXJfcmVnaXN0ZXIoc3RydWN0IG1zbV9k c2kgKm1zbV9kc2kpOwo+Pj4gwqB2b2lkIG1zbV9kc2lfbWFuYWdlcl91bnJlZ2lzdGVyKHN0cnVj dCBtc21fZHNpICptc21fZHNpKTsKPj4+ICtib29sIG1zbV9kc2lfbWFuYWdlcl92YWxpZGF0ZV9j dXJyZW50X2NvbmZpZyh1OCBpZCk7Cj4+Pgo+Pj4gwqAvKiBtc20gZHNpICovCj4+PiDCoHN0YXRp YyBpbmxpbmUgYm9vbCBtc21fZHNpX2RldmljZV9jb25uZWN0ZWQoc3RydWN0IG1zbV9kc2kgKm1z bV9kc2kpCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX21hbmFn ZXIuYyAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX21hbmFnZXIuYwo+Pj4gaW5k ZXggNGNiMWNiNi4uYmY5MmYyNSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpL2RzaV9tYW5hZ2VyLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9t YW5hZ2VyLmMKPj4+IEBAIC0zMDUsNjcgKzMwNSw2IEBAIHN0YXRpYyB2b2lkIGRzaV9tZ3JfY29u bmVjdG9yX2Rlc3Ryb3koc3RydWN0IAo+Pj4gZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+Pj4g wqDCoMKgwqAga2ZyZWUoZHNpX2Nvbm5lY3Rvcik7Cj4+PiDCoH0KPj4+Cj4+PiAtc3RhdGljIHZv aWQgZHNpX2R1YWxfY29ubmVjdG9yX2ZpeF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAKPj4+ ICpjb25uZWN0b3IpCj4+PiAtewo+Pj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwgKm07Cj4+PiAtCj4+PiAtwqDCoMKgIC8qIE9ubHkgc3VwcG9ydCBsZWZ0LXJpZ2h0IG1v ZGUgKi8KPj4+IC3CoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIG0sICZjb25u ZWN0b3ItPnByb2JlZF9tb2RlcywgaGVhZCkgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIG1vZGUtPmNs b2NrID4+PSAxOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIG1vZGUtPmhkaXNwbGF5ID4+PSAxOwo+Pj4g LcKgwqDCoMKgwqDCoMKgIG1vZGUtPmhzeW5jX3N0YXJ0ID4+PSAxOwo+Pj4gLcKgwqDCoMKgwqDC oMKgIG1vZGUtPmhzeW5jX2VuZCA+Pj0gMTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBtb2RlLT5odG90 YWwgPj49IDE7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgZHJtX21vZGVfc2V0X25hbWUobW9kZSk7Cj4+ PiAtwqDCoMKgIH0KPj4+IC19Cj4+PiAtCj4+PiAtc3RhdGljIGludCBkc2lfZHVhbF9jb25uZWN0 b3JfdGlsZV9pbml0KAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciwgaW50IGlkKQo+Pj4gLXsKPj4+IC3CoMKgwqAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGU7Cj4+PiAtwqDCoMKgIC8qIEZha2UgdG9wb2xvZ3kgaWQgKi8KPj4+ IC3CoMKgwqAgY2hhciB0b3BvX2lkWzhdID0geydNJywgJ1MnLCAnTScsICdEJywgJ1UnLCAnRCcs ICdTJywgJ0knfTsKPj4+IC0KPj4+IC3CoMKgwqAgaWYgKGNvbm5lY3Rvci0+dGlsZV9ncm91cCkg ewo+Pj4gLcKgwqDCoMKgwqDCoMKgIERCRygiVGlsZSBwcm9wZXJ0eSBoYXMgYmVlbiBpbml0aWFs aXplZCIpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4gLcKgwqDCoCB9Cj4+PiAt Cj4+PiAtwqDCoMKgIC8qIFVzZSB0aGUgZmlyc3QgbW9kZSBvbmx5IGZvciBub3cgKi8KPj4+IC3C oMKgwqAgbW9kZSA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLAo+ Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGVhZCk7Cj4+PiAtwqDCoMKg IGlmICghbW9kZSkKPj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+IC0KPj4+ IC3CoMKgwqAgY29ubmVjdG9yLT50aWxlX2dyb3VwID0gZHJtX21vZGVfZ2V0X3RpbGVfZ3JvdXAo Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29ubmVjdG9yLT5k ZXYsIHRvcG9faWQpOwo+Pj4gLcKgwqDCoCBpZiAoIWNvbm5lY3Rvci0+dGlsZV9ncm91cCkKPj4+ IC3CoMKgwqDCoMKgwqDCoCBjb25uZWN0b3ItPnRpbGVfZ3JvdXAgPSBkcm1fbW9kZV9jcmVhdGVf dGlsZV9ncm91cCgKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b25uZWN0b3ItPmRldiwgdG9wb19pZCk7Cj4+PiAtwqDCoMKgIGlmICghY29ubmVjdG9yLT50aWxl X2dyb3VwKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlczogZmFpbGVkIHRvIGNyZWF0 ZSB0aWxlIGdyb3VwXG4iLCBfX2Z1bmNfXyk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F Tk9NRU07Cj4+PiAtwqDCoMKgIH0KPj4+IC0KPj4+IC3CoMKgwqAgY29ubmVjdG9yLT5oYXNfdGls ZSA9IHRydWU7Cj4+PiAtwqDCoMKgIGNvbm5lY3Rvci0+dGlsZV9pc19zaW5nbGVfbW9uaXRvciA9 IHRydWU7Cj4+PiAtCj4+PiAtwqDCoMKgIC8qIG1vZGUgaGFzIGJlZW4gZml4ZWQgKi8KPj4+IC3C oMKgwqAgY29ubmVjdG9yLT50aWxlX2hfc2l6ZSA9IG1vZGUtPmhkaXNwbGF5Owo+Pj4gLcKgwqDC oCBjb25uZWN0b3ItPnRpbGVfdl9zaXplID0gbW9kZS0+dmRpc3BsYXk7Cj4+PiAtCj4+PiAtwqDC oMKgIC8qIE9ubHkgc3VwcG9ydCBsZWZ0LXJpZ2h0IG1vZGUgKi8KPj4+IC3CoMKgwqAgY29ubmVj dG9yLT5udW1faF90aWxlID0gMjsKPj4+IC3CoMKgwqAgY29ubmVjdG9yLT5udW1fdl90aWxlID0g MTsKPj4+IC0KPj4+IC3CoMKgwqAgY29ubmVjdG9yLT50aWxlX3ZfbG9jID0gMDsKPj4+IC3CoMKg wqAgY29ubmVjdG9yLT50aWxlX2hfbG9jID0gKGlkID09IERTSV9SSUdIVCkgPyAxIDogMDsKPj4+ IC0KPj4+IC3CoMKgwqAgcmV0dXJuIDA7Cj4+PiAtfQo+Pj4gLQo+Pj4gwqBzdGF0aWMgaW50IGRz aV9tZ3JfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQo+Pj4gwqB7Cj4+PiDCoMKgwqDCoCBpbnQgaWQgPSBkc2lfbWdyX2Nvbm5lY3Rvcl9nZXRfaWQo Y29ubmVjdG9yKTsKPj4+IEBAIC0zNzYsMzEgKzMxNSwxNSBAQCBzdGF0aWMgaW50IGRzaV9tZ3Jf Y29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgCj4+PiBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cj4+PiDCoMKgwqDCoCBpZiAoIXBhbmVsKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsK Pj4+Cj4+PiAtwqDCoMKgIC8qIFNpbmNlIHdlIGhhdmUgMiBjb25uZWN0b3JzLCBidXQgb25seSAx IGRybV9wYW5lbCBpbiBkdWFsIERTSSAKPj4+IG1vZGUsCj4+PiAtwqDCoMKgwqAgKiBwYW5lbCBz aG91bGQgbm90IGF0dGFjaCB0byBhbnkgY29ubmVjdG9yLgo+Pj4gLcKgwqDCoMKgICogT25seSB0 ZW1wb3JhcmlseSBhdHRhY2ggcGFuZWwgdG8gdGhlIGN1cnJlbnQgY29ubmVjdG9yIGhlcmUsCj4+ PiAtwqDCoMKgwqAgKiB0byBsZXQgcGFuZWwgc2V0IG1vZGUgdG8gdGhpcyBjb25uZWN0b3IuCj4+ PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBJbiBkdWFsIERTSSBtb2RlLCB3ZSBoYXZlIG9u ZSBjb25uZWN0b3IgdGhhdCBjYW4gYmUKPj4+ICvCoMKgwqDCoCAqIGF0dGFjaGVkIHRvIHRoZSBk cm1fcGFuZWwuCj4+PiDCoMKgwqDCoMKgICovCj4+PiDCoMKgwqDCoCBkcm1fcGFuZWxfYXR0YWNo KHBhbmVsLCBjb25uZWN0b3IpOwo+Pj4gwqDCoMKgwqAgbnVtID0gZHJtX3BhbmVsX2dldF9tb2Rl cyhwYW5lbCk7Cj4+PiAtwqDCoMKgIGRybV9wYW5lbF9kZXRhY2gocGFuZWwpOwo+Pj4gwqDCoMKg wqAgaWYgKCFudW0pCj4+PiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4KPj4+IC3CoMKg wqAgaWYgKElTX0RVQUxfRFNJKCkpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCAvKiByZXBvcnQgaGFs ZiByZXNvbHV0aW9uIHRvIHVzZXIgKi8KPj4+IC3CoMKgwqDCoMKgwqDCoCBkc2lfZHVhbF9jb25u ZWN0b3JfZml4X21vZGVzKGNvbm5lY3Rvcik7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0ID0gZHNp X2R1YWxfY29ubmVjdG9yX3RpbGVfaW5pdChjb25uZWN0b3IsIGlkKTsKPj4+IC3CoMKgwqDCoMKg wqDCoCBpZiAocmV0KQo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ IC3CoMKgwqDCoMKgwqDCoCByZXQgPSBkcm1fbW9kZV9jb25uZWN0b3Jfc2V0X3RpbGVfcHJvcGVy dHkoY29ubmVjdG9yKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAocmV0KSB7Cj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzOiBzZXQgdGlsZSBwcm9wZXJ0eSBmYWlsZWQsICVk XG4iLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19f LCByZXQpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+IC3CoMKg wqDCoMKgwqDCoCB9Cj4+PiAtwqDCoMKgIH0KPj4+IC0KPj4+IMKgwqDCoMKgIHJldHVybiBudW07 Cj4+PiDCoH0KPj4+Cj4+PiBAQCAtNjg5LDYgKzYxMiwyMyBAQCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAKPj4+ICptc21fZHNpX21hbmFnZXJfY29ubmVjdG9yX2luaXQodTggaWQpCj4+PiDCoMKgwqDC oCByZXR1cm4gY29ubmVjdG9yOwo+Pj4gwqB9Cj4+Pgo+Pj4gK2Jvb2wgbXNtX2RzaV9tYW5hZ2Vy X3ZhbGlkYXRlX2N1cnJlbnRfY29uZmlnKHU4IGlkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgYm9vbCBp c19kdWFsX2RzaSA9IElTX0RVQUxfRFNJKCk7Cj4+PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDC oMKgwqAgKiBGb3IgZHVhbCBEU0ksIHdlIG9ubHkgaGF2ZSBvbmUgZHJtIHBhbmVsLiBGb3IgdGhp cwo+Pj4gK8KgwqDCoMKgICogdXNlIGNhc2UsIHdlIHJlZ2lzdGVyIG9ubHkgb25lIGJyaWRnZS9j b25uZWN0b3IuCj4+PiArwqDCoMKgwqAgKiBTa2lwIGJyaWRnZS9jb25uZWN0b3IgaW5pdGlhbGlz YXRpb24gaWYgaXQgaXMKPj4+ICvCoMKgwqDCoCAqIERTSSAxIGluIGNhc2Ugb2YgZHVhbCBEU0ku Cj4+Cj4+IEkgdGhpbmsgdGhlIG90aGVyIGR1YWwtZHNpIGltcGxlbWVudGF0aW9ucyB0YWtlIHRo ZSBtYXN0ZXIvc2xhdmUgY3VlcyAKPj4gZnJvbQo+PiBkZXZpY2UgdHJlZSBhcyBvcHBvc2VkIHRv IGhhcmQtY29kaW5nIG9uZSBvciB0aGUgb3RoZXIgKEkga25vdyBvZiBhdCAKPj4gbGVhc3Qgb25l Cj4+IGNhc2Ugd2hlcmUgRFNJXzEgd2FzIGNvbm5lY3RlZCB0byB0aGUgcGFuZWwncyBmaXJzdCBj aGFubmVsLCB3aGVyZWFzIAo+PiBEU0lfMCB3YXMKPj4gY29ubmVjdGVkIHRvIHRoZSBzZWNvbmQg Y2hhbm5lbC4KPj4KPj4gU2Vhbgo+IAo+IFlvdSBhcmUgcmlnaHQgU2Vhbi4gSSBuZWVkIHRvIGFk ZCBsb2dpYyB0byBjaGVjayBNYXN0ZXIgRFNJIGNvbnRyb2xsZXIgCj4gaW5zdGVhZAo+IG9mIERT SSBpZHMgc28gdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gYmVjb21lIG1vcmUgZ2VuZXJpYy4gVGhh bmsgeW91IGZvciAKPiBzaGFyaW5nCj4geW91ciB0aG91Z2h0cy4KClNsaWdodGx5IHVucmVsYXRl ZDogY3VycmVudGx5LCB0aGUgSVNfRFVBTF9EU0koKSB1c2VzIGN1c3RvbSBxY29tCmJpbmRpbmdz LCB3ZSBzaG91bGQgdXNlIG1vcmUgZ2VuZXJpYyBiaW5kaW5ncy4gSSdkIHBvc3RlZCBhIFJGQyBm b3IgaXQ6CgpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlcy9kcmktZGV2ZWwv MjAxOC1KYW51YXJ5LzE2MjkxMy5odG1sCgpUaGFua3MsCkFyY2hpdAoKPiAKPiBDaGFuZGFuCj4+ Cj4+PiArwqDCoMKgwqAgKi8KPj4+ICvCoMKgwqAgaWYgKGlzX2R1YWxfZHNpICYmIChEU0lfMSA9 PSBpZCkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBEQkcoIlNraXAgRFNJXzEgYnJpZGdlIHJlZ2lz dHJhdGlvbiBmb3IgZHVhbCBEU0kuXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFs c2U7Cj4+PiArwqDCoMKgIH0KPj4+ICvCoMKgwqAgcmV0dXJuIHRydWU7Cj4+PiArfQo+Pj4gKwo+ Pj4gwqAvKiBpbml0aWFsaXplIGJyaWRnZSAqLwo+Pj4gwqBzdHJ1Y3QgZHJtX2JyaWRnZSAqbXNt X2RzaV9tYW5hZ2VyX2JyaWRnZV9pbml0KHU4IGlkKQo+Pj4gwqB7Cj4+PiAtLSAKPj4+IFRoZSBR dWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBB dXJvcmEgCj4+PiBGb3J1bSwKPj4+IGEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFBy b2plY3QKPj4+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=