From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chanwoo Choi Subject: Re: [PATCH v5 2/2] ASoC: samsung: Add machine driver for Exynos5433 based TM2 board Date: Fri, 19 Aug 2016 10:52:08 +0900 Message-ID: <57B66648.7000500@samsung.com> References: <1470752514-11409-1-git-send-email-s.nawrocki@samsung.com> <1470752514-11409-2-git-send-email-s.nawrocki@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1470752514-11409-2-git-send-email-s.nawrocki@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Sylwester Nawrocki , broonie@kernel.org Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org, linux-samsung-soc@vger.kernel.org, b.zolnierkie@samsung.com, k.kozlowski@samsung.com, Inha Song List-Id: devicetree@vger.kernel.org RGVhciBhbGwsCgpJIHRlc3RlZCB0aGlzIHBhdGNoIHdpdGggVE0yIGR0IHBhdGNoZXNbMV0KYmFz ZWQgb24gdjQuOC1yYzIuIFRoZSBwbGF5YmFjayBpcyB3ZWxsIHdvcmtpbmcuClsxXSBodHRwczov L2xrbWwub3JnL2xrbWwvMjAxNi84LzE2LzYxCjogW1BBVENIIDAvN10gYXJtNjQ6IGR0czogQWRk IHRoZSBkdHMgZmlsZSBmb3IgRXh5bm9zNTQzMyBhbmQgVE0vVE0yRSBib2FyZAoKVGVzdGVkLWJ5 OiBDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1zdW5nLmNvbT4KCkJlc3QgUmVnYXJkcywKQ2hh bndvbyBDaG9pCgpPbiAyMDE264WEIDA47JuUIDA57J28IDIzOjIxLCBTeWx3ZXN0ZXIgTmF3cm9j a2kgd3JvdGU6Cj4gVGhpcyBwYXRjaCBhZGRzIHRoZSBzb3VuZCBtYWNoaW5lIGRyaXZlciBmb3Ig VE0yIGFuZCBUTTJFIGJvYXJkLgo+IFNwZWFrZXIgYW5kIGhlYWRwaG9uZSBwbGF5YmFjaywgTWFp biBNaWMgY2FwdHVyZSwgQmx1ZXRvb3RoLAo+IFZvaWNlIGNhbGwgYW5kIGV4dGVybmFsIGFjY2Vz c29yeSBhcmUgc3VwcG9ydGVkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEluaGEgU29uZyA8aWRlYWwu c29uZ0BzYW1zdW5nLmNvbT4KPiBbay5rb3psb3dza2k6IHJlYmFzZWQgb24gNC4xXQo+IFNpZ25l ZC1vZmYtYnk6IEtyenlzenRvZiBLb3psb3dza2kgPGsua296bG93c2tpQHNhbXN1bmcuY29tPgo+ IFtzLm5hd3JvY2tpOiByZWJhc2VkIHRvIDQuNywgYWRqdXN0bWVudCB0byB0aGUgQVNvQyBjb3Jl IGNoYW5nZXMsCj4gIHJlbW92ZWQgdW51c2VkIG9wcyBhbmQgZGlyZWN0IGNhbGxzIHRvIHRoZSBt YXg5ODUwNCBmdW5jdGlvbiwKPiAgYWRkZWQgcGFyc2luZyBvZiAiYXVkaW8tYW1wbGlmaWVyIiBh bmQgImF1ZGlvLWNvZGVjIgo+ICBwcm9wZXJ0aWVzLCBhZGRlZCBURE0gQVBJIGNhbGxzLCBzd2l0 Y2hlZCB0byBncGlvZCBBUEldCj4gU2lnbmVkLW9mZi1ieTogU3lsd2VzdGVyIE5hd3JvY2tpIDxz Lm5hd3JvY2tpQHNhbXN1bmcuY29tPgo+IC0tLQo+IAo+IENoYW5nZXMgc2luY2UgdjQgKGFkZHJl c3NpbmcgcmV2aWV3IGNvbW1lbnRzIGZyb20gQ2hhcmxlcyk6Cj4gIC0gY2hhbmdlZCB0aGUgb3Jk ZXIgb2YgV001MTEwX0ZMTHsxLDJ9LCBXTTUxMTBfRkxMezEsMn1fUkVGQ0xLIHNldHRpbmcsCj4g IC0gQVJJWk9OQV9DTEtfU1lTQ0xLLCBBUklaT05BX0NMS19BU1lOQ0NMSyBzZXR0aW5nIG1vdmVk IHRvIGxhdGVfcHJvYmUsCj4gIC0gYWRkZWQgdG0yX2FpZjJfaHdfZnJlZSBjYWxsYmFjayBmb3Ig ZGlzYWJsaW5nIEZMTDIsCj4gIC0gcmVtb3ZlZCB1bm5lZGVkIGNhcmQtPmRhcG0uYmlhc19sZXZl bCBhc3NpZ25tZW50IGluIHRtMl9taWNfYmlhcyBjYWxsYmFjaywKPiAgLSBzdXNwZW5kX2xhdGUs IHJlc3VtZV9lYXJseSBkZXZfcG1fb3BzIHVzZWQgaW5zdGVhZCBvZiBzdXNwZW5kX3Bvc3QsCj4g ICAgcmVzdW1lX3ByZSBzdHJ1Y3Qgc25kX3NvY19jYXJkIGNhbGxiYWNrcy4KPiAKPiBDaGFuZ2Vz IHNpbmNlIHYzOgo+ICAtIHJlbW92ZWQgU05EX1NPQ19TQU1TVU5HX0FVRFNTIGZyb20gS2NvbmZp Zy4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ICAtIGFkZGVkIG1pc3NpbmcgS2NvbmZpZyBkZXBl bmRlbmNpZXMuCj4gCj4gQ2hhbmdlcyBzaW5jZSBpbml0aWFsIHZlcnNpb246Cj4gIC0gYWRkZWQg UERNIFR4IGNoYW5uZWxzIHNldHVwIHRocm91Z2ggVERNIEFQSQo+ICAtIGFkYXB0YXRpb24gdG8g cmVuYW1lZCAnc2Ftc3VuZyxtb2RlbCcsICdzYW1zdW5nLGkycy1jb250cm9sbGVyJywKPiAgICAn c2Ftc3VuZyxzcGVha2VyLWFtcGxpZmllcicgcHJvcGVydGllcywKPiAgLSByZW1vdmVkIHNvbWUg ZGV2X2RiZygpIGNhbGxzLAo+ICAtIGNsZWFuZWQgdXAgbWljLWJpYXMgR1BJTyBoYW5kbGluZyBh bmQgc3dpdGNoZWQgdG8gZ3Bpb2QgQVBJLAo+ICAtIGFkZGVkIHBhcnNpbmcgb2YgJ2F1ZGlvLWNv ZGVjJyBwcm9wZXJ0eSwKPiAgLSBpbml0aWFsaXplZCBjb2RlY19vZl9ub2RlIG9mIGRhaV9saW5r IGluc3RlYWQgb2YgY29kZWNfbmFtZSwKPiAgLSBzd2l0Y2hlZCB0byB1c2luZyBjbG9jaywgY2xv Y2stbmFtZXMgcHJvcGVydGllcyBmcm9tIHRoZSB3bTUxMTAKPiAgICBjb2RlYyBub2RlLAo+ICAt IGZpeGVkIGVycm9yIHBhdGhzIGluIHByb2JlKCkgKG9mX25vZGUgcmVmZXJlbmNlIGNvdW50aW5n KS4KPiAtLS0KPiAgc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZyAgICAgIHwgICA5ICsKPiAgc291 bmQvc29jL3NhbXN1bmcvTWFrZWZpbGUgICAgIHwgICAyICsKPiAgc291bmQvc29jL3NhbXN1bmcv dG0yX3dtNTExMC5jIHwgNjA0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgNjE1IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IHNvdW5kL3NvYy9zYW1zdW5nL3RtMl93bTUxMTAuYwo+IAo+IGRpZmYgLS1naXQgYS9z b3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnIGIvc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZwo+IGlu ZGV4IDdiNzIyYjAuLjFiZWQ4YTUgMTAwNjQ0Cj4gLS0tIGEvc291bmQvc29jL3NhbXN1bmcvS2Nv bmZpZwo+ICsrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL0tjb25maWcKPiBAQCAtMjI5LDMgKzIyOSwx MiBAQCBjb25maWcgU05EX1NPQ19BUk5EQUxFX1JUNTYzMV9BTEM1NjMxCj4gICAgICAgICAgZGVw ZW5kcyBvbiBTTkRfU09DX1NBTVNVTkcgJiYgSTJDCj4gICAgICAgICAgc2VsZWN0IFNORF9TQU1T VU5HX0kyUwo+ICAgICAgICAgIHNlbGVjdCBTTkRfU09DX1JUNTYzMQo+ICsKPiArY29uZmlnIFNO RF9TT0NfU0FNU1VOR19UTTJfV001MTEwCj4gKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBw b3J0IGZvciBXTTUxMTAgb24gVE0yIGJvYXJkIgo+ICsJZGVwZW5kcyBvbiBTTkRfU09DX1NBTVNV TkcgJiYgTUZEX0FSSVpPTkEgJiYgSTJDICYmIFNQSV9NQVNURVIKPiArCXNlbGVjdCBTTkRfU09D X01BWDk4NTA0Cj4gKwlzZWxlY3QgU05EX1NPQ19XTTUxMTAKPiArCXNlbGVjdCBTTkRfU0FNU1VO R19JMlMKPiArCWhlbHAKPiArCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9y IFNvQyBhdWRpbyBvbiB0aGUgVE0yIGJvYXJkLgo+IGRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ft c3VuZy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCj4gaW5kZXggNWQwM2Y1 Yy4uNDQ0NGI5ZiAxMDA2NDQKPiAtLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9NYWtlZmlsZQo+ICsr KyBiL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCj4gQEAgLTQ0LDYgKzQ0LDcgQEAgc25kLXNv Yy1sb3dsYW5kLW9ianMgOj0gbG93bGFuZC5vCj4gIHNuZC1zb2MtbGl0dGxlbWlsbC1vYmpzIDo9 IGxpdHRsZW1pbGwubwo+ICBzbmQtc29jLWJlbGxzLW9ianMgOj0gYmVsbHMubwo+ICBzbmQtc29j LWFybmRhbGUtcnQ1NjMxLW9ianMgOj0gYXJuZGFsZV9ydDU2MzEubwo+ICtzbmQtc29jLXRtMi13 bTUxMTAtb2JqcyA6PSB0bTJfd201MTEwLm8KPiAKPiAgb2JqLSQoQ09ORklHX1NORF9TT0NfU0FN U1VOR19KSVZFX1dNODc1MCkgKz0gc25kLXNvYy1qaXZlLXdtODc1MC5vCj4gIG9iai0kKENPTkZJ R19TTkRfU09DX1NBTVNVTkdfTkVPMTk3M19XTTg3NTMpICs9IHNuZC1zb2MtbmVvMTk3My13bTg3 NTMubwo+IEBAIC02OSwzICs3MCw0IEBAIG9iai0kKENPTkZJR19TTkRfU09DX0xPV0xBTkQpICs9 IHNuZC1zb2MtbG93bGFuZC5vCj4gIG9iai0kKENPTkZJR19TTkRfU09DX0xJVFRMRU1JTEwpICs9 IHNuZC1zb2MtbGl0dGxlbWlsbC5vCj4gIG9iai0kKENPTkZJR19TTkRfU09DX0JFTExTKSArPSBz bmQtc29jLWJlbGxzLm8KPiAgb2JqLSQoQ09ORklHX1NORF9TT0NfQVJOREFMRV9SVDU2MzFfQUxD NTYzMSkgKz0gc25kLXNvYy1hcm5kYWxlLXJ0NTYzMS5vCj4gK29iai0kKENPTkZJR19TTkRfU09D X1NBTVNVTkdfVE0yX1dNNTExMCkgKz0gc25kLXNvYy10bTItd201MTEwLm8KPiBkaWZmIC0tZ2l0 IGEvc291bmQvc29jL3NhbXN1bmcvdG0yX3dtNTExMC5jIGIvc291bmQvc29jL3NhbXN1bmcvdG0y X3dtNTExMC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4xNmM0OGZi Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3RtMl93bTUxMTAuYwo+ IEBAIC0wLDAgKzEsNjA0IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTYg U2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KPiArICoKPiArICogQXV0aG9yczogSW5oYSBT b25nIDxpZGVhbC5zb25nQHNhbXN1bmcuY29tPgo+ICsgKiAgICAgICAgICBTeWx3ZXN0ZXIgTmF3 cm9ja2kgPHMubmF3cm9ja2lAc2Ftc3VuZy5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBp dAo+ICsgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKPiArICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2dw aW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2Yu aD4KPiArI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KPiArI2luY2x1ZGUgPHNvdW5kL3Nv Yy5oPgo+ICsKPiArI2luY2x1ZGUgImkycy5oIgo+ICsjaW5jbHVkZSAiLi4vY29kZWNzL3dtNTEx MC5oIgo+ICsKPiArI2RlZmluZSBUTTJfREFJX0FJRjEJMAo+ICsjZGVmaW5lIFRNMl9EQUlfQUlG MgkxCj4gKwo+ICtzdHJ1Y3QgdG0yX21hY2hpbmVfcHJpdiB7Cj4gKwlzdHJ1Y3Qgc25kX3NvY19j b2RlYyAqY29kZWM7Cj4gKwlzdHJ1Y3QgY2xrICpjb2RlY19tY2xrMTsKPiArCXN0cnVjdCBjbGsg KmNvZGVjX21jbGsyOwo+ICsKPiArCXVuc2lnbmVkIGludCBzeXNjbGtfcmF0ZTsKPiArCj4gKwlz dHJ1Y3QgZ3Bpb19kZXNjICpncGlvX21pY19iaWFzOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCB0 bTJfc3RhcnRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCj4gK3sKPiArCXN0cnVj dCB0bTJfbWFjaGluZV9wcml2ICpwcml2ID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKGNhcmQp Owo+ICsJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcHJpdi0+Y29kZWM7Cj4gKwl1bnNp Z25lZCBsb25nIG1jbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LT5jb2RlY19tY2xrMSk7Cj4g KwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jb2RlY19t Y2xrMSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoY2FyZC0+ZGV2LCAiRmFpbGVk IHRvIGVuYWJsZSBtY2xrOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsK PiArCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X3BsbChjb2RlYywgV001MTEwX0ZMTDFfUkVGQ0xL LAo+ICsJCQkJICAgIEFSSVpPTkFfRkxMX1NSQ19NQ0xLMSwKPiArCQkJCSAgICBtY2xrX3JhdGUs Cj4gKwkJCQkgICAgcHJpdi0+c3lzY2xrX3JhdGUpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlk ZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IEZMTDEgc291cmNlOiAlZFxuIiwgcmV0 KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0 X3BsbChjb2RlYywgV001MTEwX0ZMTDEsCj4gKwkJCQkgICAgQVJJWk9OQV9GTExfU1JDX01DTEsx LAo+ICsJCQkJICAgIG1jbGtfcmF0ZSwKPiArCQkJCSAgICBwcml2LT5zeXNjbGtfcmF0ZSk7Cj4g KwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzdGFy dCBGTEwxOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9 IHNuZF9zb2NfY29kZWNfc2V0X3N5c2Nsayhjb2RlYywgQVJJWk9OQV9DTEtfU1lTQ0xLLAo+ICsJ CQkJICAgICAgIEFSSVpPTkFfQ0xLX1NSQ19GTEwxLAo+ICsJCQkJICAgICAgIHByaXYtPnN5c2Ns a19yYXRlLAo+ICsJCQkJICAgICAgIFNORF9TT0NfQ0xPQ0tfSU4pOwo+ICsJaWYgKHJldCA8IDAp IHsKPiArCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IFNZU0NMSyBzb3VyY2U6 ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgdG0yX3N0b3Bfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2NhcmQg KmNhcmQpCj4gK3sKPiArCXN0cnVjdCB0bTJfbWFjaGluZV9wcml2ICpwcml2ID0gc25kX3NvY19j YXJkX2dldF9kcnZkYXRhKGNhcmQpOwo+ICsJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0g cHJpdi0+Y29kZWM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0 X3BsbChjb2RlYywgV001MTEwX0ZMTDEsIDAsIDAsIDApOwo+ICsJaWYgKHJldCA8IDApIHsKPiAr CQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc3RvcCBGTEwxOiAlZFxuIiwgcmV0KTsK PiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X3N5 c2Nsayhjb2RlYywgQVJJWk9OQV9DTEtfU1lTQ0xLLAo+ICsJCQkJICAgICAgIEFSSVpPTkFfQ0xL X1NSQ19GTEwxLCAwLCAwKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihjb2RlYy0+ ZGV2LCAiRmFpbGVkIHRvIHN0b3AgU1lTQ0xLOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0 Owo+ICsJfQo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5jb2RlY19tY2xrMSk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdG0yX2FpZjFfaHdfcGFy YW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAo+ICsJCQkJc3RydWN0IHNu ZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCj4gK3sKPiArCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50 aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKPiArCXN0cnVjdCBzbmRfc29jX2Nv ZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7Cj4gKwlzdHJ1Y3QgdG0yX21hY2hpbmVfcHJpdiAqcHJp diA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShydGQtPmNhcmQpOwo+ICsKPiArCXN3aXRjaCAo cGFyYW1zX3JhdGUocGFyYW1zKSkgewo+ICsJY2FzZSA0MDAwOgo+ICsJY2FzZSA4MDAwOgo+ICsJ Y2FzZSAxMjAwMDoKPiArCWNhc2UgMTYwMDA6Cj4gKwljYXNlIDI0MDAwOgo+ICsJY2FzZSAzMjAw MDoKPiArCWNhc2UgNDgwMDA6Cj4gKwljYXNlIDk2MDAwOgo+ICsJY2FzZSAxOTIwMDA6Cj4gKwkJ LyogSGlnaGVzdCBwb3NzaWJsZSBTWVNDTEsgZnJlcXVlbmN5OiAxNDcuNDU2TUh6ICovCj4gKwkJ cHJpdi0+c3lzY2xrX3JhdGUgPSAxNDc0NTYwMDBVOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAxMTAy NToKPiArCWNhc2UgMjIwNTA6Cj4gKwljYXNlIDQ0MTAwOgo+ICsJY2FzZSA4ODIwMDoKPiArCWNh c2UgMTc2NDAwOgo+ICsJCS8qIEhpZ2hlc3QgcG9zc2libGUgU1lTQ0xLIGZyZXF1ZW5jeTogMTM1 LjQ3NTIgTUh6ICovCj4gKwkJcHJpdi0+c3lzY2xrX3JhdGUgPSAxMzU0NzUyMDBVOwo+ICsJCWJy ZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJOb3Qgc3VwcG9ydGVk IHNhbXBsZSByYXRlOiAlZFxuIiwKPiArCQkJcGFyYW1zX3JhdGUocGFyYW1zKSk7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRtMl9zdGFydF9zeXNjbGsocnRkLT5j YXJkKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyB0bTJfYWlmMV9vcHMg PSB7Cj4gKwkuaHdfcGFyYW1zID0gdG0yX2FpZjFfaHdfcGFyYW1zLAo+ICt9Owo+ICsKPiArc3Rh dGljIGludCB0bTJfYWlmMl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJz dHJlYW0sCj4gKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKPiArewo+ICsJ c3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRh Owo+ICsJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKPiArCXN0cnVj dCB0bTJfbWFjaGluZV9wcml2ICpwcml2ID0Jc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHJ0ZC0+ Y2FyZCk7Cj4gKwl1bnNpZ25lZCBsb25nIG1jbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LT5j b2RlY19tY2xrMSk7Cj4gKwl1bnNpZ25lZCBpbnQgYXN5bmNjbGtfcmF0ZTsKPiArCWludCByZXQ7 Cj4gKwo+ICsJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Cj4gKwljYXNlIDgwMDA6Cj4g KwljYXNlIDEyMDAwOgo+ICsJY2FzZSAxNjAwMDoKPiArCQkvKiBIaWdoZXN0IHBvc3NpYmxlIEFT WU5DQ0xLIGZyZXF1ZW5jeTogNDkuMTUyTUh6ICovCj4gKwkJYXN5bmNjbGtfcmF0ZSA9IDQ5MTUy MDAwVTsKPiArCQlicmVhazsKPiArCWNhc2UgMTEwMjU6Cj4gKwkJLyogSGlnaGVzdCBwb3NzaWJs ZSBBU1lOQ0NMSyBmcmVxdWVuY3k6IDQ1LjE1ODQgTUh6ICovCj4gKwkJYXN5bmNjbGtfcmF0ZSA9 IDQ1MTU4NDAwVTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJZGV2X2Vycihjb2RlYy0+ ZGV2LCAiTm90IHN1cHBvcnRlZCBzYW1wbGUgcmF0ZTogJWRcbiIsCj4gKwkJCXBhcmFtc19yYXRl KHBhcmFtcykpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldCA9IHNuZF9z b2NfY29kZWNfc2V0X3BsbChjb2RlYywgV001MTEwX0ZMTDJfUkVGQ0xLLAo+ICsJCQkJICAgIEFS SVpPTkFfRkxMX1NSQ19NQ0xLMSwKPiArCQkJCSAgICBtY2xrX3JhdGUsCj4gKwkJCQkgICAgYXN5 bmNjbGtfcmF0ZSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoY29kZWMtPmRldiwg IkZhaWxlZCB0byBzZXQgRkxMMiBzb3VyY2U6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfcGxsKGNvZGVjLCBXTTUxMTBf RkxMMiwKPiArCQkJCSAgICBBUklaT05BX0ZMTF9TUkNfTUNMSzEsCj4gKwkJCQkgICAgbWNsa19y YXRlLAo+ICsJCQkJICAgIGFzeW5jY2xrX3JhdGUpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlk ZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc3RhcnQgRkxMMjogJWRcbiIsIHJldCk7Cj4g KwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9zeXNj bGsoY29kZWMsIEFSSVpPTkFfQ0xLX0FTWU5DQ0xLLAo+ICsJCQkJICAgICAgIEFSSVpPTkFfQ0xL X1NSQ19GTEwyLAo+ICsJCQkJICAgICAgIGFzeW5jY2xrX3JhdGUsCj4gKwkJCQkgICAgICAgU05E X1NPQ19DTE9DS19JTik7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoY29kZWMtPmRl diwgIkZhaWxlZCB0byBzZXQgQVNZTkNDTEsgc291cmNlOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRt Ml9haWYyX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCj4gK3sK PiArCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVf ZGF0YTsKPiArCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCS8qIGRpc2FibGUgRkxMMiAqLwo+ICsJcmV0ID0gc25kX3NvY19jb2Rl Y19zZXRfcGxsKGNvZGVjLCBXTTUxMTBfRkxMMiwgQVJJWk9OQV9GTExfU1JDX01DTEsxLAo+ICsJ CQkJICAgIDAsIDApOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAi RmFpbGVkIHRvIHN0b3AgRkxMMjogJWRcbiIsIHJldCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyB0bTJfYWlmMl9vcHMgPSB7Cj4gKwku aHdfcGFyYW1zID0gdG0yX2FpZjJfaHdfcGFyYW1zLAo+ICsJLmh3X2ZyZWUgPSB0bTJfYWlmMl9o d19mcmVlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB0bTJfbWljX2JpYXMoc3RydWN0IHNuZF9z b2NfZGFwbV93aWRnZXQgKncsCj4gKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwg aW50IGV2ZW50KQo+ICt7Cj4gKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gdy0+ZGFwbS0+ Y2FyZDsKPiArCXN0cnVjdCB0bTJfbWFjaGluZV9wcml2ICpwcml2ID0gc25kX3NvY19jYXJkX2dl dF9kcnZkYXRhKGNhcmQpOwo+ICsKPiArCXN3aXRjaCAoZXZlbnQpIHsKPiArCWNhc2UgU05EX1NP Q19EQVBNX1BSRV9QTVU6Cj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHByaXYtPmdwaW9f bWljX2JpYXMsICAxKTsKPiArCQlicmVhazsKPiArCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1E Ogo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwcml2LT5ncGlvX21pY19iaWFzLCAgMCk7 Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgdG0yX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCj4gKwkJCQlz dHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCj4gKwkJCQllbnVtIHNuZF9zb2NfYmlh c19sZXZlbCBsZXZlbCkKPiArewo+ICsJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsK PiArCj4gKwlydGQgPSBzbmRfc29jX2dldF9wY21fcnVudGltZShjYXJkLCBjYXJkLT5kYWlfbGlu a1swXS5uYW1lKTsKPiArCj4gKwlpZiAoZGFwbS0+ZGV2ICE9IHJ0ZC0+Y29kZWNfZGFpLT5kZXYp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJc3dpdGNoIChsZXZlbCkgewo+ICsJY2FzZSBTTkRfU09D X0JJQVNfU1RBTkRCWToKPiArCQlpZiAoY2FyZC0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0Nf QklBU19PRkYpCj4gKwkJCXRtMl9zdGFydF9zeXNjbGsoY2FyZCk7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIFNORF9TT0NfQklBU19PRkY6Cj4gKwkJdG0yX3N0b3Bfc3lzY2xrKGNhcmQpOwo+ICsJCWJy ZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIHN0cnVjdCBzbmRfc29jX2F1eF9kZXYgdG0yX3NwZWFrZXJfYW1wX2Rl djsKPiArCj4gK3N0YXRpYyBpbnQgdG0yX2xhdGVfcHJvYmUoc3RydWN0IHNuZF9zb2NfY2FyZCAq Y2FyZCkKPiArewo+ICsJc3RydWN0IHRtMl9tYWNoaW5lX3ByaXYgKnByaXYgPSBzbmRfc29jX2Nh cmRfZ2V0X2RydmRhdGEoY2FyZCk7Cj4gKwlzdHJ1Y3Qgc25kX3NvY19kYWlfbGlua19jb21wb25l bnQgZGxjID0geyAwIH07Cj4gKwl1bnNpZ25lZCBpbnQgY2hfbWFwW10gPSB7IDAsIDEgfTsKPiAr CXN0cnVjdCBzbmRfc29jX2RhaSAqYW1wX3BkbV9kYWk7Cj4gKwlzdHJ1Y3Qgc25kX3NvY19wY21f cnVudGltZSAqcnRkOwo+ICsJc3RydWN0IHNuZF9zb2NfZGFpICphaWYxX2RhaTsKPiArCXN0cnVj dCBzbmRfc29jX2RhaSAqYWlmMl9kYWk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJ0ZCA9IHNuZF9z b2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rW1RNMl9EQUlfQUlGMV0ubmFt ZSk7Cj4gKwlhaWYxX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwo+ICsJcHJpdi0+Y29kZWMgPSBydGQt PmNvZGVjOwo+ICsKPiArCS8qIDMyIGtIeiBtdXN0IGJlIGVuYWJsZWQgZm9yIGphY2sgZGV0ZWN0 aW9uICovCj4gKwlpZiAoIUlTX0VSUihwcml2LT5jb2RlY19tY2xrMikpCj4gKwkJY2xrX3ByZXBh cmVfZW5hYmxlKHByaXYtPmNvZGVjX21jbGsyKTsKPiArCj4gKwlyZXQgPSBzbmRfc29jX2RhaV9z ZXRfc3lzY2xrKGFpZjFfZGFpLCBBUklaT05BX0NMS19TWVNDTEssIDAsIDApOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlkZXZfZXJyKGFpZjFfZGFpLT5kZXYsICJGYWlsZWQgdG8gc2V0IFNZU0NM SzogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlydGQgPSBzbmRf c29jX2dldF9wY21fcnVudGltZShjYXJkLCBjYXJkLT5kYWlfbGlua1tUTTJfREFJX0FJRjJdLm5h bWUpOwo+ICsJYWlmMl9kYWkgPSBydGQtPmNvZGVjX2RhaTsKPiArCj4gKwlyZXQgPSBzbmRfc29j X2RhaV9zZXRfc3lzY2xrKGFpZjJfZGFpLCBBUklaT05BX0NMS19BU1lOQ0NMSywgMCwgMCk7Cj4g KwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoYWlmMl9kYWktPmRldiwgIkZhaWxlZCB0byBz ZXQgQVNZTkNDTEs6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJ ZGxjLm9mX25vZGUgPSB0bTJfc3BlYWtlcl9hbXBfZGV2LmNvZGVjX29mX25vZGU7Cj4gKwlhbXBf cGRtX2RhaSA9IHNuZF9zb2NfZmluZF9kYWkoJmRsYyk7Cj4gKwlpZiAoIWFtcF9wZG1fZGFpKQo+ ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCS8qIFNldCB0aGUgTUFYOTg1MDQgVi9JIHNlbnNl IFBETSBUeCBEQUkgY2hhbm5lbCBtYXBwaW5nICovCj4gKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRf Y2hhbm5lbF9tYXAoYW1wX3BkbV9kYWksIEFSUkFZX1NJWkUoY2hfbWFwKSwKPiArCQkJCQkgIGNo X21hcCwgMCwgTlVMTCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChhbXBfcGRtX2RhaSwgMHgzLCAweDAsIDIs IDE2KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0bTJfY29u dHJvbHNbXSA9IHsKPiArCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhQIiksCj4gKwlTT0NfREFQTV9Q SU5fU1dJVENIKCJTUEsiKSwKPiArCVNPQ19EQVBNX1BJTl9TV0lUQ0goIlJDViIpLAo+ICsJU09D X0RBUE1fUElOX1NXSVRDSCgiVlBTIiksCj4gKwlTT0NfREFQTV9QSU5fU1dJVENIKCJIRE1JIiks Cj4gKwo+ICsJU09DX0RBUE1fUElOX1NXSVRDSCgiTWFpbiBNaWMiKSwKPiArCVNPQ19EQVBNX1BJ Tl9TV0lUQ0goIlN1YiBNaWMiKSwKPiArCVNPQ19EQVBNX1BJTl9TV0lUQ0goIlRoaXJkIE1pYyIp LAo+ICsKPiArCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRzZXQgTWljIiksCj4gK307Cj4gKwo+ ICtjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB0bTJfZGFwbV93aWRnZXRzW10gPSB7 Cj4gKwlTTkRfU09DX0RBUE1fSFAoIkhQIiwgTlVMTCksCj4gKwlTTkRfU09DX0RBUE1fU1BLKCJT UEsiLCBOVUxMKSwKPiArCVNORF9TT0NfREFQTV9TUEsoIlJDViIsIE5VTEwpLAo+ICsJU05EX1NP Q19EQVBNX0xJTkUoIlZQUyIsIE5VTEwpLAo+ICsJU05EX1NPQ19EQVBNX0xJTkUoIkhETUkiLCBO VUxMKSwKPiArCj4gKwlTTkRfU09DX0RBUE1fTUlDKCJNYWluIE1pYyIsIHRtMl9taWNfYmlhcyks Cj4gKwlTTkRfU09DX0RBUE1fTUlDKCJTdWIgTWljIiwgTlVMTCksCj4gKwlTTkRfU09DX0RBUE1f TUlDKCJUaGlyZCBNaWMiLCBOVUxMKSwKPiArCj4gKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0 IE1pYyIsIE5VTEwpLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2Nv bXBvbmVudF9kcml2ZXIgdG0yX2NvbXBvbmVudCA9IHsKPiArCS5uYW1lCT0gInRtMi1hdWRpbyIs Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciB0bTJfZXh0X2Rh aVtdID0gewo+ICsJewo+ICsJCS5uYW1lID0gIlZvaWNlIGNhbGwiLAo+ICsJCS5wbGF5YmFjayA9 IHsKPiArCQkJLmNoYW5uZWxzX21pbiA9IDEsCj4gKwkJCS5jaGFubmVsc19tYXggPSA0LAo+ICsJ CQkucmF0ZV9taW4gPSA4MDAwLAo+ICsJCQkucmF0ZV9tYXggPSA0ODAwMCwKPiArCQkJLnJhdGVz ID0gKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8Cj4gKwkJCQkJ U05EUlZfUENNX1JBVEVfNDgwMDApLAo+ICsJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRf UzE2X0xFLAo+ICsJCX0sCj4gKwkJLmNhcHR1cmUgPSB7Cj4gKwkJCS5jaGFubmVsc19taW4gPSAx LAo+ICsJCQkuY2hhbm5lbHNfbWF4ID0gNCwKPiArCQkJLnJhdGVfbWluID0gODAwMCwKPiArCQkJ LnJhdGVfbWF4ID0gNDgwMDAsCj4gKwkJCS5yYXRlcyA9IChTTkRSVl9QQ01fUkFURV84MDAwIHwg U05EUlZfUENNX1JBVEVfMTYwMDAgfAo+ICsJCQkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKSwKPiAr CQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKPiArCQl9LAo+ICsJfSwKPiAr CXsKPiArCQkubmFtZSA9ICJCbHVldG9vdGgiLAo+ICsJCS5wbGF5YmFjayA9IHsKPiArCQkJLmNo YW5uZWxzX21pbiA9IDEsCj4gKwkJCS5jaGFubmVsc19tYXggPSA0LAo+ICsJCQkucmF0ZV9taW4g PSA4MDAwLAo+ICsJCQkucmF0ZV9tYXggPSAxNjAwMCwKPiArCQkJLnJhdGVzID0gKFNORFJWX1BD TV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCksCj4gKwkJCS5mb3JtYXRzID0gU05E UlZfUENNX0ZNVEJJVF9TMTZfTEUsCj4gKwkJfSwKPiArCQkuY2FwdHVyZSA9IHsKPiArCQkJLmNo YW5uZWxzX21pbiA9IDEsCj4gKwkJCS5jaGFubmVsc19tYXggPSAyLAo+ICsJCQkucmF0ZV9taW4g PSA4MDAwLAo+ICsJCQkucmF0ZV9tYXggPSAxNjAwMCwKPiArCQkJLnJhdGVzID0gKFNORFJWX1BD TV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCksCj4gKwkJCS5mb3JtYXRzID0gU05E UlZfUENNX0ZNVEJJVF9TMTZfTEUsCj4gKwkJfSwKPiArCX0sCj4gK307Cj4gKwo+ICtzdGF0aWMg c3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgdG0yX2RhaV9saW5rc1tdID0gewo+ICsJewo+ICsJCS5u YW1lCQk9ICJXTTUxMTAgQUlGMSIsCj4gKwkJLnN0cmVhbV9uYW1lCT0gIkhpRmkgUHJpbWFyeSIs Cj4gKwkJLmNvZGVjX2RhaV9uYW1lID0gIndtNTExMC1haWYxIiwKPiArCQkub3BzCQk9ICZ0bTJf YWlmMV9vcHMsCj4gKwkJLmRhaV9mbXQJPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RB SUZNVF9OQl9ORiB8Cj4gKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0sCj4gKwl9LCB7Cj4g KwkJLm5hbWUJCT0gIldNNTExMCBWb2ljZSIsCj4gKwkJLnN0cmVhbV9uYW1lCT0gIlZvaWNlIGNh bGwiLAo+ICsJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTUxMTAtYWlmMiIsCj4gKwkJLm9wcwkJPSAm dG0yX2FpZjJfb3BzLAo+ICsJCS5kYWlfZm10CT0gU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NP Q19EQUlGTVRfTkJfTkYgfAo+ICsJCQkJICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNLAo+ICsJCS5p Z25vcmVfc3VzcGVuZCA9IDEsCj4gKwl9LCB7Cj4gKwkJLm5hbWUJCT0gIldNNTExMCBCVCIsCj4g KwkJLnN0cmVhbV9uYW1lCT0gIkJsdWV0b290aCIsCj4gKwkJLmNvZGVjX2RhaV9uYW1lID0gIndt NTExMC1haWYzIiwKPiArCQkuZGFpX2ZtdAk9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0Nf REFJRk1UX05CX05GIHwKPiArCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSwKPiArCQkuaWdu b3JlX3N1c3BlbmQgPSAxLAo+ICsJfQo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBzbmRfc29j X2NhcmQgdG0yX2NhcmQgPSB7Cj4gKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAo+ICsKPiArCS5k YWlfbGluawkJPSB0bTJfZGFpX2xpbmtzLAo+ICsJLm51bV9saW5rcwkJPSBBUlJBWV9TSVpFKHRt Ml9kYWlfbGlua3MpLAo+ICsJLmNvbnRyb2xzCQk9IHRtMl9jb250cm9scywKPiArCS5udW1fY29u dHJvbHMJCT0gQVJSQVlfU0laRSh0bTJfY29udHJvbHMpLAo+ICsJLmRhcG1fd2lkZ2V0cwkJPSB0 bTJfZGFwbV93aWRnZXRzLAo+ICsJLm51bV9kYXBtX3dpZGdldHMJPSBBUlJBWV9TSVpFKHRtMl9k YXBtX3dpZGdldHMpLAo+ICsJLmF1eF9kZXYJCT0gJnRtMl9zcGVha2VyX2FtcF9kZXYsCj4gKwku bnVtX2F1eF9kZXZzCQk9IDEsCj4gKwo+ICsJLmxhdGVfcHJvYmUJCT0gdG0yX2xhdGVfcHJvYmUs Cj4gKwkuc2V0X2JpYXNfbGV2ZWwJCT0gdG0yX3NldF9iaWFzX2xldmVsLAo+ICt9Owo+ICsKPiAr c3RhdGljIGludCB0bTJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBzbmRfc29jX2Nh cmQgKmNhcmQgPSAmdG0yX2NhcmQ7Cj4gKwlzdHJ1Y3QgdG0yX21hY2hpbmVfcHJpdiAqcHJpdjsK PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X2RhaV9ub2RlLCAqY29kZWNfZGFpX25vZGU7Cj4g KwlpbnQgcmV0LCBpOwo+ICsKPiArCWlmICghZGV2LT5vZl9ub2RlKSB7Cj4gKwkJZGV2X2Vycihk ZXYsICJEVCBub2RlIGlzIG1pc3NpbmdcbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ ICsKPiArCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVM KTsKPiArCWlmICghcHJpdikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzbmRfc29jX2Nh cmRfc2V0X2RydmRhdGEoY2FyZCwgcHJpdik7Cj4gKwljYXJkLT5kZXYgPSBkZXY7Cj4gKwo+ICsJ cHJpdi0+Z3Bpb19taWNfYmlhcyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgIm1pYy1iaWFzIiwKPiAr CQkJCQkJR1BJT0ZfT1VUX0lOSVRfTE9XKTsKPiArCWlmIChJU19FUlIocHJpdi0+Z3Bpb19taWNf YmlhcykpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbWljIGJpYXMgZ3Bpb1xu Iik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+Z3Bpb19taWNfYmlhcyk7Cj4gKwl9Cj4gKwo+ ICsJcmV0ID0gc25kX3NvY19vZl9wYXJzZV9jYXJkX25hbWUoY2FyZCwgIm1vZGVsIik7Cj4gKwlp ZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiQ2FyZCBuYW1lIGlzIG5vdCBzcGVjaWZp ZWRcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gc25kX3NvY19vZl9w YXJzZV9hdWRpb19yb3V0aW5nKGNhcmQsICJzYW1zdW5nLGF1ZGlvLXJvdXRpbmciKTsKPiArCWlm IChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJBdWRpbyByb3V0aW5nIGlzIG5vdCBzcGVj aWZpZWQgb3IgaW52YWxpZFxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwljYXJk LT5hdXhfZGV2WzBdLmNvZGVjX29mX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRldi0+b2Zfbm9k ZSwKPiArCQkJCQkJCSJhdWRpby1hbXBsaWZpZXIiLCAwKTsKPiArCWlmICghY2FyZC0+YXV4X2Rl dlswXS5jb2RlY19vZl9ub2RlKSB7Cj4gKwkJZGV2X2VycihkZXYsICJhdWRpby1hbXBsaWZpZXIg cHJvcGVydHkgaW52YWxpZCBvciBtaXNzaW5nXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr CX0KPiArCj4gKwljcHVfZGFpX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRldi0+b2Zfbm9kZSwg Imkycy1jb250cm9sbGVyIiwgMCk7Cj4gKwlpZiAoIWNwdV9kYWlfbm9kZSkgewo+ICsJCWRldl9l cnIoZGV2LCAiaTJzLWNvbnRyb2xsZXJzIHByb3BlcnR5IGludmFsaWQgb3IgbWlzc2luZ1xuIik7 Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycl9wdXRfYW1wOwo+ICsJfQo+ICsKPiAr CWNvZGVjX2RhaV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJhdWRpby1j b2RlYyIsIDApOwo+ICsJaWYgKCFjb2RlY19kYWlfbm9kZSkgewo+ICsJCWRldl9lcnIoZGV2LCAi YXVkaW8tY29kZWMgcHJvcGVydHkgaW52YWxpZCBvciBtaXNzaW5nXG4iKTsKPiArCQlyZXQgPSAt RUlOVkFMOwo+ICsJCWdvdG8gZXJyX3B1dF9jcHVfZGFpOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewo+ICsJCWNhcmQtPmRhaV9saW5rW2ldLmNw dV9kYWlfbmFtZSA9IE5VTEw7Cj4gKwkJY2FyZC0+ZGFpX2xpbmtbaV0uY3B1X25hbWUgPSBOVUxM Owo+ICsJCWNhcmQtPmRhaV9saW5rW2ldLnBsYXRmb3JtX25hbWUgPSBOVUxMOwo+ICsJCWNhcmQt PmRhaV9saW5rW2ldLmNvZGVjX29mX25vZGUgPSBjb2RlY19kYWlfbm9kZTsKPiArCQljYXJkLT5k YWlfbGlua1tpXS5jcHVfb2Zfbm9kZSA9IGNwdV9kYWlfbm9kZTsKPiArCQljYXJkLT5kYWlfbGlu a1tpXS5wbGF0Zm9ybV9vZl9ub2RlID0gY3B1X2RhaV9ub2RlOwo+ICsJfQo+ICsKPiArCXByaXYt PmNvZGVjX21jbGsxID0gb2ZfY2xrX2dldF9ieV9uYW1lKGNvZGVjX2RhaV9ub2RlLCAibWNsazEi KTsKPiArCWlmIChJU19FUlIocHJpdi0+Y29kZWNfbWNsazEpKSB7Cj4gKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gZ2V0IG1jbGsxIGNsb2NrXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKHByaXYt PmNvZGVjX21jbGsxKTsKPiArCQlnb3RvIGVycl9wdXRfY29kZWNfZGFpOwo+ICsJfQo+ICsKPiAr CS8qIG1jbGsyIGlzIG9wdGlvbmFsICovCj4gKwlwcml2LT5jb2RlY19tY2xrMiA9IG9mX2Nsa19n ZXRfYnlfbmFtZShjb2RlY19kYWlfbm9kZSwgIm1jbGsyIik7Cj4gKwlpZiAoSVNfRVJSKHByaXYt PmNvZGVjX21jbGsyKSkKPiArCQlkZXZfaW5mbyhkZXYsICJOb3QgdXNpbmcgbWNsazIgY2xvY2tc biIpOwo+ICsKPiArCXJldCA9IGRldm1fc25kX3NvY19yZWdpc3Rlcl9jb21wb25lbnQoZGV2LCAm dG0yX2NvbXBvbmVudCwKPiArCQkJCXRtMl9leHRfZGFpLCBBUlJBWV9TSVpFKHRtMl9leHRfZGFp KSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lz dGVyIGNvbXBvbmVudDogJWRcbiIsIHJldCk7Cj4gKwkJZ290byBlcnJfcHV0X21jbGs7Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gZGV2bV9zbmRfc29jX3JlZ2lzdGVyX2NhcmQoZGV2LCBjYXJkKTsKPiAr CWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2Fy ZDogJWRcbiIsIHJldCk7Cj4gKwkJZ290byBlcnJfcHV0X21jbGs7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gKwo+ICtlcnJfcHV0X21jbGs6Cj4gKwljbGtfcHV0KHByaXYtPmNvZGVjX21jbGsx KTsKPiArCWlmICghSVNfRVJSKHByaXYtPmNvZGVjX21jbGsyKSkKPiArCQljbGtfcHV0KHByaXYt PmNvZGVjX21jbGsyKTsKPiArZXJyX3B1dF9jb2RlY19kYWk6Cj4gKwlvZl9ub2RlX3B1dChjb2Rl Y19kYWlfbm9kZSk7Cj4gK2Vycl9wdXRfY3B1X2RhaToKPiArCW9mX25vZGVfcHV0KGNwdV9kYWlf bm9kZSk7Cj4gK2Vycl9wdXRfYW1wOgo+ICsJb2Zfbm9kZV9wdXQoY2FyZC0+YXV4X2RldlswXS5j b2RlY19vZl9ub2RlKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdG0y X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qgc25k X3NvY19jYXJkICpjYXJkID0gJnRtMl9jYXJkOwo+ICsJc3RydWN0IHRtMl9tYWNoaW5lX3ByaXYg KnByaXYgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEoY2FyZCk7Cj4gKwo+ICsJY2xrX3B1dChw cml2LT5jb2RlY19tY2xrMSk7Cj4gKwlpZiAoIUlTX0VSUihwcml2LT5jb2RlY19tY2xrMikpCj4g KwkJY2xrX3B1dChwcml2LT5jb2RlY19tY2xrMik7Cj4gKwo+ICsJb2Zfbm9kZV9wdXQoY2FyZC0+ ZGFpX2xpbmtbMF0uY29kZWNfb2Zfbm9kZSk7Cj4gKwlvZl9ub2RlX3B1dChjYXJkLT5kYWlfbGlu a1swXS5jcHVfb2Zfbm9kZSk7Cj4gKwlvZl9ub2RlX3B1dChjYXJkLT5hdXhfZGV2WzBdLmNvZGVj X29mX25vZGUpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRtMl9z dXNwZW5kX2xhdGUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qgc25kX3NvY19j YXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJcmV0dXJuIHRtMl9zdG9w X3N5c2NsayhjYXJkKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0bTJfcmVzdW1lX2Vhcmx5KHN0 cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCXJldHVybiB0bTJfc3RhcnRfc3lzY2xrKGNhcmQp Owo+ICt9Cj4gKwo+ICtjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0bTJfcG1fb3BzID0gewo+ICsJ LnN1c3BlbmQJPSBzbmRfc29jX3N1c3BlbmQsCj4gKwkuc3VzcGVuZF9sYXRlCT0gdG0yX3N1c3Bl bmRfbGF0ZSwKPiArCS5yZXN1bWUJCT0gc25kX3NvY19yZXN1bWUsCj4gKwkucmVzdW1lX2Vhcmx5 CT0gdG0yX3Jlc3VtZV9lYXJseSwKPiArCS5mcmVlemUJCT0gc25kX3NvY19zdXNwZW5kLAo+ICsJ LnRoYXcJCT0gc25kX3NvY19yZXN1bWUsCj4gKwkucG93ZXJvZmYJPSBzbmRfc29jX3Bvd2Vyb2Zm LAo+ICsJLnJlc3RvcmUJPSBzbmRfc29jX3Jlc3VtZSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRtMl9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJs ZSA9ICJzYW1zdW5nLHRtMi1hdWRpbyIgfSwKPiArCXsgfSwKPiArfTsKPiArTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgdG0yX29mX21hdGNoKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIHRtMl9kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lCQk9ICJ0bTIt YXVkaW8iLAo+ICsJCS5wbQkJPSAmdG0yX3BtX29wcywKPiArCQkub2ZfbWF0Y2hfdGFibGUJPSB0 bTJfb2ZfbWF0Y2gsCj4gKwl9LAo+ICsJLnByb2JlCT0gdG0yX3Byb2JlLAo+ICsJLnJlbW92ZQk9 IHRtMl9yZW1vdmUsCj4gK307Cj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIodG0yX2RyaXZlcik7 Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJJbmhhIFNvbmcgPGlkZWFsLnNvbmdAc2Ftc3VuZy5jb20+ Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgRXh5bm9zIFRNMiBBdWRpbyBTdXBw b3J0Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiAtLQo+IDEuOS4xCj4gCj4gLS0K PiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3Jp YmUgbGludXgtc2Ftc3VuZy1zb2MiIGluCj4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9y ZG9tb0B2Z2VyLmtlcm5lbC5vcmcKPiBNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdl ci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwKPiAKPiAKPiAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFsc2EtZGV2ZWwgbWFpbGluZyBsaXN0 CkFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZwpodHRwOi8vbWFpbG1hbi5hbHNhLXByb2plY3Qu b3JnL21haWxtYW4vbGlzdGluZm8vYWxzYS1kZXZlbAo=