From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 10/18] drm/i915: Extract per-platform plane->check() functions Date: Fri, 24 Aug 2018 15:03:46 +0300 Message-ID: <20180824120346.GL5565@intel.com> References: <20180719182214.4323-1-ville.syrjala@linux.intel.com> <20180719182214.4323-11-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id EE5046E696 for ; Fri, 24 Aug 2018 12:03:49 +0000 (UTC) Content-Disposition: inline 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: "Souza, Jose" Cc: "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBBdWcgMjQsIDIwMTggYXQgMDE6MDE6MzZBTSArMDAwMCwgU291emEsIEpvc2Ugd3Jv dGU6Cj4gT24gVGh1LCAyMDE4LTA3LTE5IGF0IDIxOjIyICswMzAwLCBWaWxsZSBTeXJqYWxhIHdy b3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVs LmNvbT4KPiA+IAo+ID4gU3BsaXQgdXAgaW50ZWxfY2hlY2tfcHJpbWFyeV9wbGFuZSgpIGFuZCBp bnRlbF9jaGVja19zcHJpdGVfcGxhbmUoKQo+ID4gaW50byBwZXItcGxhdGZvcm0gdmFyaWFudHMu IFRoaXMgd2F5IHdlIGNhbiBnZXQgYSB1bmlmaWVkIGJlaGF2aW91cgo+ID4gYmV0d2VlbiB0aGUg U0tMIHVuaXZlcnNhbCBwbGFuZXMsIGFuZCB3ZSBzdG9wIGNoZWNraW5nIGZvciBub24tU0tMCj4g PiBzcGVjaWZpYyBzY2FsaW5nIGxpbWl0cyBmb3IgdGhlICJzcHJpdGUiIHBsYW5lcy4gQW5kIHdl IG5vdyBnZXQKPiA+IGEgbmF0dXJhbCBwbGFjZSB3aGVyZSB0byBhZGQgbW9yZSBwbGFyZm9ybSBz cGVjaWZpYyBjaGVja3MuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYyB8ICAgMiArLQo+ID4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgICAgIHwgMTIzICsrKysrLS0tLS0tLQo+ID4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICAgICAgIHwgIDEzICstCj4gPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgICAgICAgfCAzMDMgKysrKysrKysrKysrKysr KysrKy0KPiA+IC0tLS0tLS0tLS0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDI0OSBpbnNlcnRpb25z KCspLCAxOTIgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9hdG9taWNfcGxhbmUuYwo+ID4gaW5kZXggZGNiYTY0NWNhYmI4Li5lZGRjZGQ2ZTRiM2Ig MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUu Ywo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMKPiA+ IEBAIC0xNTksNyArMTU5LDcgQEAgaW50IGludGVsX3BsYW5lX2F0b21pY19jaGVja193aXRoX3N0 YXRlKGNvbnN0Cj4gPiBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfCj4gPiAgCX0K PiA+ICAKPiA+ICAJaW50ZWxfc3RhdGUtPmJhc2UudmlzaWJsZSA9IGZhbHNlOwo+ID4gLQlyZXQg PSBpbnRlbF9wbGFuZS0+Y2hlY2tfcGxhbmUoaW50ZWxfcGxhbmUsIGNydGNfc3RhdGUsCj4gPiBp bnRlbF9zdGF0ZSk7Cj4gPiArCXJldCA9IGludGVsX3BsYW5lLT5jaGVja19wbGFuZShjcnRjX3N0 YXRlLCBpbnRlbF9zdGF0ZSk7Cj4gPiAgCWlmIChyZXQpCj4gPiAgCQlyZXR1cm4gcmV0Owo+ID4g IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+IGluZGV4IGZkYzVi ZWRjNTEzNS4uOWI5ZWFlZGExNWRkIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKPiA+IEBAIC0zMzUwLDYgKzMzNTAsMzYgQEAgaW50IGk5eHhfY2hlY2tfcGxhbmVf c3VyZmFjZShzdHJ1Y3QKPiA+IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICAJ cmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRpYyBpbnQKPiA+ICtpOXh4X3BsYW5lX2No ZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJIHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4g Kwo+ID4gKwlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19wbGFuZV9zdGF0ZSgmcGxhbmVf c3RhdGUtPmJhc2UsCj4gPiArCQkJCQkJICAmY3J0Y19zdGF0ZS0+YmFzZSwKPiA+ICsJCQkJCQkg IERSTV9QTEFORV9IRUxQRVJfTk9fUwo+ID4gQ0FMSU5HLAo+ID4gKwkJCQkJCSAgRFJNX1BMQU5F X0hFTFBFUl9OT19TCj4gPiBDQUxJTkcsCj4gPiArCQkJCQkJICBmYWxzZSwgdHJ1ZSk7Cj4gPiAr CWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlpZiAoIXBsYW5lX3N0YXRl LT5iYXNlLnZpc2libGUpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJcmV0ID0gaW50ZWxf cGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKPiA+ICsJaWYgKHJldCkK PiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXJldCA9IGk5eHhfY2hlY2tfcGxhbmVfc3Vy ZmFjZShwbGFuZV9zdGF0ZSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4g Kwo+ID4gKwlwbGFuZV9zdGF0ZS0+Y3RsID0gaTl4eF9wbGFuZV9jdGwoY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiAgc3RhdGlj IHZvaWQgaTl4eF91cGRhdGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiA+ICAJ CQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4gKmNydGNfc3RhdGUsCj4g PiAgCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlCj4gPiAqcGxhbmVfc3Rh dGUpCj4gPiBAQCAtOTY4MCw2ICs5NzEwLDExIEBAIHN0YXRpYyBpbnQgaW50ZWxfY2hlY2tfY3Vy c29yKHN0cnVjdAo+ID4gaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICAJdTMyIG9m ZnNldDsKPiA+ICAJaW50IHJldDsKPiA+ICAKPiA+ICsJaWYgKGZiICYmIGZiLT5tb2RpZmllciAh PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKPiA+ICsJCURSTV9ERUJVR19LTVMoImN1cnNvciBj YW5ub3QgYmUgdGlsZWRcbiIpOwo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsK PiA+ICAJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfcGxhbmVfc3RhdGUoJnBsYW5lX3N0 YXRlLT5iYXNlLAo+ID4gIAkJCQkJCSAgJmNydGNfc3RhdGUtPmJhc2UsCj4gPiAgCQkJCQkJICBE Uk1fUExBTkVfSEVMUEVSX05PX1MKPiA+IENBTElORywKPiA+IEBAIC05Njg4LDEzICs5NzIzLDEy IEBAIHN0YXRpYyBpbnQgaW50ZWxfY2hlY2tfY3Vyc29yKHN0cnVjdAo+ID4gaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAg Cj4gPiAtCWlmICghZmIpCj4gPiArCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiA+ ICAJCXJldHVybiAwOwo+ID4gIAo+ID4gLQlpZiAoZmItPm1vZGlmaWVyICE9IERSTV9GT1JNQVRf TU9EX0xJTkVBUikgewo+ID4gLQkJRFJNX0RFQlVHX0tNUygiY3Vyc29yIGNhbm5vdCBiZSB0aWxl ZFxuIik7Cj4gPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiA+IC0JfQo+ID4gKwlyZXQgPSBpbnRlbF9w bGFuZV9jaGVja19zcmNfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUpOwo+ID4gKwlpZiAocmV0KQo+ ID4gKwkJcmV0dXJuIHJldDsKPiA+ICAKPiA+ICAJaW50ZWxfZmlsbF9mYl9nZ3R0X3ZpZXcoJnBs YW5lX3N0YXRlLT52aWV3LCBmYiwgcm90YXRpb24pOwo+ID4gIAlwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbMF0uc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIsIDAsCj4gPiByb3RhdGlvbik7Cj4g PiBAQCAtOTc0NCw4ICs5Nzc4LDcgQEAgc3RhdGljIGJvb2wgaTg0NV9jdXJzb3Jfc2l6ZV9vayhj b25zdCBzdHJ1Y3QKPiA+IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICAJcmV0 dXJuIGludGVsX2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSAmJiBJU19BTElHTkVEKHdpZHRo LAo+ID4gNjQpOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgaW50IGk4NDVfY2hlY2tfY3Vyc29y KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAtCQkJICAgICBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICtzdGF0aWMgaW50IGk4NDVfY2hlY2tfY3Vyc29yKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gIAkJCSAgICAgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAKPiBZb3UgYXJlIGRyb3BwaW5nIHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUgZnJvbSBjaGVja19wbGFuZSBhbmQgaW4KPiBza2xfbWF4X3Nj YWxlKCksIEkgdGhpbmsgaXQgaXMgYSBnb29kIHRoaW5nIHRvIGRvIGJ1dCB3b3VsZCBiZSBiZXR0 ZXIKPiBkbyBpdCBpbiBhIHByZXZpb3VzIHBhdGNoIGFuZCBsZWF2ZSB0aGlzIG9uZSBqdXN0IGV4 dHJhY3RpbmcKPiBjaGVja19wbGFuZSgpLgoKWWVhaCwgSSBjYW4geWFuayB0aGF0IG91dCBlYXNp bHkgZW5vdWdoLgoKPiAKPiA+ICB7Cj4gPiAgCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gPiBAQCAtOTk0MywxMCArOTk3NiwxMCBAQCBz dGF0aWMgYm9vbCBpOXh4X2N1cnNvcl9zaXplX29rKGNvbnN0IHN0cnVjdAo+ID4gaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4gIAlyZXR1cm4gdHJ1ZTsKPiA+ICB9Cj4gPiAgCj4g PiAtc3RhdGljIGludCBpOXh4X2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAo+ID4gLQkJCSAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiAr c3RhdGljIGludCBpOXh4X2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKPiA+ICAJCQkgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGUpCj4gPiAgewo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxh bmUocGxhbmVfc3RhdGUtCj4gPiA+YmFzZS5wbGFuZSk7Cj4gPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiA+ICAJY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiA+ICAJ ZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKPiA+IEBAIC0xMzE5MywxOSArMTMyMjYsMTcg QEAgaW50ZWxfY2xlYW51cF9wbGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lCj4gPiAqcGxhbmUsCj4g PiAgfQo+ID4gIAo+ID4gIGludAo+ID4gLXNrbF9tYXhfc2NhbGUoc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGMsCj4gPiAtCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlLAo+ID4gLQkgICAgICB1aW50MzJfdCBwaXhlbF9mb3JtYXQpCj4gPiArc2tsX21heF9zY2Fs ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJICAgICAg dTMyIHBpeGVsX2Zvcm1hdCkKPiA+ICB7Cj4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdjsKPiA+ICsJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNy dGNfc3RhdGUtPmJhc2UuY3J0Yyk7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ID4gIAlpbnQgbWF4X3NjYWxlLCBtdWx0 Owo+ID4gIAlpbnQgY3J0Y19jbG9jaywgbWF4X2RvdGNsaywgdG1wY2xrMSwgdG1wY2xrMjsKPiA+ ICAKPiA+IC0JaWYgKCFpbnRlbF9jcnRjIHx8ICFjcnRjX3N0YXRlLT5iYXNlLmVuYWJsZSkKPiA+ ICsJaWYgKCFjcnRjX3N0YXRlLT5iYXNlLmVuYWJsZSkKPiA+ICAJCXJldHVybiBEUk1fUExBTkVf SEVMUEVSX05PX1NDQUxJTkc7Cj4gPiAgCj4gPiAtCWRldl9wcml2ID0gdG9faTkxNShpbnRlbF9j cnRjLT5iYXNlLmRldik7Cj4gPiAtCj4gPiAgCWNydGNfY2xvY2sgPSBjcnRjX3N0YXRlLT5iYXNl LmFkanVzdGVkX21vZGUuY3J0Y19jbG9jazsKPiA+ICAJbWF4X2RvdGNsayA9IHRvX2ludGVsX2F0 b21pY19zdGF0ZShjcnRjX3N0YXRlLT5iYXNlLnN0YXRlKS0KPiA+ID5jZGNsay5sb2dpY2FsLmNk Y2xrOwo+ID4gIAo+ID4gQEAgLTEzMjI5LDYxICsxMzI2MCw2IEBAIHNrbF9tYXhfc2NhbGUoc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCj4gPiAgCXJldHVybiBtYXhfc2NhbGU7Cj4gPiAg fQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQKPiA+IC1pbnRlbF9jaGVja19wcmltYXJ5X3BsYW5lKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAtCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKPiA+IC0JCQkgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUp Cj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7Cj4gPiAtCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5i YXNlLmNydGM7Cj4gPiAtCWludCBtaW5fc2NhbGUgPSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJ Tkc7Cj4gPiAtCWludCBtYXhfc2NhbGUgPSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7Cj4g PiAtCWJvb2wgY2FuX3Bvc2l0aW9uID0gZmFsc2U7Cj4gPiAtCWludCByZXQ7Cj4gPiAtCXVpbnQz Ml90IHBpeGVsX2Zvcm1hdCA9IDA7Cj4gPiAtCj4gPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDkpIHsKPiA+IC0JCS8qIHVzZSBzY2FsZXIgd2hlbiBjb2xvcmtleSBpcyBub3QgcmVxdWly ZWQgKi8KPiA+IC0JCWlmICghc3RhdGUtPmNrZXkuZmxhZ3MpIHsKPiA+IC0JCQltaW5fc2NhbGUg PSAxOwo+ID4gLQkJCWlmIChzdGF0ZS0+YmFzZS5mYikKPiA+IC0JCQkJcGl4ZWxfZm9ybWF0ID0g c3RhdGUtPmJhc2UuZmItPmZvcm1hdC0KPiA+ID5mb3JtYXQ7Cj4gPiAtCQkJbWF4X3NjYWxlID0g c2tsX21heF9zY2FsZSh0b19pbnRlbF9jcnRjKGNydGMpLAo+ID4gLQkJCQkJCSAgY3J0Y19zdGF0 ZSwKPiA+IHBpeGVsX2Zvcm1hdCk7Cj4gPiAtCQl9Cj4gPiAtCQljYW5fcG9zaXRpb24gPSB0cnVl Owo+ID4gLQl9Cj4gPiAtCj4gPiAtCXJldCA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrX3BsYW5l X3N0YXRlKCZzdGF0ZS0+YmFzZSwKPiA+IC0JCQkJCQkgICZjcnRjX3N0YXRlLT5iYXNlLAo+ID4g LQkJCQkJCSAgbWluX3NjYWxlLCBtYXhfc2NhbGUsCj4gPiAtCQkJCQkJICBjYW5fcG9zaXRpb24s IHRydWUpOwo+ID4gLQlpZiAocmV0KQo+ID4gLQkJcmV0dXJuIHJldDsKPiA+IC0KPiA+IC0JaWYg KCFzdGF0ZS0+YmFzZS5mYikKPiA+IC0JCXJldHVybiAwOwo+ID4gLQo+ID4gLQlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA5KSB7Cj4gPiAtCQlyZXQgPSBza2xfY2hlY2tfcGxhbmVfc3VyZmFj ZShjcnRjX3N0YXRlLCBzdGF0ZSk7Cj4gPiAtCQlpZiAocmV0KQo+ID4gLQkJCXJldHVybiByZXQ7 Cj4gPiAtCj4gPiAtCQlzdGF0ZS0+Y3RsID0gc2tsX3BsYW5lX2N0bChjcnRjX3N0YXRlLCBzdGF0 ZSk7Cj4gPiAtCX0gZWxzZSB7Cj4gPiAtCQlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2Uo c3RhdGUpOwo+ID4gLQkJaWYgKHJldCkKPiA+IC0JCQlyZXR1cm4gcmV0Owo+ID4gLQo+ID4gLQkJ c3RhdGUtPmN0bCA9IGk5eHhfcGxhbmVfY3RsKGNydGNfc3RhdGUsIHN0YXRlKTsKPiA+IC0JfQo+ ID4gLQo+ID4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtF KGRldl9wcml2KSkKPiA+IC0JCXN0YXRlLT5jb2xvcl9jdGwgPSBnbGtfcGxhbmVfY29sb3JfY3Rs KGNydGNfc3RhdGUsCj4gPiBzdGF0ZSk7Cj4gPiAtCj4gPiAtCXJldHVybiAwOwo+ID4gLX0KPiA+ IC0KPiA+ICBzdGF0aWMgdm9pZCBpbnRlbF9iZWdpbl9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCj4gPiAgCQkJCSAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUKPiA+ICpvbGRfY3J0 Y19zdGF0ZSkKPiA+ICB7Cj4gPiBAQCAtMTM3MzYsOCArMTM3MTIsNiBAQCBpbnRlbF9wcmltYXJ5 X3BsYW5lX2NyZWF0ZShzdHJ1Y3QKPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVt IHBpcGUgcGlwZSkKPiA+ICAJCWZiYy0+cG9zc2libGVfZnJhbWVidWZmZXJfYml0cyB8PSBwcmlt YXJ5LQo+ID4gPmZyb250YnVmZmVyX2JpdDsKPiA+ICAJfQo+ID4gIAo+ID4gLQlwcmltYXJ5LT5j aGVja19wbGFuZSA9IGludGVsX2NoZWNrX3ByaW1hcnlfcGxhbmU7Cj4gPiAtCj4gPiAgCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDkpIHsKPiA+ICAJCXByaW1hcnktPmhhc19jY3MgPSBza2xf cGxhbmVfaGFzX2NjcyhkZXZfcHJpdiwgcGlwZSwKPiA+ICAJCQkJCQkgICAgIFBMQU5FX1BSSU1B UlkpOwo+ID4gQEAgLTEzNzU5LDYgKzEzNzMzLDcgQEAgaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVh dGUoc3RydWN0Cj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUp Cj4gPiAgCQlwcmltYXJ5LT51cGRhdGVfcGxhbmUgPSBza2xfdXBkYXRlX3BsYW5lOwo+ID4gIAkJ cHJpbWFyeS0+ZGlzYWJsZV9wbGFuZSA9IHNrbF9kaXNhYmxlX3BsYW5lOwo+ID4gIAkJcHJpbWFy eS0+Z2V0X2h3X3N0YXRlID0gc2tsX3BsYW5lX2dldF9od19zdGF0ZTsKPiA+ICsJCXByaW1hcnkt PmNoZWNrX3BsYW5lID0gc2tsX3BsYW5lX2NoZWNrOwo+ID4gIAo+ID4gIAkJcGxhbmVfZnVuY3Mg PSAmc2tsX3BsYW5lX2Z1bmNzOwo+ID4gIAl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gNCkgewo+ID4gQEAgLTEzNzcwLDYgKzEzNzQ1LDcgQEAgaW50ZWxfcHJpbWFyeV9wbGFuZV9j cmVhdGUoc3RydWN0Cj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBp cGUpCj4gPiAgCQlwcmltYXJ5LT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9wbGFuZTsKPiA+ ICAJCXByaW1hcnktPmRpc2FibGVfcGxhbmUgPSBpOXh4X2Rpc2FibGVfcGxhbmU7Cj4gPiAgCQlw cmltYXJ5LT5nZXRfaHdfc3RhdGUgPSBpOXh4X3BsYW5lX2dldF9od19zdGF0ZTsKPiA+ICsJCXBy aW1hcnktPmNoZWNrX3BsYW5lID0gaTl4eF9wbGFuZV9jaGVjazsKPiA+ICAKPiA+ICAJCXBsYW5l X2Z1bmNzID0gJmk5NjVfcGxhbmVfZnVuY3M7Cj4gPiAgCX0gZWxzZSB7Cj4gPiBAQCAtMTM3ODEs NiArMTM3NTcsNyBAQCBpbnRlbF9wcmltYXJ5X3BsYW5lX2NyZWF0ZShzdHJ1Y3QKPiA+IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKPiA+ICAJCXByaW1hcnktPnVw ZGF0ZV9wbGFuZSA9IGk5eHhfdXBkYXRlX3BsYW5lOwo+ID4gIAkJcHJpbWFyeS0+ZGlzYWJsZV9w bGFuZSA9IGk5eHhfZGlzYWJsZV9wbGFuZTsKPiA+ICAJCXByaW1hcnktPmdldF9od19zdGF0ZSA9 IGk5eHhfcGxhbmVfZ2V0X2h3X3N0YXRlOwo+ID4gKwkJcHJpbWFyeS0+Y2hlY2tfcGxhbmUgPSBp OXh4X3BsYW5lX2NoZWNrOwo+ID4gIAo+ID4gIAkJcGxhbmVfZnVuY3MgPSAmaTh4eF9wbGFuZV9m dW5jczsKPiA+ICAJfQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rydi5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiBpbmRleCBj NmM3ODJlMTQ4OTcuLjZkNTdjNmE1MDhkNCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAo+ID4gQEAgLTk3Myw5ICs5NzMsOCBAQCBzdHJ1Y3QgaW50ZWxfcGxhbmUgewo+ID4gIAl2 b2lkICgqZGlzYWJsZV9wbGFuZSkoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiA+ICAJCQkg ICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cj4gPiAgCWJvb2wgKCpnZXRfaHdfc3RhdGUp KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsIGVudW0gcGlwZQo+ID4gKnBpcGUpOwo+ID4gLQlp bnQgKCpjaGVja19wbGFuZSkoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiA+IC0JCQkgICBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+IC0JCQkgICBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnN0YXRlKTsKPiA+ICsJaW50ICgqY2hlY2tfcGxhbmUpKHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCSAgIHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwo+ID4gIH07Cj4gPiAgCj4gPiAgc3RydWN0IGludGVsX3dh dGVybWFya19wYXJhbXMgewo+ID4gQEAgLTE2MzcsOCArMTYzNiw4IEBAIHZvaWQgaW50ZWxfY3J0 Y19hcm1fZmlmb191bmRlcnJ1bihzdHJ1Y3QKPiA+IGludGVsX2NydGMgKmNydGMsCj4gPiAgCj4g PiAgdTE2IHNrbF9zY2FsZXJfY2FsY19waGFzZShpbnQgc3ViLCBib29sIGNocm9tYV9jZW50ZXIp Owo+ID4gIGludCBza2xfdXBkYXRlX3NjYWxlcl9jcnRjKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKTsKPiA+IC1pbnQgc2tsX21heF9zY2FsZShzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0Yywgc3RydWN0IGludGVsX2NydGNfc3RhdGUKPiA+ICpjcnRjX3N0YXRlLAo+ID4gLQkJICB1 aW50MzJfdCBwaXhlbF9mb3JtYXQpOwo+ID4gK2ludCBza2xfbWF4X3NjYWxlKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJICB1MzIgcGl4ZWxfZm9ybWF0 KTsKPiA+ICAKPiA+ICBzdGF0aWMgaW5saW5lIHUzMiBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChj b25zdCBzdHJ1Y3QKPiA+IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiA+ICB7Cj4gPiBAQCAt MjExMiw3ICsyMTExLDkgQEAgYm9vbCBza2xfcGxhbmVfaGFzX3BsYW5hcihzdHJ1Y3QKPiA+IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gIHVuc2lnbmVkIGludCBza2xfcGxhbmVfbWF4 X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4gIAkJCQkgIHUzMiBwaXhlbF9m b3JtYXQsIHU2NCBtb2RpZmllciwKPiA+ICAJCQkJICB1bnNpZ25lZCBpbnQgcm90YXRpb24pOwo+ ID4gLQo+ID4gK2ludCBza2xfcGxhbmVfY2hlY2soc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCj4gPiArCQkgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSk7Cj4gPiAraW50IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUKPiA+ICpwbGFuZV9zdGF0ZSk7Cj4gPiAgCj4gPiAgLyogaW50ZWxfdHYu YyAqLwo+ID4gIHZvaWQgaW50ZWxfdHZfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0 ZS5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gPiBpbmRleCAw ZDM5MzFiOGE5ODEuLjM2ZTE1MDg4NTg5NyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9zcHJpdGUuYwo+ID4gQEAgLTIyOCw2ICsyMjgsMzkgQEAgdm9pZCBpbnRlbF9waXBlX3VwZGF0 ZV9lbmQoc3RydWN0Cj4gPiBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSkKPiA+ICAj ZW5kaWYKPiA+ICB9Cj4gPiAgCj4gPiAraW50IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGlu YXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUKPiA+ICpwbGFuZV9zdGF0ZSkKPiA+ICt7Cj4g PiArCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2Uu ZmI7Cj4gPiArCXN0cnVjdCBkcm1fcmVjdCAqc3JjID0gJnBsYW5lX3N0YXRlLT5iYXNlLnNyYzsK PiA+ICsJdTMyIHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oOwo+ID4gKwo+ID4gKwkvKgo+ID4g KwkgKiBIYXJkd2FyZSBkb2Vzbid0IGhhbmRsZSBzdWJwaXhlbCBjb29yZGluYXRlcy4KPiA+ICsJ ICogQWRqdXN0IHRvIChtYWNybylwaXhlbCBib3VuZGFyeSwgYnV0IGJlIGNhcmVmdWwgbm90IHRv Cj4gPiArCSAqIGluY3JlYXNlIHRoZSBzb3VyY2Ugdmlld3BvcnQgc2l6ZSwgYmVjYXVzZSB0aGF0 IGNvdWxkCj4gPiArCSAqIHB1c2ggdGhlIGRvd25zY2FsaW5nIGZhY3RvciBvdXQgb2YgYm91bmRz Lgo+ID4gKwkgKi8KPiA+ICsJc3JjX3ggPSBzcmMtPngxID4+IDE2Owo+ID4gKwlzcmNfdyA9IGRy bV9yZWN0X3dpZHRoKHNyYykgPj4gMTY7Cj4gPiArCXNyY195ID0gc3JjLT55MSA+PiAxNjsKPiA+ ICsJc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoc3JjKSA+PiAxNjsKPiA+ICsKPiA+ICsJc3JjLT54 MSA9IHNyY194IDw8IDE2Owo+ID4gKwlzcmMtPngyID0gKHNyY194ICsgc3JjX3cpIDw8IDE2Owo+ ID4gKwlzcmMtPnkxID0gc3JjX3kgPDwgMTY7Cj4gPiArCXNyYy0+eTIgPSAoc3JjX3kgKyBzcmNf aCkgPDwgMTY7Cj4gPiArCj4gPiArCWlmIChmYi0+Zm9ybWF0LT5pc195dXYgJiYKPiA+ICsJICAg IGZiLT5mb3JtYXQtPmZvcm1hdCAhPSBEUk1fRk9STUFUX05WMTIgJiYKPiA+ICsJICAgIChzcmNf eCAmIDEgfHwgc3JjX3cgJiAxKSkgewo+ID4gKwkJRFJNX0RFQlVHX0tNUygic3JjIHgvdyAoJXUs ICV1KSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMgo+ID4gZm9yIFlVViBwbGFuZXNcbiIsCj4gPiAr CQkJICAgICAgc3JjX3gsIHNyY193KTsKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4g PiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICB1bnNpZ25lZCBpbnQKPiA+ICBz a2xfcGxhbmVfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4gIAkJICAg ICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCj4gPiBAQCAtOTgzLDE0NiArMTAxNiwx ODkgQEAgZzR4X3BsYW5lX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUKPiA+ICpwbGFu ZSwKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGljIGludAo+ID4gLWludGVsX2NoZWNrX3Nwcml0ZV9w bGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4gLQkJCSBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+IC0JCQkgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpz dGF0ZSkKPiA+ICtnNHhfc3ByaXRlX2NoZWNrX3NjYWxpbmcoc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCj4gPiArCQkJIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpCj4gPiAgewo+ID4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gPiAtCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0g dG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ID4gLQlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHN0YXRlLT5iYXNlLmZiOwo+ID4gLQlpbnQgbWF4X3NjYWxlLCBtaW5f c2NhbGU7Cj4gPiAtCWludCByZXQ7Cj4gPiAtCXVpbnQzMl90IHBpeGVsX2Zvcm1hdCA9IDA7Cj4g PiAtCj4gPiAtCWlmICghZmIpIHsKPiA+IC0JCXN0YXRlLT5iYXNlLnZpc2libGUgPSBmYWxzZTsK PiA+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFz ZS5mYjsKPiA+ICsJY29uc3Qgc3RydWN0IGRybV9yZWN0ICpzcmMgPSAmcGxhbmVfc3RhdGUtPmJh c2Uuc3JjOwo+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX3JlY3QgKmRzdCA9ICZwbGFuZV9zdGF0ZS0+ YmFzZS5kc3Q7Cj4gPiArCWludCBzcmNfeCwgc3JjX3ksIHNyY193LCBzcmNfaCwgY3J0Y193LCBj cnRjX2g7Cj4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2Rl ID0KPiA+ICsJCSZjcnRjX3N0YXRlLT5iYXNlLmFkanVzdGVkX21vZGU7Cj4gPiArCXVuc2lnbmVk IGludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4gPiArCXVuc2lnbmVkIGludCB3aWR0aF9i eXRlczsKPiA+ICsJaW50IG1pbl93aWR0aCwgbWluX2hlaWdodDsKPiA+ICsKPiA+ICsJY3J0Y193 ID0gZHJtX3JlY3Rfd2lkdGgoZHN0KTsKPiA+ICsJY3J0Y19oID0gZHJtX3JlY3RfaGVpZ2h0KGRz dCk7Cj4gPiArCj4gPiArCXNyY194ID0gc3JjLT54MSA+PiAxNjsKPiA+ICsJc3JjX3kgPSBzcmMt PnkxID4+IDE2Owo+ID4gKwlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKHNyYykgPj4gMTY7Cj4gPiAr CXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KHNyYykgPj4gMTY7Cj4gPiArCj4gPiArCWlmIChzcmNf dyA9PSBjcnRjX3cgJiYgc3JjX2ggPT0gY3J0Y19oKQo+ID4gIAkJcmV0dXJuIDA7Cj4gPiArCj4g PiArCW1pbl93aWR0aCA9IDM7Cj4gPiArCj4gPiArCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB7Cj4gPiArCQlpZiAoc3JjX2ggJiAxKSB7Cj4gPiAr CQkJRFJNX0RFQlVHX0tNUygiU291cmNlIGhlaWdodCBtdXN0IGJlIGV2ZW4gd2l0aAo+ID4gaW50 ZXJsYWNlZCBtb2Rlc1xuIik7Cj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQl9Cj4gPiAr CQltaW5faGVpZ2h0ID0gNjsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCW1pbl9oZWlnaHQgPSAzOwo+ ID4gIAl9Cj4gPiAgCj4gPiAtCS8qIERvbid0IG1vZGlmeSBhbm90aGVyIHBpcGUncyBwbGFuZSAq Lwo+ID4gLQlpZiAocGxhbmUtPnBpcGUgIT0gY3J0Yy0+cGlwZSkgewo+ID4gLQkJRFJNX0RFQlVH X0tNUygiV3JvbmcgcGxhbmUgPC0+IGNydGMgbWFwcGluZ1xuIik7Cj4gPiArCXdpZHRoX2J5dGVz ID0gKChzcmNfeCAqIGNwcCkgJiA2MykgKyBzcmNfdyAqIGNwcDsKPiA+ICsKPiA+ICsJaWYgKHNy Y193IDwgbWluX3dpZHRoIHx8IHNyY19oIDwgbWluX2hlaWdodCB8fAo+ID4gKwkgICAgc3JjX3cg PiAyMDQ4IHx8IHNyY19oID4gMjA0OCkgewo+ID4gKwkJRFJNX0RFQlVHX0tNUygiU291cmNlIGRp bWVuc2lvbnMgKCVkeCVkKSBleGNlZWQKPiA+IGhhcmR3YXJlIGxpbWl0cyAoJWR4JWQgLSAlZHgl ZClcbiIsCj4gPiArCQkJICAgICAgc3JjX3csIHNyY19oLCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQs Cj4gPiAyMDQ4LCAyMDQ4KTsKPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gIAl9Cj4gPiAgCj4g PiAtCS8qIEZJWE1FIGNoZWNrIGFsbCBnZW4gbGltaXRzICovCj4gPiAtCWlmIChmYi0+d2lkdGgg PCAzIHx8IGZiLT5oZWlnaHQgPCAzIHx8Cj4gPiAtCSAgICBmYi0+cGl0Y2hlc1swXSA+IHBsYW5l LT5tYXhfc3RyaWRlKHBsYW5lLCBmYi0+Zm9ybWF0LQo+ID4gPmZvcm1hdCwKPiA+IC0JCQkJCSAg ICAgICBmYi0+bW9kaWZpZXIsCj4gPiBEUk1fTU9ERV9ST1RBVEVfMCkpIHsKPiA+IC0JCURSTV9E RUJVR19LTVMoIlVuc3VpdGFibGUgZnJhbWVidWZmZXIgZm9yIHBsYW5lXG4iKTsKPiA+ICsJaWYg KHdpZHRoX2J5dGVzID4gNDA5Nikgewo+ID4gKwkJRFJNX0RFQlVHX0tNUygiRmV0Y2ggd2lkdGgg KCVkKSBleGNlZWRzIGhhcmR3YXJlIG1heAo+ID4gd2l0aCBzY2FsaW5nICgldSlcbiIsCj4gPiAr CQkJICAgICAgd2lkdGhfYnl0ZXMsIDQwOTYpOwo+ID4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAg CX0KPiA+ICAKPiA+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkgewo+ID4gLQkJaWYg KHN0YXRlLT5iYXNlLmZiKQo+ID4gLQkJCXBpeGVsX2Zvcm1hdCA9IHN0YXRlLT5iYXNlLmZiLT5m b3JtYXQtPmZvcm1hdDsKPiA+IC0JCS8qIHVzZSBzY2FsZXIgd2hlbiBjb2xvcmtleSBpcyBub3Qg cmVxdWlyZWQgKi8KPiA+IC0JCWlmICghc3RhdGUtPmNrZXkuZmxhZ3MpIHsKPiA+IC0JCQltaW5f c2NhbGUgPSAxOwo+ID4gLQkJCW1heF9zY2FsZSA9Cj4gPiAtCQkJCXNrbF9tYXhfc2NhbGUoY3J0 YywgY3J0Y19zdGF0ZSwKPiA+IHBpeGVsX2Zvcm1hdCk7Cj4gPiAtCQl9IGVsc2Ugewo+ID4gLQkJ CW1pbl9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKPiA+IC0JCQltYXhfc2Nh bGUgPSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7Cj4gPiAtCQl9Cj4gPiArCWlmICh3aWR0 aF9ieXRlcyA+IDQwOTYgfHwgZmItPnBpdGNoZXNbMF0gPiA0MDk2KSB7Cj4gPiArCQlEUk1fREVC VUdfS01TKCJTdHJpZGUgKCV1KSBleGNlZWRzIGhhcmR3YXJlIG1heCB3aXRoCj4gPiBzY2FsaW5n ICgldSlcbiIsCj4gPiArCQkJICAgICAgZmItPnBpdGNoZXNbMF0sIDQwOTYpOwo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQKPiA+ICtnNHhfc3ByaXRlX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxf cGxhbmUocGxhbmVfc3RhdGUtCj4gPiA+YmFzZS5wbGFuZSk7Cj4gPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiA+ICsJaW50 IG1heF9zY2FsZSwgbWluX3NjYWxlOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA8IDcpIHsKPiA+ICsJCW1pbl9zY2FsZSA9IDE7Cj4gPiArCQltYXhf c2NhbGUgPSAxNiA8PCAxNjsKPiA+ICsJfSBlbHNlIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYp KSB7Cj4gPiArCQltaW5fc2NhbGUgPSAxOwo+ID4gKwkJbWF4X3NjYWxlID0gMiA8PCAxNjsKPiA+ ICAJfSBlbHNlIHsKPiA+IC0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNykgewo+ID4gLQkJ CW1pbl9zY2FsZSA9IDE7Cj4gPiAtCQkJbWF4X3NjYWxlID0gMTYgPDwgMTY7Cj4gPiAtCQl9IGVs c2UgaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikpIHsKPiA+IC0JCQltaW5fc2NhbGUgPSAxOwo+ ID4gLQkJCW1heF9zY2FsZSA9IDIgPDwgMTY7Cj4gPiAtCQl9IGVsc2Ugewo+ID4gLQkJCW1pbl9z Y2FsZSA9IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKPiA+IC0JCQltYXhfc2NhbGUgPSBE Uk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7Cj4gPiAtCQl9Cj4gPiArCQltaW5fc2NhbGUgPSBE Uk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7Cj4gPiArCQltYXhfc2NhbGUgPSBEUk1fUExBTkVf SEVMUEVSX05PX1NDQUxJTkc7Cj4gPiAgCX0KPiA+ICAKPiA+IC0JcmV0ID0gZHJtX2F0b21pY19o ZWxwZXJfY2hlY2tfcGxhbmVfc3RhdGUoJnN0YXRlLT5iYXNlLAo+ID4gKwlyZXQgPSBkcm1fYXRv bWljX2hlbHBlcl9jaGVja19wbGFuZV9zdGF0ZSgmcGxhbmVfc3RhdGUtPmJhc2UsCj4gPiAgCQkJ CQkJICAmY3J0Y19zdGF0ZS0+YmFzZSwKPiA+ICAJCQkJCQkgIG1pbl9zY2FsZSwgbWF4X3NjYWxl LAo+ID4gIAkJCQkJCSAgdHJ1ZSwgdHJ1ZSk7Cj4gPiAgCWlmIChyZXQpCj4gPiAgCQlyZXR1cm4g cmV0Owo+ID4gIAo+ID4gLQlpZiAoc3RhdGUtPmJhc2UudmlzaWJsZSkgewo+ID4gLQkJc3RydWN0 IGRybV9yZWN0ICpzcmMgPSAmc3RhdGUtPmJhc2Uuc3JjOwo+ID4gLQkJc3RydWN0IGRybV9yZWN0 ICpkc3QgPSAmc3RhdGUtPmJhc2UuZHN0Owo+ID4gLQkJdW5zaWduZWQgaW50IGNydGNfdyA9IGRy bV9yZWN0X3dpZHRoKGRzdCk7Cj4gPiAtCQl1bnNpZ25lZCBpbnQgY3J0Y19oID0gZHJtX3JlY3Rf aGVpZ2h0KGRzdCk7Cj4gPiAtCQl1aW50MzJfdCBzcmNfeCwgc3JjX3ksIHNyY193LCBzcmNfaDsK PiA+ICsJaWYgKCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQo+ID4gKwkJcmV0dXJuIDA7Cj4g PiAgCj4gPiAtCQkvKgo+ID4gLQkJICogSGFyZHdhcmUgZG9lc24ndCBoYW5kbGUgc3VicGl4ZWwg Y29vcmRpbmF0ZXMuCj4gPiAtCQkgKiBBZGp1c3QgdG8gKG1hY3JvKXBpeGVsIGJvdW5kYXJ5LCBi dXQgYmUgY2FyZWZ1bCBub3QKPiA+IHRvCj4gPiAtCQkgKiBpbmNyZWFzZSB0aGUgc291cmNlIHZp ZXdwb3J0IHNpemUsIGJlY2F1c2UgdGhhdAo+ID4gY291bGQKPiA+IC0JCSAqIHB1c2ggdGhlIGRv d25zY2FsaW5nIGZhY3RvciBvdXQgb2YgYm91bmRzLgo+ID4gLQkJICovCj4gPiAtCQlzcmNfeCA9 IHNyYy0+eDEgPj4gMTY7Cj4gPiAtCQlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKHNyYykgPj4gMTY7 Cj4gPiAtCQlzcmNfeSA9IHNyYy0+eTEgPj4gMTY7Cj4gPiAtCQlzcmNfaCA9IGRybV9yZWN0X2hl aWdodChzcmMpID4+IDE2Owo+ID4gLQo+ID4gLQkJc3JjLT54MSA9IHNyY194IDw8IDE2Owo+ID4g LQkJc3JjLT54MiA9IChzcmNfeCArIHNyY193KSA8PCAxNjsKPiA+IC0JCXNyYy0+eTEgPSBzcmNf eSA8PCAxNjsKPiA+IC0JCXNyYy0+eTIgPSAoc3JjX3kgKyBzcmNfaCkgPDwgMTY7Cj4gPiAtCj4g PiAtCQlpZiAoZmItPmZvcm1hdC0+aXNfeXV2ICYmCj4gPiAtICAgIAkJICAgIGZiLT5mb3JtYXQt PmZvcm1hdCAhPSBEUk1fRk9STUFUX05WMTIgJiYKPiA+IC0JCSAgICAoc3JjX3ggJSAyIHx8IHNy Y193ICUgMikpIHsKPiA+IC0JCQlEUk1fREVCVUdfS01TKCJzcmMgeC93ICgldSwgJXUpIG11c3Qg YmUgYQo+ID4gbXVsdGlwbGUgb2YgMiBmb3IgWVVWIHBsYW5lc1xuIiwKPiA+IC0JCQkJICAgICAg c3JjX3gsIHNyY193KTsKPiA+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiA+IC0JCX0KPiA+ICsJcmV0 ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKPiA+ICsJ aWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAtCQkvKiBDaGVjayBzaXplIHJl c3RyaWN0aW9ucyB3aGVuIHNjYWxpbmcgKi8KPiA+IC0JCWlmIChzcmNfdyAhPSBjcnRjX3cgfHwg c3JjX2ggIT0gY3J0Y19oKSB7Cj4gPiAtCQkJdW5zaWduZWQgaW50IHdpZHRoX2J5dGVzOwo+ID4g LQkJCWludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4gPiAtCj4gPiAtCQkJd2lkdGhfYnl0 ZXMgPSAoKHNyY194ICogY3BwKSAmIDYzKSArIHNyY193ICoKPiA+IGNwcDsKPiA+IC0KPiA+IC0J CQkvKiBGSVhNRSBpbnRlcmxhY2luZyBtaW4gaGVpZ2h0IGlzIDYgKi8KPiA+IC0JCQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA8IDkgJiYgKAo+ID4gLQkJCSAgICAgc3JjX3cgPCAzIHx8IHNyY19o IDwgMyB8fAo+ID4gLQkJCSAgICAgc3JjX3cgPiAyMDQ4IHx8IHNyY19oID4gMjA0OCB8fAo+ID4g LQkJCSAgICAgY3J0Y193IDwgMyB8fCBjcnRjX2ggPCAzIHx8Cj4gPiAtCQkJICAgICB3aWR0aF9i eXRlcyA+IDQwOTYgfHwgZmItPnBpdGNoZXNbMF0gPgo+ID4gNDA5NikpIHsKPiA+IC0JCQkJRFJN X0RFQlVHX0tNUygiU291cmNlIGRpbWVuc2lvbnMgZXhjZWVkCj4gPiBoYXJkd2FyZSBsaW1pdHNc biIpOwo+ID4gLQkJCQlyZXR1cm4gLUVJTlZBTDsKPiA+IC0JCQl9Cj4gPiAtCQl9Cj4gPiAtCX0K PiA+ICsJcmV0ID0gZzR4X3Nwcml0ZV9jaGVja19zY2FsaW5nKGNydGNfc3RhdGUsIHBsYW5lX3N0 YXRlKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAtCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDkpIHsKPiA+IC0JCXJldCA9IHNrbF9jaGVja19wbGFuZV9z dXJmYWNlKGNydGNfc3RhdGUsIHN0YXRlKTsKPiA+IC0JCWlmIChyZXQpCj4gPiAtCQkJcmV0dXJu IHJldDsKPiA+ICsJcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsK PiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAtCQlzdGF0ZS0+Y3Rs ID0gc2tsX3BsYW5lX2N0bChjcnRjX3N0YXRlLCBzdGF0ZSk7Cj4gPiAtCX0gZWxzZSBpZiAoSVNf VkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gPiB7Cj4g PiAtCQlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RhdGUpOwo+ID4gLQkJaWYgKHJl dCkKPiA+IC0JCQlyZXR1cm4gcmV0Owo+ID4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA3 KQo+ID4gKwkJcGxhbmVfc3RhdGUtPmN0bCA9IGl2Yl9zcHJpdGVfY3RsKGNydGNfc3RhdGUsCj4g PiBwbGFuZV9zdGF0ZSk7Cj4gPiArCWVsc2UKPiA+ICsJCXBsYW5lX3N0YXRlLT5jdGwgPSBnNHhf c3ByaXRlX2N0bChjcnRjX3N0YXRlLAo+ID4gcGxhbmVfc3RhdGUpOwo+ID4gIAo+ID4gLQkJc3Rh dGUtPmN0bCA9IHZsdl9zcHJpdGVfY3RsKGNydGNfc3RhdGUsIHN0YXRlKTsKPiA+IC0JfSBlbHNl IGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDcpIHsKPiA+IC0JCXJldCA9IGk5eHhfY2hlY2tf cGxhbmVfc3VyZmFjZShzdGF0ZSk7Cj4gPiAtCQlpZiAocmV0KQo+ID4gLQkJCXJldHVybiByZXQ7 Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICAKPiA+IC0JCXN0YXRlLT5jdGwgPSBpdmJfc3By aXRlX2N0bChjcnRjX3N0YXRlLCBzdGF0ZSk7Cj4gPiAtCX0gZWxzZSB7Cj4gPiAtCQlyZXQgPSBp OXh4X2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RhdGUpOwo+ID4gLQkJaWYgKHJldCkKPiA+IC0JCQly ZXR1cm4gcmV0Owo+ID4gK3N0YXRpYyBpbnQKPiA+ICt2bHZfc3ByaXRlX2NoZWNrKHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJIHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQg PSBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19wbGFuZV9zdGF0ZSgmcGxhbmVfc3RhdGUtPmJhc2Us Cj4gPiArCQkJCQkJICAmY3J0Y19zdGF0ZS0+YmFzZSwKPiA+ICsJCQkJCQkgIERSTV9QTEFORV9I RUxQRVJfTk9fUwo+ID4gQ0FMSU5HLAo+ID4gKwkJCQkJCSAgRFJNX1BMQU5FX0hFTFBFUl9OT19T Cj4gPiBDQUxJTkcsCj4gPiArCQkJCQkJICB0cnVlLCB0cnVlKTsKPiA+ICsJaWYgKHJldCkKPiA+ ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJs ZSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19z cmNfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJu IHJldDsKPiAKPiBMb29rcyBsaWtlIGl0IGlzIG1pc3NpbmcgYSBnNHhfc3ByaXRlX2NoZWNrX3Nj YWxpbmcoKSBjYWxsIGZvciBWTFYvQ0hWLgoKTm90IG5lZWRlZCBzaW5jZSBWTFYvQ0hWIHNwcml0 ZXMgY2FuJ3Qgc2NhbGUuCgo+IAo+IAo+IE90aGVyIHRoYW4gdGhlIDIgY29tbWVudHMgYWJvdmU6 Cj4gCj4gUmV2aWV3ZWQtYnk6IEpvc8OpIFJvYmVydG8gZGUgU291emEgPGpvc2Uuc291emFAaW50 ZWwuY29tPgo+IAo+ID4gKwo+ID4gKwlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2UocGxh bmVfc3RhdGUpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJ cGxhbmVfc3RhdGUtPmN0bCA9IHZsdl9zcHJpdGVfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRl KTsKPiA+ICAKPiA+IC0JCXN0YXRlLT5jdGwgPSBnNHhfc3ByaXRlX2N0bChjcnRjX3N0YXRlLCBz dGF0ZSk7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgc2tsX3BsYW5lX2No ZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJICAgIHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtCj4gPiA+YmFzZS5w bGFuZSk7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo cGxhbmUtPmJhc2UuZGV2KTsKPiA+ICsJaW50IG1heF9zY2FsZSwgbWluX3NjYWxlOwo+ID4gKwlp bnQgcmV0Owo+ID4gKwo+ID4gKwkvKiB1c2Ugc2NhbGVyIHdoZW4gY29sb3JrZXkgaXMgbm90IHJl cXVpcmVkICovCj4gPiArCWlmICghcGxhbmVfc3RhdGUtPmNrZXkuZmxhZ3MpIHsKPiA+ICsJCWNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtCj4gPiA+YmFzZS5m YjsKPiA+ICsKPiA+ICsJCW1pbl9zY2FsZSA9IDE7Cj4gPiArCQltYXhfc2NhbGUgPSBza2xfbWF4 X3NjYWxlKGNydGNfc3RhdGUsCj4gPiArCQkJCQkgIGZiID8gZmItPmZvcm1hdC0+Zm9ybWF0IDog MCk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQltaW5fc2NhbGUgPSBEUk1fUExBTkVfSEVMUEVSX05P X1NDQUxJTkc7Cj4gPiArCQltYXhfc2NhbGUgPSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7 Cj4gPiAgCX0KPiA+ICAKPiA+ICsJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfcGxhbmVf c3RhdGUoJnBsYW5lX3N0YXRlLT5iYXNlLAo+ID4gKwkJCQkJCSAgJmNydGNfc3RhdGUtPmJhc2Us Cj4gPiArCQkJCQkJICBtaW5fc2NhbGUsIG1heF9zY2FsZSwKPiA+ICsJCQkJCQkgIHRydWUsIHRy dWUpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJaWYgKCFw bGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCXJl dCA9IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7Cj4gPiAr CWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBza2xfY2hlY2tf cGxhbmVfc3VyZmFjZShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4gPiArCWlmIChyZXQpCj4g PiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlwbGFuZV9zdGF0ZS0+Y3RsID0gc2tsX3BsYW5l X2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4gPiArCj4gPiAgCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQo+ID4gLQkJc3RhdGUt PmNvbG9yX2N0bCA9IGdsa19wbGFuZV9jb2xvcl9jdGwoY3J0Y19zdGF0ZSwKPiA+IHN0YXRlKTsK PiA+ICsJCXBsYW5lX3N0YXRlLT5jb2xvcl9jdGwgPQo+ID4gZ2xrX3BsYW5lX2NvbG9yX2N0bChj cnRjX3N0YXRlLAo+ID4gKwkJCQkJCQkgICAgIHBsYW5lX3N0YXQKPiA+IGUpOwo+ID4gIAo+ID4g IAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiBAQCAtMTU1OSw2ICsxNjM1LDcgQEAgaW50ZWxfc3ByaXRl X3BsYW5lX2NyZWF0ZShzdHJ1Y3QKPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4g IAkJaW50ZWxfcGxhbmUtPnVwZGF0ZV9wbGFuZSA9IHNrbF91cGRhdGVfcGxhbmU7Cj4gPiAgCQlp bnRlbF9wbGFuZS0+ZGlzYWJsZV9wbGFuZSA9IHNrbF9kaXNhYmxlX3BsYW5lOwo+ID4gIAkJaW50 ZWxfcGxhbmUtPmdldF9od19zdGF0ZSA9IHNrbF9wbGFuZV9nZXRfaHdfc3RhdGU7Cj4gPiArCQlp bnRlbF9wbGFuZS0+Y2hlY2tfcGxhbmUgPSBza2xfcGxhbmVfY2hlY2s7Cj4gPiAgCj4gPiAgCQlp ZiAoc2tsX3BsYW5lX2hhc19wbGFuYXIoZGV2X3ByaXYsIHBpcGUsCj4gPiAgCQkJCQkgUExBTkVf U1BSSVRFMCArIHBsYW5lKSkgewo+ID4gQEAgLTE1ODAsNiArMTY1Nyw3IEBAIGludGVsX3Nwcml0 ZV9wbGFuZV9jcmVhdGUoc3RydWN0Cj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ ICAJCWludGVsX3BsYW5lLT51cGRhdGVfcGxhbmUgPSB2bHZfdXBkYXRlX3BsYW5lOwo+ID4gIAkJ aW50ZWxfcGxhbmUtPmRpc2FibGVfcGxhbmUgPSB2bHZfZGlzYWJsZV9wbGFuZTsKPiA+ICAJCWlu dGVsX3BsYW5lLT5nZXRfaHdfc3RhdGUgPSB2bHZfcGxhbmVfZ2V0X2h3X3N0YXRlOwo+ID4gKwkJ aW50ZWxfcGxhbmUtPmNoZWNrX3BsYW5lID0gdmx2X3Nwcml0ZV9jaGVjazsKPiA+ICAKPiA+ICAJ CXBsYW5lX2Zvcm1hdHMgPSB2bHZfcGxhbmVfZm9ybWF0czsKPiA+ICAJCW51bV9wbGFuZV9mb3Jt YXRzID0gQVJSQVlfU0laRSh2bHZfcGxhbmVfZm9ybWF0cyk7Cj4gPiBAQCAtMTU5MSw2ICsxNjY5 LDcgQEAgaW50ZWxfc3ByaXRlX3BsYW5lX2NyZWF0ZShzdHJ1Y3QKPiA+IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ID4gIAkJaW50ZWxfcGxhbmUtPnVwZGF0ZV9wbGFuZSA9IGl2Yl91cGRh dGVfcGxhbmU7Cj4gPiAgCQlpbnRlbF9wbGFuZS0+ZGlzYWJsZV9wbGFuZSA9IGl2Yl9kaXNhYmxl X3BsYW5lOwo+ID4gIAkJaW50ZWxfcGxhbmUtPmdldF9od19zdGF0ZSA9IGl2Yl9wbGFuZV9nZXRf aHdfc3RhdGU7Cj4gPiArCQlpbnRlbF9wbGFuZS0+Y2hlY2tfcGxhbmUgPSBnNHhfc3ByaXRlX2No ZWNrOwo+ID4gIAo+ID4gIAkJcGxhbmVfZm9ybWF0cyA9IHNuYl9wbGFuZV9mb3JtYXRzOwo+ID4g IAkJbnVtX3BsYW5lX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHNuYl9wbGFuZV9mb3JtYXRzKTsKPiA+ IEBAIC0xNjAyLDYgKzE2ODEsNyBAQCBpbnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKHN0cnVjdAo+ ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQlpbnRlbF9wbGFuZS0+dXBkYXRl X3BsYW5lID0gZzR4X3VwZGF0ZV9wbGFuZTsKPiA+ICAJCWludGVsX3BsYW5lLT5kaXNhYmxlX3Bs YW5lID0gZzR4X2Rpc2FibGVfcGxhbmU7Cj4gPiAgCQlpbnRlbF9wbGFuZS0+Z2V0X2h3X3N0YXRl ID0gZzR4X3BsYW5lX2dldF9od19zdGF0ZTsKPiA+ICsJCWludGVsX3BsYW5lLT5jaGVja19wbGFu ZSA9IGc0eF9zcHJpdGVfY2hlY2s7Cj4gPiAgCj4gPiAgCQltb2RpZmllcnMgPSBpOXh4X3BsYW5l X2Zvcm1hdF9tb2RpZmllcnM7Cj4gPiAgCQlpZiAoSVNfR0VONihkZXZfcHJpdikpIHsKPiA+IEBA IC0xNjM0LDcgKzE3MTQsNiBAQCBpbnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKHN0cnVjdAo+ID4g ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCWludGVsX3BsYW5lLT5pOXh4X3BsYW5l ID0gcGxhbmU7Cj4gPiAgCWludGVsX3BsYW5lLT5pZCA9IFBMQU5FX1NQUklURTAgKyBwbGFuZTsK PiA+ICAJaW50ZWxfcGxhbmUtPmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBp cGUsCj4gPiBpbnRlbF9wbGFuZS0+aWQpOwo+ID4gLQlpbnRlbF9wbGFuZS0+Y2hlY2tfcGxhbmUg PSBpbnRlbF9jaGVja19zcHJpdGVfcGxhbmU7Cj4gPiAgCj4gPiAgCXBvc3NpYmxlX2NydGNzID0g KDEgPDwgcGlwZSk7Cj4gPiAgCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=