From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: Re: [PATCH 03/23] drm/i915: Move the TypeC port handling code to a separate file Date: Thu, 6 Jun 2019 12:09:05 +0300 Message-ID: <20190606090905.GA4301@ideak-desk.fi.intel.com> References: <20190604145826.16424-1-imre.deak@intel.com> <20190604145826.16424-4-imre.deak@intel.com> <87sgsn14vt.fsf@intel.com> Reply-To: imre.deak@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 084668938B for ; Thu, 6 Jun 2019 09:09:08 +0000 (UTC) Content-Disposition: inline In-Reply-To: <87sgsn14vt.fsf@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdW4gMDYsIDIwMTkgYXQgMTE6NDI6NDZBTSArMDMwMCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4gT24gVHVlLCAwNCBKdW4gMjAxOSwgSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29t PiB3cm90ZToKPiA+IE1vdmUgdGhlIFR5cGVDIHBvcnQgaGFuZGxpbmcgZnVuY3Rpb25zIHRvIGEg bmV3IGZpbGUgZm9yIGNsYXJpdHkuCj4gPgo+ID4gV2hpbGUgYXQgaXQ6Cj4gPiAtIHMvaWNsX3Rj X3BvcnRfY29ubmVjdGVkKCkvaW50ZWxfdGNfcG9ydF9jb25uZWN0ZWQoKS8KPiA+ICAgaWNsX3Rj X3BoeV9kaXNjb25uZWN0KCksIHdpbGwgYmUgdW5leHBvcnRlZCBsYXRlci4KPiA+Cj4gPiAtIHMv aW50ZWxfZHBfZ2V0X2ZpYV9zdXBwb3J0ZWRfbGFuZV9jb3VudCgpL2ludGVsX3RjX3BvcnRfZmlh X21heF9sYW5lX2NvdW50KCkvCj4gPiAgIEl0J3MgdXNlZCBmb3IgSERNSSBsZWdhY3kgbW9kZSB0 b28uCj4gPgo+ID4gLSBTaW1wbGlmeSBmdW5jdGlvbiBpbnRlcmZhY2VzIGJ5IHBhc3Npbmcgb25s eSBkaWdfcG9ydCB0byB0aGVtLgo+ID4KPiA+IE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KPiAKPiBT b21lIG5pdHBpY2tzIGJlbG93Lgo+IAo+IEJSLAo+IEphbmkuCj4gCj4gCj4gPgo+ID4gQ2M6IEFu aW1lc2ggTWFubmEgPGFuaW1lc2gubWFubmFAaW50ZWwuY29tPgo+ID4gQ2M6IFBhdWxvIFphbm9u aSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+ID4gQ2M6IEpvc8OpIFJvYmVydG8gZGUgU291 emEgPGpvc2Uuc291emFAaW50ZWwuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogSW1yZSBEZWFrIDxp bXJlLmRlYWtAaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZS5oZWFkZXItdGVzdCB8ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGRpLmMgICAgICAgICAgfCAgIDYgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cC5jICAgICAgICAgICB8IDIyNyArLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcC5oICAgICAgICAgICB8ICAgMiAtCj4gPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfdGMuYyAgICAgICAgICAgfCAyMzAgKysrKysrKysrKysrKysrKysrKysr Kwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmggICAgICAgICAgIHwgIDEzICsr Cj4gPiAgNyBmaWxlcyBjaGFuZ2VkLCAyNTIgaW5zZXJ0aW9ucygrKSwgMjMwIGRlbGV0aW9ucygt KQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5j Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmgK PiA+Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4gaW5kZXggYzBhN2IyOTk0MDc3Li43NGM0ZDEx ZDgzZWIgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiA+IEBAIC0xNzEsNyArMTcxLDgg QEAgaTkxNS15ICs9IGludGVsX2F1ZGlvLm8gXAo+ID4gIAkgIGludGVsX3Bzci5vIFwKPiA+ICAJ ICBpbnRlbF9xdWlya3MubyBcCj4gPiAgCSAgaW50ZWxfc2lkZWJhbmQubyBcCj4gPiAtCSAgaW50 ZWxfc3ByaXRlLm8KPiA+ICsJICBpbnRlbF9zcHJpdGUubyBcCj4gPiArCSAgaW50ZWxfdGMubwo+ ID4gIGk5MTUtJChDT05GSUdfQUNQSSkJCSs9IGludGVsX2FjcGkubyBpbnRlbF9vcHJlZ2lvbi5v Cj4gPiAgaTkxNS0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKQkrPSBpbnRlbF9mYmRldi5v Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUuaGVh ZGVyLXRlc3QgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5oZWFkZXItdGVzdAo+ID4g aW5kZXggNmVmM2I2NDdhYzY1Li5lODBlOGU0NWIwOWMgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5oZWFkZXItdGVzdAo+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUuaGVhZGVyLXRlc3QKPiA+IEBAIC01OCw2ICs1OCw3IEBAIGhlYWRl cl90ZXN0IDo9IFwKPiA+ICAJaW50ZWxfc2R2by5oIFwKPiA+ICAJaW50ZWxfc2lkZWJhbmQuaCBc Cj4gPiAgCWludGVsX3Nwcml0ZS5oIFwKPiA+ICsJaW50ZWxfdGMuaCBcCj4gPiAgCWludGVsX3R2 LmggXAo+ID4gIAlpbnRlbF91bmNvcmUuaCBcCj4gPiAgCWludGVsX3Zkc2MuaCBcCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gaW5kZXggMzUwZWFmNTRmMDFmLi41YTFjOTg0MzgzNzUg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+IEBAIC00NSw2ICs0NSw3IEBA Cj4gPiAgI2luY2x1ZGUgImludGVsX2xzcGNvbi5oIgo+ID4gICNpbmNsdWRlICJpbnRlbF9wYW5l bC5oIgo+ID4gICNpbmNsdWRlICJpbnRlbF9wc3IuaCIKPiA+ICsjaW5jbHVkZSAiaW50ZWxfdGMu aCIKPiA+ICAjaW5jbHVkZSAiaW50ZWxfdmRzYy5oIgo+ID4gIAo+ID4gIHN0cnVjdCBkZGlfYnVm X3RyYW5zIHsKPiA+IEBAIC0zOTA0LDcgKzM5MDUsNiBAQCBzdGF0aWMgaW50IGludGVsX2RkaV9j b21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ICBzdGF0aWMg dm9pZCBpbnRlbF9kZGlfZW5jb2Rlcl9zdXNwZW5kKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyKQo+ID4gIHsKPiA+ICAJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBl bmNfdG9fZGlnX3BvcnQoJmVuY29kZXItPmJhc2UpOwo+ID4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwo+ID4gIAo+ID4gIAlpbnRl bF9kcF9lbmNvZGVyX3N1c3BlbmQoZW5jb2Rlcik7Cj4gPiAgCj4gPiBAQCAtMzkxNCw3ICszOTE0 LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfc3VzcGVuZChzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlcikKPiA+ICAJICogZXZlbiBpZiB0aGUgc2luayBoYXMgZGlzYXBwZWFy ZWQgd2hpbGUgYmVpbmcgc3VzcGVuZGVkLgo+ID4gIAkgKi8KPiA+ICAJaWYgKGRpZ19wb3J0LT50 Y19sZWdhY3lfcG9ydCkKPiA+IC0JCWljbF90Y19waHlfZGlzY29ubmVjdChpOTE1LCBkaWdfcG9y dCk7Cj4gPiArCQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGlnX3BvcnQpOwo+ID4gIH0KPiA+ICAK PiA+ICBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfZW5jb2Rlcl9yZXNldChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmNvZGVyKQo+ID4gQEAgLTM5MzYsNyArMzkzNiw3IEBAIHN0YXRpYyB2b2lkIGlu dGVsX2RkaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ID4g IAlpbnRlbF9kcF9lbmNvZGVyX2ZsdXNoX3dvcmsoZW5jb2Rlcik7Cj4gPiAgCj4gPiAgCWlmIChp bnRlbF9wb3J0X2lzX3RjKGk5MTUsIGRpZ19wb3J0LT5iYXNlLnBvcnQpKQo+ID4gLQkJaWNsX3Rj X3BoeV9kaXNjb25uZWN0KGk5MTUsIGRpZ19wb3J0KTsKPiA+ICsJCWljbF90Y19waHlfZGlzY29u bmVjdChkaWdfcG9ydCk7Cj4gPiAgCj4gPiAgCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7 Cj4gPiAgCWtmcmVlKGRpZ19wb3J0KTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4gaW5k ZXggMjRiNTZiMmE3NmM4Li5iNjkzMTBiZDk5MTQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kcC5jCj4gPiBAQCAtNjIsNiArNjIsNyBAQAo+ID4gICNpbmNsdWRlICJpbnRlbF9wYW5lbC5o Igo+ID4gICNpbmNsdWRlICJpbnRlbF9wc3IuaCIKPiA+ICAjaW5jbHVkZSAiaW50ZWxfc2lkZWJh bmQuaCIKPiA+ICsjaW5jbHVkZSAiaW50ZWxfdGMuaCIKPiA+ICAjaW5jbHVkZSAiaW50ZWxfdmRz Yy5oIgo+ID4gIAo+ID4gICNkZWZpbmUgRFBfRFBSWF9FU0lfTEVOIDE0Cj4gPiBAQCAtMjExLDQ2 ICsyMTIsMTMgQEAgc3RhdGljIGludCBpbnRlbF9kcF9tYXhfY29tbW9uX3JhdGUoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKPiA+ICAJcmV0dXJuIGludGVsX2RwLT5jb21tb25fcmF0ZXNbaW50 ZWxfZHAtPm51bV9jb21tb25fcmF0ZXMgLSAxXTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGlu dCBpbnRlbF9kcF9nZXRfZmlhX3N1cHBvcnRlZF9sYW5lX2NvdW50KHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gPiAtewo+ID4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9y dCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiA+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7Cj4gPiAtCWVu dW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQt PmJhc2UucG9ydCk7Cj4gPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ID4gLQl1MzIgbGFu ZV9pbmZvOwo+ID4gLQo+ID4gLQlpZiAodGNfcG9ydCA9PSBQT1JUX1RDX05PTkUgfHwgZGlnX3Bv cnQtPnRjX3R5cGUgIT0gVENfUE9SVF9UWVBFQykKPiA+IC0JCXJldHVybiA0Owo+ID4gLQo+ID4g LQlsYW5lX2luZm8gPSAwOwo+ID4gLQl3aXRoX2ludGVsX2Rpc3BsYXlfcG93ZXIoZGV2X3ByaXYs IFBPV0VSX0RPTUFJTl9ESVNQTEFZX0NPUkUsIHdha2VyZWYpCj4gPiAtCQlsYW5lX2luZm8gPSAo STkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKSAmCj4gPiAtCQkJICAgICBEUF9MQU5FX0FTU0lH Tk1FTlRfTUFTSyh0Y19wb3J0KSkgPj4KPiA+IC0JCQkJRFBfTEFORV9BU1NJR05NRU5UX1NISUZU KHRjX3BvcnQpOwo+ID4gLQo+ID4gLQlzd2l0Y2ggKGxhbmVfaW5mbykgewo+ID4gLQlkZWZhdWx0 Ogo+ID4gLQkJTUlTU0lOR19DQVNFKGxhbmVfaW5mbyk7Cj4gPiAtCWNhc2UgMToKPiA+IC0JY2Fz ZSAyOgo+ID4gLQljYXNlIDQ6Cj4gPiAtCWNhc2UgODoKPiA+IC0JCXJldHVybiAxOwo+ID4gLQlj YXNlIDM6Cj4gPiAtCWNhc2UgMTI6Cj4gPiAtCQlyZXR1cm4gMjsKPiA+IC0JY2FzZSAxNToKPiA+ IC0JCXJldHVybiA0Owo+ID4gLQl9Cj4gPiAtfQo+ID4gLQo+ID4gIC8qIFRoZW9yZXRpY2FsIG1h eCBiZXR3ZWVuIHNvdXJjZSBhbmQgc2luayAqLwo+ID4gIHN0YXRpYyBpbnQgaW50ZWxfZHBfbWF4 X2NvbW1vbl9sYW5lX2NvdW50KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiAgewo+ID4g IAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19w b3J0KGludGVsX2RwKTsKPiA+ICAJaW50IHNvdXJjZV9tYXggPSBpbnRlbF9kaWdfcG9ydC0+bWF4 X2xhbmVzOwo+ID4gIAlpbnQgc2lua19tYXggPSBkcm1fZHBfbWF4X2xhbmVfY291bnQoaW50ZWxf ZHAtPmRwY2QpOwo+ID4gLQlpbnQgZmlhX21heCA9IGludGVsX2RwX2dldF9maWFfc3VwcG9ydGVk X2xhbmVfY291bnQoaW50ZWxfZHApOwo+ID4gKwlpbnQgZmlhX21heCA9IGludGVsX3RjX3BvcnRf ZmlhX21heF9sYW5lX2NvdW50KGludGVsX2RpZ19wb3J0KTsKPiA+ICAKPiA+ICAJcmV0dXJuIG1p bjMoc291cmNlX21heCwgc2lua19tYXgsIGZpYV9tYXgpOwo+ID4gIH0KPiA+IEBAIC01MjMxLDE5 NSArNTE5OSw2IEBAIHN0YXRpYyBib29sIGljbF9jb21ib19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCXJldHVybiBJOTE1X1JFQUQoU0RFSVNS KSAmIFNERV9ERElfSE9UUExVR19JQ1AocG9ydCk7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBj b25zdCBjaGFyICp0Y190eXBlX25hbWUoZW51bSB0Y19wb3J0X3R5cGUgdHlwZSkKPiA+IC17Cj4g PiAtCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsKPiA+IC0JCVtUQ19QT1JU X1VOS05PV05dID0gInVua25vd24iLAo+ID4gLQkJW1RDX1BPUlRfTEVHQUNZXSA9ICJsZWdhY3ki LAo+ID4gLQkJW1RDX1BPUlRfVFlQRUNdID0gInR5cGVjIiwKPiA+IC0JCVtUQ19QT1JUX1RCVF0g PSAidGJ0IiwKPiA+IC0JfTsKPiA+IC0KPiA+IC0JaWYgKFdBUk5fT04odHlwZSA+PSBBUlJBWV9T SVpFKG5hbWVzKSkpCj4gPiAtCQl0eXBlID0gVENfUE9SVF9VTktOT1dOOwo+ID4gLQo+ID4gLQly ZXR1cm4gbmFtZXNbdHlwZV07Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkIGljbF91cGRh dGVfdGNfcG9ydF90eXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+IC0J CQkJICAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ID4gLQkJ CQkgICAgYm9vbCBpc19sZWdhY3ksIGJvb2wgaXNfdHlwZWMsIGJvb2wgaXNfdGJ0KQo+ID4gLXsK PiA+IC0JZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5wb3J0Owo+ID4gLQll bnVtIHRjX3BvcnRfdHlwZSBvbGRfdHlwZSA9IGludGVsX2RpZ19wb3J0LT50Y190eXBlOwo+ID4g LQo+ID4gLQlXQVJOX09OKGlzX2xlZ2FjeSArIGlzX3R5cGVjICsgaXNfdGJ0ICE9IDEpOwo+ID4g LQo+ID4gLQlpZiAoaXNfbGVnYWN5KQo+ID4gLQkJaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUgPSBU Q19QT1JUX0xFR0FDWTsKPiA+IC0JZWxzZSBpZiAoaXNfdHlwZWMpCj4gPiAtCQlpbnRlbF9kaWdf cG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRfVFlQRUM7Cj4gPiAtCWVsc2UgaWYgKGlzX3RidCkKPiA+ IC0JCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9UQlQ7Cj4gPiAtCWVsc2UKPiA+ IC0JCXJldHVybjsKPiA+IC0KPiA+IC0JLyogVHlwZXMgYXJlIG5vdCBzdXBwb3NlZCB0byBiZSBj aGFuZ2VkIGF0IHJ1bnRpbWUuICovCj4gPiAtCVdBUk5fT04ob2xkX3R5cGUgIT0gVENfUE9SVF9V TktOT1dOICYmCj4gPiAtCQlvbGRfdHlwZSAhPSBpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSk7Cj4g PiAtCj4gPiAtCWlmIChvbGRfdHlwZSAhPSBpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSkKPiA+IC0J CURSTV9ERUJVR19LTVMoIlBvcnQgJWMgaGFzIFRDIHR5cGUgJXNcbiIsIHBvcnRfbmFtZShwb3J0 KSwKPiA+IC0JCQkgICAgICB0Y190eXBlX25hbWUoaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpKTsK PiA+IC19Cj4gPiAtCj4gPiAtLyoKPiA+IC0gKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhl IGZpcnN0IHBhcnQgb2YgdGhlIENvbm5lY3QgRmxvdyBkZXNjcmliZWQgYnkgb3VyCj4gPiAtICog c3BlY2lmaWNhdGlvbiwgR2VuMTEgVHlwZUMgUHJvZ3JhbW1pbmcgY2hhcHRlci4gVGhlIHJlc3Qg b2YgdGhlIGZsb3cgKHJlYWRpbmcKPiA+IC0gKiBsYW5lcywgRURJRCwgZXRjKSBpcyBkb25lIGFz IG5lZWRlZCBpbiB0aGUgdHlwaWNhbCBwbGFjZXMuCj4gPiAtICoKPiA+IC0gKiBVbmxpa2UgdGhl IG90aGVyIHBvcnRzLCB0eXBlLUMgcG9ydHMgYXJlIG5vdCBhdmFpbGFibGUgdG8gdXNlIGFzIHNv b24gYXMgd2UKPiA+IC0gKiBnZXQgYSBob3RwbHVnLiBUaGUgdHlwZS1DIFBIWXMgY2FuIGJlIHNo YXJlZCBiZXR3ZWVuIG11bHRpcGxlIGNvbnRyb2xsZXJzOgo+ID4gLSAqIGRpc3BsYXksIFVTQiwg ZXRjLiBBcyBhIHJlc3VsdCwgaGFuZHNoYWtpbmcgdGhyb3VnaCBGSUEgaXMgcmVxdWlyZWQgYXJv dW5kCj4gPiAtICogY29ubmVjdCBhbmQgZGlzY29ubmVjdCB0byBjbGVhbmx5IHRyYW5zZmVyIG93 bmVyc2hpcCB3aXRoIHRoZSBjb250cm9sbGVyIGFuZAo+ID4gLSAqIHNldCB0aGUgdHlwZS1DIHBv d2VyIHN0YXRlLgo+ID4gLSAqCj4gPiAtICogV2UgY291bGQgb3B0IHRvIG9ubHkgZG8gdGhlIGNv bm5lY3QgZmxvdyB3aGVuIHdlIGFjdHVhbGx5IHRyeSB0byB1c2UgdGhlIEFVWAo+ID4gLSAqIGNo YW5uZWxzIG9yIGRvIGEgbW9kZXNldCwgdGhlbiBpbW1lZGlhdGVseSBydW4gdGhlIGRpc2Nvbm5l Y3QgZmxvdyBhZnRlcgo+ID4gLSAqIHVzYWdlLCBidXQgdGhlcmUgYXJlIHNvbWUgaW1wbGljYXRp b25zIG9uIHRoaXMgZm9yIGEgZHluYW1pYyBlbnZpcm9ubWVudDoKPiA+IC0gKiB0aGluZ3MgbWF5 IGdvIGF3YXkgb3IgY2hhbmdlIGJlaGluZCBvdXIgYmFja3MuIFNvIGZvciBub3cgb3VyIGRyaXZl ciBpcwo+ID4gLSAqIGFsd2F5cyB0cnlpbmcgdG8gYWNxdWlyZSBvd25lcnNoaXAgb2YgdGhlIGNv bnRyb2xsZXIgYXMgc29vbiBhcyBpdCBnZXRzIGFuCj4gPiAtICogaW50ZXJydXB0IChvciBwb2xs cyBzdGF0ZSBhbmQgc2VlcyBhIHBvcnQgaXMgY29ubmVjdGVkKSBhbmQgb25seSBnaXZlcyBpdAo+ ID4gLSAqIGJhY2sgd2hlbiBpdCBzZWVzIGEgZGlzY29ubmVjdC4gSW1wbGVtZW50YXRpb24gb2Yg YSBtb3JlIGZpbmUtZ3JhaW5lZCBtb2RlbAo+ID4gLSAqIHdpbGwgcmVxdWlyZSBhIGxvdCBvZiBj b29yZGluYXRpb24gd2l0aCB1c2VyIHNwYWNlIGFuZCB0aG9yb3VnaCB0ZXN0aW5nIGZvcgo+ID4g LSAqIHRoZSBleHRyYSBwb3NzaWJsZSBjYXNlcy4KPiA+IC0gKi8KPiA+IC1zdGF0aWMgYm9vbCBp Y2xfdGNfcGh5X2Nvbm5lY3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4g LQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCkKPiA+IC17Cj4g PiAtCWVudW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGln X3BvcnQtPmJhc2UucG9ydCk7Cj4gPiAtCXUzMiB2YWw7Cj4gPiAtCj4gPiAtCWlmIChkaWdfcG9y dC0+dGNfdHlwZSAhPSBUQ19QT1JUX0xFR0FDWSAmJgo+ID4gLQkgICAgZGlnX3BvcnQtPnRjX3R5 cGUgIT0gVENfUE9SVF9UWVBFQykKPiA+IC0JCXJldHVybiB0cnVlOwo+ID4gLQo+ID4gLQl2YWwg PSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQUE1TKTsKPiA+IC0JaWYgKCEodmFsICYgRFBfUEhZ X01PREVfU1RBVFVTX0NPTVBMRVRFRCh0Y19wb3J0KSkpIHsKPiA+IC0JCURSTV9ERUJVR19LTVMo IkRQIFBIWSBmb3IgVEMgcG9ydCAlZCBub3QgcmVhZHlcbiIsIHRjX3BvcnQpOwo+ID4gLQkJV0FS Tl9PTihkaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQpOwo+ID4gLQkJcmV0dXJuIGZhbHNlOwo+ID4g LQl9Cj4gPiAtCj4gPiAtCS8qCj4gPiAtCSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBt YW55IHRpbWVzIGluIGEgcm93IHdpdGhvdXQgYW4gSFBEIGV2ZW50Cj4gPiAtCSAqIGluIGJldHdl ZW4sIHNvIHRyeSB0byBhdm9pZCB0aGUgd3JpdGUgd2hlbiB3ZSBjYW4uCj4gPiAtCSAqLwo+ID4g LQl2YWwgPSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQQ1NTUyk7Cj4gPiAtCWlmICghKHZhbCAm IERQX1BIWV9NT0RFX1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KSkpIHsKPiA+IC0JCXZhbCB8PSBE UF9QSFlfTU9ERV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCk7Cj4gPiAtCQlJOTE1X1dSSVRFKFBP UlRfVFhfREZMRVhEUENTU1MsIHZhbCk7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JLyoKPiA+IC0JICog Tm93IHdlIGhhdmUgdG8gcmUtY2hlY2sgdGhlIGxpdmUgc3RhdGUsIGluIGNhc2UgdGhlIHBvcnQg cmVjZW50bHkKPiA+IC0JICogYmVjYW1lIGRpc2Nvbm5lY3RlZC4gTm90IG5lY2Vzc2FyeSBmb3Ig bGVnYWN5IG1vZGUuCj4gPiAtCSAqLwo+ID4gLQlpZiAoZGlnX3BvcnQtPnRjX3R5cGUgPT0gVENf UE9SVF9UWVBFQyAmJgo+ID4gLQkgICAgIShJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQU1ApICYg VENfTElWRV9TVEFURV9UQyh0Y19wb3J0KSkpIHsKPiA+IC0JCURSTV9ERUJVR19LTVMoIlRDIFBI WSAlZCBzdWRkZW4gZGlzY29ubmVjdC5cbiIsIHRjX3BvcnQpOwo+ID4gLQkJaWNsX3RjX3BoeV9k aXNjb25uZWN0KGRldl9wcml2LCBkaWdfcG9ydCk7Cj4gPiAtCQlyZXR1cm4gZmFsc2U7Cj4gPiAt CX0KPiA+IC0KPiA+IC0JcmV0dXJuIHRydWU7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qCj4gPiAtICog U2VlIHRoZSBjb21tZW50IGF0IHRoZSBjb25uZWN0IGZ1bmN0aW9uLiBUaGlzIGltcGxlbWVudHMg dGhlIERpc2Nvbm5lY3QKPiA+IC0gKiBGbG93Lgo+ID4gLSAqLwo+ID4gLXZvaWQgaWNsX3RjX3Bo eV9kaXNjb25uZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+IC0JCQkg ICBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCkKPiA+IC17Cj4gPiAtCWVudW0g dGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQtPmJh c2UucG9ydCk7Cj4gPiAtCj4gPiAtCWlmIChkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JUX1VO S05PV04pCj4gPiAtCQlyZXR1cm47Cj4gPiAtCj4gPiAtCS8qCj4gPiAtCSAqIFRCVCBkaXNjb25u ZWN0aW9uIGZsb3cgaXMgcmVhZCB0aGUgbGl2ZSBzdGF0dXMsIHdoYXQgd2FzIGRvbmUgaW4KPiA+ IC0JICogY2FsbGVyLgo+ID4gLQkgKi8KPiA+IC0JaWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRD X1BPUlRfVFlQRUMgfHwKPiA+IC0JICAgIGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BPUlRfTEVH QUNZKSB7Cj4gPiAtCQl1MzIgdmFsOwo+ID4gLQo+ID4gLQkJdmFsID0gSTkxNV9SRUFEKFBPUlRf VFhfREZMRVhEUENTU1MpOwo+ID4gLQkJdmFsICY9IH5EUF9QSFlfTU9ERV9TVEFUVVNfTk9UX1NB RkUodGNfcG9ydCk7Cj4gPiAtCQlJOTE1X1dSSVRFKFBPUlRfVFhfREZMRVhEUENTU1MsIHZhbCk7 Cj4gPiAtCX0KPiA+IC0KPiA+IC0JRFJNX0RFQlVHX0tNUygiUG9ydCAlYyBUQyB0eXBlICVzIGRp c2Nvbm5lY3RlZFxuIiwKPiA+IC0JCSAgICAgIHBvcnRfbmFtZShkaWdfcG9ydC0+YmFzZS5wb3J0 KSwKPiA+IC0JCSAgICAgIHRjX3R5cGVfbmFtZShkaWdfcG9ydC0+dGNfdHlwZSkpOwo+ID4gLQo+ ID4gLQlkaWdfcG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRfVU5LTk9XTjsKPiA+IC19Cj4gPiAtCj4g PiAtLyoKPiA+IC0gKiBUaGUgdHlwZS1DIHBvcnRzIGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBldmVu IHdoZW4gdGhleSBhcmUgY29ubmVjdGVkLCB0aGV5IG1heQo+ID4gLSAqIG5vdCBiZSBhdmFpbGFi bGUvdXNhYmxlIGJ5IHRoZSBncmFwaGljcyBkcml2ZXI6IHNlZSB0aGUgY29tbWVudCBvbgo+ID4g LSAqIGljbF90Y19waHlfY29ubmVjdCgpLiBTbyBpbiBvdXIgZHJpdmVyIGluc3RlYWQgb2YgYWRk aW5nIHRoZSBhZGRpdGlvbmFsCj4gPiAtICogY29uY2VwdCBvZiAidXNhYmxlIiBhbmQgbWFrZSBl dmVyeXRoaW5nIGNoZWNrIGZvciAiY29ubmVjdGVkIGFuZCB1c2FibGUiIHdlCj4gPiAtICogZGVm aW5lIGEgcG9ydCBhcyAiY29ubmVjdGVkIiB3aGVuIGl0IGlzIG5vdCBvbmx5IGNvbm5lY3RlZCwg YnV0IGFsc28gd2hlbiBpdAo+ID4gLSAqIGlzIHVzYWJsZSBieSB0aGUgcmVzdCBvZiB0aGUgZHJp dmVyLiBUaGF0IG1haW50YWlucyB0aGUgb2xkIGFzc3VtcHRpb24gdGhhdAo+ID4gLSAqIGNvbm5l Y3RlZCBwb3J0cyBhcmUgdXNhYmxlLCBhbmQgYXZvaWRzIGV4cG9zaW5nIHRvIHRoZSB1c2VycyBv YmplY3RzIHRoZXkKPiA+IC0gKiBjYW4ndCByZWFsbHkgdXNlLgo+ID4gLSAqLwo+ID4gLXN0YXRp YyBib29sIGljbF90Y19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gPiAtCQkJCSAgc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3Bv cnQpCj4gPiAtewo+ID4gLQllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RpZ19wb3J0LT5iYXNlLnBv cnQ7Cj4gPiAtCWVudW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJp diwgcG9ydCk7Cj4gPiAtCWJvb2wgaXNfbGVnYWN5LCBpc190eXBlYywgaXNfdGJ0Owo+ID4gLQl1 MzIgZHBzcDsKPiA+IC0KPiA+IC0JLyoKPiA+IC0JICogQ29tcGxhaW4gaWYgd2UgZ290IGEgbGVn YWN5IHBvcnQgSFBELCBidXQgVkJUIGRpZG4ndCBtYXJrIHRoZSBwb3J0IGFzCj4gPiAtCSAqIGxl Z2FjeS4gVHJlYXQgdGhlIHBvcnQgYXMgbGVnYWN5IGZyb20gbm93IG9uLgo+ID4gLQkgKi8KPiA+ IC0JaWYgKCFpbnRlbF9kaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQgJiYKPiA+IC0JICAgIEk5MTVf UkVBRChTREVJU1IpICYgU0RFX1RDX0hPVFBMVUdfSUNQKHRjX3BvcnQpKSB7Cj4gPiAtCQlEUk1f RVJST1IoIlZCVCBpbmNvcnJlY3RseSBjbGFpbXMgcG9ydCAlYyBpcyBub3QgVHlwZUMgbGVnYWN5 XG4iLAo+ID4gLQkJCSAgcG9ydF9uYW1lKHBvcnQpKTsKPiA+IC0JCWludGVsX2RpZ19wb3J0LT50 Y19sZWdhY3lfcG9ydCA9IHRydWU7Cj4gPiAtCX0KPiA+IC0JaXNfbGVnYWN5ID0gaW50ZWxfZGln X3BvcnQtPnRjX2xlZ2FjeV9wb3J0Owo+ID4gLQo+ID4gLQkvKgo+ID4gLQkgKiBUaGUgc3BlYyBz YXlzIHdlIHNob3VsZG4ndCBiZSB1c2luZyB0aGUgSVNSIGJpdHMgZm9yIGRldGVjdGluZwo+ID4g LQkgKiBiZXR3ZWVuIFRDIGFuZCBUQlQuIFdlIHNob3VsZCB1c2UgREZMRVhEUFNQLgo+ID4gLQkg Ki8KPiA+IC0JZHBzcCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBTUCk7Cj4gPiAtCWlzX3R5 cGVjID0gZHBzcCAmIFRDX0xJVkVfU1RBVEVfVEModGNfcG9ydCk7Cj4gPiAtCWlzX3RidCA9IGRw c3AgJiBUQ19MSVZFX1NUQVRFX1RCVCh0Y19wb3J0KTsKPiA+IC0KPiA+IC0JaWYgKCFpc19sZWdh Y3kgJiYgIWlzX3R5cGVjICYmICFpc190YnQpIHsKPiA+IC0JCWljbF90Y19waHlfZGlzY29ubmVj dChkZXZfcHJpdiwgaW50ZWxfZGlnX3BvcnQpOwo+ID4gLQo+ID4gLQkJcmV0dXJuIGZhbHNlOwo+ ID4gLQl9Cj4gPiAtCj4gPiAtCWljbF91cGRhdGVfdGNfcG9ydF90eXBlKGRldl9wcml2LCBpbnRl bF9kaWdfcG9ydCwgaXNfbGVnYWN5LCBpc190eXBlYywKPiA+IC0JCQkJaXNfdGJ0KTsKPiA+IC0K PiA+IC0JaWYgKCFpY2xfdGNfcGh5X2Nvbm5lY3QoZGV2X3ByaXYsIGludGVsX2RpZ19wb3J0KSkK PiA+IC0JCXJldHVybiBmYWxzZTsKPiA+IC0KPiA+IC0JcmV0dXJuIHRydWU7Cj4gPiAtfQo+ID4g LQo+ID4gIHN0YXRpYyBib29sIGljbF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyKQo+ID4gIHsKPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Cj4gPiBAQCAtNTQyOCw3ICs1 MjA3LDcgQEAgc3RhdGljIGJvb2wgaWNsX2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIpCj4gPiAgCWlmIChpbnRlbF9wb3J0X2lzX2NvbWJvcGh5KGRl dl9wcml2LCBlbmNvZGVyLT5wb3J0KSkKPiA+ICAJCXJldHVybiBpY2xfY29tYm9fcG9ydF9jb25u ZWN0ZWQoZGV2X3ByaXYsIGRpZ19wb3J0KTsKPiA+ICAJZWxzZSBpZiAoaW50ZWxfcG9ydF9pc190 YyhkZXZfcHJpdiwgZW5jb2Rlci0+cG9ydCkpCj4gPiAtCQlyZXR1cm4gaWNsX3RjX3BvcnRfY29u bmVjdGVkKGRldl9wcml2LCBkaWdfcG9ydCk7Cj4gPiArCQlyZXR1cm4gaW50ZWxfdGNfcG9ydF9j b25uZWN0ZWQoZGlnX3BvcnQpOwo+ID4gIAllbHNlCj4gPiAgCQlNSVNTSU5HX0NBU0UoZW5jb2Rl ci0+aHBkX3Bpbik7Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmgKPiA+IGluZGV4IGRh NzBiMWE0MWM4My4uNjU3YmJiMWY1ZWQwIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHAuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAu aAo+ID4gQEAgLTExMiw4ICsxMTIsNiBAQCBib29sIGludGVsX2RwX2dldF9jb2xvcmltZXRyeV9z dGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gPiAgaW50IGludGVsX2RwX2xpbmtf cmVxdWlyZWQoaW50IHBpeGVsX2Nsb2NrLCBpbnQgYnBwKTsKPiA+ICBpbnQgaW50ZWxfZHBfbWF4 X2RhdGFfcmF0ZShpbnQgbWF4X2xpbmtfY2xvY2ssIGludCBtYXhfbGFuZXMpOwo+ID4gIGJvb2wg aW50ZWxfZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl cik7Cj4gPiAtdm9pZCBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ID4gLQkJCSAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19w b3J0KTsKPiA+ICAKPiA+ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpbnRlbF9kcF91bnVz ZWRfbGFuZV9tYXNrKGludCBsYW5lX2NvdW50KQo+ID4gIHsKPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf dGMuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uN2Ex YjU4NzA5NDVmCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF90Yy5jCj4gPiBAQCAtMCwwICsxLDIzMCBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBNSVQKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENv cnBvcmF0aW9uCj4gPiArICovCj4gCj4gRnJvbSB0aGUgTml0cGlja3MgRGVwYXJ0bWVudCwgcGxl YXNlIGFkZCBhIGJsYW5rIGxpbmUgaGVyZS4KCk9rLgoKPiAKPiA+ICsjaW5jbHVkZSAiaW50ZWxf ZGlzcGxheS5oIgo+ID4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ID4gKyNpbmNsdWRlICJpbnRl bF90Yy5oIgo+IAo+IEFuZCBzb3J0IHRoZSBpbmNsdWRlcy4KCk9rLCBmb3Jnb3QgdGhhdCBoZXJl Li4KCj4gCj4gPiArCj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKnRjX3R5cGVfbmFtZShlbnVtIHRj X3BvcnRfdHlwZSB0eXBlKQo+ID4gK3sKPiA+ICsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBu YW1lc1tdID0gewo+ID4gKwkJW1RDX1BPUlRfVU5LTk9XTl0gPSAidW5rbm93biIsCj4gPiArCQlb VENfUE9SVF9MRUdBQ1ldID0gImxlZ2FjeSIsCj4gPiArCQlbVENfUE9SVF9UWVBFQ10gPSAidHlw ZWMiLAo+ID4gKwkJW1RDX1BPUlRfVEJUXSA9ICJ0YnQiLAo+ID4gKwl9Owo+ID4gKwo+ID4gKwlp ZiAoV0FSTl9PTih0eXBlID49IEFSUkFZX1NJWkUobmFtZXMpKSkKPiA+ICsJCXR5cGUgPSBUQ19Q T1JUX1VOS05PV047Cj4gPiArCj4gPiArCXJldHVybiBuYW1lc1t0eXBlXTsKPiA+ICt9Cj4gPiAr Cj4gPiAraW50IGludGVsX3RjX3BvcnRfZmlhX21heF9sYW5lX2NvdW50KHN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmRpZ19wb3J0KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7Cj4gPiArCWVu dW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQt PmJhc2UucG9ydCk7Cj4gPiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ID4gKwl1MzIgbGFu ZV9pbmZvOwo+ID4gKwo+ID4gKwlpZiAodGNfcG9ydCA9PSBQT1JUX1RDX05PTkUgfHwgZGlnX3Bv cnQtPnRjX3R5cGUgIT0gVENfUE9SVF9UWVBFQykKPiA+ICsJCXJldHVybiA0Owo+ID4gKwo+ID4g KwlsYW5lX2luZm8gPSAwOwo+ID4gKwl3aXRoX2ludGVsX2Rpc3BsYXlfcG93ZXIoZGV2X3ByaXYs IFBPV0VSX0RPTUFJTl9ESVNQTEFZX0NPUkUsIHdha2VyZWYpCj4gPiArCQlsYW5lX2luZm8gPSAo STkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKSAmCj4gPiArCQkJICAgICBEUF9MQU5FX0FTU0lH Tk1FTlRfTUFTSyh0Y19wb3J0KSkgPj4KPiA+ICsJCQkJRFBfTEFORV9BU1NJR05NRU5UX1NISUZU KHRjX3BvcnQpOwo+ID4gKwo+ID4gKwlzd2l0Y2ggKGxhbmVfaW5mbykgewo+ID4gKwlkZWZhdWx0 Ogo+ID4gKwkJTUlTU0lOR19DQVNFKGxhbmVfaW5mbyk7Cj4gPiArCWNhc2UgMToKPiA+ICsJY2Fz ZSAyOgo+ID4gKwljYXNlIDQ6Cj4gPiArCWNhc2UgODoKPiA+ICsJCXJldHVybiAxOwo+ID4gKwlj YXNlIDM6Cj4gPiArCWNhc2UgMTI6Cj4gPiArCQlyZXR1cm4gMjsKPiA+ICsJY2FzZSAxNToKPiA+ ICsJCXJldHVybiA0Owo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gKy8qCj4gPiArICogVGhpcyBm dW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBDb25uZWN0IEZsb3cgZGVz Y3JpYmVkIGJ5IG91cgo+ID4gKyAqIHNwZWNpZmljYXRpb24sIEdlbjExIFR5cGVDIFByb2dyYW1t aW5nIGNoYXB0ZXIuIFRoZSByZXN0IG9mIHRoZSBmbG93IChyZWFkaW5nCj4gPiArICogbGFuZXMs IEVESUQsIGV0YykgaXMgZG9uZSBhcyBuZWVkZWQgaW4gdGhlIHR5cGljYWwgcGxhY2VzLgo+ID4g KyAqCj4gPiArICogVW5saWtlIHRoZSBvdGhlciBwb3J0cywgdHlwZS1DIHBvcnRzIGFyZSBub3Qg YXZhaWxhYmxlIHRvIHVzZSBhcyBzb29uIGFzIHdlCj4gPiArICogZ2V0IGEgaG90cGx1Zy4gVGhl IHR5cGUtQyBQSFlzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBjb250cm9sbGVyczoK PiA+ICsgKiBkaXNwbGF5LCBVU0IsIGV0Yy4gQXMgYSByZXN1bHQsIGhhbmRzaGFraW5nIHRocm91 Z2ggRklBIGlzIHJlcXVpcmVkIGFyb3VuZAo+ID4gKyAqIGNvbm5lY3QgYW5kIGRpc2Nvbm5lY3Qg dG8gY2xlYW5seSB0cmFuc2ZlciBvd25lcnNoaXAgd2l0aCB0aGUgY29udHJvbGxlciBhbmQKPiA+ ICsgKiBzZXQgdGhlIHR5cGUtQyBwb3dlciBzdGF0ZS4KPiA+ICsgKgo+ID4gKyAqIFdlIGNvdWxk IG9wdCB0byBvbmx5IGRvIHRoZSBjb25uZWN0IGZsb3cgd2hlbiB3ZSBhY3R1YWxseSB0cnkgdG8g dXNlIHRoZSBBVVgKPiA+ICsgKiBjaGFubmVscyBvciBkbyBhIG1vZGVzZXQsIHRoZW4gaW1tZWRp YXRlbHkgcnVuIHRoZSBkaXNjb25uZWN0IGZsb3cgYWZ0ZXIKPiA+ICsgKiB1c2FnZSwgYnV0IHRo ZXJlIGFyZSBzb21lIGltcGxpY2F0aW9ucyBvbiB0aGlzIGZvciBhIGR5bmFtaWMgZW52aXJvbm1l bnQ6Cj4gPiArICogdGhpbmdzIG1heSBnbyBhd2F5IG9yIGNoYW5nZSBiZWhpbmQgb3VyIGJhY2tz LiBTbyBmb3Igbm93IG91ciBkcml2ZXIgaXMKPiA+ICsgKiBhbHdheXMgdHJ5aW5nIHRvIGFjcXVp cmUgb3duZXJzaGlwIG9mIHRoZSBjb250cm9sbGVyIGFzIHNvb24gYXMgaXQgZ2V0cyBhbgo+ID4g KyAqIGludGVycnVwdCAob3IgcG9sbHMgc3RhdGUgYW5kIHNlZXMgYSBwb3J0IGlzIGNvbm5lY3Rl ZCkgYW5kIG9ubHkgZ2l2ZXMgaXQKPiA+ICsgKiBiYWNrIHdoZW4gaXQgc2VlcyBhIGRpc2Nvbm5l Y3QuIEltcGxlbWVudGF0aW9uIG9mIGEgbW9yZSBmaW5lLWdyYWluZWQgbW9kZWwKPiA+ICsgKiB3 aWxsIHJlcXVpcmUgYSBsb3Qgb2YgY29vcmRpbmF0aW9uIHdpdGggdXNlciBzcGFjZSBhbmQgdGhv cm91Z2ggdGVzdGluZyBmb3IKPiA+ICsgKiB0aGUgZXh0cmEgcG9zc2libGUgY2FzZXMuCj4gPiAr ICovCj4gPiArc3RhdGljIGJvb2wgaWNsX3RjX3BoeV9jb25uZWN0KHN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQgKmRpZ19wb3J0KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7Cj4gPiArCWVudW0g dGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQtPmJh c2UucG9ydCk7Cj4gPiArCXUzMiB2YWw7Cj4gPiArCj4gPiArCWlmIChkaWdfcG9ydC0+dGNfdHlw ZSAhPSBUQ19QT1JUX0xFR0FDWSAmJgo+ID4gKwkgICAgZGlnX3BvcnQtPnRjX3R5cGUgIT0gVENf UE9SVF9UWVBFQykKPiA+ICsJCXJldHVybiB0cnVlOwo+ID4gKwo+ID4gKwl2YWwgPSBJOTE1X1JF QUQoUE9SVF9UWF9ERkxFWERQUE1TKTsKPiA+ICsJaWYgKCEodmFsICYgRFBfUEhZX01PREVfU1RB VFVTX0NPTVBMRVRFRCh0Y19wb3J0KSkpIHsKPiA+ICsJCURSTV9ERUJVR19LTVMoIkRQIFBIWSBm b3IgVEMgcG9ydCAlZCBub3QgcmVhZHlcbiIsIHRjX3BvcnQpOwo+ID4gKwkJV0FSTl9PTihkaWdf cG9ydC0+dGNfbGVnYWN5X3BvcnQpOwo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCS8qCj4gPiArCSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtYW55IHRpbWVz IGluIGEgcm93IHdpdGhvdXQgYW4gSFBEIGV2ZW50Cj4gPiArCSAqIGluIGJldHdlZW4sIHNvIHRy eSB0byBhdm9pZCB0aGUgd3JpdGUgd2hlbiB3ZSBjYW4uCj4gPiArCSAqLwo+ID4gKwl2YWwgPSBJ OTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQQ1NTUyk7Cj4gPiArCWlmICghKHZhbCAmIERQX1BIWV9N T0RFX1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KSkpIHsKPiA+ICsJCXZhbCB8PSBEUF9QSFlfTU9E RV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCk7Cj4gPiArCQlJOTE1X1dSSVRFKFBPUlRfVFhfREZM RVhEUENTU1MsIHZhbCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogTm93IHdlIGhh dmUgdG8gcmUtY2hlY2sgdGhlIGxpdmUgc3RhdGUsIGluIGNhc2UgdGhlIHBvcnQgcmVjZW50bHkK PiA+ICsJICogYmVjYW1lIGRpc2Nvbm5lY3RlZC4gTm90IG5lY2Vzc2FyeSBmb3IgbGVnYWN5IG1v ZGUuCj4gPiArCSAqLwo+ID4gKwlpZiAoZGlnX3BvcnQtPnRjX3R5cGUgPT0gVENfUE9SVF9UWVBF QyAmJgo+ID4gKwkgICAgIShJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQU1ApICYgVENfTElWRV9T VEFURV9UQyh0Y19wb3J0KSkpIHsKPiA+ICsJCURSTV9ERUJVR19LTVMoIlRDIFBIWSAlZCBzdWRk ZW4gZGlzY29ubmVjdC5cbiIsIHRjX3BvcnQpOwo+ID4gKwkJaWNsX3RjX3BoeV9kaXNjb25uZWN0 KGRpZ19wb3J0KTsKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1 cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBTZWUgdGhlIGNvbW1lbnQgYXQg dGhlIGNvbm5lY3QgZnVuY3Rpb24uIFRoaXMgaW1wbGVtZW50cyB0aGUgRGlzY29ubmVjdAo+ID4g KyAqIEZsb3cuCj4gPiArICovCj4gPiArdm9pZCBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0 IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19wb3J0LT5iYXNlLmJhc2UuZGV2KTsK PiA+ICsJZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRlbF9wb3J0X3RvX3RjKGRldl9wcml2LCBk aWdfcG9ydC0+YmFzZS5wb3J0KTsKPiA+ICsKPiA+ICsJaWYgKGRpZ19wb3J0LT50Y190eXBlID09 IFRDX1BPUlRfVU5LTk9XTikKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICog VEJUIGRpc2Nvbm5lY3Rpb24gZmxvdyBpcyByZWFkIHRoZSBsaXZlIHN0YXR1cywgd2hhdCB3YXMg ZG9uZSBpbgo+ID4gKwkgKiBjYWxsZXIuCj4gPiArCSAqLwo+ID4gKwlpZiAoZGlnX3BvcnQtPnRj X3R5cGUgPT0gVENfUE9SVF9UWVBFQyB8fAo+ID4gKwkgICAgZGlnX3BvcnQtPnRjX3R5cGUgPT0g VENfUE9SVF9MRUdBQ1kpIHsKPiA+ICsJCXUzMiB2YWw7Cj4gPiArCj4gPiArCQl2YWwgPSBJOTE1 X1JFQUQoUE9SVF9UWF9ERkxFWERQQ1NTUyk7Cj4gPiArCQl2YWwgJj0gfkRQX1BIWV9NT0RFX1NU QVRVU19OT1RfU0FGRSh0Y19wb3J0KTsKPiA+ICsJCUk5MTVfV1JJVEUoUE9SVF9UWF9ERkxFWERQ Q1NTUywgdmFsKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlEUk1fREVCVUdfS01TKCJQb3J0ICVjIFRD IHR5cGUgJXMgZGlzY29ubmVjdGVkXG4iLAo+ID4gKwkJICAgICAgcG9ydF9uYW1lKGRpZ19wb3J0 LT5iYXNlLnBvcnQpLAo+ID4gKwkJICAgICAgdGNfdHlwZV9uYW1lKGRpZ19wb3J0LT50Y190eXBl KSk7Cj4gPiArCj4gPiArCWRpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9VTktOT1dOOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBpY2xfdXBkYXRlX3RjX3BvcnRfdHlwZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiArCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKPiA+ICsJCQkJICAgIGJvb2wgaXNfbGVnYWN5LCBi b29sIGlzX3R5cGVjLCBib29sIGlzX3RidCkKPiA+ICt7Cj4gPiArCWVudW0gcG9ydCBwb3J0ID0g aW50ZWxfZGlnX3BvcnQtPmJhc2UucG9ydDsKPiA+ICsJZW51bSB0Y19wb3J0X3R5cGUgb2xkX3R5 cGUgPSBpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZTsKPiA+ICsKPiA+ICsJV0FSTl9PTihpc19sZWdh Y3kgKyBpc190eXBlYyArIGlzX3RidCAhPSAxKTsKPiA+ICsKPiA+ICsJaWYgKGlzX2xlZ2FjeSkK PiA+ICsJCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9MRUdBQ1k7Cj4gPiArCWVs c2UgaWYgKGlzX3R5cGVjKQo+ID4gKwkJaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JU X1RZUEVDOwo+ID4gKwllbHNlIGlmIChpc190YnQpCj4gPiArCQlpbnRlbF9kaWdfcG9ydC0+dGNf dHlwZSA9IFRDX1BPUlRfVEJUOwo+ID4gKwllbHNlCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiAr CS8qIFR5cGVzIGFyZSBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lLiAqLwo+ ID4gKwlXQVJOX09OKG9sZF90eXBlICE9IFRDX1BPUlRfVU5LTk9XTiAmJgo+ID4gKwkJb2xkX3R5 cGUgIT0gaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpOwo+ID4gKwo+ID4gKwlpZiAob2xkX3R5cGUg IT0gaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpCj4gPiArCQlEUk1fREVCVUdfS01TKCJQb3J0ICVj IGhhcyBUQyB0eXBlICVzXG4iLCBwb3J0X25hbWUocG9ydCksCj4gPiArCQkJICAgICAgdGNfdHlw ZV9uYW1lKGludGVsX2RpZ19wb3J0LT50Y190eXBlKSk7Cj4gPiArfQo+ID4gKwo+ID4gKwo+ID4g Ky8qCj4gPiArICogVGhlIHR5cGUtQyBwb3J0cyBhcmUgZGlmZmVyZW50IGJlY2F1c2UgZXZlbiB3 aGVuIHRoZXkgYXJlIGNvbm5lY3RlZCwgdGhleSBtYXkKPiA+ICsgKiBub3QgYmUgYXZhaWxhYmxl L3VzYWJsZSBieSB0aGUgZ3JhcGhpY3MgZHJpdmVyOiBzZWUgdGhlIGNvbW1lbnQgb24KPiA+ICsg KiBpY2xfdGNfcGh5X2Nvbm5lY3QoKS4gU28gaW4gb3VyIGRyaXZlciBpbnN0ZWFkIG9mIGFkZGlu ZyB0aGUgYWRkaXRpb25hbAo+ID4gKyAqIGNvbmNlcHQgb2YgInVzYWJsZSIgYW5kIG1ha2UgZXZl cnl0aGluZyBjaGVjayBmb3IgImNvbm5lY3RlZCBhbmQgdXNhYmxlIiB3ZQo+ID4gKyAqIGRlZmlu ZSBhIHBvcnQgYXMgImNvbm5lY3RlZCIgd2hlbiBpdCBpcyBub3Qgb25seSBjb25uZWN0ZWQsIGJ1 dCBhbHNvIHdoZW4gaXQKPiA+ICsgKiBpcyB1c2FibGUgYnkgdGhlIHJlc3Qgb2YgdGhlIGRyaXZl ci4gVGhhdCBtYWludGFpbnMgdGhlIG9sZCBhc3N1bXB0aW9uIHRoYXQKPiA+ICsgKiBjb25uZWN0 ZWQgcG9ydHMgYXJlIHVzYWJsZSwgYW5kIGF2b2lkcyBleHBvc2luZyB0byB0aGUgdXNlcnMgb2Jq ZWN0cyB0aGV5Cj4gPiArICogY2FuJ3QgcmVhbGx5IHVzZS4KPiA+ICsgKi8KPiA+ICtib29sIGlu dGVsX3RjX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0 KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7Cj4gPiArCWVudW0gcG9ydCBwb3J0ID0gZGlnX3Bv cnQtPmJhc2UucG9ydDsKPiA+ICsJZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRlbF9wb3J0X3Rv X3RjKGRldl9wcml2LCBwb3J0KTsKPiA+ICsJYm9vbCBpc19sZWdhY3ksIGlzX3R5cGVjLCBpc190 YnQ7Cj4gPiArCXUzMiBkcHNwOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBDb21wbGFpbiBpZiB3 ZSBnb3QgYSBsZWdhY3kgcG9ydCBIUEQsIGJ1dCBWQlQgZGlkbid0IG1hcmsgdGhlIHBvcnQgYXMK PiA+ICsJICogbGVnYWN5LiBUcmVhdCB0aGUgcG9ydCBhcyBsZWdhY3kgZnJvbSBub3cgb24uCj4g PiArCSAqLwo+ID4gKwlpZiAoIWRpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCAmJgo+ID4gKwkgICAg STkxNV9SRUFEKFNERUlTUikgJiBTREVfVENfSE9UUExVR19JQ1AodGNfcG9ydCkpIHsKPiA+ICsJ CURSTV9FUlJPUigiVkJUIGluY29ycmVjdGx5IGNsYWltcyBwb3J0ICVjIGlzIG5vdCBUeXBlQyBs ZWdhY3lcbiIsCj4gPiArCQkJICBwb3J0X25hbWUocG9ydCkpOwo+ID4gKwkJZGlnX3BvcnQtPnRj X2xlZ2FjeV9wb3J0ID0gdHJ1ZTsKPiA+ICsJfQo+ID4gKwlpc19sZWdhY3kgPSBkaWdfcG9ydC0+ dGNfbGVnYWN5X3BvcnQ7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFRoZSBzcGVjIHNheXMgd2Ug c2hvdWxkbid0IGJlIHVzaW5nIHRoZSBJU1IgYml0cyBmb3IgZGV0ZWN0aW5nCj4gPiArCSAqIGJl dHdlZW4gVEMgYW5kIFRCVC4gV2Ugc2hvdWxkIHVzZSBERkxFWERQU1AuCj4gPiArCSAqLwo+ID4g KwlkcHNwID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKTsKPiA+ICsJaXNfdHlwZWMgPSBk cHNwICYgVENfTElWRV9TVEFURV9UQyh0Y19wb3J0KTsKPiA+ICsJaXNfdGJ0ID0gZHBzcCAmIFRD X0xJVkVfU1RBVEVfVEJUKHRjX3BvcnQpOwo+ID4gKwo+ID4gKwlpZiAoIWlzX2xlZ2FjeSAmJiAh aXNfdHlwZWMgJiYgIWlzX3RidCkgewo+ID4gKwkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGRpZ19w b3J0KTsKPiA+ICsKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpY2xf dXBkYXRlX3RjX3BvcnRfdHlwZShkZXZfcHJpdiwgZGlnX3BvcnQsIGlzX2xlZ2FjeSwgaXNfdHlw ZWMsCj4gPiArCQkJCWlzX3RidCk7Cj4gPiArCj4gPiArCWlmICghaWNsX3RjX3BoeV9jb25uZWN0 KGRpZ19wb3J0KSkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJcmV0dXJuIHRydWU7 Cj4gPiArfQo+ID4gKwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3RjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5oCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi45NGM2MmFjNGExNjIKPiA+IC0tLSAvZGV2 L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmgKPiA+IEBAIC0w LDAgKzEsMTMgQEAKPiAKPiBTUERYIGhlYWRlciBoZXJlIHBsZWFzZS4KCk9rLCBhZGRlZCB0aGF0 IGxpa2U6Cmh0dHBzOi8vZ2l0aHViLmNvbS9pZGVhay9saW51eC9ibG9iLzJkZWUwOWY2ODdiYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5oI0wyCgo+IAo+ID4gKyNpZm5kZWYgX19JTlRF TF9UQ19IX18KPiA+ICsjZGVmaW5lIF9fSU5URUxfVENfSF9fCj4gPiArCj4gPiArI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+Cj4gPiArCj4gPiArc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydDsKPiA+ ICsKPiA+ICt2b2lkIGljbF90Y19waHlfZGlzY29ubmVjdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9w b3J0ICpkaWdfcG9ydCk7Cj4gCj4gSSdkIGxpa2UgdG8gc2VlIHRoaXMgbmFtZWQgaW50ZWxfdGNf KiBpbiB0aGUgZnV0dXJlLgoKWWVwLCB0aG91Z2h0IGFib3V0IHRoYXQgcnVsZSwgd2hpY2ggaXMg Z29vZCwgYnV0IEkga2VwdCB0aGlzIG9uZQphcy1pcywgc2luY2UgbGF0ZXIgaW4gdGhpcyBwYXRj aHNldCBpdCB3aWxsIGdldCB1bmV4cG9ydGVkLgoKPiAKPiBCUiwKPiBKYW5pLgo+IAo+IAo+ID4g Kwo+ID4gK2Jvb2wgaW50ZWxfdGNfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqZGlnX3BvcnQpOwo+ID4gK2ludCBpbnRlbF90Y19wb3J0X2ZpYV9tYXhfbGFuZV9jb3Vu dChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCk7Cj4gPiArCj4gPiArI2VuZGlm IC8qIF9fSU5URUxfVENfSF9fICovCj4gCj4gLS0gCj4gSmFuaSBOaWt1bGEsIEludGVsIE9wZW4g U291cmNlIEdyYXBoaWNzIENlbnRlcgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZng=