From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 3/3] drm/bridge: Add NWL MIPI DSI host controller support Date: Sat, 27 Jul 2019 05:47:00 +0300 Message-ID: <20190727024700.GD4902@pendragon.ideasonboard.com> References: <3158f4f8c97c21f98c394e5631d74bc60d796522.1563983037.git.agx@sigxcpu.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <3158f4f8c97c21f98c394e5631d74bc60d796522.1563983037.git.agx@sigxcpu.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Guido =?utf-8?Q?G=C3=BCnther?= Cc: Mark Rutland , devicetree@vger.kernel.org, Jernej Skrabec , Pengutronix Kernel Team , Neil Armstrong , David Airlie , Jonas Karlman , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rob Herring , NXP Linux Team , Robert Chiras , Lee Jones , Shawn Guo , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org SGVsbG8gR3VpZG8sCgpUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KCk9uIFdlZCwgSnVsIDI0LCAy MDE5IGF0IDA1OjUyOjI2UE0gKzAyMDAsIEd1aWRvIEfDvG50aGVyIHdyb3RlOgo+IFRoaXMgYWRk cyBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBOV0wgTUlQSSBEU0kgSG9zdCBjb250cm9sbGVyIGZv dW5kIG9uCj4gaS5NWDggU29Dcy4KPiAKPiBJdCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBpLk1YOE1R IGJ1dCB0aGUgc2FtZSBJUCBjYW4gYmUgZm91bmQgb24KPiBlLmcuIHRoZSBpLk1YOFFYUC4KPiAK PiBJdCBoYXMgYmVlbiB0ZXN0ZWQgb24gdGhlIExpYnJlbSA1IGRldmtpdCB1c2luZyBteHNmYi4K PiAKPiBTaWduZWQtb2ZmLWJ5OiBHdWlkbyBHw7xudGhlciA8YWd4QHNpZ3hjcHUub3JnPgo+IENv LWRldmVsb3BlZC1ieTogUm9iZXJ0IENoaXJhcyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPgo+IC0t LQo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgICAgICAgICAgIHwgICAyICsKPiAg ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCj4gIGRyaXZl cnMvZ3B1L2RybS9icmlkZ2UvaW14LW53bC9LY29uZmlnICAgfCAgMTUgKwo+ICBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2lteC1ud2wvTWFrZWZpbGUgIHwgICAyICsKPiAgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9pbXgtbndsL253bC1kcnYuYyB8IDUyOSArKysrKysrKysrKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9icmlkZ2UvaW14LW53bC9ud2wtZHJ2LmggfCAgNzIgKysrCj4gIGRyaXZlcnMv Z3B1L2RybS9icmlkZ2UvaW14LW53bC9ud2wtZHNpLmMgfCA3NDUgKysrKysrKysrKysrKysrKysr KysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pbXgtbndsL253bC1kc2kuaCB8IDExMSAr KysrCj4gIDggZmlsZXMgY2hhbmdlZCwgMTQ3NyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1ud2wvS2NvbmZpZwo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pbXgtbndsL01ha2VmaWxlCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1ud2wvbndsLWRydi5j Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1ud2wvbnds LWRydi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1u d2wvbndsLWRzaS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2lteC1ud2wvbndsLWRzaS5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+IGluZGV4IGE2ZWVj OTA4YzQzZS4uMzhjMzE0NWE3ZTU3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+IEBAIC0x NTIsNiArMTUyLDggQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L0tj b25maWciCj4gIAo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYWR2NzUxMS9LY29u ZmlnIgo+ICAKPiArc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1ud2wvS2NvbmZp ZyIKPiArCgpBcyB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbiBpLk1YLXNwZWNpZmljIElQLCBJ IHdvdWxkbid0IHVzZSB0aGUgbmFtZQppbXggaW4gZmlsZSBuYW1lcyBvciBpbiB0aGUgY29kZSwg YXQgbGVhc3QgaW4gdGhlIHBhcnRzIHRoYXQgYXJlIG5vdApOWFAtc3BlY2lmaWMuCgo+ICBzb3Vy Y2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZyIKPiAgCj4gIGVuZG1l bnUKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPiBpbmRleCA0OTM0ZmNmNWE2ZjguLjkwNGE5ZWIz YTIwYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQo+IEBAIC0xNiw0ICsxNiw1IEBAIG9i ai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4Lwo+ICBvYmotJChDT05GSUdf RFJNX0kyQ19BRFY3NTExKSArPSBhZHY3NTExLwo+ICBvYmotJChDT05GSUdfRFJNX1RJX1NONjVE U0k4NikgKz0gdGktc242NWRzaTg2Lm8KPiAgb2JqLSQoQ09ORklHX0RSTV9USV9URlA0MTApICs9 IHRpLXRmcDQxMC5vCj4gK29iai15ICs9IGlteC1ud2wvCj4gIG9iai15ICs9IHN5bm9wc3lzLwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1ud2wvS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvaW14LW53bC9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjgyMmRiYTFiMzgwYQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1ud2wvS2NvbmZpZwo+IEBAIC0wLDAgKzEs MTUgQEAKPiArY29uZmlnIERSTV9JTVhfTldMX0RTSQo+ICsJdHJpc3RhdGUgIlN1cHBvcnQgZm9y IE5vcnRod2VzdCBMb2dpYyBNSVBJIERTSSBIb3N0IGNvbnRyb2xsZXIiCj4gKwlkZXBlbmRzIG9u IERSTSAmJiAoQVJDSF9NWEMgfHwgQVJDSF9NVUxUSVBMQVRGT1JNIHx8IENPTVBJTEVfVEVTVCkK PiArCWRlcGVuZHMgb24gQ09NTU9OX0NMSwo+ICsJZGVwZW5kcyBvbiBPRiAmJiBIQVNfSU9NRU0K PiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0IERSTV9NSVBJX0RTSQo+ICsJc2Vs ZWN0IERSTV9QQU5FTF9CUklER0UKPiArCXNlbGVjdCBHRU5FUklDX1BIWV9NSVBJX0RQSFkKPiAr CXNlbGVjdCBNRkRfU1lTQ09OCj4gKwlzZWxlY3QgUkVHTUFQX01NSU8KPiArCWhlbHAKPiArCSAg VGhpcyBlbmFibGVzIHRoZSBOb3J0aHdlc3QgTG9naWMgTUlQSSBEU0kgSG9zdCBjb250cm9sbGVy IGFzCj4gKwkgIGZvdW5kIG9uIE5YUCdzIGkuTVg4IFByb2Nlc3NvcnMuCj4gKwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1ud2wvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2lteC1ud2wvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uOWZhNjM0ODNkYTViCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvaW14LW53bC9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsMiBAQAo+ ICtpbXgtbndsLW9ianMgOj0gbndsLWRydi5vIG53bC1kc2kubwo+ICtvYmotJChDT05GSUdfRFJN X0lNWF9OV0xfRFNJKSArPSBpbXgtbndsLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9pbXgtbndsL253bC1kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaW14LW53 bC9ud2wtZHJ2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4u NDUxZjhmMDY3YzZmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvaW14LW53bC9ud2wtZHJ2LmMKPiBAQCAtMCwwICsxLDUyOSBAQAo+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPiArLyoKPiArICogaS5NWDggTldMIE1JUEkgRFNJIGhv c3QgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNyBOWFAKPiArICogQ29weXJp Z2h0IChDKSAyMDE5IFB1cmlzbSBTUEMKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX3BhbmVsLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVy Lmg+CgpUaGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBuZWVkZWQuCgo+ICsjaW5jbHVkZSA8bGludXgv Y2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KClNhbWUgaGVyZS4KCj4gKyNp bmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4K PiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KPiArI2luY2x1ZGUgPGxpbnV4L21mZC9z eXNjb24vaW14OG1xLWlvbXV4Yy1ncHIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAu aD4KPiArI2luY2x1ZGUgPGxpbnV4L3N5c19zb2MuaD4KPiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVv bW9kZS5oPgo+ICsKPiArI2luY2x1ZGUgIm53bC1kcnYuaCIKPiArI2luY2x1ZGUgIm53bC1kc2ku aCIKPiArCj4gKyNkZWZpbmUgRFJWX05BTUUgImlteC1ud2wtZHNpIgo+ICsKPiArLyogOE1RIFNS QyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBTUkNfTUlQSVBIWV9SQ1IJMHgyOAo+ ICsjZGVmaW5lIFJFU0VUX0JZVEVfTglCSVQoMSkKPiArI2RlZmluZSBSRVNFVF9OCQlCSVQoMikK PiArI2RlZmluZSBEUElfUkVTRVRfTglCSVQoMykKPiArI2RlZmluZSBFU0NfUkVTRVRfTglCSVQo NCkKPiArI2RlZmluZSBQQ0xLX1JFU0VUX04JQklUKDUpCj4gKwo+ICsvKiBQb3NzaWJsZSBjbG9j a3MgKi8KPiArI2RlZmluZSBDTEtfUElYRUwJInBpeGVsIgo+ICsjZGVmaW5lIENMS19DT1JFCSJj b3JlIgo+ICsjZGVmaW5lIENMS19CWVBBU1MJImJ5cGFzcyIKPiArCj4gK2VudW0gaW14X2V4dF9y ZWdzIHsKPiArCUlNWF9SRUdfQ1NSID0gQklUKDEpLAo+ICsJSU1YX1JFR19TUkMgPSBCSVQoMiks Cj4gKwlJTVhfUkVHX0dQUiA9IEJJVCgzKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcmVnbWFwX2NvbmZpZyBud2xfZHNpX3JlZ21hcF9jb25maWcgPSB7Cj4gKwkucmVnX2JpdHMg PSAxNiwKPiArCS52YWxfYml0cyA9IDMyLAo+ICsJLnJlZ19zdHJpZGUgPSA0LAo+ICsJLm1heF9y ZWdpc3RlciA9IElSUV9NQVNLMiwKPiArCS5uYW1lID0gRFJWX05BTUUsCj4gK307Cj4gKwo+ICtz dHJ1Y3QgaW14X253bF9wbGF0Zm9ybV9kYXRhIHsKPiArCWludCAoKnBvd2Vyb24pKHN0cnVjdCBp bXhfbndsX2RzaSAqZHNpKTsKPiArCWludCAoKnBvd2Vyb2ZmKShzdHJ1Y3QgaW14X253bF9kc2kg KmRzaSk7Cj4gKwl1MzIgZXh0X3JlZ3M7IC8qIHJlcXVpcmVkIGV4dGVybmFsIHJlZ2lzdGVycyAq Lwo+ICsJc3RydWN0IGlteF9ud2xfY2xrX2NvbmZpZyBjbGtfY29uZmlnW05XTF9NQVhfUExBVEZP Uk1fQ0xPQ0tTXTsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlteF9ud2xfZHNp ICpicmlkZ2VfdG9fZHNpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXJldHVy biBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgaW14X253bF9kc2ksIGJyaWRnZSk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGlteF9ud2xfZHNpX3NldF9jbG9ja3Moc3RydWN0IGlteF9ud2xf ZHNpICpkc2ksIGJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2kt PmRldjsKPiArCWNvbnN0IGNoYXIgKmlkOwo+ICsJc3RydWN0IGNsayAqY2xrOwo+ICsJdW5zaWdu ZWQgbG9uZyBuZXdfcmF0ZSwgY3VyX3JhdGU7Cj4gKwlib29sIGVuYWJsZWQ7Cj4gKwlzaXplX3Qg aTsKPiArCWludCByZXQ7Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXNhYmxp bmcgcGxhdGZvcm0gY2xvY2tzIiwKPiArCQkJICAgICBlbmFibGUgPyAiZW4iIDogImRpcyIpOwo+ ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNpLT5wZGF0YS0+Y2xrX2NvbmZpZyk7IGkr Kykgewo+ICsJCWlmICghZHNpLT5jbGtfY29uZmlnW2ldLnByZXNlbnQpCj4gKwkJCWNvbnRpbnVl Owo+ICsJCWlkID0gZHNpLT5jbGtfY29uZmlnW2ldLmlkOwo+ICsJCWNsayA9IGRzaS0+Y2xrX2Nv bmZpZ1tpXS5jbGs7Cj4gKwkJbmV3X3JhdGUgPSBkc2ktPmNsa19jb25maWdbaV0ucmF0ZTsKPiAr CQljdXJfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOwo+ICsJCWVuYWJsZWQgPSBkc2ktPmNsa19j b25maWdbaV0uZW5hYmxlZDsKPiArCj4gKwkJLyogQllQQVNTIGNsayBtdXN0IGhhdmUgdGhlIHNh bWUgcmF0ZSBhcyBQSFlfUkVGIGNsayAqLwo+ICsJCWlmICghc3RyY21wKGlkLCBDTEtfQllQQVNT KSkKPiArCQkJbmV3X3JhdGUgPSBjbGtfZ2V0X3JhdGUoZHNpLT5waHlfcmVmX2Nsayk7Cj4gKwo+ ICsJCWlmIChlbmFibGUpIHsKPiArCQkJaWYgKGVuYWJsZWQgJiYgbmV3X3JhdGUgIT0gY3VyX3Jh dGUpCj4gKwkJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrKTsKPiArCQkJZWxzZSBpZiAoZW5h YmxlZCAmJiBuZXdfcmF0ZSA9PSBjdXJfcmF0ZSkKPiArCQkJCWNvbnRpbnVlOwo+ICsJCQlpZiAo bmV3X3JhdGUgPiAwKQo+ICsJCQkJY2xrX3NldF9yYXRlKGNsaywgbmV3X3JhdGUpOwo+ICsJCQly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKPiArCQkJaWYgKHJldCA8IDApIHsKPiArCQkJ CURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBjbG9jayAlcyIsCj4gKwkJCQkJ ICAgICAgaWQpOwo+ICsJCQl9Cj4gKwkJCWRzaS0+Y2xrX2NvbmZpZ1tpXS5lbmFibGVkID0gdHJ1 ZTsKPiArCQkJY3VyX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKPiArCQkJRFJNX0RFVl9ERUJV R19EUklWRVIoCj4gKwkJCQlkZXYsICJFbmFibGVkICVzIGNsayAocmF0ZTogcmVxPSVsdSBhY3Q9 JWx1KVxuIiwKPiArCQkJCWlkLCBuZXdfcmF0ZSwgY3VyX3JhdGUpOwo+ICsJCX0gZWxzZSBpZiAo ZW5hYmxlZCkgewo+ICsJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrKTsKPiArCQkJZHNpLT5j bGtfY29uZmlnW2ldLmVuYWJsZWQgPSBmYWxzZTsKPiArCQkJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiRGlzYWJsZWQgJXMgY2xrXG4iLCBpZCk7Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBpbXhfbndsX2RzaV9lbmFibGUoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCj4g K3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Owo+ICsJaW50IHJldDsKPiArCj4g KwlpbXhfbndsX2RzaV9zZXRfY2xvY2tzKGRzaSwgdHJ1ZSk7Cj4gKwo+ICsJcmV0ID0gZHNpLT5w ZGF0YS0+cG93ZXJvbihkc2kpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJRFJNX0RFVl9FUlJPUihk ZXYsICJGYWlsZWQgdG8gcG93ZXIgb24gRFNJICglZClcbiIsIHJldCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGlteF9ud2xfZHNpX2Rpc2FibGUoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCj4g K3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Owo+ICsKPiArCWlmIChkc2ktPmRw bXNfbW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKQo+ICsJCXJldHVybjsKPiArCgpUaGUgRFJNIGNv cmUgc2hvdWxkIGd1YXJhbnRlZSB0aGF0IHRoZSBicmlkZ2Ugd29uJ3QgYmUgZGlzYWJsZWQgdHdp Y2UsCnNvIEkgZG9uJ3QgdGhpbmsgeW91IG5lZWQgdGhpcyBjaGVjay4gU2ltaWxhcmx5IEkgdGhp bmsgdGhlIGVuYWJsZWQgZmxhZwppbiB0aGUgaW14X253bF9jbGtfY29uZmlnIHN0cnVjdHVyZSBj YW4gYmUgcmVtb3ZlZC4KCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJEaXNhYmxpbmcg ZW5jb2RlciIpOwoKSXMgdGhpcyByZWFsbHkgbmVlZGVkID8KCj4gKwlkc2ktPnBkYXRhLT5wb3dl cm9mZihkc2kpOwo+ICsJaW14X253bF9kc2lfc2V0X2Nsb2Nrcyhkc2ksIGZhbHNlKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgaW14X253bF9zZWxlY3RfaW5wdXRfc291cmNlKHN0cnVjdCBpbXhf bndsX2RzaSAqZHNpKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlbW90ZTsKPiArCXUz MiBtdXhfdmFsID0gSU1YOE1RX0dQUjEzX01JUElfTVVYX1NFTDsKPiArCj4gKwlyZW1vdGUgPSBv Zl9ncmFwaF9nZXRfcmVtb3RlX25vZGUoZHNpLT5kZXYtPm9mX25vZGUsIDAsIDApOwo+ICsJaWYg KHN0cmNtcChyZW1vdGUtPm5hbWUsICJsY2RpZiIpID09IDApCj4gKwkJbXV4X3ZhbCA9IDA7Cj4g KwoKQ2FuJ3QgeW91IGNoZWNrIHRoZSByZW1vdGUgbm9kZSBhdCBwcm9iZSB0aW1lIGluc3RlYWQg b2YgZXZlcnkgdGltZSB0aGUKYnJpZGdlIGdldHMgZW5hYmxlZCwgYW5kIHByb2dyYW0gdGhlIElP IG11eCBhY2NvcmRpbmdseSB0aGVyZSA/CgpUaGlzIGNvZGUgaXMgaS5NWC1zcGVjaWZpYywgc28g aXQgc2hvdWxkIGJlIGlzb2xhdGVkIGluIGFuIG9wZXJhdGlvbiBpbgpzdHJ1Y3QgaW14X253bF9w bGF0Zm9ybV9kYXRhLgoKPiArCURSTV9ERVZfSU5GTyhkc2ktPmRldiwgIlVzaW5nICVzIGFzIGlu cHV0IHNvdXJjZVxuIiwKPiArCQkgICAgIChtdXhfdmFsKSA/ICJEQ1NTIiA6ICJMQ0RJRiIpOwo+ ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzaS0+bXV4X3NlbCwgSU9NVVhDX0dQUjEzLAo+ICsJCQkg ICBJTVg4TVFfR1BSMTNfTUlQSV9NVVhfU0VMLCBtdXhfdmFsKTsKPiArCW9mX25vZGVfcHV0KHJl bW90ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlteF9ud2xfZHNpX2JyaWRnZV9kaXNhYmxl KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCBpbXhfbndsX2RzaSAq ZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOwo+ICsKPiArCWlmIChkc2ktPmRwbXNfbW9kZSAh PSBEUk1fTU9ERV9EUE1TX09OKQo+ICsJCXJldHVybjsKPiArCj4gKwlud2xfZHNpX2Rpc2FibGUo ZHNpKTsKPiArCWlteF9ud2xfZHNpX2Rpc2FibGUoZHNpKTsKPiArCXBtX3J1bnRpbWVfcHV0X3N5 bmMoZHNpLT5kZXYpOwoKRG8geW91IG5lZWQgYSBwdXRfc3luYywgd291bGRuJ3QgYSBwdXQgZG8g PwoKPiArCWRzaS0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7Cj4gK30KPiArCj4gK3N0 YXRpYyBib29sCj4gK2lteF9ud2xfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UsCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkK PiArewo+ICsJc3RydWN0IGlteF9ud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7 Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKPiArCXVuaW9uIHBoeV9jb25maWd1 cmVfb3B0cyBuZXdfY2ZnOwo+ICsJdW5zaWduZWQgbG9uZyBwaHlfcmVmX3JhdGU7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXJldCA9IG53bF9kc2lfZ2V0X2RwaHlfcGFyYW1zKGRzaSwgYWRqdXN0ZWRf bW9kZSwgJm5ld19jZmcpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g KwkvKgo+ICsJICogSWYgaHMgY2xvY2sgaXMgdW5jaGFuZ2VkLCB3ZSdyZSBhbGwgZ29vZCAtIGFs bCBwYXJhbWV0ZXJzIGFyZQo+ICsJICogZGVyaXZlZCBmcm9tIGl0IGF0bS4KPiArCSAqLwo+ICsJ aWYgKG5ld19jZmcubWlwaV9kcGh5LmhzX2Nsa19yYXRlID09IGRzaS0+cGh5X2NmZy5taXBpX2Rw aHkuaHNfY2xrX3JhdGUpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcGh5X3JlZl9yYXRlID0g Y2xrX2dldF9yYXRlKGRzaS0+cGh5X3JlZl9jbGspOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiUEhZIGF0IHJlZiByYXRlOiAlbHVcbiIsIHBoeV9yZWZfcmF0ZSk7Cj4gKwlpZiAocmV0 IDwgMCkgewoKVGhpcyBjYW4ndCBoYXBwZW4uIE9yIGFyZSB5b3UgbWlzc2luZyBhIGZ1bmN0aW9u IGNhbGwgYmVmb3JlIHRoZSBjaGVjayA/Cgo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCj4g KwkJCSAgICAgICJDYW5ub3Qgc2V0dXAgUEhZIGZvciBtb2RlOiAldXgldSBAJWQgSHpcbiIsCj4g KwkJCSAgICAgIGFkanVzdGVkX21vZGUtPmhkaXNwbGF5LCBhZGp1c3RlZF9tb2RlLT52ZGlzcGxh eSwKPiArCQkJICAgICAgYWRqdXN0ZWRfbW9kZS0+Y2xvY2spOwo+ICsJCURSTV9ERVZfRVJST1Io ZHNpLT5kZXYsICJQSFkgcmVmIGNsazogJWx1LCBiaXQgY2xrOiAlbHVcbiIsCj4gKwkJCSAgICAg IHBoeV9yZWZfcmF0ZSwgbmV3X2NmZy5taXBpX2RwaHkuaHNfY2xrX3JhdGUpOwo+ICsJfSBlbHNl IHsKPiArCQkvKiBTYXZlIHRoZSBuZXcgZGVzaXJlZCBwaHkgY29uZmlnICovCj4gKwkJbWVtY3B5 KCZkc2ktPnBoeV9jZmcsICZuZXdfY2ZnLCBzaXplb2YobmV3X2NmZykpOwoKVGhlIG1vZGVfZml4 dXAgb3BlcmF0aW9uIHNoYWxsIG5vdCBjaGFuZ2UgdGhlIGRldmljZSBzdGF0ZSwgaXQgY2FuIGJl CmNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aGVuIHRyeWluZyBtb2Rlcy4KCj4gKwl9Cj4gKwo+ICsJ LyogTENESUYgKyBOV0wgbmVlZHMgYWN0aXZlIGhpZ2ggc3luYyAqLwo+ICsJYWRqdXN0ZWRfbW9k ZS0+ZmxhZ3MgfD0gKERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMp Owo+ICsJYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJj0gfihEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERS TV9NT0RFX0ZMQUdfTlZTWU5DKTsKPiArCj4gKwlkcm1fZGlzcGxheV9tb2RlX3RvX3ZpZGVvbW9k ZShhZGp1c3RlZF9tb2RlLCAmZHNpLT52bSk7Cj4gKwlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVs aW5lKGFkanVzdGVkX21vZGUpOwo+ICsKPiArCXJldHVybiByZXQgPT0gMDsKCglyZXR1cm4gMDsK Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ICtpbXhfbndsX2RzaV9i cmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkgICAgICBj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ICsJc3RydWN0IGlteF9u d2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7Cj4gKwlpbnQgYnBwID0gbWlwaV9k c2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7Cj4gKwo+ICsJaWYgKGJwcCA8IDAp IHsKPiArCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiSW52YWxpZCBwaXhlbCBmb3JtYXQ6ICVk XG4iLAo+ICsJCQkgICAgICBkc2ktPmZvcm1hdCk7Cj4gKwkJcmV0dXJuIE1PREVfQkFEOwo+ICsJ fQoKVGhlIGZvcm1hdCBpc24ndCBwYXJ0IG9mIHRoZSBtb2RlLCBzbyB0aGlzIGRvZXNuJ3QgYmVs b25nIGhlcmUuIFlvdQpzaG91bGQgaGVyZSBpbnN0ZWFkIGNoZWNrIHRoYXQgdGhlIG1vZGUgY2xv Y2sgYW5kIG90aGVyIHRpbWluZyBkYXRhCihlc3BlY2lhbGx5IHRoZSB2aXNpYmxlIHJlc29sdXRp b24pIGFyZSB3aXRoaW4gdGhlIHJhbmdlIHN1cHBvcnRlZCBieQp0aGUgZGV2aWNlLgoKPiArCj4g KwlyZXR1cm4gTU9ERV9PSzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW14X253bF9kc2lfYnJp ZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0 IGlteF9ud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7Cj4gKwo+ICsJaWYgKGRz aS0+ZHBtc19tb2RlID09IERSTV9NT0RFX0RQTVNfT04pCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlt eF9ud2xfc2VsZWN0X2lucHV0X3NvdXJjZShkc2kpOwo+ICsJcG1fcnVudGltZV9nZXRfc3luYyhk c2ktPmRldik7Cj4gKwlpbXhfbndsX2RzaV9lbmFibGUoZHNpKTsKPiArCW53bF9kc2lfZW5hYmxl KGRzaSk7Cj4gKwlkc2ktPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQTVNfT047Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgaW14X253bF9kc2lfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSA9IGJyaWRnZS0+ZHJpdmVy X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBicmlkZ2UtPmVuY29k ZXI7Cj4gKwo+ICsJaWYgKCFlbmNvZGVyKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwg IlBhcmVudCBlbmNvZGVyIG9iamVjdCBub3QgZm91bmRcbiIpOwo+ICsJCXJldHVybiAtRU5PREVW Owo+ICsJfQoKQ2FuJ3QgdGhpcyBoYXBwZW4gPwoKPiArCj4gKwkvKiBTZXQgdGhlIGVuY29kZXIg dHlwZSBhcyBjYWxsZXIgZG9lcyBub3Qga25vdyBpdCAqLwo+ICsJYnJpZGdlLT5lbmNvZGVyLT5l bmNvZGVyX3R5cGUgPSBEUk1fTU9ERV9FTkNPREVSX0RTSTsKClRoZSBlbmNvZGVyIHR5cGUgaXMg cXVpdGUgbWVhbmluZ2xlc3MgYW5kIHVzZXJzcGFjZSBzaG91bGQgbm90IGRlcGVuZCBvbgppdCwg c28gSSB3b3VsZG4ndCBzZXQgaXQgaGVyZSwgZXNwZWNpYWxseSB0aGF0IHRoZSBlbmNvZGVyIG1h eSBub3QKZXhwZWN0IHRoZSBicmlkZ2UgdG8gb3ZlcnJpZGUgaXRzIHR5cGUuCgo+ICsKPiArCS8q IEF0dGFjaCB0aGUgcGFuZWwtYnJpZGdlIHRvIHRoZSBkc2kgYnJpZGdlICovCj4gKwlyZXR1cm4g ZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBkc2ktPnBhbmVsX2JyaWRnZSwgYnJp ZGdlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW14X253bF9kc2lfYnJpZGdlX2RldGFjaChz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW14X253bF9kc2kgKmRz aSA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gKwo+ICsJZHJtX29mX3BhbmVsX2JyaWRnZV9y ZW1vdmUoZHNpLT5kZXYtPm9mX25vZGUsIDEsIDApOwoKVGhpcyBpcyBhbHJlYWR5IGRvbmUgaW4g bndsX2RzaV9ob3N0X2RldGFjaCgpLgoKPiArfQo+ICsKPiArLyogc2VlIGR3LW1pcGktZHNpLmMg Ki8KCldoYXQgZm9yID8gOi0pCgo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVu Y3MgaW14X253bF9kc2lfYnJpZGdlX2Z1bmNzID0gewo+ICsJLnByZV9lbmFibGUJPSBpbXhfbnds X2RzaV9icmlkZ2VfcHJlX2VuYWJsZSwKPiArCS5kaXNhYmxlICAgID0gaW14X253bF9kc2lfYnJp ZGdlX2Rpc2FibGUsCj4gKwkubW9kZV9maXh1cCA9IGlteF9ud2xfZHNpX2JyaWRnZV9tb2RlX2Zp eHVwLAo+ICsJLm1vZGVfdmFsaWQgPSBpbXhfbndsX2RzaV9icmlkZ2VfbW9kZV92YWxpZCwKPiAr CS5hdHRhY2gJICAgID0gaW14X253bF9kc2lfYnJpZGdlX2F0dGFjaCwKPiArCS5kZXRhY2gJICAg ID0gaW14X253bF9kc2lfYnJpZGdlX2RldGFjaCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgaW14 X253bF9kc2lfcGFyc2VfZHQoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCj4gK3sKPiArCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbnAgPSBkc2ktPmRldi0+b2Zfbm9kZTsKPiArCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZHNpLT5kZXYpOwo+ICsJc3RydWN0 IHJlc291cmNlICpyZXM7Cj4gKwlzdHJ1Y3QgY2xrICpjbGs7Cj4gKwljb25zdCBjaGFyICpjbGtf aWQ7Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCWRzaS0+ cGh5ID0gZGV2bV9waHlfZ2V0KGRzaS0+ZGV2LCAiZHBoeSIpOwo+ICsJaWYgKElTX0VSUihkc2kt PnBoeSkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGh5KTsKPiArCQlkZXZfZXJyKGRzaS0+ ZGV2LCAiQ291bGQgbm90IGdldCBQSFkgKCVkKVxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ ICsJfQo+ICsKPiArCS8qIFBsYXRmb3JtIGRlcGVuZGVudCBjbG9ja3MgKi8KPiArCW1lbWNweShk c2ktPmNsa19jb25maWcsIGRzaS0+cGRhdGEtPmNsa19jb25maWcsCj4gKwkgICAgICAgc2l6ZW9m KGRzaS0+cGRhdGEtPmNsa19jb25maWcpKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShkc2ktPnBkYXRhLT5jbGtfY29uZmlnKTsgaSsrKSB7Cj4gKwkJaWYgKCFkc2ktPmNsa19j b25maWdbaV0ucHJlc2VudCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWNsa19pZCA9IGRzaS0+ Y2xrX2NvbmZpZ1tpXS5pZDsKPiArCQljbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsIGNsa19p ZCk7Cj4gKwkJaWYgKElTX0VSUihjbGspKSB7Cj4gKwkJCXJldCA9IFBUUl9FUlIoY2xrKTsKPiAr CQkJZGV2X2Vycihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgJXMgY2xvY2sgKCVkKVxuIiwKPiAr CQkJCWNsa19pZCwgcmV0KTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwkJRFJNX0RFVl9E RUJVR19EUklWRVIoZHNpLT5kZXYsICJTZXR1cCBjbGsgJXMgKHJhdGU6ICVsdSlcbiIsCj4gKwkJ CQkgICAgIGNsa19pZCwgY2xrX2dldF9yYXRlKGNsaykpOwo+ICsJCWRzaS0+Y2xrX2NvbmZpZ1tp XS5jbGsgPSBjbGs7Cj4gKwl9Cj4gKwo+ICsJLyogRFNJIGNsb2NrcyAqLwo+ICsJY2xrID0gZGV2 bV9jbGtfZ2V0KGRzaS0+ZGV2LCAicGh5X3JlZiIpOwo+ICsJaWYgKElTX0VSUihjbGspKSB7Cj4g KwkJcmV0ID0gUFRSX0VSUihjbGspOwo+ICsJCWRldl9lcnIoZHNpLT5kZXYsICJGYWlsZWQgdG8g Z2V0IHBoeV9yZWYgY2xvY2s6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwlkc2ktPnBoeV9yZWZfY2xrID0gY2xrOwo+ICsKPiArCWNsayA9IGRldm1fY2xrX2dldChkc2kt PmRldiwgInJ4X2VzYyIpOwo+ICsJaWYgKElTX0VSUihjbGspKSB7Cj4gKwkJcmV0ID0gUFRSX0VS UihjbGspOwo+ICsJCWRldl9lcnIoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHJ4X2VzYyBjbG9j azogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCWRzaS0+cnhfZXNjX2Ns ayA9IGNsazsKPiArCj4gKwljbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJ0eF9lc2MiKTsK PiArCWlmIChJU19FUlIoY2xrKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoY2xrKTsKPiArCQlkZXZf ZXJyKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCB0eF9lc2MgY2xvY2s6ICVkXG4iLCByZXQpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwlkc2ktPnR4X2VzY19jbGsgPSBjbGs7Cj4gKwo+ICsJ ZHNpLT5jc3IgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAiY3NyIik7Cj4g KwlpZiAoSVNfRVJSKGRzaS0+Y3NyKSAmJiBkc2ktPnBkYXRhLT5leHRfcmVncyAmIElNWF9SRUdf Q1NSKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihkc2ktPmNzcik7Cj4gKwkJRFJNX0RFVl9FUlJPUihk c2ktPmRldiwgIkZhaWxlZCB0byBnZXQgQ1NSIHJlZ21hcDogJWRcbiIsCj4gKwkJCSAgICAgIHJl dCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KClRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIHVzZWQg YW55d2hlcmUuCgo+ICsJZHNpLT5yZXNldCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5k bGUobnAsICJzcmMiKTsKPiArCWlmIChJU19FUlIoZHNpLT5yZXNldCkgJiYgKGRzaS0+cGRhdGEt PmV4dF9yZWdzICYgSU1YX1JFR19TUkMpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihkc2ktPnJlc2V0 KTsKPiArCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBTUkMgcmVnbWFw OiAlZFxuIiwKPiArCQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQoKQ291bGRu J3QgeW91IG1vZGVsIGEgcmVzZXQgY29udHJvbGxlciBpbiB0aGF0IHN5c2NvbiwgYW5kIHVzZSB0 aGUgcmVzZXQKY29udHJvbGxlciBBUEkgaGVyZSA/IEl0IHdvdWxkIGFsbG93IG1vdmluZyB0aGUg aS5NWC1zcGVjaWZpYyBwb3dlciBvbgphbmQgb2ZmIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZHJpdmVy LCBtYWtpbmcgaXQgbW9yZSBnZW5lcmljLgoKPiArCWRzaS0+bXV4X3NlbCA9IHN5c2Nvbl9yZWdt YXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJtdXgtc2VsIik7Cj4gKwlpZiAoSVNfRVJSKGRzaS0+ bXV4X3NlbCkgJiYgKGRzaS0+cGRhdGEtPmV4dF9yZWdzICYgSU1YX1JFR19HUFIpKSB7Cj4gKwkJ cmV0ID0gUFRSX0VSUihkc2ktPm11eF9zZWwpOwo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYs ICJGYWlsZWQgdG8gZ2V0IEdQUiByZWdtYXA6ICVkXG4iLAo+ICsJCQkgICAgICByZXQpOwo+ICsJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBk ZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiArCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2Uo ZHNpLT5kZXYsIHJlcyk7CgpZb3UgY2FuIHJlcGxhY2UgdGhvc2UgdHdvIGNhbGxzIHdpdGggZGV2 bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKCkuCgo+ICsJaWYgKElTX0VSUihiYXNlKSkKPiAr CQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKPiArCj4gKwlkc2ktPnJlZ21hcCA9Cj4gKwkJZGV2bV9y ZWdtYXBfaW5pdF9tbWlvKGRzaS0+ZGV2LCBiYXNlLCAmbndsX2RzaV9yZWdtYXBfY29uZmlnKTsK PiArCWlmIChJU19FUlIoZHNpLT5yZWdtYXApKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihkc2ktPnJl Z21hcCk7Cj4gKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKPiArCQkJICAgICAgIkZhaWxlZCB0 byBjcmVhdGUgTldMIERTSSByZWdtYXA6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4g Kwl9Cj4gKwo+ICsJZHNpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+ICsJaWYg KGRzaS0+aXJxIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8g Z2V0IGRldmljZSBJUlE6ICVkXG4iLAo+ICsJCQkgICAgICBkc2ktPmlycSk7Cj4gKwkJcmV0dXJu IGRzaS0+aXJxOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGlteDhtcV9kc2lfcG93ZXJvbihzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSkKPiArewo+ICsJLyog b3RoZXJ3aXNlIHRoZSBkaXNwbGF5IHN0YXlzIGJsYW5rICovCj4gKwl1c2xlZXBfcmFuZ2UoMjAw LCAzMDApOwo+ICsKPiArCXJlZ21hcF91cGRhdGVfYml0cyhkc2ktPnJlc2V0LCBTUkNfTUlQSVBI WV9SQ1IsIFBDTEtfUkVTRVRfTiwKPiArCQkJICAgUENMS19SRVNFVF9OKTsKPiArCXJlZ21hcF91 cGRhdGVfYml0cyhkc2ktPnJlc2V0LCBTUkNfTUlQSVBIWV9SQ1IsIEVTQ19SRVNFVF9OLAo+ICsJ CQkgICBFU0NfUkVTRVRfTik7Cj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5yZXNldCwgU1JD X01JUElQSFlfUkNSLCBSRVNFVF9CWVRFX04sCj4gKwkJCSAgIFJFU0VUX0JZVEVfTik7Cj4gKwly ZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5yZXNldCwgU1JDX01JUElQSFlfUkNSLCBEUElfUkVTRVRf TiwKPiArCQkJICAgRFBJX1JFU0VUX04pOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGlteDhtcV9kc2lfcG93ZXJvZmYoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCj4g K3sKPiArCWlmIChVU0VfU1JDX1JFU0VUX1FVSVJLKGRzaS0+cXVpcmtzKSkKPiArCQlyZXR1cm4g MDsKPiArCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5yZXNldCwgU1JDX01JUElQSFlfUkNS LCBQQ0xLX1JFU0VUX04sIDApOwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzaS0+cmVzZXQsIFNS Q19NSVBJUEhZX1JDUiwgRVNDX1JFU0VUX04sIDApOwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGRz aS0+cmVzZXQsIFNSQ19NSVBJUEhZX1JDUiwgUkVTRVRfQllURV9OLCAwKTsKPiArCXJlZ21hcF91 cGRhdGVfYml0cyhkc2ktPnJlc2V0LCBTUkNfTUlQSVBIWV9SQ1IsIERQSV9SRVNFVF9OLCAwKTsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2Vf dGltaW5ncyBpbXhfbndsX3RpbWluZ3MgPSB7Cj4gKwkuaW5wdXRfYnVzX2ZsYWdzID0gRFJNX0JV U19GTEFHX0RFX0xPVywKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW14X253bF9wbGF0Zm9y bV9kYXRhIGlteDhtcV9kZXYgPSB7CgpUaGlzIHN0cnVjdHVyZSBzaG91bGQgYmUgY29uc3QsIGVz cGVjaWFsbHkgYXMgaXQgY29udGFpbnMgZnVuY3Rpb24KcG9pbnRlcnMuCgo+ICsJLnBvd2Vyb24g PSAmaW14OG1xX2RzaV9wb3dlcm9uLAo+ICsJLnBvd2Vyb2ZmID0gJmlteDhtcV9kc2lfcG93ZXJv ZmYsCj4gKwkuY2xrX2NvbmZpZyA9IHsKPiArCQl7IC5pZCA9IENMS19DT1JFLCAgIC5wcmVzZW50 ID0gdHJ1ZSB9LAo+ICsJCXsgLmlkID0gQ0xLX1BJWEVMLCAgLnByZXNlbnQgPSBmYWxzZSB9LAo+ ICsJCXsgLmlkID0gQ0xLX0JZUEFTUywgLnByZXNlbnQgPSBmYWxzZSB9LAo+ICsJfSwKPiArCS5l eHRfcmVncyA9IElNWF9SRUdfU1JDIHwgSU1YX1JFR19HUFIsCj4gK307Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbXhfbndsX2RzaV9kdF9pZHNbXSA9IHsKPiArCXsg LmNvbXBhdGlibGUgPSAiZnNsLGlteDhtcS1ud2wtZHNpIiwgLmRhdGEgPSAmaW14OG1xX2Rldiwg fSwKPiArCXsgLyogc2VudGluZWwgKi8gfQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9m LCBpbXhfbndsX2RzaV9kdF9pZHMpOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZGV2 aWNlX2F0dHJpYnV0ZSBpbXhfbndsX3F1aXJrc19tYXRjaFtdID0gewo+ICsJeyAuc29jX2lkID0g ImkuTVg4TVEiLCAucmV2aXNpb24gPSAiMi4wIiwKPiArCSAgLmRhdGEgPSAodm9pZCAqKShFMTE0 MThfSFNfTU9ERV9RVUlSSyB8IFNSQ19SRVNFVF9RVUlSSykgfSwKPiArCXsgLyogc2VudGluZWwu ICovIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGlteF9ud2xfZHNpX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7Cj4gKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9Cj4gKwkJb2ZfbWF0 Y2hfZGV2aWNlKGlteF9ud2xfZHNpX2R0X2lkcywgZGV2KTsKPiArCWNvbnN0IHN0cnVjdCBpbXhf bndsX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gb2ZfaWQtPmRhdGE7Cj4gKwljb25zdCBzdHJ1Y3Qg c29jX2RldmljZV9hdHRyaWJ1dGUgKmF0dHI7Cj4gKwlzdHJ1Y3QgaW14X253bF9kc2kgKmRzaTsK PiArCWludCByZXQ7Cj4gKwo+ICsJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kp LCBHRlBfS0VSTkVMKTsKPiArCWlmICghZHNpKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiAr CWRzaS0+ZGV2ID0gZGV2Owo+ICsJZHNpLT5wZGF0YSA9IHBkYXRhOwo+ICsJZHNpLT5kcG1zX21v ZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKCkRQTVMgaXMgbGVnYWN5LCBsZXQncyBub3QgdXNlIGl0 IHdpdGhpbiB0aGUgZHJpdmVyLgoKPiArCj4gKwlyZXQgPSBpbXhfbndsX2RzaV9wYXJzZV9kdChk c2kpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IGRldm1fcmVx dWVzdF9pcnEoZGV2LCBkc2ktPmlycSwgbndsX2RzaV9pcnFfaGFuZGxlciwgMCwKPiArCQkJICAg ICAgIGRldl9uYW1lKGRldiksIGRzaSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZf RVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJROiAlZCAoJWQpXG4iLCBkc2ktPmlycSwK PiArCQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWRzaS0+ZHNp X2hvc3Qub3BzID0gJm53bF9kc2lfaG9zdF9vcHM7Cj4gKwlkc2ktPmRzaV9ob3N0LmRldiA9IGRl djsKPiArCXJldCA9IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOwo+ICsJ aWYgKHJldCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIE1J UEkgaG9zdDogJWRcbiIsIHJldCk7Cj4gKwkJZ290byBlcnJfY2xlYW51cDsKPiArCX0KPiArCj4g KwlhdHRyID0gc29jX2RldmljZV9tYXRjaChpbXhfbndsX3F1aXJrc19tYXRjaCk7Cj4gKwlpZiAo YXR0cikKPiArCQlkc2ktPnF1aXJrcyA9ICh1aW50cHRyX3QpYXR0ci0+ZGF0YTsKPiArCj4gKwlk c2ktPmJyaWRnZS5kcml2ZXJfcHJpdmF0ZSA9IGRzaTsKPiArCWRzaS0+YnJpZGdlLmZ1bmNzID0g JmlteF9ud2xfZHNpX2JyaWRnZV9mdW5jczsKPiArCWRzaS0+YnJpZGdlLm9mX25vZGUgPSBkZXYt Pm9mX25vZGU7Cj4gKwlkc2ktPmJyaWRnZS50aW1pbmdzID0gJmlteF9ud2xfdGltaW5nczsKPiAr Cj4gKwlkcm1fYnJpZGdlX2FkZCgmZHNpLT5icmlkZ2UpOwo+ICsKPiArCWRldl9zZXRfZHJ2ZGF0 YShkZXYsIGRzaSk7Cj4gKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwo+ICsJcmV0dXJuIDA7Cj4g Kwo+ICtlcnJfY2xlYW51cDoKPiArCWRldm1fZnJlZV9pcnEoZGV2LCBkc2ktPmlycSwgZHNpKTsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW14X253bF9kc2lfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXBtX3J1bnRpbWVfZGlzYWJs ZSgmcGRldi0+ZGV2KTsKCllvdSBzaG91bGQgY2FsbCBkcm1fYnJpZGdlX3JlbW92ZSgpIGhlcmUs IG5vdCBpbiBud2xfZHNpX2hvc3RfZGV0YWNoKCkuCgo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF9ud2xfZHNpX2RyaXZlciA9IHsKPiAr CS5wcm9iZQkJPSBpbXhfbndsX2RzaV9wcm9iZSwKPiArCS5yZW1vdmUJCT0gaW14X253bF9kc2lf cmVtb3ZlLAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm9mX21hdGNoX3RhYmxlID0gaW14X253bF9k c2lfZHRfaWRzLAo+ICsJCS5uYW1lCT0gRFJWX05BTUUsCj4gKwl9LAo+ICt9Owo+ICsKPiArbW9k dWxlX3BsYXRmb3JtX2RyaXZlcihpbXhfbndsX2RzaV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FV VEhPUigiTlhQIFNlbWljb25kdWN0b3IiKTsKPiArTU9EVUxFX0FVVEhPUigiUHVyaXNtIFNQQyIp Owo+ICtNT0RVTEVfREVTQ1JJUFRJT04oImkuTVg4IE5vcnRod2VzdCBMb2dpYyBNSVBJLURTSSBk cml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOyAvKiBHUEx2MiBvciBsYXRlciAqLwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1ud2wvbndsLWRydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pbXgtbndsL253bC1kcnYuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hMWUzMGM1OGI2MjcKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pbXgtbndsL253bC1kcnYuaAo+IEBAIC0w LDAgKzEsNzIgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovCj4g Ky8qCj4gKyAqIGkuTVg4IE5XTCBNSVBJIERTSSBob3N0IGRyaXZlcgo+ICsgKgo+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMTcgTlhQCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20gU1BDCj4g KyAqLwo+ICsKPiArI2lmbmRlZiBfX05XTF9EUlZfSF9fCj4gKyNkZWZpbmUgX19OV0xfRFJWX0hf Xwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3BoeS9waHkuaD4KPiArCj4gK3N0cnVjdCBpbXhfbndsX3BsYXRmb3JtX2RhdGE7Cj4gKwo+ICsv KiBpLk1YOCBOV0wgcXVpcmtzICovCj4gKy8qIGkuTVg4TVEgZXJyYXRhIEUxMTQxOCAqLwo+ICsj ZGVmaW5lIEUxMTQxOF9IU19NT0RFX1FVSVJLCSAgICBCSVQoMCkKPiArI2RlZmluZSBVU0VfRTEx NDE4X0hTX01PREVfUVVJUksoeCkgKCh4KSAmIEUxMTQxOF9IU19NT0RFX1FVSVJLKQo+ICsKPiAr LyogU2tpcCBEU0kgYml0cyBpbiBTUkMgb24gZGlzYWJsZSB0byBhdm9pZCBibGFuayBkaXNwbGF5 IG9uIGVuYWJsZSAqLwo+ICsjZGVmaW5lIFNSQ19SRVNFVF9RVUlSSwkJICAgIEJJVCgxKQo+ICsj ZGVmaW5lIFVTRV9TUkNfUkVTRVRfUVVJUksoeCkJICAgICgoeCkgJiBTUkNfUkVTRVRfUVVJUksp CgpUaGUgVVNFXyogbWFjcm9zIGFyZSBub3Qgc2hvcnRlciB0byB0eXBlLCBzbyBJIHdvdWxkIHR5 cGUgb3V0IHRoZSAmCmNoZWNrIGV4cGxpY2l0bHkuCgo+ICsKPiArI2RlZmluZSBOV0xfTUFYX1BM QVRGT1JNX0NMT0NLUyAzCj4gK3N0cnVjdCBpbXhfbndsX2Nsa19jb25maWcgewo+ICsJY29uc3Qg Y2hhciAqaWQ7Cj4gKwlzdHJ1Y3QgY2xrICpjbGs7Cj4gKwlib29sIHByZXNlbnQ7Cj4gKwlib29s IGVuYWJsZWQ7Cj4gKwl1MzIgcmF0ZTsKPiArfTsKPiArCj4gK3N0cnVjdCBpbXhfbndsX2RzaSB7 Cj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBk c2lfaG9zdDsKPiArCXN0cnVjdCBkcm1fYnJpZGdlICpwYW5lbF9icmlkZ2U7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgcGh5ICpwaHk7Cj4gKwl1bmlvbiBwaHlfY29uZmlndXJl X29wdHMgcGh5X2NmZzsKPiArCXVuc2lnbmVkIGludCBxdWlya3M7Cj4gKwo+ICsJc3RydWN0IHJl Z21hcCAqcmVnbWFwOwo+ICsJaW50IGlycTsKPiArCj4gKwkvKiBFeHRlcm5hbCByZWdpc3RlcnMg Ki8KPiArCXN0cnVjdCByZWdtYXAgKmNzcjsKPiArCXN0cnVjdCByZWdtYXAgKm11eF9zZWw7Cj4g KwlzdHJ1Y3QgcmVnbWFwICpyZXNldDsKPiArCj4gKwkvKiBQbGF0Zm9ybSBkZXBlbmRlbnQgY2xv Y2tzICovCj4gKwlzdHJ1Y3QgaW14X253bF9jbGtfY29uZmlnIGNsa19jb25maWdbM107CgpJIHdv dWxkIHVzZSBOV0xfTUFYX1BMQVRGT1JNX0NMT0NLUyBpbnN0ZWFkIG9mIDMgYXMKaW14X253bF9w bGF0Zm9ybV9kYXRhIHVzZXMgdGhlIG1hY3JvLgoKPiArCS8qIERTSSBjbG9ja3MgKi8KPiArCXN0 cnVjdCBjbGsgKnBoeV9yZWZfY2xrOwo+ICsJc3RydWN0IGNsayAqcnhfZXNjX2NsazsKPiArCXN0 cnVjdCBjbGsgKnR4X2VzY19jbGs7Cj4gKwo+ICsJLyogZHNpIGxhbmVzICovCj4gKwl1MzIgbGFu ZXM7Cj4gKwllbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQ7Cj4gKwlzdHJ1Y3Qgdmlk ZW9tb2RlIHZtOwo+ICsJdW5zaWduZWQgbG9uZyBkc2lfbW9kZV9mbGFnczsKPiArCj4gKwlpbnQg ZHBtc19tb2RlOwo+ICsKPiArCXN0cnVjdCBtaXBpX2RzaV90cmFuc2ZlciAqeGZlcjsKPiArCj4g Kwljb25zdCBzdHJ1Y3QgaW14X253bF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKPiArfTsKPiArCj4g KyNlbmRpZiAvKiBfX05XTF9EUlZfSF9fICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvaW14LW53bC9ud2wtZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1u d2wvbndsLWRzaS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAu LjBlMTQ2M2FmMTYyZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL2lteC1ud2wvbndsLWRzaS5jCj4gQEAgLTAsMCArMSw3NDUgQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4gKy8qCj4gKyAqIE5XTCBEU0kgaG9zdCBkcml2ZXIK PiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE3IE5YUAo+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MTkgUHVyaXNtIFNQQwo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fcGFuZWwuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9yZWdtYXAuaD4KPiArI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgo+ICsjaW5jbHVk ZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gKwo+ICsjaW5jbHVkZSAibndsLWRydi5oIgo+ICsjaW5j bHVkZSAibndsLWRzaS5oIgo+ICsKPiArI2RlZmluZSBNSVBJX0ZJRk9fVElNRU9VVCBtc2Vjc190 b19qaWZmaWVzKDUwMCkKPiArCj4gKy8qIFBLVCByZWcgYml0IG1hbmlwdWxhdGlvbiAqLwo+ICsj ZGVmaW5lIFJFR19NQVNLKGUsIHMpICgoKDEgPDwgKChlKSAtIChzKSArIDEpKSAtIDEpIDw8IChz KSkKPiArI2RlZmluZSBSRUdfUFVUKHgsIGUsIHMpICgoKHgpIDw8IChzKSkgJiBSRUdfTUFTSyhl LCBzKSkKPiArI2RlZmluZSBSRUdfR0VUKHgsIGUsIHMpICgoKHgpICYgUkVHX01BU0soZSwgcykp ID4+IChzKSkKCkxldCdzIG5vdCByZWludmVudCB0aGUgd2hlZWwsIGxpbnV4L2JpdHMuaCBhbmQg bGludXgvYml0ZmllbGQuaCBjYW4gYmUKdXNlZCBpbnN0ZWFkLgoKPiArCj4gKy8qCj4gKyAqIFBL VF9DT05UUk9MIGZvcm1hdDoKPiArICogWzE1OiAwXSAtIHdvcmQgY291bnQKPiArICogWzE3OjE2 XSAtIHZpcnR1YWwgY2hhbm5lbAo+ICsgKiBbMjM6MThdIC0gZGF0YSB0eXBlCj4gKyAqIFsyNF0J ICAgLSBMUCBvciBIUyBzZWxlY3QgKDAgLSBMUCwgMSAtIEhTKQo+ICsgKiBbMjVdCSAgIC0gcGVy Zm9ybSBCVEEgYWZ0ZXIgcGFja2V0IGlzIHNlbnQKPiArICogWzI2XQkgICAtIHBlcmZvcm0gQlRB IG9ubHksIG5vIHBhY2tldCB0eAo+ICsgKi8KPiArI2RlZmluZSBXQyh4KQkJUkVHX1BVVCgoeCks IDE1LCAgMCkKPiArI2RlZmluZSBUWF9WQyh4KQlSRUdfUFVUKCh4KSwgMTcsIDE2KQo+ICsjZGVm aW5lIFRYX0RUKHgpCVJFR19QVVQoKHgpLCAyMywgMTgpCj4gKyNkZWZpbmUgSFNfU0VMKHgpCVJF R19QVVQoKHgpLCAyNCwgMjQpCj4gKyNkZWZpbmUgQlRBX1RYKHgpCVJFR19QVVQoKHgpLCAyNSwg MjUpCj4gKyNkZWZpbmUgQlRBX05PX1RYKHgpCVJFR19QVVQoKHgpLCAyNiwgMjYpCj4gKwo+ICsv Kgo+ICsgKiBSWF9QS1RfSEVBREVSIGZvcm1hdDoKPiArICogWzE1OiAwXSAtIHdvcmQgY291bnQK PiArICogWzIxOjE2XSAtIGRhdGEgdHlwZQo+ICsgKiBbMjM6MjJdIC0gdmlydHVhbCBjaGFubmVs Cj4gKyAqLwo+ICsjZGVmaW5lIFJYX0RUKHgpIFJFR19HRVQoKHgpLCAyMSwgMTYpCj4gKyNkZWZp bmUgUlhfVkMoeCkgUkVHX0dFVCgoeCksIDIzLCAyMikKPiArCj4gKy8qCj4gKyAqIERTSSBWaWRl byBtb2RlCj4gKyAqLwo+ICsjZGVmaW5lIFZJREVPX01PREVfQlVSU1RfTU9ERV9XSVRIX1NZTkNf UFVMU0VTCQkwCj4gKyNkZWZpbmUgVklERU9fTU9ERV9OT05fQlVSU1RfTU9ERV9XSVRIX1NZTkNf RVZFTlRTCUJJVCgwKQo+ICsjZGVmaW5lIFZJREVPX01PREVfQlVSU1RfTU9ERQkJCQlCSVQoMSkK PiArCj4gKy8qCj4gKyAqIERQSSBjb2xvciBjb2RpbmcKPiArICovCj4gKyNkZWZpbmUgRFBJXzE2 X0JJVF81NjVfUEFDS0VECTAKPiArI2RlZmluZSBEUElfMTZfQklUXzU2NV9BTElHTkVECTEKPiAr I2RlZmluZSBEUElfMTZfQklUXzU2NV9TSElGVEVECTIKPiArI2RlZmluZSBEUElfMThfQklUX1BB Q0tFRAkzCj4gKyNkZWZpbmUgRFBJXzE4X0JJVF9BTElHTkVECTQKPiArI2RlZmluZSBEUElfMjRf QklUCQk1Cj4gKwo+ICsvKgo+ICsgKiBEUEkgUGl4ZWwgZm9ybWF0Cj4gKyAqLwo+ICsjZGVmaW5l IFBJWEVMX0ZPUk1BVF8xNiAgMAo+ICsjZGVmaW5lIFBJWEVMX0ZPUk1BVF8xOCAgQklUKDApCj4g KyNkZWZpbmUgUElYRUxfRk9STUFUXzE4TCBCSVQoMSkKPiArI2RlZmluZSBQSVhFTF9GT1JNQVRf MjQgIChCSVQoMCkgfCBCSVQoMSkpCj4gKwo+ICtlbnVtIHRyYW5zZmVyX2RpcmVjdGlvbiB7IERT SV9QQUNLRVRfU0VORCwgRFNJX1BBQ0tFVF9SRUNFSVZFIH07CgpMaW5lIGJyZWFrcyBwbGVhc2Uu Cgo+ICsKPiArc3RydWN0IG1pcGlfZHNpX3RyYW5zZmVyIHsKCkxldCdzIG5vdCB1c2Ugc3VjaCBh IGdlbmVyaWMgbmFtZSBmb3IgYSBkcml2ZXItc3BlY2lmaWMgc3RydWN0dXJlLiBZb3UKc2hvdWxk IG5hbWUgaXMgbndsX2RzaV90cmFuc2Zlci4KCj4gKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNn ICptc2c7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0IHBhY2tldDsKPiArCXN0cnVjdCBjb21w bGV0aW9uIGNvbXBsZXRlZDsKPiArCj4gKwlpbnQgc3RhdHVzOyAvKiBzdGF0dXMgb2YgdHJhbnNt aXNzaW9uICovCj4gKwllbnVtIHRyYW5zZmVyX2RpcmVjdGlvbiBkaXJlY3Rpb247Cj4gKwlib29s IG5lZWRfYnRhOwo+ICsJdTggY21kOwo+ICsJdTE2IHJ4X3dvcmRfY291bnQ7Cj4gKwlzaXplX3Qg dHhfbGVuOyAvKiBieXRlcyBzZW50ICovCj4gKwlzaXplX3QgcnhfbGVuOyAvKiBieXRlcyByZWNl aXZlZCAqLwo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgbndsX2RzaV93cml0ZShzdHJ1 Y3QgaW14X253bF9kc2kgKmRzaSwgdW5zaWduZWQgaW50IHJlZywKPiArCQkJCXUzMiB2YWwpCj4g K3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKGRzaS0+cmVnbWFwLCBy ZWcsIHZhbCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAo+ ICsJCQkgICAgICAiRmFpbGVkIHRvIHdyaXRlIE5XTCBEU0kgcmVnIDB4JXg6ICVkXG4iLCByZWcs Cj4gKwkJCSAgICAgIHJldCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHUzMiBud2xfZHNpX3JlYWQoc3RydWN0IGlteF9ud2xfZHNpICpkc2ksIHUzMiByZWcpCj4g K3sKPiArCXVuc2lnbmVkIGludCB2YWw7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHJlZ21h cF9yZWFkKGRzaS0+cmVnbWFwLCByZWcsICZ2YWwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJRFJN X0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byByZWFkIE5XTCBEU0kgcmVnIDB4JXg6ICVk XG4iLAo+ICsJCQkgICAgICByZWcsIHJldCk7Cj4gKwo+ICsJcmV0dXJuIHZhbDsKCllvdSdyZSBs b29zaW5nIHRoZSBlcnJvci4uLgoKPiArfQo+ICsKPiArc3RhdGljIHUzMiBud2xfZHNpX2dldF9k cGlfcGl4ZWxfZm9ybWF0KGVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1hdCkKPiArewo+ ICsJc3dpdGNoIChmb3JtYXQpIHsKPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKPiArCQly ZXR1cm4gUElYRUxfRk9STUFUXzE2Owo+ICsJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2Ogo+ICsJ CXJldHVybiBQSVhFTF9GT1JNQVRfMThMOwo+ICsJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2X1BB Q0tFRDoKPiArCQlyZXR1cm4gUElYRUxfRk9STUFUXzE4Owo+ICsJY2FzZSBNSVBJX0RTSV9GTVRf UkdCODg4Ogo+ICsJCXJldHVybiBQSVhFTF9GT1JNQVRfMjQ7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsJfQo+ICt9Cj4gKwo+ICtpbnQgbndsX2RzaV9nZXRfZHBoeV9wYXJh bXMoc3RydWN0IGlteF9ud2xfZHNpICpkc2ksCj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJICAgIHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyAqcGh5 X29wdHMpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgcmF0ZTsKPiArCj4gKwlpZiAoZHNpLT5sYW5l cyA8IDEgfHwgZHNpLT5sYW5lcyA+IDQpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyoK PiArCSAqIFNvIGZhciB0aGUgRFBIWSBzcGVjIG1pbmltYWwgdGltaW5ncyB3b3JrIGZvciBib3Ro IG1peGVsCj4gKwkgKiBkcGh5IGFuZCBud2wgZHNpIGhvc3QKPiArCSAqLwo+ICsJcGh5X21pcGlf ZHBoeV9nZXRfZGVmYXVsdF9jb25maWcoCj4gKwkJbW9kZS0+Y3J0Y19jbG9jayAqIDEwMDAsCj4g KwkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCksIGRzaS0+bGFuZXMs Cj4gKwkJJnBoeV9vcHRzLT5taXBpX2RwaHkpOwo+ICsJcmF0ZSA9IGNsa19nZXRfcmF0ZShkc2kt PnR4X2VzY19jbGspOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJMUCBjbGsg aXMgQCVsdSBIelxuIiwgcmF0ZSk7Cj4gKwlwaHlfb3B0cy0+bWlwaV9kcGh5LmxwX2Nsa19yYXRl ID0gcmF0ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChud2xf ZHNpX2dldF9kcGh5X3BhcmFtcyk7CgpObyBuZWVkIHRvIGV4cG9ydCBzeW1ib2xzLCB0aG9zZSBm dWJjdGlvbnMgYXJlIG9ubHkgbWVhbnQgdG8gYmUgY2FsbGVkCmZyb20gd2l0aGluIHRoZSBzYW1l IG1vZHVsZS4KCj4gKwo+ICsjZGVmaW5lIFBTRUNfUEVSX1NFQyAxMDAwMDAwMDAwMDAwTEwKPiAr LyoKPiArICogcHMyYmMgLSBQaWNvc2Vjb25kcyB0byBieXRlIGNsb2NrIGN5Y2xlcwo+ICsgKi8K PiArc3RhdGljIHUzMiBwczJiYyhzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSwgdW5zaWduZWQgbG9u ZyBsb25nIHBzKQo+ICt7Cj4gKwlpbnQgYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2Jw cChkc2ktPmZvcm1hdCk7Cj4gKwo+ICsJcmV0dXJuIERJVl9ST1VORF9VUChwcyAqIGRzaS0+dm0u cGl4ZWxjbG9jayAqIGJwcCwKPiArCQkJICAgIGRzaS0+bGFuZXMgKiA4ICogUFNFQ19QRVJfU0VD KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHVpMmJjIC0gVUkgdGltZSBwZXJpb2RzIHRvIGJ5dGUg Y2xvY2sgY3ljbGVzCj4gKyAqLwo+ICtzdGF0aWMgdTMyIHVpMmJjKHN0cnVjdCBpbXhfbndsX2Rz aSAqZHNpLCB1bnNpZ25lZCBsb25nIGxvbmcgdWkpCj4gK3sKPiArCWludCBicHAgPSBtaXBpX2Rz aV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKPiArCj4gKwlyZXR1cm4gRElWX1JP VU5EX1VQKHVpICogZHNpLT5sYW5lcywgZHNpLT52bS5waXhlbGNsb2NrICogYnBwKTsKPiArfQo+ ICsKPiArI2RlZmluZSBVU0VDX1BFUl9TRUMgMTAwMDAwMEwKPiArLyoKPiArICogdXMyYmMgLSBt aWNybyBzZWNvbmRzIHRvIGxwIGNsb2NrIGN5Y2xlcwo+ICsgKi8KPiArc3RhdGljIHUzMiB1czJs cCh1MzIgbHBfY2xrX3JhdGUsIHVuc2lnbmVkIGxvbmcgdXMpCj4gK3sKPiArCXJldHVybiBESVZf Uk9VTkRfVVAodXMgKiBscF9jbGtfcmF0ZSwgVVNFQ19QRVJfU0VDKTsKPiArfQo+ICsKPiArc3Rh dGljIGludCBud2xfZHNpX2NvbmZpZ19ob3N0KHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpKQo+ICt7 Cj4gKwl1MzIgY3ljbGVzOwo+ICsJc3RydWN0IHBoeV9jb25maWd1cmVfb3B0c19taXBpX2RwaHkg KmNmZyA9ICZkc2ktPnBoeV9jZmcubWlwaV9kcGh5Owo+ICsKPiArCWlmIChkc2ktPmxhbmVzIDwg MSB8fCBkc2ktPmxhbmVzID4gNCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkRTSSBMYW5lcyAlZFxuIiwgZHNpLT5sYW5lcyk7Cj4g Kwlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX05VTV9MQU5FUywgZHNpLT5sYW5lcyAtIDEpOwo+ICsK PiArCWlmIChkc2ktPmRzaV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVP VVMpIHsKPiArCQlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX05PTkNPTlRJTlVPVVNfQ0xLLCAweDAx KTsKPiArCQlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX0FVVE9JTlNFUlRfRU9UUCwgMHgwMSk7Cj4g Kwl9IGVsc2Ugewo+ICsJCW53bF9kc2lfd3JpdGUoZHNpLCBDRkdfTk9OQ09OVElOVU9VU19DTEss IDB4MDApOwo+ICsJCW53bF9kc2lfd3JpdGUoZHNpLCBDRkdfQVVUT0lOU0VSVF9FT1RQLCAweDAw KTsKPiArCX0KPiArCj4gKwkvKiB2YWx1ZXMgaW4gYnl0ZSBjbG9jayBjeWNsZXMgKi8KPiArCWN5 Y2xlcyA9IHVpMmJjKGRzaSwgY2ZnLT5jbGtfcHJlKTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVS KGRzaS0+ZGV2LCAiY2ZnX3RfcHJlOiAweCV4XG4iLCBjeWNsZXMpOwo+ICsJbndsX2RzaV93cml0 ZShkc2ksIENGR19UX1BSRSwgY3ljbGVzKTsKPiArCWN5Y2xlcyA9IHBzMmJjKGRzaSwgY2ZnLT5s cHggKyBjZmctPmNsa19wcmVwYXJlICsgY2ZnLT5jbGtfemVybyk7Cj4gKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkc2ktPmRldiwgImNmZ190eF9nYXAgKHByZSk6IDB4JXhcbiIsIGN5Y2xlcyk7Cj4g KwljeWNsZXMgKz0gdWkyYmMoZHNpLCBjZmctPmNsa19wcmUpOwo+ICsJRFJNX0RFVl9ERUJVR19E UklWRVIoZHNpLT5kZXYsICJjZmdfdHhfZ2FwOiAweCV4XG4iLCBjeWNsZXMpOwo+ICsJbndsX2Rz aV93cml0ZShkc2ksIENGR19UX1BPU1QsIGN5Y2xlcyk7Cj4gKwljeWNsZXMgPSBwczJiYyhkc2ks IGNmZy0+aHNfZXhpdCk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190 eF9nYXA6IDB4JXhcbiIsIGN5Y2xlcyk7Cj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX1RYX0dB UCwgY3ljbGVzKTsKPiArCj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX0VYVFJBX0NNRFNfQUZU RVJfRU9UUCwgMHgwMSk7Cj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX0hUWF9UT19DT1VOVCwg MHgwMCk7Cj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX0xSWF9IX1RPX0NPVU5ULCAweDAwKTsK PiArCW53bF9kc2lfd3JpdGUoZHNpLCBDRkdfQlRBX0hfVE9fQ09VTlQsIDB4MDApOwo+ICsJLyog SW4gTFAgY2xvY2sgY3ljbGVzICovCj4gKwljeWNsZXMgPSB1czJscChjZmctPmxwX2Nsa19yYXRl LCBjZmctPndha2V1cCk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190 d2FrZXVwOiAweCV4XG4iLCBjeWNsZXMpOwo+ICsJbndsX2RzaV93cml0ZShkc2ksIENGR19UV0FL RVVQLCBjeWNsZXMpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG53 bF9kc2lfY29uZmlnX2RwaShzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSkKPiArewo+ICsJc3RydWN0 IHZpZGVvbW9kZSAqdm0gPSAmZHNpLT52bTsKPiArCXUzMiBjb2xvcl9mb3JtYXQsIG1vZGU7Cj4g Kwlib29sIGJ1cnN0X21vZGU7Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYs ICJoZnJvbnRfcG9yY2ggPSAlZFxuIiwgdm0tPmhmcm9udF9wb3JjaCk7Cj4gKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkc2ktPmRldiwgImhiYWNrX3BvcmNoID0gJWRcbiIsIHZtLT5oYmFja19wb3Jj aCk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhzeW5jX2xlbiA9ICVkXG4i LCB2bS0+aHN5bmNfbGVuKTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGFj dGl2ZSA9ICVkXG4iLCB2bS0+aGFjdGl2ZSk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2kt PmRldiwgInZmcm9udF9wb3JjaCA9ICVkXG4iLCB2bS0+dmZyb250X3BvcmNoKTsKPiArCURSTV9E RVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAidmJhY2tfcG9yY2ggPSAlZFxuIiwgdm0tPnZiYWNr X3BvcmNoKTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAidnN5bmNfbGVuID0g JWRcbiIsIHZtLT52c3luY19sZW4pOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYs ICJ2YWN0aXZlID0gJWRcbiIsIHZtLT52YWN0aXZlKTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVS KGRzaS0+ZGV2LCAiY2xvY2sgPSAlbHUga0h6XG4iLAo+ICsJCQkgICAgIHZtLT5waXhlbGNsb2Nr IC8gMTAwMCk7Cj4gKwo+ICsJY29sb3JfZm9ybWF0ID0gbndsX2RzaV9nZXRfZHBpX3BpeGVsX2Zv cm1hdChkc2ktPmZvcm1hdCk7Cj4gKwlpZiAoY29sb3JfZm9ybWF0IDwgMCkgewo+ICsJCURSTV9E RVZfRVJST1IoZHNpLT5kZXYsICJJbnZhbGlkIGNvbG9yIGZvcm1hdCAweCV4XG4iLAo+ICsJCQkg ICAgICBkc2ktPmZvcm1hdCk7Cj4gKwkJcmV0dXJuIGNvbG9yX2Zvcm1hdDsKPiArCX0KPiArCURS TV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAicGl4ZWwgZm10ID0gJWRcbiIsIGRzaS0+Zm9y bWF0KTsKPiArCj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgSU5URVJGQUNFX0NPTE9SX0NPRElORywg RFBJXzI0X0JJVCk7Cj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgUElYRUxfRk9STUFULCBjb2xvcl9m b3JtYXQpOwo+ICsJLyoKPiArCSAqIEFkanVzdGluZyBpbnB1dCBwb2xhcml0eSBiYXNlZCBvbiB0 aGUgdmlkZW8gbW9kZSByZXN1bHRzIGluCj4gKwkgKiBhIGJsYWNrIHNjcmVlbiBzbyBhbHdheXMg cGljayBhY3RpdmUgbG93Ogo+ICsJICovCj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgVlNZTkNfUE9M QVJJVFksIFZTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1cpOwo+ICsJbndsX2RzaV93cml0ZShkc2ks IEhTWU5DX1BPTEFSSVRZLCBIU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XKTsKPiArCj4gKwlidXJz dF9tb2RlID0gKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNU KSAmJgo+ICsJCSAgICAgIShkc2ktPmRzaV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURF T19TWU5DX1BVTFNFKTsKPiArCj4gKwlpZiAoYnVyc3RfbW9kZSkgewo+ICsJCW53bF9kc2lfd3Jp dGUoZHNpLCBWSURFT19NT0RFLCBWSURFT19NT0RFX0JVUlNUX01PREUpOwo+ICsJCW53bF9kc2lf d3JpdGUoZHNpLCBQSVhFTF9GSUZPX1NFTkRfTEVWRUwsIDI1Nik7Cj4gKwl9IGVsc2Ugewo+ICsJ CW1vZGUgPSAoKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNf UFVMU0UpID8KPiArCQkJCVZJREVPX01PREVfQlVSU1RfTU9ERV9XSVRIX1NZTkNfUFVMU0VTIDoK PiArCQkJCVZJREVPX01PREVfTk9OX0JVUlNUX01PREVfV0lUSF9TWU5DX0VWRU5UUyk7Cj4gKwkJ bndsX2RzaV93cml0ZShkc2ksIFZJREVPX01PREUsIG1vZGUpOwo+ICsJCW53bF9kc2lfd3JpdGUo ZHNpLCBQSVhFTF9GSUZPX1NFTkRfTEVWRUwsIHZtLT5oYWN0aXZlKTsKPiArCX0KPiArCj4gKwlu d2xfZHNpX3dyaXRlKGRzaSwgSEZQLCB2bS0+aGZyb250X3BvcmNoKTsKPiArCW53bF9kc2lfd3Jp dGUoZHNpLCBIQlAsIHZtLT5oYmFja19wb3JjaCk7Cj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgSFNB LCB2bS0+aHN5bmNfbGVuKTsKPiArCj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgRU5BQkxFX01VTFRf UEtUUywgMHgwKTsKPiArCW53bF9kc2lfd3JpdGUoZHNpLCBCTExQX01PREUsIDB4MSk7Cj4gKwlu d2xfZHNpX3dyaXRlKGRzaSwgRU5BQkxFX01VTFRfUEtUUywgMHgwKTsKPiArCW53bF9kc2lfd3Jp dGUoZHNpLCBVU0VfTlVMTF9QS1RfQkxMUCwgMHgwKTsKPiArCW53bF9kc2lfd3JpdGUoZHNpLCBW QywgMHgwKTsKPiArCj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgUElYRUxfUEFZTE9BRF9TSVpFLCB2 bS0+aGFjdGl2ZSk7Cj4gKwlud2xfZHNpX3dyaXRlKGRzaSwgVkFDVElWRSwgdm0tPnZhY3RpdmUg LSAxKTsKPiArCW53bF9kc2lfd3JpdGUoZHNpLCBWQlAsIHZtLT52YmFja19wb3JjaCk7Cj4gKwlu d2xfZHNpX3dyaXRlKGRzaSwgVkZQLCB2bS0+dmZyb250X3BvcmNoKTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBud2xfZHNpX2VuYWJsZV90eF9jbG9jayhzdHJ1Y3Qg aW14X253bF9kc2kgKmRzaSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnR4X2Vz Y19jbGspOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxl ZCB0byBlbmFibGUgdHhfZXNjIGNsazogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiAr CX0KPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGVkIHR4X2VzYyBjbGsg QCVsdSBIelxuIiwKPiArCQkJICAgICBjbGtfZ2V0X3JhdGUoZHNpLT50eF9lc2NfY2xrKSk7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBud2xfZHNpX2VuYWJsZV9yeF9jbG9j ayhzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g ZHNpLT5kZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShk c2ktPnJ4X2VzY19jbGspOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRl diwgIkZhaWxlZCB0byBlbmFibGUgcnhfZXNjIGNsazogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGVkIHJ4 X2VzYyBjbGsgQCVsdSBIelxuIiwKPiArCQkJICAgICBjbGtfZ2V0X3JhdGUoZHNpLT5yeF9lc2Nf Y2xrKSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbndsX2RzaV9pbml0 X2ludGVycnVwdHMoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCj4gK3sKPiArCXUzMiBpcnFfZW5h YmxlOwo+ICsKPiArCW53bF9kc2lfd3JpdGUoZHNpLCBJUlFfTUFTSywgMHhmZmZmZmZmZik7Cj4g Kwlud2xfZHNpX3dyaXRlKGRzaSwgSVJRX01BU0syLCAweDcpOwo+ICsKPiArCWlycV9lbmFibGUg PSB+KHUzMikoVFhfUEtUX0RPTkVfTUFTSyB8IFJYX1BLVF9IRFJfUkNWRF9NQVNLIHwKPiArCQkJ ICAgIFRYX0ZJRk9fT1ZGTFdfTUFTSyB8IEhTX1RYX1RJTUVPVVRfTUFTSyk7Cj4gKwo+ICsJbnds X2RzaV93cml0ZShkc2ksIElSUV9NQVNLLCBpcnFfZW5hYmxlKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBud2xfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lfaG9zdCwK PiArCQkJICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKPiArewo+ICsJc3Ry dWN0IGlteF9ud2xfZHNpICpkc2kgPQo+ICsJCWNvbnRhaW5lcl9vZihkc2lfaG9zdCwgc3RydWN0 IGlteF9ud2xfZHNpLCBkc2lfaG9zdCk7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRl djsKPiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbDsKPiArCWludCByZXQ7Cj4gKwo+ICsJRFJNX0RFVl9JTkZPKGRldiwgImxhbmVzPSV1LCBm b3JtYXQ9MHgleCBmbGFncz0weCVseFxuIiwgZGV2aWNlLT5sYW5lcywKPiArCQkgICAgIGRldmlj ZS0+Zm9ybWF0LCBkZXZpY2UtPm1vZGVfZmxhZ3MpOwo+ICsKPiArCWlmIChkZXZpY2UtPmxhbmVz IDwgMSB8fCBkZXZpY2UtPmxhbmVzID4gNCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlk c2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKPiArCWRzaS0+Zm9ybWF0ID0gZGV2aWNlLT5mb3Jt YXQ7Cj4gKwlkc2ktPmRzaV9tb2RlX2ZsYWdzID0gZGV2aWNlLT5tb2RlX2ZsYWdzOwo+ICsKPiAr CXJldCA9IGRybV9vZl9maW5kX3BhbmVsX29yX2JyaWRnZShkc2ktPmRldi0+b2Zfbm9kZSwgMSwg MCwgJnBhbmVsLAo+ICsJCQkJCSAgJmJyaWRnZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBy ZXQ7Cj4gKwo+ICsJaWYgKHBhbmVsKSB7Cj4gKwkJYnJpZGdlID0gZHJtX3BhbmVsX2JyaWRnZV9h ZGQocGFuZWwsIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOwo+ICsJCWlmIChJU19FUlIoYnJpZGdl KSkKPiArCQkJcmV0dXJuIFBUUl9FUlIoYnJpZGdlKTsKPiArCX0KPiArCj4gKwlkc2ktPnBhbmVs X2JyaWRnZSA9IGJyaWRnZTsKPiArCWRybV9icmlkZ2VfYWRkKCZkc2ktPmJyaWRnZSk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbndsX2RzaV9ob3N0X2RldGFjaChz dHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hvc3QsCj4gKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpkZXZpY2UpCj4gK3sKPiArCXN0cnVjdCBpbXhfbndsX2RzaSAqZHNpID0KPiAr CQljb250YWluZXJfb2YoZHNpX2hvc3QsIHN0cnVjdCBpbXhfbndsX2RzaSwgZHNpX2hvc3QpOwo+ ICsKPiArCWRybV9vZl9wYW5lbF9icmlkZ2VfcmVtb3ZlKGRzaS0+ZGV2LT5vZl9ub2RlLCAxLCAw KTsKPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZkc2ktPmJyaWRnZSk7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIG53bF9kc2lfcmVhZF9wYWNrZXQoc3RydWN0IGlteF9u d2xfZHNpICpkc2ksIHUzMiBzdGF0dXMpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRz aS0+ZGV2Owo+ICsJc3RydWN0IG1pcGlfZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNpLT54ZmVyOwo+ ICsJdTggKnBheWxvYWQgPSB4ZmVyLT5tc2ctPnJ4X2J1ZjsKPiArCXUzMiB2YWw7Cj4gKwl1MTYg d29yZF9jb3VudDsKPiArCXU4IGNoYW5uZWw7Cj4gKwl1OCBkYXRhX3R5cGU7Cj4gKwo+ICsJeGZl ci0+c3RhdHVzID0gMDsKPiArCj4gKwlpZiAoeGZlci0+cnhfd29yZF9jb3VudCA9PSAwKSB7Cj4g KwkJaWYgKCEoc3RhdHVzICYgUlhfUEtUX0hEUl9SQ1ZEKSkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ ICsJCS8qIEdldCB0aGUgUlggaGVhZGVyIGFuZCBwYXJzZSBpdCAqLwo+ICsJCXZhbCA9IG53bF9k c2lfcmVhZChkc2ksIFJYX1BLVF9IRUFERVIpOwo+ICsJCXdvcmRfY291bnQgPSBXQyh2YWwpOwo+ ICsJCWNoYW5uZWwgPSBSWF9WQyh2YWwpOwo+ICsJCWRhdGFfdHlwZSA9IFJYX0RUKHZhbCk7Cj4g Kwo+ICsJCWlmIChjaGFubmVsICE9IHhmZXItPm1zZy0+Y2hhbm5lbCkgewo+ICsJCQlEUk1fREVW X0VSUk9SKGRldiwKPiArCQkJCSAgICAgICJbJTAyWF0gQ2hhbm5lbCBtaXNtYXRjaCAoJXUgIT0g JXUpXG4iLAo+ICsJCQkJICAgICAgeGZlci0+Y21kLCBjaGFubmVsLCB4ZmVyLT5tc2ctPmNoYW5u ZWwpOwo+ICsJCQlyZXR1cm4gdHJ1ZTsKPiArCQl9Cj4gKwo+ICsJCXN3aXRjaCAoZGF0YV90eXBl KSB7Cj4gKwkJY2FzZSBNSVBJX0RTSV9SWF9HRU5FUklDX1NIT1JUX1JFQURfUkVTUE9OU0VfMkJZ VEU6Cj4gKwkJCS8qIEZhbGwgdGhyb3VnaCAqLwo+ICsJCWNhc2UgTUlQSV9EU0lfUlhfRENTX1NI T1JUX1JFQURfUkVTUE9OU0VfMkJZVEU6Cj4gKwkJCWlmICh4ZmVyLT5tc2ctPnJ4X2xlbiA+IDEp IHsKPiArCQkJCS8qIHJlYWQgc2Vjb25kIGJ5dGUgKi8KPiArCQkJCXBheWxvYWRbMV0gPSB3b3Jk X2NvdW50ID4+IDg7Cj4gKwkJCQkrK3hmZXItPnJ4X2xlbjsKPiArCQkJfQo+ICsJCQkvKiBGYWxs IHRocm91Z2ggKi8KPiArCQljYXNlIE1JUElfRFNJX1JYX0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQ T05TRV8xQllURToKPiArCQkJLyogRmFsbCB0aHJvdWdoICovCj4gKwkJY2FzZSBNSVBJX0RTSV9S WF9EQ1NfU0hPUlRfUkVBRF9SRVNQT05TRV8xQllURToKPiArCQkJaWYgKHhmZXItPm1zZy0+cnhf bGVuID4gMCkgewo+ICsJCQkJLyogcmVhZCBmaXJzdCBieXRlICovCj4gKwkJCQlwYXlsb2FkWzBd ID0gd29yZF9jb3VudCAmIDB4ZmY7Cj4gKwkJCQkrK3hmZXItPnJ4X2xlbjsKPiArCQkJfQo+ICsJ CQl4ZmVyLT5zdGF0dXMgPSB4ZmVyLT5yeF9sZW47Cj4gKwkJCXJldHVybiB0cnVlOwo+ICsJCWNh c2UgTUlQSV9EU0lfUlhfQUNLTk9XTEVER0VfQU5EX0VSUk9SX1JFUE9SVDoKPiArCQkJd29yZF9j b3VudCAmPSAweGZmOwo+ICsJCQlEUk1fREVWX0VSUk9SKGRldiwgIlslMDJYXSBEU0kgZXJyb3Ig cmVwb3J0OiAweCUwMnhcbiIsCj4gKwkJCQkgICAgICB4ZmVyLT5jbWQsIHdvcmRfY291bnQpOwo+ ICsJCQl4ZmVyLT5zdGF0dXMgPSAtRVBST1RPOwo+ICsJCQlyZXR1cm4gdHJ1ZTsKPiArCQl9Cj4g Kwo+ICsJCWlmICh3b3JkX2NvdW50ID4geGZlci0+bXNnLT5yeF9sZW4pIHsKPiArCQkJRFJNX0RF Vl9FUlJPUigKPiArCQkJCWRldiwKPiArCQkJCSJbJTAyWF0gUmVjZWl2ZSBidWZmZXIgdG9vIHNt YWxsOiAlbHUgKDwgJXUpXG4iLAo+ICsJCQkJeGZlci0+Y21kLCB4ZmVyLT5tc2ctPnJ4X2xlbiwg d29yZF9jb3VudCk7Cj4gKwkJCXJldHVybiB0cnVlOwo+ICsJCX0KPiArCj4gKwkJeGZlci0+cnhf d29yZF9jb3VudCA9IHdvcmRfY291bnQ7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIFNldCB3b3JkX2Nv dW50IGZyb20gcHJldmlvdXMgaGVhZGVyIHJlYWQgKi8KPiArCQl3b3JkX2NvdW50ID0geGZlci0+ cnhfd29yZF9jb3VudDsKPiArCX0KPiArCj4gKwkvKiBJZiBSWCBwYXlsb2FkIGlzIG5vdCB5ZXQg cmVjZWl2ZWQsIHdhaXQgZm9yIGl0ICovCj4gKwlpZiAoIShzdGF0dXMgJiBSWF9QS1RfUEFZTE9B RF9EQVRBX1JDVkQpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwkvKiBSZWFkIHRoZSBSWCBw YXlsb2FkICovCj4gKwl3aGlsZSAod29yZF9jb3VudCA+PSA0KSB7Cj4gKwkJdmFsID0gbndsX2Rz aV9yZWFkKGRzaSwgUlhfUEFZTE9BRCk7Cj4gKwkJcGF5bG9hZFswXSA9ICh2YWwgPj4gMCkgJiAw eGZmOwo+ICsJCXBheWxvYWRbMV0gPSAodmFsID4+IDgpICYgMHhmZjsKPiArCQlwYXlsb2FkWzJd ID0gKHZhbCA+PiAxNikgJiAweGZmOwo+ICsJCXBheWxvYWRbM10gPSAodmFsID4+IDI0KSAmIDB4 ZmY7Cj4gKwkJcGF5bG9hZCArPSA0Owo+ICsJCXhmZXItPnJ4X2xlbiArPSA0Owo+ICsJCXdvcmRf Y291bnQgLT0gNDsKPiArCX0KPiArCj4gKwlpZiAod29yZF9jb3VudCA+IDApIHsKPiArCQl2YWwg PSBud2xfZHNpX3JlYWQoZHNpLCBSWF9QQVlMT0FEKTsKPiArCQlzd2l0Y2ggKHdvcmRfY291bnQp IHsKPiArCQljYXNlIDM6Cj4gKwkJCXBheWxvYWRbMl0gPSAodmFsID4+IDE2KSAmIDB4ZmY7Cj4g KwkJCSsreGZlci0+cnhfbGVuOwo+ICsJCQkvKiBGYWxsIHRocm91Z2ggKi8KPiArCQljYXNlIDI6 Cj4gKwkJCXBheWxvYWRbMV0gPSAodmFsID4+IDgpICYgMHhmZjsKPiArCQkJKyt4ZmVyLT5yeF9s ZW47Cj4gKwkJCS8qIEZhbGwgdGhyb3VnaCAqLwo+ICsJCWNhc2UgMToKPiArCQkJcGF5bG9hZFsw XSA9ICh2YWwgPj4gMCkgJiAweGZmOwo+ICsJCQkrK3hmZXItPnJ4X2xlbjsKPiArCQkJYnJlYWs7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsKPiArCj4g KwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbndsX2RzaV9maW5pc2hfdHJh bnNtaXNzaW9uKHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpLCB1MzIgc3RhdHVzKQo+ICt7Cj4gKwlz dHJ1Y3QgbWlwaV9kc2lfdHJhbnNmZXIgKnhmZXIgPSBkc2ktPnhmZXI7Cj4gKwlib29sIGVuZF9w YWNrZXQgPSBmYWxzZTsKPiArCj4gKwlpZiAoIXhmZXIpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlm IChzdGF0dXMgJiBUWF9GSUZPX09WRkxXKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUl9SQVRFTElNSVRF RChkc2ktPmRldiwgInR4IGZpZm8gb3ZlcmZsb3dcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiAr Cj4gKwlpZiAoc3RhdHVzICYgSFNfVFhfVElNRU9VVCkgewo+ICsJCURSTV9ERVZfRVJST1JfUkFU RUxJTUlURUQoZHNpLT5kZXYsICJIUyB0eCB0aW1lb3V0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9 Cj4gKwo+ICsJaWYgKHhmZXItPmRpcmVjdGlvbiA9PSBEU0lfUEFDS0VUX1NFTkQgJiYgc3RhdHVz ICYgVFhfUEtUX0RPTkUpIHsKPiArCQl4ZmVyLT5zdGF0dXMgPSB4ZmVyLT50eF9sZW47Cj4gKwkJ ZW5kX3BhY2tldCA9IHRydWU7Cj4gKwl9IGVsc2UgaWYgKHN0YXR1cyAmIERQSFlfRElSRUNUSU9O ICYmCj4gKwkJICAgKChzdGF0dXMgJiAoUlhfUEtUX0hEUl9SQ1ZEIHwgUlhfUEtUX1BBWUxPQURf REFUQV9SQ1ZEKSkpKSB7Cj4gKwkJZW5kX3BhY2tldCA9IG53bF9kc2lfcmVhZF9wYWNrZXQoZHNp LCBzdGF0dXMpOwo+ICsJfQo+ICsKPiArCWlmIChlbmRfcGFja2V0KQo+ICsJCWNvbXBsZXRlKCZ4 ZmVyLT5jb21wbGV0ZWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBud2xfZHNpX2JlZ2luX3Ry YW5zbWlzc2lvbihzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSkKPiArewo+ICsJc3RydWN0IG1pcGlf ZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNpLT54ZmVyOwo+ICsJc3RydWN0IG1pcGlfZHNpX3BhY2tl dCAqcGt0ID0gJnhmZXItPnBhY2tldDsKPiArCWNvbnN0IHU4ICpwYXlsb2FkOwo+ICsJc2l6ZV90 IGxlbmd0aDsKPiArCXUxNiB3b3JkX2NvdW50Owo+ICsJdTggaHNfbW9kZTsKPiArCXUzMiB2YWw7 Cj4gKwl1MzIgaHNfd29ya2Fyb3VuZCA9IDA7Cj4gKwo+ICsJLyogU2VuZCB0aGUgcGF5bG9hZCwg aWYgYW55ICovCj4gKwlsZW5ndGggPSBwa3QtPnBheWxvYWRfbGVuZ3RoOwo+ICsJcGF5bG9hZCA9 IHBrdC0+cGF5bG9hZDsKPiArCj4gKwl3aGlsZSAobGVuZ3RoID49IDQpIHsKPiArCQl2YWwgPSBn ZXRfdW5hbGlnbmVkX2xlMzIocGF5bG9hZCk7CgpUaGUgZnJhbWV3b3JrIGRvZXNuJ3QgZ3VhcmFu dGVlIHRoZSBwYXlsb2FkIHRvIGJlIGFsaWduZWQgb24gYSBtdWx0aXBsZQpvZiA0IGJ5dGVzID8K Cj4gKwkJaHNfd29ya2Fyb3VuZCB8PSAhKHZhbCAmIDB4RkZGRjAwKTsKPiArCQlud2xfZHNpX3dy aXRlKGRzaSwgVFhfUEFZTE9BRCwgdmFsKTsKPiArCQlwYXlsb2FkICs9IDQ7Cj4gKwkJbGVuZ3Ro IC09IDQ7Cj4gKwl9Cj4gKwkvKiBTZW5kIHRoZSByZXN0IG9mIHRoZSBwYXlsb2FkICovCj4gKwl2 YWwgPSAwOwo+ICsJc3dpdGNoIChsZW5ndGgpIHsKPiArCWNhc2UgMzoKPiArCQl2YWwgfD0gcGF5 bG9hZFsyXSA8PCAxNjsKPiArCQkvKiBGYWxsIHRocm91Z2ggKi8KPiArCWNhc2UgMjoKPiArCQl2 YWwgfD0gcGF5bG9hZFsxXSA8PCA4Owo+ICsJCWhzX3dvcmthcm91bmQgfD0gISh2YWwgJiAweEZG RkYwMCk7Cj4gKwkJLyogRmFsbCB0aHJvdWdoICovCj4gKwljYXNlIDE6Cj4gKwkJdmFsIHw9IHBh eWxvYWRbMF07Cj4gKwkJbndsX2RzaV93cml0ZShkc2ksIFRYX1BBWUxPQUQsIHZhbCk7Cj4gKwkJ YnJlYWs7Cj4gKwl9Cj4gKwl4ZmVyLT50eF9sZW4gPSBwa3QtPnBheWxvYWRfbGVuZ3RoOwo+ICsK PiArCS8qCj4gKwkgKiBTZW5kIHRoZSBoZWFkZXIKPiArCSAqIGhlYWRlclswXSA9IFZpcnR1YWwg Q2hhbm5lbCArIERhdGEgVHlwZQo+ICsJICogaGVhZGVyWzFdID0gV29yZCBDb3VudCBMU0IgKExQ KSBvciBmaXJzdCBwYXJhbSAoU1ApCj4gKwkgKiBoZWFkZXJbMl0gPSBXb3JkIENvdW50IE1TQiAo TFApIG9yIHNlY29uZCBwYXJhbSAoU1ApCj4gKwkgKi8KPiArCXdvcmRfY291bnQgPSBwa3QtPmhl YWRlclsxXSB8IChwa3QtPmhlYWRlclsyXSA8PCA4KTsKPiArCWlmICgoaHNfd29ya2Fyb3VuZCAm JiBVU0VfRTExNDE4X0hTX01PREVfUVVJUksoZHNpLT5xdWlya3MpKSkgewo+ICsJCURSTV9ERVZf REVCVUdfRFJJVkVSKGRzaS0+ZGV2LAo+ICsJCQkJICAgICAiVXNpbmcgaHMgbW9kZSB3b3JrYXJv dW5kIGZvciBjbWQgMHgleFxuIiwKPiArCQkJCSAgICAgeGZlci0+Y21kKTsKPiArCQloc19tb2Rl ID0gMTsKPiArCX0gZWxzZSB7Cj4gKwkJaHNfbW9kZSA9ICh4ZmVyLT5tc2ctPmZsYWdzICYgTUlQ SV9EU0lfTVNHX1VTRV9MUE0pID8gMCA6IDE7Cj4gKwl9Cj4gKwl2YWwgPSBXQyh3b3JkX2NvdW50 KSB8Cj4gKwkJVFhfVkMoeGZlci0+bXNnLT5jaGFubmVsKSB8Cj4gKwkJVFhfRFQoeGZlci0+bXNn LT50eXBlKSB8Cj4gKwkJSFNfU0VMKGhzX21vZGUpIHwKPiArCQlCVEFfVFgoeGZlci0+bmVlZF9i dGEpOwo+ICsJbndsX2RzaV93cml0ZShkc2ksIFBLVF9DT05UUk9MLCB2YWwpOwo+ICsKPiArCS8q IFNlbmQgcGFja2V0IGNvbW1hbmQgKi8KPiArCW53bF9kc2lfd3JpdGUoZHNpLCBTRU5EX1BBQ0tF VCwgMHgxKTsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgbndsX2RzaV9ob3N0X3RyYW5zZmVy KHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lfaG9zdCwKPiArCQkJCSAgICAgY29uc3Qgc3RydWN0 IG1pcGlfZHNpX21zZyAqbXNnKQo+ICt7Cj4gKwlzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSA9Cj4g KwkJY29udGFpbmVyX29mKGRzaV9ob3N0LCBzdHJ1Y3QgaW14X253bF9kc2ksIGRzaV9ob3N0KTsK PiArCXN0cnVjdCBtaXBpX2RzaV90cmFuc2ZlciB4ZmVyOwo+ICsJc3NpemVfdCByZXQgPSAwOwo+ ICsKPiArCS8qIENyZWF0ZSBwYWNrZXQgdG8gYmUgc2VudCAqLwo+ICsJZHNpLT54ZmVyID0gJnhm ZXI7Cj4gKwlyZXQgPSBtaXBpX2RzaV9jcmVhdGVfcGFja2V0KCZ4ZmVyLnBhY2tldCwgbXNnKTsK PiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZHNpLT54ZmVyID0gTlVMTDsKPiArCQlyZXR1cm4gcmV0 Owo+ICsJfQo+ICsKPiArCWlmICgobXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JF UVVFU1RfMF9QQVJBTSB8fAo+ICsJICAgICBtc2ctPnR5cGUgJiBNSVBJX0RTSV9HRU5FUklDX1JF QURfUkVRVUVTVF8xX1BBUkFNIHx8Cj4gKwkgICAgIG1zZy0+dHlwZSAmIE1JUElfRFNJX0dFTkVS SUNfUkVBRF9SRVFVRVNUXzJfUEFSQU0gfHwKPiArCSAgICAgbXNnLT50eXBlICYgTUlQSV9EU0lf RENTX1JFQUQpICYmCj4gKwkgICAgbXNnLT5yeF9sZW4gPiAwICYmIG1zZy0+cnhfYnVmICE9IE5V TEwpCj4gKwkJeGZlci5kaXJlY3Rpb24gPSBEU0lfUEFDS0VUX1JFQ0VJVkU7Cj4gKwllbHNlCj4g KwkJeGZlci5kaXJlY3Rpb24gPSBEU0lfUEFDS0VUX1NFTkQ7Cj4gKwo+ICsJeGZlci5uZWVkX2J0 YSA9ICh4ZmVyLmRpcmVjdGlvbiA9PSBEU0lfUEFDS0VUX1JFQ0VJVkUpOwo+ICsJeGZlci5uZWVk X2J0YSB8PSAobXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19SRVFfQUNLKSA/IDEgOiAwOwo+ICsJ eGZlci5tc2cgPSBtc2c7Cj4gKwl4ZmVyLnN0YXR1cyA9IC1FVElNRURPVVQ7Cj4gKwl4ZmVyLnJ4 X3dvcmRfY291bnQgPSAwOwo+ICsJeGZlci5yeF9sZW4gPSAwOwo+ICsJeGZlci5jbWQgPSAweDAw Owo+ICsJaWYgKG1zZy0+dHhfbGVuID4gMCkKPiArCQl4ZmVyLmNtZCA9ICgodTggKikobXNnLT50 eF9idWYpKVswXTsKPiArCWluaXRfY29tcGxldGlvbigmeGZlci5jb21wbGV0ZWQpOwo+ICsKPiAr CW53bF9kc2lfZW5hYmxlX3J4X2Nsb2NrKGRzaSk7Cj4gKwo+ICsJLyogSW5pdGlhdGUgdGhlIERT SSBwYWNrZXQgdHJhbnNtaXNpb24gKi8KPiArCW53bF9kc2lfYmVnaW5fdHJhbnNtaXNzaW9uKGRz aSk7Cj4gKwo+ICsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnhmZXIuY29tcGxl dGVkLCBNSVBJX0ZJRk9fVElNRU9VVCkpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRzaV9ob3N0LT5k ZXYsICJbJTAyWF0gRFNJIHRyYW5zZmVyIHRpbWVkIG91dFxuIiwKPiArCQkJICAgICAgeGZlci5j bWQpOwo+ICsJCXJldCA9IC1FVElNRURPVVQ7Cj4gKwl9IGVsc2Ugewo+ICsJCXJldCA9IHhmZXIu c3RhdHVzOwo+ICsJfQo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnJ4X2VzY19j bGspOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2NvbnN0IHN0cnVjdCBtaXBpX2Rz aV9ob3N0X29wcyBud2xfZHNpX2hvc3Rfb3BzID0gewo+ICsJLmF0dGFjaCA9IG53bF9kc2lfaG9z dF9hdHRhY2gsCj4gKwkuZGV0YWNoID0gbndsX2RzaV9ob3N0X2RldGFjaCwKPiArCS50cmFuc2Zl ciA9IG53bF9kc2lfaG9zdF90cmFuc2ZlciwKPiArfTsKPiArCj4gK2lycXJldHVybl90IG53bF9k c2lfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKPiArewo+ICsJdTMyIGlycV9zdGF0 dXM7Cj4gKwlzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSA9IGRhdGE7Cj4gKwo+ICsJaXJxX3N0YXR1 cyA9IG53bF9kc2lfcmVhZChkc2ksIElSUV9TVEFUVVMpOwo+ICsKPiArCWlmIChpcnFfc3RhdHVz ICYgVFhfUEtUX0RPTkUgfHwgaXJxX3N0YXR1cyAmIFJYX1BLVF9IRFJfUkNWRCB8fAo+ICsJICAg IGlycV9zdGF0dXMgJiBSWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQpCj4gKwkJbndsX2RzaV9maW5p c2hfdHJhbnNtaXNzaW9uKGRzaSwgaXJxX3N0YXR1cyk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5E TEVEOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKG53bF9kc2lfaXJxX2hhbmRsZXIpOwo+ICsK PiAraW50IG53bF9kc2lfZW5hYmxlKHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpKQo+ICt7Cj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKPiArCXVuaW9uIHBoeV9jb25maWd1cmVfb3B0 cyAqcGh5X2NmZyA9ICZkc2ktPnBoeV9jZmc7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICghZHNp LT5sYW5lcykgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiTmVlZCBEU0kgbGFuZXM6ICVkXG4i LCBkc2ktPmxhbmVzKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXQgPSBw aHlfaW5pdChkc2ktPnBoeSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1Io ZGV2LCAiRmFpbGVkIHRvIGluaXQgRFNJIHBoeTogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJl dDsKPiArCX0KPiArCj4gKwlyZXQgPSBwaHlfY29uZmlndXJlKGRzaS0+cGh5LCBwaHlfY2ZnKTsK PiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gY29u ZmlndXJlIERTSSBwaHk6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ ICsJcmV0ID0gbndsX2RzaV9lbmFibGVfdHhfY2xvY2soZHNpKTsKPiArCWlmIChyZXQgPCAwKSB7 Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHR4IGNsb2NrOiAlZFxu IiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IG53bF9kc2lfY29u ZmlnX2hvc3QoZHNpKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYs ICJGYWlsZWQgdG8gc2V0IHVwIERTSTogJWQiLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gbndsX2RzaV9jb25maWdfZHBpKGRzaSk7Cj4gKwlpZiAocmV0IDwgMCkg ewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldCB1cCBEUEk6ICVkIiwgcmV0 KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IHBoeV9wb3dlcl9vbihkc2kt PnBoeSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIHBvd2VyIG9uIERQSFkgKCVkKVxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ ICsKPiArCW53bF9kc2lfaW5pdF9pbnRlcnJ1cHRzKGRzaSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArRVhQT1JUX1NZTUJPTF9HUEwobndsX2RzaV9lbmFibGUpOwo+ICsKPiAraW50IG53bF9k c2lfZGlzYWJsZShzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSkKPiArewo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gZHNpLT5kZXY7Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRGlz YWJsaW5nIGNsb2NrcyBhbmQgcGh5XG4iKTsKPiArCj4gKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5 KTsKPiArCXBoeV9leGl0KGRzaS0+cGh5KTsKPiArCj4gKwkvKiBEaXNhYmxpbmcgdGhlIGNsb2Nr IGJlZm9yZSB0aGUgcGh5IGJyZWFrcyBlbmFibGluZyBkc2kgYWdhaW4gKi8KPiArCWNsa19kaXNh YmxlX3VucHJlcGFyZShkc2ktPnR4X2VzY19jbGspOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0xfR1BMKG53bF9kc2lfZGlzYWJsZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvaW14LW53bC9ud2wtZHNpLmggYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL2lteC1ud2wvbndsLWRzaS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAuLjdiY2Y4MDQ4NDNlMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2lteC1ud2wvbndsLWRzaS5oCj4gQEAgLTAsMCArMSwxMTEgQEAKPiArLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovCj4gKy8qCj4gKyAqIGkuTVg4IE5X TCBNSVBJIERTSSBob3N0IGRyaXZlcgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQ Cj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20gU1BDCj4gKyAqLwo+ICsjaWZuZGVmIF9f TldMX0RTSV9IX18KPiArI2RlZmluZSBfX05XTF9EU0lfSF9fCj4gKwo+ICsjaW5jbHVkZSA8ZHJt L2RybV9taXBpX2RzaS5oPgo+ICsKPiArLyogRFNJIEhPU1QgcmVnaXN0ZXJzICovCj4gKyNkZWZp bmUgQ0ZHX05VTV9MQU5FUwkJCTB4MAoKU29tZSBvZiB0aGUgcmVnaXN0ZXIgbmFtZXMgYXJlIHF1 aXRlIHByb25lIHRvIG5hbWVzcGFjZSBjbGFzaGVzLiBJCnJlY29tbWVuZCBwcmVmaXhpbmcgdGhl bSBhbGwgd2l0aCBOV0xfRFNJXy4KCj4gKyNkZWZpbmUgQ0ZHX05PTkNPTlRJTlVPVVNfQ0xLCQkw eDQKPiArI2RlZmluZSBDRkdfVF9QUkUJCQkweDgKPiArI2RlZmluZSBDRkdfVF9QT1NUCQkJMHhj Cj4gKyNkZWZpbmUgQ0ZHX1RYX0dBUAkJCTB4MTAKPiArI2RlZmluZSBDRkdfQVVUT0lOU0VSVF9F T1RQCQkweDE0Cj4gKyNkZWZpbmUgQ0ZHX0VYVFJBX0NNRFNfQUZURVJfRU9UUAkweDE4Cj4gKyNk ZWZpbmUgQ0ZHX0hUWF9UT19DT1VOVAkJMHgxYwo+ICsjZGVmaW5lIENGR19MUlhfSF9UT19DT1VO VAkJMHgyMAo+ICsjZGVmaW5lIENGR19CVEFfSF9UT19DT1VOVAkJMHgyNAo+ICsjZGVmaW5lIENG R19UV0FLRVVQCQkJMHgyOAo+ICsjZGVmaW5lIENGR19TVEFUVVNfT1VUCQkJMHgyYwo+ICsjZGVm aW5lIFJYX0VSUk9SX1NUQVRVUwkJCTB4MzAKPiArCj4gKy8qIERTSSBEUEkgcmVnaXN0ZXJzICov Cj4gKyNkZWZpbmUgUElYRUxfUEFZTE9BRF9TSVpFCQkweDIwMAo+ICsjZGVmaW5lIFBJWEVMX0ZJ Rk9fU0VORF9MRVZFTAkJMHgyMDQKPiArI2RlZmluZSBJTlRFUkZBQ0VfQ09MT1JfQ09ESU5HCQkw eDIwOAo+ICsjZGVmaW5lIFBJWEVMX0ZPUk1BVAkJCTB4MjBjCj4gKyNkZWZpbmUgVlNZTkNfUE9M QVJJVFkJCQkweDIxMAo+ICsjZGVmaW5lIFZTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1cJMAo+ICsj ZGVmaW5lIFZTWU5DX1BPTEFSSVRZX0FDVElWRV9ISUdICUJJVCgxKQo+ICsKPiArI2RlZmluZSBI U1lOQ19QT0xBUklUWQkJCTB4MjE0Cj4gKyNkZWZpbmUgSFNZTkNfUE9MQVJJVFlfQUNUSVZFX0xP VwkwCj4gKyNkZWZpbmUgSFNZTkNfUE9MQVJJVFlfQUNUSVZFX0hJR0gJQklUKDEpCj4gKwo+ICsj ZGVmaW5lIFZJREVPX01PREUJCQkweDIxOAo+ICsjZGVmaW5lIEhGUAkJCQkweDIxYwo+ICsjZGVm aW5lIEhCUAkJCQkweDIyMAo+ICsjZGVmaW5lIEhTQQkJCQkweDIyNAo+ICsjZGVmaW5lIEVOQUJM RV9NVUxUX1BLVFMJCTB4MjI4Cj4gKyNkZWZpbmUgVkJQCQkJCTB4MjJjCj4gKyNkZWZpbmUgVkZQ CQkJCTB4MjMwCj4gKyNkZWZpbmUgQkxMUF9NT0RFCQkJMHgyMzQKPiArI2RlZmluZSBVU0VfTlVM TF9QS1RfQkxMUAkJMHgyMzgKPiArI2RlZmluZSBWQUNUSVZFCQkJCTB4MjNjCj4gKyNkZWZpbmUg VkMJCQkJMHgyNDAKPiArCj4gKy8qIERTSSBBUEIgUEtUIGNvbnRyb2wgKi8KPiArI2RlZmluZSBU WF9QQVlMT0FECQkJMHgyODAKPiArI2RlZmluZSBQS1RfQ09OVFJPTAkJCTB4Mjg0Cj4gKyNkZWZp bmUgU0VORF9QQUNLRVQJCQkweDI4OAo+ICsjZGVmaW5lIFBLVF9TVEFUVVMJCQkweDI4Ywo+ICsj ZGVmaW5lIFBLVF9GSUZPX1dSX0xFVkVMCQkweDI5MAo+ICsjZGVmaW5lIFBLVF9GSUZPX1JEX0xF VkVMCQkweDI5NAo+ICsjZGVmaW5lIFJYX1BBWUxPQUQJCQkweDI5OAo+ICsjZGVmaW5lIFJYX1BL VF9IRUFERVIJCQkweDI5Ywo+ICsKPiArLyogRFNJIElSUSBoYW5kbGluZyAqLwo+ICsjZGVmaW5l IElSUV9TVEFUVVMJCQkweDJhMAo+ICsjZGVmaW5lIFNNX05PVF9JRExFCQkJQklUKDApCj4gKyNk ZWZpbmUgVFhfUEtUX0RPTkUJCQlCSVQoMSkKPiArI2RlZmluZSBEUEhZX0RJUkVDVElPTgkJCUJJ VCgyKQo+ICsjZGVmaW5lIFRYX0ZJRk9fT1ZGTFcJCQlCSVQoMykKPiArI2RlZmluZSBUWF9GSUZP X1VERkxXCQkJQklUKDQpCj4gKyNkZWZpbmUgUlhfRklGT19PVkZMVwkJCUJJVCg1KQo+ICsjZGVm aW5lIFJYX0ZJRk9fVURGTFcJCQlCSVQoNikKPiArI2RlZmluZSBSWF9QS1RfSERSX1JDVkQJCQlC SVQoNykKPiArI2RlZmluZSBSWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQJQklUKDgpCj4gKyNkZWZp bmUgQlRBX1RJTUVPVVQJCQlCSVQoMjkpCj4gKyNkZWZpbmUgTFBfUlhfVElNRU9VVAkJCUJJVCgz MCkKPiArI2RlZmluZSBIU19UWF9USU1FT1VUCQkJQklUKDMxKQo+ICsKPiArI2RlZmluZSBJUlFf U1RBVFVTMgkJCTB4MmE0Cj4gKyNkZWZpbmUgU0lOR0xFX0JJVF9FQ0NfRVJSCQlCSVQoMCkKPiAr I2RlZmluZSBNVUxUSV9CSVRfRUNDX0VSUgkJQklUKDEpCj4gKyNkZWZpbmUgQ1JDX0VSUgkJCQlC SVQoMikKPiArCj4gKyNkZWZpbmUgSVJRX01BU0sJCQkweDJhOAo+ICsjZGVmaW5lIFNNX05PVF9J RExFX01BU0sJCUJJVCgwKQo+ICsjZGVmaW5lIFRYX1BLVF9ET05FX01BU0sJCUJJVCgxKQo+ICsj ZGVmaW5lIERQSFlfRElSRUNUSU9OX01BU0sJCUJJVCgyKQo+ICsjZGVmaW5lIFRYX0ZJRk9fT1ZG TFdfTUFTSwkJQklUKDMpCj4gKyNkZWZpbmUgVFhfRklGT19VREZMV19NQVNLCQlCSVQoNCkKPiAr I2RlZmluZSBSWF9GSUZPX09WRkxXX01BU0sJCUJJVCg1KQo+ICsjZGVmaW5lIFJYX0ZJRk9fVURG TFdfTUFTSwkJQklUKDYpCj4gKyNkZWZpbmUgUlhfUEtUX0hEUl9SQ1ZEX01BU0sJCUJJVCg3KQo+ ICsjZGVmaW5lIFJYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRF9NQVNLCUJJVCg4KQo+ICsjZGVmaW5l IEJUQV9USU1FT1VUX01BU0sJCUJJVCgyOSkKPiArI2RlZmluZSBMUF9SWF9USU1FT1VUX01BU0sJ CUJJVCgzMCkKPiArI2RlZmluZSBIU19UWF9USU1FT1VUX01BU0sJCUJJVCgzMSkKPiArCj4gKyNk ZWZpbmUgSVJRX01BU0syCQkJMHgyYWMKPiArI2RlZmluZSBTSU5HTEVfQklUX0VDQ19FUlJfTUFT SwkJQklUKDApCj4gKyNkZWZpbmUgTVVMVElfQklUX0VDQ19FUlJfTUFTSwkJQklUKDEpCj4gKyNk ZWZpbmUgQ1JDX0VSUl9NQVNLCQkJQklUKDIpCj4gKwo+ICtleHRlcm4gY29uc3Qgc3RydWN0IG1p cGlfZHNpX2hvc3Rfb3BzIG53bF9kc2lfaG9zdF9vcHM7Cj4gKwo+ICtpcnFyZXR1cm5fdCBud2xf ZHNpX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpOwo+ICtpbnQgbndsX2RzaV9lbmFi bGUoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpOwo+ICtpbnQgbndsX2RzaV9kaXNhYmxlKHN0cnVj dCBpbXhfbndsX2RzaSAqZHNpKTsKPiAraW50IG53bF9kc2lfZ2V0X2RwaHlfcGFyYW1zKHN0cnVj dCBpbXhfbndsX2RzaSAqZHNpLAo+ICsJCQkgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUsCj4gKwkJCSAgICB1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgKnBoeV9vcHRzKTsK PiArCj4gKyNlbmRpZiAvKiBfX05XTF9EU0lfSF9fICovCgotLSAKUmVnYXJkcywKCkxhdXJlbnQg UGluY2hhcnQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs