From mboxrd@z Thu Jan 1 00:00:00 1970 From: CK Hu Subject: Re: [v3 2/3] drm/mediatek: separate mipi_tx to different file Date: Mon, 20 May 2019 10:48:22 +0800 Message-ID: <1558320502.19121.2.camel@mtksdaap41> References: <20190518082227.14507-1-jitao.shi@mediatek.com> <20190518082227.14507-3-jitao.shi@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190518082227.14507-3-jitao.shi@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jitao Shi Cc: Mark Rutland , devicetree@vger.kernel.org, David Airlie , stonea168@163.com, dri-devel@lists.freedesktop.org, yingjoe.chen@mediatek.com, Ajay Kumar , Vincent Palatin , cawa.cheng@mediatek.com, Russell King , Thierry Reding , linux-pwm@vger.kernel.org, Sascha Hauer , Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Andy Yan , Matthias Brugger , eddie.huang@mediatek.com, linux-arm-kernel@lists.infradead.org, Rahul Sharma , srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Kumar Gala , Sean Paul List-Id: linux-mediatek@lists.infradead.org SGksIEppdGFvOgoKT24gU2F0LCAyMDE5LTA1LTE4IGF0IDE2OjIyICswODAwLCBKaXRhbyBTaGkg d3JvdGU6Cj4gRGlmZmVyZW50IElDIGhhcyBkaWZmZXJlbnQgbWlwaV90eCBzZXR0aW5nIG9mIGRz aS4KPiBUaGlzIHBhdGNoIHNlcGFyYXRlcyB0aGUgbWlwaV90eCBoYXJkd2FyZSByZWxhdGUgcGFy dCBmb3IgbXQ4MTczLgoKVGhpcyBwYXRjaCBsb29rcyBnb29kIHRvIG1lIGV4Y2VwdCB0aGUgbGFz dCBibGFuayBsaW5lLCBJJ2xsIHJlbW92ZSBpdApiZWZvcmUgSSBhcHBseSB0aGlzIHBhdGNoLgoK UmV2aWV3ZWQtYnk6IENLIEh1IDxjay5odUBtZWRpYXRlay5jb20+Cgo+IAo+IFNpZ25lZC1vZmYt Ynk6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMgICAgICAgIHwgMzQyICsrLS0tLS0tLS0tLS0t LS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguaCAgICAgICAgfCAg NDkgKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX21pcGlfdHguYyB8 IDI4OSArKysrKysrKysrKysrKysKPiAgNCBmaWxlcyBjaGFuZ2VkLCAzNjIgaW5zZXJ0aW9ucygr KSwgMzE5IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19taXBpX3R4LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX21pcGlfdHguYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv TWFrZWZpbGUKPiBpbmRleCA4MmFlNDljNjQyMjEuLjJjOGRlMWY1YTVlZSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvTWFrZWZpbGUKPiBAQCAtMTIsNiArMTIsNyBAQCBtZWRpYXRlay1kcm0teSA6 PSBtdGtfZGlzcF9jb2xvci5vIFwKPiAgCQkgIG10a19kcm1fcGxhbmUubyBcCj4gIAkJICBtdGtf ZHNpLm8gXAo+ICAJCSAgbXRrX21pcGlfdHgubyBcCj4gKwkJICBtdGtfbXQ4MTczX21pcGlfdHgu byBcCj4gIAkJICBtdGtfZHBpLm8KPiAgCj4gIG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9 IG1lZGlhdGVrLWRybS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfbWlwaV90eC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMKPiBp bmRleCA5MGU5MTMxMDg5NTAuLjQ2YmMwMmNmZTg1YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfbWlwaV90eC5jCj4gQEAgLTExLDI5MiArMTEsMzkgQEAKPiAgICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAgICovCj4gIAo+IC0jaW5jbHVk ZSA8bGludXgvY2xrLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KPiAtI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pby5oPgo+IC0jaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiAtI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+IC0jaW5jbHVkZSA8bGludXgvcGh5L3Bo eS5oPgo+IC0KPiAtI2RlZmluZSBNSVBJVFhfRFNJX0NPTgkJMHgwMAo+IC0jZGVmaW5lIFJHX0RT SV9MRE9DT1JFX0VOCQlCSVQoMCkKPiAtI2RlZmluZSBSR19EU0lfQ0tHX0xET09VVF9FTgkJQklU KDEpCj4gLSNkZWZpbmUgUkdfRFNJX0JDTEtfU0VMCQkJKDMgPDwgMikKPiAtI2RlZmluZSBSR19E U0lfTERfSURYX1NFTAkJKDcgPDwgNCkKPiAtI2RlZmluZSBSR19EU0lfUEhZQ0xLX1NFTAkJKDIg PDwgOCkKPiAtI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFfU0VMCQlCSVQoMTApCj4gLSNkZWZp bmUgUkdfRFNJX0xQVFhfQ0xNUF9FTgkJQklUKDExKQo+IC0KPiAtI2RlZmluZSBNSVBJVFhfRFNJ X0NMT0NLX0xBTkUJMHgwNAo+IC0jZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMAkweDA4Cj4g LSNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUxCTB4MGMKPiAtI2RlZmluZSBNSVBJVFhfRFNJ X0RBVEFfTEFORTIJMHgxMAo+IC0jZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMwkweDE0Cj4g LSNkZWZpbmUgUkdfRFNJX0xOVHhfTERPT1VUX0VOCQlCSVQoMCkKPiAtI2RlZmluZSBSR19EU0lf TE5UeF9DS0xBTkVfRU4JCUJJVCgxKQo+IC0jZGVmaW5lIFJHX0RTSV9MTlR4X0xQVFhfSVBMVVMx CQlCSVQoMikKPiAtI2RlZmluZSBSR19EU0lfTE5UeF9MUFRYX0lQTFVTMgkJQklUKDMpCj4gLSNk ZWZpbmUgUkdfRFNJX0xOVHhfTFBUWF9JTUlOVVMJCUJJVCg0KQo+IC0jZGVmaW5lIFJHX0RTSV9M TlR4X0xQQ0RfSVBMVVMJCUJJVCg1KQo+IC0jZGVmaW5lIFJHX0RTSV9MTlR4X0xQQ0RfSU1JTlVT CQlCSVQoNikKPiAtI2RlZmluZSBSR19EU0lfTE5UeF9SVF9DT0RFCQkoMHhmIDw8IDgpCj4gLQo+ IC0jZGVmaW5lIE1JUElUWF9EU0lfVE9QX0NPTgkweDQwCj4gLSNkZWZpbmUgUkdfRFNJX0xOVF9J TlRSX0VOCQlCSVQoMCkKPiAtI2RlZmluZSBSR19EU0lfTE5UX0hTX0JJQVNfRU4JCUJJVCgxKQo+ IC0jZGVmaW5lIFJHX0RTSV9MTlRfSU1QX0NBTF9FTgkJQklUKDIpCj4gLSNkZWZpbmUgUkdfRFNJ X0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCj4gLSNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0NP REUJCSgweGYgPDwgNCkKPiAtI2RlZmluZSBSR19EU0lfTE5UX0FJT19TRUwJCSg3IDw8IDgpCj4g LSNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlCSVQoMTEpCj4gLSNkZWZpbmUgUkdfRFNJ X0RFQlVHX0lOUFVUX0VOCQlCSVQoMTIpCj4gLSNkZWZpbmUgUkdfRFNJX1BSRVNFUlZFCQkJKDcg PDwgMTMpCj4gLQo+IC0jZGVmaW5lIE1JUElUWF9EU0lfQkdfQ09OCTB4NDQKPiAtI2RlZmluZSBS R19EU0lfQkdfQ09SRV9FTgkJQklUKDApCj4gLSNkZWZpbmUgUkdfRFNJX0JHX0NLRU4JCQlCSVQo MSkKPiAtI2RlZmluZSBSR19EU0lfQkdfRElWCQkJKDB4MyA8PCAyKQo+IC0jZGVmaW5lIFJHX0RT SV9CR19GQVNUX0NIQVJHRQkJQklUKDQpCj4gLSNkZWZpbmUgUkdfRFNJX1ZPVVRfTVNLCQkJKDB4 M2ZmZmYgPDwgNSkKPiAtI2RlZmluZSBSR19EU0lfVjEyX1NFTAkJCSg3IDw8IDUpCj4gLSNkZWZp bmUgUkdfRFNJX1YxMF9TRUwJCQkoNyA8PCA4KQo+IC0jZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJ CSg3IDw8IDExKQo+IC0jZGVmaW5lIFJHX0RTSV9WMDRfU0VMCQkJKDcgPDwgMTQpCj4gLSNkZWZp bmUgUkdfRFNJX1YwMzJfU0VMCQkJKDcgPDwgMTcpCj4gLSNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJ CQkoNyA8PCAyMCkKPiAtI2RlZmluZSBSR19EU0lfQkdfUjFfVFJJTQkJKDB4ZiA8PCAyNCkKPiAt I2RlZmluZSBSR19EU0lfQkdfUjJfVFJJTQkJKDB4ZiA8PCAyOCkKPiAtCj4gLSNkZWZpbmUgTUlQ SVRYX0RTSV9QTExfQ09OMAkweDUwCj4gLSNkZWZpbmUgUkdfRFNJX01QUExMX1BMTF9FTgkJQklU KDApCj4gLSNkZWZpbmUgUkdfRFNJX01QUExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQo+IC0jZGVm aW5lIFJHX0RTSV9NUFBMTF9QUkVESVYJCSgzIDw8IDEpCj4gLSNkZWZpbmUgUkdfRFNJX01QUExM X1RYRElWMAkJKDMgPDwgMykKPiAtI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1 KQo+IC0jZGVmaW5lIFJHX0RTSV9NUFBMTF9QT1NESVYJCSg3IDw8IDcpCj4gLSNkZWZpbmUgUkdf RFNJX01QUExMX01PTlZDX0VOCQlCSVQoMTApCj4gLSNkZWZpbmUgUkdfRFNJX01QUExMX01PTlJF Rl9FTgkJQklUKDExKQo+IC0jZGVmaW5lIFJHX0RTSV9NUFBMTF9WT0RfRU4JCUJJVCgxMikKPiAt Cj4gLSNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0Cj4gLSNkZWZpbmUgUkdfRFNJX01Q UExMX1NETV9GUkFfRU4JCUJJVCgwKQo+IC0jZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fU1NDX1BI X0lOSVQJQklUKDEpCj4gLSNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfRU4JCUJJVCgyKQo+ IC0jZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fU1NDX1BSRAkoMHhmZmZmIDw8IDE2KQo+IC0KPiAt I2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgKPiAtCj4gLSNkZWZpbmUgTUlQSVRYX0RT SV9QTExfVE9QCTB4NjQKPiAtI2RlZmluZSBSR19EU0lfTVBQTExfUFJFU0VSVkUJCSgweGZmIDw8 IDgpCj4gLQo+IC0jZGVmaW5lIE1JUElUWF9EU0lfUExMX1BXUgkweDY4Cj4gLSNkZWZpbmUgUkdf RFNJX01QUExMX1NETV9QV1JfT04JCUJJVCgwKQo+IC0jZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1f SVNPX0VOCQlCSVQoMSkKPiAtI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9BQ0sJQklUKDgp Cj4gLQo+IC0jZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RSTAkweDgwCj4gLSNkZWZpbmUgU1dfQ1RS TF9FTgkJCUJJVCgwKQo+IC0KPiAtI2RlZmluZSBNSVBJVFhfRFNJX1NXX0NUUkxfQ09OMAkweDg0 Cj4gLSNkZWZpbmUgU1dfTE5UQ19MUFRYX1BSRV9PRQkJQklUKDApCj4gLSNkZWZpbmUgU1dfTE5U Q19MUFRYX09FCQkJQklUKDEpCj4gLSNkZWZpbmUgU1dfTE5UQ19MUFRYX1AJCQlCSVQoMikKPiAt I2RlZmluZSBTV19MTlRDX0xQVFhfTgkJCUJJVCgzKQo+IC0jZGVmaW5lIFNXX0xOVENfSFNUWF9Q UkVfT0UJCUJJVCg0KQo+IC0jZGVmaW5lIFNXX0xOVENfSFNUWF9PRQkJCUJJVCg1KQo+IC0jZGVm aW5lIFNXX0xOVENfSFNUWF9aRVJPQ0xLCQlCSVQoNikKPiAtI2RlZmluZSBTV19MTlQwX0xQVFhf UFJFX09FCQlCSVQoNykKPiAtI2RlZmluZSBTV19MTlQwX0xQVFhfT0UJCQlCSVQoOCkKPiAtI2Rl ZmluZSBTV19MTlQwX0xQVFhfUAkJCUJJVCg5KQo+IC0jZGVmaW5lIFNXX0xOVDBfTFBUWF9OCQkJ QklUKDEwKQo+IC0jZGVmaW5lIFNXX0xOVDBfSFNUWF9QUkVfT0UJCUJJVCgxMSkKPiAtI2RlZmlu ZSBTV19MTlQwX0hTVFhfT0UJCQlCSVQoMTIpCj4gLSNkZWZpbmUgU1dfTE5UMF9MUFJYX0VOCQkJ QklUKDEzKQo+IC0jZGVmaW5lIFNXX0xOVDFfTFBUWF9QUkVfT0UJCUJJVCgxNCkKPiAtI2RlZmlu ZSBTV19MTlQxX0xQVFhfT0UJCQlCSVQoMTUpCj4gLSNkZWZpbmUgU1dfTE5UMV9MUFRYX1AJCQlC SVQoMTYpCj4gLSNkZWZpbmUgU1dfTE5UMV9MUFRYX04JCQlCSVQoMTcpCj4gLSNkZWZpbmUgU1df TE5UMV9IU1RYX1BSRV9PRQkJQklUKDE4KQo+IC0jZGVmaW5lIFNXX0xOVDFfSFNUWF9PRQkJCUJJ VCgxOSkKPiAtI2RlZmluZSBTV19MTlQyX0xQVFhfUFJFX09FCQlCSVQoMjApCj4gLSNkZWZpbmUg U1dfTE5UMl9MUFRYX09FCQkJQklUKDIxKQo+IC0jZGVmaW5lIFNXX0xOVDJfTFBUWF9QCQkJQklU KDIyKQo+IC0jZGVmaW5lIFNXX0xOVDJfTFBUWF9OCQkJQklUKDIzKQo+IC0jZGVmaW5lIFNXX0xO VDJfSFNUWF9QUkVfT0UJCUJJVCgyNCkKPiAtI2RlZmluZSBTV19MTlQyX0hTVFhfT0UJCQlCSVQo MjUpCj4gLQo+IC1zdHJ1Y3QgbXRrX21pcGl0eF9kYXRhIHsKPiAtCWNvbnN0IHUzMiBtcHBsbF9w cmVzZXJ2ZTsKPiAtfTsKPiAtCj4gLXN0cnVjdCBtdGtfbWlwaV90eCB7Cj4gLQlzdHJ1Y3QgZGV2 aWNlICpkZXY7Cj4gLQl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gLQl1MzIgZGF0YV9yYXRlOwo+IC0J Y29uc3Qgc3RydWN0IG10a19taXBpdHhfZGF0YSAqZHJpdmVyX2RhdGE7Cj4gLQlzdHJ1Y3QgY2xr X2h3IHBsbF9odzsKPiAtCXN0cnVjdCBjbGsgKnBsbDsKPiAtfTsKPiArI2luY2x1ZGUgIm10a19t aXBpX3R4LmgiCj4gIAo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfbWlwaV90eCAqbXRrX21p cGlfdHhfZnJvbV9jbGtfaHcoc3RydWN0IGNsa19odyAqaHcpCj4gK2lubGluZSBzdHJ1Y3QgbXRr X21pcGlfdHggKm10a19taXBpX3R4X2Zyb21fY2xrX2h3KHN0cnVjdCBjbGtfaHcgKmh3KQo+ICB7 Cj4gIAlyZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgbXRrX21pcGlfdHgsIHBsbF9odyk7 Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIG10a19taXBpX3R4X2NsZWFyX2JpdHMoc3RydWN0IG10 a19taXBpX3R4ICptaXBpX3R4LCB1MzIgb2Zmc2V0LAo+IC0JCQkJICAgdTMyIGJpdHMpCj4gK3Zv aWQgbXRrX21pcGlfdHhfY2xlYXJfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUz MiBvZmZzZXQsCj4gKwkJCSAgICB1MzIgYml0cykKPiAgewo+ICAJdTMyIHRlbXAgPSByZWFkbCht aXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKPiAgCj4gIAl3cml0ZWwodGVtcCAmIH5iaXRzLCBtaXBp X3R4LT5yZWdzICsgb2Zmc2V0KTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgbXRrX21pcGlfdHhf c2V0X2JpdHMoc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4LCB1MzIgb2Zmc2V0LAo+IC0JCQkJ IHUzMiBiaXRzKQo+ICt2b2lkIG10a19taXBpX3R4X3NldF9iaXRzKHN0cnVjdCBtdGtfbWlwaV90 eCAqbWlwaV90eCwgdTMyIG9mZnNldCwKPiArCQkJICB1MzIgYml0cykKPiAgewo+ICAJdTMyIHRl bXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKPiAgCj4gIAl3cml0ZWwodGVtcCB8 IGJpdHMsIG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBt dGtfbWlwaV90eF91cGRhdGVfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBv ZmZzZXQsCj4gLQkJCQkgICAgdTMyIG1hc2ssIHUzMiBkYXRhKQo+ICt2b2lkIG10a19taXBpX3R4 X3VwZGF0ZV9iaXRzKHN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCwgdTMyIG9mZnNldCwKPiAr CQkJICAgICB1MzIgbWFzaywgdTMyIGRhdGEpCj4gIHsKPiAgCXUzMiB0ZW1wID0gcmVhZGwobWlw aV90eC0+cmVncyArIG9mZnNldCk7Cj4gIAo+ICAJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRh dGEgJiBtYXNrKSwgbWlwaV90eC0+cmVncyArIG9mZnNldCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBp bnQgbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCj4gLXsKPiAtCXN0 cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IG10a19taXBpX3R4X2Zyb21fY2xrX2h3KGh3KTsK PiAtCXU4IHR4ZGl2LCB0eGRpdjAsIHR4ZGl2MTsKPiAtCXU2NCBwY3c7Cj4gLQo+IC0JZGV2X2Ri ZyhtaXBpX3R4LT5kZXYsICJwcmVwYXJlOiAldSBIelxuIiwgbWlwaV90eC0+ZGF0YV9yYXRlKTsK PiAtCj4gLQlpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAwMCkgewo+IC0JCXR4ZGl2 ID0gMTsKPiAtCQl0eGRpdjAgPSAwOwo+IC0JCXR4ZGl2MSA9IDA7Cj4gLQl9IGVsc2UgaWYgKG1p cGlfdHgtPmRhdGFfcmF0ZSA+PSAyNTAwMDAwMDApIHsKPiAtCQl0eGRpdiA9IDI7Cj4gLQkJdHhk aXYwID0gMTsKPiAtCQl0eGRpdjEgPSAwOwo+IC0JfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3Jh dGUgPj0gMTI1MDAwMDAwKSB7Cj4gLQkJdHhkaXYgPSA0Owo+IC0JCXR4ZGl2MCA9IDI7Cj4gLQkJ dHhkaXYxID0gMDsKPiAtCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4gNjIwMDAwMDAp IHsKPiAtCQl0eGRpdiA9IDg7Cj4gLQkJdHhkaXYwID0gMjsKPiAtCQl0eGRpdjEgPSAxOwo+IC0J fSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gNTAwMDAwMDApIHsKPiAtCQl0eGRpdiA9 IDE2Owo+IC0JCXR4ZGl2MCA9IDI7Cj4gLQkJdHhkaXYxID0gMjsKPiAtCX0gZWxzZSB7Cj4gLQkJ cmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlw aV90eCwgTUlQSVRYX0RTSV9CR19DT04sCj4gLQkJCQlSR19EU0lfVk9VVF9NU0sgfAo+IC0JCQkJ UkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTiwKPiAtCQkJCSg0IDw8IDIwKSB8ICg0 IDw8IDE3KSB8ICg0IDw8IDE0KSB8Cj4gLQkJCQkoNCA8PCAxMSkgfCAoNCA8PCA4KSB8ICg0IDw8 IDUpIHwKPiAtCQkJCVJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4pOwo+IC0KPiAt CXVzbGVlcF9yYW5nZSgzMCwgMTAwKTsKPiAtCj4gLQltdGtfbWlwaV90eF91cGRhdGVfYml0cyht aXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCj4gLQkJCQlSR19EU0lfTE5UX0lNUF9DQUxfQ09E RSB8IFJHX0RTSV9MTlRfSFNfQklBU19FTiwKPiAtCQkJCSg4IDw8IDQpIHwgUkdfRFNJX0xOVF9I U19CSUFTX0VOKTsKPiAtCj4gLQltdGtfbWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhf RFNJX0NPTiwKPiAtCQkJICAgICBSR19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9DT1JF X0VOKTsKPiAtCj4gLQltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJ X1BMTF9QV1IsCj4gLQkJCQlSR19EU0lfTVBQTExfU0RNX1BXUl9PTiB8Cj4gLQkJCQlSR19EU0lf TVBQTExfU0RNX0lTT19FTiwKPiAtCQkJCVJHX0RTSV9NUFBMTF9TRE1fUFdSX09OKTsKPiAtCj4g LQltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCj4g LQkJCSAgICAgICBSR19EU0lfTVBQTExfUExMX0VOKTsKPiAtCj4gLQltdGtfbWlwaV90eF91cGRh dGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAo+IC0JCQkJUkdfRFNJX01QUExM X1RYRElWMCB8IFJHX0RTSV9NUFBMTF9UWERJVjEgfAo+IC0JCQkJUkdfRFNJX01QUExMX1BSRURJ ViwKPiAtCQkJCSh0eGRpdjAgPDwgMykgfCAodHhkaXYxIDw8IDUpKTsKPiAtCj4gLQkvKgo+IC0J ICogUExMIFBDVyBjb25maWcKPiAtCSAqIFBDVyBiaXQgMjR+MzAgPSBpbnRlZ2VyIHBhcnQgb2Yg cGN3Cj4gLQkgKiBQQ1cgYml0IDB+MjMgPSBmcmFjdGlvbmFsIHBhcnQgb2YgcGN3Cj4gLQkgKiBw Y3cgPSBkYXRhX1JhdGUqNCp0eGRpdi8oUmVmX2NsayoyKTsKPiAtCSAqIFBvc3QgRElWID00LCBz byBuZWVkIGRhdGFfUmF0ZSo0Cj4gLQkgKiBSZWZfY2xrIGlzIDI2TUh6Cj4gLQkgKi8KPiAtCXBj dyA9IGRpdl91NjQoKCh1NjQpbWlwaV90eC0+ZGF0YV9yYXRlICogMiAqIHR4ZGl2KSA8PCAyNCwK PiAtCQkgICAgICAyNjAwMDAwMCk7Cj4gLQl3cml0ZWwocGN3LCBtaXBpX3R4LT5yZWdzICsgTUlQ SVRYX0RTSV9QTExfQ09OMik7Cj4gLQo+IC0JbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwg TUlQSVRYX0RTSV9QTExfQ09OMSwKPiAtCQkJICAgICBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTik7 Cj4gLQo+IC0JbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09O MCwgUkdfRFNJX01QUExMX1BMTF9FTik7Cj4gLQo+IC0JdXNsZWVwX3JhbmdlKDIwLCAxMDApOwo+ IC0KPiAtCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09O MSwKPiAtCQkJICAgICAgIFJHX0RTSV9NUFBMTF9TRE1fU1NDX0VOKTsKPiAtCj4gLQltdGtfbWlw aV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9UT1AsCj4gLQkJCQlSR19E U0lfTVBQTExfUFJFU0VSVkUsCj4gLQkJCQltaXBpX3R4LT5kcml2ZXJfZGF0YS0+bXBwbGxfcHJl c2VydmUpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBtdGtfbWlw aV90eF9wbGxfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQo+IC17Cj4gLQlzdHJ1Y3QgbXRr X21pcGlfdHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7Cj4gLQo+IC0J ZGV2X2RiZyhtaXBpX3R4LT5kZXYsICJ1bnByZXBhcmVcbiIpOwo+IC0KPiAtCW10a19taXBpX3R4 X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwKPiAtCQkJICAgICAgIFJH X0RTSV9NUFBMTF9QTExfRU4pOwo+IC0KPiAtCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlf dHgsIE1JUElUWF9EU0lfUExMX1RPUCwKPiAtCQkJCVJHX0RTSV9NUFBMTF9QUkVTRVJWRSwgMCk7 Cj4gLQo+IC0JbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExf UFdSLAo+IC0JCQkJUkdfRFNJX01QUExMX1NETV9JU09fRU4gfAo+IC0JCQkJUkdfRFNJX01QUExM X1NETV9QV1JfT04sCj4gLQkJCQlSR19EU0lfTVBQTExfU0RNX0lTT19FTik7Cj4gLQo+IC0JbXRr X21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCj4gLQkJCSAg ICAgICBSR19EU0lfTE5UX0hTX0JJQVNfRU4pOwo+IC0KPiAtCW10a19taXBpX3R4X2NsZWFyX2Jp dHMobWlwaV90eCwgTUlQSVRYX0RTSV9DT04sCj4gLQkJCSAgICAgICBSR19EU0lfQ0tHX0xET09V VF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOKTsKPiAtCj4gLQltdGtfbWlwaV90eF9jbGVhcl9iaXRz KG1pcGlfdHgsIE1JUElUWF9EU0lfQkdfQ09OLAo+IC0JCQkgICAgICAgUkdfRFNJX0JHX0NLRU4g fCBSR19EU0lfQkdfQ09SRV9FTik7Cj4gLQo+IC0JbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBp X3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAo+IC0JCQkgICAgICAgUkdfRFNJX01QUExMX0RJVl9N U0spOwo+IC19Cj4gLQo+IC1zdGF0aWMgbG9uZyBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZShz dHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAo+IC0JCQkJICAgICAgIHVuc2ln bmVkIGxvbmcgKnByYXRlKQo+IC17Cj4gLQlyZXR1cm4gY2xhbXBfdmFsKHJhdGUsIDUwMDAwMDAw LCAxMjUwMDAwMDAwKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBtdGtfbWlwaV90eF9wbGxfc2V0 X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKPiAtCQkJCSAgICB1 bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQo+ICtpbnQgbXRrX21pcGlfdHhfcGxsX3NldF9yYXRl KHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCj4gKwkJCSAgICAgdW5zaWdu ZWQgbG9uZyBwYXJlbnRfcmF0ZSkKPiAgewo+ICAJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4 ID0gbXRrX21pcGlfdHhfZnJvbV9jbGtfaHcoaHcpOwo+ICAKPiBAQCAtMzA3LDM3ICs1NCwxNCBA QCBzdGF0aWMgaW50IG10a19taXBpX3R4X3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywg dW5zaWduZWQgbG9uZyByYXRlLAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyB1bnNp Z25lZCBsb25nIG10a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywK PiAtCQkJCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCj4gK3Vuc2lnbmVkIGxvbmcgbXRr X21pcGlfdHhfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAo+ICsJCQkJCSAgdW5z aWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKPiAgewo+ICAJc3RydWN0IG10a19taXBpX3R4ICptaXBp X3R4ID0gbXRrX21pcGlfdHhfZnJvbV9jbGtfaHcoaHcpOwo+ICAKPiAgCXJldHVybiBtaXBpX3R4 LT5kYXRhX3JhdGU7Cj4gIH0KPiAgCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtdGtf bWlwaV90eF9wbGxfb3BzID0gewo+IC0JLnByZXBhcmUgPSBtdGtfbWlwaV90eF9wbGxfcHJlcGFy ZSwKPiAtCS51bnByZXBhcmUgPSBtdGtfbWlwaV90eF9wbGxfdW5wcmVwYXJlLAo+IC0JLnJvdW5k X3JhdGUgPSBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZSwKPiAtCS5zZXRfcmF0ZSA9IG10a19t aXBpX3R4X3BsbF9zZXRfcmF0ZSwKPiAtCS5yZWNhbGNfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9y ZWNhbGNfcmF0ZSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb25f c2lnbmFsKHN0cnVjdCBwaHkgKnBoeSkKPiAtewo+IC0Jc3RydWN0IG10a19taXBpX3R4ICptaXBp X3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gLQl1MzIgcmVnOwo+IC0KPiAtCWZvciAocmVn ID0gTUlQSVRYX0RTSV9DTE9DS19MQU5FOwo+IC0JICAgICByZWcgPD0gTUlQSVRYX0RTSV9EQVRB X0xBTkUzOyByZWcgKz0gNCkKPiAtCQltdGtfbWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCByZWcs IFJHX0RTSV9MTlR4X0xET09VVF9FTik7Cj4gLQo+IC0JbXRrX21pcGlfdHhfY2xlYXJfYml0cyht aXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCj4gLQkJCSAgICAgICBSR19EU0lfUEFEX1RJRV9M T1dfRU4pOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ICBzdGF0aWMgaW50IG10a19taXBp X3R4X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKPiAgewo+ICAJc3RydWN0IG10a19taXBpX3R4 ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gQEAgLTM0OSwzMCArNzMsMTYgQEAg c3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpCj4gIAkJcmV0 dXJuIHJldDsKPiAgCj4gIAkvKiBFbmFibGUgRFNJIExhbmUgTERPIG91dHB1dHMsIGRpc2FibGUg cGFkIHRpZSBsb3cgKi8KPiAtCW10a19taXBpX3R4X3Bvd2VyX29uX3NpZ25hbChwaHkpOwo+IC0K PiArCW1pcGlfdHgtPmRyaXZlcl9kYXRhLT5taXBpX3R4X2VuYWJsZV9zaWduYWwocGh5KTsKPiAg CXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9wb3dlcl9vZmZf c2lnbmFsKHN0cnVjdCBwaHkgKnBoeSkKPiAtewo+IC0Jc3RydWN0IG10a19taXBpX3R4ICptaXBp X3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gLQl1MzIgcmVnOwo+IC0KPiAtCW10a19taXBp X3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwKPiAtCQkJICAgICBSR19E U0lfUEFEX1RJRV9MT1dfRU4pOwo+IC0KPiAtCWZvciAocmVnID0gTUlQSVRYX0RTSV9DTE9DS19M QU5FOwo+IC0JICAgICByZWcgPD0gTUlQSVRYX0RTSV9EQVRBX0xBTkUzOyByZWcgKz0gNCkKPiAt CQltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIHJlZywgUkdfRFNJX0xOVHhfTERPT1VU X0VOKTsKPiAtfQo+IC0KPiAgc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vZmYoc3RydWN0 IHBoeSAqcGh5KQo+ICB7Cj4gIAlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0 X2RydmRhdGEocGh5KTsKPiAgCj4gIAkvKiBFbmFibGUgcGFkIHRpZSBsb3csIGRpc2FibGUgRFNJ IExhbmUgTERPIG91dHB1dHMgKi8KPiAtCW10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWwocGh5 KTsKPiArCW1pcGlfdHgtPmRyaXZlcl9kYXRhLT5taXBpX3R4X2Rpc2FibGVfc2lnbmFsKHBoeSk7 Cj4gIAo+ICAJLyogRGlzYWJsZSBQTEwgYW5kIHBvd2VyIGRvd24gY29yZSAqLwo+ICAJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKG1pcGlfdHgtPnBsbCk7Cj4gQEAgLTM5MSwxMCArMTAxLDggQEAgc3Rh dGljIGludCBtdGtfbWlwaV90eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ICAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiAgCXN0cnVjdCBtdGtfbWlwaV90 eCAqbWlwaV90eDsKPiAgCXN0cnVjdCByZXNvdXJjZSAqbWVtOwo+IC0Jc3RydWN0IGNsayAqcmVm X2NsazsKPiAgCWNvbnN0IGNoYXIgKnJlZl9jbGtfbmFtZTsKPiAgCXN0cnVjdCBjbGtfaW5pdF9k YXRhIGNsa19pbml0ID0gewo+IC0JCS5vcHMgPSAmbXRrX21pcGlfdHhfcGxsX29wcywKPiAgCQku bnVtX3BhcmVudHMgPSAxLAo+ICAJCS5wYXJlbnRfbmFtZXMgPSAoY29uc3QgY2hhciAqIGNvbnN0 ICopJnJlZl9jbGtfbmFtZSwKPiAgCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfR0FURSwKPiBAQCAt NDA4LDYgKzExNiw3IEBAIHN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiAgCj4gIAltaXBpX3R4LT5k cml2ZXJfZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+ICsKPiAgCW1lbSA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gIAltaXBp X3R4LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKPiAgCWlmIChJU19F UlIobWlwaV90eC0+cmVncykpIHsKPiBAQCAtNDE2LDEzICsxMjUsMTQgQEAgc3RhdGljIGludCBt dGtfbWlwaV90eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJCXJldHVy biByZXQ7Cj4gIAl9Cj4gIAo+IC0JcmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOwo+ IC0JaWYgKElTX0VSUihyZWZfY2xrKSkgewo+IC0JCXJldCA9IFBUUl9FUlIocmVmX2Nsayk7Cj4g KwltaXBpX3R4LT5yZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7Cj4gKwlpZiAoSVNf RVJSKG1pcGlfdHgtPnJlZl9jbGspKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihtaXBpX3R4LT5yZWZf Y2xrKTsKPiAgCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcmVmZXJlbmNlIGNsb2NrOiAl ZFxuIiwgcmV0KTsKPiAgCQlyZXR1cm4gcmV0Owo+ICAJfQo+IC0JcmVmX2Nsa19uYW1lID0gX19j bGtfZ2V0X25hbWUocmVmX2Nsayk7Cj4gKwo+ICsJcmVmX2Nsa19uYW1lID0gX19jbGtfZ2V0X25h bWUobWlwaV90eC0+cmVmX2Nsayk7Cj4gIAo+ICAJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJp bmcoZGV2LT5vZl9ub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwKPiAgCQkJCSAgICAgICZjbGtf aW5pdC5uYW1lKTsKPiBAQCAtNDMxLDYgKzE0MSw4IEBAIHN0YXRpYyBpbnQgbXRrX21pcGlfdHhf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgCQlyZXR1cm4gcmV0Owo+ICAJ fQo+ICAKPiArCWNsa19pbml0Lm9wcyA9IG1pcGlfdHgtPmRyaXZlcl9kYXRhLT5taXBpX3R4X2Ns a19vcHM7Cj4gKwo+ICAJbWlwaV90eC0+cGxsX2h3LmluaXQgPSAmY2xrX2luaXQ7Cj4gIAltaXBp X3R4LT5wbGwgPSBkZXZtX2Nsa19yZWdpc3RlcihkZXYsICZtaXBpX3R4LT5wbGxfaHcpOwo+ICAJ aWYgKElTX0VSUihtaXBpX3R4LT5wbGwpKSB7Cj4gQEAgLTQ2NSwyMCArMTc3LDEyIEBAIHN0YXRp YyBpbnQgbXRrX21pcGlfdHhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g IAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfbWlwaXR4X2Rh dGEgbXQyNzAxX21pcGl0eF9kYXRhID0gewo+IC0JLm1wcGxsX3ByZXNlcnZlID0gKDMgPDwgOCkK PiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX21pcGl0eF9kYXRhIG10ODE3M19t aXBpdHhfZGF0YSA9IHsKPiAtCS5tcHBsbF9wcmVzZXJ2ZSA9ICgwIDw8IDgpCj4gLX07Cj4gLQo+ ICBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfbWlwaV90eF9tYXRjaFtdID0g ewo+ICAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDI3MDEtbWlwaS10eCIsCj4gIAkgIC5k YXRhID0gJm10MjcwMV9taXBpdHhfZGF0YSB9LAo+ICAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxtdDgxNzMtbWlwaS10eCIsCj4gIAkgIC5kYXRhID0gJm10ODE3M19taXBpdHhfZGF0YSB9LAo+ IC0Je30sCj4gKwl7IH0sCj4gIH07Cj4gIAo+ICBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19t aXBpX3R4X2RyaXZlciA9IHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19taXBpX3R4LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi42NjA3MjY5MjQ5OTIK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBp X3R4LmgKPiBAQCAtMCwwICsxLDQ5IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBNZWRpYVRlayBJbmMuCj4g KyAqIEF1dGhvcjogSml0YW8gU2hpIDxqaXRhby5zaGlAbWVkaWF0ZWsuY29tPgo+ICsgKi8KPiAr Cj4gKyNpZm5kZWYgX01US19NSVBJX1RYX0gKPiArI2RlZmluZSBfTVRLX01JUElfVFhfSAo+ICsK PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVy Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4K PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNl Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxp bnV4L3BoeS9waHkuaD4KPiArCj4gK3N0cnVjdCBtdGtfbWlwaXR4X2RhdGEgewo+ICsJY29uc3Qg dTMyIG1wcGxsX3ByZXNlcnZlOwo+ICsJY29uc3Qgc3RydWN0IGNsa19vcHMgKm1pcGlfdHhfY2xr X29wczsKPiArCXZvaWQgKCptaXBpX3R4X2VuYWJsZV9zaWduYWwpKHN0cnVjdCBwaHkgKnBoeSk7 Cj4gKwl2b2lkICgqbWlwaV90eF9kaXNhYmxlX3NpZ25hbCkoc3RydWN0IHBoeSAqcGh5KTsKPiAr fTsKPiArCj4gK3N0cnVjdCBtdGtfbWlwaV90eCB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4g Kwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gKwl1MzIgZGF0YV9yYXRlOwo+ICsJc3RydWN0IGNsayAq cmVmX2NsazsKPiArCWNvbnN0IHN0cnVjdCBtdGtfbWlwaXR4X2RhdGEgKmRyaXZlcl9kYXRhOwo+ ICsJc3RydWN0IGNsa19odyBwbGxfaHc7Cj4gKwlzdHJ1Y3QgY2xrICpwbGw7Cj4gK307Cj4gKwo+ ICtzdHJ1Y3QgbXRrX21pcGlfdHggKm10a19taXBpX3R4X2Zyb21fY2xrX2h3KHN0cnVjdCBjbGtf aHcgKmh3KTsKPiArdm9pZCBtdGtfbWlwaV90eF9jbGVhcl9iaXRzKHN0cnVjdCBtdGtfbWlwaV90 eCAqbWlwaV90eCwgdTMyIG9mZnNldCwgdTMyIGJpdHMpOwo+ICt2b2lkIG10a19taXBpX3R4X3Nl dF9iaXRzKHN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCwgdTMyIG9mZnNldCwgdTMyIGJpdHMp Owo+ICt2b2lkIG10a19taXBpX3R4X3VwZGF0ZV9iaXRzKHN0cnVjdCBtdGtfbWlwaV90eCAqbWlw aV90eCwgdTMyIG9mZnNldCwgdTMyIG1hc2ssCj4gKwkJCSAgICAgdTMyIGRhdGEpOwo+ICtpbnQg bXRrX21pcGlfdHhfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25n IHJhdGUsCj4gKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7Cj4gK3Vuc2lnbmVk IGxvbmcgbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAo+ICsJ CQkJCSAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7Cj4gKwo+ICtleHRlcm4gY29uc3Qgc3Ry dWN0IG10a19taXBpdHhfZGF0YSBtdDI3MDFfbWlwaXR4X2RhdGE7Cj4gK2V4dGVybiBjb25zdCBz dHJ1Y3QgbXRrX21pcGl0eF9kYXRhIG10ODE3M19taXBpdHhfZGF0YTsKPiArCj4gKyNlbmRpZgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19taXBpX3R4 LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19taXBpX3R4LmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTVlZjBjNTI1MmI5Cj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX21p cGlfdHguYwo+IEBAIC0wLDAgKzEsMjg5IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBNZWRpYVRlayBJbmMuCj4g KyAqIEF1dGhvcjogaml0YW8uc2hpIDxqaXRhby5zaGlAbWVkaWF0ZWsuY29tPgo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlICJtdGtfbWlwaV90eC5oIgo+ICsKPiArI2RlZmluZSBNSVBJVFhfRFNJX0NP TgkJMHgwMAo+ICsjZGVmaW5lIFJHX0RTSV9MRE9DT1JFX0VOCQlCSVQoMCkKPiArI2RlZmluZSBS R19EU0lfQ0tHX0xET09VVF9FTgkJQklUKDEpCj4gKyNkZWZpbmUgUkdfRFNJX0JDTEtfU0VMCQkJ KDMgPDwgMikKPiArI2RlZmluZSBSR19EU0lfTERfSURYX1NFTAkJKDcgPDwgNCkKPiArI2RlZmlu ZSBSR19EU0lfUEhZQ0xLX1NFTAkJKDIgPDwgOCkKPiArI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZS RVFfU0VMCQlCSVQoMTApCj4gKyNkZWZpbmUgUkdfRFNJX0xQVFhfQ0xNUF9FTgkJQklUKDExKQo+ ICsKPiArI2RlZmluZSBNSVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAo+ICsjZGVmaW5lIE1JUElU WF9EU0lfREFUQV9MQU5FMAkweDA4Cj4gKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUxCTB4 MGMKPiArI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTIJMHgxMAo+ICsjZGVmaW5lIE1JUElU WF9EU0lfREFUQV9MQU5FMwkweDE0Cj4gKyNkZWZpbmUgUkdfRFNJX0xOVHhfTERPT1VUX0VOCQlC SVQoMCkKPiArI2RlZmluZSBSR19EU0lfTE5UeF9DS0xBTkVfRU4JCUJJVCgxKQo+ICsjZGVmaW5l IFJHX0RTSV9MTlR4X0xQVFhfSVBMVVMxCQlCSVQoMikKPiArI2RlZmluZSBSR19EU0lfTE5UeF9M UFRYX0lQTFVTMgkJQklUKDMpCj4gKyNkZWZpbmUgUkdfRFNJX0xOVHhfTFBUWF9JTUlOVVMJCUJJ VCg0KQo+ICsjZGVmaW5lIFJHX0RTSV9MTlR4X0xQQ0RfSVBMVVMJCUJJVCg1KQo+ICsjZGVmaW5l IFJHX0RTSV9MTlR4X0xQQ0RfSU1JTlVTCQlCSVQoNikKPiArI2RlZmluZSBSR19EU0lfTE5UeF9S VF9DT0RFCQkoMHhmIDw8IDgpCj4gKwo+ICsjZGVmaW5lIE1JUElUWF9EU0lfVE9QX0NPTgkweDQw Cj4gKyNkZWZpbmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkKPiArI2RlZmluZSBSR19EU0lf TE5UX0hTX0JJQVNfRU4JCUJJVCgxKQo+ICsjZGVmaW5lIFJHX0RTSV9MTlRfSU1QX0NBTF9FTgkJ QklUKDIpCj4gKyNkZWZpbmUgUkdfRFNJX0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCj4gKyNkZWZp bmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUJCSgweGYgPDwgNCkKPiArI2RlZmluZSBSR19EU0lf TE5UX0FJT19TRUwJCSg3IDw8IDgpCj4gKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlC SVQoMTEpCj4gKyNkZWZpbmUgUkdfRFNJX0RFQlVHX0lOUFVUX0VOCQlCSVQoMTIpCj4gKyNkZWZp bmUgUkdfRFNJX1BSRVNFUlZFCQkJKDcgPDwgMTMpCj4gKwo+ICsjZGVmaW5lIE1JUElUWF9EU0lf QkdfQ09OCTB4NDQKPiArI2RlZmluZSBSR19EU0lfQkdfQ09SRV9FTgkJQklUKDApCj4gKyNkZWZp bmUgUkdfRFNJX0JHX0NLRU4JCQlCSVQoMSkKPiArI2RlZmluZSBSR19EU0lfQkdfRElWCQkJKDB4 MyA8PCAyKQo+ICsjZGVmaW5lIFJHX0RTSV9CR19GQVNUX0NIQVJHRQkJQklUKDQpCj4gKyNkZWZp bmUgUkdfRFNJX1ZPVVRfTVNLCQkJKDB4M2ZmZmYgPDwgNSkKPiArI2RlZmluZSBSR19EU0lfVjEy X1NFTAkJCSg3IDw8IDUpCj4gKyNkZWZpbmUgUkdfRFNJX1YxMF9TRUwJCQkoNyA8PCA4KQo+ICsj ZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJCSg3IDw8IDExKQo+ICsjZGVmaW5lIFJHX0RTSV9WMDRf U0VMCQkJKDcgPDwgMTQpCj4gKyNkZWZpbmUgUkdfRFNJX1YwMzJfU0VMCQkJKDcgPDwgMTcpCj4g KyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8PCAyMCkKPiArI2RlZmluZSBSR19EU0lfQkdf UjFfVFJJTQkJKDB4ZiA8PCAyNCkKPiArI2RlZmluZSBSR19EU0lfQkdfUjJfVFJJTQkJKDB4ZiA8 PCAyOCkKPiArCj4gKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMAkweDUwCj4gKyNkZWZpbmUg UkdfRFNJX01QUExMX1BMTF9FTgkJQklUKDApCj4gKyNkZWZpbmUgUkdfRFNJX01QUExMX0RJVl9N U0sJCSgweDFmZiA8PCAxKQo+ICsjZGVmaW5lIFJHX0RTSV9NUFBMTF9QUkVESVYJCSgzIDw8IDEp Cj4gKyNkZWZpbmUgUkdfRFNJX01QUExMX1RYRElWMAkJKDMgPDwgMykKPiArI2RlZmluZSBSR19E U0lfTVBQTExfVFhESVYxCQkoMyA8PCA1KQo+ICsjZGVmaW5lIFJHX0RTSV9NUFBMTF9QT1NESVYJ CSg3IDw8IDcpCj4gKyNkZWZpbmUgUkdfRFNJX01QUExMX01PTlZDX0VOCQlCSVQoMTApCj4gKyNk ZWZpbmUgUkdfRFNJX01QUExMX01PTlJFRl9FTgkJQklUKDExKQo+ICsjZGVmaW5lIFJHX0RTSV9N UFBMTF9WT0RfRU4JCUJJVCgxMikKPiArCj4gKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkw eDU0Cj4gKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9GUkFfRU4JCUJJVCgwKQo+ICsjZGVmaW5l IFJHX0RTSV9NUFBMTF9TRE1fU1NDX1BIX0lOSVQJQklUKDEpCj4gKyNkZWZpbmUgUkdfRFNJX01Q UExMX1NETV9TU0NfRU4JCUJJVCgyKQo+ICsjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fU1NDX1BS RAkoMHhmZmZmIDw8IDE2KQo+ICsKPiArI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgK PiArCj4gKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfVE9QCTB4NjQKPiArI2RlZmluZSBSR19EU0lf TVBQTExfUFJFU0VSVkUJCSgweGZmIDw8IDgpCj4gKwo+ICsjZGVmaW5lIE1JUElUWF9EU0lfUExM X1BXUgkweDY4Cj4gKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9QV1JfT04JCUJJVCgwKQo+ICsj ZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOCQlCSVQoMSkKPiArI2RlZmluZSBSR19EU0lf TVBQTExfU0RNX1BXUl9BQ0sJQklUKDgpCj4gKwo+ICsjZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RS TAkweDgwCj4gKyNkZWZpbmUgU1dfQ1RSTF9FTgkJCUJJVCgwKQo+ICsKPiArI2RlZmluZSBNSVBJ VFhfRFNJX1NXX0NUUkxfQ09OMAkweDg0Cj4gKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1BSRV9PRQkJ QklUKDApCj4gKyNkZWZpbmUgU1dfTE5UQ19MUFRYX09FCQkJQklUKDEpCj4gKyNkZWZpbmUgU1df TE5UQ19MUFRYX1AJCQlCSVQoMikKPiArI2RlZmluZSBTV19MTlRDX0xQVFhfTgkJCUJJVCgzKQo+ ICsjZGVmaW5lIFNXX0xOVENfSFNUWF9QUkVfT0UJCUJJVCg0KQo+ICsjZGVmaW5lIFNXX0xOVENf SFNUWF9PRQkJCUJJVCg1KQo+ICsjZGVmaW5lIFNXX0xOVENfSFNUWF9aRVJPQ0xLCQlCSVQoNikK PiArI2RlZmluZSBTV19MTlQwX0xQVFhfUFJFX09FCQlCSVQoNykKPiArI2RlZmluZSBTV19MTlQw X0xQVFhfT0UJCQlCSVQoOCkKPiArI2RlZmluZSBTV19MTlQwX0xQVFhfUAkJCUJJVCg5KQo+ICsj ZGVmaW5lIFNXX0xOVDBfTFBUWF9OCQkJQklUKDEwKQo+ICsjZGVmaW5lIFNXX0xOVDBfSFNUWF9Q UkVfT0UJCUJJVCgxMSkKPiArI2RlZmluZSBTV19MTlQwX0hTVFhfT0UJCQlCSVQoMTIpCj4gKyNk ZWZpbmUgU1dfTE5UMF9MUFJYX0VOCQkJQklUKDEzKQo+ICsjZGVmaW5lIFNXX0xOVDFfTFBUWF9Q UkVfT0UJCUJJVCgxNCkKPiArI2RlZmluZSBTV19MTlQxX0xQVFhfT0UJCQlCSVQoMTUpCj4gKyNk ZWZpbmUgU1dfTE5UMV9MUFRYX1AJCQlCSVQoMTYpCj4gKyNkZWZpbmUgU1dfTE5UMV9MUFRYX04J CQlCSVQoMTcpCj4gKyNkZWZpbmUgU1dfTE5UMV9IU1RYX1BSRV9PRQkJQklUKDE4KQo+ICsjZGVm aW5lIFNXX0xOVDFfSFNUWF9PRQkJCUJJVCgxOSkKPiArI2RlZmluZSBTV19MTlQyX0xQVFhfUFJF X09FCQlCSVQoMjApCj4gKyNkZWZpbmUgU1dfTE5UMl9MUFRYX09FCQkJQklUKDIxKQo+ICsjZGVm aW5lIFNXX0xOVDJfTFBUWF9QCQkJQklUKDIyKQo+ICsjZGVmaW5lIFNXX0xOVDJfTFBUWF9OCQkJ QklUKDIzKQo+ICsjZGVmaW5lIFNXX0xOVDJfSFNUWF9QUkVfT0UJCUJJVCgyNCkKPiArI2RlZmlu ZSBTV19MTlQyX0hTVFhfT0UJCQlCSVQoMjUpCj4gKwo+ICtzdGF0aWMgaW50IG10a19taXBpX3R4 X3BsbF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX21pcGlf dHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7Cj4gKwl1OCB0eGRpdiwg dHhkaXYwLCB0eGRpdjE7Cj4gKwl1NjQgcGN3Owo+ICsKPiArCWRldl9kYmcobWlwaV90eC0+ZGV2 LCAicHJlcGFyZTogJXUgSHpcbiIsIG1pcGlfdHgtPmRhdGFfcmF0ZSk7Cj4gKwo+ICsJaWYgKG1p cGlfdHgtPmRhdGFfcmF0ZSA+PSA1MDAwMDAwMDApIHsKPiArCQl0eGRpdiA9IDE7Cj4gKwkJdHhk aXYwID0gMDsKPiArCQl0eGRpdjEgPSAwOwo+ICsJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3Jh dGUgPj0gMjUwMDAwMDAwKSB7Cj4gKwkJdHhkaXYgPSAyOwo+ICsJCXR4ZGl2MCA9IDE7Cj4gKwkJ dHhkaXYxID0gMDsKPiArCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDEyNTAwMDAw MCkgewo+ICsJCXR4ZGl2ID0gNDsKPiArCQl0eGRpdjAgPSAyOwo+ICsJCXR4ZGl2MSA9IDA7Cj4g Kwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+IDYyMDAwMDAwKSB7Cj4gKwkJdHhkaXYg PSA4Owo+ICsJCXR4ZGl2MCA9IDI7Cj4gKwkJdHhkaXYxID0gMTsKPiArCX0gZWxzZSBpZiAobWlw aV90eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAwKSB7Cj4gKwkJdHhkaXYgPSAxNjsKPiArCQl0eGRp djAgPSAyOwo+ICsJCXR4ZGl2MSA9IDI7Cj4gKwl9IGVsc2Ugewo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsKPiArCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9E U0lfQkdfQ09OLAo+ICsJCQkJUkdfRFNJX1ZPVVRfTVNLIHwKPiArCQkJCVJHX0RTSV9CR19DS0VO IHwgUkdfRFNJX0JHX0NPUkVfRU4sCj4gKwkJCQkoNCA8PCAyMCkgfCAoNCA8PCAxNykgfCAoNCA8 PCAxNCkgfAo+ICsJCQkJKDQgPDwgMTEpIHwgKDQgPDwgOCkgfCAoNCA8PCA1KSB8Cj4gKwkJCQlS R19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOKTsKPiArCj4gKwl1c2xlZXBfcmFuZ2Uo MzAsIDEwMCk7Cj4gKwo+ICsJbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRY X0RTSV9UT1BfQ09OLAo+ICsJCQkJUkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUgfCBSR19EU0lfTE5U X0hTX0JJQVNfRU4sCj4gKwkJCQkoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklBU19FTik7Cj4g Kwo+ICsJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9DT04sCj4gKwkJ CSAgICAgUkdfRFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTik7Cj4gKwo+ICsJ bXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfUFdSLAo+ICsJ CQkJUkdfRFNJX01QUExMX1NETV9QV1JfT04gfAo+ICsJCQkJUkdfRFNJX01QUExMX1NETV9JU09f RU4sCj4gKwkJCQlSR19EU0lfTVBQTExfU0RNX1BXUl9PTik7Cj4gKwo+ICsJbXRrX21pcGlfdHhf Y2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAo+ICsJCQkgICAgICAgUkdf RFNJX01QUExMX1BMTF9FTik7Cj4gKwo+ICsJbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90 eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwKPiArCQkJCVJHX0RTSV9NUFBMTF9UWERJVjAgfCBSR19E U0lfTVBQTExfVFhESVYxIHwKPiArCQkJCVJHX0RTSV9NUFBMTF9QUkVESVYsCj4gKwkJCQkodHhk aXYwIDw8IDMpIHwgKHR4ZGl2MSA8PCA1KSk7Cj4gKwo+ICsJLyoKPiArCSAqIFBMTCBQQ1cgY29u ZmlnCj4gKwkgKiBQQ1cgYml0IDI0fjMwID0gaW50ZWdlciBwYXJ0IG9mIHBjdwo+ICsJICogUENX IGJpdCAwfjIzID0gZnJhY3Rpb25hbCBwYXJ0IG9mIHBjdwo+ICsJICogcGN3ID0gZGF0YV9SYXRl KjQqdHhkaXYvKFJlZl9jbGsqMik7Cj4gKwkgKiBQb3N0IERJViA9NCwgc28gbmVlZCBkYXRhX1Jh dGUqNAo+ICsJICogUmVmX2NsayBpcyAyNk1Iego+ICsJICovCj4gKwlwY3cgPSBkaXZfdTY0KCgo dTY0KW1pcGlfdHgtPmRhdGFfcmF0ZSAqIDIgKiB0eGRpdikgPDwgMjQsCj4gKwkJICAgICAgMjYw MDAwMDApOwo+ICsJd3JpdGVsKHBjdywgbWlwaV90eC0+cmVncyArIE1JUElUWF9EU0lfUExMX0NP TjIpOwo+ICsKPiArCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExM X0NPTjEsCj4gKwkJCSAgICAgUkdfRFNJX01QUExMX1NETV9GUkFfRU4pOwo+ICsKPiArCW10a19t aXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9NUFBM TF9QTExfRU4pOwo+ICsKPiArCXVzbGVlcF9yYW5nZSgyMCwgMTAwKTsKPiArCj4gKwltdGtfbWlw aV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjEsCj4gKwkJCSAgICAg ICBSR19EU0lfTVBQTExfU0RNX1NTQ19FTik7Cj4gKwo+ICsJbXRrX21pcGlfdHhfdXBkYXRlX2Jp dHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfVE9QLAo+ICsJCQkJUkdfRFNJX01QUExMX1BSRVNF UlZFLAo+ICsJCQkJbWlwaV90eC0+ZHJpdmVyX2RhdGEtPm1wcGxsX3ByZXNlcnZlKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcGxsX3VucHJl cGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKPiArewo+ICsJc3RydWN0IG10a19taXBpX3R4ICptaXBp X3R4ID0gbXRrX21pcGlfdHhfZnJvbV9jbGtfaHcoaHcpOwo+ICsKPiArCWRldl9kYmcobWlwaV90 eC0+ZGV2LCAidW5wcmVwYXJlXG4iKTsKPiArCj4gKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1p cGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCj4gKwkJCSAgICAgICBSR19EU0lfTVBQTExfUExM X0VOKTsKPiArCj4gKwltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJ X1BMTF9UT1AsCj4gKwkJCQlSR19EU0lfTVBQTExfUFJFU0VSVkUsIDApOwo+ICsKPiArCW10a19t aXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX1BXUiwKPiArCQkJCVJH X0RTSV9NUFBMTF9TRE1fSVNPX0VOIHwKPiArCQkJCVJHX0RTSV9NUFBMTF9TRE1fUFdSX09OLAo+ ICsJCQkJUkdfRFNJX01QUExMX1NETV9JU09fRU4pOwo+ICsKPiArCW10a19taXBpX3R4X2NsZWFy X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAo+ICsJCQkgICAgICAgUkdfRFNJX0xO VF9IU19CSUFTX0VOKTsKPiArCj4gKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1J UElUWF9EU0lfQ09OLAo+ICsJCQkgICAgICAgUkdfRFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lf TERPQ09SRV9FTik7Cj4gKwo+ICsJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJ VFhfRFNJX0JHX0NPTiwKPiArCQkJICAgICAgIFJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NP UkVfRU4pOwo+ICsKPiArCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RT SV9QTExfQ09OMCwKPiArCQkJICAgICAgIFJHX0RTSV9NUFBMTF9ESVZfTVNLKTsKPiArfQo+ICsK PiArc3RhdGljIGxvbmcgbXRrX21pcGlfdHhfcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAq aHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKPiArCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpwcmF0 ZSkKPiArewo+ICsJcmV0dXJuIGNsYW1wX3ZhbChyYXRlLCA1MDAwMDAwMCwgMTI1MDAwMDAwMCk7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtdGtfbWlwaV90eF9wbGxf b3BzID0gewo+ICsJLnByZXBhcmUgPSBtdGtfbWlwaV90eF9wbGxfcHJlcGFyZSwKPiArCS51bnBy ZXBhcmUgPSBtdGtfbWlwaV90eF9wbGxfdW5wcmVwYXJlLAo+ICsJLnJvdW5kX3JhdGUgPSBtdGtf bWlwaV90eF9wbGxfcm91bmRfcmF0ZSwKPiArCS5zZXRfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9z ZXRfcmF0ZSwKPiArCS5yZWNhbGNfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZSwK PiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X3Bvd2VyX29uX3NpZ25hbChzdHJ1 Y3QgcGh5ICpwaHkpCj4gK3sKPiArCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9n ZXRfZHJ2ZGF0YShwaHkpOwo+ICsJdTMyIHJlZzsKPiArCj4gKwlmb3IgKHJlZyA9IE1JUElUWF9E U0lfQ0xPQ0tfTEFORTsKPiArCSAgICAgcmVnIDw9IE1JUElUWF9EU0lfREFUQV9MQU5FMzsgcmVn ICs9IDQpCj4gKwkJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgcmVnLCBSR19EU0lfTE5U eF9MRE9PVVRfRU4pOwo+ICsKPiArCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQ SVRYX0RTSV9UT1BfQ09OLAo+ICsJCQkgICAgICAgUkdfRFNJX1BBRF9USUVfTE9XX0VOKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChzdHJ1Y3Qg cGh5ICpwaHkpCj4gK3sKPiArCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRf ZHJ2ZGF0YShwaHkpOwo+ICsJdTMyIHJlZzsKPiArCj4gKwltdGtfbWlwaV90eF9zZXRfYml0cyht aXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCj4gKwkJCSAgICAgUkdfRFNJX1BBRF9USUVfTE9X X0VOKTsKPiArCj4gKwlmb3IgKHJlZyA9IE1JUElUWF9EU0lfQ0xPQ0tfTEFORTsKPiArCSAgICAg cmVnIDw9IE1JUElUWF9EU0lfREFUQV9MQU5FMzsgcmVnICs9IDQpCj4gKwkJbXRrX21pcGlfdHhf Y2xlYXJfYml0cyhtaXBpX3R4LCByZWcsIFJHX0RTSV9MTlR4X0xET09VVF9FTik7Cj4gK30KPiAr Cj4gK2NvbnN0IHN0cnVjdCBtdGtfbWlwaXR4X2RhdGEgbXQyNzAxX21pcGl0eF9kYXRhID0gewo+ ICsJLm1wcGxsX3ByZXNlcnZlID0gKDMgPDwgOCksCj4gKwkubWlwaV90eF9jbGtfb3BzID0gJm10 a19taXBpX3R4X3BsbF9vcHMsCj4gKwkubWlwaV90eF9lbmFibGVfc2lnbmFsID0gbXRrX21pcGlf dHhfcG93ZXJfb25fc2lnbmFsLAo+ICsJLm1pcGlfdHhfZGlzYWJsZV9zaWduYWwgPSBtdGtfbWlw aV90eF9wb3dlcl9vZmZfc2lnbmFsLAo+ICt9Owo+ICsKPiArY29uc3Qgc3RydWN0IG10a19taXBp dHhfZGF0YSBtdDgxNzNfbWlwaXR4X2RhdGEgPSB7Cj4gKwkubXBwbGxfcHJlc2VydmUgPSAoMCA8 PCA4KSwKPiArCS5taXBpX3R4X2Nsa19vcHMgPSAmbXRrX21pcGlfdHhfcGxsX29wcywKPiArCS5t aXBpX3R4X2VuYWJsZV9zaWduYWwgPSBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwsCj4gKwku bWlwaV90eF9kaXNhYmxlX3NpZ25hbCA9IG10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWwsCj4g K307Cj4gKwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==