From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: Re: [PATCH 02/17] drm/amdgpu: refactor MQD/HQD initialization v3 Date: Mon, 17 Apr 2017 16:13:23 -0400 Message-ID: <545f2017-289d-01cf-268d-5aa8ffdd83fc@gmail.com> References: <20170413213542.18802-1-andresx7@gmail.com> <20170413213542.18802-3-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: <20170413213542.18802-3-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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: "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , Oded Gabbay CgpPbiAyMDE3LTA0LTEzIDA1OjM1IFBNLCBBbmRyZXMgUm9kcmlndWV6IHdyb3RlOgo+IFRoZSBN UUQgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgY3VycmVudGx5IGV4aXN0cyBpbiAzIGRpZmZlcmVudCBw bGFjZXMuCj4gUmVmYWN0b3IgaXQgdG8gYWJzb3JiIGFsbCB0aGUgZHVwbGljYXRlcy4KPgo+IFRo ZSBzdWNjZXNzIHBhdGggcmVtYWlucyBtb3N0bHkgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgYSBzbGln aHRseQo+IGRpZmZlcmVudCBvcmRlciBpbiB0aGUgbm9uLWtpcSBjYXNlLiBUaGlzIHNob3VsZG4n dCBtYXR0ZXIgaWYgdGhlIEhRRAo+IGlzIGRpc2FibGVkLgo+Cj4gVGhlIGVycm9yIGhhbmRsaW5n IHBhdGhzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGRlYWwgd2l0aCB0aGUgbmV3IGNvZGUKPiBzdHJ1 Y3R1cmUuCj4KPiB2MjogdGhlIG5vbi1raXEgcGF0aCBmb3IgZ2Z4djggd2FzIGRyb3BwZWQgaW4g dGhlIHJlYmFzZQo+IHYzOiBzcGxpdCBNRUNfSFBEX1NJWkUgcmVuYW1lLCBkcm9wcGVkIGRvb3Ji ZWxsIGNoYW5nZXMKPgo+IFJldmlld2VkLWJ5OiBFZHdhcmQgTydDYWxsYWdoYW4gPGZ1bmZ1bmN0 b3JAZm9sa2xvcmUxOTg0Lm5ldD4KPiBBY2tlZC1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0 aWFuLmtvZW5pZ0BhbWQuY29tPgo+IEFja2VkLWJ5OiBGZWxpeCBLdWVobGluZyA8RmVsaXguS3Vl aGxpbmdAYW1kLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBBbmRyZXMgUm9kcmlndWV6IDxhbmRyZXN4 N0BnbWFpbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18w LmMgfCA0MzkgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhfMC5jIHwgIDc4ICsrKy0tLQo+ICAyIGZpbGVzIGNoYW5n ZWQsIDI3MSBpbnNlcnRpb25zKCspLCAyNDYgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2dmeF92N18wLmMKPiBpbmRleCAzYjk4MTYyLi40ZTZhNjBjIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18wLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdfMC5jCj4gQEAgLTI5MjcsMjgxICsyOTI3LDMxNiBA QCBzdHJ1Y3QgYm9uYWlyZV9tcWQKPiAgCXUzMiBwZXJmX2NvdW50ZXJfZW5hYmxlOwo+ICAJdTMy IHBnbVsyXTsKPiAgCXUzMiB0YmFbMl07Cj4gIAl1MzIgdG1hWzJdOwo+ICAJdTMyIHBnbV9yc3Jj WzJdOwo+ICAJdTMyIHZtaWQ7Cj4gIAl1MzIgcmVzb3VyY2VfbGltaXRzOwo+ICAJdTMyIHN0YXRp Y190aHJlYWRfbWdtdDAxWzJdOwo+ICAJdTMyIHRtcF9yaW5nX3NpemU7Cj4gIAl1MzIgc3RhdGlj X3RocmVhZF9tZ210MjNbMl07Cj4gIAl1MzIgcmVzdGFydFszXTsKPiAgCXUzMiB0aHJlYWRfdHJh Y2VfZW5hYmxlOwo+ICAJdTMyIHJlc2VydmVkMTsKPiAgCXUzMiB1c2VyX2RhdGFbMTZdOwo+ICAJ dTMyIHZndGNzX2ludm9rZV9jb3VudFsyXTsKPiAgCXN0cnVjdCBocWRfcmVnaXN0ZXJzIHF1ZXVl X3N0YXRlOwo+ICAJdTMyIGRlcXVldWVfY250cjsKPiAgCXUzMiBpbnRlcnJ1cHRfcXVldWVbNjRd Owo+ICB9Owo+Cj4gLS8qKgo+IC0gKiBnZnhfdjdfMF9jcF9jb21wdXRlX3Jlc3VtZSAtIHNldHVw IHRoZSBjb21wdXRlIHF1ZXVlIHJlZ2lzdGVycwo+IC0gKgo+IC0gKiBAYWRldjogYW1kZ3B1X2Rl dmljZSBwb2ludGVyCj4gLSAqCj4gLSAqIFByb2dyYW0gdGhlIGNvbXB1dGUgcXVldWVzIGFuZCB0 ZXN0IHRoZW0gdG8gbWFrZSBzdXJlIHRoZXkKPiAtICogYXJlIHdvcmtpbmcuCj4gLSAqIFJldHVy bnMgMCBmb3Igc3VjY2VzcywgZXJyb3IgZm9yIGZhaWx1cmUuCj4gLSAqLwo+IC1zdGF0aWMgaW50 IGdmeF92N18wX2NwX2NvbXB1dGVfcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ ICtzdGF0aWMgdm9pZCBnZnhfdjdfMF9jb21wdXRlX3BpcGVfaW5pdChzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwgaW50IG1lLCBpbnQgcGlwZSkKPiAgewo+IC0JaW50IHIsIGksIGo7Cj4gLQl1 MzIgdG1wOwo+IC0JYm9vbCB1c2VfZG9vcmJlbGwgPSB0cnVlOwo+IC0JdTY0IGhxZF9ncHVfYWRk cjsKPiAtCXU2NCBtcWRfZ3B1X2FkZHI7Cj4gIAl1NjQgZW9wX2dwdV9hZGRyOwo+IC0JdTY0IHdi X2dwdV9hZGRyOwo+IC0JdTMyICpidWY7Cj4gLQlzdHJ1Y3QgYm9uYWlyZV9tcWQgKm1xZDsKPiAt CXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKPiAtCj4gLQkvKiBmaXggdXAgY2hpY2tlbiBiaXRz ICovCj4gLQl0bXAgPSBSUkVHMzIobW1DUF9DUEZfREVCVUcpOwo+IC0JdG1wIHw9ICgxIDw8IDIz KTsKPiAtCVdSRUczMihtbUNQX0NQRl9ERUJVRywgdG1wKTsKPiArCXUzMiB0bXA7Cj4gKwlzaXpl X3QgZW9wX29mZnNldCA9IG1lICogcGlwZSAqIEdGWDdfTUVDX0hQRF9TSVpFICogMjsKClRoZSBv ZmZzZXQgaGVyZSBpcyBpbmNvcnJlY3QsIGl0IHNob3VsZCBiZToKCihtZWMgKiBudW1fcGlwZV9w ZXJfbWVjICsgcGlwZSkgKiAuLi4KCgo+Cj4gLQkvKiBpbml0IHRoZSBwaXBlcyAqLwo+ICAJbXV0 ZXhfbG9jaygmYWRldi0+c3JibV9tdXRleCk7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgKGFkZXYtPmdm eC5tZWMubnVtX3BpcGUgKiBhZGV2LT5nZngubWVjLm51bV9tZWMpOyBpKyspIHsKPiAtCQlpbnQg bWUgPSAoaSA8IDQpID8gMSA6IDI7Cj4gLQkJaW50IHBpcGUgPSAoaSA8IDQpID8gaSA6IChpIC0g NCk7Cj4gKwllb3BfZ3B1X2FkZHIgPSBhZGV2LT5nZngubWVjLmhwZF9lb3BfZ3B1X2FkZHIgKyBl b3Bfb2Zmc2V0Owo+Cj4gLQkJZW9wX2dwdV9hZGRyID0gYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX2dw dV9hZGRyICsgKGkgKiBHRlg3X01FQ19IUERfU0laRSAqIDIpOwo+ICsJY2lrX3NyYm1fc2VsZWN0 KGFkZXYsIG1lLCBwaXBlLCAwLCAwKTsKPgo+IC0JCWNpa19zcmJtX3NlbGVjdChhZGV2LCBtZSwg cGlwZSwgMCwgMCk7Cj4gKwkvKiB3cml0ZSB0aGUgRU9QIGFkZHIgKi8KPiArCVdSRUczMihtbUNQ X0hQRF9FT1BfQkFTRV9BRERSLCBlb3BfZ3B1X2FkZHIgPj4gOCk7Cj4gKwlXUkVHMzIobW1DUF9I UERfRU9QX0JBU0VfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhlb3BfZ3B1X2FkZHIpID4+IDgpOwo+ Cj4gLQkJLyogd3JpdGUgdGhlIEVPUCBhZGRyICovCj4gLQkJV1JFRzMyKG1tQ1BfSFBEX0VPUF9C QVNFX0FERFIsIGVvcF9ncHVfYWRkciA+PiA4KTsKPiAtCQlXUkVHMzIobW1DUF9IUERfRU9QX0JB U0VfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhlb3BfZ3B1X2FkZHIpID4+IDgpOwo+ICsJLyogc2V0 IHRoZSBWTUlEIGFzc2lnbmVkICovCj4gKwlXUkVHMzIobW1DUF9IUERfRU9QX1ZNSUQsIDApOwo+ Cj4gLQkJLyogc2V0IHRoZSBWTUlEIGFzc2lnbmVkICovCj4gLQkJV1JFRzMyKG1tQ1BfSFBEX0VP UF9WTUlELCAwKTsKPiArCS8qIHNldCB0aGUgRU9QIHNpemUsIHJlZ2lzdGVyIHZhbHVlIGlzIDJe KEVPUF9TSVpFKzEpIGR3b3JkcyAqLwo+ICsJdG1wID0gUlJFRzMyKG1tQ1BfSFBEX0VPUF9DT05U Uk9MKTsKPiArCXRtcCAmPSB+Q1BfSFBEX0VPUF9DT05UUk9MX19FT1BfU0laRV9NQVNLOwo+ICsJ dG1wIHw9IG9yZGVyX2Jhc2VfMihHRlg3X01FQ19IUERfU0laRSAvIDgpOwo+ICsJV1JFRzMyKG1t Q1BfSFBEX0VPUF9DT05UUk9MLCB0bXApOwo+Cj4gLQkJLyogc2V0IHRoZSBFT1Agc2l6ZSwgcmVn aXN0ZXIgdmFsdWUgaXMgMl4oRU9QX1NJWkUrMSkgZHdvcmRzICovCj4gLQkJdG1wID0gUlJFRzMy KG1tQ1BfSFBEX0VPUF9DT05UUk9MKTsKPiAtCQl0bXAgJj0gfkNQX0hQRF9FT1BfQ09OVFJPTF9f RU9QX1NJWkVfTUFTSzsKPiAtCQl0bXAgfD0gb3JkZXJfYmFzZV8yKEdGWDdfTUVDX0hQRF9TSVpF IC8gOCk7Cj4gLQkJV1JFRzMyKG1tQ1BfSFBEX0VPUF9DT05UUk9MLCB0bXApOwo+IC0JfQo+ICAJ Y2lrX3NyYm1fc2VsZWN0KGFkZXYsIDAsIDAsIDAsIDApOwo+ICAJbXV0ZXhfdW5sb2NrKCZhZGV2 LT5zcmJtX211dGV4KTsKPiArfQo+Cj4gLQkvKiBpbml0IHRoZSBxdWV1ZXMuICBKdXN0IHR3byBm b3Igbm93LiAqLwo+IC0JZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5n czsgaSsrKSB7Cj4gLQkJcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nW2ldOwo+ICtzdGF0 aWMgaW50IGdmeF92N18wX21xZF9kZWFjdGl2YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+ICt7Cj4gKwlpbnQgaTsKPgo+IC0JCWlmIChyaW5nLT5tcWRfb2JqID09IE5VTEwpIHsKPiAt CQkJciA9IGFtZGdwdV9ib19jcmVhdGUoYWRldiwKPiAtCQkJCQkgICAgIHNpemVvZihzdHJ1Y3Qg Ym9uYWlyZV9tcWQpLAo+IC0JCQkJCSAgICAgUEFHRV9TSVpFLCB0cnVlLAo+IC0JCQkJCSAgICAg QU1ER1BVX0dFTV9ET01BSU5fR1RULCAwLCBOVUxMLCBOVUxMLAo+IC0JCQkJCSAgICAgJnJpbmct Pm1xZF9vYmopOwo+IC0JCQlpZiAocikgewo+IC0JCQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVk KSBjcmVhdGUgTVFEIGJvIGZhaWxlZFxuIiwgcik7Cj4gLQkJCQlyZXR1cm4gcjsKPiAtCQkJfQo+ ICsJLyogZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBhY3RpdmUgKi8KPiArCWlmIChSUkVHMzIo bW1DUF9IUURfQUNUSVZFKSAmIDEpIHsKPiArCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFV RVNULCAxKTsKPiArCQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXNlY190aW1lb3V0OyBpKyspIHsK PiArCQkJaWYgKCEoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSkKPiArCQkJCWJyZWFrOwo+ ICsJCQl1ZGVsYXkoMSk7Cj4gIAkJfQo+Cj4gLQkJciA9IGFtZGdwdV9ib19yZXNlcnZlKHJpbmct Pm1xZF9vYmosIGZhbHNlKTsKPiAtCQlpZiAodW5saWtlbHkociAhPSAwKSkgewo+IC0JCQlnZnhf djdfMF9jcF9jb21wdXRlX2ZpbmkoYWRldik7Cj4gLQkJCXJldHVybiByOwo+IC0JCX0KPiAtCQly ID0gYW1kZ3B1X2JvX3BpbihyaW5nLT5tcWRfb2JqLCBBTURHUFVfR0VNX0RPTUFJTl9HVFQsCj4g LQkJCQkgICZtcWRfZ3B1X2FkZHIpOwo+IC0JCWlmIChyKSB7Cj4gLQkJCWRldl93YXJuKGFkZXYt PmRldiwgIiglZCkgcGluIE1RRCBibyBmYWlsZWRcbiIsIHIpOwo+IC0JCQlnZnhfdjdfMF9jcF9j b21wdXRlX2ZpbmkoYWRldik7Cj4gLQkJCXJldHVybiByOwo+IC0JCX0KPiAtCQlyID0gYW1kZ3B1 X2JvX2ttYXAocmluZy0+bXFkX29iaiwgKHZvaWQgKiopJmJ1Zik7Cj4gLQkJaWYgKHIpIHsKPiAt CQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBtYXAgTVFEIGJvIGZhaWxlZFxuIiwgcik7Cj4g LQkJCWdmeF92N18wX2NwX2NvbXB1dGVfZmluaShhZGV2KTsKPiAtCQkJcmV0dXJuIHI7Cj4gLQkJ fQo+ICsJCWlmIChpID09IGFkZXYtPnVzZWNfdGltZW91dCkKPiArCQkJcmV0dXJuIC1FVElNRURP VVQ7Cj4KPiAtCQkvKiBpbml0IHRoZSBtcWQgc3RydWN0ICovCj4gLQkJbWVtc2V0KGJ1ZiwgMCwg c2l6ZW9mKHN0cnVjdCBib25haXJlX21xZCkpOwo+ICsJCVdSRUczMihtbUNQX0hRRF9ERVFVRVVF X1JFUVVFU1QsIDApOwo+ICsJCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSLCAwKTsKPiArCQlXUkVH MzIobW1DUF9IUURfUFFfV1BUUiwgMCk7Cj4gKwl9Cj4KPiAtCQltcWQgPSAoc3RydWN0IGJvbmFp cmVfbXFkICopYnVmOwo+IC0JCW1xZC0+aGVhZGVyID0gMHhDMDMxMDgwMDsKPiAtCQltcWQtPnN0 YXRpY190aHJlYWRfbWdtdDAxWzBdID0gMHhmZmZmZmZmZjsKPiAtCQltcWQtPnN0YXRpY190aHJl YWRfbWdtdDAxWzFdID0gMHhmZmZmZmZmZjsKPiAtCQltcWQtPnN0YXRpY190aHJlYWRfbWdtdDIz WzBdID0gMHhmZmZmZmZmZjsKPiAtCQltcWQtPnN0YXRpY190aHJlYWRfbWdtdDIzWzFdID0gMHhm ZmZmZmZmZjsKPiArCXJldHVybiAwOwo+ICt9Cj4KPiAtCQltdXRleF9sb2NrKCZhZGV2LT5zcmJt X211dGV4KTsKPiAtCQljaWtfc3JibV9zZWxlY3QoYWRldiwgcmluZy0+bWUsCj4gLQkJCQlyaW5n LT5waXBlLAo+IC0JCQkJcmluZy0+cXVldWUsIDApOwo+ICtzdGF0aWMgdm9pZCBnZnhfdjdfMF9t cWRfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiArCQkJICAgICBzdHJ1Y3QgYm9u YWlyZV9tcWQgKm1xZCwKPiArCQkJICAgICB1aW50NjRfdCBtcWRfZ3B1X2FkZHIsCj4gKwkJCSAg ICAgc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQo+ICt7Cj4gKwl1NjQgaHFkX2dwdV9hZGRyOwo+ ICsJdTY0IHdiX2dwdV9hZGRyOwo+Cj4gLQkJLyogZGlzYWJsZSB3cHRyIHBvbGxpbmcgKi8KPiAt CQl0bXAgPSBSUkVHMzIobW1DUF9QUV9XUFRSX1BPTExfQ05UTCk7Cj4gLQkJdG1wICY9IH5DUF9Q UV9XUFRSX1BPTExfQ05UTF9fRU5fTUFTSzsKPiAtCQlXUkVHMzIobW1DUF9QUV9XUFRSX1BPTExf Q05UTCwgdG1wKTsKPiArCS8qIGluaXQgdGhlIG1xZCBzdHJ1Y3QgKi8KPiArCW1lbXNldChtcWQs IDAsIHNpemVvZihzdHJ1Y3QgYm9uYWlyZV9tcWQpKTsKPgo+IC0JCS8qIGVuYWJsZSBkb29yYmVs bD8gKi8KPiAtCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0K PiAtCQkJUlJFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpOwo+IC0JCWlmICh1c2Vf ZG9vcmJlbGwpCj4gLQkJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRy b2wgfD0gQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX0VOX01BU0s7Cj4gLQkJ ZWxzZQo+IC0JCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sICY9 IH5DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfRU5fTUFTSzsKPiAtCQlXUkVH MzIobW1DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCwKPiAtCQkgICAgICAgbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCk7Cj4gLQo+IC0JCS8qIGRpc2FibGUgdGhl IHF1ZXVlIGlmIGl0J3MgYWN0aXZlICovCj4gLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfZGVx dWV1ZV9yZXF1ZXN0ID0gMDsKPiAtCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9ycHRyID0g MDsKPiAtCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyPSAwOwo+IC0JCWlmIChSUkVH MzIobW1DUF9IUURfQUNUSVZFKSAmIDEpIHsKPiAtCQkJV1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVf UkVRVUVTVCwgMSk7Cj4gLQkJCWZvciAoaiA9IDA7IGogPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGor Kykgewo+IC0JCQkJaWYgKCEoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSkKPiAtCQkJCQli cmVhazsKPiAtCQkJCXVkZWxheSgxKTsKPiAtCQkJfQo+IC0JCQlXUkVHMzIobW1DUF9IUURfREVR VUVVRV9SRVFVRVNULCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9kZXF1ZXVlX3JlcXVlc3QpOwo+ IC0JCQlXUkVHMzIobW1DUF9IUURfUFFfUlBUUiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFf cnB0cik7Cj4gLQkJCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV93cHRyKTsKPiAtCQl9Cj4gKwltcWQtPmhlYWRlciA9IDB4QzAzMTA4MDA7Cj4gKwlt cWQtPnN0YXRpY190aHJlYWRfbWdtdDAxWzBdID0gMHhmZmZmZmZmZjsKPiArCW1xZC0+c3RhdGlj X3RocmVhZF9tZ210MDFbMV0gPSAweGZmZmZmZmZmOwo+ICsJbXFkLT5zdGF0aWNfdGhyZWFkX21n bXQyM1swXSA9IDB4ZmZmZmZmZmY7Cj4gKwltcWQtPnN0YXRpY190aHJlYWRfbWdtdDIzWzFdID0g MHhmZmZmZmZmZjsKPgo+IC0JCS8qIHNldCB0aGUgcG9pbnRlciB0byB0aGUgTVFEICovCj4gLQkJ bXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRyID0gbXFkX2dwdV9hZGRyICYgMHhmZmZm ZmZmYzsKPiAtCQltcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHJfaGkgPSB1cHBlcl8z Ml9iaXRzKG1xZF9ncHVfYWRkcik7Cj4gLQkJV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUiwgbXFk LT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRyKTsKPiAtCQlXUkVHMzIobW1DUF9NUURfQkFT RV9BRERSX0hJLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHJfaGkpOwo+IC0JCS8q IHNldCBNUUQgdm1pZCB0byAwICovCj4gLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfY29udHJv bCA9IFJSRUczMihtbUNQX01RRF9DT05UUk9MKTsKPiAtCQltcWQtPnF1ZXVlX3N0YXRlLmNwX21x ZF9jb250cm9sICY9IH5DUF9NUURfQ09OVFJPTF9fVk1JRF9NQVNLOwo+IC0JCVdSRUczMihtbUNQ X01RRF9DT05UUk9MLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9jb250cm9sKTsKPiAtCj4gLQkJ Lyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciBDUF9SQjBfQkFT RS9fSEkgKi8KPiAtCQlocWRfZ3B1X2FkZHIgPSByaW5nLT5ncHVfYWRkciA+PiA4Owo+IC0JCW1x ZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Jhc2UgPSBocWRfZ3B1X2FkZHI7Cj4gLQkJbXFkLT5x dWV1ZV9zdGF0ZS5jcF9ocWRfcHFfYmFzZV9oaSA9IHVwcGVyXzMyX2JpdHMoaHFkX2dwdV9hZGRy KTsKPiAtCQlXUkVHMzIobW1DUF9IUURfUFFfQkFTRSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfYmFzZSk7Cj4gLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0VfSEksIG1xZC0+cXVldWVfc3Rh dGUuY3BfaHFkX3BxX2Jhc2VfaGkpOwo+IC0KPiAtCQkvKiBzZXQgdXAgdGhlIEhRRCwgdGhpcyBp cyBzaW1pbGFyIHRvIENQX1JCMF9DTlRMICovCj4gLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfY29udHJvbCA9IFJSRUczMihtbUNQX0hRRF9QUV9DT05UUk9MKTsKPiAtCQltcWQtPnF1ZXVl X3N0YXRlLmNwX2hxZF9wcV9jb250cm9sICY9Cj4gLQkJCX4oQ1BfSFFEX1BRX0NPTlRST0xfX1FV RVVFX1NJWkVfTUFTSyB8Cj4gLQkJCQkJQ1BfSFFEX1BRX0NPTlRST0xfX1JQVFJfQkxPQ0tfU0la RV9NQVNLKTsKPiAtCj4gLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQo+ IC0JCQlvcmRlcl9iYXNlXzIocmluZy0+cmluZ19zaXplIC8gOCk7Cj4gLQkJbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQo+IC0JCQkob3JkZXJfYmFzZV8yKEFNREdQVV9HUFVf UEFHRV9TSVpFLzgpIDw8IDgpOwo+ICsJLyogZW5hYmxlIGRvb3JiZWxsPyAqLwo+ICsJbXFkLT5x dWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9Cj4gKwkJUlJFRzMyKG1tQ1Bf SFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpOwo+ICsJaWYgKHJpbmctPnVzZV9kb29yYmVsbCkKPiAr CQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sIHw9IENQX0hRRF9Q UV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9FTl9NQVNLOwo+ICsJZWxzZQo+ICsJCW1xZC0+ cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgJj0gfkNQX0hRRF9QUV9ET09S QkVMTF9DT05UUk9MX19ET09SQkVMTF9FTl9NQVNLOwo+ICsKPiArCS8qIHNldCB0aGUgcG9pbnRl ciB0byB0aGUgTVFEICovCj4gKwltcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHIgPSBt cWRfZ3B1X2FkZHIgJiAweGZmZmZmZmZjOwo+ICsJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFz ZV9hZGRyX2hpID0gdXBwZXJfMzJfYml0cyhtcWRfZ3B1X2FkZHIpOwo+ICsKPiArCS8qIHNldCBN UUQgdm1pZCB0byAwICovCj4gKwltcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9jb250cm9sID0gUlJF RzMyKG1tQ1BfTVFEX0NPTlRST0wpOwo+ICsJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfY29udHJv bCAmPSB+Q1BfTVFEX0NPTlRST0xfX1ZNSURfTUFTSzsKPiArCj4gKwkvKiBzZXQgdGhlIHBvaW50 ZXIgdG8gdGhlIEhRRCwgdGhpcyBpcyBzaW1pbGFyIENQX1JCMF9CQVNFL19ISSAqLwo+ICsJaHFk X2dwdV9hZGRyID0gcmluZy0+Z3B1X2FkZHIgPj4gODsKPiArCW1xZC0+cXVldWVfc3RhdGUuY3Bf aHFkX3BxX2Jhc2UgPSBocWRfZ3B1X2FkZHI7Cj4gKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV9iYXNlX2hpID0gdXBwZXJfMzJfYml0cyhocWRfZ3B1X2FkZHIpOwo+ICsKPiArCS8qIHNldCB1 cCB0aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgdG8gQ1BfUkIwX0NOVEwgKi8KPiArCW1xZC0+cXVl dWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgPSBSUkVHMzIobW1DUF9IUURfUFFfQ09OVFJPTCk7 Cj4gKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sICY9Cj4gKwkJfihDUF9IUURf UFFfQ09OVFJPTF9fUVVFVUVfU0laRV9NQVNLIHwKPiArCQkJCUNQX0hRRF9QUV9DT05UUk9MX19S UFRSX0JMT0NLX1NJWkVfTUFTSyk7Cj4gKwo+ICsJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFf Y29udHJvbCB8PQo+ICsJCW9yZGVyX2Jhc2VfMihyaW5nLT5yaW5nX3NpemUgLyA4KTsKPiArCW1x ZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgfD0KPiArCQkob3JkZXJfYmFzZV8yKEFN REdQVV9HUFVfUEFHRV9TSVpFLzgpIDw8IDgpOwo+ICAjaWZkZWYgX19CSUdfRU5ESUFOCj4gLQkJ bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQo+IC0JCQkyIDw8IENQX0hRRF9Q UV9DT05UUk9MX19FTkRJQU5fU1dBUF9fU0hJRlQ7Cj4gKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hx ZF9wcV9jb250cm9sIHw9Cj4gKwkJMiA8PCBDUF9IUURfUFFfQ09OVFJPTF9fRU5ESUFOX1NXQVBf X1NISUZUOwo+ICAjZW5kaWYKPiAtCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9s ICY9Cj4gLQkJCX4oQ1BfSFFEX1BRX0NPTlRST0xfX1VOT1JEX0RJU1BBVENIX01BU0sgfAo+ICsJ bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCAmPQo+ICsJCX4oQ1BfSFFEX1BRX0NP TlRST0xfX1VOT1JEX0RJU1BBVENIX01BU0sgfAo+ICAJCQkJQ1BfSFFEX1BRX0NPTlRST0xfX1JP UV9QUV9JQl9GTElQX01BU0sgfAo+ICAJCQkJQ1BfSFFEX1BRX0NPTlRST0xfX1BRX1ZPTEFUSUxF X01BU0spOwo+IC0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgfD0KPiAtCQkJ Q1BfSFFEX1BRX0NPTlRST0xfX1BSSVZfU1RBVEVfTUFTSyB8Cj4gLQkJCUNQX0hRRF9QUV9DT05U Uk9MX19LTURfUVVFVUVfTUFTSzsgLyogYXNzdW1pbmcga2VybmVsIHF1ZXVlIGNvbnRyb2wgKi8K PiAtCQlXUkVHMzIobW1DUF9IUURfUFFfQ09OVFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfY29udHJvbCk7Cj4gLQo+IC0JCS8qIG9ubHkgdXNlZCBpZiBDUF9QUV9XUFRSX1BPTExfQ05U TC5DUF9QUV9XUFRSX1BPTExfQ05UTF9fRU5fTUFTSz0xICovCj4gLQkJd2JfZ3B1X2FkZHIgPSBh ZGV2LT53Yi5ncHVfYWRkciArIChyaW5nLT53cHRyX29mZnMgKiA0KTsKPiAtCQltcWQtPnF1ZXVl X3N0YXRlLmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkciA9IHdiX2dwdV9hZGRyICYgMHhmZmZmZmZm YzsKPiAtCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9oaSA9IHVw cGVyXzMyX2JpdHMod2JfZ3B1X2FkZHIpICYgMHhmZmZmOwo+IC0JCVdSRUczMihtbUNQX0hRRF9Q UV9XUFRSX1BPTExfQUREUiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9wb2xsX2Fk ZHIpOwo+IC0JCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSX1BPTExfQUREUl9ISSwKPiAtCQkgICAg ICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHJfaGkpOwo+IC0KPiAt CQkvKiBzZXQgdGhlIHdiIGFkZHJlc3Mgd2V0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgKi8KPiAt CQl3Yl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRyICsgKHJpbmctPnJwdHJfb2ZmcyAqIDQp Owo+IC0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3JwdHJfcmVwb3J0X2FkZHIgPSB3Yl9n cHVfYWRkciAmIDB4ZmZmZmZmZmM7Cj4gLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0 cl9yZXBvcnRfYWRkcl9oaSA9Cj4gLQkJCXVwcGVyXzMyX2JpdHMod2JfZ3B1X2FkZHIpICYgMHhm ZmZmOwo+IC0JCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSX1JFUE9SVF9BRERSLAo+IC0JCSAgICAg ICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyKTsKPiAtCQlXUkVH MzIobW1DUF9IUURfUFFfUlBUUl9SRVBPUlRfQUREUl9ISSwKPiAtCQkgICAgICAgbXFkLT5xdWV1 ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcl9oaSk7Cj4gLQo+IC0JCS8qIGVuYWJs ZSB0aGUgZG9vcmJlbGwgaWYgcmVxdWVzdGVkICovCj4gLQkJaWYgKHVzZV9kb29yYmVsbCkgewo+ IC0JCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0KPiAtCQkJ CVJSRUczMihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MKTsKPiAtCQkJbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCAmPQo+IC0JCQkJfkNQX0hRRF9QUV9ET09S QkVMTF9DT05UUk9MX19ET09SQkVMTF9PRkZTRVRfTUFTSzsKPiAtCQkJbXFkLT5xdWV1ZV9zdGF0 ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCB8PQo+IC0JCQkJKHJpbmctPmRvb3JiZWxsX2lu ZGV4IDw8Cj4gLQkJCQkgQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX09GRlNF VF9fU0hJRlQpOwo+IC0JCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250 cm9sIHw9Cj4gLQkJCQlDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfRU5fTUFT SzsKPiAtCQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCAmPQo+ IC0JCQkJfihDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfU09VUkNFX01BU0sg fAo+IC0JCQkJQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX0hJVF9NQVNLKTsK PiArCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgfD0KPiArCQlDUF9IUURfUFFf Q09OVFJPTF9fUFJJVl9TVEFURV9NQVNLIHwKPiArCQlDUF9IUURfUFFfQ09OVFJPTF9fS01EX1FV RVVFX01BU0s7IC8qIGFzc3VtaW5nIGtlcm5lbCBxdWV1ZSBjb250cm9sICovCj4KPiAtCQl9IGVs c2Ugewo+IC0JCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0g MDsKPiArCS8qIG9ubHkgdXNlZCBpZiBDUF9QUV9XUFRSX1BPTExfQ05UTC5DUF9QUV9XUFRSX1BP TExfQ05UTF9fRU5fTUFTSz0xICovCj4gKwl3Yl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRy ICsgKHJpbmctPndwdHJfb2ZmcyAqIDQpOwo+ICsJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFf d3B0cl9wb2xsX2FkZHIgPSB3Yl9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Cj4gKwltcWQtPnF1ZXVl X3N0YXRlLmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMod2JfZ3B1 X2FkZHIpICYgMHhmZmZmOwo+ICsKPiArCS8qIHNldCB0aGUgd2IgYWRkcmVzcyB3ZXRoZXIgaXQn cyBlbmFibGVkIG9yIG5vdCAqLwo+ICsJd2JfZ3B1X2FkZHIgPSBhZGV2LT53Yi5ncHVfYWRkciAr IChyaW5nLT5ycHRyX29mZnMgKiA0KTsKPiArCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3Jw dHJfcmVwb3J0X2FkZHIgPSB3Yl9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Cj4gKwltcWQtPnF1ZXVl X3N0YXRlLmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2hpID0KPiArCQl1cHBlcl8zMl9iaXRz KHdiX2dwdV9hZGRyKSAmIDB4ZmZmZjsKPiArCj4gKwkvKiBlbmFibGUgdGhlIGRvb3JiZWxsIGlm IHJlcXVlc3RlZCAqLwo+ICsJaWYgKHJpbmctPnVzZV9kb29yYmVsbCkgewo+ICsJCW1xZC0+cXVl dWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgPQo+ICsJCQlSUkVHMzIobW1DUF9I UURfUFFfRE9PUkJFTExfQ09OVFJPTCk7Cj4gKwkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFf ZG9vcmJlbGxfY29udHJvbCAmPQo+ICsJCQl+Q1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0xfX0RP T1JCRUxMX09GRlNFVF9NQVNLOwo+ICsJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3Ji ZWxsX2NvbnRyb2wgfD0KPiArCQkJKHJpbmctPmRvb3JiZWxsX2luZGV4IDw8Cj4gKwkJCSBDUF9I UURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfT0ZGU0VUX19TSElGVCk7Cj4gKwkJbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCB8PQo+ICsJCQlDUF9IUURf UFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfRU5fTUFTSzsKPiArCQltcWQtPnF1ZXVlX3N0 YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sICY9Cj4gKwkJCX4oQ1BfSFFEX1BRX0RPT1JC RUxMX0NPTlRST0xfX0RPT1JCRUxMX1NPVVJDRV9NQVNLIHwKPiArCQkJCQlDUF9IUURfUFFfRE9P UkJFTExfQ09OVFJPTF9fRE9PUkJFTExfSElUX01BU0spOwo+ICsKPiArCX0gZWxzZSB7Cj4gKwkJ bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9IDA7Cj4gKwl9Cj4g Kwo+ICsJLyogcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMsIHNpbWlsYXIgdG8gQ1BfUkIwX1dQVFIv X1JQVFIgKi8KPiArCXJpbmctPndwdHIgPSAwOwo+ICsJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfd3B0ciA9IGxvd2VyXzMyX2JpdHMocmluZy0+d3B0cik7Cj4gKwltcWQtPnF1ZXVlX3N0YXRl LmNwX2hxZF9wcV9ycHRyID0gUlJFRzMyKG1tQ1BfSFFEX1BRX1JQVFIpOwo+ICsKPiArCS8qIHNl dCB0aGUgdm1pZCBmb3IgdGhlIHF1ZXVlICovCj4gKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF92 bWlkID0gMDsKPiArCj4gKwkvKiBhY3RpdmF0ZSB0aGUgcXVldWUgKi8KPiArCW1xZC0+cXVldWVf c3RhdGUuY3BfaHFkX2FjdGl2ZSA9IDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ2Z4X3Y3XzBf bXFkX2NvbW1pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiArCQkJICAgICAgIHN0cnVj dCBib25haXJlX21xZCAqbXFkKQo+ICt7Cj4gKwl1MzIgdG1wOwo+ICsKPiArCS8qIGRpc2FibGUg d3B0ciBwb2xsaW5nICovCj4gKwl0bXAgPSBSUkVHMzIobW1DUF9QUV9XUFRSX1BPTExfQ05UTCk7 Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfUFFfV1BUUl9QT0xMX0NOVEwsIEVOLCAw KTsKPiArCVdSRUczMihtbUNQX1BRX1dQVFJfUE9MTF9DTlRMLCB0bXApOwo+ICsKPiArCS8qIHBy b2dyYW0gTVFEIGZpZWxkIHRvIEhXICovCj4gKwlXUkVHMzIobW1DUF9NUURfQkFTRV9BRERSLCBt cWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHIpOwo+ICsJV1JFRzMyKG1tQ1BfTVFEX0JB U0VfQUREUl9ISSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRyX2hpKTsKPiArCVdS RUczMihtbUNQX01RRF9DT05UUk9MLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9jb250cm9sKTsK PiArCVdSRUczMihtbUNQX0hRRF9QUV9CQVNFLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9i YXNlKTsKPiArCVdSRUczMihtbUNQX0hRRF9QUV9CQVNFX0hJLCBtcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV9iYXNlX2hpKTsKPiArCVdSRUczMihtbUNQX0hRRF9QUV9DT05UUk9MLCBtcWQtPnF1 ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sKTsKPiArCVdSRUczMihtbUNQX0hRRF9QUV9XUFRS X1BPTExfQUREUiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHIpOwo+ ICsJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSX0hJLCBtcWQtPnF1ZXVlX3N0YXRl LmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9oaSk7Cj4gKwlXUkVHMzIobW1DUF9IUURfUFFfUlBU Ul9SRVBPUlRfQUREUiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRk cik7Cj4gKwlXUkVHMzIobW1DUF9IUURfUFFfUlBUUl9SRVBPUlRfQUREUl9ISSwgbXFkLT5xdWV1 ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcl9oaSk7Cj4gKwlXUkVHMzIobW1DUF9I UURfUFFfRE9PUkJFTExfQ09OVFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJl bGxfY29udHJvbCk7Cj4gKwlXUkVHMzIobW1DUF9IUURfUFFfV1BUUiwgbXFkLT5xdWV1ZV9zdGF0 ZS5jcF9ocWRfcHFfd3B0cik7Cj4gKwlXUkVHMzIobW1DUF9IUURfVk1JRCwgbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfdm1pZCk7Cj4gKwo+ICsJLyogYWN0aXZhdGUgdGhlIEhRRCAqLwo+ICsJV1JF RzMyKG1tQ1BfSFFEX0FDVElWRSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfYWN0aXZlKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZnhfdjdfMF9jb21wdXRlX3F1 ZXVlX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGludCByaW5nX2lkKQo+ICt7Cj4g KwlpbnQgcjsKPiArCXU2NCBtcWRfZ3B1X2FkZHI7Cj4gKwlzdHJ1Y3QgYm9uYWlyZV9tcWQgKm1x ZDsKPiArCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5n W3JpbmdfaWRdOwo+ICsKPiArCWlmIChyaW5nLT5tcWRfb2JqID09IE5VTEwpIHsKPiArCQlyID0g YW1kZ3B1X2JvX2NyZWF0ZShhZGV2LAo+ICsJCQkJc2l6ZW9mKHN0cnVjdCBib25haXJlX21xZCks Cj4gKwkJCQlQQUdFX1NJWkUsIHRydWUsCj4gKwkJCQlBTURHUFVfR0VNX0RPTUFJTl9HVFQsIDAs IE5VTEwsIE5VTEwsCj4gKwkJCQkmcmluZy0+bXFkX29iaik7Cj4gKwkJaWYgKHIpIHsKPiArCQkJ ZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBjcmVhdGUgTVFEIGJvIGZhaWxlZFxuIiwgcik7Cj4g KwkJCXJldHVybiByOwo+ICAJCX0KPiAtCQlXUkVHMzIobW1DUF9IUURfUFFfRE9PUkJFTExfQ09O VFJPTCwKPiAtCQkgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29u dHJvbCk7Cj4gKwl9Cj4KPiAtCQkvKiByZWFkIGFuZCB3cml0ZSBwb2ludGVycywgc2ltaWxhciB0 byBDUF9SQjBfV1BUUi9fUlBUUiAqLwo+IC0JCXJpbmctPndwdHIgPSAwOwo+IC0JCW1xZC0+cXVl dWVfc3RhdGUuY3BfaHFkX3BxX3dwdHIgPSBsb3dlcl8zMl9iaXRzKHJpbmctPndwdHIpOwo+IC0J CVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRy KTsKPiAtCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9ycHRyID0gUlJFRzMyKG1tQ1BfSFFE X1BRX1JQVFIpOwo+ICsJciA9IGFtZGdwdV9ib19yZXNlcnZlKHJpbmctPm1xZF9vYmosIGZhbHNl KTsKPiArCWlmICh1bmxpa2VseShyICE9IDApKQo+ICsJCWdvdG8gb3V0Owo+Cj4gLQkJLyogc2V0 IHRoZSB2bWlkIGZvciB0aGUgcXVldWUgKi8KPiAtCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF92 bWlkID0gMDsKPiAtCQlXUkVHMzIobW1DUF9IUURfVk1JRCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9o cWRfdm1pZCk7Cj4gKwlyID0gYW1kZ3B1X2JvX3BpbihyaW5nLT5tcWRfb2JqLCBBTURHUFVfR0VN X0RPTUFJTl9HVFQsCj4gKwkJCSZtcWRfZ3B1X2FkZHIpOwo+ICsJaWYgKHIpIHsKPiArCQlkZXZf d2FybihhZGV2LT5kZXYsICIoJWQpIHBpbiBNUUQgYm8gZmFpbGVkXG4iLCByKTsKPiArCQlnb3Rv IG91dF91bnJlc2VydmU7Cj4gKwl9Cj4gKwlyID0gYW1kZ3B1X2JvX2ttYXAocmluZy0+bXFkX29i aiwgKHZvaWQgKiopJm1xZCk7Cj4gKwlpZiAocikgewo+ICsJCWRldl93YXJuKGFkZXYtPmRldiwg IiglZCkgbWFwIE1RRCBibyBmYWlsZWRcbiIsIHIpOwo+ICsJCWdvdG8gb3V0X3VucmVzZXJ2ZTsK PiArCX0KPgo+IC0JCS8qIGFjdGl2YXRlIHRoZSBxdWV1ZSAqLwo+IC0JCW1xZC0+cXVldWVfc3Rh dGUuY3BfaHFkX2FjdGl2ZSA9IDE7Cj4gLQkJV1JFRzMyKG1tQ1BfSFFEX0FDVElWRSwgbXFkLT5x dWV1ZV9zdGF0ZS5jcF9ocWRfYWN0aXZlKTsKPiArCW11dGV4X2xvY2soJmFkZXYtPnNyYm1fbXV0 ZXgpOwo+ICsJY2lrX3NyYm1fc2VsZWN0KGFkZXYsIHJpbmctPm1lLCByaW5nLT5waXBlLCByaW5n LT5xdWV1ZSwgMCk7Cj4KPiAtCQljaWtfc3JibV9zZWxlY3QoYWRldiwgMCwgMCwgMCwgMCk7Cj4g LQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKPiArCWdmeF92N18wX21xZF9pbml0 KGFkZXYsIG1xZCwgbXFkX2dwdV9hZGRyLCByaW5nKTsKPiArCWdmeF92N18wX21xZF9kZWFjdGl2 YXRlKGFkZXYpOwo+ICsJZ2Z4X3Y3XzBfbXFkX2NvbW1pdChhZGV2LCBtcWQpOwo+Cj4gLQkJYW1k Z3B1X2JvX2t1bm1hcChyaW5nLT5tcWRfb2JqKTsKPiAtCQlhbWRncHVfYm9fdW5yZXNlcnZlKHJp bmctPm1xZF9vYmopOwo+ICsJY2lrX3NyYm1fc2VsZWN0KGFkZXYsIDAsIDAsIDAsIDApOwo+ICsJ bXV0ZXhfdW5sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKPgo+IC0JCXJpbmctPnJlYWR5ID0gdHJ1 ZTsKPiArCWFtZGdwdV9ib19rdW5tYXAocmluZy0+bXFkX29iaik7Cj4gK291dF91bnJlc2VydmU6 Cj4gKwlhbWRncHVfYm9fdW5yZXNlcnZlKHJpbmctPm1xZF9vYmopOwo+ICtvdXQ6Cj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGdmeF92N18wX2NwX2NvbXB1dGVfcmVzdW1lIC0g c2V0dXAgdGhlIGNvbXB1dGUgcXVldWUgcmVnaXN0ZXJzCj4gKyAqCj4gKyAqIEBhZGV2OiBhbWRn cHVfZGV2aWNlIHBvaW50ZXIKPiArICoKPiArICogUHJvZ3JhbSB0aGUgY29tcHV0ZSBxdWV1ZXMg YW5kIHRlc3QgdGhlbSB0byBtYWtlIHN1cmUgdGhleQo+ICsgKiBhcmUgd29ya2luZy4KPiArICog UmV0dXJucyAwIGZvciBzdWNjZXNzLCBlcnJvciBmb3IgZmFpbHVyZS4KPiArICovCj4gK3N0YXRp YyBpbnQgZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9yZXN1bWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCj4gK3sKPiArCWludCByLCBpLCBqOwo+ICsJdTMyIHRtcDsKPiArCXN0cnVjdCBhbWRncHVf cmluZyAqcmluZzsKPiArCj4gKwkvKiBmaXggdXAgY2hpY2tlbiBiaXRzICovCj4gKwl0bXAgPSBS UkVHMzIobW1DUF9DUEZfREVCVUcpOwo+ICsJdG1wIHw9ICgxIDw8IDIzKTsKPiArCVdSRUczMiht bUNQX0NQRl9ERUJVRywgdG1wKTsKPiArCj4gKwkvKiBpbml0IHRoZSBwaXBlcyAqLwo+ICsJZm9y IChpID0gMDsgaSA8IGFkZXYtPmdmeC5tZWMubnVtX21lYzsgaSsrKQo+ICsJCWZvciAoaiA9IDA7 IGogPCBhZGV2LT5nZngubWVjLm51bV9waXBlOyBqKyspCj4gKwkJCWdmeF92N18wX2NvbXB1dGVf cGlwZV9pbml0KGFkZXYsIGksIGopOwo+ICsKPiArCS8qIGluaXQgdGhlIHF1ZXVlcyAqLwo+ICsJ Zm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5nczsgaSsrKSB7Cj4gKwkJ ciA9IGdmeF92N18wX2NvbXB1dGVfcXVldWVfaW5pdChhZGV2LCBpKTsKPiArCQlpZiAocikgewo+ ICsJCQlnZnhfdjdfMF9jcF9jb21wdXRlX2ZpbmkoYWRldik7Cj4gKwkJCXJldHVybiByOwo+ICsJ CX0KPiAgCX0KPgo+ICAJZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9lbmFibGUoYWRldiwgdHJ1ZSk7Cj4K PiAgCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3M7IGkrKykgewo+ ICAJCXJpbmcgPSAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tpXTsKPiAtCj4gKwkJcmluZy0+cmVh ZHkgPSB0cnVlOwo+ICAJCXIgPSBhbWRncHVfcmluZ190ZXN0X3JpbmcocmluZyk7Cj4gIAkJaWYg KHIpCj4gIAkJCXJpbmctPnJlYWR5ID0gZmFsc2U7Cj4gIAl9Cj4KPiAgCXJldHVybiAwOwo+ICB9 Cj4KPiAgc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfY3BfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LCBib29sIGVuYWJsZSkKPiAgewo+ICAJZ2Z4X3Y3XzBfY3BfZ2Z4X2VuYWJsZShhZGV2 LCBlbmFibGUpOwo+ICAJZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9lbmFibGUoYWRldiwgZW5hYmxlKTsK PiAgfQo+Cj4gIHN0YXRpYyBpbnQgZ2Z4X3Y3XzBfY3BfbG9hZF9taWNyb2NvZGUoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCj4gIHsKPiAgCWludCByOwo+Cj4gIAlyID0gZ2Z4X3Y3XzBfY3Bf Z2Z4X2xvYWRfbWljcm9jb2RlKGFkZXYpOwo+ICAJaWYgKHIpCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9nZnhfdjhfMC5jCj4gaW5kZXggZmM5NGMzYS4uYjY3MDMwMiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhfMC5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvZ2Z4X3Y4XzAuYwo+IEBAIC00NzM1LDc5ICs0NzM1LDk4IEBAIHN0YXRp YyBpbnQgZ2Z4X3Y4XzBfa2lxX2tjcV9kaXNhYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+ICAJYW1kZ3B1X3Jpbmdfd3JpdGUoa2lxX3JpbmcsIChzY3JhdGNoIC0gUEFDS0VUM19TRVRf VUNPTkZJR19SRUdfU1RBUlQpKTsKPiAgCWFtZGdwdV9yaW5nX3dyaXRlKGtpcV9yaW5nLCAweERF QURCRUVGKTsKPiAgCWFtZGdwdV9yaW5nX2NvbW1pdChraXFfcmluZyk7Cj4KPiAgCWZvciAoaSA9 IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewo+ICAJCXRtcCA9IFJSRUczMihzY3Jh dGNoKTsKPiAgCQlpZiAodG1wID09IDB4REVBREJFRUYpCj4gIAkJCWJyZWFrOwo+ICAJCURSTV9V REVMQVkoMSk7Cj4gIAl9Cj4gIAlpZiAoaSA+PSBhZGV2LT51c2VjX3RpbWVvdXQpIHsKPiAgCQlE Uk1fRVJST1IoIktDUSBlbmFibGUgZmFpbGVkIChzY3JhdGNoKDB4JTA0WCk9MHglMDhYKVxuIiwK PiAgCQkJICBzY3JhdGNoLCB0bXApOwo+ICAJCXIgPSAtRUlOVkFMOwo+ICAJfQo+ICAJYW1kZ3B1 X2dmeF9zY3JhdGNoX2ZyZWUoYWRldiwgc2NyYXRjaCk7Cj4KPiAgCXJldHVybiByOwo+ICB9Cj4K PiArc3RhdGljIGludCBnZnhfdjhfMF9kZWFjdGl2YXRlX2hxZChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwgdTMyIHJlcSkKPiArewo+ICsJaW50IGksIHIgPSAwOwo+ICsKPiArCWlmIChSUkVH MzIobW1DUF9IUURfQUNUSVZFKSAmIENQX0hRRF9BQ1RJVkVfX0FDVElWRV9NQVNLKSB7Cj4gKwkJ V1JFRzMyX0ZJRUxEKENQX0hRRF9ERVFVRVVFX1JFUVVFU1QsIERFUVVFVUVfUkVRLCByZXEpOwo+ ICsJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewo+ICsJCQlpZiAo IShSUkVHMzIobW1DUF9IUURfQUNUSVZFKSAmIENQX0hRRF9BQ1RJVkVfX0FDVElWRV9NQVNLKSkK PiArCQkJCWJyZWFrOwo+ICsJCQl1ZGVsYXkoMSk7Cj4gKwkJfQo+ICsJCWlmIChpID09IGFkZXYt PnVzZWNfdGltZW91dCkKPiArCQkJciA9IC1FVElNRURPVVQ7Cj4gKwl9Cj4gKwlXUkVHMzIobW1D UF9IUURfREVRVUVVRV9SRVFVRVNULCAwKTsKPiArCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSLCAw KTsKPiArCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCAwKTsKPiArCj4gKwlyZXR1cm4gcjsKPiAr fQo+ICsKPiAgc3RhdGljIGludCBnZnhfdjhfMF9tcWRfaW5pdChzdHJ1Y3QgYW1kZ3B1X3Jpbmcg KnJpbmcpCj4gIHsKPiAgCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsK PiAgCXN0cnVjdCB2aV9tcWQgKm1xZCA9IHJpbmctPm1xZF9wdHI7Cj4gIAl1aW50NjRfdCBocWRf Z3B1X2FkZHIsIHdiX2dwdV9hZGRyLCBlb3BfYmFzZV9hZGRyOwo+ICAJdWludDMyX3QgdG1wOwo+ Cj4gKwkvKiBpbml0IHRoZSBtcWQgc3RydWN0ICovCj4gKwltZW1zZXQobXFkLCAwLCBzaXplb2Yo c3RydWN0IHZpX21xZCkpOwo+ICsKPiAgCW1xZC0+aGVhZGVyID0gMHhDMDMxMDgwMDsKPiAgCW1x ZC0+Y29tcHV0ZV9waXBlbGluZXN0YXRfZW5hYmxlID0gMHgwMDAwMDAwMTsKPiAgCW1xZC0+Y29t cHV0ZV9zdGF0aWNfdGhyZWFkX21nbXRfc2UwID0gMHhmZmZmZmZmZjsKPiAgCW1xZC0+Y29tcHV0 ZV9zdGF0aWNfdGhyZWFkX21nbXRfc2UxID0gMHhmZmZmZmZmZjsKPiAgCW1xZC0+Y29tcHV0ZV9z dGF0aWNfdGhyZWFkX21nbXRfc2UyID0gMHhmZmZmZmZmZjsKPiAgCW1xZC0+Y29tcHV0ZV9zdGF0 aWNfdGhyZWFkX21nbXRfc2UzID0gMHhmZmZmZmZmZjsKPiAgCW1xZC0+Y29tcHV0ZV9taXNjX3Jl c2VydmVkID0gMHgwMDAwMDAwMzsKPgo+ICAJZW9wX2Jhc2VfYWRkciA9IHJpbmctPmVvcF9ncHVf YWRkciA+PiA4Owo+ICAJbXFkLT5jcF9ocWRfZW9wX2Jhc2VfYWRkcl9sbyA9IGVvcF9iYXNlX2Fk ZHI7Cj4gIAltcWQtPmNwX2hxZF9lb3BfYmFzZV9hZGRyX2hpID0gdXBwZXJfMzJfYml0cyhlb3Bf YmFzZV9hZGRyKTsKPgo+ICAJLyogc2V0IHRoZSBFT1Agc2l6ZSwgcmVnaXN0ZXIgdmFsdWUgaXMg Ml4oRU9QX1NJWkUrMSkgZHdvcmRzICovCj4gIAl0bXAgPSBSUkVHMzIobW1DUF9IUURfRU9QX0NP TlRST0wpOwo+ICAJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9FT1BfQ09OVFJPTCwg RU9QX1NJWkUsCj4gIAkJCShvcmRlcl9iYXNlXzIoR0ZYOF9NRUNfSFBEX1NJWkUgLyA0KSAtIDEp KTsKPgo+ICAJbXFkLT5jcF9ocWRfZW9wX2NvbnRyb2wgPSB0bXA7Cj4KPiAgCS8qIGVuYWJsZSBk b29yYmVsbD8gKi8KPiAgCXRtcCA9IFJFR19TRVRfRklFTEQoUlJFRzMyKG1tQ1BfSFFEX1BRX0RP T1JCRUxMX0NPTlRST0wpLAo+ICAJCQkgICAgQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsCj4g IAkJCSAgICBET09SQkVMTF9FTiwKPiAgCQkJICAgIHJpbmctPnVzZV9kb29yYmVsbCA/IDEgOiAw KTsKPgo+ICAJbXFkLT5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9IHRtcDsKPgo+IC0JLyog ZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBhY3RpdmUgKi8KPiAtCW1xZC0+Y3BfaHFkX2RlcXVl dWVfcmVxdWVzdCA9IDA7Cj4gLQltcWQtPmNwX2hxZF9wcV9ycHRyID0gMDsKPiAtCW1xZC0+Y3Bf aHFkX3BxX3dwdHIgPSAwOwo+IC0KPiAgCS8qIHNldCB0aGUgcG9pbnRlciB0byB0aGUgTVFEICov Cj4gIAltcWQtPmNwX21xZF9iYXNlX2FkZHJfbG8gPSByaW5nLT5tcWRfZ3B1X2FkZHIgJiAweGZm ZmZmZmZjOwo+ICAJbXFkLT5jcF9tcWRfYmFzZV9hZGRyX2hpID0gdXBwZXJfMzJfYml0cyhyaW5n LT5tcWRfZ3B1X2FkZHIpOwo+Cj4gIAkvKiBzZXQgTVFEIHZtaWQgdG8gMCAqLwo+ICAJdG1wID0g UlJFRzMyKG1tQ1BfTVFEX0NPTlRST0wpOwo+ICAJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQ X01RRF9DT05UUk9MLCBWTUlELCAwKTsKPiAgCW1xZC0+Y3BfbXFkX2NvbnRyb2wgPSB0bXA7Cj4K PiAgCS8qIHNldCB0aGUgcG9pbnRlciB0byB0aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgQ1BfUkIw X0JBU0UvX0hJICovCj4gIAlocWRfZ3B1X2FkZHIgPSByaW5nLT5ncHVfYWRkciA+PiA4Owo+ICAJ bXFkLT5jcF9ocWRfcHFfYmFzZV9sbyA9IGhxZF9ncHVfYWRkcjsKPiAgCW1xZC0+Y3BfaHFkX3Bx X2Jhc2VfaGkgPSB1cHBlcl8zMl9iaXRzKGhxZF9ncHVfYWRkcik7Cj4KPiAgCS8qIHNldCB1cCB0 aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgdG8gQ1BfUkIwX0NOVEwgKi8KPiAgCXRtcCA9IFJSRUcz MihtbUNQX0hRRF9QUV9DT05UUk9MKTsKPiAgCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9I UURfUFFfQ09OVFJPTCwgUVVFVUVfU0laRSwKPiAgCQkJICAgIChvcmRlcl9iYXNlXzIocmluZy0+ cmluZ19zaXplIC8gNCkgLSAxKSk7Cj4gIAl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFE X1BRX0NPTlRST0wsIFJQVFJfQkxPQ0tfU0laRSwKPiAgCQkJKChvcmRlcl9iYXNlXzIoQU1ER1BV X0dQVV9QQUdFX1NJWkUgLyA0KSAtIDEpIDw8IDgpKTsKPiBAQCAtNDg2MywxNTcgKzQ4ODIsMTQ5 IEBAIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfbXFkX2luaXQoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n KQo+ICAJLyogc2V0IE1UWVBFICovCj4gIAl0bXAgPSBSUkVHMzIobW1DUF9IUURfSUJfQ09OVFJP TCk7Cj4gIAl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX0lCX0NPTlRST0wsIE1JTl9J Ql9BVkFJTF9TSVpFLCAzKTsKPiAgCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfSUJf Q09OVFJPTCwgTVRZUEUsIDMpOwo+ICAJbXFkLT5jcF9ocWRfaWJfY29udHJvbCA9IHRtcDsKPgo+ ICAJdG1wID0gUlJFRzMyKG1tQ1BfSFFEX0lRX1RJTUVSKTsKPiAgCXRtcCA9IFJFR19TRVRfRklF TEQodG1wLCBDUF9IUURfSVFfVElNRVIsIE1UWVBFLCAzKTsKPiAgCW1xZC0+Y3BfaHFkX2lxX3Rp bWVyID0gdG1wOwo+Cj4gIAl0bXAgPSBSUkVHMzIobW1DUF9IUURfQ1RYX1NBVkVfQ09OVFJPTCk7 Cj4gIAl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX0NUWF9TQVZFX0NPTlRST0wsIE1U WVBFLCAzKTsKPiAgCW1xZC0+Y3BfaHFkX2N0eF9zYXZlX2NvbnRyb2wgPSB0bXA7Cj4KPiAgCS8q IGFjdGl2YXRlIHRoZSBxdWV1ZSAqLwo+ICAJbXFkLT5jcF9ocWRfYWN0aXZlID0gMTsKPgo+ICAJ cmV0dXJuIDA7Cj4gIH0KPgo+IC1zdGF0aWMgaW50IGdmeF92OF8wX2tpcV9pbml0X3JlZ2lzdGVy KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKPiArc3RhdGljIGludCBnZnhfdjhfMF9tcWRfY29t bWl0KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKPiAgewo+ICAJc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYgPSByaW5nLT5hZGV2Owo+ICAJc3RydWN0IHZpX21xZCAqbXFkID0gcmluZy0+bXFk X3B0cjsKPiAtCWludCBqOwo+Cj4gIAkvKiBkaXNhYmxlIHdwdHIgcG9sbGluZyAqLwo+ICAJV1JF RzMyX0ZJRUxEKENQX1BRX1dQVFJfUE9MTF9DTlRMLCBFTiwgMCk7Cj4KPiAgCVdSRUczMihtbUNQ X0hRRF9FT1BfQkFTRV9BRERSLCBtcWQtPmNwX2hxZF9lb3BfYmFzZV9hZGRyX2xvKTsKPiAgCVdS RUczMihtbUNQX0hRRF9FT1BfQkFTRV9BRERSX0hJLCBtcWQtPmNwX2hxZF9lb3BfYmFzZV9hZGRy X2hpKTsKPgo+ICAJLyogc2V0IHRoZSBFT1Agc2l6ZSwgcmVnaXN0ZXIgdmFsdWUgaXMgMl4oRU9Q X1NJWkUrMSkgZHdvcmRzICovCj4gIAlXUkVHMzIobW1DUF9IUURfRU9QX0NPTlRST0wsIG1xZC0+ Y3BfaHFkX2VvcF9jb250cm9sKTsKPgo+ICAJLyogZW5hYmxlIGRvb3JiZWxsPyAqLwo+ICAJV1JF RzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsIG1xZC0+Y3BfaHFkX3BxX2Rvb3JiZWxs X2NvbnRyb2wpOwo+Cj4gLQkvKiBkaXNhYmxlIHRoZSBxdWV1ZSBpZiBpdCdzIGFjdGl2ZSAqLwo+ IC0JaWYgKFJSRUczMihtbUNQX0hRRF9BQ1RJVkUpICYgQ1BfSFFEX0FDVElWRV9fQUNUSVZFX01B U0spIHsKPiAtCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCAxKTsKPiAtCQlmb3Ig KGogPSAwOyBqIDwgYWRldi0+dXNlY190aW1lb3V0OyBqKyspIHsKPiAtCQkJaWYgKCEoUlJFRzMy KG1tQ1BfSFFEX0FDVElWRSkgJiBDUF9IUURfQUNUSVZFX19BQ1RJVkVfTUFTSykpCj4gLQkJCQli cmVhazsKPiAtCQkJdWRlbGF5KDEpOwo+IC0JCX0KPiAtCQlXUkVHMzIobW1DUF9IUURfREVRVUVV RV9SRVFVRVNULCBtcWQtPmNwX2hxZF9kZXF1ZXVlX3JlcXVlc3QpOwo+IC0JCVdSRUczMihtbUNQ X0hRRF9QUV9SUFRSLCBtcWQtPmNwX2hxZF9wcV9ycHRyKTsKPiAtCQlXUkVHMzIobW1DUF9IUURf UFFfV1BUUiwgbXFkLT5jcF9ocWRfcHFfd3B0cik7Cj4gLQl9Cj4gKwkvKiBzZXQgcHEgcmVhZC93 cml0ZSBwb2ludGVycyAqLwo+ICsJV1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgbXFk LT5jcF9ocWRfZGVxdWV1ZV9yZXF1ZXN0KTsKPiArCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSLCBt cWQtPmNwX2hxZF9wcV9ycHRyKTsKPiArCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPmNw X2hxZF9wcV93cHRyKTsKPgo+ICAJLyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBNUUQgKi8KPiAg CVdSRUczMihtbUNQX01RRF9CQVNFX0FERFIsIG1xZC0+Y3BfbXFkX2Jhc2VfYWRkcl9sbyk7Cj4g IAlXUkVHMzIobW1DUF9NUURfQkFTRV9BRERSX0hJLCBtcWQtPmNwX21xZF9iYXNlX2FkZHJfaGkp Owo+Cj4gIAkvKiBzZXQgTVFEIHZtaWQgdG8gMCAqLwo+ICAJV1JFRzMyKG1tQ1BfTVFEX0NPTlRS T0wsIG1xZC0+Y3BfbXFkX2NvbnRyb2wpOwo+Cj4gIAkvKiBzZXQgdGhlIHBvaW50ZXIgdG8gdGhl IEhRRCwgdGhpcyBpcyBzaW1pbGFyIENQX1JCMF9CQVNFL19ISSAqLwo+ICAJV1JFRzMyKG1tQ1Bf SFFEX1BRX0JBU0UsIG1xZC0+Y3BfaHFkX3BxX2Jhc2VfbG8pOwo+ICAJV1JFRzMyKG1tQ1BfSFFE X1BRX0JBU0VfSEksIG1xZC0+Y3BfaHFkX3BxX2Jhc2VfaGkpOwo+Cj4gIAkvKiBzZXQgdXAgdGhl IEhRRCwgdGhpcyBpcyBzaW1pbGFyIHRvIENQX1JCMF9DTlRMICovCj4gIAlXUkVHMzIobW1DUF9I UURfUFFfQ09OVFJPTCwgbXFkLT5jcF9ocWRfcHFfY29udHJvbCk7Cj4KPiAgCS8qIHNldCB0aGUg d2IgYWRkcmVzcyB3aGV0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgKi8KPiAgCVdSRUczMihtbUNQ X0hRRF9QUV9SUFRSX1JFUE9SVF9BRERSLAo+ICAJCQkJbXFkLT5jcF9ocWRfcHFfcnB0cl9yZXBv cnRfYWRkcl9sbyk7Cj4gIAlXUkVHMzIobW1DUF9IUURfUFFfUlBUUl9SRVBPUlRfQUREUl9ISSwK PiAgCQkJCW1xZC0+Y3BfaHFkX3BxX3JwdHJfcmVwb3J0X2FkZHJfaGkpOwo+Cj4gIAkvKiBvbmx5 IHVzZWQgaWYgQ1BfUFFfV1BUUl9QT0xMX0NOVEwuQ1BfUFFfV1BUUl9QT0xMX0NOVExfX0VOX01B U0s9MSAqLwo+ICAJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSLCBtcWQtPmNwX2hx ZF9wcV93cHRyX3BvbGxfYWRkcl9sbyk7Cj4gIAlXUkVHMzIobW1DUF9IUURfUFFfV1BUUl9QT0xM X0FERFJfSEksIG1xZC0+Y3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyX2hpKTsKPgo+ICsJLyogZW5h YmxlIHRoZSBkb29yYmVsbCBpZiByZXF1ZXN0ZWQgKi8KPiAgCVdSRUczMihtbUNQX0hRRF9QUV9E T09SQkVMTF9DT05UUk9MLCBtcWQtPmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sKTsKPgo+ICAJ LyogcmVzZXQgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMsIHNpbWlsYXIgdG8gQ1BfUkIwX1dQVFIv X1JQVFIgKi8KPiAgCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPmNwX2hxZF9wcV93cHRy KTsKPgo+ICAJLyogc2V0IHRoZSB2bWlkIGZvciB0aGUgcXVldWUgKi8KPiAgCVdSRUczMihtbUNQ X0hRRF9WTUlELCBtcWQtPmNwX2hxZF92bWlkKTsKPgo+ICAJV1JFRzMyKG1tQ1BfSFFEX1BFUlNJ U1RFTlRfU1RBVEUsIG1xZC0+Y3BfaHFkX3BlcnNpc3RlbnRfc3RhdGUpOwo+Cj4gIAkvKiBhY3Rp dmF0ZSB0aGUgcXVldWUgKi8KPiAgCVdSRUczMihtbUNQX0hRRF9BQ1RJVkUsIG1xZC0+Y3BfaHFk X2FjdGl2ZSk7Cj4KPiAgCXJldHVybiAwOwo+ICB9Cj4KPiAgc3RhdGljIGludCBnZnhfdjhfMF9r aXFfaW5pdF9xdWV1ZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCj4gIHsKPiAgCXN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKPiAgCXN0cnVjdCB2aV9tcWQgKm1xZCA9 IHJpbmctPm1xZF9wdHI7Cj4gIAlpbnQgbXFkX2lkeCA9IEFNREdQVV9NQVhfQ09NUFVURV9SSU5H UzsKPgo+ICAJZ2Z4X3Y4XzBfa2lxX3NldHRpbmcocmluZyk7Cj4KPiAgCWlmIChhZGV2LT5nZngu aW5fcmVzZXQpIHsgLyogZm9yIEdQVV9SRVNFVCBjYXNlICovCj4gIAkJLyogcmVzZXQgTVFEIHRv IGEgY2xlYW4gc3RhdHVzICovCj4gIAkJaWYgKGFkZXYtPmdmeC5tZWMubXFkX2JhY2t1cFttcWRf aWR4XSkKPiAgCQkJbWVtY3B5KG1xZCwgYWRldi0+Z2Z4Lm1lYy5tcWRfYmFja3VwW21xZF9pZHhd LCBzaXplb2YoKm1xZCkpOwo+Cj4gIAkJLyogcmVzZXQgcmluZyBidWZmZXIgKi8KPiAgCQlyaW5n LT53cHRyID0gMDsKPiAgCQlhbWRncHVfcmluZ19jbGVhcl9yaW5nKHJpbmcpOwo+Cj4gIAkJbXV0 ZXhfbG9jaygmYWRldi0+c3JibV9tdXRleCk7Cj4gIAkJdmlfc3JibV9zZWxlY3QoYWRldiwgcmlu Zy0+bWUsIHJpbmctPnBpcGUsIHJpbmctPnF1ZXVlLCAwKTsKPiAtCQlnZnhfdjhfMF9raXFfaW5p dF9yZWdpc3RlcihyaW5nKTsKPiArCQlnZnhfdjhfMF9kZWFjdGl2YXRlX2hxZChhZGV2LCAxKTsK PiArCQlnZnhfdjhfMF9tcWRfY29tbWl0KHJpbmcpOwo+ICAJCXZpX3NyYm1fc2VsZWN0KGFkZXYs IDAsIDAsIDAsIDApOwo+ICAJCW11dGV4X3VubG9jaygmYWRldi0+c3JibV9tdXRleCk7Cj4gIAl9 IGVsc2Ugewo+IC0JCW1lbXNldCgodm9pZCAqKW1xZCwgMCwgc2l6ZW9mKCptcWQpKTsKPiAgCQlt dXRleF9sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKPiAgCQl2aV9zcmJtX3NlbGVjdChhZGV2LCBy aW5nLT5tZSwgcmluZy0+cGlwZSwgcmluZy0+cXVldWUsIDApOwo+ICAJCWdmeF92OF8wX21xZF9p bml0KHJpbmcpOwo+IC0JCWdmeF92OF8wX2tpcV9pbml0X3JlZ2lzdGVyKHJpbmcpOwo+ICsJCWdm eF92OF8wX2RlYWN0aXZhdGVfaHFkKGFkZXYsIDEpOwo+ICsJCWdmeF92OF8wX21xZF9jb21taXQo cmluZyk7Cj4gIAkJdmlfc3JibV9zZWxlY3QoYWRldiwgMCwgMCwgMCwgMCk7Cj4gIAkJbXV0ZXhf dW5sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKPgo+ICAJCWlmIChhZGV2LT5nZngubWVjLm1xZF9i YWNrdXBbbXFkX2lkeF0pCj4gIAkJCW1lbWNweShhZGV2LT5nZngubWVjLm1xZF9iYWNrdXBbbXFk X2lkeF0sIG1xZCwgc2l6ZW9mKCptcWQpKTsKPiAgCX0KPgo+ICAJcmV0dXJuIDA7Cj4gIH0KPgo+ ICBzdGF0aWMgaW50IGdmeF92OF8wX2tjcV9pbml0X3F1ZXVlKHN0cnVjdCBhbWRncHVfcmluZyAq cmluZykKPiAgewo+ICAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2Owo+ ICAJc3RydWN0IHZpX21xZCAqbXFkID0gcmluZy0+bXFkX3B0cjsKPiAgCWludCBtcWRfaWR4ID0g cmluZyAtICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nWzBdOwo+Cj4gIAlpZiAoIWFkZXYtPmdmeC5p bl9yZXNldCAmJiAhYWRldi0+Z2Z4LmluX3N1c3BlbmQpIHsKPiAtCQltZW1zZXQoKHZvaWQgKilt cWQsIDAsIHNpemVvZigqbXFkKSk7Cj4gIAkJbXV0ZXhfbG9jaygmYWRldi0+c3JibV9tdXRleCk7 Cj4gIAkJdmlfc3JibV9zZWxlY3QoYWRldiwgcmluZy0+bWUsIHJpbmctPnBpcGUsIHJpbmctPnF1 ZXVlLCAwKTsKPiAgCQlnZnhfdjhfMF9tcWRfaW5pdChyaW5nKTsKPiAgCQl2aV9zcmJtX3NlbGVj dChhZGV2LCAwLCAwLCAwLCAwKTsKPiAgCQltdXRleF91bmxvY2soJmFkZXYtPnNyYm1fbXV0ZXgp Owo+Cj4gIAkJaWYgKGFkZXYtPmdmeC5tZWMubXFkX2JhY2t1cFttcWRfaWR4XSkKPiAgCQkJbWVt Y3B5KGFkZXYtPmdmeC5tZWMubXFkX2JhY2t1cFttcWRfaWR4XSwgbXFkLCBzaXplb2YoKm1xZCkp Owo+ICAJfSBlbHNlIGlmIChhZGV2LT5nZnguaW5fcmVzZXQpIHsgLyogZm9yIEdQVV9SRVNFVCBj YXNlICovCj4gIAkJLyogcmVzZXQgTVFEIHRvIGEgY2xlYW4gc3RhdHVzICovCj4gIAkJaWYgKGFk ZXYtPmdmeC5tZWMubXFkX2JhY2t1cFttcWRfaWR4XSkKPiAgCQkJbWVtY3B5KG1xZCwgYWRldi0+ Z2Z4Lm1lYy5tcWRfYmFja3VwW21xZF9pZHhdLCBzaXplb2YoKm1xZCkpOwo+Cj4gIAkJLyogcmVz ZXQgcmluZyBidWZmZXIgKi8KPiAgCQlyaW5nLT53cHRyID0gMDsKPiAgCQlhbWRncHVfcmluZ19j bGVhcl9yaW5nKHJpbmcpOwo+ICAJfQo+Cj4gIAlyZXR1cm4gMDsKPiAgfQo+IEBAIC01Mjg0LDYx ICs1Mjk1LDQwIEBAIHN0YXRpYyBib29sIGdmeF92OF8wX2NoZWNrX3NvZnRfcmVzZXQodm9pZCAq aGFuZGxlKQo+ICAJLyogU1JCTV9TVEFUVVMgKi8KPiAgCXRtcCA9IFJSRUczMihtbVNSQk1fU1RB VFVTKTsKPiAgCWlmIChSRUdfR0VUX0ZJRUxEKHRtcCwgU1JCTV9TVEFUVVMsIEdSQk1fUlFfUEVO RElORykpCj4gIAkJc3JibV9zb2Z0X3Jlc2V0ID0gUkVHX1NFVF9GSUVMRChzcmJtX3NvZnRfcmVz ZXQsCj4gIAkJCQkJCVNSQk1fU09GVF9SRVNFVCwgU09GVF9SRVNFVF9HUkJNLCAxKTsKPiAgCWlm IChSRUdfR0VUX0ZJRUxEKHRtcCwgU1JCTV9TVEFUVVMsIFNFTV9CVVNZKSkKPiAgCQlzcmJtX3Nv ZnRfcmVzZXQgPSBSRUdfU0VUX0ZJRUxEKHNyYm1fc29mdF9yZXNldCwKPiAgCQkJCQkJU1JCTV9T T0ZUX1JFU0VULCBTT0ZUX1JFU0VUX1NFTSwgMSk7Cj4KPiAgCWlmIChncmJtX3NvZnRfcmVzZXQg fHwgc3JibV9zb2Z0X3Jlc2V0KSB7Cj4gIAkJYWRldi0+Z2Z4LmdyYm1fc29mdF9yZXNldCA9IGdy Ym1fc29mdF9yZXNldDsKPiAgCQlhZGV2LT5nZnguc3JibV9zb2Z0X3Jlc2V0ID0gc3JibV9zb2Z0 X3Jlc2V0Owo+ICAJCXJldHVybiB0cnVlOwo+ICAJfSBlbHNlIHsKPiAgCQlhZGV2LT5nZnguZ3Ji bV9zb2Z0X3Jlc2V0ID0gMDsKPiAgCQlhZGV2LT5nZnguc3JibV9zb2Z0X3Jlc2V0ID0gMDsKPiAg CQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gIH0KPgo+IC1zdGF0aWMgaW50IGdmeF92OF8wX2RlYWN0 aXZhdGVfaHFkKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgcmVxKQo+IC17Cj4gLQlp bnQgaSwgciA9IDA7Cj4gLQo+IC0JaWYgKFJSRUczMihtbUNQX0hRRF9BQ1RJVkUpICYgQ1BfSFFE X0FDVElWRV9fQUNUSVZFX01BU0spIHsKPiAtCQlXUkVHMzJfRklFTEQoQ1BfSFFEX0RFUVVFVUVf UkVRVUVTVCwgREVRVUVVRV9SRVEsIHJlcSk7Cj4gLQkJZm9yIChpID0gMDsgaSA8IGFkZXYtPnVz ZWNfdGltZW91dDsgaSsrKSB7Cj4gLQkJCWlmICghKFJSRUczMihtbUNQX0hRRF9BQ1RJVkUpICYg Q1BfSFFEX0FDVElWRV9fQUNUSVZFX01BU0spKQo+IC0JCQkJYnJlYWs7Cj4gLQkJCXVkZWxheSgx KTsKPiAtCQl9Cj4gLQkJaWYgKGkgPT0gYWRldi0+dXNlY190aW1lb3V0KQo+IC0JCQlyID0gLUVU SU1FRE9VVDsKPiAtCX0KPiAtCVdSRUczMihtbUNQX0hRRF9ERVFVRVVFX1JFUVVFU1QsIDApOwo+ IC0JV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFIsIDApOwo+IC0JV1JFRzMyKG1tQ1BfSFFEX1BRX1dQ VFIsIDApOwo+IC0KPiAtCXJldHVybiByOwo+IC19Cj4gLQo+ICBzdGF0aWMgaW50IGdmeF92OF8w X3ByZV9zb2Z0X3Jlc2V0KHZvaWQgKmhhbmRsZSkKPiAgewo+ICAJc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4gIAl1MzIgZ3JibV9z b2Z0X3Jlc2V0ID0gMCwgc3JibV9zb2Z0X3Jlc2V0ID0gMDsKPgo+ICAJaWYgKCghYWRldi0+Z2Z4 LmdyYm1fc29mdF9yZXNldCkgJiYKPiAgCSAgICAoIWFkZXYtPmdmeC5zcmJtX3NvZnRfcmVzZXQp KQo+ICAJCXJldHVybiAwOwo+Cj4gIAlncmJtX3NvZnRfcmVzZXQgPSBhZGV2LT5nZnguZ3JibV9z b2Z0X3Jlc2V0Owo+ICAJc3JibV9zb2Z0X3Jlc2V0ID0gYWRldi0+Z2Z4LnNyYm1fc29mdF9yZXNl dDsKPgo+ICAJLyogc3RvcCB0aGUgcmxjICovCj4gIAlnZnhfdjhfMF9ybGNfc3RvcChhZGV2KTsK Pgo+ICAJaWYgKFJFR19HRVRfRklFTEQoZ3JibV9zb2Z0X3Jlc2V0LCBHUkJNX1NPRlRfUkVTRVQs IFNPRlRfUkVTRVRfQ1ApIHx8Cj4gIAkgICAgUkVHX0dFVF9GSUVMRChncmJtX3NvZnRfcmVzZXQs IEdSQk1fU09GVF9SRVNFVCwgU09GVF9SRVNFVF9HRlgpKQo+ICAJCS8qIERpc2FibGUgR0ZYIHBh cnNpbmcvcHJlZmV0Y2hpbmcgKi8KPiAgCQlnZnhfdjhfMF9jcF9nZnhfZW5hYmxlKGFkZXYsIGZh bHNlKTsKPgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=