From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH 09/27] drm/atomic-helper: roll out commit synchronization Date: Thu, 9 Jun 2016 16:22:05 +0200 Message-ID: References: <1465388359-8070-1-git-send-email-daniel.vetter@ffwll.ch> <1465388359-8070-9-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 27CCA6EBE4 for ; Thu, 9 Jun 2016 14:22:08 +0000 (UTC) In-Reply-To: <1465388359-8070-9-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , DRI Development Cc: Tomeu Vizoso , Daniel Stone , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T3AgMDgtMDYtMTYgb20gMTQ6MTkgc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+IFRvIGZhY2lsaXRh dGUgZWFzaWVyIHJldmlld2luZyB0aGlzIGlzIHNwbGl0IG91dCBmcm9tIHRoZSBvdmVyYWxsCj4g bm9uYmxvY2tpbmcgY29tbWl0IHJld29yay4gSXQganVzdCByb2xscyBvdXQgdGhlIGhlbHBlciBm dW5jdGlvbnMKPiBhbmQgdXNlcyB0aGVtIGluIHRoZSBtYWluIGRybV9hdG9taWNfaGVscGVyX2Nv bW1pdCgpIGZ1bmN0aW9uCj4gdG8gbWFrZSBpdCBjbGVhciB3aGVyZSBpbiB0aGUgZmxvdyB0aGV5 J3JlIHVzZWQuCj4KPiBUaGUgbmV4dCBwYXRjaCB3aWxsIGFjdHVhbGx5IHNwbGl0IGRybV9hdG9t aWNfaGVscGVyX2NvbW1pdCgpIGludG8KPiAyIHBpZWNlcywgd2l0aCB0aGUgdGFpbCBiZWluZyBy dW4gYXN5bmNocm9ub3VzbHkgZnJvbSBhIHdvcmtlci4KPgo+IHYyOiBJbXByb3ZlIGtlcm5lbGRv Y3MgKE1hYXJ0ZW4pLgo+Cj4gdjM6IERvbid0IGNvbnZlcnQgRVJFU1RBUlRTWVMgdG8gRUlOVFIg KE1hYXJ0ZW4pLiBBbHNvIGRvbid0IGZhaWwgaWYKPiB0aGUgd2FpdCBzdWNjZWVkIGluIHN0YWxs X2NoZWNrIC0gd2UgbmVlZCB0byBjb252ZXJ0IHRoYXQgY2FzZSAoaXQKPiByZXR1cm5zIHRoZSBy ZW1haW5pbmcgamlmZmllcykgdG8gMCBmb3Igc3VjY2Vzcy4KPgo+IFRlc3RlZC1ieTogVG9tZXUg Vml6b3NvIDx0b21ldS52aXpvc29AY29sbGFib3JhLmNvbT4KPiBDYzogTWFhcnRlbiBMYW5raG9y c3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiBDYzogVG9tZXUgVml6b3Nv IDx0b21ldS52aXpvc29AZ21haWwuY29tPgo+IENjOiBEYW5pZWwgU3RvbmUgPGRhbmllbHNAY29s bGFib3JhLmNvbT4KPiBUZXN0ZWQtYnk6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29t Pgo+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29t Pgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYyB8IDM0NiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0vZHJtX2F0b21p Y19oZWxwZXIuaCAgICAgfCAgIDcgKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDM1MyBpbnNlcnRpb25z KCspCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+IGluZGV4IDMyNmVlMzRjZGJh NC4uNjNlNDY4MjdiMzAzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj X2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBA QCAtMTE1NSw2ICsxMTU1LDEwIEBAIGludCBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKPiAgCWlmIChub25ibG9jaykKPiAgCQlyZXR1cm4gLUVCVVNZOwo+ ICAKPiArCXJldCA9IGRybV9hdG9taWNfaGVscGVyX3NldHVwX2NvbW1pdChzdGF0ZSwgbm9uYmxv Y2spOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAgCXJldCA9IGRybV9hdG9t aWNfaGVscGVyX3ByZXBhcmVfcGxhbmVzKGRldiwgc3RhdGUpOwo+ICAJaWYgKHJldCkKPiAgCQly ZXR1cm4gcmV0Owo+IEBAIC0xMTg1LDE2ICsxMTg5LDIyIEBAIGludCBkcm1fYXRvbWljX2hlbHBl cl9jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCj4gIAlkcm1fYXRvbWljX2hlbHBl cl93YWl0X2Zvcl9mZW5jZXMoZGV2LCBzdGF0ZSk7Cj4gIAo+ICsJZHJtX2F0b21pY19oZWxwZXJf d2FpdF9mb3JfZGVwZW5kZW5jaWVzKHN0YXRlKTsKPiArCj4gIAlkcm1fYXRvbWljX2hlbHBlcl9j b21taXRfbW9kZXNldF9kaXNhYmxlcyhkZXYsIHN0YXRlKTsKPiAgCj4gIAlkcm1fYXRvbWljX2hl bHBlcl9jb21taXRfcGxhbmVzKGRldiwgc3RhdGUsIGZhbHNlKTsKPiAgCj4gIAlkcm1fYXRvbWlj X2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRldiwgc3RhdGUpOwo+ICAKPiArCWRybV9h dG9taWNfaGVscGVyX2NvbW1pdF9od19kb25lKHN0YXRlKTsKPiArCj4gIAlkcm1fYXRvbWljX2hl bHBlcl93YWl0X2Zvcl92YmxhbmtzKGRldiwgc3RhdGUpOwo+ICAKPiAgCWRybV9hdG9taWNfaGVs cGVyX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOwo+ICAKPiArCWRybV9hdG9taWNfaGVscGVy X2NvbW1pdF9jbGVhbnVwX2RvbmUoc3RhdGUpOwo+ICsKPiAgCWRybV9hdG9taWNfc3RhdGVfZnJl ZShzdGF0ZSk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gQEAgLTEyMzksNiArMTI0OSwzMDUgQEAgRVhQ T1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9jb21taXQpOwo+ICAgKiBiZWluZyBkaXNwbGF5 ZWQuCj4gICAqLwo+ICAKPiArc3RhdGljIGludCBzdGFsbF9jaGVja3Moc3RydWN0IGRybV9jcnRj ICpjcnRjLCBib29sIG5vbmJsb2NrKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfY29tbWl0ICpj b21taXQsICpzdGFsbF9jb21taXQgPSBOVUxMOwo+ICsJYm9vbCBjb21wbGV0ZWQgPSB0cnVlOwo+ ICsJaW50IGksIHJldCA9IDA7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZjcnRjLT5jb21taXRfbG9jayk7 Cj4gKwlpID0gMDsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY29tbWl0LCAmY3J0Yy0+Y29tbWl0 X2xpc3QsIGNvbW1pdF9lbnRyeSkgewo+ICsJCWlmIChpID09IDApIHsKPiArCQkJY29tcGxldGVk ID0gdHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oJmNvbW1pdC0+ZmxpcF9kb25lKTsKPiArCQkJLyog VXNlcnNwYWNlIGlzIG5vdCBhbGxvd2VkIHRvIGdldCBhaGVhZCBvZiB0aGUgcHJldmlvdXMKPiAr CQkJICogY29tbWl0IHdpdGggbm9uYmxvY2tpbmcgb25lcy4gKi8KPiArCQkJaWYgKCFjb21wbGV0 ZWQgJiYgbm9uYmxvY2spIHsKPiArCQkJCXNwaW5fdW5sb2NrKCZjcnRjLT5jb21taXRfbG9jayk7 Cj4gKwkJCQlyZXR1cm4gLUVCVVNZOwo+ICsJCQl9Cj4gKwkJfSBlbHNlIGlmIChpID09IDEpIHsK PiArCQkJc3RhbGxfY29tbWl0ID0gY29tbWl0Owo+ICsJCQlkcm1fY3J0Y19jb21taXRfZ2V0KHN0 YWxsX2NvbW1pdCk7Cj4gKwkJfSBlbHNlCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlpKys7Cj4gKwl9 Cj4gKwlzcGluX3VubG9jaygmY3J0Yy0+Y29tbWl0X2xvY2spOwo+ICsKPiArCWlmICghc3RhbGxf Y29tbWl0KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCS8qIFdlIGRvbid0IHdhbnQgdG8gbGV0IGNv bW1pdHMgZ2V0IGFoZWFkIG9mIGNsZWFudXAgd29yayB0b28gbXVjaCwKPiArCSAqIHN0YWxsaW5n IG9uIDJuZCBwcmV2aW91cyBjb21taXQgbWVhbnMgdHJpcGxlLWJ1ZmZlciB3b24ndCBldmVyIHN0 YWxsLgo+ICsJICovCj4gKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVf dGltZW91dCgmY29tbWl0LT5jbGVhbnVwX2RvbmUsCj4gKwkJCQkJCQkxMCpIWik7Cj4gKwlpZiAo cmV0ID09IDApCj4gKwkJRFJNX0VSUk9SKCJbQ1JUQzolZDolc10gY2xlYW51cF9kb25lIHRpbWVk IG91dFxuIiwKPiArCQkJICBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lKTsKPiArCj4gKwlkcm1f Y3J0Y19jb21taXRfcHV0KHN0YWxsX2NvbW1pdCk7Cj4gKwo+ICsJcmV0dXJuIHJldCA8IDAgPyBy ZXQgOiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX2F0b21pY19oZWxwZXJfc2V0dXBfY29t bWl0IC0gc2V0dXAgcG9zc2libHkgbm9uYmxvY2tpbmcgY29tbWl0Cj4gKyAqIEBzdGF0ZTogbmV3 IG1vZGVzZXQgc3RhdGUgdG8gYmUgY29tbWl0dGVkCj4gKyAqIEBub25ibG9jazogd2hldGhlciBu b25ibG9ja2luZyBiZWhhdmlvciBpcyByZXF1ZXN0ZWQuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rp b24gcHJlcGFyZXMgQHN0YXRlIHRvIGJlIHVzZWQgYnkgdGhlIGF0b21pYyBoZWxwZXIncyBzdXBw b3J0IGZvcgo+ICsgKiBub25ibG9ja2luZyBjb21taXRzLiBEcml2ZXJzIHVzaW5nIHRoZSBub25i bG9ja2luZyBjb21taXQgaW5mcmFzdHJ1Y3R1cmUKPiArICogc2hvdWxkIGFsd2F5cyBjYWxsIHRo aXMgZnVuY3Rpb24gZnJvbSB0aGVpciAtPmF0b21pY19jb21taXQgaG9vay4KPiArICoKPiArICog VG8gYmUgYWJsZSB0byB1c2UgdGhpcyBzdXBwb3J0IGRyaXZlcnMgbmVlZCB0byB1c2UgYSBmZXcg bW9yZSBoZWxwZXIKPiArICogZnVuY3Rpb25zLiBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9k ZXBlbmRlbmNpZXMoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUKPiArICogYWN0dWFsbHkgY29tbWl0 dGluZyB0aGUgaGFyZHdhcmUgc3RhdGUsIGFuZCBmb3Igbm9uYmxvY2tpbmcgY29tbWl0cyB0aGlz IGNhbGwKPiArICogbXVzdCBiZSBwbGFjZWQgaW4gdGhlIGFzeW5jIHdvcmtlci4gU2VlIGFsc28g ZHJtX2F0b21pY19oZWxwZXJfc3dhcF9zdGF0ZSgpCj4gKyAqIGFuZCBpdCdzIHN0YWxsIHBhcmFt ZXRlciwgZm9yIHdoZW4gYSBkcml2ZXIncyBjb21taXQgaG9va3MgbG9vayBhdCB0aGUKPiArICog LT5zdGF0ZSBwb2ludGVycyBvZiBzdHJ1Y3QgJmRybV9jcnRjLCAmZHJtX3BsYW5lIG9yICZkcm1f Y29ubmVjdG9yIGRpcmVjdGx5Lgo+ICsgKgo+ICsgKiBDb21wbGV0aW9uIG9mIHRoZSBoYXJkd2Fy ZSBjb21taXQgc3RlcCBtdXN0IGJlIHNpZ25hbGxlZCB1c2luZwo+ICsgKiBkcm1fYXRvbWljX2hl bHBlcl9jb21taXRfaHdfZG9uZSgpLiBBZnRlciB0aGlzIHN0ZXAgdGhlIGRyaXZlciBpcyBub3Qg YWxsb3dlZAo+ICsgKiB0byByZWFkIG9yIGNoYW5nZSBhbnkgcGVybWFuZW50IHNvZnR3YXJlIG9y IGhhcmR3YXJlIG1vZGVzZXQgc3RhdGUuIFRoZSBvbmx5Cj4gKyAqIGV4Y2VwdGlvbiBpcyBzdGF0 ZSBwcm90ZWN0ZWQgYnkgb3RoZXIgbWVhbnMgdGhhbiAmZHJtX21vZGVzZXRfbG9jayBsb2Nrcy4K PiArICogT25seSB0aGUgZnJlZSBzdGFuZGluZyBAc3RhdGUgd2l0aCBwb2ludGVycyB0byB0aGUg b2xkIHN0YXRlIHN0cnVjdHVyZXMgY2FuCj4gKyAqIGJlIGluc3BlY3RlZCwgZS5nLiB0byBjbGVh biB1cCBvbGQgYnVmZmVycyB1c2luZwo+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9jbGVhbnVwX3Bs YW5lcygpLgo+ICsgKgo+ICsgKiBBdCB0aGUgdmVyeSBlbmQsIGJlZm9yZSBjbGVhbmluZyB1cCBA c3RhdGUgZHJpdmVycyBtdXN0IGNhbGwKPiArICogZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X2Ns ZWFudXBfZG9uZSgpLgo+ICsgKgo+ICsgKiBUaGlzIGlzIGFsbCBpbXBsZW1lbnRlZCBieSBpbiBk cm1fYXRvbWljX2hlbHBlcl9jb21taXQoKSwgZ2l2aW5nIGRyaXZlcnMgYQo+ICsgKiBjb21wbGV0 ZSBhbmQgZXNheS10by11c2UgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYXRvbWljX2Nv bW1pdCgpIGhvb2suCj4gKyAqCj4gKyAqIFRoZSB0cmFja2luZyBvZiBhc3luY2hyb25vdXNseSBl eGVjdXRlZCBhbmQgc3RpbGwgcGVuZGluZyBjb21taXRzIGlzIGRvbmUKPiArICogdXNpbmcgdGhl IGNvcmUgc3RydWN0dXJlICZkcm1fY3J0Y19jb21taXQuCj4gKyAqCj4gKyAqIEJ5IGRlZmF1bHQg dGhlcmUncyBubyBuZWVkIHRvIGNsZWFuIHVwIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhpcyBm dW5jdGlvbgo+ICsgKiBleHBsaWNpdGx5OiBkcm1fYXRvbWljX3N0YXRlX2RlZmF1bHRfY2xlYXIo KSB3aWxsIHRha2UgY2FyZSBvZiB0aGF0Cj4gKyAqIGF1dG9tYXRpY2FsbHkuCj4gKyAqCj4gKyAq IFJldHVybnM6Cj4gKyAqCj4gKyAqIDAgb24gc3VjY2Vzcy4gLUVCVVNZIHdoZW4gdXNlcnNwYWNl IHNjaGVkdWxlcyBub25ibG9ja2luZyBjb21taXRzIHRvbyBmYXN0LAo+ICsgKiAtRU5PTUVNIG9u IGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIC1FSU5UUiB3aGVuIGEgc2lnbmFsIGlzIHBlbmRpbmcu Cj4gKyAqLwo+ICtpbnQgZHJtX2F0b21pY19oZWxwZXJfc2V0dXBfY29tbWl0KHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSwKPiArCQkJCSAgIGJvb2wgbm9uYmxvY2spCj4gK3sKPiArCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZTsKPiArCXN0cnVjdCBkcm1fY3J0Y19jb21taXQgKmNvbW1pdDsKPiArCWludCBpLCByZXQ7Cj4g Kwo+ICsJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkg ewo+ICsJCWNvbW1pdCA9IGt6YWxsb2Moc2l6ZW9mKCpjb21taXQpLCBHRlBfS0VSTkVMKTsKPiAr CQlpZiAoIWNvbW1pdCkKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJCWluaXRfY29tcGxl dGlvbigmY29tbWl0LT5mbGlwX2RvbmUpOwo+ICsJCWluaXRfY29tcGxldGlvbigmY29tbWl0LT5o d19kb25lKTsKPiArCQlpbml0X2NvbXBsZXRpb24oJmNvbW1pdC0+Y2xlYW51cF9kb25lKTsKPiAr CQlJTklUX0xJU1RfSEVBRCgmY29tbWl0LT5jb21taXRfZW50cnkpOwo+ICsJCWtyZWZfaW5pdCgm Y29tbWl0LT5yZWYpOwo+ICsJCWNvbW1pdC0+Y3J0YyA9IGNydGM7Cj4gKwo+ICsJCXN0YXRlLT5j cnRjc1tpXS5jb21taXQgPSBjb21taXQ7Cj4gKwo+ICsJCXJldCA9IHN0YWxsX2NoZWNrcyhjcnRj LCBub25ibG9jayk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJLyog RHJpdmVycyBvbmx5IHNlbmQgb3V0IGV2ZW50cyB3aGVuIGF0IGxlYXN0IGVpdGhlciBjdXJyZW50 IG9yCj4gKwkJICogbmV3IENSVEMgc3RhdGUgaXMgYWN0aXZlLiBDb21wbGV0ZSByaWdodCBhd2F5 IGlmIGV2ZXJ5dGhpbmcKPiArCQkgKiBzdGF5cyBvZmYuICovCj4gKwkJaWYgKCFjcnRjLT5zdGF0 ZS0+YWN0aXZlICYmICFjcnRjX3N0YXRlLT5hY3RpdmUpIHsKPiArCQkJY29tcGxldGVfYWxsKCZj b21taXQtPmZsaXBfZG9uZSk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJLyogTGVn YWN5IGN1cnNvciB1cGRhdGVzIGFyZSBmdWxseSB1bnN5bmNlZC4gKi8KPiArCQlpZiAoc3RhdGUt PmxlZ2FjeV9jdXJzb3JfdXBkYXRlKSB7Cj4gKwkJCWNvbXBsZXRlX2FsbCgmY29tbWl0LT5mbGlw X2RvbmUpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWlmICghY3J0Y19zdGF0ZS0+ ZXZlbnQpIHsKPiArCQkJY29tbWl0LT5ldmVudCA9IGt6YWxsb2Moc2l6ZW9mKCpjb21taXQtPmV2 ZW50KSwKPiArCQkJCQkJR0ZQX0tFUk5FTCk7Cj4gKwkJCWlmICghY29tbWl0LT5ldmVudCkKPiAr CQkJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCQkJY3J0Y19zdGF0ZS0+ZXZlbnQgPSBjb21taXQt PmV2ZW50Owo+ICsJCX0KPiArCj4gKwkJY3J0Y19zdGF0ZS0+ZXZlbnQtPmJhc2UuY29tcGxldGlv biA9ICZjb21taXQtPmZsaXBfZG9uZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX3NldHVwX2NvbW1pdCk7Cj4gKwo+ICsKPiAr c3RhdGljIHN0cnVjdCBkcm1fY3J0Y19jb21taXQgKnByZWNlZWRpbmdfY29tbWl0KHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9jcnRjX2NvbW1pdCAqY29tbWl0Owo+ ICsJaW50IGkgPSAwOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY29tbWl0LCAmY3J0Yy0+ Y29tbWl0X2xpc3QsIGNvbW1pdF9lbnRyeSkgewo+ICsJCS8qIHNraXAgdGhlIGZpcnN0IGVudHJ5 LCB0aGF0J3MgdGhlIGN1cnJlbnQgY29tbWl0ICovCj4gKwkJaWYgKGkgPT0gMSkKPiArCQkJcmV0 dXJuIGNvbW1pdDsKPiArCQlpKys7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9kZXBlbmRlbmNpZXMgLSB3 YWl0IGZvciByZXF1aXJlZCBwcmVjZWVkaW5nIGNvbW1pdHMKPiArICogQHN0YXRlOiBuZXcgbW9k ZXNldCBzdGF0ZSB0byBiZSBjb21taXR0ZWQKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiB3YWl0 cyBmb3IgYWxsIHByZWNlZWRpbmcgY29tbWl0cyB0aGF0IHRvdWNoIHRoZSBzYW1lIENSVEMgYXMK PiArICogQHN0YXRlIHRvIGJvdGggYmUgY29tbWl0dGVkIHRvIHRoZSBoYXJkd2FyZSAoYXMgc2ln bmFsbGVkIGJ5Cj4gKyAqIGRybV9hdG9taWNfSGVscGVyX2NvbW1pdF9od19kb25lKSBhbmQgZXhl Y3V0ZWQgYnkgdGhlIGhhcmR3YXJlIChhcyBzaWduYWxsZWQKXmV4dHJhIGNhcCBoZXJlCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=