From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhang, Jerry (Junwei)" Subject: Re: [PATCH 046/100] drm/amdgpu: Add GMC 9.0 support Date: Thu, 23 Mar 2017 10:42:17 +0800 Message-ID: <58D33609.3060304@amd.com> References: <1490041835-11255-1-git-send-email-alexander.deucher@amd.com> <1490041835-11255-32-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1490041835-11255-32-git-send-email-alexander.deucher-5C7GfCeVMHo@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: Alex Deucher , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Alex Deucher , Alex Xie SGkgQWxleCwKCkkgcmVtZW1iZXIgd2UgaGFkIGEgcGF0Y2ggdG8gcmVtb3ZlIHRoZSBGQiBsb2Nh dGlvbiBwcm9ncmFtbWluZyBpbiBnbWMvdm1odWIuCkkgc2F3IGl0J3Mgbm90IGluIGdtYyB2OSBp biB0aGlzIHBhdGNoLCBidXQgcHJlLWdtY3Y5IHN0aWxsIHByb2dyYW0gRkIgcmVnaXN0ZXIuCgpJ cyB0aGF0IGFueSBtaXNzaW5nIGZvciBzeW5jIGhlcmU/Ck9yIGl0J3Mgb25seSBzdXBwb3J0ZWQg Zm9yIGdtYyB2OSBub3cuCgpKZXJyeQoKT24gMDMvMjEvMjAxNyAwNDoyOSBBTSwgQWxleCBEZXVj aGVyIHdyb3RlOgo+IEZyb206IEFsZXggWGllIDxBbGV4QmluLlhpZUBhbWQuY29tPgo+Cj4gT24g U09DLTE1IHBhcnRzLCB0aGUgR01DIChHcmFwaGljcyBNZW1vcnkgQ29udHJvbGxlcikgY29uc2lz dHMKPiBvZiB0d28gaHViczogR0ZYIChncmFwaGljcyBhbmQgY29tcHV0ZSkgYW5kIE1NIChzZG1h LCB1dmQsIHZjZSkuCj4KPiBTaWduZWQtb2ZmLWJ5OiBBbGV4IFhpZSA8QWxleEJpbi5YaWVAYW1k LmNvbT4KPiBSZXZpZXdlZC1ieTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1Y2hlckBhbWQu Y29tPgo+IFNpZ25lZC1vZmYtYnk6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1k LmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlICAgICAg fCAgIDYgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oICAgICAgfCAg MzAgKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jICAgfCAgMjgg Ky0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeGh1Yl92MV8wLmMgfCA0NDcgKysr KysrKysrKysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeGh1Yl92MV8w LmggfCAgMzUgKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dtY192OV8wLmMgICAg fCA4MjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvZ21jX3Y5XzAuaCAgICB8ICAzMCArKwo+ICAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvbW1odWJfdjFfMC5jICB8IDU4NSArKysrKysrKysrKysrKysrKysrKysrCj4gICBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9tbWh1Yl92MV8wLmggIHwgIDM1ICsrCj4gICBkcml2 ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYW1kX3NoYXJlZC5oIHwgICAyICsKPiAgIDEwIGZpbGVz IGNoYW5nZWQsIDIwMTYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKPiAgIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhodWJfdjFfMC5jCj4gICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4aHViX3YxXzAu aAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dtY192 OV8wLmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9n bWNfdjlfMC5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvbW1odWJfdjFfMC5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvbW1odWJfdjFfMC5oCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZQo+ IGluZGV4IDY5ODIzZTguLmI1MDQ2ZmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtl ZmlsZQo+IEBAIC00NSw3ICs0NSw4IEBAIGFtZGdwdS15ICs9IFwKPiAgICMgYWRkIEdNQyBibG9j awo+ICAgYW1kZ3B1LXkgKz0gXAo+ICAgCWdtY192N18wLm8gXAo+IC0JZ21jX3Y4XzAubwo+ICsJ Z21jX3Y4XzAubyBcCj4gKwlnZnhodWJfdjFfMC5vIG1taHViX3YxXzAubyBnbWNfdjlfMC5vCj4K PiAgICMgYWRkIElIIGJsb2NrCj4gICBhbWRncHUteSArPSBcCj4gQEAgLTc0LDcgKzc1LDggQEAg YW1kZ3B1LXkgKz0gXAo+ICAgIyBhZGQgYXN5bmMgRE1BIGJsb2NrCj4gICBhbWRncHUteSArPSBc Cj4gICAJc2RtYV92Ml80Lm8gXAo+IC0Jc2RtYV92M18wLm8KPiArCXNkbWFfdjNfMC5vIFwKPiAr CXNkbWFfdjRfMC5vCj4KPiAgICMgYWRkIFVWRCBibG9jawo+ICAgYW1kZ3B1LXkgKz0gXAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4gaW5kZXggYWFkZWQ4ZC4uZDcyNTdiNiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4gQEAgLTEyMyw2ICsxMjMsMTEgQEAg ZXh0ZXJuIGludCBhbWRncHVfcGFyYW1fYnVmX3Blcl9zZTsKPiAgIC8qIG1heCBudW1iZXIgb2Yg SVAgaW5zdGFuY2VzICovCj4gICAjZGVmaW5lIEFNREdQVV9NQVhfU0RNQV9JTlNUQU5DRVMJCTIK Pgo+ICsvKiBtYXggbnVtYmVyIG9mIFZNSFVCICovCj4gKyNkZWZpbmUgQU1ER1BVX01BWF9WTUhV QlMJCQkyCj4gKyNkZWZpbmUgQU1ER1BVX01NSFVCCQkJCTAKPiArI2RlZmluZSBBTURHUFVfR0ZY SFVCCQkJCTEKPiArCj4gICAvKiBoYXJkY29kZSB0aGF0IGxpbWl0IGZvciBub3cgKi8KPiAgICNk ZWZpbmUgQU1ER1BVX1ZBX1JFU0VSVkVEX1NJWkUJCQkoOCA8PCAyMCkKPgo+IEBAIC0zMTAsNiAr MzE1LDEyIEBAIHN0cnVjdCBhbWRncHVfZ2FydF9mdW5jcyB7Cj4gICAJCQkJICAgICB1aW50MzJf dCBmbGFncyk7Cj4gICB9Owo+Cj4gKy8qIHByb3ZpZGVkIGJ5IHRoZSBtYyBibG9jayAqLwo+ICtz dHJ1Y3QgYW1kZ3B1X21jX2Z1bmNzIHsKPiArCS8qIGFkanVzdCBtYyBhZGRyIGluIGZiIGZvciBB UFUgY2FzZSAqLwo+ICsJdTY0ICgqYWRqdXN0X21jX2FkZHIpKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LCB1NjQgYWRkcik7Cj4gK307Cj4gKwo+ICAgLyogcHJvdmlkZWQgYnkgdGhlIGloIGJs b2NrICovCj4gICBzdHJ1Y3QgYW1kZ3B1X2loX2Z1bmNzIHsKPiAgIAkvKiByaW5nIHJlYWQvd3Jp dGUgcHRyIGhhbmRsaW5nLCBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwo+IEBAIC01 NTksNiArNTcwLDIxIEBAIGludCBhbWRncHVfZ2FydF9iaW5kKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LCB1aW50NjRfdCBvZmZzZXQsCj4gICBpbnQgYW1kZ3B1X3R0bV9yZWNvdmVyX2dhcnQo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwo+Cj4gICAvKgo+ICsgKiBWTUhVQiBzdHJ1Y3R1 cmVzLCBmdW5jdGlvbnMgJiBoZWxwZXJzCj4gKyAqLwo+ICtzdHJ1Y3QgYW1kZ3B1X3ZtaHViIHsK PiArCXVpbnQzMl90CWN0eDBfcHRiX2FkZHJfbG8zMjsKPiArCXVpbnQzMl90CWN0eDBfcHRiX2Fk ZHJfaGkzMjsKPiArCXVpbnQzMl90CXZtX2ludl9lbmcwX3JlcTsKPiArCXVpbnQzMl90CXZtX2lu dl9lbmcwX2FjazsKPiArCXVpbnQzMl90CXZtX2NvbnRleHQwX2NudGw7Cj4gKwl1aW50MzJfdAl2 bV9sMl9wcm9fZmF1bHRfc3RhdHVzOwo+ICsJdWludDMyX3QJdm1fbDJfcHJvX2ZhdWx0X2NudGw7 Cj4gKwl1aW50MzJfdAkoKmdldF9pbnZhbGlkYXRlX3JlcSkodW5zaWduZWQgaW50IHZtX2lkKTsK PiArCXVpbnQzMl90CSgqZ2V0X3ZtX3Byb3RlY3Rpb25fYml0cykodm9pZCk7Cj4gK307Cj4gKwo+ ICsvKgo+ICAgICogR1BVIE1DIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucyAmIGhlbHBlcnMKPiAgICAq Lwo+ICAgc3RydWN0IGFtZGdwdV9tYyB7Cj4gQEAgLTU5MSw2ICs2MTcsOSBAQCBzdHJ1Y3QgYW1k Z3B1X21jIHsKPiAgIAl1NjQJCQkJCXNoYXJlZF9hcGVydHVyZV9lbmQ7Cj4gICAJdTY0CQkJCQlw cml2YXRlX2FwZXJ0dXJlX3N0YXJ0Owo+ICAgCXU2NAkJCQkJcHJpdmF0ZV9hcGVydHVyZV9lbmQ7 Cj4gKwkvKiBwcm90ZWN0cyBjb25jdXJyZW50IGludmFsaWRhdGlvbiAqLwo+ICsJc3BpbmxvY2tf dAkJaW52YWxpZGF0ZV9sb2NrOwo+ICsJY29uc3Qgc3RydWN0IGFtZGdwdV9tY19mdW5jcyAqbWNf ZnVuY3M7Cj4gICB9Owo+Cj4gICAvKgo+IEBAIC0xNDc5LDYgKzE1MDgsNyBAQCBzdHJ1Y3QgYW1k Z3B1X2RldmljZSB7Cj4gICAJc3RydWN0IGFtZGdwdV9nYXJ0CQlnYXJ0Owo+ICAgCXN0cnVjdCBh bWRncHVfZHVtbXlfcGFnZQlkdW1teV9wYWdlOwo+ICAgCXN0cnVjdCBhbWRncHVfdm1fbWFuYWdl cgl2bV9tYW5hZ2VyOwo+ICsJc3RydWN0IGFtZGdwdV92bWh1YiAgICAgICAgICAgICB2bWh1YltB TURHUFVfTUFYX1ZNSFVCU107Cj4KPiAgIAkvKiBtZW1vcnkgbWFuYWdlbWVudCAqLwo+ICAgCXN0 cnVjdCBhbWRncHVfbW1hbgkJbW1hbjsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dm0uYwo+IGluZGV4IGRmNjE1ZDcuLjQ3YTgwODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdm0uYwo+IEBAIC0zNzUsNiArMzc1LDE2IEBAIHN0YXRpYyBib29sIGFtZGdw dV92bV9yaW5nX2hhc19jb21wdXRlX3ZtX2J1ZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCj4g ICAJcmV0dXJuIGZhbHNlOwo+ICAgfQo+Cj4gK3N0YXRpYyB1NjQgYW1kZ3B1X3ZtX2FkanVzdF9t Y19hZGRyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1NjQgbWNfYWRkcikKPiArewo+ICsJ dTY0IGFkZHIgPSBtY19hZGRyOwo+ICsKPiArCWlmIChhZGV2LT5tYy5tY19mdW5jcyAmJiBhZGV2 LT5tYy5tY19mdW5jcy0+YWRqdXN0X21jX2FkZHIpCj4gKwkJYWRkciA9IGFkZXYtPm1jLm1jX2Z1 bmNzLT5hZGp1c3RfbWNfYWRkcihhZGV2LCBhZGRyKTsKPiArCj4gKwlyZXR1cm4gYWRkcjsKPiAr fQo+ICsKPiAgIC8qKgo+ICAgICogYW1kZ3B1X3ZtX2ZsdXNoIC0gaGFyZHdhcmUgZmx1c2ggdGhl IHZtCj4gICAgKgo+IEBAIC00MDUsOSArNDE1LDEwIEBAIGludCBhbWRncHVfdm1fZmx1c2goc3Ry dWN0IGFtZGdwdV9yaW5nICpyaW5nLCBzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iKQo+ICAgCWlmIChy aW5nLT5mdW5jcy0+ZW1pdF92bV9mbHVzaCAmJiAoam9iLT52bV9uZWVkc19mbHVzaCB8fAo+ICAg CSAgICBhbWRncHVfdm1faXNfZ3B1X3Jlc2V0KGFkZXYsIGlkKSkpIHsKPiAgIAkJc3RydWN0IGZl bmNlICpmZW5jZTsKPiArCQl1NjQgcGRfYWRkciA9IGFtZGdwdV92bV9hZGp1c3RfbWNfYWRkcihh ZGV2LCBqb2ItPnZtX3BkX2FkZHIpOwo+Cj4gLQkJdHJhY2VfYW1kZ3B1X3ZtX2ZsdXNoKGpvYi0+ dm1fcGRfYWRkciwgcmluZy0+aWR4LCBqb2ItPnZtX2lkKTsKPiAtCQlhbWRncHVfcmluZ19lbWl0 X3ZtX2ZsdXNoKHJpbmcsIGpvYi0+dm1faWQsIGpvYi0+dm1fcGRfYWRkcik7Cj4gKwkJdHJhY2Vf YW1kZ3B1X3ZtX2ZsdXNoKHBkX2FkZHIsIHJpbmctPmlkeCwgam9iLT52bV9pZCk7Cj4gKwkJYW1k Z3B1X3JpbmdfZW1pdF92bV9mbHVzaChyaW5nLCBqb2ItPnZtX2lkLCBwZF9hZGRyKTsKPgo+ICAg CQlyID0gYW1kZ3B1X2ZlbmNlX2VtaXQocmluZywgJmZlbmNlKTsKPiAgIAkJaWYgKHIpCj4gQEAg LTY0MywxNSArNjU0LDE4IEBAIGludCBhbWRncHVfdm1fdXBkYXRlX3BhZ2VfZGlyZWN0b3J5KHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkgICAgKGNvdW50ID09IEFNREdQVV9WTV9N QVhfVVBEQVRFX1NJWkUpKSB7Cj4KPiAgIAkJCWlmIChjb3VudCkgewo+ICsJCQkJdWludDY0X3Qg cHRfYWRkciA9Cj4gKwkJCQkJYW1kZ3B1X3ZtX2FkanVzdF9tY19hZGRyKGFkZXYsIGxhc3RfcHQp Owo+ICsKPiAgIAkJCQlpZiAoc2hhZG93KQo+ICAgCQkJCQlhbWRncHVfdm1fZG9fc2V0X3B0ZXMo JnBhcmFtcywKPiAgIAkJCQkJCQkgICAgICBsYXN0X3NoYWRvdywKPiAtCQkJCQkJCSAgICAgIGxh c3RfcHQsIGNvdW50LAo+ICsJCQkJCQkJICAgICAgcHRfYWRkciwgY291bnQsCj4gICAJCQkJCQkJ ICAgICAgaW5jciwKPiAgIAkJCQkJCQkgICAgICBBTURHUFVfUFRFX1ZBTElEKTsKPgo+ICAgCQkJ CWFtZGdwdV92bV9kb19zZXRfcHRlcygmcGFyYW1zLCBsYXN0X3BkZSwKPiAtCQkJCQkJICAgICAg bGFzdF9wdCwgY291bnQsIGluY3IsCj4gKwkJCQkJCSAgICAgIHB0X2FkZHIsIGNvdW50LCBpbmNy LAo+ICAgCQkJCQkJICAgICAgQU1ER1BVX1BURV9WQUxJRCk7Cj4gICAJCQl9Cj4KPiBAQCAtNjY1 LDExICs2NzksMTMgQEAgaW50IGFtZGdwdV92bV91cGRhdGVfcGFnZV9kaXJlY3Rvcnkoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJfQo+Cj4gICAJaWYgKGNvdW50KSB7Cj4gKwkJdWlu dDY0X3QgcHRfYWRkciA9IGFtZGdwdV92bV9hZGp1c3RfbWNfYWRkcihhZGV2LCBsYXN0X3B0KTsK PiArCj4gICAJCWlmICh2bS0+cGFnZV9kaXJlY3RvcnktPnNoYWRvdykKPiAtCQkJYW1kZ3B1X3Zt X2RvX3NldF9wdGVzKCZwYXJhbXMsIGxhc3Rfc2hhZG93LCBsYXN0X3B0LAo+ICsJCQlhbWRncHVf dm1fZG9fc2V0X3B0ZXMoJnBhcmFtcywgbGFzdF9zaGFkb3csIHB0X2FkZHIsCj4gICAJCQkJCSAg ICAgIGNvdW50LCBpbmNyLCBBTURHUFVfUFRFX1ZBTElEKTsKPgo+IC0JCWFtZGdwdV92bV9kb19z ZXRfcHRlcygmcGFyYW1zLCBsYXN0X3BkZSwgbGFzdF9wdCwKPiArCQlhbWRncHVfdm1fZG9fc2V0 X3B0ZXMoJnBhcmFtcywgbGFzdF9wZGUsIHB0X2FkZHIsCj4gICAJCQkJICAgICAgY291bnQsIGlu Y3IsIEFNREdQVV9QVEVfVkFMSUQpOwo+ICAgCX0KPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9nZnhodWJfdjFfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZ2Z4aHViX3YxXzAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u MWZmMDE5Ywo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9nZnhodWJfdjFfMC5jCj4gQEAgLTAsMCArMSw0NDcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IDIwMTYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAr ICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Cj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIENP UFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SCj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiArICogT1RI RVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArI2luY2x1ZGUgImFt ZGdwdS5oIgo+ICsjaW5jbHVkZSAiZ2Z4aHViX3YxXzAuaCIKPiArCj4gKyNpbmNsdWRlICJ2ZWdh MTAvc29jMTVpcC5oIgo+ICsjaW5jbHVkZSAidmVnYTEwL0dDL2djXzlfMF9vZmZzZXQuaCIKPiAr I2luY2x1ZGUgInZlZ2ExMC9HQy9nY185XzBfc2hfbWFzay5oIgo+ICsjaW5jbHVkZSAidmVnYTEw L0dDL2djXzlfMF9kZWZhdWx0LmgiCj4gKyNpbmNsdWRlICJ2ZWdhMTAvdmVnYTEwX2VudW0uaCIK PiArCj4gKyNpbmNsdWRlICJzb2MxNV9jb21tb24uaCIKPiArCj4gK2ludCBnZnhodWJfdjFfMF9n YXJ0X2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiArewo+ICsJdTMyIHRtcDsK PiArCXU2NCB2YWx1ZTsKPiArCXUzMiBpOwo+ICsKPiArCS8qIFByb2dyYW0gTUMuICovCj4gKwkv KiBVcGRhdGUgY29uZmlndXJhdGlvbiAqLwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0Ms IDAsIG1tTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSKSwKPiArCQlhZGV2LT5tYy52cmFt X3N0YXJ0ID4+IDE4KTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbU1DX1ZN X1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIpLAo+ICsJCWFkZXYtPm1jLnZyYW1fZW5kID4+IDE4 KTsKPiArCj4gKwl2YWx1ZSA9IGFkZXYtPnZyYW1fc2NyYXRjaC5ncHVfYWRkciAtIGFkZXYtPm1j LnZyYW1fc3RhcnQKPiArCQkrIGFkZXYtPnZtX21hbmFnZXIudnJhbV9iYXNlX29mZnNldDsKPiAr CVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+ICsJCQkJbW1NQ19WTV9TWVNURU1fQVBF UlRVUkVfREVGQVVMVF9BRERSX0xTQiksCj4gKwkJCQkodTMyKSh2YWx1ZSA+PiAxMikpOwo+ICsJ V1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4gKwkJCQltbU1DX1ZNX1NZU1RFTV9BUEVS VFVSRV9ERUZBVUxUX0FERFJfTVNCKSwKPiArCQkJCSh1MzIpKHZhbHVlID4+IDQ0KSk7Cj4gKwo+ ICsJLyogRGlzYWJsZSBBR1AuICovCj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwg bW1NQ19WTV9BR1BfQkFTRSksIDApOwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAs IG1tTUNfVk1fQUdQX1RPUCksIDApOwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAs IG1tTUNfVk1fQUdQX0JPVCksIDB4RkZGRkZGRkYpOwo+ICsKPiArCS8qIEdBUlQgRW5hYmxlLiAq Lwo+ICsKPiArCS8qIFNldHVwIFRMQiBjb250cm9sICovCj4gKwl0bXAgPSBSUkVHMzIoU09DMTVf UkVHX09GRlNFVChHQywgMCwgbW1NQ19WTV9NWF9MMV9UTEJfQ05UTCkpOwo+ICsJdG1wID0gUkVH X1NFVF9GSUVMRCh0bXAsIE1DX1ZNX01YX0wxX1RMQl9DTlRMLCBFTkFCTEVfTDFfVExCLCAxKTsK PiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLAo+ICsJCQkJTUNfVk1fTVhfTDFfVExCX0NOVEws Cj4gKwkJCQlTWVNURU1fQUNDRVNTX01PREUsCj4gKwkJCQkzKTsKPiArCXRtcCA9IFJFR19TRVRf RklFTEQodG1wLAo+ICsJCQkJTUNfVk1fTVhfTDFfVExCX0NOVEwsCj4gKwkJCQlFTkFCTEVfQURW QU5DRURfRFJJVkVSX01PREVMLAo+ICsJCQkJMSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRt cCwKPiArCQkJCU1DX1ZNX01YX0wxX1RMQl9DTlRMLAo+ICsJCQkJU1lTVEVNX0FQRVJUVVJFX1VO TUFQUEVEX0FDQ0VTUywKPiArCQkJCTApOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4g KwkJCQlNQ19WTV9NWF9MMV9UTEJfQ05UTCwKPiArCQkJCUVDT19CSVRTLAo+ICsJCQkJMCk7Cj4g Kwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPiArCQkJCU1DX1ZNX01YX0wxX1RMQl9DTlRMLAo+ ICsJCQkJTVRZUEUsCj4gKwkJCQlNVFlQRV9VQyk7LyogWFhYIGZvciBlbXVsYXRpb24uICovCj4g Kwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPiArCQkJCU1DX1ZNX01YX0wxX1RMQl9DTlRMLAo+ ICsJCQkJQVRDX0VOLAo+ICsJCQkJMSk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywg MCwgbW1NQ19WTV9NWF9MMV9UTEJfQ05UTCksIHRtcCk7Cj4gKwo+ICsJLyogU2V0dXAgTDIgY2Fj aGUgKi8KPiArCXRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0wyX0NO VEwpKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9DTlRMLCBFTkFCTEVfTDJf Q0FDSEUsIDEpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4gKwkJCQlWTV9MMl9DTlRM LAo+ICsJCQkJRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcsCj4gKwkJCQkwKTsKPiArCXRt cCA9IFJFR19TRVRfRklFTEQodG1wLAo+ICsJCQkJVk1fTDJfQ05UTCwKPiArCQkJCUwyX1BERTBf Q0FDSEVfVEFHX0dFTkVSQVRJT05fTU9ERSwKPiArCQkJCTApOy8qIFhYWCBmb3IgZW11bGF0aW9u LCBSZWZlciB0byBjbG9zZWQgc291cmNlIGNvZGUuKi8KPiArCXRtcCA9IFJFR19TRVRfRklFTEQo dG1wLCBWTV9MMl9DTlRMLCBQREVfRkFVTFRfQ0xBU1NJRklDQVRJT04sIDEpOwo+ICsJdG1wID0g UkVHX1NFVF9GSUVMRCh0bXAsCj4gKwkJCQlWTV9MMl9DTlRMLAo+ICsJCQkJQ09OVEVYVDFfSURF TlRJVFlfQUNDRVNTX01PREUsCj4gKwkJCQkxKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1w LAo+ICsJCQkJVk1fTDJfQ05UTCwKPiArCQkJCUlERU5USVRZX01PREVfRlJBR01FTlRfU0laRSwK PiArCQkJCTApOwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1fTDJfQ05U TCksIHRtcCk7Cj4gKwo+ICsJdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1t Vk1fTDJfQ05UTDIpKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9DTlRMMiwg SU5WQUxJREFURV9BTExfTDFfVExCUywgMSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwg Vk1fTDJfQ05UTDIsIElOVkFMSURBVEVfTDJfQ0FDSEUsIDEpOwo+ICsJV1JFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsIG1tVk1fTDJfQ05UTDIpLCB0bXApOwo+ICsKPiArCXRtcCA9IG1tVk1f TDJfQ05UTDNfREVGQVVMVDsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZN X0wyX0NOVEwzKSwgdG1wKTsKPiArCj4gKwl0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChH QywgMCwgbW1WTV9MMl9DTlRMNCkpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4gKwkJ CSAgICBWTV9MMl9DTlRMNCwKPiArCQkJICAgIFZNQ19UQVBfUERFX1JFUVVFU1RfUEhZU0lDQUws Cj4gKwkJCSAgICAwKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLAo+ICsJCQkgICAgVk1f TDJfQ05UTDQsCj4gKwkJCSAgICBWTUNfVEFQX1BURV9SRVFVRVNUX1BIWVNJQ0FMLAo+ICsJCQkg ICAgMCk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9MMl9DTlRMNCks IHRtcCk7Cj4gKwo+ICsJLyogc2V0dXAgY29udGV4dDAgKi8KPiArCVdSRUczMihTT0MxNV9SRUdf T0ZGU0VUKEdDLCAwLAo+ICsJCQkJbW1WTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFJf TE8zMiksCj4gKwkJKHUzMikoYWRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKSk7Cj4gKwlXUkVHMzIo U09DMTVfUkVHX09GRlNFVChHQywgMCwKPiArCQkJCW1tVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9T VEFSVF9BRERSX0hJMzIpLAo+ICsJCSh1MzIpKGFkZXYtPm1jLmd0dF9zdGFydCA+PiA0NCkpOwo+ ICsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+ICsJCQkJbW1WTV9DT05URVhU MF9QQUdFX1RBQkxFX0VORF9BRERSX0xPMzIpLAo+ICsJCSh1MzIpKGFkZXYtPm1jLmd0dF9lbmQg Pj4gMTIpKTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+ICsJCQkJbW1WTV9D T05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSX0hJMzIpLAo+ICsJCSh1MzIpKGFkZXYtPm1jLmd0 dF9lbmQgPj4gNDQpKTsKPiArCj4gKwlCVUdfT04oYWRldi0+Z2FydC50YWJsZV9hZGRyICYgKH4w eDAwMDBGRkZGRkZGRkYwMDBVTEwpKTsKPiArCXZhbHVlID0gYWRldi0+Z2FydC50YWJsZV9hZGRy IC0gYWRldi0+bWMudnJhbV9zdGFydAo+ICsJCSsgYWRldi0+dm1fbWFuYWdlci52cmFtX2Jhc2Vf b2Zmc2V0Owo+ICsJdmFsdWUgJj0gMHgwMDAwRkZGRkZGRkZGMDAwVUxMOwo+ICsJdmFsdWUgfD0g MHgxOyAvKnZhbGlkIGJpdCovCj4gKwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAs Cj4gKwkJCQltbVZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSX0xPMzIpLAo+ICsJCSh1 MzIpdmFsdWUpOwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4gKwkJCQltbVZN X0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSX0hJMzIpLAo+ICsJCSh1MzIpKHZhbHVlID4+ IDMyKSk7Cj4gKwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4gKwkJCQltbVZN X0wyX1BST1RFQ1RJT05fRkFVTFRfREVGQVVMVF9BRERSX0xPMzIpLAo+ICsJCSh1MzIpKGFkZXYt PmR1bW15X3BhZ2UuYWRkciA+PiAxMikpOwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0Ms IDAsCj4gKwkJCQltbVZNX0wyX1BST1RFQ1RJT05fRkFVTFRfREVGQVVMVF9BRERSX0hJMzIpLAo+ ICsJCSh1MzIpKGFkZXYtPmR1bW15X3BhZ2UuYWRkciA+PiA0NCkpOwo+ICsKPiArCXRtcCA9IFJS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0wyX1BST1RFQ1RJT05fRkFVTFRfQ05U TDIpKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9QUk9URUNUSU9OX0ZBVUxU X0NOVEwyLAo+ICsJCQkgICAgQUNUSVZFX1BBR0VfTUlHUkFUSU9OX1BURV9SRUFEX1JFVFJZLAo+ ICsJCQkgICAgMSk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9MMl9Q Uk9URUNUSU9OX0ZBVUxUX0NOVEwyKSwgdG1wKTsKPiArCj4gKwl0bXAgPSBSUkVHMzIoU09DMTVf UkVHX09GRlNFVChHQywgMCwgbW1WTV9DT05URVhUMF9DTlRMKSk7Cj4gKwl0bXAgPSBSRUdfU0VU X0ZJRUxEKHRtcCwgVk1fQ09OVEVYVDBfQ05UTCwgRU5BQkxFX0NPTlRFWFQsIDEpOwo+ICsJdG1w ID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0NPTlRFWFQwX0NOVEwsIFBBR0VfVEFCTEVfREVQVEgs IDApOwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1fQ09OVEVYVDBfQ05U TCksIHRtcCk7Cj4gKwo+ICsJLyogRGlzYWJsZSBpZGVudGl0eSBhcGVydHVyZS4qLwo+ICsJV1JF RzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4gKwkJbW1WTV9MMl9DT05URVhUMV9JREVOVElU WV9BUEVSVFVSRV9MT1dfQUREUl9MTzMyKSwgMFhGRkZGRkZGRik7Cj4gKwlXUkVHMzIoU09DMTVf UkVHX09GRlNFVChHQywgMCwKPiArCQltbVZNX0wyX0NPTlRFWFQxX0lERU5USVRZX0FQRVJUVVJF X0xPV19BRERSX0hJMzIpLCAweDAwMDAwMDBGKTsKPiArCj4gKwlXUkVHMzIoU09DMTVfUkVHX09G RlNFVChHQywgMCwKPiArCQltbVZNX0wyX0NPTlRFWFQxX0lERU5USVRZX0FQRVJUVVJFX0hJR0hf QUREUl9MTzMyKSwgMCk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwKPiArCQlt bVZNX0wyX0NPTlRFWFQxX0lERU5USVRZX0FQRVJUVVJFX0hJR0hfQUREUl9ISTMyKSwgMCk7Cj4g Kwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4gKwkJbW1WTV9MMl9DT05URVhU X0lERU5USVRZX1BIWVNJQ0FMX09GRlNFVF9MTzMyKSwgMCk7Cj4gKwlXUkVHMzIoU09DMTVfUkVH X09GRlNFVChHQywgMCwKPiArCQltbVZNX0wyX0NPTlRFWFRfSURFTlRJVFlfUEhZU0lDQUxfT0ZG U0VUX0hJMzIpLCAwKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDw9IDE0OyBpKyspIHsKPiArCQl0 bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9DT05URVhUMV9DTlRMKSAr IGkpOwo+ICsJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9DT05URVhUMV9DTlRMLCBFTkFC TEVfQ09OVEVYVCwgMSk7Cj4gKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0NPTlRFWFQx X0NOVEwsIFBBR0VfVEFCTEVfREVQVEgsIDEpOwo+ICsJCXRtcCA9IFJFR19TRVRfRklFTEQodG1w LCBWTV9DT05URVhUMV9DTlRMLAo+ICsJCQkJUkFOR0VfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVf REVGQVVMVCwgMSk7Cj4gKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0NPTlRFWFQxX0NO VEwsCj4gKwkJCQlEVU1NWV9QQUdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQsIDEp Owo+ICsJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9DT05URVhUMV9DTlRMLAo+ICsJCQkJ UERFMF9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCAxKTsKPiArCQl0bXAgPSBSRUdf U0VUX0ZJRUxEKHRtcCwgVk1fQ09OVEVYVDFfQ05UTCwKPiArCQkJCVZBTElEX1BST1RFQ1RJT05f RkFVTFRfRU5BQkxFX0RFRkFVTFQsIDEpOwo+ICsJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBW TV9DT05URVhUMV9DTlRMLAo+ICsJCQkJUkVBRF9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZB VUxULCAxKTsKPiArCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fQ09OVEVYVDFfQ05UTCwK PiArCQkJCVdSSVRFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQsIDEpOwo+ICsJCXRt cCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9DT05URVhUMV9DTlRMLAo+ICsJCQkJRVhFQ1VURV9Q Uk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCAxKTsKPiArCQl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgVk1fQ09OVEVYVDFfQ05UTCwKPiArCQkJCVBBR0VfVEFCTEVfQkxPQ0tfU0laRSwK PiArCQkJCSAgICBhbWRncHVfdm1fYmxvY2tfc2l6ZSAtIDkpOwo+ICsJCVdSRUczMihTT0MxNV9S RUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0NPTlRFWFQxX0NOVEwpICsgaSwgdG1wKTsKPiArCQlXUkVH MzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9DT05URVhUMV9QQUdFX1RBQkxFX1NUQVJU X0FERFJfTE8zMikgKyBpKjIsIDApOwo+ICsJCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAw LCBtbVZNX0NPTlRFWFQxX1BBR0VfVEFCTEVfU1RBUlRfQUREUl9ISTMyKSArIGkqMiwgMCk7Cj4g KwkJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1fQ09OVEVYVDFfUEFHRV9UQUJM RV9FTkRfQUREUl9MTzMyKSArIGkqMiwKPiArCQkJCWFkZXYtPnZtX21hbmFnZXIubWF4X3BmbiAt IDEpOwo+ICsJCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0NPTlRFWFQxX1BB R0VfVEFCTEVfRU5EX0FERFJfSEkzMikgKyBpKjIsIDApOwo+ICsJfQo+ICsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArdm9pZCBnZnhodWJfdjFfMF9nYXJ0X2Rpc2FibGUoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCj4gK3sKPiArCXUzMiB0bXA7Cj4gKwl1MzIgaTsKPiArCj4gKwkv KiBEaXNhYmxlIGFsbCB0YWJsZXMgKi8KPiArCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQo+ICsJ CVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0NPTlRFWFQwX0NOVEwpICsgaSwg MCk7Cj4gKwo+ICsJLyogU2V0dXAgVExCIGNvbnRyb2wgKi8KPiArCXRtcCA9IFJSRUczMihTT0Mx NV9SRUdfT0ZGU0VUKEdDLCAwLCBtbU1DX1ZNX01YX0wxX1RMQl9DTlRMKSk7Cj4gKwl0bXAgPSBS RUdfU0VUX0ZJRUxEKHRtcCwgTUNfVk1fTVhfTDFfVExCX0NOVEwsIEVOQUJMRV9MMV9UTEIsIDAp Owo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4gKwkJCQlNQ19WTV9NWF9MMV9UTEJfQ05U TCwKPiArCQkJCUVOQUJMRV9BRFZBTkNFRF9EUklWRVJfTU9ERUwsCj4gKwkJCQkwKTsKPiArCVdS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbU1DX1ZNX01YX0wxX1RMQl9DTlRMKSwgdG1w KTsKPiArCj4gKwkvKiBTZXR1cCBMMiBjYWNoZSAqLwo+ICsJdG1wID0gUlJFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsIG1tVk1fTDJfQ05UTCkpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0 bXAsIFZNX0wyX0NOVEwsIEVOQUJMRV9MMl9DQUNIRSwgMCk7Cj4gKwlXUkVHMzIoU09DMTVfUkVH X09GRlNFVChHQywgMCwgbW1WTV9MMl9DTlRMKSwgdG1wKTsKPiArCVdSRUczMihTT0MxNV9SRUdf T0ZGU0VUKEdDLCAwLCBtbVZNX0wyX0NOVEwzKSwgMCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBn ZnhodWJfdjFfMF9zZXRfZmF1bHRfZW5hYmxlX2RlZmF1bHQgLSB1cGRhdGUgR0FSVC9WTSBmYXVs dCBoYW5kbGluZwo+ICsgKgo+ICsgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCj4gKyAq IEB2YWx1ZTogdHJ1ZSByZWRpcmVjdHMgVk0gZmF1bHRzIHRvIHRoZSBkZWZhdWx0IHBhZ2UKPiAr ICovCj4gK3ZvaWQgZ2Z4aHViX3YxXzBfc2V0X2ZhdWx0X2VuYWJsZV9kZWZhdWx0KHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LAo+ICsJCQkJCSAgYm9vbCB2YWx1ZSkKPiArewo+ICsJdTMyIHRt cDsKPiArCXRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0wyX1BST1RF Q1RJT05fRkFVTFRfQ05UTCkpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX1BS T1RFQ1RJT05fRkFVTFRfQ05UTCwKPiArCQkJUkFOR0VfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVf REVGQVVMVCwgdmFsdWUpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX1BST1RF Q1RJT05fRkFVTFRfQ05UTCwKPiArCQkJUERFMF9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZB VUxULCB2YWx1ZSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfUFJPVEVDVElP Tl9GQVVMVF9DTlRMLAo+ICsJCQlQREUxX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQs IHZhbHVlKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9QUk9URUNUSU9OX0ZB VUxUX0NOVEwsCj4gKwkJCVBERTJfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCwgdmFs dWUpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4gKwkJCVZNX0wyX1BST1RFQ1RJT05f RkFVTFRfQ05UTCwKPiArCQkJVFJBTlNMQVRFX0ZVUlRIRVJfUFJPVEVDVElPTl9GQVVMVF9FTkFC TEVfREVGQVVMVCwKPiArCQkJdmFsdWUpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZN X0wyX1BST1RFQ1RJT05fRkFVTFRfQ05UTCwKPiArCQkJTkFDS19QUk9URUNUSU9OX0ZBVUxUX0VO QUJMRV9ERUZBVUxULCB2YWx1ZSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJf UFJPVEVDVElPTl9GQVVMVF9DTlRMLAo+ICsJCQlEVU1NWV9QQUdFX1BST1RFQ1RJT05fRkFVTFRf RU5BQkxFX0RFRkFVTFQsIHZhbHVlKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9M Ml9QUk9URUNUSU9OX0ZBVUxUX0NOVEwsCj4gKwkJCVZBTElEX1BST1RFQ1RJT05fRkFVTFRfRU5B QkxFX0RFRkFVTFQsIHZhbHVlKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9Q Uk9URUNUSU9OX0ZBVUxUX0NOVEwsCj4gKwkJCVJFQURfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVf REVGQVVMVCwgdmFsdWUpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX1BST1RF Q1RJT05fRkFVTFRfQ05UTCwKPiArCQkJV1JJVEVfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVG QVVMVCwgdmFsdWUpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX1BST1RFQ1RJ T05fRkFVTFRfQ05UTCwKPiArCQkJRVhFQ1VURV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZB VUxULCB2YWx1ZSk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9MMl9Q Uk9URUNUSU9OX0ZBVUxUX0NOVEwpLCB0bXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDMyX3Qg Z2Z4aHViX3YxXzBfZ2V0X2ludmFsaWRhdGVfcmVxKHVuc2lnbmVkIGludCB2bV9pZCkKPiArewo+ ICsJdTMyIHJlcSA9IDA7Cj4gKwo+ICsJLyogaW52YWxpZGF0ZSB1c2luZyBsZWdhY3kgbW9kZSBv biB2bV9pZCovCj4gKwlyZXEgPSBSRUdfU0VUX0ZJRUxEKHJlcSwgVk1fSU5WQUxJREFURV9FTkcw X1JFUSwKPiArCQkJICAgIFBFUl9WTUlEX0lOVkFMSURBVEVfUkVRLCAxIDw8IHZtX2lkKTsKPiAr CXJlcSA9IFJFR19TRVRfRklFTEQocmVxLCBWTV9JTlZBTElEQVRFX0VORzBfUkVRLCBGTFVTSF9U WVBFLCAwKTsKPiArCXJlcSA9IFJFR19TRVRfRklFTEQocmVxLCBWTV9JTlZBTElEQVRFX0VORzBf UkVRLCBJTlZBTElEQVRFX0wyX1BURVMsIDEpOwo+ICsJcmVxID0gUkVHX1NFVF9GSUVMRChyZXEs IFZNX0lOVkFMSURBVEVfRU5HMF9SRVEsIElOVkFMSURBVEVfTDJfUERFMCwgMSk7Cj4gKwlyZXEg PSBSRUdfU0VUX0ZJRUxEKHJlcSwgVk1fSU5WQUxJREFURV9FTkcwX1JFUSwgSU5WQUxJREFURV9M Ml9QREUxLCAxKTsKPiArCXJlcSA9IFJFR19TRVRfRklFTEQocmVxLCBWTV9JTlZBTElEQVRFX0VO RzBfUkVRLCBJTlZBTElEQVRFX0wyX1BERTIsIDEpOwo+ICsJcmVxID0gUkVHX1NFVF9GSUVMRChy ZXEsIFZNX0lOVkFMSURBVEVfRU5HMF9SRVEsIElOVkFMSURBVEVfTDFfUFRFUywgMSk7Cj4gKwly ZXEgPSBSRUdfU0VUX0ZJRUxEKHJlcSwgVk1fSU5WQUxJREFURV9FTkcwX1JFUSwKPiArCQkJICAg IENMRUFSX1BST1RFQ1RJT05fRkFVTFRfU1RBVFVTX0FERFIsCTApOwo+ICsKPiArCXJldHVybiBy ZXE7Cj4gK30KPiArCj4gK3N0YXRpYyB1aW50MzJfdCBnZnhodWJfdjFfMF9nZXRfdm1fcHJvdGVj dGlvbl9iaXRzKHZvaWQpCj4gK3sKPiArCXJldHVybiAoVk1fQ09OVEVYVDFfQ05UTF9fUkFOR0Vf UFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfSU5URVJSVVBUX01BU0sgfAo+ICsJCSAgICBWTV9DT05U RVhUMV9DTlRMX19EVU1NWV9QQUdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0lOVEVSUlVQVF9N QVNLIHwKPiArCQkgICAgVk1fQ09OVEVYVDFfQ05UTF9fUERFMF9QUk9URUNUSU9OX0ZBVUxUX0VO QUJMRV9JTlRFUlJVUFRfTUFTSyB8Cj4gKwkJICAgIFZNX0NPTlRFWFQxX0NOVExfX1ZBTElEX1BS T1RFQ1RJT05fRkFVTFRfRU5BQkxFX0lOVEVSUlVQVF9NQVNLIHwKPiArCQkgICAgVk1fQ09OVEVY VDFfQ05UTF9fUkVBRF9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9JTlRFUlJVUFRfTUFTSyB8Cj4g KwkJICAgIFZNX0NPTlRFWFQxX0NOVExfX1dSSVRFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0lO VEVSUlVQVF9NQVNLIHwKPiArCQkgICAgVk1fQ09OVEVYVDFfQ05UTF9fRVhFQ1VURV9QUk9URUNU SU9OX0ZBVUxUX0VOQUJMRV9JTlRFUlJVUFRfTUFTSyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg Z2Z4aHViX3YxXzBfZWFybHlfaW5pdCh2b2lkICpoYW5kbGUpCj4gK3sKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdmeGh1Yl92MV8wX2xhdGVfaW5pdCh2b2lkICpoYW5kbGUp Cj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdmeGh1Yl92MV8wX3N3 X2luaXQodm9pZCAqaGFuZGxlKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9 IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPiArCXN0cnVjdCBhbWRncHVfdm1odWIg Kmh1YiA9ICZhZGV2LT52bWh1YltBTURHUFVfR0ZYSFVCXTsKPiArCj4gKwlodWItPmN0eDBfcHRi X2FkZHJfbG8zMiA9Cj4gKwkJU09DMTVfUkVHX09GRlNFVChHQywgMCwKPiArCQkJCSBtbVZNX0NP TlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSX0xPMzIpOwo+ICsJaHViLT5jdHgwX3B0Yl9hZGRy X2hpMzIgPQo+ICsJCVNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4gKwkJCQkgbW1WTV9DT05URVhU MF9QQUdFX1RBQkxFX0JBU0VfQUREUl9ISTMyKTsKPiArCWh1Yi0+dm1faW52X2VuZzBfcmVxID0K PiArCQlTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0lOVkFMSURBVEVfRU5HMF9SRVEpOwo+ ICsJaHViLT52bV9pbnZfZW5nMF9hY2sgPQo+ICsJCVNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1t Vk1fSU5WQUxJREFURV9FTkcwX0FDSyk7Cj4gKwlodWItPnZtX2NvbnRleHQwX2NudGwgPQo+ICsJ CVNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1fQ09OVEVYVDBfQ05UTCk7Cj4gKwlodWItPnZt X2wyX3Byb19mYXVsdF9zdGF0dXMgPQo+ICsJCVNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1f TDJfUFJPVEVDVElPTl9GQVVMVF9TVEFUVVMpOwo+ICsJaHViLT52bV9sMl9wcm9fZmF1bHRfY250 bCA9Cj4gKwkJU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9MMl9QUk9URUNUSU9OX0ZBVUxU X0NOVEwpOwo+ICsKPiArCWh1Yi0+Z2V0X2ludmFsaWRhdGVfcmVxID0gZ2Z4aHViX3YxXzBfZ2V0 X2ludmFsaWRhdGVfcmVxOwo+ICsJaHViLT5nZXRfdm1fcHJvdGVjdGlvbl9iaXRzID0gZ2Z4aHVi X3YxXzBfZ2V0X3ZtX3Byb3RlY3Rpb25fYml0czsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBnZnhodWJfdjFfMF9zd19maW5pKHZvaWQgKmhhbmRsZSkKPiArewo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ2Z4aHViX3YxXzBfaHdfaW5pdCh2b2lk ICpoYW5kbGUpCj4gK3sKPiArCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBh bWRncHVfZGV2aWNlICopaGFuZGxlOwo+ICsJdW5zaWduZWQgaTsKPiArCj4gKwlmb3IgKGkgPSAw IDsgaSA8IDE4OyArK2kpIHsKPiArCQlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwKPiAr CQkJCQltbVZNX0lOVkFMSURBVEVfRU5HMF9BRERSX1JBTkdFX0xPMzIpICsKPiArCQkgICAgICAg MiAqIGksIDB4ZmZmZmZmZmYpOwo+ICsJCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+ ICsJCQkJCW1tVk1fSU5WQUxJREFURV9FTkcwX0FERFJfUkFOR0VfSEkzMikgKwo+ICsJCSAgICAg ICAyICogaSwgMHgxZik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZ2Z4aHViX3YxXzBfaHdfZmluaSh2b2lkICpoYW5kbGUpCj4gK3sKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdmeGh1Yl92MV8wX3N1c3BlbmQodm9pZCAqaGFuZGxl KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZnhodWJfdjFfMF9y ZXN1bWUodm9pZCAqaGFuZGxlKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGJvb2wgZ2Z4aHViX3YxXzBfaXNfaWRsZSh2b2lkICpoYW5kbGUpCj4gK3sKPiArCXJldHVybiB0 cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdmeGh1Yl92MV8wX3dhaXRfZm9yX2lkbGUodm9p ZCAqaGFuZGxlKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZnho dWJfdjFfMF9zb2Z0X3Jlc2V0KHZvaWQgKmhhbmRsZSkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgZ2Z4aHViX3YxXzBfc2V0X2Nsb2NrZ2F0aW5nX3N0YXRlKHZvaWQg KmhhbmRsZSwKPiArCQkJCQkgIGVudW0gYW1kX2Nsb2NrZ2F0aW5nX3N0YXRlIHN0YXRlKQo+ICt7 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZnhodWJfdjFfMF9zZXRfcG93 ZXJnYXRpbmdfc3RhdGUodm9pZCAqaGFuZGxlLAo+ICsJCQkJCSAgZW51bSBhbWRfcG93ZXJnYXRp bmdfc3RhdGUgc3RhdGUpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtjb25zdCBzdHJ1 Y3QgYW1kX2lwX2Z1bmNzIGdmeGh1Yl92MV8wX2lwX2Z1bmNzID0gewo+ICsJLm5hbWUgPSAiZ2Z4 aHViX3YxXzAiLAo+ICsJLmVhcmx5X2luaXQgPSBnZnhodWJfdjFfMF9lYXJseV9pbml0LAo+ICsJ LmxhdGVfaW5pdCA9IGdmeGh1Yl92MV8wX2xhdGVfaW5pdCwKPiArCS5zd19pbml0ID0gZ2Z4aHVi X3YxXzBfc3dfaW5pdCwKPiArCS5zd19maW5pID0gZ2Z4aHViX3YxXzBfc3dfZmluaSwKPiArCS5o d19pbml0ID0gZ2Z4aHViX3YxXzBfaHdfaW5pdCwKPiArCS5od19maW5pID0gZ2Z4aHViX3YxXzBf aHdfZmluaSwKPiArCS5zdXNwZW5kID0gZ2Z4aHViX3YxXzBfc3VzcGVuZCwKPiArCS5yZXN1bWUg PSBnZnhodWJfdjFfMF9yZXN1bWUsCj4gKwkuaXNfaWRsZSA9IGdmeGh1Yl92MV8wX2lzX2lkbGUs Cj4gKwkud2FpdF9mb3JfaWRsZSA9IGdmeGh1Yl92MV8wX3dhaXRfZm9yX2lkbGUsCj4gKwkuc29m dF9yZXNldCA9IGdmeGh1Yl92MV8wX3NvZnRfcmVzZXQsCj4gKwkuc2V0X2Nsb2NrZ2F0aW5nX3N0 YXRlID0gZ2Z4aHViX3YxXzBfc2V0X2Nsb2NrZ2F0aW5nX3N0YXRlLAo+ICsJLnNldF9wb3dlcmdh dGluZ19zdGF0ZSA9IGdmeGh1Yl92MV8wX3NldF9wb3dlcmdhdGluZ19zdGF0ZSwKPiArfTsKPiAr Cj4gK2NvbnN0IHN0cnVjdCBhbWRncHVfaXBfYmxvY2tfdmVyc2lvbiBnZnhodWJfdjFfMF9pcF9i bG9jayA9Cj4gK3sKPiArCS50eXBlID0gQU1EX0lQX0JMT0NLX1RZUEVfR0ZYSFVCLAo+ICsJLm1h am9yID0gMSwKPiArCS5taW5vciA9IDAsCj4gKwkucmV2ID0gMCwKPiArCS5mdW5jcyA9ICZnZnho dWJfdjFfMF9pcF9mdW5jcywKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvZ2Z4aHViX3YxXzAuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeGh1 Yl92MV8wLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjUxMjlhOGYK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4aHVi X3YxXzAuaAo+IEBAIC0wLDAgKzEsMzUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTYgQWR2 YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIENPUFlSSUdIVCBI T0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S Cj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiArICogT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19HRlhIVUJf VjFfMF9IX18KPiArI2RlZmluZSBfX0dGWEhVQl9WMV8wX0hfXwo+ICsKPiAraW50IGdmeGh1Yl92 MV8wX2dhcnRfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKPiArdm9pZCBnZnho dWJfdjFfMF9nYXJ0X2Rpc2FibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwo+ICt2b2lk IGdmeGh1Yl92MV8wX3NldF9mYXVsdF9lbmFibGVfZGVmYXVsdChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKPiArCQkJCQkgIGJvb2wgdmFsdWUpOwo+ICsKPiArZXh0ZXJuIGNvbnN0IHN0cnVj dCBhbWRfaXBfZnVuY3MgZ2Z4aHViX3YxXzBfaXBfZnVuY3M7Cj4gK2V4dGVybiBjb25zdCBzdHJ1 Y3QgYW1kZ3B1X2lwX2Jsb2NrX3ZlcnNpb24gZ2Z4aHViX3YxXzBfaXBfYmxvY2s7Cj4gKwo+ICsj ZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ21jX3Y5XzAu YyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dtY192OV8wLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjVjZjBmYzMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ21jX3Y5XzAuYwo+IEBAIC0wLDAgKzEsODI2IEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4K PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4gKyAqIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsgKgo+ ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCj4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgo+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiArICog QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICoK PiArICovCj4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgo+ICsjaW5jbHVkZSAiYW1kZ3B1 LmgiCj4gKyNpbmNsdWRlICJnbWNfdjlfMC5oIgo+ICsKPiArI2luY2x1ZGUgInZlZ2ExMC9zb2Mx NWlwLmgiCj4gKyNpbmNsdWRlICJ2ZWdhMTAvSERQL2hkcF80XzBfb2Zmc2V0LmgiCj4gKyNpbmNs dWRlICJ2ZWdhMTAvSERQL2hkcF80XzBfc2hfbWFzay5oIgo+ICsjaW5jbHVkZSAidmVnYTEwL0dD L2djXzlfMF9zaF9tYXNrLmgiCj4gKyNpbmNsdWRlICJ2ZWdhMTAvdmVnYTEwX2VudW0uaCIKPiAr Cj4gKyNpbmNsdWRlICJzb2MxNV9jb21tb24uaCIKPiArCj4gKyNpbmNsdWRlICJuYmlvX3Y2XzEu aCIKPiArI2luY2x1ZGUgImdmeGh1Yl92MV8wLmgiCj4gKyNpbmNsdWRlICJtbWh1Yl92MV8wLmgi Cj4gKwo+ICsjZGVmaW5lIG1tREZfQ1NfQU9OMF9EcmFtQmFzZUFkZHJlc3MwICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDQ0Cj4gKyNkZWZpbmUgbW1ERl9DU19BT04wX0RyYW1CYXNlQWRkcmVzczBfQkFTRV9JRFggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCj4g Ky8vREZfQ1NfQU9OMF9EcmFtQmFzZUFkZHJlc3MwCj4gKyNkZWZpbmUgREZfQ1NfQU9OMF9EcmFt QmFzZUFkZHJlc3MwX19BZGRyUm5nVmFsX19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCj4gKyNkZWZpbmUgREZfQ1NfQU9OMF9E cmFtQmFzZUFkZHJlc3MwX19MZ2N5TW1pb0hvbGVFbl9fU0hJRlQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCj4gKyNkZWZpbmUgREZfQ1NfQU9O MF9EcmFtQmFzZUFkZHJlc3MwX19JbnRMdk51bUNoYW5fX1NISUZUICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0Cj4gKyNkZWZpbmUgREZfQ1Nf QU9OMF9EcmFtQmFzZUFkZHJlc3MwX19JbnRMdkFkZHJTZWxfX1NISUZUICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Cj4gKyNkZWZpbmUgREZf Q1NfQU9OMF9EcmFtQmFzZUFkZHJlc3MwX19EcmFtQmFzZUFkZHJfX1NISUZUICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjCj4gKyNkZWZpbmUg REZfQ1NfQU9OMF9EcmFtQmFzZUFkZHJlc3MwX19BZGRyUm5nVmFsX01BU0sgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwK PiArI2RlZmluZSBERl9DU19BT04wX0RyYW1CYXNlQWRkcmVzczBfX0xnY3lNbWlvSG9sZUVuX01B U0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDAwMDAwMDAyTAo+ICsjZGVmaW5lIERGX0NTX0FPTjBfRHJhbUJhc2VBZGRyZXNzMF9fSW50THZO dW1DaGFuX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAwMDAwRjBMCj4gKyNkZWZpbmUgREZfQ1NfQU9OMF9EcmFtQmFzZUFkZHJl c3MwX19JbnRMdkFkZHJTZWxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMEwKPiArI2RlZmluZSBERl9DU19BT04wX0Ry YW1CYXNlQWRkcmVzczBfX0RyYW1CYXNlQWRkcl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGMDAwTAo+ICsKPiArLyogWFhY IE1vdmUgdGhpcyBtYWNybyB0byBWRUdBMTAgaGVhZGVyIGZpbGUsIHdoaWNoIGlzIGxpa2Ugdmlk LmggZm9yIFZJLiovCj4gKyNkZWZpbmUgQU1ER1BVX05VTV9PRl9WTUlEUwkJCTgKPiArCj4gK3N0 YXRpYyBjb25zdCB1MzIgZ29sZGVuX3NldHRpbmdzX3ZlZ2ExMF9oZHBbXSA9Cj4gK3sKPiArCTB4 ZjY0LCAweDBmZmZmZmZmLCAweDAwMDAwMDAwLAo+ICsJMHhmNjUsIDB4MGZmZmZmZmYsIDB4MDAw MDAwMDAsCj4gKwkweGY2NiwgMHgwZmZmZmZmZiwgMHgwMDAwMDAwMCwKPiArCTB4ZjY3LCAweDBm ZmZmZmZmLCAweDAwMDAwMDAwLAo+ICsJMHhmNjgsIDB4MGZmZmZmZmYsIDB4MDAwMDAwMDAsCj4g KwkweGY2YSwgMHgwZmZmZmZmZiwgMHgwMDAwMDAwMCwKPiArCTB4ZjZiLCAweDBmZmZmZmZmLCAw eDAwMDAwMDAwLAo+ICsJMHhmNmMsIDB4MGZmZmZmZmYsIDB4MDAwMDAwMDAsCj4gKwkweGY2ZCwg MHgwZmZmZmZmZiwgMHgwMDAwMDAwMCwKPiArCTB4ZjZlLCAweDBmZmZmZmZmLCAweDAwMDAwMDAw LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBnbWNfdjlfMF92bV9mYXVsdF9pbnRlcnJ1cHRfc3Rh dGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJCQkJc3RydWN0IGFtZGdwdV9pcnFf c3JjICpzcmMsCj4gKwkJCQkJdW5zaWduZWQgdHlwZSwKPiArCQkJCQllbnVtIGFtZGdwdV9pbnRl cnJ1cHRfc3RhdGUgc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBhbWRncHVfdm1odWIgKmh1YjsKPiAr CXUzMiB0bXAsIHJlZywgYml0cywgaTsKPiArCj4gKwlzd2l0Y2ggKHN0YXRlKSB7Cj4gKwljYXNl IEFNREdQVV9JUlFfU1RBVEVfRElTQUJMRToKPiArCQkvKiBNTSBIVUIgKi8KPiArCQlodWIgPSAm YWRldi0+dm1odWJbQU1ER1BVX01NSFVCXTsKPiArCQliaXRzID0gaHViLT5nZXRfdm1fcHJvdGVj dGlvbl9iaXRzKCk7Cj4gKwkJZm9yIChpID0gMDsgaTwgMTY7IGkrKykgewo+ICsJCQlyZWcgPSBo dWItPnZtX2NvbnRleHQwX2NudGwgKyBpOwo+ICsJCQl0bXAgPSBSUkVHMzIocmVnKTsKPiArCQkJ dG1wICY9IH5iaXRzOwo+ICsJCQlXUkVHMzIocmVnLCB0bXApOwo+ICsJCX0KPiArCj4gKwkJLyog R0ZYIEhVQiAqLwo+ICsJCWh1YiA9ICZhZGV2LT52bWh1YltBTURHUFVfR0ZYSFVCXTsKPiArCQli aXRzID0gaHViLT5nZXRfdm1fcHJvdGVjdGlvbl9iaXRzKCk7Cj4gKwkJZm9yIChpID0gMDsgaSA8 IDE2OyBpKyspIHsKPiArCQkJcmVnID0gaHViLT52bV9jb250ZXh0MF9jbnRsICsgaTsKPiArCQkJ dG1wID0gUlJFRzMyKHJlZyk7Cj4gKwkJCXRtcCAmPSB+Yml0czsKPiArCQkJV1JFRzMyKHJlZywg dG1wKTsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEFNREdQVV9JUlFfU1RBVEVfRU5BQkxF Ogo+ICsJCS8qIE1NIEhVQiAqLwo+ICsJCWh1YiA9ICZhZGV2LT52bWh1YltBTURHUFVfTU1IVUJd Owo+ICsJCWJpdHMgPSBodWItPmdldF92bV9wcm90ZWN0aW9uX2JpdHMoKTsKPiArCQlmb3IgKGkg PSAwOyBpPCAxNjsgaSsrKSB7Cj4gKwkJCXJlZyA9IGh1Yi0+dm1fY29udGV4dDBfY250bCArIGk7 Cj4gKwkJCXRtcCA9IFJSRUczMihyZWcpOwo+ICsJCQl0bXAgfD0gYml0czsKPiArCQkJV1JFRzMy KHJlZywgdG1wKTsKPiArCQl9Cj4gKwo+ICsJCS8qIEdGWCBIVUIgKi8KPiArCQlodWIgPSAmYWRl di0+dm1odWJbQU1ER1BVX0dGWEhVQl07Cj4gKwkJYml0cyA9IGh1Yi0+Z2V0X3ZtX3Byb3RlY3Rp b25fYml0cygpOwo+ICsJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Cj4gKwkJCXJlZyA9IGh1 Yi0+dm1fY29udGV4dDBfY250bCArIGk7Cj4gKwkJCXRtcCA9IFJSRUczMihyZWcpOwo+ICsJCQl0 bXAgfD0gYml0czsKPiArCQkJV1JFRzMyKHJlZywgdG1wKTsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4g KwlkZWZhdWx0Ogo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ21jX3Y5XzBfcHJvY2Vzc19pbnRlcnJ1cHQoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJCQlzdHJ1Y3QgYW1kZ3B1X2lycV9zcmMgKnNv dXJjZSwKPiArCQkJCXN0cnVjdCBhbWRncHVfaXZfZW50cnkgKmVudHJ5KQo+ICt7Cj4gKwlzdHJ1 Y3QgYW1kZ3B1X3ZtaHViICpnZnhodWIgPSAmYWRldi0+dm1odWJbQU1ER1BVX0dGWEhVQl07Cj4g KwlzdHJ1Y3QgYW1kZ3B1X3ZtaHViICptbWh1YiA9ICZhZGV2LT52bWh1YltBTURHUFVfTU1IVUJd Owo+ICsJdWludDMyX3Qgc3RhdHVzOwo+ICsJdTY0IGFkZHI7Cj4gKwo+ICsJYWRkciA9ICh1NjQp ZW50cnktPnNyY19kYXRhWzBdIDw8IDEyOwo+ICsJYWRkciB8PSAoKHU2NCllbnRyeS0+c3JjX2Rh dGFbMV0gJiAweGYpIDw8IDQ0Owo+ICsKPiArCWlmIChlbnRyeS0+dm1faWRfc3JjKSB7Cj4gKwkJ c3RhdHVzID0gUlJFRzMyKG1taHViLT52bV9sMl9wcm9fZmF1bHRfc3RhdHVzKTsKPiArCQlXUkVH MzJfUChtbWh1Yi0+dm1fbDJfcHJvX2ZhdWx0X2NudGwsIDEsIH4xKTsKPiArCX0gZWxzZSB7Cj4g KwkJc3RhdHVzID0gUlJFRzMyKGdmeGh1Yi0+dm1fbDJfcHJvX2ZhdWx0X3N0YXR1cyk7Cj4gKwkJ V1JFRzMyX1AoZ2Z4aHViLT52bV9sMl9wcm9fZmF1bHRfY250bCwgMSwgfjEpOwo+ICsJfQo+ICsK PiArCURSTV9FUlJPUigiWyVzXVZNQyBwYWdlIGZhdWx0IChzcmNfaWQ6JXUgcmluZzoldSB2bV9p ZDoldSBwYXNfaWQ6JXUpICIKPiArCQkgICJhdCBwYWdlIDB4JTAxNmxseCBmcm9tICVkXG4iCj4g KwkJICAiVk1fTDJfUFJPVEVDVElPTl9GQVVMVF9TVEFUVVM6MHglMDhYXG4iLAo+ICsJCSAgZW50 cnktPnZtX2lkX3NyYyA/ICJtbWh1YiIgOiAiZ2Z4aHViIiwKPiArCQkgIGVudHJ5LT5zcmNfaWQs IGVudHJ5LT5yaW5nX2lkLCBlbnRyeS0+dm1faWQsIGVudHJ5LT5wYXNfaWQsCj4gKwkJICBhZGRy LCBlbnRyeS0+Y2xpZW50X2lkLCBzdGF0dXMpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9pcnFfc3JjX2Z1bmNzIGdtY192OV8wX2lycV9m dW5jcyA9IHsKPiArCS5zZXQgPSBnbWNfdjlfMF92bV9mYXVsdF9pbnRlcnJ1cHRfc3RhdGUsCj4g KwkucHJvY2VzcyA9IGdtY192OV8wX3Byb2Nlc3NfaW50ZXJydXB0LAo+ICt9Owo+ICsKPiArc3Rh dGljIHZvaWQgZ21jX3Y5XzBfc2V0X2lycV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl dikKPiArewo+ICsJYWRldi0+bWMudm1fZmF1bHQubnVtX3R5cGVzID0gMTsKPiArCWFkZXYtPm1j LnZtX2ZhdWx0LmZ1bmNzID0gJmdtY192OV8wX2lycV9mdW5jczsKPiArfQo+ICsKPiArLyoKPiAr ICogR0FSVAo+ICsgKiBWTUlEIDAgaXMgdGhlIHBoeXNpY2FsIEdQVSBhZGRyZXNzZXMgYXMgdXNl ZCBieSB0aGUga2VybmVsLgo+ICsgKiBWTUlEcyAxLTE1IGFyZSB1c2VkIGZvciB1c2Vyc3BhY2Ug Y2xpZW50cyBhbmQgYXJlIGhhbmRsZWQKPiArICogYnkgdGhlIGFtZGdwdSB2bS9oc2EgY29kZS4K PiArICovCj4gKwo+ICsvKioKPiArICogZ21jX3Y5XzBfZ2FydF9mbHVzaF9ncHVfdGxiIC0gZ2Fy dCB0bGIgZmx1c2ggY2FsbGJhY2sKPiArICoKPiArICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9p bnRlcgo+ICsgKiBAdm1pZDogdm0gaW5zdGFuY2UgdG8gZmx1c2gKPiArICoKPiArICogRmx1c2gg dGhlIFRMQiBmb3IgdGhlIHJlcXVlc3RlZCBwYWdlIHRhYmxlLgo+ICsgKi8KPiArc3RhdGljIHZv aWQgZ21jX3Y5XzBfZ2FydF9mbHVzaF9ncHVfdGxiKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAo+ICsJCQkJCXVpbnQzMl90IHZtaWQpCj4gK3sKPiArCS8qIFVzZSByZWdpc3RlciAxNyBmb3Ig R0FSVCAqLwo+ICsJY29uc3QgdW5zaWduZWQgZW5nID0gMTc7Cj4gKwl1bnNpZ25lZCBpLCBqOwo+ ICsKPiArCS8qIGZsdXNoIGhkcCBjYWNoZSAqLwo+ICsJbmJpb192Nl8xX2hkcF9mbHVzaChhZGV2 KTsKPiArCj4gKwlzcGluX2xvY2soJmFkZXYtPm1jLmludmFsaWRhdGVfbG9jayk7Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IEFNREdQVV9NQVhfVk1IVUJTOyArK2kpIHsKPiArCQlzdHJ1Y3QgYW1k Z3B1X3ZtaHViICpodWIgPSAmYWRldi0+dm1odWJbaV07Cj4gKwkJdTMyIHRtcCA9IGh1Yi0+Z2V0 X2ludmFsaWRhdGVfcmVxKHZtaWQpOwo+ICsKPiArCQlXUkVHMzIoaHViLT52bV9pbnZfZW5nMF9y ZXEgKyBlbmcsIHRtcCk7Cj4gKwo+ICsJCS8qIEJ1c3kgd2FpdCBmb3IgQUNLLiovCj4gKwkJZm9y IChqID0gMDsgaiA8IDEwMDsgaisrKSB7Cj4gKwkJCXRtcCA9IFJSRUczMihodWItPnZtX2ludl9l bmcwX2FjayArIGVuZyk7Cj4gKwkJCXRtcCAmPSAxIDw8IHZtaWQ7Cj4gKwkJCWlmICh0bXApCj4g KwkJCQlicmVhazsKPiArCQkJY3B1X3JlbGF4KCk7Cj4gKwkJfQo+ICsJCWlmIChqIDwgMTAwKQo+ ICsJCQljb250aW51ZTsKPiArCj4gKwkJLyogV2FpdCBmb3IgQUNLIHdpdGggYSBkZWxheS4qLwo+ ICsJCWZvciAoaiA9IDA7IGogPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGorKykgewo+ICsJCQl0bXAg PSBSUkVHMzIoaHViLT52bV9pbnZfZW5nMF9hY2sgKyBlbmcpOwo+ICsJCQl0bXAgJj0gMSA8PCB2 bWlkOwo+ICsJCQlpZiAodG1wKQo+ICsJCQkJYnJlYWs7Cj4gKwkJCXVkZWxheSgxKTsKPiArCQl9 Cj4gKwkJaWYgKGogPCBhZGV2LT51c2VjX3RpbWVvdXQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiAr CQlEUk1fRVJST1IoIlRpbWVvdXQgd2FpdGluZyBmb3IgVk0gZmx1c2ggQUNLIVxuIik7Cj4gKwl9 Cj4gKwo+ICsJc3Bpbl91bmxvY2soJmFkZXYtPm1jLmludmFsaWRhdGVfbG9jayk7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBnbWNfdjlfMF9nYXJ0X3NldF9wdGVfcGRlIC0gdXBkYXRlIHRoZSBwYWdl IHRhYmxlcyB1c2luZyBNTUlPCj4gKyAqCj4gKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50 ZXIKPiArICogQGNwdV9wdF9hZGRyOiBjcHUgYWRkcmVzcyBvZiB0aGUgcGFnZSB0YWJsZQo+ICsg KiBAZ3B1X3BhZ2VfaWR4OiBlbnRyeSBpbiB0aGUgcGFnZSB0YWJsZSB0byB1cGRhdGUKPiArICog QGFkZHI6IGRzdCBhZGRyIHRvIHdyaXRlIGludG8gcHRlL3BkZQo+ICsgKiBAZmxhZ3M6IGFjY2Vz cyBmbGFncwo+ICsgKgo+ICsgKiBVcGRhdGUgdGhlIHBhZ2UgdGFibGVzIHVzaW5nIHRoZSBDUFUu Cj4gKyAqLwo+ICtzdGF0aWMgaW50IGdtY192OV8wX2dhcnRfc2V0X3B0ZV9wZGUoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJCQkJdm9pZCAqY3B1X3B0X2FkZHIsCj4gKwkJCQkJdWlu dDMyX3QgZ3B1X3BhZ2VfaWR4LAo+ICsJCQkJCXVpbnQ2NF90IGFkZHIsCj4gKwkJCQkJdWludDY0 X3QgZmxhZ3MpCj4gK3sKPiArCXZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKiljcHVfcHRfYWRk cjsKPiArCXVpbnQ2NF90IHZhbHVlOwo+ICsKPiArCS8qCj4gKwkgKiBQVEUgZm9ybWF0IG9uIFZF R0EgMTA6Cj4gKwkgKiA2Mzo1OSByZXNlcnZlZAo+ICsJICogNTg6NTcgbXR5cGUKPiArCSAqIDU2 IEYKPiArCSAqIDU1IEwKPiArCSAqIDU0IFAKPiArCSAqIDUzIFNXCj4gKwkgKiA1MiBUCj4gKwkg KiA1MDo0OCByZXNlcnZlZAo+ICsJICogNDc6MTIgNGsgcGh5c2ljYWwgcGFnZSBiYXNlIGFkZHJl c3MKPiArCSAqIDExOjcgZnJhZ21lbnQKPiArCSAqIDYgd3JpdGUKPiArCSAqIDUgcmVhZAo+ICsJ ICogNCBleGUKPiArCSAqIDMgWgo+ICsJICogMiBzbm9vcGVkCj4gKwkgKiAxIHN5c3RlbQo+ICsJ ICogMCB2YWxpZAo+ICsJICoKPiArCSAqIFBERSBmb3JtYXQgb24gVkVHQSAxMDoKPiArCSAqIDYz OjU5IGJsb2NrIGZyYWdtZW50IHNpemUKPiArCSAqIDU4OjU1IHJlc2VydmVkCj4gKwkgKiA1NCBQ Cj4gKwkgKiA1Mzo0OCByZXNlcnZlZAo+ICsJICogNDc6NiBwaHlzaWNhbCBiYXNlIGFkZHJlc3Mg b2YgUEQgb3IgUFRFCj4gKwkgKiA1OjMgcmVzZXJ2ZWQKPiArCSAqIDIgQwo+ICsJICogMSBzeXN0 ZW0KPiArCSAqIDAgdmFsaWQKPiArCSAqLwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgZm9sbG93aW5n IGlzIGZvciBQVEUgb25seS4gR0FSVCBkb2VzIG5vdCBoYXZlIFBERXMuCj4gKwkqLwo+ICsJdmFs dWUgPSBhZGRyICYgMHgwMDAwRkZGRkZGRkZGMDAwVUxMOwo+ICsJdmFsdWUgfD0gZmxhZ3M7Cj4g Kwl3cml0ZXEodmFsdWUsIHB0ciArIChncHVfcGFnZV9pZHggKiA4KSk7Cj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIHVpbnQ2NF90IGdtY192OV8wX2dldF92bV9wdGVfZmxhZ3Moc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJCQkJCXVpbnQzMl90IGZsYWdzKQo+ICsKPiAr ewo+ICsJdWludDY0X3QgcHRlX2ZsYWcgPSAwOwo+ICsKPiArCWlmIChmbGFncyAmIEFNREdQVV9W TV9QQUdFX0VYRUNVVEFCTEUpCj4gKwkJcHRlX2ZsYWcgfD0gQU1ER1BVX1BURV9FWEVDVVRBQkxF Owo+ICsJaWYgKGZsYWdzICYgQU1ER1BVX1ZNX1BBR0VfUkVBREFCTEUpCj4gKwkJcHRlX2ZsYWcg fD0gQU1ER1BVX1BURV9SRUFEQUJMRTsKPiArCWlmIChmbGFncyAmIEFNREdQVV9WTV9QQUdFX1dS SVRFQUJMRSkKPiArCQlwdGVfZmxhZyB8PSBBTURHUFVfUFRFX1dSSVRFQUJMRTsKPiArCj4gKwlz d2l0Y2ggKGZsYWdzICYgQU1ER1BVX1ZNX01UWVBFX01BU0spIHsKPiArCWNhc2UgQU1ER1BVX1ZN X01UWVBFX0RFRkFVTFQ6Cj4gKwkJcHRlX2ZsYWcgfD0gQU1ER1BVX1BURV9NVFlQRShNVFlQRV9O Qyk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEFNREdQVV9WTV9NVFlQRV9OQzoKPiArCQlwdGVfZmxh ZyB8PSBBTURHUFVfUFRFX01UWVBFKE1UWVBFX05DKTsKPiArCQlicmVhazsKPiArCWNhc2UgQU1E R1BVX1ZNX01UWVBFX1dDOgo+ICsJCXB0ZV9mbGFnIHw9IEFNREdQVV9QVEVfTVRZUEUoTVRZUEVf V0MpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBBTURHUFVfVk1fTVRZUEVfQ0M6Cj4gKwkJcHRlX2Zs YWcgfD0gQU1ER1BVX1BURV9NVFlQRShNVFlQRV9DQyk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEFN REdQVV9WTV9NVFlQRV9VQzoKPiArCQlwdGVfZmxhZyB8PSBBTURHUFVfUFRFX01UWVBFKE1UWVBF X1VDKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcHRlX2ZsYWcgfD0gQU1ER1BVX1BU RV9NVFlQRShNVFlQRV9OQyk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGZsYWdzICYg QU1ER1BVX1ZNX1BBR0VfUFJUKQo+ICsJCXB0ZV9mbGFnIHw9IEFNREdQVV9QVEVfUFJUOwo+ICsK PiArCXJldHVybiBwdGVfZmxhZzsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRn cHVfZ2FydF9mdW5jcyBnbWNfdjlfMF9nYXJ0X2Z1bmNzID0gewo+ICsJLmZsdXNoX2dwdV90bGIg PSBnbWNfdjlfMF9nYXJ0X2ZsdXNoX2dwdV90bGIsCj4gKwkuc2V0X3B0ZV9wZGUgPSBnbWNfdjlf MF9nYXJ0X3NldF9wdGVfcGRlLAo+ICsJLmdldF92bV9wdGVfZmxhZ3MgPSBnbWNfdjlfMF9nZXRf dm1fcHRlX2ZsYWdzCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBnbWNfdjlfMF9zZXRfZ2FydF9m dW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiArewo+ICsJaWYgKGFkZXYtPmdhcnQu Z2FydF9mdW5jcyA9PSBOVUxMKQo+ICsJCWFkZXYtPmdhcnQuZ2FydF9mdW5jcyA9ICZnbWNfdjlf MF9nYXJ0X2Z1bmNzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTY0IGdtY192OV8wX2FkanVzdF9tY19h ZGRyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1NjQgbWNfYWRkcikKPiArewo+ICsJcmV0 dXJuIGFkZXYtPnZtX21hbmFnZXIudnJhbV9iYXNlX29mZnNldCArIG1jX2FkZHIgLSBhZGV2LT5t Yy52cmFtX3N0YXJ0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9tY19m dW5jcyBnbWNfdjlfMF9tY19mdW5jcyA9IHsKPiArCS5hZGp1c3RfbWNfYWRkciA9IGdtY192OV8w X2FkanVzdF9tY19hZGRyLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgZ21jX3Y5XzBfc2V0X21j X2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICt7Cj4gKwlhZGV2LT5tYy5tY19m dW5jcyA9ICZnbWNfdjlfMF9tY19mdW5jczsKPiArfQo+ICsKPiArc3RhdGljIGludCBnbWNfdjlf MF9lYXJseV9pbml0KHZvaWQgKmhhbmRsZSkKPiArewo+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4gKwo+ICsJZ21jX3Y5XzBf c2V0X2dhcnRfZnVuY3MoYWRldik7Cj4gKwlnbWNfdjlfMF9zZXRfbWNfZnVuY3MoYWRldik7Cj4g KwlnbWNfdjlfMF9zZXRfaXJxX2Z1bmNzKGFkZXYpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGdtY192OV8wX2xhdGVfaW5pdCh2b2lkICpoYW5kbGUpCj4gK3sKPiAr CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFu ZGxlOwo+ICsJcmV0dXJuIGFtZGdwdV9pcnFfZ2V0KGFkZXYsICZhZGV2LT5tYy52bV9mYXVsdCwg MCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdtY192OV8wX3ZyYW1fZ3R0X2xvY2F0aW9uKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICsJCQkJCXN0cnVjdCBhbWRncHVfbWMgKm1jKQo+ ICt7Cj4gKwl1NjQgYmFzZSA9IG1taHViX3YxXzBfZ2V0X2ZiX2xvY2F0aW9uKGFkZXYpOwo+ICsJ YW1kZ3B1X3ZyYW1fbG9jYXRpb24oYWRldiwgJmFkZXYtPm1jLCBiYXNlKTsKPiArCWFkZXYtPm1j Lmd0dF9iYXNlX2FsaWduID0gMDsKPiArCWFtZGdwdV9ndHRfbG9jYXRpb24oYWRldiwgbWMpOwo+ ICt9Cj4gKwo+ICsvKioKPiArICogZ21jX3Y5XzBfbWNfaW5pdCAtIGluaXRpYWxpemUgdGhlIG1l bW9yeSBjb250cm9sbGVyIGRyaXZlciBwYXJhbXMKPiArICoKPiArICogQGFkZXY6IGFtZGdwdV9k ZXZpY2UgcG9pbnRlcgo+ICsgKgo+ICsgKiBMb29rIHVwIHRoZSBhbW91bnQgb2YgdnJhbSwgdnJh bSB3aWR0aCwgYW5kIGRlY2lkZSBob3cgdG8gcGxhY2UKPiArICogdnJhbSBhbmQgZ2FydCB3aXRo aW4gdGhlIEdQVSdzIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuCj4gKyAqIFJldHVybnMgMCBmb3Ig c3VjY2Vzcy4KPiArICovCj4gK3N0YXRpYyBpbnQgZ21jX3Y5XzBfbWNfaW5pdChzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKPiArewo+ICsJdTMyIHRtcDsKPiArCWludCBjaGFuc2l6ZSwgbnVt Y2hhbjsKPiArCj4gKwkvKiBoYm0gbWVtb3J5IGNoYW5uZWwgc2l6ZSAqLwo+ICsJY2hhbnNpemUg PSAxMjg7Cj4gKwo+ICsJdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoREYsIDAsIG1tREZf Q1NfQU9OMF9EcmFtQmFzZUFkZHJlc3MwKSk7Cj4gKwl0bXAgJj0gREZfQ1NfQU9OMF9EcmFtQmFz ZUFkZHJlc3MwX19JbnRMdk51bUNoYW5fTUFTSzsKPiArCXRtcCA+Pj0gREZfQ1NfQU9OMF9EcmFt QmFzZUFkZHJlc3MwX19JbnRMdk51bUNoYW5fX1NISUZUOwo+ICsJc3dpdGNoICh0bXApIHsKPiAr CWNhc2UgMDoKPiArCWRlZmF1bHQ6Cj4gKwkJbnVtY2hhbiA9IDE7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIDE6Cj4gKwkJbnVtY2hhbiA9IDI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDI6Cj4gKwkJbnVt Y2hhbiA9IDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDM6Cj4gKwkJbnVtY2hhbiA9IDQ7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIDQ6Cj4gKwkJbnVtY2hhbiA9IDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNl IDU6Cj4gKwkJbnVtY2hhbiA9IDg7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDY6Cj4gKwkJbnVtY2hh biA9IDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDc6Cj4gKwkJbnVtY2hhbiA9IDE2Owo+ICsJCWJy ZWFrOwo+ICsJY2FzZSA4Ogo+ICsJCW51bWNoYW4gPSAyOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJ YWRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKPiArCj4gKwkvKiBDb3Vs ZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwo+ICsJYWRldi0+bWMuYXBlcl9iYXNlID0gcGNpX3Jl c291cmNlX3N0YXJ0KGFkZXYtPnBkZXYsIDApOwo+ICsJYWRldi0+bWMuYXBlcl9zaXplID0gcGNp X3Jlc291cmNlX2xlbihhZGV2LT5wZGV2LCAwKTsKPiArCS8qIHNpemUgaW4gTUIgb24gc2kgKi8K PiArCWFkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9Cj4gKwkJbmJpb192Nl8xX2dldF9tZW1zaXplKGFk ZXYpICogMTAyNFVMTCAqIDEwMjRVTEw7Cj4gKwlhZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IGFk ZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKPiArCWFkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplID0gYWRl di0+bWMuYXBlcl9zaXplOwo+ICsKPiArCS8qIEluIGNhc2UgdGhlIFBDSSBCQVIgaXMgbGFyZ2Vy IHRoYW4gdGhlIGFjdHVhbCBhbW91bnQgb2YgdnJhbSAqLwo+ICsJaWYgKGFkZXYtPm1jLnZpc2li bGVfdnJhbV9zaXplID4gYWRldi0+bWMucmVhbF92cmFtX3NpemUpCj4gKwkJYWRldi0+bWMudmlz aWJsZV92cmFtX3NpemUgPSBhZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZTsKPiArCj4gKwkvKiB1bmxl c3MgdGhlIHVzZXIgaGFkIG92ZXJyaWRkZW4gaXQsIHNldCB0aGUgZ2FydAo+ICsJICogc2l6ZSBl cXVhbCB0byB0aGUgMTAyNCBvciB2cmFtLCB3aGljaGV2ZXIgaXMgbGFyZ2VyLgo+ICsJICovCj4g KwlpZiAoYW1kZ3B1X2dhcnRfc2l6ZSA9PSAtMSkKPiArCQlhZGV2LT5tYy5ndHRfc2l6ZSA9IG1h eCgoMTAyNFVMTCA8PCAyMCksIGFkZXYtPm1jLm1jX3ZyYW1fc2l6ZSk7Cj4gKwllbHNlCj4gKwkJ YWRldi0+bWMuZ3R0X3NpemUgPSAodWludDY0X3QpYW1kZ3B1X2dhcnRfc2l6ZSA8PCAyMDsKPiAr Cj4gKwlnbWNfdjlfMF92cmFtX2d0dF9sb2NhdGlvbihhZGV2LCAmYWRldi0+bWMpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdtY192OV8wX2dhcnRfaW5pdChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiArewo+ICsJaW50IHI7Cj4gKwo+ICsJaWYgKGFkZXYt PmdhcnQucm9iaikgewo+ICsJCVdBUk4oMSwgIlZFR0ExMCBQQ0lFIEdBUlQgYWxyZWFkeSBpbml0 aWFsaXplZFxuIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwkvKiBJbml0aWFsaXplIGNvbW1v biBnYXJ0IHN0cnVjdHVyZSAqLwo+ICsJciA9IGFtZGdwdV9nYXJ0X2luaXQoYWRldik7Cj4gKwlp ZiAocikKPiArCQlyZXR1cm4gcjsKPiArCWFkZXYtPmdhcnQudGFibGVfc2l6ZSA9IGFkZXYtPmdh cnQubnVtX2dwdV9wYWdlcyAqIDg7Cj4gKwlhZGV2LT5nYXJ0LmdhcnRfcHRlX2ZsYWdzID0gQU1E R1BVX1BURV9NVFlQRShNVFlQRV9VQykgfAo+ICsJCQkJIEFNREdQVV9QVEVfRVhFQ1VUQUJMRTsK PiArCXJldHVybiBhbWRncHVfZ2FydF90YWJsZV92cmFtX2FsbG9jKGFkZXYpOwo+ICt9Cj4gKwo+ ICsvKgo+ICsgKiB2bQo+ICsgKiBWTUlEIDAgaXMgdGhlIHBoeXNpY2FsIEdQVSBhZGRyZXNzZXMg YXMgdXNlZCBieSB0aGUga2VybmVsLgo+ICsgKiBWTUlEcyAxLTE1IGFyZSB1c2VkIGZvciB1c2Vy c3BhY2UgY2xpZW50cyBhbmQgYXJlIGhhbmRsZWQKPiArICogYnkgdGhlIGFtZGdwdSB2bS9oc2Eg Y29kZS4KPiArICovCj4gKy8qKgo+ICsgKiBnbWNfdjlfMF92bV9pbml0IC0gdm0gaW5pdCBjYWxs YmFjawo+ICsgKgo+ICsgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCj4gKyAqCj4gKyAq IEluaXRzIHZlZ2ExMCBzcGVjaWZpYyB2bSBwYXJhbWV0ZXJzIChudW1iZXIgb2YgVk1zLCBiYXNl IG9mIHZyYW0gZm9yCj4gKyAqIFZNSURzIDEtMTUpICh2ZWdhMTApLgo+ICsgKiBSZXR1cm5zIDAg Zm9yIHN1Y2Nlc3MuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGdtY192OV8wX3ZtX2luaXQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gK3sKPiArCS8qCj4gKwkgKiBudW1iZXIgb2YgVk1zCj4g KwkgKiBWTUlEIDAgaXMgcmVzZXJ2ZWQgZm9yIFN5c3RlbQo+ICsJICogYW1kZ3B1IGdyYXBoaWNz L2NvbXB1dGUgd2lsbCB1c2UgVk1JRHMgMS03Cj4gKwkgKiBhbWRrZmQgd2lsbCB1c2UgVk1JRHMg OC0xNQo+ICsJICovCj4gKwlhZGV2LT52bV9tYW5hZ2VyLm51bV9pZHMgPSBBTURHUFVfTlVNX09G X1ZNSURTOwo+ICsJYW1kZ3B1X3ZtX21hbmFnZXJfaW5pdChhZGV2KTsKPiArCj4gKwkvKiBiYXNl IG9mZnNldCBvZiB2cmFtIHBhZ2VzICovCj4gKwkvKlhYWCBUaGlzIHZhbHVlIGlzIG5vdCB6ZXJv IGZvciBBUFUqLwo+ICsJYWRldi0+dm1fbWFuYWdlci52cmFtX2Jhc2Vfb2Zmc2V0ID0gMDsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGdtY192OV8wX3ZtX2ZpbmkgLSB2 bSBmaW5pIGNhbGxiYWNrCj4gKyAqCj4gKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIK PiArICoKPiArICogVGVhciBkb3duIGFueSBhc2ljIHNwZWNpZmljIFZNIHNldHVwLgo+ICsgKi8K PiArc3RhdGljIHZvaWQgZ21jX3Y5XzBfdm1fZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl dikKPiArewo+ICsJcmV0dXJuOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdtY192OV8wX3N3X2lu aXQodm9pZCAqaGFuZGxlKQo+ICt7Cj4gKwlpbnQgcjsKPiArCWludCBkbWFfYml0czsKPiArCXN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxl Owo+ICsKPiArCXNwaW5fbG9ja19pbml0KCZhZGV2LT5tYy5pbnZhbGlkYXRlX2xvY2spOwo+ICsK PiArCWlmIChhZGV2LT5mbGFncyAmIEFNRF9JU19BUFUpIHsKPiArCQlhZGV2LT5tYy52cmFtX3R5 cGUgPSBBTURHUFVfVlJBTV9UWVBFX1VOS05PV047Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIFhYWCBE b24ndCBrbm93IGhvdyB0byBnZXQgVlJBTSB0eXBlIHlldC4gKi8KPiArCQlhZGV2LT5tYy52cmFt X3R5cGUgPSBBTURHUFVfVlJBTV9UWVBFX0hCTTsKPiArCX0KPiArCj4gKwkvKiBUaGlzIGludGVy cnVwdCBpcyBWTUMgcGFnZSBmYXVsdC4qLwo+ICsJciA9IGFtZGdwdV9pcnFfYWRkX2lkKGFkZXYs IEFNREdQVV9JSF9DTElFTlRJRF9WTUMsIDAsCj4gKwkJCQkmYWRldi0+bWMudm1fZmF1bHQpOwo+ ICsKPiArCWlmIChyKQo+ICsJCXJldHVybiByOwo+ICsKPiArCS8qIEFkanVzdCBWTSBzaXplIGhl cmUuCj4gKwkgKiBDdXJyZW50bHkgZGVmYXVsdCB0byA2NEdCICgoMTYgPDwgMjApIDRrIHBhZ2Vz KS4KPiArCSAqIE1heCBHUFVWTSBzaXplIGlzIDQ4IGJpdHMuCj4gKwkgKi8KPiArCWFkZXYtPnZt X21hbmFnZXIubWF4X3BmbiA9IGFtZGdwdV92bV9zaXplIDw8IDE4Owo+ICsKPiArCS8qIFNldCB0 aGUgaW50ZXJuYWwgTUMgYWRkcmVzcyBtYXNrCj4gKwkgKiBUaGlzIGlzIHRoZSBtYXggYWRkcmVz cyBvZiB0aGUgR1BVJ3MKPiArCSAqIGludGVybmFsIGFkZHJlc3Mgc3BhY2UuCj4gKwkgKi8KPiAr CWFkZXYtPm1jLm1jX21hc2sgPSAweGZmZmZmZmZmZmZmZlVMTDsgLyogNDggYml0IE1DICovCj4g Kwo+ICsJLyogc2V0IERNQSBtYXNrICsgbmVlZF9kbWEzMiBmbGFncy4KPiArCSAqIFBDSUUgLSBj YW4gaGFuZGxlIDQ0LWJpdHMuCj4gKwkgKiBJR1AgLSBjYW4gaGFuZGxlIDQ0LWJpdHMKPiArCSAq IFBDSSAtIGRtYTMyIGZvciBsZWdhY3kgcGNpIGdhcnQsIDQ0IGJpdHMgb24gdmVnYTEwCj4gKwkg Ki8KPiArCWFkZXYtPm5lZWRfZG1hMzIgPSBmYWxzZTsKPiArCWRtYV9iaXRzID0gYWRldi0+bmVl ZF9kbWEzMiA/IDMyIDogNDQ7Cj4gKwlyID0gcGNpX3NldF9kbWFfbWFzayhhZGV2LT5wZGV2LCBE TUFfQklUX01BU0soZG1hX2JpdHMpKTsKPiArCWlmIChyKSB7Cj4gKwkJYWRldi0+bmVlZF9kbWEz MiA9IHRydWU7Cj4gKwkJZG1hX2JpdHMgPSAzMjsKPiArCQlwcmludGsoS0VSTl9XQVJOSU5HICJh bWRncHU6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iKTsKPiArCX0KPiArCXIgPSBwY2lf c2V0X2NvbnNpc3RlbnRfZG1hX21hc2soYWRldi0+cGRldiwgRE1BX0JJVF9NQVNLKGRtYV9iaXRz KSk7Cj4gKwlpZiAocikgewo+ICsJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhhZGV2LT5w ZGV2LCBETUFfQklUX01BU0soMzIpKTsKPiArCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbWRncHU6 IE5vIGNvaGVyZW50IERNQSBhdmFpbGFibGUuXG4iKTsKPiArCX0KPiArCj4gKwlyID0gZ21jX3Y5 XzBfbWNfaW5pdChhZGV2KTsKPiArCWlmIChyKQo+ICsJCXJldHVybiByOwo+ICsKPiArCS8qIE1l bW9yeSBtYW5hZ2VyICovCj4gKwlyID0gYW1kZ3B1X2JvX2luaXQoYWRldik7Cj4gKwlpZiAocikK PiArCQlyZXR1cm4gcjsKPiArCj4gKwlyID0gZ21jX3Y5XzBfZ2FydF9pbml0KGFkZXYpOwo+ICsJ aWYgKHIpCj4gKwkJcmV0dXJuIHI7Cj4gKwo+ICsJaWYgKCFhZGV2LT52bV9tYW5hZ2VyLmVuYWJs ZWQpIHsKPiArCQlyID0gZ21jX3Y5XzBfdm1faW5pdChhZGV2KTsKPiArCQlpZiAocikgewo+ICsJ CQlkZXZfZXJyKGFkZXYtPmRldiwgInZtIG1hbmFnZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkICgl ZCkuXG4iLCByKTsKPiArCQkJcmV0dXJuIHI7Cj4gKwkJfQo+ICsJCWFkZXYtPnZtX21hbmFnZXIu ZW5hYmxlZCA9IHRydWU7Cj4gKwl9Cj4gKwlyZXR1cm4gcjsKPiArfQo+ICsKPiArLyoqCj4gKyAq IGdtY192OF8wX2dhcnRfZmluaSAtIHZtIGZpbmkgY2FsbGJhY2sKPiArICoKPiArICogQGFkZXY6 IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgo+ICsgKgo+ICsgKiBUZWFycyBkb3duIHRoZSBkcml2ZXIg R0FSVC9WTSBzZXR1cCAoQ0lLKS4KPiArICovCj4gK3N0YXRpYyB2b2lkIGdtY192OV8wX2dhcnRf ZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiArewo+ICsJYW1kZ3B1X2dhcnRfdGFi bGVfdnJhbV9mcmVlKGFkZXYpOwo+ICsJYW1kZ3B1X2dhcnRfZmluaShhZGV2KTsKPiArfQo+ICsK PiArc3RhdGljIGludCBnbWNfdjlfMF9zd19maW5pKHZvaWQgKmhhbmRsZSkKPiArewo+ICsJc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7 Cj4gKwo+ICsJaWYgKGFkZXYtPnZtX21hbmFnZXIuZW5hYmxlZCkgewo+ICsJCWFtZGdwdV92bV9t YW5hZ2VyX2ZpbmkoYWRldik7Cj4gKwkJZ21jX3Y5XzBfdm1fZmluaShhZGV2KTsKPiArCQlhZGV2 LT52bV9tYW5hZ2VyLmVuYWJsZWQgPSBmYWxzZTsKPiArCX0KPiArCWdtY192OV8wX2dhcnRfZmlu aShhZGV2KTsKPiArCWFtZGdwdV9nZW1fZm9yY2VfcmVsZWFzZShhZGV2KTsKPiArCWFtZGdwdV9i b19maW5pKGFkZXYpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBn bWNfdjlfMF9pbml0X2dvbGRlbl9yZWdpc3RlcnMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp Cj4gK3sKPiArCXN3aXRjaCAoYWRldi0+YXNpY190eXBlKSB7Cj4gKwljYXNlIENISVBfVkVHQTEw Ogo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlicmVhazsKPiArCX0KPiArfQo+ICsKPiAr LyoqCj4gKyAqIGdtY192OV8wX2dhcnRfZW5hYmxlIC0gZ2FydCBlbmFibGUKPiArICoKPiArICog QGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgo+ICsgKi8KPiArc3RhdGljIGludCBnbWNfdjlf MF9nYXJ0X2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiArewo+ICsJaW50IHI7 Cj4gKwlib29sIHZhbHVlOwo+ICsJdTMyIHRtcDsKPiArCj4gKwlhbWRncHVfcHJvZ3JhbV9yZWdp c3Rlcl9zZXF1ZW5jZShhZGV2LAo+ICsJCWdvbGRlbl9zZXR0aW5nc192ZWdhMTBfaGRwLAo+ICsJ CShjb25zdCB1MzIpQVJSQVlfU0laRShnb2xkZW5fc2V0dGluZ3NfdmVnYTEwX2hkcCkpOwo+ICsK PiArCWlmIChhZGV2LT5nYXJ0LnJvYmogPT0gTlVMTCkgewo+ICsJCWRldl9lcnIoYWRldi0+ZGV2 LCAiTm8gVlJBTSBvYmplY3QgZm9yIFBDSUUgR0FSVC5cbiIpOwo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsJciA9IGFtZGdwdV9nYXJ0X3RhYmxlX3ZyYW1fcGluKGFkZXYpOwo+ICsJaWYg KHIpCj4gKwkJcmV0dXJuIHI7Cj4gKwo+ICsJLyogQWZ0ZXIgSERQIGlzIGluaXRpYWxpemVkLCBm bHVzaCBIRFAuKi8KPiArCW5iaW9fdjZfMV9oZHBfZmx1c2goYWRldik7Cj4gKwo+ICsJciA9IGdm eGh1Yl92MV8wX2dhcnRfZW5hYmxlKGFkZXYpOwo+ICsJaWYgKHIpCj4gKwkJcmV0dXJuIHI7Cj4g Kwo+ICsJciA9IG1taHViX3YxXzBfZ2FydF9lbmFibGUoYWRldik7Cj4gKwlpZiAocikKPiArCQly ZXR1cm4gcjsKPiArCj4gKwl0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChIRFAsIDAsIG1t SERQX01JU0NfQ05UTCkpOwo+ICsJdG1wIHw9IEhEUF9NSVNDX0NOVExfX0ZMVVNIX0lOVkFMSURB VEVfQ0FDSEVfTUFTSzsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEhEUCwgMCwgbW1IRFBf TUlTQ19DTlRMKSwgdG1wKTsKPiArCj4gKwl0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChI RFAsIDAsIG1tSERQX0hPU1RfUEFUSF9DTlRMKSk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNF VChIRFAsIDAsIG1tSERQX0hPU1RfUEFUSF9DTlRMKSwgdG1wKTsKPiArCj4gKwo+ICsJaWYgKGFt ZGdwdV92bV9mYXVsdF9zdG9wID09IEFNREdQVV9WTV9GQVVMVF9TVE9QX0FMV0FZUykKPiArCQl2 YWx1ZSA9IGZhbHNlOwo+ICsJZWxzZQo+ICsJCXZhbHVlID0gdHJ1ZTsKPiArCj4gKwlnZnhodWJf djFfMF9zZXRfZmF1bHRfZW5hYmxlX2RlZmF1bHQoYWRldiwgdmFsdWUpOwo+ICsJbW1odWJfdjFf MF9zZXRfZmF1bHRfZW5hYmxlX2RlZmF1bHQoYWRldiwgdmFsdWUpOwo+ICsKPiArCWdtY192OV8w X2dhcnRfZmx1c2hfZ3B1X3RsYihhZGV2LCAwKTsKPiArCj4gKwlEUk1fSU5GTygiUENJRSBHQVJU IG9mICV1TSBlbmFibGVkICh0YWJsZSBhdCAweCUwMTZsbFgpLlxuIiwKPiArCQkgKHVuc2lnbmVk KShhZGV2LT5tYy5ndHRfc2l6ZSA+PiAyMCksCj4gKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpYWRl di0+Z2FydC50YWJsZV9hZGRyKTsKPiArCWFkZXYtPmdhcnQucmVhZHkgPSB0cnVlOwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ21jX3Y5XzBfaHdfaW5pdCh2b2lkICpoYW5k bGUpCj4gK3sKPiArCWludCByOwo+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4gKwo+ICsJLyogVGhlIHNlcXVlbmNlIG9mIHRo ZXNlIHR3byBmdW5jdGlvbiBjYWxscyBtYXR0ZXJzLiovCj4gKwlnbWNfdjlfMF9pbml0X2dvbGRl bl9yZWdpc3RlcnMoYWRldik7Cj4gKwo+ICsJciA9IGdtY192OV8wX2dhcnRfZW5hYmxlKGFkZXYp Owo+ICsKPiArCXJldHVybiByOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZ21jX3Y5XzBfZ2FydF9k aXNhYmxlIC0gZ2FydCBkaXNhYmxlCj4gKyAqCj4gKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBv aW50ZXIKPiArICoKPiArICogVGhpcyBkaXNhYmxlcyBhbGwgVk0gcGFnZSB0YWJsZS4KPiArICov Cj4gK3N0YXRpYyB2b2lkIGdtY192OV8wX2dhcnRfZGlzYWJsZShzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldikKPiArewo+ICsJZ2Z4aHViX3YxXzBfZ2FydF9kaXNhYmxlKGFkZXYpOwo+ICsJbW1o dWJfdjFfMF9nYXJ0X2Rpc2FibGUoYWRldik7Cj4gKwlhbWRncHVfZ2FydF90YWJsZV92cmFtX3Vu cGluKGFkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdtY192OV8wX2h3X2Zpbmkodm9pZCAq aGFuZGxlKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqKWhhbmRsZTsKPiArCj4gKwlhbWRncHVfaXJxX3B1dChhZGV2LCAmYWRldi0+ bWMudm1fZmF1bHQsIDApOwo+ICsJZ21jX3Y5XzBfZ2FydF9kaXNhYmxlKGFkZXYpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdtY192OV8wX3N1c3BlbmQodm9pZCAq aGFuZGxlKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqKWhhbmRsZTsKPiArCj4gKwlpZiAoYWRldi0+dm1fbWFuYWdlci5lbmFibGVk KSB7Cj4gKwkJZ21jX3Y5XzBfdm1fZmluaShhZGV2KTsKPiArCQlhZGV2LT52bV9tYW5hZ2VyLmVu YWJsZWQgPSBmYWxzZTsKPiArCX0KPiArCWdtY192OV8wX2h3X2ZpbmkoYWRldik7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ21jX3Y5XzBfcmVzdW1lKHZvaWQgKmhh bmRsZSkKPiArewo+ICsJaW50IHI7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPiArCj4gKwlyID0gZ21jX3Y5XzBfaHdfaW5p dChhZGV2KTsKPiArCWlmIChyKQo+ICsJCXJldHVybiByOwo+ICsKPiArCWlmICghYWRldi0+dm1f bWFuYWdlci5lbmFibGVkKSB7Cj4gKwkJciA9IGdtY192OV8wX3ZtX2luaXQoYWRldik7Cj4gKwkJ aWYgKHIpIHsKPiArCQkJZGV2X2VycihhZGV2LT5kZXYsCj4gKwkJCQkidm0gbWFuYWdlciBpbml0 aWFsaXphdGlvbiBmYWlsZWQgKCVkKS5cbiIsIHIpOwo+ICsJCQlyZXR1cm4gcjsKPiArCQl9Cj4g KwkJYWRldi0+dm1fbWFuYWdlci5lbmFibGVkID0gdHJ1ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4g cjsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZ21jX3Y5XzBfaXNfaWRsZSh2b2lkICpoYW5kbGUp Cj4gK3sKPiArCS8qIE1DIGlzIGFsd2F5cyByZWFkeSBpbiBHTUMgdjkuKi8KPiArCXJldHVybiB0 cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdtY192OV8wX3dhaXRfZm9yX2lkbGUodm9pZCAq aGFuZGxlKQo+ICt7Cj4gKwkvKiBUaGVyZSBpcyBubyBuZWVkIHRvIHdhaXQgZm9yIE1DIGlkbGUg aW4gR01DIHY5LiovCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnbWNfdjlf MF9zb2Z0X3Jlc2V0KHZvaWQgKmhhbmRsZSkKPiArewo+ICsJLyogWFhYIGZvciBlbXVsYXRpb24u Ki8KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdtY192OV8wX3NldF9jbG9j a2dhdGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCj4gKwkJCQkJZW51bSBhbWRfY2xvY2tnYXRpbmdf c3RhdGUgc3RhdGUpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdt Y192OV8wX3NldF9wb3dlcmdhdGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCj4gKwkJCQkJZW51bSBh bWRfcG93ZXJnYXRpbmdfc3RhdGUgc3RhdGUpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtjb25zdCBzdHJ1Y3QgYW1kX2lwX2Z1bmNzIGdtY192OV8wX2lwX2Z1bmNzID0gewo+ICsJLm5h bWUgPSAiZ21jX3Y5XzAiLAo+ICsJLmVhcmx5X2luaXQgPSBnbWNfdjlfMF9lYXJseV9pbml0LAo+ ICsJLmxhdGVfaW5pdCA9IGdtY192OV8wX2xhdGVfaW5pdCwKPiArCS5zd19pbml0ID0gZ21jX3Y5 XzBfc3dfaW5pdCwKPiArCS5zd19maW5pID0gZ21jX3Y5XzBfc3dfZmluaSwKPiArCS5od19pbml0 ID0gZ21jX3Y5XzBfaHdfaW5pdCwKPiArCS5od19maW5pID0gZ21jX3Y5XzBfaHdfZmluaSwKPiAr CS5zdXNwZW5kID0gZ21jX3Y5XzBfc3VzcGVuZCwKPiArCS5yZXN1bWUgPSBnbWNfdjlfMF9yZXN1 bWUsCj4gKwkuaXNfaWRsZSA9IGdtY192OV8wX2lzX2lkbGUsCj4gKwkud2FpdF9mb3JfaWRsZSA9 IGdtY192OV8wX3dhaXRfZm9yX2lkbGUsCj4gKwkuc29mdF9yZXNldCA9IGdtY192OV8wX3NvZnRf cmVzZXQsCj4gKwkuc2V0X2Nsb2NrZ2F0aW5nX3N0YXRlID0gZ21jX3Y5XzBfc2V0X2Nsb2NrZ2F0 aW5nX3N0YXRlLAo+ICsJLnNldF9wb3dlcmdhdGluZ19zdGF0ZSA9IGdtY192OV8wX3NldF9wb3dl cmdhdGluZ19zdGF0ZSwKPiArfTsKPiArCj4gK2NvbnN0IHN0cnVjdCBhbWRncHVfaXBfYmxvY2tf dmVyc2lvbiBnbWNfdjlfMF9pcF9ibG9jayA9Cj4gK3sKPiArCS50eXBlID0gQU1EX0lQX0JMT0NL X1RZUEVfR01DLAo+ICsJLm1ham9yID0gOSwKPiArCS5taW5vciA9IDAsCj4gKwkucmV2ID0gMCwK PiArCS5mdW5jcyA9ICZnbWNfdjlfMF9pcF9mdW5jcywKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ21jX3Y5XzAuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2dtY192OV8wLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu LmIwMzBjYTUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZ21jX3Y5XzAuaAo+IEBAIC0wLDAgKzEsMzAgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IDIw MTYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoK PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4g KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiArICogT1RIRVIg REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19H TUNfVjlfMF9IX18KPiArI2RlZmluZSBfX0dNQ19WOV8wX0hfXwo+ICsKPiArZXh0ZXJuIGNvbnN0 IHN0cnVjdCBhbWRfaXBfZnVuY3MgZ21jX3Y5XzBfaXBfZnVuY3M7Cj4gK2V4dGVybiBjb25zdCBz dHJ1Y3QgYW1kZ3B1X2lwX2Jsb2NrX3ZlcnNpb24gZ21jX3Y5XzBfaXBfYmxvY2s7Cj4gKwo+ICsj ZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbW1odWJfdjFf MC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbW1odWJfdjFfMC5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5iMWUwZTZiCj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21taHViX3YxXzAuYwo+IEBAIC0wLDAgKzEs NTg1IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMs IEluYy4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4g KyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihT KSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgo+ICsgKiBPVEhFUiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwK PiArICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K PiArICoKPiArICovCj4gKyNpbmNsdWRlICJhbWRncHUuaCIKPiArI2luY2x1ZGUgIm1taHViX3Yx XzAuaCIKPiArCj4gKyNpbmNsdWRlICJ2ZWdhMTAvc29jMTVpcC5oIgo+ICsjaW5jbHVkZSAidmVn YTEwL01NSFVCL21taHViXzFfMF9vZmZzZXQuaCIKPiArI2luY2x1ZGUgInZlZ2ExMC9NTUhVQi9t bWh1Yl8xXzBfc2hfbWFzay5oIgo+ICsjaW5jbHVkZSAidmVnYTEwL01NSFVCL21taHViXzFfMF9k ZWZhdWx0LmgiCj4gKyNpbmNsdWRlICJ2ZWdhMTAvQVRIVUIvYXRodWJfMV8wX29mZnNldC5oIgo+ ICsjaW5jbHVkZSAidmVnYTEwL0FUSFVCL2F0aHViXzFfMF9zaF9tYXNrLmgiCj4gKyNpbmNsdWRl ICJ2ZWdhMTAvQVRIVUIvYXRodWJfMV8wX2RlZmF1bHQuaCIKPiArI2luY2x1ZGUgInZlZ2ExMC92 ZWdhMTBfZW51bS5oIgo+ICsKPiArI2luY2x1ZGUgInNvYzE1X2NvbW1vbi5oIgo+ICsKPiArdTY0 IG1taHViX3YxXzBfZ2V0X2ZiX2xvY2F0aW9uKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ ICt7Cj4gKwl1NjQgYmFzZSA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLCBtbU1D X1ZNX0ZCX0xPQ0FUSU9OX0JBU0UpKTsKPiArCj4gKwliYXNlICY9IE1DX1ZNX0ZCX0xPQ0FUSU9O X0JBU0VfX0ZCX0JBU0VfTUFTSzsKPiArCWJhc2UgPDw9IDI0Owo+ICsKPiArCXJldHVybiBiYXNl Owo+ICt9Cj4gKwo+ICtpbnQgbW1odWJfdjFfMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldikKPiArewo+ICsJdTMyIHRtcDsKPiArCXU2NCB2YWx1ZTsKPiArCXVpbnQ2NF90 IGFkZHI7Cj4gKwl1MzIgaTsKPiArCj4gKwkvKiBQcm9ncmFtIE1DLiAqLwo+ICsJLyogVXBkYXRl IGNvbmZpZ3VyYXRpb24gKi8KPiArCURSTV9JTkZPKCIlcyAtLSBpblxuIiwgX19mdW5jX18pOwo+ ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1IVUIsIDAsIG1tTUNfVk1fU1lTVEVNX0FQRVJU VVJFX0xPV19BRERSKSwKPiArCQlhZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE4KTsKPiArCVdSRUcz MihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLCBtbU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdI X0FERFIpLAo+ICsJCWFkZXYtPm1jLnZyYW1fZW5kID4+IDE4KTsKPiArCXZhbHVlID0gYWRldi0+ dnJhbV9zY3JhdGNoLmdwdV9hZGRyIC0gYWRldi0+bWMudnJhbV9zdGFydCArCj4gKwkJYWRldi0+ dm1fbWFuYWdlci52cmFtX2Jhc2Vfb2Zmc2V0Owo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQo TU1IVUIsIDAsCj4gKwkJCQltbU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFJfTFNC KSwKPiArCQkJCSh1MzIpKHZhbHVlID4+IDEyKSk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNF VChNTUhVQiwgMCwKPiArCQkJCW1tTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUl9N U0IpLAo+ICsJCQkJKHUzMikodmFsdWUgPj4gNDQpKTsKPiArCj4gKwkvKiBEaXNhYmxlIEFHUC4g Ki8KPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLCBtbU1DX1ZNX0FHUF9CQVNF KSwgMCk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1NQ19WTV9BR1Bf VE9QKSwgMCk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1NQ19WTV9B R1BfQk9UKSwgMHgwMEZGRkZGRik7Cj4gKwo+ICsJLyogR0FSVCBFbmFibGUuICovCj4gKwo+ICsJ LyogU2V0dXAgVExCIGNvbnRyb2wgKi8KPiArCXRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VU KE1NSFVCLCAwLCBtbU1DX1ZNX01YX0wxX1RMQl9DTlRMKSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgTUNfVk1fTVhfTDFfVExCX0NOVEwsIEVOQUJMRV9MMV9UTEIsIDEpOwo+ICsJdG1w ID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4gKwkJCQlNQ19WTV9NWF9MMV9UTEJfQ05UTCwKPiArCQkJ CVNZU1RFTV9BQ0NFU1NfTU9ERSwKPiArCQkJCTMpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0 bXAsCj4gKwkJCQlNQ19WTV9NWF9MMV9UTEJfQ05UTCwKPiArCQkJCUVOQUJMRV9BRFZBTkNFRF9E UklWRVJfTU9ERUwsCj4gKwkJCQkxKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLAo+ICsJ CQkJTUNfVk1fTVhfTDFfVExCX0NOVEwsCj4gKwkJCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURf QUNDRVNTLAo+ICsJCQkJMCk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPiArCQkJCU1D X1ZNX01YX0wxX1RMQl9DTlRMLAo+ICsJCQkJRUNPX0JJVFMsCj4gKwkJCQkwKTsKPiArCXRtcCA9 IFJFR19TRVRfRklFTEQodG1wLAo+ICsJCQkJTUNfVk1fTVhfTDFfVExCX0NOVEwsCj4gKwkJCQlN VFlQRSwKPiArCQkJCU1UWVBFX1VDKTsvKiBYWFggZm9yIGVtdWxhdGlvbi4gKi8KPiArCXRtcCA9 IFJFR19TRVRfRklFTEQodG1wLAo+ICsJCQkJTUNfVk1fTVhfTDFfVExCX0NOVEwsCj4gKwkJCQlB VENfRU4sCj4gKwkJCQkxKTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLCBt bU1DX1ZNX01YX0wxX1RMQl9DTlRMKSwgdG1wKTsKPiArCj4gKwkvKiBTZXR1cCBMMiBjYWNoZSAq Lwo+ICsJdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1IVUIsIDAsIG1tVk1fTDJfQ05U TCkpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX0NOVEwsIEVOQUJMRV9MMl9D QUNIRSwgMSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPiArCQkJCVZNX0wyX0NOVEws Cj4gKwkJCQlFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORywKPiArCQkJCTApOwo+ICsJdG1w ID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4gKwkJCQlWTV9MMl9DTlRMLAo+ICsJCQkJTDJfUERFMF9D QUNIRV9UQUdfR0VORVJBVElPTl9NT0RFLAo+ICsJCQkJMCk7LyogWFhYIGZvciBlbXVsYXRpb24s IFJlZmVyIHRvIGNsb3NlZCBzb3VyY2UgY29kZS4qLwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0 bXAsIFZNX0wyX0NOVEwsIFBERV9GQVVMVF9DTEFTU0lGSUNBVElPTiwgMSk7Cj4gKwl0bXAgPSBS RUdfU0VUX0ZJRUxEKHRtcCwKPiArCQkJCVZNX0wyX0NOVEwsCj4gKwkJCQlDT05URVhUMV9JREVO VElUWV9BQ0NFU1NfTU9ERSwKPiArCQkJCTEpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAs Cj4gKwkJCQlWTV9MMl9DTlRMLAo+ICsJCQkJSURFTlRJVFlfTU9ERV9GUkFHTUVOVF9TSVpFLAo+ ICsJCQkJMCk7Cj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1WTV9MMl9D TlRMKSwgdG1wKTsKPiArCj4gKwl0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwg MCwgbW1WTV9MMl9DTlRMMikpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX0NO VEwyLCBJTlZBTElEQVRFX0FMTF9MMV9UTEJTLCAxKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQo dG1wLCBWTV9MMl9DTlRMMiwgSU5WQUxJREFURV9MMl9DQUNIRSwgMSk7Cj4gKwlXUkVHMzIoU09D MTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1WTV9MMl9DTlRMMiksIHRtcCk7Cj4gKwo+ICsJdG1w ID0gbW1WTV9MMl9DTlRMM19ERUZBVUxUOwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1I VUIsIDAsIG1tVk1fTDJfQ05UTDMpLCB0bXApOwo+ICsKPiArCXRtcCA9IFJSRUczMihTT0MxNV9S RUdfT0ZGU0VUKE1NSFVCLCAwLCBtbVZNX0wyX0NOVEw0KSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwKPiArCQkJICAgIFZNX0wyX0NOVEw0LAo+ICsJCQkgICAgVk1DX1RBUF9QREVfUkVR VUVTVF9QSFlTSUNBTCwKPiArCQkJICAgIDApOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAs Cj4gKwkJCSAgICBWTV9MMl9DTlRMNCwKPiArCQkJICAgIFZNQ19UQVBfUFRFX1JFUVVFU1RfUEhZ U0lDQUwsCj4gKwkJCSAgICAwKTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAw LCBtbVZNX0wyX0NOVEw0KSwgdG1wKTsKPiArCj4gKwkvKiBzZXR1cCBjb250ZXh0MCAqLwo+ICsJ V1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1IVUIsIDAsCj4gKwkJCQltbVZNX0NPTlRFWFQwX1BB R0VfVEFCTEVfU1RBUlRfQUREUl9MTzMyKSwKPiArCQkodTMyKShhZGV2LT5tYy5ndHRfc3RhcnQg Pj4gMTIpKTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLAo+ICsJCQkJbW1W TV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFJfSEkzMiksCj4gKwkJKHUzMikoYWRldi0+ bWMuZ3R0X3N0YXJ0ID4+IDQ0KSk7Cj4gKwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1I VUIsIDAsCj4gKwkJCQltbVZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFJfTE8zMiksCj4g KwkJKHUzMikoYWRldi0+bWMuZ3R0X2VuZCA+PiAxMikpOwo+ICsJV1JFRzMyKFNPQzE1X1JFR19P RkZTRVQoTU1IVUIsIDAsCj4gKwkJCQltbVZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFJf SEkzMiksCj4gKwkJKHUzMikoYWRldi0+bWMuZ3R0X2VuZCA+PiA0NCkpOwo+ICsKPiArCUJVR19P TihhZGV2LT5nYXJ0LnRhYmxlX2FkZHIgJiAofjB4MDAwMEZGRkZGRkZGRjAwMFVMTCkpOwo+ICsJ dmFsdWUgPSBhZGV2LT5nYXJ0LnRhYmxlX2FkZHIgLSBhZGV2LT5tYy52cmFtX3N0YXJ0ICsKPiAr CQlhZGV2LT52bV9tYW5hZ2VyLnZyYW1fYmFzZV9vZmZzZXQ7Cj4gKwl2YWx1ZSAmPSAweDAwMDBG RkZGRkZGRkYwMDBVTEw7Cj4gKwl2YWx1ZSB8PSAweDE7IC8qIHZhbGlkIGJpdCAqLwo+ICsKPiAr CVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLAo+ICsJCQkJbW1WTV9DT05URVhUMF9Q QUdFX1RBQkxFX0JBU0VfQUREUl9MTzMyKSwKPiArCQkodTMyKXZhbHVlKTsKPiArCVdSRUczMihT T0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLAo+ICsJCQkJbW1WTV9DT05URVhUMF9QQUdFX1RBQkxF X0JBU0VfQUREUl9ISTMyKSwKPiArCQkodTMyKSh2YWx1ZSA+PiAzMikpOwo+ICsKPiArCVdSRUcz MihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLAo+ICsJCQkJbW1WTV9MMl9QUk9URUNUSU9OX0ZB VUxUX0RFRkFVTFRfQUREUl9MTzMyKSwKPiArCQkodTMyKShhZGV2LT5kdW1teV9wYWdlLmFkZHIg Pj4gMTIpKTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLAo+ICsJCQkJbW1W TV9MMl9QUk9URUNUSU9OX0ZBVUxUX0RFRkFVTFRfQUREUl9ISTMyKSwKPiArCQkodTMyKShhZGV2 LT5kdW1teV9wYWdlLmFkZHIgPj4gNDQpKTsKPiArCj4gKwl0bXAgPSBSUkVHMzIoU09DMTVfUkVH X09GRlNFVChNTUhVQiwgMCwgbW1WTV9MMl9QUk9URUNUSU9OX0ZBVUxUX0NOVEwyKSk7Cj4gKwl0 bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfUFJPVEVDVElPTl9GQVVMVF9DTlRMMiwKPiAr CQkJICAgIEFDVElWRV9QQUdFX01JR1JBVElPTl9QVEVfUkVBRF9SRVRSWSwKPiArCQkJICAgIDEp Owo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1IVUIsIDAsIG1tVk1fTDJfUFJPVEVDVElP Tl9GQVVMVF9DTlRMMiksIHRtcCk7Cj4gKwo+ICsJYWRkciA9IFNPQzE1X1JFR19PRkZTRVQoTU1I VUIsIDAsIG1tVk1fQ09OVEVYVDBfQ05UTCk7Cj4gKwl0bXAgPSBSUkVHMzIoYWRkcik7Cj4gKwo+ ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0NPTlRFWFQwX0NOVEwsIEVOQUJMRV9DT05U RVhULCAxKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9DT05URVhUMF9DTlRMLCBQ QUdFX1RBQkxFX0RFUFRILCAwKTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAw LCBtbVZNX0NPTlRFWFQwX0NOVEwpLCB0bXApOwo+ICsKPiArCXRtcCA9IFJSRUczMihhZGRyKTsK PiArCj4gKwkvKiBEaXNhYmxlIGlkZW50aXR5IGFwZXJ0dXJlLiovCj4gKwlXUkVHMzIoU09DMTVf UkVHX09GRlNFVChNTUhVQiwgMCwKPiArCQltbVZNX0wyX0NPTlRFWFQxX0lERU5USVRZX0FQRVJU VVJFX0xPV19BRERSX0xPMzIpLCAwWEZGRkZGRkZGKTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZG U0VUKE1NSFVCLCAwLAo+ICsJCW1tVk1fTDJfQ09OVEVYVDFfSURFTlRJVFlfQVBFUlRVUkVfTE9X X0FERFJfSEkzMiksIDB4MDAwMDAwMEYpOwo+ICsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VU KE1NSFVCLCAwLAo+ICsJCW1tVk1fTDJfQ09OVEVYVDFfSURFTlRJVFlfQVBFUlRVUkVfSElHSF9B RERSX0xPMzIpLCAwKTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLAo+ICsJ CW1tVk1fTDJfQ09OVEVYVDFfSURFTlRJVFlfQVBFUlRVUkVfSElHSF9BRERSX0hJMzIpLCAwKTsK PiArCj4gKwlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwKPiArCQltbVZNX0wyX0NP TlRFWFRfSURFTlRJVFlfUEhZU0lDQUxfT0ZGU0VUX0xPMzIpLCAwKTsKPiArCVdSRUczMihTT0Mx NV9SRUdfT0ZGU0VUKE1NSFVCLCAwLAo+ICsJCW1tVk1fTDJfQ09OVEVYVF9JREVOVElUWV9QSFlT SUNBTF9PRkZTRVRfSEkzMiksIDApOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPD0gMTQ7IGkrKykg ewo+ICsJCXRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLCBtbVZNX0NPTlRF WFQxX0NOVEwpCj4gKwkJCQkrIGkpOwo+ICsJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9D T05URVhUMV9DTlRMLAo+ICsJCQkJRU5BQkxFX0NPTlRFWFQsIDEpOwo+ICsJCXRtcCA9IFJFR19T RVRfRklFTEQodG1wLCBWTV9DT05URVhUMV9DTlRMLAo+ICsJCQkJUEFHRV9UQUJMRV9ERVBUSCwg MSk7Cj4gKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0NPTlRFWFQxX0NOVEwsCj4gKwkJ CQlSQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCAxKTsKPiArCQl0bXAgPSBS RUdfU0VUX0ZJRUxEKHRtcCwgVk1fQ09OVEVYVDFfQ05UTCwKPiArCQkJCURVTU1ZX1BBR0VfUFJP VEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCwgMSk7Cj4gKwkJdG1wID0gUkVHX1NFVF9GSUVM RCh0bXAsIFZNX0NPTlRFWFQxX0NOVEwsCj4gKwkJCQlQREUwX1BST1RFQ1RJT05fRkFVTFRfRU5B QkxFX0RFRkFVTFQsIDEpOwo+ICsJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9DT05URVhU MV9DTlRMLAo+ICsJCQkJVkFMSURfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCwgMSk7 Cj4gKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0NPTlRFWFQxX0NOVEwsCj4gKwkJCQlS RUFEX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQsIDEpOwo+ICsJCXRtcCA9IFJFR19T RVRfRklFTEQodG1wLCBWTV9DT05URVhUMV9DTlRMLAo+ICsJCQkJV1JJVEVfUFJPVEVDVElPTl9G QVVMVF9FTkFCTEVfREVGQVVMVCwgMSk7Cj4gKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZN X0NPTlRFWFQxX0NOVEwsCj4gKwkJCQlFWEVDVVRFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RF RkFVTFQsIDEpOwo+ICsJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9DT05URVhUMV9DTlRM LAo+ICsJCQkJUEFHRV9UQUJMRV9CTE9DS19TSVpFLAo+ICsJCQkJYW1kZ3B1X3ZtX2Jsb2NrX3Np emUgLSA5KTsKPiArCQlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1WTV9DT05U RVhUMV9DTlRMKSArIGksIHRtcCk7Cj4gKwkJV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1IVUIs IDAsIG1tVk1fQ09OVEVYVDFfUEFHRV9UQUJMRV9TVEFSVF9BRERSX0xPMzIpICsgaSoyLCAwKTsK PiArCQlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1WTV9DT05URVhUMV9QQUdF X1RBQkxFX1NUQVJUX0FERFJfSEkzMikgKyBpKjIsIDApOwo+ICsJCVdSRUczMihTT0MxNV9SRUdf T0ZGU0VUKE1NSFVCLCAwLCBtbVZNX0NPTlRFWFQxX1BBR0VfVEFCTEVfRU5EX0FERFJfTE8zMikg KyBpKjIsCj4gKwkJCQlhZGV2LT52bV9tYW5hZ2VyLm1heF9wZm4gLSAxKTsKPiArCQlXUkVHMzIo U09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1WTV9DT05URVhUMV9QQUdFX1RBQkxFX0VORF9B RERSX0hJMzIpICsgaSoyLCAwKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr dm9pZCBtbWh1Yl92MV8wX2dhcnRfZGlzYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK PiArewo+ICsJdTMyIHRtcDsKPiArCXUzMiBpOwo+ICsKPiArCS8qIERpc2FibGUgYWxsIHRhYmxl cyAqLwo+ICsJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCj4gKwkJV1JFRzMyKFNPQzE1X1JFR19P RkZTRVQoTU1IVUIsIDAsIG1tVk1fQ09OVEVYVDBfQ05UTCkgKyBpLCAwKTsKPiArCj4gKwkvKiBT ZXR1cCBUTEIgY29udHJvbCAqLwo+ICsJdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1I VUIsIDAsIG1tTUNfVk1fTVhfTDFfVExCX0NOVEwpKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQo dG1wLCBNQ19WTV9NWF9MMV9UTEJfQ05UTCwgRU5BQkxFX0wxX1RMQiwgMCk7Cj4gKwl0bXAgPSBS RUdfU0VUX0ZJRUxEKHRtcCwKPiArCQkJCU1DX1ZNX01YX0wxX1RMQl9DTlRMLAo+ICsJCQkJRU5B QkxFX0FEVkFOQ0VEX0RSSVZFUl9NT0RFTCwKPiArCQkJCTApOwo+ICsJV1JFRzMyKFNPQzE1X1JF R19PRkZTRVQoTU1IVUIsIDAsIG1tTUNfVk1fTVhfTDFfVExCX0NOVEwpLCB0bXApOwo+ICsKPiAr CS8qIFNldHVwIEwyIGNhY2hlICovCj4gKwl0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChN TUhVQiwgMCwgbW1WTV9MMl9DTlRMKSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1f TDJfQ05UTCwgRU5BQkxFX0wyX0NBQ0hFLCAwKTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VU KE1NSFVCLCAwLCBtbVZNX0wyX0NOVEwpLCB0bXApOwo+ICsJV1JFRzMyKFNPQzE1X1JFR19PRkZT RVQoTU1IVUIsIDAsIG1tVk1fTDJfQ05UTDMpLCAwKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIG1t aHViX3YxXzBfc2V0X2ZhdWx0X2VuYWJsZV9kZWZhdWx0IC0gdXBkYXRlIEdBUlQvVk0gZmF1bHQg aGFuZGxpbmcKPiArICoKPiArICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgo+ICsgKiBA dmFsdWU6IHRydWUgcmVkaXJlY3RzIFZNIGZhdWx0cyB0byB0aGUgZGVmYXVsdCBwYWdlCj4gKyAq Lwo+ICt2b2lkIG1taHViX3YxXzBfc2V0X2ZhdWx0X2VuYWJsZV9kZWZhdWx0KHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LCBib29sIHZhbHVlKQo+ICt7Cj4gKwl1MzIgdG1wOwo+ICsJdG1wID0g UlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1IVUIsIDAsIG1tVk1fTDJfUFJPVEVDVElPTl9GQVVM VF9DTlRMKSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfUFJPVEVDVElPTl9G QVVMVF9DTlRMLAo+ICsJCQlSQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCB2 YWx1ZSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfUFJPVEVDVElPTl9GQVVM VF9DTlRMLAo+ICsJCQlQREUwX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQsIHZhbHVl KTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9QUk9URUNUSU9OX0ZBVUxUX0NO VEwsCj4gKwkJCVBERTFfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCwgdmFsdWUpOwo+ ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX1BST1RFQ1RJT05fRkFVTFRfQ05UTCwK PiArCQkJUERFMl9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCB2YWx1ZSk7Cj4gKwl0 bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPiArCQkJVk1fTDJfUFJPVEVDVElPTl9GQVVMVF9DTlRM LAo+ICsJCQlUUkFOU0xBVEVfRlVSVEhFUl9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxU LAo+ICsJCQl2YWx1ZSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfUFJPVEVD VElPTl9GQVVMVF9DTlRMLAo+ICsJCQlOQUNLX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFV TFQsIHZhbHVlKTsKPiArCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9QUk9URUNUSU9O X0ZBVUxUX0NOVEwsCj4gKwkJCURVTU1ZX1BBR0VfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVG QVVMVCwgdmFsdWUpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX1BST1RFQ1RJ T05fRkFVTFRfQ05UTCwKPiArCQkJVkFMSURfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVM VCwgdmFsdWUpOwo+ICsJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX1BST1RFQ1RJT05f RkFVTFRfQ05UTCwKPiArCQkJUkVBRF9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCB2 YWx1ZSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfUFJPVEVDVElPTl9GQVVM VF9DTlRMLAo+ICsJCQlXUklURV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCB2YWx1 ZSk7Cj4gKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfUFJPVEVDVElPTl9GQVVMVF9D TlRMLAo+ICsJCQlFWEVDVVRFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQsIHZhbHVl KTsKPiArCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLCBtbVZNX0wyX1BST1RFQ1RJ T05fRkFVTFRfQ05UTCksIHRtcCk7Cj4gK30KPiArCj4gK3N0YXRpYyB1aW50MzJfdCBtbWh1Yl92 MV8wX2dldF9pbnZhbGlkYXRlX3JlcSh1bnNpZ25lZCBpbnQgdm1faWQpCj4gK3sKPiArCXUzMiBy ZXEgPSAwOwo+ICsKPiArCS8qIGludmFsaWRhdGUgdXNpbmcgbGVnYWN5IG1vZGUgb24gdm1faWQq Lwo+ICsJcmVxID0gUkVHX1NFVF9GSUVMRChyZXEsIFZNX0lOVkFMSURBVEVfRU5HMF9SRVEsCj4g KwkJCSAgICBQRVJfVk1JRF9JTlZBTElEQVRFX1JFUSwgMSA8PCB2bV9pZCk7Cj4gKwlyZXEgPSBS RUdfU0VUX0ZJRUxEKHJlcSwgVk1fSU5WQUxJREFURV9FTkcwX1JFUSwgRkxVU0hfVFlQRSwgMCk7 Cj4gKwlyZXEgPSBSRUdfU0VUX0ZJRUxEKHJlcSwgVk1fSU5WQUxJREFURV9FTkcwX1JFUSwgSU5W QUxJREFURV9MMl9QVEVTLCAxKTsKPiArCXJlcSA9IFJFR19TRVRfRklFTEQocmVxLCBWTV9JTlZB TElEQVRFX0VORzBfUkVRLCBJTlZBTElEQVRFX0wyX1BERTAsIDEpOwo+ICsJcmVxID0gUkVHX1NF VF9GSUVMRChyZXEsIFZNX0lOVkFMSURBVEVfRU5HMF9SRVEsIElOVkFMSURBVEVfTDJfUERFMSwg MSk7Cj4gKwlyZXEgPSBSRUdfU0VUX0ZJRUxEKHJlcSwgVk1fSU5WQUxJREFURV9FTkcwX1JFUSwg SU5WQUxJREFURV9MMl9QREUyLCAxKTsKPiArCXJlcSA9IFJFR19TRVRfRklFTEQocmVxLCBWTV9J TlZBTElEQVRFX0VORzBfUkVRLCBJTlZBTElEQVRFX0wxX1BURVMsIDEpOwo+ICsJcmVxID0gUkVH X1NFVF9GSUVMRChyZXEsIFZNX0lOVkFMSURBVEVfRU5HMF9SRVEsCj4gKwkJCSAgICBDTEVBUl9Q Uk9URUNUSU9OX0ZBVUxUX1NUQVRVU19BRERSLAkwKTsKPiArCj4gKwlyZXR1cm4gcmVxOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdWludDMyX3QgbW1odWJfdjFfMF9nZXRfdm1fcHJvdGVjdGlvbl9iaXRz KHZvaWQpCj4gK3sKPiArCXJldHVybiAoVk1fQ09OVEVYVDFfQ05UTF9fUkFOR0VfUFJPVEVDVElP Tl9GQVVMVF9FTkFCTEVfSU5URVJSVVBUX01BU0sgfAo+ICsJCSAgICBWTV9DT05URVhUMV9DTlRM X19EVU1NWV9QQUdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0lOVEVSUlVQVF9NQVNLIHwKPiAr CQkgICAgVk1fQ09OVEVYVDFfQ05UTF9fUERFMF9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9JTlRF UlJVUFRfTUFTSyB8Cj4gKwkJICAgIFZNX0NPTlRFWFQxX0NOVExfX1ZBTElEX1BST1RFQ1RJT05f RkFVTFRfRU5BQkxFX0lOVEVSUlVQVF9NQVNLIHwKPiArCQkgICAgVk1fQ09OVEVYVDFfQ05UTF9f UkVBRF9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9JTlRFUlJVUFRfTUFTSyB8Cj4gKwkJICAgIFZN X0NPTlRFWFQxX0NOVExfX1dSSVRFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0lOVEVSUlVQVF9N QVNLIHwKPiArCQkgICAgVk1fQ09OVEVYVDFfQ05UTF9fRVhFQ1VURV9QUk9URUNUSU9OX0ZBVUxU X0VOQUJMRV9JTlRFUlJVUFRfTUFTSyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbW1odWJfdjFf MF9lYXJseV9pbml0KHZvaWQgKmhhbmRsZSkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgbW1odWJfdjFfMF9sYXRlX2luaXQodm9pZCAqaGFuZGxlKQo+ICt7Cj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtbWh1Yl92MV8wX3N3X2luaXQodm9pZCAq aGFuZGxlKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqKWhhbmRsZTsKPiArCXN0cnVjdCBhbWRncHVfdm1odWIgKmh1YiA9ICZhZGV2 LT52bWh1YltBTURHUFVfTU1IVUJdOwo+ICsKPiArCWh1Yi0+Y3R4MF9wdGJfYWRkcl9sbzMyID0K PiArCQlTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLAo+ICsJCQkJIG1tVk1fQ09OVEVYVDBfUEFH RV9UQUJMRV9CQVNFX0FERFJfTE8zMik7Cj4gKwlodWItPmN0eDBfcHRiX2FkZHJfaGkzMiA9Cj4g KwkJU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwKPiArCQkJCSBtbVZNX0NPTlRFWFQwX1BBR0Vf VEFCTEVfQkFTRV9BRERSX0hJMzIpOwo+ICsJaHViLT52bV9pbnZfZW5nMF9yZXEgPQo+ICsJCVNP QzE1X1JFR19PRkZTRVQoTU1IVUIsIDAsIG1tVk1fSU5WQUxJREFURV9FTkcwX1JFUSk7Cj4gKwlo dWItPnZtX2ludl9lbmcwX2FjayA9Cj4gKwkJU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1W TV9JTlZBTElEQVRFX0VORzBfQUNLKTsKPiArCWh1Yi0+dm1fY29udGV4dDBfY250bCA9Cj4gKwkJ U09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1WTV9DT05URVhUMF9DTlRMKTsKPiArCWh1Yi0+ dm1fbDJfcHJvX2ZhdWx0X3N0YXR1cyA9Cj4gKwkJU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwg bW1WTV9MMl9QUk9URUNUSU9OX0ZBVUxUX1NUQVRVUyk7Cj4gKwlodWItPnZtX2wyX3Byb19mYXVs dF9jbnRsID0KPiArCQlTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLCBtbVZNX0wyX1BST1RFQ1RJ T05fRkFVTFRfQ05UTCk7Cj4gKwo+ICsJaHViLT5nZXRfaW52YWxpZGF0ZV9yZXEgPSBtbWh1Yl92 MV8wX2dldF9pbnZhbGlkYXRlX3JlcTsKPiArCWh1Yi0+Z2V0X3ZtX3Byb3RlY3Rpb25fYml0cyA9 IG1taHViX3YxXzBfZ2V0X3ZtX3Byb3RlY3Rpb25fYml0czsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBtbWh1Yl92MV8wX3N3X2Zpbmkodm9pZCAqaGFuZGxlKQo+ICt7 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtbWh1Yl92MV8wX2h3X2luaXQo dm9pZCAqaGFuZGxlKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPiArCXVuc2lnbmVkIGk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IDE4OyArK2kpIHsKPiArCQlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwg MCwKPiArCQkJCQltbVZNX0lOVkFMSURBVEVfRU5HMF9BRERSX1JBTkdFX0xPMzIpICsKPiArCQkg ICAgICAgMiAqIGksIDB4ZmZmZmZmZmYpOwo+ICsJCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1N SFVCLCAwLAo+ICsJCQkJCW1tVk1fSU5WQUxJREFURV9FTkcwX0FERFJfUkFOR0VfSEkzMikgKwo+ ICsJCSAgICAgICAyICogaSwgMHgxZik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgbW1odWJfdjFfMF9od19maW5pKHZvaWQgKmhhbmRsZSkKPiArewo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbW1odWJfdjFfMF9zdXNwZW5kKHZvaWQg KmhhbmRsZSkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbW1odWJf djFfMF9yZXN1bWUodm9pZCAqaGFuZGxlKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGJvb2wgbW1odWJfdjFfMF9pc19pZGxlKHZvaWQgKmhhbmRsZSkKPiArewo+ICsJcmV0 dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbW1odWJfdjFfMF93YWl0X2Zvcl9pZGxl KHZvaWQgKmhhbmRsZSkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bW1odWJfdjFfMF9zb2Z0X3Jlc2V0KHZvaWQgKmhhbmRsZSkKPiArewo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIG1taHViX3YxXzBfdXBkYXRlX21lZGl1bV9ncmFpbl9jbG9j a19nYXRpbmcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJCQkJCQlib29sIGVuYWJs ZSkKPiArewo+ICsJdWludDMyX3QgZGVmLCBkYXRhLCBkZWYxLCBkYXRhMSwgZGVmMiwgZGF0YTI7 Cj4gKwo+ICsJZGVmICA9IGRhdGEgID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1IVUIsIDAs IG1tQVRDX0wyX01JU0NfQ0cpKTsKPiArCWRlZjEgPSBkYXRhMSA9IFJSRUczMihTT0MxNV9SRUdf T0ZGU0VUKE1NSFVCLCAwLCBtbURBR0IwX0NOVExfTUlTQzIpKTsKPiArCWRlZjIgPSBkYXRhMiA9 IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLCBtbURBR0IxX0NOVExfTUlTQzIpKTsK PiArCj4gKwlpZiAoZW5hYmxlICYmIChhZGV2LT5jZ19mbGFncyAmIEFNRF9DR19TVVBQT1JUX01D X01HQ0cpKSB7Cj4gKwkJZGF0YSB8PSBBVENfTDJfTUlTQ19DR19fRU5BQkxFX01BU0s7Cj4gKwo+ ICsJCWRhdGExICY9IH4oREFHQjBfQ05UTF9NSVNDMl9fRElTQUJMRV9XUlJFUV9DR19NQVNLIHwK PiArCQkgICAgICAgICAgIERBR0IwX0NOVExfTUlTQzJfX0RJU0FCTEVfV1JSRVRfQ0dfTUFTSyB8 Cj4gKwkJICAgICAgICAgICBEQUdCMF9DTlRMX01JU0MyX19ESVNBQkxFX1JEUkVRX0NHX01BU0sg fAo+ICsJCSAgICAgICAgICAgREFHQjBfQ05UTF9NSVNDMl9fRElTQUJMRV9SRFJFVF9DR19NQVNL IHwKPiArCQkgICAgICAgICAgIERBR0IwX0NOVExfTUlTQzJfX0RJU0FCTEVfVExCV1JfQ0dfTUFT SyB8Cj4gKwkJICAgICAgICAgICBEQUdCMF9DTlRMX01JU0MyX19ESVNBQkxFX1RMQlJEX0NHX01B U0spOwo+ICsKPiArCQlkYXRhMiAmPSB+KERBR0IxX0NOVExfTUlTQzJfX0RJU0FCTEVfV1JSRVFf Q0dfTUFTSyB8Cj4gKwkJICAgICAgICAgICBEQUdCMV9DTlRMX01JU0MyX19ESVNBQkxFX1dSUkVU X0NHX01BU0sgfAo+ICsJCSAgICAgICAgICAgREFHQjFfQ05UTF9NSVNDMl9fRElTQUJMRV9SRFJF UV9DR19NQVNLIHwKPiArCQkgICAgICAgICAgIERBR0IxX0NOVExfTUlTQzJfX0RJU0FCTEVfUkRS RVRfQ0dfTUFTSyB8Cj4gKwkJICAgICAgICAgICBEQUdCMV9DTlRMX01JU0MyX19ESVNBQkxFX1RM QldSX0NHX01BU0sgfAo+ICsJCSAgICAgICAgICAgREFHQjFfQ05UTF9NSVNDMl9fRElTQUJMRV9U TEJSRF9DR19NQVNLKTsKPiArCX0gZWxzZSB7Cj4gKwkJZGF0YSAmPSB+QVRDX0wyX01JU0NfQ0df X0VOQUJMRV9NQVNLOwo+ICsKPiArCQlkYXRhMSB8PSAoREFHQjBfQ05UTF9NSVNDMl9fRElTQUJM RV9XUlJFUV9DR19NQVNLIHwKPiArCQkJICBEQUdCMF9DTlRMX01JU0MyX19ESVNBQkxFX1dSUkVU X0NHX01BU0sgfAo+ICsJCQkgIERBR0IwX0NOVExfTUlTQzJfX0RJU0FCTEVfUkRSRVFfQ0dfTUFT SyB8Cj4gKwkJCSAgREFHQjBfQ05UTF9NSVNDMl9fRElTQUJMRV9SRFJFVF9DR19NQVNLIHwKPiAr CQkJICBEQUdCMF9DTlRMX01JU0MyX19ESVNBQkxFX1RMQldSX0NHX01BU0sgfAo+ICsJCQkgIERB R0IwX0NOVExfTUlTQzJfX0RJU0FCTEVfVExCUkRfQ0dfTUFTSyk7Cj4gKwo+ICsJCWRhdGEyIHw9 IChEQUdCMV9DTlRMX01JU0MyX19ESVNBQkxFX1dSUkVRX0NHX01BU0sgfAo+ICsJCSAgICAgICAg ICBEQUdCMV9DTlRMX01JU0MyX19ESVNBQkxFX1dSUkVUX0NHX01BU0sgfAo+ICsJCSAgICAgICAg ICBEQUdCMV9DTlRMX01JU0MyX19ESVNBQkxFX1JEUkVRX0NHX01BU0sgfAo+ICsJCSAgICAgICAg ICBEQUdCMV9DTlRMX01JU0MyX19ESVNBQkxFX1JEUkVUX0NHX01BU0sgfAo+ICsJCSAgICAgICAg ICBEQUdCMV9DTlRMX01JU0MyX19ESVNBQkxFX1RMQldSX0NHX01BU0sgfAo+ICsJCSAgICAgICAg ICBEQUdCMV9DTlRMX01JU0MyX19ESVNBQkxFX1RMQlJEX0NHX01BU0spOwo+ICsJfQo+ICsKPiAr CWlmIChkZWYgIT0gZGF0YSkKPiArCQlXUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwg bW1BVENfTDJfTUlTQ19DRyksIGRhdGEpOwo+ICsKPiArCWlmIChkZWYxICE9IGRhdGExKQo+ICsJ CVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKE1NSFVCLCAwLCBtbURBR0IwX0NOVExfTUlTQzIpLCBk YXRhMSk7Cj4gKwo+ICsJaWYgKGRlZjIgIT0gZGF0YTIpCj4gKwkJV1JFRzMyKFNPQzE1X1JFR19P RkZTRVQoTU1IVUIsIDAsIG1tREFHQjFfQ05UTF9NSVNDMiksIGRhdGEyKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgYXRodWJfdXBkYXRlX21lZGl1bV9ncmFpbl9jbG9ja19nYXRpbmcoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJCQkJCSAgIGJvb2wgZW5hYmxlKQo+ICt7Cj4gKwl1 aW50MzJfdCBkZWYsIGRhdGE7Cj4gKwo+ICsJZGVmID0gZGF0YSA9IFJSRUczMihTT0MxNV9SRUdf T0ZGU0VUKEFUSFVCLCAwLCBtbUFUSFVCX01JU0NfQ05UTCkpOwo+ICsKPiArCWlmIChlbmFibGUg JiYgKGFkZXYtPmNnX2ZsYWdzICYgQU1EX0NHX1NVUFBPUlRfTUNfTUdDRykpCj4gKwkJZGF0YSB8 PSBBVEhVQl9NSVNDX0NOVExfX0NHX0VOQUJMRV9NQVNLOwo+ICsJZWxzZQo+ICsJCWRhdGEgJj0g fkFUSFVCX01JU0NfQ05UTF9fQ0dfRU5BQkxFX01BU0s7Cj4gKwo+ICsJaWYgKGRlZiAhPSBkYXRh KQo+ICsJCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEFUSFVCLCAwLCBtbUFUSFVCX01JU0NfQ05U TCksIGRhdGEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtbWh1Yl92MV8wX3VwZGF0ZV9tZWRp dW1fZ3JhaW5fbGlnaHRfc2xlZXAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJCQkJ CSAgICAgICBib29sIGVuYWJsZSkKPiArewo+ICsJdWludDMyX3QgZGVmLCBkYXRhOwo+ICsKPiAr CWRlZiA9IGRhdGEgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChNTUhVQiwgMCwgbW1BVENfTDJf TUlTQ19DRykpOwo+ICsKPiArCWlmIChlbmFibGUgJiYgKGFkZXYtPmNnX2ZsYWdzICYgQU1EX0NH X1NVUFBPUlRfTUNfTFMpKQo+ICsJCWRhdGEgfD0gQVRDX0wyX01JU0NfQ0dfX01FTV9MU19FTkFC TEVfTUFTSzsKPiArCWVsc2UKPiArCQlkYXRhICY9IH5BVENfTDJfTUlTQ19DR19fTUVNX0xTX0VO QUJMRV9NQVNLOwo+ICsKPiArCWlmIChkZWYgIT0gZGF0YSkKPiArCQlXUkVHMzIoU09DMTVfUkVH X09GRlNFVChNTUhVQiwgMCwgbW1BVENfTDJfTUlTQ19DRyksIGRhdGEpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBhdGh1Yl91cGRhdGVfbWVkaXVtX2dyYWluX2xpZ2h0X3NsZWVwKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LAo+ICsJCQkJCQkgIGJvb2wgZW5hYmxlKQo+ICt7Cj4gKwl1aW50 MzJfdCBkZWYsIGRhdGE7Cj4gKwo+ICsJZGVmID0gZGF0YSA9IFJSRUczMihTT0MxNV9SRUdfT0ZG U0VUKEFUSFVCLCAwLCBtbUFUSFVCX01JU0NfQ05UTCkpOwo+ICsKPiArCWlmIChlbmFibGUgJiYg KGFkZXYtPmNnX2ZsYWdzICYgQU1EX0NHX1NVUFBPUlRfTUNfTFMpICYmCj4gKwkgICAgKGFkZXYt PmNnX2ZsYWdzICYgQU1EX0NHX1NVUFBPUlRfSERQX0xTKSkKPiArCQlkYXRhIHw9IEFUSFVCX01J U0NfQ05UTF9fQ0dfTUVNX0xTX0VOQUJMRV9NQVNLOwo+ICsJZWxzZQo+ICsJCWRhdGEgJj0gfkFU SFVCX01JU0NfQ05UTF9fQ0dfTUVNX0xTX0VOQUJMRV9NQVNLOwo+ICsKPiArCWlmKGRlZiAhPSBk YXRhKQo+ICsJCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEFUSFVCLCAwLCBtbUFUSFVCX01JU0Nf Q05UTCksIGRhdGEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1taHViX3YxXzBfc2V0X2Nsb2Nr Z2F0aW5nX3N0YXRlKHZvaWQgKmhhbmRsZSwKPiArCQkJCQllbnVtIGFtZF9jbG9ja2dhdGluZ19z dGF0ZSBzdGF0ZSkKPiArewo+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4gKwo+ICsJc3dpdGNoIChhZGV2LT5hc2ljX3R5cGUp IHsKPiArCWNhc2UgQ0hJUF9WRUdBMTA6Cj4gKwkJbW1odWJfdjFfMF91cGRhdGVfbWVkaXVtX2dy YWluX2Nsb2NrX2dhdGluZyhhZGV2LAo+ICsJCQkJc3RhdGUgPT0gQU1EX0NHX1NUQVRFX0dBVEUg PyB0cnVlIDogZmFsc2UpOwo+ICsJCWF0aHViX3VwZGF0ZV9tZWRpdW1fZ3JhaW5fY2xvY2tfZ2F0 aW5nKGFkZXYsCj4gKwkJCQlzdGF0ZSA9PSBBTURfQ0dfU1RBVEVfR0FURSA/IHRydWUgOiBmYWxz ZSk7Cj4gKwkJbW1odWJfdjFfMF91cGRhdGVfbWVkaXVtX2dyYWluX2xpZ2h0X3NsZWVwKGFkZXYs Cj4gKwkJCQlzdGF0ZSA9PSBBTURfQ0dfU1RBVEVfR0FURSA/IHRydWUgOiBmYWxzZSk7Cj4gKwkJ YXRodWJfdXBkYXRlX21lZGl1bV9ncmFpbl9saWdodF9zbGVlcChhZGV2LAo+ICsJCQkJc3RhdGUg PT0gQU1EX0NHX1NUQVRFX0dBVEUgPyB0cnVlIDogZmFsc2UpOwo+ICsJCWJyZWFrOwo+ICsJZGVm YXVsdDoKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBtbWh1Yl92MV8wX3NldF9wb3dlcmdhdGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCj4g KwkJCQkJZW51bSBhbWRfcG93ZXJnYXRpbmdfc3RhdGUgc3RhdGUpCj4gK3sKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtjb25zdCBzdHJ1Y3QgYW1kX2lwX2Z1bmNzIG1taHViX3YxXzBfaXBfZnVu Y3MgPSB7Cj4gKwkubmFtZSA9ICJtbWh1Yl92MV8wIiwKPiArCS5lYXJseV9pbml0ID0gbW1odWJf djFfMF9lYXJseV9pbml0LAo+ICsJLmxhdGVfaW5pdCA9IG1taHViX3YxXzBfbGF0ZV9pbml0LAo+ ICsJLnN3X2luaXQgPSBtbWh1Yl92MV8wX3N3X2luaXQsCj4gKwkuc3dfZmluaSA9IG1taHViX3Yx XzBfc3dfZmluaSwKPiArCS5od19pbml0ID0gbW1odWJfdjFfMF9od19pbml0LAo+ICsJLmh3X2Zp bmkgPSBtbWh1Yl92MV8wX2h3X2ZpbmksCj4gKwkuc3VzcGVuZCA9IG1taHViX3YxXzBfc3VzcGVu ZCwKPiArCS5yZXN1bWUgPSBtbWh1Yl92MV8wX3Jlc3VtZSwKPiArCS5pc19pZGxlID0gbW1odWJf djFfMF9pc19pZGxlLAo+ICsJLndhaXRfZm9yX2lkbGUgPSBtbWh1Yl92MV8wX3dhaXRfZm9yX2lk bGUsCj4gKwkuc29mdF9yZXNldCA9IG1taHViX3YxXzBfc29mdF9yZXNldCwKPiArCS5zZXRfY2xv Y2tnYXRpbmdfc3RhdGUgPSBtbWh1Yl92MV8wX3NldF9jbG9ja2dhdGluZ19zdGF0ZSwKPiArCS5z ZXRfcG93ZXJnYXRpbmdfc3RhdGUgPSBtbWh1Yl92MV8wX3NldF9wb3dlcmdhdGluZ19zdGF0ZSwK PiArfTsKPiArCj4gK2NvbnN0IHN0cnVjdCBhbWRncHVfaXBfYmxvY2tfdmVyc2lvbiBtbWh1Yl92 MV8wX2lwX2Jsb2NrID0KPiArewo+ICsJLnR5cGUgPSBBTURfSVBfQkxPQ0tfVFlQRV9NTUhVQiwK PiArCS5tYWpvciA9IDEsCj4gKwkubWlub3IgPSAwLAo+ICsJLnJldiA9IDAsCj4gKwkuZnVuY3Mg PSAmbW1odWJfdjFfMF9pcF9mdW5jcywKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvbW1odWJfdjFfMC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv bW1odWJfdjFfMC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hYWRl ZGY5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21t aHViX3YxXzAuaAo+IEBAIC0wLDAgKzEsMzUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTYg QWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIENPUFlSSUdI VCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SCj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiArICogT1RIRVIgREVB TElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArI2lmbmRlZiBfX01NSFVCX1Yx XzBfSF9fCj4gKyNkZWZpbmUgX19NTUhVQl9WMV8wX0hfXwo+ICsKPiArdTY0IG1taHViX3YxXzBf Z2V0X2ZiX2xvY2F0aW9uKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKPiAraW50IG1taHVi X3YxXzBfZ2FydF9lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwo+ICt2b2lkIG1t aHViX3YxXzBfZ2FydF9kaXNhYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKPiArdm9p ZCBtbWh1Yl92MV8wX3NldF9mYXVsdF9lbmFibGVfZGVmYXVsdChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKPiArCQkJCQkgYm9vbCB2YWx1ZSk7Cj4gKwo+ICtleHRlcm4gY29uc3Qgc3RydWN0 IGFtZF9pcF9mdW5jcyBtbWh1Yl92MV8wX2lwX2Z1bmNzOwo+ICtleHRlcm4gY29uc3Qgc3RydWN0 IGFtZGdwdV9pcF9ibG9ja192ZXJzaW9uIG1taHViX3YxXzBfaXBfYmxvY2s7Cj4gKwo+ICsjZW5k aWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FtZF9zaGFyZWQu aCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hbWRfc2hhcmVkLmgKPiBpbmRleCA3MTdk NmJlLi5hOTQ0MjBkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9h bWRfc2hhcmVkLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYW1kX3NoYXJl ZC5oCj4gQEAgLTc0LDYgKzc0LDggQEAgZW51bSBhbWRfaXBfYmxvY2tfdHlwZSB7Cj4gICAJQU1E X0lQX0JMT0NLX1RZUEVfVVZELAo+ICAgCUFNRF9JUF9CTE9DS19UWVBFX1ZDRSwKPiAgIAlBTURf SVBfQkxPQ0tfVFlQRV9BQ1AsCj4gKwlBTURfSVBfQkxPQ0tfVFlQRV9HRlhIVUIsCj4gKwlBTURf SVBfQkxPQ0tfVFlQRV9NTUhVQgo+ICAgfTsKPgo+ICAgZW51bSBhbWRfY2xvY2tnYXRpbmdfc3Rh dGUgewo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFt ZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=