From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: FW: [PATCH v4 10/21] drm/i915: Rewrite fb rotation GTT handling Date: Mon, 2 May 2016 21:40:45 +0300 Message-ID: <20160502184045.GA4329@intel.com> References: <1455569699-27905-1-git-send-email-ville.syrjala@linux.intel.com> <1455569699-27905-11-git-send-email-ville.syrjala@linux.intel.com> <57278EE7.6060107@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 852006E099 for ; Mon, 2 May 2016 18:40:49 +0000 (UTC) Content-Disposition: inline In-Reply-To: <57278EE7.6060107@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Thulasimani, Sivakumar" Cc: "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXkgMDIsIDIwMTYgYXQgMTE6MDE6MTlQTSArMDUzMCwgVGh1bGFzaW1hbmksIFNp dmFrdW1hciB3cm90ZToKPiBzb3JyeSBmb3IgdGhlIGh1Z2UgZGVsYXkgaW4gcmV2aWV3aW5nIHRo aXMgc2VyaWVzLCBoYXZlIGp1c3Qgc3RhcnRlZCBvbiAKPiB0aGlzIGFuZCBjb3VsZCByZXZpZXcg b25seSB0aGUgZmlyc3QKPiBwYXRjaCBmb3IgdG9kYXksIGhvcGVmdWxseSBpJ2xsIGNvbnRpbnVl IG9uIHRoaXMgZXZlcnlkYXkgdGhpcyB3ZWVrIDopLiAgCj4gcmVwbHlpbmcgYXMgYSBkZXRhY2hl ZCB0aHJlYWQgc2luY2UKPiBpIGxvc3QgdGhlIG1haWxzIGFzIHBhcnQgb3JpZ2luYWwgc2VyaWVz IHNvIHBsZWFzZSBmb3JnaXZlIGZvciB0aGUgCj4gZGV0YWNoZWQgcmVwbHkgZm9yIHJldmlldy4K PiAKPiBPbiA1LzIvMjAxNiAzOjIwIFBNLCBNdWtoZXJqZWUsIEluZHJhbmlsIHdyb3RlOgo+ID4K PiA+IFJlZ2FyZHMsCj4gPiBJbmRyYW5pbAo+ID4KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tCj4gPiBGcm9tOiBJbnRlbC1nZnggW21haWx0bzppbnRlbC1nZngtYm91bmNlc0BsaXN0cy5m cmVlZGVza3RvcC5vcmddIE9uIEJlaGFsZiBPZiB2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNv bQo+ID4gU2VudDogVHVlc2RheSwgRmVicnVhcnkgMTYsIDIwMTYgMjoyNSBBTQo+ID4gVG86IGlu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+IFN1YmplY3Q6IFtJbnRlbC1nZnhdIFtQ QVRDSCB2NCAxMC8yMV0gZHJtL2k5MTU6IFJld3JpdGUgZmIgcm90YXRpb24gR1RUIGhhbmRsaW5n Cj4gPgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVs LmNvbT4KPiA+Cj4gPiBSZWRvIHRoZSBmYiByb3RhdGlvbiBoYW5kbGluZyBpbiBvcmRlciB0bzoK PiA+IC0gZWxpbWluYXRlIHRoZSBOVjEyIHNwZWNpYWwgY2FzaW5nCj4gPiAtIGhhbmRsZSBmYi0+ b2Zmc2V0c1tdIHByb3Blcmx5Cj4gPiAtIG1ha2UgdGhlIHJvdGF0aW9uIGhhbmRsaW5nIHJlYXNp ZXIgZm9yIHRoZSBwbGFuZSBjb2RlCj4gdHlwbyAiZWFzaWVyIgo+ID4gVG8gYWNoaWV2ZSB0aGVz ZSBnb2FscyB3ZSByZWR1Y2UgaW50ZWxfcm90YXRpb25faW5mbyB0byBvbmx5IGNvbnRhaW4gKGZv ciBlYWNoIHBsYW5lKSB0aGUgcm90YXRlZCB2aWV3IHdpZHRoLGhlaWdodCxzdHJpZGUgaW4gdGls ZSB1bml0cywgYW5kIHRoZSBwYWdlIG9mZnNldCBpbnRvIHRoZSBvYmplY3Qgd2hlcmUgdGhlIHBs YW5lIHN0YXJ0cy4gRWFjaCBwbGFuZSBpcyBoYW5kbGVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5LCBu byBzcGVjaWFsIGNhc2luZyBmb3IgTlYxMiBvciBvdGhlciBmb3JtYXRzLiBXZSB0aGVuIHN0b3Jl IHRoZSBjb21wdXRlZCByb3RhdGlvbl9pbmZvIHVuZGVyIGludGVsX2ZyYW1lYnVmZmVyIHNvIHRo YXQgd2UgZG9uJ3QgaGF2ZSB0byByZWNvbXB1dGUgaXQgYWdhaW4uCj4gPgo+ID4gVG8gaGFuZGxl IGZiLT5vZmZzZXRzW10gd2UgdHJlYXQgdGhlbSBhcyBhIGxpbmVhciBvZmZzZXRzIGFuZCBjb252 ZXJ0IHRoZW0gdG8geC95IG9mZnNldHMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHJlbGV2YW50IEdU VCBtYXBwaW5nIChlaXRoZXIgbm9ybWFsIG9yIHJvdGF0ZWQpLiBXZSBzdG9yZSB0aGUgeC95IG9m ZnNldHMgdW5kZXIgaW50ZWxfZnJhbWVidWZmZXIsIGFuZCBmb3Igc29tZSBleHRyYSBjb252ZW5p ZW5jZSB3ZSBhbHNvIHN0b3JlIHRoZSByb3RhdGVkIHBpdGNoIChpZS4KPiA+IHRpbGUgYWxpZ25l ZCBwbGFuZSBoZWlnaHQpLiBTbyBmb3IgZWFjaCBwbGFuZSB3ZSBoYXZlIHRoZSBub3JtYWwgeC95 IG9mZnNldHMsIHJvdGF0ZWQgeC95IG9mZnNldHMsIGFuZCB0aGUgcm90YXRlZCBwaXRjaC4gVGhl IG5vcm1hbCBwaXRjaCBpcyBhdmFpbGFibGUgYWxyZWFkeSBpbiBmYi0+cGl0Y2hlc1tdLgo+ID4K PiA+IFdoaWxlIHdlJ3JlIGdhdGhlcmluZyB1cCBhbGwgdGhhdCBleHRyYSBpbmZvcm1hdGlvbiwg d2UgY2FuIGFsc28gZWFzaWx5IGNvbXB1dGUgdGhlIHN0b3JhZ2UgcmVxdWlyZW1lbnRzIGZvciB0 aGUgZnJhbWVidWZmZXIsIHNvIHRoYXQgd2UgY2FuIGNoZWNrIHRoYXQgdGhlIG9iamVjdCBpcyBi aWcgZW5vdWdoIHRvIGhvbGQgaXQuCj4gPgo+ID4gV2hlbiBpdCBjb21lcyB0aW1lIHRvIGRlYWwg d2l0aCB0aGUgcGxhbmUgc291cmNlIGNvb3JkaW5hdGVzLCB3ZSBmaXJzdCByb3RhdGUgdGhlIGNs aXBwZWQgc3JjIGNvb3JkaW5hdGVzIHRvIG1hdGNoIHRoZSByZWxldmFudCBHVFQgdmlldyBvcmll bnRhdGlvbiwgdGhlbiBhZGQgdG8gdGhlbSB0aGUgZmIgeC95IG9mZnNldHMuIE5leHQgd2UgY29t cHV0ZSB0aGUgYWxpZ25lZCBzdXJmYWNlIHBhZ2Ugb2Zmc2V0LCBhbmQgYXMgYSByZXN1bHQgd2Un cmUgbGVmdCB3aXRoIHNvbWUgcmVzaWR1YWwgeC95IG9mZnNldHMuIEZpbmFsbHksIGlmIHJlcXVp cmVkIGJ5IHRoZSBoYXJkd2FyZSwgd2UgY29udmVydCB0aGUgcmVtYWluaW5nIHgveSBvZmZzZXRz IGludG8gYSBsaW5lYXIgb2Zmc2V0Lgo+ID4KPiA+IEZvciBnZW4yLzMgd2Ugc2ltcGx5IHNraXAg Y29tcHV0aW5nIHRoZSBmaW5hbCBwYWdlIG9mZnNldCwgYW5kIGp1c3QgY29udmVydCB0aGUgc3Jj K2ZiIHgveSBvZmZzZXRzIGRpcmVjdGx5IGludG8gYSBsaW5lYXIgb2Zmc2V0IHNpbmNlIHRoYXQn cyB3aGF0IHRoZSBoYXJkd2FyZSB3YW50cy4KPiA+Cj4gPiBBZnRlciB0aGlzIGFsbCBwbGF0Zm9y bXMsIGluY2x1aW5nIFNLTCssIGNvbXB1dGUgdGhlc2UgdGhpbmdzIGluIGV4YWN0bHkgdGhlIHNh bWUgd2F5IChleGNsdWRpbmcgYWxpZ25lbW50IGRpZmZlcmVuY2VzKS4KCllvdXIgTVVBIHNlZW1z IHRvIGhhdmUgbWFuZ2xlZCBwYXJ0cyBvZiB0aGUgcXVvdGVkIG1haWwgcmF0aGVyCmJhZGx5LiBB bnkgY2hhbmNlIHlvdSBjYW4gdGVsbCBpdCBub3QgdG8gZG8gdGhhdD8KCj4gPgo+ID4gdjI6IFVz ZSBCSVQoRFJNX1JPVEFURV8yNzApIGluc3RlYWQgb2YgUk9UQVRFXzI3MCB3aGVuIHJvdGF0aW5n Cj4gPiAgICAgIHBsYW5lIHNyYyBjb29yZGluYXRlcwo+ID4gICAgICBEcm9wIHNvbWUgc3B1cmlv dXMgY2hhbmdlcyB0aGF0IGdvdCBsZWZ0IGJlaGluZCBkdXJpbmcKPiA+ICAgICAgZGV2ZWxvcG1l bnQKPiA+IHYzOiBTcGxpdCBvdXQgbW9yZSBjaGFuZ2VzIHRvIHByZXAgcGF0Y2hlcyAoRGFuaWVs KQo+ID4gICAgICBzL2ludGVsX2ZiLT5wbGFuZVtdLmZvby5iYXIvaW50ZWxfZmItPmZvb1tdLmJh ci8gZm9yIGJyZXZpdHkKPiA+ICAgICAgUmVuYW1lIGludGVsX3N1cmZfZ3R0X29mZnNldCB0byBp bnRlbF9mYl9ndHRfb2Zmc2V0Cj4gPiAgICAgIEtpbGwgdGhlIHBvaW50bGVzcyAncGxhbmUnIHBh cmFtZXRlciBmcm9tIGludGVsX2ZiX2d0dF9vZmZzZXQoKQo+ID4gdjQ6IEZpeCBhbGlnbm1lbnQg dnMuIGFsaWdubWVudC0xIHdoZW4gY2FsbGluZwo+ID4gICAgICBfaW50ZWxfY29tcHV0ZV90aWxl X29mZnNldCgpIGZyb20gaW50ZWxfZmlsbF9mYl9pbmZvKCkKPiA+ICAgICAgUGFzcyB0aGUgcGl0 Y2ggaW4gdGlsZXMgaW4KPiA+ICAgICAgc3RhZCBvZiBwaXhlbHMgdG8gaW50ZWxfYWRqdXN0X3Rp bGVfb2Zmc2V0KCkgZnJvbSBpbnRlbF9maWxsX2ZiX2luZm8oKQo+ID4gICAgICBQYXNzIHRoZSBm dWxsIHdpZHRoL2hlaWdodCBvZiB0aGUgcm90YXRlZCBhcmVhIHRvCj4gPiAgICAgIGRybV9yZWN0 X3JvdGF0ZSgpIGZvciBjbGFyaXR5Cj4gPiAgICAgIFVzZSB1MzIgZm9yIG1vcmUgb2Zmc2V0cwo+ ID4KPiA+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51 eC5pbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMgIHwgIDUxICsrLS0tCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0 dC5oICB8ICAgNSArLQo+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMg fCAzNzMgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiA+ICAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgIDE5ICstCj4gPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3Nwcml0ZS5jICB8ICA5NyArKysrLS0tLS0KPiA+ICAgNSBmaWxlcyBjaGFu Z2VkLCAzMzEgaW5zZXJ0aW9ucygrKSwgMjE0IGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gPiBpbmRleCA1MWYyNTk3ZTNjNTYuLjViMTc5NDRhNTEy YiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ID4gQEAgLTMzOTUs MTYgKzMzOTUsMTQgQEAgcm90YXRlX3BhZ2VzKGNvbnN0IGRtYV9hZGRyX3QgKmluLCB1bnNpZ25l ZCBpbnQgb2Zmc2V0LCAgfQo+ID4gICAKPiA+ICAgc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqCj4g PiAtaW50ZWxfcm90YXRlX2ZiX29ial9wYWdlcyhzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAq cm90X2luZm8sCj4gPiAraW50ZWxfcm90YXRlX2ZiX29ial9wYWdlcyhjb25zdCBzdHJ1Y3QgaW50 ZWxfcm90YXRpb25faW5mbyAqcm90X2luZm8sCj4gPiAgIAkJCSAgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKPiA+ICAgewo+ID4gLQl1bnNpZ25lZCBpbnQgc2l6ZV9wYWdlcyA9IHJv dF9pbmZvLT5wbGFuZVswXS53aWR0aCAqIHJvdF9pbmZvLT5wbGFuZVswXS5oZWlnaHQ7Cj4gPiAt CXVuc2lnbmVkIGludCBzaXplX3BhZ2VzX3V2Owo+ID4gKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGlu dGVsX3JvdGF0aW9uX2luZm9fc2l6ZShyb3RfaW5mbyk7Cj4gPiAgIAlzdHJ1Y3Qgc2dfcGFnZV9p dGVyIHNnX2l0ZXI7Cj4gPiAgIAl1bnNpZ25lZCBsb25nIGk7Cj4gPiAgIAlkbWFfYWRkcl90ICpw YWdlX2FkZHJfbGlzdDsKPiA+ICAgCXN0cnVjdCBzZ190YWJsZSAqc3Q7Cj4gPiAtCXVuc2lnbmVk IGludCB1dl9zdGFydF9wYWdlOwo+ID4gICAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiA+ICAg CWludCByZXQgPSAtRU5PTUVNOwo+ID4gICAKPiA+IEBAIC0zNDE0LDE4ICszNDEyLDEyIEBAIGlu dGVsX3JvdGF0ZV9mYl9vYmpfcGFnZXMoc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9p bmZvLAo+ID4gICAJaWYgKCFwYWdlX2FkZHJfbGlzdCkKPiA+ICAgCQlyZXR1cm4gRVJSX1BUUihy ZXQpOwo+ID4gICAKPiA+IC0JLyogQWNjb3VudCBmb3IgVVYgcGxhbmUgd2l0aCBOVjEyLiAqLwo+ ID4gLQlpZiAocm90X2luZm8tPnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIpCj4gPiAt CQlzaXplX3BhZ2VzX3V2ID0gcm90X2luZm8tPnBsYW5lWzFdLndpZHRoICogcm90X2luZm8tPnBs YW5lWzFdLmhlaWdodDsKPiA+IC0JZWxzZQo+ID4gLQkJc2l6ZV9wYWdlc191diA9IDA7Cj4gPiAt Cj4gPiAgIAkvKiBBbGxvY2F0ZSB0YXJnZXQgU0cgbGlzdC4gKi8KPiA+ICAgCXN0ID0ga21hbGxv YyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7Cj4gPiAgIAlpZiAoIXN0KQo+ID4gICAJCWdvdG8g ZXJyX3N0X2FsbG9jOwo+ID4gICAKPiA+IC0JcmV0ID0gc2dfYWxsb2NfdGFibGUoc3QsIHNpemVf cGFnZXMgKyBzaXplX3BhZ2VzX3V2LCBHRlBfS0VSTkVMKTsKPiA+ICsJcmV0ID0gc2dfYWxsb2Nf dGFibGUoc3QsIHNpemUsIEdGUF9LRVJORUwpOwo+ID4gICAJaWYgKHJldCkKPiA+ICAgCQlnb3Rv IGVycl9zZ19hbGxvYzsKPiA+ICAgCj4gPiBAQCAtMzQzOSwzMiArMzQzMSwxNCBAQCBpbnRlbF9y b3RhdGVfZmJfb2JqX3BhZ2VzKHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbywK PiA+ICAgCXN0LT5uZW50cyA9IDA7Cj4gPiAgIAlzZyA9IHN0LT5zZ2w7Cj4gPiAgIAo+ID4gLQkv KiBSb3RhdGUgdGhlIHBhZ2VzLiAqLwo+ID4gLQlzZyA9IHJvdGF0ZV9wYWdlcyhwYWdlX2FkZHJf bGlzdCwgMCwKPiA+IC0JCQkgIHJvdF9pbmZvLT5wbGFuZVswXS53aWR0aCwgcm90X2luZm8tPnBs YW5lWzBdLmhlaWdodCwKPiA+IC0JCQkgIHJvdF9pbmZvLT5wbGFuZVswXS53aWR0aCwKPiA+IC0J CQkgIHN0LCBzZyk7Cj4gPiAtCj4gPiAtCS8qIEFwcGVuZCB0aGUgVVYgcGxhbmUgaWYgTlYxMi4g Ki8KPiA+IC0JaWYgKHJvdF9pbmZvLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKSB7 Cj4gPiAtCQl1dl9zdGFydF9wYWdlID0gc2l6ZV9wYWdlczsKPiA+IC0KPiA+IC0JCS8qIENoZWNr IGZvciB0aWxlLXJvdyB1bi1hbGlnbm1lbnQuICovCj4gPiAtCQlpZiAob2Zmc2V0X2luX3BhZ2Uo cm90X2luZm8tPnV2X29mZnNldCkpCj4gPiAtCQkJdXZfc3RhcnRfcGFnZS0tOwo+ID4gLQo+ID4g LQkJcm90X2luZm8tPnV2X3N0YXJ0X3BhZ2UgPSB1dl9zdGFydF9wYWdlOwo+ID4gLQo+ID4gLQkJ c2cgPSByb3RhdGVfcGFnZXMocGFnZV9hZGRyX2xpc3QsIHJvdF9pbmZvLT51dl9zdGFydF9wYWdl LAo+ID4gLQkJCQkgIHJvdF9pbmZvLT5wbGFuZVsxXS53aWR0aCwgcm90X2luZm8tPnBsYW5lWzFd LmhlaWdodCwKPiA+IC0JCQkJICByb3RfaW5mby0+cGxhbmVbMV0ud2lkdGgsCj4gPiAtCQkJCSAg c3QsIHNnKTsKPiA+ICsJZm9yIChpID0gMCA7IGkgPCBBUlJBWV9TSVpFKHJvdF9pbmZvLT5wbGFu ZSk7IGkrKykgewo+ID4gKwkJc2cgPSByb3RhdGVfcGFnZXMocGFnZV9hZGRyX2xpc3QsIHJvdF9p bmZvLT5wbGFuZVtpXS5vZmZzZXQsCj4gPiArCQkJCSAgcm90X2luZm8tPnBsYW5lW2ldLndpZHRo LCByb3RfaW5mby0+cGxhbmVbaV0uaGVpZ2h0LAo+ID4gKwkJCQkgIHJvdF9pbmZvLT5wbGFuZVtp XS5zdHJpZGUsIHN0LCBzZyk7Cj4gPiAgIAl9Cj4gPiAgIAo+ID4gLQlEUk1fREVCVUdfS01TKCJD cmVhdGVkIHJvdGF0ZWQgcGFnZSBtYXBwaW5nIGZvciBvYmplY3Qgc2l6ZSAlenUgKCV1eCV1IHRp bGVzLCAldSBwYWdlcyAoJXUgcGxhbmUgMCkpLlxuIiwKPiA+IC0JCSAgICAgIG9iai0+YmFzZS5z aXplLCByb3RfaW5mby0+cGxhbmVbMF0ud2lkdGgsCj4gPiAtCQkgICAgICByb3RfaW5mby0+cGxh bmVbMF0uaGVpZ2h0LCBzaXplX3BhZ2VzICsgc2l6ZV9wYWdlc191diwKPiA+IC0JCSAgICAgIHNp emVfcGFnZXMpOwo+ID4gKwlEUk1fREVCVUdfS01TKCJDcmVhdGVkIHJvdGF0ZWQgcGFnZSBtYXBw aW5nIGZvciBvYmplY3Qgc2l6ZSAlenUgKCV1eCV1IHRpbGVzLCAldSBwYWdlcylcbiIsCj4gPiAr CQkgICAgICBvYmotPmJhc2Uuc2l6ZSwgcm90X2luZm8tPnBsYW5lWzBdLndpZHRoLAo+ID4gK3Jv dF9pbmZvLT5wbGFuZVswXS5oZWlnaHQsIHNpemUpOwo+ID4gICAKPiA+ICAgCWRybV9mcmVlX2xh cmdlKHBhZ2VfYWRkcl9saXN0KTsKPiA+ICAgCj4gPiBAQCAtMzQ3NSwxMCArMzQ0OSw5IEBAIGVy cl9zZ19hbGxvYzoKPiA+ICAgZXJyX3N0X2FsbG9jOgo+ID4gICAJZHJtX2ZyZWVfbGFyZ2UocGFn ZV9hZGRyX2xpc3QpOwo+ID4gICAKPiA+IC0JRFJNX0RFQlVHX0tNUygiRmFpbGVkIHRvIGNyZWF0 ZSByb3RhdGVkIG1hcHBpbmcgZm9yIG9iamVjdCBzaXplICV6dSEgKCVkKSAoJXV4JXUgdGlsZXMs ICV1IHBhZ2VzICgldSBwbGFuZSAwKSlcbiIsCj4gPiAtCQkgICAgICBvYmotPmJhc2Uuc2l6ZSwg cmV0LCByb3RfaW5mby0+cGxhbmVbMF0ud2lkdGgsCj4gPiAtCQkgICAgICByb3RfaW5mby0+cGxh bmVbMF0uaGVpZ2h0LCBzaXplX3BhZ2VzICsgc2l6ZV9wYWdlc191diwKPiA+IC0JCSAgICAgIHNp emVfcGFnZXMpOwo+ID4gKwlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gY3JlYXRlIHJvdGF0ZWQg bWFwcGluZyBmb3Igb2JqZWN0IHNpemUgJXp1ISAoJXV4JXUgdGlsZXMsICV1IHBhZ2VzKVxuIiwK PiA+ICsJCSAgICAgIG9iai0+YmFzZS5zaXplLCByb3RfaW5mby0+cGxhbmVbMF0ud2lkdGgsCj4g PiArcm90X2luZm8tPnBsYW5lWzBdLmhlaWdodCwgc2l6ZSk7Cj4gPiArCj4gPiAgIAlyZXR1cm4g RVJSX1BUUihyZXQpOwo+ID4gICB9Cj4gPiAgIAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmgKPiA+IGluZGV4IDJmYjk4YjFlNGQ4Mi4uODlmMzRhOTIwMzM4IDEwMDY0NAo+ID4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gPiBAQCAtMTM1LDEyICsxMzUsOSBAQCBlbnVt IGk5MTVfZ2d0dF92aWV3X3R5cGUgeyAgfTsKPiA+ICAgCj4gPiAgIHN0cnVjdCBpbnRlbF9yb3Rh dGlvbl9pbmZvIHsKPiA+IC0JdW5zaWduZWQgaW50IHV2X29mZnNldDsKPiA+IC0JdWludDMyX3Qg cGl4ZWxfZm9ybWF0Owo+ID4gLQl1bnNpZ25lZCBpbnQgdXZfc3RhcnRfcGFnZTsKPiA+ICAgCXN0 cnVjdCB7Cj4gPiAgIAkJLyogdGlsZXMgKi8KPiA+IC0JCXVuc2lnbmVkIGludCB3aWR0aCwgaGVp Z2h0Owo+ID4gKwkJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwgb2Zmc2V0Owo+ ID4gICAJfSBwbGFuZVsyXTsKPiA+ICAgfTsKPiA+ICAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCj4gPiBpbmRleCBmZGRmYzU4NzU3NTIuLmFjZDkyZjk1NzA1NCAxMDA2NDQK PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiBAQCAtMjMxNywzMyArMjMx Nyw2IEBAIGludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmll dywKPiA+ICAgCX0KPiA+ICAgfQo+ID4gICAKPiA+IC1zdGF0aWMgdm9pZAo+ID4gLWludGVsX2Zp bGxfZmJfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAtCQkgICBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiA+IC17Cj4gPiAtCXN0cnVjdCBpbnRlbF9yb3Rh dGlvbl9pbmZvICppbmZvID0gJnRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKS0+cm90X2luZm87Cj4g PiAtCXVuc2lnbmVkIGludCB0aWxlX3NpemUsIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0LCBjcHA7 Cj4gPiAtCj4gPiAtCXRpbGVfc2l6ZSA9IGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7Cj4gPiAt Cj4gPiAtCWNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOwo+ ID4gLQlpbnRlbF90aWxlX2RpbXMoZGV2X3ByaXYsICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQs Cj4gPiAtCQkJZmItPm1vZGlmaWVyWzBdLCBjcHApOwo+ID4gLQo+ID4gLQlpbmZvLT5wbGFuZVsw XS53aWR0aCA9IERJVl9ST1VORF9VUChmYi0+cGl0Y2hlc1swXSwgdGlsZV93aWR0aCAqIGNwcCk7 Cj4gPiAtCWluZm8tPnBsYW5lWzBdLmhlaWdodCA9IERJVl9ST1VORF9VUChmYi0+aGVpZ2h0LCB0 aWxlX2hlaWdodCk7Cj4gPiAtCj4gPiAtCWlmIChpbmZvLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZP Uk1BVF9OVjEyKSB7Cj4gPiAtCQljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxf Zm9ybWF0LCAxKTsKPiA+IC0JCWludGVsX3RpbGVfZGltcyhkZXZfcHJpdiwgJnRpbGVfd2lkdGgs ICZ0aWxlX2hlaWdodCwKPiA+IC0JCQkJZmItPm1vZGlmaWVyWzFdLCBjcHApOwo+ID4gLQo+ID4g LQkJaW5mby0+dXZfb2Zmc2V0ID0gZmItPm9mZnNldHNbMV07Cj4gPiAtCQlpbmZvLT5wbGFuZVsx XS53aWR0aCA9IERJVl9ST1VORF9VUChmYi0+cGl0Y2hlc1sxXSwgdGlsZV93aWR0aCAqIGNwcCk7 Cj4gPiAtCQlpbmZvLT5wbGFuZVsxXS5oZWlnaHQgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCAv IDIsIHRpbGVfaGVpZ2h0KTsKPiA+IC0JfQo+ID4gLX0KPiA+IC0KPiA+ICAgc3RhdGljIHVuc2ln bmVkIGludCBpbnRlbF9saW5lYXJfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikgIHsKPiA+ICAgCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49 IDkpCj4gPiBAQCAtMjQ2NSw2ICsyNDM4LDQyIEBAIHN0YXRpYyB2b2lkIGludGVsX3VucGluX2Zi X29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgdW5zaWduZWQgaW50IHJvdGF0aW9uICB9 Cj4gPiAgIAo+ID4gICAvKgo+ID4gKyAqIENvbnZlcnQgdGhlIHgveSBvZmZzZXRzIGludG8gYSBs aW5lYXIgb2Zmc2V0Lgo+ID4gKyAqIE9ubHkgdmFsaWQgd2l0aCAwLzE4MCBkZWdyZWUgcm90YXRp b24sIHdoaWNoIGlzIGZpbmUgc2luY2UgbGluZWFyCj4gPiArICogb2Zmc2V0IGlzIG9ubHkgdXNl ZCB3aXRoIGxpbmVhciBidWZmZXJzIG9uIHByZS1oc3cgYW5kIHRpbGVkIGJ1ZmZlcnMKPiA+ICsg KiB3aXRoIGdlbjIvMywgYW5kIDkwLzI3MCBkZWdyZWUgcm90YXRpb25zIGlzbid0IHN1cHBvcnRl ZCBvbiBhbnkgb2YgdGhlbS4KPiA+ICsgKi8KPiA+ICt1MzIgaW50ZWxfZmJfeHlfdG9fbGluZWFy KGludCB4LCBpbnQgeSwKPiA+ICsJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LCBpbnQgcGxhbmUpIHsKPiA+ICsJdW5zaWduZWQgaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVf Y3BwKGZiLT5waXhlbF9mb3JtYXQsIHBsYW5lKTsKPiA+ICsJdW5zaWduZWQgaW50IHBpdGNoID0g ZmItPnBpdGNoZXNbcGxhbmVdOwo+ID4gKwo+ID4gKwlyZXR1cm4geSAqIHBpdGNoICsgeCAqIGNw cDsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBBZGQgdGhlIHgveSBvZmZzZXRzIGRlcml2 ZWQgZnJvbSBmYi0+b2Zmc2V0c1tdIHRvIHRoZSB1c2VyCj4gPiArICogc3BlY2lmaWVkIHBsYW5l IHNyYyB4L3kgb2Zmc2V0cy4gVGhlIHJlc3VsdGluZyB4L3kgb2Zmc2V0cwo+ID4gKyAqIHNwZWNp ZnkgdGhlIHN0YXJ0IG9mIHNjYW5vdXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBndHQgbWFw cGluZy4KPiA+ICsgKi8KPiA+ICt2b2lkIGludGVsX2FkZF9mYl9vZmZzZXRzKGludCAqeCwgaW50 ICp5LAo+ID4gKwkJCSAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFu ZSwKPiA+ICsJCQkgIHVuc2lnbmVkIGludCByb3RhdGlvbikKPiA+ICsKPiA+ICt7Cj4gPiArCWNv bnN0IHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1 ZmZlcihmYik7Cj4gPiArCj4gPiArCWlmIChpbnRlbF9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRp b24pKSB7Cj4gPiArCQkqeCArPSBpbnRlbF9mYi0+cm90YXRlZFtwbGFuZV0ueDsKPiA+ICsJCSp5 ICs9IGludGVsX2ZiLT5yb3RhdGVkW3BsYW5lXS55Owo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJKngg Kz0gaW50ZWxfZmItPm5vcm1hbFtwbGFuZV0ueDsKPiA+ICsJCSp5ICs9IGludGVsX2ZiLT5ub3Jt YWxbcGxhbmVdLnk7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICAgICogQWRqdXN0 IHRoZSB0aWxlIG9mZnNldCBieSBtb3ZpbmcgdGhlIGRpZmZlcmVuY2UgaW50bwo+ID4gICAgKiB0 aGUgeC95IG9mZnNldHMuCj4gPiAgICAqCj4gPiBAQCAtMjUwMCwxOCArMjUwOSwyNCBAQCBzdGF0 aWMgdTMyIGludGVsX2FkanVzdF90aWxlX29mZnNldChpbnQgKngsIGludCAqeSwKPiA+ICAgICog SW4gdGhlIDkwLzI3MCByb3RhdGVkIGNhc2UsIHggYW5kIHkgYXJlIGFzc3VtZWQKPiA+ICAgICog dG8gYmUgYWxyZWFkeSByb3RhdGVkIHRvIG1hdGNoIHRoZSByb3RhdGVkIEdUVCB2aWV3LCBhbmQK PiA+ICAgICogcGl0Y2ggaXMgdGhlIHRpbGVfaGVpZ2h0IGFsaWduZWQgZnJhbWVidWZmZXIgaGVp Z2h0Lgo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gY29tcHV0aW5n IHRoZSBkZXJpdmVkIGluZm9ybWF0aW9uCj4gPiArICogdW5kZXIgaW50ZWxfZnJhbWVidWZmZXIs IHNvIHVzaW5nIGFueSBvZiB0aGF0IGluZm9ybWF0aW9uCj4gPiArICogaGVyZSBpcyBub3QgYWxs b3dlZC4gQW55dGhpbmcgdW5kZXIgZHJtX2ZyYW1lYnVmZmVyIGNhbiBiZQo+ID4gKyAqIHVzZWQu IFRoaXMgaXMgd2h5IHRoZSB1c2VyIGhhcyB0byBwYXNzIGluIHRoZSBwaXRjaCBzaW5jZSBpdAo+ ID4gKyAqIGlzIHNwZWNpZmllZCBpbiB0aGUgcm90YXRlZCBvcmllbnRhdGlvbi4KPiA+ICAgICov Cj4gPiAtdTMyIGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gPiAt CQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiA+ IC0JCQkgICAgICB1bnNpZ25lZCBpbnQgcGl0Y2gsCj4gPiAtCQkJICAgICAgdW5zaWduZWQgaW50 IHJvdGF0aW9uKQo+ID4gK3N0YXRpYyB1MzIgX2ludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoY29u c3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCQkgICAgICBpbnQg KngsIGludCAqeSwKPiA+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsIGludCBwbGFuZSwKPiA+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAo+ID4gKwkJ CQkgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24sCj4gPiArCQkJCSAgICAgIHUzMiBhbGlnbm1l bnQpCj4gPiAgIHsKPiA+IC0JY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShmYi0+ZGV2KTsKPiA+ICAgCXVpbnQ2NF90IGZiX21vZGlmaWVyID0gZmItPm1v ZGlmaWVyW3BsYW5lXTsKPiA+ICAgCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5l X2NwcChmYi0+cGl4ZWxfZm9ybWF0LCBwbGFuZSk7Cj4gPiAtCXUzMiBvZmZzZXQsIG9mZnNldF9h bGlnbmVkLCBhbGlnbm1lbnQ7Cj4gPiArCXUzMiBvZmZzZXQsIG9mZnNldF9hbGlnbmVkOwo+ID4g ICAKPiA+IC0JYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiX21v ZGlmaWVyKTsKPiA+ICAgCWlmIChhbGlnbm1lbnQpCj4gPiAgIAkJYWxpZ25tZW50LS07Cj4gPiAg IAo+ID4gQEAgLTI1NTMsNiArMjU2OCwxNDEgQEAgdTMyIGludGVsX2NvbXB1dGVfdGlsZV9vZmZz ZXQoaW50ICp4LCBpbnQgKnksCj4gPiAgIAlyZXR1cm4gb2Zmc2V0X2FsaWduZWQ7Cj4gPiAgIH0K PiA+ICAgCj4gPiArdTMyIGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoaW50ICp4LCBpbnQgKnks Cj4gPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFu ZSwKPiA+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgcGl0Y2gsCj4gPiArCQkJICAgICAgdW5zaWdu ZWQgaW50IHJvdGF0aW9uKQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShmYi0+ZGV2KTsKPiA+ICsJdTMyIGFsaWdubWVudCA9IGlu dGVsX3N1cmZfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbcGxhbmVdKTsKPiA+ICsK PiA+ICsJcmV0dXJuIF9pbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KGRldl9wcml2LCB4LCB5LCBm YiwgcGxhbmUsIHBpdGNoLAo+ID4gKwkJCQkJICByb3RhdGlvbiwgYWxpZ25tZW50KTsKPiA+ICt9 Cj4gPiArCj4gPiArLyogQ29udmVydCB0aGUgZmItPm9mZnNldFtdIGxpbmVhciBvZmZzZXQgaW50 byB4L3kgb2Zmc2V0cyAqLyBzdGF0aWMKPiA+ICt2b2lkIGludGVsX2ZiX29mZnNldF90b194eShp bnQgKngsIGludCAqeSwKPiA+ICsJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IHBsYW5lKSB7Cj4gPiArCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5l X2NwcChmYi0+cGl4ZWxfZm9ybWF0LCBwbGFuZSk7Cj4gPiArCXVuc2lnbmVkIGludCBwaXRjaCA9 IGZiLT5waXRjaGVzW3BsYW5lXTsKPiA+ICsJdTMyIGxpbmVhcl9vZmZzZXQgPSBmYi0+b2Zmc2V0 c1twbGFuZV07Cj4gPiArCj4gPiArCSp5ID0gbGluZWFyX29mZnNldCAvIHBpdGNoOwo+ID4gKwkq eCA9IGxpbmVhcl9vZmZzZXQgJSBwaXRjaCAvIGNwcDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGludAo+ID4gK2ludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gPiArCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiA+ICt7Cj4gPiAr CXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZl cihmYik7Cj4gPiArCXN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbyA9ICZpbnRl bF9mYi0+cm90X2luZm87Cj4gPiArCXUzMiBndHRfb2Zmc2V0X3JvdGF0ZWQgPSAwOwo+ID4gKwl1 bnNpZ25lZCBpbnQgbWF4X3NpemUgPSAwOwo+ID4gKwl1aW50MzJfdCBmb3JtYXQgPSBmYi0+cGl4 ZWxfZm9ybWF0Owo+ID4gKwlpbnQgaSwgbnVtX3BsYW5lcyA9IGRybV9mb3JtYXRfbnVtX3BsYW5l cyhmb3JtYXQpOwo+ID4gKwl1bnNpZ25lZCBpbnQgdGlsZV9zaXplID0gaW50ZWxfdGlsZV9zaXpl KGRldl9wcml2KTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykg ewo+ID4gKwkJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7Cj4gPiArCQl1bnNpZ25lZCBpbnQg Y3BwLCBzaXplOwo+ID4gKwkJdTMyIG9mZnNldDsKPiA+ICsJCWludCB4LCB5Owo+ID4gKwo+ID4g KwkJY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZm9ybWF0LCBpKTsKPiA+ICsJCXdpZHRoID0g ZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChmYi0+d2lkdGgsIGZvcm1hdCwgaSk7Cj4gPiArCQloZWln aHQgPSBkcm1fZm9ybWF0X3BsYW5lX2hlaWdodChmYi0+aGVpZ2h0LCBmb3JtYXQsIGkpOwo+ID4g Kwo+ID4gKwkJaW50ZWxfZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIsIGkpOwo+ID4gKwo+ID4g KwkJLyoKPiA+ICsJCSAqIEZpcnN0IHBpeGVsIG9mIHRoZSBmcmFtZWJ1ZmZlciBmcm9tCj4gPiAr CQkgKiB0aGUgc3RhcnQgb2YgdGhlIG5vcm1hbCBndHQgbWFwcGluZy4KPiA+ICsJCSAqLwo+ID4g KwkJaW50ZWxfZmItPm5vcm1hbFtpXS54ID0geDsKPiA+ICsJCWludGVsX2ZiLT5ub3JtYWxbaV0u eSA9IHk7Cj4gPiArCj4gPiArCQlvZmZzZXQgPSBfaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldChk ZXZfcHJpdiwgJngsICZ5LAo+ID4gKwkJCQkJCSAgICBmYiwgMCwgZmItPnBpdGNoZXNbaV0sCj4g PiArCQkJCQkJICAgIEJJVChEUk1fUk9UQVRFXzApLCB0aWxlX3NpemUpOwo+ID4gKwkJb2Zmc2V0 IC89IHRpbGVfc2l6ZTsKPiA+ICsKPiA+ICsJCWlmIChmYi0+bW9kaWZpZXJbaV0gIT0gRFJNX0ZP Uk1BVF9NT0RfTk9ORSkgewo+ID4gKwkJCXVuc2lnbmVkIGludCB0aWxlX3dpZHRoLCB0aWxlX2hl aWdodDsKPiA+ICsJCQl1bnNpZ25lZCBpbnQgcGl0Y2hfdGlsZXM7Cj4gPiArCQkJc3RydWN0IGRy bV9yZWN0IHI7Cj4gPiArCj4gPiArCQkJaW50ZWxfdGlsZV9kaW1zKGRldl9wcml2LCAmdGlsZV93 aWR0aCwgJnRpbGVfaGVpZ2h0LAo+ID4gKwkJCQkJZmItPm1vZGlmaWVyW2ldLCBjcHApOwo+ID4g Kwo+ID4gKwkJCXJvdF9pbmZvLT5wbGFuZVtpXS5vZmZzZXQgPSBvZmZzZXQ7Cj4gPiArCQkJcm90 X2luZm8tPnBsYW5lW2ldLnN0cmlkZSA9IERJVl9ST1VORF9VUChmYi0+cGl0Y2hlc1tpXSwgdGls ZV93aWR0aCAqIGNwcCk7Cj4gPiArCQkJcm90X2luZm8tPnBsYW5lW2ldLndpZHRoID0gRElWX1JP VU5EX1VQKHggKyB3aWR0aCwgdGlsZV93aWR0aCk7Cj4gPiArCQkJcm90X2luZm8tPnBsYW5lW2ld LmhlaWdodCA9IERJVl9ST1VORF9VUCh5ICsgaGVpZ2h0LCB0aWxlX2hlaWdodCk7Cj4gPiArCj4g PiArCQkJaW50ZWxfZmItPnJvdGF0ZWRbaV0ucGl0Y2ggPQo+ID4gKwkJCQlyb3RfaW5mby0+cGxh bmVbaV0uaGVpZ2h0ICogdGlsZV9oZWlnaHQ7Cj4gPiArCj4gPiArCQkJLyogaG93IG1hbnkgdGls ZXMgZG9lcyB0aGlzIHBsYW5lIG5lZWQgKi8KPiA+ICsJCQlzaXplID0gcm90X2luZm8tPnBsYW5l W2ldLnN0cmlkZSAqIHJvdF9pbmZvLT5wbGFuZVtpXS5oZWlnaHQ7Cj4gPiArCQkJLyoKPiA+ICsJ CQkgKiBJZiB0aGUgcGxhbmUgaXNuJ3QgaG9yaXpvbnRhbGx5IHRpbGUgYWxpZ25lZCwKPiA+ICsJ CQkgKiB3ZSBuZWVkIG9uZSBtb3JlIHRpbGUuCj4gPiArCQkJICovCj4gPiArCQkJaWYgKHggIT0g MCkKPiA+ICsJCQkJc2l6ZSsrOwo+ID4gKwo+ID4gKwkJCS8qIHJvdGF0ZSB0aGUgeC95IG9mZnNl dHMgdG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICovCj4gPiArCQkJci54MSA9IHg7Cj4gPiArCQkJci55 MSA9IHk7Cj4gPiArCQkJci54MiA9IHggKyB3aWR0aDsKPiA+ICsJCQlyLnkyID0geSArIGhlaWdo dDsKPiA+ICsJCQlkcm1fcmVjdF9yb3RhdGUoJnIsCj4gPiArCQkJCQlyb3RfaW5mby0+cGxhbmVb aV0ud2lkdGggKiB0aWxlX3dpZHRoLAo+ID4gKwkJCQkJcm90X2luZm8tPnBsYW5lW2ldLmhlaWdo dCAqIHRpbGVfaGVpZ2h0LAo+ID4gKwkJCQkJQklUKERSTV9ST1RBVEVfMjcwKSk7Cj4gPiArCQkJ eCA9IHIueDE7Cj4gPiArCQkJeSA9IHIueTE7Cj4gPiArCj4gPiArCQkJLyogcm90YXRlIHRoZSB0 aWxlIGRpbWVuc2lvbnMgdG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICovCj4gPiArCQkJcGl0Y2hfdGls ZXMgPSBpbnRlbF9mYi0+cm90YXRlZFtpXS5waXRjaCAvIHRpbGVfaGVpZ2h0Owo+ID4gKwkJCXN3 YXAodGlsZV93aWR0aCwgdGlsZV9oZWlnaHQpOwo+ID4gKwo+ID4gKwkJCS8qCj4gPiArCQkJICog V2Ugb25seSBrZWVwIHRoZSB4L3kgb2Zmc2V0cywgc28gcHVzaCBhbGwgb2YgdGhlCj4gPiArCQkJ ICogZ3R0IG9mZnNldCBpbnRvIHRoZSB4L3kgb2Zmc2V0cy4KPiA+ICsJCQkgKi8KPiA+ICsJCQlp bnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoJngsICZ5LCB0aWxlX3NpemUsCj4gPiArCQkJCQkJIHRp bGVfd2lkdGgsIHRpbGVfaGVpZ2h0LCBwaXRjaF90aWxlcywKPiA+ICsJCQkJCQkgZ3R0X29mZnNl dF9yb3RhdGVkICogdGlsZV9zaXplLCAwKTsKPiA+ICsKPiA+ICsJCQlndHRfb2Zmc2V0X3JvdGF0 ZWQgKz0gcm90X2luZm8tPnBsYW5lW2ldLndpZHRoICoKPiA+ICtyb3RfaW5mby0+cGxhbmVbaV0u aGVpZ2h0Owo+ID4gKwo+ID4gKwkJCS8qCj4gPiArCQkJICogRmlyc3QgcGl4ZWwgb2YgdGhlIGZy YW1lYnVmZmVyIGZyb20KPiA+ICsJCQkgKiB0aGUgc3RhcnQgb2YgdGhlIHJvdGF0ZWQgZ3R0IG1h cHBpbmcuCj4gPiArCQkJICovCj4gPiArCQkJaW50ZWxfZmItPnJvdGF0ZWRbaV0ueCA9IHg7Cj4g PiArCQkJaW50ZWxfZmItPnJvdGF0ZWRbaV0ueSA9IHk7Cj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJ CXNpemUgPSBESVZfUk9VTkRfVVAoKHkgKyBoZWlnaHQpICogZmItPnBpdGNoZXNbaV0gKwo+ID4g KwkJCQkJICAgIHggKiBjcHAsIHRpbGVfc2l6ZSk7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQkvKiBo b3cgbWFueSB0aWxlcyBpbiB0b3RhbCBuZWVkZWQgaW4gdGhlIGJvICovCj4gPiArCQltYXhfc2l6 ZSA9IG1heChtYXhfc2l6ZSwgb2Zmc2V0ICsgc2l6ZSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYg KG1heF9zaXplICogdGlsZV9zaXplID4gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpLT5vYmotPmJh c2Uuc2l6ZSkgewo+ID4gKwkJRFJNX0RFQlVHKCJmYiB0b28gYmlnIGZvciBibyAobmVlZCAldSBi eXRlcywgaGF2ZSAlenUgYnl0ZXMpXG4iLAo+ID4gKwkJCSAgbWF4X3NpemUgKiB0aWxlX3NpemUs IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKS0+b2JqLT5iYXNlLnNpemUpOwo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g ICBzdGF0aWMgaW50IGk5eHhfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0KSAgewo+ID4gICAJ c3dpdGNoIChmb3JtYXQpIHsKPiA+IEBAIC0yNzg3LDcgKzI5MzcsNiBAQCBzdGF0aWMgdm9pZCBp OXh4X3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCj4gPiAg IAl1MzIgZHNwY250cjsKPiA+ICAgCWk5MTVfcmVnX3QgcmVnID0gRFNQQ05UUihwbGFuZSk7Cj4g PiAgIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsK PiA+IC0JaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDAp Owo+ID4gICAJaW50IHggPSBwbGFuZV9zdGF0ZS0+c3JjLngxID4+IDE2Owo+ID4gICAJaW50IHkg PSBwbGFuZV9zdGF0ZS0+c3JjLnkxID4+IDE2Owo+ID4gICAKPiA+IEBAIC0yODQ3LDMwICsyOTk2 LDI1IEBAIHN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9w bGFuZSAqcHJpbWFyeSwKPiA+ICAgCWlmIChJU19HNFgoZGV2KSkKPiA+ICAgCQlkc3BjbnRyIHw9 IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKPiA+ICAgCj4gPiAtCWxpbmVhcl9vZmZz ZXQgPSB5ICogZmItPnBpdGNoZXNbMF0gKyB4ICogY3BwOwo+ID4gKwlpbnRlbF9hZGRfZmJfb2Zm c2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gPiAgIAo+ID4gLQlpZiAoSU5URUxfSU5G TyhkZXYpLT5nZW4gPj0gNCkgewo+ID4gKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkK PiA+ICAgCQlpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldCA9Cj4gPiAgIAkJCWludGVsX2NvbXB1 dGVfdGlsZV9vZmZzZXQoJngsICZ5LCBmYiwgMCwKPiA+ICAgCQkJCQkJICBmYi0+cGl0Y2hlc1sw XSwgcm90YXRpb24pOwo+ID4gLQkJbGluZWFyX29mZnNldCAtPSBpbnRlbF9jcnRjLT5kc3BhZGRy X29mZnNldDsKPiA+IC0JfSBlbHNlIHsKPiA+IC0JCWludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0 ID0gbGluZWFyX29mZnNldDsKPiA+IC0JfQo+ID4gICAKPiA+ICAgCWlmIChyb3RhdGlvbiA9PSBC SVQoRFJNX1JPVEFURV8xODApKSB7Cj4gPiAgIAkJZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRF XzE4MDsKPiA+ICAgCj4gPiAgIAkJeCArPSAoY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdyAtIDEpOwo+ ID4gICAJCXkgKz0gKGNydGNfc3RhdGUtPnBpcGVfc3JjX2ggLSAxKTsKPiA+IC0KPiA+IC0JCS8q IEZpbmRpbmcgdGhlIGxhc3QgcGl4ZWwgb2YgdGhlIGxhc3QgbGluZSBvZiB0aGUgZGlzcGxheQo+ ID4gLQkJZGF0YSBhbmQgYWRkaW5nIHRvIGxpbmVhcl9vZmZzZXQqLwo+ID4gLQkJbGluZWFyX29m ZnNldCArPQo+ID4gLQkJCShjcnRjX3N0YXRlLT5waXBlX3NyY19oIC0gMSkgKiBmYi0+cGl0Y2hl c1swXSArCj4gPiAtCQkJKGNydGNfc3RhdGUtPnBpcGVfc3JjX3cgLSAxKSAqIGNwcDsKPiA+ICAg CX0KPiA+ICAgCj4gPiArCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwg eSwgZmIsIDApOwo+ID4gKwo+ID4gKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0KQo+ID4g KwkJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQgPSBsaW5lYXJfb2Zmc2V0Owo+ID4gKwo+IGJh c2ljIHF1ZXN0aW9uLCB0aGUgb2xkIGNvZGUgaGFkIGxpbmVhcl9vZmZzZXQgY2FsY3VsYXRlZCBm aXJzdCBhbmQgdGhlbiAKPiB4ICAmIHkKPiB3ZXJlIHVwZGF0ZWQgaWYgcm90YXRpb24gd2FzIHNl dC4gdGhlIG5ldyBjb2RlIGxvb2tzIGJldHRlciBzaW5jZSB3ZSBoYW5kbGUKPiBpdCBhZnRlciBy b3RhdGlvbiBidXQgd2h5IG5vdCBkbyB0aGUgc2FtZSBmb3IgZ2VuID49IDQgdG9vID8gaS5lIG1v dmUgdGhlCj4gaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCBhZnRlciBjb25zaWRlcmluZyByb3Rh dGlvbiA/CgpUaGUgaGFyZHdhcmUgZ2V0cyB1cHNldCBpdCB5b3UgYXNrIGl0IHRvIHdhbGsgYmFj a3dhcmRzIHBhc3QgRFNQU1VSRiwKc28gRFNQU1VSRiBtdXN0IGJlIGJlbG93IHRoZSBlbnRpcmUg c2Nhbm5lZCBvdXQgc3VyZmFjZS4gSGVuY2Ugd2UgbXVzdApjb21wdXRlIGl0IGJlZm9yZSBjb25z aWRlcmluZyAxODAgZGVncmVlIHJvdGF0aW9uLiBTaG91bGQgcHJvYmFibHkgYWRkCmEgY29tbWVu dCBzb21ld2hlcmUgdG8gZXhwbGFpbiB0aGF0Li4uCgpIbW0uIE5vdyB0aGF0IEkgdGhpbmsgYWJv dXQgdGhpcywgdGhlIG9sZCBjb2RlIHRyaWVkIHRvIHBsYXkgdHJpY2tzIHRvCmNvbXB1dGUgYm90 aCB0aGUgbGluZWFyIGFuZCB0aWxlZCBvZmZzZXRzIHByb2JhYmx5IHNvIHRoYXQgd2UgY291bGQK c3dpdGNoIHRpbGluZyBtb2RlcyB3aXRoIENTIGZsaXBzIHdpdGhvdXQgcmVwcm9ncmFtbWluZyB0 aGUgbGluZWFyL3gveQpvZmZzZXRzLiBCdXQgdGhhdCBjYW4ndCBhY3R1YWxseSB3b3JrIGNvcnJl Y3RseSB1bmxlc3MgdGhlIHRpbGUgb2Zmc2V0CmlzIHRpbGUgcm93IGFsaWduZWQsIHdoaWNoIGl0 IG1pZ2h0IG5vdCBiZS4gU28geWVhaCwgSSB0aGluayB0aGUKImNoYW5nZSB0aWxpbmcgbW9kZSB3 aXRoIENTIGZsaXBzIiB0aGluZyB3YXMgYnJva2VuIGFscmVhZHksIGFuZCBzdGlsbAp3aWxsIGJl IGFmdGVyIHRoaXMgcGF0Y2guCgo+IAo+IHJlZ2FyZHMsCj4gU2l2YWt1bWFyCj4gPiAgIAlpbnRl bF9jcnRjLT5hZGp1c3RlZF94ID0geDsKPiA+ICAgCWludGVsX2NydGMtPmFkanVzdGVkX3kgPSB5 Owo+ID4gICAKPiA+IEBAIC0yODc5LDcgKzMwMjMsOCBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0 ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCj4gPiAgIAlJOTE1X1dS SVRFKERTUFNUUklERShwbGFuZSksIGZiLT5waXRjaGVzWzBdKTsKPiA+ICAgCWlmIChJTlRFTF9J TkZPKGRldiktPmdlbiA+PSA0KSB7Cj4gPiAgIAkJSTkxNV9XUklURShEU1BTVVJGKHBsYW5lKSwK PiA+IC0JCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArIGludGVsX2NydGMtPmRz cGFkZHJfb2Zmc2V0KTsKPiA+ICsJCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlv bikgKwo+ID4gKwkJCSAgIGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKPiA+ICAgCQlJOTE1 X1dSSVRFKERTUFRJTEVPRkYocGxhbmUpLCAoeSA8PCAxNikgfCB4KTsKPiA+ICAgCQlJOTE1X1dS SVRFKERTUExJTk9GRihwbGFuZSksIGxpbmVhcl9vZmZzZXQpOwo+ID4gICAJfSBlbHNlCj4gPiBA QCAtMjkxNyw3ICszMDYyLDYgQEAgc3RhdGljIHZvaWQgaXJvbmxha2VfdXBkYXRlX3ByaW1hcnlf cGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKPiA+ICAgCXUzMiBkc3BjbnRyOwo+ID4g ICAJaTkxNV9yZWdfdCByZWcgPSBEU1BDTlRSKHBsYW5lKTsKPiA+ICAgCXVuc2lnbmVkIGludCBy b3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+ID4gLQlpbnQgY3BwID0gZHJt X2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gPiAgIAlpbnQgeCA9IHBs YW5lX3N0YXRlLT5zcmMueDEgPj4gMTY7Cj4gPiAgIAlpbnQgeSA9IHBsYW5lX3N0YXRlLT5zcmMu eTEgPj4gMTY7Cj4gPiAgIAo+ID4gQEAgLTI5NTYsMjYgKzMxMDAsMjMgQEAgc3RhdGljIHZvaWQg aXJvbmxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwK PiA+ICAgCWlmICghSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSkKPiA+ICAg CQlkc3BjbnRyIHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKPiA+ICAgCj4gPiAt CWxpbmVhcl9vZmZzZXQgPSB5ICogZmItPnBpdGNoZXNbMF0gKyB4ICogY3BwOwo+ID4gKwlpbnRl bF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gPiArCj4gPiAgIAlp bnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldCA9Cj4gPiAgIAkJaW50ZWxfY29tcHV0ZV90aWxlX29m ZnNldCgmeCwgJnksIGZiLCAwLAo+ID4gICAJCQkJCSAgZmItPnBpdGNoZXNbMF0sIHJvdGF0aW9u KTsKPiA+IC0JbGluZWFyX29mZnNldCAtPSBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldDsKPiA+ ICsKPiA+ICAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4gPiAgIAkJ ZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsKPiA+ICAgCj4gPiAgIAkJaWYgKCFJU19I QVNXRUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKSB7Cj4gPiAgIAkJCXggKz0gKGNydGNf c3RhdGUtPnBpcGVfc3JjX3cgLSAxKTsKPiA+ICAgCQkJeSArPSAoY3J0Y19zdGF0ZS0+cGlwZV9z cmNfaCAtIDEpOwo+ID4gLQo+ID4gLQkJCS8qIEZpbmRpbmcgdGhlIGxhc3QgcGl4ZWwgb2YgdGhl IGxhc3QgbGluZSBvZiB0aGUgZGlzcGxheQo+ID4gLQkJCWRhdGEgYW5kIGFkZGluZyB0byBsaW5l YXJfb2Zmc2V0Ki8KPiA+IC0JCQlsaW5lYXJfb2Zmc2V0ICs9Cj4gPiAtCQkJCShjcnRjX3N0YXRl LT5waXBlX3NyY19oIC0gMSkgKiBmYi0+cGl0Y2hlc1swXSArCj4gPiAtCQkJCShjcnRjX3N0YXRl LT5waXBlX3NyY193IC0gMSkgKiBjcHA7Cj4gPiAgIAkJfQo+ID4gICAJfQo+ID4gICAKPiA+ICsJ bGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4gPiAr Cj4gPiAgIAlpbnRlbF9jcnRjLT5hZGp1c3RlZF94ID0geDsKPiA+ICAgCWludGVsX2NydGMtPmFk anVzdGVkX3kgPSB5Owo+ID4gICAKPiA+IEBAIC0yOTgzLDcgKzMxMjQsOCBAQCBzdGF0aWMgdm9p ZCBpcm9ubGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5 LAo+ID4gICAKPiA+ICAgCUk5MTVfV1JJVEUoRFNQU1RSSURFKHBsYW5lKSwgZmItPnBpdGNoZXNb MF0pOwo+ID4gICAJSTkxNV9XUklURShEU1BTVVJGKHBsYW5lKSwKPiA+IC0JCSAgIGk5MTVfZ2Vt X29ial9nZ3R0X29mZnNldChvYmopICsgaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQpOwo+ID4g KwkJICAgaW50ZWxfZmJfZ3R0X29mZnNldChmYiwgcm90YXRpb24pICsKPiA+ICsJCSAgIGludGVs X2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKPiA+ICAgCWlmIChJU19IQVNXRUxMKGRldikgfHwgSVNf QlJPQURXRUxMKGRldikpIHsKPiA+ICAgCQlJOTE1X1dSSVRFKERTUE9GRlNFVChwbGFuZSksICh5 IDw8IDE2KSB8IHgpOwo+ID4gICAJfSBlbHNlIHsKPiA+IEBAIC0zMDA1LDMyICszMTQ3LDE1IEBA IHUzMiBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiA+ICAgCX0KPiA+ICAgfQo+ID4gICAKPiA+IC11MzIgaW50ZWxfcGxh bmVfb2JqX29mZnNldChzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lLAo+ID4gLQkJCSAg IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gPiAtCQkJICAgdW5zaWduZWQgaW50 IHBsYW5lKQo+ID4gK3UzMiBpbnRlbF9mYl9ndHRfb2Zmc2V0KHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLAo+ID4gKwkJCXVuc2lnbmVkIGludCByb3RhdGlvbikKPiA+ICAgewo+ID4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKGZiKTsKPiA+ICAgCXN0 cnVjdCBpOTE1X2dndHRfdmlldyB2aWV3Owo+ID4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiA+ IC0JdTY0IG9mZnNldDsKPiA+IC0KPiA+IC0JaW50ZWxfZmlsbF9mYl9nZ3R0X3ZpZXcoJnZpZXcs IGludGVsX3BsYW5lLT5iYXNlLnN0YXRlLT5mYiwKPiA+IC0JCQkJaW50ZWxfcGxhbmUtPmJhc2Uu c3RhdGUtPnJvdGF0aW9uKTsKPiA+IC0KPiA+IC0Jdm1hID0gaTkxNV9nZW1fb2JqX3RvX2dndHRf dmlldyhvYmosICZ2aWV3KTsKPiA+IC0JaWYgKFdBUk4oIXZtYSwgImdndHQgdm1hIGZvciBkaXNw bGF5IG9iamVjdCBub3QgZm91bmQhICh2aWV3PSV1KVxuIiwKPiA+IC0JCXZpZXcudHlwZSkpCj4g PiAtCQlyZXR1cm4gLTE7Cj4gPiAgIAo+ID4gLQlvZmZzZXQgPSB2bWEtPm5vZGUuc3RhcnQ7Cj4g PiAtCj4gPiAtCWlmIChwbGFuZSA9PSAxKSB7Cj4gPiAtCQlvZmZzZXQgKz0gdm1hLT5nZ3R0X3Zp ZXcucGFyYW1zLnJvdGF0ZWQudXZfc3RhcnRfcGFnZSAqCj4gPiAtCQkJICBQQUdFX1NJWkU7Cj4g PiAtCX0KPiA+IC0KPiA+IC0JV0FSTl9PTih1cHBlcl8zMl9iaXRzKG9mZnNldCkpOwo+ID4gKwlp bnRlbF9maWxsX2ZiX2dndHRfdmlldygmdmlldywgZmIsIHJvdGF0aW9uKTsKPiA+ICAgCj4gPiAt CXJldHVybiBsb3dlcl8zMl9iaXRzKG9mZnNldCk7Cj4gPiArCXJldHVybiBpOTE1X2dlbV9vYmpf Z2d0dF9vZmZzZXRfdmlldyhvYmosICZ2aWV3KTsKPiBzaG91bGRudCB3ZSByZXR1cm4gbG93ZXJf MzJfYml0cyAoaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0X3ZpZXcob2JqLCAKPiAmdmlldykpID8g IHNpbmNlIGl0IHJldHVybnMgNjRiaXQgZGF0YQoKUG9zc2libHkuIEkgdGhpbmsgdGhlIGxvd2Vy XzMyX2JpdHMoKSBzdHVmZiB3YXNuJ3QgaGVyZSB3aGVuIEkgbWFkZSB0aGUKcHJldmlvdXMgdmVy c2lvbihzKSBvZiB0aGlzIHBhdGNoLCBhbmQgSSBqdXN0IG5lZ2xlY3RlZCB0byB1cGRhdGUgdGhp cwpwYXJ0IHdoZW4gcmViYXNpbmcuIEkgZ3Vlc3Mgd2UnbGwgd2FudCB0byBrZWVwIHRoZSBXQVJO IHRvby4KCj4gPiAgIH0KPiA+ICAgCj4gPiAgIHN0YXRpYyB2b2lkIHNrbF9kZXRhY2hfc2NhbGVy KHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLCBpbnQgaWQpIEBAIC0zMTQ5LDEyICszMjc0 LDkgQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiA+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPiAgIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9 IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiA+ICAgCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gPiAtCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ID4gICAJaW50IHBpcGUg PSBpbnRlbF9jcnRjLT5waXBlOwo+ID4gICAJdTMyIHBsYW5lX2N0bCwgc3RyaWRlX2Rpdiwgc3Ry aWRlOwo+ID4gLQl1MzIgdGlsZV9oZWlnaHQsIHBsYW5lX29mZnNldCwgcGxhbmVfc2l6ZTsKPiA+ ICAgCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+ ID4gLQlpbnQgeF9vZmZzZXQsIHlfb2Zmc2V0Owo+ID4gICAJdTMyIHN1cmZfYWRkcjsKPiA+ICAg CWludCBzY2FsZXJfaWQgPSBwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkOwo+ID4gICAJaW50IHNyY194 ID0gcGxhbmVfc3RhdGUtPnNyYy54MSA+PiAxNjsgQEAgLTMxNzUsMzYgKzMyOTcsNDkgQEAgc3Rh dGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPiA+ICAgCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfUExBTkVfR0FNTUFfRElTQUJMRTsK PiA+ICAgCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0aW9uKHJvdGF0aW9uKTsKPiA+ ICAgCj4gPiAtCXN0cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2 LCBmYi0+bW9kaWZpZXJbMF0sCj4gPiAtCQkJCQkgICAgICAgZmItPnBpeGVsX2Zvcm1hdCk7Cj4g PiAtCXN1cmZfYWRkciA9IGludGVsX3BsYW5lX29ial9vZmZzZXQodG9faW50ZWxfcGxhbmUocGxh bmUpLCBvYmosIDApOwo+ID4gLQo+ID4gLQlXQVJOX09OKGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+c3JjKSA9PSAwKTsKPiA+IC0KPiA+ICAgCWlmIChpbnRlbF9yb3RhdGlvbl85MF9vcl8y NzAocm90YXRpb24pKSB7Cj4gPiArCQlzdHJ1Y3QgZHJtX3JlY3QgciA9IHsKPiA+ICsJCQkueDEg PSBzcmNfeCwKPiA+ICsJCQkueDIgPSBzcmNfeCArIHNyY193LAo+ID4gKwkJCS55MSA9IHNyY195 LAo+ID4gKwkJCS55MiA9IHNyY195ICsgc3JjX2gsCj4gPiArCQl9Owo+ID4gICAJCWludCBjcHAg PSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiA+ICsJCXN0cnVj dCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7 Cj4gPiArCj4gPiArCQkvKiBSb3RhdGUgc3JjIGNvb3JkaW5hdGVzIHRvIG1hdGNoIHJvdGF0ZWQg R1RUIHZpZXcgKi8KPiA+ICsJCWRybV9yZWN0X3JvdGF0ZSgmciwgZmItPndpZHRoLCBmYi0+aGVp Z2h0LCBCSVQoRFJNX1JPVEFURV8yNzApKTsKPiA+ICAgCj4gPiAtCQkvKiBzdHJpZGUgPSBTdXJm YWNlIGhlaWdodCBpbiB0aWxlcyAqLwo+ID4gLQkJdGlsZV9oZWlnaHQgPSBpbnRlbF90aWxlX2hl aWdodChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLCBjcHApOwo+ID4gLQkJc3RyaWRlID0gRElW X1JPVU5EX1VQKGZiLT5oZWlnaHQsIHRpbGVfaGVpZ2h0KTsKPiA+IC0JCXhfb2Zmc2V0ID0gc3Ry aWRlICogdGlsZV9oZWlnaHQgLSBzcmNfeSAtIHNyY19oOwo+ID4gLQkJeV9vZmZzZXQgPSBzcmNf eDsKPiA+IC0JCXBsYW5lX3NpemUgPSAoc3JjX3cgLSAxKSA8PCAxNiB8IChzcmNfaCAtIDEpOwo+ ID4gKwkJc3JjX3ggPSByLngxOwo+ID4gKwkJc3JjX3kgPSByLnkxOwo+ID4gKwkJc3JjX3cgPSBk cm1fcmVjdF93aWR0aCgmcik7Cj4gPiArCQlzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcik7Cj4g PiArCj4gPiArCQlzdHJpZGVfZGl2ID0gaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5t b2RpZmllclswXSwgY3BwKTsKPiA+ICsJCXN0cmlkZSA9IGludGVsX2ZiLT5yb3RhdGVkWzBdLnBp dGNoOwo+ID4gICAJfSBlbHNlIHsKPiA+IC0JCXN0cmlkZSA9IGZiLT5waXRjaGVzWzBdIC8gc3Ry aWRlX2RpdjsKPiA+IC0JCXhfb2Zmc2V0ID0gc3JjX3g7Cj4gPiAtCQl5X29mZnNldCA9IHNyY195 Owo+ID4gLQkJcGxhbmVfc2l6ZSA9IChzcmNfaCAtIDEpIDw8IDE2IHwgKHNyY193IC0gMSk7Cj4g PiArCQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChkZXZfcHJpdiwgZmIt Pm1vZGlmaWVyWzBdLAo+ID4gKwkJCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKPiA+ICsJ CXN0cmlkZSA9IGZiLT5waXRjaGVzWzBdOwo+ID4gICAJfQo+ID4gLQlwbGFuZV9vZmZzZXQgPSB5 X29mZnNldCA8PCAxNiB8IHhfb2Zmc2V0Owo+ID4gICAKPiA+IC0JaW50ZWxfY3J0Yy0+YWRqdXN0 ZWRfeCA9IHhfb2Zmc2V0Owo+ID4gLQlpbnRlbF9jcnRjLT5hZGp1c3RlZF95ID0geV9vZmZzZXQ7 Cj4gPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNyY195LCBmYiwgMCwgcm90YXRp b24pOwo+ID4gKwlzdXJmX2FkZHIgPSBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZzcmNfeCwg JnNyY195LCBmYiwgMCwKPiA+ICsJCQkJCSAgICAgIHN0cmlkZSwgcm90YXRpb24pOwo+ID4gKwo+ ID4gKwkvKiBTaXplcyBhcmUgMCBiYXNlZCAqLwo+ID4gKwlzcmNfdy0tOwo+ID4gKwlzcmNfaC0t Owo+ID4gKwlkc3Rfdy0tOwo+ID4gKwlkc3RfaC0tOwo+ID4gKwo+ID4gKwlpbnRlbF9jcnRjLT5h ZGp1c3RlZF94ID0gc3JjX3g7Cj4gPiArCWludGVsX2NydGMtPmFkanVzdGVkX3kgPSBzcmNfeTsK PiA+ICAgCj4gPiAgIAlJOTE1X1dSSVRFKFBMQU5FX0NUTChwaXBlLCAwKSwgcGxhbmVfY3RsKTsK PiA+IC0JSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgMCksIHBsYW5lX29mZnNldCk7Cj4g PiAtCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCAwKSwgcGxhbmVfc2l6ZSk7Cj4gPiAtCUk5 MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIDApLCBzdHJpZGUpOwo+ID4gKwlJOTE1X1dSSVRF KFBMQU5FX09GRlNFVChwaXBlLCAwKSwgKHNyY195IDw8IDE2KSB8IHNyY194KTsKPiA+ICsJSTkx NV9XUklURShQTEFORV9TVFJJREUocGlwZSwgMCksIHN0cmlkZSAvIHN0cmlkZV9kaXYpOwo+ID4g KwlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgMCksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7 Cj4gPiAgIAo+ID4gICAJaWYgKHNjYWxlcl9pZCA+PSAwKSB7Cj4gPiAgIAkJdWludDMyX3QgcHNf Y3RybCA9IDA7Cj4gPiBAQCAtMzIyMSw3ICszMzU2LDggQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91 cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICAgCQlJOTE1 X1dSSVRFKFBMQU5FX1BPUyhwaXBlLCAwKSwgKGRzdF95IDw8IDE2KSB8IGRzdF94KTsKPiA+ICAg CX0KPiA+ICAgCj4gPiAtCUk5MTVfV1JJVEUoUExBTkVfU1VSRihwaXBlLCAwKSwgc3VyZl9hZGRy KTsKPiA+ICsJSTkxNV9XUklURShQTEFORV9TVVJGKHBpcGUsIDApLAo+ID4gKwkJICAgaW50ZWxf ZmJfZ3R0X29mZnNldChmYiwgcm90YXRpb24pICsgc3VyZl9hZGRyKTsKPiA+ICAgCj4gPiAgIAlQ T1NUSU5HX1JFQUQoUExBTkVfU1VSRihwaXBlLCAwKSk7Cj4gPiAgIH0KPiA+IEBAIC0xMTQwMCw3 ICsxMTUzNiw3IEBAIHN0YXRpYyB2b2lkIHNrbF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGMsCj4gPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwo+ID4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBp bnRlbF9jcnRjLT5iYXNlLnByaW1hcnktPmZiOwo+ID4gICAJY29uc3QgZW51bSBwaXBlIHBpcGUg PSBpbnRlbF9jcnRjLT5waXBlOwo+ID4gLQl1MzIgY3RsLCBzdHJpZGUsIHRpbGVfaGVpZ2h0Owo+ ID4gKwl1MzIgY3RsLCBzdHJpZGU7Cj4gPiAgIAo+ID4gICAJY3RsID0gSTkxNV9SRUFEKFBMQU5F X0NUTChwaXBlLCAwKSk7Cj4gPiAgIAljdGwgJj0gflBMQU5FX0NUTF9USUxFRF9NQVNLOwo+ID4g QEAgLTExNDI1LDkgKzExNTYxLDExIEBAIHN0YXRpYyB2b2lkIHNrbF9kb19tbWlvX2ZsaXAoc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCj4gPiAgIAkgKiBsaW5lYXIgYnVmZmVycyBvciBp biBudW1iZXIgb2YgdGlsZXMgZm9yIHRpbGVkIGJ1ZmZlcnMuCj4gPiAgIAkgKi8KPiA+ICAgCWlm IChpbnRlbF9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7Cj4gPiAtCQkvKiBzdHJpZGUg PSBTdXJmYWNlIGhlaWdodCBpbiB0aWxlcyAqLwo+ID4gLQkJdGlsZV9oZWlnaHQgPSBpbnRlbF90 aWxlX2hlaWdodChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLCAwKTsKPiA+IC0JCXN0cmlkZSA9 IERJVl9ST1VORF9VUChmYi0+aGVpZ2h0LCB0aWxlX2hlaWdodCk7Cj4gPiArCQlpbnQgY3BwID0g ZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gPiArCQlzdHJ1Y3Qg aW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwo+ ID4gKwo+ID4gKwkJc3RyaWRlID0gaW50ZWxfZmItPnJvdGF0ZWRbMF0ucGl0Y2ggLwo+ID4gKwkJ CWludGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sIGNwcCk7Cj4gPiAg IAl9IGVsc2Ugewo+ID4gICAJCXN0cmlkZSA9IGZiLT5waXRjaGVzWzBdIC8KPiA+ICAgCQkJaW50 ZWxfZmJfc3RyaWRlX2FsaWdubWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLCBAQCAtMTE3 NTMsOCArMTE4OTEsNyBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfcGFnZV9mbGlwKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiA+ICAgCWlmIChyZXQpCj4gPiAgIAkJZ290byBjbGVhbnVwX3BlbmRp bmc7Cj4gPiAgIAo+ID4gLQl3b3JrLT5ndHRfb2Zmc2V0ID0gaW50ZWxfcGxhbmVfb2JqX29mZnNl dCh0b19pbnRlbF9wbGFuZShwcmltYXJ5KSwKPiA+IC0JCQkJCQkgIG9iaiwgMCk7Cj4gPiArCXdv cmstPmd0dF9vZmZzZXQgPSBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCBwcmltYXJ5LT5zdGF0ZS0+ cm90YXRpb24pOwo+ID4gICAJd29yay0+Z3R0X29mZnNldCArPSBpbnRlbF9jcnRjLT5kc3BhZGRy X29mZnNldDsKPiA+ICAgCj4gPiAgIAlpZiAobW1pb19mbGlwKSB7Cj4gPiBAQCAtMTQ3NTksNyAr MTQ4OTYsNiBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiA+ICAgCQkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK PiA+ICAgewo+ID4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShkZXYpOwo+ID4gLQl1bnNpZ25lZCBpbnQgYWxpZ25lZF9oZWlnaHQ7Cj4gPiAgIAlpbnQgcmV0 Owo+ID4gICAJdTMyIHBpdGNoX2xpbWl0LCBzdHJpZGVfYWxpZ25tZW50Owo+ID4gICAKPiA+IEBA IC0xNDg4NCwxNyArMTUwMjAsMTIgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgIAlpZiAobW9kZV9jbWQtPm9mZnNldHNbMF0g IT0gMCkKPiA+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICAgCj4gPiAtCWFsaWduZWRfaGVpZ2h0 ID0gaW50ZWxfZmJfYWxpZ25faGVpZ2h0KGRldiwgbW9kZV9jbWQtPmhlaWdodCwKPiA+IC0JCQkJ CSAgICAgICBtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0LAo+ID4gLQkJCQkJICAgICAgIG1vZGVfY21k LT5tb2RpZmllclswXSk7Cj4gPiAtCS8qIEZJWE1FIGRybSBoZWxwZXIgZm9yIHNpemUgY2hlY2tz IChlc3BlY2lhbGx5IHBsYW5hciBmb3JtYXRzKT8gKi8KPiA+IC0JaWYgKG9iai0+YmFzZS5zaXpl IDwgYWxpZ25lZF9oZWlnaHQgKiBtb2RlX2NtZC0+cGl0Y2hlc1swXSkKPiA+IC0JCXJldHVybiAt RUlOVkFMOwo+ID4gLQo+ID4gICAJZHJtX2hlbHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KCZpbnRl bF9mYi0+YmFzZSwgbW9kZV9jbWQpOwo+ID4gICAJaW50ZWxfZmItPm9iaiA9IG9iajsKPiA+ICAg Cj4gPiAtCWludGVsX2ZpbGxfZmJfaW5mbyhkZXZfcHJpdiwgJmludGVsX2ZiLT5iYXNlKTsKPiA+ ICsJcmV0ID0gaW50ZWxfZmlsbF9mYl9pbmZvKGRldl9wcml2LCAmaW50ZWxfZmItPmJhc2UpOwo+ ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICAgCj4gPiAgIAlyZXQgPSBkcm1f ZnJhbWVidWZmZXJfaW5pdChkZXYsICZpbnRlbF9mYi0+YmFzZSwgJmludGVsX2ZiX2Z1bmNzKTsK PiA+ICAgCWlmIChyZXQpIHsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiBpbmRleCA2 NzRhZmExZjlmOTcuLjg0YTJhM2YxMDliYiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAo+ID4gQEAgLTExOSw2ICsxMTksMTYgQEAgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyIHsK PiA+ICAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKPiA+ICAgCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7Cj4gPiAgIAlzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyByb3Rf aW5mbzsKPiA+ICsKPiA+ICsJLyogZm9yIGVhY2ggcGxhbmUgaW4gdGhlIG5vcm1hbCBHVFQgdmll dyAqLwo+ID4gKwlzdHJ1Y3Qgewo+ID4gKwkJdW5zaWduZWQgaW50IHgsIHk7Cj4gPiArCX0gbm9y bWFsWzJdOwo+ID4gKwkvKiBmb3IgZWFjaCBwbGFuZSBpbiB0aGUgcm90YXRlZCBHVFQgdmlldyAq Lwo+ID4gKwlzdHJ1Y3Qgewo+ID4gKwkJdW5zaWduZWQgaW50IHgsIHk7Cj4gPiArCQl1bnNpZ25l ZCBpbnQgcGl0Y2g7IC8qIHBpeGVscyAqLwo+ID4gKwl9IHJvdGF0ZWRbMl07Cj4gPiAgIH07Cj4g PiAgIAo+ID4gICBzdHJ1Y3QgaW50ZWxfZmJkZXYgewo+ID4gQEAgLTEwNjEsNiArMTA3MSwxMSBA QCB2b2lkIGk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKPiA+ICAgCj4gPiAgIC8qIGludGVsX2Rpc3BsYXkuYyAqLwo+ID4gICBl eHRlcm4gY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRlbF9wbGFuZV9mdW5jczsKPiA+ ICt1bnNpZ25lZCBpbnQgaW50ZWxfZmJfeHlfdG9fbGluZWFyKGludCB4LCBpbnQgeSwKPiA+ICsJ CQkJICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSk7IHZvaWQK PiA+ICtpbnRlbF9hZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAqeSwKPiA+ICsJCQkgIGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gPiArCQkJICB1bnNpZ25l ZCBpbnQgcm90YXRpb24pOwo+ID4gICB1bnNpZ25lZCBpbnQgaW50ZWxfcm90YXRpb25faW5mb19z aXplKGNvbnN0IHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbyk7ICBib29sIGlu dGVsX2hhc19wZW5kaW5nX2ZiX3VucGluKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOyAgaW50IGlu dGVsX3BjaF9yYXdjbGsoc3RydWN0IGRybV9kZXZpY2UgKmRldik7IEBAIC0xMjE3LDkgKzEyMzIs NyBAQCB2b2lkIGludGVsX21vZGVfZnJvbV9waXBlX2NvbmZpZyhzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwgIGludCBza2xfdXBkYXRlX3NjYWxlcl9jcnRjKHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKTsgIGludCBza2xfbWF4X3NjYWxlKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4gPiAgIAo+ID4g LXUzMiBpbnRlbF9wbGFuZV9vYmpfb2Zmc2V0KHN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxh bmUsCj4gPiAtCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiA+IC0JCQkg ICB1bnNpZ25lZCBpbnQgcGxhbmUpOwo+ID4gK3UzMiBpbnRlbF9mYl9ndHRfb2Zmc2V0KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLCB1bnNpZ25lZCBpbnQKPiA+ICtyb3RhdGlvbik7Cj4gPiAg IAo+ID4gICB1MzIgc2tsX3BsYW5lX2N0bF9mb3JtYXQodWludDMyX3QgcGl4ZWxfZm9ybWF0KTsK PiA+ICAgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5nKHVpbnQ2NF90IGZiX21vZGlmaWVyKTsgZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPiA+IGluZGV4IDg4MjE1MzM1NjFiMS4uODYxNzYz MDQxNTVkIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRl LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gPiBAQCAt MTg2LDE1ICsxODYsMTMgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1f cGxhbmUsCj4gPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+ID4gICAJc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSA9IHRvX2lu dGVsX3BsYW5lKGRybV9wbGFuZSk7Cj4gPiAgIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9 IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ID4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqID0gaW50ZWxfZmJfb2JqKGZiKTsKPiA+ICsJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICpp bnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiA+ICAgCWNvbnN0IGludCBwaXBl ID0gaW50ZWxfcGxhbmUtPnBpcGU7Cj4gPiAgIAljb25zdCBpbnQgcGxhbmUgPSBpbnRlbF9wbGFu ZS0+cGxhbmUgKyAxOwo+ID4gICAJdTMyIHBsYW5lX2N0bCwgc3RyaWRlX2Rpdiwgc3RyaWRlOwo+ ID4gICAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFu ZV9zdGF0ZS0+Y2tleTsKPiA+ICAgCXUzMiBzdXJmX2FkZHI7Cj4gPiAtCXUzMiB0aWxlX2hlaWdo dCwgcGxhbmVfb2Zmc2V0LCBwbGFuZV9zaXplOwo+ID4gICAJdW5zaWduZWQgaW50IHJvdGF0aW9u ID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gPiAtCWludCB4X29mZnNldCwgeV9vZmZz ZXQ7Cj4gPiAgIAlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPmRzdC54MTsKPiA+ICAgCWludCBj cnRjX3kgPSBwbGFuZV9zdGF0ZS0+ZHN0LnkxOwo+ID4gICAJdWludDMyX3QgY3J0Y193ID0gZHJt X3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5kc3QpOwo+ID4gQEAgLTIxNSwxNSArMjEzLDYgQEAg c2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsCj4gPiAgIAo+ID4g ICAJcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfcm90YXRpb24ocm90YXRpb24pOwo+ID4gICAK PiA+IC0Jc3RyaWRlX2RpdiA9IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoZGV2X3ByaXYsIGZi LT5tb2RpZmllclswXSwKPiA+IC0JCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKPiA+IC0K PiA+IC0JLyogU2l6ZXMgYXJlIDAgYmFzZWQgKi8KPiA+IC0Jc3JjX3ctLTsKPiA+IC0Jc3JjX2gt LTsKPiA+IC0JY3J0Y193LS07Cj4gPiAtCWNydGNfaC0tOwo+ID4gLQo+ID4gICAJaWYgKGtleS0+ ZmxhZ3MpIHsKPiA+ICAgCQlJOTE1X1dSSVRFKFBMQU5FX0tFWVZBTChwaXBlLCBwbGFuZSksIGtl eS0+bWluX3ZhbHVlKTsKPiA+ICAgCQlJOTE1X1dSSVRFKFBMQU5FX0tFWU1BWChwaXBlLCBwbGFu ZSksIGtleS0+bWF4X3ZhbHVlKTsgQEAgLTIzNSwyOCArMjI0LDQ0IEBAIHNrbF91cGRhdGVfcGxh bmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLAo+ID4gICAJZWxzZSBpZiAoa2V5LT5mbGFn cyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSkKPiA+ICAgCQlwbGFuZV9jdGwgfD0gUExBTkVf Q1RMX0tFWV9FTkFCTEVfU09VUkNFOwo+ID4gICAKPiA+IC0Jc3VyZl9hZGRyID0gaW50ZWxfcGxh bmVfb2JqX29mZnNldChpbnRlbF9wbGFuZSwgb2JqLCAwKTsKPiA+IC0KPiA+ICAgCWlmIChpbnRl bF9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7Cj4gPiAtCQlpbnQgY3BwID0gZHJtX2Zv cm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gPiAtCj4gPiAtCQkvKiBzdHJp ZGU6IFN1cmZhY2UgaGVpZ2h0IGluIHRpbGVzICovCj4gPiAtCQl0aWxlX2hlaWdodCA9IGludGVs X3RpbGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sIGNwcCk7Cj4gPiAtCQlzdHJp ZGUgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCwgdGlsZV9oZWlnaHQpOwo+ID4gLQkJcGxhbmVf c2l6ZSA9IChzcmNfdyA8PCAxNikgfCBzcmNfaDsKPiA+IC0JCXhfb2Zmc2V0ID0gc3RyaWRlICog dGlsZV9oZWlnaHQgLSB5IC0gKHNyY19oICsgMSk7Cj4gPiAtCQl5X29mZnNldCA9IHg7Cj4gPiAr CQlzdHJ1Y3QgZHJtX3JlY3QgciA9IHsKPiA+ICsJCQkueDEgPSB4LAo+ID4gKwkJCS54MiA9IHgg KyBzcmNfdywKPiA+ICsJCQkueTEgPSB5LAo+ID4gKwkJCS55MiA9IHkgKyBzcmNfaCwKPiA+ICsJ CX07Cj4gPiArCQl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBp eGVsX2Zvcm1hdCwgMCk7Cj4gPiArCj4gPiArCQkvKiBSb3RhdGUgc3JjIGNvb3JkaW5hdGVzIHRv IG1hdGNoIHJvdGF0ZWQgR1RUIHZpZXcgKi8KPiA+ICsJCWRybV9yZWN0X3JvdGF0ZSgmciwgZmIt PndpZHRoLCBmYi0+aGVpZ2h0LCBCSVQoRFJNX1JPVEFURV8yNzApKTsKPiA+ICsKPiA+ICsJCXgg PSByLngxOwo+ID4gKwkJeSA9IHIueTE7Cj4gPiArCQlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZy KTsKPiA+ICsJCXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZyKTsKPiA+ICsKPiA+ICsJCXN0cmlk ZV9kaXYgPSBpbnRlbF90aWxlX2hlaWdodChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLCBjcHAp Owo+ID4gKwkJc3RyaWRlID0gaW50ZWxfZmItPnJvdGF0ZWRbMF0ucGl0Y2g7Cj4gPiAgIAl9IGVs c2Ugewo+ID4gLQkJc3RyaWRlID0gZmItPnBpdGNoZXNbMF0gLyBzdHJpZGVfZGl2Owo+ID4gLQkJ cGxhbmVfc2l6ZSA9IChzcmNfaCA8PCAxNikgfCBzcmNfdzsKPiA+IC0JCXhfb2Zmc2V0ID0geDsK PiA+IC0JCXlfb2Zmc2V0ID0geTsKPiA+ICsJCXN0cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVf YWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sCj4gPiArCQkJCQkJICAgICAgIGZi LT5waXhlbF9mb3JtYXQpOwo+ID4gKwkJc3RyaWRlID0gZmItPnBpdGNoZXNbMF07Cj4gPiAgIAl9 Cj4gPiAtCXBsYW5lX29mZnNldCA9IHlfb2Zmc2V0IDw8IDE2IHwgeF9vZmZzZXQ7Cj4gPiAgIAo+ ID4gLQlJOTE1X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZSksIHBsYW5lX29mZnNldCk7 Cj4gPiAtCUk5MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIHBsYW5lKSwgc3RyaWRlKTsKPiA+ IC0JSTkxNV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lKSwgcGxhbmVfc2l6ZSk7Cj4gPiAr CWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9uKTsKPiA+ICsJc3Vy Zl9hZGRyID0gaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ID4gKwkJ CQkJICAgICAgc3RyaWRlLCByb3RhdGlvbik7Cj4gPiArCj4gPiArCS8qIFNpemVzIGFyZSAwIGJh c2VkICovCj4gPiArCXNyY193LS07Cj4gPiArCXNyY19oLS07Cj4gPiArCWNydGNfdy0tOwo+ID4g KwljcnRjX2gtLTsKPiA+ICsKPiA+ICsJSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgcGxh bmUpLCAoeSA8PCAxNikgfCB4KTsKPiA+ICsJSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwg cGxhbmUpLCBzdHJpZGUgLyBzdHJpZGVfZGl2KTsKPiA+ICsJSTkxNV9XUklURShQTEFORV9TSVpF KHBpcGUsIHBsYW5lKSwgKHNyY19oIDw8IDE2KSB8IHNyY193KTsKPiA+ICAgCj4gPiAgIAkvKiBw cm9ncmFtIHBsYW5lIHNjYWxlciAqLwo+ID4gICAJaWYgKHBsYW5lX3N0YXRlLT5zY2FsZXJfaWQg Pj0gMCkgewo+ID4gQEAgLTI3OCw3ICsyODMsOCBAQCBza2xfdXBkYXRlX3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKmRybV9wbGFuZSwKPiA+ICAgCX0KPiA+ICAgCj4gPiAgIAlJOTE1X1dSSVRFKFBM QU5FX0NUTChwaXBlLCBwbGFuZSksIHBsYW5lX2N0bCk7Cj4gPiAtCUk5MTVfV1JJVEUoUExBTkVf U1VSRihwaXBlLCBwbGFuZSksIHN1cmZfYWRkcik7Cj4gPiArCUk5MTVfV1JJVEUoUExBTkVfU1VS RihwaXBlLCBwbGFuZSksCj4gPiArCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlv bikgKyBzdXJmX2FkZHIpOwo+ID4gICAJUE9TVElOR19SRUFEKFBMQU5FX1NVUkYocGlwZSwgcGxh bmUpKTsgIH0KPiA+ICAgCj4gPiBAQCAtMzUxLDcgKzM1Nyw2IEBAIHZsdl91cGRhdGVfcGxhbmUo c3RydWN0IGRybV9wbGFuZSAqZHBsYW5lLAo+ID4gICAJdTMyIHNwcmN0bDsKPiA+ICAgCXUzMiBz cHJzdXJmX29mZnNldCwgbGluZWFyX29mZnNldDsKPiA+ICAgCXVuc2lnbmVkIGludCByb3RhdGlv biA9IGRwbGFuZS0+c3RhdGUtPnJvdGF0aW9uOwo+ID4gLQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9w bGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gPiAgIAljb25zdCBzdHJ1Y3QgZHJtX2lu dGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0gJnBsYW5lX3N0YXRlLT5ja2V5Owo+ID4gICAJaW50 IGNydGNfeCA9IHBsYW5lX3N0YXRlLT5kc3QueDE7Cj4gPiAgIAlpbnQgY3J0Y195ID0gcGxhbmVf c3RhdGUtPmRzdC55MTsKPiA+IEBAIC00MjIsMTkgKzQyNywxOSBAQCB2bHZfdXBkYXRlX3BsYW5l KHN0cnVjdCBkcm1fcGxhbmUgKmRwbGFuZSwKPiA+ICAgCWNydGNfdy0tOwo+ID4gICAJY3J0Y19o LS07Cj4gPiAgIAo+ID4gLQlsaW5lYXJfb2Zmc2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsgeCAq IGNwcDsKPiA+ICsJaW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBmYiwgMCwgcm90YXRpb24p Owo+ID4gICAJc3Byc3VyZl9vZmZzZXQgPSBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAm eSwgZmIsIDAsCj4gPiAgIAkJCQkJCSAgIGZiLT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gPiAt CWxpbmVhcl9vZmZzZXQgLT0gc3Byc3VyZl9vZmZzZXQ7Cj4gPiAgIAo+ID4gICAJaWYgKHJvdGF0 aW9uID09IEJJVChEUk1fUk9UQVRFXzE4MCkpIHsKPiA+ICAgCQlzcHJjdGwgfD0gU1BfUk9UQVRF XzE4MDsKPiA+ICAgCj4gPiAgIAkJeCArPSBzcmNfdzsKPiA+ICAgCQl5ICs9IHNyY19oOwo+ID4g LQkJbGluZWFyX29mZnNldCArPSBzcmNfaCAqIGZiLT5waXRjaGVzWzBdICsgc3JjX3cgKiBjcHA7 Cj4gPiAgIAl9Cj4gPiAgIAo+ID4gKwlsaW5lYXJfb2Zmc2V0ID0gaW50ZWxfZmJfeHlfdG9fbGlu ZWFyKHgsIHksIGZiLCAwKTsKPiA+ICsKPiA+ICAgCWlmIChrZXktPmZsYWdzKSB7Cj4gPiAgIAkJ STkxNV9XUklURShTUEtFWU1JTlZBTChwaXBlLCBwbGFuZSksIGtleS0+bWluX3ZhbHVlKTsKPiA+ ICAgCQlJOTE1X1dSSVRFKFNQS0VZTUFYVkFMKHBpcGUsIHBsYW5lKSwga2V5LT5tYXhfdmFsdWUp OyBAQCAtNDU5LDggKzQ2NCw4IEBAIHZsdl91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAq ZHBsYW5lLAo+ID4gICAKPiA+ICAgCUk5MTVfV1JJVEUoU1BTSVpFKHBpcGUsIHBsYW5lKSwgKGNy dGNfaCA8PCAxNikgfCBjcnRjX3cpOwo+ID4gICAJSTkxNV9XUklURShTUENOVFIocGlwZSwgcGxh bmUpLCBzcHJjdGwpOwo+ID4gLQlJOTE1X1dSSVRFKFNQU1VSRihwaXBlLCBwbGFuZSksIGk5MTVf Z2VtX29ial9nZ3R0X29mZnNldChvYmopICsKPiA+IC0JCSAgIHNwcnN1cmZfb2Zmc2V0KTsKPiA+ ICsJSTkxNV9XUklURShTUFNVUkYocGlwZSwgcGxhbmUpLAo+ID4gKwkJICAgaW50ZWxfZmJfZ3R0 X29mZnNldChmYiwgcm90YXRpb24pICsgc3Byc3VyZl9vZmZzZXQpOwo+ID4gICAJUE9TVElOR19S RUFEKFNQU1VSRihwaXBlLCBwbGFuZSkpOwo+ID4gICB9Cj4gPiAgIAo+ID4gQEAgLTQ5Myw3ICs0 OTgsNiBAQCBpdmJfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gICAJ dTMyIHNwcmN0bCwgc3Byc2NhbGUgPSAwOwo+ID4gICAJdTMyIHNwcnN1cmZfb2Zmc2V0LCBsaW5l YXJfb2Zmc2V0Owo+ID4gICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJh c2Uucm90YXRpb247Cj4gPiAtCWludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4 ZWxfZm9ybWF0LCAwKTsKPiA+ICAgCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9y a2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7Cj4gPiAgIAlpbnQgY3J0Y194ID0gcGxhbmVf c3RhdGUtPmRzdC54MTsKPiA+ICAgCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+ZHN0LnkxOwo+ ID4gQEAgLTU1NSwxMCArNTU5LDkgQEAgaXZiX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiA+ICAgCWlmIChjcnRjX3cgIT0gc3JjX3cgfHwgY3J0Y19oICE9IHNyY19oKQo+ ID4gICAJCXNwcnNjYWxlID0gU1BSSVRFX1NDQUxFX0VOQUJMRSB8IChzcmNfdyA8PCAxNikgfCBz cmNfaDsKPiA+ICAgCj4gPiAtCWxpbmVhcl9vZmZzZXQgPSB5ICogZmItPnBpdGNoZXNbMF0gKyB4 ICogY3BwOwo+ID4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlv bik7Cj4gPiAgIAlzcHJzdXJmX29mZnNldCA9IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngs ICZ5LCBmYiwgMCwKPiA+ICAgCQkJCQkJICAgZmItPnBpdGNoZXNbMF0sIHJvdGF0aW9uKTsKPiA+ IC0JbGluZWFyX29mZnNldCAtPSBzcHJzdXJmX29mZnNldDsKPiA+ICAgCj4gPiAgIAlpZiAocm90 YXRpb24gPT0gQklUKERSTV9ST1RBVEVfMTgwKSkgewo+ID4gICAJCXNwcmN0bCB8PSBTUFJJVEVf Uk9UQVRFXzE4MDsKPiA+IEBAIC01NjcsMTAgKzU3MCwxMSBAQCBpdmJfdXBkYXRlX3BsYW5lKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gICAJCWlmICghSVNfSEFTV0VMTChkZXYpICYmICFJ U19CUk9BRFdFTEwoZGV2KSkgewo+ID4gICAJCQl4ICs9IHNyY193Owo+ID4gICAJCQl5ICs9IHNy Y19oOwo+ID4gLQkJCWxpbmVhcl9vZmZzZXQgKz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1swXSArIHNy Y193ICogY3BwOwo+ID4gICAJCX0KPiA+ICAgCX0KPiA+ICAgCj4gPiArCWxpbmVhcl9vZmZzZXQg PSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwgeSwgZmIsIDApOwo+ID4gKwo+ID4gICAJaWYgKGtl eS0+ZmxhZ3MpIHsKPiA+ICAgCQlJOTE1X1dSSVRFKFNQUktFWVZBTChwaXBlKSwga2V5LT5taW5f dmFsdWUpOwo+ID4gICAJCUk5MTVfV1JJVEUoU1BSS0VZTUFYKHBpcGUpLCBrZXktPm1heF92YWx1 ZSk7IEBAIC01OTksNyArNjAzLDcgQEAgaXZiX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiA+ICAgCQlJOTE1X1dSSVRFKFNQUlNDQUxFKHBpcGUpLCBzcHJzY2FsZSk7Cj4g PiAgIAlJOTE1X1dSSVRFKFNQUkNUTChwaXBlKSwgc3ByY3RsKTsKPiA+ICAgCUk5MTVfV1JJVEUo U1BSU1VSRihwaXBlKSwKPiA+IC0JCSAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsg c3Byc3VyZl9vZmZzZXQpOwo+ID4gKwkJICAgaW50ZWxfZmJfZ3R0X29mZnNldChmYiwgcm90YXRp b24pICsgc3Byc3VyZl9vZmZzZXQpOwo+ID4gICAJUE9TVElOR19SRUFEKFNQUlNVUkYocGlwZSkp Owo+ID4gICB9Cj4gPiAgIAo+ID4gQEAgLTYzNCw3ICs2MzgsNiBAQCBpbGtfdXBkYXRlX3BsYW5l KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gICAJdTMyIGR2c2NudHIsIGR2c3NjYWxlOwo+ ID4gICAJdTMyIGR2c3N1cmZfb2Zmc2V0LCBsaW5lYXJfb2Zmc2V0Owo+ID4gICAJdW5zaWduZWQg aW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gPiAtCWludCBjcHAg PSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiA+ICAgCWNvbnN0 IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNr ZXk7Cj4gPiAgIAlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPmRzdC54MTsKPiA+ICAgCWludCBj cnRjX3kgPSBwbGFuZV9zdGF0ZS0+ZHN0LnkxOwo+ID4gQEAgLTY5MiwxOSArNjk1LDE5IEBAIGls a191cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiAgIAlpZiAoY3J0Y193 ICE9IHNyY193IHx8IGNydGNfaCAhPSBzcmNfaCkKPiA+ICAgCQlkdnNzY2FsZSA9IERWU19TQ0FM RV9FTkFCTEUgfCAoc3JjX3cgPDwgMTYpIHwgc3JjX2g7Cj4gPiAgIAo+ID4gLQlsaW5lYXJfb2Zm c2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsgeCAqIGNwcDsKPiA+ICsJaW50ZWxfYWRkX2ZiX29m ZnNldHMoJngsICZ5LCBmYiwgMCwgcm90YXRpb24pOwo+ID4gICAJZHZzc3VyZl9vZmZzZXQgPSBp bnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4gPiAgIAkJCQkJCSAgIGZi LT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gPiAtCWxpbmVhcl9vZmZzZXQgLT0gZHZzc3VyZl9v ZmZzZXQ7Cj4gPiAgIAo+ID4gICAJaWYgKHJvdGF0aW9uID09IEJJVChEUk1fUk9UQVRFXzE4MCkp IHsKPiA+ICAgCQlkdnNjbnRyIHw9IERWU19ST1RBVEVfMTgwOwo+ID4gICAKPiA+ICAgCQl4ICs9 IHNyY193Owo+ID4gICAJCXkgKz0gc3JjX2g7Cj4gPiAtCQlsaW5lYXJfb2Zmc2V0ICs9IHNyY19o ICogZmItPnBpdGNoZXNbMF0gKyBzcmNfdyAqIGNwcDsKPiA+ICAgCX0KPiA+ICAgCj4gPiArCWxp bmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwgeSwgZmIsIDApOwo+ID4gKwo+ ID4gICAJaWYgKGtleS0+ZmxhZ3MpIHsKPiA+ICAgCQlJOTE1X1dSSVRFKERWU0tFWVZBTChwaXBl KSwga2V5LT5taW5fdmFsdWUpOwo+ID4gICAJCUk5MTVfV1JJVEUoRFZTS0VZTUFYKHBpcGUpLCBr ZXktPm1heF92YWx1ZSk7IEBAIC03MjgsNyArNzMxLDcgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICAgCUk5MTVfV1JJVEUoRFZTU0NBTEUocGlwZSksIGR2 c3NjYWxlKTsKPiA+ICAgCUk5MTVfV1JJVEUoRFZTQ05UUihwaXBlKSwgZHZzY250cik7Cj4gPiAg IAlJOTE1X1dSSVRFKERWU1NVUkYocGlwZSksCj4gPiAtCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9v ZmZzZXQob2JqKSArIGR2c3N1cmZfb2Zmc2V0KTsKPiA+ICsJCSAgIGludGVsX2ZiX2d0dF9vZmZz ZXQoZmIsIHJvdGF0aW9uKSArIGR2c3N1cmZfb2Zmc2V0KTsKPiA+ICAgCVBPU1RJTkdfUkVBRChE VlNTVVJGKHBpcGUpKTsKPiA+ICAgfQo+ID4gICAKPiA+IC0tCj4gPiAyLjQuMTAKPiA+Cj4gPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdAo+ID4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK Ci0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=