From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH-v11] drm/i915/huc: Add HuC fw loading support Date: Tue, 15 Nov 2016 10:26:46 +0000 Message-ID: References: <1478823321-6009-4-git-send-email-anusha.srivatsa@intel.com> <1479170361-3528-1-git-send-email-anusha.srivatsa@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 228826E571 for ; Tue, 15 Nov 2016 10:26:50 +0000 (UTC) In-Reply-To: <1479170361-3528-1-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 , intel-gfx@lists.freedesktop.org Cc: Peter Antoine , Alex Dai List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE1LzExLzIwMTYgMDA6MzksIEFudXNoYSBTcml2YXRzYSB3cm90ZToKPiBGcm9tOiBQZXRl ciBBbnRvaW5lIDxwZXRlci5hbnRvaW5lQGludGVsLmNvbT4KPgo+IFRoZSBIdUMgbG9hZGluZyBw cm9jZXNzIGlzIHNpbWlsYXIgdG8gR3VDLiBUaGUgaW50ZWxfdWNfZndfZmV0Y2goKQo+IGlzIHVz ZWQgZm9yIGJvdGggY2FzZXMuCj4KPiBIdUMgbG9hZGluZyBuZWVkcyB0byBiZSBiZWZvcmUgR3VD IGxvYWRpbmcuIFRoZSBXT1BDTSBzZXR0aW5nIG11c3QKPiBiZSBkb25lIGVhcmx5IGJlZm9yZSBs b2FkaW5nIGFueSBvZiB0aGVtLgo+Cj4gdjI6IHJlYmFzZWQgb24tdG9wIG9mIGRybS1pbnRlbC1u aWdodGx5Lgo+ICAgICByZW1vdmVkIGlmKEhBU19HVUMoKSkgYmVmb3JlIHRoZSBndWMgY2FsbC4g KEQuR29yZG9uKQo+ICAgICB1cGRhdGUgaHVjX3ZlcnNpb24gbnVtYmVyIG9mIGZvcm1hdC4KPiB2 MzogcmViYXNlZCB0byBkcm0taW50ZWwtbmlnaHRseSwgY2hhbmdlZCB0aGUgZmlsZSBuYW1lIGZv cm1hdCB0bwo+ICAgICBtYXRjaCB0aGUgb25lIGluIHRoZSBodWMgcGFja2FnZS4KPiAgICAgQ2hh bmdlZCBkZXYtPmRldl9wcml2YXRlIHRvIHRvX2k5MTUoKQo+IHY0OiBtb3ZlZCBmdW5jdGlvbiBi YWNrIHRvIHdoZXJlIGl0IHdhcy4KPiAgICAgY2hhbmdlIHdhaXRfZm9yX2F0b21pYyB0byB3YWl0 X2Zvci4KPiB2NTogcmViYXNlZCArIGNvbW1lbnQgY2hhbmdlcy4KPiB2NzogcmViYXNlZC4KPiB2 ODogcmViYXNlZC4KPiB2OTogcmViYXNlZC4gQ2hhbmdlZCB0aGUgeWVhciBpbiB0aGUgY29weXJp Z2h0IG1lc3NhZ2UgdG8gcmVmbGVjdAo+IHRoZSByaWdodCB5ZWFyLkNvcnJlY3QgdGhlIGNvbW1l bnRzLHJlbW92ZSB0aGUgdW53YW50ZWQgV0FSTiBtZXNzYWdlLAo+IHJlcGxhY2UgZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2UoKSB3aXRoIGk5MTVfZ2VtX29iamVjdF9wdXQoKS5NYWtlIHRoZQo+ IHByb3RvdHlwZXMgaW4gaW50ZWxfaHVjLmggbm9uLWV4dGVybi4KPiB2MTA6IHJlYmFzZWQuIFVw ZGF0ZSB0aGUgZmlsZSBjb25zdHJ1Y3Rpb24gZG9uZSBieSBIdUMuIEl0IGlzIHNpbWlsYXIgdG8K PiBHdUMuQWRvcHRlZCB0aGUgYXBwcm9hY2ggdXNlZCBpbi0KPiBodHRwczovL3BhdGNod29yay5m cmVlZGVza3RvcC5vcmcvcGF0Y2gvMTA0MzU1LyA8VHZydGtvIFVyc3VsaW4+Cj4gdjExOiBGaXgg d2FybmluZ3MuIFJlbW92ZSBvbGQgZGVjbGFyYXRpb24uCj4KPiBDYzogVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiBUZXN0ZWQtYnk6IFhpYW5nIEhhaWhhbyA8aGFp aGFvLnhpYW5nQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBBbnVzaGEgU3JpdmF0c2EgPGFu dXNoYS5zcml2YXRzYUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRh aUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2lu ZUBpbnRlbC5jb20+Cj4gUmV2aWV3ZWQtYnk6IERhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBp bnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAg ICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAg MyArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oICAgICB8ICAgMyArCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oICAgICAgICB8ICAgMSArCj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYyB8ICAgNiArLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9odWMuaCAgICAgICAgfCAgNDIgKysrKysKPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfaHVjX2xvYWRlci5jIHwgMjY5ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIDcgZmlsZXMgY2hhbmdlZCwgMzIzIGluc2VydGlvbnMoKyksIDIgZGVsZXRp b25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9o dWMuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVj X2xvYWRlci5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDNkZWE0NmEuLmNmZWE5MjUg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC01Niw2ICs1Niw3IEBAIGk5MTUteSArPSBp OTE1X2NtZF9wYXJzZXIubyBcCj4KPiAgIyBnZW5lcmFsLXB1cnBvc2UgbWljcm9jb250cm9sbGVy IChHdUMpIHN1cHBvcnQKPiAgaTkxNS15ICs9IGludGVsX2d1Y19sb2FkZXIubyBcCj4gKwkgIGlu dGVsX2h1Y19sb2FkZXIubyBcCj4gIAkgIGk5MTVfZ3VjX3N1Ym1pc3Npb24ubwo+Cj4gICMgYXV0 b2dlbmVyYXRlZCBudWxsIHJlbmRlciBzdGF0ZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGlu ZGV4IGM0YTE0ZGUuLjNhNmM0MTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAt NTYsNiArNTYsNyBAQAo+ICAjaW5jbHVkZSAiaW50ZWxfYmlvcy5oIgo+ICAjaW5jbHVkZSAiaW50 ZWxfZHBsbF9tZ3IuaCIKPiAgI2luY2x1ZGUgImludGVsX2d1Yy5oIgo+ICsjaW5jbHVkZSAiaW50 ZWxfaHVjLmgiCj4gICNpbmNsdWRlICJpbnRlbF9scmMuaCIKPiAgI2luY2x1ZGUgImludGVsX3Jp bmdidWZmZXIuaCIKPgo+IEBAIC0xNzkxLDYgKzE3OTIsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSB7Cj4KPiAgCXN0cnVjdCBpbnRlbF9ndnQgKmd2dDsKPgo+ICsJc3RydWN0IGludGVsX2h1 YyBodWM7Cj4gIAlzdHJ1Y3QgaW50ZWxfZ3VjIGd1YzsKPgo+ICAJc3RydWN0IGludGVsX2NzciBj c3I7Cj4gQEAgLTI2MDcsNiArMjYwOSw3IEBAIHN0cnVjdCBkcm1faTkxNV9jbWRfdGFibGUgewo+ ICAjZGVmaW5lIEhBU19HVUMoZGV2X3ByaXYpCSgoZGV2X3ByaXYpLT5pbmZvLmhhc19ndWMpCj4g ICNkZWZpbmUgSEFTX0dVQ19VQ09ERShkZXZfcHJpdikJKEhBU19HVUMoZGV2X3ByaXYpKQo+ICAj ZGVmaW5lIEhBU19HVUNfU0NIRUQoZGV2X3ByaXYpCShIQVNfR1VDKGRldl9wcml2KSkKPiArI2Rl ZmluZSBIQVNfSFVDX1VDT0RFKGRldikJKEhBU19HVUMoZGV2KSkKClBhcmFtZXRlciBuYW1lIHNo b3VsZCBiZSBkZXZfcHJpdi4KCj4gICNkZWZpbmUgSEFTX1JFU09VUkNFX1NUUkVBTUVSKGRldl9w cml2KSAoKGRldl9wcml2KS0+aW5mby5oYXNfcmVzb3VyY2Vfc3RyZWFtZXIpCj4KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfcmVnLmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2d1Y19yZWcuaAo+IGluZGV4IGE0N2UxZTQuLjY0ZTk0MmEgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfcmVnLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19yZWcuaAo+IEBAIC02MSw5ICs2MSwxMiBAQAo+ICAjZGVm aW5lICAgRE1BX0FERFJFU1NfU1BBQ0VfR1RUCQkgICg4IDw8IDE2KQo+ICAjZGVmaW5lIERNQV9D T1BZX1NJWkUJCQlfTU1JTygweGMzMTApCj4gICNkZWZpbmUgRE1BX0NUUkwJCQlfTU1JTygweGMz MTQpCj4gKyNkZWZpbmUgICBIVUNfVUtFUk5FTAkJCSAgKDE8PDkpCj4gICNkZWZpbmUgICBVT1Nf TU9WRQkJCSAgKDE8PDQpCj4gICNkZWZpbmUgICBTVEFSVF9ETUEJCQkgICgxPDwwKQo+ICAjZGVm aW5lIERNQV9HVUNfV09QQ01fT0ZGU0VUCQlfTU1JTygweGMzNDApCj4gKyNkZWZpbmUgICBIVUNf TE9BRElOR19BR0VOVF9WQ1IJCSAgKDA8PDEpCj4gKyNkZWZpbmUgICBIVUNfTE9BRElOR19BR0VO VF9HVUMJCSAgKDE8PDEpCj4gICNkZWZpbmUgICBHVUNfV09QQ01fT0ZGU0VUX1ZBTFVFCSAgMHg4 MDAwMAkvKiA1MTJLQiAqLwo+ICAjZGVmaW5lIEdVQ19NQVhfSURMRV9DT1VOVAkJX01NSU8oMHhD M0U0KQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPiBpbmRleCA0Njk5MGEwLi4zMzhlODAz IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPiBAQCAtMTg0LDYgKzE4NCw3IEBAIGV4 dGVybiBjb25zdCBjaGFyICppbnRlbF91Y19md19zdGF0dXNfcmVwcihlbnVtIGludGVsX3VjX2Z3 X3N0YXR1cyBzdGF0dXMpOwo+ICBleHRlcm4gaW50IGludGVsX2d1Y19zdXNwZW5kKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ICBleHRlcm4gaW50IGludGVsX2d1Y19yZXN1bWUoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7Cj4gIHZvaWQgaW50ZWxfdWNfZndfZmV0Y2goc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdyk7Cj4gK3UzMiBndWNfd29wY21fc2l6 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+Cj4gIC8qIGk5MTVfZ3VjX3N1 Ym1pc3Npb24uYyAqLwo+ICBpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Y19sb2FkZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19s b2FkZXIuYwo+IGluZGV4IDcwYjk2NWQuLjdmM2ZkYjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4gQEAgLTMwOSw3ICszMDksOCBAQCBzdGF0aWMgaW50IGd1 Y191Y29kZV94ZmVyX2RtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAlJ OTE1X1dSSVRFKERNQV9BRERSXzFfSElHSCwgRE1BX0FERFJFU1NfU1BBQ0VfV09QQ00pOwo+Cj4g IAkvKiBGaW5hbGx5IHN0YXJ0IHRoZSBETUEgKi8KPiAtCUk5MTVfV1JJVEUoRE1BX0NUUkwsIF9N QVNLRURfQklUX0VOQUJMRShVT1NfTU9WRSB8IFNUQVJUX0RNQSkpOwo+ICsJSTkxNV9XUklURShE TUFfQ1RSTCwgX01BU0tFRF9CSVRfRU5BQkxFKFVPU19NT1ZFIHwgU1RBUlRfRE1BKSB8Cj4gKwkJ CV9NQVNLRURfQklUX0RJU0FCTEUoSFVDX1VLRVJORUwpKTsKPgo+ICAJLyoKPiAgCSAqIFdhaXQg Zm9yIHRoZSBETUEgdG8gY29tcGxldGUgJiB0aGUgR3VDIHRvIHN0YXJ0IHVwLgo+IEBAIC0zMzQs NyArMzM1LDcgQEAgc3RhdGljIGludCBndWNfdWNvZGVfeGZlcl9kbWEoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJcmV0dXJuIHJldDsKPiAgfQo+Cj4gLXN0YXRpYyB1MzIg Z3VjX3dvcGNtX3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt1MzIg Z3VjX3dvcGNtX3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4g IAl1MzIgd29wY21fc2l6ZSA9IEdVQ19XT1BDTV9UT1A7Cj4KPiBAQCAtNTEyLDYgKzUxMyw3IEBA IGludCBpbnRlbF9ndWNfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCQlpZiAoZXJy KQo+ICAJCQlnb3RvIGZhaWw7Cj4KPiArCQlpbnRlbF9odWNfbG9hZChkZXYpOwo+ICAJCWVyciA9 IGd1Y191Y29kZV94ZmVyKGRldl9wcml2KTsKPiAgCQlpZiAoIWVycikKPiAgCQkJYnJlYWs7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1Yy5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfaHVjLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAuLjNjZTAyOTkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfaHVjLmgKPiBAQCAtMCwwICsxLDQyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDC qSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4g KyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAq Cj4gKyAqLwo+ICsjaWZuZGVmIF9JTlRFTF9IVUNfSF8KPiArI2RlZmluZSBfSU5URUxfSFVDX0hf Cj4gKwo+ICsjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCj4gKwo+ICsjZGVmaW5lIEhVQ19TVEFUVVMy CQlfTU1JTygweEQzQjApCj4gKyNkZWZpbmUgICBIVUNfRldfVkVSSUZJRUQJKDE8PDcpCj4gKwo+ ICtzdHJ1Y3QgaW50ZWxfaHVjIHsKPiArCS8qIEdlbmVyaWMgdUMgZmlybXdhcmUgbWFuYWdlbWVu dCAqLwo+ICsJc3RydWN0IGludGVsX3VjX2Z3IGh1Y19mdzsKPiArCj4gKwkvKiBIdUMtc3BlY2lm aWMgYWRkaXRpb25zICovCj4gK307Cj4gKwo+ICt2b2lkIGludGVsX2h1Y19pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ICt2b2lkIGludGVsX2h1Y19maW5pKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+ICtpbnQgaW50ZWxfaHVjX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4g KyNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWNfbG9h ZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWNfbG9hZGVyLmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmNlNTAzMDYKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjX2xvYWRlci5jCj4gQEAgLTAsMCAr MSwyNjkgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24K PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKyNpbmNsdWRlIDxsaW51 eC9maXJtd2FyZS5oPgo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImludGVs X2h1Yy5oIgo+ICsKPiArLyoqCj4gKyAqIERPQzogSHVDIEZpcm13YXJlCj4gKyAqCj4gKyAqIE1v dGl2YXRpb246Cj4gKyAqIEdFTjkgaW50cm9kdWNlcyBhIG5ldyBkZWRpY2F0ZWQgZmlybXdhcmUg Zm9yIHVzYWdlIGluIG1lZGlhIEhFVkMgKEhpZ2gKPiArICogRWZmaWNpZW5jeSBWaWRlbyBDb2Rp bmcpIG9wZXJhdGlvbnMuIFVzZXJzcGFjZSBjYW4gdXNlIHRoZSBmaXJtd2FyZQo+ICsgKiBjYXBh YmlsaXRpZXMgYnkgYWRkaW5nIEh1QyBzcGVjaWZpYyBjb21tYW5kcyB0byBiYXRjaCBidWZmZXJz Lgo+ICsgKgo+ICsgKiBJbXBsZW1lbnRhdGlvbjoKPiArICogVGhlIHNhbWUgZmlybXdhcmUgbG9h ZGVyIGlzIHVzZWQgYXMgdGhlIEd1Qy4gSG93ZXZlciwgdGhlIGFjdHVhbAo+ICsgKiBsb2FkaW5n IHRvIEhXIGlzIGRlZmVycmVkIHVudGlsIEdFTSBpbml0aWFsaXphdGlvbiBpcyBkb25lLgo+ICsg Kgo+ICsgKiBOb3RlIHRoYXQgSHVDIGZpcm13YXJlIGxvYWRpbmcgbXVzdCBiZSBkb25lIGJlZm9y ZSBHdUMgbG9hZGluZy4KPiArICovCj4gKwo+ICsjZGVmaW5lIFNLTF9GV19NQUpPUiAwMQo+ICsj ZGVmaW5lIFNLTF9GV19NSU5PUiAwNwo+ICsjZGVmaW5lIFNLTF9CTERfTlVNIDEzOTgKPiArCj4g KyNkZWZpbmUgSFVDX0ZXX1BBVEgocGxhdGZvcm0sIG1ham9yLCBtaW5vciwgYmxkX251bSkgXAo+ ICsJImk5MTUvIiBfX3N0cmluZ2lmeShwbGF0Zm9ybSkgIl9odWNfdmVyIiBfX3N0cmluZ2lmeSht YWpvcikgIl8iIFwKPiArCV9fc3RyaW5naWZ5KG1pbm9yKSAiXyIgX19zdHJpbmdpZnkoYmxkX251 bSkgIi5iaW4iCgpBcG9sb2dpZXMgaWYgSSBtaXNzZWQgaXQsIGJ1dCB3YXMgaXQgZXZlciBkaXNj dXNzZWQgd2h5IGRvIHdlIG5lZWQgdGhlIApidWlsZCBudW1iZXIgaW4gdGhlIGZpbGVuYW1lPyBN b3JlIHNvLCBmb3IgdGhlIGRyaXZlciB0byBrbm93IGFib3V0IGl0IAp3aGVuIGl0IG90aGVyd2lz ZSBkb2VzIG5vdCB1c2UgaXQ/Cgo+ICsKPiArI2RlZmluZSBJOTE1X1NLTF9IVUNfVUNPREUgSFVD X0ZXX1BBVEgoc2tsLCBTS0xfRldfTUFKT1IsIFwKPiArCVNLTF9GV19NSU5PUiwgU0tMX0JMRF9O VU0pCj4gK01PRFVMRV9GSVJNV0FSRShJOTE1X1NLTF9IVUNfVUNPREUpOwo+ICsKPiArLyoqCj4g KyAqIGh1Y191Y29kZV94ZmVyKCkgLSBETUEncyB0aGUgZmlybXdhcmUKPiArICogQGRldl9wcml2 OiB0aGUgZHJtIGRldmljZQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBnZW0g b2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpcm13YXJlLCBzZXRzIHVwIHRoZSBETUEKPiArICogZW5n aW5lIE1NSU8sIHRyaWdnZXJzIHRoZSBETUEgb3BlcmF0aW9uIGFuZCB3YWl0cyBmb3IgaXQgdG8g ZmluaXNoLgo+ICsgKgo+ICsgKiBUcmFuc2ZlciB0aGUgZmlybXdhcmUgaW1hZ2UgdG8gUkFNIGZv ciBleGVjdXRpb24gYnkgdGhlIG1pY3JvY29udHJvbGxlci4KPiArICoKPiArICogUmV0dXJuOiAw IG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUKPiArICovCj4gKwo+ICtzdGF0aWMgaW50 IGh1Y191Y29kZV94ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ ICsJc3RydWN0IGludGVsX3VjX2Z3ICpodWNfZncgPSAmZGV2X3ByaXYtPmh1Yy5odWNfZnc7Cj4g KwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiArCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKPiAr CXUzMiBzaXplOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0 X3RvX2d0dF9kb21haW4oaHVjX2Z3LT51Y19md19vYmosIGZhbHNlKTsKPiArCWlmIChyZXQpIHsK PiArCQlEUk1fREVCVUdfRFJJVkVSKCJzZXQtZG9tYWluIGZhaWxlZCAlZFxuIiwgcmV0KTsKPiAr CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3Bp bihodWNfZnctPnVjX2Z3X29iaiwgTlVMTCwgMCwgMCwgMCk7Cj4gKwlpZiAoSVNfRVJSKHZtYSkp IHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJwaW4gZmFpbGVkICVkXG4iLCAoaW50KVBUUl9FUlIo dm1hKSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIodm1hKTsKPiArCX0KPiArCj4gKwkvKiBJbnZhbGlk YXRlIEd1QyBUTEIgdG8gbGV0IEd1QyB0YWtlIHRoZSBsYXRlc3QgdXBkYXRlcyB0byBHVFQuICov Cj4gKwlJOTE1X1dSSVRFKEdFTjhfR1RDUiwgR0VOOF9HVENSX0lOVkFMSURBVEUpOwo+ICsKPiAr CWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKPiAr Cj4gKwkvKiBpbml0IFdPUENNICovCj4gKwlJOTE1X1dSSVRFKEdVQ19XT1BDTV9TSVpFLCBndWNf d29wY21fc2l6ZShkZXZfcHJpdikpOwo+ICsJSTkxNV9XUklURShETUFfR1VDX1dPUENNX09GRlNF VCwgR1VDX1dPUENNX09GRlNFVF9WQUxVRSB8Cj4gKwkJCUhVQ19MT0FESU5HX0FHRU5UX0dVQyk7 Cj4gKwo+ICsJLyogU2V0IHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIHVDb2RlICovCj4gKwlv ZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KHZtYSkgKyBodWNfZnctPmhlYWRlcl9vZmZzZXQ7Cj4g KwlJOTE1X1dSSVRFKERNQV9BRERSXzBfTE9XLCBsb3dlcl8zMl9iaXRzKG9mZnNldCkpOwo+ICsJ STkxNV9XUklURShETUFfQUREUl8wX0hJR0gsIHVwcGVyXzMyX2JpdHMob2Zmc2V0KSAmIDB4RkZG Rik7Cj4gKwo+ICsJLyogSGFyZHdhcmUgZG9lc24ndCBsb29rIGF0IGRlc3RpbmF0aW9uIGFkZHJl c3MgZm9yIEh1Qy4gU2V0IGl0IHRvIDAsCj4gKwkgKiBidXQgc3RpbGwgcHJvZ3JhbSB0aGUgY29y cmVjdCBhZGRyZXNzIHNwYWNlLgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKERNQV9BRERSXzFfTE9X LCAwKTsKPiArCUk5MTVfV1JJVEUoRE1BX0FERFJfMV9ISUdILCBETUFfQUREUkVTU19TUEFDRV9X T1BDTSk7Cj4gKwo+ICsJc2l6ZSA9IGh1Y19mdy0+aGVhZGVyX3NpemUgKyBodWNfZnctPnVjb2Rl X3NpemU7Cj4gKwlJOTE1X1dSSVRFKERNQV9DT1BZX1NJWkUsIHNpemUpOwo+ICsKPiArCS8qIFN0 YXJ0IHRoZSBETUEgKi8KPiArCUk5MTVfV1JJVEUoRE1BX0NUUkwsIF9NQVNLRURfQklUX0VOQUJM RShIVUNfVUtFUk5FTCB8IFNUQVJUX0RNQSkpOwo+ICsKPiArCS8qIFdhaXQgZm9yIERNQSB0byBm aW5pc2ggKi8KPiArCXJldCA9IHdhaXRfZm9yKChJOTE1X1JFQUQoRE1BX0NUUkwpICYgU1RBUlRf RE1BKSA9PSAwLCAxMDApOwo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIkh1QyBETUEgdHJhbnNm ZXIgd2FpdCBvdmVyIHdpdGggcmV0ICVkXG4iLCByZXQpOwo+ICsKPiArCWludGVsX3VuY29yZV9m b3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKPiArCj4gKwkvKgo+ICsJICog V2Uga2VlcCB0aGUgb2JqZWN0IHBhZ2VzIGZvciByZXVzZSBkdXJpbmcgcmVzdW1lLiBCdXQgd2Ug Y2FuIHVucGluIGl0Cj4gKwkgKiBub3cgdGhhdCBETUEgaGFzIGNvbXBsZXRlZCwgc28gaXQgZG9l c24ndCBjb250aW51ZSB0byB0YWtlIHVwIHNwYWNlLgo+ICsJICovCj4gKwlpOTE1X3ZtYV91bnBp bih2bWEpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KCkl0IG1heSBiZSBwb3NzaWJsZSB0byBl eHRyYWN0IHNvbWUgY29tbW9uYWxpdHkgYmV0d2VlbiB0aGlzIGFuZCAKZ3VjX3Vjb2RlX3hmZXIo X2RtYSksIGJ1dCBpdCBjYW4gYmUgZG9uZSBhcyBhIGZvbGxvd3VwLgoKPiArCj4gKy8qKgo+ICsg KiBpbnRlbF9odWNfaW5pdCgpIC0gaW5pdGlhdGUgSHVDIGZpcm13YXJlIGxvYWRpbmcgcmVxdWVz dAo+ICsgKiBAZGV2OiB0aGUgZHJtIGRldmljZQo+ICsgKgo+ICsgKiBDYWxsZWQgZWFybHkgZHVy aW5nIGRyaXZlciBsb2FkLCBidXQgYWZ0ZXIgR0VNIGlzIGluaXRpYWxpc2VkLiBUaGUgbG9hZGlu Zwo+ICsgKiB3aWxsIGNvbnRpbnVlIG9ubHkgd2hlbiBkcml2ZXIgZXhwbGljaXRseSBzcGVjaWZ5 IGZpcm13YXJlIG5hbWUgYW5kIHZlcnNpb24uCj4gKyAqIEFsbCBvdGhlciBjYXNlcyBhcmUgY29u c2lkZXJlZCBhcyBVQ19GSVJNV0FSRV9OT05FIGVpdGhlciBiZWNhdXNlIEhXIGlzIG5vdAo+ICsg KiBjYXBhYmxlIG9yIGRyaXZlciB5ZXQgc3VwcG9ydCBpdC4gQW5kIHRoZXJlIHdpbGwgYmUgbm8g ZXJyb3IgbWVzc2FnZSBmb3IKPiArICogVUNfRklSTVdBUkVfTk9ORSBjYXNlcy4KPiArICoKPiAr ICogVGhlIERNQS1jb3B5aW5nIHRvIEhXIGlzIGRvbmUgbGF0ZXIgd2hlbiBpbnRlbF9odWNfbG9h ZCgpIGlzIGNhbGxlZC4KPiArICovCj4gK3ZvaWQgaW50ZWxfaHVjX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShkZXYpOwo+ICsJc3RydWN0IGludGVsX2h1YyAqaHVjID0gJmRldl9wcml2LT5odWM7 Cj4gKwlzdHJ1Y3QgaW50ZWxfdWNfZncgKmh1Y19mdyA9ICZodWMtPmh1Y19mdzsKPiArCWNvbnN0 IGNoYXIgKmZ3X3BhdGggPSBOVUxMOwo+ICsKPiArCWh1Y19mdy0+dWNfZGV2ID0gZGV2Owo+ICsJ aHVjX2Z3LT51Y19md19wYXRoID0gTlVMTDsKPiArCWh1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gVUNf RklSTVdBUkVfTk9ORTsKPiArCWh1Y19mdy0+bG9hZF9zdGF0dXMgPSBVQ19GSVJNV0FSRV9OT05F Owo+ICsJaHVjX2Z3LT5md190eXBlID0gVUNfRldfVFlQRV9IVUM7Cj4gKwo+ICsJaWYgKCFIQVNf SFVDX1VDT0RFKGRldl9wcml2KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKElTX1NLWUxBS0Uo ZGV2X3ByaXYpKSB7Cj4gKwkJZndfcGF0aCA9IEk5MTVfU0tMX0hVQ19VQ09ERTsKPiArCQlodWNf ZnctPm1ham9yX3Zlcl93YW50ZWQgPSBTS0xfRldfTUFKT1I7Cj4gKwkJaHVjX2Z3LT5taW5vcl92 ZXJfd2FudGVkID0gU0tMX0ZXX01JTk9SOwo+ICsJfQoKV2h5IG5vdCAiZWxzZSByZXR1cm4iIGlu c3RlYWQgb2YgdGhlIGZ3X3BhdGggY2hlY2sgYmVsb3c/IChDb3VsZCByZW1vdmUgCmZ3X3BhdGgg PSBOVUxMIGluaXRpYWxpemVyIHRoZW4pLgoKPiArCj4gKwlpZiAoZndfcGF0aCA9PSBOVUxMKQo+ ICsJCXJldHVybjsKPiArCj4gKwlodWNfZnctPnVjX2Z3X3BhdGggPSBmd19wYXRoOwo+ICsJaHVj X2Z3LT5mZXRjaF9zdGF0dXMgPSBVQ19GSVJNV0FSRV9QRU5ESU5HOwo+ICsKPiArCURSTV9ERUJV R19EUklWRVIoIkh1QyBmaXJtd2FyZSBwZW5kaW5nLCBwYXRoICVzXG4iLCBmd19wYXRoKTsKPiAr Cj4gKwlpbnRlbF91Y19md19mZXRjaChkZXYsIGh1Y19mdyk7Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBpbnRlbF9odWNfbG9hZCgpIC0gbG9hZCBIdUMgdUNvZGUgdG8gZGV2aWNlCj4gKyAqIEBkZXY6 IHRoZSBkcm0gZGV2aWNlCj4gKyAqCj4gKyAqIENhbGxlZCBmcm9tIGdlbV9pbml0X2h3KCkgZHVy aW5nIGRyaXZlciBsb2FkaW5nIGFuZCBhbHNvIGFmdGVyIGEgR1BVIHJlc2V0Lgo+ICsgKiBCZSBu b3RlIHRoYXQgSHVDIGxvYWRpbmcgbXVzdCBiZSBkb25lIGJlZm9yZSBHdUMgbG9hZGluZy4KPiAr ICoKPiArICogVGhlIGZpcm13YXJlIGltYWdlIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBmZXRj aGVkIGludG8gbWVtb3J5IGJ5IHRoZQo+ICsgKiBlYXJsaWVyIGNhbGwgdG8gaW50ZWxfaHVjX3Vj b2RlX2luaXQoKSwgc28gaGVyZSB3ZSBuZWVkIG9ubHkgY2hlY2sgdGhhdAoKaW50ZWxfaHVjX3Vj b2RlX2luaXQgZXhpc3RzIGFueXdoZXJlPwoKPiArICogaXMgc3VjY2VlZGVkLCBhbmQgdGhlbiB0 cmFuc2ZlciB0aGUgaW1hZ2UgdG8gdGhlIGgvdy4KPiArICoKPiArICogUmV0dXJuOglub24temVy byBjb2RlIG9uIGVycm9yCj4gKyAqLwo+ICtpbnQgaW50ZWxfaHVjX2xvYWQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShkZXYpOwo+ICsJc3RydWN0IGludGVsX3VjX2Z3ICpodWNfZncgPSAmZGV2X3ByaXYt Pmh1Yy5odWNfZnc7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlmIChodWNfZnctPmZldGNoX3N0YXR1 cyA9PSBVQ19GSVJNV0FSRV9OT05FKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCURSTV9ERUJVR19E UklWRVIoIiVzIGZ3IHN0YXR1czogZmV0Y2ggJXMsIGxvYWQgJXNcbiIsCj4gKwkJaHVjX2Z3LT51 Y19md19wYXRoLAo+ICsJCWludGVsX3VjX2Z3X3N0YXR1c19yZXByKGh1Y19mdy0+ZmV0Y2hfc3Rh dHVzKSwKPiArCQlpbnRlbF91Y19md19zdGF0dXNfcmVwcihodWNfZnctPmxvYWRfc3RhdHVzKSk7 Cj4gKwo+ICsJaWYgKGh1Y19mdy0+ZmV0Y2hfc3RhdHVzID09IFVDX0ZJUk1XQVJFX1NVQ0NFU1Mg JiYKPiArCSAgICBodWNfZnctPmxvYWRfc3RhdHVzID09IFVDX0ZJUk1XQVJFX0ZBSUwpCj4gKwkJ cmV0dXJuIC1FTk9FWEVDOwo+ICsKPiArCWh1Y19mdy0+bG9hZF9zdGF0dXMgPSBVQ19GSVJNV0FS RV9QRU5ESU5HOwo+ICsKPiArCXN3aXRjaCAoaHVjX2Z3LT5mZXRjaF9zdGF0dXMpIHsKPiArCWNh c2UgVUNfRklSTVdBUkVfRkFJTDoKPiArCQkvKiBzb21ldGhpbmcgd2VudCB3cm9uZyA6KCAqLwo+ ICsJCWVyciA9IC1FSU87Cj4gKwkJZ290byBmYWlsOwo+ICsKPiArCWNhc2UgVUNfRklSTVdBUkVf Tk9ORToKPiArCWNhc2UgVUNfRklSTVdBUkVfUEVORElORzoKPiArCWRlZmF1bHQ6Cj4gKwkJLyog ImNhbid0IGhhcHBlbiIgKi8KPiArCQlXQVJOX09OQ0UoMSwgIkh1QyBmdyAlcyBpbnZhbGlkIGZl dGNoX3N0YXR1cyAlcyBbJWRdXG4iLAo+ICsJCQlodWNfZnctPnVjX2Z3X3BhdGgsCj4gKwkJCWlu dGVsX3VjX2Z3X3N0YXR1c19yZXByKGh1Y19mdy0+ZmV0Y2hfc3RhdHVzKSwKPiArCQkJaHVjX2Z3 LT5mZXRjaF9zdGF0dXMpOwo+ICsJCWVyciA9IC1FTlhJTzsKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ ICsJY2FzZSBVQ19GSVJNV0FSRV9TVUNDRVNTOgo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWVy ciA9IGh1Y191Y29kZV94ZmVyKGRldl9wcml2KTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBmYWls Owo+ICsKPiArCWh1Y19mdy0+bG9hZF9zdGF0dXMgPSBVQ19GSVJNV0FSRV9TVUNDRVNTOwo+ICsK PiArCURSTV9ERUJVR19EUklWRVIoIiVzIGZ3IHN0YXR1czogZmV0Y2ggJXMsIGxvYWQgJXNcbiIs Cj4gKwkJaHVjX2Z3LT51Y19md19wYXRoLAo+ICsJCWludGVsX3VjX2Z3X3N0YXR1c19yZXByKGh1 Y19mdy0+ZmV0Y2hfc3RhdHVzKSwKPiArCQlpbnRlbF91Y19md19zdGF0dXNfcmVwcihodWNfZnct PmxvYWRfc3RhdHVzKSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtmYWlsOgo+ICsJaWYgKGh1 Y19mdy0+bG9hZF9zdGF0dXMgPT0gVUNfRklSTVdBUkVfUEVORElORykKPiArCQlodWNfZnctPmxv YWRfc3RhdHVzID0gVUNfRklSTVdBUkVfRkFJTDsKPiArCj4gKwlEUk1fRVJST1IoIkZhaWxlZCB0 byBjb21wbGV0ZSBIdUMgdUNvZGUgbG9hZCB3aXRoIHJldCAlZFxuIiwgZXJyKTsKPiArCj4gKwly ZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfaHVjX2ZpbmkoKSAtIGNsZWFu IHVwIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIEh1Qwo+ICsgKiBAZGV2OiB0aGUgZHJtIGRldmlj ZQo+ICsgKgo+ICsgKiBDbGVhbnMgdXAgYnkgcmVsZWFzaW5nIHRoZSBodWMgZmlybXdhcmUgR0VN IG9iai4KPiArICovCj4gK3ZvaWQgaW50ZWxfaHVjX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShk ZXYpOwo+ICsJc3RydWN0IGludGVsX3VjX2Z3ICpodWNfZncgPSAmZGV2X3ByaXYtPmh1Yy5odWNf Znc7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJaWYgKGh1Y19m dy0+dWNfZndfb2JqKQo+ICsJCWk5MTVfZ2VtX29iamVjdF9wdXQoaHVjX2Z3LT51Y19md19vYmop Owo+ICsJaHVjX2Z3LT51Y19md19vYmogPSBOVUxMOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7Cj4gKwo+ICsJaHVjX2Z3LT5mZXRjaF9zdGF0dXMgPSBVQ19GSVJNV0FSRV9O T05FOwo+ICt9Cj4KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==