From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v5 1/2] drm/i915: Fix failure paths around initial fbdev allocation Date: Thu, 15 Oct 2015 19:22:29 +0200 Message-ID: <20151015172229.GF13786@phenom.ffwll.local> References: <20151013150440.GR26517@intel.com> <20151015171435.GA17598@wunner.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-f50.google.com (mail-lf0-f50.google.com [209.85.215.50]) by gabe.freedesktop.org (Postfix) with ESMTPS id BEAE16E501 for ; Thu, 15 Oct 2015 10:19:35 -0700 (PDT) Received: by lfaz124 with SMTP id z124so37743494lfa.1 for ; Thu, 15 Oct 2015 10:19:34 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20151015171435.GA17598@wunner.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lukas Wunner Cc: Jani Nikula , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBPY3QgMTUsIDIwMTUgYXQgMDc6MTQ6MzVQTSArMDIwMCwgTHVrYXMgV3VubmVyIHdy b3RlOgo+IEhpIFZpbGxlLAo+IAo+IE9uIFR1ZSwgT2N0IDEzLCAyMDE1IGF0IDA2OjA0OjQwUE0g KzAzMDAsIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPiA+IE9uIFR1ZSwgSnVuIDMwLCAyMDE1IGF0 IDEwOjA2OjI3QU0gKzAxMDAsIEx1a2FzIFd1bm5lciB3cm90ZToKPiA+ID4gRnJvbTogVHZydGtv IFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiA+ID4gCj4gPiA+IFdlIGhhZCB0 d28gZmFpbHVyZSBtb2RlcyBoZXJlOgo+ID4gPiAKPiA+ID4gMS4KPiA+ID4gRGVhZGxvY2sgaW4g aW50ZWxmYl9hbGxvYyBmYWlsdXJlIHBhdGggd2hlcmUgaXQgY2FsbHMKPiA+ID4gZHJtX2ZyYW1l YnVmZmVyX3JlbW92ZSwgd2hpY2ggZ3JhYnMgdGhlIHN0cnVjdCBtdXRleCBhbmQgaW50ZWxmYl9j cmVhdGUKPiA+ID4gKGNhbGxlciBvZiBpbnRlbGZiX2FsbG9jKSB3YXMgYWxyZWFkeSBob2xkaW5n IGl0Lgo+ID4gPiAKPiA+ID4gMi4KPiA+ID4gRGVhZGxvY2sgaW4gaW50ZWxmYl9jcmVhdGUgZmFp bHVyZSBwYXRoIHdoZXJlIGl0IGNhbGxzCj4gPiA+IGRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5j ZSwgd2hpY2ggZ3JhYnMgdGhlIHN0cnVjdCBtdXRleCBhbmQKPiA+ID4gaW50ZWxmYl9jcmVhdGUg d2FzIGFscmVhZHkgaG9sZGluZyBpdC4KPiA+ID4gCj4gPiA+IHYyOgo+ID4gPiAgICAqIFJlZm9y bWF0IGNvbW1pdCBtc2cgdG8gNzIgY2hhcnMuIChMdWthcyBXdW5uZXIpCj4gPiA+ICAgICogQWRk IHRoaXJkIGZhaWx1cmUgbW9kZS4gKEx1a2FzIFd1bm5lcikKPiA+ID4gCj4gPiA+IHYzOgo+ID4g PiAgICAqIE9uIGZiIGFsbG9jIGZhaWx1cmUsIHVucmVmIGdlbSBvYmplY3Qgd2hlcmUgaXQgZ2V0 cyByZWZlZCwKPiA+ID4gICAgICBmaXggZG91YmxlIHVucmVmIGluIHNlcGFyYXRlIGNvbW1pdC4g KFZpbGxlIFN5cmrDpGzDpCkKPiA+ID4gCj4gPiA+IHY0Ogo+ID4gPiAgICAqIExvY2sgc3RydWN0 IG11dGV4IG9uIHVucmVmLiAoQ2hyaXMgV2lsc29uKQo+ID4gPiAKPiA+ID4gdjU6Cj4gPiA+ICAg ICogUmViYXNlIG9uIGRybS1pbnRlbC1uaWdodGx5IDIwMTV5LTA5bS0wNGQtMDhoLTE5bS0zNXMg VVRDLAo+ID4gPiAgICAgIHJlcGhyYXNlIGNvbW1pdCBtZXNzYWdlLiAoSmFuaSBOaWN1bGEpCj4g PiA+IAo+ID4gPiBUZXN0ZWQtYnk6IFBpZXJyZSBNb3JlYXUgPHBpZXJyZS5tb3Jyb3dAZnJlZS5m cj4KPiA+ID4gICAgIFtNQlAgIDUsMyAyMDA5ICBudmlkaWEgOTQwME0gKyA5NjAwTSBHVCAgIHBy ZS1yZXRpbmFdCj4gPiA+IFRlc3RlZC1ieTogUGF1bCBIb3JkaWllbmtvIDxwdnQuZ29yZEBnbWFp bC5jb20+Cj4gPiA+ICAgICBbTUJQICA2LDIgMjAxMCAgaW50ZWwgSUxLICsgbnZpZGlhIEdUMjE2 ICBwcmUtcmV0aW5hXQo+ID4gPiBUZXN0ZWQtYnk6IFdpbGxpYW0gQnJvd24gPHdpbGxpYW1AYmxh Y2toYXRzLm5ldC5hdT4KPiA+ID4gICAgIFtNQlAgIDgsMiAyMDExICBpbnRlbCBTTkIgKyBhbWQg dHVya3MgICAgIHByZS1yZXRpbmFdCj4gPiA+IFRlc3RlZC1ieTogTHVrYXMgV3VubmVyIDxsdWth c0B3dW5uZXIuZGU+Cj4gPiA+ICAgICBbTUJQICA5LDEgMjAxMiAgaW50ZWwgSVZCICsgbnZpZGlh IEdLMTA3ICBwcmUtcmV0aW5hXQo+ID4gPiBUZXN0ZWQtYnk6IEJydW5vIEJpZXJiYXVtZXIgPGJy dW5vQGJpZXJiYXVtZXIubmV0Pgo+ID4gPiAgICAgW01CUCAxMSwzIDIwMTMgIGludGVsIEhTVyAr IG52aWRpYSBHSzEwNyAgcmV0aW5hXQo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogVHZydGtv IFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiA+ID4gRml4ZXM6IDYwYTVjYTAx NWZmZCAoImRybS9pOTE1OiBBZGQgbG9ja2luZyBhcm91bmQKPiA+ID4gICAgIGZyYW1lYnVmZmVy X3JlZmVyZW5jZXMtLSIpCj4gPiA+IFJlcG9ydGVkLWJ5OiBMdWthcyBXdW5uZXIgPGx1a2FzQHd1 bm5lci5kZT4KPiA+ID4gW0x1a2FzOiBDcmVhdGUgdjMgKyB2NCArIHY1IGJhc2VkIG9uIFR2cnRr bydzIHYyXQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBMdWthcyBXdW5uZXIgPGx1a2FzQHd1bm5lci5k ZT4KPiA+ID4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+ID4g PiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ ID4gQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+Cj4gPiA+IC0tLQo+ID4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYyB8IDIwICsrKysrKysrKysrKy0t LS0tLS0tCj4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlv bnMoLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwo+ID4gPiBpbmRl eCA5NjQ3NmQ3Li5lZWUzMzA2IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9mYmRldi5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Zi ZGV2LmMKPiA+ID4gQEAgLTExOSw3ICsxMTksNyBAQCBzdGF0aWMgaW50IGludGVsZmJfYWxsb2Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgaW50 ZWxfZmJkZXYgKmlmYmRldiA9Cj4gPiA+ICAJCWNvbnRhaW5lcl9vZihoZWxwZXIsIHN0cnVjdCBp bnRlbF9mYmRldiwgaGVscGVyKTsKPiA+ID4gLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsK PiA+ID4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IE5VTEw7Cj4gPiA+ICAJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGhlbHBlci0+ZGV2Owo+ID4gPiAgCXN0cnVjdCBkcm1fbW9kZV9m Yl9jbWQyIG1vZGVfY21kID0ge307Cj4gPiA+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKPiA+ID4gQEAgLTEzNyw2ICsxMzcsOCBAQCBzdGF0aWMgaW50IGludGVsZmJfYWxsb2Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiA+ID4gIAltb2RlX2NtZC5waXhlbF9mb3Jt YXQgPSBkcm1fbW9kZV9sZWdhY3lfZmJfZm9ybWF0KHNpemVzLT5zdXJmYWNlX2JwcCwKPiA+ID4g IAkJCQkJCQkgIHNpemVzLT5zdXJmYWNlX2RlcHRoKTsKPiA+ID4gIAo+ID4gPiArCW11dGV4X2xv Y2soJmRldi0+c3RydWN0X211dGV4KTsKPiA+ID4gKwo+ID4gPiAgCXNpemUgPSBtb2RlX2NtZC5w aXRjaGVzWzBdICogbW9kZV9jbWQuaGVpZ2h0Owo+ID4gPiAgCXNpemUgPSBQQUdFX0FMSUdOKHNp emUpOwo+ID4gPiAgCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuKGRldiwgc2l6 ZSk7Cj4gPiA+IEBAIC0xNTgsMTggKzE2MCwyMSBAQCBzdGF0aWMgaW50IGludGVsZmJfYWxsb2Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiA+ID4gIAlyZXQgPSBpbnRlbF9waW5fYW5k X2ZlbmNlX2ZiX29iaihOVUxMLCBmYiwgTlVMTCwgTlVMTCwgTlVMTCk7Cj4gPiA+ICAJaWYgKHJl dCkgewo+ID4gPiAgCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gb2JqOiAlZFxuIiwgcmV0KTsK PiA+ID4gLQkJZ290byBvdXRfZmI7Cj4gPiA+ICsJCWdvdG8gb3V0X3VucmVmOwo+ID4gPiAgCX0K PiA+ID4gIAo+ID4gPiArCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gPiAr Cj4gPiA+ICAJaWZiZGV2LT5mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiA+ID4gIAo+ ID4gPiAgCXJldHVybiAwOwo+ID4gPiAgCj4gPiA+IC1vdXRfZmI6Cj4gPiA+IC0JZHJtX2ZyYW1l YnVmZmVyX3JlbW92ZShmYik7Cj4gPiA+ICBvdXRfdW5yZWY6Cj4gPiA+ICAJZHJtX2dlbV9vYmpl Y3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gPiAKPiA+IElmIGZiIGluaXQgc3VjY2VlZGVk IGl0IHRvb2sgb3ZlciB0aGUgcmVmLCBubz8gU28gZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZSgpCj4g PiB3aWxsIG5vdyBhdHRlbXB0IHRvIHVucmVmIG9uZSB0b28gbWFueSB0aW1lcy4KPiA+IAo+ID4g VGhpcyB0YWtpbmcgb3ZlciByZWZzIHN0dWZmIGlzIGNvbmZ1c2luZy4gTWF5YmUgaXQgd291bGQg YmUgYmV0dGVyIGlmCj4gPiBldmVyeW9uZSBqdXN0IHRvb2sgYW4gZXh0cmEgcmVmIHdoZW4gdGhl eSBzdGFzaCB0aGUgb2JqIHBvaW50ZXIKPiA+IHNvbWV3aGVyZSwgYW5kIGV2ZXJ5b25lIHdvdWxk IHRoZW4gYWx3YXlzIHJlbGVhc2Ugd2hhdGV2ZXIgcmVmIHRoZXkgb3duCj4gPiBhbmQgbm8gbG9u Z2VyIG5lZWQuCj4gPiAKPiA+ID4gIG91dDoKPiA+ID4gKwltdXRleF91bmxvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKPiA+ID4gKwlpZiAoZmIpCj4gPiA+ICsJCWRybV9mcmFtZWJ1ZmZlcl9yZW1v dmUoZmIpOwo+ID4gPiAgCXJldHVybiByZXQ7Cj4gPiA+ICB9Cj4gPiA+ICAKPiAKPiBIbSwgd2h5 IGRvIHlvdSB0aGluayB3ZSB1bnJlZiBvbmUgdG9vIG1hbnkgdGltZXM/Cj4gCj4gQSBiaXQgZnVy dGhlciB1cCBpbiB0aGlzIGZ1bmN0aW9uIHdlIGNhbGwgX19pbnRlbF9mcmFtZWJ1ZmZlcl9jcmVh dGUoKQo+IHdoaWNoIHNldHMgdGhlIHJlZmNvdW50IHRvIDEuIChJdCBjYWxscyBpbnRlbF9mcmFt ZWJ1ZmZlcl9pbml0KCksIHdoaWNoCj4gY2FsbHMgZHJtX2ZyYW1lYnVmZmVyX2luaXQoKSwgd2hp Y2ggY2FsbHMga3JlZl9pbml0KCZmYi0+cmVmY291bnQpLikKPiAKPiBTbyBpZiBpbnRlbF9waW5f YW5kX2ZlbmNlX2ZiX29iaigpIGZhaWxzLCB3ZSBkbyBuZWVkIHRvIHVucmVmZXJlbmNlIGFuZAo+ IHRlYXIgZG93biB0aGUgZmIuIFRodXMsIGRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoKSBzZWVtcyBy aWdodCBoZXJlIHRvIG1lLgo+IAo+IEhvd2V2ZXIsIGJlY2F1c2Ugb2YgeW91ciBvYmplY3Rpb24g SSd2ZSBub3RpY2VkIG5vdyB0aGF0ICJpZiAoZmIpIiBzZWVtcwo+IHRvIGJlIHdyb25nLCBJIHRo aW5rIHRoaXMgc2hvdWxkIGJlICJpZiAoIUlTX0VSUl9PUl9OVUxMKGZiKSkiLgo+IAo+IEJlY2F1 c2UgaWYgX19pbnRlbF9mcmFtZWJ1ZmZlcl9jcmVhdGUoKSBmYWlsZWQsIGZiIHdpbGwgYmUgYSBQ VFJfRVJSKCksCj4gc28gbm90IG51bGwsIGFuZCB3ZSdkIGNhbGwgZHJtX2ZyYW1lYnVmZmVyX3Jl bW92ZSgpIG9uIHRoaXMuIElzIHRoYXQKPiB3aGF0IHlvdSBtZWFudD8KClF1aWNrIGFzaWRlOiBk cm1fZnJhbWVidWZmZXJfcmVtb3ZlIGlzIGZvciBmcmFtZWJ1ZmZlcnMgdGhhdCB1c2Vyc3BhY2UK aGFzIGNyZWF0ZWQuIFNpbmNlIHRoaXMgaXMgaW5pdCBjb2RlIGEgZHJtX2ZyYW1lYnVmZmVyX3Vu cmVmZXJlbmNlIHNob3VsZApiZSBhbGwgd2UgbmVlZCAtIGFuZCBkcm1fZnJhbWVidWZmZXJfcmVt b3ZlIGlzIGdldHRpbmcgc29tZXdoYXQKZGVmZWF0dXJlZC4KLURhbmllbAoKPiAKPiAKPiA+ID4g QEAgLTE4Nyw4ICsxOTIsNiBAQCBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpoZWxwZXIsCj4gPiA+ICAJaW50IHNpemUsIHJldDsKPiA+ID4gIAlib29sIHBy ZWFsbG9jID0gZmFsc2U7Cj4gPiA+ICAKPiA+ID4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9t dXRleCk7Cj4gPiA+IC0KPiA+ID4gIAlpZiAoaW50ZWxfZmIgJiYKPiA+ID4gIAkgICAgKHNpemVz LT5mYl93aWR0aCA+IGludGVsX2ZiLT5iYXNlLndpZHRoIHx8Cj4gPiA+ICAJICAgICBzaXplcy0+ ZmJfaGVpZ2h0ID4gaW50ZWxfZmItPmJhc2UuaGVpZ2h0KSkgewo+ID4gPiBAQCAtMjAzLDcgKzIw Niw3IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhl bHBlciwKPiA+ID4gIAkJRFJNX0RFQlVHX0tNUygibm8gQklPUyBmYiwgYWxsb2NhdGluZyBhIG5l dyBvbmVcbiIpOwo+ID4gPiAgCQlyZXQgPSBpbnRlbGZiX2FsbG9jKGhlbHBlciwgc2l6ZXMpOwo+ ID4gPiAgCQlpZiAocmV0KQo+ID4gPiAtCQkJZ290byBvdXRfdW5sb2NrOwo+ID4gPiArCQkJcmV0 dXJuIHJldDsKPiA+ID4gIAkJaW50ZWxfZmIgPSBpZmJkZXYtPmZiOwo+ID4gPiAgCX0gZWxzZSB7 Cj4gPiA+ICAJCURSTV9ERUJVR19LTVMoInJlLXVzaW5nIEJJT1MgZmJcbiIpOwo+ID4gPiBAQCAt MjE1LDYgKzIxOCw4IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9o ZWxwZXIgKmhlbHBlciwKPiA+ID4gIAlvYmogPSBpbnRlbF9mYi0+b2JqOwo+ID4gPiAgCXNpemUg PSBvYmotPmJhc2Uuc2l6ZTsKPiA+ID4gIAo+ID4gPiArCW11dGV4X2xvY2soJmRldi0+c3RydWN0 X211dGV4KTsKPiA+ID4gKwo+ID4gCj4gPiBJJ20gdGhpbmtpbmcgd2Ugd29uJ3QgZXZlbiBuZWVk IHRoZSBsb2NrIGhlcmUgYW55bW9yZS4gQnV0IG1heWJlIEknbQo+ID4gbWlzc2luZyBzb21ldGhp bmcuCj4gPiAKPiA+ID4gIAlpbmZvID0gZHJtX2ZiX2hlbHBlcl9hbGxvY19mYmkoaGVscGVyKTsK PiA+ID4gIAlpZiAoSVNfRVJSKGluZm8pKSB7Cj4gPiA+ICAJCXJldCA9IFBUUl9FUlIoaW5mbyk7 Cj4gPiA+IEBAIC0yNzYsNyArMjgxLDYgQEAgb3V0X2Rlc3Ryb3lfZmJpOgo+ID4gPiAgb3V0X3Vu cGluOgo+ID4gPiAgCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKG9iaik7Cj4gPiA+ICAJZHJt X2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gPiAKPiA+IEFuZCB0aGlzIHJl ZiB3ZSBkb24ndCBvd24gZWl0aGVyIEFGQUlDUy4KPiAKPiBXaHk/IFdlIGRpZCBjYWxsIGludGVs ZmJfYWxsb2MoKSBhYm92ZSwgc28gaWYgc29tZXRoaW5nIHN1YnNlcXVlbnRseQo+IGdvZXMgd3Jv bmcsIHdlIG5lZWQgdG8gcmV2ZXJ0IHRoZSBzdGVwcyB0aGF0IGludGVsZmJfYWxsb2MoKSBjYXJy aWVkCj4gb3V0LiBUaGUgZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoKSB0aGVyZWZvcmUgc2Vl bXMgcmlnaHQgaGVyZSB0byBtZS4KPiAKPiBIb3dldmVyIEknbSBwdXp6bGVkIHdoeSB3ZSBkb24n dCBjYWxsIGRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoKSB1bmRlcgo+IHRoZSBvdXRfdW5waW46IGxh YmVsLiBBcmVuJ3Qgd2UgbGVha2luZyBhIGZyYW1lYnVmZmVyIGhlcmUgd2l0aG91dCB0aGF0Pwo+ IAo+IE1heWJlIHlvdSdyZSByZWZlcnJpbmcgdG8gdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9u IGVpdGhlciBpbmhlcml0cwo+IHRoZSBCSU9TIGZiIG9yIGNyZWF0ZXMgYSBuZXcgZmIgd2l0aCBp bnRlbGZiX2FsbG9jKCkuIEknbSBub3Qgc3VyZSBpZgo+IHRoZSBjbGVhbnVwIG9uIGVycm9yIGlz IGlkZW50aWNhbCBpbiB0aGVzZSB0d28gY2FzZXMuIE1heWJlIHlvdSBtZWFudAo+IHRoYXQgd2Ug ZG9uJ3Qgb3duIHRoZSByZWYgaW4gdGhlIGNhc2UgdGhhdCB0aGUgZmIgd2FzIGluaGVyaXRlZCBm cm9tCj4gQklPUz8KPiAKPiAKPiBCZXN0IHJlZ2FyZHMsCj4gCj4gTHVrYXMKPiAKPiA+IAo+ID4g PiAtb3V0X3VubG9jazoKPiA+ID4gIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsK PiA+ID4gIAlyZXR1cm4gcmV0Owo+ID4gPiAgfQo+ID4gPiAtLSAKPiA+ID4gMi4xLjAKPiA+IAo+ ID4gLS0gCj4gPiBWaWxsZSBTeXJqw6Rsw6QKPiA+IEludGVsIE9UQwo+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKRGFuaWVsIFZldHRlcgpT b2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK