From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dhinakaran Pandiyan Subject: Re: [PATCH v4 9/9] Gen-12 display can decompress surfaces compressed by the media engine. Date: Fri, 04 Oct 2019 16:54:40 -0700 Message-ID: <6a10cdfbad0084e17477dff78e8a40eef8beabad.camel@intel.com> References: <20190923102935.5860-10-dhinakaran.pandiyan@intel.com> <20190926105512.25818-1-dhinakaran.pandiyan@intel.com> <20191004153643.GG1208@intel.com> Reply-To: dhinakaran.pandiyan@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 19B3E6EC3A for ; Fri, 4 Oct 2019 23:54:48 +0000 (UTC) In-Reply-To: <20191004153643.GG1208@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCAyMDE5LTEwLTA0IGF0IDE4OjM2ICswMzAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6 Cj4gT24gVGh1LCBTZXAgMjYsIDIwMTkgYXQgMDM6NTU6MTJBTSAtMDcwMCwgRGhpbmFrYXJhbiBQ YW5kaXlhbiB3cm90ZToKPiA+IERldGVjdCB0aGUgbW9kaWZpZXIgY29ycmVzcG9uZGluZyB0byBt ZWRpYSBjb21wcmVzc2lvbiB0byBlbmFibGUKPiA+IGRpc3BsYXkgZGVjb21wcmVzc2lvbiBmb3Ig WVVWIGFuZCB4UkdCIHBhY2tlZCBmb3JtYXRzLiBBIG5ldyBtb2RpZmllciBpcwo+ID4gYWRkZWQg c28gdGhhdCB0aGUgZHJpdmVyIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1lZGlhIGFuZCByZW5k ZXIKPiA+IGNvbXByZXNzZWQgYnVmZmVycy4gVW5saWtlIHJlbmRlciBkZWNvbXByZXNzaW9uLCBw bGFuZSA2IGFuZCAgcGxhbmUgNyBkbyBub3QKPiA+IHN1cHBvcnQgbWVkaWEgZGVjb21wcmVzc2lv bi4KPiA+IAo+ID4gdjI6IEZpeCBjaGVja3BhdGNoIHdhcm5pbmdzIG9uIGNvZGUgc3R5bGUgKEx1 Y2FzKQo+ID4gCj4gPiBGcm9tIERLOgo+ID4gU2VwYXJhdGUgbW9kaWZpZXIgYXJyYXkgZm9yIHBs YW5lcyB0aGF0IGNhbm5vdCBkZWNvbXByZXNzIG1lZGlhIChWaWxsZSkKPiA+IAo+ID4gdjM6IFN1 cHBvcnQgcGxhbmFyIGZvcm1hdHMKPiA+IHY0OiBTd2l0Y2ggcGxhbmUgb3JkZXIKPiA+IAo+ID4g Q2M6IE5hbmxleSBHIENoZXJ5IDxuYW5sZXkuZy5jaGVyeUBpbnRlbC5jb20+Cj4gPiBDYzogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+IENjOiBNYXR0 IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogRGhp bmFrYXJhbiBQYW5kaXlhbiA8ZGhpbmFrYXJhbi5wYW5kaXlhbkBpbnRlbC5jb20+Cj4gPiBTaWdu ZWQtb2ZmLWJ5OiBMdWNhcyBEZSBNYXJjaGkgPGx1Y2FzLmRlbWFyY2hpQGludGVsLmNvbT4KPiA+ IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jICB8 IDI5MCArKysrKysrKysrKysrLS0tLS0KPiA+ICAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5X3R5cGVzLmggICAgfCAgIDIgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX3Nwcml0ZS5jICAgfCAgNTUgKysrLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmggICAgICAgICAgICAgICB8ICAgMSArCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAy NjcgaW5zZXJ0aW9ucygrKSwgODEgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+ID4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+ID4gaW5kZXggOGVhNTVkNjc0 NDJjLi5kZjNlYmFhMTY3YWIgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmMKPiA+IEBAIC0xODg4LDYgKzE4ODgsMjIgQEAgc3RhdGljIHZv aWQgaW50ZWxfZGlzYWJsZV9waXBlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlCj4gPiAq b2xkX2NydGNfc3RhdGUpCj4gPiAgCQlpbnRlbF93YWl0X2Zvcl9waXBlX29mZihvbGRfY3J0Y19z dGF0ZSk7Cj4gPiAgfQo+ID4gIAo+ID4gK2Jvb2wgaXNfY2NzX21vZGlmaWVyKHU2NCBtb2RpZmll cikKPiA+ICt7Cj4gPiArCXJldHVybiBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9HRU4xMl9SQ19DQ1MgfHwKPiA+ICsJICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX01DX0NDUyB8fAo+ID4gKwkgICAgICAgbW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4gPiArCSAgICAgICBtb2RpZmllciA9PSBJOTE1X0ZP Uk1BVF9NT0RfWWZfVElMRURfQ0NTOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBpc19j Y3NfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFu ZSkKPiA+ICt7Cj4gPiArCWlmICghaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpCj4gPiAr CQlyZXR1cm4gZmFsc2U7Cj4gCj4gQSBjb21tZW50IGhlcmUgY291bGQgaGVscCBjbGFyaWZ5IHRo aW5ncyBmb3IgdGhlIHJlYWRlci4gRWcuOgo+IC8qCj4gICogWzBdIFJHQgo+ICAqIFsxXSBSR0Ig Q0NTCj4gICogb3IKPiAgKiBbMF0gWQo+ICAqIFsxXSBDYkNyCj4gICogWzJdIFkgQ0NTCj4gICog WzNdIENiQ3IgQ0NTCj4gICovCj4gCldpbGwgZG8uCgo+ID4gKwo+ID4gKwlyZXR1cm4gY29sb3Jf cGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDI7Cj4gPiArfQo+ID4gKwo+ID4gIHN0 YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9zaXplKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiA+ICB7Cj4gPiAgCXJldHVybiBJU19HRU4oZGV2X3ByaXYsIDIp ID8gMjA0OCA6IDQwOTY7Cj4gPiBAQCAtMTkwOCwxMSArMTkyNCwxMyBAQCBpbnRlbF90aWxlX3dp ZHRoX2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQKPiA+IGNvbG9y X3BsYW5lKQo+ID4gIAkJZWxzZQo+ID4gIAkJCXJldHVybiA1MTI7Cj4gPiAgCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+ID4gLQkJaWYgKGNvbG9yX3BsYW5lID09IDEpCj4gPiAr CQlpZiAoaXNfY2NzX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkpCj4gPiAgCQkJcmV0dXJuIDEyODsK PiA+ICAJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ID4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEX0dFTjEyX01DX0NDUzoKPiA+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ID4gIAljYXNlIEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUzoKPiA+IC0JCWlmIChjb2xvcl9wbGFu ZSA9PSAxKQo+ID4gKwkJaWYgKGlzX2Njc19wbGFuZShmYiwgY29sb3JfcGxhbmUpKQo+ID4gIAkJ CXJldHVybiA2NDsKPiA+ICAJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ID4gIAljYXNlIEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEOgo+ID4gQEAgLTE5MjEsNyArMTkzOSw3IEBAIGludGVsX3RpbGVfd2lk dGhfYnl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFu ZSkKPiA+ICAJCWVsc2UKPiA+ICAJCQlyZXR1cm4gNTEyOwo+ID4gIAljYXNlIEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRF9DQ1M6Cj4gPiAtCQlpZiAoY29sb3JfcGxhbmUgPT0gMSkKPiA+ICsJCWlm IChpc19jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSkKPiA+ICAJCQlyZXR1cm4gMTI4Owo+ID4g IAkJLyogZmFsbCB0aHJvdWdoICovCj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE Ogo+ID4gQEAgLTE5NDksOCArMTk2Nyw5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQKPiA+ICBpbnRl bF90aWxlX2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9y X3BsYW5lKQo+ID4gIHsKPiA+ICAJc3dpdGNoIChmYi0+bW9kaWZpZXIpIHsKPiA+ICsJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6Cj4gPiAgCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTOgo+ID4gLQkJaWYgKGNvbG9yX3BsYW5lID09IDEp Cj4gPiArCQlpZiAoaXNfY2NzX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkpCj4gPiAgCQkJcmV0dXJu IDE7Cj4gPiAgCQkvKiBmYWxsIHRocm91Z2ggKi8KPiA+ICAJZGVmYXVsdDoKPiA+IEBAIC0yMDU1 LDYgKzIwNzQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ID4gIAkJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOSkKPiA+ICAJCQlyZXR1cm4gMjU2ICogMTAyNDsKPiA+ICAJCXJldHVybiAwOwo+ ID4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKPiA+ICAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6Cj4gPiAgCQlyZXR1cm4gMTYg KiAxMDI0Owo+ID4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiA+IEBAIC0y MjU0LDEwICsyMjc0LDE3IEBAIHN0YXRpYyB1MzIgaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KGlu dCAqeCwgaW50ICp5LAo+ID4gIAlyZXR1cm4gbmV3X29mZnNldDsKPiA+ICB9Cj4gPiAgCj4gPiAt c3RhdGljIGJvb2wgaXNfc3VyZmFjZV9saW5lYXIodTY0IG1vZGlmaWVyLCBpbnQgY29sb3JfcGxh bmUpCj4gPiArc3RhdGljIGJvb2wgaXNfc3VyZmFjZV9saW5lYXIoY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKPiA+ICB7Cj4gPiAtCXJldHVybiBtb2Rp ZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgfHwKPiA+IC0JICAgICAgIChtb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MgJiYgY29sb3JfcGxhbmUgPT0g MSk7Cj4gPiArCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9N T0RfTElORUFSOgo+ID4gKwkJcmV0dXJuIHRydWU7Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1lfVElMRURfR0VOMTJfUkNfQ0NTOgo+ID4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0dFTjEyX01DX0NDUzoKPiA+ICsJCXJldHVybiBpc19jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5l KTsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsJfQo+ID4gIH0KPiA+ ICAKPiA+ICBzdGF0aWMgdTMyIGludGVsX2FkanVzdF9hbGlnbmVkX29mZnNldChpbnQgKngsIGlu dCAqeSwKPiA+IEBAIC0yMjcyLDcgKzIyOTksNyBAQCBzdGF0aWMgdTMyIGludGVsX2FkanVzdF9h bGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwKPiA+ICAKPiA+ICAJV0FSTl9PTihuZXdfb2Zm c2V0ID4gb2xkX29mZnNldCk7Cj4gPiAgCj4gPiAtCWlmICghaXNfc3VyZmFjZV9saW5lYXIoZmIt Pm1vZGlmaWVyLCBjb2xvcl9wbGFuZSkpIHsKPiA+ICsJaWYgKCFpc19zdXJmYWNlX2xpbmVhcihm YiwgY29sb3JfcGxhbmUpKSB7Cj4gPiAgCQl1bnNpZ25lZCBpbnQgdGlsZV9zaXplLCB0aWxlX3dp ZHRoLCB0aWxlX2hlaWdodDsKPiA+ICAJCXVuc2lnbmVkIGludCBwaXRjaF90aWxlczsKPiA+ICAK PiA+IEBAIC0yMzQyLDcgKzIzNjksNyBAQCBzdGF0aWMgdTMyIGludGVsX2NvbXB1dGVfYWxpZ25l ZF9vZmZzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gIAlpZiAoYWxp Z25tZW50KQo+ID4gIAkJYWxpZ25tZW50LS07Cj4gPiAgCj4gPiAtCWlmICghaXNfc3VyZmFjZV9s aW5lYXIoZmItPm1vZGlmaWVyLCBjb2xvcl9wbGFuZSkpIHsKPiA+ICsJaWYgKCFpc19zdXJmYWNl X2xpbmVhcihmYiwgY29sb3JfcGxhbmUpKSB7Cj4gPiAgCQl1bnNpZ25lZCBpbnQgdGlsZV9zaXpl LCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKPiA+ICAJCXVuc2lnbmVkIGludCB0aWxlX3Jvd3Ms IHRpbGVzLCBwaXRjaF90aWxlczsKPiA+ICAKPiA+IEBAIC0yNDQ1LDYgKzI0NzIsNyBAQCBzdGF0 aWMgdW5zaWduZWQgaW50IGludGVsX2ZiX21vZGlmaWVyX3RvX3RpbGluZyh1NjQgZmJfbW9kaWZp ZXIpCj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gPiAgCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+ID4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0dFTjEyX1JDX0NDUzoKPiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9N Q19DQ1M6Cj4gPiAgCQlyZXR1cm4gSTkxNV9USUxJTkdfWTsKPiA+ICAJZGVmYXVsdDoKPiA+ICAJ CXJldHVybiBJOTE1X1RJTElOR19OT05FOwo+ID4gQEAgLTI0OTQsNiArMjUyMiwxMyBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyBnZW4xMl9jY3NfZm9ybWF0c1tdID0gewo+ ID4gIAkgIC5jcHAgPSB7IDQsIDEsIH0sIC5oc3ViID0gMiwgLnZzdWIgPSAzMiwgLmhhc19hbHBo YSA9IHRydWUgfSwKPiA+ICB9Owo+ID4gIAo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Zv cm1hdF9pbmZvIGdlbjEyX21jX2Njc19mb3JtYXRzW10gPSB7Cj4gPiArCXsgLmZvcm1hdCA9IERS TV9GT1JNQVRfWVVZViwgLm51bV9wbGFuZXMgPSAyLAo+ID4gKwkgIC5jcHAgPSB7IDIsIDEsIH0s IC5oc3ViID0gNCwgLnZzdWIgPSAzMiwgLmlzX3l1diA9IHRydWUgfSwKPiA+ICsJeyAuZm9ybWF0 ID0gRFJNX0ZPUk1BVF9OVjEyLCAubnVtX3BsYW5lcyA9IDQsCj4gPiArCSAgLmNwcCA9IHsgMSwg MiwgMSwgMX0sIC5oc3ViID0gMiwgLnZzdWIgPSAyLCAuaXNfeXV2ID0gdHJ1ZSB9LAo+ID4gK307 Cj4gPiArCj4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKgo+ID4gIGxv b2t1cF9mb3JtYXRfaW5mbyhjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvIGZvcm1hdHNbXSwK PiA+ICAJCSAgIGludCBudW1fZm9ybWF0cywgdTMyIGZvcm1hdCkKPiA+IEBAIC0yNTExLDEyICsy NTQ2LDIxIEBAIGxvb2t1cF9mb3JtYXRfaW5mbyhjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZv IGZvcm1hdHNbXSwKPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqCj4g PiAgaW50ZWxfZ2V0X2Zvcm1hdF9pbmZvKGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpj bWQpCj4gPiAgewo+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvOwo+ID4g Kwo+ID4gIAlzd2l0Y2ggKGNtZC0+bW9kaWZpZXJbMF0pIHsKPiA+ICAJY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRF9DQ1M6Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0ND UzoKPiA+ICAJCXJldHVybiBsb29rdXBfZm9ybWF0X2luZm8oc2tsX2Njc19mb3JtYXRzLAo+ID4g IAkJCQkJICBBUlJBWV9TSVpFKHNrbF9jY3NfZm9ybWF0cyksCj4gPiAgCQkJCQkgIGNtZC0+cGl4 ZWxfZm9ybWF0KTsKPiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19D Q1M6Cj4gPiArCQlpbmZvID0gbG9va3VwX2Zvcm1hdF9pbmZvKGdlbjEyX21jX2Njc19mb3JtYXRz LAo+ID4gKwkJCQkJICBBUlJBWV9TSVpFKGdlbjEyX21jX2Njc19mb3JtYXRzKSwKPiA+ICsJCQkJ CSAgY21kLT5waXhlbF9mb3JtYXQpOwo+ID4gKwkJaWYgKGluZm8pCj4gPiArCQkJcmV0dXJuIGlu Zm87Cj4gPiArCQkvKiBmYWxsIHRocm91Z2ggKi8KPiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRF9HRU4xMl9SQ19DQ1M6Cj4gPiAgCQlyZXR1cm4gbG9va3VwX2Zvcm1hdF9pbmZvKGdl bjEyX2Njc19mb3JtYXRzLAo+ID4gIAkJCQkJICBBUlJBWV9TSVpFKGdlbjEyX2Njc19mb3JtYXRz KSwKPiA+IEBAIC0yNTI2LDEzICsyNTcwLDYgQEAgaW50ZWxfZ2V0X2Zvcm1hdF9pbmZvKGNvbnN0 IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpCj4gPiAgCX0KPiA+ICB9Cj4gPiAgCj4gPiAt Ym9vbCBpc19jY3NfbW9kaWZpZXIodTY0IG1vZGlmaWVyKQo+ID4gLXsKPiA+IC0JcmV0dXJuIG1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUyB8fAo+ID4gLQkg ICAgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4gPiAtCSAg ICAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOwo+ID4gLX0KPiA+ IC0KPiA+ICB1MzIgaW50ZWxfcGxhbmVfZmJfbWF4X3N0cmlkZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQkJICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlm aWVyKQo+ID4gIHsKPiA+IEBAIC0yNTc2LDcgKzI2MTMsNyBAQCBpbnRlbF9mYl9zdHJpZGVfYWxp Z25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQKPiA+IGNvbG9yX3Bs YW5lKQo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZi LT5kZXYpOwo+ID4gIAl1MzIgdGlsZV93aWR0aDsKPiA+ICAKPiA+IC0JaWYgKGlzX3N1cmZhY2Vf bGluZWFyKGZiLT5tb2RpZmllciwgY29sb3JfcGxhbmUpKSB7Cj4gPiArCWlmIChpc19zdXJmYWNl X2xpbmVhcihmYiwgY29sb3JfcGxhbmUpKSB7Cj4gPiAgCQl1MzIgbWF4X3N0cmlkZSA9IGludGVs X3BsYW5lX2ZiX21heF9zdHJpZGUoZGV2X3ByaXYsCj4gPiAgCQkJCQkJCSAgIGZiLT5mb3JtYXQt PmZvcm1hdCwKPiA+ICAJCQkJCQkJICAgZmItPm1vZGlmaWVyKTsKPiA+IEBAIC0yNTkyLDcgKzI2 MjksNyBAQCBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQKPiA+IGNvbG9yX3BsYW5lKQo+ID4gIAl9Cj4gPiAgCj4gPiAgCXRpbGVf d2lkdGggPSBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Cj4gPiAtCWlm IChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSAmJiBjb2xvcl9wbGFuZSA9PSAwKSB7Cj4g PiArCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgewo+ID4gIAkJLyoKPiA+ICAJ CSAqIERpc3BsYXkgV0EgIzA1MzE6IHNrbCxieHQsa2JsLGdsawo+ID4gIAkJICoKPiA+IEBAIC0y NjAyLDcgKzI2MzksNyBAQCBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLCBpbnQKPiA+IGNvbG9yX3BsYW5lKQo+ID4gIAkJICogcmVxdWly ZSB0aGUgZW50aXJlIGZiIHRvIGFjY29tbW9kYXRlIHRoYXQgdG8gYXZvaWQKPiA+ICAJCSAqIHBv dGVudGlhbCBydW50aW1lIGVycm9ycyBhdCBwbGFuZSBjb25maWd1cmF0aW9uIHRpbWUuCj4gPiAg CQkgKi8KPiA+IC0JCWlmIChJU19HRU4oZGV2X3ByaXYsIDkpICYmIGZiLT53aWR0aCA+IDM4NDAp Cj4gPiArCQlpZiAoSVNfR0VOKGRldl9wcml2LCA5KSAmJiBjb2xvcl9wbGFuZSA9PSAwICYmIGZi LT53aWR0aCA+IDM4NDApCj4gPiAgCQkJdGlsZV93aWR0aCAqPSA0Owo+ID4gIAkJLyoKPiA+ICAJ CSAqIFRoZSBtYWluIHN1cmZhY2UgcGl0Y2ggbXVzdCBiZSBwYWRkZWQgdG8gYSBtdWx0aXBsZSBv ZiBmb3VyCj4gPiBAQCAtMjY4MiwyNSArMjcxOSw3NSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9wbGFu ZV9uZWVkc19yZW1hcChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUKPiA+ICpwbGFuZV9z dGF0ZSkKPiA+ICAJcmV0dXJuIHN0cmlkZSA+IG1heF9zdHJpZGU7Cj4gPiAgfQo+ID4gIAo+ID4g K3N0YXRpYyB2b2lkCj4gPiAraW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAqaHN1 YiwgaW50ICp2c3ViLCBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50Cj4gPiBj b2xvcl9wbGFuZSkKPiA+ICt7Cj4gPiArCWludCBpOwo+ID4gKwlzdGF0aWMgY29uc3Qgc3RydWN0 IHsKPiA+ICsJCXUzMiBmb3JtYXQ7Cj4gPiArCQlpbnQgdnN1Yls0XTsKPiA+ICsJCWludCBoc3Vi WzRdOwo+ID4gKwl9IG1jX2Njc19zdWJzYW1wbGluZ1tdID0geyB7IC5oc3ViID0geyAxLCAyLCA4 LCAxNiB9LAo+ID4gKwkJCQkgICAgIC52c3ViID0geyAxLCAyLCAzMiwgMzIgfSwKPiA+ICsJCQkJ ICAgICAuZm9ybWF0ID0gRFJNX0ZPUk1BVF9OVjEyLCB9LAo+ID4gKwkJCQkgfTsKPiA+ICsKPiA+ ICsJKmhzdWIgPSBmYi0+Zm9ybWF0LT5oc3ViOwo+ID4gKwkqdnN1YiA9IGZiLT5mb3JtYXQtPnZz dWI7Cj4gPiArCj4gPiArCWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfR0VOMTJfTUNfQ0NTICYmCj4gPiArCSAgICBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzID09IDQp IHsKPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1jX2Njc19zdWJzYW1wbGluZyk7 IGkrKykgewo+ID4gKwkJCWlmICAobWNfY2NzX3N1YnNhbXBsaW5nW2ldLmZvcm1hdCA9PSBmYi0+ Zm9ybWF0LT5mb3JtYXQpIHsKPiA+ICsJCQkJKmhzdWIgPSBtY19jY3Nfc3Vic2FtcGxpbmdbaV0u aHN1Yltjb2xvcl9wbGFuZV07Cj4gPiArCQkJCSp2c3ViID0gbWNfY2NzX3N1YnNhbXBsaW5nW2ld LnZzdWJbY29sb3JfcGxhbmVdOwo+ID4gKwkJCQlicmVhazsKPiA+ICsJCQl9Cj4gPiArCQl9Cj4g PiArCQlXQVJOX09OKGkgPT0gQVJSQVlfU0laRShtY19jY3Nfc3Vic2FtcGxpbmcpKTsKPiA+ICsJ fQo+IAo+IEhtbS4gSSB3b25kZXIgaWYgd2UgY291bGQgc3dpdGNoIG92ZXIgdG8gdGhhdCBibG9j ayBzaXplIHN0dWZmCj4gaW4gdGhlIGZvcm1hdCBpbmZvPyBBcyBpcyBJIGRvbid0IHRoaW5rIGZy YW1lYnVmZmVyX2NoZWNrKCkgd2lsbAo+IGRvIHRoZSByaWdodCB0aGluZyBmb3IgdGhpcyBzdHVm Zi4KClRob3VnaHQgYWJvdXQgaXQgcXVpdGUgYSBiaXQgKGV2ZW4gY29kZWQgc29tZSBwYXJ0cyku IEkgd2Fzbid0IDEwMCUgc3VyZSBpZiBpdCBtYXRjaGVzIHdoYXQgd2UgbmVlZAphbmQgaGFkIHRv byBtYW55IHF1ZXN0aW9ucyBhYm91dCBpdCdzIGludGVuZGVkIHVzYWdlLiBBcmUgYmxvY2sgZGlt ZW5zaW9ucyBmb3IgZWFjaCBwbGFuZQppbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyPyBTaG91bGQg cmVsYXRpdmUgcGxhbmUgZGltZW5zaW9ucyBiZSB0YWtlbiBpbnRvIGFjY291bnQgb3Igd2UganVz dCBkZWZpbmUKdGhlIGRpbWVuc2lvbnMgYmFzZWQgb24gZWFjaCBwbGFuZSdzIHVuaXQgYmxvY2s/ IERvIHRoZSBibG9jayBkaW1lbnNpb25zIGNvbXBsZW1lbnQgdnN1YiBhbmQgaHN1YiBvcgppcyB0 aGF0IGFuIGFsdGVybmF0aXZlPwoKSW4gYW55IGNhc2UsIGZlbHQgaXQgd291bGQgYmUgYmV0dGVy IHRvIGNvbnZlcnQgYWxsIGZvcm1hdHMvbW9kaWZpZXJzIHRvIHN3aXRjaCB0byB1c2luZyBibG9j a3MKdG9nZXRoZXIuIFRob3VnaHRzPwoKLURLCj4gCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkCj4gPiAraW50ZWxfZmJfcGxhbmVfZGltcyhpbnQgKncsIGludCAqaCwgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKPiA+ICt7Cj4gPiArCWludCBoc3ViLCB2 c3ViOwo+ID4gKwo+ID4gKwlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWIsICZ2 c3ViLCBmYiwgY29sb3JfcGxhbmUpOwo+ID4gKwkqdyA9IGZiLT53aWR0aC9oc3ViOwo+ID4gKwkq aCA9IGZiLT5oZWlnaHQvdnN1YjsKPiA+ICt9Cj4gPiArCj4gPiAgc3RhdGljIGludAo+ID4gLWlu dGVsX2ZiX2NoZWNrX2Njc194eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHgsIGlu dCB5KQo+ID4gK2ludGVsX2ZiX2NoZWNrX2Njc194eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IGF1eF9wbGFuZSwgaW50IHgsIGludCB5KQo+ID4gIHsKPiA+ICAJc3RydWN0IGludGVs X2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiA+IC0J aW50IGhzdWIgPSBmYi0+Zm9ybWF0LT5oc3ViOwo+ID4gLQlpbnQgdnN1YiA9IGZiLT5mb3JtYXQt PnZzdWI7Cj4gPiArCWludCBoc3ViLCB2c3ViOwo+ID4gKwlpbnQgaHN1Yl9tYWluLCB2c3ViX21h aW47Cj4gPiAgCWludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKPiA+ICAJaW50IGNjc194LCBj Y3NfeTsKPiA+ICAJaW50IG1haW5feCwgbWFpbl95Owo+ID4gKwlpbnQgbWFpbl9wbGFuZTsKPiA+ ICsKPiA+ICsJaWYgKCFpc19jY3NfcGxhbmUoZmIsIGF1eF9wbGFuZSkpCj4gPiArCQlyZXR1cm4g MDsKPiA+ICsKPiA+ICsJbWFpbl9wbGFuZSA9IChhdXhfcGxhbmUgLSAxKSAvIDI7Cj4gCj4gJ2F1 eF9wbGFuZSAtIG51bV9wbGFuZXMvMicgbWlnaHQgYmUgYSBjbGVhcmVyIHdheSB0byB3cml0ZSB0 aGF0Lgo+IFRoZSBudW1fcGxhbmVzLzIgYWxyZWFkeSBtYWRlIGFuIGFwcGVhcmFuY2UgaW4gdGhl IGlzX2Njc19wbGFuZSgpIHRoaW5nLgo+IAo+IENvdWxkIGFsc28gZXh0cmFjdCB0aGlzIHRvIGEg c21hbGwgaGVscGVyIHRvIGhlbHAgcmVhZGFiaWxpdHkuCk9rYXkuCgo+IAo+ID4gKwlpbnRlbF90 aWxlX2RpbXMoZmIsIGF1eF9wbGFuZSwgJnRpbGVfd2lkdGgsICZ0aWxlX2hlaWdodCk7Cj4gPiAr CWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZygmaHN1YiwgJnZzdWIsIGZiLCBhdXhfcGxh bmUpOwo+ID4gKwlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWJfbWFpbiwgJnZz dWJfbWFpbiwgZmIsCj4gPiArCQkJCSAgICAgICBtYWluX3BsYW5lKTsKPiA+ICAKPiA+IC0JaW50 ZWxfdGlsZV9kaW1zKGZiLCAxLCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0KTsKPiA+ICsJaHN1 YiAvPSBoc3ViX21haW47Cj4gPiArCXZzdWIgLz0gdnN1Yl9tYWluOwo+ID4gIAo+ID4gIAl0aWxl X3dpZHRoICo9IGhzdWI7Cj4gPiAgCXRpbGVfaGVpZ2h0ICo9IHZzdWI7Cj4gPiAgCj4gPiAgCWNj c194ID0gKHggKiBoc3ViKSAlIHRpbGVfd2lkdGg7Cj4gPiAgCWNjc195ID0gKHkgKiB2c3ViKSAl IHRpbGVfaGVpZ2h0Owo+ID4gLQltYWluX3ggPSBpbnRlbF9mYi0+bm9ybWFsWzBdLnggJSB0aWxl X3dpZHRoOwo+ID4gLQltYWluX3kgPSBpbnRlbF9mYi0+bm9ybWFsWzBdLnkgJSB0aWxlX2hlaWdo dDsKPiA+ICsJbWFpbl94ID0gaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS54ICUgdGlsZV93 aWR0aDsKPiA+ICsJbWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS55ICUgdGls ZV9oZWlnaHQ7Cj4gPiAgCj4gPiAgCS8qCj4gPiAgCSogQ0NTIGRvZXNuJ3QgaGF2ZSBpdHMgb3du IHgveSBvZmZzZXQgcmVnaXN0ZXIsIHNvIHRoZSBpbnRyYSBDQ1MgdGlsZQo+ID4gQEAgLTI3MTAs OCArMjc5Nyw4IEBAIGludGVsX2ZiX2NoZWNrX2Njc194eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgaW50IHgsIGludCB5KQo+ID4gIAkJRFJNX0RFQlVHX0tNUygiQmFkIENDUyB4L3kgKG1h aW4gJWQsJWQgY2NzICVkLCVkKSBmdWxsIChtYWluICVkLCVkIGNjcyAlZCwlZClcbiIsCj4gPiAg CQkJICAgICAgbWFpbl94LCBtYWluX3ksCj4gPiAgCQkJICAgICAgY2NzX3gsIGNjc195LAo+ID4g LQkJCSAgICAgIGludGVsX2ZiLT5ub3JtYWxbMF0ueCwKPiA+IC0JCQkgICAgICBpbnRlbF9mYi0+ bm9ybWFsWzBdLnksCj4gPiArCQkJICAgICAgaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS54 LAo+ID4gKwkJCSAgICAgIGludGVsX2ZiLT5ub3JtYWxbbWFpbl9wbGFuZV0ueSwKPiA+ICAJCQkg ICAgICB4LCB5KTsKPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gIAl9Cj4gPiBAQCAtMjczOSw4 ICsyODI2LDcgQEAgaW50ZWxfZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiA+ICAJCWludCByZXQ7Cj4gPiAgCj4gPiAgCQljcHAgPSBmYi0+Zm9ybWF0LT5j cHBbaV07Cj4gPiAtCQl3aWR0aCA9IGRybV9mcmFtZWJ1ZmZlcl9wbGFuZV93aWR0aChmYi0+d2lk dGgsIGZiLCBpKTsKPiA+IC0JCWhlaWdodCA9IGRybV9mcmFtZWJ1ZmZlcl9wbGFuZV9oZWlnaHQo ZmItPmhlaWdodCwgZmIsIGkpOwo+ID4gKwkJaW50ZWxfZmJfcGxhbmVfZGltcygmd2lkdGgsICZo ZWlnaHQsIGZiLCBpKTsKPiA+ICAKPiA+ICAJCXJldCA9IGludGVsX2ZiX29mZnNldF90b194eSgm eCwgJnksIGZiLCBpKTsKPiA+ICAJCWlmIChyZXQpIHsKPiA+IEBAIC0yNzQ5LDExICsyODM1LDkg QEAgaW50ZWxfZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiA+ICAJCQlyZXR1cm4gcmV0Owo+ID4gIAkJfQo+ID4gIAo+ID4gLQkJaWYgKGlzX2Njc19tb2Rp ZmllcihmYi0+bW9kaWZpZXIpICYmIGkgPT0gMSkgewo+ID4gLQkJCXJldCA9IGludGVsX2ZiX2No ZWNrX2Njc194eShmYiwgeCwgeSk7Cj4gPiAtCQkJaWYgKHJldCkKPiA+IC0JCQkJcmV0dXJuIHJl dDsKPiA+IC0JCX0KPiA+ICsJCXJldCA9IGludGVsX2ZiX2NoZWNrX2Njc194eShmYiwgaSwgeCwg eSk7Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAgCQkvKgo+ ID4gIAkJICogVGhlIGZlbmNlIChpZiB1c2VkKSBpcyBhbGlnbmVkIHRvIHRoZSBzdGFydCBvZiB0 aGUgb2JqZWN0Cj4gPiBAQCAtMzM3MSw2ICszNDU1LDcgQEAgc3RhdGljIGludCBza2xfbWF4X3Bs YW5lX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ID4gIAkJCXJldHVy biA1MTIwOwo+ID4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiA+ICAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+ID4gKwljYXNlIEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKPiA+ICAJCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KPiA+ ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKPiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWWZfVElMRUQ6Cj4gPiBAQCAtMzQzMCwxNiArMzUxNSwxOCBAQCBzdGF0aWMgaW50IGljbF9t YXhfcGxhbmVfaGVpZ2h0KHZvaWQpCj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyBib29sIHNrbF9j aGVja19tYWluX2Njc19jb29yZGluYXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlLAo+ID4gLQkJCQkJICAgaW50IG1haW5feCwgaW50IG1haW5feSwgdTMyIG1haW5fb2Zm c2V0KQo+ID4gKwkJCQkJICAgaW50IG1haW5feCwgaW50IG1haW5feSwKPiA+ICsJCQkJCSAgIHUz MiBtYWluX29mZnNldCwgaW50IGF1eF9wbGFuZSkKPiA+ICB7Cj4gPiAgCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gPiAtCWludCBoc3Vi ID0gZmItPmZvcm1hdC0+aHN1YjsKPiA+IC0JaW50IHZzdWIgPSBmYi0+Zm9ybWF0LT52c3ViOwo+ ID4gLQlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueDsKPiA+IC0JaW50 IGF1eF95ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLnk7Cj4gPiAtCXUzMiBhdXhfb2Zm c2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLm9mZnNldDsKPiA+IC0JdTMyIGFsaWdu bWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCAxKTsKPiA+IC0KPiA+ICsJaW50IGhzdWI7 Cj4gPiArCWludCB2c3ViOwo+ID4gKwlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbYXV4X3BsYW5lXS54Owo+ID4gKwlpbnQgYXV4X3kgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbYXV4X3BsYW5lXS55Owo+ID4gKwl1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVthdXhfcGxhbmVdLm9mZnNldDsKPiA+ICsJdTMyIGFsaWdubWVudCA9IGludGVsX3N1 cmZfYWxpZ25tZW50KGZiLCBhdXhfcGxhbmUpOwo+ID4gKwo+ID4gKwlpbnRlbF9mYl9wbGFuZV9n ZXRfc3Vic2FtcGxpbmcoJmhzdWIsICZ2c3ViLCBmYiwgYXV4X3BsYW5lKTsKPiA+ICAJd2hpbGUg KGF1eF9vZmZzZXQgPj0gbWFpbl9vZmZzZXQgJiYgYXV4X3kgPD0gbWFpbl95KSB7Cj4gPiAgCQlp bnQgeCwgeTsKPiA+ICAKPiA+IEBAIC0zNDUxLDcgKzM1MzgsNyBAQCBzdGF0aWMgYm9vbCBza2xf Y2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlCj4gPiAq cGxhbmVfc3RhdGUKPiA+ICAKPiA+ICAJCXggPSBhdXhfeCAvIGhzdWI7Cj4gPiAgCQl5ID0gYXV4 X3kgLyB2c3ViOwo+ID4gLQkJYXV4X29mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVk X29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAxLAo+ID4gKwkJYXV4X29mZnNldCA9IGludGVs X3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCBhdXhfcGxh bmUsCj4gPiAgCQkJCQkJCSAgICAgICBhdXhfb2Zmc2V0LCBhdXhfb2Zmc2V0IC0gYWxpZ25tZW50 KTsKPiA+ICAJCWF1eF94ID0geCAqIGhzdWIgKyBhdXhfeCAlIGhzdWI7Cj4gPiAgCQlhdXhfeSA9 IHkgKiB2c3ViICsgYXV4X3kgJSB2c3ViOwo+ID4gQEAgLTM0NjAsOSArMzU0Nyw5IEBAIHN0YXRp YyBib29sIHNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUKPiA+ICpwbGFuZV9zdGF0ZQo+ID4gIAlpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1eF95 ICE9IG1haW5feSkKPiA+ICAJCXJldHVybiBmYWxzZTsKPiA+ICAKPiA+IC0JcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lWzFdLm9mZnNldCA9IGF1eF9vZmZzZXQ7Cj4gPiAtCXBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVsxXS54ID0gYXV4X3g7Cj4gPiAtCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsx XS55ID0gYXV4X3k7Cj4gPiArCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLm9m ZnNldCA9IGF1eF9vZmZzZXQ7Cj4gPiArCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxh bmVdLnggPSBhdXhfeDsKPiA+ICsJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0u eSA9IGF1eF95Owo+ID4gIAo+ID4gIAlyZXR1cm4gdHJ1ZTsKPiA+ICB9Cj4gPiBAQCAtMzQ3OCw3 ICszNTY1LDggQEAgc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiAgCWludCBoID0gZHJtX3JlY3RfaGVpZ2h0 KCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owo+ID4gIAlpbnQgbWF4X3dpZHRoOwo+ID4g IAlpbnQgbWF4X2hlaWdodDsKPiA+IC0JdTMyIGFsaWdubWVudCwgb2Zmc2V0LCBhdXhfb2Zmc2V0 ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLm9mZnNldDsKPiA+ICsJaW50IGF1eF9wbGFu ZSA9IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyOwo+ID4gKwl1MzIgYWxpZ25tZW50LCBvZmZz ZXQsIGF1eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS5vZmZz ZXQ7Cj4gPiAgCj4gPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQo+ID4gIAkJbWF4 X3dpZHRoID0gaWNsX21heF9wbGFuZV93aWR0aChmYiwgMCwgcm90YXRpb24pOwo+ID4gQEAgLTM1 MzYsNyArMzYyNCw5IEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3VyZmFjZShzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4gIAkgKiB0aGV5IG1hdGNoIHdpdGgg dGhlIG1haW4gc3VyZmFjZSB4L3kgb2Zmc2V0cy4KPiA+ICAJICovCj4gPiAgCWlmIChpc19jY3Nf bW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgewo+ID4gLQkJd2hpbGUgKCFza2xfY2hlY2tfbWFpbl9j Y3NfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUsIHgsIHksIG9mZnNldCkpIHsKPiA+ICsKPiA+ICsJ CXdoaWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5 LAo+ID4gKwkJCQkJCSAgICAgICBvZmZzZXQsIGF1eF9wbGFuZSkpIHsKPiA+ICAJCQlpZiAob2Zm c2V0ID09IDApCj4gPiAgCQkJCWJyZWFrOwo+ID4gIAo+ID4gQEAgLTM1NDQsNyArMzYzNCw4IEBA IHN0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQo+ID4gIAkJCQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1l bnQpOwo+ID4gIAkJfQo+ID4gIAo+ID4gLQkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lWzFdLnggfHwgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueSkgewo+ID4gKwkJ aWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ueCB8fAo+ID4gKwkJ ICAgIHkgIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ueSkgewo+ID4gIAkJ CURSTV9ERUJVR19LTVMoIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBv ZmZzZXQgZHVlIHRvCj4gPiBDQ1NcbiIpOwo+ID4gIAkJCXJldHVybiAtRUlOVkFMOwo+ID4gIAkJ fQo+ID4gQEAgLTM1ODcsNiArMzY3OCw0MSBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19udjEyX2F1 eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZQo+ID4gKnBsYW5lX3N0YXRlKQo+ID4g IAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAgCX0KPiA+ICAKPiA+ICsJaWYgKGlzX2Njc19tb2RpZmll cihmYi0+bW9kaWZpZXIpKSB7Cj4gPiArCQlpbnQgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVszXS5vZmZzZXQ7Cj4gPiArCQlpbnQgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9h bGlnbm1lbnQoZmIsIDEpOwo+ID4gKwo+ID4gKwkJaWYgKG9mZnNldCA+IGF1eF9vZmZzZXQpIHsK PiA+ICsJCQlpbnQgaHN1YiwgdnN1YjsKPiA+ICsJCQlpbnQgbWFpbl94ID0geCwgbWFpbl95ID0g eTsKPiA+ICsKPiA+ICsKPiA+ICsJCQlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhz dWIsICZ2c3ViLCBmYiwgMSk7Cj4gPiArCQkJeCA9IG1haW5feCAvIGhzdWI7Cj4gPiArCQkJeSA9 IG1haW5feSAvIHZzdWI7Cj4gPiArCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWdu ZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDEsCj4gPiArCQkJCQkJCQkgICBvZmZzZXQs Cj4gPiArCQkJCQkJCQkgICBhdXhfb2Zmc2V0ICYgfihhbGlnbm1lbnQgLSAxKSk7Cj4gPiArCQkJ eCA9IHggKiBoc3ViICsgbWFpbl94ICUgaHN1YjsKPiA+ICsJCQl5ID0geSAqIHZzdWIgKyBtYWlu X3kgJSB2c3ViOwo+ID4gKwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJd2hpbGUgKCFza2xfY2hlY2tf bWFpbl9jY3NfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUsIHgsIHksIG9mZnNldCwgMykpIHsKPiA+ ICsJCQlpZiAob2Zmc2V0ID09IDApCj4gPiArCQkJCWJyZWFrOwo+ID4gKwo+ID4gKwkJCW9mZnNl dCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRl LCAxLAo+ID4gKwkJCQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOwo+ID4gKwkJ fQo+ID4gKwo+ID4gKwkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzNdLnggfHwK PiA+ICsJCSAgICB5ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVszXS55KSB7Cj4gPiArCQkJ RFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9m ZnNldCBkdWUgdG8KPiA+IENDU1xuIik7Cj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQl9 Cj4gCj4gUHJvYmFibHkgdGltZSB0byByZWZhY3RvciBzb21lIG9mIHRoZSBzdHVmZiBzbyB3ZSBk b24ndCBoYXZlIHRvIGNvcHkKPiBwYXN0ZSBzbyBtdWNoLgo+IAo+ID4gKwl9Cj4gPiArCj4gPiAg CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5vZmZzZXQgPSBvZmZzZXQ7Cj4gPiAgCXBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVsxXS54ID0geDsKPiA+ICAJcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lWzFdLnkgPSB5Owo+ID4gQEAgLTM1OTksMTkgKzM3MjUsMzAgQEAgc3RhdGljIGludCBza2xf Y2hlY2tfY2NzX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZQo+ID4gKnBsYW5l X3N0YXRlKQo+ID4gIAljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5iYXNlLmZiOwo+ID4gIAlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueDEg Pj4gMTY7Cj4gPiAgCWludCBzcmNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy55MSA+PiAxNjsK PiA+IC0JaW50IGhzdWIgPSBmYi0+Zm9ybWF0LT5oc3ViOwo+ID4gLQlpbnQgdnN1YiA9IGZiLT5m b3JtYXQtPnZzdWI7Cj4gPiAtCWludCB4ID0gc3JjX3ggLyBoc3ViOwo+ID4gLQlpbnQgeSA9IHNy Y195IC8gdnN1YjsKPiA+ICAJdTMyIG9mZnNldDsKPiA+ICsJaW50IGNjczsKPiA+ICAKPiA+IC0J aW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMSk7Cj4gPiAtCW9mZnNl dCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0 ZSwgMSk7Cj4gPiAgCj4gPiAtCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5vZmZzZXQgPSBv ZmZzZXQ7Cj4gPiAtCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS54ID0geCAqIGhzdWIgKyBz cmNfeCAlIGhzdWI7Cj4gPiAtCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55ID0geSAqIHZz dWIgKyBzcmNfeSAlIHZzdWI7Cj4gPiArCWZvciAoY2NzID0gZmItPmZvcm1hdC0+bnVtX3BsYW5l cyAvIDI7Cj4gCj4gSSBndWVzcyBhbm90aGVyIGhlbHBlciB0byBkbyB0aGUgbWFpbi0+YXV4IGlu ZGV4IGNhbGN1bGF0aW9uIHdvdWxkIG1ha2UKPiB0aGlzIGxlc3MgbWFnaWN5Lgo+IAo+IGNjcyA8 IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7IGNjcysrKSB7Cj4gPiArCQlpbnQgaHN1YiwgdnN1YjsK PiA+ICsJCWludCBtYWluX2hzdWIsIG1haW5fdnN1YjsKPiA+ICsJCWludCB4LCB5Owo+ID4gKwo+ ID4gKwkJaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNj cyk7Cj4gPiArCQlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJm1haW5faHN1YiwgJm1h aW5fdnN1YiwgZmIsIChjY3MgLSAxKS8gMik7Cj4gPiArCj4gPiArCQloc3ViIC89IG1haW5faHN1 YjsKPiA+ICsJCXZzdWIgLz0gbWFpbl92c3ViOwo+ID4gKwkJeCA9IHNyY194IC8gaHN1YjsKPiA+ ICsJCXkgPSBzcmNfeSAvIHZzdWI7Cj4gPiAgCj4gPiArCQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygm eCwgJnksIHBsYW5lX3N0YXRlLCBjY3MpOwo+ID4gKwkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29t cHV0ZV9hbGlnbmVkX29mZnNldCgmeCwgJnksCj4gPiArCQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwg Y2NzKTsKPiA+ICsJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NdLm9mZnNldCA9IG9mZnNl dDsKPiA+ICsJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NdLnggPSB4ICogaHN1YiArIHNy Y194ICUgaHN1YjsKPiA+ICsJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NdLnkgPSB5ICog dnN1YiArIHNyY195ICUgdnN1YjsKPiA+ICsJfQo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiAg Cj4gPiBAQCAtMzYxOSw2ICszNzU2LDcgQEAgaW50IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiAgewo+ID4gIAljb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ID4gIAlp bnQgcmV0Owo+ID4gKwlib29sIG5lZWRzX2F1eCA9IGZhbHNlOwo+ID4gIAo+ID4gIAlyZXQgPSBp bnRlbF9wbGFuZV9jb21wdXRlX2d0dChwbGFuZV9zdGF0ZSk7Cj4gPiAgCWlmIChyZXQpCj4gPiBA QCAtMzYyOCwyMSArMzc2NiwzMSBAQCBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICAJCXJldHVybiAwOwo+ID4gIAo+ ID4gIAkvKgo+ID4gLQkgKiBIYW5kbGUgdGhlIEFVWCBzdXJmYWNlIGZpcnN0IHNpbmNlCj4gPiAt CSAqIHRoZSBtYWluIHN1cmZhY2Ugc2V0dXAgZGVwZW5kcyBvbiBpdC4KPiA+ICsJICogSGFuZGxl IHRoZSBBVVggc3VyZmFjZSBmaXJzdCBzaW5jZSB0aGUgbWFpbiBzdXJmYWNlIHNldHVwIGRlcGVu ZHMgb24KPiA+ICsJICogaXQuCj4gPiAgCSAqLwo+ID4gLQlpZiAoZHJtX2Zvcm1hdF9pbmZvX2lz X3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQpKSB7Cj4gPiAtCQlyZXQgPSBza2xfY2hlY2tfbnYx Ml9hdXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Cj4gPiArCWlmIChpc19jY3NfbW9kaWZpZXIoZmIt Pm1vZGlmaWVyKSkgewo+ID4gKwkJbmVlZHNfYXV4ID0gdHJ1ZTsKPiA+ICsJCXJldCA9IHNrbF9j aGVja19jY3NfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+ID4gIAkJaWYgKHJldCkKPiA+ICAJ CQlyZXR1cm4gcmV0Owo+ID4gLQl9IGVsc2UgaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZp ZXIpKSB7Cj4gPiAtCQlyZXQgPSBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRl KTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoZHJtX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxh bmFyKGZiLT5mb3JtYXQpKSB7Cj4gPiArCQluZWVkc19hdXggPSB0cnVlOwo+ID4gKwkJcmV0ID0g c2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+ID4gIAkJaWYgKHJldCkK PiA+ICAJCQlyZXR1cm4gcmV0Owo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lWzFdLm9mZnNldCA9IH4weGZmZjsKPiA+IC0JCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVsxXS54ID0gMDsKPiA+IC0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55ID0gMDsK PiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoIW5lZWRzX2F1eCkgewo+ID4gKwkJaW50IGk7Cj4gPiAr Cj4gPiArCQlmb3IgKGkgPSAxOyBpIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7Cj4g PiArCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9IH4weGZmZjsKPiA+ICsJ CQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IDA7Cj4gPiArCQkJcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lW2ldLnkgPSAwOwo+ID4gKwkJfQo+ID4gIAl9Cj4gPiAgCj4gPiAgCXJldCA9 IHNrbF9jaGVja19tYWluX3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+ID4gQEAgLTQwMzAsNyArNDE3 OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIKPiA+ICpmYiwKPiA+ICAJICogVGhlIHN0cmlkZSBpcyBlaXRo ZXIgZXhwcmVzc2VkIGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMgY2h1bmtzIGZvcgo+ID4gIAkg KiBsaW5lYXIgYnVmZmVycyBvciBpbiBudW1iZXIgb2YgdGlsZXMgZm9yIHRpbGVkIGJ1ZmZlcnMu Cj4gPiAgCSAqLwo+ID4gLQlpZiAoaXNfc3VyZmFjZV9saW5lYXIoZmItPm1vZGlmaWVyLCBjb2xv cl9wbGFuZSkpCj4gPiArCWlmIChpc19zdXJmYWNlX2xpbmVhcihmYiwgY29sb3JfcGxhbmUpKQo+ ID4gIAkJcmV0dXJuIDY0Owo+ID4gIAllbHNlIGlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJv dGF0aW9uKSkKPiA+ICAJCXJldHVybiBpbnRlbF90aWxlX2hlaWdodChmYiwgY29sb3JfcGxhbmUp Owo+ID4gQEAgLTQxNjAsNiArNDMwOCw4IEBAIHN0YXRpYyB1MzIgc2tsX3BsYW5lX2N0bF90aWxp bmcodTY0IGZiX21vZGlmaWVyKQo+ID4gIAkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwKPiA+ ICAJCSAgICAgICBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFIHwKPiA+ICAJ CSAgICAgICBQTEFORV9DVExfQ0xFQVJfQ09MT1JfRElTQUJMRTsKPiA+ICsJY2FzZSBJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6Cj4gPiArCQlyZXR1cm4gUExBTkVfQ1RMX1RJ TEVEX1kgfCBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEU7Cj4gPiAgCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+ID4gIAkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9Z RjsKPiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+ID4gQEAgLTk5Njgs NiArMTAxMTgsOCBAQCBza3lsYWtlX2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZyhzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YywKPiA+ICAJCQlmYi0+bW9kaWZpZXIgPSBJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDEyID8KPiA+ICAJCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIDoK PiA+ICAJCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOwo+ID4gKwkJZWxzZSBpZiAodmFs ICYgUExBTkVfQ1RMX01FRElBX0RFQ09NUFJFU1NJT05fRU5BQkxFKQo+ID4gKwkJCWZiLT5tb2Rp ZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKPiA+ICAJCWVsc2UK PiA+ICAJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKPiA+ICAJCWJy ZWFrOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheV90eXBlcy5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheV90eXBlcy5oCj4gPiBpbmRleCA5NzY2NjlmMDFhOGMuLjU5OThiOTU5MjI1YyAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXlfdHlwZXMuaAo+ID4gQEAgLTUzMCw3ICs1MzAsNyBAQCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgewo+ID4gIAkJICovCj4gPiAgCQl1MzIgc3RyaWRlOwo+ID4gIAkJaW50IHgsIHk7Cj4gPiAt CX0gY29sb3JfcGxhbmVbMl07Cj4gPiArCX0gY29sb3JfcGxhbmVbNF07Cj4gPiAgCj4gPiAgCS8q IHBsYW5lIGNvbnRyb2wgcmVnaXN0ZXIgKi8KPiA+ICAJdTMyIGN0bDsKPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jCj4gPiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKPiA+IGluZGV4IDliOWI0MWIw ZmM5MS4uNzg4ZDBmYzhkOGVmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9zcHJpdGUuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9zcHJpdGUuYwo+ID4gQEAgLTUzMiwxMSArNTMyLDEzIEBAIHNrbF9wcm9ncmFt X3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiA+ICAJZW51bSBw bGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKPiA+ICAJZW51bSBwaXBlIHBpcGUgPSBwbGFu ZS0+cGlwZTsKPiA+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9z dGF0ZS0+YmFzZS5mYjsKPiA+ICsJaW50IGF1eF9wbGFuZSA9IGZiLT5mb3JtYXQtPm51bV9wbGFu ZXMgLyAyICsgY29sb3JfcGxhbmU7Cj4gPiAgCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRl X2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7Cj4gPiAgCXUzMiBzdXJmX2FkZHIg PSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY29sb3JfcGxhbmVdLm9mZnNldDsKPiA+ICAJdTMy IHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsKPiA+ IC0JdTMyIGF1eF9kaXN0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLm9mZnNldCAtIHN1 cmZfYWRkcjsKPiA+IC0JdTMyIGF1eF9zdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0 YXRlLCAxKTsKPiA+ICsJdTMyIGF1eF9kaXN0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1 eF9wbGFuZV0ub2Zmc2V0IC0gc3VyZl9hZGRyOwo+ID4gKwl1MzIgYXV4X3N0cmlkZSA9IHNrbF9w bGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGF1eF9wbGFuZSk7Cj4gPiAgCWludCBjcnRjX3ggPSBw bGFuZV9zdGF0ZS0+YmFzZS5kc3QueDE7Cj4gPiAgCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+ YmFzZS5kc3QueTE7Cj4gPiAgCXUzMiB4ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9y X3BsYW5lXS54Owo+ID4gQEAgLTU0NCw3ICs1NDYsNiBAQCBza2xfcHJvZ3JhbV9wbGFuZShzdHJ1 Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4gIAl1MzIgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgm cGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKPiA+ICAJdTMyIHNyY19oID0gZHJtX3JlY3Rf aGVpZ2h0KCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owo+ID4gIAlzdHJ1Y3QgaW50ZWxf cGxhbmUgKmxpbmtlZCA9IHBsYW5lX3N0YXRlLT5wbGFuYXJfbGlua2VkX3BsYW5lOwo+ID4gLQlj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ ID4gIAl1OCBhbHBoYSA9IHBsYW5lX3N0YXRlLT5iYXNlLmFscGhhID4+IDg7Cj4gPiAgCXUzMiBw bGFuZV9jb2xvcl9jdGwgPSAwOwo+ID4gIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ID4gQEAg LTYxOSw4ICs2MjAsOCBAQCBza2xfcHJvZ3JhbV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAo+ID4gIAo+ID4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ID4gIAkJSTkx NV9XUklURV9GVyhQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKPiA+IC0JCQkgICAg ICAocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLnkgPDwgMTYpIHwKPiA+IC0JCQkgICAgICBw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueCk7Cj4gPiArCQkJICAgICAgKHBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLnkgPDwgMTYpIHwKPiA+ICsJCQkgICAgICBwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS54KTsKPiA+ICAKPiA+ICAJLyoKPiA+ICAJICog VGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3YXMgcHJldmlvdXNs eQo+ID4gQEAgLTE3MzcsNyArMTczOCw4IEBAIHN0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrX2Zi KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gIAkgICAgIGZi LT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgfHwKPiA+ICAJICAgICBmYi0+ bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4gPiAgCSAgICAgZmIt Pm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MgfHwKPiA+IC0JICAgICBm Yi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTKSkgewo+ ID4gKwkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9S Q19DQ1MgfHwKPiA+ICsJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfR0VOMTJfTUNfQ0NTKSkgewo+ID4gIAkJRFJNX0RFQlVHX0tNUygiWS9ZZiB0aWxpbmcgbm90 IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlXG4iKTsKPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4g IAl9Cj4gPiBAQCAtMjE0OSw3ICsyMTUxLDE2IEBAIHN0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5l X2Zvcm1hdF9tb2RpZmllcnNfY2NzW10gPSB7Cj4gPiAgCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQK PiA+ICB9Owo+ID4gIAo+ID4gLXN0YXRpYyBjb25zdCB1NjQgZ2VuMTJfcGxhbmVfZm9ybWF0X21v ZGlmaWVyc19jY3NbXSA9IHsKPiA+ICtzdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1h dF9tb2RpZmllcnNfbWNfY2NzW10gPSB7Cj4gPiArCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dF TjEyX01DX0NDUywKPiA+ICsJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTLAo+ ID4gKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKPiA+ICsJSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQsCj4gPiArCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKPiA+ICsJRFJNX0ZPUk1BVF9NT0RfSU5W QUxJRAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3Jt YXRfbW9kaWZpZXJzX3JjX2Njc1tdID0gewo+ID4gIAlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9H RU4xMl9SQ19DQ1MsCj4gPiAgCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAo+ID4gIAlJOTE1X0ZP Uk1BVF9NT0RfWF9USUxFRCwKPiA+IEBAIC0yMzA1LDEwICsyMzE2LDIxIEBAIHN0YXRpYyBib29s IHNrbF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUs Cj4gPiAgCX0KPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIGJvb2wgZ2VuMTJfcGxhbmVfc3VwcG9y dHNfbWNfY2NzKGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCj4gCj4gcGxhbmVfaGFzX2ZvbygpIGlz IHRoZSBjb21tb24gaWRpb20uCj4gCj4gPiArewo+ID4gKwlyZXR1cm4gcGxhbmVfaWQgPCBQTEFO RV9TUFJJVEU0Owo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3Jt YXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCj4gPiAgCQkJCQkgICAg IHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKPiA+ICB7Cj4gPiArCXN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUpOwo+ID4gKwo+ID4gIAlzd2l0Y2ggKG1v ZGlmaWVyKSB7Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NT Ogo+ID4gKwkJaWYgKCFnZW4xMl9wbGFuZV9zdXBwb3J0c19tY19jY3MocGxhbmUtPmlkKSkKPiA+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gPiArCQkvKiBmYWxsIHRocm91Z2ggKi8KPiA+ICAJY2FzZSBE Uk1fRk9STUFUX01PRF9MSU5FQVI6Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6 Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gPiBAQCAtMjMyNiwxNCArMjM0 OCwxNyBAQCBzdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1 Y3QgZHJtX3BsYW5lICpfcGxhbmUsCj4gPiAgCQlpZiAoaXNfY2NzX21vZGlmaWVyKG1vZGlmaWVy KSkKPiA+ICAJCQlyZXR1cm4gdHJ1ZTsKPiA+ICAJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ID4gLQlj YXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ID4gLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6 Cj4gPiAtCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiA+ICAJY2FzZSBEUk1fRk9STUFU X1lVWVY6Cj4gPiAgCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgo+ID4gIAljYXNlIERSTV9GT1JNQVRf VVlWWToKPiA+ICAJY2FzZSBEUk1fRk9STUFUX1ZZVVk6Cj4gPiArCQlpZiAobW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTKQo+ID4gKwkJCXJldHVybiB0cnVl Owo+ID4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gPiAgCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgo+ ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjIx MDEwMTA6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiA+ICAJY2FzZSBEUk1f Rk9STUFUX1AwMTA6Cj4gPiAgCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgo+ID4gIAljYXNlIERSTV9G T1JNQVRfUDAxNjoKPiA+IEBAIC0yNDcwLDYgKzI0OTUsMTQgQEAgc3RhdGljIGNvbnN0IHUzMiAq aWNsX2dldF9wbGFuZV9mb3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiAqZGV2X3By aXYsCj4gPiAgCX0KPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIGNvbnN0IHU2NCAqZ2VuMTJfZ2V0 X3BsYW5lX21vZGlmaWVycyhlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQo+ID4gK3sKPiA+ICsJaWYg KGdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2NjcyhwbGFuZV9pZCkpCj4gPiArCQlyZXR1cm4gZ2Vu MTJfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19tY19jY3M7Cj4gPiArCWVsc2UKPiA+ICsJCXJldHVy biBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2NjczsKPiA+ICt9Cj4gPiArCj4gPiAg c3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19jY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+ID4gIAkJCSAgICAgIGVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5l X2lkKQo+ID4gIHsKPiA+IEBAIC0yNTM2LDcgKzI1NjksNyBAQCBza2xfdW5pdmVyc2FsX3BsYW5l X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCj4gPiAgCXBs YW5lLT5oYXNfY2NzID0gc2tsX3BsYW5lX2hhc19jY3MoZGV2X3ByaXYsIHBpcGUsIHBsYW5lX2lk KTsKPiA+ICAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpIHsKPiA+IC0JCW1vZGlmaWVy cyA9IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfY2NzOwo+ID4gKwkJbW9kaWZpZXJzID0g Z2VuMTJfZ2V0X3BsYW5lX21vZGlmaWVycyhwbGFuZV9pZCk7Cj4gPiAgCQlwbGFuZV9mdW5jcyA9 ICZnZW4xMl9wbGFuZV9mdW5jczsKPiA+ICAJfSBlbHNlIHsKPiA+ICAJCWlmIChwbGFuZS0+aGFz X2NjcykKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gaW5kZXggNTE5Y2ZiMGE1YzQyLi4w MmVhZWY4YWRhYzAgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gPiBAQCAtNjY5 Nyw2ICs2Njk3LDcgQEAgZW51bSB7Cj4gPiAgI2RlZmluZSAgIFBMQU5FX0NUTF9USUxFRF9ZCQkJ KDQgPDwgMTApCj4gPiAgI2RlZmluZSAgIFBMQU5FX0NUTF9USUxFRF9ZRgkJCSg1IDw8IDEwKQo+ ID4gICNkZWZpbmUgICBQTEFORV9DVExfRkxJUF9IT1JJWk9OVEFMCQkoMSA8PCA4KQo+ID4gKyNk ZWZpbmUgICBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEUJKDEgPDwgNCkgLyog VEdMKyAqLwo+ID4gICNkZWZpbmUgICBQTEFORV9DVExfQUxQSEFfTUFTSwkJCSgweDMgPDwgNCkg LyogUHJlLUdMSyAqLwo+ID4gICNkZWZpbmUgICBQTEFORV9DVExfQUxQSEFfRElTQUJMRQkJKDAg PDwgNCkKPiA+ICAjZGVmaW5lICAgUExBTkVfQ1RMX0FMUEhBX1NXX1BSRU1VTFRJUExZCSgyIDw8 IDQpCj4gPiAtLSAKPiA+IDIuMTcuMQo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4gSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPiAKPiAKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==