From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: Re: [PATCH 09/25] drm/amdgpu: allow split of queues with kfd at queue granularity v2 Date: Wed, 5 Apr 2017 00:09:21 -0400 Message-ID: References: <20170404220551.8669-1-andresx7@gmail.com> <20170404220551.8669-10-andresx7@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Alex Deucher Cc: amd-gfx list T24gVHVlLCBBcHIgNCwgMjAxNyBhdCAxMToxNiBQTSwgQWxleCBEZXVjaGVyIDxhbGV4ZGV1Y2hl ckBnbWFpbC5jb20+IHdyb3RlOgo+IE9uIFR1ZSwgQXByIDQsIDIwMTcgYXQgNjowNSBQTSwgQW5k cmVzIFJvZHJpZ3VleiA8YW5kcmVzeDdAZ21haWwuY29tPiB3cm90ZToKPj4gUHJldmlvdXNseSB0 aGUgcXVldWUvcGlwZSBzcGxpdCB3aXRoIGtmZCBvcGVyYXRlZCB3aXRoIHBpcGUKPj4gZ3JhbnVs YXJpdHkuIFRoaXMgcGF0Y2ggYWxsb3dzIGFtZGdwdSB0byB0YWtlIG93bmVyc2hpcCBvZiBhbiBh cmJpdHJhcnkKPj4gc2V0IG9mIHF1ZXVlcy4KPj4KPj4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgdGhl IGxhc3QgZmV3IG1hZ2ljIG51bWJlcnMgaW4gdGhlIGNvbXB1dGUKPj4gaW5pdGlhbGl6YXRpb24g cHJvY2VzcyBpbnRvIG1lY19pbml0Lgo+Pgo+PiB2Mjogc3VwcG9ydCBmb3IgZ2Z4OQo+Pgo+PiBS ZXZpZXdlZC1ieTogRWR3YXJkIE8nQ2FsbGFnaGFuIDxmdW5mdW5jdG9yQGZvbGtsb3JlMTk4NC5u ZXQ+Cj4+IEFja2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5j b20+Cj4+IFNpZ25lZC1vZmYtYnk6IEFuZHJlcyBSb2RyaWd1ZXogPGFuZHJlc3g3QGdtYWlsLmNv bT4KPj4gLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCAgICAgICAg ICAgICB8ICA3ICsrKwo+PiAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYyAg ICAgICAgICAgfCA4MyArKysrKysrKysrKysrKysrKy0tLS0tLS0KPj4gIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMgICAgICAgICAgIHwgODEgKysrKysrKysrKysrKysrKysr Ky0tLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjlfMC5jICAgICAgICAg ICB8IDg0ICsrKysrKysrKysrKysrKysrKysrKysrLS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQv aW5jbHVkZS9rZ2Rfa2ZkX2ludGVyZmFjZS5oIHwgIDEgKwo+PiAgNSBmaWxlcyBjaGFuZ2VkLCAy MTIgaW5zZXJ0aW9ucygrKSwgNDQgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdS5oCj4+IGluZGV4IGI5MmY2Y2IuLmUyZDgyNDMgMTAwNjQ0Cj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4+IEBAIC0zOSwyMCArMzksMjIgQEAKPj4gICNpbmNsdWRl IDx0dG0vdHRtX2JvX2FwaS5oPgo+PiAgI2luY2x1ZGUgPHR0bS90dG1fYm9fZHJpdmVyLmg+Cj4+ ICAjaW5jbHVkZSA8dHRtL3R0bV9wbGFjZW1lbnQuaD4KPj4gICNpbmNsdWRlIDx0dG0vdHRtX21v ZHVsZS5oPgo+PiAgI2luY2x1ZGUgPHR0bS90dG1fZXhlY2J1Zl91dGlsLmg+Cj4+Cj4+ICAjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPj4gICNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+PiAgI2luY2x1 ZGUgPGRybS9hbWRncHVfZHJtLmg+Cj4+Cj4+ICsjaW5jbHVkZSA8a2dkX2tmZF9pbnRlcmZhY2Uu aD4KPj4gKwo+PiAgI2luY2x1ZGUgImFtZF9zaGFyZWQuaCIKPj4gICNpbmNsdWRlICJhbWRncHVf bW9kZS5oIgo+PiAgI2luY2x1ZGUgImFtZGdwdV9paC5oIgo+PiAgI2luY2x1ZGUgImFtZGdwdV9p cnEuaCIKPj4gICNpbmNsdWRlICJhbWRncHVfdWNvZGUuaCIKPj4gICNpbmNsdWRlICJhbWRncHVf dHRtLmgiCj4+ICAjaW5jbHVkZSAiYW1kZ3B1X3BzcC5oIgo+PiAgI2luY2x1ZGUgImFtZGdwdV9n ZHMuaCIKPj4gICNpbmNsdWRlICJhbWRncHVfc3luYy5oIgo+PiAgI2luY2x1ZGUgImFtZGdwdV9y aW5nLmgiCj4+IEBAIC04OTksMjkgKzkwMSwzNCBAQCBzdHJ1Y3QgYW1kZ3B1X3JsYyB7Cj4+ICAg ICAgICAgdTMyIHJlZ19saXN0X2Zvcm1hdF9zdGFydDsKPj4gICAgICAgICB1MzIgcmVnX2xpc3Rf Zm9ybWF0X3NlcGFyYXRlX3N0YXJ0Owo+PiAgICAgICAgIHUzMiBzdGFydGluZ19vZmZzZXRzX3N0 YXJ0Owo+PiAgICAgICAgIHUzMiByZWdfbGlzdF9mb3JtYXRfc2l6ZV9ieXRlczsKPj4gICAgICAg ICB1MzIgcmVnX2xpc3Rfc2l6ZV9ieXRlczsKPj4KPj4gICAgICAgICB1MzIgKnJlZ2lzdGVyX2xp c3RfZm9ybWF0Owo+PiAgICAgICAgIHUzMiAqcmVnaXN0ZXJfcmVzdG9yZTsKPj4gIH07Cj4+Cj4+ ICsjZGVmaW5lIEFNREdQVV9NQVhfUVVFVUVTIEtHRF9NQVhfUVVFVUVTCj4KPiBDYW4gd2UgcmVu YW1lIHRoaXMgdG8gQU1ER1BVX01BWF9DT01QVVRFX1FVRVVFUyBvciBiZXR0ZXIgeWV0LCB1bmlm eQo+IGl0IHdpdGggQU1ER1BVX01BWF9DT01QVVRFX1JJTkdTPyAgSSBkb24ndCBsaWtlIGhhdmlu ZyB0d28gZGVmaW5lcyBmb3IKPiB0aGUgc2FtZSB0aGluZy4KPgoKSSdtIG9rYXkgd2l0aCB0aGUg cmVuYW1lIGhlcmUuCgpTaW5jZSB0aGUgbWVhbmluZyBpcyBzbGlnaHRseSBkaWZmZXJlbnQsIHVu aWZ5aW5nIHRoZW0gd291bGQgaGF2ZSBzb21lCnVuZGVzaXJlZCBjb25zZXF1ZW5jZXMuIEFNREdQ VV9NQVhfUVVFVUVTIGlzIHRoZSBoaWdoZXN0IG51bWJlciBvZgpxdWV1ZXMgYW4gQVNJQyBtYXkg Y29udGFpbiAod2l0aCBzb21lIHdpZ2dsZSByb29tKS4gT24gdGhlIG90aGVyIGhhbmQKQU1ER1BV X01BWF9DT01QVVRFX1JJTkdTIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMgd2UgZXhw ZWN0CmFtZGdwdSB0byBhY3F1aXJlLiBJZiB3ZSB1bmlmeSB0aGVtIHdlIHdvdWxkIGhhdmUgc29t ZSBhcnJheXMgaW5jcmVhc2UKaW4gc2l6ZSB1bm5lY2Vzc2FyaWx5LCBlLmcuIG1xZF9iYWNrdXBb OCArMV0gd291bGQgYmVjb21lCm1xZF9iYWNrdXBbMTI4ICsgMV0uCgpZb3Ugc2VlbSB0byBiZSBw b2ludGluZyBhdCB0aGUgcHJvYmxlbSBoZXJlIGNvcnJlY3RseSB0aG91Z2gsIHRoZQpuYW1lcyBk b24ndCBjb252ZXkgdGhhdCBkaWZmZXJlbmNlLgoKPj4gKwo+PiAgc3RydWN0IGFtZGdwdV9tZWMg ewo+PiAgICAgICAgIHN0cnVjdCBhbWRncHVfYm8gICAgICAgICpocGRfZW9wX29iajsKPj4gICAg ICAgICB1NjQgICAgICAgICAgICAgICAgICAgICBocGRfZW9wX2dwdV9hZGRyOwo+PiAgICAgICAg IHN0cnVjdCBhbWRncHVfYm8gICAgICAgICptZWNfZndfb2JqOwo+PiAgICAgICAgIHU2NCAgICAg ICAgICAgICAgICAgICAgIG1lY19md19ncHVfYWRkcjsKPj4gICAgICAgICB1MzIgbnVtX21lYzsK Pj4gICAgICAgICB1MzIgbnVtX3BpcGVfcGVyX21lYzsKPj4gICAgICAgICB1MzIgbnVtX3F1ZXVl X3Blcl9waXBlOwo+PiAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICptcWRfYmFja3Vw W0FNREdQVV9NQVhfQ09NUFVURV9SSU5HUyArIDFdOwo+PiArCj4+ICsgICAgICAgLyogVGhlc2Ug YXJlIHRoZSByZXNvdXJjZXMgZm9yIHdoaWNoIGFtZGdwdSB0YWtlcyBvd25lcnNoaXAgKi8KPj4g KyAgICAgICBERUNMQVJFX0JJVE1BUChxdWV1ZV9iaXRtYXAsIEFNREdQVV9NQVhfUVVFVUVTKTsK Pj4gIH07Cj4+Cj4+ICBzdHJ1Y3QgYW1kZ3B1X2tpcSB7Cj4+ICAgICAgICAgdTY0ICAgICAgICAg ICAgICAgICAgICAgZW9wX2dwdV9hZGRyOwo+PiAgICAgICAgIHN0cnVjdCBhbWRncHVfYm8gICAg ICAgICplb3Bfb2JqOwo+PiAgICAgICAgIHN0cnVjdCBhbWRncHVfcmluZyAgICAgIHJpbmc7Cj4+ ICAgICAgICAgc3RydWN0IGFtZGdwdV9pcnFfc3JjICAgaXJxOwo+PiAgfTsKPj4KPj4gIC8qCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdfMC5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYwo+PiBpbmRleCAzMzQwMDEyLi4wNTg2 ZjFjIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdfMC5j Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18wLmMKPj4gQEAgLTQy LDIxICs0MiwyMCBAQAo+PiAgI2luY2x1ZGUgImdjYS9nZnhfN18yX2VudW0uaCIKPj4gICNpbmNs dWRlICJnY2EvZ2Z4XzdfMl9zaF9tYXNrLmgiCj4+Cj4+ICAjaW5jbHVkZSAiZ21jL2dtY183XzBf ZC5oIgo+PiAgI2luY2x1ZGUgImdtYy9nbWNfN18wX3NoX21hc2suaCIKPj4KPj4gICNpbmNsdWRl ICJvc3Mvb3NzXzJfMF9kLmgiCj4+ICAjaW5jbHVkZSAib3NzL29zc18yXzBfc2hfbWFzay5oIgo+ Pgo+PiAgI2RlZmluZSBHRlg3X05VTV9HRlhfUklOR1MgICAgIDEKPj4gLSNkZWZpbmUgR0ZYN19O VU1fQ09NUFVURV9SSU5HUyA4Cj4KPiBDYW4gd2Uga2VlcCB0aGUgbG9jYWwgY29tcHV0ZSBxdWV1 ZSBOVU0gZGVmaW5lcz8gIFRoaXMgd2F5IHdlIGNhbgo+IGNoYW5nZSB0aGUgbnVtYmVyIG9mIHF1 ZXVlcyBwZXIgZ2Z4IHZlcnNpb24gd2l0aG91dCBhZmZlY3RpbmcKPiBldmVyeXRoaW5nLgo+Cj4g QWxleAo+CgpUaGVzZSBkZWZpbmVzIGRvbid0IGFmZmVjdCBob3cgbWFueSBxdWV1ZXMgYW1kZ3B1 IHdpbGwgZ3JhYi4gSW5zdGVhZCwKdGhpcyBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlciBnZngg dmVyc2lvbiBhdApnZnhfdlhfWV9jb21wdXRlX3F1ZXVlX2FjcXVpcmUoKS4gSWYgYSBtYXhpbXVt IGlzIGRlc2lyZWQgaXQgY2FuIGJlCmNvbmZpZ3VyZWQgd2l0aGluIHRoZSBwb2xpY3kuCgpBbmRy ZXMKCj4+ICAjZGVmaW5lIEdGWDdfTUVDX0hQRF9TSVpFICAgICAgMjA0OAo+Pgo+Pgo+PiAgc3Rh dGljIHZvaWQgZ2Z4X3Y3XzBfc2V0X3JpbmdfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpOwo+PiAgc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfc2V0X2lycV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldik7Cj4+ICBzdGF0aWMgdm9pZCBnZnhfdjdfMF9zZXRfZ2RzX2luaXQoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwo+Pgo+PiAgTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24v Ym9uYWlyZV9wZnAuYmluIik7Cj4+ICBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9ib25haXJlX21l LmJpbiIpOwo+PiAgTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vYm9uYWlyZV9jZS5iaW4iKTsKPj4g QEAgLTI4MTcsNDcgKzI4MTYsNzkgQEAgc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfbWVjX2Zpbmkoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHko ciAhPSAwKSkKPj4gICAgICAgICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oYWRldi0+ZGV2LCAi KCVkKSByZXNlcnZlIEhQRCBFT1AgYm8gZmFpbGVkXG4iLCByKTsKPj4gICAgICAgICAgICAgICAg IGFtZGdwdV9ib191bnBpbihhZGV2LT5nZngubWVjLmhwZF9lb3Bfb2JqKTsKPj4gICAgICAgICAg ICAgICAgIGFtZGdwdV9ib191bnJlc2VydmUoYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7Cj4+ Cj4+ICAgICAgICAgICAgICAgICBhbWRncHVfYm9fdW5yZWYoJmFkZXYtPmdmeC5tZWMuaHBkX2Vv cF9vYmopOwo+PiAgICAgICAgICAgICAgICAgYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaiA9IE5V TEw7Cj4+ICAgICAgICAgfQo+PiAgfQo+Pgo+PiArc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfY29tcHV0 ZV9xdWV1ZV9hY3F1aXJlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiArewo+PiArICAg ICAgIGludCBpLCBxdWV1ZSwgcGlwZSwgbWVjOwo+PiArCj4+ICsgICAgICAgLyogcG9saWN5IGZv ciBhbWRncHUgY29tcHV0ZSBxdWV1ZSBvd25lcnNoaXAgKi8KPj4gKyAgICAgICBmb3IgKGkgPSAw OyBpIDwgQU1ER1BVX01BWF9RVUVVRVM7ICsraSkgewo+PiArICAgICAgICAgICAgICAgcXVldWUg PSBpICUgYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGU7Cj4+ICsgICAgICAgICAgICAg ICBwaXBlID0gKGkgLyBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZSkKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgJSBhZGV2LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWM7Cj4+ICsg ICAgICAgICAgICAgICBtZWMgPSAoaSAvIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBl KQo+PiArICAgICAgICAgICAgICAgICAgICAgICAvIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVy X21lYzsKPj4gKwo+PiArICAgICAgICAgICAgICAgLyogd2UndmUgcnVuIG91dCBvZiBIVyAqLwo+ PiArICAgICAgICAgICAgICAgaWYgKG1lYyA+IGFkZXYtPmdmeC5tZWMubnVtX21lYykKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIC8qIHBv bGljeTogYW1kZ3B1IG93bnMgYWxsIHF1ZXVlcyBpbiB0aGUgZmlyc3QgcGlwZSAqLwo+PiArICAg ICAgICAgICAgICAgaWYgKG1lYyA9PSAwICYmIHBpcGUgPT0gMCkKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgc2V0X2JpdChpLCBhZGV2LT5nZngubWVjLnF1ZXVlX2JpdG1hcCk7Cj4+ICsgICAg ICAgfQo+PiArCj4+ICsgICAgICAgLyogdXBkYXRlIHRoZSBudW1iZXIgb2YgYWN0aXZlIGNvbXB1 dGUgcmluZ3MgKi8KPj4gKyAgICAgICBhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPQo+PiAr ICAgICAgICAgICAgICAgYml0bWFwX3dlaWdodChhZGV2LT5nZngubWVjLnF1ZXVlX2JpdG1hcCwg QU1ER1BVX01BWF9RVUVVRVMpOwo+PiArCj4+ICsgICAgICAgLyogSWYgeW91IGhpdCB0aGlzIGNh c2UgYW5kIGVkaXRlZCB0aGUgcG9saWN5LCB5b3UgcHJvYmFibHkganVzdAo+PiArICAgICAgICAq IG5lZWQgdG8gaW5jcmVhc2UgQU1ER1BVX01BWF9DT01QVVRFX1JJTkdTICovCj4+ICsgICAgICAg V0FSTl9PTihhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPiBBTURHUFVfTUFYX0NPTVBVVEVf UklOR1MpOwo+PiArICAgICAgIGlmIChhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPiBBTURH UFVfTUFYX0NPTVBVVEVfUklOR1MpCj4+ICsgICAgICAgICAgICAgICBhZGV2LT5nZngubnVtX2Nv bXB1dGVfcmluZ3MgPSBBTURHUFVfTUFYX0NPTVBVVEVfUklOR1M7Cj4+ICt9Cj4+ICsKPj4gIHN0 YXRpYyBpbnQgZ2Z4X3Y3XzBfbWVjX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ ICB7Cj4+ICAgICAgICAgaW50IHI7Cj4+ICAgICAgICAgdTMyICpocGQ7Cj4+ICAgICAgICAgc2l6 ZV90IG1lY19ocGRfc2l6ZTsKPj4KPj4gLSAgICAgICAvKgo+PiAtICAgICAgICAqIEtWOiAgICAy IE1FQywgNCBQaXBlcy9NRUMsIDggUXVldWVzL1BpcGUgLSA2NCBRdWV1ZXMgdG90YWwKPj4gLSAg ICAgICAgKiBDSS9LQjogMSBNRUMsIDQgUGlwZXMvTUVDLCA4IFF1ZXVlcy9QaXBlIC0gMzIgUXVl dWVzIHRvdGFsCj4+IC0gICAgICAgICogTm9uZXRoZWxlc3MsIHdlIGFzc2lnbiBvbmx5IDEgcGlw ZSBiZWNhdXNlIGFsbCBvdGhlciBwaXBlcyB3aWxsCj4+IC0gICAgICAgICogYmUgaGFuZGxlZCBi eSBLRkQKPj4gLSAgICAgICAgKi8KPj4gKyAgICAgICBiaXRtYXBfemVybyhhZGV2LT5nZngubWVj LnF1ZXVlX2JpdG1hcCwgQU1ER1BVX01BWF9RVUVVRVMpOwo+PiArCj4+ICAgICAgICAgc3dpdGNo IChhZGV2LT5hc2ljX3R5cGUpIHsKPj4gICAgICAgICBjYXNlIENISVBfS0FWRVJJOgo+PiAgICAg ICAgICAgICAgICAgYWRldi0+Z2Z4Lm1lYy5udW1fbWVjID0gMjsKPj4gICAgICAgICAgICAgICAg IGJyZWFrOwo+PiAgICAgICAgIGNhc2UgQ0hJUF9CT05BSVJFOgo+PiAgICAgICAgIGNhc2UgQ0hJ UF9IQVdBSUk6Cj4+ICAgICAgICAgY2FzZSBDSElQX0tBQklOSToKPj4gICAgICAgICBjYXNlIENI SVBfTVVMTElOUzoKPj4gICAgICAgICBkZWZhdWx0Ogo+PiAgICAgICAgICAgICAgICAgYWRldi0+ Z2Z4Lm1lYy5udW1fbWVjID0gMTsKPj4gICAgICAgICAgICAgICAgIGJyZWFrOwo+PiAgICAgICAg IH0KPj4gICAgICAgICBhZGV2LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWMgPSA0Owo+PiAgICAg ICAgIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBlID0gODsKPj4KPj4gKyAgICAgICAv KiB0YWtlIG93bmVyc2hpcCBvZiB0aGUgcmVsZXZhbnQgY29tcHV0ZSBxdWV1ZXMgKi8KPj4gKyAg ICAgICBnZnhfdjdfMF9jb21wdXRlX3F1ZXVlX2FjcXVpcmUoYWRldik7Cj4+ICsKPj4gKyAgICAg ICAvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgQUxMIHBpcGVzIChldmVuIHRoZSBvbmVzIHdlIGRvbid0 IG93bikgKi8KPj4gICAgICAgICBtZWNfaHBkX3NpemUgPSBhZGV2LT5nZngubWVjLm51bV9tZWMg KiBhZGV2LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWMKPj4gICAgICAgICAgICAgICAgICogR0ZY N19NRUNfSFBEX1NJWkUgKiAyOwo+PiAgICAgICAgIGlmIChhZGV2LT5nZngubWVjLmhwZF9lb3Bf b2JqID09IE5VTEwpIHsKPj4gICAgICAgICAgICAgICAgIHIgPSBhbWRncHVfYm9fY3JlYXRlKGFk ZXYsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWNfaHBkX3NpemUs Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUsIHRydWUs Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTURHUFVfR0VNX0RPTUFJ Tl9HVFQsIDAsIE5VTEwsIE5VTEwsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7Cj4+ICAgICAgICAgICAgICAgICBpZiAo cikgewo+PiAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfd2FybihhZGV2LT5kZXYsICIoJWQp IGNyZWF0ZSBIRFAgRU9QIGJvIGZhaWxlZFxuIiwgcik7Cj4+IEBAIC00NTIyLDIxICs0NTUzLDIx IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYW1kZ3B1X2dmeF9mdW5jcyBnZnhfdjdfMF9nZnhfZnVu Y3MgPSB7Cj4+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9ybGNfZnVuY3MgZ2Z4X3Y3XzBf cmxjX2Z1bmNzID0gewo+PiAgICAgICAgIC5lbnRlcl9zYWZlX21vZGUgPSBnZnhfdjdfMF9lbnRl cl9ybGNfc2FmZV9tb2RlLAo+PiAgICAgICAgIC5leGl0X3NhZmVfbW9kZSA9IGdmeF92N18wX2V4 aXRfcmxjX3NhZmVfbW9kZQo+PiAgfTsKPj4KPj4gIHN0YXRpYyBpbnQgZ2Z4X3Y3XzBfZWFybHlf aW5pdCh2b2lkICpoYW5kbGUpCj4+ICB7Cj4+ICAgICAgICAgc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+Cj4+ICAgICAgICAgYWRl di0+Z2Z4Lm51bV9nZnhfcmluZ3MgPSBHRlg3X05VTV9HRlhfUklOR1M7Cj4+IC0gICAgICAgYWRl di0+Z2Z4Lm51bV9jb21wdXRlX3JpbmdzID0gR0ZYN19OVU1fQ09NUFVURV9SSU5HUzsKPj4gKyAg ICAgICBhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPSBBTURHUFVfTUFYX0NPTVBVVEVfUklO R1M7Cj4+ICAgICAgICAgYWRldi0+Z2Z4LmZ1bmNzID0gJmdmeF92N18wX2dmeF9mdW5jczsKPj4g ICAgICAgICBhZGV2LT5nZngucmxjLmZ1bmNzID0gJmdmeF92N18wX3JsY19mdW5jczsKPj4gICAg ICAgICBnZnhfdjdfMF9zZXRfcmluZ19mdW5jcyhhZGV2KTsKPj4gICAgICAgICBnZnhfdjdfMF9z ZXRfaXJxX2Z1bmNzKGFkZXYpOwo+PiAgICAgICAgIGdmeF92N18wX3NldF9nZHNfaW5pdChhZGV2 KTsKPj4KPj4gICAgICAgICByZXR1cm4gMDsKPj4gIH0KPj4KPj4gIHN0YXRpYyBpbnQgZ2Z4X3Y3 XzBfbGF0ZV9pbml0KHZvaWQgKmhhbmRsZSkKPj4gQEAgLTQ3MTgsMjEgKzQ3NDksMjEgQEAgc3Rh dGljIHZvaWQgZ2Z4X3Y3XzBfZ3B1X2Vhcmx5X2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCj4+ICAgICAgICAgICAgICAgICBnYl9hZGRyX2NvbmZpZyB8PSAoMiA8PCBHQl9BRERSX0NP TkZJR19fUk9XX1NJWkVfX1NISUZUKTsKPj4gICAgICAgICAgICAgICAgIGJyZWFrOwo+PiAgICAg ICAgIH0KPj4gICAgICAgICBhZGV2LT5nZnguY29uZmlnLmdiX2FkZHJfY29uZmlnID0gZ2JfYWRk cl9jb25maWc7Cj4+ICB9Cj4+Cj4+ICBzdGF0aWMgaW50IGdmeF92N18wX3N3X2luaXQodm9pZCAq aGFuZGxlKQo+PiAgewo+PiAgICAgICAgIHN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKPj4gICAg ICAgICBzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq KWhhbmRsZTsKPj4gLSAgICAgICBpbnQgaSwgcjsKPj4gKyAgICAgICBpbnQgaSwgciwgcmluZ19p ZDsKPj4KPj4gICAgICAgICAvKiBFT1AgRXZlbnQgKi8KPj4gICAgICAgICByID0gYW1kZ3B1X2ly cV9hZGRfaWQoYWRldiwgQU1ER1BVX0lIX0NMSUVOVElEX0xFR0FDWSwgMTgxLCAmYWRldi0+Z2Z4 LmVvcF9pcnEpOwo+PiAgICAgICAgIGlmIChyKQo+PiAgICAgICAgICAgICAgICAgcmV0dXJuIHI7 Cj4+Cj4+ICAgICAgICAgLyogUHJpdmlsZWdlZCByZWcgKi8KPj4gICAgICAgICByID0gYW1kZ3B1 X2lycV9hZGRfaWQoYWRldiwgQU1ER1BVX0lIX0NMSUVOVElEX0xFR0FDWSwgMTg0LAo+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRldi0+Z2Z4LnByaXZfcmVnX2lycSk7Cj4+ICAg ICAgICAgaWYgKHIpCj4+IEBAIC00NzY5LDQyICs0ODAwLDUyIEBAIHN0YXRpYyBpbnQgZ2Z4X3Y3 XzBfc3dfaW5pdCh2b2lkICpoYW5kbGUpCj4+ICAgICAgICAgICAgICAgICByaW5nID0gJmFkZXYt PmdmeC5nZnhfcmluZ1tpXTsKPj4gICAgICAgICAgICAgICAgIHJpbmctPnJpbmdfb2JqID0gTlVM TDsKPj4gICAgICAgICAgICAgICAgIHNwcmludGYocmluZy0+bmFtZSwgImdmeCIpOwo+PiAgICAg ICAgICAgICAgICAgciA9IGFtZGdwdV9yaW5nX2luaXQoYWRldiwgcmluZywgMTAyNCwKPj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGV2LT5nZnguZW9wX2lycSwgQU1E R1BVX0NQX0lSUV9HRlhfRU9QKTsKPj4gICAgICAgICAgICAgICAgIGlmIChyKQo+PiAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gcjsKPj4gICAgICAgICB9Cj4+Cj4+ICAgICAgICAgLyog c2V0IHVwIHRoZSBjb21wdXRlIHF1ZXVlcyAqLwo+PiAtICAgICAgIGZvciAoaSA9IDA7IGkgPCBh ZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3M7IGkrKykgewo+PiArICAgICAgIGZvciAoaSA9IDAs IHJpbmdfaWQgPSAwOyBpIDwgQU1ER1BVX01BWF9RVUVVRVM7IGkrKykgewo+PiAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaXJxX3R5cGU7Cj4+Cj4+IC0gICAgICAgICAgICAgICAvKiBtYXggMzIg cXVldWVzIHBlciBNRUMgKi8KPj4gLSAgICAgICAgICAgICAgIGlmICgoaSA+PSAzMikgfHwgKGkg Pj0gQU1ER1BVX01BWF9DT01QVVRFX1JJTkdTKSkgewo+PiAtICAgICAgICAgICAgICAgICAgICAg ICBEUk1fRVJST1IoIlRvbyBtYW55ICglZCkgY29tcHV0ZSByaW5ncyFcbiIsIGkpOwo+PiAtICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gLSAgICAgICAgICAgICAgIH0KPj4gLSAgICAg ICAgICAgICAgIHJpbmcgPSAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tpXTsKPj4gKyAgICAgICAg ICAgICAgIGlmICghdGVzdF9iaXQoaSwgYWRldi0+Z2Z4Lm1lYy5xdWV1ZV9iaXRtYXApKQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4gKwo+PiArICAgICAgICAgICAgICAg cmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nW3JpbmdfaWRdOwo+PiArCj4+ICsgICAgICAg ICAgICAgICAvKiBtZWMwIGlzIG1lMSAqLwo+PiArICAgICAgICAgICAgICAgcmluZy0+bWUgPSAo KGkgLyBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZSkKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYykKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDE7Cj4+ICsgICAgICAgICAgICAgICByaW5n LT5waXBlID0gKGkgLyBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZSkKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAlIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21l YzsKPj4gKyAgICAgICAgICAgICAgIHJpbmctPnF1ZXVlID0gaSAlIGFkZXYtPmdmeC5tZWMubnVt X3F1ZXVlX3Blcl9waXBlOwo+PiArCj4+ICAgICAgICAgICAgICAgICByaW5nLT5yaW5nX29iaiA9 IE5VTEw7Cj4+ICAgICAgICAgICAgICAgICByaW5nLT51c2VfZG9vcmJlbGwgPSB0cnVlOwo+PiAt ICAgICAgICAgICAgICAgcmluZy0+ZG9vcmJlbGxfaW5kZXggPSBBTURHUFVfRE9PUkJFTExfTUVD X1JJTkcwICsgaTsKPj4gLSAgICAgICAgICAgICAgIHJpbmctPm1lID0gMTsgLyogZmlyc3QgTUVD ICovCj4+IC0gICAgICAgICAgICAgICByaW5nLT5waXBlID0gaSAvIDg7Cj4+IC0gICAgICAgICAg ICAgICByaW5nLT5xdWV1ZSA9IGkgJSA4Owo+PiArICAgICAgICAgICAgICAgcmluZy0+ZG9vcmJl bGxfaW5kZXggPSBBTURHUFVfRE9PUkJFTExfTUVDX1JJTkcwICsgcmluZ19pZDsKPj4gICAgICAg ICAgICAgICAgIHNwcmludGYocmluZy0+bmFtZSwgImNvbXBfJWQuJWQuJWQiLCByaW5nLT5tZSwg cmluZy0+cGlwZSwgcmluZy0+cXVldWUpOwo+PiAtICAgICAgICAgICAgICAgaXJxX3R5cGUgPSBB TURHUFVfQ1BfSVJRX0NPTVBVVEVfTUVDMV9QSVBFMF9FT1AgKyByaW5nLT5waXBlOwo+PiArCj4+ ICsgICAgICAgICAgICAgICBpcnFfdHlwZSA9IEFNREdQVV9DUF9JUlFfQ09NUFVURV9NRUMxX1BJ UEUwX0VPUAo+PiArICAgICAgICAgICAgICAgICAgICAgICArICgocmluZy0+bWUgLSAxKSAqIGFk ZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYykKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg KyByaW5nLT5waXBlOwo+PiArCj4+ICAgICAgICAgICAgICAgICAvKiB0eXBlLTIgcGFja2V0cyBh cmUgZGVwcmVjYXRlZCBvbiBNRUMsIHVzZSB0eXBlLTMgaW5zdGVhZCAqLwo+PiAgICAgICAgICAg ICAgICAgciA9IGFtZGdwdV9yaW5nX2luaXQoYWRldiwgcmluZywgMTAyNCwKPj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGV2LT5nZnguZW9wX2lycSwgaXJxX3R5cGUp Owo+PiAgICAgICAgICAgICAgICAgaWYgKHIpCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiByOwo+PiArCj4+ICsgICAgICAgICAgICAgICByaW5nX2lkKys7Cj4+ICAgICAgICAgfQo+ Pgo+PiAgICAgICAgIC8qIHJlc2VydmUgR0RTLCBHV1MgYW5kIE9BIHJlc291cmNlIGZvciBnZngg Ki8KPj4gICAgICAgICByID0gYW1kZ3B1X2JvX2NyZWF0ZV9rZXJuZWwoYWRldiwgYWRldi0+Z2Rz Lm1lbS5nZnhfcGFydGl0aW9uX3NpemUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBBR0VfU0laRSwgQU1ER1BVX0dFTV9ET01BSU5fR0RTLAo+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmYWRldi0+Z2RzLmdkc19nZnhfYm8sIE5VTEwsIE5VTEwp Owo+PiAgICAgICAgIGlmIChyKQo+PiAgICAgICAgICAgICAgICAgcmV0dXJuIHI7Cj4+Cj4+ICAg ICAgICAgciA9IGFtZGdwdV9ib19jcmVhdGVfa2VybmVsKGFkZXYsIGFkZXYtPmdkcy5nd3MuZ2Z4 X3BhcnRpdGlvbl9zaXplLAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZ2Z4X3Y4XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMKPj4g aW5kZXggODZjZGNiOC4uMTc3OTkyYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvZ2Z4X3Y4XzAuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9n ZnhfdjhfMC5jCj4+IEBAIC00NSwyMSArNDUsMjAgQEAKPj4gICNpbmNsdWRlICJnY2EvZ2Z4Xzhf MF9lbnVtLmgiCj4+ICAjaW5jbHVkZSAiZ2NhL2dmeF84XzBfc2hfbWFzay5oIgo+PiAgI2luY2x1 ZGUgImdjYS9nZnhfOF8wX2VudW0uaCIKPj4KPj4gICNpbmNsdWRlICJkY2UvZGNlXzEwXzBfZC5o Igo+PiAgI2luY2x1ZGUgImRjZS9kY2VfMTBfMF9zaF9tYXNrLmgiCj4+Cj4+ICAjaW5jbHVkZSAi c211L3NtdV83XzFfM19kLmgiCj4+Cj4+ICAjZGVmaW5lIEdGWDhfTlVNX0dGWF9SSU5HUyAgICAg MQo+PiAtI2RlZmluZSBHRlg4X05VTV9DT01QVVRFX1JJTkdTIDgKPj4gICNkZWZpbmUgR0ZYOF9N RUNfSFBEX1NJWkUgMjA0OAo+Pgo+Pgo+PiAgI2RlZmluZSBUT1BBWl9HQl9BRERSX0NPTkZJR19H T0xERU4gMHgyMjAxMDAwMQo+PiAgI2RlZmluZSBDQVJSSVpPX0dCX0FERFJfQ09ORklHX0dPTERF TiAweDIyMDEwMDAxCj4+ICAjZGVmaW5lIFBPTEFSSVMxMV9HQl9BRERSX0NPTkZJR19HT0xERU4g MHgyMjAxMTAwMgo+PiAgI2RlZmluZSBUT05HQV9HQl9BRERSX0NPTkZJR19HT0xERU4gMHgyMjAx MTAwMwo+Pgo+PiAgI2RlZmluZSBBUlJBWV9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgoeCkgPDwgR0JfVElMRV9NT0RFMF9fQVJSQVlfTU9ERV9fU0hJRlQpCj4+ICAj ZGVmaW5lIFBJUEVfQ09ORklHKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4 KSA8PCBHQl9USUxFX01PREUwX19QSVBFX0NPTkZJR19fU0hJRlQpCj4+IEBAIC0xNDEwLDQ3ICsx NDA5LDgyIEBAIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX2luaXRfcmluZyhzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKPj4gIH0KPj4gIHN0YXRpYyB2b2lkIGdmeF92OF8wX2tpcV9mcmVlX3Jp bmcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBhbWRncHVfaXJxX3NyYyAqaXJxKQo+PiAgewo+PiAgICAgICAgIGFt ZGdwdV93Yl9mcmVlKHJpbmctPmFkZXYsIHJpbmctPmFkZXYtPnZpcnQucmVnX3ZhbF9vZmZzKTsK Pj4gICAgICAgICBhbWRncHVfcmluZ19maW5pKHJpbmcpOwo+PiAgfQo+Pgo+PiAgI2RlZmluZSBH Rlg4X01FQ19IUERfU0laRSAyMDQ4Cj4+Cj4+ICtzdGF0aWMgdm9pZCBnZnhfdjhfMF9jb21wdXRl X3F1ZXVlX2FjcXVpcmUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ICt7Cj4+ICsgICAg ICAgaW50IGksIHF1ZXVlLCBwaXBlLCBtZWM7Cj4+ICsKPj4gKyAgICAgICAvKiBwb2xpY3kgZm9y IGFtZGdwdSBjb21wdXRlIHF1ZXVlIG93bmVyc2hpcCAqLwo+PiArICAgICAgIGZvciAoaSA9IDA7 IGkgPCBBTURHUFVfTUFYX1FVRVVFUzsgKytpKSB7Cj4+ICsgICAgICAgICAgICAgICBxdWV1ZSA9 IGkgJSBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZTsKPj4gKyAgICAgICAgICAgICAg IHBpcGUgPSAoaSAvIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBlKQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAlIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYzsKPj4gKyAg ICAgICAgICAgICAgIG1lYyA9IChpIC8gYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGUp Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC8gYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJf bWVjOwo+PiArCj4+ICsgICAgICAgICAgICAgICAvKiB3ZSd2ZSBydW4gb3V0IG9mIEhXICovCj4+ ICsgICAgICAgICAgICAgICBpZiAobWVjID4gYWRldi0+Z2Z4Lm1lYy5udW1fbWVjKQo+PiArICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gKwo+PiArICAgICAgICAgICAgICAgLyogcG9s aWN5OiBhbWRncHUgb3ducyBhbGwgcXVldWVzIGluIHRoZSBmaXJzdCBwaXBlICovCj4+ICsgICAg ICAgICAgICAgICBpZiAobWVjID09IDAgJiYgcGlwZSA9PSAwKQo+PiArICAgICAgICAgICAgICAg ICAgICAgICBzZXRfYml0KGksIGFkZXYtPmdmeC5tZWMucXVldWVfYml0bWFwKTsKPj4gKyAgICAg ICB9Cj4+ICsKPj4gKyAgICAgICAvKiB1cGRhdGUgdGhlIG51bWJlciBvZiBhY3RpdmUgY29tcHV0 ZSByaW5ncyAqLwo+PiArICAgICAgIGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5ncyA9Cj4+ICsg ICAgICAgICAgICAgICBiaXRtYXBfd2VpZ2h0KGFkZXYtPmdmeC5tZWMucXVldWVfYml0bWFwLCBB TURHUFVfTUFYX1FVRVVFUyk7Cj4+ICsKPj4gKyAgICAgICAvKiBJZiB5b3UgaGl0IHRoaXMgY2Fz ZSBhbmQgZWRpdGVkIHRoZSBwb2xpY3ksIHlvdSBwcm9iYWJseSBqdXN0Cj4+ICsgICAgICAgICog bmVlZCB0byBpbmNyZWFzZSBBTURHUFVfTUFYX0NPTVBVVEVfUklOR1MgKi8KPj4gKyAgICAgICBp ZiAoV0FSTl9PTihhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPiBBTURHUFVfTUFYX0NPTVBV VEVfUklOR1MpKQo+PiArICAgICAgICAgICAgICAgYWRldi0+Z2Z4Lm51bV9jb21wdXRlX3Jpbmdz ID0gQU1ER1BVX01BWF9DT01QVVRFX1JJTkdTOwo+PiArfQo+PiArCj4+ICBzdGF0aWMgaW50IGdm eF92OF8wX21lY19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAgewo+PiAgICAg ICAgIGludCByOwo+PiAgICAgICAgIHUzMiAqaHBkOwo+PiAgICAgICAgIHNpemVfdCBtZWNfaHBk X3NpemU7Cj4+Cj4+ICsgICAgICAgYml0bWFwX3plcm8oYWRldi0+Z2Z4Lm1lYy5xdWV1ZV9iaXRt YXAsIEFNREdQVV9NQVhfUVVFVUVTKTsKPj4gKwo+PiAgICAgICAgIHN3aXRjaCAoYWRldi0+YXNp Y190eXBlKSB7Cj4+ICAgICAgICAgY2FzZSBDSElQX0ZJSkk6Cj4+ICAgICAgICAgY2FzZSBDSElQ X1RPTkdBOgo+PiAgICAgICAgIGNhc2UgQ0hJUF9QT0xBUklTMTE6Cj4+ICAgICAgICAgY2FzZSBD SElQX1BPTEFSSVMxMjoKPj4gICAgICAgICBjYXNlIENISVBfUE9MQVJJUzEwOgo+PiAgICAgICAg IGNhc2UgQ0hJUF9DQVJSSVpPOgo+PiAgICAgICAgICAgICAgICAgYWRldi0+Z2Z4Lm1lYy5udW1f bWVjID0gMjsKPj4gICAgICAgICAgICAgICAgIGJyZWFrOwo+PiAgICAgICAgIGNhc2UgQ0hJUF9U T1BBWjoKPj4gICAgICAgICBjYXNlIENISVBfU1RPTkVZOgo+PiAgICAgICAgIGRlZmF1bHQ6Cj4+ ICAgICAgICAgICAgICAgICBhZGV2LT5nZngubWVjLm51bV9tZWMgPSAxOwo+PiAgICAgICAgICAg ICAgICAgYnJlYWs7Cj4+ICAgICAgICAgfQo+Pgo+PiAgICAgICAgIGFkZXYtPmdmeC5tZWMubnVt X3BpcGVfcGVyX21lYyA9IDQ7Cj4+ICAgICAgICAgYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVy X3BpcGUgPSA4Owo+Pgo+PiAtICAgICAgIC8qIG9ubHkgMSBwaXBlIG9mIHRoZSBmaXJzdCBNRUMg aXMgb3duZWQgYnkgYW1kZ3B1ICovCj4+IC0gICAgICAgbWVjX2hwZF9zaXplID0gMSAqIDEgKiBh ZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZSAqIEdGWDhfTUVDX0hQRF9TSVpFOwo+PiAr ICAgICAgIC8qIHRha2Ugb3duZXJzaGlwIG9mIHRoZSByZWxldmFudCBjb21wdXRlIHF1ZXVlcyAq Lwo+PiArICAgICAgIGdmeF92OF8wX2NvbXB1dGVfcXVldWVfYWNxdWlyZShhZGV2KTsKPj4gKwo+ PiArICAgICAgIG1lY19ocGRfc2l6ZSA9IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5ncyAqIEdG WDhfTUVDX0hQRF9TSVpFOwo+Pgo+PiAgICAgICAgIGlmIChhZGV2LT5nZngubWVjLmhwZF9lb3Bf b2JqID09IE5VTEwpIHsKPj4gICAgICAgICAgICAgICAgIHIgPSBhbWRncHVfYm9fY3JlYXRlKGFk ZXYsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWNfaHBkX3NpemUs Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUsIHRydWUs Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTURHUFVfR0VNX0RPTUFJ Tl9HVFQsIDAsIE5VTEwsIE5VTEwsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7Cj4+ICAgICAgICAgICAgICAgICBpZiAo cikgewo+PiAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfd2FybihhZGV2LT5kZXYsICIoJWQp IGNyZWF0ZSBIRFAgRU9QIGJvIGZhaWxlZFxuIiwgcik7Cj4+ICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiByOwo+PiBAQCAtMjA4MywyMSArMjExNywyMSBAQCBzdGF0aWMgaW50IGdmeF92 OF8wX2dwdV9lYXJseV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAgICAgICAg ICAgICAgICAgZ2JfYWRkcl9jb25maWcgPSBSRUdfU0VUX0ZJRUxEKGdiX2FkZHJfY29uZmlnLCBH Ql9BRERSX0NPTkZJRywgUk9XX1NJWkUsIDIpOwo+PiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ ICAgICAgICAgfQo+PiAgICAgICAgIGFkZXYtPmdmeC5jb25maWcuZ2JfYWRkcl9jb25maWcgPSBn Yl9hZGRyX2NvbmZpZzsKPj4KPj4gICAgICAgICByZXR1cm4gMDsKPj4gIH0KPj4KPj4gIHN0YXRp YyBpbnQgZ2Z4X3Y4XzBfc3dfaW5pdCh2b2lkICpoYW5kbGUpCj4+ICB7Cj4+IC0gICAgICAgaW50 IGksIHI7Cj4+ICsgICAgICAgaW50IGksIHIsIHJpbmdfaWQ7Cj4+ICAgICAgICAgc3RydWN0IGFt ZGdwdV9yaW5nICpyaW5nOwo+PiAgICAgICAgIHN0cnVjdCBhbWRncHVfa2lxICpraXE7Cj4+ICAg ICAgICAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KiloYW5kbGU7Cj4+Cj4+ICAgICAgICAgLyogS0lRIGV2ZW50ICovCj4+ICAgICAgICAgciA9IGFt ZGdwdV9pcnFfYWRkX2lkKGFkZXYsIEFNREdQVV9JSF9DTElFTlRJRF9MRUdBQ1ksIDE3OCwgJmFk ZXYtPmdmeC5raXEuaXJxKTsKPj4gICAgICAgICBpZiAocikKPj4gICAgICAgICAgICAgICAgIHJl dHVybiByOwo+Pgo+PiAgICAgICAgIC8qIEVPUCBFdmVudCAqLwo+PiBAQCAtMjE1MCw0MyArMjE4 NCw1NiBAQCBzdGF0aWMgaW50IGdmeF92OF8wX3N3X2luaXQodm9pZCAqaGFuZGxlKQo+PiAgICAg ICAgICAgICAgICAgICAgICAgICByaW5nLT5kb29yYmVsbF9pbmRleCA9IEFNREdQVV9ET09SQkVM TF9HRlhfUklORzA7Cj4+ICAgICAgICAgICAgICAgICB9Cj4+Cj4+ICAgICAgICAgICAgICAgICBy ID0gYW1kZ3B1X3JpbmdfaW5pdChhZGV2LCByaW5nLCAxMDI0LCAmYWRldi0+Z2Z4LmVvcF9pcnEs Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTURHUFVfQ1BfSVJRX0dG WF9FT1ApOwo+PiAgICAgICAgICAgICAgICAgaWYgKHIpCj4+ICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiByOwo+PiAgICAgICAgIH0KPj4KPj4gICAgICAgICAvKiBzZXQgdXAgdGhlIGNv bXB1dGUgcXVldWVzICovCj4+IC0gICAgICAgZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1f Y29tcHV0ZV9yaW5nczsgaSsrKSB7Cj4+ICsgICAgICAgZm9yIChpID0gMCwgcmluZ19pZCA9IDA7 IGkgPCBBTURHUFVfTUFYX1FVRVVFUzsgaSsrKSB7Cj4+ICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpcnFfdHlwZTsKPj4KPj4gLSAgICAgICAgICAgICAgIC8qIG1heCAzMiBxdWV1ZXMgcGVyIE1F QyAqLwo+PiAtICAgICAgICAgICAgICAgaWYgKChpID49IDMyKSB8fCAoaSA+PSBBTURHUFVfTUFY X0NPTVBVVEVfUklOR1MpKSB7Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIERSTV9FUlJPUigi VG9vIG1hbnkgKCVkKSBjb21wdXRlIHJpbmdzIVxuIiwgaSk7Cj4+ICsgICAgICAgICAgICAgICBp ZiAoIXRlc3RfYml0KGksIGFkZXYtPmdmeC5tZWMucXVldWVfYml0bWFwKSkKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgY29udGludWU7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIGlmIChXQVJO X09OKHJpbmdfaWQgPj0gQU1ER1BVX01BWF9DT01QVVRFX1JJTkdTKSkKPj4gICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Cj4+IC0gICAgICAgICAgICAgICB9Cj4+IC0gICAgICAgICAgICAg ICByaW5nID0gJmFkZXYtPmdmeC5jb21wdXRlX3JpbmdbaV07Cj4+ICsKPj4gKyAgICAgICAgICAg ICAgIHJpbmcgPSAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tyaW5nX2lkXTsKPj4gKwo+PiArICAg ICAgICAgICAgICAgLyogbWVjMCBpcyBtZTEgKi8KPj4gKyAgICAgICAgICAgICAgIHJpbmctPm1l ID0gKChpIC8gYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGUpCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyBhZGV2LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWMpCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxOwo+PiArICAgICAgICAgICAgICAg cmluZy0+cGlwZSA9IChpIC8gYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGUpCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhZGV2LT5nZngubWVjLm51bV9waXBlX3Bl cl9tZWM7Cj4+ICsgICAgICAgICAgICAgICByaW5nLT5xdWV1ZSA9IGkgJSBhZGV2LT5nZngubWVj Lm51bV9xdWV1ZV9wZXJfcGlwZTsKPj4gKwo+PiAgICAgICAgICAgICAgICAgcmluZy0+cmluZ19v YmogPSBOVUxMOwo+PiAgICAgICAgICAgICAgICAgcmluZy0+dXNlX2Rvb3JiZWxsID0gdHJ1ZTsK Pj4gLSAgICAgICAgICAgICAgIHJpbmctPmRvb3JiZWxsX2luZGV4ID0gQU1ER1BVX0RPT1JCRUxM X01FQ19SSU5HMCArIGk7Cj4+IC0gICAgICAgICAgICAgICByaW5nLT5tZSA9IDE7IC8qIGZpcnN0 IE1FQyAqLwo+PiAtICAgICAgICAgICAgICAgcmluZy0+cGlwZSA9IGkgLyA4Owo+PiAtICAgICAg ICAgICAgICAgcmluZy0+cXVldWUgPSBpICUgODsKPj4gLSAgICAgICAgICAgICAgIHJpbmctPmVv cF9ncHVfYWRkciA9IGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9ncHVfYWRkciArIChpICogR0ZYOF9N RUNfSFBEX1NJWkUpOwo+PiArICAgICAgICAgICAgICAgcmluZy0+ZW9wX2dwdV9hZGRyID0gYWRl di0+Z2Z4Lm1lYy5ocGRfZW9wX2dwdV9hZGRyICsgKHJpbmdfaWQgKiBHRlg4X01FQ19IUERfU0la RSk7Cj4+ICsgICAgICAgICAgICAgICByaW5nLT5kb29yYmVsbF9pbmRleCA9IEFNREdQVV9ET09S QkVMTF9NRUNfUklORzAgKyByaW5nX2lkOwo+PiAgICAgICAgICAgICAgICAgc3ByaW50ZihyaW5n LT5uYW1lLCAiY29tcF8lZC4lZC4lZCIsIHJpbmctPm1lLCByaW5nLT5waXBlLCByaW5nLT5xdWV1 ZSk7Cj4+IC0gICAgICAgICAgICAgICBpcnFfdHlwZSA9IEFNREdQVV9DUF9JUlFfQ09NUFVURV9N RUMxX1BJUEUwX0VPUCArIHJpbmctPnBpcGU7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIGlycV90 eXBlID0gQU1ER1BVX0NQX0lSUV9DT01QVVRFX01FQzFfUElQRTBfRU9QCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICsgKChyaW5nLT5tZSAtIDEpICogYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZV9w ZXJfbWVjKQo+PiArICAgICAgICAgICAgICAgICAgICAgICArIHJpbmctPnBpcGU7Cj4+ICsKPj4g ICAgICAgICAgICAgICAgIC8qIHR5cGUtMiBwYWNrZXRzIGFyZSBkZXByZWNhdGVkIG9uIE1FQywg dXNlIHR5cGUtMyBpbnN0ZWFkICovCj4+ICAgICAgICAgICAgICAgICByID0gYW1kZ3B1X3Jpbmdf aW5pdChhZGV2LCByaW5nLCAxMDI0LCAmYWRldi0+Z2Z4LmVvcF9pcnEsCj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfdHlwZSk7Cj4+ICAgICAgICAgICAgICAgICBp ZiAocikKPj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7Cj4+ICsKPj4gKyAgICAg ICAgICAgICAgIHJpbmdfaWQrKzsKPj4gICAgICAgICB9Cj4+Cj4+ICAgICAgICAgciA9IGdmeF92 OF8wX2tpcV9pbml0KGFkZXYpOwo+PiAgICAgICAgIGlmIChyKSB7Cj4+ICAgICAgICAgICAgICAg ICBEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0IEtJUSBCT3MhXG4iKTsKPj4gICAgICAgICAgICAg ICAgIHJldHVybiByOwo+PiAgICAgICAgIH0KPj4KPj4gICAgICAgICBraXEgPSAmYWRldi0+Z2Z4 LmtpcTsKPj4gICAgICAgICByID0gZ2Z4X3Y4XzBfa2lxX2luaXRfcmluZyhhZGV2LCAma2lxLT5y aW5nLCAma2lxLT5pcnEpOwo+PiBAQCAtNTY4NiwyMSArNTczMywyMSBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGFtZGdwdV9nZnhfZnVuY3MgZ2Z4X3Y4XzBfZ2Z4X2Z1bmNzID0gewo+PiAgICAgICAg IC5zZWxlY3Rfc2Vfc2ggPSAmZ2Z4X3Y4XzBfc2VsZWN0X3NlX3NoLAo+PiAgICAgICAgIC5yZWFk X3dhdmVfZGF0YSA9ICZnZnhfdjhfMF9yZWFkX3dhdmVfZGF0YSwKPj4gICAgICAgICAucmVhZF93 YXZlX3NncHJzID0gJmdmeF92OF8wX3JlYWRfd2F2ZV9zZ3BycywKPj4gIH07Cj4+Cj4+ICBzdGF0 aWMgaW50IGdmeF92OF8wX2Vhcmx5X2luaXQodm9pZCAqaGFuZGxlKQo+PiAgewo+PiAgICAgICAg IHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFu ZGxlOwo+Pgo+PiAgICAgICAgIGFkZXYtPmdmeC5udW1fZ2Z4X3JpbmdzID0gR0ZYOF9OVU1fR0ZY X1JJTkdTOwo+PiAtICAgICAgIGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5ncyA9IEdGWDhfTlVN X0NPTVBVVEVfUklOR1M7Cj4+ICsgICAgICAgYWRldi0+Z2Z4Lm51bV9jb21wdXRlX3JpbmdzID0g QU1ER1BVX01BWF9DT01QVVRFX1JJTkdTOwo+PiAgICAgICAgIGFkZXYtPmdmeC5mdW5jcyA9ICZn ZnhfdjhfMF9nZnhfZnVuY3M7Cj4+ICAgICAgICAgZ2Z4X3Y4XzBfc2V0X3JpbmdfZnVuY3MoYWRl dik7Cj4+ICAgICAgICAgZ2Z4X3Y4XzBfc2V0X2lycV9mdW5jcyhhZGV2KTsKPj4gICAgICAgICBn ZnhfdjhfMF9zZXRfZ2RzX2luaXQoYWRldik7Cj4+ICAgICAgICAgZ2Z4X3Y4XzBfc2V0X3JsY19m dW5jcyhhZGV2KTsKPj4KPj4gICAgICAgICByZXR1cm4gMDsKPj4gIH0KPj4KPj4gIHN0YXRpYyBp bnQgZ2Z4X3Y4XzBfbGF0ZV9pbml0KHZvaWQgKmhhbmRsZSkKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OV8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9nZnhfdjlfMC5jCj4+IGluZGV4IDFhN2I3NDMuLmRlNmU1MzcgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OV8wLmMKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y5XzAuYwo+PiBAQCAtMzEsMjEgKzMxLDIwIEBACj4+ICAj aW5jbHVkZSAidmVnYTEwL0dDL2djXzlfMF9vZmZzZXQuaCIKPj4gICNpbmNsdWRlICJ2ZWdhMTAv R0MvZ2NfOV8wX3NoX21hc2suaCIKPj4gICNpbmNsdWRlICJ2ZWdhMTAvdmVnYTEwX2VudW0uaCIK Pj4gICNpbmNsdWRlICJ2ZWdhMTAvSERQL2hkcF80XzBfb2Zmc2V0LmgiCj4+Cj4+ICAjaW5jbHVk ZSAic29jMTVfY29tbW9uLmgiCj4+ICAjaW5jbHVkZSAiY2xlYXJzdGF0ZV9nZng5LmgiCj4+ICAj aW5jbHVkZSAidjlfc3RydWN0cy5oIgo+Pgo+PiAgI2RlZmluZSBHRlg5X05VTV9HRlhfUklOR1Mg ICAgIDEKPj4gLSNkZWZpbmUgR0ZYOV9OVU1fQ09NUFVURV9SSU5HUyA4Cj4+ICAjZGVmaW5lIEdG WDlfTlVNX1NFICAgICAgICAgICAgNAo+PiAgI2RlZmluZSBSTENHX1VDT0RFX0xPQURJTkdfU1RB UlRfQUREUkVTUyAweDIwMDAKPj4KPj4gIE1PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3ZlZ2ExMF9j ZS5iaW4iKTsKPj4gIE1PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3ZlZ2ExMF9wZnAuYmluIik7Cj4+ ICBNT0RVTEVfRklSTVdBUkUoImFtZGdwdS92ZWdhMTBfbWUuYmluIik7Cj4+ICBNT0RVTEVfRklS TVdBUkUoImFtZGdwdS92ZWdhMTBfbWVjLmJpbiIpOwo+PiAgTU9EVUxFX0ZJUk1XQVJFKCJhbWRn cHUvdmVnYTEwX21lYzIuYmluIik7Cj4+ICBNT0RVTEVfRklSTVdBUkUoImFtZGdwdS92ZWdhMTBf cmxjLmJpbiIpOwo+Pgo+PiBAQCAtNDY5LDQ1ICs0NjgsNzkgQEAgc3RhdGljIHZvaWQgZ2Z4X3Y5 XzBfbWVjX2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ICAgICAgICAgICAgICAg ICBhbWRncHVfYm9fdW5waW4oYWRldi0+Z2Z4Lm1lYy5tZWNfZndfb2JqKTsKPj4gICAgICAgICAg ICAgICAgIGFtZGdwdV9ib191bnJlc2VydmUoYWRldi0+Z2Z4Lm1lYy5tZWNfZndfb2JqKTsKPj4K Pj4gICAgICAgICAgICAgICAgIGFtZGdwdV9ib191bnJlZigmYWRldi0+Z2Z4Lm1lYy5tZWNfZndf b2JqKTsKPj4gICAgICAgICAgICAgICAgIGFkZXYtPmdmeC5tZWMubWVjX2Z3X29iaiA9IE5VTEw7 Cj4+ICAgICAgICAgfQo+PiAgfQo+Pgo+PiAgI2RlZmluZSBNRUNfSFBEX1NJWkUgMjA0OAo+Pgo+ PiArc3RhdGljIHZvaWQgZ2Z4X3Y5XzBfY29tcHV0ZV9xdWV1ZV9hY3F1aXJlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+PiArewo+PiArICAgICAgIGludCBpLCBxdWV1ZSwgcGlwZSwgbWVj Owo+PiArCj4+ICsgICAgICAgLyogcG9saWN5IGZvciBhbWRncHUgY29tcHV0ZSBxdWV1ZSBvd25l cnNoaXAgKi8KPj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgQU1ER1BVX01BWF9RVUVVRVM7ICsr aSkgewo+PiArICAgICAgICAgICAgICAgcXVldWUgPSBpICUgYWRldi0+Z2Z4Lm1lYy5udW1fcXVl dWVfcGVyX3BpcGU7Cj4+ICsgICAgICAgICAgICAgICBwaXBlID0gKGkgLyBhZGV2LT5nZngubWVj Lm51bV9xdWV1ZV9wZXJfcGlwZSkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgJSBhZGV2LT5n ZngubWVjLm51bV9waXBlX3Blcl9tZWM7Cj4+ICsgICAgICAgICAgICAgICBtZWMgPSAoaSAvIGFk ZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBlKQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAvIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYzsKPj4gKwo+PiArICAgICAgICAgICAg ICAgLyogd2UndmUgcnVuIG91dCBvZiBIVyAqLwo+PiArICAgICAgICAgICAgICAgaWYgKG1lYyA+ IGFkZXYtPmdmeC5tZWMubnVtX21lYykKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIC8qIHBvbGljeTogYW1kZ3B1IG93bnMgYWxsIHF1ZXVl cyBpbiB0aGUgZmlyc3QgcGlwZSAqLwo+PiArICAgICAgICAgICAgICAgaWYgKG1lYyA9PSAwICYm IHBpcGUgPT0gMCkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgc2V0X2JpdChpLCBhZGV2LT5n ZngubWVjLnF1ZXVlX2JpdG1hcCk7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgLyogdXBk YXRlIHRoZSBudW1iZXIgb2YgYWN0aXZlIGNvbXB1dGUgcmluZ3MgKi8KPj4gKyAgICAgICBhZGV2 LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPQo+PiArICAgICAgICAgICAgICAgYml0bWFwX3dlaWdo dChhZGV2LT5nZngubWVjLnF1ZXVlX2JpdG1hcCwgQU1ER1BVX01BWF9RVUVVRVMpOwo+PiArCj4+ ICsgICAgICAgLyogSWYgeW91IGhpdCB0aGlzIGNhc2UgYW5kIGVkaXRlZCB0aGUgcG9saWN5LCB5 b3UgcHJvYmFibHkganVzdAo+PiArICAgICAgICAqIG5lZWQgdG8gaW5jcmVhc2UgQU1ER1BVX01B WF9DT01QVVRFX1JJTkdTICovCj4+ICsgICAgICAgaWYgKFdBUk5fT04oYWRldi0+Z2Z4Lm51bV9j b21wdXRlX3JpbmdzID4gQU1ER1BVX01BWF9DT01QVVRFX1JJTkdTKSkKPj4gKyAgICAgICAgICAg ICAgIGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5ncyA9IEFNREdQVV9NQVhfQ09NUFVURV9SSU5H UzsKPj4gK30KPj4gKwo+PiAgc3RhdGljIGludCBnZnhfdjlfMF9tZWNfaW5pdChzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKPj4gIHsKPj4gICAgICAgICBpbnQgcjsKPj4gICAgICAgICB1MzIg KmhwZDsKPj4gICAgICAgICBjb25zdCBfX2xlMzIgKmZ3X2RhdGE7Cj4+ICAgICAgICAgdW5zaWdu ZWQgZndfc2l6ZTsKPj4gICAgICAgICB1MzIgKmZ3Owo+PiAgICAgICAgIHNpemVfdCBtZWNfaHBk X3NpemU7Cj4+Cj4+ICAgICAgICAgY29uc3Qgc3RydWN0IGdmeF9maXJtd2FyZV9oZWFkZXJfdjFf MCAqbWVjX2hkcjsKPj4KPj4gKyAgICAgICBiaXRtYXBfemVybyhhZGV2LT5nZngubWVjLnF1ZXVl X2JpdG1hcCwgQU1ER1BVX01BWF9RVUVVRVMpOwo+PiArCj4+ICAgICAgICAgc3dpdGNoIChhZGV2 LT5hc2ljX3R5cGUpIHsKPj4gICAgICAgICBjYXNlIENISVBfVkVHQTEwOgo+PiAgICAgICAgICAg ICAgICAgYWRldi0+Z2Z4Lm1lYy5udW1fbWVjID0gMjsKPj4gICAgICAgICAgICAgICAgIGJyZWFr Owo+PiAgICAgICAgIGRlZmF1bHQ6Cj4+ICAgICAgICAgICAgICAgICBhZGV2LT5nZngubWVjLm51 bV9tZWMgPSAxOwo+PiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICAgICAgICAgfQo+Pgo+PiAg ICAgICAgIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYyA9IDQ7Cj4+ICAgICAgICAgYWRl di0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGUgPSA4Owo+Pgo+PiAtICAgICAgIC8qIG9ubHkg MSBwaXBlIG9mIHRoZSBmaXJzdCBNRUMgaXMgb3duZWQgYnkgYW1kZ3B1ICovCj4+IC0gICAgICAg bWVjX2hwZF9zaXplID0gMSAqIDEgKiBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZSAq IE1FQ19IUERfU0laRTsKPj4gKyAgICAgICAvKiB0YWtlIG93bmVyc2hpcCBvZiB0aGUgcmVsZXZh bnQgY29tcHV0ZSBxdWV1ZXMgKi8KPj4gKyAgICAgICBnZnhfdjlfMF9jb21wdXRlX3F1ZXVlX2Fj cXVpcmUoYWRldik7Cj4+ICsgICAgICAgbWVjX2hwZF9zaXplID0gYWRldi0+Z2Z4Lm51bV9jb21w dXRlX3JpbmdzICogTUVDX0hQRF9TSVpFOwo+Pgo+PiAgICAgICAgIGlmIChhZGV2LT5nZngubWVj LmhwZF9lb3Bfb2JqID09IE5VTEwpIHsKPj4gICAgICAgICAgICAgICAgIHIgPSBhbWRncHVfYm9f Y3JlYXRlKGFkZXYsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWNf aHBkX3NpemUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJ WkUsIHRydWUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTURHUFVf R0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsIE5VTEwsCj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7Cj4+ICAgICAgICAgICAg ICAgICBpZiAocikgewo+PiAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfd2FybihhZGV2LT5k ZXYsICIoJWQpIGNyZWF0ZSBIRFAgRU9QIGJvIGZhaWxlZFxuIiwgcik7Cj4+ICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiByOwo+PiBAQCAtMTAyNCwyMSArMTA1NywyMSBAQCBzdGF0aWMg aW50IGdmeF92OV8wX25nZ19lbihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gICAgICAg ICBnZnhfdjlfMF93cml0ZV9kYXRhX3RvX3JlZyhyaW5nLCAwLCBmYWxzZSwKPj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhbWRncHVfZ2RzX3JlZ19vZmZzZXRbMF0ubWVtX3Np emUsIDApOwo+Pgo+PiAgICAgICAgIGFtZGdwdV9yaW5nX2NvbW1pdChyaW5nKTsKPj4KPj4gICAg ICAgICByZXR1cm4gMDsKPj4gIH0KPj4KPj4gIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfc3dfaW5pdCh2 b2lkICpoYW5kbGUpCj4+ICB7Cj4+IC0gICAgICAgaW50IGksIHI7Cj4+ICsgICAgICAgaW50IGks IHIsIHJpbmdfaWQ7Cj4+ICAgICAgICAgc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nOwo+PiAgICAg ICAgIHN0cnVjdCBhbWRncHVfa2lxICpraXE7Cj4+ICAgICAgICAgc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+Cj4+ICAgICAgICAg LyogS0lRIGV2ZW50ICovCj4+ICAgICAgICAgciA9IGFtZGdwdV9pcnFfYWRkX2lkKGFkZXYsIEFN REdQVV9JSF9DTElFTlRJRF9HUkJNX0NQLCAxNzgsICZhZGV2LT5nZngua2lxLmlycSk7Cj4+ICAg ICAgICAgaWYgKHIpCj4+ICAgICAgICAgICAgICAgICByZXR1cm4gcjsKPj4KPj4gICAgICAgICAv KiBFT1AgRXZlbnQgKi8KPj4gQEAgLTEwODEsMjEgKzExMTQsNjAgQEAgc3RhdGljIGludCBnZnhf djlfMF9zd19pbml0KHZvaWQgKmhhbmRsZSkKPj4gICAgICAgICAgICAgICAgIHNwcmludGYocmlu Zy0+bmFtZSwgImdmeCIpOwo+PiAgICAgICAgICAgICAgICAgcmluZy0+dXNlX2Rvb3JiZWxsID0g dHJ1ZTsKPj4gICAgICAgICAgICAgICAgIHJpbmctPmRvb3JiZWxsX2luZGV4ID0gQU1ER1BVX0RP T1JCRUxMNjRfR0ZYX1JJTkcwIDw8IDE7Cj4+ICAgICAgICAgICAgICAgICByID0gYW1kZ3B1X3Jp bmdfaW5pdChhZGV2LCByaW5nLCAxMDI0LAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmFkZXYtPmdmeC5lb3BfaXJxLCBBTURHUFVfQ1BfSVJRX0dGWF9FT1ApOwo+PiAg ICAgICAgICAgICAgICAgaWYgKHIpCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy Owo+PiAgICAgICAgIH0KPj4KPj4gICAgICAgICAvKiBzZXQgdXAgdGhlIGNvbXB1dGUgcXVldWVz ICovCj4+IC0gICAgICAgZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5n czsgaSsrKSB7Cj4+ICsgICAgICAgZm9yIChpID0gMCwgcmluZ19pZCA9IDA7IGkgPCBBTURHUFVf TUFYX1FVRVVFUzsgaSsrKSB7Cj4+ICsgICAgICAgICAgICAgICB1bnNpZ25lZCBpcnFfdHlwZTsK Pj4gKwo+PiArICAgICAgICAgICAgICAgaWYgKCF0ZXN0X2JpdChpLCBhZGV2LT5nZngubWVjLnF1 ZXVlX2JpdG1hcCkpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiArCj4+ ICsgICAgICAgICAgICAgICBpZiAoV0FSTl9PTihyaW5nX2lkID49IEFNREdQVV9NQVhfQ09NUFVU RV9SSU5HUykpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAg ICAgICAgICAgICByaW5nID0gJmFkZXYtPmdmeC5jb21wdXRlX3JpbmdbcmluZ19pZF07Cj4+ICsK Pj4gKyAgICAgICAgICAgICAgIC8qIG1lYzAgaXMgbWUxICovCj4+ICsgICAgICAgICAgICAgICBy aW5nLT5tZSA9ICgoaSAvIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBlKQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJf bWVjKQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMTsKPj4gKyAgICAgICAg ICAgICAgIHJpbmctPnBpcGUgPSAoaSAvIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBl KQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgYWRldi0+Z2Z4Lm1lYy5udW1f cGlwZV9wZXJfbWVjOwo+PiArICAgICAgICAgICAgICAgcmluZy0+cXVldWUgPSBpICUgYWRldi0+ Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGU7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIHJpbmct PnJpbmdfb2JqID0gTlVMTDsKPj4gKyAgICAgICAgICAgICAgIHJpbmctPnVzZV9kb29yYmVsbCA9 IHRydWU7Cj4+ICsgICAgICAgICAgICAgICByaW5nLT5lb3BfZ3B1X2FkZHIgPSBhZGV2LT5nZngu bWVjLmhwZF9lb3BfZ3B1X2FkZHIgKyAocmluZ19pZCAqIE1FQ19IUERfU0laRSk7Cj4+ICsgICAg ICAgICAgICAgICByaW5nLT5kb29yYmVsbF9pbmRleCA9IEFNREdQVV9ET09SQkVMTF9NRUNfUklO RzAgKyByaW5nX2lkOwo+PiArICAgICAgICAgICAgICAgc3ByaW50ZihyaW5nLT5uYW1lLCAiY29t cF8lZC4lZC4lZCIsIHJpbmctPm1lLCByaW5nLT5waXBlLCByaW5nLT5xdWV1ZSk7Cj4+ICsKPj4g KyAgICAgICAgICAgICAgIGlycV90eXBlID0gQU1ER1BVX0NQX0lSUV9DT01QVVRFX01FQzFfUElQ RTBfRU9QCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICsgKChyaW5nLT5tZSAtIDEpICogYWRl di0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJfbWVjKQo+PiArICAgICAgICAgICAgICAgICAgICAgICAr IHJpbmctPnBpcGU7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIC8qIHR5cGUtMiBwYWNrZXRzIGFy ZSBkZXByZWNhdGVkIG9uIE1FQywgdXNlIHR5cGUtMyBpbnN0ZWFkICovCj4+ICsgICAgICAgICAg ICAgICByID0gYW1kZ3B1X3JpbmdfaW5pdChhZGV2LCByaW5nLCAxMDI0LCAmYWRldi0+Z2Z4LmVv cF9pcnEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfdHlwZSk7 Cj4+ICsgICAgICAgICAgICAgICBpZiAocikKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIHI7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIHJpbmdfaWQrKzsKPj4gKyAgICAgICB9Cj4+ ICsKPj4gKyAgICAgICAvKiBzZXQgdXAgdGhlIGNvbXB1dGUgcXVldWVzICovCj4+ICsgICAgICAg Zm9yIChpID0gMCwgcmluZ19pZCA9IDA7IGkgPCBBTURHUFVfTUFYX1FVRVVFUzsgaSsrKSB7Cj4+ ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpcnFfdHlwZTsKPj4KPj4gICAgICAgICAgICAgICAg IC8qIG1heCAzMiBxdWV1ZXMgcGVyIE1FQyAqLwo+PiAgICAgICAgICAgICAgICAgaWYgKChpID49 IDMyKSB8fCAoaSA+PSBBTURHUFVfTUFYX0NPTVBVVEVfUklOR1MpKSB7Cj4+ICAgICAgICAgICAg ICAgICAgICAgICAgIERSTV9FUlJPUigiVG9vIG1hbnkgKCVkKSBjb21wdXRlIHJpbmdzIVxuIiwg aSk7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiAgICAgICAgICAgICAgICAg fQo+PiAgICAgICAgICAgICAgICAgcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nW2ldOwo+ PiAgICAgICAgICAgICAgICAgcmluZy0+cmluZ19vYmogPSBOVUxMOwo+PiAgICAgICAgICAgICAg ICAgcmluZy0+dXNlX2Rvb3JiZWxsID0gdHJ1ZTsKPj4gQEAgLTI2NTUsMjEgKzI3MjcsMjEgQEAg c3RhdGljIHZvaWQgZ2Z4X3Y5XzBfcmluZ19lbWl0X2dkc19zd2l0Y2goc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nLAo+PiAgICAgICAgIGdmeF92OV8wX3dyaXRlX2RhdGFfdG9fcmVnKHJpbmcsIDAs IGZhbHNlLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtZGdwdV9nZHNf cmVnX29mZnNldFt2bWlkXS5vYSwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoMSA8PCAob2Ffc2l6ZSArIG9hX2Jhc2UpKSAtICgxIDw8IG9hX2Jhc2UpKTsKPj4gIH0KPj4K Pj4gIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfZWFybHlfaW5pdCh2b2lkICpoYW5kbGUpCj4+ICB7Cj4+ ICAgICAgICAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKiloYW5kbGU7Cj4+Cj4+ICAgICAgICAgYWRldi0+Z2Z4Lm51bV9nZnhfcmluZ3MgPSBHRlg5 X05VTV9HRlhfUklOR1M7Cj4+IC0gICAgICAgYWRldi0+Z2Z4Lm51bV9jb21wdXRlX3JpbmdzID0g R0ZYOV9OVU1fQ09NUFVURV9SSU5HUzsKPj4gKyAgICAgICBhZGV2LT5nZngubnVtX2NvbXB1dGVf cmluZ3MgPSBBTURHUFVfTUFYX0NPTVBVVEVfUklOR1M7Cj4+ICAgICAgICAgZ2Z4X3Y5XzBfc2V0 X3JpbmdfZnVuY3MoYWRldik7Cj4+ICAgICAgICAgZ2Z4X3Y5XzBfc2V0X2lycV9mdW5jcyhhZGV2 KTsKPj4gICAgICAgICBnZnhfdjlfMF9zZXRfZ2RzX2luaXQoYWRldik7Cj4+ICAgICAgICAgZ2Z4 X3Y5XzBfc2V0X3JsY19mdW5jcyhhZGV2KTsKPj4KPj4gICAgICAgICByZXR1cm4gMDsKPj4gIH0K Pj4KPj4gIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfbGF0ZV9pbml0KHZvaWQgKmhhbmRsZSkKPj4gIHsK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9rZ2Rfa2ZkX2ludGVy ZmFjZS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9rZmRfaW50ZXJmYWNlLmgK Pj4gaW5kZXggYTA5ZDlmMy4uNjdmNmQxOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9pbmNsdWRlL2tnZF9rZmRfaW50ZXJmYWNlLmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9pbmNsdWRlL2tnZF9rZmRfaW50ZXJmYWNlLmgKPj4gQEAgLTI2LDIwICsyNiwyMSBAQAo+ PiAgICovCj4+Cj4+ICAjaWZuZGVmIEtHRF9LRkRfSU5URVJGQUNFX0hfSU5DTFVERUQKPj4gICNk ZWZpbmUgS0dEX0tGRF9JTlRFUkZBQ0VfSF9JTkNMVURFRAo+Pgo+PiAgI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+Cj4+Cj4+ICBzdHJ1Y3QgcGNpX2RldjsKPj4KPj4gICNkZWZpbmUgS0ZEX0lOVEVS RkFDRV9WRVJTSU9OIDEKPj4gKyNkZWZpbmUgS0dEX01BWF9RVUVVRVMgMTI4Cj4+Cj4+ICBzdHJ1 Y3Qga2ZkX2RldjsKPj4gIHN0cnVjdCBrZ2RfZGV2Owo+Pgo+PiAgc3RydWN0IGtnZF9tZW07Cj4+ Cj4+ICBlbnVtIGtnZF9tZW1vcnlfcG9vbCB7Cj4+ICAgICAgICAgS0dEX1BPT0xfU1lTVEVNX0NB Q0hFQUJMRSA9IDEsCj4+ICAgICAgICAgS0dEX1BPT0xfU1lTVEVNX1dSSVRFQ09NQklORSA9IDIs Cj4+ICAgICAgICAgS0dEX1BPT0xfRlJBTUVCVUZGRVIgPSAzLAo+PiAtLQo+PiAyLjkuMwo+Pgo+ PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBhbWQt Z2Z4IG1haWxpbmcgbGlzdAo+PiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5n IGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==