From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: Re: [PATCH 01/26] drm/amdgpu: refactor MQD/HQD initialization v2 Date: Wed, 12 Apr 2017 15:35:08 -0400 Message-ID: References: <20170406062139.3335-1-andresx7@gmail.com> <20170406062139.3335-2-andresx7@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 WW91ciBwcm9wb3NlZCBwYXRjaCBsb29rcyBnb29kIHRvIG1lLiBZb3UgY2FuIGFkZCBhOgoKUmV2 aWV3ZWQtYnk6IEFuZHJlcyBSb2RyaWd1ZXogPGFuZHJlc3g3QGdtYWlsLmNvbT4KCk9uIDIwMTct MDQtMTEgMDY6MTggUE0sIEFsZXggRGV1Y2hlciB3cm90ZToKPiBPbiBUaHUsIEFwciA2LCAyMDE3 IGF0IDI6MjEgQU0sIEFuZHJlcyBSb2RyaWd1ZXogPGFuZHJlc3g3QGdtYWlsLmNvbT4gd3JvdGU6 Cj4+IFRoZSBNUUQgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgY3VycmVudGx5IGV4aXN0cyBpbiAzIGRp ZmZlcmVudCBwbGFjZXMuCj4+IFJlZmFjdG9yIGl0IHRvIGFic29yYiBhbGwgdGhlIGR1cGxpY2F0 ZXMuCj4+Cj4+IFRoZSBzdWNjZXNzIHBhdGggcmVtYWlucyBtb3N0bHkgaWRlbnRpY2FsIGV4Y2Vw dCBmb3IgYSBzbGlnaHRseQo+PiBkaWZmZXJlbnQgb3JkZXIgaW4gdGhlIG5vbi1raXEgY2FzZS4g VGhpcyBzaG91bGRuJ3QgbWF0dGVyIGlmIHRoZSBIUUQKPj4gaXMgZGlzYWJsZWQuCj4+Cj4+IFRo ZSBlcnJvciBoYW5kbGluZyBwYXRocyBoYXZlIGJlZW4gdXBkYXRlZCB0byBkZWFsIHdpdGggdGhl IG5ldyBjb2RlCj4+IHN0cnVjdHVyZS4KPj4KPj4gdjI6IHRoZSBub24ta2lxIHBhdGggZm9yIGdm eHY4IHdhcyBkcm9wcGVkIGluIHRoZSByZWJhc2UKPj4KPj4gUmV2aWV3ZWQtYnk6IEVkd2FyZCBP J0NhbGxhZ2hhbiA8ZnVuZnVuY3RvckBmb2xrbG9yZTE5ODQubmV0Pgo+PiBBY2tlZC1ieTogQ2hy aXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+PiBTaWduZWQtb2ZmLWJ5 OiBBbmRyZXMgUm9kcmlndWV6IDxhbmRyZXN4N0BnbWFpbC5jb20+Cj4+IC0tLQo+PiAgZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYyB8IDQ0NyArKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhfMC5j IHwgMTEwICsrKysrLS0tLQo+PiAgMiBmaWxlcyBjaGFuZ2VkLCAzMDkgaW5zZXJ0aW9ucygrKSwg MjQ4IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvZ2Z4X3Y3XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18wLmMK Pj4gaW5kZXggMTg1Y2IzMS4uZjY3ZWY1OCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9nZnhfdjdfMC5jCj4+IEBAIC00MiwyMCArNDIsMjIgQEAKPj4gICNpbmNsdWRlICJnY2EvZ2Z4 XzdfMl9zaF9tYXNrLmgiCj4+Cj4+ICAjaW5jbHVkZSAiZ21jL2dtY183XzBfZC5oIgo+PiAgI2lu Y2x1ZGUgImdtYy9nbWNfN18wX3NoX21hc2suaCIKPj4KPj4gICNpbmNsdWRlICJvc3Mvb3NzXzJf MF9kLmgiCj4+ICAjaW5jbHVkZSAib3NzL29zc18yXzBfc2hfbWFzay5oIgo+Pgo+PiAgI2RlZmlu ZSBHRlg3X05VTV9HRlhfUklOR1MgICAgIDEKPj4gICNkZWZpbmUgR0ZYN19OVU1fQ09NUFVURV9S SU5HUyA4Cj4+ICsjZGVmaW5lIEdGWDdfTUVDX0hQRF9TSVpFICAgICAgMjA0OAo+PiArCj4+Cj4+ ICBzdGF0aWMgdm9pZCBnZnhfdjdfMF9zZXRfcmluZ19mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldik7Cj4+ICBzdGF0aWMgdm9pZCBnZnhfdjdfMF9zZXRfaXJxX2Z1bmNzKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KTsKPj4gIHN0YXRpYyB2b2lkIGdmeF92N18wX3NldF9nZHNfaW5p dChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7Cj4+Cj4+ICBNT0RVTEVfRklSTVdBUkUoInJh ZGVvbi9ib25haXJlX3BmcC5iaW4iKTsKPj4gIE1PRFVMRV9GSVJNV0FSRSgicmFkZW9uL2JvbmFp cmVfbWUuYmluIik7Cj4+ICBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9ib25haXJlX2NlLmJpbiIp Owo+PiAgTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vYm9uYWlyZV9ybGMuYmluIik7Cj4+ICBNT0RV TEVfRklSTVdBUkUoInJhZGVvbi9ib25haXJlX21lYy5iaW4iKTsKPj4gQEAgLTI4MTQsNDAgKzI4 MTYsMzggQEAgc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfbWVjX2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCj4+ICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHkociAhPSAwKSkKPj4gICAg ICAgICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSByZXNlcnZlIEhQ RCBFT1AgYm8gZmFpbGVkXG4iLCByKTsKPj4gICAgICAgICAgICAgICAgIGFtZGdwdV9ib191bnBp bihhZGV2LT5nZngubWVjLmhwZF9lb3Bfb2JqKTsKPj4gICAgICAgICAgICAgICAgIGFtZGdwdV9i b191bnJlc2VydmUoYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7Cj4+Cj4+ICAgICAgICAgICAg ICAgICBhbWRncHVfYm9fdW5yZWYoJmFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmopOwo+PiAgICAg ICAgICAgICAgICAgYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaiA9IE5VTEw7Cj4+ICAgICAgICAg fQo+PiAgfQo+Pgo+PiAtI2RlZmluZSBNRUNfSFBEX1NJWkUgMjA0OAo+PiAtCj4+ICBzdGF0aWMg aW50IGdmeF92N18wX21lY19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAgewo+ PiAgICAgICAgIGludCByOwo+PiAgICAgICAgIHUzMiAqaHBkOwo+Pgo+PiAgICAgICAgIC8qCj4+ ICAgICAgICAgICogS1Y6ICAgIDIgTUVDLCA0IFBpcGVzL01FQywgOCBRdWV1ZXMvUGlwZSAtIDY0 IFF1ZXVlcyB0b3RhbAo+PiAgICAgICAgICAqIENJL0tCOiAxIE1FQywgNCBQaXBlcy9NRUMsIDgg UXVldWVzL1BpcGUgLSAzMiBRdWV1ZXMgdG90YWwKPj4gICAgICAgICAgKiBOb25ldGhlbGVzcywg d2UgYXNzaWduIG9ubHkgMSBwaXBlIGJlY2F1c2UgYWxsIG90aGVyIHBpcGVzIHdpbGwKPj4gICAg ICAgICAgKiBiZSBoYW5kbGVkIGJ5IEtGRAo+PiAgICAgICAgICAqLwo+PiAgICAgICAgIGFkZXYt PmdmeC5tZWMubnVtX21lYyA9IDE7Cj4+ICAgICAgICAgYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZSA9 IDE7Cj4+ICAgICAgICAgYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWUgPSBhZGV2LT5nZngubWVjLm51 bV9tZWMgKiBhZGV2LT5nZngubWVjLm51bV9waXBlICogODsKPj4KPj4gICAgICAgICBpZiAoYWRl di0+Z2Z4Lm1lYy5ocGRfZW9wX29iaiA9PSBOVUxMKSB7Cj4+ICAgICAgICAgICAgICAgICByID0g YW1kZ3B1X2JvX2NyZWF0ZShhZGV2LAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYWRldi0+Z2Z4Lm1lYy5udW1fbWVjICphZGV2LT5nZngubWVjLm51bV9waXBlICogTUVD X0hQRF9TSVpFICogMiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk ZXYtPmdmeC5tZWMubnVtX21lYyAqIGFkZXYtPmdmeC5tZWMubnVtX3BpcGUgKiBHRlg3X01FQ19I UERfU0laRSAqIDIsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdF X1NJWkUsIHRydWUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTURH UFVfR0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsIE5VTEwsCj4+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7Cj4+ICAgICAgICAg ICAgICAgICBpZiAocikgewo+PiAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfd2FybihhZGV2 LT5kZXYsICIoJWQpIGNyZWF0ZSBIRFAgRU9QIGJvIGZhaWxlZFxuIiwgcik7Cj4+ICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiByOwo+PiAgICAgICAgICAgICAgICAgfQo+PiAgICAgICAg IH0KPj4KPj4gICAgICAgICByID0gYW1kZ3B1X2JvX3Jlc2VydmUoYWRldi0+Z2Z4Lm1lYy5ocGRf ZW9wX29iaiwgZmFsc2UpOwo+PiBAQCAtMjg2MywyMSArMjg2MywyMSBAQCBzdGF0aWMgaW50IGdm eF92N18wX21lY19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAgICAgICAgICAg ICAgICAgcmV0dXJuIHI7Cj4+ICAgICAgICAgfQo+PiAgICAgICAgIHIgPSBhbWRncHVfYm9fa21h cChhZGV2LT5nZngubWVjLmhwZF9lb3Bfb2JqLCAodm9pZCAqKikmaHBkKTsKPj4gICAgICAgICBp ZiAocikgewo+PiAgICAgICAgICAgICAgICAgZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBtYXAg SERQIEVPUCBibyBmYWlsZWRcbiIsIHIpOwo+PiAgICAgICAgICAgICAgICAgZ2Z4X3Y3XzBfbWVj X2ZpbmkoYWRldik7Cj4+ICAgICAgICAgICAgICAgICByZXR1cm4gcjsKPj4gICAgICAgICB9Cj4+ Cj4+ICAgICAgICAgLyogY2xlYXIgbWVtb3J5LiAgTm90IHN1cmUgaWYgdGhpcyBpcyByZXF1aXJl ZCBvciBub3QgKi8KPj4gLSAgICAgICBtZW1zZXQoaHBkLCAwLCBhZGV2LT5nZngubWVjLm51bV9t ZWMgKmFkZXYtPmdmeC5tZWMubnVtX3BpcGUgKiBNRUNfSFBEX1NJWkUgKiAyKTsKPj4gKyAgICAg ICBtZW1zZXQoaHBkLCAwLCBhZGV2LT5nZngubWVjLm51bV9tZWMgKiBhZGV2LT5nZngubWVjLm51 bV9waXBlICogR0ZYN19NRUNfSFBEX1NJWkUgKiAyKTsKPj4KPj4gICAgICAgICBhbWRncHVfYm9f a3VubWFwKGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmopOwo+PiAgICAgICAgIGFtZGdwdV9ib191 bnJlc2VydmUoYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7Cj4+Cj4+ICAgICAgICAgcmV0dXJu IDA7Cj4+ICB9Cj4+Cj4+ICBzdHJ1Y3QgaHFkX3JlZ2lzdGVycwo+PiAgewo+PiAgICAgICAgIHUz MiBjcF9tcWRfYmFzZV9hZGRyOwo+PiBAQCAtMjkzOCwyNjEgKzI5MzgsMjk2IEBAIHN0cnVjdCBi b25haXJlX21xZAo+PiAgICAgICAgIHUzMiByZXN0YXJ0WzNdOwo+PiAgICAgICAgIHUzMiB0aHJl YWRfdHJhY2VfZW5hYmxlOwo+PiAgICAgICAgIHUzMiByZXNlcnZlZDE7Cj4+ICAgICAgICAgdTMy IHVzZXJfZGF0YVsxNl07Cj4+ICAgICAgICAgdTMyIHZndGNzX2ludm9rZV9jb3VudFsyXTsKPj4g ICAgICAgICBzdHJ1Y3QgaHFkX3JlZ2lzdGVycyBxdWV1ZV9zdGF0ZTsKPj4gICAgICAgICB1MzIg ZGVxdWV1ZV9jbnRyOwo+PiAgICAgICAgIHUzMiBpbnRlcnJ1cHRfcXVldWVbNjRdOwo+PiAgfTsK Pj4KPj4gLS8qKgo+PiAtICogZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9yZXN1bWUgLSBzZXR1cCB0aGUg Y29tcHV0ZSBxdWV1ZSByZWdpc3RlcnMKPj4gLSAqCj4+IC0gKiBAYWRldjogYW1kZ3B1X2Rldmlj ZSBwb2ludGVyCj4+IC0gKgo+PiAtICogUHJvZ3JhbSB0aGUgY29tcHV0ZSBxdWV1ZXMgYW5kIHRl c3QgdGhlbSB0byBtYWtlIHN1cmUgdGhleQo+PiAtICogYXJlIHdvcmtpbmcuCj4+IC0gKiBSZXR1 cm5zIDAgZm9yIHN1Y2Nlc3MsIGVycm9yIGZvciBmYWlsdXJlLgo+PiAtICovCj4+IC1zdGF0aWMg aW50IGdmeF92N18wX2NwX2NvbXB1dGVfcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+PiArc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfY29tcHV0ZV9waXBlX2luaXQoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsIGludCBtZSwgaW50IHBpcGUpCj4+ICB7Cj4+IC0gICAgICAgaW50IHIs IGksIGo7Cj4+IC0gICAgICAgdTMyIHRtcDsKPj4gLSAgICAgICBib29sIHVzZV9kb29yYmVsbCA9 IHRydWU7Cj4+IC0gICAgICAgdTY0IGhxZF9ncHVfYWRkcjsKPj4gLSAgICAgICB1NjQgbXFkX2dw dV9hZGRyOwo+PiAgICAgICAgIHU2NCBlb3BfZ3B1X2FkZHI7Cj4+IC0gICAgICAgdTY0IHdiX2dw dV9hZGRyOwo+PiAtICAgICAgIHUzMiAqYnVmOwo+PiAtICAgICAgIHN0cnVjdCBib25haXJlX21x ZCAqbXFkOwo+PiAtICAgICAgIHN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKPj4gLQo+PiAtICAg ICAgIC8qIGZpeCB1cCBjaGlja2VuIGJpdHMgKi8KPj4gLSAgICAgICB0bXAgPSBSUkVHMzIobW1D UF9DUEZfREVCVUcpOwo+PiAtICAgICAgIHRtcCB8PSAoMSA8PCAyMyk7Cj4+IC0gICAgICAgV1JF RzMyKG1tQ1BfQ1BGX0RFQlVHLCB0bXApOwo+PiArICAgICAgIHUzMiB0bXA7Cj4+ICsgICAgICAg c2l6ZV90IGVvcF9vZmZzZXQgPSBtZSAqIHBpcGUgKiBHRlg3X01FQ19IUERfU0laRSAqIDI7Cj4+ Cj4+IC0gICAgICAgLyogaW5pdCB0aGUgcGlwZXMgKi8KPj4gICAgICAgICBtdXRleF9sb2NrKCZh ZGV2LT5zcmJtX211dGV4KTsKPj4gLSAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGFkZXYtPmdmeC5t ZWMubnVtX3BpcGUgKiBhZGV2LT5nZngubWVjLm51bV9tZWMpOyBpKyspIHsKPj4gLSAgICAgICAg ICAgICAgIGludCBtZSA9IChpIDwgNCkgPyAxIDogMjsKPj4gLSAgICAgICAgICAgICAgIGludCBw aXBlID0gKGkgPCA0KSA/IGkgOiAoaSAtIDQpOwo+PiArICAgICAgIGVvcF9ncHVfYWRkciA9IGFk ZXYtPmdmeC5tZWMuaHBkX2VvcF9ncHVfYWRkciArIGVvcF9vZmZzZXQ7Cj4+Cj4+IC0gICAgICAg ICAgICAgICBlb3BfZ3B1X2FkZHIgPSBhZGV2LT5nZngubWVjLmhwZF9lb3BfZ3B1X2FkZHIgKyAo aSAqIE1FQ19IUERfU0laRSAqIDIpOwo+PiArICAgICAgIGNpa19zcmJtX3NlbGVjdChhZGV2LCBt ZSwgcGlwZSwgMCwgMCk7Cj4+Cj4+IC0gICAgICAgICAgICAgICBjaWtfc3JibV9zZWxlY3QoYWRl diwgbWUsIHBpcGUsIDAsIDApOwo+PiArICAgICAgIC8qIHdyaXRlIHRoZSBFT1AgYWRkciAqLwo+ PiArICAgICAgIFdSRUczMihtbUNQX0hQRF9FT1BfQkFTRV9BRERSLCBlb3BfZ3B1X2FkZHIgPj4g OCk7Cj4+ICsgICAgICAgV1JFRzMyKG1tQ1BfSFBEX0VPUF9CQVNFX0FERFJfSEksIHVwcGVyXzMy X2JpdHMoZW9wX2dwdV9hZGRyKSA+PiA4KTsKPj4KPj4gLSAgICAgICAgICAgICAgIC8qIHdyaXRl IHRoZSBFT1AgYWRkciAqLwo+PiAtICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFBEX0VPUF9C QVNFX0FERFIsIGVvcF9ncHVfYWRkciA+PiA4KTsKPj4gLSAgICAgICAgICAgICAgIFdSRUczMiht bUNQX0hQRF9FT1BfQkFTRV9BRERSX0hJLCB1cHBlcl8zMl9iaXRzKGVvcF9ncHVfYWRkcikgPj4g OCk7Cj4+ICsgICAgICAgLyogc2V0IHRoZSBWTUlEIGFzc2lnbmVkICovCj4+ICsgICAgICAgV1JF RzMyKG1tQ1BfSFBEX0VPUF9WTUlELCAwKTsKPj4KPj4gLSAgICAgICAgICAgICAgIC8qIHNldCB0 aGUgVk1JRCBhc3NpZ25lZCAqLwo+PiAtICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFBEX0VP UF9WTUlELCAwKTsKPj4gKyAgICAgICAvKiBzZXQgdGhlIEVPUCBzaXplLCByZWdpc3RlciB2YWx1 ZSBpcyAyXihFT1BfU0laRSsxKSBkd29yZHMgKi8KPj4gKyAgICAgICB0bXAgPSBSUkVHMzIobW1D UF9IUERfRU9QX0NPTlRST0wpOwo+PiArICAgICAgIHRtcCAmPSB+Q1BfSFBEX0VPUF9DT05UUk9M X19FT1BfU0laRV9NQVNLOwo+PiArICAgICAgIHRtcCB8PSBvcmRlcl9iYXNlXzIoR0ZYN19NRUNf SFBEX1NJWkUgLyA4KTsKPj4gKyAgICAgICBXUkVHMzIobW1DUF9IUERfRU9QX0NPTlRST0wsIHRt cCk7Cj4+Cj4+IC0gICAgICAgICAgICAgICAvKiBzZXQgdGhlIEVPUCBzaXplLCByZWdpc3RlciB2 YWx1ZSBpcyAyXihFT1BfU0laRSsxKSBkd29yZHMgKi8KPj4gLSAgICAgICAgICAgICAgIHRtcCA9 IFJSRUczMihtbUNQX0hQRF9FT1BfQ09OVFJPTCk7Cj4+IC0gICAgICAgICAgICAgICB0bXAgJj0g fkNQX0hQRF9FT1BfQ09OVFJPTF9fRU9QX1NJWkVfTUFTSzsKPj4gLSAgICAgICAgICAgICAgIHRt cCB8PSBvcmRlcl9iYXNlXzIoTUVDX0hQRF9TSVpFIC8gOCk7Cj4+IC0gICAgICAgICAgICAgICBX UkVHMzIobW1DUF9IUERfRU9QX0NPTlRST0wsIHRtcCk7Cj4+IC0gICAgICAgfQo+PiAgICAgICAg IGNpa19zcmJtX3NlbGVjdChhZGV2LCAwLCAwLCAwLCAwKTsKPj4gICAgICAgICBtdXRleF91bmxv Y2soJmFkZXYtPnNyYm1fbXV0ZXgpOwo+PiArfQo+Pgo+PiAtICAgICAgIC8qIGluaXQgdGhlIHF1 ZXVlcy4gIEp1c3QgdHdvIGZvciBub3cuICovCj4+IC0gICAgICAgZm9yIChpID0gMDsgaSA8IGFk ZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5nczsgaSsrKSB7Cj4+IC0gICAgICAgICAgICAgICByaW5n ID0gJmFkZXYtPmdmeC5jb21wdXRlX3JpbmdbaV07Cj4+ICtzdGF0aWMgaW50IGdmeF92N18wX21x ZF9kZWFjdGl2YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiArewo+PiArICAgICAg IGludCBpOwo+Pgo+PiAtICAgICAgICAgICAgICAgaWYgKHJpbmctPm1xZF9vYmogPT0gTlVMTCkg ewo+PiAtICAgICAgICAgICAgICAgICAgICAgICByID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LAo+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3Ry dWN0IGJvbmFpcmVfbXFkKSwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUEFHRV9TSVpFLCB0cnVlLAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBTURHUFVfR0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsIE5VTEwsCj4+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyaW5nLT5tcWRf b2JqKTsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIpIHsKPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIGNyZWF0ZSBNUUQg Ym8gZmFpbGVkXG4iLCByKTsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gcjsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgfQo+PiArICAgICAgIC8qIGRpc2FibGUg dGhlIHF1ZXVlIGlmIGl0J3MgYWN0aXZlICovCj4+ICsgICAgICAgaWYgKFJSRUczMihtbUNQX0hR RF9BQ1RJVkUpICYgMSkgewo+PiArICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX0RFUVVF VUVfUkVRVUVTVCwgMSk7Cj4+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWRldi0+ dXNlY190aW1lb3V0OyBpKyspIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoUlJF RzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgdWRlbGF5KDEpOwo+PiAgICAg ICAgICAgICAgICAgfQo+Pgo+PiAtICAgICAgICAgICAgICAgciA9IGFtZGdwdV9ib19yZXNlcnZl KHJpbmctPm1xZF9vYmosIGZhbHNlKTsKPj4gLSAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShy ICE9IDApKSB7Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIGdmeF92N18wX2NwX2NvbXB1dGVf ZmluaShhZGV2KTsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7Cj4+IC0gICAg ICAgICAgICAgICB9Cj4+IC0gICAgICAgICAgICAgICByID0gYW1kZ3B1X2JvX3BpbihyaW5nLT5t cWRfb2JqLCBBTURHUFVfR0VNX0RPTUFJTl9HVFQsCj4+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmbXFkX2dwdV9hZGRyKTsKPj4gLSAgICAgICAgICAgICAgIGlmIChyKSB7Cj4+ IC0gICAgICAgICAgICAgICAgICAgICAgIGRldl93YXJuKGFkZXYtPmRldiwgIiglZCkgcGluIE1R RCBibyBmYWlsZWRcbiIsIHIpOwo+PiAtICAgICAgICAgICAgICAgICAgICAgICBnZnhfdjdfMF9j cF9jb21wdXRlX2ZpbmkoYWRldik7Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy Owo+PiAtICAgICAgICAgICAgICAgfQo+PiAtICAgICAgICAgICAgICAgciA9IGFtZGdwdV9ib19r bWFwKHJpbmctPm1xZF9vYmosICh2b2lkICoqKSZidWYpOwo+PiAtICAgICAgICAgICAgICAgaWYg KHIpIHsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVk KSBtYXAgTVFEIGJvIGZhaWxlZFxuIiwgcik7Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIGdm eF92N18wX2NwX2NvbXB1dGVfZmluaShhZGV2KTsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHI7Cj4+IC0gICAgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICAgICBpZiAoaSA9 PSBhZGV2LT51c2VjX3RpbWVvdXQpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAt RVRJTUVET1VUOwo+Pgo+PiAtICAgICAgICAgICAgICAgLyogaW5pdCB0aGUgbXFkIHN0cnVjdCAq Lwo+PiAtICAgICAgICAgICAgICAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBib25haXJl X21xZCkpOwo+PiArICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVT VCwgMCk7Cj4+ICsgICAgICAgICAgICAgICBXUkVHMzIobW1DUF9IUURfUFFfUlBUUiwgMCk7Cj4+ ICsgICAgICAgICAgICAgICBXUkVHMzIobW1DUF9IUURfUFFfV1BUUiwgMCk7Cj4+ICsgICAgICAg fQo+Pgo+PiAtICAgICAgICAgICAgICAgbXFkID0gKHN0cnVjdCBib25haXJlX21xZCAqKWJ1ZjsK Pj4gLSAgICAgICAgICAgICAgIG1xZC0+aGVhZGVyID0gMHhDMDMxMDgwMDsKPj4gLSAgICAgICAg ICAgICAgIG1xZC0+c3RhdGljX3RocmVhZF9tZ210MDFbMF0gPSAweGZmZmZmZmZmOwo+PiAtICAg ICAgICAgICAgICAgbXFkLT5zdGF0aWNfdGhyZWFkX21nbXQwMVsxXSA9IDB4ZmZmZmZmZmY7Cj4+ IC0gICAgICAgICAgICAgICBtcWQtPnN0YXRpY190aHJlYWRfbWdtdDIzWzBdID0gMHhmZmZmZmZm ZjsKPj4gLSAgICAgICAgICAgICAgIG1xZC0+c3RhdGljX3RocmVhZF9tZ210MjNbMV0gPSAweGZm ZmZmZmZmOwo+PiArICAgICAgIHJldHVybiAwOwo+PiArfQo+Pgo+PiAtICAgICAgICAgICAgICAg bXV0ZXhfbG9jaygmYWRldi0+c3JibV9tdXRleCk7Cj4+IC0gICAgICAgICAgICAgICBjaWtfc3Ji bV9zZWxlY3QoYWRldiwgcmluZy0+bWUsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmluZy0+cGlwZSwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW5nLT5x dWV1ZSwgMCk7Cj4+ICtzdGF0aWMgdm9pZCBnZnhfdjdfMF9tcWRfaW5pdChzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYm9u YWlyZV9tcWQgKm1xZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBt cWRfZ3B1X2FkZHIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFtZGdw dV9yaW5nICpyaW5nKQo+PiArewo+PiArICAgICAgIHU2NCBocWRfZ3B1X2FkZHI7Cj4+ICsgICAg ICAgdTY0IHdiX2dwdV9hZGRyOwo+Pgo+PiAtICAgICAgICAgICAgICAgLyogZGlzYWJsZSB3cHRy IHBvbGxpbmcgKi8KPj4gLSAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMihtbUNQX1BRX1dQVFJf UE9MTF9DTlRMKTsKPj4gLSAgICAgICAgICAgICAgIHRtcCAmPSB+Q1BfUFFfV1BUUl9QT0xMX0NO VExfX0VOX01BU0s7Cj4+IC0gICAgICAgICAgICAgICBXUkVHMzIobW1DUF9QUV9XUFRSX1BPTExf Q05UTCwgdG1wKTsKPj4gKyAgICAgICAvKiBpbml0IHRoZSBtcWQgc3RydWN0ICovCj4+ICsgICAg ICAgbWVtc2V0KG1xZCwgMCwgc2l6ZW9mKHN0cnVjdCBib25haXJlX21xZCkpOwo+Pgo+PiAtICAg ICAgICAgICAgICAgLyogZW5hYmxlIGRvb3JiZWxsPyAqLwo+PiAtICAgICAgICAgICAgICAgbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9Cj4+IC0gICAgICAgICAg ICAgICAgICAgICAgIFJSRUczMihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MKTsKPj4gLSAg ICAgICAgICAgICAgIGlmICh1c2VfZG9vcmJlbGwpCj4+IC0gICAgICAgICAgICAgICAgICAgICAg IG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgfD0gQ1BfSFFEX1BR X0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX0VOX01BU0s7Cj4+IC0gICAgICAgICAgICAgICBl bHNlCj4+IC0gICAgICAgICAgICAgICAgICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3Bx X2Rvb3JiZWxsX2NvbnRyb2wgJj0gfkNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVM TF9FTl9NQVNLOwo+PiAtICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxM X0NPTlRST0wsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9o cWRfcHFfZG9vcmJlbGxfY29udHJvbCk7Cj4+IC0KPj4gLSAgICAgICAgICAgICAgIC8qIGRpc2Fi bGUgdGhlIHF1ZXVlIGlmIGl0J3MgYWN0aXZlICovCj4+IC0gICAgICAgICAgICAgICBtcWQtPnF1 ZXVlX3N0YXRlLmNwX2hxZF9kZXF1ZXVlX3JlcXVlc3QgPSAwOwo+PiAtICAgICAgICAgICAgICAg bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0ciA9IDA7Cj4+IC0gICAgICAgICAgICAgICBt cWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyPSAwOwo+PiAtICAgICAgICAgICAgICAgaWYg KFJSRUczMihtbUNQX0hRRF9BQ1RJVkUpICYgMSkgewo+PiAtICAgICAgICAgICAgICAgICAgICAg ICBXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCAxKTsKPj4gLSAgICAgICAgICAgICAg ICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFkZXYtPnVzZWNfdGltZW91dDsgaisrKSB7Cj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoUlJFRzMyKG1tQ1BfSFFEX0FDVElW RSkgJiAxKSkKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Owo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkZWxheSgxKTsKPj4gLSAgICAg ICAgICAgICAgICAgICAgICAgfQo+PiAtICAgICAgICAgICAgICAgICAgICAgICBXUkVHMzIobW1D UF9IUURfREVRVUVVRV9SRVFVRVNULCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9kZXF1ZXVlX3Jl cXVlc3QpOwo+PiAtICAgICAgICAgICAgICAgICAgICAgICBXUkVHMzIobW1DUF9IUURfUFFfUlBU UiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cik7Cj4+IC0gICAgICAgICAgICAgICAg ICAgICAgIFdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV93cHRyKTsKPj4gLSAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICBtcWQtPmhlYWRlciA9IDB4 QzAzMTA4MDA7Cj4+ICsgICAgICAgbXFkLT5zdGF0aWNfdGhyZWFkX21nbXQwMVswXSA9IDB4ZmZm ZmZmZmY7Cj4+ICsgICAgICAgbXFkLT5zdGF0aWNfdGhyZWFkX21nbXQwMVsxXSA9IDB4ZmZmZmZm ZmY7Cj4+ICsgICAgICAgbXFkLT5zdGF0aWNfdGhyZWFkX21nbXQyM1swXSA9IDB4ZmZmZmZmZmY7 Cj4+ICsgICAgICAgbXFkLT5zdGF0aWNfdGhyZWFkX21nbXQyM1sxXSA9IDB4ZmZmZmZmZmY7Cj4+ Cj4+IC0gICAgICAgICAgICAgICAvKiBzZXQgdGhlIHBvaW50ZXIgdG8gdGhlIE1RRCAqLwo+PiAt ICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRyID0gbXFkX2dw dV9hZGRyICYgMHhmZmZmZmZmYzsKPj4gLSAgICAgICAgICAgICAgIG1xZC0+cXVldWVfc3RhdGUu Y3BfbXFkX2Jhc2VfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMobXFkX2dwdV9hZGRyKTsKPj4gLSAg ICAgICAgICAgICAgIFdSRUczMihtbUNQX01RRF9CQVNFX0FERFIsIG1xZC0+cXVldWVfc3RhdGUu Y3BfbXFkX2Jhc2VfYWRkcik7Cj4+IC0gICAgICAgICAgICAgICBXUkVHMzIobW1DUF9NUURfQkFT RV9BRERSX0hJLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHJfaGkpOwo+PiAtICAg ICAgICAgICAgICAgLyogc2V0IE1RRCB2bWlkIHRvIDAgKi8KPj4gLSAgICAgICAgICAgICAgIG1x ZC0+cXVldWVfc3RhdGUuY3BfbXFkX2NvbnRyb2wgPSBSUkVHMzIobW1DUF9NUURfQ09OVFJPTCk7 Cj4+IC0gICAgICAgICAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9jb250cm9sICY9IH5D UF9NUURfQ09OVFJPTF9fVk1JRF9NQVNLOwo+PiAtICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1Bf TVFEX0NPTlRST0wsIG1xZC0+cXVldWVfc3RhdGUuY3BfbXFkX2NvbnRyb2wpOwo+PiAtCj4+IC0g ICAgICAgICAgICAgICAvKiBzZXQgdGhlIHBvaW50ZXIgdG8gdGhlIEhRRCwgdGhpcyBpcyBzaW1p bGFyIENQX1JCMF9CQVNFL19ISSAqLwo+PiAtICAgICAgICAgICAgICAgaHFkX2dwdV9hZGRyID0g cmluZy0+Z3B1X2FkZHIgPj4gODsKPj4gLSAgICAgICAgICAgICAgIG1xZC0+cXVldWVfc3RhdGUu Y3BfaHFkX3BxX2Jhc2UgPSBocWRfZ3B1X2FkZHI7Cj4+IC0gICAgICAgICAgICAgICBtcWQtPnF1 ZXVlX3N0YXRlLmNwX2hxZF9wcV9iYXNlX2hpID0gdXBwZXJfMzJfYml0cyhocWRfZ3B1X2FkZHIp Owo+PiAtICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0UsIG1xZC0+cXVldWVf c3RhdGUuY3BfaHFkX3BxX2Jhc2UpOwo+PiAtICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFFE X1BRX0JBU0VfSEksIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Jhc2VfaGkpOwo+PiAtCj4+ IC0gICAgICAgICAgICAgICAvKiBzZXQgdXAgdGhlIEhRRCwgdGhpcyBpcyBzaW1pbGFyIHRvIENQ X1JCMF9DTlRMICovCj4+IC0gICAgICAgICAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV9jb250cm9sID0gUlJFRzMyKG1tQ1BfSFFEX1BRX0NPTlRST0wpOwo+PiAtICAgICAgICAgICAg ICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCAmPQo+PiAtICAgICAgICAgICAg ICAgICAgICAgICB+KENQX0hRRF9QUV9DT05UUk9MX19RVUVVRV9TSVpFX01BU0sgfAo+PiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BfSFFEX1BRX0NPTlRST0xfX1JQ VFJfQkxPQ0tfU0laRV9NQVNLKTsKPj4gLQo+PiAtICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQo+PiAtICAgICAgICAgICAgICAgICAgICAgICBvcmRl cl9iYXNlXzIocmluZy0+cmluZ19zaXplIC8gOCk7Cj4+IC0gICAgICAgICAgICAgICBtcWQtPnF1 ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sIHw9Cj4+IC0gICAgICAgICAgICAgICAgICAgICAg IChvcmRlcl9iYXNlXzIoQU1ER1BVX0dQVV9QQUdFX1NJWkUvOCkgPDwgOCk7Cj4+ICsgICAgICAg LyogZW5hYmxlIGRvb3JiZWxsPyAqLwo+PiArICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFk X3BxX2Rvb3JiZWxsX2NvbnRyb2wgPQo+PiArICAgICAgICAgICAgICAgUlJFRzMyKG1tQ1BfSFFE X1BRX0RPT1JCRUxMX0NPTlRST0wpOwo+PiArICAgICAgIGlmIChyaW5nLT51c2VfZG9vcmJlbGwp Cj4+ICsgICAgICAgICAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9j b250cm9sIHw9IENQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9FTl9NQVNLOwo+ PiArICAgICAgIGVsc2UKPj4gKyAgICAgICAgICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFk X3BxX2Rvb3JiZWxsX2NvbnRyb2wgJj0gfkNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09S QkVMTF9FTl9NQVNLOwo+PiArCj4+ICsgICAgICAgLyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBN UUQgKi8KPj4gKyAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHIgPSBtcWRf Z3B1X2FkZHIgJiAweGZmZmZmZmZjOwo+PiArICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfbXFk X2Jhc2VfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMobXFkX2dwdV9hZGRyKTsKPj4gKwo+PiArICAg ICAgIC8qIHNldCBNUUQgdm1pZCB0byAwICovCj4+ICsgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5j cF9tcWRfY29udHJvbCA9IFJSRUczMihtbUNQX01RRF9DT05UUk9MKTsKPj4gKyAgICAgICBtcWQt PnF1ZXVlX3N0YXRlLmNwX21xZF9jb250cm9sICY9IH5DUF9NUURfQ09OVFJPTF9fVk1JRF9NQVNL Owo+PiArCj4+ICsgICAgICAgLyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBIUUQsIHRoaXMgaXMg c2ltaWxhciBDUF9SQjBfQkFTRS9fSEkgKi8KPj4gKyAgICAgICBocWRfZ3B1X2FkZHIgPSByaW5n LT5ncHVfYWRkciA+PiA4Owo+PiArICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Jh c2UgPSBocWRfZ3B1X2FkZHI7Cj4+ICsgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFf YmFzZV9oaSA9IHVwcGVyXzMyX2JpdHMoaHFkX2dwdV9hZGRyKTsKPj4gKwo+PiArICAgICAgIC8q IHNldCB1cCB0aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgdG8gQ1BfUkIwX0NOVEwgKi8KPj4gKyAg ICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sID0gUlJFRzMyKG1tQ1BfSFFE X1BRX0NPTlRST0wpOwo+PiArICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRy b2wgJj0KPj4gKyAgICAgICAgICAgICAgIH4oQ1BfSFFEX1BRX0NPTlRST0xfX1FVRVVFX1NJWkVf TUFTSyB8Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BfSFFEX1BRX0NPTlRS T0xfX1JQVFJfQkxPQ0tfU0laRV9NQVNLKTsKPj4gKwo+PiArICAgICAgIG1xZC0+cXVldWVfc3Rh dGUuY3BfaHFkX3BxX2NvbnRyb2wgfD0KPj4gKyAgICAgICAgICAgICAgIG9yZGVyX2Jhc2VfMihy aW5nLT5yaW5nX3NpemUgLyA4KTsKPj4gKyAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV9jb250cm9sIHw9Cj4+ICsgICAgICAgICAgICAgICAob3JkZXJfYmFzZV8yKEFNREdQVV9HUFVf UEFHRV9TSVpFLzgpIDw8IDgpOwo+PiAgI2lmZGVmIF9fQklHX0VORElBTgo+PiAtICAgICAgICAg ICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQo+PiAtICAgICAgICAg ICAgICAgICAgICAgICAyIDw8IENQX0hRRF9QUV9DT05UUk9MX19FTkRJQU5fU1dBUF9fU0hJRlQ7 Cj4+ICsgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQo+PiArICAg ICAgICAgICAgICAgMiA8PCBDUF9IUURfUFFfQ09OVFJPTF9fRU5ESUFOX1NXQVBfX1NISUZUOwo+ PiAgI2VuZGlmCj4+IC0gICAgICAgICAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9j b250cm9sICY9Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIH4oQ1BfSFFEX1BRX0NPTlRST0xf X1VOT1JEX0RJU1BBVENIX01BU0sgfAo+PiArICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFk X3BxX2NvbnRyb2wgJj0KPj4gKyAgICAgICAgICAgICAgIH4oQ1BfSFFEX1BRX0NPTlRST0xfX1VO T1JEX0RJU1BBVENIX01BU0sgfAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQ X0hRRF9QUV9DT05UUk9MX19ST1FfUFFfSUJfRkxJUF9NQVNLIHwKPj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDUF9IUURfUFFfQ09OVFJPTF9fUFFfVk9MQVRJTEVfTUFTSyk7Cj4+ IC0gICAgICAgICAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sIHw9Cj4+ IC0gICAgICAgICAgICAgICAgICAgICAgIENQX0hRRF9QUV9DT05UUk9MX19QUklWX1NUQVRFX01B U0sgfAo+PiAtICAgICAgICAgICAgICAgICAgICAgICBDUF9IUURfUFFfQ09OVFJPTF9fS01EX1FV RVVFX01BU0s7IC8qIGFzc3VtaW5nIGtlcm5lbCBxdWV1ZSBjb250cm9sICovCj4+IC0gICAgICAg ICAgICAgICBXUkVHMzIobW1DUF9IUURfUFFfQ09OVFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9o cWRfcHFfY29udHJvbCk7Cj4+IC0KPj4gLSAgICAgICAgICAgICAgIC8qIG9ubHkgdXNlZCBpZiBD UF9QUV9XUFRSX1BPTExfQ05UTC5DUF9QUV9XUFRSX1BPTExfQ05UTF9fRU5fTUFTSz0xICovCj4+ IC0gICAgICAgICAgICAgICB3Yl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRyICsgKHJpbmct PndwdHJfb2ZmcyAqIDQpOwo+PiAtICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9o cWRfcHFfd3B0cl9wb2xsX2FkZHIgPSB3Yl9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Cj4+IC0gICAg ICAgICAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9oaSA9 IHVwcGVyXzMyX2JpdHMod2JfZ3B1X2FkZHIpICYgMHhmZmZmOwo+PiAtICAgICAgICAgICAgICAg V1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hx ZF9wcV93cHRyX3BvbGxfYWRkcik7Cj4+IC0gICAgICAgICAgICAgICBXUkVHMzIobW1DUF9IUURf UFFfV1BUUl9QT0xMX0FERFJfSEksCj4+IC0gICAgICAgICAgICAgICAgICAgICAgbXFkLT5xdWV1 ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHJfaGkpOwo+PiAtCj4+IC0gICAgICAgICAg ICAgICAvKiBzZXQgdGhlIHdiIGFkZHJlc3Mgd2V0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgKi8K Pj4gLSAgICAgICAgICAgICAgIHdiX2dwdV9hZGRyID0gYWRldi0+d2IuZ3B1X2FkZHIgKyAocmlu Zy0+cnB0cl9vZmZzICogNCk7Cj4+IC0gICAgICAgICAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyID0gd2JfZ3B1X2FkZHIgJiAweGZmZmZmZmZjOwo+PiAt ICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRk cl9oaSA9Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIHVwcGVyXzMyX2JpdHMod2JfZ3B1X2Fk ZHIpICYgMHhmZmZmOwo+PiAtICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFJf UkVQT1JUX0FERFIsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5j cF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcik7Cj4+IC0gICAgICAgICAgICAgICBXUkVHMzIobW1D UF9IUURfUFFfUlBUUl9SRVBPUlRfQUREUl9ISSwKPj4gLSAgICAgICAgICAgICAgICAgICAgICBt cWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2hpKTsKPj4gLQo+PiAt ICAgICAgICAgICAgICAgLyogZW5hYmxlIHRoZSBkb29yYmVsbCBpZiByZXF1ZXN0ZWQgKi8KPj4g LSAgICAgICAgICAgICAgIGlmICh1c2VfZG9vcmJlbGwpIHsKPj4gLSAgICAgICAgICAgICAgICAg ICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9Cj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxM X0NPTlRST0wpOwo+PiAtICAgICAgICAgICAgICAgICAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV9kb29yYmVsbF9jb250cm9sICY9Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfkNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9PRkZTRVRfTUFTSzsK Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9v cmJlbGxfY29udHJvbCB8PQo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyaW5n LT5kb29yYmVsbF9pbmRleCA8PAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD UF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfT0ZGU0VUX19TSElGVCk7Cj4+IC0g ICAgICAgICAgICAgICAgICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxs X2NvbnRyb2wgfD0KPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUF9IUURfUFFf RE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfRU5fTUFTSzsKPj4gLSAgICAgICAgICAgICAgICAg ICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCAmPQo+PiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4oQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRS T0xfX0RPT1JCRUxMX1NPVVJDRV9NQVNLIHwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfSElUX01BU0spOwo+PiAr ICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgfD0KPj4gKyAgICAgICAg ICAgICAgIENQX0hRRF9QUV9DT05UUk9MX19QUklWX1NUQVRFX01BU0sgfAo+PiArICAgICAgICAg ICAgICAgQ1BfSFFEX1BRX0NPTlRST0xfX0tNRF9RVUVVRV9NQVNLOyAvKiBhc3N1bWluZyBrZXJu ZWwgcXVldWUgY29udHJvbCAqLwo+Pgo+PiAtICAgICAgICAgICAgICAgfSBlbHNlIHsKPj4gLSAg ICAgICAgICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxf Y29udHJvbCA9IDA7Cj4+ICsgICAgICAgLyogb25seSB1c2VkIGlmIENQX1BRX1dQVFJfUE9MTF9D TlRMLkNQX1BRX1dQVFJfUE9MTF9DTlRMX19FTl9NQVNLPTEgKi8KPj4gKyAgICAgICB3Yl9ncHVf YWRkciA9IGFkZXYtPndiLmdwdV9hZGRyICsgKHJpbmctPndwdHJfb2ZmcyAqIDQpOwo+PiArICAg ICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyID0gd2JfZ3B1X2Fk ZHIgJiAweGZmZmZmZmZjOwo+PiArICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3dw dHJfcG9sbF9hZGRyX2hpID0gdXBwZXJfMzJfYml0cyh3Yl9ncHVfYWRkcikgJiAweGZmZmY7Cj4+ ICsKPj4gKyAgICAgICAvKiBzZXQgdGhlIHdiIGFkZHJlc3Mgd2V0aGVyIGl0J3MgZW5hYmxlZCBv ciBub3QgKi8KPj4gKyAgICAgICB3Yl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRyICsgKHJp bmctPnJwdHJfb2ZmcyAqIDQpOwo+PiArICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3Bx X3JwdHJfcmVwb3J0X2FkZHIgPSB3Yl9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Cj4+ICsgICAgICAg bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcl9oaSA9Cj4+ICsgICAg ICAgICAgICAgICB1cHBlcl8zMl9iaXRzKHdiX2dwdV9hZGRyKSAmIDB4ZmZmZjsKPj4gKwo+PiAr ICAgICAgIC8qIGVuYWJsZSB0aGUgZG9vcmJlbGwgaWYgcmVxdWVzdGVkICovCj4+ICsgICAgICAg aWYgKHJpbmctPnVzZV9kb29yYmVsbCkgewo+PiArICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9Cj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIFJSRUczMihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MKTsKPj4gKyAgICAgICAgICAg ICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgJj0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgfkNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVM TF9PRkZTRVRfTUFTSzsKPj4gKyAgICAgICAgICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFk X3BxX2Rvb3JiZWxsX2NvbnRyb2wgfD0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgKHJpbmct PmRvb3JiZWxsX2luZGV4IDw8Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBDUF9IUURfUFFf RE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfT0ZGU0VUX19TSElGVCk7Cj4+ICsgICAgICAgICAg ICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sIHw9Cj4+ICsg ICAgICAgICAgICAgICAgICAgICAgIENQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVM TF9FTl9NQVNLOwo+PiArICAgICAgICAgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFf ZG9vcmJlbGxfY29udHJvbCAmPQo+PiArICAgICAgICAgICAgICAgICAgICAgICB+KENQX0hRRF9Q UV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9TT1VSQ0VfTUFTSyB8Cj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9f RE9PUkJFTExfSElUX01BU0spOwo+PiArCj4+ICsgICAgICAgfSBlbHNlIHsKPj4gKyAgICAgICAg ICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgPSAwOwo+ PiArICAgICAgIH0KPj4gKwo+PiArICAgICAgIC8qIHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzLCBz aW1pbGFyIHRvIENQX1JCMF9XUFRSL19SUFRSICovCj4+ICsgICAgICAgcmluZy0+d3B0ciA9IDA7 Cj4+ICsgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0ciA9IGxvd2VyXzMyX2Jp dHMocmluZy0+d3B0cik7Cj4+ICsgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0 ciA9IFJSRUczMihtbUNQX0hRRF9QUV9SUFRSKTsKPj4gKwo+PiArICAgICAgIC8qIHNldCB0aGUg dm1pZCBmb3IgdGhlIHF1ZXVlICovCj4+ICsgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf dm1pZCA9IDA7Cj4+ICsKPj4gKyAgICAgICAvKiBhY3RpdmF0ZSB0aGUgcXVldWUgKi8KPj4gKyAg ICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9hY3RpdmUgPSAxOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGdmeF92N18wX21xZF9jb21taXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYm9uYWlyZV9tcWQgKm1x ZCkKPj4gK3sKPj4gKyAgICAgICB1MzIgdG1wOwo+PiArCj4+ICsgICAgICAgLyogZGlzYWJsZSB3 cHRyIHBvbGxpbmcgKi8KPj4gKyAgICAgICB0bXAgPSBSUkVHMzIobW1DUF9QUV9XUFRSX1BPTExf Q05UTCk7Cj4+ICsgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX1BRX1dQVFJfUE9M TF9DTlRMLCBFTiwgMCk7Cj4+ICsgICAgICAgV1JFRzMyKG1tQ1BfUFFfV1BUUl9QT0xMX0NOVEws IHRtcCk7Cj4+ICsKPj4gKyAgICAgICAvKiBwcm9ncmFtIE1RRCBmaWVsZCB0byBIVyAqLwo+PiAr ICAgICAgIFdSRUczMihtbUNQX01RRF9CQVNFX0FERFIsIG1xZC0+cXVldWVfc3RhdGUuY3BfbXFk X2Jhc2VfYWRkcik7Cj4+ICsgICAgICAgV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUl9ISSwgbXFk LT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRyX2hpKTsKPj4gKyAgICAgICBXUkVHMzIobW1D UF9NUURfQ09OVFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfY29udHJvbCk7Cj4+ICsgICAg ICAgV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0UsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Jh c2UpOwo+PiArICAgICAgIFdSRUczMihtbUNQX0hRRF9QUV9CQVNFX0hJLCBtcWQtPnF1ZXVlX3N0 YXRlLmNwX2hxZF9wcV9iYXNlX2hpKTsKPj4gKyAgICAgICBXUkVHMzIobW1DUF9IUURfUFFfQ09O VFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCk7Cj4+ICsgICAgICAgV1JF RzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV93cHRyX3BvbGxfYWRkcik7Cj4+ICsgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9M TF9BRERSX0hJLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9oaSk7 Cj4+ICsgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFJfUkVQT1JUX0FERFIsIG1xZC0+cXVl dWVfc3RhdGUuY3BfaHFkX3BxX3JwdHJfcmVwb3J0X2FkZHIpOwo+PiArICAgICAgIFdSRUczMiht bUNQX0hRRF9QUV9SUFRSX1JFUE9SVF9BRERSX0hJLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV9ycHRyX3JlcG9ydF9hZGRyX2hpKTsKPj4gKyAgICAgICBXUkVHMzIobW1DUF9IUURfUFFfRE9P UkJFTExfQ09OVFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJv bCk7Cj4+ICsgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFIsIG1xZC0+cXVldWVfc3RhdGUu Y3BfaHFkX3BxX3dwdHIpOwo+PiArICAgICAgIFdSRUczMihtbUNQX0hRRF9WTUlELCBtcWQtPnF1 ZXVlX3N0YXRlLmNwX2hxZF92bWlkKTsKPj4gKwo+PiArICAgICAgIC8qIGFjdGl2YXRlIHRoZSBI UUQgKi8KPj4gKyAgICAgICBXUkVHMzIobW1DUF9IUURfQUNUSVZFLCBtcWQtPnF1ZXVlX3N0YXRl LmNwX2hxZF9hY3RpdmUpOwo+PiArCj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgZ2Z4X3Y3XzBfY29tcHV0ZV9xdWV1ZV9pbml0KHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LCBpbnQgcmluZ19pZCkKPj4gK3sKPj4gKyAgICAgICBpbnQgcjsKPj4gKyAgICAg ICB1NjQgbXFkX2dwdV9hZGRyOwo+PiArICAgICAgIHN0cnVjdCBib25haXJlX21xZCAqbXFkOwo+ PiArICAgICAgIHN0cnVjdCBhbWRncHVfcmluZyAqcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9y aW5nW3JpbmdfaWRdOwo+PiArCj4+ICsgICAgICAgaWYgKHJpbmctPm1xZF9vYmogPT0gTlVMTCkg ewo+PiArICAgICAgICAgICAgICAgciA9IGFtZGdwdV9ib19jcmVhdGUoYWRldiwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGJvbmFpcmVfbXFkKSwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUsIHRydWUsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1ER1BVX0dFTV9ET01BSU5fR1RULCAwLCBOVUxM LCBOVUxMLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyaW5nLT5tcWRfb2Jq KTsKPj4gKyAgICAgICAgICAgICAgIGlmIChyKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAg IGRldl93YXJuKGFkZXYtPmRldiwgIiglZCkgY3JlYXRlIE1RRCBibyBmYWlsZWRcbiIsIHIpOwo+ PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjsKPj4gICAgICAgICAgICAgICAgIH0K Pj4gLSAgICAgICAgICAgICAgIFdSRUczMihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MLAo+ PiAtICAgICAgICAgICAgICAgICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3Ji ZWxsX2NvbnRyb2wpOwo+PiArICAgICAgIH0KPj4gKwo+PiArICAgICAgIHIgPSBhbWRncHVfYm9f cmVzZXJ2ZShyaW5nLT5tcWRfb2JqLCBmYWxzZSk7Cj4+ICsgICAgICAgaWYgKHVubGlrZWx5KHIg IT0gMCkpCj4+ICsgICAgICAgICAgICAgICBnb3RvIG91dDsKPj4gKwo+PiArICAgICAgIHIgPSBh bWRncHVfYm9fcGluKHJpbmctPm1xZF9vYmosIEFNREdQVV9HRU1fRE9NQUlOX0dUVCwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgJm1xZF9ncHVfYWRkcik7Cj4+ICsgICAgICAgaWYgKHIpIHsK Pj4gKyAgICAgICAgICAgICAgIGRldl93YXJuKGFkZXYtPmRldiwgIiglZCkgcGluIE1RRCBibyBm YWlsZWRcbiIsIHIpOwo+PiArICAgICAgICAgICAgICAgZ290byBvdXRfdW5yZXNlcnZlOwo+PiAr ICAgICAgIH0KPj4gKyAgICAgICByID0gYW1kZ3B1X2JvX2ttYXAocmluZy0+bXFkX29iaiwgKHZv aWQgKiopJm1xZCk7Cj4+ICsgICAgICAgaWYgKHIpIHsKPj4gKyAgICAgICAgICAgICAgIGRldl93 YXJuKGFkZXYtPmRldiwgIiglZCkgbWFwIE1RRCBibyBmYWlsZWRcbiIsIHIpOwo+PiArICAgICAg ICAgICAgICAgZ290byBvdXRfdW5yZXNlcnZlOwo+PiArICAgICAgIH0KPj4gKwo+PiArICAgICAg IG11dGV4X2xvY2soJmFkZXYtPnNyYm1fbXV0ZXgpOwo+PiArICAgICAgIGNpa19zcmJtX3NlbGVj dChhZGV2LCByaW5nLT5tZSwgcmluZy0+cGlwZSwgcmluZy0+cXVldWUsIDApOwo+Pgo+PiAtICAg ICAgICAgICAgICAgLyogcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMsIHNpbWlsYXIgdG8gQ1BfUkIw X1dQVFIvX1JQVFIgKi8KPj4gLSAgICAgICAgICAgICAgIHJpbmctPndwdHIgPSAwOwo+PiAtICAg ICAgICAgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0ciA9IGxvd2VyXzMyX2Jp dHMocmluZy0+d3B0cik7Cj4+IC0gICAgICAgICAgICAgICBXUkVHMzIobW1DUF9IUURfUFFfV1BU UiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cik7Cj4+IC0gICAgICAgICAgICAgICBt cWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9ycHRyID0gUlJFRzMyKG1tQ1BfSFFEX1BRX1JQVFIp Owo+PiArICAgICAgIGdmeF92N18wX21xZF9pbml0KGFkZXYsIG1xZCwgbXFkX2dwdV9hZGRyLCBy aW5nKTsKPj4gKyAgICAgICBnZnhfdjdfMF9tcWRfZGVhY3RpdmF0ZShhZGV2KTsKPj4gKyAgICAg ICBnZnhfdjdfMF9tcWRfY29tbWl0KGFkZXYsIG1xZCk7Cj4+Cj4+IC0gICAgICAgICAgICAgICAv KiBzZXQgdGhlIHZtaWQgZm9yIHRoZSBxdWV1ZSAqLwo+PiAtICAgICAgICAgICAgICAgbXFkLT5x dWV1ZV9zdGF0ZS5jcF9ocWRfdm1pZCA9IDA7Cj4+IC0gICAgICAgICAgICAgICBXUkVHMzIobW1D UF9IUURfVk1JRCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfdm1pZCk7Cj4+ICsgICAgICAgY2lr X3NyYm1fc2VsZWN0KGFkZXYsIDAsIDAsIDAsIDApOwo+PiArICAgICAgIG11dGV4X3VubG9jaygm YWRldi0+c3JibV9tdXRleCk7Cj4+Cj4+IC0gICAgICAgICAgICAgICAvKiBhY3RpdmF0ZSB0aGUg cXVldWUgKi8KPj4gLSAgICAgICAgICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX2FjdGl2 ZSA9IDE7Cj4+IC0gICAgICAgICAgICAgICBXUkVHMzIobW1DUF9IUURfQUNUSVZFLCBtcWQtPnF1 ZXVlX3N0YXRlLmNwX2hxZF9hY3RpdmUpOwo+PiArICAgICAgIGFtZGdwdV9ib19rdW5tYXAocmlu Zy0+bXFkX29iaik7Cj4+ICtvdXRfdW5yZXNlcnZlOgo+PiArICAgICAgIGFtZGdwdV9ib191bnJl c2VydmUocmluZy0+bXFkX29iaik7Cj4+ICtvdXQ6Cj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+ICt9 Cj4+ICsKPj4gKy8qKgo+PiArICogZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9yZXN1bWUgLSBzZXR1cCB0 aGUgY29tcHV0ZSBxdWV1ZSByZWdpc3RlcnMKPj4gKyAqCj4+ICsgKiBAYWRldjogYW1kZ3B1X2Rl dmljZSBwb2ludGVyCj4+ICsgKgo+PiArICogUHJvZ3JhbSB0aGUgY29tcHV0ZSBxdWV1ZXMgYW5k IHRlc3QgdGhlbSB0byBtYWtlIHN1cmUgdGhleQo+PiArICogYXJlIHdvcmtpbmcuCj4+ICsgKiBS ZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIGVycm9yIGZvciBmYWlsdXJlLgo+PiArICovCj4+ICtzdGF0 aWMgaW50IGdmeF92N18wX2NwX2NvbXB1dGVfcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQo+PiArewo+PiArICAgICAgIGludCByLCBpLCBqOwo+PiArICAgICAgIHUzMiB0bXA7Cj4+ ICsgICAgICAgc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nOwo+Pgo+PiAtICAgICAgICAgICAgICAg Y2lrX3NyYm1fc2VsZWN0KGFkZXYsIDAsIDAsIDAsIDApOwo+PiAtICAgICAgICAgICAgICAgbXV0 ZXhfdW5sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKPj4gKyAgICAgICAvKiBmaXggdXAgY2hpY2tl biBiaXRzICovCj4+ICsgICAgICAgdG1wID0gUlJFRzMyKG1tQ1BfQ1BGX0RFQlVHKTsKPj4gKyAg ICAgICB0bXAgfD0gKDEgPDwgMjMpOwo+PiArICAgICAgIFdSRUczMihtbUNQX0NQRl9ERUJVRywg dG1wKTsKPj4KPj4gLSAgICAgICAgICAgICAgIGFtZGdwdV9ib19rdW5tYXAocmluZy0+bXFkX29i aik7Cj4+IC0gICAgICAgICAgICAgICBhbWRncHVfYm9fdW5yZXNlcnZlKHJpbmctPm1xZF9vYmop Owo+PiArICAgICAgIC8qIGluaXQgdGhlIHBpcGVzICovCj4+ICsgICAgICAgZm9yIChpID0gMDsg aSA8IGFkZXYtPmdmeC5tZWMubnVtX21lYzsgaSsrKQo+PiArICAgICAgICAgICAgICAgZm9yIChq ID0gMDsgaiA8IGFkZXYtPmdmeC5tZWMubnVtX3BpcGU7IGorKykKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgZ2Z4X3Y3XzBfY29tcHV0ZV9waXBlX2luaXQoYWRldiwgaSwgaik7Cj4+Cj4+IC0g ICAgICAgICAgICAgICByaW5nLT5yZWFkeSA9IHRydWU7Cj4+ICsgICAgICAgLyogaW5pdCB0aGUg cXVldWVzICovCj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0 ZV9yaW5nczsgaSsrKSB7Cj4+ICsgICAgICAgICAgICAgICByID0gZ2Z4X3Y3XzBfY29tcHV0ZV9x dWV1ZV9pbml0KGFkZXYsIGkpOwo+PiArICAgICAgICAgICAgICAgaWYgKHIpIHsKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9maW5pKGFkZXYpOwo+PiArICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gICAg ICAgICB9Cj4+Cj4+ICAgICAgICAgZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9lbmFibGUoYWRldiwgdHJ1 ZSk7Cj4+Cj4+ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9y aW5nczsgaSsrKSB7Cj4+ICAgICAgICAgICAgICAgICByaW5nID0gJmFkZXYtPmdmeC5jb21wdXRl X3JpbmdbaV07Cj4+IC0KPj4gKyAgICAgICAgICAgICAgIHJpbmctPnJlYWR5ID0gdHJ1ZTsKPj4g ICAgICAgICAgICAgICAgIHIgPSBhbWRncHVfcmluZ190ZXN0X3JpbmcocmluZyk7Cj4+ICAgICAg ICAgICAgICAgICBpZiAocikKPj4gICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+cmVhZHkg PSBmYWxzZTsKPj4gICAgICAgICB9Cj4+Cj4+ICAgICAgICAgcmV0dXJuIDA7Cj4+ICB9Cj4+Cj4+ ICBzdGF0aWMgdm9pZCBnZnhfdjdfMF9jcF9lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsIGJvb2wgZW5hYmxlKQo+PiAgewo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvZ2Z4X3Y4XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8w LmMKPj4gaW5kZXggNGU2M2U1Mi4uODhiODVmNyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvZ2Z4X3Y4XzAuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9nZnhfdjhfMC5jCj4+IEBAIC00NiwyMCArNDYsMjIgQEAKPj4gICNpbmNsdWRlICJnY2Ev Z2Z4XzhfMF9zaF9tYXNrLmgiCj4+ICAjaW5jbHVkZSAiZ2NhL2dmeF84XzBfZW51bS5oIgo+Pgo+ PiAgI2luY2x1ZGUgImRjZS9kY2VfMTBfMF9kLmgiCj4+ICAjaW5jbHVkZSAiZGNlL2RjZV8xMF8w X3NoX21hc2suaCIKPj4KPj4gICNpbmNsdWRlICJzbXUvc211XzdfMV8zX2QuaCIKPj4KPj4gICNk ZWZpbmUgR0ZYOF9OVU1fR0ZYX1JJTkdTICAgICAxCj4+ICAjZGVmaW5lIEdGWDhfTlVNX0NPTVBV VEVfUklOR1MgOAo+PiArI2RlZmluZSBHRlg4X01FQ19IUERfU0laRSAyMDQ4Cj4+ICsKPj4KPj4g ICNkZWZpbmUgVE9QQVpfR0JfQUREUl9DT05GSUdfR09MREVOIDB4MjIwMTAwMDEKPj4gICNkZWZp bmUgQ0FSUklaT19HQl9BRERSX0NPTkZJR19HT0xERU4gMHgyMjAxMDAwMQo+PiAgI2RlZmluZSBQ T0xBUklTMTFfR0JfQUREUl9DT05GSUdfR09MREVOIDB4MjIwMTEwMDIKPj4gICNkZWZpbmUgVE9O R0FfR0JfQUREUl9DT05GSUdfR09MREVOIDB4MjIwMTEwMDMKPj4KPj4gICNkZWZpbmUgQVJSQVlf TU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IEdCX1RJTEVf TU9ERTBfX0FSUkFZX01PREVfX1NISUZUKQo+PiAgI2RlZmluZSBQSVBFX0NPTkZJRyh4KSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgR0JfVElMRV9NT0RFMF9fUElQRV9D T05GSUdfX1NISUZUKQo+PiAgI2RlZmluZSBUSUxFX1NQTElUKHgpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgoeCkgPDwgR0JfVElMRV9NT0RFMF9fVElMRV9TUExJVF9fU0hJRlQp Cj4+ICAjZGVmaW5lIE1JQ1JPX1RJTEVfTU9ERV9ORVcoeCkgICAgICAgICAgICAgICAgICAgICAg ICAgKCh4KSA8PCBHQl9USUxFX01PREUwX19NSUNST19USUxFX01PREVfTkVXX19TSElGVCkKPj4g QEAgLTE0MDYsMzggKzE0MDgsMzggQEAgc3RhdGljIGludCBnZnhfdjhfMF9raXFfaW5pdF9yaW5n KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pgo+PiAgICAgICAgIHJldHVybiByOwo+PiAg fQo+PiAgc3RhdGljIHZvaWQgZ2Z4X3Y4XzBfa2lxX2ZyZWVfcmluZyhzdHJ1Y3QgYW1kZ3B1X3Jp bmcgKnJpbmcsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFt ZGdwdV9pcnFfc3JjICppcnEpCj4+ICB7Cj4+ICAgICAgICAgYW1kZ3B1X3diX2ZyZWUocmluZy0+ YWRldiwgcmluZy0+YWRldi0+dmlydC5yZWdfdmFsX29mZnMpOwo+PiAgICAgICAgIGFtZGdwdV9y aW5nX2ZpbmkocmluZyk7Cj4+ICB9Cj4+Cj4+IC0jZGVmaW5lIE1FQ19IUERfU0laRSAyMDQ4Cj4+ ICsjZGVmaW5lIEdGWDhfTUVDX0hQRF9TSVpFIDIwNDgKPj4KPj4gIHN0YXRpYyBpbnQgZ2Z4X3Y4 XzBfbWVjX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ICB7Cj4+ICAgICAgICAg aW50IHI7Cj4+ICAgICAgICAgdTMyICpocGQ7Cj4+Cj4+ICAgICAgICAgLyoKPj4gICAgICAgICAg KiB3ZSBhc3NpZ24gb25seSAxIHBpcGUgYmVjYXVzZSBhbGwgb3RoZXIgcGlwZXMgd2lsbAo+PiAg ICAgICAgICAqIGJlIGhhbmRsZWQgYnkgS0ZECj4+ICAgICAgICAgICovCj4+ICAgICAgICAgYWRl di0+Z2Z4Lm1lYy5udW1fbWVjID0gMTsKPj4gICAgICAgICBhZGV2LT5nZngubWVjLm51bV9waXBl ID0gMTsKPj4gICAgICAgICBhZGV2LT5nZngubWVjLm51bV9xdWV1ZSA9IGFkZXYtPmdmeC5tZWMu bnVtX21lYyAqIGFkZXYtPmdmeC5tZWMubnVtX3BpcGUgKiA4Owo+Pgo+PiAgICAgICAgIGlmIChh ZGV2LT5nZngubWVjLmhwZF9lb3Bfb2JqID09IE5VTEwpIHsKPj4gICAgICAgICAgICAgICAgIHIg PSBhbWRncHVfYm9fY3JlYXRlKGFkZXYsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhZGV2LT5nZngubWVjLm51bV9xdWV1ZSAqIE1FQ19IUERfU0laRSwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlICog R0ZYOF9NRUNfSFBEX1NJWkUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQQUdFX1NJWkUsIHRydWUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBTURHUFVfR0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsIE5VTEwsCj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7Cj4+ICAg ICAgICAgICAgICAgICBpZiAocikgewo+PiAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfd2Fy bihhZGV2LT5kZXYsICIoJWQpIGNyZWF0ZSBIRFAgRU9QIGJvIGZhaWxlZFxuIiwgcik7Cj4+ICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByOwo+PiAgICAgICAgICAgICAgICAgfQo+PiAg ICAgICAgIH0KPj4KPj4gICAgICAgICByID0gYW1kZ3B1X2JvX3Jlc2VydmUoYWRldi0+Z2Z4Lm1l Yy5ocGRfZW9wX29iaiwgZmFsc2UpOwo+PiBAQCAtMTQ1Miw1MCArMTQ1NCw1MCBAQCBzdGF0aWMg aW50IGdmeF92OF8wX21lY19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAgICAg ICAgICAgICAgICAgZ2Z4X3Y4XzBfbWVjX2ZpbmkoYWRldik7Cj4+ICAgICAgICAgICAgICAgICBy ZXR1cm4gcjsKPj4gICAgICAgICB9Cj4+ICAgICAgICAgciA9IGFtZGdwdV9ib19rbWFwKGFkZXYt PmdmeC5tZWMuaHBkX2VvcF9vYmosICh2b2lkICoqKSZocGQpOwo+PiAgICAgICAgIGlmIChyKSB7 Cj4+ICAgICAgICAgICAgICAgICBkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIG1hcCBIRFAgRU9Q IGJvIGZhaWxlZFxuIiwgcik7Cj4+ICAgICAgICAgICAgICAgICBnZnhfdjhfMF9tZWNfZmluaShh ZGV2KTsKPj4gICAgICAgICAgICAgICAgIHJldHVybiByOwo+PiAgICAgICAgIH0KPj4KPj4gLSAg ICAgICBtZW1zZXQoaHBkLCAwLCBhZGV2LT5nZngubWVjLm51bV9xdWV1ZSAqIE1FQ19IUERfU0la RSk7Cj4+ICsgICAgICAgbWVtc2V0KGhwZCwgMCwgYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWUgKiBH Rlg4X01FQ19IUERfU0laRSk7Cj4+Cj4+ICAgICAgICAgYW1kZ3B1X2JvX2t1bm1hcChhZGV2LT5n ZngubWVjLmhwZF9lb3Bfb2JqKTsKPj4gICAgICAgICBhbWRncHVfYm9fdW5yZXNlcnZlKGFkZXYt PmdmeC5tZWMuaHBkX2VvcF9vYmopOwo+Pgo+PiAgICAgICAgIHJldHVybiAwOwo+PiAgfQo+Pgo+ PiAgc3RhdGljIHZvaWQgZ2Z4X3Y4XzBfa2lxX2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCj4+ICB7Cj4+ICAgICAgICAgc3RydWN0IGFtZGdwdV9raXEgKmtpcSA9ICZhZGV2LT5nZngu a2lxOwo+Pgo+PiAgICAgICAgIGFtZGdwdV9ib19mcmVlX2tlcm5lbCgma2lxLT5lb3Bfb2JqLCAm a2lxLT5lb3BfZ3B1X2FkZHIsIE5VTEwpOwo+PiAgfQo+Pgo+PiAgc3RhdGljIGludCBnZnhfdjhf MF9raXFfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gIHsKPj4gICAgICAgICBp bnQgcjsKPj4gICAgICAgICB1MzIgKmhwZDsKPj4gICAgICAgICBzdHJ1Y3QgYW1kZ3B1X2tpcSAq a2lxID0gJmFkZXYtPmdmeC5raXE7Cj4+Cj4+IC0gICAgICAgciA9IGFtZGdwdV9ib19jcmVhdGVf a2VybmVsKGFkZXYsIE1FQ19IUERfU0laRSwgUEFHRV9TSVpFLAo+PiArICAgICAgIHIgPSBhbWRn cHVfYm9fY3JlYXRlX2tlcm5lbChhZGV2LCBHRlg4X01FQ19IUERfU0laRSwgUEFHRV9TSVpFLAo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTURHUFVfR0VNX0RPTUFJTl9H VFQsICZraXEtPmVvcF9vYmosCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZraXEtPmVvcF9ncHVfYWRkciwgKHZvaWQgKiopJmhwZCk7Cj4+ICAgICAgICAgaWYgKHIpIHsK Pj4gICAgICAgICAgICAgICAgIGRldl93YXJuKGFkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUg S0lRIGJvICglZCkuXG4iLCByKTsKPj4gICAgICAgICAgICAgICAgIHJldHVybiByOwo+PiAgICAg ICAgIH0KPj4KPj4gLSAgICAgICBtZW1zZXQoaHBkLCAwLCBNRUNfSFBEX1NJWkUpOwo+PiArICAg ICAgIG1lbXNldChocGQsIDAsIEdGWDhfTUVDX0hQRF9TSVpFKTsKPj4KPj4gICAgICAgICByID0g YW1kZ3B1X2JvX3Jlc2VydmUoa2lxLT5lb3Bfb2JqLCBmYWxzZSk7Cj4+ICAgICAgICAgaWYgKHVu bGlrZWx5KHIgIT0gMCkpCj4+ICAgICAgICAgICAgICAgICBkZXZfd2FybihhZGV2LT5kZXYsICIo JWQpIHJlc2VydmUga2lxIGVvcCBibyBmYWlsZWRcbiIsIHIpOwo+PiAgICAgICAgIGFtZGdwdV9i b19rdW5tYXAoa2lxLT5lb3Bfb2JqKTsKPj4gICAgICAgICBhbWRncHVfYm9fdW5yZXNlcnZlKGtp cS0+ZW9wX29iaik7Cj4+Cj4+ICAgICAgICAgcmV0dXJuIDA7Cj4+ICB9Cj4+Cj4+IEBAIC0yMTQ4 LDIxICsyMTUwLDIxIEBAIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfc3dfaW5pdCh2b2lkICpoYW5kbGUp Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9FUlJPUigiVG9vIG1hbnkgKCVkKSBjb21w dXRlIHJpbmdzIVxuIiwgaSk7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiAg ICAgICAgICAgICAgICAgfQo+PiAgICAgICAgICAgICAgICAgcmluZyA9ICZhZGV2LT5nZnguY29t cHV0ZV9yaW5nW2ldOwo+PiAgICAgICAgICAgICAgICAgcmluZy0+cmluZ19vYmogPSBOVUxMOwo+ PiAgICAgICAgICAgICAgICAgcmluZy0+dXNlX2Rvb3JiZWxsID0gdHJ1ZTsKPj4gICAgICAgICAg ICAgICAgIHJpbmctPmRvb3JiZWxsX2luZGV4ID0gQU1ER1BVX0RPT1JCRUxMX01FQ19SSU5HMCAr IGk7Cj4+ICAgICAgICAgICAgICAgICByaW5nLT5tZSA9IDE7IC8qIGZpcnN0IE1FQyAqLwo+PiAg ICAgICAgICAgICAgICAgcmluZy0+cGlwZSA9IGkgLyA4Owo+PiAgICAgICAgICAgICAgICAgcmlu Zy0+cXVldWUgPSBpICUgODsKPj4gLSAgICAgICAgICAgICAgIHJpbmctPmVvcF9ncHVfYWRkciA9 IGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9ncHVfYWRkciArIChpICogTUVDX0hQRF9TSVpFKTsKPj4g KyAgICAgICAgICAgICAgIHJpbmctPmVvcF9ncHVfYWRkciA9IGFkZXYtPmdmeC5tZWMuaHBkX2Vv cF9ncHVfYWRkciArIChpICogR0ZYOF9NRUNfSFBEX1NJWkUpOwo+PiAgICAgICAgICAgICAgICAg c3ByaW50ZihyaW5nLT5uYW1lLCAiY29tcF8lZC4lZC4lZCIsIHJpbmctPm1lLCByaW5nLT5waXBl LCByaW5nLT5xdWV1ZSk7Cj4+ICAgICAgICAgICAgICAgICBpcnFfdHlwZSA9IEFNREdQVV9DUF9J UlFfQ09NUFVURV9NRUMxX1BJUEUwX0VPUCArIHJpbmctPnBpcGU7Cj4+ICAgICAgICAgICAgICAg ICAvKiB0eXBlLTIgcGFja2V0cyBhcmUgZGVwcmVjYXRlZCBvbiBNRUMsIHVzZSB0eXBlLTMgaW5z dGVhZCAqLwo+PiAgICAgICAgICAgICAgICAgciA9IGFtZGdwdV9yaW5nX2luaXQoYWRldiwgcmlu ZywgMTAyNCwgJmFkZXYtPmdmeC5lb3BfaXJxLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXJxX3R5cGUpOwo+PiAgICAgICAgICAgICAgICAgaWYgKHIpCj4+ICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiByOwo+PiAgICAgICAgIH0KPj4KPj4gICAgICAgICBy ID0gZ2Z4X3Y4XzBfa2lxX2luaXQoYWRldik7Cj4+IEBAIC00NzQ3LDUyICs0NzQ5LDUwIEBAIHN0 YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX2tjcV9kaXNhYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQo+PiAgICAgICAgIHJldHVybiByOwo+PiAgfQo+Pgo+PiAgc3RhdGljIGludCBnZnhfdjhf MF9tcWRfaW5pdChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCj4+ICB7Cj4+ICAgICAgICAgc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2Owo+PiAgICAgICAgIHN0cnVjdCB2 aV9tcWQgKm1xZCA9IHJpbmctPm1xZF9wdHI7Cj4+ICAgICAgICAgdWludDY0X3QgaHFkX2dwdV9h ZGRyLCB3Yl9ncHVfYWRkciwgZW9wX2Jhc2VfYWRkcjsKPj4gICAgICAgICB1aW50MzJfdCB0bXA7 Cj4+Cj4+ICsgICAgICAgLyogaW5pdCB0aGUgbXFkIHN0cnVjdCAqLwo+PiArICAgICAgIG1lbXNl dChtcWQsIDAsIHNpemVvZihzdHJ1Y3QgdmlfbXFkKSk7Cj4+ICsKPj4gICAgICAgICBtcWQtPmhl YWRlciA9IDB4QzAzMTA4MDA7Cj4+ICAgICAgICAgbXFkLT5jb21wdXRlX3BpcGVsaW5lc3RhdF9l bmFibGUgPSAweDAwMDAwMDAxOwo+PiAgICAgICAgIG1xZC0+Y29tcHV0ZV9zdGF0aWNfdGhyZWFk X21nbXRfc2UwID0gMHhmZmZmZmZmZjsKPj4gICAgICAgICBtcWQtPmNvbXB1dGVfc3RhdGljX3Ro cmVhZF9tZ210X3NlMSA9IDB4ZmZmZmZmZmY7Cj4+ICAgICAgICAgbXFkLT5jb21wdXRlX3N0YXRp Y190aHJlYWRfbWdtdF9zZTIgPSAweGZmZmZmZmZmOwo+PiAgICAgICAgIG1xZC0+Y29tcHV0ZV9z dGF0aWNfdGhyZWFkX21nbXRfc2UzID0gMHhmZmZmZmZmZjsKPj4gICAgICAgICBtcWQtPmNvbXB1 dGVfbWlzY19yZXNlcnZlZCA9IDB4MDAwMDAwMDM7Cj4+Cj4+ICAgICAgICAgZW9wX2Jhc2VfYWRk ciA9IHJpbmctPmVvcF9ncHVfYWRkciA+PiA4Owo+PiAgICAgICAgIG1xZC0+Y3BfaHFkX2VvcF9i YXNlX2FkZHJfbG8gPSBlb3BfYmFzZV9hZGRyOwo+PiAgICAgICAgIG1xZC0+Y3BfaHFkX2VvcF9i YXNlX2FkZHJfaGkgPSB1cHBlcl8zMl9iaXRzKGVvcF9iYXNlX2FkZHIpOwo+Pgo+PiAgICAgICAg IC8qIHNldCB0aGUgRU9QIHNpemUsIHJlZ2lzdGVyIHZhbHVlIGlzIDJeKEVPUF9TSVpFKzEpIGR3 b3JkcyAqLwo+PiAgICAgICAgIHRtcCA9IFJSRUczMihtbUNQX0hRRF9FT1BfQ09OVFJPTCk7Cj4+ ICAgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9FT1BfQ09OVFJPTCwgRU9Q X1NJWkUsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgIChvcmRlcl9iYXNlXzIoTUVDX0hQRF9T SVpFIC8gNCkgLSAxKSk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIChvcmRlcl9iYXNlXzIo R0ZYOF9NRUNfSFBEX1NJWkUgLyA0KSAtIDEpKTsKPj4KPj4gICAgICAgICBtcWQtPmNwX2hxZF9l b3BfY29udHJvbCA9IHRtcDsKPj4KPj4gICAgICAgICAvKiBlbmFibGUgZG9vcmJlbGw/ICovCj4+ ICAgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRChSUkVHMzIobW1DUF9IUURfUFFfRE9PUkJFTExf Q09OVFJPTCksCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUF9IUURfUFFfRE9PUkJF TExfQ09OVFJPTCwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPT1JCRUxMX0VOLAo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+dXNlX2Rvb3JiZWxsID8gMSA6IDAp Owo+Pgo+PiAgICAgICAgIG1xZC0+Y3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgPSB0bXA7Cj4+ Cj4+IC0gICAgICAgLyogZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBhY3RpdmUgKi8KPj4gLSAg ICAgICBtcWQtPmNwX2hxZF9kZXF1ZXVlX3JlcXVlc3QgPSAwOwo+PiAtICAgICAgIG1xZC0+Y3Bf aHFkX3BxX3JwdHIgPSAwOwo+PiAtICAgICAgIG1xZC0+Y3BfaHFkX3BxX3dwdHIgPSAwOwo+PiAt Cj4+ICAgICAgICAgLyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBNUUQgKi8KPj4gICAgICAgICBt cWQtPmNwX21xZF9iYXNlX2FkZHJfbG8gPSByaW5nLT5tcWRfZ3B1X2FkZHIgJiAweGZmZmZmZmZj Owo+PiAgICAgICAgIG1xZC0+Y3BfbXFkX2Jhc2VfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMocmlu Zy0+bXFkX2dwdV9hZGRyKTsKPj4KPj4gICAgICAgICAvKiBzZXQgTVFEIHZtaWQgdG8gMCAqLwo+ PiAgICAgICAgIHRtcCA9IFJSRUczMihtbUNQX01RRF9DT05UUk9MKTsKPj4gICAgICAgICB0bXAg PSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfTVFEX0NPTlRST0wsIFZNSUQsIDApOwo+PiAgICAgICAg IG1xZC0+Y3BfbXFkX2NvbnRyb2wgPSB0bXA7Cj4+Cj4+ICAgICAgICAgLyogc2V0IHRoZSBwb2lu dGVyIHRvIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciBDUF9SQjBfQkFTRS9fSEkgKi8KPj4gQEAg LTQ4NTQsNTAgKzQ4NTQsODYgQEAgc3RhdGljIGludCBnZnhfdjhfMF9tcWRfaW5pdChzdHJ1Y3Qg YW1kZ3B1X3JpbmcgKnJpbmcpCj4+ICAgICAgICAgdG1wID0gUlJFRzMyKG1tQ1BfSFFEX1BFUlNJ U1RFTlRfU1RBVEUpOwo+PiAgICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURf UEVSU0lTVEVOVF9TVEFURSwgUFJFTE9BRF9TSVpFLCAweDUzKTsKPj4gICAgICAgICBtcWQtPmNw X2hxZF9wZXJzaXN0ZW50X3N0YXRlID0gdG1wOwo+Pgo+PiAgICAgICAgIC8qIGFjdGl2YXRlIHRo ZSBxdWV1ZSAqLwo+PiAgICAgICAgIG1xZC0+Y3BfaHFkX2FjdGl2ZSA9IDE7Cj4+Cj4+ICAgICAg ICAgcmV0dXJuIDA7Cj4+ICB9Cj4+Cj4+IC1zdGF0aWMgaW50IGdmeF92OF8wX2tpcV9pbml0X3Jl Z2lzdGVyKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKPj4gK3N0YXRpYyBpbnQgZ2Z4X3Y4XzBf bXFkX2RlYWN0aXZhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4KPiBJJ2QgcHJlZmVy IHRvIGNhbGwgdGhpcyBnZnhfdjhfMF9kZWFjdGl2YXRlX2hxZCgpIHNpbmNlIGl0J3Mgb3BlcmF0 aW5nCj4gb24gYW4gSFFEIHJhdGhlciB0aGFuIGFuIE1RRCBhbmQgZ2VuZXJhbGx5IHdlIHVzZSB0 aGUgdmVyYiBmaXJzdCBpbgo+IHRoZSBuYW1pbmcuCj4KPgo+PiArewo+PiArICAgICAgIGludCBp Owo+PiArCj4+ICsgICAgICAgLyogZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBhY3RpdmUgKi8K Pj4gKyAgICAgICBpZiAoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSB7Cj4+ICsgICAgICAg ICAgICAgICBXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCAxKTsKPj4gKyAgICAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewo+PiArICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIShSUkVHMzIobW1DUF9IUURfQUNUSVZFKSAmIDEpKQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICAgICAg ICAgICAgICAgICB1ZGVsYXkoMSk7Cj4+ICsgICAgICAgICAgICAgICB9Cj4+ICsKPj4gKyAgICAg ICAgICAgICAgIGlmIChpID09IGFkZXYtPnVzZWNfdGltZW91dCkKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC1FVElNRURPVVQ7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIFdSRUcz MihtbUNQX0hRRF9ERVFVRVVFX1JFUVVFU1QsIDApOwo+PiArICAgICAgICAgICAgICAgV1JFRzMy KG1tQ1BfSFFEX1BRX1JQVFIsIDApOwo+PiArICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFFE X1BRX1dQVFIsIDApOwo+Cj4gTWF5YmUgbW92ZSB0aGlzIGh1bmsgb3V0c2lkZSBvZiB0aGUgbG9v cD8gIFRoZW4gSSB0aGluayB0aGlzIGZ1bmN0aW9uCj4gY291bGQgYWxzbyByZXBsYWNlIGdmeF92 OF8wX2luaXRfaHFkKCkgYW5kIGdmeF92OF8wX2luYWN0aXZlX2hxZCgpLgo+IEFsc28sIG1heWJl IHRoZSByZXF1ZXN0IHR5cGUgc2hvdWxkIGJlIHNlbGVjdGFibGU/ICBIb3cgYWJvdXQgdGhlCj4g YXR0YWNoZWQgcGF0Y2g/Cj4KPiBBbGV4Cj4KPgo+PiArICAgICAgIH0KPj4gKwo+PiArICAgICAg IHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBnZnhfdjhfMF9lbmFibGVfZG9v cmJlbGwoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZW5hYmxlKQo+PiArewo+PiAr ICAgICAgIHVpbnQzMl90IHRtcDsKPj4gKwo+PiArICAgICAgIGlmICghZW5hYmxlKQo+PiArICAg ICAgICAgICAgICAgcmV0dXJuOwo+PiArCj4+ICsgICAgICAgaWYgKChhZGV2LT5hc2ljX3R5cGUg PT0gQ0hJUF9DQVJSSVpPKSB8fAo+PiArICAgICAgICAgICAgICAgICAgICAgICAoYWRldi0+YXNp Y190eXBlID09IENISVBfRklKSSkgfHwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgKGFkZXYt PmFzaWNfdHlwZSA9PSBDSElQX1NUT05FWSkgfHwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg KGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BPTEFSSVMxMSkgfHwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BPTEFSSVMxMCkpIHsKPj4gKyAgICAg ICAgICAgICAgIFdSRUczMihtbUNQX01FQ19ET09SQkVMTF9SQU5HRV9MT1dFUiwgQU1ER1BVX0RP T1JCRUxMX0tJUSA8PCAyKTsKPj4gKyAgICAgICAgICAgICAgIFdSRUczMihtbUNQX01FQ19ET09S QkVMTF9SQU5HRV9VUFBFUiwgQU1ER1BVX0RPT1JCRUxMX01FQ19SSU5HNyA8PCAyKTsKPj4gKyAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICB0bXAgPSBSUkVHMzIobW1DUF9QUV9TVEFUVVMpOwo+PiAr ICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9QUV9TVEFUVVMsIERPT1JCRUxMX0VO QUJMRSwgMSk7Cj4+ICsgICAgICAgV1JFRzMyKG1tQ1BfUFFfU1RBVFVTLCB0bXApOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGdmeF92OF8wX21xZF9jb21taXQoc3RydWN0IGFtZGdwdV9yaW5n ICpyaW5nKQo+PiAgewo+PiAgICAgICAgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmlu Zy0+YWRldjsKPj4gICAgICAgICBzdHJ1Y3QgdmlfbXFkICptcWQgPSByaW5nLT5tcWRfcHRyOwo+ PiAtICAgICAgIGludCBqOwo+Pgo+PiAgICAgICAgIC8qIGRpc2FibGUgd3B0ciBwb2xsaW5nICov Cj4+ICAgICAgICAgV1JFRzMyX0ZJRUxEKENQX1BRX1dQVFJfUE9MTF9DTlRMLCBFTiwgMCk7Cj4+ Cj4+ICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX0VPUF9CQVNFX0FERFIsIG1xZC0+Y3BfaHFkX2Vv cF9iYXNlX2FkZHJfbG8pOwo+PiAgICAgICAgIFdSRUczMihtbUNQX0hRRF9FT1BfQkFTRV9BRERS X0hJLCBtcWQtPmNwX2hxZF9lb3BfYmFzZV9hZGRyX2hpKTsKPj4KPj4gICAgICAgICAvKiBzZXQg dGhlIEVPUCBzaXplLCByZWdpc3RlciB2YWx1ZSBpcyAyXihFT1BfU0laRSsxKSBkd29yZHMgKi8K Pj4gICAgICAgICBXUkVHMzIobW1DUF9IUURfRU9QX0NPTlRST0wsIG1xZC0+Y3BfaHFkX2VvcF9j b250cm9sKTsKPj4KPj4gICAgICAgICAvKiBlbmFibGUgZG9vcmJlbGw/ICovCj4+ICAgICAgICAg V1JFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsIG1xZC0+Y3BfaHFkX3BxX2Rvb3Ji ZWxsX2NvbnRyb2wpOwo+Pgo+PiAtICAgICAgIC8qIGRpc2FibGUgdGhlIHF1ZXVlIGlmIGl0J3Mg YWN0aXZlICovCj4+IC0gICAgICAgaWYgKFJSRUczMihtbUNQX0hRRF9BQ1RJVkUpICYgQ1BfSFFE X0FDVElWRV9fQUNUSVZFX01BU0spIHsKPj4gLSAgICAgICAgICAgICAgIFdSRUczMihtbUNQX0hR RF9ERVFVRVVFX1JFUVVFU1QsIDEpOwo+PiAtICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8 IGFkZXYtPnVzZWNfdGltZW91dDsgaisrKSB7Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIGlm ICghKFJSRUczMihtbUNQX0hRRF9BQ1RJVkUpICYgQ1BfSFFEX0FDVElWRV9fQUNUSVZFX01BU0sp KQo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiAtICAgICAgICAg ICAgICAgICAgICAgICB1ZGVsYXkoMSk7Cj4+IC0gICAgICAgICAgICAgICB9Cj4+IC0gICAgICAg ICAgICAgICBXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCBtcWQtPmNwX2hxZF9kZXF1 ZXVlX3JlcXVlc3QpOwo+PiAtICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFIs IG1xZC0+Y3BfaHFkX3BxX3JwdHIpOwo+PiAtICAgICAgICAgICAgICAgV1JFRzMyKG1tQ1BfSFFE X1BRX1dQVFIsIG1xZC0+Y3BfaHFkX3BxX3dwdHIpOwo+PiAtICAgICAgIH0KPj4gKyAgICAgICAv KiBzZXQgcHEgcmVhZC93cml0ZSBwb2ludGVycyAqLwo+PiArICAgICAgIFdSRUczMihtbUNQX0hR RF9ERVFVRVVFX1JFUVVFU1QsIG1xZC0+Y3BfaHFkX2RlcXVldWVfcmVxdWVzdCk7Cj4+ICsgICAg ICAgV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFIsIG1xZC0+Y3BfaHFkX3BxX3JwdHIpOwo+PiArICAg ICAgIFdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPmNwX2hxZF9wcV93cHRyKTsKPj4KPj4g ICAgICAgICAvKiBzZXQgdGhlIHBvaW50ZXIgdG8gdGhlIE1RRCAqLwo+PiAgICAgICAgIFdSRUcz MihtbUNQX01RRF9CQVNFX0FERFIsIG1xZC0+Y3BfbXFkX2Jhc2VfYWRkcl9sbyk7Cj4+ICAgICAg ICAgV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUl9ISSwgbXFkLT5jcF9tcWRfYmFzZV9hZGRyX2hp KTsKPj4KPj4gICAgICAgICAvKiBzZXQgTVFEIHZtaWQgdG8gMCAqLwo+PiAgICAgICAgIFdSRUcz MihtbUNQX01RRF9DT05UUk9MLCBtcWQtPmNwX21xZF9jb250cm9sKTsKPj4KPj4gICAgICAgICAv KiBzZXQgdGhlIHBvaW50ZXIgdG8gdGhlIEhRRCwgdGhpcyBpcyBzaW1pbGFyIENQX1JCMF9CQVNF L19ISSAqLwo+PiAgICAgICAgIFdSRUczMihtbUNQX0hRRF9QUV9CQVNFLCBtcWQtPmNwX2hxZF9w cV9iYXNlX2xvKTsKPj4gQEAgLTQ5MTAsNDYgKzQ5NDYsMzMgQEAgc3RhdGljIGludCBnZnhfdjhf MF9raXFfaW5pdF9yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCj4+ICAgICAgICAg V1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFJfUkVQT1JUX0FERFIsCj4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbXFkLT5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcl9sbyk7Cj4+ICAg ICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFJfUkVQT1JUX0FERFJfSEksCj4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbXFkLT5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcl9o aSk7Cj4+Cj4+ICAgICAgICAgLyogb25seSB1c2VkIGlmIENQX1BRX1dQVFJfUE9MTF9DTlRMLkNQ X1BRX1dQVFJfUE9MTF9DTlRMX19FTl9NQVNLPTEgKi8KPj4gICAgICAgICBXUkVHMzIobW1DUF9I UURfUFFfV1BUUl9QT0xMX0FERFIsIG1xZC0+Y3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyX2xvKTsK Pj4gICAgICAgICBXUkVHMzIobW1DUF9IUURfUFFfV1BUUl9QT0xMX0FERFJfSEksIG1xZC0+Y3Bf aHFkX3BxX3dwdHJfcG9sbF9hZGRyX2hpKTsKPj4KPj4gICAgICAgICAvKiBlbmFibGUgdGhlIGRv b3JiZWxsIGlmIHJlcXVlc3RlZCAqLwo+PiAtICAgICAgIGlmIChyaW5nLT51c2VfZG9vcmJlbGwp IHsKPj4gLSAgICAgICAgICAgICAgIGlmICgoYWRldi0+YXNpY190eXBlID09IENISVBfQ0FSUkla TykgfHwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRldi0+YXNpY190eXBl ID09IENISVBfRklKSSkgfHwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRl di0+YXNpY190eXBlID09IENISVBfU1RPTkVZKSkgewo+PiAtICAgICAgICAgICAgICAgICAgICAg ICBXUkVHMzIobW1DUF9NRUNfRE9PUkJFTExfUkFOR0VfTE9XRVIsCj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNREdQVV9ET09SQkVMTF9LSVEgPDwg Mik7Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIFdSRUczMihtbUNQX01FQ19ET09SQkVMTF9S QU5HRV9VUFBFUiwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQU1ER1BVX0RPT1JCRUxMX01FQ19SSU5HNyA8PCAyKTsKPj4gLSAgICAgICAgICAgICAg IH0KPj4gLSAgICAgICB9Cj4+ICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NP TlRST0wsIG1xZC0+Y3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wpOwo+Pgo+PiAgICAgICAgIC8q IHJlc2V0IHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzLCBzaW1pbGFyIHRvIENQX1JCMF9XUFRSL19S UFRSICovCj4+ICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFIsIG1xZC0+Y3BfaHFkX3Bx X3dwdHIpOwo+Pgo+PiAgICAgICAgIC8qIHNldCB0aGUgdm1pZCBmb3IgdGhlIHF1ZXVlICovCj4+ ICAgICAgICAgV1JFRzMyKG1tQ1BfSFFEX1ZNSUQsIG1xZC0+Y3BfaHFkX3ZtaWQpOwo+Pgo+PiAg ICAgICAgIFdSRUczMihtbUNQX0hRRF9QRVJTSVNURU5UX1NUQVRFLCBtcWQtPmNwX2hxZF9wZXJz aXN0ZW50X3N0YXRlKTsKPj4KPj4gICAgICAgICAvKiBhY3RpdmF0ZSB0aGUgcXVldWUgKi8KPj4g ICAgICAgICBXUkVHMzIobW1DUF9IUURfQUNUSVZFLCBtcWQtPmNwX2hxZF9hY3RpdmUpOwo+Pgo+ PiAtICAgICAgIGlmIChyaW5nLT51c2VfZG9vcmJlbGwpCj4+IC0gICAgICAgICAgICAgICBXUkVH MzJfRklFTEQoQ1BfUFFfU1RBVFVTLCBET09SQkVMTF9FTkFCTEUsIDEpOwo+PiAtCj4+ICAgICAg ICAgcmV0dXJuIDA7Cj4+ICB9Cj4+Cj4+ICBzdGF0aWMgaW50IGdmeF92OF8wX2tpcV9pbml0X3F1 ZXVlKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKPj4gIHsKPj4gICAgICAgICBzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7Cj4+ICAgICAgICAgc3RydWN0IHZpX21xZCAq bXFkID0gcmluZy0+bXFkX3B0cjsKPj4gICAgICAgICBpbnQgbXFkX2lkeCA9IEFNREdQVV9NQVhf Q09NUFVURV9SSU5HUzsKPj4KPj4gICAgICAgICBnZnhfdjhfMF9raXFfc2V0dGluZyhyaW5nKTsK Pj4gQEAgLTQ5NTgsMjkgKzQ5ODEsMzIgQEAgc3RhdGljIGludCBnZnhfdjhfMF9raXFfaW5pdF9x dWV1ZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCj4+ICAgICAgICAgICAgICAgICAvKiByZXNl dCBNUUQgdG8gYSBjbGVhbiBzdGF0dXMgKi8KPj4gICAgICAgICAgICAgICAgIGlmIChhZGV2LT5n ZngubWVjLm1xZF9iYWNrdXBbbXFkX2lkeF0pCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIG1l bWNweShtcWQsIGFkZXYtPmdmeC5tZWMubXFkX2JhY2t1cFttcWRfaWR4XSwgc2l6ZW9mKCptcWQp KTsKPj4KPj4gICAgICAgICAgICAgICAgIC8qIHJlc2V0IHJpbmcgYnVmZmVyICovCj4+ICAgICAg ICAgICAgICAgICByaW5nLT53cHRyID0gMDsKPj4gICAgICAgICAgICAgICAgIGFtZGdwdV9yaW5n X2NsZWFyX3JpbmcocmluZyk7Cj4+Cj4+ICAgICAgICAgICAgICAgICBtdXRleF9sb2NrKCZhZGV2 LT5zcmJtX211dGV4KTsKPj4gICAgICAgICAgICAgICAgIHZpX3NyYm1fc2VsZWN0KGFkZXYsIHJp bmctPm1lLCByaW5nLT5waXBlLCByaW5nLT5xdWV1ZSwgMCk7Cj4+IC0gICAgICAgICAgICAgICBn ZnhfdjhfMF9raXFfaW5pdF9yZWdpc3RlcihyaW5nKTsKPj4gKyAgICAgICAgICAgICAgIGdmeF92 OF8wX21xZF9kZWFjdGl2YXRlKGFkZXYpOwo+PiArICAgICAgICAgICAgICAgZ2Z4X3Y4XzBfZW5h YmxlX2Rvb3JiZWxsKGFkZXYsIHJpbmctPnVzZV9kb29yYmVsbCk7Cj4+ICsgICAgICAgICAgICAg ICBnZnhfdjhfMF9tcWRfY29tbWl0KHJpbmcpOwo+PiAgICAgICAgICAgICAgICAgdmlfc3JibV9z ZWxlY3QoYWRldiwgMCwgMCwgMCwgMCk7Cj4+ICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2so JmFkZXYtPnNyYm1fbXV0ZXgpOwo+PiAgICAgICAgIH0gZWxzZSB7Cj4+IC0gICAgICAgICAgICAg ICBtZW1zZXQoKHZvaWQgKiltcWQsIDAsIHNpemVvZigqbXFkKSk7Cj4+ICAgICAgICAgICAgICAg ICBtdXRleF9sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKPj4gICAgICAgICAgICAgICAgIHZpX3Ny Ym1fc2VsZWN0KGFkZXYsIHJpbmctPm1lLCByaW5nLT5waXBlLCByaW5nLT5xdWV1ZSwgMCk7Cj4+ ICAgICAgICAgICAgICAgICBnZnhfdjhfMF9tcWRfaW5pdChyaW5nKTsKPj4gLSAgICAgICAgICAg ICAgIGdmeF92OF8wX2tpcV9pbml0X3JlZ2lzdGVyKHJpbmcpOwo+PiArICAgICAgICAgICAgICAg Z2Z4X3Y4XzBfbXFkX2RlYWN0aXZhdGUoYWRldik7Cj4+ICsgICAgICAgICAgICAgICBnZnhfdjhf MF9lbmFibGVfZG9vcmJlbGwoYWRldiwgcmluZy0+dXNlX2Rvb3JiZWxsKTsKPj4gKyAgICAgICAg ICAgICAgIGdmeF92OF8wX21xZF9jb21taXQocmluZyk7Cj4+ICAgICAgICAgICAgICAgICB2aV9z cmJtX3NlbGVjdChhZGV2LCAwLCAwLCAwLCAwKTsKPj4gICAgICAgICAgICAgICAgIG11dGV4X3Vu bG9jaygmYWRldi0+c3JibV9tdXRleCk7Cj4+Cj4+ICAgICAgICAgICAgICAgICBpZiAoYWRldi0+ Z2Z4Lm1lYy5tcWRfYmFja3VwW21xZF9pZHhdKQo+PiAgICAgICAgICAgICAgICAgICAgICAgICBt ZW1jcHkoYWRldi0+Z2Z4Lm1lYy5tcWRfYmFja3VwW21xZF9pZHhdLCBtcWQsIHNpemVvZigqbXFk KSk7Cj4+ICAgICAgICAgfQo+Pgo+PiAgICAgICAgIHJldHVybiAwOwo+PiAgfQo+Pgo+PiAtLQo+ PiAyLjkuMwo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwo+PiBhbWQtZ2Z4IG1haWxpbmcgbGlzdAo+PiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwo+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ft ZC1nZngKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1k LWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==