From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeff McGee Subject: Re: [PATCH 3/8] drm/i915/huc: Add HuC fw loading support Date: Fri, 11 Nov 2016 18:09:45 -0800 Message-ID: <20161112020945.GX18646@jeffdesk> References: <1478823321-6009-1-git-send-email-anusha.srivatsa@intel.com> <1478823321-6009-4-git-send-email-anusha.srivatsa@intel.com> <20161112020534.GW18646@jeffdesk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id C4B6F6E1D1 for ; Sat, 12 Nov 2016 01:59:34 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20161112020534.GW18646@jeffdesk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Anusha Srivatsa Cc: intel-gfx@lists.freedesktop.org, Alex Dai , Peter Antoine List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBOb3YgMTEsIDIwMTYgYXQgMDY6MDU6MzRQTSAtMDgwMCwgSmVmZiBNY0dlZSB3cm90 ZToKPiBPbiBUaHUsIE5vdiAxMCwgMjAxNiBhdCAwNDoxNToxNlBNIC0wODAwLCBBbnVzaGEgU3Jp dmF0c2Egd3JvdGU6Cj4gPiBGcm9tOiBQZXRlciBBbnRvaW5lIDxwZXRlci5hbnRvaW5lQGludGVs LmNvbT4KPiA+IAo+ID4gVGhlIEh1QyBsb2FkaW5nIHByb2Nlc3MgaXMgc2ltaWxhciB0byBHdUMu IFRoZSBpbnRlbF91Y19md19mZXRjaCgpCj4gPiBpcyB1c2VkIGZvciBib3RoIGNhc2VzLgo+ID4g Cj4gPiBIdUMgbG9hZGluZyBuZWVkcyB0byBiZSBiZWZvcmUgR3VDIGxvYWRpbmcuIFRoZSBXT1BD TSBzZXR0aW5nIG11c3QKPiA+IGJlIGRvbmUgZWFybHkgYmVmb3JlIGxvYWRpbmcgYW55IG9mIHRo ZW0uCj4gPiAKPiA+IHYyOiByZWJhc2VkIG9uLXRvcCBvZiBkcm0taW50ZWwtbmlnaHRseS4KPiA+ ICAgICByZW1vdmVkIGlmKEhBU19HVUMoKSkgYmVmb3JlIHRoZSBndWMgY2FsbC4gKEQuR29yZG9u KQo+ID4gICAgIHVwZGF0ZSBodWNfdmVyc2lvbiBudW1iZXIgb2YgZm9ybWF0Lgo+ID4gdjM6IHJl YmFzZWQgdG8gZHJtLWludGVsLW5pZ2h0bHksIGNoYW5nZWQgdGhlIGZpbGUgbmFtZSBmb3JtYXQg dG8KPiA+ICAgICBtYXRjaCB0aGUgb25lIGluIHRoZSBodWMgcGFja2FnZS4KPiA+ICAgICBDaGFu Z2VkIGRldi0+ZGV2X3ByaXZhdGUgdG8gdG9faTkxNSgpCj4gPiB2NDogbW92ZWQgZnVuY3Rpb24g YmFjayB0byB3aGVyZSBpdCB3YXMuCj4gPiAgICAgY2hhbmdlIHdhaXRfZm9yX2F0b21pYyB0byB3 YWl0X2Zvci4KPiA+IHY1OiByZWJhc2VkICsgY29tbWVudCBjaGFuZ2VzLgo+ID4gdjc6IHJlYmFz ZWQuCj4gPiB2ODogcmViYXNlZC4KPiA+IHY5OiByZWJhc2VkLiBDaGFuZ2VkIHRoZSB5ZWFyIGlu IHRoZSBjb3B5cmlnaHQgbWVzc2FnZSB0byByZWZsZWN0Cj4gPiB0aGUgcmlnaHQgeWVhci5Db3Jy ZWN0IHRoZSBjb21tZW50cyxyZW1vdmUgdGhlIHVud2FudGVkIFdBUk4gbWVzc2FnZSwKPiA+IHJl cGxhY2UgZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoKSB3aXRoIGk5MTVfZ2VtX29iamVjdF9w dXQoKS5NYWtlIHRoZQo+ID4gcHJvdG90eXBlcyBpbiBpbnRlbF9odWMuaCBub24tZXh0ZXJuLgo+ ID4gdjEwOiByZWJhc2VkLiBVcGRhdGUgdGhlIGZpbGUgY29uc3RydWN0aW9uIGRvbmUgYnkgSHVD LiBJdCBpcyBzaW1pbGFyIHRvCj4gPiBHdUMuQWRvcHRlZCB0aGUgYXBwcm9hY2ggdXNlZCBpbi0K PiA+IGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC8xMDQzNTUvIDxUdnJ0 a28gVXJzdWxpbj4KPiA+IAo+ID4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBp bnRlbC5jb20+Cj4gPiBUZXN0ZWQtYnk6IFhpYW5nIEhhaWhhbyA8aGFpaGFvLnhpYW5nQGludGVs LmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IEFudXNoYSBTcml2YXRzYSA8YW51c2hhLnNyaXZhdHNh QGludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IEFsZXggRGFpIDx5dS5kYWlAaW50ZWwuY29t Pgo+ID4gU2lnbmVkLW9mZi1ieTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5j b20+Cj4gPiBSZXZpZXdlZC1ieTogRGF2ZSBHb3Jkb24gPGRhdmlkLnMuZ29yZG9uQGludGVsLmNv bT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICB8 ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgICAz ICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19yZWcuaCAgICAgfCAgIDMgKwo+ ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oICAgICAgICB8ICAgMSArCj4gPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jIHwgICA2ICstCj4gPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmggICAgICAgIHwgIDQyICsrKysrCj4gPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjX2xvYWRlci5jIHwgMjcwICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gPiAgNyBmaWxlcyBjaGFuZ2VkLCAzMjQgaW5zZXJ0aW9ucygr KSwgMiBkZWxldGlvbnMoLSkKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfaHVjLmgKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfaHVjX2xvYWRlci5jCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gPiBp bmRleCAwODU3ZTUwLi5jOTliMGVlIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gPiBA QCAtNTUsNiArNTUsNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+ID4gIAo+ID4g ICMgZ2VuZXJhbC1wdXJwb3NlIG1pY3JvY29udHJvbGxlciAoR3VDKSBzdXBwb3J0Cj4gPiAgaTkx NS15ICs9IGludGVsX2d1Y19sb2FkZXIubyBcCj4gPiArCSAgaW50ZWxfaHVjX2xvYWRlci5vIFwK PiA+ICAJICBpOTE1X2d1Y19zdWJtaXNzaW9uLm8KPiA+ICAKPiA+ICAjIGF1dG9nZW5lcmF0ZWQg bnVsbCByZW5kZXIgc3RhdGUKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gaW5kZXggMzA3 NzdkZS4uZWJlZjk4MiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+IEBAIC01 Niw2ICs1Niw3IEBACj4gPiAgI2luY2x1ZGUgImludGVsX2Jpb3MuaCIKPiA+ICAjaW5jbHVkZSAi aW50ZWxfZHBsbF9tZ3IuaCIKPiA+ICAjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCj4gPiArI2luY2x1 ZGUgImludGVsX2h1Yy5oIgo+ID4gICNpbmNsdWRlICJpbnRlbF9scmMuaCIKPiA+ICAjaW5jbHVk ZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgo+ID4gIAo+ID4gQEAgLTE4MDQsNiArMTgwNSw3IEBAIHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiA+ICAKPiA+ICAJc3RydWN0IGludGVsX2d2dCAqZ3Z0 Owo+ID4gIAo+ID4gKwlzdHJ1Y3QgaW50ZWxfaHVjIGh1YzsKPiA+ICAJc3RydWN0IGludGVsX2d1 YyBndWM7Cj4gPiAgCj4gPiAgCXN0cnVjdCBpbnRlbF9jc3IgY3NyOwo+ID4gQEAgLTI5MjgsNiAr MjkzMCw3IEBAIHN0cnVjdCBkcm1faTkxNV9jbWRfdGFibGUgewo+ID4gICNkZWZpbmUgSEFTX0dV QyhkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5oYXNfZ3VjKQo+ID4gICNkZWZpbmUgSEFTX0dVQ19V Q09ERShkZXYpCShIQVNfR1VDKGRldikpCj4gPiAgI2RlZmluZSBIQVNfR1VDX1NDSEVEKGRldikJ KEhBU19HVUMoZGV2KSkKPiA+ICsjZGVmaW5lIEhBU19IVUNfVUNPREUoZGV2KQkoSEFTX0dVQyhk ZXYpKQo+ID4gIAo+ID4gICNkZWZpbmUgSEFTX1JFU09VUkNFX1NUUkVBTUVSKGRldikgKElOVEVM X0lORk8oZGV2KS0+aGFzX3Jlc291cmNlX3N0cmVhbWVyKQo+ID4gIAo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9ndWNfcmVnLmgKPiA+IGluZGV4IGE0N2UxZTQuLjY0ZTk0MmEgMTAwNjQ0Cj4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19yZWcuaAo+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfcmVnLmgKPiA+IEBAIC02MSw5ICs2MSwxMiBAQAo+ID4g ICNkZWZpbmUgICBETUFfQUREUkVTU19TUEFDRV9HVFQJCSAgKDggPDwgMTYpCj4gPiAgI2RlZmlu ZSBETUFfQ09QWV9TSVpFCQkJX01NSU8oMHhjMzEwKQo+ID4gICNkZWZpbmUgRE1BX0NUUkwJCQlf TU1JTygweGMzMTQpCj4gPiArI2RlZmluZSAgIEhVQ19VS0VSTkVMCQkJICAoMTw8OSkKPiA+ICAj ZGVmaW5lICAgVU9TX01PVkUJCQkgICgxPDw0KQo+ID4gICNkZWZpbmUgICBTVEFSVF9ETUEJCQkg ICgxPDwwKQo+ID4gICNkZWZpbmUgRE1BX0dVQ19XT1BDTV9PRkZTRVQJCV9NTUlPKDB4YzM0MCkK PiA+ICsjZGVmaW5lICAgSFVDX0xPQURJTkdfQUdFTlRfVkNSCQkgICgwPDwxKQo+ID4gKyNkZWZp bmUgICBIVUNfTE9BRElOR19BR0VOVF9HVUMJCSAgKDE8PDEpCj4gPiAgI2RlZmluZSAgIEdVQ19X T1BDTV9PRkZTRVRfVkFMVUUJICAweDgwMDAwCS8qIDUxMktCICovCj4gPiAgI2RlZmluZSBHVUNf TUFYX0lETEVfQ09VTlQJCV9NTUlPKDB4QzNFNCkKPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2d1Yy5oCj4gPiBpbmRleCA0NWRmYTQwLi5mZjZhYmE2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2d1Yy5oCj4gPiBAQCAtMTgzLDYgKzE4Myw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpp bnRlbF91Y19md19zdGF0dXNfcmVwcihlbnVtIGludGVsX3VjX2Z3X3N0YXR1cyBzdGF0dXMpOwo+ ID4gIGV4dGVybiBpbnQgaW50ZWxfZ3VjX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 Cj4gPiAgZXh0ZXJuIGludCBpbnRlbF9ndWNfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owo+ID4gIHZvaWQgaW50ZWxfdWNfZndfZmV0Y2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3Ry dWN0IGludGVsX3VjX2Z3ICp1Y19mdyk7Cj4gPiArdTMyIGd1Y193b3BjbV9zaXplKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gPiAgCj4gPiAgLyogaTkxNV9ndWNfc3VibWlz c2lvbi5jICovCj4gPiAgaW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Y19sb2FkZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19s b2FkZXIuYwo+ID4gaW5kZXggZmYyNmQyYy4uZGM3OTk2OCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4gPiBAQCAtMzA5LDcgKzMwOSw4IEBAIHN0YXRp YyBpbnQgZ3VjX3Vjb2RlX3hmZXJfZG1hKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiA+ICAJSTkxNV9XUklURShETUFfQUREUl8xX0hJR0gsIERNQV9BRERSRVNTX1NQQUNFX1dP UENNKTsKPiA+ICAKPiA+ICAJLyogRmluYWxseSBzdGFydCB0aGUgRE1BICovCj4gPiAtCUk5MTVf V1JJVEUoRE1BX0NUUkwsIF9NQVNLRURfQklUX0VOQUJMRShVT1NfTU9WRSB8IFNUQVJUX0RNQSkp Owo+ID4gKwlJOTE1X1dSSVRFKERNQV9DVFJMLCBfTUFTS0VEX0JJVF9FTkFCTEUoVU9TX01PVkUg fCBTVEFSVF9ETUEpIHwKPiA+ICsJCQlfTUFTS0VEX0JJVF9ESVNBQkxFKEhVQ19VS0VSTkVMKSk7 Cj4gPiAgCj4gPiAgCS8qCj4gPiAgCSAqIFdhaXQgZm9yIHRoZSBETUEgdG8gY29tcGxldGUgJiB0 aGUgR3VDIHRvIHN0YXJ0IHVwLgo+ID4gQEAgLTMzNCw3ICszMzUsNyBAQCBzdGF0aWMgaW50IGd1 Y191Y29kZV94ZmVyX2RtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAg CXJldHVybiByZXQ7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyB1MzIgZ3VjX3dvcGNtX3NpemUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gK3UzMiBndWNfd29wY21fc2l6 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiAgewo+ID4gIAl1MzIgd29w Y21fc2l6ZSA9IEdVQ19XT1BDTV9UT1A7Cj4gPiAgCj4gPiBAQCAtNTEyLDYgKzUxMyw3IEBAIGlu dCBpbnRlbF9ndWNfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICAJCWlmIChlcnIp Cj4gPiAgCQkJZ290byBmYWlsOwo+ID4gIAo+ID4gKwkJaW50ZWxfaHVjX2xvYWQoZGV2KTsKPiA+ ICAJCWVyciA9IGd1Y191Y29kZV94ZmVyKGRldl9wcml2KTsKPiA+ICAJCWlmICghZXJyKQo+ID4g IAkJCWJyZWFrOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1 Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmgKPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi4zY2UwMjk5Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWMuaAo+ID4gQEAgLTAsMCArMSw0MiBA QAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPiA+ ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPiArICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCj4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gPiArICogU29mdHdhcmUuCj4gPiArICoK PiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAo+ID4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gPiArICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKPiA+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gPiArICogSU4gVEhFIFNPRlRX QVJFLgo+ID4gKyAqCj4gPiArICovCj4gPiArI2lmbmRlZiBfSU5URUxfSFVDX0hfCj4gPiArI2Rl ZmluZSBfSU5URUxfSFVDX0hfCj4gPiArCj4gPiArI2luY2x1ZGUgImludGVsX2d1Yy5oIgo+ID4g Kwo+ID4gKyNkZWZpbmUgSFVDX1NUQVRVUzIJCV9NTUlPKDB4RDNCMCkKPiA+ICsjZGVmaW5lICAg SFVDX0ZXX1ZFUklGSUVECSgxPDw3KQo+ID4gKwo+ID4gK3N0cnVjdCBpbnRlbF9odWMgewo+ID4g KwkvKiBHZW5lcmljIHVDIGZpcm13YXJlIG1hbmFnZW1lbnQgKi8KPiA+ICsJc3RydWN0IGludGVs X3VjX2Z3IGh1Y19mdzsKPiA+ICsKPiA+ICsJLyogSHVDLXNwZWNpZmljIGFkZGl0aW9ucyAqLwo+ ID4gK307Cj4gPiArCj4gPiArdm9pZCBpbnRlbF9odWNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKPiA+ICt2b2lkIGludGVsX2h1Y19maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ ID4gK2ludCBpbnRlbF9odWNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ICsjZW5k aWYKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWNfbG9hZGVy LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWNfbG9hZGVyLmMKPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi44ZDJiNmFiCj4gPiAtLS0gL2Rldi9udWxs Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWNfbG9hZGVyLmMKPiA+IEBA IC0wLDAgKzEsMjcwIEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBD b3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAo+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0 d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK PiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiA+ICsg KiBJTiBUSEUgU09GVFdBUkUuCj4gPiArICoKPiA+ICsgKi8KPiA+ICsjaW5jbHVkZSA8bGludXgv ZmlybXdhcmUuaD4KPiA+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiA+ICsjaW5jbHVkZSAiaW50 ZWxfaHVjLmgiCj4gPiArCj4gPiArLyoqCj4gPiArICogRE9DOiBIdUMgRmlybXdhcmUKPiA+ICsg Kgo+ID4gKyAqIE1vdGl2YXRpb246Cj4gPiArICogR0VOOSBpbnRyb2R1Y2VzIGEgbmV3IGRlZGlj YXRlZCBmaXJtd2FyZSBmb3IgdXNhZ2UgaW4gbWVkaWEgSEVWQyAoSGlnaAo+ID4gKyAqIEVmZmlj aWVuY3kgVmlkZW8gQ29kaW5nKSBvcGVyYXRpb25zLiBVc2Vyc3BhY2UgY2FuIHVzZSB0aGUgZmly bXdhcmUKPiA+ICsgKiBjYXBhYmlsaXRpZXMgYnkgYWRkaW5nIEh1QyBzcGVjaWZpYyBjb21tYW5k cyB0byBiYXRjaCBidWZmZXJzLgo+ID4gKyAqCj4gPiArICogSW1wbGVtZW50YXRpb246Cj4gPiAr ICogVGhlIHNhbWUgZmlybXdhcmUgbG9hZGVyIGlzIHVzZWQgYXMgdGhlIEd1Qy4gSG93ZXZlciwg dGhlIGFjdHVhbAo+ID4gKyAqIGxvYWRpbmcgdG8gSFcgaXMgZGVmZXJyZWQgdW50aWwgR0VNIGlu aXRpYWxpemF0aW9uIGlzIGRvbmUuCj4gPiArICoKPiA+ICsgKiBOb3RlIHRoYXQgSHVDIGZpcm13 YXJlIGxvYWRpbmcgbXVzdCBiZSBkb25lIGJlZm9yZSBHdUMgbG9hZGluZy4KPiA+ICsgKi8KPiA+ ICsKPiA+ICsjZGVmaW5lIFNLTF9GV19NQUpPUiAwMQo+ID4gKyNkZWZpbmUgU0tMX0ZXX01JTk9S IDA3Cj4gPiArI2RlZmluZSBTS0xfQkxEX05VTSAxMzk4Cj4gPiArI2RlZmluZSBJOTE1X1NLTF9I VUNfVUNPREUgImk5MTUvc2tsX2h1Y192ZXIwMV8wN18xMzk4LmJpbiIKPiBUaGlzIHNob3VsZCBo YXZlIGdvbmUgYXdheS4KPiAKPiA+ICsKPiA+ICsjZGVmaW5lIEhVQ19GV19QQVRIKHBsYXRmb3Jt LCBtYWpvciwgbWlub3IsIGJsZF9udW0pIFwKPiA+ICsJImk5MTUvIiBfX3N0cmluZ2lmeShwbGF0 Zm9ybSkgIl9odWNfdmVyIiBfX3N0cmluZ2lmeShtYWpvcikgIl8iIFwKPiA+ICsJX19zdHJpbmdp ZnkobWlub3IpICJfIiBfX3N0cmluZ2lmeShibGRfbnVtKSAiLmJpbiIKPiA+ICsKPiA+ICsjZGVm aW5lIEk5MTVfU0tMX0hVQ19VQ09ERSBIVUNfRldfUEFUSChza2wsIFNLTF9GV19NQUpPUiwgXAo+ ID4gKwlTS0xfRldfTUlOT1IsIFNLTF9CTERfTlVNKQo+ID4gK01PRFVMRV9GSVJNV0FSRShJOTE1 X1NLTF9IVUNfVUNPREUpOwo+IFVzZSB0aGUgbmV3IG1hY3JvLgo+IApOZXZlcm1pbmQuIFlvdSBo YXZlIHRoaXMgcmlnaHQuIEp1c3QgbmVlZCB0byByZW1vdmUgYWJvdmUgb2xkIG1hY3JvIGRlZmlu aXRpb24uCj4gPiArCj4gPiArLyoqCj4gPiArICogaHVjX3Vjb2RlX3hmZXIoKSAtIERNQSdzIHRo ZSBmaXJtd2FyZQo+ID4gKyAqIEBkZXZfcHJpdjogdGhlIGRybSBkZXZpY2UKPiA+ICsgKgo+ID4g KyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIGdlbSBvYmplY3QgY29udGFpbmluZyB0aGUgZmly bXdhcmUsIHNldHMgdXAgdGhlIERNQQo+ID4gKyAqIGVuZ2luZSBNTUlPLCB0cmlnZ2VycyB0aGUg RE1BIG9wZXJhdGlvbiBhbmQgd2FpdHMgZm9yIGl0IHRvIGZpbmlzaC4KPiA+ICsgKgo+ID4gKyAq IFRyYW5zZmVyIHRoZSBmaXJtd2FyZSBpbWFnZSB0byBSQU0gZm9yIGV4ZWN1dGlvbiBieSB0aGUg bWljcm9jb250cm9sbGVyLgo+ID4gKyAqCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5v bi16ZXJvIG9uIGZhaWx1cmUKPiA+ICsgKi8KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGh1Y191Y29k ZV94ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICt7Cj4gPiArCXN0 cnVjdCBpbnRlbF91Y19mdyAqaHVjX2Z3ID0gJmRldl9wcml2LT5odWMuaHVjX2Z3Owo+ID4gKwlz dHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiA+ICsJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwo+ID4g Kwl1MzIgc2l6ZTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gaTkxNV9nZW1fb2Jq ZWN0X3NldF90b19ndHRfZG9tYWluKGh1Y19mdy0+dWNfZndfb2JqLCBmYWxzZSk7Cj4gPiArCWlm IChyZXQpIHsKPiA+ICsJCURSTV9ERUJVR19EUklWRVIoInNldC1kb21haW4gZmFpbGVkICVkXG4i LCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwl2bWEgPSBpOTE1 X2dlbV9vYmplY3RfZ2d0dF9waW4oaHVjX2Z3LT51Y19md19vYmosIE5VTEwsIDAsIDAsIDApOwo+ ID4gKwlpZiAoSVNfRVJSKHZtYSkpIHsKPiA+ICsJCURSTV9ERUJVR19EUklWRVIoInBpbiBmYWls ZWQgJWRcbiIsIChpbnQpUFRSX0VSUih2bWEpKTsKPiA+ICsJCXJldHVybiBQVFJfRVJSKHZtYSk7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogSW52YWxpZGF0ZSBHdUMgVExCIHRvIGxldCBHdUMgdGFr ZSB0aGUgbGF0ZXN0IHVwZGF0ZXMgdG8gR1RULiAqLwo+ID4gKwlJOTE1X1dSSVRFKEdFTjhfR1RD UiwgR0VOOF9HVENSX0lOVkFMSURBVEUpOwo+ID4gKwo+ID4gKwlpbnRlbF91bmNvcmVfZm9yY2V3 YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gPiArCj4gPiArCS8qIGluaXQgV09Q Q00gKi8KPiA+ICsJSTkxNV9XUklURShHVUNfV09QQ01fU0laRSwgZ3VjX3dvcGNtX3NpemUoZGV2 X3ByaXYpKTsKPiA+ICsJSTkxNV9XUklURShETUFfR1VDX1dPUENNX09GRlNFVCwgR1VDX1dPUENN X09GRlNFVF9WQUxVRSB8Cj4gPiArCQkJSFVDX0xPQURJTkdfQUdFTlRfR1VDKTsKPiA+ICsKPiA+ ICsJLyogU2V0IHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIHVDb2RlICovCj4gPiArCW9mZnNl dCA9IGk5MTVfZ2d0dF9vZmZzZXQodm1hKSArIGh1Y19mdy0+aGVhZGVyX29mZnNldDsKPiA+ICsJ STkxNV9XUklURShETUFfQUREUl8wX0xPVywgbG93ZXJfMzJfYml0cyhvZmZzZXQpKTsKPiA+ICsJ STkxNV9XUklURShETUFfQUREUl8wX0hJR0gsIHVwcGVyXzMyX2JpdHMob2Zmc2V0KSAmIDB4RkZG Rik7Cj4gPiArCj4gPiArCS8qIEhhcmR3YXJlIGRvZXNuJ3QgbG9vayBhdCBkZXN0aW5hdGlvbiBh ZGRyZXNzIGZvciBIdUMuIFNldCBpdCB0byAwLAo+ID4gKwkgKiBidXQgc3RpbGwgcHJvZ3JhbSB0 aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlLgo+ID4gKwkgKi8KPiA+ICsJSTkxNV9XUklURShETUFf QUREUl8xX0xPVywgMCk7Cj4gPiArCUk5MTVfV1JJVEUoRE1BX0FERFJfMV9ISUdILCBETUFfQURE UkVTU19TUEFDRV9XT1BDTSk7Cj4gPiArCj4gPiArCXNpemUgPSBodWNfZnctPmhlYWRlcl9zaXpl ICsgaHVjX2Z3LT51Y29kZV9zaXplOwo+ID4gKwlJOTE1X1dSSVRFKERNQV9DT1BZX1NJWkUsIHNp emUpOwo+ID4gKwo+ID4gKwkvKiBTdGFydCB0aGUgRE1BICovCj4gPiArCUk5MTVfV1JJVEUoRE1B X0NUUkwsIF9NQVNLRURfQklUX0VOQUJMRShIVUNfVUtFUk5FTCB8IFNUQVJUX0RNQSkpOwo+ID4g Kwo+ID4gKwkvKiBXYWl0IGZvciBETUEgdG8gZmluaXNoICovCj4gPiArCXJldCA9IHdhaXRfZm9y KChJOTE1X1JFQUQoRE1BX0NUUkwpICYgU1RBUlRfRE1BKSA9PSAwLCAxMDApOwo+ID4gKwo+ID4g KwlEUk1fREVCVUdfRFJJVkVSKCJIdUMgRE1BIHRyYW5zZmVyIHdhaXQgb3ZlciB3aXRoIHJldCAl ZFxuIiwgcmV0KTsKPiA+ICsKPiA+ICsJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3By aXYsIEZPUkNFV0FLRV9BTEwpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBXZSBrZWVwIHRoZSBv YmplY3QgcGFnZXMgZm9yIHJldXNlIGR1cmluZyByZXN1bWUuIEJ1dCB3ZSBjYW4gdW5waW4gaXQK PiA+ICsJICogbm93IHRoYXQgRE1BIGhhcyBjb21wbGV0ZWQsIHNvIGl0IGRvZXNuJ3QgY29udGlu dWUgdG8gdGFrZSB1cCBzcGFjZS4KPiA+ICsJICovCj4gPiArCWk5MTVfdm1hX3VucGluKHZtYSk7 Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGlu dGVsX2h1Y19pbml0KCkgLSBpbml0aWF0ZSBIdUMgZmlybXdhcmUgbG9hZGluZyByZXF1ZXN0Cj4g PiArICogQGRldjogdGhlIGRybSBkZXZpY2UKPiA+ICsgKgo+ID4gKyAqIENhbGxlZCBlYXJseSBk dXJpbmcgZHJpdmVyIGxvYWQsIGJ1dCBhZnRlciBHRU0gaXMgaW5pdGlhbGlzZWQuIFRoZSBsb2Fk aW5nCj4gPiArICogd2lsbCBjb250aW51ZSBvbmx5IHdoZW4gZHJpdmVyIGV4cGxpY2l0bHkgc3Bl Y2lmeSBmaXJtd2FyZSBuYW1lIGFuZCB2ZXJzaW9uLgo+ID4gKyAqIEFsbCBvdGhlciBjYXNlcyBh cmUgY29uc2lkZXJlZCBhcyBVQ19GSVJNV0FSRV9OT05FIGVpdGhlciBiZWNhdXNlIEhXIGlzIG5v dAo+ID4gKyAqIGNhcGFibGUgb3IgZHJpdmVyIHlldCBzdXBwb3J0IGl0LiBBbmQgdGhlcmUgd2ls bCBiZSBubyBlcnJvciBtZXNzYWdlIGZvcgo+ID4gKyAqIFVDX0ZJUk1XQVJFX05PTkUgY2FzZXMu Cj4gPiArICoKPiA+ICsgKiBUaGUgRE1BLWNvcHlpbmcgdG8gSFcgaXMgZG9uZSBsYXRlciB3aGVu IGludGVsX2h1Y19sb2FkKCkgaXMgY2FsbGVkLgo+ID4gKyAqLwo+ID4gK3ZvaWQgaW50ZWxfaHVj X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+ICsJc3RydWN0IGludGVsX2h1 YyAqaHVjID0gJmRldl9wcml2LT5odWM7Cj4gPiArCXN0cnVjdCBpbnRlbF91Y19mdyAqaHVjX2Z3 ID0gJmh1Yy0+aHVjX2Z3Owo+ID4gKwljb25zdCBjaGFyICpmd19wYXRoID0gTlVMTDsKPiA+ICsK PiA+ICsJaHVjX2Z3LT51Y19kZXYgPSBkZXY7Cj4gPiArCWh1Y19mdy0+dWNfZndfcGF0aCA9IE5V TEw7Cj4gPiArCWh1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gVUNfRklSTVdBUkVfTk9ORTsKPiA+ICsJ aHVjX2Z3LT5sb2FkX3N0YXR1cyA9IFVDX0ZJUk1XQVJFX05PTkU7Cj4gPiArCWh1Y19mdy0+Zndf dHlwZSA9IFVDX0ZXX1RZUEVfSFVDOwo+ID4gKwo+ID4gKwlpZiAoIUhBU19IVUNfVUNPREUoZGV2 X3ByaXYpKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlpZiAoSVNfU0tZTEFLRShkZXZfcHJp dikpIHsKPiA+ICsJCWZ3X3BhdGggPSBJOTE1X1NLTF9IVUNfVUNPREU7Cj4gPiArCQlodWNfZnct Pm1ham9yX3Zlcl93YW50ZWQgPSBTS0xfRldfTUFKT1I7Cj4gPiArCQlodWNfZnctPm1pbm9yX3Zl cl93YW50ZWQgPSBTS0xfRldfTUlOT1I7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKGZ3X3BhdGgg PT0gTlVMTCkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJaHVjX2Z3LT51Y19md19wYXRoID0g ZndfcGF0aDsKPiA+ICsJaHVjX2Z3LT5mZXRjaF9zdGF0dXMgPSBVQ19GSVJNV0FSRV9QRU5ESU5H Owo+ID4gKwo+ID4gKwlEUk1fREVCVUdfRFJJVkVSKCJIdUMgZmlybXdhcmUgcGVuZGluZywgcGF0 aCAlc1xuIiwgZndfcGF0aCk7Cj4gPiArCj4gPiArCWludGVsX3VjX2Z3X2ZldGNoKGRldiwgaHVj X2Z3KTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogaW50ZWxfaHVjX2xvYWQoKSAtIGxv YWQgSHVDIHVDb2RlIHRvIGRldmljZQo+ID4gKyAqIEBkZXY6IHRoZSBkcm0gZGV2aWNlCj4gPiAr ICoKPiA+ICsgKiBDYWxsZWQgZnJvbSBnZW1faW5pdF9odygpIGR1cmluZyBkcml2ZXIgbG9hZGlu ZyBhbmQgYWxzbyBhZnRlciBhIEdQVSByZXNldC4KPiA+ICsgKiBCZSBub3RlIHRoYXQgSHVDIGxv YWRpbmcgbXVzdCBiZSBkb25lIGJlZm9yZSBHdUMgbG9hZGluZy4KPiA+ICsgKgo+ID4gKyAqIFRo ZSBmaXJtd2FyZSBpbWFnZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZmV0Y2hlZCBpbnRvIG1l bW9yeSBieSB0aGUKPiA+ICsgKiBlYXJsaWVyIGNhbGwgdG8gaW50ZWxfaHVjX3Vjb2RlX2luaXQo KSwgc28gaGVyZSB3ZSBuZWVkIG9ubHkgY2hlY2sgdGhhdAo+ID4gKyAqIGlzIHN1Y2NlZWRlZCwg YW5kIHRoZW4gdHJhbnNmZXIgdGhlIGltYWdlIHRvIHRoZSBoL3cuCj4gPiArICoKPiA+ICsgKiBS ZXR1cm46CW5vbi16ZXJvIGNvZGUgb24gZXJyb3IKPiA+ICsgKi8KPiA+ICtpbnQgaW50ZWxfaHVj X2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+ICsJc3RydWN0IGludGVsX3Vj X2Z3ICpodWNfZncgPSAmZGV2X3ByaXYtPmh1Yy5odWNfZnc7Cj4gPiArCWludCBlcnI7Cj4gPiAr Cj4gPiArCWlmIChodWNfZnctPmZldGNoX3N0YXR1cyA9PSBVQ19GSVJNV0FSRV9OT05FKQo+ID4g KwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCURSTV9ERUJVR19EUklWRVIoIiVzIGZ3IHN0YXR1czog ZmV0Y2ggJXMsIGxvYWQgJXNcbiIsCj4gPiArCQlodWNfZnctPnVjX2Z3X3BhdGgsCj4gPiArCQlp bnRlbF91Y19md19zdGF0dXNfcmVwcihodWNfZnctPmZldGNoX3N0YXR1cyksCj4gPiArCQlpbnRl bF91Y19md19zdGF0dXNfcmVwcihodWNfZnctPmxvYWRfc3RhdHVzKSk7Cj4gPiArCj4gPiArCWlm IChodWNfZnctPmZldGNoX3N0YXR1cyA9PSBVQ19GSVJNV0FSRV9TVUNDRVNTICYmCj4gPiArCSAg ICBodWNfZnctPmxvYWRfc3RhdHVzID09IFVDX0ZJUk1XQVJFX0ZBSUwpCj4gPiArCQlyZXR1cm4g LUVOT0VYRUM7Cj4gPiArCj4gPiArCWh1Y19mdy0+bG9hZF9zdGF0dXMgPSBVQ19GSVJNV0FSRV9Q RU5ESU5HOwo+ID4gKwo+ID4gKwlzd2l0Y2ggKGh1Y19mdy0+ZmV0Y2hfc3RhdHVzKSB7Cj4gPiAr CWNhc2UgVUNfRklSTVdBUkVfRkFJTDoKPiA+ICsJCS8qIHNvbWV0aGluZyB3ZW50IHdyb25nIDoo ICovCj4gPiArCQllcnIgPSAtRUlPOwo+ID4gKwkJZ290byBmYWlsOwo+ID4gKwo+ID4gKwljYXNl IFVDX0ZJUk1XQVJFX05PTkU6Cj4gPiArCWNhc2UgVUNfRklSTVdBUkVfUEVORElORzoKPiA+ICsJ ZGVmYXVsdDoKPiA+ICsJCS8qICJjYW4ndCBoYXBwZW4iICovCj4gPiArCQlXQVJOX09OQ0UoMSwg Ikh1QyBmdyAlcyBpbnZhbGlkIGZldGNoX3N0YXR1cyAlcyBbJWRdXG4iLAo+ID4gKwkJCWh1Y19m dy0+dWNfZndfcGF0aCwKPiA+ICsJCQlpbnRlbF91Y19md19zdGF0dXNfcmVwcihodWNfZnctPmZl dGNoX3N0YXR1cyksCj4gPiArCQkJaHVjX2Z3LT5mZXRjaF9zdGF0dXMpOwo+ID4gKwkJZXJyID0g LUVOWElPOwo+ID4gKwkJZ290byBmYWlsOwo+ID4gKwo+ID4gKwljYXNlIFVDX0ZJUk1XQVJFX1NV Q0NFU1M6Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+ID4gKwo+ID4gKwllcnIgPSBodWNfdWNvZGVf eGZlcihkZXZfcHJpdik7Cj4gPiArCWlmIChlcnIpCj4gPiArCQlnb3RvIGZhaWw7Cj4gPiArCj4g PiArCWh1Y19mdy0+bG9hZF9zdGF0dXMgPSBVQ19GSVJNV0FSRV9TVUNDRVNTOwo+ID4gKwo+ID4g KwlEUk1fREVCVUdfRFJJVkVSKCIlcyBmdyBzdGF0dXM6IGZldGNoICVzLCBsb2FkICVzXG4iLAo+ ID4gKwkJaHVjX2Z3LT51Y19md19wYXRoLAo+ID4gKwkJaW50ZWxfdWNfZndfc3RhdHVzX3JlcHIo aHVjX2Z3LT5mZXRjaF9zdGF0dXMpLAo+ID4gKwkJaW50ZWxfdWNfZndfc3RhdHVzX3JlcHIoaHVj X2Z3LT5sb2FkX3N0YXR1cykpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtmYWls Ogo+ID4gKwlpZiAoaHVjX2Z3LT5sb2FkX3N0YXR1cyA9PSBVQ19GSVJNV0FSRV9QRU5ESU5HKQo+ ID4gKwkJaHVjX2Z3LT5sb2FkX3N0YXR1cyA9IFVDX0ZJUk1XQVJFX0ZBSUw7Cj4gPiArCj4gPiAr CURSTV9FUlJPUigiRmFpbGVkIHRvIGNvbXBsZXRlIEh1QyB1Q29kZSBsb2FkIHdpdGggcmV0ICVk XG4iLCBlcnIpOwo+ID4gKwo+ID4gKwlyZXR1cm4gZXJyOwo+ID4gK30KPiA+ICsKPiA+ICsvKioK PiA+ICsgKiBpbnRlbF9odWNfZmluaSgpIC0gY2xlYW4gdXAgcmVzb3VyY2VzIGFsbG9jYXRlZCBm b3IgSHVDCj4gPiArICogQGRldjogdGhlIGRybSBkZXZpY2UKPiA+ICsgKgo+ID4gKyAqIENsZWFu cyB1cCBieSByZWxlYXNpbmcgdGhlIGh1YyBmaXJtd2FyZSBHRU0gb2JqLgo+ID4gKyAqLwo+ID4g K3ZvaWQgaW50ZWxfaHVjX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICt7Cj4gPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+ICsJ c3RydWN0IGludGVsX3VjX2Z3ICpodWNfZncgPSAmZGV2X3ByaXYtPmh1Yy5odWNfZnc7Cj4gPiAr Cj4gPiArCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiA+ICsJaWYgKGh1Y19mdy0+ dWNfZndfb2JqKQo+ID4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChodWNfZnctPnVjX2Z3X29iaik7 Cj4gPiArCWh1Y19mdy0+dWNfZndfb2JqID0gTlVMTDsKPiA+ICsJbXV0ZXhfdW5sb2NrKCZkZXYt PnN0cnVjdF9tdXRleCk7Cj4gPiArCj4gPiArCWh1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gVUNfRklS TVdBUkVfTk9ORTsKPiA+ICt9Cj4gPiAtLSAKPiA+IDIuNy40Cj4gPiAKPiA+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBJbnRlbC1nZnggbWFpbGlu ZyBsaXN0Cj4gPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK