From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Thulasimani, Sivakumar" Subject: Re: FW: [PATCH v4 10/21] drm/i915: Rewrite fb rotation GTT handling Date: Mon, 2 May 2016 23:01:19 +0530 Message-ID: <57278EE7.6060107@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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id DA56C6E617 for ; Mon, 2 May 2016 17:31:25 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Mukherjee, Indranil" , "intel-gfx@lists.freedesktop.org" , =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= List-Id: intel-gfx@lists.freedesktop.org c29ycnkgZm9yIHRoZSBodWdlIGRlbGF5IGluIHJldmlld2luZyB0aGlzIHNlcmllcywgaGF2ZSBq dXN0IHN0YXJ0ZWQgb24gCnRoaXMgYW5kIGNvdWxkIHJldmlldyBvbmx5IHRoZSBmaXJzdApwYXRj aCBmb3IgdG9kYXksIGhvcGVmdWxseSBpJ2xsIGNvbnRpbnVlIG9uIHRoaXMgZXZlcnlkYXkgdGhp cyB3ZWVrIDopLiAgCnJlcGx5aW5nIGFzIGEgZGV0YWNoZWQgdGhyZWFkIHNpbmNlCmkgbG9zdCB0 aGUgbWFpbHMgYXMgcGFydCBvcmlnaW5hbCBzZXJpZXMgc28gcGxlYXNlIGZvcmdpdmUgZm9yIHRo ZSAKZGV0YWNoZWQgcmVwbHkgZm9yIHJldmlldy4KCk9uIDUvMi8yMDE2IDM6MjAgUE0sIE11a2hl cmplZSwgSW5kcmFuaWwgd3JvdGU6Cj4KPiBSZWdhcmRzLAo+IEluZHJhbmlsCj4KPiAtLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IEludGVsLWdmeCBbbWFpbHRvOmludGVsLWdmeC1i b3VuY2VzQGxpc3RzLmZyZWVkZXNrdG9wLm9yZ10gT24gQmVoYWxmIE9mIHZpbGxlLnN5cmphbGFA bGludXguaW50ZWwuY29tCj4gU2VudDogVHVlc2RheSwgRmVicnVhcnkgMTYsIDIwMTYgMjoyNSBB TQo+IFRvOiBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gU3ViamVjdDogW0ludGVs LWdmeF0gW1BBVENIIHY0IDEwLzIxXSBkcm0vaTkxNTogUmV3cml0ZSBmYiByb3RhdGlvbiBHVFQg aGFuZGxpbmcKPgo+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20+Cj4KPiBSZWRvIHRoZSBmYiByb3RhdGlvbiBoYW5kbGluZyBpbiBvcmRlciB0bzoK PiAtIGVsaW1pbmF0ZSB0aGUgTlYxMiBzcGVjaWFsIGNhc2luZwo+IC0gaGFuZGxlIGZiLT5vZmZz ZXRzW10gcHJvcGVybHkKPiAtIG1ha2UgdGhlIHJvdGF0aW9uIGhhbmRsaW5nIHJlYXNpZXIgZm9y IHRoZSBwbGFuZSBjb2RlCnR5cG8gImVhc2llciIKPiBUbyBhY2hpZXZlIHRoZXNlIGdvYWxzIHdl IHJlZHVjZSBpbnRlbF9yb3RhdGlvbl9pbmZvIHRvIG9ubHkgY29udGFpbiAoZm9yIGVhY2ggcGxh bmUpIHRoZSByb3RhdGVkIHZpZXcgd2lkdGgsaGVpZ2h0LHN0cmlkZSBpbiB0aWxlIHVuaXRzLCBh bmQgdGhlIHBhZ2Ugb2Zmc2V0IGludG8gdGhlIG9iamVjdCB3aGVyZSB0aGUgcGxhbmUgc3RhcnRz LiBFYWNoIHBsYW5lIGlzIGhhbmRsZWQgZXhhY3RseSB0aGUgc2FtZSB3YXksIG5vIHNwZWNpYWwg Y2FzaW5nIGZvciBOVjEyIG9yIG90aGVyIGZvcm1hdHMuIFdlIHRoZW4gc3RvcmUgdGhlIGNvbXB1 dGVkIHJvdGF0aW9uX2luZm8gdW5kZXIgaW50ZWxfZnJhbWVidWZmZXIgc28gdGhhdCB3ZSBkb24n dCBoYXZlIHRvIHJlY29tcHV0ZSBpdCBhZ2Fpbi4KPgo+IFRvIGhhbmRsZSBmYi0+b2Zmc2V0c1td IHdlIHRyZWF0IHRoZW0gYXMgYSBsaW5lYXIgb2Zmc2V0cyBhbmQgY29udmVydCB0aGVtIHRvIHgv eSBvZmZzZXRzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSByZWxldmFudCBHVFQgbWFwcGluZyAoZWl0 aGVyIG5vcm1hbCBvciByb3RhdGVkKS4gV2Ugc3RvcmUgdGhlIHgveSBvZmZzZXRzIHVuZGVyIGlu dGVsX2ZyYW1lYnVmZmVyLCBhbmQgZm9yIHNvbWUgZXh0cmEgY29udmVuaWVuY2Ugd2UgYWxzbyBz dG9yZSB0aGUgcm90YXRlZCBwaXRjaCAoaWUuCj4gdGlsZSBhbGlnbmVkIHBsYW5lIGhlaWdodCku IFNvIGZvciBlYWNoIHBsYW5lIHdlIGhhdmUgdGhlIG5vcm1hbCB4L3kgb2Zmc2V0cywgcm90YXRl ZCB4L3kgb2Zmc2V0cywgYW5kIHRoZSByb3RhdGVkIHBpdGNoLiBUaGUgbm9ybWFsIHBpdGNoIGlz IGF2YWlsYWJsZSBhbHJlYWR5IGluIGZiLT5waXRjaGVzW10uCj4KPiBXaGlsZSB3ZSdyZSBnYXRo ZXJpbmcgdXAgYWxsIHRoYXQgZXh0cmEgaW5mb3JtYXRpb24sIHdlIGNhbiBhbHNvIGVhc2lseSBj b21wdXRlIHRoZSBzdG9yYWdlIHJlcXVpcmVtZW50cyBmb3IgdGhlIGZyYW1lYnVmZmVyLCBzbyB0 aGF0IHdlIGNhbiBjaGVjayB0aGF0IHRoZSBvYmplY3QgaXMgYmlnIGVub3VnaCB0byBob2xkIGl0 Lgo+Cj4gV2hlbiBpdCBjb21lcyB0aW1lIHRvIGRlYWwgd2l0aCB0aGUgcGxhbmUgc291cmNlIGNv b3JkaW5hdGVzLCB3ZSBmaXJzdCByb3RhdGUgdGhlIGNsaXBwZWQgc3JjIGNvb3JkaW5hdGVzIHRv IG1hdGNoIHRoZSByZWxldmFudCBHVFQgdmlldyBvcmllbnRhdGlvbiwgdGhlbiBhZGQgdG8gdGhl bSB0aGUgZmIgeC95IG9mZnNldHMuIE5leHQgd2UgY29tcHV0ZSB0aGUgYWxpZ25lZCBzdXJmYWNl IHBhZ2Ugb2Zmc2V0LCBhbmQgYXMgYSByZXN1bHQgd2UncmUgbGVmdCB3aXRoIHNvbWUgcmVzaWR1 YWwgeC95IG9mZnNldHMuIEZpbmFsbHksIGlmIHJlcXVpcmVkIGJ5IHRoZSBoYXJkd2FyZSwgd2Ug Y29udmVydCB0aGUgcmVtYWluaW5nIHgveSBvZmZzZXRzIGludG8gYSBsaW5lYXIgb2Zmc2V0Lgo+ Cj4gRm9yIGdlbjIvMyB3ZSBzaW1wbHkgc2tpcCBjb21wdXRpbmcgdGhlIGZpbmFsIHBhZ2Ugb2Zm c2V0LCBhbmQganVzdCBjb252ZXJ0IHRoZSBzcmMrZmIgeC95IG9mZnNldHMgZGlyZWN0bHkgaW50 byBhIGxpbmVhciBvZmZzZXQgc2luY2UgdGhhdCdzIHdoYXQgdGhlIGhhcmR3YXJlIHdhbnRzLgo+ Cj4gQWZ0ZXIgdGhpcyBhbGwgcGxhdGZvcm1zLCBpbmNsdWluZyBTS0wrLCBjb21wdXRlIHRoZXNl IHRoaW5ncyBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSAoZXhjbHVkaW5nIGFsaWduZW1udCBkaWZm ZXJlbmNlcykuCj4KPiB2MjogVXNlIEJJVChEUk1fUk9UQVRFXzI3MCkgaW5zdGVhZCBvZiBST1RB VEVfMjcwIHdoZW4gcm90YXRpbmcKPiAgICAgIHBsYW5lIHNyYyBjb29yZGluYXRlcwo+ICAgICAg RHJvcCBzb21lIHNwdXJpb3VzIGNoYW5nZXMgdGhhdCBnb3QgbGVmdCBiZWhpbmQgZHVyaW5nCj4g ICAgICBkZXZlbG9wbWVudAo+IHYzOiBTcGxpdCBvdXQgbW9yZSBjaGFuZ2VzIHRvIHByZXAgcGF0 Y2hlcyAoRGFuaWVsKQo+ICAgICAgcy9pbnRlbF9mYi0+cGxhbmVbXS5mb28uYmFyL2ludGVsX2Zi LT5mb29bXS5iYXIvIGZvciBicmV2aXR5Cj4gICAgICBSZW5hbWUgaW50ZWxfc3VyZl9ndHRfb2Zm c2V0IHRvIGludGVsX2ZiX2d0dF9vZmZzZXQKPiAgICAgIEtpbGwgdGhlIHBvaW50bGVzcyAncGxh bmUnIHBhcmFtZXRlciBmcm9tIGludGVsX2ZiX2d0dF9vZmZzZXQoKQo+IHY0OiBGaXggYWxpZ25t ZW50IHZzLiBhbGlnbm1lbnQtMSB3aGVuIGNhbGxpbmcKPiAgICAgIF9pbnRlbF9jb21wdXRlX3Rp bGVfb2Zmc2V0KCkgZnJvbSBpbnRlbF9maWxsX2ZiX2luZm8oKQo+ICAgICAgUGFzcyB0aGUgcGl0 Y2ggaW4gdGlsZXMgaW4KPiAgICAgIHN0YWQgb2YgcGl4ZWxzIHRvIGludGVsX2FkanVzdF90aWxl X29mZnNldCgpIGZyb20gaW50ZWxfZmlsbF9mYl9pbmZvKCkKPiAgICAgIFBhc3MgdGhlIGZ1bGwg d2lkdGgvaGVpZ2h0IG9mIHRoZSByb3RhdGVkIGFyZWEgdG8KPiAgICAgIGRybV9yZWN0X3JvdGF0 ZSgpIGZvciBjbGFyaXR5Cj4gICAgICBVc2UgdTMyIGZvciBtb3JlIG9mZnNldHMKPgo+IFNpZ25l ZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyAgfCAgNTEgKyst LS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oICB8ICAgNSArLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgMzczICsrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aCAgICAgfCAgMTkgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jICB8 ICA5NyArKysrLS0tLS0KPiAgIDUgZmlsZXMgY2hhbmdlZCwgMzMxIGluc2VydGlvbnMoKyksIDIx NCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXgg NTFmMjU5N2UzYzU2Li41YjE3OTQ0YTUxMmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuYwo+IEBAIC0zMzk1LDE2ICszMzk1LDE0IEBAIHJvdGF0ZV9wYWdlcyhjb25zdCBkbWFf YWRkcl90ICppbiwgdW5zaWduZWQgaW50IG9mZnNldCwgIH0KPiAgIAo+ICAgc3RhdGljIHN0cnVj dCBzZ190YWJsZSAqCj4gLWludGVsX3JvdGF0ZV9mYl9vYmpfcGFnZXMoc3RydWN0IGludGVsX3Jv dGF0aW9uX2luZm8gKnJvdF9pbmZvLAo+ICtpbnRlbF9yb3RhdGVfZmJfb2JqX3BhZ2VzKGNvbnN0 IHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbywKPiAgIAkJCSAgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHsKPiAtCXVuc2lnbmVkIGludCBzaXplX3BhZ2Vz ID0gcm90X2luZm8tPnBsYW5lWzBdLndpZHRoICogcm90X2luZm8tPnBsYW5lWzBdLmhlaWdodDsK PiAtCXVuc2lnbmVkIGludCBzaXplX3BhZ2VzX3V2Owo+ICsJdW5zaWduZWQgaW50IHNpemUgPSBp bnRlbF9yb3RhdGlvbl9pbmZvX3NpemUocm90X2luZm8pOwo+ICAgCXN0cnVjdCBzZ19wYWdlX2l0 ZXIgc2dfaXRlcjsKPiAgIAl1bnNpZ25lZCBsb25nIGk7Cj4gICAJZG1hX2FkZHJfdCAqcGFnZV9h ZGRyX2xpc3Q7Cj4gICAJc3RydWN0IHNnX3RhYmxlICpzdDsKPiAtCXVuc2lnbmVkIGludCB1dl9z dGFydF9wYWdlOwo+ICAgCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gICAJaW50IHJldCA9IC1F Tk9NRU07Cj4gICAKPiBAQCAtMzQxNCwxOCArMzQxMiwxMiBAQCBpbnRlbF9yb3RhdGVfZmJfb2Jq X3BhZ2VzKHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbywKPiAgIAlpZiAoIXBh Z2VfYWRkcl9saXN0KQo+ICAgCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICAgCj4gLQkvKiBBY2Nv dW50IGZvciBVViBwbGFuZSB3aXRoIE5WMTIuICovCj4gLQlpZiAocm90X2luZm8tPnBpeGVsX2Zv cm1hdCA9PSBEUk1fRk9STUFUX05WMTIpCj4gLQkJc2l6ZV9wYWdlc191diA9IHJvdF9pbmZvLT5w bGFuZVsxXS53aWR0aCAqIHJvdF9pbmZvLT5wbGFuZVsxXS5oZWlnaHQ7Cj4gLQllbHNlCj4gLQkJ c2l6ZV9wYWdlc191diA9IDA7Cj4gLQo+ICAgCS8qIEFsbG9jYXRlIHRhcmdldCBTRyBsaXN0LiAq Lwo+ICAgCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7Cj4gICAJaWYgKCFz dCkKPiAgIAkJZ290byBlcnJfc3RfYWxsb2M7Cj4gICAKPiAtCXJldCA9IHNnX2FsbG9jX3RhYmxl KHN0LCBzaXplX3BhZ2VzICsgc2l6ZV9wYWdlc191diwgR0ZQX0tFUk5FTCk7Cj4gKwlyZXQgPSBz Z19hbGxvY190YWJsZShzdCwgc2l6ZSwgR0ZQX0tFUk5FTCk7Cj4gICAJaWYgKHJldCkKPiAgIAkJ Z290byBlcnJfc2dfYWxsb2M7Cj4gICAKPiBAQCAtMzQzOSwzMiArMzQzMSwxNCBAQCBpbnRlbF9y b3RhdGVfZmJfb2JqX3BhZ2VzKHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbywK PiAgIAlzdC0+bmVudHMgPSAwOwo+ICAgCXNnID0gc3QtPnNnbDsKPiAgIAo+IC0JLyogUm90YXRl IHRoZSBwYWdlcy4gKi8KPiAtCXNnID0gcm90YXRlX3BhZ2VzKHBhZ2VfYWRkcl9saXN0LCAwLAo+ IC0JCQkgIHJvdF9pbmZvLT5wbGFuZVswXS53aWR0aCwgcm90X2luZm8tPnBsYW5lWzBdLmhlaWdo dCwKPiAtCQkJICByb3RfaW5mby0+cGxhbmVbMF0ud2lkdGgsCj4gLQkJCSAgc3QsIHNnKTsKPiAt Cj4gLQkvKiBBcHBlbmQgdGhlIFVWIHBsYW5lIGlmIE5WMTIuICovCj4gLQlpZiAocm90X2luZm8t PnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIpIHsKPiAtCQl1dl9zdGFydF9wYWdlID0g c2l6ZV9wYWdlczsKPiAtCj4gLQkJLyogQ2hlY2sgZm9yIHRpbGUtcm93IHVuLWFsaWdubWVudC4g Ki8KPiAtCQlpZiAob2Zmc2V0X2luX3BhZ2Uocm90X2luZm8tPnV2X29mZnNldCkpCj4gLQkJCXV2 X3N0YXJ0X3BhZ2UtLTsKPiAtCj4gLQkJcm90X2luZm8tPnV2X3N0YXJ0X3BhZ2UgPSB1dl9zdGFy dF9wYWdlOwo+IC0KPiAtCQlzZyA9IHJvdGF0ZV9wYWdlcyhwYWdlX2FkZHJfbGlzdCwgcm90X2lu Zm8tPnV2X3N0YXJ0X3BhZ2UsCj4gLQkJCQkgIHJvdF9pbmZvLT5wbGFuZVsxXS53aWR0aCwgcm90 X2luZm8tPnBsYW5lWzFdLmhlaWdodCwKPiAtCQkJCSAgcm90X2luZm8tPnBsYW5lWzFdLndpZHRo LAo+IC0JCQkJICBzdCwgc2cpOwo+ICsJZm9yIChpID0gMCA7IGkgPCBBUlJBWV9TSVpFKHJvdF9p bmZvLT5wbGFuZSk7IGkrKykgewo+ICsJCXNnID0gcm90YXRlX3BhZ2VzKHBhZ2VfYWRkcl9saXN0 LCByb3RfaW5mby0+cGxhbmVbaV0ub2Zmc2V0LAo+ICsJCQkJICByb3RfaW5mby0+cGxhbmVbaV0u d2lkdGgsIHJvdF9pbmZvLT5wbGFuZVtpXS5oZWlnaHQsCj4gKwkJCQkgIHJvdF9pbmZvLT5wbGFu ZVtpXS5zdHJpZGUsIHN0LCBzZyk7Cj4gICAJfQo+ICAgCj4gLQlEUk1fREVCVUdfS01TKCJDcmVh dGVkIHJvdGF0ZWQgcGFnZSBtYXBwaW5nIGZvciBvYmplY3Qgc2l6ZSAlenUgKCV1eCV1IHRpbGVz LCAldSBwYWdlcyAoJXUgcGxhbmUgMCkpLlxuIiwKPiAtCQkgICAgICBvYmotPmJhc2Uuc2l6ZSwg cm90X2luZm8tPnBsYW5lWzBdLndpZHRoLAo+IC0JCSAgICAgIHJvdF9pbmZvLT5wbGFuZVswXS5o ZWlnaHQsIHNpemVfcGFnZXMgKyBzaXplX3BhZ2VzX3V2LAo+IC0JCSAgICAgIHNpemVfcGFnZXMp Owo+ICsJRFJNX0RFQlVHX0tNUygiQ3JlYXRlZCByb3RhdGVkIHBhZ2UgbWFwcGluZyBmb3Igb2Jq ZWN0IHNpemUgJXp1ICgldXgldSB0aWxlcywgJXUgcGFnZXMpXG4iLAo+ICsJCSAgICAgIG9iai0+ YmFzZS5zaXplLCByb3RfaW5mby0+cGxhbmVbMF0ud2lkdGgsCj4gK3JvdF9pbmZvLT5wbGFuZVsw XS5oZWlnaHQsIHNpemUpOwo+ICAgCj4gICAJZHJtX2ZyZWVfbGFyZ2UocGFnZV9hZGRyX2xpc3Qp Owo+ICAgCj4gQEAgLTM0NzUsMTAgKzM0NDksOSBAQCBlcnJfc2dfYWxsb2M6Cj4gICBlcnJfc3Rf YWxsb2M6Cj4gICAJZHJtX2ZyZWVfbGFyZ2UocGFnZV9hZGRyX2xpc3QpOwo+ICAgCj4gLQlEUk1f REVCVUdfS01TKCJGYWlsZWQgdG8gY3JlYXRlIHJvdGF0ZWQgbWFwcGluZyBmb3Igb2JqZWN0IHNp emUgJXp1ISAoJWQpICgldXgldSB0aWxlcywgJXUgcGFnZXMgKCV1IHBsYW5lIDApKVxuIiwKPiAt CQkgICAgICBvYmotPmJhc2Uuc2l6ZSwgcmV0LCByb3RfaW5mby0+cGxhbmVbMF0ud2lkdGgsCj4g LQkJICAgICAgcm90X2luZm8tPnBsYW5lWzBdLmhlaWdodCwgc2l6ZV9wYWdlcyArIHNpemVfcGFn ZXNfdXYsCj4gLQkJICAgICAgc2l6ZV9wYWdlcyk7Cj4gKwlEUk1fREVCVUdfS01TKCJGYWlsZWQg dG8gY3JlYXRlIHJvdGF0ZWQgbWFwcGluZyBmb3Igb2JqZWN0IHNpemUgJXp1ISAoJXV4JXUgdGls ZXMsICV1IHBhZ2VzKVxuIiwKPiArCQkgICAgICBvYmotPmJhc2Uuc2l6ZSwgcm90X2luZm8tPnBs YW5lWzBdLndpZHRoLAo+ICtyb3RfaW5mby0+cGxhbmVbMF0uaGVpZ2h0LCBzaXplKTsKPiArCj4g ICAJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgIH0KPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2d0dC5oCj4gaW5kZXggMmZiOThiMWU0ZDgyLi44OWYzNGE5MjAzMzggMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+IEBAIC0xMzUsMTIgKzEzNSw5IEBAIGVudW0gaTkx NV9nZ3R0X3ZpZXdfdHlwZSB7ICB9Owo+ICAgCj4gICBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5m byB7Cj4gLQl1bnNpZ25lZCBpbnQgdXZfb2Zmc2V0Owo+IC0JdWludDMyX3QgcGl4ZWxfZm9ybWF0 Owo+IC0JdW5zaWduZWQgaW50IHV2X3N0YXJ0X3BhZ2U7Cj4gICAJc3RydWN0IHsKPiAgIAkJLyog dGlsZXMgKi8KPiAtCQl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKPiArCQl1bnNpZ25lZCBp bnQgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCBvZmZzZXQ7Cj4gICAJfSBwbGFuZVsyXTsKPiAgIH07 Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXggZmRkZmM1ODc1 NzUyLi5hY2Q5MmY5NTcwNTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j Cj4gQEAgLTIzMTcsMzMgKzIzMTcsNiBAQCBpbnRlbF9maWxsX2ZiX2dndHRfdmlldyhzdHJ1Y3Qg aTkxNV9nZ3R0X3ZpZXcgKnZpZXcsCj4gICAJfQo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkCj4g LWludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g LQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9y b3RhdGlvbl9pbmZvICppbmZvID0gJnRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKS0+cm90X2luZm87 Cj4gLQl1bnNpZ25lZCBpbnQgdGlsZV9zaXplLCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodCwgY3Bw Owo+IC0KPiAtCXRpbGVfc2l6ZSA9IGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7Cj4gLQo+IC0J Y3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gLQlpbnRl bF90aWxlX2RpbXMoZGV2X3ByaXYsICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQsCj4gLQkJCWZi LT5tb2RpZmllclswXSwgY3BwKTsKPiAtCj4gLQlpbmZvLT5wbGFuZVswXS53aWR0aCA9IERJVl9S T1VORF9VUChmYi0+cGl0Y2hlc1swXSwgdGlsZV93aWR0aCAqIGNwcCk7Cj4gLQlpbmZvLT5wbGFu ZVswXS5oZWlnaHQgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCwgdGlsZV9oZWlnaHQpOwo+IC0K PiAtCWlmIChpbmZvLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKSB7Cj4gLQkJY3Bw ID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMSk7Cj4gLQkJaW50ZWxf dGlsZV9kaW1zKGRldl9wcml2LCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0LAo+IC0JCQkJZmIt Pm1vZGlmaWVyWzFdLCBjcHApOwo+IC0KPiAtCQlpbmZvLT51dl9vZmZzZXQgPSBmYi0+b2Zmc2V0 c1sxXTsKPiAtCQlpbmZvLT5wbGFuZVsxXS53aWR0aCA9IERJVl9ST1VORF9VUChmYi0+cGl0Y2hl c1sxXSwgdGlsZV93aWR0aCAqIGNwcCk7Cj4gLQkJaW5mby0+cGxhbmVbMV0uaGVpZ2h0ID0gRElW X1JPVU5EX1VQKGZiLT5oZWlnaHQgLyAyLCB0aWxlX2hlaWdodCk7Cj4gLQl9Cj4gLX0KPiAtCj4g ICBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2xpbmVhcl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KSAgewo+ICAgCWlmIChJTlRFTF9JTkZPKGRldl9w cml2KS0+Z2VuID49IDkpCj4gQEAgLTI0NjUsNiArMjQzOCw0MiBAQCBzdGF0aWMgdm9pZCBpbnRl bF91bnBpbl9mYl9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHVuc2lnbmVkIGludCBy b3RhdGlvbiAgfQo+ICAgCj4gICAvKgo+ICsgKiBDb252ZXJ0IHRoZSB4L3kgb2Zmc2V0cyBpbnRv IGEgbGluZWFyIG9mZnNldC4KPiArICogT25seSB2YWxpZCB3aXRoIDAvMTgwIGRlZ3JlZSByb3Rh dGlvbiwgd2hpY2ggaXMgZmluZSBzaW5jZSBsaW5lYXIKPiArICogb2Zmc2V0IGlzIG9ubHkgdXNl ZCB3aXRoIGxpbmVhciBidWZmZXJzIG9uIHByZS1oc3cgYW5kIHRpbGVkIGJ1ZmZlcnMKPiArICog d2l0aCBnZW4yLzMsIGFuZCA5MC8yNzAgZGVncmVlIHJvdGF0aW9ucyBpc24ndCBzdXBwb3J0ZWQg b24gYW55IG9mIHRoZW0uCj4gKyAqLwo+ICt1MzIgaW50ZWxfZmJfeHlfdG9fbGluZWFyKGludCB4 LCBpbnQgeSwKPiArCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBs YW5lKSB7Cj4gKwl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBp eGVsX2Zvcm1hdCwgcGxhbmUpOwo+ICsJdW5zaWduZWQgaW50IHBpdGNoID0gZmItPnBpdGNoZXNb cGxhbmVdOwo+ICsKPiArCXJldHVybiB5ICogcGl0Y2ggKyB4ICogY3BwOwo+ICt9Cj4gKwo+ICsv Kgo+ICsgKiBBZGQgdGhlIHgveSBvZmZzZXRzIGRlcml2ZWQgZnJvbSBmYi0+b2Zmc2V0c1tdIHRv IHRoZSB1c2VyCj4gKyAqIHNwZWNpZmllZCBwbGFuZSBzcmMgeC95IG9mZnNldHMuIFRoZSByZXN1 bHRpbmcgeC95IG9mZnNldHMKPiArICogc3BlY2lmeSB0aGUgc3RhcnQgb2Ygc2Nhbm91dCBmcm9t IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGd0dCBtYXBwaW5nLgo+ICsgKi8KPiArdm9pZCBpbnRlbF9h ZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAqeSwKPiArCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwgaW50IHBsYW5lLAo+ICsJCQkgIHVuc2lnbmVkIGludCByb3RhdGlvbikK PiArCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0 b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Cj4gKwo+ICsJaWYgKGludGVsX3JvdGF0aW9uXzkwX29y XzI3MChyb3RhdGlvbikpIHsKPiArCQkqeCArPSBpbnRlbF9mYi0+cm90YXRlZFtwbGFuZV0ueDsK PiArCQkqeSArPSBpbnRlbF9mYi0+cm90YXRlZFtwbGFuZV0ueTsKPiArCX0gZWxzZSB7Cj4gKwkJ KnggKz0gaW50ZWxfZmItPm5vcm1hbFtwbGFuZV0ueDsKPiArCQkqeSArPSBpbnRlbF9mYi0+bm9y bWFsW3BsYW5lXS55Owo+ICsJfQo+ICt9Cj4gKwo+ICsvKgo+ICAgICogQWRqdXN0IHRoZSB0aWxl IG9mZnNldCBieSBtb3ZpbmcgdGhlIGRpZmZlcmVuY2UgaW50bwo+ICAgICogdGhlIHgveSBvZmZz ZXRzLgo+ICAgICoKPiBAQCAtMjUwMCwxOCArMjUwOSwyNCBAQCBzdGF0aWMgdTMyIGludGVsX2Fk anVzdF90aWxlX29mZnNldChpbnQgKngsIGludCAqeSwKPiAgICAqIEluIHRoZSA5MC8yNzAgcm90 YXRlZCBjYXNlLCB4IGFuZCB5IGFyZSBhc3N1bWVkCj4gICAgKiB0byBiZSBhbHJlYWR5IHJvdGF0 ZWQgdG8gbWF0Y2ggdGhlIHJvdGF0ZWQgR1RUIHZpZXcsIGFuZAo+ICAgICogcGl0Y2ggaXMgdGhl IHRpbGVfaGVpZ2h0IGFsaWduZWQgZnJhbWVidWZmZXIgaGVpZ2h0Lgo+ICsgKgo+ICsgKiBUaGlz IGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIGRlcml2ZWQgaW5mb3JtYXRpb24K PiArICogdW5kZXIgaW50ZWxfZnJhbWVidWZmZXIsIHNvIHVzaW5nIGFueSBvZiB0aGF0IGluZm9y bWF0aW9uCj4gKyAqIGhlcmUgaXMgbm90IGFsbG93ZWQuIEFueXRoaW5nIHVuZGVyIGRybV9mcmFt ZWJ1ZmZlciBjYW4gYmUKPiArICogdXNlZC4gVGhpcyBpcyB3aHkgdGhlIHVzZXIgaGFzIHRvIHBh c3MgaW4gdGhlIHBpdGNoIHNpbmNlIGl0Cj4gKyAqIGlzIHNwZWNpZmllZCBpbiB0aGUgcm90YXRl ZCBvcmllbnRhdGlvbi4KPiAgICAqLwo+IC11MzIgaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldChp bnQgKngsIGludCAqeSwKPiAtCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsIGludCBwbGFuZSwKPiAtCQkJICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAo+IC0JCQkgICAg ICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gK3N0YXRpYyB1MzIgX2ludGVsX2NvbXB1dGVfdGls ZV9vZmZzZXQoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJ ICAgICAgaW50ICp4LCBpbnQgKnksCj4gKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IHBsYW5lLAo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAo+ ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uLAo+ICsJCQkJICAgICAgdTMyIGFsaWdu bWVudCkKPiAgIHsKPiAtCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZmItPmRldik7Cj4gICAJdWludDY0X3QgZmJfbW9kaWZpZXIgPSBmYi0+bW9kaWZp ZXJbcGxhbmVdOwo+ICAgCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChm Yi0+cGl4ZWxfZm9ybWF0LCBwbGFuZSk7Cj4gLQl1MzIgb2Zmc2V0LCBvZmZzZXRfYWxpZ25lZCwg YWxpZ25tZW50Owo+ICsJdTMyIG9mZnNldCwgb2Zmc2V0X2FsaWduZWQ7Cj4gICAKPiAtCWFsaWdu bWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGRldl9wcml2LCBmYl9tb2RpZmllcik7Cj4gICAJ aWYgKGFsaWdubWVudCkKPiAgIAkJYWxpZ25tZW50LS07Cj4gICAKPiBAQCAtMjU1Myw2ICsyNTY4 LDE0MSBAQCB1MzIgaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldChpbnQgKngsIGludCAqeSwKPiAg IAlyZXR1cm4gb2Zmc2V0X2FsaWduZWQ7Cj4gICB9Cj4gICAKPiArdTMyIGludGVsX2NvbXB1dGVf dGlsZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCBwaXRj aCwKPiArCQkJICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQo+ICt7Cj4gKwljb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwo+ICsJdTMy IGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJb cGxhbmVdKTsKPiArCj4gKwlyZXR1cm4gX2ludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoZGV2X3By aXYsIHgsIHksIGZiLCBwbGFuZSwgcGl0Y2gsCj4gKwkJCQkJICByb3RhdGlvbiwgYWxpZ25tZW50 KTsKPiArfQo+ICsKPiArLyogQ29udmVydCB0aGUgZmItPm9mZnNldFtdIGxpbmVhciBvZmZzZXQg aW50byB4L3kgb2Zmc2V0cyAqLyBzdGF0aWMKPiArdm9pZCBpbnRlbF9mYl9vZmZzZXRfdG9feHko aW50ICp4LCBpbnQgKnksCj4gKwkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LCBpbnQgcGxhbmUpIHsKPiArCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2Nw cChmYi0+cGl4ZWxfZm9ybWF0LCBwbGFuZSk7Cj4gKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBmYi0+ cGl0Y2hlc1twbGFuZV07Cj4gKwl1MzIgbGluZWFyX29mZnNldCA9IGZiLT5vZmZzZXRzW3BsYW5l XTsKPiArCj4gKwkqeSA9IGxpbmVhcl9vZmZzZXQgLyBwaXRjaDsKPiArCSp4ID0gbGluZWFyX29m ZnNldCAlIHBpdGNoIC8gY3BwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2ludGVsX2ZpbGxf ZmJfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJICAgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAq aW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Cj4gKwlzdHJ1Y3QgaW50ZWxfcm90 YXRpb25faW5mbyAqcm90X2luZm8gPSAmaW50ZWxfZmItPnJvdF9pbmZvOwo+ICsJdTMyIGd0dF9v ZmZzZXRfcm90YXRlZCA9IDA7Cj4gKwl1bnNpZ25lZCBpbnQgbWF4X3NpemUgPSAwOwo+ICsJdWlu dDMyX3QgZm9ybWF0ID0gZmItPnBpeGVsX2Zvcm1hdDsKPiArCWludCBpLCBudW1fcGxhbmVzID0g ZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZvcm1hdCk7Cj4gKwl1bnNpZ25lZCBpbnQgdGlsZV9zaXpl ID0gaW50ZWxfdGlsZV9zaXplKGRldl9wcml2KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVt X3BsYW5lczsgaSsrKSB7Cj4gKwkJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7Cj4gKwkJdW5z aWduZWQgaW50IGNwcCwgc2l6ZTsKPiArCQl1MzIgb2Zmc2V0Owo+ICsJCWludCB4LCB5Owo+ICsK PiArCQljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmb3JtYXQsIGkpOwo+ICsJCXdpZHRoID0g ZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChmYi0+d2lkdGgsIGZvcm1hdCwgaSk7Cj4gKwkJaGVpZ2h0 ID0gZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQoZmItPmhlaWdodCwgZm9ybWF0LCBpKTsKPiArCj4g KwkJaW50ZWxfZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIsIGkpOwo+ICsKPiArCQkvKgo+ICsJ CSAqIEZpcnN0IHBpeGVsIG9mIHRoZSBmcmFtZWJ1ZmZlciBmcm9tCj4gKwkJICogdGhlIHN0YXJ0 IG9mIHRoZSBub3JtYWwgZ3R0IG1hcHBpbmcuCj4gKwkJICovCj4gKwkJaW50ZWxfZmItPm5vcm1h bFtpXS54ID0geDsKPiArCQlpbnRlbF9mYi0+bm9ybWFsW2ldLnkgPSB5Owo+ICsKPiArCQlvZmZz ZXQgPSBfaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldChkZXZfcHJpdiwgJngsICZ5LAo+ICsJCQkJ CQkgICAgZmIsIDAsIGZiLT5waXRjaGVzW2ldLAo+ICsJCQkJCQkgICAgQklUKERSTV9ST1RBVEVf MCksIHRpbGVfc2l6ZSk7Cj4gKwkJb2Zmc2V0IC89IHRpbGVfc2l6ZTsKPiArCj4gKwkJaWYgKGZi LT5tb2RpZmllcltpXSAhPSBEUk1fRk9STUFUX01PRF9OT05FKSB7Cj4gKwkJCXVuc2lnbmVkIGlu dCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKPiArCQkJdW5zaWduZWQgaW50IHBpdGNoX3RpbGVz Owo+ICsJCQlzdHJ1Y3QgZHJtX3JlY3QgcjsKPiArCj4gKwkJCWludGVsX3RpbGVfZGltcyhkZXZf cHJpdiwgJnRpbGVfd2lkdGgsICZ0aWxlX2hlaWdodCwKPiArCQkJCQlmYi0+bW9kaWZpZXJbaV0s IGNwcCk7Cj4gKwo+ICsJCQlyb3RfaW5mby0+cGxhbmVbaV0ub2Zmc2V0ID0gb2Zmc2V0Owo+ICsJ CQlyb3RfaW5mby0+cGxhbmVbaV0uc3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVzW2ld LCB0aWxlX3dpZHRoICogY3BwKTsKPiArCQkJcm90X2luZm8tPnBsYW5lW2ldLndpZHRoID0gRElW X1JPVU5EX1VQKHggKyB3aWR0aCwgdGlsZV93aWR0aCk7Cj4gKwkJCXJvdF9pbmZvLT5wbGFuZVtp XS5oZWlnaHQgPSBESVZfUk9VTkRfVVAoeSArIGhlaWdodCwgdGlsZV9oZWlnaHQpOwo+ICsKPiAr CQkJaW50ZWxfZmItPnJvdGF0ZWRbaV0ucGl0Y2ggPQo+ICsJCQkJcm90X2luZm8tPnBsYW5lW2ld LmhlaWdodCAqIHRpbGVfaGVpZ2h0Owo+ICsKPiArCQkJLyogaG93IG1hbnkgdGlsZXMgZG9lcyB0 aGlzIHBsYW5lIG5lZWQgKi8KPiArCQkJc2l6ZSA9IHJvdF9pbmZvLT5wbGFuZVtpXS5zdHJpZGUg KiByb3RfaW5mby0+cGxhbmVbaV0uaGVpZ2h0Owo+ICsJCQkvKgo+ICsJCQkgKiBJZiB0aGUgcGxh bmUgaXNuJ3QgaG9yaXpvbnRhbGx5IHRpbGUgYWxpZ25lZCwKPiArCQkJICogd2UgbmVlZCBvbmUg bW9yZSB0aWxlLgo+ICsJCQkgKi8KPiArCQkJaWYgKHggIT0gMCkKPiArCQkJCXNpemUrKzsKPiAr Cj4gKwkJCS8qIHJvdGF0ZSB0aGUgeC95IG9mZnNldHMgdG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICov Cj4gKwkJCXIueDEgPSB4Owo+ICsJCQlyLnkxID0geTsKPiArCQkJci54MiA9IHggKyB3aWR0aDsK PiArCQkJci55MiA9IHkgKyBoZWlnaHQ7Cj4gKwkJCWRybV9yZWN0X3JvdGF0ZSgmciwKPiArCQkJ CQlyb3RfaW5mby0+cGxhbmVbaV0ud2lkdGggKiB0aWxlX3dpZHRoLAo+ICsJCQkJCXJvdF9pbmZv LT5wbGFuZVtpXS5oZWlnaHQgKiB0aWxlX2hlaWdodCwKPiArCQkJCQlCSVQoRFJNX1JPVEFURV8y NzApKTsKPiArCQkJeCA9IHIueDE7Cj4gKwkJCXkgPSByLnkxOwo+ICsKPiArCQkJLyogcm90YXRl IHRoZSB0aWxlIGRpbWVuc2lvbnMgdG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICovCj4gKwkJCXBpdGNo X3RpbGVzID0gaW50ZWxfZmItPnJvdGF0ZWRbaV0ucGl0Y2ggLyB0aWxlX2hlaWdodDsKPiArCQkJ c3dhcCh0aWxlX3dpZHRoLCB0aWxlX2hlaWdodCk7Cj4gKwo+ICsJCQkvKgo+ICsJCQkgKiBXZSBv bmx5IGtlZXAgdGhlIHgveSBvZmZzZXRzLCBzbyBwdXNoIGFsbCBvZiB0aGUKPiArCQkJICogZ3R0 IG9mZnNldCBpbnRvIHRoZSB4L3kgb2Zmc2V0cy4KPiArCQkJICovCj4gKwkJCWludGVsX2FkanVz dF90aWxlX29mZnNldCgmeCwgJnksIHRpbGVfc2l6ZSwKPiArCQkJCQkJIHRpbGVfd2lkdGgsIHRp bGVfaGVpZ2h0LCBwaXRjaF90aWxlcywKPiArCQkJCQkJIGd0dF9vZmZzZXRfcm90YXRlZCAqIHRp bGVfc2l6ZSwgMCk7Cj4gKwo+ICsJCQlndHRfb2Zmc2V0X3JvdGF0ZWQgKz0gcm90X2luZm8tPnBs YW5lW2ldLndpZHRoICoKPiArcm90X2luZm8tPnBsYW5lW2ldLmhlaWdodDsKPiArCj4gKwkJCS8q Cj4gKwkJCSAqIEZpcnN0IHBpeGVsIG9mIHRoZSBmcmFtZWJ1ZmZlciBmcm9tCj4gKwkJCSAqIHRo ZSBzdGFydCBvZiB0aGUgcm90YXRlZCBndHQgbWFwcGluZy4KPiArCQkJICovCj4gKwkJCWludGVs X2ZiLT5yb3RhdGVkW2ldLnggPSB4Owo+ICsJCQlpbnRlbF9mYi0+cm90YXRlZFtpXS55ID0geTsK PiArCQl9IGVsc2Ugewo+ICsJCQlzaXplID0gRElWX1JPVU5EX1VQKCh5ICsgaGVpZ2h0KSAqIGZi LT5waXRjaGVzW2ldICsKPiArCQkJCQkgICAgeCAqIGNwcCwgdGlsZV9zaXplKTsKPiArCQl9Cj4g Kwo+ICsJCS8qIGhvdyBtYW55IHRpbGVzIGluIHRvdGFsIG5lZWRlZCBpbiB0aGUgYm8gKi8KPiAr CQltYXhfc2l6ZSA9IG1heChtYXhfc2l6ZSwgb2Zmc2V0ICsgc2l6ZSk7Cj4gKwl9Cj4gKwo+ICsJ aWYgKG1heF9zaXplICogdGlsZV9zaXplID4gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpLT5vYmot PmJhc2Uuc2l6ZSkgewo+ICsJCURSTV9ERUJVRygiZmIgdG9vIGJpZyBmb3IgYm8gKG5lZWQgJXUg Ynl0ZXMsIGhhdmUgJXp1IGJ5dGVzKVxuIiwKPiArCQkJICBtYXhfc2l6ZSAqIHRpbGVfc2l6ZSwg dG9faW50ZWxfZnJhbWVidWZmZXIoZmIpLT5vYmotPmJhc2Uuc2l6ZSk7Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gICBzdGF0aWMgaW50IGk5 eHhfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0KSAgewo+ICAgCXN3aXRjaCAoZm9ybWF0KSB7 Cj4gQEAgLTI3ODcsNyArMjkzNyw2IEBAIHN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX3ByaW1hcnlf cGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKPiAgIAl1MzIgZHNwY250cjsKPiAgIAlp OTE1X3JlZ190IHJlZyA9IERTUENOVFIocGxhbmUpOwo+ICAgCXVuc2lnbmVkIGludCByb3RhdGlv biA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+IC0JaW50IGNwcCA9IGRybV9mb3JtYXRf cGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOwo+ICAgCWludCB4ID0gcGxhbmVfc3RhdGUt PnNyYy54MSA+PiAxNjsKPiAgIAlpbnQgeSA9IHBsYW5lX3N0YXRlLT5zcmMueTEgPj4gMTY7Cj4g ICAKPiBAQCAtMjg0NywzMCArMjk5NiwyNSBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9wcmlt YXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCj4gICAJaWYgKElTX0c0WChkZXYp KQo+ICAgCQlkc3BjbnRyIHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKPiAgIAo+ IC0JbGluZWFyX29mZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBjcHA7Cj4gKwlpbnRl bF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gICAKPiAtCWlmIChJ TlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KSB7Cj4gKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4g Pj0gNCkKPiAgIAkJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQgPQo+ICAgCQkJaW50ZWxfY29t cHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ICAgCQkJCQkJICBmYi0+cGl0Y2hlc1sw XSwgcm90YXRpb24pOwo+IC0JCWxpbmVhcl9vZmZzZXQgLT0gaW50ZWxfY3J0Yy0+ZHNwYWRkcl9v ZmZzZXQ7Cj4gLQl9IGVsc2Ugewo+IC0JCWludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0ID0gbGlu ZWFyX29mZnNldDsKPiAtCX0KPiAgIAo+ICAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFU RV8xODApKSB7Cj4gICAJCWRzcGNudHIgfD0gRElTUFBMQU5FX1JPVEFURV8xODA7Cj4gICAKPiAg IAkJeCArPSAoY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdyAtIDEpOwo+ICAgCQl5ICs9IChjcnRjX3N0 YXRlLT5waXBlX3NyY19oIC0gMSk7Cj4gLQo+IC0JCS8qIEZpbmRpbmcgdGhlIGxhc3QgcGl4ZWwg b2YgdGhlIGxhc3QgbGluZSBvZiB0aGUgZGlzcGxheQo+IC0JCWRhdGEgYW5kIGFkZGluZyB0byBs aW5lYXJfb2Zmc2V0Ki8KPiAtCQlsaW5lYXJfb2Zmc2V0ICs9Cj4gLQkJCShjcnRjX3N0YXRlLT5w aXBlX3NyY19oIC0gMSkgKiBmYi0+cGl0Y2hlc1swXSArCj4gLQkJCShjcnRjX3N0YXRlLT5waXBl X3NyY193IC0gMSkgKiBjcHA7Cj4gICAJfQo+ICAgCj4gKwlsaW5lYXJfb2Zmc2V0ID0gaW50ZWxf ZmJfeHlfdG9fbGluZWFyKHgsIHksIGZiLCAwKTsKPiArCj4gKwlpZiAoSU5URUxfSU5GTyhkZXYp LT5nZW4gPCA0KQo+ICsJCWludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNl dDsKPiArCmJhc2ljIHF1ZXN0aW9uLCB0aGUgb2xkIGNvZGUgaGFkIGxpbmVhcl9vZmZzZXQgY2Fs Y3VsYXRlZCBmaXJzdCBhbmQgdGhlbiAKeCAgJiB5CndlcmUgdXBkYXRlZCBpZiByb3RhdGlvbiB3 YXMgc2V0LiB0aGUgbmV3IGNvZGUgbG9va3MgYmV0dGVyIHNpbmNlIHdlIGhhbmRsZQppdCBhZnRl ciByb3RhdGlvbiBidXQgd2h5IG5vdCBkbyB0aGUgc2FtZSBmb3IgZ2VuID49IDQgdG9vID8gaS5l IG1vdmUgdGhlCmludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQgYWZ0ZXIgY29uc2lkZXJpbmcgcm90 YXRpb24gPwoKcmVnYXJkcywKU2l2YWt1bWFyCj4gICAJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeCA9 IHg7Cj4gICAJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeSA9IHk7Cj4gICAKPiBAQCAtMjg3OSw3ICsz MDIzLDggQEAgc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwcmltYXJ5LAo+ICAgCUk5MTVfV1JJVEUoRFNQU1RSSURFKHBsYW5lKSwgZmItPnBp dGNoZXNbMF0pOwo+ICAgCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KSB7Cj4gICAJCUk5 MTVfV1JJVEUoRFNQU1VSRihwbGFuZSksCj4gLQkJCSAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNl dChvYmopICsgaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQpOwo+ICsJCQkgICBpbnRlbF9mYl9n dHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKwo+ICsJCQkgICBpbnRlbF9jcnRjLT5kc3BhZGRyX29m ZnNldCk7Cj4gICAJCUk5MTVfV1JJVEUoRFNQVElMRU9GRihwbGFuZSksICh5IDw8IDE2KSB8IHgp Owo+ICAgCQlJOTE1X1dSSVRFKERTUExJTk9GRihwbGFuZSksIGxpbmVhcl9vZmZzZXQpOwo+ICAg CX0gZWxzZQo+IEBAIC0yOTE3LDcgKzMwNjIsNiBAQCBzdGF0aWMgdm9pZCBpcm9ubGFrZV91cGRh dGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5LAo+ICAgCXUzMiBkc3Bj bnRyOwo+ICAgCWk5MTVfcmVnX3QgcmVnID0gRFNQQ05UUihwbGFuZSk7Cj4gICAJdW5zaWduZWQg aW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gLQlpbnQgY3BwID0g ZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gICAJaW50IHggPSBw bGFuZV9zdGF0ZS0+c3JjLngxID4+IDE2Owo+ICAgCWludCB5ID0gcGxhbmVfc3RhdGUtPnNyYy55 MSA+PiAxNjsKPiAgIAo+IEBAIC0yOTU2LDI2ICszMTAwLDIzIEBAIHN0YXRpYyB2b2lkIGlyb25s YWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCj4gICAJ aWYgKCFJU19IQVNXRUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKQo+ICAgCQlkc3BjbnRy IHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKPiAgIAo+IC0JbGluZWFyX29mZnNl dCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBjcHA7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0 cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gKwo+ICAgCWludGVsX2NydGMtPmRzcGFkZHJf b2Zmc2V0ID0KPiAgIAkJaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ ICAgCQkJCQkgIGZiLT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gLQlsaW5lYXJfb2Zmc2V0IC09 IGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0Owo+ICsKPiAgIAlpZiAocm90YXRpb24gPT0gQklU KERSTV9ST1RBVEVfMTgwKSkgewo+ICAgCQlkc3BjbnRyIHw9IERJU1BQTEFORV9ST1RBVEVfMTgw Owo+ICAgCj4gICAJCWlmICghSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSkg ewo+ICAgCQkJeCArPSAoY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdyAtIDEpOwo+ICAgCQkJeSArPSAo Y3J0Y19zdGF0ZS0+cGlwZV9zcmNfaCAtIDEpOwo+IC0KPiAtCQkJLyogRmluZGluZyB0aGUgbGFz dCBwaXhlbCBvZiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBkaXNwbGF5Cj4gLQkJCWRhdGEgYW5kIGFk ZGluZyB0byBsaW5lYXJfb2Zmc2V0Ki8KPiAtCQkJbGluZWFyX29mZnNldCArPQo+IC0JCQkJKGNy dGNfc3RhdGUtPnBpcGVfc3JjX2ggLSAxKSAqIGZiLT5waXRjaGVzWzBdICsKPiAtCQkJCShjcnRj X3N0YXRlLT5waXBlX3NyY193IC0gMSkgKiBjcHA7Cj4gICAJCX0KPiAgIAl9Cj4gICAKPiArCWxp bmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwgeSwgZmIsIDApOwo+ICsKPiAg IAlpbnRlbF9jcnRjLT5hZGp1c3RlZF94ID0geDsKPiAgIAlpbnRlbF9jcnRjLT5hZGp1c3RlZF95 ID0geTsKPiAgIAo+IEBAIC0yOTgzLDcgKzMxMjQsOCBAQCBzdGF0aWMgdm9pZCBpcm9ubGFrZV91 cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5LAo+ICAgCj4gICAJ STkxNV9XUklURShEU1BTVFJJREUocGxhbmUpLCBmYi0+cGl0Y2hlc1swXSk7Cj4gICAJSTkxNV9X UklURShEU1BTVVJGKHBsYW5lKSwKPiAtCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2Jq KSArIGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKPiArCQkgICBpbnRlbF9mYl9ndHRfb2Zm c2V0KGZiLCByb3RhdGlvbikgKwo+ICsJCSAgIGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsK PiAgIAlpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FEV0VMTChkZXYpKSB7Cj4gICAJCUk5 MTVfV1JJVEUoRFNQT0ZGU0VUKHBsYW5lKSwgKHkgPDwgMTYpIHwgeCk7Cj4gICAJfSBlbHNlIHsK PiBAQCAtMzAwNSwzMiArMzE0NywxNSBAQCB1MzIgaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJfQo+ICAgfQo+ICAg Cj4gLXUzMiBpbnRlbF9wbGFuZV9vYmpfb2Zmc2V0KHN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxf cGxhbmUsCj4gLQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCSAg IHVuc2lnbmVkIGludCBwbGFuZSkKPiArdTMyIGludGVsX2ZiX2d0dF9vZmZzZXQoc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIsCj4gKwkJCXVuc2lnbmVkIGludCByb3RhdGlvbikKPiAgIHsKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ICAg CXN0cnVjdCBpOTE1X2dndHRfdmlldyB2aWV3Owo+IC0Jc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4g LQl1NjQgb2Zmc2V0Owo+IC0KPiAtCWludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZ2aWV3LCBpbnRl bF9wbGFuZS0+YmFzZS5zdGF0ZS0+ZmIsCj4gLQkJCQlpbnRlbF9wbGFuZS0+YmFzZS5zdGF0ZS0+ cm90YXRpb24pOwo+IC0KPiAtCXZtYSA9IGk5MTVfZ2VtX29ial90b19nZ3R0X3ZpZXcob2JqLCAm dmlldyk7Cj4gLQlpZiAoV0FSTighdm1hLCAiZ2d0dCB2bWEgZm9yIGRpc3BsYXkgb2JqZWN0IG5v dCBmb3VuZCEgKHZpZXc9JXUpXG4iLAo+IC0JCXZpZXcudHlwZSkpCj4gLQkJcmV0dXJuIC0xOwo+ ICAgCj4gLQlvZmZzZXQgPSB2bWEtPm5vZGUuc3RhcnQ7Cj4gLQo+IC0JaWYgKHBsYW5lID09IDEp IHsKPiAtCQlvZmZzZXQgKz0gdm1hLT5nZ3R0X3ZpZXcucGFyYW1zLnJvdGF0ZWQudXZfc3RhcnRf cGFnZSAqCj4gLQkJCSAgUEFHRV9TSVpFOwo+IC0JfQo+IC0KPiAtCVdBUk5fT04odXBwZXJfMzJf Yml0cyhvZmZzZXQpKTsKPiArCWludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZ2aWV3LCBmYiwgcm90 YXRpb24pOwo+ICAgCj4gLQlyZXR1cm4gbG93ZXJfMzJfYml0cyhvZmZzZXQpOwo+ICsJcmV0dXJu IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldF92aWV3KG9iaiwgJnZpZXcpOwpzaG91bGRudCB3ZSBy ZXR1cm4gbG93ZXJfMzJfYml0cyAoaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0X3ZpZXcob2JqLCAK JnZpZXcpKSA/ICBzaW5jZSBpdCByZXR1cm5zIDY0Yml0IGRhdGEKPiAgIH0KPiAgIAo+ICAgc3Rh dGljIHZvaWQgc2tsX2RldGFjaF9zY2FsZXIoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMs IGludCBpZCkgQEAgLTMxNDksMTIgKzMyNzQsOSBAQCBzdGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0 ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gICAJc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0 Yyk7Cj4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5m YjsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIp Owo+ICAgCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiAgIAl1MzIgcGxhbmVfY3RsLCBz dHJpZGVfZGl2LCBzdHJpZGU7Cj4gLQl1MzIgdGlsZV9oZWlnaHQsIHBsYW5lX29mZnNldCwgcGxh bmVfc2l6ZTsKPiAgIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5y b3RhdGlvbjsKPiAtCWludCB4X29mZnNldCwgeV9vZmZzZXQ7Cj4gICAJdTMyIHN1cmZfYWRkcjsK PiAgIAlpbnQgc2NhbGVyX2lkID0gcGxhbmVfc3RhdGUtPnNjYWxlcl9pZDsKPiAgIAlpbnQgc3Jj X3ggPSBwbGFuZV9zdGF0ZS0+c3JjLngxID4+IDE2OyBAQCAtMzE3NSwzNiArMzI5Nyw0OSBAQCBz dGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAo+ICAgCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfUExBTkVfR0FNTUFfRElTQUJMRTsK PiAgIAlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9yb3RhdGlvbihyb3RhdGlvbik7Cj4gICAK PiAtCXN0cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+ bW9kaWZpZXJbMF0sCj4gLQkJCQkJICAgICAgIGZiLT5waXhlbF9mb3JtYXQpOwo+IC0Jc3VyZl9h ZGRyID0gaW50ZWxfcGxhbmVfb2JqX29mZnNldCh0b19pbnRlbF9wbGFuZShwbGFuZSksIG9iaiwg MCk7Cj4gLQo+IC0JV0FSTl9PTihkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnNyYykgPT0g MCk7Cj4gLQo+ICAgCWlmIChpbnRlbF9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7Cj4g KwkJc3RydWN0IGRybV9yZWN0IHIgPSB7Cj4gKwkJCS54MSA9IHNyY194LAo+ICsJCQkueDIgPSBz cmNfeCArIHNyY193LAo+ICsJCQkueTEgPSBzcmNfeSwKPiArCQkJLnkyID0gc3JjX3kgKyBzcmNf aCwKPiArCQl9Owo+ICAgCQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVs X2Zvcm1hdCwgMCk7Cj4gKwkJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRv X2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiArCj4gKwkJLyogUm90YXRlIHNyYyBjb29yZGluYXRl cyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCj4gKwkJZHJtX3JlY3Rfcm90YXRlKCZyLCBm Yi0+d2lkdGgsIGZiLT5oZWlnaHQsIEJJVChEUk1fUk9UQVRFXzI3MCkpOwo+ICAgCj4gLQkJLyog c3RyaWRlID0gU3VyZmFjZSBoZWlnaHQgaW4gdGlsZXMgKi8KPiAtCQl0aWxlX2hlaWdodCA9IGlu dGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sIGNwcCk7Cj4gLQkJc3Ry aWRlID0gRElWX1JPVU5EX1VQKGZiLT5oZWlnaHQsIHRpbGVfaGVpZ2h0KTsKPiAtCQl4X29mZnNl dCA9IHN0cmlkZSAqIHRpbGVfaGVpZ2h0IC0gc3JjX3kgLSBzcmNfaDsKPiAtCQl5X29mZnNldCA9 IHNyY194Owo+IC0JCXBsYW5lX3NpemUgPSAoc3JjX3cgLSAxKSA8PCAxNiB8IChzcmNfaCAtIDEp Owo+ICsJCXNyY194ID0gci54MTsKPiArCQlzcmNfeSA9IHIueTE7Cj4gKwkJc3JjX3cgPSBkcm1f cmVjdF93aWR0aCgmcik7Cj4gKwkJc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnIpOwo+ICsKPiAr CQlzdHJpZGVfZGl2ID0gaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclsw XSwgY3BwKTsKPiArCQlzdHJpZGUgPSBpbnRlbF9mYi0+cm90YXRlZFswXS5waXRjaDsKPiAgIAl9 IGVsc2Ugewo+IC0JCXN0cmlkZSA9IGZiLT5waXRjaGVzWzBdIC8gc3RyaWRlX2RpdjsKPiAtCQl4 X29mZnNldCA9IHNyY194Owo+IC0JCXlfb2Zmc2V0ID0gc3JjX3k7Cj4gLQkJcGxhbmVfc2l6ZSA9 IChzcmNfaCAtIDEpIDw8IDE2IHwgKHNyY193IC0gMSk7Cj4gKwkJc3RyaWRlX2RpdiA9IGludGVs X2ZiX3N0cmlkZV9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwKPiArCQkJCQkJ ICAgICAgIGZiLT5waXhlbF9mb3JtYXQpOwo+ICsJCXN0cmlkZSA9IGZiLT5waXRjaGVzWzBdOwo+ ICAgCX0KPiAtCXBsYW5lX29mZnNldCA9IHlfb2Zmc2V0IDw8IDE2IHwgeF9vZmZzZXQ7Cj4gICAK PiAtCWludGVsX2NydGMtPmFkanVzdGVkX3ggPSB4X29mZnNldDsKPiAtCWludGVsX2NydGMtPmFk anVzdGVkX3kgPSB5X29mZnNldDsKPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNy Y195LCBmYiwgMCwgcm90YXRpb24pOwo+ICsJc3VyZl9hZGRyID0gaW50ZWxfY29tcHV0ZV90aWxl X29mZnNldCgmc3JjX3gsICZzcmNfeSwgZmIsIDAsCj4gKwkJCQkJICAgICAgc3RyaWRlLCByb3Rh dGlvbik7Cj4gKwo+ICsJLyogU2l6ZXMgYXJlIDAgYmFzZWQgKi8KPiArCXNyY193LS07Cj4gKwlz cmNfaC0tOwo+ICsJZHN0X3ctLTsKPiArCWRzdF9oLS07Cj4gKwo+ICsJaW50ZWxfY3J0Yy0+YWRq dXN0ZWRfeCA9IHNyY194Owo+ICsJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeSA9IHNyY195Owo+ICAg Cj4gICAJSTkxNV9XUklURShQTEFORV9DVEwocGlwZSwgMCksIHBsYW5lX2N0bCk7Cj4gLQlJOTE1 X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCAwKSwgcGxhbmVfb2Zmc2V0KTsKPiAtCUk5MTVfV1JJ VEUoUExBTkVfU0laRShwaXBlLCAwKSwgcGxhbmVfc2l6ZSk7Cj4gLQlJOTE1X1dSSVRFKFBMQU5F X1NUUklERShwaXBlLCAwKSwgc3RyaWRlKTsKPiArCUk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBp cGUsIDApLCAoc3JjX3kgPDwgMTYpIHwgc3JjX3gpOwo+ICsJSTkxNV9XUklURShQTEFORV9TVFJJ REUocGlwZSwgMCksIHN0cmlkZSAvIHN0cmlkZV9kaXYpOwo+ICsJSTkxNV9XUklURShQTEFORV9T SVpFKHBpcGUsIDApLCAoc3JjX2ggPDwgMTYpIHwgc3JjX3cpOwo+ICAgCj4gICAJaWYgKHNjYWxl cl9pZCA+PSAwKSB7Cj4gICAJCXVpbnQzMl90IHBzX2N0cmwgPSAwOwo+IEBAIC0zMjIxLDcgKzMz NTYsOCBAQCBzdGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlJOTE1X1dSSVRFKFBMQU5FX1BPUyhwaXBlLCAwKSwgKGRz dF95IDw8IDE2KSB8IGRzdF94KTsKPiAgIAl9Cj4gICAKPiAtCUk5MTVfV1JJVEUoUExBTkVfU1VS RihwaXBlLCAwKSwgc3VyZl9hZGRyKTsKPiArCUk5MTVfV1JJVEUoUExBTkVfU1VSRihwaXBlLCAw KSwKPiArCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKyBzdXJmX2FkZHIp Owo+ICAgCj4gICAJUE9TVElOR19SRUFEKFBMQU5FX1NVUkYocGlwZSwgMCkpOwo+ICAgfQo+IEBA IC0xMTQwMCw3ICsxMTUzNiw3IEBAIHN0YXRpYyB2b2lkIHNrbF9kb19tbWlvX2ZsaXAoc3RydWN0 IGludGVsX2NydGMgKmludGVsX2NydGMsCj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiA9IGludGVsX2NydGMtPmJhc2UucHJpbWFyeS0+ZmI7Cj4gICAJY29uc3QgZW51bSBwaXBlIHBp cGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+IC0JdTMyIGN0bCwgc3RyaWRlLCB0aWxlX2hlaWdodDsK PiArCXUzMiBjdGwsIHN0cmlkZTsKPiAgIAo+ICAgCWN0bCA9IEk5MTVfUkVBRChQTEFORV9DVEwo cGlwZSwgMCkpOwo+ICAgCWN0bCAmPSB+UExBTkVfQ1RMX1RJTEVEX01BU0s7Cj4gQEAgLTExNDI1 LDkgKzExNTYxLDExIEBAIHN0YXRpYyB2b2lkIHNrbF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMsCj4gICAJICogbGluZWFyIGJ1ZmZlcnMgb3IgaW4gbnVtYmVyIG9m IHRpbGVzIGZvciB0aWxlZCBidWZmZXJzLgo+ICAgCSAqLwo+ICAgCWlmIChpbnRlbF9yb3RhdGlv bl85MF9vcl8yNzAocm90YXRpb24pKSB7Cj4gLQkJLyogc3RyaWRlID0gU3VyZmFjZSBoZWlnaHQg aW4gdGlsZXMgKi8KPiAtCQl0aWxlX2hlaWdodCA9IGludGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2 LCBmYi0+bW9kaWZpZXJbMF0sIDApOwo+IC0JCXN0cmlkZSA9IERJVl9ST1VORF9VUChmYi0+aGVp Z2h0LCB0aWxlX2hlaWdodCk7Cj4gKwkJaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZi LT5waXhlbF9mb3JtYXQsIDApOwo+ICsJCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxf ZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Cj4gKwo+ICsJCXN0cmlkZSA9IGludGVsX2Zi LT5yb3RhdGVkWzBdLnBpdGNoIC8KPiArCQkJaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZi LT5tb2RpZmllclswXSwgY3BwKTsKPiAgIAl9IGVsc2Ugewo+ICAgCQlzdHJpZGUgPSBmYi0+cGl0 Y2hlc1swXSAvCj4gICAJCQlpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+ bW9kaWZpZXJbMF0sIEBAIC0xMTc1Myw4ICsxMTg5MSw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0 Y19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAgCWlmIChyZXQpCj4gICAJCWdv dG8gY2xlYW51cF9wZW5kaW5nOwo+ICAgCj4gLQl3b3JrLT5ndHRfb2Zmc2V0ID0gaW50ZWxfcGxh bmVfb2JqX29mZnNldCh0b19pbnRlbF9wbGFuZShwcmltYXJ5KSwKPiAtCQkJCQkJICBvYmosIDAp Owo+ICsJd29yay0+Z3R0X29mZnNldCA9IGludGVsX2ZiX2d0dF9vZmZzZXQoZmIsIHByaW1hcnkt PnN0YXRlLT5yb3RhdGlvbik7Cj4gICAJd29yay0+Z3R0X29mZnNldCArPSBpbnRlbF9jcnRjLT5k c3BhZGRyX29mZnNldDsKPiAgIAo+ICAgCWlmIChtbWlvX2ZsaXApIHsKPiBAQCAtMTQ3NTksNyAr MTQ4OTYsNiBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiAgIAkJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4g ICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYp Owo+IC0JdW5zaWduZWQgaW50IGFsaWduZWRfaGVpZ2h0Owo+ICAgCWludCByZXQ7Cj4gICAJdTMy IHBpdGNoX2xpbWl0LCBzdHJpZGVfYWxpZ25tZW50Owo+ICAgCj4gQEAgLTE0ODg0LDE3ICsxNTAy MCwxMiBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPiAgIAlpZiAobW9kZV9jbWQtPm9mZnNldHNbMF0gIT0gMCkKPiAgIAkJcmV0dXJu IC1FSU5WQUw7Cj4gICAKPiAtCWFsaWduZWRfaGVpZ2h0ID0gaW50ZWxfZmJfYWxpZ25faGVpZ2h0 KGRldiwgbW9kZV9jbWQtPmhlaWdodCwKPiAtCQkJCQkgICAgICAgbW9kZV9jbWQtPnBpeGVsX2Zv cm1hdCwKPiAtCQkJCQkgICAgICAgbW9kZV9jbWQtPm1vZGlmaWVyWzBdKTsKPiAtCS8qIEZJWE1F IGRybSBoZWxwZXIgZm9yIHNpemUgY2hlY2tzIChlc3BlY2lhbGx5IHBsYW5hciBmb3JtYXRzKT8g Ki8KPiAtCWlmIChvYmotPmJhc2Uuc2l6ZSA8IGFsaWduZWRfaGVpZ2h0ICogbW9kZV9jbWQtPnBp dGNoZXNbMF0pCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+ICAgCWRybV9oZWxwZXJfbW9kZV9m aWxsX2ZiX3N0cnVjdCgmaW50ZWxfZmItPmJhc2UsIG1vZGVfY21kKTsKPiAgIAlpbnRlbF9mYi0+ b2JqID0gb2JqOwo+ICAgCj4gLQlpbnRlbF9maWxsX2ZiX2luZm8oZGV2X3ByaXYsICZpbnRlbF9m Yi0+YmFzZSk7Cj4gKwlyZXQgPSBpbnRlbF9maWxsX2ZiX2luZm8oZGV2X3ByaXYsICZpbnRlbF9m Yi0+YmFzZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gICAKPiAgIAlyZXQgPSBk cm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZpbnRlbF9mYi0+YmFzZSwgJmludGVsX2ZiX2Z1bmNz KTsKPiAgIAlpZiAocmV0KSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBpbmRleCA2NzRh ZmExZjlmOTcuLjg0YTJhM2YxMDliYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4g QEAgLTExOSw2ICsxMTksMTYgQEAgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyIHsKPiAgIAlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyIGJhc2U7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKPiAgIAlzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyByb3RfaW5mbzsKPiArCj4gKwkv KiBmb3IgZWFjaCBwbGFuZSBpbiB0aGUgbm9ybWFsIEdUVCB2aWV3ICovCj4gKwlzdHJ1Y3Qgewo+ ICsJCXVuc2lnbmVkIGludCB4LCB5Owo+ICsJfSBub3JtYWxbMl07Cj4gKwkvKiBmb3IgZWFjaCBw bGFuZSBpbiB0aGUgcm90YXRlZCBHVFQgdmlldyAqLwo+ICsJc3RydWN0IHsKPiArCQl1bnNpZ25l ZCBpbnQgeCwgeTsKPiArCQl1bnNpZ25lZCBpbnQgcGl0Y2g7IC8qIHBpeGVscyAqLwo+ICsJfSBy b3RhdGVkWzJdOwo+ICAgfTsKPiAgIAo+ICAgc3RydWN0IGludGVsX2ZiZGV2IHsKPiBAQCAtMTA2 MSw2ICsxMDcxLDExIEBAIHZvaWQgaTkxNV9hdWRpb19jb21wb25lbnRfY2xlYW51cChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAgCj4gICAvKiBpbnRlbF9kaXNwbGF5LmMg Ki8KPiAgIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGludGVsX3BsYW5lX2Z1 bmNzOwo+ICt1bnNpZ25lZCBpbnQgaW50ZWxfZmJfeHlfdG9fbGluZWFyKGludCB4LCBpbnQgeSwK PiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpOyB2 b2lkCj4gK2ludGVsX2FkZF9mYl9vZmZzZXRzKGludCAqeCwgaW50ICp5LAo+ICsJCQkgIGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gKwkJCSAgdW5zaWduZWQg aW50IHJvdGF0aW9uKTsKPiAgIHVuc2lnbmVkIGludCBpbnRlbF9yb3RhdGlvbl9pbmZvX3NpemUo Y29uc3Qgc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvKTsgIGJvb2wgaW50ZWxf aGFzX3BlbmRpbmdfZmJfdW5waW4oc3RydWN0IGRybV9kZXZpY2UgKmRldik7ICBpbnQgaW50ZWxf cGNoX3Jhd2NsayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsgQEAgLTEyMTcsOSArMTIzMiw3IEBA IHZvaWQgaW50ZWxfbW9kZV9mcm9tX3BpcGVfY29uZmlnKHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlLCAgaW50IHNrbF91cGRhdGVfc2NhbGVyX2NydGMoc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpOyAgaW50IHNrbF9tYXhfc2NhbGUoc3RydWN0IGludGVsX2NydGMgKmNy dGMsIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiAgIAo+IC11MzIgaW50 ZWxfcGxhbmVfb2JqX29mZnNldChzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lLAo+IC0J CQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkgICB1bnNpZ25lZCBp bnQgcGxhbmUpOwo+ICt1MzIgaW50ZWxfZmJfZ3R0X29mZnNldChzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwgdW5zaWduZWQgaW50Cj4gK3JvdGF0aW9uKTsKPiAgIAo+ICAgdTMyIHNrbF9wbGFu ZV9jdGxfZm9ybWF0KHVpbnQzMl90IHBpeGVsX2Zvcm1hdCk7Cj4gICB1MzIgc2tsX3BsYW5lX2N0 bF90aWxpbmcodWludDY0X3QgZmJfbW9kaWZpZXIpOyBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJp dGUuYwo+IGluZGV4IDg4MjE1MzM1NjFiMS4uODYxNzYzMDQxNTVkIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfc3ByaXRlLmMKPiBAQCAtMTg2LDE1ICsxODYsMTMgQEAgc2tsX3VwZGF0ZV9w bGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsCj4gICAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgIAlzdHJ1Y3QgaW50ZWxfcGxh bmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUoZHJtX3BsYW5lKTsKPiAgIAlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+IC0Jc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7Cj4gKwlzdHJ1Y3QgaW50 ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwo+ICAg CWNvbnN0IGludCBwaXBlID0gaW50ZWxfcGxhbmUtPnBpcGU7Cj4gICAJY29uc3QgaW50IHBsYW5l ID0gaW50ZWxfcGxhbmUtPnBsYW5lICsgMTsKPiAgIAl1MzIgcGxhbmVfY3RsLCBzdHJpZGVfZGl2 LCBzdHJpZGU7Cj4gICAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtl eSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKPiAgIAl1MzIgc3VyZl9hZGRyOwo+IC0JdTMyIHRpbGVf aGVpZ2h0LCBwbGFuZV9vZmZzZXQsIHBsYW5lX3NpemU7Cj4gICAJdW5zaWduZWQgaW50IHJvdGF0 aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gLQlpbnQgeF9vZmZzZXQsIHlfb2Zm c2V0Owo+ICAgCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+ZHN0LngxOwo+ICAgCWludCBjcnRj X3kgPSBwbGFuZV9zdGF0ZS0+ZHN0LnkxOwo+ICAgCXVpbnQzMl90IGNydGNfdyA9IGRybV9yZWN0 X3dpZHRoKCZwbGFuZV9zdGF0ZS0+ZHN0KTsKPiBAQCAtMjE1LDE1ICsyMTMsNiBAQCBza2xfdXBk YXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKmRybV9wbGFuZSwKPiAgIAo+ICAgCXBsYW5lX2N0 bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0aW9uKHJvdGF0aW9uKTsKPiAgIAo+IC0Jc3RyaWRlX2Rp diA9IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwK PiAtCQkJCQkgICAgICAgZmItPnBpeGVsX2Zvcm1hdCk7Cj4gLQo+IC0JLyogU2l6ZXMgYXJlIDAg YmFzZWQgKi8KPiAtCXNyY193LS07Cj4gLQlzcmNfaC0tOwo+IC0JY3J0Y193LS07Cj4gLQljcnRj X2gtLTsKPiAtCj4gICAJaWYgKGtleS0+ZmxhZ3MpIHsKPiAgIAkJSTkxNV9XUklURShQTEFORV9L RVlWQUwocGlwZSwgcGxhbmUpLCBrZXktPm1pbl92YWx1ZSk7Cj4gICAJCUk5MTVfV1JJVEUoUExB TkVfS0VZTUFYKHBpcGUsIHBsYW5lKSwga2V5LT5tYXhfdmFsdWUpOyBAQCAtMjM1LDI4ICsyMjQs NDQgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsCj4gICAJ ZWxzZSBpZiAoa2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSkKPiAgIAkJcGxh bmVfY3RsIHw9IFBMQU5FX0NUTF9LRVlfRU5BQkxFX1NPVVJDRTsKPiAgIAo+IC0Jc3VyZl9hZGRy ID0gaW50ZWxfcGxhbmVfb2JqX29mZnNldChpbnRlbF9wbGFuZSwgb2JqLCAwKTsKPiAtCj4gICAJ aWYgKGludGVsX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKPiAtCQlpbnQgY3BwID0g ZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gLQo+IC0JCS8qIHN0 cmlkZTogU3VyZmFjZSBoZWlnaHQgaW4gdGlsZXMgKi8KPiAtCQl0aWxlX2hlaWdodCA9IGludGVs X3RpbGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sIGNwcCk7Cj4gLQkJc3RyaWRl ID0gRElWX1JPVU5EX1VQKGZiLT5oZWlnaHQsIHRpbGVfaGVpZ2h0KTsKPiAtCQlwbGFuZV9zaXpl ID0gKHNyY193IDw8IDE2KSB8IHNyY19oOwo+IC0JCXhfb2Zmc2V0ID0gc3RyaWRlICogdGlsZV9o ZWlnaHQgLSB5IC0gKHNyY19oICsgMSk7Cj4gLQkJeV9vZmZzZXQgPSB4Owo+ICsJCXN0cnVjdCBk cm1fcmVjdCByID0gewo+ICsJCQkueDEgPSB4LAo+ICsJCQkueDIgPSB4ICsgc3JjX3csCj4gKwkJ CS55MSA9IHksCj4gKwkJCS55MiA9IHkgKyBzcmNfaCwKPiArCQl9Owo+ICsJCXVuc2lnbmVkIGlu dCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiArCj4g KwkJLyogUm90YXRlIHNyYyBjb29yZGluYXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICov Cj4gKwkJZHJtX3JlY3Rfcm90YXRlKCZyLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIEJJVChEUk1f Uk9UQVRFXzI3MCkpOwo+ICsKPiArCQl4ID0gci54MTsKPiArCQl5ID0gci55MTsKPiArCQlzcmNf dyA9IGRybV9yZWN0X3dpZHRoKCZyKTsKPiArCQlzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcik7 Cj4gKwo+ICsJCXN0cmlkZV9kaXYgPSBpbnRlbF90aWxlX2hlaWdodChkZXZfcHJpdiwgZmItPm1v ZGlmaWVyWzBdLCBjcHApOwo+ICsJCXN0cmlkZSA9IGludGVsX2ZiLT5yb3RhdGVkWzBdLnBpdGNo Owo+ICAgCX0gZWxzZSB7Cj4gLQkJc3RyaWRlID0gZmItPnBpdGNoZXNbMF0gLyBzdHJpZGVfZGl2 Owo+IC0JCXBsYW5lX3NpemUgPSAoc3JjX2ggPDwgMTYpIHwgc3JjX3c7Cj4gLQkJeF9vZmZzZXQg PSB4Owo+IC0JCXlfb2Zmc2V0ID0geTsKPiArCQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRl X2FsaWdubWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+ICsJCQkJCQkgICAgICAgZmIt PnBpeGVsX2Zvcm1hdCk7Cj4gKwkJc3RyaWRlID0gZmItPnBpdGNoZXNbMF07Cj4gICAJfQo+IC0J cGxhbmVfb2Zmc2V0ID0geV9vZmZzZXQgPDwgMTYgfCB4X29mZnNldDsKPiAgIAo+IC0JSTkxNV9X UklURShQTEFORV9PRkZTRVQocGlwZSwgcGxhbmUpLCBwbGFuZV9vZmZzZXQpOwo+IC0JSTkxNV9X UklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmUpLCBzdHJpZGUpOwo+IC0JSTkxNV9XUklURShQ TEFORV9TSVpFKHBpcGUsIHBsYW5lKSwgcGxhbmVfc2l6ZSk7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zm c2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gKwlzdXJmX2FkZHIgPSBpbnRlbF9jb21w dXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4gKwkJCQkJICAgICAgc3RyaWRlLCByb3Rh dGlvbik7Cj4gKwo+ICsJLyogU2l6ZXMgYXJlIDAgYmFzZWQgKi8KPiArCXNyY193LS07Cj4gKwlz cmNfaC0tOwo+ICsJY3J0Y193LS07Cj4gKwljcnRjX2gtLTsKPiArCj4gKwlJOTE1X1dSSVRFKFBM QU5FX09GRlNFVChwaXBlLCBwbGFuZSksICh5IDw8IDE2KSB8IHgpOwo+ICsJSTkxNV9XUklURShQ TEFORV9TVFJJREUocGlwZSwgcGxhbmUpLCBzdHJpZGUgLyBzdHJpZGVfZGl2KTsKPiArCUk5MTVf V1JJVEUoUExBTkVfU0laRShwaXBlLCBwbGFuZSksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7Cj4g ICAKPiAgIAkvKiBwcm9ncmFtIHBsYW5lIHNjYWxlciAqLwo+ICAgCWlmIChwbGFuZV9zdGF0ZS0+ c2NhbGVyX2lkID49IDApIHsKPiBAQCAtMjc4LDcgKzI4Myw4IEBAIHNrbF91cGRhdGVfcGxhbmUo c3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLAo+ICAgCX0KPiAgIAo+ICAgCUk5MTVfV1JJVEUo UExBTkVfQ1RMKHBpcGUsIHBsYW5lKSwgcGxhbmVfY3RsKTsKPiAtCUk5MTVfV1JJVEUoUExBTkVf U1VSRihwaXBlLCBwbGFuZSksIHN1cmZfYWRkcik7Cj4gKwlJOTE1X1dSSVRFKFBMQU5FX1NVUkYo cGlwZSwgcGxhbmUpLAo+ICsJCSAgIGludGVsX2ZiX2d0dF9vZmZzZXQoZmIsIHJvdGF0aW9uKSAr IHN1cmZfYWRkcik7Cj4gICAJUE9TVElOR19SRUFEKFBMQU5FX1NVUkYocGlwZSwgcGxhbmUpKTsg IH0KPiAgIAo+IEBAIC0zNTEsNyArMzU3LDYgQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpkcGxhbmUsCj4gICAJdTMyIHNwcmN0bDsKPiAgIAl1MzIgc3Byc3VyZl9vZmZzZXQs IGxpbmVhcl9vZmZzZXQ7Cj4gICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gZHBsYW5lLT5zdGF0 ZS0+cm90YXRpb247Cj4gLQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVs X2Zvcm1hdCwgMCk7Cj4gICAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkg KmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKPiAgIAlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUt PmRzdC54MTsKPiAgIAlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPmRzdC55MTsKPiBAQCAtNDIy LDE5ICs0MjcsMTkgQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcGxhbmUs Cj4gICAJY3J0Y193LS07Cj4gICAJY3J0Y19oLS07Cj4gICAKPiAtCWxpbmVhcl9vZmZzZXQgPSB5 ICogZmItPnBpdGNoZXNbMF0gKyB4ICogY3BwOwo+ICsJaW50ZWxfYWRkX2ZiX29mZnNldHMoJngs ICZ5LCBmYiwgMCwgcm90YXRpb24pOwo+ICAgCXNwcnN1cmZfb2Zmc2V0ID0gaW50ZWxfY29tcHV0 ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ICAgCQkJCQkJICAgZmItPnBpdGNoZXNbMF0s IHJvdGF0aW9uKTsKPiAtCWxpbmVhcl9vZmZzZXQgLT0gc3Byc3VyZl9vZmZzZXQ7Cj4gICAKPiAg IAlpZiAocm90YXRpb24gPT0gQklUKERSTV9ST1RBVEVfMTgwKSkgewo+ICAgCQlzcHJjdGwgfD0g U1BfUk9UQVRFXzE4MDsKPiAgIAo+ICAgCQl4ICs9IHNyY193Owo+ICAgCQl5ICs9IHNyY19oOwo+ IC0JCWxpbmVhcl9vZmZzZXQgKz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1swXSArIHNyY193ICogY3Bw Owo+ICAgCX0KPiAgIAo+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4 LCB5LCBmYiwgMCk7Cj4gKwo+ICAgCWlmIChrZXktPmZsYWdzKSB7Cj4gICAJCUk5MTVfV1JJVEUo U1BLRVlNSU5WQUwocGlwZSwgcGxhbmUpLCBrZXktPm1pbl92YWx1ZSk7Cj4gICAJCUk5MTVfV1JJ VEUoU1BLRVlNQVhWQUwocGlwZSwgcGxhbmUpLCBrZXktPm1heF92YWx1ZSk7IEBAIC00NTksOCAr NDY0LDggQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcGxhbmUsCj4gICAK PiAgIAlJOTE1X1dSSVRFKFNQU0laRShwaXBlLCBwbGFuZSksIChjcnRjX2ggPDwgMTYpIHwgY3J0 Y193KTsKPiAgIAlJOTE1X1dSSVRFKFNQQ05UUihwaXBlLCBwbGFuZSksIHNwcmN0bCk7Cj4gLQlJ OTE1X1dSSVRFKFNQU1VSRihwaXBlLCBwbGFuZSksIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChv YmopICsKPiAtCQkgICBzcHJzdXJmX29mZnNldCk7Cj4gKwlJOTE1X1dSSVRFKFNQU1VSRihwaXBl LCBwbGFuZSksCj4gKwkJICAgaW50ZWxfZmJfZ3R0X29mZnNldChmYiwgcm90YXRpb24pICsgc3By c3VyZl9vZmZzZXQpOwo+ICAgCVBPU1RJTkdfUkVBRChTUFNVUkYocGlwZSwgcGxhbmUpKTsKPiAg IH0KPiAgIAo+IEBAIC00OTMsNyArNDk4LDYgQEAgaXZiX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAgIAl1MzIgc3ByY3RsLCBzcHJzY2FsZSA9IDA7Cj4gICAJdTMyIHNw cnN1cmZfb2Zmc2V0LCBsaW5lYXJfb2Zmc2V0Owo+ICAgCXVuc2lnbmVkIGludCByb3RhdGlvbiA9 IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+IC0JaW50IGNwcCA9IGRybV9mb3JtYXRfcGxh bmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOwo+ICAgCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxf c3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7Cj4gICAJaW50IGNydGNf eCA9IHBsYW5lX3N0YXRlLT5kc3QueDE7Cj4gICAJaW50IGNydGNfeSA9IHBsYW5lX3N0YXRlLT5k c3QueTE7Cj4gQEAgLTU1NSwxMCArNTU5LDkgQEAgaXZiX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAgIAlpZiAoY3J0Y193ICE9IHNyY193IHx8IGNydGNfaCAhPSBzcmNf aCkKPiAgIAkJc3Byc2NhbGUgPSBTUFJJVEVfU0NBTEVfRU5BQkxFIHwgKHNyY193IDw8IDE2KSB8 IHNyY19oOwo+ICAgCj4gLQlsaW5lYXJfb2Zmc2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsgeCAq IGNwcDsKPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9uKTsK PiAgIAlzcHJzdXJmX29mZnNldCA9IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngsICZ5LCBm YiwgMCwKPiAgIAkJCQkJCSAgIGZiLT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gLQlsaW5lYXJf b2Zmc2V0IC09IHNwcnN1cmZfb2Zmc2V0Owo+ICAgCj4gICAJaWYgKHJvdGF0aW9uID09IEJJVChE Uk1fUk9UQVRFXzE4MCkpIHsKPiAgIAkJc3ByY3RsIHw9IFNQUklURV9ST1RBVEVfMTgwOwo+IEBA IC01NjcsMTAgKzU3MCwxMSBAQCBpdmJfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAo+ICAgCQlpZiAoIUlTX0hBU1dFTEwoZGV2KSAmJiAhSVNfQlJPQURXRUxMKGRldikpIHsK PiAgIAkJCXggKz0gc3JjX3c7Cj4gICAJCQl5ICs9IHNyY19oOwo+IC0JCQlsaW5lYXJfb2Zmc2V0 ICs9IHNyY19oICogZmItPnBpdGNoZXNbMF0gKyBzcmNfdyAqIGNwcDsKPiAgIAkJfQo+ICAgCX0K PiAgIAo+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwg MCk7Cj4gKwo+ICAgCWlmIChrZXktPmZsYWdzKSB7Cj4gICAJCUk5MTVfV1JJVEUoU1BSS0VZVkFM KHBpcGUpLCBrZXktPm1pbl92YWx1ZSk7Cj4gICAJCUk5MTVfV1JJVEUoU1BSS0VZTUFYKHBpcGUp LCBrZXktPm1heF92YWx1ZSk7IEBAIC01OTksNyArNjAzLDcgQEAgaXZiX3VwZGF0ZV9wbGFuZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAkJSTkxNV9XUklURShTUFJTQ0FMRShwaXBlKSwg c3Byc2NhbGUpOwo+ICAgCUk5MTVfV1JJVEUoU1BSQ1RMKHBpcGUpLCBzcHJjdGwpOwo+ICAgCUk5 MTVfV1JJVEUoU1BSU1VSRihwaXBlKSwKPiAtCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQo b2JqKSArIHNwcnN1cmZfb2Zmc2V0KTsKPiArCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCBy b3RhdGlvbikgKyBzcHJzdXJmX29mZnNldCk7Cj4gICAJUE9TVElOR19SRUFEKFNQUlNVUkYocGlw ZSkpOwo+ICAgfQo+ICAgCj4gQEAgLTYzNCw3ICs2MzgsNiBAQCBpbGtfdXBkYXRlX3BsYW5lKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCXUzMiBkdnNjbnRyLCBkdnNzY2FsZTsKPiAgIAl1 MzIgZHZzc3VyZl9vZmZzZXQsIGxpbmVhcl9vZmZzZXQ7Cj4gICAJdW5zaWduZWQgaW50IHJvdGF0 aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gLQlpbnQgY3BwID0gZHJtX2Zvcm1h dF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gICAJY29uc3Qgc3RydWN0IGRybV9p bnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKPiAgIAlpbnQg Y3J0Y194ID0gcGxhbmVfc3RhdGUtPmRzdC54MTsKPiAgIAlpbnQgY3J0Y195ID0gcGxhbmVfc3Rh dGUtPmRzdC55MTsKPiBAQCAtNjkyLDE5ICs2OTUsMTkgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAlpZiAoY3J0Y193ICE9IHNyY193IHx8IGNydGNfaCAh PSBzcmNfaCkKPiAgIAkJZHZzc2NhbGUgPSBEVlNfU0NBTEVfRU5BQkxFIHwgKHNyY193IDw8IDE2 KSB8IHNyY19oOwo+ICAgCj4gLQlsaW5lYXJfb2Zmc2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsg eCAqIGNwcDsKPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9u KTsKPiAgIAlkdnNzdXJmX29mZnNldCA9IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngsICZ5 LCBmYiwgMCwKPiAgIAkJCQkJCSAgIGZiLT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gLQlsaW5l YXJfb2Zmc2V0IC09IGR2c3N1cmZfb2Zmc2V0Owo+ICAgCj4gICAJaWYgKHJvdGF0aW9uID09IEJJ VChEUk1fUk9UQVRFXzE4MCkpIHsKPiAgIAkJZHZzY250ciB8PSBEVlNfUk9UQVRFXzE4MDsKPiAg IAo+ICAgCQl4ICs9IHNyY193Owo+ICAgCQl5ICs9IHNyY19oOwo+IC0JCWxpbmVhcl9vZmZzZXQg Kz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1swXSArIHNyY193ICogY3BwOwo+ICAgCX0KPiAgIAo+ICsJ bGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4gKwo+ ICAgCWlmIChrZXktPmZsYWdzKSB7Cj4gICAJCUk5MTVfV1JJVEUoRFZTS0VZVkFMKHBpcGUpLCBr ZXktPm1pbl92YWx1ZSk7Cj4gICAJCUk5MTVfV1JJVEUoRFZTS0VZTUFYKHBpcGUpLCBrZXktPm1h eF92YWx1ZSk7IEBAIC03MjgsNyArNzMxLDcgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAgIAlJOTE1X1dSSVRFKERWU1NDQUxFKHBpcGUpLCBkdnNzY2FsZSk7 Cj4gICAJSTkxNV9XUklURShEVlNDTlRSKHBpcGUpLCBkdnNjbnRyKTsKPiAgIAlJOTE1X1dSSVRF KERWU1NVUkYocGlwZSksCj4gLQkJICAgaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgKyBk dnNzdXJmX29mZnNldCk7Cj4gKwkJICAgaW50ZWxfZmJfZ3R0X29mZnNldChmYiwgcm90YXRpb24p ICsgZHZzc3VyZl9vZmZzZXQpOwo+ICAgCVBPU1RJTkdfUkVBRChEVlNTVVJGKHBpcGUpKTsKPiAg IH0KPiAgIAo+IC0tCj4gMi40LjEwCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=