From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 16/39] drm/i915/execlists: Virtual engine bonding Date: Thu, 14 Mar 2019 17:26:19 +0000 Message-ID: <6887ca35-33cc-a5ac-6b6c-7ee188473594@linux.intel.com> References: <20190313144401.17735-1-chris@chris-wilson.co.uk> <20190313144401.17735-16-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7F6406E2F6 for ; Thu, 14 Mar 2019 17:26:22 +0000 (UTC) In-Reply-To: <20190313144401.17735-16-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDEzLzAzLzIwMTkgMTQ6NDMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBTb21lIHVzZXJzIHJl cXVpcmUgdGhhdCB3aGVuIGEgbWFzdGVyIGJhdGNoIGlzIGV4ZWN1dGVkIG9uIG9uZSBwYXJ0aWN1 bGFyCj4gZW5naW5lLCBhIGNvbXBhbmlvbiBiYXRjaCBpcyBydW4gc2ltdWx0YW5lb3VzbHkgb24g YSBzcGVjaWZpYyBzbGF2ZQo+IGVuZ2luZS4gRm9yIHRoaXMgcHVycG9zZSwgd2UgaW50cm9kdWNl IHZpcnR1YWwgZW5naW5lIGJvbmRpbmcsIGFsbG93aW5nCj4gbWFwcyBvZiBtYXN0ZXI6c2xhdmVz IHRvIGJlIGNvbnN0cnVjdGVkIHRvIGNvbnN0cmFpbiB3aGljaCBwaHlzaWNhbAo+IGVuZ2luZXMg YSB2aXJ0dWFsIGVuZ2luZSBtYXkgc2VsZWN0IGdpdmVuIGEgZmVuY2Ugb24gYSBtYXN0ZXIgZW5n aW5lLgo+IAo+IEZvciB0aGUgbW9tZW50LCB3ZSBjb250aW51ZSB0byBpZ25vcmUgdGhlIGlzc3Vl IG9mIHByZWVtcHRpb24gZGVmZXJyaW5nCj4gdGhlIG1hc3RlciByZXF1ZXN0IGZvciBsYXRlci4g SWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB0aGVuIGFsc28gcmVtb3ZlCj4gdGhlIHNsYXZlIGFu ZCBydW4gc29tZXRoaW5nIGVsc2UgcmF0aGVyIHRoYW4gaGF2ZSBpdCBzdGFsbCB0aGUgcGlwZWxp bmUuCj4gV2l0aCBsb2FkIGJhbGFuY2luZywgd2Ugc2hvdWxkIGJlIGFibGUgdG8gbW92ZSB3b3Jr bG9hZCBhcm91bmQgaXQsIGJ1dAo+IHRoZXJlIGlzIGEgc2ltaWxhciBzdGFsbCBvbiB0aGUgbWFz dGVyIHBpcGVsaW5lIHdoaWxlIGl0IG1heSB3YWl0IGZvcgo+IHRoZSBzbGF2ZSB0byBiZSBleGVj dXRlZC4gQXQgdGhlIGNvc3Qgb2YgbW9yZSBsYXRlbmN5IGZvciB0aGUgYm9uZGVkCj4gcmVxdWVz dCwgaXQgbWF5IGJlIGludGVyZXN0aW5nIHRvIGxhdW5jaCBib3RoIG9uIHRoZWlyIGVuZ2luZXMg aW4KPiBsb2Nrc3RlcC4gKEJ1YmJsZXMgYWJvdW5kLikKPiAKPiBPcGVuczogQWxzbyB3aGF0IGFi b3V0IGJvbmRpbmcgYW4gZW5naW5lIGFzIGl0cyBvd24gbWFzdGVyPyBJdCBkb2Vzbid0Cj4gYnJl YWsgYW55dGhpbmcgaW50ZXJuYWxseSwgc28gYWxsb3cgdGhlIHNpbGxpbmVzcy4KPiAKPiB2Mjog RW1hbmNpcGF0ZSB0aGUgYm9uZHMKPiB2MzogQ291cGxlIGluIGRlbGF5ZWQgc2NoZWR1bGluZyBm b3IgdGhlIHNlbGZ0ZXN0cwo+IHY0OiBIYW5kbGUgaW52YWxpZCBtdXR1YWxseSBleGNsdXNpdmUg Ym9uZGluZwo+IHY1OiBNZW50aW9uIHdoYXQgdGhlIHVhcGkgZG9lcwo+IAo+IFNpZ25lZC1vZmYt Ynk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jICAgICAgIHwgIDUwICsrKysrCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyAgICAgICAgICAgfCAgIDEgKwo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmggICAgICAgICAgIHwgICAxICsK PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV90eXBlcy5oICAgICB8ICAgNyAr Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgICAgICAgICAgICAgfCAxNDMg KysrKysrKysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oICAgICAg ICAgICAgICB8ICAgNCArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxf bHJjLmMgICAgfCAxODUgKysrKysrKysrKysrKysrKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmMgfCAgIDMgKwo+ICAgaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oICAgICAgICAgICAgICAgICAgIHwgIDMzICsrKysKPiAgIDkgZmlsZXMgY2hhbmdl ZCwgNDI3IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29u dGV4dC5jCj4gaW5kZXggOTg3NjNkM2YxYjEyLi4wZWM3OGMzODY0NzMgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gQEAgLTE1MTMsOCArMTUxMyw1OCBAQCBz ZXRfZW5naW5lc19fbG9hZF9iYWxhbmNlKHN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5zaW9uIF9fdXNl ciAqYmFzZSwgdm9pZCAqZGF0YSkKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICtzdGF0aWMg aW50Cj4gK3NldF9lbmdpbmVzX19ib25kKHN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5zaW9uIF9fdXNl ciAqYmFzZSwgdm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IGk5MTVfY29udGV4dF9lbmdpbmVz X2JvbmQgX191c2VyICpleHQgPQo+ICsJCWNvbnRhaW5lcl9vZl91c2VyKGJhc2UsIHR5cGVvZigq ZXh0KSwgYmFzZSk7Cj4gKwljb25zdCBzdHJ1Y3Qgc2V0X2VuZ2luZXMgKnNldCA9IGRhdGE7Cj4g KwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICptYXN0ZXI7Cj4gKwl1MzIgY2xhc3MsIGluc3RhbmNl LCBzaWJsaW5nczsKCnUxNiBjbGFzcywgaW5zdGFuY2UgZm9yIG5vIHJlYWwgZ2Fpbi4KCj4gKwl1 MTYgaWR4Owo+ICsJaW50IGVycjsKPiArCj4gKwlpZiAoZ2V0X3VzZXIoaWR4LCAmZXh0LT52aXJ0 dWFsX2luZGV4KSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlpZiAoaWR4ID49IHNldC0+ bmVuZ2luZSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZHggPSBhcnJheV9pbmRleF9u b3NwZWMoaWR4LCBzZXQtPm5lbmdpbmUpOwo+ICsJaWYgKCFzZXQtPmVuZ2luZXNbaWR4XSkKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkvKgo+ICsJICogQSBub24tdmlydHVhbCBlbmdpbmUg aGFzIDAgc2libGluZ3MgdG8gY2hvb3NlIGJldHdlZW47IGFuZCBzdWJtaXQKPiArCSAqIGZlbmNl IHdpbGwgYWx3YXlzIGJlIGRpcmVjdGVkIHRvIHRoZSBvbmUgZW5naW5lLgo+ICsJICovCj4gKwlp ZiAoIWludGVsX2VuZ2luZV9pc192aXJ0dWFsKHNldC0+ZW5naW5lc1tpZHhdKSkKPiArCQlyZXR1 cm4gMDsKPiArCj4gKwllcnIgPSBjaGVja191c2VyX21ieigmZXh0LT5tYnopOwo+ICsJaWYgKGVy cikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWlmIChnZXRfdXNlcihjbGFzcywgJmV4dC0+bWFz dGVyX2NsYXNzKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlpZiAoZ2V0X3VzZXIoaW5z dGFuY2UsICZleHQtPm1hc3Rlcl9pbnN0YW5jZSkpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ ICsJbWFzdGVyID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKHNldC0+Y3R4LT5pOTE1LCBjbGFz cywgaW5zdGFuY2UpOwo+ICsJaWYgKCFtYXN0ZXIpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ ICsJaWYgKGdldF91c2VyKHNpYmxpbmdzLCAmZXh0LT5zaWJsaW5nX21hc2spKQo+ICsJCXJldHVy biAtRUZBVUxUOwo+ICsKPiArCXJldHVybiBpbnRlbF92aXJ0dWFsX2VuZ2luZV9hdHRhY2hfYm9u ZChzZXQtPmVuZ2luZXNbaWR4XSwKPiArCQkJCQkJbWFzdGVyLCBzaWJsaW5ncyk7Cj4gK30KPiAr Cj4gICBzdGF0aWMgY29uc3QgaTkxNV91c2VyX2V4dGVuc2lvbl9mbiBzZXRfZW5naW5lc19fZXh0 ZW5zaW9uc1tdID0gewo+ICAgCVtJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNF XSA9IHNldF9lbmdpbmVzX19sb2FkX2JhbGFuY2UsCj4gKwlbSTkxNV9DT05URVhUX0VOR0lORVNf RVhUX0JPTkRdID0gc2V0X2VuZ2luZXNfX2JvbmQsCj4gICB9Owo+ICAgCj4gICBzdGF0aWMgaW50 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiBpbmRleCAwYTQ2ZjgxMTNmNWMuLjlj ZTcxMGJhYTQ1MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVl c3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4gQEAgLTc0 Myw2ICs3NDMsNyBAQCBpOTE1X3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgCXJxLT5iYXRjaCA9IE5V TEw7Cj4gICAJcnEtPmNhcHR1cmVfbGlzdCA9IE5VTEw7Cj4gICAJcnEtPndhaXRib29zdCA9IGZh bHNlOwo+ICsJcnEtPmV4ZWN1dGlvbl9tYXNrID0gfjB1Owo+ICAgCj4gICAJLyoKPiAgIAkgKiBS ZXNlcnZlIHNwYWNlIGluIHRoZSByaW5nIGJ1ZmZlciBmb3IgYWxsIHRoZSBjb21tYW5kcyByZXF1 aXJlZCB0bwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3Qu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oCj4gaW5kZXggZDRmNmIyOTQw MTMwLi44NjJiMjU5MzBkZTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZXF1ZXN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaAo+ IEBAIC0xNDUsNiArMTQ1LDcgQEAgc3RydWN0IGk5MTVfcmVxdWVzdCB7Cj4gICAJICovCj4gICAJ c3RydWN0IGk5MTVfc2NoZWRfbm9kZSBzY2hlZDsKPiAgIAlzdHJ1Y3QgaTkxNV9kZXBlbmRlbmN5 IGRlcDsKPiArCXVuc2lnbmVkIGludCBleGVjdXRpb25fbWFzazsKPiAgIAo+ICAgCS8qCj4gICAJ ICogQSBjb252ZW5pZW5jZSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGJyZWFkY3J1bWIgdmFsdWUg c3RvcmVkIGluCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2lu ZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX3R5cGVzLmgKPiBp bmRleCAzMjJmYmRhNjUxOTAuLjFkYTM1NTA5ZDgxMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfdHlwZXMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2VuZ2luZV90eXBlcy5oCj4gQEAgLTM4NCw2ICszODQsMTMgQEAgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyB7Cj4gICAJICovCj4gICAJdm9pZAkJKCpzdWJtaXRfcmVxdWVzdCkoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpOwo+ICAgCj4gKwkvKgo+ICsJICogQ2FsbGVkIG9uIHNpZ25h bGluZyBvZiBhIFNVQk1JVF9GRU5DRSwgcGFzc2luZyBhbG9uZyB0aGUgc2lnbmFsaW5nCj4gKwkg KiByZXF1ZXN0IGRvd24gdG8gdGhlIGJvbmRlZCBwYWlycy4KPiArCSAqLwo+ICsJdm9pZCAgICAg ICAgICAgICgqYm9uZF9leGVjdXRlKShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkJCQlz dHJ1Y3QgZG1hX2ZlbmNlICpzaWduYWwpOwo+ICsKPiAgIAkvKgo+ICAgCSAqIENhbGwgd2hlbiB0 aGUgcHJpb3JpdHkgb24gYSByZXF1ZXN0IGhhcyBjaGFuZ2VkIGFuZCBpdCBhbmQgaXRzCj4gICAJ ICogZGVwZW5kZW5jaWVzIG1heSBuZWVkIHJlc2NoZWR1bGluZy4gTm90ZSB0aGUgcmVxdWVzdCBp dHNlbGYgbWF5Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCBkNTRiN2NjNDM2MzMu Ljc5YWI0YmM1NDNmZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gQEAgLTE5MSw2 ICsxOTEsMTggQEAgc3RydWN0IHZpcnR1YWxfZW5naW5lIHsKPiAgIAkJaW50IHByaW87Cj4gICAJ fSBub2Rlc1tJOTE1X05VTV9FTkdJTkVTXTsKPiAgIAo+ICsJLyoKPiArCSAqIEtlZXAgdHJhY2sg b2YgYm9uZGVkIHBhaXJzIC0tIHJlc3RyaWN0aW9ucyB1cG9uIG9uIG91ciBzZWxlY3Rpb24KPiAr CSAqIG9mIHBoeXNpY2FsIGVuZ2luZXMgYW55IHBhcnRpY3VsYXIgcmVxdWVzdCBtYXkgYmUgc3Vi bWl0dGVkIHRvLgo+ICsJICogSWYgd2UgcmVjZWl2ZSBhIHN1Ym1pdC1mZW5jZSBmcm9tIGEgbWFz dGVyIGVuZ2luZSwgd2Ugd2lsbCBvbmx5Cj4gKwkgKiB1c2Ugb25lIG9mIHNpYmxpbmdfbWFzayBw aHlzaWNhbCBlbmdpbmVzLgo+ICsJICovCj4gKwlzdHJ1Y3QgdmVfYm9uZCB7Cj4gKwkJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqbWFzdGVyOwo+ICsJCXVuc2lnbmVkIGludCBzaWJsaW5nX21hc2s7 Cj4gKwl9ICpib25kczsKPiArCXVuc2lnbmVkIGludCBuYm9uZDsKCkknbGwgdGVtcHQgdG8gcGx1 cmFsaXplIHRoaXMgYXMgd2VsbC4KCj4gKwo+ICAgCS8qIEFuZCBmaW5hbGx5LCB3aGljaCBwaHlz aWNhbCBlbmdpbmVzIHRoaXMgdmlydHVhbCBlbmdpbmUgbWFwcyBvbnRvLiAqLwo+ICAgCXVuc2ln bmVkIGludCBjb3VudDsKPiAgIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5nc1swXTsK PiBAQCAtMzE1Niw2ICszMTY4LDggQEAgc3RhdGljIHZvaWQgdmlydHVhbF9jb250ZXh0X2Rlc3Ry b3koc3RydWN0IGtyZWYgKmtyZWYpCj4gICAJaWYgKHZlLT5jb250ZXh0LnN0YXRlKQo+ICAgCQlf X2V4ZWNsaXN0c19jb250ZXh0X2ZpbmkoJnZlLT5jb250ZXh0KTsKPiAgIAo+ICsJa2ZyZWUodmUt PmJvbmRzKTsKPiArCj4gICAJaTkxNV90aW1lbGluZV9maW5pKCZ2ZS0+YmFzZS50aW1lbGluZSk7 Cj4gICAJa2ZyZWUodmUpOwo+ICAgfQo+IEBAIC0zMjA3LDkgKzMyMjEsMjggQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0X29wcyB2aXJ0dWFsX2NvbnRleHRfb3BzID0gewo+ICAg CS5kZXN0cm95ID0gdmlydHVhbF9jb250ZXh0X2Rlc3Ryb3ksCj4gICB9Owo+ICAgCj4gK3N0YXRp YyB2b2lkIHZpcnR1YWxfc3VibWl0X2Vycm9yKHN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUpCj4g K3sKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gZmV0Y2hfYW5kX3plcm8oJnZlLT5yZXF1 ZXN0KTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IHZlLT5zaWJsaW5nc1sw XTsgLyogYW55IHZpY3RpbSAqLwo+ICsKPiArCWRtYV9mZW5jZV9zZXRfZXJyb3IoJnJxLT5mZW5j ZSwgLUVOT0RFVik7Cj4gKwlpOTE1X3JlcXVlc3RfbWFya19jb21wbGV0ZShycSk7Cj4gKwo+ICsJ c3Bpbl9sb2NrKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2spOwo+ICsJcnEtPmVuZ2luZSA9IGVuZ2lu ZTsKPiArCj4gKwlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpOwo+ICsJLyogbW92ZSB0byBzdGFy dCBvZiBsaXN0IHRvIGF2b2lkIHVud2luZCBjb21wbGljYXRpb25zICovCj4gKwlsaXN0X21vdmUo JnJxLT5saW5rLCAmZW5naW5lLT50aW1lbGluZS5yZXF1ZXN0cyk7Cj4gKwo+ICsJc3Bpbl91bmxv Y2soJmVuZ2luZS0+dGltZWxpbmUubG9jayk7Cj4gK30KPiArCj4gICBzdGF0aWMgdm9pZCB2aXJ0 dWFsX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCj4gICB7Cj4gICAJc3Ry dWN0IHZpcnR1YWxfZW5naW5lICogY29uc3QgdmUgPSAoc3RydWN0IHZpcnR1YWxfZW5naW5lICop ZGF0YTsKPiArCXVuc2lnbmVkIGludCBtYXNrOwo+ICAgCXVuc2lnbmVkIGludCBuOwo+ICAgCWlu dCBwcmlvOwo+ICAgCj4gQEAgLTMyMTgsMTIgKzMyNTEsMzUgQEAgc3RhdGljIHZvaWQgdmlydHVh bF9zdWJtaXNzaW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQo+ICAgCQlyZXR1cm47Cj4g ICAKPiAgIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwo+ICsKPiArCW1hc2sgPSAwOwo+ICsJc3Bpbl9s b2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKPiArCWlmICh2ZS0+cmVxdWVzdCkgewo+ICsJ CW1hc2sgPSB2ZS0+cmVxdWVzdC0+ZXhlY3V0aW9uX21hc2s7Cj4gKwkJaWYgKHVubGlrZWx5KCFt YXNrKSkKPiArCQkJdmlydHVhbF9zdWJtaXRfZXJyb3IodmUpOwoKV2hhdCBjbGVhcnMgdGhlIG1h c2s/IEFuZCB2aXJ0dWFsX3N1Ym1pdF9lcnJvciBmYWlscyBpdCB0aGVuPwoKPiArCX0KPiArCXNw aW5fdW5sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKPiArCWlmICghbWFzaykKPiArCQln b3RvIG91dF9pcnE7Cj4gKwo+ICAgCWZvciAobiA9IDA7IFJFQURfT05DRSh2ZS0+cmVxdWVzdCkg JiYgbiA8IHZlLT5jb3VudDsgbisrKSB7Cj4gICAJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNp YmxpbmcgPSB2ZS0+c2libGluZ3Nbbl07Cj4gICAJCXN0cnVjdCB2ZV9ub2RlICogY29uc3Qgbm9k ZSA9ICZ2ZS0+bm9kZXNbc2libGluZy0+aWRdOwo+ICAgCQlzdHJ1Y3QgcmJfbm9kZSAqKnBhcmVu dCwgKnJiOwo+ICAgCQlib29sIGZpcnN0Owo+ICAgCj4gKwkJaWYgKHVubGlrZWx5KCEobWFzayAm IHNpYmxpbmctPm1hc2spKSkgewo+ICsJCQlpZiAoIVJCX0VNUFRZX05PREUoJm5vZGUtPnJiKSkg ewo+ICsJCQkJc3Bpbl9sb2NrKCZzaWJsaW5nLT50aW1lbGluZS5sb2NrKTsKPiArCQkJCXJiX2Vy YXNlX2NhY2hlZCgmbm9kZS0+cmIsCj4gKwkJCQkJCSZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVh bCk7Cj4gKwkJCQlSQl9DTEVBUl9OT0RFKCZub2RlLT5yYik7Cj4gKwkJCQlzcGluX3VubG9jaygm c2libGluZy0+dGltZWxpbmUubG9jayk7Cj4gKwkJCX0KPiArCQkJY29udGludWU7Cj4gKwkJfQo+ ICsKPiAgIAkJc3Bpbl9sb2NrKCZzaWJsaW5nLT50aW1lbGluZS5sb2NrKTsKPiAgIAo+ICAgCQlp ZiAoIVJCX0VNUFRZX05PREUoJm5vZGUtPnJiKSkgewo+IEBAIC0zMjcwLDYgKzMzMjYsNyBAQCBz dGF0aWMgdm9pZCB2aXJ0dWFsX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEp Cj4gICAKPiAgIAkJc3Bpbl91bmxvY2soJnNpYmxpbmctPnRpbWVsaW5lLmxvY2spOwo+ICAgCX0K PiArb3V0X2lycToKPiAgIAlsb2NhbF9pcnFfZW5hYmxlKCk7Cj4gICB9Cj4gICAKPiBAQCAtMzI4 Niw2ICszMzQzLDMwIEBAIHN0YXRpYyB2b2lkIHZpcnR1YWxfc3VibWl0X3JlcXVlc3Qoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiAgIAl0YXNrbGV0X3NjaGVkdWxlKCZ2ZS0+YmFzZS5l eGVjbGlzdHMudGFza2xldCk7Cj4gICB9Cj4gICAKPiArc3RhdGljIHN0cnVjdCB2ZV9ib25kICoK PiArdmlydHVhbF9maW5kX2JvbmQoc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSwgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqbWFzdGVyKQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgdmUtPm5ib25kOyBpKyspIHsKPiArCQlpZiAodmUtPmJvbmRzW2ldLm1hc3RlciA9PSBt YXN0ZXIpCj4gKwkJCXJldHVybiAmdmUtPmJvbmRzW2ldOwo+ICsJfQo+ICsKPiArCXJldHVybiBO VUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt2aXJ0dWFsX2JvbmRfZXhlY3V0ZShzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSwgc3RydWN0IGRtYV9mZW5jZSAqc2lnbmFsKQo+ICt7Cj4gKwlz dHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9lbmdpbmUocnEtPmVuZ2luZSk7 Cj4gKwlzdHJ1Y3QgdmVfYm9uZCAqYm9uZDsKPiArCj4gKwlib25kID0gdmlydHVhbF9maW5kX2Jv bmQodmUsIHRvX3JlcXVlc3Qoc2lnbmFsKS0+ZW5naW5lKTsKPiArCWlmIChib25kKSAvKiBYWFgg c2VyaWFsaXNlIHdpdGggcnEtPmxvY2s/ICovCj4gKwkJcnEtPmV4ZWN1dGlvbl9tYXNrICY9IGJv bmQtPnNpYmxpbmdfbWFzazsKPiArfQo+ICsKPiAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+ ICAgaW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHgsCj4gICAJCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNpYmxpbmdzLAo+ IEBAIC0zMzI0LDYgKzM0MDUsNyBAQCBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgIAo+ICAgCXZlLT5iYXNlLnNjaGVkdWxlID0g aTkxNV9zY2hlZHVsZTsKPiAgIAl2ZS0+YmFzZS5zdWJtaXRfcmVxdWVzdCA9IHZpcnR1YWxfc3Vi bWl0X3JlcXVlc3Q7Cj4gKwl2ZS0+YmFzZS5ib25kX2V4ZWN1dGUgPSB2aXJ0dWFsX2JvbmRfZXhl Y3V0ZTsKPiAgIAo+ICAgCXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50ID0g SU5UX01JTjsKPiAgIAl0YXNrbGV0X2luaXQoJnZlLT5iYXNlLmV4ZWNsaXN0cy50YXNrbGV0LAo+ IEBAIC0zNDE0LDkgKzM0OTYsNzAgQEAgaW50ZWxfZXhlY2xpc3RzX2Nsb25lX3ZpcnR1YWwoc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgIAlpZiAoSVNfRVJSKGRzdCkpCj4gICAJCXJl dHVybiBkc3Q7Cj4gICAKPiArCWlmIChzZS0+bmJvbmQpIHsKPiArCQlzdHJ1Y3QgdmlydHVhbF9l bmdpbmUgKmRlID0gdG9fdmlydHVhbF9lbmdpbmUoZHN0KTsKPiArCj4gKwkJZGUtPmJvbmRzID0g a21lbWR1cChzZS0+Ym9uZHMsCj4gKwkJCQkgICAgc2l6ZW9mKCpzZS0+Ym9uZHMpICogc2UtPm5i b25kLAo+ICsJCQkJICAgIEdGUF9LRVJORUwpOwo+ICsJCWlmICghZGUtPmJvbmRzKSB7Cj4gKwkJ CWludGVsX3ZpcnR1YWxfZW5naW5lX2Rlc3Ryb3koZHN0KTsKPiArCQkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Cj4gKwkJfQo+ICsKPiArCQlkZS0+bmJvbmQgPSBzZS0+bmJvbmQ7Cj4gKwl9Cj4g Kwo+ICAgCXJldHVybiBkc3Q7Cj4gICB9Cj4gICAKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcKPiAr dmlydHVhbF9leGVjdXRpb25fbWFzayhzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlLCB1bnNpZ25l ZCBsb25nIG1hc2spCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgZW1hc2sgPSAwOwo+ICsJaW50IGJp dDsKPiArCj4gKwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJm1hc2ssIHZlLT5jb3VudCkKPiArCQll bWFzayB8PSB2ZS0+c2libGluZ3NbYml0XS0+bWFzazsKPiArCj4gKwlyZXR1cm4gZW1hc2s7Cj4g K30KPiArCj4gK2ludCBpbnRlbF92aXJ0dWFsX2VuZ2luZV9hdHRhY2hfYm9uZChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg Km1hc3RlciwKPiArCQkJCSAgICAgdW5zaWduZWQgbG9uZyBtYXNrKQo+ICt7Cj4gKwlzdHJ1Y3Qg dmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9lbmdpbmUoZW5naW5lKTsKPiArCXN0cnVj dCB2ZV9ib25kICpib25kOwo+ICsKPiArCWlmIChtYXNrID4+IHZlLT5jb3VudCkKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCj4gKwltYXNrID0gdmlydHVhbF9leGVjdXRpb25fbWFzayh2ZSwgbWFz ayk7Cj4gKwlpZiAoIW1hc2spCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJYm9uZCA9IHZp cnR1YWxfZmluZF9ib25kKHZlLCBtYXN0ZXIpOwo+ICsJaWYgKGJvbmQpIHsKPiArCQlib25kLT5z aWJsaW5nX21hc2sgfD0gbWFzazsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlib25kID0g a3JlYWxsb2ModmUtPmJvbmRzLAo+ICsJCQlzaXplb2YoKmJvbmQpICogKHZlLT5uYm9uZCArIDEp LAo+ICsJCQlHRlBfS0VSTkVMKTsKPiArCWlmICghYm9uZCkKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwlib25kW3ZlLT5uYm9uZF0ubWFzdGVyID0gbWFzdGVyOwo+ICsJYm9uZFt2ZS0+bmJv bmRdLnNpYmxpbmdfbWFzayA9IG1hc2s7Cj4gKwo+ICsJdmUtPmJvbmRzID0gYm9uZDsKPiArCXZl LT5uYm9uZCsrOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICAgdm9pZCBpbnRlbF92aXJ0 dWFsX2VuZ2luZV9kZXN0cm95KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsK PiAgIAlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9lbmdpbmUoZW5naW5l KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAo+IGluZGV4IDlkOTBkYzY4ZTAyYi4uNzdiODU2 NDgwNDVhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKPiBAQCAtMTIxLDYgKzEyMSwx MCBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKPiAgIGludGVsX2V4ZWNsaXN0c19jbG9uZV92 aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICAJCQkgICAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpzcmMpOwo+ICAgCj4gK2ludCBpbnRlbF92aXJ0dWFsX2VuZ2luZV9h dHRhY2hfYm9uZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgICAgIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm1hc3RlciwKPiArCQkJCSAgICAgdW5zaWduZWQgbG9uZyBt YXNrKTsKPiArCj4gICB2b2lkIGludGVsX3ZpcnR1YWxfZW5naW5lX2Rlc3Ryb3koc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgIAo+ICAgdTMyIGdlbjhfbWFrZV9ycGNzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3QgaW50ZWxfc3NldSAqY3R4X3NzZXUpOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMKPiBpbmRleCA0Yjhh MzM5NTI5ZDEuLmQyZTAwMTc1YzQxNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvaW50ZWxfbHJjLmMKPiBAQCAtMTMsNiArMTMsNyBAQAo+ICAgI2luY2x1ZGUgImlndF9s aXZlX3Rlc3QuaCIKPiAgICNpbmNsdWRlICJpZ3Rfc3Bpbm5lci5oIgo+ICAgI2luY2x1ZGUgImk5 MTVfcmFuZG9tLmgiCj4gKyNpbmNsdWRlICJsaWJfc3dfZmVuY2UuaCIKPiAgIAo+ICAgI2luY2x1 ZGUgIm1vY2tfY29udGV4dC5oIgo+ICAgCj4gQEAgLTEyMjQsNiArMTIyNSwxODkgQEAgc3RhdGlj IGludCBsaXZlX3ZpcnR1YWxfZW5naW5lKHZvaWQgKmFyZykKPiAgIAlyZXR1cm4gZXJyOwo+ICAg fQo+ICAgCj4gK3N0YXRpYyBpbnQgYm9uZF92aXJ0dWFsX2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSwKPiArCQkJICAgICAgIHVuc2lnbmVkIGludCBjbGFzcywKPiArCQkJICAg ICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKipzaWJsaW5ncywKPiArCQkJICAgICAgIHVuc2ln bmVkIGludCBuc2libGluZywKPiArCQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKPiArI2Rl ZmluZSBCT05EX1NDSEVEVUxFIEJJVCgwKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICptYXN0ZXI7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+ICsJc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnFbMTZdOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwl1bnNp Z25lZCBsb25nIG47Cj4gKwlpbnQgZXJyOwo+ICsKPiArCUdFTV9CVUdfT04obnNpYmxpbmcgPj0g QVJSQVlfU0laRShycSkgLSAxKTsKPiArCj4gKwljdHggPSBrZXJuZWxfY29udGV4dChpOTE1KTsK PiArCWlmICghY3R4KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWVyciA9IDA7Cj4gKwly cVswXSA9IEVSUl9QVFIoLUVOT01FTSk7Cj4gKwlmb3JfZWFjaF9lbmdpbmUobWFzdGVyLCBpOTE1 LCBpZCkgewo+ICsJCXN0cnVjdCBpOTE1X3N3X2ZlbmNlIGZlbmNlID0ge307Cj4gKwo+ICsJCWlm IChtYXN0ZXItPmNsYXNzID09IGNsYXNzKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJbWVtc2V0 X3AoKHZvaWQgKilycSwgRVJSX1BUUigtRUlOVkFMKSwgQVJSQVlfU0laRShycSkpOwo+ICsKPiAr CQlycVswXSA9IGk5MTVfcmVxdWVzdF9hbGxvYyhtYXN0ZXIsIGN0eCk7Cj4gKwkJaWYgKElTX0VS UihycVswXSkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihycVswXSk7Cj4gKwkJCWdvdG8gb3V0Owo+ ICsJCX0KPiArCQlpOTE1X3JlcXVlc3RfZ2V0KHJxWzBdKTsKPiArCj4gKwkJaWYgKGZsYWdzICYg Qk9ORF9TQ0hFRFVMRSkgewo+ICsJCQlvbnN0YWNrX2ZlbmNlX2luaXQoJmZlbmNlKTsKPiArCQkJ ZXJyID0gaTkxNV9zd19mZW5jZV9hd2FpdF9zd19mZW5jZV9nZnAoJnJxWzBdLT5zdWJtaXQsCj4g KwkJCQkJCQkgICAgICAgJmZlbmNlLAo+ICsJCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOwo+ICsJ CX0KPiArCQlpOTE1X3JlcXVlc3RfYWRkKHJxWzBdKTsKPiArCQlpZiAoZXJyIDwgMCkKPiArCQkJ Z290byBvdXQ7Cj4gKwo+ICsJCWZvciAobiA9IDA7IG4gPCBuc2libGluZzsgbisrKSB7Cj4gKwkJ CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCj4gKwkJCWVuZ2luZSA9IGludGVs X2V4ZWNsaXN0c19jcmVhdGVfdmlydHVhbChjdHgsCj4gKwkJCQkJCQkJc2libGluZ3MsCj4gKwkJ CQkJCQkJbnNpYmxpbmcpOwo+ICsJCQlpZiAoSVNfRVJSKGVuZ2luZSkpIHsKPiArCQkJCWVyciA9 IFBUUl9FUlIoZW5naW5lKTsKPiArCQkJCW9uc3RhY2tfZmVuY2VfZmluaSgmZmVuY2UpOwo+ICsJ CQkJZ290byBvdXQ7Cj4gKwkJCX0KPiArCj4gKwkJCWVyciA9IGludGVsX3ZpcnR1YWxfZW5naW5l X2F0dGFjaF9ib25kKGVuZ2luZSwKPiArCQkJCQkJCSAgICAgICBtYXN0ZXIsCj4gKwkJCQkJCQkg ICAgICAgQklUKG4pKTsKPiArCQkJaWYgKGVycikgewo+ICsJCQkJaW50ZWxfdmlydHVhbF9lbmdp bmVfZGVzdHJveShlbmdpbmUpOwo+ICsJCQkJb25zdGFja19mZW5jZV9maW5pKCZmZW5jZSk7Cj4g KwkJCQlnb3RvIG91dDsKPiArCQkJfQo+ICsKPiArCQkJcnFbbiArIDFdID0gaTkxNV9yZXF1ZXN0 X2FsbG9jKGVuZ2luZSwgY3R4KTsKPiArCQkJaWYgKElTX0VSUihycVtuICsgMV0pKSB7Cj4gKwkJ CQllcnIgPSBQVFJfRVJSKHJxW24gKyAxXSk7Cj4gKwkJCQlpbnRlbF92aXJ0dWFsX2VuZ2luZV9k ZXN0cm95KGVuZ2luZSk7Cj4gKwkJCQlvbnN0YWNrX2ZlbmNlX2ZpbmkoJmZlbmNlKTsKPiArCQkJ CWdvdG8gb3V0Owo+ICsJCQl9Cj4gKwkJCWk5MTVfcmVxdWVzdF9nZXQocnFbbiArIDFdKTsKPiAr Cj4gKwkJCWVyciA9IGk5MTVfcmVxdWVzdF9hd2FpdF9leGVjdXRpb24ocnFbbiArIDFdLAo+ICsJ CQkJCQkJICAgJnJxWzBdLT5mZW5jZSwKPiArCQkJCQkJCSAgIGVuZ2luZS0+Ym9uZF9leGVjdXRl KTsKPiArCQkJaTkxNV9yZXF1ZXN0X2FkZChycVtuICsgMV0pOwo+ICsJCQlpbnRlbF92aXJ0dWFs X2VuZ2luZV9kZXN0cm95KGVuZ2luZSk7Cj4gKwkJCWlmIChlcnIgPCAwKSB7Cj4gKwkJCQlvbnN0 YWNrX2ZlbmNlX2ZpbmkoJmZlbmNlKTsKPiArCQkJCWdvdG8gb3V0Owo+ICsJCQl9Cj4gKwkJfQo+ ICsJCW9uc3RhY2tfZmVuY2VfZmluaSgmZmVuY2UpOwo+ICsKPiArCQlpZiAoaTkxNV9yZXF1ZXN0 X3dhaXQocnFbMF0sCj4gKwkJCQkJSTkxNV9XQUlUX0xPQ0tFRCwKPiArCQkJCQlIWiAvIDEwKSA8 IDApIHsKPiArCQkJcHJfZXJyKCJNYXN0ZXIgcmVxdWVzdCBkaWQgbm90IGV4ZWN1dGUgKG9uICVz KSFcbiIsCj4gKwkJCSAgICAgICBycVswXS0+ZW5naW5lLT5uYW1lKTsKPiArCQkJZXJyID0gLUVJ TzsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsKPiArCQlmb3IgKG4gPSAwOyBuIDwgbnNpYmxp bmc7IG4rKykgewo+ICsJCQlpZiAoaTkxNV9yZXF1ZXN0X3dhaXQocnFbbiArIDFdLAo+ICsJCQkJ CSAgICAgIEk5MTVfV0FJVF9MT0NLRUQsCj4gKwkJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVP VVQpIDwgMCkgewo+ICsJCQkJZXJyID0gLUVJTzsKPiArCQkJCWdvdG8gb3V0Owo+ICsJCQl9Cj4g Kwo+ICsJCQlpZiAocnFbbiArIDFdLT5lbmdpbmUgIT0gc2libGluZ3Nbbl0pIHsKPiArCQkJCXBy X2VycigiQm9uZGVkIHJlcXVlc3QgZGlkIG5vdCBleGVjdXRlIG9uIHRhcmdldCBlbmdpbmU6IGV4 cGVjdGVkICVzLCB1c2VkICVzOyBtYXN0ZXIgd2FzICVzXG4iLAo+ICsJCQkJICAgICAgIHNpYmxp bmdzW25dLT5uYW1lLAo+ICsJCQkJICAgICAgIHJxW24gKyAxXS0+ZW5naW5lLT5uYW1lLAo+ICsJ CQkJICAgICAgIHJxWzBdLT5lbmdpbmUtPm5hbWUpOwo+ICsJCQkJZXJyID0gLUVJTlZBTDsKPiAr CQkJCWdvdG8gb3V0Owo+ICsJCQl9Cj4gKwkJfQo+ICsKPiArCQlmb3IgKG4gPSAwOyAhSVNfRVJS KHJxW25dKTsgbisrKQo+ICsJCQlpOTE1X3JlcXVlc3RfcHV0KHJxW25dKTsKPiArCQlycVswXSA9 IEVSUl9QVFIoLUVOT01FTSk7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwlmb3IgKG4gPSAwOyAhSVNf RVJSKHJxW25dKTsgbisrKQo+ICsJCWk5MTVfcmVxdWVzdF9wdXQocnFbbl0pOwo+ICsJaWYgKGln dF9mbHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQo+ICsJCWVyciA9IC1FSU87Cj4g Kwo+ICsJa2VybmVsX2NvbnRleHRfY2xvc2UoY3R4KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgbGl2ZV92aXJ0dWFsX2JvbmQodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdGF0 aWMgY29uc3Qgc3RydWN0IHBoYXNlIHsKPiArCQljb25zdCBjaGFyICpuYW1lOwo+ICsJCXVuc2ln bmVkIGludCBmbGFnczsKPiArCX0gcGhhc2VzW10gPSB7Cj4gKwkJeyAiIiwgMCB9LAo+ICsJCXsg InNjaGVkdWxlIiwgQk9ORF9TQ0hFRFVMRSB9LAo+ICsJCXsgfSwKPiArCX07Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnNpYmxpbmdzW01BWF9FTkdJTkVfSU5TVEFOQ0UgKyAxXTsKPiArCXVuc2lnbmVkIGludCBjbGFz cywgaW5zdDsKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCWlmIChVU0VTX0dVQ19TVUJNSVNTSU9O KGk5MTUpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ICsKPiArCWZvciAoY2xhc3MgPSAwOyBjbGFzcyA8PSBNQVhfRU5HSU5FX0NM QVNTOyBjbGFzcysrKSB7Cj4gKwkJY29uc3Qgc3RydWN0IHBoYXNlICpwOwo+ICsJCWludCBuc2li bGluZzsKPiArCj4gKwkJbnNpYmxpbmcgPSAwOwo+ICsJCWZvciAoaW5zdCA9IDA7IGluc3QgPD0g TUFYX0VOR0lORV9JTlNUQU5DRTsgaW5zdCsrKSB7Cj4gKwkJCWlmICghaTkxNS0+ZW5naW5lX2Ns YXNzW2NsYXNzXVtpbnN0XSkKPiArCQkJCWJyZWFrOwo+ICsKPiArCQkJR0VNX0JVR19PTihuc2li bGluZyA9PSBBUlJBWV9TSVpFKHNpYmxpbmdzKSk7Cj4gKwkJCXNpYmxpbmdzW25zaWJsaW5nKytd ID0gaTkxNS0+ZW5naW5lX2NsYXNzW2NsYXNzXVtpbnN0XTsKPiArCQl9Cj4gKwkJaWYgKG5zaWJs aW5nIDwgMikKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWZvciAocCA9IHBoYXNlczsgcC0+bmFt ZTsgcCsrKSB7Cj4gKwkJCWVyciA9IGJvbmRfdmlydHVhbF9lbmdpbmUoaTkxNSwKPiArCQkJCQkJ ICBjbGFzcywgc2libGluZ3MsIG5zaWJsaW5nLAo+ICsJCQkJCQkgIHAtPmZsYWdzKTsKPiArCQkJ aWYgKGVycikgewo+ICsJCQkJcHJfZXJyKCIlcyglcyk6IGZhaWxlZCBjbGFzcz0lZCwgbnNpYmxp bmc9JWQsIGVycj0lZFxuIiwKPiArCQkJCSAgICAgICBfX2Z1bmNfXywgcC0+bmFtZSwgY2xhc3Ms IG5zaWJsaW5nLCBlcnIpOwo+ICsJCQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCQl9Cj4gKwkJfQo+ ICsJfQo+ICsKPiArb3V0X3VubG9jazoKPiArCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICAgaW50IGludGVsX2V4ZWNsaXN0 c19saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAg IAlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewo+IEBAIC0xMjM2 LDYgKzE0MjAsNyBAQCBpbnQgaW50ZWxfZXhlY2xpc3RzX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCQlTVUJURVNUKGxpdmVfcHJlZW1wdF9oYW5nKSwK PiAgIAkJU1VCVEVTVChsaXZlX3ByZWVtcHRfc21va2UpLAo+ICAgCQlTVUJURVNUKGxpdmVfdmly dHVhbF9lbmdpbmUpLAo+ICsJCVNVQlRFU1QobGl2ZV92aXJ0dWFsX2JvbmQpLAo+ICAgCX07Cj4g ICAKPiAgIAlpZiAoIUhBU19FWEVDTElTVFMoaTkxNSkpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9saWJfc3dfZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9saWJfc3dfZmVuY2UuYwo+IGluZGV4IDJiZmE3MmMxNjU0Yi4uYjk3NmMx MjgxN2M1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9saWJf c3dfZmVuY2UuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9saWJfc3df ZmVuY2UuYwo+IEBAIC00NSw2ICs0NSw5IEBAIHZvaWQgX19vbnN0YWNrX2ZlbmNlX2luaXQoc3Ry dWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNlLAo+ICAgCj4gICB2b2lkIG9uc3RhY2tfZmVuY2VfZmlu aShzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UpCj4gICB7Cj4gKwlpZiAoIWZlbmNlLT5mbGFn cykKPiArCQlyZXR1cm47Cj4gKwo+ICAgCWk5MTVfc3dfZmVuY2VfY29tbWl0KGZlbmNlKTsKPiAg IAlpOTE1X3N3X2ZlbmNlX2ZpbmkoZmVuY2UpOwo+ICAgfQo+IGRpZmYgLS1naXQgYS9pbmNsdWRl L3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPiBpbmRl eCBjMDU3NTM2ZGY1Y2QuLmVkMzNiOGFmODY5MiAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkv ZHJtL2k5MTVfZHJtLmgKPiArKysgYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPiBAQCAt MTUzMiw2ICsxNTMyLDEwIEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSB7Cj4g ICAgKiBzaXplZCBhcmd1bWVudCwgd2lsbCByZXZlcnQgYmFjayB0byBkZWZhdWx0IHNldHRpbmdz Lgo+ICAgICoKPiAgICAqIFNlZSBzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMuCj4g KyAqCj4gKyAqIEV4dGVuc2lvbnM6Cj4gKyAqICAgaTkxNV9jb250ZXh0X2VuZ2luZXNfbG9hZF9i YWxhbmNlIChJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNFKQo+ICsgKiAgIGk5 MTVfY29udGV4dF9lbmdpbmVzX2JvbmQgKEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9CT05EKQo+ ICAgICovCj4gICAjZGVmaW5lIEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTCTB4YQo+ICAgLyog TXVzdCBiZSBrZXB0IGNvbXBhY3QgLS0gbm8gaG9sZXMgYW5kIHdlbGwgZG9jdW1lbnRlZCAqLwo+ IEBAIC0xNjI3LDkgKzE2MzEsMzggQEAgc3RydWN0IGk5MTVfY29udGV4dF9lbmdpbmVzX2xvYWRf YmFsYW5jZSB7Cj4gICAJX191NjQgbWJ6NjRbNF07IC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNl OyBtdXN0IGJlIHplcm8gKi8KPiAgIH07Cj4gICAKPiArLyoKPiArICogaTkxNV9jb250ZXh0X2Vu Z2luZXNfYm9uZDoKPiArICoKPiArICogQ29uc3RydWN0ZWQgYm9uZGVkIHBhaXJzIGZvciBleGVj dXRpb24gd2l0aGluIGEgdmlydHVhbCBlbmdpbmUuCj4gKyAqCj4gKyAqIEFsbCBlbmdpbmVzIGFy ZSBlcXVhbCwgYnV0IHNvbWUgYXJlIG1vcmUgZXF1YWwgdGhhbiBvdGhlcnMuIEdpdmVuCj4gKyAq IHRoZSBkaXN0cmlidXRpb24gb2YgcmVzb3VyY2VzIGluIHRoZSBIVywgaXQgbWF5IGJlIHByZWZl cmFibGUgdG8gcnVuCj4gKyAqIGEgcmVxdWVzdCBvbiBhIGdpdmVuIHN1YnNldCBvZiBlbmdpbmVz IGluIHBhcmFsbGVsIHRvIGEgcmVxdWVzdCBvbiBhCj4gKyAqIHNwZWNpZmljIGVuZ2luZS4gV2Ug ZW5hYmxlIHRoaXMgc2VsZWN0aW9uIG9mIGVuZ2luZXMgd2l0aGluIGEgdmlydHVhbAo+ICsgKiBl bmdpbmUgYnkgc3BlY2lmeWluZyBib25kaW5nIHBhaXJzLCBmb3IgYW55IGdpdmVuIG1hc3RlciBl bmdpbmUgd2Ugd2lsbAo+ICsgKiBvbmx5IGV4ZWN1dGUgb24gb25lIG9mIHRoZSBjb3JyZXNwb25k aW5nIHNpYmxpbmdzIHdpdGhpbiB0aGUgdmlydHVhbCBlbmdpbmUuCj4gKyAqCj4gKyAqIFRvIGV4 ZWN1dGUgYSByZXF1ZXN0IGluIHBhcmFsbGVsIG9uIHRoZSBtYXN0ZXIgZW5naW5lIGFuZCBhIHNp YmxpbmcgcmVxdWlyZXMKPiArICogY29vcmRpbmF0aW9uIHdpdGggYSBJOTE1X0VYRUNfRkVOQ0Vf U1VCTUlULgo+ICsgKi8KPiArc3RydWN0IGk5MTVfY29udGV4dF9lbmdpbmVzX2JvbmQgewo+ICsJ c3RydWN0IGk5MTVfdXNlcl9leHRlbnNpb24gYmFzZTsKPiArCj4gKwlfX3UxNiB2aXJ0dWFsX2lu ZGV4OyAvKiBpbmRleCBvZiB2aXJ0dWFsIGVuZ2luZSBpbiBjdHgtPmVuZ2luZXNbXSAqLwo+ICsJ X191MTYgbWJ6Owo+ICsKPiArCV9fdTE2IG1hc3Rlcl9jbGFzczsKPiArCV9fdTE2IG1hc3Rlcl9p bnN0YW5jZTsKPiArCj4gKwlfX3U2NCBzaWJsaW5nX21hc2s7IC8qIGJpdG1hc2sgb2YgQklUKHNp YmxpbmdfaW5kZXgpIHdydCB0aGUgdi5lbmdpbmUgKi8KPiArCV9fdTY0IGZsYWdzOyAvKiBhbGwg dW5kZWZpbmVkIGZsYWdzIG11c3QgYmUgemVybyAqLwo+ICt9Owo+ICsKPiAgIHN0cnVjdCBpOTE1 X2NvbnRleHRfcGFyYW1fZW5naW5lcyB7Cj4gICAJX191NjQgZXh0ZW5zaW9uczsgLyogbGlua2Vk IGNoYWluIG9mIGV4dGVuc2lvbiBibG9ja3MsIDAgdGVybWluYXRlcyAqLwo+ICAgI2RlZmluZSBJ OTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNFIDAKPiArI2RlZmluZSBJOTE1X0NP TlRFWFRfRU5HSU5FU19FWFRfQk9ORCAxCj4gICAKPiAgIAlzdHJ1Y3Qgewo+ICAgCQlfX3UxNiBl bmdpbmVfY2xhc3M7IC8qIHNlZSBlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgKi8KPiAK ClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4