From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v4 4/8] drm/i915: Overcome display engine stride limits via GTT remapping Date: Wed, 30 Jan 2019 22:59:04 +0200 Message-ID: <20190130205904.GQ20097@intel.com> References: <20190118152720.24643-5-ville.syrjala@linux.intel.com> <20190124185849.25908-1-ville.syrjala@linux.intel.com> <20190130190121.GK3271@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id D51646E125 for ; Wed, 30 Jan 2019 20:59:07 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190130190121.GK3271@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKYW4gMzAsIDIwMTkgYXQgMDg6MDE6MjFQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUaHUsIEphbiAyNCwgMjAxOSBhdCAwODo1ODo0OVBNICswMjAwLCBWaWxsZSBT eXJqYWxhIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiA+IAo+ID4gVGhlIGRpc3BsYXkgZW5naW5lIHN0cmlkZSBsaW1pdHMg YXJlIGdldHRpbmcgaW4gb3VyIHdheS4gT24gU0tMKwo+ID4gd2UgYXJlIGxpbWl0ZWQgdG8gOGsg cGl4ZWxzLCB3aGljaCBpcyBlYXNpbHkgZXhjZWVkZWQgd2l0aCB0aHJlZQo+ID4gNGsgZGlzcGxh eXMuIFRvIG92ZXJjb21lIHRoaXMgbGltaXRhdGlvbiB3ZSBjYW4gcmVtYXAgdGhlIHBhZ2VzCj4g PiBpbiB0aGUgR1RUIHRvIHByb3ZpZGUgdGhlIGRpc3BsYXkgZW5naW5lIHdpdGggYSB2aWV3IG9m IG1lbW9yeQo+ID4gd2l0aCBhIHNtYWxsZXIgc3RyaWRlLgo+ID4gCj4gPiBUaGUgY29kZSBpcyBt b3N0bHkgYWxyZWFkeSB0aGVyZSBhcyBXZSBhbHJlYWR5IHBsYXkgdHJpY2tzIHdpdGgKPiA+IHRo ZSBwbGFuZSBzdXJmYWNlIGFkZHJlc3MgYW5kIHgveSBvZmZzZXRzLgo+ID4gCj4gPiBBIGZldyBj YXZlYXRzIGFwcGx5Ogo+ID4gKiBsaW5lYXIgYnVmZmVycyBuZWVkIHRoZSBmYiBzdHJpZGUgdG8g YmUgcGFnZSBhbGlnbmVkLCBhcwo+ID4gICBvdGhlcndpc2UgdGhlIHJlbWFwcGVkIGxpbmVzIHdv dWxkbid0IHN0YXJ0IGF0IHRoZSBzYW1lCj4gPiAgIHNwb3QKPiA+ICogY29tcHJlc3NlZCBidWZm ZXJzIGNhbid0IGJlIHJlbWFwcGVkIGR1ZSB0byB0aGUgbmV3Cj4gPiAgIGNjcyBoYXNoIG1vZGUg Y2F1c2luZyB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwYWdlcwo+ID4gICB0byBhZmZlY3Qg dGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuIElJUkMKPiA+ICAgdGhl IG9sZCBoYXNoIHdhcyBsaW1pdGVkIHRvIHRoZSBsb3cgMTIgYml0cyBzbyBpZiB3ZSB3ZXJlCj4g PiAgIHVzaW5nIHRoYXQgbW9kZSB3ZSBjb3VsZCByZW1hcC4gQXMgaXQgc3RhbmRzIHdlIGp1c3Qg cmVmdXNlCj4gPiAgIHRvIHJlbWFwcCB3aXRoIGNvbXByZXNzZWQgZmJzLgo+ID4gKiBubyByZW1h cHBpbmcgZ2VuMi8zIGFzIHdlJ2QgbmVlZCBhIGZlbmNlIGZvciB0aGUgcmVtYXBwZWQKPiA+ICAg dm1hLCB3aGljaCB3ZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZS4gTmVlZCB0byBkZWFsIHdpdGggdGhl Cj4gPiAgIGZlbmNlIFBPVCByZXF1aXJlbWVudHMsIGFuZCBkbyBzb21ldGhpbmcgYWJvdXQgdGhl IGdlbjIKPiA+ICAgZ3R0IHBhZ2Ugc2l6ZSB2cyB0aWxlIHNpemUgZGlmZmVyZW5jZQo+ID4gCj4g PiB2MjogUmViYXNlIGR1ZSB0byBpc19jY3NfbW9kaWZpZXIoKQo+ID4gICAgIEZpeCB1cCB0aGUg c2tsKyBzdHJpZGVfbXVsdCBtZXNzCj4gPiAgICAgbWVtc2V0KCkgdGhlIGd0dF92aWV3IGJlY2F1 c2Ugb3RoZXJ3aXNlIHdlIGNvdWxkIGxlYXZlCj4gPiAgICAganVuayBpbiBwbGFuZVsxXSB3aGVu IGdvaW5nIGZyb20gMiBwbGFuZSB0byAxIHBsYW5lIGZvcm1hdAo+ID4gdjM6IGludGVsX2NoZWNr X3BsYW5lX3N0cmlkZSgpIHdhcyBzcGxpdCBvdXQKPiA+IHY0OiBEcm9wIHRoZSBhbGlnbmVkIHZp ZXdwb3J0IHN0dWZmLCBpdCB3YXMgbWVhbnQgZm9yIGNjcyB3aGljaAo+ID4gICAgIGNhbid0IGJl IHJlbWFwcGVkIGFueXdheQo+ID4gdjU6IEludHJvZHVjZSBpbnRlbF9wbGFuZV9jYW5fcmVtYXAo KQo+ID4gICAgIFJlb3JkZXIgdGhlIGNvZGUgc28gdGhhdCBwbGFuZV9zdGF0ZS0+dmlldyBnZXRz IGZpbGxlZAo+ID4gICAgIGV2ZW4gZm9yIGludmlzaWJsZSBwbGFuZXMsIG90aGVyd2lzZSB3ZSdk IGtlZXAgdXNpbmcKPiA+ICAgICBzdGFsZSB2YWx1ZXMgYW5kIGNvdWxkIGV4cGxvZGUgZHVyaW5n IHJlbWFwcGluZy4gVGhlIG5ldwo+ID4gICAgIGxvZ2ljIG5ldmVyIHJlbWFwcyBpbnZpc2libGUg cGxhbmVzIHNpbmNlIHdlIGRvbid0IGhhdmUKPiA+ICAgICBhIHZpZXdwb3J0LCBhbmQgaW5zdGVh ZCBwaW5zIHRoZSBmdWxsIGZiIGluc3RlYWQKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogVmlsbGUg U3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+IC0tLQo+ID4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8IDM5MyArKysrKysrKysrKysrKysr KysrKystLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAg IDEgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jICB8ICAzNCArKy0K PiA+ICAzIGZpbGVzIGNoYW5nZWQsIDMzNCBpbnNlcnRpb25zKCspLCA5NCBkZWxldGlvbnMoLSkK PiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gaW5kZXggMTdjN2Vk ZWU5NTg0Li4zNzEzYjZmMTc5NmUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwo+ID4gQEAgLTE4NjUsNyArMTg2NSw3IEBAIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMo Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKPiA+ICAK PiA+ICAJc3dpdGNoIChmYi0+bW9kaWZpZXIpIHsKPiA+ICAJY2FzZSBEUk1fRk9STUFUX01PRF9M SU5FQVI6Cj4gPiAtCQlyZXR1cm4gY3BwOwo+ID4gKwkJcmV0dXJuIGludGVsX3RpbGVfc2l6ZShk ZXZfcHJpdik7Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Cj4gPiAgCQlpZiAo SVNfR0VOKGRldl9wcml2LCAyKSkKPiA+ICAJCQlyZXR1cm4gMTI4Owo+ID4gQEAgLTE5MDgsMTEg KzE5MDgsOCBAQCBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCj4gPiAgc3RhdGljIHVuc2lnbmVkIGludAo+ID4g IGludGVsX3RpbGVfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQg Y29sb3JfcGxhbmUpCj4gPiAgewo+ID4gLQlpZiAoZmItPm1vZGlmaWVyID09IERSTV9GT1JNQVRf TU9EX0xJTkVBUikKPiA+IC0JCXJldHVybiAxOwo+ID4gLQllbHNlCj4gPiAtCQlyZXR1cm4gaW50 ZWxfdGlsZV9zaXplKHRvX2k5MTUoZmItPmRldikpIC8KPiA+IC0JCQlpbnRlbF90aWxlX3dpZHRo X2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Cj4gPiArCXJldHVybiBpbnRlbF90aWxlX3NpemUodG9f aTkxNShmYi0+ZGV2KSkgLwo+ID4gKwkJaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhmYiwgY29sb3Jf cGxhbmUpOwo+ID4gIH0KPiA+ICAKPiA+ICAvKiBSZXR1cm4gdGhlIHRpbGUgZGltZW5zaW9ucyBp biBwaXhlbCB1bml0cyAqLwo+ID4gQEAgLTIxNzAsMTYgKzIxNjcsOCBAQCB2b2lkIGludGVsX2Fk ZF9mYl9vZmZzZXRzKGludCAqeCwgaW50ICp5LAo+ID4gIAkJCSAgaW50IGNvbG9yX3BsYW5lKQo+ ID4gIAo+ID4gIHsKPiA+IC0JY29uc3Qgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9m YiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKHN0YXRlLT5iYXNlLmZiKTsKPiA+IC0JdW5zaWduZWQg aW50IHJvdGF0aW9uID0gc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gPiAtCj4gPiAtCWlmIChkcm1f cm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewo+ID4gLQkJKnggKz0gaW50ZWxfZmItPnJv dGF0ZWRbY29sb3JfcGxhbmVdLng7Cj4gPiAtCQkqeSArPSBpbnRlbF9mYi0+cm90YXRlZFtjb2xv cl9wbGFuZV0ueTsKPiA+IC0JfSBlbHNlIHsKPiA+IC0JCSp4ICs9IGludGVsX2ZiLT5ub3JtYWxb Y29sb3JfcGxhbmVdLng7Cj4gPiAtCQkqeSArPSBpbnRlbF9mYi0+bm9ybWFsW2NvbG9yX3BsYW5l XS55Owo+ID4gLQl9Cj4gPiArCSp4ICs9IHN0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0u eDsKPiA+ICsJKnkgKz0gc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS55Owo+ID4gIH0K PiA+ICAKPiA+ICBzdGF0aWMgdTMyIGludGVsX2FkanVzdF90aWxlX29mZnNldChpbnQgKngsIGlu dCAqeSwKPiA+IEBAIC0yNDU5LDYgKzI0NDgsMTE5IEBAIGJvb2wgaXNfY2NzX21vZGlmaWVyKHU2 NCBtb2RpZmllcikKPiA+ICAJICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRF9DQ1M7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRpYwo+ID4gK3UzMiBpbnRlbF9wbGFuZV9m Yl9tYXhfc3RyaWRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICsJCQkg ICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YzsKPiA+ICsJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKPiA+ICsK PiA+ICsJLyoKPiA+ICsJICogV2UgYXNzdW1lIHRoZSBwcmltYXJ5IHBsYW5lIGZvciBwaXBlIEEg aGFzCj4gPiArCSAqIHRoZSBoaWdoZXN0IHN0cmlkZSBsaW1pdHMgb2YgdGhlbSBhbGwuCj4gPiAr CSAqLwo+ID4gKwljcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIFBJUEVf QSk7Cj4gPiArCXBsYW5lID0gdG9faW50ZWxfcGxhbmUoY3J0Yy0+YmFzZS5wcmltYXJ5KTsKPiA+ ICsKPiA+ICsJcmV0dXJuIHBsYW5lLT5tYXhfc3RyaWRlKHBsYW5lLCBwaXhlbF9mb3JtYXQsIG1v ZGlmaWVyLAo+ID4gKwkJCQkgRFJNX01PREVfUk9UQVRFXzApOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMKPiA+ICt1MzIgaW50ZWxfZmJfbWF4X3N0cmlkZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gPiArCQkJdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyKQo+ID4g K3sKPiA+ICsJcmV0dXJuIGludGVsX3BsYW5lX2ZiX21heF9zdHJpZGUoZGV2X3ByaXYsIHBpeGVs X2Zvcm1hdCwgbW9kaWZpZXIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdTMyCj4gPiAraW50 ZWxfZmJfc3RyaWRlX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IGNvbG9yX3BsYW5lKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShmYi0+ZGV2KTsKPiA+ICsKPiA+ICsJaWYgKGZiLT5tb2RpZmllciA9 PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKPiA+ICsJCXUzMiBtYXhfc3RyaWRlID0gaW50ZWxf cGxhbmVfZmJfbWF4X3N0cmlkZShkZXZfcHJpdiwKPiA+ICsJCQkJCQkJICAgZmItPmZvcm1hdC0+ Zm9ybWF0LAo+ID4gKwkJCQkJCQkgICBmYi0+bW9kaWZpZXIpOwo+ID4gKwo+ID4gKwkJLyoKPiA+ ICsJCSAqIFRvIG1ha2UgcmVtYXBwaW5nIHdpdGggbGluZWFyIGdlbmVyYWxseSBmZWFzaWJsZQo+ ID4gKwkJICogd2UgbmVlZCB0aGUgc3RyaWRlIHRvIGJlIHBhZ2UgYWxpZ25lZC4KPiA+ICsJCSAq Lwo+ID4gKwkJaWYgKGZiLT5waXRjaGVzW2NvbG9yX3BsYW5lXSA+IG1heF9zdHJpZGUpCj4gPiAr CQkJcmV0dXJuIGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7Cj4gPiArCQllbHNlCj4gPiArCQkJ cmV0dXJuIDY0Owo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJcmV0dXJuIGludGVsX3RpbGVfd2lkdGhf Ynl0ZXMoZmIsIGNvbG9yX3BsYW5lKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtib29sIGlu dGVsX3BsYW5lX2Nhbl9yZW1hcChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVs X3BsYW5lKHBsYW5lX3N0YXRlLT5iYXNlLnBsYW5lKTsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+ID4gKwljb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ID4gKwlp bnQgaTsKPiA+ICsKPiA+ICsJLyogV2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggcmVtYXBwaW5n IHdpdGggY3Vyc29ycyAqLwo+ID4gKwlpZiAocGxhbmUtPmlkID09IFBMQU5FX0NVUlNPUikKPiA+ ICsJCXJldHVybiBmYWxzZTsKPiAKPiBUaGV5IHNob3VsZCBiZSBjYXVnaHQgaW4gdGhlIHN0cmlk ZSBjaGVjayBiZWxvdyBhbnl3YXkgLi4uIHdoeSBzcGVjaWFsCj4gY2FzZT8KCkkgZ3Vlc3Mgd2Ug Y291bGQganVzdCBkcm9wIHRoaXMuIEhtbSwgeWVhaCBldmVuIGk4NDUvaTg2NSB3aXRoCnRoZWly IG1heCBjdXJzb3Igc3RyaWRlIG9mIDJrIHNob3VsZCBnZXQgcmVqZWN0ZWQgbGF0ZXIuCgo+IAo+ ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBUaGUgZHNwbGF5IGVuZ2luZSBsaW1pdHMgYWxyZWFkeSBt YXRjaCB0aGUgcmVuZGVyCj4gPiArCSAqIGVuZ2luZSBsaW1pdHMsIHNvIG5vdCBtdWNoIHBvaW50 IGluIHJlbWFwcGluZy4KPiA+ICsJICogV291bGQgYWxzbyBuZWVkIHRvIGRlYWwgd2l0aCB0aGUg ZmVuY2UgUE9UIGFsaWdubWVudAo+ID4gKwkgKiBhbmQgZ2VuMiAyS2lCIEdUVCB0aWxlIHNpemUu Cj4gPiArCSAqLwo+ID4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDQpCj4gPiArCQlyZXR1 cm4gZmFsc2U7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFRoZSBuZXcgQ0NTIGhhc2ggbW9kZSBp c24ndCBjb21wYXRpYmxlIHdpdGggcmVtYXBwaW5nIGFzCj4gPiArCSAqIHRoZSB2aXJ0dWFsIGFk ZHJlc3Mgb2YgdGhlIHBhZ2VzIGFmZmVjdHMgdGhlIGNvbXByZXNzZWQgZGF0YS4KPiA+ICsJICov Cj4gPiArCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKPiA+ICsJCXJldHVybiBm YWxzZTsKPiA+ICsKPiA+ICsJLyogTGluZWFyIG5lZWRzIGEgcGFnZSBhbGlnbmVkIHN0cmlkZSBm b3IgcmVtYXBwaW5nICovCj4gPiArCWlmIChmYi0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0Rf TElORUFSKSB7Cj4gCj4gTm90IHN1cmUgd2hldGhlciBjcmFtbWluZyBsaW5lYXIgZm9ybWF0cyBp bnRvIHRoZSBzYW1lIG1hY2hlbmlyeSBpcyByZWFsbHkKPiBjbGV2ZXIgaW4gYSBnb29kIHdheSBv ciBiYWQgd2F5IChiZWNhdXNlIHRvbyB0cmlja3kpLiBJIGd1ZXNzIGl0IHdvcmtzLAo+IGFuZCB0 aGlzIGlzIG5vdCBzb21ldGhpbmcgdGhhdCdzIHdlbGwgZXhwbGFpbmcgaW4gc29tZSBjb21tZW50 cyBzcHJpbmtsZWQKPiBhbGwgb3Zlci4KPiAKPiAqc2hydWcqCj4gCj4gPiArCQl1bnNpZ25lZCBp bnQgYWxpZ25tZW50ID0gaW50ZWxfdGlsZV9zaXplKGRldl9wcml2KSAtIDE7Cj4gPiArCj4gPiAr CQlmb3IgKGkgPSAwOyBpIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7Cj4gPiArCQkJ aWYgKGZiLT5waXRjaGVzW2ldICYgYWxpZ25tZW50KQo+ID4gKwkJCQlyZXR1cm4gZmFsc2U7Cj4g PiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBib29sIGludGVsX3BsYW5lX25lZWRzX3JlbWFwKGNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPmJhc2UucGxhbmUpOwo+ID4gKwlj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ ID4gKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsK PiA+ICsJdTMyIHN0cmlkZSwgbWF4X3N0cmlkZTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogTm8g cmVtYXBwaW5nIGZvciBpbnZpc2libGUgcGxhbmVzIHNpbmNlIHdlIGRvbid0IGhhdmUKPiA+ICsJ ICogYW4gYWN0dWFsIHNvdXJjZSB2aWV3cG9ydCB0byByZW1hcC4KPiA+ICsJICovCj4gPiArCWlm ICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsK PiA+ICsJaWYgKCFpbnRlbF9wbGFuZV9jYW5fcmVtYXAocGxhbmVfc3RhdGUpKQo+ID4gKwkJcmV0 dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwkvKiBGSVhNRSBvdGhlciBjb2xvciBwbGFuZXM/ICovCj4g Cj4gU2hvdWxkIGJlIHNpbXBsZSB0byBmaXggaWYgd2UgZG8gYSBzaW1pbGFyIGxvb3AgbGlrZSBp biBjYW5fcmVtYXAgYWJvdmUuCj4gSnVzdCB0cnVlIGlmIGFueSBvZiB0aGVtIGFyZSBiaWdnZXIg dGhhbiBtYXggc3RyaWRlLgoKVGhhdCdzIGFzc3VtaW5nIHRoZSBtYXggc3RyaWRlIGZvciBlYWNo IHBsYW5lIGlzIHRoZSBzYW1lLiBXaGljaAppdCBtaWdodCBub3QgYmUuIElJUkMgdGhlIHNrbCsg ZG9jcyBkaWRuJ3QgcmVhbGx5IHNheSB3aGF0IHRoZSBtYXgKYXV4IHN0cmlkZSBpcy4KCj4gCj4g PiArCXN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKGZiLCAwLCByb3RhdGlvbik7Cj4gPiArCW1heF9z dHJpZGUgPSBwbGFuZS0+bWF4X3N0cmlkZShwbGFuZSwgZmItPmZvcm1hdC0+Zm9ybWF0LAo+ID4g KwkJCQkgICAgICAgZmItPm1vZGlmaWVyLCByb3RhdGlvbik7Cj4gPiArCj4gPiArCXJldHVybiBz dHJpZGUgPiBtYXhfc3RyaWRlOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgaW50Cj4gPiAgaW50 ZWxfZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICAJ CSAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ID4gQEAgLTI2MjQsNiArMjcyNiwxNzIg QEAgaW50ZWxfZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRpYyB2b2lkCj4gPiAraW50ZWxf cGxhbmVfcmVtYXBfZ3R0KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4g PiArewo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+ID4gKwkJdG9f aTkxNShwbGFuZV9zdGF0ZS0+YmFzZS5wbGFuZS0+ZGV2KTsKPiA+ICsJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiA+ICsJc3RydWN0IGludGVsX2Zy YW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiA+ICsJc3Ry dWN0IGludGVsX3JvdGF0aW9uX2luZm8gKmluZm8gPSAmcGxhbmVfc3RhdGUtPnZpZXcucm90YXRl ZDsKPiA+ICsJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRp b247Cj4gPiArCWludCBpLCBudW1fcGxhbmVzID0gZmItPmZvcm1hdC0+bnVtX3BsYW5lczsKPiA+ ICsJdW5zaWduZWQgaW50IHRpbGVfc2l6ZSA9IGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7Cj4g PiArCXVuc2lnbmVkIGludCBzcmNfeCwgc3JjX3k7Cj4gPiArCXVuc2lnbmVkIGludCBzcmNfdywg c3JjX2g7Cj4gPiArCXUzMiBndHRfb2Zmc2V0ID0gMDsKPiA+ICsKPiA+ICsJbWVtc2V0KCZwbGFu ZV9zdGF0ZS0+dmlldywgMCwgc2l6ZW9mKHBsYW5lX3N0YXRlLT52aWV3KSk7Cj4gPiArCXBsYW5l X3N0YXRlLT52aWV3LnR5cGUgPSBkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSA/Cj4g PiArCQlJOTE1X0dHVFRfVklFV19ST1RBVEVEIDogSTkxNV9HR1RUX1ZJRVdfUkVNQVBQRUQ7Cj4g PiArCj4gPiArCXNyY194ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLngxID4+IDE2Owo+ID4gKwlz cmNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy55MSA+PiAxNjsKPiA+ICsJc3JjX3cgPSBkcm1f cmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKPiA+ICsJc3JjX2ggPSBk cm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYykgPj4gMTY7Cj4gPiArCj4gPiAr CVdBUk5fT04oaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpOwo+ID4gKwo+ID4gKwkvKiBN YWtlIHNyYyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQgKi8KPiA+ICsJZHJt X3JlY3RfdHJhbnNsYXRlKCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMsCj4gPiArCQkJICAgLShzcmNf eCA8PCAxNiksIC0oc3JjX3kgPDwgMTYpKTsKPiA+ICsKPiA+ICsJLyogUm90YXRlIHNyYyBjb29y ZGluYXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCj4gPiArCWlmIChkcm1fcm90YXRp b25fOTBfb3JfMjcwKHJvdGF0aW9uKSkKPiA+ICsJCWRybV9yZWN0X3JvdGF0ZSgmcGxhbmVfc3Rh dGUtPmJhc2Uuc3JjLAo+ID4gKwkJCQlzcmNfdyA8PCAxNiwgc3JjX2ggPDwgMTYsCj4gPiArCQkJ CURSTV9NT0RFX1JPVEFURV8yNzApOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Bs YW5lczsgaSsrKSB7Cj4gPiArCQl1bnNpZ25lZCBpbnQgaHN1YiA9IGkgPyBmYi0+Zm9ybWF0LT5o c3ViIDogMTsKPiA+ICsJCXVuc2lnbmVkIGludCB2c3ViID0gaSA/IGZiLT5mb3JtYXQtPnZzdWIg OiAxOwo+ID4gKwkJdW5zaWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtpXTsKPiA+ICsJ CXVuc2lnbmVkIGludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKPiA+ICsJCXVuc2lnbmVkIGlu dCB3aWR0aCwgaGVpZ2h0Owo+ID4gKwkJdW5zaWduZWQgaW50IHBpdGNoX3RpbGVzOwo+ID4gKwkJ dW5zaWduZWQgaW50IHgsIHk7Cj4gPiArCQl1MzIgb2Zmc2V0Owo+ID4gKwo+ID4gKwkJaW50ZWxf dGlsZV9kaW1zKGZiLCBpLCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0KTsKPiA+ICsKPiA+ICsJ CXggPSBzcmNfeCAvIGhzdWI7Cj4gPiArCQl5ID0gc3JjX3kgLyB2c3ViOwo+ID4gKwkJd2lkdGgg PSBzcmNfdyAvIGhzdWI7Cj4gPiArCQloZWlnaHQgPSBzcmNfaCAvIHZzdWI7Cj4gPiArCj4gPiAr CQkvKgo+ID4gKwkJICogRmlyc3QgcGl4ZWwgb2YgdGhlIHNyYyB2aWV3cG9ydCBmcm9tIHRoZQo+ ID4gKwkJICogc3RhcnQgb2YgdGhlIG5vcm1hbCBndHQgbWFwcGluZy4KPiA+ICsJCSAqLwo+ID4g KwkJeCArPSBpbnRlbF9mYi0+bm9ybWFsW2ldLng7Cj4gPiArCQl5ICs9IGludGVsX2ZiLT5ub3Jt YWxbaV0ueTsKPiA+ICsKPiA+ICsJCW9mZnNldCA9IGludGVsX2NvbXB1dGVfYWxpZ25lZF9vZmZz ZXQoZGV2X3ByaXYsICZ4LCAmeSwKPiA+ICsJCQkJCQkgICAgICBmYiwgaSwgZmItPnBpdGNoZXNb aV0sCj4gPiArCQkJCQkJICAgICAgRFJNX01PREVfUk9UQVRFXzAsIHRpbGVfc2l6ZSk7Cj4gPiAr CQlvZmZzZXQgLz0gdGlsZV9zaXplOwo+ID4gKwo+ID4gKwkJaW5mby0+cGxhbmVbaV0ub2Zmc2V0 ID0gb2Zmc2V0Owo+ID4gKwkJaW5mby0+cGxhbmVbaV0uc3RyaWRlID0gRElWX1JPVU5EX1VQKGZi LT5waXRjaGVzW2ldLAo+ID4gKwkJCQkJCSAgICAgdGlsZV93aWR0aCAqIGNwcCk7Cj4gPiArCQlp bmZvLT5wbGFuZVtpXS53aWR0aCA9IERJVl9ST1VORF9VUCh4ICsgd2lkdGgsIHRpbGVfd2lkdGgp Owo+ID4gKwkJaW5mby0+cGxhbmVbaV0uaGVpZ2h0ID0gRElWX1JPVU5EX1VQKHkgKyBoZWlnaHQs IHRpbGVfaGVpZ2h0KTsKPiA+ICsKPiA+ICsJCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJv dGF0aW9uKSkgewo+ID4gKwkJCXN0cnVjdCBkcm1fcmVjdCByOwo+ID4gKwo+ID4gKwkJCS8qIHJv dGF0ZSB0aGUgeC95IG9mZnNldHMgdG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICovCj4gPiArCQkJci54 MSA9IHg7Cj4gPiArCQkJci55MSA9IHk7Cj4gPiArCQkJci54MiA9IHggKyB3aWR0aDsKPiA+ICsJ CQlyLnkyID0geSArIGhlaWdodDsKPiA+ICsJCQlkcm1fcmVjdF9yb3RhdGUoJnIsCj4gPiArCQkJ CQlpbmZvLT5wbGFuZVtpXS53aWR0aCAqIHRpbGVfd2lkdGgsCj4gPiArCQkJCQlpbmZvLT5wbGFu ZVtpXS5oZWlnaHQgKiB0aWxlX2hlaWdodCwKPiA+ICsJCQkJCURSTV9NT0RFX1JPVEFURV8yNzAp Owo+ID4gKwkJCXggPSByLngxOwo+ID4gKwkJCXkgPSByLnkxOwo+ID4gKwo+ID4gKwkJCXBpdGNo X3RpbGVzID0gaW5mby0+cGxhbmVbaV0uaGVpZ2h0Owo+ID4gKwkJCXBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVtpXS5zdHJpZGUgPSBwaXRjaF90aWxlcyAqIHRpbGVfaGVpZ2h0Owo+ID4gKwo+ID4g KwkJCS8qIHJvdGF0ZSB0aGUgdGlsZSBkaW1lbnNpb25zIHRvIG1hdGNoIHRoZSBHVFQgdmlldyAq Lwo+ID4gKwkJCXN3YXAodGlsZV93aWR0aCwgdGlsZV9oZWlnaHQpOwo+ID4gKwkJfSBlbHNlIHsK PiA+ICsJCQlwaXRjaF90aWxlcyA9IGluZm8tPnBsYW5lW2ldLndpZHRoOwo+ID4gKwkJCXBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5zdHJpZGUgPSBwaXRjaF90aWxlcyAqIHRpbGVfd2lkdGgg KiBjcHA7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQkvKgo+ID4gKwkJICogV2Ugb25seSBrZWVwIHRo ZSB4L3kgb2Zmc2V0cywgc28gcHVzaCBhbGwgb2YgdGhlCj4gPiArCQkgKiBndHQgb2Zmc2V0IGlu dG8gdGhlIHgveSBvZmZzZXRzLgo+ID4gKwkJICovCj4gPiArCQlpbnRlbF9hZGp1c3RfdGlsZV9v ZmZzZXQoJngsICZ5LAo+ID4gKwkJCQkJIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0LAo+ID4gKwkJ CQkJIHRpbGVfc2l6ZSwgcGl0Y2hfdGlsZXMsCj4gPiArCQkJCQkgZ3R0X29mZnNldCAqIHRpbGVf c2l6ZSwgMCk7Cj4gPiArCj4gPiArCQlndHRfb2Zmc2V0ICs9IGluZm8tPnBsYW5lW2ldLndpZHRo ICogaW5mby0+cGxhbmVbaV0uaGVpZ2h0Owo+ID4gKwo+ID4gKwkJcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lW2ldLm9mZnNldCA9IDA7Cj4gPiArCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0u eCA9IHg7Cj4gPiArCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueSA9IHk7Cj4gPiArCX0K PiA+ICt9Cj4gCj4gVmFsaWRhdGluZyB0aGlzIGZyZWFrcyBtZSBvdXQuIEtlZXBpbmcgaXQgd29y a2luZyBmcmVha3MgbWUgb3V0IGV2ZW4gbW9yZSwKPiB0aGVyZSdzIHByZXR0eSBtdWNoIGEgZ3Vh cmFudGVlIHRoYXQgd2UgZG9uJ3QuCj4gCj4gQWxzbywgSSdtIG5vdCBzdXJlIENJIGV4ZXJjaXNl cyB0aGlzIG11Y2ggZXZlbiB3aXRoIHlvdXIgaGFja3MuIE1vc3Qgb2YKPiBvdXIga21zIHRlc3Rz IHVzZSBzaW5nbGUtY3J0YyBidWZmZXJzLCBzbyBubyBtYXNzaXZlIG92ZXJhbGxvY2F0aW9uLCBz byBubwo+IHJlYWwgbmVlZCBmb3Igdmlld3MuIFRoZSBzZWxmdGVzdHMgYXJlIGdvb2QsIGJ1dCB0 aGV5IGRvbid0IGNvdmVyIHRoZQo+IG1hc3NpdmUgcGlsZSBvZiBwaXhlbC9jb29yZGluYXRpb24g ZnJvYmJpbmcgYWJvdmUuCj4gCj4gSSB0aGluayBvbmx5IHRoaW5nIHRoYXQgY2FuIHZhbGlkYXRl IHRoaXMgaXM6Cj4gLSBhIHBpbGUgb2YgaWd0cyB0aGF0IG1ha2Ugc3VyZSB3ZSBvdmVyYWxsb2Nh dGUgcGxlbnRpZnVsLCB3aGlsZSBzdGlsbAo+ICAgZXhlcmNpc2luZyBhbGwgdGhlIG1ham9yIGZi IGxheW91dHMgKHJvdGF0ZWQsIGFsbCB0aGUgZGlmZmVyZW50IGNwcCwKPiAgIHRpbGluZyBmb3Jt YXRzLCBhbmQgdGhyb3cgaW4gYSBjY3MgZm9yIGxvbHMgdG8gbWFrZSBzdXJlIG5vdGhpbmcgYmxv d3MKPiAgIHVwKS4KPiAtIGtlcm5lbCBwYXRjaCB0byBwcmVmZXIgcmVtbWFwZWQgb3ZlciBub3Jt YWwuIERvbid0IG1vdmUgeW91ciBidWZmZXJzCj4gICBhcm91bmQgdG9vIG11Y2ggdGhvdWdoIDot KQo+IAo+IE5vdyB0aGUgc2Vjb25kIHBhcnQgaXNuJ3QgcmVhbGx5IGEgcmVhbCB3b3JsZCB0aGlu Zywgc2luY2UgZXZlbiB3aXRoCj4geS10aWxlZCB0aGF0IG1lYW5zIHJlbWFwcGluZyB0aGUgdmll dyBldmVyeSAzMiBwaXhlbHMgKG9uIGF2ZXJhZ2UsIHdvcnNlCj4gaWYgeW91ciBlZGdlcyBhcmVu J3QgYWxpZ25lZCB0byAzMiBwaXhlbHMsIHRoZW4gaXQncyB0d2ljZSBhcyBtdWNoKS4KPiAKPiBT byBJIHRoaW5rIHRoZSBvbmx5IHRoaW5nIHRoYXQgd29ya3MgZm9yIHZhbGlkYXRpbmcgdGhpcyBi ZWFzdCBpcyBhIHBpbGUKPiBvZiBuZXcgaWd0cyB0aGF0IGFsbG9jYXRlIGR1bWImdGlsZWQgYnVm ZmVycyBhdCB0aGUgc2l6ZSBsaW1pdCwgYW5kIGRvIGFsbAo+IHRoZSByb3RhdGlvbnMvc2NhbGlu Zy9tb3ZpbmcgdGVzdHMgd2UgYWxyZWFkeSBoYXZlLgo+IAo+IFllcyB0aGlzIGlzIHBhaW5mdWwu CgpPbmUgdGVzdCB0aGF0IEkgZGlkIHdyaXRlIHdhcyBrbXNfYmlnX2ZiLCB3aGljaCBhbGxvY2F0 ZXMgYSBodWdlIGZiIGFuZApwYW5zIGFyb3VuZCBpdCB3aXRoIGFsbCByb3RhdGlvbnMgYW5kIG1v ZGlmaWVycy4gQnV0IHRoZSB2ZXJzaW9uIEkKcG9zdGVkIHdhcyBwcmV0dHkgb2xkIGFuZCBJIG5l ZWQgdG8gbG9vayBpbnRvIGNsZWFuaW5nIHVwIGFueSBsYXRlcgpjaGFuZ2VzIEkgaGFkLiBUaGUg b3RoZXIgYW5ub3lpbmcgdGhpbmcgaXMgdGhhdCBnZW5lcmF0aW5nIHRoYXQgaHVnZQpmYiBpcyBw cmV0dHkgc2xvdy4gU2hvdWxkIG1heWJlIGxvb2sgaW50byBtaW5pbWl6aW5nIHRoZSBzdHVmZiB3 ZSByZW5kZXIKdG8gaXQgdG8gc3BlZWQgaXQgdXAuCgo+IAo+ID4gKwo+ID4gK3N0YXRpYyBpbnQK PiA+ICtpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlKQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICpm YiA9Cj4gPiArCQl0b19pbnRlbF9mcmFtZWJ1ZmZlcihwbGFuZV9zdGF0ZS0+YmFzZS5mYik7Cj4g PiArCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+ ID4gKwlpbnQgaSwgbnVtX3BsYW5lczsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJaWYgKCFm YikKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwludW1fcGxhbmVzID0gZmItPmJhc2UuZm9y bWF0LT5udW1fcGxhbmVzOwo+ID4gKwo+ID4gKwlpZiAoaW50ZWxfcGxhbmVfbmVlZHNfcmVtYXAo cGxhbmVfc3RhdGUpKSB7Cj4gPiArCQlpbnRlbF9wbGFuZV9yZW1hcF9ndHQocGxhbmVfc3RhdGUp Owo+ID4gKwo+ID4gKwkJLyogUmVtYXBwaW5nIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhpcyBhbHdh eXMgKi8KPiA+ICsJCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0ZSk7 Cj4gPiArCQlpZiAoV0FSTl9PTihyZXQpKQo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCj4gPiAr CQlyZXR1cm4gMDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygm cGxhbmVfc3RhdGUtPnZpZXcsICZmYi0+YmFzZSwgcm90YXRpb24pOwo+ID4gKwo+ID4gKwlmb3Ig KGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7Cj4gPiArCQlwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbaV0uc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goJmZiLT5iYXNlLCBpLCByb3RhdGlvbik7 Cj4gPiArCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ub2Zmc2V0ID0gMDsKPiA+ICsKPiA+ ICsJCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewo+ID4gKwkJCXBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0gZmItPnJvdGF0ZWRbaV0ueDsKPiA+ICsJCQlwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueSA9IGZiLT5yb3RhdGVkW2ldLnk7Cj4gPiArCQl9IGVs c2Ugewo+ID4gKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0gZmItPm5vcm1hbFtp XS54Owo+ID4gKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS55ID0gZmItPm5vcm1hbFtp XS55Owo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIFJvdGF0ZSBzcmMgY29vcmRpbmF0 ZXMgdG8gbWF0Y2ggcm90YXRlZCBHVFQgdmlldyAqLwo+ID4gKwlpZiAoZHJtX3JvdGF0aW9uXzkw X29yXzI3MChyb3RhdGlvbikpCj4gPiArCQlkcm1fcmVjdF9yb3RhdGUoJnBsYW5lX3N0YXRlLT5i YXNlLnNyYywKPiA+ICsJCQkJZmItPmJhc2Uud2lkdGggPDwgMTYsIGZiLT5iYXNlLmhlaWdodCA8 PCAxNiwKPiA+ICsJCQkJRFJNX01PREVfUk9UQVRFXzI3MCk7Cj4gPiArCj4gPiArCXJldCA9IGlu dGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0ZSk7Cj4gPiArCWlmIChyZXQpCj4gPiAr CQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gCj4gU3BsaXR0aW5n IHRoZSByZWZhY3RvcmluZyBmcm9tIHRoZSBhY3R1YWwgZmVhdHVyZSBhZGRpbmcgd291bGQgYmUg bmljZS4KCkF5ZS4gVGhpcyBwYXRjaCBkaWQgZW5kIHVwIGFjY3VtdWxhdGluZyBhIGJpdCB0b28g bWFueSBjaGFuZ2VzLgoKPiAKPiA+ICsKPiA+ICBzdGF0aWMgaW50IGk5eHhfZm9ybWF0X3RvX2Zv dXJjYyhpbnQgZm9ybWF0KQo+ID4gIHsKPiA+ICAJc3dpdGNoIChmb3JtYXQpIHsKPiA+IEBAIC0z MTI3LDI2ICszMzk1LDE1IEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4gIGludCBza2xfY2hlY2tf cGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4g IHsKPiA+ICAJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+ YmFzZS5mYjsKPiA+IC0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uu cm90YXRpb247Cj4gPiAgCWludCByZXQ7Cj4gPiAgCj4gPiAtCWludGVsX2ZpbGxfZmJfZ2d0dF92 aWV3KCZwbGFuZV9zdGF0ZS0+dmlldywgZmIsIHJvdGF0aW9uKTsKPiA+IC0JcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lWzBdLnN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKGZiLCAwLCByb3RhdGlvbik7 Cj4gPiAtCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5zdHJpZGUgPSBpbnRlbF9mYl9waXRj aChmYiwgMSwgcm90YXRpb24pOwo+ID4gLQo+ID4gLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19z dHJpZGUocGxhbmVfc3RhdGUpOwo+ID4gKwlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChw bGFuZV9zdGF0ZSk7Cj4gPiAgCWlmIChyZXQpCj4gPiAgCQlyZXR1cm4gcmV0Owo+ID4gIAo+ID4g IAlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCj4gPiAgCQlyZXR1cm4gMDsKPiA+ICAK PiA+IC0JLyogUm90YXRlIHNyYyBjb29yZGluYXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3 ICovCj4gPiAtCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkKPiA+IC0JCWRy bV9yZWN0X3JvdGF0ZSgmcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLAo+ID4gLQkJCQlmYi0+d2lkdGgg PDwgMTYsIGZiLT5oZWlnaHQgPDwgMTYsCj4gPiAtCQkJCURSTV9NT0RFX1JPVEFURV8yNzApOwo+ ID4gLQo+ID4gIAkvKgo+ID4gIAkgKiBIYW5kbGUgdGhlIEFVWCBzdXJmYWNlIGZpcnN0IHNpbmNl Cj4gPiAgCSAqIHRoZSBtYWluIHN1cmZhY2Ugc2V0dXAgZGVwZW5kcyBvbiBpdC4KPiA+IEBAIC0z MjY1LDIwICszNTIyLDIwIEBAIGludCBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gPiAgCQl0b19pOTE1KHBsYW5lX3N0YXRlLT5iYXNlLnBs YW5lLT5kZXYpOwo+ID4gLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5l X3N0YXRlLT5iYXNlLmZiOwo+ID4gLQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0 ZS0+YmFzZS5yb3RhdGlvbjsKPiA+IC0JaW50IHNyY194ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3Jj LngxID4+IDE2Owo+ID4gLQlpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueTEgPj4g MTY7Cj4gPiArCWludCBzcmNfeCwgc3JjX3k7Cj4gPiAgCXUzMiBvZmZzZXQ7Cj4gPiAgCWludCBy ZXQ7Cj4gPiAgCj4gPiAtCWludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZwbGFuZV9zdGF0ZS0+dmll dywgZmIsIHJvdGF0aW9uKTsKPiA+IC0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlk ZSA9IGludGVsX2ZiX3BpdGNoKGZiLCAwLCByb3RhdGlvbik7Cj4gPiAtCj4gPiAtCXJldCA9IGlu dGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0ZSk7Cj4gPiArCXJldCA9IGludGVsX3Bs YW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJldHVy biByZXQ7Cj4gPiAgCj4gPiArCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiA+ICsJ CXJldHVybiAwOwo+ID4gKwo+ID4gKwlzcmNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy54MSA+ PiAxNjsKPiA+ICsJc3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueTEgPj4gMTY7Cj4gPiAr Cj4gPiAgCWludGVsX2FkZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNyY195LCBwbGFuZV9zdGF0ZSwg MCk7Cj4gPiAgCj4gPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCj4gPiBAQCAtMzI4 OSw2ICszNTQ2LDcgQEAgaW50IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4gIAo+ID4gIAkvKiBIU1cvQkRXIGRvIHRoaXMg YXV0b21hZ2ljYWxseSBpbiBoYXJkd2FyZSAqLwo+ID4gIAlpZiAoIUlTX0hBU1dFTEwoZGV2X3By aXYpICYmICFJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4gPiArCQl1bnNpZ25lZCBpbnQgcm90 YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKPiA+ICAJCWludCBzcmNfdyA9IGRy bV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owo+ID4gIAkJaW50IHNy Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owo+ID4g IAo+ID4gQEAgLTMzMjUsNiArMzU4MywxMCBAQCBpOXh4X3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gIAlpZiAocmV0KQo+ID4gIAkJcmV0dXJuIHJl dDsKPiA+ICAKPiA+ICsJcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRl KTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiAgCWlmICghcGxh bmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiA+ICAJCXJldHVybiAwOwo+ID4gIAo+ID4gQEAgLTMz MzIsMTAgKzM1OTQsNiBAQCBpOXh4X3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAo+ID4gIAlpZiAocmV0KQo+ID4gIAkJcmV0dXJuIHJldDsKPiA+ICAKPiA+ IC0JcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiA+IC0JaWYg KHJldCkKPiA+IC0JCXJldHVybiByZXQ7Cj4gPiAtCj4gPiAgCXBsYW5lX3N0YXRlLT5jdGwgPSBp OXh4X3BsYW5lX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4gPiAgCj4gPiAgCXJldHVy biAwOwo+ID4gQEAgLTM0NTksMTUgKzM3MTcsNiBAQCBzdGF0aWMgYm9vbCBpOXh4X3BsYW5lX2dl dF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4gIAlyZXR1cm4gcmV0Owo+ ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgdTMyCj4gPiAtaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVu dChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQo+ID4g LXsKPiA+IC0JaWYgKGZiLT5tb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpCj4gPiAt CQlyZXR1cm4gNjQ7Cj4gPiAtCWVsc2UKPiA+IC0JCXJldHVybiBpbnRlbF90aWxlX3dpZHRoX2J5 dGVzKGZiLCBjb2xvcl9wbGFuZSk7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyB2b2lkIHNrbF9k ZXRhY2hfc2NhbGVyKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLCBpbnQgaWQpCj4gPiAg ewo+ID4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7Cj4g PiBAQCAtOTgzMCwxOSArMTAwNzksMTcgQEAgc3RhdGljIGJvb2wgaW50ZWxfY3Vyc29yX3NpemVf b2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICAKPiA+ ICBzdGF0aWMgaW50IGludGVsX2N1cnNvcl9jaGVja19zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiAgewo+ID4gLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ID4gLQl1bnNpZ25lZCBpbnQgcm90 YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKPiA+ICAJaW50IHNyY194LCBzcmNf eTsKPiA+ICAJdTMyIG9mZnNldDsKPiA+ICAJaW50IHJldDsKPiA+ICAKPiA+IC0JaW50ZWxfZmls bF9mYl9nZ3R0X3ZpZXcoJnBsYW5lX3N0YXRlLT52aWV3LCBmYiwgcm90YXRpb24pOwo+ID4gLQlw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIsIDAs IHJvdGF0aW9uKTsKPiA+IC0KPiA+IC0JcmV0ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3RyaWRlKHBs YW5lX3N0YXRlKTsKPiA+ICsJcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3Rh dGUpOwo+ID4gIAlpZiAocmV0KQo+ID4gIAkJcmV0dXJuIHJldDsKPiA+ICAKPiA+ICsJaWYgKCFw bGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiAgCXNy Y194ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjX3ggPj4gMTY7Cj4gPiAgCXNyY195ID0gcGxhbmVf c3RhdGUtPmJhc2Uuc3JjX3kgPj4gMTY7Cj4gPiAgCj4gPiBAQCAtOTg3OSw2ICsxMDEyNiwxMCBA QCBzdGF0aWMgaW50IGludGVsX2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAr CXJldCA9IGludGVsX2N1cnNvcl9jaGVja19zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiA+ICsJaWYg KHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiAgCWlmICghcGxhbmVfc3RhdGUtPmJh c2UudmlzaWJsZSkKPiA+ICAJCXJldHVybiAwOwo+ID4gIAo+ID4gQEAgLTk4ODYsMTAgKzEwMTM3 LDYgQEAgc3RhdGljIGludCBpbnRlbF9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCj4gPiAgCWlmIChyZXQpCj4gPiAgCQlyZXR1cm4gcmV0Owo+ID4gIAo+ ID4gLQlyZXQgPSBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Cj4gPiAt CWlmIChyZXQpCj4gPiAtCQlyZXR1cm4gcmV0Owo+ID4gLQo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9 Cj4gPiAgCj4gPiBAQCAtMTQ1OTEsMzEgKzE0ODM4LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIGludGVsX2ZiX2Z1bmNzID0gewo+ID4gIAkuZGlydHkgPSBp bnRlbF91c2VyX2ZyYW1lYnVmZmVyX2RpcnR5LAo+ID4gIH07Cj4gPiAgCj4gPiAtc3RhdGljCj4g PiAtdTMyIGludGVsX2ZiX3BpdGNoX2xpbWl0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiA+IC0JCQkgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IGZiX21vZGlmaWVyKQo+ID4gLXsK PiA+IC0Jc3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4gPiAtCXN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmU7Cj4gPiAtCj4gPiAtCS8qCj4gPiAtCSAqIFdlIGFzc3VtZSB0aGUgcHJpbWFyeSBwbGFu ZSBmb3IgcGlwZSBBIGhhcwo+ID4gLQkgKiB0aGUgaGlnaGVzdCBzdHJpZGUgbGltaXRzIG9mIHRo ZW0gYWxsLgo+ID4gLQkgKi8KPiA+IC0JY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRl dl9wcml2LCBQSVBFX0EpOwo+ID4gLQlwbGFuZSA9IHRvX2ludGVsX3BsYW5lKGNydGMtPmJhc2Uu cHJpbWFyeSk7Cj4gPiAtCj4gPiAtCXJldHVybiBwbGFuZS0+bWF4X3N0cmlkZShwbGFuZSwgcGl4 ZWxfZm9ybWF0LCBmYl9tb2RpZmllciwKPiA+IC0JCQkJIERSTV9NT0RFX1JPVEFURV8wKTsKPiA+ IC19Cj4gPiAtCj4gPiAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBp bnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIsCj4gPiAgCQkJCSAgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiA+ICAJCQkJICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9j bWQpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KG9iai0+YmFzZS5kZXYpOwo+ID4gIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9ICZp bnRlbF9mYi0+YmFzZTsKPiA+IC0JdTMyIHBpdGNoX2xpbWl0Owo+ID4gKwl1MzIgbWF4X3N0cmlk ZTsKPiA+ICAJdW5zaWduZWQgaW50IHRpbGluZywgc3RyaWRlOwo+ID4gIAlpbnQgcmV0ID0gLUVJ TlZBTDsKPiA+ICAJaW50IGk7Cj4gPiBAQCAtMTQ2NjcsMTMgKzE0ODk2LDEzIEBAIHN0YXRpYyBp bnQgaW50ZWxfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVs X2ZiLAo+ID4gIAkJZ290byBlcnI7Cj4gPiAgCX0KPiA+ICAKPiA+IC0JcGl0Y2hfbGltaXQgPSBp bnRlbF9mYl9waXRjaF9saW1pdChkZXZfcHJpdiwgbW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCwKPiA+ IC0JCQkJCSAgIG1vZGVfY21kLT5tb2RpZmllclswXSk7Cj4gPiAtCWlmIChtb2RlX2NtZC0+cGl0 Y2hlc1swXSA+IHBpdGNoX2xpbWl0KSB7Cj4gPiArCW1heF9zdHJpZGUgPSBpbnRlbF9mYl9tYXhf c3RyaWRlKGRldl9wcml2LCBtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0LAo+ID4gKwkJCQkJIG1vZGVf Y21kLT5tb2RpZmllclswXSk7Cj4gPiArCWlmIChtb2RlX2NtZC0+cGl0Y2hlc1swXSA+IG1heF9z dHJpZGUpIHsKPiA+ICAJCURSTV9ERUJVR19LTVMoIiVzIHBpdGNoICgldSkgbXVzdCBiZSBhdCBt b3N0ICVkXG4iLAo+ID4gIAkJCSAgICAgIG1vZGVfY21kLT5tb2RpZmllclswXSAhPSBEUk1fRk9S TUFUX01PRF9MSU5FQVIgPwo+ID4gIAkJCSAgICAgICJ0aWxlZCIgOiAibGluZWFyIiwKPiA+IC0J CQkgICAgICBtb2RlX2NtZC0+cGl0Y2hlc1swXSwgcGl0Y2hfbGltaXQpOwo+ID4gKwkJCSAgICAg IG1vZGVfY21kLT5waXRjaGVzWzBdLCBtYXhfc3RyaWRlKTsKPiA+ICAJCWdvdG8gZXJyOwo+ID4g IAl9Cj4gPiAgCj4gCj4gV2UgbmVlZCBhbiBpbnRlbF9mcmFtZWJ1ZmZlcnxwbGFuZS5jLiBBbmQg YSBtZXRyaWMgcGlsZSBvZiBvdGhlciBleHRyYWN0ZWQKPiBmaWxlcywgcHJvYmFibHkgYWxzbyBw ZXIgbWFqb3IgcGxhdGZvcm1zIGFuZCBzdHVmZiBsaWtlIHRoYXQgOi0vCgpZZWFoLCBJJ3ZlIGJl ZW4gdGhpbmtpbmcgYWJvdXQgc2tsX3VuaXZlcnNhbF9wbGFuZS5jICsgaTl4eF9wbGFuZS5jICsK bWF5YmUgaW50ZWxfcGxhbmUuYyBmb3IgZ2VuZXJpYyBzdHVmZiBmb3IgYSB3aGlsZSBub3cuIEFs c28gbWF5YmUKaW50ZWxfY3Vyc29yLmMuIEJ1dCBJJ3ZlIGJlZW4gcHV0dGluZyBpdCBvZmYgdG8g YXZvaWQgcmViYXNlIHBhaW4uCkJ1dCBJIHRoaW5rIHdlJ3JlIHByb2JhYmx5IGluIGEgZ29vZCBl bm91Z2ggc3RhdGUgbm93IHRoYXQgaXQgc2hvdWxkCmJlIGZpbmUgdG8gdGFrZSB0aGUgcGx1bmdl LgoKPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiBpbmRleCA4MTM2MjYzMjJmYTMu LjBlZTczZjlkZWE3YyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gQEAg LTE1ODYsNiArMTU4Niw3IEBAIHZvaWQgaW50ZWxfZHVtcF9jZGNsa19zdGF0ZShjb25zdCBzdHJ1 Y3QgaW50ZWxfY2RjbGtfc3RhdGUgKmNkY2xrX3N0YXRlLAo+ID4gIAkJCSAgICBjb25zdCBjaGFy ICpjb250ZXh0KTsKPiA+ICAKPiA+ICAvKiBpbnRlbF9kaXNwbGF5LmMgKi8KPiA+ICtib29sIGlu dGVsX3BsYW5lX2Nhbl9yZW1hcChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKTsKPiA+ICB2b2lkIGk4MzBfZW5hYmxlX3BpcGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSk7Cj4gPiAgdm9pZCBpODMwX2Rpc2FibGVfcGlw ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKTsKPiA+ ICBlbnVtIHBpcGUgaW50ZWxfY3J0Y19wY2hfdHJhbnNjb2RlcihzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0Yyk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRl LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ID4gaW5kZXggYjAyZDNk OTgwOWUzLi41MTc3NDdkMDg5NjIgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9zcHJpdGUuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3By aXRlLmMKPiA+IEBAIC0yMzcsNiArMjM3LDE2IEBAIGludCBpbnRlbF9wbGFuZV9jaGVja19zdHJp ZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICAJdW5z aWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gPiAgCXUz MiBzdHJpZGUsIG1heF9zdHJpZGU7Cj4gPiAgCj4gPiArCS8qCj4gPiArCSAqIFdlIGlnbm9yZSBz dHJpZGUgZm9yIGFsbCBpbnZpc2libGUgcGxhbmVzIHRoYXQKPiA+ICsJICogY2FuIGJlIHJlbWFw cGVkLiBPdGhlcndpc2Ugd2UgY291bGQgZW5kIHVwCj4gPiArCSAqIHdpdGggYSBmYWxzZSBwb3Np dGl2ZSB3aGVuIHRoZSByZW1hcHBpbmcgZGlkbid0Cj4gPiArCSAqIGtpY2sgaW4gZHVlIHRoZSBw bGFuZSBiZWluZyBpbnZpc2libGUuCj4gPiArCSAqLwo+ID4gKwlpZiAoaW50ZWxfcGxhbmVfY2Fu X3JlbWFwKHBsYW5lX3N0YXRlKSAmJgo+ID4gKwkgICAgIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2li bGUpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICAJLyogRklYTUUgb3RoZXIgY29sb3IgcGxh bmVzPyAqLwo+ID4gIAlzdHJpZGUgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRl Owo+ID4gIAltYXhfc3RyaWRlID0gcGxhbmUtPm1heF9zdHJpZGUocGxhbmUsIGZiLT5mb3JtYXQt PmZvcm1hdCwKPiA+IEBAIC0xMzQxLDYgKzEzNTEsMTAgQEAgZzR4X3Nwcml0ZV9jaGVjayhzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJl dHVybiByZXQ7Cj4gPiAgCj4gPiArCXJldCA9IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShwbGFu ZV9zdGF0ZSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gIAlp ZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCj4gPiAgCQlyZXR1cm4gMDsKPiA+ICAKPiA+ IEBAIC0xMzUyLDEwICsxMzY2LDYgQEAgZzR4X3Nwcml0ZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJldHVybiByZXQ7Cj4g PiAgCj4gPiAtCXJldCA9IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Cj4g PiAtCWlmIChyZXQpCj4gPiAtCQlyZXR1cm4gcmV0Owo+ID4gLQo+ID4gIAlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA3KQo+ID4gIAkJcGxhbmVfc3RhdGUtPmN0bCA9IGl2Yl9zcHJpdGVfY3Rs KGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKPiA+ICAJZWxzZQo+ID4gQEAgLTEzOTksNiArMTQw OSwxMCBAQCB2bHZfc3ByaXRlX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlLAo+ID4gIAlpZiAocmV0KQo+ID4gIAkJcmV0dXJuIHJldDsKPiA+ICAKPiA+ICsJcmV0ID0g aTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiA+ICsJaWYgKHJldCkKPiA+ ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiAgCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJs ZSkKPiA+ICAJCXJldHVybiAwOwo+ID4gIAo+ID4gQEAgLTE0MDYsMTAgKzE0MjAsNiBAQCB2bHZf c3ByaXRlX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gIAlp ZiAocmV0KQo+ID4gIAkJcmV0dXJuIHJldDsKPiA+ICAKPiA+IC0JcmV0ID0gaTl4eF9jaGVja19w bGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiA+IC0JaWYgKHJldCkKPiA+IC0JCXJldHVybiBy ZXQ7Cj4gPiAtCj4gPiAgCXBsYW5lX3N0YXRlLT5jdGwgPSB2bHZfc3ByaXRlX2N0bChjcnRjX3N0 YXRlLCBwbGFuZV9zdGF0ZSk7Cj4gPiAgCj4gPiAgCXJldHVybiAwOwo+ID4gQEAgLTE1NTYsNiAr MTU2NiwxMCBAQCBzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAg Cj4gPiArCXJldCA9IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiA+ICsJ aWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiAgCWlmICghcGxhbmVfc3RhdGUt PmJhc2UudmlzaWJsZSkKPiA+ICAJCXJldHVybiAwOwo+ID4gIAo+ID4gQEAgLTE1NzEsMTAgKzE1 ODUsNiBAQCBzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAgCj4g PiAtCXJldCA9IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiA+IC0JaWYg KHJldCkKPiA+IC0JCXJldHVybiByZXQ7Cj4gPiAtCj4gPiAgCS8qIEhXIG9ubHkgaGFzIDggYml0 cyBwaXhlbCBwcmVjaXNpb24sIGRpc2FibGUgcGxhbmUgaWYgaW52aXNpYmxlICovCj4gPiAgCWlm ICghKHBsYW5lX3N0YXRlLT5iYXNlLmFscGhhID4+IDgpKQo+ID4gIAkJcGxhbmVfc3RhdGUtPmJh c2UudmlzaWJsZSA9IGZhbHNlOwo+IAo+IENvZGUgbG9va3MgZ29vZCwgYnV0IHRoZSB0ZXN0aW5n IGZyZWFrcyBtZSBvdXQuIE5lZWRzIGxvdHMgb2YgaWd0LCBJJ2Qgc2F5Cj4gYXQgbGVhc3Qgc2lt aWxhciBhbW91bnRzIHRvIHdoYXQgd2UndmUgYWxsIGFkZGVkIGZvciB0aGUgb3JpZ2luYWwKPiBr bXNfcm90YXRpb24gdGVzdHMuCj4gLURhbmllbAo+IC0tIAo+IERhbmllbCBWZXR0ZXIKPiBTb2Z0 d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8vYmxvZy5mZndsbC5jaAoK LS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK