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:05:34 -0800 Message-ID: <20161112020534.GW18646@jeffdesk> References: <1478823321-6009-1-git-send-email-anusha.srivatsa@intel.com> <1478823321-6009-4-git-send-email-anusha.srivatsa@intel.com> 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 E00476E1B8 for ; Sat, 12 Nov 2016 01:55:23 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1478823321-6009-4-git-send-email-anusha.srivatsa@intel.com> 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 T24gVGh1LCBOb3YgMTAsIDIwMTYgYXQgMDQ6MTU6MTZQTSAtMDgwMCwgQW51c2hhIFNyaXZhdHNh IHdyb3RlOgo+IEZyb206IFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgo+ IAo+IFRoZSBIdUMgbG9hZGluZyBwcm9jZXNzIGlzIHNpbWlsYXIgdG8gR3VDLiBUaGUgaW50ZWxf dWNfZndfZmV0Y2goKQo+IGlzIHVzZWQgZm9yIGJvdGggY2FzZXMuCj4gCj4gSHVDIGxvYWRpbmcg bmVlZHMgdG8gYmUgYmVmb3JlIEd1QyBsb2FkaW5nLiBUaGUgV09QQ00gc2V0dGluZyBtdXN0Cj4g YmUgZG9uZSBlYXJseSBiZWZvcmUgbG9hZGluZyBhbnkgb2YgdGhlbS4KPiAKPiB2MjogcmViYXNl ZCBvbi10b3Agb2YgZHJtLWludGVsLW5pZ2h0bHkuCj4gICAgIHJlbW92ZWQgaWYoSEFTX0dVQygp KSBiZWZvcmUgdGhlIGd1YyBjYWxsLiAoRC5Hb3Jkb24pCj4gICAgIHVwZGF0ZSBodWNfdmVyc2lv biBudW1iZXIgb2YgZm9ybWF0Lgo+IHYzOiByZWJhc2VkIHRvIGRybS1pbnRlbC1uaWdodGx5LCBj aGFuZ2VkIHRoZSBmaWxlIG5hbWUgZm9ybWF0IHRvCj4gICAgIG1hdGNoIHRoZSBvbmUgaW4gdGhl IGh1YyBwYWNrYWdlLgo+ICAgICBDaGFuZ2VkIGRldi0+ZGV2X3ByaXZhdGUgdG8gdG9faTkxNSgp Cj4gdjQ6IG1vdmVkIGZ1bmN0aW9uIGJhY2sgdG8gd2hlcmUgaXQgd2FzLgo+ICAgICBjaGFuZ2Ug d2FpdF9mb3JfYXRvbWljIHRvIHdhaXRfZm9yLgo+IHY1OiByZWJhc2VkICsgY29tbWVudCBjaGFu Z2VzLgo+IHY3OiByZWJhc2VkLgo+IHY4OiByZWJhc2VkLgo+IHY5OiByZWJhc2VkLiBDaGFuZ2Vk IHRoZSB5ZWFyIGluIHRoZSBjb3B5cmlnaHQgbWVzc2FnZSB0byByZWZsZWN0Cj4gdGhlIHJpZ2h0 IHllYXIuQ29ycmVjdCB0aGUgY29tbWVudHMscmVtb3ZlIHRoZSB1bndhbnRlZCBXQVJOIG1lc3Nh Z2UsCj4gcmVwbGFjZSBkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgpIHdpdGggaTkxNV9nZW1f b2JqZWN0X3B1dCgpLk1ha2UgdGhlCj4gcHJvdG90eXBlcyBpbiBpbnRlbF9odWMuaCBub24tZXh0 ZXJuLgo+IHYxMDogcmViYXNlZC4gVXBkYXRlIHRoZSBmaWxlIGNvbnN0cnVjdGlvbiBkb25lIGJ5 IEh1Qy4gSXQgaXMgc2ltaWxhciB0bwo+IEd1Qy5BZG9wdGVkIHRoZSBhcHByb2FjaCB1c2VkIGlu LQo+IGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC8xMDQzNTUvIDxUdnJ0 a28gVXJzdWxpbj4KPiAKPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVs LmNvbT4KPiBUZXN0ZWQtYnk6IFhpYW5nIEhhaWhhbyA8aGFpaGFvLnhpYW5nQGludGVsLmNvbT4K PiBTaWduZWQtb2ZmLWJ5OiBBbnVzaGEgU3JpdmF0c2EgPGFudXNoYS5zcml2YXRzYUBpbnRlbC5j b20+Cj4gU2lnbmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+Cj4gU2lnbmVk LW9mZi1ieTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+Cj4gUmV2aWV3 ZWQtYnk6IERhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Cj4gLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAgMyArCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3VjX3JlZy5oICAgICB8ICAgMyArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2d1Yy5oICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2d1Y19sb2FkZXIuYyB8ICAgNiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWMu aCAgICAgICAgfCAgNDIgKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjX2xv YWRlci5jIHwgMjcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDcgZmlsZXMg Y2hhbmdlZCwgMzI0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWMuaAo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjX2xvYWRlci5jCj4gCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiBpbmRleCAwODU3ZTUwLi5jOTliMGVlIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiBAQCAtNTUsNiArNTUsNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+ ICAKPiAgIyBnZW5lcmFsLXB1cnBvc2UgbWljcm9jb250cm9sbGVyIChHdUMpIHN1cHBvcnQKPiAg aTkxNS15ICs9IGludGVsX2d1Y19sb2FkZXIubyBcCj4gKwkgIGludGVsX2h1Y19sb2FkZXIubyBc Cj4gIAkgIGk5MTVfZ3VjX3N1Ym1pc3Npb24ubwo+ICAKPiAgIyBhdXRvZ2VuZXJhdGVkIG51bGwg cmVuZGVyIHN0YXRlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggMzA3NzdkZS4uZWJl Zjk4MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC01Niw2ICs1Niw3IEBACj4g ICNpbmNsdWRlICJpbnRlbF9iaW9zLmgiCj4gICNpbmNsdWRlICJpbnRlbF9kcGxsX21nci5oIgo+ ICAjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9odWMuaCIKPiAgI2lu Y2x1ZGUgImludGVsX2xyYy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgo+ICAK PiBAQCAtMTgwNCw2ICsxODA1LDcgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ICAKPiAg CXN0cnVjdCBpbnRlbF9ndnQgKmd2dDsKPiAgCj4gKwlzdHJ1Y3QgaW50ZWxfaHVjIGh1YzsKPiAg CXN0cnVjdCBpbnRlbF9ndWMgZ3VjOwo+ICAKPiAgCXN0cnVjdCBpbnRlbF9jc3IgY3NyOwo+IEBA IC0yOTI4LDYgKzI5MzAsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfY21kX3RhYmxlIHsKPiAgI2RlZmlu ZSBIQVNfR1VDKGRldikJCShJTlRFTF9JTkZPKGRldiktPmhhc19ndWMpCj4gICNkZWZpbmUgSEFT X0dVQ19VQ09ERShkZXYpCShIQVNfR1VDKGRldikpCj4gICNkZWZpbmUgSEFTX0dVQ19TQ0hFRChk ZXYpCShIQVNfR1VDKGRldikpCj4gKyNkZWZpbmUgSEFTX0hVQ19VQ09ERShkZXYpCShIQVNfR1VD KGRldikpCj4gIAo+ICAjZGVmaW5lIEhBU19SRVNPVVJDRV9TVFJFQU1FUihkZXYpIChJTlRFTF9J TkZPKGRldiktPmhhc19yZXNvdXJjZV9zdHJlYW1lcikKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9ndWNfcmVnLmgKPiBpbmRleCBhNDdlMWU0Li42NGU5NDJhIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9ndWNfcmVnLmgKPiBAQCAtNjEsOSArNjEsMTIgQEAKPiAgI2RlZmluZSAgIERNQV9B RERSRVNTX1NQQUNFX0dUVAkJICAoOCA8PCAxNikKPiAgI2RlZmluZSBETUFfQ09QWV9TSVpFCQkJ X01NSU8oMHhjMzEwKQo+ICAjZGVmaW5lIERNQV9DVFJMCQkJX01NSU8oMHhjMzE0KQo+ICsjZGVm aW5lICAgSFVDX1VLRVJORUwJCQkgICgxPDw5KQo+ICAjZGVmaW5lICAgVU9TX01PVkUJCQkgICgx PDw0KQo+ICAjZGVmaW5lICAgU1RBUlRfRE1BCQkJICAoMTw8MCkKPiAgI2RlZmluZSBETUFfR1VD X1dPUENNX09GRlNFVAkJX01NSU8oMHhjMzQwKQo+ICsjZGVmaW5lICAgSFVDX0xPQURJTkdfQUdF TlRfVkNSCQkgICgwPDwxKQo+ICsjZGVmaW5lICAgSFVDX0xPQURJTkdfQUdFTlRfR1VDCQkgICgx PDwxKQo+ICAjZGVmaW5lICAgR1VDX1dPUENNX09GRlNFVF9WQUxVRQkgIDB4ODAwMDAJLyogNTEy S0IgKi8KPiAgI2RlZmluZSBHVUNfTUFYX0lETEVfQ09VTlQJCV9NTUlPKDB4QzNFNCkKPiAgCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPiBpbmRleCA0NWRmYTQwLi5mZjZhYmE2IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPiBAQCAtMTgzLDYgKzE4Myw3IEBAIGV4dGVybiBjb25z dCBjaGFyICppbnRlbF91Y19md19zdGF0dXNfcmVwcihlbnVtIGludGVsX3VjX2Z3X3N0YXR1cyBz dGF0dXMpOwo+ICBleHRlcm4gaW50IGludGVsX2d1Y19zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+ICBleHRlcm4gaW50IGludGVsX2d1Y19yZXN1bWUoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cj4gIHZvaWQgaW50ZWxfdWNfZndfZmV0Y2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdyk7Cj4gK3UzMiBndWNfd29wY21fc2l6ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAKPiAgLyogaTkxNV9ndWNfc3VibWlzc2lv bi5jICovCj4gIGludCBpOTE1X2d1Y19zdWJtaXNzaW9uX2luaXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZ3VjX2xvYWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5j Cj4gaW5kZXggZmYyNmQyYy4uZGM3OTk2OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ndWNfbG9hZGVyLmMKPiBAQCAtMzA5LDcgKzMwOSw4IEBAIHN0YXRpYyBpbnQgZ3VjX3Vjb2Rl X3hmZXJfZG1hKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCUk5MTVfV1JJ VEUoRE1BX0FERFJfMV9ISUdILCBETUFfQUREUkVTU19TUEFDRV9XT1BDTSk7Cj4gIAo+ICAJLyog RmluYWxseSBzdGFydCB0aGUgRE1BICovCj4gLQlJOTE1X1dSSVRFKERNQV9DVFJMLCBfTUFTS0VE X0JJVF9FTkFCTEUoVU9TX01PVkUgfCBTVEFSVF9ETUEpKTsKPiArCUk5MTVfV1JJVEUoRE1BX0NU UkwsIF9NQVNLRURfQklUX0VOQUJMRShVT1NfTU9WRSB8IFNUQVJUX0RNQSkgfAo+ICsJCQlfTUFT S0VEX0JJVF9ESVNBQkxFKEhVQ19VS0VSTkVMKSk7Cj4gIAo+ICAJLyoKPiAgCSAqIFdhaXQgZm9y IHRoZSBETUEgdG8gY29tcGxldGUgJiB0aGUgR3VDIHRvIHN0YXJ0IHVwLgo+IEBAIC0zMzQsNyAr MzM1LDcgQEAgc3RhdGljIGludCBndWNfdWNvZGVfeGZlcl9kbWEoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAtc3RhdGljIHUzMiBn dWNfd29wY21fc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3UzMiBn dWNfd29wY21fc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAg CXUzMiB3b3BjbV9zaXplID0gR1VDX1dPUENNX1RPUDsKPiAgCj4gQEAgLTUxMiw2ICs1MTMsNyBA QCBpbnQgaW50ZWxfZ3VjX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAkJaWYgKGVy cikKPiAgCQkJZ290byBmYWlsOwo+ICAKPiArCQlpbnRlbF9odWNfbG9hZChkZXYpOwo+ICAJCWVy ciA9IGd1Y191Y29kZV94ZmVyKGRldl9wcml2KTsKPiAgCQlpZiAoIWVycikKPiAgCQkJYnJlYWs7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1Yy5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjNjZTAyOTkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfaHVjLmgKPiBAQCAtMCwwICsxLDQyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdo dCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4g KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUu Cj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4g KyAqCj4gKyAqLwo+ICsjaWZuZGVmIF9JTlRFTF9IVUNfSF8KPiArI2RlZmluZSBfSU5URUxfSFVD X0hfCj4gKwo+ICsjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCj4gKwo+ICsjZGVmaW5lIEhVQ19TVEFU VVMyCQlfTU1JTygweEQzQjApCj4gKyNkZWZpbmUgICBIVUNfRldfVkVSSUZJRUQJKDE8PDcpCj4g Kwo+ICtzdHJ1Y3QgaW50ZWxfaHVjIHsKPiArCS8qIEdlbmVyaWMgdUMgZmlybXdhcmUgbWFuYWdl bWVudCAqLwo+ICsJc3RydWN0IGludGVsX3VjX2Z3IGh1Y19mdzsKPiArCj4gKwkvKiBIdUMtc3Bl Y2lmaWMgYWRkaXRpb25zICovCj4gK307Cj4gKwo+ICt2b2lkIGludGVsX2h1Y19pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwo+ICt2b2lkIGludGVsX2h1Y19maW5pKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwo+ICtpbnQgaW50ZWxfaHVjX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 Cj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWNf bG9hZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWNfbG9hZGVyLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjhkMmI2YWIKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjX2xvYWRlci5jCj4gQEAgLTAs MCArMSwyNzAgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRp b24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKyNpbmNsdWRlIDxs aW51eC9maXJtd2FyZS5oPgo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImlu dGVsX2h1Yy5oIgo+ICsKPiArLyoqCj4gKyAqIERPQzogSHVDIEZpcm13YXJlCj4gKyAqCj4gKyAq IE1vdGl2YXRpb246Cj4gKyAqIEdFTjkgaW50cm9kdWNlcyBhIG5ldyBkZWRpY2F0ZWQgZmlybXdh cmUgZm9yIHVzYWdlIGluIG1lZGlhIEhFVkMgKEhpZ2gKPiArICogRWZmaWNpZW5jeSBWaWRlbyBD b2RpbmcpIG9wZXJhdGlvbnMuIFVzZXJzcGFjZSBjYW4gdXNlIHRoZSBmaXJtd2FyZQo+ICsgKiBj YXBhYmlsaXRpZXMgYnkgYWRkaW5nIEh1QyBzcGVjaWZpYyBjb21tYW5kcyB0byBiYXRjaCBidWZm ZXJzLgo+ICsgKgo+ICsgKiBJbXBsZW1lbnRhdGlvbjoKPiArICogVGhlIHNhbWUgZmlybXdhcmUg bG9hZGVyIGlzIHVzZWQgYXMgdGhlIEd1Qy4gSG93ZXZlciwgdGhlIGFjdHVhbAo+ICsgKiBsb2Fk aW5nIHRvIEhXIGlzIGRlZmVycmVkIHVudGlsIEdFTSBpbml0aWFsaXphdGlvbiBpcyBkb25lLgo+ ICsgKgo+ICsgKiBOb3RlIHRoYXQgSHVDIGZpcm13YXJlIGxvYWRpbmcgbXVzdCBiZSBkb25lIGJl Zm9yZSBHdUMgbG9hZGluZy4KPiArICovCj4gKwo+ICsjZGVmaW5lIFNLTF9GV19NQUpPUiAwMQo+ ICsjZGVmaW5lIFNLTF9GV19NSU5PUiAwNwo+ICsjZGVmaW5lIFNLTF9CTERfTlVNIDEzOTgKPiAr I2RlZmluZSBJOTE1X1NLTF9IVUNfVUNPREUgImk5MTUvc2tsX2h1Y192ZXIwMV8wN18xMzk4LmJp biIKVGhpcyBzaG91bGQgaGF2ZSBnb25lIGF3YXkuCgo+ICsKPiArI2RlZmluZSBIVUNfRldfUEFU SChwbGF0Zm9ybSwgbWFqb3IsIG1pbm9yLCBibGRfbnVtKSBcCj4gKwkiaTkxNS8iIF9fc3RyaW5n aWZ5KHBsYXRmb3JtKSAiX2h1Y192ZXIiIF9fc3RyaW5naWZ5KG1ham9yKSAiXyIgXAo+ICsJX19z dHJpbmdpZnkobWlub3IpICJfIiBfX3N0cmluZ2lmeShibGRfbnVtKSAiLmJpbiIKPiArCj4gKyNk ZWZpbmUgSTkxNV9TS0xfSFVDX1VDT0RFIEhVQ19GV19QQVRIKHNrbCwgU0tMX0ZXX01BSk9SLCBc Cj4gKwlTS0xfRldfTUlOT1IsIFNLTF9CTERfTlVNKQo+ICtNT0RVTEVfRklSTVdBUkUoSTkxNV9T S0xfSFVDX1VDT0RFKTsKVXNlIHRoZSBuZXcgbWFjcm8uCgo+ICsKPiArLyoqCj4gKyAqIGh1Y191 Y29kZV94ZmVyKCkgLSBETUEncyB0aGUgZmlybXdhcmUKPiArICogQGRldl9wcml2OiB0aGUgZHJt IGRldmljZQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBnZW0gb2JqZWN0IGNv bnRhaW5pbmcgdGhlIGZpcm13YXJlLCBzZXRzIHVwIHRoZSBETUEKPiArICogZW5naW5lIE1NSU8s IHRyaWdnZXJzIHRoZSBETUEgb3BlcmF0aW9uIGFuZCB3YWl0cyBmb3IgaXQgdG8gZmluaXNoLgo+ ICsgKgo+ICsgKiBUcmFuc2ZlciB0aGUgZmlybXdhcmUgaW1hZ2UgdG8gUkFNIGZvciBleGVjdXRp b24gYnkgdGhlIG1pY3JvY29udHJvbGxlci4KPiArICoKPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nl c3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUKPiArICovCj4gKwo+ICtzdGF0aWMgaW50IGh1Y191Y29k ZV94ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3RydWN0 IGludGVsX3VjX2Z3ICpodWNfZncgPSAmZGV2X3ByaXYtPmh1Yy5odWNfZnc7Cj4gKwlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKPiArCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKPiArCXUzMiBzaXpl Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9k b21haW4oaHVjX2Z3LT51Y19md19vYmosIGZhbHNlKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1f REVCVUdfRFJJVkVSKCJzZXQtZG9tYWluIGZhaWxlZCAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsKPiArCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihodWNfZnct PnVjX2Z3X29iaiwgTlVMTCwgMCwgMCwgMCk7Cj4gKwlpZiAoSVNfRVJSKHZtYSkpIHsKPiArCQlE Uk1fREVCVUdfRFJJVkVSKCJwaW4gZmFpbGVkICVkXG4iLCAoaW50KVBUUl9FUlIodm1hKSk7Cj4g KwkJcmV0dXJuIFBUUl9FUlIodm1hKTsKPiArCX0KPiArCj4gKwkvKiBJbnZhbGlkYXRlIEd1QyBU TEIgdG8gbGV0IEd1QyB0YWtlIHRoZSBsYXRlc3QgdXBkYXRlcyB0byBHVFQuICovCj4gKwlJOTE1 X1dSSVRFKEdFTjhfR1RDUiwgR0VOOF9HVENSX0lOVkFMSURBVEUpOwo+ICsKPiArCWludGVsX3Vu Y29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKPiArCj4gKwkvKiBp bml0IFdPUENNICovCj4gKwlJOTE1X1dSSVRFKEdVQ19XT1BDTV9TSVpFLCBndWNfd29wY21fc2l6 ZShkZXZfcHJpdikpOwo+ICsJSTkxNV9XUklURShETUFfR1VDX1dPUENNX09GRlNFVCwgR1VDX1dP UENNX09GRlNFVF9WQUxVRSB8Cj4gKwkJCUhVQ19MT0FESU5HX0FHRU5UX0dVQyk7Cj4gKwo+ICsJ LyogU2V0IHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIHVDb2RlICovCj4gKwlvZmZzZXQgPSBp OTE1X2dndHRfb2Zmc2V0KHZtYSkgKyBodWNfZnctPmhlYWRlcl9vZmZzZXQ7Cj4gKwlJOTE1X1dS SVRFKERNQV9BRERSXzBfTE9XLCBsb3dlcl8zMl9iaXRzKG9mZnNldCkpOwo+ICsJSTkxNV9XUklU RShETUFfQUREUl8wX0hJR0gsIHVwcGVyXzMyX2JpdHMob2Zmc2V0KSAmIDB4RkZGRik7Cj4gKwo+ ICsJLyogSGFyZHdhcmUgZG9lc24ndCBsb29rIGF0IGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIEh1 Qy4gU2V0IGl0IHRvIDAsCj4gKwkgKiBidXQgc3RpbGwgcHJvZ3JhbSB0aGUgY29ycmVjdCBhZGRy ZXNzIHNwYWNlLgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKERNQV9BRERSXzFfTE9XLCAwKTsKPiAr CUk5MTVfV1JJVEUoRE1BX0FERFJfMV9ISUdILCBETUFfQUREUkVTU19TUEFDRV9XT1BDTSk7Cj4g Kwo+ICsJc2l6ZSA9IGh1Y19mdy0+aGVhZGVyX3NpemUgKyBodWNfZnctPnVjb2RlX3NpemU7Cj4g KwlJOTE1X1dSSVRFKERNQV9DT1BZX1NJWkUsIHNpemUpOwo+ICsKPiArCS8qIFN0YXJ0IHRoZSBE TUEgKi8KPiArCUk5MTVfV1JJVEUoRE1BX0NUUkwsIF9NQVNLRURfQklUX0VOQUJMRShIVUNfVUtF Uk5FTCB8IFNUQVJUX0RNQSkpOwo+ICsKPiArCS8qIFdhaXQgZm9yIERNQSB0byBmaW5pc2ggKi8K PiArCXJldCA9IHdhaXRfZm9yKChJOTE1X1JFQUQoRE1BX0NUUkwpICYgU1RBUlRfRE1BKSA9PSAw LCAxMDApOwo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIkh1QyBETUEgdHJhbnNmZXIgd2FpdCBv dmVyIHdpdGggcmV0ICVkXG4iLCByZXQpOwo+ICsKPiArCWludGVsX3VuY29yZV9mb3JjZXdha2Vf cHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKPiArCj4gKwkvKgo+ICsJICogV2Uga2VlcCB0 aGUgb2JqZWN0IHBhZ2VzIGZvciByZXVzZSBkdXJpbmcgcmVzdW1lLiBCdXQgd2UgY2FuIHVucGlu IGl0Cj4gKwkgKiBub3cgdGhhdCBETUEgaGFzIGNvbXBsZXRlZCwgc28gaXQgZG9lc24ndCBjb250 aW51ZSB0byB0YWtlIHVwIHNwYWNlLgo+ICsJICovCj4gKwlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpbnRlbF9odWNfaW5pdCgp IC0gaW5pdGlhdGUgSHVDIGZpcm13YXJlIGxvYWRpbmcgcmVxdWVzdAo+ICsgKiBAZGV2OiB0aGUg ZHJtIGRldmljZQo+ICsgKgo+ICsgKiBDYWxsZWQgZWFybHkgZHVyaW5nIGRyaXZlciBsb2FkLCBi dXQgYWZ0ZXIgR0VNIGlzIGluaXRpYWxpc2VkLiBUaGUgbG9hZGluZwo+ICsgKiB3aWxsIGNvbnRp bnVlIG9ubHkgd2hlbiBkcml2ZXIgZXhwbGljaXRseSBzcGVjaWZ5IGZpcm13YXJlIG5hbWUgYW5k IHZlcnNpb24uCj4gKyAqIEFsbCBvdGhlciBjYXNlcyBhcmUgY29uc2lkZXJlZCBhcyBVQ19GSVJN V0FSRV9OT05FIGVpdGhlciBiZWNhdXNlIEhXIGlzIG5vdAo+ICsgKiBjYXBhYmxlIG9yIGRyaXZl ciB5ZXQgc3VwcG9ydCBpdC4gQW5kIHRoZXJlIHdpbGwgYmUgbm8gZXJyb3IgbWVzc2FnZSBmb3IK PiArICogVUNfRklSTVdBUkVfTk9ORSBjYXNlcy4KPiArICoKPiArICogVGhlIERNQS1jb3B5aW5n IHRvIEhXIGlzIGRvbmUgbGF0ZXIgd2hlbiBpbnRlbF9odWNfbG9hZCgpIGlzIGNhbGxlZC4KPiAr ICovCj4gK3ZvaWQgaW50ZWxfaHVjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICsJ c3RydWN0IGludGVsX2h1YyAqaHVjID0gJmRldl9wcml2LT5odWM7Cj4gKwlzdHJ1Y3QgaW50ZWxf dWNfZncgKmh1Y19mdyA9ICZodWMtPmh1Y19mdzsKPiArCWNvbnN0IGNoYXIgKmZ3X3BhdGggPSBO VUxMOwo+ICsKPiArCWh1Y19mdy0+dWNfZGV2ID0gZGV2Owo+ICsJaHVjX2Z3LT51Y19md19wYXRo ID0gTlVMTDsKPiArCWh1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gVUNfRklSTVdBUkVfTk9ORTsKPiAr CWh1Y19mdy0+bG9hZF9zdGF0dXMgPSBVQ19GSVJNV0FSRV9OT05FOwo+ICsJaHVjX2Z3LT5md190 eXBlID0gVUNfRldfVFlQRV9IVUM7Cj4gKwo+ICsJaWYgKCFIQVNfSFVDX1VDT0RFKGRldl9wcml2 KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpKSB7Cj4gKwkJ ZndfcGF0aCA9IEk5MTVfU0tMX0hVQ19VQ09ERTsKPiArCQlodWNfZnctPm1ham9yX3Zlcl93YW50 ZWQgPSBTS0xfRldfTUFKT1I7Cj4gKwkJaHVjX2Z3LT5taW5vcl92ZXJfd2FudGVkID0gU0tMX0ZX X01JTk9SOwo+ICsJfQo+ICsKPiArCWlmIChmd19wYXRoID09IE5VTEwpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCWh1Y19mdy0+dWNfZndfcGF0aCA9IGZ3X3BhdGg7Cj4gKwlodWNfZnctPmZldGNoX3N0 YXR1cyA9IFVDX0ZJUk1XQVJFX1BFTkRJTkc7Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiSHVD IGZpcm13YXJlIHBlbmRpbmcsIHBhdGggJXNcbiIsIGZ3X3BhdGgpOwo+ICsKPiArCWludGVsX3Vj X2Z3X2ZldGNoKGRldiwgaHVjX2Z3KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGludGVsX2h1Y19s b2FkKCkgLSBsb2FkIEh1QyB1Q29kZSB0byBkZXZpY2UKPiArICogQGRldjogdGhlIGRybSBkZXZp Y2UKPiArICoKPiArICogQ2FsbGVkIGZyb20gZ2VtX2luaXRfaHcoKSBkdXJpbmcgZHJpdmVyIGxv YWRpbmcgYW5kIGFsc28gYWZ0ZXIgYSBHUFUgcmVzZXQuCj4gKyAqIEJlIG5vdGUgdGhhdCBIdUMg bG9hZGluZyBtdXN0IGJlIGRvbmUgYmVmb3JlIEd1QyBsb2FkaW5nLgo+ICsgKgo+ICsgKiBUaGUg ZmlybXdhcmUgaW1hZ2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGZldGNoZWQgaW50byBtZW1v cnkgYnkgdGhlCj4gKyAqIGVhcmxpZXIgY2FsbCB0byBpbnRlbF9odWNfdWNvZGVfaW5pdCgpLCBz byBoZXJlIHdlIG5lZWQgb25seSBjaGVjayB0aGF0Cj4gKyAqIGlzIHN1Y2NlZWRlZCwgYW5kIHRo ZW4gdHJhbnNmZXIgdGhlIGltYWdlIHRvIHRoZSBoL3cuCj4gKyAqCj4gKyAqIFJldHVybjoJbm9u LXplcm8gY29kZSBvbiBlcnJvcgo+ICsgKi8KPiAraW50IGludGVsX2h1Y19sb2FkKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZGV2KTsKPiArCXN0cnVjdCBpbnRlbF91Y19mdyAqaHVjX2Z3ID0gJmRldl9w cml2LT5odWMuaHVjX2Z3Owo+ICsJaW50IGVycjsKPiArCj4gKwlpZiAoaHVjX2Z3LT5mZXRjaF9z dGF0dXMgPT0gVUNfRklSTVdBUkVfTk9ORSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlEUk1fREVC VUdfRFJJVkVSKCIlcyBmdyBzdGF0dXM6IGZldGNoICVzLCBsb2FkICVzXG4iLAo+ICsJCWh1Y19m dy0+dWNfZndfcGF0aCwKPiArCQlpbnRlbF91Y19md19zdGF0dXNfcmVwcihodWNfZnctPmZldGNo X3N0YXR1cyksCj4gKwkJaW50ZWxfdWNfZndfc3RhdHVzX3JlcHIoaHVjX2Z3LT5sb2FkX3N0YXR1 cykpOwo+ICsKPiArCWlmIChodWNfZnctPmZldGNoX3N0YXR1cyA9PSBVQ19GSVJNV0FSRV9TVUND RVNTICYmCj4gKwkgICAgaHVjX2Z3LT5sb2FkX3N0YXR1cyA9PSBVQ19GSVJNV0FSRV9GQUlMKQo+ ICsJCXJldHVybiAtRU5PRVhFQzsKPiArCj4gKwlodWNfZnctPmxvYWRfc3RhdHVzID0gVUNfRklS TVdBUkVfUEVORElORzsKPiArCj4gKwlzd2l0Y2ggKGh1Y19mdy0+ZmV0Y2hfc3RhdHVzKSB7Cj4g KwljYXNlIFVDX0ZJUk1XQVJFX0ZBSUw6Cj4gKwkJLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgOigg Ki8KPiArCQllcnIgPSAtRUlPOwo+ICsJCWdvdG8gZmFpbDsKPiArCj4gKwljYXNlIFVDX0ZJUk1X QVJFX05PTkU6Cj4gKwljYXNlIFVDX0ZJUk1XQVJFX1BFTkRJTkc6Cj4gKwlkZWZhdWx0Ogo+ICsJ CS8qICJjYW4ndCBoYXBwZW4iICovCj4gKwkJV0FSTl9PTkNFKDEsICJIdUMgZncgJXMgaW52YWxp ZCBmZXRjaF9zdGF0dXMgJXMgWyVkXVxuIiwKPiArCQkJaHVjX2Z3LT51Y19md19wYXRoLAo+ICsJ CQlpbnRlbF91Y19md19zdGF0dXNfcmVwcihodWNfZnctPmZldGNoX3N0YXR1cyksCj4gKwkJCWh1 Y19mdy0+ZmV0Y2hfc3RhdHVzKTsKPiArCQllcnIgPSAtRU5YSU87Cj4gKwkJZ290byBmYWlsOwo+ ICsKPiArCWNhc2UgVUNfRklSTVdBUkVfU1VDQ0VTUzoKPiArCQlicmVhazsKPiArCX0KPiArCj4g KwllcnIgPSBodWNfdWNvZGVfeGZlcihkZXZfcHJpdik7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8g ZmFpbDsKPiArCj4gKwlodWNfZnctPmxvYWRfc3RhdHVzID0gVUNfRklSTVdBUkVfU1VDQ0VTUzsK PiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlcyBmdyBzdGF0dXM6IGZldGNoICVzLCBsb2FkICVz XG4iLAo+ICsJCWh1Y19mdy0+dWNfZndfcGF0aCwKPiArCQlpbnRlbF91Y19md19zdGF0dXNfcmVw cihodWNfZnctPmZldGNoX3N0YXR1cyksCj4gKwkJaW50ZWxfdWNfZndfc3RhdHVzX3JlcHIoaHVj X2Z3LT5sb2FkX3N0YXR1cykpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZmFpbDoKPiArCWlm IChodWNfZnctPmxvYWRfc3RhdHVzID09IFVDX0ZJUk1XQVJFX1BFTkRJTkcpCj4gKwkJaHVjX2Z3 LT5sb2FkX3N0YXR1cyA9IFVDX0ZJUk1XQVJFX0ZBSUw7Cj4gKwo+ICsJRFJNX0VSUk9SKCJGYWls ZWQgdG8gY29tcGxldGUgSHVDIHVDb2RlIGxvYWQgd2l0aCByZXQgJWRcbiIsIGVycik7Cj4gKwo+ ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGludGVsX2h1Y19maW5pKCkgLSBj bGVhbiB1cCByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBIdUMKPiArICogQGRldjogdGhlIGRybSBk ZXZpY2UKPiArICoKPiArICogQ2xlYW5zIHVwIGJ5IHJlbGVhc2luZyB0aGUgaHVjIGZpcm13YXJl IEdFTSBvYmouCj4gKyAqLwo+ICt2b2lkIGludGVsX2h1Y19maW5pKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKPiArCXN0cnVjdCBpbnRlbF91Y19mdyAqaHVjX2Z3ID0gJmRldl9wcml2LT5odWMu aHVjX2Z3Owo+ICsKPiArCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCWlmICho dWNfZnctPnVjX2Z3X29iaikKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KGh1Y19mdy0+dWNfZndf b2JqKTsKPiArCWh1Y19mdy0+dWNfZndfb2JqID0gTlVMTDsKPiArCW11dGV4X3VubG9jaygmZGV2 LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCWh1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gVUNfRklSTVdB UkVfTk9ORTsKPiArfQo+IC0tIAo+IDIuNy40Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=