From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v4 9/9] Gen-12 display can decompress surfaces compressed by the media engine. Date: Fri, 4 Oct 2019 18:36:43 +0300 Message-ID: <20191004153643.GG1208@intel.com> References: <20190923102935.5860-10-dhinakaran.pandiyan@intel.com> <20190926105512.25818-1-dhinakaran.pandiyan@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id BC13B6EBD4 for ; Fri, 4 Oct 2019 15:36:46 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190926105512.25818-1-dhinakaran.pandiyan@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dhinakaran Pandiyan Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBTZXAgMjYsIDIwMTkgYXQgMDM6NTU6MTJBTSAtMDcwMCwgRGhpbmFrYXJhbiBQYW5k aXlhbiB3cm90ZToKPiBEZXRlY3QgdGhlIG1vZGlmaWVyIGNvcnJlc3BvbmRpbmcgdG8gbWVkaWEg Y29tcHJlc3Npb24gdG8gZW5hYmxlCj4gZGlzcGxheSBkZWNvbXByZXNzaW9uIGZvciBZVVYgYW5k IHhSR0IgcGFja2VkIGZvcm1hdHMuIEEgbmV3IG1vZGlmaWVyIGlzCj4gYWRkZWQgc28gdGhhdCB0 aGUgZHJpdmVyIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1lZGlhIGFuZCByZW5kZXIKPiBjb21w cmVzc2VkIGJ1ZmZlcnMuIFVubGlrZSByZW5kZXIgZGVjb21wcmVzc2lvbiwgcGxhbmUgNiBhbmQg IHBsYW5lIDcgZG8gbm90Cj4gc3VwcG9ydCBtZWRpYSBkZWNvbXByZXNzaW9uLgo+IAo+IHYyOiBG aXggY2hlY2twYXRjaCB3YXJuaW5ncyBvbiBjb2RlIHN0eWxlIChMdWNhcykKPiAKPiBGcm9tIERL Ogo+IFNlcGFyYXRlIG1vZGlmaWVyIGFycmF5IGZvciBwbGFuZXMgdGhhdCBjYW5ub3QgZGVjb21w cmVzcyBtZWRpYSAoVmlsbGUpCj4gCj4gdjM6IFN1cHBvcnQgcGxhbmFyIGZvcm1hdHMKPiB2NDog U3dpdGNoIHBsYW5lIG9yZGVyCj4gCj4gQ2M6IE5hbmxleSBHIENoZXJ5IDxuYW5sZXkuZy5jaGVy eUBpbnRlbC5jb20+Cj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20+Cj4gQ2M6IE1hdHQgUm9wZXIgPG1hdHRoZXcuZC5yb3BlckBpbnRlbC5jb20+Cj4g U2lnbmVkLW9mZi1ieTogRGhpbmFrYXJhbiBQYW5kaXlhbiA8ZGhpbmFrYXJhbi5wYW5kaXlhbkBp bnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTHVjYXMgRGUgTWFyY2hpIDxsdWNhcy5kZW1hcmNo aUBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheS5jICB8IDI5MCArKysrKysrKysrKysrLS0tLS0KPiAgLi4uL2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZGlzcGxheV90eXBlcy5oICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMgICB8ICA1NSArKystCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVnLmggICAgICAgICAgICAgICB8ICAgMSArCj4gIDQgZmlsZXMgY2hhbmdl ZCwgMjY3IGluc2VydGlvbnMoKyksIDgxIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXggOGVhNTVkNjc0NDJjLi5k ZjNlYmFhMTY3YWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXkuYwo+IEBAIC0xODg4LDYgKzE4ODgsMjIgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGlz YWJsZV9waXBlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkK PiAgCQlpbnRlbF93YWl0X2Zvcl9waXBlX29mZihvbGRfY3J0Y19zdGF0ZSk7Cj4gIH0KPiAgCj4g K2Jvb2wgaXNfY2NzX21vZGlmaWVyKHU2NCBtb2RpZmllcikKPiArewo+ICsJcmV0dXJuIG1vZGlm aWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUyB8fAo+ICsJICAgICAg IG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUyB8fAo+ICsJ ICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAo+ICsJICAg ICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7Cj4gK30KPiArCj4g K3N0YXRpYyBib29sIGlzX2Njc19wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IGNvbG9yX3BsYW5lKQo+ICt7Cj4gKwlpZiAoIWlzX2Njc19tb2RpZmllcihmYi0+bW9k aWZpZXIpKQo+ICsJCXJldHVybiBmYWxzZTsKCkEgY29tbWVudCBoZXJlIGNvdWxkIGhlbHAgY2xh cmlmeSB0aGluZ3MgZm9yIHRoZSByZWFkZXIuIEVnLjoKLyoKICogWzBdIFJHQgogKiBbMV0gUkdC IENDUwogKiBvcgogKiBbMF0gWQogKiBbMV0gQ2JDcgogKiBbMl0gWSBDQ1MKICogWzNdIENiQ3Ig Q0NTCiAqLwoKPiArCj4gKwlyZXR1cm4gY29sb3JfcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3Bs YW5lcyAvIDI7Cj4gK30KPiArCj4gIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9zaXpl KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+ICAJcmV0dXJu IElTX0dFTihkZXZfcHJpdiwgMikgPyAyMDQ4IDogNDA5NjsKPiBAQCAtMTkwOCwxMSArMTkyNCwx MyBAQCBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiLCBpbnQgY29sb3JfcGxhbmUpCj4gIAkJZWxzZQo+ICAJCQlyZXR1cm4gNTEyOwo+ICAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gLQkJaWYgKGNvbG9yX3BsYW5lID09IDEp Cj4gKwkJaWYgKGlzX2Njc19wbGFuZShmYiwgY29sb3JfcGxhbmUpKQo+ICAJCQlyZXR1cm4gMTI4 Owo+ICAJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9HRU4xMl9NQ19DQ1M6Cj4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gIAljYXNlIEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUzoKPiAtCQlpZiAoY29sb3JfcGxhbmUgPT0gMSkK PiArCQlpZiAoaXNfY2NzX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkpCj4gIAkJCXJldHVybiA2NDsK PiAgCQkvKiBmYWxsIHRocm91Z2ggKi8KPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6 Cj4gQEAgLTE5MjEsNyArMTkzOSw3IEBAIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKPiAgCQllbHNlCj4gIAkJ CXJldHVybiA1MTI7Cj4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gLQkJ aWYgKGNvbG9yX3BsYW5lID09IDEpCj4gKwkJaWYgKGlzX2Njc19wbGFuZShmYiwgY29sb3JfcGxh bmUpKQo+ICAJCQlyZXR1cm4gMTI4Owo+ICAJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ICAJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4gQEAgLTE5NDksOCArMTk2Nyw5IEBAIHN0YXRpYyB1 bnNpZ25lZCBpbnQKPiAgaW50ZWxfdGlsZV9oZWlnaHQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKPiAgewo+ICAJc3dpdGNoIChmYi0+bW9kaWZpZXIp IHsKPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgo+ICAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6Cj4gLQkJaWYgKGNvbG9yX3Bs YW5lID09IDEpCj4gKwkJaWYgKGlzX2Njc19wbGFuZShmYiwgY29sb3JfcGxhbmUpKQo+ICAJCQly ZXR1cm4gMTsKPiAgCQkvKiBmYWxsIHRocm91Z2ggKi8KPiAgCWRlZmF1bHQ6Cj4gQEAgLTIwNTUs NiArMjA3NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfc3VyZl9hbGlnbm1lbnQoY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gIAkJaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gOSkKPiAgCQkJcmV0dXJuIDI1NiAqIDEwMjQ7Cj4gIAkJcmV0dXJuIDA7Cj4gKwljYXNl IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKPiAgCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTOgo+ICAJCXJldHVybiAxNiAqIDEwMjQ7Cj4gIAlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiBAQCAtMjI1NCwxMCArMjI3NCwxNyBA QCBzdGF0aWMgdTMyIGludGVsX2FkanVzdF90aWxlX29mZnNldChpbnQgKngsIGludCAqeSwKPiAg CXJldHVybiBuZXdfb2Zmc2V0Owo+ICB9Cj4gIAo+IC1zdGF0aWMgYm9vbCBpc19zdXJmYWNlX2xp bmVhcih1NjQgbW9kaWZpZXIsIGludCBjb2xvcl9wbGFuZSkKPiArc3RhdGljIGJvb2wgaXNfc3Vy ZmFjZV9saW5lYXIoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9w bGFuZSkKPiAgewo+IC0JcmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8 fAo+IC0JICAgICAgIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9S Q19DQ1MgJiYgY29sb3JfcGxhbmUgPT0gMSk7Cj4gKwlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewo+ ICsJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwljYXNl IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUzoKPiArCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgo+ICsJCXJldHVybiBpc19jY3NfcGxhbmUoZmIs IGNvbG9yX3BsYW5lKTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICB9 Cj4gIAo+ICBzdGF0aWMgdTMyIGludGVsX2FkanVzdF9hbGlnbmVkX29mZnNldChpbnQgKngsIGlu dCAqeSwKPiBAQCAtMjI3Miw3ICsyMjk5LDcgQEAgc3RhdGljIHUzMiBpbnRlbF9hZGp1c3RfYWxp Z25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gIAo+ICAJV0FSTl9PTihuZXdfb2Zmc2V0ID4g b2xkX29mZnNldCk7Cj4gIAo+IC0JaWYgKCFpc19zdXJmYWNlX2xpbmVhcihmYi0+bW9kaWZpZXIs IGNvbG9yX3BsYW5lKSkgewo+ICsJaWYgKCFpc19zdXJmYWNlX2xpbmVhcihmYiwgY29sb3JfcGxh bmUpKSB7Cj4gIAkJdW5zaWduZWQgaW50IHRpbGVfc2l6ZSwgdGlsZV93aWR0aCwgdGlsZV9oZWln aHQ7Cj4gIAkJdW5zaWduZWQgaW50IHBpdGNoX3RpbGVzOwo+ICAKPiBAQCAtMjM0Miw3ICsyMzY5 LDcgQEAgc3RhdGljIHUzMiBpbnRlbF9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCWlmIChhbGlnbm1lbnQpCj4gIAkJYWxpZ25tZW50 LS07Cj4gIAo+IC0JaWYgKCFpc19zdXJmYWNlX2xpbmVhcihmYi0+bW9kaWZpZXIsIGNvbG9yX3Bs YW5lKSkgewo+ICsJaWYgKCFpc19zdXJmYWNlX2xpbmVhcihmYiwgY29sb3JfcGxhbmUpKSB7Cj4g IAkJdW5zaWduZWQgaW50IHRpbGVfc2l6ZSwgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQ7Cj4gIAkJ dW5zaWduZWQgaW50IHRpbGVfcm93cywgdGlsZXMsIHBpdGNoX3RpbGVzOwo+ICAKPiBAQCAtMjQ0 NSw2ICsyNDcyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9mYl9tb2RpZmllcl90b190 aWxpbmcodTY0IGZiX21vZGlmaWVyKQo+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoK PiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+ICAJY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEX0dFTjEyX01DX0NDUzoKPiAgCQlyZXR1cm4gSTkxNV9USUxJTkdfWTsKPiAgCWRlZmF1bHQ6 Cj4gIAkJcmV0dXJuIEk5MTVfVElMSU5HX05PTkU7Cj4gQEAgLTI0OTQsNiArMjUyMiwxMyBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyBnZW4xMl9jY3NfZm9ybWF0c1tdID0g ewo+ICAJICAuY3BwID0geyA0LCAxLCB9LCAuaHN1YiA9IDIsIC52c3ViID0gMzIsIC5oYXNfYWxw aGEgPSB0cnVlIH0sCj4gIH07Cj4gIAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRf aW5mbyBnZW4xMl9tY19jY3NfZm9ybWF0c1tdID0gewo+ICsJeyAuZm9ybWF0ID0gRFJNX0ZPUk1B VF9ZVVlWLCAubnVtX3BsYW5lcyA9IDIsCj4gKwkgIC5jcHAgPSB7IDIsIDEsIH0sIC5oc3ViID0g NCwgLnZzdWIgPSAzMiwgLmlzX3l1diA9IHRydWUgfSwKPiArCXsgLmZvcm1hdCA9IERSTV9GT1JN QVRfTlYxMiwgLm51bV9wbGFuZXMgPSA0LAo+ICsJICAuY3BwID0geyAxLCAyLCAxLCAxfSwgLmhz dWIgPSAyLCAudnN1YiA9IDIsIC5pc195dXYgPSB0cnVlIH0sCj4gK307Cj4gKwo+ICBzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqCj4gIGxvb2t1cF9mb3JtYXRfaW5mbyhjb25z dCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvIGZvcm1hdHNbXSwKPiAgCQkgICBpbnQgbnVtX2Zvcm1h dHMsIHUzMiBmb3JtYXQpCj4gQEAgLTI1MTEsMTIgKzI1NDYsMjEgQEAgbG9va3VwX2Zvcm1hdF9p bmZvKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gZm9ybWF0c1tdLAo+ICBzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqCj4gIGludGVsX2dldF9mb3JtYXRfaW5mbyhjb25z dCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqY21kKQo+ICB7Cj4gKwljb25zdCBzdHJ1Y3QgZHJt X2Zvcm1hdF9pbmZvICppbmZvOwo+ICsKPiAgCXN3aXRjaCAoY21kLT5tb2RpZmllclswXSkgewo+ ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gIAljYXNlIEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRF9DQ1M6Cj4gIAkJcmV0dXJuIGxvb2t1cF9mb3JtYXRfaW5mbyhza2xfY2Nz X2Zvcm1hdHMsCj4gIAkJCQkJICBBUlJBWV9TSVpFKHNrbF9jY3NfZm9ybWF0cyksCj4gIAkJCQkJ ICBjbWQtPnBpeGVsX2Zvcm1hdCk7Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dF TjEyX01DX0NDUzoKPiArCQlpbmZvID0gbG9va3VwX2Zvcm1hdF9pbmZvKGdlbjEyX21jX2Njc19m b3JtYXRzLAo+ICsJCQkJCSAgQVJSQVlfU0laRShnZW4xMl9tY19jY3NfZm9ybWF0cyksCj4gKwkJ CQkJICBjbWQtPnBpeGVsX2Zvcm1hdCk7Cj4gKwkJaWYgKGluZm8pCj4gKwkJCXJldHVybiBpbmZv Owo+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9HRU4xMl9SQ19DQ1M6Cj4gIAkJcmV0dXJuIGxvb2t1cF9mb3JtYXRfaW5mbyhnZW4xMl9jY3Nf Zm9ybWF0cywKPiAgCQkJCQkgIEFSUkFZX1NJWkUoZ2VuMTJfY2NzX2Zvcm1hdHMpLAo+IEBAIC0y NTI2LDEzICsyNTcwLDYgQEAgaW50ZWxfZ2V0X2Zvcm1hdF9pbmZvKGNvbnN0IHN0cnVjdCBkcm1f bW9kZV9mYl9jbWQyICpjbWQpCj4gIAl9Cj4gIH0KPiAgCj4gLWJvb2wgaXNfY2NzX21vZGlmaWVy KHU2NCBtb2RpZmllcikKPiAtewo+IC0JcmV0dXJuIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX1JDX0NDUyB8fAo+IC0JICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0NDUyB8fAo+IC0JICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRF9DQ1M7Cj4gLX0KPiAtCj4gIHUzMiBpbnRlbF9wbGFuZV9mYl9tYXhfc3Ry aWRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQkJICAgICAgdTMyIHBp eGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyKQo+ICB7Cj4gQEAgLTI1NzYsNyArMjYxMyw3IEBAIGlu dGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs IGludCBjb2xvcl9wbGFuZSkKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZmItPmRldik7Cj4gIAl1MzIgdGlsZV93aWR0aDsKPiAgCj4gLQlpZiAoaXNfc3Vy ZmFjZV9saW5lYXIoZmItPm1vZGlmaWVyLCBjb2xvcl9wbGFuZSkpIHsKPiArCWlmIChpc19zdXJm YWNlX2xpbmVhcihmYiwgY29sb3JfcGxhbmUpKSB7Cj4gIAkJdTMyIG1heF9zdHJpZGUgPSBpbnRl bF9wbGFuZV9mYl9tYXhfc3RyaWRlKGRldl9wcml2LAo+ICAJCQkJCQkJICAgZmItPmZvcm1hdC0+ Zm9ybWF0LAo+ICAJCQkJCQkJICAgZmItPm1vZGlmaWVyKTsKPiBAQCAtMjU5Miw3ICsyNjI5LDcg QEAgaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgaW50IGNvbG9yX3BsYW5lKQo+ICAJfQo+ICAKPiAgCXRpbGVfd2lkdGggPSBpbnRlbF90 aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Cj4gLQlpZiAoaXNfY2NzX21vZGlmaWVy KGZiLT5tb2RpZmllcikgJiYgY29sb3JfcGxhbmUgPT0gMCkgewo+ICsJaWYgKGlzX2Njc19tb2Rp ZmllcihmYi0+bW9kaWZpZXIpKSB7Cj4gIAkJLyoKPiAgCQkgKiBEaXNwbGF5IFdBICMwNTMxOiBz a2wsYnh0LGtibCxnbGsKPiAgCQkgKgo+IEBAIC0yNjAyLDcgKzI2MzksNyBAQCBpbnRlbF9mYl9z dHJpZGVfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29s b3JfcGxhbmUpCj4gIAkJICogcmVxdWlyZSB0aGUgZW50aXJlIGZiIHRvIGFjY29tbW9kYXRlIHRo YXQgdG8gYXZvaWQKPiAgCQkgKiBwb3RlbnRpYWwgcnVudGltZSBlcnJvcnMgYXQgcGxhbmUgY29u ZmlndXJhdGlvbiB0aW1lLgo+ICAJCSAqLwo+IC0JCWlmIChJU19HRU4oZGV2X3ByaXYsIDkpICYm IGZiLT53aWR0aCA+IDM4NDApCj4gKwkJaWYgKElTX0dFTihkZXZfcHJpdiwgOSkgJiYgY29sb3Jf cGxhbmUgPT0gMCAmJiBmYi0+d2lkdGggPiAzODQwKQo+ICAJCQl0aWxlX3dpZHRoICo9IDQ7Cj4g IAkJLyoKPiAgCQkgKiBUaGUgbWFpbiBzdXJmYWNlIHBpdGNoIG11c3QgYmUgcGFkZGVkIHRvIGEg bXVsdGlwbGUgb2YgZm91cgo+IEBAIC0yNjgyLDI1ICsyNzE5LDc1IEBAIHN0YXRpYyBib29sIGlu dGVsX3BsYW5lX25lZWRzX3JlbWFwKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCj4gIAlyZXR1cm4gc3RyaWRlID4gbWF4X3N0cmlkZTsKPiAgfQo+ICAKPiArc3Rh dGljIHZvaWQKPiAraW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAqaHN1YiwgaW50 ICp2c3ViLCBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5l KQo+ICt7Cj4gKwlpbnQgaTsKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+ICsJCXUzMiBmb3Jt YXQ7Cj4gKwkJaW50IHZzdWJbNF07Cj4gKwkJaW50IGhzdWJbNF07Cj4gKwl9IG1jX2Njc19zdWJz YW1wbGluZ1tdID0geyB7IC5oc3ViID0geyAxLCAyLCA4LCAxNiB9LAo+ICsJCQkJICAgICAudnN1 YiA9IHsgMSwgMiwgMzIsIDMyIH0sCj4gKwkJCQkgICAgIC5mb3JtYXQgPSBEUk1fRk9STUFUX05W MTIsIH0sCj4gKwkJCQkgfTsKPiArCj4gKwkqaHN1YiA9IGZiLT5mb3JtYXQtPmhzdWI7Cj4gKwkq dnN1YiA9IGZiLT5mb3JtYXQtPnZzdWI7Cj4gKwo+ICsJaWYgKGZiLT5tb2RpZmllciA9PSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1MgJiYKPiArCSAgICBmYi0+Zm9ybWF0LT5u dW1fcGxhbmVzID09IDQpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtY19jY3Nf c3Vic2FtcGxpbmcpOyBpKyspIHsKPiArCQkJaWYgIChtY19jY3Nfc3Vic2FtcGxpbmdbaV0uZm9y bWF0ID09IGZiLT5mb3JtYXQtPmZvcm1hdCkgewo+ICsJCQkJKmhzdWIgPSBtY19jY3Nfc3Vic2Ft cGxpbmdbaV0uaHN1Yltjb2xvcl9wbGFuZV07Cj4gKwkJCQkqdnN1YiA9IG1jX2Njc19zdWJzYW1w bGluZ1tpXS52c3ViW2NvbG9yX3BsYW5lXTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJfQo+ ICsJCVdBUk5fT04oaSA9PSBBUlJBWV9TSVpFKG1jX2Njc19zdWJzYW1wbGluZykpOwo+ICsJfQoK SG1tLiBJIHdvbmRlciBpZiB3ZSBjb3VsZCBzd2l0Y2ggb3ZlciB0byB0aGF0IGJsb2NrIHNpemUg c3R1ZmYKaW4gdGhlIGZvcm1hdCBpbmZvPyBBcyBpcyBJIGRvbid0IHRoaW5rIGZyYW1lYnVmZmVy X2NoZWNrKCkgd2lsbApkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIHRoaXMgc3R1ZmYuCgo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZAo+ICtpbnRlbF9mYl9wbGFuZV9kaW1zKGludCAqdywgaW50ICpoLCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQo+ICt7Cj4gKwlpbnQg aHN1YiwgdnN1YjsKPiArCj4gKwlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWIs ICZ2c3ViLCBmYiwgY29sb3JfcGxhbmUpOwo+ICsJKncgPSBmYi0+d2lkdGgvaHN1YjsKPiArCSpo ID0gZmItPmhlaWdodC92c3ViOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50Cj4gLWludGVsX2ZiX2No ZWNrX2Njc194eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHgsIGludCB5KQo+ICtp bnRlbF9mYl9jaGVja19jY3NfeHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBhdXhf cGxhbmUsIGludCB4LCBpbnQgeSkKPiAgewo+ICAJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICpp bnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiAtCWludCBoc3ViID0gZmItPmZv cm1hdC0+aHN1YjsKPiAtCWludCB2c3ViID0gZmItPmZvcm1hdC0+dnN1YjsKPiArCWludCBoc3Vi LCB2c3ViOwo+ICsJaW50IGhzdWJfbWFpbiwgdnN1Yl9tYWluOwo+ICAJaW50IHRpbGVfd2lkdGgs IHRpbGVfaGVpZ2h0Owo+ICAJaW50IGNjc194LCBjY3NfeTsKPiAgCWludCBtYWluX3gsIG1haW5f eTsKPiArCWludCBtYWluX3BsYW5lOwo+ICsKPiArCWlmICghaXNfY2NzX3BsYW5lKGZiLCBhdXhf cGxhbmUpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCW1haW5fcGxhbmUgPSAoYXV4X3BsYW5lIC0g MSkgLyAyOwoKJ2F1eF9wbGFuZSAtIG51bV9wbGFuZXMvMicgbWlnaHQgYmUgYSBjbGVhcmVyIHdh eSB0byB3cml0ZSB0aGF0LgpUaGUgbnVtX3BsYW5lcy8yIGFscmVhZHkgbWFkZSBhbiBhcHBlYXJh bmNlIGluIHRoZSBpc19jY3NfcGxhbmUoKSB0aGluZy4KCkNvdWxkIGFsc28gZXh0cmFjdCB0aGlz IHRvIGEgc21hbGwgaGVscGVyIHRvIGhlbHAgcmVhZGFiaWxpdHkuCgo+ICsJaW50ZWxfdGlsZV9k aW1zKGZiLCBhdXhfcGxhbmUsICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQpOwo+ICsJaW50ZWxf ZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGF1eF9wbGFuZSk7Cj4g KwlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWJfbWFpbiwgJnZzdWJfbWFpbiwg ZmIsCj4gKwkJCQkgICAgICAgbWFpbl9wbGFuZSk7Cj4gIAo+IC0JaW50ZWxfdGlsZV9kaW1zKGZi LCAxLCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0KTsKPiArCWhzdWIgLz0gaHN1Yl9tYWluOwo+ ICsJdnN1YiAvPSB2c3ViX21haW47Cj4gIAo+ICAJdGlsZV93aWR0aCAqPSBoc3ViOwo+ICAJdGls ZV9oZWlnaHQgKj0gdnN1YjsKPiAgCj4gIAljY3NfeCA9ICh4ICogaHN1YikgJSB0aWxlX3dpZHRo Owo+ICAJY2NzX3kgPSAoeSAqIHZzdWIpICUgdGlsZV9oZWlnaHQ7Cj4gLQltYWluX3ggPSBpbnRl bF9mYi0+bm9ybWFsWzBdLnggJSB0aWxlX3dpZHRoOwo+IC0JbWFpbl95ID0gaW50ZWxfZmItPm5v cm1hbFswXS55ICUgdGlsZV9oZWlnaHQ7Cj4gKwltYWluX3ggPSBpbnRlbF9mYi0+bm9ybWFsW21h aW5fcGxhbmVdLnggJSB0aWxlX3dpZHRoOwo+ICsJbWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFtt YWluX3BsYW5lXS55ICUgdGlsZV9oZWlnaHQ7Cj4gIAo+ICAJLyoKPiAgCSogQ0NTIGRvZXNuJ3Qg aGF2ZSBpdHMgb3duIHgveSBvZmZzZXQgcmVnaXN0ZXIsIHNvIHRoZSBpbnRyYSBDQ1MgdGlsZQo+ IEBAIC0yNzEwLDggKzI3OTcsOCBAQCBpbnRlbF9mYl9jaGVja19jY3NfeHkoc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSkKPiAgCQlEUk1fREVCVUdfS01TKCJCYWQgQ0NT IHgveSAobWFpbiAlZCwlZCBjY3MgJWQsJWQpIGZ1bGwgKG1haW4gJWQsJWQgY2NzICVkLCVkKVxu IiwKPiAgCQkJICAgICAgbWFpbl94LCBtYWluX3ksCj4gIAkJCSAgICAgIGNjc194LCBjY3NfeSwK PiAtCQkJICAgICAgaW50ZWxfZmItPm5vcm1hbFswXS54LAo+IC0JCQkgICAgICBpbnRlbF9mYi0+ bm9ybWFsWzBdLnksCj4gKwkJCSAgICAgIGludGVsX2ZiLT5ub3JtYWxbbWFpbl9wbGFuZV0ueCwK PiArCQkJICAgICAgaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS55LAo+ICAJCQkgICAgICB4 LCB5KTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiBAQCAtMjczOSw4ICsyODI2LDcgQEAg aW50ZWxfZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAg CQlpbnQgcmV0Owo+ICAKPiAgCQljcHAgPSBmYi0+Zm9ybWF0LT5jcHBbaV07Cj4gLQkJd2lkdGgg PSBkcm1fZnJhbWVidWZmZXJfcGxhbmVfd2lkdGgoZmItPndpZHRoLCBmYiwgaSk7Cj4gLQkJaGVp Z2h0ID0gZHJtX2ZyYW1lYnVmZmVyX3BsYW5lX2hlaWdodChmYi0+aGVpZ2h0LCBmYiwgaSk7Cj4g KwkJaW50ZWxfZmJfcGxhbmVfZGltcygmd2lkdGgsICZoZWlnaHQsIGZiLCBpKTsKPiAgCj4gIAkJ cmV0ID0gaW50ZWxfZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIsIGkpOwo+ICAJCWlmIChyZXQp IHsKPiBAQCAtMjc0OSwxMSArMjgzNSw5IEBAIGludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJCXJldHVybiByZXQ7Cj4gIAkJfQo+ICAKPiAt CQlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgJiYgaSA9PSAxKSB7Cj4gLQkJCXJl dCA9IGludGVsX2ZiX2NoZWNrX2Njc194eShmYiwgeCwgeSk7Cj4gLQkJCWlmIChyZXQpCj4gLQkJ CQlyZXR1cm4gcmV0Owo+IC0JCX0KPiArCQlyZXQgPSBpbnRlbF9mYl9jaGVja19jY3NfeHkoZmIs IGksIHgsIHkpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gIAo+ICAJCS8qCj4g IAkJICogVGhlIGZlbmNlIChpZiB1c2VkKSBpcyBhbGlnbmVkIHRvIHRoZSBzdGFydCBvZiB0aGUg b2JqZWN0Cj4gQEAgLTMzNzEsNiArMzQ1NSw3IEBAIHN0YXRpYyBpbnQgc2tsX21heF9wbGFuZV93 aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAgCQkJcmV0dXJuIDUxMjA7 Cj4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiAgCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEX0NDUzoKPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VO MTJfTUNfQ0NTOgo+ICAJCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KPiAgCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRUQ6Cj4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKPiBAQCAt MzQzMCwxNiArMzUxNSwxOCBAQCBzdGF0aWMgaW50IGljbF9tYXhfcGxhbmVfaGVpZ2h0KHZvaWQp Cj4gIH0KPiAgCj4gIHN0YXRpYyBib29sIHNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+IC0JCQkJCSAgIGludCBtYWlu X3gsIGludCBtYWluX3ksIHUzMiBtYWluX29mZnNldCkKPiArCQkJCQkgICBpbnQgbWFpbl94LCBp bnQgbWFpbl95LAo+ICsJCQkJCSAgIHUzMiBtYWluX29mZnNldCwgaW50IGF1eF9wbGFuZSkKPiAg ewo+ICAJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFz ZS5mYjsKPiAtCWludCBoc3ViID0gZmItPmZvcm1hdC0+aHN1YjsKPiAtCWludCB2c3ViID0gZmIt PmZvcm1hdC0+dnN1YjsKPiAtCWludCBhdXhfeCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsx XS54Owo+IC0JaW50IGF1eF95ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLnk7Cj4gLQl1 MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5vZmZzZXQ7Cj4gLQl1 MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIDEpOwo+IC0KPiArCWludCBo c3ViOwo+ICsJaW50IHZzdWI7Cj4gKwlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbYXV4X3BsYW5lXS54Owo+ICsJaW50IGF1eF95ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W2F1eF9wbGFuZV0ueTsKPiArCXUzMiBhdXhfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2F1eF9wbGFuZV0ub2Zmc2V0Owo+ICsJdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxp Z25tZW50KGZiLCBhdXhfcGxhbmUpOwo+ICsKPiArCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1w bGluZygmaHN1YiwgJnZzdWIsIGZiLCBhdXhfcGxhbmUpOwo+ICAJd2hpbGUgKGF1eF9vZmZzZXQg Pj0gbWFpbl9vZmZzZXQgJiYgYXV4X3kgPD0gbWFpbl95KSB7Cj4gIAkJaW50IHgsIHk7Cj4gIAo+ IEBAIC0zNDUxLDcgKzM1MzgsNyBAQCBzdGF0aWMgYm9vbCBza2xfY2hlY2tfbWFpbl9jY3NfY29v cmRpbmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZQo+ICAKPiAgCQl4 ID0gYXV4X3ggLyBoc3ViOwo+ICAJCXkgPSBhdXhfeSAvIHZzdWI7Cj4gLQkJYXV4X29mZnNldCA9 IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAx LAo+ICsJCWF1eF9vZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngs ICZ5LCBwbGFuZV9zdGF0ZSwgYXV4X3BsYW5lLAo+ICAJCQkJCQkJICAgICAgIGF1eF9vZmZzZXQs IGF1eF9vZmZzZXQgLSBhbGlnbm1lbnQpOwo+ICAJCWF1eF94ID0geCAqIGhzdWIgKyBhdXhfeCAl IGhzdWI7Cj4gIAkJYXV4X3kgPSB5ICogdnN1YiArIGF1eF95ICUgdnN1YjsKPiBAQCAtMzQ2MCw5 ICszNTQ3LDkgQEAgc3RhdGljIGJvb2wgc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUKPiAgCWlmIChhdXhfeCAhPSBtYWlu X3ggfHwgYXV4X3kgIT0gbWFpbl95KQo+ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gLQlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbMV0ub2Zmc2V0ID0gYXV4X29mZnNldDsKPiAtCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVsxXS54ID0gYXV4X3g7Cj4gLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb MV0ueSA9IGF1eF95Owo+ICsJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ub2Zm c2V0ID0gYXV4X29mZnNldDsKPiArCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVd LnggPSBhdXhfeDsKPiArCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLnkgPSBh dXhfeTsKPiAgCj4gIAlyZXR1cm4gdHJ1ZTsKPiAgfQo+IEBAIC0zNDc4LDcgKzM1NjUsOCBAQCBz dGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKPiAgCWludCBoID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+ YmFzZS5zcmMpID4+IDE2Owo+ICAJaW50IG1heF93aWR0aDsKPiAgCWludCBtYXhfaGVpZ2h0Owo+ IC0JdTMyIGFsaWdubWVudCwgb2Zmc2V0LCBhdXhfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lWzFdLm9mZnNldDsKPiArCWludCBhdXhfcGxhbmUgPSBmYi0+Zm9ybWF0LT5udW1fcGxh bmVzIC8gMjsKPiArCXUzMiBhbGlnbm1lbnQsIG9mZnNldCwgYXV4X29mZnNldCA9IHBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLm9mZnNldDsKPiAgCj4gIAlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMSkKPiAgCQltYXhfd2lkdGggPSBpY2xfbWF4X3BsYW5lX3dpZHRoKGZi LCAwLCByb3RhdGlvbik7Cj4gQEAgLTM1MzYsNyArMzYyNCw5IEBAIHN0YXRpYyBpbnQgc2tsX2No ZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ ICAJICogdGhleSBtYXRjaCB3aXRoIHRoZSBtYWluIHN1cmZhY2UgeC95IG9mZnNldHMuCj4gIAkg Ki8KPiAgCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgewo+IC0JCXdoaWxlICgh c2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LCBvZmZzZXQp KSB7Cj4gKwo+ICsJCXdoaWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5l X3N0YXRlLCB4LCB5LAo+ICsJCQkJCQkgICAgICAgb2Zmc2V0LCBhdXhfcGxhbmUpKSB7Cj4gIAkJ CWlmIChvZmZzZXQgPT0gMCkKPiAgCQkJCWJyZWFrOwo+ICAKPiBAQCAtMzU0NCw3ICszNjM0LDgg QEAgc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCj4gIAkJCQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1l bnQpOwo+ICAJCX0KPiAgCj4gLQkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFd LnggfHwgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueSkgewo+ICsJCWlmICh4ICE9 IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLnggfHwKPiArCQkgICAgeSAhPSBw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS55KSB7Cj4gIAkJCURSTV9ERUJVR19L TVMoIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRv IENDU1xuIik7Cj4gIAkJCXJldHVybiAtRUlOVkFMOwo+ICAJCX0KPiBAQCAtMzU4Nyw2ICszNjc4 LDQxIEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiAg Cj4gKwlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKPiArCQlpbnQgYXV4X29m ZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVszXS5vZmZzZXQ7Cj4gKwkJaW50IGFsaWdu bWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCAxKTsKPiArCj4gKwkJaWYgKG9mZnNldCA+ IGF1eF9vZmZzZXQpIHsKPiArCQkJaW50IGhzdWIsIHZzdWI7Cj4gKwkJCWludCBtYWluX3ggPSB4 LCBtYWluX3kgPSB5Owo+ICsKPiArCj4gKwkJCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGlu ZygmaHN1YiwgJnZzdWIsIGZiLCAxKTsKPiArCQkJeCA9IG1haW5feCAvIGhzdWI7Cj4gKwkJCXkg PSBtYWluX3kgLyB2c3ViOwo+ICsJCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25l ZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMSwKPiArCQkJCQkJCQkgICBvZmZzZXQsCj4g KwkJCQkJCQkJICAgYXV4X29mZnNldCAmIH4oYWxpZ25tZW50IC0gMSkpOwo+ICsJCQl4ID0geCAq IGhzdWIgKyBtYWluX3ggJSBoc3ViOwo+ICsJCQl5ID0geSAqIHZzdWIgKyBtYWluX3kgJSB2c3Vi Owo+ICsKPiArCQl9Cj4gKwo+ICsJCXdoaWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5h dGVzKHBsYW5lX3N0YXRlLCB4LCB5LCBvZmZzZXQsIDMpKSB7Cj4gKwkJCWlmIChvZmZzZXQgPT0g MCkKPiArCQkJCWJyZWFrOwo+ICsKPiArCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2Fs aWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDEsCj4gKwkJCQkJCQkJICAgb2Zmc2V0 LCBvZmZzZXQgLSBhbGlnbm1lbnQpOwo+ICsJCX0KPiArCj4gKwkJaWYgKHggIT0gcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lWzNdLnggfHwKPiArCQkgICAgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbM10ueSkgewo+ICsJCQlEUk1fREVCVUdfS01TKCJVbmFibGUgdG8gZmluZCBzdWl0YWJs ZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBDQ1NcbiIpOwo+ICsJCQlyZXR1cm4gLUVJ TlZBTDsKPiArCQl9CgpQcm9iYWJseSB0aW1lIHRvIHJlZmFjdG9yIHNvbWUgb2YgdGhlIHN0dWZm IHNvIHdlIGRvbid0IGhhdmUgdG8gY29weQpwYXN0ZSBzbyBtdWNoLgoKPiArCX0KPiArCj4gIAlw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ub2Zmc2V0ID0gb2Zmc2V0Owo+ICAJcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lWzFdLnggPSB4Owo+ICAJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFd LnkgPSB5Owo+IEBAIC0zNTk5LDE5ICszNzI1LDMwIEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNrX2Nj c19hdXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICAJ Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsK PiAgCWludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy54MSA+PiAxNjsKPiAgCWludCBz cmNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy55MSA+PiAxNjsKPiAtCWludCBoc3ViID0gZmIt PmZvcm1hdC0+aHN1YjsKPiAtCWludCB2c3ViID0gZmItPmZvcm1hdC0+dnN1YjsKPiAtCWludCB4 ID0gc3JjX3ggLyBoc3ViOwo+IC0JaW50IHkgPSBzcmNfeSAvIHZzdWI7Cj4gIAl1MzIgb2Zmc2V0 Owo+ICsJaW50IGNjczsKPiAgCj4gLQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5l X3N0YXRlLCAxKTsKPiAtCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZz ZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMSk7Cj4gIAo+IC0JcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lWzFdLm9mZnNldCA9IG9mZnNldDsKPiAtCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS54 ID0geCAqIGhzdWIgKyBzcmNfeCAlIGhzdWI7Cj4gLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb MV0ueSA9IHkgKiB2c3ViICsgc3JjX3kgJSB2c3ViOwo+ICsJZm9yIChjY3MgPSBmYi0+Zm9ybWF0 LT5udW1fcGxhbmVzIC8gMjsKCkkgZ3Vlc3MgYW5vdGhlciBoZWxwZXIgdG8gZG8gdGhlIG1haW4t PmF1eCBpbmRleCBjYWxjdWxhdGlvbiB3b3VsZCBtYWtlCnRoaXMgbGVzcyBtYWdpY3kuCgpjY3Mg PCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBjY3MrKykgewo+ICsJCWludCBoc3ViLCB2c3ViOwo+ ICsJCWludCBtYWluX2hzdWIsIG1haW5fdnN1YjsKPiArCQlpbnQgeCwgeTsKPiArCj4gKwkJaW50 ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjcyk7Cj4gKwkJ aW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZtYWluX2hzdWIsICZtYWluX3ZzdWIsIGZi LCAoY2NzIC0gMSkvIDIpOwo+ICsKPiArCQloc3ViIC89IG1haW5faHN1YjsKPiArCQl2c3ViIC89 IG1haW5fdnN1YjsKPiArCQl4ID0gc3JjX3ggLyBoc3ViOwo+ICsJCXkgPSBzcmNfeSAvIHZzdWI7 Cj4gIAo+ICsJCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIGNjcyk7 Cj4gKwkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmeCwgJnks Cj4gKwkJCQkJCQkgICAgcGxhbmVfc3RhdGUsIGNjcyk7Cj4gKwkJcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lW2Njc10ub2Zmc2V0ID0gb2Zmc2V0Owo+ICsJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFu ZVtjY3NdLnggPSB4ICogaHN1YiArIHNyY194ICUgaHN1YjsKPiArCQlwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbY2NzXS55ID0geSAqIHZzdWIgKyBzcmNfeSAlIHZzdWI7Cj4gKwl9Cj4gIAlyZXR1 cm4gMDsKPiAgfQo+ICAKPiBAQCAtMzYxOSw2ICszNzU2LDcgQEAgaW50IHNrbF9jaGVja19wbGFu ZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gIHsKPiAg CWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7 Cj4gIAlpbnQgcmV0Owo+ICsJYm9vbCBuZWVkc19hdXggPSBmYWxzZTsKPiAgCj4gIAlyZXQgPSBp bnRlbF9wbGFuZV9jb21wdXRlX2d0dChwbGFuZV9zdGF0ZSk7Cj4gIAlpZiAocmV0KQo+IEBAIC0z NjI4LDIxICszNzY2LDMxIEBAIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICAJCXJldHVybiAwOwo+ICAKPiAgCS8qCj4g LQkgKiBIYW5kbGUgdGhlIEFVWCBzdXJmYWNlIGZpcnN0IHNpbmNlCj4gLQkgKiB0aGUgbWFpbiBz dXJmYWNlIHNldHVwIGRlcGVuZHMgb24gaXQuCj4gKwkgKiBIYW5kbGUgdGhlIEFVWCBzdXJmYWNl IGZpcnN0IHNpbmNlIHRoZSBtYWluIHN1cmZhY2Ugc2V0dXAgZGVwZW5kcyBvbgo+ICsJICogaXQu Cj4gIAkgKi8KPiAtCWlmIChkcm1fZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZv cm1hdCkpIHsKPiAtCQlyZXQgPSBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShwbGFuZV9zdGF0 ZSk7Cj4gKwlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKPiArCQluZWVkc19h dXggPSB0cnVlOwo+ICsJCXJldCA9IHNrbF9jaGVja19jY3NfYXV4X3N1cmZhY2UocGxhbmVfc3Rh dGUpOwo+ICAJCWlmIChyZXQpCj4gIAkJCXJldHVybiByZXQ7Cj4gLQl9IGVsc2UgaWYgKGlzX2Nj c19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7Cj4gLQkJcmV0ID0gc2tsX2NoZWNrX2Njc19hdXhf c3VyZmFjZShwbGFuZV9zdGF0ZSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRybV9mb3JtYXRfaW5mb19p c195dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0KSkgewo+ICsJCW5lZWRzX2F1eCA9IHRydWU7Cj4g KwkJcmV0ID0gc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+ICAJCWlm IChyZXQpCj4gIAkJCXJldHVybiByZXQ7Cj4gLQl9IGVsc2Ugewo+IC0JCXBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVsxXS5vZmZzZXQgPSB+MHhmZmY7Cj4gLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lWzFdLnggPSAwOwo+IC0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55ID0gMDsKPiAr CX0KPiArCj4gKwlpZiAoIW5lZWRzX2F1eCkgewo+ICsJCWludCBpOwo+ICsKPiArCQlmb3IgKGkg PSAxOyBpIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7Cj4gKwkJCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVtpXS5vZmZzZXQgPSB+MHhmZmY7Cj4gKwkJCXBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVtpXS54ID0gMDsKPiArCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnkgPSAw Owo+ICsJCX0KPiAgCX0KPiAgCj4gIAlyZXQgPSBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHBsYW5l X3N0YXRlKTsKPiBAQCAtNDAzMCw3ICs0MTc4LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBza2xf cGxhbmVfc3RyaWRlX211bHQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gIAkg KiBUaGUgc3RyaWRlIGlzIGVpdGhlciBleHByZXNzZWQgYXMgYSBtdWx0aXBsZSBvZiA2NCBieXRl cyBjaHVua3MgZm9yCj4gIAkgKiBsaW5lYXIgYnVmZmVycyBvciBpbiBudW1iZXIgb2YgdGlsZXMg Zm9yIHRpbGVkIGJ1ZmZlcnMuCj4gIAkgKi8KPiAtCWlmIChpc19zdXJmYWNlX2xpbmVhcihmYi0+ bW9kaWZpZXIsIGNvbG9yX3BsYW5lKSkKPiArCWlmIChpc19zdXJmYWNlX2xpbmVhcihmYiwgY29s b3JfcGxhbmUpKQo+ICAJCXJldHVybiA2NDsKPiAgCWVsc2UgaWYgKGRybV9yb3RhdGlvbl85MF9v cl8yNzAocm90YXRpb24pKQo+ICAJCXJldHVybiBpbnRlbF90aWxlX2hlaWdodChmYiwgY29sb3Jf cGxhbmUpOwo+IEBAIC00MTYwLDYgKzQzMDgsOCBAQCBzdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxf dGlsaW5nKHU2NCBmYl9tb2RpZmllcikKPiAgCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfAo+ ICAJCSAgICAgICBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFIHwKPiAgCQkg ICAgICAgUExBTkVfQ1RMX0NMRUFSX0NPTE9SX0RJU0FCTEU7Cj4gKwljYXNlIEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKPiArCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kg fCBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEU7Cj4gIAljYXNlIEk5MTVfRk9S TUFUX01PRF9ZZl9USUxFRDoKPiAgCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1lGOwo+ICAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+IEBAIC05OTY4LDYgKzEwMTE4LDggQEAg c2t5bGFrZV9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMs Cj4gIAkJCWZiLT5tb2RpZmllciA9IElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIgPwo+ICAJCQkJ STkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIDoKPiAgCQkJCUk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0NDUzsKPiArCQllbHNlIGlmICh2YWwgJiBQTEFORV9DVExfTUVESUFfREVD T01QUkVTU0lPTl9FTkFCTEUpCj4gKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0dFTjEyX01DX0NDUzsKPiAgCQllbHNlCj4gIAkJCWZiLT5tb2RpZmllciA9IEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEOwo+ICAJCWJyZWFrOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCj4gaW5kZXggOTc2NjY5ZjAxYThj Li41OTk4Yjk1OTIyNWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAo+IEBAIC01MzAsNyArNTMwLDcgQEAgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlIHsKPiAgCQkgKi8KPiAgCQl1MzIgc3RyaWRlOwo+ICAJCWludCB4LCB5 Owo+IC0JfSBjb2xvcl9wbGFuZVsyXTsKPiArCX0gY29sb3JfcGxhbmVbNF07Cj4gIAo+ICAJLyog cGxhbmUgY29udHJvbCByZWdpc3RlciAqLwo+ICAJdTMyIGN0bDsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKPiBpbmRleCA5YjliNDFiMGZjOTEuLjc4OGQw ZmM4ZDhlZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X3Nwcml0ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJp dGUuYwo+IEBAIC01MzIsMTEgKzUzMiwxMyBAQCBza2xfcHJvZ3JhbV9wbGFuZShzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lLAo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+ICAJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBs YW5lLT5pZDsKPiAgCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Cj4gKwljb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ICsJaW50IGF1 eF9wbGFuZSA9IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyICsgY29sb3JfcGxhbmU7Cj4gIAlj b25zdCBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0gJnBsYW5lX3N0YXRl LT5ja2V5Owo+ICAJdTMyIHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xv cl9wbGFuZV0ub2Zmc2V0Owo+ICAJdTMyIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVf c3RhdGUsIGNvbG9yX3BsYW5lKTsKPiAtCXUzMiBhdXhfZGlzdCA9IHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVsxXS5vZmZzZXQgLSBzdXJmX2FkZHI7Cj4gLQl1MzIgYXV4X3N0cmlkZSA9IHNrbF9w bGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIDEpOwo+ICsJdTMyIGF1eF9kaXN0ID0gcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ub2Zmc2V0IC0gc3VyZl9hZGRyOwo+ICsJdTMyIGF1 eF9zdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBhdXhfcGxhbmUpOwo+ICAJ aW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLmRzdC54MTsKPiAgCWludCBjcnRjX3kgPSBw bGFuZV9zdGF0ZS0+YmFzZS5kc3QueTE7Cj4gIAl1MzIgeCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtjb2xvcl9wbGFuZV0ueDsKPiBAQCAtNTQ0LDcgKzU0Niw2IEBAIHNrbF9wcm9ncmFtX3Bs YW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gIAl1MzIgc3JjX3cgPSBkcm1fcmVjdF93 aWR0aCgmcGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKPiAgCXUzMiBzcmNfaCA9IGRybV9y ZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKPiAgCXN0cnVjdCBpbnRl bF9wbGFuZSAqbGlua2VkID0gcGxhbmVfc3RhdGUtPnBsYW5hcl9saW5rZWRfcGxhbmU7Cj4gLQlj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ ICAJdTggYWxwaGEgPSBwbGFuZV9zdGF0ZS0+YmFzZS5hbHBoYSA+PiA4Owo+ICAJdTMyIHBsYW5l X2NvbG9yX2N0bCA9IDA7Cj4gIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+IEBAIC02MTksOCAr NjIwLDggQEAgc2tsX3Byb2dyYW1fcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiAg Cj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ICAJCUk5MTVfV1JJVEVfRlcoUExB TkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCj4gLQkJCSAgICAgIChwbGFuZV9zdGF0ZS0+ Y29sb3JfcGxhbmVbMV0ueSA8PCAxNikgfAo+IC0JCQkgICAgICBwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbMV0ueCk7Cj4gKwkJCSAgICAgIChwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3Bs YW5lXS55IDw8IDE2KSB8Cj4gKwkJCSAgICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhf cGxhbmVdLngpOwo+ICAKPiAgCS8qCj4gIAkgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxmLWFy bXMgaWYgdGhlIHBsYW5lIHdhcyBwcmV2aW91c2x5Cj4gQEAgLTE3MzcsNyArMTczOCw4IEBAIHN0 YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrX2ZiKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAo+ICAJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lm X1RJTEVEIHx8Cj4gIAkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9DQ1MgfHwKPiAgCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxF RF9DQ1MgfHwKPiAtCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0dFTjEyX1JDX0NDUykpIHsKPiArCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX1JDX0NDUyB8fAo+ICsJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTKSkgewo+ICAJCURSTV9ERUJVR19LTVMoIlkv WWYgdGlsaW5nIG5vdCBzdXBwb3J0ZWQgaW4gSUYtSUQgbW9kZVxuIik7Cj4gIAkJcmV0dXJuIC1F SU5WQUw7Cj4gIAl9Cj4gQEAgLTIxNDksNyArMjE1MSwxNiBAQCBzdGF0aWMgY29uc3QgdTY0IHNr bF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX2Njc1tdID0gewo+ICAJRFJNX0ZPUk1BVF9NT0RfSU5W QUxJRAo+ICB9Owo+ICAKPiAtc3RhdGljIGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9k aWZpZXJzX2Njc1tdID0gewo+ICtzdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1hdF9t b2RpZmllcnNfbWNfY2NzW10gPSB7Cj4gKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9N Q19DQ1MsCj4gKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MsCj4gKwlJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRCwKPiArCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAo+ICsJRFJN X0ZPUk1BVF9NT0RfTElORUFSLAo+ICsJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAo+ICt9Owo+ICsK PiArc3RhdGljIGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2Njc1td ID0gewo+ICAJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTLAo+ICAJSTkxNV9G T1JNQVRfTU9EX1lfVElMRUQsCj4gIAlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKPiBAQCAtMjMw NSwxMCArMjMxNiwyMSBAQCBzdGF0aWMgYm9vbCBza2xfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0 ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAo+ICAJfQo+ICB9Cj4gIAo+ICtzdGF0aWMgYm9v bCBnZW4xMl9wbGFuZV9zdXBwb3J0c19tY19jY3MoZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKCnBs YW5lX2hhc19mb28oKSBpcyB0aGUgY29tbW9uIGlkaW9tLgoKPiArewo+ICsJcmV0dXJuIHBsYW5l X2lkIDwgUExBTkVfU1BSSVRFNDsKPiArfQo+ICsKPiAgc3RhdGljIGJvb2wgZ2VuMTJfcGxhbmVf Zm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAo+ICAJCQkJCSAg ICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQo+ICB7Cj4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lID0gdG9faW50ZWxfcGxhbmUoX3BsYW5lKTsKPiArCj4gIAlzd2l0Y2ggKG1vZGlmaWVy KSB7Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKPiArCQlp ZiAoIWdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2NjcyhwbGFuZS0+aWQpKQo+ICsJCQlyZXR1cm4g ZmFsc2U7Cj4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gIAljYXNlIERSTV9GT1JNQVRfTU9EX0xJ TkVBUjoKPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Cj4gIAljYXNlIEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEOgo+IEBAIC0yMzI2LDE0ICsyMzQ4LDE3IEBAIHN0YXRpYyBib29sIGdl bjEyX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwK PiAgCQlpZiAoaXNfY2NzX21vZGlmaWVyKG1vZGlmaWVyKSkKPiAgCQkJcmV0dXJuIHRydWU7Cj4g IAkJLyogZmFsbCB0aHJvdWdoICovCj4gLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+IC0JY2Fz ZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEw Ogo+ICAJY2FzZSBEUk1fRk9STUFUX1lVWVY6Cj4gIAljYXNlIERSTV9GT1JNQVRfWVZZVToKPiAg CWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgo+ICAJY2FzZSBEUk1fRk9STUFUX1ZZVVk6Cj4gKwkJaWYg KG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUykKPiArCQkJ cmV0dXJuIHRydWU7Cj4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gIAljYXNlIERSTV9GT1JNQVRf TlYxMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4gKwljYXNlIERSTV9GT1JNQVRfWFJH QjIxMDEwMTA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Cj4gIAljYXNlIERSTV9G T1JNQVRfUDAxMDoKPiAgCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgo+ICAJY2FzZSBEUk1fRk9STUFU X1AwMTY6Cj4gQEAgLTI0NzAsNiArMjQ5NSwxNCBAQCBzdGF0aWMgY29uc3QgdTMyICppY2xfZ2V0 X3BsYW5lX2Zvcm1hdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJfQo+ ICB9Cj4gIAo+ICtzdGF0aWMgY29uc3QgdTY0ICpnZW4xMl9nZXRfcGxhbmVfbW9kaWZpZXJzKGVu dW0gcGxhbmVfaWQgcGxhbmVfaWQpCj4gK3sKPiArCWlmIChnZW4xMl9wbGFuZV9zdXBwb3J0c19t Y19jY3MocGxhbmVfaWQpKQo+ICsJCXJldHVybiBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJz X21jX2NjczsKPiArCWVsc2UKPiArCQlyZXR1cm4gZ2VuMTJfcGxhbmVfZm9ybWF0X21vZGlmaWVy c19yY19jY3M7Cj4gK30KPiArCj4gIHN0YXRpYyBib29sIHNrbF9wbGFuZV9oYXNfY2NzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQkJICAgICAgZW51bSBwaXBlIHBpcGUs IGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCj4gIHsKPiBAQCAtMjUzNiw3ICsyNTY5LDcgQEAgc2ts X3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ICAKPiAgCXBsYW5lLT5oYXNfY2NzID0gc2tsX3BsYW5lX2hhc19jY3MoZGV2X3ByaXYsIHBp cGUsIHBsYW5lX2lkKTsKPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKSB7Cj4gLQkJ bW9kaWZpZXJzID0gZ2VuMTJfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19jY3M7Cj4gKwkJbW9kaWZp ZXJzID0gZ2VuMTJfZ2V0X3BsYW5lX21vZGlmaWVycyhwbGFuZV9pZCk7Cj4gIAkJcGxhbmVfZnVu Y3MgPSAmZ2VuMTJfcGxhbmVfZnVuY3M7Cj4gIAl9IGVsc2Ugewo+ICAJCWlmIChwbGFuZS0+aGFz X2NjcykKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiBpbmRleCA1MTljZmIwYTVjNDIuLjAyZWFl ZjhhZGFjMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IEBAIC02Njk3LDYgKzY2OTcs NyBAQCBlbnVtIHsKPiAgI2RlZmluZSAgIFBMQU5FX0NUTF9USUxFRF9ZCQkJKDQgPDwgMTApCj4g ICNkZWZpbmUgICBQTEFORV9DVExfVElMRURfWUYJCQkoNSA8PCAxMCkKPiAgI2RlZmluZSAgIFBM QU5FX0NUTF9GTElQX0hPUklaT05UQUwJCSgxIDw8IDgpCj4gKyNkZWZpbmUgICBQTEFORV9DVExf TUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEUJKDEgPDwgNCkgLyogVEdMKyAqLwo+ICAjZGVmaW5l ICAgUExBTkVfQ1RMX0FMUEhBX01BU0sJCQkoMHgzIDw8IDQpIC8qIFByZS1HTEsgKi8KPiAgI2Rl ZmluZSAgIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFCQkoMCA8PCA0KQo+ICAjZGVmaW5lICAgUExB TkVfQ1RMX0FMUEhBX1NXX1BSRU1VTFRJUExZCSgyIDw8IDQpCj4gLS0gCj4gMi4xNy4xCj4gCj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1n ZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAK VmlsbGUgU3lyasOkbMOkCkludGVsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeA==