From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v4 4/8] drm/i915: Overcome display engine stride limits via GTT remapping Date: Wed, 30 Jan 2019 20:01:21 +0100 Message-ID: <20190130190121.GK3271@phenom.ffwll.local> References: <20190118152720.24643-5-ville.syrjala@linux.intel.com> <20190124185849.25908-1-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id E94786EBA0 for ; Wed, 30 Jan 2019 19:01:25 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id b14so510483edt.6 for ; Wed, 30 Jan 2019 11:01:25 -0800 (PST) Content-Disposition: inline In-Reply-To: <20190124185849.25908-1-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville Syrjala Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKYW4gMjQsIDIwMTkgYXQgMDg6NTg6NDlQTSArMDIwMCwgVmlsbGUgU3lyamFsYSB3 cm90ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+IAo+IFRoZSBkaXNwbGF5IGVuZ2luZSBzdHJpZGUgbGltaXRzIGFyZSBnZXR0aW5nIGlu IG91ciB3YXkuIE9uIFNLTCsKPiB3ZSBhcmUgbGltaXRlZCB0byA4ayBwaXhlbHMsIHdoaWNoIGlz IGVhc2lseSBleGNlZWRlZCB3aXRoIHRocmVlCj4gNGsgZGlzcGxheXMuIFRvIG92ZXJjb21lIHRo aXMgbGltaXRhdGlvbiB3ZSBjYW4gcmVtYXAgdGhlIHBhZ2VzCj4gaW4gdGhlIEdUVCB0byBwcm92 aWRlIHRoZSBkaXNwbGF5IGVuZ2luZSB3aXRoIGEgdmlldyBvZiBtZW1vcnkKPiB3aXRoIGEgc21h bGxlciBzdHJpZGUuCj4gCj4gVGhlIGNvZGUgaXMgbW9zdGx5IGFscmVhZHkgdGhlcmUgYXMgV2Ug YWxyZWFkeSBwbGF5IHRyaWNrcyB3aXRoCj4gdGhlIHBsYW5lIHN1cmZhY2UgYWRkcmVzcyBhbmQg eC95IG9mZnNldHMuCj4gCj4gQSBmZXcgY2F2ZWF0cyBhcHBseToKPiAqIGxpbmVhciBidWZmZXJz IG5lZWQgdGhlIGZiIHN0cmlkZSB0byBiZSBwYWdlIGFsaWduZWQsIGFzCj4gICBvdGhlcndpc2Ug dGhlIHJlbWFwcGVkIGxpbmVzIHdvdWxkbid0IHN0YXJ0IGF0IHRoZSBzYW1lCj4gICBzcG90Cj4g KiBjb21wcmVzc2VkIGJ1ZmZlcnMgY2FuJ3QgYmUgcmVtYXBwZWQgZHVlIHRvIHRoZSBuZXcKPiAg IGNjcyBoYXNoIG1vZGUgY2F1c2luZyB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwYWdlcwo+ ICAgdG8gYWZmZWN0IHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLiBJ SVJDCj4gICB0aGUgb2xkIGhhc2ggd2FzIGxpbWl0ZWQgdG8gdGhlIGxvdyAxMiBiaXRzIHNvIGlm IHdlIHdlcmUKPiAgIHVzaW5nIHRoYXQgbW9kZSB3ZSBjb3VsZCByZW1hcC4gQXMgaXQgc3RhbmRz IHdlIGp1c3QgcmVmdXNlCj4gICB0byByZW1hcHAgd2l0aCBjb21wcmVzc2VkIGZicy4KPiAqIG5v IHJlbWFwcGluZyBnZW4yLzMgYXMgd2UnZCBuZWVkIGEgZmVuY2UgZm9yIHRoZSByZW1hcHBlZAo+ ICAgdm1hLCB3aGljaCB3ZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZS4gTmVlZCB0byBkZWFsIHdpdGgg dGhlCj4gICBmZW5jZSBQT1QgcmVxdWlyZW1lbnRzLCBhbmQgZG8gc29tZXRoaW5nIGFib3V0IHRo ZSBnZW4yCj4gICBndHQgcGFnZSBzaXplIHZzIHRpbGUgc2l6ZSBkaWZmZXJlbmNlCj4gCj4gdjI6 IFJlYmFzZSBkdWUgdG8gaXNfY2NzX21vZGlmaWVyKCkKPiAgICAgRml4IHVwIHRoZSBza2wrIHN0 cmlkZV9tdWx0IG1lc3MKPiAgICAgbWVtc2V0KCkgdGhlIGd0dF92aWV3IGJlY2F1c2Ugb3RoZXJ3 aXNlIHdlIGNvdWxkIGxlYXZlCj4gICAgIGp1bmsgaW4gcGxhbmVbMV0gd2hlbiBnb2luZyBmcm9t IDIgcGxhbmUgdG8gMSBwbGFuZSBmb3JtYXQKPiB2MzogaW50ZWxfY2hlY2tfcGxhbmVfc3RyaWRl KCkgd2FzIHNwbGl0IG91dAo+IHY0OiBEcm9wIHRoZSBhbGlnbmVkIHZpZXdwb3J0IHN0dWZmLCBp dCB3YXMgbWVhbnQgZm9yIGNjcyB3aGljaAo+ICAgICBjYW4ndCBiZSByZW1hcHBlZCBhbnl3YXkK PiB2NTogSW50cm9kdWNlIGludGVsX3BsYW5lX2Nhbl9yZW1hcCgpCj4gICAgIFJlb3JkZXIgdGhl IGNvZGUgc28gdGhhdCBwbGFuZV9zdGF0ZS0+dmlldyBnZXRzIGZpbGxlZAo+ICAgICBldmVuIGZv ciBpbnZpc2libGUgcGxhbmVzLCBvdGhlcndpc2Ugd2UnZCBrZWVwIHVzaW5nCj4gICAgIHN0YWxl IHZhbHVlcyBhbmQgY291bGQgZXhwbG9kZSBkdXJpbmcgcmVtYXBwaW5nLiBUaGUgbmV3Cj4gICAg IGxvZ2ljIG5ldmVyIHJlbWFwcyBpbnZpc2libGUgcGxhbmVzIHNpbmNlIHdlIGRvbid0IGhhdmUK PiAgICAgYSB2aWV3cG9ydCwgYW5kIGluc3RlYWQgcGlucyB0aGUgZnVsbCBmYiBpbnN0ZWFkCj4g Cj4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4Lmlu dGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwg MzkzICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaCAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJp dGUuYyAgfCAgMzQgKystCj4gIDMgZmlsZXMgY2hhbmdlZCwgMzM0IGluc2VydGlvbnMoKyksIDk0 IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRl eCAxN2M3ZWRlZTk1ODQuLjM3MTNiNmYxNzk2ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMKPiBAQCAtMTg2NSw3ICsxODY1LDcgQEAgaW50ZWxfdGlsZV93aWR0aF9ieXRl cyhjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQo+ICAK PiAgCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7Cj4gIAljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVB UjoKPiAtCQlyZXR1cm4gY3BwOwo+ICsJCXJldHVybiBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYp Owo+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKPiAgCQlpZiAoSVNfR0VOKGRldl9w cml2LCAyKSkKPiAgCQkJcmV0dXJuIDEyODsKPiBAQCAtMTkwOCwxMSArMTkwOCw4IEBAIGludGVs X3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBj b2xvcl9wbGFuZSkKPiAgc3RhdGljIHVuc2lnbmVkIGludAo+ICBpbnRlbF90aWxlX2hlaWdodChj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQo+ICB7Cj4g LQlpZiAoZmItPm1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUikKPiAtCQlyZXR1cm4g MTsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gaW50ZWxfdGlsZV9zaXplKHRvX2k5MTUoZmItPmRldikp IC8KPiAtCQkJaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhmYiwgY29sb3JfcGxhbmUpOwo+ICsJcmV0 dXJuIGludGVsX3RpbGVfc2l6ZSh0b19pOTE1KGZiLT5kZXYpKSAvCj4gKwkJaW50ZWxfdGlsZV93 aWR0aF9ieXRlcyhmYiwgY29sb3JfcGxhbmUpOwo+ICB9Cj4gIAo+ICAvKiBSZXR1cm4gdGhlIHRp bGUgZGltZW5zaW9ucyBpbiBwaXhlbCB1bml0cyAqLwo+IEBAIC0yMTcwLDE2ICsyMTY3LDggQEAg dm9pZCBpbnRlbF9hZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAqeSwKPiAgCQkJICBpbnQgY29s b3JfcGxhbmUpCj4gIAo+ICB7Cj4gLQljb25zdCBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmlu dGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoc3RhdGUtPmJhc2UuZmIpOwo+IC0JdW5zaWdu ZWQgaW50IHJvdGF0aW9uID0gc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gLQo+IC0JaWYgKGRybV9y b3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7Cj4gLQkJKnggKz0gaW50ZWxfZmItPnJvdGF0 ZWRbY29sb3JfcGxhbmVdLng7Cj4gLQkJKnkgKz0gaW50ZWxfZmItPnJvdGF0ZWRbY29sb3JfcGxh bmVdLnk7Cj4gLQl9IGVsc2Ugewo+IC0JCSp4ICs9IGludGVsX2ZiLT5ub3JtYWxbY29sb3JfcGxh bmVdLng7Cj4gLQkJKnkgKz0gaW50ZWxfZmItPm5vcm1hbFtjb2xvcl9wbGFuZV0ueTsKPiAtCX0K PiArCSp4ICs9IHN0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0ueDsKPiArCSp5ICs9IHN0 YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0ueTsKPiAgfQo+ICAKPiAgc3RhdGljIHUzMiBp bnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gQEAgLTI0NTksNiArMjQ0 OCwxMTkgQEAgYm9vbCBpc19jY3NfbW9kaWZpZXIodTY0IG1vZGlmaWVyKQo+ICAJICAgICAgIG1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7Cj4gIH0KPiAgCj4gK3N0YXRp Ywo+ICt1MzIgaW50ZWxfcGxhbmVfZmJfbWF4X3N0cmlkZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gKwkJCSAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllcikK PiArewo+ICsJc3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lOwo+ICsKPiArCS8qCj4gKwkgKiBXZSBhc3N1bWUgdGhlIHByaW1hcnkgcGxhbmUgZm9y IHBpcGUgQSBoYXMKPiArCSAqIHRoZSBoaWdoZXN0IHN0cmlkZSBsaW1pdHMgb2YgdGhlbSBhbGwu Cj4gKwkgKi8KPiArCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZfcHJpdiwgUElQ RV9BKTsKPiArCXBsYW5lID0gdG9faW50ZWxfcGxhbmUoY3J0Yy0+YmFzZS5wcmltYXJ5KTsKPiAr Cj4gKwlyZXR1cm4gcGxhbmUtPm1heF9zdHJpZGUocGxhbmUsIHBpeGVsX2Zvcm1hdCwgbW9kaWZp ZXIsCj4gKwkJCQkgRFJNX01PREVfUk9UQVRFXzApOwo+ICt9Cj4gKwo+ICtzdGF0aWMKPiArdTMy IGludGVsX2ZiX21heF9zdHJpZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICsJCQl1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIpCj4gK3sKPiArCXJldHVybiBpbnRl bF9wbGFuZV9mYl9tYXhfc3RyaWRlKGRldl9wcml2LCBwaXhlbF9mb3JtYXQsIG1vZGlmaWVyKTsK PiArfQo+ICsKPiArc3RhdGljIHUzMgo+ICtpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCj4gK3sKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZmItPmRldik7Cj4gKwo+ ICsJaWYgKGZiLT5tb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKPiArCQl1MzIg bWF4X3N0cmlkZSA9IGludGVsX3BsYW5lX2ZiX21heF9zdHJpZGUoZGV2X3ByaXYsCj4gKwkJCQkJ CQkgICBmYi0+Zm9ybWF0LT5mb3JtYXQsCj4gKwkJCQkJCQkgICBmYi0+bW9kaWZpZXIpOwo+ICsK PiArCQkvKgo+ICsJCSAqIFRvIG1ha2UgcmVtYXBwaW5nIHdpdGggbGluZWFyIGdlbmVyYWxseSBm ZWFzaWJsZQo+ICsJCSAqIHdlIG5lZWQgdGhlIHN0cmlkZSB0byBiZSBwYWdlIGFsaWduZWQuCj4g KwkJICovCj4gKwkJaWYgKGZiLT5waXRjaGVzW2NvbG9yX3BsYW5lXSA+IG1heF9zdHJpZGUpCj4g KwkJCXJldHVybiBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwo+ICsJCWVsc2UKPiArCQkJcmV0 dXJuIDY0Owo+ICsJfSBlbHNlIHsKPiArCQlyZXR1cm4gaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhm YiwgY29sb3JfcGxhbmUpOwo+ICsJfQo+ICt9Cj4gKwo+ICtib29sIGludGVsX3BsYW5lX2Nhbl9y ZW1hcChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICt7Cj4g KwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUt PmJhc2UucGxhbmUpOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiArCWludCBpOwo+ICsKPiArCS8qIFdlIGRvbid0 IHdhbnQgdG8gZGVhbCB3aXRoIHJlbWFwcGluZyB3aXRoIGN1cnNvcnMgKi8KPiArCWlmIChwbGFu ZS0+aWQgPT0gUExBTkVfQ1VSU09SKQo+ICsJCXJldHVybiBmYWxzZTsKClRoZXkgc2hvdWxkIGJl IGNhdWdodCBpbiB0aGUgc3RyaWRlIGNoZWNrIGJlbG93IGFueXdheSAuLi4gd2h5IHNwZWNpYWwK Y2FzZT8KCj4gKwo+ICsJLyoKPiArCSAqIFRoZSBkc3BsYXkgZW5naW5lIGxpbWl0cyBhbHJlYWR5 IG1hdGNoIHRoZSByZW5kZXIKPiArCSAqIGVuZ2luZSBsaW1pdHMsIHNvIG5vdCBtdWNoIHBvaW50 IGluIHJlbWFwcGluZy4KPiArCSAqIFdvdWxkIGFsc28gbmVlZCB0byBkZWFsIHdpdGggdGhlIGZl bmNlIFBPVCBhbGlnbm1lbnQKPiArCSAqIGFuZCBnZW4yIDJLaUIgR1RUIHRpbGUgc2l6ZS4KPiAr CSAqLwo+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA0KQo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwkvKgo+ICsJICogVGhlIG5ldyBDQ1MgaGFzaCBtb2RlIGlzbid0IGNvbXBhdGlibGUg d2l0aCByZW1hcHBpbmcgYXMKPiArCSAqIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHBhZ2Vz IGFmZmVjdHMgdGhlIGNvbXByZXNzZWQgZGF0YS4KPiArCSAqLwo+ICsJaWYgKGlzX2Njc19tb2Rp ZmllcihmYi0+bW9kaWZpZXIpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwkvKiBMaW5lYXIg bmVlZHMgYSBwYWdlIGFsaWduZWQgc3RyaWRlIGZvciByZW1hcHBpbmcgKi8KPiArCWlmIChmYi0+ bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKSB7CgpOb3Qgc3VyZSB3aGV0aGVyIGNy YW1taW5nIGxpbmVhciBmb3JtYXRzIGludG8gdGhlIHNhbWUgbWFjaGVuaXJ5IGlzIHJlYWxseQpj bGV2ZXIgaW4gYSBnb29kIHdheSBvciBiYWQgd2F5IChiZWNhdXNlIHRvbyB0cmlja3kpLiBJIGd1 ZXNzIGl0IHdvcmtzLAphbmQgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQncyB3ZWxsIGV4cGxh aW5nIGluIHNvbWUgY29tbWVudHMgc3ByaW5rbGVkCmFsbCBvdmVyLgoKKnNocnVnKgoKPiArCQl1 bnNpZ25lZCBpbnQgYWxpZ25tZW50ID0gaW50ZWxfdGlsZV9zaXplKGRldl9wcml2KSAtIDE7Cj4g Kwo+ICsJCWZvciAoaSA9IDA7IGkgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpKyspIHsKPiAr CQkJaWYgKGZiLT5waXRjaGVzW2ldICYgYWxpZ25tZW50KQo+ICsJCQkJcmV0dXJuIGZhbHNlOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wg aW50ZWxfcGxhbmVfbmVlZHNfcmVtYXAoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVs X3BsYW5lKHBsYW5lX3N0YXRlLT5iYXNlLnBsYW5lKTsKPiArCWNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gKwl1bnNpZ25lZCBpbnQgcm90 YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKPiArCXUzMiBzdHJpZGUsIG1heF9z dHJpZGU7Cj4gKwo+ICsJLyoKPiArCSAqIE5vIHJlbWFwcGluZyBmb3IgaW52aXNpYmxlIHBsYW5l cyBzaW5jZSB3ZSBkb24ndCBoYXZlCj4gKwkgKiBhbiBhY3R1YWwgc291cmNlIHZpZXdwb3J0IHRv IHJlbWFwLgo+ICsJICovCj4gKwlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCj4gKwkJ cmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmICghaW50ZWxfcGxhbmVfY2FuX3JlbWFwKHBsYW5lX3N0 YXRlKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJLyogRklYTUUgb3RoZXIgY29sb3IgcGxh bmVzPyAqLwoKU2hvdWxkIGJlIHNpbXBsZSB0byBmaXggaWYgd2UgZG8gYSBzaW1pbGFyIGxvb3Ag bGlrZSBpbiBjYW5fcmVtYXAgYWJvdmUuCkp1c3QgdHJ1ZSBpZiBhbnkgb2YgdGhlbSBhcmUgYmln Z2VyIHRoYW4gbWF4IHN0cmlkZS4KCj4gKwlzdHJpZGUgPSBpbnRlbF9mYl9waXRjaChmYiwgMCwg cm90YXRpb24pOwo+ICsJbWF4X3N0cmlkZSA9IHBsYW5lLT5tYXhfc3RyaWRlKHBsYW5lLCBmYi0+ Zm9ybWF0LT5mb3JtYXQsCj4gKwkJCQkgICAgICAgZmItPm1vZGlmaWVyLCByb3RhdGlvbik7Cj4g Kwo+ICsJcmV0dXJuIHN0cmlkZSA+IG1heF9zdHJpZGU7Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQK PiAgaW50ZWxfZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiAgCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiBAQCAtMjYyNCw2ICsyNzI2LDE3 MiBAQCBpbnRlbF9maWxsX2ZiX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkCj4gK2ludGVsX3BsYW5lX3Jl bWFwX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+ICsJCXRvX2k5MTUocGxhbmVfc3Rh dGUtPmJhc2UucGxhbmUtPmRldik7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBs YW5lX3N0YXRlLT5iYXNlLmZiOwo+ICsJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9m YiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiArCXN0cnVjdCBpbnRlbF9yb3RhdGlvbl9p bmZvICppbmZvID0gJnBsYW5lX3N0YXRlLT52aWV3LnJvdGF0ZWQ7Cj4gKwl1bnNpZ25lZCBpbnQg cm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKPiArCWludCBpLCBudW1fcGxh bmVzID0gZmItPmZvcm1hdC0+bnVtX3BsYW5lczsKPiArCXVuc2lnbmVkIGludCB0aWxlX3NpemUg PSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwo+ICsJdW5zaWduZWQgaW50IHNyY194LCBzcmNf eTsKPiArCXVuc2lnbmVkIGludCBzcmNfdywgc3JjX2g7Cj4gKwl1MzIgZ3R0X29mZnNldCA9IDA7 Cj4gKwo+ICsJbWVtc2V0KCZwbGFuZV9zdGF0ZS0+dmlldywgMCwgc2l6ZW9mKHBsYW5lX3N0YXRl LT52aWV3KSk7Cj4gKwlwbGFuZV9zdGF0ZS0+dmlldy50eXBlID0gZHJtX3JvdGF0aW9uXzkwX29y XzI3MChyb3RhdGlvbikgPwo+ICsJCUk5MTVfR0dUVF9WSUVXX1JPVEFURUQgOiBJOTE1X0dHVFRf VklFV19SRU1BUFBFRDsKPiArCj4gKwlzcmNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy54MSA+ PiAxNjsKPiArCXNyY195ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLnkxID4+IDE2Owo+ICsJc3Jj X3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKPiArCXNy Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owo+ICsK PiArCVdBUk5fT04oaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpOwo+ICsKPiArCS8qIE1h a2Ugc3JjIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCAqLwo+ICsJZHJtX3Jl Y3RfdHJhbnNsYXRlKCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMsCj4gKwkJCSAgIC0oc3JjX3ggPDwg MTYpLCAtKHNyY195IDw8IDE2KSk7Cj4gKwo+ICsJLyogUm90YXRlIHNyYyBjb29yZGluYXRlcyB0 byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCj4gKwlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3 MChyb3RhdGlvbikpCj4gKwkJZHJtX3JlY3Rfcm90YXRlKCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMs Cj4gKwkJCQlzcmNfdyA8PCAxNiwgc3JjX2ggPDwgMTYsCj4gKwkJCQlEUk1fTU9ERV9ST1RBVEVf MjcwKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7Cj4gKwkJdW5z aWduZWQgaW50IGhzdWIgPSBpID8gZmItPmZvcm1hdC0+aHN1YiA6IDE7Cj4gKwkJdW5zaWduZWQg aW50IHZzdWIgPSBpID8gZmItPmZvcm1hdC0+dnN1YiA6IDE7Cj4gKwkJdW5zaWduZWQgaW50IGNw cCA9IGZiLT5mb3JtYXQtPmNwcFtpXTsKPiArCQl1bnNpZ25lZCBpbnQgdGlsZV93aWR0aCwgdGls ZV9oZWlnaHQ7Cj4gKwkJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7Cj4gKwkJdW5zaWduZWQg aW50IHBpdGNoX3RpbGVzOwo+ICsJCXVuc2lnbmVkIGludCB4LCB5Owo+ICsJCXUzMiBvZmZzZXQ7 Cj4gKwo+ICsJCWludGVsX3RpbGVfZGltcyhmYiwgaSwgJnRpbGVfd2lkdGgsICZ0aWxlX2hlaWdo dCk7Cj4gKwo+ICsJCXggPSBzcmNfeCAvIGhzdWI7Cj4gKwkJeSA9IHNyY195IC8gdnN1YjsKPiAr CQl3aWR0aCA9IHNyY193IC8gaHN1YjsKPiArCQloZWlnaHQgPSBzcmNfaCAvIHZzdWI7Cj4gKwo+ ICsJCS8qCj4gKwkJICogRmlyc3QgcGl4ZWwgb2YgdGhlIHNyYyB2aWV3cG9ydCBmcm9tIHRoZQo+ ICsJCSAqIHN0YXJ0IG9mIHRoZSBub3JtYWwgZ3R0IG1hcHBpbmcuCj4gKwkJICovCj4gKwkJeCAr PSBpbnRlbF9mYi0+bm9ybWFsW2ldLng7Cj4gKwkJeSArPSBpbnRlbF9mYi0+bm9ybWFsW2ldLnk7 Cj4gKwo+ICsJCW9mZnNldCA9IGludGVsX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoZGV2X3ByaXYs ICZ4LCAmeSwKPiArCQkJCQkJICAgICAgZmIsIGksIGZiLT5waXRjaGVzW2ldLAo+ICsJCQkJCQkg ICAgICBEUk1fTU9ERV9ST1RBVEVfMCwgdGlsZV9zaXplKTsKPiArCQlvZmZzZXQgLz0gdGlsZV9z aXplOwo+ICsKPiArCQlpbmZvLT5wbGFuZVtpXS5vZmZzZXQgPSBvZmZzZXQ7Cj4gKwkJaW5mby0+ cGxhbmVbaV0uc3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVzW2ldLAo+ICsJCQkJCQkg ICAgIHRpbGVfd2lkdGggKiBjcHApOwo+ICsJCWluZm8tPnBsYW5lW2ldLndpZHRoID0gRElWX1JP VU5EX1VQKHggKyB3aWR0aCwgdGlsZV93aWR0aCk7Cj4gKwkJaW5mby0+cGxhbmVbaV0uaGVpZ2h0 ID0gRElWX1JPVU5EX1VQKHkgKyBoZWlnaHQsIHRpbGVfaGVpZ2h0KTsKPiArCj4gKwkJaWYgKGRy bV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7Cj4gKwkJCXN0cnVjdCBkcm1fcmVjdCBy Owo+ICsKPiArCQkJLyogcm90YXRlIHRoZSB4L3kgb2Zmc2V0cyB0byBtYXRjaCB0aGUgR1RUIHZp ZXcgKi8KPiArCQkJci54MSA9IHg7Cj4gKwkJCXIueTEgPSB5Owo+ICsJCQlyLngyID0geCArIHdp ZHRoOwo+ICsJCQlyLnkyID0geSArIGhlaWdodDsKPiArCQkJZHJtX3JlY3Rfcm90YXRlKCZyLAo+ ICsJCQkJCWluZm8tPnBsYW5lW2ldLndpZHRoICogdGlsZV93aWR0aCwKPiArCQkJCQlpbmZvLT5w bGFuZVtpXS5oZWlnaHQgKiB0aWxlX2hlaWdodCwKPiArCQkJCQlEUk1fTU9ERV9ST1RBVEVfMjcw KTsKPiArCQkJeCA9IHIueDE7Cj4gKwkJCXkgPSByLnkxOwo+ICsKPiArCQkJcGl0Y2hfdGlsZXMg PSBpbmZvLT5wbGFuZVtpXS5oZWlnaHQ7Cj4gKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS5zdHJpZGUgPSBwaXRjaF90aWxlcyAqIHRpbGVfaGVpZ2h0Owo+ICsKPiArCQkJLyogcm90YXRl IHRoZSB0aWxlIGRpbWVuc2lvbnMgdG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICovCj4gKwkJCXN3YXAo dGlsZV93aWR0aCwgdGlsZV9oZWlnaHQpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXBpdGNoX3RpbGVz ID0gaW5mby0+cGxhbmVbaV0ud2lkdGg7Cj4gKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS5zdHJpZGUgPSBwaXRjaF90aWxlcyAqIHRpbGVfd2lkdGggKiBjcHA7Cj4gKwkJfQo+ICsKPiAr CQkvKgo+ICsJCSAqIFdlIG9ubHkga2VlcCB0aGUgeC95IG9mZnNldHMsIHNvIHB1c2ggYWxsIG9m IHRoZQo+ICsJCSAqIGd0dCBvZmZzZXQgaW50byB0aGUgeC95IG9mZnNldHMuCj4gKwkJICovCj4g KwkJaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KCZ4LCAmeSwKPiArCQkJCQkgdGlsZV93aWR0aCwg dGlsZV9oZWlnaHQsCj4gKwkJCQkJIHRpbGVfc2l6ZSwgcGl0Y2hfdGlsZXMsCj4gKwkJCQkJIGd0 dF9vZmZzZXQgKiB0aWxlX3NpemUsIDApOwo+ICsKPiArCQlndHRfb2Zmc2V0ICs9IGluZm8tPnBs YW5lW2ldLndpZHRoICogaW5mby0+cGxhbmVbaV0uaGVpZ2h0Owo+ICsKPiArCQlwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbaV0ub2Zmc2V0ID0gMDsKPiArCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbaV0ueCA9IHg7Cj4gKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnkgPSB5Owo+ICsJ fQo+ICt9CgpWYWxpZGF0aW5nIHRoaXMgZnJlYWtzIG1lIG91dC4gS2VlcGluZyBpdCB3b3JraW5n IGZyZWFrcyBtZSBvdXQgZXZlbiBtb3JlLAp0aGVyZSdzIHByZXR0eSBtdWNoIGEgZ3VhcmFudGVl IHRoYXQgd2UgZG9uJ3QuCgpBbHNvLCBJJ20gbm90IHN1cmUgQ0kgZXhlcmNpc2VzIHRoaXMgbXVj aCBldmVuIHdpdGggeW91ciBoYWNrcy4gTW9zdCBvZgpvdXIga21zIHRlc3RzIHVzZSBzaW5nbGUt Y3J0YyBidWZmZXJzLCBzbyBubyBtYXNzaXZlIG92ZXJhbGxvY2F0aW9uLCBzbyBubwpyZWFsIG5l ZWQgZm9yIHZpZXdzLiBUaGUgc2VsZnRlc3RzIGFyZSBnb29kLCBidXQgdGhleSBkb24ndCBjb3Zl ciB0aGUKbWFzc2l2ZSBwaWxlIG9mIHBpeGVsL2Nvb3JkaW5hdGlvbiBmcm9iYmluZyBhYm92ZS4K CkkgdGhpbmsgb25seSB0aGluZyB0aGF0IGNhbiB2YWxpZGF0ZSB0aGlzIGlzOgotIGEgcGlsZSBv ZiBpZ3RzIHRoYXQgbWFrZSBzdXJlIHdlIG92ZXJhbGxvY2F0ZSBwbGVudGlmdWwsIHdoaWxlIHN0 aWxsCiAgZXhlcmNpc2luZyBhbGwgdGhlIG1ham9yIGZiIGxheW91dHMgKHJvdGF0ZWQsIGFsbCB0 aGUgZGlmZmVyZW50IGNwcCwKICB0aWxpbmcgZm9ybWF0cywgYW5kIHRocm93IGluIGEgY2NzIGZv ciBsb2xzIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGJsb3dzCiAgdXApLgotIGtlcm5lbCBwYXRjaCB0 byBwcmVmZXIgcmVtbWFwZWQgb3ZlciBub3JtYWwuIERvbid0IG1vdmUgeW91ciBidWZmZXJzCiAg YXJvdW5kIHRvbyBtdWNoIHRob3VnaCA6LSkKCk5vdyB0aGUgc2Vjb25kIHBhcnQgaXNuJ3QgcmVh bGx5IGEgcmVhbCB3b3JsZCB0aGluZywgc2luY2UgZXZlbiB3aXRoCnktdGlsZWQgdGhhdCBtZWFu cyByZW1hcHBpbmcgdGhlIHZpZXcgZXZlcnkgMzIgcGl4ZWxzIChvbiBhdmVyYWdlLCB3b3JzZQpp ZiB5b3VyIGVkZ2VzIGFyZW4ndCBhbGlnbmVkIHRvIDMyIHBpeGVscywgdGhlbiBpdCdzIHR3aWNl IGFzIG11Y2gpLgoKU28gSSB0aGluayB0aGUgb25seSB0aGluZyB0aGF0IHdvcmtzIGZvciB2YWxp ZGF0aW5nIHRoaXMgYmVhc3QgaXMgYSBwaWxlCm9mIG5ldyBpZ3RzIHRoYXQgYWxsb2NhdGUgZHVt YiZ0aWxlZCBidWZmZXJzIGF0IHRoZSBzaXplIGxpbWl0LCBhbmQgZG8gYWxsCnRoZSByb3RhdGlv bnMvc2NhbGluZy9tb3ZpbmcgdGVzdHMgd2UgYWxyZWFkeSBoYXZlLgoKWWVzIHRoaXMgaXMgcGFp bmZ1bC4KCj4gKwo+ICtzdGF0aWMgaW50Cj4gK2ludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBp bnRlbF9mcmFtZWJ1ZmZlciAqZmIgPQo+ICsJCXRvX2ludGVsX2ZyYW1lYnVmZmVyKHBsYW5lX3N0 YXRlLT5iYXNlLmZiKTsKPiArCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5i YXNlLnJvdGF0aW9uOwo+ICsJaW50IGksIG51bV9wbGFuZXM7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CWlmICghZmIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJbnVtX3BsYW5lcyA9IGZiLT5iYXNlLmZv cm1hdC0+bnVtX3BsYW5lczsKPiArCj4gKwlpZiAoaW50ZWxfcGxhbmVfbmVlZHNfcmVtYXAocGxh bmVfc3RhdGUpKSB7Cj4gKwkJaW50ZWxfcGxhbmVfcmVtYXBfZ3R0KHBsYW5lX3N0YXRlKTsKPiAr Cj4gKwkJLyogUmVtYXBwaW5nIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhpcyBhbHdheXMgKi8KPiAr CQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zdHJpZGUocGxhbmVfc3RhdGUpOwo+ICsJCWlmIChX QVJOX09OKHJldCkpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ ICsKPiArCWludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZwbGFuZV9zdGF0ZS0+dmlldywgJmZiLT5i YXNlLCByb3RhdGlvbik7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykg ewo+ICsJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5zdHJpZGUgPSBpbnRlbF9mYl9waXRj aCgmZmItPmJhc2UsIGksIHJvdGF0aW9uKTsKPiArCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb aV0ub2Zmc2V0ID0gMDsKPiArCj4gKwkJaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRp b24pKSB7Cj4gKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0gZmItPnJvdGF0ZWRb aV0ueDsKPiArCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnkgPSBmYi0+cm90YXRlZFtp XS55Owo+ICsJCX0gZWxzZSB7Cj4gKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0g ZmItPm5vcm1hbFtpXS54Owo+ICsJCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueSA9IGZi LT5ub3JtYWxbaV0ueTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogUm90YXRlIHNyYyBjb29yZGlu YXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCj4gKwlpZiAoZHJtX3JvdGF0aW9uXzkw X29yXzI3MChyb3RhdGlvbikpCj4gKwkJZHJtX3JlY3Rfcm90YXRlKCZwbGFuZV9zdGF0ZS0+YmFz ZS5zcmMsCj4gKwkJCQlmYi0+YmFzZS53aWR0aCA8PCAxNiwgZmItPmJhc2UuaGVpZ2h0IDw8IDE2 LAo+ICsJCQkJRFJNX01PREVfUk9UQVRFXzI3MCk7Cj4gKwo+ICsJcmV0ID0gaW50ZWxfcGxhbmVf Y2hlY2tfc3RyaWRlKHBsYW5lX3N0YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQoKU3BsaXR0aW5nIHRoZSByZWZhY3RvcmluZyBmcm9tIHRo ZSBhY3R1YWwgZmVhdHVyZSBhZGRpbmcgd291bGQgYmUgbmljZS4KCj4gKwo+ICBzdGF0aWMgaW50 IGk5eHhfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0KQo+ICB7Cj4gIAlzd2l0Y2ggKGZvcm1h dCkgewo+IEBAIC0zMTI3LDI2ICszMzk1LDE1IEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNrX2Njc19h dXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICBpbnQg c2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9z dGF0ZS0+YmFzZS5mYjsKPiAtCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5i YXNlLnJvdGF0aW9uOwo+ICAJaW50IHJldDsKPiAgCj4gLQlpbnRlbF9maWxsX2ZiX2dndHRfdmll dygmcGxhbmVfc3RhdGUtPnZpZXcsIGZiLCByb3RhdGlvbik7Cj4gLQlwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbMF0uc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIsIDAsIHJvdGF0aW9uKTsKPiAt CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5zdHJpZGUgPSBpbnRlbF9mYl9waXRjaChmYiwg MSwgcm90YXRpb24pOwo+IC0KPiAtCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFu ZV9zdGF0ZSk7Cj4gKwlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChwbGFuZV9zdGF0ZSk7 Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ICAJaWYgKCFwbGFuZV9zdGF0ZS0+ YmFzZS52aXNpYmxlKQo+ICAJCXJldHVybiAwOwo+ICAKPiAtCS8qIFJvdGF0ZSBzcmMgY29vcmRp bmF0ZXMgdG8gbWF0Y2ggcm90YXRlZCBHVFQgdmlldyAqLwo+IC0JaWYgKGRybV9yb3RhdGlvbl85 MF9vcl8yNzAocm90YXRpb24pKQo+IC0JCWRybV9yZWN0X3JvdGF0ZSgmcGxhbmVfc3RhdGUtPmJh c2Uuc3JjLAo+IC0JCQkJZmItPndpZHRoIDw8IDE2LCBmYi0+aGVpZ2h0IDw8IDE2LAo+IC0JCQkJ RFJNX01PREVfUk9UQVRFXzI3MCk7Cj4gLQo+ICAJLyoKPiAgCSAqIEhhbmRsZSB0aGUgQVVYIHN1 cmZhY2UgZmlyc3Qgc2luY2UKPiAgCSAqIHRoZSBtYWluIHN1cmZhY2Ugc2V0dXAgZGVwZW5kcyBv biBpdC4KPiBAQCAtMzI2NSwyMCArMzUyMiwyMCBAQCBpbnQgaTl4eF9jaGVja19wbGFuZV9zdXJm YWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gIHsKPiAgCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gIAkJdG9faTkxNShwbGFuZV9zdGF0ZS0+ YmFzZS5wbGFuZS0+ZGV2KTsKPiAtCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g cGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gLQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9z dGF0ZS0+YmFzZS5yb3RhdGlvbjsKPiAtCWludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLnNy Yy54MSA+PiAxNjsKPiAtCWludCBzcmNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy55MSA+PiAx NjsKPiArCWludCBzcmNfeCwgc3JjX3k7Cj4gIAl1MzIgb2Zmc2V0Owo+ICAJaW50IHJldDsKPiAg Cj4gLQlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygmcGxhbmVfc3RhdGUtPnZpZXcsIGZiLCByb3Rh dGlvbik7Cj4gLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlID0gaW50ZWxfZmJf cGl0Y2goZmIsIDAsIHJvdGF0aW9uKTsKPiAtCj4gLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19z dHJpZGUocGxhbmVfc3RhdGUpOwo+ICsJcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxh bmVfc3RhdGUpOwo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiArCWlmICghcGxh bmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlzcmNfeCA9IHBs YW5lX3N0YXRlLT5iYXNlLnNyYy54MSA+PiAxNjsKPiArCXNyY195ID0gcGxhbmVfc3RhdGUtPmJh c2Uuc3JjLnkxID4+IDE2Owo+ICsKPiAgCWludGVsX2FkZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNy Y195LCBwbGFuZV9zdGF0ZSwgMCk7Cj4gIAo+ICAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NCkKPiBAQCAtMzI4OSw2ICszNTQ2LDcgQEAgaW50IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICAKPiAgCS8qIEhTVy9CRFcg ZG8gdGhpcyBhdXRvbWFnaWNhbGx5IGluIGhhcmR3YXJlICovCj4gIAlpZiAoIUlTX0hBU1dFTEwo ZGV2X3ByaXYpICYmICFJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4gKwkJdW5zaWduZWQgaW50 IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gIAkJaW50IHNyY193ID0g ZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYykgPj4gMTY7Cj4gIAkJaW50IHNy Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owo+ICAK PiBAQCAtMzMyNSw2ICszNTgzLDEwIEBAIGk5eHhfcGxhbmVfY2hlY2soc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ ICsJcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiArCWlmIChy ZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gIAlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2li bGUpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IEBAIC0zMzMyLDEwICszNTk0LDYgQEAgaTl4eF9wbGFu ZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCWlmIChyZXQp Cj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gLQlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2Uo cGxhbmVfc3RhdGUpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgCXBsYW5l X3N0YXRlLT5jdGwgPSBpOXh4X3BsYW5lX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4g IAo+ICAJcmV0dXJuIDA7Cj4gQEAgLTM0NTksMTUgKzM3MTcsNiBAQCBzdGF0aWMgYm9vbCBpOXh4 X3BsYW5lX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ICAJcmV0dXJu IHJldDsKPiAgfQo+ICAKPiAtc3RhdGljIHUzMgo+IC1pbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50 KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCj4gLXsK PiAtCWlmIChmYi0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKQo+IC0JCXJldHVy biA2NDsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhmYiwgY29s b3JfcGxhbmUpOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3NjYWxlcihzdHJ1 Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywgaW50IGlkKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7Cj4gQEAgLTk4MzAsMTkgKzEwMDc5LDE3 IEBAIHN0YXRpYyBib29sIGludGVsX2N1cnNvcl9zaXplX29rKGNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gIAo+ICBzdGF0aWMgaW50IGludGVsX2N1cnNvcl9j aGVja19zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gIHsK PiAtCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2Uu ZmI7Cj4gLQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlv bjsKPiAgCWludCBzcmNfeCwgc3JjX3k7Cj4gIAl1MzIgb2Zmc2V0Owo+ICAJaW50IHJldDsKPiAg Cj4gLQlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygmcGxhbmVfc3RhdGUtPnZpZXcsIGZiLCByb3Rh dGlvbik7Cj4gLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlID0gaW50ZWxfZmJf cGl0Y2goZmIsIDAsIHJvdGF0aW9uKTsKPiAtCj4gLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19z dHJpZGUocGxhbmVfc3RhdGUpOwo+ICsJcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxh bmVfc3RhdGUpOwo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiArCWlmICghcGxh bmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiArCQlyZXR1cm4gMDsKPiArCj4gIAlzcmNfeCA9IHBs YW5lX3N0YXRlLT5iYXNlLnNyY194ID4+IDE2Owo+ICAJc3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFz ZS5zcmNfeSA+PiAxNjsKPiAgCj4gQEAgLTk4NzksNiArMTAxMjYsMTAgQEAgc3RhdGljIGludCBp bnRlbF9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4g IAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ICsJcmV0ID0gaW50ZWxfY3Vyc29yX2No ZWNrX3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ ICsKPiAgCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiAgCQlyZXR1cm4gMDsKPiAg Cj4gQEAgLTk4ODYsMTAgKzEwMTM3LDYgQEAgc3RhdGljIGludCBpbnRlbF9jaGVja19jdXJzb3Io c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAlpZiAocmV0KQo+ICAJCXJl dHVybiByZXQ7Cj4gIAo+IC0JcmV0ID0gaW50ZWxfY3Vyc29yX2NoZWNrX3N1cmZhY2UocGxhbmVf c3RhdGUpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgCXJldHVybiAwOwo+ ICB9Cj4gIAo+IEBAIC0xNDU5MSwzMSArMTQ4MzgsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXJfZnVuY3MgaW50ZWxfZmJfZnVuY3MgPSB7Cj4gIAkuZGlydHkgPSBpbnRl bF91c2VyX2ZyYW1lYnVmZmVyX2RpcnR5LAo+ICB9Owo+ICAKPiAtc3RhdGljCj4gLXUzMiBpbnRl bF9mYl9waXRjaF9saW1pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJ CSB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgZmJfbW9kaWZpZXIpCj4gLXsKPiAtCXN0cnVjdCBpbnRl bF9jcnRjICpjcnRjOwo+IC0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKPiAtCj4gLQkvKgo+ IC0JICogV2UgYXNzdW1lIHRoZSBwcmltYXJ5IHBsYW5lIGZvciBwaXBlIEEgaGFzCj4gLQkgKiB0 aGUgaGlnaGVzdCBzdHJpZGUgbGltaXRzIG9mIHRoZW0gYWxsLgo+IC0JICovCj4gLQljcnRjID0g aW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIFBJUEVfQSk7Cj4gLQlwbGFuZSA9IHRv X2ludGVsX3BsYW5lKGNydGMtPmJhc2UucHJpbWFyeSk7Cj4gLQo+IC0JcmV0dXJuIHBsYW5lLT5t YXhfc3RyaWRlKHBsYW5lLCBwaXhlbF9mb3JtYXQsIGZiX21vZGlmaWVyLAo+IC0JCQkJIERSTV9N T0RFX1JPVEFURV8wKTsKPiAtfQo+IC0KPiAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9p bml0KHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIsCj4gIAkJCQkgIHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gIAkJCQkgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy ICptb2RlX2NtZCkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g JmludGVsX2ZiLT5iYXNlOwo+IC0JdTMyIHBpdGNoX2xpbWl0Owo+ICsJdTMyIG1heF9zdHJpZGU7 Cj4gIAl1bnNpZ25lZCBpbnQgdGlsaW5nLCBzdHJpZGU7Cj4gIAlpbnQgcmV0ID0gLUVJTlZBTDsK PiAgCWludCBpOwo+IEBAIC0xNDY2NywxMyArMTQ4OTYsMTMgQEAgc3RhdGljIGludCBpbnRlbF9m cmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIsCj4gIAkJ Z290byBlcnI7Cj4gIAl9Cj4gIAo+IC0JcGl0Y2hfbGltaXQgPSBpbnRlbF9mYl9waXRjaF9saW1p dChkZXZfcHJpdiwgbW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCwKPiAtCQkJCQkgICBtb2RlX2NtZC0+ bW9kaWZpZXJbMF0pOwo+IC0JaWYgKG1vZGVfY21kLT5waXRjaGVzWzBdID4gcGl0Y2hfbGltaXQp IHsKPiArCW1heF9zdHJpZGUgPSBpbnRlbF9mYl9tYXhfc3RyaWRlKGRldl9wcml2LCBtb2RlX2Nt ZC0+cGl4ZWxfZm9ybWF0LAo+ICsJCQkJCSBtb2RlX2NtZC0+bW9kaWZpZXJbMF0pOwo+ICsJaWYg KG1vZGVfY21kLT5waXRjaGVzWzBdID4gbWF4X3N0cmlkZSkgewo+ICAJCURSTV9ERUJVR19LTVMo IiVzIHBpdGNoICgldSkgbXVzdCBiZSBhdCBtb3N0ICVkXG4iLAo+ICAJCQkgICAgICBtb2RlX2Nt ZC0+bW9kaWZpZXJbMF0gIT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSID8KPiAgCQkJICAgICAgInRp bGVkIiA6ICJsaW5lYXIiLAo+IC0JCQkgICAgICBtb2RlX2NtZC0+cGl0Y2hlc1swXSwgcGl0Y2hf bGltaXQpOwo+ICsJCQkgICAgICBtb2RlX2NtZC0+cGl0Y2hlc1swXSwgbWF4X3N0cmlkZSk7Cj4g IAkJZ290byBlcnI7Cj4gIAl9Cj4gIAoKV2UgbmVlZCBhbiBpbnRlbF9mcmFtZWJ1ZmZlcnxwbGFu ZS5jLiBBbmQgYSBtZXRyaWMgcGlsZSBvZiBvdGhlciBleHRyYWN0ZWQKZmlsZXMsIHByb2JhYmx5 IGFsc28gcGVyIG1ham9yIHBsYXRmb3JtcyBhbmQgc3R1ZmYgbGlrZSB0aGF0IDotLwoKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaAo+IGluZGV4IDgxMzYyNjMyMmZhMy4uMGVlNzNmOWRlYTdjIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBAQCAtMTU4Niw2ICsxNTg2LDcgQEAgdm9p ZCBpbnRlbF9kdW1wX2NkY2xrX3N0YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jZGNsa19zdGF0ZSAq Y2RjbGtfc3RhdGUsCj4gIAkJCSAgICBjb25zdCBjaGFyICpjb250ZXh0KTsKPiAgCj4gIC8qIGlu dGVsX2Rpc3BsYXkuYyAqLwo+ICtib29sIGludGVsX3BsYW5lX2Nhbl9yZW1hcChjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKPiAgdm9pZCBpODMwX2VuYWJsZV9w aXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpOwo+ ICB2b2lkIGk4MzBfZGlzYWJsZV9waXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgZW51bSBwaXBlIHBpcGUpOwo+ICBlbnVtIHBpcGUgaW50ZWxfY3J0Y19wY2hfdHJhbnNjb2Rl cihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRl LmMKPiBpbmRleCBiMDJkM2Q5ODA5ZTMuLjUxNzc0N2QwODk2MiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3Nwcml0ZS5jCj4gQEAgLTIzNyw2ICsyMzcsMTYgQEAgaW50IGludGVsX3BsYW5l X2NoZWNrX3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KQo+ICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247 Cj4gIAl1MzIgc3RyaWRlLCBtYXhfc3RyaWRlOwo+ICAKPiArCS8qCj4gKwkgKiBXZSBpZ25vcmUg c3RyaWRlIGZvciBhbGwgaW52aXNpYmxlIHBsYW5lcyB0aGF0Cj4gKwkgKiBjYW4gYmUgcmVtYXBw ZWQuIE90aGVyd2lzZSB3ZSBjb3VsZCBlbmQgdXAKPiArCSAqIHdpdGggYSBmYWxzZSBwb3NpdGl2 ZSB3aGVuIHRoZSByZW1hcHBpbmcgZGlkbid0Cj4gKwkgKiBraWNrIGluIGR1ZSB0aGUgcGxhbmUg YmVpbmcgaW52aXNpYmxlLgo+ICsJICovCj4gKwlpZiAoaW50ZWxfcGxhbmVfY2FuX3JlbWFwKHBs YW5lX3N0YXRlKSAmJgo+ICsJICAgICFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQo+ICsJCXJl dHVybiAwOwo+ICsKPiAgCS8qIEZJWE1FIG90aGVyIGNvbG9yIHBsYW5lcz8gKi8KPiAgCXN0cmlk ZSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGU7Cj4gIAltYXhfc3RyaWRlID0g cGxhbmUtPm1heF9zdHJpZGUocGxhbmUsIGZiLT5mb3JtYXQtPmZvcm1hdCwKPiBAQCAtMTM0MSw2 ICsxMzUxLDEwIEBAIGc0eF9zcHJpdGVfY2hlY2soc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ICsJcmV0ID0gaTl4 eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gIAlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCj4gIAkJcmV0 dXJuIDA7Cj4gIAo+IEBAIC0xMzUyLDEwICsxMzY2LDYgQEAgZzR4X3Nwcml0ZV9jaGVjayhzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJu IHJldDsKPiAgCj4gLQlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUp Owo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDcpCj4gIAkJcGxhbmVfc3RhdGUtPmN0bCA9IGl2Yl9zcHJpdGVfY3RsKGNydGNf c3RhdGUsIHBsYW5lX3N0YXRlKTsKPiAgCWVsc2UKPiBAQCAtMTM5OSw2ICsxNDA5LDEwIEBAIHZs dl9zcHJpdGVfY2hlY2soc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAlp ZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ICsJcmV0ID0gaTl4eF9jaGVja19wbGFuZV9z dXJmYWNlKHBsYW5lX3N0YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g IAlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IEBA IC0xNDA2LDEwICsxNDIwLDYgQEAgdmx2X3Nwcml0ZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gLQly ZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+IC0JaWYgKHJldCkK PiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgCXBsYW5lX3N0YXRlLT5jdGwgPSB2bHZfc3ByaXRlX2N0 bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gQEAgLTE1NTYs NiArMTU2NiwxMCBAQCBzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4g KwlyZXQgPSBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Cj4gKwlpZiAocmV0 KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICAJaWYgKCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxl KQo+ICAJCXJldHVybiAwOwo+ICAKPiBAQCAtMTU3MSwxMCArMTU4NSw2IEBAIHN0YXRpYyBpbnQg c2tsX3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICAJ aWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXJldCA9IHNrbF9jaGVja19wbGFuZV9z dXJmYWNlKHBsYW5lX3N0YXRlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4g IAkvKiBIVyBvbmx5IGhhcyA4IGJpdHMgcGl4ZWwgcHJlY2lzaW9uLCBkaXNhYmxlIHBsYW5lIGlm IGludmlzaWJsZSAqLwo+ICAJaWYgKCEocGxhbmVfc3RhdGUtPmJhc2UuYWxwaGEgPj4gOCkpCj4g IAkJcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSA9IGZhbHNlOwoKQ29kZSBsb29rcyBnb29kLCBi dXQgdGhlIHRlc3RpbmcgZnJlYWtzIG1lIG91dC4gTmVlZHMgbG90cyBvZiBpZ3QsIEknZCBzYXkK YXQgbGVhc3Qgc2ltaWxhciBhbW91bnRzIHRvIHdoYXQgd2UndmUgYWxsIGFkZGVkIGZvciB0aGUg b3JpZ2luYWwKa21zX3JvdGF0aW9uIHRlc3RzLgotRGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNv ZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK